diff options
Diffstat (limited to 'graphics/pstricks/contrib/pedigree')
58 files changed, 38644 insertions, 0 deletions
diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/LICENSE b/graphics/pstricks/contrib/pedigree/pedigree-perl/LICENSE new file mode 100644 index 0000000000..f90922eea3 --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/LICENSE @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Lesser General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + <one line to give the program's name and a brief idea of what it does.> + Copyright (C) <year> <name of author> + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + <signature of Ty Coon>, 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/Makefile b/graphics/pstricks/contrib/pedigree/pedigree-perl/Makefile new file mode 100644 index 0000000000..446d533238 --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/Makefile @@ -0,0 +1,57 @@ +# +# Makefile for pedigree +# $Id: Makefile,v 2.2 2007-07-29 19:52:51 boris Exp $ +# +# This file is in public domain +# + +PREFIX = /usr/local + +PERLSCRIPTS=pedigree.pl + +PERLLIBS = \ + Pedigree.pm + +MANPAGES1=${PERLSCRIPTS:%.pl=%.1} +MANPAGES3=${PERLLIBS:%.pm=%.3} + + +all: man + cd Pedigree; ${MAKE} $@ + +man: ${MANPAGES1} ${MANPAGES3} + +docs: + cd doc; ${MAKE} all + +install: all + install pedigree.pl $(PREFIX)/bin/pedigree + mkdir -p $(PREFIX)/lib/site_perl + install -m 644 ${PERLLIBS} $(PREFIX)/lib/site_perl + cd Pedigree; ${MAKE} $@ + +installman: + install -m 644 pedigree.1 $(PREFIX)/man/man1 + for x in ${MANPAGES3}; do install -m 644 $$x $(PREFIX)/man/man3/$$x; done + cd Pedigree; ${MAKE} $@ + +%.1: %.pl + pod2man --section=1 -n $* -s 1 $< $@ + +%.3: %.pm + pod2man --section=3 -n $* -s 3 $< $@ + +clean: + cd doc; ${MAKE} $@ + cd Pedigree; ${MAKE} $@ + +distclean: clean + $(RM) ${MANPAGES1} ${MANPAGES3} + cd doc; ${MAKE} $@ + cd Pedigree; ${MAKE} $@ + +# +# Archive for the distribution. Includes typeset documentation and man pages +# +archive: all docs clean + tar -czvf pedigree.tgz --exclude '*~' --exclude '*.tgz' --exclude CVS . diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/NEWS b/graphics/pstricks/contrib/pedigree/pedigree-perl/NEWS new file mode 100644 index 0000000000..3e8d5ad7b2 --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/NEWS @@ -0,0 +1,21 @@ +pedigree NEWS: History of user interface changes + +Changes in v0.4, 2012/03/15 + +* Added TeXLive compatibility + +Changes in v0.3, 2007/07/31 + +* Added support for twins, infertility, abortions + +* Added support for multiple probands + +* Added (limited) support for consanguinic unions + +* Automatic scaling and rotation of large charts + +* Added support for additional node information on the chart + +* INCOMPATIBLE CHANGE: requires pst-pdgr v0.3 or later. + +This file is in public domain
\ No newline at end of file diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree.3 b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree.3 new file mode 100644 index 0000000000..e1f63a36a8 --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree.3 @@ -0,0 +1,174 @@ +.\" Automatically generated by Pod::Man 2.1801 (Pod::Simple 3.05) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.ie \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.el \{\ +. de IX +.. +.\} +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "Pedigree 3" +.TH Pedigree 3 "2007-07-09" "perl v5.10.0" "User Contributed Perl Documentation" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +Pedigree \- the main library for Pedigree. +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +use Pedigree; +.PP +\&\f(CW$node\fR = Pedigree\->MakeNode($params); +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +This is the main package for pedigree construction. It calls other +libraries in the Pedigree:: family +.Sp +.RS 4 +\&\fBMakeNode\fR(\fI\f(CI$params\fI\fR); +.Sp +Construct a new node from the given parameters. Check what kind of node +should we construct. +.RE +.SH "ENVIRONMENT" +.IX Header "ENVIRONMENT" +The calling program should define \fB\f(CB$main::DEBUG\fB\fR and set it to 0 +or 1. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fIpedigree\fR\|(1), +\&\fIPedigree::AbortionNode\fR\|(3), +\&\fIPedigree::Area\fR\|(3), +\&\fIPedigree::ChildlessNode\fR\|(3), +\&\fIPedigree::Language\fR\|(3), +\&\fIPedigree::MarriageNode\fR\|(3), +\&\fIPedigree::Node\fR\|(3), +\&\fIPedigree::Parser\fR\|(3), +\&\fIPedigree::PersonNode\fR\|(3), +\&\fIPedigree::TwinsNode\fR\|(3), +.SH "AUTHOR" +.IX Header "AUTHOR" +Boris Veytsman, Leila Akhmadeeva, 2007 +.SH "POD ERRORS" +.IX Header "POD ERRORS" +Hey! \fBThe above document had some coding errors, which are explained below:\fR +.IP "Around line 18:" 4 +.IX Item "Around line 18:" +You can't have =items (as at line 46) unless the first thing after the =over is an =item diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree.pm b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree.pm new file mode 100644 index 0000000000..c92a027b86 --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree.pm @@ -0,0 +1,112 @@ +=pod + +=head1 NAME + +Pedigree - the main library for Pedigree. + +=head1 SYNOPSIS + +use Pedigree; + +$node = Pedigree->MakeNode($params); + +=head1 DESCRIPTION + +This is the main package for pedigree construction. It calls other +libraries in the Pedigree:: family + +=over 4 + +=cut + + + +#################################################################### +# Define the package # +#################################################################### + +package Pedigree; +use Pedigree::AbortionNode; +use Pedigree::Area; +use Pedigree::ChildlessNode; +use Pedigree::Language; +use Pedigree::MarriageNode; +use Pedigree::Node; +use Pedigree::Parser; +use Pedigree::PersonNode; +use Pedigree::TwinsNode; +use strict; + +#################################################################### +# MakeNode # +#################################################################### + +=pod + +=item B<MakeNode>(I<$params>); + +Construct a new node from the given parameters. Check what kind of node +should we construct. + +=cut + +sub MakeNode { + my ($class,$params)=@_; + + my $self; + + if ($params->{'Name'} =~ s/^\#//) { + if ($params->{'Name'} eq 'abortion') { + $self=new Pedigree::AbortionNode(%{$params}); + } elsif ($params->{'Name'} eq 'childless') { + $self=new Pedigree::ChildlessNode(%{$params}); + } else { + print STDERR "Unknown special name: ", $params->{'Name'}, + "\n"; + } + } else { + $self=new Pedigree::PersonNode(%{$params}); + } + return $self; + +} + + + + +#################################################################### +# THE END # +#################################################################### + +=pod + +=back + +=head1 ENVIRONMENT + +The calling program should define B<$main::DEBUG> and set it to 0 +or 1. + +=head1 SEE ALSO + +pedigree(1), +Pedigree::AbortionNode(3), +Pedigree::Area(3), +Pedigree::ChildlessNode(3), +Pedigree::Language(3), +Pedigree::MarriageNode(3), +Pedigree::Node(3), +Pedigree::Parser(3), +Pedigree::PersonNode(3), +Pedigree::TwinsNode(3), + + +=head1 AUTHOR + +Boris Veytsman, Leila Akhmadeeva, 2007 + + + +=cut + +1; diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/AbortionNode.3 b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/AbortionNode.3 new file mode 100644 index 0000000000..1d1569d08d --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/AbortionNode.3 @@ -0,0 +1,177 @@ +.\" Automatically generated by Pod::Man 2.1801 (Pod::Simple 3.05) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.ie \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.el \{\ +. de IX +.. +.\} +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "Pedigree::AbortionNode 3" +.TH Pedigree::AbortionNode 3 "2007-07-22" "perl v5.10.0" "User Contributed Perl Documentation" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +Pedigree::AbortionNode \- an abortion in a pedigree +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +use Pedigree::AbortionNode; +.PP +\&\f(CW$node\fR = new Pedigree::AbortionNode(\fI\f(CI%params\fI\fR); +.PP +\&\f(CW$node\fR\->DrawNode(\fI\f(CI$xidst\fI\fR, \fI\f(CI$ydist\fI\fR, \fI\f(CI$belowtextfont\fI\fR, \fI\f(CI$abovetextfont\fI\fR, +\&\fI\f(CI@fieldsfornode\fI\fR); +.PP +\&\f(CW$node\fR\->PrintLegend(\fI\f(CI$land\fI\fR, \fI\f(CI@fields\fI\fR); +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +This package contains data about an abortion. Abortion is like a person, +but it cannot have kids, and it is drawn differently +.Sp +.RS 4 +\&\fBDrawNode\fR(\fI\f(CI$xdist\fI\fR, \fI\f(CI$ydist\fI\fR, \fI\f(CI$belowtextfont\fI\fR, \fI\f(CI$abovetextfont\fI\fR, +\&\fI\f(CI@fieldsfornode\fI\fR); +.Sp +Output the command to draw this node. The parameters are +distances between the nodes (in cm) and fields for abovetext. +.Sp +\&\fBPrintLegend\fR(\fI\f(CI$lang\fI\fR, \fI\f(CI@fields\fI\fR); +.Sp +Print the legend for the given node, including \fI\f(CI@fields\fI\fR in the given +language \fI\f(CI$lang\fI\fR, and excluding the fields, that have no meaning for +this node. +.RE +.SH "ENVIRONMENT" +.IX Header "ENVIRONMENT" +The calling program should define \fB\f(CB$main::DEBUG\fB\fR and set it to 0 +or 1. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fIpedigree\fR\|(1), \fIPedigree\fR\|(3) +.SH "AUTHOR" +.IX Header "AUTHOR" +Boris Veytsman, Leila Akhmadeeva, 2007 +.SH "POD ERRORS" +.IX Header "POD ERRORS" +Hey! \fBThe above document had some coding errors, which are explained below:\fR +.IP "Around line 23:" 4 +.IX Item "Around line 23:" +You can't have =items (as at line 46) unless the first thing after the =over is an =item diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/AbortionNode.pm b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/AbortionNode.pm new file mode 100644 index 0000000000..df56988c16 --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/AbortionNode.pm @@ -0,0 +1,148 @@ +=pod + +=head1 NAME + +Pedigree::AbortionNode - an abortion in a pedigree + +=head1 SYNOPSIS + +use Pedigree::AbortionNode; + +$node = new Pedigree::AbortionNode(I<%params>); + +$node->DrawNode(I<$xidst>, I<$ydist>, I<$belowtextfont>, I<$abovetextfont>, +I<@fieldsfornode>); + +$node->PrintLegend(I<$land>, I<@fields>); + +=head1 DESCRIPTION + +This package contains data about an abortion. Abortion is like a person, +but it cannot have kids, and it is drawn differently + +=over 4 + +=cut + + + +#################################################################### +# Define the package # +#################################################################### + +package Pedigree::AbortionNode; +use Pedigree; +use strict; +our @ISA=('Pedigree::PersonNode'); + + + +#################################################################### +# DrawNode # +#################################################################### + +=pod + +=item B<DrawNode>(I<$xdist>, I<$ydist>, I<$belowtextfont>, I<$abovetextfont>, +I<@fieldsfornode>); + +Output the command to draw this node. The parameters are +distances between the nodes (in cm) and fields for abovetext. + +=cut + +sub DrawNode { + my $self=shift; + my ($xdist, $ydist, $belowtextfont, $abovetextfont, @fieldsfornode) = @_; + my $result = '\rput('.($xdist*$self->GetAbsX()).", ". + ($ydist*$self->GetAbsY()).'){\pstAbortion['; + my @opts=($self->Condition(), + 'belowtext={'."$belowtextfont ".$self->GetGenName().'}'); + if ($self->Type() eq 'sab') { + push @opts, 'sab'; + } + my @abovetext; + if ($self->Sex() ne 'unknown') { + push @abovetext, $self->Sex(); + } + foreach my $field (@fieldsfornode) { + if (($field ne 'Sex') && ($field ne 'Name')) { + push @abovetext, $self->{$field}; + } + } + if (scalar @abovetext) { + push @opts,'abovetext={'."$abovetextfont ".join('; ',@abovetext).'}'; + } + $result .= join(', ',@opts); + $result .= ']{'.$self->Id()."}}\n"; + return $result; +} + +#################################################################### +# PrintLegend # +#################################################################### + +=pod + +=item B<PrintLegend>(I<$lang>, I<@fields>); + +Print the legend for the given node, including I<@fields> in the given +language I<$lang>, and excluding the fields, that have no meaning for +this node. + + +=cut + +sub PrintLegend { + my ($self, $lang, @fields) = @_; + my $result = '\item['.$self->GetGenName().'] '; + my @desc; + foreach my $field (@fields) { + if (exists $self->{$field} && ($field ne 'DoD') && + ($field ne 'AgeAtDeath')) { + my $res = $lang->PrintField($field, $self->{$field}); + if (length($res)>0) { + push @desc, $res; + } + } + } + $result .= join ("; ",@desc); + $result .= ".\n"; + # + # We print only the nodes, for which there is an information + # + if (scalar @desc) { + return $result; + } + return; +} + + + +#################################################################### +# THE END # +#################################################################### + +=pod + +=back + +=head1 ENVIRONMENT + +The calling program should define B<$main::DEBUG> and set it to 0 +or 1. + +=head1 SEE ALSO + +pedigree(1), Pedigree(3) + + +=head1 AUTHOR + +Boris Veytsman, Leila Akhmadeeva, 2007 + + + +=cut + +1; diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Area.3 b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Area.3 new file mode 100644 index 0000000000..c200cbbf0f --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Area.3 @@ -0,0 +1,251 @@ +.\" Automatically generated by Pod::Man 2.1801 (Pod::Simple 3.05) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.ie \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.el \{\ +. de IX +.. +.\} +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "Pedigree::Area 3" +.TH Pedigree::Area 3 "2007-07-08" "perl v5.10.0" "User Contributed Perl Documentation" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +Pedigree::Area \- Calculate the area taken by a tree or a clump +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +use Pedigree::Area; +.PP +\&\f(CW$area\fR = new Pedigree::Area($node); +.PP +\&\f(CW$Ymin\fR=$area\->\fIGetYmin()\fR; +.PP +\&\f(CW$area\fR\->SetYmin($Ymin); +.PP +\&\f(CW$Ymax\fR=$area\->\fIGetYmax()\fR; +.PP +\&\f(CW$area\fR\->SetYmax($Ymax); +.PP +\&\f(CW$Xmin\fR=$area\->GetXmin($y); +.PP +\&\f(CW$area\fR\->SetXmin($y,$x); +.PP +\&\f(CW$Xmax\fR=$area\->GetXmax($y); +.PP +\&\f(CW$area\fR\->SetXmax($y,$x); +.PP +\&\f(CW$area\fR\->AddRight($otherarea); +.PP +\&\f(CW$area\fR\->AddLeft($otherarea); +.PP +\&\f(CW$rootnode\fR=$area\->\fIGetRootNode()\fR; +.PP +\&\f(CW$area\fR\->MoveLowerLayers($x); +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The algorithm of \fIpedigree\fR\|(1) uses the notion of area: a part of +a picture taken by a tree or a clump. This package implements this +notion. +.PP +Each Area has \fBrootnode\fR \- the reference node for all calculations. +All distances are calculated as relative to the coordinates of the +\&\fBrootnode\fR. +.PP +The units are distances between the nodes in X and Y direction. The +Y axis is \fIdownward\fR: the earlier generations have smaller Y +coordinates. +.Sp +.RS 4 +\&\fBnew\fR(\fI\f(CI$rootnode\fI\fR); +.Sp +Construct a new area around the given rootnode +.Sp +\&\fBGetYmin\fR(); +.Sp +Get the lower bound of the area. +.Sp +\&\fBSetYmin\fR(\fI\f(CI$y\fI\fR); +.Sp +Set the lower bound of the area. +.Sp +\&\fBGetYmax\fR(); +.Sp +Get the upper bound of the area. +.Sp +\&\fBSetYmax\fR(\fI\f(CI$y\fI\fR); +.Sp +Set the upper bound of the area. +.Sp +\&\fBGetXmin\fR(\fI\f(CI$y\fI\fR); +.Sp +Get the minimal X coordinate of the area on the level Y. +.Sp +\&\fBSetXmin\fR(\fI\f(CI$y\fI, \f(CI$x\fI\fR); +.Sp +Set the minimal X coordinate of the area on the level Y. +.Sp +\&\fBGetXmax\fR(\fI\f(CI$y\fI\fR); +.Sp +Get the maximal X coordinate of the area the the level Y. +.Sp +\&\fBSetXmax\fR(\fI\f(CI$y\fI, \f(CI$x\fI\fR); +.Sp +Set the maximal X coordinate of the area the the level Y. +.Sp +\&\fBAddRight\fR(\fI\f(CI$otherarea\fI\fR); +.Sp +Add the new area \fI\f(CI$otherarea\fI\fR to the given area at the right. The +\&\*(L"other area\*(R" should have a root node that is relative to our root +node. The relative Y of the other root node is used, the relative +X is set. +.Sp +\&\fBAddLeft\fR(\fI\f(CI$otherarea\fI\fR); +.Sp +Add the new area \fI\f(CI$otherarea\fI\fR to the given area at the left. The +\&\*(L"other area\*(R" should have a root node that is relative to our root +node. The relative Y of the other root node is used, the relative +X is set. +.Sp +\&\fBGetRootNode\fR(); +.Sp +Return the root node of the area. +.Sp +\&\fBMoveLowerLayers\fR(\fI\f(CI$x\fI\fR); +.Sp +Shift the lower layers (>0) of the area in the X direction by \fI\f(CI$x\fI\fR +.RE +.SH "ENVIRONMENT" +.IX Header "ENVIRONMENT" +The calling program should define \fB\f(CB$main::DEBUG\fB\fR and set it to 0 +or 1. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fIpedigree\fR\|(1), \fIPedigree\fR\|(3) +.SH "AUTHOR" +.IX Header "AUTHOR" +Boris Veytsman, Leila Akhmadeeva, 2006, 2007 +.SH "POD ERRORS" +.IX Header "POD ERRORS" +Hey! \fBThe above document had some coding errors, which are explained below:\fR +.IP "Around line 51:" 4 +.IX Item "Around line 51:" +You can't have =items (as at line 69) unless the first thing after the =over is an =item diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Area.pm b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Area.pm new file mode 100644 index 0000000000..12cda99deb --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Area.pm @@ -0,0 +1,452 @@ +=pod + +=head1 NAME + +Pedigree::Area - Calculate the area taken by a tree or a clump + +=head1 SYNOPSIS + +use Pedigree::Area; + +$area = new Pedigree::Area($node); + +$Ymin=$area->GetYmin(); + +$area->SetYmin($Ymin); + +$Ymax=$area->GetYmax(); + +$area->SetYmax($Ymax); + +$Xmin=$area->GetXmin($y); + +$area->SetXmin($y,$x); + +$Xmax=$area->GetXmax($y); + +$area->SetXmax($y,$x); + +$area->AddRight($otherarea); + +$area->AddLeft($otherarea); + +$rootnode=$area->GetRootNode(); + +$area->MoveLowerLayers($x); + +=head1 DESCRIPTION + +The algorithm of pedigree(1) uses the notion of area: a part of +a picture taken by a tree or a clump. This package implements this +notion. + +Each Area has B<rootnode> - the reference node for all calculations. +All distances are calculated as relative to the coordinates of the +B<rootnode>. + +The units are distances between the nodes in X and Y direction. The +Y axis is I<downward>: the earlier generations have smaller Y +coordinates. + +=over 4 + +=cut + +#################################################################### +# Define the package # +#################################################################### + +package Pedigree::Area; +use strict; + + +#################################################################### +# new # +#################################################################### + +=pod + +=item B<new>(I<$rootnode>); + +Construct a new area around the given rootnode + +=cut + +sub new { + my ($class, $node) = @_; + my $self={}; + # + # Top and bottom in the Y direction + # + $self->{'Ymin'}=0; + $self->{'Ymax'}=0; + # + # Hashes of Xmin and Xmax + # + $self->{'Xmin'}->{0}=0; + $self->{'Xmax'}->{0}=0; + $self->{'RootNode'}=$node; + bless ($self, $class); + return $self; + +} + +#################################################################### +# GetYmin # +#################################################################### + +=pod + +=item B<GetYmin>(); + +Get the lower bound of the area. + +=cut + +sub GetYmin { + my $self = shift; + return $self->{'Ymin'}; +} + +#################################################################### +# SetYmin # +#################################################################### + +=pod + +=item B<SetYmin>(I<$y>); + +Set the lower bound of the area. + +=cut + +sub SetYmin { + my $self = shift; + my $y=shift; + $self->{'Ymin'}=$y; + return $y; +} + +#################################################################### +# GetYmax # +#################################################################### + +=pod + +=item B<GetYmax>(); + +Get the upper bound of the area. + +=cut + +sub GetYmax { + my $self = shift; + return $self->{'Ymax'}; +} + +#################################################################### +# SetYmax # +#################################################################### + +=pod + +=item B<SetYmax>(I<$y>); + +Set the upper bound of the area. + +=cut + +sub SetYmax { + my $self = shift; + my $y=shift; + $self->{'Ymax'}=$y; + return $y; +} + +#################################################################### +# GetXmin # +#################################################################### + +=pod + +=item B<GetXmin>(I<$y>); + +Get the minimal X coordinate of the area on the level Y. + +=cut + +sub GetXmin { + my $self = shift; + my $y=shift; + return $self->{'Xmin'}->{$y}; +} + +#################################################################### +# SetXmin # +#################################################################### + +=pod + +=item B<SetXmin>(I<$y, $x>); + +Set the minimal X coordinate of the area on the level Y. + +=cut + +sub SetXmin { + my $self = shift; + my $y=shift; + my $x=shift; + $self->{'Xmin'}->{$y}=$x; + return $x; +} + +#################################################################### +# GetXmax # +#################################################################### + +=pod + +=item B<GetXmax>(I<$y>); + +Get the maximal X coordinate of the area the the level Y. + +=cut + +sub GetXmax { + my $self = shift; + my $y=shift; + return $self->{'Xmax'}->{$y}; +} + +#################################################################### +# SetXmax # +#################################################################### + +=pod + +=item B<SetXmax>(I<$y, $x>); + +Set the maximal X coordinate of the area the the level Y. + +=cut + +sub SetXmax { + my $self = shift; + my $y=shift; + my $x=shift; + $self->{'Xmax'}->{$y}=$x; + return $x; +} + + +#################################################################### +# AddRight # +#################################################################### + +=pod + +=item B<AddRight>(I<$otherarea>); + +Add the new area I<$otherarea> to the given area at the right. The +"other area" should have a root node that is relative to our root +node. The relative Y of the other root node is used, the relative +X is set. + +=cut + +sub AddRight { + my ($self, $other) = @_; + my $deltaY = $other->GetRootNode()->GetRelY(); + + # + # First, we calculate the intersection of two areas + # It is between max(Y_{min,1}, Y_{min,2}+deltaY) + # and min(Y_{max,1}, Y_{max,2}+deltaY) + # + my $intMin=$self->GetYmin(); + if ($other->GetYmin()+$deltaY > $intMin) { + $intMin = $other->GetYmin()+$deltaY; + } + my $intMax = $self->GetYmax(); + if ($other->GetYmax()+$deltaY < $intMax) { + $intMax=$other->GetYmax()+$deltaY; + } + + # + # Now we are ready to calculate relative X shift + # + my $deltaX=0; + for (my $y=$intMin; $y<=$intMax; $y++) { + my $x0 = $self->GetXmax($y); + my $x1 = $other->GetXmin($y-$deltaY); + if ($x1 + $deltaX - $x0 <1) { + $deltaX = 1 + $x0 - $x1; + } + } + # + # And set the relative X + # + $other->GetRootNode()->SetRelX($deltaX); + + # + # Now we recalculate our area + # + for (my $y=$intMin; $y<=$intMax; $y++) { + $self->SetXmax($y, $other->GetXmax($y-$deltaY) + $deltaX); + } + if ($other->GetYmin()+$deltaY < $self->GetYmin()) { + for (my $y=$other->GetYmin()+$deltaY; $y<$self->GetYmin(); $y++) { + $self->SetXmin($y, $other->GetXmin($y-$deltaY)+$deltaX); + $self->SetXmax($y, $other->GetXmax($y-$deltaY)+$deltaX); + } + $self->SetYmin($other->GetYmin()+$deltaY); + } + if ($other->GetYmax()+$deltaY > $self->GetYmax()) { + for (my $y=$self->GetYmax()+1; $y<=$other->GetYmax()+$deltaY; $y++) { + $self->SetXmin($y, $other->GetXmin($y-$deltaY)+$deltaX); + $self->SetXmax($y, $other->GetXmax($y-$deltaY)+$deltaX); + } + $self->SetYmax($other->GetYmax()+$deltaY); + } +} + +#################################################################### +# AddLeft # +#################################################################### + +=pod + +=item B<AddLeft>(I<$otherarea>); + +Add the new area I<$otherarea> to the given area at the left. The +"other area" should have a root node that is relative to our root +node. The relative Y of the other root node is used, the relative +X is set. + +=cut + +sub AddLeft { + my ($self, $other) = @_; + my $deltaY = $other->GetRootNode()->GetRelY(); + + # + # First, we calculate the intersection of two areas + # It is between max(Y_{min,1}, Y_{min,2}+deltaY) + # and min(Y_{max,1}, Y_{max,2}+deltaY) + # + my $intMin=$self->GetYmin(); + if ($other->GetYmin()+$deltaY > $intMin) { + $intMin = $other->GetYmin()+$deltaY; + } + my $intMax = $self->GetYmax(); + if ($other->GetYmax()+$deltaY < $intMax) { + $intMax=$other->GetYmax()+$deltaY; + } + + # + # Now we are ready to calculate relative X shift + # + my $deltaX=0; + for (my $y=$intMin; $y<=$intMax; $y++) { + my $x0 = $other->GetXmax($y-$deltaY); + my $x1 = $self->GetXmin($y); + if ($x1 + $deltaX - $x0 <1) { + $deltaX = 1 + $x0 - $x1; + } + } + # + # And set the relative X + # + $other->GetRootNode()->SetRelX(-$deltaX); + + # + # Now we recalculate our area + # + for (my $y=$intMin; $y<=$intMax; $y++) { + $self->SetXmin($y, $other->GetXmin($y-$deltaY) - $deltaX); + } + if ($other->GetYmin()+$deltaY < $self->GetYmin()) { + for (my $y=$other->GetYmin()+$deltaY; $y<$self->GetYmin(); $y++) { + $self->SetXmin($y, $other->GetXmin($y-$deltaY)-$deltaX); + $self->SetXmax($y, $other->GetXmax($y-$deltaY)-$deltaX); + } + $self->SetYmin($other->GetYmin()+$deltaY); + } + if ($other->GetYmax()+$deltaY > $self->GetYmax()) { + for (my $y=$self->GetYmax()+1; $y<=$other->GetYmax()+$deltaY; $y++) { + $self->SetXmin($y, $other->GetXmin($y-$deltaY)-$deltaX); + $self->SetXmax($y, $other->GetXmax($y-$deltaY)-$deltaX); + } + $self->SetYmax($other->GetYmax()+$deltaY); + } +} + +#################################################################### +# GetRootNode # +#################################################################### + +=pod + +=item B<GetRootNode>(); + +Return the root node of the area. + +=cut + +sub GetRootNode { + my $self = shift; + return $self->{'RootNode'}; +} + +#################################################################### +# MoveLowerLayers # +#################################################################### + +=pod + +=item B<MoveLowerLayers>(I<$x>); + +Shift the lower layers (>0) of the area in the X direction by I<$x> + +=cut + +sub MoveLowerLayers { + my $self = shift; + my $x=shift; + for (my $y=-1; $y>=$self->GetYmin; $y--) { + $self->SetXmin($y, $self->GetXmin($y)+$x); + $self->SetXmax($y, $self->GetXmax($y)+$x); + } + return 0; +} + + + +#################################################################### +# THE END # +#################################################################### + + +=pod + +=back + +=head1 ENVIRONMENT + +The calling program should define B<$main::DEBUG> and set it to 0 +or 1. + +=head1 SEE ALSO + +pedigree(1), Pedigree(3) + +=head1 AUTHOR + +Boris Veytsman, Leila Akhmadeeva, 2006, 2007 + + + +=cut + +1; diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/ChildlessNode.3 b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/ChildlessNode.3 new file mode 100644 index 0000000000..0051778ed5 --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/ChildlessNode.3 @@ -0,0 +1,181 @@ +.\" Automatically generated by Pod::Man 2.1801 (Pod::Simple 3.05) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.ie \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.el \{\ +. de IX +.. +.\} +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "Pedigree::ChildlessNode 3" +.TH Pedigree::ChildlessNode 3 "2007-07-22" "perl v5.10.0" "User Contributed Perl Documentation" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +Pedigree::ChildlessNode \- an abortion in a pedigree +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +use Pedigree::ChildlessNode; +.PP +\&\f(CW$node\fR = new Pedigree::ChildlessNode(\fI\f(CI%params\fI\fR); +.PP +\&\f(CW$node\fR\->DrawNode(\fI\f(CI$xidst\fI\fR, \fI\f(CI$ydist\fI\fR, \fI\f(CI$belowtextfont\fI\fR, \fI\f(CI$abovetextfont\fI\fR, +\&\fI\f(CI@fieldsfornode\fI\fR); +.PP +\&\f(CW$node\fR\->PrintLegend(\fI\f(CI$land\fI\fR, \fI\f(CI@fields\fI\fR); +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +This package contains data about a \*(L"childlessness\*(R" node. This node +is not numbered in pedigree. +.Sp +.RS 4 +\&\fBnew\fR(\fI\f(CI%params\fI\fR); +.Sp +Construct a new node from the given parameters. +.Sp +\&\fBDrawNode\fR(\fI\f(CI$xdist\fI\fR, \fI\f(CI$ydist\fI\fR, \fI\f(CI$belowtextfont\fI\fR, \fI\f(CI$abovetextfont\fI\fR, +\&\fI\f(CI@fieldsfornode\fI\fR); +.Sp +Output the command to draw this node. The parameters are +distances between the nodes (in cm) and fields for abovetext (not used +here). We only print the Comment field below the node, and draw this +node higher than other nodes. +.Sp +\&\fBPrintLegend\fR(\fI\f(CI$lang\fI\fR, \fI\f(CI@fields\fI\fR); +.Sp +This subroutine does nothing since childlessness has no legend. +.RE +.SH "ENVIRONMENT" +.IX Header "ENVIRONMENT" +The calling program should define \fB\f(CB$main::DEBUG\fB\fR and set it to 0 +or 1. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fIpedigree\fR\|(1), \fIPedigree\fR\|(3) +.SH "AUTHOR" +.IX Header "AUTHOR" +Boris Veytsman, Leila Akhmadeeva, 2007 +.SH "POD ERRORS" +.IX Header "POD ERRORS" +Hey! \fBThe above document had some coding errors, which are explained below:\fR +.IP "Around line 24:" 4 +.IX Item "Around line 24:" +You can't have =items (as at line 45) unless the first thing after the =over is an =item diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/ChildlessNode.pm b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/ChildlessNode.pm new file mode 100644 index 0000000000..db4b1c985b --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/ChildlessNode.pm @@ -0,0 +1,150 @@ +=pod + +=head1 NAME + +Pedigree::ChildlessNode - an abortion in a pedigree + +=head1 SYNOPSIS + +use Pedigree::ChildlessNode; + +$node = new Pedigree::ChildlessNode(I<%params>); + +$node->DrawNode(I<$xidst>, I<$ydist>, I<$belowtextfont>, I<$abovetextfont>, +I<@fieldsfornode>); + +$node->PrintLegend(I<$land>, I<@fields>); + + +=head1 DESCRIPTION + +This package contains data about a "childlessness" node. This node +is not numbered in pedigree. + +=over 4 + +=cut + + + +#################################################################### +# Define the package # +#################################################################### + +package Pedigree::ChildlessNode; +use Pedigree; +use strict; +our @ISA=('Pedigree::PersonNode'); + +#################################################################### +# new # +#################################################################### + +=pod + +=item B<new>(I<%params>); + +Construct a new node from the given parameters. + +=cut + +sub new { + my ($class,%params)=@_; + my $self=$class->SUPER::new(%params); + if (!ref($self)) { + return 0; + } + + # + # These nodes are NOT numbered in pedigrees + # + + $self->{'Numbered'}=0; + + return $self; + +} + + +#################################################################### +# DrawNode # +#################################################################### + +=pod + +=item B<DrawNode>(I<$xdist>, I<$ydist>, I<$belowtextfont>, I<$abovetextfont>, +I<@fieldsfornode>); + +Output the command to draw this node. The parameters are +distances between the nodes (in cm) and fields for abovetext (not used +here). We only print the Comment field below the node, and draw this +node higher than other nodes. + +=cut + +sub DrawNode { + my $self=shift; + my ($xdist, $ydist, $belowtextfont, $abovetextfont, @fieldsfornode) = @_; + my $result = '\rput('.($xdist*$self->GetAbsX()).", ". + ($ydist*($self->GetAbsY()+0.6)).'){\pstChildless['; + my @opts=('belowtextrp=t'); + if ($self->{'Comment'}) { + push @opts, + 'belowtext={'."$belowtextfont ".$self->{'Comment'}.'}'; + } + if ($self->Type() eq 'infertile') { + push @opts, 'infertile'; + } + if (scalar @opts) { + $result .= join(', ',@opts); + } + $result .= ']{'.$self->Id()."}}\n"; + return $result; +} + +#################################################################### +# PrintLegend # +#################################################################### + +=pod + +=item B<PrintLegend>(I<$lang>, I<@fields>); + +This subroutine does nothing since childlessness has no legend. + +=cut + +sub PrintLegend { + + return; +} + + + +#################################################################### +# THE END # +#################################################################### + +=pod + +=back + +=head1 ENVIRONMENT + +The calling program should define B<$main::DEBUG> and set it to 0 +or 1. + +=head1 SEE ALSO + +pedigree(1), Pedigree(3) + + +=head1 AUTHOR + +Boris Veytsman, Leila Akhmadeeva, 2007 + + + +=cut + +1; diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Language.3 b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Language.3 new file mode 100644 index 0000000000..2b3059bd7b --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Language.3 @@ -0,0 +1,212 @@ +.\" Automatically generated by Pod::Man 2.1801 (Pod::Simple 3.05) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.ie \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.el \{\ +. de IX +.. +.\} +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "Pedigree::Language 3" +.TH Pedigree::Language 3 "2007-10-21" "perl v5.10.0" "User Contributed Perl Documentation" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +Pedigree::Language \- encapsulating language issues for pedigree library +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +use Pedigree::Language; +.PP +\&\f(CW$lang\fR = new Pedigree::Language(\fI\f(CI$language\fI\fR[, \fI\f(CI$encoding\fI\fR]); +.PP +\&\f(CW$lang\fR\->\fIHeader()\fR; +.PP +\&\f(CW$lang\fR\->\fILanguage()\fR; +.PP +\&\f(CW$lang\fR\->\fIEncoding()\fR; +.PP +\&\f(CW$lang\fR\->\fIGetFieldNames()\fR; +.PP +\&\f(CW$lang\fR\->\fIGetValues()\fR; +.PP +\&\f(CW$lang\fR\->\fIGetSpecialNames()\fR; +.PP +\&\f(CW$lang\fR\->PrintField(\fI\f(CI$field\fI\fR, $<$value>); +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +This package defines the language-dependent parts of the pedigree +library. The idea is to gather everything about language here, so adding +a new language should be (presumably) be easy. +.Sp +.RS 4 +\&\fBnew\fR(\fI\f(CI$language\fI\fR[, \fI\f(CI$encoding\fI\fR]); +.Sp +Construct the new interpreter from the given language and encoding names. +.Sp +\&\fBHeader\fR () +.Sp +Print the language-related lines of the document preamble +.Sp +\&\fBLanguage\fR () +.Sp +Print the current language +.Sp +\&\fBEncoding\fR () +.Sp +Print the current encoding +.Sp +\&\fBGetFieldNames\fR(); +.Sp +Outputs a reference to a hash +\&\*(L"field_name_in_this_language\*(R"=>\*(L"field_name_in_English\*(R" +.Sp +\&\fBGetValues\fR(); +.Sp +Outputs a reference to a hash +\&\*(L"field_value_in_this_language\*(R"=>\*(L"field_value_in_English\*(R" +.Sp +\&\fBGetSpecialNames\fR(); +.Sp +Some values for the 'Name' field start with \f(CW\*(C`#\*(C'\fR. They are special. +This subroutine outputs a reference to a hash +\&\*(L"special_name_in_this_language\*(R"=>\*(L"special_name\*(R" +.Sp +\&\fBPrintField\fR(\fI\f(CI$field\fI\fR, \fI\f(CI$value\fI\fR); +.Sp +Formats the value \fI\f(CI$value\fI\fR of the given field \fI\f(CI$field\fI\fR according +to the rules of the given language. +.RE +.SH "ENVIRONMENT" +.IX Header "ENVIRONMENT" +The calling program should define \fB\f(CB$main::DEBUG\fB\fR and set it to 0 +or 1. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fIpedigree\fR\|(1), \fIPedigree\fR\|(3) +.SH "AUTHOR" +.IX Header "AUTHOR" +Boris Veytsman, Leila Akhmadeeva, 2006, 2007 +.SH "POD ERRORS" +.IX Header "POD ERRORS" +Hey! \fBThe above document had some coding errors, which are explained below:\fR +.IP "Around line 34:" 4 +.IX Item "Around line 34:" +You can't have =items (as at line 57) unless the first thing after the =over is an =item diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Language.pm b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Language.pm new file mode 100644 index 0000000000..bcae95d307 --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Language.pm @@ -0,0 +1,459 @@ +=pod + +=head1 NAME + +Pedigree::Language - encapsulating language issues for pedigree library + +=head1 SYNOPSIS + +use Pedigree::Language; + +$lang = new Pedigree::Language(I<$language>[, I<$encoding>]); + +$lang->Header(); + +$lang->Language(); + +$lang->Encoding(); + +$lang->GetFieldNames(); + +$lang->GetValues(); + +$lang->GetSpecialNames(); + +$lang->PrintField(I<$field>, $<$value>); + + +=head1 DESCRIPTION + +This package defines the language-dependent parts of the pedigree +library. The idea is to gather everything about language here, so adding +a new language should be (presumably) be easy. + +=over 4 + +=cut + +#################################################################### +# Define the package # +#################################################################### + +package Pedigree::Language; +use strict; + +# +# And package methods +# + + +#################################################################### +# new # +#################################################################### + +=pod + + +=item B<new>(I<$language>[, I<$encoding>]); + +Construct the new interpreter from the given language and encoding names. + +=cut + + +sub new { + my $self={}; + my ($class,$language,$encoding)=@_; + $self->{'language'}=$language; + if (!defined($encoding) && ($language eq 'russian')) { + $encoding='cp1251'; + } + if (defined($encoding)) { + $self->{encoding}=$encoding; + } + bless $self, $class; + return ($self); +} + + +#################################################################### +# Header # +#################################################################### + + +=pod + +=item B<Header> () + +Print the language-related lines of the document preamble + +=cut + +sub Header { + my $self=shift; + my $result; + if ($self->Encoding()) { + $result .= '\usepackage['.$self->Encoding().']{inputenc}'."\n"; + } + if (!($self->Language() eq 'english')) { + $result .= '\usepackage['.$self->Language().']{babel}'."\n"; + } + return $result; + +} + + +#################################################################### +# Language # +#################################################################### + + +=pod + +=item B<Language> () + +Print the current language + +=cut + +sub Language { + my $self=shift; + return $self->{'language'}; +} + +#################################################################### +# Encoding # +#################################################################### + + +=pod + +=item B<Encoding> () + +Print the current encoding + +=cut + +sub Encoding { + my $self=shift; + return $self->{'encoding'}; +} + + +#################################################################### +# GetFieldNames # +#################################################################### + + +=pod + +=item B<GetFieldNames>(); + +Outputs a reference to a hash +"field_name_in_this_language"=>"field_name_in_English" + +=cut + +sub GetFieldNames() { + my $self=shift; + my %result=(); + + # + # The English names are default + # + %result=( + 'Id'=>'Id', + 'Name'=>'Name', + 'Sex'=>'Sex', + 'DoB'=>'DoB', + 'DoD'=>'DoD', + 'Mother'=>'Mother', + 'Father'=>'Father', + 'Proband'=>'Proband', + 'Condition'=>'Condition', + 'Type'=>'Type', + 'Twins'=>'Twins', + 'Comment'=>'Comment', + 'SortOrder'=>'SortOrder', + 'Sort'=>'SortOrder'); + + # + # Russian names depend on the encoding + # + if (($self->Language() eq 'russian') && ($self->Encoding() eq 'koi8-r')) { + $result{'éÄÅÎÔ'}='Id'; + $result{'æéï'}='Name'; + $result{'ðÏÌ'}='Sex'; + $result{'òÏÖÄ'}='DoB'; + $result{'õÍÅÒ'}='DoD'; + $result{'íÁÔØ'}='Mother'; + $result{'ïÔÅÃ'}='Father'; + $result{'ðÒÏÂÁÎÄ'}='Proband'; + $result{'óÏÓÔÏÑÎÉÅ'}='Condition'; + $result{'ôÉÐ'}='Type'; + $result{'âÌÉÚÎÅÃÙ'}='Twins'; + $result{'ëÏÍÍÅÎÔÁÒÉÊ'}='Comment'; + $result{'ðÏÒÑÄÏËóÏÒÔÉÒÏ×ËÉ'}='SortOrder'; + $result{'óÏÒÔ'}='SortOrder'; + } + if (($self->Language() eq 'russian') && ($self->Encoding() eq 'cp1251')) { + $result{'Èäåíò'}='Id'; + $result{'ÔÈÎ'}='Name'; + $result{'Ïîë'}='Sex'; + $result{'Ðîæä'}='DoB'; + $result{'Óìåð'}='DoD'; + $result{'Ìàòü'}='Mother'; + $result{'Îòåö'}='Father'; + $result{'Ïðîáàíä'}='Proband'; + $result{'Ñîñòîÿíèå'}='Condition'; + $result{'Òèï'}='Type'; + $result{'×íêÿïåçý'}='Twins'; + $result{'Êîììåíòàðèé'}='Comment'; + $result{'ÏîðÿäîêÑîðòèðîâêè'}='SortOrder'; + $result{'Ñîðò'}='SortOrder'; + } + + + return \%result; +} + +#################################################################### +# GetValues # +#################################################################### + + +=pod + +=item B<GetValues>(); + +Outputs a reference to a hash +"field_value_in_this_language"=>"field_value_in_English" + +=cut + +sub GetValues { + my $self=shift; + my %result=(); + + # + # The English values are default + # + %result=( + 'male'=>'male', + 'female'=>'female', + 'unknown'=>'unknown', + 'yes'=>1, + 'no'=>0, + 'normal'=>'normal', + 'obligatory'=>'obligatory', + 'oblig'=>'obligatory', + 'asymptomatic'=>'asymptomatic', + 'asymp'=>'asymptomatic', + 'affected'=>'affected', + 'affect'=>'affected', + 'infertile'=>'infertile', + 'Infertile'=>'infertile', + 'sab'=>'sab', + 'Sab'=>'sab', + 'monozygotic'=>'monozygotic', + 'monozygot'=>'monozygotic', + 'qzygotic'=>'qzygotic', + 'qzygot'=>'qzygotic', + '?'=>'qzygotic', + ); + + # + # Russian names depend on the encoding + # + if (($self->Language() eq 'russian') && ($self->Encoding() eq 'koi8-r')) { + $result{'ÍÕÖ'} = 'male'; + $result{'ÖÅÎ'} = 'female'; + $result{'Í'} = 'male'; + $result{'Ö'} = 'female'; + $result{'ÎÅÉÚ×'} = 'unknown'; + $result{'ÎÅÉÚ×ÅÓÔÎÏ'} = 'unknown'; + $result{'ÄÁ'} = 1; + $result{'ÎÅÔ'} = 0; + $result{'äÁ'} = 1; + $result{'îÅÔ'} = 0; + $result{'ÎÏÒÍ'} = 'normal'; + $result{'ÚÄÏÒÏ×'} = 'normal'; + $result{'ÏÂÌÉÇÁÔ'} = 'obligatory'; + $result{'ÁÓÉÍÐ'} = 'asymptomatic'; + $result{'ÂÏÌØÎ'} = 'affected'; + $result{'ÂÏÌÅÎ'} = 'affected'; + $result{'ÂÅÓÐÌÏÄÎ'} = 'infertile'; + $result{'×ÙËÉÄÙÛ'} = 'sab'; + $result{'ÏÄÎÏÑÊÃÅ×'} = 'monozygotic'; + $result{'ÍÏÎÏÚÉÇÏÔÎ'} = 'monozygotic'; + $result{'ÍÏÎÏÚÉÇ'} = 'monozygotic'; + $result{'ÄÉÚÉÇ'} = ''; + } + + if (($self->Language() eq 'russian') && ($self->Encoding() eq 'cp1251')) { + $result{'ìóæ'} = 'male'; + $result{'æåí'} = 'female'; + $result{'ì'} = 'male'; + $result{'æ'} = 'female'; + $result{'íåèçâ'} = 'unknown'; + $result{'íåèçâåñòíî'} = 'unknown'; + $result{'äà'} = 1; + $result{'íåò'} = 0; + $result{'Äà'} = 1; + $result{'Íåò'} = 0; + $result{'íîðì'} = 'normal'; + $result{'ÿäðôðþ'} = 'normal'; + $result{'îáëèãàò'} = 'obligatory'; + $result{'àñèìï'} = 'asymptomatic'; + $result{'áîëüí'} = 'affected'; + $result{'÷ðíåï'} = 'affected'; + $result{'÷åõòíðäï'} = 'infertile'; + $result{'þýìêäýù'} = 'sab'; + $result{'ðäïðóëçåþ'} = 'monozygotic'; + $result{'îðïðÿêúðæï'} = 'monozygotic'; + $result{'îðïðÿêú'} = 'monozygotic'; + $result{'äêÿêú'} = ''; + } + + return \%result; +} + +#################################################################### +# GetSpecialNames # +#################################################################### + + +=pod + +=item B<GetSpecialNames>(); + +Some values for the 'Name' field start with C<#>. They are special. +This subroutine outputs a reference to a hash +"special_name_in_this_language"=>"special_name" + +=cut + +sub GetSpecialNames { + my $self=shift; + my %result=(); + + # + # The English values are default + # + %result=( + 'abort'=>'abortion', + 'childless'=>'childless', + ); + + # + # Russian names depend on the encoding + # + if (($self->Language() eq 'russian') && ($self->Encoding() eq 'koi8-r')) { + $result{'ÁÂÏÒÔ'} = 'abortion'; + $result{'ÂÅÚÄÅÔÎ'} = 'childless'; + } + + if (($self->Language() eq 'russian') && ($self->Encoding() eq 'cp1251')) { + $result{'â÷ðôæ'} = 'abortion'; + $result{'÷åÿäåæï'} = 'childless'; + } + + return \%result; +} + + + +#################################################################### +# PrintField # +#################################################################### + + +=pod + +=item B<PrintField>(I<$field>, I<$value>); + +Formats the value I<$value> of the given field I<$field> according +to the rules of the given language. + +=cut + +sub PrintField { + my $self=shift; + my ($field, $value) = @_; + + + # + # The English values are default + # + + if ($self->Language() eq 'english') { + if ($field eq 'DoB' ) { + return "born: $value"; + } + if ($field eq 'DoD' ) { + return "died: $value"; + } + if ($field eq 'AgeAtDeath') { + return "age at death: $value"; + } + } + + if ($self->Language() eq 'russian') { + if ($value eq 'unknown') { + $value = '{\cyr\cyrn\cyre\cyri\cyrz\cyrv.}'; + } + if ($field eq 'DoB' ) { + return '{\cyr\cyrr\cyro\cyrd.}'." $value"; + } + if ($field eq 'DoD') { + return '{\cyr\cyru\cyrm.}'." $value"; + } + if ($field eq 'AgeAtDeath') { + return '{\cyr\cyru\cyrm. \cyrv{} \cyrv\cyro\cyrz\cyrr. }'." $value"; + } + # + # Special name + # + if ($field eq 'Name' && $value eq 'abortion') { + return '{\cyr\cyra\cyrb\cyro\cyrr\cyrt}'; + } + } + + + # + # The last resort + # + return $value; + + +} + + + +#################################################################### +# THE END # +#################################################################### + + +=pod + +=back + +=head1 ENVIRONMENT + +The calling program should define B<$main::DEBUG> and set it to 0 +or 1. + +=head1 SEE ALSO + +pedigree(1), Pedigree(3) + +=head1 AUTHOR + +Boris Veytsman, Leila Akhmadeeva, 2006, 2007 + + + +=cut + +1; diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Makefile b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Makefile new file mode 100644 index 0000000000..5afbb317dd --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Makefile @@ -0,0 +1,42 @@ +# +# Makefile for pedigree +# $Id: Makefile,v 2.4 2007-07-09 22:49:33 boris Exp $ +# +# This file is in public domain +# + +PREFIX = /usr/local + + +PERLLIBS = \ + AbortionNode.pm \ + Area.pm \ + ChildlessNode.pm \ + Language.pm \ + MarriageNode.pm \ + Node.pm \ + Parser.pm \ + PersonNode.pm \ + TwinsNode.pm + +MANPAGES3=${PERLLIBS:%.pm=%.3} + +all: man + +man: ${MANPAGES3} + +install: all + mkdir -p $(PREFIX)/lib/site_perl/Pedigree + install -m 644 ${PERLLIBS} $(PREFIX)/lib/site_perl/Pedigree + +installman: all + for x in ${MANPAGES3}; do install -m 644 $$x $(PREFIX)/man/man3/Pedigree::$$x; done + + +%.3: %.pm + pod2man --section=3 -n Pedigree::$* -s 3 $< $@ + +clean: + +distclean: clean + $(RM) *.3 diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/MarriageNode.3 b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/MarriageNode.3 new file mode 100644 index 0000000000..780588f4c1 --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/MarriageNode.3 @@ -0,0 +1,215 @@ +.\" Automatically generated by Pod::Man 2.1801 (Pod::Simple 3.05) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.ie \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.el \{\ +. de IX +.. +.\} +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "Pedigree::MarriageNode 3" +.TH Pedigree::MarriageNode 3 "2007-07-15" "perl v5.10.0" "User Contributed Perl Documentation" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +Pedigree::MarriageNode \- a marriage in a pedigree +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +use Pedigree::MarriageNode; +.PP +\&\f(CW$node\fR = new Pedigree::MarriageNode(\fI\f(CI%params\fI\fR); +.PP +\&\f(CW$FSpouse\fR = \f(CW$node\fR\->\fIFSpouse()\fR; +.PP +\&\f(CW$MSpouse\fR = \f(CW$node\fR\->\fIMSpouse()\fR; +.PP +\&\f(CW$consang\fR = \f(CW$self\fR\->\fIisConsanguinic()\fR; +.PP +\&\f(CW$area\fR = \f(CW$node\fR\->\fISetArea()\fR; +.PP +\&\f(CW$node\fR\->CalcAbsCoord(\fI\f(CI$x\fI\fR, \fI\f(CI$y\fI\fR); +.PP +\&\f(CW$node\fR\->DrawNode(\fI\f(CI$xidst\fI\fR, \fI\f(CI$ydist\fI\fR, \fI\f(CI$belowtextfont\fI\fR, \fI\f(CI$abovetextfont\fI\fR, +\&\fI\f(CI@fieldsfornode\fI\fR); +.PP +\&\f(CW$node\fR\->\fIDrawConnections()\fR; +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +This package contains data about a marriage. +.Sp +.RS 4 +\&\fBnew\fR(\fI\f(CI%params\fI\fR); +.Sp +Construct a new node from the given parameters. +.Sp +\&\fBFSpouse\fR(); +.Sp +Get female spouse of a node. +.Sp +\&\fBMSpouse\fR(); +.Sp +Get female spouse of a node. +.Sp +\&\fBisConsanguinic\fR(); +.Sp +Check whether the node is consanguinic +.Sp +\&\fBSetArea\fR(); +.Sp +Calculate relative coordinates for all nodes, that are descendants of +the given node \fIand\fR the spouses that form the marriage. We create a +\&\fIPedigree::Area\fR\|(3) around the given node and recursively apply the +function to all descendants. The subroutine +returns the reference to the created area. +.Sp +\&\fBCalcAbsCoor\fR(\fI\f(CI$x\fI\fR, $<y>); +.Sp +Set the absolute coordinates of the given node, if the absolute +coordinates of the parent node are (\fI\f(CI$x\fI\fR, \fI\f(CI$y\fI\fR), and recursively +do this for all descendants of this node, and right and left clumps. +.Sp +\&\fBDrawNode\fR(\fI\f(CI$xdist\fI\fR, \fI\f(CI$ydist\fI\fR, \fI\f(CI$belowtextfont\fI\fR, \fI\f(CI$abovetextfont\fI\fR, +\&\fI\f(CI@fieldsfornode\fI\fR); +.Sp +Output the command to draw this node. The parameters are +distances between the nodes (in cm). +.Sp +\&\fBDrawConnections\fR(); +.Sp +Draw the connections from the given node to its descendants and +the spouses +.RE +.SH "ENVIRONMENT" +.IX Header "ENVIRONMENT" +The calling program should define \fB\f(CB$main::DEBUG\fB\fR and set it to 0 +or 1. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fIpedigree\fR\|(1), \fIPedigree\fR\|(3) +.SH "AUTHOR" +.IX Header "AUTHOR" +Boris Veytsman, Leila Akhmadeeva, 2006, 2007 +.SH "POD ERRORS" +.IX Header "POD ERRORS" +Hey! \fBThe above document had some coding errors, which are explained below:\fR +.IP "Around line 33:" 4 +.IX Item "Around line 33:" +You can't have =items (as at line 55) unless the first thing after the =over is an =item diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/MarriageNode.pm b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/MarriageNode.pm new file mode 100644 index 0000000000..39e20bf58f --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/MarriageNode.pm @@ -0,0 +1,346 @@ +=pod + +=head1 NAME + +Pedigree::MarriageNode - a marriage in a pedigree + +=head1 SYNOPSIS + +use Pedigree::MarriageNode; + +$node = new Pedigree::MarriageNode(I<%params>); + +$FSpouse = $node->FSpouse(); + +$MSpouse = $node->MSpouse(); + +$consang = $self->isConsanguinic(); + +$area = $node->SetArea(); + +$node->CalcAbsCoord(I<$x>, I<$y>); + +$node->DrawNode(I<$xidst>, I<$ydist>, I<$belowtextfont>, I<$abovetextfont>, +I<@fieldsfornode>); + +$node->DrawConnections(); + + +=head1 DESCRIPTION + +This package contains data about a marriage. + +=over 4 + +=cut + + + +#################################################################### +# Define the package # +#################################################################### + +package Pedigree::MarriageNode; +use Pedigree; +use strict; +our @ISA=('Pedigree::Node'); + + +#################################################################### +# new # +#################################################################### + +=pod + +=item B<new>(I<%params>); + +Construct a new node from the given parameters. + +=cut + +sub new { + my ($class,%params)=@_; + my $self=$class->SUPER::new(%params); + if (!ref($self)) { # Bad node + return 0; + } + + bless ($self,$class); + + # + # Normally marriage nodes are not consanguinic + # + if (!exists($self->{'Consanguinic'})) { + $self->{'Consanguinic'} = 0; + } + + # After we constructed the node, we want to move the kids + # from the parent nodes to the marriage node + + my $selfId = $self->{'Id'}; + if (exists($self->{'FSpouse'}) && exists($self->{'MSpouse'})) { + my $fspouse = $self->{'FSpouse'}; + my $fspouseId = $fspouse->Id(); + my $mspouse = $self->{'MSpouse'}; + my $mspouseId = $mspouse->Id(); + + + foreach my $kidId (keys %{$self->{'kids_by_parent_id'}->{$fspouseId}}) { + if ($main::DEBUG) { + print STDERR "Checking kid $kidId for $selfId\n"; + } + if (exists ($self->{'kids_by_parent_id'}->{$mspouseId}->{$kidId})) { + if ($main::DEBUG) { + print STDERR + "Moving $kidId from $fspouseId and $mspouseId to ". + "$selfId\n"; + } + delete $self->{'kids_by_parent_id'}->{$mspouseId}->{$kidId}; + delete $self->{'kids_by_parent_id'}->{$fspouseId}->{$kidId}; + $self->{'kids_by_parent_id'}->{$selfId}->{$kidId}=1; + } + } + } + + return $self; +} + + +#################################################################### +# FSpouse # +#################################################################### + +=pod + +=item B<FSpouse>(); + +Get female spouse of a node. + +=cut + +sub FSpouse { + my $self = shift; + return $self->{'FSpouse'}; +} + + +#################################################################### +# MSpouse # +#################################################################### + +=pod + +=item B<MSpouse>(); + +Get female spouse of a node. + +=cut + +sub MSpouse { + my $self = shift; + return $self->{'MSpouse'}; +} + +#################################################################### +# isConsanguinic # +#################################################################### + +=pod + +=item B<isConsanguinic>(); + +Check whether the node is consanguinic + +=cut + +sub isConsanguinic { + my $self = shift; + return $self->{'Consanguinic'}; +} + + +#################################################################### +# SetArea # +#################################################################### + +=pod + +=item B<SetArea>(); + +Calculate relative coordinates for all nodes, that are descendants of +the given node I<and> the spouses that form the marriage. We create a +Pedigree::Area(3) around the given node and recursively apply the +function to all descendants. The subroutine +returns the reference to the created area. + +=cut + +sub SetArea { + my $self = shift; + my $area = $self->SUPER::SetArea(); + + # + # Female is to the right, male is to the left unless we have + # Sort Order set for anybody. If it is set, the order + # is OPPOSITE to the SortOrder + # + my ($left,$right) = ($self->MSpouse(), $self->FSpouse()); + if ($left->SortOrder() <=> $right->SortOrder()) { + ($left,$right) = + sort {$a->SortOrder() <=> $b->SortOrder()} ($left,$right); + } + my ($rightRoot,$gen) = @{$right->FindRoot(0,-1)}; + $rightRoot->SetRelY($gen); + my $rightArea=$rightRoot->SetArea(); + $area->AddRight($rightArea); + + my ($leftRoot,$gen) = @{$left->FindRoot(0,1)}; + $leftRoot->SetRelY($gen); + my $leftArea=$leftRoot->SetArea(); + $area->AddLeft($leftArea); + + $self->{'Area'}=$area; + + if ($main::DEBUG) { + print STDERR "Setting area for marriage node ",$self->Id(),"\n"; + for (my $y=$area->GetYmin(); $y<=$area->GetYmax(); $y++) { + print STDERR "\t$y: ", $area->GetXmin($y), ", ", + $area->GetXmax($y), "\n"; + } + } + + + return $area; +} + + +#################################################################### +# CalcAbsCoor # +#################################################################### + +=pod + +=item B<CalcAbsCoor>(I<$x>, $<y>); + +Set the absolute coordinates of the given node, if the absolute +coordinates of the parent node are (I<$x>, I<$y>), and recursively +do this for all descendants of this node, and right and left clumps. + +=cut + +sub CalcAbsCoor { + my $self=shift; + my ($x,$y) = @_; + $self->SUPER::CalcAbsCoor($x, $y); + $x += $self->GetRelX(); + $y += $self->GetRelY(); + + my ($FRoot,undef) = @{$self->FSpouse()->FindRoot(0)}; + $FRoot->CalcAbsCoor($x, $y); + + my ($MRoot,undef) = @{$self->MSpouse()->FindRoot(0)}; + $MRoot->CalcAbsCoor($x, $y); + + return 0; +} + + +#################################################################### +# DrawNode # +#################################################################### + +=pod + +=item B<DrawNode>(I<$xdist>, I<$ydist>, I<$belowtextfont>, I<$abovetextfont>, +I<@fieldsfornode>); + +Output the command to draw this node. The parameters are +distances between the nodes (in cm). + +=cut + +sub DrawNode { + my $self=shift; + my ($xdist, $ydist, $belowtextfont, $abovetextfont, @fieldsfornode) = @_; + my $result = '\rput('.($xdist*$self->GetAbsX()).", ". + ($ydist*$self->GetAbsY()).'){\pnode{'. + $self->Id()."}}\n"; + return $result; +} + +#################################################################### +# DrawConnections # +#################################################################### + +=pod + +=item B<DrawConnections>(); + +Draw the connections from the given node to its descendants and +the spouses + +=cut + +sub DrawConnections { + my $self = shift; + my $xdist = shift; + my $ydist = shift; + my $result = $self->SUPER::DrawConnections($xdist, $ydist); + my $Id=$self->Id(); + my $style=""; + if ($self->isConsanguinic()) { + $style='doubleline=true, '; + } + foreach my $spouse ($self->FSpouse(), $self->MSpouse()) { + if (!ref($spouse)) { + next; + } + my $sId=$spouse->Id(); + # Check whether spouse nodes are adjacent to the marriage node. + # We do this check only for non-consanguinic unions + if (!($self->isConsanguinic()) && + (abs($self->GetIndexX() - $spouse->GetIndexX()) > 1)) { + my ($nodeA,$nodeB) = sort + {$a->GetIndexX() <=> $b->GetIndexX()} ($spouse, $self); + my $IdA=$nodeA->Id(); + my $IdB=$nodeB->Id(); + $result .= + "\\ncloop[$style angleA=0, angleB=180, loopsize=". + 0.4*$ydist . ', arm=' . 0.4*$xdist . + ']{'.$IdA.'}{'.$IdB.'}'."\n"; + } else { + $result .= "\\ncline[$style]{".$Id.'}{'.$sId.'}'."\n"; + } + } + return $result; +} + + + + +#################################################################### +# THE END # +#################################################################### + +=pod + +=back + +=head1 ENVIRONMENT + +The calling program should define B<$main::DEBUG> and set it to 0 +or 1. + +=head1 SEE ALSO + +pedigree(1), Pedigree(3) + +=head1 AUTHOR + +Boris Veytsman, Leila Akhmadeeva, 2006, 2007 + + + +=cut + +1; diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Node.3 b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Node.3 new file mode 100644 index 0000000000..0c6dba5c79 --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Node.3 @@ -0,0 +1,379 @@ +.\" Automatically generated by Pod::Man 2.1801 (Pod::Simple 3.05) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.ie \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.el \{\ +. de IX +.. +.\} +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "Pedigree::Node 3" +.TH Pedigree::Node 3 "2009-01-05" "perl v5.10.0" "User Contributed Perl Documentation" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +Pedigree::Node \- the base package for nodes in pedigree charts +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +use Pedigree::Node; +.PP +\&\f(CW$node\fR = new Pedigree::Node(\fI\f(CI%params\fI\fR); +.PP +\&\f(CW$node\fR\->\fICheckAllParents()\fR; +.PP +\&\f(CW$Id\fR = \f(CW$node\fR\->\fIId()\fR; +.PP +\&\f(CW$node\fR\->SetSortOrder(\-1|0|1); +.PP +\&\f(CW$result\fR = \f(CW$node\fR\->\fISortOrder()\fR; +.PP +\&\f(CW$is_numbered\fR=$node\->\fIisNumbered()\fR; +.PP +\&\f(CW$type\fR = \f(CW$node\fR\->\fIType()\fR; +.PP +\&\f(CW$Kids\fR = \f(CW$node\fR\->\fIKids()\fR; +.PP +\&\f(CW$node\fR\->\fIGetAndSortKids()\fR; +.PP +($root, \f(CW$newgen\fR) = \f(CW$node\fR\->FindRoot(\fI\f(CI$generation\fI\fR, [\fI\f(CI$sort_order\fI\fR]); +.PP +\&\f(CW$x\fR = \f(CW$node\fR\->\fIGetRelX()\fR; +.PP +\&\f(CW$y\fR = \f(CW$node\fR\->\fIGetRelY()\fR; +.PP +\&\f(CW$node\fR\->SetRelX(\fI\f(CI$x\fI\fR); +.PP +\&\f(CW$node\fR\->SetRelX(\fI\f(CI$y\fI\fR); +.PP +\&\f(CW$x\fR = \f(CW$node\fR\->\fIGetAbsX()\fR; +.PP +\&\f(CW$y\fR = \f(CW$node\fR\->\fIGetAbsY()\fR; +.PP +\&\f(CW$node\fR\->SetIndexX(\fI\f(CI$n\fI\fR); +.PP +\&\f(CW$node\fR\->SetAbsX(\fI\f(CI$x\fI\fR); +.PP +\&\f(CW$node\fR\->SetAbsY(\fI\f(CI$y\fI\fR); +.PP +\&\f(CW$n\fR = \f(CW$node\fR\->\fIGetIndexX()\fR; +.PP +\&\f(CW$area\fR = \f(CW$node\fR\->\fISetArea()\fR; +.PP +\&\f(CW$delta\fR = \f(CW$node\fR\->\fICenterKids()\fR; +.PP +\&\f(CW$node\fR\->CalcAbsCoord(\fI\f(CI$x\fI\fR, \fI\f(CI$y\fI\fR); +.PP +\&\f(CW$node\fR\->\fIAddConsanguinicMarriages()\fR; +.PP +\&\f(CW$node\fR\->AddTwins($ydist); +.PP +\&\f(CW$frame\fR = \f(CW$node\fR\->SetFrame(\fI\f(CI$xdist\fI\fR, \fI\f(CI$ydist\fI\fR); +.PP +\&\f(CW$node\fR\->DrawAll(\fI\f(CI$xdist\fI\fR, \fI\f(CI$ydist\fI\fR, \fI\f(CI$belowtextfont\fI\fR, \fI\f(CI$abovetextfont\fI\fR, + \fI\f(CI@fieldsfornode\fI\fR); +.PP +\&\f(CW$node\fR\->\fIDrawConnections()\fR; +.PP +\&\f(CW$node\fR\->PrintAllLegends(\fI\f(CI$land\fI\fR, \fI\f(CI@fields\fI\fR); +.PP +\&\f(CW$node\fR\->PrintLegend(\fI\f(CI$land\fI\fR, \fI\f(CI@fields\fI\fR); +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +This is the basic package that defines nodes for pedigrees. +\&\fIPedigree::PersonNode\fR\|(3) and \fIPedigree::MarriageNode\fR\|(3) inherit from +this package. +.Sp +.RS 4 +\&\fBnew\fR(\fI\f(CI%params\fI\fR); +.Sp +Construct a new node from the given parameters. If a node with +the give Id exists, add new information to the node. +.Sp +\&\fBCheckAllParents\fR(); +.Sp +Check whether mothers and fathers of all nodes exist +.Sp +\&\fBId\fR(); +.Sp +Get Id of a node. Note that there is no way to set an Id of a node +that was already created. +.Sp +\&\fBSetSortOrder\fR(\fI\-1|0|1\fR); +.Sp +Normally the sibs nodes are sorted by age. However, if the nodes or +their descendants are connected by a marriage line, we must sort them +in the special way: all way to the left or all way to the right. The +procedure \fBSetSortOrder\fR sets this flag for the node or deletes it +depending on the argument. +.Sp +\&\fBSortOrder\fR(); +.Sp +Normally the sibs nodes are sorted by age. However, if the nodes or +their descendants are connected by a marriage line, we must sort them +in the special way: all way to the left or all way to the right. The +procedure \fBSortOrder\fR checks this flag. +.Sp +\&\fBisNumbered\fR(); +.Sp +Check whether the node should be numbered in pedigree +.Sp +\&\fBType\fR() +.Sp +Return node type. +.Sp +\&\fBKids\fR(); +.Sp +Get the reference to the array of kids +.Sp +\&\fBGetAndSortKids\fR(); +.Sp +Apply sort the array of kids for the given node +.Sp +\&\fBFindRoot\fR(\fI\f(CI$generation\fI\fR, [\fI\f(CI$sort_order\fI\fR]); +.Sp +Finds the root of the tree to which the current node belongs. +Takes the current generation number and returns the root and its +generation number. Here generation numbers go \*(L"backwards\*(R": the older +generations have higher numbers. The found node is assigned sort order +\&\fI\f(CI$sort_order\fI\fR. +.Sp +\&\fBGetRelX\fR(); +.Sp +Find the relative x coordinate of the node. The coordinate is +relative to the precedessor or to the marriage node, which connects +this node to the proband +.Sp +\&\fBGetRelY\fR(); +.Sp +Find the relative Y coordinate of the node. The coordinate is +relative to the precedessor or to the marriage node, which connects +this node to the proband. Note that the Y axis is down. +.Sp +\&\fBSetRelX\fR(\fI\f(CI$x\fI\fR); +.Sp +Set the relative x coordinate of the node. The coordinate is +relative to the precedessor or to the marriage node, which connects +this node to the proband. +.Sp +\&\fBSetRelY\fR(\fI\f(CI$y\fI\fR); +.Sp +Set the relative y coordinate of the node. The coordinate is +relative to the precedessor or to the marriage node, which connects +this node to the proband. Note that the Y axis is down. +.Sp +\&\fBGetAbsX\fR(); +.Sp +Find the absolute x coordinate of the node. +.Sp +\&\fBGetAbsY\fR(); +.Sp +Find the absolute Y coordinate of the node. +.Sp +\&\fBGetIndexX\fR(); +.Sp +Find the number of the node in the given generation. +.Sp +\&\fBSetAbsX\fR(\fI\f(CI$x\fI\fR); +.Sp +Set the absolute x coordinate of the node. +.Sp +\&\fBSetAbsY\fR(\fI\f(CI$y\fI\fR); +.Sp +Set the absolute y coordinate of the node. +.Sp +\&\fBSetIndexX\fR(\fI\f(CI$n\fI\fR); +.Sp +Set the number of the node in the given generation. +.Sp +\&\fBSetArea\fR(); +.Sp +Calculate relative coordinates for all nodes, that are descendants of +the given node. We create a \fIPedigree::Area\fR\|(3) around the given node +and recursively apply the function to all descendants. The subroutine +returns the reference to the created area. +.Sp +\&\fBCenterKids\fR(); +.Sp +Move the relative coordinates of all the kids of the given node +so the given node is centered in relation to the kids. Returns +the shift to be applied to the \fIPedigree::Area\fR\|(3). +.Sp +\&\fBCalcAbsCoor\fR(\fI\f(CI$x\fI\fR, $<y>); +.Sp +Set the absolute coordinates of the given node, if the absolute +coordinates of the parent node are (\fI\f(CI$x\fI\fR, \fI\f(CI$y\fI\fR), and recursively +do this for all descendants of this node. Additionally set up +\&\fB\f(CB%node_by_gen\fB\fR. +.Sp +\&\fBAddConsanguinicMarriages\fR(); +.Sp +Check the pedigree and add consanguinic marriages to it. Note +that this procedure must be called \fBafter\fR SetAbsCoor, so +the coordinates of all nodes are set. +.Sp +\&\fBAddTwins\fR(\fI\f(CI$ydist\fI\fR); +.Sp +Check the pedigree and add twin nodes. Note +that this procedure must be called \fBafter\fR SetAbsCoor and +AddConsanguinicMarriages. +.Sp +\&\fBSetFrame\fR(\fI\f(CI$xidst\fI\fR, \fI\f(CI$ydist\fI\fR); +.Sp +Calculate the frame: coordinates of the lower left and upper right +corners of the picture (in ps units). As a side effect, add generation +numbers to each person node and calculate the X index of each node. +.Sp +\&\fBDrawConnections\fR(); +.Sp +Draw the connections from the given node to its descendants +.Sp +\&\fBDrawAll\fR(\fI\f(CI$xdist\fI\fR, \fI\f(CI$ydist\fI\fR, \fI\f(CI$belowtextfont\fI\fR, + \fI\f(CI$abovetextfont\fI\fR, \fI\f(CI@fieldsfornode\fI\fR); +.Sp +Draw all nodes and connections in the form suitable for +pspicture +.Sp +\&\fBPrintAllLegends\fR(\fI\f(CI$lang\fI\fR, \fI\f(CI@fields\fI\fR); +.Sp +Print legend for all the nodes. The first parameter is the +language, the other is the fields to be included in the legend. +.Sp +\&\fBPrintLegend\fR(\fI\f(CI$lang\fI\fR, \fI\f(CI@fields\fI\fR); +.Sp +This subroutine does nothing: a generic node has no legend. It +is overriden by \fIPedigree::PersonNode\fR\|(3) and \fIPedigree::AbortionNode\fR\|(3). +.RE +.SH "ENVIRONMENT" +.IX Header "ENVIRONMENT" +The calling program should define \fB\f(CB$main::DEBUG\fB\fR and set it to 0 +or 1. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fIpedigree\fR\|(1), \fIPedigree\fR\|(3) +.SH "AUTHOR" +.IX Header "AUTHOR" +Boris Veytsman, Leila Akhmadeeva, 2006, 2007 +.SH "POD ERRORS" +.IX Header "POD ERRORS" +Hey! \fBThe above document had some coding errors, which are explained below:\fR +.IP "Around line 80:" 4 +.IX Item "Around line 80:" +You can't have =items (as at line 136) unless the first thing after the =over is an =item diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Node.pm b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Node.pm new file mode 100644 index 0000000000..445f92abaf --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Node.pm @@ -0,0 +1,1240 @@ +=pod + +=head1 NAME + +Pedigree::Node - the base package for nodes in pedigree charts + +=head1 SYNOPSIS + +use Pedigree::Node; + +$node = new Pedigree::Node(I<%params>); + +$node->CheckAllParents(); + +$Id = $node->Id(); + +$node->SetSortOrder(-1|0|1); + +$result = $node->SortOrder(); + +$is_numbered=$node->isNumbered(); + +$type = $node->Type(); + +$Kids = $node->Kids(); + +$node->GetAndSortKids(); + +($root, $newgen) = $node->FindRoot(I<$generation>, [I<$sort_order>]); + +$x = $node->GetRelX(); + +$y = $node->GetRelY(); + +$node->SetRelX(I<$x>); + +$node->SetRelX(I<$y>); + +$x = $node->GetAbsX(); + +$y = $node->GetAbsY(); + +$node->SetIndexX(I<$n>); + +$node->SetAbsX(I<$x>); + +$node->SetAbsY(I<$y>); + +$n = $node->GetIndexX(); + +$area = $node->SetArea(); + +$delta = $node->CenterKids(); + + +$node->CalcAbsCoord(I<$x>, I<$y>); + +$node->AddConsanguinicMarriages(); + +$node->AddTwins($ydist); + +$frame = $node->SetFrame(I<$xdist>, I<$ydist>); + + +$node->DrawAll(I<$xdist>, I<$ydist>, I<$belowtextfont>, I<$abovetextfont>, + I<@fieldsfornode>); + +$node->DrawConnections(); + +$node->PrintAllLegends(I<$land>, I<@fields>); + +$node->PrintLegend(I<$land>, I<@fields>); + +=head1 DESCRIPTION + +This is the basic package that defines nodes for pedigrees. +Pedigree::PersonNode(3) and Pedigree::MarriageNode(3) inherit from +this package. + +=over 4 + +=cut + +#################################################################### +# Define the package # +#################################################################### + +package Pedigree::Node; +use strict; +use Pedigree; + +#################################################################### +# package variables # +#################################################################### + +# +# The pool: %node_by_id keeps the relation between +# nodes and references +# + +our %node_by_id; + +# +# The hash %node_by_gen is a hash of hasehs. The keys +# are generation numbers (with zero being the root of pedigree), +# and the values are the hashes Id->node +# +our %node_by_gen; + +# +# The hash %kids_by_parent_id is a hash of hashes. The keys are +# Ids of parents. The hashes are $kid->1, where $kid is the kid id +# (NOT the kid node due to limitations of Perl) +# +our %kids_by_parent_id; + +# +# The array @twin_sets lists all twin nodes. Each twin node is +# a has with entries 'Type' and 'KidIds'. They store +# twins type (monozygotic, qzygotic or empty) and Ids of the +# kid nodes correspondingly (KidIds is actually a hash of +# node Ids). +# +our @twin_sets; + +#################################################################### +# And package methods # +#################################################################### + +#################################################################### +# new # +#################################################################### + +=pod + +=item B<new>(I<%params>); + +Construct a new node from the given parameters. If a node with +the give Id exists, add new information to the node. + +=cut + +sub new { + my ($class,%params)=@_; + + if (!exists($params{'Id'})) { + print STDERR "Warning: cannot create node from %params\n"; + return 0; + } + + my $Id=$params{'Id'}; + my $self; + if (exists($node_by_id{$Id})) { + $self=$node_by_id{$Id}; + } else { + $self={}; + bless ($self,$class); + $node_by_id{$Id}=$self; + } + + foreach my $key (keys %params) { + $self->{$key} = $params{$key}; + } + + # + # Calculate age at death + # + if (exists($self->{'DoB'}) && exists($self->{'DoD'})) { + $self->{'AgeAtDeath'} = 'unknown'; + if (($self->{'DoB'} ne 'unknown') && + ($self->{'DoD'} ne 'unknown')) { + my ($y1, $m1, $d1) = split /\./, $self->{'DoB'}; + my ($y2, $m2, $d2) = split /\./, $self->{'DoD'}; + $self->{'AgeAtDeath'} = int(($y2-$y1) + ($m2-$m1)/12 + + ($d2-$d1)/12/30); + } + } + + + # + # Only Person Nodes are numbered in pedigrees + # + $self->{'Numbered'}=0; + + # + # The field 'Kids' is special. This is a reference + # to an array filled by GetAndSortKids() + # + if (!exists($self->{'Kids'})) { + $self->{'Kids'}=[]; + } + + # + # Hashes %kids_by_parent_id + # + if (exists($self->{'Mother'})) { + my $parent = $self->{'Mother'}; + $kids_by_parent_id{$parent}->{$self->Id()}=1; + } + if (exists($self->{'Father'})) { + my $parent = $self->{'Father'}; + $kids_by_parent_id{$parent}->{$self->Id()}=1; + } + + # + # Add references to the hashes + # + + $self->{'node_by_id'} = \%node_by_id; + $self->{'node_by_gen'} = \%node_by_gen; + $self->{'kids_by_parent_id'} = \%kids_by_parent_id; + $self->{'twin_sets'} = \@twin_sets; + + # + # Initially the nodes are sorted by age only + # + if (!($self->{'SortOrder'})) { + $self->{'SortOrder'} = 0; + } + + + return $self; + +} + +#################################################################### +# CheckAllParents # +#################################################################### + +=pod + +=item B<CheckAllParents>(); + +Check whether mothers and fathers of all nodes exist + +=cut + +sub CheckAllParents { + my $self = shift; + + foreach my $parentId (keys %kids_by_parent_id) { + if (!exists($node_by_id{$parentId}) ) { + print STDERR + "Node $parentId does not exist and is listed as parent for nodes"; + foreach my $kidId (keys %{$kids_by_parent_id{$parentId}}) { + print STDERR " ", $kidId; + my $kid = $node_by_id{$kidId}; + if ($kid->{'Mother'} eq $parentId) { + delete $kid->{'Mother'}; + } + if ($kid->{'Father'} eq $parentId) { + delete $kid->{'Father'}; + } + } + print STDERR ". Deleting\n"; + delete $kids_by_parent_id{$parentId}; + } elsif ($main::DEBUG) { + print STDERR "Node $parentId is OK\n"; + } + } + + return 0; +} + + +#################################################################### +# Id # +#################################################################### + +=pod + +=item B<Id>(); + +Get Id of a node. Note that there is no way to set an Id of a node +that was already created. + +=cut + +sub Id { + my $self = shift; + return $self->{'Id'}; +} + +#################################################################### +# SetSortOrder # +#################################################################### + +=pod + +=item B<SetSortOrder>(I<-1|0|1>); + +Normally the sibs nodes are sorted by age. However, if the nodes or +their descendants are connected by a marriage line, we must sort them +in the special way: all way to the left or all way to the right. The +procedure B<SetSortOrder> sets this flag for the node or deletes it +depending on the argument. + +=cut + +sub SetSortOrder { + my $self = shift; + my $order = shift; + $self->{'SortOrder'}=$order; + return $order; +} + +#################################################################### +# SortOrder # +#################################################################### + +=pod + +=item B<SortOrder>(); + +Normally the sibs nodes are sorted by age. However, if the nodes or +their descendants are connected by a marriage line, we must sort them +in the special way: all way to the left or all way to the right. The +procedure B<SortOrder> checks this flag. + +=cut + +sub SortOrder { + my $self = shift; + return $self->{'SortOrder'}; +} + +#################################################################### +# isNumbered # +#################################################################### + +=pod + +=item B<isNumbered>(); + +Check whether the node should be numbered in pedigree + +=cut + +sub isNumbered { + my $self = shift; + return $self->{'Numbered'}; +} + +#################################################################### +# Type # +#################################################################### + +=pod + +=item B<Type>() + +Return node type. + +=cut + +sub Type { + my $self=shift; + return $self->{'Type'}; +} + + + +#################################################################### +# Kids # +#################################################################### + +=pod + +=item B<Kids>(); + +Get the reference to the array of kids + +=cut + +sub Kids { + my $self = shift; + return $self->{'Kids'}; +} + + +#################################################################### +# GetAndSortKids # +#################################################################### + +=pod + +=item B<GetAndSortKids>(); + +Apply sort the array of kids for the given node + +=cut + +sub GetAndSortKids { + my $self=shift; + my @kids; + my $Id = $self->Id(); + foreach my $kidId (keys %{$self->{'kids_by_parent_id'}->{$Id}}) { + push @kids, $self->{'node_by_id'}->{$kidId}; + } + @kids = sort by_sibs_order @kids; + $self->{'Kids'}=\@kids; + if ($main::DEBUG) { + print STDERR "Node ",$self->Id(),", Kids: "; + foreach my $kid (@{$self->Kids()}) { + print STDERR $kid->Id(), " "; + } + print STDERR "\n"; + } + return 0; +} + +#################################################################### +# FindRoot # +#################################################################### + +=pod + +=item B<FindRoot>(I<$generation>, [I<$sort_order>]); + +Finds the root of the tree to which the current node belongs. +Takes the current generation number and returns the root and its +generation number. Here generation numbers go "backwards": the older +generations have higher numbers. The found node is assigned sort order +I<$sort_order>. + +=cut + +sub FindRoot { + my ($self,$gen,$sort)=@_; + + if (defined $sort && !($self->SortOrder())) { + $self->SetSortOrder($sort); + } + + # If there are no parents, I am the root + if (!exists($self->{'Mother'}) && !exists($self->{'Father'})) { + my @result=($self,$gen); + return \@result; + } + + # If there are both parents, their union is the root + if (exists($self->{'Mother'}) && exists($self->{'Father'})) { + my $motherId=$self->{'Mother'}; + my $mother=$node_by_id{$motherId}; + my $fatherId=$self->{'Father'}; + my $father=$node_by_id{$fatherId}; + + + my $marriageId = $fatherId."_m_".$motherId; + my $marriage = + new Pedigree::MarriageNode ( + 'Id'=>$marriageId, + 'MSpouse'=>$father, + 'FSpouse'=>$mother + ); + if (defined $sort) { + $marriage->SetSortOrder($sort); + } + my @result = ($marriage,$gen+1); + return \@result; + } + + # Ok, only one parent is there. The search goes further + + my $parentId; + if (exists($self->{'Mother'})) { + $parentId=$self->{'Mother'}; + } else { + $parentId=$self->{'Father'}; + } + my $parent=$node_by_id{$parentId}; + return $parent->FindRoot($gen+1,$sort); +} + +#################################################################### +# GetRelX # +#################################################################### + +=pod + +=item B<GetRelX>(); + +Find the relative x coordinate of the node. The coordinate is +relative to the precedessor or to the marriage node, which connects +this node to the proband + +=cut + +sub GetRelX { + my $self = shift; + return $self->{'RelX'}; +} + +#################################################################### +# GetRelY # +#################################################################### + +=pod + +=item B<GetRelY>(); + +Find the relative Y coordinate of the node. The coordinate is +relative to the precedessor or to the marriage node, which connects +this node to the proband. Note that the Y axis is down. + +=cut + +sub GetRelY { + my $self = shift; + return $self->{'RelY'}; +} + + +#################################################################### +# SetRelX # +#################################################################### + +=pod + +=item B<SetRelX>(I<$x>); + +Set the relative x coordinate of the node. The coordinate is +relative to the precedessor or to the marriage node, which connects +this node to the proband. + +=cut + +sub SetRelX { + my ($self, $x) = @_; + $self->{'RelX'} = $x; + return 0; +} + +#################################################################### +# SetRelY # +#################################################################### + +=pod + +=item B<SetRelY>(I<$y>); + +Set the relative y coordinate of the node. The coordinate is +relative to the precedessor or to the marriage node, which connects +this node to the proband. Note that the Y axis is down. + +=cut + +sub SetRelY { + my ($self, $y) = @_; + $self->{'RelY'} = $y; + return 0; +} + +#################################################################### +# GetAbsX # +#################################################################### + +=pod + +=item B<GetAbsX>(); + +Find the absolute x coordinate of the node. + +=cut + +sub GetAbsX { + my $self = shift; + return $self->{'AbsX'}; +} + +#################################################################### +# GetAbsY # +#################################################################### + +=pod + +=item B<GetAbsY>(); + +Find the absolute Y coordinate of the node. + +=cut + +sub GetAbsY { + my $self = shift; + return $self->{'AbsY'}; +} + +#################################################################### +# GetIndexX # +#################################################################### + +=pod + +=item B<GetIndexX>(); + +Find the number of the node in the given generation. + +=cut + +sub GetIndexX { + my $self = shift; + return $self->{'IndexX'}; +} + + + +#################################################################### +# SetAbsX # +#################################################################### + +=pod + +=item B<SetAbsX>(I<$x>); + +Set the absolute x coordinate of the node. + +=cut + +sub SetAbsX { + my ($self, $x) = @_; + $self->{'AbsX'} = $x; + return 0; +} + +#################################################################### +# SetAbsY # +#################################################################### + +=pod + +=item B<SetAbsY>(I<$y>); + +Set the absolute y coordinate of the node. + +=cut + +sub SetAbsY { + my ($self, $y) = @_; + $self->{'AbsY'} = $y; + return 0; +} + + +#################################################################### +# SetIndexX # +#################################################################### + +=pod + +=item B<SetIndexX>(I<$n>); + +Set the number of the node in the given generation. + +=cut + +sub SetIndexX { + my ($self, $n) = @_; + $self->{'IndexX'} = $n; + return 0; +} + + + +#################################################################### +# SetArea # +#################################################################### + +=pod + +=item B<SetArea>(); + +Calculate relative coordinates for all nodes, that are descendants of +the given node. We create a Pedigree::Area(3) around the given node +and recursively apply the function to all descendants. The subroutine +returns the reference to the created area. + +=cut + +sub SetArea { + my $self = shift; + $self->GetAndSortKids(); + my $area = new Pedigree::Area ($self); + foreach my $kid (@{$self->Kids()}) { + my $kidarea = $kid->SetArea(); + $kid->SetRelY(-1); + $area->AddRight($kidarea); + } + # + # We want the node to be the center of siblings + # subtrees + # + my $deltaX=$self->CenterKids(); + $area->MoveLowerLayers($deltaX); + if ($main::DEBUG) { + print STDERR "Setting area for ",$self->Id(),"\n"; + for (my $y=$area->GetYmin(); $y<=$area->GetYmax(); $y++) { + print STDERR "\t$y: ", $area->GetXmin($y), ", ", + $area->GetXmax($y), "\n"; + } + } + $self->{'Area'} = $area; + return $area; +} + +#################################################################### +# CenterKids # +#################################################################### + +=pod + +=item B<CenterKids>(); + +Move the relative coordinates of all the kids of the given node +so the given node is centered in relation to the kids. Returns +the shift to be applied to the Pedigree::Area(3). + +=cut + +sub CenterKids { + my $self=shift; + my $nKids=scalar @{$self->Kids()}; + if ($nKids < 2) { # One or no kids - no need to center + return 0; + } + my $x0 = $self->Kids()->[0]->GetRelX(); + my $x1 = $self->Kids()->[$nKids-1]->GetRelX(); + my $delta = -($x0+$x1)/2; + foreach my $kid (@{$self->Kids()}) { + $kid->SetRelX($kid->GetRelX()+$delta); + } + return $delta; +} + + +#################################################################### +# CalcAbsCoor # +#################################################################### + +=pod + +=item B<CalcAbsCoor>(I<$x>, $<y>); + +Set the absolute coordinates of the given node, if the absolute +coordinates of the parent node are (I<$x>, I<$y>), and recursively +do this for all descendants of this node. Additionally set up +B<%node_by_gen>. + +=cut + +sub CalcAbsCoor { + my $self=shift; + my ($x,$y) = @_; + $x += $self->GetRelX(); + $y += $self->GetRelY(); + # + # Consanguinic kids may be already set + # + if (!exists($self->{'AbsY'}) || $self->{'AbsY'} > $y) { + $self->SetAbsX($x); + $self->SetAbsY($y); + foreach my $kid (@{$self->Kids()}) { + $kid->CalcAbsCoor($x,$y); + } + $node_by_gen{$y}->{$self->Id()}= $self; + if ($main::DEBUG) { + print STDERR "Abs Coords for ", $self->Id(), ": $x, $y\n"; + } + } else { + if ($main::DEBUG) { + print STDERR "Not setting abs coords for ",$self->Id(),"\n"; + } + } + + return 0; +} + + +#################################################################### +# AddConsanguinicMarriages # +#################################################################### + +=pod + +=item B<AddConsanguinicMarriages>(); + +Check the pedigree and add consanguinic marriages to it. Note +that this procedure must be called B<after> L<SetAbsCoor>, so +the coordinates of all nodes are set. + +=cut + +# +# This is rather a hack. Basically we think that a union is +# consanguinic if the spouses are already set in the pedigree. +# We check all kids which are in the pedigree and add those +# who have both mother and father that list them as kids. +# + +sub AddConsanguinicMarriages { + my $self = shift; + foreach my $gen (keys %node_by_gen) { + foreach my $kid (values %{$node_by_gen{$gen}}) { + if (!exists($kid->{'Mother'}) || + !exists($kid->{'Father'})) { + next; # kid + } + my $motherId=$kid->MotherId(); + my $fatherId=$kid->FatherId(); + my $mother=$node_by_id{$motherId}; + my $father=$node_by_id{$fatherId}; + if (!exists($mother->{'AbsX'}) || + !exists($father->{'AbsX'})) { + next; # kid + } + if (exists($node_by_id{$fatherId."_m_".$motherId})) { + next; # kid + } + # + # If we are here, we found a consangunic marriage! + # + if ($main::DEBUG) { + print STDERR "Found a consanguinic marriage between ", + "$fatherId and $motherId. The kid is ", + $kid->Id(), "\n"; + } + my $marriageId=$fatherId."_m_".$motherId; + my $marriage= + new Pedigree::MarriageNode ( + Id=>$marriageId, + 'Consanguinic'=>1, + 'FSpouse'=>$mother, + 'MSpouse'=>$father + ); + # + # We set up this node in the middle between father + # and mother + # + $marriage->SetAbsX(($father->GetAbsX()+$mother->GetAbsX())/2); + $marriage->SetAbsY(($father->GetAbsY()+$mother->GetAbsY())/2); + $node_by_gen{$marriage->GetAbsY()}->{$marriageId}= $marriage; + + # + # Repopulate parents' kids + # + $mother->GetAndSortKids(); + $father->GetAndSortKids(); + + # + # We would like to make the kids to belong to this marriage, + # but it might be wrong: it might be in the wrong generation! + # Let is check it + if (($marriage->GetAbsY() - $kid->GetAbsY()) == 1) { + $marriage->GetAndSortKids(); + } else { + # + # Ok, we need an additional node. It has the same + # abscissa as $marriage, but is one generation above kids + # + my $marriage1Id=$fatherId."_m1_".$motherId; + my $marriage1 = + new Pedigree::MarriageNode ( + Id=>$marriage1Id, + 'Consanguinic'=>1, + ); + $marriage1->SetAbsX($marriage->GetAbsX()); + $marriage1->SetAbsY(1+$kid->GetAbsY()); + $node_by_gen{$marriage1->GetAbsY()}->{$marriage1Id}= + $marriage1; + # + # Now we transfer kids + # + $kids_by_parent_id{$marriage1Id} = + $kids_by_parent_id{$marriageId}; + delete $kids_by_parent_id{$marriageId}; + $kids_by_parent_id{$marriageId}->{$marriage1Id}=1; + $marriage->GetAndSortKids(); + $marriage1->GetAndSortKids(); + } + } + } +} + + +#################################################################### +# AddTwins # +#################################################################### + +=pod + +=item B<AddTwins>(I<$ydist>); + +Check the pedigree and add twin nodes. Note +that this procedure must be called B<after> L<SetAbsCoor> and +L<AddConsanguinicMarriages>. + +=cut + +sub AddTwins { + my $self = shift; + my $ydist= shift; + # + # First, delete all kids from $twin_sets, for which there + # are no nodes + # + foreach my $set (@twin_sets) { + foreach my $kidId (keys %{$set->{'KidIds'}}) { + if (!exists($node_by_id{$kidId})) { + delete $set->{'KidIds'}->{$kidId}; + if ($main::DEBUG) { + print STDERR "Bad node \"$kidId\" in twin sets\n"; + } + } + } + } + + # + # Now we are ready to check for twins + # + foreach my $gen (keys %node_by_gen) { + foreach my $parentId (keys %{$node_by_gen{$gen}}) { + foreach my $kidId (keys %{$kids_by_parent_id{$parentId}}) { + for (my $i=0; $i<scalar @twin_sets; $i++) { + if (exists $twin_sets[$i]->{'KidIds'}->{$kidId}) { + my @kidIds = keys %{$twin_sets[$i]->{'KidIds'}}; + my $type = $twin_sets[$i]->{'Type'}; + my $twinsId = 't_'.join('_',@kidIds); + my $twinsNode = + Pedigree::TwinsNode->new ( + 'Id'=>$twinsId, + 'Type'=>$type, + 'ParentId'=>$parentId, + 'KidIds'=> + $twin_sets[$i]->{'KidIds'} + ); + # + # Change kids + # + my $parent = $node_by_id{$parentId}; + $parent->GetAndSortKids(); + $twinsNode->GetAndSortKids(); + + # + # Now the coordinates of the node. + # It is centered over kids nodes and 0.24 $ydist above + # + my @kids = sort {$a->GetAbsX() <=> + $b->GetAbsX()} + @{$twinsNode->Kids()}; + my $leftKid=$kids[0]; + my $rightKid=$kids[scalar(@kids)-1]; + $twinsNode->SetAbsX(($leftKid->GetAbsX() + + $rightKid->GetAbsX())/2.0); + $twinsNode->SetAbsY($leftKid->GetAbsY() + + 0.2*$ydist); + $node_by_gen{$twinsNode->GetAbsY()}-> + {$twinsId}= $twinsNode; + + # + # There is no need to keep this in the twins set + # + splice @twin_sets, $i,1; + last; # twin_sets + } + } + } + } + } + return 0; +} + + + + + +#################################################################### +# SetFrame # +#################################################################### + +=pod + +=item B<SetFrame>(I<$xidst>, I<$ydist>); + +Calculate the frame: coordinates of the lower left and upper right +corners of the picture (in ps units). As a side effect, add generation +numbers to each person node and calculate the X index of each node. + +=cut + +sub SetFrame { + my $self=shift; + my ($xdist, $ydist) = @_; + + my $xmin=0; + my $xmax=0; + + my @sorted_gens = sort {$b <=> $a} keys %node_by_gen; + my $ymin=$sorted_gens[(scalar @sorted_gens) -1]; + my $ymax=$sorted_gens[0]; + # + # The names of the nodes look like I:1, V:5. Let the + # first number be $i, and the second one be $j. + # IndexX is different from $j by the fact that marriage nodes + # are not skipped. + # + my $i=1; + foreach my $gen (@sorted_gens) { + my $roman=roman_num($i); + my @sorted_nodes = + sort {$a->GetAbsX() <=> $b->GetAbsX()} values %{$node_by_gen{$gen}}; + my $num_nodes= scalar @sorted_nodes; + if ($sorted_nodes[0]->GetAbsX()<$xmin) { + $xmin=$sorted_nodes[0]->GetAbsX(); + } + if ($sorted_nodes[$num_nodes-1]->GetAbsX()>$xmax) { + $xmax=$sorted_nodes[$num_nodes-1]->GetAbsX(); + } + my $j=1; + my $indexX=1; + foreach my $node (@sorted_nodes) { + $node->SetIndexX($indexX); + if ($main::DEBUG) { + print STDERR "Node ", $node->Id(), ", index ", + $node->GetIndexX(), "\n"; + } + $indexX++; + if ($node->isNumbered()) { + $node->SetGenName("$roman:$j"); + if ($main::DEBUG) { + print STDERR $node->Id(), ": ", $node->GetGenName(), + "\n"; + } + $j++; + } + } + # + # The fractional "generations" are for twin nodes + # and consanguinic marriage nodes. + # + if ($gen == int($gen)) { + $i++; + } + } + my @result = ($xdist*($xmin-1), $ydist*($ymin-1), + $xdist*($xmax+1), $ydist*($ymax+1)); + return \@result; +} + + + +#################################################################### +# DrawConnections # +#################################################################### + +=pod + +=item B<DrawConnections>(); + +Draw the connections from the given node to its descendants + +=cut + +sub DrawConnections { + my $self = shift; + my $xdist = shift; + my $ydist = shift; + my $result; + my $Id=$self->Id; + foreach my $kid (@{$self->Kids()}) { + my $kidId = $kid->Id(); + $result .= '\pstDescent{'.$Id.'}{'.$kidId.'}'."\n"; + } + return $result; +} + + + + + +#################################################################### +# DrawAll # +#################################################################### + +=pod + +=item B<DrawAll>(I<$xdist>, I<$ydist>, I<$belowtextfont>, + I<$abovetextfont>, I<@fieldsfornode>); + +Draw all nodes and connections in the form suitable for +pspicture + +=cut + +sub DrawAll { + my ($self, $xdist, $ydist, $belowtextfont, + $abovetextfont, @fieldsfornode) = @_; + + # + # Commands to draw nodes + # + my $nodes; + + # + # Commands to draw connections + # + my $connections; + + + foreach my $gen (keys %node_by_gen) { + foreach my $node (values %{$node_by_gen{$gen}}) { + # + # We draw only the nodes, who belong to the right + # generation (consanguinity may lead to duplicate nodes + # + # + if ($node->GetAbsY() <=> $gen) { + delete $node_by_gen{$gen}->{$node->Id()}; + next; + } + + $nodes .= $node->DrawNode($xdist, $ydist, + $belowtextfont, $abovetextfont, + @fieldsfornode); + $connections .=$node->DrawConnections($xdist, $ydist); + } + } + return $nodes.$connections; +} + +#################################################################### +# PrintAllLegends # +#################################################################### + +=pod + +=item B<PrintAllLegends>(I<$lang>, I<@fields>); + +Print legend for all the nodes. The first parameter is the +language, the other is the fields to be included in the legend. + +=cut + +sub PrintAllLegends { + my ($self, $lang, @fields) = @_; + + my $result="\n\\begin{description}\n"; + + foreach my $gen (sort {$b <=> $a} keys(%node_by_gen)) { + foreach my $node + (sort {$a->GetIndexX() <=> $b->GetIndexX()} + values(%{$node_by_gen{$gen}})) { + $result .= $node->PrintLegend($lang,@fields); + } + } + + $result .= "\\end{description}\n"; + + return $result; +} + + +#################################################################### +# PrintLegend # +#################################################################### + +=pod + +=item B<PrintLegend>(I<$lang>, I<@fields>); + +This subroutine does nothing: a generic node has no legend. It +is overriden by Pedigree::PersonNode(3) and Pedigree::AbortionNode(3). + +=cut + +sub PrintLegend { + + return; +} + + + + +#################################################################### +# by_sibs_order # +#################################################################### + +# +# Internal procedure for sorting kids +# + +sub by_sibs_order { + # + # We compare sort order, and if it is the same, DoB + # + return ($a->SortOrder() <=> $b->SortOrder()) || + ($a->DoB() cmp $b->DoB()); +} + +#################################################################### +# roman_num # +#################################################################### + +# +# Internal procedure for roman numerals +# + +sub roman_num { + my $i=shift; + my @nums=qw(0 I II III IV V VI VII VIII IX X XI XII XIII XIV XV + XVI XVII XVIII XIX XX XXI XXII XXIII XXIV); + return $nums[$i]; +} + + +#################################################################### +# THE END # +#################################################################### + + +=pod + +=back + +=head1 ENVIRONMENT + +The calling program should define B<$main::DEBUG> and set it to 0 +or 1. + +=head1 SEE ALSO + +pedigree(1), Pedigree(3) + +=head1 AUTHOR + +Boris Veytsman, Leila Akhmadeeva, 2006, 2007 + + + +=cut + +1; diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Parser.3 b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Parser.3 new file mode 100644 index 0000000000..65e9d7b716 --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Parser.3 @@ -0,0 +1,171 @@ +.\" Automatically generated by Pod::Man 2.1801 (Pod::Simple 3.05) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.ie \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.el \{\ +. de IX +.. +.\} +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "Pedigree::Parser 3" +.TH Pedigree::Parser 3 "2007-07-16" "perl v5.10.0" "User Contributed Perl Documentation" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +Pedigree::Parser \- parser for the input file +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +use Pedigree::Parser; +.PP +\&\f(CW$parser\fR = new Pedigree::Parser(I{$inputline>, \fI\f(CI$lang\fI\fR) +.PP +\&\f(CW$parser\fR\->Parse($inputline); +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +This package parses input for the pedigree library and is used to +define nodes. +.Sp +.RS 4 +\&\fBnew\fR(\fI\f(CI$inputline\fI\fR, \fI\f(CI$lang\fI\fR); +.Sp +Construct a new parser from the pipe-separated line at input +.Sp +\&\fBParse\fR(\fI\f(CI$inputline\fI\fR); +.Sp +Take a line of comma-separated values; return a reference to a +hash of parsed values +.RE +.SH "ENVIRONMENT" +.IX Header "ENVIRONMENT" +The calling program should define \fB\f(CB$main::DEBUG\fB\fR and set it to 0 +or 1. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fIpedigree\fR\|(1), \fIPedigree\fR\|(3) +.SH "AUTHOR" +.IX Header "AUTHOR" +Boris Veytsman, Leila Akhmadeeva, 2006, 2007 +.SH "POD ERRORS" +.IX Header "POD ERRORS" +Hey! \fBThe above document had some coding errors, which are explained below:\fR +.IP "Around line 21:" 4 +.IX Item "Around line 21:" +You can't have =items (as at line 59) unless the first thing after the =over is an =item diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Parser.pm b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Parser.pm new file mode 100644 index 0000000000..7978064f47 --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/Parser.pm @@ -0,0 +1,237 @@ +=pod + +=head1 NAME + +Pedigree::Parser - parser for the input file + +=head1 SYNOPSIS + +use Pedigree::Parser; + +$parser = new Pedigree::Parser(I{$inputline>, I<$lang>) + +$parser->Parse($inputline); + + +=head1 DESCRIPTION + +This package parses input for the pedigree library and is used to +define nodes. + +=over 4 + +=cut + +#################################################################### +# Define the package # +#################################################################### + +package Pedigree::Parser; +use strict; + +#################################################################### +# package variables # +#################################################################### + +# +# %fields_to_convert: the hash of fields that contain limited +# number of values and the default value for such field +# + +my %fields_to_convert = ( + 'Sex'=>'unknown', + 'Proband'=>0, + 'Condition'=>'normal', + 'Type' => '' +); + + +#################################################################### +# And package methods # +#################################################################### + +#################################################################### +# new # +#################################################################### + +=pod + +=item B<new>(I<$inputline>, I<$lang>); + +Construct a new parser from the pipe-separated line at input + +=cut + +sub new { + my ($class,$inputline,$lang)=@_; + my $self={}; + + # + # The hash $self->{fields} is the main stored data structure. + # The key is the field, the value is the number of the field + # in the input lines. + # + my %fieldnames=%{$lang->GetFieldNames()}; + chomp $inputline; + $inputline =~ s/^\s+//; + $inputline =~ s/\s+$//; + my @input = split /\s*\|\s*/, $inputline; + for (my $i=0; $i<scalar @input; $i++) { + my $name=$input[$i]; + if (exists $fieldnames{$name}) { + my $field=$fieldnames{$name}; + $self->{fields}->{$field}=$i; + } else { + print STDERR "Warning: unknown field $name\n"; + } + } + + if ($main::DEBUG) { + print STDERR "Field names:\n"; + foreach my $key (keys %fieldnames) { + my $field=$fieldnames{$key}; + my $pos=$self->{fields}->{$field}; + print STDERR "\t$key\t$field\t$pos\n"; + } + } + + # + # The hash $self->{values} contains values for fields + # with closed sets of values. + # + my %values=%{$lang->GetValues()}; + $self->{values}=\%values; + + if ($main::DEBUG) { + print STDERR "Field values:\n"; + foreach my $key (keys %values) { + my $value=$values{$key}; + print STDERR "\t$key\t$value\n"; + } + } + + + # + # The hash $self->{special_names} contains special values + # for the 'Name' field + # + my %special=%{$lang->GetSpecialNames()}; + $self->{'special_names'}=\%special; + + if ($main::DEBUG) { + print STDERR "Special names:\n"; + foreach my $key (keys %special) { + my $value=$special{$key}; + print STDERR "\t$key\t$value\n"; + } + } + + if ($main::DEBUG) { + print STDERR "Special fields:\n"; + foreach my $key (keys %fields_to_convert) { + my $value=$fields_to_convert{$key}; + print STDERR "\t$key\t$value\n"; + } + } + + bless ($self,$class); + return $self; +} + + +#################################################################### +# Parse # +#################################################################### + +=pod + +=item B<Parse>(I<$inputline>); + +Take a line of comma-separated values; return a reference to a +hash of parsed values + +=cut + +sub Parse { + my ($self,$inputline)=@_; + chomp $inputline; + $inputline =~ s/^\s+//; + $inputline =~ s/\s+$//; + my @input = split /\s*\|\s*/, $inputline; + if ($main::DEBUG) { + print STDERR "Parsing line:$inputline\n"; + } + + my %result; + + foreach my $field (keys %{$self->{fields}}) { + my $i=$self->{fields}->{$field}; + my $value=$input[$i]; + # + # Special fields... + # + if (exists $self->{values}->{$value}) { + $value=$self->{values}->{$value}; + } + if (exists $fields_to_convert{$field}) { + if (length($value) == 0 ) { + $value=$fields_to_convert{$field}; + } + } + # + # Dropping empty fields + # + if (length($value) == 0 ) { + next; + } + + # + # Converting Name field + # + if (($field eq 'Name') && ($value =~ /^\#/)) { + foreach my $regexp (keys %{$self->{'special_names'}}) { + my $name=$self->{'special_names'}->{$regexp}; + $value =~ s/^(\#$regexp.*)/\#$name/i; + } + } + + # + # And finishing + # + $result{$field}=$value; + if ($main::DEBUG) { + print STDERR "\t$field\t$value\n"; + } + } + + return \%result; + +} + +#################################################################### +# THE END # +#################################################################### + +=pod + +=back + +=head1 ENVIRONMENT + +The calling program should define B<$main::DEBUG> and set it to 0 +or 1. + +=head1 SEE ALSO + +pedigree(1), Pedigree(3) + +=head1 AUTHOR + +Boris Veytsman, Leila Akhmadeeva, 2006, 2007 + + + +=cut + +1; + diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/PersonNode.3 b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/PersonNode.3 new file mode 100644 index 0000000000..8876211f53 --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/PersonNode.3 @@ -0,0 +1,232 @@ +.\" Automatically generated by Pod::Man 2.1801 (Pod::Simple 3.05) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.ie \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.el \{\ +. de IX +.. +.\} +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "Pedigree::PersonNode 3" +.TH Pedigree::PersonNode 3 "2007-07-22" "perl v5.10.0" "User Contributed Perl Documentation" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +Pedigree::PersonNode \- a person in a pedigree +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +use Pedigree::PersonNode; +.PP +\&\f(CW$node\fR = new Pedigree::PersonNode(\fI\f(CI%params\fI\fR); +.PP +\&\f(CW$Id\fR = \f(CW$node\fR\->\fIMotherId()\fR; +\&\f(CW$Id\fR = \f(CW$node\fR\->\fIFatherId()\fR; +.PP +\&\f(CW$isProband\fR = \f(CW$node\fR\->\fIisProband()\fR; +.PP +\&\f(CW$sex\fR = \f(CW$node\fR\->\fISex()\fR; +.PP +\&\f(CW$DoB\fR = \f(CW$node\fR\->\fIDoB()\fR; +.PP +\&\f(CW$DoD\fR = \f(CW$node\fR\->\fIDoD()\fR; +.PP +\&\f(CW$cond\fR = \f(CW$node\fR\->\fICondition()\fR; +.PP +\&\f(CW$GenName\fR = \f(CW$node\fR\->\fIGetGenName()\fR; +.PP +\&\f(CW$node\fR\->SetGenName(\fI\f(CI$name\fI\fR); +.PP +\&\f(CW$node\fR\->DrawNode(\fI\f(CI$xidst\fI\fR, \fI\f(CI$ydist\fI\fR, \fI\f(CI$belowtextfont\fI\fR, \fI\f(CI$abovetextfont\fI\fR, +\&\fI\f(CI@fieldsfornode\fI\fR); +.PP +\&\f(CW$node\fR\->PrintLegend(\fI\f(CI$land\fI\fR, \fI\f(CI@fields\fI\fR); +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +This package contains data about a person. +.Sp +.RS 4 +\&\fBnew\fR(\fI\f(CI%params\fI\fR); +.Sp +Construct a new node from the given parameters. +.Sp +\&\fBMotherId\fR(); +.Sp +Return Mother Id. +.Sp +\&\fBFatherId\fR(); +.Sp +Return Father Id. +.Sp +\&\fBisProband\fR(); +.Sp +Return 1 if the pesron is a Proband and zero otherwise +.Sp +\&\fBSex\fR(); +.Sp +Get the sex of the node +.Sp +\&\fBDoB\fR(); +.Sp +Get the DoB of the node +.Sp +\&\fBDoD\fR(); +.Sp +Get the DoB of the node +.Sp +\&\fBCondition\fR(); +.Sp +Returns node conditon. +.Sp +\&\fBGetGenName\fR(); +.Sp +Find the generation name for the node +.Sp +\&\fBSetGenName\fR(\fI\f(CI$name\fI\fR); +.Sp +Set the generation name of the node +.Sp +\&\fBDrawNode\fR(\fI\f(CI$xdist\fI\fR, \fI\f(CI$ydist\fI\fR, \fI\f(CI$belowtextfont\fI\fR, \fI\f(CI$abovetextfont\fI\fR, +\&\fI\f(CI@fieldsfornode\fI\fR); +.Sp +Output the command to draw this node. The parameters are +distances between the nodes (in cm) and fields for abovetext. +.Sp +\&\fBPrintLegend\fR(\fI\f(CI$lang\fI\fR, \fI\f(CI@fields\fI\fR); +.Sp +Print the legend for the given node, including \fI\f(CI@fields\fI\fR in the given +language \fI\f(CI$lang\fI\fR. +.RE +.SH "ENVIRONMENT" +.IX Header "ENVIRONMENT" +The calling program should define \fB\f(CB$main::DEBUG\fB\fR and set it to 0 +or 1. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fIpedigree\fR\|(1), \fIPedigree\fR\|(3) +.SH "AUTHOR" +.IX Header "AUTHOR" +Boris Veytsman, Leila Akhmadeeva, 2006, 2007 +.SH "POD ERRORS" +.IX Header "POD ERRORS" +Hey! \fBThe above document had some coding errors, which are explained below:\fR +.IP "Around line 39:" 4 +.IX Item "Around line 39:" +You can't have =items (as at line 58) unless the first thing after the =over is an =item diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/PersonNode.pm b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/PersonNode.pm new file mode 100644 index 0000000000..6d341cb715 --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/PersonNode.pm @@ -0,0 +1,389 @@ +=pod + +=head1 NAME + +Pedigree::PersonNode - a person in a pedigree + +=head1 SYNOPSIS + +use Pedigree::PersonNode; + +$node = new Pedigree::PersonNode(I<%params>); + +$Id = $node->MotherId(); +$Id = $node->FatherId(); + +$isProband = $node->isProband(); + +$sex = $node->Sex(); + +$DoB = $node->DoB(); + +$DoD = $node->DoD(); + +$cond = $node->Condition(); + +$GenName = $node->GetGenName(); + +$node->SetGenName(I<$name>); + +$node->DrawNode(I<$xidst>, I<$ydist>, I<$belowtextfont>, I<$abovetextfont>, +I<@fieldsfornode>); + +$node->PrintLegend(I<$land>, I<@fields>); + +=head1 DESCRIPTION + +This package contains data about a person. + +=over 4 + +=cut + +#################################################################### +# Define the package # +#################################################################### + +package Pedigree::PersonNode; +use Pedigree; +use strict; +our @ISA=('Pedigree::Node'); + +#################################################################### +# new # +#################################################################### + +=pod + +=item B<new>(I<%params>); + +Construct a new node from the given parameters. + +=cut + +sub new { + my ($class,%params)=@_; + my $self=$class->SUPER::new(%params); + + if (!ref($self)) { + return 0; + } + + # + # Only Person Nodes are numbered in pedigrees + # + + $self->{'Numbered'}=1; + + # + # Now Twins... + # + + if (exists $self->{'Twins'}) { + my $Id=$self->{'Id'}; + my $string = $self->{'Twins'}; + $string =~ s/^\s*//; + $string =~ s/\s*$//; + my @twinIds=($Id, split (/[\s,;]+/, $string)); + if ($main::DEBUG) { + print STDERR "Found twins: ", join(', ',@twinIds), "\n"; + } + my $found=0; + for (my $i=0; $i<scalar @{$self->{'twin_sets'}}; $i++) { + if (exists $self->{'twin_sets'}->[$i]->{'KidIds'}->{$Id}) { + $found=1; + foreach my $kidId (@twinIds) { + $self->{'twin_sets'}->[$i]->{'KidIds'}->{$kidId}=1; + } + if ($main::DEBUG) { + print STDERR "Added to twin set number $i\n"; + } + last; # twin_set + } + } + if (!$found) { # Add twin set + my $set; + $set->{'Type'} = $self->{'Type'}; + foreach my $kidId (@twinIds) { + $set->{'KidIds'}->{$kidId}=1; + } + push @{$self->{'twin_sets'}}, $set; + if ($main::DEBUG) { + print STDERR "Started a new twin set number ", + scalar(@{$self->{'twin_sets'}})-1, "\n"; + } + } + } + + return $self; + +} + + +#################################################################### +# MotherId # +#################################################################### + +=pod + +=item B<MotherId>(); + +Return Mother Id. + +=cut + +sub MotherId { + my $self=shift; + return $self->{'Mother'}; +} + +#################################################################### +# FatherId # +#################################################################### + +=pod + +=item B<FatherId>(); + +Return Father Id. + +=cut + +sub FatherId { + my $self=shift; + return $self->{'Father'}; +} + + +#################################################################### +# isProband # +#################################################################### + +=pod + +=item B<isProband>(); + +Return 1 if the pesron is a Proband and zero otherwise + +=cut + +sub isProband { + my $self=shift; + if ($self->{Proband} == 1) { + return 1; + } else { + return 0; + } +} + +#################################################################### +# Sex # +#################################################################### + +=pod + +=item B<Sex>(); + +Get the sex of the node + +=cut + +sub Sex { + my $self = shift; + return $self->{'Sex'}; +} + +#################################################################### +# DoB # +#################################################################### + +=pod + +=item B<DoB>(); + +Get the DoB of the node + +=cut + +sub DoB { + my $self = shift; + return $self->{'DoB'}; +} + +#################################################################### +# DoB # +#################################################################### + +=pod + +=item B<DoD>(); + +Get the DoB of the node + +=cut + +sub DoD { + my $self = shift; + return $self->{'DoD'}; +} + +#################################################################### +# Condition # +#################################################################### + +=pod + +=item B<Condition>(); + +Returns node conditon. + +=cut + +sub Condition { + my $self=shift; + return $self->{'Condition'}; +} + + +#################################################################### +# GetGenName # +#################################################################### + +=pod + +=item B<GetGenName>(); + +Find the generation name for the node + +=cut + +sub GetGenName { + my $self = shift; + return $self->{'GenName'}; +} + + +#################################################################### +# SetGenName # +#################################################################### + +=pod + +=item B<SetGenName>(I<$name>); + +Set the generation name of the node + +=cut + +sub SetGenName { + my ($self, $name) = @_; + $self->{'GenName'} = $name; + return 0; +} + + +#################################################################### +# DrawNode # +#################################################################### + +=pod + +=item B<DrawNode>(I<$xdist>, I<$ydist>, I<$belowtextfont>, I<$abovetextfont>, +I<@fieldsfornode>); + +Output the command to draw this node. The parameters are +distances between the nodes (in cm) and fields for abovetext. + +=cut + +sub DrawNode { + my $self=shift; + my ($xdist, $ydist, $belowtextfont, $abovetextfont, @fieldsfornode) = @_; + my $result = '\rput('.($xdist*$self->GetAbsX()).", ". + ($ydist*$self->GetAbsY()).'){\pstPerson['; + my @opts=($self->Sex(), $self->Condition(), + 'belowtext={'."$belowtextfont ".$self->GetGenName().'}'); + if (length($self->DoD())>0) { + push @opts, 'deceased'; + } + if ($self->isProband()) { + push @opts, 'proband'; + } + if (scalar @fieldsfornode) { + my @abovetext; + foreach my $field (@fieldsfornode) { + push @abovetext, $self->{$field}; + } + push @opts,'abovetext={'."$abovetextfont ".join('; ',@abovetext).'}'; + } + $result .= join(', ',@opts); + $result .= ']{'.$self->Id()."}}\n"; + return $result; +} + +#################################################################### +# PrintLegend # +#################################################################### + +=pod + +=item B<PrintLegend>(I<$lang>, I<@fields>); + +Print the legend for the given node, including I<@fields> in the given +language I<$lang>. + +=cut + +sub PrintLegend { + my ($self, $lang, @fields) = @_; + my $result = '\item['.$self->GetGenName().'] '; + my @desc; + foreach my $field (@fields) { + if (exists $self->{$field}) { + my $res = $lang->PrintField($field, $self->{$field}); + if (length($res)>0) { + push @desc, $res; + } + } + } + $result .= join ("; ",@desc); + $result .= ".\n"; + # + # We print only the nodes, for which there is an information + # + if (scalar @desc) { + return $result; + } + return; +} + + + +#################################################################### +# THE END # +#################################################################### + + +=pod + +=back + +=head1 ENVIRONMENT + +The calling program should define B<$main::DEBUG> and set it to 0 +or 1. + + +=head1 SEE ALSO + +pedigree(1), Pedigree(3) + +=head1 AUTHOR + +Boris Veytsman, Leila Akhmadeeva, 2006, 2007 + + + +=cut + +1; diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/TwinsNode.3 b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/TwinsNode.3 new file mode 100644 index 0000000000..731818a28f --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/TwinsNode.3 @@ -0,0 +1,180 @@ +.\" Automatically generated by Pod::Man 2.1801 (Pod::Simple 3.05) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.ie \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.el \{\ +. de IX +.. +.\} +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "Pedigree::TwinsNode 3" +.TH Pedigree::TwinsNode 3 "2007-07-15" "perl v5.10.0" "User Contributed Perl Documentation" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +Pedigree::TwinsNode \- an auxillary twins node in a pedigree +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +use Pedigree::TwinsNode; +.PP +\&\f(CW$node\fR = new Pedigree::TwinsNode(\fI\f(CI%params\fI\fR); +.PP +\&\f(CW$node\fR\->DrawNode(\fI\f(CI$xidst\fI\fR, \fI\f(CI$ydist\fI\fR, \fI\f(CI$belowtextfont\fI\fR, \fI\f(CI$abovetextfont\fI\fR, +\&\fI\f(CI@fieldsfornode\fI\fR); +.PP +\&\f(CW$node\fR\->\fIDrawConnections()\fR; +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +This package contains data about a twins node. Twins node is +a special node between the parent and the twins. +.Sp +.RS 4 +\&\fBnew\fR(\fI\f(CI%params\fI\fR); +.Sp +Construct a new node from the given parameters. +.Sp +\&\fBDrawNode\fR(\fI\f(CI$xdist\fI\fR, \fI\f(CI$ydist\fI\fR, \fI\f(CI$belowtextfont\fI\fR, \fI\f(CI$abovetextfont\fI\fR, +\&\fI\f(CI@fieldsfornode\fI\fR); +.Sp +Output the command to draw this node. The parameters are +distances between the nodes (in psunits). +.Sp +\&\fBDrawConnections\fR(); +.Sp +Draw the connections from the given node to its descendants and +the parent +.RE +.SH "ENVIRONMENT" +.IX Header "ENVIRONMENT" +The calling program should define \fB\f(CB$main::DEBUG\fB\fR and set it to 0 +or 1. +.SH "SEE ALSO" +.IX Header "SEE ALSO" +\&\fIpedigree\fR\|(1), \fIPedigree\fR\|(3) +.SH "AUTHOR" +.IX Header "AUTHOR" +Boris Veytsman, Leila Akhmadeeva, 2007 +.SH "POD ERRORS" +.IX Header "POD ERRORS" +Hey! \fBThe above document had some coding errors, which are explained below:\fR +.IP "Around line 25:" 4 +.IX Item "Around line 25:" +You can't have =items (as at line 47) unless the first thing after the =over is an =item diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/TwinsNode.pm b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/TwinsNode.pm new file mode 100644 index 0000000000..c8557230bd --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/Pedigree/TwinsNode.pm @@ -0,0 +1,172 @@ +=pod + +=head1 NAME + +Pedigree::TwinsNode - an auxillary twins node in a pedigree + +=head1 SYNOPSIS + +use Pedigree::TwinsNode; + +$node = new Pedigree::TwinsNode(I<%params>); + + +$node->DrawNode(I<$xidst>, I<$ydist>, I<$belowtextfont>, I<$abovetextfont>, +I<@fieldsfornode>); + +$node->DrawConnections(); + + +=head1 DESCRIPTION + +This package contains data about a twins node. Twins node is +a special node between the parent and the twins. + +=over 4 + +=cut + + + +#################################################################### +# Define the package # +#################################################################### + +package Pedigree::TwinsNode; +use Pedigree; +use strict; +our @ISA=('Pedigree::Node'); + + +#################################################################### +# new # +#################################################################### + +=pod + +=item B<new>(I<%params>); + +Construct a new node from the given parameters. + +=cut + +sub new { + my ($class,%params)=@_; + my $self=$class->SUPER::new(%params); + if (!ref($self)) { # Bad node + return 0; + } + + bless ($self,$class); + + # After we constructed the node, we want to move the kids + # from the parent node to the twins node + + my $selfId = $self->{'Id'}; + my $parentId = $self->{'ParentId'}; + foreach my $kidId (keys %{$self->{'KidIds'}}) { + if ($main::DEBUG) { + print STDERR + "Moving $kidId from $parentId and to $selfId\n"; + } + delete $self->{'kids_by_parent_id'}->{$parentId}->{$kidId}; + $self->{'kids_by_parent_id'}->{$selfId}->{$kidId}=1; + } + + return $self; +} + + + +#################################################################### +# DrawNode # +#################################################################### + +=pod + +=item B<DrawNode>(I<$xdist>, I<$ydist>, I<$belowtextfont>, I<$abovetextfont>, +I<@fieldsfornode>); + +Output the command to draw this node. The parameters are +distances between the nodes (in psunits). + +=cut + +sub DrawNode { + my $self=shift; + my ($xdist, $ydist, $belowtextfont, $abovetextfont, @fieldsfornode) = @_; + my $result = '\rput('.($xdist*$self->GetAbsX()).", ". + ($ydist*$self->GetAbsY()).'){\pnode{'. + $self->Id()."}}\n"; + return $result; +} + +#################################################################### +# DrawConnections # +#################################################################### + +=pod + +=item B<DrawConnections>(); + +Draw the connections from the given node to its descendants and +the parent + +=cut + +sub DrawConnections { + my $self = shift; + my $xdist = shift; + my $ydist = shift; + my $Id=$self->Id(); + my $parentId = $self->{'ParentId'}; + my @kids = @{$self->Kids()}; + my $leftKid=shift @kids; + my $leftKidId=$leftKid->Id(); + my $rightKid= pop @kids; + my $rightKidId=$rightKid->Id(); + my @opts; + if ($self->Type()) { + push @opts, $self->Type(); + } + foreach my $kid (@kids) { + push @opts, "addtwin=".$kid->Id(); + } + my $result = '\pstTwins['; + if (scalar @opts) { + $result .= join (", ",@opts); + } + $result .= ']{'.$parentId.'}{'. + $Id.'}{'.$leftKidId.'}{'.$rightKidId.'}'."\n"; + return $result; +} + + + + +#################################################################### +# THE END # +#################################################################### + +=pod + +=back + +=head1 ENVIRONMENT + +The calling program should define B<$main::DEBUG> and set it to 0 +or 1. + +=head1 SEE ALSO + +pedigree(1), Pedigree(3) + +=head1 AUTHOR + +Boris Veytsman, Leila Akhmadeeva, 2007 + + + +=cut + +1; diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/README b/graphics/pstricks/contrib/pedigree/pedigree-perl/README new file mode 100644 index 0000000000..506b12063e --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/README @@ -0,0 +1,31 @@ + A Program for Generation TeX Pedigrees From CSV Files + Boris Veytsman & Leila Akhmadeeva + Version 1.0, April 2012 + +This program generates TeX commands to typeset pedigrees - either TeX +fragments of full LaTeX files. It has support for multilanguage +pedigrees (at the present moment English and Russian languages are +supported). + +To create manual pages for this program, issue make in the main +directory. To install the program and the library files issue make +install (this command assumes location /usr/local/bin/ for the +binaries and /usr/local/lib/site_perl for Perl libraries). Optionally +you can install manual pages to the proper location on your system. +The typeset manual in in the doc subdirectory. + +For manual installation: + +1. Install pedigree.pl as /usr/local/bin/pedigree + +2. Install Pedigree subdirectory as /usr/local/lib/site_perl/Pedigree + and move there all .pm modules. + +3. Optionally install man pages & documentation. + +Copyright 2006-2012, Boris Veytsman <borisv@lk.net>, Leila Akhmadeeva + +This work may be distributed and/or modified under the conditions of +the GNU Public License, either version 2 of this license or (at your +option) any later version. + diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/Makefile b/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/Makefile new file mode 100644 index 0000000000..864566de3b --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/Makefile @@ -0,0 +1,75 @@ +# +# Makefile for pedigree program +# +# This file is in public domain +# +# $Id: Makefile,v 2.10 2007-07-29 19:52:53 boris Exp $ +# + +TEXFILES = pedigree.tex + +INCLUDES = \ + english.tex \ + english1.tex \ + russian.tex \ + twins.tex \ + abortions.tex \ + childlessness.tex \ + sort1.tex \ + sort2.tex \ + sort3.tex \ + badsort.tex \ + consanguinic.tex + + +PDFS = ${TEXFILES:%.tex=%.pdf} + +all: $(PDFS) + + +%.pdf: %.ps + ps2pdf -sAutoRotatePages=None $< + +%.ps: %.dvi + dvips -Ppdf -o $@ $< + + +# +# We need to cancel the implicit rule +# +%.dvi: %.tex + +%.dvi: %.tex $(INCLUDES) + latex $< + - bibtex $* + latex $< + latex $< + while ( grep -q '^LaTeX Warning: Label(s) may have changed' $*.log) \ + do latex $<; done + + +%.tex: ../examples/english_short.cfg ../examples/%.csv + cd ..; perl -I. pedigree.pl -c examples/english_short.cfg -o doc/$*.tex examples/$*.csv + + +english1.tex: ../examples/english1.cfg ../examples/english.csv + cd ..; perl -I. pedigree.pl -c examples/english1.cfg -o doc/$@ examples/english.csv + +abortions.tex: ../examples/english.cfg ../examples/abortions.csv + cd ..; perl -I. pedigree.pl -c examples/english.cfg -o doc/$@ examples/abortions.csv + + +english.tex: ../examples/english.cfg ../examples/english.csv + cd ..; perl -I. pedigree.pl -c examples/english.cfg -o doc/$@ examples/english.csv + +russian.tex: ../examples/russian.cfg ../examples/russian.csv + cd ..; perl -I. pedigree.pl -c examples/russian.cfg -o doc/$@ examples/russian.csv + + + +clean: + $(RM) *.aux *.bbl *.dvi *.log *.out *.toc *.blg *.lof *.lot *.lol pst-pdgr.tex pst-pdgr.sty + +distclean: clean + rm -f ${PDFS} $(INCLUDES) + diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/abortions.tex b/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/abortions.tex new file mode 100644 index 0000000000..c6d33951c2 --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/abortions.tex @@ -0,0 +1,19 @@ +{% +\psset{descarmA=0.8}% +\begin{pspicture}(-4,-4)(4,2) +\rput(0, 0){\pstPerson[female, affected, belowtext={\small I:1}, abovetext={\scriptsize Ann}]{A0}} +\rput(2, -2){\pstPerson[male, affected, belowtext={\small II:3}, proband, abovetext={\scriptsize John}]{B3}} +\rput(-2, -2){\pstAbortion[affected, belowtext={\small II:1}, abovetext={\scriptsize female}]{B1}} +\rput(0, -2){\pstAbortion[normal, belowtext={\small II:2}, sab, abovetext={\scriptsize male}]{B2}} +\pstDescent{A0}{B1} +\pstDescent{A0}{B2} +\pstDescent{A0}{B3} +\end{pspicture}% +} + +\begin{description} +\item[I:1] Ann; born: 1970.06.15. +\item[II:1] abortion; born: 1990.03.01. +\item[II:2] abortion; born: 2000.10.10. +\item[II:3] John; born: 2002.12.01. +\end{description} diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/english.tex b/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/english.tex new file mode 100644 index 0000000000..5d812a19c2 --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/english.tex @@ -0,0 +1,46 @@ +{% +\psset{descarmA=0.8}% +\begin{pspicture}(-8,-4)(6,4) +\rput(-6, 2){\pstPerson[male, normal, belowtext={\small I:1}, deceased, abovetext={\scriptsize Joseph Smith}]{GF1}} +\rput(0, 2){\pstPerson[male, normal, belowtext={\small I:3}, abovetext={\scriptsize Jim Brown}]{GF2}} +\rput(4, 2){\pstPerson[female, normal, belowtext={\small I:4}, abovetext={\scriptsize Lisa Brown}]{GM2}} +\rput(2, 2){\pnode{GF2_m_GM2}} +\rput(-4, 2){\pnode{GF1_m_GM1}} +\rput(-2, 2){\pstPerson[female, asymptomatic, belowtext={\small I:2}, deceased, abovetext={\scriptsize Joan Smith}]{GM1}} +\rput(0, 0){\pnode{F1_m_M1}} +\rput(-5, 0){\pstPerson[female, obligatory, belowtext={\small II:1}, abovetext={\scriptsize Ann Gold}]{A1}} +\rput(2, 0){\pstPerson[female, normal, belowtext={\small II:3}, abovetext={\scriptsize Mary Smith}]{M1}} +\rput(-3, 0){\pstPerson[male, affected, belowtext={\small II:2}, abovetext={\scriptsize Bill Smith}]{F1}} +\rput(0, -2){\pstPerson[female, affected, belowtext={\small III:3}, abovetext={\scriptsize Rebecca Smith}]{S1}} +\rput(2, -2){\pstPerson[male, normal, belowtext={\small III:4}, abovetext={\scriptsize Alexander Smith}]{S2}} +\rput(-2, -2){\pstPerson[male, affected, belowtext={\small III:2}, proband, abovetext={\scriptsize John Smith}]{P}} +\rput(-5, -2){\pstPerson[female, affected, belowtext={\small III:1}, abovetext={\scriptsize Jenny Smith}]{C1}} +\pstDescent{GF2_m_GM2}{M1} +\ncline[]{GF2_m_GM2}{GM2} +\ncline[]{GF2_m_GM2}{GF2} +\pstDescent{GF1_m_GM1}{A1} +\pstDescent{GF1_m_GM1}{F1} +\ncline[]{GF1_m_GM1}{GM1} +\ncline[]{GF1_m_GM1}{GF1} +\pstDescent{F1_m_M1}{P} +\pstDescent{F1_m_M1}{S1} +\pstDescent{F1_m_M1}{S2} +\ncline[]{F1_m_M1}{M1} +\ncline[]{F1_m_M1}{F1} +\pstDescent{A1}{C1} +\end{pspicture}% +} + +\begin{description} +\item[I:1] Joseph Smith; born: unknown; age at death: unknown. +\item[I:2] Joan Smith; born: 1902/07/01; age at death: 73. +\item[I:3] Jim Brown; born: 1905/11/01. +\item[I:4] Lisa Brown; born: 1910/03/03. +\item[II:1] Ann Gold; born: 1941/09/02; Aunt of the proband. +\item[II:2] Bill Smith; born: 1938/04/03. +\item[II:3] Mary Smith; born: 1940/02/05. +\item[III:1] Jenny Smith; born: 1969/12/03; Cousin of the proband. +\item[III:2] John Smith; born: 1970/02/05; Evaluated 2005/12/01. +\item[III:3] Rebecca Smith; born: 1972/12/25. +\item[III:4] Alexander Smith; born: 1975/11/12. +\end{description} diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/english1.tex b/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/english1.tex new file mode 100644 index 0000000000..a652cdbb04 --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/english1.tex @@ -0,0 +1,32 @@ +{% +\psset{descarmA=0.9}% +\begin{pspicture}(-6,-3.6)(4.5,3.6) +\rput(-4.5, 1.8){\pstPerson[male, normal, belowtext={\small I:1}, deceased]{GF1}} +\rput(0, 1.8){\pstPerson[male, normal, belowtext={\small I:3}]{GF2}} +\rput(3, 1.8){\pstPerson[female, normal, belowtext={\small I:4}]{GM2}} +\rput(1.5, 1.8){\pnode{GF2_m_GM2}} +\rput(-3, 1.8){\pnode{GF1_m_GM1}} +\rput(-1.5, 1.8){\pstPerson[female, asymptomatic, belowtext={\small I:2}, deceased]{GM1}} +\rput(0, 0){\pnode{F1_m_M1}} +\rput(-3.75, 0){\pstPerson[female, obligatory, belowtext={\small II:1}]{A1}} +\rput(1.5, 0){\pstPerson[female, normal, belowtext={\small II:3}]{M1}} +\rput(-2.25, 0){\pstPerson[male, affected, belowtext={\small II:2}]{F1}} +\rput(0, -1.8){\pstPerson[female, affected, belowtext={\small III:3}]{S1}} +\rput(1.5, -1.8){\pstPerson[male, normal, belowtext={\small III:4}]{S2}} +\rput(-1.5, -1.8){\pstPerson[male, affected, belowtext={\small III:2}, proband]{P}} +\rput(-3.75, -1.8){\pstPerson[female, affected, belowtext={\small III:1}]{C1}} +\pstDescent{GF2_m_GM2}{M1} +\ncline[]{GF2_m_GM2}{GM2} +\ncline[]{GF2_m_GM2}{GF2} +\pstDescent{GF1_m_GM1}{A1} +\pstDescent{GF1_m_GM1}{F1} +\ncline[]{GF1_m_GM1}{GM1} +\ncline[]{GF1_m_GM1}{GF1} +\pstDescent{F1_m_M1}{P} +\pstDescent{F1_m_M1}{S1} +\pstDescent{F1_m_M1}{S2} +\ncline[]{F1_m_M1}{M1} +\ncline[]{F1_m_M1}{F1} +\pstDescent{A1}{C1} +\end{pspicture}% +} diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/pedigree.bib b/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/pedigree.bib new file mode 100644 index 0000000000..a705bc192c --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/pedigree.bib @@ -0,0 +1,49 @@ +,-------------------. +| BIBTEX ENTRIES | +`-------------------' + +@article{PedigreeNomenclature95, + author = {Robin L. Bennett and Kathryn A. Steinhaus and + Stefanie B. Uhrich and Corrine K. O'Sullivan and + Robert G. Resta and Debra Lochner-Doyle and + Dorene S. Markei and Victoria Vincent and + Jan Hamanishi}, + journal = {Am. J. Hum. Genet.}, + number = {3}, + pages = {745--752}, + title = {Recommendations for Standardized Human Pedigree + Nomenclature}, + volume = {56}, + year = {1995}, +} + +@Manual{pst-pdgr06, + title = {Creating Medical Pedigrees with PSTricks and \LaTeX}, + author = {Boris Veytsman and Leila Akhmadeeva}, + month = {July}, + year = 2007, + note = {\url{http://ctan.tug.org/tex-archive/graphics/pstricks/contrib/pedigree/pst-pdgr}} +} + +@Manual{PSTricks93, + title = {PSTricks: PostScript Macros for Generic \TeX}, + author = {Van Zandt, Timothy}, + editor = {Denis Girou}, + month = {July}, + year = 2007, + note = {\url{http://ctan.tug.org/tex-archive/graphics/pstricks/base/doc}} +} + + +@book{GraphDrawing99, + address = {New Jersey}, + author = {Di Battista, Giuseppe and Peter Eades and + Roberto Tamassia and Ioannis G. Tollis}, + publisher = {Prentice Hall}, + series = {An Alan R.~Apt Book}, + title = {Graph Drawing: Algortihms for the Visualization of + Graphs}, + year = {1999}, +} + +This file is in public domain
\ No newline at end of file diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/pedigree.pdf b/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/pedigree.pdf Binary files differnew file mode 100644 index 0000000000..9683fa29c8 --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/pedigree.pdf diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/pedigree.ps b/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/pedigree.ps new file mode 100644 index 0000000000..b23c498b68 --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/pedigree.ps @@ -0,0 +1,27305 @@ +%!PS-Adobe-2.0 +%%Creator: dvips(k) 5.991 Copyright 2011 Radical Eye Software +%%Title: pedigree.dvi +%%CreationDate: Sat Apr 14 12:51:54 2012 +%%Pages: 32 +%%PageOrder: Ascend +%%BoundingBox: 0 0 612 792 +%%DocumentFonts: CMR17 CMTT12 CMR12 CMBX9 CMR9 CMTT9 CMR10 CMBX12 CMBX10 +%%+ CMTT10 CMR7 CMSS10 CMTI10 CMR6 CMR8 CMTT8 CMITT10 CMSS8 CMSLTT10 +%%+ SFTT0900 SFRM0700 SFRM0900 SFBX1000 SFRM1000 CMSY10 CMTI7 +%%DocumentPaperSizes: Letter +%%EndComments +%DVIPSWebPage: (www.radicaleye.com) +%DVIPSCommandLine: dvips -Ppdf -o pedigree.ps pedigree.dvi +%DVIPSParameters: dpi=8000 +%DVIPSSource: TeX output 2012.04.14:1251 +%%BeginProcSet: tex.pro 0 0 +%! +/TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S +N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 +mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 +0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ +landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize +mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ +matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round +exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ +statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] +N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin +/FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array +/BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 +array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N +df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A +definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get +}B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} +B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr +1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S +/BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy +setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask +restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn +/BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put +}if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ +bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A +mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ +SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ +userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X +1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 +index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N +/dir 0 def/dyy{/dir 0 def}B/dyt{/dir 1 def}B/dty{/dir 2 def}B/dtt{/dir 3 +def}B/p{dir 2 eq{-90 rotate show 90 rotate}{dir 3 eq{-90 rotate show 90 +rotate}{show}ifelse}ifelse}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 +N/Ry 0 N/V{}B/RV/v{/Ry X/Rx X V}B statusdict begin/product where{pop +false[(Display)(NeXT)(LaserWriter 16/600)]{A length product length le{A +length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse} +forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{ +BDot}imagemask grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat +{BDot}imagemask grestore}}ifelse B/QV{gsave newpath transform round exch +round exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 +rlineto fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B +/M{S p delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M} +B/g{0 M}B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p +-3 w}B/n{p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{ +0 S rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end + +%%EndProcSet +%%BeginProcSet: alt-rule.pro 0 0 +%! +% Patch by TVZ +% Makes dvips files draw rules with stroke rather than fill. +% Makes narrow rules more predictable at low resolutions +% after distilling to PDF. +% May have unknown consequences for very thick rules. +% Tested only with dvips 5.85(k). +TeXDict begin +/QV { + gsave newpath /ruleY X /ruleX X + Rx Ry gt + { ruleX ruleY Ry 2 div sub moveto Rx 0 rlineto Ry } + { ruleX Rx 2 div add ruleY moveto 0 Ry neg rlineto Rx } + ifelse + setlinewidth 0 setlinecap stroke grestore +} bind def +end + +%%EndProcSet +%%BeginProcSet: pstricks.pro 0 0 +% $Id: pstricks.pro 647 2012-02-12 15:03:40Z herbert $ +% +%% PostScript prologue for pstricks.tex. +%% Version 1.12, 2012/02/12 +%% +%% This program can be redistributed and/or modified under the terms +%% of the LaTeX Project Public License Distributed from CTAN archives +%% in directory macros/latex/base/lppl.txt. +% +% +% Define the follwing gs-functions if not known, eg when using distiller +% +systemdict /.setopacityalpha known not {/.setopacityalpha { pop } def } if +systemdict /.setblendmode known not {/.setblendmode { pop } def } if +systemdict /.setshapealpha known not {/.setshapealpha { pop } def } if +% +/tx@Dict 200 dict def % the main PSTricks dictionary +tx@Dict begin +/ADict 25 dict def % The arrow dictionaray +/CM { matrix currentmatrix } bind def +/SLW /setlinewidth load def +/CLW /currentlinewidth load def +/CP /currentpoint load def +/ED { exch def } bind def +/L /lineto load def +/T /translate load def +/TMatrix { } def +/RAngle { 0 } def +/Sqrt { dup 0 lt { pop 0 } { sqrt } ifelse } def % return 0 for negative arguments +/Atan { /atan load stopped { pop pop 0 } if } def % return 0 if atan not known +/ATAN1 {neg -1 atan 180 sub } def % atan(x) (only one parameter) +/Div { dup 0 eq { pop } { div } ifelse } def % control the division +/tan { dup cos abs 1.e-10 lt + { pop 1.e10 } % return 1.e10 as infinit + { dup sin exch cos div } ifelse % default sin/cos +} def +/Tan { dup sin exch cos Div } def % sin(x)/cos(x) x in degrees +/Acos {dup dup mul neg 1 add dup 0 lt { % arc cos, returns 0 when negative root + pop pop 0 }{ sqrt exch atan} ifelse } def +/NET { neg exch neg exch T } def % change coordinate system to the negative one +/Pyth { dup mul exch dup mul add sqrt } def % Pythagoras, expects 2 parameter +/Pyth2 { % Pythagoras, xA yA xB yB + 3 -1 roll % xA xB yB yA + sub % xA xB yB-yA + 3 1 roll % yB-yA xA xB + sub % yB-yA xA-xB + Pyth } def +/PtoC { 2 copy cos mul 3 1 roll sin mul } def % Polar to Cartesian +/Rand { rand 4294967295 div } def % a real random number +%----------------- hv added 20050516 --------------- +/PiDiv2 1.57079632680 def +/Pi 3.14159265359 def +/TwoPi 6.28318530718 def +/Euler 2.71828182846 def +%/e Euler bind def +% +/RadtoDeg { 180 mul Pi div } bind def % convert from radian to degrees +/DegtoRad { Pi mul 180 div } bind def % viceversa +%----------------- hv end--------------------------- +/PathLength@ { /z z y y1 sub x x1 sub Pyth add def /y1 y def /x1 x def } def +% +/PathLength { + flattenpath /z 0 def + { /y1 ED /x1 ED /y2 y1 def /x2 x1 def } + { /y ED /x ED PathLength@ } + {} + { /y y2 def /x x2 def PathLength@ } + /pathforall load stopped { pop pop pop pop } if + z +} def +% +/STP { .996264 dup scale } def % BP/PT scaling +/STV { SDict begin normalscale end STP } def % +% +/DashLine { + dup 0 gt + { /a .5 def PathLength exch div } + { pop /a 1 def PathLength } ifelse + /b ED % pattern should fit evenly in b + dup /X ED % pattern array + 0 get /y ED % length of first black segment + /z 0 X {add} forall def % length of the full pattern + %% Computation of the scaling factor as described by van Zandt: + b a .5 sub 2 mul y mul sub z Div round + z mul a .5 sub 2 mul y mul add b exch Div + %%%% scaling factor on stack. + /z ED %% now, z is the scaling factor + false % for the length test below + X { z mul } forall X astore %% modification TN 04-08-07 + %%% Checking whether at least one dash in X has positive length: + {0 gt or} forall + { X 1 a sub y mul } + { [ 1 0 ] 0 } + ifelse + setdash stroke +} def +% +/DotLine { + /b PathLength def + /a ED /z ED /y CLW def + /z y z add def + a 0 gt { + /b b a div def + }{ + a 0 eq { + /b b y sub def + }{ a -3 eq { + /b b y add def } if + } ifelse + } ifelse + [ 0 b b z Div round Div dup 0 le { pop 1 } if ] + a 0 gt { 0 }{ y 2 div a -2 gt { neg }if } ifelse + setdash 1 setlinecap stroke +} def +% +/SymbolLine { % on stack [ x y x y ... + counttomark % number of elements + 2 div cvi /n ED % n pairs + /YA ED /XA ED % the start point + n 1 sub { + /YB ED /XB ED + /XLength XB XA sub def + /YLength YB YA sub def + /PAngle YLength XLength Atan def + /XYLength XLength YLength Pyth def + + %% for negative SymStep we calculate the distance + SymStep 0 lt + { %XYLength SymStep div abs cvi + /nSym SymStep abs cvi def } + { /nSym XYLength SymStep div cvi def } + ifelse + 0.5 setflat + /Shift Symbol stringwidth pop 2 div def + /deltaX XLength nSym div def + /deltaY YLength nSym div def + curveticks + { XA YA moveto } + { XA Shift sub YA Shift sub moveto } + ifelse + nSym { + gsave + curveticks + { PAngle 180 sub CorrAngle sub tickAngle add /rotAngle ED + currentpoint translate rotAngle rotate + 0 SymbolWidth 2 div moveto 0 SymbolWidth 2 div neg lineto + SymbolLinewidth setlinewidth stroke + } + { + rotateSymbol { PAngle 180 sub CorrAngle sub rotate } if + Symbol show + } + ifelse + grestore + deltaX deltaY rmoveto + } repeat + /YA YB def /XA XB def + } repeat + curveticks + { XA YA moveto } + { XA Shift sub YA Shift sub moveto } + ifelse + gsave + curveticks + { PAngle 180 sub CorrAngle sub tickAngle add /rotAngle ED + XA YA translate rotAngle rotate + 0 SymbolWidth 2 div moveto 0 SymbolWidth 2 div neg lineto + SymbolLinewidth setlinewidth stroke + } + { + rotateSymbol { PAngle 180 sub CorrAngle sub rotate } if + Symbol show + } + ifelse + grestore + pop % delete the mark symbol +} def +% +/LineFill { % hv ------------ patch 7 ------------- + gsave + abs /hatchWidthInc ED + abs /hatchSepInc ED + abs CLW add /a ED + a 0 dtransform round exch round exch + 2 copy idtransform + exch Atan rotate + idtransform pop /a ED + .25 .25 itransform pathbbox + /y2 ED + a Div ceiling cvi /x2 ED /y1 ED + a Div cvi /x1 ED /y2 y2 y1 sub def + clip + newpath + 2 setlinecap + systemdict + /setstrokeadjust known { true setstrokeadjust } if + x2 x1 sub 1 add { + x1 a mul y1 moveto 0 y2 rlineto stroke + /x1 x1 1 add + hatchWidthInc 0 gt { CLW add } if + def + hatchSepInc 0 gt hatchWidthInc 0 gt or { + /a a hatchSepInc add def + CLW hatchWidthInc add SLW + } if + } repeat + grestore + pop pop } def +% +/DotFill {% on stack: dot radius + /dotRadius ED + abs CLW add /a ED + a 0 dtransform round exch round exch + 2 copy idtransform + exch Atan rotate + idtransform pop /a ED + .25 .25 itransform + pathbbox % llx lly urx ury of smallest bounding box + /y2 ED /x2 ED /y1 ED /x1 ED + y2 y1 sub a div 2 add cvi /Ny ED + x2 x1 sub a div 2 add cvi /Nx ED + clip + newpath + /yA y1 dotRadius add CLW add def + /xA0 x1 dotRadius add CLW add def + Ny { + /xA xA0 def + Nx { + newpath + xA yA dotRadius 0 360 arc + SolidDot { gsave fill grestore } if + stroke + xA a add /xA ED + } repeat + yA a add /yA ED + } repeat + grestore +} def +% +/PenroseFill {% on stack: scaling factor + dup dup scale + 1 exch div round /penroseFactor ED + a 0 dtransform round exch round exch + 2 copy idtransform + exch Atan rotate + idtransform pop /a ED + .25 .25 itransform pathbbox + /y2 ED + a Div ceiling cvi /x2 ED /y1 ED + a Div cvi /x1 ED /y2 y2 y1 sub def + clip + newpath + systemdict + /setstrokeadjust known { true setstrokeadjust } if + /I/S/L/W/G/+/Z/F/E/D[/def/exch/for{E D}/add{s E get mul} + { Z -36.2001 1 33 }{25 E S rlineto}{/q Z dup q G E q 1 + G}{Z 2 2}]{cvx def}forall + [0 72 1008 {dup sin E cos }F ]1 setlinejoin/s W{/a W{/b I 10{/i I 4{/m I moveto + i m +/j I 10{/l Z b m l + G a l G sub s m get div .2 + floor .3 + 25 + mul j l + S rmoveto}F i L j L stroke }F}F}F}F + grestore + pop pop +} def +% +/TruchetFill { % on stack: scaling factor + 10 dict begin + dup dup scale + 1 exch div round /penroseFactor ED + a 0 dtransform round exch round exch + 2 copy idtransform + exch Atan rotate + idtransform pop /a ED + .25 .25 itransform pathbbox + /y2 ED + a Div ceiling cvi /x2 ED /y1 ED + a Div cvi /x1 ED /y2 y2 y1 sub def + clip + newpath + systemdict + /setstrokeadjust known { true setstrokeadjust } if + /ma a neg def + /ha a 2 div def + /mha ha neg def + /tile { + rand dup 2 idiv 2 mul eq { 90 rotate } if + mha mha moveto ha mha lineto + ha ha lineto mha ha lineto +% closepath .1 setlinewidth stroke + contents + } def + /contents{ + 0 ha moveto ha 0 lineto + 0 mha moveto mha 0 lineto +% 1 setlinewidth stroke + } def + /dotiling { + f ma mul a f a mul { + /i exch def + f ma mul a f a mul { + /j exch def + gsave i j translate + tile stroke grestore + } for + } for + } def +% + /f 3 def + 5 srand dotiling + end % local user dict +} def +% +/BeginArrow { + ADict begin % hold it local, for end see EndArrow + /@mtrx CM def + gsave + 2 copy T + 2 index sub neg exch + 3 index sub exch Atan + rotate newpath +} def +% +/EndArrow { @mtrx setmatrix CP grestore end } def % end the ADict +% +/Arrow { + CLW mul add dup + 2 div /w ED + mul dup /h ED + mul /a ED + { 0 h T 1 -1 scale } if + w neg h moveto + 0 0 L w h L w neg a neg rlineto + gsave fill grestore +} def +% +/ArrowD { % the sides are drawn as curves (hv 20071211) + CLW mul add dup + 2 div /w ED + mul dup /h ED + mul /Inset ED + { 0 h T 1 -1 scale } if % changes the direction +% we use y=w/h^2 * x^2 as equation for the control points +% for the coordinates the arrow is seen from top to bottom +% the bottom (tip) is (0;0) + w neg h moveto % lower left of > + w 9 div 4 mul neg h 3 div 2 mul + w 9 div neg h 3 div + 0 0 curveto % tip of > + w 9 div h 3 div + w 9 div 4 mul h 3 div 2 mul + w h curveto % upper left of > + w neg Inset neg rlineto % move to x=0 and inset + gsave fill grestore +} def +% +/Tbar { + CLW mul add /z ED + z -2 div CLW 2 div moveto + z 0 rlineto stroke + 0 CLW moveto +} def +% +/Bracket { + CLW mul add dup CLW sub 2 div + /x ED mul CLW add /y ED /z CLW 2 div def + x neg y moveto + x neg CLW 2 div L x CLW 2 div L x y L stroke + 0 CLW moveto +} def +% +/RoundBracket { + CLW mul add dup 2 div + /x ED mul /y ED /mtrx CM def + 0 CLW 2 div T x y mul 0 ne { x y scale } if + 1 1 moveto + .85 .5 .35 0 0 0 curveto + -.35 0 -.85 .5 -1 1 curveto + mtrx setmatrix stroke 0 CLW moveto +} def +% +/SD { 0 360 arc fill } def +% +/EndDot { % DS is the dot size + { /z DS def } { /z 0 def } ifelse % outer or inner dimen + /b ED % the color definition + 0 z DS SD + b { 0 z DS CLW sub SD } if + 0 DS z add CLW 4 div sub + moveto +} def +% +/Shadow { [ { /moveto load } { /lineto load } { /curveto load } { + /closepath load } /pathforall load stopped { pop pop pop pop CP /moveto + load } if ] cvx newpath 3 1 roll T exec } def +% +/NArray { % holds the coordinates and on top of stack the showpoints boolean + /showpoints ED + counttomark 2 div dup cvi /n ED % n 2 div on stack + n eq not { exch pop } if % even numbers of points? delete one + ] aload /Points ED + showpoints not { Points aload pop } if +% { ] aload /Points ED } +% { n 2 mul 1 add -1 roll pop } ifelse % delete the mark symbol +} def +% +/Line { + NArray n 0 eq not + { n 1 eq { 0 0 /n 2 def } if ArrowA /n n 2 sub def + n { Lineto } repeat + CP 4 2 roll ArrowB L pop pop + } if +} def +% +/LineToYAxis { + /Ox ED % Save the x origin value + NArray % all x-y pairs on stack + n { 2 copy moveto % go to current point + Ox exch Lineto % line to y-axis + pop % delete old x-value + } repeat +} def +% +/LineToXAxis{ + /Oy ED % Save the y origin value + NArray % all x-y pairs on stack + n 0 eq not + { n 1 eq { 0 0 /n 2 def } if + ArrowA + /n n 2 sub def + CP 2 copy moveto pop Oy Lineto + n { 2 copy moveto pop Oy Lineto } repeat + CP + 4 2 roll + ArrowB + 2 copy moveto pop Oy + L + pop pop } if +} def +% +/Arcto { + /a [ 6 -2 roll ] cvx def + a r + /arcto load stopped { 5 } { 4 } ifelse { pop } repeat + a +} def +% +/CheckClosed { + dup n 2 mul 1 sub index eq 2 index n 2 mul 1 add index eq + and { pop pop /n n 1 sub def } if +} def +% +/Polygon { + NArray n 2 eq { 0 0 /n 3 def } if + n 3 lt + { n { pop pop } repeat } + { n 3 gt { CheckClosed } if + n 2 mul -2 roll + /y0 ED /x0 ED /y1 ED /x1 ED + x1 y1 + /x1 x0 x1 add 2 div def + /y1 y0 y1 add 2 div def + x1 y1 moveto + /n n 2 sub def + n { Lineto } repeat + x1 y1 x0 y0 6 4 roll Lineto + Lineto pop pop closepath } ifelse +} def +% +/SymbolPolygon { % on stack [ x y x y ... + counttomark % number of elements + 2 add /m ED + 2 copy m 2 roll % copy last two + m 2 div cvi /n ED % n pairs + /YA ED /XA ED % the start point + n 1 sub { + /YB ED /XB ED + /XLength XB XA sub def + /YLength YB YA sub def + /PAngle YLength XLength Atan def + /XYLength XLength YLength Pyth def + /nSym XYLength SymStep Div cvi def + /Shift Symbol stringwidth pop 2 Div def + /deltaX XLength nSym Div def + /deltaY YLength nSym Div def + XA Shift sub YA Shift sub moveto + nSym { + gsave rotateSymbol { PAngle 180 sub CorrAngle sub rotate } if + Symbol show + grestore + deltaX deltaY rmoveto + } repeat +% XB Shift sub YB Shift sub moveto Symbol show + /YA YB def /XA XB def + } repeat + pop % delete the mark symbol +} def +% +/Diamond { + /mtrx CM def + T rotate + /h ED + /w ED + dup 0 eq { pop } { CLW mul neg + /d ED + /a w h Atan def + /h d a sin Div h add def + /w d a cos Div w add def } ifelse + mark w 2 div h 2 div w 0 0 h neg w neg 0 0 h w 2 div h 2 div + /ArrowA { moveto } def + /ArrowB { } def + false Line + closepath mtrx setmatrix } def +% +/Triangle { + /mtrx CM def + translate + rotate /h ED 2 div /w ED + dup CLW mul /d ED + /h h d w h Atan sin Div sub def + /w w d h w Atan 2 div dup cos exch sin Div mul sub def + mark + 0 d w neg d 0 h w d 0 d + /ArrowA { moveto } def + /ArrowB { } def + false + Line + closepath + mtrx +% DG/SR modification begin - Jun. 1, 1998 - Patch 3 (from Michael Vulis) +% setmatrix } def + setmatrix pop +} def +% DG/SR modification end +% +/CCA { + /y ED /x ED + 2 copy y sub /dy1 ED + x sub /dx1 ED + /l1 dx1 dy1 Pyth def +} def +% +/CC { + /l0 l1 def + /x1 x dx sub def + /y1 y dy sub def + /dx0 dx1 def + /dy0 dy1 def + CCA + /dx dx0 l1 c exp mul dx1 l0 c exp mul add def + /dy dy0 l1 c exp mul dy1 l0 c exp mul add def + /m dx0 dy0 Atan dx1 dy1 Atan sub 2 div cos abs b exp a mul dx dy Pyth Div 2 div def + /x2 x l0 dx mul m mul sub def + /y2 y l0 dy mul m mul sub def + /dx l1 dx mul m mul neg def + /dy l1 dy mul m mul neg def +} def +% +/IC { + /c c 1 add def + c 0 lt { /c 0 def } { c 3 gt { /c 3 def } if } ifelse + /a a 2 mul 3 div 45 cos b exp div def + CCA + /dx 0 def + /dy 0 def +} def +% +/BOC { IC CC x2 y2 x1 y1 ArrowA CP 4 2 roll x y curveto } def +/NC { CC x1 y1 x2 y2 x y curveto } def +/EOC { x dx sub y dy sub 4 2 roll ArrowB 2 copy curveto } def +/BAC { IC CC x y moveto CC x1 y1 CP ArrowA } def +/NAC { x2 y2 x y curveto CC x1 y1 } def +/EAC { x2 y2 x y ArrowB curveto pop pop } def +% +/OpenCurve { + NArray n 3 lt + { n { pop pop } repeat } + { BOC /n n 3 sub def n { NC } repeat EOC } ifelse +} def +% +/CurvePath { + %% for negative SymStep we calculate the distance + SymStep 0 lt { gsave PathLength SymStep div abs /SymStep ED grestore } if + 0.5 setflat + flattenpath /z 0 def /z0 0 def + { /y1 ED /x1 ED /y2 y1 def /x2 x1 def + x1 Shift sub y1 Shift sub moveto + gsave + curveticks + { x1 y1 translate startAngle rotate + 0 SymbolWidth 2 div moveto 0 SymbolWidth 2 div neg lineto + SymbolLinewidth setlinewidth stroke + } + { startAngle rotate Symbol show } + ifelse + grestore /z0 z def } + { /y ED /x ED PathLength@ z z0 sub SymStep ge { + x Shift sub y Shift sub moveto + gsave + curveticks + { y yOld sub x xOld sub Atan 180 sub CorrAngle sub /rotAngle ED + x y translate rotAngle rotate + 0 SymbolWidth 2 div moveto 0 SymbolWidth 2 div neg lineto + SymbolLinewidth setlinewidth stroke + } + { + rotateSymbol { y yOld sub x xOld sub Atan 180 sub CorrAngle sub rotate } if + Symbol show + } + ifelse + grestore /z0 z def } if + /yOld y def /xOld x def } + {} %% the lineto part + { /y y2 def /x x2 def PathLength@ + x Shift sub y Shift sub moveto + gsave + curveticks + { y yOld sub x xOld sub Atan 180 sub /rotAngle ED + x y translate rotAngle rotate + 0 SymbolWidth 2 div moveto 0 SymbolWidth 2 div neg lineto + SymbolLinewidth setlinewidth stroke + } + { + x Shift sub y Shift sub moveto + rotateSymbol { y yOld sub x xOld sub Atan 180 sub CorrAngle sub rotate } if + Symbol show + } + ifelse + grestore + } + pathforall +% curveticks +% { gsave +% x y translate rotAngle rotate +% 0 SymbolWidth 2 div moveto 0 SymbolWidth 2 div neg lineto +% SymbolLinewidth setlinewidth stroke grestore +% } if + z +} def +% +/OpenSymbolCurve { + OpenCurve + 0.1 setflat + /Shift Symbol stringwidth pop 2 div def + CurvePath +} def +% +/AltCurve { + { false NArray n 2 mul 2 roll + [ n 2 mul 3 sub 1 roll ] aload + /Points ED + n 2 mul -2 roll } + { false NArray } ifelse + n 4 lt { n { pop pop } repeat } { BAC /n n 4 sub def n { NAC } repeat EAC } ifelse +} def +% +/AltOpenSymbolCurve { + AltCurve + 0.1 setflat + /Shift Symbol stringwidth pop 2 div def + CurvePath +} def +% +/ClosedCurve { + NArray n 3 lt + { n { pop pop } repeat } + { n 3 gt { CheckClosed } if + 6 copy n 2 mul 6 add 6 roll + IC CC x y moveto n { NC } repeat + closepath pop pop + } ifelse +} def +% +/ClosedSymbolCurve { + ClosedCurve + 0.1 setflat + /Shift Symbol stringwidth pop 2 div def + CurvePath +} def +% +/SQ { /r ED r r moveto r r neg L r neg r neg L r neg r L fill } def +/ST { /y ED /x ED x y moveto x neg y L 0 x L fill } def +/SP { /r ED gsave 0 r moveto 4 { 72 rotate 0 r L } repeat fill grestore } def +% +/FontDot { + DS 2 mul dup + matrix scale matrix concatmatrix exch matrix + rotate matrix concatmatrix exch + findfont exch makefont setfont +} def +% +/Rect { + x1 y1 y2 add 2 div moveto + x1 y2 lineto + x2 y2 lineto + x2 y1 lineto + x1 y1 lineto + closepath +} def +% +/OvalFrame { + x1 x2 eq y1 y2 eq or + { pop pop x1 y1 moveto x2 y2 L } + { y1 y2 sub abs x1 x2 sub abs 2 copy gt + { exch pop } { pop } ifelse + 2 div exch { dup 3 1 roll mul exch } if + 2 copy lt { pop } { exch pop } ifelse + /b ED + x1 y1 y2 add 2 div moveto + x1 y2 x2 y2 b arcto + x2 y2 x2 y1 b arcto + x2 y1 x1 y1 b arcto + x1 y1 x1 y2 b arcto + 16 { pop } repeat + closepath + } ifelse +} def +% +/Frame { + CLW mul /a ED + 3 -1 roll + 2 copy gt { exch } if + a sub /y2 ED + a add /y1 ED + 2 copy gt { exch } if + a sub /x2 ED + a add /x1 ED + 1 index 0 eq { pop pop Rect } { OvalFrame } ifelse +} def +% +/BezierNArray { + /f ED + counttomark 2 div dup cvi /n ED + n eq not { exch pop } if + n 1 sub neg 3 mod 3 add 3 mod { 0 0 /n n 1 add def } repeat + f { ] aload /Points ED } { n 2 mul 1 add -1 roll pop } ifelse +} def +% +/OpenBezier { + BezierNArray + n 1 eq + { pop pop } + { ArrowA n 4 sub 3 idiv + { 6 2 roll 4 2 roll curveto } repeat + 6 2 roll 4 2 roll ArrowB curveto } ifelse +} def +% +/OpenSymbolBezier { + OpenBezier + 0.1 setflat + /Shift Symbol stringwidth pop 2 div def + CurvePath +} def +% +/ClosedBezier { + BezierNArray + n 1 eq + { pop pop } + { moveto n 1 sub 3 idiv + { 6 2 roll 4 2 roll curveto } repeat + closepath } ifelse +} def +% +/ClosedSymbolBezier { + /f ED % save showpoints value + 2 copy /yEnd ED /xEnd ED + counttomark -2 roll 2 copy /yStart ED /xStart ED + counttomark 2 roll + f + ClosedBezier + 0.1 setflat + /Shift Symbol stringwidth pop 2 div def + CurvePath + [ xEnd yEnd xStart yStart SymbolLine +} def +% +/BezierShowPoints { + gsave + Points aload length 2 div cvi /n ED + moveto + n 1 sub { lineto } repeat + CLW 2 div SLW [ 4 4 ] 0 setdash stroke + grestore +} def +% +/Parab { + /y0 ED /x0 ED /y1 ED /x1 ED + /dx x0 x1 sub 3 div def + /dy y0 y1 sub 3 div def + x0 dx sub y0 dy add x1 y1 ArrowA + x0 dx add y0 dy add x0 2 mul x1 sub y1 ArrowB + curveto + /Points [ x1 y1 x0 y0 x0 2 mul x1 sub y1 ] def +} def +% +/Parab1 { % 1 end | 0 SP + /ySP ED /xSP ED /y1 ED /x1 ED + /dx xSP x1 sub 3 div def + /dy ySP y1 sub 3 div def + newpath x1 y1 moveto xSP y1 lineto xSP ySP lineto + x1 ySP lineto closepath clip + currentpoint + newpath moveto + xSP dx sub ySP dy add x1 y1 ArrowA + xSP dx add ySP dy add xSP 2 mul x1 sub y1 ArrowB + curveto + /Points [ x1 y1 xSP ySP xSP 2 mul x1 sub y1 ] def +} def +% +/Grid { + newpath + /a 4 string def + /b ED % psk@gridlabels in pt + /c ED % { \pst@usecolor\psgridlabelcolor } + /n ED % psk@griddots + cvi dup 1 lt { pop 1 } if + /s ED % \psk@subgriddiv + s div dup 0 eq { pop 1 } if + /dy ED s div dup 0 eq { pop 1 } if % \pst@number\psyunit abs + /dx ED dy div round dy mul % \pst@number\psxunit abs + /y0 ED dx div round dx mul + /x0 ED dy div round cvi + /y2 ED dx div round cvi + /x2 ED dy div round cvi + /y1 ED dx div round cvi + /x1 ED + /h y2 y1 sub 0 gt { 1 } { -1 } ifelse def + /w x2 x1 sub 0 gt { 1 } { -1 } ifelse def + b 0 gt { + /z1 b 4 div CLW 2 div add def +% /Helvetica findfont b scalefont setfont + /b b .95 mul CLW 2 div add def } if + systemdict /setstrokeadjust known + { true setstrokeadjust /t { } def } + { /t { transform 0.25 sub round 0.25 add exch 0.25 sub round 0.25 add + exch itransform } bind def } ifelse + gsave n 0 gt { 1 setlinecap [ 0 dy n div ] dy n div 2 div setdash } { 2 setlinecap } ifelse + /i x1 def + /f y1 dy mul n 0 gt { dy n div 2 div h mul sub } if def + /g y2 dy mul n 0 gt { dy n div 2 div h mul add } if def + x2 x1 sub w mul 1 add dup 1000 gt { pop 1000 } if + { i dx mul dup y0 moveto + b 0 gt + { gsave c i a cvs dup stringwidth pop + /z2 ED w 0 gt {z1} {z1 z2 add neg} ifelse + h 0 gt {b neg}{z1} ifelse + rmoveto show grestore } if + dup t f moveto + g t L stroke + /i i w add def + } repeat + grestore + gsave + n 0 gt + % DG/SR modification begin - Nov. 7, 1997 - Patch 1 + %{ 1 setlinecap [ 0 dx n div ] dy n div 2 div setdash } + { 1 setlinecap [ 0 dx n div ] dx n div 2 div setdash } + % DG/SR modification end + { 2 setlinecap } ifelse + /i y1 def + /f x1 dx mul n 0 gt { dx n div 2 div w mul sub } if def + /g x2 dx mul n 0 gt { dx n div 2 div w mul add } if def + y2 y1 sub h mul 1 add dup 1000 gt { pop 1000 } if + { newpath i dy mul dup x0 exch moveto + b 0 gt { gsave c i a cvs dup stringwidth pop + /z2 ED + w 0 gt {z1 z2 add neg} {z1} ifelse + h 0 gt {z1} {b neg} ifelse + rmoveto show grestore } if + dup f exch t moveto + g exch t L stroke + /i i h add def + } repeat + grestore +} def +% +/ArcArrow { + /d ED /b ED /a ED + gsave + newpath 0 -1000 moveto clip + newpath + 0 1 0 0 b + grestore + c mul + /e ED + pop pop pop r a e d PtoC y add exch x add + exch r a PtoC y add exch x add exch b pop pop pop pop a e d CLW 8 div c + mul neg d +} def +% +/Ellipse { + /rotAngle ED + /mtrx CM def + T + rotAngle rotate + scale 0 0 1 5 3 roll arc + mtrx setmatrix +} def +% +/ArcAdjust { %%%% Vincent Guirardel +% given a target length (targetLength) and an initial angle (angle0) [in the stack], +% let M(angle0)=(rx*cos(angle0),ry*sin(angle0))=(x0,y0). +% This computes an angle t such that (x0,y0) is at distance +% targetLength from the point M(t)=(rx*cos(t),ry*sin(t)). +% NOTE: this an absolute angle, it does not have to be added or substracted to angle0 +% contrary to TvZ's code. +% To achieve, this, one iterates the following process: start with some angle t, +% compute the point M' at distance targetLength of (x0,y0) on the semi-line [(x0,y0) M(t)]. +% Now take t' (= new angle) so that (0,0) M(t') and M' are aligned. +% +% Another difference with TvZ's code is that we need d (=add/sub) to be defined. +% the value of d = add/sub is used to know on which side we have to move. +% It is only used in the initialisation of the angle before the iteration. +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Input stack: 1: target length 2: initial angle +% variables used : rx, ry, d (=add/sub) +% + /targetLength ED /angle0 ED + /x0 rx angle0 cos mul def + /y0 ry angle0 sin mul def +% we are looking for an angle t such that (x0,y0) is at distance targetLength +% from the point M(t)=(rx*cos(t),ry*sin(t))) +%initialisation of angle (using 1st order approx = TvZ's code) + targetLength 57.2958 mul + angle0 sin rx mul dup mul + angle0 cos ry mul dup mul + add sqrt div +% if initialisation angle is two large (more than 90 degrees) set it to 90 degrees +% (if the ellipse is very curved at the point where we draw the arrow, % +% the value can be much more than 360 degrees !) +% this should avoid going on the wrong side (more than 180 degrees) or go near +% a bad attractive point (at 180 degrees) + dup 90 ge { pop 90 } if + angle0 exch d % add or sub +% maximum number of times to iterate the iterative procedure: +% iterative procedure: takes an angle t on top of stack, computes a +% better angle (and put it on top of stack) + 30 { dup +% compute distance D between (x0,y0) and M(t) + dup cos rx mul x0 sub dup mul exch sin ry mul y0 sub dup mul add sqrt +% if D almost equals targetLength, we stop + dup targetLength sub abs 1e-5 le { pop exit } if +% stack now contains D t +% compute the point M(t') at distance targetLength of (x0,y0) on the semi-line [(x0,y0) M(t)]: +% M(t')= ( (x(t)-x0)*targetLength/d+x0 , (y(t)-y0)*targetLength/d+y0 ) + exch dup cos rx mul x0 sub exch sin ry mul y0 sub +% stack contains: y(t)-y0, x(t)-x0, d + 2 index Div targetLength mul y0 add ry Div exch + 2 index Div targetLength mul x0 add rx Div +% stack contains x(t')/rx , y(t')/ry , d +% now compute t', and remove D from stack + atan exch pop + } repeat +% we don't look at what happened... in particular, if targetLength is greater +% than the diameter of the ellipse... +% the final angle will be around /angle0 + 180. maybe we should treat this pathological case... +% after iteration, stack contains an angle t such that M(t) is the tail of the arrow +% to give back the result as a an angle relative to angle0 we could add the following line: +% angle0 sub 0 exch d +% +% begin bug fix 2006-01-11 +% we want to adjust the new angle t' by a multiple of 360 so that | t'-angle0 | <= 180 +%(we don't want to make the ellipse turn more or less than it should)... +dup angle0 sub dup abs 180 gt { 180 add 360 div floor 360 mul sub } { pop } ifelse +% end bug fix +} def +% +/EllipticArcArrow { + /d ED % is add or sub + /b ED % arrow procedure + /a1 ED % angle + gsave + newpath + 0 -1000 moveto + clip % Set clippath far from arrow. + newpath + 0 1 0 0 b % Draw arrow to determine length. + grestore +% Length of arrow is on top of stack. Next 3 numbers are junk. +% + a1 exch ArcAdjust % Angular position of base of arrow. + /a2 ED + pop pop pop + a2 cos rx mul xOrig add % hv 2007-08-29 x->xOrig + a2 sin ry mul yOrig add % hv 2007-08-29 y->yOrig + a1 cos rx mul xOrig add % + a1 sin ry mul yOrig add % +% Now arrow tip coor and base coor are on stack. + b pop pop pop pop % Draw arrow, and discard coordinates. + a2 CLW 8 div +% change value of d (test it by looking if `` 1 1 d '' gives 2 or not ) + 1 1 d 2 eq { /d { sub } def } { /d { add } def } ifelse + ArcAdjust +% resets original value of d + 1 1 d 2 eq { /d { sub } def } { /d { add } def } ifelse % Adjust angle to give overlap. +} def +%%------------------ tvz/DG/hv (2004-05-10) end -------------------%% +% +/Rot { CP CP translate 3 -1 roll neg rotate NET } def +% +/RotBegin { + tx@Dict /TMatrix known not { /TMatrix { } def /RAngle { 0 } def } if + /TMatrix [ TMatrix CM ] cvx def + /a ED + a Rot /RAngle [ RAngle dup a add ] cvx def +} def +% +/RotEnd { + /TMatrix [ TMatrix setmatrix ] cvx def + /RAngle [ RAngle pop ] cvx def +} def +% +/PutCoor { gsave CP T CM STV exch exec moveto setmatrix CP grestore } def +/PutBegin { /TMatrix [ TMatrix CM ] cvx def CP 4 2 roll T moveto } def +/PutEnd { CP /TMatrix [ TMatrix setmatrix ] cvx def moveto } def +% +/Uput { + /a ED + add 2 div /h ED 2 + div /w ED + /s a sin def + /c a cos def + /b s abs c abs 2 copy gt dup + /q ED + { pop } { exch pop } ifelse def + /w1 c b div w mul def + /h1 s b div h mul def + q { w1 abs w sub dup c mul abs }{ h1 abs h sub dup s mul abs } ifelse +} def +% +/UUput { + /z ED + abs /y ED + /x ED + q { x s div c mul abs y gt }{ x c div s mul abs y gt } ifelse + { x x mul y y mul sub z z mul add sqrt z add } + { q { x s div } { x c div } ifelse abs + } ifelse + a PtoC + h1 add exch + w1 add exch +} def +% +/BeginOL { + dup (all) eq exch TheOL eq or + { IfVisible not { Visible /IfVisible true def } if } + { IfVisible { Invisible /IfVisible false def } if } ifelse +} def +% +/InitOL { + /OLUnit [ 3000 3000 matrix defaultmatrix dtransform ] cvx def + /Visible { CP OLUnit idtransform T moveto } def + /Invisible { CP OLUnit neg exch neg exch idtransform T moveto } def + /BOL { BeginOL } def + /IfVisible true def +} def +% +%%%%%%%%%%%%%%%%% tools %%%%%%%%%%%%%%%%%%%%%%%%% +%%%%% ### bubblesort ### +%% syntax : array bubblesort --> array2 trie par ordre croissant +%% code de Bill Casselman +%% http://www.math.ubc.ca/people/faculty/cass/graphics/text/www/ +/bubblesort { +4 dict begin + /a exch def + /n a length 1 sub def + n 0 gt { + % at this point only the n+1 items in the bottom of a remain to + % the sorted largest item in that blocks is to be moved up into + % position n + n { + 0 1 n 1 sub { + /i exch def + a i get a i 1 add get gt { + % if a[i] > a[i+1] swap a[i] and a[i+1] + a i 1 add + a i get + a i a i 1 add get + % set new a[i] = old a[i+1] + put + % set new a[i+1] = old a[i] + put + } if + } for + /n n 1 sub def + } repeat + } if + a +end +} def +% +% +/concatstringarray{ % [(a) (b) ... (z)] --> (ab...z) 20100422 + 0 1 index { length add } forall + string + 0 3 2 roll + { 3 copy putinterval length add }forall + pop +} bind def +% +/dot2comma {% on stack a string (...) + 2 dict begin + /Output exch def + 0 1 Output length 1 sub { + /Index exch def + Output Index get 46 eq { Output Index 44 put } if + } for + Output + end +} def +% +end +%-----------------------------------------------------------------------------% +% +% END pstricks.pro + +%%EndProcSet +%%BeginProcSet: pst-algparser.pro 0 0 +% $Id: pst-algparser.pro 594 2011-10-31 18:13:18Z herbert $ +%% +%% PostScript prologue for PSTricks algorithm parser +%% Version 0.04, 2011/10/21 +%% +%% This program can be redistributed and/or modified under the terms +%% of the LaTeX Project Public License Distributed from CTAN archives +%% in directory macros/latex/base/lppl.txt. +%% +%%-----------------------------------------------------------------------------% +% +/AlgParser { tx@AlgToPs begin AlgToPs end } def % Dominique Rodriguez +% +/tx@CoreAnalyzerDict 100 dict def tx@CoreAnalyzerDict begin +% +% PS ANALYZER FOR ALGEBRAIC EXPRESSION V1.13 +% +% 09/2011 DR factorial with ! added +% +% E->T|E+T +% T->FS|T*FS +% FS -> F | +FS | -FS +% F->P|F^SF|P! +% P->(E)|literal +% literal->number|var|var[E]|func(params) +% params->E|E,param +% number->TOBEFINISHED +% +%% E expression, T term, SF signed factor, F factor, P power +% +%% parser +% +%% str +% +%% C->E<condition_operators>E +%% STR index -> STR index+lenExpr +/AnalyzeCond { AnalyzeExpr ReadCondOp AnalyzeExpr EvalCondOp } def +% +%% analyze Expression List (separator , or | ) +%% STR index -> STR index+lenExpr +%% /AnalyzeListOfE { +%% { NextNonBlankChar pop AnalyzeExpr%%dup Strlen eq { exit } if NextNonBlankChar +%% NextNonBlankChar dup 0 eq { pop exit } if +%% dup 44 ne 1 index 124 ne and { dup 41 ne { PROBLEMCONTACTBILLOU } { pop exit } ifelse } if +%% pop NextNonBlankChar dup 0 eq { exit } if 124 ne { PROBLEMCONTACTBILLOU } if 1 add NextNonBlankChar 0 eq {toto} if } loop +%% AnalyzeListOfEPostHook +%% } def +/AnalyzeListOfE { + /NotFirst false def + { NextNonBlankChar pop AnalyzeExpr + NotFirst { EvalListOfExpr } { /NotFirst true def } ifelse + dup Strlen eq { exit } if NextNonBlankChar + dup 44 ne 1 index 124 ne and + { dup 41 ne { PROBLEMCONTACTBILLOU } { pop exit } ifelse } + if pop 1 add } loop + AnalyzeListOfEPostHook +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% E->T|E+T +%% STR index -> STR index+lenExpr +/AnalyzeExpr { + AnalyzePreHook AnalyzeTerm IsEndingExpr + { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse } + { { RollOp 1 add NextNonBlankChar pop AnalyzeTerm PreEvalHook EvalAddSub IsEndingExpr { pop exit } if } loop } + ifelse + AnalyzePostHook +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% T->FS|T*FS +%% STR index +/AnalyzeTerm { + AnalyzePreHook AnalyzeSignedFactor IsEndingTerm + { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse } + { { RollOp 1 add NextNonBlankChar pop AnalyzeSignedFactor PreEvalHook EvalMulDiv IsEndingTerm { pop exit } if} loop } + ifelse + AnalyzePostHook +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% FS -> F | +FS | -FS +%% STR index +/AnalyzeSignedFactor { + AnalyzePreHook 2 copy get dup IsUnaryOp + { RollOp 1 add NextNonBlankChar pop AnalyzeSignedFactor EvalUnaryOp } + { pop AnalyzeFactor } + ifelse AnalyzePostHook +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% F->P|F^P|P! +%% STR index +/AnalyzeFactor { + AnalyzePreHook AnalyzePower IsEndingFactor + { dup 0 ne { 32 eq { NextNonBlankChar } if } { pop } ifelse } + { { dup 33 eq%% is there a ! DR 09/2011 + { pop 1 add NextNonBlankChar pop EvalFactorial } + { RollOp 1 add NextNonBlankChar pop AnalyzePower PreEvalHook EvalPower } + ifelse + IsEndingFactor { pop exit } if } loop } + ifelse AnalyzePostHook +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% P->(E)|literal +%% STR index +/AnalyzePower { + %% depending of first char either a number, or a literal + 2 copy get dup 40 eq%%an open par + { pop 1 add NextNonBlankChar pop AnalyzeExpr 1 add NextNonBlankChar pop } + { AnalyzeLiteral } + ifelse +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% STR index STR[index] -> STR index +%/AnalyzeLiteral { IsNumber { EvalNumber } { EvalLiteral } ifelse } def +/AnalyzeLiteral { dup IsUnaryOp exch IsNumber or { EvalNumber } { EvalLiteral } ifelse } def%%dr 09102006 +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% recognize + or - +%% chr -> T/F +/IsUnaryOp { dup 43 eq exch 45 eq or } bind def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% a number can contain only : 0123456789. +%% chr -> T/F +/IsNumber { dup 48 ge exch dup 57 le 3 -1 roll and exch 46 eq or } bind def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% STR index -> STR index number +%% a number can be of the form [0-9]*.[0-9]*\([eE][+-]?[0-9]+\)? +%% STR index -> STR index' number +/ReadNumber { + exch dup 3 -1 roll dup 3 1 roll + %%read mantissa + { 1 add 2 copy dup Strlen eq { pop pop 0 exit } if get dup IsNumber not { exit } if pop } loop + dup 101 eq exch 69 eq or + %%% there is a "e" or "E" -> read exponant + { 1 add 2 copy get dup IsUnaryOp + { pop 1 add 2 copy get } if + { IsNumber not { exit } if 1 add 2 copy get } loop } + if + dup 4 1 roll + 3 -1 roll exch 1 index sub getinterval +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% a number can contain only : 0123456789. +%% chr -> T/F +/IsCondOp { dup 30 eq exch dup 60 ge exch 62 le and or } bind def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% STR index -> STR index number +%% a number can be of the form [0-9]*.[0-9]*\([eE][+-]?[0-9]+\)? +%% STR index -> STR index' number +/ReadCondOp { + NextNonBlankChar 1 index 4 1 roll + { IsCondOp not { exit } if 1 add 2 copy get } loop + 2 copy 5 -1 roll + exch 1 index sub getinterval 3 1 roll +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% a literal can contain only : 0123456789. +%% chr -> T/F +/IsLiteral {% + dup 48 ge exch dup 57 le 3 -1 roll and exch + dup 65 ge exch dup 90 le 3 -1 roll and 3 -1 roll or exch + dup 97 ge exch 122 le and or } bind def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% a literal can be of the form [a-zA-Z][a-zA-Z0-9]*\(\((Expression)\)|\(\[Expression\]\)\)? +%% STR index -> literal STR index' nextchr +/ReadLiteral { + exch dup 3 -1 roll dup 3 1 roll + %%read literal core + { 2 copy dup Strlen eq { pop pop 0 exit } if get dup IsLiteral not { exit } if pop 1 add } loop + 4 1 roll dup 5 1 roll 3 -1 roll exch 1 index sub getinterval 4 1 roll +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% expr is ended by end of str or a clpar +%% STR index -> STR index STR[index] T/F +/IsEndingExpr {% + 2 copy dup Strlen eq + %% if end of str is reached -> end ! + { pop pop 0 true } + %% ending chr -> clpar, comma, |, <, >, =, !, + {get dup dup 41 eq + exch dup 124 eq + exch dup 93 eq + exch dup 44 eq + exch dup 30 eq + exch dup 60 ge exch 62 le and or or or or or} + ifelse } def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% expr is ended by end of str or a +- +%% STR index -> STR index STR[index] T/F +/IsEndingTerm { IsEndingExpr { true } { dup dup 43 eq exch 45 eq or } ifelse } def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% expr is ended by end of str or */ +%% STR index -> STR index STR[index] T/F +/IsEndingFactor { IsEndingTerm { true } { dup dup 42 eq exch 47 eq or } ifelse } def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% expr is ended by end of str or ^ +%% STR index -> STR index STR[index] T/F +/IsEndingPower { IsEndingFactor { true } { dup 94 eq } ifelse } def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% STR index -> STR index STR[index] +/NextNonBlankChar { { dup Strlen eq { 0 exit } if 2 copy get dup neBlkChar { exit } if pop 1 add } loop } bind def +/neBlkChar { dup 32 ne exch dup 10 ne exch 9 ne and and } bind def +%%%%%%%%%%%%%%%%%%%%%%%% +%% DEBUG +/BRK {false} def +/BRKtrue {/BRK true def} def +/BRKStop {BRK {BRKtoto} if } def +/BRKEvalStop {BRK exch if } def +/BRKBRK2true {BRK {BRK2true} if } def +/BRK2 {false} def +/BRK2true {/BRK2 true def} def +/BRK2Stop {BRK2 {BRK2toto} if } def/BRK {false} def +end +% +%-------------------------------------------------------------------------------% +% +/tx@AlgToPs 12 dict def tx@AlgToPs begin +% +%% algExpr -> PSVector +/AlgToPs { tx@CoreAnalyzerDict begin InitParser AnalyzeListOfE pop pop EndingSequence end } def +/EndingSequence { ExpressionVector aload length /end cvx exch 1 add array astore } def +/InitParser { /ExpressionVector [ /tx@AddMathFunc cvx /begin cvx ] def dup length /Strlen exch def 0 } def +/Strlen 0 def +/EvalListOfExpr {} def% +/EvalNumber {% + ReadNumber cvr /ExpressionVector ExpressionVector aload length dup 3 add -1 roll cvx + exch 1 add array astore def NextNonBlankChar pop } def +/EvalAddSub {% + /ExpressionVector ExpressionVector aload length dup 5 add -1 roll + 43 eq { /add } { /sub } ifelse cvx exch 1 add array astore def +} def +/EvalMulDiv {% + /ExpressionVector ExpressionVector aload length dup 5 add -1 roll + 42 eq { /mul } { /div } ifelse cvx exch 1 add array astore def +} def +/EvalPower {% + /ExpressionVector ExpressionVector aload length dup 5 add -1 roll + pop /exp cvx exch 1 add array astore def +} def +/EvalFactorial {% DR 09/2011 + /ExpressionVector ExpressionVector aload length + /fact cvx exch 1 add array astore def +} def +/EvalLiteral {% + ReadLiteral + dup 40 eq%%% there is an open par -> function call + { pop 2 index + dup (Sum) eq { EvalSum } + { dup (IfTE) eq { EvalCond } + { dup (Derive) eq { pop EvalDerive } + { pop 1 add NextNonBlankChar pop AnalyzeListOfE 2 index TrigoFunc + /ExpressionVector ExpressionVector aload length dup 5 add -1 roll cvn cvx + exch 1 add array astore def 1 add NextNonBlankChar pop } ifelse } ifelse} ifelse } + { /ExpressionVector ExpressionVector aload length dup 6 add -1 roll cvn cvx exch 1 add array astore def + dup 91 eq%%% there is an open bracket -> vector element + { pop 1 add NextNonBlankChar pop AnalyzeExpr + /ExpressionVector ExpressionVector aload length /cvi cvx exch /get cvx exch 2 add array astore def 1 add } + { pop NextNonBlankChar pop } + ifelse} + ifelse +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% the derive function : Derive(n,f(x)) +%% firstparindex lastparindex -> +/EvalDerive { + %% manage the function descripiton + 1 add ReadNumber 3 1 roll NextNonBlankChar + 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if + 1 add NextNonBlankChar pop + 3 -1 roll cvi + dup 0 eq + { pop AnalyzeExpr 3 -1 roll pop 1 add } + { 1 sub 3 1 roll (x) exch tx@Derive begin DeriveIndexed end 4 -1 roll + { (x) tx@Derive begin Derive end } repeat + ExpressionVector exch /ExpressionVector [] def + AlgToPs aload length + /ExpressionVector 1 index 3 add -1 roll aload length dup 3 add -1 roll /l2 exch def /l1 exch def + l1 l2 add 1 add l2 neg roll l1 l2 add array astore def 3 -1 roll pop 1 add + 1 index length /Strlen exch def } ifelse +} def +/EvalSum {% + pop 1 add NextNonBlankChar pop + %% read the variable name + ReadLiteral pop NextNonBlankChar + 44 ne { ANALYZER_ERROR_missing_first_comma_in_Sum } if + %% read the initial value + 1 add NextNonBlankChar pop ReadNumber cvi 3 1 roll + 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if + %% read the increment value + 1 add NextNonBlankChar pop ReadNumber cvi 3 1 roll + 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if + %% read the limit value + 1 add NextNonBlankChar pop ReadNumber cvi 3 1 roll + 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if + /ExpressionVector ExpressionVector aload length dup 7 add -3 roll 0 4 1 roll + 5 -1 roll 4 add array astore def + %% keep ExpressionVector for later and create a new one for internal Sum computation + ExpressionVector 3 1 roll /ExpressionVector [ 6 -1 roll cvn /exch cvx /def cvx ] def + 1 add NextNonBlankChar pop AnalyzeExpr + %% add each term + /ExpressionVector ExpressionVector aload length 1 add /add cvx exch array astore def + /ExpressionVector 4 -1 roll aload length ExpressionVector cvx /for cvx 3 -1 roll 2 add + array astore def 3 -1 roll pop 1 add +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Convert to radians if trigo function call +%% (name) -> +/TrigoFunc { + dup (cos) eq 1 index (sin) eq or exch (tan) eq or + { /ExpressionVector ExpressionVector aload length Pi /div cvx 180 /mul cvx 5 -1 roll 4 add + array astore def + } if +} def +/EvalCond {% + pop 1 add AnalyzeCond NextNonBlankChar + 44 ne { ANALYZER_ERROR_missing_first_comma_in_IfTE } if + ExpressionVector 3 1 roll /ExpressionVector [] def + 1 add AnalyzeExpr ExpressionVector 3 1 roll /ExpressionVector [] def + NextNonBlankChar 44 ne { ANALYZER_ERROR_missing_second_comma_in_IfTE } if + 1 add AnalyzeExpr + NextNonBlankChar 41 ne { ANALYZER_ERROR_missing_ending parenthesis_in_IfTE } if + ExpressionVector + /ExpressionVector 6 -1 roll aload length dup + 6 add -1 roll cvx exch dup 4 add -1 roll cvx /ifelse cvx 3 -1 roll 3 add array astore def + 1 add 3 -1 roll pop +} def +%% CondOp STR index +/EvalCondOp {% + 3 -1 roll + dup (=) eq { /eq } {% + dup (<) eq { /lt } {% + dup (>) eq { /gt } {% + dup (>=) eq { /ge } {% + dup (<=) eq { /ge } {% + dup (!=) eq { /ne } { ERROR_non_valid_conditional_operator } + ifelse } ifelse } ifelse } ifelse } ifelse } ifelse + cvx exch pop + /ExpressionVector ExpressionVector aload length dup 3 add -1 roll exch 1 add array astore def } def +/EvalUnaryOp { + 3 -1 roll 45 eq { /ExpressionVector ExpressionVector aload length /neg cvx exch 1 add array astore def } if +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% H O O K S +/AnalyzePreHook {} bind def +/PreEvalHook {} bind def +/AnalyzeListOfEPostHook {} bind def +/AnalyzePostHook {} def +/RollOp { 3 1 roll } bind def +end %tx@CoreAnalyzerDict +% +%--------------------------------------------------------------------% +% +/tx@Derive 41 dict def tx@Derive begin +%%increase ^^ for each function added +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% algExpr variable -> PSVector +/Derive {% + 10240 string 3 1 roll 0 3 1 roll + /Variable exch def + tx@CoreAnalyzerDict begin InitParser AnalyzeListOfE end +} def +/Strlen 0 def +/InitParser { dup length /Strlen exch def 0 } def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% algExpr variable index -> PSVector +/DeriveIndexed {% + 3 1 roll 10240 string 3 1 roll 0 3 1 roll + /Variable exch def + tx@CoreAnalyzerDict begin InitParser pop 4 -1 roll AnalyzeExpr 4 -2 roll pop pop 4 -2 roll exch pop end +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% (u,v)'=-(u',v') +/EvalListOfExpr {% + 4 2 roll 2 copy 9 -1 roll dup length 4 1 roll putinterval add AddPipe + 2 copy 7 -1 roll dup length 4 1 roll putinterval add + 6 -2 roll pop pop + 2 copy pop 0 6 2 roll GetIntervalNewStr 5 1 roll 2 copy 0 exch getinterval 6 1 roll } def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% (-u)'=-(u') +/EvalUnaryOp { + 4 -2 roll 4 index (0) eq + { (0) StrConcat 7 -1 roll pop } + { 7 -1 roll 45 eq + { AddSub AddOpPar true } { false } ifelse + 3 1 roll 5 index StrConcat 3 -1 roll { AddClPar } if } ifelse + 2 copy pop 0 6 2 roll GetIntervalNewStr + 7 -2 roll pop pop 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% (number)'=0 +/EvalNumber { ReadNumber (0) 6 2 roll } def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% (u+v)'=u'+v' +/EvalAddSub {% + 7 index dup (0) eq + { pop true }%% du=0 nothing added + { dup length exch 5 index 5 index 3 -1 roll putinterval 4 -1 roll add 3 1 roll false } + ifelse + 5 index dup (0) eq + { pop { (0) } { 4 -2 roll 2 copy pop 0 6 2 roll GetIntervalNewStr } ifelse }%%dv=0 + { exch + { 5 -2 roll 7 index 45 eq { AddSub } if false } %%nothing yet added + { 5 -2 roll 7 index 43 eq%%something yet added + { AddAdd false } { AddSub AddOpPar true } ifelse } + ifelse 11 1 roll + 3 -1 roll StrConcat 10 -1 roll { AddClPar } if + 2 copy pop 0 6 2 roll GetIntervalNewStr } + ifelse + mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% (u*v)' or (u/v)' +/EvalMulDiv { 6 index 42 eq {EvalMul} {EvalDiv} ifelse } def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% (u*v)'=u'*v+u*v' +/EvalMul {% + 4 -2 roll 7 index dup (0) eq + { pop false }%%du=0 + { (1) eq%%du=1 + { false } + { AddOpPar 7 index StrConcat AddClPar AddMul AddOpPar true } ifelse + 3 1 roll 6 index StrConcat 3 -1 roll { AddClPar } if + true }%%du!=0 + ifelse + 5 1 roll 5 index (0) eq + { 5 -1 roll not { (0) StrConcat } if }%%dv=0 + { 5 -1 roll { AddAdd } if + 4 index (1) eq + { 8 index StrConcat } + { AddOpPar 8 index StrConcat AddClPar AddMul AddOpPar 4 index StrConcat AddClPar } + ifelse + }%%dv!=0 + ifelse + 2 copy pop 0 6 2 roll GetIntervalNewStr + mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% (u/v)'=(u'*v-u*v')/v^2 +/EvalDiv {% + 4 -2 roll + 4 index (0) eq%%dv=0 -> u'/v + { 7 index (0) eq { (0) StrConcat } { AddOpPar 7 index StrConcat AddClPar AddDiv 5 index StrConcat } ifelse } + { 7 index dup (0) eq + { pop }%%du=0 + { (1) eq%%du=1 + { false } + { AddOpPar 7 index StrConcat AddClPar AddMul AddOpPar true } ifelse + 3 1 roll 6 index StrConcat 3 -1 roll { AddClPar } if}%%du!=0 + ifelse + AddSub + 4 index (1) eq + { 8 index StrConcat } + { AddOpPar 8 index StrConcat AddClPar AddMul AddOpPar 4 index StrConcat AddClPar } + ifelse + %}%%dv!=0 + 2 copy GetIntervalNewStr 3 1 roll pop 0 AddOpPar 3 -1 roll StrConcat AddClPar + AddDiv AddOpPar 5 index StrConcat AddClPar 2 copy (^2) putinterval 2 add } + ifelse + 2 copy pop 0 6 2 roll GetIntervalNewStr + mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% str1 index str2 -> str1 index +/StrConcat { dup length 4 2 roll 2 copy 6 -1 roll putinterval 3 -1 roll add } bind def +/GetIntervalNewStr { 0 exch getinterval dup length string copy } bind def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% (u^v)'=(u^v)'=u'vu^(v-1)+v'u^(v)ln(u) +/EvalPower {% + 4 -2 roll 7 index (0) eq + {%%if du=0 then (u^v)'=v'ln(u)u^v + 4 index (0) eq + { (0) StrConcat }%%if dv=0 then (u^v)'=0 + { 4 index (1) ne { AddOpPar 4 index StrConcat (\)*) StrConcat } if + 8 index (e) ne { (ln\() StrConcat 8 index StrConcat (\)*) StrConcat } if + AddOpPar 8 index StrConcat (\)^\() StrConcat 5 index StrConcat AddClPar } ifelse + } + {%%du!=0 + 4 index (0) eq + {%%if dv=0 then (u^v)'=vu'u^(v-1) + 5 index dup IsStrNumber + { dup (0) eq + { StrConcat } + { dup dup (1) eq exch (1.0) eq or + { StrConcat } + { StrConcat + 7 index dup (1) ne exch (1.0) ne and%%%dr 09102006 insert du if <> 1 + { (*\() StrConcat 7 index StrConcat (\)) StrConcat } if%%%dr 09102006 + (*\() StrConcat 8 index StrConcat (\)) StrConcat + 5 index dup dup (2) eq exch (2.0) eq or + { pop } { cvr 1 sub 20 string cvs 3 1 roll (^) StrConcat 3 -1 roll StrConcat } ifelse } ifelse } ifelse } + { pop AddOpPar 5 index StrConcat (\)*\() StrConcat 8 index StrConcat (\)^\() StrConcat + 5 index StrConcat (-1\)) StrConcat } ifelse + } + {%%if dv!=0 and du!=0 then (u^v)'=u'vu^(v-1)+v'u^(v)ln(u) + 7 index (1) ne { AddOpPar 7 index StrConcat (\)*) StrConcat } if + AddOpPar 5 index StrConcat (\)*\() StrConcat + 8 index StrConcat (\)^\() StrConcat + 5 index StrConcat (-1\)+\() StrConcat + 4 index (1) ne { 4 index StrConcat (\)*\() StrConcat } if + 8 index StrConcat (\)^\() StrConcat + 5 index StrConcat (\)*ln\() StrConcat + 8 index StrConcat AddClPar + } ifelse + } ifelse + 2 copy pop 0 6 2 roll GetIntervalNewStr + mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% No derivative for factorial ! only cst => null derivative +/EvalFactorial {% DR 09/2011 + 4 index (0) eq + { (0) mark 8 -2 roll cleartomark 2 index 7 index dup 4 index exch sub getinterval exch 6 2 roll } + { DERIVATIVE_ENGINE_ERROR_no_variable_in_factorial } ifelse +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% str -> true/false +/IsStrNumber {% + true exch + { dup 48 lt exch dup 57 gt 3 -1 roll or + exch dup 46 ne%%. + exch dup 43 ne%%+ + exch 45 ne%%- + and and and { pop false } if } forall +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% literal switch -> func call, vector, variables +/EvalLiteral {% + ReadLiteral dup 40 eq%%% there is an open par -> function call + { pop (EvalFunc_ ) 9 4 index StrConcat 0 exch getinterval cvn cvx exec } + { dup 91 eq%%% there is an open bracket -> vector element + { DERIVATIVE_ENGINE_ERROR_vector_not_yet_implemented } + { pop EvalVariable } + ifelse } + ifelse +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% first last parpos Expr[first:parpos-1] -> +/EvalVariable { 2 index Variable eq { (1) } { (0) } ifelse 4 -1 roll exch 6 2 roll } def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% (f(u))'=u'f'(u) +/EvalFunc { + 4 2 roll 4 index (1) ne + { AddOpPar 4 index StrConcat (\)*) StrConcat } if + (Eval ) 4 8 index StrConcat 0 exch getinterval cvn cvx exec + 2 copy pop 0 6 2 roll GetIntervalNewStr + mark 9 -3 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Func derivative -> Eval<func> +/EvalFunc_sin {% + PreCommonFunc + { (cos\() StrConcat 5 index StrConcat AddClPar } if + PostCommonFunc } def +/EvalFunc_cos {% + PreCommonFunc + { (\(-sin\() StrConcat 5 index StrConcat (\)\)) StrConcat } if + PostCommonFunc } def +/EvalFunc_tan {% + PreCommonFunc + { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/cos\() StrConcat 5 index StrConcat (\)^2) StrConcat } if + PostCommonFunc } def +/EvalFunc_asin {% + PreCommonFunc + { (1/sqrt\(1-\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if + PostCommonFunc } def +/EvalFunc_acos {% + PreCommonFunc + { (-1/sqrt\(1-\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if + PostCommonFunc } def +/EvalFunc_atg {% + PreCommonFunc + { (1/\(1+\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if + PostCommonFunc } def +/EvalFunc_ln {% + PreCommonFunc + { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\() StrConcat 5 index StrConcat AddClPar } if + PostCommonFunc } def +/EvalFunc_exp {% + PreCommonFunc + { (exp\() StrConcat 5 index StrConcat AddClPar } if + PostCommonFunc } def +/EvalFunc_EXP {% + PreCommonFunc + { (EXP\() StrConcat 5 index StrConcat AddClPar } if + PostCommonFunc } def +/EvalFunc_sqrt {% + PreCommonFunc + { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/\(2*sqrt\() StrConcat 5 index StrConcat (\)\)) StrConcat } if + PostCommonFunc } def +/EvalFunc_Fact {% + PreCommonFunc { DERIVATIVE_ENGINE_ERROR_no_variable_expression_in_Fact } if + PostCommonFunc } def +/EvalFunc_sh {% + PreCommonFunc + { (ch\() StrConcat 5 index StrConcat AddClPar } if + PostCommonFunc } def +/EvalFunc_ch {% + PreCommonFunc + { (sh\() StrConcat 5 index StrConcat AddClPar } if + PostCommonFunc } def +/EvalFunc_th {% + PreCommonFunc + { dup 0 eq { (1) StrConcat } { 1 sub } ifelse (/ch\() StrConcat 5 index StrConcat (\)^2) StrConcat } if + PostCommonFunc } def +/EvalFunc_Argsh {% + PreCommonFunc + { (1/sqrt\(1+\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if + PostCommonFunc } def +/EvalFunc_Argch {% + PreCommonFunc + { (1/sqrt\(\() StrConcat 5 index StrConcat (\)^2-1\)\)) StrConcat } if + PostCommonFunc } def +/EvalFunc_Argth {% + PreCommonFunc + { (1/\(1-\() StrConcat 5 index StrConcat (\)^2\)\)) StrConcat } if + PostCommonFunc } def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +/PreCommonFunc { + 1 add NextNonBlankChar pop 3 -1 roll 5 1 roll AnalyzeExpr 1 add NextNonBlankChar pop + 4 2 roll 4 index (0) eq + { (0) StrConcat false } + { 4 index (1) ne { AddOpPar 4 index StrConcat (\)*) StrConcat } if true } ifelse +} def +/PostCommonFunc { + 2 copy pop 0 6 2 roll GetIntervalNewStr + mark 9 -3 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll +} def +/EvalFunc_Derive {% + 1 add ReadNumber cvi 1 add dup cvr log 1 add cvi string cvs + 4 -1 roll pop 5 1 roll 1 add NextNonBlankChar pop AnalyzeExpr 1 add + 4 -2 roll (Derive\() StrConcat 7 -1 roll StrConcat (,) StrConcat 6 -1 roll StrConcat AddClPar + 2 copy pop 0 6 2 roll GetIntervalNewStr 6 -1 roll pop 2 index 6 index dup 4 index exch sub getinterval + exch 6 2 roll } def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% literal switch -> func call, vector, variables +/EvalFunc_Sum {% + 1 add NextNonBlankChar pop + %% read the variable name + ReadLiteral pop 3 -1 roll pop NextNonBlankChar + 44 ne { ANALYZER_ERROR_missing_first_comma_in_Sum } if + %% read the initial value + 1 add NextNonBlankChar pop ReadNumber pop + 2 copy get 44 ne { ANALYZER_ERROR_missing_second_comma_in_Sum } if + %% read the increment value + 1 add NextNonBlankChar pop ReadNumber pop + 2 copy get 44 ne { ANALYZER_ERROR_missing_third_comma_in_Sum } if + %% read the limit value + 1 add NextNonBlankChar pop ReadNumber pop + 2 copy get 44 ne { ANALYZER_ERROR_missing_fourth_comma_in_Sum } if + 1 add NextNonBlankChar pop dup 6 1 roll 3 -1 roll pop AnalyzeExpr 1 add NextNonBlankChar pop + 4 -2 roll 3 index 8 index dup 9 index exch sub getinterval StrConcat + 4 index StrConcat AddClPar + 2 copy pop 0 6 2 roll GetIntervalNewStr + mark 9 -3 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% literal switch -> func call, vector, variables +/EvalFunc_IfTE {% + 3 -1 roll pop 1 add NextNonBlankChar pop SkipCond + NextNonBlankChar + 44 ne { ANALYZER_ERROR_missing_first_comma_in_IfTE } if + 1 add NextNonBlankChar pop dup 5 1 roll + AnalyzeExpr NextNonBlankChar + 44 ne { ANALYZER_ERROR_missing_second_comma_in_IfTE } if + 1 add NextNonBlankChar pop + AnalyzeExpr 1 add NextNonBlankChar pop + 4 -2 roll 3 index 10 index dup 11 index exch sub getinterval StrConcat + 6 index StrConcat (,) StrConcat 4 index StrConcat AddClPar + 2 copy pop 0 6 2 roll GetIntervalNewStr + mark 11 -5 roll cleartomark 2 index 6 index dup 4 index exch sub getinterval exch 6 2 roll +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% advance in str until a comma is found (no error detection!) +%% str index -> str index' +/SkipCond { { 1 add 2 copy get 44 eq {exit } if } loop } bind def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Convert to radians if trigo function call +%% (name) -> +/TrigoFunc { + dup (cos) eq 1 index (sin) eq or exch (tan) eq or + { /ExpressionVector ExpressionVector aload length Pi /div cvx 180 /mul cvx 5 -1 roll 4 add + array astore def + } if +} def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% No derivative for condition.... +/EvalCondOp { 3 -1 roll pop } bind def +/PutIntervalOneAdd {putinterval 1 add} bind def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Add open parenthesis in string at the given index +%% str index -> str index+1 +/AddOpPar {2 copy (\() PutIntervalOneAdd} bind def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Add close parenthesis in string at the given index +%% str index -> str index+1 +/AddClPar {2 copy (\)) PutIntervalOneAdd} bind def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Add 0 in string at the given index +%% str index -> str index+1 +/AddZero {2 copy (0) PutIntervalOneAdd} bind def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Add open parenthesis in string at the given index +%% str index -> str index+1 +/AddMul {2 copy (*) PutIntervalOneAdd} bind def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Add open parenthesis in string at the given index +%% str index -> str index+1 +/AddDiv {2 copy (/) PutIntervalOneAdd} bind def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Add a plus sign in string at the given index +%% str index -> str index+1 +/AddAdd {2 copy (+) PutIntervalOneAdd} bind def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Add a minus sign in string at the given index +%% str index -> str index+1 +/AddSub {2 copy (-) PutIntervalOneAdd} bind def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% Add a pipe sign in string at the given index +%% str index -> str index+1 +/AddPipe {2 copy (|) PutIntervalOneAdd} bind def +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% H O O K S +/AnalyzePreHook { dup 5 1 roll } bind def +/PreEvalHook {} def +/AnalyzePostHook { 7 -1 roll pop } bind def +/AnalyzeListOfEPostHook { 6 -1 roll mark 6 1 roll cleartomark } bind def +/RollOp { 5 1 roll } bind def +end%%%tx@CoreAnalyzerDict +/tx@AddMathFunc 12 dict def tx@AddMathFunc begin +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% NEW FUNC +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% function arcsine in radians asin(x)=atan(x/sqrt(1-x^2)) +%% x -> theta +/asin {% + dup abs 1 gt { EQDFasinrangeerror } if + dup dup dup mul 1 exch sub sqrt atan exch 0 lt { 360 sub } if DegtoRad +} def +%% function arccosine in radians acos(x)=atan(sqrt(1-x^2)/x) +%% x -> theta +/acos {% + dup abs 1 gt { EQDFacosrangeerror } if + dup dup mul 1 exch sub sqrt exch atan DegtoRad +} def +%% function arctangent in radians +%% x -> theta +/atg { 1 atan dup 90 gt { 360 sub } if DegtoRad } bind def +%% HYPERBOLIC FUNCTIONS +/sh { dup Ex exch neg Ex sub 2 div } def +/ch { dup Ex exch neg Ex add 2 div } def +/th { dup sh exch ch div } def +/Argsh { dup dup mul 1 add sqrt add ln } def +/Argch { dup dup mul 1 sub sqrt add ln } def +/Argth { dup 1 add exch 1 exch sub div ln 2 div } def +%% modified exponential funtion for 0 +%% x n -> x^n +/Exp { dup 0 eq { pop pop 1 } { exp } ifelse } bind def +%% modified exponential funtion for 0 +%% x -> e^x +/Ex { Euler exch exp } bind def +%% +%% factorial function +%% n -> n! +/Fact { 1 exch 2 exch 1 exch { mul } for } bind def +/fact { Fact } bind def +/! { Fact } bind def +end +% +% END pst-algparser.pro + +%%EndProcSet +%%BeginProcSet: pst-tools.pro 0 0 +% $Id: pst-tools.pro 622 2012-01-01 15:36:14Z herbert $ +% +%% PostScript tools prologue for pstricks.tex. +%% Version 0.02, 2012/01/01 +%% +%% This program can be redistributed and/or modified under the terms +%% of the LaTeX Project Public License Distributed from CTAN archives +%% in directory macros/latex/base/lppl.txt. +% +% +/Pi2 1.57079632679489661925640 def +/factorial { % n on stack, returns n! + dup 0 eq { 1 }{ + dup 1 gt { dup 1 sub factorial mul } if } + ifelse } def +% +/MoverN { % m n on stack, returns the binomial coefficient m over n + 2 dict begin + /n exch def /m exch def + n 0 eq { 1 }{ + m n eq { 1 }{ + m factorial n factorial m n sub factorial mul div } ifelse } ifelse + end +} def +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% subroutines for complex numbers, given as an array [a b] +% which is a+bi = Real+i Imag +% +/cxadd { % [a1 b1] [a2 b2] = [a1+a2 b1+b2] + dup 0 get % [a1 b1] [a2 b2] a2 + 3 -1 roll % [a2 b2] a2 [a1 b1] + dup 0 get % [a2 b2] a2 [a1 b1] a1 + 3 -1 roll % [a2 b2] [a1 b1] a1 a2 + add % [a2 b2] [a1 b1] a1+a2 + 3 1 roll % a1+a2 [a2 b2] [a1 b1] + 1 get % a1+a2 [a2 b2] b1 + exch 1 get % a1+a2 b1 b2 + add 2 array astore +} def +% +/cxneg { % [a b] + dup 1 get % [a b] b + exch 0 get % b a + neg exch neg % -a -b + 2 array astore +} def +% +/cxsub { cxneg cxadd } def % same as negative addition +% +% [a1 b1][a2 b2] = [a1a2-b1b2 a1b2+b1a2] = [a3 b3] +/cxmul { % [a1 b1] [a2 b2] + dup 0 get % [a1 b1] [a2 b2] a2 + exch 1 get % [a1 b1] a2 b2 + 3 -1 roll % a2 b2 [a1 b1] + dup 0 get % a2 b2 [a1 b1] a1 + exch 1 get % a2 b2 a1 b1 + dup % a2 b2 a1 b1 b1 + 5 -1 roll dup % b2 a1 b1 b1 a2 a2 + 3 1 roll mul % b2 a1 b1 a2 b1a2 + 5 -2 roll dup % b1 a2 b1a2 b2 a1 a1 + 3 -1 roll dup % b1 a2 b1a2 a1 a1 b2 b2 + 3 1 roll mul % b1 a2 b1a2 a1 b2 a1b2 + 4 -1 roll add % b1 a2 a1 b2 b3 + 4 2 roll mul % b1 b2 b3 a1a2 + 4 2 roll mul sub % b3 a3 + exch 2 array astore +} def +% +% [a b]^2 = [a^2-b^2 2ab] = [a2 b2] +/cxsqr { % [a b] square root + dup 0 get exch 1 get % a b + dup dup mul % a b b^2 + 3 -1 roll % b b^2 a + dup dup mul % b b^2 a a^2 + 3 -1 roll sub % b a a2 + 3 1 roll mul 2 mul % a2 b2 + 2 array astore +} def +% +/cxsqrt { % [a b] +% dup cxnorm sqrt /r exch def +% cxarg 2 div RadtoDeg dup cos r mul exch sin r mul cxmake2 + cxlog % log[a b] + 2 cxrdiv % log[a b]/2 + aload pop exch % b a + 2.781 exch exp % b exp(a) + exch cxconv exch % [Re +iIm] exp(a) + cxrmul % +} def +% +/cxarg { % [a b] + aload pop % a b + exch atan % arctan b/a + DegtoRad % arg(z)=atan(b/a) +} def +% +% log[a b] = [a^2-b^2 2ab] = [a2 b2] +/cxlog { % [a b] + dup % [a b][a b] + cxnorm % [a b] |z| + log % [a b] log|z| + exch % log|z|[a b] + cxarg % log|z| Theta + cxmake2 % [log|z| Theta] +} def +% +% square of magnitude of complex number +/cxnorm2 { % [a b] + dup 0 get exch 1 get % a b + dup mul % a b^2 + exch dup mul add % a^2+b^2 +} def +% +/cxnorm { % [a b] + cxnorm2 sqrt +} def +% +/cxconj { % conjugent complex + dup 0 get exch 1 get % a b + neg 2 array astore % [a -b] +} def +% +/cxre { 0 get } def % real value +/cxim { 1 get } def % imag value +% +% 1/[a b] = ([a -b]/(a^2+b^2) +/cxrecip { % [a b] + dup cxnorm2 exch % n2 [a b] + dup 0 get exch 1 get % n2 a b + 3 -1 roll % a b n2 + dup % a b n2 n2 + 4 -1 roll exch div % b n2 a/n2 + 3 1 roll div % a/n2 b/n2 + neg 2 array astore +} def +% +/cxmake1 { 0 2 array astore } def % make a complex number, real given +/cxmake2 { 2 array astore } def % dito, both given +% +/cxdiv { cxrecip cxmul } def +% +% multiplikation by a real number +/cxrmul { % [a b] r + exch aload pop % r a b + 3 -1 roll dup % a b r r + 3 1 roll mul % a r b*r + 3 1 roll mul % b*r a*r + exch 2 array astore % [a*r b*r] +} def +% +% division by a real number +/cxrdiv { % [a b] r + 1 exch div % [a b] 1/r + cxrmul +} def +% +% exp(i theta) = cos(theta)+i sin(theta) polar<->cartesian +/cxconv { % theta + RadtoDeg dup sin exch cos cxmake2 +} def + +%%%%% ### bubblesort ### +%% syntax : array bubblesort --> array2 trie par ordre croissant +%% code de Bill Casselman +%% http://www.math.ubc.ca/people/faculty/cass/graphics/text/www/ +/bubblesort { % on stack must be an array [ ... ] +4 dict begin + /a exch def + /n a length 1 sub def + n 0 gt { + % at this point only the n+1 items in the bottom of a remain to + % the sorted largest item in that blocks is to be moved up into + % position n + n { + 0 1 n 1 sub { + /i exch def + a i get a i 1 add get gt { + % if a[i] > a[i+1] swap a[i] and a[i+1] + a i 1 add + a i get + a i a i 1 add get + % set new a[i] = old a[i+1] + put + % set new a[i+1] = old a[i] + put + } if + } for + /n n 1 sub def + } repeat + } if + a % return the sorted array +end +} def +% +/concatstringarray{ % [(a) (b) ... (z)] --> (ab...z) 20100422 + 0 1 index { length add } forall + string + 0 3 2 roll + { 3 copy putinterval length add }forall + pop +} bind def +% +/dot2comma {% on stack a string (...) + 2 dict begin + /Output exch def + 0 1 Output length 1 sub { + /Index exch def + Output Index get 46 eq { Output Index 44 put } if + } for + Output + end +} def +% +%-----------------------------------------------------------------------------% +% END pst-tools.pro + +%%EndProcSet +%%BeginProcSet: pst-dots.pro 0 0 +% $Id: pst-dots.pro 130 2009-08-27 08:55:03Z herbert $ +% +%% PostScript prologue for pstricks.tex. +%% Version 2.02, 2009/06/16 +%% +%% For distribution, see pstricks.tex. +%% +%% Timothy Van Zandt <tvz@Princeton.EDU> +%% +%% This program can be redistributed and/or modified under the terms +%% of the LaTeX Project Public License Distributed from CTAN archives +%% in directory macros/latex/base/lppl.txt. +%% +%% Modified by Etienne Riga - Dec. 16, 1999 +%% Modified by Etienne Riga - 2005/01/01 (er) +%% to add /Diamond, /SolidDiamond and /BoldDiamond +%% Modified by Herbert Voss (hv) - 2008/04/17 +% +10 dict dup begin % hold local + /FontType 3 def + /FontMatrix [.001 0 0 .001 0 0] def +% /FontBBox [-571.5 -742.5 571.5 742.5] def % changed to next line 20060616 hv + /FontBBox [-1000 -1000 1000 1000] def % See end of file in /BuildGlyph + /Encoding 256 array def + 0 1 255 {Encoding exch /.notdef put} for % fill the array with /.notdef + Encoding % replace with given dot names + dup (b) 0 get /Bullet put % get the numerical position of b in ASCII +% % and save /Bullet at this place in Encoding + dup (c) 0 get /Circle put + dup (C) 0 get /BoldCircle put % 67 + dup (u) 0 get /SolidTriangle put + dup (t) 0 get /Triangle put + dup (T) 0 get /BoldTriangle put + dup (r) 0 get /SolidSquare put + dup (s) 0 get /Square put + dup (S) 0 get /BoldSquare put + dup (q) 0 get /SolidPentagon put + dup (p) 0 get /Pentagon put + dup (P) 0 get /BoldPentagon put +%%% + dup (k) 0 get /Asterisk put + dup (K) 0 get /BoldAsterisk put + dup (J) 0 get /SolidAsterisk put + dup (h) 0 get /Hexagon put + dup (H) 0 get /BoldHexagon put + dup (G) 0 get /SolidHexagon put + dup (f) 0 get /Octogon put % 2008-04-18 hv + dup (F) 0 get /BoldOctogon put % 2008-04-18 hv + dup (g) 0 get /SolidOctogon put % 2008-04-18 hv + dup (a) 0 get /Add put + dup (A) 0 get /BoldAdd put % 65 + dup (x) 0 get /Mul put + dup (X) 0 get /BoldMul put + dup (m) 0 get /Oplus put + dup (M) 0 get /BOplus put + dup (e) 0 get /SolidOplus put + dup (n) 0 get /Otimes put + dup (N) 0 get /BOtimes put + dup (E) 0 get /SolidOtimes put + dup (i) 0 get /Bar put + dup (I) 0 get /BoldBar put + dup (l) 0 get /SolidDiamond put + dup (d) 0 get /Diamond put + (D) 0 get /BoldDiamond put +%%% +/CharProcs 47 dict def +CharProcs begin + /CirclePath {0 0 500 0 360 arc closepath} def + /Bullet {CirclePath fill} def + /Circle {CirclePath .9 .9 scale CirclePath eofill} def + /BoldCircle {CirclePath .8 .8 scale CirclePath eofill} def + /TrianglePath {0 660 moveto -571.5 -330 lineto 571.5 -330 lineto closepath} def + /SolidTriangle {TrianglePath fill} def + /Triangle {TrianglePath .85 .85 scale TrianglePath eofill} def + /BoldTriangle {TrianglePath .7 .7 scale TrianglePath eofill} def + /SquarePath {-450 450 moveto 450 450 lineto 450 -450 lineto -450 -450 lineto closepath} def + /SolidSquare {SquarePath fill} def + /Square {SquarePath .89 .89 scale SquarePath eofill} def + /BoldSquare {SquarePath .78 .78 scale SquarePath eofill} def + /PentagonPath { + -337.8 -465 moveto 337.8 -465 lineto 546.6 177.6 lineto + 0 574.7 lineto -546.6 177.6 lineto closepath + } def + /SolidPentagon {PentagonPath fill} def + /Pentagon {PentagonPath .89 .89 scale PentagonPath eofill} def + /BoldPentagon {PentagonPath .78 .78 scale PentagonPath eofill} def +%-------------- hv begin 2004/07/25 from: er 2003/03/24 + /HexagonPath { + 0 550 moveto -476 275 lineto -476 -275 lineto + 0 -550 lineto 476 -275 lineto 476 275 lineto closepath + } def + /SolidHexagon {HexagonPath fill} def + /Hexagon {HexagonPath .89 .89 scale HexagonPath eofill} def + /BoldHexagon {HexagonPath .79 .79 scale HexagonPath eofill} def +% 2008-04-18 hv + /OctogonPath { + 550 dup 22.5 tan mul dup neg dup add /xMove exch def + exch moveto 7 { xMove 0 rlineto 45 rotate } repeat closepath } def + /SolidOctogon { OctogonPath fill } def + /Octogon { OctogonPath .89 .89 scale OctogonPath eofill } def + /BoldOctogon { OctogonPath .79 .79 scale OctogonPath eofill } def +% + /AsteriskPath { + 20 0 moveto 10 250 180 500 0 500 curveto + -180 500 -10 250 -20 0 curveto closepath + } def + /Asterisk { + AsteriskPath 60 rotate AsteriskPath 60 rotate AsteriskPath + 60 rotate AsteriskPath 60 rotate AsteriskPath 60 rotate AsteriskPath fill + } def +% + /Basterp {50 250 220 500 0 500 curveto -220 500 -50 250 -50 30 cos 100 mul curveto} def + /BoldAsteriskPath { + 50 30 cos 100 mul moveto Basterp + 60 rotate Basterp 60 rotate Basterp + 60 rotate Basterp 60 rotate Basterp + 60 rotate Basterp closepath + } def + /BoldAsterisk {BoldAsteriskPath fill} def + /SolidAsterisk {CirclePath .9 .9 scale BoldAsteriskPath eofill} def + /CrossPath { + 40 550 moveto -40 550 lineto -40 40 lineto -550 40 lineto + -550 -40 lineto -40 -40 lineto -40 -550 lineto 40 -550 lineto + 40 -40 lineto 550 -40 lineto 550 40 lineto 40 40 lineto closepath + } def + /BoldCrossPath {80 550 moveto -80 550 lineto -80 80 lineto -550 80 lineto + -550 -80 lineto -80 -80 lineto -80 -550 lineto 80 -550 lineto + 80 -80 lineto 550 -80 lineto 550 80 lineto 80 80 lineto closepath + } def + /Add {CrossPath fill} def + /Mul {45 rotate CrossPath fill} def + /BoldAdd {BoldCrossPath fill} def + /BoldMul {45 rotate BoldCrossPath fill} def + /Oplus {CirclePath .9 .9 scale CirclePath eofill .775 .775 scale CrossPath fill } def + /SolidOplus {CirclePath .775 .775 scale BoldCrossPath eofill} def + /BOplus {CirclePath .8 .8 scale CirclePath eofill .775 .775 scale BoldCrossPath fill} def + /Otimes {CirclePath .9 .9 scale CirclePath eofill 45 rotate .775 .775 scale CrossPath fill} def + /BOtimes {CirclePath .8 .8 scale CirclePath eofill 45 rotate .775 .775 scale BoldCrossPath fill } def + /SolidOtimes {CirclePath 45 rotate .775 .775 scale BoldCrossPath eofill} def + /BarPath {40 660 moveto -40 660 lineto -40 -660 lineto 40 -660 lineto closepath} def + /Bar {BarPath fill} def + /BoldBarPath {80 660 moveto -80 660 lineto -80 -660 lineto 80 -660 lineto closepath} def + /BoldBar {BoldBarPath fill} def + /DiamondPath {0 742.5 moveto -428.5 0 lineto 0 -742.5 lineto 428.5 0 lineto closepath} def + /SolidDiamond {DiamondPath fill} def + /Diamond {DiamondPath .865 .865 scale DiamondPath eofill} def + /BoldDiamond {DiamondPath .73 .73 scale DiamondPath eofill} def +%%% + /.notdef { } def +end +% +/BuildGlyph { + exch + begin +% Metrics 1 index get exec 0 + 0 0 +% BBoxes 3 index get exec + -1000 -1000 1000 1000 +% -571.5 -742.5 571.5 742.5 + setcachedevice + CharProcs begin load exec end + end +} def +% +/BuildChar { + 1 index /Encoding get exch get + 1 index /BuildGlyph get exec +} bind def +% +end +/PSTricksDotFont exch definefont pop +% +%% end + +%%EndProcSet +%%BeginProcSet: pst-node.pro 0 0 +% $Id: pst-node.pro 645 2012-02-12 09:09:51Z herbert $ +%% +%% PostScript prologue for pst-node.tex. +%% Version 1.13, 2011/11/21. +%% +%% This program can be redistributed and/or modified under the terms +%% of the LaTeX Project Public License Distributed from CTAN archives +%% in directory macros/latex/base/lppl.txt. +% +/tx@NodeDict 400 dict def tx@NodeDict begin +tx@Dict begin % from main pstricks dict + /T /translate load def + /CP /currentpoint load def +end +/NewNode { % on stack: { x y } boolean N@name type InitXnode + gsave + NodeScale % a bugfix for xelatex, it's empty for dvips + /next exch def % { x y } boolean N@name type + dict dup % { x y } boolean N@name dict dict + 3 1 roll def % { x y } boolean dict N@name dict def + exch { dup 3 1 roll def } if % { x y } dict boolean + begin % { x y } dict begin + tx@Dict begin + STV CP T exec % set scaling + end + /NodeMtrx CM def % save CM + next % InitXNode + end + grestore +} def +% +/InitPnode { + /Y ED /X ED + /NodePos { NodeSep Cos mul NodeSep Sin mul } def +} def +% +/InitCnode { + /r ED /Y ED /X ED + /NodePos { NodeSep r add dup Cos mul exch Sin mul } def +} def +% +/GetRnodePos { + Cos 0 gt { /dx r NodeSep add def } { /dx l NodeSep sub def } ifelse + Sin 0 gt { /dy u NodeSep add def } { /dy d NodeSep sub def } ifelse + dx Sin mul abs dy + Cos mul abs gt { dy Cos mul Sin div dy } { dx dup Sin mul Cos Div } ifelse +} def +% +/InitRnode { + /Y ED /X ED X sub /r ED /l X neg def Y add neg /d ED Y sub /u ED + /NodePos { GetRnodePos } def +} def +% +/DiaNodePos { + w h mul w Sin mul abs h Cos mul abs add Div NodeSep add dup + Cos mul exch Sin mul +} def +% +/TriNodePos { + Sin s lt + { d NodeSep sub dup Cos mul Sin Div exch } + { w h mul w Sin mul h Cos abs mul add Div + NodeSep add dup Cos mul exch Sin mul + } ifelse +} def +% +/InitTriNode { + sub 2 div exch + 2 div exch + 2 copy T + 2 copy 4 index index /d ED + pop pop pop pop + -90 mul rotate + /NodeMtrx CM def + /X 0 def /Y 0 def + d sub abs neg /d ED + d add /h ED + 2 div h mul h d sub Div /w ED + /s d w Atan sin def + /NodePos { TriNodePos } def +} def +% +/OvalNodePos { + /ww w NodeSep add def + /hh h NodeSep add def + Sin ww mul Cos hh mul Atan dup cos ww mul exch sin hh mul +} def +% +/GetCenter { begin X Y NodeMtrx transform CM itransform end } def +% +/XYPos { + dup sin exch cos Do + /Cos ED /Sin ED /Dist ED + Cos 0 gt + { Dist Dist Sin mul Cos div } + { Cos 0 lt + { Dist neg Dist Sin mul Cos div neg } + { 0 Dist Sin mul } ifelse + } ifelse + Do +} def +% +/GetEdge { + dup 0 eq + { pop begin 1 0 NodeMtrx dtransform + CM idtransform + exch atan sub + dup + sin /Sin ED + cos /Cos ED + /NodeSep ED + NodePos NodeMtrx dtransform CM idtransform end } + { 1 eq {{exch}} {{}} ifelse /Do ED pop XYPos } ifelse +} def +% +/AddOffset { + 1 index 0 eq + { pop pop } + { 2 copy 5 2 roll cos mul add 4 1 roll sin mul sub exch } ifelse +} def +% +/GetEdgeA { + NodeSepA AngleA NodeA NodeSepTypeA GetEdge + OffsetA AngleA AddOffset + yA add /yA1 ED + xA add /xA1 ED +} def +% +/GetEdgeB { + NodeSepB AngleB NodeB NodeSepTypeB GetEdge + OffsetB AngleB AddOffset + yB add /yB1 ED + xB add /xB1 ED +} def +% +/GetArmA { + ArmTypeA 0 eq + { /xA2 ArmA AngleA cos mul xA1 add def + /yA2 ArmA AngleA sin mul yA1 add def } + { ArmTypeA 1 eq {{exch}} {{}} ifelse + /Do ED + ArmA AngleA XYPos OffsetA AngleA AddOffset + yA add /yA2 ED + xA add /xA2 ED } ifelse +} def +% +/GetArmB { + ArmTypeB 0 eq + { /xB2 ArmB AngleB cos mul xB1 add def + /yB2 ArmB AngleB sin mul yB1 add def } + { ArmTypeB 1 eq {{exch}} {{}} ifelse + /Do ED + ArmB AngleB XYPos OffsetB AngleB AddOffset + yB add /yB2 ED + xB add /xB2 ED } ifelse +} def +% +/InitNC { + /b ED /a ED % second and first node + /NodeSepTypeB ED /NodeSepTypeA ED + /NodeSepB ED /NodeSepA ED + /OffsetB ED /OffsetA ED + tx@NodeDict a known tx@NodeDict b known and dup { + /NodeA a load def + /NodeB b load def + NodeA GetCenter /yA ED /xA ED + NodeB GetCenter /yB ED /xB ED } if +} def +% +/LPutLine { + 4 copy + 3 -1 roll sub neg 3 1 roll sub Atan /NAngle ED + 1 t sub mul + 3 1 roll 1 t sub mul + 4 1 roll t mul add /Y ED + t mul add /X ED +} def +% +/LPutLines { + mark LPutVar counttomark 2 div 1 sub /n ED +% t floor dup n gt + t floor dup n ge % to allow npos<= hv 2008-08-14 + { pop n 1 sub /t 1 def } { dup t sub neg /t ED } ifelse + cvi 2 mul { pop } repeat + LPutLine + cleartomark +} def +% +/BezierMidpoint { + /y3 ED /x3 ED /y2 ED /x2 ED /y1 ED /x1 ED /y0 ED /x0 ED /t ED + /cx x1 x0 sub 3 mul def + /cy y1 y0 sub 3 mul def + /bx x2 x1 sub 3 mul cx sub def + /by y2 y1 sub 3 mul cy sub def + /ax x3 x0 sub cx sub bx sub def + /ay y3 y0 sub cy sub by sub def + ax t 3 exp mul bx t t mul mul add + cx t mul add x0 add ay t 3 exp mul + by t t mul mul add cy t mul add + y0 add 3 ay t t mul mul mul 2 + by t mul mul add cy add 3 ax t t mul mul mul + 2 bx t mul mul add cx add atan /NAngle ED + /Y ED /X ED +} def +% +/HPosBegin { yB yA ge { /t 1 t sub def } if /Y yB yA sub t mul yA add def +} def +/HPosEnd { /X Y yyA sub yyB yyA sub Div xxB xxA sub mul xxA add def +/NAngle yyB yyA sub xxB xxA sub Atan def } def +/HPutLine { HPosBegin /yyA ED /xxA ED /yyB ED /xxB ED HPosEnd } def +/HPutLines { HPosBegin yB yA ge { /check { le } def } { /check { ge } def +} ifelse /xxA xA def /yyA yA def mark xB yB LPutVar { dup Y check { exit +} { /yyA ED /xxA ED } ifelse } loop /yyB ED /xxB ED cleartomark HPosEnd +} def +/VPosBegin { xB xA lt { /t 1 t sub def } if /X xB xA sub t mul xA add def +} def +/VPosEnd { /Y X xxA sub xxB xxA sub Div yyB yyA sub mul yyA add def +/NAngle yyB yyA sub xxB xxA sub Atan def } def +/VPutLine { VPosBegin /yyA ED /xxA ED /yyB ED /xxB ED VPosEnd } def +/VPutLines { VPosBegin xB xA ge { /check { le } def } { /check { ge } def +} ifelse /xxA xA def /yyA yA def mark xB yB LPutVar { 1 index X check { +exit } { /yyA ED /xxA ED } ifelse } loop /yyB ED /xxB ED cleartomark +VPosEnd } def +/HPutCurve { gsave newpath /SaveLPutVar /LPutVar load def LPutVar 8 -2 +roll moveto curveto flattenpath /LPutVar [ {} {} {} {} pathforall ] cvx +def grestore exec /LPutVar /SaveLPutVar load def } def +/NCCoor { /AngleA yB yA sub xB xA sub Atan def /AngleB AngleA 180 add def +GetEdgeA GetEdgeB /LPutVar [ xB1 yB1 xA1 yA1 ] cvx def /LPutPos { +LPutVar LPutLine } def /HPutPos { LPutVar HPutLine } def /VPutPos { +LPutVar VPutLine } def LPutVar } def +% +/NCLine { + NCCoor + tx@Dict begin + ArrowA CP 4 2 roll + ArrowB + lineto pop pop + end +} def +% +/NCLines { + false NArray + n 0 eq + { NCLine } + { 2 copy yA sub exch xA sub Atan /AngleA ED + n 2 mul dup index exch index yB sub exch xB sub + Atan /AngleB ED + GetEdgeA GetEdgeB + /LPutVar [ xB1 yB1 n 2 mul 4 add 4 roll xA1 yA1 ] cvx def + mark LPutVar + tx@Dict begin false Line end + /LPutPos { LPutLines } def + /HPutPos { HPutLines } def + /VPutPos { VPutLines } def + } ifelse +} def +% +/NCCurve { + GetEdgeA + GetEdgeB + xA1 xB1 sub yA1 yB1 sub Pyth 2 div dup 3 -1 +roll mul /ArmA ED mul /ArmB ED /ArmTypeA 0 def /ArmTypeB 0 def GetArmA +GetArmB xA2 yA2 xA1 yA1 tx@Dict begin ArrowA end xB2 yB2 xB1 yB1 tx@Dict +begin ArrowB end curveto /LPutVar [ xA1 yA1 xA2 yA2 xB2 yB2 xB1 yB1 ] +cvx def /LPutPos { t LPutVar BezierMidpoint } def /HPutPos { { HPutLines +} HPutCurve } def /VPutPos { { VPutLines } HPutCurve } def } def +% +/NCAngles { + GetEdgeA GetEdgeB GetArmA GetArmB + /mtrx AngleA matrix rotate def + xA2 yA2 mtrx transform pop + xB2 yB2 mtrx transform exch pop + mtrx itransform + /y0 ED /x0 ED + mark ArmB 0 ne { xB1 yB1 } if + xB2 yB2 x0 y0 xA2 yA2 + ArmA 0 ne { xA1 yA1 } if + tx@Dict begin false Line end + /LPutVar [ xB1 yB1 xB2 yB2 x0 y0 xA2 yA2 xA1 yA1 ] cvx def + /LPutPos { LPutLines } def + /HPutPos { HPutLines } def + /VPutPos { VPutLines } def } def +% +/NCAngle { + GetEdgeA GetEdgeB GetArmB + /mtrx AngleA matrix rotate def + xB2 yB2 mtrx itransform pop xA1 yA1 mtrx itransform exch pop mtrx transform + /y0 ED /x0 ED + mark + ArmB 0 ne { xB1 yB1 } if + xB2 yB2 x0 y0 xA1 yA1 + tx@Dict begin false Line end + /LPutVar [ xB1 yB1 xB2 yB2 x0 y0 xA1 yA1 ] cvx def + /LPutPos { LPutLines } def + /HPutPos { HPutLines } def + /VPutPos { VPutLines } def +} def +% +/NCBar { + GetEdgeA GetEdgeB GetArmA GetArmB + /mtrx AngleA matrix rotate def + xA2 yA2 mtrx itransform pop + xB2 yB2 mtrx itransform pop + sub dup 0 mtrx transform + 3 -1 roll 0 gt + { /yB2 exch yB2 add def /xB2 exch xB2 add def } + { /yA2 exch neg yA2 add def /xA2 exch neg xA2 add def } ifelse + mark + ArmB 0 ne { xB1 yB1 } if + xB2 yB2 xA2 yA2 ArmA 0 ne { xA1 yA1 } if + tx@Dict begin false Line end + /LPutVar [ xB1 yB1 xB2 yB2 xA2 yA2 xA1 yA1 ] cvx def + /LPutPos { LPutLines } def + /HPutPos { HPutLines } def + /VPutPos { VPutLines } def +} def +% +/NCDiag { + /lineAngle ED + GetEdgeA GetEdgeB GetArmA GetArmB mark + lineAngle abs 0 gt { + /xTemp xA2 10 add def + /yTemp yA2 lineAngle dup sin exch cos div 10 mul add def + /dY1 yTemp yA2 sub def + /dX1 xTemp xA2 sub def + /dY2 yB2 yB1 sub def + /dX2 xB2 xB1 sub def + dX1 abs 0.01 lt { + /m2 dY2 dX2 div def + /xB2 xA2 def + /yB2 xA2 xB1 sub m2 mul yB1 add def + }{ + dX2 abs 0.01 lt { + /m1 dY1 dX1 div def + /xB2 xB1 def + /yB2 xB1 xA2 sub m1 mul yA2 add def + }{% + /m1 dY1 dX1 div def + /m2 dY2 dX2 div def + /xB2 m1 xA2 mul m2 xB1 mul sub yA2 sub yB1 add m1 m2 sub div def + /yB2 xB2 xA2 sub m1 mul yA2 add def + } ifelse + } ifelse + } if + ArmB 0 ne { xB1 yB1 } if + xB2 yB2 xA2 yA2 + ArmA 0 ne { xA1 yA1 } if + tx@Dict begin false Line end + /LPutVar [ xB1 yB1 xB2 yB2 xA2 yA2 xA1 yA1 ] cvx def + /LPutPos { LPutLines } def + /HPutPos { HPutLines } def + /VPutPos { VPutLines } def +% +% GetEdgeA GetEdgeB GetArmA GetArmB mark +% ArmB 0 ne { xB1 yB1 } if +% xB2 yB2 xA2 yA2 +% ArmA 0 ne { xA1 yA1 } if +% tx@Dict begin false Line end +% /LPutVar [ xB1 yB1 xB2 yB2 xA2 yA2 xA1 yA1 ] cvx def +% /LPutPos { LPutLines } def +% /HPutPos { HPutLines } def +% /VPutPos { VPutLines } def +} def +% +/NCDiagg { + /lineAngle ED + GetEdgeA GetArmA + lineAngle abs 0 gt + { lineAngle } + { yB yA2 sub xB xA2 sub Atan 180 add } ifelse + /AngleB ED + GetEdgeB mark + lineAngle abs 0 gt { + /dY2 yA2 yA1 sub def + /dX2 xA2 xA1 sub def + lineAngle abs 90 eq { + /m2 dY2 dX2 div def + /yA2 xB xA2 sub m2 mul yA2 add def + /xA2 xB def + }{ + /m1 lineAngle dup sin exch cos div def % tan alpha + dX2 abs 0.01 lt { + /yA2 xA1 xB sub m1 mul yB add def + /xA2 xA1 def + }{% + /m2 dY2 dX2 div def + /xA2 m1 xB mul m2 xA2 mul sub yA2 add yB sub m1 m2 sub div def + /yA2 xA2 xB sub m1 mul yB add def + } ifelse + } ifelse + } if + xB1 yB1 xA2 yA2 + ArmA 0 ne { xA1 yA1 } if + tx@Dict begin false Line end + /LPutVar [ xB1 yB1 xA2 yA2 xA1 yA1 ] cvx def + /LPutPos { LPutLines } def + /HPutPos { HPutLines } def + /VPutPos { VPutLines } def +% +% GetEdgeA GetArmA +% yB yA2 sub xB xA2 sub Atan 180 add /AngleB ED +% GetEdgeB +% mark +% xB1 yB1 xA2 yA2 +% ArmA 0 ne { xA1 yA1 } if +% tx@Dict begin false Line end +% /LPutVar [ xB1 yB1 xA2 yA2 xA1 yA1 ] cvx def +% /LPutPos { LPutLines } def +% /HPutPos { HPutLines } def +% /VPutPos { VPutLines } def +} def +% +/NCLoop { + GetEdgeA GetEdgeB GetArmA GetArmB + /mtrx AngleA matrix rotate def + xA2 yA2 mtrx transform loopsize add /yA3 ED /xA3 ED + /xB3 xB2 yB2 mtrx transform pop def + xB3 yA3 mtrx itransform /yB3 ED /xB3 ED + xA3 yA3 mtrx itransform /yA3 ED /xA3 ED + mark ArmB 0 ne { xB1 yB1 } if + xB2 yB2 xB3 yB3 xA3 yA3 xA2 yA2 ArmA 0 ne { xA1 yA1 } if + tx@Dict begin false Line end + /LPutVar [ xB1 yB1 xB2 yB2 xB3 yB3 xA3 yA3 xA2 yA2 xA1 yA1 ] cvx def + /LPutPos { LPutLines } def + /HPutPos { HPutLines } def + /VPutPos { VPutLines } def +} def +% +% DG/SR modification begin - May 9, 1997 - Patch 1 +%/NCCircle { 0 0 NodesepA nodeA \tx@GetEdge pop xA sub 2 div dup 2 exp r +%r mul sub abs sqrt atan 2 mul /a ED r AngleA 90 add PtoC yA add exch xA add +%exch 2 copy /LPutVar [ 4 2 roll r AngleA ] cvx def /LPutPos { LPutVar t 360 +%mul add dup 5 1 roll 90 sub \tx@PtoC 3 -1 roll add /Y ED add /X ED /NAngle ED +% +/NCCircle { + NodeSepA 0 NodeA 0 GetEdge pop + 2 div dup 2 exp r r mul sub abs sqrt + atan 2 mul /a ED + r AngleA 90 add PtoC yA add exch xA add + exch 2 copy + /LPutVar [ 4 2 roll r AngleA ] cvx def + /LPutPos { + LPutVar t 360 mul add dup 5 1 roll 90 sub PtoC + 3 -1 roll add + /Y ED add /X ED /NAngle ED +% DG/SR modification end + } def + /HPutPos { LPutPos } def + /VPutPos { LPutPos } def + r AngleA 90 sub a add AngleA 270 add a sub + tx@Dict begin + /angleB ED /angleA ED /r ED + /c 57.2957 r Div def + /y ED /x ED +} def +% +/NCBox { + /d ED /h ED + /AngleB yB yA sub xB xA sub Atan def + /AngleA AngleB 180 add def + GetEdgeA GetEdgeB + /dx d AngleB sin mul def + /dy d AngleB cos mul neg def + /hx h AngleB sin mul neg def + /hy h AngleB cos mul def + /LPutVar [ + xA1 hx add yA1 hy add xB1 hx add yB1 hy add + xB1 dx add yB1 dy add xA1 dx add yA1 dy add ] cvx def + /LPutPos { LPutLines } def + /HPutPos { xB yB xA yA LPutLine } def + /VPutPos { HPutPos } def + mark + LPutVar tx@Dict begin false Polygon end +} def +% +/NCArcBox { + /l ED neg /d ED /h ED /a ED + /AngleA yB yA sub xB xA sub Atan def + /AngleB AngleA 180 add def + /tA AngleA a sub 90 add def + /tB tA a 2 mul add def + /r xB xA sub tA cos tB cos sub Div dup 0 eq { pop 1 } if def + /x0 xA r tA cos mul add def + /y0 yA r tA sin mul add def + /c 57.2958 r div def + /AngleA AngleA a sub 180 add def + /AngleB AngleB a add 180 add def + GetEdgeA GetEdgeB + /AngleA tA 180 add yA yA1 sub xA xA1 sub Pyth c mul sub def + /AngleB tB 180 add yB yB1 sub xB xB1 sub Pyth c mul add def + l 0 eq { + x0 y0 r h add AngleA AngleB arc x0 y0 r d add AngleB AngleA arcn + }{ + x0 y0 translate + /tA AngleA l c mul add def + /tB AngleB l c mul sub def + 0 0 r h add tA tB arc r h add + AngleB PtoC r d add + AngleB PtoC 2 copy + 6 2 roll l arcto 4 { pop } repeat + r d add tB PtoC l arcto 4 { pop } repeat + 0 0 r d add tB tA arcn r d add + AngleA PtoC r h add + AngleA PtoC 2 copy 6 2 roll + l arcto 4 { pop } repeat + r h add tA PtoC l arcto 4 { pop } repeat + } ifelse + closepath + /LPutVar [ x0 y0 r AngleA AngleB h d ] cvx def + /LPutPos { + LPutVar /d ED /h ED + /AngleB ED /AngleA ED + /r ED /y0 ED /x0 ED + t 1 le { + r h add AngleA 1 t sub mul AngleB t mul add dup 90 add /NAngle ED PtoC + }{t 2 lt { + /NAngle AngleB 180 add def r 2 t sub + h mul t 1 sub d mul add add AngleB PtoC + }{ + t 3 lt { + r d add AngleB 3 t sub mul AngleA 2 t sub + mul add dup 90 sub /NAngle ED PtoC + }{ + /NAngle AngleA 180 add def + r 4 t sub d mul t 3 sub h mul add add AngleA PtoC + } ifelse + } ifelse + } ifelse + y0 add /Y ED x0 add /X ED + } def + /HPutPos { LPutPos } def + /VPutPos { LPutPos } def +} def +% +/Tfan { /AngleA yB yA sub xB xA sub Atan def GetEdgeA w xA1 xB sub yA1 yB +sub Pyth Pyth w Div CLW 2 div mul 2 div dup AngleA sin mul yA1 add /yA1 +ED AngleA cos mul xA1 add /xA1 ED /LPutVar [ xA1 yA1 m { xB w add yB xB +w sub yB } { xB yB w sub xB yB w add } ifelse xA1 yA1 ] cvx def /LPutPos +{ LPutLines } def /VPutPos@ { LPutVar flag { 8 4 roll pop pop pop pop } +{ pop pop pop pop 4 2 roll } ifelse } def /VPutPos { VPutPos@ VPutLine } +def /HPutPos { VPutPos@ HPutLine } def mark LPutVar tx@Dict begin +/ArrowA { moveto } def /ArrowB { } def false Line closepath end } def +% +/LPutCoor { + NAngle + tx@Dict begin /NAngle ED end + gsave + CM STV + CP Y sub neg exch X sub neg exch moveto + setmatrix CP + grestore +} def +% +/LPut { + tx@NodeDict /LPutPos known + { LPutPos } { CP /Y ED /X ED /NAngle 0 def } ifelse + LPutCoor +} def +% +/HPutAdjust { + Sin Cos mul 0 eq + { 0 } + { d Cos mul Sin div flag not { neg } if + h Cos mul Sin div flag { neg } if + 2 copy gt { pop } { exch pop } ifelse + } ifelse + s add flag { r add neg }{ l add } ifelse + X add /X ED +} def +% +/VPutAdjust { + Sin Cos mul + 0 eq + { 0 } + { l Sin mul Cos div flag { neg } if + r Sin mul Cos div flag not { neg } if + 2 copy gt { pop } { exch pop } ifelse + } ifelse + s add flag { d add } { h add neg } ifelse + Y add /Y ED +} def +% +% +end +% +% END pst-node.pro + +%%EndProcSet +%%BeginProcSet: pst-3d.pro 0 0 +%% $Id: pst-3d.pro 247 2010-01-04 22:45:42Z herbert $ +% PostScript prologue for pst-3d.tex. +% Version 0.01, 2010/01/01 +% +/tx@3Ddict 300 dict def +tx@3Ddict begin +% +/SetMatrixThreeD { + dup sin /e ED cos /f ED + /p3 ED /p2 ED /p1 ED + p1 0 eq + { /a 0 def /b p2 0 le { 1 } { -1 } ifelse def + p3 p2 abs + } + { p2 0 eq + { /a p1 0 lt { -1 } { 1 } ifelse def /b 0 def + p3 p1 abs + } + { p1 dup mul p2 dup mul add sqrt dup + p1 exch div /a ED + p2 exch div neg /b ED + p3 p1 a div + } + ifelse + } + ifelse + atan dup sin /c ED cos /d ED + /Matrix3D + [ + b f mul c a mul e mul sub + a f mul c b mul e mul add + d e mul + b e mul neg c a mul f mul sub + a e mul neg c b mul f mul add + d f mul + ] def +} def +% +/ProjThreeD { + /z ED /y ED /x ED + Matrix3D aload pop + z mul exch y mul add exch x mul add + 4 1 roll + z mul exch y mul add exch x mul add + exch +} def +% +/SetMatrixEmbed { + SetMatrixThreeD + Matrix3D aload pop + /z3 ED /z2 ED /z1 ED /x3 ED /x2 ED /x1 ED + SetMatrixThreeD + [ + Matrix3D aload pop + z3 mul exch z2 mul add exch z1 mul add 4 1 roll + z3 mul exch z2 mul add exch z1 mul add + Matrix3D aload pop + x3 mul exch x2 mul add exch x1 mul add 4 1 roll + x3 mul exch x2 mul add exch x1 mul add + 3 -1 roll 3 -1 roll 4 -1 roll 8 -3 roll 3 copy + x3 mul exch x2 mul add exch x1 mul add 4 1 roll + z3 mul exch z2 mul add exch z1 mul add + ] + concat +} def +% +/TMSave { + tx@Dict /TMatrix known not { /TMatrix { } def /RAngle { 0 } def } if + /TMatrix [ TMatrix CM ] cvx def +} def +% +/TMRestore { CP /TMatrix [ TMatrix setmatrix ] cvx def moveto } def +% +/TMChange { + TMSave + /cp [ currentpoint ] cvx def % ??? Check this later. + CM + CP T STV + CM matrix invertmatrix % Inv(M') + matrix concatmatrix % M Inv(M') + exch exec + concat cp moveto +} def +% +end % of tx@3Ddict +%% +%% End of file `pst-3d.pro'. + +%%EndProcSet +%%BeginProcSet: pst-math.pro 0 0 +% -*- Mode: Postscript -*- +% pst-math.pro --- PostScript header file pst-math.pro +% +% Author : Christophe JORSSEN +% Author : Herbert Voß <hvoss@tug.org> +% Created the : Sat 20 March 2004 +% Last Mod : $Date: 2010/10/02 $ +% Version : 0.62 $ +% +/PI 3.14159265359 def +/ENeperian 2.71828182846 def +% +/DegToRad {PI mul 180 div} bind def +/RadToDeg {180 mul PI div} bind def +% +/COS {RadToDeg cos} bind def +/SIN {RadToDeg sin} bind def +/TAN {dup SIN exch COS Div} bind def +/tan {dup sin exch cos Div} bind def +/ATAN {neg -1 atan 180 sub DegToRad} bind def +/ACOS {dup dup mul neg 1 add sqrt exch atan DegToRad} bind def +/acos {dup dup mul neg 1 add sqrt exch atan} bind def +/ASIN {neg dup dup mul neg 1 add sqrt neg atan 180 sub DegToRad} bind def +/asin {neg dup dup mul neg 1 add sqrt neg atan 180 sub} bind def +% +/EXP {ENeperian exch exp} bind def +% +/COSH {dup EXP exch neg EXP add 2 div} bind def +/SINH {dup EXP exch neg EXP sub 2 div} bind def +/TANH {dup SINH exch COSH div} bind def +/ACOSH {dup dup mul 1 sub sqrt add ln} bind def +/ASINH {dup dup mul 1 add sqrt add ln} bind def +/ATANH {dup 1 add exch neg 1 add Div ln 2 div} bind def +% +%/SINC {dup SIN exch Div} bind def +/SINC { dup 0 eq { pop 1 } { dup SIN exch div } ifelse } bind def + +/GAUSS {dup mul 2 mul dup 4 -2 roll sub dup mul exch div neg EXP exch PI mul sqrt div} bind def +% +/GAMMA { 2 dict begin % hv 2007-08-30 + /z exch def + 1.000000000190015 % p(0) + 0 1 5 { % on stack is 0 1 2 3 4 5 + dup % n-1 n-1 + [ 76.18009172947146 + -86.50532032941677 + 24.0140982483091 + -1.231739572450155 + 0.1208650973866179E-2 + -0.5395239384953E-5 ] exch get exch % p(n) n-1 + 1 add z add div % p(n)/(z+n) + add % build the sum + } for + Pi 2 mul sqrt z div mul + z 5.5 add z 0.5 add exp mul ENeperian z 5.5 add neg exp mul + end } bind def +% +/GAMMALN {dup dup dup 5.5 add dup ln 3 -1 roll .5 add mul sub neg 1.000000000190015 + 0 1 5 { + [76.18009172947146 -86.50532032941677 24.0140982483091 -1.231739572450155 + .1208650973866179E-2 -.5395239384953E-5 2.5066282746310005] exch get + 4 -1 roll 1 add dup 5 1 roll div add} for + 4 -1 roll div 2.5066282746310005 mul ln add exch pop} bind def +/BETA {2 copy add GAMMALN neg exch GAMMALN 3 -1 roll GAMMALN EXP} bind def +% +/HORNER {aload length + dup 2 add -1 roll + exch 1 sub { + dup 4 1 roll + mul add exch + } repeat + pop +} bind def +% +/BESSEL_J0 {dup abs 8 lt { + dup mul dup [57568490574 -13362590354 651619640.7 -11214424.18 77392.33017 -184.9052456] HORNER + exch [57568490411 1029532985 9494680.718 59272.64853 267.8532712 1] HORNER + Div} + {abs dup .636619772 exch div sqrt exch dup .785398164 sub exch 8 exch div dup dup mul dup + [1 -1.098628627E-2 .2734510407E-4 -.2073370639E-5 .2093887211E-6] HORNER + 3 index COS mul + exch [-.1562499995E-1 .1430488765E-3 -.6911147651E-5 .7621095161E-6 -.934945152E-7] HORNER + 4 -1 roll SIN mul 3 -1 roll mul neg add mul} + ifelse} bind def +% +/BESSEL_Y0 {dup 8 lt { + dup dup mul dup [-2957821389 7062834065 -512359803.6 10879881.29 -86327.92757 228.4622733] HORNER + exch [40076544269 745249964.8 7189466.438 47447.26470 226.1030244 1] HORNER + Div exch dup ln exch BESSEL_J0 .636619772 mul mul add} + {dup .636619772 exch div sqrt exch dup .785398164 sub exch 8 exch div dup dup mul dup + [1 -.1098628627E-2 .2734510407E-4 -.2073370639E-5 .2093887211E-6] HORNER + 3 index SIN mul + exch [-.1562499995E-1 .1430488765E-3 -.6911147651E-5 .7621095161E-6 -.934945152E-7] HORNER + 4 -1 roll COS mul 3 -1 roll mul add mul} + ifelse} bind def +% +/BESSEL_J1 {dup abs 8 lt { + dup dup mul dup 3 -2 roll [72362614232 -7895059235 242396853.1 -2972611.439 15704.48260 -30.16036606] HORNER mul + exch [144725228442 2300535178 18583304.74 99447.43394 376.9991397 1] HORNER + Div} + {dup abs dup .636619772 exch div sqrt exch dup 2.356194491 sub exch 8 exch div dup dup mul dup + [1 .183105E-2 -.3516396496E-4 .2457520174E-5 -.240337019E-6] HORNER + 3 index COS mul + exch [.04687499995 6.2002690873E-3 .8449199096E-5 -.88228987E-6 .105787412E-6] HORNER + 4 -1 roll SIN mul 3 -1 roll mul neg add mul exch dup abs Div mul} + ifelse} bind def +% +/BESSEL_Y1 {dup 8 lt { + dup dup dup mul dup [-.4900604943E13 .1275274390E13 -.5153428139E11 .7349264551E9 -.4237922726E7 .8511937935E4] HORNER + exch [.2499580570E14 .4244419664E12 .3733650367E10 .2245904002E8 .1020426050E6 .3549632885E3 1] HORNER + Div mul exch dup dup ln exch BESSEL_J1 mul exch 1 exch div sub .636619772 mul add} + {dup .636619772 exch div sqrt exch dup 2.356194491 sub exch 8 exch div dup dup mul dup + [1 .183105E-2 -.3516396496E-4 .2457520174E-5 -.240337019E-6] HORNER + 3 index SIN mul + exch [.04687499995 -.2002690873E-3 .8449199096E-5 6.88228987E-6 .105787412E-6] HORNER + 4 -1 roll COS mul 3 -1 roll mul add mul} + ifelse} bind def +% +% En cours... +/BESSEL_Yn {dup 0 eq {pop BESSEL_Y0}{dup 1 eq {pop BESSEL_Y1}{ + exch dup BESSEL_Y0 exch dup BESSEL_Y1 exch 2 exch Div { + mul 3 -1 roll mul 2 index sub pstack} for + } ifelse } ifelse } bind def +% +/SIMPSON { 1 dict begin %% on stack a b var f ierr Dominik Rodriguez + 3 index 5 index sub % compute h + 1 % a b var f ierr h n + 4 index 7 index def 3 index exec % a b var f ierr h n f(a) + 5 index 7 index def 4 index exec add % a b var f ierr h n f(a)+f(b) + 5 index 8 index 4 index 2 div add def 4 index exec % a b var f ierr h n f(a)+f(b) f(a+h/2) + exch 1 index 4 mul add 0 % a b var f ierr h n old=f(a+h/2) Estim=f(a)+f(b)+4f(a+h/2) NbLoop + { % a b var f ierr h n old Estim NbLoop + 5 -1 roll 2 div dup 6 1 roll % h<-h/2 + 5 -1 roll 2 mul 5 1 roll % n<-2n + % a b var f ierr h n old Estim NbLoop h + 2 div 10 index add 0 % a b var f ierr h n old Estim NbLoop a+h/2 Cumul + 5 index { + 1 index 10 index exch def 8 index exec add exch 6 index add exch + } repeat % a b var f ierr h n old Estim NbLoop a+nh/2 Cumul + exch pop % a b var f ierr h n old Estim NbLoop New + 2 index 1 index 4 mul 6 -1 roll 2 mul sub sub % a b var f ierr h n Estim NbLoop New Diff + 4 -1 roll 2 mul 1 index sub 4 1 roll % a b var f ierr h n Estim NbLoop New Diff + exch 4 1 roll % a b var f ierr h n old Estim NbLoop Diff + 5 index 6 div mul abs 6 index lt { exit } if + 1 add dup 9 eq { exit } if + } loop % a b var f ierr h n old Estim NbLoop + exch 5 -1 roll 6 div mul mark 10 2 roll cleartomark +end +} def +% ------------------------------------ math stuff ---------------------------------- +% +% Matrix A in arrays of rows A[[row1][row2]...] +% with [row1]=[a11 a12 ... b1] +% returns on stack solution vector X=[x1 x2 ... xn] +/SolveLinEqSystem { % on stack matrix M=[A,b] (A*x=b) + 10 dict begin % hold all ocal + /A exch def + /Rows A length def % Rows = number of rows + /Cols A 0 get length def % Cols = number of columns + /Index [ 0 1 Rows 1 sub { } for ] def % Index = [0 1 2 ... Rows-1] + /col 0 def + /row 0 def + /PR Rows array def % PR[c] = pivot row for row row + { % starts the loop, find pivot entry in row r + col Cols ge row Rows ge or { exit } if % col < Cols and row < Rows else exit + /pRow row def % pRow = pivot row + /max A row get col get abs def % get A[row[col]], first A[0,0] + row 1 add 1 Rows 1 sub { % starts for loop 1 1 Rows-1 + /j exch def % index counter + /x A j get col get abs def % get A[j[r]] + x max gt { % x>max, then save position + /pRow j def + /max x def + } if + } for % now we have the row with biggest A[0,1] + % with pRow = the pivot row + max 0 gt { % swap entries pRow and row in i + /tmp Index row get def + Index row Index pRow get put + Index pRow tmp put % and columns pRow and row in A + /tmp A row get def + A row A pRow get put + A pRow tmp put % pivot + /row0 A row get def % the pivoting row + /p0 row0 col get def % the pivot value + row 1 add 1 Rows 1 sub { % start for loop + /j exch def + /c1 A j get def + /p c1 col get p0 div def + c1 col p put % subtract (p1/p0)*row[i] from row[j] + col 1 add 1 Cols 1 sub { % start for loop + /i exch def + c1 dup i exch % c1 i c1 + i get row0 i get p mul sub put + } for + } for + PR row col put + /col col 1 add def + /row row 1 add def + }{ % all zero entries + /row row 1 add def % continue loop with same row + } ifelse + } loop + /X A def % solution vector + A Rows 1 sub get dup + Cols 1 sub get exch + Cols 2 sub get div + X Rows 1 sub 3 -1 roll put % X[n] + Rows 2 sub -1 0 { % for loop to calculate X[i] + /xi exch def % current index + A xi get % i-th row + /Axi exch def + /sum 0 def + Cols 2 sub -1 xi 1 add { + /n exch def + /sum sum Axi n get X n get mul add def + } for + Axi Cols 1 sub get % b=Axi[Cols-1] + sum sub % b-sum + Axi xi get div % b-sum / Axi[xi] + X xi 3 -1 roll put % X[xi] + } for + X + end +} def +% +/c@_0 2.515517 def +/c@_1 0.802853 def +/c@_2 0.010328 def +/d@_1 1.432788 def +/d@_2 0.189269 def +/d@_3 0.001308 def +/norminv { + 5 dict begin + neg 1 add 1 exch div ln 2 mul sqrt + /t exch def + /t2 t dup mul def + /t3 t2 t mul def + c@_0 c@_1 t mul add c@_2 t2 mul add 1 d@_1 t mul add + d@_2 t2 mul add d@_3 t3 mul add div neg t add + end +} def +%end{norminv Michael Sharpe} +% +% +% END pst-math.pro + +%%EndProcSet +%%BeginProcSet: pstricks-add.pro 0 0 +%% $Id: pstricks-add.pro 328 2010-05-24 15:56:43Z herbert $ +% PostScript prologue for pstricks-add.tex. +% Version 0.23, 2009/12/17 +% +/tx@addDict 410 dict def tx@addDict begin +%% +realtime srand % set random generator +% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +/GTriangle { + gsave + /mtrx CM def + /colorA ED /colorB ED /colorC ED % save the colors + /yA ED /xA ED % save the origin + xA yA translate + rotate % \psk@gangle + /yB ED /xB ED /yC ED /xC ED % save other coordinates + /ds [ % save data in a array + 0 0 0 colorA aload pop % fd x y xr xg xb + 0 xB xA sub yB yA sub colorB aload pop + 0 xC xA sub yC yA sub colorC aload pop +% 1 xC xB add yB colorA aload pop % for use with 4 points ABCD + ] def + newpath + << + /ShadingType 4 % single Gouraud + /ColorSpace [ /DeviceRGB ] + /DataSource ds + >> + shfill + closepath + mtrx + setmatrix grestore} def +% +/RGBtoCMYK { % on stack r g b -> C M Y K + 3 dict begin + /Blue ED /Green ED /Red ED + 1 Red sub % Cyan + 1 Green sub % Magenta + 1 Blue sub % Yellow + 0 % Black + end +} def +% +/CMYKtoGRAY { % on stack c m y k -> gray + exch 0.11 mul add + exch 0.59 mul add + exch 0.3 mul add + dup 1 gt { pop 1 } if + neg 1 add +} def +% +/RGBtoGRAY { % on stack r g b -> gray + 0.11 mul + exch 0.59 mul add + exch 0.3 mul add +} def +% +/HSBtoGRAY { + 6 dict begin + /b exch def + /s exch def 6 mul dup cvi dup + /i exch def sub + /f exch def + /F [[0 1 f sub 1][f 0 1][1 0 1 f sub][1 f 0][1 f sub 1 0][0 1 f][0 1 1]] def + F i get { s mul neg 1 add b mul} forall + 0.11 mul + exch 0.59 mul add + exch 0.3 mul add + end +} def +% +%% convertisseur longueur d'onde ->R,G,B Manuel Luque +%% lambda max=780 nanometres +%% lambda min=380 nanometres +%% adaptation de : +%% http://www.physics.sfasu.edu/astro/color.html +%% www.efg2.com/lab +% +/Gamma 0.8 def +/calculateRGB { + lambda 379 le {/Red 0 def /Green 0 def /Blue 0 def} if + lambda 781 ge {/Red 0 def /Green 0 def /Blue 0 def} if + lambda 380 ge {lambda 439 le { + /R {lambda 440 sub neg 440 380 sub div} def + /Red R factor mul Gamma exp def + /G 0 def + /Green G factor mul Gamma exp def + /B 1 def + /Blue B factor mul Gamma exp def} if + } if + lambda 440 ge { lambda 489 le { + /G {lambda 440 sub 490 440 sub div} def + /Green G factor mul Gamma exp def + /R 0 def /Red 0 def + /B 1 def + /Blue B factor mul Gamma exp def } if + } if + lambda 490 ge {lambda 509 le { + /B {lambda 510 sub neg 510 490 sub div} def + /Blue B factor mul Gamma exp def + /R 0 def /Red 0 def + /G 1 def + /Green G factor mul Gamma exp def } if + } if + lambda 510 ge {lambda 579 le { + /R {lambda 510 sub 580 510 sub div } def + /Red R factor mul Gamma exp def + /Blue 0 def + /G 1 def + /Green G factor mul Gamma exp def } if + } if + lambda 580 ge {lambda 644 le { + /G {lambda 645 sub neg 645 580 sub div } def + /Green G factor mul Gamma exp def + /Blue 0 def + /R 1 def + /Red R factor mul Gamma exp def } if + } if + lambda 645 ge { lambda 780 le { + /Red 1 factor mul Gamma exp def + /Blue 0 def + /Green 0 def } if + } if +} def +% +/factor { + lambda 380 ge {lambda 419 le { 0.3 0.7 lambda 380 sub mul 420 380 sub div add} if } if + lambda 420 ge {lambda 700 le { 1 } if } if + lambda 701 ge {lambda 780 le { 0.3 0.7 780 lambda sub mul 780 700 sub div add} if } if +} def +% +/wavelengthToRGB { % the wavelength in nm must be on top of the stack + cvi /lambda exch def % no floating point here + calculateRGB +} def % now the colors are saved in Red Green Blue +% +/wavelengthToGRAY { % the wavelength in nm must be on top of the stack + cvi /lambda exch def % no floating point here + calculateRGB + Red Green Blue RGBtoGRAY +} def % now the gray color is on the stack +% +/wavelengthToCMYK { % the wavelength in nm must be on top of the stack + cvi /lambda exch def % no floating point here + gsave + calculateRGB Red Green Blue RGBtoCMYK + /Black ED /Yellow ED /Magenta ED /Cyan ED + grestore +} def % now the colors are saved in Cyan Magenta Yellow Black +% +/axfill { + 8 dict begin + /xw exch def /nl exch def + /C1 exch def /y1 exch def/x1 exch def + /C0 exch def /y0 exch def/x0 exch def + << /ShadingType 2 + /ColorSpace /DeviceRGB + /Coords [ x0 y0 x1 y1 ] + /EmulatorHints [ xw 2 div dup ] + /Function << + /FunctionType 2 + /Domain [0 1] + /C0 C0 + /C1 C1 + /N 1 + >> + >> shfill + end +} bind def +% +%/amplHand {.8} def +%/dtHand 2 def +/varHand { rand sin amplHand mul add } def +/MovetoByHand { moveto } def +%/MovetoByHand { /y0 ED /x0 ED x0 y0 moveto } def +/LinetoByHand { 4 dict begin + /y1 ED /x1 ED + currentpoint /y0 ED /x0 ED + x0 x1 sub dup mul y0 y1 sub dup mul add sqrt /dEnd ED + 0 dtHand dEnd { dup + x1 x0 sub mul dEnd div x0 add varHand exch + y1 y0 sub mul dEnd div y0 add varHand lineto + } for +% /x0 x1 def /y0 y1 def + end +} def +% +end +% +% END pstricks-add.pro + +%%EndProcSet +%%BeginProcSet: cm-super-t2a.enc 0 0 +% This file is generated from `T2Auni.map' and `glyphlist.txt', `gl-other.txt' +% +% LIGKERN hyphen hyphen =: endash ; endash hyphen =: emdash ; +% LIGKERN quoteleft quoteleft =: quotedblleft ; +% LIGKERN quoteright quoteright =: quotedblright ; +% LIGKERN comma comma =: quotedblbase ; less less =: guillemotleft ; +% LIGKERN greater greater =: guillemotright ; +% LIGKERN f f =: ff ; f i =: fi ; f l =: fl ; ff i =: ffi ; ff l =: ffl ; +% +% LIGKERN space {} * ; * {} space ; zero {} * ; * {} zero ; +% LIGKERN one {} * ; * {} one ; two {} * ; * {} two ; +% LIGKERN three {} * ; * {} three ; four {} * ; * {} four ; +% LIGKERN five {} * ; * {} five ; six {} * ; * {} six ; +% LIGKERN seven {} * ; * {} seven ; eight {} * ; * {} eight ; +% LIGKERN nine {} * ; * {} nine ; +% +/T2AEncoding [ +% 0x00 +/grave +/acute +/circumflex +/tilde +/dieresis +/hungarumlaut +/ring +/caron +/breve +/macron +/dotaccent +/cedilla +/ogonek +/uni04C0 +/angleleft +/angleright +% 0x10 +/quotedblleft +/quotedblright +/cyrflex +/dblgrave +/cyrbreve +/endash +/emdash.cyr % CYRILLIC EM DASH +/afii61664 +/perthousandzero % PERTHOUSAND ZERO +/dotlessi +/dotlessj +/ff +/fi +/fl +/ffi +/ffl +% 0x20 +/uni2423 +/exclam +/quotedbl +/numbersign +/dollar +/percent +/ampersand +/quoteright +/parenleft +/parenright +/asterisk +/plus +/comma +/hyphen +/period +/slash +% 0x30 +/zero +/one +/two +/three +/four +/five +/six +/seven +/eight +/nine +/colon +/semicolon +/less +/equal +/greater +/question +% 0x40 +/at +/A +/B +/C +/D +/E +/F +/G +/H +/I +/J +/K +/L +/M +/N +/O +% 0x50 +/P +/Q +/R +/S +/T +/U +/V +/W +/X +/Y +/Z +/bracketleft +/backslash +/bracketright +/asciicircum +/underscore +% 0x60 +/quoteleft +/a +/b +/c +/d +/e +/f +/g +/h +/i +/j +/k +/l +/m +/n +/o +% 0x70 +/p +/q +/r +/s +/t +/u +/v +/w +/x +/y +/z +/braceleft +/bar +/braceright +/asciitilde +/hyphen.alt % HANGING HYPHEN +% 0x80 +/afii10050 +/uni0492 +/afii10051 +/afii10060 +/uni04BA +/uni0496 +/uni0498 +/afii10058 +/afii10056 +/uni049A +/uni04A0 +/uni049C +/uni04D4 +/uni04A2 +/uni04A4 +/afii10054 +% 0x90 +/uni04E8 +/uni04AA +/afii10062 +/uni04AE +/uni04B0 +/uni04B2 +/afii10145 +/uni04B8 +/uni04B6 +/afii10053 +/uni04D8 +/afii10059 +/afii10023 +/afii61352 +/currency +/section +% 0xA0 +/afii10098 +/uni0493 +/afii10099 +/afii10108 +/uni04BB +/uni0497 +/uni0499 +/afii10106 +/afii10104 +/uni049B +/uni04A1 +/uni049D +/uni04D5 +/uni04A3 +/uni04A5 +/afii10102 +% 0xB0 +/uni04E9 +/uni04AB +/afii10110 +/uni04AF +/uni04B1 +/uni04B3 +/afii10193 +/uni04B9 +/uni04B7 +/afii10101 +/afii10846 +/afii10107 +/afii10071 +/quotedblbase +/guillemotleft.cyr +/guillemotright.cyr +% 0xC0 +/afii10017 +/afii10018 +/afii10019 +/afii10020 +/afii10021 +/afii10022 +/afii10024 +/afii10025 +/afii10026 +/afii10027 +/afii10028 +/afii10029 +/afii10030 +/afii10031 +/afii10032 +/afii10033 +% 0xD0 +/afii10034 +/afii10035 +/afii10036 +/afii10037 +/afii10038 +/afii10039 +/afii10040 +/afii10041 +/afii10042 +/afii10043 +/afii10044 +/afii10045 +/afii10046 +/afii10047 +/afii10048 +/afii10049 +% 0xE0 +/afii10065 +/afii10066 +/afii10067 +/afii10068 +/afii10069 +/afii10070 +/afii10072 +/afii10073 +/afii10074 +/afii10075 +/afii10076 +/afii10077 +/afii10078 +/afii10079 +/afii10080 +/afii10081 +% 0xF0 +/afii10082 +/afii10083 +/afii10084 +/afii10085 +/afii10086 +/afii10087 +/afii10088 +/afii10089 +/afii10090 +/afii10091 +/afii10092 +/afii10093 +/afii10094 +/afii10095 +/afii10096 +/afii10097 +] def + +%%EndProcSet +%%BeginProcSet: texps.pro 0 0 +%! +TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2 +index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll +exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0 +ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{ +pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get +div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type +/nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end +definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup +sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll +mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[ +exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if} +forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def +end + +%%EndProcSet +%%BeginProcSet: special.pro 0 0 +%! +TeXDict begin/SDict 200 dict N SDict begin/@SpecialDefaults{/hs 612 N +/vs 792 N/ho 0 N/vo 0 N/hsc 1 N/vsc 1 N/ang 0 N/CLIP 0 N/rwiSeen false N +/rhiSeen false N/letter{}N/note{}N/a4{}N/legal{}N}B/@scaleunit 100 N +/@hscale{@scaleunit div/hsc X}B/@vscale{@scaleunit div/vsc X}B/@hsize{ +/hs X/CLIP 1 N}B/@vsize{/vs X/CLIP 1 N}B/@clip{/CLIP 2 N}B/@hoffset{/ho +X}B/@voffset{/vo X}B/@angle{/ang X}B/@rwi{10 div/rwi X/rwiSeen true N}B +/@rhi{10 div/rhi X/rhiSeen true N}B/@llx{/llx X}B/@lly{/lly X}B/@urx{ +/urx X}B/@ury{/ury X}B/magscale true def end/@MacSetUp{userdict/md known +{userdict/md get type/dicttype eq{userdict begin md length 10 add md +maxlength ge{/md md dup length 20 add dict copy def}if end md begin +/letter{}N/note{}N/legal{}N/od{txpose 1 0 mtx defaultmatrix dtransform S +atan/pa X newpath clippath mark{transform{itransform moveto}}{transform{ +itransform lineto}}{6 -2 roll transform 6 -2 roll transform 6 -2 roll +transform{itransform 6 2 roll itransform 6 2 roll itransform 6 2 roll +curveto}}{{closepath}}pathforall newpath counttomark array astore/gc xdf +pop ct 39 0 put 10 fz 0 fs 2 F/|______Courier fnt invertflag{PaintBlack} +if}N/txpose{pxs pys scale ppr aload pop por{noflips{pop S neg S TR pop 1 +-1 scale}if xflip yflip and{pop S neg S TR 180 rotate 1 -1 scale ppr 3 +get ppr 1 get neg sub neg ppr 2 get ppr 0 get neg sub neg TR}if xflip +yflip not and{pop S neg S TR pop 180 rotate ppr 3 get ppr 1 get neg sub +neg 0 TR}if yflip xflip not and{ppr 1 get neg ppr 0 get neg TR}if}{ +noflips{TR pop pop 270 rotate 1 -1 scale}if xflip yflip and{TR pop pop +90 rotate 1 -1 scale ppr 3 get ppr 1 get neg sub neg ppr 2 get ppr 0 get +neg sub neg TR}if xflip yflip not and{TR pop pop 90 rotate ppr 3 get ppr +1 get neg sub neg 0 TR}if yflip xflip not and{TR pop pop 270 rotate ppr +2 get ppr 0 get neg sub neg 0 S TR}if}ifelse scaleby96{ppr aload pop 4 +-1 roll add 2 div 3 1 roll add 2 div 2 copy TR .96 dup scale neg S neg S +TR}if}N/cp{pop pop showpage pm restore}N end}if}if}N/normalscale{ +Resolution 72 div VResolution 72 div neg scale magscale{DVImag dup scale +}if 0 setgray}N/psfts{S 65781.76 div N}N/startTexFig{/psf$SavedState +save N userdict maxlength dict begin/magscale true def normalscale +currentpoint TR/psf$ury psfts/psf$urx psfts/psf$lly psfts/psf$llx psfts +/psf$y psfts/psf$x psfts currentpoint/psf$cy X/psf$cx X/psf$sx psf$x +psf$urx psf$llx sub div N/psf$sy psf$y psf$ury psf$lly sub div N psf$sx +psf$sy scale psf$cx psf$sx div psf$llx sub psf$cy psf$sy div psf$ury sub +TR/showpage{}N/erasepage{}N/setpagedevice{pop}N/copypage{}N/p 3 def +@MacSetUp}N/doclip{psf$llx psf$lly psf$urx psf$ury currentpoint 6 2 roll +newpath 4 copy 4 2 roll moveto 6 -1 roll S lineto S lineto S lineto +closepath clip newpath moveto}N/endTexFig{end psf$SavedState restore}N +/@beginspecial{SDict begin/SpecialSave save N gsave normalscale +currentpoint TR @SpecialDefaults count/ocount X/dcount countdictstack N} +N/@setspecial{CLIP 1 eq{newpath 0 0 moveto hs 0 rlineto 0 vs rlineto hs +neg 0 rlineto closepath clip}if ho vo TR hsc vsc scale ang rotate +rwiSeen{rwi urx llx sub div rhiSeen{rhi ury lly sub div}{dup}ifelse +scale llx neg lly neg TR}{rhiSeen{rhi ury lly sub div dup scale llx neg +lly neg TR}if}ifelse CLIP 2 eq{newpath llx lly moveto urx lly lineto urx +ury lineto llx ury lineto closepath clip}if/showpage{}N/erasepage{}N +/setpagedevice{pop}N/copypage{}N newpath}N/@endspecial{count ocount sub{ +pop}repeat countdictstack dcount sub{end}repeat grestore SpecialSave +restore end}N/@defspecial{SDict begin}N/@fedspecial{end}B/li{lineto}B +/rl{rlineto}B/rc{rcurveto}B/np{/SaveX currentpoint/SaveY X N 1 +setlinecap newpath}N/st{stroke SaveX SaveY moveto}N/fil{fill SaveX SaveY +moveto}N/ellipse{/endangle X/startangle X/yrad X/xrad X/savematrix +matrix currentmatrix N TR xrad yrad scale 0 0 1 startangle endangle arc +savematrix setmatrix}N end + +%%EndProcSet +%%BeginProcSet: color.pro 0 0 +%! +TeXDict begin/setcmykcolor where{pop}{/setcmykcolor{dup 10 eq{pop +setrgbcolor}{1 sub 4 1 roll 3{3 index add neg dup 0 lt{pop 0}if 3 1 roll +}repeat setrgbcolor pop}ifelse}B}ifelse/TeXcolorcmyk{setcmykcolor}def +/TeXcolorrgb{setrgbcolor}def/TeXcolorgrey{setgray}def/TeXcolorgray{ +setgray}def/TeXcolorhsb{sethsbcolor}def/currentcmykcolor where{pop}{ +/currentcmykcolor{currentrgbcolor 10}B}ifelse/DC{exch dup userdict exch +known{pop pop}{X}ifelse}B/GreenYellow{0.15 0 0.69 0 setcmykcolor}DC +/Yellow{0 0 1 0 setcmykcolor}DC/Goldenrod{0 0.10 0.84 0 setcmykcolor}DC +/Dandelion{0 0.29 0.84 0 setcmykcolor}DC/Apricot{0 0.32 0.52 0 +setcmykcolor}DC/Peach{0 0.50 0.70 0 setcmykcolor}DC/Melon{0 0.46 0.50 0 +setcmykcolor}DC/YellowOrange{0 0.42 1 0 setcmykcolor}DC/Orange{0 0.61 +0.87 0 setcmykcolor}DC/BurntOrange{0 0.51 1 0 setcmykcolor}DC +/Bittersweet{0 0.75 1 0.24 setcmykcolor}DC/RedOrange{0 0.77 0.87 0 +setcmykcolor}DC/Mahogany{0 0.85 0.87 0.35 setcmykcolor}DC/Maroon{0 0.87 +0.68 0.32 setcmykcolor}DC/BrickRed{0 0.89 0.94 0.28 setcmykcolor}DC/Red{ +0 1 1 0 setcmykcolor}DC/OrangeRed{0 1 0.50 0 setcmykcolor}DC/RubineRed{ +0 1 0.13 0 setcmykcolor}DC/WildStrawberry{0 0.96 0.39 0 setcmykcolor}DC +/Salmon{0 0.53 0.38 0 setcmykcolor}DC/CarnationPink{0 0.63 0 0 +setcmykcolor}DC/Magenta{0 1 0 0 setcmykcolor}DC/VioletRed{0 0.81 0 0 +setcmykcolor}DC/Rhodamine{0 0.82 0 0 setcmykcolor}DC/Mulberry{0.34 0.90 +0 0.02 setcmykcolor}DC/RedViolet{0.07 0.90 0 0.34 setcmykcolor}DC +/Fuchsia{0.47 0.91 0 0.08 setcmykcolor}DC/Lavender{0 0.48 0 0 +setcmykcolor}DC/Thistle{0.12 0.59 0 0 setcmykcolor}DC/Orchid{0.32 0.64 0 +0 setcmykcolor}DC/DarkOrchid{0.40 0.80 0.20 0 setcmykcolor}DC/Purple{ +0.45 0.86 0 0 setcmykcolor}DC/Plum{0.50 1 0 0 setcmykcolor}DC/Violet{ +0.79 0.88 0 0 setcmykcolor}DC/RoyalPurple{0.75 0.90 0 0 setcmykcolor}DC +/BlueViolet{0.86 0.91 0 0.04 setcmykcolor}DC/Periwinkle{0.57 0.55 0 0 +setcmykcolor}DC/CadetBlue{0.62 0.57 0.23 0 setcmykcolor}DC +/CornflowerBlue{0.65 0.13 0 0 setcmykcolor}DC/MidnightBlue{0.98 0.13 0 +0.43 setcmykcolor}DC/NavyBlue{0.94 0.54 0 0 setcmykcolor}DC/RoyalBlue{1 +0.50 0 0 setcmykcolor}DC/Blue{1 1 0 0 setcmykcolor}DC/Cerulean{0.94 0.11 +0 0 setcmykcolor}DC/Cyan{1 0 0 0 setcmykcolor}DC/ProcessBlue{0.96 0 0 0 +setcmykcolor}DC/SkyBlue{0.62 0 0.12 0 setcmykcolor}DC/Turquoise{0.85 0 +0.20 0 setcmykcolor}DC/TealBlue{0.86 0 0.34 0.02 setcmykcolor}DC +/Aquamarine{0.82 0 0.30 0 setcmykcolor}DC/BlueGreen{0.85 0 0.33 0 +setcmykcolor}DC/Emerald{1 0 0.50 0 setcmykcolor}DC/JungleGreen{0.99 0 +0.52 0 setcmykcolor}DC/SeaGreen{0.69 0 0.50 0 setcmykcolor}DC/Green{1 0 +1 0 setcmykcolor}DC/ForestGreen{0.91 0 0.88 0.12 setcmykcolor}DC +/PineGreen{0.92 0 0.59 0.25 setcmykcolor}DC/LimeGreen{0.50 0 1 0 +setcmykcolor}DC/YellowGreen{0.44 0 0.74 0 setcmykcolor}DC/SpringGreen{ +0.26 0 0.76 0 setcmykcolor}DC/OliveGreen{0.64 0 0.95 0.40 setcmykcolor} +DC/RawSienna{0 0.72 1 0.45 setcmykcolor}DC/Sepia{0 0.83 1 0.70 +setcmykcolor}DC/Brown{0 0.81 1 0.60 setcmykcolor}DC/Tan{0.14 0.42 0.56 0 +setcmykcolor}DC/Gray{0 0 0 0.50 setcmykcolor}DC/Black{0 0 0 1 +setcmykcolor}DC/White{0 0 0 0 setcmykcolor}DC end + +%%EndProcSet +TeXDict begin @defspecial + + systemdict /pdfmark known{userdict /?pdfmark systemdict /exec get +put}{userdict /?pdfmark systemdict /pop get put userdict /pdfmark systemdict +/cleartomark get put}ifelse + + /DvipsToPDF{72.27 mul Resolution div} def/PDFToDvips{72.27 div Resolution +mul} def/BPToDvips{72 div Resolution mul}def/BorderArrayPatch{[exch{dup +dup type/integertype eq exch type/realtype eq or{BPToDvips}if}forall]}def/HyperBorder +{1 PDFToDvips} def/H.V {pdf@hoff pdf@voff null} def/H.B {/Rect[pdf@llx +pdf@lly pdf@urx pdf@ury]} def/H.S {currentpoint HyperBorder add /pdf@lly +exch def dup DvipsToPDF 72 add /pdf@hoff exch def HyperBorder sub /pdf@llx +exch def} def/H.L {2 sub dup/HyperBasePt exch def PDFToDvips /HyperBaseDvips +exch def currentpoint HyperBaseDvips sub /pdf@ury exch def/pdf@urx +exch def} def/H.A {H.L currentpoint exch pop vsize 72 sub exch DvipsToPDF +HyperBasePt sub sub /pdf@voff exch def} def/H.R {currentpoint HyperBorder +sub /pdf@ury exch def HyperBorder add /pdf@urx exch def currentpoint +exch pop vsize 72 sub exch DvipsToPDF sub /pdf@voff exch def} def + +@fedspecial end +%%BeginFont: CMTI7 +%!PS-AdobeFont-1.0: CMTI7 003.002 +%%Title: CMTI7 +%Version: 003.002 +%%CreationDate: Mon Jul 13 16:17:00 2009 +%%Creator: David M. Jones +%Copyright: Copyright (c) 1997, 2009 American Mathematical Society +%Copyright: (<http://www.ams.org>), with Reserved Font Name CMTI7. +% This Font Software is licensed under the SIL Open Font License, Version 1.1. +% This license is in the accompanying file OFL.txt, and is also +% available with a FAQ at: http://scripts.sil.org/OFL. +%%EndComments +FontDirectory/CMTI7 known{/CMTI7 findfont dup/UniqueID known{dup +/UniqueID get 5000825 eq exch/FontType get 1 eq and}{pop false}ifelse +{save true}{false}ifelse}{false}ifelse +11 dict begin +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def +/FontName /CMTI7 def +/FontBBox {-27 -250 1268 750 }readonly def +/UniqueID 5000825 def +/PaintType 0 def +/FontInfo 9 dict dup begin +/version (003.002) readonly def +/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMTI7.) readonly def +/FullName (CMTI7) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +end readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 65 /A put +readonly def +currentdict end +currentfile eexec +D9D66F633B846AB284BCF8B0411B772DE5CE32340DC6F28AF40857E4451976E7 +5182433CF9F333A38BD841C0D4E68BF9E012EB32A8FFB76B5816306B5EDF7C99 +8B3A16D9B4BC056662E32C7CD0123DFAEB734C7532E64BBFBF5A60336E646716 +EFB852C877F440D329172C71F1E5D59CE9473C26B8AEF7AD68EF0727B6EC2E0C +02CE8D8B07183838330C0284BD419CBDAE42B141D3D4BE492473F240CEED931D +46E9F999C5CB3235E2C6DAAA2C0169E1991BEAEA0D704BF49CEA3E98E8C2361A +4B60D020D325E4C2450F3BCF59223103D20DB6943DE1B57C525641D2B175DB6E +FE5425043CA62CE886B802B23F41D33FF06CB9EAB7DCFEE2AB63C1333D9B042F +B0A32D7634E2BC65BD7B7C53695C585079EBE138B40ED4BC7D06B30C88B5E0C8 +E93FF20138D513B24866986C4A633304FC4945EA8A6C6BFFBA1FDCC8F7474BA3 +D997548C23060E15A15687E9B58A8D2E2D749776BA364A2E28FB03DA767645CF +34BC9E787E5D3A5B05F67D169D710592108F4647A0004F71159950253FCF9A25 +028DBDB4FCDB2AB5F17E49A5DEE3C366C693E0784A4D036F92FC97F1C0A0C08D +E3FD9FB57AA80ADCBF047193DC787C35FB3237AB63613A9244727FB93754EDFC +323A8B936100717C26AFD2A4EC3F66C438FECC2D6EC4C2728ED313AFE51896DE +9BB5E98049A4940FE2EC90074C0EF991AD2073AE06B7AA62C2D6A1E74E72D3D3 +739BF7461E7AD856263A57673F6C7E33C07E330A9486B20BC9FE4D2908DBAE9C +1078C36AD01B070C267BE3A1C8D1212DEC9CB71683F464783AA3503DD646FFF8 +C0D859A4356E4995246790E5A2FFE5D46CDCE889E32516264498AE92D769897C +A8E5FCA9C15392A3AC0BEE3573EE14EABE243E07F10E33BCFB4CDFC7AEFEAB6C +F62C21EE29CFAA994A575D56C692C6E040FABBFBC5C0C79A23174E728658C967 +A64D87103716B3D29D724DAFFFD2DB429F9C60EA4CE589C3B5FDFC57297CE277 +80E9A72FFED79394E57C4CE22C5CD55433B3BB329F78F35B25BB3F635DD11897 +75C1BE2A808F26E0840D95A04FE7FE0A85B2513745D1FCA46A54BC1EABF596B4 +F0344BE1A8297EC0E7932E1C82051868BF9A463ABFE0C63ED8F0760A44DEB196 +4643D15E499017B5BCC3D28C576A2E0523BC3C282FC3D078B4F944B22506D29D +8EADCD89A7E73BBA812C34E4D2728C387AFFD3BC4776236A1DD646ACF4ABD7FF +6A09AFC5EEDFC35F3E9A3C0BE49425D85B0E1A935DD5C076062888DA3B4DBD7C +72BD35B29BBF1042EC8A64E64AC472D3E446FFC36FE86ED8B95B65E6756EBF02 +FFB1FA08D7CDD1A5104AFDDBAB721951E5BB5D091BE3F827DE1D2667ABFF201F +AFEFEC030C90440D358259A25A2BC111BB56B3E53E5BE0AC8E366CF112C289A5 +48442A1E48C0115DF1119349ACB1FE6983D805071DC20D576D9267AACA497EFE +CEF2593A4AC5AF2167627B00C5EA97D125EB8A47E58CD9B213D74F2D37F8E474 +D9E3EFE626E138F6B09EC1B90E207C2DE0539CF5AAB4A5CDC331B295D8202562 +8482DA317D4BA1404A291D299E0A0F6024696EA9225E4C7B15839F733EC4BFFD +E85B7CE1F0883A5A0B4544E534015E25DF3BF5305682C20B1625C3C6A5700087 +72969CBE2D79712C8EBB9F9776DA3D6A7A35C79C6508F8962B1E34007F4F9EB3 +E4BBED40B4C76C56974838F6296ACFE974A249F80FFD668AA8159841E46DE0D2 +6A5BA7E19B006D7DECFE918E0B792F4D0C04FA774F6B399E165F7687B4962646 +2595E5B24DAAA8BB1BF33B972776A258F3D039FFA6CAC49B3274F193070D95EF +B96B07A2C5A413FE43C59F6D8F843795472ABE1F73107C0F5A5B9274CFF2346E +7627355D5E7B3B3451C89DF5572F4E9BDCAF526425B34D71875B515E62DA8609 +B45B1BEA5002053BC1F0896E9FBFC00A83FC660BBC5258426108155DA6C00024 +AAF2DA69949B5DB8D9EA06A599F2B277E45DB331C6BC2F40660A33BB33FA468C +9F8C6B65CB2E273BE3E076B0C57680E227163C6183C06A4308A0285526E98445 +8763C550EE9422B987AF5EA62E89630C007C63E4BB5FFF01BC59793A20DDD35C +BFB5C79B5416EF06B967B572F3C58ECB0A3798C438778F42DCE24943ED290743 +6CD8F32177192AD8EF12373CA6E493DA0F045C1CFDDCD49F6E4C067324CA0A3B +389CFF8E2C408D8A4083427D4DD8CE33ACB202800A75E581404334E3A910EE37 +9B6DBD1D296C8C164B7B9E1B744A09AAB39963E396F5EAF36D7A02FAC04A666F +6184E9CD0BC31B6C3ECD327960336FB1F9F9EB3B63284E0BEFF29DF468916260 +15E6DC9206DDD65F43D75762520C3D6D221FBCBC530EA8ACD715995411F785DD +212848B1DAF379667F67763E6E4AEDE090130D1632153135992A292A12541702 +3CCECE5CC690C755E8D6F4FEB9D0C1F5C7BE9E5388520CFB9F705F227E131FD2 +ECF6FAEAF05ADC9D7343FCB8CDA6CACF0A89DA6E2F0F58DD74ACD2A670F3AAAC +51C82B11ACF98BBCD1D1DC49E6A8B9815116137E9DE4E3975D3363779165F11A +4EE8B49058750A45DF8D3548CB628EF51A05B36FE8317A864CC5126C073A056F +A1F3DFC27F4A5516782E58C26CDBB2C24693F66FA7BDE6430184675C5BDE38B8 +FB08777618A8057F0B8102B14A9122214037FB150322003A0B4EC789F94863C4 +7DB0F028D37EBE23863834060E0E7A557B97E9C83B3D1765C08A86A5BC59EAF9 +356A0B1A4652044F5757B3CAF077A53D09FAC644D69B3C8FF220E23AC9461FAF +3EDCE217FC3222278BFBFAE76E8A3BE95920C58711CE421E21B3208438871E76 +468EABB998E3B8C5A914F2E6D8F3A8390A3F3802843FF261BD4629F369E1E5ED +9A94C4B2724D31091117DBF20F6857873BFCCFEC228FDF1F42DE699A5B3F6633 +00EFE62983F273CF97E171823BD3A4B2275D0D7B4980357B1CA613F8383C90FC +080A28C3CA09B30FB156C508C88DA67EA995A4805C0F56A0169CE2F4F165BC67 +75D9256A9A182D17804CC75DC09E4195DADA5AB7410132B32AC9FFBD8E91F0EC +5E16F90B4845926B31240ED66CF7E7B30B09A2F0A8B5321E1D41A85C5BC9592B +81E62AB9E1C7689F5F3DD004B32D2F2DFCFF536FA73B708EEB1EC50431F01831 +497CF6907E3E0AE42240C1F95CF761BD7C6D063805D473C94371C07CA1065F38 +B6B75779F8B4B08993CD240F4ECA804E083034BA706FC89997A900A368D1F65C +E4D4035CA5F16EE160DA90FE84F81DFDD7B89928BBA041CE048841E96F90934B +877CC64D608B2AEC9BEE8B80A0E5181EB32F93463F93E7A2EA94AE70A60CFB8E +94FB7B11A47D9F8CD338296F9B8993BCE0B89AECB520FCE80452B8C5668A7BE1 +65484C4F33340EAE118D1DD35772DCA7EE26E9D3097832357431FA2EC7AB1FC9 +50E5C8CF1AC6CE26AC96066F5E1141461BC4E9B5D9E8238D6344C201FE1AB5A9 +EA45B0714D1BE5DC27C06046BA9A3715129D41065DA246AA3CA2B2C81B1AD030 +1218981023F8F5C0C500FCA63C4F745CEC91A8DA9B80BDB28DFC525950F82EC2 +E7867CA9E096DA38FF5CE0DE0DDF7033F4CD1EBE11273B1373B76168930EBBFD +0A80E139FA67DAD2DE2F3F5A8233BBEB24354254171B18D4195F613047E63686 +90FE10D47434A7DD0C619F2514DC5A46A4075E7B8BA6677E38956368F84158A0 +CB37CF43C2E48A3856C0BA0F69BCD63F6782D8475D955566104C34C0453E01F0 +9AA0091C9BEB71FCF385D90027C0E69AD0EB7C91B61B2976E31BF9D9AAE65588 +498881E5F9AD116E6D4DEAE2182FB848DCED82868355E08D395E1AD26EDB5C24 +9B92294E3DF2D11314DA237CDF52A5689AA1FA4E49C4A82381E5C8638B9186CB +633333610FF4112D7D02C3CA9AA6B44F5CAC4582EA66542B552A88598A759F3B +E3DBC0443A40B25DEFC7DC0114E5465FEBC3543E82494CA44FF09613103941F4 +6BA67CE6FFA9BE0FE7A71A1BC60ED190BED3C0B3E7A7702520631D0A730231E5 +F3B53095017F80525DC287F0A8400E1630A3D92F076A13E5E3D947F9F0277FCB +890123AF04932938C6938D7533D2429E580566681049AFD0AC057B59708BADF0 +8FC7E5DF40CBD80F49503331A81A5C56375F5BFB4C4BCA6FC94B7C6FAFAEF6DA +93C704F907BF8558173DAAA78588CD8C7D1B13F838AE94C4E5152C29CBC171C5 +B8B3146FB0CE369F0B0CEAE5EC657E60E74321BAA347D2307CC55DCFE06E47BF +FFDB7A813FC6D30C0FCE5BD3E77393CFC51B38EF275C84C866E69CA9C74C9AB4 +A6A6DC7D12DB626552D87856DDD69AD28AECDC9756A00A0D32257A43D6E9CDAB +C8127E06C4FB513129926FF0395F0CC1C2D808C97635D33BA2F8C833F2F84F66 +3B05BDE41F950EEDEE73DF90F644ECD7A72CB2CFEC1FCF17A867E0B0C0F5A7AA +59AF4501570A50EB302F85E542BD29ABA6D74332400F4C8365C3C9E988752F99 +B839B7A0F630C740BE32D1486981D8000FF636C90F694FE379FC0709EE7CC746 +F883810903E238C932073A90AC78E8F7DF9583C1152C559A6CCD3E5C7C0BCAB9 +73AF3DFA8615A7F299FCF7CE7206D5F4B9040D387CD3C52DBD08E0E9A80C9616 +5EA0EB493768C53E93FCE41BCCE064A047BE8C050266583ABAFED74E2B968BF8 +6CE1507105B9503D6FC29CE61BF07ED568B0F1497796B6CF781E7262762C1675 +F25E86F56CBD7E68B03350481DEFD02438DCFBB7EE50FF276387740E79E5CFB2 +CD7A6FA367377707DF63029ECDEC47A4EAD2C87CF75E4A9112444FB2B5BE55B6 +C25515FF648509AD54D739CDF040FCC34B6A88788E0372528E9B112FDB8C7843 +5D557151B6FCEE99F53BD5FFF13026B95ECBAC75A0EF4F856D2F150817B0CC7E +20AB39ACEDC30E1B777C6F06D3B893DAC73FAEEDD93EFE3346C6255DEE89E26D +E279834A7C2FF9FC63E5BB9AF74295CC5F8C6CEE33046B00DAB455A40FD74A3F +B7D9B4251448507F2463443E9141E68D6C244EE00D1E009E7F739AA650C7A651 +4901CBF31A83D7A188F7980E74F75BE0EBBDAF01F106293F5E56FE9A440E5CF5 +89C2C6FD9026198136C5F0B51DC53C878577C932E2B2B549B3FEA7B8D12CAC8F +B975965E6805C79A02A08779D78D582548412620F69F70908E351852CBE389B8 +A2084B98B072902E74E59ABE2E32531475866B3C5E515DD140B3BD06F77FE41F +8D7ABAD142B5DD71CE0FB171D93C72C1C113397D5C6BCA124297997581284FDF +3655C15DEF9EBEFB6EBA58153BAB51631CF70FF79180B28411419303B349E7B5 +CFB24E53E6383A11041562E4F938100EA504B10FE0B58D0036273D44AEA380C8 +D14901EACF5B826685E27B15D9C81F0C6E4581DFA876650C6F708A65937DBC9E +D53DA2057F6796D4CF06F7ACDAA3858386DB21B6E14CE1A4351C9B190BE38A5D +2A59CABDAA767FCE533243C6129DBC22634E979EDADD3B8E9B6C9407ADED11CB +E7DE1E57DA279A804612FF97E38F78A88B9A65186D33DE5043F2681518036CB6 +05F77954E61B7231819803D8DB4FF8DB67F56A47893D2A65549AA44BB38739F9 +C34A17A00ED72D004C627212B84D5B521CE8160C0F4D6836F02F7FBDA4F7B159 +94A7A9719AFF6F28060D6798C25325F9B383F7BEFB70397BF0720C9D4DEE43CE +5A278D83310ACE58573A5C3A8B5CBBF50727556FED673F0E6D3D362B9A406127 +A35F11282B39178A7157A0AD5E3F6B324D8C83805C6F12659EC333C89B849631 +4CBAECBD29AAB3075239D0D3840D49EE57C23AE53DEEFA123810371BA2F44EBF +C8DC4BD214933E60B17971AFA46F64389621AE2037946772D7357164850C7EEF +9454DC7000DBA7F66EBF61BC00C46ACFE18C346C984477181FD298E5A2EA60C8 +BDCAED5006C6DAE30796D7FE32FFB67EA010C68701A0310C07F97F04B928AA48 +7964C458ECC4EC69A47DE4035AA97F97DD83E0BB9013833154D013E84204D9B7 +FCFD0804760635839FB6CAD93935654EE8C9B7AC136DEE00EDD88D693A50FE11 +2FE74E9B91DF1B2B4CD1E0E4AB2533A56CC0AD18305753A244620CD879ECB18D +473DABE960D6ACDFC3FC0ACB06A42DCCA04D73E18CD6E53123869411140CC9BB +06F7B54717E6437979E88248F7364602F4117968131676F4B8B05AE44FB24B2A +517FD4A7E3FAC0848F01788425C9497445B09F50FAA7DD10718F74DD7EAE0435 +83AA8BB6BB68247DF6862EA85923F1FB13EB660D9F361989AE7D2F6E4C720D80 +7B3D28C17D150ED27A89B5DD2C53DB1C1FCFC9DDE0AAF18FEF819FCF7EB75616 +610CA0101EBDFE9FBF4A9A2A0687071331B07DB41E666F7186E5AA42BBA3D76D +9E2C0A1172F00DA496C9145ECB1CC5C900593C5BBFDB66C73B65A69B8E9887CB +7E8E4D4137123E9E22D1F08CB3B7CBDBE40A36D4C51FDEAB241B7C00BD0D2B7B +D493700B99FD83DAEBBA8E35A1B01105FEED52E133271E1F9FF215DA20CEAF59 +FFB2D74563ED4317B3C56E3F58F367FA2D285916CA08CE517EDD722E8B06CDA5 +F59F90BB13E2579B133C2D645F5DF5EEAE8A18D6115DB17DBADE038B8DEC5D71 +B71F9203ADBDAC8CDE2A75ED88219E4D32847F1D5B1C0B74D6E03B74CF27DBC2 +B4A0A1828F238B498664555F6DCB51A05ACB5F4669BFFF59D90ED267113C3CE4 +BB7AA57C660229728175C2E11D451C4F132572CA8895D3963528AB7F4B65E4B7 +F359DFC14A05E2211538FB21B4D0DC4AAB98F06AED736CCA3662CCBA0D937B3E +DEC8B155790F5A37CEC51BF0A85A309871028A67C2C3C451FED7FA0D45FE2437 +B1C1550DBE4A512AFEA4679A30FA62B0BD33925AB97798CCC88AF9F5066ED9A0 +818B1FD2A2954709907475074CAAC88363706F7C4AF74800974BFA1F0A080B34 +8438DCD198325C68E88D3579FD298ED4F6C747E0335D2A4218BF03D95E6ECBC2 +80A094FB09A5FB86923D79197F001EB06D4640CEEC20FD2340926619393DE5CA +EEDB2FEBE0818CE00B01ECB5834DB9395671C985FADC459805E29A7E640049C7 +E70F06036015E4C4D1F6EF105AA6D1414F6DDF186D2B751F3DAB51F03819A8BC +1BF747716A4B3150E2FD10C1FF5009739F7FDF01980167219D33534D77945B09 +1A12A93E748613E9998276569D1D97134980ABADCE4511795EA176B1F5358235 +909E52F8512E6BDFB95AE41ABE56D672FA606B69D8361438805548ADFBB35F1E +CCF286DD2C100E646AB14FD73A283903D0DDD8CD8DC214A665B117C9D263C716 +DA3460FC43621B9176D2E7E4920C4A068D6C13DBD4BCC1D4E7F790A8F9FFD349 +EB48FFDB1B70376756E41C75EB4956CC901C6901BDC7F3F4AE48660E59B7B3F9 +818F4D87D4D9DAAF84B4D947F0DA57CCDF44D2C03FC9BDC48B2D2311B140DA11 +3485996DEC121F96567B91F2FD7AA9B39DE9504C23A6BD69A07E00C52A5A8B80 +A42C8D10E764C3F9ACF723D221D29CF701E8CB168B50699BC434EB3793C19457 +78EBBD462218F249BC2CB3B97315EDF9A1209C817EE4BFAFEDFDA894B8808B26 +CA587CB7739FB7A91B9FFF302E727AD2EFE0BA46EF95A1F21A9C32B2B4F4FAA2 +1F7036CCAA6ACAF7440FCD1E571DA4AED838F9EF1007EF7B8248981B8B15165F +733A0B6FB8D697B5758FF0E632246938A19BA25F3D5594C7EEE79D45A48972A6 +8F66701041F42F42563CF2C57E9E9C173C365EBB414895045085951648719AC4 +CFD520A335DE30DE06E7D13107EDEA3C4BEA82335E6063F2C47953AB23288ACA +F9A9010EBB8BC97EF4B1A21FC6670A8DCBF67943B672F7782D3EF1BC773C95E1 +3523B5197F0E8920EDA0A2A4A857DF028AC0399DF5BB1E95642D39F8FF740370 +3C8E4E80F6E4A00CC55A13A6C722A77268F33FA16B94230CDF2109F52AC97282 +65ABE9C3BD2AA33CAFB4A15659737A36081C13D02F8FBBA8AA1CE951FD498D47 +3FF1E448D7655E28E1D3F07B0EA05F5A756073B85FEACB5E957EFA5E03C8ABED +088D7F3118CC190632BDEA2B646DABE0CB35B69369C888AAB955C1C41F01D4B9 +8559AD18A4180053B7E9268CF93B9763BA70C77A829AE89EF45B04602E42C6C0 +B9768CC5723E28652053FE405016E1B8F6DBAA629B78A8211BCD40FAEB10782D +5B82ECFE97A524374BCB3721B63707254C53A523120636C294C00F85B09FC649 +0E2B44BD08F8EF9F9AEBB3E81E96F921AEEEAA6CBBD95228CC6A5AED354CCC47 +34D8606F88420E963EF20049FFB86DDA1C41E625A80D55975AC5DA348656E87D +F959F4D94FA23125502C9CCBDE79158D00FF6B8AFF1E0C2B43F5314E693CDCBA +9D643E9DF2801F52835E8586284247634E941D0079BAA75740D33A15E776E27D +7356C1062654690D2B2896781AD675273E4E179894830561351EBE2054280EFB +4BA5EDD3FB10763911AB574C7FAB6920079A4C7104DA53F564F40376D068DFCD +60003A21D7EF05203396667443355ED6D755FDD063A5835079C8B7FB2AFA58CC +21A892FD89DDDBFDA976C49A83D3439EFB7CB42AE298DF55AA04FA236DD4C84E +7E2BF19EC08A12612B7804B3A1CED52922E0AB7F80025FB2BC7CC7220C7E66F4 +F2FFFE2DC97711C85D2A854B379BC82A29939C500DB209860593F6A7E9035D06 +B4780E45489510921809980AA0 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +{restore}if +%%EndFont +%%BeginFont: CMSY10 +%!PS-AdobeFont-1.0: CMSY10 003.002 +%%Title: CMSY10 +%Version: 003.002 +%%CreationDate: Mon Jul 13 16:17:00 2009 +%%Creator: David M. Jones +%Copyright: Copyright (c) 1997, 2009 American Mathematical Society +%Copyright: (<http://www.ams.org>), with Reserved Font Name CMSY10. +% This Font Software is licensed under the SIL Open Font License, Version 1.1. +% This license is in the accompanying file OFL.txt, and is also +% available with a FAQ at: http://scripts.sil.org/OFL. +%%EndComments +FontDirectory/CMSY10 known{/CMSY10 findfont dup/UniqueID known{dup +/UniqueID get 5096651 eq exch/FontType get 1 eq and}{pop false}ifelse +{save true}{false}ifelse}{false}ifelse +11 dict begin +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def +/FontName /CMSY10 def +/FontBBox {-29 -960 1116 775 }readonly def +/UniqueID 5096651 def +/PaintType 0 def +/FontInfo 9 dict dup begin +/version (003.002) readonly def +/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMSY10.) readonly def +/FullName (CMSY10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +end readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 120 /section put +readonly def +currentdict end +currentfile eexec +D9D66F633B846AB284BCF8B0411B772DE5CD06DFE1BE899059C588357426D7A0 +7B684C079A47D271426064AD18CB9750D8A986D1D67C1B2AEEF8CE785CC19C81 +DE96489F740045C5E342F02DA1C9F9F3C167651E646F1A67CF379789E311EF91 +511D0F605B045B279357D6FC8537C233E7AEE6A4FDBE73E75A39EB206D20A6F6 +1021961B748D419EBEEB028B592124E174CA595C108E12725B9875544955CFFD +028B698EF742BC8C19F979E35B8E99CADDDDC89CC6C59733F2A24BC3AF36AD86 +1319147A4A219ECB92D0D9F6228B51A97C29547000FCC8A581BE543D73F1FED4 +3D08C53693138003C01E1D216B185179E1856E2A05AA6C66AABB68B7E4409021 +91AA9D8E4C5FBBDA55F1BB6BC679EABA06BE9795DB920A6343CE934B04D75DF2 +E0C30B8FD2E475FE0D66D4AA65821864C7DD6AC9939A04094EEA832EAD33DB7A +11EE8D595FB0E543D0E80D31D584B97879B3C7B4A85CC6358A41342D70AD0B97 +C14123421FE8A7D131FB0D03900B392FDA0ABAFC25E946D2251F150EC595E857 +D17AE424DB76B431366086F377B2A0EEFD3909E3FA35E51886FC318989C1EF20 +B6F5990F1D39C22127F0A47BC8461F3AFDF87D9BDA4B6C1D1CFD7513F1E3C3D3 +93BEF764AA832316343F9FE869A720E4AA87AE76FA87A833BBC5892DE05B867F +10FA225E233BCFA9BB51F46A6DF22ADCEACC01C3CD1F54C9AEFA25E92EFAC00D +7E2BA427C25483BA42A199F4D2E43DFCE79A7156F7417ACF78E41FCA91E6C9EF +B933450D851B73A6AB6AEA7EE4C710CB5C14270D1674FA334686653793FCB31B +491E870D3C2BC654D2C1DE463EC9BA29D7371AA1078800EF93D3F66263A2EBBB +F5723697BF7448BD0D2E301544BECF497FD475B85DFEF52AF4F8F8BE445CABE6 +019318806D10C5952157FF8F8286C1EE701545C8F60EFA854EAE66835A2046A6 +915D395F1E0366EFE0C0391583FE001FF16D82A2E2DA5F57754A2C6F69306E36 +356ECF8EFC3F1188AD6FCD2427E0580C97A5B69B4E0E09B85EEDE142F5ADD2F0 +5DE51D6DB72B127412A0D57106C19CA493048A4F815129ABE767D51715B1515D +9C21067CB5BC88741B7298C83EAE36A866DFA87D8981F179B1C31292F56BBB64 +3C430779468AAF07C8A8B4934E1E775FE3F35186BD1FA6EE3689C1C750678AF1 +FBF9B23195A124C5C991FE670AC0C86FD39D2B07B9A319E74EFD498B45820252 +720ECDF7294F7B0B137CEB86D33BFCEB8606985A3260FD669E461C8BE94216C5 +D434FD8854F44EE66E5A289A9F9E32BC36AF645D53F96652602BAED418C8D726 +BD04A1B4617551FE4DEF54083D414F7DCE004E6BB2DC9C2EF7CE232B254BA2C5 +7DCBD36C2072ED46FF711F121A701E2284BF1B718B3164382B8F453D68FA0377 +DFE106503B8401D4DB87F5402A3AC9A442FA060B0610A9524D530C7157C26B56 +AC970FCC1D5655FFFFA39246E6420CF97D08ADFB7B05822679BD40C638DDF0E7 +A97BFE8918B611A145AC965C203F1428812F9D340AF499B3A915B22BE798594E +0F520109FC81E452180AE45B170FF999C5FC2761C6CECD8742A5A6FC97F16743 +AD4EFCC6572A6D3F3E4E330C5CB2FF6FEA48A5B64DD3DBE943BD9918D4A18E18 +CBCF598AEFBB6AB3CD2CBC9BFD6099272F6543F3E532E0E21E614BD2880B1023 +0AC234CB705827BF016DB84E00E8C255FDEFA0101A842929540B7B4AA8A089BD +5EFF05B72356B6BC3727817823B5CDBB1B963103000D7F2A4E2A1472FC3E614B +5CBCB6D6D784023173DEFEBFA8F9ED87EC1A0A9EE98CA59CFC964CF943DC683F +E9E00DA718C4425A705A69D99988EC6F152525C790912C2E46A2381A569424AB +54DF4798BC2D7E7A361E7991641D4B756CE2A7FF4A2848927092C59C2C4B8809 +E13AB84FB6B111E680D7FB9F2FFC2C5C66B0B501E4447C2E46C10E2F6124476F +A140C404CFE2DC9E0199BF61E035CEB481D438139A9630934E541D261FFD2906 +4CAD99E20655FA746AFB81EDBB5601F5FD6B1D6832A01D585E2C55053F6A7378 +4DAACCAC7608DBDADAAE732D66B3E7F87E79756337C1A961E53A4651BE7C77F4 +038B89C87F650C54A2A90EB7F1D525BB353F33318551EE8D84A6A83C718EA5A4 +B2AC0F7306B1E095819B87015A90CA3ED739B09061782C28CDB36BA4BD5E5308 +5CBB70414E4112193DAC4A1FA30996327230D1E021F3CD8115E12D239D93FFDC +B645910EB29E40D830E7BAF2DB255FD7C4E776557BB38157917D993EAC245837 +A3B515147043574157B8342D829C7228CCEA843ABC89D1785A9672A5923FC4CD +2F3FF27E6FCACF84E2D3136CA2C0FD3EF1EE7354CD04C38B5FB874553646ED2D +CEDF7E362EADD04B18051F20A8FB0DE18E152385B9D05F98A3A7EF177824E246 +455ABE69E2F700EB78185CCFC07E3B4C6FA301112528D977367D30D0D5D59EDE +FAEB706DDC970A9E296236C725B2B55B09B9C336B8E23CBA5FB8692D56F33B03 +16294E5FC7FAA42E96395A57CE51CA8DDD77442F142E2E576B778373FB31C81C +16840BB422CA827E30A81829648BDF1CA36700EA32AD888D097C1FE0A05B2D9F +483AEE40269DF09AF0D1AD3DF80C45DDC59C2A03FBB661C79B87853737C6D352 +67626B657321B16198DBD6DB98A092F17878AE4698121E1006E53D6F9B0A3BE2 +3FB68828EF854A0CDBAA68B37ABCA6AD4A3D809AAF0BAB1697A81FE59C98C472 +1E33CD70A75A22C249DD11D76C2575ED3370A25892A16D2FD569CDA70C130770 +93F493C7D47D6F9A5424A7A542BAD726BFC3AB225DCEBBE6AC4BE006F8C7C0EA +051424B08305BF2D951AB2986AAFEA04E078CA79B399585BFF0F1ADCED02E15B +8765EB6BF6A8E4D0901EFF2C3AA104924EAD9637A35D877E0C51A3C37DA78CD4 +8643C8CE6DCDDE3F116A6C2390F948E5371BEB5AD2E87B41C5F01FB5C196C436 +6E256A88D082E3F46E4EFFBF605B2EFF1E9D9AD5EE4DDC323A137CD9451EDEE0 +06F7D82898D71FAF2362C0FCF1F726F97F820305B7CE20728CA08C63575083A7 +84BA28B7DE2B916432475510E274C12FFD1660A717F51DACFDF0A102D85224E0 +D6DB607BB72569ABB8A7BC6A10354CBBC01732EFE35B72062DF269CB25EA3DE6 +DC603B04C90C5912D2C38D7A5ACDCDD3F6F116D884F0D8C528F69D5D47BA20DB +0A9E585C7D8CC3C324FE8A1DF150279F7E8FB43BDB720E624E5E9918032C02CD +8020636AE5C38DA2484B7F4B34163E0D0A561B43B80E97746DC05C871AB620EC +C5D47101ECED4A7E25F291184BEF8B80024AA7BB456C1B83A907652B331DEA34 +754226C39C6889EBEEFDAD081E01EF8FE47751987667836FDE4C8BB8A3FD4406 +1E643B4EA37BD370734D1A2DB17C2F4B74B4ED75098B433601F75A88C9A37A05 +CCB157EF6E32023BFA33973F3E655A4D58289136996FCFA61EEABD70791B6523 +1FF5DE71AB8A17038923118A5EED8D59C4C58D246FFA9BB26472346B40C8741F +153D19CAFF20DD2A86C6DB89154A630FB1761929FC3F0448EE2F089C1C953E02 +905BA8DE75D101A982A611056C4B237596C10951DD98BAB838B742D3CF7DE718 +617DB72E5268583223E37E029D1C8FD3F1D21690151F76B76C52C725CA135CA2 +8666553E863CE188BFC9B99AF56AC2DB5BFEBEB12FB563D00244EB89E478657A +98AF2E1223C1ABC25A4500E8119B86EB3C26B8A2F3505A3E5610F89B7C34E278 +53FA0A54A7F46D84A35EFEC36AE660A9E3C37EE3864106702DE5AF6C45ABF64B +888A4A51323138CE77DB935576FE6B4824B6942DF80625098CE1B5B32B234F1D +052A9D6039697118A9D793793775D8729D8574A2E74D7109C7B7E23BC5E2E87A +CA8E019203952A4892544E1AD3D4EDD22971611358AB230E9A2ABDF00A288501 +A01B67C42B33F6B78C39562DB50F4663B922D9BE0D8A150311AE44B83C1F129F +07337323E9A23211EE58E16043E127C6F9574019179F5635648A011266677B56 +B5D0201A4E1470B952A1579B57AB2329CD4C615395023C653F784D36B5EE3672 +10D191F29EA508CE84763CA4CE7C2C5229E38E241255A5CABCD6C7CBAED901A2 +CA53B5E24111921CDDF83578D33D463D70EDACA0E470D8F592303FB6BFD68B4D +3F3BE2D7C5EC8BBF10C90111A33E205F2649B56E8443F6FAA6C721C66575AE12 +D4C40F1F46CF9E9DA675AB5D5840D938780CD9E4AD6736ECBEB6A4397613586F +849B51048AC5F9405E03E14540A5E5582F61CDCDB57EDDF95A8C6705F433EE16 +648F098C03DED8A2AD94AE3DE202D629B9422ABB031318D48F2C85F9DBFA17BE +84708AA3B6C9F81F4508F7A5CB7B6646AB8722ECF817877B77D473F577556DAA +2BA0ABACFCF5DEA7498C47328E873019A956FBB250FD9D8885D21D368FA70CBD +2709D2DA44EE7A9869963EAB48789541906DE49FAE785ECE1F18A22C7E7ED204 +9768896B78E9EB7A2BD6EEC1B26083940656ECD689D92942CC8AF05CBF82AED0 +B45A7DF4DD7AA6526FB597322560B9ED3087A65B5EEF1371C328A021411BFE3B +D9B5088B2F1AAE381FFED52D2D1E02CD0DA78683E3B06171CBE94BE9760005D7 +135893D7CC2DB097F6AC664D9594CF1C650F84DA80D2EDE04802DBA33CE3DAFE +EB7A37E8AEFA4FDA6252FF21E8673DD98E67124D5DBC7BACF361E57077B71939 +C1D1FB923E4E35C075CD1BCBE0E80DAEA1320D55B43EAB45D9B26C366B278782 +7519FDC482D98839BF0DF2E7C3A56A1C1A3FC0E57A75CA414F6536C1FE8EB7A0 +4ADFEE3BEDA0F53BE8CF5F64230784A797133E8CD46BCCB3BF38BCE38A73CCE2 +9E073ADE792F7128231DDD1F63E6156ADB2609C200837C2E8A2D93D2A7BC9171 +050C709A71E44E32B1B03C92EB5CF1D3BAB1C38E027DC4ED9AED633D98CD7486 +3F773ACF8AE332631CF2ABE6D606607593FE862ADE31803964E3F4DC3CE3A271 +C76BDD95C87CDB3B87BC26FC7A16D567EEC62E6FF0D471B4853DB8A94D4CACF8 +843824F818083F10E88D52FC4253E8203292CB40F1414AE7E51DD7347007C342 +CD70E8E9F2D2A13D71213B841DDEAAB208AD9EA644591C15DEB084165F9DF24B +B91D3BBEEC2E34E38EF16A0C3F00700A7BDCBBFED2EC0D09601AD6538288DB50 +3478B051B5E16B604A0341FE621A58718D960D699D3FAD284310DCF54EB13175 +19A75A539EE98E804AEA24689D3540F0F12951A3C01FACCE9A7BAF4D0DAFA946 +FF65A4D2A4C39969607272C6886F44E90ABE27CA3A1F12A29D9B32E60E8E34F0 +17C5FE43D0E69A99A922D98909B2BBCD145E59A5E7F5426B3988F73B09A525F6 +8BD4915663C1301323180E760BE81CB874B020FDA3AE63340E4261E4F3E4949B +CC0966BDC4426190BE9F5D77F76A72AD925662E5FE1CEF9CCAB68F0BD33DA003 +F11EB91AC4502FBD6AE48DA0F9D07C35B96B103E379B8A83A05FE728F1716194 +1F650F75BEBADB2E3810388F3E2DC7B19F1BA9E32925F2FD9F19F4E8701F3E4E +4069125D7C401144740691E7A460021A47B1E27997FC1DDABEC5BD0EE0B20194 +2D579C7D6727AA124083242BDA46D8E116E2751C5F298851A62B60AEBE82A929 +9B9F2492BA35690D1EFD16215B8EF14E7A3803B93C28FA41D971B05B6AF3B593 +E74AD1E68A5FCE12A86E63B78BFEA87D3949FD164F12277A4688BE96356791CB +8671C49365608F3EDECC109321AF92B4C29CAF073DA3A7D73E913D0D83FAC5EB +BD884D4C686056404DAAAD6F82F94F803FA1FB0DD8908D1DF08FB87A8BB83027 +04DE0CBB1C6FEB6B517FBD7CF065120079E608CE41893C2BC96A347826CCDFD5 +C69E161217F2127A59F1A6F22037641613F191F22D5B4CDCBCC2EE5615623404 +ABA7BE6C5FE475481615B2AC1A2412E54688DD21E44CC9AF5F16E634AFCA389C +4D740B7B51BB141BFAD1080E7C726C1606A28ED492E6BDE9F800EFACD1513909 +84E98CEB6A0B7A2A6F3E1D1DCC3B2552795E0932673E59ECC56DDD37A1D52BA6 +C3F0E905978AB568941A163F4CE3AAB5C5B16F86016EC47BA6F3F7AAAA77C3B6 +09C8C3ABDB6D514A76ECD37C37AA88B5860630B3406B494F7725975596F84777 +D9CF48686EC9C5DBCC1D78513F591C7C10AB9D153B3D41426B7BF668B0D04503 +56BCB686258462C1DC61095724B9F3312316262FD7C1AEC6E54DE7E5A7BD8EFF +035299B8FD8A4A7B0F51404F4A760F4D8B4C0FB7A32FA4B2383AB6E9C78FDEDB +FE6A5788D38A6701B123630C2A6D820A684166FBBC83DB17069494FBD411B333 +CB37E2491C5BD035A33867A6D3A3D420CC31ACF43AA07182CAAE67E40EC63663 +B678F71D4C6E0EC3A0AAF904CD3AA66E0DE5E3CDE049E94249B39A1C06E3CE9A +F974B2484BB2CDA14282B9511E505B3C89F9C802218AE40D1A7541335C5736DD +CD565D4B9F4CC78F3A393737EDB4FBD0DA299E21CCFEBA5478EEF013F0552A8B +0BB11FF46CCDB784E8BDCF730A16363E66572049E42C695886EAB42A9AD9094C +B635DF4B5B9BD9B9AE8455DFA3EEFC77653190F9A8B1E93B7281C2A21EA7DDA9 +33484745BDF7E3DD63C7AC66C286C9A5A698A5E4D7A91710B7FF943FB23609B6 +4B442F83CB795788FAB5E9CF3F75D5487DA26170E4561C7941C910B088C3B86D +F844B0F340CF82786A3FCF347048463EBD2006281A816627065DDA6CD4D3AC5E +2024BC96C7D896381BBB567951E7A1F29D4E95351298B000D29E5F3D0448CB5A +CFDAE1BADE9403B90371C3A07D208948AFA022A69C519434B6813086ADF518D5 +88E0B92072A44BA1B3EBB630A13B7AB90992E85B6D67361C8D96F3E0D826FF37 +17B67E4B1EB7BADFD98D7F4FD17BECE740ADF13C141EBF0A91CB105DABB32FE0 +55086D56A0D358841D15FD349E6B95512E4EDF4C430216FF85C2ABE995E4B40A +A6044CC8820AD885C07E052B3F91C2E9A1D163BFFD210F7BE95B923E2500DB50 +2075106DB541C267BD450B25B670CE80BCD068D4DBFF2D82634175B61FBD3BC3 +406131F44C7D6F18D375D1F2270829DDF29DC14DBB58A30AC193245D18DE91F8 +AB88AB548D8138605BB5A50073295534E314366E26665AE70482B890E4101D6B +60E4F3B37ABCA1346DAAE8FDB8DD9C832EFF3E73BA470E2BACE7B8515CB43388 +C27AF99FF9322175CF8D4947E6B3846AFF5163E972156847F58A66660EC8A3A6 +5FB47C9F637B4CBB4C73B6A080B0CF6FD1E9665E92032540570FFCC747C67C50 +822811AADC404BC7ECD1673E8AA6C3A2F1D82F39430B58C29145E2F1B679C46E +94EDC711883F1E4EA84117A54757E8895A40401A26E1437B39A2F65CAADD6E02 +D71FA8AF7453668DC613F326A3344F74AD7AC67569AF399385500ABDA5EDD3BA +343CC5EDD4B558467626850E752B9959FEF1454E53E7A3DCBC2255AD8F6AB4FE +894455118A61C58840CB68A925ACCAD75CEACE863D806916228F0614191A1CD5 +DC9BAE256018615AA3725834519449B0A88B4F396654E74099C007930ADB1327 +DD119BF799FE3B0B223E1EDA04FE2DA7A1C879143E1C33B6C6344F4BA033AD6F +8E88C33DEF1977796B454BAB2494C930F492A518E8198C708A75FFEF8C49C324 +A718AB59B889DED521229E741FFE53F98EBE88B0405AD523254FD3FA4BBE96DA +DA1C27C1C979A0DD4E61C3B1F4C4DE01E42F1C4435EECFC02D97994BC8AF5270 +E7CB1458D76ED0229C5FFB4A23B8716018F9050970895D51722CDE8F2EA3D947 +DFF374D84915D5C5D16463A6FFCD079D1ED416C4347BF831FF0C4ADFB61295DC +4D5785BB0852BF472CFC97EC174491CAF961AB90629F055E75DAA6D9898E8653 +5BCF379816CAE46FEA62E7BE8E9B953466E51828172C4DBD0E1BBAD1CE28B5B1 +02B3E36403BE80B49A47446A6677FCED438F01D60EB10F478C89528FA337D0D8 +88D3FC123C076507ACDAF783A9A6E24ED73BF24B6E0F11C13E532DE5F70EB02A +60651FC2E263002D3986B7B20CC2AA08330B9FC2E26765CD52266969A86EE30E +71E0B41B6C1C6DA423D3A7E1553D2FAF26EF40DC183099322D362E4965695C52 +9FC3E5BD7ABD743CDCB717DB10372A722A39CE53FABB454EADE2179C4CBFC016 +A8E893C28EF549CA1692C8D8ADFC471DCCDE266FB4E97A1F3035801F3F034D44 +AE6ADA0192657E8078A1D27420093FEBA111333314658021B90DA4E7A8D4B829 +F1795501020D5FF0AD25584C1D57D87BB7871ED859BFD1BFEDC15EC6ECBB7011 +67E52CC9234CFE6188BDFD6D28BA6BC46D3D6DD5F92C92544B9443A6AD81CA17 +9B78F6601C9B3EAEFD7B3DE8CE8A0B1844BACE90971F4795842AA110AEB35008 +AFFF3EB61BC66C4286758FDD6456130C434FC887858BB213A9579F4DFA8B08A2 +4E5C2A52C50B26E621B95319F58A396E71CF6CE1FE150CFDE951C5930A164117 +D50F53563BBED7E2958BF8C44B94DF155CE49EFF889A72E80FA91164D07F3918 +3E8F90ACEF29867634D20799F3A8A13A8B75D965417030450B5F9212D84CE0A1 +BDE1320C5EC0BE67F0498F3AA48FB1F0C4CC62AF5615A65DDA620D66F843BE89 +F17C4F525076B548E0DEC9A45052D08ECC498D4BB0C17B222A9AFD298724F181 +56FA4E5EB2576F18769C14C35C25993D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +{restore}if +%%EndFont +%%BeginFont: SFRM1000 +%!FontType1-1.0: SFRM1000 0.3 +%%CreationDate: Wed Sep 12 2001 +% Copyright (c) 2001 Vladimir Volovich <vvv@vsu.ru>. +% See the file COPYING (GNU General Public License) for license conditions. +% Converted from METAFONT EC/TC and LH fonts: +% ecrm1000, tcrm1000, larm1000, lbrm1000, lcrm1000, rxrm1000. +11 dict begin +/FontInfo 6 dict dup begin +/version (0.3) def +/FullName (Computer Modern Roman) def +/FamilyName (Computer Modern) def +/ItalicAngle 0 def +/isFixedPitch false def +/Weight (Medium) def +end readonly def +/FontName /SFRM1000 def +/Encoding StandardEncoding def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] def +/FontBBox{-189 -321 1456 937}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052BD0CE60552BD63101D7CDBEEF5B11 +69C468645FE4ED1AF2541AA0770C1DCF81623DE0ECDF49F2B522618F650CE6CB +CC8C21885DD61AF8A523AA677EAEDDFA51A1F9B1885EEE0456196D634E04EF89 +F17499DAD982502ACC349B9EEAAE4A71A73D1147318C60A8BAC10510DE90D8D3 +F46E47295D27129A5AFE0C65E22BAD10D06885A2EE623FF8E1D90287A083E00C +EF25195F68A2A98170E48759F267FE330B57DF626EBF73D2779A4A6B462AE6E5 +19E5878939A488F2FE1094A76925CD24DAD4573AD3CF34E426708CF06E7EBFFC +BEF5595408106E2189F418D17AD510ED5B6A528E8902AA3A5F0FF52AE3DEAB07 +32F06B63E28BB88229E046F4FF8A356BBDDE82DF2A197F2E26CA00D5594725A1 +83A89A36487EAAE1AC312C929CDCE50722FA6C596C261E4D78D6C6ABF77F5CCE +0E410ED74287A0F201140F8D9674A7AC585D3CBC72CCB824F9E1CEBD08AEDB3A +A4015CADF471F7ABD9B0F0AF73A8274FD441BC1988A61799856E4770155341D6 +516CD0E25BFA59B67AB7E0571DF3F5BA70AB52137D9E6A79EFADBE70CA05AC8D +991D0895C8FFC747FBC0E9A7212BAE6560B9E2B64FFCC58112E64A3B4CF7ECF7 +595F51C34AD1342F5678FE1E62EC5A389CF04E82B5F832914B91F921F30A7E32 +CA3919F57A2D9DE844CAAAC0DC751C255C9916595E8C9532E7A0A84A0AEFCACD +83EDE059FD06EEE9951473180B517F25F609F347DBA012AE9F004DC3C771777B +BE812787C3C50315D67254A384EB65F260943C6E16B2CDC64E15EEEDC67C5544 +8ADE9981A6867405E46222CACCEF79F9DC8674268BBBE1EFEC2187A75FB7FBF8 +CB2DB2134848DEA2F9CED443DCF561E7272B38F830871B2A5196A787924EF556 +4B7E9093ADD414ACBC10147944D216D351CC744DBC13B0749FD0A129D7C47983 +7FEC7FDDECB3FF4166FE295814B8EF751B79196DF6FB2F28CA8CB00807F682E5 +1F37B8DBFA6963E77ACF4A16586D58C87B0F882FD7BAD0A5173202958267F567 +6D66D0511364EB31556C37BA1973151C35046863FB4F3F5E6434479279EE110A +575DAF0531EC6A4D83FAAAA64995A7B97207724374CF283D0FEE36BBF7582F5B +CED7CEB37EBAFD8206E691F7D0D17C63527AFB2AC537B47C402716FD6C23FE57 +22BC8B95E994FF0C6A6469AFD70C020C711DA6F19D4C46B9DBCA6769B6FF2733 +21E813E7E86FDD3101BAB642B1553FA2642DFCDE99A053213ED3C70CBDBBF19F +C743F1F168B5A21E570C8DF7C108FEEEE50C825EF2714E974749A7317D535316 +2D369F1673DFEFFFA71E41E520792075672344DCEE4F9F1687F0FBBDFC25FBDA +0D8A6A1C3DAD8BDEEE8161AFD70C020C711DA6F19D4C46B9DBCA6F9D79D26E79 +9F1D26CDA56B940E651D0D4D017BD65B3ED72939301FFDBAAEC98AC821AFAD33 +5BEFBC695F2746A01CF510E684C7D589F29C9B5E0BB1C42C9A96843918976FB4 +22225AFE3A3F92B85B2D1EAA81D0F1D4BF85B1FBE305A01C6207D95271423B66 +11D3879FD381D567701AF1B0B0749E05027D5493A806A353E3265170C00076E4 +86ADADA8AF511EC5FE32E5834EE0CA7341F16665D0EC4DDE1F80C894D3049706 +CB5FF8EC37092ED0A93D27A2EE85982E48AAB7AFA36EBB74CE59EEBC8CDC41B5 +A08A3098954BBC19648F65AD5241827219F9BF72D4813A30646A85A3E9C558E1 +31B17DD5EBE155667B73C135EDF4295FA4DA7A1C9895AA3F6C1F61BD658159C8 +88E89E3E48BFA5BE91BD3DC050837B89D74F7872C976386C425054BCA530CF6C +7A33BCABA8689139753CED4E4AD623924858E2D38A7D4BDE1BC5D5EB4F85BE37 +AC869A6CFC87E1FCA5CD9D3B850D16B50260C9C30CFA7DD1FF25580BDDDF4106 +F5E5BE85533BE7D472D65C01DD80A54683E962767BDEF178B162417A7B7522EC +6B606CF186D582DD972C54BCA767918EC9225192DCF9AF7F4409C06926511480 +479F0307DD5A7B8E16D3FA14AE4D7C9AAF0789516E44D9E4187A63CE0397C28F +3414FA7B2C2D61BFCA9492B32DDE38885072B38149BEC1A5CCE0C84A4963D11F +2E56709565C8818A538DA896944A83934003AE6EC6CD98A11CF309661E2BC60C +143604AF24AFFC6126699DF619A02E659CA508BFB7697284F9D1B44FFCD31970 +F8CAD34EEB68EA6DB154204ED9DCE3E7E23FB72C2692041C4FF3728CD309F215 +414595B073EB8B80508C2EDC1C4DF8C38E89CE919F2A837D1397202EB314ABD4 +09CFD87B215EF9299486B7EE9D4CBEF1D42B2D5DF35592C3A28ACB384F4F0C01 +CAC17DC73091C42F7AC741CDFE7268453DA56BF31816E435F38EB8C23C5093A6 +162863EE9B7A881D2F2352217CB6BA4B3F58880A43FD7A9F5D3E2CB24D42FE33 +605E3C8345BCAE8E072279A50EBA843179D2A95808D1CE24CF78652958EB8A30 +ADAC715CF070A47C44BAD93D952A6763841D6D5207A8BDB9FF4385997C0EA83D +3AD039FE0720013D660C4BDFC2FCA9D28A6742AF910205C9B62146E86F913D6A +CD406A2E9041682E2C5192F197090EE5235882FFF6C169C9A3E1E6D2F4739971 +EDA2684391831CC4E37F45277B62E03769C06DB70A2626B6321ED398C79220B7 +B304F5F744EAF5DB260B14B3D5859FBE06922B232B0AC83BFAF49AA95B7C0C0D +3060AF32B145FE7CDB50F0C24D0AF11A161E21A6AB4CAA2CEDB52F9EC740EB57 +78E39C741CC32E2D7F209C93817387E1008E89241DEF3224534DFA43673A0E41 +90244B84241A7F524982C47DF34CB09E310FD1644CE582EB7FBDC53D90EDC6C9 +D0C2AD47B679838CD6DEC2BF89521C1664A09F906D7D4347562C404D0FE57EEF +2870E0A797E0EFBF9FC06108C2D3CA63159A0300C7F03BDC40678E627A5EBA53 +AF2DD411BE8E42D4B10E9085C6F770F2704FEDA818B81260A3A1AA4B2AC1083E +33A7800BBDCBDABC57592D173D97119C98ED76194C28DF9541BF4E95E51909FA +21A965428B0FC127B39D9A2488319CABD93BC84CF44FD1B87D580EC68142CFAB +9D75C4F6D6A73FB4C07FA71626373BC973423EA18C82839F55A8A6A0FEF2F923 +41A948A8F8DD351882D0FD4A250382DCDB836B55F212F19C2A5C008E3C422AD6 +A6011E641B73BD918AB2A143C4142FACF80F1249C3D953D33B6C8CD92A37EB6E +ABD8263983CDBA107F2C8E7A85BA09D427BC7A24441BAEA7F51AB95C11C210BD +B0C8F7D62D2446A2E1F94FC480077D037EA8DC31714AB4CFAC640686AD6277B1 +E978E94B1CDD91326981634512AF675BD1F1DBD790D61561AE5C0616226C44B1 +E472DE4B65DC86690B13EF02D74C31D8C21F3E56A714E0F32D58426AE5F0EE8B +851B995E240815E2A866A4A74D6EAE3F5360559EDAF5779D2B205C39C40D9E11 +850734F78DCDCA0C179B7644517394AEC07CD03845CC7EA6AEC3594DA32A4877 +94284ED0FA153FCF1F373CE79CC401F71407301BF2EB03C1ADBC77754FE919CB +EFA5C9999CD1C08162B9B486E52E15F7B5FC5500684228382F709FEF2F0E2FA7 +C04FBB62C5383E878AC4927C4ED480DA135D62E500F1CFA744FF88838E08E36E +D9A71B21499A87C0AD1446154D1B0CCBF61A17BD7C840A1CAE04C0B973F1D907 +8EF3FC556588F36CE870E720C069E1FB5510EB663BD4F4259E6596290A1977BC +CC8AAC45C94657B38B3D9CB2C1B402F33EF5020E537C383C054339C0B59D107D +1B47D0FAB417144C6D8E04034D6CB673308AAE1E717301AD77008B19009B3A8A +C75365FBA2F62C1B30E247FAAC7EF825F484170B90F4C84ECCB6E989D587ABB9 +715C492B257104ECDC5DEE84CB467AD76C2C39A3696712B9E797567533E6AE76 +83889239262AF3879A559E707AD15B7E245CE288FF2EDCBFFD84BF9CCE9E0398 +07F0FEDA4B043F9162C39E484DF8605EAA3705D32122B0282A3D3213526C1223 +4AA260E3D8461DEBEC4B6B172972FA8407B8F8AFBD91CAD98263AEAB5AD4CA15 +D3BB121D97C7395A2B076F4D900E9C3470E16B056015C1D27A302A38208B99EB +0B9BFE812FFF13B922F1FC0A070251AB09E2FA6A38AC067DDF9287A6DD0DF043 +72480238C3A58142A856E41F55E78C23332C8C45B0179F04613CECFDC108FDCF +E182AADFA502B592F29F4ECD69FD347A453EA719304A34AA5C72F2ED69E7254B +B077FDBE8CB8A5FBBF721E34F0139932876A8C1BDC0BB8CF777B6D4BFB54F373 +A9CDFFD3673734CF5BD8D26B30D7AEA555822BF5FD6C097D80179D2EFD2936C1 +B63D2AA73221F6C261FB223E55574BC6C5F188BA6CD7E211F0363C070B8712C3 +4ACFA5BBAFC4AE780BBE824682F67BF746E85C18EABBA5C8859118DCE36A4C67 +AD7E76C12BBC90944D371843611D0BB625E227C1394A02184F9EDEB92E92D518 +71AEBC24CFF248EC622A009826CA2F60B0166207F7F13475CD71A39B3C32BDF8 +A354C9CEC1281F967337DC487299AC4C0D7FF5DA27B164A6E789176FABEAB6E0 +BFB6DF84EFC5830D796F810686720C7300E1D7C5E3D6161FF626461B0D0857D1 +C425BB6FEC2597D681EB4AC7FE97768FE3268CF65119A1C563F00FB88D12C24E +EF8E6265DBE574300079E65214FF64BF79DE14D5021FF1F7A2B6AFEC021C3ED8 +52840E35B2EF8EC566BEAF52F586DE03A1E87A876B6089B8FB12422B0DF8A4E2 +4785C27689BEE6AFEF3A8A1EED73B68826B15C388DDB60F5B7127CC969CCF460 +9576ED3B57778C0135B45F94E83B6107150C7E075E43B2CAB8609B97E6B3DAA1 +159517D1805ED8C87D4208A4E413A919A1192B6422AC8380F3CA98AA0501F920 +58125B62B30FA33DC7471C53D6A975354A103E7F7EBDC73F2A3B22A8BD8CB8AC +FC88A922EA237D0913B251DB0ADD125F38A16182BFA3C525BA13383C7624269C +1DCA788959F10A53351BB61EE0F7D9B88CC93C4A05C660E5876D3E85F53F6D24 +9EE85EF5D1A629260CCAFE322EBD1F9588ACA9B0683F0E4E26CA876A37A89795 +E58F9AC8D492046291F076FBEC3EACD81F2AAEF1880655C0CDB8C5A06FD483CC +E175AD7D7524313FE3EB67A241557DA2826177001A14EDB8BBE36315E7AE7422 +537E86BB09C3EDD6C2784D902D6B246E690542945364E6CC4B9D012D9FB770A2 +D654F8148CE1526CFC7290DE41FEBA409F51DFA84C1430E0CCD1D519F1550191 +583EF27B1A6CC6448A4C4BF05681143CBCF27EFA0BADB256BD057299F792A4C0 +9027AD134781131D4DA202512D16C5AC7A31F723EDA98E72DB5D96F3E3A02FB2 +D3ADE2358B473264D82EE03B424FFA559E31987D2B980CDB9138B87A3337C21E +270FC43E3204A6FBCBE218962E37B87F4847224C65683F6B5B894C2039BC04EB +112AE678F69F1EAE5F23F02B8B93E97B355E324A6F55AA6598E315902A97B728 +B56B22AB4C04302A2CC3B826CFC339D54BD2CD3B621DFC1FC54D17CCAE19B9FE +8F76F505038B55FE1341DEEEE82BBF82342DFEBEBDD0053909FC0E73A441DC9D +15ADF1CEDDCF4C663FD18133BA6B01AB0CB41BC0DF5937CB785477ABE9874EA7 +668E8BA6B44B1C33992E97B0E803E2EA3BBBEB1B32C0296CCBCF1BF1F3388182 +5EA867CF7FC083A5444CFFCA340D89A7AF9B702B6B01D0C7684F9CFDADABB26E +15CAD0C381AF7450134F0784C6D6745AC30DED5BD339204F37786CFE74A43B7E +6B716E972FDB8AD62C98E41501101AF50B501278CB1E65ED7F447D701B48B81F +5DFE38367EC3ADBC7775C590AA47EC8BF5E69405743F56EBE83CF4FAAA711E7E +84EE00761CB99C98E28611672B7D85B1B653928DCDA5CEB0E5E36A3BBC2C5502 +E960074098EE208170447306EA4D4E2BF509062926B55E7F75E7FA09BDB80A17 +9367F7DF308F12BD9C984EE5269E22B1725153A8338ED37F663D8A185F69A767 +8FCF4727DC836A72132D1CA61DA08877FB0085E4584E589E242831A28816092A +B5C7066486714D05D29C940737ACEB4102F3CC493AF5BEF8A307841826D8B89C +C6D898D250DC6A85C3EF4C86B8CBC7DFF25A7AA818AE3DF1743A172DC778B71F +64D0CCDADA09A077839FA7EE598772B76C72F09CD044FFCCF494D01487E6A39F +C0971734BB62776C4EDD373FA3474D9B6ED36626C93D995588ED740BB8937D87 +73AD94B834074C2AD9037DED0B93FA18F0D1AC01C613D997B42A5D595ACC5B37 +6A425B37F9D9CC8530BBCBC20A2332C56824BB6E7C6101AF5B4721201CD20AD7 +EBFBB371B81F69BF1CC3417AED6CCF2D72FA9ED9B79C21B1667E2748D7E1FB25 +80C019563C6909B64C934913357BB4DDF2E772175273E6AD3DF7B7BA6C67F417 +1CBA1DEBB862E345E09059F1AFF60BBB6D5192EA6486DE4440EA9B780D682870 +6F18005670DD492FB86C8C3E80DEE3F0D3A09145E90DC393ECFD1F0D1FF1A494 +D7743C70D67FD09717C6DF992584C499D5C2F475051035B174A1B0C3CB14AE9A +61C6A3EA8490EDAB3461A1C65ABFFC54E058D3E91C9B924FB42DCBD46CBB1F74 +36193EAAD4C9BDEF3B2631F8E518506118D8394D3C4E95364A01AD3186824885 +F26D10BF19A25FB52FE7FB520AF9A9092E291F617F1E8ACCB4FEB162BC519E03 +81CCCD92B8606041ED5FD67646FEEA876A3AAD2947EF117AFA0B6697324B0DAF +CC039402F240750657977FAEAB374299C2E9B0F4B2F48809DB1C7394DD39A632 +56D34FB44A79F22947FBF908AE07875AA9CEB548E54EA57F452E3896BCA6B0C4 +DC037D5FD25FA65D96A214E3614CC6801EB478FCCA8CF88559925A96E6FFDF4E +273B44C708E86EDE45C3A9B18AB5FAFCA8A80DE656955F5983E4674953253E0B +2337E08B5A1A4199CC9D7FF6F1C1CCF90A4BB9A217A130D3B7C9D4BB8F738CE8 +E686759EAFE88A6BEEC50E0704F27927A854234631E806863CFC0D6EBE884BA6 +DB391153F939FB1E9803A07B47558EB409FEBC95E755B0C17065C0F916F43427 +238A33D70B1ACBEE3C571D04138428ED9AA90AE0D47EB9AA39ECAFE5A210304B +B5A456EAF97B87CB0EB1B6200350E3B9ED16596CAABB2CB8CA3E598CA752E257 +7FE988887B638FD046DE70ECC18218B9B5D0E50CA0065FDCE02FFB4874A8036A +7ECF9576B42AABD5CFD3E2FB855CAE60CCCB2B1BE8C3803C8C57941FDDCF672D +299A933EB6F148BB7C3D61066CCC93A58F6EDF32EC908D93346E2FC72612019C +CA43081B667F8B6D1C3CD574544745C640E0A70908EC73B81E95714793D08A72 +47DBA5336E6EEF1C51EFAF1A5E50151B0A3BBAA8B6AAA751ABFE802349FAAB09 +8DCC3B2DA44C8A9F47097547E3505ABAAD4474BE2512183A96C577044CC14073 +847C45A8C94644767DED16E2DD7AAA550E93CCF5789B579190F177AA1D507199 +E063C8E1F6304F982C1C374A22B7264B2BEFB17509CACC9C39A3C152CA0A6F6C +22E4ADF5B4E3CB7147DA237B6439575C23953D5B8A1120F688E18C410ED9FB49 +C0B5A4984E5D647E64BEC8314DECA894C6AC618011E948916CC451F0FDB65C43 +DED235BBF30B005D70005AA35D72311B35B564F30AA1F268AC3846BA4F16F1A3 +A945F7D24379C97C347BE7F593A0126FA10690C9260DBD8815D319AF700607B0 +7FF1CD17B89D5F13B4126192FE536911E684C7D589F29C9B5E0BB1C42C9A9682 +482D080E00960473DD6D25C68AB8F0DDF594B4E91F381C566CF9C76964C2FBF1 +7DDB8714A80D19B6FC3A41389937E5B2316F4BA911AE4FFB0A7C6442AD1DD294 +CC46C962B61FCAE106241C80A1E685100824A14D0997DD1DCEE34274535EE57C +BE03C44D9B4E881F6E7DBC863830DA7E72E57DEB9A2350E19579642B5A8FD71C +6B6362466410CCDC042BABA22921CFE0497494A35168628FC5BC63343CBEB9BC +ADC17997831D98B6452B9CC478F58DD1B49864BFC9C9FDAA8F861BB04842F006 +C8AF17A8080473BF69CA8BF46959291A879E9B8EA83B9D69D43746B27718181E +8F54A4B51A49C44F4B200EE16303368DBDE0BCB10E45D3C9E115B691DADA7898 +7127BF301D1F805FBBC2B0A3D093805B9784EB3FFD52113A07B4F1DD4E042B67 +3C3735B53A18412A376398A46621EE521BAFEB079C8D314319E81FB289534F6E +AD97459A862103D2CCC4ED4925CC1A998112FCE61C1C0CDCBE72A0E14BF19B46 +31F1869EE10F40D2FE4D4428E388229D7325DEB5AC6FD3C60A20539137A9BCD6 +607E25DC313491562947C92273E55B4AF2A738C2C03D05018F0CE1D8272BB220 +D988BCD8C42462489D359F82213E9D5046B24B2888605828AFCB80D174E3E4A0 +851EA03255B9ECFB39FAFBCA6A1E9B80816B526F61C50ADFEA0C2ACA8C2D958F +D9DC45C228A8DAF476A00A93AEAF086AB80689C2C00EC7226DF86483BEDB07C0 +2338AF26CA3EE7B25D42BA4C5C3612E3206F440659F70C5B905E1FDCD1B2C8A9 +566FCF5C88927336487D54CF0E0C9DD17935372163C9D7C93773BF0BEDD07179 +307EAABC51F425AAC0866A00F81DB82B439C1D786A6A6171C2254C0C87D25128 +19A26FCEAF1F0DDAC1AB92A4CE704368099EC6265CCA87548BF00226EFC9BBCD +CC152596F0A95B5EE60502B5D08DD228B0A05AC886A7F399F4767FD1FDEBA907 +22379609D3824A76A540F89B5C7F34567E93DC7267453A068D94CF7ACB4B2643 +DB1E234415D5C34226855B511453A952D4300AC961DCC125BD4A86E754EFDA16 +BCA1054A95B09A2795749FEAEE6F3EFE676522E95315ACC8755EFF2C1A1D4F08 +981397321244DEE92FCEA136F517DB61E1D3039E5B276614E30A7F4912F020CA +6EC27CBD74F8F257304C2950E90E84C0A3967D8DDA377B3352AF777A1B1E43FC +1CAC9C13BE788C463EBF3BCCB2EB475A9BE17EB08A5ADA04C82D5A06F6C77FB5 +58D0AAF789A8805F8D7189A8BD8D5CF0D71FAF511946BB0240F44F5A05103564 +B183077B4A384AB9E02C217C4E98C9FE82972965D74DCEE3125CC2F22EB648B6 +99D1676B33429253435588B749C98B80C94DF87D954FF40A24FA21A2EDC0D22C +7D47DBA5336E6EEF1C51EFAF1A5E50146A7241683FD5C85EAFFE33959A117F17 +6E24740A2D0E0AA2BCA5529C72A8E2493D8DC15FC950D9CBEFC9AC174A47437C +C4A06BDA932C9FE1BBE2A182386CCAD0BDF77AB63F1F98B53DF2E6926A0586B8 +725FAD35C862B912A9A1EEAC1933496992B2BA2CEF3964F5035716C5FFC37C09 +6E9E29BF4BED766BEF1DEA20C4BE1B5AA10B887365BE6BE3CDCF278181DC4CA7 +397744EAA89F919658C8528B742B87CF1B43D1968DA4DD8A6184CC6F537EDC6C +F4428446CBA9B40684E28C14ED137B983B1A5ED673DB178FE0B0A2DC35B5B7DF +7107BE17C107E32BF73F83820258E869FF3B2A422DB6F3F214B3B94A26D9914C +344872DBFC2E014B2852AC88D4C024EB3974C26588628A5B1028DE6F768B0B3A +583DB75106DCE52C14771D6FC00ABB73A8AAFFF9DB786D7E7240B2CC3FF51DC3 +02D4A39CD8E1B14126211C26BAA768F5A9F93690EAAD13ACD5A89185DCEE1189 +F070340C4B3ACE43C28028ED2099A4A221710F245C7DF4DAA1C5F2AF7AC801DA +9F249B07774C64D3539DEDB60DA652E2542CE695ADFB7CAA107669EEA5C46FE2 +EE971C71B66A9E5F57A611531F44120A0306308F1017345791BE01187D075731 +4D17DDBF8BD6E51017CBB9BE14AB037971D4926EB73EAFE3B1CABABB482532E9 +F0DFAEF79F7CBDD92563CBCA6C2C6B50905C92286C6E64516507CD42FA169D2F +D026E09A805BED38F519E42A2903384C57BFFF54E7FC6373399C23B63238252B +3B7A69483B2170CEA4E9E2AC5CEF9F939A79327515A31DD32346A04839437B78 +5EF7082EA8A7DA9114F6C73207FA46B320AB68A367D1FC76296364094771961D +74B39533FAAD78F695DC2D53028F18C8F005173602E03A07034BCCC153E3BF85 +9686F6F09A2346C7125730106C85518CD8C85DFA38E72C8A4D8C462D8E42653F +E1B67833CD25D4EAD6C07D2DA7DECBDA595AA03EB130C12D4DFED870186012B6 +0FD0E369E294E3DF4F25220060FE23E1DD23A6F4AF5E70B13F6F6CA317C1A735 +1FD138D194D67FB179A172CE41A84F0A02D1B93D7EE4D2DE7B6799061D86AAA6 +CA373D543736BADA33D5762A71D368BA08C9F096AFEBC5B2282EAC89791D1421 +4728D08DDD71FB6CD5DC9EB9E491D69A5D39FBF00F1BD7F807F680A6E45C06B6 +85D9B93733B9276E3611A675565CF5D7C8D514095FE4487251BD1366E4190E3D +D8CE459454C7582A8C0893F629D6044761F6BC693258128CEB7E5AEA54E4DB89 +30BC9E9B0AA5E268385070E6B6D9702B7C21F5F8B72FB3875C001E76EC93A0A3 +2E854275497E30AC3F2D05C451564AD392300CC4933DBFC87ABEAF2BFDC1929B +3886B07E4F363255EB92F6A69012CF997B6327D50218E2E0F0150E8F5177E12F +FB0413462DBDB8D300F44232A2AF75FAEF2BAD2290BCD058875B34AA23432618 +53876451323A6B9C07A11141C8920891D0F79B11DCDC0A9903CCCD68C5AAE4B2 +B7A6A708F88124F11535117931D2011CD9ACB450EBBD2504F8D229B13E1FFE1D +47AC52F08DB31C0E263A52DCA6FA3788BFF62383A90C15B0E47F7A526C7EB97B +728D03D40DD47373B2F039ACC9440DAD0769F65ACAD1AB7F466603A4E82CBEC8 +82E9ACAE27783E583C4694CC3AEB8257896BC944D2C8110004057BF9DE96A1BE +1AE5D4C34139973BA00CB10996927B3ED544AAE5E21F4D9D3444409FC9537F05 +4C1C60614D701AE41D3E11315D0D6503A411756AD8F129D952A8533998678417 +97563D118A88C2EB0FA1C951DB0ADD125F3A06B7D6574E8217A7D2BBE4184493 +FC6CD49359FBD8687DC93083763D0264E4B82391D964CF7FD5BFE84A48B47391 +B1AB66CFECED6DF74C6A2ADDFA22353A0A09EAFD6CD51D1C3E4A0EB5D0EB0AB8 +6E72B8F384934BC1658EF313A78EF9FE4B498DA00E281EE0537B5F81640998D7 +5DA1A96E38EB16AF70F63D378B020D9BBA2F2750B03421C5F46107D3FE6E1AE8 +726336A0CE48C2D458AC060E041BFCC4831A048ACA4E3E340A55A5E872D3864A +224200B7DE4F47BD97BCDCA95F0925498FD290D0115268BD31695A11CC6BFBD2 +9233C4903317D173CDCC9750DBB35A99BCB5D94031545DDC45F7DBF5191C5254 +40AF9D81DF82909FE635AABB7D3A3EDBE1B8D69562843B44CF8E6A6C2183EB49 +EBA5856FF1BA4E4FD96954773F34E1E727FEEE0979D03EC726B4D55AEB1DF9BD +61D064B0937A1115DEFEAD6EF053D8CC18B040312B998A51CB2A1E10C8A19387 +0923FE8A1C55D04F89901A8391E60EACED9B0CF4312389FD49B2F73B15AA06EF +3D0A58FD1125624B25BE7E69ED691C6AC39E9A827C0A5BB1C3D02380DC9576EC +EAF1CC6C414F461AE32BF4355F860128995EB7C8D61E464BEACB41D4075C7D3F +CCD45751A096DF33C6848F5DFDA87D2A315A09B88C3CA4F7927A69F6A4973668 +749143D43EE2397F72135049059C7FF570B81C8B7E1B140438078CE9686EB5EF +C8B134E7077F199067CDE5993231E7D7C62B91CCC4B5D0A21DD5CA3A83023E06 +0292F9EACAA9DB8D45F1EC56D1ADD5D7D4B3A3FB4DC1AC698863266FDA695318 +0C6019B9E8428360BB09D4DB7C2918986F398DBD8AF0B88413D119D9392249ED +E7FD7F91B7959794F145B15A36C9B6C154BF1C1BE1745695F1DA047902F55E4C +CF716855D279920FDC5873E268E65CEC8F039080423EA4479F285BEA7F35F21E +C61DD5A2853CFCBEA94A0F91003F410AA42B5F5DF6BC7CC63F07429EDEBFC353 +ACEED85F65524D36D5F9AD0026521621F41AA3D7E7FF51C55F5DB0DBB928E45A +CA61F6B0E2446522DDCC0EF37A3FAB3C9B6FA0C248F98C0672B0B8F40FC33D0F +1A05C2437133F753DEF7B3FEA31C62E54B10A984FAD0311BF204A31D3633306F +98A7D26E985456765A2E398170ABD59BB9712825456388C53332359B820BE151 +2B31FEF4DDDC1EE3837941C0D95BC57DC99E5612041D759EC64A33B0EECF528A +B41F60D3260FABFE7593E11940EFF64A7A65621CF733A44F8FD226BFC865D7ED +AD5106F748AEAC673B9A3CC07CEA9151BB39D89CCCF380085F19F63F56B8A5C5 +A2BB71A7DAEA55F6EF21A37F6B14CC43C354FB4E9C3C41DA75B3EDBBC2E8AE95 +B1FA4C2F65DA207A19657B81279556A07EEEF9688AAFF6AAD7EDD6FB4289EC57 +7BEF4F37042C855D604956545BCF99915951A663A73C0175AA093A73EC0C41A6 +3D4DE17DA33B2DE921B0AF5AF8175F9B2CE57A7FA1FF6AB9EFC88354867802AD +758D16B5792F176659CBB1D8828F4377FFC20B03CEDA4C842ACF7E978CE2EA76 +73139B02ED185C5F23910DAF380CBACF04EC12E1B36A15E9731D8ACFEE6641E4 +C5F8560ECEF1EA18AC2F079A5A8DA728538CB8B7CE69E2FFAFC93110751B59EB +D319B0B1AC6692D9CC06F195DBC92372FA72839104629201DED5777F11E4344A +BF91D975DD427C47DF2E86E9D5E3D3027547F82894C6A0DCB9E04BAE62AE56F9 +DB92C1A65927DAC1E8E5B074239CF3A166C3C3BFE5941C85C242046F3455378D +AA02A55E28DFC40144CC9C5846D703E9B044052117FDB4C7D6D472E991B643E2 +F05EE48ACC97E1673210439C48570C51ABD441F2AA90E40EACC17E21373BC973 +BEBC2CC2B5CC76CA9FAA8B3C2F0D2865018632B42602CB3940F8C0D3C5187D95 +72A5463EF6D0CDD5D0301B8D7B52EE6ED6B96C4AA9861BFEDCD09D8A4A921CAA +97603AF46CF4415C5B744FAD4D632BB23F86EAE1B0295DB72601D74C12EF77E6 +448E040D68CD6D383B9D93FD9C8CF7934A82C720BE4166434207F479BC9EB2FF +69E7F3079B6CD66D8B330B24A05739A6089EC3F6C4E115B5BD5895070514E8E5 +513A1E8A8FAC4890E1D1405EE5CA4751FD7FACDCCE3EA9B72109291BB73DEA2B +8D22FD6EBB39E55DAFC1C94CF72D16E676767D07C5D64FDD900BD8C39AC821B1 +B553C36AE6B3FDFAB69683C6120AC5541CBEB3E402FF74FA95665BC6BC84A676 +E87AE3D010F24DAAF4A235E8607AD153091804325EDECCCB7BDBFA7E97845ECF +8EF3B6A3D13C4693044DB5FDF9C2B36E67C5F3775CAEDADF087F8126C6D28845 +850181CD42EF2EC8AAF85DB331890A74C6B8C95F76977E198F032F7940EED0C3 +4F6D95D7FF795482F7EF532A4EBEE3D909B0655EEB3D3F70A98FAF118A0205DA +B8816B14A3BA5E41B5BA06E197AEFD2BF6FFEEF482842F59F9FFBAC6391EEC22 +202DEBF0BC70A92D3B64D1FDF723DCAEDF3CBAA7528FB63863F88AD36C39363E +DF50F26289C06E1D550E4B5A45C9C58403594A63C81A889E9E2EA7C796D7FFB0 +FE98888FDF6C9841236414199EFB82B1D1E2E7D1F87F069DBC611A41B5A5BDB5 +3A9752A46A69BFEACE2BD3CB1EC9398900960AA8741CB60C8E95C309B6E0D4CC +330C8F87EFD2A91F77BF14C9A9A4E3F160D2EC4C5C58AB549B58246B7F96A93C +8201C812B1A69014378C33A660729F9E2E1A1F760498C875EFE5093FC266EB58 +50D333ED1C49CBE7C4DA2BB6BD57DA5F643F97B9D8336D40A60E388C405F255B +1AEB6A15491E783B389678BB7F2CEAF3188350D866D7541C39D765EAF2D4D238 +2C72719067286F6F70BD2D1AC262019BDF629C518276083BA82348893BB5494A +ABCD0020FFD3FBE4EC8FA718D977F909563D56833CE0E5AB8C547C662B898F65 +330D585AEED767BABE21F7B50B04B6F7E0A0576350ED68DEF618B911E1AD17E5 +B6ED645BAE914E3C26F506662A9A2DCB58755BEF7A9D45B6C583192843A71361 +A28CDF1B9CD0F3F77C1370C8BFE081832EFAB5813E8AE85D3311E5B6EE262F03 +198E0B8F82D7979E31732E676EB53DEA1B1DFDA3ECF14ACD9EB9258E709F3607 +307608F4F1B2E0162FBEC7BCF7B574A75F2F6ED58F26AE6BE96C46D34931B4D1 +566B478E0D9E6DDD321D55E00AE1D954EA7E966F5CBF8BEA36CCF55C98F1C793 +E55F2B423B99B07C8DDB7BB4923007B9D2BC965832803E347A3E9F093BC6FF29 +A066BFA47B7F4816D0568CFE3D6FF8330E2BA96B04DB2FC9A04234ED01C6865B +A7B57763218E6E04D79897CED74EB5CDA668D91B89BFD4703B3EF8A52BFD2B0D +73AF1352B67EDF6DD029942C0B8F56A07C3422190A3FC56C9525FC4DBB672882 +A031A274F2D597E9D4D629DEC88493BEA6BEA39EEF22DA7715CBAC3C6E4FED5D +34B47DC120CDBB67C4B270DBC8A09D56A027F2801FB8B18634E806AD80973806 +8E7878898C64529179DF9A162FD4A49C1F783A6172A1F73B7AAA8EEA65942911 +30655FBE6E34A8F8C31CD229535DAA3639B351C8EF330672C958459F4759FEF6 +F3AB2DB73E296CE5DB4AAFD79A87CA7435DC8A6098EC6BE0A1C2BE7CC1FC268C +E0BD513B1AA7737B95800CA8EF1A65381063BD783CCDA519B1B3997620BB2A47 +6AE7EF629FDD3578FA02E0F2A2C0F3B3CBF18EA141EE1DEBE1164BBA45AADEEA +C0F9F751F09E527C37172F8FC1F8663F7AD65A525DB0DBB928E45ACA61F6B0E2 +4465238833E7FA112D321954DC91F8178303A63B4F4161F7014C5F88DB62865A +0148B1C3DD513E5D23D85B1D215753B007CEB7A37F71B9247BDE343C7FCBD09A +5F60F7F1D3AC6A0920A764207D55EEBFAF54DEF3676124586D044E3DE7C80E7F +089BD49AF829EC0737FDCA5985B75428D8B3AFB379881A43D7BED3235F1ED829 +F4EB85BBCAEC301EB631A73BDB2182202D7B777A2E5FB9D86EF8ADE49FD22FF8 +FE2A39122698607C186BB6F60424A22FE676D9EE2F6C36F6BCDDDD4375327C26 +B9C2F93FD51FE8C1589E0BCB26D5FAAAD54BB465A4ABB828E39E23CEE6E6E8B5 +0E5E5E5D776ECC1C763357E43BAABB236C2C8E6C3D519F2E840D067C175F433D +AE4653C788F5A48DB10AA77AEF255E71D0B75477491E3943213EA7F9A750572B +7FF67AD02190763821613AEFC926CB0AA35F5EA6B6643BC81C9A8B87D420A22F +22F16763F13D4A8D6FC3E47285F8AD1C23070B5C1B8F2F9EB35A95B1D76A3450 +31105EE90C397C3F20F4C0FF0CC77FEB432EA06F8EB873489E6B86CB0E9FF10C +1A7CC2752AFBB820DF1451922877B947C9A6837C8438973A47816079551B1439 +DE7693DDECA987E3AAB6A28410FE28E604C5D835E005687AE177CE14F73F6D9E +E7061E75C6D3F70DD0A5D66BE2637B56035F3EE033C47CDBC6A7ACE8863F5EF4 +F77B0BDEE8EEA36FFB7FD9E45356D1D31BE6F985F5557B0BD90A0C7CC7D49465 +94630B3ED4E988DC6C45D22C3733AB1DF83AE6635D8329D42F674AD767980A7A +1290CF8214B6DF1CFD292EBD1AD543D221C830371E40CF6DE194B9C5A4C97ABA +46B57D8FDF3F03D9C5BE25A61D56D5B321D24C1D50CFCE0A60FB490B810E2D6B +5AD420BBDFEDEDB6DC7DC54CC0022AB885D227217356400EB19A0ED893449EBD +1FB12DB30FC715863658CA6D8673CE0ABB18CC41C441B6F53A3C3C64EE366906 +C03D96A1682F440AEBF350AA433914C96E6189E0CAF12C59C67C3157C5C5C65B +8E24B9E010C86F386556704DEF05D05EDCBED4CBB9E7D46577D2E0226C730C00 +4099D29DD860D1FFEA2144E2ECF1391E8DC49D0B64755E4ED9C556E570DCE685 +5BBBBD71E15D3C35A805726E45C62AB41EEE04B388F0C44D1292417145916C5A +0FF0F571EE5F5CA6C20F480FE97472E840089B35400059FD292436CE8BE875D8 +20E6F0D143ECD761088B7A47E5A29D437ED90253B397EC6ABE41FA7449BD527B +3CD06229C194E9F4EC64F8F10DBD73993E9282374F99C252E502CAF45ABCF71A +8C718CA01D976A606E0317688A1F65B826C33D4F3BD763CC881F9CB8E4189845 +7599928620D1E3C657FA3DA74D15F53FDE191E7E4839D484125FB32909DC5EDB +0170BAAF30495EC91D2BADFA3B62A55B1F53CBBCD5BCFD1ADE5A9DAAC3075501 +9C9FBCB26A721BB01A236B15A7C0C270EEDEA3061803AE2CB43A03BAA4575CB0 +53735938F31B6111B0037BDFC5E917837F5F183F421CF6B0DBA68CE7EFA7F416 +7D7685098B601E4B6D2E00FF1FA932736E933227F4E3A139806332E9A96544B1 +C6DADA476B3B9C532FBCC1A21555EAA4C3EB604C73D2DF08E1830924C4928AB2 +39E1A9F65D8D6813C34D0C6F788E19174A19BFDE61078551D77F1D0D9CF099F1 +E4CFBDFFC914D00BA948A759E4068FBCAF6239EA0DD5218DAFDD66C1B7A599C9 +EFA349CBB6A3629ACFE939C25D17E7C487EB1FD2DA4B0EB6B64B9400DCB02133 +25AFB7B15B8053985FFE296C94A6A8965FAD2A4EB1DEE8C4EEC6551F8E13A35D +69366E14A6EE11C5D2478FEA60FE7FA11857AD3C415A294F17C6CEE5288E1904 +289C0C533A2B8F20C90106230E937E52C8E4DDCCB65AD4FBE2396ACFA1BBF315 +625758E3070CA6CF6F9C46576FBE0AA2C2A0EB003BDDE3CB41777B63A343BB35 +9E8C07643B47FD68C6988F90A8434D9AD697FD1AE6471F2D4A07A52DF022F18F +75D166142EFABEDDB9A7F685F62175AE5B76D56839D1AE2F1DF5B79B566BD9A1 +AFA5D9A8CDB1C665FBDA452E310ABDEE48FA37280B14DB32E0742DF56B77F282 +1F0E6DD300CA06FAE4441A45248CF982454DD037ACAC23670DC306D99AC3D3DD +83E73DA13EFB45684DD28987AD46485684CC37F72A5D563F58C405D3A6F3D5F3 +7449418DF367B89D68082D63DAAC3B471F9229CF955DEBF04BFF094641D62CA8 +2F0618D41176D3818A39270907F89C96388CF99D80512194E9A4A9532F06FE61 +9DA9CD3B08BBF9D4FDB3DD56D9FB5155F9447CBC31A948E77D0E9D2927EA8B85 +01F6C663DD41CF6E982793A078053BA9DB95AF93414006D730FC4FF3CF48FBAE +1965BEE7E9AB05A9616DDDB609E752C2A82A5D774A775DE37463AEF83F05077E +76EA2A12E3A0431CE0A478783B2A55A6489CCD0BEF8093996E2E57073A41C56C +C4C90544989BFA7046636A9712F782D2238CA808F817A7149529D21A5EB6715B +A83466299CA9E923AC9F6EF33251F88FA439E6F8E884B8AC340C6138ECAD36FF +BC47FA0A849510989893EB8605B9AD73B493FED083BA5C8DAC6C2695B9ACE98E +7530C41B81B657E8A9659CF0AD16827E7883BC7422B095C22961BBFDA8F035ED +C4B97EA8C3CA0052E953CFE30BBDD67EB5474176035C124D1C0D8FC5C93919B7 +8EF6B7690795E090355B81E4ABBE9E480C9471E036DF7198A36E6546AD46EC73 +BE429720CE5D6DE8B366C47623BF68D73CA01BDB0161AB63BF2C9F2D616A524B +519F6132813EC71BAEDE7354AB53BF751BF89BC200307B433C07D508E018DD79 +DF6AE9CF394BCDCABE30152AAD7B8EB6FC8785764FD1272F895ACB888325A72D +8CE40D5E698E7B4BB8E6A5F231D22D40D43EF51D5D48B4B3874997FE609BB1C9 +AB544F5EEF3447E53782E5395FB225B84BF24AB849C93DCE27D6E4F9B5C8B25E +C602B8C5263B494ED95732E9F09772D59ACAAE6B6B2EA5F7F7574ACE3CCCC75D +E690CFA51BB4E9F4BB469684DAB734D97B8A0DFEFCF86FFAE8469A1D4F730B6C +2C674B9E9C68C227602E47D5A1DCBFD228C3A88B0B9A4D59BEE5A1CC3968EBE3 +F2D8D0EA28D17C1A03A10386EAC96140B93BE21F16B582A90D0797D40F48236B +8CA75F0423D5C14EBA375EFB9FC1233B501B5DE1404D54B012D73BDD380F16EE +76180DCFCA364D5F3A821AE382DD8DE3BA0113F20FD7FF5B693437753805BB9B +AE56F688DB0FEB06834B27E63C3C0AEA6CB013F05123A7ACDB1458A5F28610B7 +579CE6DDD8F8E0536FA8991B561B8441FBF6A7A5CAD6E08022EF695FC5335DE9 +163BAD747FF07BF83006E45E011BE4D1122FAF89A179BFE707521F8B7AA14EE4 +E989C69A9BF2650731674C8558933C69873126235D6630F89DB0EE27AC118786 +D7B54106282283A60C929FC6B25275EC05BC64DA16C8E3E9C725B444338BB074 +0A00D5C9D5A48CD9C364DBA69019E516BCCA4193F48D84A861D8145EE859218A +D50624F1627DD3A30F1264EDEDFD32807459FB463F06A349C3E5BA802751D85F +BC1EF6C3F11D68AD18C410111A18402315C5A9AA582BF4B058409CCF247C11F9 +0CC2BD7DB143D472FAFD7E90FD7E99266072AB7F0D356A5EB24A6ED211C90590 +D09622832313D30BE881FBBB3E27CE14881C78FBAB20BBECACA95B3FAD1BC3B6 +07E40345180EAEB37727F9CD8041315F870EDCB680E93A3C6DEFA59692A69702 +42B952D5CF1AD58B5273484F86688DE17F4159144D50894465278A1773069408 +4F89F2C4A795D1E129ACB1B1B317E1A55DD1EA84C45966166BA8D15B77632F63 +3A0D5297C6828BBE117CABA4CFDCD599889B863C60DE4B0F52011354B278AAE3 +E05E6E0E31FBA0E825072F170375B64E10F96A0744D72786ED5326A820D3F09A +C1EE26F70FB8A12D8DDD28A429F2623D7654CE176793F57BF1F5E23D3BDA132D +39D5AC3EC2404236A706F32A409DB16D48A9ED4F9B9A826FF79EB2842AE4FC45 +81DF3620CDBA08A87326555D686B87F5A5107E26E14847839829494AF79272B9 +6A0801FA7B750B2E89FF4FF31183D8F8BDF5E8690CB0EF156DEB38C4F70DBF6D +7AEBAE4522208C5D182DBA47AA1FB27A0279DBE47A295F0DB4587CCDBAE5EB2F +9C3839C82B328AFCBDC3C0AF8B9E58F4D89836555C9EF56B1F4971DCC6CFCF9E +43117D5675B0DD72989D05CC7F02EEEB432362B00951F732D0BC931A032FE889 +37790C62B28FD5C92565FAADBA89E1CCA69852A3AEE0D9C075E2823EA380603B +5787D601B11354D440B0C64ED7C41C6AA25BB7F0490A8C3E63E1F3385D519EC6 +0D1C9FC416B5491C11572E3DD82A06A75E70B13FA577D4EA53969360A5F74ACF +65781A3D9E7C9A53CF7BB37EDA53B638656E3DDE9C587279599B979335540CCE +5E685920E44143D043D5B9371A7F2C2CBCC43967E1BB28AEB41FEB86FFA0C173 +585867D7FD87B791FC7CF59D7B56436B6082366AF70B1777A622432F0E229A75 +DDCC980F5B20C8DFE376AC82B15030E76B42673EC365E09A46152BA2E2B9B889 +4390C691EFF3BBEFB3EC4F110477FFC838E510BA979A2EC83C35E69355142BCF +DB79C3726882681C44DBC7B05BC427A1731F5DFEA9C05BB67BBA321DC1363EC3 +A097228BBD5CE877DC097473AF34C668D8743825DA4BDAF0EA9B59AAE74D6C5F +4E9A8FAA5E5403C3E38C23AB65B26D3C0B582E6D371704ECC92246E522A54732 +DD7357B9DD911DEC894E1E4DB968217EF926DDDAC6DFAA9FD9F53AFB4D1690CD +A8CA8F19A3109C1A75589F200EE97D042EB71981471E840724F3F3FBB2B576B4 +65865085659444C722E5E277C8BBD12CBD16153AB408FBEC774EE581A5F86BCE +B54FB1417448344F3836556B3A14921F0DF459A2814013D04E9B454F8AC9B8FF +240A8A185BD4D2138E5D1E9034A370488A2CCE0914D80E593D3272C7C4767EF5 +979AC25AFAE05E65D96898EAEBE30C5AAF9EC224A86E0F5EF8D0896B0965FB6A +2C91DCF08533348F245862E46F8F6BDC91F2FB32286AA6353F42672ADF311141 +2C20539CEBA8ADF4297BADA607E48C2B14AE9FF43E863366E3794A50C4D6C1D3 +AFF82D12A6E12FD08CFA83FE4E460AB15D633D80D139F1875719C48BA7B84D1B +5EA70FCAA9CF5156708847224313A84B1FA903E8BB87D4168A4C098C00A1A207 +B0990106E36F68C20ED571AE4AB86C6FDBFC45094ABF6CAC5EA7B4A74D3DC71E +B8D078B7497408202DB3048CC13BE711D9C54F9EB12C07A35A8A92558FD02609 +7D52C3188E45F3950C2C86F9D9A69FD4BACB2BEF2226274EB67B1426B03CF204 +A07219ABE3D5575AB41AF743E6A3A9E0D429D84B2ED88DCCE0191019690D1D20 +7EF99BA34E71A21D8966713879171C1787EF6E38698F3CCA1722A811315D6353 +36694F597494F2B87D691928DF8209BFD3DF83D9E858A9C54EED3E6FEA9C46FA +47254800DC889B333DD910ACDA675CFB557D167731DB0395C9C42B01565B075A +901EFF3528E5CE38BABCFFFF3405EAC4CE2FE4BFC8E450FE371E57BEF0ED9162 +2BDF929B80F83D1C1D1B1C3D0C24F51B4800ECD5F19C4A81908FCE3F2A4E0E0F +723C0D9591A4DCF433DC3BF7EB8AFE93E07DAAE92045FF1EBA0C9E4DFBFA4E36 +00C474D7F1D19851C8452A4F9AEA3C4D54A1EDCF8246F90F2734372BC4DFB29A +E60A9019036E6EAA1CF650E738445B2E15D2F67613D576BFAE3B4C29BB5F5599 +AEB2C5FE783CD001A38622EF912E4D8F08C63A948301A18860F7170A43CE445C +D694FEC3FF15AD1F1739DF248E1FB26079C7CD1C3863A94E673EE85049BFD4D0 +06B4311E53E153FE98D8617281F893862DECA291F383BEA35F480CFCFF5F4ACA +D10CB600D303CEEC585A3D80F5A3576416266999C4E2DE32C5628BE0B291FFAD +B8EAB748A616A7D08BC69F4B9D83818DE37DA644D330B373E5469DE6F41F72AF +A9A30BF5950668B80831832AEE3FB47EEB6A6DFF9B89AF47F5B4E99D5517E626 +235E1E6F10162D59A983003764DDEB208FDF343E71FFDF5F6351688C196A165B +3BC95F41E00159C2632A6C05AE421140E7755342D47D3D7AA4B8AEA1BD5AB846 +D0C1EAD9C6DBB04F1EACDD026BC3A09EF21E7BD2B3FF0CCCF544538AA158FA34 +283963D166FFDBFA67F9811023FF9DE30EBC7A58CA1FA8DA7D18594E6930CD7F +02BC2C84B4D34081D8ECD14CD40939C2C1BA621B0F63A280D3E89F5484F38AC5 +BBB45092E5F59B08070351C7B95C4A301A970E12C56314EDC254D7AAB8C359C6 +6C6D7ADA541C56812675AC95EC20A27B716B667C1F0C820A092D33D731D27500 +D61E6749527ACD758B9A8574137F3C1E1C03F845F2C449E0FBBF7F5FE56026DC +A108785D37FE52A0E198207667CA649CAEA3B9BE9771ACD171D6CE170AC59C05 +950DCD07979389D9C8D70E1A2875D32780B66D6822038A11BFC60E7B0C7D2688 +A8C2113712C63465DA4CE735F76641E3AC09CA69630194A84276E8F189255004 +36774AEDF9A2B483BE149F8D6CD852804E736A107580B6B36F81AE12F9CDD054 +9B53A68477D10827E993F5CA47FAFC54B916507091217258F628BCE15419AE3A +D5EDA15DF75FB9DF4F1162B5453B566B34B27FD0AC1CA4EF3AA6CD86B7F23181 +514C1171857EF7CF75FFC0DB741406BA891B34A673BD88709FEAF94F4019429B +60419D15323F61E327E8A5EC59A8F6CEAF1DFD123410A8F90483AF9373C26A81 +9CBA9639823947FB42E2D037F6A0D1A487CC073F5470203E61F3CC78D61B024C +97218ECF3500CB3A7178145731551C9C83C5FA90549C90CFA8E49E7AA97CF2A6 +BC2EB4E39F31F0DCD2F3597378338580167AD55D483E1724DFA700F7A519EB42 +43B9B28F819E161D2F380AA37A26EDEB6D6274935179053D9E5F8094F31D644E +9C28DB823EB248734BAFF5922FCD7DC9455FE48B4A67D891F83285EDA376A583 +27ACDBFA56B5D30964D64D7FBE8BB2A6C1AEF1BBA02106C18BDE001D3986F157 +CAE0FBFCE11B1D6820807212C661C98B3C528A9EBB0B613DA64B0FDF8F1DBE69 +4A620AB0FF2DC9E387EE468E990A3229356855683E7DAA363F45D5DB67BA8AF8 +468ABBC6B1C05A54DF26D33CC2FE4DA3493BD4B32111D98518B3570952323F0E +DE145556DAC5425C6A0628B08472FF28E48E4CA1265E1882E1980F8961370D25 +6A2F42D9B24559B0DAB9B5C6D5145670F5442418503E73DA897CFC4682ABA026 +018AD948D16FAD2F75C3F1B46D96DBCBE68FA93955127EF557D4DFBB3DFF138F +793517AB4E6E41E7B979F8D6FF20E2D9830C6819CE79189F87BABD662B6A2DBC +F4E91B620A7FA6075FDBA041C6B8B72B6E9357FDF24663A3A9487988C66E8BEB +CB8F5FEBBF3FFB5D1597C05C73427642C1208FC6082DC00A00CA6A2312B45EF3 +1F1B177143B4ED7A910B262B28A021F96AFFCCAB73C8DBCE294E10439A98C792 +9A7C06A041E562B9D3328EF76C05BED4C7BB3DCABFDB6A9037F9EEA1789921EA +4AB166C9DE3A73AE683B2E8B6A56B8008524F52E518B0569AA27FB4D8D3CA77B +BFEFDFC82F5A417C6A8CC0D492E6D0FE6D3E045C900C6961F9798FEE6D1E9294 +573C7399567C6DEF9BA34ADCE9103403A49FE1553070FFA9BD213969662126EA +EEDC5E923BA922C9D8A409379383C482311C53BAA7B2177CD6D09A35986D46D3 +76863A27764640A77FBF842AF80CDB7ADDDA72A614E3FB763A150D25696EC971 +544338BBDA8D2FFADCA23B0A1A507C21CB868640FE084C48ED09E4EBFFD13C11 +EA9AFFA2990F096C928DCD2F8BBDA9A4ABC8157C8180FD4B01CCBC48B37C4829 +A84FAAC1F2AB9FBB056FEF3CD77210FA5B8F8D8118436F02628971C0CF54E878 +19AFEEB26E45602883B114DF5B31AD673389BCA33D845E39A436B0E658E12432 +0761AFF0137321C005D566DB3D37F8EB5B27890A9FF16E6B2BB0E8C556EEBD2E +1577F2E428B1D1ECB6C7FFE53D1BAAB5C3BA656F554D573E73F50ACC101C0121 +DCF5F9B076C8F554C2D065C55579E0263C04DB2FB20C254EE7B7140AD3482F25 +C34F290D51081B6B7364C8D50B02E2F0F03B3B07162A609D2C64A1FF4912EF56 +DB93391F91479199C79EF43285D174C51FE08958598A772C8FD641AF8FB560C9 +E8C084301239427D52F13586F167FA3372C2E48E7D2F22F037E046434B1EF334 +29F6EDC5D588FE135712E4F26A7298C9F57D140CD1B2EADFA17B204DEDE712A9 +19B746BD34232952DFDED4226239A6716A2F9EC94B6DF822012F0E2DF0E348D1 +74C35652C040F703D9C2B95353CD6115F4B66BEB128AE1B34FDFC165316A053A +CBF84A83D3A9890A10B713FF3303621F584B3C945B41904DBD4F7EE2A98147DC +0A68659DBA339DB920C3E9DBC05DA683F6465EF20FF946778BE836BD952C9CEC +0A60DD366E758AA0A248DD12C7F714558F72180EF2C2484870657873DBA07142 +7A7575598DA644E9C040AF9FFC52F6E30739A8F21697EF340BB9FA3A66930A2C +BF9B27FC6186010778649C6F7B4A2F5F42977D0AEFB154BBB06879E9617516BD +BB31792D5C80DBC747CD820C5D3DB791B8C80C04BA5045E9DCC980C3907940A8 +D24EF82CE60F2D7803C2939688ACBD184103535A001C11831A6C904C64F6CBC5 +E25CC8DCB77E50B8C65054F784468DABB5125F56A2A8610D2E625D4A6450AB19 +77FA63F353D3069B60B7E364C1A5DE0CAFEFC32F05CFE83CBB87400F1869ABE3 +DAFB3EB319E45677588C059DE939673C7A6B0153284A3A43AFDDEB34D73ABEB4 +D05C0693902D6BBBA612C3387CFA52D4E8D125AC5828BE3F5C8EF758CBE89B19 +3596ED93A424331F4DFA165BB07580562FFB579DBC30B3EAD05CDA06E2D1E49D +9573BA785663D5E1B3D32BC743848645FC1ECC4D182610CD3DDE8B2B1FD66BB7 +72F3348766CDECE21C461393B1B20F3D27A82197A50418A2F2C53B9927130A61 +FF5104F12DC612FA9A4E366FC04A0A9519F3AF1F02004C00D2468BFA1305FB5F +39E1AA628AE8EE6816255E9382A34CCB456F14CBB6D9380110070F4C444A5873 +A203D78E2025225B60860CE5270D094EF53CD66EF0D6A6734271ED718B10B9F9 +DAA0702EEE522774F8C0EF74CCEDC0774759DE4AEF62D0A898E3D9289EF8A21C +11301C42D3449D771DCCAEBB5489B75559353239D3E3BD3BCF854A025B949AD1 +0402F64CE7D55FB2E3D324BFDC162C7AF6827D25CC128AE327CCAF19B83AA90D +8E0C1BDEDD4574484DDC30DB5ADD9188EA22AEDEEF4595A5D1E30793D54B8717 +9A324119AEEC95920781BABA10B2EC7806C9DA21363173FA0D572837B5D3EA86 +E2F2D61F42FFCBDFEE234AC838E251249F90CDEE409B7B5CFEA247B3D0FA9B09 +EE7A69E9CC4FF7EDC29DF36EAC32AB2DE8FA07434EFEFFA50812FA5822D6D217 +0B1C9679AEE4D7677617269963A38FFD7E89ADAF54C3C3F2788C597F80AAE88A +75732DDF6E58A8FE2E929621351620DB25B8F69F6603E41C5D24435F144D12A9 +2E0F368DB54E55E5683C2B00BBBEE9E6F0E0A3A23BC033BC8A730516D2A6E205 +96D411F41EF20D0D273C05EC2665219A936D1351E4C7F502BA13F255D75F3040 +E78289A9DE233F7C820809F91A5AA336B4B5544BB9BEB350A526AE2FE1AF4A8D +571CB1F2A0C98383EF9D3F9F362DE3C813487A0033CE43F3DE4788294707EF9E +6BD9EB22B99C2C67616CF1692CD6A9CAB62B0BF149F7A3D8F6E5A3027CA9C5E4 +70223BA442205CA6806F38164A3F26F2482FF73EA93DEF3F415A13D50AB2880F +E598C43D765B9321B4694E813CF0B1BB62741BBA0A8B1B89E7FB97281352FE4B +3551269401BE0964158633C72306956A20EDF41BC278B492F84242EAF18081CC +75F9E54E502F0C0AFA540047ADE503960AC2A978D811B217892059555691EBB9 +400F9307F40B1F0435CC873FC94F75B9B70C692D7011AA99B07C60A1CFE60AD1 +4250AEACB21C92ECAFC2623950BF06F241F6529A13A0B6DFCBAF87AF64C33A4F +2BE622EC91671C99FCF2FEAD0AC21E8015B568A023AE5236F4EFA40BDA90BCCC +7790FD932EEFE1D03AAFE1FDAC25E244A5DCBDE59D33399C69E1C6C1853076D7 +459155A09997C89E5B5E24EC4371567189D03EE33E7FCDFAC88115A7D883C45E +330055E5CDE4F7AF283D7C28DC8637F95F10DFC2E5F763E1D21771BF2003609C +69B50E1A61AC0068D8F3F8A98AED54A9BFC3B4B4E51038DA96390833AB28E6E3 +F58BEAC48EA80B08EF819CEE42C4F96DD717AE83C879F248CDB9703EC211E745 +65897656B3809D3A48A4BBB350E290F5D5B78A1F643EED55BB4AD4A0B50FE111 +7671E2C8FC3FFAB0AC8D541CC3C56C75C443220DEDE2B1D7F78A23720A1E50F0 +659F1BD13B8F6A13D61B3293797DFD5F3D7ACDB4C52E5DEEA26C999A7E68487F +836FCF35E53128803E04E9C4F69565986D79A4DD0B8188413CE256C7853B45CB +336AB539B0B269B5F183A051307A0E37F6ABF64C91D5E171458DF3FB48C55CD0 +304A51DB0082656D03018F6EB0F6973280F141C93F8DD99466F87463C4B55828 +385E36269DD1D06B015728535E602E781149DD0E354E9C5934EDE7D49CA12B52 +779DED1E3BA644B590C213C2525F967D234B27B1F34E3A003754D943EBF0187B +564E79C5D37EC12B8CAEB7328CC87393AAB58A9193AB5403F57F5C9A7C2FF211 +08534F9643B3F9533EC4CC3309D514586FB6AD161D294E9F55CDD21515FEA55E +74304733F23B42ECBFE145702B74E42BDBF0DFB01F655DA14D93E81103DB8E84 +20B8101F8D5B8E3F909B780C03F75539056E811015532BF5DE9007033B17BEE8 +25E9DF06A64D23431D99B1DE541CAB436178F55A0A82271FE970250C4FBD0FEE +35F2CA2A256F93CC0327D7FD9142A868C4BB817EB2FF2E7399F001079456F3F4 +36B05B6772520ADD3CA3C4313C3C454FFB368D0FAF62D81F97DB55731F447D2B +A19966C48A53D5885A383B6B1E30F1E2C0185E2418C387935BF5A7EF8058C1A9 +0036B3F38FB4C6415037AA3E9D406DD37DB59EB80FDA5D9F8D6B03E176F0B633 +3F33040635B7C256CCD4868EDC88379925DA0B93BC0CE03E23D3D480C005AEB0 +6D49C9F9853785AF6F3BB50765D674A73AB585E72888F2CD66F714ABCE2A50C4 +5EE528EA125262432AB7F6EAF963307D0D5EBD65BDACAE98558ABA7D0BE48C28 +27FB1A64F779E0B9C06FF13F00A995DB0E9C2784DE9C48EC873AEB560F3EB3CE +5C09D9C28FC9BD3B49B709BA8821B4A0454B4B6F061B449671F59283EEB003F2 +62A9EFA38050ACA655C6D74310930204EE46C58553778C1D29F29ECC271F4733 +3ABAA09100A9F2E0A99D53CC02DF3169B7FCE3FA7B59BA5C0FC7327D55CA9339 +732308498EA899BB7838F75B9C8E99BBC85F6F63BA4F1AFFE24B1AA4F90FA00D +E007CCE120F45CA11D70A6E06D2CCE6BA22BD02F62DAA5186D5CE8B8EF18B469 +D80E9825C926611AD47ACBA8EF0F3D16FA308414D6AF95E55282F25F76A975E2 +A3537A7373BBF7DAD0B8B61CB772BD5EA3659CD0724E4E187946B596C8CCC11E +9D4674246EA6CDD60D64534BF0085E4250837E57FCCF6DAC3B62419D9AD7B072 +05FFB475C87B4D45C067998EF3215A9E37FB0AA796F262D1786754D9E913107C +22C8BC97A0E73742F79D6ABD2C66CCE64C6C9AEDA81CBFCBA8D1C016F5C7A931 +633AB0EF0BE245D0931E53071A86003F9837C142E53B3D4FCD0CA44E4A4BF046 +CDF448593D2D85F7F07B1274544AE57960A6BFF34EB84EFF3F7A687C634A1A33 +FE97FC48A5D80C7831E99A3571DD2DD5796DD61BFC05F5E4FFAC100ADE9499D8 +0361577C89D25A4D337EC77776C032F6FFEEF4826E82C52E6D1702979ACF2A62 +CE5A88421A084EE624123D6E6A95DEC36E780A9EC9F1331FE1F5E9D954667DBA +4ABCEA60ED770E3DD58CB359ADFFEEBAB9790E91929F05EDC38FE7022574D7EB +22E556404AA74516358D5B9590075D9C1FE57947CBCD4C7EFF1C333C5457AF84 +992A754B0CB4766B0F5B858127A1B61BF2B3AD62683306993B396FBB0DD079DE +96C84E76106A2B476AC4EFA40880EF47EAC0F5E858DAC1A9B99F8EB181B989CB +03F13D9AC22464ACAB3537DF786E510A45AE7EA4B9D90A8332B3E5ABEA3999E8 +AEABF59F9EC0FFFA7B7F78B4CFB6D77BAD9677D9AC71569F80100AB7A3B8AE9B +E862807D87074D5130061E9C02757006F787D6B49AA625A5BDAA921005BA4F85 +5EECCE30FB3D8DF4BA6166C8A89492DB62224A0C29BD564A1244691429FDFD36 +F559BF5FB22FA888F78599357D0E723A692C9B349312A96A8C75F49E43247104 +18F43A634199B92EC4E7013AE4081786A8D4939B7318F416CEFD093A8D8634E1 +CC10D8125EA0D2DC3CC756FEDDAAD8994A969E02D9F6A835403077EC77D2FB5A +E4E1C2B2CCE6251A2CD94487CE5A4C1F3E7DAC460E764A140B9FC1E4085ACBC9 +55EB562779726F89A67570E2FEFA2AABC0E6552D33DAFC08D2719AB8B98ECC3A +05FA1C90E3498322B8B26E02707FB330137E898E9E506F7A2A6DB52EA23E34A8 +B1AD13D1A5D0A91F40F8FD9D09AC48DAC8B0A3F3D6F5F4716B4C0AB3A2F002BF +2BBD53698333FAFAB8D3F80E05B48A9C3B772750B4EB3FB8DDCC514DD3E2D01F +C17205B08F6904CED62F6D07AEFEFC0C9B2E6BE85F7FE444B6AFAF60301779B9 +7331C94C1F8B0001255C39D653E14371B08678978B4794E7ECD9CCFD5D934D9C +4E3E8BFFE9D3D1C077E9A1797078BF583187027EEAC2F99197211CFFA3A65230 +4564F3552334F1CA8BD9861F640D36FE47852934C4264F3673A582B50290936C +8983BD4BB9BE067F6AF6AA8759AC4A8A3267FD6393CF9456DB382F2F9F3821D3 +C0579D91DA414382E200D05621970D3E5516719C3A0572249F8D5371877C0434 +42D71D6FD78EA7EF4AE676904FD9BF23B30568108DC67FF8190ABDD587FF04D4 +A55D3CEA088DD86DCA852E6A0F9FB33B6EA2C3E751CDCAC1E210CBB78E83A785 +146CBFCD3C7DB518E1D78892EC4A21824902A487E9A96E554088A2F9F596B923 +0A624C6DAA4A20E73D3BD5556DF76D4906FEE9D753451B00AF1E1D2504219592 +50DD2BB41F053A0BBBD09CDFADAD67A911EE31D678587D716F5D2479D21CCCB5 +EA00723B60006291E5E2947F0A2CCD10AC4EF0DF4000A1358F3285578A0791C3 +7381D1D0AF81587D700299DF0F4A5032BE80665277C8999CCA1891FDAB8D3E78 +43A024A4FA96360B626C007D973503D0F20A77084D5A96510265E74517B52EB8 +3CF1B8546FFCC2C23F85122E55889EE0A83C7E127C47270BED44492624F046C8 +6F9F742AE75AFD14F6EEAADBB45A0EAFB24F63689919A2C3455BD345CDAF3983 +DB46A0FC48728B2B88A1FDB39FD2B8AABCA784AC5AABC91F7E2B549F5F3177C9 +1FBCF682F1A38E4723B9862FF91AAF3532A4A27E9E0A00CEC702268707BB1864 +B208EAF9BB9814B69A8A8075D67A4F4AD8113B1622FE60708DA5AA3AA60E428F +C0981BFB2449F4A16E259B56F9888FA6B2365EFAB0DED5569B0744351B71469D +4499CBF7FD02BE4C6A85CBEDC10DF237C85635A9C1BBE0CAD05428D5E2C98D65 +D81BFB7DABF55470812E118F3A7A0A487D6D2E07B6CD4BFEE64810657D33D09E +89D59519A4D5AC86B9267AA05AD1014F83D2ED254ED9DFA1915B1D33840AF670 +F34B4E545CC477396EE20C51FC2A0A8E1D57E24495BF4D09F9388F9C601EB560 +BAAF0E6D0891A6594231ABD3D6F3C4F795A6217876A3232EF8D75C0D4B9DA132 +B9E717B868B063DB6E3B1EFCCC3677CE2F877073E92FAA8F850047E59C31CC66 +7201265071FE53EC268F8C93F4B4607ADDE537E86226B6967AE2A544F6F8DF84 +118C0697B40670BDC52F52DE8E55EE31D853AA2DA391FC9CC811D3714DAF5FD8 +A79944792171289D8E0654950B3C67DFD2CC95AFB41BB8C31C5F09DD2345CA5B +3B878B3899996F1DECD4C9A4DBD849EF0A63CBAB4FD7B62F5AAD85EA3B6BD2EC +90D607B4586EF50BA66E01BE3C5CDF4875B00B7914FFAC3DE80322D8527A7A4E +F8432E5141F486924613438884B3D8ABA4BAEFB68955E4C09DFC2F513396FB9D +BCFBA400069341376AB98F3B7F796F8EA7CB1855F7A04BB140A2B7CECEC7BE80 +2A5E0250FCED075C83B662EA5CDA1B627DC8E5BBD7827218DB6C59F71A57B7DC +3AAA94ABBE8A7E722C3557F1A9F877BBC69ECDFB2C22A9B8B2B0C51DBD9FF2C4 +DD16A00C9390A19B7320ABC521A89705E22E3CAAF1EA39524DB1B10562869AF7 +9B019929A5C648E59BCAAEA76333E52EBA03B167D518F8D955D90583459E6611 +3DA6212756C819C613BE40C29A58FAE9835AB409CC660A87D2FFB2CB3214F750 +4A1E189B0E24B0B541496B6C04069803F7F8072F940D3B010DAED32243220B27 +645560A3F713ECDA4B46F34E34D71E5C7F459C5DB5FF8F34BD5F768D42D3C430 +3ADBAA347AD11143C5A8FFE9670D3F40D34148AD71E2677ACBC4C5E70AF58AA4 +AE728F096976C0C2BE634219B3945E16AFD291559C41C4952028934352F35FCF +21B6BFEFF2035062B4ABCAF40E376D488C219918005400C63384817EF68EC86E +20197D6947936AF736FFFDEBB5E33A1135226BD652A150D843D331AF77F0E649 +0E39AF1A6A9A41E0B8A93301E49C2154D85B74DEBC4DFF06C479F3F51305AB49 +632726607B5501D2CD47EBDF98A3D3A8CAFBE306E83E31798921B5691EC160B3 +300BD035AFBEA931FB34DB96AA0B51EA5D610F59DD306A876E81643AB7835BF7 +3335B25A1129CAB953980E855235ABF5F1FC13F162FB2B2B9CF90F059CDE8A48 +4F938EA5EA631E4EDA7A63D91281F5C29B282570FFAF9E569C942B7033AC8FDC +C6CFAA4F0DF4E7C95863EFA6A297461DA2E911334E42CA98512D997B7F0DEBB5 +DA585E355646FB4E7837297EC08733D37A9F815186740D8439521A160DFAF879 +E04BE8CF8E55D7D29F1753656F86F019AF4C3518762AC60F5A2952BE80E59178 +A6EF753C62A13680CF33F75EA58DF1D1BBD5DE332DF6541C7D5325AEA29C91D8 +6075DDC241728CC84F602C58F1A573F298032912F6273AEF60C1CB265138B245 +7FB6135D21C8537946FBFB6315BAFA89CAFE4C282CEA4C1DA6C98CBFEDB3224F +8D898AE736EAB91616CFABF11C57AF0C3BCB07AED9AF076D2C48E482EC258241 +23010ADB742A17545996263B9F7BBF981AE401918B286A66EC04BD99C41F7761 +28D9A8DD8CAEAB77B0F5E2ADF542F8EF5E4C0A59D85D6643F497D1B4264B07FE +1F7EE3C9CCB90B950A548F82FFE5B1126A29FDD09F7AB934CC5F13ABFE59DA95 +FAAD71143AA259317A0E2903ECC927BBB5DB5C77A547F3E8000E491B788FA1E0 +CE8F19C43AFD981B13C5FEFF1DD3ADFB114950E1E30CFFB1239FD04728D8B7EA +68A7F8A58B5D09397115E6E74956B8 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: SFBX1000 +%!FontType1-1.0: SFBX1000 0.3 +%%CreationDate: Wed Sep 12 2001 +% Copyright (c) 2001 Vladimir Volovich <vvv@vsu.ru>. +% See the file COPYING (GNU General Public License) for license conditions. +% Converted from METAFONT EC/TC and LH fonts: +% ecbx1000, tcbx1000, labx1000, lbbx1000, lcbx1000, rxbx1000. +11 dict begin +/FontInfo 6 dict dup begin +/version (0.3) def +/FullName (Computer Modern Bold Extended) def +/FamilyName (Computer Modern) def +/ItalicAngle 0 def +/isFixedPitch false def +/Weight (Bold) def +end readonly def +/FontName /SFBX1000 def +/Encoding StandardEncoding def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] def +/FontBBox{-229 -316 1737 939}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052BD0CE60552BD63101D7CDBEEF5B11 +69C468645FE4ED1AF2541AA0770C1DCF81623DE0ECDF49F2B522618F650CE6CB +CC8C21885DD61AF8A523AA677EAEDDFA51A1F9B1885EEE0456196D634E04EF89 +F17499DAD982502ACC349B9EEAAE4A71A73D1147318C60A8BAC10510DE90D8D3 +F46E47295D27129A5AFE0C65E22BAD10D06885A2EE623FF8E1D90287A083E00C +EF25195F68A2A98170E4875AA1B1ED6A435C02C357D527BF5BAE9F3163F8850F +4267F16F7320BDD6979C2F8C665632114CE1D7FCD000F5FBD3E05848929A6E47 +97361D305E2B3EF0D3289006D6D4A92B4915A07861EFFD2EAD6D0E44D7F2BC50 +0393AB5D4E20487C48DB19B78C49FB68EBB7ECED723428C77D753A22B7D69614 +D9508C82BA58E2D874CC9F68A68F2A40B655CEC8A6308B67DD6ABE39F97FAD75 +03DA383F4C166B7EAF7A3ED4BB7FC5E6B5D2832CD0A6587B17539297FED807CA +ED127D2F0B4D1835845D8E3FA03981EE7410C5EDBF3C000051861E7C98A1CD97 +D8CFEF6B875885BFF5832E8FCD91B4780EBE0E908E59EF5D3FA8CC9D67787EB9 +9FF5335E365F2B9EEE281ACC85039C952D301529C2A7B52B3A174115FDBB2268 +D98A22B25EAAC4F57C64C0C1DBC34B0FE96C1D9DAC2B7FF6749250D8502C5C28 +3B8CE334C9E727CD19A3AB4FF6D3339E7E9C3F43BAD7A78D4C7113CD45530995 +E6A70147ED0D3BE8A22B346818368B4AA3AB2ECEBDF089D4134F08780B4CE5F1 +D96EA7AF6FC84DD5FDF8C9EB273059C87A568B0E6B0D41B1745D6DB55C621F11 +5E7797466B74ECA431199CB2C9D974DB020DE52EB9C39B2CE83FEEE98D229076 +8C6B6237B150DFDDCB233858DB62479384302233B6472BCE3E34BAAE8F821E9C +4B6ACF55A88DCA7FB297973FA132DA117E7DE71F434C49F649C3503F0A523806 +D96939D6D04782E7062DB0E069E7156DE7C7DA1E413CB8575A1FACCA04679230 +6F4032B42CF9083332D26AFB6C8E3D6930E9E7AAE06FD6BC3907CE4DF582F592 +96379AE779C820D54A857448394B86C9BE2D4126610FBF1F1B2F374A2244E21A +2B42A9DC74A983963AD571173DE252CD75109FEF87474B052B0CCEA27C458CA7 +BB1E9CB1D3B2959532D51E9AC040EF3CE5D679AA2ACDFFDE672DB5CF41D58F8A +3786ACED5AF7463460B0414B467C22C08F8C635AA1EC6DA06B74863BD647F308 +2B70770DD0A127E16CDBB6D2462EE400855189890440CF05D5AE4F5D461B609A +00F50A56A32427703C2272187E904E982FF9C31F7A82E1D0E843B81EAC0F6734 +555466FFBF205B862880F752C654963AB26C6BED171301ADC1A5B1F05D0EDA4F +DD952913E8B4D18EBAEC0229D1CDAADEBC1F64C2D9355172346B6A73A4466B26 +DB5E3B27B69291868237D74EEF1577F24EDC31431572DE621E19C5260409FBA4 +16102F83081A06DEFDC3D19C90436160FC3CBEC2EB1BB1C8DC65235F1EA754BE +8F665657C97F774E174C189F281C5E79B01793F45E26BD0BF8AD9704552EF609 +57868BD0E17E9A229E759BD8526399D5C30144D3072ED3620F2EFC3BC1526710 +54673E898B8D601E711EF054DAD9670047F88503418DA3E9AA8D78BA655B1C18 +40EDCD9B7A5AC033F6B1E9744D32AA75C87F9A3ACE24BBC3E683DE99B81B3128 +8A2D384D75D4A99B7BFA298E5D64216C70220F16763DB2D4D1566D4CD4A07812 +76A23F7C26E9FA324D4DF532B600A24686CDF900AA0C9D9FAE7FA6EA76002927 +1F2DEF03F4B769A688D193A866F5A44BFE1E3A599F0FAC1A10D674BC0BBE8C2E +74EA1DC605B5F9B9165F9B96C1C3BD82B23A4728AD042F54825AD91AE6AF3431 +EA995BEB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: SFRM0900 +%!FontType1-1.0: SFRM0900 0.3 +%%CreationDate: Wed Sep 12 2001 +% Copyright (c) 2001 Vladimir Volovich <vvv@vsu.ru>. +% See the file COPYING (GNU General Public License) for license conditions. +% Converted from METAFONT EC/TC and LH fonts: +% ecrm0900, tcrm0900, larm0900, lbrm0900, lcrm0900, rxrm0900. +11 dict begin +/FontInfo 6 dict dup begin +/version (0.3) def +/FullName (Computer Modern Roman) def +/FamilyName (Computer Modern) def +/ItalicAngle 0 def +/isFixedPitch false def +/Weight (Medium) def +end readonly def +/FontName /SFRM0900 def +/Encoding StandardEncoding def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] def +/FontBBox{-196 -322 1502 937}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052BD0CE60552BD63101D7CDBEEF5B11 +69C468645FE4ED1AF2541AA0770C1DCF81623DE0ECDF49F2B522618F650CE6CB +CC8C21885DD61AF8A523AA677EAEDDFA51A1F9B1885EEE0456196D634E04EF89 +F17499DAD982502ACC349B9EEAAE4A71A73D1147318C60A8BAC10510DE90D8D3 +F46E47295D27129A5AFE0C65E22BAD10D06885A2EE623FF8E1D90287A083E00C +EF25195F68A2A98170E48759F267FE330B57DF626EBF73D2779A4A6B462AE6E5 +19E5878939A488F2FE1094A76925CD24DAD4573AD3CF34E426708CF06E7EBFFC +BEF5595408106E2189F418D17AD510ED5B6A528E8902AA3A5F0FF52AE3DEAB07 +32F06B63E28BB88229E046F4FF8A356BBDDE82DF2A197F2E26CA00D5594725A1 +83A89A36487EAAE1AC312C929CDCE50722FA6C596C261E4D78D6C6ABF77F5CCE +0E410ED74287A0F201140F8D9674A7AC585D3CBC72CCB824F9E1CEBD08AEDB3A +A4015CADF471F7ABD9B0F0AF73A8274FD441BC1988A61799856E4770155341D6 +516CD0E25BFA59B67AB7E0571DF3F5BA70A82798D4CE6D9F23F52CF97CA370D5 +FFD6359959DB68E52196D89FFB84700E1CCF3E2E6A52CCB43303FEB31F296C29 +34B019803C53D8D5DCFDE72099BFBA29C176DA3AA9F20106D6AE6D530A490578 +AA65868A24DD5024A28C6E372C33EA2F6573A6592AE985F03A99884CCF7CA096 +043D8D33EC0550084F5D85656F821D8E06996DB3E47A7C4E20CB4FA8F9A1FDBA +8A8D5E42F16B4FE307D36B86A652C196C9968BB436C9CB66C9CA27658DDBDFD5 +28224AA3A9BDE394CE703771433B4BD8B2867327DCED10CD89FDAAA5663DD04C +0F4EDA21B96627D495493471C6F0A2BFEBFC2951896E3A52824E1B82EC39B16B +F11A8545D54E1C5AF4BC701B47E1D8D4DB124DED5732AA9A94A16B44FAC0B8D9 +3A726784FBD263820B6DCF6ADC98A5662C1DE90DEB617ED5B7D6F728DCE0074B +7DA3EDE577EC66869BDC6D10A4ED23283175DB32F0407570803990AF10B48047 +39898B8893B5E2465C61DE187F762ED4E8577B217C2DA630FA3E70A93D368F8A +1715026139E79E419A5B7A0C017F16CEF082F0FF1D9C196F9E2B9DE1F8475E0F +7B50A348BD2987A45AE742E1769D60475F75B0D8D85732DA28DF03365091EC8D +EA4471222B0BAC8739A7407E3687B32BE3388478CCDD5814AD3F556061535199 +A8147612F8FE12D52CB002A2D66F80014EA3861089AC8F1622266546EDC9CC8F +984BC14FFAF5573603F11D6B6CF11194DBA8350C9D1497290B727E979BFE8FA2 +E5348257AFCF78B5AD0127ED86ECF4043D63503CAD6548D0F2F3D145731C69CC +6EC9CD8DD59FD1C7F22843ACCD63FF658A8C58C74B40F86B92F013A73EA21CB9 +5A499ECF13E311E51AB788BC68FC7BCFDBBF13AE645E83C542A3B026EB61CB15 +309BD27EC19C8D31C9300BCE1D6544668A511FEE990DA3A11225ABB2C22FC7DE +D064B45FB23D9CB14BB0DA1F2F9DA4C2E8D072E8F70CFFD833BFFF0E511BCD47 +A16C17073AC9D62BD413CEE14A9BE91B69F98C73AEEDE6A3DF245A673DE56F0E +0F1C719564F5889ADE60EB828698BED9792557A26E6E104A080B995B8A2F065E +EDD89F309FDBEE7B1B280345683C7598990B5288EBFA21BBC8589E6EE2434924 +8DBD3A97ECEB0B630D6D07846FDEAD673C861CC4EEE6D14EBFB27E2C3ABC32E6 +4EA6C0EBD9E38F8A4FCF1CBE6DEA027C700519410D86F3813394F02060A51033 +30DD39F9308332B7A224A4A4BCFC487D0CF227BA3EE5EB69F699CF432658B880 +F98923E90E9529CCB0106CEE0C0E07DB2EAD8BEE6BFBE255AD609AA62E763B13 +816795FF5F6BCEB846926337B4B8A3706DC71C0E3903C9A02FB6AE1647DD403B +FE9A7FB706EB44130268D5ED62D967B847DFB274BEAE378AA9B6FA0D74A025DA +1E80A0027CB712C1049E230758A2DE86A7E5A86B8B6249A125B20E374D194F98 +4558314A256C554C63B8DFF7822A8B47E423ACEC79E8DA15A08AC4E053D2676A +D74CF36E3FD0DB3A43EA5F06F9BF790EA9B56459BEE6955D3E4F0F4BCC7AE2F0 +68302B479C23EF642100EB801F931BABA395984CE73E67169DC41770B5F7CCE5 +B766F5D2B487A03399B4968C65DD95ED8373F7A7AD84593AABFAC53E5F6A86C0 +D8E5730E808893BADF82963F203BF8846B57ADCB5A230B890A316E4B81195CB1 +58677203751B981FCBAC7B8A6BD1AC40266BF611A5968AE062DDE38C54BD8201 +4D86233C2D47AB90B928C9BF8699D1A13E7D573ED08F73B027856BC96DC3E56F +D29A98AE4EAACA821ACEF9F9B04DB72D662C790D17BCBFDB3F8933AF12D1ECD7 +18BE4E606081A106519CA3BBBA8EFD1F8CF34144B09F4BD9445CF649CAF72395 +712B5F85A86A1DEAE13F908AFE15463FB71C01B2C65AC5DDBDFE1444D5B30ACC +69E0FD328E021294FBF621B462CE1EB6FD26A10AEE723E78F3CA779E6B6A7E15 +FD01219849B6497FA6DB4943722AF79001DCD3F9DEE6E3D1420E455A08DB57D4 +5E12D0E2A9D2105795885557A1811C0009DB48537708D9DCA34E91549C56A3D8 +AE8E55606CA677643FB82F1736D55A53F94F734BBCBE96D74CD4152936C2184C +36AEADA9CB6DC92F990D8AABCC309FEDD4FA497D23E9C78A27595FAF70C64C19 +D13699569928B4DA77817C69EDC3C3A9108BE9A86888F724105C3344EE80F36B +650B643B2423BF5A5405121678BCA02DC9469D380C43040D8CD86B76E9F2ACFA +05ABDB8FB50D9F5293B2C7BE7AD027D53C3B70A9597CB66F5CC61AC7F19985F9 +4EA8B1EE5047D5A37CC93E3C704AA03DE8B811E081D3B0B0BBD26237E283FEC7 +94CEDC09F9077349C96C24E8D18B85A7B5AAD82FE5688E208064BD0AB6082ED8 +2935AE602BD3DC8A877823505DF922C8A8E5A787DE997CE19D3DE210A1A63ECB +F93355E11B89A257114B6A7F5AE6E3A6FEA87C468560148549627AF0285C62CD +E874E189CF1F78C4703E41D7FA628B86507E9E71732DF9726C2DEEF841B74A60 +9C7444D1D2D813AB4366AF966589C1EF16030B59A64029BBB64BE415567AC1B7 +B06404E61479138E8CF1351E212670DD71D2FCA8B192D0F6BFD1AC6EF8A1D771 +165892598B0748B26C9EA50163D375FC63B281459A2519D59B1E037EA930F21D +F005329024B77548F1EE51E864140B729364F831B26C86ABBAB08E030CD43125 +DC82E9FD230281E2EE9B0433771A8A899D8366122FA7C4D6C1C00BB52ABB6EEF +29081882A6BC87B8E5E649D84EBC5B50F0335693231295B2FE8226C328E6F059 +DA7E1C6E7A336E30C092741BA7F80FE6D3008E70A27C86889647B411DF2A995D +D0A6BBF886439B13C0CC247210E750752F8CBF9A743B0CB701B9A7E61D4FF951 +32C720F3693D59A2458EE4862D6C07BC2974FD671BD0D4853ECA073DC424A072 +AAF769FD817E5E1564B5EB0C7138321AC39763F966898561B385AF97652AE4D5 +E2480661F7104B40AC6A90130CAD43D0B767BEFC65BADA583311E5B6EE262F03 +198E0B8F82D792AEDF38FE9400C351D86CDB7C52B7287916DCFAEBF60530958D +C202AA5699AB0AF95D98385807D968B84A7FB100468C4529613CD0D628B3186F +93B271E7972AEEACC0F308418DA1AF98A63A5A303C846C383A1C9ACE97B11048 +23F78C49B1F2133C323F865B4E6D2AA1225323B52F9C586FD4F08000C6F00BB1 +7FFA336F406CC91C048711EF040EDBF40E256299F1E73E53505205ADEF48DF07 +FCB02F5D97726C153EC014F2559DAF8ABC7006F08C2A7F0236D0498B8D3264DF +63396ACE48DFD3C79570D37DD24FE745496C107D365CC95A38617E9571C1AA63 +7B4E4E7AED216B60BD8E8DE59349F07C18994FF414A09045B9BE5281CB07EE02 +3427A92F9CE85DE54F75000CC9DE58D2EFEF8E3D81853E0BA1CAD18D0139CECD +A56F30DCF88F5999DFF552EAAE78982829448D5300BB08D9818F14A9D458A871 +9BECF2F91476B4495F9750FF9322A44B38B0B11741030844DFDAE96D5CC594E9 +01374DC11480BDE1C823F1EC06C9C111953CEEA1F61950C05BB9FE5B9F19317B +D6BDAA8BAC3FF70DFD0B03969BA2F22612B4BEE355EFED7F84DB3BCB2AC04684 +8E3DD50B382998A4D6042910DA2DF65070564E6C18A2C9EAB8C268A8A3577618 +287E0544AC6747ACD6C9576C3412987F9D1C3472BBF278F7C9B55785FFA7D5D8 +E4CAD2571CACD45660016B380CE26B9807513FDD96D23484DD0AB063DB4FF777 +BBFD9AF095C7174704C62901112C2196C827C6108722EDDA95317EA4E7786D75 +0C09528DDF1BC4E4960791DBB5E08A39F1FC64176ADC20CD8B0E809105958939 +8323EDB1EF54E133B52FC61510D917F4EF01782DD1D4D1EE1927A3BD20A6C76C +5EF6BF5F08A5373C30B5E0A7197F6A85F36884B3640A23DFA6BE42A8B89D6D89 +D9312AEF4C50F66B95BBDE9D3B32994F076D1269C3B619C316E1AB71D7CE20AB +C17D4175328E0E6E8E605095672AF75411568D3890232BE6C15C259AEC31E561 +7CE9D77A93C30BEEBFF2BCAFB8ECFC153031CD1AC52516191F8214ECBA866518 +648D3D8BDC5D7D165BAB011AD527E221050F3425F991BF88A3C88F54091C8B09 +B0D8F00844F8C4605EBE9ADA836C39AEF3FF77045FCCB189CB3131235C701CDB +627AEFC03823134F46BCF7A3BA286143939F28CABDCE6C680F4945A75B985040 +01EFFD4053B2D53CFCAE49A624819A95488DD5A3CC69C76B1CB5E6B253B2CB02 +67AF3E2C0B51AB4A815C5F77E049996FB49464F74D0605FF377C5CC9B2F92706 +2C125BB08B9A0906330212962E94841A533B098D45EDFCB4E7DD1C0E0D164966 +7A5B69615002951E80F571B7450F2EBED560F97BC99FEB6BE21270A2FC838959 +D75A87A7CCAD1EE54F8669DF366D3E114638BDBBC18E2728B70126C263CAC0EA +C2F99A936F790E8B4CB06F4227DC96828162AE88FCF72132C6912EFD701E3E02 +2AE569F73DF756169A76CC8F3BD0A976E2D25DC0B7FADD1ED132230D6C539D99 +56444E02C7B6C98B9CA3558B105DD2EE7616669DD6BAE28F83283BFD4D31C6DF +BF53361CF3B055209688AB8E0138F2860266852A3DB40FFCB0E78F80017A32DC +F5C29CFCB650858D06B1442F8C580C56911A4F84265709195AD1DAED7FC1DDBA +2AD9E035A47F01853AEF9D53DA94D7C0D70280A7042968A144019E894E4BF860 +01CA4EA354E74DBBE94CAC3E85E5EA545AF1B4C5522B15A07E9ECF4FE407287E +87395978F11AC308B638A4C935C8D2894784FDA23E7A3684AA579655B657066A +DFE881CB373D4934364E8DB22C5E531A678FD552A2D5D67B095EE66027673F40 +E02FAD91EB50B8F75DC9500B9BF23C4C6B1B47C24A56E0AF3F99991447A1E7F7 +DC36D8B558C00D9B79C37F16FF316FB5446A9665CE151D210F648A0B93540670 +76F88B3EC719E230FCD0A2331D1E9B24DF6AB9ED7C85272EE765C359679764FB +DFBC0C34193E9439EFCC2B1AB20ACD452F67318FABE14467AA84BC39F8E13679 +7BFDE24078C8D01D6B24D37D53FC830929423A18AF3378762504B4CDE9EC0C5D +329F728669DD4F41D320087275373FEEA3A5FD9DB16A14CD271718777AEF2CC3 +9C62C3854E358D3EED44A41A2D1F03F096387341436E4E6C5484EB7CB4542178 +D6B0B4E237F919152F8D9E86229BFCB8D33DF9AF0D1C7C6FAEB9C6D11B2A3203 +3DA3663044B10987945AFC328FE6F40F1E05096B63C5927121444FF89028B03F +6EC8038BF1FADC240E4F7C0F29D16F70989D63440B66EC8B773C12A8F8C55D4D +2E9046B3DCD915A3C53E9071E7DEA09C2B22244FD50486A53B96E199F7C78ECA +9E22092502FED1072C263D861C05DC4B6B73885E3AC77CD9B80F38A49806D776 +571848560BE3E6370F85A4B8D8B01ADDCCDF489CC6FCBE00A4EBFFFA8AB2B39A +00DE9EF2C0573B375CF75E49725A1EED4392F8D780F9CB2509B6551F60D249CF +337C0EABFDF41F56AB44A01ECCA5D14C632C968C9361BE5E42DC9C42A7399B92 +F551E52AB7B7C0355E7F1B35DBBA45FC96AED455C93DABCEB8DF4FB3EA2C40AA +EF085D447F0DDF3AF7CA2489D97FAC2C726E65CA153D9EC6B5E7C71C69E82101 +530011814CA1D634F32260C663899A2BED950BE41B25CA239C077AE34E53218F +B837E7B6E396E0AB49CB67CD43A0683927443CE0E528440564874A0481321552 +0E44FCA5F79A1996BBD7AB4C8E56B08EFBA820D03FFBBCDE090D218B2ABF7405 +C9E6A7DE351875F518089527528EF3F4F7A039B9875F47393186923C5E37A616 +98D10B7269A239F52F58F50D6B38A50E77F656B02B6DFF3EAE8F805D15D84C20 +C73ABE08A2533DDCFAF431908E772862978941F646916C431E0E308517D8CADB +3D8C5F32233104A9F80E163B9465A1B42F2C86A103CFABCDF52A0C87F0577BF3 +4B836EEBD6D957E70FA5EF377C784878759518C8AE7799F35377E9C384E1FFF8 +9A19604AA99CB59E42BEA3B7CA2508355C56BD744D1CCB034B70C51814640FDD +1497802EE753649DBB6117A1B74FDD47BD4F4E78C6F147F03257CE6641D3C5EC +1A9A84A3A6BA2081895138C2DF1726237804FB337197373E3119AB3704F849C2 +316F95BE42F08D47AA3E7934AB8E09F6E413D028AEB7212CA301D20988E7A7DC +6A88F5BD6D7ACB8A14499BA62D73559AD391590675AB907C4F917EB8B80A1793 +67F7DF308F12BD9C984EE6D9A935568443F75E188B20547A9B74D21736FA1CF8 +55063D865B93F325AD24664C9D4B85467ECE18A054078391772A98DBF497EEB2 +2DD2380FBC4E38C0CBC3F1CC17443251CEFE5D7849D734BC9844749FF7C02F4D +F5E66E0643A87E6BE3400B41F28F26C0F4A6979CC50B0EE4C75B3F8CD9989BED +C94649432F2358C8C2CDFDD5BD7F38DFFD8BD31FD90CEE0E95DEC08A13061D24 +AD69B436077DD39A39525BD652ABFEDD8F72FC219C7291C6B3F0FE67C13EEDBE +27EABE615294AE5E1A431EF7D1728B113FD08E9F8A345DAE9F579C5508BE8362 +57E746FA0487DC1879799D0C01F608F4FD1AE5538A2F89574635150C7D0D3099 +371E6AA729F1588ECD60F0E66A4AB04796C0B05D90A5A8231299055538AE87C0 +C4AB4BC1164FBF23EB2C41862105A78BCE295734D57AC1470B4E2C6091DC23FD +6868316364B9FC0C8133A84721D8CC7833598B51D81420F45BB03781F64840D0 +B72AA42E87FD05AF4A75B3DDBACBD0BAC7B2DBA3DC7A94213A35415EE8DE6DCE +408DB7E133600207A256EAAF61837F4FF9CE1E03E7E8EEE843E2E4E40056EEE0 +E6467A7CF07E4D73C5A839F9BBDCA90CBC58D06767918B0BE4AA2722A2768A6A +32D8509F3E3C080F78CEAAC2E92F4608AC9063FF903763E721F9CC044A1714AF +FC5A5E4B14C74D3901F119F04DF26E064FCDC6E29156E0406C7A9B52E1643116 +E662CAC5F8B14B952547E92EF479D9566F7DA7B06C9E2844A8E56C5B11EDFADB +FB9C2639835A0665FF22496D4B261AB5EAC44985F2B8E409E73E461CEFCF08FF +B050674B58E05684E9A79FE1FC31E998D9344F025143778C98161F8256991A2E +C97CAD29745F53B387387BDD3C1962ABB39D9BAD046ED9C554677B7112BFDD1D +ED4092B5D812332F4650FA123C4813ED0274DBC3A845069AFDED9B92ABE56B4C +B2B348F367B14FFF52C3AEEADF5FA2851C69A341B418C7AB2462EF5004F76FC8 +3D45B9D3E8B265EF4A41358355DFF2D4DAECA436BD408395737188974BFEBF70 +AD9543A3ADBEE1536B27831370A5C8593A2B7DBB1040A41878FB037EB78941F9 +2320DE4402EC81EE1F89B4D048C81F97A88BE8780AF14EBBF4130710825FFD2D +739D352143F5E2B9EE5862A24A67E93A161DDF1095B3676EE853A4409C2E5560 +7D7B814502D167C1EFF5F8CE100A807E8B596F0E61E8D325E4F0660D6F0E072B +D8798568C40DFAC99FEBC2B0D19282375E4FAE1C5FB74B5913C87DDFA45129F8 +8CE783C3A191546D7C03D407DBF4E83C8F434B5648961F74E75B5267AF360854 +7BFBBF6CDADDC56C29B4CA959785EEB01883F62FB1517B74615BFF5B59CBB58E +E2E9E0DF6DB12DDE4F5AF40664D87C5C1935010F2314BA90D65E9A64F8E9E6A3 +28BF57F4FC9D8B98D16F60B7201B996A7C66E0B2E15E8C7B66094DAD9B9CB526 +47ED165AF16EF3189D7E2557E4B86194EB2609BB2B9692CC6C28F085E729BAA3 +282C78EE28FD1B2F57BF1BA48D07852E2B840CBB08F461991A79327D40BF0EDC +82F0E602F640B773C7627EAF7A19922B4B65FD1EACFD67F58BD2BC328E633FCD +E38253B7E0D3E8863B2161664E82A7707EC346530E9A0828FC2A6D8B6284C9DB +4B027F9895AF004AA7D07DC68D87C2B199A172E0551A37C55A715742BE83214C +A4BDA3F57514891FD61D4EF00A7EE360511EF177419FF97A7BFE63B5C591975E +184E3B7877753704E4C39F6C46ED173F8C4EECCCB01ED50FAE4CFE6395FA3F54 +FC400D57A53C2963CBBEC87F96A585940FCC74C45DDE542B97C7C741D1D24B4C +DC6D666CD1F60F0A096484397D45E7F68DDF09481F93912BE4F9EE5A4ADF0FA3 +85697C2B0624A0C2C0EA9AD0AC601B97C41B96EC10F055B6DE1FDA80F7D8C5C7 +303119298ADB6185A4DCE8AA40E782DF8FD0F9F384FBDFF0DFF458DED8D8743C +57F3367230A51B399CA9696D4C3C7A5CB7F809B51C753F227A25C7FB64BCEA12 +93C24498C4FBD0A7712ABCC3F6091AE21E7D3D37430A020D9A407E1E57D1119F +0DFE3379AAAD3B20F37E8DF818B75954045FE68D90AD698A57B3875D882E82A6 +513B7E770BAC5694D088A62506D09B74D9E1D937EF5084B5F9C5D739AF490898 +A837B20A781FF0792E75F63756A334C9ACDD59F389D357685AA0D659F1EE8103 +139A162D9638BD7E2A8D5F50CE1674702C3A59AEEA5C58A595377A0CF84226C1 +74996677ABD3E20D27C9AF84A3B09E3BF073144FED6D114FE794AFF63471890E +3AFE741C6258C821D77E8DCD3F08AD8D11580B8730EB6489FD40B49AF07AAF28 +D859A8DB3D672668018FFFFB9FA06EE71BD8C24516FDE6C6A13756E93F1E7DD8 +7A764008B31214E0DF6B79EC022F0AD1EF6861E018B0847F3D994300CEFF043D +F91CCFCF1ACDFFD7A0712B2173E814586CB6D055B89F150C7EF67B62D346AFA9 +770DB3104E46E66217D98EDE2BFA475E0180490AF65DBBA3BA11895B14F2858D +3D1B4DFE01092FB03BF9CE1A0D432BF31C9E7520C01FD707D1366F2D74823376 +46210F44F0521190A4EE3C0F22E3E700093C25C0D663275CFC275592D7D9206B +18B91167663F8C2BA19B1E43F5A5C3750E55B3157D2AC53810088D33169622FA +5672A9CD67F2FA44ABE91B3A47A98F054C8D83D72C702B121CEC046439073854 +F704D7D8B9E4D4A7FB7B49503B3C76B27A45576E8CE8A43918A1B2033F71D29F +2C14D0B612697DBF00A180AB1183360FAC1D9B45939CB36B20330AA232561583 +F1FCABFEF3F797217AB9A8F76700607469F44CFB2993CB0F680BB526FAAD4DCB +66C80216B8EB4AF7416374506C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: SFRM0700 +%!FontType1-1.0: SFRM0700 0.3 +%%CreationDate: Wed Sep 12 2001 +% Copyright (c) 2001 Vladimir Volovich <vvv@vsu.ru>. +% See the file COPYING (GNU General Public License) for license conditions. +% Converted from METAFONT EC/TC and LH fonts: +% ecrm0700, tcrm0700, larm0700, lbrm0700, lcrm0700, rxrm0700. +11 dict begin +/FontInfo 6 dict dup begin +/version (0.3) def +/FullName (Computer Modern Roman) def +/FamilyName (Computer Modern) def +/ItalicAngle 0 def +/isFixedPitch false def +/Weight (Medium) def +end readonly def +/FontName /SFRM0700 def +/Encoding StandardEncoding def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] def +/FontBBox{-203 -320 1628 942}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052BD0CE60552BD63101D7CDBEEF5B11 +69C468645FE4ED1AF2541AA0770C1DCF81623DE0ECDF49F2B522618F650CE6CB +CC8C21885DD61AF8A523AA677EAEDDFA51A1F9B1885EEE0456196D634E04EF89 +F17499DAD982502ACC349B9EEAAE4A71A73D1147318C60A8BAC10510DE90D8D3 +F46E47295D27129A5AFE0C65E22BAD10D06885A2EE623FF8E1D90287A083E00C +EF25195F68A2A98170E48759F33528B839DFD4B92DF0482493852C44DC635E3E +0E29551E072F9AF208EDBDE681F2A25022B9758023CEE66E71B499EC03B0DCB8 +776788D7C9EEA9C8A55C4051AFB58C8580ACF5C1E76AA745AC43137D7FADDCC2 +ECC373F673B9F896016BAF3DCAAD7A1E982A9A9D5F459EBF287B057484AC0344 +010753C274C38A6704F869833E51F45F91D8FD54CF7F4EA910EBA59783AA6CBE +A5963B4E5E41841A8CC0734ACB9679EA0341518770ADD726DFA8DD26AC8BE0C8 +93478DEE80AA4676F6E5451772348BE3F3242DBF7F727B6CE01BBCBB0F6B6CD1 +097F6065C56A9DB11299EFEA04204672740C1EAF81CFEA33A414C8A3FBC097A2 +789BD70B825861F9977FE1F2C556C2470E710BB50DCB709DC41C337F18B9BA95 +983DE7ADF0218165DFB1FAC6389F1FC446413E660AF4601F1935AE3801C1ACC4 +9A2A696F645918A8546D5C090D0F9AABBC99667D458EEDCCD0CFC60FA74C97AB +D5D3C05A769932A1905F17170A86E307F730F17B7CBB77E583D20DEA14D76F02 +FF9CE7599E0DC09CAB37336C3D6DC6A91510BD76E458F2F009E24983EEBC220C +572E997C37FCDA62DA400A703999BB3862B0F2C8BF611DE181A1F6814CCED57B +FEC1F3573C3625283CD37815AB5F9C0C6FE819A83091CE1D5DE3923B1BB8BF28 +A2C22E7865E86FB42E506501C1DCCD2CBA7C2AB4307080693F54A3CD885FDD32 +EA5A81E6D7C58B6D43B135A8D63611F16C7FAD20D7CFB9565BC85B007D4DE8FF +D9574FB7FD87333B8F00FFA70F271832CE4DCE864095C3C178662263758FB998 +DA57E0414649B9442625ED8F2E3F711F4A871931FA91378F1D3E054934D4FFDF +86FCE519E27F26A8144C7D57622FBE3174F64A01FB6BEDDF2E6FF27F4B23BB20 +B9784BF61030191552277DDC1D0AE4153E4CDF61A014B2A4EE6C78CFC51ADBD6 +0B4CC365B29EA2F4594C16265668EB5E8C6740E09773393CE626A9D6F729BB4A +9784463F90AD6A52E1ECE852D70775F39CF127B912A2419CB005F9C3A50B2DE3 +3B43B3DF9F517A6D2F7CC78E90219471EA02FC965632C5C642A1A2C17FB8E306 +640DDE1AE69B3F433351054C5900F8D4D18CB36C4EED051DAB0765C871FC6329 +57F373159AC49F917FDCE2D64F2604418C986D2AEAC08FC3FB9EF54D834FCFFD +11FD8DA623BFBD5571921C8D75FBCEB230BBA2CE4ACD1D0A7FFD7F1E17471E3F +ABCF3A8113C5F886C67B0D2F337701B25744ABA552243149770B81E3A60ACEEA +96BDE7DBE7E2EFF13DE5B83BCF6A010D9C2F9CB9F513EE814AF7027587020F10 +8C8E0D4A3F0C3CE8A597F2BF67F7AC49B171E87AF4ACA332BDC8CCD4819F6CC2 +401C41405AB4179BA790D1C4853F414DD105E8402AFA7A9CFCE48ECC2D527F33 +3B8AD05931490409D02F3CC1F8941CA9BC0A19E8A3348F9E2974856105954499 +0F98520CB64FF37AE7FBF866535A1FACCA845698B4C033E07E8E18FFA611DC81 +47CBD79254353F36F4E0AF6A8E4D25E7A0656A7ADCC2A73404EF2F397A3BBEBA +973B5D65EDD95E20DF0C11FD9EEAD9DB2057549B55DAB5D72510F8A9111F02B5 +E4A0C6F7FD4CD6F5A578A1B1BBA3E92751BF4083B295E46F4C3CE71601BB44A1 +CB7EC830F322EA5989BEC7CB5D223E526F0D8902D3A1DF2C2B785F8A3EC9DC9E +F6F1E1AD8276E4A5A5274B96DF29D79EA322BFAEE47366095EC334CBF9C1738F +C0BE8A602CC5424CBACCA8857B4DF7C38BE9D03BBFC425440BE90AF57021BBF4 +61047C7505001D61BE66B1A4D3E6D68ABF7C3BE55F7E8C58229E55180EA381C3 +B8504485E3BA4FD94789E8F0ACE83B90FE156D55A3E56C4B5AB4D041064F94F1 +7A4A1CDC8A14AC86DDA6834EF4E9CF895B9BE09A07D56892AAA0CA1763DD2AF6 +646AE3A16A2A43888777D32D687A6FD856FAAE2DE25C9C7B71D30BBACA149CF0 +B00AFA79E4436C6564C3C8774C04B67839EF0EBFB33505DF478C8C12F32A2F5C +12FB86AC6CCF271460659BD4D6EBE275AC2A9BD780CE9FFD454A2F2D28CB0FD7 +8979602EE49524B86A2A957A36890F3CFDAC3872033E6CA7B01FECD47B15CE3E +8740C1ED599F55E134A99FFE63A8F1AB2ED3D21567ECCD4DAEF355F953DAEC24 +3FE25DC85F44E84ED069BE591A7F2AD06A7DF7557128CDF102258F6637F2CFDE +6259FEF86B9163FEB5AC17852E7B8DFFDD0C41E45F7F61CC55F83704400F259C +896B43EC1A43A5E9E3B86B001846E41606DD510D2C7D0BE9DD17E90DAC1AADA4 +63774FBA5BDB44B280133A26823DC5BBB8E2882171382C7E5046F62361978A88 +83921365C7DBD28DDB3CA10162E0A8087DF237C9582217693A50FBAF52406BE7 +1B86D35F23912234DA3D210C726A64A81C6C3C737A290008A595C0EEFC36CC7A +26ABD744E01F0739ABE7C56E0F2ECA5A8AEE0DDBB535193DB8F882B1BE9D7E4E +7151EAA86B6EC144DE291B753BCA732F2E24FDC4CA8C2BE326036CC04718B577 +718330EE8875B34AB842F161BA1A0BC11EE94FE7949D746B5C36CCA603C70C8A +72B15CFF9D1820E68CC0CC63E3A54F87016BAF8C5B46A2453BB0A1DB0CAFCD7C +199D2E7DBC7D8A8567D8451623FD7A4DC61D98D55F11AE5AEEE2C12EFE28050D +9FCF086634B118256214FDF5F7739EBBF62B2836E1944222C1DC54F980A469B6 +175A46AE3A1595A412F03E16A2194688C683D308D7B13FA06629F652EC32AD5A +F9EFE01EE2F7D960BF57C4692316DFCE9E3FBADF4ED841FD5E3A4295B5D7FB36 +AD1D6303DCB61AAB3121C702BF531A9547631B4A9BC829EF1B74D06DF66B16B1 +97D515100F93AFF40954FBD1CE464B43801A35FBCB962C4EA6754905373D8359 +F079840D3F413E146511ED668CA5275403A02A28FBD48EAC90F7C4A07362320F +B6E64530DEA1DB2820BDB56B2EB9F5E036CBC33861018367344C3533332731CF +1D31C1FC1CB6A9E46A291C55AEF9322AA0787B76732E80276DCC686D77CFDCED +41D9055C9357898A0064C7EEA5F1B867DE401B09EBE71CA5DE4E2767AF75E536 +A2CF9A016DFA6EF00BB3F49FAF541FA97A821C7699772E4E916430F66DB9B897 +52E4B15956A171AD001BCAACD3ECDBCA10C2CDDE6A14700276649D850B6E201C +4D2E958EF58893637397AE47CD1B4DA1C520A73527E0F3C9033409F62DC4A7E0 +6D4F44E3ED2D84B5CEB6B88D6DAD7A3EAE2E34233E1388EC3823D030DD8DF654 +30114AB7322575BE392EF94E3EA3004D6D37C02CA2001E5E5F4BE904EABC6BD3 +9053135647587A108FC78BFBD54BBDD8E09F25D875B129DA26C9DFE4E4526112 +28A8E64D8F940E9DD924428FCEC68670BEBA69CFD455CCAAA6F2FD0E2F2F6125 +859100452AAE08844A356990C46BB614AE3C72C7846B5E158A522B5E424B3AA4 +4DD6EE65279D7C5926D1B557C66D1327FF21FE901B3E17A24453CA57F2AF9974 +24CB87D8777787C9DD5B1A5F8632596CB77E73602F55EE3D3ECFFA56DB1009C0 +5BB2A1BC1CBF2D6FBF64BA6446D5B8ACCB4658D0ECD0C142742CC8710E6F4251 +7B8507C8149EBFAF73EB897BCB334BFB0728DA727DFF61B20D59A681931AADA4 +A4C9159A7D960DBCE77385E78500879B375DFA2AFA5BFCBEC5E332DE6CDA501F +4BA0C82A8E45200CAD71D6DE83DC7BD1F33F122EAACDE396251BE474E1CD0421 +AFDF8EF8BBEF1C3BEE47FEB933A6BCA1396F2043E9B5773B78A4F7ACEBF0C8E6 +59D4C6BDA43FCFAFB7BA2A7267DAFA80728411956761169D95A925148B083F68 +9451BE6D0131B866B55FF09AF3BD0656F584CECE76A17151913D7926BA1FCE10 +8B92B759751E10C76409A0FB7902FE1655B33B822830C3B2E11A6248C7D929A7 +82D59C627972AA618682D0AE03DE66B5196C57B881D5D0462B0EE7B1431E1114 +A58D5237009C7C55C4A8621B9643624794DD9F30F6C3579C03206BF002948406 +A8E35B53E773231CE797F60F76DF3EE5C4DED380B329618C3B80B4ED3B0BECE8 +7FD515FD164B90C46081FBD3C2064534F300477C5CE61ECAE26A40DB639AD665 +9502F90DE95A167DE22CBE1645022A0477E269C4D95D6B663A14DB42FC6D4384 +B9FD83FAE697F01367FC98ABDED489AA7158495B3075A43BC855B9C55684E5F8 +1CFA25492A4509171C1F67D2C08E8FB1A81D6663AC4B028833926C4F52F45A28 +00E87A58D2469CA423FDF2255B0D45388E67F0AE516B72E82AEFCCF76972E049 +2600FA8EC8FCFD3FE4F4BD5FE649A03D0269FE3B9085CC680B1C5F19476091A0 +EE9B14C72976CCF55F2E61DB62F5D16063485594726DBE4904FA0B90AD71DB8A +DDCB6EAA4C14832705F37B72557A6FB3D590A51BC0350662A4098F08CAAF7D71 +79806B176F5A4B26E3E6C6C63D373CD1ACCDACF82E74D2136DC7A277FDB0D72E +63755279EC160FDBE6859E9DD7C64F95217A0845473A9946C4C556603469105E +C3D4E2F0230BBE74792D1F52A58D657DEA997E133DC99D44B8E793E2FE0E4359 +B41B3257AF837DF2DCF4D25B5ABF17A2BE196E5E1366EDBD5C8E840497D01DBA +B7C573C089B975E7707F5275AC0F5C9BDBB254505673655F4CD050C8F45CBD90 +2A0FAE9E741F890D5B26839A647143D1F9A6800D4EC4FE4125774CAC70DE94C0 +A1519C3483556D3B22E9C6092E9598D006DFA78D98F352F67530DB5CBBA6E15D +977C0F4B860EDFEF53751328E391BA09D252A962B02B4234C1E026AFD9B5D801 +6DC7E455E771FA41B86F57900A9C7299AF2A70E6A8858DE675FB68CF2E2C06D8 +BC584CED3882466910EEC2A2BF84375A5B8302EF81E571161FF04167E0FFF971 +DBE1A9D19953B691444E262CD6B7E72A0116E3379AAB8DD2BF3C2672A4FB796F +59551EA794895FF914DB416CCC6883242F7EDB6FEE53989E2081E54D5258A8BD +60E5729A48B8C3E760F19FD1A8E20B38F642D54197C26130F4E6CCB94D7651BA +AE60063291437656EE331F452A1BF5CE9DD8634611FDF0523ECFF6048A67B6C9 +149975A538C936EDAAEF98864FCAEEA8500D58C483D7FF0E0752D104FA177E1B +809739E25CF526F45B6665B82189DF94D50C02D215294D22681A0F9F7F3BD270 +3FD5F48360371D61A02E73CC011F38E34B049EF3BA4D6B84E9BE81F5020C9C6D +8A79A0FD0077FCD06D0FFEC2FCC2DD5ED0582A07E175A0980354F775CCC9E51F +5780F79E2573504E908773850F02E89503FC4D5C87BE11613347AD972595B0BF +D0746AFB81B097572610C7EA038CF4B904F504642CFD40FF950ECBBAA02E2544 +2FC4DB96C15B184EC8C63FE8B1DB1193B8F9615EB2E76E6F8B16F3AE7AB55064 +EBFBA78A7B05DF4C366E7E0DAEF7187295EBD56063FDCC47019E5AD3F62D930B +71AAEC8B88F1F5DCBACC2CBB94628D669250626AF858F9A1959288FFB6363736 +7C81EB98A5748467C5D8CCBB28189AE9C43D83F2E81488637ED5C6424C6D0960 +C4FB2BC02732C5EB8F7753DD2A8F4654B1F2497A10935CE8F681DFF83E7AF220 +D40FB900B820B92DB77892A7FEBC6C8FDD73E0B5E86C8B330BC03489FADDFFBC +47882A58B93EAE36ACDF1C7D5C65ED6EFCBB8878833EFF01F731DDC573AF3EE8 +2DDC0BC62DC80E8CB7A1A2B2B8BCAEE867F9CB65F0340976EC388B2670558DCC +656F54EF7A0051F6319C550C26992BC9A2BF3A718F0E6D9532355D5123A91D30 +C8DE870B14C732C9336649C93E76430950940A49C43F022989DB6405624503FF +1F8AAA2330B9F6F7900517F450A35191227FCD198B217097785D120F399E3008 +0C857E92A2614CCA05073141C80EF295AAAA002172D37C39F5FA2C09BA5A3025 +263C051519AE32FC392F46B6BB9402758407786064099C2AEC2D5C86E975DA62 +E91B6C29F9B59BE5C74895721DCBDF10ECC5E68E79B6B77D1A48F1EC85AC2D60 +FA34AA5ACAB169C4DB747D16796899F819A7F8E828FBFED827D89770D84B4BFF +EDD14033E3B2E25AB9C247FDA0800455244AE2C6444910DCBDBF5317CFD553BF +E4694614F01249AFF70DB09C56ADA9281936DF74F71F2CFBFECFE9886B190BD1 +B8DD2304A53BDE1C33874797D981D981AC1E98CF9100A2619C4A3B17724B338C +356B42380C68F185980BEEEB98BFD21443054008FC5CF978518A50D5DB2EECBF +7D46ECE48470775838C0F5B9530FC8C10E7FE8B87D7FE416B4B81B0EB636E4DE +1AAC22EC83B92A09FA0CCD03A7DFCD4FC2D580998F9E08DF914CEE769EC10EEF +AF9E32278AAAC6CAAE7A5E7662AFA964DF5312F92022C5D8E513D4CC5F0A18A9 +6906514057D5370F1CC561A5FC8F1519C29CE0BB7329C0106A137F217924A751 +071F7636A6C3A72D25A11EE416C4FE7DB9771BF47465F27FD72C7ECECC16593D +E38EB1B2D55012C8D94324C1038D86CE27718681BD43D69C26DD0B3A2CA0D8AD +9A1D51ABCB54D1AD938600D8EDAEFEC5C5AE6DE03A87917E30F41CE95C2ACB88 +6F8E5DB510FD40177B4E700546D2965D92E61ED7DF47148041D25A7835DD6E39 +CECD654950795D08A0D7C797A6FE0A07D0E99F6270C871FEDF9E4DBDF036C839 +1A34CB3E2C22D3003976AC2E0F8BC59461A09EF3A5564F3A8A8517B25EE15BF7 +6A1816312B61941DADAA5F9E8A1A2CDECCBC03A7B6173EFD8DFE1BD25C23001D +95C0DAD9F2A1BB14D6191D511982A5D8EBED7726AEFF2165228D6FB49DD87E65 +5B321D70FBC7D1A294BBD33CF33DAF8A4BC2C999DA93F9BB64C3D4CE44CC616F +A04BAF43DA1C74EFA33456371C541C67748FCB30A352F141B903914003E0EA71 +19629C1A5597FF7ED694F8D90AB6DEF1908A117934F11144E6C68A1B6348449D +BCD6EE569C6800389CBF12C7B22D8512F1A5245E37DAAD4E05A3D794B7D1FA5C +0E0D00ED43E67633AC39BCA169B6BAFF006B69B6D818272612E554BE182281F1 +B3628A6502263CDACA54B5051FBBCF0408B2259EF0317FBD248720F8E4D5B4D9 +FC0D30D42BAED7D0D98AADAEDD95AA28CBE166F6B877F7CC251A1A6B032EFFD2 +64E7569C5E7DAB444162C212D6A55B73A04B539C69C3A973CC3F6DB72E310B73 +572A556E126D289B5167DFBB7EFA1993445F29FD2B297D0CBA19482CECBCEE7F +80EBAD6D2E6D5993AB753B490EC5569B2DB12942BEDF7A40109543A0E33F06DF +B8454F8BAD8A8ED1D017A68C7A9F57A11962E3CB7EBBA4BC62BC1421DD7E62FB +DEE63C22CE0688CB38FAD877C8818CEC5F7D18EA999ED1B7414F479BEA165484 +DCC9405131AA659048AC21384C28631A43B722839B5D76C73FBDA5BD8E129363 +F2F130DA97A0F043F08C6EFEA7AC8FD41420C4CFAE093323981CE217FF8D1052 +2CFA6C233373C9A04D6D535F422FDCEEEFF00D8649F2868EC52EDE61B67C0F61 +6611A90F96E9BB87EA87FF6E8186B59D99604AC5A2C17231E0DF91E46DC72505 +3E3E262EAF87F740D2E01478881F66DD0D21798A2CF51A1943B8063CD10932FC +7C074A1BD61474104C3CBD3D29031466E7411364878591ABADEAB2550914DCF2 +7C6B9730D932ED166236573D8380F20E39783AB0D3E5B383515C177B9818D3B7 +D3B7ABA74066DFE96487390FD4704DE0024936D17B863049DD3C91A0EE8C67EB +46779DCA5740C355A09077BE453DA07F67DF4D072AA91A229C4F1E52B0E67A56 +39E34BD9F1BC3527995D087305FE9CF9E7D74B15B368FA5A70728E161C69E821 +015300142A3443BCC8D308A87B579F8C7C23F16CC76DF6BFF8170AADFA5A728C +31B3352B33A999C50CA17B7D076C6009475F81CDC71293A5809F6D43CDA4983D +20B805962D3A5049AEB66851FF6AAD3B1D842958E6B651789BDF83DABDAC0B20 +D2C45B2F76EDC73A2332A8F7611C697B2358EBC0358DE506B7985A34C661DB28 +13651C520AB24E0D3850EC9F51D84BE4537DA0FA7E0C342D3D61C69641C09833 +98E677B451E00AC3127FD7EF01053DB503773A3FA39B1D4E94090B1F032C8103 +3CB87B0A635A3BBD3F94AF1DAAE06FD6BC39061814FB4CDAE4E7320FD0816287 +644374D8F83A266C47DE3DC6B596D3DC87AB035DED1F804A399D527D135E52C9 +CF6A6877852BBEC3A0C295D1510ADD011D365BE2C51E7612A80F3D9C39763163 +E56C5E1C9A35D8B773A8126FA10690C9260DBD8815D319AF700A5FCF65476B35 +1D4032278D13574FC2C667638F1C83B9A24918730C0FC37425534BE0A0AF6993 +B5FE1422AA7045E7A9BB9C95F6F0EACE21073B0644E4901DD854D2709F17DE12 +E30B96DB62E90026C231610AB9794B39CD9E0602BD13C3593FFECCF79AF452AD +F17D9E84A54BE377B54EB6D9BD1D20BD56E495772C702C4FDA23DB576384D456 +A6159313B0C2720DEBB9432F01A550980BF7F3796AA817CE3DAB393984BFEE7C +64ED54DD390F067EBB85D9935823E4FFA7E954CD121204454B952104FF25A308 +FDD23BF1D08E7C5893D93E4F21F7C16E9B21C62F2B79922B1A9B23B06E0893AB +418AF962394550504EA68D06A0AB66A45A2B1A0D756B5C7DECF1B0E138E55E8B +08FFA75E0E4DD995D035F1FB391A6239822F22289B07904E2B745650C2695930 +D3D5AF7802187C22DC9FA2E760AB1D04F95B4C11422AE12ACF74C361D81EB5F8 +C9F89BA1AACD47D5706D9F0A6B016069E90783AE6AD73D8CDF09FFD552163CED +06A1FAF22F143CFEB7394D5B99D465CF35487A11F4E4ED26530CB1B2C5ACB706 +A5C1853F9AF629DA7E638C3346BB7DA15769AA6C705BB50ACEFCE078C19369F0 +F95BBBE67960DA4A413A00CFEC4DAD2CAB9951961FFFD41CFF622F57F0BA79FE +F8377A061435DD0EE57F6801307A4C719FF10404082E069ADC2098B971664CFD +BD3F1808F705FC0DDA50D742B3DD3441DC391D232034070D8745018DD993E832 +C7087545BB7EBD0ACD83CF8ED9E65D60FD9BEFD2D0497A8FF563004DE3BBDAE5 +80D9FFBAC5936F1E1041C7C82BEA9D33ADDA96924138EE471C943E9F2578C0ED +9F0FE81A58F720904E41A09C8E620280BFD37113EB593027705BADFB227F6B94 +555F9610FA63248A467785F34513440D734C53F0825896AD0DD462D8286E23CC +0CCFA96436A09A66A92692ECB8564958BA5192E9D7B19BE34C32D70AE84699D1 +8556A92C123A3E4A0D08987AA9E2BBAFD0DD1940FDF9A4B7DBAC147367B175F1 +BBD9459018AA81D0F1D4BF85B1FBE305A01C62062EC6480F356EC5DBBB5783C8 +294E84BB9E4B7E58955E2685077F066B5579A4C94BE60E4F803AEEF852C12A13 +2BFF79C0CF85CC81333971CD93C9FDFE3BBDD14A68CE87B7D9973555CEA06B5E +9322B1A6CA9DC9E2EF984B5CF57A3C63B8A7569637850D2AE40E2C99E18907D5 +1ED4D40256BAA74303D3F2071BE5C83214F75082654AFAF4CCC70AAA293C0EFA +703D8F38668E5B029DA47528066BA092DC73480762C5FB6D70BFFA48734DBBC9 +00398534B47160DB99A579EC88E8BA13A7B8DBB6040E07C628ADFA0BBD27CC9F +F45D3E09294CB02100C7649003F84951DD642136CBB1D714DF8ED2259395F9FC +F7BD8903616A802A195D981BE9C9FE203C53FFF502ACA18CD14FD71402EB3502 +8B31B84272A26A3DE2C2E28436CF9546D1A66FF7F24F46B803D45D4E2A9B63D5 +D06DB1786BC77C86D59EF3AA782D160F9BFCE4B248333C5C814FD022A35535F0 +DAE95C28705A11421DDB10AD9A3D6C4DD4BB3ADF55F4C8A7A1D1586C00039806 +CEFE554DE1FFA0ACDE9B6BF7778D7C7B7D71DA1ADA92747A342F4E4FF5AF0218 +974CF2DFFD420F77F92C688BA3152DEA46756F6111B519233511491DDBBA0A2B +A18D2853F351F6215737CAEAE6F16247F6C48155A30A3B5A5F84083C72896BBB +F3D9BCCC58B4FB170514406A9A18A4ABF3AEC932F59D55EC9EC2A13AF37C691A +7520446FA1266DDEB7A64A1A0A99E4027C18ACE894B28C88DD46ACD5F72204FF +176E12C62A3630C90CC8676E4BAB64361F3DD921373F4A1F897F01997D24E9FE +88CB321570A99412D0A69C377DDE8AC8B2776393C75219832783FDC16ACC0186 +CEC13397B5DDE276EB0D8B12B256913E5070675B950F3AF6BF82772093C6BA15 +1711258881A3A8656C0C5EE499A8D210044D0E9F952CE31AF4E17CC1F93196E9 +A924154F41D051FD93C488DBD72DD54B96DF1275DF573E4C7BC68A05EB709358 +E23E24F2A6015198078A27BBE36853CEA97EB561C27273EC391D3D361F27B3DE +B241D1A62CB567BC1E7275C6311EA1F81B834C73297332C338032BF4EBA18FB4 +CFED469E2451BCBF639E389961F56380DA04C4AF200FE0F2066BB058F9C26C5E +B7E28467107305F5FEF70CA241D0CDEF4030377B0EB7875A1B125267D985B621 +FC39F4A8F868D6B0A8696C753A50CC0E74977CCE7A7B7DB617FBCB3CD16C29CF +8F8F6BA06BC35EEB95637073FC26EF3349C67E25F2CBBB081CA44CA48BABA007 +8A0AC1B8AEF5E3292CED27F1F0C287857DAD3EA12433669FC487660B3C019D69 +D5AF4650A55D337F12B58DBDF17DDE3CA45312D7B0EAFAF57440AEE816773EAD +CD4DD36C3EEB87C6B3C79BAAEFD374F9E0CD71A7D5D51EB5688187B3AA4BB903 +476FEC7EF998C17E1BA181478BA5733CE1653627C2BCFEA672BDD0706C4DF71B +A27543B7291FAC2FE211F992AC7A7D0A1C30A2A22C16F67E46C2EC172858409D +442D2CB77DA2D90F257BB664B9BF93568CB220B2278973D5F246E7ACBEC569D7 +F9D1298895F65E12326EF2141A4436086A308D4FA31635484CB7DA3C5942C58D +E7241B07B85087CD094EE00DAE9A20EBFEE7BF8BCE7D61CA9D4022EE41ADC729 +ECB5AA19FFA0CF414268C4ECBF3063C504E3AB6EB3CB67BFEED5893239639232 +83A1C142A2A2148EC0B081D72A703D5328A1F444771BCA405B26527885291E88 +F499FE569595C0865FAF03A38C60445C170F0A8919B4D2B973CE656E5089CAC1 +6F64BEDB8003EF517E7AD0841C8436C59EF20421165088D9D53753EB25502A50 +C51EA7C3239E3DD2239995B7280403DC4A8548189C21AF07C0D361EB5A164F1D +A48863D0C7A833EF780721DFCEF25BBD0A0B92612E81751DF1EDDC95CFA997B2 +02535B53CA95AA7E57B57E3635DF30DA78AA48958BC3734014EDF2E2C3C22817 +4CCD901AD9E7E7296E1C66EC000AEC174BD407EF9E2FF67494E212B30198CC04 +7FA084AEF76C7DB9FF2C8305926E51AD6D20490452A2D42D06649C3B8BB5DBD7 +3871CF0BA4B78252C9F8B1FD55EEFB5131BFA2BC72F9CF088C618E37C5303E14 +07762DAD95D6D7BE289E41EAE43D2A03ECE6B61A9700E5DE7BF39BA0965DC030 +DDA4016A760B530A81C6744B50DF8A912EBA8E906E9638799F3C684870616299 +27CE034EC6631577D41086C34143F401E6166947B3C96BD3F38EE230D39F55D4 +69804A40EB951C9DC6E4C653DE2541979B3F330CA0BA37EF4B48B441463785A0 +CC6DACA85A9214DC989C163879652DED2ED22E4047DBC44A9AB9CA1361612272 +6EA87CA5074E5E36F3F46AD1CBE9F5644B63DDEA4206E93261FCD6EFDBD2C70B +5234CE5442661FCCB32BB13CBE2162222C042D0A51DE2A47FAEB965CA8070463 +6AF299652B6615176AC7518B7D4F8D376FC46CF6937C61BD1CF2F49BCECAD088 +DA0823BF66F340E3D277E6D7FA46E38AD3A5AB7E7B752EDBCF667062D7B84137 +EB3990E25CE9C1352A83877A5AD37474F7534D8EAEEC9067C13FC71813B267AC +85133DBB3FA6FF397D8F74A19169354417E63E4FADDC9FC1B5423DF29639703E +4E24729D073F79F8BDD7452CB60FE1C43A290BD11A408744E1EC0521F928659D +C795BB1196AE1160145D3BF26B3EF78BCB81FB69539BDD6C22AE6857A8546B3D +5F8A71867FC42DFD220EE219ED209016CBAF3AEDD69D18BBB97E0F920994575F +C2A0EC86609F812568642683A65C1F5BFB591FA5446C3C37310DF15E126F0554 +49C2B07980A945F6D6E2AF41C69AE12A8606A1C9A9018E271CC223E4B3333A9C +3A491A2451BC13F1A56D3199D004683C0DD91FE61F116482C90A677644F35A37 +C46DBBBE5A622C19507288E28B83F808E924242A8EE5408142A6BFCBB5229888 +5D75298EFD28F3F4EE31184A4FFF586137CBF91B85A64BEE693F920D587E0CA3 +DCCA1DDED3AAF623E395B4711D69548D1283B04A4B2984B6E89DD50A27964E4E +9F815BE0C42CC62C47A61B7D67B1047527F04566CB60230107C49D1532AFF59B +67094EBDFC3ECD753ACE391122D26129A364A6E4AA6BC72CF0F8F428B999EC8D +13C61CCDE1549E2A67A9585B2ED15D02F1E9EF223EEF93FB80CDE2296F774B0F +9B33B92ABE283D4DBC09198D47454993DA72659E34FD779787BC7CC263DFD03D +96E824D1026E8EDD22E25E81035839F926F00412098554C9C6E61905BAB698EC +9A0F37D62192C2765795A969DABE55436E270D396AD7D782927DE458713D72A1 +D8B2B9A001C8198FDCD2BF6FEF5E56C38B4FF622DD47A5EA6D980C198A91BC57 +E0C9375BDEE41C91C7C636272AF85744833C42D64395868642384B18F71B8A7E +146508AD0F19ED7A49EADEE9E2CFD09AE7ED8733F8BB7AB0A278DF2858F70623 +8F9E663CC6B4D961CC47E3CE8BFD5D45AF48B98680AEAE0847205E5700D143FC +6E56F32EDF3DB57F1CFF1598F5BCB06AC53BAA616F1CE3A0272872917C769979 +1FF653D88D7C4BAAFBA4DDBA616D98E84886F2027BCC7F5C01AFABD6D337964D +25A27D85882992CC142E5066A11E62CF5677FA6387DDD60AFEE69D31EF0FF4B1 +D62271725C64B690ADEDA39F97ECD4FF1AA8A5E3BB3B1BA1C110F2B396828215 +D9B5E8156DDAC7D152B57EAA4A0EB5306233CD4233F3CEEA9743C2BDEB03C760 +A97A914018F1CF0A96F1E2859694A4FA2434474DCE77FA2D4AA336F6489F6C58 +D20CA26D273126228E3C02D8A5BFE4B33FDC0214FC6B946BA07D825037BFC6C3 +D9A392328DC21737522D04D949726B106DF860AB3113936DE2B88F9D821AAE89 +4CF56E2CF620D73833CF07C91E60AD09B1BD4322E51BB6BE5A79D432F7531EF6 +E3AF2069AC043799A378099D570F5270A99F9EBE3CA063D0DC763B3D368BEE9F +ED1127289EDADC595BD80080FC06070AFD2140840D0492306A28FCE01682BFFF +18BA8E48CBF164ACD3E9DD0939CB2D0C53B1B99963A46D265EAA1B798DE74D84 +87093079AADA3FC574231BB37ECB6ACF0AFF4603E0D0E191F7DE5EFD7E427E68 +4FBD3ABD7E78EE5D8E46E85D0C1B9645D9DDE0E87BDFCAB81ADC114F1DA38FE4 +0354CCA83E15D19F822B90A8E3F8797C9E55ED0003200CF56495FBD5DF251BFD +4472D773F06DBC7E646A9027D9A4A0CF0CB96FC867553CFA98E8BCAC2111530A +C1144846788F63A2B35F6D6F254F6F593F260FDE652AF510B300C62630EA9474 +437E26880F70E28F92EC4E1BEB7F6D60779803796A578397E7D47540C6E30A77 +DC4730380E48B7B0231A0E4F6FB0D15CA028302D43B136B4EFE296DDD061A9C0 +5EE6CBAA454AF5BEABD6B399D187CEBF35412F263EF0205C932345624EC0FF39 +6BF0FF11F398BD1E6A6297D02A37242C790539A7F5942683DCB472D3BD46F1FB +B4A95BC3CBB21C545A1A57DF730AB1E6687D416F466119C7F3DE1E8B27BDCF00 +37F42B3F7FB1E54F3D85B54400066FDEC97F1228D717F63E2B293A18453E2A5C +D38D0DF64AB2FC04FD490494337966CC36F2E9DBD18F657AF2D361278A015663 +801E9CA8A250434BFA5394D8946CC7B64D679E91238D3246585E901DE09D3598 +A86E85B4A50C1C29DDFDBBDEA63E7113A394C451FA958C02E16D51034793F71D +A17B1035BD431F7DD1C4F503A6DB7744095A03A937EDBE3A0D93B1946CCF7CBC +BA5370F812E528C54E637575077843F9EC6DCFED973217B0181C10C96BDB493A +BD08F69CDE5D25AB3C7843A62E04DBD97CBC25C514C80237F9811B74F878E624 +6FB1869E3A013A985C4858530E8EC04177E0B386ED12AD96649AB22A42F5686A +1853AE83A1F473B4656D2CE0133EF352D2A2FE57F5B094B3845E68747DB56030 +3D27F1680541BC19DEBAFF1882C38726537E03ED68CEDA0534DB3893F7EAD80E +240791AEBB77714F29C84FCC78E743386877CCF89E94C8D62A4B7A5986FA07FA +FC2AF55AFF298983C0768CF30EC623910DA93C4A471BB1B68DA5B2B7328618F0 +BE546364B76248091064D78B5802B0E0E946D0DA2F37BB308441284CC9706038 +32C934E878EDB5FCFD907B8839FCDBA142264F3AB39A7826A41935DB115F5DDD +AB63FBF3EFE85CB04F3CC3446FD8D86209602125BCB5579211A50C0FB239B7BE +F323C147D842FC71C3A32C5D978DE389EFCC9B946EAC375FF96FE00EDAC887FA +0FFDD5A5232DAE91D1B36C4222A4FDA12F8D845FE593375F22F89A4FBDD80716 +F278B8FB3D8E003B5FB73C37F6C534847169686613B4A8DDD28D1447A957F482 +FD1CA006EDDFC956AE94818A9AFB202E92F78097E2499B5E907F6FBF58204193 +07A9F13E62BD1EE3FA0EA82D4B4A8AA606FF1112857EF86F12798447241CDB8E +61EEF2243AAE185CF4EE98E79B0FE4F0BABAD33DCF6704454DB0A8D0691ACBE4 +F24ED862B9035F96EA404389C49828E66A08BA8E7D6E3D21741EBABEAB9CC9E1 +640D6EE109B93857CF29A6E89702320FD391F1F7A588995158ABBFBE00C989B9 +5C4E9E325FEDC4A05F1C8CF27050FB1547609F82C9C5E658E56211C41B8CFEAA +99F2C49CBAA451670DE1772E2B53AC09F701C499A48F98D8E0DCA2BCA7EAB3FE +D4134EC0096839B0D9A96ADED7C5F97BC0E11AA64AF5B1B7B1DBFE6971F5BF4D +7559AB056C63EF1CE60B523FDD769ED6723800B847B082CE32F2DC71E78A9535 +2F8E92338E259998B8A12FE1329B64CCAB8C7DCA0569BC5A58F1610897040FFD +2CE6C572A92111787F750CE05598B021D3F930465DE23874BD78A0D35BCEB6C3 +7766ADF60F3BA013E8340DBCF4E7020DF7F8FDEC349E1A692CCECB15AEEADF99 +06F3D6550CD4863D14DA4516A68823B0B2FCC7F47B131595029D3C87AB682FB7 +EC82A46F013EE477D8C1D08A9E5C4DC674B48F5F6364EB2D3621ECE9A3592DD8 +B90691B263A18095AA22BAF2D46BC111548257CF04C01842BCE6170013FCA827 +5FCA4794ABFFD5CB80FB4F5CED3096538474EA757ECCDD99984CD359B428F4DA +B17F2F432E8A0E2E067ED9FBA5BD137CA0C5584CB46814E2E2473C65B2214F0C +F77069088565BF1ACB613ABD7A82D2DF321DA8B3E92A15F2F893911F485D72AD +3D252FDE7BAABD964506D26E864EB713DF1CEBD9158863E405B2C16D790CEA44 +26F8314708FCD74F86D78BEA53B81CD29E74CC1B04AFF6617B9406DEFB7FD1AE +A44615E932929F4F0A2787D1A8D51D777C7C45C6DAC92F7538F4CC2CCE43E0F9 +1F88A407B9CAB5E094163B99D4C322CBE25F18E0AD664127E79D16D81084098C +1C063C131AA27A118120414E84DFC8B9C2A3025B53EEBE9AF03CE57F3DEA6CC5 +D03536974D760C1E734E1F5C25A7A34F1E2C18038A3C9F14C11E3DBA3AF10CB6 +AF8D8C1970A5B2A1FF3928A5DFE9192EB55FD3B412D20F408B7B1316309B98E9 +ED5F55EB5DEC8B09F4547C544E5123A95A3B3A997F5A8F768512415A1E3C8FCD +E6861E79024DE59F158895D5D18801AAE777808C22D3AE33DB5BEB20C663C8D6 +7326B3CB0ED3A5DD613374C2E3C006CEA3C1FC7BB3F69F4F3D653004B9BF83C8 +7DF8F42AD90458D762B27701D006C67C0C0327ED383A1C49783E4CDFCA635B21 +8FEA611DC8E3092872B4AD7DE34320C3CCAC28E7F552C61789FF79173B979E6C +E6701502F0881633ADC2973885F89CA3CB3B96A5860898B17B776CEDED2143E5 +AC821F9CCE54F8072BDDAB17088063E4687FF54C1079794CBB37B88A89639437 +2BDAF37CF904B485109417D091CB376971A83128781DE7DB5052C09B291335A2 +82DB7065686A43395D90D1FBFDA8BDE095ED8214CCE702F249A8EF8F2C3FDCF3 +459FFA35D40DEE6F5D84B93C1971FE5599AB2923202A2D7A0C319886CCC7537B +281BC9BC2905005D0F0912D4DDA6750BA4E33F6584EFF5541CEAE787C99471FC +D1D5E959FAB922FF95B8BFDE03922890404A22822901FC57DF8412A02A40069A +6C7DF4D5BC45B505EAA44A9149B0AF4DBC71977342215880CBEBD4B3D7F7E41D +B0CA512BC19E847ADE48687EC90DB5346A1A752BC578678E28CCF908B6A32D04 +CBF3B9443DC4BD732C3D4D67657D7177BEC7A15DC2C92120ED337B08ED13B13A +32A0AB9CAAF7B9977DBDBFBD5A4DED107D33B973A8602436088ABAB4F7890C5B +24398190F2812D21627E2CD2F30F8E4BF6009A82ABD5D5E0966FA0EE62C356B0 +04EB823A44016E579E724FF2D0EE68F1381F20A96B5D536262D58705EFF6F51D +E34B5F7BC89621CF950AEEFF1FD89E1EEBEB83DE1CF667FD366D41701CF11592 +09EF326F2B88B9955A96E32A02E28251EF9FFA8EFC1040AF2678455A96473CD2 +A97225F8C93ECAD77B478B6D51B70AA6D7A9A4A0B73D58470B10C75E2913734F +7E6657F480E09DED5232123DD13B9FB5BF1DA7697C6797CD19399EB8FD6B87E3 +DBDCF54B0154A1C6564ED336D1908785A8A5FB0B145BF6ED7AD91C02D2E565BD +F8C5A5F0A619E7B28B9A30BA16FDFCC5234F9891D3291CA8B27EB2A8EECE4ED6 +6E1DE553F845D3186055BE35E51C4C2F78178F93B12FFDCA3CCC1122AD68F12F +2FF2BEF754A88535FA014CA1A958760F581E51B2C9D205F67F76CA8A73E835EE +9BAF73DA150DEDE5BED41C4B37110F01BEBD3719739EB4DB4AAB9CA76F92C205 +9AF5C08B5F2DAF9675A7E07322452DDA5D8349061A01093C86555660E5D84A64 +F0034AA438655B50123DA3B6B3F11DB84A6D954ED765423ABBB9F45286869F07 +D3E7D68E53029914301A839CEF831D963195DA8AFE09C22F0B6AC38CBD057027 +512B802B53D6B1F16EE945B46B841C72F4AC91A7E6FBA7 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: SFTT0900 +%!FontType1-1.0: SFTT0900 0.3 +%%CreationDate: Wed Sep 12 2001 +% Copyright (c) 2001 Vladimir Volovich <vvv@vsu.ru>. +% See the file COPYING (GNU General Public License) for license conditions. +% Converted from METAFONT EC/TC and LH fonts: +% ectt0900, tctt0900, latt0900, lbtt0900, lctt0900, rxtt0900. +11 dict begin +/FontInfo 6 dict dup begin +/version (0.3) def +/FullName (Computer Modern Typewriter) def +/FamilyName (Computer Modern) def +/ItalicAngle 0 def +/isFixedPitch true def +/Weight (Medium) def +end readonly def +/FontName /SFTT0900 def +/Encoding StandardEncoding def +/PaintType 0 def +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0] def +/FontBBox{-210 -359 1376 844}readonly def +currentdict end +currentfile eexec +D9D66F633B846A97B686A97E45A3D0AA052BD0CE60552BD63101D7CDBEEF5B11 +69C468645FE4ED1AF2541AA0770C1DCF81623DE0ECDF49F2B522618F650CE6CB +CC8C21885DD61AF8A523AA677EAEDDFA51A1F9B1885EEE0456196D634E04EF89 +F17499DAD982502ACC349B9EEAAE4A71A73D1147318C60A8BAC10510DE90D8D3 +F46E47295D27129A5AFE0C65E22BAD10D06885A2EE623FF8E1D90287A083E00C +EF25195F68A2A98170E4875AA1B1ED6A435B5950D136AD73C6971F428B426C43 +EF6BA04718C56B3F4BBCDCB96EA318696C5D8219438F35CDE7EB43EA820F8071 +ED3A1711AF5838D3BCFF9EBE45C1D0233E470FBE967365465526E1B356B5FA9B +EE60989352F1A6BA7384F7882FFB0FB2572BC58896CF6D5CC0FCCE614E95AF5B +661862F6A9EAE5501CFB34B95B833FC180273FD88D23FB68AD872E49FA25F76B +C922A11DB6F8C1C06897034CCCF52DF7199EC7D17771C8E640088AE27CF1454E +34B0DECFFADCACE80C197443563ABE34BC422AF9C65141D6A215839C521CDA04 +DE75B43810A7E57954F25FB8514CF3F1A0996031F3CD9DC9D37A8BF28C7295AF +A8094842C0528401E61EAB53E4EEDF7820C74B5576C30A61A98D3657F7D40FBF +ECA60C44B6EACA558451A23F10AB2350E40216C1B074C0CEF3BB61505E9D3AFA +D0E54D16A6462AA90DB9EAD539D8CA243399DF4B1F0120D28B7133DB7D9E1FB6 +3B9308A0B937FFE2140DF6725E4FA9F123A262F25401F4124B7B21B96144EA5B +B7804086A958A37F1AF271B4E42385864622093CD5982AB635B1D953DD5FCBEC +F9094062C3BE52EE0A67D1F14DC6447B613F66EABD8F648FA9EF53F7B4BEA58F +3D31E45BDC5B055072F09BEA14526CB74EAAC483E72C05CC9755B8BF267E9B67 +B2251E029F1CFE2A71A2CC879076B11717232B16D5EBC945DB067EFC870CE89C +529F31DD59882963BAC745F35E0F24A387A2891C43C7B444B25607C49F25EBED +86B1CE2E4E2D17E888A6AE69C64224F7C9334D3290291E6F3874F9F48564FA53 +9BEB4B99C836653A3050A893EACFA4DE898166FA521AF1D2FDC47FD4DC345331 +9ADF6A0D1E7491E51313D6BF89706FAE2CEC255B464D479D6EF8743FFF28036C +80CEC4A9219C8F4A9B31248F03AA07329268F44A317997D469E768C4461C0EBF +AFD24265AC7840125D9C77BA76EC22331C2DEF9A2E85A226D4DF1AA509737DE5 +21197C67E3159951324268E51CA72EC227B20A080808C7300708BE33F3599991 +D07DCC84F7721741FB17924690AC44621F6D7A1C21BC2531C8133652D013BE71 +5ECE4EEE1DA1C4DF97A1B435BC1AE23B20461FC129994E37BC2DB86E5487C9BD +B503D6E697ED90E3ADC4B74DD3B682C3C75A985380529B43E9F27F411DA3EAD2 +EF737DF68F9858E539ED637A3A637CB9592937F848EDC787B34E644F5CB871A6 +339B8A754EC9F02CD6AACD45E5B15CA0787876D75A38C44652325C27444C5C2E +E1F179055AE55D2C4D4F12B5B8758C87D68C611D1066A9D8C620BDC0F22D5DCA +B19AF6D54931665D840B3BD946646F58084A7FE5A196C0A0C76BC51B7434ACE4 +CCBEBF778CECA243AA068FF90F702ED2F3DE01FADB7CBA2B969FE5B436289CC9 +216E51BB9FBCB98945611121F5731533BEFE65965F143B00A26A6DD9CD5BD012 +DC48E4BB72EDB0F4C743474905B1E7DFD42DD947DC91B8B94FF94A43F0C27314 +3E753F3F77E87041F3E785D5DBF5A42B5F5DF1B0B9984E3474A9C4554A086B80 +EA65DBDE0E5455263040268722EF4D1102CA1D4A04AA7720241888D3B8A97F5F +335EDA4BCA1FEC7EF283ADFCB4E87AB110217E0A3BBB290A575B952A8F16F10A +FE9208DF0CBEBF6566D47CC0AFC93110751B59EE6DF8A23BFF58788E63CEA653 +22A747EE3489CD1A6F52BEFE8FB3D49A7484798BB629601510965FEA5AAE8458 +66983024934FBCB6531F907E7278FD0770E03965BD95C3022AFB919E0E520BEC +CFCC48F891BF88A3C88F54091C8B09B0D8F00D4D261DBB9491F445114FB265E2 +38F5DA8F3183DC23E00484C793159A4BD8DB7219686FABF7B8BB808537ECD6F2 +2EAE4ED626CB161A51C896786645841C76735BE0C2165334CBF577829A5C77E9 +66173902271E7160B6C5D7DD4D7B0874E9A7EE2C5E078834B951A4FB26544488 +1CD3279F060357ACB962EC7A5CAD2E7DAC2D9C1612EF7EFEE399E838013770FC +07531B50A9326D5103C15E8BBB23AB548C2BEEC0E0514DC9EFA8531FEFF6298C +4728CD0035768FAFF64D5C0D1285707759EA2ABF9EF3AE60FA44AD025E2A2E41 +B4F6044DACCB2B04465FBEA8DEC44C86E2EFF0CE244C8BF9D183767E2A31951C +63F5E9501D52B96C2466FE194D253C3234BF4B8F436A754751D77B78C50CC6E9 +E86B1F59A4199ABB5C36BC967DF98C1B17BA3BBD4201DC1B8CFDB99D1CB98EF0 +95DB83EF4631B548E54EA57F452E3896BCA6B4188453CC7AF118BB135E705123 +42821EFFFAAE8BA4181A6EF2D2CA5F50626F2651A7FB656BE873B8962C3AFC9E +C243CB7399B04AD778AAE62846C0FF19688AAFCE8461B3D81A1F50D0C0688716 +06D4EDB60B94C6AF35DAA2888C53D6247D7A1CCB22A9BEF7AC54A52EBC6885AB +05948DAA4E8A44E85FE91C5E0625163FDF2249BB8C7BEEBD84C16B027A788F40 +6EFD35D5F8117581D1D279868906C02981DDD3EFFE84CF9087B5735A9D4BB3D7 +821516E8D1CA8ABE871260D756447BDB6911FE99DC850849311E3CAA83C7DCCA +EAA4022ED2D17B1F65EE64FF20157DBAAF817F450003E8B8BFAA8A9C9653D2EC +56876CC04A46AAEA702B2D3D70C5768C0AB3334CD4B64778FC640962BD87EA9B +A0F21A0132C706675AEB9135266315EBCFBBD358676837ACDE00894CF022CDD8 +965A31C4AC19482CA68151B2A144319FBA904D879C910CEB15799928220DFC4E +CF5B4A77D36B2A1CE58CB3D2CFD0D1237B3FD94524971ACD40094856B12D9049 +B4A3BBE5E4577DA0EAD2428EBC3518950F8F782124E92B59FFC977DBF5C007D6 +32AD61BCE88B7A49D7E74CE274CFB186696DBE630BA7EAC1355C7A8D2EB1B539 +41ADC76733F8E5FAC431AA012B9194054F8C0D715640D56BB0DA8A1AA943D844 +B4F85384602B9306D371684AE1B93C6BA9E50BFFF3BE09E104E14EE9649FD4FC +798AD68FE377490CB2ECF9F16E3C80DC2BD05C14EA2C1BEE87B1B787568C9986 +0C48F7B68A00AA79BFC95B08EEFF57C4AE4F5A4FA1AC7BF9404BEDFC78ED012E +1D8F2129584DABDF695E6C2ECD03328C7D0F204A3B093CA9123BA3B044560FE3 +C5DEF64D7D71D4891C14F42C1AB7897DDBA70762B57F8AAF2CB8F2876AE8152C +09A3373BD32479CB48D746DBB6357102E277B63263A28E978DEBFC432B64BFF5 +E4EE4268600F85CC0EC177111A6BCC76399717EC8EE23296F33C16CF345CA680 +9E0920A9BF967E563B36DA5DAF39FCA7DA9926147AF043C6C72A7668ADC77E5E +F93F5C89FD5636AFF9BEC1C0E35C4BE54F97363B5B6A2CE58CB48EF44CA9EB43 +40761A8FB358F5D55533651D791F5D8481C6B74437AAD1B718404261224F7289 +90E5BB9575E230B0127A819A6E27C71C390C32EA39D15855917918D731C0127D +5465D202056EB5EB568FBD90D3A0A3264F70046B4736889D386F4E1114344F77 +AA7948D6E512836F83C605038A8FA0AEE394CE83436E9B3CCFCD63C4A8A6E52A +5AA8471D287F1C04B6DDE1FE1ED34594E64A5F5F8934D935205CB32AA47C18D4 +42FD9E99F94B35937A2474F695ACE12A66F596DF870A3073E0D1703A1C6A73A3 +71375FA8CC621CD50860AD79D295ECE1A7B6587B86897AF068D2B7D25B1EBC12 +9EB055DE5359CF88B77A6480E975D2C78B61614D261438028C8E26A9102AD156 +96B2CF5678A7EFC4FE1F03B5161952592E533C82060040611396581F1A77DBFF +8C55231B26E708F4E454A1FE2107B371CE5D80AE672DC6D18D1A5DBF53364BDD +D7DC535257D0F5F53BEA58A7E0DFA3C810B88268B86A3EEC2020E990AFCF0D0A +ABCB55D2BF52F2EFE49FD9878200E31B407B8B557E0D01D16A142C85824A38C3 +760AD42D773507EB8EA56A2ACE521D4ED29199EB733D598F7EFFFAAF0DC9A6C9 +F828FC71A679EDCE7A35DDC3AACABC4CA83C83E407FFFFC7383FDACC0F1A66A8 +81BA25C36C530C88F6424FE1BD52FE08476689354B337A6CFE211D8D39624776 +55796CF77EFC7DAF2CA7A39AE14F2D0A58A1A7C65F656B5E89CBD5264C2DAD1F +4AB387EA6EAABC1214B58008A2FA7B1A00818F911E727EFE61ED7C48B0F9D65B +1E974A9E6FC3D89130FB541A33C18EE274856C9BF0F7B0D33BA8EB7129C1F444 +CE4DE1B824CEE0EDB2890D3E5945EF265D6DD1B51CD2ED4CDCC5145DD07180A8 +849721E4E4D545C1D9F66C7EFFE32530B02636A1132336D3C21252001FB9FF6C +56D848F46BE01BBB437B2273D5C097FE972352DE294B83455E878C87A991E6BD +4FF89E060F1B93C3CC6C84F16F64FFA7CA0CAB2E8860AB6F61FA0EB60F558AF4 +C9729EC1672902C044289BFA8B7CF2671C173EB2574007088A67BE90FAE9A0C6 +5B29FB256F0D7AD9C42307E9F57DE4A5542CF83545BE60C3D0954E2ED6E6F3C9 +E56868A62B3DDCF692FDADFD2B6DAD75A7F4A4B09682DA32066BF35501449DAA +474827891C562C4C0CD113BD9D19DBBDBC64E6F59FB422A94DA9D42D253B440C +C8D54A1B07AA761A7EB309A88C5D9668F6C99690AC6E54D998B8E441F3161074 +E3B41F6053D276DA96EA25D2E4C752EC153DCD59735AD3211AD0499A5B9EDB35 +A5414D985880E0EB45D64D88A870B9935FBA7CFC215111A40C5BCAE33D14D531 +C77AEC1C33CC62876C71311D6FE24AE46FCA7003A22251C6FEAC36E5893F900E +0E553F4927ACE6A313FF48C562950D1B9DB8A6631974ABA413D5B4DC61C35CC6 +91C59BAF37842784111027AB24DFB3ABA3D3529FEF16DEAE8D919C83009E7784 +3AB97773064B3E71305AB9DE7FA9E6379DA6E19694FC2325AD6DC1446B38B2AB +5B38C362FDDF541E5A2B076F4D900E99AEC0032E11D8E8DF94FEE7440A64DAC8 +E53E1063BD783CCDA519B1B3997620BB2E99D991D64047A5758ADB937DDD11D6 +0912E555A74ADEABE6ACA9EAD96CF2C11B51CE78BB9C0ABDB48BB8439B6CA23A +8418AC936A40612764D8E27354230BD298EB33D9DECA68CDF4835B961DF1C0D7 +FA6E43AB24263FB23EC2B4B337CAD11B818B9B0E66A12004ED71E4C55AA8BC09 +9745935F062BC327EAFF6A2F3BADAF809B06AC878EA65EAFB4FBA6E16CDEACE6 +AF49E83746B3382E3EBD06B08A26B3C704E637F8F4A6F6A1C0F6EBDA160AF440 +4A212F1CBA96FBF72CBD3CE298B4028E29C5C0470C1164B9B443A01AA1DCD71E +36D196951E1C8DED4F198DBA7A8E2CE8C468D67481A68829A8C530D25FB79FDA +553237E371CBD214054BA9FC6F3B6DA6C7817399A631F15BB446E2DB8F2C33B0 +C9BDE11C460A0091243F23697EDC3EE66D9E70943B665F73F8A8842787A468FA +39B09605EEF2FE6BC4DA19DF5F562826CEA8A85553B4E306A223CE4EA639E0BE +937D726C89FFDD903D40D33E727B29311A08C665885366C0A81C4BACE810ABAC +E7F22FFFF84B1BAA88D51C54EB589A6568E2942E46B029F2CF536705A880E4E3 +BF0F08F586A85B20A9B5773B61D516185D744903A66B75F8C04EFAD3BFC04541 +10A0F057CB7987E0B716993C403E4AC4DF1A89D840042BB77F38A85B06C566B9 +EFA7C9EA0E27190E3EAC23A7183C4B311BDF808BE66F6C580A811508DBAB516E +40BBD70466A4C80FCD9929C1D816AEBC41CB947DFB110A5B43A02751A5546A0B +6F3E9899442769CD26A4E0C5F4D5016AAF1EC02ACCDC2308FB27EAC73504F41E +DA8E84C69CBEDB0549603C0727A5F62163EB8198C8572F1FA15874669244F944 +B0AE721A2BFFD0BB0674D6575AEF4C27BD19C32886971398C48739486D7B8A84 +26BCFCDAEBD1AFB7A7ED99D62EE3584257054325F621D13E70A4B7BA4D8698D0 +3CF2BC22C2C7D09E1D0D4D02C5009DAD1947C8187FDDC20019E76A7776F236FA +968764FF657D6D256F683EFBE41345CD0BD1FD6C79D15D867E142AD6E6993375 +D0ABCE7BA7EBECC4E9DB22A015221EBEF7C9A696C4DAD9C5C5A42A78EFD1C11F +0C84656A6780715C5E152957FD1F94EFED513C70F7251AC329B0AF0EB7884D8D +E9C349DCE5CF58EF5A20705436FE0658EE9CA27A890C1ABE9D7A253E2DD2510C +B723392E3F9A74C7A219299540E5BAC8759E8F9F8AE663005CCA4F7C008105C6 +77BAF1DF07C5ABAF2528C5D05CBD98E5C545E92F8E77B50E8355308ECC575F3D +E18E174F6D518807D02C0E738842A9804676D4B1EB01B9A03755668C1ADD63AC +B5AC29593F93D4857290DC1397C44AF56DEC6294ED7896326E24A0D47CB4C623 +348F3A1FE8426CA4881EF3502D264D57B39D8EABAE1329E588AD8CD668493CA1 +8000AD32EA9D78890B7DB63B131A1F7B87EDDFF259C641D160F82C924D3BAE8E +7BB33B6BC57F6A6662759B65A8135C8E1DC7088D6279E7AE6D25E81034C170CA +7E61C7D9584070F4FBE9D0CE98E412010BC15B247AE43B58F8DBF491692E8AF2 +D73F6A5AF8035C49E4CE27842C5C2B88C96F84D2D1A94BC62D842200AA9AD445 +90AD5F6818CE0FAD86BED3ED7AF5D06C23A7B1C0E16F3CA88CAF9D859BAF4854 +C5CB185148CA6727153880B989E3687FDA4BBA7813F98DBDD946E355ED1F3452 +048AA7F0EDF2F772B9BA1D817D20E8AD164551F58A49FE2896541CBFD4951615 +1660B838703BEA7F9DEB3511191D292D294D50C9510CFD28D77A609B503B9735 +F814AFFA84DC3108ED658D753292412E1BD20A8B45C65DE14E9CC2B83BB642D9 +B12104F83F5B68A71D6747595CCD064AAECCACB1B85D1B6ABF06A38B85FE3341 +FE450335B137CA80207D88867A43A9D4FDDEEDCB981BA80871AB1502D80DA733 +95BCA835DBA77B28211FD91795806B801DBE77B0098EBF827C53536033120294 +4BE1362D29F526FB10D79C837E8EE64EA3D8E295AEC15BB017C8D18F4EA1CF3A +9B7F2DD155061B0AA55A9E8B8DEABC67CAE0D1413220403E4B57F60152B430C9 +6E9A0B88732560D04E5E9C71F8BF7919570526C92D517B2DA362619322E10203 +4B5EA9FD024F57E82DD0F8301E271E252F8D170CA31B2961DB4C9C60E5C19306 +B199C28ED9C017E0305A0836C5C74EFFD302C62835F12AF767D539960E642100 +B0C0EBFC022651EA9305286E320BE4C135BA6A821942472421D7C24D4DF2FA84 +E7FFC88946D757D62386143C32E53BD00CF49D459E5ACAADBE434C82F2B3EB1E +58EC96F58BFECA7110F15E19FF489044CFD49630415285BDE6A9D8C2DD263F7D +1B4A8F90B145751507AE3AD1E179B5FA7475BC144DA7AD07DFD4D3106079A36D +18771FD02C7C4569581D55725B5F206DB3276A13CBC0EB3DE7F9085FD69CAC31 +A111D98F2099F0E770C5299221A13865E896742215AE645B8BF2FBAC45EAC426 +B659FDE76FF925F924FC95B24F82C503D49FCD5008E8448ADB78D43F01605B95 +0F3AF6BF82772093C6BA151710720D88FBDBD7F91548F44CF99EE1E646A4F9B1 +8CADB5695994BE6A1762074169263BE355BA6F7181D35740F05E52C3B31BEAB8 +E1BD4D7B418A019F2AEB94773574AF9236004A1297B981B5CD5FAACB58218CFA +01979D62DCAFC235CBF69C99E171AC8A5ED112E6F2E395697DC8D48E670C50DF +969F3B5FC6FDFE3919CB75C2FDB7E810D7C7DD6EE60F1F6915AE90F7B49BE821 +75AE419A2BFC55E2BC2157E635E6018AEB195F99F5CC39F2BB5797962C8CEE07 +36D5CD05544030F0D1ACC86B8C168CAC6D44274454E4AA7CAD3A4A2F8C580C56 +911A4F84265709195AD2886162183BF33E8AE06DFD0A4D19ECD6F172DBE84E05 +2EDA61CCEA24C675AA7545CB63A34DC535F127E668C52AC8754731876E7F8F1E +95E0B76A9F7B6CFA6FCB9D760D309A8D33A660729F9E2E1A1F760498C875E93E +C67FC8D3BBA23AECD64B49FD662131D2D940D8D5E5F3015FD8891781C3A34FEB +774510C33915559DB092FA4DB7BDB7431E5F8A5714E0044D29F1946C997C9550 +8948DCECDD8194409C9107A29D15A7CE24DD0C1661495F541CD490F800A3848E +8BFF0D46BC4B109948F718AE3F3838F308B512C2ADE58DB756EAAB2F3A8710BE +DF4B7F7C38809DC48364E41B76E2535EFFE243981CCE9FAE3AB1C7042C2EE290 +7A4F67CB1609A79265A38ECB9E0766D8032ABE75712DFECD2A617D188E5134A2 +7E8A5A106D86E395ADE5035CAB53A30883AD0E478802D0CC5BB2D006660FCCC5 +1C00E86B378F07A32CF7B87A3D351E151FC5C0B3F80E91D5ADB4ADEAAC81B93A +06C7114F4AD6BE959B74509EE24E3CED4B1FC719F4390767ABEEA1F8653C2ABB +F6384011FCB599AE191A2FA2AC15CA290AFC02A09FFABB5F96312C2B9A22BA4F +3C62EAEA569259AFB5A96A0BE5BA264829CBBD273E3D6DD2B68F6F4201E8E71D +4CA126DC312F3BB0F94AFBA79ACAF57A1CDD7F7328DF1CAFB920B8AC2AB00DF2 +FB0A2B19553AB58A29DB3439B125CDAFBDA90E38E1552C6EC33B2DF2C18AB0FB +3774815CB1180BDFDB355963489C3175DB5CA612B4D67F8498855822597126E4 +FE532300C341084E1B1835F9158CFE83C4413CD2F16FCF27146063221F5FCB8F +4793D691586DACB628F3C6FFB99123DEBF9510FCABB4488B685B409A70D139F0 +6A0282285E5F2B3F2D460067CEF741400C570F8402F971C275EF00278C493B69 +266831FE34FA75D0F69C92390E4AA06F9D12D51E64D053409ED44A232B3192CF +E265A0F34F72531A3339CE5E1ACC4E17A9631BDA6402DA9D7E403F56C74837BC +BF3F167AA8A10AC0EDF889E69E407E0E4EDC260F3F33D3739F5910527C9A2CEB +A09A2C556D7C9235240A27C8F93262B6330B97295833BF165A46C57EEA148A65 +F470304557D3C5B733CA80FF41B8EFCDEE684313C171B4C8A862F1BF8B03B7DC +0DC3D0E9E5FC8771BE5A0BFB05C3494D63FA5F9F7F756E3299B26701295073CC +BEA51C346638B2A861EC7D90F14CABD2248C5CF72BFC26639574689609412B35 +FE3B3FF28581F2678A10433A5DCE9E5DDF6AFC7329E60FF71BF765EF0307AEAE +D1DAA9F471A0E0CA7D0B08F6DD1C205AA7159C29F617BB3C8FB0C0ABC55E08BD +B194865146A487F3843F681B037218C4BD5C7372217EC944B173EAF093D7AC11 +07B194B82ECCC74DE4830ED08047B935BF6B057D91C556B2CEC807E009E610CB +F667B8F2F44590CEDA8D1CDBC4D20F3F418BA417939226593306DB2EF556B10F +19B253DBB3289C0A616ACDE90B4B72C4F2DDF20BB1BC364E2B9ABA45E3C444DD +FED494334254229F2DB30E74A09791A69E8620A52EC3A8AB36E6B2D68A182D35 +F5BBE508C03E2B60F679A1F1FC17CAA481C36B3E67F6CEF174EB4396E4D67A9D +8209061B2554CFA14094C68240A8CFE8A3B1C00B087A33F5E0E810790FBC010F +B4106447EEC505F322C4F100B33D6FC446951EF1E3B7BC0390E2A67D5E1A1260 +4C2C2AB6A426B8B038E2EEDBB1F63AF389EB1DC7F29214E8FCF04076486737AF +D40B431C32FC363DB28AE74D7C08A5679355542890EE54BAC37AF9DD15A04141 +3ECB7E4D69D2D9C00EC73685E74E7773B9645F0239703B35D633875594963FAE +9EFAA4666A89658D763586E7B93E692BDE864848CC732DF73A363CB67BC496FE +4D76F4B79A54E95553153675A672E0AF0F5984604A25E73649993EC85472487E +330E0B4C86BAB4DF6D611220029FC54C9D6A4BFA4C36107AC5008EB66FCB803E +E5720B14EF205A863CBEED9B500C937EC155BCA00FEC77B493723D66AE110706 +21268AAF3C59A2933BA0298D1F27766AE938E17CDE33D8F1363D880CC0381ADF +48E6BDEF3B55BD82B626E80F5014FA64B966511D4AF533B9FFECAE91870924C3 +113CEF98FF7C1D3D46EE22BE0725E3C0DF14AB47FD565D5D0014ED36A34C8552 +C571ADC7C213662058D44B18786727F28CB660B738180B560FEDFAC0D9CD8219 +B2BFD3852D68726C2EE2A9FE11D0A9AC74725E3B3062409183C653A5765A068C +5F247BD87472592808C26E1C8B3F494F898277C0AC298D9DB49E020A36A8F9E1 +3136D7021D818A876F13387AB6FBB315878EE15115EEA81B9EEC3438A12F2003 +9D1000959B5F5A5158A450EB9F054F8D44F2AF27D2D6F83477110748A275A915 +B5804A8F3D278C01C6A7DAFD44C997A0DBB618A40B63613D07CFA3D451C51D33 +03C10894FCFFDEC9B497E7593C45B8F5C2BABD5289A526DB2A67B1F3601E0B57 +1EFB462B1AB6CC4BBF92C09593CACA2C796F2DA4EE87BBFDD82BCD03A208F38C +A43F5908F4337D5CA78B984479B2CDD0FC2901149EE9F13F344B0B86E091280B +17DF4FF0C26CE81F92620252A98957C411A2A2AD2CFB7E546D786DB112283208 +818DF43427DADFA4314247750657977FAF513D0D807D48989FA2FAE78E9CF89A +2AFE21B84C2C91416191F3E2E8D867F7A98ABC7B725C97CDCCDF8CBC3604F2D7 +723852474F811D338292341AC42031F198BC59218088C0A31863B47F0DB0F163 +84A4F1E539C8E196B4A3FCF660A6A05BB8C3A5FD56C0B02B27FBDAFF95A05E1F +43C55B706FC2A5EE52040D744A1DF18D435619D86DEDFC1C8046612AC10A3681 +4D09396F41E0163FEB1341BFC6BE641A982BEE3ECB9C7848874DE8831C777603 +EC9DEB70018F340B6F054E2CCFEC68B7B05E2A8E412461D41721BDC769BD67B6 +E31BC9A983B145A78A4561EA8F903E297B8C2C6E72A18AEFD6D7798FACAD3B73 +70933611A6C3560E6F1C40B84D6AB8483612F7CB94A0D0218AC49959D1C3B2EE +24ABD913E36FD16208E6269C3852C71FE1D42577951735AB30E65E5297896E59 +359BCC3629C9FFEACBC97E5D20DED2112F66E7CAC5380EC67D7C3AF7108C06B5 +14056CA27646ABA7858456FD04C16C8EE6A517B122315925F704336249B64FCE +B1778D94082239DC40998268A023C7F9BBAAF71789EACBBDB028FFCC6FD160D7 +4FE0505B23F74E1A074790626E66646F65133D7E3F4F0AD1FDFA816635D24120 +2B5357270FC15CB041FB85D2F56AAE471155968573B4C439ABB8FE5B55E9482F +8C4AF71BF68325745A149CD38C1741A6771CF60CEBF7927D5D7BC896F525ECD1 +4BD25878595736CDF90E1BC0C46F760BA86B250C9B195E7857A167EDDFD6EDF5 +CA7F33929A42C4455DC08A13012C6B8EAC49BB127D950E619BC943CA995EB9EF +6686AEF9E5FB2C146D133AB4F7E2FFFF44E01700F6F031FA39C1BF117197243A +AC188D40DD39B82A1857EBC78C5084966CB1F824956ED9E18789D98591F262C0 +C5D6F8C2FCE9A151330C2463DA790C85C50087CC229A5AEE62719F4011CFC3E1 +A07E4C3294EF2E50E6E7E3968593B908CC73E801ACDB8B645C2143FECFFF5C77 +74DB00EB9774CE7C64949B1AF21EC1B218848E9E29CE91AFCD03982615563EDE +73605E33B1B0E7E740C7BD11BEAC2CF89DB02DCC30A54D6B60C19C386F9DBA9D +0819EEEF8EE302DA291E90B1D70CCF6BD5C958579A801E9D4CCB14CD4E03B197 +865B66EEDCB85F0EA2FB526D70A757CF8A7C5B37E05DE8F78898E727A5434373 +ABF98B839D0AF47E512F124913EF2A09918C89EE934DCBEDB8BBE36315E2A2A0 +30D3B7C9D4BB8F738CE8E686759EA931BE4CEFEFF3550A0DD64039C230A6A9FB +F40CDF07EE15DDCBB38C2DAA5D9E328843BFABFCF12E93C4292186EEB8F51235 +51ADC3932CB05DA5AF20B551159F13B93D9B5040D04A29EB3D64BC3F79B2D06F +BCCD7C932303E57E64C34D52A553E90C85A0877B57EDC3FE976CD6A3524D2581 +7CFA6F32579C54634FFD469D060D4353F0965474CAFE59C8C1F11CD1B9BB8332 +F72F8A46FEDC0851DF4CFFDC5659ED8BEB0E329312EC88BB0D08C5F12D2F5E22 +4BCCA17EBA9D1EA2E407FFFFC7383AD24F4187F8F476030CA1C8A71B0BCF4F1C +290E4C968ABDBFA6D35CF856DCBE432D11F7F39D3EB87A8D013D6D80AA0AEB49 +B33188EDBA9C09F62DC4A7E06844A5089ED60D619956FDA33CA1475325CFBE1F +A39EEE88E8B556C5822207ED746002311946570B724C597B33669C7EEFC573A0 +5561D4341C21CBAB14E583324E5B66DA0A753CCB6E4C801131726766D08794C1 +D9797196E98B8E3A5A1DD18270374B095CC3FBE4B17037C055DBDC12C846E02C +FAE2147CAEF216A5A1FECD65990AC2C15E08EC30F880F99229A9286C4E65AFC4 +73409A183F82EB2FA5E5B60CA51D1490C53B9A81FDA289217F14F95651290FA2 +1D59E8456073945B10B7644561C15E5D0014ED36A34C8552C571ADC7C2142B29 +4178DE58D98192144970EBC5B25A613492A174655D85678BF3FF0727B94E23FB +0A1EFB195DEAD35D80CD4D1C6EE919C34735F10B3E2FDDB5298E72FB76777454 +D420943A4876541551C769EF6C0B1EDBFCAC616DF1A839E2DF940F9A074440DB +A4375893FDC73080640EE3EF6BE87EBF525AB4076263B49784AB7D637241BD2C +225EAF9E732387D4FCEA7D97445C1DC9386DEBD1987279C753488E52F2FF97AE +49DC99A22855EF728B3743F2B9496B3AAEAA48288A3818DFA171AC54CE1D6FE2 +4AE46FCA7003A22251C368E759A57C1B1D67B5F907B4B1304696B77343F1742D +54356D83326B0D545CE6B8DC49DB5726A3656FEC57456870BD7E64EC7F6DE890 +4092A8B6845AA15A81595D0492029A3F4345F9908DEDA9A35BF9298A753B4360 +FEF54401B7FA5BA81CBDD4A9A4810B46781661CCD72C20F5E2444EA6AAA8137C +474CC789F9566A0DE3C615698EC35D335F66E65680859673EE6A440A589B3603 +90E9A8A5416B446F1CCA55C9BFCF1FD7764794CA151C70B380466E377DE82A00 +329C607B703A9E530FE1BB6705F9661760CA5A4D28C00C9BBD26C8A970802430 +17A0AB8F65ADCCC409D12F86A14DD4A5C7DA308F5C5C3C70A89D76AEF549FBA9 +1D657FF06AABA5BC25C9F83F4652E8B0010BB095D1BB8CC8938FE1A725F848F1 +5DBAE9B5C7F3767BECF1C2862197DAEBE12E9FD441015C20F8A2C7CA041DB79E +42CF5856A0F0397161046527138CD2A6B83F242CD7D3BBE4559246C9FA7615CD +1FFA7D72E763B487540BB51DAE959137EC348899D7652E9A512A4D6804B4B23C +BBAFDAB3FC976E0DB7F4D8FD546F0A68E6973464A7F23BE4AA34C545F35E0F24 +A3824D17FBE806BFD987609F4E2AC1F6C8A56F2AD7BF3AA14B3AE79FB3CAE949 +DB069E5C69D4993E654E72028390CE59D54CE093637B92A283E72839A9806A70 +E8ED74EE7E53A7E4B53006DBE34E767090910A9D3DE174AD6ABA512884B03BA3 +C0E60A55961A476567275A2C54FB59140F85B887E8C2B17A5482CC1BF1A0C9DC +9D7A3AFDFBA7D7963CEF2742BE14F2B4C476EC9354A759A85F77B928F8E2E6B9 +904BA52EE91D736A70CC3AC0AC13066B2CF6DBF5ED05609E3009FA466B17FA0A +97BE72D58FCCECB5DB7221EF2057500237EB1E1FED95683C903A99C7D9C0CC4A +4A89B8BE23C75AF2781AC711EC68B29FB5BB1F3A6D5103C1AD19F9A89ADBF284 +2776BDA75B3CEE6B8B16A472C9A1269BFE3A492B5749D402CF176A499008BFEE +4C5F7BF6960C8E0FC0D69DD282F277DBDDFE4BD695497861553BAF0EC4FC2FB3 +4BEA516535300E343C13B7ADD37B1F6C29967529A4BAD58E1F82282E4552EF40 +52EFC81F7524E83F7239E6EC34630E3DD28B0E0B15E423290FF879FE8BFC47A8 +6E49037E8773FE82B7E0A62712FB9B0C033EEAE87C5EE1B4EDEE8DBECD8C5EFC +80A220108282768F39E9641FBFA6CC820B82A22191BBE5C1638CFA5B1303F17F +B746D97881EBEBECC416209F3BB8CAE9B1539EB6A8721B67003BAC419B073DBC +56F0FFFAE7266ED5439B5631B2420339423A48576F652E61A78ECCC81FDF9807 +01DBE5BDFC566A58B68454EA4C2333D775D4E176ECE2C70273F41162443F70DA +337620EF06BC9103D7ABB95F3508ABFE1017DDCC5C38291E2EDB6B87A3710F9C +7066B862C64CDC8682F4371E54A8B358C7B5EDCD9B5D8222102AE686821E08EB +A5177C9745B8EAE3A1EC4F117A22B0C1AE7037731F9AB167B820AD80DF62C405 +A550BB7ACEF3636510604ED2D6C44B2BB2DB81ECFA40B16226B9A2EB39D15840 +EDA7AEC4B64266481E4F07321F68C4733C612F428F425A1943D6F8511710CDD3 +BB5767487B5266E5A4094DBDD786B1AFF698A4E2691DEBFDE89719257F780623 +83D2C1A29078415ADC8A8D23BEA699DC2893D4857290DC1444A646728330B9D0 +ED26E6FF885E2D243E3BD2BE2F5EFE3127C302DDB1E87FE23F11E21C8A8C6F95 +0DA342BB5A92E860CFCF81F4BA5477FEBBF2BF15C36AE5102FE3B76F5D2F9876 +C108F561111A87BF5A78A036958D506F0D9E1C10C45238CEFEDD60D974075C16 +721BE2E738CBA1275687CE7E0FBEC4EB740B873D242A181D3022FE0F3C65FF93 +374B1C7F466D85131C0EAFCED360A9270BF7C049F570B5184EC0051F70FA13C4 +10FAFAC56DCBE7CD996573A6D0313F55091CC5BCC1A675A618D4012B6ACB6AF7 +0F12FF3ACC84F0E494A30CF8D276745C88DA2EC25B75C01085EEE69AE2E2FE28 +E7EF6933B10C9F7CE2061F36A107702071BF7B2C3FD3B8D5CD433FC2636CE834 +0DE56947F7970B76BE54F518A09CDB7F557F30E8A7B10F602B7934BAFA5000BB +921972C220D291372C1B05B6C1427F88669A1995923B5A13F14B2B3C2C7D5C61 +F187E979A23EB33118724176D9A1530D401FB487532450064197078DDEEC01E3 +0AD9081326C9D3A7343DB2FC155A510BC2131C39B17A1E279BBE7401186B355E +58AB8487FFC56F020A0D5773D1489DD7B6F1BACEE4694763B342DCC668575192 +24814F28DE13B974FED7474D3478BB816106ED980BC9994C48210070AA4CFAFE +399853E3F9C47153199DD531E1FB405D9049F0BF2CEA26F4E397C0F7F51592CF +4C952C8B7044767539C6E314D908EC23D286C4935E67B3B9339F338F77149907 +16C2D5D77E67CBE2333ACD6F7E5034A9ECF725A526C6D9AEF0762EC59F4F080D +DE019C00578B69CBF60BF5CAD8E57397FF5476EE7A86DC0BEBCD356D40C53D50 +8EECDD32B10DF6141F4C5264B9BE3BCDABFC49721A2578B207C8D5950B844325 +3C759F02782BA38C96187E050534E73B9218216718410E69CDF6E34092818476 +9F560847BF8C38EE70C776EE7A114A4A817A05A3F34F3175576E4531770A00EA +4279C811155361073F65BF9F09CAD5C9345E05BDC9E879EEEBB609EC1AD41DDD +63C927878CFF6276A54B70A66CB292B593C198EB9C0AB2645E8040D2A098AEF1 +086AAA8EDF209EFC9AAE47C91A82555B3B2592FCAFA57D0CD8DE86610384E4C5 +4102864A275DDBED2464E20312CFD99DDA77D46407DFBD19FAC6A39573E02E96 +FDBAD4CF2B0D79D17114BC75D5437B64D1159EC8596C01329CB38269BDA3E9E3 +38FC1235AF17FAA093A03ABA1F25989A475E324B2117A94A65D609E95DD11CF4 +FC0BE4C5532A3ABD21F49B35B7EE0F61393BC976B1D2CE23F32004311A7EECFB +4CC59352B03696508616623C00E7FD4C56E69547B5F5B9E5E26A35D18D789AB0 +841E5820FEA8F638A46CCA01C5DE1A2A9A74137B8F33DDB8DCDDCE93C105BDAC +634953C121E92EA2733D8F29E936CDBF37CFDABDE4D99752B6EC445AFD7EA207 +100230F364A51770A7CF13A8250B9C1A0D252777A7696722D1D562D4AA249D1F +E4F0B9952DECEE2BBF6631ABAE6A96D03FCF803CCFC1C9F8D78750CC3B079243 +344518F7408D79B93F9B37BFD1A0FCB1710F359A649F669DAB577F37002871E1 +7B2F024959C0B43DC6923464D018EFB62536F7C52F7BDE58D9816158E8C6B9DD +4C3BEA5DFFACE2B5C030A7D2F02DEE4BE14979CFDCE5117CB2E1337A8DEBE30D +6791EC4E89D76172F263EC0E28EBBDFC550CBE12A13C8B2D6DAE2C3C63F21DFD +8B4071EAC1A6A4D7A43E8902A5E8A2DD3A24389AAC09586077689354781239E4 +8936C705A92BAE86A97EC6F6BD97BF6CD7E211F0363C070B8712C34ACFA17AF4 +40569D8ED4C1B320375342B8752BBCD7CF8463EBB376C406BF6591E6FE5E557E +2106A817A02E1AC882503F4DD682DCBC9B6C458A3F4A53139FCE87F14739C514 +452805FABC555605418D851BE78517A0088802A89A1D1FC0384018C2D56A3990 +EEBC4C7CD636C6AE76C2ADBA3125358ED3BC4DC803082D16C3E275C94163D689 +B7A043AD54861C74726264C1BB05480AF125585F7C89C334C577F78D8EB282C2 +06760D8A721F817284B06862E7B1FE67EAFA4CAACCB1C6945362973ABEA2F092 +A3E45DF945866220E6749780611DD23E08C45D70AF7FC68B14E0F24DC1ED9D74 +EE64AE761F12FF22794C96F8B565E8CA669BDC27B97F4A0F15C93A619D23382D +4BF0ADD34C400EC269707EB08A5ADA04CEC21FFE4B7B27A5255D6884C7AE701A +4596C87ECB908FA96EEFC59494047EBE0D2FBCD12F18CD543039DD09679BAFD6 +4EF6E130EE238AAC05BECDC1B077FEBD0D485F880314EBE049B2DF6C7ABFC840 +E57074709F7BB73513A9C36DC656C72A66D3A4359A8DC08CAA7A5191F1641754 +1DE0FAD43B86426AACF2158538F0477F7222ABECE81AF10F3AC45F63D7A5E98A +BC7B33919F11E16B73526B039A6BB32EA343C41B925270D8F5BB64BF440ABF0B +ADF1D3B55C7FE80F025F85A1FD11E811405AAB3A4638DABF428F8BEC2DBC4AC3 +6FF1FA24B54E2248DBC10CD7454636E97E399A7E06CBC677F0352167E53BB561 +5E30780458319CD708034FA5D50D15A83A0B408603CDC6B2E6E8EE3FE354B64D +87C7DF67F88416B4684E61F33BEBC1561BA8D526E8D6153D01902A7B60645B15 +35CF943BF2862E7DA76FB26E5EFA07E8BA7691178C0D596E109FA7B11F311123 +D77041BFF4E49A593F43BB91DFB1915C098DBE87B454FF6E93F270C2EE8EBDF2 +768EF528A49FE1202B31E51622EA3B992518581F1941B689696FBB73F3CA4D48 +000164D053409ED44A232B3192CFE4CCEBC79A9BF8A9FB7F2E3054A705AE4325 +CB1E30231CB0DDDDA3414F9F77D3FBFA2946EF02C97B3931A2F6F08731634F31 +FDDC662402BFFCFA1BF557F94B1FE9FFE39CDA38EE1FA9FB5C750F71C4AB1797 +7A1A7BEBC63A333B4D5F9E8FFE14EC52AD6BC703EB775EC287FAADFCAE91E8C0 +85B8FA4718E8F603A3CEA0D867B9A3843CAD35146BC03E2C654BE6C207EAFFF8 +8871EC117AF693E5EB6F32AA7B5F87ECEE98B147FA6DDC951DA66FB4F34E36A4 +502587042C7BF9804BD0F19256EC5A6D4479CA0965A7A918BFCBA0E1FFC84865 +E2956B23FE914F02167E4F1573A4CB68BB2F0FA2C76AD93B70DAF8B686861D90 +0069E4CAB1F6556AF49420037A908AB9B06BA8BBA99AACE0B524CA6B3611F7BD +56CF5269028A7F27D4C865DAA62EC2D4975E4C4BABD353D1BE1FA5202AC03166 +45AA6E79F82D3080BEE08DD91C16E50698C63E340D8906BC4BED2B581910D933 +D8A3E7CDB48B0D7C3E3FF2C103F769CBEC1B7ED0E2E65C431A2C270E9F700292 +BE7E9636ADC6BB45060C94C54B1A2A942B27D375490CA2CA59A52AACA65D196D +846AC0DCE9993C761C9D1C789B9A97D64F2FD32F3598C8F095B673A1B277789C +3C32B95E2633951FBC2E5C31D2A58E09065562D1DF151237137B5A5828F3481E +E03232D0A0DA4A2F1D8CE9F946AF9F7CBC582239C8F87677EF0729F6A6507B35 +E8B56FF433CF8586CEAD196CFC2ECB2968F4ED48C4227144F9CFD841A9D8F9FA +E80720E2BAF6E34745916CF64EFF4AFBB2C0D93C1D85E0635BF92AC4DEF726AA +CE31E32FCA39C37DE8DFB217422F43524E56F4739E706965E71016AFE4CD49A7 +1C7040444074BDC90FF1692F84FCC3A3D588D038811B7C67647CE47734D1CC5B +C9A9BE0E1BD3D01C6ECB705D2B910FEEFF1AAEC03675699D94CF5427105BAAE4 +25E5412FC4A75203F2B3BE4E30FAADB18C03FB174B84787F644C42555634A746 +81A192E2E22BAD052619A6CEA8564DBF7145BC5F59B4395881CCBAF2C42E4AF3 +5442B0E0652B44E449388FB7817A679888650573F1C9F7AD7CF20CB97F9C9F1A +BCE4D243A13CD55176366B5B28AD89C6C140E306763B3CF62F8D188F20809FF3 +DB7EB158489D1634006A9FD5D1ED3DEB4D9C9CDE16A6122095C0F97115306585 +F5423A84C87C7BF119A77328520E40365C86A939704C561DE0ACAA6B4D82E60B +C6720B050C37FB5A2F90A57149A835B02533C33B93EAA774D4E491C235FC89C6 +94F5BDA0B80D40BF0E8147397C75E26CA957DDD557CAFFDB72AF86488817BF82 +D908BF63F64AC0C5B27D74B2CC4C702BA0CCB76532F18575D38EBD126E622D0E +2DA54AA0698E72EBE0105DD7FDDB8145CE371C46D33F56C836BFCAC1E50BEC9C +1246FECFB2B19EA03D4882B82E16DC573B59817831914090843BCAFCDB8BB268 +10372F840D0156BBBBE2E2896CF3E5B7B98D9A4A9A2438E956F584599D03BD07 +C6659ADBAD688E2C594847E28D80D586B1AC6995FD6E17404345DFE38FDD9699 +6D3588587B2B01C3654B195AE60787DB399CB81A19CFC180BCD840CADEF7D4BF +4E499EBBAB0AACA2517D9AA7AF0B6820671811D63EE05B49F9F3C45B01F05655 +2345D693624E2F4178381427F5AED3784CB873F37B5371F35AD451C122C0C55B +CDB22E1F984F495B141F1375478DBB41624E57F1F0D63CA0B11C9C9735DE70B6 +9A1739DCAAE01F9BD3725A1D370DF51062DB9BEDC9492C1FDAD99D999345F5A7 +79E4D4D153235E5476F0B3A59CA465156722E45EB0B39A6BC253ABE045D02E06 +83AEB792A8E045D37C587DE43BA5AD2E24ACEA6774C91E41E88B83E3351CA83C +F517684ED5C21C084ECEF4405FCF7B543310B17221420768D115F62427531DFB +61E56AE4C363C341F1F04C99F38773F2EC3C62259F4C7C403ED553B9BD63F7A6 +50CBEA7F0F487587E28F976CF20A782776BE7F9624688D7A5C89C60EC5FBE63B +EFFEC0446D20B76739F372C3103DA920D1A1F542DF2520F9CC5B7F2B9272A073 +5C681B612CF8BFDA13612D8ABCDC3C595AA32928A759EB7703F10907D61BE216 +4BF79359D1B296E7A4CAD00C1F7BC958C7B556C5822207EFD26576E76D31B23C +C87BAAC65D3ECCA28EF7FFAA0FEB68CD49F45BAD15222735399B0306F96000E6 +FA1F1AD338CC17E17E0CA5C1F43AC1C08A2B50C3C786D15DD2581B17AC9F57CB +2100ABF625BFB2F9B3AD38AF09C75219398DBD3FDD45B5F5A18A5544EC348CDF +220FD68D1E5F12D02D00C3C5BA1F5D192C2FAADE11879DCE89B9ACDFD83095F1 +24486B43B8ACBBE65AC89A7B37AF86DC4E4AB89FEA84C466F0ADD0F75CFB4C45 +1D34B2C3DE31E4E520360DCB5829CB45EB3ECD1D3C9C550C26992BC9A2BF3A71 +8F0E6D91FE2FE0F6E7709ACD520B9B4C47E0081BDF2752F35E902FD0BB89B5E4 +69FDBC4831EE47591A10D6B7587CA36C8712E36D1C8D87FFC2A6D3E4EEB355C1 +0F588799D49C30612EE3079C4072E6FA901DBA4BB4CC54F9C3D880C5207C8127 +480BD8B8588BB274601B3119FE4CD94D8EE405956E3B9D418C4407E987DD1659 +74A8C447AFEB06E4A4AAE9DBE321EC7CA8CD79BEBCAAA4FA7A54B4EAC9940F6B +866260134116D47650F83C296A65B677F99CB6978AA0E9ADED4A97E92F225C6F +BF92BCCF21C753515F7C1D718777D5413F93364C25ECCB32D60ADEA0BFD5C81E +C0AD7DB21F765FF70EE8B3FE8E10A40C93C99BB67781C0170356357B3542790E +BDF13123FE450883DECCA7FF068C88E79ED8153105CAE3818E1B5BFC5D5A5784 +E9F1842149E54C675695018FF1765181852CBD82C7828B790D5A9669A707B677 +1BC0CBCED5F1607B675D19793B5C1DE396B43AA070D345E154801911586F2061 +A45D8BEA5711A149908D132DF202E1B5833C7DAEDABA4741F369EA4ADD2A345E +E25B121F5A2A231850268EA0A8DB0CAFCD7C199D2E7DBC7D8A8567D6E3515949 +BF12A758C3C38D3816323CE98F9B1BD0653924281F254FC8A135610C3E738CDD +A1505F27504B85F0F16989E85FCA275411E1ECFADB4574821F26C6740305C40E +91664D0871D43F3AD23CAA6AC4AC771A78332421B4ADEEBEA1E478EBF5015DA9 +04398E85186420ABE61F4165003FE0BF954410455F1E1CF98E1CD9BCDEE59699 +3FF175F92BB48EE7E3D074F0471625BCB886B6CE99E03905EA5790FEC72ECAC3 +0C35FD1780852BF3248D6E1D4489289E815290381463C72BDB9B732001252A29 +42C6C454C2EC2E3CDAA0BBE84CD94A094C12DCD950DAD2F3EB28E8C2E5BAF75C +A04E7D99DB37880CE772F5A9EAADBA36DCEA5054940D797AB7E3961E4A9DC844 +1FBAB5BD7E68C13693EC4D97DCCC8F893A69874A3F0293D687F8117DA7414B8B +B7EF455C242812451BA9E1F38575A2A1E49D9FBCB26AD548F07DFC738AED5790 +00BFE3D82563183AF540749D88789C53BE64E7BC67EFA76F4B319D7B32722B35 +CCC9B8DF7A40109543A0E33F06DFB8454F8E31A1061ABA7C868BE71E233B74E3 +5560D4F674DD6AA349720167FC7767739B2771C9062B9B92C239C0E8018952C7 +AE3F0134DEEF9DC00FAEE97A20A63399B28E406FD90CC42B3CAA892AB93871BC +EC8B55C960DACCC650EAEA2383627BF5736BCA3DE34E6215CAE3278AB3E9CA87 +CCBC6CFB22842FE646A1E2A3BA85107930B66DC486A1E1F78EE5C35B5647491E +885469725CF356762F017408E65818FB07E86DAB7FA029F067A65A571A5E54AD +F6E34988D7AF69F20E64783502B0495F201E46DF12ACFE83998EF726477292FD +3F1743553D9D26389FAE433B5CA2007E75A36CB09FCB96470F81292E4437C8A2 +8F5949E502F7D48121F5EDA252F0C02D7FA31A958AECFB9BA08D6A7388E3464A +38D1EEEA64071722A5C2CE7BA89F220A096D9D9F6D9DA7DD0EF8EA89875F1BA7 +2CAF550116688CBFD9976419943DFDE42BA1351FA2B4C0C376BE3EBC32606109 +5793E8AB02E2DD654B33E9B2F6532264D6FF860CA83C4820411C64DEFE53DE75 +7097F9B9BEA9DEC0412DC1E7F2FD6BBB7A442C60C270EE7CD449BEB637BAC68E +68513D645170342BF3F5B6B2906690D41B787C20A359A0CF417AE9DFB34766B7 +3FEFBCBEAEE982C7FA09872CD93228D9FDD97CB2DFD3A8CECDF954E651B265C8 +DDB4DDE2830A14C0755F198610715497908DA88113F2A9135365ACD7E6E3A7BA +B5B14E461261549383C68DFEEDD25CE29F2D27E7A53EC4A1BBDF2898F79D701A +969C67C80F1C6A1B012598149E38DA769C53E983739B9E045F1681269E24107B +CE6BECF3FCBA1EF02347B5CE65D99A38C4418DC3D038151619C6FF36619FFC6B +21212750EF57026C436A844B59AF0F0EDC11C6CEAAD6D5DBB7A177821D9F63DE +FBBD6E5E186ACBBD3FDE3B534D1676FAF8121DF0C1C992A844ABBD3EAB3F9B1E +1CDA3283C0424B11FB2A612DE94BF4743C8ACF765712D191D61A170F8DAF390C +7A5378DE013FE008DF3217AAC6D52F763A923535CC35763C2B61D2B47C0AA75A +0AAC8706E18BD37D29A3BCFCE4B471F99A317941E18CA27973FF22A0D0A5D885 +6A27D13AB23F687A366E412839A1E3B88E00AD7FA9FA045C41D5986EB0A40B5A +64EE578CB6385FFED63B16304AFB4241A91D08B46A45900A74132F3E037F3F49 +26F77E93CC404F5BA7A5D9F8C4C92A234BC8005B4E4671241A61E61D9492F9B8 +173A6C4B9D8F3151A268EBD36FCB34A44710846BABE1EDBB90D57A46B2993438 +76CD50E2FF8265F103D9C3B46E57D19F344791CBFB5F5BAF705B783CAB4846CF +A15B31A005C2E3031A6B81AC3D0CC02D84D1204E0B540FD898006CEB1ADD9053 +DC1472EF927447DFA54E1BC558F3D4512D1AB5534D73CCF860F4D5E546A4A5E8 +86251E3B1B30472132ADDFC2BC4404BBB07BF72C738BCE8FFAA6135D164A5719 +4E1E9133C5F44E0739678FDDD206F4785B04C351B1F1DCF0DDDFE2FBF0567790 +6C9BC097C00A71DA032BA85036B11511FC54641A6B9763034716220E340B3900 +6E78E1E17DCF8DD2D5EEEFA6DF697ADDA60AD2549CE4F1D619A49399D391E7DD +2A15F01E915C11EAAD0AAC6F1B527131E7274EEEAA28E4DC8398A231D3A44BC2 +9751CB1B2D860519384E909D9454FBC1E9DDEA7A46AE14E617E96C5195A29DAA +B15D42B9817E73A24025E4D686FE17DD515FE0CB61A4A575AEB7D0BB7B21A441 +928177663BDF60082659FFD2A78BD26EB218149DB927D7A893731B17E74315CD +86F0B80DAC54E27051D23EE8A56FE4A9CAD18D0139CECDA56F30DCF88F599FFB +C52E4F30F56A0D4608DC7EEEE87EAC19E8DB993DAE9900211D9F79E244A59B27 +F237C95C7824C90A26342FDB0DD55434CC97FF33511D4A1879436E166811918E +892631B6F065787C8C1DD5A11EBEE1C6A61EE417F8E4B45A1A7F1F50DFE01589 +E5835B0DD4BE4C4AAC9C5F0C596DFF489F6126A199A07F34F791BCD00514333A +4FD2950BC177A79F525549B7449BE2C6C8BB8B9202B5425263690ECBB953164D +0D78C30A0CE1F30EF236BC24765B6D63AF63741979196DF6FB2F2175C4EA3EBF +4226FE968C3672FFD06208B0DD3FCD9E0602BD13C3593FFECCF79AF4585B72CC +600CD3A21873282B98F5C481E2D0012A787FE5831EFC1FE1A5127BD552B9ED71 +E62A9A50627AA65BDDD1B3233B9397E1FE9BEFFC43989B5E6C1AB2DEF8B54FE0 +42CB75D5A25F3767DDE167F368E66F83EA29A812824BA6912379CEF50DF2BAE3 +64717D4768FD426A85C5EE149F191CA800EF6358DBE6DDEC6A071CEE8115D7BF +174FAAC6A8F403271FF26B649EED25908E20988FBC4C0D0F3A2A3A48C18B5AC2 +DA8172A2FA4CE6BC64D5A1E9F9CE271D4EF02C7B3F4693DBD40C23114AF5F611 +8F174FBE4846B7575C84F336D46AFAF3B6AE9376E4B2B5C0EACB21DA081374BD +FD3EE818C316B7D3FA7B56F5C509A9702D2EA19ACE398A99303C380716DFA22A +CA954BF588F136D430251A144601DA87D45D7133E72A58E0FE79C07C7EDFEF9A +2FE1D23AB12476A1FB849B502507EFCE18DFEBB2722067AA0FBD3918F7F9AB04 +315BCD13B77C35BC9661B3974327FE71850C5B34DA1E28C32DBF60C14CA596EF +E21AE8BABE1CDC157D383CF8F7473B92B508491317B3A7BA41DB5929C1528624 +27E6DBD49EC5C8E1ADF63DFE9E3BE2B2ABD660D2BC38E64BB6C1DF9165E00D29 +054A5911CEB7B90DAE29653DE98E34B94F82E516245AB0877A8E26B0BA474841 +88FC01B0349E045E151E287A2E692C941D88C63D583D1AA7F285320CDBE800B6 +0F67191E6BEAF8EDE7C2B44A430F38CEF6AFEC51FEDAAD95397888B7D061A338 +769616C7C50FD29A563527BF8623A6AA5846D2821F7196DD6DB0A566363BD13C +EAEA2571B27421D56596E6D3C83F5D94963241125C817D6EC5AD4F5B979C9634 +EA4E4DDC2DF0864338E1E66F20BAEC0A9442AE03B50588E9EEC46E9AB8FA9A5F +A8C0F144423F2D8F9D3C44EF68E4E09A0E2F984F81E9BD06D9A9A538C0CCFAEE +25746A9CC00F1C5DE9D0FFA7FE80F879C3B5E9DBDB4ED0FCECCE0E9E710836AB +97CBA97411B693546A8FF6D529C5F085BDE380B680EE3FA3FABF2B71AEA4E13C +9B978671AC30C412906A5BCF8807DC55E18DC0E5BB406AC8A317527EB8E0BE0D +8C70324795007691A3D3D3A52C0091F2532C4C19976E04B58E79EBF46A2A0BF8 +2FA89594BD032675C7663104C34F7F3C8193412F69AE7246FCA44E44584DDD2D +ED389F86D5FAE60EC412240A40A111F2D9EE43919C470B3DAC800159B494593D +7F7FE0FB41B994AD131029C4A51B637966E0E20CFB779E822E278087B358D2B5 +82137926ECD14BD2F3E9EAA488381A17E9517CA33B6AA606ACE7A7807738D360 +D0744E4D9F0204E2B7F80CDC9C4101F8F792B686E5AC2CEE1D6D1FCF229848D3 +2BF2E940115EE1CBED4DED0EB9A57805037D92124A03F3750B21B633A1CB91F1 +A62504A20E63D93D6F504F36431A14AD355268BE490C90D67851A7C527379808 +1C4E42774A0E97819400EF939C69F5C45FFD14F04A546FCE1B927AF4B05017C8 +CBAE0BCACC94F1660E40A493A34CA5B39325259209D09EAC0C3342F4C4508687 +FB49285C7A49268B60A9384DF835A79D24954346C854C033A1BBEAC0DBCF5682 +A6E25960467011A1D594F9FDD3FF2E6133F47679259B1445DA68BD3AE4E609EA +8C3A730322B176195BA14C13C2C867491364D57119DE9D994558CC1A4F8BA05B +F4EADB44E6568EF1704E6CA60D1774E48FA186DD9C6A371FD36C80FCBE83B62D +CCC0A090270EF6B410D7431A79CE9ADD196DA187E37C930DD68C9DD396976956 +DC37D0A1AF36CA73F0274FA86491AFD607912408F17CD10947DEE04887001CD5 +0B760F70914696A7BD24629ADA33D46E968C096BD2B59BB74BFEF13AFFCDB4B2 +1E54033E02EAAFB0B27AA4A0E19D5FD519D9E111AF73D816CBD4695F794F087B +023363E3A5C048FEC738F84801ADCCE107A624033BADF6D86FC17A3D5FB823D7 +893239632144E3313CD15986D288315D5123A91D30C8DE870B14C732C93915F3 +AF57BD8382467DFE44E88EE24ED423FA9366CD074FF6977F7A92752FB55CDFE1 +D00CBC019A6E3A33777E2B5CBA7D7E7BABD8B7C191B2796A7672ABFAD8A0E6E0 +543C6BC5312A4D56D8154CAF94CA23892203527007145EF3E344A7A20CB27D67 +C5807A4AA045C640531F5E5B8F702D27757402E83AAAAFE4966BA885BE5235DD +3D50A5332AE2C457A2C7848EDC71D17A71530F250436270D47365D45E70C5E51 +FE4EDC6CDFB7D0DDE027849BA59F70939ADE4894BF36A317D699542AEE0C19B7 +D84109778F73820F99C82F94D32E1AC7E83B733D482100AFA168DA703E5526C8 +88DDE12057EE597E77D486D159064B8EF9053116194E625020B56DA1BEA002FD +41E0A53BFD6138EDBF43070BC392C905B89E456CF2AD1F7C8B0165BB593B8731 +354B872BF2C0BFDFA083B6512F7954BFFEB4B0D68DD18F4406AD9459756FFD8F +5C71225B69A2B2DAE2722FCD1C1B1B5518CC3FE1D4E398F015DCA2A94B5A8BCB +D4A5C099364D7C4FF94778282D3F3822EB425F396C8D54E3B043C69974C84711 +3B09C57DEA203DC8B6B1A41E8730A84DD6524A30DB6972368B7FBFC2902DDB98 +43E1BD0567637EDBE3895C4E7B3DE356FFEC90CFAA907DAB2AA2B453BADDE82D +88C8C0DE4ED8F7853E85D3B4A939545360E6A2BAA8096D5D15D99DF877EA14C5 +A0169689BCDA6525C35B175A6FA113F7E427E992F0F94B379DE46AB43A2E4B5E +97444065AC974779796CFFF55D0009242FDE6AAE4A8B7760829319C95757ED0E +54BB483F8358472EE4F6D347B2636645E6488BB7A286078BCEBC6D07A2A38620 +2C7708BB58CC8821DC4EDCF67B9D4C4DE6A38D9561E6832B9A48D229099C635B +9141E0A4C063F9B77AC66EF78C3451886FE7352CD15484C14A5C93C7DA0A77B9 +FE47B32F16617538D36792B8F9244DE19D75EADA387E7C0D6AACE0AFD24577D8 +A9C8235215980E635AC2EE59B8343EF850791DDF81662D8BA0B9143D19D72064 +752BD89C6FE4B519B9FE8F76F50D957D0108A7467598BC640B4ECC3FCCA3EDAE +23C39C62C3854E358D3EED44A41A2D1467F730726317DDBC543DBBACDD038E74 +E25164EC572BD52008BA77756AD40E704DF8B3E9C2190BAD524A2FD68F1A2CD4 +74FB4FCFE62A6B412F9FBA2D7218262B37A194E671F8048376D604F360F30580 +8CEB9BD6E08AAA72B4749DBFB0CAF953F00B01DF377CAF52034887368138328F +B60C988A9F02D9D3AAF31C2AFC29BB0727AA5FB2E416C4E428F414C57699C1E1 +A68667C4C42DDC9F7AC3A51BC16945370AD05472C33C523F93D29B32BFF27678 +597B870AEE83A4475CEAF64434C1F8941CA9BC0A19E8A3348F9E297EF70CEBD4 +10C65F5B887EC0E817EE83CF122CED3FFE42B5C7D78DE4D0D5BAAE8A4A4BF7CC +EFA471413D32BADF2FE050CDB6C3DC6BF965C8CC17A2884DAD18E0EB09FFF008 +59B3500AA6626CFA1D2C8D9F2F62F3EAAB6B83C21194D8601F2904FFDFC47257 +630C92770FC40666D91F1E8E8733E447B03C10760E587AACB0E431E03E170CBD +A9FF1FC234058F1B813F43FA03987F7CCD03D310B9ECA775B72B83B702613D56 +B94E058D1C1118716A77D1049AFE447C0A3B03C83FC4BF343443F2B9496B3AAE +AA48288A3818DFAC16EBDADC9BDE7B0E0699B2F10CFE04F2969E04BDAC98F463 +F9E234C13BE5D5861FF5DA96E5409D6261EF5051343DA41EF7DEDA1A84C8542C +3963B62C01A3039E9969CC04F55F83322736121551E49E7F7642785A87B9A26A +2191D763AFC09588F5EE57E8013859E42458EE6A9AC264CAA46AFBED21C71C6B +D2B618B3695A3D7F5A9FCC670D60B0D05B760719B5E4002B19904882579AABC9 +161307EE061CB4F460AD9C333DDF5AEA237BB8B5B2AAF59EE3232412E449DFF8 +8D61A32A729AAF572C4998A01B280870B95BAE53D0E64632B9FCAB8F189B37FA +FEC3EF8FCEC1A1B7FC77303BE9A0B5873B8B6739483D4072C5C5AE70093518AD +9000E3CE315A45D019B3C2E2B769844144DE624694FA3894A680A7A220DE0CC1 +F2CD3BBDFA87FDE5511796085996B99730BD1B359883C987339A2FF91E929A21 +8662A364AD55D1AAAF6A11E154452C4AF42A44BEA21E708B5E11CEE44DD1C2B2 +7200E233FA4EA43D258292F8578DB02464D1FF79615304A65FB7C4DADB7D5350 +419E822E60BB4553A5088E3B0088EE32CACACE97F2E345C1A7344ABEC0D139EB +A085A7D4E739C9818D6DD30C92CA794AF7BFA73F86C0C524A4CB8F29EC3AD93F +A9C3AD263BE4F8E963EE35F073005F4B13EC2D8FFC9BEC0C1836DF8B985223C5 +9D2CE7B7BB26FF08ED361E898D8D6FE65C93925D9241B808337F8907DD71B548 +8A941C64D12178A2B8DBB6040E07C628ADFA0BBD27CC95887840BAD1BC57B7E5 +C3D80FD1CDEE64F322776540C41188F416029A3A18F1EAE7C5B5574916DB0C7D +2F8FA27453DF91447D16995CC62334EB6FD4A28CD0DC56E9BC4B14FE8D65AFDC +98697D63FC27737640F3A294588DF91767DC7A412707B39C1C2FBC208B2D73E5 +CD6EC4DF7924D62EDFEB04EBAA1445531E1CF98E1CD9BCDEE596993FF175F747 +D268DE28F394F6FDCB6E34435AC61CF99CBBAF9B5A61D32621D5FAE49B3D8B81 +C61241B36D4CE6E1F57F7FB987E81C3147D42CDFB3B665F65B481A766DFB21A3 +6E4C642A07D20988E7A7DC6A88F5BD6D7ACB8A1F62468C7203ECC022C0120A16 +DD84FD33EA5F1B4F3D569FCCEE79D31A4AF6733B6246132C32DF5CC083CF926B +B118497BD332FBFED4BDB2158CE07717E98215C37D3EB3CEC9A6AF3310889438 +048C02DD5F5B323291939A34CD390BE03EBD13FA9C76F082FEFE54AD9C30ED8D +F04BBA6FD66ED1FC30CF49136625E77057F669992569E9AEDBD94269C2CBEFCE +0C191E92CBBC6408A9C824F9A2E394EE9589432DD04F968558C89D12E0158036 +7108B85B438D869CE8C7F8B077C2D91AA03C08EA55A8208B058DE6FBAF6CD275 +B5E46AB314067BDB1C51BBD2C4C1BBEBFBE8389D46908B07286B5AEEC6B30517 +B787EAB33C987F1FA2B6D8EFA5E502FB7EB698A4B700DCB2C667987A51DE0F5D +DFE93E9EB622F9D9770F069C0617AC4609A15B246ADD331478807B1EDAC16875 +81B6906948723B14D175945A3C89DCB80E953C84221C4A19FA7CC1FA84F0D42E +7A93B344F08FECE42E3B2998699D33E3C7C77416A7195039D8F91F4149195C4C +0FA45C5EB8C4CE8B85885E255C7E06ED9C9EBEDBFB6061F8B1DFA46199EA8888 +1CD76B0CC9A083B06F5AF66ED5A1053A77F4817FBCF046B7E3D686CF1864660A +46E551364122199525D77F9DF706FA92C15FA05E17E0DC93A95C4D46B4105E30 +21C3888F966D005B6FFF950A4911CF4FE9B3F0441C04FBB938830AD88DE3EC39 +7AF9D0BAFA2E17269DEA860D77F7ADBDBF3D8D348873F5C76E69F8AB52541562 +9F9DD4E29F24577C867FB162D97D3CD6C5C0FC37CAB195372FAE4B1D56F192CD +D6CBE2D7C555F849CB46EE4E8A549923ACED6ECB6872B5A4EF12D2954DD2D526 +3183F55C57108E2F23774698EFCBCBB6260AF63D7233E10A6C56AB5558A3B67B +5F96B6CA723CB16810453FB990F1E06217567E4237E9386C413401E2B1C99EE7 +8D73260B8DB9132F37E345D96F8182479992A3367E850F9D9D2208F49A456F1F +12AC4A6C56190A170D23BB304969B0857BFC16F30531FFC2D3463B820158D15C +9C050CD4ED2FD3D131CB5104577F675A4DD2EA85383D49E615B25D88F0F6601C +05369962E7EEE07A57FAA48B43B1A1D005D575C5CC4C592ED9167A5AA41B2D29 +A6E2AA2B176826D30FB249F02EEC1C0F44FDD4DF74A8F70C079AA25223AF3359 +A61E8E0569BBC5DE72D9D4BA55F2D3F8E8A7374AFE2BB1121234BC6E11CA3FB6 +EA6EDD6984BAB0B56007BF7CC58AD9A476727F3D33DD13B9FDC1B6B67463B18E +1975C9CFCC1A683AA3B3BABDA1DDA80E3BB53D78035EE6521D41AAC9B1A9ACC5 +F02B837DA85D258481C92987AFAF70467828ECBA2AC350044646AD370B0F1FA7 +D771403E154150F99DB1672296E2823BD2EE1629AE7A70CC048CA441BA58DF6A +8B3FCDB6613D3A0124F41EBE36A438361E21F854BD89CEAF1BEAEAA1AA4B118B +E85FA56E4B7AC108B4F0FA2804E0B8BFEAF848EC469D611E0EF07AA173DC6D1D +CBC67B8753AA3E658FF77B7565896687DD28431EE75598FAF5E9129EA14BA8FB +EDDFD071262E0838E33DCDD190F68D2E20757CA37AFCBF3AEF1FA9A2DEA357BA +4A89929F29AE099FB05610B99396D166EAA7C6598EC696CD7D58D8EA58DB48A1 +65A439409570DDF9A03CCD80180FC3378181D99026877FDFE438990E66EFACF8 +7F3698667ED21140E9054DDC6DB3FD91105FA0CD19EB71AA518F603FD1B6FDFE +F44126492149370676FF5A7212AFAE99B2399045A27A735BD32589AD2AD073CE +41E565D115026AD9C6B81C6F0EBFDC63445CC494D6189EA60612D4407DDBF831 +2F83E1F2F8BF6AB7845058AC9C9181B8F8D46486C6108D40C19312CEBED38842 +35306D53CB87CD3DE08AA4F174F5B2C4AB9B2B22D9F3F7695CE74A1FBCBA0225 +52BDC3FF4410786185C04F21DE4D460DB6E43B8529957A36890F3CFDAC387203 +3E6CA7B01BACD9FC35FB5C14DB4A44C1F3489647FAFF364F98B3319287500ECC +A91AF7655F64D923DAD3061B593BBE7A0BBE3F1109BEFC01623757144FCC244F +442411E096D44CA34B00B0F3D0125D1BBC15746C93C0BCD52F34F7043B31D5FE +6FC2A7316B6A73A4ADF8718B3E30CF0797DEE8A94B2DBAD869EADDDDFE0C86A1 +B5EE8B38337524D9FF5495F231E450080716ED92A9E6DD973555CEA06B5E9322 +B1A6CA9DC9E2ED3E9B0499E211834D7C78D4B260AA07B1D1AE328B395FD92966 +90CCC73AD6EA7834796250216CF1F4CD8ABF006B6A50A3DB3333B694B10CF339 +FF01F731DDC573AF3EE82DDC0BC62EF781CFAE3BD558D7026DB6D1E2CF5F084C +E3AB663C143A93AF46D470472C11D6E3C39A564DA23E9EA8DF8BF3A5E3F07DF0 +39E95FCB1DA44E2622631D967DD0B8B58E8E24D0224008C351F87809E70578BD +97E1D02402D631041D63D458C1DB8F222EFDDF2C4B915D4EEBE9B17608A32F44 +B26DA28481F353411F9774670DEBA48A53AC833F4251F04D159DA667468781C5 +231721BE1C76E177175CDA66BF46C25E84FDE4F468DBA0B9560D738A1CADD30B +07362C6495FCDCF725F793E1D5B4975437F7567191209F6B7916CD9B58424616 +77E8ED3B3DC028E715FC9967FEF0B00AB87330CD580EA19FC75066D873540863 +5CDCC0156BB105B6495EBB1A26462835C09E8235CDCA3224261089F5E99B17DC +C21F4C467F7FB83486FAB7E75099FDBDFC9E518A43713BA46ECB346BE217A2F3 +DF3E3CF74999B1CB02B5249208B442988AE5D9431A271BF6D16323ACEE55F1FA +62CF9AC0C97D5A2EBDA229F9630955F5E06F62F72BACC9B6558AA3E60D8FD4C2 +DF9BA1B8CD46D27DCD006B524919205F68F70D1081284AF072BE982CE3592DEC +D3A23016E5E1564AB11EE10C5B09E476E049996FB49464F74D0605FF377C5CCE +A06F0329E4A9DA39D4F6EC8605C490A58E18732D6E93B7070BAADCE2F9C95A76 +CD17A696DB07E68AF9089DEAACE0DADC5290ADE2BEFF9FC918F399773BA58BAE +417570D2B23AC1D16D0576111071F9843E7E405B5D57F356EF4AF05ABA3AF2BF +9C0EA3CCB2B7DC11D6579F1C95577ADCFDDC4A585780D02177F2F088D5CF0C73 +1EFBFF595EC6B1DB8B028342D5DA1DC1DC3AECADB99F18BDB43CB2164AA3649D +1BCC91AD95B811B91EF497A14237C3B5EE1F6785ADA67CB799C6D54471947110 +4FDEDDCDBA16CCD839D917D5C10B78C4A3466D34DF751FD9732B6831FE34FA75 +D0F69C92390E4AA06D22F07496BD4E3E80213634B10F7DBDE3F534AAAD5F9D61 +BC16E9E38A5A389180BC218B420B371607F5C2E7376B7BF06321F4026AADC529 +565CDA5CFDE66638344880CC6F85A6E4576CE5CA9BAED5748281E5AF0F1E4F89 +3C9187A47B4CD8A4945D046E0F7F825A0759523FDAD891125F7D1FBD0A60B14F +481665CDC62F4AE3766ACB71AD779ACF9A9A2BC3165FCA696BFE121E1D69CDEA +5149029A46B9E1B59954F7007CCE1AC4F1465E19F5BEE29A0514182B9B957365 +12ACCABDCDA1EA2EAC3C1C4257740EB8842322AE7DD3DE694AC27D5E787F70CF +E71FF2C0BD024F25E569BFDCCD456BCA6134F73F11CF8B9C160D3CFFF488CC65 +C440766587F62859D350DB066AD380471D52712B846F6977A815008BEF5AB6DA +89264846E4FE0C6A3936D0F99657223A0A35192F3A5B8292EAC86B9DC38637C6 +7400E0FBBEDB34B6AC1E4520E1A765BAFF3793FFEB5749E0AF065890A9267EFA +8B48A66C608F7CECE80469201E64134B6F0E06263CAB0ABE5EBD5FE2D26F7730 +D33F20FCFB008D737650D73C050BFABA8C25ECCF847B4FA9E9B3EB82A1277365 +AB26198523B43EEF9E9FD0EF852EB0AF79A5EB6A574B199F17717E8A36B9F577 +7C45E675842E9483EC5B3A2A45BECBAE73627C261A141D432524FF9BFE733F50 +A7FCDCEAAAC7E09BE1703B8FE781EE6D020E3A5A7C0D8E2A0870049D7AD9E574 +8FAB8C19C50BA2BE98552911AD5ED98DF3323A7A8ADDE84CCEB80AD00468239A +9079DD2FFFB98E6181432F3C28BFC2E503F0E1AF77CCD52BB8E3CB882833958C +A66E537F4DECD492A52B4D84F183AF761F112B5C25157E4D9109A2BE5A68E8C8 +E2BBB1FD203011B1BC2E1EBC71F5DF033FA446BBDBFB4A344F0A7750DE134EC4 +DB095A4E7D6A1512E1753B82E9A3484F89500A980FF5B0FDD7C26FFEE8887428 +4F7220EC96E7B534C21A1B3426AF9C77C744CB7FB9DFC30F0F781BFBC8E99339 +6B083C93E891FC6F543C670DFBAE15CE91EA3D89D7BACF8C6A5F33C568988701 +EAF0C4B0F61DFE6F39368C16F61F24BE1BDF1ED890D5328776F8B18AE46B65AD +01CE58A163E2E0753A66DCE85044D5A247AD2DDF5FA0E5F1E246CB946401926E +D334CF173666EF7B7465AF4DD5363D788F73437794836C78D3737C42B28588FB +5B0B3CA9789F2C7B3D24F81C40D1D1C9A93EB94D553D542AD31D6B6D72E59CCE +ADD4EFE91D35DF767B697F74BE531D3B1B7E41694B03D9959B42635197E55F03 +1964060151995222E14EC3674511D11C7E0D12B455E06B4C58F6E68F8EFD7D52 +C2A8058CF06EE121A7675E8F0AE43962FFA9B926ACEAB59CD22AED3C4BA274B7 +83740163AA31AA7AC5DFE1197F5F7B0AD6FAA5A61E49B2592F55D26422533DEC +D96F02C52E1FACA47658522BE4AE1C62CCE9402A35FAC32CECC210C2566B1037 +798938BD3FAD9A644A43B2497D9CFF8F3FE6FAAC42FD0E05506A827D20B9116B +2289C0C576DD84A2CF56F2216D58A02E35770875252E8CED1A0852A271019D39 +DB5E8E3AF2D53367B1E6EBD9A7569EC47F205BE79E4E04ABF82BD903F8E63B58 +A378BBED7CB6E46DA5D925A2DAE53876BA43045EAF35E317740E876E5B62CD35 +A5CA39882C6B0E221189A0700D8C5DD5A5F8DA3FB4477F133CEE733D2D8B60F2 +12402AB65F33C60FDB1228C5AD909FEC71E4C55AA8BC099745935F062BC327E3 +1DE39622A2029AFAB81DB3E7537C3F8E25BC29EBA7778C1D27AC5EC62364DA6E +0C5EC40A6450A33EA49B2859775D4D411FE04B82E49D2206783587C01C312732 +D86FD0CA9AB0073385ECB1C467CDE5B7D1E2FFB85160322A183FAB4D42E29B14 +68389BBF90BB149C68A54E8A86F6B312CF1062FE054FCCBAFCB1FB0EC2DE7A32 +DDC37F6523FD75BA74A5E081E6A953D42DF419FD475F9AD75D13D3F43680759C +54C91A0063A07FF5507A34F401D80161A57CC1CFD18A091D701E90C47E1A084C +CC8904BD693E1A090323A44ABF57AF10A716E899EAB7FB62C529885778458815 +0491DF470C278AC43E97DCC8E42E31FDF82448E35AFC5F90AA018BFD44E89BD8 +64CF63A653AE5F0301A06C16AE2DA06F85ECF5FCE8F7277436BC5777E2588F7C +4889627A5EBA53AF2DD411BE8E42D4B107335EF0887E795766249EA1ECCDC25C +60E8A3DF38F27B1A7A1DE94536A24AA61A47B1A58A5C8D82A4719B2A623EC9FC +FE5B319DE2507610DDDB610E0F68F85FA61A4A98EAEB075F254983510D1427FC +2BF3DEFED5B3F3E0842FDBF0B4BD869BA3570062C5AE28C23D313121A755CBCA +72C9373CC8A7F947B5895E3B48C808487ABA6CD967182D07C139A2F87C2614D3 +548AB2DEE5B8AC751E38519F5EF4AAD6612EB7C37A8506ECDB2AF78D7C582160 +35DD2D098D3372D464D2F80D67D92527F7A73A9BCF43682C3D5608ACAB6A0013 +74FE99A300E041D441ACC3DBAB6D518EEC5D8C382B31943816E86708A5D9EA50 +B80AD13C068C03F974AFFC81025F3634E5A4D27431B1DB18CCA974673C286186 +8DBEA1BE4201511C2196483CFDC0453807E41D058FE72F1C35C614E8EF883AF9 +7D367CDCFFB56C08BB3BA4E1DF255585CEEF4463EED877B19D9BFACBE40AF9D6 +A3ACA61B7267BB58C245637BDE582428E743699DD44EB86040D5140B74ABBBAB +05E14F6AD82E4E4E4FCA5A7920FD3AAFC7C279DA4B6D3BD167A542ED2E43D8F3 +0485FABFA601A1AC1544BE674E4BC9E312110746001D5988A53C0483DEF88E7D +5E04D3871C20F384777D027C71522BD15FB90240EA61D3372C8EC2A2714C544F +CABCE014D24F21CCC067636A69B1AF18796B7FCACC9105B202FFAB666A8C88D3 +FDD179F26B3D26D7F5B1FF2D9C5E8743F566EDAB756423433A1807BF02487078 +D0278A68E0FE15687AEB89B30376B33ECCA2F24B71243CECD91DC5AE4E7E7520 +FE5F6D7C8E3850373B811A70C4E6AD8D4A8251CFC397A4B4DE093E154C1CDA2C +40EF94409219099B7B5FFB13D6B3AC539802981F415B3B6C5F3F28CFCCFF76EE +84451C8758731207DBB578FD4B00DA83A4CC00B5599C78917D3094538081675B +0B825ED15589CE492D884C0ACF2BC4494DC0DF29342C28FA232E4AE96F51B5CA +0C0BBDB7D33C07FFF4A2ED31221E15D1673E1E8A73785BB35EB5FD10C2485C08 +BEDC0D02955A1DEE8764F4E855156D95730D32E9C705979394E136C12C193A6C +17512383CB27BA3B0A3E30210D2664BF91C73AD1A8116CF81E253CC1B2444C04 +CA2BBA3B85BB230DFA63D61677D2112421CC41EC1BFDA7241890659F18E99987 +62B6C788B98F89B305B1BCA2F63E8D2D7ED3404015B7A2A7EEA73ED0D6C2F4CA +215CB8B49D8A8C7A69B8FD123FABEF33D123FEB521824D87D8B4CDE4650B1163 +1704A068FEAFA32C01F50DD76557378CD7F561861F9DF1034DE2470D2D3CB01A +A1861DBF4B44AF32169DDC5089643986EB635B3386E362EC7CBA56DEADA4C60A +0A51B1A0A6C24980220873FF7F3C796FC5664490597DA5F2CAC7C0013B1B4F7F +7E929E57450B9765F71037620E73A80390902B271721AA252D0151D7DE2478A2 +B21D9E2966FA78AAA7B20AFAC4C8572A5A86D808F1DAF906C7334F8CCD3A80BA +07E9AE56AEEA8F908C92A64133024A5D562ED72A737596B2563B6865FC8ADBC9 +3BADDFEC1086D96CAE44574A91266178B2ADC607D752495F20DFBDB54D5D70DF +178A67A0BEA8293F44EFDFEA96C89165EBAE7082C8380BC3822DDC41E023D259 +F8606453E9EFCE8D0203D05AF8E86B2E02DFD3FD273E7BBFCF97DC03E4ED8094 +BE2CD5E3F1210A8ADB7F5E116DD1FB0641EEAD89438F3341909E4A774DC4D4E7 +764D973E2404098BBC33ED3C398CEA6B311E0F445D51E55F29045C839EE74BF7 +BD4F25A109C34DD931F1B59DBFBFD8AE904DA4FB0E42C960A28F18196605C38B +F30515A1C8919DA7FED3A6081AB5054879C509DFA61A3E4DC49C7C8CFE9373FB +F5F87E91C556B2CEC807E009E610CBF667B8F01104D4ED66484DC2458A29AA0C +CCFA596ECF3FA247231C3CDA0EE906C5A341D76525EF692D42A6EB876FB0559E +4BFD6EEB311F9C71D3840D3453236B8F2324F5FDDFA4F26EBA2E5A803D1A6917 +E6488BF7469089612BC578D3C0C8F85B49E54FBB28E2127A06C26FD439BDC798 +153083023E060292F9EACAA9DB8D45F1E9C9EB1816CBB6A93A5F188A3CB8AF2A +2A4F5C6A224E3E7405DA63B05F451A01A993B6641CE7A431F739AAD6452420E3 +6140620979205FA03535AF135263448E11EEAA9C42FCF442B147F012B77EDE09 +B538737124AB34397B5323ABDBE6267DE71E19FF4F6F07333E5E409CF9B0589D +C8378DF3BD4BD4BC1E8864C9C22485E46A2A1E295EA5F92691F48CB1CB2A2340 +094758795F33F5A80361682F6D838CEB488F17D7FAD781C77B1090B02F88666E +A23E30B3AB6456279DECFDBBAF8A34BBCBA6C09E2E8FBD40A040FEA55B70602F +800098F033DCA8C0AF1B92810779E16E88A263629C6C375ABA39B22002D97686 +805748E73146B462B0C69172AE17D6D6923243E9D94AB560158E090398D30A99 +5C2958D703B1359443E2C528A02E13A44A7F157A504E908773850F02E89503FC +4D5C87B43F60B3C465857507A4E38F0AC2431DEEC9C07444803E1D7D2B8C90FD +AC2EE8ECB4D53DCD3480134D1EAB291645748307DE1610FF94FEADD64D8BC6F4 +0326C7F478DDA036BA52BACD1B37C45E2B75F62B451FE15B3FE94019A96D8634 +369276C0308838BE235E25DA3D226C596FB81D4657B1720DB4702BF0B74B352E +A43F483463B01D37D363139490B630EE4DA9912E461EEBBBD33AB0C871AB4417 +7E4F68BA74334D45C4D65021E8B58D8287D6241D2D9C19F54D415227752D7D79 +AA1B89FA400DB65783286EC71D79EB1292E6BD02BB5C388195E801FD9036FCEE +385C1811F984E4B591F2B8775F3B6640F89349BEA0C53D690900696B7E925227 +205B20BC26151D66893E312892B18CC5189BF04B9F008088CF31AF7FF1EC792C +2392B10E3381F2284E4B4AC7C631DFBCE50B4075604E5AB320C2681ED768ED5D +FBBCC9D012809A2993780F5054D8BB60DCCACBE4ECF29B9F2A238886C06656B8 +12C6267CB9AB614FE75D2F96E1F6211BFCBC959D5B4B1FB77894E87D2F4D2657 +C64BBCF7A0477903CF2F3D58BD5426CC64C9A6BC49F41D3C2A0E058452170319 +28B5B8C1AB0D167E0872C810064F456FE97CB84139EAE7D0D2463DD455B6CDCE +9FD3142D5124E10E9DBABC8035E584840B3443B1DBE0E24173B967C2402ED0EF +37E1F832B804BC2F59133A3681403332451ABDCDB1C48D70BA565A6D4EDA8144 +E784A305885914FB1988E1E2734FCB76124092E8E4A28F16F8E9805BA1E816EE +9C9C3CE461C07435AAB8B16C688465240808C524116832D9597BAFA71D1982A8 +ECD3854244CD04C0D7EA50521D4867931F753EBE44B088014CABC94A95A9E281 +23273D528804530BE9B1FD33A0D3C3D21F72293ED3A231A099D34302E504EF27 +ACB5FA3BE4C9F3BC5AC4D3C354E86E8F460277672409B75AC1A596F4B54DFD41 +61260DC50D9A823679C5C6A54C0CFCC6AE6C08B6B69DAE76FD256E105FAA95DC +608117E4B8F212F5EBDBCD1D059EB9B938EDED6090827805580CFFA67D8BACF1 +15415321B15C46C571371DD8B809FB3664851171F1484EE1DB31EC8FF38DA7C1 +450AC79E75E81B8A2305925D54C8A5048F2C2750C7C26C6B3D476DD6D79A986C +F3F1131706DF7747C0CA6D9049DC6C3A7DF1549051AAB0C38E846F34CE7F4CEF +4E6B6918B78F4F1ECAE6A220130D68511235B3DA8EC4BEDA71B62BE15618351B +2E204656A182EF76C11033BA3F903CA4B7976EF7F29B0529D0094ED2067E5929 +9F22E19F8B0CEBDF0156E4AA918DE4B5AA7C0546EEFE2141A7A833332B08822D +8B28D23AF2A46B9879204B773DC4AA566AF9FA33CC1668386084C4B5FA223C90 +1B96EB26ED2C41751B7B27558341DAE930887DA88B44EC85586374C30DE69F41 +B8CDFD1E93A79579374E8ED14AF1EE15BEBD59347C3DD89DF2468D2595DC8A61 +FC3BD1720A252A0BDAF42BE2AF52203A72745A23C1B123DBE2FB5DB44953610B +2F858899EA9E3B76C1AC284908F08D684BBAF6366243BDCF27E2CAC4FFC4091C +4A83012FC8EC38BB341BC0FBDAF1DE7754ABC6EAE808D2DB7954F4E6E82BBFBC +B54A538A53914FAEE072847C5C723F3F9F222F06FBA3ED09A42D6082F8C37EEE +AF0241F07D3153372EF47802FAC2EE63F9C9744F5F9865C092592B075E4001DF +7627996B37FC44CF1DAF42501F6ADA9AFB94A521229267BD53CF08C274B617A1 +90B28997777000658F086521013E2B15E695B78D118369633B39DE354AF0CC2F +4608E1355492D289690A00EE5A04E8C7AF674B3DBE88C899514AFAAB6321C56A +E925A468F5C1596FB1C695EE448B9723C6CDBFB8AE2E0CAB7A4F734D58DA578C +1773437395B14824F0CF299322F7ED33CFA6496BD3B27137D36F9E3690AEE9D9 +24A38AF7B071E60BC0FB06BD84168662CE09F4A38DB14ED04B5133AFD91A323C +F4AE8A2054F2FFD1C4368FDA7A8D584AE68B5E48BA4496D75F380A4044522206 +9D03AB81695584DC74F612B98BBA19FA6BF1EC5DBD06D04F1B0D36D485991C09 +720325287B2A2C259F7A4E7D7BA2658331C8F987ED0D3EBAC5933E778D743DBF +83BACB647E014D8D770BF7878BA9A0164562652B960015CB654F0E69AF44EEF8 +C01495DC6092A55BDAC3C59EF50046ABBC79C963CC00F7C9D38252BD9ACF0FF3 +1A876CCB7EBA5E43A3F0A9FA5C65189E7BB448DFED141B06FB1669DC1055631E +88DF65DAE08A6ACF17ED8583065705A7550E81AFEEE7D0F18931878BE457C233 +53D510D5FC075CC13AF477F1FA021D670AFCE1784AC101C8819F550ADCADAB11 +4ACF42BE8CC829767363466DA50BEAB3D9ACE76368E2EDD239EFA59C713442C2 +594B4F18B6637C530FB9A64218B34C7D0AB4C60FFFA5FA6B6BE561C23B4BD263 +D0C86DAD4D6972FDA3F5C465AA59402AFFD1B15C57D9F6D0F37943059DDE6C62 +F678972AD507FAAB162ADABDA9A4FE19395C3DDEE1CC4892519E79C571E63B90 +9C6D068EEAA373F29A4B09A9949186086B9ABC743AE3E7D09B7313995933C117 +87C4EDD5BE67392EB08E48365893E8CCF4F8F2589C3E790FA8EB136BF5A4AEDC +B2E1009DE94CDAF8847BD9602957B17614F64A56E865CB1000F842F01C66D69C +06A1235756985ED1242F038821CD376A7814E05FF2B18D5B5DC353D4E45F5843 +52A68183C43629A34D30FED56BF5F514295D127E199CAB5DDCDABA9DF6B25EDA +5719D04ABBD212D7B6F66FE20EEBE1D7AAE0A9FCBA76E21432C9D509C7B6B045 +44A28AD70DEF21BD5D5D3B508F95A6E4896292AAABDC4E6BE5600F17726CFC28 +3BEB5BC500BD48BE92BCEE565843EDCE09FE678FABF061F21A2A15549F9C6969 +03C8EBD991DA56A7D88B7EEEDFD4AACE36D919399ABCDDB2141B81F19323F243 +20983527554313BB39029DA04422FC5C1E234F1A798179DE5486AA60231620CF +DE5D060268EA0CC2D1228A1EFE742504CF42F011767D814F587E1A4687EAA216 +C40A8D70172343198E91F9BDB69CCF84EFDE1727B9929A968AFFF1DE01D89461 +11EF6CB1382EA4AA5570B3C60C7C48F741E43F74F7168DE56F9791DCE5BE50DF +5FCC8E9EF7E4437397C8D0DB156020B2361BE557AB2AC3CCC1EA754DBD2AB2F9 +936F40BF0650299E3311D525EBDC48AB545F887B06CA0A075AC1069DBD6025C5 +9B801CD2CD0EB5B0EB2EDDDD24F5CD1C71D1EF56C1AD44F462526E9E2912EA73 +3320A3121FC6C37004639DFCC6067BAB7BD0DA3A2B3732B2A754C96495FBCB7D +CF1FC14D6B993126911642EA32C499AF92C436DF97DA55FCCA98E50CB0B4D38F +4C24DD07469C13A8DA1ABC054224FE9AA6DB6CEF0022CE55E083DB40611B22EF +8A40F84AC135951269C208F0DE9BDCD2E3785B1A99FFEB2996A8DFD71609DD12 +BD3B6FEA4DC242CFFAEFECC02EEDD6DAF26D6BC385CA2364B10678C12DA8B745 +DCD2833298C50E02CCEBFF5DEB9CE3DA2D5E84288D7F63DD283BD2180F7E58EB +B8CBA3CE2F39BF65B388956DD060150C42CCAF3B99888EEFD9DCD29C79E7637F +240743230CCBCB4A392206649C991CFA7645944316ED1760D926B0AD5F892A74 +9EEDE457282918A20279C5597E7A24164840547ED1C03D17A08B7B26F7EED905 +59DD0EC8C6995AC968860D26A728703F8C0262BC74D49A0F8DFC39A137B44FD1 +36B7068CB2A19F03B85C418BA3973AD00969E4DC1718F94E0A4D682BBF7123EC +0B8D695BD1DE6C9651A4EAB6B7DDF05FD53ABB642E4EFE3A6D4E81484C178CE7 +AF9E655E2B95D1EF90843DB9E454EAE423F714FC9DFE93D8EEC738A815A43C61 +9EB5A96A479EEB31534BDEAC74876F944322269C662A63AFD312A8BE2C36B011 +D0E68795A8280660C85266355BD0DF42993375DCB40440E6A1AE3EE46B1B000C +188AD7DA050CDB91F98F05E784DA742DC3119CFB702A2AA53C9580112F603C89 +E54C44F0523B91279DA3049E973009A42BB42D125C4E492A8D5E0F57D028E702 +D6D579DCBFB937F8B04D3321B7D8E92A17E171FCC33A720A01887958116BCD4C +0404668EE50A4C808524266EFAD3BBF8CB6D57FBCF9990666EE10E4155905C1D +B6300A7FB442E6EF4771C7CD7F26AF6901E8F5E1323DFA7E6B7C174FF61EC768 +242DA6B9B424D818197A9BFA73877CC3031ABEEB51F7A2B2371FF0FB3F661538 +7B679E5B1B00F00AE4D22ED641624B5E5644D13F8D0E14299D7FE9507F4B3D73 +CC6F243BDE8DC202701BC635FD0CBD4078D3E75148379C9D12FBE533FDA82928 +07879C39043D94CEE9E3980DFEA127C455631F6B0003421507F5DA1DC324E8B7 +1DD031605FC74F0630396FAE502DCD45D2913015A2E190F174E8236D94885897 +5727C25CA77DFD3403187DE17D622DD5DEE82298D78565A53E31B93750867BAB +ECB331596B5725B1DF9405CC4D3C090B0759B635EA78FAEF35876EFA867DD625 +F6C7326C7BAA4EC6CE5A2861F8B5D1434E24C639B6E398E7B190EC50299E2421 +358FDC085DC19CD5BCA32D32E8239280A581B384F2C8DB8A3020AE6CF5B05172 +043EEF80625ED5239EE5832F14677FF67B9488F1854D1DF35CEE7B02B9A66115 +5F851620DB80E3626F7CD2C097D330874FC3388F193F14729A7486744E6167E1 +7CF63919B80719F7255547EF214B703AD5ABA97F45085E34B7B57A7C2465C2BE +9B5807D20FE9B911DEA468718F80109507258C74077CCED9ED9D59194DBFCC1E +59941052F6CB81BD3E7D8BFAF1BFE23F3E3317103D210AE077ABAB51296F8636 +5CAE88E8ECAE9380E6E8B43168EECA559204EDC07B00BE4056FF54788B2471CF +C6FF72C5E47C50479CC2285BA2BE43D2F8F1E3CC07C06F08AE5D37F1F3C62908 +BE8DAC50F150B48503410F2EBE52C5830A34647669AD688D6F8D0E119BEFD431 +3BF06100271DA8239306D371C292083CEA44278C04D9951DE7ED8418AC1C4930 +4FCE12D1D47197A1E8B2EF5C3FF1F238C62EB1F420368534666729B09636AAA6 +EA37F4BA8A7257AB4163FA275B5400D64C77CECEAC9F4E9EC6EF748D7EB6FE02 +3577B34E9B182D30B13402B5E896775E29749033D84718E23AF2905046AC3585 +F98740FE96D894589AA3705E0CADBB7CF4FAD8F81437EF7A3C1C655B742844C8 +19E8F58EA5AE3F537DC7268640A9D51935A13EA788366A7DC48FFD746383BA34 +DB77DDDC99B11D3A0995F47B71A30DE32F3343E586890448C295B8119E2966C7 +133EDE8036795D0372CF72683E7E11B192023A05F3A9DFC0D38470D6A2EF2884 +43D4185FFAFBA55D5B51A73E32EAD43672D6F5EEA5530B41FFE5A9C7752110D0 +99254F9AE2EF587D73DB054474F3051B6475778AF9AC50DCFC4F1178EFF87067 +807096EFDF37598833C0ADFC0F51DEDD13CFB2934050B2D97FBC1807EB920627 +8319561BA81F29E528CB8452F013A5E63BD14BF07779F2EF4C9521144EC2C31E +ECFF8BC892406D370547B2F5809B5DB70B332C051410B2C31AD85B08C2B9A6E9 +BA08F7A237E17B7B2BE6F9499D1C59CBF66F1E97AFD5DDF2191F7927C7C2CF35 +AF1F47FB1D057A092926353C2B18353BAC388D0EAA43ED842FDFBC3656985B9B +C058C5017E42FFB4187E1D788D7319AE087E665F3336A1B74C809012C91DF448 +79F2B65DC51C16AF6106F8076AC760B12C2AA6750A3E32DE66DD05DD95F849E5 +4A54E3DB8FD43D152ACB6A365A4929732138DC3D840D1ECDD23B87F2AFA45CAE +52E23F1CA28109A895A39044D5DA9C36E57115D3C7BE2BF1ADB87A16D4884D0C +B668672B1668414165D4DDE0F0ACA82565F8289979B77D912726E6FDBBADB523 +05B4D7A6EBAF0B3B124DC3092AE4043F08AEDC5F6F5D339ED115BD4BB1602E72 +E5645422CB1810121E893CA5B3182BF0E720505F2A8A360BCA6ECB03E0BEC9CB +37A26717F10101597BACAC9191698F615E9A9EF8FD1FD0A762C52E5493BF8AB2 +5A74A3B0011D159FB0F8F17231BB1973913FAB2F5711A802F040503C897493B6 +3688EB894032A7B69956C3D5A43884F59EA0ED5937551FC62A42263F3CC5F7DF +0D4CD131370B84B6652FF35CF6B70B228238CC1E3F78F3DDD564C01553871225 +01754AB463E672829EB894824055C2B5F4E5E698ED89A0443C92226D0A9034EF +E217C6992C1DE2E8890DEC32EF16DE266BC5E549792AF65D4621CC50867276BE +B8E5C2C8EAF6A324CB5A87516AB3EBE991633E72D157CEA8A32AF8E53ED13F61 +F3F2047B1367538D70CBE32AD7B98B953E58C8E79B7207C1FED860D7C7D8F1F1 +8CD88242705CC52C92EF60A35AE1C61BEB1B77A0C487AB4E0A5C30948B1A0610 +84D6F2F7B37B28FF68AB3F8E91B548BA9BDE008DE9DC97654F1C2ABEE411FD64 +6CF09DDDADC6F93BDBFA53B31EACDA96EA4AD8E922A332756C0006BF6C350D49 +7A5966E8BA66AE7DCFB88EDE0611AF2434D8BABC47016D64496502CF2DEC222B +D033C59EB3272DD5E67767764A562705F430AEDCA24CAB0C1642E0DBB48E254A +CD5762CA1EE26BA6D3DCDCB3AFEC1C124CE85829A0E77A942A270889C611A304 +8880CA94FB8A2282F3E7F61AD66D7EDCEC35914C07B3C0895D71624757DD1F01 +B7552C8508CCE29352A9AB9C5388C395C8F8EB57DFD931C3A41859EDC85EFD7B +C57613CB8BFE25D53611B17B9D401715B887A052B7FDC6F834CFF5323229A332 +AC6570ACD495062C2959080CDA2EB1F3089E371A400932E83C061E2F5AA1CF81 +2D5074EFCA6D62C63BBC33A7BCEA326A645BB8D65908B194F49E7A194662757C +84149FDF3B5AA99C7FE890F770F24BF0EDD5B6D4A207BA9D7C30863A9FD4FE9B +00125EF4043596384C7ECA3F5FF605EE38FC54D5588F254793B05D6787051E17 +11D7FB845CDF9A696CC7166D08686C54A202073C576E43EC98F5C293F2C310D9 +EECFA6296E8EE0A258F3E45AF80E6FC65E79455D0243B21C6203E779B35DDA40 +430FB12885F84939528F277AB246CAA870F2BDA764594B4B5D018ED197522D81 +81892FC14D5D5704327672FFC0853CD3A78CA9E16607961AF80E54169185BFDE +C0471010F66F61AA7D33264E13AF5428E8B4D43BF350AD2D0D736849CF74F08C +2E595B5CB46473453F08E31005F5A8C56634AAC2322B3DC6CDC2ED0D384BFD63 +B0B0FBF27333756B134F5DC44CC7C4204FA2CCE365DE53D05A048EAD143B02DE +C5669CBFAF7BF803F4649745CF3D16576281AA8303719A3EEB388ACF8E781A6E +2F0819B2F8C633018F40C7B670BD8548138D965CD5BFF295296C07D8181C98DE +D1600C5FE9BD673959E43F5A816C55F844853A43A1390905B9A1247B481F4894 +4E36B9AF0F05ADE224F9ADD39B63F25C7C26581396009192965D7D3E73A86FB6 +61F8DAC86B4B5F992B20F69D69100F848A9C50C6F14427E0C840D8981AD4943D +6726680F4DBAD325DAC1F9C82B1AC95E322B183535F88800D6CB97FBEC126991 +0A53F325F457388B3212E2B5E1DEAD71D8D051EE0995E1658ED294AD0C6C19F2 +B45AD05846CE0148629B2622979167033973BAF86726AF20C1F20CE696E27313 +E0E7906D0CF0B9E799D413ECA041BBC4DDCE755BD5DAC2B76E1CCBC67F0732CA +74C2A42C6AA8CA2D2FBAD6F3DBF0A8254A24305F046B238D2CE008BD7A0F7673 +125B6D7DBD8CD9246F133714159FC9EAC5B1C43081E5382CB8D3E447DB71386D +805F013F539AFBF51B8A2235AF34DDE24868B51AF494C8E42A6958C7943DD81C +4DFE6FEDBFE8B163376419F75DB2F539196F2EF384D56F65B38BAE191B81C8E3 +E1E7726F8FB8BE6874BF7213B32725EEE143F5ED8275FBA233697EEFCFDC5A92 +CF27705B2209729B15E3FCA7CD96EBBE0DB9122207C65BD7633246F522FB2D46 +B6FE50C19EA2D0BC5133A1BBDCF1DE22F402EC2C37C485FFE5C0358C4FA18B8F +CEC354103878B1F6BAD6AA0A485E9888A434D3CF691C8329D2B7AB0D9DB2FC7C +61552C0856078B0D73F09B7E99254FEEFA8C2A8671D4E200AAF52229414E20E8 +AF5925EE7B0C61D6AE22147AC6E5CED1265812E10CFAD2F366C7FAC2958E8AB9 +14827AF3147F4D3DED4DC6A8AF569682F9B17BD67A54841914ED59B33D7E40E3 +DBF5A8BBBE86C3B7E5CCC067053FB9218B9F0876247F3A0C3CE06444409C391A +43BBBF008A587B8A09924ED83279DBAB133F41AE117648EC9FF59C170DB53BAE +8D49D7FFD80E874C0D0B9AD7B694FA085F2933272227CB20C3F2CDA00A96C665 +CD059F9D2E438861E1DC923821C411B8CA8DA5A21612FAC30EA3D869B01EEC8F +8D45AACFD0D0298D739C52FBD2B0BC8C96C8386A392ABCDA29051F9D8F5EA844 +8D83F9EECA7B6DB7CF3EB1F81F85FEB96A471CE0A5B899851097AB3D63131BE1 +6086D914B3986307EEAF0D0BD650C2F0F7C50175868E4864557DC8790794393E +9D57D1B9D0726CC14B48982B45CA14769BA0E0FBC25830B1A8341324F31460BE +88E6AA3592A3E5630F9A5A7DF736365C978747E396D4B7A59ED56E897B9CD8CA +94ED805D4B979F672EDF9D01A156EBD6F759BFB0BD9E5014CF59B6164406EB86 +108FDA4C92ED3369056F515952EBC711B48A11AA75DD9EAA736B48B2C8E05F59 +8FAD1DCAFD29FCCEDC072A4497E0BCEC768DD7F7326A83A8762C5F07050190D0 +3F765F9A23E49B75DC5CE283BF407B61C41FC8FAE5B6063502BBB511A88B53E6 +50E53F218FE3B8EB0CE7A3DE17DEF300A74F6E5CD29B1A9783A7EFE52715290F +60E78618AE931B23B8AF61945CD3EF4BF7A363128D2D2CC0E0BE3E927E785844 +73B0EDEA9CB3BB8778A34676F9DC31DC48229F7B61428ECC8436DFF41A63D274 +6DD5A0E19F82BE2ED721E25AAD9AD7D55D9AB1D817D7D3BC7FD5C64D3A16402F +E5F1494D4DCDCEA0F7265B72EE4FBF8B6B783F2051585205EA4D2723A1AAC86D +E8945BA2670B0DF1CFD4CF47966424A2B570900F5ED0ECFEE4EB534BFA54E2A7 +654F8122BAF46191F03F02E29351E2E7D6216CD5A633DCD52D9D63FBF8DF6779 +276781BB7C5A850F5F5530E41CEA047D0D2C807CD433780E85BB852F4544ACCF +E4C6FBB366F7A62C5F2F7C85D405C70A393F19ED723D596FE895DBA8555BFF42 +AF22453A88DE11127877EED1E653CBCBB37CFE724C74C13C1FBD430C0985BCC1 +AF8CEBE773F16264A8EA498C2CEA83FAB54AEEE9237EB6994DD36D172ABD4630 +7FE3917C571B55225EECD22A4BF03D4F47E483CC610E517C5FCD8986E6EF5472 +8671720DF6D159DC239CE689E60BA4F963A061099C65CE43E10796555B004357 +923373FA1666448B261FA14697B7287DD24AEB4F2E6D004204D31C2DEC90F7E3 +7C5B329F2AC730EF375262773306D20014DC28EB842EB2216C71D2BDF8600B71 +4E5D9506D215816FDA6AB7A0B8E98C5022D70F27770D1EF50B49601586E35ACA +3E7C3E54F289F4F8449DECE1CED8DF3945B80DF9732AB827AB6CBB0868E054E6 +099A81A50646FD437A021DD43D19F307CCC435457E0522CBC740A4B832D4894F +A6E93662ED89F434EEC68384EC374E5666E0089F246AA367D8CF416BA95B9207 +574CCD04AFA4009F6AEC51A24C3F3C4CB3C8B2E0A1868C8DC50E32BC88EE206B +F5A9AF7ABED45C44642D6E12E2BCD765D4BB68E5B02749884DC6695D76E9AC93 +D5B6C0B6F294CA9CE5A51CEBFBE78F072EF2E1374EAA8B74A89F8DFDA665E984 +266C686B3CBCD0CA5CFF0BD82F8AAF903A033CA7EAA8988817B526D38C76F0EB +1D7A62B5FD190723C24BC9E051F379CF7A681F938E504032AB465EF32FDCB4BA +8A1ADA22D5C86F704FB070771CDB8F1E061450ACEB3442A12EFEFC021D086CA1 +CDB8336CA04FFF6204B44B89EABB5EC6F251FA6BDDC4C550EB0C92FADDAE7374 +791F256E229BC0EB7F13FD2D007538B53D86CF7CFA0F7EEFE463E8ED1EC24CE7 +FD39DA67C23143CE793178162D7BCDB1A1A98B81C6DC7AFC814777A5821149E5 +0391037A6EA0FDACA0BF93EC305655AFD2A018AF0787921CC75B1810E86D7378 +DA8DB8A352EC697CD9815A4781CC2E0E7A961E5F961294FDF18D8C1C4F74CFBD +68DEE0CBF24326C67CBE64092201B0BBF54BBA02F57C80452654C0D8B4DF013D +771CC70762314D160850EB1165FB6603EBDD8303C398D3F545CC3C326B32A288 +FC73B1D805F020BB9CD98993C0362AA367F1EBC369AAAA6ACA878034CFA6120F +3437E24DACFD95C89953954D025BC501DBD78BD77526650B80380E7F39F724DB +957616303A0F8D9668DB0E55C07E4B7AC99E5FC7E639543B6AB14B3A44994CF6 +A038E33DF3007700DCC225679D861DCA1D43A289624D771EC6DE5AA0A6514F2F +298E27DB25DC8D45D2F192136441C66E4793DE91C917AF060774E76C767F7106 +2A709223A78EFA80093852F303477EF202502FD3B5021750669C4AA4A63D84BE +B56B1A178F537FDDBF77742E3269A086D5E8C244A7C1EE575EBD6D652770488C +BAE29DC2FBBEAC5D77CD6EC7AA078105D60BCF0F8035B4DCBF75DAF21766211F +3A9DAE4BDC772163D801E831E45BE3B57764BFB7AF0B905FA1DB9BDBE39ED7A7 +E85ADB3F07668ADCA70F406C9C0E2CB0BC33B93824C58C038F2256ECD2ECC6FE +8D1A422AFBF33412A2716B74E1FE44F1D5F782AF6D72D69360E760703DAD5E2A +F0B4BFE753AABAD641B8FC4B5CAA3CFC155685B608BE3891C762F36090812A85 +3453492C1D2E2C2755CBF0F4E2400B4A9AA8403A6CD8A72C274A30657DB76782 +A5610A85C44892C7ACCF2B30A3EFCB4FE58D01DFC828B9F160027EE9BAFE2514 +92690FC5F1E2930A0FAB61F15F4208CF9AB05B5AF4A1EDAF9BEEF7698C1CABAD +86E92A6C312DECF312C75EC0DEA63A66201395DE2B607FF56E476335A942CF53 +C5414165F5CA4B20D61F21E5960547378FA8AE0351394615B7025D334E31F153 +84A7A642AD5626F4E130C99C50CFA2FE032E096EA1ECC01DDE98232806CEDBE7 +FEB6A7FACDC53653952B3342C9C0FAC7F46CF70E0C2F6DA8D3146394A477E9BF +5F1F0D559702F812FF59C546E60B92B410CACC1D780C565D322936B25E422205 +D1B77761708D28CDCDCE30683A9AF46046DA59F7EEC548B78BB55A2EF07A9BD4 +AC9807320B94E8BB7F2EB39DCB5D89C48FBDBE17003C511D858DADEB923A180B +B67E7E1346B9B5236C2CE21BD33644447B1E0BE7920ECD96FCD032EAA5E628D9 +2F0EB758B3D942FE1DA935C0E09C4AFE72D5707EE97763C7F7CF7DF022248B00 +93140D8061FBBC867002E1E40E195D553494446639B9957F568C9CD266FFFCF5 +401622EF74732D2AB1E86DDCDD93B5D9AEF7B2EF6812162823A1A1B8AF1CECD5 +0B34D6E99CE3AC269095E4DE4D4BFCB7A12726601F8DDCC5A88C122E9373C38E +EEDF1477B87175CE1354BF2CEA55B879248AC756C06AFB27711B3F61379B4041 +ABCB1AF86404F1C92AF8FBB995C0745390F34A22C7D574CE5C2771D9AB025A1E +B5AB1FB004A6FCBB3DF83C8DF8C863815B2397D4059F891203C9C0C3EB8DFD92 +B6F8C706C80A3C7C6704E656B19CB89C40BD83B7E823F6E286AC1CAAF5526F6A +74A23D4376B6D9751BB6BA608A24AA26154E254660A3734A82095A68BC7E2084 +595BFE7FFB7285EF65114248F76545727830FE9E3A0B471FA4372AAC1C9840A0 +854624D0C02FBB5C20279AF5DC062A2573EFD6481E8DA57A7739EE3E7F7837B9 +E2CAAF0AC1AAC13B812205E7C1A65A98F0313294B740673300073214BE66FEB3 +B555649EB823D7B528261CC968997B56CB8C90E5FA4F04E7933FB396C4E5871F +C316DD9522EA73C1202E300DC5E4E743B24BB915302B467DC4059D1837F95E55 +D08D783616A2C868F222ACE2881E31EA5B3B57FC62ABBCE9288450CC64BA50BE +9F4BEA29CFC75695F77BFADEC65EF4561CD570E966834CAB6D731D196B24E14F +ADF86E74643E09135188AD6F9508D9D6DD31E5BA9FA92DB0AC1E1875A7222A53 +458103F5CAB00B70666EDD2EB08E83E7CD7A700237CFEC61CED095981D7A82E9 +929CBD909852365A49030A593BD266017EDD740010A50A9F001CA3EDBCD79646 +AD489A55FC9B48A7C765FCF9B212584CE1619D9037948A8D22702F2F36A5788E +974C88CBAA776EB4844506C7A9DE71F0D0325970B57916BD006B4C939ECEA725 +3BA14AA99BAE0C91D0DAEDCEBF1D915349CB9D3AEFC36A99B69857A73077FAAD +B6FF4F3B47C4F1C0AF1364CCC46DD4840819ECD0955CDF610F8A574A8BC0A3A5 +9B704870001860A888FB046784788324B83B2710D38B18186F59BAD37BC77794 +FD7B73ECB5A060B8992C419F9337453C130677A14DD23E9C1A092EA099E28A06 +D2EA0CE381936E033F2E48F33D9A18ECCE3AFACAE0CE118891B767FA3DBD9D49 +3ED3182A68E4E056D420ACEE2C7B20F6C2AE042D3DF60D70B2DA4527EBC0B3FF +927CA3BDA84FCC1ED450F8847FA4E59E0030969C215477B5D7BC0CBD674B6B79 +7C28FB5A2CB25405DD82892FAF806F2D0025232973DB70F7E345510BD782D5BB +8C722232ECBC8C0740175347D50B214DCBCBEC16B7E5725017234460C9B81BF9 +2D8441CABAEB6B853CB003F35FD3D05E40B5AD32EDC899C59F8F78529C62B312 +06E076F73C4F7D1E3F862418D9E4F7803BCA1052E06678CCC594A960320FA393 +B82D738D1BEDAFFBE013BDF91C6D524A44081FEBB7CE82124EF5B2731A382F21 +A5C6249D1BA59E2728D647FB7BF75217CF621643E0B912D4989BE54870E38FE2 +EE63C4EECA31FD1BD041D85FACBF80B65C37727F3C72D40A453365CB1A92439F +63D54E599FA5A9BA4F71D3F5D5AAE42DBADBA4AACFD13CC0841788FA7D186F64 +859914B0BD0C95DE30D5830B29C1DA1403A61A289B2699B527D3EA8A585DB2C1 +CC4FF7AB42AD22B0E09463F035F0FE3636E7DF92964D57DD0952A1504AC5B470 +556095A0D35DC150ECB425F2B14ED3769705D986F4E6EF548D7FF38F88EBF58E +EBC22E73B03BDDC535173ED753ADC75A9A203BA4A542B9B76D27A64531377915 +10C9A36DFE9F07010768E5B60CCF4F8737CDE22C42D8DE22A3AB17CF3E2832E5 +781D795EE5C86435BBEF93E1E41918F05C3F34316229DF91B1602005DA7C3AF8 +E3F60FC7D693DAEEBFBF9A322E0BD7A9995520780A9A476C1FCDFE428FAA9C7D +11808AEC9032A5F43FEE05692F80362554761D9950F2EC0FCC435A05B4EE4B02 +446DC2E3ADC7C77B3E937BF5138301563B4368CC8A26A95652F8E936EB6264EB +D68F59788449C59D6E1749E130501FBA420A986C887B9A31E80958CDCFDF2B1B +A0E8F6A327D5EC034F68ED4DE7AE84AEFBAC9A049B6E1A1681826F810FB76121 +0ABD0C23B1075F9658273D50C63426666A9D3481C8F54E2610C0887A472B2F8F +8ECF37A7C16D199C537502EC19D83C5B0C1477F2563BC63039494DA44534FCB3 +7856234BD559DA460F6BF425C7626833D8E3428BA27C255548F9D9B908E55C16 +92605D8A029C885A66C726B7C14A5AB5575E147E2F1E4DEA56E0162E13852AD3 +C1ADC5EB43FAF32DC34B5F832224C507DE8D0B1A54C3E7A0535EBB8CAD5B5E1A +0A35DD0FB5B640E8AAE2FA839E3942C917957B71F1E15BA194551DBB2C48F0A0 +B215560D0BAFCF472AB90C8FED6048116D4E4B9B1479D989F0610B52DC35AA61 +B33EA7F891617456085BE32C1A355A660E7B81CEA13DAE58911A8E3873B5AC87 +4D1331B59ADF9E7E7DD4BDDF990FE579C739D369B34B4E055C4EEB0FED255789 +62884C298FD09816AF32AC86844031C3196B94DDE55A65053457B48592D58F5C +DC9D02CD76A8CAF9F5B1D0B8A15A57587968C95E06C46FA5DA93BFA967B61A85 +2D98E3533C7E4F3A3A0D9D99AC57208DDEB2F7F308ECC94E0C38EF22520526DB +106C28133E996049672A9A459A0255D8B1A39AE4F8CD80195D32243F228213A8 +3A248402801919AB7BEA2D8172EC6CDC51F859E582D3C582B777DB87E611BEB2 +04612A51C1D8C49B60E3C2CA075BAC4939905AC87073A9AABAF7DAD58F48129F +C20F48B98B7C3B7C61AA456CBFF697549AC5B5A92E9098871525C351ECC5DF1F +805917FD1E6752A813275443401BFB15C3DD6BADB72DBCEA8098E6E684DC5A61 +78B8957BCD40A6D78D948700B9175F461A228F1ABCE8692FE132FFADAAF785CE +735647BDA0E0D4D76A351DECF6DEC5A75F744DCEFBCB719D18F41AE53A69DA67 +C1C273563496E7EB5C2001556FE2C13EDB5D4989B0C70B6EE4C6761C691A2733 +A856C41F48485604D55E91FD3311F7A977648556578335B8CE526BE651E3C4D2 +19F136CFE68D9F482C210011E7C0E8D8D6D713E7D9842FC6ED651035C1F557F3 +F4AD3F4ABBE2CDDB93811C851A52AF4D1A5FFCAF88C8BBF3FCE9D392F84B420F +FD686BE038D120621B39B6C36FF9F41AC870D41417A62F524DE5F01E4C7463F3 +CED218E47C45A05C0603FD0DB14DCB7C5596B773E35AB131172AE4C4C36A8D73 +BB0F0E5154C66EA3394915015FAB552EB5684D815E992626D4C11DC0917E0278 +1AEBAA02983EF1BEFC51E14FAF087E591637D3B958E183655BD18EA0553E44F4 +248CE59A8F41AF272C3BF63C77B27AE7EE4B1B681C62D320DF9988207BEC27CF +2FD1AB93BB73D36BE1D4E56542D35F163ED5569C37C781963D750C0741F574A9 +890414D07491A43AB08F0C34FA335DBDF5F065BD59D81464CC473F036B8B71E4 +2D5FFD9FB9D4B5381D0FC5A98FA307952457E70078A7FEB334BA92168D7BCFAD +FC72B67AAC7256D42C83C1F48AB790B8B2EAF786890F3A173BB3320F64E08382 +AA87596C71CC8D5B5B3220C228492F9D04FB56FC30E6828B480EA062276032C9 +6EECF8B5E1BE45F33595918DB888F0210F6E01E1E0214B420B03A34E772E8DC1 +5F416D10B82D4ECEFA523444EAC25B498111301DC293CDF1D528655874BD5731 +B9292437438FFEBF2E1D0FF2348C2C2EE98C512194D280A0F72A706A92838B22 +4E5DA2731965C70204EFAC38C124FE457D75ECC9DE58BA373B06C7C93775AECF +B09C9087D73035A3670ECB8FA0FC27DAEF125BA9E5B9FFEC9789E416B3236533 +8025389B8788202BE24BBCAE79E653DDC8BFB610FB30BBE572FA93D1FB41CF26 +6F60BFE555F51310B54009B2C506DB45B36B2C14B01A96B2FF29D2245CDD26CA +6C9023AF71A0182FE468177B38038878C1F803943F101B0F419AA3704859E23E +BC719FA3E86B211743C5479A1D9078208E9A0A7CEB80AE36C78F3CF3A73D6CD0 +EB8D4220A64069675AB13D6086244E91A13A7C92C909DC1BA14441DE4F542677 +33DF8B5ACA7A45C9FB84FED7A5522897C9CA1FFF1E9FC97A039118BE269F65CB +F130E31BE70112D7DEE5790A3F7EB0973BCCC5934E0DDCA04E5DDFD4926D4283 +7053B8DED0E2666753EC895672838461DC8E177B97B3BC64E6F076D0392FBEA3 +02A9B77F200594A136A7EFAD8A069E7F2B4CBF512C026EBED81BA4645FDF946E +EBABE659E725F26A0F8FCEE44DBBEDF2A8033AF58047FC2710C9A8E06AA4C008 +F7D4D49D9DD8E945DB7BE0BF2571BDF09094B591743CEBFEBFEABD525B497378 +E46753CD17122B72197CE7420672E118C80A06F7D263EDCF0D7997D42A2ED30F +4B909D456CFC2F90936FDA2D375665A2ACEE28D28DB6EAB9E1D9ED722D051A00 +99E7433BF2149829FE59DDBDBB60266AC6D57B81DE28BB1D747DB435ADD9A09B +97028959DC620CE7C90A01DCC8D264DE2AF4B2DD5DE46A17D0D841B5E022080B +717E959E18E862F254C3305330DF9B0AC282355A10871545332D7A3F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +%%EndFont +%%BeginFont: CMSLTT10 +%!PS-AdobeFont-1.0: CMSLTT10 003.002 +%%Title: CMSLTT10 +%Version: 003.002 +%%CreationDate: Mon Jul 13 16:17:00 2009 +%%Creator: David M. Jones +%Copyright: Copyright (c) 1997, 2009 American Mathematical Society +%Copyright: (<http://www.ams.org>), with Reserved Font Name CMSLTT10. +% This Font Software is licensed under the SIL Open Font License, Version 1.1. +% This license is in the accompanying file OFL.txt, and is also +% available with a FAQ at: http://scripts.sil.org/OFL. +%%EndComments +FontDirectory/CMSLTT10 known{/CMSLTT10 findfont dup/UniqueID known{dup +/UniqueID get 5000800 eq exch/FontType get 1 eq and}{pop false}ifelse +{save true}{false}ifelse}{false}ifelse +11 dict begin +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def +/FontName /CMSLTT10 def +/FontBBox {-20 -233 617 696 }readonly def +/UniqueID 5000800 def +/PaintType 0 def +/FontInfo 9 dict dup begin +/version (003.002) readonly def +/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMSLTT10.) readonly def +/FullName (CMSLTT10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -9.46 def +/isFixedPitch true def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +end readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 36 /dollar put +readonly def +currentdict end +currentfile eexec +D9D66F633B846AB284BCF8B0411B772DE5CE33C33655F6FF751F340A8D6C01E3 +2E02C24E186BA91B34A1F538959D4450CB683EAE5B034D030186901B458D3777 +6B3942BD2E07121385120248891AEC2EB33C4E3A0CF00828D0F130C31A918C18 +979FE94379C648EF21ABF659253E43CD1253866F157F1DF85AE7E8714F061B1E +ABA3AD094FE8D6293916FA82EE4F486C7E513A06D4C9BE44306A8287970B4ABF +B6D1F9274A5A0BB6ECF713ADBD1260D5D6C4420D357FD486470A74B2F0621B59 +A9373ABECDBF32FA68AABB66FAB0C970A3354A335FEDDA1C288245E6C890B8DA +3D0EB953283ABFE372221EEB1586B0167F634E3F29CADCAB484B81A243CE1E3F +D5106AD6BDB1AEC91123377F816711CB9D5140120FEA84B8205B79D1569509FC +6B671211985CEF51691C45A168740BD826464B2CB0ABC575E7D453161328F80F +3AF1C99EC219010EC6C95E0A8D1909719CF18BE424967E90DF67537220E60C3C +4345B154D08F9EA684710E659DFFB0BA1B7FDDCD519305900A5E1CDA219A6C90 +DF8BD712A3686DAB90344E8784C7A9AF3318550285039B701B9FA1D3A3C3B6C2 +753F1E794A3463A173C99A9EC0E2AB5737134CEC2C97CD6A37E38692ADB4B131 +54697B7BBBB23680C72CE96066D8007B90AF0FC5958232AB4F21826691E9874D +107F47DAC1026298D787989BD77CB43A09FC95F6997DB00D8483AE9C2716CBD3 +7CDF02DA34FDA2F0754ED0968270E118DDD8BAAAA65C41D699E2BCC2556AA231 +328187D2F50FD518CF458B0BA1F7DBAF4B231CFD61D5DC56335B53C3013BCCC9 +85690E19E992ACE55EEF2BA7A75DEE6DC33933C226FC1494269B7CA4CBAE987C +2C787386400172AE3F44AE47115F4117EED866713BDDCA4A7AF658C49F913CB7 +308635000043F63BA210410A66E192289592882C477B2EEA0B2A339F0E7CF450 +CA0EF79D3A6C28598825CA03FD688DA60C95EF707C6E67CB7E57DE7A80545195 +739ACBDF27069F34C9E0216C3D17CFE7A652B910FCC9B9AECC2E646809C22D93 +FAFAD465DE794755AFF5BEC17160C9563B5C51D07022E2D3A256FB5CACE131D6 +F4B30F591A0419D957D8F0DCAA0A8D65A8D83422AD7C2613FF13A302E152B312 +3F1ABB45E42084EAC894FE335C07324849C9736D00C872C4551997DB889AF17A +A52C5AA77DEB548B0103B77F65717F70B90C1BBAEA7BCB4959F32851A9882A3F +55673F24103D6BF7FB3AD3EC3CC50FD8FBB4A6B13C3D278174320713A7B327CC +A71F01E50840B33D0FC3F5F6A6F2B0F2D0E38494B1C73096A430510F927235FB +69E931DA8CE5415EE88D0248565E3347353621A48F7948AC9EAB5F5057541B50 +82BA955D90BBC82E582FD71904445A59186022FB928015235B60830DA59813D0 +8DA3FC306C43FF8BB2CB6772B1F7BA3C1AA4B2343E7DA7E065EA53A4E5E28DC8 +0790F2D5CFB203CB135A08DCC9702B59A63290444F202756E55B9FB053F773D6 +0F69C63E74DE593E49186FF4304E8FA76C3E3006358DE549E946DB69431981E8 +1261C9C9A884E4EC708F69E6AF5D22C5BAC49F2AE85903E3D48D03B7B97054F1 +D2937A0C685D912D6D20A75A77712164DCBF8FE4D5460DACE139C5A934EEA09F +B94DBF168A4BC03A9D689936D833018FF43837DF9519AD10F357F00BC068E737 +170FC9FC6715165F733A0B6FADB9ABB48B845167DBE6D771C916577FC2132863 +767DC6E3D460E779254194AA690983184D934F5E858C1176B3862B69B42EBE7D +EC9AC4E020085D474093F7694C8A8C2025D4B0163E29320C384D62A9F3FBCB1F +AB5A374EF3DBA48AC2147A207AEFE8B78BECEBC55C97B538F3A0FF4589D171E3 +826342C8A5186224FEE54E4C6AD5EB02BCB4088B132FA1A48362824BEF161235 +8E661DCFDFD8429C65CCEF63902D0E07C2FEC1DC2756D942F13FECCB7E8A8048 +345338F24B7808E46A04A915C111F939E2669A12FAC0BA4F74B832EAC83EABEE +67E2817C058E69C2010F2572FDD15194CD8DF0FE9F827D349C0444A18D1A86FD +802BC120A5114FA3523C221242C7E767B0AAF6AD15DA1561CE8EB18A2401D71E +20481FA5F1E247CB5288F47795A6A3A3BB186E89EAAC4A54AC91405427136127 +5B151203426830F7CADABDB3FF63B40CA29CF8E667E71615869978E99E6F3F07 +0170EACDE3DC62DC05681D7680E2E96C30002AE34A4E5EAEDF88577601A82C36 +22D625A03B0451D7BBAAAE0C396711500E94A482EA787495073F16A76D1657DC +4EA7C7B83BC30CE7F145B65B6E2ADC207D192CE3B5FEF7031F4BD64F57E1BEFF +CCFFE06F1E4ECA48B442DF413766A70DA626359183A9B24C70419487423C816B +4BCB067E661E47E172563090D6328BD738D2B0FE41A0C1D7A47576A79BAFC880 +0473229D134F998909898301CEF50A82B627A9A06DF59D0B9C530EC5D877F1E5 +220D3A1ABD2ACBFDF1933F92B3137B22B9F95A961D93B729307749A50D8A6403 +7AD0F9C40743E39B8D198CFCF7C033D99440D46D821D97545B930EF92E7AE005 +27F2FC766FDD4790FD1913C7A13328E73E587618ABD9008022C5C6C23935CEFE +B5ECA2CEBA1D25DD846B48423F7186E03B1F61C8F1D5AC95CE03C83B2F221300 +7A761D6CB5F7F9251D3F9A7F4B25B99EE7A1347ED3059A811A82A35A033E9B07 +A4FB2A95009576F48665605C478E5F6C1B135016FEB4AE6A6BE4B4359836E04D +45AA11366992162973FB6266547C2E570B8F56F6D992D2C0F63950A16839FE10 +F56E59D93A37573E3268C5892C9F3358753D1FAD6379E82BE740FA17236E96F7 +C53A2FF785FAB86AD17EB1DE8A6AA9C69B91C9D9B43B5188E51F6939FEC21B65 +AF17DCE95DD3BA4F1DD51F0BD5E5869A1ECA7398B6E664EB0D189181E9C23012 +DC1E54C146842A90909DBEC03B79B58909205F2CB2A7F83C66B437D7F7DB9781 +FF0C67F004E979C95B706D8D85255CCD827CF6196D847DB380B56980109E96CA +997157BE78A4F758CE59D78158A854EF2C20099438F74777D3B0298D45BA86D4 +3C0AC30C984718FD62ABA0567AF0A70C1DD41953E3E7212D5C562085177E650A +2ACD49940551E3F7619B4CC31DBF67AC15D938619B95DBF66E6D1300B1BB8605 +31C4011379FB5388CA49E4A9BD6C921560CB8D513F8716A0733D2A7D77E62D22 +A69B54E9048CA168D210816E613CF6357706EF6B118A1263B858B7E19AA98891 +43BD675B06C893579957BAB97199ACB82C080593ECB8B66A7334779CC16E4D0D +4AF365CA6AF9727AE29417B61A5FD52452873B1D666044F8E7C1F6C6AA3397B5 +94A5780F4005FB5E41698FADD1594B505A58253D68D2AE3320E22165D198050E +425820CC0A43FF1D61F168D87CDD30C14D387610B6CDB63BAA39B3EC9B3CA616 +FF1CC679227749DED3DDEA26B4D97C633090DCB8D8A6E5E07E3579E4A99BF1D5 +51E43D1D7F139C9CB1D76D8F693A3F23A74EFBE79F01E0B850BC6B6C7F62C2E9 +859469A144853434895D73DA6BD2B348A48BA80E79327ABD96539F2EA2209852 +E1BF6B0B819D7C68A9A1D0F6F39416E3EC4AC21DCD3C51D3B5B8D417EFAE165F +2A7E0B76E558AC9F685A76FEC7E3C73CD607D9025DE6113BE5D0401887A53910 +82A813B026A502B51D484797D9D7E79A25B6624940AEDB4A15F2C73CA1AF60FA +22D15BFBF268EB044FAE17822511AC6580D1D74DBA3C3335217780B29FEE792D +200B00B8CD888A8BFF15D938FC758BB5CD9B3E08E1AC6CD1669E663BE86711A5 +892684DFCAF70C11E803164994BDAD89128AAD6461D4558AC2ECA3E05EB56D32 +0290AB16A6DF7133DDCBDEAE89C6CD83552792E23CBF567D57E46548EEB0A140 +437492B53C14419B6FE7E64AC23923A9E85F56A9DF209DC4E6BCAF1E045F9CA3 +BB904BFA150F4083C18B0CB5580450CDB657EA768E71222C71DA911A722AB9D9 +E18B6847F417125C40EA8A0CA1F551A4548712D098209C78DF9C3F78605E5402 +DA2DBE2218E49B819296D5AC88D17DDBA982E171733D1E9E295B3157C9B90BF1 +CE68CB185947D1E3D7544155B741296D14B064BEFD3E6AF25C74006CF6800551 +80FCAAEE6FC9105E1674EDFE68C45617D8D3E2264CD395EE94EDD017EB85884F +FDF530EDF4F3F14750CA066F149E688FAF8EF4B5FE6AB515CD298E8D170346CA +9B32BAD1D86DC147BD12EBEDF6CE1E749C5B48314F512470A568C172C35CFA41 +031E34586A89404CB5372D7B2C7A6D96F420D4D7C2D4C08184F4AF86B4536A90 +9367598424112A7B05D7107B23695CBCD569002290599E0FF4EC5C852C31F5F3 +9BD56BB840DC17DEEA579E7A7A9F764788D4E3774BD523D21267869224D68891 +4523070E80A123B58F7B579866332FC38A41A5915EC06F2D14FBE4A6CAF59AEB +57E98D661637EBB885AA5D74AD429CCFF64E5149815E7350118E6385F4C74E0B +2EB474A6DED021D429F01C9B0634A09250C40E22B3BFE1B7246D18116D585F39 +0E06E9B5F27A6CB77C8E9462189CB900CFEF08F798CAE15FBD94587F33816EE9 +03FB2DA6826EB69D8C284AB9F7B00630D0420EB6E35E0E288BA25F5C2345C067 +22412633898AF99C2FB232D1469025BF262B567F29A05F4816FE8EEF5F02BD79 +06202F6A1E3E5D4B3C91BA8D5FF53D5136BF70E5FAEF441A7310CA83721711FC +39EE48BFB2FF287234B1A6102AF146B10A632A53AF97E11FFAC3A2A86BBAE3BD +E0459ECF0305366078066F2CC628A3918E775E4236651B3D817AF1684B07A163 +A0142D16F55D2FB5F2255A8813B8E54EF3E801E95A4A226AB8C0476AC5EDCAD6 +9258ACB6F7C0CBDD298A0B816560622A1871FBE2FAEBFE697A8216A0D8FE30C6 +B1BA6C3E975F78182743842E7F851064037394142AC91B2530FB1D511EB20F3F +79EDD8B7E1579D35F6E7B2883C47A46B6C1A458BECD6BE58AAFD834A7D82A553 +2FE4E66878E4699856DEDE964F454638F768AEDB595A883E380408F558015FB5 +8720954ECE2704AFAD4D62E8BB2657C4FA920D72248B3F762B2F12D125B796AA +1C4BD6B42D766EC1C9B2C7AA4B6A3474BF753742DE8AB76D0AB0DD9A20EE2DCA +0F34CB25995ED3183759CA83ABC32B8BDF0B06EF169252587971F7D37463BFA2 +BE36B2E45559DD73DE7CBE29DE92B9BE6B9F8093F934BA311D81E18A8DA92FC3 +312E3FAB43C53E803975981F0076EBB8F257C123908450661B6FA79E7ECE98F3 +B0A94E0DE3A4DCC8E0FEC106CDEDAA297A75BF1E40F3C2419BF72A644F452E2F +9A8793810319885EB3AB23B1E80E8B62A889311355C73722C18E62711A7E6A16 +A5B923408444B13F6522FECA9A60B067EE332B83E1A69CD835C9D69B5D8859D6 +91F9276863D2E2E8193641E4239F4ED15E2C482C735BF5434BAA454EC2830C1F +7CF766DAC9E924F17F03093132627673BA3D99DC2DBFC89E5BA032C16D3C1C8D +78B3C464081044DB53C7A29E925F4157EEEE928C8E28EDA5F0A4BB6E0042D8AC +7595C350645118172D04FBF06B2C9A9F3603A54B57999E2960C993724CCD6A09 +766BDF73F66E07FCA9BD09079CE8010E6CFECBE2E5DE1EA4E280AB78D5184C11 +016385007CB5AC0BC95955A1E88EA1A1D8EFEA886007708BA063F556D9284D4D +C764E75CECA51BEE3D35DFCEBF6175953D30FDAC00F23B1721A1DD577945B5E3 +8176A21A649D907B5F63C71718ECF32ECCF1B26BF15AF694F1045CF98FC75278 +E9782ACD3D83CBDBEE690D29B3176E745AAE436382D258CB22F3DEDD02E441FC +6A9931AC2F61156DE258DAAD5EDAD41E6C0DFC902173168BB4F51DFA7EA615C8 +B0F92FDB118378CBAC3D56B6B9BB0883C0C14EAA67396AAA7987222A132B7959 +44FC1E9D6DB6D549DFBEF8D2DD8C53DD3B66935FC239E74E2C440CCA13C068EB +C4A3B69F499F573D076E2C92E24F2C69B806591B0807CD903E078683854963EE +5125C3640860CEF37BE186DB781475554BFE6C528A9633AD5772BD53244E24AB +42CA2D1123AF45FA257940CE611D83014DF04E60220E9AF27CB2A2247BBB004A +F5722A5EF058FDC7DC2B6ED1406649DBAA58DF2ED3A91483D60F11C4A39BAF57 +CB1E320A987B790672CDD3E3BEF4A67032244DED2FF4588B2072CDABFEB36009 +9F4BCBEE16F811A44CEC77F8AE873C90C0F4C975E51014ECBD45A56A63F034C2 +82212977023A132E5C88AAA826D841FDE9CBCE7A01E4B6F0EBDDB9A69EFEBD72 +0B41EDA807CEDB791084047624BC11CE10B7A0A311272EFC9E013FA374D97EA5 +F7998FD908748CA72D8CABFD0F01220C2114D3B462B22FB71A23B284B1CBC7D9 +EA20BE71F8ACCED21F096009A14A7C7B51450BA51514707EB46B9FAAB31CFBEA +E1DDA6F5D9AF0B6E7D05A1EEEEECD606427B0F2363D1B882B50140466B9D3CBD +D00DB06DDD1BD4681E367DAA4B7C405C6281B67FFF794041738FC6A01D261CDD +F6E0A330985F2CA782CBCC02B6F4EE5993434F656B91A51CC03B1D73FFA6629F +14F6075EBFD83B702D8844A96CFB5C14051595BC7DB2218156A6DEDA5C98CAD8 +BEB5284D9D9F86406A8C1AE85857185991C360E5F44DEF352A1F301207BE94C2 +9A3A11BA468FACB3FA2D683419C44EFDD7C8F1079659F3ABD89D7F168B1591E5 +6105F9B3FA481BA953CD34CCFE73E427D3AFC46E5C58C2981198BA284DB8B37A +6647BEAA561799877DD6858FCA71CA6003F2961FAA529906673EA94D82D78116 +4DAC81011FD175DA707C1E15D4B6FF19F8720A4E05E6E103E2DE880FA9C192BE +C5ABE7C311C2ECCBCE8F9713DBA74AEC37A61C8F21F271B35F0F7C88B182525B +A4183377597ACDA9A6E2F181725D427795B975BC4168A408D292CAA484BD1B8C +9DC62E737ABC805C8FCB7E96454DA032B601345570EAE0379BDA84BB6D15D780 +42FA1E068A7D62F152B43B788513E13724666FAB4E2B4F04B0448194E46582CE +7389BAF0D1DD4435BAA6B82AC305C04686B89FD51197C721D941BD2893596024 +1598E6C2BD84527EDA6FAB782033E4BB4F964FBACD96CAEC3F3CF89CBABF6B4D +4D3AD14A03D4BE931632BB03BC2B92842FAD51A19A756892D5B978DB695D0540 +CC9D030C612E2B201D60D09F56332DD0BA1351EE62816C21A35C33DC11B37BE4 +D2F164ACD836A5CA1553CBC733E3B159860454B17064B4E22D3764FF6293BC81 +CFA3B2325C8E072857F6FF4ADAA8818247D431A28D3C5FDFBFB24A6CAA327AC1 +0B3630C84ED9F0D33B8255A3CAA9C5A0C79F7BF6BA3B9801C3BD0B30AEF7CCA9 +92F25E332EA97A7CC653C93D1497992D6B76363885B92ADE34C2A33E30A3B1A0 +57E9C16D8CEC189565808D3FAC92973C71CDE74DE9D8781CCAF88747758014C4 +5B62667D4D2CC5EBEBE77C5AD00C6A69D1819F5A786964501E077EB3BBEA52A4 +57729AEDF35253F7E1D31F2DD1587BC15CCFC1B0CA930DA83E2031B099A38158 +8D1849E7145AC74777A3C7136DEABB0C787E5A218309A65EC7D128147EDE3AE0 +C0AC039B56F767A22555CFCC12DCBC7F5A5A3B4E86EF5A69EEA93DF0BAF2A3F3 +7504F5C6A7A67388D2F9045BD755BEB7DFBC2EED679497EBEC808BE20FDCB5C7 +B586463BBB898DECCCF7249E9047DA943FAF0718A2050FCFDF8A4C2029FBA674 +EA64003AC03A847185936FC375CC67B3006EA681F61F640C3640A78D0C7FF521 +D477981E23E5956BAF42252463FDBEC49BB560A9428D248B0C5250CFA2A49CD9 +DBCEF73123C13BA382D3CF6A7B8A8CA3191D379A659F0E2C6E9CAFE9DA2AC074 +F622E397A2F7C73347364AE249B11AE2C34AA7F0D27B5F35D548D5AD1228597D +D16A478C901D3A34D870BA39F770885B7DE62298F50E61F93CAF0D7545BB7EBD +09108386B1C00698760DAAFC48C3BD1142A8282CB16C25820B538AF606A1E5B4 +F1998A4D4D40C21D76436C4D515C85B28BD56725C28744061815182C7E3FE4F4 +251B986069EA94FE262D75AA093A73EB508502215C8BA4DFA1E72BBFFA5E1F3A +A78084E517EFA309EBF60E7BCFDC5B180497282008F2F7D11B61DEAD80B3E65F +64A3281BF61C46FF25270AA6CE3BD1F4C5348EFB09382FD79729C24A70D52CD5 +0B8D87A62D5B64C557FE91108FD95B83052A3947A20E022728605E972B912CB9 +A8BE14A4F6D361469F207F540A44ED6C8A2E97F509CD3381942CA2EA9567E62A +92A067A760B44B28E99EABA1B9B9A58AFFACCF9767D04DC6FACF090D37AAE7DD +57B2E2FF7B7C99FAF127E3AE31281CFD9843390C916F2CFC957E85BDF2A2AF2A +87AC977228174603669CFC14BF64A093635CC13AC11D53FD312BCEC8B01D9AB4 +16CFE17DC23417D083871E1BCC9400ECDFB5ABC0D39BFAFE5460D3CC5B4B4E1A +1C32E4067CD47EDB8A5EE9B3886A8FA564F286F5B1149497260C8B1878518BBC +C095CF37D1FBA0D727789A877AACA3CCBA168289A7D76EA207D8761AE17F8CF9 +5BBA7DD8D3FA215C24D4874B93D802B373C4DB21CEF62DACB1815AD2EAD72D24 +172A27DA07A7B183B5F43B69EEAE06A50090EBBD94DE0F1FDDC3238C4D5EE4CB +F020B209D9C4516603C6D6F2D9CBE5448C1EBD6A597350DC37994E +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +{restore}if +%%EndFont +%%BeginFont: CMSS8 +%!PS-AdobeFont-1.0: CMSS8 003.002 +%%Title: CMSS8 +%Version: 003.002 +%%CreationDate: Mon Jul 13 16:17:00 2009 +%%Creator: David M. Jones +%Copyright: Copyright (c) 1997, 2009 American Mathematical Society +%Copyright: (<http://www.ams.org>), with Reserved Font Name CMSS8. +% This Font Software is licensed under the SIL Open Font License, Version 1.1. +% This license is in the accompanying file OFL.txt, and is also +% available with a FAQ at: http://scripts.sil.org/OFL. +%%EndComments +FontDirectory/CMSS8 known{/CMSS8 findfont dup/UniqueID known{dup +/UniqueID get 5000801 eq exch/FontType get 1 eq and}{pop false}ifelse +{save true}{false}ifelse}{false}ifelse +11 dict begin +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def +/FontName /CMSS8 def +/FontBBox {-65 -250 1062 761 }readonly def +/UniqueID 5000801 def +/PaintType 0 def +/FontInfo 9 dict dup begin +/version (003.002) readonly def +/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMSS8.) readonly def +/FullName (CMSS8) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +end readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 100 /d put +dup 101 /e put +dup 103 /g put +dup 105 /i put +dup 112 /p put +dup 114 /r put +readonly def +currentdict end +currentfile eexec +D9D66F633B846AB284BCF8B0411B772DE5CD06DFE1BE899059C588357426D7A0 +7B684C079A47D271426064AD18CB9750D8A986D1D67C1B2AEEF8CE785CC19C81 +DE96489F740045C5E342F02DA1C9F9F3C167651E646F1A67CF379789E311EF91 +511D0F605B045B279357D6FC8537C233E7AEE6A4FDBE73E75A39EB206D20A6F6 +1021961B748D419EBEEB028B592124E174CA595C108E12725B9875544955CFFD +028B698EF742BC8C19F979E35B8E99CADDDDC89CC6C59733F2A24BC3AF36AD86 +1319147A4A219ECB92D0D9F6228B51A97C295470093CA270C6258F0D99DCD775 +734480114DD0CD2931DC18782C4CCB90B6906CE08BF4CAEC2D4283CD44730A2C +28919598227F98FC5524B0CC92540E349C5B190DF5F2317AE46FFB97221BDFA5 +114C21D5E8FB0D1C298EDFF8836AD72A9B2AA132F52DD5D3F30427563C97CC46 +D241B7024B4CD9F1E0037FFABCC88D8CCFDF3BC6EED778074F9590733CD147B2 +5B68387E0F19E6A81961077BB7640A3C0E27ADD72556CF84ECD981ECCB64184C +EAB8BD9B96A873D80E3E0D5B4F5925983C80EBC3A8A12FBC452582A0B37D3C42 +4DFD22E9BADDCD2E69644AA271EECF366D63FCC29522FD72D6C1EFDB3597E866 +61443179872395E99024F152F6D6A4FD71BF1C7383BC1CC27AFD2DE3DAEFC06B +6BA837BBEBD0BE09F6AEA31A83B1B45255DFD6FF33362AF8BCABEBB0D944B3FA +B85FFBA0B370B9035460905432EE87395E518B4B670246FAFD535774467C059F +DC30EA01C95EFBA4ABB41711818E23D7E69D32BD63243A6D98666BD46E234155 +BD6ABC76F551C31B6CE2E52323A9DAD5C003FB116AC8A82B46ACFC45EECCCAA9 +E12C2C8E3CEEFD98D49ECFB824E8677BC9CE9B682BB5A7117174E4B2A0B925EE +553713780CDF3A3A4AF1560343A8A448C0B5DCC4E11EDF5ACBBA0BA8E5B899A3 +7321AA7D4B283AC9234978C2DD81813653A96F2BD129FA5F355D56C4E50310D2 +0FAA8F304D8BF333F97A6CD20CA4BA7BE6DC1446759683933BB1F1617AEAD131 +1C9EF2212EE7EA9B64E5ABFF45E1727EE82C00FD371BE1387987236F9BDBA4ED +A966658ADF028B5DAD1F0878064221D0469BF17CB4E738258FB5D92E9D380C64 +16E95BBA6A2BD9EEB1A187A7231C53BD8ABC9BAC46CA4AFA94A4920FA805F67A +A0C61940F6826CC4539A6CD1F9900EDC3F720AE4FA097F1D7510746BCE2E67B6 +EA2F2046613785AAB89915655408AC9D03201838BBA44F421D5F25CFD88E56E8 +1CA23CBEE9C2E323DF1866D31F309C92281E514A87A9631F33B238AC6520A20A +346DD6A206C3CAF2830FE244F2AC5D894686CAD5F4BD1CC51EC0B547603BFFC4 +F008FDAEBC93542A43B7C907CC85046313348CC8A017C585CC370604E40AC820 +8B9D8F57A01868FDC93551DE10FA83DDA3E49E44C32118ED90FA67AB1C66B3F9 +F80CF71131977ACCF4DB44CF1EC26AB363C5F95FC2523B5DFBF4D60647EB23AC +89CB971DCDAB3BA26846BA9317C051011C37468B21B159412E69DCB84A9F5876 +F418908678F38880B95A4BFD3566A6EDE93AE05BBDCB3C4E240A5C0A06301896 +69FCCC0B65BB269F2E10609B6446A68E2DECA905FC26D4F502CAF0EE9AB15E60 +CF42CEB376D92D80A6AEE55BCAB006999BF4415815D0F5BA3B1FF9D2E60201B5 +833FABE8B883847ADACF9B032721DEEE7FEBB583B89066ED9608F1EFBCDD09D4 +3F3C2B7B03154676151753DFF53815F2EC1517C094B0D2CC5EC483AA93772D24 +AD3B0084537B91BE1913A31C70750C6DD707761DD733F9ECA552D3F26825B2B8 +3EA263488892C929DEC07E2F988B7F7657D53CFA5542CE336D35B462E5E8649E +05973AA54C0A4E63552004E3C77E5FA77F821D820B1620CC8CB3EC5B1D7BA751 +16CC155DEDD4DB0FFD3009729F365670DF9472435557201D8E82341B4056D2FC +5D2F7C57599249DA2A99A522868716B076320350FA7415C3B10D77A6E1DC77EE +2D929A038DE3EB4735A4D4F5C8C340D6D293D57E83C2F379ED0EEB16AA3A2A2C +ECD664E526D918A3D0A934170B6E1493843E6AAE87E850D70DE65D34AA2A36DE +8687D57A6B6B1447F9A4380CC3D4D11D54CBE762258426C46B8DE6059E6A2F31 +E748549310FF4362129080CD98E70817A06422743780B86E11101BED14BB6569 +D36903BA8BEBC24A478CD430801082CCF49382D6F04DE270D51CA5BAFEBD0F8D +901CDBCF10DB97E2B059C8CF7CDB45BF931203D5F8CA4622DF19682DE2BA7924 +47F78908BDA23C4E21C0ACD2DA259B23648B6F233EEE830E7B82DF4371F55C30 +71993EC2BCC7BD6411690B9B1621903F358450976D6B6EC6B505A593A9FB7D92 +7223E2424DD5AABEFF254FBCEF934A4D51949BA0E8CD614AAA3AE6C3ED7B37BF +5324BD4998D8D5DA95E4741B753AEE580FB3913770C00277C9F609B4DF3D618F +148E0EC7A75218AD788F98D35989F3DB94413E70955EF586C0995A450BC75820 +F5490EB55E5D0D21343565E1FA94FA64A74377F87E55EE0EDDC8F4286951A4EC +ED6FB3B444206D89BA71A9723E41E93A9F6C80240437019F3C23DFC2491A19D5 +29762876AC60A14404493D04B5537C1E6FCA67B69DC1CD859F9C956FECF4461E +EC8B6CD5B5A89A8A838660A6C3F47B79ACE3B05C0AA2F17CF2DA947B893B42FF +749E2CD5E7B56823A119629931B1ECF65C51000A10412668877178F589B4DBCD +24D39F9219C46BDDD6F101C6AECFD3876056CBB858FE0C4BA2BD0B5FC26AD5BC +7FA9E295E72BEEEC721300567B6894FC48FFE5E3067C538CBB3B77E386F50D22 +F8DCFDD0E335060CDFA49231D157981925F1CB36110809C12BA28D2D116116DE +01898E311FAACEE0E5402CA30B64D3D5A0CA33E417FC322F2F0BB7AD3FEE2039 +56A15DD6D1E86971AD3A5A9A27F33AB62A5A3BF5660B59235398926D6BDA33BA +BC43B062EEF199E4ED991518A62AC374EE21E8F1E1C954BA6D1493388F708D0C +961612444BAE019E1DC18BDE900BD7A781835580A74DC696BC512F7BBDBA2D0C +ECE5D83A049F7A3286B94FC446DB5C3F33CA2CD3DDE2D0E774A579831CFDAC37 +9612858EA613AE6939CED001EE662DB17642D0357B80BA0F82ED306218DA8505 +A613CD622FA998EBCDFB7BC70F4E4C8F1F43241FC22FC5BB208F4B20311A98B2 +73F30E4DFCEC93875CBD1ABD29ACF80585F59947F23A96D218C0CB8BDC1C49F5 +70DF3D49704CBA9A23294A88A2AD61811450921B1E5C3C86435C55AF87AAF6A3 +A13709082DA9C47D372A4226116342DECB14E4A4ADB7598321516DD637B64148 +12AB17AC5B2EB25718856D50BFC8D64C78DA6E5C145187DB0325C30A42013A81 +590E58E74094610207FC70BBF1A497395939B42A6EFCFABFD9D43221DE484753 +DFE5311F1845592B4484B1CDFCC32B4E068B11A82BA189D2268D88FE63B9C6E9 +20C9E40B543B5C401265D92A932476DAEADD4D3E2BD6E4DBEC0B30FA90A1924B +41D2EE9D8AF2D8CA79D15518141665B542C696C2507DD2F4D987EE5E22397FA8 +FD80743186872DD67BE58103321467CF3F4B8898E66584DBB9688B9C78873CA2 +9B72AD7406CDFE8B58FACA2904869FB0EF126DE299CAC08CB89F60561939D75C +2722CA57853372C14F5BCCA5C4FEBCEB0728BF9E30140E6B0D6C034195FCCC89 +291CD818CF66757EAEB0AB5A9D5710988EBB052850DDE97BA0DC0B054BDF5172 +2002AD6FFA44AA5D9D4EBDB6B2C04E8EF38660D9BC4C995BF37DE078C279328F +4C360B8EB337D798962CACBBDEA517A5EDFAADF0D445FBD1099837F9D689CD2C +E330CF587246387EDDED64A2F4C397C1B2BFC325B39114609EF57DDCD7B93C53 +811ADEFA323C59441ABC447F683B5EC43870C057463DD502E9B9DA7084C3BBFB +2FB864D26DF1BA41ACC815F2A71E96D2C6F572E1F7E4A224FE57CD605682F98B +AC7BDE4B85A4C11D58981E981E9FC43B87A368BAEF78AD87B7DA0FE403AABFD1 +CF414CBE75C0E9E257DADCBA035E1BF05C4E17FE92309F18633D93DF885956A9 +6C27E77540F888B8336B61598CAB04F3B5A1767C1ACFE15D32A25E5B1BF51FFB +CF3CFB25CEE7DC95203CC44805A935D5A9154A89FBD4E465F0E599EED4033365 +0A31612F37BDAE8CC85BBC67F7E375EA68C2982FFD89284B027501184C4D2232 +CE0FE4E905C4B504EAD009F047FE627C79AF9EEDD65D00A3858F88E699E5EB45 +4957086CB22776AD06C317DEA41880D88F0EDCF71B4ED76BEE665B7937D5D0F0 +E568C7615025172086BDBD69670EA154CC52C85CBFFE88C1A4D1AFB6624EE667 +1B5BE2A31FCE8B2A4B03BC5DC57280199CC0970EBB636DDF8DF54C4A8CC8805C +AD63CE866FB20C64725AE4BC9F0EB275BD83EC89F2F9CE23A084B45694D8C3E9 +3F3D3C1A678690877E8B1B77ED85D4F6E03DBF1F3B1D177E330475F172E0E729 +63EAD8034E6100B2A5773E2605180629972DE6BAC0A8C2F9580E9F1D2E77791F +E1D33C2DBED3FAC47DDF1B74FD02583C3CFDBB2D1CC2B735C02B14B7AD3733CA +1682944ECFAD673A9AD5E80B6248FBB6E5036EA7FE5CA8C34FBCA6DBD0E76EB6 +C2CB89D9815DB3C45742170DA926E03493AD86BB19A1D3FC623BDF1C920684FB +7414EF69CF39713A9495D8CB678BD4592B53C36BC6CF93505B8E32311D42532B +5661051B855F01A9B3D77AE38879853AF0FFE2448368DDFA3EF1DEB88AA055B7 +91459586DD2DFEDA192306DF7143F998CC5D67C1CED313430E5CC3F9CE265747 +8582102111E7AF9FB94D95B82D8E1DF01F04F2A2C22A20207B59C8976D56833F +E3B79DCB727EE7537476A052E92F7C3D6A625AAED8F026F22AB59EC0F86E541F +BC082D8E35234A18192862EFD232C9950B1FE0BCB91209FB540DC5729B9E36B9 +94D0913A8F01FB6CB16DE85E6B89F144111B1D911DC527C24917D909F1CF501C +1AF2923EF71530F21F9BF049A56C7AB3249A420C28954E981EC464F61FA167A5 +C6084661808089EE7DBD80A2D92FF4040B37B2D81A2F5A568D461BE1C62B0FD1 +BF6D1063D2B5DB9CD48BB2B2AC9CEFA543E0AC5C86C462399C1E82F25A157282 +D32D538029ED22CC5935E63FA076BE22D3F53B7D7CCDD344D68B4E73F87A5F2C +691FE68C981FF7CCFB124506FEF93F36F7181075D7BC6FEEC0E35AF57855BAB2 +44AF021C7AD8912D884424E8BAEC68A5562B881793A1B47FD338B1EE4C0B8583 +2867C78DBC2EFC8BA1431DB1C8622C99BB2C2D4D5475BFCE87B11762427867B5 +7253463C6F2E1CF5F1DC1F7851F2EF6A957CAB0C0A55076C59A6FF9237917C08 +5F97C2CB4B5CC903B76BE8C057018CD962EF90E1C0CCEECD52F2AE35A94C6EF2 +D99DF4DA88247C920623978A1DBB81D8F171B588D617AFA8285F6147E889523F +CF11EF4BE498842D3BF8E811B4B33131416658E03293AD911516D8AED556F7E8 +0181391AF36D862F5F8B4588BC99585BFF0F1ADE4BF73320158DBACB2784768D +D9794E2B0F2C0696E5ECE5C7A7DE78EB5CAE85EEA244D43D0280D4C87B6B93F4 +803718596FBCDB61A0BFC2DC666128E56F3133B9D4F16305940B50ECF66D80BA +06C0A73C02F689314F1B4FAC22D16BB1E414C6F0A1A548AAB1364D2CD9DDFE5E +C8887964D26BE84986A6B1246BC306E6343CA376F990B77BE8D68A4E54304C3F +250B2311586A1D1EAD2C0221FE1828CE8396DEDEF13E70E0AA75FFB6089DBA9E +9FC3FAB43B3633C8EE7598619A0C6FAE2F25274787348E3660D0EB7212F5CB38 +032A41A54FDF14B32E721819AEEC54E8FDE3AB8F0ACEA267B01081F284B008C0 +5861CEB5C236729AA17DC78E92FE1EF9F047B53A59F2D1D6A6734D0413D1A51F +75B03234F4775523A55978C73D5BF9031EE8BC6BF9E2637DAC07F5AAF2A6C41F +77620B272300A78E86F71F16EBCE2DBFEF4920BD3F16C282E0BA4C872E5F7E52 +7ED2B663FE45D4A36A588D228D32E2861F26AA6FA8DDBC8110F4417D0DF29285 +F06B57B1720D0D13828A4DD68D57BD530FEB9C3CF305594B70E4394BD60C82DE +A64EC17661977B18199BA661C48860919CBEB56AB6C32848D51733F1E959EA35 +DFFD823D92F11065C643AA69776F71163A60D4941B753BBB4A4C0C47BB1D965D +06C9BA1FDAE47926F37C0C5B591058F68FC1DF3933B2BE014F99A53A617A19CD +8BE011234D48CB7E14D31B02B1FC47C8BFBF04C4409D32CB454E8FA0EF9AF16B +8AFE9FDDC41F6A23D700D4AA922A0316A895D240C5595F21FEBA98FE0E74B762 +77FCC80F4950A8C55B4A008FD381E9C0EDF4427CB324BE4ABFC790CEB53E8BBE +AA90163A7BB19E2840FDA404E830F5478DD69B85C5E69573D8CDBBDFF41A8126 +24A6AB66333C749C35BE314777CC222D54FF2C4C75717FB938724EEDDFC2EC1A +8DA77B5482E760B68F0A2D240332BD48803004BC157C6E8E192D512CE83D5572 +D388BAE80AAF5E7240A73CDA7CFF7F8CDAA4ABE1D3BF6ECC3641B6BD1C2CC703 +275D48D62A15E5A85F003E76D1EA7DB65E3476CCCF6B504514AEB1FF1263FDB9 +81FBF1A1873FC287FC6B6DB11F0FB463637D4F3280EBD19976588F900B956FB4 +36AAA8C1F040300CAB9C4F624B22C1D3D6414B7CAD36B5AEEC90105B5A5C2129 +4CD540B9D0129813BE7E20870365F8C46FEC92DDB64D0A6C7C5B9867A4592B7C +124B1B47899CE2D1C03811AD1B8BA253B0D29DAF2B53E312827478DBA274010F +C919D122DF24C1E372F7F3CA77A2C0EDCDB2635F4136EA0C202D4011346902E5 +1524609DC031656660302CA36D376245A64135890C13A11C0085861792384787 +D0831FA01C11F1E7B4429DDAA0B3A7EC1DC3CFEA24C34DA4BC993300F12A953E +80C8BDA360789FCB0F1AEEA7AAC310D0C3C56F43F7914C3B037DA02C31EB740F +2B1A696E0E5553656942BA567DC9C4D3CA06E45EA615B7B5674016DCFA07C0B4 +285BFD9D551117A357F4BEFD58BCE60661187A5FF20D27D685B24BEEF563F0C2 +B2CFA2565112F7F49023CDD405AF3E54FF994630BE678B0D6E1CED514FC93F7F +63710D289026CEE4B074253E7E0AB1DCCAB57DA7A1E2050D2B8D3D75F2AD7423 +0B0A7081DB1FA44055620B0A2CAA54666C5EEE3C01540D96ACAAE98644E1D210 +E0E020214550D723431813C031DC7DF0D177E82AE49798F8E0E5AE0BB8FF664E +4793F857BA380297AFB977065B7500E4C0AA1735AF4E15703C860A016F19E593 +319D14C497F24ED8E42F3FFEBE976DF33D697656DC11A8A7C6A60219BF63F186 +E0FFE55594B31E5C312DBCCA08E84E94E8BF57CD5F5B70EBE59F0D41DD3F6B05 +F7635EA92FA9E082C80075A5A5F684160AADAD501BBFA7746327E3E606D1FAC8 +EF7AE7C612371BB52FFF41A97A349D111E861A83C9C48B0145ABC3582FCE43C5 +D121F0EB6F5D219E52E2BB660AA1DA5551D6B66A732628D640BF9D8BDE2BB3BA +046FBFE2E28DB31AEA2ED8F9405A39C16C3800E9B5611B460BE0F6716F2BF79C +902AD4FA3B6656E13E9DD7A785C17F28BD4D646D66058721610CD756E0D18D32 +F09C740B6023DFAD45A718BBFB2E65544D4754A5DB23CC7988A3EF45CD3786F9 +E100D9684549A16BC2DB736D43C293097E082A968C27F0C120C41A53E3464381 +F7DCFA8B36344EDA85F53FF65BCDACCDE7EAA41A6D38C1F420F8F2E287AB0F98 +A0DF7D8A6CF2E4C78D606569BFB7C51495493FACED57CF2D507DDD366247D807 +28D73CBBDE2F4F666099411B1FD2CF7B93D0E9AA161024C58892285BCAA65E55 +9FB37468777706D2C57A0DF6D520844B56D62CD10F2D7B02D17F97E4F87C16F3 +9BA09013FBD7ED8C2DBBB432288E598241369B9DA6E3EE324290D73BDBFB5448 +E9D7142036C0FE538F18E866A50DD23152E2C096E1045E7777888AF5CEFB83B1 +C6FCA18A26E83D75AB66291A5A5A285DBB1B9525919564600D71A767BB03A8BC +7BF24CC3B318BBC0F40C79835DE62366A937B938AD46D69C26DD0B38A2B21A60 +104698E9BC23BDC80D270FAF3C4DFF677E60CFD7F9AFB62B4BC36E171C079402 +E2BD9735E69C47AB8322FB722E8DBA6CDEA87DF40A827AB2618F74F1C441DFC5 +171FA17A96860BDD648B85699CC06CC8F3C38638084F8F4F7DA8B4AEEED92199 +14290A07373ACE6F9ED34CF5FD1C81292D7ECE91DB3F7B7E87BD9D405F2E29BF +660674457A70FD024FB9194EB0FD85A1955EF983606F5D58FB6BFB03A0FD7DCC +0F4E58304AAC2D9AD27F8A67E78A4A413A276F5D3160BB73DB27646EA4213C00 +A70E288F036EA3BD1FB35B49B9AA26C0FA6F8742178B15884E33D4CE17497C21 +3ADF16D6CA98017C7C118D8C67F71A4BC3C8794BDB049DD5A6892643F78B7CD6 +D91DE5FD6796E198D7C6AFC58D3403A416F243F1B58CF54E94F3DBC93516338F +CCFE3E5EBA9218379428AAAE8017F3F246E5094B6F93A337BD182780389CA09F +38B773F2A3EC4464CBC4C2E8772A73892309E2F12284A4CAC143C758C697B723 +0F54DCD8AA3CCE6DC74199B5AC793F7177BD0C29C80062C6EFADB667852739CD +23068352E3437128DACB7A9C1D2890EA23B029909722C465EE332C62F779FC6D +59D29B1E3C2319B57042C306ABE1171AD84F093F5664EEF387BFDF093DF2A295 +910569FE6DD519F7E7258236ECD89FA8C8DD43BFC4C135EEE52000479AA0AC52 +2A7777B9DE9EF13472F24B9410617088E264AB294BAD93820364B32BDB1B1627 +E7A086E354A118D9912324A8CBDA7F65AD20C836FCB3799CA31128C125601282 +80421422F0542D3AD57E3D1C70D93B159578BCE7D8DADA6395C634B6ED993FDC +F1EE90835DABD16A1F78C77D6FE4AF0D3BA0F9D0306FF7DC0132894BD4D1396B +1086FBB683925846AFAC5AD11C78A13CD9516826C19838B484C9E1DE1C793104 +4A3F6EC93C85AC329F1B59CA370EB0681089D4F3AE0A093011ACC94EC85807E2 +E2DA16DD14531CAA23573ADB8768BDA2313C2F6A4E53BF077361DE9B5051A00C +D4D7A1CA6443D300761CB8440B6A25DA6A2FE422FEF37C0EBC8773088E8441A2 +E5B28AC4777E2523E108942B0A76A49F673B0EEFDDD37E9A339EC21B37B7CE59 +B56B57CFA4FC20B24DD06941DC5B82642FAFBC699A41F624FECE54780B6D892B +CD80777ED127D7D9E7BA4758361288AA7DD59EA03F4EA29C6A70B82E1768AA34 +5ED9374131C8B17F1148D14D1B06E5B5384E2A4B132BBC49BEAB37F17A955D65 +777C90E18AA96BB5B34F38EEE2CCC5F1829B4140177CE1F01FF376F316E8842D +24F809A54F6259792190778C2199904F693E8FD2A3E670A4249E88B67A1903B2 +92BFD626072910FD793A97DB2CBAC5A8228FAC4299810E04B46A3C414C61B8CC +A6C009249E82856ED045E949E25F10F21F31FB630AC45D0DB3E81E337E0F7B77 +A23112F4F74F19A47831D05AC6A1E326B94D8BE832CEA49100E3BA8168AF92BD +C50314402AC261E30ADDC7D87D9476278D3DA524CC03D2AAA14A906F762EEAC4 +5CE83F1B97500428171417C5338A0BF1A200713CE6328DC449AAC552BFC0B40F +BFCA7694DFC4B4854F1D30C54D32DA1D4F0F1778FA5A98C9ACCF847122E2698B +93F934E1D5416B340F186B36DA515B92B100C95F5C448491BC70945D55F763DB +2E0EE939654A57C456249109D71348D48E475B6F14EAD34B961EDFC6C567EEE6 +4D1FB17DD8587BD01A95EA1AB2C506906E4DA2D3552DFE4518829FFEF2DDC513 +82077503D150DF80EBBD2354FD10 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +{restore}if +%%EndFont +%%BeginFont: CMITT10 +%!PS-AdobeFont-1.0: CMITT10 003.002 +%%Title: CMITT10 +%Version: 003.002 +%%CreationDate: Mon Jul 13 16:17:00 2009 +%%Creator: David M. Jones +%Copyright: Copyright (c) 1997, 2009 American Mathematical Society +%Copyright: (<http://www.ams.org>), with Reserved Font Name CMITT10. +% This Font Software is licensed under the SIL Open Font License, Version 1.1. +% This license is in the accompanying file OFL.txt, and is also +% available with a FAQ at: http://scripts.sil.org/OFL. +%%EndComments +FontDirectory/CMITT10 known{/CMITT10 findfont dup/UniqueID known{dup +/UniqueID get 5000779 eq exch/FontType get 1 eq and}{pop false}ifelse +{save true}{false}ifelse}{false}ifelse +11 dict begin +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def +/FontName /CMITT10 def +/FontBBox {11 -233 669 696 }readonly def +/UniqueID 5000779 def +/PaintType 0 def +/FontInfo 9 dict dup begin +/version (003.002) readonly def +/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMITT10.) readonly def +/FullName (CMITT10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch true def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +end readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 34 /quotedbl put +dup 35 /numbersign put +dup 39 /quoteright put +dup 40 /parenleft put +dup 41 /parenright put +dup 44 /comma put +dup 45 /hyphen put +dup 46 /period put +dup 48 /zero put +dup 56 /eight put +dup 59 /semicolon put +dup 61 /equal put +dup 63 /question put +dup 65 /A put +dup 68 /D put +dup 70 /F put +dup 73 /I put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 83 /S put +dup 84 /T put +dup 87 /W put +dup 88 /X put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +readonly def +currentdict end +currentfile eexec +D9D66F633B846AB284BCF8B0411B772DE5CE33C33655F6FF751F340A8D6C01E3 +2E02C24E186BA91B34A1F538959D4450CB683EAE5B034D030186901B458D3777 +6B3942BD2E07121385120248891AEC2EB33C4E3A0CF00828D0F130C31A918C18 +979FE94379C648EF21ABF659253E43CD1253866F157F1DF85AE7E8714F061B1E +ABA3AD094FE8D6293916FA82EE4F486C7E513A06D4C9BE44306A8287970B4ABF +B6D1F9274A5A0BB6ECF713ADBD1260D5D6C4420D357FD486470A74B2F0621B59 +A9373ABECDBF32FA68AABB66FAB0C970A3354A335FEDD513EB6237AC8EFFB213 +218B5D59505B920425C46EA55A185ED268DBAE2AD127742473FD1018459B7E12 +C21514D99DABAD554C53B868D24B881AE68B52684362D1AC0E86836194E335DF +BB6D37A7215F8F4F5C816783BCBD4DB6838DB92C13E514A1CC344B43D8B8121F +7C69BF2259D61B264AB5259DF53B7CADF565BABC47F75C56305448CDFF06E869 +91043B33C8FF9455A99BF35290E48EA7FEE38D35BC1A968A6B9489068F78E17D +B4634A84F0ED0F884BA33B46FCE57168E787167E0A1E8EF21F7698BBBE25E23E +F3D6F8957E9C3E858BA10AB9CCC45271F2B23D423AC0AF934ACE0FF6FDC79523 +20408F919B960A276FA88933B9920825E602C570CCE4C18BC4035BC59BF4F87E +6D05BE7CB7D0A77A6C8E666D73D216F04AB820F477809B8410941E00F743FB6A +55F98519E4B6DB552CCC264132BA31893928998BD1B95EA83246E90359D02566 +715AC489733A797E2532AEEA34F3702B8FD10B35803063296A3FAD8DC11C0D62 +13B2882C4C9B090AEA4097302239EC457537EE7B3BE94AFD5A8672E6069433AD +EA5F9A60B8DF0DE474067A65F1A845949CD12CC4E0919CB7C50C0C23AF8D6365 +083C3D64103949AAD9A71FEA2C70100FCEE6E7DCF19A7AEF7584F329DD12DCF2 +E02635F8710D976F815E76D3F3CF476655494394B44FADD9A9524EF08FC31EFD +A32B97875B55234F019F32EE4AD722B6669E27C2A629C3F170012C9AC62F612F +2A54F7B1EAB87B8ECE7B64A3BDA7B6BFD5B6F3F964656AE949F91F216FB70770 +DB9F68C91878C624762DE0E5F88FDDEE03953A97BCF473464EE216293D360ED0 +33AD04799EB9F1BF212DA7B9CF1F5E648ECFC0AFB4D935B09F36A752451930A1 +D4B662BC214513D17885D824D250AC3F036BF6377691E603F12241E2EBD2713B +E665433EE1E6728C071FC10EF177EC0C2D3AAD49BD2A0BF511A722FDCCD196FD +BE73113298371228B82129BE4B0CA0D614270821AC770E51AE71C71E6B7796B6 +B54F27FEB1D9FF8F6C4F3FB28AF32DFCD79B8B834EF8E02A818F8917A3DEA452 +AD22FF83BD86F4D5D05CF44F93CC4055A7F3D323621F49470260A559E346CB46 +37E3ACF70887051D7B58356067AA200838AB1CE93B7CFAA89CE01362B0D57A16 +FCFB51D3FBC0B1E1925EE1764C0FDDB0439971FBE93C7C6381716EA9FD252391 +84BAF2C3F2C230523E09D068507E1808C86B789333535065B889436A12A7DA91 +EE838E04D98F00B23379C9535692FF3D4F8A2CBC448342B37D781CFF7771D83B +A1D1B19CBD3CD6EFF51B850E502194EC0E275B1AD49FB345F4F5103FC5FBC605 +1F5BCE0423D467836A3D70DCEAC117EA056D12D37D4009D7EE630434645AD290 +F47482AB1E4868B8F195B876A8847F88919FCAF40768F2D927A5D2971B0BD728 +68369BD17075201EBA992B0C155B0BAF00D0B109B4BA239646CC5716E1BDA9EE +EBB5A34B7FF0AEA47595024C13A8EF233C8CBEDC7EFABA8CF1D4B73E42E667B9 +D86D0D3B042A018B01203B3C7434F18AC4B93D02759E42B7691D56D778153D83 +BC3D10964C98F4371C933E0BD5E18C56DA806976AA4D80E4FB8CBD6858DB904D +E862E5951CCE95656600AE399C5BFE7FD3ED380701745BEDC642CC77539DB46C +17F1DB0C16ADFB6D50FFC3964B0FDF9D207C7377F69D7B741A15E04136BD7124 +1433FEA5650A3BE38EDAB4CADA541EA9D47C16D1EB3140FEE88AC4F896F98D9E +0F97731290739BA9D456D7792C5A6B15321A1CE74E8E170368C832649C98597D +DCDE2338D52D430C98369B134B12FD3F58EC66073444696753911B058178FD52 +698FD8C279E72DC10D3E619D64CA5A8B2A08519B37FB9DA7FAD1CDCD5298D261 +BB988DB9257C3EEFA39A52F70D5D33342E841BBF95A075284816114283199CDD +CD7C85CA388002E4267F22AFEC408D0DB62647CA3741741C12EB8DD8F1042988 +EEB4ED6B9E8C1CD526559EB4529872E9CE833E8E3949AE5CDECB34B15661C4F4 +6CB3912678D23E0BB8E9B5A6C4A479150433961C0871947AC4E7F8AB76C7C339 +670A8943754870BB59B5359D0982277C777C5470A18E9BB14E9740C3A92C6855 +B78FC3F38C258C810449A3F69251CDDE108067F925474B768FD781881DDE45C0 +A9D198362CA8A8046E9C8F8A6AC3E40301D7B54244076020C677035317AE1F88 +6F337E2DB69E60D5699A8B6E5EF7CCB2E504C66D3786A00E4F4EA4D46F3AA868 +F66FCEDF67B7FFA9EC39E8E12B867019CDA6605563B120689CCC71A787B93093 +639146C052D9A294D4A2F17C135C760937EA22BBDA1F900318DDB515B4B7AE2E +AD4BB9310DC5394B9EE5F40AA5E201CEF58FA477EECF0B90C2CFEFF17DB458A4 +0558525C20BBCC84647D7F4FD233F1CC8760AE8ECD99A60A0D3138C8AEBF18B5 +9B59D86468814143CADDD50EE8D03928D541F8BF6340B1C6214C18D1590D09B8 +51355A8BECC452CAD2A1D8712BC2B1CF0032853B240492E1D6C7B13C39106279 +61F948E5D69EB4350AF3901B264510F415048C3931465A26E998B1A498B8EDD2 +08200ACF62EF22F5CD31753E7D6478FE111E8FF405E11F9FB8484A7B52703F13 +E672BED8D131D79389F63F2A6FCA03FB36EF736114BF629074E722C91A3F3641 +98012261143E1CB15BD8DF3D67DDAA46C3C718169126667A219433163017D553 +63CBFC93F6D1F338A1D0439734ACB2EBADFC1F4D5C11D4AA5EA25E52F853E5FA +087DD7A45F307A399702949DBC2267409500EEF8AFA9354308DE44869CB51198 +CFD8AA07005125202E564E6F548E296E698D2CA5B8793D86E28166682ADCA61E +334D861042393BA0857D77C5BCCEB9A4A16D44C95801E4D2512D7ECAD02C4776 +5139247AF495DEABD00BD787B028AD7DE9FE827DFAF22763D59799FCFB003278 +6D512F913A924460D9FB6C2AC27062219817E3A79DD96841DED1FB4397D38A66 +56B7A083F5C4AC70ABABB3D98324381F6109BC553D29553B36827886D80013A5 +E0407423A6745D0760BEB65A5FCDD6C00D68268DEEC4882B2F6D0D52C0D2EDC3 +86DE1767436A743C1772B963F081BA723ECE4B5E740D473BDA10658E0E2CC014 +93D6F59E3695BA3F5F7AB913653E3CE63C5F1C172B6E1AD1EDD719F163F2F3EC +E73A5C91FF854A1A309C72BFD7F8E56BD46BE7943B06A5700A7FA1CB86D3B09F +98F29BB2585868D5C8F9247A610D75FB3BEBD6068A735DEEA92A2F8D46E5399A +4CCCC1F0270A34FF5C489DA83F90237211BB3A4840EFBB296911F2A373C220B4 +EA4B811F943D2DCD7C395A84619F10C2B622676033B6B743CEE9D147EC25F602 +D216DC6A00064D707727AC08B732A6E313F16F8ED7A76103822F8FE73F1A9804 +AE575AFFCCEC79CE105D7BC648495256A25D68F812C1E3AF93A50CF06CF669E4 +13C5104578193CF37360A69E249B9E8B4CF71E8BFE41C510CE8019A0611C8382 +281B8A193856CBECBD5CE2DCEFC29E093ACDF69E5652B2751F52E70B175022D1 +BBDCCB0E16E467836D2A68580376144B0C6ECA9D5879450D5AACA9A8FFF0DAB0 +482692E8C4487E1F0902D0898DD4905A0C2C9173DF0C1CE8D10E17653F2B0017 +E57BF148D72721A58ECE5D5A3757E1DBBC36BEA533C945A1136396ECB94EA14D +8847136B3397625949620845A15F5E15C110CF69345EB01130E68607D0F01E6A +DE3D2997685BF59ABBF4DDBEBC433257D6A153B98848C484E1035D24D0C586C5 +E8970357946667E6E14FFF34110380A23E1DE7A26F7C56C6CA2BC3437DC0BCFA +9EB6784FAD114A2D1B0F967BCCC3C4F5704390EE3A34EAA95B05424EAA00838E +95877D86D1765BAE85E5CE593D4FFC2BB6FE3167A8EC85FCDA0C11F49A63DC4D +2CA32766196C626385461E059D1A750C7BB45ED32ED87668FBC8C82664FA1FB4 +4C8FFE345E9D80DCE8C7AFCB7654729E36FD5244E388AE3718F3E70E1BBF68E1 +D66EB6A79A9877412A789B433D0DA428F9AE2452688715298E99DAB167B481F0 +BDCE3A0489E87F400B95F63CC3D406C4781F159E58A51CC9FB92BE53B9A88687 +34B44308D25271A599E911091F0DD6C57D33B9240D81B20D1FA452A70D88F4AC +6698DE4C12CFF027D351EE01B0C942C9A2C856D485C765798647A48832FA8437 +A56A59CB5739CC359FDB3423246D62D276E51CDFB0D715D9CAA7BFEB877266ED +1A657D7508CA17EEB1F43243681BBB839B16F2028FF098A7998BEFE83F8174E8 +E16B6F9299DFE74FAEFF7725F09BEC6EF729D79723380458DFF9187124B7C95A +560BD01CBB70548DE318F722541BBF9B21AF2978708223A49DA2068463A6AFB0 +9DDC0EB5AFDFAA600F3D01EA01784D0D4FFE844E66D720E4B4FE52A85756A47E +AD5258D6AD5C4AFB3FFFC2130FE8E7CA62C025954CD07209444130C46CBDEB2C +306825F673A8B2EA21E19CE893C0130C8058FB540E74C6C1EE60BDAFC2458431 +C1043B152D45C754CCF7A9CA3DDB7510B381D65A54B692CF4AA2F97794E5C34D +FE40B6AEF0802A4C0899B96F88E3947FBC6B085F652C5060DC6C4E1300B55130 +ABE326D755DB1AB573892E3B95378B61961DBA504A06C3C94E5A8442EA736A9E +FD8B0EFD03765C03E452DF5E7B5479E36C3C2A6069D339D136994A4269A53ADC +B94E399A2E485CD1B93B78328998D397B2AB3AEE029D2024DF1BD5B1B4737AD5 +2783C573965210BB4C5CE107A3289C3E62005773989F7C0A567653914575525D +EA963D199A5BC15B51C476883D21A88BBE47AF7260BF79460784CF3BB43D91EC +88BFA515416602EB8EE0251CBD7A260750960EB6858C4DA72E7DBE9FB154F55A +192D587A289F4DA7142AC9CCB5EF2E8BAA32306EBD3A5C4B223BCDF76D2CD755 +AE8D3849D5CAB17F2BC3ED236D337677644D84637A7A8893F875D4F1FFEA107D +390133EB3C284A1A9387909F020A0A71CF5D2592EF725B1D56A7DB6F0012E15C +D6783FD87ACD23CB822BE885CF88D2C0306BA6E9934C391131CACB5342CF94D4 +D3E11C31A4211389DECB2E7E01152C6CDDE845A1005D4464F20A58B53DBCB387 +D80467A6F9A44DDA77B87C228DE8D64941CB2B5A65FEE919CF1502DE6CB7E74F +013A53B152384719B18482317A1D11BE5D145C1B47CAC346C4C055DBC7A158C6 +F3A12CB7D4C4933C322ECF307D6D4356976014149A79522C36FA8265BA16729A +52A854CBC9D0D5B106D1D779387A32B12706CC32A654D61E7F0176A52DEC82BD +41D70CB9150AA7C4ACDB5C42215C9DA636A234ED410DFAC4C1C060F2ABABB5EA +4F9031F8C40EF27B1995136AE9A838D09E09F5C8EDF2822456C7A41A9BA87961 +F7EF52BA00B2115C6799124A831F57FEB0A15B4F96A6711298C9116986E02C63 +897D9AB5D159EB0962B3488D8A98FC9445E7CA31D6960BFA096C64ABFC328D42 +55D0AD525F3BA2F14E79A113BCD777F68970429C004A3ABC3677C6FDE06EB833 +790A44D0BB2455C5FC00C580BABD4AF387A417BD2D7204CB6E350D0037656E21 +81E6039D7FB4C355CE6A09A7F78FCDA2776C440526AC54D8914EF719FC211DBF +057EB1AA66BA8915DBCF98E288367B6F58567D31B5224D81046C233B250C8C7C +D4D569C41A66EE217B5412BC27F26A5A3389398C32A56DCD1A189D4DE50A9D02 +4BEF161B623C3608A0E11F32B8465269DA1E2C71BD638F8D11F0457CFFC479D3 +1AFFEDE80B57666E1DAE68A50F6CF5C06C969BCDB7CE2FAFAE08FA5F4214EB46 +7F764CC35AB80A29FF6802AE1B4B3107037C0B6D0718EC0D9A6AF76F38D6BDE5 +895CE345CA945FAD6222E40DA0BE2CEF83814BF3A65576A4E2A5B9C7CE4E9D0F +7F89E869AA44BF1A15BA420D1BEED71B81776AA09CA6C181294138BF934C4997 +61AA57E0E61377ACF8B802EAA64287CB2CA0E116219D8E594A4620A310B61DE6 +C9999AD5C8B34880357D08A06B7E64E68CD0F58CE1D6F2D513A144C8806EB397 +BEA5B4597A261732DD02C59A13895917653129D50056EC73EAAD8F1B3E304995 +D692B02721C570066B060B118512F9B9D09F9E902F8A690CE75045C373569FE1 +9F5A85282D9A30A010DA980044E64F3AAE61EEE5754C50C409C703955460708D +7F57D60146F7A53744A83D50A31D366154C31754B3D3882517F972BE3A5927CE +E1E7B75A2C33D1287F160B19D992959946ABDE9F5A6A434FEE6B46DC281992E6 +9652A6858DFEFE69191D456BCA62ADF1C43366B746E1A82CED283245A19FB291 +9E2793F17452AE2956F925F5D3887A0F0C08B4C50A99811D08ED0552CA11194B +DF3E5D552BA139CB93B244293FFE22B833536BB129269610277EBF4623BE23C8 +38EE659F613195F7C62CB914FA11718E85527EBFB0CB852ABCDDBC54EDE764A0 +3F41012035100097EC0CC4BEBD54BD06F9A3BB5C9132CABE02E255CB22524739 +416659984EDBF9E7CAD30EB1D13229EB122482F87852C2F3490D8BDF228D7E6F +93A0BE686AAE8E0A8B577F18D3565747C52F1880A6731198461EA1E471B41BC9 +4189432510882EECB417092DE18AA3441D8EE6601C6DF2F2550BA217D2B7F313 +FE5901211116053FA76C0E8831EF0BC518290011A8FDC6AFF1A7AAD8D5F8D099 +E2738D337B1036FDCFF0940A2D6A177BC16F58C376DF77E3A18DF704151BA955 +8D371AB77B00A1DDD514DA96F8A5667D461632AD04A6AFCE6DB1ECF002C14067 +3FF64B7DEF336C983EA344A775E0A5DC7FEA870FCA06E23FBBAEA8D1139F21FA +4E625E12BD6B01174E8EA73F1898D3EBE14D897222B07A2BF0E133024FFBA7EC +A21C802447C59D1A71B401BA628DA184184F50E1CD27B107DC705DC1811315CB +58B423CBB5A34FD14743DE9C0276D0DE8AEB9715DA111AB6116645A2B5769F47 +F1F6618C375D1EC39DF7401B7CED996443E9E7E9CBBEDD2E75140BD1B3C08C38 +2C66E8874646580C332C4F98CD1245686EB5C2E79D5BC215B3795A6FA8D3CAAD +EA8719843D0081AF71A50F6C2572FBED7EF26D4C052D46C8296CF0F0612AA8BE +102E0E620B6192CF434F338D99527CCCE7C8EFFF29041423632D64DE939FAA68 +4992B22D98F16A5D9239C8D7C490F47C413A86067FC7CE66015F58C938284CD3 +00736728CC912135ACD20F9603F4D408F2924AD1B26054A9A63C758E769BDBE9 +7FF65425BF8FDDD95F5A02C8DA912FD44FD20EFFD3028B2C07BC5D3124DED2A4 +46ED8F3FBAB326FA3DF0CF872CB5F14E14BAD50434D0E530C651E5FF723660C7 +3F1235439764C95C9A2884E34F26ECAB833B1D1E159AC119769AB9B4E5EA5C24 +7DF1CBB85592C24E9E6FE50620DC4C9467DDAB08CAC6F066AEDBF3BF04EDCFAC +BE0CF1EA585539E6459239B804469C909F45C381338DEBBF8EB842690574EF2C +1CEBCD9AE367A1C18462124A6C3F1C03E37B00F91822CCF7AE24DDBC7F4B5217 +05762DEB3C714038988BA01BA1F73061EBB1D34BADA2F4BF09B41B59C45E4BCB +62705505F87BDCC02101531A222B51EFF297389F57C2479BEDF28C5B7B5D7FCE +6A9554840C7EF2F6B250EF594EFA56D7183BCF8E9A33B2604564F4A376EF8329 +1B4CCE80649BCF3110944DF9A1C72FD0B65CD37A29A466A1D31C752FD08E122F +7B074184549DA6D9D876F0569D0C2B86A5A5C848D0F552BB5AF9A293B82B32A7 +3879B225C78680BA17D91E80E5A76ACABC6A7DC3D9110067F9BC696CE5EEA593 +5DFD15F5C18165343534EC7410EE8729AA31455924F61734C54D3EBF7D332539 +C3531920117BA15A287D3CB108201A59C487148A6C01C5F6A9F2D18B3C73289C +A33BD156C4E4CDEE8624360372A8748F872EA85474D152AE12CA034E3B262C7B +4F5D0E7BA3B7FA0EA12C3F4B0C7C9DEA6DAD3DD844A1ADDF2B45A8B5CD33FA90 +B342D0EA6D0A182353DA3A33E6DAB7D1D4F655904A21171503AE6AA82DB4C4F8 +46868797B1D19FD7BB8290608AADA6CDE17853E4A40005EFD6D2075A3EF22C10 +4BAF20BE7A99EEB407C02FE60158DFE05AD51A5CF212F1C37E2EC49F9560FFBE +E85507801BF6AABFC9F5AD40CD7CD3DA5243DAA91F14C5A3F32333FBE9CFD0B7 +A7BD3CDBB66EC4FC6507421A6F3A37D988ED10174CD5175CCFE22D7ED00C7527 +2EF9EAB7242C20A0BED0E64E38E7A70D55B9A57C0723016DD8A837CCF12FECB1 +AB0CD1AE3A11548436BA9E6E874E502E4A0F36A96B1B1F31AFE2879BD8A9817C +CA4E2B049A42A9F1E6A351C415BAB1678012E6FCB1D4E733D245E113AD1FA768 +DC4B56CDBA5F3D9115C8BBA3E90F515FC15F83464808A21950CCEA6ED2E2A165 +DBC41BF969DAF43DF004160ECC4CE3F67A69B38567B94A6C09E13987E1464319 +AAC24C977D72CF57C4F87BC9C3EDD83314751D7C2EEC3AF2C40C4DE11E8FE15C +F6B650F7337C7E33D8B740309BE4BB0E27A8C1BCA482692935F79CE6FB10DCFF +ED074B6F2967683845C39A0D6784985AD5D78D98C5020F6BE49032ABA5F6565B +966BF6507FCB7E7DE6BCDA1D2CE323E493AE9A9997BD46CF70C1E5DC301B7182 +73E63696DA75B2A2483DE3F53538635846473D8F5F7C0D86FE126B9F815C83E0 +0B269FA3C953C13CEA2D3A428DC41460B34D5A3EC9ABE2C8AF0B8A11BE4ABAC2 +4223C328D29771239E08526B50ED7FFB72DEA8F9A434E1E456CB2B34C3A1F531 +51EEF42A0D0FDC6D2A5FA9765F80CD73399E25D71E7D553F4E7A765B92FA611D +574CA4DCF5B9895E11F026F946B01C0B8D24DB1488986E9DCFFC590BD4D1D3E1 +FC0EACB7465363EED630B3B7817EF0B7B25AA32CD704F14E59F04B1C0E4D4451 +A2117A9A23C944697D0ABEF7C0683231162DDC48BEB97CFEB075E6ADE14269D4 +6B6723B5DF43E00168296298B0ADB3BC8A57547263ED05307A569C9542FB8732 +0B6616B43DF924DA975FD5956CF3F85833598EB7239C93ACB88F717666A6D229 +455263E9226F2B53D21FDF11DAE4AFF77C927359B8CE1F8D308F968C6035655B +E7A819FCBAD24BD6CE41278F4B6C75E472F3220F73F0A46082EF70EF7FB1F54B +02A88EA84B9CF6D684B0FE38758D3EB85A957F226BA676FBFD17CD24689D08FA +4B5028811DEAEF67F0A6EA17C7ACE31E36837DF32DD95281B6FC38C02F07F11E +0EC27FB641B7E1A9A2FA5FDAF24A54DA3F6EB573FD2A591EAB0A4A5F5E56AD93 +68FF099BC6D9C4E90B8E3BE34B052622B6C2D2B146B90303D20FE8708C596C04 +4BC6BED65D9F8A00E31A2876891BA9D9625D253E070874FFCCC8D6784D8BCD51 +AA9D57004C7836E0812714E29ADB2842CE605B8E99089E9FCF6F393DF515B9AB +2B0330936F02AB2B41250BE345405FEF07DEBB4CF0C08A00BFDD223115B0D84F +4E57F0554F87B79AC4DD27D560A52F39E5E9BE1DFFF97342E2EDE580239B5D97 +0E5C68E458B223EBCFCC5F3AAC6E501258FC4B84474BF0AD8B6406A28FE60E32 +20BB0CD632603D68F59756870FB41C93885FF7999A41569A851DDFBE1149BE98 +A9A2E79CA963E62AB1C7906956E12F5FCFB38B12F46237C44931431CAD13A4C5 +E4B564D2F1CEE05D3FE24A94997919F27B189ACCFA1CBC8E05E15D0079CBF1BE +BA2C314B8B12CCCED98176FA5C562835B1774ADE0B5E26E82F802E20B9BDCD53 +25BBC7D9300233EB5BE091BF42C3233875E06FA28E404E3F1AFBCAB621552C28 +43C7713D9B90D05840A9846411FE3687973E55E5A265572977F6F1BE69857E7B +1BB9467A1CBFDA0DCE935B9248784BCDB0E740830D7CBD32E22486A6886FC5CF +98DC3D80484F60E59AED44ED28AE3BD61B761E53B62D59E98D09E9E73D951F8E +80C656677F12660D8AEC57205AF1495B070C45A0694C47495171264985937838 +78C05525FA1115737059AFD385342DD30BD3C753ABE029B71A74E5FD0A2B45A7 +02E0E4218BC9AF4462F926588E28905E30847EAA04CECD11BFC21DC9862BEC1C +75B2891303A6F290A5C43D06A72DD5D71314E6943C55951A7407E4FFC56A4EBC +8E80769A51F6D020FC1BA944580986430AFC68FD0E5D8E63C2F90E57A050B2FF +387E08EFC3430A7D9FF419A9C144D8E626E4661608525ABD1BC971E98353768B +7A91889E852D1B808BFC9FCE07F7E505A43DD02B21B42C07D896C99A1BFE2B22 +DC5C3B6F80D82EE4A66D421DFD912D222C4FFF7CE3A5A0C6A725F25DB75F88A4 +E00E271AB9E8FE69C7012495BD1DFEB452842ABE7FC161B6ADC546882BE28189 +5EC6A8FD669D67E0514F2D6F2F2D0AD50DDA16982A7A83EF2BF785835CCEEECD +6FF5A5BBE859F4AF8DBD170EC4017A039FB4BE8EFE6D09CFCBBF37BF3E7ADE7F +416DD40EED0CFCC96A9453269D92A530970ECF8A11D69F31123FA1F71C8BD41C +3A3B61A5A16C8646764585D2A6D922A02AEEA72576FA71819FD8F12FD4D59A65 +FC50F7331EFA99CBA19BE1EE65F0F0BEAAED8C3BF9C45D9002E066EDFD837CB1 +5EA78E6110CADA7D19AA441094D37A082504ED39C40E46B06F427CFCCACBD9ED +FB375A70C331EBF778B2176D7911353670B34F12E7BD805B4297FA47FF73057E +B2491D481341C045E902807444523460C25E89C4B2B9F2337112B21E3A70DDAF +7F7D7067777880FCAF0FF0CC042CE500AFB94BE2F5E83EC1E5F85B387455BD55 +9ABC735189DE24D26909E48F60A7F89380ACD3A16EA0811D5DCB6DD109F488CD +380A9E7322AA979E32E48A6D9EC49B83FF3E1C152FD1DD1A11958C7530E237A6 +FD33C428620D206AC91AF7470D433161ADEA3B038CBD26BCA69F748A7C2DC8E1 +DA0D4BA2AF6FFFB2102796A1A0E2828B71D43217F33BC1D06CE5D7954853922F +8DEE6C532D88BCAD38540093246DA783BDEBD0648513DA6CF9816CE3DC1E9861 +C87F692023A748943BAA5220E04479A56B7C5111CFC322A0AF133387EC50B9B7 +4D74BF8F6C497935F4F39FD93259B9492706AC524AAC11B257EC36C06D37FA9B +FB6FD8FB82298ACC54AA345B454E667614F4CD6B43FF664F93CA507782A7AE51 +607124F7004F233A534E5677867B29A94A78EE2897A6D64338D7960415106FC1 +97F3B94564393F96C9E82920198913CAFDD83DAF4AB7036BAA645BB8DC2B4898 +A2B4393403C3CE3C925D246DD8971937F35009D36D04A13802EA81B268660CB8 +6F5468A1DC1FA08298CA499B750707E121B1B40FA9281E46C6C12CDCFA23F93A +0CC67C81E2EABF5EE58FAB3CC807E449AAE706D13FB17E582406588033EEFFAD +5B19299C6BA7954414B60557821CA100528CF893EA8ADA83E5462924CDDAE047 +39D0A947C3AA1040AF4C11FA13CED02BD6319F647EDB882E6E52A55E6D38A2A1 +49913970C75570006662AF9F2D8A92C56E138196DBD3F04A5A224DD0368DBB04 +E0307C5524E4D517D56A49863161DF8E8D60C599E002C6B4C26C9E1EBFDFDAB5 +8BFFEA70C221049E862656873684C0D212DD113CA2356308F0BF24878D534908 +1122491EA6638FA3912D0D396E7FD7AF53170ADFDAC3C9C5898D4F9243BE0751 +06B1631927C4E8EA2F092977FB5FD2BC6AB9EE791793A41E4AB142FF487D25D7 +257BF329D6422696B3AA5130788DA1EBF4A96FC04644CC0F08EC4BF8B277DB8A +6A83E30D0CA5844EA6D39192F2401C26791E1438012248B51729485EE2398737 +BED715EA8052EDD273613EFE8DCD8CE6DED097666EDF893299BCC03E16248700 +6015D0042D0DE34D14644730B4C4B24FDFF6C300E8F37D5DEF781B41C82DEE9B +1B0181B64817203AEA242BCBC543D42F3B1EED234C2B96E99334ECA28AB4B5FA +3008DDC93FE1EFB9A3C780AC89294E6D07320376128DA2E59BB5779A10562F6C +16B1FE6B0DD05B48F0FA0B933687DF1DE992B9E65581F4E20C2C4B04B4658A00 +4B6532CA4846E088DA32EEC1BC4AB81C130DBF0CB47813BC40B5FEDDEE2730FB +6861E3F1F1DA9EFF60052F7E7B35CBA8EDBBAE0334DA0E2A0D4EA928A2D96354 +6394F31559E29DB0B7ACCFF23C9C4A130F8B93BB45318DA94160379FA92920FA +AB70CE10C36D3732AFD97DC65B08274C42564AEF5CA53301A44FE8525EB16359 +C93BAAAA5754288399F3EDE223C0C1B5F1325AA4F0202BB97F65F59957D396A0 +BE2B83D14B99F5382B8294E2C2217B8332983D910CE669E2645D753E403970DB +F4FAB8D7B23F095F5CC0E7BFBB9AC3789AB3D9F9D28D8563CC15CA3110D0ACE1 +54D7F94F39B32BDBF1E5F7463416E287C950FB7F4722224A6792C841D4198869 +076325A5C1178FDA69B967423D8EF30B6193CB00C30F5D96B7C4FE8D6771CB06 +7DCB824B2022EAA5E4C181AF1EC5DB82263571F0FD2B5BC55C8C5B850EE7FA1D +1FD9440D61F8CDC85D5E657C877B5423680668018A57998152CF0A17146BB18E +F9B355252AA69389BD731BBF272FA451CE014B507C3B3FD3E04EA3AD67CC6CD8 +DB254A575AE74B98B7EC2797BBD3CA3537501E709D00DD7488AAA9A4CC2CAD6B +B6B6874294E77913EABBC7CAE4DB767B21B850D121 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +{restore}if +%%EndFont +%%BeginFont: CMTT8 +%!PS-AdobeFont-1.0: CMTT8 003.002 +%%Title: CMTT8 +%Version: 003.002 +%%CreationDate: Mon Jul 13 16:17:00 2009 +%%Creator: David M. Jones +%Copyright: Copyright (c) 1997, 2009 American Mathematical Society +%Copyright: (<http://www.ams.org>), with Reserved Font Name CMTT8. +% This Font Software is licensed under the SIL Open Font License, Version 1.1. +% This license is in the accompanying file OFL.txt, and is also +% available with a FAQ at: http://scripts.sil.org/OFL. +%%EndComments +FontDirectory/CMTT8 known{/CMTT8 findfont dup/UniqueID known{dup +/UniqueID get 5000830 eq exch/FontType get 1 eq and}{pop false}ifelse +{save true}{false}ifelse}{false}ifelse +11 dict begin +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def +/FontName /CMTT8 def +/FontBBox {-5 -232 545 699 }readonly def +/UniqueID 5000830 def +/PaintType 0 def +/FontInfo 9 dict dup begin +/version (003.002) readonly def +/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMTT8.) readonly def +/FullName (CMTT8) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch true def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +end readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 36 /dollar put +dup 45 /hyphen put +dup 47 /slash put +dup 69 /E put +dup 72 /H put +dup 77 /M put +dup 79 /O put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 116 /t put +readonly def +currentdict end +currentfile eexec +D9D66F633B846AB284BCF8B0411B772DE5CE32340DC6F28AF40857E4451976E7 +5182433CF9F333A38BD841C0D4E68BF9E012EB32A8FFB76B5816306B5EDF7C99 +8B3A16D9B4BC056662E32C7CD0123DFAEB734C7532E64BBFBF5A60336E646716 +EFB852C877F440D329172C71F1E5D59CE9473C26B8AEF7AD68EF0727B6EC2E0C +02CE8D8B07183838330C0284BD419CBDAE42B141D3D4BE492473F240CEED931D +46E9F999C5CB3235E2C6DAAA2C0169E1991BEAEA0D704BF49CEA3E98E8C2361A +4B60D020D325E4C2450F3BCF59223103D20DB6943DE1B57D06E82116C79486D8 +C5C32DADDFCB2CBD26FE85FFCB176AA09FBE325434B8B9D358B7C180AEC54F8D +24A1AB4D5EE5375B963A221F060453E01768F0A398352CB2C76E6E70BA017570 +BE1C3D3A86E803B10B506FD9DB49DF5CC7BE17133234D7BE9230BE8B7481B357 +08595FAE04D04B14C633C52E303B06EDEEF7CDDF20F34D7F08D991DFE2C4261F +298E0A818EBFF29D3B29D1D0CE2F071B49B0622F65F936F6C1D4C6AA2860E56C +9140A4FA23BA31888345142DBFA79825662511437347767D4A13A976FCF67EA6 +7882D7B391B37FC1E22787E484D19BB252C4D73AA3D73EFA5C6341CF6F127033 +2B91079B5FF8A164666CCC65D0002EF7E374098745C84E3037324B4248C5385C +FCF0539F8C04CBC52404BDC6ABD1474617D06377A69F4851838F462E82A86BC6 +F8DB2E740B5270AECB0B922D4493A75422349138B539B6067C040F3007F04191 +CB545ACC01B4F28AF811266260FEEC04057287BB5C26C077946DDF23322FD99F +2B3DFFB62AB8BF12000AA81ADAA6A064F9C34D5F36CB7F66A5EEB7B494FA1AAE +32B380163AEE08F5BD270FAAD8DAF0CC5B6979B8D4FB6AD723E011DCFE119092 +D1025BB62280B745BB0FB140E82325F1FDFC029100F922BF206E5527B7D8F60C +3F3E3AE2184CB954391D10A1618FA0940F12159167494E29A46125CB911B19C4 +97B4DC76FF53B7F79E380D7375FAB6C30A467E02E48BA73403D3900FBB440C9E +951C081C8D5E04DC0C8E1BC7D552075CC360B7D1007367C655069324713715BF +F8182AEB6F401A1F029FB3962BB3A0B2775979FDFFD834D5559EE20CF54D789B +E46484073B059ED1980C4CB2AB70DC74D6673DA37D8D9214E6FDC7C29FA55AE0 +A01A0D23A71396BA0A0F332D36B7AA70C37462134C3A8CFBDFC91360CDDCEDD1 +9C2E12C44D52953E509CD6DF4FAA624CAF95D585BC4A036D73CCD5220B9D12A4 +FB00F763274628831334E1E727FEE9079E42B7F676EBD85E5F21FA095C1BDD30 +5F557EE701707CAD347208550DF890CF5924BC50D349A546ADD81969BB7B6E75 +FE0CCA1D5EF9F69BBD6D58247C321C91DA2EF7558D272A4646327AFCA6D3D93B +F6990BA00B058A1C5C34638E09A21350BF64E29AF803F2A1A4E4D5FE16E7B05D +FF63FCF02B6F39C7484424A71D27F93D308C1C112A64C85A041DA3CA11A19FBC +6D656A4ED57030284B10206538F39266CAFFDF5AAF91F50D9A6BA8FF51608A56 +13A89CCDCFB03D10E3F4F8A4BCBE617A937B5AF882F2B7E1EF7F8ADB5F1C3FAF +46BBEBEDB26000567125BACF48771094CC9AAD358E053C433223EC39ECB0BC90 +95B885CDFDAC14CF4FF78A8EF358BE6DE152A62D3F2897CEF469E030F4477687 +2B1355D84DC33C713ADD2C62E9C6E04786F6FA9343C144A726004BB7BA12AC18 +7BF664B09CB859A443C2CC51E96B0AD3F60B1A9F649B315955E6308171F95321 +94833FA1195B6363F5CB80CE85C7D8D5851D473C428D00451B66FAE160D207C7 +6BA5E1A19CAB4CB283DE71082DB5E9DA38DF26061B7B8753BC3A26666F053DAC +761A9FE0AED478D9B5EFCE77458A9AD93741F8080159429CCB04EC0B52232A36 +1127C9B9BE80084428DA88EFF6F702A40E825B5D91D1F64842E88A08932F9B1F +AA347F45EE7E093729A48FD29EEB58E419C6D0FFC13E3AD8101B820F3380A4F3 +4B44854426302753008E54FB23D8136CBE2BC7474753A387E4FFA47E3DB9F94D +B0287E8253DF368AFD908E5C4D73B0F1ED5729E1364DBB38CAF033517EE593A1 +04F3E0B2B554D8CE8A89DF73B96CF93DC899C5687B8AD59BD40B534D0906D720 +E39A6B0B6E1E2041751C6199AF63AEF60C5C175F1F84A78466557177B583398C +1A7B838DD8E67B4784374D2051B800629BE02B9C840EC6CAC22E5235A2CFE4D8 +DE0085985741DEA306E98D627163768433D79C03E31729367DCFEBCF37DF2CD2 +847215C1A654B4EF9C7FF50E4BE8838CB944BF4BE0D36FD32ACB1575811DA29E +571993E8E45FAEEDADCB497FFBB84678B2E3C4AD3BC7B758AC7F6156B92EA3AA +790CEB4603FA4C151EAD20813FFB71E3CAFBF339EA948AFAFB3637FEAD381799 +F73DF2A45E49215E870E047CA409DA46AA38682656AA8B3E9A6DD928EFEA7F99 +83B60E3065BCC04CDB941C0A317FAF418152EEF5C06663F89C6BDA2A3D97609D +7F07E0974A46413A136BB51AC8E935279D88DC5935C3DEAB4E2E324086D2CD07 +E96BB4CC990364BF6FC72F4F9001B7B31139F7D1F29A545CA18E352ACFCDD797 +D81A4ABF220AF57349B5D78FDB338D5BFDFEDCE28832C31C8B2D46860FF169A9 +6A1318ED69AD19C1A38FA4FE7C1FCDDD561EAD27B834F1F9A4296669B1AC6FBC +D6B319F7E67C8DB0617307300BE080225400C9BB1D968F0D39666ACB246F4D71 +CE127F962298628C5E987EA9CB44B09617FDB542F1A2678A797C51A18BAF9973 +610C610767F17D7265C7CD2065363E77D9ABF5C2CA88907CBE9B86E9468C45B8 +1A9ED80F02C434763BA33665BE8B12682B9AE96FA4BE35CFB14E6BB329180900 +848FB45E6C7B39EE7593DE7813DFF9747869D839579421585EAD074FF431B742 +3170DCD0D5DAB6684D96AAFB98D0DD9D5272C475FA1F593A0CB6910A4072C474 +65F4815A03E86F6E6FB41D9E106DF431BA84951698495F0AE5721D95F3A7A1B4 +97124903A3E97BC27CC6178959CBD214C686DA29BC4307F6E1E7E1BBBC0FB5BC +552D5F0792250A035B367300BF9346BD15EBC1811AE4D0D17CBA989EF7EA17B6 +E211853CA1BF1C54B28FEDCC327A30B7D2EBBC99897BD46A3F3C526D2DCE5A30 +46A3E68D37344569781839F1A5CFB96A8D90A35F5471280C9F3B3B55C23026AD +681FB8AF96E850F64C82BA46F3CCE17A3E747D0C39786BD50208F80AEA26F6B9 +618A40A213A1B2FE497CD9C9A55B4D96C203B84244618D891515AC7E92D73E36 +D8081D6450836D2129DA7C19CB9CFC75A56AC492DC18BC171A3EA4736733E416 +6E66993CFD194EB75D4AA2E4517EABDDFAD35E934C655845611681D451E9D788 +9D5BD13602BE1668A1E39B7CC4551D5A5E6014EB21B4082AE1B0D79DDC07A3D3 +C4746E30FB61C3968DED6852BEA3AE38D08E8F10976BB174C508E3E6F2CB5DBB +34B6A51D212EDE7364374292B61AC064BF43F0AF63D3211245CBF25FC6272A1D +707BAD29412AEA36217D4BD0458CA1D2D8C722F9BBED96C6210AA3C2C6203DD1 +509F5EB7107CACA76036CF52AC1EC6F6CC45BCB928E991A076645B7959BD32BF +FC8361EDEC8CEDFA461C70D8E9D31EC5418A82219679BDDF8D0F59D6E5F5667E +4CF7EE7E8FABCD622F9B0C79E463F523A970B2C4D2DAE7F7696A042FE46A0E8E +32847DA015D276E169F999CA3E0AB75C5F5978DA8D2E318AB3EE431404C88D22 +AB8AD890044AB19D3E984787C4C8AAFFEBFF9C8730760DA54C793FC0E17BB65C +D869E829CD0DA97E34E7AB9099B17445556C79CD9E40D7F723E6AF69636C06EB +195DCD1C2E67C1898852EB82FDB1FFB1BD5F88CD65754BFDAE478A95F1653D58 +035DB41ABA4FFBFDBC210B68AA720DBAF87716B84A41EA716AFD4FFEA6D89501 +991913C95BD95DEE04A29D8E9C9B4CC75244D3C699DD20FFAAABB9 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +{restore}if +%%EndFont +%%BeginFont: CMR8 +%!PS-AdobeFont-1.0: CMR8 003.002 +%%Title: CMR8 +%Version: 003.002 +%%CreationDate: Mon Jul 13 16:17:00 2009 +%%Creator: David M. Jones +%Copyright: Copyright (c) 1997, 2009 American Mathematical Society +%Copyright: (<http://www.ams.org>), with Reserved Font Name CMR8. +% This Font Software is licensed under the SIL Open Font License, Version 1.1. +% This license is in the accompanying file OFL.txt, and is also +% available with a FAQ at: http://scripts.sil.org/OFL. +%%EndComments +FontDirectory/CMR8 known{/CMR8 findfont dup/UniqueID known{dup +/UniqueID get 5000791 eq exch/FontType get 1 eq and}{pop false}ifelse +{save true}{false}ifelse}{false}ifelse +11 dict begin +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def +/FontName /CMR8 def +/FontBBox {-36 -250 1070 750 }readonly def +/UniqueID 5000791 def +/PaintType 0 def +/FontInfo 9 dict dup begin +/version (003.002) readonly def +/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMR8.) readonly def +/FullName (CMR8) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +end readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 12 /fi put +dup 44 /comma put +dup 45 /hyphen put +dup 46 /period put +dup 49 /one put +dup 50 /two put +dup 52 /four put +dup 59 /semicolon put +dup 69 /E put +dup 79 /O put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 88 /X put +dup 91 /bracketleft put +dup 93 /bracketright put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +readonly def +currentdict end +currentfile eexec +D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA +0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 +51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 +7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 +E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 +0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 +C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9928A7C95D3A6E9B +8E92F84CA0AA44461D2F4FA0F8B81C6F5B7BE98C9712BE166610465CF689DFAF +27C875C029C0116DE61C21DA0092D029E7DBEDFDDEE3D67E6936623AB53FA2AF +18BEDDD7AC19A19CADB6ED6CA7A26E6044BE414FFF59C0B98D5819A6B881F9AB +7AD0D03BDD5CD309C67811D5CF0B93F6FDC9AE64F74ED4E81F2E18D880BD842A +DAFD0BDF06300201C6946087FC0B999447BC370200BFB8CA420B668B32EBC242 +6DB1546A7164CF55B332FE9D239B65F532B69EF9F4F93828A44C8F5C526126F8 +B7A369114CA68D4F98638121F4E17F351723D9F1A902FCF087F94AFD23876517 +2D15B482AF2D68C3F31FFA864E031596E597882578AC7FB0DAE2A713B065B374 +3E2E72519ED6D50CBCA40A7275A7109A4F3ED8A4566AD8832890D3D1F4899850 +9B757442B7EA355175CD5D6D8B4152ED2D7EEB4CE30F174FF672140354046A45 +7098EC45B9DF3DF5CF7B417E201DA88308CEF4CED8E8903AF24FB8DD0187352D +25738519ECBC70304F8F620CC45D2586619205DA3955696FAFFE2082402B3502 +CB682F410DE5FFE80A4DA3D3BCF02E35BD577D0DE55E7B8A33B7A2FD5136B5DD +A0BCB61F8E7F4363C21F890CF287304DDB8FCE7FE207C0D160B81E7EA662BED2 +DFF8C444E19C91E72254257CD87240A70F1A964FA54ED9ECF27E27A57DACC3DE +EABB92C085030870C6CF5C40B6E47F5C0AEB30E84A73ECDABB2D754EF6EA28BB +16EBD6636BC288E62F4A38BFB55F5F4DD20FDD77D767F6CB52F9513E8EB75413 +07F1877B2C01278675177499E4E8EB09F2657821613F5C7643FC064293EC6E9E +B519FFAEEA36B19C9D1302CF91FCBF87FCB57C5F995CB6712BB3D8681EB6F05B +B2A4195A3C73CB4ABCCFB958EAC533BD89560D2790CDE1444C0F2E4EF27A529C +F01052964E56F6D76A190E5FF45934BB711A3406284AF130D4DC0D8112BB3752 +762CA0200CA262359D4F54C0CCFA9A50DE18C7DB14419E2990ADDC4A54B94978 +D9174CA39434022FA77FB30179EF805E2189C35919F5EBE215EE2A00B4407826 +CE56329C5586D8B414770BA5D45513C3AF1931D632FCE69B4CA504944E03362C +74A1177C6398A61A12DAA0F156543E2A8E9969C4308B7ACC21A5ECAC8F172541 +1B1316A88C0C163E574FFD3CD22FF08488662FCF2F9344BC25D02146F36CA6F9 +E2D0130C654B7485EEA9A110A33AA0C769121F81821E9A2BD062FAC158359D44 +3F9D9947200EF1EDDD5860F10438B162A69683957300C75AF7546C70C97AB2EE +37EAAF0089E2623F787F252569B06C665FDB45EC9681C0774ACFBA76B98C4E89 +7EB12AA5F8798FFC110B49C25E3A483ABE83B0BCC6DF0578403ADC369E013762 +C9D08FC94D949BAE636ACA9F36F4E3F02296775A062077B011A705B6F1784D36 +A926622CB3847533D7ACB24A4EBABB14593B5D8E1DAE2BFEF8A51835C8D4E76D +7543C126A4271C59A5881A5AF89331694F84489CA66725995DC3070F306EA447 +CF30F63CD476A46D528EC1FFBFB8EACFA2BEEDCF54C92CE2BD26DEA5827186BD +3A4D1709415CEE7D51D671357B4A5D11E835F63521B9824EE5282E58F05A8ACC +FD249461181A38C2F47BAC4E79BE368D64F886AA493C61CBCB2ED401C8AFBA61 +59CA6F6216D941A92AC52ACB3D7ECC28D6A58EF4CC70BA6DE23E80937AB38E89 +6F05FDD15B954C0826636267EDAF9F2BB466BF79D2E10EED9B04297E6BC93069 +79581ADD1A9D9FAE9306F46AC95B98C60A2E53D60CF1AA4069BE301E17E25070 +F98DD67BD8642B1D07571A32766072E48BF27E1576FFEED300D7313A358A823B +49C8F135961B7E259095C9BB67F996CE0B90E95344F203922F47E11753F70D38 +2ECB615403490310CEE6C03AFA97DA2F47ED47125D110FA69725BA0018F6A40B +29A307FDB3E52322A77A0102E6F57654CF1E96A134D13860D83AFA0A41112D3F +2247A09ACF7D06713BE443FA27C7E7220E875965D53030FE7D2D62EFD2F1DB87 +5FB091FEAF599BA8C5167525899E578AB341BFE2BC4E53A047093168AE189237 +EA55F055514EFA939DAE9E859CB5FBCF37D99484F44FE5AA5FA386B28BB642F5 +5DBAF059A50FE96C7C6D834531D64F1F2E99AB2E96EE74D149178B1C0618495E +293973D9A03E1790654B67C0882376ABEC17D74785B3737D81644F28B3BC6FFF +F92FE29126995A07E0BC5EF3A4B93789A103C428943E045B8D1A5063AE71E806 +568D48072E53DEA85253B01DF0BB7367A6BE4DD7BE514AD74E3F77C825ABA405 +64DAFA25EAFF8F63344B5F6B523629776CEB090B546469F6A6008DE43072DD3C +DEF51F62731037D1FBD0C038A1E9B669849EB3BEBA281624F13D20B61917A109 +A0A7871A73F7BAA18077360B38A4625C5DB9AB9E43BDEEB856FD0E2D3AA2E075 +267B978B9EB47F2369302E87DBD5D5B422830BEC32411FE75D584C58650EFB1D +136FEB92B94BF8939FD63AFB7349C7511E5E46AA7324F8B1FFCA9C2A9E9720C0 +A720918E8E860F137567D386AC29870FD990BD69465B3A3D2A0ECF2753578AD7 +80DC87EBB319EB5AFE0B6F6FF8616EA30C51425FE3ECBC5F8D0B0BEFDEF32FA7 +D168B4E85C804B7326A0942CFDE732B1171C643452B7099B31649CA2C38B62FB +46EBDF7180004C549B53F88021D029452C2B37D8C565BCDB0B11541039A13C0A +E45D4B68C7907B8BF08C6F41F564B62BB554235D50330E78DD02795516D969C9 +66119D718798120442CB7EB9877FF84EC69DAE25F8559DCE3BD8042959F695F8 +2F99845B1B5680DDCF181D806CC4903E077D1FF5E60918EB34C0B1E028422B71 +CA63EFBF3F4F3CD813CE831EB54265A555BDD35AD7D723F9CFBDAB29C54F8AFF +2D35C6A3299E0A2DB470C7B141B1E3E10DABB7873AE302926BA8743278FAA8C0 +DC6174501D6A289CF980A3F55F2DD5C3A514E7E7F13133C35D2697D64C25130C +DB78FC997968D6B3BC929E8A31B6D212C5128E4412632BC52B3A1049F7F2F61B +C74AE9A6AD19B9E2E240617E2882F7D29ED3A4279439107AF9AEBEE47CE85DE5 +CE9595A96A118ACF1EB1F5929930321AF7732E351E18C6AD378508E37B4C327B +0E06AAE21278AFA9255AFE5C022034DA2968D260879B4B38E7EE2E11A593DC3F +CE71ABA050C004473324CAB6F3C50E85DEDA3E9A27388D8FD3A8F6E42A79670E +F7549CFAD4CCB337A6E0BAA4846ABCA059F1E1933CF11DC0FFBFF550CC4A1B47 +CF7BCE0875FA747AA854534960F757884505A5AEE0330179A9547A4AE3E68479 +7A457DE83326DC30B67F27CFD4AB697601CEE352F72F0966B3CEE3EA24683BEF +6D23AD51B8432C3F0DD0D0F80791E1091F38988B7A54E466A9AC7810DE8B7893 +6B0AA6356597891D56190A7660BC7F657BC559E0525D41EC228078F2FBF89C6C +72D666DAD838CBF0861FBF0A1D4ECC069AA49DFBAE5C56B781A1D5D79DAAC256 +13E3F9B928A2394FC71691E4355642764459714412D6F8EF803FC5F7353822DE +6CCBB8FBE5AA1F2C7F4D384039D85E7728527DF9FE0239E2CF8BCB7411C000B7 +1FE660AE6A2A19229E5E8776CC83EFF3C27403935756463EB4721C51FE0B1197 +86C2F17842A0FB639F28083DFD4F1E86D7D3BEFA922514ABF489C5CCE93D6F72 +D2EAAE14F6CBA2BE4BBE7D7EA8EA19DB3A87350D4A52064137C3D15A5B05B03B +70B1DA7328D10713B83974C390C3270AF5A9A47C0BFBFABB9F31063B0CCFBB10 +0F236C74446688198EFF039110F6FF42FA9F82D463AD3958B5FD205BDF85DE20 +FE3F0C7AEEF350AEE6DBC1DE2E2DA4F4599956F59D6F121F7086DC120416E180 +52DBBC4E56C09746938698860F30007091E1CC0351B43990E47208ED495310F5 +7BA9C6AB3CA10A3F1B318FD47C1CE3B9FF1304321F9623E32D315AA9CE64B35B +F841E6C62B5B2488A311C94937879E5E0E170FA77AF0AC75C5E6E9F3E8F825AA +09C1702682E14FDFA72D27901C5BDE009B1E52E8C4511C6F6336251BD45261F7 +401CA3DAE7C4B0CAEB91B9954BF4A97C48ECE7FAD401351D59DDAE9DA94E2335 +74A2B880E4749D3D7026CB5299F16C204B6E00A20A6619C34922C7D3FB50F127 +3157CFC08DCC5164C8023CD1B6C3556C73CB8E4ADA845339CA9BABA1457ECEE6 +ECB9849DF1F0FEBC89E5F97C92978A500196520839CEBA6C0FD2E3D27BB4B4F0 +93CB2BB565F4627C6DB62DD0E084E627D69B5DEF42EF094381B62C0D67EFD197 +301B132420F51A41561E6106870147E0D597078435BE3819ACF0DE28AD779847 +F3D2CF667DA06955D53E0204CEA2935E9E984E76963D3079EC092031E2A10E61 +1227E5EE6770DD4D745A52655369EBA06A19BD7D95BBA271E488241199D1008E +36EA99F8DFD2A9F87B06B070158B466AA4C6EA3BA77DB0F853F0BF9A304EA291 +34069714368E0B94DFCBA3BE5EDB6C8204DFA7EAF5C3406F60A7056407D1BF6C +CB85C1F432F97D821F5518BBA79AF8453A568FB2C2D025A70CEC75F46C545011 +ACE3A99B2582793BA1DC655230AE2EFD24DE20A01D4A441AFFAB7771F223FA6B +9169849E727E494247F67D6E1EA9DCA06A082FE2094BD548AD7F08B565145634 +E7ED832FEC1378306DDC796303392ADB0CBA130B63B38ED57B7828B47732853A +893E8836FE19CCF27002AE92C2B2CACFDF8A42F1B8066E033B965D2E9157FDF8 +E1264B40813C1A4CE424274AA3528A4F09B3B53DD4D23789A68B3D17BC1398AE +0ADA2C2168427A49846DE0216908C2FFFEF4F13C1ECA12AD341E238EE46E6DC2 +B71B54C52659632911F901660261E493AE2483D64E119D9924489779B62BC9FB +A052E822FD8D83178E09ADC825DF0DA07FCE7AD68EEB29FAA275A13691B4A5A5 +B0BC0499CD6307610CD6209583C1152C559A2760823F8DC0B9B990BFFE7B7E9F +3969B968AFEAADB9FC0F1410EBBAA0DB979CF153F0B8C978405F8E6F2B6406D7 +AAFBF4A655A15DD6D1E9A7EAE10EF89264659B09283F50B734236885FC09FBE5 +98D780012FA77FCB19F15BDC522CC7312546C0730EF5225DEA8C22A3BC6554EF +4FE73B9AEB5C2F7DBD474221760E5F539A064AC450591BCF3499E3968F2CBD6B +F15BA2B37080A4129B66D4C2188524F025414F14DB3F96049A8B0E5EB2BBE7A1 +AD64A988FE875FE4FE5186BB4F5DDA16983CB052D474B7D72F3E8965663EB50E +015C72407C3437142D3D7DBC055FA627139488DBC5A0F98D805C2143D99F491A +167E07AF60EC9F17C36289368D740B632CB919A0E74C412B76CE7A5906D5200F +9E79CEB9C65ADA3A0F23E8947E834AE7A329A9F0AA7A6BF545B1D7B4666C6522 +CFF268634EA06DB3A82D91A4C0A9B227E79961212881A54A6762C335DE7E0831 +130C45D94394D21C049B9D189ED955438C2151514F17BFC67E431DD9A8349202 +2F616AEC1C7B19F63D5000EB4771370924BD4B9053FE78B5E4A244B9A149D66D +A8BF3B398396D2233E92E4A5FDC70FAADEADAFD255193D688842DBA865CF6154 +C9348D590F3FEB135D4B7BD4D76A52CB140888247CAFAB25ED51F4D187041CA0 +ABD956F83A5661CEC171B52AF92F9ADE27973B560C802E1E0FF51C4003D1289A +CDD09F8EDA8AFDFF666D35418CEADF3B0BE298F0D1E5C8E024D6A2017A7E71F3 +3A9FEC9930F1118101E040339F9D41379170928DDF5B5875212B271DC843F612 +E0C21C67263186E3D6929160464D4D5C8928E14D0845762C36FFBDE548188E20 +3B6BAFE5EECA0385142F01216FB8A90C43A472C1D4447FE5C7C78CC088FC72E7 +3FAFA062C338BDE8A430FDF1951B107D8D73FF9376FACDE5900BA362C66F8C1D +947F9545C5C13A53E4479B1C1A50472C05E8F8C266C6D4F4EB08E97B3B1BA972 +26973B844545089C5732322BCC9A5A8FC972FA0D7DB8BD85D2F515ADE65DA479 +0224F7EA2276CFED0B75B2C23AE7377F86F1F6F205D6FE19377D87E782143697 +984E731F83CA888199CEB425643C259D4FB8B58DD69A96085198306494BB497E +FE7C9954EF35B679BBE3847A9C73507874F71FC97665E2A58BA41407A1745247 +44A79B588D969D11CE4B863CDA655DAA53CEA5C3C263B345E782006CE9831D49 +603D2D95DE9E370D617F5928BA416C362BB2B4DEF16A5D44BD24B34257765F3B +6223B3F9B54DAED69A90C7050AB97B06693D253C6894CBD7B497DA449F1D9B7C +D91B421891EC0724F59C82B9CB288DC42F2D2D7A7F22EE3D910E15953D7766AE +276DABED3820390BAF2700C4653E1C77FE63DB71A66D93ED293E25B8412A1EFF +809554BF04ED0DE83F7F190883ED793803CAD2C34A66524D3A580ACDF3C13B22 +08F18905E7A4A16DA9ED2A112462FB9FFE481EC2069E484E8BBFC19D594153B7 +3DED4C11762223B7586483B06BC164D824D1A6FCAE80A35DE0DB8B33396771DF +76DC5C05578EF1BE00A70BAF3D951A01C87328DB2B0DAD6E1B4C21F37D1BC0C5 +A929BDE5EADF20DA60C4DE2E3C151005814F24824D33B95F700E09A0207EB602 +3EF60DEB1622B91DB99A855A8F1DA96358F05CFCEDBDDDFC8446AE3391BEEC41 +966E594E28D052DD5ADA49DFF65E79540EBE5329DFD86C23CC800F95221B9C18 +CBBF941D2FA47EF1EF59A89DB5DD188E75EE94AD2A79E2221107E5992C00D531 +2E00B544895A9204656867E3DE9D4CDB64B920B5CCA9A73E6514B36CABAE01BF +94C15603B86780190595560F792E5EF01650074EA4A9BBC6ED284B9AC2020641 +DCBCEE0ED27FE58171DFE104EEE4202759E594159DF45113C00236127A46FB35 +9EC705F21C0E456C1F0F924594C09AC64D4377C5FEEF764BA4A09ABA8D09DEB1 +FC13B0CD202B2F04CF5D73DEAB65C36C2FA7C0DC236BEEF6D23BFFC9C493DC8E +1831F19EEF81EEDD976E43BAC6B5CED13F901DE59835FC75490EA528A72CEB77 +24C38B258EC38B9E6B97F85CA8C10D8809BBE55A6FAA12456FCAC786942E123C +06D1E55F7ED04400088BEC968BC5081DC7A1B1B65166E7821679F76694F235FC +6854C8776AF855B83445D9FF919B1D80E98DE0741D06D6C5EEDB3E3EA6392530 +F1BA817737D8162F7B3A36AC2A03190CDEC654383E31934C3E0A012B639532C6 +26FEBE9B412F1C92D1943B7C18CEF510729D501349644C97F087F2F840074AE6 +D8CD0FB2E620FFC908BFCD938B675A0A4A687F7FBE8F3DD06A62D7B6DE7DF3E2 +49D367D60B10061EA86CD512F5A1BE8950D83C62695E130128E0037B62552D17 +064319BBB9B1FAB9D79705E5D68AAE9B36EA14BF1A59A863BDB8DAD9AB5D7B8A +E30E2B499F952D65877C8E38EDD7DB29F9579D09E629AC188DB6A6403AB4BA3A +D358B3770D727A2B77D84B6C9EC17E29D88E3421F9B7D2D822EB78BB8BB50692 +8C46DD6F9BBEF2E848A2B5669B200019802AD19661537A84D3514AEC5AA47445 +2C791E01DCEDF18D9506367241255FFADEEA6183F51A9F42448A7DE413C08359 +52DAD2A60FD606AFE14702BD3B0EC448720FE63438D020DEDFCDE3582FC31DF1 +17B25FC152789D2F17FD60B8209D292D2152DCF8D28B5ADC04F6659BBB746CDF +145163361823CA343763AA951C640B5D4A99B7787105A1609EDD6A596EFC3F6F +2AED1652A132D66117071CADB8603969B3A2F97270CF2AA8EC2AB890662FDBD5 +00EDD53F16FD0CE199660202373E2EA28D29245A4AFD3A63695F6178406A7234 +AB0C0FB1B19CB408E047BF014BBEAF4C9C19445C7819748F082C19E6E355EFDA +BF1C2DC348AC0AE6777F679E2F62A0A3EB19B7F08114AE0E56A3D310D6958AA2 +348E1D304BA8C4389E525553A8791632EAE32B6E8D2193932B44D230FA17EDC5 +7D407CB83D2501B0D2C9E86FD23E21F26DBAE2550DD4ACA051EA0A0030107676 +3643176BAFB7DF0A157151F7625E63296E325E2C3E74BCC92CA51ED191C856B6 +18914ECA6E39CA863FE26BADDDC128FC2D93DEA074991B1CA4C58F5C2F130A11 +8C2635ACD45A97284B8A8C849D61C34C2493201FDE2D2E1EA7349E324829A88C +D39230C99A36EB3FD38729F6E87567247A57B89115DB90A7C793A65BC09DF9CF +7AC51625202CDE53409BCECAE9060CC7F94604002D6AEBC8E4F8995AA5159E80 +FF68EDD097E9C7A0A15DCD491B2BA4CE696D64CA9316BA11FF882E061CA00527 +A9AE9EFF421C06A05C51319B0BB9EDC297782117CD123EF850D070796E1CD971 +3DB1C79252DA025440137D76B38F03908F665998048275AFFE792AEB358FA7C9 +97F8D566BB268A6DC6D2A3AE7C5DD973C82A1D6893821C185FF334810834D557 +46262BC7B8AAFA5E443719FCD40C4F8487A9920B0EF0C116A96A4D3051E7F2C2 +FB867C01A727976FE08894B78165783FA6ACF68FD72D1FA23CEB77EBBD42035E +A75885AC26DF4C016D5F477B5AF9A7368D6D413FD83DCAE72B47A5F3E38B7332 +5C287361732F62B402670992B46BDE004EBAB61CA6C1F710437959CA327264E0 +19B694A8FDF7CF308B1BD99F65F1ABFE0DB563C998D14A8B3BFB8FDB36D5C669 +0884CAA7AF68201FAA62C59338824F44A4F776532D93E0C1D8C3EFCC9103C3D2 +96E77521FE15B6A355A170BD284704B886CA257577753F351CD22D33E5124A32 +4A7C2EDCAA556B945A937DACBD7CB5E1D0006DB7CF4666394DC1FDAB26F00786 +A431AA06923F883C6AADBA44249EBD151FC495D00BA12A092840A740F32BCA7F +9DA1532F7D78D20B6E2F54EE758EE592EA85B46FD7B76BC912F403357EE201FF +3DE88CF23A60C87DEDBF7A4613799561268B474551FDD5B701E67D7664012557 +4E0DB36E3D8F3AC87135FD81D34A87986C3004ACDCB337FFADE5FE7BB711B098 +D7FE261BC332BE993658AA66880B72FE98A07F023586A96CA090BB954BA3546B +5AB4B13C36AE5B311FC5322289585B57BE42166149B7A63CA2801DBF0E90B524 +07B03DB1D677857BCB6DF4F71B9F903AC4CFFB76B248E1D79BBAA2902587FC54 +22C0140358A7522766F56A7F6324488BBEE069623004025EDDB15D6ED6762966 +040F6D31337118AA3C43DD8FCA3BD1A58B8D5B3D36B5C61B12F3B05B62168721 +6CC42B6A590C227C30570E092BD553734BD4E10E27B7A3E0CB02D5C23CA7659B +E3330CEC14AFAE4C5E3ECD9515AB7CD1E06B7AA6A6531C6FE583C7E671CB3E68 +CB6057D3BAE3D9B68F0BE3251BC9894A0150195A355BA323EBD14794C3EC6653 +CB51FB13213902D7F1B84FAB1EE3D42CD3B30F4355099B5A1F92D5E47E5C4C2E +38D0F8C8404CCC6D13705021F04159C65225F3323EEDC10D2DCE9F0EE37464F5 +C29F395B046906B9B5A1B902018DC35C49F459A7FE70E1D4EE122ADDA5B9ABA7 +F5EB2E0E0AD4DB14A1B7113927CA09F2F1D2958F0DCDA388AD35330F29662744 +9059B660399BDAB3BDAF7E4B00B539C470751FB9268267827F56A40096E524CD +9E1018E453784CA82AB4B08E4F64DF90D5EA5F3F84CF5EA209767F2CEFE99622 +E88B0B550BE54BE5FEE68ECFF71EED21EEFCEEB08C3E062942C5DF0372E4E796 +FA3DE37246CCA18DA4B9ECAB36B30CFD8BC9E8CD4737ED1EF988F9221374D8BC +AB28B28334D50B4C59D5D4A4CACDA92EC66A5B381A511E87F36CCFB0657442F1 +E7FA2F8BC0455D36C3DAE3426A243F15E0376BACE2980DF6AB3AF25DFC03E36D +A82C0DE500F21173DF399AB2F9AAD5A9E587B37E0BAD35873775010E5542A389 +EA9340F54881DCE356A9A6772E839972D46420182D98EF366A94184E9A168F0C +26B01E21F27230E151DEE4710EC35FBA674A435A27B6DFB21E4821A02F3BA11E +2BFCD46312BAB85188FF4F4A6CEC5D8F106EF59575506325CDB199E6EB7FEECF +C957B5771F193BA46422C49A14E505C143B811BA45CC1B90DB7B3EB53D3FA717 +700CE3E1FC2DFCD925675379569A1D7CE17AD63A8E2C9633A377D1E273FB6C5C +E4841EBF35E9897083E328C7F0DB96D54D6F3651897735A0FA1110802B169E2F +A5744C6C1B45C82C6851F667D11FB189B0F0528A739F2A71133EC8B444B7E711 +CDE5821E0C8656564ECB12DE756BE5B2B3EC054DA54DD12F92CE8ECEAA4ED7C2 +75F114932AC85B4A82FDFDCF6713413F461353DC798B271CB1805A81342DD63F +DA131C9D1E3315C625267E6F4CC7900DFD1289294FCC0CDAEE952CFE6DBA5E5B +F6B6DD431905C1369F49DF54435E0D803253462A670B1767F0EFCB1D4B15AF44 +FF0701A40A5A26727F94FA20ED2095D8757BC72492B381E4D3186AD502C188E5 +5094F1A18BA52B0C0A5D7F1949E9D7F5F8E63C93FBEB2BA054D7647A4FA834E5 +4149A36E71FC815A42A6DF5A998A4A2DB247F7DE247F5E398B777F11832782E8 +02387FA1AC4A904668AEBA0CB42AC9AD89A8AC777066A33A8A9858FF9AC5EC35 +CF119695D031A5C3C727CC8D70A06394EA9FFFBE07C0992903F303CEB2224D8F +C1B52F19F43D69DD0D7BB448B56699B532298A8C1C1D307DF2C7DFAFC7CF0845 +341EA8364F3D0FB352D5F5952F8FA6EA73D1EA278AA25FB6D0AB4A1DA260B03E +A0D9986CDDD715B08911CE1F2D90C64FC0793B173CD80241F9CF9DAC6B484334 +827E9234A0FD8AEAAC3C76F9ECD4B8C0472E7C7E22BF2D0C1C9134E9F0736B7C +66BAE6B32512E1D23B3B8FBCA3722679C78AF0FD890B85C04C9A8462BC1729E3 +4671C1A80F54B3ADD68DADAEE17C849C102B70458E0D4D61DE1FC178CA3DBA97 +4DFF6C65518FAE1CCDFBC35E9A76E9BC90A44324359CF9CDED052E5F6DA1E1C2 +A067F1CE3CCFD36E1C7C52C492B3B8EFBD1C7CE8AB315D7CF0A4B9305F737A91 +6BFCD0DF41B492BF2885441AAB735B8C7ED39E4118F1AE1806BE73E7DAD86051 +8D9606DAB119360D4BA5C307CEF9A3AEC0ADC03B85A4FA10F723106F5BF3E3F3 +95A90A9FE33BB17855A07156EA6EB8F44EE2E9B84327102BE39687C5911F01B3 +7894D4D4771543497A49022A4351A9D6B98B7B3FD5F270A68C8DF53FFA9759C0 +D090252E0567CF4ECB2A447D8A57298B0D0B06D4345EE6A50826CB3F1A51F0AE +ABD4642B448C358E2DDDB3EF95EABDC622C9913F0BC128F791824226596CC73E +37780011AAF2527D251A824FAD26B18DB548D5EB84B271E2EB96D2142D5A2CC5 +7BAF36342A20EA18BF5A5D75A545630F995F1F32718A2194EAB3EFF7E77D70E6 +80452467AEA36D370ED69C6C3B8299E085BDF38639734328493A1E8FFE424223 +3ADDD99E17CB94BB788153B10921FC7477D3AC140F68851988B91AA6889DAEB0 +BEB2EA5548873F12C10AA44306CA85D373D51CDF8B5AB244AE1E512FACD3DAB2 +39FCBDCE3CC8BA1F43BFBF5715190F14F76E54E6C6CA999E4B2012C4334FF565 +6D24E0DA26323CF96D36F0261CC2B39E627D31866E0E8A51C4B8B084C58A96A0 +5844A9F28A452D9CE40FE5C3DC4FB19ACE79A2F7490E33A59B5F7E38D392BDE1 +77FB621AD89DE7AA67F1DE5B3D2A75EF3E55E1539E2C71729C8C277C78BF4992 +95A3DEB8B0FD941D4F1EE8EDC3CACB2E74ADEE26454CCFD866D44FCD6D373246 +804B195427B6B4E8C1963315829CC4B7B75AD58022BDC55FBEC89595614093AE +1E044DFDECAA906F83CF87C567E77007061B4021E4372B1595D7D2AA9C0305D7 +17B43110D987B1B77F6ED66085D89C978799926D64CF184FB3FB66E3A9AE66B4 +1B55B65DA1046627030E7FCBD2F106991D866CAD497073A2B4394E55B9445B33 +16F91AA745231413E764A3388231D9A418B4549EB573821FB2C66B4051CC3A96 +D8CC6F0DE20C0A732B877EA2DED6A76F28088FE22315F6996B792A4362D353F1 +4E26BE1A59927C44F40B6FAB0920F833644D1C90E4C0E227A7E125ED247B90DA +F0A439EB3CD53F49E458CE0A4DE720ABAB15E8DE0743FD08A08AB67A94D90639 +765EF07C2E6A645DAA9AAD3FCB2CF51D281E4AF6337297B2AD2E47D3EF4E1501 +BCFD65703C546C949A93E63813B8FDABA9F21C42B588CF95DCCE8DA62EA5BD6D +8875D901C9EFEBFE00DDACC8D2BCF0065418EB619A0BD823A04D762F4A5CC004 +CD4A85855EA187158896DAEE40A3EEFE1F2A496A97C63EC52BDB7671809578CC +A6F162F2AFF1B980A746DEAD80B3E89F25DCEB0E3C20236EC2FFBC6E6D49FE33 +E7DCCEBE819FD7CA16EC75A1376D815948C1CC021BAE328F54D62003FE97F060 +47FC1EADA686DF87BCB53ACD1C6CD9C22771B6906A871192BC12DD6AC23913F9 +C7E0C10808736F1500BEC48191553BEC81A77F8A035BCC7FD1C8829702FE720D +F0DC7ECE0EF11D2263AB769E75074E58F1D241C95CF887F120C0987E6AA703DF +1DB8126CF132C1A76EDE5A35CBFFD483A753521BB874D6F08F9BEBD70542B5AD +C456DC1683BF1752483241CFD533F8339F2C9C402D64E614E48F7D27CCAC04A3 +1826653E500FD39B28FA22B8D97714FC6DF15C5715F358515E609F28F9276F93 +C4C9EF722780CB57F17B428675AA9CF55557A95B55AA7F9C783CD7997236B15D +4EE7E2FE6104E6DBE07D09902108D7DEE7A738B848A0CF270CE900B7658D68C9 +DC91E6F9BA956D44756D3168365F3247C289C99CAF82F19523FC65BD589F04B6 +93CBADFADFC8BCE85D2A7EE8CFAFCB3E107575D0D1C9081D1D79469B538998F0 +800C4FD416132EE7F6CD62F7141FC36C6593F0A3D526C31F7BAB3E8230B80304 +FB74387CB74327E9A38D3D7BA0B7EF3675E81BD5965A10428E06FE35671A91CA +D00C4973C46333E6AAC55832B3D5E2897CEA72738E5D4E38994E17E870A736A8 +8FEA7B2966A4FE3299179213DD3099F6D277FECB10F2AA3C5B275E527E6BF455 +293EC2D19B652FC13AD92ADB1A144B6457B085F21B63D215F6C72AA1B6D6F960 +15CE3667790FE2601CE0B31FF54B453AF82955C77D305FBE913FD08F0E973906 +D82D6FB2C4FC362092ACEF2399014DF2579A375C01ECBB41A14CBD617C334372 +A057A50A42DB951DA03A578534B40D0D0F67CA6362798A713959A1F5DAAFF645 +561848E557FE312123027694F5AD4D5716869B913F4411A5CE2D7107D0072279 +51DC4E0B2BA4194BE440C4F7FD07D8A80DBDB46BDD38CA1663197AEE6171EAB9 +52FB11AFBC2DA620A35845BE3ADCA18E06D623B6EE7CF770FAD579903191E951 +9EBEB78A47EEEBDAC0D01AE68401F89A92A33198D9AC91984E51D1945E0D7256 +619A0E5FD9359D36443CA14E326EC51D99516B2F835349A8CA5EE5F9D9634284 +9A2B226CE2AD57B945B86ED81813084AFA818F4DC547647EA60146F7A3F548A0 +3B0A22019AC46853C240E374DB0F79DE4A3039BD9E822B0746C76D9DAA37BB6E +B2659C6E82132E097A867FE109EA2306A67A49F359873DFDFBE84C1D4ECDC066 +584B60B442D25DBE1272908480DD5D056405E1285FD0B638077F93C14DE31F24 +F82173AAD507FBA6CAC274CD3732DE20BFD71179DE7888E64529336EAD0742D6 +D39EBB4231CB3EC41529F5CB51EB5508F533DF6B6B2A5969D4F380C98932319E +34FA15687F78572CE53AF7C87E370EEC5FB4367F0B4DC6FD96FAA69C1C5C354D +E56088E4D60E523F9F677600B52B78C3F4CBF6E7C10BB8E23D1AFF57AF249068 +6FA744DFEE25538233A0241C79BAC11A2D2A7AF0D30A4EF76759B608A1EAB0BF +F3498D14D0A03302CDCB1A5E901CB1A4B25FE8512D982E9BA815140863F898AC +51908BCBA2BB6FF49F1DA48E28E046C615B231FD5BD2442F6A7BFB97B7BAF060 +0AC2A0D7B59EA9A067B0FE96005513BF1BCF6ACA51832435DC6167391923C0FF +730BF17878663DD75BEECA6C197CA506B3B5D1ED535788D1BA6AEDE713B8442A +126F06CC772762D411E251E7CDC2E0E6FED4D817504C85C7EFE7274DAA663C76 +A6F9CB7276EE2EA9B7D8F01DC2299D45837AAB25EB3BEBD1138D0BF1E05C7722 +CB4E5F45B2C43B7ABD619E19416E0A91600B7FB078F27F8F4B8867300CDA64E9 +6F61C99C32FD6703B20DF82E6CC478A0271871106A8C03BD976187277770D418 +275C382B340F82BDEB75882D81AC197327A5B24D29D2AF644DF9DA89D95CA28C +0A4D09EA1C6704E12F033E0DB3AFD5E2CBFCC472FEBC6BFFC7E87656093349FF +AE1B24D89C50C3C5F55D54CD1DB23B5EAAA8FA87AB50BE495C07072685604BD1 +292BBA51C1524722EC59E7AC4EECF63B2ECE0A6837B1720B38125C8BA424DBC1 +39BC12125E46B3625B529DEA989027E71BF3890BA3AAD751CADF9229E5551425 +03541E9250E011C1270F5D53F4FEAF1937FA1C7D5A6E46F8AA36864B8777A633 +D190C41EDADD6B1C7F365E7B1106B4E6FEF13C940927D5E3D77781D6D7CA1853 +C80794F3044184841D601137494F6C609E3D51BFC28B4AE5F5914B51336C6026 +637676A01C6468F756D65FE9D1542C53F356CF0955D31EC1C871694196613223 +28BB4F6D62982D813E4595CB8E0940582BA9372F0D60A66143E9ACE9B9221C84 +3CB75E843E2898355DE33B028D1D3E83037A4E1E44988AE40948415190395EEF +87B6ACB433618A02ED350C2032FB6EFCF8A7FDA373062DC18EFFA35AB897620A +EB90A37A43EE06DE4F9F48D5B6BFCCC2C0975ACC623AA591E6031F9B9FD2F7AD +14F20089DE5050393917ED13BD0B6CD53DB9C6586F64A6EEC11FFA6B569193B5 +613317FA55E5E2FF4B7D5366357B6D6768C0DEA68268B2B37D17D0D9A6112BF0 +6E7C680065D23F593529A23398AED64D8FE63B0033FD89AC15125A63EA3471CF +3BFDCABDA06BC70B98EF141B8B05B9402191919AC97E3A474233C6E8152A94C3 +9173BA15DB0F3494CF3ED90FB7AF8D469802786D5254654C9A9E7ED152E076CB +C9897861AC7689184D04D4ECBEE43705FA98FC9D3F8D68E4FF18C12B9731E243 +C1700FDC6286D375B6F069E6D936EA1AB1639F803C79952CF5B39B97CC6ECD52 +4BFFCFCBB205E17E838FA8467E332D3C40CD605252F34DCFF956887472B293E0 +C665A022AB5F9A3D74162C8529437C995D57531747DCB18AE3480B6C8B4F9A5E +73CF815567E990D679DEED7F565C0ECB2D3DE8EEF0BC19778918F29D497136F2 +AB9444523A550D6488CAFE85154EEC0895FAEA91F32E195FAB5AB3CE3C0C630E +37A660756C0E287B9E4E636832BC3430F3D5998AEF862B54B2C6C6C00E3C0197 +D863F4E5987035F164F5ACB4A7D6C45C305D4E5E971901EB7CE36B49F3C701DC +43C0BE135848DB557CA513A06B5BA43E29770270330F75DC28AE7571BBB548CA +B2185CCC9F90FC945DE255975B36B1AAC142A138415F511FBC897403C6159ADE +4D669517678D19FD225AB3823FB020736F29FD30C7EAB33EF65BAD50CBECEE39 +FE70862534E87E0CDC8B95BE9F75EF724B32ECC869ACAF90B75699B60D90E320 +D9643E070921C41D061929300BCD6F13F2D648D81ADE3F0F73EC56F6A2C2EB26 +2A6A1A90FFD5E3DBC3E198CA65841533DE02E769964F3168FCD1850CF5205542 +55E88C39A168C0FC88D640CF8C44A09F54FB3FF695A39200A88FD646C7D14377 +9B957EEC68989CB9E4ACD9CA63AFBB943849870F2F601601F37ABC7782E8320A +5784E9E3161E38DA3B1EF3947688304C5C661ABA92B352F9C90C2F6AC39287C5 +57B3B8B06911CB800F40F3440331BD1E5A47DDA7ED8AC34CBB175311B92EA3A6 +A30B38A94351C236230DF2369ACF7EE9C1C1791274FBC35B3CA40EA249F92FD8 +4E1FB94F2B2731F0C73B2600CEC1403462289B3FE25639D9F986484C73A233CD +592BFC72C52801168528EC619CC550575FA25A549BF5932B729273633C50D677 +97986668F3AD4A7F332C241E77EE9D7109B0434629BA0EA77F303EEFF632FCF7 +F6DB0CE0AB85D6CAE07E0744349A960231CD27F3B166EC48199D3976A3F77262 +0672ABE2976B110167DD78737D5B2958ACFB1BA0D64FE649FC2A05036B7A471B +A96E661CD26D4A86C46B263EEB636B50FB21D6712DFB039846CC5716E1BDA9EE +E3D823361A477253E781603BA74284530B2DC454FDA90024AD6A1DBB492D4752 +4A42E96073E5F8CAADCF9E03C2B7F221757FA43669F251635BB9896B30BF5129 +05313E1F98305E6A1DD4E08F7ED3E5DFD83A159206CFD2297D9F8F527F97671C +9D7CE412D5859E1225EF896B845DBC70C6DE79F4502D863BA5AE9E05F6CA6992 +5CB1B5BE3229E2C4F90B1C1BE069692E8D13A68DB31E09B7C753465F2420358A +897F5D4B519EB8E0B1986A39A59F8A04FADE16CFFCFB37FC590640A4F674750D +B7209C9F3DDD62067EB9EB72BD8F6DAD70F11493BD7DFA5E49D1214E32FC49AB +906C68E76440CCC9FB4D20707CC7897BCE007EF0CA959B944B684F5538C04174 +60A031194ABDD91154D5446D0DDA83B31A86B50D9EE806BCC8CF8A362C2BD926 +BC3397BD029F6B56DC9969E389C18988518D2F40D19170037D086FE6DFCB5C3A +2A455B099E4204B45BDA862131B2D767DC0738A1068EA3CD727D33AF056A7C8C +AAFCBC89DA9AC006FB1E35CA103979DEC54F587405440A5D3002E2448CBEACE6 +C464F246A53D14D74A3871A89D0166736AEE894685B758500AC9FBEECC6415A4 +882B9C63DDF04B2631CFA1EC0649E559E711EA07BF1BE1ADD82A07F6655AD808 +F32966482F595A64ABABB8BC6F2F8BE766C954642274E65AAF4DC49400DC7113 +A5DFDFEDC7FE5ABE78FDBE6730A7339111C954199A4A60B51AE16B414B0883D2 +DC43BDB6843747352E2D8026B411FF736F8921EFCBEFB37230C68C25DF7B225C +7EFD3E4124859898D445D3B62A87F36B96345336655BCFD2EC4DC81AAF07DE10 +A653695C63A9EC0E3D166E633FBBF2E299C8F939D867AB5D4CECB172948B1456 +6F5FA58A6F4E15FF7711465DE7761F909F34A9A2069F7A5685A2B9965AF8D85D +B419B02B56B50E4CC5B15D3D08EB3411C45F620F06BEDF097BCD9B4E61E7505E +1EC8565750C0280663B7ABEE61D2CAF0BE6E20CA603B983A9B573FECCD0AF58C +15FBDDCA5211541C0D5C3B7E94698DE3B12F5D1999BB2565ABBA03F0B7D44A77 +894974F3914DE580A66E612A5B1E69035757F3ACFE358510A3AFD0A066646CC0 +317B88892B5F0B776C9BA5F864269115C5EB6C25B9CDD811753743CEE30E8AC9 +288C4B5190F1618B1DFE5835447F799BD7076B4D39935FA3E10A2029865F5724 +E26C9019FDEABCD97F2A911D59BA21618883B517781EA8DF63457A7FBE0F9321 +F2BB8646D359A5DAD798D5CFB5061EFF4B9740FCBE7F1485F135EC49ED0FBCB7 +A72B5B661784A868E7F1B6D533B11193EDB0A00F1DB2B2241F31B8105340C683 +2A3D8B624CD4D37732303AAAC4739172DE4782DAFD71DDA834EED62B1DB3A159 +F55D00AAF0D4B7FEE79D10AFF1BE3969A0541CF5DACFF99DF963E33650EA6304 +1D189643F8D8CDAB853953969AFBC16639ABB00FCD40ACC6426858DEE194AD32 +0BA160C1296C25A5683C40BCF2CCC733780A7FAFA632B02AA6D7654D741EB9DA +D075A7A7FE90FC38CF08BA6BF138E297A34A2E02310A793271AE99EAC6A8F2A5 +31EE3F6ACFCD2297BB2D19370840BD8D576AB96C30EB41FB84F0C4E87A209966 +988E5B825CC5FD02CFD6B1C747D7A632E6A04096EFFC89690A08CA569FF80027 +EA0D595518631E3D18EF6735AE8DE94714A27BDB66748EDEA879946084304479 +F1683EA776AE954A62183CF6AA8376A36C64583E297681D3F986B0B64EB6BE50 +037C854053C8F54204F907A403BF9207BAB85351640CA0D6E1862570A3A8DA19 +8414DEFF22E70C9CB28FD6F568DEA39BB1F9A8C264A4013385BAC2EDB5400B4C +53D2A5072ADCFD20920702BCAA9203631A30FB8EED635F81EB4E6BB924CFC46B +5E5171F68D6F04DB5FA3C8894AA9C3B730924D501A4AE9AE4BE0790E7362DD49 +2BDB07C72A052BBB +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +{restore}if +%%EndFont +%%BeginFont: CMR6 +%!PS-AdobeFont-1.0: CMR6 003.002 +%%Title: CMR6 +%Version: 003.002 +%%CreationDate: Mon Jul 13 16:17:00 2009 +%%Creator: David M. Jones +%Copyright: Copyright (c) 1997, 2009 American Mathematical Society +%Copyright: (<http://www.ams.org>), with Reserved Font Name CMR6. +% This Font Software is licensed under the SIL Open Font License, Version 1.1. +% This license is in the accompanying file OFL.txt, and is also +% available with a FAQ at: http://scripts.sil.org/OFL. +%%EndComments +FontDirectory/CMR6 known{/CMR6 findfont dup/UniqueID known{dup +/UniqueID get 5000789 eq exch/FontType get 1 eq and}{pop false}ifelse +{save true}{false}ifelse}{false}ifelse +11 dict begin +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def +/FontName /CMR6 def +/FontBBox {-20 -250 1193 750 }readonly def +/UniqueID 5000789 def +/PaintType 0 def +/FontInfo 9 dict dup begin +/version (003.002) readonly def +/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMR6.) readonly def +/FullName (CMR6) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +end readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +readonly def +currentdict end +currentfile eexec +D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA +0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 +51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 +7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 +E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 +0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 +C01924195A181D03F5054A93B71E5065F8D92FE23794D2DAE339BA29C1C6F656 +1DEF13780383DAE38A868377CC7D396B2A05F341AEE0F8BD0A0191F51AD11A4D +2E927B848A1EF2BA15CFBE57A51E3AF07598275195C9613041F71C1AF39E61F9 +EFD5F6512FBDA76E29DE6B508F62F5CF9F73F5288DF1C7B0B82C92D3B6358BAD +EC3CA20BDE55DAA7CC58004AA86B6CBF8C410D8287E88BF20588A39309C2B703 +CED322F030AA6069869064486CA651DA054FF3F5E56534CA358B0829A6B954D8 +9103436E6B06DAD1658BD4A95AB41343B01F5866FC87C4EDFC71F1477C98F8E1 +1DCF27EF743FF90BF918AB8C4E5AC35841E2F745480E5EDE1C1DEAFAD8D0018D +2C1F1CFCAD9F6609859DEDFD1648A6CD23D8ABB80747F94899F17C8F3E6CA55A +E176F19CDFDAA0D7C920B3A72051A4745560AC81978C92459EEE5AFE85AB247A +32981139CBE352B248F4BE5F73503A084A3E91F05328EE521D9669E44E202584 +5407E7846F9FEE3D54EA18FFB144BF2D6803BF65AE402034B3CDBB40DD24217A +3CE0E95E2717CACD603A958187C42B3558AA38D6B6390EEEDD396F96E6041FCF +6F8888221AFA87EAD79F46E0E32CAED91E6C8500879AB6E580C581E8C8CE9B68 +2BB5EFE2604E8DCB2432D39D75EE556969F1B2FBDF6A4BC72D106AA7CF22C268 +464027898B311613E06E1584707F262F71D9F49D2149306A88E02BC60BBD6BDB +EF41D90F19197BA9AEF32B5E63D5B9FF41B5602F9F786E76621DA54D574981AB +87A72081EA05D6C6BA940EFEBD0904EA4E77BBCE17E20B42E1722617E0F6EF32 +F1ACDE9D758594E9C81049CCC10605A27C2A06872FBA9F159CB155609B496ADA +4886F478E44029B5E620DE8319E257697E93E1CDFD27D560E2E4D34507020E2C +D9FF06BFA14E056D81DF701FAC3ACE4BE6C098AE116E079F0044391EC1661F6E +7A93B9320BD7F91E8FD2E8EB3F5CAE997D5CDD35107A1D35302260D1499B8B65 +39625B7925F97D917B66BAFEEA992873F07220714F192839948CEA080BDB9A03 +77B9DD032273DDB5629CB28B5D8797EDEFDBC601823E038384C90C79012A7D96 +8F27784DA15BACE21501C26E3AFA5DCCE81B52B0ABAF71A35D33103EA86F2415 +A39A830D559C5C6CA7423945BD3DFA942B20A06D7A8D8671F9831DBB52907AB4 +4E54776D29C6085CD9970B6DD21DD3EA8EB09C49CBEC6CDCEEB0BBB1B8827109 +3BDE64DDA024D67F098D6C1998506DDFF7907ABAADA1C39C759C850E0C6F8E89 +A392D1C9329ACFFA92D361218D75E115F70A47C53B73B356D703E9C499AAD098 +AA9C8119EE9E9708A9EA3049E976FA19AD04210D5F6092C7903FD155113F3A3F +269B746560F70970AC9F8D09956E0E84DACE4112C4E7C7F6B3F0B63D26EFF95E +2B2E9699D16BC8AFC4AD9113AA3A974C9E82E877288CF71E9169D2DCC61AAAA6 +C536E5604EF0716F6487292BBB677518504B52C63822BED3BD5FD14EB41EE6A8 +AD4B6CF90D39F98E12A765B645CBA3E8552FB9A986390212CE119E7C3DD675AC +17BD006144BEC534DA2A860188619F17589008409C5A309CB83FBA70F6446B6E +2B56991B6A03B1DE10C621591CEE45BECA27C54BC8B4F1754A9E8F660812710E +117850E1BB6FD89BB13F8CE391C43DA89EA67E9C3E7A4697790EA26B0E4E2E80 +DCA508873A7AFFC11B8C02EF86C2316E8D8B6BCEA37F81A3A87546705F070C3B +9D4D28C366CEBC1EE485B8E2357DBE46E86C87B9939DADA60888AA9F1B92FECC +CC1C198DDB594BB70A8FE690ECAC21A414BAC89BF019F34D2A130F485EAE35B7 +2A10C67EA3A48A4D9734759CC93AD85C6A570500AE5AC9973FC76EFA06BF5DDC +26E20E28D16B50957EE01AF2653F8D860817967AA5A9BF9BF7ABCDA710E9F34F +4F0EBCC32B3C9C2971F6225D2DAA6A451366B83F32B2ACB83E746D365B2DE38D +C1AB7447FE7B37F9630E410E5D8F0ECE74DF46C538947B3A167AD9F3E4A7EB3D +60F5425AE75AC3A27D39311DA35696C3DC7282AF1532E7AECE63D13DDA0296A2 +01487185FDF1875AEF55A36C17D6A8DD329279D229259463A2F05CB7A874374B +E2320E1F6CFECB9C1CE62FF468C29751ACD9754AF1EABE8E7696C2888914416E +235B6766F20FFBEFF285277B639A51EA2F2E30D207BC891B00F0436008F980E0 +9EEE7FB375BB069B9E0BA11DA951A99D8E60B4F920A0495C247FA7DE904765AB +DB5C3B2D634757E43EDD6FAA4DB3C67F82D6853E1170F0B2D8CE496DD4E72B0D +28277BEF172F1402959F64527F9B640619F04416DDB9D05FB2ACD019CB9C119E +E544D24EA6DAC5C69785394EA50E6EC9AAA9E14B904EAF29A733C6D7942B63F4 +85729686742F26DEF78DF0DA1CA7CEFBB684F4CAD99021A3B3D1FE03B9C5A4B1 +BD04CAC89BB91B11952A2B17A61789BEE0C54B46C03FE9A1AE73D17CF94BA30A +237C29D414C3BCE8E3E2DDF83C0BD59DCB66C4D2C3DE73DA8378F3C6C8035D28 +7464399857E57651A53E9C4AA68DFCA91B2376CF98AC5290FDB9BDAD9EF1604E +9B0A70EDDA1E564B6D2456E7BC722454ACA8C4950FDD44B6EB9AD01169A9F845 +B06A0DDB7897C847A5B1F42258AECF3807AE936C8F52C3A7A0A85D68160AE442 +FE81543DA6702D76AB6E8701F80DFC1D87C961E350D0E52AB2A298B9E5908600 +7E14D2A87309043CBF13F69AEAAB1BC239DEA88EB5176624F6046664B1D2691F +FBB2071D3706F97DCCA355A6DCC4D09FD35DC078FBAAF672FFDECEC61050A120 +10B5A96629041303FD01ACCC7686165DED6AA712FF8E5E85DE33C4E7D877C49C +6C469A90410BAF60BE65ECD91CDC2EE7AC0CA8BA7B53865F26092BFCAA0BCA77 +B80DC51DAD09C93C8DD8E43502B4B68F3D5918C3492196292447732BA90F5AB4 +9F5E1D634ADE1CCAAD028DE5EBA9535F6FC5908DBD2D643E0A7E059C8C386FDC +E72659C0033F535C0D7F6B98D0335552D0BF3C6E302B672A5EAADFCEF81912E3 +8F54E6FB7EC2B325125159713D0AC50DEE3673B9B148643727E94C80971A2E73 +5E1E13237BE69C84FC039DCE02ECE2668AFD047F21A61BB94A9F498C9FE5CDEA +B274B40728B6F6CA9B6C15BAAF92F465B0D7311B46545CBA90D874839443CCB9 +3110F052EB247B24B45A3D2FA6FBC7EB2A4BEC2A5892914B3C5EA3F4F9B9DCBF +6F932D95700E045B49E4B1F2C9D2A42CF39CA2F5A2654E6E8E6E92473D28AACD +5E35C6705EA728F704F5996D286BED433F976AB7E018621A577AED7C0AC0A84E +A032FE1869F603E6F20386E3A190A30A21EA886249ECF8CDDE2C33D73BA8647A +3DCA7A8DD9E8EC8D9A415D126BA38B6771C489DFC419303EE9C1B83FBFB3A0B8 +97D64F30E4BCBEC24DF603FF3BF541E00D5804B6B6543D3D2B661CC551D497A9 +9DFFF535AF424B2F3150BB39AAE8CDB306AAD37767BA10BADB031DC2FAB16955 +EE78342CCC0E8B5976BF98F215461A8C6F63EBE6E2F1A1104662DDE53388CB51 +8B44F3534853B8095F3B746A2459C2EF800FB1EF7F235EBAA9731E3AB3BE4369 +1D3636E3ADD5BDF0C34FA80E90D8A1DDE770943FD196E0A7C5F1FAF6970B34C6 +4673AACA6B2B5C12B9608521AE736C1F4B97209B063D991300ED5AF3D7F27E76 +68E0B858FD8BFF86581E2B9548C691E3E5D9EC4D39C9715CDE86C7D22223CCEB +8A38C776A30AF14912390A7546DBECECD7A687D4F08646E57A12C80DCA022B7A +33399761A50B8E0ABEFA1163EDEC3DFB5DA3248792EEEDD894872D4E6814B4C3 +548BAFCDE0CABBCDB97EC6D1BA47F2E77CC1389BF19D73661749AC33F46A618E +A665A85776545BF9662F2179D7BFD604FA8EF4700591AF3AEC647E27B24B76F3 +133F9198DC15C1AED830E737909E43EB91C334C44BA35810007A3888E33F5DA5 +B3B2C35481C648AFE630CC3E08F77744E401B2934E407D1EC17ECE737606B076 +F8DE8EF3344F57495EF49D11580D6FB28AE0B1422521B320843B13467501CAE2 +3DB93D7BB779F73B6AA30050DA74BDBC3F8DBB30F32EAFD07734A151BB2BAED5 +C9B1F790059339B64BB4146470F30928C9A49AE88906BD6FDB7431A4B50809CE +0F67ABA01CDCC2320B0B097187B9299E3D80CDD7BB5DD5BFA7B28D924C5633C5 +45A23CCEE097C41C3759C1FA8DBA0DD95034BCA89BD23FAC18C70093F40FF2F8 +0FAC5DD4835F2DFD40540E9A9E9FD951A8AF2CB766597DE00147B163BACFB7E6 +EFDA4DED594F1C746D8B46A1145E0E4058F5917B3F21E9BEBDE745EE72CDCA64 +FB31EF7A2E55265F32559480E2B6726D3DE26FFC97EB4E3160F117E890C4B2E5 +8DF310E6A728ABA85540F571C024F8DD58E1D7827FE97CED5EB31547EBC36415 +02B8C0E10B7E37D816F01D56A364B8552CBFAAA95BC4BDDCFDE91CE0EF005B4B +7AB56FFB47A093AEDF0DE1EA48FC8103CA3CA1470864D2693E360006D05668A8 +AA422CCCED20DCEEBEA5CE0DA1EFB00FB93E922B18124FA11A88D0F6E0F719DA +57603DD5DA42E1C56C2FD9E5415AA199D4F334C151C1157E75C107FBBFCEB706 +5F4EA47A29B54ED8CAEB8DDA2F53D2A703B95487619780A52DA1270011648A28 +AA64338E04AA5B92C1EDF3D8DA34FA6D227A0325EA6F22E9B38B6338C657BB21 +CD4C582DC04010330F62923F817E4EDC6E5C0E6500F2A975A8A95BAA30C4A134 +BB31B5AC45A2E7F6E9CDFC810D41344C4F606049445F8E93D74271C1E29DF7CB +5459593BA28AECF64D903D3E4D77CF5C04B06DE44A41EE4D9FC769854503AC85 +69E4A5106E84016DE3D59865D4AB30BD6C9E45C45DCB5408421CC50CD6179C85 +34E55CC70FBD8FEFE9F1D5160664981716E3BC7F24B6F54E0323D9BC4B692971 +24419EE62D8B0BA726E2B4294A9A76F328B8101DA29E78BD5C4AC383350FE196 +4D42DB1653637D19530124858950C22F1E9CF5BC07D46B7A58CDE19CC88DCD2E +7FE4EEFD8AA6047E919823C8CAB2EF5274F45E861E6508CC11A8AA90AED2403A +B2BF1315C2157B3B50A3685205D93E40906EEE9DE5985405974BCE0B84BB37DB +080A45C5237B269B93C0A7CF294A18B45464A41F604C494CBEF829A381155CFD +71CEEA54CC39EEDB6DF58A9896246B09F95DC6BC40BA6916AAB5ED3D24F66154 +3662F8978FC63DA9280FF7ADB09EA5BA79D3B66E0C88BEC1EDD78DA93839073A +A4D7B0E627000C4ABA76C47CCFEE92E319315333A5584A951E34C55412049C4A +A5569FE65A006F77B416E0530AB6A8E7AD6C72340AD4CE25937158FABB2153EA +281E1D840206F5DA38E00815E9081F81DAB9FAA8F4DAB305867AC84735DB4F52 +A36129929BD2084A8EA37BB6889695204BF7290B68D5E722540BF8A276F8BB6D +451D582EE59D2FF03F6B97DDE05FA00C3D375D2D0AAC8FE298F85CC067B15481 +48D70B6A0354C705715B891915FE8EA45244677B9FCE81E72D66177E309F3F83 +F744B9EA9E55C3B30DEC6E5E03B3988FD526A82A5E8E1DC79127FC62B2FA7949 +B3AD3148868DE22BD4B5708E32CEAAE6ADEED1F463EAB9692411E18F8D6BF391 +126B2700B4CF3B59D02E3F8795130C96285A63FCD1E0F647ACB1D35E9C58BD01 +1DD06BABA00CA4343BEBEDBE677E053E9732B33A7495DF51782A07DA07F5646C +770C957AD915CC70BA8E08BE7A1F4E6BA5BB9C603E38F6FB0A2578471C4D02F4 +283069856D926B9076EC73AA39CEB0A061AFF1575C7093FDAC9F89C3DC06EA45 +06F3C2A3BC9FF21128B10CB758DF0F099B459A5264A8C24C098110D2BA1A8532 +8FAE146A91BA7D033F591AB1A94B8A6FE0FFB610F698D216D58B4EF6C87B1524 +8037CBB7E23D8550A620341C6625A1A2ECE7CEE2598D66277F857231A36155E3 +984F147783E9B93975AC38A29F2FBCF704C8A04AD84C3E04A12D2321FA56811A +5B6744813CCC187968C5C26BB8D3E6615A912FA5369C01CCF8C0DB790593B190 +1A90CFB5339B8771F325C5FC448D36C7312B11A15A8635BAB59CF3CAD176131E +026F6E141B2619EF7F3048750CC9291397F141591EEC8B612D6656DD34DB54D6 +DBDD303CED74BE76664E7DC86FCFEEF2001C9DBA56418FB61F589566A47AF36E +C94671C5E8939AF9F4D53C0DE7142B7B63C86AAFA65877EBBB48C64589AFB2CB +1280AC099FC48058855CBDEB6C2D2A0D092267996591DC3B5EC8252984E9B27D +2E9EDE8CD8303F0905DBFCAE497DE1B755B924452CDE11CF4F20893DD6FF7251 +427F520FE00580DAF1703FD968E0F8ECCDE618E1EA5820EE6CFED97C78864EF6 +26FAFEEE194A268F24249D44829AA360D731C34DC285501E966A959180718F72 +6330E4CC060588A2F65AE64A720DCAA818D49D4440F5D0B6C1F6C3A107E12445 +F1BED2D3FCBB87A9597F01C7332AA79143564056219BF87D4B907A04F77621AD +054935E883B2B137D3D1C4BC792E8335CA08B6D83227F35736C41312A0BB077A +60FC6488C5E02FD51A10AC113D4EF70038C649C1677B2204A77F2ECBE9B3C341 +F4126BECBCA61E3F3801F9188A3775924A62D30FB096B440286FA655EBA00A74 +9A4162904BEA07CE68EE76018346DEEE20839C9A2FF71179B58E1D4AB30856B5 +F5D97295A097174467010B15D733AAC5813CAA633746B430B1AAF9F997FDAAFD +436844D1A56B8E25A89D2CC4BA6EE7ABD167818FD4F6C747E07B262C99EE2C35 +323F0B471586CA50F54C6381B052B15B0C58C19DEA82C0CA29F00400B727419B +2379979CDCBFA966AD513FA903160C571C3BF1BA239540B11EF2371A3880837C +6D6CA2F374280CFA1586427AE975A2AEC34244874E4D441DBAC6CD1828841C91 +069AA87FAE849C5DC7C9EC1B9876E59F3CCDF8BB23D939F5348D7486934BFB02 +CC5A22541ED352616830A510DE7732E5D8F7E785BBD31C2BC9D348CE5632654D +2C1740F89D57FB2AA1FD8FA3304EA03F757BB8F498ED98E48485722E78D97B12 +A05F3A28438084D1CF90AC4C3FFCD7B3365941C45E1E02CB13CA1E99F7FA1D00 +1C9D489D5C95F019AB4CE89FA3B6604473DBD2CE8E278969E0A0FCBCE68C23F6 +9381882443D3FC16966555FC222F3FC4B1207522201AB7A15A7A6F22CDC9D392 +360BF4C95DAD35770E0AC7E5EFF015F2C74ED7391F40EC94B8D1C163B5DEE5B3 +911A20C2625AD3B24BD94D2A42405E655DA47D3F94F882CA2F479437B4E0BE71 +8AFA4482C6FB270F8D05B4599A01403DAAA90C01DF3AA7C2BC7E66AB6AA833AD +FB6E5EE13E45CC7CE7E200FBFE639F9CFFF5D08512C02764997FD28368969BFB +0876F236EF6189BE73AD827332DF1B2EADEAC0ED3B939CE5BC3CEC78975FC636 +44FCBC2CCF4396AC7343EC62E0E4F3DFFA2B880BF31D93ADFE201BE9CCEC8BA5 +0B9B919E05B851E0909968DA259EECC6AA0743F25247978CC09C28C4F878E29A +5070E4023BCE95FE0ACCCC01D0EE219FA8344E8F6D7D4347563BF8AC030B9097 +41F24D4BC9494915A82EE9FD37FBB6A46BF077B728FB569B1258CEA5F51F36BE +4F4D0F890D782E44748CA3FE8C8A515998371D9C7D2311F192B4B7E7C68FC6EE +3F7136714C282A2570FE591F247A08319CE9EF1E43274E4E57166E31A2ECA506 +85350DA31AA4C33C9687F5210BA225EA1007C444FBFA2126769767E47A967884 +9F68589E4BAA9ED32A7A466DE35554C132810C68ABDAE536D9D884352F28EA02 +8A555D2CE11F30598F44A65E2D86B43ECCBDEED9E4E5B5B7DCDA20EAA09D9FF7 +422FC91F2201431A9E8FC624FF44D26C0100183D77BC7E6B1A6CFBD3FA8BABC1 +AE4CB0FD382E26BE0A83169B46D91429DCB746A0326243E212F802AF6A56C709 +6E70C6C7CE7014AE937686E11622D5EDA1906A9BBFA359FFD53199E2E99D6A32 +FF6D53076BCA828F8F0F312F9E68D51F64C2D9355174AC7B29EDDFD33475FBC1 +4140531F5272D645DD03CE9A7BA88674E0C531579494BC12F1E952ADBCFD8450 +318099A104353C8F2C45186B8B4FE789C953D788099A872B16D6D8F774BE3F43 +FA6BA70F4ED9AD065C03A51CD354FD0261200EFB1AC5FC2FF76E6C081BC24E38 +C36CAE9349D58311F7EABD5BF9BDD6F709533C9706D9ECFAE28C5A3BAE16A82F +64A29C7CE76BED0B3DC8F374BF49EC60822D054B83A068D7CAEDD3B800BA9158 +394678023119A22726BA1024180F40C68BDA8A1DEF6290E36B489BE25B6A5E58 +8BDA343FEDC153CA0A7EE03B1466E05A138AA671A035A21517C00A0CA33EFF02 +CF147958C3C5ADEF34843F640817AB8145B175532F06C0BE488BE836608F32FF +24CFA9DE22E984FCBE141347D1B6768B5E358855EE7025836FAA01D50CBB9BD3 +0BB97B930EA9140FD4697BD9FA55C5109637D7DB9B862CA0A17D488922479EFA +F39A2C002F7D6D9702EBFC7E53E1784FEB625180D1C33A9B08C37F32CEF1916D +6DDCF6804641A21D12593E9A645F2923B4C6560B5CB7CDF32335E8164AEC6BFB +674DC6747B6E8AC222D3124D0F30C79537399D9DCC8C962BACC2A78072A4EDF3 +A5B1215C080739E84022D99CBE102580EA04E567C51772A9CEF2F78B9B4D7D7F +5965D4BF63EE484598B1553421BC2B49D9735EDA41DBE14E0C10896B5FFFD5E9 +A3CE0DCD36CED44CF03E18326635501375791F59865D71FED61A19CF83C78A1C +284CBD767EB5551B26B6B056991EE56105B86286CDC7DFFFCB0BC5C9826DD85A +6B380481BA3AEAF84F5DA006172D96782AB12046C7B2D3C055011B0EDF6EE9D0 +0BAB36318585C0A0F22C4B5B60C423D632AAAC93FB16CAD2731FE048E28C2E75 +BAAAFEC6D53DF682BD7DF37C040266C95E789382461E841C0BC31C51D4C9F5DD +FC0170B4E46646974AB7E37E82D3827D7EE4C8B6E63A5A21D10D089F8A5E33EB +56957346200BE141650A17A79613B65505D9E8D18CD42104525A43F38E7EEDBC +8CB8E9CF21DA5A2F723FC56B90803319AE0BBEC082E65F4E8DEBBC5EB251443F +48E74DE626B8FC474E80A4B971D94040416BB8E3B437172F6C4A1BC84483E679 +7CB5127CB12B79662D1D196D9FFB84AC484B16BE9C560F334A31F07C50F223EF +D1816886CE184C93FBBE3749614F022E7E8C5C44299E2E4B78CCCD78D9628BA0 +01D58BC0D7438E8ED22A50482324C67557BB15B86AFF6C58D6FA1DB517D15E6E +C27DA3ED29FFCFAE0F1B8EFF85A83B63645851D187CC96B428501C83901284B4 +B03D82A2AE0B7F46CDDB6493E908 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +{restore}if +%%EndFont +%%BeginFont: CMTI10 +%!PS-AdobeFont-1.0: CMTI10 003.002 +%%Title: CMTI10 +%Version: 003.002 +%%CreationDate: Mon Jul 13 16:17:00 2009 +%%Creator: David M. Jones +%Copyright: Copyright (c) 1997, 2009 American Mathematical Society +%Copyright: (<http://www.ams.org>), with Reserved Font Name CMTI10. +% This Font Software is licensed under the SIL Open Font License, Version 1.1. +% This license is in the accompanying file OFL.txt, and is also +% available with a FAQ at: http://scripts.sil.org/OFL. +%%EndComments +FontDirectory/CMTI10 known{/CMTI10 findfont dup/UniqueID known{dup +/UniqueID get 5000828 eq exch/FontType get 1 eq and}{pop false}ifelse +{save true}{false}ifelse}{false}ifelse +11 dict begin +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def +/FontName /CMTI10 def +/FontBBox {-35 -250 1124 750 }readonly def +/UniqueID 5000828 def +/PaintType 0 def +/FontInfo 9 dict dup begin +/version (003.002) readonly def +/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMTI10.) readonly def +/FullName (CMTI10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle -14.04 def +/isFixedPitch false def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +end readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 12 /fi put +dup 44 /comma put +dup 45 /hyphen put +dup 46 /period put +dup 58 /colon put +dup 65 /A put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 71 /G put +dup 72 /H put +dup 74 /J put +dup 76 /L put +dup 77 /M put +dup 80 /P put +dup 83 /S put +dup 84 /T put +dup 86 /V put +dup 88 /X put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 122 /z put +readonly def +currentdict end +currentfile eexec +D9D66F633B846AB284BCF8B0411B772DE5CE32340DC6F28AF40857E4451976E7 +5182433CF9F333A38BD841C0D4E68BF9E012EB32A8FFB76B5816306B5EDF7C99 +8B3A16D9B4BC056662E32C7CD0123DFAEB734C7532E64BBFBF5A60336E646716 +EFB852C877F440D329172C71F1E5D59CE9473C26B8AEF7AD68EF0727B6EC2E0C +02CE8D8B07183838330C0284BD419CBDAE42B141D3D4BE492473F240CEED931D +46E9F999C5CB3235E2C6DAAA2C0169E1991BEAEA0D704BF49CEA3E98E8C2361A +4B60D020D325E4C2450F3BCF59223103D20DB6943DE1B57C5FD29DA32D34C95E +2AB2ADB3F60EEB0600C8ADE15A2380DE10AC5AAD585FBD13097B1A7E8E210D4A +EE96785449E07F0C8EBC2EC5EFBFD0897DFDC15E5BFAC9584D8DE95C5AB288CD +8AD8B9BEF0B8E5F887B3B0B331542FC8184DCCB753DB6ACEEF98B85756B988DF +CAF1AE0DBE7D37D5F44A2E760AAE3A5197C27B15E32275A64946C3E4D0476FD2 +7FDE148C788DD2106F7C825E270588AC05B57E625AB17BDD02306F9E5FC851DC +32A5A6EDC43C770A71419B2C0C8074EF3F222C8A2097CD81A91F333A521B3A09 +482A4FE1CB231CE344AD126AA284C3280AAC3AD162CF0EE241BFB4C8F20502FF +118507F5D1B5FD898571015E73E5CF2281085072E00D401F6F59761EEC3E8381 +1F26F75DB66C504AB6BABA87D121B1E7040A07AA2FE01F80DBC246CC03C4B2DC +C2A715980C52B7F96BC1A78FCC7F4F52EEED5F705E08FC1E5BBFCAD121FA88AA +8EBE58172C162AF409DBB0728F14923ED02A65EA24E5D52B6AD07777455A70A4 +61833D3789C719BA92E901232599767E423D5AD9C807670BE0E7B5CFF8256A20 +C7BF7214FFE0342809570F5966A2C43E784F35015D9040BA34FEAB6A6F089504 +3A40A9E9D711A2721D3F4998371430FB3C94BFC619559B97D49627BB630F4B70 +9D0A8FE4E916235335C3962F3CFDB04C4A3CF714DB5E260F4E66FFF2F27CEF2A +D4AA26BBCAED23B8BDC98F8F453BA27AD7758537561E766B82DC3032E92A9EB0 +125D98A22C5466AF069BF72A9BFA052A8628FEC6A6AD0B711DFFEDE3AA2D7CE8 +34EA487038EF50F953B8B4471CBA6FC3C53877EC1BC94582B1123EDF44B4056A +30F49394BDE22CDAD7F01951C7013D26979277D18EFA594E8F4F2B5E615187D9 +39E842EC28461B9ABA52020A127D2CB9002A673A435B13C10602EEFDBBA6BD49 +9DDEAB9E68D655443A5C2492BA061C1391A51592BA8C353A6F6A0708E8860184 +2B5D031D2CAB87D618E9F6F7A0BF3F66B3FD5A25BB91F7F1F5F99CFF56EFF4FF +0A35C55658001ED2E97B26C869292F6274D433A5443179DBB8EE987196306348 +3F9E87C6422AFFDD30080C9AC4EE7FE5E2DCBFEE4974331F4AAE479FD8806D4D +9C2B85FC69EB0453AD827A1E767E5C484BDFBF5C8D6E2B3C96298B390F22D757 +802643A79D5E29CF3AEDF0E12CFBECA4663444FC87F2027571DBA9ECF688BF28 +FF0DDB3AEDBA0FB28447CB4B5D5205F40C1E7A525FD7373392EEFFD910AC82D0 +98E71660A1B3227C4A2592F3E853CA4CDF64DF19A52582E167234F4036FAAAB9 +5446BE102DE2BF43E82F0112C2A20F15A3F92C6571AC761665A905362C4F8BDF +AC8705519C99862CD9C0D75113C4AB5FBB83C880E46B82715B5628890D9103AD +A2329638B95D93C4DECDC5E6C588C9D5183EE6FC28FAF9825F02DCA567306D93 +5440987A81B51EE7291107A08F201C609FEF91A8F0587E8B13D4BAF74A5A6815 +DE9E4441F46AF8E1DDDFA2D611C889614040B144A5EC064DEE4638C04EAB2E37 +4CA8F50FB8C4D65BB296DCCCD39F1F554CFBED96670A91F515CA10EF896874BC +8EF48C6447752C70FF5A06F928DB55586354076773BFF7E94C4C3A7A1C1F421B +A9B4E3936EC26E0C19BBBFC90F021E877F54B62108F6DD1C7F6D5B8E64FC9362 +E173F01BF2904B7E5A08B3543611562C2714099DE7D4FA330DB148B560A9601F +42A84452811CE213DCE782A0D7809CFD954D6BC1EBF2BA4D1B18F50FA8174C96 +3E0120E266AD5DDB40B3F6798AC28CDC5C3C4BC34583528F5B5DC8A222B80B59 +A3A93DC715D061EC6915E6E6E21A25425C25E8747C60F170D61047108826F96F +7830E220C108B441B6EA3198E33C49BAD8D43086E49F5A2BC7958A1A8CD011C4 +49045193394696EC3DDD0BE084E8F2E9F0B9496F035C0DEC1CE11409DF566428 +D50043CFF5CDD1092F6E0807E660B68163BCA738E8D98FC6EE3F713164CD204C +0BA84FFF4F33F47BC31750B448603D7ADB9AE92FA91AEBBBEC0DCD66980E6955 +CEB425ED07115B24E40F53B29B9D840842EAC691B4F591F866DF27556474B485 +1C6F53DD72499847109B16C7093984A6B8487D4F3870DD517945CD90E648C1BB +8A6861E540FCF9D75B984B5009B5CC760CBE297042C240DD624111670B703388 +6FE6FC0E89C6B4C88F51DFF3913D0CC1FB4770C8CBEADD4B86393605C0B6C468 +83CA5594754411B6FC331EF56D7CD6D247FAE42E966583C29239A8F862348D29 +60B177984B6B957E733DB4D275015691D91443BBB13C2DA96097A29733CDB284 +42F89C85A7A743338C9DD3BBC4EE53F695E5163E6E1ABE5791ABF100B198B9B2 +1C21E2FA2FB4AFE7F9BB2D381260CDD3A2CC05BF513AA1E80ED69FA27BC5ED5A +21445BF00BC2F997B356D94AF13736C6D3B0613EB6F4CD96A685FEB672661DCA +206105EDC3CA07900676EB2FAB37F48D2E8207BDE1463894DA3C5B1488AC1EE9 +D39DAF691648048F5D7A384B8927F8DA2BE3602669F71D80686E427F395134E7 +7ADCC611BA91AD4B7A0237213C60CF2C905359C90795230344FC3C50A22BD44B +55B2044792509F50F5C21F53D9F9E9F063ADBED3AB99E2613B23334FE8DF70B4 +6120F2EDF69F50BE793EE145B9FF9C73179DE640FC2ACEB5C6617F918CEEB762 +4CD81E665B2E544864D13230B058717B207D3CC5D6647D5343DB4D0356082392 +871EFFA896631A7E0D6477942B632074A9A4EF7B09D4701B1639BAAB4E03A40E +9B54A7A4F845CD63F88831EBFA4FB847847CB98F3455CB5957F2E0A0F5623645 +DBB5C5564C7F8B117D6E27E65C0F3EA81AE67B4AE4B201E7C4FB0A8364FE53F5 +41A7CE8F834C2C4B322809B353A5E63BBA7BF3B7DC1A85EA700BD287C2BD3FC8 +2832B0BB4695FC937FF5EF06FCD87DCE6DE793C2B1EE10E6450352C17726155F +220D550B1759E15AB2C1D5968E52C8080CD280E99D3CCC0E80C2EF8BBFD96001 +A226FEED7311EFB4B67F424B557A877379A15BCA54780F0CD2CCA00400B9B39D +981C6B552AFD2506D1B23618FA9AE6D8143CD7198A8482CB416CCE62B992347F +337D505A4078713BBD91E5535BD58EF0351EBDCD749CC24D4AD39F8CECD7D6C8 +139756680A4C03A58B3374CEC658D30160AE4863A3938A891BB59CBE02BB451B +1BA4B2B6E68AB61DEB85F95E3C909B8B66E220B9F18280161C279F10F7093CDC +100A53D542F071CC0A5AF834DC1D18738F5DD62A5573E884E1FFD22BD810828A +1EA47F8218C15A2E97CBC609927DA3CC2B802EA4A0D7EB57627C135E3B065905 +F97597D818A2C5CC6F328AD25AD11FA50F1E4FE637980B7474D6F85A521892FB +72989AABEBE02A2D0EFE88A6F67AC29F5D8DDFEDAAF465C439983C6B84389FF7 +A6434462BEB7B07DBE4BBA61ACD4A60C55B5C0AAE527DE381DFECA2E6BAFDC8D +310364ECB42CAFF72BA93C067B2F02D1CA7C34AE7CDC46787A0E234C8BE8A928 +7A6F3DDE0338FAD532A9886E8E3525B85DD39364AB03EC4C0DD25DC179CC1989 +1BE232E387E857C78332D834679195E10F1E7B87B7966DA3B2238F53D1E13FE2 +8F55ED6A92A750C7250C9B91E29796621E7E9520373214D7DA81B2875A986D33 +80382AFF6DE1F829F048E57664D9C4ACE91E4684A51023943A4964AB5657D610 +3A5405EFD4CFD1EBA684243E15093C9667797BB47617B66054EE02C41FFEC45C +C1BAE8AD56B00D323FCB1D2744F061FA16E161988741A319B1564E04BA210996 +4F9F02A3268CABE450D166A763F5284954564A1C86B76544C5F5ACDFE0D758DB +865A1CFCF9FE8CD5F9C3B2998C56468FD52DF8EE60C6935A3D221EAEC7714E3B +301371C7DDA0B03A2416238F2B47BAD3A2C5021C886DF51C695AF9C87A864B48 +3BB3FE0B355EED5454B59B25A0D8A1B8CBD356C24F64D9B55E16C30C011365C9 +1E0380753BA3EDC0868788D5F50B9353D0227BCEE1BE36998B2622C0759BD66B +E4444250589F9CEDE766D8B940770CB6B89503E925B35C00CBEC2873D2DC4A29 +0823FB7A3717B69A7DEDBAAECC067949932728E89BEECAA91DE3AF9BF070B9C0 +30EEFA8C0A55C8388CAA2F0515915C98E67FA095BB98967D14B0DCAFA9622E4E +2E0EBFC768D80585ACDF28D8A5C2B6EE2FE7AAF62FFB90F569F84A0903996DF0 +C1D5723366C436E4088F3E2BB9B47F9789052A71CF5C49908CDC1DDA194BFB89 +14D7E3D7D4D72A150FD6FFD8303E9DE5A97A71B808B8BDF2AE466F31BF5D7A4A +44F81230BBE2B456A221E2F72A8B59F8FEA8D31F8A005A5BD93B9F49CFDC3DCC +CE2B67090460F632271C7157BDC2F05BC2749FD562FC28682A616A52D1B67654 +DF78B7843A9EC26A7DE2EB168F874904C2915B97534B2D4D9F74A9573A771D34 +9F7BC855E8F794621BF6AD471BCC347E2DF5F620F5C209E33A4CBF1EA85AEA87 +4492A77342DD33EF615FF34037D660B713C908786D9022051B825226545827A3 +2AD1B05D654DB6E6D261B4E8AF0933AD1F0FCFC7201E1A7C1B4199F160C38676 +21ABA2DDF1CEB655B3EC3226E0B122976EEA998F7A5241F062E54AD1DFD6ED26 +47C99A439E0AE95415059179867CDD3F0FF751F3141309F40E00A6C7C28433E4 +F649BCD5DAA64177580E05C495EE7BCBCC5FBF104DAF360CC2711386655B26F9 +D349D887EEB32ADE595241560FD5924A1745A22E6A01DB9C285EF14596EBFF0F +03F36EB2E0A7C3864F819EF7B0855121292D49482F046A55CD7271FE03F02EA5 +886864D9D8EC22A68C23089EAEFFF03DED6484D8C341861EF8B6FD3C5BDF5AC8 +352DA4E13A1E30D0CB71E090E9CFB9AB2CAFD0CA7C34AE7D8E3B2EB4666834BD +9CCD1AC2108348AFEF6071796F4BB2FFA4A67ED917E76A109FA2DC2A30D744A0 +9AE653A748C1D18FB52595D84E87F1C1FB6B2F32667FE203262C66627AEFFED3 +92B23861E5EB238BB4EDCE09DAE1C65BAFC198CDD1B45D42CDF93E16BB82D35F +821E9E49067E966AFAB2AB52928F8DD6359984071FC37AA652FB834A09E5BD93 +3AFAE161140E74C6531E413E8FBBFC42BFE8A464B71EB1D8CAA93B33D7BCC3B0 +47C7EEFCD3E9FCF26FF9441DD9BDE68D77AD7251C06BBB9A2103049E8827CAF0 +F26BEF33F656A690235DEEC623CC519AFA82DE2AE16FB99F780FD7D8290DA40B +9B604AEF36B529FD184239E7D50561A07428D28E51B55546590A1AEAD4B7F2B1 +AB8C5B9022C1FA03E33F8F409B24911AB8BFCF6EF4A8E415263C789F89063E71 +C0910DC20347469380B7FC1EEB87D4CED7F4A361E58B61C91AFCABA35C03F978 +B9FB5257C31657EE48504C355CE893FE3C553274C641DBC4004F5D5B879CC5ED +D3F21F867F6DF054127067DE86189F0B59A1B90FDABCDFEE61423609D888EEFD +F4A1367129962110C651D9481CEDDB8C5C2576A59AED64E95F7ED042AEAE2F7E +81AC0C408E593DC30DCAC334EDE9EE27D932B98F040DDCD195D6155607DD2038 +970EB78221A94C52BD4F0EAC65F1FC10E5DAA93C17266F351669CAE56F42B68C +6D01E1EA03AE554D63CE76D800FDD9CFD89F80A241EAEFF7EDFA41794EA25CE7 +97BD5028464D2CD45B53834B4AEF8BF0B9E7C6ECDEACEC887E8790A47A93F668 +A9095E5FA1116A122C0E5B74E2226C654D3187C6CFD8807917820423DA3EC1DE +AA020EEEF2280C44A15209EE2F3FC1776875308CEAD38571E7BF889F287E4594 +971A83605E0B4169D4A23EE790515223DF8724054EDAD905F57918FC0BC64F96 +514B4BF7DC9BA79E763C22C977FB6146B10D26FEA1BAA7BAF21312F78D1625A7 +8E242D743471DB5821408AB786E4A7EA9D35E30E85533C617689F95758FB2C7C +392E759C299DCCE36689686DE0C4DCE32649493650BA194A6208C5EAB670B170 +3F2C70BF0EF0E3BE2FB0A79224FF4ECECD6BB3388C6D06867A0E5E3DB93C1B2F +464C23E44D3132E7D4086E3B59B1D13F49EB4772DEDF8EDC4F603217233FB7BE +C13C28648E9AA51D53F11FB896839F97AEDD8834BCA53CB0021AE91FD8E95E2E +F8A094093AF556B9639F508A401542B06821FF9DE1A745FE9AC5CACD5E8E1053 +911442FC15CA5333751ABFE2C617D38FA1DC332BFEF44AE569DC631C93EC54D6 +261583A695F5A392867A57F59B741EFCD2DCFECBC55D1EA5F2317601C9DFE9ED +D1EA466210FFA905A8F85BD58B98991BEA58DFD1CDED5C9B086D42CCE632DADA +147941917B879139E016B0DDEB8446BA017FC8EE5A354533D667B0835F5D027D +C2D580C16B80B3D05CC92C0465CAE077729F0A15B2DAFC89DCD349B3F81D0516 +C65526EB5C10E45A8A85D716EE35FB9AB201FD7C89ADE5AD925A174169DA20FB +61E96C73A143DF964C20589EF24A0FCFE6195317F2FA0D2249C0D8E649C3D9AD +FF13332EA2E4C9CD36D8443EC8F027B61CEF92C6A6B72DD4ACBACC16E429A9A3 +F5F29C1631360E32F8C1C93ACB22F810B86D2969A7480F486F62F8488BEEC74C +2C1AF13BB92BC578E8CD30BEA6BC8CB68ED730F54CED0167605FA76AD7B7E88C +7AE7688E598F91C471BD65A542E96D64B1EAF19FB4F1234308C48C2DC86E2193 +11ABDB4C6189C6F201627C693691A86DD07FF55C30FDB3F72381E09C6080FD7C +9182762E5001E30F52A216E0B71E4D2D4E2F3B20F95DF3A11FDB2D2B5B5FAA66 +C46226D5E0C77066349770514E5675550FAC9394FB27CD2C2F974F1FD58C04A3 +1EF53A8AB3B2202CCA1CEFA66228E1480A0709436C44BD3319C40CF888AE4692 +5DBBB52B15CF3A518F627F672135A24D5DB9B2EBEF04C860AECF231EBB5A3BF5 +6DCCD5E72FE4B6DD29E896691868A7DE4120AD06AC573F5608B8449B38E71CA0 +EB5CDA3F942482EA7973661170F81DC88D54DD5B92323F46F833DFA757107E9E +F62A47CC50FAA1B68ED535C3E0E1073532A05ED339C8D70B3B9864808ABACD23 +AA95E9FDA43D54C66A675FA074E0A5B8777D3C07850A09087F36852B5351F35D +8BC4DDFCA35CF29CD5E3DE118A741FAC4DED36847F2E2C6CFE08669301722D94 +376F540982958074E7F1383C409652F6C99DA39FE90B38221E75BC1ECB93ABF6 +B00F410A0C5651DB418566AB350FDA1789AFD88286AF3BCB42B98386F7BC144B +02DEB8940D20A6B3062F0C4244EABC50923390064F1D027A8BACC3DE45156E56 +4A942D1B87F1C4A76B0D4D6801AE792CCAE3009BF25368B31B6AD5476FBD3BFF +9759EF463EF5E78E10B7BF64005B2ABE0E8813950A08A1808587A98E0021D0DD +751AD515E8278F1A0759E85D8A084490BBB0F8206484AA36388B1013643D3198 +3509078847BDAE08E76FA5BF3E3A73C323CE093DCC148E3C02C2DE1E26C94D5A +40EC8308ECB02FF7DD04EC1005A2A0DC74D4E587F10A3EF349E828F69FD38962 +2F0C74D5DAB3ED6CC9F97008ACCE74C086A503948DEF1AAF58FC8BEC703CD360 +D32098A56AC776B1BD08442052A2A4EF6C8798F7CDC102AF1A2009657254762A +0793F79A39DCD6ADBAA5EC84A7ED6018BBE727E5D477893D84F157074B24C13E +8D4881C7DF8ADC13EBA0D89745EF93B7616EC5355600BB0D2B630AABA3CF2946 +AFFD0B2B724EF0F28393F2034B2E69DA5061426805353EB4D80E20739BC4C510 +6C45275B8261DCBA10DE1D104B12F46ACD230977EE7D7D1D35D2814139E38C4B +CA6937CCFA653349B1EF64A98457F7B4B5D8F2978F16ECCEF7054905863AA46E +DD524CB33459220C71E9EFA7845A3A760A507B3D3ABC525B35930B613710A13D +098832C58EBBC8B0CA6AD516E6385792C59220331D0922A1F6F838A8DE13C337 +900462F952EABBDC2EB1FBF94A66186C177501453CD3FE3582073DD86F04406B +41B6AEB440DA475E13240445D46726A6D45185D56BAB8807CEC8A8F7CE1AD149 +7CE2E1BB5DE4E5B9592241DD136479A65905FD0062C91DFF7349874BFEA5D9EA +2F610ADB9AE7757B2307A1BB9D6797D9F9C4844A59841C7C7682105E23A374BC +A91885E7410F56F60C29AB8B417E2D6092F8BB70A2DD5DEDD4BA1077D7CC62FD +EA43428C6F79C332342E15F75B08A1ED360CD1885730E570A3252A5ECC419A7F +D124C3FB3A7D58C0EF6AC117F50D7D4B6CD852200A1F3193BE101CBEF414F60F +85935BDBDD23254648DEA12B95871AC8F859AD8C9315B258E525FA7BB0DD294D +497646805C3CFC1CFC72C17EED56FC5E7A5FA54691474DEA0C85DD18ECD59923 +619117DC6AF37242576C4E9A56BFF2D3E717DFA750607BA2BE87050F8AE8EA72 +8056655F9D9DA1ADBCB07A6697F6664AC6B6C1F5650255776305892A6E3D986E +10A3F76B65763C33A249C23C8616B866CC56D8440C501D46E821750FAFBA1CF3 +06101C7D563C43EFE7A7AD8D402F232034B7BCEDA9C49AB562DC60CEFA521711 +DB3D81E0400F776034AA7370C867BDF8F8CBE2F2E59D2099F8627118EFD202D3 +51B7AC1FC6D959ED360AB4E5ECB4966369BA85B6E7733A5C7123CD2519845706 +4B684F1C65D278FBCD01A64C1B5BDD5798313CA7CC3A03996EF52A5BAEC94596 +23B4C55EFBEBAABF72DB85657F4A3558D4585AD1918E86DAACB863EB75D64BD6 +3E250047E910F5587847B9B4F6BC4385D22750F78FA3820035607BDBC19C7399 +F90508F5CCF259DA67858F9393AF9AA5E6146E1D4AB77FAC6E459BE47B063969 +2D917CDB0ADD125F3A0304E0F0C548E655D710716E4EC8CB12CE2480A578CF4D +587A5A99FBD5CB140E02C5A8CE9D45B1684E027CF555018F19EF54D4F396354A +0C5947E6EF09484E90BBB69AC4EA851AF4CB1A21CA5F8E2827D8264E60CC2552 +CFD63851BAE8AE22D898791E61F4413C9E8BF423A7FF763A522C2B09390C49F6 +2F8B36645A69B98423568E1552BFD1EBDB58DBFF344861E2698B1C135A260DE5 +DC01B8DEAF7032621F182F4ECDED721EE3D52D788FB2660AC0BA836E8B1EA4F1 +BFB084AE9319C95757E75F3409FF6CC8F3C38638084F8F4F7DA8B4AEEED926F9 +AD4A5C73718F38A4E67E61CD7A1713DE7AD5B63F4EACCC6AEF54FEF08241C7BD +89A71C7BF2452D08237C9FE7CED57497ABE74CC2EFA73D24651664E84B70E8B9 +448623CC127B35E5059CAF489C0CBAAAF805CD6674F203D970007F1A62D3E0B2 +7A0888C8EA6B4AF189795949E34D4359CD47A000608F799114BE5D36359D0F97 +8C665E166A285BB1029C6853A6DC3A6C6AAD5F0697927274A732813A49A473ED +B7E9886B6C4560568436BEC798D8B94F20FFB2A908AA804476C08F8FE0254E68 +1F0CCE78EEB58EA771DEC96F0153A4B585F0E465A2C55ECF22164E79EFC2A040 +E0647B89B4A6A5B3FE75B39D7C066CF11011B2BC6AE827ECEBB6A6E99C87A951 +D3658A9707D2028B65F301BC2041A3F790F0741FAFAFC16B5784DBEA3DFBFFAD +49320408E4FFD670D95593EF9FD51E984ECE98C8CAE1F50A8D81F244A01498B5 +9AAD06E09E5A280A5F53D196FB76D93C37CDD6BD8ABA9FE7F42F5F8E26AD159C +4CBFC016A8E8935759B3E70DDC7EF0A7E7CFA5D2269D26E0CEE3DB6BE787B23D +6F840128258051B5EB1CC83ACB31F9A293F7EAF250529649B5CC4CBD69AAE236 +13FAA8BA742F31CFC6E0089A7EFB20623EE18E7C0A33D2656BAE651C7D651DD3 +6643371D0BA88CD831C86F56A0476B5B0CF69FBC720E340D425C754A3109BD37 +3F96A118648B554FA9BD0A2A3286810DC3C39010D2DC807B6AA2AA2BBE061107 +45FF3797354A328198BD448FDFA6E376B9FE4D21FE10DE7B57D14723DFE76155 +E2595D792A2E708B3D604BEEE8EEB4559FB8C601D6EA3EA349E4FFB2B85AF6CF +8B4790CFB7FDF9B65CDA0FA82E2267E5CD7ACFD4E19E7C128296EF19173A9A35 +B38BED1C800321AFB52A8F671170296B6E0B54BCA3D4C8460D1FA83F9E61A9D4 +3ECA9E71EFA883E06051FC0C11F538B97D63BE124399D38B9738FCCF2F0499A3 +4F8D4D762DCD89884CE1062912E8AD848E4108FB2433277F016CCBFB28E29D4A +C9C3874EC99BE36A898B6F1146E94E12FD1AFFBA0E53EF0F9E86F40F5EDBE7A7 +F4B97FAD6071EFA7C3A4BB8F77F1FE9735016866A633FDDA87CB58465340BA1A +4565448235FB9FC5F0899F35347A869977B8783036075B9C4B3E85406C39C498 +805EB559A892FF79B2159B7DBB1FB84553E4D1682DDEAE1940C3C7D0DE4FC779 +BEDB3C7BCA6250AC38C32119C7F38043C375AA302C8694BD07D529408F2E3CE4 +900CA5A77250574956271C55A3449B3CB69F254A482758FAECE0039E8B34158B +BDA6AFA4091B756E644A1369BDAA7110714055E1297EFA2B91017EC27FEE9184 +A6712CD61F0DD2529A46F9DD8BF00377ED28EA5C3341B24D230E2BB4A8AA530A +DF81B05CCA14A06458995D08774E73841AC0220C19FA1F34BEBDCFC359D02EC5 +FA8010FB91C552F7D8EBC630DB0A764D17F53BEB261020CF7E486339C35DC48D +F0021E370C7685CA1EE41C6CF6F6618C375D1EC39DE1331B33F2A2FCE889E3DA +0297736F5F76109AEEA94679DBE6A521F12843995FDB7358AA398E37BF984F6F +C62DF2BA81CE1120746DEC8261339097B484186009E57257B5A5775BD73C2D9E +AADD0D24164AC3041214A074215C9A7D4AA6104F4356EB853D1E1F9B3BB78857 +FABC652777EBA5643E81099DA63D302CBC70FD61E73E1D05EB3BABD5D246C2F9 +B58B468EE0216F888FD466C3A99AFA4BC71A9212AFCA8781A6C75F756D44FDE3 +A7B94EF1AF05B367C859A75E274AF29F31F13113A7FF040D0EAB1B05A394388F +0DF7BBC708F4D6DB1321B137B91E7946533B9234C140AACE067555E6C41BA641 +FC23579A876728E65D3D343532E103F6BF81C204BBA4CA6ED94DD3C77E8DBEA4 +999E9C98ABE6F78D24C408013C34A41C6594A485467AB62779968B109712C158 +6BFB40E80A4527A835270E4813AD3061C13A9DB687EBCBB6455D9F3F4D029778 +26D531CAEB3C87232F124942C190FA045F96E55F56D253A6CE66A9A7E2F45FB1 +4F61C786EB15A5F0DEC6CA2938145590D43AB8319C17D88FB3606F254CB99629 +125A47F209E4A813563093FC9FAC98C06800DE19DAE4468D8E32B255BF81A2C9 +3319635FBC5DDC406A2A26374EC9FAB1A85CA1B71B32C796715384A2ED84FDBB +7D6CABC8DE74E22886E0D760FDA261625C375518BB6E8F344C16A937199B4336 +054BD8261786B4C0BAB6DC42BA522F395A6535C24BC07A79DB87D96967BE0679 +F14442713C8CE3D97502B9AE6B089595B20A676DF38791AD840E082593B64961 +7DE2B093BDF6C5A0B18B5B77432FFC9570EA8A226D20411F8CC620932F80E73F +6735BA3036121B413C877DDB2490EC029C1CDF90304DD6765B53537BB1D6E1EA +489A9C9A721C6DE7930D399AD9B4BE725AC6EA084CA26D9B1A07F2AD6DAE550D +A8A10A9BEA10C658B2ED3BEA1F1F8B5F17E0E16BE076FDD5BBC9D27F6D4795A9 +99FE84619AF8755DF619F1CE8262A3B55B5A6EE130D17B9316301952B83A77C1 +1BC76F50A4B57F1C6775DF18BEA12589D74B5242EA71B63C15A5A706C3046857 +732CAB3BF6D724805F983F9744E56D314CFDF621C677E3B344FCF586BD3E4058 +9A8A2C2926D80F2B8A108E24A23A3B0E5025C0D14F016B912C5E14432E28F42B +634971E9F55B6F278DC824FFBB724EE407D4F91EC0E2B5966FABA144EFDFC50B +662F6A87B85B593908A49BCF9839B942391C696038A9EB94F6624508E326C879 +FA95B21243E8FC9171965AA3F8EA2D1AEA9131A82F84CD0FE101C64A4C15D8C3 +BC7233C05E6F17C18027BCF63E221F93670E86D4D19C864DCB11795CE56004DE +F553165BC6EE3758754FD6340B438F09BF83210309E4BA5FE39DD4C9D838F7FB +51513A9A20A39284AEF3FBA27F69C34A816CF49512B9E3784450CC8828DA0448 +734EB51757D6EF29B283256B6C5040132617A04F8D3EB6E5D28AD5D7030410DC +F580FAD6BF8342B451171CE11EE957E80FDB15F99E20771800A9723BC08DC68A +33D3460FF0CBE11D922E2990D4A12918A9FF772F12A661D4E625DFDE967F2C27 +71881BF2DB5C39F9D295EAD909271CD42298DC8449E9CD22E0512C5D47E228A3 +6C61434F35B3D4E5795E45D682E9997C445432F1170F99E984E959C378502902 +509E5571CEB74F713CA254213FA07B57B172A5BAA187C49A23BA37B5785E0A3D +18549E42ACD3FB78E52D81E2B7C912335707709A91A70BB69288D3B4D8275F7A +68E01CDF69F254D38282C6573142D3705A9B4BDACF1708E651B86EA13EFDD4FB +0AEA244D1E0BE67536B955FB1589D7C42FA139DC501A366A4EE19F55F1BA25FE +55ED75C5A1644D965090CEFE49B6AFBD4F0A27C16B86A8BA4D5F74C0CC3CDB14 +AAEF18B57E86D1E3DD3D1023CF4DE3127DC03791A7DD346B8431D9E46922444F +D4AAB73BA9560422BA4E3FF2269C678014F9DD9E817CB2558296C54D4E43BAB0 +02C2BDE7DA7AAD96E1BDE77915BCD6A0619456BE1F3ADCEDDC5A2EBC8E86FD0E +65B83A7B6CB9C276599EAC5E4D7A854C37E294D71A2772FE6597F92C1DAF61A9 +B04B7231E9647C2C0D1DFE42BFE518BB12F7E58B34845AE1A408550E02E93F96 +57AACD8253D1BC3056E958EF733EA8A1500582C489515498D79A10ABB26AE7BC +6E420F37014FF8A215391470CD375785389531F89C8924815E83FCD595E93DA4 +026711BE961EC5E9C491695305036EB817A5C71AB54A09FC66C19ACE81A7A8A2 +4C4269BA4162CFFD3FDE77E180891CB83AFD0A37E706F204F5A64EBBDAD5ADB4 +762225F03D13289DB062EFE9044D4ADE085572A05F3515478F9CB79E57543FCA +03B5DAE1968A51FEF29DB43E587C8A97BD20B1C179EA8088DCC6DB4CE9177C5E +21CDD854651CF7066C9A93B24326C4289ADD3632580212675BBDC45B02A90780 +DBA1A0FAE053342DF1D7C22D1B7A687190AA01ED100BF02AD5F8D2C42460CB79 +6A2651CDCFCB23EF42487F5EF14D2864BCA9515CB12E9AEE4F63234D54849E4F +F6FACA107793051DF8C462DDE532F6D1A99B3A645650819E8DDFFA80EA42040E +B1413564585246569B0C00B3BBAC783C03F7ABED1E74B02128CEA181B012CDEA +8CFE2F345378C621D5A1F8A63BD33BA8293CE6485CD527B6C0A4B780C5D099D3 +CC39602044C9796CF5902462448744E5D54EA7B6E909632BF705686CB7E5FE0A +A1DCC442884641B3509F3E56F64EBFF76D36DD306183663CFD49EB28A8F1F069 +BA72DC0FD16916069459CE227356A27645CB3EAEC4B588575EA119CB218D283A +FE0105D225F068F1C66F80ACCA5094DE78749F207EBFDC1463A65E204263C2FE +050322D7F9AE094F71A67DB8F5BF07644BE345E198593EAE1BBB5A4D7FE11F58 +B06A044BB41A9E8BFCD3543522B9B1D0E03AE79A8D33AC8E28AFA9136A2B61B5 +5619E3E73CDB4B13B6D388E8BA2877A56B9FF02ED34F264EB1A9D4CE7A97F6B1 +A0996A2435F5B92AE607F2ABA1C68F3EE2A6C98F34DA3FAACA80007D44AC79FE +E60EF6487982472FCD3D8A0DF86CCA1ADDE74421938CAEE9F9474B467E7E76B3 +F2B9FF26FAB4609C0A614BBA0679227235F7A621B8427EEA68BCFA80E75BF9F8 +9EA044D4C19B5E00CEA05A4ED4807E3D1107721F0B76E22CCBFBB8E09A5A3A1C +0B3B33EED6ABEF799A54877DAEEAB96E52D783412C9DFCAD06ADD8A48C83C4D4 +6DC564DA74C6F87EC23AED10EAFDFBDBEFD26ECC5E4D92A82A129454145ED232 +87CB424066C5C55B471F08F5A5E57396396CB5232DFD5BD454FFDB308983D067 +3BECDC906F7973138FB17751AB5F9D5F7E689DF1AFB743FEBA024A67237E77C6 +18F3BEFBDAF161D30C347052E630A4656BBC360B579CD2B4F5501D470CFAC9DC +3B12F53641A19D4B530807BB269B23221B3DE8D2E18FBBBAB2119AFD6296C2F5 +3B3394207BFE868F91C06CA8F4088EEF73ABDD84D021BEABF522E248E7FC5B35 +E3C22622CEED43DAF8FE442ED25767972139BFB083D2E7873EB131F6A88076A6 +C4F17C1443B49232E7965C1420746CCA0FD0602E6658D1B4FF757B0AA23F10F7 +5AFE028C9A0C9BE5226868B94E1476768903FBE2D43CD2D4E19EE4344F944BEB +BE20D5795B9F5D7584D901D417841630D6557653DDDFB8FBF78520E0376ABA39 +E58CB88203895757F780CFFC7EBF6BFDDCFD4DAA5CD6EBF6DCB58CDF40083CD7 +20907634AFC147DF647B45F44B795B0B0E06C860A0C31127CE10697A0AC86A5F +7077D912CC18A3A2A665DED95CA6B9FD745B196C74B7A4830C01339B94ED4573 +73A6D0CAD03F0358CEABB488EAD794C2E357988FFD462BAA16BFA8529162FD79 +F0588055D0724457510444B4DAA783E239437D64B1B1DC92D69D72CB5CDFE50A +787F24C27F9BDEFF5FD8424249D73BD2566CF943D47BA546113E0F5AE92B6780 +196C7348AE4EEB3F8D64EF2EFE8788BD3B5AB46EAC96E91FD44AD157E769A7EB +0E1B9BF5317E2673C65ECF5A9DE1B55E604408BA9B036065C1A4055052D0BA83 +D1766ECCC63DAACC748DEF44D8E47FFBBA88B2CB6A98B054CB0086F4B9D07C83 +8B0D83ADCA9163BE3A629F465BCA28C346DD62F1E9A952D68E1737C4B1286ABB +C4BD7D689C9114ABC77721C283FD4B7713091CE8A702C1E4715DBC415701EC58 +9905A3CDACE7D48AFD3F70A7C978D38B416E09B52FDA31536148DD5BB453DE74 +5AAA658FB7B3B63E9BCB2022F3B534D2948BD7D2E3A4E81CA53DEF75ABA7E72D +3E46DB7101E6A5B064AFDFC4E3383A00743660CD8274731EB69DB706CF210A25 +24ACA3A3566F1E1A364A01880429CAC9DFF163BA53C8A7E53BB4EBEFA92DCAB4 +025E045F99F3A11945DDE2E13197AFD2ADE14368C31B04ECD90E1B9D67C986B7 +B3C84FA62A2E0530DE62C11C430F5CCDA53017DCA126708E96B56EA7B5D4B756 +7B6A9399B1A1E6FD6E80E34116100C9F28DAE7DDC60F895FCEDD77A13A2EB039 +430C821A7A323C4D31B4CBB98AEE6AD360DF3262DCA18CF160A02C3F66B2C780 +0FA590150C32B06A6C2BC7FD74C4EC59B847A2458EE657899E8DC25B5EAAF2E3 +C4AC110CAC0F86F415A2724CC1732F953C5EC34748FFA71818E04FEAEDCEEB7F +5BBFC8AF78872A3B88D67AF648B7FAE65D2E8C1F48530D4F45FFB8EEE05616DB +D8C9277E5949A44D523F9DFFBCCA2BA2ED127FEDDC4387DD07C095D8D7C56A4C +F54F47686577C9BC940C03F9CA40BF7FBEC3A07C4DD7D59FDE710F842558E956 +53A126F804600B02F791494E9841BC66165C248298CD8CEE158BBD041FDA7DB3 +5257AC3DC36AB75EA41204E7BD8420C6FEAA25FC7A02F7453978D54ECBF075B2 +B02121F5498550F38A136738F52D4A3003C016DC473C9535109EA2D0DE2F2E73 +8FC026423A19799DD8268EFF6A8264C2D94DD6916B535A20A0312A791E0F5ABD +639AC6ACC68549BE25FE23D60A8604A1C27E4E1863FB181A7762FB4CFA551243 +A25F3AA7AE9BA25C52F429A8243CE9EC7D7D947EE021C9E6D603DA1010737D4A +E2F522E930C959C677CD54E40ECE0D20D2983B093388E03DCD3EC64E34BDFDCB +713E3105B0EEF3BE68235BF5DF5C661822370BD7614B44D4DAC1C79170002F7A +F590235E0887F14814A823F9C62FBEE9C8F309978EB7D7D55573B4FB7EE065AF +F7A01601DF410D561476074663B4EA05CE82C48A930F28883221678112DAFCE7 +D2A460E83470C5B52B7CB1C43D42524A71835A1B896298D6D9A804F2F23DB32F +2C7D11F33185A48CFDCB7B33EDC4DE4D756CBFA836A82766A45E84CE57F6DC5A +EB1BC7925907B6095990430EC859CAFB7AF58044CF477C7974DDE6B1291B035C +FF266F85BF4E5F1A49933577AAC49325288B76AC0A217FF9550B2203E6FE58E6 +22425ED2972E85F471EB2F5BCA2C9DD2BEE48F4E87573E975D0481806F0C7EDC +9918E853936EF95C7B75B2AA3C15C973E8963620454690CEEA1EC9E594117E18 +B02D8BD96D84769E5376AF79B42C7150B7688EDFD23441C608C41DED89E3047B +F2E01057EA248B4128D68E6FD249DB020ACEFD1E0FEAD6773115B434FA558BBE +F71C2FE0FF0ACB9852424A4EBD0C43745A682A280E37E7A07BBFD3A941036C55 +5D97488F4D5E63BF6A4A470AC6FCF0DDBDCB00972D846A5CAE0AAB5EA2B783D6 +14F2F300A5620CB83DF801D8356B562446DB8BB6699056B185743E9E768A8D09 +6B2B821E5F32C830026EFE9419F03FA4A2B31B77DBB3E74FAD7C77E4FB1FD68B +4712443FA811A9CEA5D1AC300100EEACEF7750876636221936F413639502A88C +A52E9EA9E0F33D83156612B013DB6E3C71D9E1AB0582F4BD8A6D8A94EF11277E +524B3CC801EC26DB420811C731D49A66156CF39BB5E5CF30CF0373E51A3B69B7 +9F1FB412F6EC1280FC57A52E87DE96281AB1EABD636AC75EFE55FC64A8B91849 +4A48C1088E3360CC56A61DEF22A66477C0F44E1851EE82175C9FB721897358D3 +A1AD64ADC31A76A5634E196341F9314FB2FCF7A4DEA54BB36C62A21BF29FE0A0 +23A323E26E9174B66E8614FA1153C0AA2065E668385C286F57FBB4202D80436C +03FD0B5470932993E1667246411452906E493DDB7916DB951A394AC1515164B0 +98C66CA4C0539693F105E9DCFA967B25EF37E1F48FA279C2FD35FDB114F6AD14 +3C9C6AFD105AA057B014706BD9319F651007D3DD5E3D581FD11E5AC21439F463 +357D19ABE0319FC38C3971132AB73165A372109C15E1316149C2D755D90F3F38 +78E7EA7BD86A0E18BD02294B5F4536676F93C58A259860E294AD8978F767C3FB +0A8C58F0335F987D2797045263F97E578DB42F9BB097C161845D347AE7D3D409 +3341BEA7EDD164EB05BEE9CCEC1E48060A3BE275C80EB84555171CE4D0B21207 +35462F56926D0F713DD1B70C6DA78B14E4D11F94E5BA9BC78D4C6B4701CD5A4D +F7A2C28E150749F0C7BD2D57664AB5C53157604ACA4772C09D6C7554FF07C966 +B61B01187A2AE412D610BC2F701E3723A5D12B11CD0E51B099E3E28EE8743427 +EB69A02A28E3F6C40166736C881E2CD9A04B001ABCBC4DAB7A5E97D3F0D2B2F0 +491A275181FF36C9A594E3494658CFB73C0375B8A3ECBF74587B87C00949C82A +AF6055DAAA1EB9B07B0E3F71B40986427EB8A909BFF873901997E5C12A96E9B5 +215F8986F9B03445E9030977B4B9487E6361316052EC1D57E37E526F499DD71E +20426A962873A6DA473E2D8337C2813C1F87F27E9AA111F3DCB04D2153D66D76 +32947C4AB3AFEA2EB65A92BBAC6712AA9D7ED46A24C3E055CCA25E60EFC48448 +D538878214E4A4648B6EFFFAE1D5D7810BA33446DE287FF9A53FCEC88DEEE5C3 +BD0990235C00751A34972F975CDA90BDF2AC52A0B3CDD2C37938867BDF8A5350 +6DBE540292703C94BB9CC1993F42B36519C1BF1C1563316F5BB2AF262864ED0A +D960F09063B9624470BE8B5AD941C8136A40C45C7FC3647D0D0F249AFB388FB2 +5BE4C1B059B2F2D1486132F54961B35CE68D573660954D2CE0CE474B3A8511BC +88FDF2A7A5B6D42660AA24162D2FA941710B28DB5FE3A1376D1C17DB755BA9DD +9E8D7E413A6D91DDF79D561E6E24E177C839AE7AF67F7232E62C3375AABC386E +F252BD09ABE7BA2C8864A57BEE210D918C837A22956CE01E2A1C6D8D36ED0B89 +7D4F5BB00875BF86F08C567090B97274D1717E6430EAAE04D112A68E690168BA +7FC64082D54953AF035B8EFDB9CE79DB23FE8EA4642CD007E5139BC8A33A80DE +A343FD7D30C4E414404FE4B6C67F439CF59D16C7AFA784F05EF8854B1FA799D2 +3B6D60555E8C545ED1A87FB0EDA768B1BA8419B714C4D98A29E097018749375D +927F89639DB3A683A5667E055DB80952EC1CECF2379F7D4E474781CA6A777004 +63D59E1203C15F36176C31FB37E26D7E3EA807960DF37739382EB296E6C86F47 +2FE36705EE49206FC73CE0B50413477C40EA6A32BAEAFAF6B48BB787687296E3 +3B76915020E7011AA5EC9998DF03DDC10442962B74D79E835DF035B845262F1C +BCFB70A0EF1ACD339C730061DF2F71428CCEC7FDDB79288A01612E8C312D6420 +92A6A46FB050B3027F3FF9FC13AF63577BBF35DED932AAAE1868797CD0DD40B8 +5C16142A7844E48B19E712255346809F59B5FFAFB4EAB7CCEED49AE0B8044533 +F1F142817766F2911130D256185975FF7A4D858B88216B8C6095DA7B64423004 +216F59E7E79890085589A5FBC37B152446B39AF9719EF5F0A612C9B6EC79B3C5 +E4CF1B40508F110BD8344E9AFF2626E116BF091DFB3A353CC902DC90431E6580 +0A05B75D0D1FE391966857000AECFE3CD96695EA9A59F1F98F5DE734C394F4F4 +7BCE2F6E68BB3E7BDDC11FF45B2002903F90C4F3D9A64D8075D382619E92330B +F2FE55CD9E2BCDAD1BD0E4421C4E14D230BC46843CFCF29D97D909E54D62637B +C102EE4781B5EB9D6E694ECA3E42A74401BFECA5C2F9EFCE6420450988D42581 +BED9703DCDCDD050BBB8E3394EFC87E649C7F4CDFFCD94876173B0C3EB2BC5CD +3AB10147EB82D3164893FDB8A35E27BE272BF6E426EC25C3371FF4149E399028 +978DA21E99ADC25E40B9CD12D68828D03E21D8F63B32F36A0AFD0DC21EC682C6 +FFD4C6B3738D6ADBF6893A961E83A530E7761AF49EBC1B2A358CCB577C0DBF75 +96DA1916EEDFAC8EA137929981D4B81099BA2395F1373651FC5E2BEEC4CF08BA +EA34C68529F8386D97CDD918D5178A45BB841BF4D57D879D4BBA7EEF70EB14BB +EAFE293B945C61768C5C7EB17E3D594276CEA68B8B932CA4A5B72D55E9F18337 +B5F80C8AC59882263F4422EEC92967B04693531730E2451DF1163AF1C42706B1 +DD2DFEA4661C172EF86C4F7C236C17D95BCFD45FB25A9C7E7932438CCC503D16 +CAB681713977520E91314D0BB8904FEDA54E01AAD18A5F1D702A43C5161C4E30 +70B22FD17A53B6A297ED907BC5FAFBAA36215CE008C5027A36E8EF6AD667ECC2 +6A1683ED002E4FB3530CB75005CFCB46701938F284F089219C943488BBF00A2B +F05FDB494FE62B148819E66B75C1EABB74AA6705E1945418FE8CDAFE3F59B645 +D0E98C428AE93F4E45795E626F81748116C72DF6DB8EDD1B7DA92033B039E26A +97FB8568F275F6737D816BFC63FB6CE5DF8039DCC6360A11DD06E62653D4FBDD +032BCEDFA5825D6E1A56A7C2BECC61F58E20F52F494326DAD8B2B179D8978C43 +7F4BF0BB357BBB26E8F0A953FAB4436939D14C35EBBB8F9ABBF4820BF4324C63 +8538C96895275CF2ED860038E557364668FB8C80D9034F5AB899EF3F4EBDE4DC +423AA848FDB8A0AEB45F341332D498CF55B8211B0C5A619D404170359DE5F86B +58474D3C6B39D386998BBC79CEC93F03CB7891E0084300ADF09ECEEABABC7CDC +22FF542616DE3838846581C6C80C2D97077818FFBE9DBE8C8449CD13C8D2D5BC +6FD512842E7B222149430262375A6CD4B64BD1A6C9DD16D975B4A5F1B3503B8F +45A39DF05BCFC8154C598243CF2B0E90592C282ADB302F05363E1C7C51ED7EA1 +450F8668971783E264669E8B065A61C0465EFFD3242EBA21510955BE5F568F02 +5D1428EC09E2F968BEF94653286A57FB5F58A554966C9C836D2AF9213B58D8CC +55DF670095A0251AF7775474444AA1D91931A93FB982344DAC682E224C2C07E5 +A5F227FEE5CCD29E0F9543A015F59DF9B073A02ED3A74A1FD778B69646725921 +58D869666A6FB56291DCF7F06883719AF533D24527A2D09BA97085B5B0CDA0B1 +3CEE738065F0E631322077CBDF71C9E0579BD83D24A39DFE11502AF427398B9E +B1660885032D54A948380D7D386CD865BE5C516810EE38B6B5120C1AF67DAC17 +10D46A7AB3C40916F4AEE937DBEB0E763C90A83B7A6053E329E29AF4B98EB2BA +9E16F834880F246F3BCD4F2BB0BA987B48C5C63F59C47F25AD5D02F4C3131BF3 +1F04A860DC3C542BEA6CD7290997E039EF2CE021FDB0729A93D4F431557B076B +C0D85AECDE9DD072698A81E731814DC25110260010C3DD863C87131E461AD28A +9416FDF10EDD1659B982654214F4A579C74CD722D063C9876B970BDDC8E6F63E +1EE938DB99FE260B92E5D2E22429F1D721780E96F4D2EA983B0D9558250B07B7 +47883F7DB2EA31BF6237524DB411127B956AAEB6A714EF245AA31E169E5D0E65 +DD3220A2149594A31ADF9B9CE240795B40B0AF33EB4E48127E6D339D77490233 +4F32351A501880975411A5A4B66B051C6A9441D177D42E07F226482E12989D6F +E152B2AE18A4482CB719E9ADBF39BA4E4ABAA5F4AEE67A8F96446C2743D55541 +48584A86C9A29CA5132D1E6592A1A6B224A753F5353BDDDD771A646A85B455DA +F6D988E5D2C1F9D6F7EF33F85A214B3983160CBC9E94071BB32511AF254E8BCE +901DCAA53A09FF5376CFA072A89E934C7979DEF4A4FF9B7814C51093765BDC81 +18D08EC11C3FB87655EC865C3B3FF76EF215FD68FB542F1C0895851CC8A9B2C6 +CD5383E8A7D4A0CC6BDAE7A814B551ED4E9389F72A436BC0DB5916837EDDC220 +0D59315375CE8EEDB620CE486F642723F25E48797FD11D60FE586F77BE1C84A8 +EDC862CB369236766E85479C518A2F404FFD359EB0DE1ECDA9A7005CC89D6FE1 +6B94513413A5580E1855EECE0EC809D4F3CD521FCA0C87B53A63F853F77EB506 +9BB7C6857ABDF7D41B8BA5C76049BEC762A92785D61C4B4B9B52BC6AE01261B0 +7F490E8908C422C358FB7DFDCA3C90BC90D7382E1FFA4AF066191E780063ED30 +CC310911E601F4439CF9411D510B4D1DD0CD00AF4F037E43460D5318080253A7 +087882B147696917B46DAD2049820AF6544C17CF7B8F959249112EB815A770EE +5A87775CBAF668C014951DC035C88A9ABB6E218250CDA07D4E8634C24C5FF2DA +240CD8F66D2F40FAB0B9343F29F9754B3C05612D93A7FC271D5525C0DF908C27 +CB5283B2F67C56CAA486608F95FC9F003CDB6589B3490485280F62DD2CC4363C +9922A00068458076E0275A79D6BF68936AC01D8686948B5EB9EC085FB4881280 +CB88526981644AB139A28AB5D6F697BE574EC6736A0448F7D2A01DCAFE7EA13E +4445FF1A2916E1D150D8B5647669FDAD2B964AEDD165EDBD80AB1A90B7E68A06 +6E879A384D859D9F39679D2622CB9B3333B23953E6C480420915A7D306FFE547 +EE946D441055117C758A268C3BC5D9426F096479DC10A2A40E0DCA2A26CAC4AB +D25DE153FFBBEDF0192B421F425C5AFECB3E945D1FD89A871BA6BB2B6D6EF927 +14F03EF6F58F08C942FFDA0D5C21C9B4AE8D0BD94F37CDCA045B9D9523C78D34 +CD2200A20FFCF439F46349D1B5758927CDB632BC9FA901EA2DE5753545E29BE5 +255506E9AB64604B45151C4D1C3F9153122386128BF321B9850B8092E5A0C95C +5B76B25978976ABD43276347D3D19BC9D3DDB0942DE5F92FEAD103E8780CB7C2 +14BAAA7046FB844EE91FEA29DDFF649BDBD6A23C27B465D56F3F610EAFA3B6C3 +F7BD500F9B3B469AD136A7D4FC508A96A274162FA66D1226CCD145A32C7ABE53 +360B31FD69EBCA0C1072082D8D81A3E25EDAD691A7EC2A37FD38F0E306BB070E +ED46D391BFE7AA0702D28E7F9A1293844E1F709B1FD2242AC3414165D900601E +0872365C6BEDCF61F914DFBBDED7C20AF382F55F1778E9388A1C59665694F334 +D27DEA2A169BBA820551F5FF4BA34ACE364CEA6D934EC516DB8DAFD57EED2ED0 +3CD8018EF77EF79077CEB7DD82AD806A583DA2E0EFAEF6C1CB48B53A22BAE11B +68FF422F +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +{restore}if +%%EndFont +%%BeginFont: CMSS10 +%!PS-AdobeFont-1.0: CMSS10 003.002 +%%Title: CMSS10 +%Version: 003.002 +%%CreationDate: Mon Jul 13 16:17:00 2009 +%%Creator: David M. Jones +%Copyright: Copyright (c) 1997, 2009 American Mathematical Society +%Copyright: (<http://www.ams.org>), with Reserved Font Name CMSS10. +% This Font Software is licensed under the SIL Open Font License, Version 1.1. +% This license is in the accompanying file OFL.txt, and is also +% available with a FAQ at: http://scripts.sil.org/OFL. +%%EndComments +FontDirectory/CMSS10 known{/CMSS10 findfont dup/UniqueID known{dup +/UniqueID get 5000803 eq exch/FontType get 1 eq and}{pop false}ifelse +{save true}{false}ifelse}{false}ifelse +11 dict begin +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def +/FontName /CMSS10 def +/FontBBox {-61 -250 999 759 }readonly def +/UniqueID 5000803 def +/PaintType 0 def +/FontInfo 9 dict dup begin +/version (003.002) readonly def +/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMSS10.) readonly def +/FullName (CMSS10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +end readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 45 /hyphen put +dup 53 /five put +dup 80 /P put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 103 /g put +dup 105 /i put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 112 /p put +dup 114 /r put +dup 116 /t put +dup 117 /u put +readonly def +currentdict end +currentfile eexec +D9D66F633B846AB284BCF8B0411B772DE5CD06DFE1BE899059C588357426D7A0 +7B684C079A47D271426064AD18CB9750D8A986D1D67C1B2AEEF8CE785CC19C81 +DE96489F740045C5E342F02DA1C9F9F3C167651E646F1A67CF379789E311EF91 +511D0F605B045B279357D6FC8537C233E7AEE6A4FDBE73E75A39EB206D20A6F6 +1021961B748D419EBEEB028B592124E174CA595C108E12725B9875544955CFFD +028B698EF742BC8C19F979E35B8E99CADDDDC89CC6C59733F2A24BC3AF36AD86 +1319147A4A219ECB92D0D9F6228B51A97C295470093CA270C4488BB4EB864B48 +63941B9739638D2E6F3CC778582B46AEB4E466D89D1C211225274356A4BC90F3 +274C6AA56E200249B7D0949A3FD4185DCB3E5286910EFD7CA72D5D8E8052C96F +388D12094B87D3705CE64459558CF024667C0FE96CBB32B0BC9E51037D7BD62B +E4B05FF99384E71D78441A79B0B1DBA1CAE02434A9FAE46596FB86B873B1670D +AE0BAF516445A0DDC127F8FF3ADA0B10EC30A9CC1F7E9248828B5E8AB46C3FE4 +154B80A54128A08777F5F9B8C519C7E3B632B3476F007FA156E9F39FBE57638B +4214CD2BA79BA9DDA0F4C073AED814ABCCC2F7906C57A872C00E67FF03AC1200 +29DAB92376422FA21C67CA98BCEB8C431CA2D3EDDC16972F84BF6DB2F705BAB5 +CAB39C82D139FB1304B9E7BF1F6FF447596081D5690B1519E468D6BE49C329C5 +C9C809023EDEB9DCE4A6D52A8049E0CC134E8B41BFC6558CFCAD3D9D2773EA16 +131567AE6231B3235869767A1E7C1FA6C8D6FC1B276CBB1CAD14D376188C9682 +302836A9290E587D4225EB8BB1DBA2C4580A81FACFDA197174FE948CE757C575 +F23070FD84DE121955D7D9307BF986C5E739FFFB6CB76822C341FBD9FC2E3378 +AC9332B40C07D5B8745D74E30F1D719EAFAEDBF5FBC40D0546F69A66072D8A49 +28D2CC2E76B9B1EFD191E0BC7510C2C8761BD92EFCFDAC263342A01398A56D18 +121A591FF5CD4AD8B25699A7897E60BA940336BC17B9EC9F97C2464D031F958A +A3548D0C97C50C580B6EEFD0FE8330EE2BB0D2E7FD1DAE33448953544A4B1C5D +8EB57798D0ED4B22909FEA78ECDBC4D8A124DA05B9999242D68681017285A0C7 +69041C1F79442279FBE328733EA0A6694D68BA89739FDB9297BE0CF1808C07F7 +BBF6F1538DFE084EC8C0EC24D883F6CC08A51DFEA23EE920F44BA55FFF58E960 +C7BEE551FCD2D5814DE7E3F835608073C2CB80EC57100CFD484C837881674E92 +B217F4D11165427DACCC29C129005874C05CDE5FBB2D912368EA2B98C45AEDD8 +8A0D2493F60EF36809C8C6EBBC7856F6656E8D398BCB29DAACD4F7D4300A0B01 +161CEF51195D2C58DDFBCAFC1C03F49304ADF02789889826F1E20BCC14827565 +F2A45CA57DCC61B52E33638A0C6C5A59B145E82B82571DF1806EC40FC0E8634E +A34A791B1325571E19F3AC2EF6FE68A14B0ABEF7EBE0EDA3942E85E5AE967A14 +0C5AEBFF2A36DCA8866700CB7082D2ABE470864C44AEE1F6D180D511304C8674 +D02FAB12A7079ABF96E1CA3CDF9D75532123E87663B1D524265AEF63EB5C2169 +B67A651A101E1C7EDB008D3DB06DB1FC1A81B41B291D6C4A58FB57989FFCA434 +DA84B3914D1D80B17AA3A55A70BBC06C49DD5F7DDD03FEB0055088558FA192A5 +261477899857CF598DB740E82D035E84CF17B33048CFED2DCBEBC2B75CCAEBEA +B6C5AA1C6978FBB36ED98D9047028360ED430A0AA69AC85A8F83825EA649E1B2 +64B260197B06A24A1DD969CEEEE136FB046D713D0630B246BD41CA285F076038 +F7F8431913BB9A3E70311844D4C22AA446E3CA217A9DFD75A898997130269B29 +AD4AB7D9662856E677FB2DAED7078639CF31C6E6637C74DE2B5D0ACB88BD61F3 +CE3C5D56D3D4B3EC1ACB33EACBE05E53A133EBFE93CE6A0CBC8F24BDC5B31BBF +5B3E55D6B40B1CED389076014667E28BBBD60145A06BDECEE8011A2C6F06D091 +73767A8045CEF2A110B614149FEE783A2351FB2938A9F73CA406538EAD82ACC5 +A3DFD3DE00221E1B4EA977AF8C89661357FF7D2F1FCEAD6CFC9D6AD81F95100D +EA1F328249AD84AE849220E6593D45015B4D7C9527F3063E9F6DB6E572092A1F +1F460696227D5F0FA5A5484B1F0D8B4A35066451663BE448D924DBBFD388B6D6 +D7CFC87C9E75B7CF79A4C9207E29E0BAAAD7FDF529B860F7731EA978E335334C +13CB2F0A4250F5957B44CAA0674AE8356F586A24FD137103973B9A1FC31090C7 +C84DC5D380404BCDF3FE20C6F74FFDD8BD1DE845E99DC6FE09931F003834ECC8 +08C5D962070B6C44F901A787CCEF048A2C584A2285506B4D4E82B1BF130E2220 +B6C8B3240A4CBBCE16AD3676B23A50B75F82CD88D1B8F21D30A12716426112B3 +23DFDE5A348DC9DCCCE5BB5DB5433A5AC125DE1229FFAAE0D8319B2929986EEA +56A93BA1FBDBE617F30852A3DC8C712DF674169C6D656F75E252187A085B2788 +2467CC4DB08D48EE6A98C61BC55E6EFB1938FAA718802B7587B94C8F1477E9BB +DCF6E02B5E67FE3AD9D87C321CD9BC0CCD36B9C4BC601E6BD552EAB8E1C940CE +3A22F3C2501C3C939CB4F17CE97566F0A04602D2A22A05CECDF4A49CAFD6332D +5870E1F31AAA5F86867F71610CDB83E473B9D20BA00D8986D7148E0EED03865D +9622864B52B09D12E0C5FCDD023D29D5AB1CACFA92B6FC14FC84E95F407861D5 +2BEE3301AF399FD7ED04DFDE6679A345A282E7FC08D47E3FC8969D3B00ACD7B7 +F8769647D6D4F4106340EF739583374D023C2702C48FAC1B643B5897D2D7DBCB +73257712A0FDEEEB98A021D218CDDEBBA34687E23C4828D7F96D1ADDFAED7EA5 +B279322E6D55FB486AD8F3A8E7B2C67915564FE56F0C9277A06B29C47FB7D007 +11AFDDB3FC1B173B4E449CC6B198041CCA0624D81B4840FE5B63BE72157AC6E7 +03E5E95D2E2CE2E40BCE8044A8F2AA45F855484A891B9F0F8F70188AC66A8DEE +F4D656CBE216E6D9AC33BA8DD0685D480833E1226784469A221D9FA3CA600AC7 +5574B5226649A9C48CCB43339942FC9010F86BAA2D181AEB487A92A96BF2EDF1 +60F3B93FDFF4137A25A8AEC5ADF8613019CDB103DC4367EF3D8AEB4FED0E6BF7 +622AE0CD3CAA0321D26CA4280CFB60D08D9560AB8AA5698231171B881BE9A27F +BDCF3162134126212C523738D221AA05E31CEE73D9D40F73C450B6AE2C1E70D5 +C37162BDF55943069923A290A6C720042566E55A21CD81C460818883AB016C16 +8FCCD1255A66977DC1C110261D7642199D466DD3D2493A2D47694F842241C474 +1752B00DA03E69CD16A8A14BEB8A431A315D19A39BA978E46EB1189089FEF647 +F9DBB58AAE6B3FBD475E4DCAD241A051DD100ABE81D40ADF18A4C50F53BF749F +D6F7C8E02A5665B4AD18DDAE79096DD447F8BD32C68F9F97F05E0071D9E9AFEE +257B96D48ABD9920418E17C8F027E9E975E4A08DFB1988E7104CBBC1CAF356EA +7750AA7110BE116AF1BA69A94776E4356573B38472A8A1292C63701543B0F315 +611A0E0595B30424A1137478BA6F990AC7C3AB4DB69E75C222B617F373C521D4 +246E954E9857AF59D1E6C36412B643733CF5E1C90389EF0E5E0DA55D3AD12E97 +E7630C315F72A03CAF22E0ACE3AAAFC1D496CF4E5ABC49C2DD5E264BE7EB2698 +AFF36089B5DD2C53DB1C1FCFBE1E89D41A95DDD278CEB29DC85FD1DB8B83CAB1 +EB37C531E9BB8466ED6B8B60258D3C355626CDA43A32834DC89DFB11E5FC6D68 +0F78CFA871113DB81A1690250A6F842ADA15734CB6DF7C6ACED6D8D586BC4E1A +94EF3052FB0F8B9454390B882CBB6E135AF1F9C777AC362C2A758C3A98117120 +73C6E2FAFB580716D4B2889A4331CC658AAE996245685B973D9C184541385680 +AEC2956107DAB00230FB39BE98D3CA898D917E5F2088F26CBA4F8B5B115B6443 +8753331233B10852702FC26D9DD4C990C13CE4D0DCEA23D62A826A4B4FD16070 +5F3638C0A50A3373A33FCAA6F3644975AFD0560EE5F2D1CDF08820373468E4FE +6679A229D6955CFDF7ACAA92A87E6D8571AD18CF59F84F88A674B2946FF20A28 +B9798EAA22442415EB46B9498DDC0F4BA6ADD347AB43E9293CAABEAE80127378 +129D5DC69F6DFFBDAFA5D65580239E8EDF6833D0DE6DF75F0FD090A83CE0974B +AC947BABBD1B1C7194DDAEA37B0CAB477ABF9433FCE0243C8D308409427D1DCB +8EE4FC36C7E5CEE104904B520B3F6E677A5B92F694BDBC2C799991667E0EC14C +B95EAE7DE1854BF4542F05B4AF401CF67FC3E46EA5A0DC362F3CF177B1796DA6 +753AA803E724D1721DDD1BCB0C12CE0859E172D2A370C3697286F80D9E138AFD +A0EE016805F847BD30D11D8B891E54C77AB51A7CABF76BB14B06153C7F811FE4 +93FC4B7CF161051A458EDF767DF94F487DB939A2740B4242BFEE234F75084DDE +207E84533004B933D43C712F0C71DA4A00FFD6D721EBC93AFDC4200E3B8DE433 +3ED3E1DB799BAA27548ADC853AFF5D9D6BD92D644E3CF394789C99D9DC054A26 +7770AF5DC5BD6563929AE11BE341F036584DD573D3F43D9D975201EF77BEEF80 +D1EEDD1D4AD5D4D4DAF6D5B9D4C1736CB111D6FC74C236779C0ADA430323A825 +09EA8D0CB1772220AF28B93098BDB36913159208D1B2D7ED45808BF7B686419C +5C0E3DAB5BC9830FDF3B494D624EE8068BF6F5212BD69EF466B9A213047BD105 +B848F056DC544A8CE66C546B1A4DCB4BA29CF0EB4DCD9C2452F22172AFF33B29 +E97E12D8F0D312B03BD9E5377BF0C81D884F1E79DB66E8144F106DFD2579AD26 +C693C5B68F3AC46BF0D6281032D4D4BAEB2243151AB1AC0BDA2ACDDD4D590C90 +F29B335DF8F57DC593DCC081FB56924028E3161AC4865B49D1B0F63F5EE866D9 +7A71171C09B09A44B0E32F03494D9EA63F3C89F5E772BE25A6557F119299E989 +99BA041694ED805AA4F3BBDF00D88171C9D43A9085A287A36A1F0F9386F2A98A +96815CA51F06E1CDF20B757983C5FDF4003F5438232159F325C6335B734FD982 +1423BA77D0EFD044381AFBD0704E3DE95D23A70E2428E9AA355A9A8A25C6C74B +48488C14DEC93A766E112D74C83576ED355F17A809E8D3F9C65C4E3E14EF484F +4658DFB57597E2A4461D8044E95844391C1275D63F282B37888C842A5151937A +45007547263D70195ACC018A373D498B88C5A028BC66ED96A343EEE74D61EEB3 +D9472B6A549CEB8699F4B35154A0E2ED22867E4F9E4A76311EB2C9F9078FBA81 +838EA49C2966BA64C165434DA3093206B70186BE80600B891D9979F730FDC794 +5DD6D8B2090CC67A634B719F441092A10C447A86ADB78DAE45823ECED5FCEADA +ECA52E363D913D9EFC0ED98A5A1F823DDA3350EE27F09C14E4C7298CC0FB6200 +DEBC640C68C82D70AFB7A7BA668F1D7948686206884736CD03D9F6E6CF9702BF +E3C932CEF3CE07FBBFCEC0476EA6E8D5D4C5C6450C8FB236B89BB82D51886240 +5BA7462F50A88F69228DCBDF26B7250E90B3DF8E94ACA1CADD9EFB5C73EF9DD5 +46052314D445CC92512BA231F79A09A2F0D91976B160B8C9BA055DA4AAC1300D +491193EC66A6DE12BE01EEEDBC3A2291DA1F27AB76596A236B75E19FC5F1FB6A +DA1AD835CA08B6CD03B97B4CA1BFCBDD2500BB09F1A1B0438E4A759370EFA318 +F062BA9F3D352572CE232E6FBADDAA5363807D0DC5320B807FE5485C8CB09B6B +0BED9F5B1300FF370252DEBAC9DB25CE2EC494E8EEA45FC6604B3C104E81B287 +EDD49F3D7430EC9176A16B4FCEC5DF68DCC11ADF90BD5337E2E4B59BEFAC8298 +E5ED2C7FC5928635420FB1955251932713236DCE28012C86F63D12AF1DB634D0 +0B8CB8992B8723548177BD6822A808FF221A9E38B0DCCBC1F3430A9BAEDA89CD +ACEBBDD8CCA5E17F1CC37E35A01E058BAAAB6BE7124314DA19962BADB74EE73D +8FB13FF6AFB6FFF97926CA045B62B98BAA753AB0FC78B881D3FAFF9EE2FE918C +8EDBEF87637F1530E3E13AC090FF81F4136E08D5F3734327E643CDF621278741 +A17AEBC56E21217888A6C8B5ED4269731910E7E25693CFBDD4EB4A32698F2447 +4C45D73E810B627D8719E4E34D8FF378F9B68BFB149AC67B3B1E55F20D097FC1 +AF74D46F5A3923C63DFEBFCA210F6B257F5FF3F2AC34CE41C15C9977634E473C +2235295C05C3DF6B3009C7854BF11CC87471CBE085793AF9C5D05C5479B9E780 +14A5A6F3F6DDE5A18243DA15732CCF26ADE40C566DBC3C62B71D46DE87A12C6A +647CAC923254E2E74AF882DBD5C9E108A9160393C5CD12566AF7C824EFEAC56E +6F05B92C73A76824C5ED1735BCBAC61B98D509250C854CF1500C212F574D18D6 +4426B8510FE9785B814A70E75C9234D42483E736D0689D3561E8EE5650F33A36 +D50127589401D267BA6442E8616E2CDB1F6691D3FC4A2A377E5E154972E890DD +60CB463E9EA9A6EA61087DF452FA5646F69BE879337EAA0F5DA4438FF0365627 +4E3B16851C2F08E976FDA27AF451CCEFED00376FC3D6E0C160F0BC19544DE289 +BECEEF9A067FD71D54DA3A4F73F06E2F522BA07551296214DDA47B1BBB1212E0 +1100ACB5F65FD30C655A3402C83058F8ECFE48FA60B6A3DC86C4996414130194 +6676EC7F37454023AB53E9D9EE60249ABF6953E76DCE3123DD268BBD492412BE +65D7C3E5A5E483C381182A8F19B506F0AF6DCD55532B89852D1D96021B22E9DF +D9D072BD7DD4450577E658B433A84F92752B260AFA2EC4A118747CBFE36AB7D7 +6D5DD96A119AA1BDD0FDCBC3AFDAE5FF72713EB46759A06CD09B5CFABCDAB0E9 +85599506AC07AA525978AB157496163AAB387F079EC9FA1F9E91B9C2FBCDC9EC +7027D77016760539AC03F1C1DB242D28D6EE946C42DD2262D82ED48C3A839853 +BA977046F0EF373AFF884AC3112D2FB319421C3165DFA5710BFB9AB9595A10F4 +9D05704B9E22137CF27F4B2DA9CEF6D8801D5F792969B2E58FB539B8038DF440 +6DE20C0313A7BCD16F279290AD6859B0E657CC3041C7928CAE35B9D3A681F2A3 +2D40F8EDAF1127E754276556C95E1282514B6EB6E43FF4F0FAFF28C715E3F39A +374415B62C1F5F8E31E006D6ABC736057910A3729AC60360CEE1B2C8D9F77336 +39CAC45329A372205FD551B9E9EA5082411207473D9D90E76136AA70180172E6 +AF6EF3EF6B38B1906B904BE9BD5251EF067738840C28877659B649C6C4CA328F +1BEF8A9CEC2CB062702F58CC0B8D2D097FBC278F9FD894E10ACE1DEC4530CBF8 +E4E467B6DB9C596DF0C3D43E6AD70F30B733EEE692C2EBD68756D0C16E1F00B6 +AD011B5DA073A769B53C2DA2E7C9B7ADC6F551BF4DF4C39C66443692C3DC62CD +B1E094013F364D04BE2FBFCD1C7B2836180E9022E0434421FFA4317A50096684 +CF0B8740EF680F27F4A84AAF2AA92C64883BAF57BDC60C6467A8D4E09E6316FF +9BE73053045E5F3586DA3BD1298DC15D751913FB1E72EF80047F6B33591B97D3 +DFAD34EB224D64EF60F5B4ACC6EB42E1BE0CB2812FF2F3C264AD2E44F5EBA441 +670CA0A60E73176ACDC4E42E74F8F489C73481EB5D46A61FDA1C0FF9F8844DBD +99CECAFE2A72833E4522981FA13713AAFAF8F121E60FAA6F379B2C8874CFF23B +8FECE70654E5855E525A403700A96CF7F8111BF2B58386E29640D82F1DD86900 +E0E203F3ED554209CBDA2A61A5641D4B39D98C5C43D4575648D06BB82B6C4D4A +F043EC61B17C208CE8B4F43A7BCBBE588A3D13A183D79A47404223037FCFA4F1 +DD237344E589F161BB9BBF3FAD2E28749350DB9A74C09E894BBCA85B82E704E2 +99788B24642A7D0F0FD96601CF1AE4819EBECAB89824A0DC1C03BA4B546ED36E +DABC8D49CFAA53D2A9A5DD6B3431E364C99ED0323513476CDCEE49BC413E50BF +51EB93563DC03B62F84C5F96ED713F288D109C79179AEC41424822772032035A +40E84014F5BF40948F05E8562C99266B9E54AECEF94765BC79375C69A0385023 +A014B8705931C9A419C8F2B72C3F7054CD6487E75ED2E852BC19302D02C671FE +3892C7AF2A90D6F29771AF31FA95258B6F3434228B377F5FB494E28B5F0393C8 +9DEA5E5726B81B7983D241BF7F78928EF8D8528C8F6DB7B307D720243DF00E84 +A37A7B2C720348F83ACEFFA78929F4CFB5CCCCB2A074C78B92C8573750B91386 +CECD4A1243D1B002B45B933534C0B4C51DDC50BE37BB6E42B8FFD25C8D5208E1 +E3019BFD5218EBE79578A072462F4B739AC8595498140CB8C6350C36E0E9313F +4B6ADE13C28AB4BF001752E07976551121ABDF734B64061944C363CA1385BD23 +CD9BD8F1ED9F0A5C602752A62D0453AC97D649FEE6D0ED3BE5D5861FFD52EEAC +673FD6B94354DAAA29F26C04F9CA7779F5021CE8A2CDD3F5477B7C100C82E82F +AEC0BBEA7AEF0E819F0A3EDA5BBEBF135FBDDE4099314E3452D1C30067032966 +7BDB2B79A6C97B54B8BFE82A1E6D7F3FEEB6FAB05FF02E5AF8CEBFBE4C386C36 +3FEC86F64F3FFBE7DDD4DBC0EAF8376428CA16B43BF85D8CDF4190293C6BB60E +204B16923A39DF1882292CA07F3948B71F52CB6AB3C22C7B7D95A916DF3D9E85 +1F36EC96FBB3ADF0E3DAC41C4B8D3728D1A1833CB9BD2A237F8AA6C16FDCB0B5 +C8DA4238991CD04707F21D787047BC103B79CC12A1298963E4930D8BB8856495 +4125E8230FB213F5B74ED46CFE8FC26805B45557788BDB4BC8256130FE4AAC20 +DAC0D2AD11C34A0355622780048DF0E1328F1F368D8D8B1A8028B073FC12A516 +A3EDD5C6519E7C6212D5A5444DE829060606063B1D44B2CF3E26D13AD8389202 +0C18FAA0106D974605D6CEC0DA3677C83D8DA7CE506E669C8EB9288CD0B2A22D +A409DBBBAEF4E4FD5223321D9E9358AD5FCA552E4EFE452A683F6788D99F98DD +87D84D5BC08350DA235BE00C67D41E00EBF1B8CBD3CE3D3F498D59065ED1D91F +AABC730BD8824836E7080353F13F0A9C1519317CE42419C6C5E05FBFA39B6963 +A91BFD5359CF26AA5C9F044DAD9513D1FAE141973E9D31CD30AEC63650114C71 +A10587AB9FB4FE5DF62093536D23CC813044827A4D3FD3E622A72FF8D1AF2046 +68A0324D8094D0E1080731408352151D2B85360B4135FEA36C5B167A9ADA52DD +F684FFE0DAC6EF327700164FFAF9DF83C76F4892F601762154422387AF4FBD1B +838D869A68395A41CE1DFCBD4E83F7208D5B590548C0F01F2EA4D95030841955 +1A62F22DB0CD561FFD1F53362016840676DE91200408ED31098EBE8D7B853FCF +64319D6ACDF11FEFC4B1E6636E6611AD9D0D7F29D28302C632763C6167154B68 +18F9C8C8AF2D0213FAA7544536AADE63B8BEBCB67A4E5B3FA05102C64E688117 +09088897DD1A39FB0D8E294BB18B8C93C727A79D03642C3568842756381E2964 +F3E37BE585902071595E398C5819870777BC27D9894876AB7C579BD498738948 +FF2ADB78FCA6A17178BD43CEE8BE835219782F6BB9CB286E5F1A4C92EE4E7C9F +BBC0D019D8A364F19B22CEA8B9DA94CD93242224D197115597C1EDFCAABE8E6B +E1F21871EB6F9B27604CB2A9EE8B432F4A42B1F76D4E96050F69D55BDB0DBBD3 +6BC189EC7B4B42381C09C7DDF8A19E7D6C42788F1ABD37169DED9C19505DE376 +44B31396EF2842AB0A79558394F52A53EBC331733CF35047ED8A878914605274 +014DB6A1BCAACB0AA972FC0619CA9BB7EDDFF3A4760004D1BBBF3815C4EB73CF +8CE556DF5FACF5313DD81E087F955615CCB979B81F65DC50CFCE123F680075F8 +2A85AA9187ED4BBC7B155110B044DF47C7D3E62E9B2F98C1F401F4C84A87E428 +FE8F3B2B0EA1B923DF162086C8A9B4413B65B6E1992C2DB8480C6ED3A1B45094 +8EA4FDE77BB7C3C898D707553AA905CC7110B751BEC1B472C0C4D43507FB5167 +7F5CC6816A30CA19EB93CE38AB0ACA267435BA42CC36C9332276C553D76FE98C +FB7DFA73060A4D8DF6A52FD06DC7334D0709D952D1603C4B2DA1867EF3923BD1 +7EBF32A34C882CBE3008199D8691414D936150E9E029795B256C4175F531E695 +8D2CD5C902763A8D183C771F05D6F050DC19ABEF4DEE8F8BF5083F2C57ECD099 +D01B1358982930108BE133D189D048CE7FDF493A31D1664D196F80914786030F +A1E931F0E03C7AA2B65DAA70E12D44AB2FB8827BF2115FA2B13B6BB4039C062F +0A20B909F8D80A714FA9764D1F4A3305C03A5244321EC5F6710D24E110AA3DC2 +2BC3719D49D51D72C763583825465DF2474B6EA83306A752F86D5A8B2F2ABC24 +87336CC47C75E9C935FF9262FE07D6C8FDEC44BE335A8A721214067F7A9B9EC8 +9ADF3D3FBCA5DEB75A88034C08A744358E23BB2B13AC5E08162502612A7FF65A +63CF2A927E5FFAE1BB4FD850B4B1AD6E3DD0897086F334397FC9590D5F00A96D +4DA676491CE72D93AFD1C8E2638DD22FCF1D2FE941D4B90E422643B6B25AC077 +95D535CDCD52E347BA420C61817F7594E23991D86051183DBFE3638AFBD985CC +95A4402729EE6EDA014A03483C1FDF79F203FD45F48E48386EFA6D2C148F2B58 +2B09EC3B66AE50B446CF56C044DA4E14FCE5046BD8616268644A19E77C87BFE6 +FE5009FD926E6B30F8489E31FB6877A5998721B60D6AD01C5F1330EBCD68B779 +ABB9FDA5ECA39DB2A4EFC056AC41DEC22D49A845F9112AC3E72D287DBEE52E70 +E1A253C32CA257EE66CA8ABEB47E0C4A117BBD21E6BFF58A5C5AEC9DA23FC8E3 +3992E737EAC7E0E8C13A330C140E5EE155D9CFC27FD14EE5C39EB7AB3B0C11BD +0DB6CC537290C23F0D7933E7A59BBEFBA6291AEBAEF2796065C31104B321A310 +5E93F34947E720C637D32E246C0E7B0F97DA0729AED50E0500DF227C65CA8E43 +3BA09A3ABA404F17DAD1B21905AF40C68881E5FD9EB1D6A61BF2C27D01D765E3 +6A9DF9048BA2F16B922457BE7B3FEBE16AC2B096D16C87F6962AB93DD730C70F +F6EF6CA2A8536BE570BE9F222E2E9CD6DC581ABBAC1A4BBAF6997FC8D739A78E +948C553D3E7F013517DD9D0C56363DCE3F63CF4E24615F3BA51D7D1180D06223 +E74FEDB6811C9F104D00361A29D46EC3BF5DF43239DD5ED1D013E494FAB76E6E +ED4FDFB7230F456239AB247712881699F072D3EFEC0519C635F35F4198A348B9 +5423BB1C2680AD161DAC4FE1ECD24EA12AAB4CBBEC60C483423F877F54AF89E0 +E9F2A5BC33E90B94866D31F2CE3C62206DD43D0BF93D7B239087C366B67741D2 +D4A3E47A5C1302D15C30AAFB706B355B20ACF2CB4ECDFA53D580D28245284337 +AFD2B25C17D631453D72222D5A68A4EFE0AB2F21ED784B96A739528245BDA944 +63 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +{restore}if +%%EndFont +%%BeginFont: CMR7 +%!PS-AdobeFont-1.0: CMR7 003.002 +%%Title: CMR7 +%Version: 003.002 +%%CreationDate: Mon Jul 13 16:17:00 2009 +%%Creator: David M. Jones +%Copyright: Copyright (c) 1997, 2009 American Mathematical Society +%Copyright: (<http://www.ams.org>), with Reserved Font Name CMR7. +% This Font Software is licensed under the SIL Open Font License, Version 1.1. +% This license is in the accompanying file OFL.txt, and is also +% available with a FAQ at: http://scripts.sil.org/OFL. +%%EndComments +FontDirectory/CMR7 known{/CMR7 findfont dup/UniqueID known{dup +/UniqueID get 5000790 eq exch/FontType get 1 eq and}{pop false}ifelse +{save true}{false}ifelse}{false}ifelse +11 dict begin +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def +/FontName /CMR7 def +/FontBBox {-27 -250 1122 750 }readonly def +/UniqueID 5000790 def +/PaintType 0 def +/FontInfo 9 dict dup begin +/version (003.002) readonly def +/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMR7.) readonly def +/FullName (CMR7) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +end readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 65 /A put +dup 66 /B put +dup 68 /D put +dup 71 /G put +dup 74 /J put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 80 /P put +dup 82 /R put +dup 83 /S put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 119 /w put +dup 120 /x put +dup 121 /y put +readonly def +currentdict end +currentfile eexec +D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA +0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 +51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 +7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 +E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 +0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 +C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB981ABA2ACC9A23A5 +3E152596AF52983541F86D859FC064A0E3D5FC6647C3CAB83AD4F31DDA35019C +CDB9E3DD3FEBD4C2B36BA3CF6E6C7DA85E25D8A31A9BAD39BDF31FD0D1790707 +9DE6A078E8A409D8295F642DF492AC4F86AC84383B0F4C6BAA7C22AD5A898A71 +D6CB34D2CD12266C486B75E75A69C14819DD9BB8159088E04D4717E576B8482D +BDA52110AC8B8A80E4E9D58F470EEBD3CF44A1E1EE8DA318FFF3611B02534FC9 +F4018C7C57E80570D2F634D98BE5D5EC6D95051157F0EA94A3D12BE0B4B79939 +F82F8D73136D3337C44E314B0B16CB030D9A12E01FB667105F334C3EE965E5A3 +D410D2F1531547A4497C355AEEB295CD3C5334BEE5232992960B757594B89F3E +52095042DBE6B4DA3C3AD50CA95EA9EBADA10630B500CF1FCCA7D60306743681 +7E428D33B7F7C40B425CD58E4CD8AB474BCE6A307BC6C6EBC15A8A96E0E2977E +A33389154536F5C5D8CF036D07F24094E779E5ACBE5502C92892F10F4C6DB627 +C7EC4C7BF20B39418A8A85D7FD9B0EAAFD871DDD41F93BDE5FE619AFB8711824 +DE890E62C1969A6FE28DD3578AF43D58A728FAFF0B9FAA640962C8F35A26F76C +67F3548D6DB54A25CEB368B47F97EA2B0C4D7C0E7894A4F0C823C6C1922CF9DC +10E05600556F1C7C9AFB33A2DB6F8730F70D6BF94B1FB0887451F2FFEEF3584F +DFADCFA9A2D4846B8F0E51620E1327D994CDF973B837D10C90FF76DE22B47CD5 +EE3183898D156861AB4DFAD34A1E3FA260B8164E6680BF58413A553E88F6100B +C4F4E8E972C81A5F88A7DBCDC308B4C3581BCDE13877B976B1F84330839FE5CF +C78551620EB803DF94A5C921F8EE24F7EF8FC4C3E1653514212631F54F90E3DC +E9EAF96E998F340C4F729ECF7AB430FDB7C0BE3DF2C0D23015820E28B743CAD7 +7F0AE95413C3EEABBC69E852F53EE1DC260D7F1E712BECEF2F18437DB23D8E74 +2902AAFBC733AC5BAA452DD6F3671859AD836C8564E99CDC4183D8495AFD99D6 +1F0D65B6588CE7546717911E25BDCA6C2649E3A7466A3E2DA7C7994A30AB4449 +672EFD00632EFA8629C1AFB7D53D801028F77C864869FE636213A69173003EA6 +BE1ABA95EB07B13D1594BEFCC95ECB0A9CFA9892EE0677D6B6C250855762B7A7 +8E4E022640F93169DFA0303A0D5E73BF3E0F4D4AAD10FD7E4EB20532BA30371F +E9F480F9513432946F9828AFB5D4AEAFA5829B2CB544E5EB634C4537EF7DF08A +A1CFD94A52DCF0E7CE4C5EFFB01E6D50558B75DB4C8D5512B06080F27BE62E01 +2EEA6A0357441401458C842D3DD4C35B8F561D816B336216CE0C14BF77648AF5 +E33912CF95872A1E1AB9A18980A0B29A881D13397C15E1CBA5D3E0B27943EBE2 +F3003D15EB446BCFC1C231832475D5B7AA19E4CFDE119D6CD62D053C6D29C333 +5F729791D17B3F7108074EEF4D1BD101CB33E01004532CB0D716D2E54D169C6E +80163E70C0E9081F31A1ECBAE079D2A518B790B0CB2CD03DFD034A0F4788E800 +B0CD2DC1FAFDD487C2F381EBAB2A2F3F3AF82021B211DC9CD2FBA6A1BB3D4AEA +4C7F3D9A5C21DFF284CCB827D205A69638E98D5DD8E36AFC1A4481B5CB2A2E8F +D6C838DA6F81990F5ED928DC7457501B5C979FF4CD20A830896A460C5DB13D56 +A3B2B5D9B292374A9BF392894DD99FCD6A1E655AB395E839F074D1596488700C +4E2891C8AEEF66568E82A8B826F9A28FF84D4D9BDA21F638EAF96880B4EBE0D8 +081982F34831A03BEE81FC177700C2360D2A48915EC40D5FE85B400E175D5AF1 +067FA0097904FB647757BB44B4042D30D1557BD0F7922D731142FD682139CEB7 +58CA4C8C240A0B86B1888CACC507E24E04020BF1882BD9B4CAECFA97DB24D7F5 +AD64C69454027F198BA35881B94EE9159A2D73E450C3BDAED66B886D6DEBC84B +653E165176228F88993F12A170775A8D7038BDF2FE8DC1F7B98BDC02D1E6686E +9B834F6C0AD90780B17DFE25F0A4E470CBA84E73F2D22BEE09A040F14CFA2C14 +0FDA5A5149B5FAFFE49F55EEFC43831BC43A8326FEE9C7F469C0FC3B000884FA +41DA7318EB57262CB96FC4EC7F16CA07FE1C3BE8C2DBC8A8135953D6DDF20BDF +75A2B6D26074FCE752BD32FB9F5CA797775E8DB9BB9786B469A3CD65A0D9DDDA +C2A166E454A94860EEF5B5C12172DDFC576A03F6E6F8A735FF21A3E9CCB4CAA1 +3064893487697986A42CB5888B2B0A79FA3C74E8187BDDF7BEAB884B70B8D4AA +AC6615745AEB906E08BF831CFDE222F58D02B428D55E9D5A3CDE74E42D8A2CB7 +E1A3A9439B678AD438793ABBEB72B21C58981DAF3EDCE4BB93D95F4A1E943BBC +B3A012DE92FED4F232A3A7D60CE60B605151F9C7C18A5C653E5D6D15E5B49A63 +73E7A339504D0ACC74B8B116EA88C3EBA2CC631AAB29F761E5F062966AD2FD28 +7FFE52FA8A115DBE23E471094FFB3CBAFBDF11B7E9058313F2D069B2CE98A962 +64645738F02A31E2F2AC11628724034ADBCEE012721EBF0A567893411F950410 +B20754A7510D041FFA6144AC9CC46D846B82581F20BBD001D34D9764010824BE +61C30D05E5C5D100A24F1917F01799CF5BC4E50FCECFEA732CB50196825F0E08 +8A1EC868C6D4357857EE2957E081A0E4372E31A8ABEF23C3F2EA0FEE57DE4D08 +61C570175C41AA0C7A3A579ADF593F18B4AE3782D2552E4E0759C32E059EE741 +2D8191E381731769F6648B3581CAF11DAE46471896666F18F02918B0860BDA3C +BD5DE777672447C23C62ACFC2611ED5239D6A266FDA6031EBC5A530C1A2FF7A6 +B4380B9A4C877267854AD1F1677CB5433F28894ADF93D39EAB94541A8D232E08 +22D082D0951A60F62B87DC028714EC74133A4D65F7D0D1296C0E189C4A42AA98 +28E8AE7ECBB9FC8DFABCC6EEB1E9FB06227F90808EF31331CCC5D4C9A6182181 +047902DC9FD0444FB94B60FC74F3B677758088CE6A159D940C5CF682335E756A +8BACF06AD7225D49B0002392C889B0FE2C71311D2596F4903D12FA20BA2FFE25 +A0804B4BC282929BE31E0F46B34532CB5795A65218CFAE21F390792DA67775C7 +B91A2BF4C16DE4F6551DAE3A5827F616BE9040EE6B1008DA2F99A01EF66D697A +6CD1A44E0A15D1F39EA8025E886A68A1E9C334327C7703EE721E497CA924AC90 +7723106D913C5ED4BA4FC743CEA8D0F5172526107DA65775C0B1B77179D336C2 +9B09B608D80B1A1E87CA1A84A833A00D980D919BFF56F6390E9D5B45E9935CF5 +E69D003564462F750F7DCE02DC23CC215A0696B74D8BD3156A392A94F557655E +00BFAA035647568ED66157FACC585E411F7F428569C147DC43F6E4FDE693D0F3 +9917BEFEDF61FB980B85515FF6424824E2D995B05CA1E5D3E8BD8D3281DB7CE4 +E54923E84058FFC0A8A2C491327D0F87CE4C352B724167CEE224DABA3B95757E +4A419594BE4F92E78BA6D35D4C93D31ECC3134B24A45DC32445725BB044F09A3 +AA8C31EFC0A2944ACE2F2CE054CF24DB350FB3C71115518C24BDC0F7E54250AF +9D3378D38480E1CB9029F31570C619A28F065CA4FED5665EDB96712ABEB33B9B +4232C00C1B0215F08D53F7E430887035AC25BEAF06942FD1B6C442253C887AB7 +D694C1A6115C8990B4CAF1E81DD1FDDD6B03C00055BE956BE7FD8A4E1049AE69 +EDA8593CBA8C4A41E046C689FBBF9F1B64E5856A7FB1C61EC815A56DE2A8ED33 +41F370B8203D4E5B19C63AE9E6E0D26F4F3814B5AF48AD30EC9B8402C941FDD9 +722FCAFC638FBB835F83DC77F93D367266FA7DFFFCB567EF82B1695AB4D94D09 +B18AC041811027229DF431F5CB2BBF6ACCE9D500C8F075A74590641C1A607C56 +D2B8624797BCD9C91C3177818691FBB4744EDB6056464A0B95B8D63F7C22309B +82D6126E2057BCC9FE5566D96B7A9B201A09B0D3252A5494C8CA2C8BA8A13C29 +37EF2A882D61DA708C279F663D88A8E2999A0F3B6F98C49901A7631BF7708B67 +54D0B4C52BF4BE0DA0439E6763A7C9D639AD4092E77B13D3510DAE1475C978AC +796F9B2AAD3BFF35C5A3E19B5E2BF704B3BBDF68CE48BA4FA2496D60E58888EA +28AE12D00E9F0816FAC190590A865BB58569A91BF0345D01230ABA361442006D +BA2C90EC2036BBAB79EBAFC3F217DBD5854C519235F9627A1C3C71D21ED38AEF +0BB40F3B86BB9F09A3F309473D8757AB7E638DC1C59A7F9BCD49DE4107A2E54F +422767FB94048987847205584309397F554744690ACFFDF5902FE5DB355930B8 +71863217830DD7A563B0B3A4025ACE75B0E777B4414B62A13B50C54E0E6D47E9 +D43BF769B9411B74E1069BF71BA873B4B8973EC9BA492A5DEA58D267872BB246 +10AA67B143D0E2223FFB4991E583E629413CC894C3FA4869B72D19CE1A0CEC8C +0FF5E5A3EC1FCB7D3C4289813F0D249A11B55104BD60B2A89BEF44CC77CCDA9A +065B8B83B4F4253AA1D535290DCFAA4773452D110D2B3370F9E2FE5432B54A9E +644EB3BA9BFF62347F376839024CD5EF3C5DFD30F412DD5474B7933E6A1AB63B +4B12F2417C72D0543C26A263AEA53E5BAEBD67E23553A72E949DEC556BEB5D09 +C4D7A89B14FE4EC68D0E3E9D65A64B285E53590F418EDA8175113CA375A29930 +DDCF4C71ABB26CEB800C2C2B253AC1F53651C88A56ABE5A74F3B54CB4FFDDB92 +60AD7272BA25EC2F6FB759AA6E1E7964FB55AD09F4EB25DE45FD01833947BD05 +6266AA8ABB7DD792941C7A070FCF3A4636FBF8921C70298D42FE92F079DBA2AD +6149D9CF9EF7264DE6DFCD4429949B15EA90B596340713BD61926DDB2BB23BE8 +F9DE38A31620A817420A245946E551463960A8C5C7295E3B3D6A59BCDF5E472A +40B7A2CDDAA43CD8AAFC411D037142579D11054A903E102DF0D0C7B5BB854DBA +F3F086AF991F7F5D5C730F8F9AF213F25786F3EC0E54530FF912F4876FDE16B6 +A07D0DC4FC46EC6363BCB68B83ACC448B801EC43FDD2F8BE0E93D809FF81E38E +176AE17C67C85FEA58EC95435434C49A950AA955D8B20989C550AB1F1C31B7FF +99422E1F48FB7D6F327C6DBC4695A03903DB275B94CB39386E46579271870A25 +21823E75C377E9D5B46655E8CD8F986372CF8BA846423E26582315A9D19E0BF5 +305C32B2A0EAC3ECB275B1D8BE11A37ADF524944219D94EA2C5DBDA768828B6D +775DA8CDB09E0570E4ADDF462EFD8D3FA3F86B1DEECDFFB699AF6507257C1879 +16FC615868C2D51F03CD57BA38D42995D9164B257441210084DC409B6EE4C119 +0B2E17B0A8D5326DD0010E4A325D5F77BF935693BC90A00A28C7B5F74817DA39 +F47A41E32F4F92AA04D30D810F7B1484EB53AD8CFC8CE8928B570314E0F713F8 +AF127227190F9C16BB73D2A217FF801C391A29095DA5E4974D137A0CAA7DE702 +E20DD4755B1D78739756A5E7EC3542B96AD6844199FFA2F5F2E9C64E2DA4FB2A +ED79869F745C59D235438251BC2E6D26112AAED20E06021D1AB896EE1F1DD2EB +437FBD4A25E42245C5A647493FCC9922E6DD7AF57D5D482921D1CBD6F0F02949 +C27777144751C1E72F4EE2BC343D4AE7A8A8758123B54FB1A026144C643651EF +0907A376945E19A8FC7F98A034832A5820A481B0823F980F59623E0511593FEA +BDE6EFBCC0383242CBD4954027B075B21F10472059A480D6E5ED01C3B07461CE +9810251A5C5643EC7403130C2246E8616CEA25EAC7A0076731FEA8CC43BCE3BE +933FCE61067F5FD402E67E2B9DAD954AA77C5BC86BC5E4BCE2ED676D8D8EC7D0 +ABC5C86D82180B9D5D7451C71B5149B6B67883578DE9909317928C0A92E3205E +F23015400A1763A6FBF67FDE3318AD2696685A1832FC31CF38589EBC7CA1C818 +60D2B2211E04EFCCEA88D9A9082E82951EEB123924A267CB03C48889032F2892 +4227E217FA28F87E01CBF27BF1EA60641A4238258CB7AA355908FE36D90F5CAD +FE992D03A33E47CA9AEBEFDA57793F39DC6A9E85D5B289F6B862B35DBCF82E43 +5CD6A862F6FFAC36478C384C3BDB0148CB1FEDF55969C776E77917635B5A65EB +F2AD351D21CD3822D43289FE8EB0FED58182997097C7E9F4373553AE1CA92083 +EDE3BBE6C3BC7009D15AB5FEC6A59E9FD1BCC7B2099CA15FEF083B9CBF7B890E +CDDDE6BA0AFF306C76500C945DC91BD533FF9A585CEEDEF79238C54E6168001E +26FEB29E523EE501BFA4F60B782B1499B07084C35A2434B4D29D3D8E2C8F945F +A9922443B68D07DF7EAA1F4CDEFFC438B597D8943E231B5216808A85F30EDC81 +9DF5DD22F54A45335B4C2203887475F39D247F0E7347BACFEAF220ED82F9263A +6488E73C1910023E505FDEB143006C1A351D441AC57F9D52D2C6D63D78C75605 +999885676BBBAD56074298E0BFDACBA1830BA58E87F436CC670EE8EB1870154D +72DDBBF3794F8CAAA3F1E11DE29752DD99EAC695838A19BB67A1FA3829B6E0BC +5301610A0351AAA749F456AE31ADD87D6ABADCDD1FB3CE81C3713F48780DF407 +530CB284B2AC709F52EE7AD647DEF9FA4D2A867CCEF728F3D40CF34C28D21527 +10160B3DAFB5FE16AFC9D36C6EC4021FC189005862082BEA60AC72B63AD27D72 +FAF3C2D89DA2648FC4C65104A069212D87144E8533CD86A6D73DC7CD9DBA25CE +7DA53B000266F3871B24663C77723703315C5E4A89DFCDBAB384AE7EB2F455AE +AB191FED406F7F6EC9E5B8276EF5C4CBA041AC7E8BCEC7CAE840154BDCA3232F +15711ABD1E867A434E9787CA0A6D1F197597DA27ED2402CB2D84ED082E8D3A39 +81E6EB270DCA4E7A90E2BEBD3CBB3A2BE3CAB926192D7292CC16845B6399A543 +BCFD224BB52F21352732DB5154FA3442733066CDC3E186D8AA97CD801DFBE43A +116C86889BE198DA88CA978B8C40ACB67E8F7BA499DE68A6FF0DC72C3D00BA1A +B378B39610F15CA026F95ED8155CE3FFFFA2E2FEB352DBE14CEE1669F2387B70 +55B91185FBBED764266215D518716EDA3DFC9E5DB6B148A553E75AE5E38E1CFC +6EF47B314D54CF24BC13856F4F7C976BB91D143DE32FF49BFFC87E17885A1893 +BA1B8E441B08EFC04F7D103C1FFBB665194B3D0920473740C55FB1C50EBCF717 +A2359B687FCEAD65616EE89A68F8D91AFACAA0B238EE4AF0279AF5BE5294C3DE +A7E1F5E6248C0210E7D40683F04B12A933C746ECB517CF94BBCC6E4CF49AC715 +D8005AFECBDFB7A6B417DB8A28F8E9EAF39CEC1CA64DF37A5E66A76C26F721F8 +A63B003A040A62F87DCF61B298F960D510BEFA453F118E59E7DE8CA3DD002EF0 +127EAF733D5C61B5132348D280F84D159809CC71A3C6F7373BBFD8D6EF715D34 +0016DEFF14AA5F960BF1BB9AC304A1823722843547BB4CA5EA4C41C6C2701C8F +7BDC810443F9DF34BA469A3260009B799871BAF8523C8763544DCD0B382D44C5 +F75046AFF85F0B5A3188C2EE786CEEE5496A5AF4BCB0B429CAFC403FB983EFE3 +61FD9F52ADFC38E07A0FD7BACBA530D2E4DAB2592AA9564843E7E2305047F060 +C5FE4243FA8FDF1B5D4F61ACA7850A604FBC6D6970959752695C90F78961B4E2 +C8CFA41082B1A37405AABCEE5BA3DC2B9EA76F486117B84728EC6D8AE6379CCB +402C2AA89078EC992C00D53151E9D82C65643F549A572A20F05107A41BE5AC57 +833F7BBF8C4C5850C1FBDB908D03DD674C4D0ADCFE9C9883304785B4B8792B9F +7325ED107734B276D7DF57991AE7B94FF5664A8B29A0FABAC6434AE218DACCEA +D910D8BE7A6B05F0751F9A6B49626C86CB82D9461E82A63A9A4DBB20FE472415 +598E1470196F65230F7B80B54EBAE48FC308F9C0A6D60143CC3D5576671AC712 +D8F88D6471E5408C44554E768203021BD7214C2234AD81C620ED2A12432CB1F9 +F7CC85EE25AF847626399CAA221DC09190CF963D89E1665C5E2B6F92BB55E3CC +795F201D9279A9D6B2C5E58B87A9C9E3FD107CE0C06AE18F8C86EE27886F4E50 +6E74E0EF1A8B1E75186521796C67111D5B173BB16A5E7330400D99CF9C28211E +FDC800BC1C72B3992892B69995418C5FADEC75B678EB54946857D2B73C430F8B +4453028981B19EA757B0C31F987BFC0BC58D600D8479F876CE7329159338E264 +CD967AB1A90D6B291582A50DCA2EBEE2FB93E5745E9447436C02352AD9526D65 +4D4DE384986A9F8ED388616804CD55212CFF36FA417047B50DA5004F0F96FB66 +4CD3B629D3E432A512A5FA3E277A623CAF1BD955AE49759181C384F15755D7A7 +B9FFA0E6E56017BC9BADF56D96803FEB8AB8FF736ABB902D24DC33942CF1CFD7 +5C86E2459EEA01E09753820DEE67143E5DA718A96E78E95F2D641E97C2046FBB +A597958F2592E03125EB87DE90AEB91788C69AE68FB74F619058604A03CAD4D2 +05B7DF0CF26B197DF8B7F920C2C522094F066B8BD6E376E34253616C6D646C75 +992E1D9BF781A8896093D10A0F4332E8682C25C7746A7BDF9B391587B750F8C8 +1C40EAA9F01DAB6389150F7E163FCCC43E893FD6943D0EAFE9516AF77EA4BF02 +589B476E19FE361FE6870EF221111E04688B3738359B2328C677B547BF90AAEF +EC9C6992055CB8E1E85514220D44CB3AA27CE82A26118AAF91B2537A63C08B50 +85EA399F24FC229392BCC488A6564E3D33A0B38F6AA3AC0ACF343393213DA905 +D7EB3AF4B12FAC6A5BDF523A4C5278F3B8EC20DD03E06E1C88D21181918D3BBF +31C5021F8662BCC3A79F551D8A2D968B3B293D6829EECA6331F745DDC3EBCCEB +D481C0EE29F26F5DD38A154170DF9F88EFE69CB416CB877ACE6E24A18BF3060F +DAF88F1A44102DB04EB64950F21BD4925E20E1F9A590854D1281775B7496766F +51EE65ADD415463F9DF56DC7FA41F0B4A41C86FE75F861AB2B180B7DF7BEFB32 +65C5ABCB6A26B3564EC99FF35D0F14906A341022FF2636AE7D1EAB6C0DFE596C +02B4E69CECD61D93762967F71B4B22F252678E0EFE6C26F5142BF009DA811483 +90947E86BA77005B554A969C3A9E57704CCC461A9E9FAB672993214F5EA3F0DD +6EF77D7A2CFD101B1CE615DC1480BC756D110A8ACA2369797B9A6CD1B65F1DF5 +FC989897A0858007E9E8E4915C05A97C9ABC5A52C0B5FF6E067225D7766B6DCE +4561C80D104AA1629D6BC7F0B9ECCBB1EAE17AF059F51BB4C0340C7B7CF387C5 +20B90941C81C0A119AFDB2ADAD221FC1503C1AAF59C9419831D92330768FD49A +665A0BCA040158B21C8FBFA6BA0287BC1B4E81FDF97AB0317CB3663600909DD7 +38F8DE02BB8A47E4DA2E95D808DF9E00BD81196FE2557E84759702C983A64CC7 +8AA5C4BA1DC8DE80762D297CCA604ED82280BAFF196AAEEF94E904A9EA7A7E29 +BB8624583C10ECAEA329676BCED76000EA04CA1DE10985F18B2E4788D77CA957 +AEB8C58E6246A137C6BC4653C4973DAE63EAA24489388515D06D1D51E741D895 +F9C6A54329B1866F75A462FCC1065C15BC715BCCA1C84098AB452F2E83CA3872 +E151AE6FF78D1BD4FBC62E51BDB6DC5A433229A0686B99E8F3846A0579F85689 +CEFDE559B16D8EBB79C8D20FAC90C6FD4DC53A7B7FA9E2CF7C92DB769AEE76B2 +BD4CC20CD42575104EE1FA6A3F95FFF43A5C4F23F7E86B690901CD13DFDB157B +6AACC0E9DA12D854BF28B4CE42B7995C4400462244A8F5C53C4E5C868F32726C +CD03D90A9C618ABA248CECA7F2D34171747E2A01FF43D7B95BFE7364596F7A35 +22CC94179DE8B5352F3476BA0E2D488DB58019E165B381F6981446E5C18FEB50 +6825C1D42A08DA8440D9F20044717083F84960ED6C48371DF56E33355E2E60AB +D3A9FBDD1656769B9AF88D13D4783C5D54F85DD21D68EC87E2B922DDB386AE9C +4F392FA86BED66B85C90BA25FF27CE37687A55850CC4E9F29A24330D3A7685B4 +36D4AF185BD7A62B82DAE0BC4E33E20A6FC5D24AD14FC6E7B59EFD3DB16B0B64 +E4AB3B1DAEA4F3F52F9B7415791CFC39522A6AA1F702F826CC438C188680824B +9D3F443B69AC739DE6DB1416E48F023DB3F75BB3C330297BC82903B078A76F7F +FBB8CE1348D537A4E62C3C13FD66FE6AB9CD528B994AC67A32076FA9AFAF6ED7 +E02CE7FBE39B43C8F967FA62EB480B6A248FFB0904CDA3E4A715D22B9A191426 +2D92504213AB7F3CA8957FDEA3C0B333C33F660BF9A0E600DA95B8B7EF42216D +EDF8C46232E6078F69FD05D2F05ECCE0C41648BB873157FF9365167B92C5B02D +5BCBAE8A072ED198B75001C40F6A3FFF3474D634D338835B3B74777F34166F6C +24E0D0104449BE54EEBE6640CC5ABE956F6495BC5CC18EA155470E8F99A1DE86 +E30189CA527138E454CAD4B222028F27768EFC0B699A8A7E3D9DEA10957B3F76 +6EE106C676DE7CB1ADC74C3B455B3C3E0F7DCBFA38F65FF000BACC1DD062E110 +2A5411BBAD94AAB3643547DB709A5A3181F85BEFC0F0F81B9BCAD0DC1E14A7C9 +CAFB49EE08D72EE6DA29D24CAEC74F8D26979149583EB32BB5C045E0E6D983B0 +D15DA90578918DA11F587B8102EC1725641FA323DB7B042AA7772F51C9CD8BB5 +3E7452BB6E73C440D0B7907CFB075584AD11CCCE6D24741C71165918A5B82FA4 +1ED46D3C8B4F2988692936D04905E7686DF03F80B2F61D96B51988841F50DF6B +C519A07703D1A1C3C70A20269686FF5111CE9913B6BD2D65629A07BCC562A4E8 +3A4656AB5463417A5F2A3B07B212E29F77781469AF4537CA5D690A655D5DA181 +6445F97B1F16A08250185C6D5103BBB132E90ABBAE2CB37B82DFDA683854D5F2 +D3292783E83936B36B332A4393000533D924CBA16D3EE3B62C70759EC05FD987 +0C97076ECCD62C61CD2F5F2081A71ADA302C1D3F46A7DAB70834E98A1442B179 +415794662802DA0AFF54916C2D4870F39D0E703E880D1AFD4E2610E2501BBA80 +58109A9E707A282434D1AD221C52B1BFFC8F3DCF0B32936075EFAC864CC08DB8 +A90C9C68361DB7FD59B97050D6EE96FB83DB39297A5857AD41B1B7B32E3B440D +EBD668BD8A412295D325215271A544FFF91736D25392C2000B379B3093252DC4 +48239915EB77272C3F95B43665CB97DD293171F50ABE506E8488FA7105D8A47B +83435473CD6EBAF2292A5725169D48DF08E96F5FC3EBAD5848F9E6AEF5EF20D7 +8DE44C6C01CC1B4CB16A94024BBE96DF9FFC3E1E4DF8435E64AE6FD246F83EE2 +0298F1D7C1390FE13B974ADDE27CD95818DB908B8F049C7CA096069A751D1ADC +43C74BEAFB51B7823BEB325E10AC74CD5A907045CFF330356DA96A2C5642145C +0DC902847A1C9D581A404E7602EBE4D92A4E7C0CC8FD0504729E78C37BC2102D +16B2E4990BBC7B163729B18F533E24D420F8F29598C1B48BD362E49209D5FEE1 +6159864E0DE73B45B61386751408764D6716FD78E1696BC3458AC12275D4D065 +1E075EC213ADE4FC53761B52E0B53BB8D62848FDB790021CCF04CB8A57964D5D +58CCEE948B805403A784DE5F63E4F7A2909A9E5B26F25B00F335F20CEE97857F +5860D68E602B8AECBA14EEC24BB26DEF1183203685A0371E468D10ECDE079AB8 +464EE27DA225D3EE008BD55C8D042B4815945F34E7C5597D536D80B7958E7B97 +BB575430065E1BD8825AFEF88369EE338DA180866C8F100B4806FC9794855879 +D28AE203223A92A941A83028F0873D9B6C28A58241841596B590C547455ED5D1 +63603A6E637A4FE5DE7FC3876B869794839B9EB98E20D4212ABAA68E43179A94 +6A35CF5AD147B5148F20045F5BF11946C38E76B4DF741BAE8663E57C030D7D21 +3DB928111BE66557F19C3BE66F6F65A1AAB66D085EC5767F057D28D540BD6FEA +6CF387D5A22DF4977ACBB68B31FC401C6EF60E1AA46926AD3CD20C4C0602F15A +4367D6CF5DC457C43218C54A82071C8901ECF549B74125A9A11CB5A8D3D5C980 +24FA0D91E3CB11913D36165F25878A8E1894DFA510EE186664FF08B5BADA9E7F +8153850AAFA5D945ABD6415DE29194C72AE4B71D40734B206C447AF549A6404A +47A9B79CFC8637CFA69E5CB0F52766EB039D867D2CD3B7CD1F723E50FB21D671 +0A82BCAC35481AD72268CE45458EEED3454F9C1A1C82A664CC14417285FAB805 +8B9E83AA241C62F98E1CEB505189F9E8AA35F3DAB3B019BC35455DFCE8EF5A94 +FD6C54946DE4BE0D747FB6124009145BB5D2C8336745F39C66E2ABFCD7A83724 +1C1B1D501CBAC3D460E9C75052F660AE44E9DD1061AD361535F4EEAD65741B12 +9FCEC9B52A03CD06AD16E49B27DB27F7C3C1DB323926DCE761EBD7F4DCAA3DFA +5DE34AF388FF76100053EB35B9764EC8B7CF68176A7181B5FE6F80910D33877A +78F9D258F97FB5A604FD7101EAEE89A2865731C189D8AAB00862744A8052FB1B +55C957EA1FAFF8AC09376CDA3622D1E67F65D05F11A0F3912FE2572AD3F8B612 +EA2849D8699B206E1716B1073220F90D434E9F5551D00D8126C2A8481081D84E +D14080F6DADB7F4D0FA17A518859BCA1908746DA83E5D14636A6148206428DDB +BA89F9D2D1C718004D98010A5C56DBDA82A289CFE6BE8B3E37D704EB42D6E43B +FD8CAE6C85302DC1C98C6B14B36A7CA4D2FF608618AFB2B4AAA8DE89A80A372D +F1FE7A99F7F4AF835B305DFD802E3BD0A63C169FE9877E43C06A892C3B6B468A +C9C92B4E3241197D11B60F5EC49FF4C4C72E091C5A5966289FDD4ABBADD5D3D7 +E475B4934BB5322956A35C50EA88FFA3DABB7376E54E9D8899A22228C523F4C8 +CC16ABF36CFE30978D0396E85EC3056152A492CDF3C3A19F1633F32B6B2523FE +3229F9942CAFBBDD9B0B4F4083FDDF64701E859D45F35E20C555F99B7D533012 +E7D050658CDCB8498BCBB199A4D96C5333BDB77E4D0BB5D17B2D211C0217BEBA +0A423B678C64F1D7CC6E85400FACB0B29E197DA781AA197E95850C66C38D1CF9 +0A0235B74BDE5FDA26125ABFB3E930C57FE381D28BCB91269277336C53186E8F +19E89349BC4E1D7DB4A236FCCE813F2A01D850B6DE6054E882EE083A7DEDB9D5 +1C33025CC5B30B0933923A6DD546F1685FF54EAD3D32B612A7C8A8E979355400 +0A8756BF2F57887B238020D2B0A417852ABF09D9A0D892EE58B97868E91174F4 +07B40FA12845EF4BF69A8DFB730D75550B6BEE3238AECD48A5BE8BFB14547D6E +481CA7908F373EDE86F1877F35C597D2110C84A6A4B3E64B110E6CD163A3B96A +9FCD6243509CFEE665465BE95DD660FB171362B3551FF735D58DF86D94F961D4 +83D7ACA8575F69DB6AE6EEDD7EF8BDF160CEB55497C9ABF3DB42ACBABBC45100 +E10405D396CB9DAB8DF65E8601A46980DF746D48DD7FCBAF9E2415D414DCC51A +A08E4CE5D843EF553AD33118A6D0A64B3A911D1306324F885634D8A65E6F357F +B61E962289442E3DFD5DA068AE74F3AB692178A9D80130F44803D138396F36AA +DC1F95E77E82CA2393114ABDA11F18AA26820C7EFB2DF984E0662352F8063E9F +C5C9C81F7B224142E84C6946335518EA6550F0DF9C7C63FA555F28D4700623C7 +DC1662EB3410AB95E31F7B0A0AF8CDF8EDA9E3D382BB5EF6050E1B96D1D4C3AD +1C93A482D96185D413572CB03765C37D50F5195D3ED8FC61D143A7D72D872ECC +CE1D8D9CA0A9FF3BDB64B7773B9B49714136DEC95BCBD3C1CCB8FF86770D9C9C +86B7D7B3EEDA7B21ABDFB925FF159C7A4C2986DF7AFDF0445EA3E09876238680 +A5C83B57B27397190670F954F5336647E13CDF51686E3C03D9111182DBFCB335 +D97E43367A867CE0F105C88488379E88D4314DB435F050420C025ED915C881C4 +F16011A0AAE1D32475488D66B2762AB40656426576524BE5E7720D9D1984D95E +5B64D9E66FB960BDB84316AE17175A31BE184F823D1CEC6146F9E666284F8772 +F8E6B1AAA77BAB8DC708FB53BD0965C03771365AE8A8B4A610416683CDC421B9 +F950D5C760CB11D80F0B83410B6FC36957D35DE9A6D9176B95A91C9E4C3EED62 +D961C39D26A253AA5A2A74B9C528FFAE71450146F0CD2065E2D7C06742806620 +3AAD0B1C486CC62FA28D131392392DDBA187B24F60BF38C89F98A15B28C2B872 +F3AA742645DFA0B39588AA9EA323F73C5760BC6F3A9EE18E9E640C4322040406 +AC90F9089FD2A2F41E85D2FA3117458532A9A9182B9D33471598F1771E3D94CF +D00DE95A7370F76FEF4F15DDA8EC789BDF875D042957357B8550EF41EB96EF75 +F2736D4738D6B9A209D26868ED31DFB81A0F0B482C1120DA5D02B10C52AFB638 +8E8584EC145EB8CB160336FB56C0E6CDD54608D28A3DC196C96D2C14157F4513 +FFA37E4AEE25CD0CBA91B1A79FB0AD70E229FDD532942C01774CF4E8821186DF +83C68BC3FCA64AAB08DB3630477E028CE027B1E7718D78C010C4BC8CF6057506 +8FD212FAB5D0C9E343A0934F46F0FF6B59B7FF2F93F5A991D3B9457150114715 +802C7AC907B16A21C11212DBC362C10D01A1A10CC0B9756974EF0FA7222A1C52 +4DE1DD724AA70EB1B9C02BC69E066C0CC821F2D67FFBDEC0322B7454FEE52CC6 +5DF564F57DBB788FBC2470C36E379518FAF36BF07045D69C641300FEC69BBFFC +DFA900413DC325DCC7A5991BAF8004032F692DEB5CAE7E414BEDFC23E82924B6 +684D4C13856793AB5757EF70AF2E6B240DEFCC65E50238D77745FBD27B53FFA5 +F0277144EF0FA335DDF914BF90F63F16B8BBF1669E512019CBB85DD9520940BA +7D22EE89A9CA2D30BEC0090B431B40D7FB2005A0ABA8278EB74EE9C194473FF4 +9372753873F5584AA6CE0F353225A17D46FFE939A01E3C552A5A8A5C3328F315 +9E666A7351E84D0B48294F98928554FC391EE42B18BD16683AAE955C5F76DE18 +B429CA14DF7939BBC6889DDFE254FB7762C2C83875AD984AA3CB358989C64E56 +427FEEB273273DF16D1A267FBDA8EBFD56E08DBF41557518086037107F01113E +ADA7E152839EB08300C96779A2AFAE943E30B4B31AEE34B4CA851920B387910B +2F26B2B4BB5B5A3B72512F65CAF4095E01A87E502BCF8100B00CD533C7577E44 +E52248DAF2B66DEA839EBCD37E14575626BE17DA59FD9FF97FD0DF4686BF448D +63D9937E404C53ED366D2CE36D64EE6A6E1930A0AF95B0B192FC33F04757D9C8 +7103DBBF0B1DEB49F38C7FC7CCAF9AE4109BD4BDB97754D10E860DD7DF420B8E +2389FC919B6C381E6E0E03020158985EC49ABDBFD726809EF7F4A1835BC08AC9 +94CCCC2BF0E215EB64F095A3CB407B6766AF0919B9BDB13F833BD3F9FE3CBA2F +F8C495389E2E09BBF2DB9FDD57BC9DAF285379A79C77A05770715A7643D8A207 +F0BFE40E995980A3F9933C0A9E1A3BF5AA5EC74752D36F1D5BF04ABB67790307 +FE3245C738CD2CE3E0BC7D1016A597D385201BF0B903E1524670053286799C2D +15733637A45BF71E77B883832C2B2B2E85EF775763D329618C1E2623A9F0642D +DDE7F0B3F1DDB2FF1381B73CB7D605B6655285A6B0BD8C73BE872CDF6388F43D +3455C9D6F70B7D1BF9C329D344C3D32423F43E23EC950F683A6BFB9FDA1A25B9 +BAD1F6758F3207B69E17A870ABD0D353425A964ED374706E1D2CE029EA4DBDB1 +70D1052B79767C00CE74A16818E757B2471F4B7C66C37C075DB29BBDC0CC6977 +CD0B02E72B8D91C7186E75AA38DA53BB1B089F05A189B080705050ADA97D3945 +C480621ACE301614EC21D3FB065EF7D724E910D651DACEEC1DCF51850EE74AD5 +759E3AF3A81C418BA7347B633F1C285A47217F6B2B9B9295AFD32DEF6E9BAB70 +51A8363EE9ECEF904536F9B8899C122C62BEB13C616CCDFAF5170E2E987C3446 +267D2CEFD8BC432268AC9459529676FC5F93305AF1461524485AF2960A04B6AC +AA00BAEF0907F36DACB79DB3003EA756178E2E011B2E1DF680BD329C737CC800 +5E3E63C17D6571F3B22B69418CFED6468E9E8D0C7D52670D319E2D86BDF834A4 +FFDE583B1F7B209DD4A85E6F7A258C663B7386D882453BF13F1085700A9CDADA +628B1CC2E69A792BB40CD9C98D7AF768B0F428187524F864AD3E89E434C558FF +8BBC5044249EB21E71E40986F6BD7BE3F611F11339CBFDB08B5CB04DD94B4C39 +4D87C898209D827750DA7A51C99AAC44543ACFE9270CF62FEFA52B5B29C9D73B +2DD0E3C2196344ECE080D24B044F0E63B1F969D77FB458F0D6397510C7759310 +8B0645BDAAC6E10005DF53F59C0F1988B5D128EE05FA3D1B72B097D96681A771 +13A9D16FA21AC74357964B5D6E55497193865042D02092A10210C880DC2B0281 +143DB5921DE8EAC56ADBEFE14F4DB0A8CA6E817B99187C0A8ABA1C54136F4D80 +C217E0E6AB100CC1A7F33B33ED31BB6007A90DAD22155E9BA0B33628DB429D39 +C0B0B9E6331B93C0751E2C7B079D576BF55D69F83936795E9F3652B7A139D5D6 +D85E73CC6A76FA15B217748B3A7A58C961E40D0243F26D173B8F474869437DD8 +EAA03B88809FAC7DC3706638E79BD627C61716B4862BD5DA5D6BE4E09D835B47 +71249BC09203F5992A068FA4F242ACF5D4033789A80D71091C550025D9A66D5E +ED45FB3D9626BF0D35DA8870A18D3A51AE519627A55E220E113B38605614028E +351B70C4BA6DD84A6524341471D0857061A33A0425189A398923A095301E159B +CD45188C646CEF5FC8A3387B96D736F49A14A9CAD089954EFC96FBC1D5AAF56A +61C9CE117262033B2A9FE5BC0176C6430584F8756A80BFFC2F1ADB3D89FC39E9 +8752FA3079BAA57B5D45B71C95F07805D1EE7642D31C755A902AAF198CAC2780 +BDA66B52594D58830459793B16BFBD2FA49037C1BB70FECDEC91D072D7BCA535 +3F6978C20801F0895135E5F2262C694D6A9CF77110A90486973ADA5DCE514A45 +28185DA7DC9E11A5F142E631B1E0D517D7362C12D1A9C69A0347A7F3F6F899F1 +7826E7514CA68BB67B6D0D677D5837546DEF9641C57ACFFAD580638684866B40 +F6F305F8ABE2D10A5148473A1D647DDED3F2C87BEEC81F6F3EEC3AF8DA46201C +BD48701E38BC5E6CF588DFD010CBA45FF523A658FF23EAD45DEDB7BB3E971F57 +AA1507E5E5795384CF5326C49492702B44C3AC7ADB2BA6B75F4FA1118F6B71F4 +406F3250F2E2BE1F2669BB1AB8255415F4AC4ED7EA1B02F3A2747480412BB15B +8FCEF40A84FEBAE4CE559D17F2D2D254BE78AA1A08BF4CCB81A988D18AB629F7 +9FFE1086AA6CEDC80064DE7EB52EA9BB731B0ABF3A10815D649BBA5659F4A8F4 +991FAB4B924B15096882B87105DF33F3684E75018CAB88528ECA243E4B1F0627 +6BFDE587AE6D126732E70B9BE26B707B155402339368CDB505F28E1C1E3ABAE9 +3F3B6995AE7D3BB2D0411126A1CB7938C6FD8A3844CA670D00F44475E579EF34 +77068AA4C4500BE72386A8FC6F40FCEE796450CB3612F2A32E2DF65980FB7239 +7649D97AB49D3F6830A667A8F41B989CDC9E1BCCDFCB37162A1EEDA4113941C0 +376D8451E0EFBD87D79DE53B51E0DC25E216432464EED9CCA8051803B5F08EEB +16E2477037165809512B0F3AFE270D22EFA230C26174F1D6177AA594F16B434F +C3AE8803B189F91EF2724BDE31AD379638D201A9AFDE3CCD536617534C18CD90 +7C7BDFCF04393AE51DE125735AEAAF881194AA7D9781B0A49948B8D5ACA4549C +D1F9491570D763923658CA9A9493B2B71A638164DBA3ABEE88D8B8C8A309C6A4 +F597ED90D78F8B30537DF7265229B9D4A3CBB741496F12C952453B539CDD7898 +D2B4C0A282950F055E49C6CBD9F219A3A03587172B4409DA40B3273032FCFFD4 +4CA28F3954D3D75BE98CFF32DE14CD05E38A3D2E4942216167B05A2579E0E360 +ACC29884E9B442630EEF3938F3102CA18C31042807FE3131464C7112624B49DF +94F70E771CE5EF9B8021070C9E13B64AEC8500A4E55A1980BBEEFEB68D18472A +C641458F8A9F99BE6FEFF592A18309C30B782B72299445DCE6291D07ED95A80D +5D2A6A3737C6BC2AB3B749036F557489CB325FAB32C25FC1689B6D5C420B4AF8 +8264E88EF1254ACDABCD0CB2A9E22A42E1C757C98A2B887E86CC908D86BA0D7D +702C2811FE705E10406A110968C51923F21F487E310290B4CA4FDFE4D91B6343 +C05031669E0699AB8BDD5C52523B63A4CE33C01896931A6F9D7B10D25F203CE5 +2CEE5370BB39CF517818001A3888E1D4F811BE5F5C532BE0EC7571C399F493E4 +107D33B485F45D7F30258AFE57A340A98C1550BEB342052AC114814B92592F73 +41F54EB09AEF20388BAA1CECBEC4A11437D1289554B533E9E1F736D363816989 +208599041717B35BA674BA94DF52CF4BF9300766AD621C9E9F41609AE6200240 +C0C0B3D063D97A054E7C99B1F66B5CE6612084B2AF185A721815AEC22789F7CA +26984B6F7ECBEF53CA6ED1668E88613A8D7C4C42B434E59633783A4D34E724CE +BE311BEF3A88651B1B5E824A8964AE35DD946C3A189F4FD8C4C68BB62F835BBD +268113C5D3F968B63CE1C50F5F2D4E61FFB311 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +{restore}if +%%EndFont +%%BeginFont: CMTT10 +%!PS-AdobeFont-1.0: CMTT10 003.002 +%%Title: CMTT10 +%Version: 003.002 +%%CreationDate: Mon Jul 13 16:17:00 2009 +%%Creator: David M. Jones +%Copyright: Copyright (c) 1997, 2009 American Mathematical Society +%Copyright: (<http://www.ams.org>), with Reserved Font Name CMTT10. +% This Font Software is licensed under the SIL Open Font License, Version 1.1. +% This license is in the accompanying file OFL.txt, and is also +% available with a FAQ at: http://scripts.sil.org/OFL. +%%EndComments +FontDirectory/CMTT10 known{/CMTT10 findfont dup/UniqueID known{dup +/UniqueID get 5000832 eq exch/FontType get 1 eq and}{pop false}ifelse +{save true}{false}ifelse}{false}ifelse +11 dict begin +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def +/FontName /CMTT10 def +/FontBBox {-4 -233 537 696 }readonly def +/UniqueID 5000832 def +/PaintType 0 def +/FontInfo 9 dict dup begin +/version (003.002) readonly def +/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMTT10.) readonly def +/FullName (CMTT10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch true def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +end readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 34 /quotedbl put +dup 35 /numbersign put +dup 36 /dollar put +dup 39 /quoteright put +dup 40 /parenleft put +dup 41 /parenright put +dup 45 /hyphen put +dup 46 /period put +dup 47 /slash put +dup 48 /zero put +dup 49 /one put +dup 50 /two put +dup 53 /five put +dup 56 /eight put +dup 57 /nine put +dup 58 /colon put +dup 59 /semicolon put +dup 60 /less put +dup 61 /equal put +dup 64 /at put +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 72 /H put +dup 73 /I put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 83 /S put +dup 84 /T put +dup 86 /V put +dup 87 /W put +dup 88 /X put +dup 89 /Y put +dup 91 /bracketleft put +dup 92 /backslash put +dup 93 /bracketright put +dup 95 /underscore put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 122 /z put +dup 123 /braceleft put +dup 124 /bar put +dup 125 /braceright put +readonly def +currentdict end +currentfile eexec +D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA +0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 +51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 +7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 +E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 +0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 +C01924195A181D03F5054A93B71E5065F8D92FE23794DDF2E5ECEBA191DB82B3 +7A69521B0C4D40495B5D9CE7A3AF33D17EE69979B82B715BAD8A5904C5DE0260 +6C15950CCF6E188A0CDF841EB68E5A2F88253E382140F87C87E55C9EA93B8C89 +14A36CDF630D6BE7CD36DBDCE22B21778E8648B97B7EC6742EB5114BDF0454B0 +0EA7B1FE236C84C0E5308C871F67B973892890557AA12E00B2C20C71F516C397 +3F3BBD14A1D0149CA064391056E45E9470FC7F6F556ABC82653B3C8049AB5CF4 +BA83C8F2158C236B2FFD4208846013BAF4165E8BB8D334C8FF2E8D74AF5DAB2F +D44788869B08399421AAA900ECC6A2D594641C121660D4B5F512938994C18DD0 +FCD9B008F68F0351D21ED735B2740CB1E0C1CCD25EB548C35B844601D98828DB +556F71D07E081A593FF12DAF83676492A0FFE16E95717A07082B43A966C1EE8F +8A59E1255E1705C43A23CF29A5E4A6547C93F1680A870EE7BAD8CF74D838CD5E +F806911D8FE4262ED8E7F5BC58B92C9C6D74F8AD45FBB021EC7E97393018B9DB +B1B84E7B243ADB05ADD3F1DB3692ADC5D47FEC7DF93080669E63281F1576B673 +125EDF08016664BE73364F65389F7C3B66623AD1754ECBEF9E5CE6948D933787 +A5674279ACB2EBECD3B4E6361419AB32028A27670C9F3E18B746A10B00AF6D77 +4EC00E3BE521C02A99AE5BAA98F793EB1228952BE67934B91472E01AF7B816BC +56D7F19F631A1927846D800C107B1E9CBFF9D2DD513B4A8CE2E0DFD77B1ED178 +E43FA7052765E9FAF89989D490D8FEF6C536EC0D4AE27A74F474B98DA9E6B92F +15E063DB260571979A5DE2423920CE1F59F56EB11E00E3BB9D466A8263E1E385 +2014BEFDA8D1EA3EDA04BE32AEE6CD15C5C010A1DF7F705A2C0C18E87C8DCCE9 +05D9163181CBA56C0FAC8C06A2990554C8E759D076B01BBEADE3B5FB8B551390 +6C8E4A2A1C6E7D9C708614626F3770C0AB7DD2027469C77975C27576065862AD +04E5E50CEBE907E3E991FA0C627302C0E207B4D5992BEBAB5853AD1C0D271728 +C76F40A79392ACCA7358F948AC65DC823CFDA59E1FF69CEBB6B7EC3CF21669E4 +70D999508F9C49E2D9F8818CA53C977D93E15FBBBAF75B1E84F0BA62BCC4BAFA +4EEC82D804C8A8C0210F3E5E258BB1F6921AF02BA9861BAD5C3D5FC8CEFABA8A +A607E547B802096F7AEB09FBA99C83C9A494B94408DD607CA6561A6E6660C473 +62CF8D35F31D052F6C6C8138A8E1430CBA7EA6973D6D510C1A06B3FBD79D9364 +240C1A00272DA44B89A9FE8D5BF36DC1B5EBB4A78ADBE9C5EDB485F093D9517D +69E1AC9A8E6C9D7C324E3797CFEAD9A18E82E03F69B2CED7D5DDCD1A218BF2E2 +ED2293AE999FE2A4B5213A10083EE0407BCF8007670B8C737EAB30311C868D84 +121149ACB4A27F3ED6C0C181C98AAAF51B105F264B5672D7F745131ABAB5BEA4 +0C9B43C0DD9116D6DC61F90BE72018F290D26D5E9D341055CAF09C9F45333CDB +D45B7954271767F638EEC499F7B53C2CC5774EA7A7F024C4CABFB93D9CB1856A +0C671A4ECA7C62EA5242648A84E7F3AFB9547A0AFC29593CFCE6D8B873A78157 +D337CABD291431C0A2CE1F37E0CD7340567AC206FF98E4B5A6410F70F750451C +550EFB54AA259A1B236CA9CB730D2CEF125EC65D959441F7CC9768F777B44844 +CC9842A307C72B740680ACBBF6AA35FA7A94825069BF7696ED81A371A9E5475A +9D997F2DFAD339AADF797F7E03E654234455AC3D17702A420EE0A597BA31BDE4 +FEB8DBA7C61D311CC90441A620164DC22DC2D373973EF84CC553453AB1B3337F +7B39983B8DFFB3A9425F119B45C1CD37A76F905777B3154CA6200792F1759D06 +E017890F4041A385F2238E3C48B6C8EE6F5258463FDBFF7AC762F6C4363926D6 +50F004D473B7B7F73CA686B559C2885F1AA761653C727A77D73431E9D110E76A +2E55C68CD50F43997C9B2FC4710F8C8540909829E215678E63BB8363C4B8AF05 +9986102BB36580D9CA95CD216B7C321822CB41B2E0422CD077F3B55E0246FDB2 +44D5976F67296B5B0BE4B06F6E43535C21164E6C5089C3E9BA2D6B30888C57DE +49DC8D9D46C0D5EDC47ACF2C03B72DE3B69512508539019B759280BABEA12BC9 +385308A0395C4CD33182A10A5A229743379C2075D82D8BFCE4A66E1AA087A091 +8F5372684FA5037D1B92D50CD9CB4F50AD4F8EE7D51F1C9E63C721CB5B9BD011 +6F0A8DD4FDCD2B008F223A1036D90F0F3B252487DE7898F9AFBB3A9D9CD49E0C +EF4ADAD5155A98D2125ED5A3D3907F67301649519419F33CD942E8DDEAC1BDA0 +E90C431B198F646766A8FA9F8D1561B57E126EF604838C0C1966655CF31FB7EB +C8CCC434FC1C96046D38203E1791EC824A3D7AED85C029288D4608CA7668A2BE +484C99639F121845B22EEFCE0A3B808261921AA042AE19E641769E91277BEC29 +4594082CCB3058F90FAC4A700A8A827ACA00FCF574ABC8EB7DBCECD97F2B22C0 +0AA19E8739B81AF8C6F621D69B8E6F29BAE233FBA655A0AF5BDFD7F5C6B9167C +6BC7AB693D45EF2AD999F5DA3CEFA39BA48A17EE6D9F2C4DAB91AE3F0044DC3F +5D5506CE4675AA928B0092D6F173644F91295216D8BBB14CDDE0AD524A4D545C +1B5E284A3BF0396664081CFB4F186A84A0D24D61E82F4767C1E55A0642720CF3 +909FA1AB8EAB78030B59BEA067DEDBD2F1D0340E790AB2777DB18248521934A8 +BB38A58B7F633DEA4291B0D5D13E9A882C974697CC6D3B49E030C94EA29B5506 +CC29C44D01B4751B453A46A9F6BF3BF135AE87A4CE232AF57B66578310DE41E0 +2A6AC422117F1963C4D7CC306BD25A6E724E51921779F22F029733122E23E2F0 +CB340008813ABB104380C80A492B3FC6D0BB07CB8D8409E9576891EF6E5C9D08 +EB8320DFA31BAFFBD336D0C2BBC3D3B2D30368B9860768FC080D30569C7F7811 +0EBEDA2962476113625EEB555490B8CE4C5F99D74ED10F738C61854CFF8B41C6 +9402E56BE8856144A1A05D0B05F4CB7EF728B2F4F5A439F18C3B68CEFA41E59A +D8308ADC92EC1289DC84CF48D2CDEFF509A145BF945E1E00D552D329EBD2A7C4 +21D58082CC8FA790E981F4AC8EAB99950678FD3A7DA3DF13778681B208DD71A0 +7C3CBD0664B37C9EDC6B601D79A2C51FB54DAEE849F93209793849104E722D3F +52DFAF7047EEEDDFE744787A5801E4AC2C3D58EC5DDC15FCEE03990C53B0C57A +FC54F125A04C8E4A0ADAA725808C587E7DAFB9F784FA2875689979D316DC22BD +AA36B306A1ABCF907B63C6476737B746099973CAEA8C1E2C5C41F27E0F7DE8D7 +F0D942E34E92F43FE902653D4D2EBB6F3B9F7928B1550A82AF234D45D028F429 +067652BD3D391BF423AE72B9CB1E8D91E898161BE3A7849D456A861A2046711E +E934DC59442AE7D81661CE8EF727D8D7DDC0270E937E40F896AEAE6171661431 +C1025C53172F9D366834BA0054FBFD84503FBAE328B6FDEA180F8EA35B1DA937 +5CC3B8F00C206908C2FFFFA6A7AC6915D15EA44BDCF29E2BFCFD4A849535F19B +0D307C696BE8205C7D84B9C77F02EF27D911056EDBB4080E4D3ED72788666CAD +CD91B0ECE27A177DB23320A7FA9C31408B4D02D2A4B1CC6DDE1A6CAC3D8EC1EC +2226EC98E51046D1EC26FA20EE62D24747D83CF4941DCE5CCEEC0DBE387149CD +E05B19FFCAFC0D117F9A3E60DCD4C815228D98EF95EB559AD0ACC0D50FFDF714 +56C3C812EA5ADBB013BBD956A7C4CC0ED7D3E25D5C9AF5E626F18297F75D4957 +F5B0B33379114B903FE98BCF35C3FF76FEE1D9AEB711F2962276531F7380EE3F +E368720E0292A170A15C5539B1FC7BB954EE2624B504CB8C805B8D31AC38307F +0513606F09211AE64DAC447693B2A0AD15E9A64C34F5A911ECD0ABCA90E9791D +67C6BD202B0858EF96E7722305B8AC02B01AB1706CC6AE875A8DDD15EE349046 +EAA65005E7866B506EDFB7A5A2AFD5C9E9DCC821A79EE9C1EA2C7BBA32A40BC7 +CEC26DB1AC473C8C3960ACEC581B37D6569E8C8C42950BAB7930B65E1570E3F8 +9A7FA719F1DCFDA45A3BF2AAB32C9A93BA3552608A61C623DE59BCB346E87EF5 +9CF025A87803161221C5C1C6F6B3403712C76E9D755C7BD68D7F2DC03C14CDF0 +C1BBED1D648B905B4B17037B7263C1EA7A7F06FAAC4E09E08483A8D714C19861 +327CD9C32DDF850302DD6DDE24912D00C22ECDF3CDFB18FA831A41A7488EC203 +F564CFE30D506F0829A96D35A7E09C3DCD107D589B627A15B55C5D6649126BEC +60B88C55ECCBB4E680265D9EAB4CE22965D3B1AF759B01ACB0D0E6C92B6B4EFD +A81E6A648708979487FC591CF09631310D46891423F4EC159A73E30D8DD147A4 +B0EACF6D45D18CD16CEB8176F03ABCB41F2234747B9733C8FAF34AE5D43D3BA5 +0CE0FACFC9B087F84FB6C68678BC6E76022B1526D6E5B3A48EC1A110BD75F45F +1C4DC6D39F254976453F57DF873B7D635C80C42026DE020E5BAFE0DA0D54D1E1 +DC634D2621BA184347E5252F645A6A1DB7657C48124186F0E4C644077457C24D +55753C651A9A7B6349867641464B515B821349C795A645420508673B93750D0C +7A3B33EB1F09782033742AE8F3A23FC02284E6C03818FADD1731361542E3FA3E +75B8D52B668C3E18A4AE967D0FC3157083D952AFB8144D549E69EAAC51C279C5 +E5D88A0D9D53013DFFB4352A1598FF84DCDE6FA32FC377306B9B92C0F96EE149 +8CD55E7B2445B86CCA7A547FA732D52D59025129FD8C6333AC0DF4F0CFF6287E +F2036D5DBBB3B91B92F12FEBE0B61A313A4DB5A9CF0BB3DDB781A56FEBFFACCB +8CB9D1D3DBDBC4CB6AAE6769E470582403CB920630221B68BCB625CD4605FA8F +D3D5B7A1A28D15E44B38E92E906C138E72C15B86F64C38E23BF0440052A8C914 +54397F49DBED99D0AF7CEA3B0A05FF37C2D7EAE1412567E6776333237C31E3C0 +49949EC8BFD6E0F6446CE2D4DCD2C1524A288818CC5D159BF8463A847AE4A2B9 +CC8C58F822804B81B13BF4F2DEB6229C4F51F093075581791D02C36A13B855A0 +34900AA7CD4F1A797652656FE3A8425A38F421C4CC0ACA1CDD44FA6B31219276 +1CDE1CD63D6A58CE705CB56CCA1260F9B86E989019071563A9B4C274A87558CA +6EF1660D574EDA276801F0057740E2C3B80D253D697736484D892CE1AB128B8A +DECD69712F5E70E895FBAA927E8194D792A04AB6CE205E04E38A433BBB793FB4 +E8BBC4279D58A223C6673D909D6AFECD246E66A52F4CB35E5931D24C828489BD +4ECAF621A220D8ECF702BEB01C4FC7510197D3F6D15321EC87175ADBA6434ECD +2B5A306E91375CAD22CD94301763E4A8B981472890422C5488FCD523C9CB17DC +ED22FBF12D5F7525D0D6BCFE8CE85B0DFB1D6F989C267FFBA0A996D309E4A934 +3DB54A9D29C88B9D55D7300DA3D46419256C5A07A2A529A8DE8BD1727281F5FE +97033D861E0531B14E811378EC1AF1CC7EE9BA2B07D935843D3053F673979F8C +FAFD59D555B56CE338F606747238B22BD62C42BB7238FEA335678D474A643570 +A9E7B4970E8C541CE9DBC7BF70ED7BA33639D6744A18379455029E934C95E2EF +639C4848CE9A0879B51649FAB023A71782444B451F92A34CB8A124270CCF86D4 +D18EEF5C1D2B2A29012613851C49F50702D63BACF95EE2AB4D72B375E0A62615 +E0991E130A67ECBA9E05329B740708F1CB148724C3A6E5E3AEC1F88EBCA398D2 +1CA8827C977D72734310233176D1AE26C55CF2CEACA62223315C28FCF6305C7E +A22414D4739A059F552F1F9372CCCA5FED4F9AC987942848EB498900269511F3 +F408CBEA0659B954F5F1B18AE4FB270213646F9B28AE4439D2BA2D3E0AAAA780 +5E530E4EFC8A060EB979E12191044509DA0C14397AFF949E12DC970658D5EAF5 +4EA963F5BC1407A32F3837CA6A24B7F3D60EB8E6222B702E25ED903F9D21AE50 +664A095009BDEAF4B78DAF94E5A55D48366CABF07791A1684B2F54EA69070844 +4F031AF8DF416C2D3679F8BA038B0DC9DD0400CA6B34667BCBBC07E62C1668A8 +35A8C57C9048A7227E672E89681B54D662079A189A9E96A3CA96D8DD10189B04 +1DA49BA2729F1CA585B1BD5C467295285D52E47CA904235A1A3E48EFAE9EB6F6 +01374125CE89D53C276858668CF45D2F092DDCAA52418E0BB94C2B8266B4D88A +5D911507BB1DDA3D8F6E7C14A91CA11AE799EC42E993098E18CADA70BD2A1D82 +2C39326C6E3F9E84CD9758B9AE43D79BF99E6A0CD713E95B3D9B7DB90D127DE0 +DAFEBF850CAAACBD860B5DEF2082F1ADA64B44B193C4A1417BE221FDCA36456C +BE5934C8CE3ED55AE3A11697C2D682B7D0F72D48976451D205783BE25DBD2507 +39C14FFB4BB828DFD187104F38A7F11D5F0698C11E8C1D4F107CACE573FDC4B1 +C56FDAE47024D6FD16A2FEABB434CA320300FC4B6C1B6CA08F76C60B7C08A665 +99F404DBA8A2A1EB18EF6750E4EC186E31561A3F080BA6562967546715859481 +7BA782940F5C5D06626D6F6A412CA7C13820EC7C1DF23E15E5829F698CF617BE +D940523E4EE4ADECEC48C24297DBAD528BA1DCE7AC335A1D15D55415B108EFC8 +6D45030D27B3EA63B2B4CD771DBE66AE0218ABB1153D4B7482289D1313CEF184 +5C960B1E3C3C953912CC6F4521D1E15636C1545EEE457EFB87B88C9E43CC2F38 +6BC4BC96969F4FF28ABB06F4454C01CEF1B6DC538F1E832FC1666D977E5A881B +F72F1B4C7DD4BE167A5535F1163A0706F9A0B26400178DF8A128FB5EBE6A7B81 +E478AD183EC06622B591337B9F1872AAEA356F4FC67EE767B34CB5A4D90702D9 +39FB846947F4096FB3DCF16EC81455164783BA0B5D723060DAFF411B68307E81 +7BEA1D9A47A5AA3D648E618C83C60F060029E6EC4D46B045FA7415BAB2AD0AA5 +ED9C729C24136F6AF61E6409C0B5CA760B16225641E268A68CFB8260BBEAFC77 +6626EBD97195E77CAB425CFB0096D805D9EE699E41680D095AE9FA10122A7882 +2F00F495C9EB2102DF0D3E61833BC0A2E468C5CF7AB430FDB7C0BE3DF2C0D230 +1580BAA25D65F599378D873165482A1FBB224AEA89C6BCCFBDBA42AE1C5DCF41 +06969F585CD3B737D1388D6359F5468D88FCD2279BDB270F6A858FB7D2ABDEFE +5EE8FB79FA437F8F50237B92C307B73B0DCB808D07A9C3255CB9B3B17039CE5A +288103D05D132863FB522A02CEE3839EF9AF7F07D99732F0B8B384745369FB3E +7901166478F4A16076A1504C5E98D17408494E270BBF4470ED12B4332422679F +759F1D93984D7E506D16950DB6C2682FE1379EFFA6F6C95DD71F6E55BE3EF6AF +E0CB25388EEB436E6527806FC75484133F6E561DEB979D5C1FFEFDAF2A6D964E +03BAE0BD593C2992AD84569C81050F7A793C5263E50C2F50B98C4CC703EAE17A +6AEDAACE312DAFAF5278D125B6EFC5587484F61DAFF46B87B7C9B1EEDECA4859 +314A9A9E2248467DE1E54D90DD671660B9040B3E0DD982260822177EFD757266 +74A16C83A7FB168016A320D3DF3BD7726F1F4EC90EE5DFE810C96B099FD4368D +906AE4699049EFD37E8EF058D4B97BF71106445AADD4FC6E90615A0066823A36 +673B8DE32322BBE861AE251226B4385AB28702831270DBD25D666FBB0AD7B96E +A44E891EA1EAF0F87013AFC982E33D67A28E96E0C9CB99B9E4192536830D9901 +931A8CAFA41289633B20BA3BD7AA3414B6DA8D57CCF2FBE39920CC06361F075B +CC40335DB9A0071CFF77F6B7BB47F3100DBDC9C4A58C2B81EC99E8E966AF3390 +E3FBCC28BA1D79961C8A1584266454DF772FBA99664D74D4A89FC82FFEDFCFE1 +4C9E4A04291E803D142E37E7ACA66AB279378F2F192FFB2B5BBAD18B95F03136 +2CB594A3D6D3F8576B90A6C4DAD6D6C8EE07AF682F925F01D0B26CBA347C03BE +F3B0585CF4539FDC66915E22117078CC94D621F31DCB3E021998A5D6EE94CA4B +E214D07517283D56973D8E4367392BF6C1150DEBF459D141AE0941C1C8C5CFBE +E735D796E365A1B0F60BB4CF2801EAFE4889EE5F338D3C4885368281B3C95CCE +251C28A90D318A8A0384439B38D63B94757252062EA44E88509FDD2E75FAAB71 +7329622828B2785C1A8B26351BC74237A6BF99216652ACBD4CCF54CFC8AC72A6 +46342F1E32D4318E7E27C7B2DAC943B3E72C472FC6F1DDA8684AA922516A672C +E969C047E318B5E3B1270C1BEB1C4071A15BC81B29B268C679B41FC5E381BE33 +DD95F0D68118CBB60C521E5CB2BA46A10E50E9238163713290DF6DD8A27D3813 +F871C07E725D4518013D9A84CEC96782541E5580E33C2EBCDB18F08EB4655A46 +507A8526DB26CE1C7BB734D124EB0386F7AA332FBEDA5E099B626A67B0061808 +B1AA8A9F4E87C682601AB378DCE08184B238AE514B57CBEE38C5A6038B4A69AB +A69749BFC89A1D7FEAAE52BC1DED5C1A601BD2FED84DC323FB5E8CA70DD44E6C +1F7AC9E39460ABB8201AC2684E63AE4120BD0C59EF31F0B218DCA1EC3AC2D43E +99D9499F6338448DFF4DB502DBCCDB5DE90D7BE62D2E2D8385B1E909605717D7 +749578237A043BF8DC51096B86BFC97621B1E7E9D9AE9AA465942C8C19D915CF +C9411456EAE9EF8D735BFB4715B7E2454D0F598F0BF61BA0C8F12AF87B7ACA21 +7066183BDB1DEDDE823DB3427A54739F3663F1D699F57FA6DF197F87C989B83B +302C91EFD4AB856B9CBC75EE64DB790EB35ECBC176CF0EDB8224AF9A58620B41 +A5C8997C5A7CF67EBC5F433EB0B8EB1F74EF96BF18327FFDFADD4377601B1A1B +1A671B75E2999BD99183436FB27AA0787654AB365D4132793CDF8DB09CEDBD42 +C0AA8C4DC3200920305C1597D3B454CD6504E6961B63F20CF6823E66CE60F1B9 +188CB4EE3C3101286C6D10890FF2EF0C37F97DBF5DF20D3D5AE4B2B5C0EAC000 +8E6F3E3F8D082AC5C1C0428A2626AFEC37BC4104C3AF60FA55FB84177F785F03 +3D885B728B7750481FF3126BAE5309893814BA28263EB863D5E7A39082FAC33D +B46457E63CB27220DC0FC981DCCB6732544DA11766C9B0D3440CE0C902F16063 +6D147F2E356462B2FE8F882191AF86A6CB3FECD914946C0E4535B4F7C0EFA1E5 +377DEF99D8763A928EA44DA3AD803AF38ACCEC624A78BA4B3B0F935D7B9F8761 +783E0C22513C88957309865BAB15B501109065D0D3723517580C00E0C196BF2C +B82F0B8E53A378F4DDAAB54B47989CBCAEDB8A304BDAF75DF3DFC5DCDA563C6F +1C8C9BC8514F4912E4DD84F19CD43A74BE4EB0759ADDDA74ED134379E63D9D00 +667CC3658B3E33987BE2F5358E6B18697134143D76C8B2184A53DC34FB969909 +7484E480154375A2809CC5ED83292ED9C25718AF0D3E1B622C37AE15D967E429 +545A65BB9BC5A0C28C9B6620C88AC1B10BF071AD542DB071B4027F31000E15F1 +636D6AD25B03A443509DF22B950DDB38150538219C18735C6FE1823BC639301A +619FFFEE5B7FB9F34A31B87D9D1A4A2541AE5339128CF7BEB9CC345D8D4E9063 +1978245ADC0EC3BD1D81444532769CDE9A960BB4B60F6F707824256C8F03DE6D +EEA8FBE3B23A4C7B16C5FFC37C0E523D2F89A1CC5E64E32A94C5E222348BAEDC +AE775455F358077326CCA58F4C8A2D1481910C9571003E25A16AEC3A003AD97E +76993E56B6B8EA458178B80CE273341C9856C2F93CA51A4ECDB83B64C9DA2734 +F58D596E67963AF1AE570B450372489B329DCD00EF9CE36101C6B886D2B11C2E +D407DBF4E83A21B3DA030163A73F6EA328E4CFDEDE30E97CDED64AE00827C895 +D8487149A8FFA1EB7F044A395C55E19C6107B45B60BB1B6D62DA83FD6744FFB0 +98997399E0CFF8E0DE311B7908624609106B760DB36843B8FAA2BA68EBD5D3A5 +8EBEF23A04F1959054046450359672AE227F270A4860755EF919663F035500B0 +ABB9D42EE87D178137BDE927F8A98CDC5E1CBE0B99F0EACAA52E40E56F473DD5 +B27BF1C51F1E42E813E85F163BC67A18CC1887DAC73A84259C4C1043A3869212 +7791949C93A0845B9602AFE0C7EE6618173CEDE77EEDCF52364C60F518EE6B93 +9CBCCA90FD837EA47FA3CBBF9F3B5EEE0616289C27C1517212BFF2CF9A0430CB +4BE69786504DA5CFACE59EDA94D33B37FAB0111AE31430B62343EC05D7AE5E91 +BD98E454F752CE741401DA52C81F984E972E628C1804455FA15857B7E3F1A352 +1FD2016251C8FAB46A61FDD17B076A6DE70F49BC5BE6C356CB33BD7BA6E4FF82 +2417BF7E5233C15CEF8BA5F7EB16708D2BE2CA040354BCB8E92AF0B9183F250A +E04683E3F060AAD181FE982D8CC50A950167935869EC0E7884E06617A9B7270A +C4A6F7CDC1CB54B13E7458D28CDCDB300EC47453E06401669A116264C1F74483 +C7210268D605A56DD7F4307D9B046A90BA8210E1C7CF6E302D9FED4F6898ADBA +B8C4891D68A761DE92636FBE41433632A244D2CE90CBC0716697396A9B0EFFC4 +03A17D2BBCC56F8A2A99AF870CA7F9414E42D689B020B11D382D4CAF5E16F85C +873B60A4E04F17DC736CD41A80EC051E8759A76CA4434847986A6834DC9EDB7B +E2947A586254C118401FC08F1496D9BD9060797845C1563D10C922B8682FB988 +983C9CA5D46AB6C62B54D4F601588C7F8D2E37B68DCA401224A9337BA92AD14B +2F917DDF1923D864001ECE575505E9D13F7C9E42DAB32399943E3FD64FB21591 +62CDA15DC14530341A1C7111468EF3397D4EBD9A25916DCBD85845ACC5D35A9A +2F0B2DBF2EFCBBD30636E1F31B355F9617AFD58A54622DA400D0E0B115E4BFB2 +15F781C8CF4E09FD1E019C59171665DE0C44D2F8534791B2E1F3001D76257656 +DD5BD20B737640F3A29B3C7EB47AA2BF9BA6CB5818D780E587FB38F2E494137B +4DF8E98D3AF8973B241DF7BAA52A90545B8A2B4827BC33E14988DB8444646806 +99F978DF8BC284C0947C01A919CFC988635868765BE662F25E9D935B223986E3 +771F39D9D2A58AF2827C867605BEC744376AA9C064CFBB7EE734890C67B2C910 +7B660E8B4909C37CEBACEE7270EA076115E876426F4466AEE7261993A02BC2A0 +6CB7CE5CDD1D4F19AC495807DC79EBC956D317FF9EF2367A702042C991592D8B +52487348C00DAB9B0BAFFAC2F05D947E767FF2268BED8317662788BD91EFDB7A +00290CE3F1673531E591D8A5AB24C231F36745BB9811E2B3FB3D68B1FD278AB8 +F2BA32A214DCEDD4414534FC16F6C2F3A2A2C764F2BC7C756435BB965684F9BC +EDD017BF09725925CC9F79863E850A0820CB3F9319122C135E363D9861525270 +E0F672BE94EF236EA6A734213C4837DE148223916BD6808FBBF4CA6E6665A046 +4504349740C2FA659E3CB5E7D6221A5F231C8D1651E7DB727828D8AFC23BC8F6 +4155CDB00E251AC2E595121F35358C9CACD078095014FA3C816B86B97FA02B55 +CA4373802EDE5D6B187F2A9A5B4D2CD7828CE08712E1ECAEFBF5AB2C8A5AF1CB +C8367EA30F9DC9F8236AD79D590912815142717B4380DD6C3F99A95F97A88C9D +6118B8D200359951534D77590B40E1612CAE03FB9639BD7F109654FC7A7A24E0 +832525837664B0D76720356ACD55D51115B799FFBABCC390E4656AB2D6F3193B +FDA32956C0F7F2A06C4E2C3A2C6E1F9DDF0A63E635458A7A6CB63361B1A0C4F7 +192C9FCC75309341595BE4646020FFCCB7B24E6B486D6DCC7C624477D290ADF7 +4F2366F76D837019E67F743B6B4FF2E90B5B926976ED8A507F2D19E39B5D6DC3 +5FB511CB042E117D6E3B4E35CDB787C320326D41747A138D1718EC76B4126BD3 +908B6E38D16793B9D0B4EC8A024B2F1193BCF234BC8390F16F6EEAACD55A3666 +4B23106A9145774A706A0E156BAA981F175DD9D590B08B2BCA021F553C6C81A5 +35AEA1A62BC7A0E1832338094C3FADB064B24F72017D4F0E02A8D8DFE49A1FFD +92E29AA0F2B2F6685E2C89FD994412A00D971A3FD1026BB5E0F00232AB362760 +990D2A64EDC4B6969E5A304CC968C3C421172E0838FFA96428C24C85C1B11729 +45E9171D8DD4AC40A9065668ADA5581DFF7BA0DFE6DE29521C3E492C7F0F9C61 +C02416E6ED291A2345307E76C13ED376557DFA57CC6B5C54E7F9EF939ED2E07D +B36D044C788A6B3DA78E1D86850D66DDBF90C3FA14C817F58699F70C10B5F6F3 +030A8C853B6AFF745029C4EF6B9B04D93C44E349D191627A8BCFF68E478FEE02 +D303BBE884B2FEA256EF66888C3F9CA10315B1AF06130C12E9420123B590CD18 +008CCBCDF5829539D50F627CC89AD547C8FF26372384C912D819C7A68AB0458A +F8B691B7BE82AD13D35308DA36FDFB0C9554F4E556D62E6DCC015E1C51BD749E +BA0CA2610C6D763E7F89AB32322AEF229BEE84115FAD8FA5A38A2A7BED7C018B +D29BBBBB517BAE5C1FD016305D6105444CB342570D9C46016F8915D4FCD9021B +29A772B0A22E95430D32D8E310C972A48CCCB6FADB25F0FEFB00818F6A1F470A +1A52F1F99638E20BF06313CBFC925552B86D8D789A6FF3A4EF4E46DFC45AA191 +F75483E41975C073583925591501E1E1CD8619F06DF990C0BB28F70E0990B971 +F323C6A00A6FFBAD9D3E145ABDAD886880B7CF42BFB08B98E5B90CD7E6E711D3 +55E66952D5DE574B5356005A82BC73D9050DDA2D4914B65F4ECA8379F7F7BF17 +7E628C6C7C7A466B5136BB04EB826D28D27FEA294379E25A11482398532C8C36 +32B5127786DC1EA568837BBCC0A1EE04914F589AFDD23BB6C24735E5F504C1F7 +F577AB86FDECCEE79E3E8755325437EF1F238C8CA5816AE9F03688A6E8AAD84A +19649CBC7BA469CC9C12F81B3BA68238737A771A332E58AA3B053008C33FF2F8 +1AAF03311BEEC8FA641539FD32138566247EECDDF8AC4429058B3DE134ECE83E +E15252186DD0E8EE240AF3AE52206F96B3D54030D337CA33CF666139E66CF7D2 +88CD8177A029CE181FED2F07D76BBA344C83F56F75E372A4CC726BA97D8D8606 +55BDFD76AF3AA09B71946F0919A9E6615FA7ABB7D31EA54C681D3544CD0425F1 +2BEE3B214193F8A2EEC7E8DF8E57CDFC9B5FDB66F32101DBCFFBE3839D1A45E3 +1FFE9EC86D0E556A9C3CFF7DC2A43FAAC36B9F0074988BD65A53D88BC2BF5A2A +2EBF480D31E7265C3341D3072CCD5DD93FE459119E619726DB7C9AFC1DDC403D +9C1EF23413C1FD9C077D62B7F82F750CC66F10E25AADBB4716A0351B70407870 +EA56558182E6B3FA63C4F141A3BF484E55DA46D1CF9A722555DA1AD642FDF1CD +9734688FD250C64832385CDF47C1BD247C2AE21BD71905A51EDC9F39CDEE603C +3B14F5C70D301656BFC6332E9A32E4461D9693851421C13BFA0B22F0D3D921AD +E3D6D65D1AC90C0668D7BAF7AE5EA0FCC8D7D37A93BF6C1D33A9736A7F342DE6 +882B32B0C9D1124961045D45663DB95D7A20FA222DA714AAC3D8858717B02277 +8C3B945EF5E69EEC9241CBFAE4CD39ABF1B77317CD4C6F1B0C7309CEFE0908D2 +D0B6F1E5E5C6BF068020C6424C7669C9B96D0089566105BEE9414DF45DE10173 +C30F45B9CC9B456B216BFBC9AA687A2242DC310CB2B6312F7BBC13E493C2C899 +3DAAB6C015F69EC85C903362C1989AD96895069003F7BB4A8FF51E7F8EBBCF7F +F85E17A941F96EC49949C75A3C8BC90E34B1646AD0ECE4528661C2F190C49184 +FE348AE644B4A54C059560AD15596D6282F5A1826A3B82449BCAFD90BCABA424 +03018F1C907E739A1FCB024889525AE427E6367E2CC166D4F940CEEC885BDCC4 +268650BF2AB39F338D6551D38EE67A8DEE2640177CBCDBDDADF1FA9DB1CE137A +743CE30546B3892991A86E0938AF43B76ABCA111A6222F1BB9D172EDD7BE9406 +EAB1E7A440F3BAC61396C901384FDA90AB4D413B3DC5F66F2E4345AF21BF2FC1 +2C3EC7E2E7C703930ACC675F2618F95AEF5366AF455A72A700C451DD41D84042 +7BD4457DD925418255AC1BFE3CC10A6DDB93EB62A03E770E6CD1CA168A05FA26 +194D1D533CF74C7AA3CBD09974AD2ED08A127D35A3444D643B1ACDED0B52E404 +59E99BF1ED70CB07798DC0BE24A5CE3138927E077D3429F4CCD3BFA4D2406F10 +76F820CC932DED8DA91D9E9480B84A234183D1CB950EF7EA8902C269A3C92286 +4CEC9DCEDA0CBFC50CD21979C66ADC8D01DE758ABA6ED72DA12372341F664B06 +8EA5668170D3814A7DA811DF4CD1834A1D997BD58EE8D51A3E6D35C0FFE86B17 +29AAE8E5B45DFC7D39D743B72B736104465B67063D0FCA5BACD7C05B21E473D3 +CB9FC55FC31B29F4090209FE7A36776DF2DA5D7D6082DF89CFD601A78DE26B93 +01735FED4EC83379D9A9EF09CC11582DAB1263EF1D94DD2C2A3561A1BA5B9CD3 +D9F45EA50E210DC927FCD7515BDE13E5075CE892CC6B6D797BC4861F50B8ED87 +697F09C4780B3963D714A5F44DE85466E8C3D01D6CF5DC1E2B1CEDE1961C1203 +F65FE1C61FF1CC5E0506C4DE5BACDBD5894AB5BB48A8399E0747298E908B5FCB +3FA8AF62850B0D38709FEF368971A9BE8852BABA795EAC463B5CD6298F532495 +96C2177636FAEC7A38D89E902380FE2C6EEC19C31E4E9FEECC877C959920D4B0 +13D9798859805CD7630D9A3C3D24829960C52BCA69D3ACB9E1F167C1434E5B0B +6878721036738944C6F912B012109161F4C350ECD183FCE075A774AB9BBABBD0 +91E523EC0B48FB12A920DFA1306D1139CC204AEE973657B036F5F541E0976016 +798472D73F2789456C1A8268A6C523EF8B5D3D4623372A3A84A356063164B37A +55E6220A6837ED36E1BDDEF99F1EFBF0A4200C1F77004D5641BB6BBCFEBCB286 +80E59CC23A95348FF9F2D8E1B6F6B916DB8FF32D68BE9F39EEA1FD096C6AFB6E +D9CB3EC1F724893D4EF23E0F44618D8915339D7E8329E90BB62A03F77E451712 +F888B8A371371EE01EEF3853A2EC7A7C8DF8314000B38026D8D0CFB241DF4684 +82A773D5CF3FB56CBA7B9FD2FC379AA99A332852841B3E94C2D02903B525BBBD +616F5E832B8788FC2832669FF0ACF08A0A9B34D891B1BAF78AA583598051943B +972AA191F7528F4DD407F27327258FC5F58BDD86EC1F3CA88FAA9F3B34A9CA38 +9B1F747F1354E70EA66D85D9C3C60A9BB79394B5E55AC9E0405E26F5352143E8 +ECD877505D96A16F8A828C4C89D05B5497FE14ED468B1F144C4D8E0B92731D34 +F0FB9B73B830961F26B3FBE450B50DBE3A959BB7AF1DDEDD891ACE264858C4E5 +58B65AFA44F43F47CF532E71573EB9EEE3A1A498B87C17549A40344874ED53E0 +F77CB0F19E5C5EB5DE7E10DF0C0F7F2AD411091E49BEE1FF101CC15FBE471B08 +CDD75E2634228A2A5D677F1479149F64CB3BBD980E975C074CC5B70D8FF535B2 +768474E2E7D47B85D15978F5E0EA83A6474F0A0D5726723D9A4FED424E6695EC +2B1F5EEC0ECA31DF06040F57BCC480F89B9E608DEE1C20676D0A34E01507E405 +EB308DC3238D11C2E2B279767BF2AED2A2B9079221992A282C677A0F98AF0451 +3D48976C569026F6FB3170B22AA6E556BC5F9BF546A0E60724AA1EE7E68B8FEC +B5F9A96FB5B30D36EC9C10075652ABDBF5730B526E32B1ED14C9176F25CA5AFF +85A11C041B0A89B815738E770560E529FA27EE353281381E3CC13C3B8CAC24D9 +04964964A320A1354B76F4A28E1FE443E16D028E46BDA9168569D8A4E91D2BA1 +D0E08EA4D34A63DD64FF8D687BFA2B020D5EFB4685F9B83A1FCC959563804D2F +10A59AA2D4479E2DBB7E8E43FA4145030B9798203C55CF62DDE6C99017E0395A +5D666B0825DF1312261769672D97F79DA24A3CDF62611858D41BCA89B53A6128 +210398A6A1D8BC2B9B8CFD6F03871A037973F9B8F7E4E069D4C3482207A42601 +AE22F4756A44F596F7FDB2D2F53DA5FE47F94EEF21D1C49FBE58D8C79B98D5A6 +818A313D952A72E1918A110C6E4DAD9D1F512F5D67ACB751404887D100319E5A +F3F88878B1DCAF8A34DC8CAC908A57C95E9E8BF270F7DC1325685E8ACC58ECCB +1BB270346CAFB828A694A75DB22FA68549A51EFF70750F544BC371D8D119F0B4 +E92A5BAFEACEC027A4E50458A4BA2491242308BFF75914F63CE7FE0D4F16884C +4FB0ABC7CA630F7AF59A3FD4185DCDC7DF8718074632F6BB063933769700A40C +457DF0F0E8CA71037B737074F10D7D21B2246D38F11C11EE42FB87959313FF24 +E47B087BD3692034A4493AC6D82D30313F5BF48DFECEFD5C83AF7158513BF0FD +7B961E43DCA6E60D24A48483B139BDCB51A2CEF47B4D6DFA4B45B6E42E31C2F2 +3D4124475E34BA7D17AC50FF84E3282B8810F8E3C95037772EF23E14D0084716 +4238C621313E5B1C895409FC9F281776346A94E3039CB04BD8942E61D5346AB8 +9BA46E8AD2891C98FE1B14262B0770C5F3045097FF949E39FFF96346907F9A90 +206B8D6E753851CB3588E229A18A855C727BF9EE7D08CB6A471CFBD12B679A39 +C2E2CE65721D2070E06D68C10C7B1EFE2062185CA60E8AFAB0C1E8C799C4834A +3C20A0DEC62F85AD4031C7620D6B8443FDA66AB4C5CD4B62DC25179897387CCE +6E49D4DD217440F9B8513B8250DD1C5D5268F9490CC38215BDAF9415C91AE7CD +1B453DECA5CD765E083CC515D3B61BAED6347FC35511CF91DBBAE0A24CBD2093 +F8323440E40907C53D68F61792FC5D9DAFDE5842C88404DF1D4ECCDC8221DB2D +4B01A56F6C31F0315106E08504F525DF166B4FF4F4B213D3821F0EA97E030372 +D76A7752E7B34F566A0718B1914D29F71846CF8647E7841054ADA442837DF927 +97F1940D546037EAF72E20CCD3AFC5BE4AFF17D11B4C9C92EE6A5239EEDB2CE2 +2253068A59509B7458E0112A845F65BF49FEF08398762174DC1C4F4094364EB7 +9DF018DC4B5429DE5BB4D1CBC9134503674F4201619BC5A52B93D40AD6771DCA +426DB4BC12DEABD891116E604BEE4C54A6AD6E700CD2847BB8B16501153729FF +27DD09239E0898BA571612A5BDC875DED7741E873AEE657915B063EA2A826527 +5B9DF021127F27C3BC1626C909AE6771FF2022C8C64AB4F116B06EDCC7BE9D64 +31A92E6B14F388CE96289600AC2CFCDD7835E273829378990005C9EB8BAE9F5A +45A92C86F6A3082C9415E5E921C53DED20A7EEFE36F5469A859929B555920E64 +64278316B1B1570F5BAF45EB09632D7FA3AAA546BACDED45446E51C3DF9F37A5 +075005829BC11D190D2D0D31EFA6CE32C76CDCBE49B6212B2BCE187543D5346A +E0CEA04CBF0142E9E51549007981E8AE0E6D65B50F977B6F7ADC275738E01944 +728CF17A3BC4CA89563174AC2C1495AADCBFA645EC0FFE0C567A7F43539EFCD9 +517011E3B8D75EF2EBE4138490541FBC8103DCFC951A299F78DD02287739EFE3 +13773E29919569E091EC9F5E34445C04733E3EE1655B2B34DFFCB4B7356EB67B +713509B732D4B60FD6C44E1902F25E6E1703216D861490F5CC9E39A618AFD328 +3C8F818B53E2826E9EB56A2812DBE46950DBF1A4F5A8E7640F9F10A8A8BB66A6 +90785918C2CDB3000119183AFE51105AFE0ED3E396B6634A2FD802C63DDB2834 +A088D41F1F5C7945EC4018D1AEE724B4A5B498FCDA1DEC7DE69A3C888664E5F0 +31E11F32E0AF985878EB0A55BF8841593424E191821BE7ED1A0108E28AF48646 +E2029C7F6ACEF238F08877013FC23F75816FED446D3F2B1B58F40C5C63961BB0 +67B51B0D2B158F31ADAC46B6AA4B61490B3E28164F9B63F115C8DCF64C08D8EA +ED2F20E7A1D36FA511E39FFBBE90FCA1F1950521A478FD575C98DA158F29D029 +80E3AB7A960350313DEA0CA5B3A0A0BD9FEB87522F0266E9AA9098ED8D740D9C +0D33D210828A41E2C21BFACC448A8D9F7D7239C10149176783C2F76EE6A057BD +BE248816283B2BA3D713B06A99FAA2FE50636C0775365B59329E3F6F75C0611F +E5B0547AF61859E0C03EA24873E7DD0C8685434BA263197DD58F63E136572FE1 +D04CFCF1305EE86B55D97AD5880C265417D16A6220CF13AC857228E5D805E338 +D6C92D8E0DF910C7E8CA8E01332E5561936CEC98333D98420DCD4156B16F7572 +564CD961B206166023852DD217A266325A698EC373E51B2ABB790F6A2F2E78D9 +E77CE19F96676CE81F40CC72BFB19862C404C6D0F9F2B2FB765E9F6833CA4704 +2B0B928FFE528187BA39C62E9F97305FC7E43A9CAA5EDFB7C4A8D6DA4EE27D88 +B2EC15412154C581AB32A8E896E06E91E4A3849CB766618A05EB4624D9A2CEB8 +D2636DB216102CF75C5617C1109285B9A0C9E3DB4BB0A22F591B53F7C29F2C1B +3A244AE48D2178AF8E0A88FFD7F0CAD3B2C5525D31C32588995FED6DD2EFB9BC +AB990B727E8174EFBA948DAA68791ED4EAF26CF8D518271A76BF896DF0024C1F +EBA1B3F7BAD42D735A7DAD1B2AA2E2A547E73DCCBECA12B839ECB91D6EC32C29 +FA33BD8C9B2918A8A6B94DC09A6420BEF0DEE1F4E2A976A303F07EE93F7A6AFF +FEE920618DA159604492F7669F6B0946A0D7AAA2774853510A541CD6CCB1123D +9B1B0C88833EFCE0C326B4850348E65D0294755BB1BA2191FBD8C2ED1BBD5A0E +3F481B9E13976355A5758380A6EC171AEFDEE3400573243D6BD90F65369F09F5 +656F465BA1D64B5FAA44144D1A93C2D715BD71D717D37D7F691D0C19818DD847 +A60BE6F97291A18DEDBDB67EB4294E6147C223D85D646010F70EE10E1B661F8E +10098913757D2068C32FED569F85201718C84C1F57AAD3078C989E8363708AAE +0841F2E746E3F5A7F06634710A2A4EE31081E367B8F1831BDD838B7FBD1498F3 +D3C005EEBC270544B6F2A016D3D917A319CF53E2E593B8C1CD65BBF3A67CDC1A +3A7A2592C39A623DB3DCDF869CE2CC9E36DB1C10B6360F4E65EFD0E6A1355BB9 +C6E760AED82DA1A9C2C71A8FE20E5A127A80BC76F29B959405FE70A178BEBF48 +43208C1A159256FC02B8ED54604D570265E5497793D6E31B66608BAD220596E3 +D2DF814166AFFD62426E9DC365633C46B3EFB97441E5715EE59D20A80B44E7B8 +6A5F4E9D47DB6AAE0875229F2915B98A62204B70C0C2CFFE3F7C0729408F1415 +6A2604D97605E2D13962DB6EE32EB38FF4D9BF32B813792F59ABCD9292C8D308 +DB3E6239064D723CDF3E3BA8C1FD84DCD45998CA8EAF3E07E632E9D22753A836 +C0BFDA891AC7DA4FEE50E991618E1458B228F269AF82E5BD47E0DC0A75C3B6C4 +917377F1677842AA4866F9EF618B5A73AC8093495DCF0FC7C51CA481F46CB80F +9A6723D1053A38155D1D062C50C5D6A26D4DB2A8E0D8074B48362180CF118844 +975B7A945882151B6FDFF0A81A7C636930A201727966DA2D170404B93E3E8579 +CF91CEB78A6A204C853C1497D5B87502B8DA828026803E5810D1D40FD5C871D2 +870292CCCF76801F23BF7A7582B0C9FEDD24904611DD4FE7251B71036EA87E2B +EF25EA2409082749CF330AF7B7856127E10D7CF149319866E892BD408300BCE4 +FCAF84CD0CEE8C2059BF79C50B4CF60A491DE56E0B2A1C8875C5E1423CE0A880 +4A9C780F7E13B7491818C95FBED38F76374F6593B5E4C717C2251CD7EC05C4C0 +65A2E4E49793842484EA9AC7FEEA28530AF0F24BF60EFF827260A5C417F1EDBD +B40C84498CF51F91A0C801504A8A92BA17ED925C55E4B0DF0EFF6864D95A28A8 +AD639601AB3A0C44787ABF6766B04036FF1664A744A6099950463407FC82D1C0 +D8649B266EC39DCCE7278034023E9FE803079B78A38F939F9E4BAB9C1BF6CCA7 +01CD9A388090D701B9D2C53B09F7F5F271F18BAD5E96F0A88DC4078B3CA9E123 +50BB1290FA43058D737D99B6DB17F088EF86D00AABB69FA4B40C506C136E5A96 +7B7F401E8F8CDF0D12B230FC7E498A773FA29F6A7A5059E0C7F51C33607771D5 +8B09D0BE1F5D7670B0B02AA49C1A343565F2731E12B33236B7F237AD8001452D +EB1CDDD2A730D6BF33FA2F45A2754DD7D0DD55D78AD52EAA7D8F51D3AA2AE015 +E8F2326835CE2B192B3689EF8750C80BB2D30DCE139744B3A47D8457F0B5C12E +1BA24DEC3A8E98953C199B6B2D3C223B3F322EDD8F05946D6EC7B7CC012CD2A5 +FD3D669F2725005544C6F1286B4EA9005E38DDFA460D5CDC5FCC2A0B82BAAB5D +8B62E83482FA3A601CB9B80FF96621885DCFBEFABEA445FB857F8D54BF1B06A0 +2B153234454F424ADA9A5782F93EC2E55C2B47751B30A133A0A8DC9078DA819E +0EB14EB158EF38FC9789F0F7A6466159F307CD7CF0D827CED9431C6D92CA3BE5 +54FD1EEFB1448B933ABB09744A5CEB84F154F9CDF52AF86931F888E5A263F45A +87CE74557CE8BEEBDFFF6BFF1609560D7242C0484642D82C06F04C662D317187 +93F3E9CB56BE479CB935173789951298DCE36548D1D17523263FD56AC7C09D2E +8D72A861C81F7210E39E06860B95B58770ACD8A0BAF536BBEEE1EFA65C2D9D03 +F3B865F2C72530093D40E98C8A8F8B505517C858FCCC701C409F5C0E33A2E520 +6F8D6B73528A331CF784F4071FB1A428C9B8A82777435BB14137607FAC13F4CB +BF7581FB6C0FA3570579242D54DAA7B54F9E1814B88DA7B5A15B6A5B0BF11FFB +D8C1778B9BCA433E64B745CC027C2BB894E0E0A8617F66A63AE21B43C3235572 +649CDAF9B1A6224AD11532887C5648BAD947E54D616CA9A242647A63EDA92B51 +9F8853E7FED6A39A9FD2FE608C76EB10FD3C7B22AE9BDEB7432A86F99E559898 +CCCA486E1AE88CC9AF748C8B1831CB5CB637320126941FEB7A5434C6866D701F +5C3C96EE1DDDBC2AD2B526C61F94D973B62685A749A876578D4FA9A50A602711 +B108C3F31909956395B6B036BFF558375F74034621B712DD3BC636B30E344656 +E6FF0541382FCB7EBA898DCC5AAED63E79ABBF52D6005B22B86927B856D6D793 +257CFEBCBE9DEF1C69A9112B73AAE10473A2AC3CAA28AC029409EEB4296348BA +B1EBE27C8FA32E808BFD96531DC497769CC8BE428B58A3A6F414B28F9B95B66F +9881E257BFDA020BD96BB1645BFF2A5D11F8CE9C3C8F94C6A056C1B6496E08B6 +CC60D9D06C7DE5F60E46C5AE33B8F72DD9C7382D42D52C38319373887B72FE9D +2971DB1DF330C846E988B564CBF1A4629F044A963F7EEA5D5264B4EFC32DD5D0 +3249A851D03224A5310A6A3C44380D5A8EB38EC4DA4A97B348CC71624B600025 +FA66BD818E62AEF526A6CF382F686FFD168AC57D5611ADE4A8ABB8A638DDF9AF +0666C2A3206E49B9242C4C14690712E2E8F1F8C471DC5F127CD0862E62726D6F +7F813C084CC8983FF7D16EE9F851F10FC8A706B65CE4751B3EBAB21262E3DA4D +66BBA37CEDF5217B4644926FF95860ECEE6E0FA538FFCEF5EE086D5C22D9C012 +5455DA62D9170902B622F054F6EF8B2B27F72B0AD597DF8BF51C3BB48B5983FB +844624B660464091C3B00E4CD17DD07AE659863B7979BC45FAE4836CD41B8B22 +A8E1B00BB24CE37434426495E896938B584450D97C71018B8FCD1E59CFA20045 +12D74518E17177978298DEE06A2AEE8811BB619DC5025AD056096A888150486C +FC523772DD0C63E7920FA9A9E4CB409D1BA833C15C3A2F95D7116333F9171E46 +77F08EE893B274B295EC5DE28FA11B223B03F6FA13A21CCDF695E376D2C9A3D0 +5FBDA9A2EC68D89895CD368EA0D90A4B9B516D5F9CF12359B9CCEBB1FAD0C346 +FCB6CB4450542937E4008E9E259E2E31F85827D6FE9F1CE3793C0C7474685394 +2477D84EBBFD1E36D4955A07B15B9DFA8CBE4BD732B3483F5823A3CB99181066 +CE01E76F4768F66AE85B6DA24ED8BB3F17C9D09800898833090B768BD62E22E2 +A155F9249D903C805602D3ADE0D5E5D042141A11C1DFBC1F47C33847643C4B4D +FB7F84A23527B14657BF6A368BD2FF6BB4A2FAEA1BE6A4CEF60E52E20F9E0D4F +655149A63BD643949B82E6082E4EDDAE82349AE86E9CB92BBD724148242CF221 +7C40520A585B34EE02B408EC8C4EC8506A3CF5F4EB81FC7BD4F63FA16C7C72CD +7E2EC14EF116E24E0B2C3DAC4AD457551497B537912B322F5FF60B9399F643C5 +BCF1A960E0CBF7D2E6F1D7330FDDB6E72815CFF8C4E9ECEFB0BD5B6765A17CD5 +4146DC0BA657D34466E939329D3520CD26ADE665AE1A53E531751B6E49DE06AF +24F67E21D31DAEC4D273699907AE35106EBA1EABFBA939E414029E79C7787E2F +5AE7E19175B90368F5F930B28C6BDF059975EEB7C73978C1359E4882B9C403F9 +53A82485AA4535770E40A8ABFDD71416E441ADF27B55326B6879F819967A26FA +38E2E95EDD50A95D830DA95576D1476B011ACAD87416255673DDA4195926A388 +D60FBBA6898493FAD872BF7528D6D899B86D6A776E7FD2AD80D3C918A1CECAC9 +C4CA602409F425882A033464895EF7133DFD55F994CCABDF07C31FCD17347A64 +E848C886AD6BA99B31D0C275BE271869FD2F81E7BC65471ECE04E57796CB39BC +567D506DA8379D3F0E9A441EFF8B7BB9888B53004BDA86807EF370D4AC3AA69F +5C7C395F4C30AD486A52AF38C6E5E1BFBA7858FFD054BDBE26F55AE561D37A53 +2D5464DB77C2D573E3D75CABF1BCB9EF39348BAA04C02C3C132DB72D01B641AA +B28C50D9805FFB15DA9016B2F596FAB2AA1700149B9843530B402B786902DA69 +DD1D23B8CB69C7E3020B8F89B658EE051B5191D4AFA9A2A3EE9B9C601E15A878 +5158BA2249CFAA403EFB8455DDA976456F36BBCF7E2B1482F11033C37826B5A6 +864B0B6C4F5F1685F98249C9E6FD3A48BEE4B7AB435B7D021F52770F7BDC27B8 +E9BD53B97D6BA321CECE7EFC0AE10F4838B3C6FBF5029E87026F3BB8514D70D9 +B920A236493923AC4AE2993F3D39EA4207007BE0F1E6758C6845910A537197BA +6C8637E3AC195097F6046F593AB0F5EF06B23D29A8697374AF8BC19B6A0E7B37 +04942FDC08DA523223A1AFF0C3E960DDB5313ABF09172A1F1B1F7E3A00BCE7AC +18111C1D9C02A1C4682AB45CD6DEF456D8B9FD984EFAF3CF9AB319C9F3BCA0E1 +D5DF413B4E971D85EFEF039167C23922A69F10DC861555D2FD93A7A2F5AA7ACC +EB03E21C5FF0708F5DBC735F01C969F3FF2C6722FF87C260783055CAB2DF83EA +8352E1EDBC4E09E8E38F2393D5949DBD7A05C61E3621CEE7045B0736E569AC99 +D16E49F8A7D0FB89D891650629BC80E21E15060F6439E9CCA6124C8CFDA56AB5 +BD7DBFD383412869B2845FA5B0D4A1B95DF0073DFA877F093844659E5D2DC587 +EA71B3D96E6A6B1C208876A2CC80C0A2E14D0B7971CDFF6134649D702E0785C3 +8F3ED8EC0C6515A0BA2862238BD9956E4470B233B747C5CA8BCC97934B19958C +41A7ADBFDD2673AEB701F198509042D7A168661A18EAAF981EC5D8D089ABB87D +9F287F6FBE32C44E591C25D2A77E46DEB9E39B4BDB1FD1CADDEB08351CC119FE +B6F2B6203C8DE6653188C0C56BC9B7259086A544D588484CF7EF616B231086F9 +E779AA0F1CDD206A68A58E1A47A8462B2808CBD002A638564E4C23972BF9F635 +F01E54BB0E029828E2C232641D917E572662B63786114AC078E118E94BBE657A +E5F8FA846D3327EE8AA4CEFB9E0F7DF6ED9F879FA07BF6C928B340E358641626 +50ACCF829ABA41BFF51B9D65FDBA687212FD3FA9BD7CAC88BFBA176738255525 +417B94803CD3BAD1B563457FB4471AA7FF37E627E881F994B1C0C41D8E8059D3 +53F7A2A9A20920A74D379C055DB9BEAABC42D892C881E23990406532BA96140B +C55BB738A9891534F3021C382099A814E69A9D122EB46A1CC258F80AE1373066 +7A74E73BEB9C73FB58B852FC5FEC78A4AD2559B7CD9EFC5943F245DFAED23F69 +9F1669F4C2B011AB9A5549B33DCD09FF8D5BFA416F45EABD4E3DBB0F297EEC2F +63492FEC28382935848A71069630DD698DE4CEDAEE365120D308956207017923 +067920F8422F3E911F8D4E41BEC6EC8DB4A4E0FBBE955F177485E598F0F228B8 +E49E512B96751CC529CA64C5EB95DEB9ABEACB1C0D6B0FA017FC4DBF8B0F1097 +6141E2CE4372B064C4D23150DD83989E5671003665BA0F0BEC06F814D463F4EB +9FAF59EDCD2D38675C12C0A6E8615184B5F90C2B4C8BE51A48B26A8F01A30E9A +1AD1EBDC0173D2F18F5E535CF13FE64668F9467EC4519F733330FF30DEE23E62 +574BB06B2947B2DF41850071AA4A902B7ECAC73060CF934901B6AD2925067583 +9347BA6810A632F5C0CBC4B237FFC0857E1049AF1840EBBF6E65F03574F725BB +D62FDAFF0F8DDA08561E04E4BDB7930661380D9F308EF466DA04F056C25A8C32 +60D9AC36CD03694CD8D59DCF94D0EA6D25A1D5593DBF7C1B0C1D0FDF363279F7 +33C164DB0E256D67C8C85DD9A2897B7220B071C88194F1D93A406B3881E4B2FD +528EE46EE86FC9C1D96C10B964C5A26E2109D1389C7BDC72A0A932D3C9033D70 +C2B77F7732B40A1A81FE552613FD2E09F45D0DDD4465D68CFF6687283DE4D1B9 +D2C347041B9C1CB3DB7B092A96D772D1836277D60F12BF9C9A4B7F8D807AE1AA +695CC7BD9A6A264B23C6B9162AB0B3D671932245E2842CE22BDCB255B4DF69A9 +A71703B270C9687A4648F6DEFBE3B70202C2F0217DC3659BED38D066C3CB74A0 +9AE76049B5307448647002C538E3604B8A46FE98F1C8238538A2E68CD4A72194 +8CE23F390CFE6F697871E8FDA2004895F6AA52AA3E5046C1DC4776EA1CB0DC6F +F151FA205EE5AAAFC249D2BABDD3A6138CB22DF41B87AD72E58071008D14FEF4 +3AE5F367E5884EB298B3A559FAD7B359A39A813032E7A373AF9550CF1E8CC32F +4136CCA26A5D85AAEC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +{restore}if +%%EndFont +%%BeginFont: CMBX12 +%!PS-AdobeFont-1.0: CMBX12 003.002 +%%Title: CMBX12 +%Version: 003.002 +%%CreationDate: Mon Jul 13 16:17:00 2009 +%%Creator: David M. Jones +%Copyright: Copyright (c) 1997, 2009 American Mathematical Society +%Copyright: (<http://www.ams.org>), with Reserved Font Name CMBX12. +% This Font Software is licensed under the SIL Open Font License, Version 1.1. +% This license is in the accompanying file OFL.txt, and is also +% available with a FAQ at: http://scripts.sil.org/OFL. +%%EndComments +FontDirectory/CMBX12 known{/CMBX12 findfont dup/UniqueID known{dup +/UniqueID get 5000769 eq exch/FontType get 1 eq and}{pop false}ifelse +{save true}{false}ifelse}{false}ifelse +11 dict begin +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def +/FontName /CMBX12 def +/FontBBox {-53 -251 1139 750 }readonly def +/UniqueID 5000769 def +/PaintType 0 def +/FontInfo 9 dict dup begin +/version (003.002) readonly def +/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMBX12.) readonly def +/FullName (CMBX12) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Bold) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +end readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 12 /fi put +dup 45 /hyphen put +dup 46 /period put +dup 47 /slash put +dup 48 /zero put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 57 /nine put +dup 65 /A put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 73 /I put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 79 /O put +dup 80 /P put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 87 /W put +dup 88 /X put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +readonly def +currentdict end +currentfile eexec +D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA +0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 +51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 +7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 +E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 +0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 +C01924195A181D03F5054A93B71E5065F8D92FE23794D2D43A151FEE81296FBE +0CF37DF6A338C826464BA5198991445EC4BE80971DB687336AE8F74B516E333D +2D8AB74D362C559AAE6ACFAE49AEEF4F52E28C869222C1301D041E7A0BC1B608 +1BF728EF9E98F3A12EB2714E7F16B14E055FE1FA0EEFB058860ACADEDA9D0E4C +42E3C6F1E4869471BFAA3760175F3FBD842755A9D7847EBF605F18293B42F557 +FBE2715002669091BB033E1AAD657532F34F7C66E4F04D63ABB07E6CB9D9AEAE +78EDE8B79DD9BC87A1FF445EAA05B5572BB880E69F4DE1F82D7F0E9980AB0C18 +22C448B0B1722D3CC33C56FF287CECB80658B3AF5E7675BE82CEFF3DAD5942EE +A03C955FF979E41E54BCFB5316A9AB8945C403A73180D0961416EC9C92F49811 +4B91BC4C788392994587517718521E416D469F69952149FF7F9224377EBA1065 +4A727BF806A112A7B45B0A1BA1D5A23683960575368D9EAC8C04753BF7465AF7 +95F25C258C63E4FDFFD0B412FD381946AA38C0B961652BCEC30322C47BF4755D +9F91880688AF066E32FFB22E1A52DE741307AD3ED830D6BAA1D1F562919666DC +5E8FD9862AC8600B0AE0BC7FC779252AAC57248744ACC8A8AAFA836BCF09B0DF +9253DFBB1CB77EA8A59D42D1B18FF25E9AED72FA62FEC3F126F030F5D7DED9C3 +CF60FE890BA4A48E39E687BFFAEAB96AE542A6387F6624486037C8924002A511 +BEE5FBFD780AC1D4BEC3FBC47A930BAD0280D444259528B6C565DE11DE36BB65 +9BADC55C1EDA1A80458E98896D782DFB5C137897419602809F9BF8CA39F00C68 +EFB9E076FB324C2963F23CBFED28B9EF70EAA4E4B903225D1F199A7162AB239A +D92D71C18B1B682D04C6A48926275BCB16D413B2A0E953E1257E0B12D8B717CE +2EC84CFBC046A4338A69F454A469B12118E562B4F56C5FFB3CA5D357513E6FFE +947A564B229C7FD873057D5C7CDF03E958294A1003B37D8DF565A70A00A3734B +0138AE5277D383D10C2BD853EF806D3CCDC47739F0E374A3DF3B63638B949ED6 +4EC25869DC1C0B1F4DBDFFCC97382841D8F10F3635C792139A1EC462FDBA379C +BE0990CA2E70FE73137AFBBF30CA54954D7E7377CC50BDD780DDD4C7FDC77AD2 +F3EB1169F14A0041F18160F43C24FAF556DB5D621709FBC544CE55424F7446D4 +6AC07A51C8CD5161AB0AD5084A96FB35D77F1CA155147DEF8D7A590EA6939514 +D4A226588295CE0007BA8A550895511C8D80BBE5CDFB8A50D249C3BDCA974415 +F5557914A9B805782F399E4078DDB6264F1A49A9A5BA45E284A5196E9828EBA8 +481D357B8D9E6ECA631A6204439FDFACE7D7E6A2392726107CB7D2517CD19A24 +FBE592C119626DB221BBB635B6EB84845C16A9585282E34958B961F4A543AF9D +419B6A9105BF185FC767712D923437BE08A9C0EB92AB6792DBDC671029B6FCA6 +7F717FCE379C0F3B51C6CF042A762ED04898FBB4B0105C3C4ADDDC18C51BAA3B +70A93666669547081D9246732CFF74C83EE90DA17F5B4F8BAF47FE4D81590988 +2858C9B96071341FA0A0D23BDD4947FC9BC2297913CFBD4FD6CA4303AB3179AE +0203F1BD502065F90CE9BEA3B52DAFE4A29446082EA0E6B1D7AF1F31D0AD02CC +9A7FACE2CA86E5FE0F6A425B28A5940ECA306891CECDB3CFC7A5BBC76B5D9E8A +C754379ADE80B4D72CE493010317BF21A0CF4A0A55C1246218839DCA3F4D626D +1F4161D38F54AD5142C1CEE95C61D8BB10FAD4B772F4955777AFDE8AE5A837C2 +A2BBB11D0BF5DA2E63D0B75ED421DBA9C789B281B01846B65DC572BA69591969 +21265DB722AE86BD8CAA3D887C975A617ACEDDFB7AAB341F47532AC0F354A530 +7662C089DA3939588774FFA16FC4A52555DED6D6F51DE718BF5F345C23C90198 +17B77CB8B5D53A5CE7A79F3E286B6A59F3F6178AC8BF15C0A15C1A8A95D03B60 +30EBE53DE328CE085CD9A1D49C69AA299C5B58B24334A546F6E274C1B534DC8F +3289553F560C2F81E413ADB92FA0E7DD1C2F39D5FD268EBA97AB7335ECF28257 +96B4EADB7D0778706CB41C7E9C882760E7670936774A1088FFB2011115FDADB3 +B69EBD5108760762521C25C968C3E282DC3400001AC8FB1EA27FF643E3025950 +1D617BB8BB321281708E496277E11DD3AE0023DA9F25AD06B39C7CF527FED27B +57397E88D3DF70EE4FCCEFC8A0927D6B05517E571B3E70ECC99F3CBA32CCD4DE +B8BF22626B6C94FE65598A88AB90D238461EBD9A098DADEA4091AF1CDD7560EC +8E1B9BC2321686E1759E6B8A270C8CB4A254F7368039602EAEAB86ED21CDED91 +8F2DB9889F46981C494C7EAF5E819B91C129F0740B8002B510014985E5791F59 +B16879CC6521D8E9F1C4C1890AC85A78022BE614BEFF318AB2616F0C3F02405E +BB425D1555472A2642BA7686E431DC3FB8A1688B76660D9957C3FDE8D58109AC +21B1234C9DDF3F0FAF93BCF7B2F88A001F23162E1A13E5E9118D51B485B70A91 +D0CBC39CF44413FD8686D9030782DAB58064F5B987E0402AF5B264B17BD31BD4 +FDF63951BECD73ACA6138854EF35B062D01F33073850D9C09A818828C581241F +A625AB3638081DD0F00F946BE5450D38489CECEA4E66B4D85CC8AE0157E2AEE4 +A22A9313829F24D573101D84CC1784D1CED7DFAD5DD966601370C6CCBB723082 +A86BBAF0A5D867D0D2E3CA16E14E5109A29EF02649C47E12E88B3B397D65CACA +DEB9940B92100744D686066F8250FF30E5F13D81428EE238A2E4E07ACE0F5C38 +7D79D4A336D0D26AF9C2B84088ED8ECDF94A1E3FADB45AFDAB46CAD6FF950B0F +07AA2CDF82374DA76C56D29C80138841EB13F0D02ADD32F88B23E282ECC845F9 +BB9AAECE9CDC644AC2D49577A92307A83A99434F6493156DF25DBF0FCF2EC21E +8C50A312C3D19E0609C0038554CF4FEF3ACEB7A833FD54B06EF0D617C2971C89 +E4C06075B09B84A4F78A82152B9A9C540B1D881313C2C74F20ED064A9606EC2C +B56D7BB4797F1EEF4A9B13579CCF311FA4A4DFA62D80FDB7F535CC6526D1AAE5 +45C008EAF024B48C377522F74D939A475970533E645B1BFA81997549AFF26F67 +2AAE6C2EFA357DB3B525276EF330905688777057F4E4CBF584520A534A8587E5 +5A8360891E75A15205E8ADAC4A4E5A6E27D0C4A7D492216E4BC023AB027F37AF +A8DC7579BA50204D5F45A51460C5BD8A5A7F87668CA6451137F2F59E117BBE28 +5C40820882A5546FA76F0CF49F8A6EC445F0647CC3227C400F56E7E9B84A6975 +E85E243CC1666DBAFF4E07EEAF3AF71BDACB30DAEA792F2B8504CAB071544F01 +5D66243D529C479D276FE22F7E275D9E7FA9C6EECA18716B2F213916E32C1D94 +6E32397B41AC6779543218E506569E3544803BBF9B404A983EBA62A494187B30 +8D3DFA4E1237A2E5E08224A60492C09ADAD8775B7CDB830520829BA164209ACB +BCDEB2D574CEBFB7AE4BE72DF4EB1945FEF2458761AD8DCC0D378AEB7DA002C6 +9C14A665DAAA532B0ABA98D7BFB5A6151FF6703385AF7AE8FD315A492FCCDBCB +B825707F9566B3B4943A3C61C3DEFDC31A843A2D67AB06891F3E110DD8C73D3B +B5E4151B51D9F13905D7D94DB9ABBFCAF35F43B6EEE256B1A80ED6D1739D8D5E +8C767F6F0E8704C5345D028A2A6DAFD9BB7AA048B8B895FE9423A7ACE858BADD +595CB074A128DAFE08FDFFD6BDAC0114159A702FDCBF8013804B0CAEAD7AF38E +FAF086A3248AD4FCA1401A85AE2F72E3E6956DC0996FE8ADB18F89B14A208A15 +13F81AF73D0DB72F78C4DA634ADE3C73756CAE6AF2E149C26316DFD93370BE1A +FB4A79F77A67C07CB0A53C78367F21661D4AFE9E27328E077B522B50FD9AE2E3 +DA087BE481515B5DD7BF894A96A84A6C78874100505B7DDE1D22EFCE8D58B3AB +313AB5495F72E2CA4E6AE22C0CB854302B9990372F1661D9F0A517F90686F248 +C5643008B3D29F7296E5C8FD4049886662EFDD4106E17C879F5D41CE84F87E89 +F6A3117C968B95A35940CC29C43E1E0DEF51C1E46B676301F40D59615C3F73DD +DE37B72FF7105DB84227DA5241583272AB1C3CD97AE11C1EE98FFDB5E5F44844 +8FC41BEA5C54B26341AFF6830D9D0A5A2901B0653D8BD0746838194D240FF753 +E99750D3383373F453723D86BE97B571B8B84D8696089B5CFDD53E6C562A2197 +A8C4FB0CC690C27761A816B441029D3D306245052E0C41B53025D8CB7267CFE3 +C17FDFE348E765326F91AEB700CC49162DF748171214252CBC821493DD01AA20 +417D66DF47EBEFFF3E9BB2B0A2BE7D9B8C68BD570FC2EB0FA54CECC318F04C43 +19598BDE93F2F13DC7847354C99059AB20593EE51E94F9D4E9241869D605AAF4 +9D9B5FD88C3798A039A67993C5EC68B6326B132E647F67EACCA7F7AE7F718D85 +12666E90D7C73EF210E344964A38228B236679A2B18F5E081234CAA2458F8D83 +3F0CA308D19663CB12EB904076EF88E556407C33C9380A6A3D68A9EFE65387C1 +A1BCD2D26DFD2AC0881EC30E81C0A4E76C244A2BD822EE88C4A60B480D107E68 +90E419A1F512E865BA922A7830909BC2611A80931CB2E9344529586726614D94 +3AC5200FB9FF68AD9686506C5EFA8788C0AD0251AFE7F95E84683380CDB421C5 +B1A783B6D5F3A6BD1BC1C14B363DB01C87C0796DCDD5BECF41A1A9F43183CF6B +82C2AE49F0BFDC5DEF7729F2E638EE6EA9E4D059EB9BB1B992AD8C82D501A550 +1BF73CBBFE740179B54E193E84A55DCD61B343C1852780FFB44248FC9426AC94 +AA2B3FE20FBA30F6C4D1E0FF3EDCDD8C0F57CCB50CDB0EFE2E04A8927E239C1D +9B026C7929BB48461D4D695FFC766C8A0E545B1BCC2AA068D1865333108E7985 +2D93F9B00EA0A90939D0D3840D59B6CC0CE2C147B2E1A9A4F14270FE3ACF51D5 +99F7349106165AD627CBBB0ABA01ECC6D3A14C1DC1ED23A9DB9865BB4396C51A +31ECD001EAC94B33C34E29C5611148EF3E55DD61813470B8F3CE32564C749414 +3C93C77EA5A3538A0B5AE3FC4DA32813B06772E0E48E25BB39F3F6FDCC077E86 +F86FA50E18FD19EB2F37311CE87F18F3BC85CE7FD71CA92D5C3264E34E04A2E5 +70C79D99F54D6C6D9D527AE45EBB48411221134587D2253E7C8ED7658EDCA34E +5E768DD14E0200470F73C44D006CE8CB35DE1CA3EC10ADC668B0662A7774C891 +84EC95A31DD872F0728D9F65CA80940080E04630BE4DEC77A2C49E3913C39978 +BF145F8832AF2C4385EBCDB15F9D32C22CBA0CF950877717D6F1591D7C0B8047 +8C9BFCB16AF7124ED83137695F3D69228DB633053208C29E0ABA1B06A7FB3EE7 +5625CB44927E2DA6E038A6E62DEBDA2D96A03177982D8FA33BAAF4426E05F4B7 +9C1748B3FF7691F9888E7FF864A10B9DF761A41E6B5CFAD2BDD7E1C4924AC97B +F4B352705316DD1A58637CC12D71C18A5CA691AB2AA8F171590EC24582B1123E +94D4DC587D8F99E18A711776BF4013C96446BFECFEE4C809EA94B169088024DE +0CBD20199A915AA406F0BD5F3D63D1467C49B4691AEBBB35ED6624F2D7BB74BC +E80FD92B9FD04DD9C2BE9B6FD29EC7EC07FAB447511C61DD299C783BC09AE2A4 +7B3CBCA6A20C6631D06D0B2E2482A50612BB7C29B7E7D0A205EB0E8436702581 +596BC996ABD58CD8D5BAAE4B1478195CAFF98FE0141287296C4EFB8D2E7A8442 +F0A3AA9F9264329982532295A176BA1867EF732BBAC49AF485D9D0F7130F617E +7F7DEEF935874D55A22240F8EDE4F247D5F73481373A392D40A8076BD91079E1 +1CE5998BA13D48D56B49A92B4A18430E316405D2E2E391B496A1934671FF1785 +AF42BA3B2D14B8E04014437FD194455C50289DFBA61B5C377BCBDADA48E82DEE +4E70EF5E9DC03064907BCB8BE4D59DE069FB0C0CB140DA54708E630767313F9F +744594AD8A499CFEF733E640A11FD74E46A749F9C7D18D49251BF85C6EB4668D +67598C31A8F90922FEAEAD4B83B6E7184567DC798E4BA1C4C9B3461A478D63CA +054F13B502DACB674EB49D6BB935E5EC82BF99FDA7D47C581AD7F940DF4FC6FA +6C6D25D647033AC69505F0CAC58DE99087F365531A6283CB89CB644688963C3B +8B2203A94294E58739EF23C7803630A1F9121D62BE1977DE2F41687C8CAF87FE +CBD7AD3B98E0D95C8C6E1A7CCB0E09465AA874DC90A0F5DB2C5E7C130297FD39 +EFE63B0350B5139D09E6864D22C3F1150B29196E40EEF9723E71158B7ECFB8E4 +C426FEDCD439420B7F1C251FADA347C9A2C49738B5A17922E1EA93CA7B125B76 +57449EAA9C1D591CAD327D0E98EF2D44D614EE9ED49DD31ACAC0B956620B6BA5 +5BF6D08CA7541059D5ED2EF00AE2EE95488F5645BF6837D9241C0D3959B7580F +C9ECB2BCF3E65C07D52EC9CFB21C11CD4C883E44C173214C900C44D2E1E43DD1 +CE8DFE3DA93C38B548BC4EC46FF91F30CFB97525E1FD4E77686433B20BABF8D2 +848C1CDF1BCF185CFD7A81D2D4BB826E837E2AF35CFC4F419F698DB0C43E9F9C +B0FB628AC9A3CBE9B1FF4A067016E70333E78B32AB2D89C483834B31F5808FDB +77492E099F1504DABCA5722C7860CDCEDB2DDEB512FFCC7D287F4945FD711F28 +87BC3D36173566B81FC2C1290C717A09697DAC6072408E20926D39270121CE58 +3EF97CE12EDD7F87F2C8CFE36C3C0400869C0D813B71C425343EE0CDF717BDD8 +409D5297D0F8F7FDEB0257C0A391F5635E0DB1116058942FF3E7C94D5F2873A7 +A3B0ADAFC3835AF2BE474E6741319BC6695FB37F59AEE388F81F6E66F910000B +72E6BA7531B4378CEFEEDC79CCF4947BA1703823B5AB4F4AD73D9615C66C489D +99D68E49C9BF765B7FC547BAB9640D51D5A7A2396507AB5A4DFF3D14F52422CD +8FCFEAA06A56C6C7FFCD29C9A7A59DDD2A909A9363FE5F1E9629616D25ED38CB +E754C059E4379318CC491C3B1A90128693AC53F80F8210FAEA7EE638902A7D3C +82B95B3F5AE340EC1B648DBB9FB679D6E80B7F426D8671FE7136D97F51E2D2F3 +C9CE9183E4061CA40091A2A70DBB9ECBB19CE3F65ADD0FB346B54BAB182E2CD0 +EAF4C0F402C25573FB344EA771B297BEB615FCD0595172E84ED2A62FF8962634 +23C19076C2A9ECEED5135994EB397303A9619C76DC55E032DA83FBA441BD484A +59F70A5110A8927F6239A14D4E223E189A5462E4A92EAEFFA4B961A2A32B320F +C2B4E8C1821FA67A655B5042C15E4DE1FB3652B55078DB123573C4E986B19DB0 +1C5131F3DFAB271C30A5476B4A19D8FC922E31879C34BAED94C07A4841B8209C +403369FB8E842610D1EB4662B6171A4465FD0E819964F62EC5B0ADC92F08CF90 +1DE0B410FFBAD16F6D355E8AD72CCF67961EDB6CDA82398021007C2D0462E893 +75EB0710AE4A6CDD15077C9DEFC5774EF4A657734D703CE42174259B58E5277E +0DF26BF59AF8D1A3E7DC12E3C12AA4B67CF35B19962F6950C2020B698D971B35 +82FF84E72F72FBB0C54A112BADBAE6C4CAA358BDE6A705AB59332C3850CA3D25 +C7564499BC1319121CE0D93218210C68080AFF33420E3CB3A48BF9EB66BC07C8 +A79D8CD8E78C200FF7CFA3DAED0B9E87E6141C88B436D8FCBA50AC195FCBB9BC +9512B95FE3A37FFAAB39850FCEBD4D50A243EA416E73F53B4B00F3B6EAE0CA06 +0693AFFEF215D00BFCAD02E45496D7C8F5E99EB9096FC4300D038C1AFD31EC4C +5ACA6B72C1BE7204E37A4CBBCB1EC26AB87F2FF82DE20601025169A5FBD2D060 +62B5B2DBC288C79C33B596832AA18D730AD572C6EDFABCBD36DEA87C0F323C3D +6E537AD3B43C6F3A905597570A8C6B0B4A5E08C08EAFF9731E745F2BA8ED0C0E +1ADF7821CFCD4E38F3F4C243CAD31D9F8FC68B9043740852B4CCBDD37BF728E5 +648215961FA82A0C847ADCC5187331D0863A4573BE520C02CAE14AED4F06B3F1 +FB4A318AB54CD86DEC824707B29F858FD726A167F2333855C0575EAF4EBEA0B6 +754B1775F967140641FC06F82B191244186FF347A351FBD8FA62E8C978B21F6A +E124929876488AFA97FAD1A68A0C3496BCA768F4AF8016D7A65BBA3AAFD7F5FE +E75FE714FFF3D54D09C9747ACA01CEFD260985C6E87477C9C7843343C7E9E3F4 +0537D461EF019E046DB8B5BA258462B2FAEA1826B3410BA3333480CFE0DECE61 +CE2731FDDF7FCF2AEF7CC2B1EE7095F480B3B27D78FA90FBE923D372C680C87B +7F0E702B8FECBE0CBCB087ADD6D28549FE707FCB616448B0D94CBDC404915943 +66539B177D5940370C2035D0FEBB3A3C666ADCEB45F5B15DEA729BF86BBCC309 +0294FF267657EEA805DD28DF5DABB6A7B71D004E91381247F415B3723C651F59 +E431909315A3116090A5ADB8F0EE8F6AE295C7E35C0D7DBFBFC166F037592B16 +7D5FE08342FB4FA5F8917890AD3B65472B2F7942C58D22D4D1C4E68993DAC227 +E1FFDF6DAD0609A83A3F859773FCB1D303EA09D6AFAF573599096E2F5B2C2230 +2F3693CFE8F5696E867B18CEA2D326BDBEDDBA7FFBA2B898A0C0D750C87D46DB +2EBF18A3B4A755CA55C4E18D6213F91DE30CBCF10E761EFE51A7A2757ECD1546 +9A5885C20029D8B356139A9FAD7C139BCF3BF3866BA4E4F3C07DDC4D83B4CDA4 +A7CC1B3D354FE93D8C364927835EFE48AE8A45BF56946998530269C80A84B04A +0F1D0B9410A17F168847CDB932B3DC45942A869D629470067AA18B9217686360 +E26D83C17240217E220C51EFC11E7AD229CB15CCED719FD38A376942D5EEDD46 +B2452DCFC5D3189CEFE38CCB5C90CB5B9D10CDA0385E885116F2642CD37869BC +08F1D693EAB827003ECC87ECD984B89358A571A37D86407FB645DDA209CC18A0 +2AB65E06463312D48584280C888322666AFCFF3C09E6E9CAEB86D1264A09BFDC +85A45ECF1D6ABACBCF01650014E555FB6C43829D16B8AFCFA730C0D910A61020 +8140A2D918AC80813DA9C67C2C6B3CA1BB53115EBDAA0B3CB2EBAF5DB938AECA +119815951F54CE148D64844516AA4B19D17048FF516C10C5F3B33C6A08153E1D +7DF66783CE0499806294DF6928FAB72532A7A1BB3C0C516130664B2D6D5E0285 +C21978BB8AC16E106ED26DAB5B039E1DC3B92A4FEDE498065E574E58403BC25B +4CF360BBC5CF56E4987C4C16C9FC939E824376789F96229B011EF2677D6DE8AD +59D96B9996AF4B0A1E4A219CCF84F1CD572773762A5E69725F13FFEB701394B4 +ABCB9512C24334811951B8757A9534859D5705750CB30A1F61F0366CFC75FB52 +CA2A5662890DA557C9E1FD52A5763E2A1A58C4B3C35CA0C6201169995B98DCAA +E7789539F4335566644E5E1EFF07DF3D0BB5ED9F54E7E46272D80BA7EF73B5FC +50D05C8E3F2963FF15F22DE6C9243DE4317CFCA8515F5CC8D0E3342DB81142D4 +FD822AE9F1054C80525A4B918DB6120387263BFCECD948BE6161B7DE9F8CDD2E +4716059B7EDE5C91F1A80236419BCB3073D2238C47A773D0FAC685E4BD0B504C +F190FA4ABBC001C639DDB5075ECCB53EB53A41D99BAC97C4794F551E4A34E87D +ABA419227FA74659FDF5F5B934694FE5BD327086D7CA15E88ACF7D5E041708C9 +8C2C12B050DAE9D1E112AB3FA5D91BDD00C42E0C03C03FB74174D9E02D6FB3E5 +80044FA5E9D9EE05BE46D6D1FAC58D9B720F5584C67969613511C5ABD9B5B86A +C65732922AE2366550E1FF002C2B93C286EC8BB0E1503A1F14A011A0CF82978C +3390FC3AC1AC2DF0DF14AAA60460B80D82306DB1A420C9F03650AEFCD8FFE836 +48A619D12CE2473670FF6310304CE2D317E6C7C4AE5A0B1635F66855F6C89676 +2E7FABD22FBE155D1A2C5A11C76A10695FBDF4C347CD9B8CD07A20AC88FCD513 +877987741CE4BE714804073767DFE5B276E325F1C62221F4730BA23644717206 +131642D598848D3ED015E30DA58A7920035A61A9434FFADD6EF7C4119F7A3967 +E71737A64698C4A0D1A20C509BF22B1E00A353E4BA2C309D6FC8EC57EB89B7A1 +3FDFFFD729B690A6D24A0BC71C6B72D6E305A19BCF038B9058F20BFE39E4D45B +1D53C68F4A9C3B31CACFEC2982342DA7491857136FEAA880A1827E80CC4C1D1A +0777414C68B551DB90F7E3176456B615920B6F56AC7F805E2EA7071BDD50115F +9900152ABF51FCE0F5FE546C75C5C75DA556C0BE01B1BAC49FEB4994B8D61CCE +303C2A58553AD31EB9C02AF6A6CD50D4CF9E34B1152B61DD0250BB40D7ACAA03 +64074FD026AA04A3C49B67A70D915A1C05CF21D91B1AF87EDDAEB1BC373AECC8 +A6A14A8F465D4766D3C7FB27216207C6D93AEF8E5353C6FDD6E0356D4C87A530 +7910660F1EBDC5B1DC85EBEAA9EEF36CC8D2AED67E42EE0C9CAB64105E799680 +0B2CB3350F8194910480F0435971FCA6154C2501CB9251E4CF2B37D00F1D80F9 +303B79FB5A503CB366B833CC84EE21E0A6641746813FC96281AC600E00544049 +A1E208E333E1DC640A34DAAA186B312EB6D5F8284B7F94B980ABE7972B988FBB +D562C51AEE661A699DE631CA76F40E85FF848FB9885161F11CC6ABEB5B3D6FAB +D27E57EAEE1803DF0B9AE156F877732FFF4A86F5689187641D296B6658F52993 +181A7610DEBF37320B355D45BF44217F1FC1A124D3C962465B32A94624E5729D +E168C57E98744C114CF8DAFAA5D3CD3705D10CCFEDF9CE2640183CA4204C758B +ADF722AD70C1B9D1F9E68540E8D63BC3C918AA0859935B78CCD0D7D7A45D25AB +7DCC66887B305BD6908AF3F5418CA41C43F0F5A9580D17A6001774B8E1DB4A5E +96992867E048E8B3C5F7533E35305106E7EC6465504CF2EF1D57E7253D400ED3 +4EE06A8B8F462974204E5FB1DAAD6AD3BDFD2CD64AE8741701D6AC1FE78183F8 +78622799D4F3FE60732D97AA5993A832C8CD2DFB2224022F45F340BEC5E9E832 +B4CD470C1EE990962EF61A2D41EEF284C62EE027E647941522BB5F9F9C608827 +2569970192B32D8CCAD5E090A5EB55853BB2A7FE3A982326AC7BE414425DB460 +E54409225889675B65F666A1A8DCA63A787D308799D28BA394F2B38451E89882 +84B59FD092C0DDC1AC4A2265D1BE33FE548871CEB8AEEBD84B53A4231A72DA05 +8C0E71C54053FCCE1AE51479853991112B672DBA938A97749154FB0B3557CE6B +A8FB54F4D3685DF1A82A7E51158929215FA322808FEE9B17E02D02947C47DCF6 +FF36F6ED59E66FA1BD04AC0AF2CCA4F525AEF758677F5ECF2CA1C892C7235151 +E21722C2B7AE48EC3D72292C3902039F5EF205030B2F4B333186F6A34EF42FDE +AF32BFFB7082D67DDF250E3AABB0B3567DE1F4BEF5729D280CA1258CDAB72E6A +28963014D3DA3B68C2324B6DF2B13DC89FD6726C993A22CD74EF13A4BAB6849B +E7CB4FA37549AED5386AB76771C2C8E95FBD3F6E244525C048BC50D5A3A1D22E +E144EE66054AEC0FFB6C8F7D732559E032E217943641B4B736EF02514C6FDCDC +0B82D54898E44DD745228ECA6D2ABAF7CAB5035BF672B7F2021C3A612869180A +1DFB2DD6F7E8119B5253F61A49473F9C7D35521F10CB64077152D0D23E77912E +7ED0B2EA1D685086FB16922E1FB7A91EEE57CAA764978E496BC56A69812092E9 +2DA4D04DCAEFF97B267BA8F7EE5154023B7A3BD80EE3CB0CD404049E0C3D16C7 +6265461EBB8407737D2AFC07162D23FEA093C63019BA6B85E967DD2EF2C97E22 +D61B5B845678AAAB99202C6CFB095B6B8A1CFE72F07ED3DD17A14A68980BB8C3 +A1E04633FEAB19789433F08ED91577E5E2491FE93EBB4937FB4034C8EA9D2297 +AF8E11F48CDD0866E05843E502BF63E044ABBD801D8ADA842562FF23432F7274 +0E668DF5ABB0728C7D64E626D42D416216BF6229C4A5D0B4F784486E777710F8 +90EDAD8F2444B45166313D1BEC1B9AB520486B987D7C4F476D445B9DEFA5ADDD +584C6E301B2215098A05AAF9CCCF3BE7EAAE9B8B33C3C4C917DE6441A14A5A44 +248893527BC01375F774C0FA90C709684A3651C87D5AF2515C0D4B2AF2D97924 +D22FBE194A13DD9B6158905E370BE7F1D212D2CA186B673FDCC5356015989411 +A9609F8473F78AB75C27EDC644F8A460912EBD78DE25C3F7E814112F20AC1995 +B8D720AF2BCEAFD2F30F6910410D168E80A2E8D0E6754B0BB7539BCC15E225A5 +BCE15745DD67E2221A3CDDAE730917FB0563C909B7040538B5E7641C17BE6FFA +913607BBC5F85B0D12ADFABE7A9F8965D10651C94BD3D1905AFA653B850C9553 +73C1DC314DD89162B9B109757176652CB42673EFD926676E9B9195CB515FC34B +2812BD7D069B627ECFD242AA9498606A2155D175117BE9926A854DED16CF4F25 +31D7FCC8A0ECEAB9AA6D0C880182E8C3218CA53A7628EA0EDEEA367BD1F47DA4 +77031FCE672A66479BC6D5A12B5EB6D2DC10C1B4E10BA2972B9F3E1806CD9564 +D88955610D1E80A6E5278E8BF1F083EDE7933D0C5525F6114C5BE139372EC6FA +68D29B1CE6B485CE5FB423D80E809C9AEA33F1B43E394B463CC33DA07AC3498C +D6532C3ED58F7835EA832174189FC324A7867104B1E8754A06B8BD9B6581C0FF +49906BAC92023F1671A772F0D21EA57DAE88FF2B7727987E3D3EC475ECA20D31 +BA96015904A963E248E07AD608D1B34145F3EFA1F69E6ACEAFD78908529016F4 +C72C03C78EB7D2C67A73A5BC2D85810994CE916B53C4C5CD60E58ED05F9C93AB +F06BAD33A15C332384936DD59A9CC3D409107899E096B2E7AE02EDB5ADECBA2B +EC5A4F170204BB9696D4806F0B3099DA4CAFE2D2E529B1EF17DEF2C4EA306AE7 +30A357E94B8028EA6850C70483213C60B3D257150035E4C5E32060AEE2533891 +09C35861411A23BFBDF36000F9DB23B365503F49BCD2A134EAD32C2C20DDF725 +DDBB02D89A616BC2032B2C0666B33715948A160E80FAB4ABB396D662716FC1D3 +9944DA5F7AC4AEAAB838CA3AF620151BF840F22C5075661BC683410C726B6C9C +18EC021306F335622395C6227BCAECC714FBC9436F67ED4051A4F51D4D5F0843 +968F59A7C871C198B54F92058B67E73F72ACA89CBF2CA6A2F7ECD4DEEB154FAD +706008B1174DCCA69F5FFCDBDC1C8E9FD454996D3BC830CB0F13EA777C349978 +0B18E4C33AA64795C6B151DC2546A9D82AF3D8E6360066F8BE15A8431D222E97 +7926CD92541669A89B976F9781C543BE5932E9FCDFB7F114FF576D3315BD3B4A +F7C9BFA8118B263FD5007F7DAB616B6EE04683E03E456469890FB878F10ED1ED +9C034FD690364078F3E03DA910ED833F50BC57834916A7CB65BCBB4BD980B59F +6FE0CE4D988F936B13ED085DA2729D1133F9C417DD2F663DEC20F992964519DD +3555825693AA815D60DCC7B4051525C246E9AE5887BB2D6C9EA20C8485C037D7 +1E4672A4392112A927473810D13B861DCAC2D9B9CE04519E1451DDF8DE23AAD6 +C2FF6F8E7AB06832298BFEC1D28CC39F204C49A8C3EA2EA3D1EEAE27AAADBE25 +BD0002C336FC4C4F91B89AF330C2230274C25BE75503458F945C2FF8ECAE6AE3 +ABB01D7A56C9D7B052F1B9386EE9F656ADFDDD68F10A56891BBAF42CF3A81BE2 +CC98B4B9453D8ACF30E703580BA2788C932D6C9C9DCCF8868E98B6EBFB6DAB2D +33236A77CF940210FE27E796371B129540723C2F216BEB1A3E240A64797A0B5B +28B2EE3A781069FC4C7AAEE3A57BC008BFEE473CAE86AC4BA1996119246D6706 +C114C75D6C0318A5835E339AB8E68E586C15FE50BE15B55679486D3309468289 +1AE95CB9AB4587DD7443AB38CA7C19E2087123EFC4FA2E48F4FE6B1BD18215AF +416609AA9D21E3039C419FAAC1EBDCAB2D5298F58CD87DCF781203BA4E44438D +4FDE8BB651800AB50B5407AE224515928FBCF7337082C2EBE189C0A614ED9005 +ADF8E44D77774D737F880196EE269DADE0802FD27132A03AEC7B2E3450830B8C +3A5C6AAA02B76A42B3C01BD3C0E36F58860E67CF3DB1B75CE191920ACE608FB4 +CB4C2C63D42F78490DEEF35EF1AE6A425ABF199239E6AACB28D629648ED118B7 +6AD6529A182D3ACC8A27802054FB55E5063B3423536EF4347DA38C7644CB5449 +DA861CC41056BF3F684E30F7D4C8C270420038650732B777A13FF01BE5FAF6C8 +8A8C8F9A9463BF9204CB961593C1604E8A8893CC655AAFC06AAD5B5ED25F32B8 +BFA326C2DB9FBF2E63F15241777D4CF02F52232DB36C8004462DB106AA2AF3D9 +29997EF8567794B7DA7D6160A6373E2AF3B9D00EC0100B4D024CD66FA9214E5E +2BF5FB4C7BCA4315670FA0103BE85FA49BFABBE99CA42314AF2801D028ECE6D6 +B52FA6A21AB3CB83C79084A9C71516582B0C5C53F7346691175CB7F437533A3B +8A66A2BA1EFB4A3140079829F7668BB4489076785AE019C21FAD154FAB6C30F7 +D190C6B2FE6A52457089688A60B5B168A138332BDE0EC9573228A76E94EF538F +D4AB4BD467787BF7B0192DCD536F8F88CCAB88891097120E2D77ADC5C144E202 +EBC4CDA18F43A475BFA9455E7E44230CED292F75D36AD92CD47D7008E3288ABD +18FCD0F77239D048AC59D64B97EDC5A96F518ABFD6FA203A55EC4976489EF969 +ACAF6A34E3495CA4D335530791757EBEF5DEF56929884734F7B7C2DEF6269715 +6C1FB90DADC1A41DDABF8F8EDEE0B6E78A42B23D5985A5BCA0841B964CA15746 +EE1796E9E65DF0BDFFC97DB2CCA9B11BFBD78F517AADC23D2A94792FA1482D90 +CA8E0111886C9CB6214EF6A55E75D61A8A8ADB81500B03843CB7D440284DA069 +D7E39A8A5F4CB43BCF71194B85AE7FDF7873092C1AE2715A487958D08BE84EEC +46E015BEB68E5FB8B58CFC404DD4012E0A72B3B3D3B3BE14349DEBF2D684C4E6 +94E276891FCDB2E072BED7277B7A03B424FD231EF02A472B141E89E504428BA1 +8EB5F5D3917664113643CBF1D9DDAAF803B1FFE91D29C4B00FF725B1A1382454 +51D47A9537EF8043AB429DF4A4DF0ADAA648834FC1CB68EBEE8BA3A78C55E316 +9D4531B98C489768E228D11CDE5228D267D8B518DFBAB4E65597E1E6CF6618DA +3A6748B23E4887FD7723EF2EAE06263FDC8F588DB0538C43210ADB19D1FC00CF +C3532743621A5B7EE0F0C947E208AD177EEDA005587B321C91DA2EF7558D8FF0 +71976BFD6C20E65321F9876675BF4E85C985992E29C0E81DFC148A5669BD7AB1 +D2B8C5D7567045665A0BE5AB78ACC62DBC606C8BC8BE72668422F7C34453F79D +1D139BD531AE59496BAD8391A28B8F90A796CE140BB827D5B0F400239513C462 +545D26FC79E1887065AEAAAAC827D64093B631C21C9EA4785463E7F0CB4EC970 +E77A97EFD96FA07BA7948F8E0EC73F0791D7B43D9D3132230683D9085A663965 +71E1F854A9A63DABDF52FDD089C9F4FCF15BD7B46BFBE6CF0AB7C5B88A8592CA +C085CE41FD15F5CDB0A754B4E74E72C0C42D1B8E31CAF1435CCC9CC7A5057E98 +EBBA851DA97723F22079BF4B0258C85C2E1D5967F5FF29BCC9270BE86E59585C +2E929A51A9486AE925E4DC135F4D8F20CCF716EA5364A85F9CEF91389E9943D3 +EFEEE6B35309899900D3844EEFDF773D4EF5D7D12FF737F0BDA0438FEC8B240C +2EB9F4B8D7B2E245882CB8CD1E6DAF06C28A67994D159D4C88D2F0B0C0D23B9A +4C1ED644E00CF218DFEA43DDBFAE046EEBAD0D332226058AEA329BC85F69E9B3 +1F0CC47264196FDED22427A1F88D82B4BFCB46B50F6DBA87DA83AACA9E62E69C +D71479AE3BBB599ACC52D3983BBEEA42D1B97224E620A22BD378695C9BA9CDE1 +0509FF5F962082B688B786A3D5D0C5AC21CFD09B85934C34CD2448F96A6B1807 +A98AAB7D2AD5298A389256FABC0FC62A0D85456EDA49118BFA5264DD037CE55A +FA985E515E591DEC2623F204C4E7057A6901898F9D8964AFD57F4B0D4AC79F15 +FFBB35EF968DCBAF5B042FC8C57BC91FE91B4BE2D773082B118C38A57A7FDDBE +03779C4EF91266AECF14EB23AAE9075548F9A9D6BAA7D7BD3B771BDB6F37BC48 +3985CAC11BA5E826741A3E8DD6B0320E68FFD39B9E4A287A4AF340D3738D96D9 +8AD44BBDBE68EC122CF3A5E1A17A1A5C5478BF91D9F9F55055DA8AF421845771 +CB36B067C263BE913F3C33880724DBD0242281D8735593F13A8C4EAD2ECF7EB9 +0C8C93DB06CCE8A05447405A7C43CC6F92FD49A4CE7E943FDB747B9859B9F8C4 +90588C8E489646E46866E82ADEC333014E6E8A45F0B496FE54AEF91A15A2E0BA +836AD72E6445F91E0E06DD4164A97731F59B60B1A46FBEF80395858B1EA75F7A +36B246DC095555976C546D7697AF32D31C83C4C0C5D978B0C62B93E1AB2C2F48 +0803157631A16B5E8FF34A9E756C6DA2908815C9CD14143273D15472013791E2 +1FF12FB88B34B0785102B169807EBF77189EF85107151B366716D016791E2A97 +C2E9560778A1C54616E7AB057E131D63D2465A6E0B0C55B50CB63929534DDA5C +125E57D805B925A4443F3BBF3D16D31BF812A67D8ED5A6A72946632537E4DEDC +D0BAECE36F04028EE2E5C9695383358D855FAF0749D6AF131368C3ADBBDA756E +95A5A9964103BEA1A561186239AFC87694206E6EDFF49966DAC73CC3C13DE343 +7A5164EBF38F0248E1AFBDBFA0CE1331F97C687EC8EF077FF25C58D11A0E7520 +4A111D5A90D921669A55C92E905408855A0C99103E42571D128FD0EAFF03E970 +6F3A79F55D018C03A5369F3EB50AFC61305237D340E0DC24B920EEB8C5F6942C +56D3CAE8F99B9253A4B1B9BD61CE98B2E95361F9D97FAC2F4532F1718D374D0F +092F4666453679B742938CAAA9FC894B4C59EC0940D75D38257B2CDE928EBCBB +7DE583835CA1D6A033AE0341674FBB203BC91F46931C660642FDF9F59D46C135 +4E5FC1A68734F63083B9E82EFDD074ABBE9B5AB9070C77FB9277606BB5F656D5 +42A4FCE98ACAF597D51A1EE37B081A9831B2B50A47CEDE7F2FFF6F4C640A05A3 +64E0DB2BAED6EBE8A256E6A8AD22A9BE340F3C0C8EAB1BA9ECFF1B882B73C6A8 +422209057773FB6D6C087AFEBA0922338CD73AB2E809D91DBDDE557D4C512E86 +A9C78A8DD4D22C5A9D0E6BE107AFC9A3651557279334B60099F574B146D07552 +F7D49EF1476222E376284CB2E8E73C2D4418F76D6849E3048A5B2E3CA30F9436 +DF0269D126118A00826639E44B8631D092EEABD03A33DD031F274C16B1A615AC +ABD91CF310E2D98B37D2143241295CB6B43EF594CA5CC879634A6927B00153F5 +1A94E210F3B7FBB99D8A1CD56B4174FBD35FDA6FF6B1C93B20D730B43691583C +55DB97F1A06396E8B3AAAE294D5E0D513EC332A286EF321D22535A5A7C107FAE +081B30F5CBEB7AF8BA1D69A7A7E4E7DA3F851DD3AAA0F70C3C24EEA69D6977FD +795BAC0B51D23D7876CB7D34D476F9AE4AA88D2AAEDBBF9A9D5D4D298EA951F5 +69819F2AF82A3630D55E7DE78DC8335E54A07492A19A13DAE03BCFB7353E27B8 +AF54163020D3546D92B935685843B61043DFEB6CA5134A735CE3A205C3F29825 +A6C758B203F7EAE65A7E4474EBA34ED704AA223A2F809626299B9242400E42C1 +34D679E57E1C954BB5300CF19E8BAF32801EEF461F357287D4277FEB2DBBA19B +E783CC34EE84710E6C8362D326B17483599767846AAF663E6A7B89A03FB089EB +7FD4B6ECA63440B74CC49DB2C53C0BF574D83233689402170A1375C3B23E0786 +4A52EF9F53F15F871D5860F4B439E60CE6E821FA5225F57E5B28922E88185167 +9989A4589D992921FE039B7B8118BA4615FFFE61693A75943A77BE0724FBE556 +ADDDB26D68D9014A365ED3D237731A11E2DD7D9AA51E3DFE4E1C40E0D1533E7D +21E4C4625108019255F71968EF2F89BEFEE4E9BE9A4B975DAC52DB0E3FC24FE0 +BF0C6AEA94DB4DF19A7964676D72C7706DA7FDC9ACCB80E59E0C69B60A71C18C +D15DB7EF042C58DBB38B63C81B961787D428DDCEF02B136A7EC4DAE53AC4F1B9 +BA74E3490C0C4D99742C777FEB8E2558CB627D78E5FC42B87E17AB389967964F +6AB51694215582BCB587CCDA2D1AFBC8E30F56763271E55849FAC7DD65EECF04 +243204403EDFD1D4A4FCF30554D254A7BFF1693623248E04788897E45A72964C +6FA63E1A9E5CD923104D934BAB99ADF847E2656B739D4A5CFD3DC7ECBC5E6148 +4084013ACC36D4BE9E7100D663551B64E36BBE99FED5A3353F976C373205B7E7 +7F33363C29A5BD36932B50E9BFE2441363AEA85B32F3F0A1889B795068187B85 +FAA0E5B34981AC5687785DDE5D8FFEF98F82C1C4A6D8D5B1172F121B13DD6C67 +6517E553E70270BE7D9ACADD018AEA11239ED14A5501854385E6A40B03E973DC +1FEE444C8050CD4CFB10245322CECC1F0F237CF7A1B3BEE10842B238D4693EAD +B57592FBA63A955D6763EFF0A007003A602FCA61BE2434922A811742DCD6E65D +5C5E054794124C14A81DDA7A452B787C6F2862C3857BE32B71E43957D8992D91 +2DD8888D7B66DC2750615B8644E6CD2559BC1178028EC68D66CCEA96FB62DEAD +AB30C790C5736B44745C89E3384FC18444A3135F57216E1DE5705CE4992C7129 +0BA6042F3A1C2D68D42FE579D48E5D71C79EE28232D79C1490A69C3827D1586A +F3F54704F98AB482599627BD8EF83362D4CCA5D5ACEA99CD0863933852E6F0E4 +9263657CE5F3128FA8B4970BB7BE185B0DC3351CB99E05ED3E03C8BEA7F66BFA +2FD54BECF1E017AAE03B1341F384D8EAA51D3E3D878EEB587491B60E28349123 +C06667C604018CE1821FFADB76CB0BFA9DEDE0539E9AF61AC16408D6732FB860 +93B3BCA78EBD0BF04F390D4F88C297DF5B973B2A76344EEC3AE27730999F7E20 +90950066C9AFB641E8A399C9EBFE4C42F57F965FE926192E24085D4487614EBF +163A248F9A2052CB37A4C3DC5C87396100CB079CD1F29D720B3DD43E832D229D +CD1856FC52C5B4A1B41B66AFD8A194BC7296641F3FA7023C5CC9559EC0D2389A +2BD806D255A7129BFD584FF4246B092B579CF09AF23AF59313C9353715B3F9AF +920F8AF936DFCD834AC0E3D6FE2AFE9EE678892DFD49889AB8B3A98318DC9C41 +19F9F06427D3C0842C7B1297F998A4A418C35CC6E1698839653F30CF265342B9 +5D489655750893D1FBB2FCCB3416E0A649322B8E07E0AA99A549356F20624E4C +C1A488BE36A1FEE7D46AA360CD8EA3434E24F70C8B65231C45563AE589DB0EFD +AB15D028A6B11DC7F05689005D36BF7448228327D6EB5EBE192742301C9FA0D5 +F6B660AFC5B1419A3F4759DDDC5D189573658911078AE51A1634D472AC03D419 +801615D6C3C5D194F80CC92CA2769061E9E130049F22032EA34BA39A31FBC065 +9013292C481DFA698E2417DF30BA6035E8B5686488B1515E99780D2EADE876D7 +31041C0C986F31495B7143C249079DDACDCF4A2E7E83537645AE60D68291254E +8AA4076B44068AC5E6980C3FD91636A2725188E623C5637AE59D839DA12CF247 +09FEEA50307900AB27DB9CC9CDC88A25E1D78EAD90A7DE78EF3045F0CCECA7D7 +2975998866837777B5D9B9895C8CD1C494FBB129C4D02FCA23CD9EC08532CCE9 +1F262A97C588A09FDB1464DE7E532A3129C65D609C02BA7FE221552601F459ED +FB88F5CFB4A3EBED73460AEAE2669488B528176747E4067A7BD8F85AFB3BF237 +CB00F1C0AD0AA5E25D8BEDFF7C8A4533B56B51D82C204BE683A235B8FF0CCB8E +46FBF025A784E6923081199AE2F5458E53667B45074606335F34EE27D134C109 +0F8CBFBEA45DFDF4199A27301BBC190562CCDDCD54515CBCB9439245AF95C620 +1764B0FE0E4C46CAC634292BDF57DBA10E2043A8BA45D8FE670D01C588C48AA5 +EDB7489839B6BAB1B6F2AAACC921B8E26135DF45942C3E20E8052549CA6B186D +F4D5BDA93AAC2DC7F23E50A81E700EEA9872C8574202F1C183D7587940E38608 +51D165AA7E8474A2FA78A9EFDE259C74DC837E82A8C1BDA65614F3C1605CC050 +7A9977C5D078D45F422BC7E327C62A43B80A127E623F8400CC55FB45900CFAB0 +88C6246A4F05BCA3A0AFE7352F0F2CF77FF5F001715910F8280B356A17CAFB78 +DB43081520259E452D79CAAEB5603A2B6C9AB027C2799CC51D081453C901F424 +6838294A51489B38C8EDDF7C6C903F232EDD9951F4151254B953E00115121F92 +5F5FD9F91BDB704F7717183C9C55C21807FCCCB268B93751DD737EC905C8A9B0 +98910693233B856ECADFD55DDFDFEAEF53F1FC27D7C7089DA7582A583F425C6C +DE8CF462400F9FF1B462787D0005A05F16F5904D1D10B0C60BC364A307B054C2 +E9E8D931B3A092535AD45D70265AB56D3E4403C7D410BB83227484D16E10C9A7 +52EA004678CEDFE2C2835C021F46E347ABADF4354E04C35431864305AAB8D7C0 +8776CF6239EF485E44F14C1E616F04D98627897D310FAF339B00F3019223310A +60641A172E0831EDB572F4E7D85BBC15DF0448A6DBD3435B5FF0A952DD86C0E7 +157A3B667BB97BD85FF37BD0E12D65D2D7E5A33DC12764720734815B65302351 +5B03174E29B57E3216BCD3F2B81001D8D625FFAA375B4487478079FFE5F0E21B +1A90AE727938630961DBF133B943E8A45EB061DF80FC718D35ECC246A24183F2 +43861B1258406ED408DED145F18D4CCB95069048C52AB14552BDFF1CB1F1F963 +6531054246EF3F3BC9D65B36345DFF7819B8949515F2313AC76B0F241DA78099 +E82A60D2BEBBF180E744C06F5F8E8C38226525FE21EA8A6CD551D94B15F0B8A5 +9EF3FB5A7F2EBCE1C29414821CDF3BBBFF808D4125E38D05F77E732EEE0E0CB3 +509229A60A80F475D61844189DDDE1F980D153F9F374B710AB3B96FD576B9AE8 +178CC951143C0E8EFF96B72AB4FF837BD334D2A516EDEB59C1E6CDCFCB3FD915 +C446C459C028EFFA658A6F1E833682ECC949E8D2353A24ED34643D348D16B4DD +020D8E8DC9E989BEC200429804E1B8161A9F7FF2DB2BC00F25BFDFFD02A5A82F +71F4678E5E5A8F6CAEDE2A3187285FF305C5AAB49B85C3A40087A3459E4DABF4 +145B0C79EC8AFB73E22391AD1D0DECB592354837433E6DD2057B6CC9B330AC18 +4D8C09E732E5E08EB842CE59BC1CAB5064E019B265E75F5457C41B811370030D +4E81B1D9C66D9D60DAE4027945F24F144B5003841881B8882D8E333E7F7A3A7F +F857D2F1EE8DDE2A6D441763AED454D51BC3428EB8CEDBC31FEAE877202D7EE8 +4C2E39CD808863A2E56930DFDDA7796750F6C133A419228BAF7ED0A19A3132B0 +39E641CAAFD425F43B1AEEDE1FC34517B97E41CA66B85EB35934ECC22B75F595 +CD0162C13EE55BBFDC923AA3BDC67CAEB280985C5DF695B81FBEA93E39E8E18A +09377C3D7A71BAEC59E0491BD32EE5E9B0678FD769796B4130F0DBF715E18137 +D02B5E851DAC95769FB5C038BAD5F4AFF7A77A0116B4E934BD06FF3C39F7A971 +5908D9993176C289C45F09C5D85DEB820CBBC935BC15E22A8CC0633904BDE106 +01EF4D1BF93D558582670B2059463B5E1D9B123B59E983DABE5F9E4A2C863D9D +B3254E1AB66A7F40394866559F0CF497A068A443851A02640762FD4010E6BAF8 +CAC3C146CBFC3ACF13F52A82B5867F1521251AC8D7206C93552E68BE284F0CF8 +6117F8B806C05C2EC35A1253F8DEF2A35637DFA8B65C316BBDD16BDF3179864F +8A89E92B76B761BA884AB48BBEB92C1075CDF454823F9264F9B028CE06320F1E +996245BF51EB4803E2D6CDA5EFB2153D26341F0FCD5DFA11D492DD002CFA5926 +1F1522A7645E6075D38D9D50F3FC54A24B2AACB2D4A0FF8BF1B43C97D7513141 +B828405C4D6FC4CEE5A4B8BEE106BFA1574B356C2BA95EA5B6EBCC5308F87AAC +E3E789CAC8FE3D7CAFBAA3A265682CE80E227A5C8B32ED67359D35C88BA03FA5 +DDC4D534D835A4C4085CDFAF7F2CB4E83AE70CE0C2C30B96179A0B8B73E0B1AD +16B7B134FAEFDA10FA5CF744050D7EF1336C335E4C3FA6D4A5B4C860F7AE1723 +D22660832E3B3D4F40E6EA7E85268D654F82DCD6B4DB7C5D27F4EED055938AFE +A7035ADC3A8B1774C85E1C49360C3335B33E46BF6636B93CDEAC43913625F72B +56D4A938A9CECE709D59EBD4F09C2AE6652D81D825ED1AA3A8D21F20EAC32A32 +85862B555A52DA2EB5BA78154E3DE2D7BE7A1311BA3AD091F7DA08BADC926238 +080920CE8E320C7F77AE8AAA3B6EED7A0C401BFFCBA8680BD4F5510B2B19C94A +E39A1118FB5848F30A401229BF01732FA0B0813CB092BC4CCE395357C3D361D6 +BD39C35DA23E57558D02D71384092EE97CC093F167275773DB33F7EAB779E614 +BC0C4CF4A98FBDADB230FBC21A134F0BB7011F03B55364EF6029A77997EC0A8A +7F109D48EB7F8308F2B2379B959DD5A84C2B19A7B5C887F16AB0E5FC30EEB9A2 +70E77EF36E155B426EE71FA1F4932BBE62F77215B235958FB97E4A572653D49A +D5DE24024D06E5EFB629FBB27039F9C52B63B7F8041665A09D760B0725A59DE2 +DC33D08C10F4D32D33982DF3FE18FC75B0EA2074367FBA4B21F51826FAB40E3C +F1E299C7757D2E6BFDA7C6BA8617590EB6E8AA4EB56762A6F9B0FA9A6A7EEFC3 +607BFC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +{restore}if +%%EndFont +%%BeginFont: CMBX10 +%!PS-AdobeFont-1.0: CMBX10 003.002 +%%Title: CMBX10 +%Version: 003.002 +%%CreationDate: Mon Jul 13 16:17:00 2009 +%%Creator: David M. Jones +%Copyright: Copyright (c) 1997, 2009 American Mathematical Society +%Copyright: (<http://www.ams.org>), with Reserved Font Name CMBX10. +% This Font Software is licensed under the SIL Open Font License, Version 1.1. +% This license is in the accompanying file OFL.txt, and is also +% available with a FAQ at: http://scripts.sil.org/OFL. +%%EndComments +FontDirectory/CMBX10 known{/CMBX10 findfont dup/UniqueID known{dup +/UniqueID get 5000768 eq exch/FontType get 1 eq and}{pop false}ifelse +{save true}{false}ifelse}{false}ifelse +11 dict begin +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def +/FontName /CMBX10 def +/FontBBox {-56 -250 1164 750 }readonly def +/UniqueID 5000768 def +/PaintType 0 def +/FontInfo 9 dict dup begin +/version (003.002) readonly def +/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMBX10.) readonly def +/FullName (CMBX10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Bold) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +end readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 12 /fi put +dup 48 /zero put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 57 /nine put +dup 58 /colon put +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 70 /F put +dup 73 /I put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 119 /w put +dup 120 /x put +dup 121 /y put +readonly def +currentdict end +currentfile eexec +D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA +0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 +51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 +7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 +E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 +0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 +C01924195A181D03F5054A93B71E5065F8D92FE23794D2D43B233BABF23DF8DB +B6C2BD2F04672F9A3B7FE430263E962F16A948319C51B8ADE6E8A80D3D88023A +6DEA4D271676C2C8615C4A0EA7DC8F6601610F398673A4D4B905F49EA868FEF6 +39BE073001A36DEA6C08ED51452F062B971740019692E221F4455EDE46AF24B8 +407A98B791F6AD525C72C09776247E194043281D04FE1CD1D8AD8DCEEC3045B4 +F95B3B41CD3300768D8A049815348BD7AC1004F5500817E3A267D694AE108BAF +285B288FC5F28A03E9D34FE5D9B2F9A9BB26ADE66B1CF8EB5BE606E83D213C33 +DE083C20D636EF780E761944FCE3B8A950B1E6E7568F33B557C6D59E0CEAF185 +53E609A4F58AC4D5269116F958C4D115C44B5A6DABAB79D3BB6E60BDFCECE108 +74CFBE258779F32C80CD7D9A7CEBA50A0966BD9961F71560119668C4A0C30A5D +ED91ACB30940502B24F33906D6E0F16F81DA87EB6D7FC8B7853BE388C40D75C2 +2CA8F94713AAA1561F5321CE97997CB4AF0E37F44E25B0F73CF4986422B1CD89 +8F861CA623004ADB1C28268D7F8C484AA10C9519B6AEADC95AFAA3304D60E85D +718B2F67D2B734095E5A92C90785252C98067DC05137BE735220BBCB7C341D61 +C4B98BFB1EAF883D38D7A93195A059EF82B42027F23B6CD633231D704B891A9B +03D11A646F13898F20321D7BC150C63FD6DC6BF9CAFD8DA759E95384B729A0B2 +767B9F3E55C682F7A248BC1184F7D294CFFAE0B246DFCC8F215625DDD4F49F09 +FA8D41CBF4A06152FEB152C61539ADF7E70A4D23AF8267D25CE3B12D39D62377 +547E2528D18DC4134FA3BE0437EE0B3509223D71F06D44C6227D62BD01AC0A2A +3EDA975E894371C07CA1027B102549A7D552FFD25ED2DCC68E29E71BBAB43C62 +57B0BFC6A953ABC2EF703F35D112F6B5460018CDCEAD17F149DBE5B52C2B9E10 +9818EA6D97C8AC884F6841C9B600A7D868F59C1D80E98DE0741D06D69858EC84 +1B33C6C9938B7E8A6FF6C12AD456EECBD3EBAF0D7331536B9F6422019FAFFFA4 +822E79D6D89D6366DA636CB708894FEF904F366E295F1CB808E78E883913C4FB +1631248ED6A7CF1095C0C61C4F05E4B9DFC47533A5FD24540AD71A0E2907B98B +28085EB88ABFC3478C9644594C7DC4244ED5A7C1CA8D960B65497D56D174645A +B88F12C2CF0A807DA314017984CF3C4FB7F47392A651EB9CFA961B28E2989893 +9FC4D97171BD5338673F5D1CE2C3C08D48A1B77769F01D5058236C655FFD864B +80E28F900191D4EB349AA5E400A7B0A0FCA0F3E79D7A7C69775BF754329397B7 +D18B20B2683CBC4A19729BA878B3C17EBA0A7E9EE297A5B67E915CAD92C8F356 +582B8299DE6A58E73408F525F7EA895C48A8F0D626A06A96A50348DFBE479D89 +4272576FBB0CD332193D28A8F11503BAE98F8E1D73CF5BCADF23DCD4E6586ABB +323568F5A34E359661074D50CD8D9DF27191FCE24F10225A5D721EFDE2547E1D +CA998077D2340B1A4ADFFF570AA677CDF3305D5E3A394BB1626EB35074D4EEAC +2F037CA2EA389F7683FD17A8E07C12B4CB3BA8C249C9B12D297C618009F76717 +0EBF5F2DD39A6BDA10A2E5A811D4E190660F5FDDBA29201B6F8042620397AB2C +E59267A7247B0463891831A6F40582BC3F614E5167B646A8F53D8A31717DD9A1 +9034034E705BA7884F0E0738307AF69D3517147C282747F2788462FDC4336A4F +9CD222908401A25F0A1F7B13B8DAE622DC965AD0BE62497420B70C04AF432237 +E0FDD043456187658ED93B0F9822A3998511DF05E59CC85B7B9992CA0CE3B814 +9723BAE70D2631F32B4BF93511F67179FFAD2075E1591CA5907A4C67701B56CF +A5E5B02EB4A842BA1F18D6864E5677359C2FB4AF5BCBABAFB053F230CC129B45 +8D15413F736EB07C571521C7DE2A13F2AC1C133D491B0A607197BE9AA1231D96 +BED7968788246B2E4D2BD330F802810F5BDA3760FEA5210CFC6F54748FB1D921 +5CC3624BBA5B8962AA7D94159651589540B17CF7A785F297264F9C1006D36928 +6E2756D3B623A6087E4B106FBA76255903C624C07E18A1AF4E185A533C640711 +86BB477A906ADD36EB6C8F4A12BC2F01B2B98412E4E105977640930CD998D990 +0254A1E5E9843B7A8ADE0AF6D5871E6D3D666465AE69813A2E26333213FF6713 +6F08D55A90C079A56E1B9AC655F720FC22B5AD8550FFF26DA7B0C5A0B60DDB05 +64E8FAF684F3A455BA9BC9278043D79537D201D520E38750335A4C8FEA887377 +879331B68DAD6B253F4FF9981D0F9B9550ED5179B15EEEB00E560A3DB6E5973B +63403E4E2F40A3D0B937246E9652000B917B1369741E0F913C14C2D2D6D1FCBE +2CEC4422177C58523715BD070002EC2E13D383A1DC8C84228862B6C5D3B65667 +9FA97E175239BB7FE7E37E14B96DD7960A8AD49DF428CFC13B5D3CC22E245317 +47B5244DA97F1DF954CED2D552477237CB23D037C0DE728E26C82738954EEA1F +F34FE497DA005AF03746DD2ACF77F6E6F2C224862A1D18AF6F7A5DAF34564387 +9E01DBFF49F8621C058C04C2B3F4F3033FF3E8A977B2CD6B2A3CA4A6C569B19F +C5AC457AE9AF334DA66A730960C7565E93A2D373C0E3DE14646FFDA05DF4C6EB +6D4CA8ACCA3C3115764F77B842581760BFB9E5C0EBE55308B0577A8F4D968CE2 +BA3361D79378D451DD150C34D7E901397AC63B33BD7DB13C50D678F5DE999238 +4B4EA15BD449C46F262D931478F5685CDEEC4C4201FC3EFA607AFB8F27AF6751 +125DE42D2FE2D31DE769B7E7FD8CC8C5D91343B537139A822A5BC4160BB5314E +37501F65B4FC35475FE9E03E34CBF6795AE86CE409500BD0799DE39FA69978B6 +EC74D2197C03632D3F59B85F404DB31240968FA75059B2581B101E028CDECC2E +7E5E25DFA106E9B8ADB81E82BE9ED3BAA9D03EEB22B7B67AB1262DF6AF5F5EFD +A5627EFEB84F3A5F92EF2557EDA2843D7D18C592635623CEAB14CC3620F33986 +410D6DBAEF9F86E4E6682054540E2B01D8FF2161F10E66851A188BC15BD6666E +8D3F21709F196A31EE676D28A2D12639CC2E7020A52910F052E61A0710DF09B0 +064171D05611451BD24FAD64716F141E1C41D3218A8115A3D73CA041D02B46D9 +28C3D07DF0FB668E8E91409C8D0A26A65CD737C075E026AC0A974C9BE658199B +3B9D82ED95E4646977D8F60717DA4C68767DBD7E8320D5AA1D5DEB2E6B009759 +8282F27D64F1F904830AAB501CDA4D9233FC2F12F77F0FBCC46E6B729C71F6D5 +E6F3EA02EC35D1048394F4EF2177FC5EB726DE5EF2DE7997166B8BE5B5105D08 +EAAC3481FC612665CA112D3F889A0E5B7843EFFCEFACA24A01B6AC2B7DDE02F4 +A9295AA2409A3756BAAB44608DACBB56840060037869455BEBA46F10AFC68DD0 +0563843DF111C6D34911CF13AA6023E5E899060B5EC60D0F78FDEF3E981151A9 +24903EB13ED1A67EA1977449716D1A5A7EDE1A2E9465C9C2B20A58AF02D9F373 +73E627CBF296B3A6A4670C39F3B5EA30D76F0362C81020A1777F0ADDBC6B52F7 +213FEE1718214087837049CF2AF00407639657428B9E8B532F68B631611A3501 +3D9DCA38090E227BD0D6D0FB4130EE866DB6B195C873AFD18DDB3B1E40F740C6 +B3B375ADCBBF628A07A5FACED539FEDA3379D3B60216C2EA6629BE2F65199D82 +FE3AE627D7C67270F3497AE75F7A9514968B5950E2D63C38DA240AF4E6CAE88E +E25167D179108679876E7C80C85FE1D2BCC2EC9B88BE76A8F5736E8E6B3A9CF9 +42E58A4ECB7914865E67C1468CF66D658206830B9380FE346DC2DC4BB56A92CE +4B5E4EA9036C177869315A2D9E6CFE97E3BFD7CBE0747D40CE5E8A3A0988576B +8AD2B1E4314C0D8A0CBCA08844A49F7E054D31BA7543730C0A7390BC4A288D10 +CE29E389A4791305D3AC1BB6F77C805F1032787306F78FF76A20A9E629899F6D +13356768D33D7B9E294E8CD50CBFB9CA02A193922BD9B4372C912D1689B6644D +52CAA30F7421E8114D077288119AD9514EF21E5B9989CCE2ABA0C12549FDF493 +FFB39736AC9EB72DAF45E4EA6057527FA9F5AA0A1A3F03C12F7482E465C766D3 +760DA7714D56C91BDAED507A5572BEB51A895F8DD3BD5AAB042650154FC7E4E5 +5EEA6194DF73AC5EE2CBD4EE26E29B1D2D0C458B4850BFE842DDF2EBB4E2A25D +C6A11CA2D8F346E2B736DF88A3D57BC0380B52396A6C039212699F5D3342EB58 +0C3DD5D01D5078479BD9FD10C07925556C0AB0F03606F33796BA72074549EDA6 +E33644F62CA35207D7421D2727AD8419AD1772789D33405FCDDC9286BC34C974 +A52297F5BBD2E541E8BB473F733AE5097BBC9D5FACF18DE4173B4711E28B23ED +16E0A6746A60F6FF903026A3900169EDA87D98396E762C2EC963D89197B8CD0C +25244806BE7CBF46BE60A8F9171731EADFC969C28679B025371E5572E52A0EF8 +B3FD9B4638D03E20BFDEC9345E70B8166D38846DCA68E0D0B4B53629C7E7620B +45E0A610BCD07FEF8814CF915CFB11119F42407D1C6DC1E6353451D40A382C2E +C74DF2A4889ED5A3495C3E973565F7178CA190D22C9693C10EB12C1E7A8679CE +4AFECFC964CC98111BA4ED2BA9B10292A71D5B11870EB08EB483922CE8628A06 +05E7CF6DF93E112B60EF888AA8DB52994EC33DC7277D7B7A4F913AD30257261A +D6EE80476A9A8D316D190BE6CE0046CBBCED365AB305495284FA921BE0638E00 +63DB2AA4C5F163340BCCD1061B469504DEE350B82FBE1689C1B65D095405614B +35997D6F0DACA7190D64ABA351705B17B23FE2EE5996FCD607F49F54392463EC +DD5B944A4B82FA2BE3E75E2946D483060DF99277340B0AB65A2042AD088E2B75 +BBDAB869D1940F64B50D25078519D18748AD64AC5615EFAAF4F3105B0111AD40 +70EE173ABE6A4ACE486B4E5999158A4377FDA6922FAA6E9305F48570D14BC81F +BFF4C663E1EA9D1E050534F9315A663C4C5DA52CB02EA6408AA473C32CB0CD71 +169BB43C0508A842F400240F0063243B4C459A1FCB3312C41C32ED0EE87F591A +BCB6D5D3830AE4645CB4D40336DB4AB6540B52E70E1EA415CC6D886827EBC5B3 +EC35CC5C136243B0C20B3C603B648B132B99D05F9B48263ACFA59A856BE74441 +FECF5C6D1FE9D1F4F9942F460961901E16017144C37E83C6822177B2A6C47ECC +6C47A1104460665E5BCFCF08874008302750EB991CD98D0D8D22B921F90B99B9 +05EE7C39F2BC2A7798157503743C9F2F267BDBE2E8A4CDA7317F81DBF8962E1C +EC02822CC7F770FD4D08D335904375BF0C6DAA0510771627ECB9EE69C0F47D30 +69A87052989DF80D9F4F19F75B070C3689AB3BE0966453F9D56CED6C1745B50D +813AE6D7E44B73423AB3778ABE4CD2C4DF40E14C5A426043F7057E2DFA2DAA70 +EA6723F1C7967FECB1E7C1C0CA283334163FBE31C32254490170C3513580A552 +19A5DD75E6C4ADCB12D33517A03318A6BBC7E4214266E125140D8C40F78A0340 +1F95D9FBEC4DCC55B71E89375AA94B0D55646F6C069561480407D0A3AC127024 +D7D1E9ED6B599A2A8766B8792F46D35508B66F302D289405B101A3C6BADA680D +8C56E2A00B766A4CB155446F862FCF17537A2BE85418E20CD77C4F1F69F70BC6 +17BB5DA8FAA876D0E8BABE273A19C04A8697B3E3CF4725E2C77C8761A9243F24 +96F8AE96399996001A57FD75106745AB4646FB9C6421F1D4EBF3BE533BD11AE8 +14BFBD6D308376B26E08E4ADA490DDCCA94BE8240403D5EB0FE3549061DFB668 +4105B4FE77189546619B6BCF3F9723E278E98D50A17DB8A4C46744FA21760635 +5B332689316BD17C966D466AE737FE3ED7ABC443ADD88D4823A10BC9747ABDEE +027515AC353A420523F85298029475D8BFD83A2CD00C02CA07974BAA581D2215 +A850E6E4C0A5E17E0EDF91C63FAC18C70093F40FEEAF0350B403E2806F4EAE96 +BF616A805616EE55C4657418C26CAF54187A6684821B86A76F15088AC4D5B551 +66C3CA8DC61E9810858D1204F899C7E3A1754F483134609F6EEE6364B1CC04FD +92C86EF194FA3249601AD722D75D1D395CD15A93C768EC60A486AE885683364F +93DA00A865C1035F913FDA69E7D9A0422880FB81EC23C00427F07A5EA3CCB613 +83C859958AC53FAEA26A6BB39ABA068863CCE3D447720BC31A5136E08EE58963 +093AF587A72112D55853A1048A2B1695DB2D7F13CC924F2F0902071260C33ED6 +30893A04577C0ACF0681C0FEC23E5404F844A83BB5A2F8DE1F0792196139993C +1152094BC36A6AE5BAB4B8281E506F485F0BAEEBBE71E174B7CED1E52A8242F9 +DBDF3E0FBA296538D964EB5B7A4E23B1BB0F59872C9D4FE8498203E3AC08B71E +D2B965AA6CD5D20DA6C83FDC86F4A5D68A58A72C5BB9BFE9BC755C56B24025CE +6F24443D3CF32CD711D3D94C7C1DC275DDAE3341D840090F97CB6CAEF274C94F +9F3BD3AAB3F98BA8A7B5CE5E48D1462DAAB37BEB1C10B410E8D33FA42D898183 +BD4F807112D78AA94509E33C179BF7C9E82E55AA7D09E128A0DA06A330CF4AF8 +5DC861498CE029CE8C1BD15C923A708F2E7AF98E4F7B34212A0CB417553C86EB +6DD46B0466F1A21D29FC5111226794ECFCA5DD4240C0B8D106CCD7EA6F03E133 +BB7733F055D6FFA04EF5C6F872B4FDA3E42F0F036C4825543D75682ACF71B548 +DED160ACD05625274799D0AE201305DA526E01A3D2A719B1B15C05CC09467F3A +5627860C0F36C503EE392E1786620F3F2287AFE56634E03566B9B1F537FD92A2 +913166228791871A8F8CBA1A1DA634E8224058052A10FE1E67CBD3FD21A6C07E +243CBF58BDC78577847664EEA5225EB8D6679AB17C563848A9D4D58995EA3609 +51C1443B752A070D9872FE1643F0677019235AC25DC2B29169D38308F2170A1A +A0FDCC59E6602197D2815B914041FFC7106DAAAF30CD97400C6D0826A40385A4 +C8520119A065CF32CF2FC5FBD8DFD29222528A7F96FDA533145846B3428F8239 +E50277C366418D713F84B12A5FD4F904DC13DB1844A391FDAEB97643A6FD2945 +942FD4FC5A4A35E184F23304B8B4D93D0C37EFCC4E106D4FCD0DA3E5D2117589 +3FFC2BD1D121026562C55C455C3585050B9460891B006F62D9D9B66695C3D348 +A467C14C0256FA9621CB056E7CD389505194FF463BCC4010897F9A690EA87D9D +BB3ED4C174FBADB8A4744C6E4A44D773967FD703EC37672F9993DC48BCC8A060 +6CEFE8E6B8F10886E15BA0466AF410B90DF0020FAB88BE493606B6A734EA85BB +926950EB10D2F2CFDBD182B0F133809612CCF6ACCAD049C8005A42FAF78368B9 +E7684F98DE421BE0A3BC0FAEE024A7BE67E15C8394F17FE84DFD8156C2A3E94D +08259E15CC657E8CE3088395BF6B5F825764E141AE15EBD186DC049261623D26 +8636705E06C6E4A1F8ACAEA59F91B042DF5DB9C2AB986A784384706A43E5F18E +42C29CC1CA86D4F247B3BBBC89F3633EE074DCA4AC15B1E33EE4822812A62E88 +C32B0AA57249980EE17AFC1346074800FA529445D18649A0475246A25CF325A0 +BDA06AAF392FD455218B13D9ED577D51A9500B9FB7860716A8E2FB3A8C4BE3B3 +6656C6A5653AEF00184020ACA0BCCBF48BE3BF91E11C8658686C89848E714E6D +DC158DCD1C1BC03B83FF94C60B1DC71CE8A86B46DBE661C9F8F4677F8A2C7CF1 +E41A91EBDA2304735147BE66CDFF2673F09D408297302124C127F0B35690CAE9 +CE1679120CC4D582FB69550AD34A047DDFCD9D411724554CCED753DB52D6AA7B +22B0C55EB698ADDBB0F8ED15C971AEF113C74B9E25DA29199237B98DA4023665 +C2A63A837E4CAB38F8DF37DBAB5DC80C0AB25B56BCA5D899F1575E61ADF75676 +F48EE26C054AD9A75FD88A3E17498AC26FD4DC8000A125D6DD423540B8A98779 +B28CE97C9CAFAC45693FF43249E4B559E7F19FB349F94B60AAAAF05B5FBF244E +982B4B51D997DA5811CD43E1917DA885DD96133A5CE1A290DBBFD88AF285A879 +D3136C41C839FD2276760A7B4F21F4026AADCDAB3F113FCCCA9588C7FB72643E +AB8F6D8AEAD1DC3DCA6E436B3DF24E7DC6AD37137B49327871EA80F3B8AEE932 +D20D9A5B4779DFFAD7B3E5D447023D6433575F8F5AF589D7E094DA3786555D0C +046A427ADF128E00AC7B458D5A131A130D6F49A7ABF47833791F172D69FE6393 +EAE0E90E7FF7BC2333D4E0215D5201E4B209591782F8A664335F67B9DDE36DBA +793EC77E5EB405862D14EAB6A99218B3F66F11EA2F345629C402BD8FD9CA0AC8 +FB5A2E119DAA9F80083C9BC54F4586C44320993CB5D9CBDC8F8522001F82A16C +E307F175B794F4426E5D273581A6D2844444D82093FB03482B270D693391DEA7 +CB26D4A418E48A2989167B7DCE251F0D53D5C9B29D359A568FEDB965DF31CBF3 +900392FE739A2B43BFA2363CA74FA72668FC761D1A17B9C0B56D6172499CDDCC +90EA538A5526FD5AFF81D04BFEA703E5DA963B11042723106704021C1B90557C +B7AA96E076842E2C5F929FDA6D05E0B91B5548006EB4A6EB262077411083C2EE +D51D0D237A85D6480DA41A9D8DC24EAEC0C849E0D53D9FE1E54ECD82C957B8B9 +ED68D7B29A43F369C28272083B7B4E700546D293DEDAC7E74EEC946B4412B0B2 +0639AB78E79402C787F50C4F78991DBC12D73F5B371BBA2CD9535EEF0550084F +40A4B2C4D178C0C001E63E08DAF15D064426F6F24C49E02AF5417D18BB7997D1 +46CD6476615EE2F496EF2D2E5A6DE68ACABAEC2033F9F3689D9F8CA23483C81F +8E9CC42B7AF2BC3FA80B68FD37E3B87FC27AEB7AF6D2DFF9B4B7A60D26292AB2 +36461A349D3BEFAAB8918729204873D7793A647387156252B5A1B975639E02C8 +9715F8B4853B592ED9E467BA41B32363ED0D7557EA0AFB8EB093B4CB1FB3CCD9 +3369A67A60448575C7CE305DE7C1B59DC21DB0132F2B67B7B31EA068C5942DBD +7D1BE9CBA33107AA60AD033EA5B3618B83BEBA01BC0DB592BCB0796AF520E8EF +BAE6CBAA5DAB5897040D6CB1E3EEE78A98B59897138A084E64E116446EDAB213 +46AF2FED3E303F05D7EE630434645AD21B410AF8C1808A79F96CFC56741F62B4 +431AD2FD90CCF0A876EDDE18506E73B4E390C752DB45A2E8BB824F2E0310C59E +864A74877AB522D1B477F5A3D7ABF80CC031C2F2BE5D633E49E6D10EB6EB8434 +F17B15274840BEB842587F3B9AED05B97DD603AAF94D5FA688675B55D40FA43C +6D97741D9FE5F54C7D441AA62D48801769531ED7EFB3C438EFB1B513E93686D7 +1738FE955FD7C67F11323E059BCD0C4BEB275C26835080FD2AC78DE88BF65298 +A8EB4181F48C420D219CED950E4C0FC0330B49547E593F961B2BA33F375B75AD +3EC510349E6F496EBDCD1206243547DEC26F9A61DA31D6CD94A54CC54EC81B0B +176D21AC6779041F73E5DBC0A2107B612B9B89E20C373A057CD51327757A7928 +709B4C8BF80A78F5E2ED84A4941811EB4615720B646962D8037B07FE87D0E97C +F4FA509B30F40B5268F2FAA0615532EAE51CE1F857F270CB5304C5D21C76E501 +E0FFF703BC5D6E89877C911182DA4A939000AB0025E8A2B45590E4E80363ED65 +A7DC71D49784A7FEDC08AB6A58051F7A1CB16BCE7EFCD3969E2B49DAED8F29F5 +82ED86CAF81946032CA6EE62D04B068FB960219EFD6F33B33C27B6B49AE12BA2 +E6E677B95C8A90014C261C50958C69140F1F2C914618188154E7455D050B48CB +DC2B7CEF8518BFCBA0E1FE18CBB79A5BCE21BFA46CCFD6B4158BE06C768C73F4 +7089A6CFE99CAD9971037145AED0AE8FDDB40713F58F4803A0A78C455C560DD5 +2D9CB7B33928A0A248D16C6625A52C621744F41DEEEE6A9467DB7E5464F6CF6C +76B1CA4074893F360FD2D627F1D3FAE885D922A305F3CAFDAE6C20BA6346F0EE +E6593B6AB680AE19B67C76E8ABD370D5384B34D68C341B1DA6E735C370E8B5CC +3FD853D69EF243D1E3FBD3B1E5D72540938F542D983040DB65AD2F2D3AACC061 +BBAB7E37B95B6FE56D0CC3E90F2872FCCC2258B343F753A7BC8B7A60E9C93E58 +16581287CA52C91C95FFC4606C3187E7F38A87993F4D9B3EABC6E30D57CCF0FA +4E3D392CB0EE88E45E599BB5CC61C9EB26AAF4CB4E7AD44889B5E7E8B0ADB020 +2E2A034C09BF4A3D889594991EE6081B03663C98D3B0DB40C47E34709944DBC0 +5AA388D4A770C9085F5068F9964DE441F538254C4583D04EA2DF6DD8E4FBB600 +3E41629615843693874D67FB56FED2352DCE40FA1BAC8386E1F2924D310CD0C6 +3115E709D26257B5C19979E675BADE74EBDCC4993871E9718A75DF7F3B5D3FAF +F141BA38D65529F8C28C28D20FE50000C38BDC6A50BE2FF853710E22F1F98824 +AF736EB973F5BB591EFBA74DF88040460BE1B41F1DCEB1349D281A1FA5BDFB1F +A225CEDE409A83E8E129216035F189C9764F5744027B50DF95864E0159B477B9 +4FACFD9D63347D2E8B820DD0211E2DD31FF5A7AC48D7F471F1DBE0D0535789B8 +1AD29000BC87CD89A67BCA5F06C891C34A4660A3E4769323AADE88F539BDD546 +18B6F184F78735DDC5B14BA036E451D2B942C3780BD59AF901EA738ED4A85D77 +64EBB3116622F640366726C4A4B42BE89AE7040E10AE6F7E3E0D97E46E70E0CF +312F217028C2BD74CBD41D7FCFD4BC7267E2739FFEA096527A5B6CD8AFE97A87 +CF71BFAF222A2688683647271CEAFB80232EFD4948079302D79FD349D84446BE +5929269B0B4D05B3980E64E135A4F2A47C030203360F1941FAC5C1A1A83104B5 +68A3601806C60B33034A103DC16FD18B309C660D5004585BA6602B782939220D +351CE8179EE650B0D9C5050670AE394987D800FF2403F3A9C6A02B03E13DB99D +69CFA7C0AC1AB29B7607279862E41997BA05852B825D2575676BA141BF5BEB16 +7F3B35D43FA75D54066C370280B51CE82D5A1DF1205655D7358809552E38F80B +4DED0107CB4EFB3792223A2AA23AE7025F99D532574ED7CE8FBAAAEFD096F439 +B2D128A440DDC4886679BF01A7B127F68F2914E13BFEF37D799DADD1A6BE6D49 +17E8A084B9C290783AC358B95492AC7E1450E00BB9D0279A3809C6F6A80550E3 +A89AA8A100BAECC283B284661CE584A0F2CA51AC50C41D300E540D53723DE0B0 +184FE92989C382E8FAC2DADEDB73FBE42FE8E5BFFA61ACB36FCAD4F88BBEC2E2 +464A453049ABA5139548EA09718566B9DE86D04C3628DA170A885E82EAF0F9AF +A9C087F43AD07BFE56FD1D6ECD3F813C4B799B37D21481BB42DF6FC2EE0E526A +D721BCF39FCDD82C29413B52E8382F4E226B6D0A34EF6C23E528EF92F4C1B3BC +3128DCE9B8D68B81467A88252A70737B5140DFE152598D33FA161541F3F685BE +AA9AB71AABE3C2B949BEF8F9E96DA8472455910D6D61F24053B2D535147195B7 +2AE08A0D398286B2FB9050CA34766751BE84E730E799E404C7DB577CFEE6EBDB +10C814AB76183540CC368C0576501E138E4B2B3E55277F279CC71C87586C0736 +E62CD1CEB660425F040200EDAE2413F87FB6319106D6558A8DDBB3DBFC5E3532 +E70E13657B792C145FF2515C0D4B2AF2D9C3047E5DDC31CB8BEE42930CF633C6 +9D64978FD33DEB0B660C6C18E482FA39E54AF024B5924F5370E9C13FF635889F +4585DE3FB8127107D4220765D6C17A4A6536C586D6C9F763892AFB4F4404CBCD +515710D6B05C1D56C412718F41E74F1A3F132BB07771BEA13BD36C2714F75B49 +7F4632B1E182ECDC3B6F35E15E1EF3DF68FC2169556E2C39534F12614E0D50CF +902F521371898EE2F22B6965A3BD5CA5663314D11182E93939192490B0A5D703 +393ABA71EEC2416639F5AF6443AC340E3C4D43C6BE69357242509F738DEF1A52 +744FF295793FB839921F63516F5B2668420D17F2A20DE6C4C8CCD1BBB12881EE +74E1B7E08BDC853376FDC5BE44503C1B1FD00D758952A1E8403E16679A7124EF +C120F517CD16470C6945C1BF0C5E9F217FA5052D5143848C1ABCA495C4AD7980 +D8EE59A9F3F4A5E3E3898E7A9F829E3F52990B719FF6A47FD59038B5F4E552AB +9627B35725DED3B01496731471E3864466F59B909A039B8A02835E748597CD52 +470ED016CC613ECB5389C3E95E4F4E5780F00005CA8113C577AC7D43A10EEA63 +187FC9BF6907DAF69425D53BE1EE19D427AF6EA42D868A458ECEDF0532BC4268 +2F93CB185890DAFAF858FDEF5E5DC3D71EE13FCD512AC3A7E46A9FE960636E7A +563CEA2B5907088AD0C7E5AC7F2CA4F5960E199CE277D9387A34CEA35ADCA39C +F884C21560E71E1FC3F8248FB899107B2711337DB9E4DEEE132EAB7E0C3F6D87 +213567D866F34F405F07EB49952ADE4CADB5DD00B52E6BD1DD9A4FFBAC99213B +4105603374C9297D5D024F0F19E2E70AFBFECC928925668EACB52A75AE71F012 +39B1AFE2F7C0689AFD18C695292A08A4DDBDB3F1B33B1124D83F6CBCE2C621B3 +261D18AD7027CC619E9AB8A36141E409543918493ADFD1851C5CA878F461DE33 +706D4DF25FD9182144F2C7AEF5C003B1879D14A50D5069F0B6D52C049054A401 +E038942915E40B5D9806EDF9501D77774F7ED693CAECF88C9594782E03C3C114 +D36902199BCC84FF858DBE4C95DC4479CC051020A9F43A6FBA9649749030F2FB +3C48150B93D9E06A2FADE997CBEEBAFD0D1749D6DA209390F000D7EC4EBB9704 +32DA27E9AC1E6CF58F4100ABC8C6127AECE3FB8EA4BB97E4F60A7CD2D8A05BDA +8033CC5E39862C78FF5929791D839E6D342A47FBB29799E9EF3CD6A8D9EA09E2 +F97223CB4493A5C3BC1CD3EB4BDCEEA60FC78A82F6FCAC670252AC6FAC74261B +06B92BAFF8EB6DBDDC6E8AF7655C8F4729BB39435104D6479A816C56363E9DDA +01D132AED79F244A9050F81FAD6D73368ED5AFDD320D9E6D066849719CEA7C1C +99B901F2D7D63043D36309F06063557760BB0EA7805A438AAB42E6C360D2F050 +D5CF8F2BD82076DD38D7F4090080220D23CF25C7ACF3E3CBD66EC58EFA89A4A5 +A519D8D2F4D510C659F57DF4DCCC76A21806A24FFEC1A930125874B2B979C033 +B576965EFFC8F193D843DEBF3350376263F67B732F60166495F50105F43E4F29 +47EFDFC20A4DF5CB29838ECB95F682C382B55AAA87B02588A6A2FD64E95670F5 +AB185C2AE26BCFDB3DA40F4C615A21E18FE8A4981D4E9D4D7F5E235509044B12 +BA093E7ABFC169BF21DC7A2038290A70A5CF293ED04F9F892B58EE52FBBB2328 +EC9737EA4EC06131E5E4A438657969EF06AA1B4D4CBCFD4541D2777C97A3A170 +04776173B38C1B77F82669484FD07061BC5978F9ADA0197AAE090E9014EEB1A7 +72156C2BC994E748283D15444774B7D43F481522B7514AF900C7B772D52D8835 +2C1B6B496DBE45EAC8D1F54697500D71542E9E7405435CEA41D9F2F597D94539 +A163328FC05077111438BCB042C962E337E4493491C9C1F0196A6905A9965F49 +872B07EBA22F515AA56B5122711B3CAB4EF9FE8AB5FAA1814653F5684D15DDF3 +89B4B65AFC530B543E2F5287BE210270B93D0DCB125512D6775E8B8C6790F291 +736B3D9261F333AED2A69199A0ADE3C12533C8BE653447F9954D3B56E1995BB9 +5252295542A72FE2EE4589DDAAD72CC0E6C30470E4AE5399D054D42DCCFEC5ED +63F51E58627D5E262212579899A972B7835E41E4499B682B22645E49E4843545 +924546BD825A388A284708A4A9D358DEBB89BF70EF17F3C93390D29ECBF02C74 +B9F283AAF7ED938EDFB91AA665061354F84D0654EB67993D18073EEFF9508D30 +EFD997B30F1D783F9D6D4E2DA75E11BA36F8C26E810F718B13646CFABFF54643 +555A00BD56387C9C551889D698B46FB83704EC7FF41F573C79356CBC2EBA2061 +9D4A5E685EEB6A66FB690E03292AE7524609359715B0D5053E349C5CAEEECEB2 +7DC3C3354AEF685620751C70E0713C47141F87581B82BECC81A6045E89958EC4 +0E7D81594558E39A89292FEC67F306AE635FDBA5755FD01237748CAC14472552 +36B0A2CE2264A34F35741831CF21AEF590BD407FB80D726DE4C3FB5A1FA63959 +8C5298BD02EABCCCC2B4CDCBB6A5CE017A18A7513BAB33AAD8C1147C7611A9BA +FFF33ADCDDAC7A049B3AE0A94D2F35C4872320500E68C579F9961B7C40F06561 +0F5BFFF12A52686A4B8A180E5D088647A90248820E0C204E081CF17DE6301417 +6FE85B823A7C5C24D52120D7EEE87F1CE1638A6C39B554563FDFCFE7F57B3F6F +04CA206D2BF1373654D8AFF1F31557F7F274EAD3A0CE54CC7B45A70FCBAB27FD +C5D4A36653D4663E33173E5C99CBA2196FF85C9E48C224CF93084A27559309A1 +D39DC29FAE619426DFDFB6ABE33C5B9E6D85B95235613B6CB8ABA8D9B7167F71 +4F3529F3B691D452EE991BF9D159F51AA5066CD85A1E11AD16B293960775B199 +8EA3327F8B6701CF2692A12510BA4308C594DCCA4F6AFCD015C8FA8C921FDBDB +2773016895922821F87E18A18ECB0F44E37DFB1DE5A1202EBD0B745207FBBE14 +2E56E41B8F41A025F308E5E0A7AA69A90166661002FA6784A81925B56582A26D +1BF437F4187D598513D13DFC19C9FA4A525273CDCFF6769014093DCA26556BEF +0BC97DA1B23FAC0E48708F60DADC477FF34DC5880774A1F87F2C0C70A9942567 +5695A0ABC7361FB116EED1AE2A0123C1ECA4416BA0EC454DB2FA62E127795D30 +B240472543D83C85284C2CC51C4B08263313213BEB45BF043D34721866BC48A6 +E54490A93E958B9F47C3E881C8F476F2D963395E27844991D49E3F0BDC2DB17F +5A99BF8C8438D2C98C6E1CEAA8F48B19D4D7EBE6B1C9F153901C2F563E3E6B46 +E2B8B72027365AFA49351308EADD1A03E5D0F70632336D1C7F5A726D874A6C30 +91834B39EE6ECAD3EE7CE8536E2E313E43A348D6B42E0255E583B79B955AAA78 +2E456E0E0FADBFF233E2C7F14FFCBBA768AC70D424FE9E33F07710FF6362704D +9A602F812BA693365B1FA730A5E411B4DEB12F138373A9CDEF11E8568659AB35 +2442BD5DC23DFD1D3534864F1B1F08E1C90E2D393BC1574E70877958B7F3795C +00DCDA29EEBEF10B21468F32610DA773CA1EB721F84E299F921D810E01B501B2 +BA04AE51EFDEFDAFD90A93E8B1F4DFB226BBA3F11593E52C9B729BFADB533608 +720B0C72FA5548BB957A8AD061B696D051AEF50771CD338BDB2ABC4188F01ECF +299A8820B472E2E992F582EB8F2E8D16D211CFABBACF65AEB73A5BC81C817093 +6978C77D9E18731D34A0817EFBD6AE1C55B507A6B130EEEB31C8E769AE5E3346 +8844EA1958AB9048B992AD7432E14AE883B71E32BA80AF59605D99D6BF5DAFC7 +8C97CC9665851EA7115F8023B5D0A87D334E74C46E5E463C7579A2AFC0FC4EA2 +0E08FCAEC43F1FE423F1D855B297A6F2A709F364742C53B66D367D6D3D16C202 +A0B83A6041C9538548590A94E399A0C25692DE48FDB3D32D64869A9BB7E6B90B +3025D56C235D53A7E31F7A408529A86B0FAF7F415B3CCDE70DF025580677A455 +F028010F5E3FCF7D16A50C9500A6CF3D3C4CC7C0007CE52E4A17E3A940F3C1ED +6E15D8E189B5DC36224884FDAF0ADF4A12BC4B53114CA1E3D7AAAF8CBB7DDEC5 +2C108337BBA511F1394AA5FD0DCA9E14A07B167513EABF33029447D962D9825F +90B0AA9C76D4EA2C6D6F971A10B18945B5EF6CA014602BCDAA68E05F00872F84 +F208006F6A62C102911BD442CC584FD6EA91F7041C4557C98128FEAD19962F35 +23A9BD5A28F496B3DA188BBB6C646C225FC2F0D289F77ACF7F1721AA7F4A55DF +343F16DCA7F33A6A094EF095285D295595AC942C1EE9A39F868ACFB1AE7DACE2 +C6CE1BEDEA0587474F2BCE1B5EDB01395A54E656E7D0224BD6EC3EA8AA0E5C9A +AD672BC1B020D479318ACAD7810EB67C7517728831E193678AAFB249525DC218 +02676F4275E656CCA7F30470E4D6A9BE604128F1834FDACEF510EFF999F0CEED +1AF10B5B441796683305771A612944D3415824637F3167B455200B397E79A7D2 +A462FB0ABE96485B857F306725AB27E349B3711EEEB7033C52EBC1F2251FFD34 +F37184161E9E3017F646FB7704DFDF783BEC88651E1BE53B06D0297687367E1A +10842CA16C864D91A891A32B39F0C7A172BA374AB9C1D440243FC8404772A347 +6F6970579327343366E4A6EC2FB370A2B55654B4342F02C1D8E3C5AB45A7B6A9 +1CD7F03D0ABD1EF0D60D8CDE18A69981088E4A6324E3AA3545972D0DF2298EF9 +D676EC8CE48DDA8A62F03222ECC6B0B5EFEF0CEF9218B15730304662A7584EE8 +3C415696AC089BAD01BD6FFAD858F63A9B0E12DBB17F630E7E062D49E5191F12 +D65270203B25EB0F29FCC609749E9C2E874D5F11DFC0B452DEBC1C6BC2C15AD3 +9798E7D993822FF3C8744BEB56E989112C16437BE92E1BDB1521AB47AFCEFC39 +0BD391C6F3D21FBBAAD0CFA3B3C6F771E7EC6D48D9024B1745DB3042E986D1FA +8228ABAE9ABB2005E1491751F3A0176016F90E4C013BBD320A9F4D8CE7AEAE0B +82C5F6803D2DA18A1649E30DDF8FBA7DE0171F36AC856BF413F64EB03EC9915C +CB6E4F3060912B3A5A28742D137AFCE62859BE8AF6492BD0787C4C9329D931EB +7A9700F3B92995B26B09857241042BCECD556E37AFFE1CFD46CB8731B83689AF +60D9CCDA940D54B47716CBEF543EAA8FA757FFC84E6CFFCFED7C57FD85AD9B97 +22836AE06B69B330AEBF53CD0D06D5979CD877A9E5B845A6954AC46505D146DE +BF8C1E5CB4417D38716A8A9D88422781FFAD344A5394C8EDDD5880C7EBEE79B7 +4389F9DFE9DB33B362EF519C6C87999EF91FD793EB27CC09687B47201C3F78A0 +33828638489A89A3916709356208D8A278243D08A28F4F965C80B0B80245F95A +AD8CD2A62D16BEFDAB35E540AF4D5BF38F05BD173BA880E83ED1341B874AD164 +16C77E269A1FC2202FDAA375818BC28021EE1DF39681B545484771622DCCC4CF +F977242E74F056F5DF5E01A29684E3775D89F0B6B5C532D78B5DC546B1DD49EA +E360B18F4B4B20B77467F4E0405A64F57EFD5FB2F3C81424F7674DC5A3CAB914 +0D0EE78D6FA6F20C8E14D71ED117265A8FA0E4DF98DFA53AAADB40A528CE4B12 +8D33BE361DC980B0892A493E5939693EE966DED5DD1FFB31C0B16349ABC6923E +BAA8E352A0B7EDEB0CFE35448C1605A709DB9A947CE13495B37221ECB51F7CD4 +125B9223C197FD75E1C5EEB1F0BB6849E53CBC7C86C641DF87D34C48B0F03A1C +B4963BD66541CBE63127BA45D6E662D76EDBB844E71CE1A7B659F6EC35B09B9C +7A6443CF78887C04DA8E5E7185F3F149601449EB8C91DD0742297AB932745FFC +1E928F7DECDD5B004A02F98FC482CE090D39436450431324A635898E4E4B501A +A6BF1F39FA9BA52D7914E4C30652852E60C4EDA2749AED12FE7712F278449FEE +8A74CF28C245A352E719FC44447FE6E411C8D396974F2D0A93D2E6521E20CAEE +8EC36FB3778DE8A1836B0E7C0FAF06AAC5130955196FA7B2A224CE12FACC9BD5 +FDABD478DF2964A8169DF400690A8BD1FCB12D7B09DD46AEBEFEE91C64D64AE6 +93C33A92C936F28B7F7F369C62FEBE3CE6A75DDBEF8D80C150DBF417545668A4 +B2640525F0474CC4DD1739511491CFDAA41BC75DB2718E7ED6E0852015D266A6 +42CD2685A239D55F0B521B7E1EBCF85BDA0A09E6B6BB75766C4670BC03E88EB1 +2CD2EA69751B123A8DE9B17B33A96136C1529C8106FF4E3CAA73AB2B9AC5978D +CD3B9F70E40EF15D859E69646C73257F9327BCA00198C8967BBCA4A3A9D72140 +30CD111C4DCA5420A7BBE5D52CBF684FE007486D18898806CD1903C4E43FF4C3 +80C4B970C0AC65DAC87BBE1F6CEA015A0226A19D78014D6DD9EDA07FE4D6597F +2FF99B9E6969F1C84AA7567365E641CE9715AAD10325465F2C011FC88B020CD7 +C0C8EEB65F2DE85EFC9A6ADFD1502C881F121DF3FCA2417A0301FC6C8D9FA300 +07FA909571CD4F5B06362BDF7F833BD0584D8514E6DC71EE505E9280FB2FE188 +7B9F4B251B031C79653B9AF27272CCCF9FFC516E782B1D79EBBFE8D77BC0572C +58A8F6B355ED227F2138E5F3A385740581146E3767189946F9FE7710003A15C7 +CA5E0138778501630A870F03F0473479CEB85E44C263BE451E50E8E051644D7A +42D2EAC4917F2302EB45B1AB7F3303BCA046AB044DFC90C6351DDCB5C9C64416 +9747926238B69881787B9407B395C1776AAADA4F3CB734458218658C7FDECB51 +FB8179CEFDB7905887250286826CCD018AAE1F25022032A09E7B1D5ABB43677E +6E58542B3A4F801175EBB069B17CEC3D49A0086E5F3410B6645865AEA0768A3E +9F27F08DC87E8C436A75D1CBBAD46D05DA8D4CAF70790909149D6D8EA22C750F +4BDA941B6F31936C342F2847B3350E4D3A8202BA86D103F1AE2D416DD3E2EDD0 +69E5B111F4FF3C3DD3A75AA86721BD95ED2B14F17BEEF95E2CC0FDC3364FAA94 +F2C41CF57CFBE8DEF4BE7C4EC6ACAB89BEBECCB8C7735EA45033BB9B8038C35F +027FAC621F9C82A62B3FBB91AD33EF893C906C2756A98566679AEB20099C1B3F +E6D6E1E2BBEAEAB3485197DD03F743F51D26C672CF0DB1AC905EFA6038FB9B0B +CD3FA26B0865937A759C6B5F1A694BA9CF778FB7AED5628BF949411C4159F3FC +A41E1070870F50E2DF82C8DA5EAE42E2D6611397C65781470DF7EEB7C09F6A55 +A6C8AC34342F45D78F676510768D8F9154784C087C6C2507821A371676E514A7 +7C1D358E8110E7B40CF5C3FACD3A74C4BF1455BBA4DBEF2DC051AB36317A7B30 +DC063D31D6FCD5BCC1A139D1F0D8365D54E32DACF2A49909CDE3A6EAF40F071E +354AAA97C01188ABA1F01669132F696279483C431BCBDCF6E6386BA85FF7F0E3 +B6D859AC79348711D1BEE093334FEF60D856AC0A5F0969DB94CEE10BE69F79AD +3E5F79AF68ADD91ACEF7D32E8E8185741F2A9FF91BE15E837FE2751121E86CC0 +2105D77B86DD542EBB74CDAE2883DA9F3AF2A2A530066A50689FDD29F766CDE3 +806D775F877F08C6F2426E19FE361FE6870EF24BAFE518A82541A721AF5F6FEA +26CA4FAA9974B2598ECC7A9A31937B8C3A01874357C6A820B465D582B092AC6D +976DAE72B808E32BD4D19230B3E07108E15E482F0F77722B28C673D6162DA69D +BC1493255B456AEEE531CF8FEB2C232741A05EB98152F1C4E506316CBBB57088 +5D273535D36C1D96EBAC6F157007961767F715CF317702F1D8B438DEBAD37CAA +8FC81CC1A33C553707931A28A05FBDCFCCBE061607B2E2EBB273690D3A79B5F8 +17BD66A7703997B9D4F6BB3F4D127E9D6E5C57D7011CB79DBC33311FE1CB5372 +D5FA910243FB85840880F8C446B9D62D7AC256A3C4723CF81F74279323B5BD51 +494E2E719813FB3C04CD77B298F36322024599C0EF0FB8E59EB4F569F4385057 +3CAA85539DEA522AE7C528A5AD7953342406164B8D04A7FCA4DDEE4D3417DD8B +A2493490ECEFC88EB32AD3D2F884CD7AAC0E97D8F60841467D224AB9FE423073 +33F58B50C4CE5C924C9501CBD8EC763F2AAA91DAF246477E7AA1D04B9ABFD784 +EED48EEE9A5BF7F6408DDF9E767EB5EFE760AEF49493B284D261FA290D7D6571 +6CB501C36ADD79150207885B6E09D8ED8C379EA29C64F4F45683A61A71B618D9 +926AE986EC3740C4E2D8540F67844942201DEEE5BB871D3C21A466F9095DA182 +D796C081DFE67CA73C9BE74D000D60B2C8E89A63CEA1BB4EA824E82877519591 +C309F1DFB74F6FE3DA0050E995012263195F25B5E04F38CD85378EF971A1876D +A1DD02AA52562508CD79DF49E62B07E25CC9B4AE82979E01823DD9112042D99D +BFA6F0177784B13A1C6C17DCE6A5B11D37C55EAF5A079842035B2BEB80B6E80D +75A18AE1AE91D17778423D83EF86CB7F96D820033C76914C981641E63797A376 +0E4856250356F84255D64425F72978AA4099DC1B312F6BB567EE65770B9B936D +40DBAF3566C91A1A0AA8A63A3594552D3FAFF8B20D60851634773700B6C5975A +E294B0209CD31DE60BA4C89807039EE27ECC63ED0B30103D9264839A79B64C97 +0526A1FAE7648AD90DED9E0F297D698CCA33D83E7071306AFCCD15B6D9BB8BB7 +63E8F768DD41469743E4603B06C0BAF81E3F9382AAC9E08944710D7C5A10455C +35701F0105E4EA0A91866201E087290A5BAA7FC4BF325F9B1D860B3A85AE14A5 +C2FA8B12AF03131CCD2E728494E49027550F0EB469D8CE32ACABD2B1615BA044 +9B6C6417855530BA109E863A9A49740AC52330CDC0C56E82725BBA17EABDBF71 +F73E71B68C6C28003FB41F9AF7E5B643234DFBAFF08C97BC2E738410BCA10D9E +A85E74EEFF37F7C23D6419207D09A842E1D772937FEAD47D97BD6DE8AA2BAD34 +F0EA516227BFD2C38DCBD6AF0DE795DAEDA5742B2952C4A4BEEA84383BEF3F24 +E9666344B63AA4AA7BF8A81562E3863D0ACCA7FF120D8B348F02DE8B1844796A +3EFC082E4EA1B9CE68FA4093F0782A3E84B88EB3EE80752908DAB7F44F2EA078 +30FB84231E442648ADF1DBDB9EFCBC7FF86FEB25C1ACB394A951CDA3E6B0BA96 +0A46701F3E098009A9B798EAE63E0EBE0AD92E6F622FE571A142B319DED37251 +727D16650E96385715A3E30C782D11FF71CCB96EF8622A2F155FE38158D27879 +6C83A35F43D9ACFBB7879088AC5D42FC089EB04DC6FFF1782358555A41FA4A0C +8ABE13D29AF8C8704D32AEEDBC1CA1C26FB424E58A188D4FC6EA93928E0EF165 +CF4F623777C470FC014A5E0F4692FC48F1FC5E7EB5BFC27080CDD804692D9C03 +38FFA892F6646CEF24389001D864F948C4E2FFEA85EB3D38860347CF27C14B11 +C8ADAFD3470E4F36301728DE3ABC113B5524CCEEBA4B131B0C28AA7F5704607F +068F25D944724A720089DE0D31EA9F28E102CC2C5E7171045EBDF6F2B247D375 +1AB8275270FFBD8C7296BA324F41A50531FC5CE4A744F597B9721B517D0920CD +EC9BD2591A68C26E7FD8C85FF53296870B217F3E7CEDBEA624AE86B053519D43 +351A9ABD9200A210C37B63E3709AA987D5BD0E38E42FBBEF95D6AC8AFF39AFA9 +D617C95439431C548318902386CA491C8323DB9091E5D99A34876114073842B0 +4080A4C566AF2BE80C18728B4006906ED393B03F1483CFC1BE8AD34015DAEDA0 +52157860A182CF1273773E3935205A5A5471E4189D6CEF1C14D883EAF33A6A1A +97561202E48FEBFB694F64518121343FB6AD6A82FC3D8FFF30C12A4ECB069BEF +20051BEC2DC96D847B5D55DA3FDBD4E1141349B680BF87E0732C674FB43398A5 +9ABBA32B9E1CB05F252132AE267909E50545DD9AA346B82EF9A6ED32D003E154 +F56FF97CCFAA615AED2D602D4999F0897AC771B20D108A37AA837073D4B736A0 +24C71913D7FDC760069CA22DA19A894BC2BC0AB15B5D79B6342F27564C85BFCE +295F38B751FB4B001A1AA33C59B67382EB7E39A94C5667583B95E1966CC6C48F +D2486E9038DA341233176F50F02F8EAE53CE08912408D5051FAB8C5735442886 +C2DF65C0E354EEF4942C165BC9606DB23AC5501EFD2874771EBAAD3C163B7618 +11C6C10614BA0D80FB4CA69F9D086B02F0CB41C05902F714E8D2063A5080AFD8 +21373E9B5315889D838CCE0ED5D0E008407E2A84C978A33DC26A93070422DB9D +69B546FE7A35D50AF6D79AFB76BBAA096DF5AC92F1EA49223F1FF8780134AE63 +256048C0DD9E01DA1922B71A639B7C44BD7EE445905921052D7D8F388FCD9C44 +B6D5D314FB66472621113A6C7C659202F7723A40CC66E5069BC87327A5BC741C +AEA58DA6EF9C066ADC27FA41F58E33413451375E849DCB729431644F71E567B2 +3FDBB581F154C1E3CE505D015D5674AD6FFFAA8C34692DC90998C287130741A2 +ACC309F2EC1C1BA2687607B2A926F37E214EA8E3F786A8C0F720ED6225EEEEE7 +80ABCC7A1BAC33BF773DD5BE85947018612B376C47146667E32C964AA28168CE +5422582536FC6A15D6267A2C947E3E7E30746BEC06CD58F1BD87662C914A851D +AC113F4366560D6C5FBC874991CB3140ED7EA7B9DE23E0C5CD1D359476208DC3 +2297446F1F10E33F87EAD9379BDF1F327F1960A95D73FB1F1AF2E2546042DF29 +4EAA9243532A32E4B477F2FEC68C0A62D80FEF79177EDEC5B68B323E0098C842 +B812EB2A6AC35270AD5DBD54FD480E14701FB6EE024FB368CABB3C101A27A8B4 +139F707F03D27F954E965B26EDED11AD94E12ADAF4CEC098942A57CE1E3431CB +71ADDEB0722A5D3358E6C198E77C622CE1B8AC0926146A066640CE4B93E629F3 +44047767A4AE4BA22C62440985D81148CBFF2AF2C9CF4BF5FF470CF180DCF7CA +421C39825DEBDC32732C89880A1F01B6F0B5D4DF3D027FE085205665F38808EB +11C4E7EF100FCF42E6E2F6D9C0B8ED4C1FEDBFF2C0018E5791C4E7C476538EBF +2C9A1E3A637317FA9205F3E573EC10F4B64A2365089AF788DC7BC287D1F6A118 +A089C88DA558B5971DA04059DB4E50478574BBC5A168BF2AB2E20C6670342803 +843A1530112D5351BF57AAB18BE59B259BC31ADD0E09F5D74CEB65EE7F36D680 +F2EFF02FD7E28A41F252EB104B634427AF94C4D217F97561224122779530BCD8 +801CE8B85EC861118F8BFF03E6F0CD1DC849C1E926EFFA8D97AB46E37F542BD5 +EDAA0F0BBD6FB4DE0B9262BB62C16FC1C2AE6B293FDE5871FFC7281201DD1554 +6C854B7EDD2B6B0CDD8EE4FF8ABB384439E10466D26D429BBF4BB08141D25DE6 +14D21B427CEC42EB7D3F87503C815C98389EFD885A294026C2833DE371D57C6B +9A954EECBC8779C97D91DD7700C2E72BB555368F023DB92F052F3061C55A3507 +8FE9159D4C9729D1C7C68F0AABCFAD94E26BDFF858A6E72620C64D2E22BA6973 +8A4F897AA78F7D687C76474A9B23E526709142A6F7F3AF0086599A3E058A00B7 +57D6F9DCA2042B5EB6090750210C199931178AB3871F6D29F2970790BA0CBA58 +68E4FE92BC0663B9DA027F0038A151F117917525A8A0344490FE2DA3F6E86E30 +BBAAFFB548663A219F279321D099A29456E8B7F0C8A64D38A7F442FDD62F671B +01770FE0346EE1B13B504813FA52CCEC02D7CB1B8493A48761746AC966AC5314 +46FFF54315967666226901BF678CE112D69E2AB4B0EFA1657960CB1206EE696F +AEBBE067327BB8BD9806B66E7B7BD3E2F79B3A816D4A33165D4F742111D16798 +7A08CE4817294D85265BC9811BB1290A4963206A559BABA4E0BA8CEF5DB00B1E +3D96B4CFBE5C0C314EA62C469E1127D34A69E6CC3BA9BEC71EE25E45807D2C42 +5800706DF39D6DA998C8FD58E55F43A98CC91156B3F7EFE86EA0F98DF4ADE76A +FCA59D60D0F0A72878BC777565E94EBCB231DD2269E52F330B4B902BF8B41A4A +DED27BDC29C8E5532AC8D90110624A056840A71D54A333922DA9BC06DDCC065E +684B4E2378B593EA97953F08FD4CD1100CE5E8C1E231E72EF37871676AB50991 +37F07B58A725414088C6038BDA82084ED6D051B8CBE8D3575E5D0ECA800970CC +F4AFD3F945F5AEF79A8BB93491BC10CCCBCA635DC6C6C22392501F97C38DCED8 +6EB6C3D31108DD0AF903EDE33D36DA630DFAD75AF23D61E9ADA3AF8EC6A4B9E8 +5ACF5E0A02D63B06D45D0F98A93CD2671F213C0A4F27AD93CEE03A809445E381 +0B3EC3858D51448616623F36B6674E538572B99AA41F6298FC502B4C4C61CB06 +6D66D5D5C8C58C1B9AC62A4594D39BCAD5D3A82CEBEE4846D81F795B90784896 +2F3C4CF282FC10FA9FCC21E70B313AB2CCFD81A6F6F6CDB09FC559B2E19377F8 +28D8C5 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +{restore}if +%%EndFont +%%BeginFont: CMR10 +%!PS-AdobeFont-1.0: CMR10 003.002 +%%Title: CMR10 +%Version: 003.002 +%%CreationDate: Mon Jul 13 16:17:00 2009 +%%Creator: David M. Jones +%Copyright: Copyright (c) 1997, 2009 American Mathematical Society +%Copyright: (<http://www.ams.org>), with Reserved Font Name CMR10. +% This Font Software is licensed under the SIL Open Font License, Version 1.1. +% This license is in the accompanying file OFL.txt, and is also +% available with a FAQ at: http://scripts.sil.org/OFL. +%%EndComments +FontDirectory/CMR10 known{/CMR10 findfont dup/UniqueID known{dup +/UniqueID get 5000793 eq exch/FontType get 1 eq and}{pop false}ifelse +{save true}{false}ifelse}{false}ifelse +11 dict begin +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def +/FontName /CMR10 def +/FontBBox {-40 -250 1009 750 }readonly def +/UniqueID 5000793 def +/PaintType 0 def +/FontInfo 9 dict dup begin +/version (003.002) readonly def +/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMR10.) readonly def +/FullName (CMR10) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +end readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 11 /ff put +dup 12 /fi put +dup 14 /ffi put +dup 15 /ffl put +dup 25 /germandbls put +dup 34 /quotedblright put +dup 35 /numbersign put +dup 36 /dollar put +dup 37 /percent put +dup 39 /quoteright put +dup 40 /parenleft put +dup 41 /parenright put +dup 44 /comma put +dup 45 /hyphen put +dup 46 /period put +dup 47 /slash put +dup 48 /zero put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 57 /nine put +dup 58 /colon put +dup 59 /semicolon put +dup 63 /question put +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 74 /J put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 81 /Q put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 85 /U put +dup 86 /V put +dup 87 /W put +dup 88 /X put +dup 89 /Y put +dup 90 /Z put +dup 91 /bracketleft put +dup 92 /quotedblleft put +dup 93 /bracketright put +dup 94 /circumflex put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 106 /j put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 122 /z put +dup 123 /endash put +readonly def +currentdict end +currentfile eexec +D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA +0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 +51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 +7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 +E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 +0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 +C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9B8591E5F01442D8 +569672CF86B91C3F79C5DDC97C190EE0082814A5B5A2A5E77C790F087E729079 +24A5AC880DDED58334DD5E8DC6A0B2BD4F04B17334A74BF8FF5D88B7B678A04A +2255C050CB39A389106B0C672A1912AFA86A49EFD02E61E6509E50EE35E67944 +8FC63D91C3D2794B49A0C2993832BC4CDC8F7BD7575AD61BCDF42E2E421AA93E +3FF9E4FAD980256D8B377043A07FC75D6169338028692CCA8CD1FE92FD60AD26 +D57B7519B80A8F8DCE9CEE5CDF720AF268D3C14099498A843D76E3B6C0328F24 +D36EFE7F5C4E5B5C612786200C8DE3A41EE5F1FFAF4097653CFCDC8F4FD32E0B +03EDB3E413283B9EFB0AC33B055617005BC9B0057FD68C52D1B0E67F0C571685 +767F2AA85ADE4E0104A1C777733D5E318A22A9944336E5B98D965E50D31F357A +8B6EA5A0EA98E1B027CE68C2EDB149EDDD04ED74A1B3D206D471A0C11C11449B +DE190BBFEBC08C9E1B7513B43DA3134D6B11A2516E6E86B67F68C970A320D05E +94FEC57FB347606DF89989C33482BD09D011C55AA920319E7B26A205D3D0F004 +22466F09C0482A164CFB27EF6ED2B040ECCC3DCAF345B5A73676F193D43123B7 +72FD6CFC5E37930E61EBD5A6307E4DE70194E6384EC0D79DB6AD86D3B319A31C +8B0589D0FE28241D8ACE280D0530EE99C80723E560BB72AE9D53F4713181F491 +344B06D3027BA4E9E94D4305BE1D817197C54C8FF56CD6964165F6448ECC8A8A +64B48B4F0FD69299A137589E2491A283509B21A3A5772F75B7602A9F60AE559B +07A58436D04222C73EAEA72DE9A5A441F88D27C11F4F91255EFE280E91A4ACAC +1E98A4E5E6C57B9AE86FD218C3CD8F24A4104156A80F13821384E529783C52C8 +78B94AB3A0096090867ED32E8A30980E737922037F75F062BD83BF4F5929BC51 +CC22AEE2DBBAAA001CFFBFF41D258424FAD888FFF1BEAB796A44E3126159E120 +7E4025C676CF94888A1971AEF8B6764B3AF4A92D36FAF6FC56FD049710EE3782 +BC2CD84FE2473F133BE03C1346B875463F126DCAB15C7A9BCC9A727D23611462 +4E8D2BFD2466600285D79518712B8681ABCD69608E6AA9578F7BD771EC36E01A +5A17BC17E375020ECA59B43790ABEB9DF5F4FBBEF807E5699EFEAC563E1ACC5D +EFA336E75DE6D8248E9381BB110884FDC89C2F9A41EBBC9A8A1F98E6A41F68BE +EE30E25CA148C1EFF42DFF8C214A6537AB11F260B8C329A4947B5FC8DC9C5622 +4DF7BF4FBFB00380D47BABB03BC30627AA74103E553F55278F538EDD8C1E64CE +0F1398CA0AB5A86630139B4A7E8FC02804CAFF3830114640AE50D2FDA3B561B5 +C63AD7EE3347804CBB40FB1E77A6C89735DD870351C3A1811591AB493251B904 +314F65791963C0412377C1D02362C5E9655F1C3D4803CD379A8EF24C48218C2E +DF1165840462BF37DDE1B8D5FF09FA2C3B261E2F1A65ECFBE5D4EAD43B52C029 +EEB3948CB8A252CBAF545C8FA1C31E920E23A12DD7222CEF2D2A513BD758EA13 +DA33BF5FBF1D734653EB83DA2D374A5B9A0CE316F24EE375D6DF6BDA49954C2E +DB25A88821193636119D469BA66E5DAA9C92520FD4F84426A4E54273FA469084 +7517817A6EE3E21176D333825E88046F50B3CF6938AF9BA79A2F51398239EB91 +1A2D07F7FCD948427FF62F40FF95E39FE1A1AA8451411563FD5388472251C155 +69BDE9283B41900B21EB1190D06E6B13B7794FED020D2C1BDD205AE77B084BCE +EF628249398B496DE85B406FC2E1939EF00DFC84C07E26CF72EC401BAAE756E5 +7F6673216E7560D1C2A723CB405EE5CA474A07F61B81F8836482F73DC9516D67 +CE0CB770EAD755B6B356198B4B97EBB29C63456953270CCC8D5650C1D006E69D +38DE2DFEAB27DAD50A817F0D645D30AF5B75A7B53CBD3D2B8D87BD0A7E525AF3 +22F7ADDFCE31716914C2318260C2E2B4664893921B68C5A93334A361D94A759C +0D7B146D6FD94F0442D672BDA0F6432E18F3C5DFA37ADA378D95B75F413C9ED1 +BB5C606A3EC7DFB3F796F59B0478C13FD1900381EFE0BB5242D5B5D34D03AF1D +4BDC93EAF8020E26CA23C8B0E7DDEBBC6762A557067A4CE05A524188A8F02E2F +3625DA38DFCF381727887F5646A3995A8A38A5FB1E5D5EBB395FDD0B7C8E71AD +B48EEDB62AB2CE99D121435EFBBFCEEA69AE9ED8238B60CC7288DE33C766CDFE +15B767B4AE2E6CE0965E77272AC9F86023DA620548CFAC85BC751C44218A29C9 +849F1C2DCBDFAD895B54E51A569952ED50F82DC8A19F367E7E44643854EFD6B3 +FCAEB04E55E4661C82D31E2932611748480EF61FB2FBFB0CFB940BEA81AFCD84 +4C6A6332D7A600170E38A8EAFCD4F93DC153C43175434C86BC747348FAC61B76 +1FEC9027C1A193E55C80F1F20B5317AA0A05AAA36AE235F6E49F06E570FEE798 +84857D7552EA92EF3EFAD52DE39C2F8F43C59E3A957B7B926FC95FC4B60186DF +7F3523EE2AB74E294C8C4BCD8B4975E84849E0FBDA6C0B0F24A636DFA578B122 +CF97BC5089E21E9F5298D1C9F30CB8BAFF6A3A11BB4D9A0A5CF2B18D055C44CA +4FD4D8FE1AF3630907DE7E585AA811F9CD11FB2C8FC791851D651009FA5DF20B +3C33FD2FF848A9E3F5652BD294965A332DD3F246C91B0ADA34017FF2451D1394 +F9C3C95AAC6EC8062BE98E8914D51DA6A164AD13938693D446044859D03A949D +F9AC5DF4A000CDA98BB516D762CB9F6D44B5268FD0C26E88BC4A760C0F75A140 +DEBDECA4F511128B7D2805872160C55236F0A0FA7637FF0D4E94AC079CD3C8A7 +D03A5A56F26B0438B577C46011A10532FEBCAD14FBD6032E224F45691A726886 +56F305231EB2FCDF59C8BBFCB5DBD2D093A0E84D62AC93A2312CA69295E937C4 +8DBA1802B85F54B5E7E6D6216A918F911FF705D3B5CF055F1D873B96283A0B53 +59344D910CD396D883F6F7836BA65FAB4393A773A8F6BC298069E5BA38210EED +49C9D920F718E3FCE692527DC7CCE6963BF744F2C91BC5952564196D60574E86 +87A0FAB21F2DB2BD5A51D7FBD8FC19946D24E5A228462C4772F978E650ADCE3B +8D66B9C21279C531CA1C3A8ECE3420BB65837287A7222CC3673A2A5F8BBFDB60 +C719CD073EF9A23675198462C7C87B24CC92D6AEE5C25AC63855CC3281494342 +D28F3D2FDE0C183486769A4FD5B0143193D31FCB2C2A14E487BBD96D0BADBB64 +D1B56021C363A795BF10E2DB448261C363A54A4AC1182B470C457AA82DF3F5D1 +F4B329806141EBD53CAE309319B94133D7EBDC2D0453A905ADD207364371E178 +0A95C2686E3B34C4A978BFC0EE968C39ABA00889BC5149162C2B54483D44FD3B +5CFF41F611C7E03B94945F414560E874D7CF27FFD0630890D7D7EA66CBD15448 +229059E1C436BB33D69552B5367AB5D53591C4678D0C704DD3EA23F5D9E8A7AC +17D003C19E333E726FFFA2961F33C70F429085F7BFE3E2510F59B78F58B19CB4 +01B48E184BAD9020FECCE3AF52048A056981DAEA02AE78197E65855DDB170616 +F54278395D9EA50DC83761AE759F9CDEF9E1948E7002414FC05286ED793E6662 +3347F2A9AF8917493D7305B92CF93E8E9185F70015F5594084298A6C2F9FD3C0 +689F262AC9FEDC9B89577ECDE92F08D3142209FBCE7B5C0A840CC767BCA56C20 +4E4E545E2BE4D21C53855CEE4CD0AB35D1A604C0FFFF77DBAE4289752276559F +A05FEE65F45ECAF44E95E23FAB6052195C7948AF0B1126482D4E02D72BF8AB03 +DE0F1A632F7672AD9DDE70EDC82AA993678A82BEAD0BC2649C4707FD8509810D +364B5C6FE0E10772E95288C622C2F06C634F4DF8C7FD1432BC9310D5F24FEE3F +7AB324863D6DABAA1576E70643CA79EF4D7DF4105093D66CEE0F3B87D2164A7F +26EA05F5C4645B22D3E1BFD2219657712C168FD90DE801FB0F32759E80DEC1E1 +43CEEB19FED12D757205043FC98FEC62D6A8D8B97BC083B4A0E985AF7850D6FD +8716B9957C1C35A0675BC53DF672C425C79F43FDABAEE7D63F092CF271C9A9D7 +C41F40C4189510987887942E60A412B3EEC84C9A6E1AC7D54D528F5604B72C08 +94B7882621A5BF1F325B92FF96B80878CC550D1AE4D8196E41CB1251856609A5 +C4D3BD05A922D0D45E039D9450DEF8490A3E924E41434194910BF60BA1B08BE1 +B41824345627745541A4F1703E956328F6227D11C74946B38CFB096139979E56 +4E723B889B44C6D78673868C89912F8B4F0B4B485F1587A637B630F92E6072D5 +7F3B44EA6FD96BBD4FC28A6C1D90805E3BE3E42A7BC9C880762966C55BC04E01 +204D083AE976FAE6F37C94F27E68F8C0F28D52B17F6C0FD7C9150701FD78F8CE +B8E8DC9260E3974005EB5CA728171F482D765016C94D4ADFE4A42EF42212BC56 +7E4EEEE8B0D2A7856CD4E44F55C0BAB762F92CB8D64C17022D4BF3A47C12F5E6 +279FC23101FEE93753653CE8CEDC3B75C9CCB29BF1D4554C6120DE8EE750FCBB +E38B5D915206974962E320362E59B3F21B3AB1875703191043D03284D4467346 +CFF2F98CEB4845B73ED8E003E0DC94251B73E13A9B51A3F1430BCF6A21EB9B7A +65E17FA411F53BE6432F1506232B8159E008FA257F884A4A01AC53BE91754D78 +BF14A5B0FBFB9C31BF4908355F8A762052968DF526D118708CCB0B7CB5BEE285 +6DAB6CD2E3934178E60BECB11AAB5478623CF6C50C92F8BB5D1A583609028FA7 +B8A53B791BDC9EF76A124F3F7641857E4BEA0837CB36176EC9A522EA7F41B8D3 +63C37D1145367BD300F17B54522A834BBB74DE12BF9EB26ACE6F24A046D58F89 +4D4B7DF74875F1A0C1C9D97BE0849593D7B398EB4B00BEBC8C8D1497B6EF831A +A35380FFB7F1AFA4D888AA52C9482E8B1755CC209905F98F40D95B44D4DCBCB6 +67423D1BC2F3560FF0A8B4F0CAC352A4EE2C1D946E45AAEC8A6AD40303F3382C +DF0756BFA3B1ED64C169E56ED1C760F2FF0E24DC5C9F41306EF8D2628153D30A +5DCB0791126BEFD4947D7EF08301FE015F2B0008DFFCBF9F2D4D859FD43EC7D9 +C5BE237E9BF6665B7B1BEBB362F0C0C3A8D86010B9C97FA741C97C2E0513386C +9C26C235B14DD2A58BFDAC7B5F63DB4DA6D5D37D0098175A9071590E1DF66A3D +B8173A047C29D7D35557F06132CC920B5460B8AFC11D23D09A4E45D089F5EB51 +963FA1A6256E359D485107FD143B2BF21FDE9DA5744BC2615E86C31C89470CF0 +D06C6397D9FCCB316EA9989430240759D2C4945D941F159FC02327F34B042BAB +B5C3A47C78E8C1A6FBCD396B1A51CC4B020B8AD401841EDABACECDB482D6EC5B +72D2BFEB4556720FADD49D07307C8B22ACB7E310CA4151A85C71EEF70E8D15DE +B3B00F26E0E166C14647A65ADA228A3D1C89025BE059306565DB1B1EFC37D358 +8C1EB024254AFD049BA977BD4C2C605050E17940A89D0D4C5D963E792320F5DB +3706682E03D25D9E02487247819551465092CC22B6B56E93F3AB528038FEC3F0 +668F866707A19B0463BE706EC729D2EE1653AAC7E29BD25BFB3241D4792F5152 +ED415B4E7FA92C2EE5A22E27E8B75542C492E56D811C192E95542A6FE0BFE5A5 +69273C2ABED4300D491B92D2AECDD278404CB84B1BB1BD7AFEC858215837D118 +C0E928BE7E07CFEEB51A6D21375B772B8248C994564014015232A0DA4BEA1754 +3274F407FED0837A236371F1A32056240F2015B1E7F4B2CA72C6B58610A66F13 +407CFFBA5E0A2893C1F572D50F51286E9133B5A84239C9493B0574E77D281D01 +11D00683354A000C9700EAFBC1FD104EA19DFCB87470190E7E2CE26E3A6FD0FF +2620B87B82AC8686B6206B530F17E9348BC7D04B948348802CE53A312443DB87 +4DBBA5313A6A2A8DAB8A1CC9A594FF8C299281C0A261C8CB2226B732FBEEDE40 +2C6ACC74A1A61379E2E1CD5548CD908268A32FA83D8504C442EA0E183ADBF7FF +9FD09C037AB03516ECCA93FF048235BD11A25DB07F164512A079C5392AC7F889 +CE96AE5C8D9580BCAFCC087C35E76EED1A671E87C12E3045E15A687134736DF8 +DA984772AFD189D68571A2ED7256F1E204230E41D3D9DD876F938951714A3973 +0CA9310489F8E807C1C7A4E51AEA5BC030610A5D7263FF7E0F9FDE3E5E37A362 +5B919000BD94D978583B942EB79CF2BEAC33FEBC9A67272EB10865BA8FB75FD7 +9D280AB59F91B96C16C982DE848D76D8FA8620DFD7C80B7DEAE7264350D6FB3A +EF04794DA3305844A7CF718F6D1A4A3AFF6826173A076A1372ABFC54ED3AC6C2 +09C9287FC830556CA694E21CA5342ECA7B10C90AFC4783D841D7B1E34FA3DB7A +2B706F3E21B0FBAB23E7257962FC3BC309CEA2C7239A9D6B44CC96825115ABD2 +AF9A2566D2F3382C01569FBDB94C8D664A5DA0F7DC3DD140CA77C743D7BC1420 +324ECF9E4780280EB119885E96A6C619CE3C0C8E1E264E2DEB137E5DC8149786 +486D65667ECF47B1A1E20E9E6E4FC8323E0BC8E61BDD3BCDFC6575C69C03E31A +EFFC290472CBBD049DE3F840AEE37A2486034240F80E75D8A79E0762377DF660 +52B12EAA16D678990B11A9BFBC03C1D4FCDA9FD4FFBB3E88352438102F10B7C5 +9F04C013B6575B5E948FAB58EA691984A0E54E6B9F3F505FFFEF74D06FA1CDF3 +4B8A95904C8A2763AA8AF5B71D00F5DE09DC1CDF87A08B6D181453063E14C12D +B7BB3775A6E2A901636273D9EEB833EA8CF20FD83AE899E28DADE10EEEC20BD7 +BD93085A4B1AC80AC1AE8280C14767F1A487BD066007A0D050317BD081131A14 +6EA0898ED59E46DA7B6254BDCCBC660686E2EDA0E77A705A653733BB5C5497D0 +B130359F866CF293FB6EF0C2AC5BAA2DB0DED045E2DED3A2612D078333260359 +16CF0CCB272D34767EA069E0F0B0D42327A18529D72E890EDA6195C2688438ED +E9ACDBEED41E81CA8EB5E43C2B09CE266EFCA03F2D7FF57F12B06F9E54FCC6A6 +546676F6FFC5B8B7D3F0982B6FF0D21D949309F0C0B175CC1D0976F8C55C6AED +6E821C39041E22D91AB30922F2B2EC2746BC7DAB484991542FBC82D87B487507 +559AB466F73EE23C2D3194DC5CE4C9AE66D3164613AC5CBB3DB501B64DA7C91B +C7ED2EE9027FC0906820B35D4F2CF66C4F9CE4A884B7C07155BCA884ECA5EB3A +ABB83F84DB1F5639599DC7D3F51241AB5D95C3BCB7AB1EC90B4BC989F74FB354 +04B2D7366A34D335A47B8C00C05CB423482BF6C7970A95545424A08AFF9A035B +7F83F52B65A9799CE76E303B85664B624C65E9CA58184C7BE2BB9D9C86A4DE5A +8165EE3DA2E652B5022EE7893896BABD88931DE1D538F615787645DF5ACBBA0B +A8E5B899A37321AA7D4B283AC9234978C2DD81813A1EE5DB6EC170DAC1B6EF02 +94892635B498765C07A38D2E9DB0B7581B11056C28278F89B0E60998379C07EB +C0EAEDC32AA69B8B836F92A61AFD35688315B2C3F860632FC13E4BDFB63214BC +41CC6859EAB3AC3034449213CAB99FA1D216563419CD6D6CE4E1B56F33E6C654 +7AA9DCB5B05FC068DF02AC32408C8010AD004F6CCA9887830927F8CBCD49CDB5 +18CAC1EAFF815FF2F6F527F936948201565003022C6C7390B4E3C2B219FB4F76 +9F12BD25CA7B3B61D1A2F8DFEE795D04D5428B42FB66E0C254AF7B7A10CEF7FD +E5ADA5E217BE24851180E9A1700FBA66C7D2B0D7BFDE4F4EED1D24B821A40947 +5620363657F6D048E651A689822CF815E72FC8AE9D835BE31D1DD8B54C9A717F +4DC319B4B59AE073936EA40B070524C7E71D5A7B64436DA107749746B516E29F +E3BBCB8F8C473E706670E11E5B221716F315FF097CD1841D0069FA69EA1898FF +9F9EC2518C77806A19730C97F54BEAD604548D553D4A6EDB247853225E24E7E9 +89D71F6BC94DB986467E755CCC99069B313F5745B02B4BB608A39F0A0A732B87 +7EA2DED68219754BF1FBCA350327572D769C962EF9242132D93A5C8E9725D8D3 +AAAEC15ED0F43F9A1290E91C463895BD12E8A831DAD661EF23CB9AD2C26CFB26 +71B72D15270CD8CB1D59CA2D9DEE4B63A8FD2929735CBAADF336DB2088C0BAD9 +B79DA00F002B98E0B4790F729DB337A63C1BF138947E9552402C37257019A2AE +6961E7DE6E5472914BBA36D0E9F53FA5771D2801267609C8B8B12A11E0AB6031 +E251D1F7D5055B426B1CEEB8B381E7D0C3953C9493D87FC6BF93A12EA642FE24 +2DF17AA5366C023E4C8CF8FBBFC9E17F1834BFA8B62DC91E5252BB2A1044B616 +C6A52E741050DD47796F65BA79F3465F7305DC0EDBB76D3873FD32A1EF0C6595 +55F853978F6483C58F2F27B70623BB0193E1DBFF2AB5B1368EFBF754882FF3DC +718EE9DF75250DE6FB69CD1F3FA88F74C28AB75D63C8632FECAD68D32B21307D +28832F55FD651BC6D56B03073DCF6DEB5873E715677479DB92989DF9FB1300BE +EB57CFF22C7CBA28D69C7E54DAB585AC1706688C94717B2F1204BBE9A32B02C5 +69FE47B757805513524F45903E166D92493145C52FB2AF2E61D48B83F794BED5 +E77E07C36E69E259E3E3D4156C9152A59752B0F2EE315A2ED05A5189E0C5A31E +35448577FD635ABA25D2D1E8ED86030B6FFC8FE5B6ED9A726CED9E29D9E11C12 +1BC6DBBF00CDAC1B83B6413C89AE9C0B75E2F3010CC15E842B0D6941E1062912 +E8AD848E60F4D09A441DD1B3CDFA4A39501C1657A4131B1C2F5F9081052FD7FE +48537BB9F93F480589012D7881C8E345FAE43DFDFF5F9C602EB47F4DF8FE8A5E +DC6EE00429F29DF6424012BC1FD7F41D8396162C3E37439A9BCFFDCEA7E9686C +074CDB097FE2E5FA7A4DE7C79850BDDDEE9E0845A4158485503684E0C5808916 +5DEF8158FF61B3601D83CFA2183777A4463C553A9D3FA7C7612CE52815250A47 +2B8DC7C58DFE9DF10BBC7C44086BC9088D744562422545FF61762A272F01A2A9 +1BA32B481655BB1D5A1D7873601C1318E24225317A8D8DDE34504C3252DE1BA1 +4616BCBEB112B3ACEB1C95129F14D50E1375DC1FA05957A0F054AE750CFD0800 +ED2E2AEE7903141C655655C007B65C755A23B3EE225AEEEE4199F65D8CE85A71 +6FAF25258A6FB58A9FB12A7CE8D1889F3A5672E14A759C03AD3089DA55B3DCC9 +318748F6ABB3AB456D19D9769EAE8761D3F2FAA263C6B723AE4E25543FC00F14 +0F43244E094BFA939E13EC7291BFF41F9C6C165AFC320B35CCDB5D8E13419C35 +989845797DF580DA0E0A4F6DB3FF53E47D79C93DBCA24D114668BF0933E4375B +0F19706FCAD31A30036E5778DCC3F224EDA854D4E210DAFD6601CFA788ADCDF6 +43C209226ECCB4FFA430CD0CA7B04681AFB83A9E85CE3D05FA59E3A4AA6C03AB +564001FEECD82EA90C526B7C069F7DFBD72517B16623441FB9F22209EEDDC398 +6FFE2E028E6F38694C8F8DC44FBA56798D8BC3FDC37AA148E17A0BA6D3F31894 +552717DFC8A538A12ABE23EAABF4378EA1AC7FB3A56AD0148429BC13BA6744A2 +78B6D8ADF0E5274BE625F3F1D1C471A889E06E4F7ADDACF6AF87A1D7613AA7C5 +19BCE1662DC2FF7B075BAFE9B5DE88D4C7E9BA4DAA2E68F6B00B0D233256F3BA +4120E57F166EE0323CA9B4716B63E1EFEFDCB3A71D1B4EF5408AE432A0EBBEFC +C4E1B70FADDC7800CF67337AF9A3F236C7462C608A5F680718EF99483F49460E +8535A62CF2E44BCFAAC6CBDEC0E56A55E18E0B8D3EC7E806B4728BE7045DF339 +751CEE9BCFAD1DBDF31DE8B449A841994FEA0B2C6B2E0B3D1A3CA8F705AFB312 +986143729B8A0B5B1591B6493D53C4E7ACAAF84D2E4898BBD96830A112FA2769 +8E2316852222C1C8FFB4B6B3CB02A3A4A604FF1E78EBBC6C56A8E448153895A3 +0B4A82AF5946FDA0A1D8287E95DCD5BF08A1FFCA11B8BD493853D06CBDB6303C +06F30AF37522828F5502EB7437BF4286C8546ED5D6C0E3081D83DBAAEE918F38 +F1B9E3F1296EBB8EF26D1B429057CE65E413EDA36A71E7B691A72FECC2A86FEF +6979FE7215557FA66E61C99533F4636BBAB037B0A3F808E890D1582E1E08A29B +B161EF7DB88DA4B045E17B4F7D5232E23470E0CE83C8E610D0FC97526C614C58 +D6AD7669F2185285C3D81BA82AB066516E81CD12261B97DE4D37A45283F5BB13 +CBBE74570767979CEC35A117AAD1DD78EC0DED1BE9967C8AB2B71F08C6C3D437 +D1791D6570725E8477C26075C8A819E11C98500653702E62937C1883F40C5506 +E6654A1C779B3E97C1235263B3D05F76F471A46DE232B3A44F7AA2BF1B70E7B5 +B5862C1AEF64BD04D1317E0394443FEE2BF46CBF877A487B252B5C8ECB4BBF0C +8AAF20088C9CA414DA5CF96A6F3FD39BD1204C93FD562F766BF6ACE4CF454DC4 +F17115FF5AB424DE55B277110EC8772128EFE9D83799A10BBB734D570F417BF4 +183D36FCFE919CD4ECE02EDAB6E65E2D49B5ABB051053D4FD805E250E92112CC +BD815A603AA52B9A33D5AACC0EBCDFEBF0CBADAFC5640344126F091C95C427FE +5C0B265BFF2B6BF271B4E439800F4175F04BF1B180B36040A6E556B4C3972DC9 +C186980FC25FBD19E33B4B791F11B1859B9E19B54C00F586804E192C0B1960B2 +86C97ECA03C5AC8933B3219B95CC3529EA8B10F6A09F40F8E4171E7245B0BDBF +3850A455A4BF878CA4C3DE60753B640307594753878D6C83B0BB79222513E257 +3DB609F9AAD8241B5A21B97A11E8A79A428F23B0F9B99692ADB0A09EE2E8BD55 +ACE7DED1225E5D860AB55E7F75E7FE5CC3426B22380B10AB2CAAA53B3B00A484 +48ECDC5E0226FCB10AFD47A1E2CB0F1F34F746455CC8B4AB162A8717F653103D +CAFD245C7B1F1047F47883359E4FFBE3857AF495A7F2B78BCD0823AC7E1E2025 +0E3AAB8758531D63D87181A3EEC1AD962E9417335D5E048521B2659656F9F7CB +E6C7FA3C27329D0C0D23799846911C6779A481CE7409E4E4DA600E5845B0A7B0 +2DE636111815ECD8DC921109991E7182DEA45A8D2C0298F54A56B2AF180671B6 +EFF4B42E03C760F6DDE2E6D311F3C54CFC0B2EA17B3A81901277A14D6C77058D +B59914E9576E25EB201C382190E112D64A81554DE99891B2F0D7EBF8D4C5DBE2 +73EBD4D52570D5DD5FBFAB9F6A941E5C5540002F29D19089D33D5A87D9E7AA45 +99020AEAC725B77764E530DE619BC3EF4D3C708824045B88C5088B8AA8C06EB7 +7B86EAB90B7FAADC4B50E3E892A5024FFA986DDF098E40E56AFF983715324807 +97E5C6BB1C54F665D63DF1AE22836A7E4948BF4DCE3B3B12C214D99E68F11657 +225A2C22AF9E5DEDF038F276EBEF811FDC5FB6CF767D24D5A22BA1060BFFDE0F +7D05AEC38EE038F811CF34BAB81F8FCB42A086E4C3D9080B58EC971402C4D6A3 +5BEBBF3EA120DE4F130A0B512508C566F265A4E0A25B9C7C4F5C41E2C0FF4395 +BEA88B830DCEE2F4E5177F4561B5DAAED2DEE10380BD028519280570B3D870EE +B5E23536A32BE129DD55913AB136B69E0300B60AB1780B3BF87021A251235B8E +485E42682E9F4C6A317239E4774F66DF77395FB3EEDBC971DA6C2698612A4EF0 +60B4B73403CD7DB537BD73E5546629028DCA3773494073CB6196341BF42F6A61 +A4FD298BF1AE9E404EF4F3F92B0DDD4C7520B11492D5F484A3E9DC21714D304D +ABE2D4C7135CD91BC11969A0F03E83161FAA1FA5B369D5E10CD71EEAAD098515 +40047B466EDDA89161EF8AEBBD38727F99076C63EC11C0CAA44C420C63229547 +841D36838D978E748A17A489B48CEFB85094854B5399ABCE0578AE20395635FB +33F399DBE972BA6F587102E1322FD08D6A1AD27024064FE8A785A3F66FFA385B +06A5C6F8495002E2A1DE3A1A676B565D7221F8D06EAAD43B626B8FBE73737903 +DE67E77566BB46EB6E8EB21382738DBA2830BADA6559929D616EF85F9DFBC289 +71C38FF6EDAF5D6C7BB6E40EE3EE505963717F4BBF420844446784B44F764CBA +D8D78B010A57B0C60732C984C398DB68FDBD24AABA00FB4631080066D1AA344F +E6F307228D7AB162EEADBB0B55F9C88123B62748D59922C5A5ADE7DD2AA96F4E +2E4650172463E7515E16F653C7F38A21429A9C1ED493DC71793E84BB038A07AD +BF0C24B9B322C361606FA6D8C8D83BB142B59477C368E35090C584D80F2DECF5 +0026C2CEFEB188AED87FA8D62A27D876A9A7D177222708945F9CC15C9669D209 +C3F43C5280E47C868308F3909B349CBDF897BF27736264F3A322DD55FEA99BE0 +FA9319F93F61B943815C000CBAAF4D8B1B920CEFFD34CC7850D4C09DA4EA2619 +C5122CCD1D5D807ECC4DAD91294893A7DA2C3ABF2B3E92559213BDFFFCD5CBAC +69A729C257BBE45A134F852F6EC3B1AAB0A8AEDC639B9C178D588AAD639CA04C +4E11FACE82C7EE87E64BDCA204945533BCBDBA14BD6E2EA1C3D785EF35C137E1 +7EBEB144224AA134D37E372342F292C15B2479B064A7C3CA87B7E5BBBCCB72D6 +E2DD788CCE37A721DB3DB7F08BD0F05444D9179149217DF6B36367AFA9386AB3 +2299F3DF4D06CED7009D348534EFAC6F7A5B6B9AC28D9C53D79DB19F848987CC +417517CF6F42243C234413756CA68A0F125A0E7C142D5999892446E4AF11C73D +526DE031FDE880348E1D6047F69779962573177E41250B70584E1BE4060333E4 +277DC522EC949F494669BCBCDE44BE80FAF49A42D33D8E79B4C628C9DA340E6B +7E864FC494626389BB2A07981E8090C3CA746B492B3F2090039563C2318069C6 +3018054CB8AE70D910AC6987E546C6E433A5C5494B9C31A180ED7D64C8D5C906 +28079C0CD805D9951D78789E7A3C9CAE15C186F6622FE721565CA4EABB14F6B9 +68D6C041D372AA81E33F34D77DF1D4123C266FE7300ADA662A732717DDA2B9A4 +41DA122921A6D987AD5D190BFAB12DE3FFEFBE2D7E324AF689E509A5F4CC08C6 +5F7CC1E0DE8AF88A448703D6101D1068D9DDC87DD608BD8679AAD51A259259CD +CF34FD0A33C82EB8A22A0537B9FCB7B78BD405287F5B1708FD0685C575449D29 +B51B30154E1501956276EDB93F1C143489363393F082E5ACC9FFDD1D90CA8189 +128BFE91A8696182161D557DA31A46FD5F24C877187796B3FF181058A1508EA0 +1E831214F7475EC7402791E1521B7642C7CCE6BEF9450CC68CEFF4DCABD7D922 +FC9BD10B688716058586012D42F0136F685428278E94C7DB872C6148A6B01931 +0EFC5E3BA1B04275033C4AAC3E18B02E65529D5FCD89FA9DB129352C06305664 +4F0319F22926BEE62ED455433442616A4C59248CFC9D7494E26582C63DA4A44C +DF95FA809B0F5FF2C8B862EE357855A01F21A61ACA426DB4BC12DEABBEECCFFB +079579F14686ED8E524E2244F64426BF8DEDA7755779416A08D0020E107BDDAA +A28D752A1C6EC87B4779FE03959A8EDCF072D248782F562F11448B756464160C +C70BB16FB6C0BB9E9393DA2CAFE45B3DFB070FCD1ED7743C35C73D6BA23E2941 +B85D00DDDD4DAA7454FC002446758262B90DFDAC3FCBF09A1C95825CFF2374E3 +3FD629441B82B0E148721AC3B443E7F7DADDC996E9EDE494DED89C746C69F9BA +E7662D04E3FD1874FA26179EA32176F2EBD45DAB751B8610B4CD9C16DD78761F +C9EAF01C45907119C3B07D5DE4617D17CEA3C9FFDED8B859263727957760826E +3F77F63EB00FCA5DBFB6FF6DD3994E72C79E397358F3C25EF8069BD8E5221E17 +B30C30F30C10522C2443C66BD7EC2719790CDD8D8236AD87B62E7A206B0EF403 +C93A9F3320F5F7990CB440AD4AEF0F9EAA7FAC600E65DD15C9C7E2C3B7D91AEF +EF71982648B53B26EA2310D400BE0744EA2DB6491AA220E0F307A86F9605DFDC +FF3D8F82203863B7E6A243700C31EEFC7139DF2CBE9507CFCCBE098B20AD88DD +B3492FCC625A73A2F9D133E81CB0AFAFA85A68556B1B65DC56D9AB12152BEF13 +D11D0A59408474B15008ACA21DDF965DEC28BE269B03A32073F5FF199DA83D32 +9085038A7B13CB2000AC3AC0433BFA7CA2EE48AC2063C256D51A52BF0D97B34C +313B579445747E7B5DAB31C81A3EB9B26931BDDCCF1F78DF4B7A41E21451394B +FD42560B379433F92EF6ED0654C1439DCE967B5DF595F89D7FCF6E24AD4F89A3 +8EB88F2C66ACC618420BA08810946E9E6DC7FDF2429C0ABBF816D98380F9C21E +89B09F6DF0E55634A5D9D3832CDB4671A67DDA477F87C2D12E01882C4958711D +8C93EDB509E79E3B0884832236EBF71B1CBB32E309CF1F99DD0BD3EE92DD1E93 +BA43C1126C126DAD53AD421863CEC59548823CF508C9590F11A1C9C7A9F7EFB7 +4D2F4154EA1F85A3C967D7F0D9EA815B18449974C3C6534ED6CCF0DF1B8002E8 +BF296A65E6D2566990B091DB2F6B458208BEFDD736242F7E1F9A9E1B3333EAEB +9D9B42EC68EC61B8F04EFD71481C8771D5F79E8E0B91049FA201449195B9D032 +21CC3EBFDADBB9195F850EC164E2C94AB650C80DA43A11D969C91E5D2C239909 +EB94D77A077FC4384EFCE586302B6C509E99154D8E36CE22E60AAC296211D46E +15E20F8EC1F8813DBB3ACA52C89746693C6A49ABE5DF040383BEFD466C4DF102 +8034543FA5E46F11F081A0B0E9698E283440AFC1AE93F6F311E0D15FF8BBA9DB +EC4E1302BC04A7337DB384762BE9C70D52E795A58D33CDE4455CEEB406118F1C +3C9B97141F096FEC8E3CEDB81047B6FAA3E0BFC95D171ACB70DA688E108C3141 +9165B94E25D083C53CACBF001E16EF046B87B19B7459F5181B5A70583700BDFC +2B3E109173C5604104AE2D290461836B0210A52D1EFD7DE714503137B4724AF1 +2A745F62993A47C1D46D4CEC47095D65750D822750669963E62DDE363A16129D +F268BE71FA84E64C9D8EC78180B5EF2E6CFD96C52722EFEC6BBCDB14764672C6 +228DEDB8A2F96DB1A69A9AD2FBDB2B531485EB80B267F70C05125BF1AABFB7CF +4D35CFFAEE03972735EA9D2D49D43098274CAC9C8938210116025ED282524B4F +CE2EB4155CF7BBB5127853DA344070A439C51C532197E87F2FAAA68A8A345497 +18565D75CA93E9A31ABA74507BF0ECBA8576D53A3F36CA02D548A8E36647BF3E +F4A2D999D579117B67BA1B8A14D09C312B0DA67F5E28683619E6A28B39C59836 +A091BC6B4BD0CDC749725100BEED6652D75E3CF7527DB0B383F674093587963C +665E70D245826DD32EA04946605D12F4EB2718802177E659100A2196C3E24B51 +A74DFA76C8DFCC9D06B13F6DA2EC3E91B5A67910ECF0766844DF389E461D4B9F +AFCCE6B97776EFB3EE6A979E162863346B6A2DB3574D442CB339F78C1846D0C4 +304309A1D68B0EE29304B20F84BE8EBFB5E52B26820218ADE1EAD41F03D6C6E1 +21E407DC64895AA38BBD38221F00FC586D67142EE082ABD57AAE5F689AF38468 +8B9F81EFD34AE428A7A02AD8E6BC8505FB45291079E1AE7A0C2EBDACAEE3708E +3C32681C0382B638915CB17045C2F0E81DDF09EB23D0D682A4DF62935087F7DA +5D0936C3507E2D5459041D547B8D255D306D3BD5C9C86E06EE84B5DEA86E978D +D9F0EF653B677BFDB4466801D835B819E95CEDEFB492E525F2D978E9CB28B3BD +C181F7BBB3794F0605C34CD4893500950C68C5A382E3A513EAF0A7B1C44E6697 +6F59C1C1D7C6E3A21F923268E13C6429D1E5B8EC78719E289412095B7E1AD936 +6686C8552127572A7AA700D4AE749407406CBC353F8CC9AF9CACE4CB0ECA8DB9 +777382C58A7B16FE1E7BF54BA03614BF1B1041C5C68C45B7D277F24C77F472E7 +7484BFD070D9236AFE5C943060D3E22699B746E96289994E943EB53A575F74F3 +8F18A75B46AD3F9B077264B4E72A5C82EE6D5E85EC30E7AA77762BF70AB5CCB2 +328B2B453ED7332623F7FA1018D9129505305766E28A13CD621AB3AE39B5FD8E +499E3F859C9846518C50C6272BED0A4FCBC9B8E9DF7383BA206A71D6084D3706 +E0227F7737289EF02CB9A063F9EA7081583A46C7AE3DE7242C987ED6703FDC6B +9B274E3C0F18928CA3303B92002B7507BDDA3E482861C92EDEFEF82798A1B1EA +DD97B1E6263AFE58BA1D72DC9231C4E40AB90F19BF54E807EF08D71838A33FDC +1EDBE07F50D986A29E42609E770E8BAB3C99BCA591AA32FC0551082F4DFF7A46 +6C0B45EFDA26DA8F8E158B1CC554BC0DF11075C1B0DA6152C53B563C0EF832A9 +E41846A57D0DE1552EAFD8FE44E0AB25983620310A3BB2CD4B6E1CFBC8300557 +E3E93504C3263CAA0962A0F9FE4EBBB4CC7DB9404E3301112D1CCDD005E55A4A +40ABD5E9942B4072C8627D4F38E1C6DBBB3B0539B4800ACFDFD1EC7D38BFEAA3 +AB140913D95B0A5F4CB5029AEB0B80DC6E0C45221B298E7A8A7A2755D5463970 +E9943BE672F551ABEAA747DF7C01F81BB2A240CDF82BDDF076E583628EF280A3 +A5826EA2CB3801592D910C932FE389A802797F33ACF8B933CA97078CE60AC97B +78C85CA773AAF818DFABDB4FD60AF12218C12C4B89D3579B4DCF1B697D213878 +BCCFB9D0DDE10FEAF270D473A7121184AB0DAEE1BECEEE46552F5825B9E497A9 +B17E02A4B1D7A60E8296E219170853F34DD6FD5514009F01BAAD9BA60B5C31FC +9E9F1493F9D828EE4D32456EE0249F375601EA4E1CA329BAA095C5DCC3750E59 +A2C5DADF6D5AD6DEEA9526478F8B3C8A6B8209818E1C5E9AFD9CD8363DF71C55 +65AF5B84510A5A31B2611029A72868EE9D01A4E308908BDFCE0D47F5F59A5875 +4A34A9A04FE68AA99DA440E927F4482AAE615EC3D649782279FB8864CD4E0078 +975BF61927DB520E5C540614DD882127481CAA42E9E0F9E06D8225D1DAC8B72C +1120DEA694861980A749F631F0219291A2129AD24DD053A7D70F06E894D26AB6 +80F3CC17D7D10930BDFE1754DBC8B137F99FF7CDBF725A6980E603FBA5B1F246 +F983C8BCD2E5F7DCD880E592378BFBF360F2C5535C16084FE2BFEB789F4F2239 +E51E3B7D7D4878C982D414E23FD2ABC318BDDB9C2B8DCEF39155DB40113AEC78 +68B1ECAABC5A22FAC5D839CE1E94048B6DE6F1E407520E80F9A459A74249068D +F1E50811FD6B2C06A074E45E20E5BECC9C78CABCE1AF1DDEDAD62F779B479707 +3FF6C110DE23F9154789B43241C269F4857374CB0FD313DB8FD3F358564B3415 +5830EAAABB95B187A4643879246F7C3178E493C801EB969DA2B34E270E5D4AAF +33E023668A92E5980712193A746DA33999189772E9F9266621FEBFC113BDADD7 +535F35CADD91136D3526457294A57DDBCF90E4E7344F3F67E00B2E7E7728F1D0 +4A4333374B4420DB9BE21B0008A982A9BDCE7E8A2F964AB6097247DD8DCB48AE +154810F8DC3633D9648BDE5AF9F5E90BB94C231B6DA6A182BB18A4E9EFFDDF8C +8A35D50D172136A8276156D9BEBC833F6895C5DA560CA412DCF311285228AA65 +AF102A1CC345B5B06CEB6EA5CA84932C89D76070F21A3D702C2B10231DDAED36 +1E6956F2D434067919EDA0C522F394D92D7AB18FB497164B0EA6F86912571B1F +C4B517F6535C0E67D552DDC65B3B3A2D11EACC8B5CE1BD3E87367929BF4897D4 +B84699731A6B3F86AFDBABB80BF2E62BA4E5B3DC4BC10D42A759A29135E26A7D +227809FEBF6AB48ADD106600FD9D7619EAA99F980665B74F33E0B73EBADBB379 +6610DD542AC6774BFAD42D0701FA1FE3D2526A63A23A657D2F48C2FA327385C2 +33984DF1095623271530155D25873791184E971F612CAA247E1E4D0F71EEAA82 +8E5601C70060A1789536D912DC1538B14CDA30A55CC9FEE9FEBF645824A37CA1 +A90E3B0DB87EB63A0D819B406807EE24653C218061FC6DAA12D74B121692F411 +33FED8C09966E4DC8759B3C0DCEDD402907D65370B274D29D60458D13DCCC21E +4B9FAF103267B8EC438FE7510FD3D1D1318C89BE7C2C5D549FA58902A5AF468F +539A10DC92E4B4942C757E3340713EC3DDD0DC456AA78A8C395DB7BCE107A386 +A0E4FE02136806AD1BCFF2EECD965CEB7CDB0E11BDDFD1402B8A5AE155E4E6B5 +4324D6EA65D3911E42568D2F8ACE0B4D12FA4862B6D4BAB15E433D36E04AE4E1 +5B9B76A20105EBCE0963CE2588912BE12D9F5762516588FB0B4549BE4CD45E90 +19BBB3FFD45F59A5701143DF58A8C89C9D1E6EF5729AE66BA3E83FC000434CA2 +4DF0517717C07D7D570A5E230237A2E53623484FF465ACF79D3F6860CD07F5FF +4A432DEBDEA9C5A621C0C69D6699D4464A30B9EA35C856F4B8914C08243CAAC8 +704939D1F838593E7979361CFF14F9D27CEBC56DB5289DA6034AA36A45C4622B +32939B064407071A63CEABB44FF97E7A513E34633831FEB057D5350E0ED9AA2B +6F46113A0A5CF7400E7B20B5B2344E2E6057B4A56428A4466BA9BA2845E5E165 +75CEB41E2D93E4E93FC183B980BF23A4CEFBD379CC8F9A1EA6461F2DD43299EA +3739A056169E7D53B3CC623B82EB1740F8A9002BCF312C6B142B1AFB2A34C188 +CE4767EF06ED56E91C20EAD1A9144D573B73EAA8B3334199C10A16E7A8C8DDA5 +48079A1AE853735E6BEB9CEE8F94EC7D2F89733ED3196B516103AF28934A55F4 +7D4C1692F423A5A4CADE2ACC8074FEC7F6AFB87147B4ACF45E002AECCCB15714 +39E5AF3F9C52B81CC0C4739B10B9E138F52D8E7D72088A84452C6110B0889D5B +37D64DE992D41574897B1DE7B5A7328397AA90B29A912993183D706C291F1D11 +5984844021655F433BB06D09479CD28DF71D186F2BC77688A0C2188FC8539B0A +4ED602D896F504D48136F192EC125F26D0D2B859EA843BC508F8F017510DA017 +31AA63614F0FC2EC91410B5609CC1D1BDF7925040A3222B08C2C2375DD644CD5 +CBBED0DEE20F78E13DB387FF8110827975A04E58654FB9B179FF36CD63132B59 +0D928A09BA4C0DD215C4961B4BF565C207EEA5F43C51988F188862A09C6EAA4F +56B73623EC1C6F279D405F6A4B5F0BC9EDA774DD15454858563868A0D16DEB16 +C8B72ED9F06F64348F130B0AC9B75E69BE56C017DDA4560DC8E69A51324602EF +D6091069F7B27F0FD384BD9D5861B5694159623805A4D537411A9B66DAB1D955 +4E45DBE9817A4255EB492EE4BC783B37084A7DC9B4B68A1DFC1B46705FC9763E +94679EDCCB0A4DE850C4480948133C2DD1CD525F498B01F5046FAF642EB6C5A4 +6861840CF18A04F1C84FD2A66D97A61AF17C2E66E7350BD46F94BE9B41DD776C +6EAFCC1759479016C3A27F0E12C5DC2E8A40E45571D5BB130E68EA57B97070E9 +33A07A9AD9130D3FA73207D372381836FC968813A578138A07F2F3826A2E41EA +03F607A5F8E637576965A41970039DCFEDA28E7D327F0F4C117F8AC445FA52E7 +CBD97BDB0EDF0D88B9DBB90D76E037C2489AE870AE0D83C143627D17C09A1A1D +CB0803B3A6CE9118E9AFA8FE44720B40ED6658D521F2C91735188EB59D12B833 +AFFAD67B5890E609F2CC73ECB235D27A14613AD6F9CAB6E7CDDF9A697A0BCDFD +3140825F77A4827D91D28192CE11D69D02705CF641C64F39BD531C74F49711CA +533AD45C5447EB029FA55E8A1E1DC69661D8C225B90255441E91557DFC761140 +22EA9B3681DB1A1460B3270D4FC7CEE62664234DF963BEEE1CE7776CF28E35B3 +2AA2DD131635AA1D3F394C8E39942DBB0DB456A7BBD5A21F6A7915830576D066 +600E72555CCC7E9F3C9D65F274A7A78317FFD2A359EF28E279B94439CB5FAFAC +5182486D5C820304993B2F59394E573CD409CF5657AE0AC097F2FBB4C6C6E1BE +A8CFC67244702D1C4832BCBC3924896389F9834D8960E0290B681C653A39EDE3 +F9E6D6626CC108BD5B26BFB4CA0117E1B29B138CFF8F5D77D5E5B49570A921A5 +8649D00FFC8E0D6ED7642E3352D1A6B3199C444976F34F301F2950F503BF335C +5EF25B82EFD2C40ECA5074264B9C6EDAF019A450B3C215E4AD72FEA7E1E4C59A +E3ACB379F4714216C4093711E17C5BB71F5D5B395AB8D02D1E5308D6BA838CCF +EF37988BB0E6C2F010C63B73D731119800BF923A9E0A9ECC93AE903B04DC7006 +95B18FB928D00DA2809AAEC38D83841083019E6DE38084773754AD52DCF168F5 +8FFD5DBBBA626D61716ECB0BA75240C14D16301D8C171A21E44D72F10BFA8A6D +6347CF46F17E8EBD4EB2304FCD5D2B3D97720F2409BDE416A21640655FC313BE +399C834B1E5C0691005BEB9C217C4725FFA537CC1DD8B3213202582D9E135F73 +E7B4CD4342DCC837DDB367C72849B0245588D1849D7B2402F69C01BEE77445AE +F8401907E6C77FF4DE2526545B3FB7946F693C04C544723FDAA03A532E4F180F +2DC2CE1694AFB703FE30B216086FCC4DC76B04DE1AB9AF8A8A1A068FE1DE76DC +4331566865F6B13C21507936C590C305192A9E3004190FD117C7BC922AF29E9C +D686E46B969C4F9A1A993ED2ED52A862737C6D46673CE064E1B7AE0CBC9BE116 +046CB1041E32E320D8AC967B12C6160AE8F3D8DE94C4CD19AE46A2879070923F +CB31881E14AEB002465B721587F600C5704ADCB4B3957E1B8ADD7A58CE1A9225 +B0FEC571F009611A48CB34B8E9173488B9F4C64CC52F438F544FCB12BCD994BE +CD1B7910BBFF76A0D063D8174376C3B9CE8AA11489D41D4AD5BE489852BD4F53 +9D1FDFA6A62951FDCA68ADDD1EA7DFA3012B2C859D98E20A4C116510D8EA67C1 +3D3A378FD21E99E132332A6388C0CB71380AA3272B437BE0F3341FB9B559CA00 +93B5F3896887F0DB0C5CDBCBE8D4A66562B841EEEF30F99ACD5BC89EC84A4925 +DCE688FDB27FE493ACE1A5E4B11C9102BA94F8725DD829A9D6679DCE2D08D70C +7AAAAF05EAD756142DE83A927103ECF8FC8F60F48A144DB116B3F8A6996E959B +A82DF5C6260FAAF934E052C95BB77377757E0CA686753E8E52123A64266661E8 +F5B9553B91933186C853BD5C428320396555DA1A22700A87676FA321798F8AD0 +59A2232670FA28E18B15C0C2D67A03489A730551FEA2007139330DA11EB80919 +CB8B1DFDFEFFC98335F6363A668D350F53A053B1E7AFF7832C08EA445DF32F79 +2EA754EB444BB61992CE75E20F2DC0BDDF917B50EC9CCFE6D83A9D150DD61997 +DE0954114663B21AC5B4FFFD52A8ED8577F72A527CF162F64ED65962C58B67FA +7E492D98AF68FA08A397736FD4D243C90BB7949ACD00099C3598330013E46BB6 +4AEF51F0FC8063050D27DB0577A5C28C480B80E20068E20AC6E67D013F479AB4 +D9DF8B27D9C16BEB06D96AE5C3934DF2C9E1B29CE389D3C92C5570559EFDBD7E +BD7F97F7B956F1471D96C9C6AA23E5761CF7BF3F0810DD432939EC465E50CADE +E581FB32ED1FF03A77D6EA7A35359AEC1D986BE6750BD647DD8CEE4FCFF3DF69 +3959B8D13ABE6949C4DD4685FED5A787A55E33444E9424D98BC288116499ED6E +76E10B1C56AED7FC99F0F1E053E7BA2066091C9F04F787785F95A620B155FE71 +706A20326226AB916E4816514FE598D46FFBF77A9113C7ABFF365A12446FF0B9 +0744C3C5C1B278968D2071C0322DDA802BFEA3D83B0ACE5E4CCD580233350196 +45D9C4601E86E3F77E0B06E2A313927795E8858FD27F0CC7147985D1A6EAA623 +CA96A0345C745A0F47581A977A220C598F4CF4CD539DDDBA83267F5D9E4F3AD2 +BC287248F885489206B590D9A34E948E6791F0F9948DDDA6AA1312D8559AC611 +33E35C7420B3394EBB1EA5E9D411FCF690A5B1357D06D41EE5062852CD122347 +FAD22F141F84284AC0B95F7A000AA1299A1EA2EC7D6F6EF8335B4989F8CC6B48 +0232CC4C044D7A7298C88A3720C693E2115A26711EF0FE171DDB45747BE2C9C0 +40562C2E7C6AFCA159AE341573055C3618D2532C4C69E72D9CB0A4D6267BF7D7 +AA4C30CEF7A19CD667865B963C6CB6C21DD4F887FB1B02C3E12B4483F07D98AA +C1C512014503F3B3A4BC6462B1BB6FEC75F95C3A3712E1530451C43C47EDB056 +FCC15D72C688C0E4A7B4FAED9C603A9C8F615EE2F862907331A30628A9E4BBF6 +05DAB43F30899103173521F6E36BCE6F4DFA484CC759F66C8CE335E056801B93 +AEE1FD94D95FE5DDCB783A6E9DC1A82A18BA67D8EB45F51C4251DEA708D79474 +8C7F97570B87AC6BD21590F305A531F6D32FB31B013ED8C7798A51291FD2A2C0 +0CB565F6BA2340F4599CF16480040D27941F25991F142901034AD95CF1EBFE7C +A57A2C97086B488481C04E9BE785DB89A299CAEAF736465FBFEC80A8197F09D3 +82EDDBF1CDD7E07A772455B51F37ABC5FF3F0220390419B797FB46A209FA528F +1DC77F67A25A3E2E032C263757BB040E174DE9AF9DA3829D31EE9DE79552C823 +418DC7853175138015FA33D5F39264ED66A4109F0F732104650CE5C56E0F23FA +C5F79C62759E8DA0DFB08C3D750433F1D6A14A095D2D8ACA849D7A6147EAC453 +318D58121426653A89F67D6C78DC5FD6964F85AA80757B90EF6A57E9F21A009E +C570D14808B3B2CED8CF671A34EDCA0518393DF0F2E6E1D4ACEEE71E5A5372E9 +26815A9068CE55EC3952AA1C75DBE28457A883B8846358F9820AE57A7393CC81 +DEEADB643938F84313DB8FD3F371417AB63ADEEA5E6B5F589744E408151F7A4C +3CA7131D6DDC40EC5AC9E386CD515DFAD56FB5D18D5E3A145976FC2449BBD14C +45E5CB314F707672F95115919EF34B41CB0F5EC7E68572E7188F5A936B13F967 +81CEB3BEB43602AD8BD4E464C0D5B09323F35A55327E83DBD06D75BD158B06D5 +7CF3F5DAA8556C812540377B20272FAF9B2B8959A12A0FEC9A445DC927627E74 +47456A4F02103A0586245FC6B44CF66C320913DE0F6F50384B3E0585BC7F299E +2B640C274802E3859821955666C75B6C06825E84C3DAFF2A5A535EFA52C1B252 +27077164C89F1541A1F060FE9D1A61F6B7443EB28DB9CA21C75D0DE9D9BD363A +DB927BEA8849C5765AA796AE54C512A3D51BF4A8E3C967F63EB1DCE13B0BA3EA +0F4CFB2630E103575B0EFB1FF207F96A23ED5F31134780FABEF0D630CC6AF64E +90A35089DA2354FFDAB7F4ADAC1426303AF547FA916342527380D5E0F7A5047F +541DC158B9CBD3853848D1066A80ACFF7BCA9CC5F2007F1DBBE53E825B85F8B8 +BDCA072350DAA9A1C825414E5FAB5BF2E5A5344481902958B59CC87C6A4547F4 +F399E74A9112431B2A066DA65D1F4B814E230E0E161DE600F61C554F696BBF18 +1A2FA6A3535D4983CB045A268B0F54D00774954590A4CE34FFB00B579485C402 +7C54A6717B111F55E30F58A2C928120900C189DC0A1CC44C1CDFA9E83693A8A2 +CBCAF1D2DD3BB067BAF86C8AC9AF020866991D1294D678088FDA6E14C70939AB +0F13A91CEB035EF5EFC9E837838497F2DE257BA0AEFB4617B3CB925D06250AD5 +AABF841DC47FFEB39EF6CF7AD55263AA3DBC3B9D50EEA595E203B78C5D30B83D +CCF8E79B86CBC3CBEBF1187065D31E10FFAF2798980099ABDF42D05948B22164 +286D1C77C56774DE2E5A03DC27C3FF53ACCB292A862B05B6AE210256B36A4410 +B9D1600D177098F06BD5DD7E5105DD1000FFCD84BEE0A9E5EE98424D6328C405 +EF84CDB2B4DF01F6105E40332D5E067208D78C9EB222FF0D49773D853F3995ED +DAB7BD856B8D7BE920FDFD64994613CE3153A0F82E9761888381D2BF49D14DC5 +BE70BB3017AAB6191DA90B440BE052CB3738110A94D7D9517FA7975A7D6E9574 +92495B202B3D7FB7F213ED050FE5E1CF7810A2FC62749C37D9E6A5B7C18C293B +29EC2169F31B6E2D7E20E3E10C6D941C2A8EACF5FD126EE9E9F8A0BE33B737C3 +18A4877BE24A66A364D37FA41B0BDFDCB041DA654F55A569C5DCAE8A1403E3BD +FAD659C4DC5EC98D6E36538A3680A7F8DF7D047B570031E7F9943714451AD5C6 +CAD5F766B2165AEF3ECB73BB8A60E53167E5F2E6636EF8B72B3E300DB4DD6CE3 +F0ED19F78FAB386989701CA816501BE8AF9C73DDE4C684FB380C05AAE1FA4957 +FCBFA59F4CC31C6CB6D4FD4214EFA50D25D005EC3211780EFB7CA85852179FCA +4EE10E811D2BBD3D6CAEE6577B25D04021D300DC4C347FBD839E1E9568958A2A +1E8509C66BF1A3A9CB82CED86FD20343936E341C1B59FBD0E2B9E95113E84B3E +7D42E0086A8069966E65DCB5E63B7DE1B8B97F1EADC31AD1541A466C74C2D588 +DA8978790722A0D712FDE78263835978A3A9373E13575DDB5DF4FD9E585C5F2C +7D0E7C2BDA36A6D949127B1169A4BDDFA48DA3B73A976218785CFCD8E3454B21 +F0E118D30463ED3184B218E697F4D78D36DBC927B1ADC31A9F6DE2862E16C779 +065D2470D23659D3DE2E7927C9D557DEA0DF036294563138A5A4C766A8900ABE +AA45892C3C0D6B6E55DD8CDA1F3CA86F60BCCD92E5E04ECAC7818BFB227C5A2F +4F55ABB82643DE9077B945DA2F3DDF3A87B581A623DBF213B904F829B1F83E25 +60CD32A8821B09445FF1D0569643B9BDC07141B607FBBB29A3552092E1F22BE8 +A9D852BD274A13DDE60C299FE21F354459D3334FAD429DA6EED4A948F8C10EDB +EE657858C0957C9229906FFDD270EAEA8E7A17010BB3868A1937BB08DADC4C1C +B19335DCA1CABBBD955D7C65BA978BA755045E5FE1537853650B191AB856360C +33DD87871939D2F36D49E95D19EE9B99EF15A017E7CEBF28741BB7CF66A57CFD +1AE132601DB33BB1935175F1C230270B2EA7C74F2EA94B762B40863EA03D3ACC +2F7BE81B66F94D4014D4765682ECF16B2982F3A6FDAC73577CD118EE21C95C28 +81BC2CDA0E59AB941EA9E95493AC01C62292BDE4B446AA19B4FE2F7FCF083FCA +4E6F7EA8624C034C343C610F6170FF97D3261970AA4E3CF4D27269DE79D84F08 +1E9A76252ED1C08B938BF7AF0748CD480C343DF351816B73CDF917CD7A09A86A +07B79985BDDF6475979EA36B4CF462D28988C7522DC7393D79E9706646C35CC9 +2759C1D2419991223E3198A3DADEA2A860EB5BA1EB6ECE1E1C7CEDE9D5D53F43 +3C3AA3AC8D8B342C1CEC6AC20621D66851EE10E3EA4660782400BC82839260D3 +EE4D5A45FA4FD477679ED3D039C916BEF2DFAD2A3E996374B1F6FFE299F63738 +69B82DD5395D8BCAD6C67D808B275075AF38BBC127A2E1608D4571F4FDB62CCF +F5D766D2D3B4E5C49E703E4C32FDFF5F9C602EB47FDD9F5DF5165CEF1AB8EBA0 +3CA149909A692C828D506C9674A036B1C9C962F856276B5B0296FE2195D68C29 +2AE3B2015599F0121B4986C36CA624D5EAD0531D4F136A17C054D4B0640DBFD2 +C913F9F066AC4940FF3C7D6D74C6B880986E42535618F558791F7577DEBF3E73 +09015F4139C40A428C47876F2A8648389ABA2EF638A621DDA85BA30DE99EC759 +722F41A8C569B116EB2DDBBB63A312418B4C5D9CABAB07A17C31BC8581C19053 +E563981EBB870F892218C5E9A93C205FF48D09CEB613D7323FB502F7C4855E96 +425AA5F10C0561F9443F1704E17D7D5927B4C3415D309DF5C2CF7F92025AFFD3 +A2A15552623D6797A8CF551A1F055EFC77CDFC618B3FF7B94B8DA3D855FF0C0A +43D017F1BDE8B5CDC530A196DF2DC759A3ED95AE44D1D2180EEF8F5A438F1986 +FF641B560C96A4663FDAF999D203D6B34D061F1169ED41AE812F7057B077780A +F2799D26094329AE8CAD0FE61B5A76A83A9BF74B0455E23B604692B82CB390B5 +41F4C9EDEF16091E6E9C177B7A5A7C08F3776B20C537FAAC7B9CE4A587170DC1 +7FD8EB494F4EC3257617A877AAE91976CC8596D661E609764FA64574D2D8DD9D +4C41A361E62AEEB1084DEF60BB6E7C2D22F821F9C797B8A74B626D68AB62B3C3 +CA139EEFC14221184FF1DE118AB8EDD95DB5DE62CD9B51840F60FAD19F167271 +A71740C4E61CA8B3D0582B63EF858B1B27FE2C5AC5836D7EA0A3B31382BB4683 +57C3C25A96CD5A10EBEBDAE276BB34900A5863CE6F4D64D50609B82FF4F02FAA +8CB2E8C3D2059FA0E352F0046F202A5EBC94CA18C569D20AA42BEDAE7BFE4BCC +80AAD6751AA3C570FE9B6C990DE994E770BF600FA7E88E37D4577C74DE09ECE6 +4654722B4429DC62340F3E8FCE6E6E074F013DCC43FE5C51CAE1957CB420ADA0 +AB58B9819B587EB18022DCCDACB469417DA285BE2CA97372E2EA60873D758F11 +8A353CECE1F1F900C55D79C58B353D3997A02B1CBC5339A3069595CB98CF55F6 +EAADBE17AE93F4863F32398863861F1865FE99737B9855F556DDEB479B9350DE +424B87904C3786F95320955C6055C90EE90AB678BF55B000003B668B990F38AD +70B3C4DDA1B89DB93A2FF4D1B3E0977C4C730F2A37981B0B647208E67C1753B8 +31D97A76FDE618CD7112C7039F077697D95094359037551C85FC5C150E0DBE63 +26A8CA688FBDCA0B5F06B64DC5B9CF62223B466251F09A2E19005180266819F3 +785A963E2EF7F598A2D6C2D7DA7749AC7AAF046F2D7948C5C55AF7316D0EE823 +F64FD165A6F72829FD0485529FC7B7C076C75A1C6360AB5B878E7656936D41F6 +8AF9A01E5695F674EFC4F7B06699EE8884C6E0FEE39544F1EF61C2EB6FEEA0D9 +BCF9FC3670A3D6A2CE61BA04637C81F97A0735A002C17D26F8A58650DC407D1B +4EFD4FA0F3AB2912C897C8D40876AF65F5AD3A625338CEDC4580CAE5E3471004 +C89565D9F53D67A41C175E301BD7D02C52C7C839EBEA60C396C5B0D73BE6A8AF +ACEAC7EEE25395D1B0CFD0C4406C15E446D66E171C7C5893CF2FA1BACA35440B +4494B8883AA6D9E4B7582ACDDC7ED6ECFCC6DBE83C1E4AC7B993763BD7B56AB3 +BB7DDB1966485732EA112CBA3237E5D7139190C59D25F37487FB66F95F57FE76 +384A38E97FEC1639C38B9697A4A7D3DF81CB9DBA1B8C2829EC74592DFE5378DB +FBC363E765E6719E83DFE522BB169BFCB63A315C737B99E8EEF8932AC764AA8B +CD024CB45BD0A39E96F40CCFE356FA905B9E450B74F2BB9D55DD92FE25210E94 +E3462D29C37AB32268F21B724A2404E504E95DAD1CB71605F38ACB8DAAB7822F +060309A73ABEF70CEDEAC12113F5571DE14F73804DCE23D71BC38B9A9FED9D9D +2D8EC6ED9C775BBDDC171E5C63CE9F39ACEFBD07A19C57FCBC5286C38C0171E5 +7341916F9404D576CA5E71B9993C0F301BE0D59FE2BC3765C6D21E4534A75E45 +18A86F2FF0A73D6576DBC5E0DCC287F109B1E96B2D954812FE5C7A5BCF2AFBB7 +5A608D6DAD6E9306BF6E80A062AFB67560A762F57C78B4330F5820F2F97ECD57 +F9FA88327D181429325F05FE5E81A7EB84195CB769C481FCE3111860A6DDDEEF +BA1E693E2E395900BD2A16D68A92085DF0508D4796934DA1BEB63D59F41B5AE3 +3A93220047C96B6420D1061DBE4F7DD168ADF7ADB7CD31391F62FE3C907FAB5B +FDF8D311E10DB23A6DAD5CDADDC50A4EBBD4C9DCA58CB8D2C6C6C9405DD7FA8C +16E21852FCF7807B56E5FB347B0BFAA4991FEAE0EC220B503EC0F220230AA521 +6B1039ACAC72EB3283AC6BC8539B884AEED40AFDD8DDBF17CB4CD825C68A9EB4 +137D77E6A5C4476A66A961FA52E102C3F49BD4B80ECF0BF7F853BF102C2D00EC +D545F12F0D8D5E04BC7C2BDDEA49199E7B6FB5817C576D58452D2E75162D011A +ACD7D0CCDEF71502FE88496C5E19CC81ADF1AA24A405206E61DDAAF130889DC3 +C15E4AD6F289F5024760A1A89CF9695BCCBF5DB7CC5B8EA83FC32B087DAA825D +D083612745861026D9C1D88D1C46BA5526A71F9AB4786C8110D8044D06D26B69 +CE1AEADB3A7342AFEE02C685C52E53E40662437ECC83685C70E15FEA06577A99 +565E0B85FFB0296F1C501FCB552194CDACD39130414418A68511CB9E4654A66D +4744F96A5D356CDE099EF984B6FFAA5A9CD967E37EB4D5D8433380567108200A +42B7084D9FDC5037B468AA275AFA62F116941558BD0F99E94A604AB19CE04E20 +1D782A1ED9246ECBFFE735D218AD7256D7CF6BDF707F7D65B9CC6BDF3857DC05 +D335E2D21DDD094A0AFB81F682609A44FCBDB3D6A2D696AE56EFE853338F8975 +998CE3577AC255E0F712F80ECE2C85B2C153CC3AB668A3915CE4724B2E3653B2 +2F38BDE00115A217FAF38675E9F16D91CF0AC34D687813746D269164CD505C9D +8B88D2119A8DACF3B9BBCDB6804248AB09BD0CCA2A9B0A617E3A27A65A2A6EE0 +1B5A0A6F29133FB63F527E00126DDB0B9A5C1CF4FA1C8D6E1C0323FB488A12F5 +A962654F0EB4A54F130B9A483BE9857F90764AE8B9AA0101BED1627EF1B95BAE +948A911DC5FD11009AC18D14217B504DE30D6433CE1F1358270AA5685A55D23E +D7DB15D2C32A9FEF30A89AD2A43966DAA115C75047474DD08C775DAB0328A2DD +CF16A236989F55B7A58D912F730B259E1872BE0C92C87EF7B4C9AD44789ADFF7 +38BECDACF9D5B8FDB828986367E268703B40A8B48ACEC6BB3359E61BBFE5B0F7 +23A6A24E1E3F63073E3665EDB2D32E9E047F6D1E47AAFDBD0033822928BD9C6E +0E545C3FE6421C74A24C484E7D51A71E8ACBD199D19CFB0804781EF93C074239 +EF2F6FA27F62F365EA2A12DCA5D088D258A6A726A7754EFDB1237A79A7138E85 +662B655E329E57666EF8A264F2DE28BE64AB7BDEBEA9C4A78B1250794B611375 +8033481E0B0BF46B098071269D74CA4CA7C0C13ED52B8B91D052574B7B3B83A6 +CC340258F8D30FEF7ADE448FEBA2810D6DB302D5119C7D1C5F42145A731921F5 +FCE9F9BAFA5CACB875F8650BDE37862E43066BC15FF5B106912A34DE22309B39 +693D45B868FC6F0D68B7E5C03E7FC334EAA3E911B85B49A9D3CAFAA9F401092E +18B29D792A18E94731DCBA1E208F1F4453C9B50884FC4FB147CF6824E13EAFD4 +80D2FD01EC9CE8C92A26189DD9582AAC06BB232EB59FF1FCDC52FD362B8897A3 +2D1417DB4E5746AFC353388AC3DCB8A39CB153E0E74C58211B8B7D871013E111 +8160FAB21A2FA2B768CE2CCB3F6D3458D555B3CFC5C70D8136F04AB0BDD84ED0 +86E21CF9CB9DD034E8AF0287E45DAF8773008F10AD5D0DD44F61E2E7C76E180C +4F8ECA6E1E0BD8335CD51AD318A7692AE3FE01D06884E13490575778D12D5B26 +519A85DEA89F3F59C36555BAC37A48E2FE44EA51E6BD750B1A01EF8E95742C94 +75C19AD531062F4AEAF23C6DC7421EFA7E7D8D6D7CDEEB9A3FBB385C53DC0BA6 +FD755E7F263CFF5F69D6B1AE706E31507BEBECB25E8CDC09956A2DC75EAADA2E +101336BA6815FFAC9EFBF32C57DE857E5BF524B1D82BCF7A485A8ECF04404B68 +04335E4A858D88D24E10264F5944A0695C5A07B3176FF22DAD9FF5B46DEB2DA7 +47B0A066C5816A277E85C1668BC0531719B190E40AAE955F758650901B6844FB +E1199CE9CDA9B63A5DFE7F076007EA9B735189D09420BAFDFC7195D8106EA86C +9B5F137F93F209F8355B96EF42FE38C74E791C99C1C9BCB283130D3134FE3468 +186ECD90E25DF9C4291EDE8D139298677E90175C1EC0DD4E46E497FC11DCC162 +5550553E6EC4D4647351530DADE101D6C6D4472C9BD8051E56601C34A6101E44 +820FFA209E6A9A6E9BA46B59CBD16C4FA650909359D48B54C30ACEB48E00138D +7CE7D83D957EDE6676614F8032E51973D692AE87027848BF2C4D4C3973A36091 +B68528CEDE4C0AB90C3170883C09659974723E8600AA0B93A2CEA4B5C74154B0 +1BE885C178E452B37F709DE61DFD09C473432087CF7E589CD7C544DACFB79D36 +AA7D8CF8A04096B5E41024C1B4910ECF14F5D132D5C9D3689FFA4FD58B1200AC +CCD41B8D76D9E4B80E0535458213890141A72FB1464B08617E3C668D0D1F1889 +DBFB2B7C07EDDF6C46D2CCB40CB1985D93F71420B3232925DEF1C219545B4024 +DDAAE581934F1A8CE228DF623A69D9CADD701BEA4DC16074475983D8DBB9FDD0 +E70A8542B3ED533B84E58AA0597396C584D3968E4DD65381D7A92CDFFFF378FC +F323C23ABAB68C4B514BC82931BA25C067356DF11994A9B6C8FEA1E7979EA892 +3FDDC99BBFEA09012097C49C257F1BD7B54B553698F9DF78C95D2624143792FF +1C2FDA58A0BE517D9002685087A375D2A8C58BDA973F22E0D484A3AB988D02CB +6E3525B9FB4DEDBBDAF2A1D93D4A0896C0806A8B693F24B688E5CDF0E2192586 +63D28C51A94E0A663E301A5FADFB39F8585D31D74CFA20F019AA7AD9DD0B322C +F97BC8380734140497F53A2B1EB430D810EE9E8FF15B8532C33BEB2924A2169E +FA282933C1562470BDF20114639049D28A9638661459BF75D6AE4B8B31327218 +3BFDF4187FF8F505AE635E1055676DCC784EB6BD7FFAC6D719270A1453F1F9C2 +3E347652AA2481513FED8C4894D3F53C7FD9D34B90099413F89D5C0CAD442D62 +F1CCAA21A28F364CEDF35957170B2E90F1FF8FD9CAD046DFA75E36CA36121145 +4ED800A81D865AF65195A5550F7798A9415218FCBC393904F932396292C6DEA5 +10957AE6ED2E6427CDFE962536DB7AC414C399799796F98C83C0007883AEA3B7 +08F67444842A99E0CD4A80429B4A8F832A07C085E9626E00DD327EC559A210B4 +CDADA11D28B6E95F7E119BC7CED1CCE4D8E9E1B2077DCE58876858BACC26C651 +9DE3C4D3F72DB66BCDDABC34E4A1981D79A502095863F441C1235722B25B2436 +91591E6F31041071EE87CD730BFC1C63C9C14D8D087E4AB1D8383B37BB2FA102 +F4EDD67F49D47BD89D4FCB481EF30CA6B8456020818885E7F88EE493C8380789 +011018C824EB9AA16BF47B53C0E98C1FBC321ED36BF17D4139F3E45DE798BE80 +5EC1130CE6F5705A3C45921CECD9578B8AAE1D420B16D48495D1A67E704A3E85 +F7F2590251A522259753C60C14845F699F062B626A1EDE4DBCE3CF08F1886688 +045C21BF0DBF5679683E184D6E7874CD634D930ABB02BA3317F55A0B81741ADA +315179F099CFBBFD351FA2976120F4DF07BDCD4EDB7FCCA27C4221C2557AE3AB +F378E1F7DF12B3BC213D5B9E31A8C2C9398F15E8D5297436161FC553B44DDB8B +ED03FA7772D605A843E64FF72818D0D51E3381DF8F13CB07AD0CE3755660C149 +3B8C5FBCCABC9D8C98C1D0BCDE05815426F390327E2C994C7C611EDBBC2BCE9E +5028419E6F78F301795A93122BE7F57A8B069EFD4FA61EF35C737267504EE1C1 +32CA2A025A99D9BA7328C2065C752AF365E942FA8F6BF88DD7EB7203B6A79B20 +E69C1AE38B3D1327FA639EEE719CD9C255A8E683A575904361ACA30BDB2FD061 +D70AA670A999AAAD749454CDC4AC3B2202C5EE338A4CDA93C9B05E6B58EB3FEA +47C65265E2D32210218239E3ACED483FEB1BAEBA73B544E03ED18567E7290F69 +0398071D16489E876A1136CB66E1DA46E7189367B18EF83D06E693127203DD1F +83B4A621F18ECCFC5292C529568D54F7B20C831037130750001E078B2881C017 +A308D79302E65E5F9E0DC18AEF3183AA8BEAED89A0798DE70DBE5EA3EC4C4F73 +EAD7E8FBFB19ED627192FDF050308B3E5F9B704591268C43F99B971DEB414068 +4AA4EF5113AC74D1C80C17A4AD810E258630B0DC109B02A80626059F893D08EE +7E112CBF87FCE766533BB99EE97CF2A7599C513EE55D4774001D76C6A24CBB41 +0E217FEAA6B6A4DCADF3520F0903F2B11648E5D7180A75F0391ABC4D75585E3C +668DDE41109B78FE828746631574AA36526A4079745BB36E0FAF1DD8C0873E91 +94E35BC415C4AE10AA8262AC3118CE310075014F478C9C59B2A77880F18FED70 +D021CF974CA7481B4F66AF8CF601F4DD56C1190F6D39349174DFE2EE684C780E +A6FE2DE96F67B27CF1C9942645E2D1621F2E55E6C197A3891C847290EA09F59C +B0C8D6688D1F3EDAA114485BDEEA0C419ADD8117670B274D12FA8D2DB25E2372 +B1F9E51313F80CBDA54AE2E1869F3972CC8188A94638F655C4CCEA5235A8F915 +AB2FD526AC22DB8C7FCE28B7D4D167BDA14FC19892E41AF539F131AC9FFFC4B2 +B0C6A689E6AFEA5EEE0A0CE86A2666D725CEEE2A278AA17E0E79CE79DE495E19 +61A2189F012D8E846C8D45D769D11D0997543781E6EA97BCF0DCEE589BFEBB51 +8A88A48FA27219DC97A08DCBE8BD239406EF626227AA7522CF6FDD2D38C0DD7B +D0A314D6B35CF17DCA54F04E786EC09C8D854CB8FCED2B1137856D697533A042 +16C3B3092ED3FA69E1E1429C87D7989E29EEC7F739A068CA8CC67B970C398C84 +2E76850FB2174CD17B06BDB9A4AA9BD656B367A443B538E03753A5C8EF1B6345 +8C17EE6E339E5C32D51644D5E840E27755D8540C57E4E876737DF31CCC03E8EA +2C4096647309F63DC679501C2E8CE4F6DC6DDDC9B211408B92A306C9ACAF7E2A +6DCDD2DBE4189FA285FE5B418765FA4E9A80005DEC72D3E0E2223430A467EC2C +AE486037BFE650C82AE865F42D913C630B921CD4E15652B9A3CD3D4EC407437D +1343DD19B80A96FFC3B15AF7E5DF2CEE19572E214E94A51A84B2404EAE132B58 +1199E65B1D8E5FFEAD1BB0C18EE1D6C62CA028A238F221BC0A55EE74B8731C36 +5A4A7BC82D523A26FFEF92557BEDDC0124EA1D4B76352FC8771D981D1C841019 +D1D6FE1D3161D60B59388A7EBBBD5827783141DAABA33231947EC9A98D106279 +B6A9D41CD7F2B9527E2791D4D6BCF70D5C32AC6FAD42D66D91B2BA2AF633B201 +88E46208334D018FF77F42467F919FC7B6355AC3511185399BA00B8D45BE2B35 +00CF8E20CE6F672B29BF2ACDC6DEA51C8C1B2EA1B83D3878FC0138139708049C +B5B62AC091103B6C2D4C1439AE3CF37B5E3CC4A28D6BD771655689E8C015447F +92B7A253708285F4C03A75641F84001FAFD36C8DF4150929EC7995B653B53305 +B2E3EFFE7C3BECA0B23CE0864AF88988A853716E7E7AF69D1A431FDA887790FD +6E1A9C6C35DBDBC5E39F009740ADD2348CA838B3017FD6A83E4341397CA7BC06 +2C6468F9F7E08309CFF4F72468BD5C7EC622F71C7DB512960993B80D150CEDE9 +0A051E7C28218604978AB4A64DC0FD1F4ABE7637CEFB7E4D549FCF16BD5BA9B3 +488B824758A5CAC3D392B30A4E74BC74E1C6A4D7DC85E08B1EFDF083A5E8E427 +E87A542CFEEA77F69BE0509119FF75F2EC64990265290AB3DBB90FD399CE126E +FC2B3EF77E064B19DB5CDF2A9E9DF9DA3CE07C6591A3AE7A06CCA8E1E18ED955 +1E3D4ED9AB413E1AB64581A3F2214AED77172CD93B90CFAB761597187CE7EB06 +9D4D6672E9B69D83897057B136436D260D5AB369FB4C9B13C8DB87ADA7BF2564 +967C6CFBB1B364222C89F0D67BE21A5CF4E3EE02D17256AE307BB987B2BAACD0 +4778574F3178EA919EF5CD14225FE3BBB886B2F6C7998A621B3560DC15A8F76D +6A2FF2C8EDA1464E4B6822265A492AF701C78077AD97B550680ADE63752A9CE8 +9B607F55B946A622D5FFA3D5A5FABD04CDD93388348817AD6734F9366CCF5F18 +CAEDF873F3D618FE24948208E795CB86016458F5B2062D839483C07AB449E107 +76873DCD8EBE90B79A54CA0D83978AF80DDFF7B213EF6626E759BB9E254F73FC +E54CB3DC00B23B848F83FBB9FC73A9529F5DCC469189E4067D5A8E4AC8A8B199 +EA673169A8E27E78A76D7A4295F36E03F3B3D1B98BE48CFDA821CB0A646516BB +83F203FD86AA860EC0A1DAF03FDAC8BBA4E0163F109E3D5F3D9C1596F8C8DFF4 +4A96C26A8603C9743800D28F8C13FE3948BB99DA9A81B0BDD06BC1246E31FCA3 +14A4BCE5845A79BF4DE8C28E556EBC3B4E01E2641361062E0D24DBA60EBFACEB +DABDFE057FFFF4727ED61CB0125FB0B933F2421C1589E848AD295B7FDFC5D1A1 +78CFA5CB9F8180F561EC5A9866781D82CCE5FAE0296FD548F7608297085274F6 +E33183D8C6CFDD9587723263B6F8D3FA343E38F8A738ED4E078436B3AFBBF4E2 +56ABF9F50D82A999FDD97E8C802029644702B8374DD158ACD14C1C3BC3659013 +C8CF9A26A4D38FE0820C48ED471593F81BB7213556531D027138DDBFE750D6DA +5AB6BED543E49ADFFE36C8421BCF9C3AEE247C1B17F1FA25FACA6B0635373049 +9B42EF812AC4501B101273E1CF8C7973210363A8C77EBB726CEBD7BEAAFC58F2 +F85CD373F341FE527A9658F19C7236A73C203AE3B8C358F22E0A75ABA2423748 +DEF72D3CD02821B6955A38637C6AB902FC79A9751798CD20D678BA95B04F544F +C6593651A8400477A3B51E140CB037C2B8BFE825BAA875C1DCCF5D87D32EFC94 +784DC47AF52924E28C1F80E7AA31F50B071E13DB7A8545365F09E98E50C68AE4 +8F0859BD1062B67A7EC810C8F15E1EC3EF0709D7165AB2B29D5321E8E43E84FD +8B2B469EE204F1482F4B2F519B554EEBEA1636D205620D539D7A573387AA2E29 +A61E715BA0AEB904163182B1CAB88B38822434C616C0004CCA8D6D4AC7352174 +6DE58FFCFAE5A35F57BE71D4D8AD77B95419BDA3C52E93B8D08559130F751213 +3D086B7600254208ECDE9481EB25ABB11783954FB1A35B216318C07028B4205C +179C8821FBD420B3A2532D991A1272003908E19C1B0963C5824E0271A6D2C31B +7DE8BE1F1CFF072B819194CB3DE154A1CC13244449FCB9E487F3F1E0DA3D90DE +640DFBAAAACB9C2E62ADC7D56B692CD0244FBF4D39FBB8DD8BD18839014DC7DC +EB4DDDFF18A68FCE660AA5C537184E94C3E955C479A7F493EB85392EA3E8F7B5 +BF919F8A4A4C21C227189F9B65717FEBEBE152F365DE7D84AA53129F1978F82E +75DCE1CC87D59E8E81FFA3A7A24B926575BBDF4FD65B3E54DE1F739DDD8A8243 +E7B2BE704B16DC90E87A0559DAEC85713C67BBF036C87602A121D8B25E040A46 +2BB02C9C79971A1C2BC40935BEFF7876ED50A0F26BFE8DFF0907A377C176FFC1 +EAC1E46C76BBCB6D188A7F9F75EC9BC2E162FEBB65B454C7CCFD6F5EE26677FE +432FC2E815F90E3EEE92DCD04237FD3BDA193A43B5BBC36D42642C6C0BB8F3CC +8019A3CF0B44CD80B6430597026844DC +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +{restore}if +%%EndFont +%%BeginFont: CMTT9 +%!PS-AdobeFont-1.0: CMTT9 003.002 +%%Title: CMTT9 +%Version: 003.002 +%%CreationDate: Mon Jul 13 16:17:00 2009 +%%Creator: David M. Jones +%Copyright: Copyright (c) 1997, 2009 American Mathematical Society +%Copyright: (<http://www.ams.org>), with Reserved Font Name CMTT9. +% This Font Software is licensed under the SIL Open Font License, Version 1.1. +% This license is in the accompanying file OFL.txt, and is also +% available with a FAQ at: http://scripts.sil.org/OFL. +%%EndComments +FontDirectory/CMTT9 known{/CMTT9 findfont dup/UniqueID known{dup +/UniqueID get 5000831 eq exch/FontType get 1 eq and}{pop false}ifelse +{save true}{false}ifelse}{false}ifelse +11 dict begin +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def +/FontName /CMTT9 def +/FontBBox {-6 -233 542 698 }readonly def +/UniqueID 5000831 def +/PaintType 0 def +/FontInfo 9 dict dup begin +/version (003.002) readonly def +/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMTT9.) readonly def +/FullName (CMTT9) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch true def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +end readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 35 /numbersign put +dup 44 /comma put +dup 45 /hyphen put +dup 46 /period put +dup 47 /slash put +dup 48 /zero put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 54 /six put +dup 55 /seven put +dup 56 /eight put +dup 57 /nine put +dup 65 /A put +dup 66 /B put +dup 67 /C put +dup 68 /D put +dup 69 /E put +dup 70 /F put +dup 71 /G put +dup 72 /H put +dup 73 /I put +dup 74 /J put +dup 75 /K put +dup 76 /L put +dup 77 /M put +dup 78 /N put +dup 79 /O put +dup 80 /P put +dup 82 /R put +dup 83 /S put +dup 84 /T put +dup 88 /X put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +dup 122 /z put +dup 124 /bar put +readonly def +currentdict end +currentfile eexec +D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA +0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 +51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 +7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 +E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 +0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 +C01924195A181D03F5054A93B71E5065F8D92FE23794DDF2E6BABDA4215500A0 +42D1A3D0D02C0C98BB1D6ED0B7791274C38B038FC7921FF1FB8FAE7258C09259 +4B8E1BD9EDCEDE9ADAD9BD9598EEA9691589649A9A21539161E374075BEE3457 +689F308A4A7AC9F2FE4B301A6C36B0442FB92E3B002623493DC087800B5A0521 +0DB96A23175AC584DE166F59142779F26FEE9783E28DE49FC3A8D6583EE63FBA +610DA773CA18ACE6F64A4867A1A7817120ABF9DE4D17782866E6CB6B65A9F6D8 +3667C8D3E61E5356E35343FDD4C6436DF73934470916CB5F0ECEA6BFF092E735 +C7C355B56189D1DD5715EC97E50145FFC17BB1497315A9585D713A7A6DFC7933 +995468EFD0F59E3C15865B87925A3F2930E20D5A35970E2C44F1629FA16E00EE +EE21EFC50D49F5BC02300D0A7BB85E649CB4E2E828C8B1C5469463013E71D723 +2CB11BCBAC191AC751A2AF7FC228395CE9472DC1809052012AEC2CD66695DAF0 +4CA04234F0187F4116C93F59A7F1F8123DE87F111853B785A20CA8B49B3B0CEC +B11AD345E1A11578D2EFEB0536D125237086CC8CD9F34A5137AC5DDFD8746014 +D74AAE8239B81ACF65F379CF2153B06A238A2D767F294CAE0D79228F0B7D45CE +510AC9657A1776202FEF42F96D476E7DF407786AEA12DEA0013D3B4C5D0640F5 +BC5BB72C34066270399CE595827175B23B25072723BD24E07F6BCD9EF0175DEF +93714BAA53960F81103CFB731CED4A267B53727BCA3C97B0BA5004055D4EF0EC +F725658E53AC86E4061B489AD4154915C3981B3B703E1E2A8D390CCECCA99385 +45EBE35441B062D7D12DAB2B31569387187D74A4043FD71F1C6D352EAE0F6757 +4345FBFB6DB15CAE47CAC4BAE47AECAE5FF5EC19057DCEFA1B23F47364ABDF47 +088A7C6A2AE26B10459B6D41CB69182FD1472F326CE3A15B59255D1DE3B616D8 +9D1F12561038839781E657C896B8C58A32DF5AEA23732A0966D96C68C988ED7A +09B7E2C8F9F3D0D56879764781566299A4EDD3588BDF70E3D924D25074F30988 +E35BDD827AE4D0B4A06F55A9976BF0DB3C0B1D09CD08E8CB168B50617691638C +0EC1A791C228177D4FFB021EC3DF5082CA3487AD2EFC8DE9466A690ADDB4C52A +FE2A6DB4CC275CD33D9136E735279FBB2008D59E667905EBB04326EC33C98B2C +94744B7F540D86E90DED64572ECF1EAD3A58EC101642B245A9C7232DC8FB8741 +03F97883BB32FB955C22F878FA0FD114451A3B3859B0B5537AFAB73AEC7DB2BF +409E1FB41D473714F6BEA73CB085139879FA31710E01915C2938C37BAD6D7D71 +45B897E00857D3931A489EAC7B42BCE4E65F73F67FE027CE482DC47598ABCB95 +39E98DA8ECA3E23F0799D5963ABA6E2984DEACBE7B46B40ADC6213E0F4D08971 +58F68C946C748E4B4217CBA2391BE2086C9758F4E32C9B6413E48D84D33A6E85 +84747029C0A9C9B92841D217A902BA8EB333999D62FDA9F82BFC8ED11F67988A +0CAE42182E414A9766AFFF4B046A09D476F8E3F15A8C7829BEE982D8350BDF5F +F215F2BBBF68D4B567BAB798B9604C79306C475926E9FEC0F07A99F43473C6FD +B15AC29C3D07FEBAD1BAFF75AAF2FBE94F104F1DBF838044FAD94B661B06AECD +D9AEBD02B60CA4546DD6B5B5C1A3833ED07845671CEFCA8955CE0DE5DB8FC93B +3306683CBFB8E5B79A863DE78D455DE9D592043C2686F88A43140F8B9F3B553B +7047420E93E753829F8D47AC7621CFE3626F271E31F0019CC02D0B57F67BB47D +8CFB63E902EA3231C00EC66EEC0D30FE8394558BD3535C888C4CEFC6EB72E737 +712ADC6300162D5D79BEE0CA1F6E4127A0BC90656C01692F6D82C85550AFC97E +C2693E379160FDB9636FA41AE9C75B7F6643B05971C6D67CE30971D590FC07B3 +E0B36B4D1C7F25110B5DA2130D574FA292B47322975A2BADBDB39AAE69BDDBDA +A880F9AAB580117708C79204DFFDC08BF4A48919B5C22228845CE8C3109E93AC +2479E523B8A1C12A6E541118F121DC6B4EAED83491A03192D5C3A2A45D1A2467 +757E7B377C635CF5CAE11A7CB49D49F3A1BB2286090B5F0E4F89869D1771D50C +54B5C5E091E3048A2C194F0ED00DD64FB95BAC6FA9D61ECD093ED416DA3A4981 +DB07CFF17C4F55C62DF628EBFF06FAC3F3D3F91C30EBB34052BE1A08F5EDA4B9 +08977197950A282B84E21D43C64BE3AE4BCE22C70E7D392DE09D89B7F23351AD +6AD37225C12BA79EC9951F5DA1E505DB26200190ADE0E549305B7530CB86EFD2 +A896F13A97E51754F70B609CB4511CEFC38BA579C071E9510A49982389980DC5 +336D6C4A2DB100DFEC4055C7AA9C55880F94FBEA9EB280BEF66CB8E1E38A359D +E5AFB12B540CD599085ADDA7FC2C72E7C873015773FFEECA2C596B75BC39A3EB +3C43FA2E53C0D7993042F3D652BCC483E48B7F6C94C3FF6D38E276086A6AE67A +E5A571B9C72E0D7824E0BC2ADF51A393B9E334649F786EC1923C854382B89627 +1B9E701AE5A6C42E672B2C6A33C8BBCA8F69B9061E787D6B92183F20CF4C3903 +FF5417427B84798C82BE28D2C81624E3920CA61EC9EADB364B5A6E50E49A1A72 +A9A090A1FCD84814B8B2708AD787D2B5015DA1305874F58C5EB62F843685FCB6 +465FCA80176CAB2B2FE65E0A270BCE1E3DB97564BEDFAE5CA44395A8DF4505C0 +3E103CC3B914359B2870DA6CD30382EAE8949131CFE31E9E75C3E47A3834BB32 +CF183D4A8B9001710D0A11390C9DAD116196568591D38C2AF4ADD852F31494EF +573462759A35415900360882739789D6B89ACEFA251C5ED90ED704DD7C3C80CA +9F6CDED69537D201D520C99E69EEAD5D3C0EB84C166660B3C190166D93EDFE6D +15BCB6DC5CDCA825E48D33845CC2FB15291AAB823F25CF8BB0A1EAED8BEC524D +D9CA016027141FAC9D35B64FB9C224552F29EF6B32497254E319090E698FD8A5 +15491CDFE1B988C79A0E3B9D01E12FF084E9FA86CCAE02A3EE6F2917B61A2CC1 +64B8CAF309D1AB48A34227A7729DFF99CB6EC282E3FAEDD2673779AA7E4C1789 +D93FDC37FE95F087C5F88F53D30A2DA9C913BF205FC6BDD060A40184F4AAEB3C +D080D63B89CA3DEFF310D09EF0A83F3914BD5B7932980ECE139EF0313C20B4C8 +576EE0FE3F28FAF4D3CE7CD0890BC824A85B8EF4636BDF1EF1BB519F93D36540 +ED09FAF93FD71992CA2CE2E83F5355162ECEB32AD218092F45D5A61A44E67135 +EF0453589CECDC6962D0E8DA7E7567603BAF50B2C8F1CA65EA5320984E7D69AC +9A7D3D7F92565D79E8C9DD2D92CCA7DE9CD058545E9F98AA47904D70E1897099 +3C4C852B3BA131DDD348433C336BDF5FBDFB62120DDEAEB3255E3207B0C84A0A +1ECF9EC869DB9BFA3693B03FCB27C5A5D3CDD62630DEDE91B4DD5B9784BF0BDD +FC6EEC3FA7ACA9E15FAE47CDD9B7FCD2BF0EFA10716F08C0AF25FF67CB6F9598 +C607D2FCA452417D2C69DC808A9441A66492394C3450BD30632AE739EAD654BA +4343459CA36B6D5B2C12C39495952F2EF93D82C73E33236785A79609E260C4E0 +CF3A3C950DE71DDC3939D42DB1CB1CA917CEAD56979A70F8F3B207C805319FA7 +3C000AE2B21D711A6D78C7BFB901334DC06F59EAB6D94B507734C27971F8458D +D00193645AB92FB8FE163D5C51AE4F40BDB4F2C51691E76EE0636F071F37AAA9 +BA78BD12459CA499210EB0CE2F8BD317387797C33F5933AE7A6264DA06B4A6A6 +1188326147A16B205D1F965872DED7D8EDB3294FAD2FCDF0D423329E9CCF879D +4E0B966D509F45527F7609DD09694D286F6FF7535EF8971B7DFBAF608A19D442 +C133207EB1152ABBD11C455D0977F66A9B73E51381D1CA4B66E87C0C7175A63D +80C699A052F00C41DAEF42E7A40E07B1B14107AB0787E24E17C1462960E3C54C +AE73BE4924464FB177EC62F116B2822842541543EFF7ABDDEE197D6BD8F8D4E6 +59175D8C5957550B70BE775AD52FFF6E7C00DA7CDC16E1DF7446BB5D8FD82647 +3E9F87D5EA365C82A2D991321ECB14A9E3AEADC5A56665DF7072D6DAE402BCB6 +14D92B17F9E063E4E9D8D239C91F5C7C0BCD2FBD936C9D4A0B57659420343B59 +B395BBD1AB5B6003F653699D57E7581F9813CC98D4F072FB78899D6DECC42D34 +F2787EDEA64058B46C4BFAA2BB96E9BE5CACE8D91E4C080ADFC0FA0D4A29C6B8 +54FEA9E11DBCF53D9CA40A21AE5076451EDAB3593E56B6D453DC8EAB8C78B588 +34D4C4F36861B5649BC1E9F3091E704BDA7613ED45C911DFECA74EEA05165191 +825F95A947CAF382FBAF01F3B8B041ACCDF39718D7DC5BA6CA12BB20EEE96439 +BF2E2628AA3BD2C91998E6247A690FCB0CC95F286F427345CC4F1115BA3A6E54 +4743355F2CC991CBDFF5725902C1F5A6DEFDC8638A26EA456C33C27773D6214F +66536CD2E44FD253531732D5A8C44B336B1BB47B0477350EB8CF74889B93402E +2356A9CAAFCA562315D8E0B3F42F08932CB87BA2499A875AFA08D11DA73B38AF +F46D03B7F639A8D7BF88CF07FFF4E91716DCCE6E2CCAB60A64D5E40EFD8B336A +1BFCC4CB04F49DE1FBDE7AA5B2092A6EDBD913D161A3271AB6411622D0E14416 +37F81E0102F5B0F2F9A2B27819E4BACD7C50E29D6291AE5B0973C657761545A6 +741729620EF2BF1046B3913399C10982EE5F4142CF461EA31042E432CC79A1A1 +39C607D22E45A6DEC008CB4BF6007CDE9DD5802B49A62C8E02A6D448B64177CC +887AD71D171B99E7ABE2085B37D90B3BD8513995D9A57F53184DA474F6DB5E49 +B73E04CC214EA5398DF7D7541F94E623E8687B511640457A48A68E9D9D6584CD +15B57CC044D8091C771D175F2EEDD411099BC8F7B4317DC503BB5E405AEEB526 +5E6E1B1F2705275D274E012A98F66075CEB90AFC648B964DDC0E9C4AE7B24CE1 +80B051022E5781A533A21DCFB97893847D685137EAD85BA708A7E118C72FA839 +A9E460B5D17365A0AF1F53A98319FB64A5819B087F554BC056C4BE44113A5404 +BEF759F890C1CA5E7AE156F4F8106FDB4F8DFCCC640976983EADB30976344048 +2A86D7B2AF4A01CA736B98D52ACE392AD4BECE7E61C710B08B66F01857CA460B +B8376E257113E10F6DEDF14CE2A4E6A99ECBCD302C36CADB713D849EAE9EB598 +F29DC98531D793B79F83091F9B136809E006F34E423D528CC4309AFFB3EEB47B +9A9DE4D5B25CE953345C326BCBE2B4912641780637783084D3D12693F8135483 +CBB0AC4EE0B5610D7CEB7DF205830BDB9BB404DC1B28FB0824CC187B26C19A91 +DA0025EC739BF3993700101D042DED86D67F5FB87912CFC51AA7DF53F2162D62 +6314A2CE13810D0B8D81F45771391A236422CFA0F35F7A0CDF14ACB2724AA57B +7C2C28D53029B1146558610E0CFBBF72A85AB9BA308F846228F299F13F68E8F7 +D963B2EE9EF7D4C21690632B640BDDAD0556EFA4EFBF035F13377ABB5CBC280B +9E0C12AACB153C93351E5BA95A7D149010E204950A59C7FC6581D9703468C1E9 +EFAE37E7E6ACB892B3F8D1248D9A4A72F642FECC5E0B25C15EEB921EDDE84D12 +0E524FE6133C4921FF4921242392C12FBE69744D53739F7E849C1B96C4020AB2 +1FF10DEA608F111749E2FBD8DBCB17F353DCB3075B4F4B8186963EFE95A76A10 +85AA5BB6DB4095291974221829A8E436680F4860E01C3843BE5BB3101D0869C0 +EFCE08D187BC04F58C7A450A59093680A0F09E8E3F12DF5223E7EAFEFA01978F +D8354753A68022CC92C71F2CA732DADAA8A466D4AAE5999B0DC077715671F518 +E6277741F44AE798EE50DF44CCF71FCF8BC71F76374005FEBC4883C6EDA854B0 +88C0C2B476709AA809ECE41AE786DB1A32B3FBBCC14921673578D3514C8CA842 +E1FF90BE33F7B93ADF6BFB8B1AFBBD080783BEF056A6BFAEF676F7BF9F2DFCC8 +01D255A9F0391951210D60D4D4DCA93AA858B38C0D7B8FD740D5FC6F277C2A68 +54CC2DE1F40B6347201FCA2A0A91822708D820CE645C3E4E5A09FE25721AB33A +97871ED448F38FC5A349D81F402B34461D840D5768BFC6849439AB6115104F78 +B87115B1DAE12542EA898F86ACE247709817850B067F537E6137196101D46DD2 +D842EA03EF4501E34074E8458E638ACC4EB349A7430AB035BEF2DD4CE00554F9 +18F9FE32A55AC1E7E50D64AAFDA278D77A7149C59DC5B1E3064A4B281A54C9CE +A5EA94ABEAE4C6D5674C208ABC72563976487136AF2E21F835BEFD232D7F0D13 +1D19932367F51D5379934DA7F1635AC51EE5CEBFA63D4D32F018DEF13624EE62 +31DAE68A08DBE3B4FDAAFC75291C8C6CC7A657E3C7453C7D1461A36E88E633D5 +408253B673AD87A9FB2D0F56DF1305916D14D5DD62051E27BCE09CEE9A1F14AF +1D7164BA5FB6E6EC8D38750F7E28BE330909F303ECDEE692E347DE13C8C2F82E +29C8BE6EFD76546F362A12A1C2DC12389EA95ACB4DCBE95620F0C193EAD91B33 +BAAC5801AE827B9AB3FCE5D11D1D7854F8FA8A31670119CC0CA98628F801838B +AAC7EF90AC5466BE69CE3E3CD9951A5EB9AC08014285422F6DA6F6E221BB30F8 +0042A11F2E4B765BB0D142AD52F4D85785EA71B2E1CE20728B9E9306CE93268D +99B822A5AB5232EC7E26EE1160850AD3905864A01357F22722B6A54D4EBE58CE +480EAD9FBF068EE965AC4B5FD2FA8CCB91ECFC6E90B9C49268CA0B0FDAD23ADC +D5A74B41149BB08454054C451AD0DA4CCF8B60F2EBD061AA03A011D548B6B481 +FAB00AF9225BB5463F27FD67333FB51F8664536267E95CFAA0BE3BC1B8F889CB +587A3A4FA2B45864F07E11372C9507A625C0030EF7030A0B4D931BCC48F6DD51 +A4D1F63FDC4B59C1CB18E6242E9F4B4B8AD9755B870FE60D640181FB7EB8120C +C56F51DC8C47FCC6318C2145EDCBEFA7BC4253315BA67FD2B3D4AF6A9F3F229C +AB75B592EADE15B1FB5FDBA1C0F786BD21A51506B7A2E42C2D086BA6F84D1B3D +AC7531545F0B01346831FF36A52CAC1E390F99AEDC265B44B0FC9C581BBA6BE4 +48B723811EBCAEA5FEFAEA7E5B987F2C7B3E9A65D2D14A7B74F099401C57E367 +385352D0776D2A908F7A5A2E4D4160946C5591397877025C8C387CA413EFED56 +8B142E8341E349DB4DBA422A4FEE56A573972A0C66590175158E48850A9F7F38 +4B95726787B8F969FDBC97491CC81CABC976CD00A27D1DFCA7CF467A956C1C6C +839817AEF8794B6151FAE9261119DD5DB787DC9D3B420FD325ED6599FACADE0C +320D54C2E0D296537E22C1783670A9D9BECAEC63853EC2F05A990260DC189D63 +7CCC0BDDF2CF7585071ABAC14630666737041194D0777EA4292AE60BD7F7100E +DB568C90F0D899EA006CA423CFFD6EC70A5D3D8AC43C747DBAD3B02219E47D8D +DE030631F4678C357A58ECC52782B31B50CFD44EC33F41585E51B27E3997D33F +461BEF897220AEC80007F13C5A1EE3A0430CA899047DF944831F8B010A7DE74A +BFD26001472DC00CDC9F17CC435F61ADAD4E9AE062ED477FC621FDDF9242C449 +1BB3F77FDD1519A251B663A693D84B42BF0962F537757F38CE5C5D56B98AB10A +3B70C8AE8D52DCAFCEC22E7B09D3C4EFDA1841C74CA975E4F8294F7BDC796500 +0ABE197ED3737A65F7BAE601C91DB3983EAE11DA3EA18ABBBA3650DC361C2E77 +EF9F97618B0C337A906FF39926D2B0B7883ABBA650816C4C6B34EEA836994EEA +AFEDDE56E0099D0E09EB88EB093544B9BF4871200746A0409C475FC4232A38D8 +F3105B0FF44E4F132378DD12D9E796412FD0F9478322215E9F59E69396C35AC4 +097C4995B2C3BAB2DD04B1A7097DE16DFDD76465E79ADEEBA90489ADD0914EBA +53E11A43ECB11D072C68D2131BE1C7C43CB9DD5FBA0A67BA43D6851AD4CD3BC7 +39AE2E22CCC183A56CEB71D4F9F578518E376426E42B6390426A8434B5A83E78 +77A5B9963BAECD5FA5521C2A29418764E4EC1A72462B04957F823E2817A7F8D0 +1512919889500024B1C42EC107E8B8533C0B314EE4E23313A4C1BDB009A2073F +9BAB479A3F9DA76CCD65629CCEF78015ADBC2D0D124B3BB2D322FC4D209E417D +84BC3C758B6AB64A01E25C9C7B71D741AF90A19A339F99A0BE9FC39622F04C6F +737474CFEC19C890A657BCE192B9DCD8F273CDC5294875DD4507DC5723EBB357 +73DB0933927DC21081E67E5DCF4E41FAA6E00E8DF04128F86348FB0718068FA9 +918319C4EE9D090CDF348153B6CC48648C55E889B4FFD3D75466F1B50C437546 +7DD9CF20980B148F60BB146402DC0732A27F255DCB859CFB6F9D329C12FB14A6 +7824D6DE27B03FF85BC59703A5D6C5B7D1CEBCF3C3FCD71D6D6F0311E41BF8BF +0609D23C84720FA9EAC961C9D49C2E962D9618C32BAFBAA8CAB0B2F616E57DA6 +8CB44C5595A22D6793FE9323257F0881FEFF677F98573A8E3A4947086C83F739 +937FA170572C5DFCC89CAAD175D626CC2FF675A1DA4620152AFECA7497DD53AF +F1D82F68A75FF2AA16F255C247DDE3B5E307B96EB92BF7CA4C031B706053D16C +D78D2C620C5D1E95BDA3D8ED452CAAA579BB4AF1C5797F2B7225BBDA3E7AC5D9 +0F0C3AC5116C57334D40E1E44C4742D7AEE78BCBC3AD4871694AB4F3BA7F317D +443D7E9B9AD53380D62EDA208CB2CBD637037DD19A4787AC77D46D559C93213A +E272147F977F3BC1A4FD44643DDD46CF1E50E0DCACDBB2122817F290EBF666F1 +56F5CD26E995B1E3EB46308631D1FE378B37DC3D202113546B036DDF1DA32931 +9B67D9522DBD801FC6C8BE43C0FB3B37CE01E6BF14260530E493DC3A5EE2ED04 +2ED6B8C4BB6EFA642D66903EBCF687A161B94D63A670E90AC6514E1CDE477B4B +7E066CD84F61233A258B13DA77365C5E302627EBD033C63D47A86E6B2CEB4D4D +92E507F1953DAAEDF8CA558563E6CCBE51CA753082CA5EEE131C30CB7640B13B +0C5753268074BFF7779584A3808F8F14154500BF13ECA81FE6879875DE12FC3B +E58D65DAADD4205891AF008F869D867FA7DA4DCF23E2F46A1A1FC043E21F1915 +E9F79547291060D6BDD4671BB80234E474A98F1EC24FFE844079DD0D7BACC9AA +BF6B27DE5438995830877A20A04B06060B1B5584B8B54986F85FEC0938F63633 +75D11190084C2AE3AFCA77BB0A497E2D1D6F7CF6EF387B193A652C61E47BCB5F +C495AC3926FF8FC14D0B094A5C3CA9546388B135028E968B52C788F78ED28141 +176B1D2190D3552E654549EB21C6D76114FCFA365079A0968386320E37B32F94 +A550368ED5E8ED073D0CAF5DDF53FC5398DF274722D98462C15846C69EB7A4CD +47CD8F17B1D9D91C43CD5DF110056F18F56FF5DD3AD6FC34272C958B49ACA3AB +C713C8A459484D01C3D0610A03DBA37189003AAFA42F9301AD149E47611F44DC +E25C486BCD845B13A4E44A93D2991DDCB159A509CC19C7F2BC953885F508F90A +3FD4303179780FA973DB01432CEBAE35C71037449E6D5D44D4FE90E631890E56 +9E5FDD427175A7827DF70A58670BCFCB3C9F0F408C317481737A59C95C14F25C +5605D80C732821A948509CC07B21301CA80A9FCA91ADF6F0855677A3E0C6AA71 +944531E739D7677AA50824A3560D25C218161225DC6428F16D255666E97CA479 +DB6EAD9172E7A5CF9CC97B4884BFC57246E337094B476E89E0893D5B83377F9E +0AC80A72ACFF9110436A0BD07B43FEFDC429143548875D9CFCAB7143F391D974 +8A905F2EC166056B1EF2345EBCF2F27D60E3355C996515764C2332AD6641F610 +2ACBF70B22BE6871B3D1A9EAFC8EBCE9351E8436D4DBB45AF54E3E47B8B71A0F +09CB91AC8C56A96116B5FADECF1359D941800512B0AEF302A22A91A25AFBB1A1 +F47A9660E30FB00B88A14522B3B024A797DC65105CE08D3ED0C4CBE8A894E00B +98F77E873EB6FEA680DD131706336295628330E1FC6B1FF9D9503F5153A47A09 +83511D327E9D236CF4958FA037FBD3BB8002215C8BA4DFA1E788553178D1AB2C +8D7BBECEACAF478A17BA48D3A1493ADA8E82AE8E9EEC3E4F9B0D699A95ADD6A2 +E3AA945A6ED96D608AD857F98ECC8D9B1408B68E72B06EC582E31F94349E5522 +ECF56451C22643192954FC9674D0B00C42FC843C70243E5291CC8CC661A57786 +E8C418A22A492053C75CC1254DA918881F94667E894D3FD619C183D4C056CE60 +A641E8D0F4C4CFDD673E3BAF4F64CE3D6E8A9DF8016DCE40AE7C10BF0A08C3FC +11AB82036D171B62FF407E3157C50484617EF16AA9585C9F45ABC5EFBBCCF731 +BAE398448D796D0F12213F45A008451D84880940225B9B56DB581526E9538EAA +489844D639EDB7E21E7F3533998142B464A608D8C2BEE89E4ABC413C53E30BFB +D14A429DE14E03487C35453BFD76AB091E635DA15E9554EBE49CBF29B0C96706 +BB7AE920776672F3D9243E93F8985B7FDBCDF91805EE13CA01877D8476C88E2F +F36628FC3B72900F414BD6C22BD33E3C5C0642C093080D4C897BB90A76405916 +9C00C1B0744955AF8E136682937AAD1AB0112CD668F0EB174002049F4B659220 +5625F58CE12D3D47B355910BB66FA89C495263612B4F6ABFC5689178032C0B34 +A0821A28B1125F21350EFF330DC7BB7C98165AFC5543B21BB8C1F083274F2033 +FC409532068857C34B91FE26B56EF74A8A6C7EE4D4C4B834258A96F340DB9EC8 +940F158AE9F1F88A404D687F3F35C87A6B696D96DB62853DE8B521350BFF2151 +66595617F835DA8774BF046C4CB1B6DFC695234D9FAD62061439C605D4723ECC +665D49678D73D7538B292009527541DD30770E668DF5ABB0728C7D62A41FB6B4 +8B03448E69AFAEAFDA23B373B89A1798242C2DEB42910A641EEC277F33BF91FA +833DF65A73335E4F46C47EA655B21A58542B37F27E570104165417AE5CB3E512 +48C67ACD9CA710D776B0E4E8AB939C8709A2092E0AA4DA5C7C219921AE2D1978 +193155297E74307CD88057C8AA8A8C76E3E5B6DE395ACA37E5E56C7559426E0A +49BFF1F52ED7295BE8B69F1EAF891E3B7268E3074CEF9714934502100F940203 +AFCD1FB8EE701829079B7941C075CCF0CFB7F09BEDBBF3CD182D78E8523CC43F +C2B9CE51CB1D0FF9289B317711783EB1C74F45B2AFFEEA23A8E29B86E00730E0 +2554AA9F97871AFCE2E8175FB73D1F5C63330B973522E56528613EDB96BE2A0D +39B9171F18AA02C70815B8F039DC7F7C973C82B31E38B7022FC380FA56E84F02 +F611F79D7F82AD14C8A7FE68945F0E58FBDB9DE8885F8F279B4F52298223383E +72D0C56C3AABA7FAFCCA43B1D54EBE13967CB7227886AD1E360675567594570C +B144D383998186C83AC3C089CA1063D352B4926B75CA278961C14ACE4A0704EC +A9193D4D588EDDD2C0637C721290F8E5D45DAB3124306EC438C3874192C7528F +B42E815CDFB631D21412B39E5FC7C1AD908ADAD537B612FEC6CA686E32BCD9E1 +FC8857D659CC40EE9B739B7020E7ED14992D095CE8ACBA53C49062234B674F73 +DFA156AFF54B69A3B160C3CD1B3DC5D133AC282085CAB47A2DCCD17B276A9AAB +4E938175C455DE42C61CA17C7E932A265A2F4BD5B345F219675605D2C67DBA7D +E5603A0A2CA4FCDB480F6C5824F516FE89ADEA834678332793FED070554A2F11 +147483E2E07CA0C6482B1D8A86DD55E37132AD6C0A6809E884AAB7CDA8206071 +04160B8790D0443D15B78F6032A65125CF05D3D8C16833CF6F43AE0C2830C292 +0535277050AE35FD618168B69859A7324E69671BDFFD20D39945D5033759B689 +DBC5ABF16BABD01F223ABBE7E535CA0442DC2C0A39F7833FBEA24C0DB300D634 +163BCCC5419B2CF457AF7DF6F2FE3D7C1E93608D1B52B7F9C8DE2552CC35BEED +F38EECE0874AED4507157389043FB93BCC7D7E71D42A2284615677E9D1F9ABC2 +EE38578ED962596BD06DF0729A5A1D1EB41A2B9BDE97DB3B619252F024BAFDD1 +951DCF127753CD953486D634BF578C4E0BCCE5BCACC214210FB1CDBD22BA1A5E +BF0AF67E38E06554203587920EB27A91921FED3160832C6928AF86DDA5DAB1A1 +CBF3685B2D0FDE168B8F66E544900F889DF5E773CA536CC2FDE35287DBF7EC1A +CECFF6C2E32D002A653CAC20624A8AEB07D7DE1032F85DA68B483B83F8D123CE +833F0ADEC8B1537D0A68C3EFD8876C2094678AA68FB9ED4F57D71ECA40D03A19 +15DEFE183470DB6A31923C44F8AF1BCDCFF4379500C04057B981EDBBA752B735 +B7C2BF718D8D26C9EAB63E8901709325307AE7F6531B8B8D763F80436481BA89 +92A2D51E54976D43493B6D1B59E92ADFB58F037A5CF997F545666DE9466B313B +625592F04768EE45BB7545B559A084C613ED93173425A1522650944C76905E3F +481C4B96CC0B0DBA4DEEE7BC59AEA4E6408CF39CD800332E45040B32A17184F2 +325E01EA36ACB452010C9B3B8CD7DF2397B37EB3BE0BB4B55C2D10FA77409722 +EAA6057155F5647D973A321329B5718774F9F3F35CA7375EC6C7F1DAF1431861 +F18CC7B0DCDC88725D6B41118C18F736B7DE1C16685B03433EFC7EC4E26F9612 +03A3D3DC290527FB035F424C30473B870A4F87750424DF2ED547ABB12A3805F1 +BCF7ECC4AC554CDF539E151F001805C67174FD1FC9F9D1CE4CE1BAD0A65C4B4A +D563A0DDB1A04CCD0802AA24C81C4B25F5974A45E027369BD67A610F5756B1AA +8ED91CE191C24447D5AB4D12897D29DEC5E86FD992E80BC77951B5967FDA29DB +D049E77EA6AD8F916F8F8FF75E410B7816C66EEABEC14C5256B9940F9ECC8743 +00CD8EF5BCCC197064C50C721C382A0BEA95BB386BCEF0685E8CB3D7D8DD0DE1 +DF41CC00541D0C037C521D079925A3C8D218552ADEB32FA2D321F47E3D08CF5E +A82847545117C36DA06ADD506FAB524941783E6A87C302F2D2D82759311463C9 +A42D97ACAEB73F49028BBFDE395CC3E2B563AA0F36C3059A2A6333E4E77C5921 +FB8795471454AABA359A50B3216094ACBB0962899A36FDF04382B691F7C97D30 +7FE89BEDC4FE24714CBA54E1427C88F64EFC5181688EF2393AD72E3FB9A4467B +7B36AB5730EAC0C812682B2E47C939DBEBBEC96EE526473A5674228BB3A05113 +FD8B294E841866EFAE18608AF00A9CF163893CCBD7FCEF39BE311B7AE268FE85 +A6EECB162C5E8051479277DBD86FFF24C46891DF148B0F9797130AE285C8D908 +ABF924C74DA8D35629B5397CC4DD5FBCCAC5B51C842CBF6092575FEAB1730E6B +F57384D307A7D8F67B682F10191265E2DA24F793ADE78900FD1CBC50522D8662 +0F0DF6C00B435A8F66E88AF86323F599344974F570358E6FCE49A38C299F9413 +9E50CCCD28B4A1C79A25C1AA693B662A3694ED34A94967B7A153126797816A78 +337CA812AA2C63DC7BC0F721499ED576BB203055D2FC83EEEFA1EF1FACBC0B3B +754240A6A5193FBFEA971AC058876A77090EAF2AB953650BB9F0CDC2FF6197BB +8E712D60677E76E100001F3AD483CBC24CE8AE4154B42CFF1E8480EEF4A98B32 +2927FFD788EB04793C1E43CEB78FBC27E15E1EF3DF42D1538C9724D8A2A5A63E +C53FFB4507924371428CA6ABB3A3B347F233D3743826038929294F56FEBA1EC4 +047273DAD9F1CA8EE591F1FDAFAFA1FAB4BF194CDA6A5572039500514EB20C09 +6A60E3629CD2787CD08F9FA231B18E4EDAFE213853473647C877BB5801803D90 +4EE2D7AF340BFC3E5BEF8D7B94244405DFD9D2DD49F46ABFF331031BA9F65BCC +36A69F599FB82E28E1834A9B3BB9B2A28DD9DBD7820B0ACE05726A43A3C3B3BA +4DAB7FE6ED9E6BCAF5D96EEC1DF629752A70D1CFAB741C9292637B6B2C0EBFC4 +F7E9531CAA8688AB009605A918F3AF87490C913EC6AED16BB75B10D8C9BA8F48 +F6CE9F5120C674439113ABA876BB4CE0B40D34BC3F20153A89A843C1C1859C61 +4A085480779D170E26357EB5398057297666672861A025BD8724A747CF3B83E8 +754081C9B027B04189B2A1B024F1D39D11670BA834F37A20FADD07DD28094B00 +400D062383E2F9DBD12C5AA8BE4BC7D7DC145EE4B1A289EC539F58B5713950D1 +4070FA9EFE10838846E45C2AD47320A690CD51F6924FF283DE926F2A48A52EEC +9C648DBB8017A61C8B62A92F35BDAEFA6F8AC1E7970C4E1BDF827101F804D57C +B3C00B4A334DB98293236438B8CA4588123C3CC73BDDD5A09B0DC68C0F23028F +B51B6779066E74DF3665311F34EB389519910900DEF856C4F5BF7431754A18BF +535C2B3E5C19474282D056D4AE7380CBAB4FBD8A59FED62B60D3FACD9D410B77 +E56CE3F7125D6506A3D2C802853691736029DDD1508497176AF904A9FD483591 +956F10B517CC74C1A5911396E5A99B0F447A850208DE4F4AC40CC0EC5F43DC92 +B39B6E4E5FF46E20614CA2049240B2F7C9CDD38C5BD79602EA0AB461D4834C0C +4B3B7A7005E3D57694E177681034DA1C6CD9C59BF3CAC137804522E143EF99A5 +97F7203846CFD84F3D51C586FDD70F54D5251BF301C25F006F31211EBE68CED0 +42D4F978D1B92DC8E9E58B7901D5CF62F5B5668E3C5561593BA22BC17E73DE56 +796F09219554DECB4845CBC713DEED83F818F155424788C4259E558A4289DFF8 +8599CFAB3573E44663D553ED8B602D2DF5D335ADB1ABF2BE5B1CA57D8C7D1CBF +63339E66BEBCEDC145872DF8B754A5C084D1059CE5CA912A7F1B503D7D4A1A63 +89E090F319149CC5C1AFF5800A6070DEBECA4242A15096E32BCB4592EEC00C32 +011EDE9F0A28CFAAE8E0ED5868FF4B68D81EE71475742B8A16EBC31460713DC2 +2788C92C46762E1567DE47D45AB8CB0D6339782AE34310B7020A2D36E903F8E5 +916A2D87B1BAEB147AA0857E3B8C6B42EF85A0CAE8BD5EDE5B95BDB8E4197EE3 +D65AA606FA8F86B11B13FEAB59A093204BE0C77C59420BCAE0EEC7065E81F200 +2D9BD81B3BB5BF2BFC36F73119A8AC2ABAAE4F3BC4A4C4BE69083C86D7FA0235 +65C111C4FE98C0F0060CFD036EBCCCAF20E7C4887C542C65395993252DD3CC3E +27F937EA81E0471A987E8DC1E6E1DF6C5C24FE0D5919151855CC92A2F8643A1D +B1A476EC2D7987575465205CC3EEA45C582984311E70D017E5432F646A722E2C +7393CB76DE55B15840EF7B3457F381982E7D4E5EC036FB434CEF78189B0DBFFD +7A518A804578034D018F48838702C353C8A3412FBD465F6B26BDB6CC82F38273 +AF19BD450B45E226B0566EF87FC46BEF50D9019EFC0AC8EE69DB43BC4CE30401 +7F65D90F8167E0F8E0494374E1353AA5F76F988EA1F441AC2F9BD8F883831E9B +8788B2AEB6C47183385993A7092F24F178FA827C1B604C5C9B7D30998377F78F +DA11AB98CC4905278850D3088904DD8FDB80FD7800BFF48BB302D694D6802534 +28FD8EDE7640607DDBFACDBDACF74EF16233240F46FDD97470528FCDE11C87D9 +FE49262FE715673DA821164E565547283A97F5D6542AA91F232DC7CD55FA125D +7D4D6DE5C683EE4CAEEF3C5C0CA9095F49A6E5C50EF9648A48AB945A1159BD14 +9F6C559AFE9021DFFBB66ACDDA2656F75CF5668617DCE9E61190D69891E00DD1 +1D843815A8777773AC0700B8C288D4BFFDF47BDDC5E755CB45A2EF780806D00A +5199FDE0795FBA924B8DD3C62070829F736A9FA990426D05E3A17244140F2CEB +FEFD8AD5E9A2D06FEB8D2302930C10FA5FD32A80470D0C78155AEB79E65025E3 +D7742E53FA07ED4B5E28568B3EF58D84A1B030677B2049B47A9619D647459614 +B6C788A2D7B2A1A28473F7E03077F2B76800387EEBFE881ED2DF57D9E0731DF7 +F85B5893978E4987CB5F038D52DC04A77563F4C343A72A7467924DDDC46F9E71 +DC8F3C8B6DD1B257B0B2EEE2DBC375F6F10054508B3A9F5C96741C6C2EA4F362 +38499DAD4C3C60F872A4E60D46D4206CE505C79C9D23A90F6816A7D474F4A6CD +59F0E51F3F974A583E9B42359CB05A49944FD0C4A98E9F2EC4616A353C8602C9 +9FE9C23C5831B7795C8166D738C3B1AE8DA84D4BCBA8CC3B42CFACA6D3FF9911 +F6DD0E3F51D8A34FD4CF86947321F4F0D8A235958F97D420DC9B84EE4E181072 +8CF7775571B9A7546EC8AA888C0973844C950B9B7C1CB6BED4D22A645E0D6B02 +226CBB7C90C85C8C281A26A724FE55504AD3534CA1045059521D490A127827B4 +A8ED830409FA14EB7C72B07E7BDDF6A4DE72FAA2EAD35B2924AB20245EC34758 +BCDA458B46EE08FE9A4676FF2C62294A75900C1BD18576D5DC14C5BE3FB28C77 +91F4C70953982ECBF48EBBE5776B13C82DBB9BC342BA91472136FEFA77D26C34 +ED729A7461C599285073E8EA4EEF30482EEBE964287F2243AD8C0841EA7CF2F3 +254B4621467E0F6736897638F6D272BA843A59F1ADD0BE7A8CA10620DC3C2FC4 +09264EB8C91081B2D7A922ED3BF3A0FE977B105FC977ECE8D410B93DF0F10D92 +72AB21DC908B95030947295E31359EB24995E7F876030FFF8A6E6797638DFD7D +3D1A7CCD74A2508107B9E834F1EB6EF8ED145CBA279C34EA120B998251676FBB +5A948DED6DB868862BD883EF862871D7B6D0297943FDE54252AE65559D65E3F2 +16C955B774E4747C05D2292633C900A37DE2B36EA44F5EA63042A0CC8E67157E +25BEE390DE76BC6141F54432871301658FC5AC86572145CCAF0A7C28025D403D +9518B4228D451A50F7CC18EB253AB9C7E89964CA289C12520C7BE1E19325DBAA +731915673EE8E286116676248BE2F618B2E8D88EDD8D3AFBF84FC88A7BCFFE64 +C56BC9F94E2914FF82DA100C9A23E8C6E3931D225D917091A6695EAF38770815 +E35BC96122956581A14D30BB9F8AFEC5B6E831E8A8C230FCA87A4969BE1BDFAA +C51C5FC7791EB8013D67DED7F961AFE4BAFD3087FE23343678E218F269B9F0BC +E8B945EC8B9301E687FDFC672B7610F3D2ABDF92B441E25121AD2A0B46B1F84C +EA523E1E3AAFD1AE2A854F07F04F26DD3066A9D07FD6EE16897D00D9D2775F63 +1AAA5C4AC0B9B10517E8989D47E5A783448C7FF5400BFAEC1113651DC37F6726 +4D7D19E21155575154DE7A27F334EE41D977A13D0B5C8DD3CEB37BB2028B0B3C +B3E536882248A48FB1733F073EA75932139211D26F1E7270B02AAD59A1206AF2 +A5B6A2C8EFA38588D8204F9792988330E4025E3C9BFDE386810769C61FBB4949 +A207B499FE096D7A44BDCB2BCA400F579E91843CF70CECA76AE349662EF0A63E +620C8667348BE8FDB25AF98EF04FD9A4F892A3C8F8413421277E2B6FB2486EF6 +F05A03D14E730C1836F1277CB4F5AC25775C60DB75161D44D15185EBF7E0E6F8 +D8F2F6DBF4759AF9D5BD9055DED8AEC3FBA8ADEB5D9E361AEF2B91383F5F9169 +FAB27B66F49655E2B61608D11FF26979745A41552F95F7D2619B71EB64027247 +BAA809EC06768696FAE16C12C5E2AC3A878A5B4E351D83C7B8825580FFD67CF1 +3EACB86A53B9A4ABE5EEA872ADF50077056ACEAE91806E00E66C1AD9F5B1A52C +FAFDC465BB1F668A67F506EED2FDE3D54EF6764E4C5011117798500B3E6C28EF +C0FED72F487F121A962C503344813E38CB5A3D72357379187371EC173DD21ADA +12CABAE6EB771841322AA36B8C282B1A9027262DAB07C1CBCB5F7BD74B58D3F6 +B552C474C940D76B6B3F00373963C3E2F45140849316D44E18D30391EE2B1C3C +B8F58A2C9F8D04E6E0B03617B1556031A978CA4818ED5FF6CC44158F58CEDF6A +061EFB5DAD7186F2AF36E0A0F5B319E0E41DA7338F380927E5F281596A847F17 +042B12E23ECF0769CADAE5F045C270946CC62337819E6E939407CE14466C7308 +2E078A1B1EF7005F280DDE592D404AD4763A4CE3A6B15FEA9D73383A06523E45 +A7F6DE54DC41522BE72E5D8B82A54DC9F0903648FF3A0877AD61B1803F23C6D2 +BE9CD4E8E24E551E43363761FE61E05DC73F32F210E64A37C8B13F3EDE519589 +4E6FF502F07C4BF44C97EB9197DBC35147929EB0FA95A7202D9A3B335FDFBA0D +C14EE8D9C3542E820E0D21060E04498D76EDFFAF30ECEF0D86125DE871416240 +8F92B6DFB3F80E784C583C5985264BFC23D0BB50D1A3A1C3D561586FA4CD7B10 +CE39CDD98D501DB4F7127D1B51B58A4AAB5B5130FB3B273377F7AE494F6578BB +45370868FF64263542D8379B8744DD1D788F0858B599CBABE1DB48F1933C786C +DD0568B85C5789CA9068A9EA9C801AB346F94CBA2EC05B3A9242541AF7ADC502 +95B8F51B7CC659ACB1B0C3D46B45A030D94D181C7119184B5449FD71C7ADB953 +737565A83DE8B0F468E08ECD5AF1A9C11F2C62403751020268F79EEB0427AA02 +E64EC681B2D0F53462A329A802EDCDD9EF65F3954CB6A92B9FDAEEDBEFCDFAFE +FD174C46B841CC31AD035DF36428EAD6F11C4635F035B66E69238DBFD297EE3C +87625049D57F84F5646A50C313DCC2ECE03CACC4D4DFE22736F9F0758C78C33C +1F5130B1D80A22822557563FD1A6A4CF37A6B8C4A729043E77B423F362BBC608 +D22BB8A1AE5ADEC3DE3A3B8709BAA5174A8088BE74A23E8B71D78B9AA40CBA64 +8F62B35D7EE5711520B7A166A0435C6B8C55AF95BDAADF9A3C73D052FDA858FA +BAE6CA00EBA099BE3D34534B5C25377D1BEFE8BE0A70A0A6AE4AE339F8FC8DAE +BEA0581DA27DA791C0FF927BC4DB0BE7D2CFC0212A063DC4849B69BB764D6A04 +57984AF47C12989BA200C101EC9809248CB5F1A0ED85F07F76CB29A2D6602CC6 +D0E1D555B2A7851ED52FFD6FFB26F7763A24D492C14BDD4F35233B8E5A9DCF9B +D15A89629413C8AB70437EE8EC7A70B2EB64D6A055B6D27C46C7C7425578D6EB +891755F0C8B8F05E1D730E7D238557F7CE46CC283152ECF3BFE721D81A49A621 +94FB7C2607803BE877B1EA478C486CAD77AC0A9D386860DCC4D162838A2971A6 +65312084585325D103732865A54E3FDAC0F87BC43B7676E74A5DA5DE8F84C491 +95CCCCF0705E7B729F8920C5B64C2DD543E53E258799729881ACFD5A8F6F3E75 +63229380F433B95B5821B6633D76360B8D7F021C70547CC041ABF71316E51189 +7BBC5498527AC87593F8E5AF9FFBA61922EE096DC9C58FCAE9C100084918E2D6 +1DADD04C5A1DE76CD08173DD1206BD5487C152573E0A49464B9F9DE059F191BA +E67A322EDC77426CAAB128CD92E2E73D90931B5D11C5AE636FF6A15609E314B4 +CD44E7670B667BCD109C4EB9D23AB504031713BF3CFED13F53C5A80EE104FEDF +7A921F680926CC6E242452EC778F11E0C68829F53F22BCFB7D0B56CB37B370E1 +EA27A3CE6946CC8ACD2ECAB8E849E2D72C134BAF6A2CE17537C2C34F5B323751 +CF7E237C9B3D70DC661538E30AE2E6379725CB58CDA03BD38AF3A5A82FE3D8D8 +07FBBA36FE779DE11AEC8620C282FE1094CC96028CA626462C8B0F669AFDA0ED +2ACD9341F1449E97B6C733A25599146AB0A602B97915EE42B62517205EB1699D +F79CC40B4CF7CF1D71AF07D3CB68FB6D0E295EE783BAEB94BF5122D301897FFC +7F64520CE547CEB5362182166213923B92302564793CA30347D4BA68BD651E4C +AE6F66DA99A61B7DAA1FED9B1C32779AB9690AD6C3A67F170F58CE27E764DA10 +77062135BBD47BABB90D5F740A48F1F2369E3D7FFAAB23A5B554A6B6B83460DA +7C6C609364123991D419B49FEDD344A264BD8F09D8D6FAB43137869AE97D63FC +CEA9B1569B1706CD6AD6B7E7D1DB82900A325716F7A5C457A04F4B919C1798D9 +A81AC8FFC7D4DC1AE48E3671A73269C5EDAE5A645C430E273F4256412ABC761A +A67E87E0EEC49EF4380F8478AC2E100A4183DD84D1112C472FD6B7E4A910BBFF +880DA1EA898AF6E8CEC184D9B914C28B8305EFC8A101E55C1953C89983045C36 +D077C5776C3C365E26A920000A74813E3F4743A636133CFD94EB2F96566A7577 +750F9689DB2A77F6474EDB811394BFD4E0C2459A41B7B68131A2F6EB18372697 +339B8418BECD567E7CF7F6B6C2EBFCD23670C2EA9AD381061D1BEC0452DB0321 +89B0AB66CD300E29B33DFC62BAD4CDFBA974B28F21EA167755E6FBE16360612C +5640C74BCD2DE4833AE216053B73E6914C77377F6B2A9BEE25D2E41930970940 +4A94A8DEAFC7D7C6BA66FB10F475DD3D2A91F3B09A560FDE6E04161AA587D1A3 +CE17F73FEBD2D49AD752C136A06B3CBDDAA144981AA7E8203C3AB76995B34582 +361FC34D3C707E9D8917E0C3B5E2D9B7DD16FEA32F42A23D02909502017A157E +6D94CC34A4E8E367C1270AEA425CE44CEEFE419463BEA73047F6DE8C47422EF4 +0067D9667B6B457C7B16248F4D9AF8231B9E1B342322380FFCD0D3A7DE1BC0BD +0D3E8C06202EA5D5079469A1451C7F3AB46DEB1C3C65329A5E1F9BF8A6523288 +BA5D655B35F6CF412D866F182BA2802A14BF1E917FFE1141029B019E1F4420E4 +70A4A1147FCACC028AB14A619D3F3CB7A34C2383FC20D111889DA77F60AC58AC +F6B8CA68BFE8C81641CB473652735398ABF7DB6A58B5781AC2B95835E230BDC1 +64EEF942AAE9A54487A84A1FE082CACED06444B81008BBA78F3B6FFADF7E0A96 +DB4B09893823A691E353F23C48DBD76C5FD3BC53287DB89675646D14B1199B52 +62844A62C9257FBE5A611A2B7DDBCF91776CC36F4326584613D087364922BE5B +BBE4A52B49E42188373EFC9207FCBE11254735D5800C0FE514217BF774F7CC3F +98BA99A20C3F1F5ED1FB9FE91CFCA4C46E119A9029496B0007976A822C230694 +7F3C88511CE739512C2C62D3D5FCECED024F5DC86C3CEC0E81C16BF3DAAA2EA9 +F954541B305F70A7C313ADFE9B158EE4BE7E8982198B823FB11116D08D7F6B28 +EB7617650A5FC206E4BDDF4A150B666F1B53F623B5F0641EA50A82EE0D607326 +C2268E14F70723CB5536690FBA6E9D6DA27D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +{restore}if +%%EndFont +%%BeginFont: CMR9 +%!PS-AdobeFont-1.0: CMR9 003.002 +%%Title: CMR9 +%Version: 003.002 +%%CreationDate: Mon Jul 13 16:17:00 2009 +%%Creator: David M. Jones +%Copyright: Copyright (c) 1997, 2009 American Mathematical Society +%Copyright: (<http://www.ams.org>), with Reserved Font Name CMR9. +% This Font Software is licensed under the SIL Open Font License, Version 1.1. +% This license is in the accompanying file OFL.txt, and is also +% available with a FAQ at: http://scripts.sil.org/OFL. +%%EndComments +FontDirectory/CMR9 known{/CMR9 findfont dup/UniqueID known{dup +/UniqueID get 5000792 eq exch/FontType get 1 eq and}{pop false}ifelse +{save true}{false}ifelse}{false}ifelse +11 dict begin +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def +/FontName /CMR9 def +/FontBBox {-39 -250 1036 750 }readonly def +/UniqueID 5000792 def +/PaintType 0 def +/FontInfo 9 dict dup begin +/version (003.002) readonly def +/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMR9.) readonly def +/FullName (CMR9) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +end readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 12 /fi put +dup 44 /comma put +dup 45 /hyphen put +dup 46 /period put +dup 49 /one put +dup 50 /two put +dup 51 /three put +dup 52 /four put +dup 53 /five put +dup 58 /colon put +dup 69 /E put +dup 72 /H put +dup 73 /I put +dup 84 /T put +dup 86 /V put +dup 88 /X put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 102 /f put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 113 /q put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +dup 118 /v put +dup 119 /w put +dup 120 /x put +dup 121 /y put +readonly def +currentdict end +currentfile eexec +D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA +0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 +51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 +7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 +E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 +0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 +C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9AF72336CC4AD340 +15A449513D5F74BFB9A68ABC471020464E3E6E33008238B123DEDE18557D712E +ED5223722892A4DAC477120B8C9F3FE3FD334EACD3E8AABDC3C967C61FF003B4 +B10C56D6A490CE9594D57A2D431B9E5E10FE3D8832E227A7087611431ABCD029 +85F4865E17E17F8CFBD2CADC97E0A8820E3ACEC873F31464466A9545E967E53C +DBDDB8478E69063FBB891566BAF88B7660A4405B16834761F041CCF7650AF955 +F9E853AA9F5F4382E1FE7D0C5BB4023818A2383F91249D48CE021250EC9EEB1D +2835E18FB73026250B32A8849067D5E2258797C917F998F2D4121D96560C5FB5 +B5D3471216639A8671B6DFAC5E3554EC36D9A72518525A795590C74DD70DA3A7 +78BFC43E51D6F2BA52F17D4DD00D389D3983EC54912AFF73684A8A7E345537B7 +E62361C04A47859DA084BC72EA53512DC54132EB2EE671793603015652EAFDE3 +41C4B6B679BD60AEC5153EA0D2200CB1D097DAD770F5F31E6FC475A225995277 +B867B731D5401E2D02B85BA85158C80FF7E2BBCC42B98AC867E67D25DB656072 +55A0D32AB7AA483A5A9686CEA4E2B3031D90D84DB3E2DEE7706C91BA81CB8DAA +700E5F61E07D6998C9552C81B66FD10A10033D49EF3BCB0FF22ED0A3737523C9 +8F851C61C4BF8A213BF6EC70C956AE48B5BD276CC0437C72BF6515B10739919A +F00F6ADD2798CB211668842349171A5AEB0664D2C44397E55A4A9EBDF54A3EF4 +FBBCDAD9DAEF4B0CAEF7112FA828F2F8D9F633D37E5516AB5ECEA87342EF8DC4 +3A50548490F5BC9A8A1F98AC7AEAD9D913BFA10CA86D73AEB5BACC1FEEFDCC15 +B3655522CCA2C772E902FAB2A6FC153597D52763EB44AB7489FF061F7F58E8F2 +AEAAF4D17F36CBFC00D3C653F335D14240C87DB4339DA9D30A5BD1F502BC9013 +461B9DB2FBEEC01BB18990439A0E9CA6576BC9CF6B1A3DB9386C4A5D4AA6A5DC +CFA45FB75F22E10ECB72565DB441A194902C91427B4F676E531C661F7A2C3C85 +CD534D1C89B6779B2EDC8E44667B992C20C70B663BFBF680A6CF4383EB7CA26C +4D1F06B5EF4025BBE65795F1EDB5CCB97050872D6C07BC2974F905ACDB7A765F +291365D6C8152153E7F017A25FB4476C60FD9EAF9A121633DBEAC32F62850223 +D6418566AB350F90F4B35F19598478F76B63E347D4C61E203D4DB8ECB9889181 +C387F4B663A502C638761D2782BB96EAC81A0108D7BD6938F67FEBB69218D115 +D8E89CFABCE15C6ACC7FEB983332A51A6A73CF4E341574F366713D7FB29956D9 +9BF238A87483D37E526A2EA2F101EDD34E34CB92730DCA7235AA0027189BE405 +2DAB4AA021A30C28B26C50808E1E965C02F6212EC7C72F5683339425A7739380 +A422E6191ED8453AF0CAAA424AE44DFA7CC5C2F6EAA8D73A5101D8E9517DBCFB +2858D0E8ECB7DC430EF23A9E4428CB7DED8D035D6050251AC101A2D0E884721E +2F21E573F948048BB8FF888911C508CC198BD750083B339500C426AFCD5634A6 +AAAC1C7E91249667B231BBFC64B4317192FE07FE9DA0DDB5E517D097AAE46577 +9555F29D45C67CDE9812CAD03F220B20519F2FF32DCA56A554D4296FE2D1F3FB +B209B5270E0E695EA5A0EF1144957CE045881AEB8D05D72CE57F4D34617AED67 +0D3AF0472CD8D60933651626550366E300E72A9C89ACD475C2E2ED9BD44B472D +9DAFE943F8E02A6DC38E447EED964624C37C3130E48211CA279BB6A0BD59466B +42F3D89B5746F29E084E22CF58395AF0F29E55113F3A3F2F52CB3A6DF3D026D0 +C81754B8E2E4A15F6943BE9D0087D5166060734FD07C4C57D7C7D90E8C9C1F35 +623CEEE3ABAE75E1A18A1E3B50B7266BD2D8E812CFEB4A46B856885B185640D6 +B9C22179551002B94282F57FB433B7FF157D2F0D240836B72AF4A331668AE5D4 +E6B85415F4E8B9D2F9AF90FAFAA0A3866DF417CA5A31348CF9B41B8F5F4D2F97 +CCF7ADE851B5E2E2F6E319AAF5792EBB9DA2C6AA8B73D889F3CDAA42932CDA7D +07A7E59183CD89520DDFC36E5D513BFD8AD0886046585F29B4D7F42CC0C27AA7 +53915AB1167D292FE91957E94A57FEE2D49C20C9070ECD736BDEE0F046E60350 +EA539DC298156A4E0D019E7D481FDDA6861E20678516AB80ABEC1F09B126BCB9 +52E8272A06BB6DD87ACFC423B4A4FC9A3DC8DCAEBB807C5F748F1FF8B17B8B88 +F426206BF1B7B7D239D26BC3CF0776C467A98CFBBCA5FB6145D5900137ED19DC +D002F10704AA680EC753C22E29AAB15712EF22AF73D80820A1EEE953463D4EA3 +81FAF99518D4FD0F862A324FC44C4B9542A92C5B60CC983CC8F647CE5BDB4D6D +B92B380E0E5F7208A9CD91FA9A469548162C761C1BA05AC9D60B766764D821B6 +B4E17F56CE455F06EA1EE2D38FE47581746C4C5FBA63AEE2B58E877D1A8FA83A +31C972D53B64E92EEEA147426A92CFBF76FC614119C6E9C6476FD6A069C803BF +E949FBE50B5AB1F1463F9747E8D353F7BBD991C4F90F920BC9407D8E24720293 +846D052214E60390C3CB926D38C83AF697425D80C2B4FC4706615B905516B733 +46ACA325CEA68FB21B2D17CF0B68BA4DF249368625CF83441EDBF2B86C957C1E +44CD722BD2537CE84FBA07EC7AE15C840041B9F7F3040072E6084CD55B301C08 +A64A53BD4D3DC30DCAC6C152F316ABC59B8EE978793EBD568849DCC2A75A495A +BC83470D503F8E389F54B4A4A31624E83C601B43AC1E52CB811FAA7CA6B644A5 +1AE0BFD4FC774C9C9DFC2769ABFA9C83F900BE2DD4010416053A1D4874E6ECF4 +D86E44B4CAB15D53E5630C144B0C15B58DAAD785BA298B1893D1B09BA5D40344 +6678FD2D17FF6674433C976D6DAC659175CED26139967C9B2B9CFFD78FC2570A +E5142141C2888DBF2DC8503F9137CE7CB21A1EBC2D65BF33FCEFBC85C9CB736E +24E8595CE934AB032CC70BD6A3B0F3BDBFBBE185512FDB7BE3D4A6620478453E +75D044BF770B44C9741E31985E6DAF5A318D7BED12B02A4BCFE60D25EF12843D +EFC9BAE2A3F2EFAD66D7858E83EB46BB09D2FF8AE9C43844A7001C86ED97AF51 +C511E3A89A1BE349FF5215D1A57843EF51456B9838133846F19BE79AAA5C1AB0 +5F400E5E8E7B0BF96EFCA3B8F0894BE589F2C9FB6C97BD16D38F0A237CD4F034 +099C41F85C7E2C7BEC8E02C4F327306A53B4B48B26A8926670CEEF96F6DF2281 +7C2DAD99EF8B81BBB777227C2475AE7400DC393D9C0445E925DB1E955950F7AE +53E9AC4306794239346A419F7B5DF4168382EF5956B81F83BD4BB7635B3BCC84 +7D84D05AEDC02D14675D777CD19B08124001A4F4EA96990D96000C082A12F00F +7FEF793A7FA69D56D3A38D012168C5458B667190AFE80E02C816CAFF0A71953C +D80B085CD286027E2FDBB05452AA762FD7C813B2E19A79C74190E04E746C4933 +CE1E300CAF5DD53B08110509BDA404EF07FA1BC5224BF1205DE8E0C3276A13DD +866675103B960C5F36644F96B4FAC16F5D6E91F74629B318FCCC8E8CB13EB76B +B0B7B90718D913A52A04732EA3667674994A325A7973C601A7DDD50F658E0826 +ACB8E53D4914B0274AED98D7BC3B2B7F9D48A7ECC2F8ABEE05CF2C4F2B90360B +B7DF779EAF3E103D1D83EDBE32DDA873768D8C37DC10A5354A94B4153049AD64 +FF3E0BB51AB91D7C0B4134D8731CD0270DAAF19BED9EAD800A14B65B68EEE89B +40DD624111670DDC7C030DEFE0D1B96420E249332445C155BA96231C88E70643 +D526BDF3CA1E05FEE72CE2B881CFC01ED780C10E89F0828AD55FE29043BC56E8 +2750A6DD15AADD54492F6092618F4CC6A31766B17FC60766D18C307EFC9BB787 +39047DAD6B38419EFBA46B4E2C932F97451FE78AD75FA90DE409FC6DD46585D2 +1941F5ED47A8FBAEF5A917A240959E8D9F9917DEA3247D9CAE6BF7A88DB4C4A4 +F9F5A6DCE542420A032FF3392FE0F3357B51F884D6181583A554F75B1DF192E9 +253CC828FF06B0D992D5316435980B044BB191508C7C45CD90F797F88856424B +14A5707459C50EDCF3E3D8D1667AAA83015405354CE744C66D9A5728F29E0085 +6DBF740717FA0799E3BCC4ED7841588B496A5E549B953A7FD288B4A045DB611E +E3B2F35963FF18ACCB1C968BEEA2CBF52B3999AAF89A05320BB2E97F52CFE06B +9F10E3A79865A3059A957F97972D80ADF678A36E2B586C101FC6AFA4D137C13E +EE7102C9B8EF78CB057F8B7476F146E8FF5C897FD5503DD198128CFF7B5FB339 +FAD0AF0EA967F77B07B367A4AC9F668F8BED99B98E87FAC750EE045602D76C3F +289FC9D97694C96AAC0AD1BD3FA94DF2CBCEA24B40F47B9B59E54EECEE7AC4C3 +A3F5D19160E4C1EA830D57FBE10D8D46AC5CA0260F22FAA45236F0F542BEA9C5 +5A88F878F68B36114E0573900C65E305462B22A3429A17C7A567694414DDDA46 +5F30542B8FD4F00F6C295B2E8D3A986B953D96822DB2ECD48E8BB1763434E652 +152EF3717F5E7FA10FF0B01D9F64E22C5DBD7254629658887BACEC0ABDE972EE +67299FB84A05B3EFE22B6976DB4CCA384232DDAE38C31623A4E39EA2E82C1EA3 +BBB68F1A7DBF405DEC37CB7203A895C36A44BD2D63F45B3888AF91D37B510A59 +3C921BB44DA620892AD87B665F69F6FA510B071ECC403CB2BE2F54B3969C9E88 +713244BC97C1466DA8216DA7600C221E7E7EF5C789D2E12B36422023A03E11BF +2790FD6062FE6BF62F5010A92F0A104B76E255A0975E04F6F20F760881BDA7F5 +D834D1D328B6EC19AA7D5E5678A84C74C82553DBE8BB5765E84F5A8789032143 +6020940B4B8D45FC3433D356E28C25F42D0C19F911213D85951B2B00D01B77BB +A4C72E964F9D95422BEDE582A05CD52E03D28A996E6CC8FCD910CBAB728073F9 +F9FAEED5470FFA55930447C5BA816F826F983D53EC9941EC8364B3060FD74C95 +26D4F5CA753B574FD2FA4D1D333785241D8741B79E628BC852FDC35478C5ED9A +C1BE88C5EE7302816E65C12B58EA16FEDD4672EB3E24B6EDAD5DCE263BA8A970 +350B651E5A9F3C281D85BC3F44EADD0D93402E36489BA5185E7D388974B0B700 +70575188BB610CCA20F081E2CBDA13DCC6F72567962ADB342E02C1E763B673C5 +F7384E24C6E1730A3A790D690A2103AEF88E0C1D4480DC9B25E5C8C9E1919C95 +F83320179B4C7C4A26D559BFB24D7D596FB73758C9990C451E77FCDDD17763B8 +9C30A9534E3CB6680D3D419D4B70B0B0A0D160FCCDE169714E373F65B7144CC2 +DB9A44E041211E1517D3148E65A2486CBE5E74E625261CCF65392FB4F3091473 +F9E8DF327D59A58558E5C9F7190DB577D5DC658F5E36258291C708B3D224653D +064BB6079F91293FC733710893AD1C96169B30CBFE4E9D52E7EFAE4AFEE68FEF +1AFD5E7E9DFCE8DE332B0FDC0514F9B3090AC85BBFB527FD8034DD33E9576325 +A8769AE09AF1BA792447DDD932B98FC9486B39E0B04DDB3EFB7A30DA0940B33E +E27490E0E841E87B1C90E5248A91742ABEDC10F43A8AF0F9C5B4A4930B1AADAF +01874B9AC3B8D0DBECCDA6CD7E96471FAA15CB7F8A599C5746327CE392224C3C +40BD60AF97BCA6FF6FCAB2FEA114D7300B89E91C3BC92D5B3E2C83BB37992D8C +72F661EFD0AA034C738C019DFB79BF40651A1A34BC1EB9F5AAF58F8B3DA32645 +24AFF8636486F08BC21533B5FF7391B0679A78DFDCB03DAF6BB7475A1D51DAC1 +EE4BE9B986655D1FDB6936445EF99B58B303FE79F11275EEA96A9F6808EA8775 +D873D1052FAC93769789C700F20EB2ED6D15676F6E563A769CA9298E463FC311 +83281483B1C953370D196727A6A0E66D32D9480AB1B6DCA77868C1A2D5DB6483 +5F31EB6B18EEFEF1CDC31533E69B0AFC6B30FC9912DC89BAAEEADC30BE14F448 +1A6B70D36A5D9B01799BEEA686066114910842D022EB464A9A1E8F0A5628BA69 +AA9A1925CCADD44703BC67A89F3B48E4680726DC4360274185CF3C8AB747A8FC +4B928AD62B092EFE48B01E33ED756DB696171FDB775396BBA138E056F71EDAE3 +7A1E4CC272B8418114B0E81DE0BC43DB3C133167344488820A92DF10FFA26FB9 +65FCA2C87D302E956DE6B4FE145145440C83DB43A68F8B29A592B127BDF49063 +B7F11E155CD4CAE305525BEA56B7C412A6260426407BD892A3F2B444AC3421E6 +FB6E6425EB5C3053C5644666B80405530FA0012B54557327C98E0F4F064099A6 +4ACAAFC1870359C1B6FBE7606BB8A26026AE20C212210449905E628AF1B20490 +8CE908B7EF3E3DB551C85AEB0F7FEB6A8D215B97998E5DD9C7CCFB2A9402B8B6 +1770D4023777D4B45A73F471355353412C51D4CE71FAD1E0AFBD87B5F86307F3 +10D0B94F1194EFFB64AD5DA54A4200490F609CA8B912E149F8217ABB1E9EBB3B +C4470E7365CF5E1E761AA1945044B225BD53D142F6588C50E0644740F7DD55E4 +8F73201E5354A8BC78339211AFC4935F44701FBA043AAC4BA4698E9D7700029A +C79F992F62627C91EB855F64C4B251718FDA71EDAF082A0C7B00550949D617A0 +7071FB14F05620CCF2180941341D8E60FC88823438FD728A4042AFA8B853107F +852F631518B61B234565291B5D5B89DA818DEE3AE3B68A2869DFA63255CC882C +3B16BBA08FCE3632E57FF7A07F857A1F0FDCADAB39D77960BD827CCC8661A997 +648BF5BEBC0FD2286C2A112A8DEB9CCB6330A049170D5D68EEEEA011D3EF3EBD +855236B9380087CBBB6BE24191F728B7EAC5B50F7A547AA0989B7C7D3437DBCE +1669341264E290646F2C8C5A3ACAAC7CB63DC692FAAE13E9B40E8BD39FE16A0C +1660CE66872D061056C04DDDC265C024BEF8B7E3C3AEE76FE5C9702002C28BE0 +B180295EE00E567FA2E5CD1638226D24A7C732E1BD8103B476EF5702768689C7 +D4FCD47F2AB94A2B1FBAE6ABF87B09E7713C773FB65CA83F7318035B332B9F99 +24A2C8897527021321D003AAD7C273E4BFA2710B9BB26C2CFD3D9A5D7ED1096C +552D50028AE2476FCD6D12A5D0A897521313ED1A3A8456A70C16EAA50A3E6733 +6DC89FEC56AB54A579EF264377A103939D5EE00A90B4F2206D0023AF9491FBE0 +800C6540FC945199E20E945F46CEEA2E885F6800B9DF042BCEF4291A4B1A62C8 +6A7ACFF872B25FA3AE69E0093F3D0FF13A3313430C06F1AF94D500431566F659 +E8C859A5F80F5BD2E85C8E32603D3745628E8FE6FBC50FA68F9C3811A2BEFEA4 +5852CAE2AE5AAD3230ED050593BAD0A9581EB7B327C6916B8FC348F4C23E6FA2 +00FA28AAACCB3091C1D83F7BB88672A53A2EA3B8C7C24374E400C57F0F01019F +E52D5C47F389D4C9AF126F4080F9AB8D1C8F470932BBECCEC72A9796F6E965A4 +82057DDB43D68298A00880D4C2E2496F26F015FD83C5549215753459310339B7 +6B2961EEEE74DA31FEC8E2BDDA42D4080A32372AC372524BDDA580EF6634ACE3 +128C69D04D890DCA337212B109585C665AA83EFE47D5BABC2627A86EAD11BF7D +744176652C7F9497785A7A06A994ED8414BBE8B26E74D48CB83FA24AAFBDD507 +84A90195EA3D77BCE8C2BEDDD1DC52E8164DF15D65B916EBDF3A8A76849653DF +AE3CAF9561AF3B705F75B9E5DFD6758DB65A2FD54683759912E0D0035CFBCD86 +5D239CDECAAD9AE5D95377E0D3F61C2AB7EC99ED28D2B4A7B6004A566B43CECF +7E35419EBC2A47CC76393F4778DA801EA75B4C1FC38062AA77CC4EF0E6CB0C81 +9A797C01F89BB58A957D3DAE33E4256B1F5A7D66C8989C512DA066D6DC771548 +F2DA3B490834E7B4CECD9293A5DD581A3171DB1C41F348377A602A2DDB80C0CD +7B960942967BF3983FCE91203F8C465362CA8E91B3C759943797C24CC83176CE +2D044CC07FCD6CF9DD7FCE413A0B2CF777529685866C7855509CD57489F07108 +D995887AEA9D20B3CDA77BCA95B6F655020E2964AD82AD77382DFF4903C680FB +2C666FA0A35C4C85E87189C909F4B6A0C788077270ED2C2B0D838488F9DAC159 +7864727A4F21FDF43764C2E9B8BA9A8416FCC45247C82FE6FAEBCE13C1E3A49E +269A4690D0AE927362CA09840E5D802CFE2BD403D853D4FF9DB92D17AF722C95 +271E384878E4B6991DB3A90422F7D0D4A260E131BAD83120E618BBA0C7F201C3 +E6822BF981212D1462A8E8C28005291E4D768BAC7378E124713CA18F365A18DF +7FC981026EA47CEE8FFB0EFA469E23050DFF752ED042F0A9F8DD7CBEBE018E1F +056476FC098BE6A639F16CF415B773153D9615BED1251E4EE61363C0F51AD30F +D0099419E94B1EAAB833E4E31084024D0E7C946E83F574F370790FF713D5F12B +0141EE5B103939B88DDEA6D3A49A83886DB260065E423B426EFCAB1270E1C0F3 +A18E54817F7BDD3895DF79E9BE619F51924D7A42202DCE9AB3649C01936660D3 +CB62D4FB61BA328951941B644D69538C3D023168CD87F7D7697CCD5020446B3C +96FF9C99042164C633B9FF63BCB643226DE34650381E96D9477ED1CB332A3DB4 +2F3178303056364CE4F7AC5252F4EF69354E4B5A295D537FA83152FAC3669043 +970D18A18FA4ED1DFCBFD24365A1D19F3C5BBA92F55C6ADAA3B2B49B9C3EE3E0 +6D9F9888A90D060D77FBD0CA42F8B32E1766E71797F3EFD461A0076446786FC2 +92FB5760024DBE28098AAB2192AFF759FF2CC06304B71259AFD701D91D6CF5DC +1E2B1CEDDD6218A5CE4C089430B736FD3AA515B52633F76FC5EEB74856E83283 +84B4089802A732F224E57628117A428111B305CF8B23942378CC6217567E4235 +0C815DD3E183EEF39AED664EF1FB9E9BAD01368259709F26CC0B07673F44DA2E +1E7D41D889A9253E4930B2DFDB4E6C7FF05760B5DDC47CBF651A51CFCF2A2142 +AFCE68CF821605ABD7A734AFAC26C19DB24FCFDC97294C2C4256EA9FFD60532D +8BD22D850B8EB9E34C0EA2AE82D3DB12EC9C4A0C28E33ED8B155CED74370BB57 +70529AD5C6536228FCE80FD44B49B8059ACFE6DABCC6E1669788509B442DD84B +8E4AEC46F111F36491B206ED15DDBBAEEBE2A22F70C2FF03BC70A3463989ED53 +83D95E1F84E26AF5F6F841665A4FD1B019D2905524EDD4D0BC7169E507127649 +1B79153F8DF73FD49590C50730CFB259E34814DC29676637FFFEAA1E8BA1CF11 +32B3D87F43426B64371276F5CB3B235FBD689E5FDC0BDAFBB97E2699B7B1F51B +F6EEF56F77A6A2CCDB482604F556EE59B975BB4890B2029F4CDAF832B0662D9E +DBF8D21C482A04429DCD7338CCDFCC0B6C5359DBA150FC69E166E6A53CFAB7AF +619DF3FFB8CF5ED5C2907252FDC0F4955610BCB009883036F060449A1B19DDD3 +634F5805FED544B69EE9B0AE2BB4EB5C1F2818C30350872D90478F13CAA3A175 +F90BDE98CB15B4BAA4E3B7075CA47ECFE9EC94D5D5D84D40A1B1D6E2F900365B +83A6FBC06EBEF110CAB8928AD9CD5D7B8B80B8DE0773C917B3CAFF1F3287EE5C +4D96208EB19A39BC8F6F080FB260EBAC835F55317E4131800E99BD0B32DA1FC1 +70284FA71225B2BDB0FAB479D9B166D442B6640CE02C62C4CE72A35BFF14900D +564658F0A4ACFB0CFC3F7D2668AC317CC099EEBD1FA0531017D74B47E173553F +7727CAB5EA16F2831470D5B7A0906CD92658FEFE5A0ADC08552CA630C66C560F +F935F7987487ECF74CFA1CC3A21E456DB8A5216E4DB5EC85E5830B36D5468803 +6EE18D07609C02ED2E423C33B97B28C87C6040F4E6BEE05796BAC74FA8C066B5 +436D54BDB3E493F59FC8885EAD2CAB26E7035783057669FA05E97732D5F6BE7F +CCC5B7F4B697EC12999BBAB002791AEE65600A3C01C8FEFB74E98FCA5E9E36B2 +E49E4ABDB8B129EF6C93EE410E968D5EE1E5EC84A3F32305BAD602DDF9437D60 +03214A0D3351ECD6F4ACF057AFECCA827F424DE94980CC5FD17DBCAE3222218C +F679FCB30460FA4E858958555F5218EBA0BE32451BE4CBA35F7C9D751B6BF707 +E972BD5CF46386D697F7CBDAC0B2071A44CAF624CFAB5C7531FF7D73198BC5AE +D82A701376DCB4274936BDBC3BD19ED73BA77501C8242B0046C5312A303E2198 +96D29620BF292E814B9ED83A87FAD8959F0417939AFE2F8845FE0BA0A9989562 +B5B615D6F36D91BACA10C9F45D7C3910A3CECD86D600B6DF886DC3CF5B39AF59 +E36FE4E410392C9CDAA87F03FCD11FB6223C0FEE6D662B04536E8AD65C1254E3 +5A19BAD8513454F32331E759CBC124FE9E1008266412FEE1648B1160A6314F9B +47F7B91FFFF8CD31456565F6AFB681375D5FA0AC5790FCF3A5755BB958B651C3 +11A83CBCB8E2FC5BC9D8A59BDD06541BDAB1BE76B3FD97B4A7197E0FFB1B640E +D721F2FC9337AC26BBB0E45C46AFAA314B0E25DFF9AAA29F60CB6FCC2E67D0E1 +4C1CF35FCFCE344FB20D440FAC441FF8B26151B2917D2BEE72D46EE5482B256B +D5328509147B8FBF25EE397B651B556BCA4DA6F2E8560222A97B2EEB8DC3AB2D +1241467D6F903485AE77B72EA9F5532BA0033A14003DF2D73C6A10CED11F7E57 +DE14C95389CC9E461E1FA37CED4B65C99393D91D828D316BB3DD8F1B6C8C56EA +ECF797BD0D6F44120F3575AD8CF7D678D9916169DA9F1202F43282CFA34E0120 +A62C24A4965CF785CB7B6BB7958771662ACB1803A6969FF2287177623FDC4A64 +6DBBDB9D53C7E7BC530A6352C2359C1012CE330874226D75263A29D34EF7C6E9 +E56C720B4A9F3035A3498F403F122D2AF80B3537637C612EA41BCDD5C9DB5959 +77208870D8643672744EA706A62E0F53322EEE450FD834A7B5BB9EE2028F2B58 +4449AD9D3BB7D518DD0E16CC127046046DAC7C90915FFE332D68EC795A00E892 +9A4D829EEF2783476533D0ABE9FC00E92273701360D92E2D8DCF73407923ED50 +F09C1ECFCB5167E4FDB351F21C992EEDBB3F759D7893E67EE3F0B0AD27C22503 +8D154E4656F94CC6AFC011DB6A3DDD35F70132701BF491690BCFC0744A38275F +9071284BB8B2ACC2214FCC5F1F47B0E23D8A3A14BF9D769174192002FED503CE +76D41BD8DD4F4848538809124ACB478D62FC835E7B0F9F013CD7AA3726FFD602 +A277E2E3F14A3965A17A5D4D33244CE8CD73DEF41CEC508A5C2D495F4D59AFFE +3DD3B8F03E08648EFBB86C2FFF1CA81E59FBB95C742A6186D36BD2542942AA0B +F0AA77D6961D2FBE49EB4D96FDF73B2AD20E47067524ACF68ACD0FB98E735866 +6B6D95BEDCF14C80D2EAEEA5EAC08F610CDAF5792893B4528161E2C9BA02A14A +45BA7318088C962D8F83A096E3EDCE9DE8291CD606E8F0ACF4E735A7063E9D19 +5B968471FDA0C2F9665EAA77FDD0DB0972C27EB79C70648B9ABEB17C78F5BEA2 +B340DE91393D94C53BE1F14CE900F048915D4680B890963A23BB5C800E337F57 +377759DE9377556429120243752064DE70F565A3B8D8D74CEB8923BFEE5525BE +102F05442F7C2F4D45A46784BE9BDFD1AA3EDA2B7E46572872BA4CC4501D0F46 +A182F9775F1EE2991CBFE290CD5E39A79895D7ED557E0E23A70117DC23D47D04 +23CA9D1601B759952FF910C8E140F349F4D2807339BA0658E77DC1C67AD9C156 +316940293F225C9B5B62314E1C83F92BFF8AEB45A9C04441BEB0849B6CBB6066 +65C0F6E70494C86B2213B82AF766EFD17E62C5361EB6588177E291D0F8C62A16 +8377836C8A64B5ED8007EDA143A81830134AE19DE0493B53305FB68D254CEA16 +E4AC98C13FE473C58C8081F9E507675A7194EF82C2B7961FC49DBA6673C7EF54 +F9507FC208A3A0B9FF4E1E0A3B7106463659F1EA6D536CE2454CD97A16696280 +0DDAAED71FF66B64A7EF9D4A06D0606D153F00BAC17DF7453972AF36A9A548C2 +DCCD06DF7B30520C997EDE83AEF0B3E33AAB5F5A1D8CFC196A5233B33B4AA8F5 +69EB4D9D93E350EACA5E2BF58DB75E1CAD5D234ACDADBF12DB0FEA6B9F4F074B +D464EE9E4610F716DB761639569C1B114D89326A96A5EAE5C035240FF56FBE98 +C50ABC3B51D0B6F2A68A12A16C9EE9BBA04A2B4B7DFCAAD955DAEF48CA5210E7 +C415A7C3C8E07554E26120622D85B96084B1BD28EE71B1ADFA50385DA2BBF511 +469764A3C801675F38981960A27798757B286C745123ED30E5FE80B69F34BFAB +C75A3D92A552821A2DE47F53C5A0863CB8F60CE12D3F85136D4F0396548B225D +78C3112D8EC2F884DDECAD5C8E9DEBB7E01E55078B3B2F4D046A5CBEF678C10E +7D430D1F164A19992A554540AFD5C8917D5F853A531B89D00506EEBC5385733B +C3311FB5309B8C1FF683A4C639E2E599FD1BB1335FB99E71911D1E25B342CC56 +946BE1A45FC5D4A0545327F52527A53AF90C853DEEE4FDBABF7AA8A5E39615CF +ABD1CE72F60173AA6E1BF7B3BA5165616442AEF6F839B0511A3C6C50920574AE +0D92E1E3D702F4256F73CC1E4BCEAFA5914B4A8DCEE327CE9C6D45B1DFBC252D +C54040FDEEA9364D6822A6798EEEAD1A5F469B9877082D321C9F6BE9B8D20042 +E267A129D30ADC64A9BC0673BE4A23570A3EA396F07DC54E4BA7B3E84D555171 +33D499CA5CDA191E9A0A094995160BD2D2B59D6071F00CC7CBA5B2BEEBC284CB +D29744E360D8F9A41A1E0476BF25C5DDDAA1BF5EB9095062688B73EB66222C0F +44AA7BAD1F26B3FD30B9981FDCFB6549493E7B494BB0BBD7826C23095FEB87A0 +0A74D49A9688C29DAB21D32C3CEFCF46A38215F6CCB23CEA21AA8CF599C651E2 +7AF4B67C3F17B052BBC06AA6038111E4AA0765B4464051A74EEA4DB70BF14B40 +FCA95228909BB7FE9F90B5A5D4CA465C5C9924A7F06BC5BC43486464DF0B1BA1 +D52A4F390BDA3CF2F7898E9DB58CB98A9B151ED5387CE5848EC497C61D072EC4 +8D5FA825E7480C063A17420F0414A2F666F2A868564439E000DE89DA8501C759 +63183AE8E7577A6C163CF145A0243349E61B96D1A6121361EDE749D9FA2D8270 +72BDA70435FE0BEDB2D5F290842B8E7BD56B4B91AFF3F4853B9DBDAF3F1B5FB8 +75DD8A2464C82B46C3FBDCFF3A54460275BBBAFED4C163CAF70044879A3068D2 +6A272EE3E379ED00D7481AEC7571FA1AAADB1ABE6F46042F5CF2BB8D9E58FA3C +4E5943B0EE8AAC87913AC1A9531F1BBE3A3DDC8B156D61C3681C014DF910B806 +8921AD41FDCBB90E1B86B8450339B0214C6A0B9457280FF745F2B7DB1BE176BD +67E4FBA23C53ACF8D95276968CF1F106119C0FFFE7274BB2F20E06BDE3C04B77 +6FAD50A4F9AA371D0993F72BAE8794CADE9606D5F417D2DC807B6AA2AA2B10E7 +E25AB7BA3587EDAAE4069F8450590280024D2B81D239ECAC5456965DB9F3A939 +733C9E978F1456F0FDC64D886FAEE31E9F62964840A96972A1387600AADB271D +30B93615DCD8B639F81A687C0CA41254439A567CC65CC4B0B774A225FD784704 +7BAA107DA3E7C20DFF37B99B0F5721D793487589526BC08905CFDB85B62CDE82 +2FEA6A0F6E948DF73EEF8FA0F6F29E789F66A1E0566020543278540AF1B4361B +A961865D1022965B49E438C3F9BC685323A2A871E9B7AFDD8A2EB3AB1DFD5BE6 +9FECCF68FDDB761D7B6689122219105C1D8E1D5BC94024E964FE1176C6ABA0DA +48E74C7015FC77B449324B9878D319D1F1D21F9F02BC95A88E02EA5667B8E830 +0602469858B496505CD9296F388A71517385EA7B452B2C6E93BEF2BECF10C8E1 +48B3FC7CEE4A9F477C15780EE71AF93FAB17BF5BD6CDCE2E2DA8780A8409DD9A +D7BAFC72237AC873661A7042EE2B039E92D9B44A38260B071A46A0999BF1041A +4DCB3C05055F52A57FC7A8BE53DE835B76BB8A6EE7830E549EFC04DE2F3EE026 +38701AD0E574275655153583405C3C1020442D267B083B59AA35DCBAAA3A0E4E +7E6DE7C103BF73224BDFAE6036A0574151E6431A35DA4ADC35316EAE06E000D3 +91FA7F8F21FE72B6EFBF41BEE012D23C634514A5FF1CD272A0EF4B9B647734E1 +AF50C61348A99C9B94C12A7DA8E711E443025CF4D21ADA5B74696B9766253DEA +96BC70B99CDAA427566E3CEDDA1AF905E627D5480B08B1B48EDFACE359ECF4E4 +261B86B2B05172F088135E7D13731E9D5455B8FA0FB97DF030951801D6A7218D +7D7AA38715DD62430FFF595826EA5985360BEDC65F0CDCEB890F0CCA08193607 +166078E612F83F7AC14156E825C62089D3EFAD3B5A4179D998BF8B7C2C70B1F0 +33BF461B1A4207471A8BE6A12580BC8223B359DA5A761FA4C88064E17D22DC59 +547D891DAD7315E16B7AE84CD7CDB1F4D9B3889752C5E68B81AC0EB288A088C6 +B17ABBDF5E19BA911AE09551737AB8D3FF959C1E15EE3A7C0CB48DE2B50F6CE0 +7549957D9E2F3888C29B62E336EFB8F3A5652A1C9F2DC1679C407793C4A863AC +5F99AC9BD056C7EB3AD743B511D89F8C6558622D67261F5DE0C52CF6C2F36977 +AA2A9A6DFD45A90F001C377EA4E38724869190A4F01DCE1D7A890D058395B528 +1732B4F73F734176F9AC5DB5C520D99D72235125E9E08FCA56B61C2C5984D632 +294DB55B28E48D427288486F2EDE088E767AAC46C12F3C10EC87B488B512B7C5 +4348F00978E626178F568FD1F5436AEE4762FDEFA11402D0906218F50F3DA6AA +A04844E7CA384F311F23DCF95D310D7F9B9D38EDEF8AEA6363C0D51EA6D0F29A +2186AA3AE105A891C328861D191DBCC47B4C4DB1A2540E890B4316F7441F738E +FC091ADEEABB3343E4E4ED63596865D81044094DE5FC00354A41B5980B0C361F +20D2256ACA15780E1C2EFF4C2491007F4EC6D8325095956A8CFD231D8D1AC6A8 +BB1A614497B78039D2C3956923C97B82864C40988463F8B94B8C649EB7CB5CC3 +93072CABFC642D697B156199CCC534B0B97BDDC44772F16A4385A391A65E5776 +C43BBD7CD659713B990C21F89B76BFF6594F466B21A713B32EB922655AFDF1F3 +A88ED6A0755FE59B23E305DACC3D95855DFD1F4205656366D6BB17E11CA018C8 +547D9BDE88DB0D68CD1698894EE41C3B8311F5CED298CDEF4D83D6E1926FD245 +1341681972317B536B5A0453E73101AA0D7A911CFAE6CE64DFF39BD6E9E30578 +A1FCD948544A44452F91E2199548F830E022AE220CDDF6A67CC6A3969E0D4D25 +1655E1799CD1802F45D3D1FBC5FDBA201F4D91146F8FE690BEA0DF724D52FC99 +994BA6E31A96D8EF6E2628A0F965972C3348E285D90576BA196877343635B41E +A00F67F3AE300F1FD2958663CF6E5BAD2F8432332BED21E07E5FB76CB67E7885 +157153DA37CC792A807A2EE1C3560D29BA8E48F273DA2872BF3DFC5C13AEFD96 +36BCD22374DA92E31E37830BE982529E468CFA0E6E40A412DC4D3427C0726D26 +2A1CE96C5442CB301B65672FB8DA07CA7A0D03B0EF1D6392CBD797A909CAE239 +B9C9C961B10893DB86C1F882B7FBC0A1788B0A8CEEFFAD0C5D2740BC69B07B1D +262497AE2F1A8461E337FE59B03B621EADF70E9C09EB9D3F4FE0C19DB056E6F8 +3E776F3ACCDC906058AFEFD022EF62D6C0C9BD626F61184E7C5DAEDFF88BB984 +219128F32AF8EDA2D4C286D1EAEA9947083C5F84FFFDF1698FD0A140C5FD35B2 +C153A7A44135BF077C180328684AA8B0074E6BC727000BA9A6F55D127C5A61B2 +786AC1F6EFCEFD7E544F43B61FC067D162576AA75F7EAFDC11A71237AA5C2749 +FB42DBF094BF1A24EFA8E4D5C324378AA86CDEE4F0867790CC8437A91E4DBAA2 +C67B8E50996E2FA20F2C807918C6D6AC4FB3406F52FB10D3C33466A786C1331F +E6FD17D02B2161E8AA4F49144D020EA450C1151755507FE5E4A207C6314DE1DA +73F3E8EE316A9BCD56BC484826A6E3731BA6BCC8C90196EFE9E93D562F0C216D +6BEE0DFD78492921DF217A7B8170493E06143923D732F75CC42576D2BFEDDA04 +1AB26BC3E37337479E122353FD6C11DDF4CC88CFB52D07FC73071E0016999727 +F77BDAB173E0EEBB69FFBD3F3A5B28FAA49B0D29211B58B338BB439513BA611C +84AE2700585AEC8E79DD42BBAAA2453DB4E349353950189BA77E9FB98B6FC38F +D3E73834D346EF768820F034CAB3B791BC5CA82C2D33D17CB0C4E88274FE29EC +572908CBB2B819E1971128645A9373A0D8CE8747D84D40D60F69DC0E8BA13FBE +76913402FA2FAE04DB7985A2C99165B2F431DC15DA0D34664471FB1B697D46C9 +ED5D42AF27EBBEEAD58583299608464236FB81A60B99E0431B71FF7646BB3CE8 +D877C62AB73EEC60B77351E8DAEBE0FB978B46E7396103E9729453E8DEE72E68 +85E205D26FDC8E8D6F834C478AFC517F4EA94EE8FCEC998B391277B30ED892FE +8D79E45727AD340282BFBF4235C5C9FB7BA254BD24EF7EC7238ED953E03C27F8 +1B71F2C6911FDFDB6CD504B2E92F7755CA74722679ECE1212823C09FB19E3531 +333FC8A708D326DD49804CAA48C448D1D4D974A8C050FD05E5CCDA19EBC30CC0 +AFA0B88AC7DF8198E35A0D74993713AB2F5F037B6236622622D86C1079CCF80A +8FE8CAB525769A921BD1C6600A3DE4BE8576702CF3E2CC7AF51E2A3A7E050236 +9BC648D2F843223DA0D2DB037A2CAE9CB06ADCC85A51C7BBF268D7BE707B6BB0 +B90E831B731278E0594C5C14FF15704FEA9ADCDDCD4A989A0C39D82B8F40806D +90BC8619E0ADDFCE793292A5356F624308C95E4F557BA45AFC035F42FED5F04E +EF3AC54B87E360CE0FA0F60BD92CBBFCD468867DD42EBA220203999279564632 +AD5BF1C08DA86C099F5DB5DB9E031DD2E546A1EAC7BC97E5E88533F01544066B +E088EDAEAE072A5D317116C3E55EFB7612719A6706AA71999D4061945984FC64 +A560E657E5AA5FDE7187EA16953E198591AC15D67B7D3D59EA35DFABE898981B +64B3BAE0CEE31925CF6B0C303E94D98DF94A8784D472BD8D065D83CC41468CA5 +9AB2276F462F780BAB521DD0014BA3DE5A82C0EC50201858F76B04C8D4371F9A +EF45B0CD7AAE9E94ECC8E4F3DA892A17562C79ACA97E98859F941082E4E1B976 +F76A494D3690E1C1E9C20AD705FA119348B066B5CE1CF5A249602AB3F380A2D9 +E8323C14BB6375C6F6E26D89B365012AB759ED11483EDF9B5999FD867B3C913C +6C482818B91694CCEDF61DD190BD9B62CAC3AB7A8D4463D85686C6ECD5BC07AE +AC13A42D6642876E2586A25D61E4B1C8FC0C8814B15FE19DA06A8809147B5810 +833194A76611355D1CC1172B63CDA43EF2A083699D73EBC356B69238C2453C40 +1A553D752A265A31D2BE724668132716A403C5BAC8C806C8ADCD285D92BDF679 +7EE0136BA3CB0AC50581CDF674D7CDB4261C4237876DB78FD3AFBF70E0294256 +F815EAAF85AECBAC5705170FDA60E36C7E613C9E63EC80E6E210AA7D5416A6E9 +39EDF1E54423C6DFE793C16F9C0CFA563159A2A20783AD48F1482F47637FE25A +319165D066C62FD852BE13FEAEE0D804FFF36794F4473D9254A75369C07B0CA3 +AF4F13C11E5DDB2C79E30C415A2E5B86BC888EE26AC3D16521F4E41A5B84CEF3 +A248A75EAA7CBB431008F732F212F2C6D77445C4C067678DEC4433B31145C20A +53FB885026A0CA0AC8CA4751B4A8731E39205F9EA6A7D08241196476739564C0 +9368C4CF443AE2EA48A71B462697920BA6FB380C32ED4F5EFB7864B89534648F +112DE3DD40B88C5BF816C338002F627A681B286E576F4168439D49D0ED88FE16 +955C6AB7ABB7CF985D5BC5EBB432E5D4CA25A66073C53BF91B03287529B1326F +FAFDBE548926563F392BEA729F31E65AE2487F8A476095B72A5044175DE35387 +2CA57DA0CBE2CD63F7AC4EFA6F98081336C24F89BE9940908B1F6B1AAF5E162C +0985EEAF6A2BE772172CDE530E83C2B59EBE5464A6AC1B41ACD17857F53BBE49 +A423293003C16EE19F30B99D116357AF029C1FF748242CAA8A21F5F2DD8CA94E +E901ED3DF42C4D0651B240638EDCD0AB8189227AA170DD5A7FF685B9C85C6BFA +1B7F484E204A5B151F3414265D0C5E6B48E96E3A6FF2C43B1F8ED6F7BC82F656 +7AF6B474498DA2D389410B9F4983A1097B1EABD1BB5067899DB67E61D0E7DFFE +A6F4EC9A7B20FEFBFCD896263C76250805FCC6C078E3BF0AA8638D48575E0300 +590D8132CCA0AF6111FE2B2D57F96D4D36A92DB55ECE23E5F6883D413C6229EB +A0FB25382549C2B6926D74F7FF9D53AAD8EA9FAF75883EC6DA29287F931FF2B2 +BA12B5C24A882474B5F66E8CA66E4C7474B8072550D60E408A3D2021E5ADEDA7 +E214C34CC5AFFFC02229677981A2E2B2FA9C8BB2B1D0D9BE7E99829F17C6EC96 +D798A9E2FE20608963D369DA60BE1BE0E87F95CBE766DE18EE0A93D19A829BB5 +F1586DCE7AE31A6F7A1F92EBE214DD351A8C443A547B3B67C8733FA5CE337A6D +1B47A99318E013E1ED7B3F3AEA5D79F9E261F8D4529D93F25F2935DF0FA5D30C +0B243699E93EEA3174D2B30A5FC364345218621D1897D2548CFCDE59864326A6 +5D94C6D0652C5B72121F69ACCC80D90C0E8ABEA97E37F8EC60E58BF0E6606BC8 +90E547BF3D1E5F02FA70759A2970A5C9EC187293176E41C955A8775E050D49C5 +9DD1D0ED73D23975CAA1898A2C66414B0CD89DE2550FE4FCCDB5A7C6477D9566 +2F9B3CD48FB28C81934421DB2EC0028CCC7C402B6825EB6221CE23173748CB5E +7A84BD0B580838144EA26B46BE90D73E4B3D8B78D5CA180B25B525957377480E +9129C05515CF65817532EE7343A78A120C49C45172261F4711C0FC0338ADA281 +15469B936B41014ADEF72EC990E23EE0730EB85A6D85619A7C923FA3350FCD37 +6DACE732D9BC5467DC8330A1A5D2F7060ABB7E73A928FC75113866068FF95FD8 +6D6799FDD774578C6CD828A3ED6DD18A4932284DFB898FB21671F59EBC7D525A +ABFBBCA0DAC780777B6BA35BDB1C0B6964CEBA2BD7A98EFC832238B7485D0189 +BD2013396646CA52418D671642D576C9E2F228F32CA1E58A2A089557D9EC314C +C2F78469A52C072BFC65B40901748D35420B6517A73A255A2D098AA025626C66 +3598F533BACC6D27A18A9E824DB5BF6578B44159A32948B97C96F6AF09691ACA +E3658DA9CDFD89D78DE9B5E09CCCFE41628E39B75235150689CDAC6D32FAC958 +CA455631C8A34E21CF3AEA2CC668F0250DAD25BD3012478CA71F0BCD6468C54A +F1C896E4C148C513057A2B10D31D396D0E5A62F656C213EA0B58BAC39AD1B63D +F717162909F4753751875B46004663F07F906246912B923334DE536383C5FAC8 +A10A38094CC6EBEDEA4D175727995B36B3D4C1AAAB07A9532BAF0E0BFB349D6F +93687D2F7BBAE79737755DFC40F3C87FB3C0060DE09F138D26DE3B7F9C1429AF +F5626A2D9C2E6F461B58DCB7F3D59C5821B75D6686EF4690472ECCEB3A70D2F2 +DFBF9089912205163607ADA8E107C4C29E2A097B5B5D8438A81051D57F45AEDA +9A1CA666B7CFC8535A9F132DE2FD99296583ECED832CEA3D351E6FC987B594E6 +546876E63CEAF6928FC11000CDFA34CCC7D8BDFA3D285E3E1F5BB6452EF08055 +5BD95E479ADEECF421D5192BD864AFEA280085681DE3A36C7292F9A6E78210DB +0A89B12CF873B769ACE73EE3D4CB691580896E1851649F7F4902E0FBDF7C4867 +35384636DA7A3207D00F902C466BF6E89CFFC66C16985E2F831A75663ABA9C8B +D7F923B03D969D102BBE89EC9F7392CA28D009719D96B3F0B94B9B0D76BED15D +5E3C8201B7F0E03FAB23ECD685BFC43A50EDD32317B952108DE60B7F61E3AD09 +AA0AF1EA3183D2D872F1E2F353AEFF4883D1AD9D0681531456BA95604147BBE0 +878B38C8930D3D524FDDCD0C7FC40BF3CE0A591C61AACB1529733ACB0B8E0BE6 +380F5CC1D2E1AA682926115CD76E348409587B4F24D081BEB230B6A364ED765D +D2193E2143B1883BE67FA6BCFC91416FDF79BF230CE19697C28E5661E368C6BB +A8EFFB5CD3805E5C0DA787089B5EC4DC23DCE672B0B3E939CF3EC6FECB2CE15A +C496A16591CC96A5AA55EB8035DB4886ECFC0E281D184431B5C3B8B64A985BE3 +3A783BCE9D824630160735A6A13A68FB985E974F19163C5B3F6264E110918970 +A6B02F961AB1453AE10A5FC248F2E356EFCC247A8AC5CAC7EE0DA8C969710E26 +DFA6B7D4BE798017FBAF1D94A49ABBDD04F823C83AB1ADF6446D144A0ADC1CB0 +6B95C3B23E9486492A7FD96FC1E2C63D44BC3B527B0559358FCEF56D0496197D +135F69F113C41264FDBED2BC94E2DEE33B60C71BC2DA2F94C2F3F8F2357D5706 +02E6E0353219A68ACEEC6D78435F45C403AA3F0E0DC2E635A15EAA944BE84D4B +83F1B1777BD6684E782670A3F4C65ED63C7CC8F7EBB3CE092AA21D4F1E91AF1D +4D8037D83316A5FA87E3069FED76C6DC9BF11F5D53E32CE4DDBE458B6956E502 +63CE1BAB78E04107BFEECE499A6982419C +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +{restore}if +%%EndFont +%%BeginFont: CMBX9 +%!PS-AdobeFont-1.0: CMBX9 003.002 +%%Title: CMBX9 +%Version: 003.002 +%%CreationDate: Mon Jul 13 16:17:00 2009 +%%Creator: David M. Jones +%Copyright: Copyright (c) 1997, 2009 American Mathematical Society +%Copyright: (<http://www.ams.org>), with Reserved Font Name CMBX9. +% This Font Software is licensed under the SIL Open Font License, Version 1.1. +% This license is in the accompanying file OFL.txt, and is also +% available with a FAQ at: http://scripts.sil.org/OFL. +%%EndComments +FontDirectory/CMBX9 known{/CMBX9 findfont dup/UniqueID known{dup +/UniqueID get 5000767 eq exch/FontType get 1 eq and}{pop false}ifelse +{save true}{false}ifelse}{false}ifelse +11 dict begin +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def +/FontName /CMBX9 def +/FontBBox {-58 -250 1195 750 }readonly def +/UniqueID 5000767 def +/PaintType 0 def +/FontInfo 9 dict dup begin +/version (003.002) readonly def +/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMBX9.) readonly def +/FullName (CMBX9) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Bold) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +end readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 65 /A put +dup 97 /a put +dup 98 /b put +dup 99 /c put +dup 114 /r put +dup 115 /s put +dup 116 /t put +readonly def +currentdict end +currentfile eexec +D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA +0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 +51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 +7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 +E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 +0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 +C01924195A181D03F5054A93B71E5065F8D92FE23794D2D4347EE3E5AFBE73BA +31023D79A7299D8F662042A8D8B6A7B4E86F48AE98EF848E83FFDE68E17A0832 +A181C126D15EC79861796F03957F5A51462C817DF752097718413D012D19C9D4 +423A5EAE1EFD4EA7A9651BAE6E45CC194BDCD03FF43F255E58EB5E50CA26BB98 +B8B11E21DBFF2BBB04D039E63C453EEDFCD9378F5E7AAE3A93E8691DED5865B2 +B78F540F8AA3224BE372B18904651D057608DE4DD729FAC398A80CB904410451 +90D66C44E943517A8F4969673B985D9D244FFC743E0AEE309EFD224F7029D37A +F6EDD96E2F88C9D071FF16EDF055955D31DEF10808B343E948BB4F6393D275D0 +44C4DABB75332DD716E8127283E8D70511F8EAF4D1A5F72E2F8503A2F964E5F9 +39304CC17ACCF531A8C0B6A9D58DBA6F24A4ECA62EECC939E8111E4BF79BDF77 +D656F9998F1EFD2ECE3E61CA526106662273D5AD3E74D08E9D4453569B359C2B +E2455F2136B4DB54ADDC3C0256EB7A11E1615AB9323ECCBB6EB48ACD469A2020 +A873E88B28AEAACAA01826C1C18120774FD5324DF9AD36FC256706DB24FEDF34 +0FCDF04B12ADB66876EC7AEC183A1EA8BABD38BADDCD0EBDE11A5A1BEADD0F7B +83585C3BA141A8B296872F712EC42C625DBEE9EBD2C414E57CC1378CAEFD00E8 +DB4B84F51967F2968329B8503C4B37A56F6136DA89167FE3AAA93257140FE94D +D96C7F85C6F82AE1596511ADFEFDEBC1B41B0395E66D2074B39B5565AD4687FC +89BB4BAFF0F7568D9EAF069CCBA2DFF61C59E2CB2F4274459792C5D097FDE6DE +0E40AAD8DD8F64C28D04EE50AB79EA7D3420CE42D39FA9080E9E046A4F22B5AE +AAA17FE750BFAF7BFF097E4A6E9362412C55E25767C311832C1C0C76005C733F +E046FCFD4CF49C6181C24BD299E90F20A0A0ADC868C11A8AB7F610186D0483A1 +B3BC4FAFFFE12FD746777209B4DCEF0E4ED15D90F19BF2FB2B56231FFDE5D40B +146E3FAEDDBAB365D88CED98629B9855AD6E57FB01BB82659BD320D248E5F7D7 +B584DD43E1F5DD2C91945DDB772E5A62AEB7080AF36A83D2BA8533E7E6FD287A +924F616F8090E9FFAA607A21F38718D668FBD6BA3434500BD01EDCEC00354F68 +E1D0E9A921DACFB83FB61C1A5C27D027CAB348C4B7E2781013B68CC5A2BC8703 +2809A49A0C2E9E004D56844EFAB4A8763B103CF7CFF980C9CF7F6BE28814CBDC +348E2486D9379DFFCC0E9329854D518B49B98F582972B0D1D18A3319EC00DDF2 +F64C2CD2DCDBA287B279F98D16ABD1D140246E8B66C759571981FE7402F14C94 +18394A4C426AEE4B0688D86D08B408763DA3537E5BA0D6A6796C316FDB0193E6 +77C6F257BEDDE17F2CA5E661F434964BAC9834BFF36F563637872FCDDE94CF22 +F076D1C2DF6357D8A26D305D52C9086CE36F49CD92ADFB4306705A0887407C9D +59B6BFDB82379111C9E33692BA9E2ED9782CE4334C6125933A2F210684642DF5 +3B129F955BADA1E86D6B80CE299FA0D1C0AED1AD61686AF1052A188881E2125C +98083BA8255B92B9CA0B48EB57F936790DEFA6E6947C0FF4083FEC296FF3034D +AD657C64F2675EED2B4EED1E88F0B1338762CB4C64C79F111CDE9777A000F65A +F9979943ED7C445815BB59052B91F0FEF7219E3DF27E1D5155B9C42B7BBB06EB +1815997FC3471CF963A15B1C5E4653C84236CC5BF55A31B94E394C635B95D847 +69E8134F4FFEAE836CD6AE71F58F48AA2F95BDB1E2CB89DEE590EFF3AB7097DF +AC185303E647628F5D87E0D82E6685DB467A0F8B7D3AB2B7F3F11BCC99BD48A6 +FA5D4D75698454CB74451B486CDA6B65547C0CBAA563EC3574364540AE7B11B8 +F9E86BFA655CDE88DE2E7D41851FD208649E9C011E04C78ED9209FD56E2447BC +E1AAA0A3D36F6406C60F6B19347CCB7D56A84D961E17E361F92C5542109D9BFC +FEA2FF9775230EABE3333EB25A40E29016E9A8255713AC8336B8F7DEB89FEFEF +4006DAAEA26C6BA1EF494AB99C2BC960D9E07981BABE909B5C121F2CAD48C938 +A36129D10D38AE8F5C64879F61138FA9F7479341F5C5DE86376B65A642B9622B +E58DBBFAFE07EEE1D11DE9DC34309572868586CD92D39FADB711883AA85210E5 +C82842EF225E55370FE0AC600A170687C60C8091B0625A1C5589186F3C7C1218 +B15B5CC3A5CDBA7085338D963D929A18A651EC7CC39B8500899DE9220A1BA363 +78698E414607C34E06E29AC5BCBAB98A70DC2BDE0FDDCCE22D4717EDA7D95397 +33420EDEC2F1D6E7072FEA85945378A6BE9C7F68DB4FDA6B5BBC0032B3C02519 +F4168C804B6A101AA60EF4FC40C2428AFEEF5A80F9B76D561C8A21B3633E13C5 +215A14D54B8A1E6143A9CA0B5794D20DF97C35B3C9E9A4673AC2123E7DD8E216 +044269B1D6AEEA46757F8D9AC5C8A92BDC1EF22EE0575C80CA7895722CDD2BA6 +F9A208E6BEE5319E63B3B3CA197D9739A4498AAAC9C7484D61418ED2BEBF63A7 +F5283A075D1DFD4B2702E1551A0D1A90DBBBEFB6A55B5F29C869763A856C4E61 +EEB3C8E14E3376B7D01A4E265C6C8056ED23931DCF669A0EC9427F74A147AD8E +82E172FA6C13DB1281651BF3D14163D963EFC7384BFC4B3B9274274DCEF647FD +D6DF0CC146BE8AA660D709526B394CE253369281FDB45AE071319E8FAE4EDF10 +2867A431E22779EE40D885E95AFBF62916D9900016805D004C0375D29130CA14 +F3E466AF350D1A5D181816EE1C4BC75DC09E4195DADA5AB09CE9EF2C4D5F7CEC +6C16BB6EC791E2870DB46B6B06DF421E7A2781D82A07D92316B553D068A1DF5A +8B19041F96ED637B932DE184F8B856FE1947F5FC8AE505F0E3953B325E0FD6FA +825EAD072AF06E258BD35607A1F082DFBC2BA5251DEDCAF68B4D03086CCF84BC +DF70BB8D2EEEE3E0EAEACC8440AA130273E5C7E78A15EEF66A9A1E0D5E022188 +0AFA50FA55C6C461C743E1845FED77378D639839F548D6827CF371AD3DFCE592 +B7F6E29FFEB6CB92B33E24E34875A5A92C08806F67E18AEAD86447A977890AE2 +30A452F33B609DE5B792D9CABF39A086C0936AECC081CBBC810B3EE1D35F9717 +260E76132661E3A8170759084AFAB04A6E773E9714A6D486E0BF46F336A7CDB5 +C325E28E747295CB0E8FFB289F4907BAEC213D4D0B495A246A3DC359B995E9C0 +C5322D750E13159B7242E4C4DD27932AAA130BC6B0400428B5E6F928CB8F7658 +EF02F7522779CDBB67722E09774C419489192FDAD3DF272C95BD9BD64DDF0BDE +999FC72607F52805DCCA5EC17150EEE38B866E3D5199E5A6CC262785EEB11D51 +80E79545DA191071487EF70C7FAC0CA345955F797912C1268924DD79D0FCA3BA +460F43E74975C04296E34423BD366A4EF7EE9463ECEF08F7E7BC8BEC570F812B +066383C2EF5375FB1504537D902818D63B30385421FF81AD92A1C153852B1427 +A39685A76DD636DC4ADCC53F2A78F795F48EFB23807E5751023FE324CB401281 +60F8A8DA779A245DBC26E73B61A1450F25AC276E1B5240578E85E1CDF5A784F7 +D4F5BAFA76F70300972E4B130C685189C4010B9035A5CBF0562EB3B387FD89F5 +C53A25D3E883B506E0B477389DA5CFA82CB157D8C30F287678B0F9A17F5A8704 +ACB5DC57D7CAD21A4EBA49248F277F929D3E49B17463EA5F31A4FC11B0836E34 +3A5FDDC6B9A45113590F114B99566D18C21464E7FC1D9AAA9B1133E5E8E2D14B +8E143E1E16595C42376694A83684E3B217A17F158DE89549ECCCB443701B520B +E20B972CA5EC6405C479C5054663D48A22D105AC98AF094340B5964D0C26D9CE +241D2706D3444C1405B2C9F7C912CDFC87EE8FBA01C0020D1AED1A6205A8A45F +8504B42431DB5409BA8AC472F2FCB4CE698F6DA92C4C8BF1293C2C998B771540 +3D933EB5E976B7D2252DAE9584E5C6864B29C3048EE159BCB7638CA956E07F81 +F76391380AAD2F1DC2DC201BAC657A1BC93F5569A5F612A4EB6B01F136F41B87 +E20D4DD6ABD7ACF1275FD80D9BBB87A45572979BDFEF59212F1F6D9423FEC976 +1228499D626A328569B4BA2755B1ACD20796398AEEC5F3C61122D52124996535 +D0813227F549FCF59C6182D6514A70F9E38565C8C98D5F797318FB531B5DA58E +EC60235B6F1D97CA5D495CF689C3F9B3260998ADA1204AC00135C7C72700DB00 +7C06798A46E897875BE619508DFA2201FDCF689E51C3D85342247B059C0DDA14 +766A31E3E25E792F090DF3EA0C45C3F64AFB918BDFF92FF0ADA2F71866CA190B +87B2FF90C872284652619F084E2259F044E2980101A62004AE9F4BBF675C5279 +BA3437ADDF2D552A033D2301A669EE8BBC840C0028275D077B8E9977D447B396 +F1D82608E030FA43511BA01C345078986B8C35B6C6990D018C2DD2CBC7774450 +D8482DBB262BB816E6A26A1FEB084FC2027C62D17790C80C65A9183F23BB2458 +34FDC5D566C1B667EE801D0521BBA520A15C0C923EDAD84AD6A83DB23806711B +0AC2631C15EB1D33C26F8D65852EC37A3479152557366929A63B753226059870 +45CE6403CA23FF95BCFB6F0C8DF8CAFCC0BF27C59414217CC6552F5945D9E6DA +AF83F4AB1917742F7502B069DE44A6ED3BEC966F59A84FAA2F8DE441C11FB122 +DEF1768D250C0CA5F2DDE6FC4E24FD3AE4386B91ED2A492A959BF7E4C0AABEAA +5BC2D933147A4A21FC5E5CF3B2AF5C0A768A8B79337FA3934A43E24F9F7DF24D +22C5BFE4DF1FD57289A6E1C9AA48D32D20F613AE94B4308E0D3BE4D1BC95B33E +A9911B82EFF461D295C5462EE2B12A3E40B89E0BC778FB76F8B847B6AA99E061 +3444A55D83FF839B926985B0F4E562D726FD99C5DC86DA24BA7AF38B93C90F51 +A937E7C35793010F351594465B39BA5276F223DD3CAE1868B969D8EC93AA50C1 +4C7E51D0D7F5E9F0EDBE1BE24BA5A977163BEC724D575749C56C4F39BD60F3AC +47B930C9E07A2D59642C9DE85EA6FAD1E7D8817812C049FDAEE148E8AB207B89 +B2324191F1A82A7C499E7BF09CF1299F0ECF55EB0A2A32C5BB89411B4AF2A401 +074718859CDC27C2FA78BC5269D5A38DBCAE55F6CB669DEED2C36E5B0D590504 +B6162391FACA9F20224E6AD24B86CCAC0048EC7A618B3263F82A317B3969F0FA +9D5EA4676B27F371785FFF6599B61A6D32E82DD9D511B04E03F14C95A4CA6CD9 +5B59A8A7BFB2AE32E9357C7766528E9F74BB8D0B9317F02EDACE2033B7918D6B +8616F1C1B3E113B0F77B0A1292E41F8353DB55EBD872290491AE1FBE95EC034F +DAC1394928930EE297693598D97EBD0720A0A7B4A5DF4EF4BE0E2E0968E64CB8 +167CA1B8C40A779023AB6F74E0F1626D8BFFA96EA09CA88524837B18DA6152A4 +3F0DC3C3958EFFF86B07581B416720FADFFC4AD35F1553A18944A6DB8FAB0AE0 +A8118C09DC8E905CA32904B44E0541FCC7EE555335E61108D8346B4EF697DE67 +7F67E1E4CF0EE2F6D89D10FF2D115C6F8163B8180378018F58C148EAD188E969 +C60B83C7B295F30614B93FF925BBB2974B0B9C68C2BBA6E973DBFB5500A574A4 +F7348BD31C735A1E57519990582D8F7D97F8B63D9DCD488DC569D5B392FF26FE +F06F9762956D64E9C258EB9B90733BAA8F1912F3B9AE88C6D14DB46B7131BCBB +D47CE60D9C63FE0B9620D03F615EEDAA3C76A7285F9897A0D476F35F5CC158D2 +D148CA1E5A96D16253B360F34336D476FABE9A434AAD5FCF65A27F48C5BC3519 +DCBC35DC1D324A270996B8DEC6D3833E76A434E05074C7E3FC8E5633D6B25B7D +69D9BF7039DE4E755A7E3BEC8A4E5929A98FE265E742B269666C75644E53E6A4 +C5AC907F7DEB319BC88CD1A7F29A0A4D43D471892A674D50C70BB6EFE5740F97 +50522F2EF056E208C0134EAF15DC9F85C7C06066782B715A5EBC22AD414A169D +86A2F606150B6F903D3AAAF44E75649DC410C3B8C845909BFC8235E573A2D291 +19440D724C960014917EC802414651E298160EA70FD54BE4EAA1A1007ABDA8B6 +085A89221C3DD5E9C759C19BAD6EFB91360CFDEE6C4876AC19B4BF67A38BBD5E +0BA20996BEFC1F8C427EBDD666B30DF5A2389F1F3BCA17132FEFFD3231570AD2 +61CB33381A0D2E2FDFF470FAC3A60E61E99C76A3F4A6BF32FD4B2B6DB6B27F2A +76A5C35E24E78F7DF28AE1B7D04A71097881CB67E060DE537C1A318B95964FAA +1455264E48DAC7689EF10905E381C569DD65825089EF325595388FA5BA6A1EA2 +E2536872DE92D46AF3BB3F1DD920FBAA4481034DF831FD15C01798AB04A73B50 +1461BA7298B2EAD460D6E645A9ED41EE0E0282C335AA716D7563AD7CFE2841B7 +0C782ED3F6D31871350A12A41AEFE21E9A03DF676671E4C953E51F801CBEE091 +BE0B7B413B7EA2479E2529DE9E49C03CBE8159DB1B28D2E290826B6D01B35DDD +083F85E9CAE378C1A3B7065280D9FFEB04A02B76F1F0E547328F005CBD39936A +5063812D1C958FD4EA6BE9FF87E5FAAD483055819D1DC39D31B8417B44F30B50 +EC95E26103A0DC2241B56DC62D424438A5FDBA8AD4D9B417F0DC31CD82DD772E +FEA23036A719927A4654876985FF4AC2D28A180969A76F3584D001A2EFAA2BB3 +7F0CC228CAD9A485F3FEE3E0F0059D3BD8484FB97593A6EF08F9D352E3860613 +2617ED6138ABE551DBC67F0151D0F9CD83A613C245E23FEE6FCC8858592AB43F +8E66FDC5A27F9312091478D102BF867B320431F7A6EA42EA763C51FF7E0E0FED +A6A830AC95600C837033968174A9406D0DFA72FD65ADF153E5CB3420CEC76A3B +43DA6743F24C6CFE0E9A7E78D540385B657CCB379BF5E238A07B836F907017D9 +C0CBA503FCF625536E27B77A262A0EA1C3DFAB015EC859FFE5BB26197A05F4F9 +87046F3AFD3387CF1B040DA7B7CFB1EE92816C7C172164CBAE3E9204559C2A74 +87E4A41AFB16E7789686047067947F41C82A26E3F343E7359804BFB3B7904F4A +12FBB7EA0E8C26801ACE0E9093D7E2C3E288F781E3E6A53B8C121625CEE7354F +B1A059AFE21AB4DD2B43A9DA710F2D811F63DC41699FCC43330DC7AB9CD10F00 +C959F73155E9D63EE7B20970C7AB1B9A8A51D0DA0ECDB917291FBD57CFAFD9F0 +E1636B9DEC48FA7FE5B225283546B01ACF3036F1B5F399688F1657E41A5F4EEC +2CB1324C136CFE6C6B92958597B952552EB7A8D58BA7773CF685FED451D89392 +C290D38D67FA7519ABD024B85D3002D8592C5D30B50726C7BD17577FDBA79E38 +3D99B3A08797696E593C0BEDC50706C986E6BD05AEF30108F4BA192E956D2942 +72F59E1A025FC31568C2EAA1D5942A479203EC01B37626F1EC334DC3C6527C06 +41162B68D66E7923911921E861FECF78F36E4BA60B4FB8554E83AB554054B2C5 +8C05D3FBA010846BC5B32E9ED62C6A0E8D92B8F3546CE0406A87634E2D96F5E1 +F007DA0161E75DA55FEC10F7564CD7CB9AA0A016438D082D9A9FD107CEFA7B27 +BA3C61B3A13D9A30E4BAD25B2FAE3ECE3FEBC9722B448E3AC5DD9FF784718F6D +DF58A8A7DA91086BD86AC776CAF3F4F2DBC2F0AA81600D53D2A0EB178568DD96 +1ED459E1CD3D897776901284DE5673813ABA0CA7ED342130B261727DBAE566E5 +F57FA86A7B4EE5F48F039FB95D318DC142E26022D7F85B34558E99078C5E6467 +FB2ECB21BCE1E271E22FFD2E71F203DE5D3BE3EE5DC01A9FA9D3E4D01C0F12D7 +D430BF07CD774516464C6FBD414FF6F0C22B9C02C7B4DC659BA3D7306AB4EA90 +12AD3D9EF3C73E567590ADB3C6D261F650E218E7A87DFD9185BD17E8FB9B8AF8 +5616C4309919470B2E01F294D6CF5A8D89BEE7B3B199C4D935EB8F12308C4610 +01A5E4EA5AC9E47B414B924B518F44461695BDBB493256D530C80A2A88A2177C +7389DB61382349231040253A36E9C91355A5F712201ECD1C786660F544C3116B +A0993F9C043DFFAD52BBAE21E69799BCD56EAC612B22742334E801FE3F6789D9 +E8B51FB66F3A3994BE700FAB60C8433504179D9329E6662652F1C6DE49CD8369 +9CAEAAE9C25FF0A986CD5B91A78A7B281FF724201841CA0C0D9D48D68AD9C991 +4A2B7D515CDE867B33DF058A239E5FFCDC44E20149C02C89C5B87B075FDFFEB3 +371700E036FA0A232D1B534C581C33583889251B9F3E32203D8FC328299D6093 +BA244223A74506D13E1CC9716F496D50AED48F058071D6AD036D571F32185338 +F2A6793724E8FB850E9A175C83CF701AD2876DF91DE0D9DA7C3D13B745367D96 +22E1B8C006DDADFFE4804F83FB3BCB48544D0091684C1BE9A4BD325AB959050F +2535F50F12B73DB7FFB418D7D6B2CAFCFD5BC761EAC675E0EBB8A23BF332794C +2D67F4974EDEF1EBCBC5FE26D62FD71DD749445960267DD18322626F84416B78 +AABA54E6DC8181CAC0ACBC66952C4E96507800FEED6D7604834A14D9499F5D7F +D93E31CC2152EFE43CD355D981F91D774689EA589E542F11297A430617BBC177 +2AF03ECEFD7151E6347343F6A12CCFF5F64FFBBAD48D8A806C6E563511C97581 +7D4BA510BA1B84B72FB495434C2C07DFB05F8BA0CB099FCE8AF1275AB983855E +3E61F8B818BD04B15533479FEDAF2AA4CF1A0F111834BAB2929A9E9B67335F5C +085B13726B55EB619D2474BB50B473629FD0ED9D4987C17A36CD0B3016F479D8 +EBEDCC7B626FD5F54EB70EEF08006C92D863F9623F50F35158EED0C209FB9D84 +45BDE42A5B3F1FCDDA88353965D55AF0072AA1278B3CCE16218C2B393263FBA8 +2C2210721E5B8A92633F6E19EA3CBBC54CB10EDEB70C4DC00502F8C7B72BCB5C +12EDA943F183B470D7878B1911583199701BEAD17F5C4A5481BC27597DC35EC9 +FFA8941D718692B0B33DEA798101DAA470BD4444CCE1FA857E6ACFFF8B860F75 +CFB76AC54708C02584E9FC8AF486A9D16D6175B87DDBCE0F270603A94B7612D2 +65181880FC339C100B1A7EA58DFF7C64FFF8FF24790DCBFFEDB4AAF033B93215 +8367CD9A9AF44E12A8EE4B7A2DCFC02C969AF8FAB72C1A1AAFD91C36173D7AED +B259DA94331F79CC0698CF95D14562D88E6BF6C99743307FDF5269B44DAA11AE +2C5505BA70F9616A855D5A75026005164BA2ADA6279CB3664A23B3C5A339CE52 +D11627E92365C39D4CC02D34F9340F4A97E6E186FA9C52E9D7086FCFED0C5319 +C97670CDA4461985A2553A7E845737E04268AEA9FD26BB8409D145E3ABDE88FF +2730DB4697F637CCC4F94F633F4B6F1D352D5E6E192932120AC10E0830B436DA +B474789F08F51E23D3DF5867A64D688F5A671E0D025FB5217B919B0C8E9154ED +43BB6B3ABE0AECE3A74A4AD8EEF54C1AD48F8B63525A05227A52E33D81C9D531 +9FF9821CAADCDA4157F8871CC1DFA9450E12B9996997BBD6A3A399C2C8461B38 +8D509B501C34B319E11FC9CC32116E9FBC913C73E80797C995ABA622E8D8BC16 +27AD703EE7676F06CC2BAA648EE5E0C04156DF21D18EF62A577CD2F9056A5A6C +B7EABD639EA8115274A88C57247A82CF44ECFF98BCF7C128452DFD54FF9590AF +464D0474E06F30DD2D82390805F4703740FB5BC6D0807F83F866A06302548ACE +CDCAE86F789563 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +{restore}if +%%EndFont +%%BeginFont: CMTT12 +%!PS-AdobeFont-1.0: CMTT12 003.002 +%%Title: CMTT12 +%Version: 003.002 +%%CreationDate: Mon Jul 13 16:17:00 2009 +%%Creator: David M. Jones +%Copyright: Copyright (c) 1997, 2009 American Mathematical Society +%Copyright: (<http://www.ams.org>), with Reserved Font Name CMTT12. +% This Font Software is licensed under the SIL Open Font License, Version 1.1. +% This license is in the accompanying file OFL.txt, and is also +% available with a FAQ at: http://scripts.sil.org/OFL. +%%EndComments +FontDirectory/CMTT12 known{/CMTT12 findfont dup/UniqueID known{dup +/UniqueID get 5000833 eq exch/FontType get 1 eq and}{pop false}ifelse +{save true}{false}ifelse}{false}ifelse +11 dict begin +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def +/FontName /CMTT12 def +/FontBBox {-1 -234 524 695 }readonly def +/UniqueID 5000833 def +/PaintType 0 def +/FontInfo 9 dict dup begin +/version (003.002) readonly def +/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMTT12.) readonly def +/FullName (CMTT12) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch true def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +end readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 45 /hyphen put +dup 46 /period put +dup 64 /at put +dup 98 /b put +dup 100 /d put +dup 101 /e put +dup 103 /g put +dup 105 /i put +dup 107 /k put +dup 108 /l put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 118 /v put +readonly def +currentdict end +currentfile eexec +D9D66F633B846AB284BCF8B0411B772DE5CE32340DC6F28AF40857E4451976E7 +5182433CF9F333A38BD841C0D4E68BF9E012EB32A8FFB76B5816306B5EDF7C99 +8B3A16D9B4BC056662E32C7CD0123DFAEB734C7532E64BBFBF5A60336E646716 +EFB852C877F440D329172C71F1E5D59CE9473C26B8AEF7AD68EF0727B6EC2E0C +02CE8D8B07183838330C0284BD419CBDAE42B141D3D4BE492473F240CEED931D +46E9F999C5CB3235E2C6DAAA2C0169E1991BEAEA0D704BF49CEA3E98E8C2361A +4B60D020D325E4C2450F3BCF59223103D20DB6943DE1B57D05DA0555DF933BB0 +7B42D264831116C06C79335D519461E7B0E870A6715E3D74A08D1BCF86E3BCC3 +A43FC6BAD1C68BD9D4AFCC06D845FD1F1E70D7A47F0BBCAECE8396E04591E5E3 +4797F646AFEEB7DB548183F0B74C9BB6BA2AA04E7F5950EC8AE97C741D4B2C5C +A8E7A8DF5A36A30B5A7592D95E1DBC63EF33C92FE459792CED29E2B8B6919251 +75EF62089BD7D44A6E1F9B62EC802FBE62B821DA1C3B2DDED45D27964AD29ED0 +9FB7868F3A8FEADA87A8E42D52C1EB7229D7C79B60BDA263F2BDB025AE14A507 +098FA274206BACFB4A0A7257D5998EE8F0FDCA79CB61DD1FC59DADD11E16BF02 +ECDFD706CDA1E72054D4EB55AF7BA9F19955886BC0BD6E0E3FE3769C94AF3581 +DFB2BCD67FE2892AF07E858A01280194D8DD7332B3D0A585C87FAB056C2EAA9B +5AD48D1C9F00CEF8EF0D1408DBE1C03D04B231D7B8D5D998FE0CD7EE19828EF2 +F988EBF6DDBFEE00F04A4A1F4E1A55DED7EF3AACEAB5005F1962C724A017C914 +2936E2E0DF26A55ACD7DD836C6035CBF07981C1BCE3615064F0540A1034C69B4 +E3908E76EF8925D486DF0B4A8E1F02D8AA99585A7C31847AB9382F83880C1C21 +C496AB2DF8E7BD4643B28B704B5F6B53429D3EE940A79135F5BF0396E5B46F23 +42AF406C26D12BEA7A41F332AEB75DF43C15334CF4651A99F602036946B1B91D +4BB0D2E51C20216D892C8173241AC8FD15A37C3CDD8AB4FB67D8565AFA61C068 +95E3D6E46D7C09BBD09428207D506AD43C693F3C3D787F6A5C39084AE45E81C9 +830900DB50DAD10A17E118FB5E9680B5194716A788FF7514A1167DD1A305FBE3 +FC1F39A39F5613D50934419B95A4A2FE1B6C18912CECB86726926F6B77B5C3AF +F38F85F974A2D2145BE010EBB4A390B842BC222AD4A0B7FDD882668C04C51F19 +13FF91E7CFA0A0F4E99A1944B272E0291BBF3F9ADFCF3F625B87377AFEBD9F11 +6385726E908BAB7D1357504048C0F5B26251A1FA52F08BAE1D64B9FC32A684AE +896F3DD0AAE9624050D4DFDA25E581FB2630E8840AC5322D38B92F3E77B55CE2 +91ACB8321BE53A2C7D274D63CF0C68AC833BAF4B22B26EFC197D4A893A5AE492 +660D995DA9294C16BED1113CBCC18AFCB5968175EE2FB374B1AA261F22CD75F6 +6E7295A254FEFC41A66EA6833A6A4EE0E75EF6B6FAF292DC5D2AFB61D5203DB5 +4BAEAABAF39E9F98B45F22F2E37F337A7BA412807A31B4A5A4E1627BAA964B77 +6AA397D368985045244ACE969799A9489CCA8FEFCF2EAF262ECE08BBD9573C79 +2785F1004C34F4D728E9E820B4133FD5F823B067F6686C82BCD35123E4831E38 +CDD5ADB098BC3F1B4162F45B11ED39CFB65DB1A10646D0B9FB5BBE475031B2AC +9E0769CB063B82D1232E24CAA86D9D5DBB9737B1E69608106D34CFEE3FFB4213 +5DBFB88BF9012F430D55CF8D510FAE1524FB065D71F9781548B302CFE791BD03 +3057F5089784DB541D8D299C5CDF6423AFFEE19BC2C9114E0D85ABE928884624 +5E75A98EE2F7A8F5E99A7E943C255A8388A6E02BE7EA7C091CCAF8A574D4BCBF +A55C5A52F94E0E553A03AE4434AA09AB5859ECC86C49BFCF99947E1E073A2BCC +E2787821CB17F37691E51E830A2B3094386555159AE9BDA2590FF0802F1ACD5C +8F11D85F179C02A33F45A06DF0063B47B2442D8A9A975937862F3A0FE3A5E339 +453CC574D7315AD20D2647A5C7A190C632F782943C22A8778DE08B591A972A46 +CF62A4FCD5A2D803AD8308D2894B8837D26A3E560C98BECB5A1CBD336AC82648 +F146E894011D0CDD1A2766A07FC3EE5F382171805DC30FC1E12956669E713081 +84D255B9280CC54C75AD3DAB76217343E434AD38B7A3121C5FE630BEA26DE2FD +83DC2539BFE46B5571EA73E3F6643B90F1C8D01905CCF7D311843B5E9E36A8ED +761C81A06B5A31E86F4460F5FD6EC3754FF3D11BD0975A23B764E4B51D0C7048 +31F482420FE8C1CFA4C158395C5CE454A8ED558DB7A11B5C7AEFCF65BEEAFCD7 +9B0F98719CB8FE611A924C28E32FB3BFF145BD613C74E4438F8AF37B3AB1401A +1E122B8D9B9AF5CB0ABBCDB921D4A603AF221F01DD69D7C80545264B3C45FCDA +25759B22BD1E2E22A3BA6A1C30D9D49E11B3BAA8F82DA49D5473914CB806F263 +03E63D18EFF6D0872F3BF6D573CF64D692E69394A207122F8E7FF2D0AE26FA1E +9B24B6ED94D8FC58B8D3B3C5C6E68B71A48BCBF15A778CC208D4D5EDF68A6E99 +EE8AA6DC84CCB00037BFD8B83F00350EC1F03F8B0EB4B3C0B9074733436D1A34 +E35CD79E927BCD0CFFA629D144F71A12DB5974FFB6B0E0DA7B6FD204F9C3548E +AB081BFD6941AAFCEF045AA82252C3E903C56B1CA12D46B0959479B4C80D346D +1110BFE7F58BE59B547EF4F8BDEA3B25043E7B7FE30D31721BA9FC316036074E +96F1F8358D29438385828F22A6B8294CF98C51E749E01079A5DF6DA3BA79D1F5 +DBE0E751395D6B471606D2DC3FB8FF67E9D7E60A45F2518897186CE1463929AF +1D97C372A0257B04DD8A63524DE5812951E51DF6D5500DFEC3A0B6EEF591A9B5 +19A071089E55F7EBFD339EF3AEF402DB63EA1208BF1BD9E2029A3B0ED74530FF +E1029CFBABDE8EB84BB4BB8BC77B7E303DC64348D7D6E6D195EC75A86042B31D +B7951325CDB85694AA8BB60FB92C60205CE758F2449DB29A73BBFAE2FADE1A36 +2608837AC1D0EA690CC5F0ECCCB745B68D25A1D968424B84B4D7430993E3447C +926E20EF91A80D48C4113BF7F732AD8DC1155162DF98F6B18AB911E33506D543 +866A06BC3B46B0231E5F8E701794F6C4D22C5553421D391454AF46A2E57E7075 +18D3082BDFD0B1FE8F616A0E5E3B6B7D26AE83D6255A244553984FB963DCE328 +83E0AAD3A215685A822732FCB67EC329BB2D4EAEBEC5AC2C451DD702CDC27FDC +97A92428EB3FBCB26A4E68EF36B8D6F9E2E1AB6524D806B25D33ACD6BF0BB338 +48115172DBFDB7AE6A62FB87F8790A1788FA96FE9234C92DFE646BE3D4C3D8F9 +6F03834D679B32D8B05551EB1F135BEDEB3297493CFEBF6CDB879D9ADDC8867D +67024403B04E3388741C059074390E6F0781823F9875696CB64D84F440815036 +DB2BA2A9996E5277AEC7686E7239AEAAA21590FD5D1BB8CFC587F8E71AA2D121 +12ACA259465CE17000427203489F266FB09562B55464D3A6CF9F3356D49ACA5D +031C0461261FB773A976C514961C773F77B8F703C6AE6C88173758DD73690623 +16CC78F644237CAB3726CD9ED398095465F29097327B8D0F4E50944647A96A1F +D7F1BFCA9A1596D2F68C042F470B66D73C2C92A174FCF1A9B2DB236AB4A76EEF +70B42F3B65B38775B589A36B55B0ADDF332662F0BAE5360D13A2212541ACD822 +2318DD57D048363BAA7DAFC3AC3BB5A60105C2A2141F1695D7469A84909F3A8C +615F3DF7B02FBF1E3A3A5426FE68BBA888FC073F6C2FE7727547825EFBCAEF7B +9050DCA6FBBCCCA91E538F0093FD5CBDBA8811E79C2BD2185DF8D17CF7CE6F3A +90B7C680DF106F5ABECEF7811682D79C9578B092BE3820D6045377F003BF5AD8 +5D8BB13A61E75D8B20D201522FC3BA1ACD67106246926594AD9E1914F0EE4557 +4008A3286A2792D5E6D3E67BB6AC948295EB0064D8DC68CDAB0583527632CA05 +D6EA8A92A23B7AB6DB4EF7EB951CA73344AC37CA00CC119F55DB4E2FD0DD9546 +35FA1622015C7E7B1B3BDB035A49F160ED0F7DC915E37BB877598C3A9C84F60B +5DB3B42B85D24549D34CF85B58C11900B9B8C7CA6188D2697B5AD4FF8B75862F +937F3485D032A438A36464F5D1B7F74053A435C034C41AC5B58641A7BDF99428 +2F3111A7BFAE57D9A47D3A4E74C216B5AE744B6F8F653687CC6FE421867B5011 +EA710E28E31A0F9C5B6E230772CBCDFC578B62EEA3F44698AC3DA27B48D7E3D2 +C81310DB70F7ABC2F245F15EAEF6830D134CB908649A0AA927A0A59116948B1C +5DC93D49256079FA692DBD8642933AEB115509D0CB976964CEDE5676AC47D1AC +4D50B1FF54DFE905871DD272AF22BD3EB27E47E248CE9D9609D0C1EB98B18C18 +1284757D1090682A326CF56E264FDF5053E658D85C6A33B6920478AF331CA90A +2630CF4BCE9B45F192C23FBA88A620DE298C7F22C46BD3552D7645B97A598605 +555ED30E464A2434C389FE078B70B1E51E938FEBD2AEAB5EB2429CEE119AFD50 +041078B9F352A22E270593D50A7C1599E62D4F6510978622A2FD9619B1681D7C +DC36C65C7F67A6417DF0467F371C2F8D93017B48A93F2388A355618BC26030F6 +A9892136D3CE5E0773FC6F3E80BF5742A423F6E4CD452F90F3BC3BD57BA0F5AB +00D833997A68A932C4DD0FAAE6228BF64E1BE565A0AC6AC05F3860AA9D6C08FC +C9333FCA56B91304E70B01623EAE23103EE845446289735651F4F392BECAF7C1 +B4DB4B9BAE1D9001D51DC2C29CB0C7B9159EF69C5C510EB06A0DA3F4D6963D70 +BBBA90CFECB9EE0B0739617AF3052270465AA9D376C507461322D6536482521E +4AFF6BDE7F8A52087F903BE7C6B863C4801766FB57493CC63B76AA53F8BC6488 +43E1CBC68CED44FD45BDAF6067C3CCCC6D2F2DD76BB211976E04B58183775936 +B7E4F9105A597E487AEF1C1127512198DFE01E2D8637477FD8B7D6F71E5BF480 +50F00F624B93A053B6E36F0BABB04C50B68BC5EFE96D2E1D +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +{restore}if +%%EndFont +%%BeginFont: CMR12 +%!PS-AdobeFont-1.0: CMR12 003.002 +%%Title: CMR12 +%Version: 003.002 +%%CreationDate: Mon Jul 13 16:17:00 2009 +%%Creator: David M. Jones +%Copyright: Copyright (c) 1997, 2009 American Mathematical Society +%Copyright: (<http://www.ams.org>), with Reserved Font Name CMR12. +% This Font Software is licensed under the SIL Open Font License, Version 1.1. +% This license is in the accompanying file OFL.txt, and is also +% available with a FAQ at: http://scripts.sil.org/OFL. +%%EndComments +FontDirectory/CMR12 known{/CMR12 findfont dup/UniqueID known{dup +/UniqueID get 5000794 eq exch/FontType get 1 eq and}{pop false}ifelse +{save true}{false}ifelse}{false}ifelse +11 dict begin +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def +/FontName /CMR12 def +/FontBBox {-34 -251 988 750 }readonly def +/UniqueID 5000794 def +/PaintType 0 def +/FontInfo 9 dict dup begin +/version (003.002) readonly def +/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMR12.) readonly def +/FullName (CMR12) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +end readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 44 /comma put +dup 48 /zero put +dup 49 /one put +dup 50 /two put +dup 65 /A put +dup 66 /B put +dup 76 /L put +dup 77 /M put +dup 86 /V put +dup 97 /a put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 104 /h put +dup 105 /i put +dup 107 /k put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 118 /v put +dup 121 /y put +readonly def +currentdict end +currentfile eexec +D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA +0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 +51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 +7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 +E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 +0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 +C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9C535A5E57376651 +F6823308463DC4E0339C78699AC82C769542FD3B410E236AF8AF68CF124D9224 +FD6EE92A38075CAAF82447C7AF41EF96F3ADF62F76FB425BEDE4C4124E7B1E0B +8BF254D91912D3A99557F5427907A56514C5A3EB961B94112077FE9417B70DA0 +B2E1C1FA3E1D6F01D11F640CF848E45BE3E205258E64FE36AFBD4DF4E93F6B1A +966C8E7FBE2CC8FF43C1F67BF6C361678B5E90F4BA524FE8A4CAD6AB28183E6E +CA6C9636E884845105595A2E40CDBE8D4807A81AF4DB77B31873FEB221BCADD4 +2C4669459704CB58A7BC230FC59F867EEADE660E49AEEDEEB042BA9A7DD8193E +56C3A36A1F639F7EA512EE4BC6992F52C2FC82A890EFDA730105B0AF7B819295 +EE00B48F64C2B5BCB275B1DD62F289CDAD4AD9B7EF057684642FA6FA6322C277 +E779CAC36D78F7779CB6DE12638B3C65B70C6B5F8A8C6421A379719B8DD44973 +5F52856A4A29B2ED37F2B1FBE6EF4B79B7C0CD6395C756A00FACD763C235914F +847D1D99831023CE1FD89EFEC83AA7E313131C0C197248605EF5BA773D0A4000 +72F607551A8EA6F0FF19441ACA179177D1FF7B423FEBDF58B0C19CAE3C10EEF6 +3538D8FC4762B77C5AA023A8186C40D0365A4487DC3564265B3DF908572DEAA2 +57E29EC669DD72974F806EFF5ECAFA9ADF1F9D2A63087FB7BBD100F0F81C6FFB +B1EA1C9DD46548AEDD147EE64B1B4894972DAE1DC3E8569D6A3CEF9F9E46DEB7 +547E10BB2959D374A33E47C58F1B20419920AB485F166062FCCC08EB5CC9AC88 +F388F0C0155027B727729488E44CCABB7064A1432E179189C4627453C5231535 +47D1F2B8BA43069696830CBB6E5F9A135CF22D3D1FE490A3A63C088EA32FF444 +24A2427BBA63033DFE2E06DF8CE67949B6AB02F26335A376B57376814D2A7DE7 +64A4347577EBE9A6E33DD2FC214A09C6D889C8FFBF1D567032548851B8F97204 +49E215CC7D222F593E1EF1439ED60AD922D41E0E9EFB5CA48F2FEFF75AC5FEE7 +FB6676D8B8D4DB6885FBE8B61B586313E4DAFB09D94CEDC0507E93000104F3DD +F83865A2C6F6A7DA8562BF86F5DB233CC9B53391273A1462E40876A8AC2B098A +DBADD5A160DEAC061F86A5FCCAB495EF8A9D121AF07928EAFD56F618E4EAEA97 +CF89A3AFD406FC9DE1E9769C1E1EB83BB883786BC075EB5DA2692CD59C4DD7C1 +7FD2FF9B18AC740A390C1DB38670DEB18C67721A1DCD502FE7368F47DB4281D5 +459B3F020595FA3B10544AAE9EF786A0645FB7C9BB29D091E1432CD878A05918 +1665643005BFD9A4B0FFD347ADC84CE22D6F9AD4EDC05E8C7179DCB360AB57D1 +6ABCD200A4B4AD56825DC345984D9A3DE11CDA5E9EC1E5006EE4181E4EFE0846 +67D8C27BEE8F84A1E01947E945BBE988702DEB2240C4BED952E433E5305484E5 +71965D3DE95C4115FF78CE9EC18E323C599727C8B93CDFBCD1CCA780DB8C81ED +C4B5E596E1603624308972FFAE9A57B0EDB51FDDB6E23EDE2946F61BEB241345 +2A192D8CAD53E823D687F9C64A70A4B4B703291FA6317C051DC6A44BCCE0288E +3839D726A8F2E39BFF429865E95C726E808E02CD06F36C1CC9AC77999F8E28BF +CE9D74B699CA982479E9D0DD98EAB24D29C981EF0349721D6819549A39413801 +F80182D567EE316E2F0AB208068E15693E4C399A381BF9BBA625E597E6E109B8 +16F3A84C8EC92F2ADE288821092A421A8D3B907048FE947230810F0777EE2542 +29A3485223FEA079B359034F70464DAD2F0E420271A4E0CCF57A0ABBC20AB327 +0CA71B292126D395E0D083B19BEC6B48A9DE2BF470C3D01A8C3F52075BD4BE02 +A0C518355814478202FD4762EC542F8E7B9B1F7824F0554660CEB83E35635E1E +DF0D03C94C903ECB36B4948ED98B6324E0094EB1DF70863142D4ED3A932D7346 +39D69F8F044B6084482D7748C27328AFD24A3A70B99D1F7D32CB984488672254 +28B6A9E9DCA2C9FF6A1B311D72413404B3CE5428BDB7FF3C36357D7975184F56 +FA6B32AD54C37D0AF7576663AB1397B80D4E998F0B4C4F6D90B483029EF2EDA9 +D4C4204C1546EFF3100629453EAE01918D09FE104E626ABA38646F17B6A94CE8 +116BC7A8D9C319434CA5B830859B4164DFADF1D7C3ECA5C78D8DEA930EA4AC3F +59DBBF3148C91A2E807FB934E3439D4F67C6DBBA9972854E6E3688E1E0A34B74 +482217CFE031CD7B5DFEF727C3EF8DAEEEDA08F4C90289E62FB2AF2357EB2E45 +4BC547980FD479101FFEEE477AAC6268DD659E8DD9E244676FD3C6909713B71A +323B211E571BE711D103FA23B5B9AF077D84E2D20FEE805E81D20C03501F0F17 +C3B081946CD0FD577F00E50B76CC37CFA97A61B89C25DD43911B28857284BEBB +5BEC61FFE3A14C64BC5425A7A82326617F6F1FA4FEAE56071C9F559F91568179 +46369B394A5CE96FB7420FF8AB7C61CB83492FA5AE4A4B0799578594C9EA67E1 +E54498AA5CD6ABA34AD3417F04F5D8D664A7EB39D41E2D17643CAEBBCCD9C38C +C5C9541641A09335EFBCE0D276A54253EFD68141807A66F1DFEB4BEA5889FFA3 +4D20BD52012206A9F8D3E0F6AFC03FDBBDF3E51506EC6336E249CEFB571AB84C +BDF8E471E3795C04E38A5306BA6D450D72E50910D1AC385BB06CCD4B8E433A32 +5A4B7FACC976BB31FCAA1E62DB2C4FE06DDDE7367930E336B49F47DAD91C8735 +9A35D80CA2E117E86B52E41E9278046ED923454989E48610ACB3B1663F197117 +52659A9D7BFA561C7ACE0771794FC778675F83C5EDCB132AF124C7E6540A140B +E0A268836C73A3C746DC964E482E63C56C0D396515283970FBFF182F9F684FE2 +655FD8F5D057D22246DDC3FD11B77552DB4D90ADBAB77BBB1FB1592129DE0AEC +F822D7D36E52BCDABBD560B403A5C56C5E1BE789C3AC049318C7FAC5E5861E42 +FD66C3C0F46361078D7E036281682BCE9BBF77983C93ECBBEBA9B359769CA442 +87FCA1B98F4EEC4935CC93B08AAADDF355C99816453587310F08C50B9BA3D107 +5388A1F3AED2AE32BEFADF0285DA90436D1D7EA85D7B9B6DF2AC4B778CFADFF6 +6EEE54D1A1C5DEE3CCA7EFF57A7C2931933CEED90CA26DAAB45E4388EC4DC366 +B9E88518D6CF094861D2A59282044CC06E63EFB390A6DF4BA5EAC7CE39E1EE03 +3D84099F5BE96612789AF3EDED07266EF10A0FC23EA1EA97040B6BAA63138B1A +A9CB8F5DED781260962D7618EDB200C3ED976033E8967A8CC676E9C11F74BE34 +343A7ECE7EE97E8F76F7E95517A6D6163527406EF5A669535CB2BF4031F29046 +BB2D0FFFB47A576F5EAB1D00A582965C56F28C00B3BB7BE2CC8D8391F789070D +775EB775437F0CD53DA840BB3575104B63E4B0BF14E3F14B320EDEF65FD4CAF5 +8596DA491BBCF3153DED3B718F833D106432DF8DB8B8E6B34D5308C9010A5DD0 +7E0E53260BB84BAB3EA748E8D72F75901604F80F4416920D69B4B983DCDB72C5 +E9928F01A4A85954FD74578AE336C782CDF81D1EB7EBCEBFBAE7ED8AB4862584 +397928F502D65139CCD582CF0723C5262EE54B9D2B8C39614652A8A90E1C3B65 +7D26B99DA298FE4B9A7E98848F619C9BB4FF9FD215B72F99506F06355B332689 +37D80AFD9F9ACD8172CDC51FCD3A759ACA0F7D4EBB07840840EE42C2D5B8B257 +2C6DB3A7657B75F2F0B9730A20112745703E2D0FE709436CA6A5F36F59E64D9E +37C0A23D6D289E1AC1DA273872F5FC5C3DA2B127F078A4D7AB3FD7E124455817 +DDC796D54EF26A1FBFD539D3A21B86DD4477DA49213259ABB3FF241424F2BE5F +89151E02FF87E0BEE26E85C0E518D8BE7CC9214B8E9A9EA1DBB49C6C212CCF08 +90C0F23E9858947EE344062EBD9C574979087439975EAD4E85CD7BFAD3C91CF1 +EFF577843AF1427D06CB2F3BB519ED1591974218C43F0D2038665F9E2E3960B7 +FE68CD3CB2DB6B36C7997C6B21EC11CF1DE049541001FFF26D14C255E3AE862C +5A5701292FD2FB3D04523D6E2F3547923BB117718DFB6E6520F0D0B5450C695B +8C9242CC8671B7284CB2E1E9EB097A3DB1B4D5E8EEB93B4DC7E38C0A10474665 +54DDCBAF079B92EA494F6FA75A84C5AAFE280284D0823D7C22249A21044BB0E6 +4062074ECD17B62E03EDF4945A294BFEFB51F5FD870D9D7230FC91B83C1D85A8 +86CDDF326FC90E04362145D6E8630C50594484FB829DA18F5C078F2EE67D2F2B +08DFF39AE2E8C9741FA989AE494C7166F122D2C5F71B97C973B7CE8500E9F87E +D59C30F2E99CC4D34713DAB680598F41955FBDC26A14CF1E73D6BD6B9AAC8D3B +B998F2D0D647356CD236DEAD6561389ED3A6746221B0CF15D6648412B35A6B54 +6A0EF5BBB34AA376D9BAF025BFC650C1B74333CE85413D0EBB2F4D082A26A5BC +3C0A25D2B12CB159F140E00E262F1CFECCB2C802FF94CD34DA0CE9B4B3830FB1 +DA85B9B670D5169928990A2E9CC869891CA2FFAD9774E6B92549644DAA5FE00C +A5BE4F5FF91A0B6D2FD8F96121D766391EC4ED3E73DADD476B7DAE1A50AFCD98 +DB7E27E44D30416088D9BC07D4661D9ECEC0806830ABF14CE55AA3CA2DF66E8E +748B8ED46466F1EEB072AC0674FE6FED231E0DDA59ED7C42BC05EF00E176050A +C4834D893DE42474EA20DB1E25059E84BD137EF65A02CC295B0FFDE4CDE95879 +0FE88BDF2519ABAE7F8CC3E6386ED35E04A14F1E3861922645E3A3F43B48A5AA +1999A5EFE192515FCC625C829FF5A7B337AA422F5E920545F9BB269C869A821D +6C4C26DD2AE746EF0F0B4C1E7E9871ADB5270E1CA9BE28225F7A0370D4C52422 +E25263EE101C4EC1C7811B05AD42F364844A56BB91EE72FC8ED53CC6954D2BD6 +F945D739BE4C61E36143CE890FC0CBF2F610018D678ECF7CEAB18FF5A0E48F76 +FDE2463D40A99380D679B3B76D39C664F4992D23E5988B0D1AF33DFB04894016 +E852EFD1EFFE586153C0F31ADBDBDE3F73FB49C5EE64D0D02E1504248FAFAC3D +903FD44679BB09C30288139B41B1E90A10139CA3172677250B16535A1F3E5E4B +6F4264DE58896E66051FC677030A121C5A285C47B6129CB5A3998830CE070D21 +2F093FC1B44089F603A21F45F60960F134A47226874C737EF6C085634B0A4A66 +139420501351F737A73F39D960EC38420BE46E5B09D298E7C16B8E32F01507D4 +0141FC52DA1DE718D634AD9C8B00E46EEEF84356759324D2B9A3473C5DA38DE9 +E30182B87F91B6A7F7BACF29A93B44C879CCDEDB063F9D2E51E0F1FC9F018FE1 +2433D85AF24B55DE3A61C4D0A2DA4FDE933F5F6FDF17E9FA9932BFC46E2D71F6 +585EEF5B2E4E89E797A24B799D7F064DD1A817A53677FC9EB8CC3E7F93FE50E8 +D50E3191052943FD6C98B573BDD1F6D70349E1F8011599E3F8FDF1D6E80A710E +51E434E85801617C6FD8ACCF1B77B4BFCCDD35CB4C0367F4EB4D8D9DE8284D5E +B4F43E2F8320C2C5A9AE90ECBA7E65D377E91DB69FEF27069235366AD3E126C3 +A73CE97F4C90BA00D206FA012C327FD69EE59AF4470A315B1799CDC0539BF90E +512C8FC3BEFE4D1B01D969EA9E3FEF976CD6E0FA4C9ECEC955B265CFD58AB8E5 +F7371E479279EE14B689269205C5B506940606CF3E24A1E7EFF3CA96ED30AD6D +E243DE57690C3D69A401AB3315FA49E4BF4ACD4DD1CA39272533E82EFDD508E5 +1C2CD286CCC5DE1202C7C7F654521750632EB637F918667E2233A43DF75239EB +F28F3129EB5DEE2FC5BFC331FF709B0FE9B327CBBCE98BCA2C861C6547E50407 +1218CEBE6EB5F9BABA4F2E11BCC6FB553A544A567B459E06375102C69F8018DF +BA6A227CFB13E2D74E6A521E01B74F2963E9A0A1C9FD87A88EE6356E3BFABF55 +BABC751D2BF85E6712E8EF57914920775906662E4BA68FFA21AD422D34E15578 +43CA0568B431101A1194F8AB1EF25E886BFCDFC10F4A5EBD9530816548BC298E +AE4A0B6B52B8B59C644C409B4191B6F4203F52314F2675F02AEB65A72C66E92A +2AC703E15D8D381522C0AC30C165B822A9B8D18CAECC094EDE020756018DCF51 +D0701B507519C4270B70D8CE94B436F640C15872F9B5B77892AA3D110E4D6A65 +8F0815C61A5127BA25815378683F46E69E54A391A8675977E7DF9C2D4E6FA991 +9F029E50CC2F266B31EE9F9F24452D5838905F330CB7E416B8AF836C5AC26AB8 +BE2ECC6EA4BDAA08C30995709E225C21D35DB6369167602CBFA8DB2697635925 +969002CD1BEE745DA2E56C17EF3F0C05E3847147F86963C37A221C8827195A8A +3D38993E4939AC915BFD9A212F5FF3F826F742B952018986F9FBDDB69C3AC65A +845F7F33C55D4BE60A1817EBBCA7E1538E8087E1BD5C083A320D52953BE65F31 +E8339C612A510B59CE48D2EF7061560C4AD258E7DC59694493E3AC878246F37D +6DE89253EBC8830C6B209E818213C4AC4CF1F391AD91D57BE76FB0E2924A1407 +E4A949C905E44F54EAED6419F13D59942C8079336A172D4758BEB5D3E786FB93 +3CBE4FD2EB53E4E1DAC34E821EB30FD44BC6CB4298242C38F848FC23AEDC9733 +52BE6F32E31E25F18301370F8936810B0566B664B042C7AE0D78ACF0A87E5BF6 +F9B66E358168B2CEA30DCD940074F3ADB793CDB136161FE2522905E87B8E463F +95D4DAB7E14A3DF7BCCE8141C5A08FCFA2BCE9F2D1B05A7642E75877EB840149 +AAB007CD239AE47AD115929427717F219B0A8907F0EC79ADE1B901DAEE87A2F8 +39361DAB43DFFF69650F601B24061A9353CFD619FF9626F63275FD09A5B13BB4 +8B3379EC4D147C41197E8387FC04DA7BE409524CEF74EA91DC066808A7FD0EF3 +957A44E2503EDA67B1C61827479486134E922E560A673BF314D601C66003CD07 +55569085AFC8428389A140EB976CCFB8F29E27587E46C413ABE2EFB51AF5913F +53EEB74063162E0BA1E24CEDCA320377D3E11BD374F0B44E132A5C35835B6E2C +D32948EF9DC7931D104C1385709DA882DED6458319F21C2329938396BC074106 +CB9CFB9E0A915F8DBC8435F386917AC87A2BA45D857EC30ECA66FB4044F5439E +CDD556B82A0E43418D179AD883C85AC276E1190CEC242E3E1D86E725ADC39E46 +BB6C47FE9E17E29F8EA81E870302A00D91434F3B7A05F243176E6EF1082541A1 +B9052191EE5C2B8E94A2E02DB65FC769653CA8D1C07A13CB853544AEC7FC35C5 +218DE3128AA31952DCE19C55C23FD69BCEA2C661F57B11B8F9E86BFA718D1521 +3346E78C701A5E51923D6D937E62FDE3669B214D240538F069A100A542720A86 +31DE88116DE775F7ACC2A49EA6C02A24408271A846990669F2AF60AFAB4C16F9 +7F4E88E917F0FFDCE68F22998AC0AF2A60A73258C3A4BBC42A2F918123128195 +196D0E150D79AC3CF4628503D1F3FC528265ED8324E56849A47B3B07C29940B9 +1BC270071E221D355EA51E9942D3BD7F99816304FFFC8F5B036C953B38759341 +ED5D7B9C8E6B70C409DD8362FD291201CC385E4A98D73E8518A4C0E544152563 +82032FBD2FCB6E403D34B85ED4053A8CB619BDD4DE001F4C3007B1F317579651 +E6D6662189CC2D95AB85D7473F65C5D7B4AC63B0FE928F3400035D5A9D443D0D +F3532B99F3AC26CB25EA3CD64C341159061E02EFBC7C033C05CD919BBD827A6A +BFCF3BD739E32E7FE909AEE068D50FAC33605FFF98C7D0115FB860178FD03DB9 +7985B78E0AC21F2EA065FA841F5928FB85163B2E2D8F850DC7EE313912C45C28 +2783F6762C67882EFEDDC7E7567F91C16B16FD8D5A1ABF35B5586307701B91AD +54984598F2AD46FEE3D68A2731BEAA754C8E730FE0E84952EF77930E4118F8D7 +2F3AD7552BBA90D0A74404B5696A3929AF269129EAD44ED1A5D8655F916C8FC8 +33AAA8AC9CA8A2EB60D299F131D8019FEB315F4D41CB2DA11021C368BA40F4B9 +E6ACF209E0F7C86DC471D27A295B9EC17A04E4A958BFFBB621FA6AD0FFB0971C +929ECA6401D0DF54743E42C64F967176CCBE7D344CA7464B03E183EF3E26A286 +C5C6BD62ED1C25BF646DA36F0314F29457C2FFCB2E9162D7EA8570C54F7822FB +23E5DFCD5F486A98A79626BD03193E683A5C63F6947CCF09D6C87B7FA840C1D9 +CF84DD04DFCAFE1E6319363F4C54E6076E6AF8D8C3C9128EA5CED6F0E7EBCA9C +2A32BB23DD7E279A0DCA3EEA89F53C8223E86E6442E9D50A49E64910A6493446 +AEE72A74525C5B39B22256359751142DB818A0D1DD94B941F215FD6583BA33C4 +B5E1D0B7FA670CE12C3727640DCF012E9C9A73D4B20E4199888899F5BAE37376 +58A536DD12080D7BBABCC5867679A77EB6DF0260F4C938DC6ECA9EBA37C61E65 +49CA66A514D4D2BE46CB742FC59269EA00570FD53675AD958A9BCDA1E3BF603D +CFA3E66B18DB6FC5E3D7036DDDF0E1FFFC5529EA37D9D79D7746FC616E2FD069 +3B24D8DDDE5F0D3641157D476B0D6E3B31E3EC293154E97F3782E00C16E048D3 +3A8C71AA63F0908630F65EA5D6637DE84A4DF324ABA031CC5EE5129123C47C90 +32E99B7B87EA88FC09EF79551A91ED7399215F661895ECC7C6C24ABC4DFE04E5 +34109DFEDA8C106D9F7C4A6E55833951B8165F84E32FF2F661B8F9CEFE44E5AE +258D5893CFC31908E757B01BAC22A61A2BF34C1C1FBB9B168D3DFF13AA5995F0 +1843FA30C1DC4617CE087090197765D763BA62BA7F58753119450CF9056011CF +0DBA8297DEA16AACF98EE4890C521E5B5BACFBEDBA29ED7060F74BB73DB5E6C0 +82346567EFC8DFA4EA605AFE8C5FD2ACBD97985B42A37D860C70B64676C232D2 +67DADF1A9D4FA01A35BFDA989781BCFDC3D7061E14C3F4E173636338B61D156C +B226A6926DE326001B5CE1DB0A2D8038ECB0E753145828F1E8CE02ECC859E211 +86D5C66E3846811EFD43CA6FF55F1288AE18EC6307541AED3D2C913AF9405297 +14FA1BC41ED91FAD38E14FBB20EB0A7712FC808476B13C27077057630FB7258A +E0E101D58C20D3B45A7788F0D2A21DD10163C0304762A700EE46CCFFB29B1EFD +648BE00CEDE3C153AEE1E0CC3839A0FF9A7E84AA9FA96891EA67A537F4E25746 +BCF673DD8B15C1F12CA0FD2F7BA30AFABE3B3A498FA634CC9D28711C6FEE958D +50290D22EE870A89C3233C1C161D7A3C9C6CFCDA19AEE156C6958C83707A483B +2986F5789B885F154FB6DFE527D8BED4265AFC8522E6200E555F5098CBA013C6 +8BDDBD29639AAADB0BD00AFE529E542684F7516321DE443644031E660F61B643 +3FF9D5E55017F00FB4D315672CAB69DA46F691BEF7F761D87EB2D2263348781C +6A36BD0ED6165123EDC87F6BDB1D4D4E7C03810A90CC45B1F496015E7420C91D +454FED981FE7D38AECAB724E2A370C56E4D9A62D7A90183F71B45292B5B55F08 +A6E4EAA41B35F81AB501ACD2F163B877EF62F0C2CB23494F45B1A3787E86801B +2CDEC66617DDFDBB1A62F0172FA063FAEED41080B82BECC448127986480E2056 +753F72CF2C7694999BA0977153385B0E2E1F0CB73FE208D99D0A2BB77AC02822 +F45EC3C84FCD5454E605143D6786A20EA2CB28A9E107926D5739316F0F774DA4 +30EFCB38504C1A86258D2F750AD441D5961331B0914490B4BCBEFDB8AA72C5F3 +00763F0D299170A34AC5DA3A785F1BDF365DBC7C4B15C8966CBCADD9EC6C048A +8D94798A6154002777D2DF03C8C6388A600D13BC1EE81EE2B02BEE0C38A20F93 +385C1075EBF31F95C3B4E3F6722F60DB80DD731F2239C1C12A5BD9522D5A1B34 +2DA04464B5565AF29A35E0EFC7FA91D2E9ABFD008A606DA13F3E3B8C07D9869E +810EBF01EE40383A169F07DEF5CBEDC02CD3B99AA310E316CE4E197733E3778F +E5931F5E319C6D8C670F25624F5DD6EE97A5F39CDC978C8DAF1C07E6A83EF293 +E8AAF2B9CE57B7AF470A6DDAFCBD210BAEE6497C6ECD486FF0DD9BEC53F9230D +A1A1344ABDFBABE2F7D8DF7B6EEF9389C05D87DA7F28EDFF405C106E7A0F76E7 +61613BD0C9BAB43597235057EFBBD8D4758AFCD05B4DC548DE95E707BD22C76D +DBC6BC538843247534BFDB1A8E591C6CEF347D27E7B36D2F55D46314BE428E13 +85526CBC712FAEB72EA4431496B5C925158A4445DC4918D2944D9141AB37AC81 +76A21982291E6CA022887746587DC357232C0DCA9179314030A955D4953870E6 +626D8DF3514B22995C8B7B17CB7316B8E9720F6311B3CEDE860810287DB5E79C +7F63E23A8DC024A56D8958D00F3EBF0157F59929F4F00D69BB86147268490A4B +178828DE42B92D6061A0F7913EE72F0A968411C2EEF08E122A5A9D5B65CEBCC3 +B9C8F61A1A34821006ACBDE624FB09D104A3D68141284CC778A3F29E2900E40C +F1D5730526D90A5A4CC31C65F1EF0424BC729F1336EFA5AF0929176B4B68192E +1DA8DDA19F82E57474FE5BC09F9CCDE15C74D56D9ABB215C6D6ADD8CAE7F23C1 +28C4B939A9069BBD511D98BE9005F8B8D46541BFF944C1C389A811828B105DE8 +72EFB57C8909097119232B9DF1625B68F6C4CDEF105527DDA9C61433EBD0679F +A0FB4B013B8A2A23DC7FB55D27D24B5976D7B6B6D22535086D51FE3F764EFDDC +6BFA7053213441BE858436299F9BA777465F87622B46759CDB97B457213DEA91 +A3B3C4F20B2E04675304CB29EA9B502F5437DC528274F7BCF043D6294D3EDA62 +68B510C5979DA9BD79D729092E78A07A0AD771180E86D5FB31267885AD71D9BD +1234205A958E3CA44777FB0DFBF647997DA58000E413E2321709A6072470ABC6 +253741EFB6CF19B29CCAFDCC21A8E61F3CBDF3FAF79462A4EBF4B265F5180775 +C6E360C8CCDCED4EF326E31C1B00D77330D8666F56D79EE933DA673486DE30C4 +4F3DD041247B91C1C5E8BCD4D1036240C538736A3317A8E9BD86E3675C5D91AC +7F8E69FF45C0B7CE94ACDF0A34F42EAB4100E674FFB1862EF7856A8BA0FAD7F8 +6EE4E3610408355258B69A2FFE2BB16A9074D369577AB2D565A1DB21F2200A20 +E467D61E2A7E8BB82EAB91C1E55A008217995358502F8754416C05D0C005D149 +9E7045048FB9E3263ED71EB9D3F4929489FAAFEBA25BA97AF44A511C9279ADA0 +AE83660AF114B05C4F0D8F74637267F297F1C21D222DF83CF001A8BE71DB6E54 +9DBC580BBB2E331EC4AA4469912C2F8F2984B55C11D9DA493DC67AB77859F275 +41E273013B1F6D32D677826070B78217C84D3B635B3F77EE3569911E100A036E +F53797632441E7436922F5771375767C7A38DEFD5D726C57AAB568CEE8DE4CFE +C9B9BE1B26CC107EFEAE6367079D5A73D84DF5F28A62630E7AC717D72AB06800 +5217FC6112461AF6A8F289266FC24492A462E97B79A7B81823FAC3D77737428E +89E0C8F3AF3E03FAE9BD0C1D6BDD24F05169E115D6DFF45AAF743C07879D1958 +D73D076E11D15E1E085DE36610566C6616BFEFFACA1FB2503602642F4AD3E7F8 +52E4528C1DFE7622BBC7166B9C7C3739B305A668563978D242C59D214B6EEFA8 +DC5154F28F40558A9555ABDDC6436C3FAD02A0611ACC8C9A9D392782169A8CAF +69CBDA2569225BF6E169C0FDBFD957408FDFDDCF700B014738D1076425A90922 +B36098E9F8F781019ABCAAEAF2541492D1ED53F0A0B234D5DCC79D60A2AA3E7A +954B9AC9EA9FE07C013C9F658E83AB861EF1AEDDE6182A267B043CD8BDC88F4C +36D36FDD16912276BCF5BBD7F84467139610F593957235589FE0AD8C2EF66CB9 +7035A320B82BB63A128E450A80C201CE5B527C12916C921FC7208931EBF8BAB8 +533D78B35708AC0403C6260F12814EE0A50B0F3F5C69C9AB23A437CD7928C67A +FB5D36C3007FFC25FB510409FF3C7E9640821700A612979BA5C5E5B58904E23A +BB2AEAA860D03C3BE93BAB447302236896BC9F689926C4B6F5342776786FEEB1 +CAA9FE678004A797B11B5B46C17C90C978A83011BBE5C5D8ACDF5092DBCA9FE5 +4A2E7E5C93656670B1A215D2D3493149DE26B6A1D123497141E0AA06677F2E57 +B8984DC435B0C978BA57CACBD691128748A95C5D50779F8BA1D4200470102A29 +964ACE700F4F9C67E9DEFF7C8CBE574B75F9CAA105B94AE83DAA400A80454252 +BD50762E60F2D2D0F11EECE3A141C3E32F69A3CF6E6F516FF81DE720B4F6852A +2E187B0A0DD87F89775E041836623A1F3C7AD871DD32AC80E36061B3520EE4DB +3ACE3C9AF5E0D754933EDAC4B82ADC09CC5E18D3EBAAFA08B066359DEFEB1552 +B6F526693F3CAAEACF36DAB88A70C0099DC3F39D881A76159FDA11967EE987D9 +07A24B70F9776E347F6D9EF2C6BAAF9CA03150CF228337010DBF2A1BEFD9326C +F4BCE63D40C73447C28B54393ED283DBAB6DA4223FE20A89DF6A8D5F6D03805F +57D11E4CA7F35FEE57DDA402FAA196FDC573D7A9252D8489663D75006A44513A +AB8AA7C9E98F95D9FE9389AA7D79C08BC3C145AE3D02BF6CB0EEBA0F455B4030 +0C0603544C34D54DAF21E9B7272D48A188CBDD25EBB70E9813958442995345D6 +4525A9F1CE0544A05619A898BA05E2FDD7A595B771EB749EDC18E7A50CCF4A05 +09A6CD15095E344F8AC1B22A5BF0BB886B87F80C204AF36E903F4E8DA7347F29 +A37875D802B1980BF6FA7BA931879D29714D1BC4FF8D1E40B879F7EC079F2ADF +DF57E7541AA861C95FD692043A50C936C4C19DD5766F30E74B6787938A6BD314 +D8969C3E71C1826E22482F5D7D9758EF4BCC9112706B19396BFB04FC5B7606FA +B27355B6EFABAEDCF7D943E3E325912441268D02DCF977597CE70C9FEE929110 +FCB4CBA2D781AC410BD2DA58BC5E40B2FE6116FF416FF8F7322B8B8980C4166C +28BBC8F3492108C2BDB7DF73628EC43D3C057A3C12E9FEEEBA3007A1F2942460 +26E6133211389D1BC517710AC724FB0E9D91D065A7B001480E34D300EE501D7A +4E25272D328727FE03ADB57A4CC8244DE4F57895ADC0248E59E191B511748CA0 +22BF111767E464FB590C5A575325D8A0A5C6E377CFB7C5EAA9766E01EF33F1E7 +9E170632F621DEAEC41E604C3F5BBAF7FB7387E5544ED9F5BB11B24E3F6A1234 +C34E0ECDB020BB47DA078772823CEBB9632632D7F177419397A2CCE7DCB3F358 +D9009FAE512CD5DFF9D547199EE3DB5FE73E9688E3FA530B3C1C220AD14E1EAE +70CE50B9BCD6590B123F0C27B6AF4D94B5A720D479E05042AB637321EBF1E1DA +5CAE0BEBDD5571A9C6FFF9BDC6D9A6CFA584F0F9403812646579DB230D60123E +ADCA8FAB39C26FF0484F3CF11BA5EE677A492BAA41C97BC28D5C61FD119F432A +A2FBEF2AD52B33AB01C1BB8C1A1C9A0D0723AAAED131BE038A8F6685E1973165 +A2D17DD2FDD95F46E71A755ADA2A87320CB94FE6CE58747478684F44405C7A69 +04A63884216203693D28D3742C349DC96BABA2B782F53B618D9540A10A6A9BD8 +99D43B0F5971A3F3E1390FC739FCA366B71EC177DD5A7C0ACB4980D8DAE72937 +EE61469C672825DC84BF957DD7FC64C8A878FC8EAB3E87027A91641BF9B66EA1 +6DE73B03403C303FD52AA4C4CA7BEC8A11451F1224B637FB690796E166FF71C2 +4E811D6562EFA570B397E500976CCE4ACC8208F22F097F506644C151E536D594 +2B2014CAE9475DE608C27F1B904155F670EF523A62CB92D67574E9CF31295C01 +8D01799BAFCD49C5725ABEE2B6193ED05AFA26B0FDDB68DE968457D877606E67 +3AEEFD8649619BCCDFD8DB82EEEDE0C5A11BFF01AA91A02ACFE52C2BFE52FDC0 +F72C909B2EF965B0E4AF615597EF50B685A624A9DF9D3DD78728D418B576D3E0 +94639CC077C39C277A1FF76194782129CFD0E6DBD39AFB108DE517FE4959C3E9 +BB003C58B54E768FEC5DD7A11685F54643555A1C488F6AD4122013757C6D4454 +0021BBDBC0857EFD9B15878B9AB274ADF30D9AEB6AC791491B4FEF12C1DD54C2 +07B328F171B6582A01503C53A341105CDAA94E871D29CC0AF438F4CA8577D4D4 +93451B018B199ECFF48C0B1AD21865BA350FFD19780C8F9A1708B0C33EB2AFAB +2C1E1DD6D7ED0DE7E56480F3A20A3179DD9A57115B72741C87E4F717AFD99A72 +C7773C4FA1195F26291562DEE4AB239084B38681CC0015DE27F2016A5F60872F +06CD65C7CEC8EA2A3F4D17D1680106885742423BF87C42787E2BA7FBE7997B05 +097A9AE8B0F4BDD8EBF8ECFE4488F6B1D56CCF797781C6C8A425A13B65999447 +BC7DDC0AD1BF0021F5EC6A646AE5525A0E739B5EC4D932EA5F6DE35824439AC5 +013BDAD77C49E1EE021749420DECA726945B54B9086D9A226919145F74A039B5 +4E80023BFBB07B71967C420B23004C4CDF51A94DE0A2708C7957 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +{restore}if +%%EndFont +%%BeginFont: CMR17 +%!PS-AdobeFont-1.0: CMR17 003.002 +%%Title: CMR17 +%Version: 003.002 +%%CreationDate: Mon Jul 13 16:17:00 2009 +%%Creator: David M. Jones +%Copyright: Copyright (c) 1997, 2009 American Mathematical Society +%Copyright: (<http://www.ams.org>), with Reserved Font Name CMR17. +% This Font Software is licensed under the SIL Open Font License, Version 1.1. +% This license is in the accompanying file OFL.txt, and is also +% available with a FAQ at: http://scripts.sil.org/OFL. +%%EndComments +FontDirectory/CMR17 known{/CMR17 findfont dup/UniqueID known{dup +/UniqueID get 5000795 eq exch/FontType get 1 eq and}{pop false}ifelse +{save true}{false}ifelse}{false}ifelse +11 dict begin +/FontType 1 def +/FontMatrix [0.001 0 0 0.001 0 0 ]readonly def +/FontName /CMR17 def +/FontBBox {-33 -250 945 749 }readonly def +/UniqueID 5000795 def +/PaintType 0 def +/FontInfo 9 dict dup begin +/version (003.002) readonly def +/Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050<http://www.ams.org>\051, with Reserved Font Name CMR17.) readonly def +/FullName (CMR17) readonly def +/FamilyName (Computer Modern) readonly def +/Weight (Medium) readonly def +/ItalicAngle 0 def +/isFixedPitch false def +/UnderlinePosition -100 def +/UnderlineThickness 50 def +end readonly def +/Encoding 256 array +0 1 255 {1 index exch /.notdef put} for +dup 65 /A put +dup 67 /C put +dup 68 /D put +dup 70 /F put +dup 77 /M put +dup 80 /P put +dup 85 /U put +dup 87 /W put +dup 97 /a put +dup 99 /c put +dup 100 /d put +dup 101 /e put +dup 103 /g put +dup 104 /h put +dup 105 /i put +dup 108 /l put +dup 109 /m put +dup 110 /n put +dup 111 /o put +dup 112 /p put +dup 114 /r put +dup 115 /s put +dup 116 /t put +dup 117 /u put +readonly def +currentdict end +currentfile eexec +D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA +0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 +51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 +7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 +E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 +0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 +C01924195A181D03F5054A93B71E5065F8D92FE23794D2DB9D6295729076BD8E +CBC0F4C1BE246922D2482233846A96D867B66D9CF25A1DB661141D36B8506E61 +A022F9EF8BC1F2F674EDF1533E67A78CA29A612AA9268E113C5EB84DA56CEDFC +D7A111403E6E2A8682DB04368889747E003A124395ECF0C7FC81218552EE7C6F +60BCFB4120893528670D0E8A4117EA5676915E3591AE5652D003EEF67818A41A +8882E102AEEEBECBD15DCF632ED246A6A58B6A7780DB6F1F9AE3FDAC8344585D +E104F2BA2DF06D68945889A2A3B6C262FB53FC670BC5EB7C56887FBFB7AA7026 +84115872CFB0652C6BB330447AFF8F0F665EFD6A41D6DB6877B08052F402448F +CB21C26BDC900636C99CA347B79AA73AFCDE9762A992CA3DDF7279E5C50F453F +52098529850AFB1F501A442D6A02E0A2896F81C8AC735AF1E7EE47208B4CC944 +649DF6802EEE813F1456205C6126D7D0B1821AB62DD65468F3A30575E491623E +0054E2E680E4402E1C8C538DA389B81603BE88D6DC287A076F92B224CD58A0AC +44B8D490197341808DEF243660971F444A560C747BC6F52707ED42A99736ECCF +EBCB694A561C3A70A319D204CD40D402FBF937A00BBCBE85DD26C9E3F91B7D10 +D85B9D314BC3AAD5A58B107F5F341BE2C53490924142566417D6BE03BB4977FA +6635EA58DEB9508E40B9FFAC75FF44C683680CF242FE210519C9BF92483B0A54 +83F48341318BE16D2F8C988FE3DB2E7914581F579D5E323148A31E4ED03BC24B +C990372DF5F3B0C5FA32EB2CA4FA0EA33316569133C87697BAA2292E685C26CC +F8CD40A2366E60B47D47CC9D0FA29D2836011376A07F78BA7664DE96E775CF45 +9BC91559A063073A4C2FAAD0893C517C5C46A1425D07EDCC2B57162E3A45103E +FF26A2D2F98B194256A4B052AAFCC08965A50EECD7B9E8F35AFDF7B6568B3983 +8030655E7C2BEC961A2F20539D617626E8454E3FE9EBD3EFCEF7F63498441DAE +16CB509BF239FBBE25EFEF07A3E16C9C71EB8D9DCB8403916FB40FD7F4E1A52F +72F2DFF94FD14D7D49FE775390C17C37C1BA0CAF35CF75D682B7833A83224158 +D54CE962CFBAFB1B2CA50B60CBEB1F8F58DDB2F5470C355ED9632342D9382AE4 +5D33BCA3A0A25EE9E5B39BE5370E7F20684C664EDB48E7973FEDAD9676F9EE8F +701CD4D8CC9B9EBC06E8C86EB88AD56E15CEBB8E1930E8F711CB6E01D5D14967 +D7E6C1BDDDE2C4D00384EF4CB02877DECC27AD53FC981338977BA0CC0257CF7D +B42E9BC91AF45D9722461EC3CD9DEAA8011FB855FE14B74BE0A102008EACA2B6 +0E287BB4F466FBFDD6E65A5262B9322F95E20DAB875A10A84572D982E6FC7ACA +23C0C37E5EB47B8E69C07507B53CDD98CD1B6445E1699CF35B3DA3E0DC56BB76 +F997C40E2ECE47DBDDB707EB527055960113F2DABC87FD9EC7D0AB36B400CE33 +0D54D4F197B2830B43DF0AA802DFB2BF747A4C44B31FB708B2C8BBE1955A6A28 +379C91AA4CC065A50098AEC0B837E180B76801865A43C74859DF18FE1DA1483B +C17843BF1C7E1B11A8C6D8BB8CDB1D552FE6A1FD0A696A8F7405F2320F8621EA +17C1A32056C45A9ED35D2BD12D02D8B26489CAAEBF4EF33B66FF4BD9B46E4823 +6395831A8F3366EEA0D0EA88D612DEBF63DA7FAA24DA979ACC1A52544BCAA007 +6C39946BEA6076ACF45722B2B8E4D0823EA2D12B14A98367BB0433A21FBD9F94 +18DF298C56F67ABC9DB1868D431A854DBEDF8E1F49E359A545C75A7AA1FA4D5A +50F1EE6B45FC68ABF65FFF257964E4E50D8B0C1FAF498DFC554073697C2F219D +4A68DA9E873B270B9C56F0DDBC9927ADAF9203FD684DE615F68C24ACFFB44690 +89C0D5322049FA69E7FD00EFC9C9B2BD177B5B339907F81C31496662847BEC1E +56B5DCDF4FE618970F4268F475B2EF7E0F28CC986DDF098E59DDAD818649CC35 +4080C0867A884B8177A6880F06F1E5CC130AB4243EF8DD8032FCF390765BAB1C +1F0C9728EEE261A09F8C1D7ABC7A6B1550551BE2A7D19D45B656650DB00B3A5E +B3E1186043E173BB4DD5EFFB379654F88146382AE3F7196F099BDCD6D245FB6B +AA2FA9B6CFBC9F0CD52798DDF2F13874BDE5B124DFFE0DD93E24C9DAEAE4C3BB +71A9A13AE2860F620B4EC789F95221015D9C510CB4AC775EF69DB9E32E59C896 +1AF82C9F0DCDB4812A37761859A3D3BA0CA57F244489C78065346FFA78F5F7C8 +0B2E8CBA9EE62FF5C27369D0BCD52857D40F1FB8F8A1441B83565A4150AB1945 +0B54D6E49F66389E43096269EF5CDD39526A288C0CB81E324E75D326EC9A182F +2CD966368CE300B41873B08E17C3E6BB51804460D2562AF5A12339966F44CD09 +114C6809AF246B5BA6937631842CB9417781A58944B6BA4FCF961465C208957C +81A662D560D0F81BD3CB53C06B6D979F04F6121CCFD5D52702CBF6C70C01EDBF +2040AAB9CB144321E68C4010E0E98CCA2603EB55DD62E881DB621C37EA4108D1 +528ECC7A0121B57C6BB1E26F8AE7161ABA7E88256D2D6A8B7CDE2E730D137493 +3FF628EF6030DD2330D747FABBA03B44CF600418C245C388F33EC5559E7313BC +4B530C4FC12530D38B27D6408548F25FC084DD0523B27D29D6518D3115AE7755 +37162CFD4CF528214466FE525B13782F9C3CD78F3D6C7423E63A134C0A371F15 +10F4ECE1D482C647B563D3D15586F80BD9DF7381BD53927825D5AEAF762E1CDC +3BD184F345029A95B3AD4D1B66E79AB4F0809418C0CFD4D503457A190D02F134 +3F57FC04FF655AEEB783D6791E4EC300755861837D3D50649F6B7F60766211B3 +8148F8E575E28D6C2DE75B15E722ABFC6DAADAE53D89FD295352781DCC2CFF6D +982F6DB778D6FCBF1B7BDCB53F3A23AE6EB499BBFA96E8BE04C3C8E5B660EF24 +01EB842DAEBE979F2C2DB72AAB4D21627063B1D3C6CD40944E4CB81655698FBA +A343766CB22E392E5DAE01DB33A00918D6DAA07F2F38B336A3C5DF3708865E75 +0DE04D3AFBCA27A249E97377D5785B4E28EE0E93F7D353619C200DB967372ED2 +153BF8BE945474266EB2FD30F80042A11B7E3586DE4AB1FBD4A741D36DE583E9 +1CA25DA345520AA60634EC819E7EB493CDB128BBADEC3890F055455F060A1100 +D5A41D7B180027E08AD6EE7E393DB9F83799544404FE397F557773BE6A130541 +157C0EB37E036C94825B5090EF85F8B4E3DB72895D86687758C20EDEBD6D1079 +196E9949DC6ED0113571C70B150B37E446E319EC54D44CC0CF6A14760953DF4A +D0E1F33A54D240E236AB63B35BA8E071D77776BE5B9312245F2C6E4FDB4312A0 +0D9CF723E7D9A3D8546C4739C00C301A89ABA60A02757AB1A0AC40B24CE6CF12 +5850485B11E16646D7150795EABAEB08364A53161111F46A7BC3423A0D3BEB69 +BF15726C1F8363914945DEEB29CB8766328318AF3B344FD6D77BBB92BD7FD161 +93356493D4D8252AD125708D47C124E44232FB2BF7DD75F87889496DCDB75D03 +F58A57D4122CFC194B75A9E9C4789C9A33C0435FB4ADA16AD4A6191928D1663D +05FB8152C0AA176FBA4755205F8A66713404787070757D3721ED6E6D55A59DF0 +C92BA8F05EC7BE05D0A2E66DE85E75373483EA3BBEE0F0DFC7E2FA5FBAFAB118 +058D095AA71FDFC8AF37E5A98406B64E58BF476C6926725D7EF3C2346CE3F662 +1E5A4A18D966479A37070859014719456EA2C7F23E68E1AB2F25ED3A0C00A18C +DD403506923BC983F89CCA125780DC76A411472E38173BC0DD4CDA7B43E13419 +B5AB0B9A35E77C58BBA12AA4F5C7EBF8A29996B059E4FAE6809565570442AEE5 +D56CBF4407E1CD9A4398B1F3ADFF023F64B230E3D29F526B62D964F5C8DF801F +E94295AD85BD9E1C18E6327977260A871E921C0745CA06A263E335E344686E7D +D6FE3ADB4EE0A7E462F3C00873C3E95D183CCEC71C0E5DC1D2FB310B28FC3611 +67C23DE336C374F72368F4973052B48E39969305791C986E6EE35D0350571860 +3A8ED849712CF21AEF444BA390644E8646CCA16559BA4642A5800827A0DDC453 +7CA0818BC47DF6348A5209A2F0A10CA39840CE6346E89CA0E842BE8692DEF25C +4623A5A0E0B98708B9492E9F564324BB3872D6B953CA59E9F393C477E2AB85EC +C557D333E88C111CF995FB79D9432DC94C2BDB3BFEE13C0D7D1BB920DAFA6158 +8548447AFC65CD5515D5021E0ED7D213B0C08C35BB424AA91885CA023D7AF767 +B83E619B15DFEF5588D2F0564296E14B5A6ACE03751E1016105C51BE76EA5ADB +4167BAED2A8899031FD7BA05C410ADA25ADD94A787EED1A7AE133B0568B1DBA5 +44B41BE013782CFCA3D81E8E8210DD506ADFCE7DC7E792EFEF438221164A7D1B +5E7089F476240C5F94988F081943F24DBF7CC3D1E58CB89E1C0C1624682CC3D8 +C95815ECC9183A4B3E353C7F920B7E64086E01672DAA7C8A81319BAA03C1FBB7 +8E5E84CC5BAE0E107754794C755B7AF00953504094E1A9DF357D51B578259613 +8D26F0BA26AAC459BBEEB90BCC98B865EDD26AA4DF533D6624EDAC762C446B6F +CF9F86DD2D8989D4655775E662B93BF51805EE3CBA0AE2293D95F166E80973CC +82C53042D0249C598B0821E9E7F218BA6114EEC86C158F277934F2651490B723 +7F0D0288560DA5BEBAFDDF243048E590871AD18B3B220EC56549004DF122AA03 +BAAD6971D790BC644369FDBEE74A324083CFA9496C2A333774F06E35299242BC +F4B26578907CC5AD1893613F2B8622CFBB7B55810162EEBFAAEAB2A6D69CB72B +D7859C73843E665125FF450631F32E64F13A6207F368103C7A7318DBAF2560D0 +F1CDD83C3E48CB30C62AF1E0896E1962C655D9ED98E1BB38477C1C60ECDB6B95 +067D3A638AD43EE886338F7AD2D2A574CE6FD2E21F6FCB4220EFEC85ABF8272A +82081CE70E4390A74EC717F1DDD168F4A4A080A79EE2ECE0F98A96871DA4B52F +78441601AF47763C2219F5A167604C32F478D498835EF3A6167936994F7C7139 +3019FF43C97E7978D3CDA641C1E391FEA572D308E759F28DDE2B40B5BC207A4B +C5EB6A93EEE26782016F8B6534420BE4D790A2E1A65B6CDBE9468152230384FD +14E9AE84418A44F94E6825DD7D77D0BB5486DE26A692B3DA96C81FA4440C5D44 +8E7F3CAA9B8DF38F87E09C4D78841F629F78F4E7CC8580CC44E59E5D9AE8B2DE +C0682F793AE7AEC12A8AE688636197E8A08FEB70EFDB6203681A60223B9B0D39 +2DA656E5E99B82130D4BE38D7AFE18568DD30B0CC3C73C1E2914ACE11A65334D +A9F18135E7B86157122CD221C33C62012FFB16D2D2F3473A53BE3E7B9FD4303F +66ADF0B07155C7B9B002EA68C6AC7247EB3CE7D2670A60138049DAA964F86A05 +22983EDA7242E6BEEB90DF61C937399B2CE1061DF1E551CEED4A80D86C2D4649 +C9FF9A1F93E96773CD392478D5B70D5336A03A274E0A6EF44BE8CB2274324142 +706BC2E340DC944339D647961FD7BF29944503B4AFCDC69A706AA6B0F6AB2CB5 +D220A96ACC1EE5E7826F6F75F044224E5260D581AE761AD0C752A06AA03FD935 +FAD65C9EDD4E5505396E331D45DE88F0D1A4303D766ABE0702C17E2A7F53C0EA +96A4DEC5A6B6186F5DBAAB05DD78E38AFE630465BEF0EC66ABA9C1C9232214A9 +795D105C33CF069F6BE20B179F4CC9F484AB63ED25C1212C457DF62CA0D56E20 +608572216F2D4C09010B03A8AA6D287C8F514BEEDC1C912552CC2489858BF4D3 +084882CE4F4B6FB9EE27C0168671E6DA154018ABEAD013C88E1D3EC918371251 +63D95BA0FE20212C20AD3F4DB614EE36B488A3F55D94C1EDFCA8E68E54A1EED4 +7DD168DCCF07C3DDB5E2B499DB5635C5C5056A7438120DB4839427D07F96AB8E +F842E285243E40259F6DF029E27779CCF3D3BD7206B2C341045A5A4AABACC2A5 +91C6830FE05ACDCFDE99046F16F2AC183426ACA4A89FE5F09B7EB2F811BB5FB5 +AF073BDA2886070B2327D582DCBA66B47E8948C3BE05E837BE4B81402A583403 +74FF9E938F0E9DC3B1CB81B93DFD4070F9EBAED40BA570DE8F9A5C2C0A097311 +22A6065139A6580E332473E9410D9F4C734794F79E41D0D437CEC7381919DF6F +A24B170E2BC97A6396A4E3AC3D844AD6E2B8FCE1C6AE97DFC5319F49130C3D6F +AF2541EB2384D5D4CCBEB976846EF8C2165DBF706112BDDDEC9A57D157F5996D +95229FD5C71B885D16B177BAB06B9DF5740A45C2A005778EE879193290419C0A +A4A339029E37E685B8A05B111DDF94AC19B1D85C8E6026E57E3D3B373C08557A +F96E6FE3916695ADFC1F0BF5D558565F42A71C61ACFEFC9026424397F0646642 +7EDAA05794BCCD164A645860B57EAD53CB6899B18C6E9496EA4DAB0A0C272639 +DEBC4FCBA94B3BF123F7771F602E7667C8F56E12429669F2219C7D8E294BE07B +71E88EA62F5616CAAB7C0198E6FF12A348E36B306FE2684A401399431B6A84CF +B46EE4BAA0F4099E65E9AF3B70274EDD6B6524F4FA38C23F9CD5273EEDC8C6C3 +E7312B6E0497C05AD3F3C246638F01387CC11DBCBD287ACF54D8E24759F51415 +35ED64132EF4158F54AB9F4D567482B3057880490F805822F71E7E2C52F7BC38 +8B1F803AC3731064B90E5E97AA3351D17E73DC2FE526CD6C91158636E395867D +C1150FD3BD12493FFFB813AF0D08C8ED0B7418A2CF90BD5B783364358605D075 +5DEA95A9299C0654EFB28E2FE8A41358A0DD124D0314A27558E42ED5F2D74BB7 +056DE04D2CF13B9B804A3CBBA29BC155A3F18B8B48283194C33CE8291677E1EF +0721138F8E0409D49BB99F217607586D2DF00C29A25536E21924B4CF6702CF85 +C02DFBFD2AA4DE3DBED1D2C02E21052A8D10F96629D0D18154923638FE0C48BD +E2DEAF11663E20717EA77A5453686AAA39D6FF7919AF09B1AD956FDBF734F49E +262F3076F62E77BD45122B55A5913902D9F91C4246FC235BA9C0FA4A96994291 +830638949BED423387DA2D455A3C9122484EFF27F5367D1D3DD27D207D973815 +965E1CFF36F43C653ED406F65348671D9FFAF55BA3FC266D438AF473181B7801 +164EA3F04FEC870743195B3F467DE36B3719BAD9BF15A18637A314C887D46673 +445BA3C212749B0A33136FEE9FE2C9A13D62E7ACC96378D257FBE0EB06AD4D4E +D41976AB92AC720DFD33B0677062C32E6F5C992A0324FD26E984B5341A58C190 +D20EC3F1144697D514D9157340A6C9F82E62AD8CFDEE59F6FF86C6250CE33D6B +BB82DDB4F65BEFC6F6D0E4044F7BF307CC346E2FFD191846E3CA288C6F91CB71 +5FDE855FEC5E38816CC635C470BF15263A10A409F0BC4877F7E6D4C223E3564E +E7BB5B320AAA5AAF4F32528F7413BFB97C70FF5E6843E1FE501472129BC9758D +7531BE576C75840CBC4CD3E6D9E5FF52559B68DE6E7827128BB2ED1BAD43F36E +A0CB68C1A147A7093EB02062AC5492DB7EEE08B1BDB187E15339A66269E459BC +67495937B4317AF66A498923322B087ECF47B601C26E253D223A784DB2D204FD +0668BD403A73723848018B7C86B627B9AE0BD9038F567CD5F670CAFC5C4D86FC +ECA211B713ACF8C1370191161CBB6C2592E8B9DBF3471133F2D9A60F15D72F9C +5E5539D59A6A7E124D9A38A6FF6EB7C71990716F88E1888295584F17D49144B2 +B57252D7D87CFB7BE009E0E1AF68C57E2041CB837A1F9DA290FC07240D616876 +CBA29ED23952F977F27ED97503F6C6CB48DA6611E0ED9D90FA865D099740C6CE +8A5DDBB1D6550B208321C365A5104F9ABD66A9238B8A2106AA74CAC58D1163F1 +DC4A62013C0F6DD8A3E8E1A6CC6E553746D570A744863FD8EA705890890AC5BC +2F0A068C740572F045B32289A2AE66CC44A1C13FB8BBD4E1834995731D19B47E +7C2FE360AE79DACB95856B01EE39EB3C7C9EAEB3D47348C47D928BC883B8E760 +6724D80DABC4D736411942BBA8CF08157F21D63C18924282193C5C8E44E09048 +FDCB8DB2E01C8A496FEE2CFC19A3A0EACA508237C8BD988ED6D33D01EB548B14 +61A546886AACDAFB7C8CA69056B1F428D72541D54EBDC4B44A07AA72F7FDB023 +6E0899786D3E0B8FEBB376C085CE6A2D26D003FF8EB0E6D19E277B28C75437BB +1DC93A83A9770813DF2B1B539CF3F3F4549410F7795406151F84A9F6D959AB5D +EEF87E1D2278AF2466B509F351D8466DFB711EE416D9347C339E89DB6C990C51 +A127C2CA8970E639403EEDA875F33BC3685978FD36DCC3AAB9EFC07BBB7837D8 +1F524EB3A143A1548A221A712FE24BAE8C6ADAFC70EB74ABDBC7E418C9027418 +D1F1E50A250C6ADC6D3E826DB7E56F97D7FBF35AE901A79769805DE45469155C +510F692CF5E60A47B540A5C99A3CB05088D23B23BF672F1240E14974C4D8A161 +6FE7FDB940F1D15F808DF49E83FEB633B9B873A42A879F9E609A1847E36CCFFD +B2E6D45D87AF79C7E66D00F37C2932878829DAFFC056CB85B11BAF98B62A6B23 +23102158C9D8695A2809CC38945337139C89BB71AFAECD5549E01B048388158E +73651DDFFE14816A9B86B97F5E60A1B16CB7FD371F4DECA7D0AB0D71EBF57344 +EBAFEF9353A1F5926493C4A0D57BAFE403CFD54F07A6DEAB01D9359FDD4342FA +848E716804EA85D0B31455C4A79D64AF1955ACD5A8E7FA28212F916CFC3858FC +695B9B6FB1B5C9E619F40E86FFAF01E777DD0C8CCD5AB41ED4EFFC98C0286418 +1D2B3953AF74AA92C1AD4B629B234EF90E57BC8C09B521A989FCD7EADC2B346C +5A2F9FC731C2DFEFF083D3906C5A2F623FCC022C25165F6AFED7C70CC6D18818 +9B6D5EF527A884DC1246012EB1BE0C3C2A75D382C7F7834E239AC05F5A8F34F9 +D6B75DDE85754FEA0AC23E90AFFEE791DF1D6BDFEF41EDCF6CAB2D26EF859114 +6E598478A238CE1410AAB7EDA5F7D9CF5DA9582003F1E11DB4870F8376B2B35F +3C798A5CEEC74D5F68A6420C77574467E83C98C856D57D305A8AA0448525B3F4 +52702A7E7189EAADD983210ADE6198E4C5EFA4ACACF7357EBEE2FF84E4077C54 +205DB6339B9ED2B58FACEF3E3B54FCF8ED7138179EF37404C1753502F5EA3EF2 +49BA9FD22A23D38544CFC2D4410CC1EC7F8AE74ABBA02C0299B9AB220AE7D49B +75FAFCD6C1A4C666E03DD43B652BB602E392FD4261634AE7208040771354EA9E +9DCEA0A74697CD3D36F29B517CC1C0EF71DE94B19467C3225011AD28BD98ADBF +DBEDBED41FAFAD5A313F67B251E6CEEFDBC20A570B0B0ACE12DC3A7A7503AF11 +DB96A8ABFBB47DC1BF60B592D836D202BDE1FDB360E2BCB6B6BBEE8D68FA7664 +17F3F162D7C8433E6FF5C8A6A42AACB245CF7238E0938B4D6231ED135452277B +3E88C2F9B52973093BA6C9275CA50D767DA1184DD179CAF990457611ED2F183F +6B68488718BE003D4E22279CA083B77FFD0D083AD0C0D29AFCE5EFCF434FF5D5 +30F62CA60BD952D3F1B0539E1457BAAC49193B2EDA92E270DEA430BB2710A34B +F4D91107E98602532D150D4B3AEFB5968469EDE7A8E17C7EA3AAB06BED7E473E +8FEDB499F7D99E41C4FD11D962307B3A7C6E228A5B57654CA5D4509000104972 +AE35441138372268FD6F77A08EE595182B7BB47090FD9EB7893B2B0B4F210060 +74B9B81878ACADC8ABDACA9A6A158A1822321BEFC575F19E4FF1845F032F4C87 +B252BD481144876D939C2C26C3CE54686E03F9470C2BEF6DC982970B528892E8 +D718EE5A1D3615BB85E7FB0D38AD6E5C1D52DA46C72229704F553DB1D45EE5E0 +113664BCB65B0DB9FFBC2ACCA79FDAA23F0DE91C82EB6978354538EE2FE565AA +070FD4A2A66A0E0490A7D994BC2018452BF46C131B5956D66775EECE6857C6F1 +BE92CD21C2D97614B1C31200B2364F37676C4AB558980D406BA3B820C163B994 +238F9605E5B2AF189543B0341DA0D7AB8B979BD982345E9F69C83C0464EB46DF +8D440E65BB26A74EA98D75E4354B5A0AC9CABF2B414EAD2B63AB479F0EB17C57 +A88AB81352C6B27FD0B1D465328E6638972E7CABC15581DD64AE5360D65025DD +F45E57AB8B9C06534691EE5EE082057C062B934AB9AA7E4189861C86995E0918 +31060CEFABEE66454515E542C69F4B5CE675F22D2FB225C9F56E4A564C0AAA39 +C36DD9F926931EB6F850AE93094E122ADE1C74E18C84E9614AB6BE41C51539BD +3BD3C9FDCFAE15C464B2C68077E7882F8BE3588397B34C5DCE72D58E59C77DC3 +7D8C5D5E8F816E3C84D0BFFE0EE9EAEF89D11969589CCA6314394B9C218C4565 +9FAAE9D02C589C26768912CDDADF98D525E3090F54BDDACD02F47F49666F3C01 +D33CDBBB3D0F0CC490992CAF4DE2207B6D95298FBCE9C6DE54C1B04356BBC506 +36FD340A0FCB785E146CEF2F08A875DDACA3FFADB706B8ED1A2462BDD3D93C10 +35A5FE7646FE01E1808D9394DA6EF21E998512DF86944076AFC39F9FACE57780 +0290894FF992405E3D713CDE808DE743C3C0F99BE06C37D3F3E20FEB3BEDE452 +8A1F1FE4E652527330852906056FF3659B5A789ADB57601D96958BB850403203 +424074F11B7CCBE33234B3C5CB2BC51CB609BE5123259B6A11EF12571AD37584 +82523115729CE32EB5CAF8087866460C331E27670BD134B5F36D0D648797DC75 +C5BDF9C3DD41A6427E16AF9117F6012B974D2061E74633D9740C39B340121D27 +32FC8BAA96F2F91DC2D936B93B8CFA951C7039AAEEC5C15ED8ACE5EE05AD7BDD +6B5B915C15ADA0492DF77F582283B68C268CFDC293871A057C3EBFD06752C963 +307ED6781E97B2723229F5988BBBE7FFA02E4E0137D4A2F2E4A856BBD7505880 +8DA0F15C9DBF54C1A2EEF8A12E6263CE2CDDBBB7D39BC6B56639B2FD84CC64F7 +2B02FD3549EBAAF4EA5E640BC04086B6D8EAC9690786FD2DFB45F6C169D907FF +2E368AED562C4B58E59D2AC1641C746973ECEF1BA237018684C52EA1829E3026 +EDF2B94D194F2EB01C21C7784AEAEBC68A88258933DEC7998ED57BCE7A3CA389 +B755359855FF644FDCE1A8805E420D84586FBA00CFA2E15B2AD5B25FD01AC3E7 +87504B45DA2BDB6037BD9BD19BBBF8A62F525B21E8FCF3DF0A4AED94FC10BB36 +673835BE6E6D503531803072C06D4F5D6F0083BA2AC5E54FC5F42604E8B7B521 +48655715E14A775A55602334A0E2835E47E3AD54649BB1C775C2DDA9B46663A1 +0A1D032568E44F143738B77F1944EDAB6FE2136024AEE7DE4804E022488B78E5 +95F98D3023824362508A9BF922544EE42F679522EB43024DFE9E231EC6A63670 +A05B1B2EFEE6EC7AA354F26FB4CE5886A5B9E9D6416D6C0A0EA5193904F6C967 +1B97D06C354B49DBD53A9DACA30F54A0C9FA8BFDBE5D10244C98D59C43757397 +D5759B31C799B145F87C8175038E9CE1F6455C74CB061F4A21A8B27D8E2C650C +41AC9DB396C84B9C6B4E514542315ED29BD1148115A8878FF9EC9E428FC03449 +C7D90D83E6FE5E5A224D8A7FC1E42560DE255271AA7BEC2EDC7510068E843F5D +F6269DAFA11CF63A6478448FA083E210778EFCC4AD19BB74593F38933D21C3DB +EF341229C4973DCA2462BCDF1CAE657A76474351C51EB8AEEF085FD10F751D18 +A995DF0871FF84F68829BFB9914A4DD657C8249A2D87F23D36275FEBE7FADA31 +89159301DB1869537D0ABCB8E507537BF3332DFE67DE402058BB1EA70DA22281 +2628E22447C60D83740D2E35D3843C4B9720C7958D02898BA11B419B25C0A3AE +C3B91799F7D28023429C902651E7FEE4A7C78F60450E6FAD5BD1EE7F2401EAF5 +2A61D4AB64B1364844F1C0C4E005B4911FC11FE12DBFDC321D7F9688DA3513BF +DE6E2185AB008870C2800BF4888217CA2E4BD9DECF859E3748ABE5A1B9B03C8E +29E6E51AE29F3D26F36CA8852848A3C759D0518872B95440914969A15447C88E +FCB2429F239350A68AB50712AADE557A4FFB7DF3DD51D5E57EA44893C1FF71A2 +092281289B3A059B5214EE4BF8EE08AE16A5CF4806D9D044861D958B4FE6FA4B +D52E91FFD3C3485848D751F288FEB97120E02A946C21BA9DD27B75F5CC646A05 +8967EBD266B751F46143C62B2FB301628AAE6F97257030BDBEF911697D445363 +7F674FB0D8B4B05C814B5C344768FE720E8B870CE7BE5413C291254D207E6777 +20E1A9661D4A325DE30CCD9964ABB17E76BA2CB37022185C9B577C5996975BF8 +8477831B3810AF7B335EF33D109D149758B0BA9AF773AD6D524DB6054321A98D +D7596A881EDF2A73D8C9CC68D7ABCF32690D5450244A4804FB4564570BCDF76A +D2BAE2F30514615310CC0A7F8281AD3B27189EE97420F41D64C5F71AD5F1C980 +53AB5917380E3771E2A76DDD7050A2F226952A07F6C11D5A90EDFEC8D40A3AD4 +C07765F164110E4C71FA123C0B455113CD51C0841EF4B027DAE1408A1EE33E98 +BAA60FF801E55C8A94755292F8B83D768557753D517A34B3FBDFF95665AA1C1B +14C073315F58E6C304C40294BF19DA76B18E82EDBF1E70CAFEB6664179A51260 +559E6A8552887FFF822B8BB3ADF6447C0C0C163914C3B0B6DFDE87BBE6AC3D38 +EC68A27F13B9D8A9542123B2D74E96CB003D07F1BB91377C9AAD32CB42CCAF18 +FD95135D4B355572F2C1C64A9C5BF8A4334BE3008D181000501101EFEA328F16 +F38645A68F72285FB202A498833E73FC9D65CABDA92489081123FADE235CF7B7 +7E906E521C29918DFBE02DDE3BEFECB2D38F3448A7884CED34B147CD3582F201 +0883FFBF38C0927D714FF22C22D47A9028760F1BC440DA2530FF24994CF6678F +FC76DFFBB2FE5412AE3802442DB9A4C99C65E4B89CFB7CAA3060C5BCAB56BD75 +4D5E14E67B5F09E8BA3D47D71DC310073D5B93F5EDB4AC0505C3A48C94A51EE9 +7E1C3F69AE1F734651110B59B2095C1C4F8C6559843E3956DD1846F0AB98A501 +4C865B91A0C801504148CC6ABAD09B560FF43A19CA1ED82FA8454CA9A51A1E44 +7A81602F707C2B7635474EBD3BE7482F5C1B63D65353238722BF92E977593728 +ABA75558C13DDEE16D6C470F49AE09F5453A8AA49852B972876970EAA010D396 +C1ED2379CA5DEE24465E2BED37C3322FE53BF5C2E24247311BF6C38A2B8B8D15 +77857700034915614AB9DAD51ABFCD71BCE13F80BAD4BEEB39C360791EC17AF6 +1A6D7D21716704D42A874EA445CA63D4B1D22ACA0D7EEC405698A0D32602C27A +ACCAAA348FEB58A6249BF9C544B624AF118CF55F55BB75DAE7D87335B6A1987D +D0C45F9341BC6337EB36B58761746F479864BBCEE181096F9B42FC8FA5C6144D +B9D3C06E8A61700E6E2712C90EE2C1EAEFB39D1B765B6494754426EA483F3564 +4B63FCB2FD1080DE0FF9C5EB96BD906184168036956F6F74709A45DF253171FF +047621FE27EA372FF9EE8396FE040CE25DABF5F9861632EB43F94C969289459A +85F5D490EC2ECEF64F572DA1A892A223BD7867EFDE65E4DB2BA92099F58328C8 +237E6EB9315F6F35234A5B89951763D3EABA3B69F910C1347D838C1D276E83D8 +B8D060A13466C0F730D95B897A51042E9DD021B76F0232AE4C4EF2B993C832DE +72747BEC811D9E416AF2D3A08198A473A1E18F69869A819689D26B9D667A3A45 +EAD0031FF9EFAD769AD8AF598DA6A3BA56CFA517C30BB1E58CA57C0AC5721F0D +9982F330F2A6BF0A9A0064F4AB4A42D6C0157A9A2BAD2A9588F32AFE72BB716D +33AEE439D8971648433CE1AD7B4F47BC7E4EA2A61C52FF1611FE70F00B34607F +2DC19011752FB8E63264E95BC5B8AE3C9B42D8E9DFA2D2D182D9D31FD81968AE +968281FEB160A4691BF0B57B708F288414C067503B63997E958F4D0A6DF057F3 +476F31839CF860061A580DEFD65100F6A04AC569667DF41D40393271085FE76C +4F264A88FAA2FC341C9A66D2343C207AE56BD44D571663CFAE2165378F8EC266 +B273B925FC56D0111F701DDFDA998E2D67BA7FF4189E6AD1B08A22EE0AC26F25 +D25DA4082E186AA4447AC28ACF7D6635D389BE16A4980E6903FB5D70A291F4DA +0DEDF3D2FB17496A2E782E28BFB99436F5E890BEA8E6B97A92390A20B06AE165 +8A5516E42B5B05506031B9C3BAA1D40BFD66CD226388A8B57D1F26C8754ED87B +52C2EAD7629AFBDAD01CF04BD83298755D2B6D0FB7378364DDD5CB7C12559A90 +DB410EBACEE4FC2784BFDEC69C2FBE582CB9A529C0FF4C1EB7C97E7E8BDBC700 +902B137211C45E503CC2F22A6A6A8E4AD7A4577AB8A0BA3EF8248F6893CB40C8 +79ECE86F4DEB01B64FBFBBD4EE77FCA0B084DE7847C92C41CFCF098FDCB1E6FF +0BD06E2AB02B8BB1E2654770B608FCB56C750BB0DFCBD1D45DAFE873B43DBFEA +476CD31AB511863042 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000 +cleartomark +{restore}if +%%EndFont +TeXDict begin 40258437 52099151 1000 8000 8000 (pedigree.dvi) +@start /Fa 190[671 65[{}1 774.872 /CMTI7 rf /Fb 135[492 +120[{}1 1106.96 /CMSY10 rf /Fc 599 830 1[553 799 2[892 +615 615 2[584 553 492 615 615 553 615 738 615 615 615 +615 492 922 492 615 492 553 553 553 11[922 830 799 799 +753 861 861 1[1014 861 861 1[861 3[861 692 1[784 830 +128[523 3[307 1[553 553 553 553 553 553 553 553 553 553 +553 307 1[307 44[{ T2AEncoding ReEncodeFont }57 1106.96 +/SFRM1000 rf /Fd 182[483 14[354 7[636 636 49[{ + T2AEncoding ReEncodeFont }4 1106.96 /SFBX1000 rf /Fe +182[370 14[284 7[512 512 49[{ T2AEncoding ReEncodeFont }4 +996.264 /SFRM0900 rf /Ff 477 656 1[441 4[489 4[441 1[489 +1[441 489 1[489 1[489 489 2[393 1[393 441 441 441 14[632 +1[677 3[677 2[677 3[677 3[653 192[{ T2AEncoding ReEncodeFont }22 +774.872 /SFRM0700 rf /Fg 523 523 1[523 4[523 523 2[523 +523 523 523 523 523 523 523 523 1[523 523 523 523 523 +523 523 523 523 523 11[523 523 1[523 523 523 523 1[523 +523 523 1[523 3[523 523 2[523 67[523 40[523 2[523 2[523 +1[523 4[523 12[523 523 1[523 523 523 523 523 523 523 +523 523 46[{ T2AEncoding ReEncodeFont }54 996.264 /SFTT0900 +rf /Fh 219[581 36[{}1 1106.96 /CMSLTT10 rf /Fi 141[321 +1[486 6[224 1[470 1[418 486 100[{}6 885.568 /CMSS8 rf +/Fj 134[581 581 581 581 581 581 581 581 1[581 581 581 +581 581 581 581 581 581 581 581 581 581 581 581 581 8[581 +581 2[581 581 3[581 581 581 581 2[581 2[581 1[581 2[581 +1[581 1[581 1[581 2[581 7[581 1[581 581 581 2[581 581 +581 3[581 581 34[{}49 1106.96 /CMITT10 rf /Fk 139[470 +14[470 470 470 19[470 1[470 4[470 2[470 21[470 1[470 +8[470 36[{}11 885.568 /CMTT8 rf /Fl 134[497 497 680 497 +523 366 371 367 1[523 470 523 784 261 497 1[261 523 470 +288 418 523 418 523 470 3[261 1[261 2[705 2[705 680 523 +3[732 9[640 9[261 6[470 1[470 470 2[261 314 261 31[523 +12[{}39 885.568 /CMR8 rf /Fm 202[406 406 406 406 406 +49[{}5 664.176 /CMR6 rf /Fn 133[453 2[736 509 594 368 +453 467 1[566 566 622 905 283 509 1[339 566 509 339 509 +566 509 509 566 8[823 1[823 1[792 622 2[751 2[993 694 +1[581 1[823 856 1[751 836 792 1[823 6[339 11[339 396 +339 31[622 12[{}41 1106.96 /CMTI10 rf /Fo 138[572 400 +1[378 1[572 1[572 879 264 541 1[264 1[553 1[492 572 492 +572 532 16[707 26[553 7[369 45[{}18 1106.96 /CMSS10 rf +/Fp 134[465 465 632 1[489 346 351 346 1[489 441 489 727 +251 465 1[251 489 441 274 394 489 394 489 441 13[489 +643 1[595 1[653 796 547 1[452 2[685 2[666 1[619 653 11[441 +441 441 441 441 49[{}38 774.872 /CMR7 rf /Fq 130[581 +581 581 581 581 581 581 581 581 581 581 581 581 581 581 +581 581 581 581 1[581 581 581 581 581 581 581 581 581 +1[581 1[581 581 581 1[581 581 581 581 1[581 581 2[581 +581 581 581 581 2[581 581 1[581 581 581 581 581 581 581 +2[581 581 581 581 581 581 2[581 2[581 581 581 581 581 +581 3[581 581 581 2[581 581 581 34[{}71 1106.96 /CMTT10 +rf /Fr 138[1435 1004 1019 1055 1[1435 1291 1435 2152 +717 2[717 1435 1291 1[1178 1[1148 1[1256 11[1985 7[2450 +8[1980 2[1950 65[{}19 2295.84 /CMBX12 rf /Fs 134[672 +672 919 1[707 495 502 524 1[707 636 707 1061 354 672 +1[354 707 636 389 583 707 566 707 619 10[962 979 886 +707 955 1[870 956 996 1208 3[483 2[801 1[976 919 906 +962 6[354 636 636 636 636 636 636 636 636 636 636 35[707 +12[{}49 1106.96 /CMBX10 rf /Ft 134[789 789 1079 789 830 +581 589 610 789 830 747 830 1245 415 2[415 830 747 457 +682 830 664 830 726 8[1128 1544 1128 1148 1039 830 1115 +1[1021 1122 1[1418 898 1170 1[557 2[939 981 1145 1079 +1[1128 7[747 747 747 747 747 747 747 747 747 1[747 415 +498 32[830 12[{}54 1328.35 /CMBX12 rf /Fu 136[1295 1[996 +697 707 732 2[897 996 1494 498 946 1[498 996 897 548 +818 996 797 996 872 11[1378 1247 996 1338 1[1225 2[1701 +1077 2[668 2[1127 2[1295 1[1354 7[897 897 897 897 897 +897 897 897 897 897 35[996 12[{}41 1594.02 /CMBX12 rf +/Fv 132[553 492 584 584 799 584 615 430 437 434 584 615 +553 615 922 307 584 338 307 615 553 338 492 615 492 615 +553 2[553 307 553 307 676 830 830 1138 830 830 799 615 +815 861 753 861 830 1015 692 861 569 400 830 869 723 +753 846 799 784 830 1[523 3[307 307 553 553 553 553 553 +553 553 553 553 553 553 307 369 307 2[430 430 307 1[922 +553 922 553 8[553 9[922 922 1[615 646 11[{}86 1106.96 +/CMR10 rf /Fw 131[523 1[523 523 523 523 523 523 523 523 +523 523 523 523 523 523 523 523 1[523 523 523 523 523 +523 523 523 523 8[523 3[523 523 523 1[523 523 523 523 +523 523 523 523 523 523 523 523 523 523 523 523 7[523 +523 523 523 523 523 523 523 523 523 523 523 523 523 8[523 +35[{}61 996.264 /CMTT9 rf /Fx 134[540 540 740 540 569 +398 404 401 540 569 512 569 853 284 540 1[284 569 512 +313 455 569 455 569 512 8[768 1[768 1[740 10[370 768 +2[697 10[284 4[512 512 512 512 512 2[284 341 284 31[569 +12[{}40 996.264 /CMR9 rf /Fy 139[458 465 486 14[524 655 +573 31[890 65[{}7 996.264 /CMBX9 rf /Fz 137[684 1[684 +684 684 2[684 684 1[684 684 1[684 3[684 2[684 33[684 +17[684 46[{}13 1328.35 /CMTT12 rf /FA 134[686 2[686 1[506 +513 506 2[650 723 1084 361 686 1[361 723 2[578 723 578 +1[650 10[975 8[1192 813 9[921 975 14[650 650 650 3[361 +44[{}25 1328.35 /CMR12 rf /FB 139[984 984 984 1[984 8[984 +2[984 54[984 45[{}7 1912.83 /CMTT12 rf /FC 138[977 677 +687 677 1[977 877 977 1477 478 2[478 977 877 1[777 977 +777 1[877 9[1826 1[1326 4[1202 2[1626 6[1152 1[1352 1277 +1[1326 65[{}24 1912.83 /CMR17 rf end +%%EndProlog +%%BeginSetup +%%Feature: *Resolution 8000dpi +TeXDict begin +%%BeginPaperSize: Letter +/setpagedevice where +{ pop << /PageSize [612 792] >> setpagedevice } +{ /letter where { pop letter } if } +ifelse +%%EndPaperSize + end +%%EndSetup +%%Page: 1 1 +TeXDict begin 1 0 bop 0 0 a +SDict begin [/Producer (dvips + Distiller)/Title ()/Subject ()/Creator +(LaTeX with hyperref package)/Author ()/Keywords () /DOCINFO pdfmark +end + 0 0 a 0 0 a +SDict begin /product where{pop product(Distiller)search{pop pop pop +version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto +closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show +grestore}if}{pop}ifelse}{pop}ifelse}if end + 0 0 a 0 TeXcolorgray +6752 1660 a +SDict begin H.S end + 6752 1660 a 6752 1660 a +SDict begin H.R end + 6752 1660 a 6752 +1660 a +SDict begin [/View [/XYZ H.V]/Dest (page.1) cvn /DEST pdfmark end + 6752 1660 a Black 0 TeXcolorgray Black 6863 5867 +a +tx@Dict begin gsave STV CP T /ps@rot 0 def grestore end + 6863 5867 a 6863 5867 a +tx@Dict begin gsave STV CP T /ps@refangle 0. def grestore end + 6863 5867 a 6863 5867 a +tx@Dict begin gsave STV CP T /ps@rot 0 def grestore end + 6863 +5867 a 0 TeXcolorgray 6863 5867 a +SDict begin [/Count -4/Dest (part.1) cvn/Title (\376\377\000I\000\040\000U\000s\000e\000r\000\040\000M\000a\000n\000u\000a\000l) +/OUT pdfmark end + 6863 5867 a 6863 5867 +a +SDict begin [/Count -0/Dest (section.1) cvn/Title (\376\377\000I\000n\000t\000r\000o\000d\000u\000c\000t\000i\000o\000n) +/OUT pdfmark end + 6863 5867 a 6863 5867 a +SDict begin [/Count -3/Dest (section.2) cvn/Title (\376\377\000I\000n\000s\000t\000a\000l\000l\000a\000t\000i\000o\000n) +/OUT pdfmark end + 6863 5867 a 6863 5867 a +SDict begin [/Count -0/Dest (subsection.2.1) cvn/Title (\376\377\000S\000y\000s\000t\000e\000m\000\040\000R\000e\000q\000u\000i\000r\000e\000m\000e\000n\000t\000s) +/OUT pdfmark end + 6863 +5867 a 6863 5867 a +SDict begin [/Count -0/Dest (subsection.2.2) cvn/Title (\376\377\000U\000n\000i\000x\000/\000L\000i\000n\000u\000x\000\040\000I\000n\000s\000t\000a\000l\000l\000a\000t\000i\000o\000n) +/OUT pdfmark end + 6863 5867 a 6863 5867 a +SDict begin [/Count -0/Dest (subsection.2.3) cvn/Title (\376\377\000I\000n\000s\000t\000a\000l\000l\000a\000t\000i\000o\000n\000\040\000i\000n\000\040\000O\000t\000h\000e\000r\000\040\000S\000y\000s\000t\000e\000m\000s) +/OUT pdfmark end + 6863 5867 +a 6863 5867 a +SDict begin [/Count -8/Dest (section.3) cvn/Title (\376\377\000C\000o\000n\000f\000i\000g\000u\000r\000a\000t\000i\000o\000n) +/OUT pdfmark end + 6863 5867 a 6863 5867 a +SDict begin [/Count -0/Dest (subsection.3.1) cvn/Title (\376\377\000C\000o\000n\000f\000i\000g\000u\000r\000a\000t\000i\000o\000n\000\040\000V\000a\000r\000i\000a\000b\000l\000e\000s\000\040\000a\000n\000d\000\040\000L\000o\000c\000a\000t\000i\000o\000n\000\040\000o\000f\000\040\000C\000o\000n\000f\000i\000g\000u\000r\000a\000t\000i\000o\000n\000\040\000F\000i\000l\000e) +/OUT pdfmark end + 6863 5867 a 6863 +5867 a +SDict begin [/Count -0/Dest (subsection.3.2) cvn/Title (\376\377\000C\000o\000n\000f\000i\000g\000u\000r\000a\000t\000i\000o\000n\000\040\000F\000i\000l\000e\000\040\000F\000o\000r\000m\000a\000t) +/OUT pdfmark end + 6863 5867 a 6863 5867 a +SDict begin [/Count -0/Dest (subsection.3.3) cvn/Title (\376\377\000T\000e\000X\000\040\000O\000u\000t\000p\000u\000t\000\040\000S\000e\000t\000u\000p) +/OUT pdfmark end + 6863 5867 a 6863 5867 +a +SDict begin [/Count -0/Dest (subsection.3.4) cvn/Title (\376\377\000W\000h\000a\000t\000\040\000t\000o\000\040\000P\000r\000i\000n\000t) +/OUT pdfmark end + 6863 5867 a 6863 5867 a +SDict begin [/Count -0/Dest (subsection.3.5) cvn/Title (\376\377\000L\000a\000n\000g\000u\000a\000g\000e\000\040\000a\000n\000d\000\040\000E\000n\000c\000o\000d\000i\000n\000g) +/OUT pdfmark end + 6863 5867 a 6863 5867 a +SDict begin [/Count -0/Dest (subsection.3.6) cvn/Title (\376\377\000F\000o\000n\000t\000s) +/OUT pdfmark end + 6863 +5867 a 6863 5867 a +SDict begin [/Count -0/Dest (subsection.3.7) cvn/Title (\376\377\000L\000e\000n\000g\000t\000h\000s) +/OUT pdfmark end + 6863 5867 a 6863 5867 a +SDict begin [/Count -0/Dest (subsection.3.8) cvn/Title (\376\377\000S\000c\000a\000l\000i\000n\000g\000\040\000a\000n\000d\000\040\000R\000o\000t\000a\000t\000i\000o\000n) +/OUT pdfmark end + 6863 5867 +a 6863 5867 a +SDict begin [/Count -8/Dest (section.4) cvn/Title (\376\377\000R\000u\000n\000n\000i\000n\000g\000\040\000t\000h\000e\000\040\000P\000r\000o\000g\000r\000a\000m) +/OUT pdfmark end + 6863 5867 a 6863 5867 a +SDict begin [/Count -0/Dest (subsection.4.1) cvn/Title (\376\377\000P\000r\000o\000g\000r\000a\000m\000\040\000I\000n\000v\000o\000c\000a\000t\000i\000o\000n\000\040\000A\000n\000d\000\040\000O\000p\000t\000i\000o\000n\000s) +/OUT pdfmark end + 6863 5867 a 6863 +5867 a +SDict begin [/Count -0/Dest (subsection.4.2) cvn/Title (\376\377\000D\000a\000t\000a\000\040\000F\000i\000l\000e) +/OUT pdfmark end + 6863 5867 a 6863 5867 a +SDict begin [/Count -0/Dest (subsection.4.3) cvn/Title (\376\377\000T\000w\000i\000n\000s) +/OUT pdfmark end + 6863 5867 a 6863 5867 +a +SDict begin [/Count -0/Dest (subsection.4.4) cvn/Title (\376\377\000A\000b\000o\000r\000t\000i\000o\000n\000s) +/OUT pdfmark end + 6863 5867 a 6863 5867 a +SDict begin [/Count -0/Dest (subsection.4.5) cvn/Title (\376\377\000C\000h\000i\000l\000d\000l\000e\000s\000s\000n\000e\000s\000s\000\040\000a\000n\000d\000\040\000I\000n\000f\000e\000r\000t\000i\000l\000i\000t\000y) +/OUT pdfmark end + 6863 5867 a 6863 5867 a +SDict begin [/Count -0/Dest (subsection.4.6) cvn/Title (\376\377\000O\000r\000d\000e\000r\000i\000n\000g\000\040\000S\000i\000b\000l\000i\000n\000g\000s\000\040\000a\000n\000d\000\040\000M\000a\000r\000r\000i\000a\000g\000e\000\040\000P\000a\000r\000t\000n\000e\000r\000s) +/OUT pdfmark end + 6863 +5867 a 6863 5867 a +SDict begin [/Count -0/Dest (subsection.4.7) cvn/Title (\376\377\000C\000o\000n\000s\000a\000n\000g\000u\000i\000n\000i\000c\000\040\000U\000n\000i\000o\000n\000s) +/OUT pdfmark end + 6863 5867 a 6863 5867 a +SDict begin [/Count -0/Dest (subsection.4.8) cvn/Title (\376\377\000L\000a\000n\000g\000u\000a\000g\000e\000-\000D\000e\000p\000e\000n\000d\000e\000n\000t\000\040\000K\000e\000y\000w\000o\000r\000d\000s) +/OUT pdfmark end + 6863 5867 +a 6863 5867 a +SDict begin [/Count -6/Dest (part.2) cvn/Title (\376\377\000I\000I\000\040\000A\000l\000g\000o\000r\000i\000t\000h\000m\000\040\000D\000e\000s\000c\000r\000i\000p\000t\000i\000o\000n) +/OUT pdfmark end + 6863 5867 a 6863 5867 a +SDict begin [/Count -0/Dest (section.5) cvn/Title (\376\377\000I\000n\000t\000r\000o\000d\000u\000c\000t\000i\000o\000n) +/OUT pdfmark end + 6863 5867 a 6863 +5867 a +SDict begin [/Count -0/Dest (section.6) cvn/Title (\376\377\000M\000a\000i\000n\000\040\000A\000l\000g\000o\000r\000i\000t\000h\000m) +/OUT pdfmark end + 6863 5867 a 6863 5867 a +SDict begin [/Count -0/Dest (section.7) cvn/Title (\376\377\000A\000l\000g\000o\000r\000i\000t\000h\000m\000\040\000f\000o\000r\000\040\000S\000o\000r\000t\000i\000n\000g\000\040\000S\000i\000b\000l\000i\000n\000g\000s\000\040\000a\000n\000d\000\040\000M\000a\000r\000r\000i\000a\000g\000e\000\040\000P\000a\000r\000t\000n\000e\000r\000s) +/OUT pdfmark end + 6863 5867 a 6863 5867 +a +SDict begin [/Count -0/Dest (section.8) cvn/Title (\376\377\000M\000o\000d\000i\000f\000i\000c\000a\000t\000i\000o\000n\000s\000\040\000f\000o\000r\000\040\000C\000o\000n\000s\000a\000n\000g\000u\000n\000i\000c\000\040\000U\000n\000i\000o\000n\000s) +/OUT pdfmark end + 6863 5867 a 6863 5867 a +SDict begin [/Count -0/Dest (section.9) cvn/Title (\376\377\000C\000o\000n\000c\000l\000u\000s\000i\000o\000n) +/OUT pdfmark end + 6863 5867 a 6863 5867 a +SDict begin [/Count -0/Dest (section.10) cvn/Title (\376\377\000A\000c\000k\000n\000o\000w\000l\000e\000d\000g\000e\000m\000e\000n\000t\000s) +/OUT pdfmark end + 6863 +5867 a 6863 5867 a +SDict begin [/PageMode /UseOutlines/Page 1/View [/Fit] /DOCVIEW pdfmark +end + 6863 5867 a 6863 5867 a +SDict begin [ {Catalog}<<>> /PUT pdfmark end + 6863 5867 +a 6863 5867 a +SDict begin H.S end + 6863 5867 a 6863 5867 a +SDict begin 12 H.A end + 6863 5867 a 6863 +5867 a +SDict begin [/View [/XYZ H.V]/Dest (Doc-Start) cvn /DEST pdfmark end + 6863 5867 a 0 TeXcolorgray 0 TeXcolorgray 6953 +11623 a FC(A)578 b(Program)g(F)-150 b(or)578 b(Automatic)h(P)-50 +b(edigree)579 b(Construction)19726 14058 y(With)e FB(pst-)55 +b(pdgr)10482 16494 y FC(User)579 b(Man)-50 b(ual)578 +b(and)g(Algorithm)g(Description)9878 19704 y FA(Boris)434 +b(V)-108 b(eytsman,)434 b Fz(borisv@lk.net)3023 b FA(Leila)434 +b(Akhmadeev)-72 b(a)22635 22309 y(Marc)-36 b(h)433 b(2012)p +0 TeXcolorgray 0 TeXcolorgray 23703 26294 a Fy(Abstract)p +0 TeXcolorgray 0 TeXcolorgray 11166 28029 a Fx(The)256 +b(set)h(of)f(macros)g(in)h Fw(pst-)55 b(pdgr)256 b Fx(pac)-28 +b(k)-57 b(age)257 b(allo)-28 b(ws)256 b(to)g(t)-28 b(yp)28 +b(eset)258 b(complex)g(p)28 b(edi-)9631 29247 y(grees.)447 +b(Ho)-28 b(w)g(ev)g(er,)322 b(a)c(man)-28 b(ual)317 b(placemen)-28 +b(t)319 b(of)f(p)28 b(edigree)319 b(sym)-28 b(b)28 b(ols)318 +b(on)g(a)f(can)-28 b(v)-57 b(as)318 b(is)g(a)9631 30464 +y(time-consuming)289 b(task.)437 b(This)287 b(program)f(pro)28 +b(duces)288 b(T)30702 30679 y(E)31270 30464 y(X)f(\014les)h(from)f +(spreadsheets)9631 31682 y(with)304 b(the)h(data)f(on)g(inheritance)i +(for)e(a)g(large)h(class)f(of)g(p)28 b(edigrees.)445 +b(It)304 b(has)g(a)h(simple)9631 32900 y(in)-28 b(terface)341 +b(and)g(can)g(b)28 b(e)342 b(used)g(for)e(quite)j(complex)g(p)28 +b(edigrees.)p 0 TeXcolorgray 0 TeXcolorgray 28320 45650 +a +tx@Dict begin { -128.03734 51.21501 } PutCoor PutBegin end + 28320 45650 a 27533 45650 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@GF1 16 {InitRnode } /NodeScale {} def NewNode end end + 27533 45650 a 787 w @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath 0.8 SLW 0 setgray -9.38945 -9.38945 moveto +9.38945 9.38945 L 0 setlinejoin 0 setlinecap stroke end + +@endspecial +28320 45650 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 28320 45650 a 28498 46331 a Fx(I:1)28320 +45650 y +tx@Dict begin PutEnd end + 28320 45650 a 28320 45650 a +tx@Dict begin PutEnd end + 28320 45650 a 28320 +45650 a +tx@Dict begin { 0.0 51.21501 } PutCoor PutBegin end + 28320 45650 a 27533 45650 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@GF2 16 {InitRnode } /NodeScale {} def NewNode end end + 27533 45650 a 787 +w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 28320 45650 +a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 28320 45650 a 28498 46331 a Fx(I:3)28320 45650 y +tx@Dict begin PutEnd end + 28320 +45650 a 28320 45650 a +tx@Dict begin PutEnd end + 28320 45650 a 28320 45650 a +tx@Dict begin { 85.35823 51.21501 } PutCoor PutBegin end + 28320 +45650 a 27533 45650 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@GM2 16 {InitRnode } /NodeScale {} def NewNode end end + 27533 45650 a 787 w @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 28320 45650 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 28320 45650 a +28498 46331 a Fx(I:4)28320 45650 y +tx@Dict begin PutEnd end + 28320 45650 a 28320 +45650 a +tx@Dict begin PutEnd end + 28320 45650 a 28320 45650 a +tx@Dict begin { 42.67911 51.21501 } PutCoor PutBegin end + 28320 45650 a 28320 +45650 a +tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@GF2_m_GM2 10 {InitPnode +} /NodeScale {} def NewNode end end + 28320 45650 a 28320 45650 a +tx@Dict begin PutEnd end + 28320 45650 a 28320 +45650 a +tx@Dict begin { -85.35823 51.21501 } PutCoor PutBegin end + 28320 45650 a 28320 45650 a +tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@GF1_m_GM1 10 {InitPnode +} /NodeScale {} def NewNode end end + 28320 45650 a 28320 +45650 a +tx@Dict begin PutEnd end + 28320 45650 a 28320 45650 a +tx@Dict begin { -42.67911 51.21501 } PutCoor PutBegin end + 28320 45650 a 27533 +45650 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@GM1 16 {InitRnode } /NodeScale {} def NewNode end end + 27533 45650 a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath 0.8 SLW 0 setgray 0.0 7.11317 moveto +0.0 -7.11317 L 0 setlinejoin 0 setlinecap stroke end + + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath 0.8 SLW 0 setgray -9.38945 -9.38945 moveto +9.38945 9.38945 L 0 setlinejoin 0 setlinecap stroke end + +@endspecial 28320 45650 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 28320 45650 a +28498 46331 a Fx(I:2)28320 45650 y +tx@Dict begin PutEnd end + 28320 45650 a 28320 +45650 a +tx@Dict begin PutEnd end + 28320 45650 a 28320 45650 a +tx@Dict begin { 0.0 0.0 } PutCoor PutBegin end + 28320 45650 a 28320 +45650 a +tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@F1_m_M1 10 {InitPnode +} /NodeScale {} def NewNode end end + 28320 45650 a 28320 45650 a +tx@Dict begin PutEnd end + 28320 45650 a 28320 +45650 a +tx@Dict begin { -106.69778 0.0 } PutCoor PutBegin end + 28320 45650 a 27533 45650 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@A1 16 {InitRnode } /NodeScale {} def NewNode end end + 27533 45650 a 787 +w @beginspecial @setspecial + tx@Dict begin STP newpath 0.8 SLW 0 setgray /DS 2.0 2. CLW mul +add 2 div def /PSTricksDotFont 0. [1.0 0.0 0.0 1.0 0.0 0.0] FontDot +/Dot { moveto gsave 1. 1. scale (b) show grestore } bind def 0.0 +0.0 Dot end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 28320 45650 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 28320 45650 a +28498 46331 a Fx(I)g(I:1)28320 45650 y +tx@Dict begin PutEnd end + 28320 45650 a +28320 45650 a +tx@Dict begin PutEnd end + 28320 45650 a 28320 45650 a +tx@Dict begin { 42.67911 0.0 } PutCoor PutBegin end + 28320 45650 +a 27533 45650 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@M1 16 {InitRnode } /NodeScale {} def NewNode end end + 27533 45650 a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + + +@endspecial 28320 45650 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 28320 45650 a 28498 46331 +a Fx(I)g(I:3)28320 45650 y +tx@Dict begin PutEnd end + 28320 45650 a 28320 45650 +a +tx@Dict begin PutEnd end + 28320 45650 a 28320 45650 a +tx@Dict begin { -64.01866 0.0 } PutCoor PutBegin end + 28320 45650 a 27533 45650 +a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@F1 16 {InitRnode } /NodeScale {} def NewNode end end + 27533 45650 a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.5 setgray 1. .setopacityalpha + fill grestore gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 +setlinejoin 0 setlinecap stroke grestore end + +@endspecial +28320 45650 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 28320 45650 a 28498 46331 a Fx(I)g(I:2)28320 +45650 y +tx@Dict begin PutEnd end + 28320 45650 a 28320 45650 a +tx@Dict begin PutEnd end + 28320 45650 a 28320 +45650 a +tx@Dict begin { 0.0 -51.21501 } PutCoor PutBegin end + 28320 45650 a 27533 45650 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@S1 16 {InitRnode } /NodeScale {} def NewNode end end + 27533 45650 a 787 +w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.5 setgray 1. .setopacityalpha fill + grestore gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore end + +@endspecial 28320 45650 +a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 28320 45650 a 28498 46331 a Fx(I)g(I)g(I:3)28320 45650 +y +tx@Dict begin PutEnd end + 28320 45650 a 28320 45650 a +tx@Dict begin PutEnd end + 28320 45650 a 28320 45650 +a +tx@Dict begin { 42.67911 -51.21501 } PutCoor PutBegin end + 28320 45650 a 27533 45650 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@S2 16 {InitRnode } /NodeScale {} def NewNode end end + 27533 45650 a 787 w @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 28320 45650 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 28320 45650 a +28498 46331 a Fx(I)g(I)g(I:4)28320 45650 y +tx@Dict begin PutEnd end + 28320 45650 +a 28320 45650 a +tx@Dict begin PutEnd end + 28320 45650 a 28320 45650 a +tx@Dict begin { -42.67911 -51.21501 } PutCoor PutBegin end + 28320 45650 +a 27533 45650 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@P 16 {InitRnode } /NodeScale {} def NewNode end end + 27533 45650 a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.5 setgray 1. .setopacityalpha + fill grestore gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 +setlinejoin 0 setlinecap stroke grestore end + + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul +dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0 +0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub +moveto EndArrow } def /ArrowInside { } def 0.8 SLW 0 setgray +/ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4 +1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 +h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto +gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside +{ } def [ -8.2511 -8.2511 -15.6491 -15.6491 /Lineto /lineto load +def 0 setlinejoin false NArray n 0 eq not { n 1 eq { 0 0 /n 2 def +} if () length 0 gt { 1.5 2. CLW mul add dup 1.4 mul exch 0.4 mul +neg add /arrowlength exch def 4 copy /y1 ED /x1 ED /y2 ED /x2 ED /Alpha +y2 y1 sub x2 x1 sub Atan def ArrowA x1 Alpha cos arrowlength mul add +y1 Alpha sin arrowlength mul add /n n 1 sub def n { 4 copy /y1 ED /x1 +ED /y2 ED /x2 ED x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub Atan +def /ArrowPos 0. def /dArrowPos 0.5 abs def 1. cvi { /ArrowPos ArrowPos +dArrowPos add def x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos +mul add ArrowInside pop pop } repeat }{ /ArrowPos 0. def /dArrowPos +1. 1 gt {1.0 1. 1.0 add div }{0.5 } ifelse def 1. cvi { /ArrowPos +ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul x1 add y2 y1 sub +ArrowPos mul y1 add ArrowInside pop pop } repeat } ifelse pop pop Lineto +} repeat }{ ArrowA /n n 2 sub def n { Lineto } repeat } ifelse CP 4 +2 roll ArrowB L pop pop } if gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 28320 +45650 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 28320 45650 a 28498 46331 a Fx(I)g(I)g(I:2)28320 +45650 y +tx@Dict begin PutEnd end + 28320 45650 a 28320 45650 a +tx@Dict begin PutEnd end + 28320 45650 a 28320 +45650 a +tx@Dict begin { -106.69778 -51.21501 } PutCoor PutBegin end + 28320 45650 a 27533 45650 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@C1 16 {InitRnode } /NodeScale {} def NewNode end end + 27533 45650 a 787 +w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.5 setgray 1. .setopacityalpha fill + grestore gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore end + +@endspecial 28320 45650 +a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 28320 45650 a 28498 46331 a Fx(I)g(I)g(I:1)28320 45650 +y +tx@Dict begin PutEnd end + 28320 45650 a 28320 45650 a +tx@Dict begin PutEnd end + 28320 45650 a 28320 45650 +a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@GF2_m_GM2 /N@M1 InitNC { tx@Dict begin +/Lineto /lineto load def 0 setlinejoin false pop end /AngleA -90. +def /AngleB 90. def /ArmA 25.60728 GetEdgeA yA yA1 sub dup mul xA xA1 +sub dup mul add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB +0 def NCAngles } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore grestore end + 28320 45650 a 28320 45650 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@GF2_m_GM2 /N@GM2 InitNC { NCCoor tx@Dict +begin ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED +x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. + def /Length x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos +ArrowPos dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } loop }{/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div +}{ 0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop lineto pop pop end } if end gsave +0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin 0 setlinecap +stroke grestore grestore end + 28320 45650 a 28320 45650 +a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@GF2_m_GM2 /N@GF2 InitNC { NCCoor tx@Dict +begin ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED +x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. + def /Length x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos +ArrowPos dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } loop }{/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div +}{ 0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop lineto pop pop end } if end gsave +0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin 0 setlinecap +stroke grestore grestore end + 28320 45650 a 28320 45650 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@GF1_m_GM1 /N@A1 InitNC { tx@Dict begin +/Lineto /lineto load def 0 setlinejoin false pop end /AngleA -90. +def /AngleB 90. def /ArmA 25.60728 GetEdgeA yA yA1 sub dup mul xA xA1 +sub dup mul add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB +0 def NCAngles } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore grestore end + 28320 45650 a 28320 45650 +a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@GF1_m_GM1 /N@F1 InitNC { tx@Dict begin +/Lineto /lineto load def 0 setlinejoin false pop end /AngleA -90. +def /AngleB 90. def /ArmA 25.60728 GetEdgeA yA yA1 sub dup mul xA xA1 +sub dup mul add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB +0 def NCAngles } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore grestore end + 28320 45650 a 28320 45650 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@GF1_m_GM1 /N@GM1 InitNC { NCCoor tx@Dict +begin ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED +x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. + def /Length x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos +ArrowPos dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } loop }{/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div +}{ 0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop lineto pop pop end } if end gsave +0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin 0 setlinecap +stroke grestore grestore end + 28320 45650 a 28320 45650 +a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@GF1_m_GM1 /N@GF1 InitNC { NCCoor tx@Dict +begin ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED +x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. + def /Length x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos +ArrowPos dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } loop }{/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div +}{ 0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop lineto pop pop end } if end gsave +0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin 0 setlinecap +stroke grestore grestore end + 28320 45650 a 28320 45650 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@F1_m_M1 /N@P InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 25.60728 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 28320 45650 a 28320 45650 +a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@F1_m_M1 /N@S1 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 25.60728 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 28320 45650 a 28320 45650 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@F1_m_M1 /N@S2 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 25.60728 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 28320 45650 a 28320 45650 +a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@F1_m_M1 /N@M1 InitNC { NCCoor tx@Dict begin +ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1 +0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length +x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos +0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def +1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul +x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat } +ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray + 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore + grestore end + 28320 45650 a 28320 45650 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@F1_m_M1 /N@F1 InitNC { NCCoor tx@Dict begin +ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1 +0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length +x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos +0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def +1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul +x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat } +ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray + 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore + grestore end + 28320 45650 a 28320 45650 +a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@A1 /N@C1 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 25.60728 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 28320 45650 a 0 TeXcolorgray 25681 70071 a Fv(1)p 0 +TeXcolorgray eop end +%%Page: 2 2 +TeXDict begin 2 1 bop 0 TeXcolorgray 0 0 a +SDict begin /product where{pop product(Distiller)search{pop pop pop +version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto +closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show +grestore}if}{pop}ifelse}{pop}ifelse}if end + 0 0 a 0 TeXcolorgray +6752 1660 a +SDict begin H.S end + 6752 1660 a 6752 1660 a +SDict begin H.R end + 6752 1660 a 6752 +1660 a +SDict begin [/View [/XYZ H.V]/Dest (page.2) cvn /DEST pdfmark end + 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray +6863 6974 a +SDict begin H.S end + 6863 6974 a 6863 6974 a +SDict begin 18 H.A end + 6863 6974 a 6863 +6974 a +SDict begin [/View [/XYZ H.V]/Dest (section*.1) cvn /DEST pdfmark end + 6863 6974 a Fu(Con)-50 b(ten)g(ts)p 0 TeXcolorgray +6863 10793 a +SDict begin H.S end + 6863 10793 a Ft(I)1494 b(User)499 b(Man)-42 +b(ual)17345 10793 y +SDict begin 14 H.L end + 17345 10793 a 17345 10793 a +SDict begin [/Subtype /Link/Dest (part.1) cvn/H /I/Border [0 0 0]BorderArrayPatch/Color +[1 0 0] H.B /ANN pdfmark end + 17345 +10793 a 0 TeXcolorgray 26961 w Ft(4)p 0 TeXcolorgray +6863 13228 a +SDict begin H.S end + 6863 13228 a Fs(1)1025 b(In)-35 b(tro)35 +b(duction)15541 13228 y +SDict begin 12 H.L end + 15541 13228 a 15541 13228 a +SDict begin [/Subtype /Link/Dest (section.1) cvn/H /I/Border [0 0 0]BorderArrayPatch/Color +[1 0 0] H.B /ANN pdfmark end + 15541 +13228 a 0 TeXcolorgray 28876 w Fs(4)p 0 TeXcolorgray +6863 15663 a +SDict begin H.S end + 6863 15663 a Fs(2)1025 b(Installation)14849 +15663 y +SDict begin 12 H.L end + 14849 15663 a 14849 15663 a +SDict begin [/Subtype /Link/Dest (section.2) cvn/H /I/Border [0 0 0]BorderArrayPatch/Color +[1 0 0] H.B /ANN pdfmark end + 14849 15663 a 0 TeXcolorgray +29568 w Fs(4)p 0 TeXcolorgray 8524 16992 a +SDict begin H.S end + 8524 16992 +a Fv(2.1)1133 b(System)369 b(Requiremen)-31 b(ts)21523 +16992 y +SDict begin 12 H.L end + 21523 16992 a 21523 16992 a +SDict begin [/Subtype /Link/Dest (subsection.2.1) cvn/H /I/Border [0 +0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end + 21523 16992 a 0 TeXcolorgray +1114 w Fv(.)554 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f +(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)p 0 TeXcolorgray +1754 w(4)p 0 TeXcolorgray 0 TeXcolorgray 8524 18320 a +SDict begin H.S end + +8524 18320 a Fv(2.2)1133 b(Unix/Lin)-31 b(ux)371 b(Installation)22619 +18320 y +SDict begin 12 H.L end + 22619 18320 a 22619 18320 a +SDict begin [/Subtype /Link/Dest (subsection.2.2) cvn/H /I/Border [0 +0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end + 22619 18320 a 0 TeXcolorgray +879 w Fv(.)554 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)p 0 TeXcolorgray 1754 +w(4)p 0 TeXcolorgray 0 TeXcolorgray 8524 19649 a +SDict begin H.S end + 8524 +19649 a Fv(2.3)1133 b(Installation)372 b(in)d(Other)g(Systems)25358 +19649 y +SDict begin 12 H.L end + 25358 19649 a 25358 19649 a +SDict begin [/Subtype /Link/Dest (subsection.2.3) cvn/H /I/Border [0 +0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end + 25358 19649 a 0 TeXcolorgray +723 w Fv(.)554 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)p 0 TeXcolorgray 1754 w(5)p 0 TeXcolorgray +0 TeXcolorgray 6863 22084 a +SDict begin H.S end + 6863 22084 a Fs(3)1025 b(Con\014guration) +16171 22084 y +SDict begin 12 H.L end + 16171 22084 a 16171 22084 a +SDict begin [/Subtype /Link/Dest (section.3) cvn/H /I/Border [0 0 0]BorderArrayPatch/Color +[1 0 0] H.B /ANN pdfmark end + 16171 22084 +a 0 TeXcolorgray 28246 w Fs(5)p 0 TeXcolorgray 8524 23412 +a +SDict begin H.S end + 8524 23412 a Fv(3.1)1133 b(Con\014guration)371 b(V)-92 +b(ariables)371 b(and)e(Lo)31 b(cation)371 b(of)f(Con\014guration)h +(File)39742 23412 y +SDict begin 12 H.L end + 39742 23412 a 39742 23412 a +SDict begin [/Subtype /Link/Dest (subsection.3.1) cvn/H /I/Border [0 +0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end + 39742 +23412 a 0 TeXcolorgray 975 w Fv(.)554 b(.)g(.)p 0 TeXcolorgray +1754 w(5)p 0 TeXcolorgray 0 TeXcolorgray 8524 24741 a +SDict begin H.S end + +8524 24741 a Fv(3.2)1133 b(Con\014guration)371 b(File)f(F)-92 +b(ormat)23805 24741 y +SDict begin 12 H.L end + 23805 24741 a 23805 24741 a +SDict begin [/Subtype /Link/Dest (subsection.3.2) cvn/H /I/Border [0 +0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end + 23805 +24741 a 0 TeXcolorgray 554 w Fv(.)554 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)p +0 TeXcolorgray 1754 w(6)p 0 TeXcolorgray 0 TeXcolorgray +8524 26069 a +SDict begin H.S end + 8524 26069 a Fv(3.3)1133 b(T)11684 26307 +y(E)12300 26069 y(X)369 b(Output)h(Setup)20202 26069 +y +SDict begin 12 H.L end + 20202 26069 a 20202 26069 a +SDict begin [/Subtype /Link/Dest (subsection.3.3) cvn/H /I/Border [0 +0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end + 20202 26069 a 0 TeXcolorgray +713 w Fv(.)554 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)p 0 TeXcolorgray +1754 w(6)p 0 TeXcolorgray 0 TeXcolorgray 8524 27397 a +SDict begin H.S end + +8524 27397 a Fv(3.4)1133 b(What)369 b(to)h(Prin)-31 b(t)18036 +27397 y +SDict begin 12 H.L end + 18036 27397 a 18036 27397 a +SDict begin [/Subtype /Link/Dest (subsection.3.4) cvn/H /I/Border [0 +0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end + 18036 27397 a 0 TeXcolorgray +296 w Fv(.)554 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)p +0 TeXcolorgray 1754 w(7)p 0 TeXcolorgray 0 TeXcolorgray +8524 28726 a +SDict begin H.S end + 8524 28726 a Fv(3.5)1133 b(Language)370 +b(and)g(Enco)31 b(ding)22753 28726 y +SDict begin 12 H.L end + 22753 28726 a 22753 +28726 a +SDict begin [/Subtype /Link/Dest (subsection.3.5) cvn/H /I/Border [0 +0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end + 22753 28726 a 0 TeXcolorgray 745 w Fv(.)554 b(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +p 0 TeXcolorgray 1754 w(8)p 0 TeXcolorgray 0 TeXcolorgray +8524 30054 a +SDict begin H.S end + 8524 30054 a Fv(3.6)1133 b(F)-92 b(on)-31 +b(ts)13705 30054 y +SDict begin 12 H.L end + 13705 30054 a 13705 30054 a +SDict begin [/Subtype /Link/Dest (subsection.3.6) cvn/H /I/Border [0 +0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end + 13705 +30054 a 0 TeXcolorgray 323 w Fv(.)553 b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)p 0 TeXcolorgray 1754 w(8)p +0 TeXcolorgray 0 TeXcolorgray 8524 31382 a +SDict begin H.S end + 8524 31382 +a Fv(3.7)1133 b(Lengths)14904 31382 y +SDict begin 12 H.L end + 14904 31382 a 14904 +31382 a +SDict begin [/Subtype /Link/Dest (subsection.3.7) cvn/H /I/Border [0 +0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end + 14904 31382 a 0 TeXcolorgray 845 w Fv(.)554 b(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.) +h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)p 0 TeXcolorgray +1754 w(9)p 0 TeXcolorgray 0 TeXcolorgray 8524 32711 a +SDict begin H.S end + +8524 32711 a Fv(3.8)1133 b(Scaling)370 b(and)g(Rotation)21291 +32711 y +SDict begin 12 H.L end + 21291 32711 a 21291 32711 a +SDict begin [/Subtype /Link/Dest (subsection.3.8) cvn/H /I/Border [0 +0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end + 21291 32711 a 0 TeXcolorgray +485 w Fv(.)554 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)p 0 TeXcolorgray +1754 w(9)p 0 TeXcolorgray 0 TeXcolorgray 6863 35146 a +SDict begin H.S end + +6863 35146 a Fs(4)1025 b(Running)425 b(the)g(Program)20802 +35146 y +SDict begin 12 H.L end + 20802 35146 a 20802 35146 a +SDict begin [/Subtype /Link/Dest (section.4) cvn/H /I/Border [0 0 0]BorderArrayPatch/Color +[1 0 0] H.B /ANN pdfmark end + 20802 35146 a 0 TeXcolorgray +22978 w Fs(10)p 0 TeXcolorgray 8524 36474 a +SDict begin H.S end + 8524 36474 +a Fv(4.1)1133 b(Program)370 b(In)-31 b(v)g(o)31 b(cation)372 +b(And)d(Options)27332 36474 y +SDict begin 12 H.L end + 27332 36474 a 27332 36474 +a +SDict begin [/Subtype /Link/Dest (subsection.4.1) cvn/H /I/Border [0 +0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end + 27332 36474 a 0 TeXcolorgray 471 w Fv(.)554 b(.)g(.)g(.)g(.)g(.)g(.)g +(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)p 0 TeXcolorgray +1200 w(10)p 0 TeXcolorgray 0 TeXcolorgray 8524 37803 +a +SDict begin H.S end + 8524 37803 a Fv(4.2)1133 b(Data)370 b(File)15651 37803 +y +SDict begin 12 H.L end + 15651 37803 a 15651 37803 a +SDict begin [/Subtype /Link/Dest (subsection.4.2) cvn/H /I/Border [0 +0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end + 15651 37803 a 0 TeXcolorgray +959 w Fv(.)554 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)p +0 TeXcolorgray 1200 w(11)p 0 TeXcolorgray 0 TeXcolorgray +8524 39131 a +SDict begin H.S end + 8524 39131 a Fv(4.3)1133 b(Twins)14027 39131 +y +SDict begin 12 H.L end + 14027 39131 a 14027 39131 a +SDict begin [/Subtype /Link/Dest (subsection.4.3) cvn/H /I/Border [0 +0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end + 14027 39131 a 0 TeXcolorgray +861 w Fv(.)554 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)p 0 TeXcolorgray 1200 w(13)p 0 TeXcolorgray 0 TeXcolorgray +8524 40459 a +SDict begin H.S end + 8524 40459 a Fv(4.4)1133 b(Ab)31 b(ortions)15875 +40459 y +SDict begin 12 H.L end + 15875 40459 a 15875 40459 a +SDict begin [/Subtype /Link/Dest (subsection.4.4) cvn/H /I/Border [0 +0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end + 15875 40459 a 0 TeXcolorgray +735 w Fv(.)554 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)p +0 TeXcolorgray 1200 w(13)p 0 TeXcolorgray 0 TeXcolorgray +8524 41788 a +SDict begin H.S end + 8524 41788 a Fv(4.5)1133 b(Childlessness)369 +b(and)g(Infertilit)-31 b(y)24501 41788 y +SDict begin 12 H.L end + 24501 41788 +a 24501 41788 a +SDict begin [/Subtype /Link/Dest (subsection.4.5) cvn/H /I/Border [0 +0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end + 24501 41788 a 0 TeXcolorgray 719 w Fv(.)554 +b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)p 0 TeXcolorgray 1200 w(13)p 0 TeXcolorgray +0 TeXcolorgray 8524 43116 a +SDict begin H.S end + 8524 43116 a Fv(4.6)1133 +b(Ordering)369 b(Siblings)h(and)g(Marriage)f(P)-31 b(artners)30856 +43116 y +SDict begin 12 H.L end + 30856 43116 a 30856 43116 a +SDict begin [/Subtype /Link/Dest (subsection.4.6) cvn/H /I/Border [0 +0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end + 30856 43116 a 0 TeXcolorgray +391 w Fv(.)554 b(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)p +0 TeXcolorgray 1200 w(19)p 0 TeXcolorgray 0 TeXcolorgray +8524 44444 a +SDict begin H.S end + 8524 44444 a Fv(4.7)1133 b(Consanguinic)371 +b(Unions)21259 44444 y +SDict begin 12 H.L end + 21259 44444 a 21259 44444 a +SDict begin [/Subtype /Link/Dest (subsection.4.7) cvn/H /I/Border [0 +0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end + 21259 +44444 a 0 TeXcolorgray 517 w Fv(.)554 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)p +0 TeXcolorgray 1200 w(26)p 0 TeXcolorgray 0 TeXcolorgray +8524 45773 a +SDict begin H.S end + 8524 45773 a Fv(4.8)1133 b(Language-Dep)31 +b(enden)-31 b(t)370 b(Keyw)-31 b(ords)26391 45773 y +SDict begin 12 H.L end + 26391 +45773 a 26391 45773 a +SDict begin [/Subtype /Link/Dest (subsection.4.8) cvn/H /I/Border [0 +0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end + 26391 45773 a 0 TeXcolorgray 551 +w Fv(.)554 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)p 0 TeXcolorgray 1200 w(26)p 0 TeXcolorgray +0 TeXcolorgray 6863 49592 a +SDict begin H.S end + 6863 49592 a Ft(I)42 b(I)1493 +b(Algorithm)500 b(Description)24238 49592 y +SDict begin 14 H.L end + 24238 49592 +a 24238 49592 a +SDict begin [/Subtype /Link/Dest (part.2) cvn/H /I/Border [0 0 0]BorderArrayPatch/Color +[1 0 0] H.B /ANN pdfmark end + 24238 49592 a 0 TeXcolorgray 19321 w +Ft(29)p 0 TeXcolorgray 6863 52027 a +SDict begin H.S end + 6863 52027 a Fs(5)1025 +b(In)-35 b(tro)35 b(duction)15541 52027 y +SDict begin 12 H.L end + 15541 52027 +a 15541 52027 a +SDict begin [/Subtype /Link/Dest (section.5) cvn/H /I/Border [0 0 0]BorderArrayPatch/Color +[1 0 0] H.B /ANN pdfmark end + 15541 52027 a 0 TeXcolorgray 28239 w +Fs(29)p 0 TeXcolorgray 6863 54462 a +SDict begin H.S end + 6863 54462 a Fs(6)1025 +b(Main)424 b(Algorithm)17565 54462 y +SDict begin 12 H.L end + 17565 54462 a 17565 +54462 a +SDict begin [/Subtype /Link/Dest (section.6) cvn/H /I/Border [0 0 0]BorderArrayPatch/Color +[1 0 0] H.B /ANN pdfmark end + 17565 54462 a 0 TeXcolorgray 26215 w Fs(29)p +0 TeXcolorgray 6863 56898 a +SDict begin H.S end + 6863 56898 a Fs(7)1025 b(Algorithm)425 +b(for)g(Sorting)h(Siblings)e(and)h(Marriage)g(P)-35 b(artners)38621 +56898 y +SDict begin 12 H.L end + 38621 56898 a 38621 56898 a +SDict begin [/Subtype /Link/Dest (section.7) cvn/H /I/Border [0 0 0]BorderArrayPatch/Color +[1 0 0] H.B /ANN pdfmark end + 38621 56898 a 0 TeXcolorgray +5159 w Fs(30)p 0 TeXcolorgray 6863 59333 a +SDict begin H.S end + 6863 59333 +a Fs(8)1025 b(Mo)35 b(di\014cations)425 b(for)g(Consangunic)h(Unions) +29820 59333 y +SDict begin 12 H.L end + 29820 59333 a 29820 59333 a +SDict begin [/Subtype /Link/Dest (section.8) cvn/H /I/Border [0 0 0]BorderArrayPatch/Color +[1 0 0] H.B /ANN pdfmark end + 29820 59333 +a 0 TeXcolorgray 13960 w Fs(31)p 0 TeXcolorgray 6863 +61768 a +SDict begin H.S end + 6863 61768 a Fs(9)1025 b(Conclusion)14612 61768 +y +SDict begin 12 H.L end + 14612 61768 a 14612 61768 a +SDict begin [/Subtype /Link/Dest (section.9) cvn/H /I/Border [0 0 0]BorderArrayPatch/Color +[1 0 0] H.B /ANN pdfmark end + 14612 61768 a 0 TeXcolorgray +29168 w Fs(31)p 0 TeXcolorgray 6863 64204 a +SDict begin H.S end + 6863 64204 +a Fs(10)389 b(Ac)-35 b(kno)g(wledgemen)g(ts)19092 64204 +y +SDict begin 12 H.L end + 19092 64204 a 19092 64204 a +SDict begin [/Subtype /Link/Dest (section.10) cvn/H /I/Border [0 0 +0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end + 19092 64204 a 0 TeXcolorgray +24688 w Fs(32)p 0 TeXcolorgray 25681 70071 a Fv(2)p 0 +TeXcolorgray eop end +%%Page: 3 3 +TeXDict begin 3 2 bop 0 TeXcolorgray 0 0 a +SDict begin /product where{pop product(Distiller)search{pop pop pop +version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto +closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show +grestore}if}{pop}ifelse}{pop}ifelse}if end + 0 0 a 0 TeXcolorgray +6752 1660 a +SDict begin H.S end + 6752 1660 a 6752 1660 a +SDict begin H.R end + 6752 1660 a 6752 +1660 a +SDict begin [/View [/XYZ H.V]/Dest (page.3) cvn /DEST pdfmark end + 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray +6863 6974 a +SDict begin H.S end + 6863 6974 a 6863 6974 a +SDict begin 18 H.A end + 6863 6974 a 6863 +6974 a +SDict begin [/View [/XYZ H.V]/Dest (section*.2) cvn /DEST pdfmark end + 6863 6974 a Fu(List)599 b(of)f(Figures)p 0 TeXcolorgray +8524 9398 a +SDict begin H.S end + 8524 9398 a Fv(1)1993 b(Example)292 b(of)g(the)f(T)-31 +b(yp)31 b(eset)292 b(P)-31 b(edigree)292 b(in)f(English)i(\(Data)f +(File)f(from)h(List-)11070 10727 y(ing)p 0 TeXcolorgray +12915 10727 a +SDict begin H.S end + 12915 10727 a 0 TeXcolorgray Fv(7)p 0 TeXcolorgray +13468 10013 a +SDict begin H.R end + 13468 10013 a 13468 10727 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (lstlisting.7) cvn H.B /ANN pdfmark end + 13468 10727 +a 0 TeXcolorgray Fv(\))13898 10727 y +SDict begin 12 H.L end + 13898 10727 a 13898 +10727 a +SDict begin [/Subtype /Link/Dest (figure.1) cvn/H /I/Border [0 0 0]BorderArrayPatch/Color +[1 0 0] H.B /ANN pdfmark end + 13898 10727 a 0 TeXcolorgray 990 w Fv(.)554 b(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)p 0 TeXcolorgray +1200 w(15)p 0 TeXcolorgray 0 TeXcolorgray 8524 12055 +a +SDict begin H.S end + 8524 12055 a Fv(2)1993 b(Example)552 b(of)f(the)g(T)-31 +b(yp)31 b(eset)551 b(P)-31 b(edigree)552 b(in)e(Russian)h(\(Data)h +(File)f(from)11070 13383 y(Listing)p 0 TeXcolorgray 14781 +13383 a +SDict begin H.S end + 14781 13383 a 0 TeXcolorgray Fv(7)p 0 TeXcolorgray +15334 12670 a +SDict begin H.R end + 15334 12670 a 15334 13383 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (lstlisting.7) cvn H.B /ANN pdfmark end + 15334 13383 +a 0 TeXcolorgray Fv(\))15764 13383 y +SDict begin 12 H.L end + 15764 13383 a 15764 +13383 a +SDict begin [/Subtype /Link/Dest (figure.2) cvn/H /I/Border [0 0 0]BorderArrayPatch/Color +[1 0 0] H.B /ANN pdfmark end + 15764 13383 a 0 TeXcolorgray 846 w Fv(.)j(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)p 0 TeXcolorgray 1200 w(16)p +0 TeXcolorgray 0 TeXcolorgray 8524 14712 a +SDict begin H.S end + 8524 14712 +a Fv(3)1993 b(Example)371 b(of)e(a)h(P)-31 b(edigree)370 +b(with)g(Twins)g(\(Data)h(File)e(from)h(Listing)p 0 TeXcolorgray +39884 14712 a +SDict begin H.S end + 39884 14712 a 0 TeXcolorgray Fv(8)p 0 TeXcolorgray +40437 13998 a +SDict begin H.R end + 40437 13998 a 40437 14712 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (lstlisting.8) cvn H.B /ANN pdfmark end + 40437 14712 +a 0 TeXcolorgray Fv(\))40867 14712 y +SDict begin 12 H.L end + 40867 14712 a 40867 +14712 a +SDict begin [/Subtype /Link/Dest (figure.3) cvn/H /I/Border [0 0 0]BorderArrayPatch/Color +[1 0 0] H.B /ANN pdfmark end + 40867 14712 a 0 TeXcolorgray 711 w Fv(.)554 b(.)p +0 TeXcolorgray 1200 w(17)p 0 TeXcolorgray 0 TeXcolorgray +8524 16040 a +SDict begin H.S end + 8524 16040 a Fv(4)1993 b(Example)371 b(of)e(a)h(P)-31 +b(edigree)370 b(with)g(Ab)31 b(ortions)370 b(\(Data)h(File)e(from)h +(Listing)p 0 TeXcolorgray 41732 16040 a +SDict begin H.S end + 41732 16040 a +0 TeXcolorgray Fv(9)p 0 TeXcolorgray 42285 15327 a +SDict begin H.R end + 42285 +15327 a 42285 16040 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (lstlisting.9) cvn H.B /ANN pdfmark end + 42285 16040 a 0 TeXcolorgray Fv(\))42715 +16040 y +SDict begin 12 H.L end + 42715 16040 a 42715 16040 a +SDict begin [/Subtype /Link/Dest (figure.4) cvn/H /I/Border [0 0 0]BorderArrayPatch/Color +[1 0 0] H.B /ANN pdfmark end + 42715 16040 a 0 TeXcolorgray +0 TeXcolorgray 1231 w Fv(18)p 0 TeXcolorgray 0 TeXcolorgray +8524 17369 a +SDict begin H.S end + 8524 17369 a Fv(5)1993 b(Example)424 b(of)g(a)f(P)-31 +b(edigree)423 b(with)h(Childlessness)f(\(Data)i(File)e(from)g(List-) +11070 18697 y(ing)p 0 TeXcolorgray 12915 18697 a +SDict begin H.S end + 12915 +18697 a 0 TeXcolorgray Fv(10)p 0 TeXcolorgray 14021 17983 +a +SDict begin H.R end + 14021 17983 a 14021 18697 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (lstlisting.10) cvn H.B /ANN pdfmark end + 14021 18697 a 0 TeXcolorgray +Fv(\))14451 18697 y +SDict begin 12 H.L end + 14451 18697 a 14451 18697 a +SDict begin [/Subtype /Link/Dest (figure.5) cvn/H /I/Border [0 0 0]BorderArrayPatch/Color +[1 0 0] H.B /ANN pdfmark end + 14451 +18697 a 0 TeXcolorgray 437 w Fv(.)554 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)p 0 TeXcolorgray 1200 w(20)p +0 TeXcolorgray 0 TeXcolorgray 8524 20025 a +SDict begin H.S end + 8524 20025 +a Fv(6)1993 b(P)-31 b(edigree)370 b(from)f(Listing)p +0 TeXcolorgray 21875 20025 a +SDict begin H.S end + 21875 20025 a 0 TeXcolorgray +Fv(12)p 0 TeXcolorgray 22981 19312 a +SDict begin H.R end + 22981 19312 a 22981 +20025 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (lstlisting.12) cvn H.B /ANN pdfmark end + 22981 20025 a 0 TeXcolorgray 22981 20025 a +SDict begin 12 H.L end + 22981 +20025 a 22981 20025 a +SDict begin [/Subtype /Link/Dest (figure.6) cvn/H /I/Border [0 0 0]BorderArrayPatch/Color +[1 0 0] H.B /ANN pdfmark end + 22981 20025 a 0 TeXcolorgray 517 +w Fv(.)554 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)p 0 TeXcolorgray 1200 w(22)p +0 TeXcolorgray 0 TeXcolorgray 8524 21354 a +SDict begin H.S end + 8524 21354 +a Fv(7)1993 b(P)-31 b(edigree)370 b(from)f(Listing)p +0 TeXcolorgray 21875 21354 a +SDict begin H.S end + 21875 21354 a 0 TeXcolorgray +Fv(12)p 0 TeXcolorgray 22981 20640 a +SDict begin H.R end + 22981 20640 a 22981 +21354 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (lstlisting.12) cvn H.B /ANN pdfmark end + 22981 21354 a 0 TeXcolorgray 22981 21354 a +SDict begin 12 H.L end + 22981 +21354 a 22981 21354 a +SDict begin [/Subtype /Link/Dest (figure.7) cvn/H /I/Border [0 0 0]BorderArrayPatch/Color +[1 0 0] H.B /ANN pdfmark end + 22981 21354 a 0 TeXcolorgray 517 +w Fv(.)554 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)p 0 TeXcolorgray 1200 w(23)p +0 TeXcolorgray 0 TeXcolorgray 8524 22682 a +SDict begin H.S end + 8524 22682 +a Fv(8)1993 b(P)-31 b(edigree)370 b(from)f(Listing)p +0 TeXcolorgray 21875 22682 a +SDict begin H.S end + 21875 22682 a 0 TeXcolorgray +Fv(13)p 0 TeXcolorgray 22981 21969 a +SDict begin H.R end + 22981 21969 a 22981 +22682 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (lstlisting.13) cvn H.B /ANN pdfmark end + 22981 22682 a 0 TeXcolorgray 22981 22682 a +SDict begin 12 H.L end + 22981 +22682 a 22981 22682 a +SDict begin [/Subtype /Link/Dest (figure.8) cvn/H /I/Border [0 0 0]BorderArrayPatch/Color +[1 0 0] H.B /ANN pdfmark end + 22981 22682 a 0 TeXcolorgray 517 +w Fv(.)554 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)p 0 TeXcolorgray 1200 w(24)p +0 TeXcolorgray 0 TeXcolorgray 8524 24010 a +SDict begin H.S end + 8524 24010 +a Fv(9)1993 b(P)-31 b(edigree)370 b(from)f(Listing)p +0 TeXcolorgray 21875 24010 a +SDict begin H.S end + 21875 24010 a 0 TeXcolorgray +Fv(14)p 0 TeXcolorgray 22981 23297 a +SDict begin H.R end + 22981 23297 a 22981 +24010 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (lstlisting.14) cvn H.B /ANN pdfmark end + 22981 24010 a 0 TeXcolorgray 22981 24010 a +SDict begin 12 H.L end + 22981 +24010 a 22981 24010 a +SDict begin [/Subtype /Link/Dest (figure.9) cvn/H /I/Border [0 0 0]BorderArrayPatch/Color +[1 0 0] H.B /ANN pdfmark end + 22981 24010 a 0 TeXcolorgray 517 +w Fv(.)554 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)p 0 TeXcolorgray 1200 w(25)p +0 TeXcolorgray 0 TeXcolorgray 8524 25339 a +SDict begin H.S end + 8524 25339 +a Fv(10)1440 b(P)-31 b(edigree)370 b(from)f(Listing)p +0 TeXcolorgray 21875 25339 a +SDict begin H.S end + 21875 25339 a 0 TeXcolorgray +Fv(15)p 0 TeXcolorgray 22981 24625 a +SDict begin H.R end + 22981 24625 a 22981 +25339 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (lstlisting.15) cvn H.B /ANN pdfmark end + 22981 25339 a 0 TeXcolorgray 22981 25339 a +SDict begin 12 H.L end + 22981 +25339 a 22981 25339 a +SDict begin [/Subtype /Link/Dest (figure.10) cvn/H /I/Border [0 0 0]BorderArrayPatch/Color +[1 0 0] H.B /ANN pdfmark end + 22981 25339 a 0 TeXcolorgray 517 +w Fv(.)554 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.) +g(.)g(.)g(.)g(.)g(.)g(.)g(.)p 0 TeXcolorgray 1200 w(27)p +0 TeXcolorgray 0 TeXcolorgray 8524 26667 a +SDict begin H.S end + 8524 26667 +a Fv(11)1440 b(Subp)31 b(edigrees)368 b(and)i(Do)-31 +b(wn)g(w)g(ard)371 b(T)-92 b(ree)27521 26667 y +SDict begin 12 H.L end + 27521 +26667 a 27521 26667 a +SDict begin [/Subtype /Link/Dest (figure.11) cvn/H /I/Border [0 0 0]BorderArrayPatch/Color +[1 0 0] H.B /ANN pdfmark end + 27521 26667 a 0 TeXcolorgray 282 +w Fv(.)554 b(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)p 0 TeXcolorgray 1200 w(30)p 0 TeXcolorgray 6863 +30328 a +SDict begin H.S end + 6863 30328 a 6863 30328 a +SDict begin 18 H.A end + 6863 30328 a 6863 30328 +a +SDict begin [/View [/XYZ H.V]/Dest (section*.3) cvn /DEST pdfmark end + 6863 30328 a Fu(List)599 b(of)f(T)-149 b(ables)p 0 +TeXcolorgray 8524 32752 a +SDict begin H.S end + 8524 32752 a Fv(1)1993 b(Keyw)-31 +b(ords)369 b(in)h(Di\013eren)-31 b(t)369 b(Languages)27138 +32752 y +SDict begin 12 H.L end + 27138 32752 a 27138 32752 a +SDict begin [/Subtype /Link/Dest (table.1) cvn/H /I/Border [0 0 0]BorderArrayPatch/Color +[1 0 0] H.B /ANN pdfmark end + 27138 32752 a 0 TeXcolorgray +665 w Fv(.)554 b(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)g(.)p 0 TeXcolorgray 1200 w(28)p 0 TeXcolorgray +6863 36413 a +SDict begin H.S end + 6863 36413 a 6863 36413 a +SDict begin 18 H.A end + 6863 36413 a 6863 +36413 a +SDict begin [/View [/XYZ H.V]/Dest (section*.4) cvn /DEST pdfmark end + 6863 36413 a Fu(List)599 b(of)f(Listings)p 0 +TeXcolorgray 8524 38837 a +SDict begin H.S end + 8524 38837 a Fv(1)1993 b(Con\014guration)371 +b(File:)493 b(Setting)387 b(T)25155 39076 y(E)25771 38837 +y(X)369 b(Output)30536 38837 y +SDict begin 12 H.L end + 30536 38837 a 30536 38837 +a +SDict begin [/Subtype /Link/Dest (lstlisting.1) cvn/H /I/Border [0 +0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end + 30536 38837 a 0 TeXcolorgray 711 w Fv(.)554 b(.)g(.)g(.)f(.)h(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)p 0 TeXcolorgray 1754 w(7)p +0 TeXcolorgray 0 TeXcolorgray 8524 40166 a +SDict begin H.S end + 8524 40166 +a Fv(2)1993 b(Con\014guration)371 b(File:)493 b(Cho)31 +b(osing)371 b(Fields)e(to)h(Prin)-31 b(t)32657 40166 +y +SDict begin 12 H.L end + 32657 40166 a 32657 40166 a +SDict begin [/Subtype /Link/Dest (lstlisting.2) cvn/H /I/Border [0 +0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end + 32657 40166 a 0 TeXcolorgray +312 w Fv(.)554 b(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)p +0 TeXcolorgray 1754 w(8)p 0 TeXcolorgray 0 TeXcolorgray +8524 41494 a +SDict begin H.S end + 8524 41494 a Fv(3)1993 b(Con\014guration)371 +b(File:)493 b(Cho)31 b(osing)371 b(Language)g(and)e(Enco)31 +b(ding)37229 41494 y +SDict begin 12 H.L end + 37229 41494 a 37229 41494 a +SDict begin [/Subtype /Link/Dest (lstlisting.3) cvn/H /I/Border [0 +0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end + 37229 +41494 a 0 TeXcolorgray 905 w Fv(.)554 b(.)g(.)g(.)g(.)g(.)p +0 TeXcolorgray 1754 w(9)p 0 TeXcolorgray 0 TeXcolorgray +8524 42822 a +SDict begin H.S end + 8524 42822 a Fv(4)1993 b(Con\014guration)371 +b(File:)493 b(Cho)31 b(osing)371 b(F)-92 b(on)-31 b(ts)28181 +42822 y +SDict begin 12 H.L end + 28181 42822 a 28181 42822 a +SDict begin [/Subtype /Link/Dest (lstlisting.4) cvn/H /I/Border [0 +0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end + 28181 42822 a 0 TeXcolorgray +483 w Fv(.)554 b(.)g(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)g(.)p 0 TeXcolorgray 1754 w(9)p 0 TeXcolorgray 0 +TeXcolorgray 8524 44151 a +SDict begin H.S end + 8524 44151 a Fv(5)1993 b(Con\014guration)371 +b(File:)493 b(Cho)31 b(osing)371 b(Lengths)29380 44151 +y +SDict begin 12 H.L end + 29380 44151 a 29380 44151 a +SDict begin [/Subtype /Link/Dest (lstlisting.5) cvn/H /I/Border [0 +0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end + 29380 44151 a 0 TeXcolorgray +1006 w Fv(.)554 b(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g +(.)p 0 TeXcolorgray 1200 w(10)p 0 TeXcolorgray 0 TeXcolorgray +8524 45479 a +SDict begin H.S end + 8524 45479 a Fv(6)1993 b(Con\014guration)371 +b(File:)493 b(Cho)31 b(osing)371 b(Scaling)g(and)f(Rotation)35768 +45479 y +SDict begin 12 H.L end + 35768 45479 a 35768 45479 a +SDict begin [/Subtype /Link/Dest (lstlisting.6) cvn/H /I/Border [0 +0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end + 35768 45479 a 0 TeXcolorgray +644 w Fv(.)554 b(.)g(.)g(.)g(.)g(.)g(.)g(.)p 0 TeXcolorgray +1200 w(11)p 0 TeXcolorgray 0 TeXcolorgray 8524 46807 +a +SDict begin H.S end + 8524 46807 a Fv(7)1993 b(Examples)370 b(of)g(Data)g(Files)f +(\(English)i(and)e(Russian\))33500 46807 y +SDict begin 12 H.L end + 33500 46807 +a 33500 46807 a +SDict begin [/Subtype /Link/Dest (lstlisting.7) cvn/H /I/Border [0 +0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end + 33500 46807 a 0 TeXcolorgray 330 w Fv(.)553 +b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)p 0 TeXcolorgray +1200 w(14)p 0 TeXcolorgray 0 TeXcolorgray 8524 48136 +a +SDict begin H.S end + 8524 48136 a Fv(8)1993 b(Example)371 b(of)e(Data)h(File)g(with)g +(Twins)27356 48136 y +SDict begin 12 H.L end + 27356 48136 a 27356 48136 a +SDict begin [/Subtype /Link/Dest (lstlisting.8) cvn/H /I/Border [0 +0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end + 27356 +48136 a 0 TeXcolorgray 447 w Fv(.)554 b(.)g(.)g(.)g(.)g(.)g(.)g(.)f(.)h +(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)p 0 TeXcolorgray 1200 +w(17)p 0 TeXcolorgray 0 TeXcolorgray 8524 49464 a +SDict begin H.S end + 8524 +49464 a Fv(9)1993 b(Example)371 b(of)e(Data)h(File)g(with)g(Ab)31 +b(ortions)29204 49464 y +SDict begin 12 H.L end + 29204 49464 a 29204 49464 a +SDict begin [/Subtype /Link/Dest (lstlisting.9) cvn/H /I/Border [0 +0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end + 29204 +49464 a 0 TeXcolorgray 321 w Fv(.)554 b(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g +(.)g(.)g(.)g(.)g(.)g(.)g(.)p 0 TeXcolorgray 1200 w(18)p +0 TeXcolorgray 0 TeXcolorgray 8524 50793 a +SDict begin H.S end + 8524 50793 +a Fv(10)1440 b(Example)371 b(of)e(Data)h(File)g(with)g(Childlessness) +30696 50793 y +SDict begin 12 H.L end + 30696 50793 a 30696 50793 a +SDict begin [/Subtype /Link/Dest (lstlisting.10) cvn/H /I/Border [0 +0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end + 30696 50793 +a 0 TeXcolorgray 551 w Fv(.)554 b(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g +(.)g(.)g(.)g(.)p 0 TeXcolorgray 1200 w(19)p 0 TeXcolorgray +0 TeXcolorgray 8524 52121 a +SDict begin H.S end + 8524 52121 a Fv(11)1440 b(A)369 +b(Data)h(File)f(with)i(a)e(Sorting)i(Problem)28617 52121 +y +SDict begin 12 H.L end + 28617 52121 a 28617 52121 a +SDict begin [/Subtype /Link/Dest (lstlisting.11) cvn/H /I/Border [0 +0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end + 28617 52121 a 0 TeXcolorgray +908 w Fv(.)554 b(.)g(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +g(.)p 0 TeXcolorgray 1200 w(21)p 0 TeXcolorgray 0 TeXcolorgray +8524 53449 a +SDict begin H.S end + 8524 53449 a Fv(12)1440 b(First)368 b(Solution)k(to)e(the) +f(Problem)h(in)g(Listing)p 0 TeXcolorgray 30844 53449 +a +SDict begin H.S end + 30844 53449 a 0 TeXcolorgray Fv(11)p 0 TeXcolorgray +31950 52736 a +SDict begin H.R end + 31950 52736 a 31950 53449 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (lstlisting.11) cvn H.B /ANN pdfmark end + 31950 53449 +a 0 TeXcolorgray 31950 53449 a +SDict begin 12 H.L end + 31950 53449 a 31950 53449 +a +SDict begin [/Subtype /Link/Dest (lstlisting.12) cvn/H /I/Border [0 +0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end + 31950 53449 a 0 TeXcolorgray 1019 w Fv(.)554 b(.)f(.)h(.)g(.)g(.)g(.) +g(.)g(.)g(.)g(.)g(.)p 0 TeXcolorgray 1200 w(21)p 0 TeXcolorgray +0 TeXcolorgray 8524 54778 a +SDict begin H.S end + 8524 54778 a Fv(13)1440 b(Second)369 +b(Solution)i(to)f(the)g(Problem)g(in)f(Listing)p 0 TeXcolorgray +31896 54778 a +SDict begin H.S end + 31896 54778 a 0 TeXcolorgray Fv(11)p 0 +TeXcolorgray 33002 54064 a +SDict begin H.R end + 33002 54064 a 33002 54778 +a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (lstlisting.11) cvn H.B /ANN pdfmark end + 33002 54778 a 0 TeXcolorgray 33002 54778 a +SDict begin 12 H.L end + 33002 54778 +a 33002 54778 a +SDict begin [/Subtype /Link/Dest (lstlisting.13) cvn/H /I/Border [0 +0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end + 33002 54778 a 0 TeXcolorgray 828 w Fv(.)553 +b(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)p 0 TeXcolorgray +1200 w(23)p 0 TeXcolorgray 0 TeXcolorgray 8524 56106 +a +SDict begin H.S end + 8524 56106 a Fv(14)1440 b(A)369 b(P)-31 b(edigree)370 +b(with)g(Una)-31 b(v)g(oidable)373 b(Self-In)-31 b(tersections)33826 +56106 y +SDict begin 12 H.L end + 33826 56106 a 33826 56106 a +SDict begin [/Subtype /Link/Dest (lstlisting.14) cvn/H /I/Border [0 +0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end + 33826 56106 a 0 TeXcolorgray +864 w Fv(.)554 b(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)p +0 TeXcolorgray 1200 w(24)p 0 TeXcolorgray 0 TeXcolorgray +8524 57434 a +SDict begin H.S end + 8524 57434 a Fv(15)1440 b(A)369 b(P)-31 +b(edigree)370 b(with)g(Consanguinic)i(Unions)29457 57434 +y +SDict begin 12 H.L end + 29457 57434 a 29457 57434 a +SDict begin [/Subtype /Link/Dest (lstlisting.15) cvn/H /I/Border [0 +0 0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end + 29457 57434 a 0 TeXcolorgray +929 w Fv(.)554 b(.)g(.)g(.)g(.)f(.)h(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.)g(.) +p 0 TeXcolorgray 1200 w(26)p 0 TeXcolorgray 0 TeXcolorgray +25681 70071 a(3)p 0 TeXcolorgray eop end +%%Page: 4 4 +TeXDict begin 4 3 bop 0 TeXcolorgray 0 0 a +SDict begin /product where{pop product(Distiller)search{pop pop pop +version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto +closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show +grestore}if}{pop}ifelse}{pop}ifelse}if end + 0 0 a 0 TeXcolorgray +6752 1660 a +SDict begin H.S end + 6752 1660 a 6752 1660 a +SDict begin H.R end + 6752 1660 a 6752 +1660 a +SDict begin [/View [/XYZ H.V]/Dest (page.4) cvn /DEST pdfmark end + 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray +6863 5867 a +SDict begin H.S end + 6863 5867 a 6863 5867 a +SDict begin 12 H.A end + 6863 5867 a 6863 +5867 a +SDict begin [/View [/XYZ H.V]/Dest (part.1) cvn /DEST pdfmark end + 6863 5867 a 1107 x Fu(P)-50 b(art)599 b(I)6863 +9741 y Fr(User)861 b(Man)-72 b(ual)6863 11171 y +SDict begin H.S end + 6863 +11171 a 6863 11171 a +SDict begin 12 H.A end + 6863 11171 a 6863 11171 a +SDict begin [/View [/XYZ H.V]/Dest (section.1) cvn /DEST pdfmark end + 6863 11171 +a 1993 x Fu(1)1793 b(In)-50 b(tro)50 b(duction)6863 15588 +y Fv(Medical)343 b(p)31 b(edigree)342 b(is)g(a)h(v)-31 +b(ery)342 b(imp)31 b(ortan)-31 b(t)344 b(to)31 b(ol)344 +b(for)e(clinicians,)350 b(genetic)343 b(researc)-31 b(hers)341 +b(and)6863 16916 y(educators.)485 b(As)346 b(stated)h(in)f([)p +0 TeXcolorgray 18768 16916 a +SDict begin H.S end + 18768 16916 a 0 TeXcolorgray +Fv(1)p 0 TeXcolorgray 19321 16203 a +SDict begin H.R end + 19321 16203 a 19321 +16916 a +SDict begin [/Color [0 1 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (cite.PedigreeNomenclature95) cvn H.B /ANN pdfmark end + 19321 16916 a 0 TeXcolorgray 1 w Fv(],)352 b(\\The)346 +b(construction)i(of)e(an)g(accurate)h(family)h(p)31 b(edigree)346 +b(is)6863 18245 y(a)h(fundamen)-31 b(tal)350 b(comp)31 +b(onen)-31 b(t)348 b(of)f(a)h(clinical)h(genetic)f(ev)-61 +b(aluation)349 b(and)e(of)g(h)-31 b(uman)348 b(genetic)6863 +19573 y(researc)-31 b(h.")474 b(The)315 b(pac)-31 b(k)-61 +b(age)315 b Fq(pst-)55 b(pdgr)316 b Fv([)p 0 TeXcolorgray +23727 19573 a +SDict begin H.S end + 23727 19573 a 0 TeXcolorgray Fv(2)p 0 TeXcolorgray +24280 18860 a +SDict begin H.R end + 24280 18860 a 24280 19573 a +SDict begin [/Color [0 1 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (cite.pst-pdgr06) cvn H.B /ANN pdfmark end + 24280 19573 +a 0 TeXcolorgray 1 w Fv(])f(pro)-31 b(vides)315 b(a)f(set)g(of)h(PST) +-92 b(ric)-31 b(ks)315 b(macros)g(\(see)f([)p 0 TeXcolorgray +43761 19573 a +SDict begin H.S end + 43761 19573 a 0 TeXcolorgray Fv(3)p 0 TeXcolorgray +44314 18860 a +SDict begin H.R end + 44314 18860 a 44314 19573 a +SDict begin [/Color [0 1 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (cite.PSTricks93) cvn H.B /ANN pdfmark end + 44314 19573 +a 0 TeXcolorgray 1 w Fv(]\))6863 20902 y(to)372 b(t)-31 +b(yp)31 b(eset)371 b(p)31 b(edigrees.)496 b(In)370 b(the)h(framew)-31 +b(ork)372 b(of)f Fq(pst-)55 b(pdgr)372 b Fv(the)f(user)f(man)-31 +b(ually)373 b(c)-31 b(ho)31 b(oses)6863 22230 y(co)g(ordinates)323 +b(for)g(eac)-31 b(h)323 b(p)31 b(edigree)322 b(no)31 +b(de)322 b(on)g(the)h(diagram.)479 b(While)322 b(this)h(is)f(relativ) +-31 b(ely)325 b(easy)6863 23558 y(for)476 b(small)h(p)31 +b(edigrees,)502 b(this)476 b(task)g(b)31 b(ecomes)476 +b(increasingly)h(time-consuming)h(for)e(larger)6863 24887 +y(ones.)558 b(There)391 b(ma)-31 b(y)392 b(b)31 b(e)390 +b(sev)-31 b(eral)392 b(approac)-31 b(hes)391 b(to)h(automate)i(it.)558 +b(F)-92 b(or)390 b(example,)399 b(one)391 b(ma)-31 b(y)6863 +26215 y(ha)g(v)g(e)444 b(data)g(ab)31 b(out)443 b(the)g(patien)-31 +b(ts)445 b(and)e(their)g(families)i(in)e(a)g(spreadsheet)f(or)g +(database.)6863 27543 y(Then)386 b(it)h(w)-31 b(ould)387 +b(b)31 b(e)386 b(useful)g(to)g(generate)h(p)31 b(edigrees)386 +b(from)g(suc)-31 b(h)386 b(data.)544 b(This)386 b(is)g(the)g(aim)6863 +28872 y(of)370 b(the)f(program)h Fq(pedigree)g Fv(describ)31 +b(ed)369 b(in)g(this)h(man)-31 b(ual.)8524 30200 y(Spreadsheets)495 +b(and)g(databases)i(can)f(exp)31 b(ort)496 b(the)f(data)i(as)f +(separated)g(v)-61 b(alues)495 b(\014les)6863 31528 y(\(\\csv")428 +b(\014les)e(for)g(Comma)j(Separated)e(V)-92 b(alues\).)665 +b(Our)426 b(program)h(reads)f(these)h(\014les)f(and)6863 +32857 y(outputs)382 b(LaT)-92 b(eX)382 b(co)31 b(de)382 +b(with)h Fq(pst-)55 b(pdgr)382 b Fv(macros.)530 b(W)-92 +b(e)381 b(tried)h(to)g(mak)-31 b(e)383 b(this)f(co)31 +b(de)381 b(read-)6863 34185 y(able,)371 b(so)e(a)g(user)f(migh)-31 +b(t)371 b(t)-31 b(w)g(eak)372 b(it)e(if)f(necessary)-92 +b(.)8524 35513 y(Of)422 b(course,)436 b(man)-31 b(ually)426 +b(pro)31 b(duced)422 b(L)23939 35286 y Fp(A)24427 35513 +y Fv(T)25041 35752 y(E)25657 35513 y(X)h(co)31 b(de)422 +b(is)h(more)g(v)-31 b(ersatile)424 b(than)g(the)f(auto-)6863 +36842 y(matically)354 b(generated)e(one.)486 b(There)351 +b(are)g(certain)g(limitations)k(for)350 b(the)h(program:)41782 +36842 y +SDict begin H.S end + 41782 36842 a 41782 36842 a +SDict begin 12 H.A end + 41782 36842 a 41782 +36842 a +SDict begin [/View [/XYZ H.V]/Dest (Item.1) cvn /DEST pdfmark end + 41782 36842 a Fv(1.)g(only)6863 38170 y(p)31 +b(ersons)453 b(ha)-31 b(ving)456 b(common)g(genes)e(with)h(the)g +(proband)f(or)g(the)g(\\starting)i(p)31 b(erson")454 +b(are)6863 39498 y(included)505 b(in)g(the)g(p)31 b(edigree;)19805 +39498 y +SDict begin H.S end + 19805 39498 a 19805 39498 a +SDict begin 12 H.A end + 19805 39498 a 19805 +39498 a +SDict begin [/View [/XYZ H.V]/Dest (Item.2) cvn /DEST pdfmark end + 19805 39498 a Fv(2.)506 b(no)e(adopted)i(c)-31 +b(hildren,)539 b(sp)31 b(erm)504 b(donors)g(or)h(surrogate)6863 +40827 y(mothers)402 b(are)g(sho)-31 b(wn)402 b(on)h(the)f(p)31 +b(edigree;)24685 40827 y +SDict begin H.S end + 24685 40827 a 24685 40827 a +SDict begin 12 H.A end + +24685 40827 a 24685 40827 a +SDict begin [/View [/XYZ H.V]/Dest (Item.3) cvn /DEST pdfmark end + 24685 40827 a Fv(3.)403 b(only)g(one)f +(disease)g(is)f(sho)-31 b(wn)403 b(on)f(the)g(c)-31 b(hart;)6863 +42155 y +SDict begin H.S end + 6863 42155 a 6863 42155 a +SDict begin 12 H.A end + 6863 42155 a 6863 42155 +a +SDict begin [/View [/XYZ H.V]/Dest (Item.4) cvn /DEST pdfmark end + 6863 42155 a Fv(4.)470 b(the)g(supp)31 b(ort)469 b(for)h +(consanguinic)h(unions)f(and)f(in)-31 b(breeding)471 +b(is)e(rather)g(exp)31 b(erimen)-31 b(tal)6863 43484 +y(\(see)409 b(Section)p 0 TeXcolorgray 13038 43484 a +SDict begin H.S end + +13038 43484 a 0 TeXcolorgray Fv(4.7)p 0 TeXcolorgray +14451 42770 a +SDict begin H.R end + 14451 42770 a 14451 43484 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (subsection.4.7) cvn H.B /ANN pdfmark end + 14451 43484 +a 0 TeXcolorgray Fv(\).)615 b(Subsequen)-31 b(t)410 b(v)-31 +b(ersions)409 b(of)h(the)g(program)g(ma)-31 b(y)410 b(ease)g(some)f(of) +h(these)6863 44812 y(limitations.)6863 46480 y +SDict begin H.S end + 6863 46480 +a 6863 46480 a +SDict begin 12 H.A end + 6863 46480 a 6863 46480 a +SDict begin [/View [/XYZ H.V]/Dest (section.2) cvn /DEST pdfmark end + 6863 46480 a +1993 x Fu(2)1793 b(Installation)6863 49569 y +SDict begin H.S end + 6863 49569 +a 6863 49569 a +SDict begin 12 H.A end + 6863 49569 a 6863 49569 a +SDict begin [/View [/XYZ H.V]/Dest (subsection.2.1) cvn /DEST pdfmark +end + 6863 49569 a +1549 x Ft(2.1)1495 b(System)499 b(Requiremen)-42 b(ts)6863 +53162 y Fv(The)304 b(program)h(requires)e Fo(P)-31 b(erl)305 +b Fv(v)-31 b(ersion)304 b(5)g(or)g(new)-31 b(er)304 b(\(it)h(w)-31 +b(as)305 b(tested)f(with)h Fo(P)-31 b(erl)305 b Fv(v5.8.8,)320 +b(but)6863 54490 y(should)382 b(w)-31 b(ork)382 b(with)g(an)-31 +b(y)398 b Fo(P)-31 b(erl-5)p Fv(\).)531 b(The)381 b(L)24340 +54263 y Fp(A)24828 54490 y Fv(T)25442 54728 y(E)26058 +54490 y(X)g(macros)h(require)f Fq(pst-)55 b(pdgr)382 +b Fv(v)-31 b(ersion)382 b(0.3)6863 55818 y(\(July)370 +b(2007\))i(or)d(new)-31 b(er.)6863 57644 y +SDict begin H.S end + 6863 57644 +a 6863 57644 a +SDict begin 12 H.A end + 6863 57644 a 6863 57644 a +SDict begin [/View [/XYZ H.V]/Dest (subsection.2.2) cvn /DEST pdfmark +end + 6863 57644 a +1273 x Ft(2.2)1495 b(Unix/Lin)-42 b(ux)500 b(Installation)6863 +60960 y Fv(If)400 b(y)-31 b(our)400 b(system)h(has)f(a)g(w)-31 +b(orking)417 b Fo(mak)-31 b(e)401 b Fv(program,)409 b(whic)-31 +b(h)401 b(is)f(the)g(usual)g(case)g(for)g(Unix-)6863 +62289 y(lik)-31 b(e)446 b(en)-31 b(vironmen)g(ts,)466 +b(the)445 b(supplied)f Fq(Makefile)i Fv(installs)g(the)f(executable)h +Fq(pedigree)g Fv(in)6863 63617 y Fq(/usr/local/bin)p +Fv(,)374 b(the)d(libraries)g(in)h Fq(/usr/local/lib/site_perl)i +Fv(and)d(the)g(man)-31 b(ual)6863 64945 y(pages)369 b(in)g +Fq(/usr/local/man)p Fv(.)494 b(This)369 b(is)g(done)f(b)-31 +b(y)369 b(the)g(usual)g(command)h Fq(make)582 b(install)q +Fv(.)p 0 TeXcolorgray 25681 70071 a(4)p 0 TeXcolorgray +eop end +%%Page: 5 5 +TeXDict begin 5 4 bop 0 TeXcolorgray 0 0 a +SDict begin /product where{pop product(Distiller)search{pop pop pop +version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto +closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show +grestore}if}{pop}ifelse}{pop}ifelse}if end + 0 0 a 0 TeXcolorgray +6752 1660 a +SDict begin H.S end + 6752 1660 a 6752 1660 a +SDict begin H.R end + 6752 1660 a 6752 +1660 a +SDict begin [/View [/XYZ H.V]/Dest (page.5) cvn /DEST pdfmark end + 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray +6863 6974 a Fv(Optionally)426 b(y)-31 b(ou)424 b(can)g(install)h +(\014les)e(in)h(the)f Fq(doc)h Fv(and)f Fq(examples)h +Fv(sub)31 b(directories)423 b(in)h(the)6863 8302 y(prop)31 +b(er)368 b(places)i(in)f(y)-31 b(our)370 b(system.)6863 +10066 y +SDict begin H.S end + 6863 10066 a 6863 10066 a +SDict begin 12 H.A end + 6863 10066 a 6863 10066 +a +SDict begin [/View [/XYZ H.V]/Dest (subsection.2.3) cvn /DEST pdfmark +end + 6863 10066 a 1335 x Ft(2.3)1495 b(Installation)500 +b(in)f(Other)g(Systems)6863 13444 y Fv(If)310 b(y)-31 +b(our)311 b(system)g(do)31 b(es)310 b(not)i(ha)-31 b(v)g(e)311 +b Fo(mak)-31 b(e)p Fv(,)324 b(y)-31 b(ou)311 b(need)f(to)i(man)-31 +b(ually)313 b(p)31 b(erform)310 b(the)h(follo)-31 b(wing:)6863 +14102 y +SDict begin H.S end + 6863 14102 a 6863 14102 a +SDict begin 12 H.A end + 6863 14102 a 6863 14102 +a +SDict begin [/View [/XYZ H.V]/Dest (Item.5) cvn /DEST pdfmark end + 6863 14102 a 0 TeXcolorgray 8216 15658 a Fv(1.)p 0 +TeXcolorgray 555 w(Install)370 b(the)f(executable)i Fq(pedigree.pl)f +Fv(to)g(the)g(place)g(y)-31 b(our)369 b(system)h(can)f(\014nd)g(it.) +6863 16347 y +SDict begin H.S end + 6863 16347 a 6863 16347 a +SDict begin 12 H.A end + 6863 16347 a 6863 +16347 a +SDict begin [/View [/XYZ H.V]/Dest (Item.6) cvn /DEST pdfmark end + 6863 16347 a 0 TeXcolorgray 8216 17872 a Fv(2.)p +0 TeXcolorgray 555 w(Install)430 b(the)f(libraries:)613 +b Fq(Pedigree.pm)p Fv(,)446 b(directory)429 b Fq(Pedigree)h +Fv(and)g(all)g(\014les)f(in)g(it)9631 19200 y(to)389 +b(the)h Fo(P)-31 b(erl)390 b Fv(searc)-31 b(h)388 b(path.)553 +b(The)390 b(latter)g(is)f(listed)h(in)f(the)g(arra)-31 +b(y)390 b Fq(@INC)p Fv(,)395 b(whic)-31 b(h)390 b(can)9631 +20529 y(b)31 b(e)368 b(c)-31 b(hec)g(k)g(ed)370 b(b)-31 +b(y)370 b(the)f(command)i Fq(perl)582 b(-V)369 b Fv(or)g(its)g(equiv) +-61 b(alen)-31 b(t.)6863 22443 y +SDict begin H.S end + 6863 22443 a 6863 22443 +a +SDict begin 12 H.A end + 6863 22443 a 6863 22443 a +SDict begin [/View [/XYZ H.V]/Dest (section.3) cvn /DEST pdfmark end + 6863 22443 a 1746 x Fu(3)1793 +b(Con\014guration)6863 25596 y +SDict begin H.S end + 6863 25596 a 6863 25596 +a +SDict begin 12 H.A end + 6863 25596 a 6863 25596 a +SDict begin [/View [/XYZ H.V]/Dest (subsection.3.1) cvn /DEST pdfmark +end + 6863 25596 a 1239 x Ft(3.1)1495 +b(Con\014guration)737 b(V)-125 b(ariables)737 b(and)f(Lo)42 +b(cation)735 b(of)f(Con\014gura-)10267 28385 y(tion)499 +b(File)6863 30428 y Fv(The)485 b(program)g(defaults)h(are)f(su\016cien) +-31 b(t)485 b(for)g(most)g(cases.)839 b(Ho)-31 b(w)g(ev)g(er,)515 +b(if)486 b(y)-31 b(ou)485 b(w)-31 b(an)g(t)486 b(to)6863 +31757 y(dra)-31 b(w)378 b(p)31 b(edigrees)377 b(in)g(a)h(language)h +(other)e(than)h(English,)j(or)c(to)h(t)-31 b(w)g(eak)379 +b(the)f(la)-31 b(y)g(out)379 b(of)f(the)6863 33085 y(p)31 +b(edigrees,)369 b(y)-31 b(ou)370 b(need)f(to)h(c)-31 +b(hange)370 b(the)g(program)g(con\014guration.)8524 34413 +y(The)426 b(b)31 b(eha)-31 b(vior)428 b(of)f(the)g(program)g +Fo(p)31 b(edigree)427 b Fv(is)g(determined)g(b)-31 b(y)427 +b Fn(c)-57 b(on\014gur)g(ation)450 b(vari-)6863 35742 +y(ables.)806 b Fv(There)474 b(are)f(sev)-31 b(eral)474 +b(sources)f(of)h(con\014guration)i(v)-61 b(ariables.)807 +b(They)475 b(are)e(\(in)i(the)6863 37070 y(order)369 +b(of)g(increasing)h(priorit)-31 b(y\):)6863 37790 y +SDict begin H.S end + 6863 +37790 a 6863 37790 a +SDict begin 12 H.A end + 6863 37790 a 6863 37790 a +SDict begin [/View [/XYZ H.V]/Dest (Item.7) cvn /DEST pdfmark end + 6863 37790 +a 0 TeXcolorgray 8216 39284 a Fv(1.)p 0 TeXcolorgray +555 w(Program)370 b(defaults.)6863 39942 y +SDict begin H.S end + 6863 39942 +a 6863 39942 a +SDict begin 12 H.A end + 6863 39942 a 6863 39942 a +SDict begin [/View [/XYZ H.V]/Dest (Item.8) cvn /DEST pdfmark end + 6863 39942 a +0 TeXcolorgray 8216 41498 a Fv(2.)p 0 TeXcolorgray 555 +w(The)336 b(system)h(con\014guration)h(\014le)p 0 TeXcolorgray +23599 41498 a +SDict begin H.S end + 23599 41498 a -402 x Fp(1)24096 41498 y +SDict begin 12 H.L end + +24096 41498 a 24096 41498 a +SDict begin [/Subtype /Link/Dest (Hfootnote.1) cvn/H /I/Border [0 0 +0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end + 24096 41498 a 0 TeXcolorgray +336 w Fq(/etc/pedigree.cfg)p Fv(.)484 b(On)336 b(T)37526 +41736 y(E)38142 41498 y(XLiv)-31 b(e)337 b(the)g(sys-)9631 +42826 y(tem)246 b(coniguration)j(\014les)d(are)g Fq($TEXMFHOME/texmf-) +55 b(config/pedigree/pedigree.)9631 44155 y(cfg)369 b +Fv(and)g Fq($TEXMFLOCAL/pedigree/pedigree.cfg)p Fv(.)6863 +44843 y +SDict begin H.S end + 6863 44843 a 6863 44843 a +SDict begin 12 H.A end + 6863 44843 a 6863 44843 +a +SDict begin [/View [/XYZ H.V]/Dest (Item.9) cvn /DEST pdfmark end + 6863 44843 a 0 TeXcolorgray 8216 46369 a Fv(3.)p 0 +TeXcolorgray 555 w(User)f(con\014guration)j(\014le)p +0 TeXcolorgray 20312 46369 a +SDict begin H.S end + 20312 46369 a -402 x Fp(2)20809 +46369 y +SDict begin 12 H.L end + 20809 46369 a 20809 46369 a +SDict begin [/Subtype /Link/Dest (Hfootnote.2) cvn/H /I/Border [0 0 +0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end + 20809 46369 a 0 TeXcolorgray +369 w Fq($HOME/.pedigreerc)p Fv(.)6863 47057 y +SDict begin H.S end + 6863 47057 +a 6863 47057 a +SDict begin 12 H.A end + 6863 47057 a 6863 47057 a +SDict begin [/View [/XYZ H.V]/Dest (Item.10) cvn /DEST pdfmark end + 6863 47057 a +0 TeXcolorgray 8216 48582 a Fv(4.)p 0 TeXcolorgray 555 +w(The)e(\014le)g(sp)31 b(eci\014ed)369 b(b)-31 b(y)370 +b(the)f Fq(-c)g Fv(option)i(\(see)e(Section)p 0 TeXcolorgray +32668 48582 a +SDict begin H.S end + 32668 48582 a 0 TeXcolorgray Fv(4.1)p 0 +TeXcolorgray 34081 47869 a +SDict begin H.R end + 34081 47869 a 34081 48582 +a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (subsection.4.1) cvn H.B /ANN pdfmark end + 34081 48582 a 0 TeXcolorgray Fv(\).)6863 50796 y(If)g(a)h(\014le)f +(men)-31 b(tioned)371 b(in)f(this)f(list)h(do)31 b(es)369 +b(not)h(exists,)g(the)f(program)h(silen)-31 b(tly)p 0 +TeXcolorgray 38975 50796 a +SDict begin H.S end + 38975 50796 a -401 x Fp(3)39474 +50796 y +SDict begin 12 H.L end + 39474 50796 a 39474 50796 a +SDict begin [/Subtype /Link/Dest (Hfootnote.3) cvn/H /I/Border [0 0 +0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end + 39474 50796 a 0 TeXcolorgray +369 w Fv(con)g(tin)g(ues.)8524 52125 y(Note)307 b(that)h(ev)-31 +b(en)307 b(if)g(a)g(con\014guration)i(\014le)e(with)h(higher)f(priorit) +-31 b(y)307 b(exists,)320 b(the)307 b(program)6863 53453 +y(reads)472 b(the)i(\014les)e(with)i(lo)-31 b(w)g(er)475 +b(priorit)-31 b(y)474 b(\014rst.)803 b(The)473 b(former)g +Fn(overrides)563 b Fv(the)473 b(latter,)501 b(but)6863 +54781 y(not)449 b(precludes)f(it)i(from)f(reading.)731 +b(In)448 b(other)h(w)-31 b(ords,)469 b(if)449 b Fq(/etc/pedigree.cfg)i +Fv(de\014nes)6863 56110 y(v)-61 b(ariables)402 b Fq($foo)p +0 TeXcolorgray 0 TeXcolorgray 401 w Fv(and)f Fq($bar)p +0 TeXcolorgray 0 TeXcolorgray Fv(,)410 b(and)401 b Fq +($HOME/.pedigreerc)i Fv(de\014nes)d Fq($bar)p 0 TeXcolorgray +0 TeXcolorgray 401 w Fv(and)h Fq($baz)p 0 TeXcolorgray +0 TeXcolorgray 1 w Fv(,)409 b(the)6863 57438 y(program)339 +b(tak)-31 b(es)339 b Fq($foo)p 0 TeXcolorgray 0 TeXcolorgray +339 w Fv(from)g(the)f(\014rst)g(\014le,)345 b(and)338 +b Fq($bar)p 0 TeXcolorgray 0 TeXcolorgray 339 w Fv(and)g +Fq($baz)p 0 TeXcolorgray 0 TeXcolorgray 339 w Fv(from)h(the)f(second)g +(one.)p 0 TeXcolorgray 6863 58362 15276 45 v 8096 59078 +a Fm(1)p 0 TeXcolorgray 8557 59390 a +SDict begin H.S end + 8557 59390 a 8557 +59390 a +SDict begin H.R end + 8557 59390 a 8557 59390 a +SDict begin [/View [/XYZ H.V]/Dest (Hfootnote.1) cvn /DEST pdfmark +end + 8557 59390 a 0 TeXcolorgray +Fl(On)313 b(Unix-lik)-26 b(e)313 b(systems,)h(where)f +Fk(/etc)j Fl(exists)8096 60134 y Fm(2)p 0 TeXcolorgray +8557 60446 a +SDict begin H.S end + 8557 60446 a 8557 60446 a +SDict begin H.R end + 8557 60446 a 8557 +60446 a +SDict begin [/View [/XYZ H.V]/Dest (Hfootnote.2) cvn /DEST pdfmark +end + 8557 60446 a 0 TeXcolorgray Fl(On)d(Unix-lik)-26 +b(e)313 b(systems,)h(where)f Fk($HOME)j Fl(exists)8096 +61190 y Fm(3)p 0 TeXcolorgray 8557 61502 a +SDict begin H.S end + 8557 61502 +a 8557 61502 a +SDict begin H.R end + 8557 61502 a 8557 61502 a +SDict begin [/View [/XYZ H.V]/Dest (Hfootnote.3) cvn /DEST pdfmark +end + 8557 61502 a +0 TeXcolorgray Fl(Unless)e Fk(-)55 b(d)315 b Fl(option)f(is)g +(selected,)h(see)f(Section)p 0 TeXcolorgray 25287 61502 +a +SDict begin H.S end + 25287 61502 a 0 TeXcolorgray Fl(4.1)p 0 TeXcolorgray +26488 60932 a +SDict begin H.R end + 26488 60932 a 26488 61502 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (subsection.4.1) cvn H.B /ANN pdfmark end + 26488 61502 +a 0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray 25681 +70071 a Fv(5)p 0 TeXcolorgray eop end +%%Page: 6 6 +TeXDict begin 6 5 bop 0 TeXcolorgray 0 0 a +SDict begin /product where{pop product(Distiller)search{pop pop pop +version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto +closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show +grestore}if}{pop}ifelse}{pop}ifelse}if end + 0 0 a 0 TeXcolorgray +6752 1660 a +SDict begin H.S end + 6752 1660 a 6752 1660 a +SDict begin H.R end + 6752 1660 a 6752 +1660 a +SDict begin [/View [/XYZ H.V]/Dest (page.6) cvn /DEST pdfmark end + 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray +6863 5867 a +SDict begin H.S end + 6863 5867 a 6863 5867 a +SDict begin 12 H.A end + 6863 5867 a 6863 +5867 a +SDict begin [/View [/XYZ H.V]/Dest (subsection.3.2) cvn /DEST pdfmark +end + 6863 5867 a 1107 x Ft(3.2)1495 b(Con\014guration)501 +b(File)e(F)-125 b(ormat)6863 9017 y Fv(All)299 b(con\014guration)i +(\014les)d(men)-31 b(tioned)300 b(in)e(Section)p 0 TeXcolorgray +27725 9017 a +SDict begin H.S end + 27725 9017 a 0 TeXcolorgray Fv(3.1)p 0 TeXcolorgray +29138 8304 a +SDict begin H.R end + 29138 8304 a 29138 9017 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (subsection.3.1) cvn H.B /ANN pdfmark end + 29138 9017 a 0 +TeXcolorgray Fv(,)314 b(ha)-31 b(v)g(e)299 b(the)f(same)h(format.)471 +b(They)298 b(are)6863 10345 y(actually)393 b(snipp)31 +b(ets)390 b(of)478 b Fo(P)-31 b(erl)391 b Fv(co)31 b(de,)396 +b(executed)391 b(b)-31 b(y)391 b(the)g(program)g Fo(p)31 +b(edigree)p Fv(.)557 b(This)391 b(means,)6863 11674 y(b)-31 +b(y)477 b(the)g(w)-31 b(a)g(y)-92 b(,)505 b(that)478 +b(all)g(precautions)f(usually)h(tak)-31 b(en)478 b(with)g(resp)31 +b(ect)475 b(to)j(programs)f(and)6863 13002 y(scripts,)345 +b(are)339 b(relev)-61 b(an)-31 b(t)340 b(for)f(con\014guration)i +(\014les)e(as)g(w)-31 b(ell.)484 b(In)338 b(particular,)347 +b(it)340 b(is)f(a)g(bad)g(idea)6863 14331 y(to)370 b(ha)-31 +b(v)g(e)370 b(w)-31 b(orld-writable)372 b(system-wide)f +(con\014guration)g(\014le)f Fq(/etc/pedigree.cfg)p Fv(.)8524 +15659 y(The)302 b(co)31 b(de)302 b(in)h(con\014guration)i(\014les)d(is) +g(v)-31 b(ery)302 b(simple,)317 b(and)303 b(one)g(do)31 +b(es)302 b(not)h(need)f(to)h(kno)-31 b(w)6863 16987 y +Fo(P)g(erl)356 b Fv(to)f(edit)h(con\014guration)h(\014les.)488 +b(There)354 b(are)h(sev)-31 b(eral)355 b(simple)h(rules)e(whic)-31 +b(h)356 b(are)e(enough)6863 18316 y(to)370 b(understand)f(these)g +(\014les:)6863 18758 y +SDict begin H.S end + 6863 18758 a 6863 18758 a +SDict begin 12 H.A end + 6863 +18758 a 6863 18758 a +SDict begin [/View [/XYZ H.V]/Dest (Item.11) cvn /DEST pdfmark end + 6863 18758 a 0 TeXcolorgray 8216 +20529 a Fv(1.)p 0 TeXcolorgray 555 w(All)435 b(text)g(after)f +Fj(#)p 0 TeXcolorgray 0 TeXcolorgray 434 w Fv(to)h(the)f(end)g(of)h +(the)f(line)h(is)f(a)g(commen)-31 b(ts.)689 b(In)434 +b(particular,)452 b(the)9631 21858 y(lines)369 b(starting)i(with)f +Fj(#)p 0 TeXcolorgray 0 TeXcolorgray Fv(,)g(are)f(commen)-31 +b(t)371 b(lines.)6863 22516 y +SDict begin H.S end + 6863 22516 a 6863 22516 +a +SDict begin 12 H.A end + 6863 22516 a 6863 22516 a +SDict begin [/View [/XYZ H.V]/Dest (Item.12) cvn /DEST pdfmark end + 6863 22516 a 0 TeXcolorgray +8216 24072 a Fv(2.)p 0 TeXcolorgray 555 w Fo(P)-31 b(erl)370 +b Fv(commands)g(m)-31 b(ust)370 b(end)f(b)-31 b(y)369 +b(semicolon)i Fq(;)p 0 TeXcolorgray 0 TeXcolorgray Fv(.)6863 +24730 y +SDict begin H.S end + 6863 24730 a 6863 24730 a +SDict begin 12 H.A end + 6863 24730 a 6863 24730 +a +SDict begin [/View [/XYZ H.V]/Dest (Item.13) cvn /DEST pdfmark end + 6863 24730 a 0 TeXcolorgray 8216 26286 a Fv(3.)p 0 +TeXcolorgray 555 w(The)e(commands)h(lik)-31 b(e)6863 +26950 y +SDict begin H.S end + 6863 26950 a 6863 26950 a +SDict begin 12 H.A end + 6863 26950 a 6863 26950 +a +SDict begin [/View [/XYZ H.V]/Dest (lstlisting.-1) cvn /DEST pdfmark +end + 6863 26950 a 9631 28278 a +SDict begin H.S end + 9631 28278 a 9631 28278 a +SDict begin 12 H.A end + +9631 28278 a 9631 28278 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.-1.1) cvn /DEST pdfmark +end + 9631 28278 a 2889 w Fq($)100 +b(x)g(d)g(i)g(s)g(t)195 b(=)97 b(1)g(.)g(5)g(;)p 0 TeXcolorgray +0 TeXcolorgray 9631 30714 a Fv(or)6863 31378 y +SDict begin H.S end + 6863 31378 +a 6863 31378 a +SDict begin 12 H.A end + 6863 31378 a 6863 31378 a +SDict begin [/View [/XYZ H.V]/Dest (lstlisting.-2) cvn /DEST pdfmark +end + 6863 31378 a +9631 32706 a +SDict begin H.S end + 9631 32706 a 9631 32706 a +SDict begin 12 H.A end + 9631 32706 a 9631 +32706 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.-2.1) cvn /DEST pdfmark +end + 9631 32706 a 2898 w Fq(@)109 b(f)g(i)g(e)g(l)g(d)g(s)g(f)g(o)g +(r)g(p)g(r)g(i)g(n)g(t)169 b(=)136 b(q)77 b(w)136 b(\()151 +b(N)93 b(a)g(m)g(e)878 b(D)87 b(o)g(B)166 b(\))77 b(;)p +0 TeXcolorgray 0 TeXcolorgray 9631 35141 a Fv(assign)369 +b(v)-61 b(alues)370 b(to)f(the)h(v)-61 b(ariables.)6863 +35799 y +SDict begin H.S end + 6863 35799 a 6863 35799 a +SDict begin 12 H.A end + 6863 35799 a 6863 35799 +a +SDict begin [/View [/XYZ H.V]/Dest (Item.14) cvn /DEST pdfmark end + 6863 35799 a 0 TeXcolorgray 8216 37355 a Fv(4.)p 0 +TeXcolorgray 555 w(V)-92 b(ariables)390 b(starting)g(with)h +Fq($)p 0 TeXcolorgray 0 TeXcolorgray 389 w Fv(are)e(scalars)h(and)f +(tak)-31 b(e)391 b(n)-31 b(umerical)391 b(or)e(string)g(v)-61 +b(alues.)9631 38684 y(V)-92 b(ariables)370 b(starting)g(with)h +Fq(@)p 0 TeXcolorgray 0 TeXcolorgray 369 w Fv(are)e(arra)-31 +b(ys)369 b(and)g(tak)-31 b(e)371 b(list)f(of)g(v)-61 +b(alues.)6863 39342 y +SDict begin H.S end + 6863 39342 a 6863 39342 a +SDict begin 12 H.A end + 6863 +39342 a 6863 39342 a +SDict begin [/View [/XYZ H.V]/Dest (Item.15) cvn /DEST pdfmark end + 6863 39342 a 0 TeXcolorgray 8216 +40898 a Fv(5.)p 0 TeXcolorgray 555 w(A)301 b(bac)-31 +b(kslash)302 b(in)f(single)h(quotes)g(stands)f(for)h(itself,)316 +b(A)301 b(bac)-31 b(kslash)302 b(in)g(double)f(quotes)9631 +42226 y(or)391 b(inside)g Fq(<<)q(END)p 0 TeXcolorgray +0 TeXcolorgray Fv(.)185 b(.)g(.)g Fq(END)p 0 TeXcolorgray +0 TeXcolorgray 391 w Fv(construction)393 b(m)-31 b(ust)392 +b(b)31 b(e)391 b(doubled.)559 b(Compare)393 b(the)e(com-)9631 +43554 y(mands)6863 44218 y +SDict begin H.S end + 6863 44218 a 6863 44218 a +SDict begin 12 H.A end + +6863 44218 a 6863 44218 a +SDict begin [/View [/XYZ H.V]/Dest (lstlisting.-3) cvn /DEST pdfmark +end + 6863 44218 a 9631 45547 a +SDict begin H.S end + 9631 +45547 a 9631 45547 a +SDict begin 12 H.A end + 9631 45547 a 9631 45547 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.-3.1) cvn /DEST pdfmark +end + 9631 45547 +a 2882 w Fq($)93 b(f)g(o)g(o)152 b(=)135 b(')98 b(\\)166 +b(d)108 b(o)g(c)g(u)g(m)g(e)g(n)g(t)g(c)g(l)g(a)g(s)g(s)186 +b(')97 b(;)9631 46875 y +SDict begin H.S end + 9631 46875 a 9631 46875 a +SDict begin 12 H.A end + 9631 +46875 a 9631 46875 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.-3.2) cvn /DEST pdfmark +end + 9631 46875 a 2882 w Fq($)c(b)g(a)g(r)152 +b(=)116 b(")136 b(\\)77 b(\\)186 b(d)108 b(o)g(c)g(u)g(m)g(e)g(n)g(t)g +(c)g(l)g(a)g(s)g(s)167 b(")117 b(;)p 0 TeXcolorgray 0 +TeXcolorgray 6863 48381 a +SDict begin H.S end + 6863 48381 a 6863 48381 a +SDict begin 12 H.A end + 6863 +48381 a 6863 48381 a +SDict begin [/View [/XYZ H.V]/Dest (Item.16) cvn /DEST pdfmark end + 6863 48381 a 0 TeXcolorgray 8216 +49753 a Fv(6.)p 0 TeXcolorgray 555 w(The)369 b(last)h(command)h(in)e +(the)h(\014le)f(m)-31 b(ust)370 b(b)31 b(e)6863 50417 +y +SDict begin H.S end + 6863 50417 a 6863 50417 a +SDict begin 12 H.A end + 6863 50417 a 6863 50417 a +SDict begin [/View [/XYZ H.V]/Dest (lstlisting.-4) cvn /DEST pdfmark +end + +6863 50417 a 9631 51746 a +SDict begin H.S end + 9631 51746 a 9631 51746 a +SDict begin 12 H.A end + 9631 +51746 a 9631 51746 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.-4.1) cvn /DEST pdfmark +end + 9631 51746 a 2867 w Fq(1)77 b(;)p +0 TeXcolorgray 0 TeXcolorgray 8524 54624 a Fv(A)437 b(n)-31 +b(um)g(b)31 b(er)437 b(of)h(commen)-31 b(ted)440 b(con\014guration)f +(\014les)e(can)h(b)31 b(e)437 b(found)h(in)f(the)h Fq(examples)6863 +55952 y Fv(sub)31 b(directory)369 b(of)h(the)f(distribution.)8524 +57281 y(In)311 b(the)h(remaining)i(parts)e(of)g(this)g(section)h(w)-31 +b(e)312 b(describ)31 b(e)311 b(the)h(con\014guration)i(v)-61 +b(ariables)6863 58609 y(in)370 b(detail.)6863 60158 y +SDict begin H.S end + +6863 60158 a 6863 60158 a +SDict begin 12 H.A end + 6863 60158 a 6863 60158 a +SDict begin [/View [/XYZ H.V]/Dest (subsection.3.3) cvn /DEST pdfmark +end + 6863 +60158 a 1550 x Ft(3.3)1495 b(T)11057 62003 y(E)11851 +61708 y(X)499 b(Output)g(Setup)6863 63751 y Fv(A)286 +b(n)-31 b(um)g(b)31 b(er)285 b(of)h(v)-61 b(ariables)286 +b(determine)g(what)h(kind)f(of)372 b(T)29663 63989 y(E)30279 +63751 y(X)285 b(\014le)h(is)f(pro)31 b(duced.)464 b(An)286 +b(example)6863 65079 y(of)370 b(their)f(usage)h(is)f(sho)-31 +b(wn)370 b(on)f(Listing)p 0 TeXcolorgray 23511 65079 +a +SDict begin H.S end + 23511 65079 a 0 TeXcolorgray Fv(1)p 0 TeXcolorgray +24064 64366 a +SDict begin H.R end + 24064 64366 a 24064 65079 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (lstlisting.1) cvn H.B /ANN pdfmark end + 24064 65079 +a 0 TeXcolorgray Fv(.)p 0 TeXcolorgray 25681 70071 a(6)p +0 TeXcolorgray eop end +%%Page: 7 7 +TeXDict begin 7 6 bop 0 TeXcolorgray 0 0 a +SDict begin /product where{pop product(Distiller)search{pop pop pop +version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto +closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show +grestore}if}{pop}ifelse}{pop}ifelse}if end + 0 0 a 0 TeXcolorgray +6752 1660 a +SDict begin H.S end + 6752 1660 a 6752 1660 a +SDict begin H.R end + 6752 1660 a 6752 +1660 a +SDict begin [/View [/XYZ H.V]/Dest (page.7) cvn /DEST pdfmark end + 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray +0 TeXcolorgray 6863 6531 a +SDict begin H.S end + 6863 6531 a 6863 6531 a +SDict begin 12 H.A end + 6863 +6531 a 6863 6531 a +SDict begin [/View [/XYZ H.V]/Dest (lstlisting.1) cvn /DEST pdfmark +end + 6863 6531 a 6863 7461 a +SDict begin H.S end + 6863 7461 +a 6863 7461 a +SDict begin 12 H.A end + 6863 7461 a 6863 7461 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.1.1) cvn /DEST pdfmark +end + 6863 7461 a 58 +w Fj(#)833 b(D)77 b(o)854 b(w)77 b(e)868 b(w)93 b(a)g(n)g(t)869 +b(t)77 b(o)868 b(h)93 b(a)g(v)g(e)849 b(a)g(f)93 b(u)g(l)g(l)888 +b(L)97 b(a)g(T)g(e)g(X)6863 8789 y +SDict begin H.S end + 6863 8789 a 6863 8789 +a +SDict begin 12 H.A end + 6863 8789 a 6863 8789 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.1.2) cvn /DEST pdfmark +end + 6863 8789 a 58 w Fj(#)849 b(f)93 +b(i)g(l)g(e)868 b(o)77 b(r)869 b(j)93 b(u)g(s)g(t)849 +b(a)859 b(f)103 b(r)g(a)g(g)g(m)g(e)g(n)g(t)165 b(?)6863 +10118 y +SDict begin H.S end + 6863 10118 a 6863 10118 a +SDict begin 12 H.A end + 6863 10118 a 6863 10118 +a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.1.3) cvn /DEST pdfmark +end + 6863 10118 a 58 w Fj(#)6863 11446 y +SDict begin H.S end + 6863 11446 a 6863 +11446 a +SDict begin 12 H.A end + 6863 11446 a 6863 11446 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.1.4) cvn /DEST pdfmark +end + 6863 11446 a 103 w +Fq($)103 b(f)g(u)g(l)g(l)g(d)g(o)g(c)194 b(=)87 b(1)g(;)6863 +12774 y +SDict begin H.S end + 6863 12774 a 6863 12774 a +SDict begin 12 H.A end + 6863 12774 a 6863 12774 +a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.1.5) cvn /DEST pdfmark +end + 6863 12774 a 6863 14103 a +SDict begin H.S end + 6863 14103 a 6863 14103 a +SDict begin 12 H.A end + +6863 14103 a 6863 14103 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.1.6) cvn /DEST pdfmark +end + 6863 14103 a 58 w Fj(#)849 +b(W)93 b(h)g(a)g(t)884 b(k)93 b(i)g(n)g(d)868 b(o)77 +b(f)879 b(d)103 b(o)g(c)g(u)g(m)g(e)g(n)g(t)882 b(d)77 +b(o)853 b(w)77 b(e)869 b(w)93 b(a)g(n)g(t)6863 15431 +y +SDict begin H.S end + 6863 15431 a 6863 15431 a +SDict begin 12 H.A end + 6863 15431 a 6863 15431 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.1.7) cvn /DEST pdfmark +end + +6863 15431 a 58 w Fj(#)6863 16759 y +SDict begin H.S end + 6863 16759 a 6863 +16759 a +SDict begin 12 H.A end + 6863 16759 a 6863 16759 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.1.8) cvn /DEST pdfmark +end + 6863 16759 a 109 w +Fq($)109 b(d)g(o)g(c)g(u)g(m)g(e)g(n)g(t)g(h)g(e)g(a)g(d)g(e)g(r)169 +b(=)136 b(')97 b(\\)166 b(d)108 b(o)g(c)g(u)g(m)g(e)g(n)g(t)g(c)g(l)g +(a)g(s)g(s)167 b({)160 b(a)102 b(r)g(t)g(i)g(c)g(l)g(e)159 +b(})136 b(')97 b(;)6863 18088 y +SDict begin H.S end + 6863 18088 a 6863 18088 +a +SDict begin 12 H.A end + 6863 18088 a 6863 18088 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.1.9) cvn /DEST pdfmark +end + 6863 18088 a 6863 19416 a +SDict begin H.S end + +6863 19416 a 6863 19416 a +SDict begin 12 H.A end + 6863 19416 a 6863 19416 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.1.10) cvn /DEST pdfmark +end + 6863 +19416 a 58 w Fj(#)856 b(D)100 b(e)g(f)g(i)g(n)g(e)901 +b(a)106 b(d)g(d)g(i)g(t)g(i)g(o)g(n)g(a)g(l)905 b(p)103 +b(a)g(c)g(k)g(a)g(g)g(e)g(s)897 b(h)93 b(e)g(r)g(e)6863 +20744 y +SDict begin H.S end + 6863 20744 a 6863 20744 a +SDict begin 12 H.A end + 6863 20744 a 6863 20744 +a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.1.11) cvn /DEST pdfmark +end + 6863 20744 a 58 w Fj(#)6863 22073 y +SDict begin H.S end + 6863 22073 a 6863 +22073 a +SDict begin 12 H.A end + 6863 22073 a 6863 22073 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.1.12) cvn /DEST pdfmark +end + 6863 22073 a 108 w +Fq($)108 b(a)g(d)g(d)g(t)g(o)g(p)g(r)g(e)g(a)g(m)g(b)g(l)g(e)176 +b(=)116 b(<)g(<)146 b(E)87 b(N)g(D)146 b(;)6863 23401 +y +SDict begin H.S end + 6863 23401 a 6863 23401 a +SDict begin 12 H.A end + 6863 23401 a 6863 23401 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.1.13) cvn /DEST pdfmark +end + +6863 23401 a 77 w Fq(\\)77 b(\\)185 b(u)106 b(s)g(e)g(p)g(a)g(c)g(k)g +(a)g(g)g(e)162 b({)128 b(p)70 b(s)g(t)197 b(-)152 b(p)93 +b(d)g(g)g(r)151 b(})6863 24729 y +SDict begin H.S end + 6863 24729 a 6863 24729 +a +SDict begin 12 H.A end + 6863 24729 a 6863 24729 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.1.14) cvn /DEST pdfmark +end + 6863 24729 a 87 w Fq(E)87 +b(N)g(D)6863 26058 y +SDict begin H.S end + 6863 26058 a 6863 26058 a +SDict begin 12 H.A end + 6863 26058 +a 6863 26058 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.1.15) cvn /DEST pdfmark +end + 6863 26058 a 6863 27386 a +SDict begin H.S end + 6863 27386 a +6863 27386 a +SDict begin 12 H.A end + 6863 27386 a 6863 27386 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.1.16) cvn /DEST pdfmark +end + 6863 27386 a 58 +w Fj(#)833 b(D)77 b(o)854 b(w)77 b(e)868 b(w)93 b(a)g(n)g(t)869 +b(t)77 b(o)872 b(p)97 b(r)g(i)g(n)g(t)853 b(a)i(l)100 +b(e)g(g)g(e)g(n)g(d)157 b(?)6863 28715 y +SDict begin H.S end + 6863 28715 a +6863 28715 a +SDict begin 12 H.A end + 6863 28715 a 6863 28715 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.1.17) cvn /DEST pdfmark +end + 6863 28715 a 58 +w Fj(#)6863 30043 y +SDict begin H.S end + 6863 30043 a 6863 30043 a +SDict begin 12 H.A end + 6863 30043 +a 6863 30043 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.1.18) cvn /DEST pdfmark +end + 6863 30043 a 107 w Fq($)107 b(p)g(r)g(i)g(n)g(t)g(l)g(e) +g(g)g(e)g(n)g(d)200 b(=)87 b(1)g(;)p 0 TeXcolorgray 0 +TeXcolorgray 13692 32478 a Fv(Listing)371 b(1:)493 b(Con\014guration) +372 b(File:)493 b(Setting)386 b(T)32842 32717 y(E)33458 +32478 y(X)369 b(Output)p 0 TeXcolorgray 0 TeXcolorgray +0 TeXcolorgray 8524 37809 a(The)563 b(v)-61 b(ariable)564 +b Fq($fulldoc)p 0 TeXcolorgray 0 TeXcolorgray 565 w Fv(determines)f +(whether)h(the)f(program)h(pro)31 b(duces)563 b(a)g(full)6863 +39137 y(L)7156 38910 y Fp(A)7644 39137 y Fv(T)8258 39375 +y(E)8874 39137 y(X)541 b(\014le)g(with)i(header)e(and)g(pream)-31 +b(ble)542 b(\(when)g Fq($fulldoc)q(=1)p 0 TeXcolorgray +0 TeXcolorgray Fv(\),)585 b(or)541 b(just)h(a)f(snipp)31 +b(et)6863 40465 y(to)370 b(b)31 b(e)369 b(included)h(in)f(a)h(larger)f +(do)31 b(cumen)-31 b(t)370 b(\(when)g Fq($fulldoc)r(=0)p +0 TeXcolorgray 0 TeXcolorgray Fv(\).)493 b(The)369 b(default)i(is)e(1.) +8524 41794 y(The)416 b(v)-61 b(ariable)417 b Fq($documentheader)p +0 TeXcolorgray 0 TeXcolorgray 418 w Fv(is)f(used)g(when)g +Fq($fulldoc)p 0 TeXcolorgray 0 TeXcolorgray 417 w Fv(is)g(1.)634 +b(It)416 b(determines)6863 43122 y(the)337 b(do)31 b(cumen)-31 +b(t)339 b(class)e(of)g(the)g(resulting)354 b(L)24312 +42895 y Fp(A)24800 43122 y Fv(T)25414 43360 y(E)26029 +43122 y(X)337 b(\014le.)483 b(The)337 b(default)h(is)f +Fq(article)h Fv(class,)344 b(set)6863 44450 y(b)-31 b(y)370 +b Fq(\\documentclass{article})s Fv(.)8524 45779 y(By)375 +b(default)h(the)f(pream)-31 b(ble)376 b(of)g(the)f(L)24152 +45552 y Fp(A)24640 45779 y Fv(T)25254 46017 y(E)25870 +45779 y(X)g(\014le)g(created)g(when)h Fq($fulldoc)p 0 +TeXcolorgray 0 TeXcolorgray 376 w Fv(is)f(1,)i(con-)6863 +47107 y(tains)391 b(only)f(the)g(line)h Fq(\\usepackage{pst-pdgr})h +Fv(and,)k(if)390 b(the)g(language)i(c)-31 b(hosen)390 +b(is)f(not)6863 48435 y(English)331 b(\(see)f(Section)p +0 TeXcolorgray 16796 48435 a +SDict begin H.S end + 16796 48435 a 0 TeXcolorgray +Fv(3.5)p 0 TeXcolorgray 18209 47722 a +SDict begin H.R end + 18209 47722 a 18209 +48435 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (subsection.3.5) cvn H.B /ANN pdfmark end + 18209 48435 a 0 TeXcolorgray Fv(\),)340 b(the)330 +b(calls)h(of)416 b Fo(bab)31 b(el)330 b Fv(and)f Fo(inputenc)h +Fv(pac)-31 b(k)-61 b(ages.)480 b(The)330 b(v)-61 b(ariable)6863 +49764 y Fq($addtopreamble)p 0 TeXcolorgray 0 TeXcolorgray +2 w Fv(,)420 b(if)411 b(set,)420 b(ma)-31 b(y)411 b(con)-31 +b(tain)412 b(an)-31 b(y)410 b(other)h(L)30612 49537 y +Fp(A)31100 49764 y Fv(T)31714 50002 y(E)32329 49764 y(X)f(co)31 +b(de)410 b(y)-31 b(ou)410 b(migh)-31 b(t)412 b(wish)e(to)6863 +51092 y(add)370 b(to)g(the)f(pream)-31 b(ble.)8524 52420 +y(The)396 b(v)-61 b(ariable)397 b Fq($printlegend)p 0 +TeXcolorgray 0 TeXcolorgray 397 w Fv(determines)g(whether)f(to)g(add)h +(legend)f(to)h(the)f(p)31 b(edi-)6863 53749 y(gree.)493 +b(The)369 b(default)i(v)-61 b(alue)369 b(is)g(1,)h(and)g(the)f(legend)h +(is)f(prin)-31 b(ted.)6863 55513 y +SDict begin H.S end + 6863 55513 a 6863 +55513 a +SDict begin 12 H.A end + 6863 55513 a 6863 55513 a +SDict begin [/View [/XYZ H.V]/Dest (subsection.3.4) cvn /DEST pdfmark +end + 6863 55513 a 1334 x +Ft(3.4)1495 b(What)499 b(to)f(Prin)-42 b(t)6863 58891 +y Fv(The)335 b(next)h(groups)f(of)h(con\014guration)h(v)-61 +b(ariables)336 b(sets)e(the)i(information)i(to)e(b)31 +b(e)334 b(prin)-31 b(ted)336 b(in)6863 60219 y(the)247 +b(legend)f(and)h(on)f(the)h(p)31 b(edigree.)451 b(It)247 +b(consists)f(of)h(t)-31 b(w)g(o)248 b(arra)-31 b(ys:)431 +b(arra)-31 b(y)246 b Fq(@fieldsforlegend)p 0 TeXcolorgray +0 TeXcolorgray 6863 61547 a Fv(is)359 b(the)f(list)i(of)f(\014elds)g +(\(see)f(Section)p 0 TeXcolorgray 21850 61547 a +SDict begin H.S end + 21850 +61547 a 0 TeXcolorgray Fv(4.2)p 0 TeXcolorgray 23263 +60834 a +SDict begin H.R end + 23263 60834 a 23263 61547 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (subsection.4.2) cvn H.B /ANN pdfmark end + 23263 61547 a 0 TeXcolorgray +Fv(\))i(whic)-31 b(h)360 b(are)e(included)h(in)g(the)g(legend,)j(and)d +(arra)-31 b(y)6863 62876 y Fq(@fieldsforchart)p 0 TeXcolorgray +0 TeXcolorgray 463 w Fv(is)460 b(the)h(list)g(of)g(\014elds)g(to)g +(prin)-31 b(t)461 b(near)f(eac)-31 b(h)461 b(no)31 b(de)461 +b(in)f(the)h(p)31 b(edigree)6863 64204 y(\(Listing)p +0 TeXcolorgray 11005 64204 a +SDict begin H.S end + 11005 64204 a 0 TeXcolorgray +Fv(2)p 0 TeXcolorgray 11558 63491 a +SDict begin H.R end + 11558 63491 a 11558 +64204 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (lstlisting.2) cvn H.B /ANN pdfmark end + 11558 64204 a 0 TeXcolorgray Fv(\).)493 b(Setting)371 +b Fq(@fieldsforchart)p 0 TeXcolorgray 0 TeXcolorgray +372 w Fv(to)f(empt)-31 b(y)370 b(arra)-31 b(y:)6863 65145 +y +SDict begin H.S end + 6863 65145 a 6863 65145 a +SDict begin 12 H.A end + 6863 65145 a 6863 65145 a +SDict begin [/View [/XYZ H.V]/Dest (lstlisting.-5) cvn /DEST pdfmark +end + +6863 65145 a 6863 66197 a +SDict begin H.S end + 6863 66197 a 6863 66197 a +SDict begin 12 H.A end + 6863 +66197 a 6863 66197 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.-5.1) cvn /DEST pdfmark +end + 6863 66197 a 109 w Fq(@)109 b(f)g(i)g(e)g(l)g(d)g +(s)g(f)g(o)g(r)g(c)g(h)g(a)g(r)g(t)866 b(=)843 b(\()87 +b(\))g(;)p 0 TeXcolorgray 0 TeXcolorgray 25681 70071 +a Fv(7)p 0 TeXcolorgray eop end +%%Page: 8 8 +TeXDict begin 8 7 bop 0 TeXcolorgray 0 0 a +SDict begin /product where{pop product(Distiller)search{pop pop pop +version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto +closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show +grestore}if}{pop}ifelse}{pop}ifelse}if end + 0 0 a 0 TeXcolorgray +6752 1660 a +SDict begin H.S end + 6752 1660 a 6752 1660 a +SDict begin H.R end + 6752 1660 a 6752 +1660 a +SDict begin [/View [/XYZ H.V]/Dest (page.8) cvn /DEST pdfmark end + 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray +0 TeXcolorgray 6863 6531 a +SDict begin H.S end + 6863 6531 a 6863 6531 a +SDict begin 12 H.A end + 6863 +6531 a 6863 6531 a +SDict begin [/View [/XYZ H.V]/Dest (lstlisting.2) cvn /DEST pdfmark +end + 6863 6531 a 6863 7461 a +SDict begin H.S end + 6863 7461 +a 6863 7461 a +SDict begin 12 H.A end + 6863 7461 a 6863 7461 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.2.1) cvn /DEST pdfmark +end + 6863 7461 a 58 +w Fj(#)856 b(F)100 b(i)g(e)g(l)g(d)g(s)873 b(t)77 b(o)877 +b(i)102 b(n)g(c)g(l)g(u)g(d)g(e)876 b(i)77 b(n)863 b(t)87 +b(h)g(e)885 b(l)100 b(e)g(g)g(e)g(n)g(d)157 b(.)6863 +8789 y +SDict begin H.S end + 6863 8789 a 6863 8789 a +SDict begin 12 H.A end + 6863 8789 a 6863 8789 +a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.2.2) cvn /DEST pdfmark +end + 6863 8789 a 58 w Fj(#)856 b(D)100 b(e)g(l)g(e)g(t)g(e)889 +b(N)93 b(a)g(m)g(e)878 b(f)87 b(o)g(r)887 b(p)102 b(r)g(i)g(v)g(a)g(c)g +(y)904 b(p)106 b(r)g(o)g(t)g(e)g(c)g(t)g(i)g(o)g(n)162 +b(.)6863 10118 y +SDict begin H.S end + 6863 10118 a 6863 10118 a +SDict begin 12 H.A end + 6863 10118 +a 6863 10118 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.2.3) cvn /DEST pdfmark +end + 6863 10118 a 58 w Fj(#)6863 11446 y +SDict begin H.S end + 6863 +11446 a 6863 11446 a +SDict begin 12 H.A end + 6863 11446 a 6863 11446 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.2.4) cvn /DEST pdfmark +end + 6863 11446 +a 109 w Fq(@)109 b(f)g(i)g(e)g(l)g(d)g(s)g(f)g(o)g(r)g(l)g(e)g(g)g(e)g +(n)g(d)874 b(=)833 b(q)77 b(w)136 b(\()152 b(N)93 b(a)g(m)g(e)878 +b(D)87 b(o)g(B)872 b(D)87 b(o)g(D)887 b(C)102 b(o)g(m)g(m)g(e)g(n)g(t) +179 b(\))77 b(;)6863 12774 y +SDict begin H.S end + 6863 12774 a 6863 12774 +a +SDict begin 12 H.A end + 6863 12774 a 6863 12774 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.2.5) cvn /DEST pdfmark +end + 6863 12774 a 6863 14103 a +SDict begin H.S end + +6863 14103 a 6863 14103 a +SDict begin 12 H.A end + 6863 14103 a 6863 14103 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.2.6) cvn /DEST pdfmark +end + 6863 +14103 a 58 w Fj(#)6863 15431 y +SDict begin H.S end + 6863 15431 a 6863 15431 +a +SDict begin 12 H.A end + 6863 15431 a 6863 15431 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.2.7) cvn /DEST pdfmark +end + 6863 15431 a 58 w Fj(#)856 +b(F)100 b(i)g(e)g(l)g(d)g(s)873 b(t)77 b(o)863 b(p)87 +b(u)g(t)863 b(a)77 b(t)863 b(t)87 b(h)g(e)878 b(n)93 +b(o)g(d)g(e)152 b(.)6863 16759 y +SDict begin H.S end + 6863 16759 a 6863 16759 +a +SDict begin 12 H.A end + 6863 16759 a 6863 16759 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.2.8) cvn /DEST pdfmark +end + 6863 16759 a 58 w Fj(#)856 +b(D)100 b(e)g(l)g(e)g(t)g(e)889 b(N)93 b(a)g(m)g(e)878 +b(f)87 b(o)g(r)887 b(p)102 b(r)g(i)g(v)g(a)g(c)g(y)904 +b(p)106 b(r)g(o)g(t)g(e)g(c)g(t)g(i)g(o)g(n)162 b(.)6863 +18088 y +SDict begin H.S end + 6863 18088 a 6863 18088 a +SDict begin 12 H.A end + 6863 18088 a 6863 18088 +a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.2.9) cvn /DEST pdfmark +end + 6863 18088 a 58 w Fj(#)6863 19416 y +SDict begin H.S end + 6863 19416 a 6863 +19416 a +SDict begin 12 H.A end + 6863 19416 a 6863 19416 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.2.10) cvn /DEST pdfmark +end + 6863 19416 a 109 w +Fq(@)109 b(f)g(i)g(e)g(l)g(d)g(s)g(f)g(o)g(r)g(c)g(h)g(a)g(r)g(t)866 +b(=)834 b(q)77 b(w)136 b(\()151 b(N)93 b(a)g(m)g(e)171 +b(\))77 b(;)p 0 TeXcolorgray 0 TeXcolorgray 12632 21851 +a Fv(Listing)370 b(2:)493 b(Con\014guration)372 b(File:)493 +b(Cho)31 b(osing)371 b(Fields)e(to)h(Prin)-31 b(t)p 0 +TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray +6863 27159 a(prev)g(en)g(ts)369 b(putting)i(additional)i(information)f +(on)d(the)h(p)31 b(edigrees.)8524 28487 y(The)549 b(\014eld)h(names)g +(are)f(describ)31 b(ed)548 b(in)i(Section)p 0 TeXcolorgray +29760 28487 a +SDict begin H.S end + 29760 28487 a 0 TeXcolorgray Fv(4.2)p 0 +TeXcolorgray 31173 27774 a +SDict begin H.R end + 31173 27774 a 31173 28487 +a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (subsection.4.2) cvn H.B /ANN pdfmark end + 31173 28487 a 0 TeXcolorgray Fv(.)1034 b(Note)551 b(that)f +Fq(AgeAtDeath)h Fv(is)6863 29815 y(a)479 b(sp)31 b(ecial)478 +b(\014eld:)712 b(it)479 b(is)f(the)g(age)h(at)g(death)g(\(or)g(empt)-31 +b(y\))480 b(calculated)g(as)e(the)h(di\013erence)6863 +31144 y(b)31 b(et)-31 b(w)g(een)370 b(the)g(death)g(date)f(and)h(the)f +(birth)h(date.)6863 32693 y +SDict begin H.S end + 6863 32693 a 6863 32693 a +SDict begin 12 H.A end + +6863 32693 a 6863 32693 a +SDict begin [/View [/XYZ H.V]/Dest (subsection.3.5) cvn /DEST pdfmark +end + 6863 32693 a 1549 x Ft(3.5)1495 +b(Language)500 b(and)f(Enco)42 b(ding)6863 36286 y Fv(The)460 +b(next)f(group)h(of)f(v)-61 b(ariables)460 b(describ)31 +b(es)458 b(the)h(language)i(and)f(enco)31 b(ding)460 +b(of)f(the)h(data)6863 37614 y(\014le)466 b(input)h(and)f(the)g(L)16337 +37387 y Fp(A)16825 37614 y Fv(T)17439 37852 y(E)18055 +37614 y(X)g(output.)784 b(They)467 b(are)f(sho)-31 b(wn)466 +b(in)g(Listing)p 0 TeXcolorgray 37253 37614 a +SDict begin H.S end + 37253 37614 +a 0 TeXcolorgray Fv(3)p 0 TeXcolorgray 37806 36901 a +SDict begin H.R end + +37806 36901 a 37806 37614 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (lstlisting.3) cvn H.B /ANN pdfmark end + 37806 37614 a 0 TeXcolorgray +Fv(.)783 b(The)466 b(v)-61 b(ariable)6863 38942 y Fq($language)p +0 TeXcolorgray 0 TeXcolorgray 508 w Fv(at)507 b(presen)-31 +b(t)506 b(can)g(ha)-31 b(v)g(e)508 b(one)e(of)h(t)-31 +b(w)g(o)508 b(v)-61 b(alues:)768 b Fq(english)507 b Fv(\(the)g +(default\))h(or)6863 40271 y Fq(russian)q Fv(.)582 b(If)399 +b(the)h(v)-61 b(alue)399 b(is)g Fq(russian)q Fv(,)407 +b(the)400 b(output)g(do)31 b(cumen)-31 b(t)400 b(pream)-31 +b(ble)400 b(includes)g(the)6863 41599 y(line)6863 42263 +y +SDict begin H.S end + 6863 42263 a 6863 42263 a +SDict begin 12 H.A end + 6863 42263 a 6863 42263 a +SDict begin [/View [/XYZ H.V]/Dest (lstlisting.-6) cvn /DEST pdfmark +end + +6863 42263 a 6863 43592 a +SDict begin H.S end + 6863 43592 a 6863 43592 a +SDict begin 12 H.A end + 6863 +43592 a 6863 43592 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.-6.1) cvn /DEST pdfmark +end + 6863 43592 a 58 w Fq(\\)164 b(u)106 +b(s)g(e)g(p)g(a)g(c)g(k)g(a)g(g)g(e)162 b([)e(r)102 b(u)g(s)g(s)g(i)g +(a)g(n)179 b(])77 b({)175 b(b)97 b(a)g(b)g(e)g(l)155 +b(})p 0 TeXcolorgray 0 TeXcolorgray 6863 45584 a Fv(The)301 +b(v)-61 b(ariable)302 b Fq($encoding)p 0 TeXcolorgray +0 TeXcolorgray 302 w Fv(sets)e(the)h(enco)31 b(ding)301 +b(of)h(the)e(L)30518 45357 y Fp(A)31006 45584 y Fv(T)31620 +45822 y(E)32236 45584 y(X)h(\014le)g(if)g(the)g(language)i(is)d(not) +6863 46912 y(English.)639 b(By)418 b(default)h(it)f(is)g +Fq(cp1251)p Fv(,)430 b(if)418 b(the)g(language)i(is)d(Russian.)638 +b(Set)418 b(it)g(to)g Fq(koi8-r)6863 48241 y Fv(to)371 +b(c)-31 b(ho)31 b(ose)370 b(K)-31 b(OI8)371 b(enco)31 +b(ding.)496 b(It)370 b(is)g(w)-31 b(orth)371 b(to)g(note)g(that)g(the)g +(data)g(\014le)f(and)h(the)f(output)6863 49569 y(L)7156 +49342 y Fp(A)7644 49569 y Fv(T)8258 49807 y(E)8874 49569 +y(X)f(\014le)g(are)g(assumed)h(to)g(ha)-31 b(v)g(e)370 +b(the)f(same)h(language)h(and)e(enco)31 b(ding.)8524 +50898 y(If)252 b Fq($language)j Fv(is)e(not)g Fq(english)q +Fv(,)277 b(the)253 b(program)h(recognizes)f(b)31 b(oth)254 +b(English)g(and)f(nativ)-31 b(e)6863 52226 y(names)370 +b(of)f(the)h(\014elds)f(in)g(the)h(data)g(\014le)g(\(see)f(Section)p +0 TeXcolorgray 29851 52226 a +SDict begin H.S end + 29851 52226 a 0 TeXcolorgray +Fv(4.2)p 0 TeXcolorgray 31264 51513 a +SDict begin H.R end + 31264 51513 a 31264 +52226 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (subsection.4.2) cvn H.B /ANN pdfmark end + 31264 52226 a 0 TeXcolorgray Fv(\).)6863 54052 +y +SDict begin H.S end + 6863 54052 a 6863 54052 a +SDict begin 12 H.A end + 6863 54052 a 6863 54052 a +SDict begin [/View [/XYZ H.V]/Dest (subsection.3.6) cvn /DEST pdfmark +end + +6863 54052 a 1273 x Ft(3.6)1495 b(F)-125 b(on)-42 b(ts)6863 +57368 y Fv(There)421 b(are)f(t)-31 b(w)g(o)423 b(kinds)e(of)g(text)h +(on)e(the)h(c)-31 b(hart:)597 b(the)421 b(text)g(ab)31 +b(o)-31 b(v)g(e)422 b(a)f(no)31 b(de)421 b(and)g(the)g(text)6863 +58696 y(b)31 b(elo)-31 b(w)314 b(a)f(no)31 b(de)p 0 TeXcolorgray +13115 58696 a +SDict begin H.S end + 13115 58696 a -401 x Fp(4)13612 58696 y +SDict begin 12 H.L end + +13612 58696 a 13612 58696 a +SDict begin [/Subtype /Link/Dest (Hfootnote.4) cvn/H /I/Border [0 0 +0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end + 13612 58696 a 0 TeXcolorgray +Fv(.)473 b(The)313 b(fon)-31 b(ts)314 b(for)f(them)g(are)g(set)f(b)-31 +b(y)313 b(the)g(v)-61 b(ariables)314 b Fq($belowtextfont)p +0 TeXcolorgray 0 TeXcolorgray 314 w Fv(\(b)-31 b(y)6863 +60025 y(default)470 b Fq(\\small)q Fv(\))e(and)h Fq($abovetextfont)p +0 TeXcolorgray 0 TeXcolorgray 470 w Fv(\(b)-31 b(y)469 +b(default)h Fq(\\scriptsize)q Fv(\).)790 b(An)-31 b(y)484 +b(L)42505 59798 y Fp(A)42993 60025 y Fv(T)43607 60263 +y(E)44223 60025 y(X)6863 61353 y(fon)-31 b(t)398 b(declaration)g(lik) +-31 b(e)398 b Fq(\\sffamily)g Fv(or)e Fq(\\itshape)h +Fv(is)g(allo)-31 b(w)g(ed)399 b(here.)573 b(See)397 b(Listing)p +0 TeXcolorgray 42778 61353 a +SDict begin H.S end + 42778 61353 a 0 TeXcolorgray +Fv(4)p 0 TeXcolorgray 43331 60640 a +SDict begin H.R end + 43331 60640 a 43331 +61353 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (lstlisting.4) cvn H.B /ANN pdfmark end + 43331 61353 a 0 TeXcolorgray 397 w Fv(for)6863 +62681 y(an)370 b(example)g(of)g(usage.)p 0 TeXcolorgray +6863 63605 15276 45 v 8096 64321 a Fm(4)p 0 TeXcolorgray +8557 64633 a +SDict begin H.S end + 8557 64633 a 8557 64633 a +SDict begin H.R end + 8557 64633 a 8557 +64633 a +SDict begin [/View [/XYZ H.V]/Dest (Hfootnote.4) cvn /DEST pdfmark +end + 8557 64633 a 0 TeXcolorgray Fl(The)303 b(T)11004 +64824 y(E)11526 64633 y(X)g(pac)-26 b(k)-52 b(age)305 +b([)p 0 TeXcolorgray 16288 64633 a +SDict begin H.S end + 16288 64633 a 0 TeXcolorgray +Fl(2)p 0 TeXcolorgray 16758 64063 a +SDict begin H.R end + 16758 64063 a 16758 +64633 a +SDict begin [/Color [0 1 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (cite.pst-pdgr06) cvn H.B /ANN pdfmark end + 16758 64633 a 0 TeXcolorgray Fl(])f(also)h(allo)-26 +b(ws)305 b(to)f(place)h(text)e(at)h(b)26 b(oth)304 b(sides)g(of)f(the)h +(no)26 b(de,)306 b(but)d(the)h(program)6863 65685 y Fi(p)26 +b(edigree)315 b Fl(curren)-26 b(tly)313 b(do)26 b(es)314 +b(not)g(use)g(this)g(feature.)p 0 TeXcolorgray 0 TeXcolorgray +25681 70071 a Fv(8)p 0 TeXcolorgray eop end +%%Page: 9 9 +TeXDict begin 9 8 bop 0 TeXcolorgray 0 0 a +SDict begin /product where{pop product(Distiller)search{pop pop pop +version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto +closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show +grestore}if}{pop}ifelse}{pop}ifelse}if end + 0 0 a 0 TeXcolorgray +6752 1660 a +SDict begin H.S end + 6752 1660 a 6752 1660 a +SDict begin H.R end + 6752 1660 a 6752 +1660 a +SDict begin [/View [/XYZ H.V]/Dest (page.9) cvn /DEST pdfmark end + 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray +0 TeXcolorgray 6863 6531 a +SDict begin H.S end + 6863 6531 a 6863 6531 a +SDict begin 12 H.A end + 6863 +6531 a 6863 6531 a +SDict begin [/View [/XYZ H.V]/Dest (lstlisting.3) cvn /DEST pdfmark +end + 6863 6531 a 6863 7461 a +SDict begin H.S end + 6863 7461 +a 6863 7461 a +SDict begin 12 H.A end + 6863 7461 a 6863 7461 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.3.1) cvn /DEST pdfmark +end + 6863 7461 a 58 +w Fj(#)6863 8789 y +SDict begin H.S end + 6863 8789 a 6863 8789 a +SDict begin 12 H.A end + 6863 8789 +a 6863 8789 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.3.2) cvn /DEST pdfmark +end + 6863 8789 a 58 w Fj(#)859 b(L)103 b(a)g(n)g(g)g(u)g(a)g +(g)g(e)6863 10118 y +SDict begin H.S end + 6863 10118 a 6863 10118 a +SDict begin 12 H.A end + 6863 10118 +a 6863 10118 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.3.3) cvn /DEST pdfmark +end + 6863 10118 a 58 w Fj(#)6863 11446 y +SDict begin H.S end + 6863 +11446 a 6863 11446 a +SDict begin 12 H.A end + 6863 11446 a 6863 11446 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.3.4) cvn /DEST pdfmark +end + 6863 11446 +a 58 w Fj(#)861 b Fh($)105 b Fj(l)g(a)g(n)g(g)g(u)g(a)g(g)g(e)180 +b(=)77 b(")180 b(r)102 b(u)g(s)g(s)g(i)g(a)g(n)178 b(")77 +b(;)6863 12774 y +SDict begin H.S end + 6863 12774 a 6863 12774 a +SDict begin 12 H.A end + 6863 12774 +a 6863 12774 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.3.5) cvn /DEST pdfmark +end + 6863 12774 a 105 w Fq($)105 b(l)g(a)g(n)g(g)g(u)g(a)g(g) +g(e)161 b(=)116 b(")160 b(e)102 b(n)g(g)g(l)g(i)g(s)g(h)159 +b(")117 b(;)6863 14103 y +SDict begin H.S end + 6863 14103 a 6863 14103 a +SDict begin 12 H.A end + 6863 +14103 a 6863 14103 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.3.6) cvn /DEST pdfmark +end + 6863 14103 a 6863 15431 a +SDict begin H.S end + 6863 15431 +a 6863 15431 a +SDict begin 12 H.A end + 6863 15431 a 6863 15431 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.3.7) cvn /DEST pdfmark +end + 6863 15431 a +58 w Fj(#)6863 16759 y +SDict begin H.S end + 6863 16759 a 6863 16759 a +SDict begin 12 H.A end + 6863 +16759 a 6863 16759 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.3.8) cvn /DEST pdfmark +end + 6863 16759 a 58 w Fj(#)859 b(O)103 +b(v)g(e)g(r)g(r)g(i)g(d)g(e)892 b(t)87 b(h)g(e)888 b(e)103 +b(n)g(c)g(o)g(d)g(i)g(n)g(g)6863 18088 y +SDict begin H.S end + 6863 18088 a +6863 18088 a +SDict begin 12 H.A end + 6863 18088 a 6863 18088 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.3.9) cvn /DEST pdfmark +end + 6863 18088 a 58 +w Fj(#)6863 19416 y +SDict begin H.S end + 6863 19416 a 6863 19416 a +SDict begin 12 H.A end + 6863 19416 +a 6863 19416 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.3.10) cvn /DEST pdfmark +end + 6863 19416 a 58 w Fj(#)861 b Fh($)105 +b Fj(e)g(n)g(c)g(o)g(d)g(i)g(n)g(g)180 b(=)77 b(")156 +b(k)77 b(o)g(i)g(8)215 b(-)116 b(r)136 b(")77 b(;)p 0 +TeXcolorgray 0 TeXcolorgray 10345 21851 a Fv(Listing)371 +b(3:)493 b(Con\014guration)372 b(File:)493 b(Cho)31 b(osing)370 +b(Language)h(and)f(Enco)31 b(ding)p 0 TeXcolorgray 0 +TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray 6863 25830 +a +SDict begin H.S end + 6863 25830 a 6863 25830 a +SDict begin 12 H.A end + 6863 25830 a 6863 25830 a +SDict begin [/View [/XYZ H.V]/Dest (lstlisting.4) cvn /DEST pdfmark +end + +6863 25830 a 6863 26760 a +SDict begin H.S end + 6863 26760 a 6863 26760 a +SDict begin 12 H.A end + 6863 +26760 a 6863 26760 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.4.1) cvn /DEST pdfmark +end + 6863 26760 a 58 w Fj(#)6863 28088 +y +SDict begin H.S end + 6863 28088 a 6863 28088 a +SDict begin 12 H.A end + 6863 28088 a 6863 28088 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.4.2) cvn /DEST pdfmark +end + +6863 28088 a 58 w Fj(#)853 b(F)97 b(o)g(n)g(t)g(s)881 +b(f)87 b(o)g(r)873 b(t)87 b(h)g(e)882 b(c)97 b(h)g(a)g(r)g(t)6863 +29417 y +SDict begin H.S end + 6863 29417 a 6863 29417 a +SDict begin 12 H.A end + 6863 29417 a 6863 29417 +a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.4.3) cvn /DEST pdfmark +end + 6863 29417 a 58 w Fj(#)6863 30745 y +SDict begin H.S end + 6863 30745 a 6863 +30745 a +SDict begin 12 H.A end + 6863 30745 a 6863 30745 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.4.4) cvn /DEST pdfmark +end + 6863 30745 a 108 w +Fq($)108 b(b)g(e)g(l)g(o)g(w)g(t)g(e)g(x)g(t)g(f)g(o)g(n)g(t)176 +b(=)135 b(')97 b(\\)156 b(s)97 b(m)g(a)g(l)g(l)174 b(')97 +b(;)6863 32074 y +SDict begin H.S end + 6863 32074 a 6863 32074 a +SDict begin 12 H.A end + 6863 32074 +a 6863 32074 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.4.5) cvn /DEST pdfmark +end + 6863 32074 a 108 w Fq($)108 b(a)g(b)g(o)g(v)g(e)g(t)g(e) +g(x)g(t)g(f)g(o)g(n)g(t)176 b(=)135 b(')97 b(\\)164 b(s)106 +b(c)g(r)g(i)g(p)g(t)g(s)g(i)g(z)g(e)182 b(')97 b(;)p +0 TeXcolorgray 0 TeXcolorgray 14870 34509 a Fv(Listing)371 +b(4:)492 b(Con\014guration)372 b(File:)493 b(Cho)31 b(osing)371 +b(F)-92 b(on)-31 b(ts)p 0 TeXcolorgray 0 TeXcolorgray +0 TeXcolorgray 6863 38709 a +SDict begin H.S end + 6863 38709 a 6863 38709 a +SDict begin 12 H.A end + +6863 38709 a 6863 38709 a +SDict begin [/View [/XYZ H.V]/Dest (subsection.3.7) cvn /DEST pdfmark +end + 6863 38709 a 1107 x Ft(3.7)1495 +b(Lengths)6863 41859 y Fv(The)391 b(next)g(group)g(of)g(v)-61 +b(ariables)392 b(\(Listing)p 0 TeXcolorgray 24891 41859 +a +SDict begin H.S end + 24891 41859 a 0 TeXcolorgray Fv(5)p 0 TeXcolorgray +25444 41146 a +SDict begin H.R end + 25444 41146 a 25444 41859 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (lstlisting.5) cvn H.B /ANN pdfmark end + 25444 41859 +a 0 TeXcolorgray Fv(\))g(sets)e(the)h(distances)g(b)31 +b(et)-31 b(w)g(een)392 b(the)f(k)-31 b(ey)391 b(ele-)6863 +43188 y(men)-31 b(ts)283 b(of)f(the)h(c)-31 b(hart.)464 +b(All)283 b(lengths)g(are)f(in)g(cen)-31 b(timeters)283 +b(\(actually)-92 b(,)303 b(in)282 b Fq(unit)q Fv(s,)299 +b(are)282 b(de\014ned)6863 44516 y(in)370 b(PST)-92 b(ric)-31 +b(ks)369 b([)p 0 TeXcolorgray 13129 44516 a +SDict begin H.S end + 13129 44516 +a 0 TeXcolorgray Fv(3)p 0 TeXcolorgray 13682 43803 a +SDict begin H.R end + +13682 43803 a 13682 44516 a +SDict begin [/Color [0 1 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (cite.PSTricks93) cvn H.B /ANN pdfmark end + 13682 44516 a 0 TeXcolorgray +1 w Fv(]\).)8524 45844 y(The)419 b(v)-61 b(ariable)421 +b Fq($descarmA)p 0 TeXcolorgray 0 TeXcolorgray 421 w +Fv(sets)e(the)h(length)h(of)f(the)g(\014rst)f(segmen)-31 +b(t)421 b(of)f(the)g(descen)-31 b(t)6863 47173 y(line:)526 +b(from)387 b(the)f(paren)-31 b(t)386 b(no)31 b(de)385 +b(to)i(the)f(sibs)f(line,)391 b(as)385 b(measured)h(from)g(the)g(cen) +-31 b(ter)386 b(of)g(the)6863 48501 y(paren)-31 b(t)370 +b(\(see)f([)p 0 TeXcolorgray 12868 48501 a +SDict begin H.S end + 12868 48501 +a 0 TeXcolorgray Fv(2)p 0 TeXcolorgray 13421 47788 a +SDict begin H.R end + +13421 47788 a 13421 48501 a +SDict begin [/Color [0 1 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (cite.pst-pdgr06) cvn H.B /ANN pdfmark end + 13421 48501 a 0 TeXcolorgray +1 w Fv(])g(for)h(more)f(details\).)495 b(By)369 b(default)i(it)f(is)f +(0.8.)8524 49829 y(The)327 b(v)-61 b(ariables)329 b Fq($xdist)p +0 TeXcolorgray 0 TeXcolorgray 328 w Fv(and)f Fq($ydist)p +0 TeXcolorgray 0 TeXcolorgray 328 w Fv(set)f(the)h(distances)g(b)31 +b(et)-31 b(w)g(een)328 b(the)g(no)31 b(des)327 b(along)6863 +51158 y(horizon)-31 b(tal)372 b(and)d(v)-31 b(ertical)371 +b(axes)e(corresp)31 b(ondingly)-92 b(.)494 b(The)369 +b(default)i(for)e(b)31 b(oth)370 b(is)f(2.)6863 52922 +y +SDict begin H.S end + 6863 52922 a 6863 52922 a +SDict begin 12 H.A end + 6863 52922 a 6863 52922 a +SDict begin [/View [/XYZ H.V]/Dest (subsection.3.8) cvn /DEST pdfmark +end + +6863 52922 a 1335 x Ft(3.8)1495 b(Scaling)500 b(and)f(Rotation)6863 +56300 y Fv(Complex)435 b(p)31 b(edigrees)432 b(migh)-31 +b(t)434 b(b)31 b(e)432 b(to)31 b(o)434 b(large)f(to)g(\014t)g(on)g(a)f +(page.)684 b(In)432 b(this)h(case)f(a)h(scaling)6863 +57628 y(and)451 b(\(or\))h(rotation)h(migh)-31 b(t)452 +b(b)31 b(e)451 b(necessary)f(to)h(prin)-31 b(t)451 b(the)g(c)-31 +b(hart.)738 b(Of)451 b(course,)471 b(c)-31 b(hanging)6863 +58957 y(the)404 b(lengths)h(describ)31 b(ed)403 b(in)h(Section)p +0 TeXcolorgray 22826 58957 a +SDict begin H.S end + 22826 58957 a 0 TeXcolorgray +Fv(3.7)p 0 TeXcolorgray 24239 58243 a +SDict begin H.R end + 24239 58243 a 24239 +58957 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (subsection.3.7) cvn H.B /ANN pdfmark end + 24239 58957 a 0 TeXcolorgray 405 w Fv(migh)-31 +b(t)406 b(also)e(help,)414 b(but)404 b(the)g(scaling)h(describ)31 +b(ed)6863 60285 y(here)369 b(also)h(c)-31 b(hanged)370 +b(the)f(size)g(of)h(the)f(p)31 b(edigree)370 b(sym)-31 +b(b)31 b(ols.)8524 61613 y(There)426 b(are)h(three)f(v)-61 +b(ariables)427 b(con)-31 b(trolling)430 b(the)d(scaling)h(and)f +(rotation)i(of)e(p)31 b(edigrees:)6863 62942 y Fq($maxW)p +0 TeXcolorgray 0 TeXcolorgray 1 w Fv(,)368 b Fq($maxH)p +0 TeXcolorgray 0 TeXcolorgray 368 w Fv(and)g Fq($rotate)p +0 TeXcolorgray 0 TeXcolorgray 368 w Fv(\(see)g(Listing)p +0 TeXcolorgray 26231 62942 a +SDict begin H.S end + 26231 62942 a 0 TeXcolorgray +Fv(6)p 0 TeXcolorgray 26784 62228 a +SDict begin H.R end + 26784 62228 a 26784 +62942 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (lstlisting.6) cvn H.B /ANN pdfmark end + 26784 62942 a 0 TeXcolorgray Fv(\).)493 b(The)368 +b(v)-61 b(ariables)368 b Fq($maxW)p 0 TeXcolorgray 0 +TeXcolorgray 368 w Fv(and)g Fq($maxH)p 0 TeXcolorgray +0 TeXcolorgray 368 w Fv(are)6863 64270 y(the)359 b(maximal)i(width)e +(and)g(heigh)-31 b(t)359 b(of)g(the)f(c)-31 b(hart)359 +b(in)g(cen)-31 b(timeters.)490 b(Setting)360 b(an)-31 +b(y)359 b(of)f(them)6863 65598 y(to)370 b(zero)f(disables)h(scaling.)p +0 TeXcolorgray 25681 70071 a(9)p 0 TeXcolorgray eop end +%%Page: 10 10 +TeXDict begin 10 9 bop 0 TeXcolorgray 0 0 a +SDict begin /product where{pop product(Distiller)search{pop pop pop +version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto +closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show +grestore}if}{pop}ifelse}{pop}ifelse}if end + 0 0 a 0 TeXcolorgray +6752 1660 a +SDict begin H.S end + 6752 1660 a 6752 1660 a +SDict begin H.R end + 6752 1660 a 6752 +1660 a +SDict begin [/View [/XYZ H.V]/Dest (page.10) cvn /DEST pdfmark end + 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray +0 TeXcolorgray 6863 6531 a +SDict begin H.S end + 6863 6531 a 6863 6531 a +SDict begin 12 H.A end + 6863 +6531 a 6863 6531 a +SDict begin [/View [/XYZ H.V]/Dest (lstlisting.5) cvn /DEST pdfmark +end + 6863 6531 a 6863 7461 a +SDict begin H.S end + 6863 7461 +a 6863 7461 a +SDict begin 12 H.A end + 6863 7461 a 6863 7461 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.5.1) cvn /DEST pdfmark +end + 6863 7461 a 58 +w Fj(#)6863 8789 y +SDict begin H.S end + 6863 8789 a 6863 8789 a +SDict begin 12 H.A end + 6863 8789 +a 6863 8789 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.5.2) cvn /DEST pdfmark +end + 6863 8789 a 58 w Fj(#)1557 b(d)103 b(e)g(s)g(c)g(a)g(r)g +(m)g(A)881 b(i)77 b(n)853 b(c)77 b(m)6863 10118 y +SDict begin H.S end + 6863 +10118 a 6863 10118 a +SDict begin 12 H.A end + 6863 10118 a 6863 10118 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.5.3) cvn /DEST pdfmark +end + 6863 10118 +a 58 w Fj(#)6863 11446 y +SDict begin H.S end + 6863 11446 a 6863 11446 a +SDict begin 12 H.A end + 6863 +11446 a 6863 11446 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.5.4) cvn /DEST pdfmark +end + 6863 11446 a 105 w Fq($)105 b(d)g(e)g(s)g(c)g(a)g +(r)g(m)g(A)858 b(=)849 b(0)93 b(.)g(8)g(;)6863 12774 +y +SDict begin H.S end + 6863 12774 a 6863 12774 a +SDict begin 12 H.A end + 6863 12774 a 6863 12774 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.5.5) cvn /DEST pdfmark +end + +6863 12774 a 6863 14103 a +SDict begin H.S end + 6863 14103 a 6863 14103 a +SDict begin 12 H.A end + 6863 +14103 a 6863 14103 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.5.6) cvn /DEST pdfmark +end + 6863 14103 a 58 w Fj(#)6863 15431 +y +SDict begin H.S end + 6863 15431 a 6863 15431 a +SDict begin 12 H.A end + 6863 15431 a 6863 15431 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.5.7) cvn /DEST pdfmark +end + +6863 15431 a 58 w Fj(#)861 b(D)105 b(i)g(s)g(t)g(a)g(n)g(c)g(e)g(s)901 +b(b)102 b(e)g(t)g(w)g(e)g(e)g(n)896 b(n)97 b(o)g(d)g(e)g(s)852 +b(\()136 b(i)77 b(n)853 b(c)77 b(m)137 b(\))6863 16759 +y +SDict begin H.S end + 6863 16759 a 6863 16759 a +SDict begin 12 H.A end + 6863 16759 a 6863 16759 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.5.8) cvn /DEST pdfmark +end + +6863 16759 a 58 w Fj(#)6863 18088 y +SDict begin H.S end + 6863 18088 a 6863 +18088 a +SDict begin 12 H.A end + 6863 18088 a 6863 18088 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.5.9) cvn /DEST pdfmark +end + 6863 18088 a 100 w +Fq($)100 b(x)g(d)g(i)g(s)g(t)186 b(=)87 b(2)g(;)6863 +19416 y +SDict begin H.S end + 6863 19416 a 6863 19416 a +SDict begin 12 H.A end + 6863 19416 a 6863 19416 +a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.5.10) cvn /DEST pdfmark +end + 6863 19416 a 100 w Fq($)100 b(y)g(d)g(i)g(s)g(t)186 +b(=)87 b(2)g(;)p 0 TeXcolorgray 0 TeXcolorgray 14271 +21851 a Fv(Listing)370 b(5:)493 b(Con\014guration)372 +b(File:)493 b(Cho)31 b(osing)370 b(Lengths)p 0 TeXcolorgray +0 TeXcolorgray 0 TeXcolorgray 8524 27159 a(The)412 b(scaling)h(w)-31 +b(orks)413 b(as)f(follo)-31 b(ws.)623 b(If)412 b(b)31 +b(oth)412 b(heigh)-31 b(t)414 b(and)e(width)h(of)g(the)f(p)31 +b(edigree)412 b(are)6863 28487 y(smaller)358 b(than)f(the)g(limits,)362 +b(no)357 b(scaling)h(is)f(done.)489 b(In)356 b(the)h(other)g(case)g +(the)g(c)-31 b(hart)357 b(is)g(scaled)6863 29815 y(while)385 +b(preserving)d(the)i(asp)31 b(ect)383 b(ratio)i(\(b)-31 +b(y)384 b(c)-31 b(hanging)385 b(the)e(v)-61 b(alue)384 +b(of)g Fq(unit)p Fv(,)j(see)c([)p 0 TeXcolorgray 40966 +29815 a +SDict begin H.S end + 40966 29815 a 0 TeXcolorgray Fv(3)p 0 TeXcolorgray +41519 29102 a +SDict begin H.R end + 41519 29102 a 41519 29815 a +SDict begin [/Color [0 1 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (cite.PSTricks93) cvn H.B /ANN pdfmark end + 41519 29815 +a 0 TeXcolorgray 1 w Fv(]\))h(to)g(\014t)6863 31144 y(in)-31 +b(to)371 b(the)e(limits.)8524 32472 y(The)552 b(v)-61 +b(ariable)554 b Fq($rotate)g Fv(sets)e(the)h(orien)-31 +b(tation)555 b(of)f(the)f(c)-31 b(hart.)1043 b(If)553 +b(it)g(is)g Fq(no)p Fv(,)599 b(the)6863 33800 y(p)31 +b(edigree)485 b(is)h(nev)-31 b(er)485 b(rotated,)516 +b(while)487 b(if)e(it)i Fq(yes)p Fv(,)515 b(it)486 b(is)f(alw)-31 +b(a)g(ys)488 b(rotated)e(ninet)-31 b(y)487 b(degrees)6863 +35129 y(coun)-31 b(terclo)31 b(c)-31 b(kwise.)873 b(If)495 +b(this)h(v)-61 b(ariable)496 b(is)f(set)g(to)h Fq(maybe)g +Fv(\(the)g(default\),)529 b(the)495 b(program)6863 36457 +y(compares)308 b(the)h(scaling)g(for)f(the)g(non-rotated)i(and)e +(rotated)h(p)31 b(edigrees,)321 b(and)308 b(c)-31 b(ho)31 +b(oses)308 b(the)6863 37785 y(orien)-31 b(tation)372 +b(for)e(whic)-31 b(h)370 b(the)f(scaling)i(is)e(closer)g(to)h(one.)6863 +39669 y +SDict begin H.S end + 6863 39669 a 6863 39669 a +SDict begin 12 H.A end + 6863 39669 a 6863 39669 +a +SDict begin [/View [/XYZ H.V]/Dest (section.4) cvn /DEST pdfmark end + 6863 39669 a 1777 x Fu(4)1793 b(Running)598 b(the)h(Program)6863 +42852 y +SDict begin H.S end + 6863 42852 a 6863 42852 a +SDict begin 12 H.A end + 6863 42852 a 6863 42852 +a +SDict begin [/View [/XYZ H.V]/Dest (subsection.4.1) cvn /DEST pdfmark +end + 6863 42852 a 1240 x Ft(4.1)1495 b(Program)500 b(In)-42 +b(v)g(o)42 b(cation)500 b(And)f(Options)6863 46135 y +Fv(The)488 b(program)g Fq(pedigree)g Fv(is)g(a)f(command)i(line)f +(program.)848 b(It)488 b(reads)e(the)i(data)h(from)6863 +47464 y(a)471 b(text)g(\014le)f Fq(input_file)i Fv(and)e(pro)31 +b(duces)470 b(an)g(output)i(\014le)e(with)i(L)35635 47237 +y Fp(A)36123 47464 y Fv(T)36737 47702 y(E)37352 47464 +y(X)f(macros.)796 b(The)6863 48792 y(format)371 b(of)f(the)f(input)h +(\014le)f(is)g(describ)31 b(ed)369 b(in)g(Section)p 0 +TeXcolorgray 29544 48792 a +SDict begin H.S end + 29544 48792 a 0 TeXcolorgray +Fv(4.2)p 0 TeXcolorgray 30957 48079 a +SDict begin H.R end + 30957 48079 a 30957 +48792 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (subsection.4.2) cvn H.B /ANN pdfmark end + 30957 48792 a 0 TeXcolorgray Fv(.)493 b(The)370 +b(program)g(in)-31 b(v)g(o)31 b(cation)372 b(is:)p 0 +TeXcolorgray 0 TeXcolorgray 6863 51006 a Fq(pedigree)582 +b([-c)g(configuration_file])i([-d])e([-o)f(output_file])12093 +52334 y([-s)h(start])g(input_file)6863 54548 y Fv(\(the)370 +b(square)f(brac)-31 b(k)g(ets)370 b(sho)-31 b(w)370 b(optional)h +(argumen)-31 b(ts\).)8524 55877 y(All)370 b(argumen)-31 +b(ts)370 b(but)g Fq(input_file)g Fv(are)f(optional.)495 +b(They)370 b(are)f(describ)31 b(ed)368 b(b)31 b(elo)-31 +b(w.)8524 57205 y(The)419 b(option)h Fq(-c)f Fv(selects)g(a)g +Fn(c)-57 b(on\014gur)g(ation)443 b(\014le.)641 b Fv(The)419 +b(format)i(of)e(the)g(con\014guration)6863 58533 y(\014le)315 +b(is)g(describ)31 b(ed)314 b(in)i(Section)p 0 TeXcolorgray +19553 58533 a +SDict begin H.S end + 19553 58533 a 0 TeXcolorgray Fv(3.1)p 0 +TeXcolorgray 20966 57820 a +SDict begin H.R end + 20966 57820 a 20966 58533 +a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (subsection.3.1) cvn H.B /ANN pdfmark end + 20966 58533 a 0 TeXcolorgray Fv(.)476 b(If)315 b(this)g(option)i(is)e +(absen)-31 b(t,)327 b(the)315 b(program)h(uses)e(its)h(o)-31 +b(wn)6863 59862 y(default)249 b(parameters,)273 b(or)248 +b(system-wide)g(or)g(user's)f(defaults,)273 b(as)248 +b(explained)h(in)f(Section)p 0 TeXcolorgray 43331 59862 +a +SDict begin H.S end + 43331 59862 a 0 TeXcolorgray Fv(3.1)p 0 TeXcolorgray +44744 59148 a +SDict begin H.R end + 44744 59148 a 44744 59862 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (subsection.3.1) cvn H.B /ANN pdfmark end + 44744 59862 +a 0 TeXcolorgray Fv(.)8524 61190 y(The)496 b(option)i +Fq(-)55 b(d)496 b Fv(selects)g(debugging)i(mo)31 b(de.)874 +b(In)496 b(this)g(mo)31 b(de)497 b(a)f(lot)i(of)e(debugging)6863 +62518 y(messages)369 b(are)g(dump)31 b(ed)370 b(to)g +Fq(stderr)p Fv(.)8524 63847 y(The)417 b(parameter)h Fq(-o)f +Fv(pro)-31 b(vides)417 b(the)g(name)h(of)f(the)h(output)g(\014le.)636 +b(Both)418 b Fq(input_file)6863 65175 y Fv(and)359 b +Fq(output_file)i Fv(can)e(b)31 b(e)359 b(\\-",)j(whic)-31 +b(h)360 b(means)g Fq(stdin)g Fv(for)f(the)g(input)h(and)f +Fq(stdout)h Fv(for)6863 66503 y(the)k(output.)492 b(If)364 +b(the)g(parameter)g Fq(-o)g Fv(is)g(absen)-31 b(t,)366 +b(the)e(program)h(tries)e(to)i(guess)e(the)h(name)p 0 +TeXcolorgray 25405 70071 a(10)p 0 TeXcolorgray eop end +%%Page: 11 11 +TeXDict begin 11 10 bop 0 TeXcolorgray 0 0 a +SDict begin /product where{pop product(Distiller)search{pop pop pop +version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto +closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show +grestore}if}{pop}ifelse}{pop}ifelse}if end + 0 0 a 0 +TeXcolorgray 6752 1660 a +SDict begin H.S end + 6752 1660 a 6752 1660 a +SDict begin H.R end + 6752 +1660 a 6752 1660 a +SDict begin [/View [/XYZ H.V]/Dest (page.11) cvn /DEST pdfmark end + 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray +0 TeXcolorgray 0 TeXcolorgray 6863 6531 a +SDict begin H.S end + 6863 6531 a +6863 6531 a +SDict begin 12 H.A end + 6863 6531 a 6863 6531 a +SDict begin [/View [/XYZ H.V]/Dest (lstlisting.6) cvn /DEST pdfmark +end + 6863 6531 a 6863 +7461 a +SDict begin H.S end + 6863 7461 a 6863 7461 a +SDict begin 12 H.A end + 6863 7461 a 6863 7461 +a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.6.1) cvn /DEST pdfmark +end + 6863 7461 a 58 w Fj(#)6863 8789 y +SDict begin H.S end + 6863 8789 a 6863 +8789 a +SDict begin 12 H.A end + 6863 8789 a 6863 8789 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.6.2) cvn /DEST pdfmark +end + 6863 8789 a 58 w Fj(#)858 +b(M)102 b(a)g(x)g(i)g(m)g(a)g(l)895 b(w)97 b(i)g(d)g(t)g(h)881 +b(a)87 b(n)g(d)885 b(h)100 b(e)g(i)g(g)g(h)g(t)874 b(o)77 +b(f)863 b(t)87 b(h)g(e)889 b(p)103 b(e)g(d)g(i)g(g)g(r)g(e)g(e)881 +b(i)77 b(n)853 b(c)77 b(m)137 b(.)6863 10118 y +SDict begin H.S end + 6863 10118 +a 6863 10118 a +SDict begin 12 H.A end + 6863 10118 a 6863 10118 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.6.3) cvn /DEST pdfmark +end + 6863 10118 a +58 w Fj(#)843 b(S)87 b(e)g(t)878 b(t)93 b(h)g(i)g(s)869 +b(t)77 b(o)834 b(0)f(t)77 b(o)875 b(s)100 b(w)g(i)g(t)g(c)g(h)883 +b(o)87 b(f)g(f)887 b(s)102 b(c)g(a)g(l)g(i)g(n)g(g)6863 +11446 y +SDict begin H.S end + 6863 11446 a 6863 11446 a +SDict begin 12 H.A end + 6863 11446 a 6863 11446 +a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.6.4) cvn /DEST pdfmark +end + 6863 11446 a 58 w Fj(#)6863 12774 y +SDict begin H.S end + 6863 12774 a 6863 +12774 a +SDict begin 12 H.A end + 6863 12774 a 6863 12774 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.6.5) cvn /DEST pdfmark +end + 6863 12774 a 97 w Fq($)97 +b(m)g(a)g(x)g(W)853 b(=)842 b(1)87 b(5)g(;)6863 14103 +y +SDict begin H.S end + 6863 14103 a 6863 14103 a +SDict begin 12 H.A end + 6863 14103 a 6863 14103 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.6.6) cvn /DEST pdfmark +end + +6863 14103 a 97 w Fq($)97 b(m)g(a)g(x)g(H)853 b(=)842 +b(1)87 b(9)g(;)6863 15431 y +SDict begin H.S end + 6863 15431 a 6863 15431 a +SDict begin 12 H.A end + +6863 15431 a 6863 15431 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.6.7) cvn /DEST pdfmark +end + 6863 15431 a 6863 16759 a +SDict begin H.S end + 6863 +16759 a 6863 16759 a +SDict begin 12 H.A end + 6863 16759 a 6863 16759 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.6.8) cvn /DEST pdfmark +end + 6863 16759 +a 58 w Fj(#)6863 18088 y +SDict begin H.S end + 6863 18088 a 6863 18088 a +SDict begin 12 H.A end + 6863 +18088 a 6863 18088 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.6.9) cvn /DEST pdfmark +end + 6863 18088 a 58 w Fj(#)858 b(W)102 +b(h)g(e)g(t)g(h)g(e)g(r)875 b(t)77 b(o)876 b(r)100 b(o)g(t)g(a)g(t)g(e) +883 b(t)87 b(h)g(e)878 b(p)93 b(a)g(g)g(e)152 b(.)1540 +b(T)87 b(h)g(e)885 b(v)100 b(a)g(l)g(u)g(e)g(s)883 b(a)87 +b(r)g(e)6863 19416 y +SDict begin H.S end + 6863 19416 a 6863 19416 a +SDict begin 12 H.A end + 6863 19416 +a 6863 19416 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.6.10) cvn /DEST pdfmark +end + 6863 19416 a 58 w Fj(#)833 b(')126 b(y)87 +b(e)g(s)181 b(')93 b(,)822 b(')116 b(n)77 b(o)156 b(')824 +b(a)87 b(n)g(d)863 b(')135 b(m)97 b(a)g(y)g(b)g(e)175 +b(')6863 20744 y +SDict begin H.S end + 6863 20744 a 6863 20744 a +SDict begin 12 H.A end + 6863 20744 +a 6863 20744 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.6.11) cvn /DEST pdfmark +end + 6863 20744 a 58 w Fj(#)833 b(I)77 b(f)854 +b(')135 b(m)97 b(a)g(y)g(b)g(e)175 b(')814 b(i)77 b(s)862 +b(c)87 b(h)g(o)g(s)g(e)g(n)235 b(,)843 b(t)87 b(h)g(e)888 +b(p)103 b(e)g(d)g(i)g(g)g(r)g(e)g(e)882 b(i)77 b(s)877 +b(r)102 b(o)g(t)g(a)g(t)g(e)g(d)6863 22073 y +SDict begin H.S end + 6863 22073 +a 6863 22073 a +SDict begin 12 H.A end + 6863 22073 a 6863 22073 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.6.12) cvn /DEST pdfmark +end + 6863 22073 a +58 w Fj(#)833 b(i)77 b(f)869 b(t)93 b(h)g(i)g(s)894 b(p)103 +b(r)g(o)g(v)g(i)g(d)g(e)g(s)904 b(b)100 b(e)g(t)g(t)g(e)g(r)898 +b(s)102 b(c)g(a)g(l)g(i)g(n)g(g)6863 23401 y +SDict begin H.S end + 6863 23401 +a 6863 23401 a +SDict begin 12 H.A end + 6863 23401 a 6863 23401 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.6.13) cvn /DEST pdfmark +end + 6863 23401 a +58 w Fj(#)6863 24729 y +SDict begin H.S end + 6863 24729 a 6863 24729 a +SDict begin 12 H.A end + 6863 +24729 a 6863 24729 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.6.14) cvn /DEST pdfmark +end + 6863 24729 a 102 w Fq($)g(r)g(o)g(t)g(a)g(t)g(e) +856 b(=)833 b(')136 b(m)97 b(a)g(y)g(b)g(e)175 b(')97 +b(;)p 0 TeXcolorgray 0 TeXcolorgray 11076 27165 a Fv(Listing)370 +b(6:)493 b(Con\014guration)372 b(File:)493 b(Cho)31 b(osing)371 +b(Scaling)g(and)e(Rotation)p 0 TeXcolorgray 0 TeXcolorgray +0 TeXcolorgray 6863 32472 a(of)401 b(the)g(output)h(\014le)f(from)g +(the)g(name)g(of)g(the)g(input)h(\014le.)587 b(If)400 +b(the)h(input)g(\014le)g(is)g Fq(foo.csv)q Fv(,)6863 +33800 y(the)410 b(output)i(\014le)e(will)i(b)31 b(e)409 +b Fq(foo.tex)q Fv(.)615 b(On)410 b(the)g(other)g(hand,)421 +b(if)411 b(the)f(input)h(\014le)f(is)g Fq(stdin)p Fv(,)6863 +35129 y(the)370 b(output)g(\014le)f(is)h Fq(stdout)p +Fv(.)8524 36457 y(Usually)495 b(p)31 b(edigrees)494 b(are)g(built)h +(starting)g(from)g(the)f(proband)p 0 TeXcolorgray 35383 +36457 a +SDict begin H.S end + 35383 36457 a -402 x Fp(5)35881 36457 y +SDict begin 12 H.L end + 35881 +36457 a 35881 36457 a +SDict begin [/Subtype /Link/Dest (Hfootnote.5) cvn/H /I/Border [0 0 +0]BorderArrayPatch/Color [1 0 0] H.B /ANN pdfmark end + 35881 36457 a 0 TeXcolorgray Fv(.)867 +b(Only)494 b(the)h(p)31 b(eople)6863 37785 y(that)485 +b(share)e(genes)g(with)i(the)f(proband,)512 b(are)484 +b(sho)-31 b(wn)484 b(on)f(the)h(p)31 b(edigree.)836 b(Ho)-31 +b(w)g(ev)g(er,)514 b(in)6863 39114 y(some)425 b(cases,)438 +b(for)424 b(example)i(when)f(there)f(is)g(no)g(proband,)439 +b(or)424 b(where)g(there)h(are)f(sev)-31 b(eral)6863 +40442 y(probands,)509 b(it)481 b(is)f(neccessary)g(to)h(o)-31 +b(v)g(erride)481 b(this)g(default)g(and)g(tell)h(the)e(program)i(from) +6863 41771 y(whic)-31 b(h)491 b(p)31 b(erson)489 b(to)h(start.)855 +b(This)490 b(is)g(done)g(using)g(the)g(option)i Fq(-s)p +Fv(.)854 b(If)490 b(it)h(is)e(presen)-31 b(t,)520 b(it)6863 +43099 y(m)-31 b(ust)399 b(b)31 b(e)398 b(follo)-31 b(w)g(ed)402 +b(b)-31 b(y)398 b(the)h(Id)f(of)h(a)g(p)31 b(erson)398 +b(in)g(the)h(data)h(\014le)e(\(see)h(Section)p 0 TeXcolorgray +39980 43099 a +SDict begin H.S end + 39980 43099 a 0 TeXcolorgray Fv(4.2)p 0 +TeXcolorgray 41393 42385 a +SDict begin H.R end + 41393 42385 a 41393 43099 +a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (subsection.4.2) cvn H.B /ANN pdfmark end + 41393 43099 a 0 TeXcolorgray 399 w Fv(for)g(the)6863 +44427 y(discussion)369 b(of)h(Id\).)8524 45756 y(The)401 +b(option)h Fq(-v)g Fv(is)e(sp)31 b(ecial.)589 b(The)401 +b(in)-31 b(v)g(o)31 b(cation)404 b Fq(pedigree)583 b(-v)401 +b Fv(outputs)g(the)h(v)-31 b(ersion)6863 47084 y(and)370 +b(license)f(information.)6863 48633 y +SDict begin H.S end + 6863 48633 a 6863 +48633 a +SDict begin 12 H.A end + 6863 48633 a 6863 48633 a +SDict begin [/View [/XYZ H.V]/Dest (subsection.4.2) cvn /DEST pdfmark +end + 6863 48633 a 1550 x +Ft(4.2)1495 b(Data)500 b(File)6863 52226 y Fv(The)299 +b(input)g(for)f(the)h(program)g(is)f(a)h(separated)g(v)-61 +b(alues)298 b(\014le.)470 b(Usually)299 b(suc)-31 b(h)298 +b(\014les)h(are)f(called)6863 53554 y(CSV)456 b(for)g(\\comma)h +(separated)f(v)-61 b(alues".)753 b(Ho)-31 b(w)g(ev)g(er,)479 +b(this)456 b(program)g(uses)f(the)g(v)-31 b(ertical)6863 +54883 y(bar)433 b(\(\\pip)31 b(e"\))434 b Fq(|)f Fv(as)f(a)h +(separator.)684 b(Eac)-31 b(h)433 b(line)h(of)f(this)g(\014le)g(is)f(a) +h Fn(r)-57 b(e)g(c)g(or)g(d)p Fv(.)684 b(The)433 b(lines)g(are)6863 +56211 y(separated)277 b(b)-31 b(y)276 b(pip)31 b(es)276 +b(in)-31 b(to)278 b Fn(\014elds.)461 b Fv(Most)276 b(SQL)g(programs)h +(pro)31 b(duce)276 b(suc)-31 b(h)276 b(\014les)g(b)-31 +b(y)276 b(default.)6863 57539 y(Spreadsheet)392 b(programs)h(will)h +(mak)-31 b(e)393 b(them)g(if)g(y)-31 b(ou)392 b(c)-31 +b(ho)31 b(ose)393 b(\\Sa)-31 b(v)g(e)394 b(As.)184 b(.)h(.)g(")562 +b(option,)400 b(and)6863 58868 y(select)471 b Fq(|)f +Fv(as)g(the)g(\014eld)h(separator,)496 b(and)470 b(empt)-31 +b(y)472 b(text)f(delimiter.)797 b(W)-92 b(e)470 b(sometimes)h(will)6863 +60196 y(call)335 b(the)f(records)e(\\ro)-31 b(ws")335 +b(and)f(the)g(\014elds)f(\\columns")i(to)g(use)e(the)h(familiar)i +(spreadsheet)6863 61524 y(metaphor.)631 b(Normally)417 +b(eac)-31 b(h)415 b(ro)-31 b(w)415 b(corresp)31 b(onds)414 +b(to)h(a)g(p)31 b(erson)414 b(in)h(a)g(p)31 b(edigree.)629 +b(W)-92 b(e)414 b(will)6863 62853 y(call)371 b(this)e(p)31 +b(erson)369 b Fn(the)395 b(curr)-57 b(ent)397 b(p)-57 +b(erson)454 b Fv(when)369 b(describing)h(the)f(\014elds.)p +0 TeXcolorgray 6863 63776 15276 45 v 8096 64492 a Fm(5)p +0 TeXcolorgray 8557 64805 a +SDict begin H.S end + 8557 64805 a 8557 64805 a +SDict begin H.R end + +8557 64805 a 8557 64805 a +SDict begin [/View [/XYZ H.V]/Dest (Hfootnote.5) cvn /DEST pdfmark +end + 8557 64805 a 0 TeXcolorgray +Fl(The)341 b(proband)h(is)h(the)f(\014rst)g(p)26 b(erson)342 +b(among)h(the)f(relativ)-26 b(es)343 b(who)f(came)h(to)g(a)f +(geneticist;)359 b(he)342 b(or)g(she)6863 65856 y(is)314 +b(the)g(primary)f(patien)-26 b(t.)p 0 TeXcolorgray 0 +TeXcolorgray 25405 70071 a Fv(11)p 0 TeXcolorgray eop +end +%%Page: 12 12 +TeXDict begin 12 11 bop 0 TeXcolorgray 0 0 a +SDict begin /product where{pop product(Distiller)search{pop pop pop +version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto +closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show +grestore}if}{pop}ifelse}{pop}ifelse}if end + 0 0 a 0 +TeXcolorgray 6752 1660 a +SDict begin H.S end + 6752 1660 a 6752 1660 a +SDict begin H.R end + 6752 +1660 a 6752 1660 a +SDict begin [/View [/XYZ H.V]/Dest (page.12) cvn /DEST pdfmark end + 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray +0 TeXcolorgray 8524 6974 a Fv(The)355 b(width)h(of)g(the)f(\014elds)h +(ma)-31 b(y)356 b(not)g(b)31 b(e)355 b(the)g(same)g(in)h(all)g(ro)-31 +b(ws)356 b(\(or,)j(in)c(other)g(w)-31 b(ords,)6863 8302 +y(the)294 b(pip)31 b(es)292 b Fq(|)h Fv(ma)-31 b(y)295 +b(b)31 b(e)292 b(disaligned\).)470 b(W)-92 b(e)292 b(mak)-31 +b(e)295 b(them)f(aligned)g(in)g(the)f(examples)h(included)6863 +9631 y(in)370 b(this)f(man)-31 b(ual)371 b(just)f(to)g(mak)-31 +b(e)370 b(the)f(text)i(more)e(readable.)8524 10959 y(The)544 +b(\014rst)g(line)h(of)g(the)g(data)h(\014le)e(con)-31 +b(tains)546 b(the)f(names)g(of)g(the)g(\014elds)f(\(\\column)6863 +12287 y(headers"\).)1043 b(The)553 b(\014elds)g(in)f(the)h(subsequen) +-31 b(t)553 b(lines)g(m)-31 b(ust)553 b(matc)-31 b(h)554 +b(the)f(order)f(of)h(the)6863 13616 y(headers.)651 b(An)422 +b(empt)-31 b(y)423 b(\014eld)f(m)-31 b(ust)423 b(b)31 +b(e)421 b(still)j(included)e(\(as)h Fq(||)f Fv(or)g Fq(|)581 +b(|)p Fv(\).)651 b(Otherwise)423 b(the)6863 14944 y(order)358 +b(of)h(columns)h(is)e(arbitrary)h(as)g(long)g(as)g(it)g(is)g(the)g +(same)f(for)h(all)h(ro)-31 b(ws)359 b(\(i.e.)490 b(matc)-31 +b(hes)6863 16272 y(the)370 b(order)e(of)i(\\column)h(headers")e(in)g +(the)h(\014rst)e(line\).)8524 17601 y(All)404 b(\014elds)f(but)g +Fq(Id)h Fv(are)f(optional.)597 b(If)403 b(the)h(v)-61 +b(alue)403 b(is)h(empt)-31 b(y)404 b(for)f(all)i(ro)-31 +b(ws,)412 b(the)404 b(corre-)6863 18929 y(sp)31 b(onding)357 +b(column)g(can)f(b)31 b(e)355 b(dropp)31 b(ed.)488 b(If)356 +b(applicable,)361 b(the)356 b(default)i(v)-61 b(alues)356 +b(for)g(this)g(\014eld)6863 20257 y(will)371 b(b)31 b(e)369 +b(substituted)h(b)-31 b(y)369 b(the)h(program.)8524 21586 +y(On)i(the)h(other)g(hand)g(the)g(data)h(\014le)f(can)g(include)g(an) +-31 b(y)374 b(additional)i(columns)d(as)g(long)6863 22914 +y(as)395 b(their)g(names)g(do)g(not)h(clash)f(with)h(the)g(names)f +(listed)h(b)31 b(elo)-31 b(w)396 b(and)f(the)g(sp)31 +b(ecial)395 b(name)6863 24242 y Fq(AgeAtDeath)r Fv(.)580 +b(These)398 b(additional)k(columns)d(can)g(b)31 b(e)398 +b(included)h(in)g(the)g(c)-31 b(hart)399 b(or)f(legend)6863 +25571 y(as)369 b(describ)31 b(ed)369 b(in)g(Section)p +0 TeXcolorgray 18286 25571 a +SDict begin H.S end + 18286 25571 a 0 TeXcolorgray +Fv(3.4)p 0 TeXcolorgray 19699 24857 a +SDict begin H.R end + 19699 24857 a 19699 +25571 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (subsection.3.4) cvn H.B /ANN pdfmark end + 19699 25571 a 0 TeXcolorgray Fv(.)8524 26899 +y(Here)f(is)h(the)h(list)g(of)g(columns)g(and)f(explanation)j(of)e +(their)f(meaning:)p 0 TeXcolorgray 6863 29015 a Fs(Id:)p +0 TeXcolorgray 553 w Fv(Eac)-31 b(h)377 b(line)g(\(including)h(the)e +(sp)31 b(ecial)376 b(lines)g(describ)31 b(ed)376 b(b)31 +b(elo)-31 b(w\))377 b(m)-31 b(ust)377 b(ha)-31 b(v)g(e)376 +b(a)h(unique)9631 30343 y Fq(Id)p Fv(.)486 b(The)349 +b Fq(Id)g Fv(ma)-31 b(y)350 b(con)-31 b(tain)351 b(only)f(Latin)g +(letters)f(and)g(n)-31 b(um)g(b)31 b(ers,)353 b(and)c(start)h(with)g(a) +9631 31671 y(letter.)p 0 TeXcolorgray 6863 33836 a Fs(Name:)p +0 TeXcolorgray 554 w Fv(The)418 b(name)g(of)h(the)f(p)31 +b(erson)417 b(describ)31 b(ed)417 b(in)h(the)h(curren)-31 +b(t)417 b(ro)-31 b(w.)640 b(There)417 b(are)h(also)9631 +35164 y Fn(sp)-57 b(e)g(cial)290 b(names)345 b Fv(when)254 +b(the)g(curren)-31 b(t)254 b(ro)-31 b(w)254 b(describ)31 +b(es)253 b(ab)31 b(ortions)255 b(or)f(infertilit)-31 +b(y)-92 b(.)457 b(They)9631 36493 y(are)311 b(describ)31 +b(ed)311 b(b)31 b(elo)-31 b(w.)475 b(The)312 b(names)g(should)g(not)h +(con)-31 b(tain)314 b(\\sp)31 b(ecial)313 b(sym)-31 b(b)31 +b(ols")313 b(lik)-31 b(e)9631 37821 y(#,)370 b($,)f(\045,)p +14125 37821 333 45 v 769 w(,)g(^,)h(etc.)p 0 TeXcolorgray +6863 39986 a Fs(Sex:)p 0 TeXcolorgray 554 w Fv(The)305 +b(gender)g(of)g(a)g(p)31 b(erson.)471 b(This)305 b(column)h(ma)-31 +b(y)306 b(ha)-31 b(v)g(e)306 b(one)f(of)h(t)-31 b(w)g(o)306 +b(v)-61 b(alues:)461 b Fq(male)305 b Fv(or)9631 41314 +y Fq(female)p Fv(.)491 b(The)365 b(empt)-31 b(y)366 b(v)-61 +b(alue)365 b(corresp)31 b(onds)363 b(to)j(a)f(p)31 b(erson)363 +b(with)j(unkno)-31 b(wn)366 b(gender.)p 0 TeXcolorgray +6863 43479 a Fs(DoB:)p 0 TeXcolorgray 554 w Fv(The)384 +b(date)g(of)g(birth)h(for)e(the)h(curren)-31 b(t)384 +b(p)31 b(erson.)535 b(The)384 b(format)i(is)e Fq(YYYY.MM.DD)q +Fv(.)536 b(If)9631 44807 y(the)459 b(date)g(of)g(birth)g(is)g(not)g +(kno)-31 b(wn,)483 b(the)459 b(\014eld)g(ma)-31 b(y)460 +b(b)31 b(e)458 b(empt)-31 b(y)460 b(or)f(the)g(k)-31 +b(eyw)g(ord)9631 46136 y Fq(unknown)370 b Fv(ma)-31 b(y)370 +b(b)31 b(e)369 b(used.)p 0 TeXcolorgray 6863 48300 a +Fs(DoD:)p 0 TeXcolorgray 554 w Fv(The)486 b(date)h(of)f(death)h(for)f +(curren)-31 b(t)485 b(p)31 b(erson.)842 b(The)486 b(format)h(is)f(the)g +(same)g(as)g(for)9631 49629 y Fq(DoB)p Fv(:)477 b Fq(YYYY.MM.DD)q +Fv(.)482 b(If)337 b(this)h(\014eld)f(is)g(empt)-31 b(y)-92 +b(,)345 b(the)338 b(corresp)31 b(onding)337 b(p)31 b(erson)337 +b(is)g(aliv)-31 b(e.)9631 50957 y(F)-92 b(or)503 b(deceased)i(p)31 +b(ersons)503 b(with)i(an)g(unkno)-31 b(wn)506 b(date)f(of)g(death)g +(use)f(the)h(k)-31 b(eyw)g(ord)9631 52285 y Fq(unknown)q +Fv(.)655 b(Note)425 b(the)f(subtle)g(di\013erence)f(b)31 +b(et)-31 b(w)g(een)425 b(the)f(\014elds)f Fq(DoB)h Fv(and)g +Fq(DoD)p Fv(:)602 b(an)9631 53614 y(empt)-31 b(y)291 +b(v)-61 b(alue)291 b(for)g Fq(DoB)f Fv(is)h(means)f(\\unkno)-31 +b(wn)292 b(birth)f(date")h(while)f(for)g Fq(DoD)g Fv(it)g(means)9631 +54942 y(that)370 b(there)f(is)g(no)h(date)f(of)h(death)g(at)g(all.)p +0 TeXcolorgray 6863 57107 a Fs(Mother:)p 0 TeXcolorgray +555 w Fv(The)g Fq(Id)f Fv(of)h(the)f(mother)h(of)g(the)f(p)31 +b(erson)368 b(\(or)i(empt)-31 b(y\).)p 0 TeXcolorgray +6863 59272 a Fs(F)-106 b(ather:)p 0 TeXcolorgray 554 +w Fv(The)369 b Fq(Id)h Fv(of)f(the)h(father)g(of)f(the)h(p)31 +b(erson)368 b(\(or)i(empt)-31 b(y\).)p 0 TeXcolorgray +6863 61436 a Fs(Proband)p 0 TeXcolorgray 555 w Fv(This)417 +b(\014eld)f(can)h(b)31 b(e)416 b(either)g Fq(yes)h Fv(for)g(the)f +(probands,)429 b(or)416 b(empt)-31 b(y)417 b(\(or)g Fq(no)p +Fv(\))g(for)9631 62765 y(other)250 b(p)31 b(ersons.)452 +b(Note)251 b(that)g(if)g(a)f(p)31 b(edigree)250 b(has)g(no)g(probands)g +(or)g(sev)-31 b(eral)251 b(probands,)9631 64093 y(the)281 +b(program)g(do)31 b(es)281 b(not)g(kno)-31 b(w,)300 b(from)282 +b(whic)-31 b(h)281 b(no)31 b(de)281 b(to)h(start)f(the)g(p)31 +b(edigree.)463 b(There-)9631 65421 y(fore)348 b(in)h(this)g(case)g(the) +g(option)h Fq(-s)f Fv(m)-31 b(ust)349 b(b)31 b(e)348 +b(used)g(to)h(explicitly)j(set)c(the)h Fq(Id)g Fv(of)g(the)9631 +66750 y(starting)370 b(c)-31 b(hart)370 b(no)31 b(de)369 +b(\(see)g(Section)p 0 TeXcolorgray 25392 66750 a +SDict begin H.S end + 25392 +66750 a 0 TeXcolorgray Fv(4.1)p 0 TeXcolorgray 26805 +66036 a +SDict begin H.R end + 26805 66036 a 26805 66750 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (subsection.4.1) cvn H.B /ANN pdfmark end + 26805 66750 a 0 TeXcolorgray +Fv(\).)p 0 TeXcolorgray 25405 70071 a(12)p 0 TeXcolorgray +eop end +%%Page: 13 13 +TeXDict begin 13 12 bop 0 TeXcolorgray 0 0 a +SDict begin /product where{pop product(Distiller)search{pop pop pop +version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto +closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show +grestore}if}{pop}ifelse}{pop}ifelse}if end + 0 0 a 0 +TeXcolorgray 6752 1660 a +SDict begin H.S end + 6752 1660 a 6752 1660 a +SDict begin H.R end + 6752 +1660 a 6752 1660 a +SDict begin [/View [/XYZ H.V]/Dest (page.13) cvn /DEST pdfmark end + 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray +0 TeXcolorgray 0 TeXcolorgray 6863 6974 a Fs(Condition:)p +0 TeXcolorgray 555 w Fv(This)246 b(column)i(can)e(ha)-31 +b(v)g(e)247 b(the)g(v)-61 b(alues)246 b Fq(normal)q Fv(,)271 +b Fq(obligatory)q Fv(,)g Fq(asymptomatic)9631 8302 y +Fv(or)369 b Fq(affected)q Fv(.)492 b(If)369 b(it)h(is)f(empt)-31 +b(y)-92 b(,)371 b(the)e(default)i(v)-61 b(alue)370 b +Fq(normal)f Fv(is)h(assumed.)p 0 TeXcolorgray 6863 10516 +a Fs(Commen)-35 b(t:)p 0 TeXcolorgray 554 w Fv(A)369 +b(commen)-31 b(t)371 b(ab)31 b(out)371 b(the)e(p)31 b(erson.)p +0 TeXcolorgray 6863 12730 a Fs(Twins:)p 0 TeXcolorgray +553 w Fv(If)289 b(the)g(curren)-31 b(t)289 b(p)31 b(erson)288 +b(has)h(t)-31 b(wins,)307 b(they)290 b(are)f(listed)h(in)f(this)g +(column)i(separated)9631 14058 y(b)-31 b(y)369 b(spaces)g(and)g(\(or\)) +h(commas.)494 b(See)369 b(Section)p 0 TeXcolorgray 29454 +14058 a +SDict begin H.S end + 29454 14058 a 0 TeXcolorgray Fv(4.3)p 0 TeXcolorgray +30867 13345 a +SDict begin H.R end + 30867 13345 a 30867 14058 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (subsection.4.3) cvn H.B /ANN pdfmark end + 30867 14058 +a 0 TeXcolorgray 371 w Fv(for)g(more)h(details.)p 0 TeXcolorgray +6863 16272 a Fs(T)-35 b(yp)35 b(e:)p 0 TeXcolorgray 553 +w Fv(This)360 b(column)g(is)f(used)g(in)g(certain)h(sp)31 +b(ecial)359 b(cases.)489 b(F)-92 b(or)358 b(ab)31 b(ortions)361 +b(it)e(sho)-31 b(ws)360 b(the)9631 17601 y(t)-31 b(yp)31 +b(e)459 b(of)h(the)g(ab)31 b(ortion)461 b(\(Section)p +0 TeXcolorgray 24506 17601 a +SDict begin H.S end + 24506 17601 a 0 TeXcolorgray +Fv(4.4)p 0 TeXcolorgray 25919 16887 a +SDict begin H.R end + 25919 16887 a 25919 +17601 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (subsection.4.4) cvn H.B /ANN pdfmark end + 25919 17601 a 0 TeXcolorgray Fv(\),)484 b(for)459 +b(c)-31 b(hildless)461 b(p)31 b(eople)459 b(and)h(marriages)g(it)9631 +18929 y(sho)-31 b(ws)412 b(the)g(t)-31 b(yp)31 b(e)413 +b(of)f(c)-31 b(hildnessness)412 b(\(Section)p 0 TeXcolorgray +29666 18929 a +SDict begin H.S end + 29666 18929 a 0 TeXcolorgray Fv(4.5)p 0 +TeXcolorgray 31079 18216 a +SDict begin H.R end + 31079 18216 a 31079 18929 +a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (subsection.4.5) cvn H.B /ANN pdfmark end + 31079 18929 a 0 TeXcolorgray Fv(\),)425 b(and)412 b(for)g(t)-31 +b(wins)414 b(it)e(sho)-31 b(ws)413 b(the)9631 20257 y(t)-31 +b(yp)31 b(e)369 b(of)h(t)-31 b(wins)370 b(\(Section)p +0 TeXcolorgray 20614 20257 a +SDict begin H.S end + 20614 20257 a 0 TeXcolorgray +Fv(4.3)p 0 TeXcolorgray 22027 19544 a +SDict begin H.R end + 22027 19544 a 22027 +20257 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (subsection.4.3) cvn H.B /ANN pdfmark end + 22027 20257 a 0 TeXcolorgray Fv(\).)p 0 TeXcolorgray +6863 22471 a Fs(SortOrder:)p 0 TeXcolorgray 556 w Fv(This)431 +b(column)h(is)e(used)g(when)h(the)g(algorithm)i(for)e(sorting)g +(siblings)h(and)9631 23800 y(unions)386 b(giv)-31 b(es)387 +b(a)f(wrong)h(result,)k(and)386 b(a)g(man)-31 b(ual)388 +b(correction)f(is)f(needed.)543 b(See)385 b(Sec-)9631 +25128 y(tion)p 0 TeXcolorgray 11906 25128 a +SDict begin H.S end + 11906 25128 +a 0 TeXcolorgray Fv(4.6)p 0 TeXcolorgray 13319 24415 +a +SDict begin H.R end + 13319 24415 a 13319 25128 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (subsection.4.6) cvn H.B /ANN pdfmark end + 13319 25128 a 0 TeXcolorgray +370 w Fv(for)370 b(the)f(explanation)j(and)e(examples.)8524 +27342 y(Examples)f(of)g(data)g(\014les)f(\(in)g(English)i(and)e +(Russian\))g(are)g(sho)-31 b(wn)369 b(in)f(Listing)p +0 TeXcolorgray 42164 27342 a +SDict begin H.S end + 42164 27342 a 0 TeXcolorgray +Fv(7)p 0 TeXcolorgray 42717 26629 a +SDict begin H.R end + 42717 26629 a 42717 +27342 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (lstlisting.7) cvn H.B /ANN pdfmark end + 42717 27342 a 0 TeXcolorgray 368 w Fv(\(the)6863 +28670 y(Russian)h(k)-31 b(eyw)g(ords)370 b(are)f(discussed)g(in)g +(Section)p 0 TeXcolorgray 27646 28670 a +SDict begin H.S end + 27646 28670 a +0 TeXcolorgray Fv(4.8)p 0 TeXcolorgray 29059 27957 a +SDict begin H.R end + +29059 27957 a 29059 28670 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (subsection.4.8) cvn H.B /ANN pdfmark end + 29059 28670 a 0 TeXcolorgray +Fv(\).)6863 30496 y +SDict begin H.S end + 6863 30496 a 6863 30496 a +SDict begin 12 H.A end + 6863 30496 +a 6863 30496 a +SDict begin [/View [/XYZ H.V]/Dest (subsection.4.3) cvn /DEST pdfmark +end + 6863 30496 a 1273 x Ft(4.3)1495 b(Twins)6863 +33812 y Fv(The)329 b(column)i Fq(Twins)e Fv(\(see)g(Section)p +0 TeXcolorgray 22181 33812 a +SDict begin H.S end + 22181 33812 a 0 TeXcolorgray +Fv(4.3)p 0 TeXcolorgray 23594 33099 a +SDict begin H.R end + 23594 33099 a 23594 +33812 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (subsection.4.3) cvn H.B /ANN pdfmark end + 23594 33812 a 0 TeXcolorgray Fv(\))i(lists)e(all)i +Fq(Id)p Fv(s)d(of)i(all)g(t)-31 b(wins)330 b(of)g(the)f(giv)-31 +b(en)330 b(p)31 b(erson.)6863 35141 y(The)376 b(column)i +Fq(Type)e Fv(can)g(b)31 b(e)376 b(used)f(to)i(sho)-31 +b(w)377 b(the)f(t)-31 b(yp)31 b(e)377 b(of)f(the)h(t)-31 +b(wins.)514 b(The)376 b(empt)-31 b(y)378 b(v)-61 b(alue)6863 +36469 y(means)249 b(p)31 b(olyzygotic)251 b(t)-31 b(wins,)274 +b Fq(monozygotic)249 b Fv(means)g(monozygotic)j(t)-31 +b(wins,)274 b(and)248 b Fq(qzygotic)6863 37797 y Fv(is)318 +b(used)g(in)g(the)h(case)f(when)g(the)g(t)-31 b(yp)31 +b(e)319 b(of)g(t)-31 b(wins)319 b(is)f(under)g(doubt.)476 +b(An)318 b(example)i(of)e(a)h(data)6863 39126 y(\014le)264 +b(with)h(t)-31 b(wins)264 b(is)g(sho)-31 b(wn)264 b(on)g(Listing)p +0 TeXcolorgray 23076 39126 a +SDict begin H.S end + 23076 39126 a 0 TeXcolorgray +Fv(8)p 0 TeXcolorgray 23629 38412 a +SDict begin H.R end + 23629 38412 a 23629 +39126 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (lstlisting.8) cvn H.B /ANN pdfmark end + 23629 39126 a 0 TeXcolorgray Fv(,)285 b(and)264 +b(the)g(corresp)31 b(onding)263 b(p)31 b(edigree)264 +b(on)g(Figure)p 0 TeXcolorgray 44192 39126 a +SDict begin H.S end + 44192 39126 +a 0 TeXcolorgray Fv(3)p 0 TeXcolorgray 44745 38412 a +SDict begin H.R end + +44745 38412 a 44745 39126 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (figure.3) cvn H.B /ANN pdfmark end + 44745 39126 a 0 TeXcolorgray +Fv(.)6863 40890 y +SDict begin H.S end + 6863 40890 a 6863 40890 a +SDict begin 12 H.A end + 6863 40890 +a 6863 40890 a +SDict begin [/View [/XYZ H.V]/Dest (subsection.4.4) cvn /DEST pdfmark +end + 6863 40890 a 1334 x Ft(4.4)1495 b(Ab)42 +b(ortions)6863 44268 y Fv(Ab)31 b(orted)362 b(pregnancies)g(are)f +(describ)31 b(ed)360 b(b)-31 b(y)362 b(a)g(sp)31 b(ecial)362 +b(en)-31 b(try)362 b(in)f(the)h(data)h(\014le.)490 b(The)362 +b(\014eld)6863 45596 y Fq(Name)515 b Fv(has)e(the)i(v)-61 +b(alue)514 b Fq(#abortion)r Fv(;)586 b(the)514 b(sym)-31 +b(b)31 b(ol)516 b Fq(#)e Fv(is)f(used)h(to)h(sho)-31 +b(w)514 b(that)h(this)g(is)f(a)6863 46924 y(sp)31 b(ecial)371 +b(v)-61 b(alue.)495 b(The)370 b(columns)h Fq(Sex)p Fv(,)f +Fq(DoB)q Fv(,)g Fq(Mother)q Fv(,)g Fq(Father)h Fv(and)f +Fq(Condition)h Fv(ha)-31 b(v)g(e)371 b(the)6863 48253 +y(usual)353 b(meaning.)489 b(The)353 b(sp)31 b(ecial)353 +b(column)h Fq(Type)f Fv(is)f(either)h(empt)-31 b(y)354 +b(or)e(b)31 b(e)352 b(equal)i(to)f Fq(sab)g Fv(for)6863 +49581 y(self-ab)31 b(ortions.)6863 51130 y +SDict begin H.S end + 6863 51130 +a 6863 51130 a +SDict begin 12 H.A end + 6863 51130 a 6863 51130 a +SDict begin [/View [/XYZ H.V]/Dest (subsection.4.5) cvn /DEST pdfmark +end + 6863 51130 a +1550 x Ft(4.5)1495 b(Childlessness)501 b(and)e(Infertilit)-42 +b(y)6863 54723 y Fv(Childlessness)374 b(is)f(can)h(b)31 +b(e)372 b(a)i(prop)31 b(ert)-31 b(y)373 b(of)h(a)g(p)31 +b(erson)373 b(or)g(a)g(union)h(b)31 b(et)-31 b(w)g(een)375 +b(t)-31 b(w)g(o)375 b(p)31 b(ersons.)6863 56051 y(Therefore)364 +b(in)h(this)f(implemen)-31 b(tation)369 b(w)-31 b(e)365 +b(use)e(a)i(sp)31 b(ecial)365 b(ro)-31 b(w)364 b(rather)g(than)h(a)g +(column)g(to)6863 57380 y(rep)31 b(ort)438 b(it.)702 +b(As)438 b(other)h(ro)-31 b(ws,)457 b(this)439 b(one)g(has)f(a)h +(unique)g Fq(Id)p Fv(.)701 b(The)439 b Fq(Name)g Fv(column)h(should) +6863 58708 y(ha)-31 b(v)g(e)483 b(a)e(sp)31 b(ecial)482 +b(en)-31 b(try)482 b Fq(#childless)q Fv(.)829 b(Lik)-31 +b(e)482 b Fq(#abortion)h Fv(\(Section)p 0 TeXcolorgray +36886 58708 a +SDict begin H.S end + 36886 58708 a 0 TeXcolorgray Fv(4.4)p 0 +TeXcolorgray 38299 57995 a +SDict begin H.R end + 38299 57995 a 38299 58708 +a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (subsection.4.4) cvn H.B /ANN pdfmark end + 38299 58708 a 0 TeXcolorgray Fv(\),)512 b(this)481 +b(sp)31 b(ecial)6863 60036 y(name)439 b(starts)e(with)i +Fq(#)f Fv(to)g(distinguish)h(it)g(from)f(\\real")h(names.)698 +b(There)438 b(are)f(four)h(other)6863 61365 y(columns)370 +b(that)h(ha)-31 b(v)g(e)370 b(meaning)h(for)e(this)g(ro)-31 +b(w:)p 0 TeXcolorgray 6863 63579 a Fs(Mother:)p 0 TeXcolorgray +555 w Fv(The)370 b Fq(Id)f Fv(of)h(the)f(c)-31 b(hildless)370 +b(female.)p 0 TeXcolorgray 25405 70071 a(13)p 0 TeXcolorgray +eop end +%%Page: 14 14 +TeXDict begin 14 13 bop 0 TeXcolorgray 0 0 a +SDict begin /product where{pop product(Distiller)search{pop pop pop +version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto +closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show +grestore}if}{pop}ifelse}{pop}ifelse}if end + 0 0 a 0 +TeXcolorgray 6752 1660 a +SDict begin H.S end + 6752 1660 a 6752 1660 a +SDict begin H.R end + 6752 +1660 a 6752 1660 a +SDict begin [/View [/XYZ H.V]/Dest (page.14) cvn /DEST pdfmark end + 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray +0 TeXcolorgray 0 TeXcolorgray 6863 6531 a +SDict begin H.S end + 6863 6531 a +6863 6531 a +SDict begin 12 H.A end + 6863 6531 a 6863 6531 a +SDict begin [/View [/XYZ H.V]/Dest (lstlisting.7) cvn /DEST pdfmark +end + 6863 6531 a 6863 +63816 a +SDict begin H.S end + 6863 63816 a 6863 63816 a +SDict begin 12 H.A end + 6863 63816 a 6863 63816 +a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.7.1) cvn /DEST pdfmark +end + 6863 63816 a 19884 63816 a + gsave currentpoint currentpoint translate 90 neg rotate neg exch neg +exch translate + 19884 63816 a -12328 x Fw(Id)523 +b(|Name)6276 b(|Sex)1570 b(|DoB)3661 b(|)523 b(DoD)3138 +b(|Mother|Father|Proband|Condition)524 b(|Comment)19884 +52705 y(P)1046 b(|John)523 b(Smith)3138 b(|male)1047 +b(|1970/02/05|)5230 b(|M1)2093 b(|F1)f(|)523 b(yes)1569 +b(|)523 b(affected|Evaluated)h(2005/12/01)19884 53923 +y(M1)f(|Mary)g(Smith)3138 b(|female|1940/02/05|)5231 +b(|GM2)1570 b(|GF2)f(|)3661 b(|)523 b(normal)1046 b(|)19884 +55140 y(F1)523 b(|Bill)g(Smith)3138 b(|male)1047 b(|1938/04/03|)5230 +b(|GM1)1570 b(|)523 b(GF1)1046 b(|)3661 b(|affected)523 +b(|)19884 56358 y(GM1|Joan)g(Smith)3138 b +(|female|1902/07/01|1975/12/13|)i(|)e(|)3661 b(|asymptomatic)19884 +57576 y(GF1|Joseph)523 b(Smith)2092 b(|male)1047 b(|unknown)1569 +b(|unknown)g(|)3139 b(|)f(|)3661 b(|)523 b(normal)19884 +58793 y(GF2|Jim)g(Brown)3661 b(|male)1047 b(|1905/11/01|)5230 +b(|)3139 b(|)f(|)3661 b(|)523 b(normal)1046 b(|)19884 +60011 y(GM2|Lisa)523 b(Brown)3138 b(|female|1910/03/03|)5231 +b(|)3139 b(|)f(|)3661 b(|)523 b(normal)1046 b(|)19884 +61229 y(S1)523 b(|Rebecca)g(Smith)1569 b(|female|1972/12/25|)5231 +b(|M1)2093 b(|F1)f(|)3661 b(|)523 b(affected)19884 62446 +y(S2)g(|Alexander)g(Smith)g(|male)1047 b(|1975/11/12|)5230 +b(|M1)2093 b(|F1)f(|)3661 b(|)523 b(normal)19884 63664 +y(A1)g(|Ann)g(Gold)4184 b(|female|1941/09/02|)5231 b(|GM1)1570 +b(|)523 b(GF1)1046 b(|)3661 b(|)523 b(obligatory|Aunt)h(of)f(the)g +(proband)19884 64882 y(C1)g(|)g(Jenny)g(Smith)2092 b +(|female|1969/12/03|)5231 b(|A1)2093 b(|)3138 b(|)3661 +b(|)523 b(affected)g(|)g(Cousin)h(of)f(the)g(proband)19884 +68756 y Fg(\310\344\345\355\362|\324\310\316)10457 b +(|\317\356\353|\320\356\346\344)3137 b(|\323\354\345\360)g +(|\314\340\362\374|\316\362\345\366|\317\360\356\341\340\355\344|\321)p +(\356\361\362\356\377\355\350\345)520 b(|)j +(\312\356\354\354\345\355\362\340\360\350\351)19884 69974 +y(P)2091 b(|\310\342\340\355\356\342)523 b(\321\345\360\343\345\351)f +(\317\345\362\360\356\342\350\367)g(|\354\363\346|1965/08/06|)5228 +b(|M1)1045 b(|F1)h(|\344\340)2614 b(|\341\356\353\374\355)g(|)19884 +71191 y(M1)1568 b(|\310\342\340\355\356\342\340)522 b +(\313\376\341\356\342\374)h +(\310\342\340\355\356\342\355\340|\346\345\355|1935/12/01|2005/10/01)p +(|)2088 b(|)k(|)3660 b(|\355\356\360\354)19884 72409 +y(F1)1568 b(|\310\342\340\355\356\342)523 b(\317\345\362\360)f +(\310\353\374\350\367)3137 b(|\354\363\346|\355\345\350\347\342)2614 +b(|2003/01/25|)2090 b(|)i(|)3660 b(|\356\341\353\350\343\340\362)19884 +73627 y(S1)1568 b(|\310\342\340\355\356\342\340)522 b(\300\355\355\340) +h(\317\345\362\360\356\342\355\340)1045 b(|\346\345\355|1968/05/05|) +5228 b(|M1)1045 b(|F1)h(|)3660 b(|\355\356\360\354)19884 +74844 y(K1)1568 b(|\310\342\340\355\356\342)523 b(\310\342\340\355)f +(\321\345\360\343\345\345\342\350\367)1045 b(|\354\363\346|1990/12/01|) +5228 b(|)2091 b(|P)1569 b(|)3660 b(|\340\361\350\354\357)1046 +b(|\303\345\355\345\362\350\367.)522 b(\350\361\361\353.)g(2005/12/08) +19884 76062 y(K2)1568 b(|\310\342\340\355\356\342\340)522 +b(\304\340\360\374\377)h +(\321\345\360\343\345\345\342\355\340|\346\345\355|1995/03/24|)5227 +b(|)2091 b(|P)1569 b(|)3660 b(|\355\356\360\354)1569 +b(|\303\345\355\345\362\350\367.)522 b(\350\361\361\353.)g(2005/12/08) +77169 63816 y + currentpoint grestore moveto + 77169 63816 a 0 TeXcolorgray 0 TeXcolorgray +12210 66252 a Fv(Listing)371 b(7:)493 b(Examples)370 +b(of)g(Data)g(Files)f(\(English)i(and)f(Russian\))p 0 +TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray +25405 70071 a(14)p 0 TeXcolorgray eop end +%%Page: 15 15 +TeXDict begin 15 14 bop 0 TeXcolorgray 0 0 a +SDict begin /product where{pop product(Distiller)search{pop pop pop +version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto +closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show +grestore}if}{pop}ifelse}{pop}ifelse}if end + 0 0 a 0 +TeXcolorgray 6752 1660 a +SDict begin H.S end + 6752 1660 a 6752 1660 a +SDict begin H.R end + 6752 +1660 a 6752 1660 a +SDict begin [/View [/XYZ H.V]/Dest (page.15) cvn /DEST pdfmark end + 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray +0 TeXcolorgray 0 TeXcolorgray 32060 22112 a +tx@Dict begin { -170.71646 56.90549 } PutCoor PutBegin end + 32060 22112 +a 31273 22112 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@GF1 16 {InitRnode } /NodeScale {} def NewNode end end + 31273 22112 a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath 0.8 SLW 0 setgray -9.38945 -9.38945 moveto +9.38945 9.38945 L 0 setlinejoin 0 setlinecap stroke end + +@endspecial 32060 +22112 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 32060 22112 a 177 w Fp(Joseph)298 b(Smith)32060 +22112 y +tx@Dict begin PutEnd end + 32060 22112 a 32060 22112 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 32060 22112 a 32237 +22792 a Fx(I:1)32060 22112 y +tx@Dict begin PutEnd end + 32060 22112 a 32060 22112 +a +tx@Dict begin PutEnd end + 32060 22112 a 32060 22112 a +tx@Dict begin { 0.0 56.90549 } PutCoor PutBegin end + 32060 22112 a 31273 22112 +a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@GF2 16 {InitRnode } /NodeScale {} def NewNode end end + 31273 22112 a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial +32060 22112 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 32060 22112 a 177 w Fp(Jim)g(Bro)-24 b(wn)32060 +22112 y +tx@Dict begin PutEnd end + 32060 22112 a 32060 22112 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 32060 22112 a 32237 +22792 a Fx(I:3)32060 22112 y +tx@Dict begin PutEnd end + 32060 22112 a 32060 22112 +a +tx@Dict begin PutEnd end + 32060 22112 a 32060 22112 a +tx@Dict begin { 113.81097 56.90549 } PutCoor PutBegin end + 32060 22112 a 31273 22112 +a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@GM2 16 {InitRnode } /NodeScale {} def NewNode end end + 31273 22112 a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial +32060 22112 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 32060 22112 a 177 w Fp(Lisa)298 b(Bro)-24 +b(wn)32060 22112 y +tx@Dict begin PutEnd end + 32060 22112 a 32060 22112 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 32060 +22112 a 32237 22792 a Fx(I:4)32060 22112 y +tx@Dict begin PutEnd end + 32060 22112 +a 32060 22112 a +tx@Dict begin PutEnd end + 32060 22112 a 32060 22112 a +tx@Dict begin { 56.90549 56.90549 } PutCoor PutBegin end + 32060 22112 +a 32060 22112 a +tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@GF2_m_GM2 10 {InitPnode +} /NodeScale {} def NewNode end end + 32060 22112 a 32060 22112 a +tx@Dict begin PutEnd end + 32060 22112 +a 32060 22112 a +tx@Dict begin { -113.81097 56.90549 } PutCoor PutBegin end + 32060 22112 a 32060 22112 a +tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@GF1_m_GM1 10 {InitPnode +} /NodeScale {} def NewNode end end + 32060 22112 +a 32060 22112 a +tx@Dict begin PutEnd end + 32060 22112 a 32060 22112 a +tx@Dict begin { -56.90549 56.90549 } PutCoor PutBegin end + 32060 22112 +a 31273 22112 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@GM1 16 {InitRnode } /NodeScale {} def NewNode end end + 31273 22112 a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath 0.8 SLW 0 setgray 0.0 7.11317 moveto +0.0 -7.11317 L 0 setlinejoin 0 setlinecap stroke end + + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath 0.8 SLW 0 setgray -9.38945 -9.38945 moveto +9.38945 9.38945 L 0 setlinejoin 0 setlinecap stroke end + +@endspecial 32060 22112 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 32060 22112 a +177 w Fp(Joan)299 b(Smith)32060 22112 y +tx@Dict begin PutEnd end + 32060 22112 a +32060 22112 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 32060 22112 a 32237 22792 a Fx(I:2)32060 +22112 y +tx@Dict begin PutEnd end + 32060 22112 a 32060 22112 a +tx@Dict begin PutEnd end + 32060 22112 a 32060 +22112 a +tx@Dict begin { 0.0 0.0 } PutCoor PutBegin end + 32060 22112 a 32060 22112 a +tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@F1_m_M1 10 {InitPnode +} /NodeScale {} def NewNode end end + 32060 22112 a 32060 +22112 a +tx@Dict begin PutEnd end + 32060 22112 a 32060 22112 a +tx@Dict begin { -142.26372 0.0 } PutCoor PutBegin end + 32060 22112 a 31273 +22112 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@A1 16 {InitRnode } /NodeScale {} def NewNode end end + 31273 22112 a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath 0.8 SLW 0 setgray /DS 2.0 2. CLW mul +add 2 div def /PSTricksDotFont 0. [1.0 0.0 0.0 1.0 0.0 0.0] FontDot +/Dot { moveto gsave 1. 1. scale (b) show grestore } bind def 0.0 +0.0 Dot end + + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 32060 +22112 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 32060 22112 a 177 w Fp(Ann)g(Gold)32060 22112 +y +tx@Dict begin PutEnd end + 32060 22112 a 32060 22112 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 32060 22112 a 32237 22792 +a Fx(I)28 b(I:1)32060 22112 y +tx@Dict begin PutEnd end + 32060 22112 a 32060 22112 +a +tx@Dict begin PutEnd end + 32060 22112 a 32060 22112 a +tx@Dict begin { 56.90549 0.0 } PutCoor PutBegin end + 32060 22112 a 31273 22112 +a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@M1 16 {InitRnode } /NodeScale {} def NewNode end end + 31273 22112 a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial +32060 22112 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 32060 22112 a 177 w Fp(Mary)299 b(Smith)32060 +22112 y +tx@Dict begin PutEnd end + 32060 22112 a 32060 22112 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 32060 22112 a 32237 +22792 a Fx(I)28 b(I:3)32060 22112 y +tx@Dict begin PutEnd end + 32060 22112 a 32060 +22112 a +tx@Dict begin PutEnd end + 32060 22112 a 32060 22112 a +tx@Dict begin { -85.35823 0.0 } PutCoor PutBegin end + 32060 22112 a 31273 +22112 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@F1 16 {InitRnode } /NodeScale {} def NewNode end end + 31273 22112 a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.5 setgray 1. .setopacityalpha + fill grestore gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 +setlinejoin 0 setlinecap stroke grestore end + + +@endspecial 32060 22112 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 32060 22112 a 177 w Fp(Bill)297 +b(Smith)32060 22112 y +tx@Dict begin PutEnd end + 32060 22112 a 32060 22112 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 32060 +22112 a 32237 22792 a Fx(I)28 b(I:2)32060 22112 y +tx@Dict begin PutEnd end + 32060 +22112 a 32060 22112 a +tx@Dict begin PutEnd end + 32060 22112 a 32060 22112 a +tx@Dict begin { 0.0 -56.90549 } PutCoor PutBegin end + 32060 +22112 a 31273 22112 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@S1 16 {InitRnode } /NodeScale {} def NewNode end end + 31273 22112 a 787 w @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.5 setgray 1. .setopacityalpha fill + grestore gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore end + +@endspecial 32060 22112 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 32060 22112 a +177 w Fp(Reb)c(ecca)296 b(Smith)32060 22112 y +tx@Dict begin PutEnd end + 32060 22112 +a 32060 22112 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 32060 22112 a 32237 22792 a Fx(I)28 b(I)g(I:3)32060 +22112 y +tx@Dict begin PutEnd end + 32060 22112 a 32060 22112 a +tx@Dict begin PutEnd end + 32060 22112 a 32060 +22112 a +tx@Dict begin { 56.90549 -56.90549 } PutCoor PutBegin end + 32060 22112 a 31273 22112 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@S2 16 {InitRnode } /NodeScale {} def NewNode end end + 31273 22112 a 787 +w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 32060 22112 +a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 32060 22112 a 177 w Fp(Alexander)298 b(Smith)32060 +22112 y +tx@Dict begin PutEnd end + 32060 22112 a 32060 22112 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 32060 22112 a 32237 +22792 a Fx(I)28 b(I)g(I:4)32060 22112 y +tx@Dict begin PutEnd end + 32060 22112 a +32060 22112 a +tx@Dict begin PutEnd end + 32060 22112 a 32060 22112 a +tx@Dict begin { -56.90549 -56.90549 } PutCoor PutBegin end + 32060 22112 +a 31273 22112 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@P 16 {InitRnode } /NodeScale {} def NewNode end end + 31273 22112 a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.5 setgray 1. .setopacityalpha + fill grestore gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 +setlinejoin 0 setlinecap stroke grestore end + + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul +dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0 +0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub +moveto EndArrow } def /ArrowInside { } def 0.8 SLW 0 setgray +/ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4 +1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 +h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto +gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside +{ } def [ -8.2511 -8.2511 -15.6491 -15.6491 /Lineto /lineto load +def 0 setlinejoin false NArray n 0 eq not { n 1 eq { 0 0 /n 2 def +} if () length 0 gt { 1.5 2. CLW mul add dup 1.4 mul exch 0.4 mul +neg add /arrowlength exch def 4 copy /y1 ED /x1 ED /y2 ED /x2 ED /Alpha +y2 y1 sub x2 x1 sub Atan def ArrowA x1 Alpha cos arrowlength mul add +y1 Alpha sin arrowlength mul add /n n 1 sub def n { 4 copy /y1 ED /x1 +ED /y2 ED /x2 ED x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub Atan +def /ArrowPos 0. def /dArrowPos 0.5 abs def 1. cvi { /ArrowPos ArrowPos +dArrowPos add def x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos +mul add ArrowInside pop pop } repeat }{ /ArrowPos 0. def /dArrowPos +1. 1 gt {1.0 1. 1.0 add div }{0.5 } ifelse def 1. cvi { /ArrowPos +ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul x1 add y2 y1 sub +ArrowPos mul y1 add ArrowInside pop pop } repeat } ifelse pop pop Lineto +} repeat }{ ArrowA /n n 2 sub def n { Lineto } repeat } ifelse CP 4 +2 roll ArrowB L pop pop } if gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 32060 +22112 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 32060 22112 a 177 w Fp(John)298 b(Smith)32060 +22112 y +tx@Dict begin PutEnd end + 32060 22112 a 32060 22112 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 32060 22112 a 32237 +22792 a Fx(I)28 b(I)g(I:2)32060 22112 y +tx@Dict begin PutEnd end + 32060 22112 a +32060 22112 a +tx@Dict begin PutEnd end + 32060 22112 a 32060 22112 a +tx@Dict begin { -142.26372 -56.90549 } PutCoor PutBegin end + 32060 22112 +a 31273 22112 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@C1 16 {InitRnode } /NodeScale {} def NewNode end end + 31273 22112 a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.5 setgray 1. .setopacityalpha fill + grestore gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore end + + +@endspecial 32060 22112 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 32060 22112 a 177 w Fp(Jenn)-24 +b(y)298 b(Smith)32060 22112 y +tx@Dict begin PutEnd end + 32060 22112 a 32060 22112 +a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 32060 22112 a 32237 22792 a Fx(I)28 b(I)g(I:1)32060 +22112 y +tx@Dict begin PutEnd end + 32060 22112 a 32060 22112 a +tx@Dict begin PutEnd end + 32060 22112 a 32060 +22112 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@GF2_m_GM2 /N@M1 InitNC { tx@Dict begin +/Lineto /lineto load def 0 setlinejoin false pop end /AngleA -90. +def /AngleB 90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 +sub dup mul add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB +0 def NCAngles } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore grestore end + 32060 22112 a 32060 22112 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@GF2_m_GM2 /N@GM2 InitNC { NCCoor tx@Dict +begin ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED +x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. + def /Length x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos +ArrowPos dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } loop }{/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div +}{ 0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop lineto pop pop end } if end gsave +0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin 0 setlinecap +stroke grestore grestore end + 32060 22112 a 32060 +22112 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@GF2_m_GM2 /N@GF2 InitNC { NCCoor tx@Dict +begin ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED +x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. + def /Length x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos +ArrowPos dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } loop }{/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div +}{ 0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop lineto pop pop end } if end gsave +0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin 0 setlinecap +stroke grestore grestore end + 32060 22112 a 32060 22112 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@GF1_m_GM1 /N@A1 InitNC { tx@Dict begin +/Lineto /lineto load def 0 setlinejoin false pop end /AngleA -90. +def /AngleB 90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 +sub dup mul add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB +0 def NCAngles } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore grestore end + 32060 22112 a 32060 +22112 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@GF1_m_GM1 /N@F1 InitNC { tx@Dict begin +/Lineto /lineto load def 0 setlinejoin false pop end /AngleA -90. +def /AngleB 90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 +sub dup mul add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB +0 def NCAngles } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore grestore end + 32060 22112 a 32060 22112 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@GF1_m_GM1 /N@GM1 InitNC { NCCoor tx@Dict +begin ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED +x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. + def /Length x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos +ArrowPos dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } loop }{/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div +}{ 0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop lineto pop pop end } if end gsave +0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin 0 setlinecap +stroke grestore grestore end + 32060 22112 a 32060 +22112 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@GF1_m_GM1 /N@GF1 InitNC { NCCoor tx@Dict +begin ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED +x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. + def /Length x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos +ArrowPos dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } loop }{/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div +}{ 0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop lineto pop pop end } if end gsave +0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin 0 setlinecap +stroke grestore grestore end + 32060 22112 a 32060 22112 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@F1_m_M1 /N@P InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 32060 22112 a 32060 +22112 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@F1_m_M1 /N@S1 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 32060 22112 a 32060 22112 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@F1_m_M1 /N@S2 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 32060 22112 a 32060 +22112 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@F1_m_M1 /N@M1 InitNC { NCCoor tx@Dict begin +ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1 +0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length +x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos +0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def +1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul +x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat } +ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray + 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore + grestore end + 32060 22112 a 32060 22112 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@F1_m_M1 /N@F1 InitNC { NCCoor tx@Dict begin +ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1 +0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length +x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos +0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def +1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul +x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat } +ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray + 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore + grestore end + 32060 22112 a 32060 +22112 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@A1 /N@C1 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 32060 22112 a 0 TeXcolorgray 6863 37145 a Fs(I:1)p +0 TeXcolorgray 553 w Fv(Joseph)369 b(Smith;)i(b)31 b(orn:)492 +b(unkno)-31 b(wn;)371 b(age)f(at)g(death:)494 b(unkno)-31 +b(wn.)p 0 TeXcolorgray 6863 39359 a Fs(I:2)p 0 TeXcolorgray +553 w Fv(Joan)370 b(Smith;)h(b)31 b(orn:)492 b(1902/07/01;)375 +b(age)370 b(at)g(death:)493 b(73.)p 0 TeXcolorgray 6863 +41573 a Fs(I:3)p 0 TeXcolorgray 553 w Fv(Jim)370 b(Bro)-31 +b(wn;)371 b(b)31 b(orn:)492 b(1905/11/01.)p 0 TeXcolorgray +6863 43787 a Fs(I:4)p 0 TeXcolorgray 553 w Fv(Lisa)370 +b(Bro)-31 b(wn;)370 b(b)31 b(orn:)492 b(1910/03/03.)p +0 TeXcolorgray 6863 46001 a Fs(I)35 b(I:1)p 0 TeXcolorgray +554 w Fv(Ann)369 b(Gold;)h(b)31 b(orn:)492 b(1941/09/02;)374 +b(Aun)-31 b(t)370 b(of)g(the)f(proband.)p 0 TeXcolorgray +6863 48215 a Fs(I)35 b(I:2)p 0 TeXcolorgray 554 w Fv(Bill)370 +b(Smith;)h(b)31 b(orn:)492 b(1938/04/03.)p 0 TeXcolorgray +6863 50429 a Fs(I)35 b(I:3)p 0 TeXcolorgray 554 w Fv(Mary)369 +b(Smith;)h(b)31 b(orn:)493 b(1940/02/05.)p 0 TeXcolorgray +6863 52643 a Fs(I)35 b(I)g(I:1)p 0 TeXcolorgray 554 w +Fv(Jenn)-31 b(y)369 b(Smith;)i(b)31 b(orn:)492 b(1969/12/03;)374 +b(Cousin)c(of)g(the)g(proband.)p 0 TeXcolorgray 6863 +54857 a Fs(I)35 b(I)g(I:2)p 0 TeXcolorgray 554 w Fv(John)369 +b(Smith;)i(b)31 b(orn:)492 b(1970/02/05;)374 b(Ev)-61 +b(aluated)371 b(2005/12/01.)p 0 TeXcolorgray 6863 57071 +a Fs(I)35 b(I)g(I:3)p 0 TeXcolorgray 554 w Fv(Reb)c(ecca)369 +b(Smith;)i(b)31 b(orn:)492 b(1972/12/25.)p 0 TeXcolorgray +6863 59284 a Fs(I)35 b(I)g(I:4)p 0 TeXcolorgray 554 w +Fv(Alexander)370 b(Smith;)h(b)31 b(orn:)492 b(1975/11/12.)6863 +62827 y(Figure)285 b(1:)p 0 TeXcolorgray 11582 62827 +a +SDict begin H.S end + 11582 62827 a 11582 62827 a +SDict begin H.R end + 11582 62827 a 11582 62827 +a +SDict begin [/View [/XYZ H.V]/Dest (figure.1) cvn /DEST pdfmark end + 11582 62827 a 0 TeXcolorgray Fv(Example)i(of)e(the)f(T)-31 +b(yp)31 b(eset)286 b(P)-31 b(edigree)285 b(in)g(English)h(\(Data)g +(File)e(from)i(Listing)p 0 TeXcolorgray 44069 62827 a +SDict begin H.S end + +44069 62827 a 0 TeXcolorgray Fv(7)p 0 TeXcolorgray 44622 +62113 a +SDict begin H.R end + 44622 62113 a 44622 62827 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (lstlisting.7) cvn H.B /ANN pdfmark end + 44622 62827 a 0 TeXcolorgray +Fv(\))p 0 TeXcolorgray 0 TeXcolorgray 25405 70071 a(15)p +0 TeXcolorgray eop end +%%Page: 16 16 +TeXDict begin 16 15 bop 0 TeXcolorgray 0 0 a +SDict begin /product where{pop product(Distiller)search{pop pop pop +version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto +closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show +grestore}if}{pop}ifelse}{pop}ifelse}if end + 0 0 a 0 +TeXcolorgray 6752 1660 a +SDict begin H.S end + 6752 1660 a 6752 1660 a +SDict begin H.R end + 6752 +1660 a 6752 1660 a +SDict begin [/View [/XYZ H.V]/Dest (page.16) cvn /DEST pdfmark end + 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray +0 TeXcolorgray 0 TeXcolorgray 27651 17253 a +tx@Dict begin { 0.0 0.0 } PutCoor PutBegin end + 27651 17253 +a 27651 17253 a +tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@F1_m_M1 10 {InitPnode +} /NodeScale {} def NewNode end end + 27651 17253 a 27651 17253 a +tx@Dict begin PutEnd end + 27651 17253 +a 27651 17253 a +tx@Dict begin { 93.89413 0.0 } PutCoor PutBegin end + 27651 17253 a 26864 17253 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@M1 16 {InitRnode } /NodeScale {} def NewNode end end + 26864 17253 +a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath 0.8 SLW 0 setgray -9.38945 -9.38945 moveto +9.38945 9.38945 L 0 setlinejoin 0 setlinecap stroke end + +@endspecial 27651 17253 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 27651 17253 a +177 w Ff(\310\342\340\355\356\342\340)298 b(\313\376\341\356\342\374)h +(\310\342\340\355\356\342\355\340)27651 17253 y +tx@Dict begin PutEnd end + 27651 +17253 a 27651 17253 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 27651 17253 a 27828 17933 a Fe(I:2)27651 +17253 y +tx@Dict begin PutEnd end + 27651 17253 a 27651 17253 a +tx@Dict begin PutEnd end + 27651 17253 a 27651 +17253 a +tx@Dict begin { -93.89413 0.0 } PutCoor PutBegin end + 27651 17253 a 26864 17253 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@F1 16 {InitRnode } /NodeScale {} def NewNode end end + 26864 17253 a 787 +w @beginspecial @setspecial + tx@Dict begin STP newpath 0.8 SLW 0 setgray /DS 2.0 2. CLW mul +add 2 div def /PSTricksDotFont 0. [1.0 0.0 0.0 1.0 0.0 0.0] FontDot +/Dot { moveto gsave 1. 1. scale (b) show grestore } bind def 0.0 +0.0 Dot end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath 0.8 SLW 0 setgray -9.38945 -9.38945 moveto +9.38945 9.38945 L 0 setlinejoin 0 setlinecap stroke end + +@endspecial +27651 17253 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 27651 17253 a 177 w Ff(\310\342\340\355\356\342)f +(\317\345\362\360)h(\310\353\374\350\367)27651 17253 +y +tx@Dict begin PutEnd end + 27651 17253 a 27651 17253 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 27651 17253 a 27828 17933 +a Fe(I:1)27651 17253 y +tx@Dict begin PutEnd end + 27651 17253 a 27651 17253 a +tx@Dict begin PutEnd end + 27651 +17253 a 27651 17253 a +tx@Dict begin { 0.0 -187.78827 } PutCoor PutBegin end + 27651 17253 a 26864 17253 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@K2 16 {InitRnode } /NodeScale {} def NewNode end end + 26864 +17253 a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial +27651 17253 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 27651 17253 a 177 w Ff(\310\342\340\355\356\342\340)f +(\304\340\360\374\377)h(\321\345\360\343\345\345\342\355\340)27651 +17253 y +tx@Dict begin PutEnd end + 27651 17253 a 27651 17253 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 27651 17253 a 27828 +17933 a Fe(I)28 b(I)g(I:2)27651 17253 y +tx@Dict begin PutEnd end + 27651 17253 a +27651 17253 a +tx@Dict begin PutEnd end + 27651 17253 a 27651 17253 a +tx@Dict begin { -93.89413 -187.78827 } PutCoor PutBegin end + 27651 17253 +a 26864 17253 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@K1 16 {InitRnode } /NodeScale {} def NewNode end end + 26864 17253 a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath 0.8 SLW 0 setgray 0.0 7.11317 moveto +0.0 -7.11317 L 0 setlinejoin 0 setlinecap stroke end + + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 27651 +17253 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 27651 17253 a 177 w Ff(\310\342\340\355\356\342)298 +b(\310\342\340\355)h(\321\345\360\343\345\345\342\350\367)27651 +17253 y +tx@Dict begin PutEnd end + 27651 17253 a 27651 17253 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 27651 17253 a 27828 +17933 a Fe(I)28 b(I)g(I:1)27651 17253 y +tx@Dict begin PutEnd end + 27651 17253 a +27651 17253 a +tx@Dict begin PutEnd end + 27651 17253 a 27651 17253 a +tx@Dict begin { 46.94684 -93.89413 } PutCoor PutBegin end + 27651 17253 +a 26864 17253 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@S1 16 {InitRnode } /NodeScale {} def NewNode end end + 26864 17253 a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + + +@endspecial 27651 17253 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 27651 17253 a 177 w Ff +(\310\342\340\355\356\342\340)298 b(\300\355\355\340)h +(\317\345\362\360\356\342\355\340)27651 17253 y +tx@Dict begin PutEnd end + 27651 +17253 a 27651 17253 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 27651 17253 a 27828 17933 a Fe(I)28 +b(I:2)27651 17253 y +tx@Dict begin PutEnd end + 27651 17253 a 27651 17253 a +tx@Dict begin PutEnd end + 27651 +17253 a 27651 17253 a +tx@Dict begin { -46.94684 -93.89413 } PutCoor PutBegin end + 27651 17253 a 26864 17253 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@P 16 {InitRnode } /NodeScale {} def NewNode end end + 26864 +17253 a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.5 setgray 1. .setopacityalpha + fill grestore gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 +setlinejoin 0 setlinecap stroke grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul +dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0 +0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub +moveto EndArrow } def /ArrowInside { } def 0.8 SLW 0 setgray +/ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4 +1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 +h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto +gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside +{ } def [ -8.2511 -8.2511 -15.6491 -15.6491 /Lineto /lineto load +def 0 setlinejoin false NArray n 0 eq not { n 1 eq { 0 0 /n 2 def +} if () length 0 gt { 1.5 2. CLW mul add dup 1.4 mul exch 0.4 mul +neg add /arrowlength exch def 4 copy /y1 ED /x1 ED /y2 ED /x2 ED /Alpha +y2 y1 sub x2 x1 sub Atan def ArrowA x1 Alpha cos arrowlength mul add +y1 Alpha sin arrowlength mul add /n n 1 sub def n { 4 copy /y1 ED /x1 +ED /y2 ED /x2 ED x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub Atan +def /ArrowPos 0. def /dArrowPos 0.5 abs def 1. cvi { /ArrowPos ArrowPos +dArrowPos add def x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos +mul add ArrowInside pop pop } repeat }{ /ArrowPos 0. def /dArrowPos +1. 1 gt {1.0 1. 1.0 add div }{0.5 } ifelse def 1. cvi { /ArrowPos +ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul x1 add y2 y1 sub +ArrowPos mul y1 add ArrowInside pop pop } repeat } ifelse pop pop Lineto +} repeat }{ ArrowA /n n 2 sub def n { Lineto } repeat } ifelse CP 4 +2 roll ArrowB L pop pop } if gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 27651 17253 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + +27651 17253 a 177 w Ff(\310\342\340\355\356\342)298 b +(\321\345\360\343\345\351)h(\317\345\362\360\356\342\350\367)27651 +17253 y +tx@Dict begin PutEnd end + 27651 17253 a 27651 17253 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 27651 17253 a 27828 +17933 a Fe(I)28 b(I:1)27651 17253 y +tx@Dict begin PutEnd end + 27651 17253 a 27651 +17253 a +tx@Dict begin PutEnd end + 27651 17253 a 27651 17253 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@F1_m_M1 /N@P InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 27651 17253 a 27651 +17253 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@F1_m_M1 /N@S1 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 27651 17253 a 27651 17253 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@F1_m_M1 /N@M1 InitNC { NCCoor tx@Dict begin +ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1 +0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length +x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos +0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def +1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul +x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat } +ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray + 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore + grestore end + 27651 17253 a 27651 +17253 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@F1_m_M1 /N@F1 InitNC { NCCoor tx@Dict begin +ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1 +0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length +x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos +0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def +1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul +x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat } +ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray + 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore + grestore end + 27651 17253 a 27651 17253 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@P /N@K1 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 27651 17253 a 27651 +17253 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@P /N@K2 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 27651 17253 a 0 TeXcolorgray 6863 50869 a Fd(I:1)p +0 TeXcolorgray 553 w Fc(\310\342\340\355\356\342)370 +b(\317\345\362\360)f(\310\353\374\350\367;)g(\360\356)-31 +b(\344.)369 b(\355\345\350\347\342.;)h(\363\354.)f(\342)g +(\342\356\347\360.)739 b(\355\345\350\347\342..)p 0 TeXcolorgray +6863 53083 a Fd(I:2)p 0 TeXcolorgray 553 w Fc +(\310\342\340\355\356\342\340)370 b(\313\376\341\356\342\374)g +(\310\342\340\355\356\342\355\340;)h(\360\356)-31 b(\344.)369 +b(1935/12/01;)k(\363\354.)c(\342)h(\342\356\347\360.)738 +b(70.)p 0 TeXcolorgray 6863 55297 a Fd(I)35 b(I:1)p 0 +TeXcolorgray 553 w Fc(\310\342\340\355\356\342)370 b +(\321\345\360\343\345\351)e(\317\345\362\360\356\342\350\367;)i +(\360\356)-31 b(\344.)369 b(1965/08/06.)p 0 TeXcolorgray +6863 57511 a Fd(I)35 b(I:2)p 0 TeXcolorgray 553 w Fc +(\310\342\340\355\356\342\340)370 b(\300\355\355\340)f +(\317\345\362\360\356\342\355\340;)h(\360\356)-31 b(\344.)370 +b(1968/05/05.)p 0 TeXcolorgray 6863 59725 a Fd(I)35 b(I)g(I:1)p +0 TeXcolorgray 553 w Fc(\310\342\340\355\356\342)370 +b(\310\342\340\355)f(\321\345\360\343\345\345\342\350\367;)g(\360\356) +-31 b(\344.)370 b(1990/12/01;)i(\303)-92 b(\345\355\345\362\350\367.) +369 b(\350\361\361\353.)f(2005/12/08.)p 0 TeXcolorgray +6863 61939 a Fd(I)35 b(I)g(I:2)p 0 TeXcolorgray 553 w +Fc(\310\342\340\355\356\342\340)250 b(\304\340\360\374\377)g +(\321\345\360\343\345\345\342\355\340;)g(\360\356)-31 +b(\344.)249 b(1995/03/24;)k(\303)-92 b(\345\355\345\362\350\367.)249 +b(\350\361\361\353.)f(2005/12/08.)6863 65481 y Fv(Figure)269 +b(2:)p 0 TeXcolorgray 11559 65481 a +SDict begin H.S end + 11559 65481 a 11559 +65481 a +SDict begin H.R end + 11559 65481 a 11559 65481 a +SDict begin [/View [/XYZ H.V]/Dest (figure.2) cvn /DEST pdfmark end + 11559 65481 a 0 TeXcolorgray +Fv(Example)i(of)f(the)g(T)-31 b(yp)31 b(eset)270 b(P)-31 +b(edigree)270 b(in)f(Russian)h(\(Data)g(File)g(from)g(Listing)p +0 TeXcolorgray 44069 65481 a +SDict begin H.S end + 44069 65481 a 0 TeXcolorgray +Fv(7)p 0 TeXcolorgray 44622 64768 a +SDict begin H.R end + 44622 64768 a 44622 +65481 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (lstlisting.7) cvn H.B /ANN pdfmark end + 44622 65481 a 0 TeXcolorgray Fv(\))p 0 TeXcolorgray +0 TeXcolorgray 25405 70071 a(16)p 0 TeXcolorgray eop +end +%%Page: 17 17 +TeXDict begin 17 16 bop 0 TeXcolorgray 0 0 a +SDict begin /product where{pop product(Distiller)search{pop pop pop +version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto +closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show +grestore}if}{pop}ifelse}{pop}ifelse}if end + 0 0 a 0 +TeXcolorgray 6752 1660 a +SDict begin H.S end + 6752 1660 a 6752 1660 a +SDict begin H.R end + 6752 +1660 a 6752 1660 a +SDict begin [/View [/XYZ H.V]/Dest (page.17) cvn /DEST pdfmark end + 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray +0 TeXcolorgray 0 TeXcolorgray 6863 7821 a +SDict begin H.S end + 6863 7821 a +6863 7821 a +SDict begin 12 H.A end + 6863 7821 a 6863 7821 a +SDict begin [/View [/XYZ H.V]/Dest (lstlisting.8) cvn /DEST pdfmark +end + 6863 7821 a 6863 +8751 a +SDict begin H.S end + 6863 8751 a 6863 8751 a +SDict begin 12 H.A end + 6863 8751 a 6863 8751 +a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.8.1) cvn /DEST pdfmark +end + 6863 8751 a 1218 x Fw(Id)523 b(|Name)1046 b(|Sex)1570 +b(|DoB)3661 b(|DoD)g(|Mother|Father|Proband|Twins|Type)6863 +11187 y(F0)523 b(|Adam)1046 b(|male)h(|unknown)1569 b(|unknown)g(|)3139 +b(|)f(|)3661 b(|)2615 b(|)6863 12404 y(A0)523 b(|Sam)1569 +b(|male)1047 b(|1950.01.03|unknown)1569 b(|)3139 b(|F0)2092 +b(|)3661 b(|)523 b(A1)1046 b(|qzygotic)6863 13622 y(A1)523 +b(|John)1046 b(|male)h(|1950.01.03|2005.04.12|)3139 b(|F0)2092 +b(|)3661 b(|)523 b(A0)1046 b(|qzygotic)6863 14840 y(A2)523 +b(|Jane)1046 b(|female|1951.14.15|)5231 b(|)3139 b(|)f(|)3661 +b(|)2615 b(|)6863 16057 y(B1)523 b(|Jack)1046 b(|male)h(|1975.05.06|) +5230 b(|A2)2093 b(|A1)f(|)3661 b(|B2)1569 b(|monozygotic)6863 +17275 y(B2)523 b(|Mike)1046 b(|male)h(|1975.05.06|)5230 +b(|A2)2093 b(|A1)f(|)3661 b(|B1)1569 b(|monozygotic)6863 +18493 y(B3)523 b(|Pam)1569 b(|female|1973.11.01|)5231 +b(|A2)2093 b(|A1)f(|)3661 b(|)2615 b(|)6863 19710 y(C1)523 +b(|Jane)1046 b(|female|1998.12.04|)5231 b(|)3139 b(|B1)2092 +b(|)3661 b(|C2,C3|)6863 20928 y(C2)523 b(|John)1046 b(|male)h +(|1998.12.04|)5230 b(|)3139 b(|B1)2092 b(|)3661 b(|C1,C3|)6863 +22146 y(C3)523 b(|George|male)1047 b(|1998.12.04|)5230 +b(|)3139 b(|B1)2092 b(|)1046 b(yes)g(|C1,C2|)6863 23363 +y(C4)523 b(|Ann)1569 b(|female|2003.02.04|)5231 b(|)3139 +b(|B1)2092 b(|)3661 b(|)2615 b(|)p 0 TeXcolorgray 0 TeXcolorgray +15282 25798 a Fv(Listing)371 b(8:)493 b(Example)371 b(of)e(Data)h(File) +g(with)g(Twins)p 0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray +0 TeXcolorgray 27349 43850 a +tx@Dict begin { -28.45274 -91.04869 } PutCoor PutBegin end + 27349 43850 a 27349 43850 +a +tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@t_C3_C2_C1 10 {InitPnode +} /NodeScale {} def NewNode end end + 27349 43850 a 27349 43850 a +tx@Dict begin PutEnd end + 27349 43850 a 27349 43850 +a +tx@Dict begin { -85.35823 56.90549 } PutCoor PutBegin end + 27349 43850 a 26562 43850 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@F0 16 {InitRnode } /NodeScale {} def NewNode end end + 26562 43850 a 787 w @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath 0.8 SLW 0 setgray -9.38945 -9.38945 moveto +9.38945 9.38945 L 0 setlinejoin 0 setlinecap stroke end + +@endspecial +27349 43850 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 27349 43850 a 177 w Fp(Adam)27349 43850 +y +tx@Dict begin PutEnd end + 27349 43850 a 27349 43850 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 27349 43850 a 27526 44530 +a Fx(I:1)27349 43850 y +tx@Dict begin PutEnd end + 27349 43850 a 27349 43850 a +tx@Dict begin PutEnd end + 27349 +43850 a 27349 43850 a +tx@Dict begin { 28.45274 -34.1432 } PutCoor PutBegin end + 27349 43850 a 27349 43850 a +tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@t_B1_B2 10 {InitPnode +} /NodeScale {} def NewNode end end + 27349 +43850 a 27349 43850 a +tx@Dict begin PutEnd end + 27349 43850 a 27349 43850 a +tx@Dict begin { -56.90549 0.0 } PutCoor PutBegin end + 27349 +43850 a 26562 43850 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@A1 16 {InitRnode } /NodeScale {} def NewNode end end + 26562 43850 a 787 w @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath 0.8 SLW 0 setgray -9.38945 -9.38945 moveto +9.38945 9.38945 L 0 setlinejoin 0 setlinecap stroke end + +@endspecial +27349 43850 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 27349 43850 a 177 w Fp(John)27349 43850 +y +tx@Dict begin PutEnd end + 27349 43850 a 27349 43850 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 27349 43850 a 27526 44530 +a Fx(I)28 b(I:2)27349 43850 y +tx@Dict begin PutEnd end + 27349 43850 a 27349 43850 +a +tx@Dict begin PutEnd end + 27349 43850 a 27349 43850 a +tx@Dict begin { -113.81097 0.0 } PutCoor PutBegin end + 27349 43850 a 26562 43850 +a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@A0 16 {InitRnode } /NodeScale {} def NewNode end end + 26562 43850 a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath 0.8 SLW 0 setgray -9.38945 -9.38945 moveto +9.38945 9.38945 L 0 setlinejoin 0 setlinecap stroke end + +@endspecial 27349 43850 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + +27349 43850 a 177 w Fp(Sam)27349 43850 y +tx@Dict begin PutEnd end + 27349 43850 +a 27349 43850 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 27349 43850 a 27526 44530 a Fx(I)g(I:1)27349 +43850 y +tx@Dict begin PutEnd end + 27349 43850 a 27349 43850 a +tx@Dict begin PutEnd end + 27349 43850 a 27349 +43850 a +tx@Dict begin { 56.90549 0.0 } PutCoor PutBegin end + 27349 43850 a 26562 43850 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@A2 16 {InitRnode } /NodeScale {} def NewNode end end + 26562 43850 a 787 +w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 27349 43850 +a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 27349 43850 a 177 w Fp(Jane)27349 43850 y +tx@Dict begin PutEnd end + 27349 43850 +a 27349 43850 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 27349 43850 a 27526 44530 a Fx(I)g(I:3)27349 +43850 y +tx@Dict begin PutEnd end + 27349 43850 a 27349 43850 a +tx@Dict begin PutEnd end + 27349 43850 a 27349 +43850 a +tx@Dict begin { 0.0 0.0 } PutCoor PutBegin end + 27349 43850 a 27349 43850 a +tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@A1_m_A2 10 {InitPnode +} /NodeScale {} def NewNode end end + 27349 43850 a 27349 +43850 a +tx@Dict begin PutEnd end + 27349 43850 a 27349 43850 a +tx@Dict begin { -85.35823 22.76227 } PutCoor PutBegin end + 27349 43850 a 27349 +43850 a +tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@t_A1_A0 10 {InitPnode +} /NodeScale {} def NewNode end end + 27349 43850 a 27349 43850 a +tx@Dict begin PutEnd end + 27349 43850 a 27349 +43850 a +tx@Dict begin { -85.35823 -113.81097 } PutCoor PutBegin end + 27349 43850 a 26562 43850 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@C3 16 {InitRnode } /NodeScale {} def NewNode end end + 26562 43850 a 787 +w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul +dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0 +0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub +moveto EndArrow } def /ArrowInside { } def 0.8 SLW 0 setgray +/ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4 +1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 +h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto +gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside +{ } def [ -8.2511 -8.2511 -15.6491 -15.6491 /Lineto /lineto load +def 0 setlinejoin false NArray n 0 eq not { n 1 eq { 0 0 /n 2 def +} if () length 0 gt { 1.5 2. CLW mul add dup 1.4 mul exch 0.4 mul +neg add /arrowlength exch def 4 copy /y1 ED /x1 ED /y2 ED /x2 ED /Alpha +y2 y1 sub x2 x1 sub Atan def ArrowA x1 Alpha cos arrowlength mul add +y1 Alpha sin arrowlength mul add /n n 1 sub def n { 4 copy /y1 ED /x1 +ED /y2 ED /x2 ED x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub Atan +def /ArrowPos 0. def /dArrowPos 0.5 abs def 1. cvi { /ArrowPos ArrowPos +dArrowPos add def x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos +mul add ArrowInside pop pop } repeat }{ /ArrowPos 0. def /dArrowPos +1. 1 gt {1.0 1. 1.0 add div }{0.5 } ifelse def 1. cvi { /ArrowPos +ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul x1 add y2 y1 sub +ArrowPos mul y1 add ArrowInside pop pop } repeat } ifelse pop pop Lineto +} repeat }{ ArrowA /n n 2 sub def n { Lineto } repeat } ifelse CP 4 +2 roll ArrowB L pop pop } if gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 27349 43850 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 27349 43850 a +177 w Fp(George)27349 43850 y +tx@Dict begin PutEnd end + 27349 43850 a 27349 43850 +a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 27349 43850 a 27526 44530 a Fx(IV:1)27349 43850 y +tx@Dict begin PutEnd end + 27349 +43850 a 27349 43850 a +tx@Dict begin PutEnd end + 27349 43850 a 27349 43850 a +tx@Dict begin { 85.35823 -113.81097 } PutCoor PutBegin end + 27349 +43850 a 26562 43850 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@C4 16 {InitRnode } /NodeScale {} def NewNode end end + 26562 43850 a 787 w @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 27349 43850 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 27349 43850 a +177 w Fp(Ann)27349 43850 y +tx@Dict begin PutEnd end + 27349 43850 a 27349 43850 +a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 27349 43850 a 27526 44530 a Fx(IV:4)27349 43850 y +tx@Dict begin PutEnd end + 27349 +43850 a 27349 43850 a +tx@Dict begin PutEnd end + 27349 43850 a 27349 43850 a +tx@Dict begin { 28.45274 -113.81097 } PutCoor PutBegin end + 27349 +43850 a 26562 43850 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@C1 16 {InitRnode } /NodeScale {} def NewNode end end + 26562 43850 a 787 w @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 27349 43850 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 27349 43850 a +177 w Fp(Jane)27349 43850 y +tx@Dict begin PutEnd end + 27349 43850 a 27349 43850 +a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 27349 43850 a 27526 44530 a Fx(IV:3)27349 43850 y +tx@Dict begin PutEnd end + 27349 +43850 a 27349 43850 a +tx@Dict begin PutEnd end + 27349 43850 a 27349 43850 a +tx@Dict begin { -28.45274 -113.81097 } PutCoor PutBegin end + 27349 +43850 a 26562 43850 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@C2 16 {InitRnode } /NodeScale {} def NewNode end end + 26562 43850 a 787 w @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 27349 43850 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 27349 43850 a +177 w Fp(John)27349 43850 y +tx@Dict begin PutEnd end + 27349 43850 a 27349 43850 +a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 27349 43850 a 27526 44530 a Fx(IV:2)27349 43850 y +tx@Dict begin PutEnd end + 27349 +43850 a 27349 43850 a +tx@Dict begin PutEnd end + 27349 43850 a 27349 43850 a +tx@Dict begin { 0.0 -56.90549 } PutCoor PutBegin end + 27349 +43850 a 26562 43850 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@B1 16 {InitRnode } /NodeScale {} def NewNode end end + 26562 43850 a 787 w @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 27349 43850 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 27349 43850 a +177 w Fp(Jac)-24 b(k)27349 43850 y +tx@Dict begin PutEnd end + 27349 43850 a 27349 +43850 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 27349 43850 a 27526 44530 a Fx(I)28 b(I)g(I:2)27349 +43850 y +tx@Dict begin PutEnd end + 27349 43850 a 27349 43850 a +tx@Dict begin PutEnd end + 27349 43850 a 27349 +43850 a +tx@Dict begin { -56.90549 -56.90549 } PutCoor PutBegin end + 27349 43850 a 26562 43850 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@B3 16 {InitRnode } /NodeScale {} def NewNode end end + 26562 43850 a 787 +w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 27349 43850 +a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 27349 43850 a 177 w Fp(P)-24 b(am)27349 43850 y +tx@Dict begin PutEnd end + 27349 +43850 a 27349 43850 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 27349 43850 a 27526 44530 a Fx(I)28 +b(I)g(I:1)27349 43850 y +tx@Dict begin PutEnd end + 27349 43850 a 27349 43850 a +tx@Dict begin PutEnd end + 27349 +43850 a 27349 43850 a +tx@Dict begin { 56.90549 -56.90549 } PutCoor PutBegin end + 27349 43850 a 26562 43850 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@B2 16 {InitRnode } /NodeScale {} def NewNode end end + 26562 +43850 a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial +27349 43850 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 27349 43850 a 177 w Fp(Mik)-24 b(e)27349 +43850 y +tx@Dict begin PutEnd end + 27349 43850 a 27349 43850 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 27349 43850 a 27526 +44530 a Fx(I)28 b(I)g(I:3)27349 43850 y +tx@Dict begin PutEnd end + 27349 43850 a +27349 43850 a +tx@Dict begin PutEnd end + 27349 43850 a 27349 43850 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@t_C3_C2_C1 /N@C1 InitNC { NCCoor tx@Dict +begin ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED +x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. + def /Length x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos +ArrowPos dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } loop }{/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div +}{ 0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop lineto pop pop end } if end gsave +0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin 0 setlinecap +stroke grestore grestore end + 27349 43850 +a 27349 43850 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@B1 /N@t_C3_C2_C1 InitNC { tx@Dict begin + /Lineto /lineto load def 0 setlinejoin false pop end /AngleA -90. +def /AngleB 90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 +sub dup mul add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB +0 def NCAngles } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore grestore end + 27349 43850 a 27349 43850 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@t_C3_C2_C1 /N@C3 InitNC { NCCoor tx@Dict +begin ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED +x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. + def /Length x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos +ArrowPos dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } loop }{/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div +}{ 0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop lineto pop pop end } if end gsave +0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin 0 setlinecap +stroke grestore grestore end + 27349 43850 +a 27349 43850 a +tx@Dict begin tx@NodeDict begin /t 0.5 def LPut end PutBegin end + 27349 43850 a 27349 43850 a +tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@pst@pdgr@tempnodeA +10 {InitPnode } /NodeScale {} def NewNode end end + 27349 43850 +a 27349 43850 a +tx@Dict begin PutEnd end + 27349 43850 a 27349 43850 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@t_C3_C2_C1 /N@C2 InitNC { NCCoor tx@Dict +begin ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED +x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. + def /Length x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos +ArrowPos dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } loop }{/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div +}{ 0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop lineto pop pop end } if end gsave +0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin 0 setlinecap +stroke grestore grestore end + 27349 43850 +a 27349 43850 a +tx@Dict begin tx@NodeDict begin /t 0.5 def LPut end PutBegin end + 27349 43850 a 27349 43850 a +tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@pst@pdgr@tempnodeB +10 {InitPnode } /NodeScale {} def NewNode end end + 27349 43850 +a 27349 43850 a +tx@Dict begin PutEnd end + 27349 43850 a 27349 43850 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@A1_m_A2 /N@t_B1_B2 InitNC { tx@Dict begin + /Lineto /lineto load def 0 setlinejoin false pop end /AngleA -90. +def /AngleB 90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 +sub dup mul add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB +0 def NCAngles } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore grestore end + 27349 43850 +a 27349 43850 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@t_B1_B2 /N@B1 InitNC { NCCoor tx@Dict begin +ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1 +0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length +x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos +0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def +1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul +x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat } +ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray + 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore + grestore end + 27349 43850 a 27349 43850 a +tx@Dict begin tx@NodeDict begin /t 0.5 def LPut end PutBegin end + 27349 43850 +a 27349 43850 a +tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@pst@pdgr@tempnodeA +10 {InitPnode } /NodeScale {} def NewNode end end + 27349 43850 a 27349 43850 a +tx@Dict begin PutEnd end + 27349 43850 +a 27349 43850 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@t_B1_B2 /N@B2 InitNC { NCCoor tx@Dict begin +ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1 +0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length +x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos +0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def +1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul +x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat } +ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray + 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore + grestore end + 27349 43850 a 27349 43850 a +tx@Dict begin tx@NodeDict begin /t 0.5 def LPut end PutBegin end + 27349 43850 +a 27349 43850 a +tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@pst@pdgr@tempnodeB +10 {InitPnode } /NodeScale {} def NewNode end end + 27349 43850 a 27349 43850 a +tx@Dict begin PutEnd end + 27349 43850 +a 27349 43850 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@pst@pdgr@tempnodeA /N@pst@pdgr@tempnodeB +InitNC { NCCoor tx@Dict begin ArrowA CP 4 2 roll ArrowB 4 copy /y2 +ED /x2 ED /y1 ED /x1 ED x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub +atan def /ArrowPos 0. def /Length x2 x1 sub y2 y1 sub Pyth def /dArrowPos +0.5 abs def {/ArrowPos ArrowPos dArrowPos add def ArrowPos Length +gt { exit } if x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos +mul add ArrowInside pop pop } loop }{/ArrowPos 0. def /dArrowPos 1. +1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos +dArrowPos add def x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos +mul y1 add ArrowInside pop pop } repeat } ifelse pop pop lineto pop +pop end } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha +0 setlinejoin 0 setlinecap stroke grestore grestore end + 27349 43850 a 27349 43850 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@A1_m_A2 /N@B3 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 27349 43850 +a 27349 43850 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@A1_m_A2 /N@A2 InitNC { NCCoor tx@Dict begin +ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1 +0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length +x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos +0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def +1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul +x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat } +ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray + 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore + grestore end + 27349 43850 a 27349 43850 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@A1_m_A2 /N@A1 InitNC { NCCoor tx@Dict begin +ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1 +0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length +x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos +0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def +1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul +x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat } +ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray + 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore + grestore end + 27349 43850 +a 27349 43850 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@F0 /N@t_A1_A0 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 27349 43850 a 27349 43850 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@t_A1_A0 /N@A0 InitNC { NCCoor tx@Dict begin +ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1 +0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length +x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos +0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def +1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul +x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat } +ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray + 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore + grestore end + 27349 43850 +a 27349 43850 a +tx@Dict begin tx@NodeDict begin /t 0.5 def LPut end PutBegin end + 27349 43850 a 27349 43850 a +tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@pst@pdgr@tempnodeA +10 {InitPnode } /NodeScale {} def NewNode end end + 27349 43850 +a 27349 43850 a +tx@Dict begin PutEnd end + 27349 43850 a 27349 43850 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@t_A1_A0 /N@A1 InitNC { NCCoor tx@Dict begin +ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1 +0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length +x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos +0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def +1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul +x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat } +ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray + 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore + grestore end + 27349 43850 +a 27349 43850 a +tx@Dict begin tx@NodeDict begin /t 0.5 def LPut end PutBegin end + 27349 43850 a 27349 43850 a +tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@pst@pdgr@tempnodeB +10 {InitPnode } /NodeScale {} def NewNode end end + 27349 43850 +a 27349 43850 a +tx@Dict begin PutEnd end + 27349 43850 a 27349 43850 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@pst@pdgr@tempnodeA /N@pst@pdgr@tempnodeB +InitNC { NCCoor tx@Dict begin ArrowA CP 4 2 roll ArrowB 4 copy /y2 +ED /x2 ED /y1 ED /x1 ED x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub +atan def /ArrowPos 0. def /Length x2 x1 sub y2 y1 sub Pyth def /dArrowPos +0.5 abs def {/ArrowPos ArrowPos dArrowPos add def ArrowPos Length +gt { exit } if x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos +mul add ArrowInside pop pop } loop }{/ArrowPos 0. def /dArrowPos 1. +1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos +dArrowPos add def x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos +mul y1 add ArrowInside pop pop } repeat } ifelse pop pop lineto pop +pop end } if end grestore end + 27349 43850 +a 27349 43850 a +tx@Dict begin tx@NodeDict begin /t 0.5 def LPut end PutBegin end + 27349 43850 a 27088 44234 a Fv(?)27349 +43850 y +tx@Dict begin PutEnd end + 27349 43850 a 27349 43850 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@B1 /N@C4 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 27349 43850 a 0 TeXcolorgray +8636 65183 a Fv(Figure)369 b(3:)p 0 TeXcolorgray 13482 +65183 a +SDict begin H.S end + 13482 65183 a 13482 65183 a +SDict begin H.R end + 13482 65183 a 13482 +65183 a +SDict begin [/View [/XYZ H.V]/Dest (figure.3) cvn /DEST pdfmark end + 13482 65183 a 0 TeXcolorgray Fv(Example)i(of)f(a)f(P)-31 +b(edigree)370 b(with)g(Twins)g(\(Data)h(File)f(from)f(Listing)p +0 TeXcolorgray 42297 65183 a +SDict begin H.S end + 42297 65183 a 0 TeXcolorgray +Fv(8)p 0 TeXcolorgray 42850 64469 a +SDict begin H.R end + 42850 64469 a 42850 +65183 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (lstlisting.8) cvn H.B /ANN pdfmark end + 42850 65183 a 0 TeXcolorgray Fv(\))p 0 TeXcolorgray +0 TeXcolorgray 0 TeXcolorgray 25405 70071 a(17)p 0 TeXcolorgray +eop end +%%Page: 18 18 +TeXDict begin 18 17 bop 0 TeXcolorgray 0 0 a +SDict begin /product where{pop product(Distiller)search{pop pop pop +version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto +closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show +grestore}if}{pop}ifelse}{pop}ifelse}if end + 0 0 a 0 +TeXcolorgray 6752 1660 a +SDict begin H.S end + 6752 1660 a 6752 1660 a +SDict begin H.R end + 6752 +1660 a 6752 1660 a +SDict begin [/View [/XYZ H.V]/Dest (page.18) cvn /DEST pdfmark end + 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray +0 TeXcolorgray 0 TeXcolorgray 6863 10556 a +SDict begin H.S end + 6863 10556 +a 6863 10556 a +SDict begin 12 H.A end + 6863 10556 a 6863 10556 a +SDict begin [/View [/XYZ H.V]/Dest (lstlisting.9) cvn /DEST pdfmark +end + 6863 10556 a +6863 11486 a +SDict begin H.S end + 6863 11486 a 6863 11486 a +SDict begin 12 H.A end + 6863 11486 a 6863 +11486 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.9.1) cvn /DEST pdfmark +end + 6863 11486 a 1217 x Fw(Id)523 b(|Name)2616 b(|Sex)1569 +b(|DoB)3661 b(|DoD)h(|Mother|Proband|Condition|Type)6863 +13921 y(A0)523 b(|Ann)3139 b(|female|1970.06.15|)5231 +b(|)3138 b(|)3661 b(|affected)523 b(|)6863 15139 y(B1)g +(|#abortion|female|1990.03.01|)5232 b(|A0)2092 b(|)3661 +b(|affected)523 b(|)6863 16356 y(B2)g(|#abortion|male)1047 +b(|2000.10.10|)5231 b(|A0)2092 b(|)3661 b(|)4707 b(|sab)6863 +17574 y(B3)523 b(|John)2616 b(|male)1046 b(|2002.12.01|)5231 +b(|A0)2092 b(|yes)g(|affected)523 b(|)p 0 TeXcolorgray +0 TeXcolorgray 14358 20009 a Fv(Listing)371 b(9:)493 +b(Example)370 b(of)g(Data)g(File)g(with)g(Ab)31 b(ortions)p +0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray +25958 37230 a +tx@Dict begin { 0.0 0.0 } PutCoor PutBegin end + 25958 37230 a 25171 37230 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@A0 16 {InitRnode } /NodeScale {} def NewNode end end + 25171 37230 +a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.5 setgray 1. .setopacityalpha fill + grestore gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore end + +@endspecial 25958 +37230 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 25958 37230 a 177 w Fp(Ann)25958 37230 y +tx@Dict begin PutEnd end + 25958 +37230 a 25958 37230 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 25958 37230 a 26135 37911 a Fx(I:1)25958 +37230 y +tx@Dict begin PutEnd end + 25958 37230 a 25958 37230 a +tx@Dict begin PutEnd end + 25958 37230 a 25958 +37230 a +tx@Dict begin { 56.90549 -56.90549 } PutCoor PutBegin end + 25958 37230 a 25171 37230 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@B3 16 {InitRnode } /NodeScale {} def NewNode end end + 25171 37230 a 787 +w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.5 setgray 1. .setopacityalpha + fill grestore gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 +setlinejoin 0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul +dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0 +0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub +moveto EndArrow } def /ArrowInside { } def 0.8 SLW 0 setgray +/ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4 +1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 +h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto +gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside +{ } def [ -8.2511 -8.2511 -15.6491 -15.6491 /Lineto /lineto load +def 0 setlinejoin false NArray n 0 eq not { n 1 eq { 0 0 /n 2 def +} if () length 0 gt { 1.5 2. CLW mul add dup 1.4 mul exch 0.4 mul +neg add /arrowlength exch def 4 copy /y1 ED /x1 ED /y2 ED /x2 ED /Alpha +y2 y1 sub x2 x1 sub Atan def ArrowA x1 Alpha cos arrowlength mul add +y1 Alpha sin arrowlength mul add /n n 1 sub def n { 4 copy /y1 ED /x1 +ED /y2 ED /x2 ED x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub Atan +def /ArrowPos 0. def /dArrowPos 0.5 abs def 1. cvi { /ArrowPos ArrowPos +dArrowPos add def x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos +mul add ArrowInside pop pop } repeat }{ /ArrowPos 0. def /dArrowPos +1. 1 gt {1.0 1. 1.0 add div }{0.5 } ifelse def 1. cvi { /ArrowPos +ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul x1 add y2 y1 sub +ArrowPos mul y1 add ArrowInside pop pop } repeat } ifelse pop pop Lineto +} repeat }{ ArrowA /n n 2 sub def n { Lineto } repeat } ifelse CP 4 +2 roll ArrowB L pop pop } if gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 25958 37230 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 25958 37230 a +177 w Fp(John)25958 37230 y +tx@Dict begin PutEnd end + 25958 37230 a 25958 37230 +a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 25958 37230 a 26135 37911 a Fx(I)d(I:3)25958 37230 +y +tx@Dict begin PutEnd end + 25958 37230 a 25958 37230 a +tx@Dict begin PutEnd end + 25958 37230 a 25958 37230 +a +tx@Dict begin { -56.90549 -56.90549 } PutCoor PutBegin end + 25958 37230 a 25171 37624 a +tx@Dict begin tx@NodeDict begin {14.22636 7.11317 14.22635 7.11317 +3.5566 } false /N@B1 16 {InitRnode } /NodeScale {} def NewNode end + end + 25171 37624 a 787 w @beginspecial +@setspecial + tx@Dict begin STP newpath 0.8 SLW 0 setgray -7.11317 2.84544 moveto +7.11317 17.07181 L 0 setlinejoin 0 setlinecap stroke end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 7.11317 0.0 14.22636 +-7.11317 7.11317 /Lineto /lineto load def 0 setlinejoin false NArray +n 2 eq { 0 0 /n 3 def } if n 3 lt { n { pop pop } repeat }{ n 3 gt +{ CheckClosed } if n 2 mul -2 roll /y0 ED /x0 ED /y1 ED /x1 ED /xx1 +x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 div def /y1 y0 y1 add 2 div +def x1 y1 moveto /n n 2 sub def /drawArrows { x11 y11 0.5 1 gt { /Alpha +y12 y11 sub x12 x11 sub atan def /ArrowPos 0. def /Length x12 x11 +sub y12 y11 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x11 Alpha cos ArrowPos +mul add y11 Alpha sin ArrowPos mul add currentdict /ArrowInside known +{ ArrowInside } if pop pop } loop }{ /ArrowPos 0. def /dArrowPos 1. + 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def 1. cvi { /ArrowPos +ArrowPos dArrowPos add def x12 x11 sub ArrowPos mul x11 add y12 y11 +sub ArrowPos mul y11 add currentdict /ArrowInside known { ArrowInside +} if pop pop } repeat } ifelse pop pop Lineto } def n { 4 copy /y11 +ED /x11 ED /y12 ED /x12 ED drawArrows } repeat x1 y1 x0 y0 6 4 roll +2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def drawArrows /y11 y0 def +/x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows pop pop closepath +} ifelse gsave 0.5 setgray 1. .setopacityalpha fill grestore +gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin 0 setlinecap +stroke grestore end + +@endspecial +25958 37624 a +tx@Dict begin { 0.0 18.4941 } PutCoor PutBegin end + 25958 37624 a 177 w Fp(female)25958 37624 +y +tx@Dict begin PutEnd end + 25958 37624 a 25958 37624 a +tx@Dict begin { 0.0 2.84544 } PutCoor PutBegin end + 25958 37624 a 26135 38305 +a Fx(I)g(I:1)25958 37624 y +tx@Dict begin PutEnd end + 25958 37624 a 25958 37230 +a +tx@Dict begin PutEnd end + 25958 37230 a 25958 37230 a +tx@Dict begin { 0.0 -56.90549 } PutCoor PutBegin end + 25958 37230 a 25171 37624 +a +tx@Dict begin tx@NodeDict begin {14.22636 7.11317 14.22635 7.11317 +3.5566 } false /N@B2 16 {InitRnode } /NodeScale {} def NewNode end + end + 25171 37624 a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 7.11317 0.0 14.22636 +-7.11317 7.11317 /Lineto /lineto load def 0 setlinejoin false NArray +n 2 eq { 0 0 /n 3 def } if n 3 lt { n { pop pop } repeat }{ n 3 gt +{ CheckClosed } if n 2 mul -2 roll /y0 ED /x0 ED /y1 ED /x1 ED /xx1 +x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 div def /y1 y0 y1 add 2 div +def x1 y1 moveto /n n 2 sub def /drawArrows { x11 y11 0.5 1 gt { /Alpha +y12 y11 sub x12 x11 sub atan def /ArrowPos 0. def /Length x12 x11 +sub y12 y11 sub Pyth def /dArrowPos 0.5 abs def { /ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x11 Alpha cos ArrowPos +mul add y11 Alpha sin ArrowPos mul add currentdict /ArrowInside known +{ ArrowInside } if pop pop } loop }{ /ArrowPos 0. def /dArrowPos 1. + 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def 1. cvi { /ArrowPos +ArrowPos dArrowPos add def x12 x11 sub ArrowPos mul x11 add y12 y11 +sub ArrowPos mul y11 add currentdict /ArrowInside known { ArrowInside +} if pop pop } repeat } ifelse pop pop Lineto } def n { 4 copy /y11 +ED /x11 ED /y12 ED /x12 ED drawArrows } repeat x1 y1 x0 y0 6 4 roll +2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def drawArrows /y11 y0 def +/x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows pop pop closepath +} ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore end + +@endspecial +25958 37624 a +tx@Dict begin { 0.0 18.4941 } PutCoor PutBegin end + 25958 37624 a 177 w Fp(male)25958 37624 +y +tx@Dict begin PutEnd end + 25958 37624 a 25958 37624 a +tx@Dict begin { 0.0 2.84544 } PutCoor PutBegin end + 25958 37624 a 26135 38305 +a Fx(I)g(I:2)25958 37624 y +tx@Dict begin PutEnd end + 25958 37624 a 25958 37230 +a +tx@Dict begin PutEnd end + 25958 37230 a 25958 37230 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@A0 /N@B1 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 25958 37230 a 25958 37230 +a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@A0 /N@B2 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 25958 37230 a 25958 37230 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@A0 /N@B3 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 25958 37230 a 0 TeXcolorgray +6863 52264 a Fs(I:1)p 0 TeXcolorgray 553 w Fv(Ann;)370 +b(b)31 b(orn:)492 b(1970.06.15.)p 0 TeXcolorgray 6863 +54478 a Fs(I)35 b(I:1)p 0 TeXcolorgray 554 w Fv(ab)c(ortion;)371 +b(b)31 b(orn:)492 b(1990.03.01.)p 0 TeXcolorgray 6863 +56692 a Fs(I)35 b(I:2)p 0 TeXcolorgray 554 w Fv(ab)c(ortion;)371 +b(b)31 b(orn:)492 b(2000.10.10.)p 0 TeXcolorgray 6863 +58906 a Fs(I)35 b(I:3)p 0 TeXcolorgray 554 w Fv(John;)369 +b(b)31 b(orn:)493 b(2002.12.01.)p 0 TeXcolorgray 7712 +62448 a(Figure)369 b(4:)p 0 TeXcolorgray 12558 62448 +a +SDict begin H.S end + 12558 62448 a 12558 62448 a +SDict begin H.R end + 12558 62448 a 12558 62448 +a +SDict begin [/View [/XYZ H.V]/Dest (figure.4) cvn /DEST pdfmark end + 12558 62448 a 0 TeXcolorgray Fv(Example)i(of)e(a)h(P)-31 +b(edigree)370 b(with)g(Ab)31 b(ortions)370 b(\(Data)h(File)f(from)f +(Listing)p 0 TeXcolorgray 43221 62448 a +SDict begin H.S end + 43221 62448 a +0 TeXcolorgray Fv(9)p 0 TeXcolorgray 43774 61735 a +SDict begin H.R end + 43774 +61735 a 43774 62448 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (lstlisting.9) cvn H.B /ANN pdfmark end + 43774 62448 a 0 TeXcolorgray Fv(\))p +0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray 25405 70071 +a(18)p 0 TeXcolorgray eop end +%%Page: 19 19 +TeXDict begin 19 18 bop 0 TeXcolorgray 0 0 a +SDict begin /product where{pop product(Distiller)search{pop pop pop +version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto +closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show +grestore}if}{pop}ifelse}{pop}ifelse}if end + 0 0 a 0 +TeXcolorgray 6752 1660 a +SDict begin H.S end + 6752 1660 a 6752 1660 a +SDict begin H.R end + 6752 +1660 a 6752 1660 a +SDict begin [/View [/XYZ H.V]/Dest (page.19) cvn /DEST pdfmark end + 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray +0 TeXcolorgray 0 TeXcolorgray 6863 6531 a +SDict begin H.S end + 6863 6531 a +6863 6531 a +SDict begin 12 H.A end + 6863 6531 a 6863 6531 a +SDict begin [/View [/XYZ H.V]/Dest (lstlisting.10) cvn /DEST pdfmark +end + 6863 6531 a 6863 +7461 a +SDict begin H.S end + 6863 7461 a 6863 7461 a +SDict begin 12 H.A end + 6863 7461 a 6863 7461 +a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.10.1) cvn /DEST pdfmark +end + 6863 7461 a 1218 x Fw(Id)523 b(|Name)3662 b(|Sex)1569 +b(|Mother|Father|Proband|Type)3139 b(|Comment)6863 9896 +y(A0)523 b(|John)3662 b(|male)1046 b(|)3138 b(|)g(|)3662 +b(|)5230 b(|)6863 11114 y(B1)523 b(|James)3139 b(|male)1046 +b(|)3138 b(|A0)2092 b(|)3662 b(|)5230 b(|)6863 12332 +y(B1c|#childless)524 b(|male)1046 b(|)3138 b(|B1)2092 +b(|)3662 b(|infertile)523 b(|anospermia)6863 13549 y(B2)g(|Ann)4185 +b(|female|)3138 b(|A0)2092 b(|yes)h(|)5230 b(|)6863 14767 +y(B2c|#childless)524 b(|)3138 b(|B2)2092 b(|)3138 b(|)3662 +b(|)5230 b(|)p 0 TeXcolorgray 0 TeXcolorgray 13336 17202 +a Fv(Listing)370 b(10:)494 b(Example)371 b(of)e(Data)h(File)g(with)g +(Childlessness)p 0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray +0 TeXcolorgray 6863 22509 a Fs(F)-106 b(ather:)p 0 TeXcolorgray +554 w Fv(The)360 b Fq(Id)f Fv(of)h(the)f(c)-31 b(hildless)360 +b(male.)491 b(If)359 b(b)31 b(oth)360 b Fq(Mother)g Fv(and)f +Fq(Father)h Fv(columns)g(are)9631 23838 y(not)311 b(empt)-31 +b(y)-92 b(,)325 b(the)311 b(en)-31 b(try)311 b(describ)31 +b(es)310 b(the)i(union)f(b)31 b(et)-31 b(w)g(een)312 +b(the)g Fq(Father)g Fv(and)f Fq(Mother)q Fv(.)9631 25166 +y(Of)418 b(only)h Fq(Mother)g Fv(or)f Fq(Father)h Fv(is)f(not)h(empt) +-31 b(y)-92 b(,)431 b(the)419 b(en)-31 b(try)418 b(describ)31 +b(es)417 b(the)i(state)g(of)9631 26494 y(the)369 b(corresp)31 +b(onding)369 b(p)31 b(erson.)p 0 TeXcolorgray 6863 28708 +a Fs(T)-35 b(yp)35 b(e:)p 0 TeXcolorgray 553 w Fv(This)415 +b(column)h(migh)-31 b(t)417 b(b)31 b(e)414 b(either)i(empt)-31 +b(y)416 b(or)e(ha)-31 b(v)g(e)416 b(a)f(k)-31 b(eyw)g(ord)416 +b Fq(infertile)q Fv(.)630 b(In)9631 30037 y(the)523 b(latter)h(case)f +(the)h(c)-31 b(hildlessness)523 b(of)h(the)f(p)31 b(erson)522 +b(or)h(union)h(is)f(caused)g(b)-31 b(y)524 b(a)9631 31365 +y(pro)-31 b(v)g(en)369 b(infertilit)-31 b(y)-92 b(.)p +0 TeXcolorgray 6863 33579 a Fs(Commen)-35 b(t:)p 0 TeXcolorgray +554 w Fv(The)386 b(v)-61 b(aule)386 b(of)g(this)f(column)i(is)e(sho)-31 +b(wn)386 b(under)f(the)h(c)-31 b(hildlessness)385 b(sym)-31 +b(b)31 b(ol)9631 34907 y(on)412 b(the)h(c)-31 b(hart.)623 +b(Put)413 b(there)f(a)h(short)f(description)i(of)f(the)f(cause)h(of)g +(c)-31 b(hildlessness,)9631 36236 y(lik)g(e)370 b Fq(anospermia)g +Fv(or)f Fq(vasectomy)r Fv(.)6863 38450 y(An)291 b(example)i(of)e(a)g(p) +31 b(edigree)291 b(with)i(c)-31 b(hildlessness)290 b(is)h(sho)-31 +b(wn)292 b(on)f(Listing)p 0 TeXcolorgray 37305 38450 +a +SDict begin H.S end + 37305 38450 a 0 TeXcolorgray Fv(10)p 0 TeXcolorgray +38411 37736 a +SDict begin H.R end + 38411 37736 a 38411 38450 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (lstlisting.10) cvn H.B /ANN pdfmark end + 38411 38450 +a 0 TeXcolorgray 292 w Fv(and)g(Figure)p 0 TeXcolorgray +44192 38450 a +SDict begin H.S end + 44192 38450 a 0 TeXcolorgray Fv(5)p 0 TeXcolorgray +44745 37736 a +SDict begin H.R end + 44745 37736 a 44745 38450 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (figure.5) cvn H.B /ANN pdfmark end + 44745 38450 +a 0 TeXcolorgray Fv(.)6863 40214 y +SDict begin H.S end + 6863 40214 a 6863 +40214 a +SDict begin 12 H.A end + 6863 40214 a 6863 40214 a +SDict begin [/View [/XYZ H.V]/Dest (subsection.4.6) cvn /DEST pdfmark +end + 6863 40214 a 1334 x +Ft(4.6)1495 b(Ordering)500 b(Siblings)g(and)f(Marriage)g(P)-42 +b(artners)6863 43592 y Fv(The)312 b(generations)g(in)g(p)31 +b(edigrees)311 b(are)g(ordered)g(in)g(v)-31 b(ertical)313 +b(direction,)325 b(from)312 b(up)f(do)h(do)-31 b(wn.)6863 +44920 y(Ho)g(w)372 b(should)f(w)-31 b(e)372 b(order)e(the)h(p)31 +b(eople)371 b(on)g(the)g(same)g(generation,)j(i.e.)498 +b(siblings)372 b(and)f(mar-)6863 46248 y(riage)f(partners?)8524 +47577 y(Usually)g(t)-31 b(w)g(o)371 b(rules)e(are)g(used:)6863 +48235 y +SDict begin H.S end + 6863 48235 a 6863 48235 a +SDict begin 12 H.A end + 6863 48235 a 6863 48235 +a +SDict begin [/View [/XYZ H.V]/Dest (Item.17) cvn /DEST pdfmark end + 6863 48235 a 0 TeXcolorgray 8216 49791 a Fv(1.)p 0 +TeXcolorgray 555 w(The)331 b(siblings)i(are)e(ordered)g(from)g(the)h +(oldest)g(on)g(the)g(left)g(to)g(the)g(y)-31 b(oungest)333 +b(to)f(the)9631 51119 y(righ)-31 b(t.)6863 51777 y +SDict begin H.S end + 6863 +51777 a 6863 51777 a +SDict begin 12 H.A end + 6863 51777 a 6863 51777 a +SDict begin [/View [/XYZ H.V]/Dest (Item.18) cvn /DEST pdfmark end + 6863 51777 +a 0 TeXcolorgray 8216 53333 a Fv(2.)p 0 TeXcolorgray +555 w(In)330 b(marriage)i(or)e(other)h(union)g(the)g(male)h(is)f(to)g +(the)g(left,)340 b(and)331 b(the)g(female)h(is)e(to)i(the)9631 +54661 y(righ)-31 b(t.)6863 56875 y(Ho)g(w)g(ev)g(er,)365 +b(the)d(com)-31 b(bination)365 b(of)d(these)g(rules)f(migh)-31 +b(t)363 b(lead)g(to)f(the)g(situation)i(when)e(mar-)6863 +58203 y(riage)347 b(lines)f(in)-31 b(tersect)346 b(the)h(paren)-31 +b(tal)347 b(lines.)485 b(Therefore)346 b(the)g(rule)p +0 TeXcolorgray 34718 58203 a +SDict begin H.S end + 34718 58203 a 0 TeXcolorgray +Fv(1)p 0 TeXcolorgray 35271 57490 a +SDict begin H.R end + 35271 57490 a 35271 +58203 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (Item.17) cvn H.B /ANN pdfmark end + 35271 58203 a 0 TeXcolorgray 346 w Fv(is)g(usually)h +(implicitly)6863 59532 y(mo)31 b(di\014ed:)p 0 TeXcolorgray +0 TeXcolorgray 7663 61746 a +SDict begin H.S end + 7663 61746 a 0 TeXcolorgray +Fv(1)p 0 TeXcolorgray 8216 61032 a +SDict begin H.R end + 8216 61032 a 8216 +61746 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (Item.17) cvn H.B /ANN pdfmark end + 8216 61746 a 0 TeXcolorgray Fv(a.)p 0 TeXcolorgray +555 w(The)400 b(are)g(ordered)f(from)i(the)f(oldest)h(on)g(the)f(left)h +(to)g(the)g(y)-31 b(oungest)401 b(to)g(the)g(righ)-31 +b(t.)9631 63074 y(Ho)g(w)g(ev)g(er,)550 b(if)513 b(a)f(sibling's)i +(marriage)g(is)e(sho)-31 b(wn)513 b(on)f(a)h(p)31 b(edigree,)549 +b(this)512 b(sibling)i(is)9631 64402 y(alw)-31 b(a)g(ys)371 +b(the)e(righ)-31 b(tmost)372 b(\(male\))f(or)e(the)g(leftmost)j +(\(female\).)p 0 TeXcolorgray 25405 70071 a(19)p 0 TeXcolorgray +eop end +%%Page: 20 20 +TeXDict begin 20 19 bop 0 TeXcolorgray 0 0 a +SDict begin /product where{pop product(Distiller)search{pop pop pop +version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto +closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show +grestore}if}{pop}ifelse}{pop}ifelse}if end + 0 0 a 0 +TeXcolorgray 6752 1660 a +SDict begin H.S end + 6752 1660 a 6752 1660 a +SDict begin H.R end + 6752 +1660 a 6752 1660 a +SDict begin [/View [/XYZ H.V]/Dest (page.20) cvn /DEST pdfmark end + 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray +0 TeXcolorgray 0 TeXcolorgray 25774 12166 a +tx@Dict begin { 0.0 0.0 } PutCoor PutBegin end + 25774 12166 +a 24987 12166 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@A0 16 {InitRnode } /NodeScale {} def NewNode end end + 24987 12166 a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + + +@endspecial 25774 12166 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 25774 12166 a 177 w Fp(John)25774 +12166 y +tx@Dict begin PutEnd end + 25774 12166 a 25774 12166 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 25774 12166 a 25951 +12847 a Fx(I:1)25774 12166 y +tx@Dict begin PutEnd end + 25774 12166 a 25774 12166 +a +tx@Dict begin PutEnd end + 25774 12166 a 25774 12166 a +tx@Dict begin { -28.45274 -79.66776 } PutCoor PutBegin end + 25774 12166 a 25144 12166 +a +tx@Dict begin tx@NodeDict begin {1.42271 1.42271 11.38092 5.69046 0.0 +} false /N@B1c 16 {InitRnode } /NodeScale {} def NewNode end end + 25144 12166 a 630 w @beginspecial @setspecial + tx@Dict begin STP newpath 0.8 SLW 0 setgray -5.69046 -1.42271 moveto +5.69046 -1.42271 L 0 setlinejoin 0 setlinecap stroke end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath 0.8 SLW 0 setgray -5.69046 1.42271 moveto +5.69046 1.42271 L 0 setlinejoin 0 setlinecap stroke end + +@endspecial 26404 12166 a +tx@Dict begin { 0.0 -5.69046 } PutCoor PutBegin end + +26404 12166 a 23854 12833 a Fx(anosp)28 b(ermia)26404 +12166 y +tx@Dict begin PutEnd end + 26404 12166 a 25774 12166 a +tx@Dict begin PutEnd end + 25774 12166 a 25774 +12166 a +tx@Dict begin { 28.45274 -79.66776 } PutCoor PutBegin end + 25774 12166 a 25774 12166 a +tx@Dict begin tx@NodeDict begin {0.0 0.0 0.0 0.0 0.0 } false /N@B2c +16 {InitRnode } /NodeScale {} def NewNode end end + 25774 12166 a @beginspecial +@setspecial + tx@Dict begin STP newpath 0.8 SLW 0 setgray -5.69046 0.0 moveto +5.69046 0.0 L 0 setlinejoin 0 setlinecap stroke end + +@endspecial 25774 12166 a +tx@Dict begin PutEnd end + 25774 12166 a +25774 12166 a +tx@Dict begin { -28.45274 -56.90549 } PutCoor PutBegin end + 25774 12166 a 24987 12166 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@B1 16 {InitRnode } /NodeScale {} def NewNode end end + 24987 12166 +a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 25774 +12166 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 25774 12166 a 177 w Fp(James)25774 12166 y +tx@Dict begin PutEnd end + 25774 +12166 a 25774 12166 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 25774 12166 a 25951 12847 a Fx(I)g(I:1)25774 +12166 y +tx@Dict begin PutEnd end + 25774 12166 a 25774 12166 a +tx@Dict begin PutEnd end + 25774 12166 a 25774 +12166 a +tx@Dict begin { 28.45274 -56.90549 } PutCoor PutBegin end + 25774 12166 a 24987 12166 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@B2 16 {InitRnode } /NodeScale {} def NewNode end end + 24987 12166 a 787 +w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul +dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0 +0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub +moveto EndArrow } def /ArrowInside { } def 0.8 SLW 0 setgray +/ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4 +1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 +h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto +gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside +{ } def [ -8.2511 -8.2511 -15.6491 -15.6491 /Lineto /lineto load +def 0 setlinejoin false NArray n 0 eq not { n 1 eq { 0 0 /n 2 def +} if () length 0 gt { 1.5 2. CLW mul add dup 1.4 mul exch 0.4 mul +neg add /arrowlength exch def 4 copy /y1 ED /x1 ED /y2 ED /x2 ED /Alpha +y2 y1 sub x2 x1 sub Atan def ArrowA x1 Alpha cos arrowlength mul add +y1 Alpha sin arrowlength mul add /n n 1 sub def n { 4 copy /y1 ED /x1 +ED /y2 ED /x2 ED x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub Atan +def /ArrowPos 0. def /dArrowPos 0.5 abs def 1. cvi { /ArrowPos ArrowPos +dArrowPos add def x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos +mul add ArrowInside pop pop } repeat }{ /ArrowPos 0. def /dArrowPos +1. 1 gt {1.0 1. 1.0 add div }{0.5 } ifelse def 1. cvi { /ArrowPos +ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul x1 add y2 y1 sub +ArrowPos mul y1 add ArrowInside pop pop } repeat } ifelse pop pop Lineto +} repeat }{ ArrowA /n n 2 sub def n { Lineto } repeat } ifelse CP 4 +2 roll ArrowB L pop pop } if gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 25774 12166 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 25774 12166 a +177 w Fp(Ann)25774 12166 y +tx@Dict begin PutEnd end + 25774 12166 a 25774 12166 +a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 25774 12166 a 25951 12847 a Fx(I)g(I:2)25774 12166 +y +tx@Dict begin PutEnd end + 25774 12166 a 25774 12166 a +tx@Dict begin PutEnd end + 25774 12166 a 25774 12166 +a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@A0 /N@B1 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 25774 12166 a 25774 12166 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@A0 /N@B2 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 25774 12166 a 25774 12166 +a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@B1 /N@B1c InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 25774 12166 a 25774 12166 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@B2 /N@B2c InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 25774 12166 a 6863 33499 +a Fv(Figure)339 b(5:)p 0 TeXcolorgray 11664 33499 a +SDict begin H.S end + 11664 +33499 a 11664 33499 a +SDict begin H.R end + 11664 33499 a 11664 33499 a +SDict begin [/View [/XYZ H.V]/Dest (figure.5) cvn /DEST pdfmark end + 11664 +33499 a 0 TeXcolorgray Fv(Example)i(of)e(a)g(P)-31 b(edigree)340 +b(with)g(Childlessness)g(\(Data)g(File)f(from)h(Listing)p +0 TeXcolorgray 43516 33499 a +SDict begin H.S end + 43516 33499 a 0 TeXcolorgray +Fv(10)p 0 TeXcolorgray 44622 32786 a +SDict begin H.R end + 44622 32786 a 44622 +33499 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (lstlisting.10) cvn H.B /ANN pdfmark end + 44622 33499 a 0 TeXcolorgray Fv(\))p 0 TeXcolorgray +6863 37097 a(The)380 b(program)g(follo)-31 b(ws)381 b(these)e(rules.) +523 b(It)379 b(is)g(enough)h(to)g(dra)-31 b(w)380 b(p)31 +b(edigrees)378 b(in)i(most)g(cases.)6863 38425 y(In)443 +b(particular,)464 b(they)444 b(alw)-31 b(a)g(ys)446 b(pro)31 +b(duce)442 b(correct)i(p)31 b(edigrees)443 b(if)h(there)f(is)h(only)g +(one)g(mar-)6863 39753 y(riage)351 b(sho)-31 b(wn.)487 +b(Ho)-31 b(w)g(ev)g(er,)356 b(in)350 b(complex)i(cases)d(these)h(rules) +g(fail,)356 b(as)350 b(sho)-31 b(wn)351 b(on)f(Listing)p +0 TeXcolorgray 43946 39753 a +SDict begin H.S end + 43946 39753 a 0 TeXcolorgray +Fv(11)p 0 TeXcolorgray 45052 39040 a +SDict begin H.R end + 45052 39040 a 45052 +39753 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (lstlisting.11) cvn H.B /ANN pdfmark end + 45052 39753 a 0 TeXcolorgray 6863 41082 a Fv(and)524 +b(Figure)p 0 TeXcolorgray 12817 41082 a +SDict begin H.S end + 12817 41082 a +0 TeXcolorgray Fv(6)p 0 TeXcolorgray 13370 40368 a +SDict begin H.R end + 13370 +40368 a 13370 41082 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (figure.6) cvn H.B /ANN pdfmark end + 13370 41082 a 0 TeXcolorgray Fv(.)955 +b(It)524 b(is)f(p)31 b(ossible)523 b(to)h(extend)g(the)g(rules)e(ab)31 +b(o)-31 b(v)g(e)525 b(to)f(accoun)-31 b(t)525 b(for)e(these)6863 +42410 y(cases,)427 b(ho)-31 b(w)g(ev)g(er)416 b(w)-31 +b(e)416 b(c)-31 b(hose)415 b(another)h(solution:)586 +b(to)416 b(pro)-31 b(vide)416 b(a)f(facilit)-31 b(y)419 +b(for)c(the)g(man)-31 b(ual)6863 43738 y(in)g(terv)g(en)g(tion)424 +b(in)e(the)f(sorting)h(and)g(ordering)f(algorithm.)652 +b(F)-92 b(or)420 b(this)i(purp)31 b(ose)420 b(a)h(sp)31 +b(ecial)6863 45067 y(column)517 b Fq(SortOrder)g Fv(is)e(used.)932 +b(It)516 b(can)g(ha)-31 b(v)g(e)516 b(p)31 b(ositiv)-31 +b(e)518 b(n)-31 b(um)g(b)31 b(ers)515 b(greater)h(than)g(1)g(or)6863 +46395 y(negativ)-31 b(e)438 b(n)-31 b(um)g(b)31 b(ers)435 +b(smaller)h(than)g(-1.)691 b(If)435 b(the)h(v)-61 b(alue)436 +b(of)f(this)h(column)h(is)e(p)31 b(ositiv)-31 b(e,)454 +b(the)6863 47723 y(corresp)31 b(onding)330 b(p)31 b(erson)329 +b(is)g(mo)-31 b(v)g(ed)332 b(to)e(the)g(left)h(when)e(sorting)i +(siblings)g(and)f(to)g(the)g(righ)-31 b(t)6863 49052 +y(when)312 b(sorting)g(marriage)g(partners.)473 b(If)311 +b(it)h(is)f(negativ)-31 b(e,)325 b(the)312 b(opp)31 b(osite)312 +b(sorting)g(rule)f(is)g(ap-)6863 50380 y(plied)344 b(\(see)g(Section)p +0 TeXcolorgray 15586 50380 a +SDict begin H.S end + 15586 50380 a 0 TeXcolorgray +Fv(7)p 0 TeXcolorgray 16139 49667 a +SDict begin H.R end + 16139 49667 a 16139 +50380 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (section.7) cvn H.B /ANN pdfmark end + 16139 50380 a 0 TeXcolorgray 344 w Fv(for)f(more)h(detailed)h +(discussion\).)485 b(Note)344 b(that)h(sibling)g(sorting)f(and)6863 +51709 y(marriage)349 b(partners)e(sorting)h(m)-31 b(ust)349 +b(w)-31 b(ork)348 b(in)g(opp)31 b(osite)348 b(directions,)353 +b(otherwise)c(marriage)6863 53037 y(lines)370 b(in)-31 +b(tersect)370 b(paternal)g(lines.)8524 54365 y(Let)455 +b(us)f(return)g(to)i(the)f(p)31 b(edigree)455 b(on)g(Listing)p +0 TeXcolorgray 28910 54365 a +SDict begin H.S end + 28910 54365 a 0 TeXcolorgray +Fv(11)p 0 TeXcolorgray 30016 53652 a +SDict begin H.R end + 30016 53652 a 30016 +54365 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (lstlisting.11) cvn H.B /ANN pdfmark end + 30016 54365 a 0 TeXcolorgray Fv(.)751 b(T)-92 +b(o)455 b(impro)-31 b(v)g(e)456 b(Figure)p 0 TeXcolorgray +40669 54365 a +SDict begin H.S end + 40669 54365 a 0 TeXcolorgray Fv(6)p 0 TeXcolorgray +41222 53652 a +SDict begin H.R end + 41222 53652 a 41222 54365 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (figure.6) cvn H.B /ANN pdfmark end + 41222 54365 +a 0 TeXcolorgray 455 w Fv(w)-31 b(e)456 b(can)6863 55694 +y(either)412 b(mo)-31 b(v)g(e)414 b(P)-31 b(eter)412 +b(to)h(the)g(righ)-31 b(t)413 b(or)f(Lucy)f(to)i(the)g(left.)622 +b(The)412 b(\014rst)g(solution)i(is)d(sho)-31 b(wn)6863 +57022 y(on)370 b(Listing)p 0 TeXcolorgray 12112 57022 +a +SDict begin H.S end + 12112 57022 a 0 TeXcolorgray Fv(12)p 0 TeXcolorgray +13218 56309 a +SDict begin H.R end + 13218 56309 a 13218 57022 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (lstlisting.12) cvn H.B /ANN pdfmark end + 13218 57022 +a 0 TeXcolorgray 370 w Fv(and)f(Figure)p 0 TeXcolorgray +19233 57022 a +SDict begin H.S end + 19233 57022 a 0 TeXcolorgray Fv(7)p 0 TeXcolorgray +19786 56309 a +SDict begin H.R end + 19786 56309 a 19786 57022 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (figure.7) cvn H.B /ANN pdfmark end + 19786 57022 +a 0 TeXcolorgray Fv(.)493 b(The)370 b(second)f(is)g(sho)-31 +b(wn)370 b(on)f(Listing)p 0 TeXcolorgray 36155 57022 +a +SDict begin H.S end + 36155 57022 a 0 TeXcolorgray Fv(13)p 0 TeXcolorgray +37261 56309 a +SDict begin H.R end + 37261 56309 a 37261 57022 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (lstlisting.13) cvn H.B /ANN pdfmark end + 37261 57022 +a 0 TeXcolorgray 370 w Fv(and)g(Figure)p 0 TeXcolorgray +43276 57022 a +SDict begin H.S end + 43276 57022 a 0 TeXcolorgray Fv(8)p 0 TeXcolorgray +43829 56309 a +SDict begin H.R end + 43829 56309 a 43829 57022 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (figure.8) cvn H.B /ANN pdfmark end + 43829 57022 +a 0 TeXcolorgray Fv(.)8524 58350 y(Of)404 b(course)g(sometimes)j(a)e(p) +31 b(edigree)404 b(cannot)i(b)31 b(e)404 b(dra)-31 b(wn)406 +b(without)h(self-in)-31 b(tersections)6863 59679 y(with)303 +b(an)-31 b(y)303 b(sorting)g(of)g(siblings.)471 b(An)302 +b(example)i(of)e(suc)-31 b(h)302 b(p)31 b(edigree)302 +b(is)g(sho)-31 b(wn)303 b(on)f(Listing)p 0 TeXcolorgray +43946 59679 a +SDict begin H.S end + 43946 59679 a 0 TeXcolorgray Fv(14)p 0 +TeXcolorgray 45052 58965 a +SDict begin H.R end + 45052 58965 a 45052 59679 +a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (lstlisting.14) cvn H.B /ANN pdfmark end + 45052 59679 a 0 TeXcolorgray 6863 61007 a Fv(and)331 +b(Figure)p 0 TeXcolorgray 12431 61007 a +SDict begin H.S end + 12431 61007 a +0 TeXcolorgray Fv(9)p 0 TeXcolorgray 12984 60294 a +SDict begin H.R end + 12984 +60294 a 12984 61007 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (figure.9) cvn H.B /ANN pdfmark end + 12984 61007 a 0 TeXcolorgray Fv(.)480 +b(Ob)-31 b(viously)332 b(no)f(amoun)-31 b(t)332 b(of)f(sh)-31 +b(u\017ing)332 b(the)e(siblngs)h(can)g(help)g(in)f(his)h(case.)8524 +62335 y(If)380 b(the)h(program)h(cannot)g(a)-31 b(v)g(oid)383 +b(self-in)-31 b(tersection)383 b(of)e(marriage)h(lines)f(and)h(paren) +-31 b(tal)6863 63664 y(lines)439 b(despite)f(automatics)j(sorting)e +(and)f(man)-31 b(ual)440 b(in)-31 b(terv)g(en)g(tion,)459 +b(as)437 b(the)i(last)g(resort)e(it)6863 64992 y(creates)369 +b(a)h(m)-31 b(ulti-segmen)g(t)372 b(marriage)f(line,)f(as)f(sho)-31 +b(wn)370 b(on)f(Figures)p 0 TeXcolorgray 35887 64992 +a +SDict begin H.S end + 35887 64992 a 0 TeXcolorgray Fv(6)p 0 TeXcolorgray +36440 64279 a +SDict begin H.R end + 36440 64279 a 36440 64992 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (figure.6) cvn H.B /ANN pdfmark end + 36440 64992 +a 0 TeXcolorgray 370 w Fv(and)p 0 TeXcolorgray 38962 +64992 a +SDict begin H.S end + 38962 64992 a 0 TeXcolorgray Fv(9)p 0 TeXcolorgray +39515 64279 a +SDict begin H.R end + 39515 64279 a 39515 64992 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (figure.9) cvn H.B /ANN pdfmark end + 39515 64992 +a 0 TeXcolorgray Fv(.)p 0 TeXcolorgray 25405 70071 a(20)p +0 TeXcolorgray eop end +%%Page: 21 21 +TeXDict begin 21 20 bop 0 TeXcolorgray 0 0 a +SDict begin /product where{pop product(Distiller)search{pop pop pop +version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto +closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show +grestore}if}{pop}ifelse}{pop}ifelse}if end + 0 0 a 0 +TeXcolorgray 6752 1660 a +SDict begin H.S end + 6752 1660 a 6752 1660 a +SDict begin H.R end + 6752 +1660 a 6752 1660 a +SDict begin [/View [/XYZ H.V]/Dest (page.21) cvn /DEST pdfmark end + 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray +0 TeXcolorgray 0 TeXcolorgray 6863 11217 a +SDict begin H.S end + 6863 11217 +a 6863 11217 a +SDict begin 12 H.A end + 6863 11217 a 6863 11217 a +SDict begin [/View [/XYZ H.V]/Dest (lstlisting.11) cvn /DEST pdfmark +end + 6863 11217 a +6863 12146 a +SDict begin H.S end + 6863 12146 a 6863 12146 a +SDict begin 12 H.A end + 6863 12146 a 6863 +12146 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.11.1) cvn /DEST pdfmark +end + 6863 12146 a 1218 x Fw(Id)523 b(|Name)2616 b(|Sex)1569 +b(|DoB)3661 b(|Father|Mother|Proband)6863 14582 y(A0)523 +b(|John)2616 b(|male)1046 b(|1915.06.15|)3138 b(|)h(|)6863 +15799 y(B1)523 b(|Joan)2616 b(|female|1940.03.02|A0)2092 +b(|)3139 b(|)6863 17017 y(B2)523 b(|Jane)2616 b(|female|1942.07.07|A0) +2092 b(|)3139 b(|)6863 18235 y(B3)523 b(|Bill)2616 b(|male)1046 +b(|1944.12.01|A0)2092 b(|)3139 b(|)6863 19452 y(B4)523 +b(|Peter)2093 b(|male)1046 b(|1941.05.01|)3138 b(|)h(|)6863 +20670 y(C1)523 b(|Jack)2616 b(|male)1046 b(|1963.12.01|B4)2092 +b(|B2)h(|)6863 21888 y(C2)523 b(|Sam)3139 b(|male)1046 +b(|1961.08.26|)3138 b(|B1)2093 b(|)6863 23105 y(C3)523 +b(|Ann)3139 b(|female|1965.11.12|)f(|B3)2093 b(|)6863 +24323 y(C4)523 b(|Lucy)2616 b(|female|1965.12.11|)3138 +b(|)h(|)6863 25541 y(D1)523 b(|Mark)2616 b(|male)1046 +b(|1989.06.21|C1)2092 b(|C4)h(|yes)6863 26758 y(D2)523 +b(|Dina)2616 b(|female|1991.12.02|C1)2092 b(|C4)h(|)p +0 TeXcolorgray 0 TeXcolorgray 14375 29194 a Fv(Listing)370 +b(11:)494 b(A)369 b(Data)h(File)g(with)g(a)g(Sorting)g(Problem)p +0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray +6863 42101 a +SDict begin H.S end + 6863 42101 a 6863 42101 a +SDict begin 12 H.A end + 6863 42101 a 6863 +42101 a +SDict begin [/View [/XYZ H.V]/Dest (lstlisting.12) cvn /DEST pdfmark +end + 6863 42101 a 6863 43031 a +SDict begin H.S end + 6863 43031 a 6863 43031 +a +SDict begin 12 H.A end + 6863 43031 a 6863 43031 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.12.1) cvn /DEST pdfmark +end + 6863 43031 a 1217 x Fw(Id)523 +b(|Name)2616 b(|Sex)1569 b(|DoB)3661 b +(|Father|Mother|Proband|SortOrder)6863 45466 y(A0)523 +b(|John)2616 b(|male)1046 b(|1915.06.15|)3138 b(|)h(|)3661 +b(|)6863 46684 y(B1)523 b(|Joan)2616 b(|female|1940.03.02|A0)2092 +b(|)3139 b(|)3661 b(|)6863 47901 y(B2)523 b(|Jane)2616 +b(|female|1942.07.07|A0)2092 b(|)3139 b(|)3661 b(|)6863 +49119 y(B3)523 b(|Bill)2616 b(|male)1046 b(|1944.12.01|A0)2092 +b(|)3139 b(|)3661 b(|)6863 50337 y(B4)523 b(|Peter)2093 +b(|male)1046 b(|1941.05.01|)3138 b(|)h(|)3661 b(|)1046 +b(3)6863 51554 y(C1)523 b(|Jack)2616 b(|male)1046 b(|1963.12.01|B4)2092 +b(|B2)h(|)3661 b(|)6863 52772 y(C2)523 b(|Sam)3139 b(|male)1046 +b(|1961.08.26|)3138 b(|B1)2093 b(|)3661 b(|)6863 53990 +y(C3)523 b(|Ann)3139 b(|female|1965.11.12|)f(|B3)2093 +b(|)3661 b(|)6863 55207 y(C4)523 b(|Lucy)2616 b(|female|1965.12.11|) +3138 b(|)h(|)3661 b(|)6863 56425 y(D1)523 b(|Mark)2616 +b(|male)1046 b(|1989.06.21|C1)2092 b(|C4)h(|yes)f(|)6863 +57642 y(D2)523 b(|Dina)2616 b(|female|1991.12.02|C1)2092 +b(|C4)h(|)3661 b(|)p 0 TeXcolorgray 0 TeXcolorgray 12708 +60078 a Fv(Listing)371 b(12:)493 b(First)369 b(Solution)i(to)f(the)g +(Problem)g(in)g(Listing)p 0 TeXcolorgray 38101 60078 +a +SDict begin H.S end + 38101 60078 a 0 TeXcolorgray Fv(11)p 0 TeXcolorgray +39207 59364 a +SDict begin H.R end + 39207 59364 a 39207 60078 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (lstlisting.11) cvn H.B /ANN pdfmark end + 39207 60078 +a 0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray +0 TeXcolorgray 25405 70071 a Fv(21)p 0 TeXcolorgray eop +end +%%Page: 22 22 +TeXDict begin 22 21 bop 0 TeXcolorgray 0 0 a +SDict begin /product where{pop product(Distiller)search{pop pop pop +version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto +closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show +grestore}if}{pop}ifelse}{pop}ifelse}if end + 0 0 a 0 +TeXcolorgray 6752 1660 a +SDict begin H.S end + 6752 1660 a 6752 1660 a +SDict begin H.R end + 6752 +1660 a 6752 1660 a +SDict begin [/View [/XYZ H.V]/Dest (page.22) cvn /DEST pdfmark end + 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray +0 TeXcolorgray 0 TeXcolorgray 41522 60180 a + gsave currentpoint currentpoint translate 90 neg rotate neg exch neg +exch translate + 41522 60180 +a 79317 47581 a +tx@Dict begin { -56.90549 56.90549 } PutCoor PutBegin end + 79317 47581 a 78530 47581 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@B3 16 {InitRnode } /NodeScale {} def NewNode end end + 78530 47581 +a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 79317 +47581 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 79317 47581 a 177 w Fp(Bill)79317 47581 y +tx@Dict begin PutEnd end + 79317 +47581 a 79317 47581 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 79317 47581 a 79494 48262 a Fx(I)28 +b(I:4)79317 47581 y +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 a +tx@Dict begin PutEnd end + 79317 +47581 a 79317 47581 a +tx@Dict begin { -113.81097 56.90549 } PutCoor PutBegin end + 79317 47581 a 78530 47581 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@B1 16 {InitRnode } /NodeScale {} def NewNode end end + 78530 +47581 a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial +79317 47581 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 79317 47581 a 177 w Fp(Joan)79317 47581 +y +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 79317 47581 a 79494 48262 +a Fx(I)g(I:3)79317 47581 y +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 +a +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 a +tx@Dict begin { -284.52744 56.90549 } PutCoor PutBegin end + 79317 47581 a 78530 47581 +a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@B4 16 {InitRnode } /NodeScale {} def NewNode end end + 78530 47581 a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial +79317 47581 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 79317 47581 a 177 w Fp(P)-24 b(eter)79317 +47581 y +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 79317 47581 a 79494 +48262 a Fx(I)28 b(I:1)79317 47581 y +tx@Dict begin PutEnd end + 79317 47581 a 79317 +47581 a +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 a +tx@Dict begin { -170.71646 56.90549 } PutCoor PutBegin end + 79317 47581 a 78530 +47581 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@B2 16 {InitRnode } /NodeScale {} def NewNode end end + 78530 47581 a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + + +@endspecial 79317 47581 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 79317 47581 a 177 w Fp(Jane)79317 +47581 y +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 79317 47581 a 79494 +48262 a Fx(I)g(I:2)79317 47581 y +tx@Dict begin PutEnd end + 79317 47581 a 79317 +47581 a +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 a +tx@Dict begin { -227.62195 56.90549 } PutCoor PutBegin end + 79317 47581 a 79317 +47581 a +tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@B4_m_B2 10 {InitPnode +} /NodeScale {} def NewNode end end + 79317 47581 a 79317 47581 a +tx@Dict begin PutEnd end + 79317 47581 a 79317 +47581 a +tx@Dict begin { -56.90549 0.0 } PutCoor PutBegin end + 79317 47581 a 78530 47581 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@C3 16 {InitRnode } /NodeScale {} def NewNode end end + 78530 47581 a 787 +w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 79317 47581 +a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 79317 47581 a 177 w Fp(Ann)79317 47581 y +tx@Dict begin PutEnd end + 79317 47581 +a 79317 47581 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 79317 47581 a 79494 48262 a Fx(I)g(I)g(I:3)79317 +47581 y +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 a +tx@Dict begin PutEnd end + 79317 47581 a 79317 +47581 a +tx@Dict begin { 0.0 0.0 } PutCoor PutBegin end + 79317 47581 a 79317 47581 a +tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@C1_m_C4 10 {InitPnode +} /NodeScale {} def NewNode end end + 79317 47581 a 79317 +47581 a +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 a +tx@Dict begin { -113.81097 0.0 } PutCoor PutBegin end + 79317 47581 a 78530 +47581 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@C2 16 {InitRnode } /NodeScale {} def NewNode end end + 78530 47581 a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + + +@endspecial 79317 47581 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 79317 47581 a 177 w Fp(Sam)79317 +47581 y +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 79317 47581 a 79494 +48262 a Fx(I)g(I)g(I:2)79317 47581 y +tx@Dict begin PutEnd end + 79317 47581 a 79317 +47581 a +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 a +tx@Dict begin { -227.62195 0.0 } PutCoor PutBegin end + 79317 47581 a 78530 +47581 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@C1 16 {InitRnode } /NodeScale {} def NewNode end end + 78530 47581 a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + + +@endspecial 79317 47581 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 79317 47581 a 177 w Fp(Jac)-24 +b(k)79317 47581 y +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 79317 47581 +a 79494 48262 a Fx(I)28 b(I)g(I:1)79317 47581 y +tx@Dict begin PutEnd end + 79317 +47581 a 79317 47581 a +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 a +tx@Dict begin { 56.90549 0.0 } PutCoor PutBegin end + 79317 +47581 a 78530 47581 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@C4 16 {InitRnode } /NodeScale {} def NewNode end end + 78530 47581 a 787 w @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 79317 47581 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 79317 47581 a +177 w Fp(Lucy)79317 47581 y +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 +a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 79317 47581 a 79494 48262 a Fx(I)g(I)g(I:4)79317 47581 +y +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 a +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 +a +tx@Dict begin { -113.81097 113.81097 } PutCoor PutBegin end + 79317 47581 a 78530 47581 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@A0 16 {InitRnode } /NodeScale {} def NewNode end end + 78530 47581 a 787 w @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 79317 47581 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 79317 47581 a +177 w Fp(John)79317 47581 y +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 +a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 79317 47581 a 79494 48262 a Fx(I:1)79317 47581 y +tx@Dict begin PutEnd end + 79317 +47581 a 79317 47581 a +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 a +tx@Dict begin { 28.45274 -56.90549 } PutCoor PutBegin end + 79317 +47581 a 78530 47581 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@D2 16 {InitRnode } /NodeScale {} def NewNode end end + 78530 47581 a 787 w @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 79317 47581 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 79317 47581 a +177 w Fp(Dina)79317 47581 y +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 +a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 79317 47581 a 79494 48262 a Fx(IV:2)79317 47581 y +tx@Dict begin PutEnd end + 79317 +47581 a 79317 47581 a +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 a +tx@Dict begin { -28.45274 -56.90549 } PutCoor PutBegin end + 79317 +47581 a 78530 47581 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@D1 16 {InitRnode } /NodeScale {} def NewNode end end + 78530 47581 a 787 w @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul +dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0 +0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub +moveto EndArrow } def /ArrowInside { } def 0.8 SLW 0 setgray +/ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4 +1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 +h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto +gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside +{ } def [ -8.2511 -8.2511 -15.6491 -15.6491 /Lineto /lineto load +def 0 setlinejoin false NArray n 0 eq not { n 1 eq { 0 0 /n 2 def +} if () length 0 gt { 1.5 2. CLW mul add dup 1.4 mul exch 0.4 mul +neg add /arrowlength exch def 4 copy /y1 ED /x1 ED /y2 ED /x2 ED /Alpha +y2 y1 sub x2 x1 sub Atan def ArrowA x1 Alpha cos arrowlength mul add +y1 Alpha sin arrowlength mul add /n n 1 sub def n { 4 copy /y1 ED /x1 +ED /y2 ED /x2 ED x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub Atan +def /ArrowPos 0. def /dArrowPos 0.5 abs def 1. cvi { /ArrowPos ArrowPos +dArrowPos add def x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos +mul add ArrowInside pop pop } repeat }{ /ArrowPos 0. def /dArrowPos +1. 1 gt {1.0 1. 1.0 add div }{0.5 } ifelse def 1. cvi { /ArrowPos +ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul x1 add y2 y1 sub +ArrowPos mul y1 add ArrowInside pop pop } repeat } ifelse pop pop Lineto +} repeat }{ ArrowA /n n 2 sub def n { Lineto } repeat } ifelse CP 4 +2 roll ArrowB L pop pop } if gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial +79317 47581 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 79317 47581 a 177 w Fp(Mark)79317 47581 +y +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 79317 47581 a 79494 48262 +a Fx(IV:1)79317 47581 y +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 a +tx@Dict begin PutEnd end + 79317 +47581 a 79317 47581 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@B3 /N@C3 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 79317 47581 a 79317 47581 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@B1 /N@C2 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 79317 +47581 a 79317 47581 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@B4_m_B2 /N@C1 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 79317 47581 a 79317 47581 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@B4_m_B2 /N@B2 InitNC { NCCoor tx@Dict begin +ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1 +0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length +x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos +0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def +1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul +x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat } +ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray + 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore + grestore end + 79317 +47581 a 79317 47581 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@B4_m_B2 /N@B4 InitNC { NCCoor tx@Dict begin +ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1 +0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length +x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos +0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def +1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul +x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat } +ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray + 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore + grestore end + 79317 47581 a 79317 47581 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@C1_m_C4 /N@D1 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 79317 +47581 a 79317 47581 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@C1_m_C4 /N@D2 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 79317 47581 a 79317 47581 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@C1_m_C4 /N@C4 InitNC { NCCoor tx@Dict begin +ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1 +0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length +x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos +0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def +1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul +x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat } +ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray + 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore + grestore end + 79317 +47581 a 79317 47581 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@C1 /N@C1_m_C4 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA 0. def /AngleB +180. def /ArmA 22.76227 def /ArmB 22.76227 def /ArmTypeA 0 def /ArmTypeB +0 def /loopsize 22.76227 def NCLoop } if end gsave 0.8 SLW 0 setgray + 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore + grestore end + 79317 47581 a 79317 47581 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@A0 /N@B2 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 79317 +47581 a 79317 47581 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@A0 /N@B1 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 79317 47581 a 79317 47581 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@A0 /N@B3 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 79317 +47581 a 91915 60180 a + currentpoint grestore moveto + 91915 60180 a 0 TeXcolorgray 17579 +62615 a Fv(Figure)369 b(6:)p 0 TeXcolorgray 22425 62615 +a +SDict begin H.S end + 22425 62615 a 22425 62615 a +SDict begin H.R end + 22425 62615 a 22425 62615 +a +SDict begin [/View [/XYZ H.V]/Dest (figure.6) cvn /DEST pdfmark end + 22425 62615 a 0 TeXcolorgray Fv(P)-31 b(edigree)370 +b(from)g(Listing)p 0 TeXcolorgray 33230 62615 a +SDict begin H.S end + 33230 +62615 a 0 TeXcolorgray Fv(12)p 0 TeXcolorgray 34336 61902 +a +SDict begin H.R end + 34336 61902 a 34336 62615 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (lstlisting.12) cvn H.B /ANN pdfmark end + 34336 62615 a 0 TeXcolorgray +0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray 25405 70071 +a Fv(22)p 0 TeXcolorgray eop end +%%Page: 23 23 +TeXDict begin 23 22 bop 0 TeXcolorgray 0 0 a +SDict begin /product where{pop product(Distiller)search{pop pop pop +version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto +closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show +grestore}if}{pop}ifelse}{pop}ifelse}if end + 0 0 a 0 +TeXcolorgray 6752 1660 a +SDict begin H.S end + 6752 1660 a 6752 1660 a +SDict begin H.R end + 6752 +1660 a 6752 1660 a +SDict begin [/View [/XYZ H.V]/Dest (page.23) cvn /DEST pdfmark end + 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray +0 TeXcolorgray 0 TeXcolorgray 38359 25738 a +tx@Dict begin { -170.71646 56.90549 } PutCoor PutBegin end + 38359 25738 +a 37572 25738 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@B3 16 {InitRnode } /NodeScale {} def NewNode end end + 37572 25738 a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + + +@endspecial 38359 25738 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 38359 25738 a 177 w Fp(Bill)38359 +25738 y +tx@Dict begin PutEnd end + 38359 25738 a 38359 25738 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 38359 25738 a 38536 +26419 a Fx(I)28 b(I:2)38359 25738 y +tx@Dict begin PutEnd end + 38359 25738 a 38359 +25738 a +tx@Dict begin PutEnd end + 38359 25738 a 38359 25738 a +tx@Dict begin { -227.62195 56.90549 } PutCoor PutBegin end + 38359 25738 a 37572 +25738 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@B1 16 {InitRnode } /NodeScale {} def NewNode end end + 37572 25738 a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + + +@endspecial 38359 25738 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 38359 25738 a 177 w Fp(Joan)38359 +25738 y +tx@Dict begin PutEnd end + 38359 25738 a 38359 25738 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 38359 25738 a 38536 +26419 a Fx(I)g(I:1)38359 25738 y +tx@Dict begin PutEnd end + 38359 25738 a 38359 +25738 a +tx@Dict begin PutEnd end + 38359 25738 a 38359 25738 a +tx@Dict begin { 0.0 56.90549 } PutCoor PutBegin end + 38359 25738 a 37572 +25738 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@B4 16 {InitRnode } /NodeScale {} def NewNode end end + 37572 25738 a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + + +@endspecial 38359 25738 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 38359 25738 a 177 w Fp(P)-24 +b(eter)38359 25738 y +tx@Dict begin PutEnd end + 38359 25738 a 38359 25738 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 38359 +25738 a 38536 26419 a Fx(I)28 b(I:4)38359 25738 y +tx@Dict begin PutEnd end + 38359 +25738 a 38359 25738 a +tx@Dict begin PutEnd end + 38359 25738 a 38359 25738 a +tx@Dict begin { -113.81097 56.90549 } PutCoor PutBegin end + 38359 +25738 a 37572 25738 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@B2 16 {InitRnode } /NodeScale {} def NewNode end end + 37572 25738 a 787 w @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 38359 25738 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 38359 25738 a +177 w Fp(Jane)38359 25738 y +tx@Dict begin PutEnd end + 38359 25738 a 38359 25738 +a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 38359 25738 a 38536 26419 a Fx(I)g(I:3)38359 25738 +y +tx@Dict begin PutEnd end + 38359 25738 a 38359 25738 a +tx@Dict begin PutEnd end + 38359 25738 a 38359 25738 +a +tx@Dict begin { -56.90549 56.90549 } PutCoor PutBegin end + 38359 25738 a 38359 25738 a +tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@B4_m_B2 10 {InitPnode +} /NodeScale {} def NewNode end end + 38359 25738 a 38359 25738 +a +tx@Dict begin PutEnd end + 38359 25738 a 38359 25738 a +tx@Dict begin { -170.71646 0.0 } PutCoor PutBegin end + 38359 25738 a 37572 25738 +a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@C3 16 {InitRnode } /NodeScale {} def NewNode end end + 37572 25738 a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial +38359 25738 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 38359 25738 a 177 w Fp(Ann)38359 25738 +y +tx@Dict begin PutEnd end + 38359 25738 a 38359 25738 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 38359 25738 a 38536 26419 +a Fx(I)g(I)g(I:2)38359 25738 y +tx@Dict begin PutEnd end + 38359 25738 a 38359 25738 +a +tx@Dict begin PutEnd end + 38359 25738 a 38359 25738 a +tx@Dict begin { 0.0 0.0 } PutCoor PutBegin end + 38359 25738 a 38359 25738 +a +tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@C1_m_C4 10 {InitPnode +} /NodeScale {} def NewNode end end + 38359 25738 a 38359 25738 a +tx@Dict begin PutEnd end + 38359 25738 a 38359 25738 +a +tx@Dict begin { -227.62195 0.0 } PutCoor PutBegin end + 38359 25738 a 37572 25738 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@C2 16 {InitRnode } /NodeScale {} def NewNode end end + 37572 25738 a 787 w @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 38359 25738 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 38359 25738 a +177 w Fp(Sam)38359 25738 y +tx@Dict begin PutEnd end + 38359 25738 a 38359 25738 +a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 38359 25738 a 38536 26419 a Fx(I)g(I)g(I:1)38359 25738 +y +tx@Dict begin PutEnd end + 38359 25738 a 38359 25738 a +tx@Dict begin PutEnd end + 38359 25738 a 38359 25738 +a +tx@Dict begin { -56.90549 0.0 } PutCoor PutBegin end + 38359 25738 a 37572 25738 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@C1 16 {InitRnode } /NodeScale {} def NewNode end end + 37572 25738 a 787 w @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 38359 25738 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 38359 25738 a +177 w Fp(Jac)-24 b(k)38359 25738 y +tx@Dict begin PutEnd end + 38359 25738 a 38359 +25738 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 38359 25738 a 38536 26419 a Fx(I)28 b(I)g(I:3)38359 +25738 y +tx@Dict begin PutEnd end + 38359 25738 a 38359 25738 a +tx@Dict begin PutEnd end + 38359 25738 a 38359 +25738 a +tx@Dict begin { 56.90549 0.0 } PutCoor PutBegin end + 38359 25738 a 37572 25738 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@C4 16 {InitRnode } /NodeScale {} def NewNode end end + 37572 25738 a 787 +w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 38359 25738 +a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 38359 25738 a 177 w Fp(Lucy)38359 25738 y +tx@Dict begin PutEnd end + 38359 25738 +a 38359 25738 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 38359 25738 a 38536 26419 a Fx(I)g(I)g(I:4)38359 +25738 y +tx@Dict begin PutEnd end + 38359 25738 a 38359 25738 a +tx@Dict begin PutEnd end + 38359 25738 a 38359 +25738 a +tx@Dict begin { -170.71646 113.81097 } PutCoor PutBegin end + 38359 25738 a 37572 25738 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@A0 16 {InitRnode } /NodeScale {} def NewNode end end + 37572 25738 a 787 +w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 38359 25738 +a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 38359 25738 a 177 w Fp(John)38359 25738 y +tx@Dict begin PutEnd end + 38359 25738 +a 38359 25738 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 38359 25738 a 38536 26419 a Fx(I:1)38359 +25738 y +tx@Dict begin PutEnd end + 38359 25738 a 38359 25738 a +tx@Dict begin PutEnd end + 38359 25738 a 38359 +25738 a +tx@Dict begin { 28.45274 -56.90549 } PutCoor PutBegin end + 38359 25738 a 37572 25738 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@D2 16 {InitRnode } /NodeScale {} def NewNode end end + 37572 25738 a 787 +w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 38359 25738 +a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 38359 25738 a 177 w Fp(Dina)38359 25738 y +tx@Dict begin PutEnd end + 38359 25738 +a 38359 25738 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 38359 25738 a 38536 26419 a Fx(IV:2)38359 +25738 y +tx@Dict begin PutEnd end + 38359 25738 a 38359 25738 a +tx@Dict begin PutEnd end + 38359 25738 a 38359 +25738 a +tx@Dict begin { -28.45274 -56.90549 } PutCoor PutBegin end + 38359 25738 a 37572 25738 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@D1 16 {InitRnode } /NodeScale {} def NewNode end end + 37572 25738 a 787 +w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul +dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0 +0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub +moveto EndArrow } def /ArrowInside { } def 0.8 SLW 0 setgray +/ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4 +1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 +h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto +gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside +{ } def [ -8.2511 -8.2511 -15.6491 -15.6491 /Lineto /lineto load +def 0 setlinejoin false NArray n 0 eq not { n 1 eq { 0 0 /n 2 def +} if () length 0 gt { 1.5 2. CLW mul add dup 1.4 mul exch 0.4 mul +neg add /arrowlength exch def 4 copy /y1 ED /x1 ED /y2 ED /x2 ED /Alpha +y2 y1 sub x2 x1 sub Atan def ArrowA x1 Alpha cos arrowlength mul add +y1 Alpha sin arrowlength mul add /n n 1 sub def n { 4 copy /y1 ED /x1 +ED /y2 ED /x2 ED x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub Atan +def /ArrowPos 0. def /dArrowPos 0.5 abs def 1. cvi { /ArrowPos ArrowPos +dArrowPos add def x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos +mul add ArrowInside pop pop } repeat }{ /ArrowPos 0. def /dArrowPos +1. 1 gt {1.0 1. 1.0 add div }{0.5 } ifelse def 1. cvi { /ArrowPos +ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul x1 add y2 y1 sub +ArrowPos mul y1 add ArrowInside pop pop } repeat } ifelse pop pop Lineto +} repeat }{ ArrowA /n n 2 sub def n { Lineto } repeat } ifelse CP 4 +2 roll ArrowB L pop pop } if gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 38359 25738 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 38359 25738 a +177 w Fp(Mark)38359 25738 y +tx@Dict begin PutEnd end + 38359 25738 a 38359 25738 +a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 38359 25738 a 38536 26419 a Fx(IV:1)38359 25738 y +tx@Dict begin PutEnd end + 38359 +25738 a 38359 25738 a +tx@Dict begin PutEnd end + 38359 25738 a 38359 25738 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@B3 /N@C3 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 38359 +25738 a 38359 25738 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@B1 /N@C2 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 38359 25738 a 38359 25738 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@B4_m_B2 /N@C1 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 38359 +25738 a 38359 25738 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@B4_m_B2 /N@B2 InitNC { NCCoor tx@Dict begin +ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1 +0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length +x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos +0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def +1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul +x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat } +ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray + 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore + grestore end + 38359 25738 a 38359 25738 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@B4_m_B2 /N@B4 InitNC { NCCoor tx@Dict begin +ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1 +0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length +x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos +0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def +1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul +x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat } +ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray + 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore + grestore end + 38359 +25738 a 38359 25738 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@C1_m_C4 /N@D1 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 38359 25738 a 38359 25738 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@C1_m_C4 /N@D2 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 38359 +25738 a 38359 25738 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@C1_m_C4 /N@C4 InitNC { NCCoor tx@Dict begin +ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1 +0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length +x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos +0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def +1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul +x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat } +ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray + 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore + grestore end + 38359 25738 a 38359 25738 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@C1_m_C4 /N@C1 InitNC { NCCoor tx@Dict begin +ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1 +0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length +x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos +0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def +1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul +x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat } +ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray + 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore + grestore end + 38359 +25738 a 38359 25738 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@A0 /N@B1 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 38359 25738 a 38359 25738 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@A0 /N@B3 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 38359 +25738 a 38359 25738 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@A0 /N@B2 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 38359 25738 a 0 TeXcolorgray 17579 +42100 a Fv(Figure)369 b(7:)p 0 TeXcolorgray 22425 42100 +a +SDict begin H.S end + 22425 42100 a 22425 42100 a +SDict begin H.R end + 22425 42100 a 22425 42100 +a +SDict begin [/View [/XYZ H.V]/Dest (figure.7) cvn /DEST pdfmark end + 22425 42100 a 0 TeXcolorgray Fv(P)-31 b(edigree)370 +b(from)g(Listing)p 0 TeXcolorgray 33230 42100 a +SDict begin H.S end + 33230 +42100 a 0 TeXcolorgray Fv(12)p 0 TeXcolorgray 34336 41387 +a +SDict begin H.R end + 34336 41387 a 34336 42100 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (lstlisting.12) cvn H.B /ANN pdfmark end + 34336 42100 a 0 TeXcolorgray +0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray 6863 45813 +a +SDict begin H.S end + 6863 45813 a 6863 45813 a +SDict begin 12 H.A end + 6863 45813 a 6863 45813 a +SDict begin [/View [/XYZ H.V]/Dest (lstlisting.13) cvn /DEST pdfmark +end + +6863 45813 a 6863 46742 a +SDict begin H.S end + 6863 46742 a 6863 46742 a +SDict begin 12 H.A end + 6863 +46742 a 6863 46742 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.13.1) cvn /DEST pdfmark +end + 6863 46742 a 1218 x Fw(Id)523 b(|Name)2616 +b(|Sex)1569 b(|DoB)3661 b(|Father|Mother|Proband|SortOrder)6863 +49178 y(A0)523 b(|John)2616 b(|male)1046 b(|1915.06.15|)3138 +b(|)h(|)3661 b(|)6863 50395 y(B1)523 b(|Joan)2616 b +(|female|1940.03.02|A0)2092 b(|)3139 b(|)3661 b(|)6863 +51613 y(B2)523 b(|Jane)2616 b(|female|1942.07.07|A0)2092 +b(|)3139 b(|)3661 b(|)6863 52831 y(B3)523 b(|Bill)2616 +b(|male)1046 b(|1944.12.01|A0)2092 b(|)3139 b(|)3661 +b(|)6863 54048 y(B4)523 b(|Peter)2093 b(|male)1046 b(|1941.05.01|)3138 +b(|)h(|)3661 b(|)6863 55266 y(C1)523 b(|Jack)2616 b(|male)1046 +b(|1963.12.01|B4)2092 b(|B2)h(|)3661 b(|)6863 56484 y(C2)523 +b(|Sam)3139 b(|male)1046 b(|1961.08.26|)3138 b(|B1)2093 +b(|)3661 b(|)6863 57701 y(C3)523 b(|Ann)3139 b(|female|1965.11.12|)f +(|B3)2093 b(|)3661 b(|)6863 58919 y(C4)523 b(|Lucy)2616 +b(|female|1965.12.11|)3138 b(|)h(|)3661 b(|)523 b(-3)6863 +60137 y(D1)g(|Mark)2616 b(|male)1046 b(|1989.06.21|C1)2092 +b(|C4)h(|yes)f(|)6863 61354 y(D2)523 b(|Dina)2616 b +(|female|1991.12.02|C1)2092 b(|C4)h(|)3661 b(|)p 0 TeXcolorgray +0 TeXcolorgray 12183 63790 a Fv(Listing)370 b(13:)494 +b(Second)369 b(Solution)i(to)f(the)g(Problem)g(in)f(Listing)p +0 TeXcolorgray 38627 63790 a +SDict begin H.S end + 38627 63790 a 0 TeXcolorgray +Fv(11)p 0 TeXcolorgray 39733 63076 a +SDict begin H.R end + 39733 63076 a 39733 +63790 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (lstlisting.11) cvn H.B /ANN pdfmark end + 39733 63790 a 0 TeXcolorgray 0 TeXcolorgray 0 +TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray 25405 70071 +a Fv(23)p 0 TeXcolorgray eop end +%%Page: 24 24 +TeXDict begin 24 23 bop 0 TeXcolorgray 0 0 a +SDict begin /product where{pop product(Distiller)search{pop pop pop +version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto +closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show +grestore}if}{pop}ifelse}{pop}ifelse}if end + 0 0 a 0 +TeXcolorgray 6752 1660 a +SDict begin H.S end + 6752 1660 a 6752 1660 a +SDict begin H.R end + 6752 +1660 a 6752 1660 a +SDict begin [/View [/XYZ H.V]/Dest (page.24) cvn /DEST pdfmark end + 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray +0 TeXcolorgray 0 TeXcolorgray 19462 25129 a +tx@Dict begin { 227.62195 56.90549 } PutCoor PutBegin end + 19462 25129 +a 18675 25129 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@B3 16 {InitRnode } /NodeScale {} def NewNode end end + 18675 25129 a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + + +@endspecial 19462 25129 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 19462 25129 a 177 w Fp(Bill)19462 +25129 y +tx@Dict begin PutEnd end + 19462 25129 a 19462 25129 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 19462 25129 a 19639 +25810 a Fx(I)28 b(I:4)19462 25129 y +tx@Dict begin PutEnd end + 19462 25129 a 19462 +25129 a +tx@Dict begin PutEnd end + 19462 25129 a 19462 25129 a +tx@Dict begin { 170.71646 56.90549 } PutCoor PutBegin end + 19462 25129 a 18675 +25129 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@B1 16 {InitRnode } /NodeScale {} def NewNode end end + 18675 25129 a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + + +@endspecial 19462 25129 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 19462 25129 a 177 w Fp(Joan)19462 +25129 y +tx@Dict begin PutEnd end + 19462 25129 a 19462 25129 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 19462 25129 a 19639 +25810 a Fx(I)g(I:3)19462 25129 y +tx@Dict begin PutEnd end + 19462 25129 a 19462 +25129 a +tx@Dict begin PutEnd end + 19462 25129 a 19462 25129 a +tx@Dict begin { 0.0 56.90549 } PutCoor PutBegin end + 19462 25129 a 18675 +25129 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@B4 16 {InitRnode } /NodeScale {} def NewNode end end + 18675 25129 a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + + +@endspecial 19462 25129 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 19462 25129 a 177 w Fp(P)-24 +b(eter)19462 25129 y +tx@Dict begin PutEnd end + 19462 25129 a 19462 25129 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 19462 +25129 a 19639 25810 a Fx(I)28 b(I:1)19462 25129 y +tx@Dict begin PutEnd end + 19462 +25129 a 19462 25129 a +tx@Dict begin PutEnd end + 19462 25129 a 19462 25129 a +tx@Dict begin { 113.81097 56.90549 } PutCoor PutBegin end + 19462 +25129 a 18675 25129 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@B2 16 {InitRnode } /NodeScale {} def NewNode end end + 18675 25129 a 787 w @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 19462 25129 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 19462 25129 a +177 w Fp(Jane)19462 25129 y +tx@Dict begin PutEnd end + 19462 25129 a 19462 25129 +a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 19462 25129 a 19639 25810 a Fx(I)g(I:2)19462 25129 +y +tx@Dict begin PutEnd end + 19462 25129 a 19462 25129 a +tx@Dict begin PutEnd end + 19462 25129 a 19462 25129 +a +tx@Dict begin { 56.90549 56.90549 } PutCoor PutBegin end + 19462 25129 a 19462 25129 a +tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@B4_m_B2 10 {InitPnode +} /NodeScale {} def NewNode end end + 19462 25129 a 19462 25129 +a +tx@Dict begin PutEnd end + 19462 25129 a 19462 25129 a +tx@Dict begin { 227.62195 0.0 } PutCoor PutBegin end + 19462 25129 a 18675 25129 +a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@C3 16 {InitRnode } /NodeScale {} def NewNode end end + 18675 25129 a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial +19462 25129 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 19462 25129 a 177 w Fp(Ann)19462 25129 +y +tx@Dict begin PutEnd end + 19462 25129 a 19462 25129 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 19462 25129 a 19639 25810 +a Fx(I)g(I)g(I:4)19462 25129 y +tx@Dict begin PutEnd end + 19462 25129 a 19462 25129 +a +tx@Dict begin PutEnd end + 19462 25129 a 19462 25129 a +tx@Dict begin { 0.0 0.0 } PutCoor PutBegin end + 19462 25129 a 19462 25129 +a +tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@C1_m_C4 10 {InitPnode +} /NodeScale {} def NewNode end end + 19462 25129 a 19462 25129 a +tx@Dict begin PutEnd end + 19462 25129 a 19462 25129 +a +tx@Dict begin { 170.71646 0.0 } PutCoor PutBegin end + 19462 25129 a 18675 25129 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@C2 16 {InitRnode } /NodeScale {} def NewNode end end + 18675 25129 a 787 w @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 19462 25129 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 19462 25129 a +177 w Fp(Sam)19462 25129 y +tx@Dict begin PutEnd end + 19462 25129 a 19462 25129 +a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 19462 25129 a 19639 25810 a Fx(I)g(I)g(I:3)19462 25129 +y +tx@Dict begin PutEnd end + 19462 25129 a 19462 25129 a +tx@Dict begin PutEnd end + 19462 25129 a 19462 25129 +a +tx@Dict begin { 56.90549 0.0 } PutCoor PutBegin end + 19462 25129 a 18675 25129 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@C1 16 {InitRnode } /NodeScale {} def NewNode end end + 18675 25129 a 787 w @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 19462 25129 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 19462 25129 a +177 w Fp(Jac)-24 b(k)19462 25129 y +tx@Dict begin PutEnd end + 19462 25129 a 19462 +25129 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 19462 25129 a 19639 25810 a Fx(I)28 b(I)g(I:2)19462 +25129 y +tx@Dict begin PutEnd end + 19462 25129 a 19462 25129 a +tx@Dict begin PutEnd end + 19462 25129 a 19462 +25129 a +tx@Dict begin { -56.90549 0.0 } PutCoor PutBegin end + 19462 25129 a 18675 25129 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@C4 16 {InitRnode } /NodeScale {} def NewNode end end + 18675 25129 a 787 +w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 19462 25129 +a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 19462 25129 a 177 w Fp(Lucy)19462 25129 y +tx@Dict begin PutEnd end + 19462 25129 +a 19462 25129 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 19462 25129 a 19639 25810 a Fx(I)g(I)g(I:1)19462 +25129 y +tx@Dict begin PutEnd end + 19462 25129 a 19462 25129 a +tx@Dict begin PutEnd end + 19462 25129 a 19462 +25129 a +tx@Dict begin { 170.71646 113.81097 } PutCoor PutBegin end + 19462 25129 a 18675 25129 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@A0 16 {InitRnode } /NodeScale {} def NewNode end end + 18675 25129 a 787 +w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 19462 25129 +a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 19462 25129 a 177 w Fp(John)19462 25129 y +tx@Dict begin PutEnd end + 19462 25129 +a 19462 25129 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 19462 25129 a 19639 25810 a Fx(I:1)19462 +25129 y +tx@Dict begin PutEnd end + 19462 25129 a 19462 25129 a +tx@Dict begin PutEnd end + 19462 25129 a 19462 +25129 a +tx@Dict begin { 28.45274 -56.90549 } PutCoor PutBegin end + 19462 25129 a 18675 25129 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@D2 16 {InitRnode } /NodeScale {} def NewNode end end + 18675 25129 a 787 +w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 19462 25129 +a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 19462 25129 a 177 w Fp(Dina)19462 25129 y +tx@Dict begin PutEnd end + 19462 25129 +a 19462 25129 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 19462 25129 a 19639 25810 a Fx(IV:2)19462 +25129 y +tx@Dict begin PutEnd end + 19462 25129 a 19462 25129 a +tx@Dict begin PutEnd end + 19462 25129 a 19462 +25129 a +tx@Dict begin { -28.45274 -56.90549 } PutCoor PutBegin end + 19462 25129 a 18675 25129 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@D1 16 {InitRnode } /NodeScale {} def NewNode end end + 18675 25129 a 787 +w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul +dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0 +0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub +moveto EndArrow } def /ArrowInside { } def 0.8 SLW 0 setgray +/ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4 +1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 +h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto +gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside +{ } def [ -8.2511 -8.2511 -15.6491 -15.6491 /Lineto /lineto load +def 0 setlinejoin false NArray n 0 eq not { n 1 eq { 0 0 /n 2 def +} if () length 0 gt { 1.5 2. CLW mul add dup 1.4 mul exch 0.4 mul +neg add /arrowlength exch def 4 copy /y1 ED /x1 ED /y2 ED /x2 ED /Alpha +y2 y1 sub x2 x1 sub Atan def ArrowA x1 Alpha cos arrowlength mul add +y1 Alpha sin arrowlength mul add /n n 1 sub def n { 4 copy /y1 ED /x1 +ED /y2 ED /x2 ED x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub Atan +def /ArrowPos 0. def /dArrowPos 0.5 abs def 1. cvi { /ArrowPos ArrowPos +dArrowPos add def x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos +mul add ArrowInside pop pop } repeat }{ /ArrowPos 0. def /dArrowPos +1. 1 gt {1.0 1. 1.0 add div }{0.5 } ifelse def 1. cvi { /ArrowPos +ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul x1 add y2 y1 sub +ArrowPos mul y1 add ArrowInside pop pop } repeat } ifelse pop pop Lineto +} repeat }{ ArrowA /n n 2 sub def n { Lineto } repeat } ifelse CP 4 +2 roll ArrowB L pop pop } if gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 19462 25129 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 19462 25129 a +177 w Fp(Mark)19462 25129 y +tx@Dict begin PutEnd end + 19462 25129 a 19462 25129 +a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 19462 25129 a 19639 25810 a Fx(IV:1)19462 25129 y +tx@Dict begin PutEnd end + 19462 +25129 a 19462 25129 a +tx@Dict begin PutEnd end + 19462 25129 a 19462 25129 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@B3 /N@C3 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 19462 +25129 a 19462 25129 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@B1 /N@C2 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 19462 25129 a 19462 25129 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@B4_m_B2 /N@C1 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 19462 +25129 a 19462 25129 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@B4_m_B2 /N@B2 InitNC { NCCoor tx@Dict begin +ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1 +0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length +x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos +0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def +1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul +x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat } +ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray + 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore + grestore end + 19462 25129 a 19462 25129 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@B4_m_B2 /N@B4 InitNC { NCCoor tx@Dict begin +ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1 +0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length +x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos +0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def +1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul +x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat } +ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray + 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore + grestore end + 19462 +25129 a 19462 25129 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@C1_m_C4 /N@D1 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 19462 25129 a 19462 25129 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@C1_m_C4 /N@D2 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 19462 +25129 a 19462 25129 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@C1_m_C4 /N@C4 InitNC { NCCoor tx@Dict begin +ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1 +0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length +x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos +0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def +1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul +x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat } +ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray + 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore + grestore end + 19462 25129 a 19462 25129 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@C1_m_C4 /N@C1 InitNC { NCCoor tx@Dict begin +ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1 +0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length +x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos +0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def +1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul +x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat } +ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray + 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore + grestore end + 19462 +25129 a 19462 25129 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@A0 /N@B2 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 19462 25129 a 19462 25129 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@A0 /N@B1 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 19462 +25129 a 19462 25129 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@A0 /N@B3 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 19462 25129 a 0 TeXcolorgray 17579 +41491 a Fv(Figure)369 b(8:)p 0 TeXcolorgray 22425 41491 +a +SDict begin H.S end + 22425 41491 a 22425 41491 a +SDict begin H.R end + 22425 41491 a 22425 41491 +a +SDict begin [/View [/XYZ H.V]/Dest (figure.8) cvn /DEST pdfmark end + 22425 41491 a 0 TeXcolorgray Fv(P)-31 b(edigree)370 +b(from)g(Listing)p 0 TeXcolorgray 33230 41491 a +SDict begin H.S end + 33230 +41491 a 0 TeXcolorgray Fv(13)p 0 TeXcolorgray 34336 40778 +a +SDict begin H.R end + 34336 40778 a 34336 41491 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (lstlisting.13) cvn H.B /ANN pdfmark end + 34336 41491 a 0 TeXcolorgray +0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray 6863 43986 +a +SDict begin H.S end + 6863 43986 a 6863 43986 a +SDict begin 12 H.A end + 6863 43986 a 6863 43986 a +SDict begin [/View [/XYZ H.V]/Dest (lstlisting.14) cvn /DEST pdfmark +end + +6863 43986 a 6863 44916 a +SDict begin H.S end + 6863 44916 a 6863 44916 a +SDict begin 12 H.A end + 6863 +44916 a 6863 44916 a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.14.1) cvn /DEST pdfmark +end + 6863 44916 a 1218 x Fw(Id)523 b(|Name)2616 +b(|Sex)1569 b(|DoB)3661 b(|Father|Mother|Proband)6863 +47351 y(A0)523 b(|John)2616 b(|male)1046 b(|1915.06.15|)3138 +b(|)h(|)6863 48569 y(B1)523 b(|Sam)3139 b(|male)1046 +b(|1935.12.04|A0)2092 b(|)3139 b(|)6863 49787 y(B2)523 +b(|Ann)3139 b(|female|1937.03.02|A0)2092 b(|)3139 b(|)6863 +51004 y(C1)523 b(|Paul)2616 b(|male)1046 b(|1952.10.03|B1)2092 +b(|)3139 b(|)6863 52222 y(F1)523 b(|Scott)2093 b(|male)1046 +b(|1912.02.01|)3138 b(|)h(|)6863 53440 y(G1)523 b(|Simon)2093 +b(|male)1046 b(|1934.09.17|F1)2092 b(|)3139 b(|)6863 +54657 y(G2)523 b(|Sarah)2093 b(|female|1936.12.19|F1)f(|)3139 +b(|)6863 55875 y(H1)523 b(|Lola)2616 b(|female|1960.04.13|G2)2092 +b(|)3139 b(|)6863 57093 y(K1)523 b(|Jim)3139 b(|male)1046 +b(|1962.11.05|G1)2092 b(|B2)h(|)6863 58310 y(M1)523 b(|Jane)2616 +b(|female|1917.02.13|)3138 b(|)h(|)6863 59528 y(P1)523 +b(|Simon)2093 b(|male)1046 b(|1935.10.04|)3138 b(|)523 +b(M1)1570 b(|)6863 60745 y(R1)523 b(|Pam)3139 b(|female|1964.02.05|P1) +2092 b(|)3139 b(|)6863 61963 y(X1)523 b(|James)2093 b(|male)1046 +b(|1988.07.12|K1)2092 b(|R1)h(|yes)p 0 TeXcolorgray 0 +TeXcolorgray 11771 64398 a Fv(Listing)370 b(14:)493 b(A)370 +b(P)-31 b(edigree)370 b(with)g(Una)-31 b(v)g(oidable)372 +b(Self-In)-31 b(tersections)p 0 TeXcolorgray 0 TeXcolorgray +0 TeXcolorgray 0 TeXcolorgray 25405 70071 a(24)p 0 TeXcolorgray +eop end +%%Page: 25 25 +TeXDict begin 25 24 bop 0 TeXcolorgray 0 0 a +SDict begin /product where{pop product(Distiller)search{pop pop pop +version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto +closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show +grestore}if}{pop}ifelse}{pop}ifelse}if end + 0 0 a 0 +TeXcolorgray 6752 1660 a +SDict begin H.S end + 6752 1660 a 6752 1660 a +SDict begin H.R end + 6752 +1660 a 6752 1660 a +SDict begin [/View [/XYZ H.V]/Dest (page.25) cvn /DEST pdfmark end + 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray +0 TeXcolorgray 0 TeXcolorgray 41522 60180 a + gsave currentpoint currentpoint translate 90 neg rotate neg exch neg +exch translate + 41522 60180 +a 79317 47581 a +tx@Dict begin { -227.62195 56.90549 } PutCoor PutBegin end + 79317 47581 a 78530 47581 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@G1 16 {InitRnode } /NodeScale {} def NewNode end end + 78530 47581 +a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 79317 +47581 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 79317 47581 a 177 w Fp(Simon)79317 47581 y +tx@Dict begin PutEnd end + 79317 +47581 a 79317 47581 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 79317 47581 a 79494 48262 a Fx(I)28 +b(I:2)79317 47581 y +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 a +tx@Dict begin PutEnd end + 79317 +47581 a 79317 47581 a +tx@Dict begin { -284.52744 56.90549 } PutCoor PutBegin end + 79317 47581 a 78530 47581 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@G2 16 {InitRnode } /NodeScale {} def NewNode end end + 78530 +47581 a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial +79317 47581 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 79317 47581 a 177 w Fp(Sarah)79317 47581 +y +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 79317 47581 a 79494 48262 +a Fx(I)g(I:1)79317 47581 y +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 +a +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 a +tx@Dict begin { -56.90549 56.90549 } PutCoor PutBegin end + 79317 47581 a 78530 47581 +a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@B1 16 {InitRnode } /NodeScale {} def NewNode end end + 78530 47581 a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial +79317 47581 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 79317 47581 a 177 w Fp(Sam)79317 47581 +y +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 79317 47581 a 79494 48262 +a Fx(I)g(I:4)79317 47581 y +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 +a +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 a +tx@Dict begin { -113.81097 56.90549 } PutCoor PutBegin end + 79317 47581 a 78530 47581 +a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@B2 16 {InitRnode } /NodeScale {} def NewNode end end + 78530 47581 a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial +79317 47581 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 79317 47581 a 177 w Fp(Ann)79317 47581 +y +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 79317 47581 a 79494 48262 +a Fx(I)g(I:3)79317 47581 y +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 +a +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 a +tx@Dict begin { 56.90549 56.90549 } PutCoor PutBegin end + 79317 47581 a 78530 47581 +a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@P1 16 {InitRnode } /NodeScale {} def NewNode end end + 78530 47581 a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial +79317 47581 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 79317 47581 a 177 w Fp(Simon)79317 47581 +y +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 79317 47581 a 79494 48262 +a Fx(I)g(I:5)79317 47581 y +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 +a +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 a +tx@Dict begin { -170.71646 56.90549 } PutCoor PutBegin end + 79317 47581 a 79317 47581 +a +tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@G1_m_B2 10 {InitPnode +} /NodeScale {} def NewNode end end + 79317 47581 a 79317 47581 a +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 +a +tx@Dict begin { 56.90549 0.0 } PutCoor PutBegin end + 79317 47581 a 78530 47581 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@R1 16 {InitRnode } /NodeScale {} def NewNode end end + 78530 47581 a 787 w @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 79317 47581 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 79317 47581 a +177 w Fp(P)-24 b(am)79317 47581 y +tx@Dict begin PutEnd end + 79317 47581 a 79317 +47581 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 79317 47581 a 79494 48262 a Fx(I)28 b(I)g(I:4)79317 +47581 y +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 a +tx@Dict begin PutEnd end + 79317 47581 a 79317 +47581 a +tx@Dict begin { -284.52744 0.0 } PutCoor PutBegin end + 79317 47581 a 78530 47581 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@H1 16 {InitRnode } /NodeScale {} def NewNode end end + 78530 47581 a 787 +w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 79317 47581 +a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 79317 47581 a 177 w Fp(Lola)79317 47581 y +tx@Dict begin PutEnd end + 79317 47581 +a 79317 47581 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 79317 47581 a 79494 48262 a Fx(I)g(I)g(I:1)79317 +47581 y +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 a +tx@Dict begin PutEnd end + 79317 47581 a 79317 +47581 a +tx@Dict begin { 0.0 0.0 } PutCoor PutBegin end + 79317 47581 a 79317 47581 a +tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@K1_m_R1 10 {InitPnode +} /NodeScale {} def NewNode end end + 79317 47581 a 79317 +47581 a +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 a +tx@Dict begin { -170.71646 0.0 } PutCoor PutBegin end + 79317 47581 a 78530 +47581 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@K1 16 {InitRnode } /NodeScale {} def NewNode end end + 78530 47581 a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + + +@endspecial 79317 47581 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 79317 47581 a 177 w Fp(Jim)79317 +47581 y +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 79317 47581 a 79494 +48262 a Fx(I)g(I)g(I:2)79317 47581 y +tx@Dict begin PutEnd end + 79317 47581 a 79317 +47581 a +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 a +tx@Dict begin { -56.90549 0.0 } PutCoor PutBegin end + 79317 47581 a 78530 +47581 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@C1 16 {InitRnode } /NodeScale {} def NewNode end end + 78530 47581 a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + + +@endspecial 79317 47581 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 79317 47581 a 177 w Fp(P)-24 +b(aul)79317 47581 y +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 79317 +47581 a 79494 48262 a Fx(I)28 b(I)g(I:3)79317 47581 y +tx@Dict begin PutEnd end + +79317 47581 a 79317 47581 a +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 +a +tx@Dict begin { 56.90549 113.81097 } PutCoor PutBegin end + 79317 47581 a 78530 47581 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@M1 16 {InitRnode } /NodeScale {} def NewNode end end + 78530 47581 a 787 w @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 79317 47581 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 79317 47581 a +177 w Fp(Jane)79317 47581 y +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 +a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 79317 47581 a 79494 48262 a Fx(I:3)79317 47581 y +tx@Dict begin PutEnd end + 79317 +47581 a 79317 47581 a +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 a +tx@Dict begin { -85.35823 113.81097 } PutCoor PutBegin end + 79317 +47581 a 78530 47581 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@A0 16 {InitRnode } /NodeScale {} def NewNode end end + 78530 47581 a 787 w @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 79317 47581 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 79317 47581 a +177 w Fp(John)79317 47581 y +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 +a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 79317 47581 a 79494 48262 a Fx(I:2)79317 47581 y +tx@Dict begin PutEnd end + 79317 +47581 a 79317 47581 a +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 a +tx@Dict begin { -256.07469 113.81097 } PutCoor PutBegin end + 79317 +47581 a 78530 47581 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@F1 16 {InitRnode } /NodeScale {} def NewNode end end + 78530 47581 a 787 w @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 79317 47581 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 79317 47581 a +177 w Fp(Scott)79317 47581 y +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 +a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 79317 47581 a 79494 48262 a Fx(I:1)79317 47581 y +tx@Dict begin PutEnd end + 79317 +47581 a 79317 47581 a +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 a +tx@Dict begin { 0.0 -56.90549 } PutCoor PutBegin end + 79317 +47581 a 78530 47581 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@X1 16 {InitRnode } /NodeScale {} def NewNode end end + 78530 47581 a 787 w @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul +dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0 +0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub +moveto EndArrow } def /ArrowInside { } def 0.8 SLW 0 setgray +/ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4 +1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 +h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto +gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside +{ } def [ -8.2511 -8.2511 -15.6491 -15.6491 /Lineto /lineto load +def 0 setlinejoin false NArray n 0 eq not { n 1 eq { 0 0 /n 2 def +} if () length 0 gt { 1.5 2. CLW mul add dup 1.4 mul exch 0.4 mul +neg add /arrowlength exch def 4 copy /y1 ED /x1 ED /y2 ED /x2 ED /Alpha +y2 y1 sub x2 x1 sub Atan def ArrowA x1 Alpha cos arrowlength mul add +y1 Alpha sin arrowlength mul add /n n 1 sub def n { 4 copy /y1 ED /x1 +ED /y2 ED /x2 ED x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub Atan +def /ArrowPos 0. def /dArrowPos 0.5 abs def 1. cvi { /ArrowPos ArrowPos +dArrowPos add def x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos +mul add ArrowInside pop pop } repeat }{ /ArrowPos 0. def /dArrowPos +1. 1 gt {1.0 1. 1.0 add div }{0.5 } ifelse def 1. cvi { /ArrowPos +ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul x1 add y2 y1 sub +ArrowPos mul y1 add ArrowInside pop pop } repeat } ifelse pop pop Lineto +} repeat }{ ArrowA /n n 2 sub def n { Lineto } repeat } ifelse CP 4 +2 roll ArrowB L pop pop } if gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial +79317 47581 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 79317 47581 a 177 w Fp(James)79317 47581 +y +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 79317 47581 a 79494 48262 +a Fx(IV:1)79317 47581 y +tx@Dict begin PutEnd end + 79317 47581 a 79317 47581 a +tx@Dict begin PutEnd end + 79317 +47581 a 79317 47581 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@G2 /N@H1 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 79317 47581 a 79317 47581 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@B1 /N@C1 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 79317 +47581 a 79317 47581 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@P1 /N@R1 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 79317 47581 a 79317 47581 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@G1_m_B2 /N@K1 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 79317 +47581 a 79317 47581 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@G1_m_B2 /N@B2 InitNC { NCCoor tx@Dict begin +ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1 +0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length +x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos +0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def +1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul +x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat } +ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray + 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore + grestore end + 79317 47581 a 79317 47581 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@G1_m_B2 /N@G1 InitNC { NCCoor tx@Dict begin +ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1 +0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length +x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos +0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def +1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul +x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat } +ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray + 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore + grestore end + 79317 +47581 a 79317 47581 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@K1_m_R1 /N@X1 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 79317 47581 a 79317 47581 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@K1_m_R1 /N@R1 InitNC { NCCoor tx@Dict begin +ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1 +0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length +x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos +0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def +1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul +x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat } +ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray + 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore + grestore end + 79317 +47581 a 79317 47581 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@K1 /N@K1_m_R1 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA 0. def /AngleB +180. def /ArmA 22.76227 def /ArmB 22.76227 def /ArmTypeA 0 def /ArmTypeB +0 def /loopsize 22.76227 def NCLoop } if end gsave 0.8 SLW 0 setgray + 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore + grestore end + 79317 47581 a 79317 47581 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@M1 /N@P1 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 79317 +47581 a 79317 47581 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@A0 /N@B2 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 79317 47581 a 79317 47581 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@A0 /N@B1 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 79317 +47581 a 79317 47581 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@F1 /N@G2 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 79317 47581 a 79317 47581 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@F1 /N@G1 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 79317 +47581 a 91915 60180 a + currentpoint grestore moveto + 91915 60180 a 0 TeXcolorgray 17579 +62615 a Fv(Figure)369 b(9:)p 0 TeXcolorgray 22425 62615 +a +SDict begin H.S end + 22425 62615 a 22425 62615 a +SDict begin H.R end + 22425 62615 a 22425 62615 +a +SDict begin [/View [/XYZ H.V]/Dest (figure.9) cvn /DEST pdfmark end + 22425 62615 a 0 TeXcolorgray Fv(P)-31 b(edigree)370 +b(from)g(Listing)p 0 TeXcolorgray 33230 62615 a +SDict begin H.S end + 33230 +62615 a 0 TeXcolorgray Fv(14)p 0 TeXcolorgray 34336 61902 +a +SDict begin H.R end + 34336 61902 a 34336 62615 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (lstlisting.14) cvn H.B /ANN pdfmark end + 34336 62615 a 0 TeXcolorgray +0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray 25405 70071 +a Fv(25)p 0 TeXcolorgray eop end +%%Page: 26 26 +TeXDict begin 26 25 bop 0 TeXcolorgray 0 0 a +SDict begin /product where{pop product(Distiller)search{pop pop pop +version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto +closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show +grestore}if}{pop}ifelse}{pop}ifelse}if end + 0 0 a 0 +TeXcolorgray 6752 1660 a +SDict begin H.S end + 6752 1660 a 6752 1660 a +SDict begin H.R end + 6752 +1660 a 6752 1660 a +SDict begin [/View [/XYZ H.V]/Dest (page.26) cvn /DEST pdfmark end + 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray +0 TeXcolorgray 0 TeXcolorgray 6863 6531 a +SDict begin H.S end + 6863 6531 a +6863 6531 a +SDict begin 12 H.A end + 6863 6531 a 6863 6531 a +SDict begin [/View [/XYZ H.V]/Dest (lstlisting.15) cvn /DEST pdfmark +end + 6863 6531 a 6863 +7461 a +SDict begin H.S end + 6863 7461 a 6863 7461 a +SDict begin 12 H.A end + 6863 7461 a 6863 7461 +a +SDict begin [/View [/XYZ H.V]/Dest (lstnumber.15.1) cvn /DEST pdfmark +end + 6863 7461 a 1218 x Fw(Id)523 b(|Name)2616 b(|Sex)1569 +b(|Father|Mother|Proband|DoB)6863 9896 y(A0)523 b(|Jane)2616 +b(|female|)3138 b(|)g(|)3662 b(|1908.12.12)6863 11114 +y(B1)523 b(|John)2616 b(|male)1046 b(|)3138 b(|A0)2092 +b(|)3662 b(|1936.12.15)6863 12332 y(B2)523 b(|Ann)3139 +b(|female|)f(|A0)2092 b(|)3662 b(|1934.04.17)6863 13549 +y(B3)523 b(|Samantha)h(|female|)3138 b(|A0)2092 b(|)3662 +b(|1932.12.03)6863 14767 y(B4)523 b(|Nancy)2093 b(|female|)3138 +b(|A0)2092 b(|)3662 b(|1928.01.05)6863 15984 y(C1)523 +b(|Mary)2616 b(|female|)3138 b(|B2)2092 b(|)523 b(yes)1570 +b(|1955.08.26)6863 17202 y(C2)523 b(|Paul)2616 b(|male)1046 +b(|)3138 b(|B3)2092 b(|)3662 b(|1964.05.07)6863 18420 +y(C3)523 b(|Jane)2616 b(|female|)3138 b(|B4)2092 b(|)3662 +b(|1950.11.03)6863 19637 y(D1)523 b(|Jack)2616 b(|male)1046 +b(|B1)2092 b(|C1)g(|)3662 b(|1975.07.01)6863 20855 y(D2)523 +b(|Laura)2093 b(|female|C2)f(|C3)g(|)3662 b(|1974.09.05)p +0 TeXcolorgray 0 TeXcolorgray 13955 23290 a Fv(Listing)371 +b(15:)493 b(A)369 b(P)-31 b(edigree)370 b(with)h(Consanguinic)g(Unions) +p 0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray 6863 27491 +a +SDict begin H.S end + 6863 27491 a 6863 27491 a +SDict begin 12 H.A end + 6863 27491 a 6863 27491 a +SDict begin [/View [/XYZ H.V]/Dest (subsection.4.7) cvn /DEST pdfmark +end + +6863 27491 a 1107 x Ft(4.7)1495 b(Consanguinic)501 b(Unions)6863 +30641 y Fv(Consanguinic)393 b(unions)d(presen)-31 b(t)390 +b(a)g(tec)-31 b(hnical)392 b(problem)f(for)f(the)h(program)g(\(see)f +(the)g(dis-)6863 31969 y(cussion)365 b(in)g(Section)p +0 TeXcolorgray 15840 31969 a +SDict begin H.S end + 15840 31969 a 0 TeXcolorgray +Fv(8)p 0 TeXcolorgray 16393 31256 a +SDict begin H.R end + 16393 31256 a 16393 +31969 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (section.8) cvn H.B /ANN pdfmark end + 16393 31969 a 0 TeXcolorgray Fv(\).)492 b(Therefore)365 +b(the)g(supp)31 b(ort)364 b(of)h(consanguinicit)-31 b(y)368 +b(is)c(exp)31 b(erimen)-31 b(tal)6863 33298 y(for)369 +b(this)h(release.)8524 34626 y(There)387 b(is)h(a)g(n)-31 +b(um)g(b)31 b(er)388 b(of)g(limitations)k(for)c(consanguinic)i(unions)e +(in)g(the)g(data)h(\014le)f(at)6863 35954 y(presen)-31 +b(t.)630 b(First,)426 b(the)415 b(consanguinic)i(unions)e(should)h(not) +f(in)g(the)h(direct)f(lineage)h(of)g(the)6863 37283 y(proband)358 +b(or)f(the)g(p)31 b(erson)357 b(from)g(whic)-31 b(h)358 +b(the)g(p)31 b(edigree)357 b(starts.)489 b(In)357 b(man)-31 +b(y)358 b(cases)f(this)g(limi-)6863 38611 y(tation)370 +b(can)f(eliminated)h(b)-31 b(y)368 b(using)h Fq(-s)f +Fv(option)i(\(see)e(Section)p 0 TeXcolorgray 33057 38611 +a +SDict begin H.S end + 33057 38611 a 0 TeXcolorgray Fv(4.1)p 0 TeXcolorgray +34470 37898 a +SDict begin H.R end + 34470 37898 a 34470 38611 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (subsection.4.1) cvn H.B /ANN pdfmark end + 34470 38611 +a 0 TeXcolorgray Fv(\))h(to)g(c)-31 b(ho)31 b(ose)369 +b(a)f(di\013eren)-31 b(t)6863 39939 y(starting)504 b(p)31 +b(oin)-31 b(t)503 b(for)f(the)h(p)31 b(edigree.)892 b(Second,)536 +b(the)502 b(c)-31 b(hildren)503 b(of)g(consanguinic)h(unions)6863 +41268 y(migh)-31 b(t)324 b(app)31 b(ear)323 b(not)g(cen)-31 +b(terd)322 b(on)h(the)f(c)-31 b(harts.)477 b(An)323 b(example)g(of)g(a) +g(p)31 b(edigree)322 b(with)i(consan-)6863 42596 y(guinic)390 +b(marriages)f(is)f(sho)-31 b(wn)389 b(on)f(Listing)p +0 TeXcolorgray 25012 42596 a +SDict begin H.S end + 25012 42596 a 0 TeXcolorgray +Fv(15)p 0 TeXcolorgray 26118 41883 a +SDict begin H.R end + 26118 41883 a 26118 +42596 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (lstlisting.15) cvn H.B /ANN pdfmark end + 26118 42596 a 0 TeXcolorgray Fv(,)394 b(and)389 +b(the)f(corresp)31 b(onding)388 b(c)-31 b(hart)389 b(is)f(sho)-31 +b(wn)6863 43924 y(on)383 b(Figure)p 0 TeXcolorgray 11919 +43924 a +SDict begin H.S end + 11919 43924 a 0 TeXcolorgray Fv(10)p 0 TeXcolorgray +13025 43211 a +SDict begin H.R end + 13025 43211 a 13025 43924 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (figure.10) cvn H.B /ANN pdfmark end + 13025 43924 +a 0 TeXcolorgray Fv(.)533 b(The)382 b(dra)-31 b(wbac)g(ks)383 +b(of)g(the)f(program)h(are)f(eviden)-31 b(t)383 b(from)g(the)f(p)31 +b(ositions)384 b(of)6863 45253 y(Laura)369 b(nad)h(Jac)-31 +b(k)370 b(on)f(these)g(c)-31 b(harts.)6863 46802 y +SDict begin H.S end + 6863 +46802 a 6863 46802 a +SDict begin 12 H.A end + 6863 46802 a 6863 46802 a +SDict begin [/View [/XYZ H.V]/Dest (subsection.4.8) cvn /DEST pdfmark +end + 6863 46802 +a 1550 x Ft(4.8)1495 b(Language-Dep)42 b(enden)-42 b(t)501 +b(Keyw)-42 b(ords)6863 50395 y Fv(A)-31 b(t)341 b(presen)-31 +b(t)339 b(the)h(program)h Fo(p)31 b(edigree)340 b Fv(can)g(w)-31 +b(ork)341 b(with)g(English)g(and)f(Russian)g(languages.)6863 +51723 y(As)471 b(discussed)e(in)i(Section)p 0 TeXcolorgray +18886 51723 a +SDict begin H.S end + 18886 51723 a 0 TeXcolorgray Fv(3.5)p 0 +TeXcolorgray 20299 51010 a +SDict begin H.R end + 20299 51010 a 20299 51723 +a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (subsection.3.5) cvn H.B /ANN pdfmark end + 20299 51723 a 0 TeXcolorgray Fv(,)498 b(the)471 b(language)i(options) +f(c)-31 b(ho)31 b(oses)471 b Fn(b)-57 b(oth)555 b Fv(the)471 +b(languages)6863 53052 y(of)i(input)g(and)f(output)i(\014les.)802 +b(It)472 b(is)g(easy)h(to)g(add)f(new)h(languages)h(to)f(the)f(sc)-31 +b(heme)473 b(b)-31 b(y)6863 54380 y(expanding)371 b(the)e(library)h +Fq(Pedigree::Language.pm)i Fv(in)e(the)f(distribution.)8524 +55708 y(The)526 b(English)i(language)h(is)d(the)h(default.)966 +b(Moreo)-31 b(v)g(er,)567 b(if)527 b(the)g(Russian)f(option)i(is)6863 +57037 y(c)-31 b(hosen,)370 b(English)g(k)-31 b(eyw)g(ords)370 +b(are)f(still)i(recognized)f(in)f(the)h(input)g(\014le.)8524 +58365 y(The)456 b(English)h(and)g(Russian)f(k)-31 b(eyw)g(ords)457 +b(are)f(listed)h(in)f(T)-92 b(able)p 0 TeXcolorgray 35787 +58365 a +SDict begin H.S end + 35787 58365 a 0 TeXcolorgray Fv(1)p 0 TeXcolorgray +36340 57652 a +SDict begin H.R end + 36340 57652 a 36340 58365 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (table.1) cvn H.B /ANN pdfmark end + 36340 58365 +a 0 TeXcolorgray Fv(.)754 b(Note)457 b(that)h(some)6863 +59693 y(k)-31 b(eyw)g(ords)370 b(ha)-31 b(v)g(e)370 b(v)-61 +b(arian)-31 b(ts;)371 b(they)f(are)f(listed)h(in)f(the)h(table)g(as)f +(w)-31 b(ell.)p 0 TeXcolorgray 25405 70071 a(26)p 0 TeXcolorgray +eop end +%%Page: 27 27 +TeXDict begin 27 26 bop 0 TeXcolorgray 0 0 a +SDict begin /product where{pop product(Distiller)search{pop pop pop +version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto +closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show +grestore}if}{pop}ifelse}{pop}ifelse}if end + 0 0 a 0 +TeXcolorgray 6752 1660 a +SDict begin H.S end + 6752 1660 a 6752 1660 a +SDict begin H.R end + 6752 +1660 a 6752 1660 a +SDict begin [/View [/XYZ H.V]/Dest (page.27) cvn /DEST pdfmark end + 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray +0 TeXcolorgray 0 TeXcolorgray 25774 25534 a +tx@Dict begin { 56.90549 -85.35823 } PutCoor PutBegin end + 25774 25534 +a 25774 25534 a +tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@B1_m_C1 10 {InitPnode +} /NodeScale {} def NewNode end end + 25774 25534 a 25774 25534 a +tx@Dict begin PutEnd end + 25774 25534 +a 25774 25534 a +tx@Dict begin { 0.0 0.0 } PutCoor PutBegin end + 25774 25534 a 24987 25534 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@A0 16 {InitRnode } /NodeScale {} def NewNode end end + 24987 25534 +a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 25774 +25534 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 25774 25534 a 177 w Fp(Jane)25774 25534 y +tx@Dict begin PutEnd end + 25774 +25534 a 25774 25534 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 25774 25534 a 25951 26215 a Fx(I:1)25774 +25534 y +tx@Dict begin PutEnd end + 25774 25534 a 25774 25534 a +tx@Dict begin PutEnd end + 25774 25534 a 25774 +25534 a +tx@Dict begin { -85.35823 -113.81097 } PutCoor PutBegin end + 25774 25534 a 24987 25534 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@C3 16 {InitRnode } /NodeScale {} def NewNode end end + 24987 25534 a 787 +w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 25774 25534 +a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 25774 25534 a 177 w Fp(Jane)25774 25534 y +tx@Dict begin PutEnd end + 25774 25534 +a 25774 25534 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 25774 25534 a 25951 26215 a Fx(I)28 b(I)g(I:1)25774 +25534 y +tx@Dict begin PutEnd end + 25774 25534 a 25774 25534 a +tx@Dict begin PutEnd end + 25774 25534 a 25774 +25534 a +tx@Dict begin { -56.90549 -113.81097 } PutCoor PutBegin end + 25774 25534 a 25774 25534 a +tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@C2_m_C3 10 {InitPnode +} /NodeScale {} def NewNode end end + 25774 25534 a 25774 +25534 a +tx@Dict begin PutEnd end + 25774 25534 a 25774 25534 a +tx@Dict begin { 56.90549 -113.81097 } PutCoor PutBegin end + 25774 25534 a 25774 +25534 a +tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@B1_m1_C1 10 {InitPnode +} /NodeScale {} def NewNode end end + 25774 25534 a 25774 25534 a +tx@Dict begin PutEnd end + 25774 25534 a 25774 +25534 a +tx@Dict begin { 28.45274 -113.81097 } PutCoor PutBegin end + 25774 25534 a 24987 25534 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@C1 16 {InitRnode } /NodeScale {} def NewNode end end + 24987 25534 a 787 +w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul +dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0 +0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub +moveto EndArrow } def /ArrowInside { } def 0.8 SLW 0 setgray +/ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4 +1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 +h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto +gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside +{ } def [ -8.2511 -8.2511 -15.6491 -15.6491 /Lineto /lineto load +def 0 setlinejoin false NArray n 0 eq not { n 1 eq { 0 0 /n 2 def +} if () length 0 gt { 1.5 2. CLW mul add dup 1.4 mul exch 0.4 mul +neg add /arrowlength exch def 4 copy /y1 ED /x1 ED /y2 ED /x2 ED /Alpha +y2 y1 sub x2 x1 sub Atan def ArrowA x1 Alpha cos arrowlength mul add +y1 Alpha sin arrowlength mul add /n n 1 sub def n { 4 copy /y1 ED /x1 +ED /y2 ED /x2 ED x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub Atan +def /ArrowPos 0. def /dArrowPos 0.5 abs def 1. cvi { /ArrowPos ArrowPos +dArrowPos add def x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos +mul add ArrowInside pop pop } repeat }{ /ArrowPos 0. def /dArrowPos +1. 1 gt {1.0 1. 1.0 add div }{0.5 } ifelse def 1. cvi { /ArrowPos +ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul x1 add y2 y1 sub +ArrowPos mul y1 add ArrowInside pop pop } repeat } ifelse pop pop Lineto +} repeat }{ ArrowA /n n 2 sub def n { Lineto } repeat } ifelse CP 4 +2 roll ArrowB L pop pop } if gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 25774 25534 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 25774 25534 a +177 w Fp(Mary)25774 25534 y +tx@Dict begin PutEnd end + 25774 25534 a 25774 25534 +a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 25774 25534 a 25951 26215 a Fx(I)g(I)g(I:3)25774 25534 +y +tx@Dict begin PutEnd end + 25774 25534 a 25774 25534 a +tx@Dict begin PutEnd end + 25774 25534 a 25774 25534 +a +tx@Dict begin { -28.45274 -113.81097 } PutCoor PutBegin end + 25774 25534 a 24987 25534 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@C2 16 {InitRnode } /NodeScale {} def NewNode end end + 24987 25534 a 787 w @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 25774 25534 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 25774 25534 a +177 w Fp(P)-24 b(aul)25774 25534 y +tx@Dict begin PutEnd end + 25774 25534 a 25774 +25534 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 25774 25534 a 25951 26215 a Fx(I)28 b(I)g(I:2)25774 +25534 y +tx@Dict begin PutEnd end + 25774 25534 a 25774 25534 a +tx@Dict begin PutEnd end + 25774 25534 a 25774 +25534 a +tx@Dict begin { 85.35823 -56.90549 } PutCoor PutBegin end + 25774 25534 a 24987 25534 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@B1 16 {InitRnode } /NodeScale {} def NewNode end end + 24987 25534 a 787 +w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 25774 25534 +a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 25774 25534 a 177 w Fp(John)25774 25534 y +tx@Dict begin PutEnd end + 25774 25534 +a 25774 25534 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 25774 25534 a 25951 26215 a Fx(I)g(I:4)25774 +25534 y +tx@Dict begin PutEnd end + 25774 25534 a 25774 25534 a +tx@Dict begin PutEnd end + 25774 25534 a 25774 +25534 a +tx@Dict begin { -28.45274 -56.90549 } PutCoor PutBegin end + 25774 25534 a 24987 25534 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@B3 16 {InitRnode } /NodeScale {} def NewNode end end + 24987 25534 a 787 +w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 25774 25534 +a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 25774 25534 a 177 w Fp(Saman)-24 b(tha)25774 25534 +y +tx@Dict begin PutEnd end + 25774 25534 a 25774 25534 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 25774 25534 a 25951 26215 +a Fx(I)28 b(I:2)25774 25534 y +tx@Dict begin PutEnd end + 25774 25534 a 25774 25534 +a +tx@Dict begin PutEnd end + 25774 25534 a 25774 25534 a +tx@Dict begin { -85.35823 -56.90549 } PutCoor PutBegin end + 25774 25534 a 24987 25534 +a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@B4 16 {InitRnode } /NodeScale {} def NewNode end end + 24987 25534 a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial +25774 25534 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 25774 25534 a 177 w Fp(Nancy)25774 25534 +y +tx@Dict begin PutEnd end + 25774 25534 a 25774 25534 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 25774 25534 a 25951 26215 +a Fx(I)g(I:1)25774 25534 y +tx@Dict begin PutEnd end + 25774 25534 a 25774 25534 +a +tx@Dict begin PutEnd end + 25774 25534 a 25774 25534 a +tx@Dict begin { 28.45274 -56.90549 } PutCoor PutBegin end + 25774 25534 a 24987 25534 +a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@B2 16 {InitRnode } /NodeScale {} def NewNode end end + 24987 25534 a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial +25774 25534 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 25774 25534 a 177 w Fp(Ann)25774 25534 +y +tx@Dict begin PutEnd end + 25774 25534 a 25774 25534 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 25774 25534 a 25951 26215 +a Fx(I)g(I:3)25774 25534 y +tx@Dict begin PutEnd end + 25774 25534 a 25774 25534 +a +tx@Dict begin PutEnd end + 25774 25534 a 25774 25534 a +tx@Dict begin { -85.35823 -170.71646 } PutCoor PutBegin end + 25774 25534 a 24987 25534 +a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@D2 16 {InitRnode } /NodeScale {} def NewNode end end + 24987 25534 a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial +25774 25534 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 25774 25534 a 177 w Fp(Laura)25774 25534 +y +tx@Dict begin PutEnd end + 25774 25534 a 25774 25534 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 25774 25534 a 25951 26215 +a Fx(IV:1)25774 25534 y +tx@Dict begin PutEnd end + 25774 25534 a 25774 25534 a +tx@Dict begin PutEnd end + 25774 +25534 a 25774 25534 a +tx@Dict begin { 28.45274 -170.71646 } PutCoor PutBegin end + 25774 25534 a 24987 25534 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@D1 16 {InitRnode } /NodeScale {} def NewNode end end + 24987 +25534 a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial +25774 25534 a +tx@Dict begin { 0.0 11.38092 } PutCoor PutBegin end + 25774 25534 a 177 w Fp(Jac)-24 b(k)25774 +25534 y +tx@Dict begin PutEnd end + 25774 25534 a 25774 25534 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 25774 25534 a 25951 +26215 a Fx(IV:2)25774 25534 y +tx@Dict begin PutEnd end + 25774 25534 a 25774 25534 +a +tx@Dict begin PutEnd end + 25774 25534 a 25774 25534 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@B1_m_C1 /N@B1_m1_C1 InitNC { tx@Dict begin + /Lineto /lineto load def 0 setlinejoin false pop end /AngleA -90. +def /AngleB 90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 +sub dup mul add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB +0 def NCAngles } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore grestore end + 25774 25534 a 25774 25534 +a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 2.6 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@B1_m_C1 /N@C1 InitNC { NCCoor tx@Dict begin +ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1 +0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length +x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos +0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def +1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul +x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat } +ifelse pop pop lineto pop pop end } if end gsave 2.6 SLW 0 setgray + 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore +gsave 1.0 SLW 1 setgray stroke grestore gsave grestore grestore +end + 25774 25534 a 25774 25534 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 2.6 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@B1_m_C1 /N@B1 InitNC { NCCoor tx@Dict begin +ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1 +0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length +x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos +0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def +1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul +x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat } +ifelse pop pop lineto pop pop end } if end gsave 2.6 SLW 0 setgray + 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore +gsave 1.0 SLW 1 setgray stroke grestore gsave grestore grestore +end + 25774 25534 a 25774 25534 +a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@A0 /N@B4 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 25774 25534 a 25774 25534 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@A0 /N@B3 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 25774 25534 a 25774 25534 +a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@A0 /N@B2 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 25774 25534 a 25774 25534 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@A0 /N@B1 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 25774 25534 a 25774 25534 +a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@C2_m_C3 /N@D2 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 25774 25534 a 25774 25534 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 2.6 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@C2_m_C3 /N@C3 InitNC { NCCoor tx@Dict begin +ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1 +0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length +x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos +0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def +1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul +x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat } +ifelse pop pop lineto pop pop end } if end gsave 2.6 SLW 0 setgray + 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore +gsave 1.0 SLW 1 setgray stroke grestore gsave grestore grestore +end + 25774 25534 a 25774 25534 +a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 2.6 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@C2_m_C3 /N@C2 InitNC { NCCoor tx@Dict begin +ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1 +0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length +x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos +0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def +1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul +x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat } +ifelse pop pop lineto pop pop end } if end gsave 2.6 SLW 0 setgray + 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore +gsave 1.0 SLW 1 setgray stroke grestore gsave grestore grestore +end + 25774 25534 a 25774 25534 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@B1_m1_C1 /N@D1 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 25774 25534 a 25774 25534 +a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@B3 /N@C2 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 25774 25534 a 25774 25534 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@B4 /N@C3 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 25774 25534 a 25774 25534 +a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@B2 /N@C1 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 22.76227 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 25774 25534 a 0 TeXcolorgray 17302 53166 a Fv(Figure)369 +b(10:)p 0 TeXcolorgray 22702 53166 a +SDict begin H.S end + 22702 53166 a 22702 +53166 a +SDict begin H.R end + 22702 53166 a 22702 53166 a +SDict begin [/View [/XYZ H.V]/Dest (figure.10) cvn /DEST pdfmark end + 22702 53166 a 0 TeXcolorgray +Fv(P)-31 b(edigree)370 b(from)g(Listing)p 0 TeXcolorgray +33507 53166 a +SDict begin H.S end + 33507 53166 a 0 TeXcolorgray Fv(15)p 0 +TeXcolorgray 34613 52453 a +SDict begin H.R end + 34613 52453 a 34613 53166 +a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (lstlisting.15) cvn H.B /ANN pdfmark end + 34613 53166 a 0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray +0 TeXcolorgray 25405 70071 a Fv(27)p 0 TeXcolorgray eop +end +%%Page: 28 28 +TeXDict begin 28 27 bop 0 TeXcolorgray 0 0 a +SDict begin /product where{pop product(Distiller)search{pop pop pop +version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto +closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show +grestore}if}{pop}ifelse}{pop}ifelse}if end + 0 0 a 0 +TeXcolorgray 6752 1660 a +SDict begin H.S end + 6752 1660 a 6752 1660 a +SDict begin H.R end + 6752 +1660 a 6752 1660 a +SDict begin [/View [/XYZ H.V]/Dest (page.28) cvn /DEST pdfmark end + 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray +0 TeXcolorgray 0 TeXcolorgray 7974 13932 35970 45 v 8638 +14862 a Fv(English)370 b(k)-31 b(eyw)g(ord)1330 b(English)370 +b(v)-61 b(arian)-31 b(ts)1330 b(Russian)369 b(k)-31 b(eyw)g(ords)p +7974 15304 V 8638 16234 a Fs(Field)424 b(Names)8638 17563 +y Fv(Id)17379 b Fc(\310\344\345\355\362)8638 18891 y +Fv(Name)15597 b Fc(\324\310\316)8638 20219 y Fv(Sex)16703 +b Fc(\317\356\353)8638 21548 y Fv(DoB)16211 b Fc(\320)-31 +b(\356)g(\346\344)8638 22876 y Fv(DoD)16149 b Fc(\323\354\345\360)8638 +24204 y Fv(Mother)14855 b Fc(\314\340\362\374)8638 25533 +y Fv(F)-92 b(ather)15239 b Fc(\316\362\345\366)8638 26861 +y Fv(Proband)14256 b Fc(\317\360\356\341\340\355\344)8638 +28189 y Fv(Condition)13600 b Fc(\321\356\361\362\356)-31 +b(\377\355\350\345)8638 29518 y Fv(Commen)g(t)13692 b +Fc(\312\356\354\354\345\355\362)-31 b(\340\360\350\351)8638 +30846 y Fv(T)g(yp)31 b(e)15904 b Fc(\322\350\357)8638 +32174 y Fv(Twins)15437 b Fc(\301\353\350\347\355\345\366\373)8638 +33503 y Fv(SortOrder)4418 b(Sort)7076 b Fc(\317\356\360)-31 +b(\377\344\356\352\321\356\360\362\350\360\356\342\352\350,)371 +b(\321\356\360\362)8638 34831 y Fs(Field)424 b(V)-106 +b(alues)8638 36159 y Fv(male)16120 b Fc(\354\363\346,)369 +b(\354)8638 37488 y Fv(female)15290 b Fc(\346)-31 b(\345\355,)369 +b(\346)8638 38816 y Fv(unkno)-31 b(wn)14029 b Fc(\355\345\350\347\342,) +369 b(\355\345\350\347\342\345\361\362\355\356)8638 40145 +y Fv(y)-31 b(es)16912 b Fc(\344\340)8638 41473 y Fv(no)17226 +b Fc(\355\345\362)8638 42801 y Fv(normal)15010 b Fc(\355\356\360\354,) +369 b(\347\344\356\360\356\342)8638 44130 y Fv(obligatory)4397 +b(obligat)5790 b Fc(\356\341\353\350\343)-31 b(\340\362)8638 +45458 y Fv(asymptomatic)2488 b(asymp)5997 b Fc(\340\361\350\354\357) +8638 46786 y Fv(a\013ected)5566 b(a\013ect)6495 b Fc +(\341\356\353\374\355,)370 b(\341\356\353\345\355)8638 +48115 y Fv(infertile)14672 b Fc(\341\345\361\357\353\356)-31 +b(\344\355)8638 49443 y Fv(sab)16789 b Fc(\342\373\352\350\344\373\370) +8638 50771 y Fv(monozygotic)3232 b(monzygot)4406 b Fc +(\354\356\355\356\347\350\343\356\362\355,)370 b +(\354\356\355\356\347\350\343)-92 b(,)368 b(\356)-31 +b(\344\355\356)g(\377\351\366\345\342)8638 52100 y Fv(qzygotic)5291 +b(qzygot,)371 b(?)4711 b Fc(?)8638 53428 y Fs(Sp)35 b(ecial)424 +b(Names)8638 54756 y Fq(#)p Fv(ab)31 b(ortion)13722 b +Fq(#)p Fc(\340\341\356\360\362)8638 56085 y Fq(#)p Fv(c)-31 +b(hildless)13835 b Fq(#)p Fc(\341\345\347\344\345\362\355)p +7974 56528 V 0 TeXcolorgray 15725 58514 a Fv(T)-92 b(able)370 +b(1:)p 0 TeXcolorgray 20122 58514 a +SDict begin H.S end + 20122 58514 a 20122 +58514 a +SDict begin H.R end + 20122 58514 a 20122 58514 a +SDict begin [/View [/XYZ H.V]/Dest (table.1) cvn /DEST pdfmark end + 20122 58514 a 0 TeXcolorgray +Fv(Keyw)-31 b(ords)370 b(in)f(Di\013eren)-31 b(t)369 +b(Languages)p 0 TeXcolorgray 0 TeXcolorgray 0 TeXcolorgray +25405 70071 a(28)p 0 TeXcolorgray eop end +%%Page: 29 29 +TeXDict begin 29 28 bop 0 TeXcolorgray 0 0 a +SDict begin /product where{pop product(Distiller)search{pop pop pop +version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto +closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show +grestore}if}{pop}ifelse}{pop}ifelse}if end + 0 0 a 0 +TeXcolorgray 6752 1660 a +SDict begin H.S end + 6752 1660 a 6752 1660 a +SDict begin H.R end + 6752 +1660 a 6752 1660 a +SDict begin [/View [/XYZ H.V]/Dest (page.29) cvn /DEST pdfmark end + 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray +0 TeXcolorgray 6863 5867 a +SDict begin H.S end + 6863 5867 a 6863 5867 a +SDict begin 12 H.A end + 6863 +5867 a 6863 5867 a +SDict begin [/View [/XYZ H.V]/Dest (part.2) cvn /DEST pdfmark end + 6863 5867 a 1107 x Fu(P)-50 b(art)599 +b(I)50 b(I)6863 9741 y Fr(Algorithm)864 b(Description)6863 +11617 y +SDict begin H.S end + 6863 11617 a 6863 11617 a +SDict begin 12 H.A end + 6863 11617 a 6863 11617 +a +SDict begin [/View [/XYZ H.V]/Dest (section.5) cvn /DEST pdfmark end + 6863 11617 a 1547 x Fu(5)1793 b(In)-50 b(tro)50 b(duction)6863 +15588 y Fv(This)351 b(part)f(is)h(in)-31 b(tended)351 +b(for)f(adv)-61 b(anced)351 b(users)e(and)h(is)g(not)h(neccessary)f +(for)g(runn)-31 b(uing)351 b(the)6863 16916 y(program.)8524 +18245 y(The)365 b(problem)h(of)g(nicely)g(t)-31 b(yp)31 +b(esetting)368 b(graphs)d(is)g(one)h(of)g(the)f(classical)i(problems)f +(in)6863 19573 y(the)448 b(Computer)g(Science)g([)p 0 +TeXcolorgray 18416 19573 a +SDict begin H.S end + 18416 19573 a 0 TeXcolorgray +Fv(4)p 0 TeXcolorgray 18969 18860 a +SDict begin H.R end + 18969 18860 a 18969 +19573 a +SDict begin [/Color [0 1 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (cite.GraphDrawing99) cvn H.B /ANN pdfmark end + 18969 19573 a 0 TeXcolorgray 1 w Fv(].)727 b(One)448 +b(of)f(the)h(earliest)g(algorithms)i(here)d(is)g(the)h(classical)6863 +20902 y(algorithm)541 b(for)e(la)-31 b(y)g(ered)540 b(ro)31 +b(oted)539 b(trees)f(b)-31 b(y)539 b(Reingold)h(and)f(Tilford)h([)p +0 TeXcolorgray 37393 20902 a +SDict begin H.S end + 37393 20902 a 0 TeXcolorgray +Fv(4)p 0 TeXcolorgray 37946 20188 a +SDict begin H.R end + 37946 20188 a 37946 +20902 a +SDict begin [/Color [0 1 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (cite.GraphDrawing99) cvn H.B /ANN pdfmark end + 37946 20902 a 0 TeXcolorgray 1 w Fv(,)581 b Fb(x)538 +b Fv(3.1].)1003 b(This)6863 22230 y(algorithm)359 b(w)-31 +b(as)356 b(implemen)-31 b(ted)358 b(b)-31 b(y)356 b Fq(PSTricks)h +Fv([)p 0 TeXcolorgray 27382 22230 a +SDict begin H.S end + 27382 22230 a 0 TeXcolorgray +Fv(3)p 0 TeXcolorgray 27935 21517 a +SDict begin H.R end + 27935 21517 a 27935 +22230 a +SDict begin [/Color [0 1 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (cite.PSTricks93) cvn H.B /ANN pdfmark end + 27935 22230 a 0 TeXcolorgray 1 w Fv(].)488 b(Ho)-31 +b(w)g(ev)g(er,)361 b(man)-31 b(y)356 b(p)31 b(edigrees)356 +b(are)f(not)6863 23558 y(trees)440 b([)p 0 TeXcolorgray +9895 23558 a +SDict begin H.S end + 9895 23558 a 0 TeXcolorgray Fv(2)p 0 TeXcolorgray +10448 22845 a +SDict begin H.R end + 10448 22845 a 10448 23558 a +SDict begin [/Color [0 1 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (cite.pst-pdgr06) cvn H.B /ANN pdfmark end + 10448 23558 +a 0 TeXcolorgray 1 w Fv(].)705 b(If)440 b(w)-31 b(e)440 +b(consider)g(a)g(subset)g(of)g(p)31 b(edigrees)440 b(where)f(in)-31 +b(breeding)441 b(is)f(absen)-31 b(t,)459 b(the)6863 24887 +y(p)31 b(edigrees)334 b(b)31 b(ecome)334 b(trees.)480 +b(Ho)-31 b(w)g(ev)g(er,)343 b(ev)-31 b(en)335 b(in)f(this)g(case)g(the) +g(the)g(tree)g(is)g(not)h(necessary)6863 26215 y(la)-31 +b(y)g(ered,)426 b(as)413 b(can)g(b)31 b(e)413 b(seen)g(from)g(Figure)p +0 TeXcolorgray 24685 26215 a +SDict begin H.S end + 24685 26215 a 0 TeXcolorgray +Fv(1)p 0 TeXcolorgray 25238 25502 a +SDict begin H.R end + 25238 25502 a 25238 +26215 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (figure.1) cvn H.B /ANN pdfmark end + 25238 26215 a 0 TeXcolorgray Fv(.)625 b(Therefore)413 +b(a)g(new)h(approac)-31 b(h)414 b(generalizing)6863 27543 +y(Reingold-Tilford)341 b(algorithm)g(is)d(necessary)-92 +b(.)481 b(This)338 b(approac)-31 b(h)339 b(is)f(based)g(on)g(the)g +(analysis)6863 28872 y(of)370 b(the)f(structure)g(of)h(p)31 +b(edigrees)368 b(and)i(is)f(sk)-31 b(etc)g(hed)370 b(in)f(the)h +(remainder)f(of)h(this)f(man)-31 b(ual.)6863 30755 y +SDict begin H.S end + +6863 30755 a 6863 30755 a +SDict begin 12 H.A end + 6863 30755 a 6863 30755 a +SDict begin [/View [/XYZ H.V]/Dest (section.6) cvn /DEST pdfmark end + 6863 +30755 a 1777 x Fu(6)1793 b(Main)598 b(Algorithm)6863 +34957 y Fv(A)426 b(p)31 b(edigree)425 b(consists)h(of)g(no)31 +b(des)425 b(\(v)-31 b(ertices\),)441 b(connected)426 +b(b)-31 b(y)426 b(lines)g(\(edges\).)663 b(If)425 b(there)g(is)6863 +36285 y(no)373 b(in)-31 b(breeding,)375 b(the)e(graph)g(is)g(acyclic.) +505 b(There)373 b(are)f(t)-31 b(w)g(o)375 b(kinds)e(of)g(no)31 +b(des)372 b(in)h(the)g(graph:)6863 37614 y(p)31 b(erson)533 +b(no)31 b(des)533 b(\(squares)h(and)g(circles)f(on)h(Figures)p +0 TeXcolorgray 29973 37614 a +SDict begin H.S end + 29973 37614 a 0 TeXcolorgray +Fv(1)p 0 TeXcolorgray 30526 36900 a +SDict begin H.R end + 30526 36900 a 30526 +37614 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (figure.1) cvn H.B /ANN pdfmark end + 30526 37614 a 0 TeXcolorgray 534 w Fv(and)p 0 +TeXcolorgray 33377 37614 a +SDict begin H.S end + 33377 37614 a 0 TeXcolorgray +Fv(2)p 0 TeXcolorgray 33930 36900 a +SDict begin H.R end + 33930 36900 a 33930 +37614 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (figure.2) cvn H.B /ANN pdfmark end + 33930 37614 a 0 TeXcolorgray Fv(\))g(and)g Fn(marriage)548 +b(no)-57 b(des)p Fv(,)6863 38942 y(whic)-31 b(h)288 b(are)e(nameless)h +(on)g(the)g(\014gures.)465 b(W)-92 b(e)286 b(will)i(use)e(the)h +(notation)j(\\male)e(sp)31 b(ouse-female)6863 40270 y(sp)g(ouse")460 +b(for)g(suc)-31 b(h)459 b(no)31 b(des,)483 b(so)459 b(the)i(marriage)g +(no)31 b(des)459 b(on)h(Figure)p 0 TeXcolorgray 35531 +40270 a +SDict begin H.S end + 35531 40270 a 0 TeXcolorgray Fv(1)p 0 TeXcolorgray +36084 39557 a +SDict begin H.R end + 36084 39557 a 36084 40270 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (figure.1) cvn H.B /ANN pdfmark end + 36084 40270 +a 0 TeXcolorgray 460 w Fv(are)g(I:1-I:2,)484 b(I:3-I:4)6863 +41599 y(and)330 b(I)31 b(I:2-I)g(I:3.)479 b(A)330 b(no)31 +b(de)329 b(has)g(a)h Fn(pr)-57 b(e)g(c)g(e)g(dessor)449 +b Fv(and)330 b Fn(childr)-57 b(en)p Fv(.)480 b(A)329 +b(marriage)i(no)31 b(de)329 b(do)31 b(es)329 b(not)6863 +42927 y(ha)-31 b(v)g(e)380 b(a)f(precedessor,)i(but)e(has)g +Fn(male)405 b(sp)-57 b(ouse)462 b Fv(and)379 b Fn(female)406 +b(sp)-57 b(ouse)461 b Fv(\(it)380 b(is)f(customary)h(to)6863 +44255 y(put)336 b(male)h(sp)31 b(ouses)334 b(to)i(the)g(left)h(and)e +(female)i(sp)31 b(ouses)335 b(to)h(the)g(righ)-31 b(t)336 +b(on)g(p)31 b(edigrees\).)482 b(An)-31 b(y)6863 45584 +y(no)31 b(de)311 b(has)f(a)h Fn(downwar)-57 b(d)341 b(tr)-57 +b(e)g(e)394 b Fv(of)311 b(its)g(c)-31 b(hildren,)323 +b(grandc)-31 b(hildren)312 b(etc.)473 b(The)311 b(do)-31 +b(wn)g(w)g(ard)312 b(tree)6863 46912 y(ma)-31 b(y)371 +b(b)31 b(e)368 b(empt)-31 b(y)-92 b(.)8524 48240 y(An)-31 +b(y)346 b(no)31 b(de)347 b(in)f(an)h(acyclic)g(graph)g(can)f(b)31 +b(e)346 b(a)g(ro)31 b(ot.)486 b(Ho)-31 b(w)g(ev)g(er,)353 +b(in)346 b(la)-31 b(y)g(ered)348 b(trees)d(there)6863 +49569 y(is)377 b(a)g(sp)31 b(ecial)378 b(ro)31 b(ot:)508 +b(the)377 b(one)h(that)g(has)f(no)g(precedessor.)514 +b(Similarly)380 b(w)-31 b(e)377 b(will)i(call)f(a)f Fn(lo)-57 +b(c)g(al)6863 50897 y(r)g(o)g(ot)488 b Fv(a)383 b(no)31 +b(de)384 b(that)g(has)f(no)g(predecessor.)534 b(All)384 +b(marriage)g(no)31 b(des)383 b(are)g(lo)31 b(cal)385 +b(ro)31 b(ots.)534 b(Some)6863 52225 y(p)31 b(erson)369 +b(no)31 b(des)368 b(can)i(b)31 b(e)368 b(lo)31 b(cal)371 +b(ro)31 b(ots)369 b(as)h(w)-31 b(ell.)8524 53554 y(Let)424 +b(us)f(\014rst)h(discuss)f(the)h(case)g(where)g(cobnsanguinic)i +(marriages)f(are)f(absen)-31 b(t.)658 b(In)6863 54882 +y(this)370 b(case)f(a)g(p)31 b(edigree)369 b(is)h(a)f(tree.)8524 +56210 y(The)443 b(prop)31 b(osed)442 b(algorithm)k(is)d(recursiv)-31 +b(e)442 b(and)i(starts)f(from)g(a)h(lo)31 b(cal)444 b(ro)31 +b(ot.)715 b(Strictly)6863 57539 y(sp)31 b(eaking,)364 +b(it)f(can)e(start)h(from)g(an)-31 b(y)362 b(lo)31 b(cal)363 +b(ro)31 b(ot,)364 b(but)d(medical)i(p)31 b(edigrees)361 +b(ha)-31 b(v)g(e)363 b(a)e(sp)31 b(ecial)6863 58867 y(p)g(erson:)577 +b Fn(pr)-57 b(ob)g(and,)423 b Fv(the)412 b(p)31 b(erson)411 +b(who)i(w)-31 b(as)412 b(the)g(\014rst)g(to)g(b)31 b(e)412 +b(examined)h(b)-31 b(y)412 b(genetic)h(sp)31 b(e-)6863 +60196 y(cialists)426 b(\(the)e(proband)g(is)g(sho)-31 +b(wn)424 b(b)-31 b(y)425 b(an)f(arro)-31 b(w)424 b(dra)-31 +b(wn)425 b(near)e(the)h(no)31 b(de)424 b(on)g(Figures)p +0 TeXcolorgray 44500 60196 a +SDict begin H.S end + 44500 60196 a 0 TeXcolorgray +Fv(1)p 0 TeXcolorgray 45053 59482 a +SDict begin H.R end + 45053 59482 a 45053 +60196 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (figure.1) cvn H.B /ANN pdfmark end + 45053 60196 a 0 TeXcolorgray 6863 61524 a Fv(and)p +0 TeXcolorgray 8963 61524 a +SDict begin H.S end + 8963 61524 a 0 TeXcolorgray +Fv(2)p 0 TeXcolorgray 9516 60811 a +SDict begin H.R end + 9516 60811 a 9516 +61524 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (figure.2) cvn H.B /ANN pdfmark end + 9516 61524 a 0 TeXcolorgray Fv(\).)477 b(Therefore)317 +b(it)g(mak)-31 b(es)318 b(sense)e(to)i(start)g(from)f(the)h(lo)31 +b(cal)318 b(ro)31 b(ot)318 b(whic)-31 b(h)318 b(has)f(proband)6863 +62852 y(in)370 b(its)f(do)-31 b(wn)g(w)g(ard)371 b(tree.)8524 +64181 y(If)527 b(this)h(lo)31 b(cal)529 b(ro)31 b(ot)528 +b(is)g(a)g(p)31 b(erson)526 b(no)31 b(de,)568 b(the)528 +b(p)31 b(edigree)527 b(is)h(the)g(la)-31 b(y)g(ered)528 +b(tree,)568 b(and)6863 65509 y(Reingold-Tilford)387 b(algorithm)g(is)c +(su\016cien)-31 b(t.)537 b(Therefore)384 b(w)-31 b(e)384 +b(should)h(consider)e(only)i(the)p 0 TeXcolorgray 25405 +70071 a(29)p 0 TeXcolorgray eop end +%%Page: 30 30 +TeXDict begin 30 29 bop 0 TeXcolorgray 0 0 a +SDict begin /product where{pop product(Distiller)search{pop pop pop +version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto +closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show +grestore}if}{pop}ifelse}{pop}ifelse}if end + 0 0 a 0 +TeXcolorgray 6752 1660 a +SDict begin H.S end + 6752 1660 a 6752 1660 a +SDict begin H.R end + 6752 +1660 a 6752 1660 a +SDict begin [/View [/XYZ H.V]/Dest (page.30) cvn /DEST pdfmark end + 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray +0 TeXcolorgray 0 TeXcolorgray 28910 18465 a +tx@Dict begin { -170.71646 56.90549 } PutCoor PutBegin end + 28910 18465 +a 28123 18465 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@GF1 16 {InitRnode } /NodeScale {} def NewNode end end + 28123 18465 a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath 0.8 SLW 0 setgray -9.38945 -9.38945 moveto +9.38945 9.38945 L 0 setlinejoin 0 setlinecap stroke end + +@endspecial 28910 +18465 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 28910 18465 a 29087 19222 a Fv(I:1)28910 18465 +y +tx@Dict begin PutEnd end + 28910 18465 a 28910 18465 a +tx@Dict begin PutEnd end + 28910 18465 a 28910 18465 +a +tx@Dict begin { -113.81097 56.90549 } PutCoor PutBegin end + 28910 18465 a 28910 18465 a +tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@GF1_m_GM1 10 {InitPnode +} /NodeScale {} def NewNode end end + 28910 18465 a 28910 18465 +a +tx@Dict begin PutEnd end + 28910 18465 a 28910 18465 a +tx@Dict begin { -56.90549 56.90549 } PutCoor PutBegin end + 28910 18465 a 28123 18465 +a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@GM1 16 {InitRnode } /NodeScale {} def NewNode end end + 28123 18465 a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath 0.8 SLW 0 setgray 0.0 7.11317 moveto +0.0 -7.11317 L 0 setlinejoin 0 setlinecap stroke end + +@endspecial +@beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial @beginspecial +@setspecial + tx@Dict begin STP newpath 0.8 SLW 0 setgray -9.38945 -9.38945 moveto +9.38945 9.38945 L 0 setlinejoin 0 setlinecap stroke end + +@endspecial 28910 18465 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 28910 18465 a +29087 19222 a Fv(I:2)28910 18465 y +tx@Dict begin PutEnd end + 28910 18465 a 28910 +18465 a +tx@Dict begin PutEnd end + 28910 18465 a 28910 18465 a +tx@Dict begin { 0.0 56.90549 } PutCoor PutBegin end + 28910 18465 a 28123 +18465 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@GF2 16 {InitRnode } /NodeScale {} def NewNode end end + 28123 18465 a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + + +@endspecial 28910 18465 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 28910 18465 a 29087 19222 +a Fv(I:3)28910 18465 y +tx@Dict begin PutEnd end + 28910 18465 a 28910 18465 a +tx@Dict begin PutEnd end + 28910 +18465 a 28910 18465 a +tx@Dict begin { 56.90549 56.90549 } PutCoor PutBegin end + 28910 18465 a 28910 18465 a +tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@GF2_m_GM2 10 {InitPnode +} /NodeScale {} def NewNode end end + 28910 +18465 a 28910 18465 a +tx@Dict begin PutEnd end + 28910 18465 a 28910 18465 a +tx@Dict begin { 113.81097 56.90549 } PutCoor PutBegin end + 28910 +18465 a 28123 18465 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@GM2 16 {InitRnode } /NodeScale {} def NewNode end end + 28123 18465 a 787 w @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 28910 18465 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 28910 18465 a +29087 19222 a Fv(I:4)28910 18465 y +tx@Dict begin PutEnd end + 28910 18465 a 28910 +18465 a +tx@Dict begin PutEnd end + 28910 18465 a 28910 18465 a +tx@Dict begin { -142.26372 0.0 } PutCoor PutBegin end + 28910 18465 a 28123 +18465 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@A1 16 {InitRnode } /NodeScale {} def NewNode end end + 28123 18465 a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath 0.8 SLW 0 setgray /DS 2.0 2. CLW mul +add 2 div def /PSTricksDotFont 0. [1.0 0.0 0.0 1.0 0.0 0.0] FontDot +/Dot { moveto gsave 1. 1. scale (b) show grestore } bind def 0.0 +0.0 Dot end + + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 28910 +18465 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 28910 18465 a 29087 19222 a Fv(I)31 b(I:1)28910 +18465 y +tx@Dict begin PutEnd end + 28910 18465 a 28910 18465 a +tx@Dict begin PutEnd end + 28910 18465 a 28910 +18465 a +tx@Dict begin { -85.35823 0.0 } PutCoor PutBegin end + 28910 18465 a 28123 18465 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@F1 16 {InitRnode } /NodeScale {} def NewNode end end + 28123 18465 a 787 +w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.5 setgray 1. .setopacityalpha + fill grestore gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 +setlinejoin 0 setlinecap stroke grestore end + +@endspecial 28910 18465 +a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 28910 18465 a 29087 19222 a Fv(I)g(I:2)28910 18465 +y +tx@Dict begin PutEnd end + 28910 18465 a 28910 18465 a +tx@Dict begin PutEnd end + 28910 18465 a 28910 18465 +a +tx@Dict begin { 0.0 0.0 } PutCoor PutBegin end + 28910 18465 a 28910 18465 a +tx@Dict begin tx@NodeDict begin {0.0 0.0 } false /N@F1_m_M1 10 {InitPnode +} /NodeScale {} def NewNode end end + 28910 18465 a 28910 18465 +a +tx@Dict begin PutEnd end + 28910 18465 a 28910 18465 a +tx@Dict begin { 56.90549 0.0 } PutCoor PutBegin end + 28910 18465 a 28123 18465 +a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@M1 16 {InitRnode } /NodeScale {} def NewNode end end + 28123 18465 a 787 w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial +28910 18465 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 28910 18465 a 29087 19222 a Fv(I)g(I:3)28910 +18465 y +tx@Dict begin PutEnd end + 28910 18465 a 28910 18465 a +tx@Dict begin PutEnd end + 28910 18465 a 28910 +18465 a +tx@Dict begin { -142.26372 -56.90549 } PutCoor PutBegin end + 28910 18465 a 28123 18465 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@C1 16 {InitRnode } /NodeScale {} def NewNode end end + 28123 18465 a 787 +w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.5 setgray 1. .setopacityalpha fill + grestore gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore end + +@endspecial 28910 18465 +a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 28910 18465 a 29087 19222 a Fv(I)g(I)g(I:1)28910 18465 +y +tx@Dict begin PutEnd end + 28910 18465 a 28910 18465 a +tx@Dict begin PutEnd end + 28910 18465 a 28910 18465 +a +tx@Dict begin { -56.90549 -56.90549 } PutCoor PutBegin end + 28910 18465 a 28123 18465 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@P 16 {InitRnode } /NodeScale {} def NewNode end end + 28123 18465 a 787 w @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.5 setgray 1. .setopacityalpha + fill grestore gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 +setlinejoin 0 setlinecap stroke grestore end + +@endspecial @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { BeginArrow +1. 1. scale false 0.4 1.4 1.5 2. CLW mul add dup 2 div /w ED mul +dup /h ED mul /a ED { 0 h T 1 -1 scale } if gsave w neg h moveto 0 +0 L w h L w neg a neg rlineto gsave fill grestore grestore 0 h a sub +moveto EndArrow } def /ArrowInside { } def 0.8 SLW 0 setgray +/ArrowA { moveto } def /ArrowB { BeginArrow 1. 1. scale false 0.4 +1.4 1.5 2. CLW mul add dup 2 div /w ED mul dup /h ED mul /a ED { 0 +h T 1 -1 scale } if gsave w neg h moveto 0 0 L w h L w neg a neg rlineto +gsave fill grestore grestore 0 h a sub moveto EndArrow } def /ArrowInside +{ } def [ -8.2511 -8.2511 -15.6491 -15.6491 /Lineto /lineto load +def 0 setlinejoin false NArray n 0 eq not { n 1 eq { 0 0 /n 2 def +} if () length 0 gt { 1.5 2. CLW mul add dup 1.4 mul exch 0.4 mul +neg add /arrowlength exch def 4 copy /y1 ED /x1 ED /y2 ED /x2 ED /Alpha +y2 y1 sub x2 x1 sub Atan def ArrowA x1 Alpha cos arrowlength mul add +y1 Alpha sin arrowlength mul add /n n 1 sub def n { 4 copy /y1 ED /x1 +ED /y2 ED /x2 ED x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub Atan +def /ArrowPos 0. def /dArrowPos 0.5 abs def 1. cvi { /ArrowPos ArrowPos +dArrowPos add def x1 Alpha cos ArrowPos mul add y1 Alpha sin ArrowPos +mul add ArrowInside pop pop } repeat }{ /ArrowPos 0. def /dArrowPos +1. 1 gt {1.0 1. 1.0 add div }{0.5 } ifelse def 1. cvi { /ArrowPos +ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul x1 add y2 y1 sub +ArrowPos mul y1 add ArrowInside pop pop } repeat } ifelse pop pop Lineto +} repeat }{ ArrowA /n n 2 sub def n { Lineto } repeat } ifelse CP 4 +2 roll ArrowB L pop pop } if gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial +28910 18465 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 28910 18465 a 29087 19222 a Fv(I)g(I)g(I:2)28910 +18465 y +tx@Dict begin PutEnd end + 28910 18465 a 28910 18465 a +tx@Dict begin PutEnd end + 28910 18465 a 28910 +18465 a +tx@Dict begin { 0.0 -56.90549 } PutCoor PutBegin end + 28910 18465 a 28123 18465 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@S1 16 {InitRnode } /NodeScale {} def NewNode end end + 28123 18465 a 787 +w @beginspecial @setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray 0.0 0.0 7.11317 .5 CLW mul +sub 0 360 arc closepath gsave 0.5 setgray 1. .setopacityalpha fill + grestore gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore end + +@endspecial 28910 18465 +a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 28910 18465 a 29087 19222 a Fv(I)g(I)g(I:3)28910 18465 +y +tx@Dict begin PutEnd end + 28910 18465 a 28910 18465 a +tx@Dict begin PutEnd end + 28910 18465 a 28910 18465 +a +tx@Dict begin { 56.90549 -56.90549 } PutCoor PutBegin end + 28910 18465 a 28123 18465 a +tx@Dict begin tx@NodeDict begin {7.11317 7.11317 14.22635 7.11317 0.0 +} false /N@S2 16 {InitRnode } /NodeScale {} def NewNode end end + 28123 18465 a 787 w @beginspecial +@setspecial + tx@Dict begin STP newpath /ArrowA { moveto } def /ArrowB { } def +/ArrowInside { } def 0.8 SLW 0 setgray [ 7.11317 -7.11317 7.11317 +7.11317 -7.11317 7.11317 -7.11317 -7.11317 /Lineto /lineto load def +0 setlinejoin false NArray n 2 eq { 0 0 /n 3 def } if n 3 lt { n { +pop pop } repeat }{ n 3 gt { CheckClosed } if n 2 mul -2 roll /y0 ED +/x0 ED /y1 ED /x1 ED /xx1 x1 def /yy1 y1 def x1 y1 /x1 x0 x1 add 2 +div def /y1 y0 y1 add 2 div def x1 y1 moveto /n n 2 sub def /drawArrows +{ x11 y11 0.5 1 gt { /Alpha y12 y11 sub x12 x11 sub atan def /ArrowPos +0. def /Length x12 x11 sub y12 y11 sub Pyth def /dArrowPos 0.5 abs +def { /ArrowPos ArrowPos dArrowPos add def ArrowPos Length gt { exit +} if x11 Alpha cos ArrowPos mul add y11 Alpha sin ArrowPos mul add +currentdict /ArrowInside known { ArrowInside } if pop pop } loop }{ +/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } +ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def x12 x11 sub +ArrowPos mul x11 add y12 y11 sub ArrowPos mul y11 add currentdict /ArrowInside +known { ArrowInside } if pop pop } repeat } ifelse pop pop Lineto } +def n { 4 copy /y11 ED /x11 ED /y12 ED /x12 ED drawArrows } repeat +x1 y1 x0 y0 6 4 roll 2 copy /y11 ED /x11 ED /y12 y0 def /x12 x0 def +drawArrows /y11 y0 def /x11 x0 def /y12 yy1 def /x12 xx1 def drawArrows +pop pop closepath } ifelse gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore end + +@endspecial 28910 18465 a +tx@Dict begin { 0.0 -11.38092 } PutCoor PutBegin end + 28910 18465 a +29087 19222 a Fv(I)g(I)g(I:4)28910 18465 y +tx@Dict begin PutEnd end + 28910 18465 +a 28910 18465 a +tx@Dict begin PutEnd end + 28910 18465 a 28910 18465 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@GF1_m_GM1 /N@A1 InitNC { tx@Dict begin +/Lineto /lineto load def 0 setlinejoin false pop end /AngleA -90. +def /AngleB 90. def /ArmA 28.45274 GetEdgeA yA yA1 sub dup mul xA xA1 +sub dup mul add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB +0 def NCAngles } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore grestore end + 28910 18465 +a 28910 18465 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@GF1_m_GM1 /N@F1 InitNC { tx@Dict begin +/Lineto /lineto load def 0 setlinejoin false pop end /AngleA -90. +def /AngleB 90. def /ArmA 28.45274 GetEdgeA yA yA1 sub dup mul xA xA1 +sub dup mul add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB +0 def NCAngles } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore grestore end + 28910 18465 a 28910 18465 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@GF1_m_GM1 /N@GM1 InitNC { NCCoor tx@Dict +begin ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED +x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. + def /Length x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos +ArrowPos dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } loop }{/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div +}{ 0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop lineto pop pop end } if end gsave +0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin 0 setlinecap +stroke grestore grestore end + 28910 18465 +a 28910 18465 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@GF1_m_GM1 /N@GF1 InitNC { NCCoor tx@Dict +begin ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED +x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. + def /Length x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos +ArrowPos dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } loop }{/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div +}{ 0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop lineto pop pop end } if end gsave +0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin 0 setlinecap +stroke grestore grestore end + 28910 18465 a 28910 18465 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@GF2_m_GM2 /N@M1 InitNC { tx@Dict begin +/Lineto /lineto load def 0 setlinejoin false pop end /AngleA -90. +def /AngleB 90. def /ArmA 28.45274 GetEdgeA yA yA1 sub dup mul xA xA1 +sub dup mul add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB +0 def NCAngles } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha + 0 setlinejoin 0 setlinecap stroke grestore grestore end + 28910 18465 +a 28910 18465 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@GF2_m_GM2 /N@GM2 InitNC { NCCoor tx@Dict +begin ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED +x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. + def /Length x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos +ArrowPos dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } loop }{/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div +}{ 0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop lineto pop pop end } if end gsave +0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin 0 setlinecap +stroke grestore grestore end + 28910 18465 a 28910 18465 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@GF2_m_GM2 /N@GF2 InitNC { NCCoor tx@Dict +begin ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED +x1 y1 0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. + def /Length x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos +ArrowPos dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha +cos ArrowPos mul add y1 Alpha sin ArrowPos mul add ArrowInside pop +pop } loop }{/ArrowPos 0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div +}{ 0.5 } ifelse def 1. cvi { /ArrowPos ArrowPos dArrowPos add def +x2 x1 sub ArrowPos mul x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside +pop pop } repeat } ifelse pop pop lineto pop pop end } if end gsave +0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin 0 setlinecap +stroke grestore grestore end + 28910 18465 +a 28910 18465 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@A1 /N@C1 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 28.45274 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 28910 18465 a 28910 18465 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@F1_m_M1 /N@P InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 28.45274 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 28910 18465 +a 28910 18465 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@F1_m_M1 /N@S1 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 28.45274 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 28910 18465 a 28910 18465 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@F1_m_M1 /N@S2 InitNC { tx@Dict begin /Lineto +/lineto load def 0 setlinejoin false pop end /AngleA -90. def /AngleB +90. def /ArmA 28.45274 GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul +add sqrt sub def /ArmB 0.0 def /ArmTypeA 0 def /ArmTypeB 0 def NCAngles + } if end gsave 0.8 SLW 0 setgray 1. .setopacityalpha 0 setlinejoin +0 setlinecap stroke grestore grestore end + 28910 18465 +a 28910 18465 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@F1_m_M1 /N@M1 InitNC { NCCoor tx@Dict begin +ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1 +0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length +x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos +0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def +1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul +x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat } +ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray + 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore + grestore end + 28910 18465 a 28910 18465 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /ArrowA { moveto } def +/ArrowB { } def /ArrowInside { } def /NCLW CLW def tx@NodeDict begin +0.0 0.0 neg 0.0 0.0 0 0 /N@F1_m_M1 /N@F1 InitNC { NCCoor tx@Dict begin +ArrowA CP 4 2 roll ArrowB 4 copy /y2 ED /x2 ED /y1 ED /x1 ED x1 y1 +0.5 1 gt { /Alpha y2 y1 sub x2 x1 sub atan def /ArrowPos 0. def /Length +x2 x1 sub y2 y1 sub Pyth def /dArrowPos 0.5 abs def {/ArrowPos ArrowPos +dArrowPos add def ArrowPos Length gt { exit } if x1 Alpha cos ArrowPos +mul add y1 Alpha sin ArrowPos mul add ArrowInside pop pop } loop }{/ArrowPos +0. def /dArrowPos 1. 1 gt {1.0 1. 1.0 add div }{ 0.5 } ifelse def +1. cvi { /ArrowPos ArrowPos dArrowPos add def x2 x1 sub ArrowPos mul +x1 add y2 y1 sub ArrowPos mul y1 add ArrowInside pop pop } repeat } +ifelse pop pop lineto pop pop end } if end gsave 0.8 SLW 0 setgray + 1. .setopacityalpha 0 setlinejoin 0 setlinecap stroke grestore + grestore end + 28910 18465 +a 28910 18465 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /NCLW CLW def tx@NodeDict +begin 0.0 0.0 neg 19.91682 19.91682 0 0 /N@GF1 /N@GM1 InitNC { tx@Dict +begin /Lineto /lineto load def 0 setlinejoin false pop end 28.45274 +19.91682 NCBox } if end gsave 45. rotate 0.08 SLW 0 0 1 setrgbcolor +0.8 0.0 0.0 LineFill grestore grestore end + 28910 18465 a 28910 18465 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /NCLW CLW def tx@NodeDict +begin 0.0 0.0 neg 19.91682 19.91682 0 0 /N@A1 /N@F1 InitNC { tx@Dict +begin /Lineto /lineto load def 0 setlinejoin false pop end 36.98865 +19.91682 NCBox } if end gsave 45. rotate 0.08 SLW 0 0 1 setrgbcolor +0.8 0.0 0.0 LineFill grestore grestore end + 28910 18465 +a 28910 18465 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /NCLW CLW def tx@NodeDict +begin 0.0 0.0 neg 19.91682 19.91682 0 0 /N@C1 /N@C1 InitNC { tx@Dict +begin /Lineto /lineto load def 0 setlinejoin false pop end 36.98865 +19.91682 NCBox } if end gsave 45. rotate 0.08 SLW 0 0 1 setrgbcolor +0.8 0.0 0.0 LineFill grestore grestore end + 28910 18465 a 28910 18465 a +tx@Dict begin { -113.81097 91.04869 } PutCoor PutBegin end + 28910 18465 +a 0 0 1 TeXcolorrgb 24901 18742 a Fv(Left)369 b(subp)31 +b(edigree)p 0 TeXcolorgray 28910 18465 a +tx@Dict begin PutEnd end + 28910 18465 +a 28910 18465 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /NCLW CLW def tx@NodeDict +begin 0.0 0.0 neg 19.91682 19.91682 0 0 /N@GF2 /N@GM2 InitNC { tx@Dict +begin /Lineto /lineto load def 0 setlinejoin false pop end 28.45274 +19.91682 NCBox } if end gsave 45. rotate 0.08 SLW 1 0 0 setrgbcolor +0.8 0.0 0.0 LineFill grestore grestore end + 28910 18465 a 28910 18465 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /NCLW CLW def tx@NodeDict +begin 0.0 0.0 neg 19.91682 19.91682 0 0 /N@M1 /N@M1 InitNC { tx@Dict +begin /Lineto /lineto load def 0 setlinejoin false pop end 36.98865 +19.91682 NCBox } if end gsave 45. rotate 0.08 SLW 1 0 0 setrgbcolor +0.8 0.0 0.0 LineFill grestore grestore end + 28910 18465 +a 28910 18465 a +tx@Dict begin { 56.90549 91.04869 } PutCoor PutBegin end + 28910 18465 a 1 0 0 TeXcolorrgb 24532 +18742 a Fv(Righ)-31 b(t)370 b(subp)31 b(edigree)p 0 TeXcolorgray +28910 18465 a +tx@Dict begin PutEnd end + 28910 18465 a 28910 18465 a +tx@Dict begin gsave STV newpath /ArrowA { moveto } def /ArrowB { } +def /ArrowInside { } def 0.8 SLW 0 setgray /NCLW CLW def tx@NodeDict +begin 0.0 0.0 neg 19.91682 19.91682 0 0 /N@P /N@S2 InitNC { tx@Dict +begin /Lineto /lineto load def 0 setlinejoin false pop end 36.98865 +19.91682 NCBox } if end gsave 45. rotate 0.08 SLW 0 1 0 setrgbcolor +0.8 0.0 0.0 LineFill grestore grestore end + 28910 18465 +a 28910 18465 a +tx@Dict begin { 0.0 -85.35823 } PutCoor PutBegin end + 28910 18465 a 0 1 0 TeXcolorrgb 25241 +18850 a Fv(Do)-31 b(wn)g(w)g(ard)370 b(tree)p 0 TeXcolorgray +28910 18465 a +tx@Dict begin PutEnd end + 28910 18465 a 28910 18465 a +tx@Dict begin { 0.0 0.0 } PutCoor PutBegin end + 28910 18465 +a @beginspecial @setspecial + tx@Dict begin STP newpath 0.8 SLW 0 setgray /DS 2.0 2. CLW mul +add 2 div def /PSTricksDotFont 0. [1.0 0.0 0.0 1.0 0.0 0.0] FontDot +/Dot { moveto gsave 1. 1. scale (b) show grestore } bind def 0.0 +0.0 Dot end + +@endspecial 28910 18465 +a +tx@Dict begin PutEnd end + 28910 18465 a 28910 18465 a +tx@Dict begin { 0.0 5.69046 } PutCoor PutBegin end + 28910 18465 a 26410 18850 +a Fv(Lo)31 b(cal)371 b(ro)31 b(ot)28910 18465 y +tx@Dict begin PutEnd end + 28910 +18465 a 0 TeXcolorgray 15033 33499 a Fv(Figure)369 b(11:)p +0 TeXcolorgray 20433 33499 a +SDict begin H.S end + 20433 33499 a 20433 33499 +a +SDict begin H.R end + 20433 33499 a 20433 33499 a +SDict begin [/View [/XYZ H.V]/Dest (figure.11) cvn /DEST pdfmark end + 20433 33499 a 0 TeXcolorgray +Fv(Subp)31 b(edigrees)368 b(and)i(Do)-31 b(wn)g(w)g(ard)371 +b(T)-92 b(ree)p 0 TeXcolorgray 0 TeXcolorgray 6863 37035 +a(case)450 b(when)g(the)h(lo)31 b(cal)451 b(ro)31 b(ot)451 +b(is)f(a)g(marriage)h(no)31 b(de.)736 b(In)449 b(this)h(case)g(w)-31 +b(e)451 b(can)f(t)-31 b(yp)31 b(eset)451 b(the)6863 38364 +y(do)-31 b(wn)g(w)g(ard)339 b(tree)e(using)h(Reingold-Tilford)i +(algorithm.)485 b(The)338 b(sp)31 b(ouses)336 b(do)h(not)h(b)31 +b(elong)338 b(to)6863 39692 y(this)349 b(tree.)485 b(Ho)-31 +b(w)g(ev)g(er,)354 b(eac)-31 b(h)349 b(of)f(them)h(b)31 +b(elongs)348 b(to)h(eac)-31 b(h)349 b(o)-31 b(wn)349 +b(subp)31 b(edigree.)485 b(W)-92 b(e)347 b(will)j(call)6863 +41020 y(them)337 b Fn(left)365 b(subp)-57 b(e)g(digr)g(e)g(e)421 +b Fv(and)336 b Fn(right)366 b(subp)-57 b(e)g(digr)g(e)g(e)p +Fv(.)483 b(W)-92 b(e)335 b(recursiv)-31 b(ely)336 b(apply)h(our)e +(algorithm)6863 42349 y(to)442 b(t)-31 b(yp)31 b(eset)442 +b(left)h(and)f(righ)-31 b(t)442 b(subp)31 b(edigrees.)709 +b(Then)441 b(w)-31 b(e)442 b(mo)-31 b(v)g(e)443 b(the)f(left)g(subp)31 +b(edigree)441 b(to)6863 43677 y(the)351 b(righ)-31 b(t)352 +b(and)g(righ)-31 b(t)352 b(subp)31 b(edigree)350 b(to)i(the)f(left)h +(as)f(far)g(as)g(w)-31 b(e)351 b(can)g(without)i(in)-31 +b(tersection)6863 45005 y(b)31 b(et)-31 b(w)g(een)370 +b(them)g(and)g(the)f(do)-31 b(wn)g(w)g(ard)371 b(tree.)8524 +46334 y(This)329 b(pro)31 b(cess)328 b(is)h(sho)-31 b(wn)329 +b(on)h(Figure)p 0 TeXcolorgray 24170 46334 a +SDict begin H.S end + 24170 46334 +a 0 TeXcolorgray Fv(11)p 0 TeXcolorgray 25276 45620 a +SDict begin H.R end + +25276 45620 a 25276 46334 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (figure.11) cvn H.B /ANN pdfmark end + 25276 46334 a 0 TeXcolorgray +Fv(.)481 b(Ob)-31 b(viously)330 b(this)f(algorithm)j(con)-31 +b(v)g(erges)330 b(and)6863 47662 y(leads)291 b(to)h(t)-31 +b(yp)31 b(esetting)293 b(the)e(p)31 b(edigree)290 b(without)j(in)-31 +b(tersections)292 b(b)31 b(et)-31 b(w)g(een)292 b(the)f(subtrees)f(and) +6863 48990 y(subp)31 b(edigrees.)6863 50874 y +SDict begin H.S end + 6863 50874 +a 6863 50874 a +SDict begin 12 H.A end + 6863 50874 a 6863 50874 a +SDict begin [/View [/XYZ H.V]/Dest (section.7) cvn /DEST pdfmark end + 6863 50874 a +1777 x Fu(7)1793 b(Algorithm)696 b(for)e(Sorting)h(Siblings)g(and)g +(Marriage)9553 54644 y(P)-50 b(artners)6863 57068 y Fv(When)393 +b(w)-31 b(e)394 b(create)f(a)h(marriage)g(no)31 b(de,)400 +b(w)-31 b(e)393 b(w)-31 b(an)g(t)395 b(to)f(put)g(the)f(male)i(to)f +(the)f(left)h(and)g(the)6863 58396 y(female)426 b(to)f(the)g(righ)-31 +b(t.)659 b(When)424 b(w)-31 b(e)425 b(then)g(sort)f(siblings,)440 +b(w)-31 b(e)425 b(w)-31 b(an)g(t)426 b(this)f(male)h(to)f(b)31 +b(e)424 b(the)6863 59725 y(righ)-31 b(tmost,)370 b(and)d(the)g(female)h +(to)g(b)31 b(e)366 b(the)h(leftmost.)494 b(T)-92 b(o)367 +b(do)g(so,)h(w)-31 b(e)367 b(assign)g(to)h(eac)-31 b(h)367 +b(no)31 b(de)6863 61053 y(the)481 b(sp)31 b(ecial)481 +b(quan)-31 b(tit)g(y)483 b Fq(SortOrder)q Fv(.)826 b(Initially)483 +b(all)f(no)31 b(des)480 b(ha)-31 b(v)g(e)481 b Fq(SortOrder)h +Fv(equal)f(to)6863 62381 y(zero,)367 b(unless)e(sp)31 +b(eci\014cally)368 b(set)d(b)-31 b(y)367 b(the)f(user)f(in)h(the)g +(input)h(\014le)f(\(see)f(Section)p 0 TeXcolorgray 39889 +62381 a +SDict begin H.S end + 39889 62381 a 0 TeXcolorgray Fv(4.6)p 0 TeXcolorgray +41302 61668 a +SDict begin H.R end + 41302 61668 a 41302 62381 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (subsection.4.6) cvn H.B /ANN pdfmark end + 41302 62381 +a 0 TeXcolorgray Fv(\).)493 b(Then)6863 63710 y(w)-31 +b(e)370 b(use)e(the)i(follo)-31 b(wing)373 b(rules:)6863 +64368 y +SDict begin H.S end + 6863 64368 a 6863 64368 a +SDict begin 12 H.A end + 6863 64368 a 6863 64368 +a +SDict begin [/View [/XYZ H.V]/Dest (Item.19) cvn /DEST pdfmark end + 6863 64368 a 0 TeXcolorgray 8216 65924 a Fv(1.)p 0 +TeXcolorgray 555 w(When)368 b(creating)j(the)e(the)g(marriage)i(no)31 +b(de:)p 0 TeXcolorgray 25405 70071 a(30)p 0 TeXcolorgray +eop end +%%Page: 31 31 +TeXDict begin 31 30 bop 0 TeXcolorgray 0 0 a +SDict begin /product where{pop product(Distiller)search{pop pop pop +version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto +closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show +grestore}if}{pop}ifelse}{pop}ifelse}if end + 0 0 a 0 +TeXcolorgray 6752 1660 a +SDict begin H.S end + 6752 1660 a 6752 1660 a +SDict begin H.R end + 6752 +1660 a 6752 1660 a +SDict begin [/View [/XYZ H.V]/Dest (page.31) cvn /DEST pdfmark end + 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray +0 TeXcolorgray 6863 5867 a +SDict begin H.S end + 6863 5867 a 6863 5867 a +SDict begin 12 H.A end + 6863 +5867 a 6863 5867 a +SDict begin [/View [/XYZ H.V]/Dest (Item.20) cvn /DEST pdfmark end + 6863 5867 a 0 TeXcolorgray 10098 6974 +a Fv(\(a\))p 0 TeXcolorgray 555 w(If)316 b(b)31 b(oth)318 +b(sp)31 b(ouses)315 b(ha)-31 b(v)g(e)318 b(equal)g Fq(SortOrder)g +Fv(\014eld,)328 b(the)317 b(male)h(go)31 b(es)317 b(to)h(the)f(left,) +12066 8302 y(the)369 b(female)i(go)31 b(es)369 b(to)h(the)g(righ)-31 +b(t.)6863 8739 y +SDict begin H.S end + 6863 8739 a 6863 8739 a +SDict begin 12 H.A end + 6863 8739 a +6863 8739 a +SDict begin [/View [/XYZ H.V]/Dest (Item.21) cvn /DEST pdfmark end + 6863 8739 a 0 TeXcolorgray 10036 10073 a +Fv(\(b\))p 0 TeXcolorgray 555 w(Otherwise,)370 b(the)f(sp)31 +b(ouse)369 b(with)h(greater)g Fq(SortOrder)g Fv(go)31 +b(es)369 b(to)h(the)g(left.)6863 10571 y +SDict begin H.S end + 6863 10571 a +6863 10571 a +SDict begin 12 H.A end + 6863 10571 a 6863 10571 a +SDict begin [/View [/XYZ H.V]/Dest (Item.22) cvn /DEST pdfmark end + 6863 10571 a 0 +TeXcolorgray 10159 11844 a Fv(\(c\))p 0 TeXcolorgray +555 w(If)377 b Fq(SortOrder)i Fv(of)f(a)g(sp)31 b(ouse)377 +b(is)h(0,)j(w)-31 b(e)378 b(set)f(it)i(to)f(1)g(\(the)h(sp)31 +b(ouse)377 b(on)h(the)g(left\))12066 13173 y(or)369 b(-1)g(\(the)h(sp) +31 b(ouse)369 b(on)g(the)h(righ)-31 b(t\).)6863 13892 +y +SDict begin H.S end + 6863 13892 a 6863 13892 a +SDict begin 12 H.A end + 6863 13892 a 6863 13892 a +SDict begin [/View [/XYZ H.V]/Dest (Item.23) cvn /DEST pdfmark end + +6863 13892 a 0 TeXcolorgray 8216 15387 a Fv(2.)p 0 TeXcolorgray +555 w(When)368 b(sorting)i(siblings:)6863 16266 y +SDict begin H.S end + 6863 +16266 a 6863 16266 a +SDict begin 12 H.A end + 6863 16266 a 6863 16266 a +SDict begin [/View [/XYZ H.V]/Dest (Item.24) cvn /DEST pdfmark end + 6863 16266 +a 0 TeXcolorgray 10098 17601 a Fv(\(a\))p 0 TeXcolorgray +555 w(The)f(sibling)i(with)f(smaller)g Fq(SortOrder)h +Fv(go)31 b(es)369 b(to)h(the)f(left.)6863 18099 y +SDict begin H.S end + 6863 +18099 a 6863 18099 a +SDict begin 12 H.A end + 6863 18099 a 6863 18099 a +SDict begin [/View [/XYZ H.V]/Dest (Item.25) cvn /DEST pdfmark end + 6863 18099 +a 0 TeXcolorgray 10036 19372 a Fv(\(b\))p 0 TeXcolorgray +555 w(If)345 b(b)31 b(oth)345 b(siblings)h(ha)-31 b(v)g(e)346 +b(the)f(same)g Fq(SortOrder)r Fv(,)350 b(the)345 b(oldest)h(one)f(go)31 +b(es)345 b(to)h(the)12066 20700 y(left.)6863 22368 y +SDict begin H.S end + +6863 22368 a 6863 22368 a +SDict begin 12 H.A end + 6863 22368 a 6863 22368 a +SDict begin [/View [/XYZ H.V]/Dest (section.8) cvn /DEST pdfmark end + 6863 +22368 a 1993 x Fu(8)1793 b(Mo)50 b(di\014cations)598 +b(for)g(Consangunic)h(Unions)6863 26785 y Fv(Consanguinic)500 +b(unions)d(presen)-31 b(t)497 b(a)g(problem)h(for)f(the)h(describ)31 +b(ed)496 b(algorithm,)533 b(b)31 b(ecause)6863 28114 +y(p)g(edigrees)369 b(with)h(them)g(are)f(no)h(longer)g(trees)e(\(see)h +(Figure)p 0 TeXcolorgray 32126 28114 a +SDict begin H.S end + 32126 28114 a +0 TeXcolorgray Fv(10)p 0 TeXcolorgray 33232 27400 a +SDict begin H.R end + 33232 +27400 a 33232 28114 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (figure.10) cvn H.B /ANN pdfmark end + 33232 28114 a 0 TeXcolorgray Fv(\).)8524 +29442 y(In)269 b(this)i(release)e(of)i(the)f(program)h(w)-31 +b(e)271 b(use)e(the)h(follo)-31 b(wing)274 b(hac)-31 +b(k.)460 b(The)271 b(direct)f(lineage)i(of)6863 30770 +y(the)317 b(proband)f(\(or,)328 b(more)316 b(generally)-92 +b(,)329 b(the)316 b(starting)h(no)31 b(de\))317 b(ma)-31 +b(y)317 b(ha)-31 b(v)g(e)318 b(b)31 b(oth)316 b(mothers)h(and)6863 +32099 y(fathers)361 b(in)f(the)h(p)31 b(edigree)361 b(b)31 +b(ecause)360 b(they)h(share)e(genes)i(from)g(the)g(starting)g(no)31 +b(de.)490 b(If)360 b(an)-31 b(y)6863 33427 y(other)401 +b(p)31 b(erson)399 b(has)h(b)31 b(oth)401 b(mother)g(and)g(father)f(in) +h(the)f(c)-31 b(hart,)409 b(his)401 b(or)f(her)f(paren)-31 +b(ts)401 b(b)31 b(oth)6863 34755 y(shared)281 b(their)h(genes)g(with)h +(the)f(starting)h(no)31 b(de.)463 b(Therefore)282 b(they)g(formed)g(a)g +(consanguinic)6863 36084 y(union.)964 b(In)525 b(this)i(case)f(the)g(c) +-31 b(hildren)527 b(of)f(this)g(no)31 b(de)526 b(app)31 +b(ear)526 b(in)h(t)-31 b(w)g(o)527 b(subtrees:)806 b(their)6863 +37412 y(mother's)370 b(and)g(their)f(father's.)8524 38741 +y(W)-92 b(e)504 b(delete)j(them)f(from)g(one)g(of)g(the)f(subtrees)g +(\(the)h(one)g(with)h(lo)-31 b(w)g(er)506 b(generation)6863 +40069 y(n)-31 b(um)g(b)31 b(er\),)328 b(connect)316 b(their)h(paren)-31 +b(ts)316 b(with)h(a)f(double)h(line)f(\(consanguinic)j(union\))e(and)f +(put)6863 41397 y(the)370 b(descen)-31 b(t)369 b(line)h(from)g(the)f +(middle)h(of)g(the)f(union)h(to)g(them.)8524 42726 y(There)494 +b(are)g(t)-31 b(w)g(o)497 b(problems)d(with)i(this)f(hac)-31 +b(k)495 b(\(see)g(Section)p 0 TeXcolorgray 34894 42726 +a +SDict begin H.S end + 34894 42726 a 0 TeXcolorgray Fv(4.7)p 0 TeXcolorgray +36307 42012 a +SDict begin H.R end + 36307 42012 a 36307 42726 a +SDict begin [/Color [1 0 0]/H /I/Border [0 0 0]BorderArrayPatch/Subtype +/Link/Dest (subsection.4.7) cvn H.B /ANN pdfmark end + 36307 42726 +a 0 TeXcolorgray Fv(\):)745 b(the)495 b(c)-31 b(hildren)495 +b(of)6863 44054 y(consanguinic)357 b(unions)e(are)g(not)h(cen)-31 +b(tered)355 b(on)g(the)g(diagaram,)361 b(and)355 b(the)g(hac)-31 +b(k)356 b(fails)g(if)g(the)6863 45382 y(starting)371 +b(no)31 b(de)369 b(itself)h(is)f(a)h(descendan)-31 b(t)369 +b(of)h(a)g(consanguinic)h(union.)8524 46711 y(Probably)460 +b(the)f(next)g(releases)f(will)i(emplo)-31 b(y)461 b(b)31 +b(etter)459 b(algorithms)i(for)d(consanguinic)6863 48039 +y(unions.)6863 49707 y +SDict begin H.S end + 6863 49707 a 6863 49707 a +SDict begin 12 H.A end + 6863 +49707 a 6863 49707 a +SDict begin [/View [/XYZ H.V]/Dest (section.9) cvn /DEST pdfmark end + 6863 49707 a 1993 x Fu(9)1793 b(Conclusion)6863 +54124 y Fv(The)532 b(algorithm)j(seems)c(to)i(b)31 b(e)531 +b(e\016cien)-31 b(t)533 b(and)f(pro)31 b(ducing)533 b(nicely)g(t)-31 +b(yp)31 b(eset)532 b(p)31 b(edigrees.)6863 55453 y(Since)508 +b(the)g(input)h(\014le)f(format)i(is)e(simple,)544 b(it)508 +b(ma)-31 b(y)509 b(b)31 b(e)508 b(used)f(b)-31 b(y)508 +b(the)h(p)31 b(eople)508 b(without)6863 56781 y(sp)31 +b(ecial)414 b(skills)f(in)h(L)14932 56554 y Fp(A)15420 +56781 y Fv(T)16034 57019 y(E)16649 56781 y(X.)624 b(On)413 +b(the)g(other)g(hand,)425 b(the)413 b(T)30880 57019 y(E)31496 +56781 y(X)g(\014les)f(pro)31 b(duces)413 b(are)f(easy)h(to)6863 +58109 y(understand)369 b(and)h(edit)g(man)-31 b(ually)371 +b(if)f(the)g(need)e(arises.)p 0 TeXcolorgray 25405 70071 +a(31)p 0 TeXcolorgray eop end +%%Page: 32 32 +TeXDict begin 32 31 bop 0 TeXcolorgray 0 0 a +SDict begin /product where{pop product(Distiller)search{pop pop pop +version(.)search{exch pop exch pop(3011)eq{gsave newpath 0 0 moveto +closepath clip/Courier findfont 10 scalefont setfont 72 72 moveto(.)show +grestore}if}{pop}ifelse}{pop}ifelse}if end + 0 0 a 0 +TeXcolorgray 6752 1660 a +SDict begin H.S end + 6752 1660 a 6752 1660 a +SDict begin H.R end + 6752 +1660 a 6752 1660 a +SDict begin [/View [/XYZ H.V]/Dest (page.32) cvn /DEST pdfmark end + 6752 1660 a 0 TeXcolorgray 0 TeXcolorgray +0 TeXcolorgray 6863 5867 a +SDict begin H.S end + 6863 5867 a 6863 5867 a +SDict begin 12 H.A end + 6863 +5867 a 6863 5867 a +SDict begin [/View [/XYZ H.V]/Dest (section.10) cvn /DEST pdfmark end + 6863 5867 a 1107 x Fu(10)1793 b(Ac)-50 +b(kno)g(wledgemen)g(ts)6863 9398 y Fv(The)495 b(authors)g(are)f +(grateful)i(to)f(Herb)31 b(ert)493 b(V)-92 b(o\031)496 +b(for)e(help)h(with)g Fq(PSTricks)h Fv(co)31 b(de.)868 +b(The)6863 10727 y(supp)31 b(ort)496 b(of)583 b(T)13177 +10965 y(E)13793 10727 y(X)496 b(User)f(Group)g(is)h(gratefully)j(ac)-31 +b(kno)g(wledged.)876 b(One)496 b(of)g(the)h(authors)6863 +12055 y(\(LA\))408 b(w)-31 b(as)408 b(supp)31 b(orted)407 +b(b)-31 b(y)407 b(Russian)g(F)-92 b(oundation)408 b(for)g(F)-92 +b(undamen)-31 b(tal)408 b(Researc)-31 b(h)407 b(\(tra)-31 +b(v)g(el)6863 13383 y(gran)g(t)252 b(06-04-58811\),)279 +b(Russian)250 b(F)-92 b(ederation)251 b(Presiden)-31 +b(t)251 b(Council)h(for)e(Gran)-31 b(ts)250 b(Supp)31 +b(orting)6863 14712 y(Y)-92 b(oung)370 b(Scien)-31 b(tists)370 +b(and)g(Flagship)g(Science)f(Sc)-31 b(ho)31 b(ols)370 +b(\(gran)-31 b(t)371 b(MD-4245.2006.7\))6863 18372 y +SDict begin H.S end + +6863 18372 a 6863 18372 a +SDict begin 18 H.A end + 6863 18372 a 6863 18372 a +SDict begin [/View [/XYZ H.V]/Dest (section*.5) cvn /DEST pdfmark end + 6863 +18372 a Fu(References)6863 19026 y +SDict begin H.S end + 6863 19026 a 6863 +19026 a +SDict begin 12 H.A end + 6863 19026 a 6863 19026 a +SDict begin [/View [/XYZ H.V]/Dest (cite.PedigreeNomenclature95) cvn +/DEST pdfmark end + 6863 19026 a 0 TeXcolorgray +1771 x Fv([1])p 0 TeXcolorgray 555 w(Robin)480 b(L.)f(Bennett,)508 +b(Kathryn)479 b(A.)h(Steinhaus,)507 b(Stefanie)481 b(B.)e(Uhric)-31 +b(h,)507 b(Corrine)480 b(K.)8585 22125 y(O'Sulliv)-61 +b(an,)369 b(Rob)31 b(ert)365 b(G.)h(Resta,)h(Debra)e(Lo)31 +b(c)-31 b(hner-Do)g(yle,)367 b(Dorene)e(S.)h(Mark)-31 +b(ei,)368 b(Vic-)8585 23454 y(toria)392 b(Vincen)-31 +b(t,)398 b(and)391 b(Jan)f(Hamanishi.)558 b(Recommendations)393 +b(for)e(standardized)g(h)-31 b(u-)8585 24782 y(man)370 +b(p)31 b(edigree)369 b(nomenclature.)493 b Fn(A)-28 b(m.)397 +b(J.)f(Hum.)h(Genet.)p Fv(,)371 b(56\(3\):745{752,)k(1995.)6863 +25502 y +SDict begin H.S end + 6863 25502 a 6863 25502 a +SDict begin 12 H.A end + 6863 25502 a 6863 25502 +a +SDict begin [/View [/XYZ H.V]/Dest (cite.pst-pdgr06) cvn /DEST pdfmark +end + 6863 25502 a 0 TeXcolorgray 1494 x Fv([2])p 0 TeXcolorgray +555 w(Boris)1601 b(V)-92 b(eytsman)1601 b(and)g(Leila)h(Akhmadeev)-61 +b(a.)4162 b Fn(Cr)-57 b(e)g(ating)1530 b(Me)-57 b(d-)8585 +28324 y(ic)g(al)1984 b(Pe)-57 b(digr)g(e)g(es)1985 b(with)e(PST)-85 +b(ricks)1984 b(and)f(L)32992 28093 y Fa(A)33493 28324 +y Fn(T)34096 28563 y(E)34706 28324 y(X)p Fv(,)2526 b(July)2095 +b(2007.)p 0 TeXcolorgray 8585 29899 a +SDict begin H.S end + 8585 29899 a 0 +TeXcolorgray -246 x Fq(http://ctan.tug.org/tex-)55 b +(archive/graphics/pstricks/contrib/pedigree/pst-)g(pdgr)p +0 TeXcolorgray 52270 28884 a +SDict begin H.R end + 52270 28884 a 52270 29653 +a +SDict begin [/H /I/Border [0 0 0]BorderArrayPatch/Color [0 1 1]/Action +<</Subtype/URI/URI(http://ctan.tug.org/tex-archive/graphics/pstricks/contrib/pedigree/pst-pdgr)>>/Subtype +/Link H.B /ANN pdfmark end + 52270 29653 a 0 TeXcolorgray Fv(.)6863 30341 y +SDict begin H.S end + 6863 +30341 a 6863 30341 a +SDict begin 12 H.A end + 6863 30341 a 6863 30341 a +SDict begin [/View [/XYZ H.V]/Dest (cite.PSTricks93) cvn /DEST pdfmark +end + 6863 30341 +a 0 TeXcolorgray 1526 x Fv([3])p 0 TeXcolorgray 555 w(Timoth)-31 +b(y)430 b(V)-92 b(an)428 b(Zandt.)667 b Fn(PST)-85 b(ricks:)618 +b(PostScript)449 b(Macr)-57 b(os)448 b(for)i(Generic)i(T)40796 +32105 y(E)41405 31867 y(X)p Fv(,)443 b(July)8585 33195 +y(2007.)p 0 TeXcolorgray 11397 33441 a +SDict begin H.S end + 11397 33441 a +0 TeXcolorgray -246 x Fq(http://ctan.tug.org/tex-)55 +b(archive/graphics/pstricks/base/doc)p 0 TeXcolorgray +45150 32426 a +SDict begin H.R end + 45150 32426 a 45150 33195 a +SDict begin [/H /I/Border [0 0 0]BorderArrayPatch/Color [0 1 1]/Action +<</Subtype/URI/URI(http://ctan.tug.org/tex-archive/graphics/pstricks/base/doc)>>/Subtype +/Link H.B /ANN pdfmark end + 45150 33195 +a 0 TeXcolorgray Fv(.)6863 33884 y +SDict begin H.S end + 6863 33884 a 6863 +33884 a +SDict begin 12 H.A end + 6863 33884 a 6863 33884 a +SDict begin [/View [/XYZ H.V]/Dest (cite.GraphDrawing99) cvn /DEST +pdfmark end + 6863 33884 a 0 TeXcolorgray +1525 x Fv([4])p 0 TeXcolorgray 555 w(Giusepp)31 b(e)275 +b(Di)g(Battista,)298 b(P)-31 b(eter)276 b(Eades,)295 +b(Rob)31 b(erto)276 b(T)-92 b(amassia,)296 b(and)276 +b(Ioannis)g(G.)g(T)-92 b(ollis.)8585 36737 y Fn(Gr)-57 +b(aph)301 b(Dr)-57 b(awing:)463 b(A)-28 b(lgortihms)301 +b(for)g(the)g(Visualization)g(of)h(Gr)-57 b(aphs)p Fv(.)323 +b(An)267 b(Alan)g(R.)g(Apt)8585 38066 y(Bo)31 b(ok.)371 +b(Pren)-31 b(tice)370 b(Hall,)h(New)e(Jersey)-92 b(,)369 +b(1999.)p 0 TeXcolorgray 25405 70071 a(32)p 0 TeXcolorgray +eop end +%%Trailer + +userdict /end-hook known{end-hook}if +%%EOF diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/pedigree.tex b/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/pedigree.tex new file mode 100644 index 0000000000..51fb436101 --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/pedigree.tex @@ -0,0 +1,1153 @@ +\documentclass{article} +\usepackage[koi8-r]{inputenc} +\usepackage[russian, english]{babel} +\usepackage{pst-pdgr} +\usepackage{pstricks-add} +\usepackage{url} +\usepackage{fancyvrb} +\usepackage{listings} +\lstset{language=Perl, captionpos=b, basicstyle=\ttfamily, +abovecaptionskip=\abovedisplayskip, +belowcaptionskip=\belowdisplayskip} +\renewcommand{\lstlistlistingname}{List of Listings} +\usepackage{graphicx} +\usepackage{paralist} +\psset{descarmA=1} +\newcommand{\program}[1]{\textsf{#1}} +\usepackage[breaklinks,colorlinks,linkcolor=black,citecolor=black, + pagecolor=black,urlcolor=black]{hyperref} +\DefineShortVerb{\|} +\begin{document} +\selectlanguage{english} +\title{A Program For Automatic Pedigree Construction With \path{pst-pdgr}\\ + User Manual and Algorithm Description} +\author{Boris Veytsman, \path{borisv@lk.net} \and Leila Akhmadeeva} +\date{March 2012} +\maketitle +\begin{abstract} + The set of macros in \path{pst-pdgr} package allows to typeset + complex pedigrees. However, a manual placement of pedigree symbols + on a canvas is a time-consuming task. This program produces \TeX{} + files from spreadsheets with the data on inheritance for a large + class of pedigrees. It has a simple interface and can be used for + quite complex pedigrees. +\end{abstract} + +\begin{center} + \input{english1.tex} +\end{center} + +\clearpage + +\tableofcontents +\listoffigures +\listoftables +\lstlistoflistings +\clearpage + + +\part{User Manual} +\label{part:manual} + + +\section{Introduction} +\label{sec:intro} + +Medical pedigree is a very important tool for clinicians, genetic +researchers and educators. As stated +in~\cite{PedigreeNomenclature95}, ``The construction of an accurate +family pedigree is a fundamental component of a clinical genetic +evaluation and of human genetic research.'' The package +\path{pst-pdgr}~\cite{pst-pdgr06} provides a set of PSTricks macros +(see~\cite{PSTricks93}) to typeset pedigrees. In the framework of +\path{pst-pdgr} the user manually chooses coordinates for each +pedigree node on the diagram. While this is relatively easy for small +pedigrees, this task becomes increasingly time-consuming for larger +ones. There may be several approaches to automate it. For example, +one may have data about the patients and their families in a +spreadsheet or database. Then it would be useful to generate +pedigrees from such data. This is the aim of the program +\path{pedigree} described in this manual. + +Spreadsheets and databases can export the data as separated +values files (``csv'' files for Comma Separated Values). Our program +reads these files and outputs LaTeX{} code with \path{pst-pdgr} +macros. We tried to make this code readable, so a user might tweak it +if necessary. + +Of course, manually produced \LaTeX{} code is more versatile than the +automatically generated one. There are certain limitations for the +program: +\begin{inparaenum} +\item only persons having common genes with the proband or the + ``starting person'' are included in the + pedigree; +\item no adopted children, sperm donors or surrogate + mothers are shown on the pedigree; +\item only one disease is shown on the chart; +\item the support for consanguinic unions and inbreeding is rather + experimental (see Section~\ref{sec:consanguinic}). +\end{inparaenum} +Subsequent versions of the program may ease some of these +limitations. + +\section{Installation} +\label{sec:install} + +\subsection{System Requirements} +\label{sec:reqs} + +The program requires \program{Perl} version~5 or newer (it was tested +with \program{Perl} v5.8.8, but should work with any +\program{Perl-5}). The \LaTeX{} macros require \path{pst-pdgr} +version~0.3 (July 2007) or newer. + +\subsection{Unix/Linux Installation} +\label{sec:install_unix} + +If your system has a working \program{make} program, which is the +usual case for Unix-like environments, the supplied \path{Makefile} +installs the executable \path{pedigree} in \path{/usr/local/bin}, the +libraries in \path{/usr/local/lib/site_perl} and the manual pages in +\path{/usr/local/man}. This is done by the usual command +|make install|. Optionally you can install files in the +\path{doc} and \path{examples} subdirectories in the proper places in +your system. + +\subsection{Installation in Other Systems} +\label{sec:other} + +If your system does not have \program{make}, you need to manually +perform the following: +\begin{enumerate} +\item Install the executable \path{pedigree.pl} to the place your + system can find it. +\item Install the libraries: \path{Pedigree.pm}, directory + \path{Pedigree} and all files in it to the \program{Perl} search + path. The latter is listed in the array \path{@INC}, which can be + checked by the command |perl -V| or its equivalent. +\end{enumerate} + +\section{Configuration} +\label{sec:config} + + +\subsection{Configuration Variables and Location of Configuration File} +\label{sec:conf_file} + +The program defaults are sufficient for most cases. However, if you +want to draw pedigrees in a language other than English, or to tweak +the layout of the pedigrees, you need to change the program +configuration. + +The behavior of the program \program{pedigree} is determined by +\emph{configuration variables.} There are several sources of +configuration variables. They are (in the order of increasing +priority): +\begin{enumerate} +\item Program defaults. +\item The system configuration file\footnote{On Unix-like systems, + where \path{/etc} exists} \path{/etc/pedigree.cfg}. On \TeX Live + the system coniguration files are + \path{$TEXMFHOME/texmf-config/pedigree/pedigree.cfg} and + \path{$TEXMFLOCAL/pedigree/pedigree.cfg}. +\item User configuration file\footnote{On Unix-like systems, where + \path{$HOME} exists} \path{$HOME/.pedigreerc}. +\item The file specified by the |-c| option (see + Section~\ref{sec:invocation}). +\end{enumerate} +If a file mentioned in this list does not exists, the program +silently\footnote{Unless \path{-d} option is selected, see + Section~\ref{sec:invocation}} continues. + +Note that even if a configuration file with higher priority exists, +the program reads the files with lower priority first. The former +\emph{overrides} the latter, but not precludes it from reading. In +other words, if \path{/etc/pedigree.cfg} defines variables +\lstinline|$foo| and \lstinline|$bar|, and \path{$HOME/.pedigreerc} +defines \lstinline|$bar| and \lstinline|$baz|, the program takes +\lstinline|$foo| from the first file, and \lstinline|$bar| and +\lstinline|$baz| from the second one. + + +\subsection{Configuration File Format} +\label{sec:conf_file_format} + +All configuration files mentioned in Section~\ref{sec:conf_file}, have +the same format. They are actually snippets of \program{Perl} code, +executed by the program \program{pedigree}. This means, by the way, +that all precautions usually taken with respect to programs and +scripts, are relevant for configuration files as well. In particular, +it is a bad idea to have world-writable system-wide configuration +file \path{/etc/pedigree.cfg}. + +The code in configuration files is very simple, and one does not need +to know \program{Perl} to edit configuration files. There are several +simple rules which are enough to understand these files: +\begin{enumerate} +\item All text after \lstinline|#| to the end of the line is a + comments. In particular, the lines starting with \lstinline|#|, are + comment lines. +\item \program{Perl} commands must end by semicolon \lstinline|;|. +\item The commands like + \begin{lstlisting} + $xdist=1.5; + \end{lstlisting} + or + \begin{lstlisting} + @fieldsforprint=qw(Name DoB); + \end{lstlisting} + assign values to the variables. +\item Variables starting with \lstinline|$| are scalars and + take numerical or string values. Variables starting with + \lstinline|@| are arrays and take list of values. +\item A backslash in single quotes stands for itself, A backslash in + double quotes or inside \lstinline|<<END|\dots\lstinline|END| + construction must be doubled. Compare the commands + \begin{lstlisting} + $foo='\documentclass'; + $bar="\\documentclass"; + \end{lstlisting} +\item The last command in the file must be + \begin{lstlisting} + 1; + \end{lstlisting} +\end{enumerate} + +A number of commented configuration files can be found in the +\path{examples} subdirectory of the distribution. + +In the remaining parts of this section we describe the configuration +variables in detail. + +\subsection{\TeX{} Output Setup} +\label{sec:conf_tex} + +A number of variables determine what kind of \TeX{} file is produced. +An example of their usage is shown on Listing~\ref{lst:tex}. + +The variable \lstinline|$fulldoc| determines whether the program +produces a full \LaTeX{} file with header and preamble (when +\lstinline|$fulldoc=1|), or just a snippet to be included in a larger +document (when \lstinline|$fulldoc=0|). The default is 1. + +The variable \lstinline|$documentheader| is used when +\lstinline|$fulldoc| is 1. It determines the document class of the +resulting \LaTeX{} file. The default is |article| class, set by +|\documentclass{article}|. + +By default the preamble of the \LaTeX{} file created when +\lstinline|$fulldoc| is 1, contains only the line +|\usepackage{pst-pdgr}| and, if the language chosen is not English +(see Section~\ref{sec:conf_lang}), the calls of \program{babel} and +\program{inputenc} packages. The variable \lstinline|$addtopreamble|, +if set, may contain any other \LaTeX{} code you might wish to add to +the preamble. + +The variable \lstinline|$printlegend| determines whether to add legend +to the pedigree. The default value is 1, and the legend is printed. + +\begin{lstlisting}[float, caption={Configuration File: Setting \TeX{} Output}, + label=lst:tex] +# Do we want to have a full LaTeX +# file or just a fragment? +# +$fulldoc=1; + +# What kind of document do we want +# +$documentheader='\documentclass{article}'; + +# Define additional packages here +# +$addtopreamble=<<END; +\\usepackage{pst-pdgr} +END + +# Do we want to print a legend? +# +$printlegend=1; +\end{lstlisting} + + +\subsection{What to Print} +\label{sec:what_to_print} + +The next groups of configuration variables sets the information to be +printed in the legend and on the pedigree. It consists of two arrays: +array \lstinline|@fieldsforlegend| is the list of fields (see +Section~\ref{sec:data_file}) which are included in the legend, and +array \lstinline|@fieldsforchart| is the list of fields to print near +each node in the pedigree (Listing~\ref{lst:what_to_print}). Setting +\lstinline|@fieldsforchart| to empty array: +\begin{lstlisting} +@fieldsforchart = (); +\end{lstlisting} +prevents putting additional information on the pedigrees. + +The field names are described in Section~\ref{sec:data_file}. Note +that |AgeAtDeath| is a special field: it is the age at death (or +empty) calculated as the difference between the death date and the +birth date. + +\begin{lstlisting}[float, caption={Configuration File: Choosing +Fields to Print}, label=lst:what_to_print] +# Fields to include in the legend. +# Delete Name for privacy protection. +# +@fieldsforlegend = qw(Name DoB DoD Comment); + +# +# Fields to put at the node. +# Delete Name for privacy protection. +# +@fieldsforchart = qw(Name); +\end{lstlisting} + +\subsection{Language and Encoding} +\label{sec:conf_lang} + +The next group of variables describes the language and encoding of +the data file input and the \LaTeX{} output. They are shown in +Listing~\ref{lst:lang_enc}. The variable \lstinline|$language| at +present can have one of two values: |english| (the default) or +|russian|. If the value is |russian|, the output document preamble +includes the line +\begin{lstlisting}[language=tex] +\usepackage[russian]{babel} +\end{lstlisting} +The variable \lstinline|$encoding| sets the encoding of the \LaTeX{} +file if the language is not English. By default it is |cp1251|, if +the language is Russian. Set it to |koi8-r| to choose KOI8 encoding. +It is worth to note that the data file and the output \LaTeX{} file +are assumed to have the same language and encoding. + + +\begin{lstlisting}[float, caption={Configuration File: Choosing +Language and Encoding}, label=lst:lang_enc] +# +# Language +# +# $language="russian"; +$language="english"; + +# +# Override the encoding +# +# $encoding="koi8-r"; +\end{lstlisting} + +If |$language| is not |english|, the program recognizes both English +and native names of the fields in the data file (see +Section~\ref{sec:data_file}). + +\subsection{Fonts} +\label{sec:fonts} + +There are two kinds of text on the chart: the text above a node +and the text below a node\footnote{The \TeX{} + package~\cite{pst-pdgr06} also allows to place text at both sides of +the node, but the program \program{pedigree} currently does not use +this feature.}. The fonts for them are set by the variables +\lstinline|$belowtextfont| (by default |\small|) and +\lstinline|$abovetextfont| (by default |\scriptsize|). Any \LaTeX{} +font declaration like |\sffamily| or |\itshape| is allowed here. See +Listing~\ref{lst:fonts} for an example of usage. + +\begin{lstlisting}[float, caption={Configuration File: Choosing +Fonts}, label=lst:fonts] +# +# Fonts for the chart +# +$belowtextfont='\small'; +$abovetextfont='\scriptsize'; +\end{lstlisting} + +\subsection{Lengths} +\label{sec:conf_dist} + +The next group of variables (Listing~\ref{lst:dist}) sets the +distances between the key elements of the chart. All lengths are in +centimeters (actually, in |unit|s, are defined in +PSTricks~\cite{PSTricks93}). + +\begin{lstlisting}[float, caption={Configuration File: Choosing +Lengths}, label=lst:dist] +# +# descarmA in cm +# +$descarmA = 0.8; + +# +# Distances between nodes (in cm) +# +$xdist=2; +$ydist=2; +\end{lstlisting} + +The variable \lstinline|$descarmA| sets the length of the first +segment of the descent line: from the parent node to the sibs line, +as measured from the center of the parent (see~\cite{pst-pdgr06} for +more details). By default it is 0.8. + +The variables \lstinline|$xdist| and \lstinline|$ydist| set the +distances between the nodes along horizontal and vertical axes +correspondingly. The default for both is 2. + +\subsection{Scaling and Rotation} +\label{sec:scaling_rotation} + +Complex pedigrees might be too large to fit on a page. In this case a +scaling and (or) rotation might be necessary to print the chart. Of +course, changing the lengths described in Section~\ref{sec:conf_dist} +might also help, but the scaling described here also changed the size +of the pedigree symbols. + +There are three variables controlling the scaling and rotation of +pedigrees: \lstinline|$maxW|, \lstinline|$maxH| and +\lstinline|$rotate| (see Listing~\ref{lst:scaling_rotation}). The +variables \lstinline|$maxW| and \lstinline|$maxH| are the maximal +width and height of the chart in centimeters. Setting any of them to +zero disables scaling. + +The scaling works as follows. If both height and width of the +pedigree are smaller than the limits, no scaling is done. In the other +case the chart is scaled while preserving the aspect ratio (by +changing the value of |unit|, see~\cite{PSTricks93}) to fit into the +limits. + +The variable |$rotate| sets the orientation of the chart. If it is +|no|, the pedigree is never rotated, while if it |yes|, it is always +rotated ninety degrees counterclockwise. If this variable is set to +|maybe| (the default), the program compares the scaling for +the non-rotated and rotated pedigrees, and chooses the orientation for +which the scaling is closer to one. + +\begin{lstlisting}[float, caption={Configuration File: Choosing +Scaling and Rotation}, label=lst:scaling_rotation] +# +# Maximal width and height of the pedigree in cm. +# Set this to 0 to switch off scaling +# +$maxW = 15; +$maxH = 19; + +# +# Whether to rotate the page. The values are +# 'yes', 'no' and 'maybe' +# If 'maybe' is chosen, the pedigree is rotated +# if this provides better scaling +# +$rotate = 'maybe'; +\end{lstlisting} + +\section{Running the Program} +\label{sec:runnning} + + + +\subsection{Program Invocation And Options} +\label{sec:invocation} + +The program \path{pedigree} is a command line program. It reads the +data from a text file \path{input_file} and produces an output file +with \LaTeX{} macros. The format of the input file is described in +Section~\ref{sec:data_file}. The program invocation is: +\begin{verbatim} +pedigree [-c configuration_file] [-d] [-o output_file] + [-s start] input_file +\end{verbatim} +(the square brackets show optional arguments). + +All arguments but |input_file| are optional. They are described +below. + +The option |-c| selects a \emph{configuration file.} The format +of the configuration file is described in +Section~\ref{sec:conf_file}. If this option is absent, the program +uses its own default parameters, or system-wide or user's defaults, as +explained in Section~\ref{sec:conf_file}. + + +The option \path{-d} selects debugging mode. In this mode a lot of +debugging messages are dumped to \path{stderr}. + +The parameter |-o| provides the name of the output file. Both +\path{input_file} and \path{output_file} can be ``-'', which means +\path{stdin} for the input and \path{stdout} for the output. If the +parameter |-o| is absent, the program tries to guess the name of +the output file from the name of the input file. If the input file is +|foo.csv|, the output file will be |foo.tex|. On the other +hand, if the input file is \path{stdin}, the output file is +\path{stdout}. + +Usually pedigrees are built starting from the proband\footnote{The + proband is the first person among the relatives who came to a + geneticist; he or she is the primary patient.}. Only the people +that share genes with the proband, are shown on the pedigree. +However, in some cases, for example when there is no proband, or +where there are several probands, it is neccessary to override this +default and tell the program from which person to start. This is done +using the option |-s|. If it is present, it must be followed by the +Id of a person in the data file (see Section~\ref{sec:data_file} for +the discussion of Id). + +The option |-v| is special. The invocation |pedigree -v| +outputs the version and license information. + + +\subsection{Data File} +\label{sec:data_file} + +The input for the program is a separated values file. Usually such +files are called CSV for ``comma separated values''. However, this +program uses the vertical bar (``pipe'') \verb+|+ as a separator. +Each line of this file is a \emph{record}. The lines are separated by +pipes into \emph{fields.} Most SQL programs produce such files by +default. Spreadsheet programs will make them if you choose ``Save +As\dots'' option, and select \verb+|+ as the field separator, and +empty text delimiter. We sometimes will call the records ``rows'' and +the fields ``columns'' to use the familiar spreadsheet metaphor. +Normally each row corresponds to a person in a pedigree. We will call +this person \emph{the current person} when describing the fields. + +The width of the fields may not be the same in all rows (or, in other +words, the pipes \verb+|+ may be disaligned). We make them aligned in +the examples included in this manual just to make the text more +readable. + +The first line of the data file contains the names of the fields +(``column headers''). The fields in the subsequent lines must match +the order of the headers. An empty field must be still included (as +\verb+||+ or \verb+| |+). Otherwise the order of columns is arbitrary +as long as it is the same for all rows (i.e. matches the order of +``column headers'' in the first line). + +All fields but |Id| are optional. If the value is empty for all rows, +the corresponding column can be dropped. If applicable, the default +values for this field will be substituted by the program. + +On the other hand the data file can include any additional columns as +long as their names do not clash with the names listed below and the +special name |AgeAtDeath|. These additional columns can be included +in the chart or legend as described in +Section~\ref{sec:what_to_print}. + +Here is the list of columns and explanation of their meaning: +\begin{description} +\item[Id:] Each line (including the special lines described below) + must have a unique |Id|. The |Id| may contain only Latin letters + and numbers, and start with a letter. +\item[Name:] The name of the person described in the current row. + There are also \emph{special names} when the current row describes + abortions or infertility. They are described below. The names + should not contain ``special symbols'' like \#, \$, \%, \_, + \textasciicircum, etc. +\item[Sex:] The gender of a person. This column may have one of two + values: |male| or |female|. The empty value corresponds to a person + with unknown gender. +\item[DoB:] The date of birth for the current person. The format is + |YYYY.MM.DD|. If the date of birth is not known, the field may be + empty or the keyword |unknown| may be used. +\item[DoD:] The date of death for current person. The format is the + same as for |DoB|: |YYYY.MM.DD|. If this field is empty, the + corresponding person is alive. For deceased persons with an unknown + date of death use the keyword |unknown|. Note the subtle difference + between the fields |DoB| and |DoD|: an empty value for |DoB| is + means ``unknown birth date'' while for |DoD| it means that there is + no date of death at all. +\item[Mother:] The |Id| of the mother of the person (or empty). +\item[Father:] The |Id| of the father of the person (or empty). +\item[Proband] This field can be either |yes| for the probands, or + empty (or |no|) for other persons. Note that if a pedigree has no + probands or several probands, the program does not know, from which + node to start the pedigree. Therefore in this case the option |-s| + must be used to explicitly set the |Id| of the starting chart node + (see Section~\ref{sec:invocation}). +\item[Condition:] This column can have the values |normal|, + |obligatory|, |asymptomatic| or |affected|. If it is empty, the + default value |normal| is assumed. +\item[Comment:] A comment about the person. +\item[Twins:] If the current person has twins, they are listed in this + column separated by spaces and (or) commas. See + Section~\ref{sec:twins} for more details. +\item[Type:] This column is used in certain special cases. For + abortions it shows the type of the abortion + (Section~\ref{sec:abortions}), for childless people and marriages it + shows the type of childnessness (Section~\ref{sec:childless}), and + for twins it shows the type of twins (Section~\ref{sec:twins}). +\item[SortOrder:] This column is used when the algorithm for sorting + siblings and unions gives a wrong result, and a manual correction is + needed. See Section~\ref{sec:sorting} for the explanation and + examples. +\end{description} + +Examples of data files (in English and Russian) are shown in +Listing~\ref{lst:data_examples} (the Russian keywords are discussed in +Section~\ref{sec:language}). + +\begin{lstlisting}[float, caption={Examples of Data Files (English and +Russian)}, label=lst:data_examples, escapeinside={`'}] +` +\rotatebox{90}{% + \begin{minipage}{1.5\linewidth} + \small + \VerbatimInput{../examples/english.csv} + \bigskip + \selectlanguage{russian} + \VerbatimInput{../examples/russian.csv} + \end{minipage}} +' +\end{lstlisting} + +\begin{figure} + \centering + \input{english.tex} + \caption{Example of the Typeset Pedigree in English (Data File from + Listing~\ref{lst:data_examples})} + \label{fig:example-english-typeset} +\end{figure} + +\begin{figure} + \centering + {\selectlanguage{russian} + \input{russian.tex}} + \caption{Example of the Typeset Pedigree in Russian (Data File from + Listing~\ref{lst:data_examples})} + \label{fig:example-russian-typeset} +\end{figure} + + +\subsection{Twins} +\label{sec:twins} + +The column |Twins| (see Section~\ref{sec:twins}) lists all |Id|s of +all twins of the given person. The column |Type| can be used to show +the type of the twins. The empty value means polyzygotic twins, +|monozygotic| means monozygotic twins, and |qzygotic| is used in the +case when the type of twins is under doubt. An example of a data file +with twins is shown on Listing~\ref{lst:twins}, and the corresponding +pedigree on Figure~\ref{fig:twins}. + + +\begin{lstlisting}[float, caption={Example of Data File with Twins}, +label=lst:twins, escapeinside={`'}] +` + \small + \VerbatimInput{../examples/twins.csv} +' +\end{lstlisting} + +\begin{figure} + \centering + \input{twins.tex} + \caption{Example of a Pedigree with Twins (Data File from + Listing~\ref{lst:twins})} + \label{fig:twins} +\end{figure} + +\subsection{Abortions} +\label{sec:abortions} + +Aborted pregnancies are described by a special entry in the data file. +The field |Name| has the value |#abortion|; the symbol |#| is used to +show that this is a special value. The columns |Sex|, |DoB|, +|Mother|, |Father| and |Condition| have the usual meaning. The +special column |Type| is either empty or be equal to |sab| for +self-abortions. + +\begin{lstlisting}[float, caption={Example of Data File with Abortions}, +label=lst:abortions, escapeinside={`'}] +` + \small + \VerbatimInput{../examples/abortions.csv} +' +\end{lstlisting} + +\begin{figure} + \centering + \input{abortions.tex} + \caption{Example of a Pedigree with Abortions (Data File from + Listing~\ref{lst:abortions})} + \label{fig:abortions} +\end{figure} + +\subsection{Childlessness and Infertility} +\label{sec:childless} + +Childlessness is can be a property of a person or a union between two +persons. Therefore in this implementation we use a special row rather +than a column to report it. As other rows, this one has a unique +|Id|. The |Name| column should have a special entry |#childless|. +Like |#abortion| (Section~\ref{sec:abortions}), this special name +starts with |#| to distinguish it from ``real'' names. There are four +other columns that have meaning for this row: +\begin{description} +\item[Mother:] The |Id| of the childless female. +\item[Father:] The |Id| of the childless male. If both |Mother| and + |Father| columns are not empty, the entry describes the union + between the |Father| and |Mother|. Of only |Mother| or |Father| is + not empty, the entry describes the state of the corresponding + person. +\item[Type:] This column might be either empty or have a keyword + |infertile|. In the latter case the childlessness of the person or + union is caused by a proven infertility. +\item[Comment:] The vaule of this column is shown under the + childlessness symbol on the chart. Put there a short description of + the cause of childlessness, like |anospermia| or |vasectomy|. +\end{description} +An example of a pedigree with childlessness is shown on +Listing~\ref{lst:childless} and Figure~\ref{fig:childless}. + +\begin{lstlisting}[float, caption={Example of Data File with +Childlessness}, label=lst:childless, escapeinside={`'}] +` + \small + \VerbatimInput{../examples/childlessness.csv} +' +\end{lstlisting} + +\begin{figure} + \centering + \input{childlessness.tex} + \caption{Example of a Pedigree with Childlessness (Data File from + Listing~\ref{lst:childless})} + \label{fig:childless} +\end{figure} + +\subsection{Ordering Siblings and Marriage Partners} +\label{sec:sorting} + +The generations in pedigrees are ordered in vertical direction, from +up do down. How should we order the people on the same generation, +i.e. siblings and marriage partners? + +Usually two rules are used: +\begin{enumerate} +\item The siblings are ordered from the oldest on the left to the + youngest to the right.\label{item:sibling_order} +\item In marriage or other union the male is to the left, and the + female is to the right. +\end{enumerate} +However, the combination of these rules might lead to the situation +when marriage lines intersect the parental lines. Therefore the +rule~\ref{item:sibling_order} is usually implicitly modified: +\begin{enumerate} +\item[\ref{item:sibling_order}a.] The are ordered from the oldest on + the left to the youngest to the right. However, if a sibling's + marriage is shown on a pedigree, this sibling is always the + rightmost (male) or the leftmost (female). +\end{enumerate} +The program follows these rules. It is enough to draw pedigrees in +most cases. In particular, they always produce correct pedigrees if +there is only one marriage shown. However, in complex cases these +rules fail, as shown on Listing~\ref{lst:sort1} and +Figure~\ref{fig:sort1}. It is possible to extend the rules +above to account for these cases, however we chose another solution: +to provide a facility for the manual intervention in the sorting and +ordering algorithm. For this purpose a special column |SortOrder| is +used. It can have positive numbers greater than 1 or negative numbers +smaller than -1. If the value of this column is positive, the +corresponding person is moved to the left when sorting siblings and +to the right when sorting marriage partners. If it is negative, the +opposite sorting rule is applied (see Section~\ref{sec:alg_sorting} +for more detailed discussion). Note that sibling sorting and marriage +partners sorting must work in opposite directions, otherwise marriage +lines intersect paternal lines. + +\begin{lstlisting}[float, caption={A Data File with a Sorting +Problem}, label=lst:sort1, escapeinside={`'}] +` + \small + \VerbatimInput{../examples/sort1.csv} +' +\end{lstlisting} + +\begin{figure} + \centering + \input{sort1.tex} + \caption{Pedigree from Listing~\ref{lst:sort2}} + \label{fig:sort1} +\end{figure} + +Let us return to the pedigree on Listing~\ref{lst:sort1}. To improve +Figure~\ref{fig:sort1} we can either move Peter to the right or Lucy to +the left. The first solution is shown on Listing~\ref{lst:sort2} and +Figure~\ref{fig:sort2}. The second is shown on Listing~\ref{lst:sort3} and +Figure~\ref{fig:sort3}. + +\begin{lstlisting}[float, caption={First Solution to the Problem in +Listing~\ref{lst:sort1} }, label=lst:sort2, escapeinside={`'}] +` + \small + \VerbatimInput{../examples/sort2.csv} +' +\end{lstlisting} + +\begin{figure} + \centering + \input{sort2.tex} + \caption{Pedigree from Listing~\ref{lst:sort2}} + \label{fig:sort2} +\end{figure} + +\begin{lstlisting}[float, caption={Second Solution to the Problem in +Listing~\ref{lst:sort1} }, label=lst:sort3, escapeinside={`'}] +` + \small + \VerbatimInput{../examples/sort3.csv} +' +\end{lstlisting} + +\begin{figure} + \centering + \input{sort3.tex} + \caption{Pedigree from Listing~\ref{lst:sort3}} + \label{fig:sort3} +\end{figure} + + +Of course sometimes a pedigree cannot be drawn without +self-intersections with any sorting of siblings. An example of such +pedigree is shown on Listing~\ref{lst:badsort} and +Figure~\ref{fig:badsort}. Obviously no amount of shuffling the +siblngs can help in his case. + +\begin{lstlisting}[float, caption={A Pedigree with Unavoidable +Self-Intersections}, label=lst:badsort, escapeinside={`'}] +` + \small + \VerbatimInput{../examples/badsort.csv} +' +\end{lstlisting} + +\begin{figure} + \centering + \input{badsort.tex} + \caption{Pedigree from Listing~\ref{lst:badsort}} + \label{fig:badsort} +\end{figure} + + +If the program cannot avoid self-intersection of marriage lines and +parental lines despite automatics sorting and manual intervention, as +the last resort it creates a multi-segment marriage line, as shown on +Figures~\ref{fig:sort1} and~\ref{fig:badsort}. + + +\subsection{Consanguinic Unions} +\label{sec:consanguinic} + +Consanguinic unions present a technical problem for the program (see +the discussion in Section~\ref{sec:alg_consanguinic}). Therefore the +support of consanguinicity is experimental for this release. + +There is a number of limitations for consanguinic unions in the data +file at present. First, the consanguinic unions should not in the +direct lineage of the proband or the person from which the pedigree +starts. In many cases this limitation can eliminated by using |-s| +option (see Section~\ref{sec:invocation}) to choose a different +starting point for the pedigree. Second, the children of consanguinic +unions might appear not centerd on the charts. An example of a +pedigree with consanguinic marriages is shown on +Listing~\ref{lst:consanguinic}, and the corresponding chart is shown +on Figure~\ref{fig:consanguinic}. The drawbacks of the program are +evident from the positions of Laura nad Jack on these charts. + +\begin{lstlisting}[float, caption={A Pedigree with Consanguinic +Unions}, label=lst:consanguinic, escapeinside={`'}] +` + \small + \VerbatimInput{../examples/consanguinic.csv} +' +\end{lstlisting} + +\begin{figure} + \centering + \input{consanguinic.tex} + \caption{Pedigree from Listing~\ref{lst:consanguinic}} + \label{fig:consanguinic} +\end{figure} + + + +\subsection{Language-Dependent Keywords} +\label{sec:language} + +At present the program \program{pedigree} can work with English and +Russian languages. As discussed in Section~\ref{sec:conf_lang}, the +language options chooses \emph{both} the languages of input and output +files. It is easy to add new languages to the scheme by expanding the +library |Pedigree::Language.pm| in the distribution. + +The English language is the default. Moreover, if the Russian option +is chosen, English keywords are still recognized in the input file. + +The English and Russian keywords are listed in +Table~\ref{tab:keywords}. Note that some keywords have variants; +they are listed in the table as well. + +\begin{table} + \centering + \begin{tabular}{lll} + \hline + English keyword & English variants & Russian keywords \\ + \hline + \multicolumn{3}{l}{\textbf{Field Names}}\\ + Id & & \foreignlanguage{russian}{éÄÅÎÔ}\\ + Name & & \foreignlanguage{russian}{æéï}\\ + Sex & & \foreignlanguage{russian}{ðÏÌ}\\ + DoB & & \foreignlanguage{russian}{òÏÖÄ}\\ + DoD & & \foreignlanguage{russian}{õÍÅÒ}\\ + Mother & & \foreignlanguage{russian}{íÁÔØ}\\ + Father & & \foreignlanguage{russian}{ïÔÅÃ}\\ + Proband & & \foreignlanguage{russian}{ðÒÏÂÁÎÄ}\\ + Condition & & \foreignlanguage{russian}{óÏÓÔÏÑÎÉÅ}\\ + Comment & & \foreignlanguage{russian}{ëÏÍÍÅÎÔÁÒÉÊ}\\ + Type & & \foreignlanguage{russian}{ôÉÐ}\\ + Twins & & \foreignlanguage{russian}{âÌÉÚÎÅÃÙ}\\ + SortOrder & Sort & \foreignlanguage{russian}{ðÏÒÑÄÏËóÏÒÔÉÒÏ×ËÉ, + óÏÒÔ}\\ + \multicolumn{3}{l}{\textbf{Field Values}}\\ + male & & \foreignlanguage{russian}{ÍÕÖ, Í}\\ + female & & \foreignlanguage{russian}{ÖÅÎ, Ö}\\ + unknown & & \foreignlanguage{russian}{ÎÅÉÚ×, ÎÅÉÚ×ÅÓÔÎÏ}\\ + yes & & \foreignlanguage{russian}{ÄÁ}\\ + no & & \foreignlanguage{russian}{ÎÅÔ}\\ + normal & & \foreignlanguage{russian}{ÎÏÒÍ, ÚÄÏÒÏ×}\\ + obligatory & obligat & \foreignlanguage{russian}{ÏÂÌÉÇÁÔ}\\ + asymptomatic & asymp & \foreignlanguage{russian}{ÁÓÉÍÐ}\\ + affected & affect & \foreignlanguage{russian}{ÂÏÌØÎ, ÂÏÌÅÎ}\\ + infertile & & \foreignlanguage{russian}{ÂÅÓÐÌÏÄÎ}\\ + sab & & \foreignlanguage{russian}{×ÙËÉÄÙÛ}\\ + monozygotic & monzygot & \foreignlanguage{russian}{ÍÏÎÏÚÉÇÏÔÎ, + ÍÏÎÏÚÉÇ, ÏÄÎÏÑÊÃÅ×}\\ + qzygotic & qzygot, ? & \foreignlanguage{russian}{?}\\ + \multicolumn{3}{l}{\textbf{Special Names}}\\ + |#|abortion & & |#|\foreignlanguage{russian}{ÁÂÏÒÔ}\\ + |#|childless & & |#|\foreignlanguage{russian}{ÂÅÚÄÅÔÎ}\\ + \hline + \end{tabular} + \caption{Keywords in Different Languages} + \label{tab:keywords} +\end{table} + + + + + +\clearpage + +\part{Algorithm Description} +\label{part:algortihm} + + +\section{Introduction} +\label{sec:alg_intro} + +This part is intended for advanced users and is not neccessary for +runnuing the program. + +The problem of nicely typesetting graphs is one of the classical +problems in the Computer Science~\cite{GraphDrawing99}. One of the +earliest algorithms here is the classical algorithm for layered rooted +trees by Reingold and Tilford~\cite[\S~3.1]{GraphDrawing99}. This +algorithm was implemented by |PSTricks|~\cite{PSTricks93}. However, +many pedigrees are not trees~\cite{pst-pdgr06}. If we consider a +subset of pedigrees where inbreeding is absent, the pedigrees become +trees. However, even in this case the the tree is not necessary +layered, as can be seen from +Figure~\ref{fig:example-english-typeset}. Therefore a new approach +generalizing Reingold-Tilford algorithm is necessary. This approach +is based on the analysis of the structure of pedigrees and is +sketched in the remainder of this manual. + +\section{Main Algorithm} +\label{sec:alg} + + +A pedigree consists of nodes (vertices), connected by lines (edges). +If there is no inbreeding, the graph is acyclic. There are two kinds +of nodes in the graph: person nodes (squares and circles on +Figures~\ref{fig:example-english-typeset} +and~\ref{fig:example-russian-typeset}) and \emph{marriage nodes}, +which are nameless on the figures. We will use the notation ``male +spouse-female spouse'' for such nodes, so the marriage nodes on +Figure~\ref{fig:example-english-typeset} are I:1-I:2, I:3-I:4 and +II:2-II:3. A node has a \emph{precedessor} and \emph{children}. A +marriage node does not have a precedessor, but has \emph{male spouse} +and \emph{female spouse} (it is customary to put male spouses to the +left and female spouses to the right on pedigrees). Any node has a +\emph{downward tree} of its children, grandchildren etc. The downward +tree may be empty. + +Any node in an acyclic graph can be a root. However, in layered +trees there is a special root: the one that has no precedessor. +Similarly we will call a \emph{local root} a node that has no +predecessor. All marriage nodes are local roots. Some person nodes +can be local roots as well. + +Let us first discuss the case where cobnsanguinic marriages are +absent. In this case a pedigree is a tree. + +The proposed algorithm is recursive and starts from a local root. +Strictly speaking, it can start from any local root, but medical +pedigrees have a special person: \emph{proband,} the person who was +the first to be examined by genetic specialists (the proband is shown by an +arrow drawn near the node on +Figures~\ref{fig:example-english-typeset} +and~\ref{fig:example-russian-typeset}). Therefore it makes sense to +start from the local root which has proband in its downward tree. + +If this local root is a person node, the pedigree is the layered tree, +and Reingold-Tilford algorithm is sufficient. Therefore we should +consider only the case when the local root is a marriage node. In +this case we can typeset the downward tree using Reingold-Tilford +algorithm. The spouses do not belong to this tree. However, each of +them belongs to each own subpedigree. We will call them \emph{left + subpedigree} and \emph{right subpedigree}. We recursively apply our +algorithm to typeset left and right subpedigrees. Then we move the +left subpedigree to the right and right subpedigree to the left as far +as we can without intersection between them and the downward tree. + +This process is shown on Figure~\ref{fig:subpedigrees}. Obviously +this algorithm converges and leads to typesetting the pedigree without +intersections between the subtrees and subpedigrees. + +\begin{figure} + \centering + \begin{pspicture}(-7,-4)(5.5,4) +% \psgrid(-8,-4)(6,4) + \rput(-6, 2){\pstPerson[male, normal, belowtext=I:1, deceased]{GF1}} + \rput(-4, 2){\pnode{GF1_m_GM1}} + \rput(-2, 2){\pstPerson[female, asymptomatic, belowtext=I:2, deceased]{GM1}} + \rput(0, 2){\pstPerson[male, normal, belowtext=I:3]{GF2}} + \rput(2, 2){\pnode{GF2_m_GM2}} + \rput(4, 2){\pstPerson[female, normal, belowtext=I:4]{GM2}} + \rput(-5, 0){\pstPerson[female, obligatory, belowtext=II:1]{A1}} + \rput(-3, 0){\pstPerson[male, affected, belowtext=II:2]{F1}} + \rput(0, 0){\pnode{F1_m_M1}} + \rput(2, 0){\pstPerson[female, normal, belowtext=II:3]{M1}} + \rput(-5, -2){\pstPerson[female, affected, belowtext=III:1]{C1}} + \rput(-2, -2){\pstPerson[male, affected, belowtext=III:2, proband]{P}} + \rput(0, -2){\pstPerson[female, affected, belowtext=III:3]{S1}} + \rput(2, -2){\pstPerson[male, normal, belowtext=III:4]{S2}} + \pstDescent{GF1_m_GM1}{A1} + \pstDescent{GF1_m_GM1}{F1} + \ncline{GF1_m_GM1}{GM1} + \ncline{GF1_m_GM1}{GF1} + \pstDescent{GF2_m_GM2}{M1} + \ncline{GF2_m_GM2}{GM2} + \ncline{GF2_m_GM2}{GF2} + \pstDescent{A1}{C1} + \pstDescent{F1_m_M1}{P} + \pstDescent{F1_m_M1}{S1} + \pstDescent{F1_m_M1}{S2} + \ncline{F1_m_M1}{M1} + \ncline{F1_m_M1}{F1} + \ncbox[linestyle=none, boxsize=1, nodesepA=0.7, nodesepB=0.7, + boxdepth=0.7, style=TBlue]{GF1}{GM1} + \ncbox[linestyle=none, boxsize=1.3, nodesepA=0.7, nodesepB=0.7, + boxdepth=0.7, style=TBlue]{A1}{F1} + \ncbox[linestyle=none, boxsize=1.3, nodesepA=0.7, nodesepB=0.7, + boxdepth=0.7, style=TBlue]{C1}{C1} + \rput(-4,3.2){\textcolor{blue}{Left subpedigree}} + \ncbox[linestyle=none, boxsize=1, nodesepA=0.7, nodesepB=0.7, + boxdepth=0.7, style=TRed]{GF2}{GM2} + \ncbox[linestyle=none, boxsize=1.3, nodesepA=0.7, nodesepB=0.7, + boxdepth=0.7, style=TRed]{M1}{M1} + \rput(2,3.2){\textcolor{red}{Right subpedigree}} + \ncbox[linestyle=none, boxsize=1.3, nodesepA=0.7, nodesepB=0.7, + boxdepth=0.7, style=TGreen]{P}{S2} + \rput(0,-3){\textcolor{green}{Downward tree}} + \rput(0,0){\psdot} + \rput(0,0.2){Local root} + \end{pspicture} + \caption{Subpedigrees and Downward Tree} + \label{fig:subpedigrees} +\end{figure} + + +\section{Algorithm for Sorting Siblings and Marriage Partners} +\label{sec:alg_sorting} + +When we create a marriage node, we want to put the male to the left +and the female to the right. When we then sort siblings, we want this +male to be the rightmost, and the female to be the leftmost. To do +so, we assign to each node the special quantity |SortOrder|. +Initially all nodes have |SortOrder| equal to zero, unless +specifically set by the user in the input file (see +Section~\ref{sec:sorting}). Then we use the following rules: +\begin{enumerate} +\item When creating the the marriage node: + \begin{enumerate} + \item If both spouses have equal |SortOrder| field, the male goes to + the left, the female goes to the right. + \item Otherwise, the spouse with greater |SortOrder| goes to the left. + \item If |SortOrder| of a spouse is 0, we set it to 1 (the + spouse on the left) or -1 (the spouse on the right). + \end{enumerate} +\item When sorting siblings: + \begin{enumerate} + \item The sibling with smaller |SortOrder| goes to the left. + \item If both siblings have the same |SortOrder|, the oldest one + goes to the left. + \end{enumerate} +\end{enumerate} + +\section{Modifications for Consangunic Unions} +\label{sec:alg_consanguinic} + +Consanguinic unions present a problem for the described algorithm, +because pedigrees with them are no longer trees (see +Figure~\ref{fig:consanguinic}). + +In this release of the program we use the following hack. The direct +lineage of the proband (or, more generally, the starting node) may have +both mothers and fathers in the pedigree because they share genes from +the starting node. If any other person has both mother and father in +the chart, his or her parents both shared their genes with the +starting node. Therefore they formed a consanguinic union. In this +case the children of this node appear in two subtrees: their mother's +and their father's. + +We delete them from one of the subtrees (the one with lower generation +number), connect their parents with a double line (consanguinic union) +and put the descent line from the middle of the union to them. + +There are two problems with this hack (see +Section~\ref{sec:consanguinic}): the children of consanguinic unions +are not centered on the diagaram, and the hack fails if the starting +node itself is a descendant of a consanguinic union. + +Probably the next releases will employ better algorithms for +consanguinic unions. + +\section{Conclusion} +\label{sec:concl} + +The algorithm seems to be efficient and producing nicely typeset +pedigrees. Since the input file format is simple, it may be used by +the people without special skills in \LaTeX. On the other hand, the +\TeX{} files produces are easy to understand and edit manually if the +need arises. + +\clearpage + +\section{Acknowledgements} +\label{sec:ack} + +The authors are grateful to Herbert Vo\ss{} for help with +|PSTricks| code. The support of \TeX{} User Group is gratefully +acknowledged. One of the authors (LA) was supported by Russian +Foundation for Fundamental Research (travel grant 06-04-58811), +Russian Federation President Council for Grants Supporting Young +Scientists and Flagship Science Schools (grant MD-4245.2006.7) + + +\bibliographystyle{unsrt} +\bibliography{pedigree} + +\end{document} + +% $Id: pedigree.tex,v 2.18 2012-03-16 01:29:03 boris Exp $
\ No newline at end of file diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/russian.tex b/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/russian.tex new file mode 100644 index 0000000000..70b3dad5cb --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/doc/russian.tex @@ -0,0 +1,27 @@ +{% +\psset{descarmA=0.8}% +\begin{pspicture}(-6.6,-9.9)(6.6,3.3) +\rput(0, 0){\pnode{F1_m_M1}} +\rput(3.3, 0){\pstPerson[female, normal, belowtext={\small I:2}, deceased, abovetext={\scriptsize é×ÁÎÏ×Á ìÀÂÏ×Ø é×ÁÎÏ×ÎÁ}]{M1}} +\rput(-3.3, 0){\pstPerson[male, obligatory, belowtext={\small I:1}, deceased, abovetext={\scriptsize é×ÁÎÏ× ðÅÔÒ éÌØÉÞ}]{F1}} +\rput(0, -6.6){\pstPerson[female, normal, belowtext={\small III:2}, abovetext={\scriptsize é×ÁÎÏ×Á äÁÒØÑ óÅÒÇÅÅ×ÎÁ}]{K2}} +\rput(-3.3, -6.6){\pstPerson[male, asymptomatic, belowtext={\small III:1}, abovetext={\scriptsize é×ÁÎÏ× é×ÁÎ óÅÒÇÅÅ×ÉÞ}]{K1}} +\rput(1.65, -3.3){\pstPerson[female, normal, belowtext={\small II:2}, abovetext={\scriptsize é×ÁÎÏ×Á áÎÎÁ ðÅÔÒÏ×ÎÁ}]{S1}} +\rput(-1.65, -3.3){\pstPerson[male, affected, belowtext={\small II:1}, proband, abovetext={\scriptsize é×ÁÎÏ× óÅÒÇÅÊ ðÅÔÒÏ×ÉÞ}]{P}} +\pstDescent{F1_m_M1}{P} +\pstDescent{F1_m_M1}{S1} +\ncline[]{F1_m_M1}{M1} +\ncline[]{F1_m_M1}{F1} +\pstDescent{P}{K1} +\pstDescent{P}{K2} +\end{pspicture}% +} + +\begin{description} +\item[I:1] é×ÁÎÏ× ðÅÔÒ éÌØÉÞ; {\cyr\cyrr\cyro\cyrd.} {\cyr\cyrn\cyre\cyri\cyrz\cyrv.}; {\cyr\cyru\cyrm. \cyrv{} \cyrv\cyro\cyrz\cyrr. } {\cyr\cyrn\cyre\cyri\cyrz\cyrv.}. +\item[I:2] é×ÁÎÏ×Á ìÀÂÏ×Ø é×ÁÎÏ×ÎÁ; {\cyr\cyrr\cyro\cyrd.} 1935/12/01; {\cyr\cyru\cyrm. \cyrv{} \cyrv\cyro\cyrz\cyrr. } 70. +\item[II:1] é×ÁÎÏ× óÅÒÇÅÊ ðÅÔÒÏ×ÉÞ; {\cyr\cyrr\cyro\cyrd.} 1965/08/06. +\item[II:2] é×ÁÎÏ×Á áÎÎÁ ðÅÔÒÏ×ÎÁ; {\cyr\cyrr\cyro\cyrd.} 1968/05/05. +\item[III:1] é×ÁÎÏ× é×ÁÎ óÅÒÇÅÅ×ÉÞ; {\cyr\cyrr\cyro\cyrd.} 1990/12/01; çÅÎÅÔÉÞ. ÉÓÓÌ. 2005/12/08. +\item[III:2] é×ÁÎÏ×Á äÁÒØÑ óÅÒÇÅÅ×ÎÁ; {\cyr\cyrr\cyro\cyrd.} 1995/03/24; çÅÎÅÔÉÞ. ÉÓÓÌ. 2005/12/08. +\end{description} diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/abortions.csv b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/abortions.csv new file mode 100644 index 0000000000..0397efb1aa --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/abortions.csv @@ -0,0 +1,5 @@ +Id |Name |Sex |DoB |DoD |Mother|Proband|Condition|Type +A0 |Ann |female|1970.06.15| | | |affected | +B1 |#abortion|female|1990.03.01| |A0 | |affected | +B2 |#abortion|male |2000.10.10| |A0 | | |sab +B3 |John |male |2002.12.01| |A0 |yes |affected | diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/badsort.csv b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/badsort.csv new file mode 100644 index 0000000000..2681636195 --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/badsort.csv @@ -0,0 +1,14 @@ +Id |Name |Sex |DoB |Father|Mother|Proband +A0 |John |male |1915.06.15| | | +B1 |Sam |male |1935.12.04|A0 | | +B2 |Ann |female|1937.03.02|A0 | | +C1 |Paul |male |1952.10.03|B1 | | +F1 |Scott |male |1912.02.01| | | +G1 |Simon |male |1934.09.17|F1 | | +G2 |Sarah |female|1936.12.19|F1 | | +H1 |Lola |female|1960.04.13|G2 | | +K1 |Jim |male |1962.11.05|G1 |B2 | +M1 |Jane |female|1917.02.13| | | +P1 |Simon |male |1935.10.04| | M1 | +R1 |Pam |female|1964.02.05|P1 | | +X1 |James |male |1988.07.12|K1 |R1 |yes
\ No newline at end of file diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/childlessness.csv b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/childlessness.csv new file mode 100644 index 0000000000..38b524cb45 --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/childlessness.csv @@ -0,0 +1,6 @@ +Id |Name |Sex |Mother|Father|Proband|Type |Comment +A0 |John |male | | | | | +B1 |James |male | |A0 | | | +B1c|#childless |male | |B1 | |infertile |anospermia +B2 |Ann |female| |A0 |yes | | +B2c|#childless | |B2 | | | |
\ No newline at end of file diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/consanguinic.csv b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/consanguinic.csv new file mode 100644 index 0000000000..0aba287f1a --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/consanguinic.csv @@ -0,0 +1,11 @@ +Id |Name |Sex |Father|Mother|Proband|DoB +A0 |Jane |female| | | |1908.12.12 +B1 |John |male | |A0 | |1936.12.15 +B2 |Ann |female| |A0 | |1934.04.17 +B3 |Samantha |female| |A0 | |1932.12.03 +B4 |Nancy |female| |A0 | |1928.01.05 +C1 |Mary |female| |B2 | yes |1955.08.26 +C2 |Paul |male | |B3 | |1964.05.07 +C3 |Jane |female| |B4 | |1950.11.03 +D1 |Jack |male |B1 |C1 | |1975.07.01 +D2 |Laura |female|C2 |C3 | |1974.09.05 diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/english.cfg b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/english.cfg new file mode 100644 index 0000000000..a8028789a7 --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/english.cfg @@ -0,0 +1,76 @@ +# An example configuration file for pedigree program +# This file is used for the examples in the program manual. + +# Do we want to have a full LaTeX file or just a fragment? +# +$fulldoc=0; + +# What kind of document do we want +# +# $documentheader='\documentclass[landscape]{article}'; + +# Define additional packages here +# +# $addtopreamble=<<END; +# \\usepackage{pst-pdgr} +# END + +# Do we want to print a legend? +# +$printlegend=1; + +# Fields to include in the legend. Delete Name for privacy +# protection. +# +@fieldsforlegend = qw(Name DoB AgeAtDeath Comment); + +# +# Fields to put at the node. Delete Name for privacy +# protection. +# +@fieldsforchart = qw(Name); + +# Language +# +# $language="russian"; +$language="english"; + +# Override the encoding +# +# $encoding="koi8-r"; + +# +# Fonts for the chart +# +$belowtextfont='\small'; +$abovetextfont='\scriptsize'; + +# +# descarmA +# +$descarmA = 0.8; + +# +# Distances between nodes (in cm) +# +$xdist=2; +$ydist=2; + +# +# Maximal width and height of the pedigree in cm. +# Set this to 0 to switch off scaling +# +$maxW = 15; +$maxH = 19; + +# +# Whether to rotate the page. The values are 'yes', 'no' and 'maybe' +# If 'maybe' is chosen, the pedigree is rotated if it allows better +# scaling +# +$rotate = 'maybe'; + + +# Must be the last line +# +1; diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/english.csv b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/english.csv new file mode 100644 index 0000000000..01a59888bd --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/english.csv @@ -0,0 +1,12 @@ +Id |Name |Sex |DoB | DoD |Mother|Father|Proband|Condition |Comment +P |John Smith |male |1970/02/05| |M1 |F1 | yes | affected|Evaluated 2005/12/01 +M1 |Mary Smith |female|1940/02/05| |GM2 |GF2 | | normal | +F1 |Bill Smith |male |1938/04/03| |GM1 | GF1 | |affected | +GM1|Joan Smith |female|1902/07/01|1975/12/13| | | |asymptomatic +GF1|Joseph Smith |male |unknown |unknown | | | | normal +GF2|Jim Brown |male |1905/11/01| | | | | normal | +GM2|Lisa Brown |female|1910/03/03| | | | | normal | +S1 |Rebecca Smith |female|1972/12/25| |M1 |F1 | | affected +S2 |Alexander Smith |male |1975/11/12| |M1 |F1 | | normal +A1 |Ann Gold |female|1941/09/02| |GM1 | GF1 | | obligatory|Aunt of the proband +C1 | Jenny Smith |female|1969/12/03| |A1 | | | affected | Cousin of the proband diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/english1.cfg b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/english1.cfg new file mode 100644 index 0000000000..5ce3a8d303 --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/english1.cfg @@ -0,0 +1,76 @@ +# An example configuration file for pedigree program +# This file is used for the examples in the program manual. + +# Do we want to have a full LaTeX file or just a fragment? +# +$fulldoc=0; + +# What kind of document do we want +# +# $documentheader='\documentclass[landscape]{article}'; + +# Define additional packages here +# +# $addtopreamble=<<END; +# \\usepackage{pst-pdgr} +# END + +# Do we want to print a legend? +# +$printlegend=0; + +# Fields to include in the legend. Delete Name for privacy +# protection. +# +@fieldsforlegend = qw(Name DoB AgeAtDeath Comment); + +# +# Fields to put at the node. Delete Name for privacy +# protection. +# +@fieldsforchart = qw(); + +# Language +# +# $language="russian"; +$language="english"; + +# Override the encoding +# +# $encoding="koi8-r"; + +# +# Fonts for nodes +# +$belowtextfont='\small'; +$abovetextfont='\scriptsize'; + +# +# descarmA +# +$descarmA = 0.9; + +# +# Distances between nodes (in cm) +# +$xdist=1.5; +$ydist=1.8; + +# +# Maximal width and height of the pedigree in cm. +# Set this to 0 to switch off scaling +# +$maxW = 15; +$maxH = 19; + +# +# Whether to rotate the page. The values are 'yes', 'no' and 'maybe' +# If 'maybe' is chosen, the pedigree is rotated if it allows better +# scaling +# +$rotate = 'maybe'; + + +# Must be the last line +# +1; diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/english_short.cfg b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/english_short.cfg new file mode 100644 index 0000000000..8ee82a474c --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/english_short.cfg @@ -0,0 +1,76 @@ +# An example configuration file for pedigree program +# This file is used for the examples in the program manual. + +# Do we want to have a full LaTeX file or just a fragment? +# +$fulldoc=0; + +# What kind of document do we want +# +# $documentheader='\documentclass[landscape]{article}'; + +# Define additional packages here +# +# $addtopreamble=<<END; +# \\usepackage{pst-pdgr} +# END + +# Do we want to print a legend? +# +$printlegend=0; + +# Fields to include in the legend. Delete Name for privacy +# protection. +# +@fieldsforlegend = qw(Name DoB AgeAtDeath Comment); + +# +# Fields to put at the node. Delete Name for privacy +# protection. +# +@fieldsforchart = qw(Name); + +# Language +# +# $language="russian"; +$language="english"; + +# Override the encoding +# +# $encoding="koi8-r"; + +# +# Fonts for the chart +# +$belowtextfont='\small'; +$abovetextfont='\scriptsize'; + +# +# descarmA +# +$descarmA = 0.8; + +# +# Distances between nodes (in cm) +# +$xdist=2; +$ydist=2; + +# +# Maximal width and height of the pedigree in cm. +# Set this to 0 to switch off scaling +# +$maxW = 15; +$maxH = 19; + +# +# Whether to rotate the page. The values are 'yes', 'no' and 'maybe' +# If 'maybe' is chosen, the pedigree is rotated if it allows better +# scaling +# +$rotate = 'maybe'; + + +# Must be the last line +# +1; diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/pedigree.cfg b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/pedigree.cfg new file mode 100644 index 0000000000..a82689e0e3 --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/pedigree.cfg @@ -0,0 +1,47 @@ +# An example configuration file for pedigree program +# + +# Do we want to have a full LaTeX file or just a fragment? +# +$fulldoc=1; + +# What kind of document do we want +# +# $documentheader='\documentclass[landscape]{article}'; +$documentheader='\documentclass{article}'; + +# Define additional packages here +# +# $addtopreamble=<<END; +# \\usepackage{graphics} +# END +$addtopreamble=<<END; +\\psset{armB=1} +END + +# Do we want to print a legend? +# +$printlegend=1; + +# Fields to include in the legend. Delete Name for privacy +# protection. +# +@fieldstoprint = qw(Name DoB AgeAtDeath Comment); + +# Language +# +# $language="russian"; +$language="english"; + +# Override the encoding, if neccessary +# +# $encoding="koi8-r"; + +# Distances between nodes (in cm) +# +$xdist=2; +$ydist=2; + +# Must be the last line +# +1;
\ No newline at end of file diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/russian.cfg b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/russian.cfg new file mode 100644 index 0000000000..13f16b5974 --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/russian.cfg @@ -0,0 +1,78 @@ +# An example configuration file for pedigree program +# This file is used for the examples in the program manual. + +# Do we want to have a full LaTeX file or just a fragment? +# +$fulldoc=0; + +# What kind of document do we want +# +# $documentheader='\documentclass[landscape]{article}'; + +# Define additional packages here +# +# $addtopreamble=<<END; +# \\usepackage{pst-pdgr} +# END + +# Do we want to print a legend? +# +$printlegend=1; + +# Fields to include in the legend. Delete Name for privacy +# protection. +# +@fieldsforlegend = qw(Name DoB AgeAtDeath Comment); + +# +# Fields to put at the node. Delete Name for privacy +# protection. +# +@fieldsforchart = qw(Name); + +# Language +# +# $language="english"; + $language="russian"; + + +# Override the encoding +# +$encoding="koi8-r"; + +# +# Fonts for nodes +# +$belowtextfont='\small'; +$abovetextfont='\scriptsize'; + +# +# descarmA +# +$descarmA = 0.8; + +# +# Distances between nodes (in cm) +# +$xdist=3.3; +$ydist=3.3; + +# +# Maximal width and height of the pedigree in cm. +# Set this to 0 to switch off scaling +# +$maxW = 15; +$maxH = 19; + +# +# Whether to rotate the page. The values are 'yes', 'no' and 'maybe' +# If 'maybe' is chosen, the pedigree is rotated if it allows better +# scaling +# +$rotate = 'maybe'; + + + +# Must be the last line +# +1; diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/russian.csv b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/russian.csv new file mode 100644 index 0000000000..d702582b96 --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/russian.csv @@ -0,0 +1,7 @@ +éÄÅÎÔ|æéï |ðÏÌ|òÏÖÄ |õÍÅÒ |íÁÔØ|ïÔÅÃ|ðÒÏÂÁÎÄ|óÏÓÔÏÑÎÉÅ | ëÏÍÍÅÎÔÁÒÉÊ +P |é×ÁÎÏ× óÅÒÇÅÊ ðÅÔÒÏ×ÉÞ |ÍÕÖ|1965/08/06| |M1 |F1 |ÄÁ |ÂÏÌØÎ | +M1 |é×ÁÎÏ×Á ìÀÂÏ×Ø é×ÁÎÏ×ÎÁ|ÖÅÎ|1935/12/01|2005/10/01| | | |ÎÏÒÍ +F1 |é×ÁÎÏ× ðÅÔÒ éÌØÉÞ |ÍÕÖ|ÎÅÉÚ× |2003/01/25| | | |ÏÂÌÉÇÁÔ +S1 |é×ÁÎÏ×Á áÎÎÁ ðÅÔÒÏ×ÎÁ |ÖÅÎ|1968/05/05| |M1 |F1 | |ÎÏÒÍ +K1 |é×ÁÎÏ× é×ÁÎ óÅÒÇÅÅ×ÉÞ |ÍÕÖ|1990/12/01| | |P | |ÁÓÉÍÐ |çÅÎÅÔÉÞ. ÉÓÓÌ. 2005/12/08 +K2 |é×ÁÎÏ×Á äÁÒØÑ óÅÒÇÅÅ×ÎÁ|ÖÅÎ|1995/03/24| | |P | |ÎÏÒÍ |çÅÎÅÔÉÞ. ÉÓÓÌ. 2005/12/08 diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/sort1.csv b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/sort1.csv new file mode 100644 index 0000000000..315721ebe8 --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/sort1.csv @@ -0,0 +1,12 @@ +Id |Name |Sex |DoB |Father|Mother|Proband +A0 |John |male |1915.06.15| | | +B1 |Joan |female|1940.03.02|A0 | | +B2 |Jane |female|1942.07.07|A0 | | +B3 |Bill |male |1944.12.01|A0 | | +B4 |Peter |male |1941.05.01| | | +C1 |Jack |male |1963.12.01|B4 |B2 | +C2 |Sam |male |1961.08.26| |B1 | +C3 |Ann |female|1965.11.12| |B3 | +C4 |Lucy |female|1965.12.11| | | +D1 |Mark |male |1989.06.21|C1 |C4 |yes +D2 |Dina |female|1991.12.02|C1 |C4 | diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/sort2.csv b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/sort2.csv new file mode 100644 index 0000000000..f38830ee3e --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/sort2.csv @@ -0,0 +1,12 @@ +Id |Name |Sex |DoB |Father|Mother|Proband|SortOrder +A0 |John |male |1915.06.15| | | | +B1 |Joan |female|1940.03.02|A0 | | | +B2 |Jane |female|1942.07.07|A0 | | | +B3 |Bill |male |1944.12.01|A0 | | | +B4 |Peter |male |1941.05.01| | | | 3 +C1 |Jack |male |1963.12.01|B4 |B2 | | +C2 |Sam |male |1961.08.26| |B1 | | +C3 |Ann |female|1965.11.12| |B3 | | +C4 |Lucy |female|1965.12.11| | | | +D1 |Mark |male |1989.06.21|C1 |C4 |yes | +D2 |Dina |female|1991.12.02|C1 |C4 | | diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/sort3.csv b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/sort3.csv new file mode 100644 index 0000000000..44b60b2dc0 --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/sort3.csv @@ -0,0 +1,12 @@ +Id |Name |Sex |DoB |Father|Mother|Proband|SortOrder +A0 |John |male |1915.06.15| | | | +B1 |Joan |female|1940.03.02|A0 | | | +B2 |Jane |female|1942.07.07|A0 | | | +B3 |Bill |male |1944.12.01|A0 | | | +B4 |Peter |male |1941.05.01| | | | +C1 |Jack |male |1963.12.01|B4 |B2 | | +C2 |Sam |male |1961.08.26| |B1 | | +C3 |Ann |female|1965.11.12| |B3 | | +C4 |Lucy |female|1965.12.11| | | | -3 +D1 |Mark |male |1989.06.21|C1 |C4 |yes | +D2 |Dina |female|1991.12.02|C1 |C4 | | diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/twins.csv b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/twins.csv new file mode 100644 index 0000000000..a07333accc --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/examples/twins.csv @@ -0,0 +1,12 @@ +Id |Name |Sex |DoB |DoD |Mother|Father|Proband|Twins|Type +F0 |Adam |male |unknown |unknown | | | | | +A0 |Sam |male |1950.01.03|unknown | |F0 | | A1 |qzygotic +A1 |John |male |1950.01.03|2005.04.12| |F0 | | A0 |qzygotic +A2 |Jane |female|1951.14.15| | | | | | +B1 |Jack |male |1975.05.06| |A2 |A1 | |B2 |monozygotic +B2 |Mike |male |1975.05.06| |A2 |A1 | |B1 |monozygotic +B3 |Pam |female|1973.11.01| |A2 |A1 | | | +C1 |Jane |female|1998.12.04| | |B1 | |C2,C3| +C2 |John |male |1998.12.04| | |B1 | |C1,C3| +C3 |George|male |1998.12.04| | |B1 | yes |C1,C2| +C4 |Ann |female|2003.02.04| | |B1 | | |
\ No newline at end of file diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/pedigree.1 b/graphics/pstricks/contrib/pedigree/pedigree-perl/pedigree.1 new file mode 100644 index 0000000000..adb65ae743 --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/pedigree.1 @@ -0,0 +1,185 @@ +.\" Automatically generated by Pod::Man 2.1801 (Pod::Simple 3.05) +.\" +.\" Standard preamble: +.\" ======================================================================== +.de Sp \" Vertical space (when we can't use .PP) +.if t .sp .5v +.if n .sp +.. +.de Vb \" Begin verbatim text +.ft CW +.nf +.ne \\$1 +.. +.de Ve \" End verbatim text +.ft R +.fi +.. +.\" Set up some character translations and predefined strings. \*(-- will +.\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left +.\" double quote, and \*(R" will give a right double quote. \*(C+ will +.\" give a nicer C++. Capital omega is used to do unbreakable dashes and +.\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, +.\" nothing in troff, for use with C<>. +.tr \(*W- +.ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' +.ie n \{\ +. ds -- \(*W- +. ds PI pi +. if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch +. if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch +. ds L" "" +. ds R" "" +. ds C` "" +. ds C' "" +'br\} +.el\{\ +. ds -- \|\(em\| +. ds PI \(*p +. ds L" `` +. ds R" '' +'br\} +.\" +.\" Escape single quotes in literal strings from groff's Unicode transform. +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" +.\" If the F register is turned on, we'll generate index entries on stderr for +.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index +.\" entries marked with X<> in POD. Of course, you'll have to process the +.\" output yourself in some meaningful fashion. +.ie \nF \{\ +. de IX +. tm Index:\\$1\t\\n%\t"\\$2" +.. +. nr % 0 +. rr F +.\} +.el \{\ +. de IX +.. +.\} +.\" +.\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). +.\" Fear. Run. Save yourself. No user-serviceable parts. +. \" fudge factors for nroff and troff +.if n \{\ +. ds #H 0 +. ds #V .8m +. ds #F .3m +. ds #[ \f1 +. ds #] \fP +.\} +.if t \{\ +. ds #H ((1u-(\\\\n(.fu%2u))*.13m) +. ds #V .6m +. ds #F 0 +. ds #[ \& +. ds #] \& +.\} +. \" simple accents for nroff and troff +.if n \{\ +. ds ' \& +. ds ` \& +. ds ^ \& +. ds , \& +. ds ~ ~ +. ds / +.\} +.if t \{\ +. ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" +. ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' +. ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' +. ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' +. ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' +. ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' +.\} +. \" troff and (daisy-wheel) nroff accents +.ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' +.ds 8 \h'\*(#H'\(*b\h'-\*(#H' +.ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] +.ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' +.ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' +.ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] +.ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] +.ds ae a\h'-(\w'a'u*4/10)'e +.ds Ae A\h'-(\w'A'u*4/10)'E +. \" corrections for vroff +.if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' +.if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' +. \" for low resolution devices (crt and lpr) +.if \n(.H>23 .if \n(.V>19 \ +\{\ +. ds : e +. ds 8 ss +. ds o a +. ds d- d\h'-1'\(ga +. ds D- D\h'-1'\(hy +. ds th \o'bp' +. ds Th \o'LP' +. ds ae ae +. ds Ae AE +.\} +.rm #[ #] #H #V #F C +.\" ======================================================================== +.\" +.IX Title "pedigree 1" +.TH pedigree 1 "2012-04-14" "perl v5.10.0" "User Contributed Perl Documentation" +.\" For nroff, turn off justification. Always turn off hyphenation; it makes +.\" way too many mistakes in technical documents. +.if n .ad l +.nh +.SH "NAME" +pedigree \- create a TeX file for pedigree from a csv file +.SH "SYNOPSIS" +.IX Header "SYNOPSIS" +\&\fBpedigree\fR [\-c \fIconfiguration_file\fR] [\-d] [\-o \fIoutput_file\fR] [\-s \fIstart_id\fR] \fIinput_file\fR +.PP +\&\fBpedigree\fR \-v +.SH "DESCRIPTION" +.IX Header "DESCRIPTION" +The program converts a comma separated \fIinput_file\fR into a TeX file +with pst-pdgr macros. +.SH "OPTIONS" +.IX Header "OPTIONS" +.IP "\fB\-c\fR \fIconfiguration_file\fR" 4 +.IX Item "-c configuration_file" +The configuration file to read along with the system-wide and user's +configuration files +.IP "\fB\-d\fR" 4 +.IX Item "-d" +Debug mode on +.IP "\fB\-o\fR \-\fIoutput_file\fR" 4 +.IX Item "-o -output_file" +The ouput file instead of \fIinput_file.tex\fR +.IP "\fB\-s\fR \-\fIstart_id\fR" 4 +.IX Item "-s -start_id" +If this option is selected, the pedigree is constructed starting from +the node with the Id i<start_id>. Otherwise it is started from the +proband node. +.Sp +This option allows to create pedigrees with multiple probands or absent +probands, or show people who are not proband's relatives. +.IP "\fB\-v\fR" 4 +.IX Item "-v" +Print version information +.SH "FILES" +.IX Header "FILES" +.IP "\fB/etc/pedigree.cfg\fR" 4 +.IX Item "/etc/pedigree.cfg" +Global configuration file +.ie n .IP "\fB\fB$HOME\fB/.pedigreerc\fR" 4 +.el .IP "\fB\f(CB$HOME\fB/.pedigreerc\fR" 4 +.IX Item "$HOME/.pedigreerc" +User configuration file +.SH "SEE ALSO" +.IX Header "SEE ALSO" +The manual distributed with this program describes the format of the +configuration file and the input file. +.PP +The library functions are described in \fIPedigree::Language\fR\|(3), +\&\fIPedigree::Parser\fR\|(3), \fIPedigree::Node\fR\|(3), \fIPedigree::PersonNode\fR\|(3), +\&\fIPedigree::MarriageNode\fR\|(3), \fIPedigree::Area\fR\|(3). +.SH "AUTHOR" +.IX Header "AUTHOR" +Boris Veytsman, Leila Akhmadeeva, 2006\-2012 diff --git a/graphics/pstricks/contrib/pedigree/pedigree-perl/pedigree.pl b/graphics/pstricks/contrib/pedigree/pedigree-perl/pedigree.pl new file mode 100644 index 0000000000..209c3131be --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pedigree-perl/pedigree.pl @@ -0,0 +1,544 @@ +#!/usr/bin/env perl +# +# Copyright (C) 2006-2012 Boris Veytsman & Leila Akhmadeeva +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 59 Temple Place - Suite 330, +# Boston, MA 02111-1307, USA. +# +# +=pod + +=head1 NAME + +pedigree - create a TeX file for pedigree from a csv file + +=head1 SYNOPSIS + +B<pedigree> [-c I<configuration_file>] [-d] [-o I<output_file>] [-s I<start_id>] I<input_file> + +B<pedigree> -v + +=head1 DESCRIPTION + +The program converts a comma separated I<input_file> into a TeX file +with pst-pdgr macros. + +=head1 OPTIONS + +=over 4 + +=item B<-c> I<configuration_file> + +The configuration file to read along with the system-wide and user's +configuration files + +=item B<-d> + +Debug mode on + +=item B<-o> -I<output_file> + +The ouput file instead of I<input_file.tex> + +=item B<-s> -I<start_id> + +If this option is selected, the pedigree is constructed starting from +the node with the Id i<start_id>. Otherwise it is started from the +proband node. + +This option allows to create pedigrees with multiple probands or absent +probands, or show people who are not proband's relatives. + +=item B<-v> + +Print version information + +=back + +=head1 FILES + +=over 4 + +=item B</etc/pedigree.cfg> + +Global configuration file + +=item B<$HOME/.pedigreerc> + +User configuration file + +=back + +=head1 SEE ALSO + +The manual distributed with this program describes the format of the +configuration file and the input file. + +The library functions are described in Pedigree::Language(3), +Pedigree::Parser(3), Pedigree::Node(3), Pedigree::PersonNode(3), +Pedigree::MarriageNode(3), Pedigree::Area(3). + +=head1 AUTHOR + +Boris Veytsman, Leila Akhmadeeva, 2006-2012 + + +=cut + + +######################################################### +# Packages and Options # +######################################################### + +use strict; +use vars qw($opt_c $opt_d $opt_o $opt_s $opt_v); + +our $TLCONF; # TL config file +our $TLCONFLOCAL; # TL local config file + +BEGIN { + # find files relative to our installed location within TeX Live + chomp(my $TLMaster = `kpsewhich -var-value=SELFAUTOPARENT`); # TL root + if (length($TLMaster)) { + unshift @INC, "$TLMaster/texmf-dist/scripts/pedigree-perl"; + $TLCONF = "$TLMaster/texmf-config/pedigree/pedigree.cfg"; + chomp($TLCONFLOCAL = `kpsewhich -var-value=TEXMFLOCAL`); + $TLCONFLOCAL .= "/pedigree/pedigree.cfg"; + } +} + +use Getopt::Std; +use FileHandle; +use Pedigree; + +######################################################### +# Options Reading and Global Variables # +######################################################### + +my $USAGE="Usage: $0 [-c configuration_file] [-d] [-o output_file] [-s start_id] input_file\n"; +my $COPYRIGHT=<<END; +$0 Version 1.0, April 2012 + +Copyright (C) 2006-2012 Boris Veytsman & Leila Akhmadeeva + +This program is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, +END + +my $GLOBALCONF="/etc/pedigree.cfg"; + +my $USERCONF="$ENV{HOME}/.pedigreerc"; + + +our $IN = new FileHandle; +our $OUT = new FileHandle; + +getopts('c:do:s:v') or die $USAGE; + +if ($opt_v) { + die $COPYRIGHT; +} + +our $DEBUG = $opt_d ||0; + +if (scalar @ARGV != 1) { + die $USAGE; +} + +our $start_id = $opt_s; + +######################################################### +# Opening Files # +######################################################### + + +if ($ARGV[0] eq '-') { + $IN->fdopen(fileno(STDIN),"r"); +} else { + $IN->open($ARGV[0], "r") or die "Cannot read from $ARGV[0]\n"; +} + +my $outfile=$ARGV[0]; +if ($opt_o) { + $outfile = $opt_o; +} else { + $outfile =~ s/\.[^\.]*$/.tex/; +} +if ($outfile eq '-') { + $OUT->fdopen(fileno(STDOUT),"w"); +} else { + $OUT->open($outfile, "w") or die "Cannot write to $outfile\n"; +} + +######################################################### +# Configuration # +######################################################### + +# +# First, the defaults. Even if we do not find any +# configuration file, these will work. +# + + +# +# Do we want to have a full LaTeX file or just a fragment? +# +our $fulldoc=1; + +# +# What kind of document do we want +# +# our $documentheader='\documentclass[landscape]{article}'; +our $documentheader='\documentclass{article}'; + +# +# Define additional packages here +# +# our $addtopreamble=<<END; +# \\usepackage{graphics} +# END +our $addtopreamble=<<END; +\\psset{descarmA=1} +END + + + +# +# Do we want to print a legend? +# +our $printlegend=1; + +# +# Fields to include in the legend. Delete Name for privacy +# protection. +# +our @fieldsforlegend = qw(Name DoB AgeAtDeath Comment); + +# +# Fields to put at the node. Delete Name for privacy +# protection. +# +our @fieldsforchart = qw(Name); + +# +# Language +# +# our $language="russian"; +our $language="english"; + +# +# Override the encoding +# +# our $encoding="koi8-r"; + +our $encoding; + +# +# descarmA +# +our $descarmA = 0.8; + +# +# Fonts for nodes +# +our $belowtextfont='\small'; +our $abovetextfont='\scriptsize'; + +# +# Distances between nodes (in cm) +# +our $xdist=2; +our $ydist=2; + +# +# Maximal width and height of the pedigree in cm. +# Set this to 0 to switch off scaling +# +our $maxW = 15; +our $maxH = 19; + +# +# Whether to rotate the page. The values are 'yes', 'no' and 'maybe' +# If 'maybe' is chosen, the pedigree is rotated if it allows better +# scaling +# +our $rotate = 'maybe'; + +# +# Read the global configuration file(s) +# +foreach my $conffile ($GLOBALCONF, $TLCONF, $TLCONFLOCAL) { + if (-r $conffile) { + if ($DEBUG) { + print STDERR "Reading global configuration file $conffile\n"; + } + require "$conffile"; + } else { + if ($DEBUG) { + print STDERR "Cannot find global configuration file $conffile; going without it\n"; + } + } +} + +# +# Read the user configuration file +# +if (-r $USERCONF) { + if ($DEBUG) { + print STDERR "Reading user configuration file $USERCONF\n"; + } + require "$USERCONF"; +} else { + if ($DEBUG) { + print STDERR "Cannot find user configuration file $USERCONF; going without it\n"; + } +} + +# +# Read the option configuration file +# +if ($opt_c) { + if (-r $opt_c) { + if ($DEBUG) { + print STDERR "Reading optional configuration file $opt_c\n"; + } + require "$opt_c"; + } else { + die "Cannot find $opt_c\n"; + } +} + +######################################################### +# Setting up # +######################################################### + +my $lang = new Pedigree::Language($language, $encoding); +$_=<$IN>; +my $parser = new Pedigree::Parser($_,$lang); +my $start; + +######################################################### +# Reading input # +######################################################### + +while (<$IN>) { + my $node = Pedigree->MakeNode($parser->Parse($_)); + if (ref($node)) { + if ($start_id) { + if ($start_id eq $node->Id()) { + $start = $node; + if ($DEBUG) { + print STDERR "Found start: ", $start->Id(), "\n"; + } + } + } else { + if ($node->isProband()) { + if (ref($start)) { + print STDERR "Two probands? I got ", $start->Id(), + " and ", $node->Id(), "\n"; + } + $start=$node; + if ($DEBUG) { + print STDERR "Found proband: ", $start->Id(), "\n"; + } + } + } + } +} + +if (!ref($start)) { + die "Cannot find the start!\n"; +} + +######################################################### +# Process Pedigree # +######################################################### + +# +# Check all parents +# +$start->CheckAllParents(); + + +# +# The root is the root of the tree to which the proband +# belongs +# + +my ($root, undef)=@{$start->FindRoot(0)}; +if ($DEBUG) { + print STDERR "Root: ", $root->Id(), "\n"; +} + +# +# Calculate relative coordinates +# +$root->SetRelX(0); +$root->SetRelY(0); +$root->SetArea(); + +# +# Calculate the absolute coordinates +# +$root->CalcAbsCoor(0,0); + +# +# Check for consanguinic marriages +# +$root->AddConsanguinicMarriages(); + +# +# And twins +# +$root->AddTwins($ydist); + +# +# Get the frame +# +my ($xmin, $ymin, $xmax, $ymax) = @{$root->SetFrame($xdist, $ydist)}; + + + +######################################################### +# Printing headers # +######################################################### + +if ($fulldoc) { + printheader($OUT,$lang,$addtopreamble); +} + +######################################################### +# Calculate scale and check whether to rotate # +######################################################### + +my $scale=1; +my $scaleRotated = 1; + +if ($maxH && $maxW) { + if ($maxH/($ymax-$ymin) < $scale) { + $scale = $maxH/($ymax-$ymin); + } + if ($maxW/($xmax-$xmin) < $scale) { + $scale = $maxW/($xmax-$xmin); + } + if ($maxW/($ymax-$ymin) < $scaleRotated) { + $scaleRotated = $maxW/($ymax-$ymin); + } + if ($maxH/($xmax-$xmin) < $scaleRotated) { + $scaleRotated = $maxH/($xmax-$xmin); + } +} + +my $doRotate = ($rotate =~ /yes/i) || (($rotate =~ /maybe/i) && + ($scaleRotated > $scale)); + +######################################################### +# Printing pspicture # +######################################################### + +my $pre; +my $post ='}'."\n"; + +if ($doRotate) { + $descarmA *= $scaleRotated; + $pre="\\rotatebox{90}{%\n\\psset{descarmA=$descarmA}%\n"; + if ($scaleRotated<1) { + $pre .= '\psset{unit='.$scaleRotated.'}%'."\n"; + } +} else { + $descarmA *= $scale; + $pre="{%\n\\psset{descarmA=$descarmA}%\n"; + if ($scale<1) { + $pre .= '{\psset{unit='.$scale.'}%'."\n"; + } +} + +print $OUT $pre; + +print $OUT '\begin{pspicture}',"($xmin,$ymin)($xmax,$ymax)\n"; + +print $OUT $root->DrawAll($xdist, $ydist, $belowtextfont, + $abovetextfont, @fieldsforchart); + +print $OUT '\end{pspicture}%',"\n"; + +print $OUT $post; + +######################################################### +# Printing legend # +######################################################### + + +if ($printlegend) { + print $OUT $root->PrintAllLegends($lang, @fieldsforlegend); +} + +######################################################### +# Printing end # +######################################################### + + +if ($fulldoc) { + printend($OUT); +} + +######################################################### +# Exiting # +######################################################### + +exit 0; + +######################################################### +# Subroutines # +######################################################### + +# +# Printing headers & footers +# + +sub printheader { + my ($OUT,$lang,$addtopreamble)=@_; + print $OUT <<END; +$documentheader +\\usepackage{pst-pdgr} +END + + print $OUT $lang->Header; + print $OUT <<END; +$addtopreamble +\\begin{document} +END + return 0; +} + + +sub printend { + my $OUT=shift; + print $OUT "\\end{document}\n"; + return 0; +} + + diff --git a/graphics/pstricks/contrib/pedigree/pst-pdgr/Makefile b/graphics/pstricks/contrib/pedigree/pst-pdgr/Makefile new file mode 100644 index 0000000000..7eae24e9a3 --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pst-pdgr/Makefile @@ -0,0 +1,54 @@ +# +# Makefile for pst-pdgr package +# +# This file is in public domain +# +# $Id: Makefile,v 2.2 2017/11/20 21:27:26 boris Exp $ +# + +PACKAGE=pst-pdgr + +all: $(PACKAGE).pdf + +%.pdf: %.ps + ps2pdf -sAutoRotatePages=None $< + +%.ps: %.dvi + dvips -Ppdf -o $@ $< + +%.dvi: %.dtx $(PACKAGE).sty $(PACKAGE).tex + latex $< + - bibtex $* + latex $< + - makeindex -s gind.ist -o $*.ind $*.idx + - makeindex -s gglo.ist -o $*.gls $*.glo + latex $< + while ( grep -q '^LaTeX Warning: Label(s) may have changed' $*.log) \ + do latex $<; done + + +%.sty: %.ins %.dtx + latex $< + + +%.tex: %.ins %.dtx + latex $< + +.PRECIOUS: $(PACKAGE).cfg $(PACKAGE).tex $(PACKAGE).sty + + +clean: + $(RM) $(PACKAGE).tex $(PACKAGE).sty $(PACKAGE).log $(PACKAGE).aux \ + $(PACKAGE).cfg $(PACKAGE).glo $(PACKAGE).idx $(PACKAGE).toc \ + $(PACKAGE).ilg $(PACKAGE).ind $(PACKAGE).out $(PACKAGE).lof \ + $(PACKAGE).lot $(PACKAGE).bbl $(PACKAGE).blg $(PACKAGE).gls \ + $(PACKAGE).dvi $(PACKAGE).ps + +distclean: clean + $(RM) $(PACKAGE).pdf + +# +# Archive for the distribution. Includes typeset documentation +# +archive: all clean + COPYFILE_DISABLE=1 tar -C .. -czvf ../pst-pdgr.tgz --exclude '*~' --exclude '*.tgz' --exclude '*.zip' --exclude CVS --exclude '.git*' -s/latex/pst-pdgr/ latex; mv ../pst-pdgr.tgz . diff --git a/graphics/pstricks/contrib/pedigree/pst-pdgr/NEWS b/graphics/pstricks/contrib/pedigree/pst-pdgr/NEWS new file mode 100644 index 0000000000..fbe2393576 --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pst-pdgr/NEWS @@ -0,0 +1,14 @@ +pst-pdgr NEWS: History of user interface changes + +Changes in v0.4, 2017/11/20 + +* Compatible with new pstricks + +Changes in v0.3, 2007/06/25 + +* armB no longer sets the length of the arm for \pstDescent and + \pstTwins. Instead the new option descarmA is instroduced. + + + +This file is in public domain
\ No newline at end of file diff --git a/graphics/pstricks/contrib/pedigree/pst-pdgr/README b/graphics/pstricks/contrib/pedigree/pst-pdgr/README new file mode 100644 index 0000000000..a4a75d4b38 --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pst-pdgr/README @@ -0,0 +1,26 @@ + Creating Medical Pedigrees with PSTricks and LaTeX + Boris Veytsman & Leila Akhmadeeva + Version 0.4, November 2017 + +This package is a set of macros based on PSTricks to draw medical +pedigrees according to the recommendations for standardized human +pedigree nomenclature. The drawing commands place the symbols on a +pspicture canvas. An interface for making trees is also provided. +The package can be used both with LaTeX and PlainTeX. A separate +Perl program for generating TeX files from spreadsheets is +provided elsewhere on CTAN. + +To extract the files, run pst-pdgr.ins through latex. Then move the +files pst-pdgr.sty & pst-pdgr.cfg to the place where LaTeX files are +kept in your system, e. g. /usr/share/texmf/tex/latex/pst-pdgr/, and +the file pst-pdgr.tex to the place where generic TeX files are kept in +your system, e.g. /usr/share/texmf/tex/generic/pstricks/pst-pdgr/. + +The documentation is in the file pst-pdgr.pdf. You may use the +provided Makefile to re-typeset it. + +Copyright 2006--2017 Boris Veytsman <borisv@lk.net>, Leila Akhmadeev + +This work may be distributed and/or modified under the conditions of +the LaTeX Project Public License, either version 1.3 of this license +or (at your option) any later version. diff --git a/graphics/pstricks/contrib/pedigree/pst-pdgr/pst-pdgr.bib b/graphics/pstricks/contrib/pedigree/pst-pdgr/pst-pdgr.bib new file mode 100644 index 0000000000..1e888c9721 --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pst-pdgr/pst-pdgr.bib @@ -0,0 +1,50 @@ +,-------------------. +| BIBTEX ENTRIES | +`-------------------' + +@book{Harper01:MDBook, + address = {Philadelphia}, + author = {Peter Harper}, + edition = {Third}, + publisher = {W. B. Saunders}, + title = {Myotonic Dystrophy}, + year = {2001}, +} + +@article{PedigreeNomenclature95, + author = {Robin L. Bennett and Kathryn A. Steinhaus and + Stefanie B. Uhrich and Corrine K. O'Sullivan and + Robert G. Resta and Debra Lochner-Doyle and + Dorene S. Markei and Victoria Vincent and + Jan Hamanishi}, + journal = {Am. J. Hum. Genet.}, + number = {3}, + pages = {745--752}, + title = {Recommendations for Standardized Human Pedigree + Nomenclature}, + volume = {56}, + year = {1995}, +} + + +@manual{PSTricks93, + author = {Van Zandt, Timothy}, + editor = {Denis Girou}, + month = {July}, + note = {\url{http://ctan.tug.org/tex-archive/graphics/pstricks/base/doc}}, + title = {PSTricks: PostScript Macros for Generic \TeX. + Usesr's Guide}, + year = {2003}, +} + +@manual{pedigree-perl, + author = {Boris Veytsman and Leila Akhmadeeva}, + month = {July}, + note = {\url{http://ctan.tug.org/tex-archive/graphics/pstricks/contrib/pedigree/pedigree-perl}}, + title = {A Program For Automatic Pedigree Construction With pst-pdgr. + User Manual and Algorithm Description}, + year = {2007}, + +} + +This file is in public domain
\ No newline at end of file diff --git a/graphics/pstricks/contrib/pedigree/pst-pdgr/pst-pdgr.dtx b/graphics/pstricks/contrib/pedigree/pst-pdgr/pst-pdgr.dtx new file mode 100644 index 0000000000..cd2468c19c --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pst-pdgr/pst-pdgr.dtx @@ -0,0 +1,2193 @@ +% \iffalse +%<*gobble> +% $Id: pst-pdgr.dtx,v 2.9 2017/11/20 21:27:26 boris Exp $ +% +% Copyright 2006, 2007, Boris Veytsman <borisv@lk.net>, Leila Akhmadeeva +% This work may be distributed and/or modified under the +% conditions of the LaTeX Project Public License, either +% version 1.3 of this license or (at your option) any +% later version. +% The latest version of the license is in +% http://www.latex-project.org/lppl.txt +% and version 1.3 or later is part of all distributions of +% LaTeX version 2003/06/01 or later. +% +% This work has the LPPL maintenance status `maintained'. +% +% The Current Maintainer of this work is Boris Veytsman +% +% This work consists of the file pst-pdgr.dtx and the +% derived files pst-pdgr.tex, pst-pdgr.sty, pst-pdgr.pdf. +% +% \fi +% \CheckSum{0} +% +% \changes{v0.1}{2006/04/18}{The interface is mostly done} +% \changes{v0.2}{2006/04/19}{Added new examples} +% \changes{v0.3}{2007/07/20}{Documentation update} +% +% +%% \CharacterTable +%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z +%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z +%% Digits \0\1\2\3\4\5\6\7\8\9 +%% Exclamation \! Double quote \" Hash (number) \# +%% Dollar \$ Percent \% Ampersand \& +%% Acute accent \' Left paren \( Right paren \) +%% Asterisk \* Plus \+ Comma \, +%% Minus \- Point \. Solidus \/ +%% Colon \: Semicolon \; Less than \< +%% Equals \= Greater than \> Question mark \? +%% Commercial at \@ Left bracket \[ Backslash \\ +%% Right bracket \] Circumflex \^ Underscore \_ +%% Grave accent \` Left brace \{ Vertical bar \| +%% Right brace \} Tilde \~} +% +%\iffalse +% \begin{macrocode} +\documentclass{ltxdoc} +\usepackage{array} +\usepackage{url} +\usepackage{graphicx} +\usepackage{pst-pdgr} +\usepackage{pstricks-add} +% Taken from xkeyval.dtx +\makeatletter +\def\DescribeOption#1{\leavevmode\@bsphack + \marginpar{\raggedleft\PrintDescribeOption{#1}}% + \SpecialOptionIndex{#1}\@esphack\ignorespaces} +\def\PrintDescribeOption#1{\strut\emph{option}\\\MacroFont #1\ } +\def\SpecialOptionIndex#1{\@bsphack + \index{#1\actualchar{\protect\ttfamily#1} + (option)\encapchar usage}% + \index{options:\levelchar#1\actualchar{\protect\ttfamily#1}\encapchar + usage}\@esphack} +\def\DescribeOptions#1{\leavevmode\@bsphack + \marginpar{\raggedleft\strut\emph{options}% + \@for\@tempa:=#1\do{% + \\\strut\MacroFont\@tempa\SpecialOptionIndex\@tempa + }}\@esphack\ignorespaces} +\makeatother +\PageIndex +\CodelineIndex +\RecordChanges +\EnableCrossrefs +\begin{document} + \DocInput{pst-pdgr.dtx} +\end{document} +% \end{macrocode} +%</gobble> +% \fi +% \MakeShortVerb{|} +% +%\GetFileInfo{pst-pdgr.sty} +%\title{Creating Medical Pedigrees with PSTricks and \LaTeX. +% \thanks{\copyright Boris Veytsman, Leila Akhmadeeva 2006, 2007}} +%\author{Boris Veytsman, \path{borisv@lk.net} \and Leila Akhmadeeva} +%\date{\filedate, \fileversion} +%\maketitle +%\begin{abstract} +% A set of macros based on |PSTricks| to draw medical pedigrees +% according to the recommendations for standardized human pedigree +% nomenclature. The drawing commands place the symbols on a +% |pspicture| canvas. An interface for making trees is also +% provided. The package can be used both with \LaTeX{} and +% \PlainTeX. A separate |Perl| program for generating \TeX{} files +% from spreadsheets is provided elsewhere on |CTAN|. +%\end{abstract} +% +% \begin{center} +% \begin{pspicture}(0,1)(7,7) +% \rput(3,4){% +% \pstree{\TpstPerson[female, obligatory, belowtext=Ann]{Ann}}{% +% \def\psedge{\pstDescent}\psset{descarmA=1} +% \pstree{\TpstPerson[male, affected, belowtext=John]{John}}{% +% \TpstPerson[female, belowtext=Sue]{Sue} +% \TpstPerson[male, belowtext=Paul]{Paul} +% \TpstAbortion[affected, belowtext=male]{A1} +% \pstree[thislevelsep=1.2]{\TpstPerson[male, +% belowtext=Peter, affected, proband]{Peter}}{% +% \def\psedge{\ncline} +% \TpstChildless[infertile]{C1} +% } +% } +% \pstree{\TpstPerson[female, belowtext=Mary]{Mary}}{ +% \TpstPerson[female, belowtext=Joan]{Joan} +% } +% } +% } +% \pstRelationship[consanguinic]{Peter}{Joan} +% \end{pspicture} +% \end{center} +% +% \clearpage +% +%\tableofcontents +% +% \clearpage +% +%\listoffigures +%\listoftables +% \clearpage +% +%\section{User Guide} +%\label{sec:user_guide} +% +% +%\subsection{Introduction} +%\label{sec:intro} +% +% Medical pedigree is a very important tool for clinicians, genetic +% researchers and educators. As stated +% in~\cite{PedigreeNomenclature95}, ``The construction of an accurate +% family pedigree is a fundamental component of a clinical genetic +% evaluation and of human genetic research.'' Unfortunately, up to +% now most geneticians make the pedigrees manually. There are several +% programs for doing so (see a list at +% \url{http://www.kumc.edu/gec/prof/genecomp.html#pedigree}), but they +% are rather expensive, lack multilanguage support and the quality of +% typesetting is somewhat lacking. This package tries to offer a +% \LaTeX-based solution for this problem. It could be used with a +% companion \path{Perl} program \path{pedigree}~\cite{pedigree-perl}, +% which converts databases of patients into a \LaTeX{} file. +% +% Note that there are ways to draw genealogical trees with +% |PSTricks|~\cite{PSTricks93}; see the beautiful ones at +% \url{http://www.tug.org/PSTricks/main.cgi?file=Examples/Genealogy/genealogy}. +% Unfortunately, medical pedigrees are often not \emph{trees}. +% Therefore we do not use tree approach throughout, but provide it as +% an alternative. Our general approach is based on the use of +% nodes~\cite[Part~VII]{PSTricks93}. Each person or entity is a node, +% and the lines are in fact |\ncline|s. This provides a flexibility +% to draw complex pedigrees. +% +% Each node in the system \emph{must} have a name. To prevent +% confusion with names of individuals, we call such name an \emph{id}. +% As usual in |PSTricks|, it is a sequence of letters and numbers +% starting with a letter. This rule is very important; a name like 1 +% or 1-1 can lead to mysterious PostScript errors. +% +% Our symbols follows the standard~\cite{PedigreeNomenclature95} with +% the exception that we do not implement showing several conditions +% on the same chart. +% +% To use the package, add the line +% \begin{verbatim} +% \usepackage{pst-pdgr} +% \end{verbatim} +% to a \LaTeX{} document or +% \begin{verbatim} +% \input pst-pdgr.tex +% \end{verbatim} +% to a \PlainTeX{} one. Note that since this is a |PSTricks| +% package, you need to use \path{tex-dvips} path to compile your +% document. If you need a PDF document, you can use \path{ps2pdf} or +% packages like \path{pst-pdf}, \path{ps4pdf}, \path{pstricks}. +% +% If you are using the package in a \LaTeX{} document, you have an +% added benefit of a local configuration file |pst-pdgr.cfg|. Such +% file, if exists, will be read. It can be used to override package +% settings (use |\AtEndOfPackage| for this). +% +% +% +%\subsection{Global Settings} +%\label{sec:globals} +% +% By default the size of each node is |0.5 unit|. You can change +% the size by setting the value of |unit| (1\,cm by default) +% with |\psset| +% +%\DescribeMacro{\affectedstyle} +%\DescribeMacro{\affectedbgcolor} +% By default the affected individual is drawn as a black node. This +% could be changed by setting |\affectedstyle| and +% |\affectedbgcolor|, see Figure~\ref{fig:affectedstyle}. +%\DescribeMacro{\affectedfgcolor} +% Sometimes we need to write something inside a node representing an +% affected individual. An example in~\cite{PedigreeNomenclature95} +% changes in this situation the style from filled to hatched, which +% looks inconsistent. We rather change the color of the foreground, +% as shown on Fig.~\ref{fig:affectedfgcolor}. +% +% \begin{figure} +% \centering +% \begin{minipage}[t]{0.4\linewidth} +% \centering +% \begin{pspicture}(2,2) +% \def\affectedbgcolor{blue} +% \expandafter\pscircle\expandafter[\affectedstyle](1,1){1} +% \end{pspicture}\leavevmode\\ +% \small +% |\def\affectedbgcolor{%|\\ +% |blue}| +% \end{minipage} +% \begin{minipage}[t]{0.4\linewidth} +% \centering +% \begin{pspicture}(2,2) +% \def\affectedstyle{fillstyle=hlines, hatchcolor=\affectedbgcolor} +% \expandafter\pscircle\expandafter[\affectedstyle](1,1){1} +% \end{pspicture}\leavevmode\\ +% \small +% |\def\affectedstyle{fillstyle=%|\\ +% |hlines,hatchcolor=\affectedbgcolor}| +% \end{minipage} +% \caption{Setting Style of Affected Individuals} +% \label{fig:affectedstyle} +% \end{figure} +% +% \begin{figure} +% \centering +% \begin{minipage}[t]{0.4\linewidth} +% \centering +% \begin{pspicture}(2,2) +% \expandafter\pscircle\expandafter[\affectedstyle](1,1){1} +% \rput(1,1){\expandafter\textcolor\expandafter{% +% \affectedfgcolor}{\Huge 2}} +% \end{pspicture}\leavevmode\\ +% \small +% default +% \end{minipage} +% \begin{minipage}[t]{0.4\linewidth} +% \centering +% \begin{pspicture}(2,2) +% \def\affectedfgcolor{green} +% \expandafter\pscircle\expandafter[\affectedstyle](1,1){1} +% \rput(1,1){\expandafter\textcolor\expandafter{% +% \affectedfgcolor}{\Huge 2}} +% \end{pspicture} +% \small +% |\def\affectedfgcolor{green}| +% \end{minipage} +% \caption{Use of Foreground Colors for Affected Individuals } +% \label{fig:affectedfgcolor} +% \end{figure} +% +% +%\subsection{Node Drawing Commands} +%\label{sec:node_commands} +% +% +% The node drawing commands are based on the |\pnode| commands from +% |PSTricks|~\cite[Part~VII]{PSTricks93}. It is the preferred command +% for drawing, for example, a ``marriage node'' (see the examples +% below). It is useful to remember this when drawing complex +% pedigrees. +% +% +%\subsubsection{One Person} +%\label{sec:person} +% +% \DescribeMacro{\pstPerson} The main command in the package is +% |\pstPerson|. It draws one person, which is a |PSTricks| node. It +% has the following structure: |\pstPerson|\oarg{options}\marg{id}. +% The parameter \meta{id} is the name of the node. It can be used to +% make connections to the node (see below). +% +% There are many options to this command. As other |PSTricks| +% options, the also can be set globally through |\psset| command. +% +% +% \DescribeOptions{sex,condition,deceased,proband,adopted,evaluated} +% The first group of options describes the state of the person: sex, +% condition with respect to the decease, whether the person is +% deceased, is a proband, was adopted and was evaluated. These +% options are listed in Table~\ref{tab:person_state_opts}. Some +% options of this group can take only two values: |true| or |false|. +% For simplicity the clause |=true| can be omitted, so the clauses +% |adopted=true| and |adopted| are equivalent. Two options: |sex| and +% |condition| can take several values each (geneticians consider three +% possibilities for sex: |male|, |female| and |unknown|). Again for +% simplicity the clauses |sex=| and |condition=| can be omitted, so +% the invocations |sex=male| and |male| are equivalent, as well as +% |condition=asymptomatic| and |asymptomatic|. +% +% \DescribeOptions{insidetext,abovetext,belowtext,lefttext,righttext} +% The second group of options (Table~\ref{tab:person_text_opts}) is +% used to putting text comments inside the symbol, above it, below it +% or to the right or left to it. The text will be typeset in a +% |PSTricks| LR-box~\cite{PSTricks93}; additional control over the +% text position can be achieved by using |\parbox| or \PlainTeX{} +% boxes. +% +% \DescribeOptions{abovetextrp,belowtextrp,lefttextrp,righttextrp} +% The third group of options (Table~\ref{tab:person_text_rp_opts}) is +% used to set the text position with respect to the node. They set +% the reference point of the text. They correspond to the usual +% notation: |r| being right, |l| being left, |t| being top, |b| being +% bottom and |B| being baseline. The setting |={}| makes the +% reference point to be the center of the box. Note that to prevent +% the text above and below the symbol to clash with the descent lines, +% the spaces of |2\pslinewidth| are added to the right and to the left +% of the symbol. +% +% Examples of usage of this command are shown in +% Table~\ref{tab:pstPerson}. +% +% +% \begin{table} +% \centering +% \begin{tabular}{l>{\raggedright\obeylines +% }p{0.3\linewidth}lp{0.3\linewidth}} +% \hline +% Option & Values & Default & Description \\ +% \hline +% |sex| & |male|, |female|, |unknown| & |unknown| & Sex of the +% person\\ +% |condition| & |normal|, |obligatory|, |asymptomatic|, |affected| +% & |normal| & The condition of the person\\ +% |deceased| & |true|, |false| & |false| & Whether the person is +% deceased \\ +% |proband| & |true|, |false| & |false| & Whether the person is a +% proband\\ +% |adopted| & |true|, |false| & |false| & Whether the individual +% is adopted \\ +% |evaluated| & |true|, |false| & |false| & Whether a documented +% evaluation took place\\ +% \hline +% \end{tabular} +% \caption{Options Showing State of a Person} +% \label{tab:person_state_opts} +% \end{table} +% +% +% +% \begin{table} +% \centering +% \begin{tabular}{l>{\raggedright\obeylines +% }llp{0.5\linewidth}} +% \hline +% Option & Values & Default & Description \\ +% \hline +% |insidetext| & String & None & A text to be placed inside the +% symbol (number of individuals, pregnancy, etc.)\\ +% |abovetext| & String & None & A text to be placed above the +% symbol (name, number, etc.)\\ +% |belowtext| & String & None & A text to be placed below the +% symbol (name, number, etc.)\\ +% |lefttext| & String & None & A text to be placed to the left of the +% symbol (name, number, etc.)\\ +% |righttext| & String & None & A text to be placed to the right of the +% symbol (name, number, etc.)\\ +% \hline +% \end{tabular} +% \caption{Options for Making Textual Comments} +% \label{tab:person_text_opts} +% \end{table} +% +% \begin{table} +% \centering +% \begin{tabular}{l>{\raggedright\obeylines +% }p{0.25\linewidth}lp{0.35\linewidth}} +% \hline +% Option & Values & Default & Description \\ +% \hline +% |abovetextrp| & Combination of |r| or |l| and |t|, |b| or |B| & +% |lB| & The reference point for the text above the symbol\\ +% |belowtextrp| & Combination of |r| or |l| and |t|, |b| or |B| & +% |lt| & The reference point for the text below the symbol\\ +% |lefttextrp| & Combination of |r| or |l| and |t|, |b| or |B| & +% |r| & The reference point for the text to the left the symbol\\ +% |righttextrp| & Combination of |r| or |l| and |t|, |b| or |B| & +% |l| & The reference point for the text to the right the symbol\\ +% \hline +% \end{tabular} +% \caption{Options for Setting Text Reference Point} +% \label{tab:person_text_rp_opts} +% \end{table} +% +% +% \begin{table} +% \centering +% \def\arraystretch{1.5} +% \begin{tabular}{>{\tt\bslash pstPerson[}p{0.6\textwidth}<{]\{P\}}c} +% \hline +% \multicolumn{1}{l}{Command} & Result\rule{0.5cm}{0cm}\\ +% \hline +% condition=asymptomatic & +% \pstPerson[condition=asymptomatic]{A} \\ +% condition=affected, sex=male, evaluated & +% \pstPerson[condition=affected,sex=male, evaluated]{A} \\ +% obligatory, female & +% \pstPerson[obligatory, female]{A} \\ +% asymptomatic, male, proband & +% \pstPerson[asymptomatic, male, proband]{A} \\ +% condition=obligatory, sex=male, deceased & +% \pstPerson[condition=obligatory, sex=male, deceased]{A} \\ +% sex=female, adopted, condition=affected, abovetext=Jane & +% \pstPerson[sex=female, adopted, condition=affected, +% abovetext=Jane]{A} \\ +% sex=male, condition=affected, belowtext=20 yr, deceased & +% \pstPerson[sex=male, condition=affected, deceased, +% belowtext=20 yr]{A} \\[5ex] +% unknown, affected, righttext=\bslash +% parbox\{1cm\}\{\bslash footnotesize A \bslash\bslash 1 w\} & +% \pstPerson[unknown, affected, +% righttext=\parbox{1cm}{\footnotesize A\\1 w}]{A} \\ +% sex=male, insidetex=5 & +% \pstPerson[sex=male, insidetext=5]{A}\\ +% sex=female, condition=affected, insidetext=P & +% \pstPerson[sex=female, condition=affected, insidetext=P]{A}\\ +% sex=female, affected, belowtext=\bslash +% parbox\{1cm\}\{\bslash centering SB\bslash\bslash 2wks\}, deceased & +% \pstPerson[sex=female, affected, deceased, +% belowtext=\parbox{1cm}{\centering SB\\ 2wks}]{A} \\[7ex] +% \hline +% \end{tabular} +% \caption{Examples of Persons} +% \label{tab:pstPerson} +% \end{table} +% +% +%\subsubsection{Pregnancy Not Carried To Term} +%\label{sec:abortion} +% +% \DescribeMacro{\pstAbortion} +% The command |\pstAbortion| is used to draw a pregnancy not carried +% to term: spontaneous abortions or terminated pregnancies. The +% format of it the same as for the command |\pstPerson| (see +% Section~\ref{sec:person}): |\pstAbortion|\oarg{options}\marg{id}. +% However, many of options listed in Table~\ref{tab:person_state_opts} are +% silently ignored. The only options meaningful for these nodes are +% |sex| and |condition| (only |normal| and |affected| values are +% possible). All options listed in Table~\ref{tab:person_text_opts} +% and \ref{tab:person_text_rp_opts} are valid and have the same +% meaning as in Section~\ref{sec:person}. +% +% \DescribeOption{sab} +% The command has also an option |sab| with the values |true| or +% |false|. If it is |true|, the pregnancy is a spontaneous abortion. +% Otherwise it is terminated. Examples of usage of this command are +% shown in Table~\ref{tab:abortions}. +% +% +% \begin{table} +% \centering +% \def\arraystretch{2} +% \begin{tabular}{>{\tt\bslash pstAbortion[}p{0.6\textwidth}<{]\{A\}}c} +% \hline +% \multicolumn{1}{l}{Command} & Symbol\\ +% \hline +% belowtext=male & \rule{0cm}{1cm} \pstAbortion[belowtext=male]{A}\\ +% sab, righttext=1w & \pstAbortion[sab, righttext=1w]{A}\\ +% affected & \pstAbortion[affected]{A}\\ +% \hline +% \end{tabular} +% \caption{Examples of Abortion Symbols} +% \label{tab:abortions} +% \end{table} +% +%\subsubsection{Childlessness and Infertility} +%\label{sec:childness} +% +% The symbols for childlessness and infertility are listed under +% ``line definitions'' in~\cite{PedigreeNomenclature95}. However, to +% make the placing the symbols on the chart more flexible, we assign +% nodes to them. +% +% \DescribeMacro{\pstChildless} +% The command for drawing these symbols +% has the same structure as the other node drawing commands: +% |\pstChildless}|\oarg{options}\marg{id}. +% While all options listed in Table~\ref{tab:pstPerson} are valid, the +% only meaningful one is |belowtext|. Note that the option +% |belowtextrp| is silently ignored: the text is always centered +% below the infertility symbol. +% +% \DescribeOption{infertile} +% There is one additional option +% |infertile|, which can have values |true| of |false|. If it is +% |false|, the person (or relationship) is childless by choice (or by +% an unknown reason). The clause |=true| can be omitted. +% +% +% \begin{table} +% \centering +% \def\arraystretch{2} +% \begin{tabular}{>{\tt\bslash pstChildless[}p{0.6\textwidth}<{]\{C\}}c} +% \hline +% \multicolumn{1}{l}{Command} & Symbol\rule{0.5cm}{0cm}\\ +% \hline +% belowtext=vasectomy & +% \pstChildless[belowtext=vasectomy]{A}\\ +% belowtext=anospermia, infertile & +% \pstChildless[belowtext=anospermia, infertile]{A}\\ +% \hline +% \end{tabular} +% \caption{Examples of Childlessness or Infertility Symbols} +% \label{tab:childness} +% \end{table} +% +% +% +%\subsection{Connection Drawing Commands} +%\label{sec:lines} +% +% The connections in pedigrees are based on |\ncline| and friends. +% There are, however, some additional features for pedigree +% connections. +% +% +%\subsubsection{Relationship} +%\label{sec:relationship} +% +%\DescribeMacro{\pstRelationship} +% Relationships are marriages or other unions. The main command for +% drawing relationships is +% |\pstRelationship|\oarg{options}\marg{nodeA}\marg{nodeB}. It draws +% a relationship line between \marg{nodeA} and \marg{nodeB}. Normal +% |PSTricks| options like |linestyle=dashed| can be used with the +% expected effect. +% +% \DescribeOptions{broken,consanguinic,descentnode,brokenpos,descentnodepos,rellinecmd} +% There are also several options specific for this command, listed in +% Table~\ref{tab:relationship_opts}. The options |broken| and +% |consanguinic| are self-explanatory. The option |descentnode| is +% used, if we want the descent lines to start at a node on the +% relationship line. The name of this descent node must satisfy the +% usual criteria for the node (see Section~\ref{sec:intro}). The +% options |brokenpos| and |descentnodepos| determine, where on the +% relationship line the corresponding objects are placed. The option +% |rellinecmd| allows to change the default straight line for the +% relationship to something else, like |ncbar|, |ncangle|, etc. +% Examples of this command use are shown in +% Table~\ref{tab:pstRelationship} +% +% +% +% \begin{table} +% \centering +% \begin{tabular}{l>{\raggedright\obeylines +% }p{0.2\linewidth}lp{0.3\linewidth}} +% \hline +% Option & Values & Default & Description \\ +% \hline +% |broken| & |true|, |false| & |false| & Whether the +% relationship no longer exists\\ +% |consanguinic| & |true|, |false| & |false| & Whether the +% relationship is consanguinic\\ +% |descentnode| & Node name & None & A node that will be used +% to draw descent lines for the relationship \\ +% |brokenpos| & A number between 0 and 1 & 0.3 & Where to put the +% symbol for broken relationship on the line (as a fraction of the +% line length)\\ +% |descentnodepos| & A number & 0.5 & Where +% to put the the descent node on the relationship line\\ +% |rellinecmd| & Name & |ncline| & Name of the line drawing +% command (without \textbackslash)\\ +% \hline +% \end{tabular} +% \caption{Options for Relationship Lines} +% \label{tab:relationship_opts} +% \end{table} +% +% \begin{table} +% \centering +% \def\arraystretch{1.5} +% \begin{tabular}{>{\tt\raggedright\obeylines }b{0.6\textwidth}c} +% \hline +% \multicolumn{1}{l}{Command} & Result\\ +% \hline +% \bslash rput(0.5,0.5)\{\bslash pstPerson[male]\{A\}\} +% \bslash rput(2.5,0.5)\{\bslash pstPerson[female]\{B\}\} +% \bslash pstRelationship[broken]\{A\}\{B\} +% & +% \begin{pspicture}[shift=-1](3,1) +% \rput(0.5,0.5){\pstPerson[male]{A}} +% \rput(2.5,0.5){\pstPerson[female]{B}} +% \pstRelationship[broken]{A}{B} +% \end{pspicture}\\ +% \bslash rput(0.5,0.5)\{\bslash pstPerson[male]\{A\}\} +% \bslash rput(2.5,0.5)\{\bslash pstPerson[female]\{B\}\} +% \bslash pstRelationship[consanguinic]\{A\}\{B\} +% & +% \begin{pspicture}[shift=-1](3,1) +% \rput(0.5,0.5){\pstPerson[male]{A}} +% \rput(2.5,0.5){\pstPerson[female]{B}} +% \pstRelationship[consanguinic]{A}{B} +% \end{pspicture}\\ +% \bslash rput(0.5,1.5)\{\bslash pstPerson[male]\{A\}\} +% \bslash rput(2.5,1.5)\{\bslash pstPerson[female]\{B\}\} +% \bslash rput(1.5,0.5)\{\bslash pstPerson[female]\{C\}\} +% \bslash pstRelationship[descentnode=AB]\{A\}\{B\} +% \bslash ncline\{AB\}\{C\} +% & +% \begin{pspicture}[shift=-1](3,2) +% \rput(0.5,1.5){\pstPerson[male]{A}} +% \rput(2.5,1.5){\pstPerson[female]{B}} +% \rput(1.5,0.5){\pstPerson[female]{C}} +% \pstRelationship[descentnode=AB]{A}{B} +% \ncline{AB}{C} +% \end{pspicture}\\ +% \bslash rput(0.5,1.5)\{\bslash +% pstPerson[male, belowtext=1-1]\{A\}\} +% \bslash rput(2.5,1.5)\{\bslash +% pstPerson[affected, female, belowtext=1-2]\{B\}\} +% \bslash rput(1.5,0.6)\{\bslash pstPerson[male, +% belowtext=2-1]\{C\}\} +% \bslash pstRelationship[descentnode=AB, rellinecmd=ncangle, +% angleA=90, angleB=90, descentnodepos=1.5, +% broken, brokenpos=1.2]\{A\}\{B\} +% \bslash ncline\{AB\}\{C\} +% & +% \begin{pspicture}[shift=-1](3,3) +% \rput(0.5,1.5){\pstPerson[male,belowtext=1-1]{A}} +% \rput(2.5,1.5){\pstPerson[affected,female, belowtext=1-2]{B}} +% \rput(1.5,0.6){\pstPerson[male, belowtext=2-1]{C}} +% \pstRelationship[descentnode=AB, rellinecmd=ncangle, +% angleA=90, angleB=90, descentnodepos=1.5, +% broken, brokenpos=1.2]{A}{B} +% \ncline{AB}{C} +% \end{pspicture}\\ +% \hline +% \end{tabular} +% \caption{Examples of Relationships} +% \label{tab:pstRelationship} +% \end{table} +% +% +%\subsubsection{Descent} +%\label{sec:pstDescent} +% +% \changes{v0.3}{2007/06/24}{Added option descarmA} +% The paper~\cite{PedigreeNomenclature95} distinguishes between +% descent line and sibs line. We, however, will call all segments of +% the line, joining a parent (or a descent node) and a child, the +% descent line. \DescribeMacro{\pstDescent} The main command for +% showing parent-child relations is +% |\pstDescent|\oarg{options}\marg{Parent}\marg{Child}. +% \DescribeOption{descarmA} +% \marginpar{New in v0.3} +% The descent line consists of three segments: the vertical arm from the +% parent node, the vertical arm from the child node and the +% horizontal segment connecting these arms. When there are several +% sibs, the horizontal segments form the sibs line. The length +% |descarmA| is the length of the first segment. By default it is 0.8 +% (in |PSTricks| units), but it can be changed by the usual |\psset| +% command or in the option list of |\pstDescent|. Note that it is +% calculated from the center of the node rather than from the node +% edge. +% +% Examples of |\pstDescent| are shown in Table~\ref{tab:pstDescent}. +% Note the |PSTricks| option |linestyle=dashed| used to show social +% parentage in the first example. +% +% +% +% \begin{table} +% \centering +% \def\arraystretch{1.5} +% \begin{tabular}{>{\tt\raggedright\obeylines }b{0.6\textwidth}c} +% \hline +% \multicolumn{1}{l}{Command} & Result\\ +% \hline +% \bslash rput(1.5,2)\{\bslash pstPerson[female]\{A\}\} +% \bslash rput(0.5,0.5)\{\bslash pstPerson[female, adopted]\{B\}\} +% \bslash rput(1.5,0.5)\{\bslash pstPerson[male]\{C\}\} +% \bslash rput(2.5,0.5)\{\bslash pstAbortion[female]\{D\}\} +% \bslash pstDescent[linestyle=dashed]\{A\}\{B\} +% \bslash pstDescent\{A\}\{C\} +% \bslash pstDescent\{A\}\{D\} +% & +% \begin{pspicture}[shift=-1](3,2.5) +% \rput(1.5,2){\pstPerson[female]{A}} +% \rput(0.5,0.5){\pstPerson[female, adopted]{B}} +% \rput(1.5,0.5){\pstPerson[male]{C}} +% \rput(2.5,0.5){\pstAbortion[female]{D}} +% \pstDescent[linestyle=dashed]{A}{B} +% \pstDescent{A}{C} +% \pstDescent{A}{D} +% \end{pspicture}\\ +% \bslash psset\{descarmA=1\} +% \bslash rput(0.5,2)\{\bslash pstPerson[male, belowtext=Fred]\{A\}\} +% \bslash rput(2.5,2)\{\bslash pstPerson[female, obligatory, belowtext=Ginger]\{B\}\} +% \bslash pstRelationship[descentnode=AB]\{A\}\{B\} +% \bslash rput(0.5,0.5)\{\bslash pstPerson[male,asymptomatic, belowtext=John]\{C1\}\} +% \bslash rput(1.5,0.5)\{\bslash pstPerson[female, belowtext=Mary]\{C2\}\} +% \bslash rput(2.5,0.5)\{\bslash pstAbortion[sab, affected, belowtext=male]\{C3\}\} +% \bslash pstDescent\{AB\}\{C1\} +% \bslash pstDescent\{AB\}\{C2\} +% \bslash pstDescent\{AB\}\{C3\} +% & +% \begin{pspicture}[shift=-1](0,-0.2)(3.5,2.5) +% \psset{descarmA=1} +% \rput(0.5,2){\pstPerson[male, belowtext=Fred]{A}} +% \rput(2.5,2){\pstPerson[female, obligatory, belowtext=Ginger]{B}} +% \pstRelationship[descentnode=AB]{A}{B} +% \rput(0.5,0.5){\pstPerson[male,asymptomatic, belowtext=John]{C1}} +% \rput(1.5,0.5){\pstPerson[female, belowtext=Mary]{C2}} +% \rput(2.5,0.5){\pstAbortion[sab, affected, belowtext=male]{C3}} +% \pstDescent{AB}{C1} +% \pstDescent{AB}{C2} +% \pstDescent{AB}{C3} +% \end{pspicture}\\ +% \bslash rput(0.5,1.5)\{\bslash pstPerson[male]\{A\}\} +% \bslash rput(2.5,1.5)\{\bslash pstPerson[female]\{B\}\} +% \bslash pstRelationship[descentnode=AB]\{A\}\{B\} +% \bslash rput(1.5,0.5)\{\bslash pstChildless[infertile, belowtext=anospermia]\{C\}\} +% \bslash pstDescent\{AB\}\{C\} +% & +% \begin{pspicture}[shift=-1](0,-0.2)(3,2) +% \rput(0.5,1.5){\pstPerson[male]{A}} +% \rput(2.5,1.5){\pstPerson[female]{B}} +% \pstRelationship[descentnode=AB]{A}{B} +% \rput(1.5,0.5){\pstChildless[belowtext=anospermia, infertile]{C}} +% \pstDescent{AB}{C} +% \end{pspicture}\\ +% \hline +% \end{tabular} +% \caption{Examples of Descent Lines} +% \label{tab:pstDescent} +% \end{table} +% +% +%\subsubsection{Twins} +%\label{sec:pstTwins} +% +% +% +% \DescribeMacro{\pstTwins} A special care is needed when we talk +% about twins. First, the user must define a \emph{twin node}: the +% node which is used as a nexus for twin lines. Then the following +% command draws all the necessary +% lines: \\ +% |\pstTwins|\oarg{options}\marg{Parent}\marg{TwinNode}\marg{LeftTwin}\marg{RightTwin}. +% +% \DescribeOptions{monozygotic,qzygotic,mzlinepos,addtwin} +% The options for this command are listed in +% Table~\ref{tab:twin_opts}. The option |monozygotic| allows to show +% that the twins are monozygotic. The actual position of the +% horizontal line is determined by the option |mzlinepos|. If it is +% unknown, whether the twins are monozygotic or not, |qzygotic| +% options draws a question mark, as recommended +% by~\cite{PedigreeNomenclature95}. Note that |mzlinepos| in this +% situation helps to position the question mark properly. The option +% |addtwin| allows to draw pedigrees with more than two twins. It can +% be repeated several times if necessary. Examples of the usage of +% this command are shown in Table~\ref{tab:pstTwins}. +% +% \DescribeOption{descarmA} +% The first part of the |pstTwins| line has the same shape as +% |\pstDescent|. The option |descarmA| has the same meaning, as for +% |\pstDescent|. Therefore if there are both twins and non-twins, as +% in the first example in Table~\ref{tab:pstTwins}, the sibs segment +% is drawn correctly. +% +% \begin{table} +% \centering +% \begin{tabular}{l>{\raggedright\obeylines +% }p{0.2\linewidth}lp{0.3\linewidth}} +% \hline +% Option & Values & Default & Description \\ +% \hline +% |monozygotic| & |true|, |false| & |false| & Whether the twins +% are monozygotic\\ +% |qzygotic| & |true|, |false| & |false| & Whether the +% monozygoticity of twins is questionable\\ +% |addtwin| & Twin node & Node & Additional twin node id if +% there are more than two twins (this +% option may be repeated)\\ +% |mzlinepos| & A number & 0.5 & Where to put the horizontal +% line for monozygotic twins (as a factor of the total line length)\\ +% \hline +% \end{tabular} +% \caption{Options for Twins Lines} +% \label{tab:twin_opts} +% \end{table} +% +% +% \begin{table} +% \centering +% \def\arraystretch{1.5} +% \begin{tabular}{>{\tt\raggedright\obeylines }b{0.6\textwidth}c} +% \hline +% \multicolumn{1}{l}{Command} & Result\\ +% \hline +% \bslash rput(1.5,2)\{\bslash pstPerson[female]\{A\}\} +% \bslash rput(1,1.1)\{\bslash pnode\{Twins\}\} +% \bslash rput(0.5,0.5)\{\bslash pstPerson[male]\{B\}\} +% \bslash rput(1.5,0.5)\{\bslash pstPerson[male]\{C\}\} +% \bslash rput(2.5,0.5)\{\bslash pstPerson[female]\{D\}\} +% \bslash pstTwins[monozygotic]\{A\}\{Twins\}\{B\}\{C\} +% \bslash pstDescent\{A\}\{D\} +% & +% \begin{pspicture}(3,2.5) +% \rput(1.5,2){\pstPerson[female]{A}} +% \rput(1,1.1){\pnode{Twins}} +% \rput(0.5,0.5){\pstPerson[male]{B}} +% \rput(1.5,0.5){\pstPerson[male]{C}} +% \rput(2.5,0.5){\pstPerson[female]{D}} +% \pstTwins[monozygotic]{A}{Twins}{B}{C} +% \pstDescent{A}{D} +% \end{pspicture}\\ +% \bslash rput(0.5,2)\{\bslash pstPerson[male]\{A\}\} +% \bslash rput(2.5,2)\{\bslash pstPerson[female]\{B\}\} +% \bslash pstRelationship[descentnode=AB]\{A\}\{B\} +% \bslash rput(1.5,1.2)\{\bslash pnode\{Twins\}\} +% \bslash rput(1,0.5)\{\bslash pstPerson[male]\{C1\}\} +% \bslash rput(2,0.5)\{\bslash pstPerson[male]\{C2\}\} +% \bslash pstTwins[qzygotic, mzlinepos=0.8]\{AB\}\{Twins\}\{C1\}\{C2\} +% & +% \begin{pspicture}(3,2.5) +% \rput(0.5,2){\pstPerson[male]{A}} +% \rput(2.5,2){\pstPerson[female]{B}} +% \pstRelationship[descentnode=AB]{A}{B} +% \rput(1.5,1.2){\pnode{Twins}} +% \rput(1,0.5){\pstPerson[male]{C1}} +% \rput(2,0.5){\pstPerson[male]{C2}} +% \pstTwins[qzygotic, mzlinepos=0.8]{AB}{Twins}{C1}{C2} +% \end{pspicture}\\ +% \bslash rput(1.5,2)\{\bslash pstPerson[male]\{A\}\} +% \bslash rput(1.5,1.5)\{\bslash pnode\{Twins\}\} +% \bslash rput(0.5,0.5)\{\bslash pstPerson[female]\{B\}\} +% \bslash rput(1.2,0.5)\{\bslash pstPerson[female]\{C\}\} +% \bslash rput(1.9,0.5)\{\bslash pstPerson[female]\{D\}\} +% \bslash rput(2.6,0.5)\{\bslash pstPerson[female]\{E\}\} +% \bslash pstTwins[descarmA=0.5, +% addtwin=C, addtwin=D]\{A\}\{Twins\}\{B\}\{E\} +% & +% \begin{pspicture}(3,2.5) +% \rput(1.5,2){\pstPerson[male]{A}} +% \rput(1.5,1.5){\pnode{Twins}} +% \rput(0.5,0.5){\pstPerson[female]{B}} +% \rput(1.2,0.5){\pstPerson[female]{C}} +% \rput(1.9,0.5){\pstPerson[female]{D}} +% \rput(2.6,0.5){\pstPerson[female]{E}} +% \pstTwins[descarmA=0.5, addtwin=C, addtwin=D]{A}{Twins}{B}{E} +% \end{pspicture}\\ +% \hline +% \end{tabular} +% \caption{Examples of Twins Lines} +% \label{tab:pstTwins} +% \end{table} +% +% +% +%\subsection{Making Trees} +%\label{sec:trees} +% +% As discussed above (Section~\ref{sec:intro}), the medical pedigrees +% are not necessary trees. Even if they are, they are usually not +% simple layered trees. Nevertheless sometimes pedigree can be +% represented as a layered tree. For such cases we provide tree +% drawing commands. See the discussion in~\cite{pedigree-perl} for +% more details. +% +% \DescribeMacro{\TpstPerson} +% \DescribeMacro{\TpstAbortion} +% \DescribeMacro{\TpstChildless} +% The macros |\TpstPerson|, |\TpstAbortion| and |\TpstChildless| have +% the same options and arguments as their ``normal'' counterparts. You +% probably need to use command like +% \begin{verbatim} +% \def\psedge{\pstDescent} +% \psset{descarmA=1} +% \end{verbatim} +% in your code. An example of us of such commands is shown on +% Figure~\ref{fig:example_tree}. Note that the resulting figure is +% \emph{not} a tree! The corresponding code is shown on +% Figure~\ref{fig:example_tree_code}. +% +% \begin{figure} +% \centering +% \begin{pspicture}(0,1)(7,7) +% \rput(3,4){% +% \pstree{\TpstPerson[female, obligatory, belowtext=Ann]{Ann}}{% +% \def\psedge{\pstDescent}\psset{descarmA=1} +% \pstree{\TpstPerson[male, affected, belowtext=John]{John}}{% +% \TpstPerson[female, belowtext=Sue]{Sue} +% \TpstPerson[male, belowtext=Paul]{Paul} +% \TpstAbortion[affected, belowtext=male]{A1} +% \pstree[thislevelsep=1.2]{\TpstPerson[male, +% belowtext=Peter, affected, proband]{Peter}}{% +% \def\psedge{\ncline} +% \TpstChildless[infertile]{C1} +% } +% } +% \pstree{\TpstPerson[female, belowtext=Mary]{Mary}}{ +% \TpstPerson[female, belowtext=Joan]{Joan} +% } +% } +% } +% \pstRelationship[consanguinic]{Peter}{Joan} +% \end{pspicture} +% \caption{Example of Using Tree-Making Commands} +% \label{fig:example_tree} +% \end{figure} +% +% \begin{figure} +% \centering +% \begin{verbatim} +% \begin{pspicture}(0,1)(7,7) +% \rput(3,4){% +% \pstree{\TpstPerson[female, obligatory, belowtext=Ann]{Ann}}{% +% \def\psedge{\pstDescent}\psset{descarmA=1} +% \pstree{\TpstPerson[male, affected, belowtext=John]{John}}{% +% \TpstPerson[female, belowtext=Sue]{Sue} +% \TpstPerson[male, belowtext=Paul]{Paul} +% \TpstAbortion[affected, belowtext=male]{A1} +% \pstree[thislevelsep=1.2]{\TpstPerson[male, +% belowtext=Peter, affected, proband]{Peter}}{% +% \def\psedge{\ncline} +% \TpstChildless[infertile]{C1} +% } +% } +% \pstree{\TpstPerson[female, belowtext=Mary]{Mary}}{ +% \TpstPerson[female, belowtext=Joan]{Joan} +% } +% } +% } +% \pstRelationship[consanguinic]{Peter}{Joan} +% \end{pspicture} +% \end{verbatim} +% \caption{Code Producing Figure~\ref{fig:example_tree}} +% \label{fig:example_tree_code} +% \end{figure} +% +% +% +%\subsection{More Examples} +%\label{sec:examples} +% +% A number of examples were listed above. Here we show even more +% examples of complex pedigrees. +% +% On Figure~\ref{fig:example_PROMM} we show an example of a pedigree +% from~\cite{Harper01:MDBook}. The corresponding code is listed on +% Figure~\ref{fig:example_PROMM_code}. +% +% \begin{figure} +% \centering +% \begin{pspicture}(6,6) +% \psset{belowtextrp=t, descarmA=1} +% \rput(2.5,5.5){\pstPerson[male, deceased, belowtext=I:1]{I:1}} +% \rput(3.5,5.5){\pstPerson[female, deceased, belowtext=I:2]{I:2}} +% \pstRelationship[descentnode=I:1_2]{I:1}{I:2} +% \rput(1,3.5){\pstPerson[female, affected, belowtext=II:1]{II:1}} +% \pstDescent{I:1_2}{II:1} +% \rput(2,3.5){\pstPerson[male, belowtext=II:2]{II:2}} +% \pstRelationship[descentnode=II:1_2]{II:1}{II:2} +% \rput(3.5,3.5){\pstPerson[male, affected, belowtext=II:3]{II:3}} +% \pstDescent{I:1_2}{II:3} +% \rput(4.5,3.5){\pstPerson[female, belowtext=II:4]{II:4}} +% \pstRelationship[descentnode=II:3_4]{II:3}{II:4} +% \rput(5.5,3.5){\pstPerson[female, affected, deceased, proband, +% belowtext=II:5]{II:5}} +% \pstDescent{I:1_2}{II:5} +% \rput(0.5,1.5){\pstPerson[female, belowtext=III:1]{III:1}} +% \pstDescent{II:1_2}{III:1} +% \rput(1.5,1.5){\pstPerson[female, belowtext=III:2]{III:2}} +% \pstDescent{II:1_2}{III:2} +% \rput(2.5,1.5){\pstPerson[female, deceased, +% belowtext=\parbox{2cm}{\centering III:3\\4/52}]{III:3}} +% \pstDescent{II:1_2}{III:3} +% \rput(3.5,1.5){\pstPerson[female, affected, +% belowtext=III:4]{III:4}} +% \pstDescent{II:3_4}{III:4} +% \rput(4.5,1.5){\pstPerson[male, insidetext=?, +% belowtext=III:5]{III:5}} +% \pstDescent{II:3_4}{III:5} +% \end{pspicture} +% \caption{Example of a Pedigree of a Family With PROMM +% From~\cite[p.~48]{Harper01:MDBook}} +% \label{fig:example_PROMM} +% \end{figure} +% +% +% \begin{figure} +% \centering +% \begin{verbatim} +% \begin{pspicture}(6,6) +% \psset{belowtextrp=t, descarmA=1} +% \rput(2.5,5.5){\pstPerson[male, deceased, belowtext=I:1]{I:1}} +% \rput(3.5,5.5){\pstPerson[female, deceased, belowtext=I:2]{I:2}} +% \pstRelationship[descentnode=I:1_2]{I:1}{I:2} +% \rput(1,3.5){\pstPerson[female, affected, belowtext=II:1]{II:1}} +% \pstDescent{I:1_2}{II:1} +% \rput(2,3.5){\pstPerson[male, belowtext=II:2]{II:2}} +% \pstRelationship[descentnode=II:1_2]{II:1}{II:2} +% \rput(3.5,3.5){\pstPerson[male, affected, belowtext=II:3]{II:3}} +% \pstDescent{I:1_2}{II:3} +% \rput(4.5,3.5){\pstPerson[female, belowtext=II:4]{II:4}} +% \pstRelationship[descentnode=II:3_4]{II:3}{II:4} +% \rput(5.5,3.5){\pstPerson[female, affected, deceased, proband, +% belowtext=II:5]{II:5}} +% \pstDescent{I:1_2}{II:5} +% \rput(0.5,1.5){\pstPerson[female, belowtext=III:1]{III:1}} +% \pstDescent{II:1_2}{III:1} +% \rput(1.5,1.5){\pstPerson[female, belowtext=III:2]{III:2}} +% \pstDescent{II:1_2}{III:2} +% \rput(2.5,1.5){\pstPerson[female, deceased, +% belowtext=\parbox{2cm}{\centering III:3\\4/52}]{III:3}} +% \pstDescent{II:1_2}{III:3} +% \rput(3.5,1.5){\pstPerson[female, affected, +% belowtext=III:4]{III:4}} +% \pstDescent{II:3_4}{III:4} +% \rput(4.5,1.5){\pstPerson[male, insidetext=?, +% belowtext=III:5]{III:5}} +% \pstDescent{II:3_4}{III:5} +% \end{pspicture} +% \end{verbatim} +% \caption{Code Producing Figure~\ref{fig:example_PROMM}} +% \label{fig:example_PROMM_code} +% \end{figure} +% +% +% A very complex pedigree is used as an example +% in~\cite{PedigreeNomenclature95}. On +% Figure~\ref{fig:complex_example} we reproduce this pedigree. The +% corresponding code is shown on +% Figures~\ref{fig:complex_example_codeI}, +% \ref{fig:complex_example_codeII} and~\ref{fig:complex_example_codeIII}. +% +% \begin{figure} +% \centering +% \rotatebox{90}{ +% \begin{pspicture}(0.7,0)(21.3,9) +% \psset{descarmA=1.1, hatchsep=1.5pt} +% \rput(3.5,8){Ethnic Background} +% \rput(18.5,8){Ethnic Background} +% \rput(3.5,7.6){\rnode[b]{OType1}{O'Type}} +% \rput(18.5,7.5){\pnode{Origin2}} +% \rput(6.5,7.5){\rnode{Quest1}{?}} +% \rput(1,6.5){\Huge I} +% \rput(1.5,6.5){\pstPerson[male, belowtext=1]{I1}} +% \rput(2.5,6.5){\pstPerson[female, obligatory, belowtext=2]{I2}} +% \rput(3.5,6.5){\pstPerson[male, belowtext=3]{I3}} +% \rput(4.5,6.5){\pstPerson[male, belowtext=4]{I4}} +% \rput(5.5,6.5){\pstPerson[male, belowtext=5]{I5}} +% \rput(6.5,6.5){\pstPerson[female, affected, +% belowtext=6]{I6}} +% \rput(2,7.2){\pnode{Twins1}} +% \rput(4,7.2){\pnode{Twins2}} +% \pstTwins[descarmA=0]{OType1}{Twins1}{I1}{I2} +% \pstTwins[qzygotic, descarmA=0, mzlinepos=0.8]{OType1}{Twins2}{I3}{I4} +% \pstDescent[descarmA=0]{OType1}{I5} +% \pstDescent[descarmA=0]{Quest1}{I6} +% \pstRelationship[descentnode=I5I6]{I5}{I6} +% \rput(1.5,5.5){\pstChildless{CI1}} +% \ncline{I1}{CI1} +% \rput(13.5,6.5){\pstPerson[male, deceased, belowtextrp=t, +% belowtext=\parbox{2cm}{\centering d. 72 y\\7}]{I7}} +% \rput(15.5,6.5){\pstPerson[female, deceased, belowtextrp=t, +% belowtext=\parbox{2cm}{\centering d. 70 y\\8}]{I8}} +% \pstRelationship[descentnode=I7I8]{I7}{I8} +% \rput(21,6.5){\pstPerson[insidetext=5, belowtext=9--14, +% belowtextrp=rt]{I9}} +% \pstDescent[descarmA=0]{Origin2}{I8} +% \pstDescent[descarmA=0]{Origin2}{I9} +% \rput(1,4.5){\Huge II} +% \rput(2.5,4.5){\pstPerson[male, affected, belowtext=1, +% abovetext=Proto, abovetextrp=rB]{II1}} +% \pstDescent{I2}{II1} +% \rput(4.5,4.5){\pstPerson[female, asymptomatic, +% belowtext=\parbox{3cm}{32 y\\ +% $E_3-$\\$E_4+$(45n/18n)\\2}, abovetext={Sterrie}, +% abovetextrp=rB, evaluated]{II2}} +% \pstDescent{I5I6}{II2} +% \pstRelationship[consanguinic, descentnode=II1II2]{II1}{II2} +% \rput(5.5,5.2){\rnode{Quest2}{?}} +% \rput(5.5,4.5){\pstPerson[female, insidetext=D, +% belowtext=3]{II3}} +% \ncline{Quest2}{II3} +% \rput(6.5,5.2){\rnode{Quest3}{?}} +% \rput(6.5,4.5){\pstPerson[male, insidetext=D, +% belowtext=4]{II4}} +% \ncline{Quest3}{II4} +% \rput(7.5,4.5){\pstPerson[female, belowtext=5]{II5}} +% \rput(8.5,4.5){\pstPerson[male, abovetext=Gary, abovetextrp=rB, +% belowtext=\parbox{2cm}{36 y\\$E_3-$\\6}, +% evaluated]{II6}} +% \rput(9.5,4.5){\pstPerson[male, abovetext={Gene}, +% belowtext=\parbox{2cm}{36 y\\$E_3-$\\7}, +% evaluated]{II7}} +% \rput(9,5.2){\pnode{Twins3}} +% \pstTwins[monozygotic]{I5I6}{Twins3}{II6}{II7} +% \pstRelationship{II5}{II6} +% \rput(7.5,5.7){O'Type} +% \rput(11.5,4.5){\pstPerson[female, proband, +% belowtext=\parbox{1cm}{35 y\\8}, abovetext=Feene]{II8}} +% \pstRelationship[descentnode=II7II8]{II7}{II8} +% \rput(13.5,4.5){\pstPerson[male, belowtext=9]{II9}} +% \pstRelationship[broken, descentnode=II8II9, +% descentnodepos=0.85]{II8}{II9} +% \rput(16,4.5){\pstPerson[abovetext=Stacey, female, +% abovetextrp=rB, +% belowtext=\parbox{1cm}{33y\\ 10}]{II10}} +% \def\affectedstyle{fillstyle=crosshatch} +% \rput(17,4.5){\pstPerson[male, affected, abovetext=Sam, +% belowtext=\parbox{3cm}{31 y\\ $E_2+$\\ +% 11}, hatchsep=3pt]{II11}} +% \rput(17,3.6){\pstChildless[infertile]{C2}} +% \ncline{II11}{C2} +% \rput(18,4.5){\pstPerson[male, obligatory, +% abovetext=Donald, +% belowtext=\parbox{3cm}{29 y\\ $E_2+$ \\ +% 12}]{II12}} +% \pstDescent{I7I8}{II8} +% \pstDescent{I7I8}{II10} +% \pstDescent{I7I8}{II11} +% \pstDescent{I7I8}{II12} +% \rput(19,4.5){\pstPerson[female, belowtext=13]{II13}} +% \pstRelationship[descentnode=II12II13]{II12}{II13} +% \rput(20,4.5){\pstPerson[female, insidetext=S, +% belowtext=14]{II14}} +% \rput(21,4.5){\pstPerson[insidetext=n]{II15}} +% \pstDescent{I9}{II15} +% \rput(1,2.5){\Huge III} +% \rput(3,2.5){\pstPerson[male, adopted, belowtext=1]{III1}} +% \rput(4,2.5){\pstPerson[insidetext=P, belowtext=2]{III2}} +% \pstDescent[linestyle=dashed]{II1II2}{III1} +% \pstDescent{II1II2}{III2} +% \ncline{II3}{III2} +% \rput(7.5,2.5){\pstPerson[insidetext=P, +% belowtext=\parbox{2cm}{6 wk\\3}]{III3}} +% \pstDescent{II5}{III3} +% \ncline{II4}{III3} +% \def\affectedstyle{fillstyle=vlines} +% \rput(10,2.5){\pstAbortion[affected, +% belowtext=\parbox{2cm}{\centering +% female\\18wk\\$E_1+$(tri 21)\\4}, +% belowtextrp=t]{III4}} +% \rput(11,2.5){\pstPerson[insidetext=P, +% belowtext=\parbox{1cm}{16wk\\5}]{III5}} +% \pstDescent{II7II8}{III4} +% \pstDescent{II7II8}{III5} +% \rput(12,2.5){\pstAbortion[belowtext=6]{III6}} +% \rput(13,2.5){\pstAbortion[sab, belowtextrp=t, +% belowtext=\parbox{2cm}{\centering female\\19 wk\\ +% 7}]{III7}} +% \rput(14,2.5){\pstPerson[adopted, male, +% belowtext=\parbox{1cm}{10 y\\ 8}]{III8}} +% \pstDescent{II8II9}{III6} +% \pstDescent{II8II9}{III7} +% \pstDescent{II8II9}{III8} +% \ncline[linestyle=dashed]{II10}{III8} +% \rput(15,2.5){\pstAbortion[sab, belowtext=9]{III9}} +% \def\affectedstyle{fillstyle=hlines} +% \rput(16,2.5){\pstAbortion[sab, belowtextrp=t, affected, +% belowtext=\parbox{2cm}{\centering male\\ 20 wk\\ $E_1+$ +% (tri 18)\\ 10}]{III10}} +% \rput(17,2.5){\pstPerson[deceased, female, +% belowtext=\parbox{1cm}{\centering SB\\32 wk\\ +% 11}]{III11}} +% \pstDescent{II10}{III9} +% \pstDescent{II10}{III10} +% \pstDescent{II10}{III11} +% \rput(20,2.5){\pstPerson[insidetext=P, +% belowtext=12]{III12}} +% \pstDescent{II14}{III12} +% \ncline{II12II13}{III12} +% \end{pspicture} +% } +% \caption{A Complex Pedigree From~\cite{PedigreeNomenclature95}} +% \label{fig:complex_example} +% \end{figure} +% +% +% \begin{figure} +% \centering +% \begin{verbatim} +% \psset{descarmA=1.1, hatchsep=1.5pt} +% \rput(3.5,8){Ethnic Background} +% \rput(18.5,8){Ethnic Background} +% \rput(3.5,7.5){\rnode{OType1}{O'Type}} +% \rput(18.5,7.5){\pnode{Origin2}} +% \rput(6.5,7.5){\rnode{Quest1}{?}} +% \rput(1,6.5){\Huge I} +% \rput(1.5,6.5){\pstPerson[male, belowtext=1]{I1}} +% \rput(2.5,6.5){\pstPerson[female, obligatory, belowtext=2]{I2}} +% \rput(3.5,6.5){\pstPerson[male, belowtext=3]{I3}} +% \rput(4.5,6.5){\pstPerson[male, belowtext=4]{I4}} +% \rput(5.5,6.5){\pstPerson[male, belowtext=5]{I5}} +% \rput(6.5,6.5){\pstPerson[female, affected, +% belowtext=6]{I6}} +% \rput(2,7.2){\pnode{Twins1}} +% \rput(4,7.2){\pnode{Twins2}} +% \pstTwins[descarmA=0]{OType1}{Twins1}{I1}{I2} +% \pstTwins[qzygotic, descarmA=0, mzlinepos=0.8]{OType1}{Twins2}{I3}{I4} +% \pstDescent[descarmA=0]{OType1}{I5} +% \pstDescent[descarmA=0]{Quest1}{I6} +% \pstRelationship[descentnode=I5I6]{I5}{I6} +% \rput(1.5,5.5){\pstChildless{CI1}} +% \ncline{I1}{CI1} +% \rput(13.5,6.5){\pstPerson[male, deceased, belowtextrp=t, +% belowtext=\parbox{2cm}{\centering d. 72 y\\7}]{I7}} +% \rput(15.5,6.5){\pstPerson[female, deceased, belowtextrp=t, +% belowtext=\parbox{2cm}{\centering d. 70 y\\8}]{I8}} +% \pstRelationship[descentnode=I7I8]{I7}{I8} +% \rput(21,6.5){\pstPerson[insidetext=5, belowtext=9--14, +% belowtextrp=rt]{I9}} +% \pstDescent[descarmA=0]{Origin2}{I8} +% \pstDescent[descarmA=0]{Origin2}{I9} +% \end{verbatim} +% \caption{Code for Figure~\ref{fig:complex_example}: Generation I} +% \label{fig:complex_example_codeI} +% \end{figure} +% +% \begin{figure} +% \centering +% \begin{verbatim} +% \rput(1,4.5){\Huge II} +% \rput(2.5,4.5){\pstPerson[male, affected, belowtext=1, +% abovetext=Proto, abovetextrp=rB]{II1}} +% \pstDescent{I2}{II1} +% \rput(4.5,4.5){\pstPerson[female, asymptomatic, +% belowtext=\parbox{3cm}{32 y\\ +% $E_3-$\\$E_4+$(45n/18n)\\2}, abovetext={Sterrie}, +% abovetextrp=rB, evaluated]{II2}} +% \pstDescent{I5I6}{II2} +% \pstRelationship[consanguinic, descentnode=II1II2]{II1}{II2} +% \rput(5.5,5.2){\rnode{Quest2}{?}} +% \rput(5.5,4.5){\pstPerson[female, insidetext=D, +% belowtext=3]{II3}} +% \ncline{Quest2}{II3} +% \rput(6.5,5.2){\rnode{Quest3}{?}} +% \rput(6.5,4.5){\pstPerson[male, insidetext=D, +% belowtext=4]{II4}} +% \ncline{Quest3}{II4} +% \rput(7.5,4.5){\pstPerson[female, belowtext=5]{II5}} +% \rput(8.5,4.5){\pstPerson[male, abovetext=Gary, abovetextrp=rB, +% belowtext=\parbox{2cm}{36 y\\$E_3-$\\6}, +% evaluated]{II6}} +% \rput(9.5,4.5){\pstPerson[male, abovetext={Gene}, +% belowtext=\parbox{2cm}{36 y\\$E_3-$\\7}, +% evaluated]{II7}} +% \rput(9,5.2){\pnode{Twins3}} +% \pstTwins[monozygotic]{I5I6}{Twins3}{II6}{II7} +% \pstRelationship{II5}{II6} +% \rput(7.5,5.7){O'Type} +% \rput(11.5,4.5){\pstPerson[female, proband, +% belowtext=\parbox{1cm}{35 y\\8}, abovetext=Feene]{II8}} +% \pstRelationship[descentnode=II7II8]{II7}{II8} +% \rput(13.5,4.5){\pstPerson[male, belowtext=9]{II9}} +% \pstRelationship[broken, descentnode=II8II9, +% descentnodepos=0.85]{II8}{II9} +% \rput(16,4.5){\pstPerson[abovetext=Stacey, female, +% abovetextrp=rB, +% belowtext=\parbox{1cm}{33y\\ 10}]{II10}} +% \def\affectedstyle{fillstyle=crosshatch} +% \rput(17,4.5){\pstPerson[male, affected, abovetext=Sam, +% belowtext=\parbox{3cm}{31 y\\ $E_2+$\\ +% 11}, hatchsep=3pt]{II11}} +% \rput(17,3.6){\pstChildless[infertile]{C2}} +% \ncline{II11}{C2} +% \rput(18,4.5){\pstPerson[male, obligatory, +% abovetext=Donald, +% belowtext=\parbox{3cm}{29 y\\ $E_2+$ \\ +% 12}]{II12}} +% \pstDescent{I7I8}{II8} +% \pstDescent{I7I8}{II10} +% \pstDescent{I7I8}{II11} +% \pstDescent{I7I8}{II12} +% \rput(19,4.5){\pstPerson[female, belowtext=13]{II13}} +% \pstRelationship[descentnode=II12II13]{II12}{II13} +% \rput(20,4.5){\pstPerson[female, insidetext=S, +% belowtext=14]{II14}} +% \rput(21,4.5){\pstPerson[insidetext=n]{II15}} +% \pstDescent{I9}{II15} +% \end{verbatim} +% \caption{Code for Figure~\ref{fig:complex_example}: Generation II} +% \label{fig:complex_example_codeII} +% \end{figure} +% +% \begin{figure} +% \centering +% \begin{verbatim} +% \rput(1,2.5){\Huge III} +% \rput(3,2.5){\pstPerson[male, adopted, belowtext=1]{III1}} +% \rput(4,2.5){\pstPerson[insidetext=P, belowtext=2]{III2}} +% \pstDescent[linestyle=dashed]{II1II2}{III1} +% \pstDescent{II1II2}{III2} +% \ncline{II3}{III2} +% \rput(7.5,2.5){\pstPerson[insidetext=P, +% belowtext=\parbox{2cm}{6 wk\\3}]{III3}} +% \pstDescent{II5}{III3} +% \ncline{II4}{III3} +% \def\affectedstyle{fillstyle=vlines} +% \rput(10,2.5){\pstAbortion[affected, +% belowtext=\parbox{2cm}{\centering +% female\\18wk\\$E_1+$(tri 21)\\4}, +% belowtextrp=t]{III4}} +% \rput(11,2.5){\pstPerson[insidetext=P, +% belowtext=\parbox{1cm}{16wk\\5}]{III5}} +% \pstDescent{II7II8}{III4} +% \pstDescent{II7II8}{III5} +% \rput(12,2.5){\pstAbortion[belowtext=6]{III6}} +% \rput(13,2.5){\pstAbortion[sab, belowtextrp=t, +% belowtext=\parbox{2cm}{\centering female\\19 wk\\ +% 7}]{III7}} +% \rput(14,2.5){\pstPerson[adopted, male, +% belowtext=\parbox{1cm}{10 y\\ 8}]{III8}} +% \pstDescent{II8II9}{III6} +% \pstDescent{II8II9}{III7} +% \pstDescent{II8II9}{III8} +% \ncline[linestyle=dashed]{II10}{III8} +% \rput(15,2.5){\pstAbortion[sab, belowtext=9]{III9}} +% \def\affectedstyle{fillstyle=hlines} +% \rput(16,2.5){\pstAbortion[sab, belowtextrp=t, affected, +% belowtext=\parbox{2cm}{\centering male\\ 20 wk\\ $E_1+$ +% (tri 18)\\ 10}]{III10}} +% \rput(17,2.5){\pstPerson[deceased, female, +% belowtext=\parbox{1cm}{\centering SB\\32 wk\\ +% 11}]{III11}} +% \pstDescent{II10}{III9} +% \pstDescent{II10}{III10} +% \pstDescent{II10}{III11} +% \rput(20,2.5){\pstPerson[insidetext=P, +% belowtext=12]{III12}} +% \pstDescent{II14}{III12} +% \ncline{II12II13}{III12} +% \end{verbatim} +% \caption{Code for Figure~\ref{fig:complex_example}: Generation III} +% \label{fig:complex_example_codeIII} +% \end{figure} +%\clearpage +% +% +%\StopEventually{% +% \clearpage +% \section{Acknowledgements} +% The authors are grateful to Herbert Vo\ss{} for help with +% |PSTricks| code. The support of \TeX{} User Group is gratefully +% acknowledged. One of the authors (LA) was supported by Russian +% Foundation for Fundamental Research (travel grant 06-04-58811), +% Russian Federation President Council for Grants Supporting Young +% Scientists and Flagship Science Schools (grant MD-4245.2006.7) +% +% \bibliography{pst-pdgr} +% \bibliographystyle{plain} +%} +% +%\section{Implementation} +%\label{sec:implementation} +% +% +% +%\subsection{Identification and Setting Up} +%\label{sec:identification} +% +% +%Traditionally |PSTricks| works in two regimes: the \LaTeX one and +%the plain one. Probably it is a good idea to keep this +%tradition. Therefore we will use a \TeX{} file \path{pst-pdgr.tex} +%and a \LaTeX file \path{pst-pdgr.sty}. They have different means of +%preserving from loading twice and identification. +% +% \begin{macro}{\PSTPedigreeLoaded} +% A \TeX{} guard |\PSTPedigreeLoaded| prevents the double loading +% of the file: +% \begin{macrocode} +%<*tex> +\csname PSTPedigreeLoaded\endcsname +\let\PSTPedigreeLoaded\endinput +%</tex> +% \end{macrocode} +% \end{macro} +% +%Now we can start real identification. Note the difference between +%the ways a \LaTeX{} style, a \LaTeX{} configuration file and a \TeX{} +%file announce itself +% \begin{macrocode} +%<latex>\NeedsTeXFormat{LaTeX2e} +%<latex>\ProvidesPackage{pst-pdgr} +%<cfg>\ProvidesFile{pst-pdgr.cfg} +%<tex>\message{ +[2017/11/20 v0.4 Medical Pedigree with PSTricks] +%<tex>} +% \end{macrocode} +% +% The \LaTeX{} style is in fact just a wrapper: it calls the +% configuration file, and then the \TeX file, which does the real +% work: +% \begin{macrocode} +%<*latex> +\RequirePackage{pstricks}% +\InputIfFileExists{pst-pdgr.cfg}{% + \typeout{Loading configuration file pst-pdgr.cfg}}{% + \typeout{Configuration file pst-pdgr.cfg is not found}} +\input{pst-pdgr.tex} +%</latex> +% \end{macrocode} +% +% Now we are dealing (almost) exclusively with \TeX. +% \begin{macrocode} +%<*tex> +% \end{macrocode} +% +% Check the packages we use are loaded: +% \begin{macrocode} +\ifx\PSTricksLoaded\endinput\else\input pstricks.tex\fi +\ifx\PSTnodesLoaded\endinput\else\input pst-node.tex\fi +\ifx\PSTreeLoaded\endinput\else\input pst-tree.tex\fi +\ifx\PSTXKeyLoaded\endinput\else\input pst-xkey.tex\fi +% \end{macrocode} +% +% We set up that |@| symbol: +% \begin{macrocode} +\catcode`\@=11\relax +% \end{macrocode} +% and set up keys for our package +% \begin{macrocode} +\pst@addfams{pst-pdgr} +% \end{macrocode} +% +%\subsection{Global Parameters} +%\label{sec:impl_globals} +% +% These macros define the way affected individuals are drawn +% \begin{macro}{\affectedbgcolor} +% The background color: +% \begin{macrocode} +\def\affectedbgcolor{gray} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\affectedfgcolor} +% The foreground color for the text: +% \begin{macrocode} +\def\affectedfgcolor{white} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\affectedstyle} +% And the style: +% \begin{macrocode} +\def\affectedstyle{fillstyle=solid, fillcolor=\affectedbgcolor} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\pst@pdgr@intxtcolor} +% Normally the color of the inside text for normal persons is the +% current color: +% \begin{macrocode} +\def\pst@pdgr@instxtcolor{\relax} +% \end{macrocode} +% \end{macro} +% +% +% +%\subsection{Options} +%\label{sec:impl_opts} +% +% Here we define the option for the commands and their action. +% +% +%\subsubsection{Choice Options} +%\label{sec:impl_choice} +% +% This groups of options sets a key from a given set of choices. +% \begin{macro}{\pst@pdgr@sex} +% First, the sex of the person. The numbers 0, 1 and 2 correspond +% to the sequence in the alternatives list +% \begin{macrocode} +\def\pst@pdgr@sex{0} +\define@choicekey[psset]{pst-pdgr}{sex}[\pst@pdgr@temp \pst@pdgr@sex]{% + unknown,male,female}[unknown]{} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\pst@pdgr@condition} +% Next, the condition of the person. The numbers again correspond +% to the sequence in the alternatives list +% \begin{macrocode} +\def\pst@pdgr@condition{0} +\define@choicekey[psset]{pst-pdgr}{% + condition}[\pst@pdgr@temp \pst@pdgr@condition]{% + normal,obligatory,asymptomatic,affected}[normal]{} +% \end{macrocode} +% \end{macro} +% +% A bunch of shortcuts +% \begin{macrocode} +\define@key[psset]{pst-pdgr}{unknown}[]{\psset{sex=unknown}} +\define@key[psset]{pst-pdgr}{male}[]{\psset{sex=male}} +\define@key[psset]{pst-pdgr}{female}[]{\psset{sex=female}} +\define@key[psset]{pst-pdgr}{normal}[]{\psset{condition=normal}} +\define@key[psset]{pst-pdgr}{obligatory}[]{\psset{condition=obligatory}} +\define@key[psset]{pst-pdgr}{asymptomatic}[]{\psset{condition=asymptomatic}} +\define@key[psset]{pst-pdgr}{affected}[]{\psset{condition=affected}} +% \end{macrocode} +% +% +% +%\subsubsection{Boolean Options} +%\label{sec:impl_bool} +% +% True or false options. +% +% +% \begin{macro}{\pst@pdgr@defineboolkey} +% We use use our own version of definition of boolean keys, rather +% than the one provided by |xkeyval|. +% \begin{macrocode} +\def\pst@pdgr@defineboolkey#1{% +\expandafter\newif\csname ifpst@pdgr@#1\endcsname% +\csname pst@pdgr@#1false\endcsname% +\define@key[psset]{pst-pdgr}{#1}[true]{% + \@nameuse{pst@pdgr@#1##1}}} +% \end{macrocode} +% \end{macro} +% +% +% \begin{macro}{\ifpst@pdgr@deceased} +% Whether the individual is deceased: +% \begin{macrocode} +\pst@pdgr@defineboolkey{deceased} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ifpst@pdgr@proband} +% Whether the individual is a proband: +% \begin{macrocode} +\pst@pdgr@defineboolkey{proband} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ifpst@pdgr@adopted} +% Whether the individual is adopted: +% \begin{macrocode} +\pst@pdgr@defineboolkey{adopted} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ifpst@pdgr@evaluated} +% Whether the individual is evaluated: +% \begin{macrocode} +\pst@pdgr@defineboolkey{evaluated} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ifpst@pdgr@sab} +% Whether the abortion is SAB: +% \begin{macrocode} +\pst@pdgr@defineboolkey{sab} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ifpst@pdgr@infertile} +% Whether the individual or relationship is infertile: +% \begin{macrocode} +\pst@pdgr@defineboolkey{infertile} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ifpst@pdgr@broken} +% Whether the relationship is broken: +% \begin{macrocode} +\pst@pdgr@defineboolkey{broken} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ifpst@pdgr@consanguinic} +% Whether the relationship is consanguinic: +% \begin{macrocode} +\pst@pdgr@defineboolkey{consanguinic} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ifpst@pdgr@monozygotic} +% Whether the twins are monozygotic: +% \begin{macrocode} +\pst@pdgr@defineboolkey{monozygotic} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ifpst@pdgr@qzygotic} +% Whether the are questionably monozygotic: +% \begin{macrocode} +\pst@pdgr@defineboolkey{qzygotic} +% \end{macrocode} +% \end{macro} +% +% +% +% +%\subsubsection{String Options} +%\label{sec:impl_string} +% +% Options setting up strings. +% +% +% \begin{macro}{\pst@pdgr@insidetext} +% Text inside the symbol +% \begin{macrocode} +\def\pst@pdgr@insidetext{}% +\define@key[psset]{pst-pdgr}{insidetext}{% + \def\pst@pdgr@insidetext{#1}}% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\pst@pdgr@belowtext} +% Text below the symbol +% \begin{macrocode} +\def\pst@pdgr@belowtext{}% +\define@key[psset]{pst-pdgr}{belowtext}{% + \def\pst@pdgr@belowtext{#1}}% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\pst@pdgr@abovetext} +% Text above the symbol +% \begin{macrocode} +\def\pst@pdgr@abovetext{}% +\define@key[psset]{pst-pdgr}{abovetext}{% + \def\pst@pdgr@abovetext{#1}}% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\pst@pdgr@lefttext} +% Text to the left of the symbol +% \begin{macrocode} +\def\pst@pdgr@lefttext{}% +\define@key[psset]{pst-pdgr}{lefttext}{% + \def\pst@pdgr@lefttext{#1}}% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\pst@pdgr@righttext} +% Text to the right of the symbol +% \begin{macrocode} +\def\pst@pdgr@righttext{}% +\define@key[psset]{pst-pdgr}{righttext}{% + \def\pst@pdgr@righttext{#1}}% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\pst@pdgr@descentnode} +% Name of the descent node +% \begin{macrocode} +\def\pst@pdgr@descentnode{}% +\define@key[psset]{pst-pdgr}{descentnode}{% + \def\pst@pdgr@descentnode{#1}}% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\pst@pdgr@rellinecmd} +% Command to draw relationship lines: +% \begin{macrocode} +\def\pst@pdgr@rellinecmd{\ncline}% +\define@key[psset]{pst-pdgr}{rellinecmd}{% + \def\pst@pdgr@rellinecmd{\@nameuse{#1}}}% +% \end{macrocode} +% \end{macro} +% +% A number of text positioning commands. +% \begin{macro}{\pst@pdgr@abovetextrp} +% The command to set the reference position for the text above the +% symbol. +% \begin{macrocode} +\def\pst@pdgr@abovetextrp{lB}% +\define@key[psset]{pst-pdgr}{abovetextrp}{% + \def\pst@pdgr@abovetextrp{#1}}% +% \end{macrocode} +% \changes{v0.2}{2006/04/18}{Added the command} +% \end{macro} +% \begin{macro}{\pst@pdgr@belowtextrp} +% The command to set the reference position for the text below the +% symbol. +% \begin{macrocode} +\def\pst@pdgr@belowtextrp{lt}% +\define@key[psset]{pst-pdgr}{belowtextrp}{% + \def\pst@pdgr@belowtextrp{#1}}% +% \end{macrocode} +% \changes{v0.2}{2006/04/18}{Added the command} +% \end{macro} +% \begin{macro}{\pst@pdgr@lefttextrp} +% The command to set the reference position for the text to the left +% of the symbol. +% \begin{macrocode} +\def\pst@pdgr@lefttextrp{r}% +\define@key[psset]{pst-pdgr}{lefttextrp}{% + \def\pst@pdgr@lefttextrp{#1}}% +% \end{macrocode} +% \changes{v0.2}{2006/04/18}{Added the command} +% \end{macro} +% \begin{macro}{\pst@pdgr@righttextrp} +% The command to set the reference position for the text to the right +% of the symbol. +% \begin{macrocode} +\def\pst@pdgr@righttextrp{l}% +\define@key[psset]{pst-pdgr}{righttextrp}{% + \def\pst@pdgr@righttextrp{#1}}% +% \end{macrocode} +% \changes{v0.2}{2006/04/18}{Added the command} +% \end{macro} +% +% The option |addtwin| for |\pstTwin| command is special. Since it +% can be repeated, we want it to be executed immediately. We store +% the name of the descentnode in |\pst@pdgr@tempnode| +% \begin{macrocode} +\define@key[psset]{pst-pdgr}{addtwin}{\ncline{\pst@pdgr@tempnode}{#1}}% +\define@key[psset]{pst-pdgr}{descentnode}{% + \def\pst@pdgr@descentnode{#1}}% +% \end{macrocode} +% +% +% +%\subsubsection{Numerical Options} +%\label{sec:impl_opts_num} +% +% The options to set up numerical values. +% +% +% \begin{macro}{\psk@descarmA} +% \changes{v0.3}{2007/06/24}{Introduced new length} +% The length of the arm A on the |\pstDescent| line. +% \begin{macrocode} +\newdimen\psk@descarmA% +\define@key[psset]{pst-pdgr}{descarmA}{\pssetlength\psk@descarmA{#1}}% +\psset{descarmA=0.8}% +% \end{macrocode} +% +% \end{macro} +% +% +% \begin{macro}{\pst@pdgr@descentnodepos} +% The position of the descent node on the relationship line +% \begin{macrocode} +\def\pst@pdgr@descentnodepos{0.5} +\define@key[psset]{pst-pdgr}{descentnodepos}{% + \pst@checknum{#1}\pst@pdgr@descentnodepos% + \ifdim\pst@pdgr@descentnodepos \p@<\z@ + \def\pst@pdgr@descentnodepos{0.5}% + \@pstrickserr{Bad `descentnodepos' value: `#1'. Must be >0}\@ehpa% + \fi}% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\pst@pdgr@brokenpos} +% The position of the broken line symbol on the relationship line +% \begin{macrocode} +\def\pst@pdgr@brokenpos{0.3} +\define@key[psset]{pst-pdgr}{brokenpos}{% + \pst@checknum{#1}\pst@pdgr@brokenpos% + \ifdim\pst@pdgr@brokenpos \p@<\z@ + \def\pst@pdgr@brokenpos{0.3}% + \@pstrickserr{Bad `brokenpos' value: `#1'. Must be >0}\@ehpa% + \fi}% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\pst@pdgr@mzlinepos} +% The position of the monozygotic line or question mark on the twins +% line: +% \begin{macrocode} +\def\pst@pdgr@mzlinepos{0.5} +\define@key[psset]{pst-pdgr}{mzlinepos}{% + \pst@checknum{#1}\pst@pdgr@mzlinepos% + \ifdim\pst@pdgr@mzlinepos \p@<\z@% + \def\pst@pdgr@mzlinepos{0.5}% + \@pstrickserr{Bad `mzlinepos' value: `#1'. Must be >0}\@ehpa% + \fi% + \ifdim\pst@pdgr@mzlinepos \p@>\p@\relax% + \def\pst@pdgr@mzlinepos{0.5}% + \@pstrickserr{Bad `mzlinepos' value: `#1'. Must be <1}\@ehpa% + \fi}% +% \end{macrocode} +% \end{macro} +% +% +% +% +%\subsection{Drawing A Person} +%\label{sec:impl_pstPerson} +% +% And now the main macro. +% +% \begin{macro}{\pstPerson} +% First, the standard processing of optional parameter +% \begin{macrocode} +\def\pstPerson{\@ifnextchar[{\pstPerson@i}{\pstPerson@i[]}} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\pstPerson@i} +% And now we are ready for a real work. Actually we create a +% |rnode| and put everything inside. We add a |\pspicture| for the +% node to have non-zero size. +% \begin{macrocode} +\def\pstPerson@i[#1]#2{% + \rnode{#2}{% + \psset{arrows=-, linestyle=solid}% + \psset{#1}% + \pspicture[shift=-0.25](-0.25,-0.25)(0.25,0.25)% +% \end{macrocode} +% Condition processing. +% \begin{macrocode} + \ifcase\pst@pdgr@condition\relax % Nothing to do if normal + \or % obligatory + \psdot(0,0)% + \or % asymptomatic + \qline(0,0.25)(0,-0.25)% + \or % affected + \expandafter\psset\expandafter{\affectedstyle}% + \def\pst@pdgr@instxtcolor{\csname\affectedfgcolor\endcsname}% + \fi% +% \end{macrocode} +% The actual drawing +% \begin{macrocode} + \ifcase\pst@pdgr@sex\relax % First, unknown sex. A diamond + \pspolygon(0,0.25)(0.25,0)(0,-0.25)(-0.25,0)% + \or % Male. A square with side 0.5 + \pspolygon(-0.25,-0.25)(-0.25,0.25)(0.25,0.25)(0.25,-0.25)% + \or % Female. A circle with radius 0.25 + \pscircle{0.25}% + \fi% +% \end{macrocode} +% Necessary for next +% \begin{macrocode} + \psset{fillstyle=none}% +% \end{macrocode} +% +% Deceased or not? +% \begin{macrocode} + \ifpst@pdgr@deceased% + \qline(-0.33,-0.33)(0.33,0.33)% + \fi% +% \end{macrocode} +% Proband or not? +% \begin{macrocode} + \ifpst@pdgr@proband% + \psline[arrows=->](-0.55,-0.55)(-0.29,-0.29)% + \fi% +% \end{macrocode} +% Adopted or not? +% \begin{macrocode} + \ifpst@pdgr@adopted% + \psline(-0.25,-0.35)(-0.35,-0.35)(-0.35,0.35)(-0.25,0.35)% + \psline(0.25,-0.35)(0.35,-0.35)(0.35,0.35)(0.25,0.35)% + \fi% +% \end{macrocode} +% \changes{v0.2}{2006/04/18}{Slightly increased brackets for the ``adopted'' +% symbol} +% Evaluated or not? +% \begin{macrocode} + \ifpst@pdgr@evaluated% + \rput(0.4,-0.4){$\ast$}% + \fi% +% \end{macrocode} +% +% Now a bunch of text putting commands +% \begin{macrocode} + \ifx\pst@pdgr@abovetext\@empty\relax\else% + \rput[\pst@pdgr@abovetextrp](0,0.4){% + \kern2\pslinewidth\pst@pdgr@abovetext\kern2\pslinewidth}% + \fi% + \ifx\pst@pdgr@belowtext\@empty\relax\else% + \rput[\pst@pdgr@belowtextrp](0,-0.4){% + \kern2\pslinewidth\pst@pdgr@belowtext\kern2\pslinewidth}% + \fi% + \ifx\pst@pdgr@righttext\@empty\relax\else% + \rput[\pst@pdgr@righttextrp](0.4,0){\pst@pdgr@righttext}% + \fi% + \ifx\pst@pdgr@lefttext\@empty\relax\else% + \rput[\pst@pdgr@lefttextrp](-0.4,0){\pst@pdgr@lefttext}% + \fi% +% \end{macrocode} +% Inside text is a bit more difficult since we want to be able to +% do reverse video if necessary +% \begin{macrocode} + \ifx\pst@pdgr@insidetext\@empty\relax\else% + \rput(0,0){\pst@pdgr@instxtcolor\pst@pdgr@insidetext}% + \fi% + \endpspicture% +}}% +% \end{macrocode} +% \changes{v0.2}{2006/04/18}{Changed text positioning} +% \end{macro} +% +% +%\subsection{Drawing A Terminated Pregnancy} +%\label{sec:impl_pstAbortion} +% +% \begin{macro}{\pstAbortion} +% First, the standard processing of optional parameter +% \begin{macrocode} +\def\pstAbortion{\@ifnextchar[{\pstAbortion@i}{\pstAbortion@i[]}}% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\pstAbortion@i} +% And the actual macro: +% \begin{macrocode} +\def\pstAbortion@i[#1]#2{% + \rnode{#2}{% + \psset{arrows=-, linestyle=solid}% + \psset{#1}% +% \end{macrocode} +% +% The standard~\cite{PedigreeNomenclature95} requires the lines for +% the terminated pregnancies to be shorter than for the normal ones. +% A way to do this is to make the node \emph{higher}: +% \begin{macrocode} + \pspicture[shift=-0.25](-0.25,-0.25)(0.25,0.5)% +% \end{macrocode} +% +% +% Condition processing: +% \begin{macrocode} + \ifcase\pst@pdgr@condition\relax % Nothing to do if normal + \or \relax % Nothing to do if obligatory + \or \relax % Nothing to do if asymptomatic + \or % affected + \expandafter\psset\expandafter{\affectedstyle}% + \fi% +% \end{macrocode} +% +% If this is a terminated pregnancy, we use the same symbol as for +% |deceased|: +% \begin{macrocode} + \ifpst@pdgr@sab\relax\else% + \qline(-0.25,0.1)(0.25,0.6)% + \fi% +% \end{macrocode} +% +% The actual drawing +% \begin{macrocode} + \pspolygon(-0.25,0.25)(0,0.5)(0.25,0.25) +% \end{macrocode} +% +% And text putting commands +% \begin{macrocode} + \ifx\pst@pdgr@abovetext\@empty\relax\else% + \rput[\pst@pdgr@abovetextrp](0,0.65){% + \kern2\pslinewidth\pst@pdgr@abovetext\kern2\pslinewidth}% + \fi% + \ifx\pst@pdgr@belowtext\@empty\relax\else% + \rput[\pst@pdgr@belowtextrp](0,0.1){% + \kern2\pslinewidth\pst@pdgr@belowtext\kern2\pslinewidth}% + \fi% + \ifx\pst@pdgr@righttext\@empty\relax\else% + \rput[\pst@pdgr@righttextrp](0.4,0.35){\pst@pdgr@righttext}% + \fi% + \ifx\pst@pdgr@lefttext\@empty\relax\else% + \rput[\pst@pdgr@lefttextrp](-0.4,0.35){\pst@pdgr@lefttext}% + \fi% + \endpspicture% +}}% +% \end{macrocode} +% \changes{v0.2}{2006/04/18}{Changed text positioning} +% \end{macro} +% +% +%\subsection{Drawing A Childlessness Symbol} +%\label{sec:impl_childless} +% +% \begin{macro}{\pstChildless} +% Again, the standard processing of optional parameter +% \begin{macrocode} +\def\pstChildless{\@ifnextchar[{\pstChildless@i}{\pstChildless@i[]}}% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\pstChildless@i} +% And the actual macro: +% \begin{macrocode} +\def\pstChildless@i[#1]#2{% + \rnode{#2}{% + \psset{arrows=-, linestyle=solid}% + \psset{#1}% +% \end{macrocode} +% The actual drawing depends on the |infertile| option. If it is +% true, we want a double line (an non-zero height). Otherwise this is +% a single line with zero height: +% \begin{macrocode} + \ifpst@pdgr@infertile % double line + \pspicture[shift=-0.05](-0.2,-0.05)(0.2,0.05)% + \qline(-0.2,-0.05)(0.2,-0.05)% + \qline(-0.2,0.05)(0.2,0.05)% + \endpspicture% + \else % single line + \qline(-0.2,0)(0.2,0)% + \fi% +% \end{macrocode} +% And the text below the symbol: +% \begin{macrocode} + \ifx\pst@pdgr@belowtext\@empty\relax\else% + \rput[t](0,-0.2){\pst@pdgr@belowtext}% + \fi% +}}% +% \end{macrocode} +% +% \end{macro} +% +%\subsection{Drawing A Relationship Line} +%\label{sec:impl_pstRelationship} +% +% \begin{macro}{\pstRelationship} +% The |\pstRelationship| command can have both optional and +% non-optional parameters: +% \begin{macrocode} +\def\pstRelationship{\@ifnextchar[{% + \pstRelationship@i}{\pstRelationship@i[]}}% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\pstRelationship@i} +% The actual macro: +% \begin{macrocode} +\def\pstRelationship@i[#1]#2#3{% + \begingroup% + \psset{arrows=-, linestyle=solid, nodesep=0.7\pslinewidth}% + \psset{#1}% +% \end{macrocode} +% A consanguinic relationship is shown by a double line: +% \begin{macrocode} + \ifpst@pdgr@consanguinic% + \psset{doubleline=true}% + \else% + \psset{doubleline=false}% + \fi% +% \end{macrocode} +% The actual drawing +% \begin{macrocode} + \pst@pdgr@rellinecmd{#2}{#3}% +% \end{macrocode} +% The broken relationships are shown using //: +% \begin{macrocode} + \ifpst@pdgr@broken% + \lput(\pst@pdgr@brokenpos){/\kern-0.7ex/}% + \fi% +% \end{macrocode} +% And the descent node +% \begin{macrocode} + \ifx\pst@pdgr@descentnode\@empty\relax% + \else% + \lput(\pst@pdgr@descentnodepos){\pnode{\pst@pdgr@descentnode}}% + \fi% + \endgroup% +}% +% \end{macrocode} +% +% \end{macro} +% +%\subsection{Drawing a Descent Line} +%\label{sec:impl_pstDescent} +% +% \begin{macro}{\ncAngles} +% \changes{v0.3}{2007/06/24}{Introduced the macro} +% In the new version of pst-node.tex (1.00 and up) |\ncangles| has the +% option |pcRef| for the arm lengths to be calculated from the node +% center. Unfortunately at this time we cannot be sure the users have +% the new version. +% +% This macro is from Herbert Vo\ss{} +% (\url{http://www.tug.org/mail-archives/pstricks/2007/004608.html}) +% \begin{macrocode} +\def\ncAngles{\pst@object{ncAngles}} +\def\ncAngles@i{\check@arrow{\ncAngles@ii}} +\def\ncAngles@ii#1#2{% + \nc@object{Open}{#1}{#2}{1.5}{\ncAngles@iii \tx@NCAngles}} +% +\def\ncAngles@iii{% + tx@Dict begin \psline@iii pop end + /AngleA \psk@angleA def + /AngleB \psk@angleB def + /ArmA \psk@armA GetEdgeA yA yA1 sub dup mul xA xA1 sub dup mul add +sqrt sub def + /ArmB \psk@armB def + /ArmTypeA \psk@armtypeA def + /ArmTypeB \psk@armtypeB def } +% \end{macrocode} +% +% +% \end{macro} +% +% \begin{macro}{\pstDescent} +% \changes{v0.3}{2007/06/24}{Rewrote using new code from Herbert Vo\ss} +% The standard option processing command: +% \begin{macrocode} +\def\pstDescent{\@ifnextchar[{\pstDescent@i}{\pstDescent@i[]}}% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\pstDescent@i} +% The actual macro. Note that we want to set |armA| \emph{after} +% processing user input, but all other options are processed after +% standard ones. +% \begin{macrocode} +\def\pstDescent@i[#1]#2#3{% + \begingroup% + \psset{arrows=-, linestyle=solid, angleA=-90, % + angleB=90, armB=0}% + \psset{#1}% + \psset{armA=\psk@descarmA}% + \ncAngles{#2}{#3}% + \endgroup}% +% \end{macrocode} +% \end{macro} +% +% +% +%\subsection{Drawing Twins} +%\label{sec:impl_pstTwins} +% +% \begin{macro}{\pstTwins} +% The standard option processing command: +% \begin{macrocode} +\def\pstTwins{\@ifnextchar[{\pstTwins@i}{\pstTwins@i[]}}% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\pstTwins@i} +% The actual macro. Note that we need to keep the twin node in +% |\pst@pdgr@tempnode| to correctly process |addtwin|. +% \begin{macrocode} +\def\pstTwins@i[#1]#2#3#4#5{% + \begingroup% + \def\pst@pdgr@tempnode{#3} + \psset{arrows=-, linestyle=solid, angleA=90, % + angleB=-90}% + \psset{#1}% +% \end{macrocode} +% The descent line from the parent to the twin node +% \begin{macrocode} + \pstDescent{#2}{#3}% +% \end{macrocode} +% And the twin lines and nodes +% \begin{macrocode} + \ncline{#3}{#4}% + \lput(\pst@pdgr@mzlinepos){\pnode{pst@pdgr@tempnodeA}}% + \ncline{#3}{#5}% + \lput(\pst@pdgr@mzlinepos){\pnode{pst@pdgr@tempnodeB}}% +% \end{macrocode} +% The monozygotic or qzygotic line +% \begin{macrocode} + \ifpst@pdgr@monozygotic% + \ncline{pst@pdgr@tempnodeA}{pst@pdgr@tempnodeB}% + \else% + \ifpst@pdgr@qzygotic% + \ncline[linestyle=none]{pst@pdgr@tempnodeA}{pst@pdgr@tempnodeB}% + \lput(0.5){?}% + \fi% + \fi% + \endgroup}% +% \end{macrocode} +% +% +% \end{macro} +% +% +%\subsection{Tree Making Commands} +%\label{sec:impl_trees} +% +% \begin{macro}{\pst@pdgr@makeTcommand} +% The general macro to create a tree command from the normal command +% \begin{macrocode} +\def\pst@pdgr@makeTcommand#1{% + \@namedef{T#1}{% + \@ifnextchar[{\@nameuse{T#1@i}}{\@nameuse{T#1@i}[]}}% + \@namedef{T#1@i}[##1]##2{% + \Tr{\@nameuse{#1@i}[##1]{##2}}}}% +% \end{macrocode} +% \end{macro} +% +% And the macros +% \begin{macro}{\TpstPerson} +% Drawing a person +% \begin{macrocode} +\pst@pdgr@makeTcommand{pstPerson}% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\TpstAbortion} +% Drawing an abortion +% \begin{macrocode} +\pst@pdgr@makeTcommand{pstAbortion}% +% \end{macrocode} +% \end{macro} +% \begin{macro}{\TpstChildless} +% Drawing a childlessness symbol +% \begin{macrocode} +\pst@pdgr@makeTcommand{pstChildless}% +% \end{macrocode} +% \end{macro} +% +%\subsection{Finishing Touch} +%\label{sec:finish} +% +% +% \begin{macrocode} +%</tex> +% \end{macrocode} +%\Finale +% +%\clearpage +%\PrintChanges +%\clearpage +%\PrintIndex +% +\endinput diff --git a/graphics/pstricks/contrib/pedigree/pst-pdgr/pst-pdgr.ins b/graphics/pstricks/contrib/pedigree/pst-pdgr/pst-pdgr.ins new file mode 100644 index 0000000000..ad66285967 --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pst-pdgr/pst-pdgr.ins @@ -0,0 +1,48 @@ +% +% Doctrip file for pst-pedigree +% This file is in public domain +% $Id: pst-pdgr.ins,v 2.0 2007/06/24 20:01:28 boris Exp $ +% +\def\batchfile{pst-pdgr.ins} +\input docstrip +\keepsilent +\showprogress + +\declarepreamble\cfg + +You are allowed and encouraged to modify THIS file. + +Good luck + +\endpreamble + +% This should be deleted in the final version +\askforoverwritefalse + +\generate{% + \file{pst-pdgr.tex}{\from{pst-pdgr.dtx}{tex}} + \file{pst-pdgr.sty}{\from{pst-pdgr.dtx}{latex}} + \usepreamble\empty\usepreamble\cfg\file{pst-pdgr.cfg}{\from{pst-pdgr.dtx}{cfg}}} + +\obeyspaces +\Msg{*********************************************************}% +\Msg{* Congratulations! You successfully generated the *}% +\Msg{* pst-pdgr package. *}% +\Msg{* *}% +\Msg{* Please move the files pst-pdgr.sty & pst-pdgr.cfg to *}% +\Msg{* the place where LaTeX files are kept in your system; *}% +\Msg{* e. g. /usr/share/texmf/tex/latex/pst-pdgr/. Please *}% +\Msg{* move the file pst-pdgr.tex to the place where generic *}% +\Msg{* TeX files are kept in your system, for example *}% +\Msg{* /usr/share/texmf/tex/generic/pstricks/pst-pdgr/. *}% +\Msg{* *}% +\Msg{* You may customize your settings by changing the file *}% +\Msg{* pst-pdgr.cfg. *}% +\Msg{* *}% +\Msg{* The documentation is in the file pst-pdgr.pdf. You *}% +\Msg{* may use the provided Makefile to re-typeset it. *}% +\Msg{* *}% +\Msg{* The package is released under LPPL *}% +\Msg{* *}% +\Msg{* Happy TeXing! *}% +\Msg{*********************************************************}%
\ No newline at end of file diff --git a/graphics/pstricks/contrib/pedigree/pst-pdgr/pst-pdgr.pdf b/graphics/pstricks/contrib/pedigree/pst-pdgr/pst-pdgr.pdf Binary files differnew file mode 100644 index 0000000000..bd39c904ec --- /dev/null +++ b/graphics/pstricks/contrib/pedigree/pst-pdgr/pst-pdgr.pdf |