#! /bin/sh # This is a shell archive, meaning: # 1. Remove everything above the #! /bin/sh line. # 2. Save the resulting text in a file. # 3. Execute the file with /bin/sh (not csh) to create the files: # CHANGES.TEXT # DOCS/ # DOCS/README # DOCS/www/ # DOCS/www/PLAT.html # DOCS/www/Resumecurrent.ps # DOCS/www/button.html # DOCS/www/changes.html # DOCS/www/checkpointer-interface.html # DOCS/www/checkpointer-reference.html # DOCS/www/checksprng.html # DOCS/www/compilation.html # DOCS/www/default-interface.html # DOCS/www/default-reference.html # DOCS/www/definitions.html # DOCS/www/examples.html # DOCS/www/examples/ # DOCS/www/examples/2streams_mpi.c # DOCS/www/examples/2streamsf_mpi.F # DOCS/www/examples/checkpoint-simple.c # DOCS/www/examples/checkpoint.c # DOCS/www/examples/checkpointf-simple.F # DOCS/www/examples/checkpointf.F # DOCS/www/examples/convert.c # DOCS/www/examples/convertf.F # DOCS/www/examples/description.html # DOCS/www/examples/fsprng-simple_mpi.c # DOCS/www/examples/fsprng_mpi.c # DOCS/www/examples/fsprngf-simple_mpi.F # DOCS/www/examples/fsprngf_mpi.F # DOCS/www/examples/invalid_ID.c # DOCS/www/examples/invalid_IDf.F # DOCS/www/examples/message-simple_mpi.c # DOCS/www/examples/message_mpi.c # DOCS/www/examples/messagef-simple_mpi.F # DOCS/www/examples/messagef_mpi.F # DOCS/www/examples/myrandom.c # DOCS/www/examples/pi-simple.c # DOCS/www/examples/pi-simple_mpi.c # DOCS/www/examples/pif-simple.F # DOCS/www/examples/seed-simple.c # DOCS/www/examples/seed-simple_mpi.c # DOCS/www/examples/seed.c # DOCS/www/examples/seed_mpi.c # DOCS/www/examples/seedf-simple.F # DOCS/www/examples/seedf-simple_mpi.F # DOCS/www/examples/seedf.F # DOCS/www/examples/seedf_mpi.F # DOCS/www/examples/simple-simple.c # DOCS/www/examples/simplef-simple.F # DOCS/www/examples/spawn.c # DOCS/www/examples/spawnf.F # DOCS/www/examples/sprng-simple.c # DOCS/www/examples/sprng-simple_mpi.C # DOCS/www/examples/sprng-simple_mpi.c # DOCS/www/examples/sprng.C # DOCS/www/examples/sprng.c # DOCS/www/examples/sprng_mpi.c # DOCS/www/examples/sprngf-simple.F # DOCS/www/examples/sprngf-simple_mpi.F # DOCS/www/examples/sprngf.F # DOCS/www/examples/sprngf_mpi.F # DOCS/www/examples/subroutinef.F # DOCS/www/frames.html # DOCS/www/generators.html # DOCS/www/images/ # DOCS/www/images/energy.ps # DOCS/www/images/interleave.gif # DOCS/www/images/msCv.ps # DOCS/www/images/msE.ps # DOCS/www/images/msbadCv.ps # DOCS/www/images/msbadE.ps # DOCS/www/images/parallel-tests.fig # DOCS/www/images/parallel-tests.gif # DOCS/www/images/serial-lcg.gif # DOCS/www/images/serial-lcg.ppm # DOCS/www/images/serial-lfg.gif # DOCS/www/images/serial-lfg.ppm # DOCS/www/images/specific-heat.ps # DOCS/www/images/sum.eps # DOCS/www/images/sum.fig # DOCS/www/images/sum.gif # DOCS/www/index.html # DOCS/www/install.html # DOCS/www/introduction.html # DOCS/www/languages.html # DOCS/www/macros.html # DOCS/www/makefile.html # DOCS/www/message-passing.html # DOCS/www/newgen.html # DOCS/www/next.gif # DOCS/www/nextbw.gif # DOCS/www/nextcol.gif # DOCS/www/nextcol2.gif # DOCS/www/nextcol3.gif # DOCS/www/nextcol4.gif # DOCS/www/paper/ # DOCS/www/paper/contents_motif.gif # DOCS/www/paper/cross_ref_motif.gif # DOCS/www/paper/foot_motif.gif # DOCS/www/paper/images.aux # DOCS/www/paper/images.log # DOCS/www/paper/images.pl # DOCS/www/paper/images.tex # DOCS/www/paper/img1.gif # DOCS/www/paper/img10.gif # DOCS/www/paper/img11.gif # DOCS/www/paper/img12.gif # DOCS/www/paper/img13.gif # DOCS/www/paper/img14.gif # DOCS/www/paper/img15.gif # DOCS/www/paper/img16.gif # DOCS/www/paper/img17.gif # DOCS/www/paper/img18.gif # DOCS/www/paper/img19.gif # DOCS/www/paper/img2.gif # DOCS/www/paper/img20.gif # DOCS/www/paper/img21.gif # DOCS/www/paper/img22.gif # DOCS/www/paper/img23.gif # DOCS/www/paper/img24.gif # DOCS/www/paper/img25.gif # DOCS/www/paper/img26.gif # DOCS/www/paper/img27.gif # DOCS/www/paper/img28.gif # DOCS/www/paper/img29.gif # DOCS/www/paper/img3.gif # DOCS/www/paper/img30.gif # DOCS/www/paper/img31.gif # DOCS/www/paper/img32.gif # DOCS/www/paper/img33.gif # DOCS/www/paper/img34.gif # DOCS/www/paper/img35.gif # DOCS/www/paper/img36.gif # DOCS/www/paper/img37.gif # DOCS/www/paper/img38.gif # DOCS/www/paper/img39.gif # DOCS/www/paper/img4.gif # DOCS/www/paper/img40.gif # DOCS/www/paper/img41.gif # DOCS/www/paper/img42.gif # DOCS/www/paper/img43.gif # DOCS/www/paper/img44.gif # DOCS/www/paper/img45.gif # DOCS/www/paper/img46.gif # DOCS/www/paper/img46.ppm # DOCS/www/paper/img47.gif # DOCS/www/paper/img48.gif # DOCS/www/paper/img49.gif # DOCS/www/paper/img49.ppm # DOCS/www/paper/img5.gif # DOCS/www/paper/img50.gif # DOCS/www/paper/img51.gif # DOCS/www/paper/img52.gif # DOCS/www/paper/img53.gif # DOCS/www/paper/img54.gif # DOCS/www/paper/img55.gif # DOCS/www/paper/img56.gif # DOCS/www/paper/img57.gif # DOCS/www/paper/img58.gif # DOCS/www/paper/img59.gif # DOCS/www/paper/img6.gif # DOCS/www/paper/img60.gif # DOCS/www/paper/img61.gif # DOCS/www/paper/img62.gif # DOCS/www/paper/img63.gif # DOCS/www/paper/img64.gif # DOCS/www/paper/img65.gif # DOCS/www/paper/img66.gif # DOCS/www/paper/img67.gif # DOCS/www/paper/img68.gif # DOCS/www/paper/img69.gif # DOCS/www/paper/img7.gif # DOCS/www/paper/img70.gif # DOCS/www/paper/img71.gif # DOCS/www/paper/img72.gif # DOCS/www/paper/img73.gif # DOCS/www/paper/img74.gif # DOCS/www/paper/img75.gif # DOCS/www/paper/img76.gif # DOCS/www/paper/img77.gif # DOCS/www/paper/img78.gif # DOCS/www/paper/img79.gif # DOCS/www/paper/img8.gif # DOCS/www/paper/img80.gif # DOCS/www/paper/img81.gif # DOCS/www/paper/img81.ppm # DOCS/www/paper/img82.gif # DOCS/www/paper/img83.gif # DOCS/www/paper/img84.gif # DOCS/www/paper/img85.gif # DOCS/www/paper/img86.gif # DOCS/www/paper/img86.ppm # DOCS/www/paper/img87.gif # DOCS/www/paper/img9.gif # DOCS/www/paper/index.html # DOCS/www/paper/index_motif.gif # DOCS/www/paper/internals.pl # DOCS/www/paper/labels.pl # DOCS/www/paper/next_group_motif.gif # DOCS/www/paper/next_motif.gif # DOCS/www/paper/node1.html # DOCS/www/paper/node10.html # DOCS/www/paper/node11.html # DOCS/www/paper/node12.html # DOCS/www/paper/node13.html # DOCS/www/paper/node14.html # DOCS/www/paper/node15.html # DOCS/www/paper/node16.html # DOCS/www/paper/node17.html # DOCS/www/paper/node18.html # DOCS/www/paper/node19.html # DOCS/www/paper/node2.html # DOCS/www/paper/node20.html # DOCS/www/paper/node3.html # DOCS/www/paper/node4.html # DOCS/www/paper/node5.html # DOCS/www/paper/node6.html # DOCS/www/paper/node7.html # DOCS/www/paper/node8.html # DOCS/www/paper/node9.html # DOCS/www/paper/paper.css # DOCS/www/paper/paper.html # DOCS/www/paper/previous_group_motif.gif # DOCS/www/paper/previous_motif.gif # DOCS/www/paper/rng.css # DOCS/www/paper/up_motif.gif # DOCS/www/parameters.html # DOCS/www/physical-model-tests.html # DOCS/www/platforms.html # DOCS/www/qr.gif # DOCS/www/qs.gif # DOCS/www/quick-default.html # DOCS/www/quick-reference.html # DOCS/www/quick-simple.html # DOCS/www/quick-start.html # DOCS/www/ref.gif # DOCS/www/reference.html # DOCS/www/refs.html # DOCS/www/simple-interface.html # DOCS/www/simple-reference.html # DOCS/www/sprng.html # DOCS/www/statistical-tests.html # DOCS/www/test-results.html # DOCS/www/test-suite.html # DOCS/www/tests.html # DOCS/www/testsold.html # DOCS/www/testwiz/ # DOCS/www/testwiz/CollisionsPanel.java # DOCS/www/testwiz/CouponPanel.java # DOCS/www/testwiz/DecParmField.java # DOCS/www/testwiz/EquidistPanel.java # DOCS/www/testwiz/GapPanel.java # DOCS/www/testwiz/IntParmField.java # DOCS/www/testwiz/LcgPanel.java # DOCS/www/testwiz/LfgPanel.java # DOCS/www/testwiz/MaxtPanel.java # DOCS/www/testwiz/OutputFrame.java # DOCS/www/testwiz/ParmField.java # DOCS/www/testwiz/ParmGrpPanel.java # DOCS/www/testwiz/PermPanel.java # DOCS/www/testwiz/PokerPanel.java # DOCS/www/testwiz/PrefDialog.java # DOCS/www/testwiz/RunsPanel.java # DOCS/www/testwiz/SerialPanel.java # DOCS/www/testwiz/StartApplet.java # DOCS/www/testwiz/SumPanel.java # DOCS/www/testwiz/TestWizard.java # DOCS/www/testwiz/cmrgPanel.java # DOCS/www/testwiz/lcg64Panel.java # DOCS/www/testwiz/pmlcgPanel.java # DOCS/www/testwiz/stat_test.html # DOCS/www/timesprng.html # DOCS/www/toc.html # DOCS/www/trouble-shooting.html # DOCS/www/us.gif # DOCS/www/usage.html # DOCS/www/users-guide.html # DOCS/www/workshop/ # DOCS/www/workshop/WorkshopThankYou.html # DOCS/www/workshop/details-speakers.html # DOCS/www/workshop/food.gif # DOCS/www/workshop/food.html # DOCS/www/workshop/index.html # DOCS/www/workshop/registration.html # DOCS/www/workshop/schedule.html # DOCS/www/workshop/speakers.html # DOCS/www/workshop/speakers_old.html # DOCS/www/workshop/summary.html # DOCS/www/workshop/topics.html # EXAMPLES/ # EXAMPLES/2streams_mpi.c # EXAMPLES/2streamsf_mpi.F # EXAMPLES/Makefile # EXAMPLES/README # EXAMPLES/checkpoint-simple.c # EXAMPLES/checkpoint.c # EXAMPLES/checkpointf-simple.F # EXAMPLES/checkpointf.F # EXAMPLES/convert.c # EXAMPLES/convertf.F # EXAMPLES/displaybytes.c # EXAMPLES/fsprng-simple_mpi.c # EXAMPLES/fsprng_mpi.c # EXAMPLES/fsprngf-simple_mpi.F # EXAMPLES/fsprngf_mpi.F # EXAMPLES/invalid_ID.c # EXAMPLES/invalid_IDf.F # EXAMPLES/make.test # EXAMPLES/message-simple_mpi.c # EXAMPLES/message_mpi.c # EXAMPLES/messagef-simple_mpi.F # EXAMPLES/messagef_mpi.F # EXAMPLES/myrandom.c # EXAMPLES/pi-simple.c # EXAMPLES/pi-simple_mpi.c # EXAMPLES/pif-simple.F # EXAMPLES/seed-simple.c # EXAMPLES/seed-simple_mpi.c # EXAMPLES/seed.c # EXAMPLES/seed_mpi.c # EXAMPLES/seedf-simple.F # EXAMPLES/seedf-simple_mpi.F # EXAMPLES/seedf.F # EXAMPLES/seedf_mpi.F # EXAMPLES/simple-simple.c # EXAMPLES/simplef-simple.F # EXAMPLES/spawn.c # EXAMPLES/spawnf.F # EXAMPLES/sprng-simple.c # EXAMPLES/sprng-simple_mpi.C # EXAMPLES/sprng-simple_mpi.c # EXAMPLES/sprng.C # EXAMPLES/sprng.c # EXAMPLES/sprng_mpi.c # EXAMPLES/sprngf-simple.F # EXAMPLES/sprngf-simple_mpi.F # EXAMPLES/sprngf.F # EXAMPLES/sprngf_mpi.F # EXAMPLES/subroutinef.F # Makefile # README # SRC/ # SRC/Makefile # SRC/README # SRC/check_gen.c # SRC/check_gen_ptr.c # SRC/check_gen_simple.c # SRC/check_genf.F # SRC/check_genf_ptr.F # SRC/check_genf_simple.F # SRC/checkid.c # SRC/cmrg/ # SRC/cmrg/Makefile # SRC/cmrg/cmrg.c # SRC/cmrg/cmrg.data # SRC/cmrg/primelist.h # SRC/cmrg/primes.c # SRC/cmrg/primes.h # SRC/communicate.c # SRC/cputime.c # SRC/cputime.h # SRC/drand.c # SRC/fwrap.h # SRC/fwrap_.h # SRC/fwrap_mpi.c # SRC/insertlib # SRC/interface.h # SRC/lcg/ # SRC/lcg/Makefile # SRC/lcg/lcg.c # SRC/lcg/lcg.data # SRC/lcg/primelist.h # SRC/lcg/primes.c # SRC/lcg/primes.h # SRC/lcg64/ # SRC/lcg64/Makefile # SRC/lcg64/lcg64.c # SRC/lcg64/lcg64.data # SRC/lcg64/primelist.h # SRC/lcg64/primes.c # SRC/lcg64/primes.h # SRC/lfg/ # SRC/lfg/Makefile # SRC/lfg/lfg.c # SRC/lfg/lfg.data # SRC/make.CONVEX # SRC/make.DEC # SRC/make.GENERIC # SRC/make.HP # SRC/make.LINUX # SRC/make.O2K # SRC/make.SGI # SRC/make.SOLARIS # SRC/make.SP2 # SRC/make.SUN # SRC/make.T3D # SRC/make.T3E # SRC/makeseed.c # SRC/memory.c # SRC/memory.h # SRC/mlfg/ # SRC/mlfg/Makefile # SRC/mlfg/int64.h # SRC/mlfg/mlfg.c # SRC/mlfg/mlfg.data # SRC/multiply.h # SRC/pmlcg/ # SRC/pmlcg/Makefile # SRC/pmlcg/basic.h # SRC/pmlcg/gmp.h # SRC/pmlcg/info.h # SRC/pmlcg/longlong.h # SRC/pmlcg/pmlcg.c # SRC/pmlcg/pmlcg.data # SRC/simple.c # SRC/simple_.h # SRC/simple_mpi.c # SRC/sprng.h # SRC/sprng_f.h # SRC/store.c # SRC/store.h # SRC/timing.c # SRC/timingf.F # TESTS/ # TESTS/Makefile # TESTS/NEWGEN.TEXT # TESTS/README # TESTS/chisquare.c # TESTS/collisions.c # TESTS/communicate.c # TESTS/coupon.c # TESTS/equidist.c # TESTS/fft.c # TESTS/gap.c # TESTS/init_tests.c # TESTS/maxt.c # TESTS/metropolis.c # TESTS/mytest.c # TESTS/perm.c # TESTS/poker.c # TESTS/random_walk.c # TESTS/runs.c # TESTS/serial.c # TESTS/stirling.c # TESTS/sum.c # TESTS/tests.h # TESTS/util.c # TESTS/util.h # TESTS/wolff.c # VERSION # include/ # include/interface.h # include/sprng.h # include/sprng_f.h # lib/ # lib/Makefile # make.CHOICES # This archive created: Fri Jul 26 10:14:06 2002 export PATH; PATH=/bin:$PATH if test -f 'CHANGES.TEXT' then echo shar: will not over-write existing file "'CHANGES.TEXT'" else cat << "SHAR_EOF" > 'CHANGES.TEXT' Changes in Version 1.0 ---------------------- Changes to version 0.5 1. Fortran stream_number in calls to init_sprng now starts from 0 instead of from 1. ****** VERY IMPORTANT ****** -------------- 2. A parallel Multiplicative Lagged Fibonacci Generator (mlfg) has been implemented. 3. Default parameter to init_sprng is called SPRNG_DEFAULT instead of DEFAULT. 4. Several functions inlined, to improve speed. 5. Directory 'include' contains the headers, and 'lib' the SPRNG libraries, instead of using 'SRC' and '.' respectively. If you have untarred SPRNG into a location where an old version is present, please remove your old interface.h, sprng.h, and sprng_f.h files in SRC and either make links to those in the 'include' directory, or copy them to SRC. 6. SRC/make.GENERIC helps in installation on new machines. 7. 'pack_sprng' now returns the state of a stream in a machine independent format that can be unpacked with 'unpack_sprng' (except for pmlcg, which still stores numbers in a machine dependent format). It may be incompatible with data stored in the beta version's format. 8. lcg64 and cmrg use larger primes as addends. So the random number sequences will now be different from those in Version 0.5. Changes to Version 1.0 Beta --------------------------- 1. Fixed a memory leak bug in mlfg. SHAR_EOF fi # end of overwriting check if test ! -d 'DOCS' then mkdir 'DOCS' fi cd 'DOCS' if test -f 'README' then echo shar: will not over-write existing file "'README'" else cat << "SHAR_EOF" > 'README' SPRNG provides both FORTRAN and C (also C++) interfaces for the use of the parallel random number generator libraries. Further documentation is available at the following URL: http://www.ncsa.uiuc.edu/Apps/CMP/RNG/RNG-home.html sprng.html.tar too contains similar documentation. Please execute: zcat tar xvf sprng.html.tar.Z | tar xvof - and read the file toc.html in the www directory with your web browser. SHAR_EOF fi # end of overwriting check if test ! -d 'www' then mkdir 'www' fi cd 'www' if test -f 'PLAT.html' then echo shar: will not over-write existing file "'PLAT.html'" else cat << "SHAR_EOF" > 'PLAT.html' SPRNG: Scalable Parallel Pseudo-Random Number Generator Library

PLAT variable for make command

SPRNG libraries can be built by executing the following command:

make PLAT=platform

where platform depends on which SPRNG is to be installed. The specific command on the different machines that SPRNG has been tested on are as follows:


SHAR_EOF fi # end of overwriting check if test -f 'Resumecurrent.ps' then echo shar: will not over-write existing file "'Resumecurrent.ps'" else cat << "SHAR_EOF" > 'Resumecurrent.ps' %!PS-Adobe-3.0 %%BoundingBox: (atend) %%Pages: (atend) %%PageOrder: (atend) %%DocumentFonts: (atend) %%Creator: Frame 5.0 %%DocumentData: Clean7Bit %%EndComments %%BeginProlog % % Frame ps_prolog 5.0, for use with Frame 5.0 products % This ps_prolog file is Copyright (c) 1986-1995 Frame Technology % Corporation. All rights reserved. This ps_prolog file may be % freely copied and distributed in conjunction with documents created % using FrameMaker, FrameMaker/SGML and FrameViewer as long as this % copyright notice is preserved. % % FrameMaker users specify the proper paper size for each print job in the % "Print" dialog's "Printer Paper Size" "Width" and "Height~ fields. If the % printer that the PS file is sent to does not support the requested paper % size, or if there is no paper tray of the proper size currently installed, % then the job will not be printed. The following flag, if set to true, will % cause the job to print on the default paper in such cases. /FMAllowPaperSizeMismatch false def % % Frame products normally print colors as their true color on a color printer % or as shades of gray, based on luminance, on a black-and white printer. The % following flag, if set to true, forces all non-white colors to print as pure % black. This has no effect on bitmap images. /FMPrintAllColorsAsBlack false def % % Frame products can either set their own line screens or use a printer's % default settings. Three flags below control this separately for no % separations, spot separations and process separations. If a flag % is true, then the default printer settings will not be changed. If it is % false, Frame products will use their own settings from a table based on % the printer's resolution. /FMUseDefaultNoSeparationScreen true def /FMUseDefaultSpotSeparationScreen true def /FMUseDefaultProcessSeparationScreen false def % % For any given PostScript printer resolution, Frame products have two sets of % screen angles and frequencies for printing process separations, which are % recomended by Adobe. The following variable chooses the higher frequencies % when set to true or the lower frequencies when set to false. This is only % effective if the appropriate FMUseDefault...SeparationScreen flag is false. /FMUseHighFrequencyScreens true def % % The following is a set of predefined optimal frequencies and angles for various % common dpi settings. This is taken from "Advances in Color Separation Using % PostScript Software Technology," from Adobe Systems (3/13/89 P.N. LPS 0043) % and corrolated with information which is in various PPD (4.0) files. % % The "dpiranges" figure is the minimum dots per inch device resolution which % can support this setting. The "low" and "high" values are controlled by the % setting of the FMUseHighFrequencyScreens flag above. The "TDot" flags control % the use of the "Yellow Triple Dot" feature whereby the frequency id divided by % three, but the dot function is "trippled" giving a block of 3x3 dots per cell. % % PatFreq is a compromise pattern frequency for ps Level 2 printers which is close % to the ideal WYSIWYG pattern frequency of 9 repetitions/inch but does not beat % (too badly) against the screen frequencies of any separations for that DPI. /dpiranges [ 2540 2400 1693 1270 1200 635 600 0 ] def /CMLowFreqs [ 100.402 94.8683 89.2289 100.402 94.8683 66.9349 63.2456 47.4342 ] def /YLowFreqs [ 95.25 90.0 84.65 95.25 90.0 70.5556 66.6667 50.0 ] def /KLowFreqs [ 89.8026 84.8528 79.8088 89.8026 84.8528 74.8355 70.7107 53.033 ] def /CLowAngles [ 71.5651 71.5651 71.5651 71.5651 71.5651 71.5651 71.5651 71.5651 ] def /MLowAngles [ 18.4349 18.4349 18.4349 18.4349 18.4349 18.4349 18.4349 18.4349 ] def /YLowTDot [ true true false true true false false false ] def /CMHighFreqs [ 133.87 126.491 133.843 108.503 102.523 100.402 94.8683 63.2456 ] def /YHighFreqs [ 127.0 120.0 126.975 115.455 109.091 95.25 90.0 60.0 ] def /KHighFreqs [ 119.737 113.137 119.713 128.289 121.218 89.8026 84.8528 63.6395 ] def /CHighAngles [ 71.5651 71.5651 71.5651 70.0169 70.0169 71.5651 71.5651 71.5651 ] def /MHighAngles [ 18.4349 18.4349 18.4349 19.9831 19.9831 18.4349 18.4349 18.4349 ] def /YHighTDot [ false false true false false true true false ] def /PatFreq [ 10.5833 10.0 9.4055 10.5833 10.0 10.5833 10.0 9.375 ] def % % PostScript Level 2 printers contain an "Accurate Screens" feature which can % improve process separation rendering at the expense of compute time. This % flag is ignored by PostScript Level 1 printers. /FMUseAcccurateScreens true def % % The following PostScript procedure defines the spot function that Frame % products will use for process separations. You may un-comment-out one of % the alternative functions below, or use your own. % % Dot function /FMSpotFunction {abs exch abs 2 copy add 1 gt {1 sub dup mul exch 1 sub dup mul add 1 sub } {dup mul exch dup mul add 1 exch sub }ifelse } def % % Line function % /FMSpotFunction { pop } def % % Elipse function % /FMSpotFunction { dup 5 mul 8 div mul exch dup mul exch add % sqrt 1 exch sub } def % % /FMversion (5.0) def /fMLevel1 /languagelevel where {pop languagelevel} {1} ifelse 2 lt def /FMPColor fMLevel1 { false /colorimage where {pop pop true} if } { true } ifelse def /FrameDict 400 dict def systemdict /errordict known not {/errordict 10 dict def errordict /rangecheck {stop} put} if % The readline in PS 23.0 doesn't recognize cr's as nl's on AppleTalk FrameDict /tmprangecheck errordict /rangecheck get put errordict /rangecheck {FrameDict /bug true put} put FrameDict /bug false put mark % Some PS machines read past the CR, so keep the following 3 lines together! currentfile 5 string readline 00 0000000000 cleartomark errordict /rangecheck FrameDict /tmprangecheck get put FrameDict /bug get { /readline { /gstring exch def /gfile exch def /gindex 0 def { gfile read pop dup 10 eq {exit} if dup 13 eq {exit} if gstring exch gindex exch put /gindex gindex 1 add def } loop pop gstring 0 gindex getinterval true } bind def } if /FMshowpage /showpage load def /FMquit /quit load def /FMFAILURE { dup = flush FMshowpage /Helvetica findfont 12 scalefont setfont 72 200 moveto show 72 220 moveto show FMshowpage FMquit } def /FMVERSION { FMversion ne { (Frame product version does not match ps_prolog! Check installation;) (also check ~/fminit and ./fminit for old versions) FMFAILURE } if } def /FMBADEPSF { (Adobe's PostScript Language Reference Manual, 2nd Edition, section H.2.4) (says your EPS file is not valid, as it calls X ) dup dup (X) search pop exch pop exch pop length 5 -1 roll putinterval FMFAILURE } def /fmConcatProcs { /proc2 exch cvlit def/proc1 exch cvlit def/newproc proc1 length proc2 length add array def newproc 0 proc1 putinterval newproc proc1 length proc2 putinterval newproc cvx }def FrameDict begin [ /ALDsave /FMdicttop /FMoptop /FMpointsize /FMsaveobject /b /bitmapsave /blut /bpside /bs /bstring /bwidth /c /cf /cs /cynu /depth /edown /fh /fillvals /fw /fx /fy /g /gfile /gindex /grnt /gryt /gstring /height /hh /i /im /indx /is /k /kk /landscape /lb /len /llx /lly /m /magu /manualfeed /n /offbits /onbits /organgle /orgbangle /orgbfreq /orgbproc /orgbxfer /orgfreq /orggangle /orggfreq /orggproc /orggxfer /orgmatrix /orgproc /orgrangle /orgrfreq /orgrproc /orgrxfer /orgxfer /pagesave /paperheight /papersizedict /paperwidth /pos /pwid /r /rad /redt /sl /str /tran /u /urx /ury /val /width /width /ws /ww /x /x1 /x2 /xindex /xpoint /xscale /xx /y /y1 /y2 /yelu /yindex /ypoint /yscale /yy ] { 0 def } forall /FmBD {bind def} bind def systemdict /pdfmark known { /fMAcrobat true def /FmPD /pdfmark load def /FmPT /show load def currentdistillerparams /CoreDistVersion get 2000 ge { /FmPD2 /pdfmark load def /FmPA { mark exch /Dest exch 5 3 roll /View [ /XYZ null 6 -2 roll FmDC exch pop null] /DEST FmPD }FmBD } { /FmPD2 /cleartomark load def /FmPA {pop pop pop}FmBD } ifelse } { /fMAcrobat false def /FmPD /cleartomark load def /FmPD2 /cleartomark load def /FmPT /pop load def /FmPA {pop pop pop}FmBD } ifelse /FmDC { transform fMDefaultMatrix itransform cvi exch cvi exch }FmBD /FmBx { dup 3 index lt {3 1 roll exch} if 1 index 4 index lt {4 -1 roll 3 1 roll exch 4 1 roll} if }FmBD /FMnone 0 def /FMcyan 1 def /FMmagenta 2 def /FMyellow 3 def /FMblack 4 def /FMcustom 5 def /fMNegative false def /FrameSepIs FMnone def /FrameSepBlack 0 def /FrameSepYellow 0 def /FrameSepMagenta 0 def /FrameSepCyan 0 def /FrameSepRed 1 def /FrameSepGreen 1 def /FrameSepBlue 1 def /FrameCurGray 1 def /FrameCurPat null def /FrameCurColors [ 0 0 0 1 0 0 0 ] def /FrameColorEpsilon .001 def /eqepsilon { sub dup 0 lt {neg} if FrameColorEpsilon le } bind def /FrameCmpColorsCMYK { 2 copy 0 get exch 0 get eqepsilon { 2 copy 1 get exch 1 get eqepsilon { 2 copy 2 get exch 2 get eqepsilon { 3 get exch 3 get eqepsilon } {pop pop false} ifelse }{pop pop false} ifelse } {pop pop false} ifelse } bind def /FrameCmpColorsRGB { 2 copy 4 get exch 0 get eqepsilon { 2 copy 5 get exch 1 get eqepsilon { 6 get exch 2 get eqepsilon }{pop pop false} ifelse } {pop pop false} ifelse } bind def /RGBtoCMYK { 1 exch sub 3 1 roll 1 exch sub 3 1 roll 1 exch sub 3 1 roll 3 copy 2 copy le { pop } { exch pop } ifelse 2 copy le { pop } { exch pop } ifelse dup dup dup 6 1 roll 4 1 roll 7 1 roll sub 6 1 roll sub 5 1 roll sub 4 1 roll } bind def /CMYKtoRGB { dup dup 4 -1 roll add 5 1 roll 3 -1 roll add 4 1 roll add 1 exch sub dup 0 lt {pop 0} if 3 1 roll 1 exch sub dup 0 lt {pop 0} if exch 1 exch sub dup 0 lt {pop 0} if exch } bind def /FrameSepInit { 1.0 RealSetgray } bind def /FrameSetSepColor { /FrameSepBlue exch def /FrameSepGreen exch def /FrameSepRed exch def /FrameSepBlack exch def /FrameSepYellow exch def /FrameSepMagenta exch def /FrameSepCyan exch def /FrameSepIs FMcustom def setCurrentScreen } bind def /FrameSetCyan { /FrameSepBlue 1.0 def /FrameSepGreen 1.0 def /FrameSepRed 0.0 def /FrameSepBlack 0.0 def /FrameSepYellow 0.0 def /FrameSepMagenta 0.0 def /FrameSepCyan 1.0 def /FrameSepIs FMcyan def setCurrentScreen } bind def /FrameSetMagenta { /FrameSepBlue 1.0 def /FrameSepGreen 0.0 def /FrameSepRed 1.0 def /FrameSepBlack 0.0 def /FrameSepYellow 0.0 def /FrameSepMagenta 1.0 def /FrameSepCyan 0.0 def /FrameSepIs FMmagenta def setCurrentScreen } bind def /FrameSetYellow { /FrameSepBlue 0.0 def /FrameSepGreen 1.0 def /FrameSepRed 1.0 def /FrameSepBlack 0.0 def /FrameSepYellow 1.0 def /FrameSepMagenta 0.0 def /FrameSepCyan 0.0 def /FrameSepIs FMyellow def setCurrentScreen } bind def /FrameSetBlack { /FrameSepBlue 0.0 def /FrameSepGreen 0.0 def /FrameSepRed 0.0 def /FrameSepBlack 1.0 def /FrameSepYellow 0.0 def /FrameSepMagenta 0.0 def /FrameSepCyan 0.0 def /FrameSepIs FMblack def setCurrentScreen } bind def /FrameNoSep { /FrameSepIs FMnone def setCurrentScreen } bind def /FrameSetSepColors { FrameDict begin [ exch 1 add 1 roll ] /FrameSepColors exch def end } bind def /FrameColorInSepListCMYK { FrameSepColors { exch dup 3 -1 roll FrameCmpColorsCMYK { pop true exit } if } forall dup true ne {pop false} if } bind def /FrameColorInSepListRGB { FrameSepColors { exch dup 3 -1 roll FrameCmpColorsRGB { pop true exit } if } forall dup true ne {pop false} if } bind def /RealSetgray /setgray load def /RealSetrgbcolor /setrgbcolor load def /RealSethsbcolor /sethsbcolor load def end /setgray { FrameDict begin FrameSepIs FMnone eq { RealSetgray } { FrameSepIs FMblack eq { RealSetgray } { FrameSepIs FMcustom eq FrameSepRed 0 eq and FrameSepGreen 0 eq and FrameSepBlue 0 eq and { RealSetgray } { 1 RealSetgray pop } ifelse } ifelse } ifelse end } bind def /setrgbcolor { FrameDict begin FrameSepIs FMnone eq { RealSetrgbcolor } { 3 copy [ 4 1 roll ] FrameColorInSepListRGB { FrameSepBlue eq exch FrameSepGreen eq and exch FrameSepRed eq and { 0 } { 1 } ifelse } { FMPColor { RealSetrgbcolor currentcmykcolor } { RGBtoCMYK } ifelse FrameSepIs FMblack eq {1.0 exch sub 4 1 roll pop pop pop} { FrameSepIs FMyellow eq {pop 1.0 exch sub 3 1 roll pop pop} { FrameSepIs FMmagenta eq {pop pop 1.0 exch sub exch pop } { FrameSepIs FMcyan eq {pop pop pop 1.0 exch sub } {pop pop pop pop 1} ifelse } ifelse } ifelse } ifelse } ifelse RealSetgray } ifelse end } bind def /sethsbcolor { FrameDict begin FrameSepIs FMnone eq { RealSethsbcolor } { RealSethsbcolor currentrgbcolor setrgbcolor } ifelse end } bind def FrameDict begin /setcmykcolor where { pop /RealSetcmykcolor /setcmykcolor load def } { /RealSetcmykcolor { 4 1 roll 3 { 3 index add 0 max 1 min 1 exch sub 3 1 roll} repeat RealSetrgbcolor pop } bind def } ifelse userdict /setcmykcolor { FrameDict begin FrameSepIs FMnone eq { RealSetcmykcolor } { 4 copy [ 5 1 roll ] FrameColorInSepListCMYK { FrameSepBlack eq exch FrameSepYellow eq and exch FrameSepMagenta eq and exch FrameSepCyan eq and { 0 } { 1 } ifelse } { FrameSepIs FMblack eq {1.0 exch sub 4 1 roll pop pop pop} { FrameSepIs FMyellow eq {pop 1.0 exch sub 3 1 roll pop pop} { FrameSepIs FMmagenta eq {pop pop 1.0 exch sub exch pop } { FrameSepIs FMcyan eq {pop pop pop 1.0 exch sub } {pop pop pop pop 1} ifelse } ifelse } ifelse } ifelse } ifelse RealSetgray } ifelse end } bind put fMLevel1 { /patScreenDict 7 dict dup begin <0f1e3c78f0e1c387> [ 45 { pop } {exch pop} .5 2 sqrt] FmBD <0f87c3e1f0783c1e> [ 135 { pop } {exch pop} .5 2 sqrt] FmBD [ 0 { pop } dup .5 2 ] FmBD [ 90 { pop } dup .5 2 ] FmBD <8142241818244281> [ 45 { 2 copy lt {exch} if pop} dup .75 2 sqrt] FmBD <03060c183060c081> [ 45 { pop } {exch pop} .875 2 sqrt] FmBD <8040201008040201> [ 135 { pop } {exch pop} .875 2 sqrt] FmBD end def } { /patProcDict 5 dict dup begin <0f1e3c78f0e1c387> { 3 setlinewidth -1 -1 moveto 9 9 lineto stroke 4 -4 moveto 12 4 lineto stroke -4 4 moveto 4 12 lineto stroke} bind def <0f87c3e1f0783c1e> { 3 setlinewidth -1 9 moveto 9 -1 lineto stroke -4 4 moveto 4 -4 lineto stroke 4 12 moveto 12 4 lineto stroke} bind def <8142241818244281> { 1 setlinewidth -1 9 moveto 9 -1 lineto stroke -1 -1 moveto 9 9 lineto stroke } bind def <03060c183060c081> { 1 setlinewidth -1 -1 moveto 9 9 lineto stroke 4 -4 moveto 12 4 lineto stroke -4 4 moveto 4 12 lineto stroke} bind def <8040201008040201> { 1 setlinewidth -1 9 moveto 9 -1 lineto stroke -4 4 moveto 4 -4 lineto stroke 4 12 moveto 12 4 lineto stroke} bind def end def /patDict 15 dict dup begin /PatternType 1 def /PaintType 2 def /TilingType 3 def /BBox [ 0 0 8 8 ] def /XStep 8 def /YStep 8 def /PaintProc { begin patProcDict bstring known { patProcDict bstring get exec } { 8 8 true [1 0 0 -1 0 8] bstring imagemask } ifelse end } bind def end def } ifelse /combineColor { FrameSepIs FMnone eq { graymode fMLevel1 or not { [/Pattern [/DeviceCMYK]] setcolorspace FrameCurColors 0 4 getinterval aload pop FrameCurPat setcolor } { FrameCurColors 3 get 1.0 ge { FrameCurGray RealSetgray } { fMAcrobat not FMPColor graymode and and { 0 1 3 { FrameCurColors exch get 1 FrameCurGray sub mul } for RealSetcmykcolor } { 4 1 6 { FrameCurColors exch get graymode { 1 exch sub 1 FrameCurGray sub mul 1 exch sub } { 1.0 lt {FrameCurGray} {1} ifelse } ifelse } for RealSetrgbcolor } ifelse } ifelse } ifelse } { FrameCurColors 0 4 getinterval aload FrameColorInSepListCMYK { FrameSepBlack eq exch FrameSepYellow eq and exch FrameSepMagenta eq and exch FrameSepCyan eq and FrameSepIs FMcustom eq and { FrameCurGray } { 1 } ifelse } { FrameSepIs FMblack eq {FrameCurGray 1.0 exch sub mul 1.0 exch sub 4 1 roll pop pop pop} { FrameSepIs FMyellow eq {pop FrameCurGray 1.0 exch sub mul 1.0 exch sub 3 1 roll pop pop} { FrameSepIs FMmagenta eq {pop pop FrameCurGray 1.0 exch sub mul 1.0 exch sub exch pop } { FrameSepIs FMcyan eq {pop pop pop FrameCurGray 1.0 exch sub mul 1.0 exch sub } {pop pop pop pop 1} ifelse } ifelse } ifelse } ifelse } ifelse graymode fMLevel1 or not { [/Pattern [/DeviceGray]] setcolorspace FrameCurPat setcolor } { graymode not fMLevel1 and { dup 1 lt {pop FrameCurGray} if } if RealSetgray } ifelse } ifelse } bind def /savematrix { orgmatrix currentmatrix pop } bind def /restorematrix { orgmatrix setmatrix } bind def /fMDefaultMatrix matrix defaultmatrix def /fMatrix2 matrix def /dpi 72 0 fMDefaultMatrix dtransform dup mul exch dup mul add sqrt def /freq dpi dup 72 div round dup 0 eq {pop 1} if 8 mul div def /sangle 1 0 fMDefaultMatrix dtransform exch atan def sangle fMatrix2 rotate fMDefaultMatrix fMatrix2 concatmatrix dup 0 get /sflipx exch def 3 get /sflipy exch def /screenIndex { 0 1 dpiranges length 1 sub { dup dpiranges exch get 1 sub dpi le {exit} {pop} ifelse } for } bind def /getCyanScreen { FMUseHighFrequencyScreens { CHighAngles CMHighFreqs} {CLowAngles CMLowFreqs} ifelse screenIndex dup 3 1 roll get 3 1 roll get /FMSpotFunction load } bind def /getMagentaScreen { FMUseHighFrequencyScreens { MHighAngles CMHighFreqs } {MLowAngles CMLowFreqs} ifelse screenIndex dup 3 1 roll get 3 1 roll get /FMSpotFunction load } bind def /getYellowScreen { FMUseHighFrequencyScreens { YHighTDot YHighFreqs} { YLowTDot YLowFreqs } ifelse screenIndex dup 3 1 roll get 3 1 roll get { 3 div {2 { 1 add 2 div 3 mul dup floor sub 2 mul 1 sub exch} repeat FMSpotFunction } } {/FMSpotFunction load } ifelse 0.0 exch } bind def /getBlackScreen { FMUseHighFrequencyScreens { KHighFreqs } { KLowFreqs } ifelse screenIndex get 45.0 /FMSpotFunction load } bind def /getSpotScreen { getBlackScreen } bind def /getCompositeScreen { getBlackScreen } bind def /FMSetScreen fMLevel1 { /setscreen load }{ { 8 dict begin /HalftoneType 1 def /SpotFunction exch def /Angle exch def /Frequency exch def /AccurateScreens FMUseAcccurateScreens def currentdict end sethalftone } bind } ifelse def /setDefaultScreen { FMPColor { orgrxfer cvx orggxfer cvx orgbxfer cvx orgxfer cvx setcolortransfer } { orgxfer cvx settransfer } ifelse orgfreq organgle orgproc cvx setscreen } bind def /setCurrentScreen { FrameSepIs FMnone eq { FMUseDefaultNoSeparationScreen { setDefaultScreen } { getCompositeScreen FMSetScreen } ifelse } { FrameSepIs FMcustom eq { FMUseDefaultSpotSeparationScreen { setDefaultScreen } { getSpotScreen FMSetScreen } ifelse } { FMUseDefaultProcessSeparationScreen { setDefaultScreen } { FrameSepIs FMcyan eq { getCyanScreen FMSetScreen } { FrameSepIs FMmagenta eq { getMagentaScreen FMSetScreen } { FrameSepIs FMyellow eq { getYellowScreen FMSetScreen } { getBlackScreen FMSetScreen } ifelse } ifelse } ifelse } ifelse } ifelse } ifelse } bind def end /FMDOCUMENT { array /FMfonts exch def /#copies exch def FrameDict begin 0 ne /manualfeed exch def /paperheight exch def /paperwidth exch def 0 ne /fMNegative exch def 0 ne /edown exch def /yscale exch def /xscale exch def fMLevel1 { manualfeed {setmanualfeed} if /FMdicttop countdictstack 1 add def /FMoptop count def setpapername manualfeed {true} {papersize} ifelse {manualpapersize} {false} ifelse {desperatepapersize} {false} ifelse {papersizefailure} if count -1 FMoptop {pop pop} for countdictstack -1 FMdicttop {pop end} for } {2 dict dup /PageSize [paperwidth paperheight] put manualfeed {dup /ManualFeed manualfeed put} if {setpagedevice} stopped {papersizefailure} if } ifelse FMPColor { currentcolorscreen cvlit /orgproc exch def /organgle exch def /orgfreq exch def cvlit /orgbproc exch def /orgbangle exch def /orgbfreq exch def cvlit /orggproc exch def /orggangle exch def /orggfreq exch def cvlit /orgrproc exch def /orgrangle exch def /orgrfreq exch def currentcolortransfer fMNegative { 1 1 4 { pop { 1 exch sub } fmConcatProcs 4 1 roll } for 4 copy setcolortransfer } if cvlit /orgxfer exch def cvlit /orgbxfer exch def cvlit /orggxfer exch def cvlit /orgrxfer exch def } { currentscreen cvlit /orgproc exch def /organgle exch def /orgfreq exch def currenttransfer fMNegative { { 1 exch sub } fmConcatProcs dup settransfer } if cvlit /orgxfer exch def } ifelse end } def /FMBEGINPAGE { FrameDict begin /pagesave save def 3.86 setmiterlimit /landscape exch 0 ne def landscape { 90 rotate 0 exch dup /pwid exch def neg translate pop }{ pop /pwid exch def } ifelse edown { [-1 0 0 1 pwid 0] concat } if 0 0 moveto paperwidth 0 lineto paperwidth paperheight lineto 0 paperheight lineto 0 0 lineto 1 setgray fill xscale yscale scale /orgmatrix matrix def gsave } def /FMENDPAGE { grestore pagesave restore end showpage } def /FMFONTDEFINE { FrameDict begin findfont ReEncode 1 index exch definefont FMfonts 3 1 roll put end } def /FMFILLS { FrameDict begin dup array /fillvals exch def dict /patCache exch def end } def /FMFILL { FrameDict begin fillvals 3 1 roll put end } def /FMNORMALIZEGRAPHICS { newpath 1 setlinewidth 0 setlinecap 0 0 0 sethsbcolor 0 setgray } bind def /FMBEGINEPSF { end /FMEPSF save def /showpage {} def % See Adobe's "PostScript Language Reference Manual, 2nd Edition", page 714. % "...the following operators MUST NOT be used in an EPS file:" (emphasis ours) /banddevice {(banddevice) FMBADEPSF} def /clear {(clear) FMBADEPSF} def /cleardictstack {(cleardictstack) FMBADEPSF} def /copypage {(copypage) FMBADEPSF} def /erasepage {(erasepage) FMBADEPSF} def /exitserver {(exitserver) FMBADEPSF} def /framedevice {(framedevice) FMBADEPSF} def /grestoreall {(grestoreall) FMBADEPSF} def /initclip {(initclip) FMBADEPSF} def /initgraphics {(initgraphics) FMBADEPSF} def /quit {(quit) FMBADEPSF} def /renderbands {(renderbands) FMBADEPSF} def /setglobal {(setglobal) FMBADEPSF} def /setpagedevice {(setpagedevice) FMBADEPSF} def /setshared {(setshared) FMBADEPSF} def /startjob {(startjob) FMBADEPSF} def /lettertray {(lettertray) FMBADEPSF} def /letter {(letter) FMBADEPSF} def /lettersmall {(lettersmall) FMBADEPSF} def /11x17tray {(11x17tray) FMBADEPSF} def /11x17 {(11x17) FMBADEPSF} def /ledgertray {(ledgertray) FMBADEPSF} def /ledger {(ledger) FMBADEPSF} def /legaltray {(legaltray) FMBADEPSF} def /legal {(legal) FMBADEPSF} def /statementtray {(statementtray) FMBADEPSF} def /statement {(statement) FMBADEPSF} def /executivetray {(executivetray) FMBADEPSF} def /executive {(executive) FMBADEPSF} def /a3tray {(a3tray) FMBADEPSF} def /a3 {(a3) FMBADEPSF} def /a4tray {(a4tray) FMBADEPSF} def /a4 {(a4) FMBADEPSF} def /a4small {(a4small) FMBADEPSF} def /b4tray {(b4tray) FMBADEPSF} def /b4 {(b4) FMBADEPSF} def /b5tray {(b5tray) FMBADEPSF} def /b5 {(b5) FMBADEPSF} def FMNORMALIZEGRAPHICS [/fy /fx /fh /fw /ury /urx /lly /llx] {exch def} forall fx fw 2 div add fy fh 2 div add translate rotate fw 2 div neg fh 2 div neg translate fw urx llx sub div fh ury lly sub div scale llx neg lly neg translate /FMdicttop countdictstack 1 add def /FMoptop count def } bind def /FMENDEPSF { count -1 FMoptop {pop pop} for countdictstack -1 FMdicttop {pop end} for FMEPSF restore FrameDict begin } bind def FrameDict begin /setmanualfeed { %%BeginFeature *ManualFeed True statusdict /manualfeed true put %%EndFeature } bind def /max {2 copy lt {exch} if pop} bind def /min {2 copy gt {exch} if pop} bind def /inch {72 mul} def /pagedimen { paperheight sub abs 16 lt exch paperwidth sub abs 16 lt and {/papername exch def} {pop} ifelse } bind def /setpapername { /papersizedict 14 dict def papersizedict begin /papername /unknown def /Letter 8.5 inch 11.0 inch pagedimen /LetterSmall 7.68 inch 10.16 inch pagedimen /Tabloid 11.0 inch 17.0 inch pagedimen /Ledger 17.0 inch 11.0 inch pagedimen /Legal 8.5 inch 14.0 inch pagedimen /Statement 5.5 inch 8.5 inch pagedimen /Executive 7.5 inch 10.0 inch pagedimen /A3 11.69 inch 16.5 inch pagedimen /A4 8.26 inch 11.69 inch pagedimen /A4Small 7.47 inch 10.85 inch pagedimen /B4 10.125 inch 14.33 inch pagedimen /B5 7.16 inch 10.125 inch pagedimen end } bind def /papersize { papersizedict begin /Letter {lettertray letter} def /LetterSmall {lettertray lettersmall} def /Tabloid {11x17tray 11x17} def /Ledger {ledgertray ledger} def /Legal {legaltray legal} def /Statement {statementtray statement} def /Executive {executivetray executive} def /A3 {a3tray a3} def /A4 {a4tray a4} def /A4Small {a4tray a4small} def /B4 {b4tray b4} def /B5 {b5tray b5} def /unknown {unknown} def papersizedict dup papername known {papername} {/unknown} ifelse get end statusdict begin stopped end } bind def /manualpapersize { papersizedict begin /Letter {letter} def /LetterSmall {lettersmall} def /Tabloid {11x17} def /Ledger {ledger} def /Legal {legal} def /Statement {statement} def /Executive {executive} def /A3 {a3} def /A4 {a4} def /A4Small {a4small} def /B4 {b4} def /B5 {b5} def /unknown {unknown} def papersizedict dup papername known {papername} {/unknown} ifelse get end stopped } bind def /desperatepapersize { statusdict /setpageparams known { paperwidth paperheight 0 1 statusdict begin {setpageparams} stopped end } {true} ifelse } bind def /papersizefailure { FMAllowPaperSizeMismatch not { (The requested paper size is not available in any currently-installed tray) (Edit the PS file to "FMAllowPaperSizeMismatch true" to use default tray) FMFAILURE } if } def /DiacriticEncoding [ /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /space /exclam /quotedbl /numbersign /dollar /percent /ampersand /quotesingle /parenleft /parenright /asterisk /plus /comma /hyphen /period /slash /zero /one /two /three /four /five /six /seven /eight /nine /colon /semicolon /less /equal /greater /question /at /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 /bracketleft /backslash /bracketright /asciicircum /underscore /grave /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 /braceleft /bar /braceright /asciitilde /.notdef /Adieresis /Aring /Ccedilla /Eacute /Ntilde /Odieresis /Udieresis /aacute /agrave /acircumflex /adieresis /atilde /aring /ccedilla /eacute /egrave /ecircumflex /edieresis /iacute /igrave /icircumflex /idieresis /ntilde /oacute /ograve /ocircumflex /odieresis /otilde /uacute /ugrave /ucircumflex /udieresis /dagger /.notdef /cent /sterling /section /bullet /paragraph /germandbls /registered /copyright /trademark /acute /dieresis /.notdef /AE /Oslash /.notdef /.notdef /.notdef /.notdef /yen /.notdef /.notdef /.notdef /.notdef /.notdef /.notdef /ordfeminine /ordmasculine /.notdef /ae /oslash /questiondown /exclamdown /logicalnot /.notdef /florin /.notdef /.notdef /guillemotleft /guillemotright /ellipsis /.notdef /Agrave /Atilde /Otilde /OE /oe /endash /emdash /quotedblleft /quotedblright /quoteleft /quoteright /.notdef /.notdef /ydieresis /Ydieresis /fraction /currency /guilsinglleft /guilsinglright /fi /fl /daggerdbl /periodcentered /quotesinglbase /quotedblbase /perthousand /Acircumflex /Ecircumflex /Aacute /Edieresis /Egrave /Iacute /Icircumflex /Idieresis /Igrave /Oacute /Ocircumflex /.notdef /Ograve /Uacute /Ucircumflex /Ugrave /dotlessi /circumflex /tilde /macron /breve /dotaccent /ring /cedilla /hungarumlaut /ogonek /caron ] def /ReEncode { dup length dict begin { 1 index /FID ne {def} {pop pop} ifelse } forall 0 eq {/Encoding DiacriticEncoding def} if currentdict end } bind def FMPColor { /BEGINBITMAPCOLOR { BITMAPCOLOR} def /BEGINBITMAPCOLORc { BITMAPCOLORc} def /BEGINBITMAPTRUECOLOR { BITMAPTRUECOLOR } def /BEGINBITMAPTRUECOLORc { BITMAPTRUECOLORc } def /BEGINBITMAPCMYK { BITMAPCMYK } def /BEGINBITMAPCMYKc { BITMAPCMYKc } def } { /BEGINBITMAPCOLOR { BITMAPGRAY} def /BEGINBITMAPCOLORc { BITMAPGRAYc} def /BEGINBITMAPTRUECOLOR { BITMAPTRUEGRAY } def /BEGINBITMAPTRUECOLORc { BITMAPTRUEGRAYc } def /BEGINBITMAPCMYK { BITMAPCMYKGRAY } def /BEGINBITMAPCMYKc { BITMAPCMYKGRAYc } def } ifelse /K { FMPrintAllColorsAsBlack { dup 1 eq 2 index 1 eq and 3 index 1 eq and not {7 {pop} repeat 0 0 0 1 0 0 0} if } if FrameCurColors astore pop combineColor } bind def /graymode true def fMLevel1 { /fmGetFlip { fMatrix2 exch get mul 0 lt { -1 } { 1 } ifelse } FmBD } if /setPatternMode { fMLevel1 { 2 index patScreenDict exch known { pop pop patScreenDict exch get aload pop freq mul 5 2 roll fMatrix2 currentmatrix 1 get 0 ne { 3 -1 roll 90 add 3 1 roll sflipx 1 fmGetFlip sflipy 2 fmGetFlip neg mul } { sflipx 0 fmGetFlip sflipy 3 fmGetFlip mul } ifelse 0 lt {exch pop} {pop} ifelse fMNegative { {neg} fmConcatProcs } if bind systemdict /setscreen get exec /FrameCurGray exch def } { /bwidth exch def /bpside exch def /bstring exch def /onbits 0 def /offbits 0 def freq sangle landscape {90 add} if {/ypoint exch def /xpoint exch def /xindex xpoint 1 add 2 div bpside mul cvi def /yindex ypoint 1 add 2 div bpside mul cvi def bstring yindex bwidth mul xindex 8 idiv add get 1 7 xindex 8 mod sub bitshift and 0 ne fMNegative {not} if {/onbits onbits 1 add def 1} {/offbits offbits 1 add def 0} ifelse } setscreen offbits offbits onbits add div fMNegative {1.0 exch sub} if /FrameCurGray exch def } ifelse } { pop pop dup patCache exch known { patCache exch get } { dup patDict /bstring 3 -1 roll put patDict 9 PatFreq screenIndex get div dup matrix scale makepattern dup patCache 4 -1 roll 3 -1 roll put } ifelse /FrameCurGray 0 def /FrameCurPat exch def } ifelse /graymode false def combineColor } bind def /setGrayScaleMode { graymode not { /graymode true def fMLevel1 { setCurrentScreen } if } if /FrameCurGray exch def combineColor } bind def /normalize { transform round exch round exch itransform } bind def /dnormalize { dtransform round exch round exch idtransform } bind def /lnormalize { 0 dtransform exch cvi 2 idiv 2 mul 1 add exch idtransform pop } bind def /H { lnormalize setlinewidth } bind def /Z { setlinecap } bind def /PFill { graymode fMLevel1 or not { gsave 1 setgray eofill grestore } if } bind def /PStroke { graymode fMLevel1 or not { gsave 1 setgray stroke grestore } if stroke } bind def /X { fillvals exch get dup type /stringtype eq {8 1 setPatternMode} {setGrayScaleMode} ifelse } bind def /V { PFill gsave eofill grestore } bind def /Vclip { clip } bind def /Vstrk { currentlinewidth exch setlinewidth PStroke setlinewidth } bind def /N { PStroke } bind def /Nclip { strokepath clip newpath } bind def /Nstrk { currentlinewidth exch setlinewidth PStroke setlinewidth } bind def /M {newpath moveto} bind def /E {lineto} bind def /D {curveto} bind def /O {closepath} bind def /L { /n exch def newpath normalize moveto 2 1 n {pop normalize lineto} for } bind def /Y { L closepath } bind def /R { /y2 exch def /x2 exch def /y1 exch def /x1 exch def x1 y1 x2 y1 x2 y2 x1 y2 4 Y } bind def /rarc {rad arcto } bind def /RR { /rad exch def normalize /y2 exch def /x2 exch def normalize /y1 exch def /x1 exch def mark newpath { x1 y1 rad add moveto x1 y2 x2 y2 rarc x2 y2 x2 y1 rarc x2 y1 x1 y1 rarc x1 y1 x1 y2 rarc closepath } stopped {x1 y1 x2 y2 R} if cleartomark } bind def /RRR { /rad exch def normalize /y4 exch def /x4 exch def normalize /y3 exch def /x3 exch def normalize /y2 exch def /x2 exch def normalize /y1 exch def /x1 exch def newpath normalize moveto mark { x2 y2 x3 y3 rarc x3 y3 x4 y4 rarc x4 y4 x1 y1 rarc x1 y1 x2 y2 rarc closepath } stopped {x1 y1 x2 y2 x3 y3 x4 y4 newpath moveto lineto lineto lineto closepath} if cleartomark } bind def /C { grestore gsave R clip setCurrentScreen } bind def /CP { grestore gsave Y clip setCurrentScreen } bind def /F { FMfonts exch get FMpointsize scalefont setfont } bind def /Q { /FMpointsize exch def F } bind def /T { moveto show } bind def /RF { rotate 0 ne {-1 1 scale} if } bind def /TF { gsave moveto RF show grestore } bind def /P { moveto 0 32 3 2 roll widthshow } bind def /PF { gsave moveto RF 0 32 3 2 roll widthshow grestore } bind def /S { moveto 0 exch ashow } bind def /SF { gsave moveto RF 0 exch ashow grestore } bind def /B { moveto 0 32 4 2 roll 0 exch awidthshow } bind def /BF { gsave moveto RF 0 32 4 2 roll 0 exch awidthshow grestore } bind def /G { gsave newpath normalize translate 0.0 0.0 moveto dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath PFill fill grestore } bind def /Gstrk { savematrix newpath 2 index 2 div add exch 3 index 2 div sub exch normalize 2 index 2 div sub exch 3 index 2 div add exch translate scale 0.0 0.0 1.0 5 3 roll arc restorematrix currentlinewidth exch setlinewidth PStroke setlinewidth } bind def /Gclip { newpath savematrix normalize translate 0.0 0.0 moveto dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath clip newpath restorematrix } bind def /GG { gsave newpath normalize translate 0.0 0.0 moveto rotate dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath PFill fill grestore } bind def /GGclip { savematrix newpath normalize translate 0.0 0.0 moveto rotate dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath clip newpath restorematrix } bind def /GGstrk { savematrix newpath normalize translate 0.0 0.0 moveto rotate dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath restorematrix currentlinewidth exch setlinewidth PStroke setlinewidth } bind def /A { gsave savematrix newpath 2 index 2 div add exch 3 index 2 div sub exch normalize 2 index 2 div sub exch 3 index 2 div add exch translate scale 0.0 0.0 1.0 5 3 roll arc restorematrix PStroke grestore } bind def /Aclip { newpath savematrix normalize translate 0.0 0.0 moveto dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath strokepath clip newpath restorematrix } bind def /Astrk { Gstrk } bind def /AA { gsave savematrix newpath 3 index 2 div add exch 4 index 2 div sub exch normalize 3 index 2 div sub exch 4 index 2 div add exch translate rotate scale 0.0 0.0 1.0 5 3 roll arc restorematrix PStroke grestore } bind def /AAclip { savematrix newpath normalize translate 0.0 0.0 moveto rotate dnormalize scale 0.0 0.0 1.0 5 3 roll arc closepath strokepath clip newpath restorematrix } bind def /AAstrk { GGstrk } bind def /BEGINPRINTCODE { /FMdicttop countdictstack 1 add def /FMoptop count 7 sub def /FMsaveobject save def userdict begin /showpage {} def FMNORMALIZEGRAPHICS 3 index neg 3 index neg translate } bind def /ENDPRINTCODE { count -1 FMoptop {pop pop} for countdictstack -1 FMdicttop {pop end} for FMsaveobject restore } bind def /gn { 0 { 46 mul cf read pop 32 sub dup 46 lt {exit} if 46 sub add } loop add } bind def /cfs { /str sl string def 0 1 sl 1 sub {str exch val put} for str def } bind def /ic [ 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0223 0 {0 hx} {1 hx} {2 hx} {3 hx} {4 hx} {5 hx} {6 hx} {7 hx} {8 hx} {9 hx} {10 hx} {11 hx} {12 hx} {13 hx} {14 hx} {15 hx} {16 hx} {17 hx} {18 hx} {19 hx} {gn hx} {0} {1} {2} {3} {4} {5} {6} {7} {8} {9} {10} {11} {12} {13} {14} {15} {16} {17} {18} {19} {gn} {0 wh} {1 wh} {2 wh} {3 wh} {4 wh} {5 wh} {6 wh} {7 wh} {8 wh} {9 wh} {10 wh} {11 wh} {12 wh} {13 wh} {14 wh} {gn wh} {0 bl} {1 bl} {2 bl} {3 bl} {4 bl} {5 bl} {6 bl} {7 bl} {8 bl} {9 bl} {10 bl} {11 bl} {12 bl} {13 bl} {14 bl} {gn bl} {0 fl} {1 fl} {2 fl} {3 fl} {4 fl} {5 fl} {6 fl} {7 fl} {8 fl} {9 fl} {10 fl} {11 fl} {12 fl} {13 fl} {14 fl} {gn fl} ] def /ms { /sl exch def /val 255 def /ws cfs /im cfs /val 0 def /bs cfs /cs cfs } bind def 400 ms /ip { is 0 cf cs readline pop { ic exch get exec add } forall pop } bind def /rip { bis ris copy pop is 0 cf cs readline pop { ic exch get exec add } forall pop pop ris gis copy pop dup is exch cf cs readline pop { ic exch get exec add } forall pop pop gis bis copy pop dup add is exch cf cs readline pop { ic exch get exec add } forall pop } bind def /rip4 { kis cis copy pop is 0 cf cs readline pop { ic exch get exec add } forall pop pop cis mis copy pop dup is exch cf cs readline pop { ic exch get exec add } forall pop pop mis yis copy pop dup dup add is exch cf cs readline pop { ic exch get exec add } forall pop pop yis kis copy pop 3 mul is exch cf cs readline pop { ic exch get exec add } forall pop } bind def /wh { /len exch def /pos exch def ws 0 len getinterval im pos len getinterval copy pop pos len } bind def /bl { /len exch def /pos exch def bs 0 len getinterval im pos len getinterval copy pop pos len } bind def /s1 1 string def /fl { /len exch def /pos exch def /val cf s1 readhexstring pop 0 get def pos 1 pos len add 1 sub {im exch val put} for pos len } bind def /hx { 3 copy getinterval cf exch readhexstring pop pop } bind def /wbytes { dup dup 8 gt { pop 8 idiv mul } { 8 eq {pop} {1 eq {7 add 8 idiv} {3 add 4 idiv} ifelse} ifelse } ifelse } bind def /BEGINBITMAPBWc { 1 {} COMMONBITMAPc } bind def /BEGINBITMAPGRAYc { 8 {} COMMONBITMAPc } bind def /BEGINBITMAP2BITc { 2 {} COMMONBITMAPc } bind def /COMMONBITMAPc { /cvtProc exch def /depth exch def gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /height exch def /width exch def /lb width depth wbytes def sl lb lt {lb ms} if /bitmapsave save def cvtProc /is im 0 lb getinterval def ws 0 lb getinterval is copy pop /cf currentfile def width height depth [width 0 0 height neg 0 height] {ip} image bitmapsave restore grestore } bind def /BEGINBITMAPBW { 1 {} COMMONBITMAP } bind def /BEGINBITMAPGRAY { 8 {} COMMONBITMAP } bind def /BEGINBITMAP2BIT { 2 {} COMMONBITMAP } bind def /COMMONBITMAP { /cvtProc exch def /depth exch def gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /height exch def /width exch def /bitmapsave save def cvtProc /is width depth wbytes string def /cf currentfile def width height depth [width 0 0 height neg 0 height] {cf is readhexstring pop} image bitmapsave restore grestore } bind def /ngrayt 256 array def /nredt 256 array def /nbluet 256 array def /ngreent 256 array def fMLevel1 { /colorsetup { currentcolortransfer /gryt exch def /blut exch def /grnt exch def /redt exch def 0 1 255 { /indx exch def /cynu 1 red indx get 255 div sub def /magu 1 green indx get 255 div sub def /yelu 1 blue indx get 255 div sub def /kk cynu magu min yelu min def /u kk currentundercolorremoval exec def % /u 0 def nredt indx 1 0 cynu u sub max sub redt exec put ngreent indx 1 0 magu u sub max sub grnt exec put nbluet indx 1 0 yelu u sub max sub blut exec put ngrayt indx 1 kk currentblackgeneration exec sub gryt exec put } for {255 mul cvi nredt exch get} {255 mul cvi ngreent exch get} {255 mul cvi nbluet exch get} {255 mul cvi ngrayt exch get} setcolortransfer {pop 0} setundercolorremoval {} setblackgeneration } bind def } { /colorSetup2 { [ /Indexed /DeviceRGB 255 {dup red exch get 255 div exch dup green exch get 255 div exch blue exch get 255 div} ] setcolorspace } bind def } ifelse /fakecolorsetup { /tran 256 string def 0 1 255 {/indx exch def tran indx red indx get 77 mul green indx get 151 mul blue indx get 28 mul add add 256 idiv put} for currenttransfer {255 mul cvi tran exch get 255.0 div} exch fmConcatProcs settransfer } bind def /BITMAPCOLOR { /depth 8 def gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /height exch def /width exch def /bitmapsave save def fMLevel1 { colorsetup /is width depth wbytes string def /cf currentfile def width height depth [width 0 0 height neg 0 height] {cf is readhexstring pop} {is} {is} true 3 colorimage } { colorSetup2 /is width depth wbytes string def /cf currentfile def 7 dict dup begin /ImageType 1 def /Width width def /Height height def /ImageMatrix [width 0 0 height neg 0 height] def /DataSource {cf is readhexstring pop} bind def /BitsPerComponent depth def /Decode [0 255] def end image } ifelse bitmapsave restore grestore } bind def /BITMAPCOLORc { /depth 8 def gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /height exch def /width exch def /lb width depth wbytes def sl lb lt {lb ms} if /bitmapsave save def fMLevel1 { colorsetup /is im 0 lb getinterval def ws 0 lb getinterval is copy pop /cf currentfile def width height depth [width 0 0 height neg 0 height] {ip} {is} {is} true 3 colorimage } { colorSetup2 /is im 0 lb getinterval def ws 0 lb getinterval is copy pop /cf currentfile def 7 dict dup begin /ImageType 1 def /Width width def /Height height def /ImageMatrix [width 0 0 height neg 0 height] def /DataSource {ip} bind def /BitsPerComponent depth def /Decode [0 255] def end image } ifelse bitmapsave restore grestore } bind def /BITMAPTRUECOLORc { /depth 24 def gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /height exch def /width exch def /lb width depth wbytes def sl lb lt {lb ms} if /bitmapsave save def /is im 0 lb getinterval def /ris im 0 width getinterval def /gis im width width getinterval def /bis im width 2 mul width getinterval def ws 0 lb getinterval is copy pop /cf currentfile def width height 8 [width 0 0 height neg 0 height] {width rip pop ris} {gis} {bis} true 3 colorimage bitmapsave restore grestore } bind def /BITMAPCMYKc { /depth 32 def gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /height exch def /width exch def /lb width depth wbytes def sl lb lt {lb ms} if /bitmapsave save def /is im 0 lb getinterval def /cis im 0 width getinterval def /mis im width width getinterval def /yis im width 2 mul width getinterval def /kis im width 3 mul width getinterval def ws 0 lb getinterval is copy pop /cf currentfile def width height 8 [width 0 0 height neg 0 height] {width rip4 pop cis} {mis} {yis} {kis} true 4 colorimage bitmapsave restore grestore } bind def /BITMAPTRUECOLOR { gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /height exch def /width exch def /bitmapsave save def /is width string def /gis width string def /bis width string def /cf currentfile def width height 8 [width 0 0 height neg 0 height] { cf is readhexstring pop } { cf gis readhexstring pop } { cf bis readhexstring pop } true 3 colorimage bitmapsave restore grestore } bind def /BITMAPCMYK { gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /height exch def /width exch def /bitmapsave save def /is width string def /mis width string def /yis width string def /kis width string def /cf currentfile def width height 8 [width 0 0 height neg 0 height] { cf is readhexstring pop } { cf mis readhexstring pop } { cf yis readhexstring pop } { cf kis readhexstring pop } true 4 colorimage bitmapsave restore grestore } bind def /BITMAPTRUEGRAYc { /depth 24 def gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /height exch def /width exch def /lb width depth wbytes def sl lb lt {lb ms} if /bitmapsave save def /is im 0 lb getinterval def /ris im 0 width getinterval def /gis im width width getinterval def /bis im width 2 mul width getinterval def ws 0 lb getinterval is copy pop /cf currentfile def width height 8 [width 0 0 height neg 0 height] {width rip pop ris gis bis width gray} image bitmapsave restore grestore } bind def /BITMAPCMYKGRAYc { /depth 32 def gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /height exch def /width exch def /lb width depth wbytes def sl lb lt {lb ms} if /bitmapsave save def /is im 0 lb getinterval def /cis im 0 width getinterval def /mis im width width getinterval def /yis im width 2 mul width getinterval def /kis im width 3 mul width getinterval def ws 0 lb getinterval is copy pop /cf currentfile def width height 8 [width 0 0 height neg 0 height] {width rip pop cis mis yis kis width cgray} image bitmapsave restore grestore } bind def /cgray { /ww exch def /k exch def /y exch def /m exch def /c exch def 0 1 ww 1 sub { /i exch def c i get m i get y i get k i get CMYKtoRGB .144 mul 3 1 roll .587 mul 3 1 roll .299 mul add add c i 3 -1 roll floor cvi put } for c } bind def /gray { /ww exch def /b exch def /g exch def /r exch def 0 1 ww 1 sub { /i exch def r i get .299 mul g i get .587 mul b i get .114 mul add add r i 3 -1 roll floor cvi put } for r } bind def /BITMAPTRUEGRAY { gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /height exch def /width exch def /bitmapsave save def /is width string def /gis width string def /bis width string def /cf currentfile def width height 8 [width 0 0 height neg 0 height] { cf is readhexstring pop cf gis readhexstring pop cf bis readhexstring pop width gray} image bitmapsave restore grestore } bind def /BITMAPCMYKGRAY { gsave 3 index 2 div add exch 4 index 2 div add exch translate rotate 1 index 2 div neg 1 index 2 div neg translate scale /height exch def /width exch def /bitmapsave save def /is width string def /yis width string def /mis width string def /kis width string def /cf currentfile def width height 8 [width 0 0 height neg 0 height] { cf is readhexstring pop cf mis readhexstring pop cf yis readhexstring pop cf kis readhexstring pop width cgray} image bitmapsave restore grestore } bind def /BITMAPGRAY { 8 {fakecolorsetup} COMMONBITMAP } bind def /BITMAPGRAYc { 8 {fakecolorsetup} COMMONBITMAPc } bind def /ENDBITMAP { } bind def end /ALDmatrix matrix def ALDmatrix currentmatrix pop /StartALD { /ALDsave save def savematrix ALDmatrix setmatrix } bind def /InALD { restorematrix } bind def /DoneALD { ALDsave restore } bind def /I { setdash } bind def /J { [] 0 setdash } bind def %%EndProlog %%BeginSetup (5.0) FMVERSION 1 1 0 0 612 792 0 1 6 FMDOCUMENT 0 0 /Times-Bold FMFONTDEFINE 1 0 /Times-Roman FMFONTDEFINE 2 0 /Times-Italic FMFONTDEFINE 32 FMFILLS 0 0 FMFILL 1 0.1 FMFILL 2 0.3 FMFILL 3 0.5 FMFILL 4 0.7 FMFILL 5 0.9 FMFILL 6 0.97 FMFILL 7 1 FMFILL 8 <0f1e3c78f0e1c387> FMFILL 9 <0f87c3e1f0783c1e> FMFILL 10 FMFILL 11 FMFILL 12 <8142241818244281> FMFILL 13 <03060c183060c081> FMFILL 14 <8040201008040201> FMFILL 16 1 FMFILL 17 0.9 FMFILL 18 0.7 FMFILL 19 0.5 FMFILL 20 0.3 FMFILL 21 0.1 FMFILL 22 0.03 FMFILL 23 0 FMFILL 24 FMFILL 25 FMFILL 26 <3333333333333333> FMFILL 27 <0000ffff0000ffff> FMFILL 28 <7ebddbe7e7dbbd7e> FMFILL 29 FMFILL 30 <7fbfdfeff7fbfdfe> FMFILL %%EndSetup %%Page: "1" 1 %%BeginPaperSize: Letter %%EndPaperSize 612 792 0 FMBEGINPAGE [0 0 0 1 0 0 0] [ 0 1 1 0 1 0 0] [ 1 0 1 0 0 1 0] [ 1 1 0 0 0 0 1] [ 1 0 0 0 0 1 1] [ 0 1 0 0 1 0 1] [ 0 0 1 0 1 1 0] 7 FrameSetSepColors FrameNoSep 0 0 0 1 0 0 0 K J 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 0 0 0 1 0 0 0 K 18 738 540 774 R 7 X 0 0 0 1 0 0 0 K V 0 16 Q 0 X ( W) 194.03 718.33 T (illiam McMahon) 249.74 718.33 T 0 12 Q (T) 90 677 T (erm Addr) 96.9 677 T (ess) 147.67 677 T ( Home Addr) 381 677 T (ess) 483.78 677 T 1 F (410 Memorial Dri) 90 663 T (v) 177.02 663 T (e 121 W) 182.84 663 T (arwick Road) 447.54 663 T (Cambridge, MA 02139) 90 649 T -1.94 ( Haddon\336eld, NJ 08033) 336.66 649 P 2 F (billmc@mit.edu) 90 635 T 0 11 Q (OBJECTIVE) 53.43 595.67 T 1 F (Emplo) 126 595.67 T (yment in computer aspects of ph) 155.23 595.67 T (ysics research.) 298.46 595.67 T 0 F (EDUCA) 50.82 570.67 T (TION) 88.88 570.67 T (Massachusetts Institute of T) 126 570.67 T (echnology) 257.29 570.67 T 1 F (Cambridge, MA) 467.89 570.67 T 0.8 (Candidate for Bachelor of Science de) 126 557.67 P 0.8 (grees in Ph) 294.49 557.67 P 0.8 (ysics and Electrical Engineering/Computer) 348.48 557.67 P 0.99 (Science, June 1997.Classes include Mechanics 1 and 2, Electricity and Magnetism 1 and 2,) 126 544.67 P -0.24 (Introduction to Solid State Chemistry) 126 531.67 P -0.24 (, V) 289.33 531.67 P -0.24 (ibrations and W) 301.87 531.67 P -0.24 (a) 370.78 531.67 P -0.24 (v) 375.44 531.67 P -0.24 (es, Quantum Ph) 380.78 531.67 P -0.24 (ysics 1 and 2, Statis-) 450.21 531.67 P -0.26 (tical Ph) 126 518.67 P -0.26 (ysics, Circuits and Electronics, Signals and Systems, Softw) 158.99 518.67 P -0.26 (are Engineering Lab, Junior) 417.98 518.67 P (Ph) 126 505.67 T (ysics Lab, Introduction to Design, Japanese 1, 2 , 3, 4.) 137.56 505.67 T 0 F (Haddon\336eld Memorial High School) 126 486.67 T 1 F (Haddon\336eld, NJ) 467.89 486.67 T 0.31 (Graduated in top 3% of class, G.P) 126 473.67 P 0.31 (.A. 97%. Acti) 276.31 473.67 P 0.31 (vities included: School debate team \050captain\051,) 337.45 473.67 P (Academic Challenge team, International Club, V) 126 460.67 T (arsity T) 340.16 460.67 T (ennis, Cross Country and T) 373.3 460.67 T (rack.) 493.61 460.67 T 0 F (EXPERIENCE) 44.88 435.67 T (NTT Data Communications Systems, Inc.) 126 435.67 T 1 F (Ka) 471.24 435.67 T (w) 483.9 435.67 T (aski, Japan) 491.73 435.67 T 0.14 (Summer 1996) 126 422.67 P 0 F 0.14 (.) 188.17 422.67 P 1 F 0.14 (P) 193.82 422.67 P 0.14 (art of MIT Japan Program. Designed and coded an interacti) 199.77 422.67 P 0.14 (v) 462.28 422.67 P 0.14 (e application for) 467.62 422.67 P 1.75 (the visualization of English historical data via 3D graphics on an SGI Indigo w) 126 409.67 P 1.75 (orkstation) 496 409.67 P (using C++ and Open In) 126 396.67 T (v) 229.01 396.67 T (entor) 234.35 396.67 T (.) 256.35 396.67 T 0 F (MIT Center f) 126 370.67 T (or Space Resear) 189.26 370.67 T (ch \050CSR\051) 264.82 370.67 T 1 F ( Cambridge, MA) 316.15 370.67 T 1.16 (Summer 1995. P) 126 357.67 P 1.16 (art of Under) 201.8 357.67 P 1.16 (graduate Research Opportunities Program \050UR) 257.68 357.67 P 1.16 (OP\051. De) 468.4 357.67 P 1.16 (v) 505.34 357.67 P 1.16 (eloped) 510.67 357.67 P 0.76 (softw) 126 344.67 P 0.76 (are for con) 150.33 344.67 P 0.76 (v) 199.05 344.67 P 0.76 (erting data from the ASCII standard to N) 204.38 344.67 P 0.76 (ASA) 389.85 344.67 P 0.76 (\325) 410.63 344.67 P 0.76 (s FITS standard using the C) 413.69 344.67 P 1.35 (Programming language and N) 126 331.67 P 1.35 (ASA) 261.94 331.67 P 1.35 (\325) 282.71 331.67 P 1.35 (s FITSIO routines. Data to be recei) 285.77 331.67 P 1.35 (v) 447.84 331.67 P 1.35 (ed from the X-Ray) 453.18 331.67 P 0.26 (T) 126 318.67 P 0.26 (iming Explorer \050XTE\051 satellite., launched at the end of the summer of \32495. Created data for) 132.34 318.67 P (image normalizing function.) 126 305.67 T 0 F (Department of Na) 126 286.67 T (vy) 210.65 286.67 T 1 F (Philadelphia, P) 466.45 286.67 T (A) 532.06 286.67 T 0.09 (Summer 1993. Science and Engineering Apprenticeship Program \050SEAP\051. Aided in establish-) 126 273.67 P 0.15 (ing and troubleshooting computer netw) 126 260.67 P 0.15 (ork on na) 299.43 260.67 P 0.15 (v) 341.06 260.67 P 0.15 (al base. W) 346.28 260.67 P 0.15 (ork included installation of cable,) 391.83 260.67 P (netw) 126 247.67 T (ork cards, and softw) 147.27 247.67 T (are.) 236.36 247.67 T 0 F (Other Experiences) 126 228.67 T 1 F 0.35 (Re) 126 215.67 P 0.35 (gular maintenance and cleaning of doctor\325) 138.06 215.67 P 0.35 (s of) 325.23 215.67 P 0.35 (\336ce, painting, construction of patio. Member) 341.5 215.67 P (of MIT Solar Electric V) 126 202.67 T (ehicle T) 230.48 202.67 T (eam, Franklin Institute Student Academy) 265.45 202.67 T (.) 445.91 202.67 T 0 F (PR) 29.93 177.67 T (OFICIENCIES) 44.27 177.67 T 1 F 0.47 (Languages: English, Japanese Computer skills: Programming in C, C++, FOR) 126 177.67 P 0.47 (TRAN, UNIX,) 473.85 177.67 P 1.86 (B) 126 164.67 P 1.86 (ASIC, HTML, SCHEME \050dialect of LISP\051, CLU, Open In) 132.95 164.67 P 1.86 (v) 404.61 164.67 P 1.86 (entor pro\336cienc) 409.95 164.67 P 1.86 (y with DOS,) 480.98 164.67 P 4.11 (W) 126 151.67 P 4.11 (indo) 135.94 151.67 P 4.11 (ws, X W) 155.23 151.67 P 4.11 (indo) 201.8 151.67 P 4.11 (ws, W) 221.09 151.67 P 4.11 (ordPerfect, Lotus 123, AutoCAD, ProEngineer) 252.42 151.67 P 4.11 (, Emacs, EZ,) 475.26 151.67 P (FrameMak) 126 138.67 T (er) 174.16 138.67 T (. .) 182.1 138.67 T 1.38 (A) 126 119.67 P 1.38 (w) 132.93 119.67 P 1.38 (ards/Honors: National Merit Scholarship Finalist, Eagle Scout, Co) 140.76 119.67 P 1.38 (v) 442.08 119.67 P 1.38 (enant Bank Scholar-) 447.42 119.67 P (ship, J. Fithian T) 126 106.67 T (atem Memorial Scholarship, National Honor Society) 199.38 106.67 T (.) 430.86 106.67 T 0 F (B) 37.6 81.67 T (A) 44.61 81.67 T (CKGR) 51.95 81.67 T (OUND) 84.62 81.67 T 1 F (Raised in Haddon\336eld, NJ in f) 126 81.67 T (amily of 8.) 259.72 81.67 T (Acti) 126 68.67 T (vities/hobbies: tennis, track, bask) 144.67 68.67 T (etball, v) 290.91 68.67 T (olle) 326.13 68.67 T (yball, computers, ph) 342.47 68.67 T (ysics, piano, reading.) 432.24 68.67 T FMENDPAGE %%EndPage: "1" 1 %%Trailer %%BoundingBox: 0 0 612 792 %%PageOrder: Ascend %%Pages: 1 %%DocumentFonts: Times-Bold %%+ Times-Roman %%+ Times-Italic %%EOF SHAR_EOF fi # end of overwriting check if test -f 'button.html' then echo shar: will not over-write existing file "'button.html'" else cat << "SHAR_EOF" > 'button.html' Button
Next

SHAR_EOF fi # end of overwriting check if test -f 'changes.html' then echo shar: will not over-write existing file "'changes.html'" else cat << "SHAR_EOF" > 'changes.html' SPRNG: Scalable Parallel Pseudo-Random Number Generator Library

Changes to SPRNG


Changes to version 0.5

  1. Fortran stream_number in calls to init_sprng now starts from 0 instead of from 1.

  2. A parallel Multiplicative Lagged Fibonacci Generator (mlfg) has been implemented.

  3. lcg64 and cmrg now use larger primes as addends. So the random number sequences will now be different from those in Version 0.5.

  4. Default parameter to init_sprng is called SPRNG_DEFAULT instead of DEFAULT.

  5. Several functions inlined, to improve speed.

  6. Directory 'include' contains the headers, and 'lib' the SPRNG libraries, instead of using 'SRC' and '.' respectively. If you have untarred SPRNG into a location where an old version is present, please remove your old interface.h, sprng.h, and sprng_f.h files in SRC and either make links to those in the 'include' directory, or copy them to SRC.

  7. SRC/make.GENERIC helps in installation on new machines.

  8. 'pack_sprng' now returns the state of a stream in a machine independent format that can be unpacked with 'unpack_sprng' (except for pmlcg, which still stores numbers in a machine dependent format). It may be incompatible with data stored in the version 0.5 format.


[Quick 
Start] [User's 
Guide] [Reference 
Manual] [Quick 
Reference] [Next: 
Installation]

SHAR_EOF fi # end of overwriting check if test -f 'checkpointer-interface.html' then echo shar: will not over-write existing file "'checkpointer-interface.html'" else cat << "SHAR_EOF" > 'checkpointer-interface.html' SPRNG: Scalable Parallel Pseudo-Random Number Generator Library

User's Guide: Usage:Interface With Pointer Checking


Interface with Pointer Checking

In this section, we describe the function calls available in the SPRNG interface with pointer checking. It is invoked by defining the macro CHECK_POINTERS before including a SPRNG header file. This interface would typically be used while debugging a program with more than one random number stream per process. The different streams are distinguished by unique ID's, which are implemented as pointers to memory locations where the states of the respective streams are stored. Most SPRNG functions take this stream ID as an argument. If the user passes an invalid ID as an argument, then this can lead to unpredictable behavior by SPRNG. This interface first checks to see if the ID is valid before using it, thus detecting the use of invalid ID's. In case an invalid ID is used, it responds as explained in the function descriptions below. A determined user can however subvert this checking system by freeing a stream directly without invoking the free_sprng function.

Users should note that this interface can slow down the program moderately. Its use is therefore recommended only while debugging. The default interface is identical to this interface, except that it is does not check for the validity of the ID's, and hence can be used once debugging has been completed.

Further details on each function can be found in the reference manual.

Pointers for FORTRAN users

The different random number streams available on a process are distinguished by unique ID's, which are implemented as pointers to the memory locations where the states of the respective streams are stored. Since standard FORTRAN 77 does not have a pointer type, we can store a pointer as an integer of the same size as a C pointer. We have defined a macro called SPRNG_POINTER in the file sprng_f.h that automatically defines an integer of the correct size on the platforms on which SPRNG is supported. The FORTRAN programmer can then use the type SPRNG_POINTER just as if it were a FORTRAN data type. However, this applies only if the FORTRAN program is compiled with the same flags as given in the make file that comes with SPRNG.

SPRNG Functions

We describe below the SPRNG function calls available in the interface with pointer checking. For each function, the C call is given first, followed by the FORTRAN call. The data type preceding the function name is the type returned by the function. The data types preceding the arguments to the functions are the data types of the corresponding function arguments.
1. init_sprng

int *init_sprng(int streamnum, int nstreams, int seed, int param)
SPRNG_POINTER init_sprng(integer streamnum, integer nstreams, integer seed, integer param)

init_sprng initializes random number streams. streamnum is the generator number and is typically the process number and must be in [0,nstreams-1]. nstreams is the number of different streams that will be initialized across all the processors and seed is the seed to the generators. The seed is not the starting state of the sequence; rather, it is an encoding of the starting state. It is acceptable (and recommended) to use the same seed for all the streams. The argument param selects the appropriate parameters (for example, the multiplier for a Linear Congruential Generator or the lag for a Lagged Fibonacci Generator). init_sprng returns the ID of the stream.

Example

2. sprng

double sprng(int *stream)
real*8 sprng(SPRNG_POINTER stream)

stream is the ID of the stream from which the next random number in [0,1) is returned by this function. If FORTRAN programmers wish to obtain real*4 numbers, or C programmers float numbers, instead of the double precision default, then they should define the macro FLOAT_GEN before including a SPRNG header file.

In case stream is an invalid ID, this function returns -1.0.

Example

3. isprng

int isprng(int *stream)
integer isprng(SPRNG_POINTER stream)

stream is the ID of the stream from which the next random integer in [0,231) is returned by this function. Calling isprng is equivalent to multiplying the result of sprng by 231 and truncating to an integer. Calls to sprng and isprng can be interleaved.

In case stream is an invalid ID, this function returns -1.

Example

4. print_sprng

int print_sprng(int *stream)
integer print_sprng(SPRNG_POINTER stream)

The user may wish to print information about streams after initialization or spawning, without printing the entire state This is typically used when the user wishes to record information which can later be used to identify the random number stream used in the computations. This information can be obtained by a call to print_sprng with the ID of the stream as argument.

In case stream is an invalid ID, this function returns 0.

Example

5. make_sprng_seed

int make_sprng_seed()
integer make_sprng_seed()

This function produces a new seed using system date and time information. It will typically be used when the programmer wishes to initialize with a different seed every time the program is run. User should note that both the Lagged Fibonacci Generators require the use of the same seed for each stream in order to guarantee their independence. In order to ensure this on a parallel computer, they should install the MPI version of SPRNG and define the macro USE_MPI before including a SPRNG header file. This function will then involves some inter-processor communication.

Example

6. pack_sprng

int pack_sprng(int *stream, char **buffer)
integer pack_sprng(SPRNG_POINTER stream, SPRNG_POINTER fbuffer)

This function packs the state of the stream with ID stream into an array and returns the number of bytes actually required for the storage. fbuffer should be the first element of an array of size MAX_PACKED_LENGTH bytes, where MAX_PACKED_LENGTH is a macro defined in "sprng_f.h" and "sprng.h". In the C interface, the programmer need not allocate memory. SPRNG allocates memory for the array and has the result stored in *buffer. This function can be used for check-pointing, where the programmer packs the state of the stream into an array and then saves it to a file. This state can later be retrieved by calling unpack_sprng, which is explained later. pack_sprng can also be used to pass a stream to another process. That process will unpack the array to obtain the stream.

In case stream is an invalid ID, this function returns 0.

Example

7. unpack_sprng

int *unpack_sprng(char *buffer)
SPRNG_POINTER unpack_sprng(SPRNG_POINTER buffer)

This function recreates a stream given the array buffer, which was used to store the stream's state through a call to the function pack_sprng. An ID for the recreated stream is returned. Note that this ID is unrelated to the previous ID of the stream before it was packed, though the states are the same.

Example

8. free_sprng

int free_sprng(int *stream)
integer free_sprng(SPRNG_POINTER stream)

This function frees the memory used to store information concerning the random number stream identified by the stream ID stream. The stream's ID is then no longer valid. free_sprng returns the current number of streams available on the process.

In case stream is an invalid ID, this function returns -1.

Example

9. spawn_sprng

int spawn_sprng(int *stream, int nspawned, int ***newstreams)
integer spawn_sprng(SPRNG_POINTER stream, integer nspawned, SPRNG_POINTER fnewstreams)

Some times, for example in branching processes, it is necessary to spawn new streams from an old one. This function creates new random number streams when given a stream ID stream and the number of new streams nspawned to be spawned. fnewstreams is the first element of an array of length at least nspawned in which the ID's of the new streams will be stored. In the C interface, SPRNG allocates memory for the array and makes *newstreams point to this array. spawn_sprng returns the number of streams spawned. If the function fails due to an inability to allocate memory, then the value returned is less than nspawned.

In case stream is an invalid ID, this function returns 0.

Example


[Quick 
Start] [User's 
Guide] [Reference 
Manual] [Quick 
Reference]

SHAR_EOF fi # end of overwriting check if test -f 'checkpointer-reference.html' then echo shar: will not over-write existing file "'checkpointer-reference.html'" else cat << "SHAR_EOF" > 'checkpointer-reference.html' SPRNG: Scalable Parallel Pseudo-Random Number Generator Library

Reference:Interface with Pointer Checking

Previous:Default Reference


Interface with Pointer Checking

In this section, we give detailed descriptions of each SPRNG function call with the interface with pointer checking. It is invoked by defining the macro CHECK_POINTERS before including a SPRNG header file. This interface would typically be used while debugging a program with more than one random number stream per process. The different streams are distinguished by unique ID's, which are implemented as pointers to memory locations where the states of the respective streams are stored. Most SPRNG functions take this stream ID as an argument. If the user passes an invalid ID as an argument, then this can lead to unpredictable behavior by SPRNG. This interface first checks to see if the ID is valid before using it. In case an invalid ID is used, it responds as explained in the function descriptions below. A determined user can however subvert this checking system by freeing a stream directly without invoking the free_sprng function.

Users should note that this interface can slow down the program moderately. Its use is therefore recommended only while debugging. The default interface is identical to this interface, except that it is does not check for the validity of the ID's, and hence can be used once debugging has been completed.

Pointers for FORTRAN users

The different random number streams available on a process are distinguished by unique ID's, which are implemented as pointers to the memory locations where the states of the respective streams are stored. Since standard FORTRAN 77 does not have a pointer type, we can store a pointer as an integer of the same size as a C pointer. We have defined a macro called SPRNG_POINTER in the file sprng_f.h that automatically defines an integer of the correct size on the platforms on which SPRNG is supported. A FORTRAN programmer can then use the type SPRNG_POINTER just as if it were a FORTRAN data type. However, this applies only if the FORTRAN program is compiled with the same flags as given in the make file that comes with SPRNG.

Terminology

In the following description, an argument marked as IN indicates that the argument, or array elements pointed to by that argument, are read by the function, but not modified. OUT indicates that the argument, or array elements pointed to by that argument, are written into by the function, but that its values are not used by the function. Arguments that are both read and modified are denoted by INOUT.

SPRNG Functions

We describe below the SPRNG function calls available in the interface with pointer checking. For each function, the C call is given first, followed by the FORTRAN call. The data type preceding the function name is the type returned by the function. The data types preceding the arguments to the functions are the data types of the corresponding function arguments.
1. init_sprng

int *init_sprng(int streamnum, int nstreams, int seed, int param)
SPRNG_POINTER init_sprng(integer streamnum, integer nstreams, integer seed, integer param)

IN streamnum, IN nstreams, IN seed, IN param.

init_sprng initializes random number streams.

nstreams is the number of distinct streams that will be initialized across all the processes and must be greater than 0. Otherwise it is reset to 1 and a warning message is sent to stderr stating that the number of streams has been reset.

streamnum is the stream number, typically the process number, and must be in [0,nstreams-1]. If it is not in the acceptable range, then an error message is sent to stderr and the function returns a NULL pointer. Note that the number of independent streams for each type of generator is limited (but at least 105). If streamnum is larger than this number, then a warning message is sent to stderr stating that the independence of streams cannot be guaranteed.

seed is the seed to the random number generator. It is not the starting state of the sequence; rather, it is an encoding of the starting state. It is acceptable (and recommended) to use the same seed for all the streams. Distinct streams are returned based on their seed and the stream number. Only the 31 least significant bits of seed are used in determining the initial starting state of the stream. Higher order bits that are set will be ignored. No warning message is printed if the higher order bits are set.

The argument param selects the appropriate parameters (for example, the multiplier for a Linear Congruential Generator or the lag for a Lagged Fibonacci Generator). The macro SPRNG_DEFAULT, defined in the SPRNG header files, can be used to choose the default parameters. If an invalid parameter is passed to this function, then a warning message is sent to stderr and the default parameter is used.

init_sprng returns the ID of the stream when it completes successfully. If it fails due to incorrect arguments or inability to allocate memory, then an error message is sent to stderr and a NULL pointer is returned.

Example

2. sprng

double sprng(int *stream)
real*8 sprng(SPRNG_POINTER stream)

INOUT stream.

stream is the ID of the stream from which the next random number in [0,1) is returned by this function. This argument must have been obtained by a prior call to init_sprng, spawn_sprng or unpack_sprng. In case stream is an invalid ID, this function returns -1.0.

If FORTRAN programmers wish to obtain real*4 numbers, or C programmers float numbers, instead of the double precision default, then they should define the macro FLOAT_GEN before including a SPRNG header file.

Example

3. isprng

int isprng(int *stream)
integer isprng(SPRNG_POINTER stream)

INOUT stream.

stream is the ID of the stream from which the next random integer in [0,231) is returned by this function. This argument must have been obtained by a prior call to init_sprng, spawn_sprng or unpack_sprng. In case stream is an invalid ID, this function returns -1.

Calling isprng is equivalent to multiplying the result of sprng by 231 and truncating to an integer. Calls to sprng and isprng can be interleaved.

Example

4. print_sprng

int print_sprng(int *stream)
integer print_sprng(SPRNG_POINTER stream)

IN stream .

The user may wish to print information about streams without printing the entire state, for example after initialization. This is typically done when the user wishes to record information which can later be used to identify the random number stream used in the computations. This information can be obtained by a call to print_sprng with the ID of the stream as argument. stream must have been obtained by a prior call to init_sprng, spawn_sprng or unpack_sprng. In case stream is an invalid ID, this function returns 0. Otherwise it returns a non-zero value.

Example

5. make_sprng_seed

int make_sprng_seed()
integer make_sprng_seed()

This function produces a new seed using system date and time information. It will typically be used when the programmer wishes to initialize with a different seed every time the program is run. User should note that both the Lagged Fibonacci Generators require the use of the same seed for each stream in order to guarantee their independence. In order to ensure this on a parallel computer, they should install the MPI version of SPRNG and define the macro USE_MPI before including a SPRNG header file. This function will then involves some inter-processor communication.

If the user has installed the MPI version of the library but has not defined the macro USE_MPI, then the seed could be different on the different processes. No warning message is printed. If the user has not installed the MPI version of the library but includes the macro USE_MPI, then link time errors will be reported by the compiler.

Note: If users have installed the MPI version of the library and defined the macro USE_MPI, then they must call MPI_Init before making calls to make_sprng_seed. The user should also call MPI_Finalize later. SPRNG does not make either of these calls. If any process calls make_sprng_seed, then users should ensure that all their processes call this function, since collective MPI operations are performed here.

Example

6. pack_sprng

int pack_sprng(int *stream, char **buffer)
integer pack_sprng(SPRNG_POINTER stream, character fbuffer)

IN stream, OUT buffer, OUT fbuffer.

This function packs the state of the stream with ID stream into an array and returns the number of bytes actually required for the storage. stream must have been obtained by a prior call to init_sprng, spawn_sprng or unpack_sprng. In case stream is an invalid ID, this function returns 0.

fbuffer should be the first element of an array of size MAX_PACKED_LENGTH bytes, where MAX_PACKED_LENGTH is a macro defined in "sprng_f.h" and "sprng.h". If the memory in the array is insufficient, undetected errors could occur. It might also lead to segmentation faults. In the C interface, the programmer need not allocate memory. SPRNG allocates memory for the array and has the result stored in *buffer.

Calls to this function in C or FORTRAN involve memory allocation within this function. In case of insufficient memory, an error message is sent to stderr and the value 0 is returned.

This function can be used for check-pointing, where the programmer packs the state of the stream into an array and then saves it to a file. This state can later be retrieved by calling unpack_sprng, which is explained below. pack_sprng can also be used to pass a stream to another process. That process will unpack the packed array to obtain the stream.

Note: SPRNG does not free the memory associated with a stream when it packs it. If users do not plan to use the stream that has been packed, then they can explicitly call free_sprng in order to free the memory.

Example

7. unpack_sprng

int *unpack_sprng(char *buffer)
SPRNG_POINTER unpack_sprng(character fbuffer)

IN buffer, IN fbuffer.

This function recreates a stream given the array buffer or fbuffer, which was used to store the stream's state through a call to the function pack_sprng. An ID for the recreated stream is returned. Note that this ID is unrelated to the previous ID of the stream before it was packed, though the states are the same.

Calls to this function involve memory allocation. In case sufficient memory was not obtained, an error message is sent to stderr and the NULL pointer is returned. The packed string must be the state of a valid stream. If it is not, the error may not necessarily be detected by SPRNG. If an error is detected, then an error message is sent to stderr and a NULL pointer is returned.

Example

8. free_sprng

int free_sprng(int *stream)
integer free_sprng(SPRNG_POINTER stream)

INOUT stream.

This function frees the memory used to store information concerning the random number stream identified by the stream ID stream. The stream's ID is then no longer valid. stream must have been obtained by a prior call to init_sprng, spawn_sprng or unpack_sprng. In case stream is an invalid ID, this function returns -1.

free_sprng returns the current number of streams available on the process.

Example

9. spawn_sprng

int spawn_sprng(int *stream, int nspawned, int ***newstreams)
integer spawn_sprng(SPRNG_POINTER stream, integer nspawned, SPRNG_POINTER fnewstreams)

INOUT stream, IN nspawned, OUT newstreams, OUT fnewstreams .

Some times, for example in branching processes, it is necessary to spawn new streams from an old one. This function creates new random number streams when given a stream ID stream and the number of new streams nspawned to be spawned.

stream must have been obtained by a prior call to init_sprng, spawn_sprng or unpack_sprng. In case stream is an invalid ID, this function returns 0.

nspawned is the number of streams that will be spawned and must be greater than 0. Otherwise it is reset to 1 and a warning message is sent to stderr stating that the number of streams has been reset. In the unlikely event of an extremely large number of streams being spawned, SPRNG cannot guarantee the independence of the different streams. In this case, a warning message is sent to stderr. We may also change the seed of the new streams spawned in this case to make it less likely that different streams will overlap.

fnewstreams is the first element of an array of length at least nspawned in which the ID's of the new streams will be stored. In the C interface, SPRNG allocates memory for the array and makes *newstreams point to it.

spawn_sprng returns the number of streams successfully spawned. If the function fails due to an inability to allocate memory, then the value returned is less than nspawned. If the function fails due to an incorrect value of stream, then the returned value is 0.

Note: If users spawn too often, then the available set independent streams can get exhausted, depending on the random number generator used. Therefore some caution must be used in spawning streams.

Example


[Quick 
Start] [User's 
Guide] [Reference 
Manual] [Quick 
Reference]

SHAR_EOF fi # end of overwriting check if test -f 'checksprng.html' then echo shar: will not over-write existing file "'checksprng.html'" else cat << "SHAR_EOF" > 'checksprng.html' SPRNG: Scalable Parallel Pseudo-Random Number Generator Library

User's Guide: Installation:Checking the Libraries


Checking the SPRNG Libraries

On building the SPRNG library, six executables will also be created for each SPRNG random number generator library available. Three of these test the three interfaces in FORTRAN and the other three repeat the process in C. These tests check, among other things, whether the expected stream of random numbers is reproduced on the user's machine. They also check whether SPRNG responds as per its specifications when the user gives invalid arguments.

We have provided a shell script called checksprng that calls all the test programs. Since we check the libraries for their response to erroneous usage by the programmer, the tests make SPRNG print out ERROR messages to stderr. We redirect stderr to /dev/null so as not to clutter up the screen with unnecessary information. checksprng is run in the Bourne shell since, unlike in the C shell, it is possible here to redirect standard error without redirecting the standard output.

The programs that check the generators do not make MPI calls, as a default. If users wish to test them with the MPI calls when the MPI version of SPRNG has been installed, then they should compile these programs after defining the macro USE_MPI and test each checking program individually. Users may get several ERROR and WARNING messages on the screen as SPRNG is checked for its response to erroneous input. These messages can be ignored. If SPRNG fails any test, the user will get a FAILED message rather than an ERROR message.

Please report any problems in porting SPRNG.


[Quick 
Start] [User's 
Guide] [Reference 
Manual] [Quick 
Reference]

SHAR_EOF fi # end of overwriting check if test -f 'compilation.html' then echo shar: will not over-write existing file "'compilation.html'" else cat << "SHAR_EOF" > 'compilation.html' SPRNG: Scalable Parallel Pseudo-Random Number Generator Library

User's Guide: Usage:Compilation

Next:Examples Previous:Usage


Compilation

Compiling with the Non-MPI version of SPRNG

SPRNG currently consists of five libraries for random number generation. The library libcmrg.a generates streams from the Combine Multiple Recursive Generator, liblcg.a from the 48 bit Linear Congruential Generator, liblcg64.a from the 64 bit Linear Congruential Generator, liblfg.a from the modified Lagged Fibonacci Generator, and libpmlcg.a from the Prime Modulus Linear Congruential Generator. (The last one is not automatically installed.) In the current implementation, the user can generate streams only from one of these libraries in a given program. However, the user can easily change between different generators in different runs by just changing the library linked to, and does not need to recompile the code.

In order to use a library, the programmer needs to link the code to the desired library. This is generally done by using the following linking option: -Llibdir -llib where libdir is the path to the SPRNG libraries, and liblib.a is the particular SPRNG library from which the user desires to generate random numbers. We have provided examples for compilation on different platforms.

If the size of a pointer is 8 bytes, then either the macro SPRNG_POINTER=8 should be defined before including the header file, or this should be done through a compiler option (typically -DSPRNG_POINTER=8). Please take a look at the make.PLAT file of your platform for the correct setting.

In order to compile programs, the user must also indicate the location of the SPRNG header files. This is generally done by passing the -Isrcdir option to the compiler, where srcdir is the path to the SPRNG SRC directory.

The compilation syntax may therefore be one of the following on most compilers:

CC -Isrcdir filename.c -Llibdir -llib
F77 -Isrcdir filename.F -Llibdir -llib

where CC is the C compiler and F77 is the FORTRAN compiler. FORTRAN users may also wish to read the note on preprocessor directives.

We have also provided examples for compilation on different platforms.

Compiling with the MPI version of SPRNG

If the MPI version of SPRNG has been installed, then the user will have to link to the MPI libraries too, in addition to the SPRNG libraries mentioned above. Thus the following syntax for the compilation may be used on most compilers:

CC -Isrcdir filename.c -Llibdir -llib -Lmpidir -lmpilib
F77 -Isrcdir filename.F -Llibdir -llib -Lmpidir -lmpilib

where mpidir is the path to the MPI library and libmpilib.a is the name of the MPI library. The MPI library must be linked after the SPRNG library. We have provided examples for compilation on different platforms.


[Quick 
Start] [User's 
Guide] [Reference 
Manual] [Quick 
Reference] [Next: 
Examples]

SHAR_EOF fi # end of overwriting check if test -f 'default-interface.html' then echo shar: will not over-write existing file "'default-interface.html'" else cat << "SHAR_EOF" > 'default-interface.html' SPRNG: Scalable Parallel Pseudo-Random Number Generator Library

User's Guide: Usage:Default Interface


SPRNG Default Interface

In this section, we describe the function calls available in the default SPRNG interface. This interface would typically be used if more than one random number stream is needed on any process.

Further details on each function can be found in the section in the reference manual.

Pointers for FORTRAN users

The different random number streams available on a processor are distinguished by unique ID's, which are implemented as pointers to the memory locations where the states of the respective streams are stored. Since standard FORTRAN 77 does not have a pointer type, we can store a pointer as an integer of the same size as a C pointer. We have defined a macro called SPRNG_POINTER in the file sprng_f.h that automatically defines an integer of the correct size on the platforms on which SPRNG is supported. The FORTRAN programmer can then use the type SPRNG_POINTER just as if it were a FORTRAN data type. However, this applies only if the FORTRAN program is compiled with the same flags as given in the make file that comes with SPRNG.

SPRNG Functions

We describe below the SPRNG function calls available in the default interface. For each function, the C call is given first, followed by the FORTRAN call. The data type preceding the function name is the type returned by the function. The data types preceding the arguments to the functions are the data types of the corresponding function arguments.
1. init_sprng

int *init_sprng(int streamnum, int nstreams, int seed, int param)
SPRNG_POINTER init_sprng(integer streamnum, integer nstreams, integer seed, integer param)

init_sprng initializes random number streams. streamnum is the stream number and is typically the process number and must be in [0,nstreams-1]. nstreams is the number of different streams that will be initialized across all the processes and seed is the seed to the generators. The seed is not the starting state of the sequence; rather, it is an encoding of the starting state. It is acceptable (and recommended) to use the same seed for all the streams. The argument param selects the appropriate parameters (for example, the multiplier for a Linear Congruential Generator or the lag for a Lagged Fibonacci Generator). init_sprng returns the ID of the stream.

Example

2. sprng

double sprng(int *stream)
real*8 sprng(SPRNG_POINTER stream)

stream is the ID of the stream from which the next random number in [0,1) is returned by this function. If FORTRAN programmers wish to obtain real*4 numbers, or C programmers float numbers, instead of the double precision default, then they should define the macro FLOAT_GEN before including a SPRNG header file.

Example

3. isprng

int isprng(int *stream)
integer isprng(SPRNG_POINTER stream)

stream is the ID of the stream from which the next random integer in [0,231) is returned by this function. Calling isprng is equivalent to multiplying the result of sprng by 231 and truncating to an integer. Calls to sprng and isprng can be interleaved.

Example

4. print_sprng

int print_sprng(int *stream)
integer print_sprng(SPRNG_POINTER stream)

The user may wish to print information about streams after initialization or spawning, without printing the entire state This is typically used when the user wishes to record information which can later be used to identify the random number stream used in the computations. This information can be obtained by a call to print_sprng with the ID of the stream as argument.

Example

5. make_sprng_seed

int make_sprng_seed()
integer make_sprng_seed()

This function produces a new seed using system date and time information. It will typically be used when the programmer wishes to initialize with a different seed every time the program is run. User should note that both the Lagged Fibonacci Generators require the use of the same seed for each stream in order to guarantee their independence. In order to ensure this on a parallel computer, they should install the MPI version of SPRNG and define the macro USE_MPI before including a SPRNG header file. This function will then involves some inter-processor communication.

Example

6. pack_sprng

int _sprng(int *stream, char **buffer)
integer pack_sprng(SPRNG_POINTER stream, SPRNG_POINTER fbuffer)

This function packs the state of the stream with ID stream into an array and returns the number of bytes actually required for the storage. fbuffer should be the first element of an array of size MAX_PACKED_LENGTH bytes, where MAX_PACKED_LENGTH is a macro defined in "sprng_f.h" and "sprng.h". If the memory in the array is insufficient, undetected errors could occur. It might also lead to segmentation faults. In the C interface, the programmer need not allocate memory. SPRNG allocates memory for the array and has the result stored in *buffer. This function can be used for check-pointing, where the programmer packs the state of the stream into an array and then saves it to a file. This state can later be retrieved by calling unpack_sprng, which is explained later. pack_sprng can also be used to pass a stream to another process. That process will unpack the array to obtain the stream.

Example

7. unpack_sprng

int *unpack_sprng(char *buffer)
SPRNG_POINTER unpack_sprng(SPRNG_POINTER buffer)

This function recreates a stream given the array buffer, which was used to store the stream's state through a call to the function pack_sprng. An ID for the recreated stream is returned. Note that this ID is unrelated to the previous ID of the stream before it was packed, though the states are the same.

Example

8. free_sprng

int free_sprng(int *stream)
integer free_sprng(SPRNG_POINTER stream)

This function frees the memory used to store information concerning the random number stream identified by the stream ID stream. The stream's ID is then no longer valid. free_sprng returns the current number of streams available on the process.

Example

9. spawn_sprng

int spawn_sprng(int *stream, int nspawned, int ***newstreams)
integer spawn_sprng(SPRNG_POINTER stream, integer nspawned, SPRNG_POINTER fnewstreams)

Some times, for example in branching processes, it is necessary to spawn new streams from an old one. This function creates new random number streams when given a stream ID stream and the number of new streams nspawned to be spawned. fnewstreams is the first element of an array of length at least nspawned in which the ID's of the new streams will be stored. In the C interface, SPRNG allocates memory for the array and makes *newstreams point to this array. spawn_sprng returns the number of streams spawned. If the function fails due to an inability to allocate memory, then the value returned is less than nspawned.

Example


[Quick 
Start] [User's 
Guide] [Reference 
Manual] [Quick 
Reference]

SHAR_EOF fi # end of overwriting check if test -f 'default-reference.html' then echo shar: will not over-write existing file "'default-reference.html'" else cat << "SHAR_EOF" > 'default-reference.html' SPRNG: Scalable Parallel Pseudo-Random Number Generator Library

Reference:Default Interface

Next:Interface with Checkpointing Previous:Simple Interface


Default Interface

In this section, we give detailed descriptions of each SPRNG function call with the default interface. This interface would typically be used if more than one random number stream is needed on any process.

Pointers for FORTRAN users

The different random number streams available on a process are distinguished by unique ID's, which are implemented as pointers to the memory locations where the states of the respective streams are stored. Since standard FORTRAN 77 does not have a pointer type, we can store a pointer as an integer of the same size as a C pointer. We have defined a macro called SPRNG_POINTER in the file sprng_f.h that automatically defines an integer of the correct size on the platforms on which SPRNG is supported. A FORTRAN programmer can then use the type SPRNG_POINTER just as if it were a FORTRAN data type. However, this applies only if the FORTRAN program is compiled with the same flags as given in the make file that comes with SPRNG.

Terminology

In the following description, an argument marked as IN indicates that the argument, or array elements pointed to by that argument, are read by the function, but not modified. OUT indicates that the argument, or array elements pointed to by that argument, are written into by the function, but that its values are not used by the function. Arguments that are both read and modified are denoted by INOUT.

SPRNG Functions

We describe below the SPRNG function calls available in the default interface. For each function, the C call is given first, followed by the FORTRAN call. The data type preceding the function name is the type returned by the function. The data types preceding the arguments to the functions are the data types of the corresponding function arguments.
1. init_sprng

int *init_sprng(int streamnum, int nstreams, int seed, int param)
SPRNG_POINTER init_sprng(integer streamnum, integer nstreams, integer seed, integer param)

IN streamnum, IN nstreams, IN seed, IN param.

init_sprng initializes random number streams.

nstreams is the number of distinct streams that will be initialized across all the processes and must be greater than 0. Otherwise it is reset to 1 and a warning message is sent to stderr stating that the number of streams has been reset.

streamnum is the stream number, typically the processor number, and must be in [0,nstreams-1]. If it is not in the acceptable range, then an error message is sent to stderr and the function returns a NULL pointer. Note that the number of independent streams for each type of generator is limited (but at least 105). If streamnum is larger than this number, then a warning message is sent to stderr stating that the independence of streams cannot be guaranteed.

seed is the seed to the random number generator. It is not the starting state of the sequence; rather, it is an encoding of the starting state. It is acceptable (and recommended) to use the same seed for all the streams. Distinct streams are returned based on their seed and the stream number. Only the 31 least significant bits of seed are used in determining the initial starting state of the stream. Higher order bits that are set will be ignored. No warning message is printed if the higher order bits are set.

The argument param selects the appropriate parameters (for example, the multiplier for a Linear Congruential Generator or the lag for a Lagged Fibonacci Generator). The macro SPRNG_DEFAULT, defined in the SPRNG header files, can be used to choose the default parameters. If an invalid parameter is passed to this function, then a warning message is sent to stderr and the default parameter is used.

init_sprng returns the ID of the stream when it completes successfully. If it fails due to incorrect arguments or inability to allocate memory, then an error message is sent to stderr and a NULL pointer is returned.

Example

2. sprng

double sprng(int *stream)
real*8 sprng(SPRNG_POINTER stream)

INOUT stream.

stream is the ID of the stream from which the next random number in [0,1) is returned by this function. This argument must have been obtained by a prior call to init_sprng, spawn_sprng or unpack_sprng. In the default interface, SPRNG does not check for the validity of the ID. Incorrect answers or segmentation faults could occur due to invalid ID's. In case the user wishes SPRNG to check for the validity of the ID, then the interface with pointer checking must be used.

If FORTRAN programmers wish to obtain real*4 numbers, or C programmers float numbers, instead of the double precision default, then they should define the macro FLOAT_GEN before including a SPRNG header file.

Example

3. isprng

int isprng(int *stream)
integer isprng(SPRNG_POINTER stream)

INOUT stream.

stream is the ID of the stream from which the next random integer in [0,231) is returned by this function. This argument must have been obtained by a prior call to init_sprng, spawn_sprng or unpack_sprng. In this interface, SPRNG does not check for the validity of the ID. Incorrect answers or segmentation faults could occur due to invalid ID's. In case the user wishes SPRNG to check for the validity of the ID, then the interface with pointer checking must be used.

Calling isprng is equivalent to multiplying the result of sprng by 231 and truncating to an integer. Calls to sprng and isprng can be interleaved.

Example

4. print_sprng

int print_sprng(int *stream)
integer print_sprng(SPRNG_POINTER stream)

IN stream .

The user may wish to print information about streams without printing the entire state, for example after initialization. This is typically done when the user wishes to record information which can later be used to identify the random number stream used in the computations. This information can be obtained by a call to print_sprng with the ID of the stream as argument. stream must have been obtained by a prior call to init_sprng, spawn_sprng or unpack_sprng. In this interface, SPRNG does not check for the validity of the ID. Incorrect answers or segmentation faults could occur due to invalid ID's. In case the user wishes SPRNG to check for the validity of the ID, then the interface with pointer checking must be used.

Example

5. make_sprng_seed

int make_sprng_seed()
integer make_sprng_seed()

This function produces a new seed using system date and time information. It will typically be used when the programmer wishes to initialize with a different seed every time the program is run. User should note that both the Lagged Fibonacci Generators requires the use of the same seed for each stream in order to guarantee their independence. In order to ensure this on a parallel computer, they should install the MPI version of SPRNG and define the macro USE_MPI before including a SPRNG header file. This function will then involves some inter-processor communication.

If the user has installed the MPI version of the library but has not defined the macro USE_MPI, then the seed could be different on the different processes. No warning message is printed. If the user has not installed the MPI version of the library but includes the macro USE_MPI, then link time errors will be reported by the compiler.

Note: If users have installed the MPI version of the library and defined the macro USE_MPI, then they must call MPI_Init before making calls to make_sprng_seed. The user should also call MPI_Finalize later. SPRNG does not make either of these calls. If any process calls make_sprng_seed, then users should ensure that all their processes call this function, since collective MPI operations are performed here.

Example

6. pack_sprng

int pack_sprng(int *stream, char **buffer)
integer pack_sprng(SPRNG_POINTER stream, character fbuffer)

IN stream, OUT buffer, OUT fbuffer.

This function packs the state of the stream with ID stream into an array and returns the number of bytes actually required for the storage. stream must have been obtained by a prior call to init_sprng, spawn_sprng or unpack_sprng. In this interface, SPRNG does not check for the validity of the ID. Incorrect answers or segmentation faults could occur due to invalid ID's. In case the user wishes SPRNG to check for the validity of the ID, then the interface with pointer checking must be used.

fbuffer should be the first element of an array of size MAX_PACKED_LENGTH bytes, where MAX_PACKED_LENGTH is a macro defined in "sprng_f.h" and "sprng.h". If the memory in the array is insufficient, undetected errors could occur. It might also lead to segmentation faults. In the C interface, the programmer need not allocate memory. SPRNG allocates memory for the array and has the result stored in *buffer.

Calls to this function in C or FORTRAN involve memory allocation within this function. In case of insufficient memory, an error message is sent to stderr and the value 0 is returned.

This function can be used for check-pointing, where the programmer packs the state of the stream into an array and then saves it to a file. This state can later be retrieved by calling unpack_sprng, which is explained below. pack_sprng can also be used to pass a stream to another process. That process will unpack the packed array to obtain the stream.

Note: SPRNG does not free the memory associated with a stream when it packs it. If users do not plan to use the stream that has been packed, then they can explicitly call free_sprng in order to free the memory.

Example

7. unpack_sprng

int *unpack_sprng(char *buffer)
SPRNG_POINTER unpack_sprng(character fbuffer)

IN buffer, IN fbuffer.

This function recreates a stream given the array buffer or fbuffer, which was used to store the stream's state through a call to the function pack_sprng. An ID for the recreated stream is returned. Note that this ID is unrelated to the previous ID of the stream before it was packed, though the states are the same.

Calls to this function involve memory allocation. In case sufficient memory was not obtained, an error message is sent to stderr and the NULL pointer is returned. The packed string must be the state of a valid stream. If it is not, the error may not necessarily be detected by SPRNG. If an error is detected, then an error message is sent to stderr and a NULL pointer is returned.

Example

8. free_sprng

int free_sprng(int *stream)
integer free_sprng(SPRNG_POINTER stream)

INOUT stream.

This function frees the memory used to store information concerning the random number stream identified by the stream ID stream. The stream's ID is then no longer valid. stream must have been obtained by a prior call to init_sprng, spawn_sprng or unpack_sprng. In this interface, SPRNG does not check for the validity of the ID. Incorrect answers or segmentation faults could occur due to invalid ID's. In case the user wishes SPRNG to check for the validity of the ID, then the interface with pointer checking must be used.

free_sprng returns the current number of streams available on the process.

Example

9. spawn_sprng

int spawn_sprng(int *stream, int nspawned, int ***newstreams)
integer spawn_sprng(SPRNG_POINTER stream, integer nspawned, SPRNG_POINTER fnewstreams)

INOUT stream, IN nspawned, OUT newstreams, OUT fnewstreams .

Some times, for example in branching processes, it is necessary to spawn new streams from an old one. This function creates new random number streams when given a stream ID stream and the number of new streams nspawned to be spawned.

stream must have been obtained by a prior call to init_sprng, spawn_sprng or unpack_sprng. In this interface, SPRNG does not check for the validity of the ID. Incorrect answers or segmentation faults could occur due to invalid ID's. In case the user wishes SPRNG to check for the validity of the ID, then the interface with pointer checking must be used.

nspawned is the number of streams that will be spawned and must be greater than 0. Otherwise it is reset to 1 and a warning message is sent to stderr stating that the number of streams has been reset. In the unlikely event of an extremely large number of streams being spawned, SPRNG cannot guarantee the independence of the different streams. In this case, a warning message is sent to stderr. We may also change the seed of the new streams spawned in this case to make it less likely that different streams will overlap.

fnewstreams is the first element of an array of length at least nspawned in which the ID's of the new streams will be stored. In the C interface, SPRNG allocates memory for the array and makes *newstreams point to this array.

spawn_sprng returns the number of streams successfully spawned. If the function fails due to an inability to allocate memory, then the value returned is less than nspawned.

Note: If users spawn too often, then the available set independent streams can get exhausted, depending on the random number generator used. Therefore some caution must be used in spawning streams.

Example


[Quick Start] [User's Guide] [Reference Manual] [Quick Reference] [Next: Interface with Pointer Checking]

SHAR_EOF fi # end of overwriting check if test -f 'definitions.html' then echo shar: will not over-write existing file "'definitions.html'" else cat << "SHAR_EOF" > 'definitions.html' SPRNG: Scalable Parallel Pseudo-Random Number Generator Library

User's Guide:Glossary

Next:References Previous:Test Suite


Explanation of Terms

Check-Pointing

Users may sometimes wish to save the states of random number streams into a file. This is typically done for the following two reasons:

  1. In case the system the user is working on is unreliable, the user may want to save the state of the calculations into a file, once in a while. If the system crashes, then the user can recover the state of the calculations from the file and continue from that point onwards, instead of repeating the entire calculations.

  2. Users may not wish to perform the entire calculations all at one time. This may either be because they are not sure if the calculations are worth continuing until they have obtained some intermediate results, or because system time is less expensive during certain times of the day. In the latter case they may perform the calculations every day during such cheaper periods.

In both the cases mentioned above, users will need to store the states of random number streams so that they can start from where they had left off the previous time. SPRNG provides a function that returns the state of a random number stream as an array of characters. Users can store this array into a file. They can later read the stored information back into a character array. SPRNG provides a function to obtain the saved state of the random number stream from this character array, thus enabling users to continue with their calculations.

Example

Header Files

The actual names of the SPRNG functions differ from those given in the SPRNG interface descriptions. We have defined certain macros in the files sprng.h and sprng_f.h. If the users include either of those files (the former file by C users and the latter by FORTRAN users) in their program, then the correct SPRNG function is automatically called.

Note to FORTRAN users on preprocessor directives: The header files contain preprocessing directives which most modern FORTRAN compilers are able to handle. These compilers typically require special flags and/or the filename to end in .F instead of .f in order to preprocess these directives. In case the latter case, users should copy files containing C preprocessor directives to a file with an extension of .F. The user's makefile may need to be changed to give instructions for handling these new files.

Those who are not familiar with the 'make' command can try adding the following lines to their makefile, instead of making any other change:

 
.SUFFIXES : .f .F 
 
.F.f :  
	@if [ -f $*.i ] ; then \ 
	rm $*.i ;\ 
	fi 
	$(CPP) -I$(SRCDIR) $*.F 
	@if [ -f $*.i ] ; then \ 
	mv $*.i  $*.f ;\ 
	fi 
Where $(CPP) is identical to that given in the sprng/SRC/make.PLAT file, where PLAT is the user's platform, and $(SRCDIR) is the SPRNG source directory. This same technique can be used in case the user's FORTRAN compiler does not call the preprocessor. This creates a regular FORTRAN file which the compiler can handle.

On the IBM SP2, please use the following code instead of that given above:

 
.SUFFIXES : .f .F 
 
.F.f:  
        $(CPP) -WF,-I$(SRCDIR) $*.F 
        @if [ -f F$*.f ] ; then \ 
        mv F$*.f  $*.f ;\ 
Including Header Files

A C user needs to include the header file sprng.h and a FORTRAN user sprng_f.h in order to use SPRNG. For example, FORTRAN users would type:

#include "sprng_f.h"

in their FORTRAN program files that make SPRNG calls. This statement causes the contents of the file sprng_f.h to appear instead of the statement #include "sprng_f.h" once the file has been preprocessed. This usage is demonstrated in the following examples:

C Example

FORTRAN users can also read the note on header files if they are not used to the C preprocessor.

Independence of Random Number Streams

Users will generally use several random number streams in their calculations. It is important for these streams to be uncorrelated, in order for the pseudorandom numbers to be effective at the desired variance reduction, which is, of course, the point of large Monte Carlo calculations. We refer to this property of streams being uncorrelated as the independence of streams. SPRNG provides random number streams that have been tested for their independence.

Initialization of Streams

We store the state of a random number stream in some memory location. Before we do this, it is necessary to allocate memory space. We then determine the initial state of the stream from the seed and other parameters of the generator. This process is known as initialization. Before a random number stream can be used, an initialization call has to be made. Usually the users need to call init_sprng to perform the initialization. The exceptions are (i) in the simple interface where default initialization is performed under certain conditions, (ii) when the unpack_sprng function is used that creates a stream with an appropriate state and (iii) when the user calls spawn_sprng, which performs the initialization itself.

Locality

By locality we mean that an operation performed on a stream should not involve communication between processors. For example, when we initialize or spawn streams, we need to ensure that the new streams produced are independent of the streams available on all other processors. SPRNG produces such independent streams without performing any communication with other processors. The only SPRNG function that could involve communication between processors is make_sprng_seed.

Macro Substitution

A SPRNG user may need to use preprocessing directives for macro substitution, which C users will be familiar with. A statement of the form:

#define macro replacement

replaces the text macro in the user's file with replacement. For example, the SPRNG header files define a macro:

#define SPRNG_DEFAULT 0

If users include a SPRNG header file and then type the word SPRNG_DEFAULT anywhere in their program, then this word is replaced by 0 once the program has been preprocessed. FORTRAN users can read more about the preprocessing directives in the note on this topic.

NULL Pointer

Certain SPRNG functions return a NULL pointer in case of error. FORTRAN users can consider a NULL pointer as the integer constant 0.

Portability

SPRNG is portable to a variety of serial and parallel platforms. Exactly the same sequence of random numbers are produced on all the machines. SPRNG also provides executables to check if the SPRNG libraries have ported correctly to the platform the user is working on. The section on installation contains further details on these executables.

Quality of Parallel Random Number Streams

Parallel random number streams must satisfy all the criteria for an acceptable serial random number stream. For example, they must be sufficiently uniform, have a large period and there should be no correlation between the numbers in the sequence. In addition, parallel streams should be uncorrelated with each other.

Random Number Streams

Given a random number generator and its initial state, each call to the generator produces the next random number in the sequence. We refer to each such sequence of random numbers as a random number stream.

Reproducibility

SPRNG can be used to produce a totally reproducible stream of parallel pseudorandom numbers, independent of the number of processors used in the computation and of the loading produced by sharing of the parallel computer. Such reproducibility is important during debugging and also in checking codes ported to new platforms.

Seed

We use the term seed with a slightly different meaning than is conventionally used. This term does not refer to the starting state of the random number stream. Rather, it is an encoding of the starting state. Distinct streams initialized with the same seed will have different starting states. This provides users the convenience of being able to use the same seed for distinct streams, and still obtaining different initial states.

There is a large set of possible starting states for each stream. We restrict the user to choosing from 231 of those. The user can specify a particular seed (which is an integer) based on which SPRNG determines a particular starting state for the stream. Seeds that are close to each other may produce very different starting states.

It is recommended that the user use the same seed while initializing all the streams in one particular computational run. In order to get a different sequence in a different run, the user can change this common seed.

Spawning Random Number Streams

Sometimes it is necessary to create new random number streams. This situation is best explained with the help of an example.

Consider the following Monte Carlo application in neutronics. Here independent neutron paths are generated based on the outcome of many probabilistic events. Statistics are collected along the paths and estimates for quantities of interest are computed. These estimates have a standard error that scales with the reciprocal of the square root of the number of "independent neutron paths". The computational catch is that during a flight a neutron may collide with a heavy nucleus thereby producing new neutrons. These new neutrons, along with their initial conditions, are put into a computational queue for later processing. An efficient parallel implementation demands that this queue be distributed. In order to ensure reproducibility, each neutron in the queue must also have information so that a unique and deterministic stream of pseudorandom numbers will be used regardless of which processor it eventually executes on. We also desire that the pseudorandom numbers streams that are allocated for each neutron be independent of the stream of any other neutron.

In order to satisfy the requirements of problems such as the one above, we provide a SPRNG function that spawns new, independent random number streams based on the information available from an existing stream. In the neutron collision problem above, new streams would be spawned for each neutron that results from the collision based on the stream of the original neutron that collided. SPRNG further guarantees that the streams produced are independent of any other stream that exists.

Standard Error

SPRNG error and warning messages are sent to the standard error. Users should note that redirecting the standard output to a file does not redirect the standard error too. The following example demonstrates how to redirect standard error to a file filename in the Bourne and Korn shells:

a.out 2> filename

where a.out is the user's executable. If the user wishes to redirect standard output and standard error to the same file, they can issue the following command:

a.out > filename 2>&1

The above can be accomplished in the C shell by the following command:

a.out >& filename

State of a stream

In order to generate random numbers from a stream, SPRNG needs to store information about that stream in memory. This can be considered the state of that stream. As we progress along the random number sequence, this state of the stream too keeps changing.

In the simplest case, we may just need to know the previous random number generated in order to produce the next. In this case, the state of the stream could be identical to the integer version of the random number generated. In order to produce a double precision number, we could divide the state by an appropriate value to get a floating point number in the range [0,1). In a more complicated case, for example with the 48 bit Linear Congruential Generator, the state consists of the multiplier, the prime addend and a 48 bit integer. We return the 31 high order bits as the integer random number. This example was given to demonstrate that the state of a stream is not always identical to the integer random number generated. The state of the Lagged Fibonacci Generator, for instance, requires far more memory and consists of several elements of the sequence.

It should be noted that the state of the stream changes in the same manner, irrespective of whether the integer or the double precision generator was called.

Stream ID

A single process may have several different random number streams available. These different streams are distinguished by unique ID's, which are implemented as pointers to memory locations where states of the respective streams are stored. Since standard FORTRAN 77 does not have a pointer type, we can store a pointer as an integer of the same size as a C pointer. We have defined a macro called SPRNG_POINTER in the file sprng_f.h that automatically defines an integer of the correct size on platforms on which SPRNG is supported. A FORTRAN programmer can then use the type SPRNG_POINTER just as if it were a FORTRAN data type. However, if the flag -DPOINTERSIZE was used in building SPRNG FORTRAN executables, then this flag should also be used in compiling the user's program for this feature to work correctly.


SHAR_EOF fi # end of overwriting check if test ! -d 'examples' then mkdir 'examples' fi cd 'examples' if test -f '2streams_mpi.c' then echo shar: will not over-write existing file "'2streams_mpi.c'" else cat << "SHAR_EOF" > '2streams_mpi.c' /***************************************************************************/ /* ____Demonstrates use of shared and non-shared streams____ */ /* Each process has two streams. One stream is common to all the */ /* processes. The other stream is different on each process. */ /***************************************************************************/ #include #include /* MPI header file */ /* Uncomment the following line to get the interface with pointer checking */ /*#define CHECK_POINTERS */ #include "sprng.h" /* SPRNG header file */ #define SEED 985456376 main(int argc, char *argv[]) { int streamnum, commNum, nstreams, *stream, *commonStream; double rn; int i, myid, nprocs; /************************** MPI calls ***********************************/ MPI_Init(&argc, &argv); /* Initialize MPI */ MPI_Comm_rank(MPI_COMM_WORLD, &myid); /* find process id */ MPI_Comm_size(MPI_COMM_WORLD, &nprocs); /* find number of processes */ /****************** Initialization values *******************************/ streamnum = myid; /*This stream is different on each process*/ commNum = nprocs; /* This stream is common to all processes */ nstreams = nprocs + 1; /* extra stream is common to all processes*/ /*********************** Initialize streams *****************************/ /* This stream is different on each process */ stream = init_sprng(streamnum,nstreams,SEED,SPRNG_DEFAULT); printf("Process %d: Print information about new stream\n", myid); print_sprng(stream); /* This stream is identical on each process */ commonStream = init_sprng(commNum,nstreams,SEED,SPRNG_DEFAULT); printf("Process %d: This stream is identical on all processes\n", myid); print_sprng(commonStream); /*********************** print random numbers ***************************/ for (i=0;i<2;i++) /* random numbers from distinct stream */ { rn = sprng(stream); /* generate double precision random number*/ printf("Process %d, random number (distinct stream) %d: %f\n", myid, i+1, rn); } for (i=0;i<2;i++) /* random number from common stream */ { rn = sprng(commonStream); /*generate double precision random number */ printf("Process %d, random number (shared stream) %d: %f\n", myid, i+1, rn); } /*************************** free memory ********************************/ free_sprng(stream); /* free memory used to store stream state */ free_sprng(commonStream); MPI_Finalize(); /* terminate MPI */ } SHAR_EOF fi # end of overwriting check if test -f '2streamsf_mpi.F' then echo shar: will not over-write existing file "'2streamsf_mpi.F'" else cat << "SHAR_EOF" > '2streamsf_mpi.F' C C Demonstrates use of shared and non-shared streams C Each process has two streams. One stream is common to all the C processes. The other stream is different on each processor. C C Uncomment the following line to get the interface with pointer checking C #define CHECK_POINTERS program twostreamsf_mpi implicit none #include #include "sprng_f.h" integer streamnum,commNum, nstreams, seed SPRNG_POINTER stream, commonStream real*8 rn integer i integer myid, nprocs, ierror integer junk call MPI_INIT(ierror) call MPI_COMM_SIZE(MPI_COMM_WORLD, nprocs, ierror) call MPI_COMM_RANK(MPI_COMM_WORLD, myid, ierror) streamnum = myid !This stream is different on each proces commNum = nprocs !This stream is common to all processes nstreams = nprocs +1 !extra stream is common to all processes seed = 985456376 C This stream is different on each process stream = init_sprng(streamnum,nstreams,seed,SPRNG_DEFAULT) write(6, 44) myid 44 format("Process", i2, ": Print information about new stream") junk = print_sprng(stream) C This stream is identical on each process commonStream = init_sprng(commNum,nstreams,seed,SPRNG_DEFAULT) write (6, 55) myid 55 format ("Process", i2, & ": This stream is identical on all processes") junk = print_sprng(commonStream) do 100 i = 1, 2 rn = sprng(stream) write(6, 66) myid, i, rn 100 continue do 200 i = 1, 2 rn = sprng(commonStream) write(6, 77) myid, i, rn 200 continue 66 format("Process", i2, & ", random number (distinct stream)",i2,": ", f8.6) 77 format("Process", i2, ", random number (shared stream)", & i2,": ", f8.6) junk = free_sprng(stream) junk = free_sprng(commonStream) call MPI_FINALIZE(ierror) end SHAR_EOF fi # end of overwriting check if test -f 'checkpoint-simple.c' then echo shar: will not over-write existing file "'checkpoint-simple.c'" else cat << "SHAR_EOF" > 'checkpoint-simple.c' /****************************************************************************/ /* ____Demonstrates checkpointing____ */ /* In a new run, this program initializes a random number stream and prints */ /* a few random numbers. Finally it packs the state of the stream into a */ /* file. In a continuation of an old run this program reads in the state of */ /* a stream from a file, prints a few random numbers, and stores the final */ /* state of the stream into a file. */ /****************************************************************************/ #include #define SIMPLE_SPRNG /* simple interface */ #include "sprng.h" /* SPRNG header file */ #define SEED 985456376 main(int argc, char *argv[]) { int i, size; double rn; FILE *fp; char buffer[MAX_PACKED_LENGTH], outfile[80], infile[80], *bytes; /*********************** Initialize streams *******************************/ printf("Enter name of file to store final state of the stream:\n"); scanf("%s", outfile); printf("Enter name of file to read from:\n\t(enter 9 for a new run)\n"); scanf("%s", infile); if(infile[0] == '9') /* initialize stream the first time */ init_sprng(SEED,SPRNG_DEFAULT); else /* read stream state from file afterwards */ { fp = fopen(infile,"r"); if(fp == NULL) { fprintf(stderr,"Could not open file %s for reading\nCheck path or permissions\n", infile); exit(1); } fread(&size,1,sizeof(int),fp); fread(buffer,1,size,fp); unpack_sprng(buffer); fclose(fp); } /*********************** print random numbers *****************************/ printf(" Printing 5 random numbers in [0,1): \n"); for(i=0; i<5; i++) { rn = sprng(); /* generate a double precision random number */ printf("%d %f\n", i+1, rn); } /************************* store stream state *****************************/ size = pack_sprng(&bytes); /* pack stream state into an array */ fp = fopen(outfile,"w"); /* open file to store stream state */ if(fp == NULL) { fprintf(stderr,"Could not open file %s for writing\nCheck path or permissions\n", outfile); exit(1); } fwrite(&size,1,sizeof(int),fp); /* store # of bytes required for storage */ fwrite(bytes,1,size,fp); /* store stream state */ fclose(fp); free(bytes); /* free memory needed to store stream state */ } SHAR_EOF fi # end of overwriting check if test -f 'checkpoint.c' then echo shar: will not over-write existing file "'checkpoint.c'" else cat << "SHAR_EOF" > 'checkpoint.c' /****************************************************************************/ /* ____Demonstrates checkpointing____ */ /* In a new run, this program initializes a random number stream and prints */ /* a few random numbers. Finally it packs the state of the stream into a */ /* file. In a continuation of an old run this program reads in the state of */ /* a stream from a file, prints a few random numbers, and stores the final */ /* state of the stream into a file. */ /****************************************************************************/ #include /* Uncomment the following line to get the interface with pointer checking */ /*#define CHECK_POINTERS */ #include "sprng.h" /* SPRNG header file */ #define SEED 985456376 main(int argc, char *argv[]) { int *stream, i, size, nstreams, streamnum; double rn; FILE *fp; char buffer[MAX_PACKED_LENGTH], outfile[80], infile[80], *bytes; /****************** Initialization values *********************************/ streamnum = 0; nstreams = 1; /*********************** Initialize streams *******************************/ printf("Enter name of file to store final state of the stream:\n"); scanf("%s", outfile); printf("Enter name of file to read from:\n\t(enter 9 for a new run)\n"); scanf("%s", infile); if(infile[0] == '9') /* initialize stream the first time */ stream = init_sprng(streamnum,nstreams,SEED,SPRNG_DEFAULT); else /* read stream state from file afterwards */ { fp = fopen(infile,"r"); fread(&size,1,sizeof(int),fp); fread(buffer,1,size,fp); stream = unpack_sprng(buffer); fclose(fp); } /*********************** print random numbers *****************************/ printf(" Printing 5 random numbers in [0,1): \n"); for(i=0; i<5; i++) { rn = sprng(stream); /* generate double precision random number */ printf("%d %f\n", i+1, rn); } /************************* store stream state *****************************/ size = pack_sprng(stream,&bytes); /* pack stream state into an array */ fp = fopen(outfile,"w"); /* open file to store stream state */ if(fp == NULL) { fprintf(stderr,"Could not open file %s for writing\nCheck path or permissions\n", outfile); exit(1); } fwrite(&size,1,sizeof(int),fp); /* store # of bytes required for storage */ fwrite(bytes,1,size,fp); /* store stream state */ fclose(fp); /*************************** free memory **********************************/ free(bytes); /* free memory needed to store stream state */ free_sprng(stream); /* free memory used to store stream state */ } SHAR_EOF fi # end of overwriting check if test -f 'checkpointf-simple.F' then echo shar: will not over-write existing file "'checkpointf-simple.F'" else cat << "SHAR_EOF" > 'checkpointf-simple.F' C C/****************************************************************************/ C/* ____Demonstrates checkpointing____ */ C/* In a new run, this program initializes a random number stream and prints */ C/* a few random numbers. Finally it packs the state of the stream into a */ C/* file. In a continuation of an old run, this program reads in the state of*/ C/* a stream from a file, prints a few random numbers, and stores the final */ C/* state of the stream into a file. */ C/****************************************************************************/ C C program checkpointf_simple implicit none #define SIMPLE_SPRNG #include "sprng_f.h" integer seed, i, size SPRNG_POINTER stream real*8 rn character buffer1(MAX_PACKED_LENGTH), buffer2(MAX_PACKED_LENGTH) character outfile*7, infile*7, firstChar*1 seed = 985456376 C/*********************** Initialize streams *******************************/ C=========================================== C outfile -- state.X ; infile -- state.X C=========================================== print*, 'Enter file name(length 7) to store final state:' read(*, 111) outfile ! 7 characters please print*, 'Enter file name(length 7) to read from:' print*, ' (enter 9 for a new run)' read(*, 112) infile ! 7 characters please write(firstChar, 113) infile 111 format(A7) 112 format(A7) 113 format(A1) if (firstChar .eq. '9') then ! initialize stream the first time stream = init_sprng(seed,SPRNG_DEFAULT) else ! read stream state from the old file open(30, file =infile , status = 'old', form = 'unformatted') read(30) size read(30) buffer1 stream = unpack_sprng(buffer1) close(30) endif print *, 'Printing 5 random numbers in [0,1):' do 100 i = 1, 5 rn = sprng() write(6,150) i, rn 100 continue 150 format(i1, " ", f8.6) size = pack_sprng(buffer2) open(31, file = outfile, status = 'unknown', & form = 'unformatted') write(31) size write(31) buffer2 close(31) end SHAR_EOF fi # end of overwriting check if test -f 'checkpointf.F' then echo shar: will not over-write existing file "'checkpointf.F'" else cat << "SHAR_EOF" > 'checkpointf.F' C/****************************************************************************/ C/* ____Demonstrates checkpointing____ */ C/* In a new run, this program initializes a random number stream and prints */ C/* a few random numbers. Finally it packs the state of the stream into a */ C/* file. In a continuation of an old run, this program reads in the state of*/ C/* a stream from a file, prints a few random numbers, and stores the final */ C/* state of the stream into a file. */ C/****************************************************************************/ C C Uncomment the following line to get the interface with pointer checking C #define CHECK_POINTERS program checkpointf implicit none #include "sprng_f.h" integer streamnum, nstreams, seed SPRNG_POINTER stream real*8 rn integer i, size, junk character buffer1(MAX_PACKED_LENGTH), buffer2(MAX_PACKED_LENGTH) character outfile*7, infile*7, firstChar*1 streamnum = 0 nstreams = 1 seed = 985456376 C/*********************** Initialize streams *******************************/ C=========================================== C outfile -- state.X ; infile -- state.X C=========================================== print*, 'Enter file name(length 7) to store final state:' read(*, 111) outfile ! 7 characters please print*, 'Enter file name(length 7) to read from:' print*, ' (enter 9 for a new run)' read(*, 112) infile ! 7 characters please write(firstChar, 113) infile 111 format(A7) 112 format(A7) 113 format(A1) if (firstChar .eq. '9') then ! initialize stream the first time stream = init_sprng(streamnum,nstreams,seed,SPRNG_DEFAULT) else ! read stream state from the old file open(30, file =infile , status = 'old', form = 'unformatted') read(30) size read(30) buffer1 stream = unpack_sprng(buffer1) close(30) endif print *, 'Printing 5 random numbers in [0,1): ' do 100 i = 1, 5 rn = sprng(stream) write(6,150) i, rn 100 continue 150 format(i1, " ", f8.6) size = pack_sprng(stream, buffer2) open(31, file = outfile, status = 'unknown', & form = 'unformatted') write(31) size write(31) buffer2 close(31) junk = free_sprng(stream) end SHAR_EOF fi # end of overwriting check if test -f 'convert.c' then echo shar: will not over-write existing file "'convert.c'" else cat << "SHAR_EOF" > 'convert.c' /***************************************************************************/ /* ____Demonstrates converting code to SPRNG____ */ /* The original random number call is to 'myrandom'. We change it to call */ /* SPRNG by defining a macro. */ /* The lines between the '#ifdef CONVERT' and the '#else' are the newly added lines. Those lines between the '#else' and the '#endif' are theoriginal lines that need to be deleted. */ /***************************************************************************/ #include #ifdef CONVERT #define SIMPLE_SPRNG /* simple interface */ #include "sprng.h" /* SPRNG header file */ #define myrandom sprng /* we define this macro to make SPRNG calls*/ #endif #define SEED 985456376 double myrandom(); main() { int seed, i; double rn; #ifdef CONVERT /************************** Initialization *******************************/ /******* We add the following optional initialization lines **************/ init_sprng(SEED,SPRNG_DEFAULT); /* initialize stream */ printf("Print information about random number stream:\n"); print_sprng(); #else /* Old initialization lines*/ #endif /*********************** print random numbers ****************************/ printf("Printing 3 random numbers in [0,1):\n"); for (i=0;i<3;i++) { rn = myrandom(); /* generate double precision random number */ printf("%f\n", rn); } } SHAR_EOF fi # end of overwriting check if test -f 'convertf.F' then echo shar: will not over-write existing file "'convertf.F'" else cat << "SHAR_EOF" > 'convertf.F' C ____Demonstrates converting code to SPRNG____ C C The original random number call is to 'myrandom'. We change it to C call SPRNG by defining a macro. C C The lines between the '#ifdef CONVERT' and the '#else' are the C newly added lines. Those lines between the '#else' and the '#endif' C are theoriginal lines that need to be deleted. program sprngf_simple implicit none #ifdef CONVERT #define SIMPLE_SPRNG #include "sprng_f.h" #define myrandom sprng SPRNG_POINTER junkPtr #else external myrandom real*8 myrandom #endif real*8 rn integer seed, irn, i, junk seed = 985456376 #ifdef CONVERT C initialization junkPtr = init_sprng(seed,SPRNG_DEFAULT) print *, 'Printing information about new stream' junk = print_sprng() #else C Old initialization lines #endif print *, 'Printing 3 double precision numbers in [0,1): ' do 100 i = 1, 3 rn = myrandom() print *,i, rn 100 continue end SHAR_EOF fi # end of overwriting check if test -f 'description.html' then echo shar: will not over-write existing file "'description.html'" else cat << "SHAR_EOF" > 'description.html' SPRNG: Scalable Parallel Pseudo-Random Number Generator Library

Examples

1. simple

This program demonstrates the use of sprng on one processor without explicit initialization.

Note that we have included the SPRNG header file We have also defined the macro SIMPLE_SPRNG before including the SPRNG header file in order to invoke the simple interface.

When sprng is called the first time, it initializes a default stream using default parameters, since no explicit initialization has been performed. It then returns double precision random numbers in [0,1).

Code:

Simple Interface Default/Pointer
Checking Interface
C FORTRAN Not Available

Compilation: Example compilation on the SGI Power Challenge

cc -64 -I../include -o simple-simple simple-simple.c -L../lib -llcg

Note: -64 indicates the 64 bit compilation available on the Power Challenge.

cc is the C compiler.

Output:

sprng/EXAMPLES:sif% simple-simple
 Printing 3 random numbers in [0,1):
0.580114
0.740295
0.892874

2. sprng

This program demonstrates the use of sprng, isprng, init_sprng and print_sprng on one process.

Note that we have included the SPRNG header file.

First we initialize a random number stream. The value of the seed is defined to be 985456376. We call print_sprng immediately after initialization so that we can record the particular stream we obtained, for later reference.

sprng is next called to return double precision random numbers in [0,1) and then isprng is called to return random integers in [0,231).

Code:

Simple Interface Default/Pointer
Checking Interface
C FORTRAN C C++ FORTRAN

Compilation: Example compilation on the SGI Power Challenge

f77 -DPOINTER_SIZE=8 -64 -I../include -o sprngf sprngf.F -L../lib -llcg

Note: -DPOINTER_SIZE=8 indicates that the pointer size is 8 bytes, rather than the default 4 bytes assumed by SPRNG.

f77 is the FORTRAN 77 compiler.

Output:

sprng/EXAMPLES:sif% sprngf
 Print information about new stream:

Linear Congruential Generator

        seed = 985456376, prime = 11863279
        multiplier = 44485709377909

 Printing 3 random numbers in [0,1):
0.707488
0.664048
0.005616
 Printing 3 random integers in [0,2^31):
      1873949618
      1484742006
       602016304

3. sprng_mpi

This program demonstrates the use of sprng with multiple processes.

Note that we have included the SPRNG and MPI header files at the beginning.

First we initialize MPI.

We then initialize a random number stream. The value of the seed is defined to be 985456376. We call print_sprng immediately after initialization so that we can record the particular stream we obtained, for later reference.

sprng is next called to return double precision random numbers in [0,1).

Code:

Simple Interface Default/Pointer
Checking Interface
C C++ FORTRAN C FORTRAN

Compilation: Example compilation on the SGI Power Challenge

CC -64 -I../include -o sprng-simple_mpi sprng-simple_mpi.C -L../lib -llcg -L/usr/lib64 -lmpi

Note: CC is the C++ compiler.

Output:

sprng/EXAMPLES:sif% mpirun -np 2 sprng-simple_mpi
Process 0, print information about stream:

Linear Congruential Generator

        seed = 985456376, prime = 11863279
        multiplier = 44485709377909

Process 0, random number 1: 0.70748766363408
Process 0, random number 2: 0.66404841879710
Process 0, random number 3: 0.00561565119362
Process 1, print information about stream:

Linear Congruential Generator

        seed = 985456376, prime = 11863259
        multiplier = 44485709377909

Process 1, random number 1: 0.99144237784703
Process 1, random number 2: 0.15098918187292
Process 1, random number 3: 0.09757740755008

Note that the order in which the output is printed may differ.


4. fsprng_mpi

This program demonstrates the use of the single precision version of sprng with one stream per process.

Note that we have included the SPRNG and MPI header files sprng.h and mpi.h respectively at the beginning. Before including the SPRNG header file, we have defined the macro FLOAT_GEN, which results in single precision random numbers being generated by calls to sprng.

First we initialize MPI.

We then initialize a random number stream. The value of the seed is defined to be 985456376. We call print_sprng immediately after initialization so that we can record the particular stream we obtained, for later reference.

sprng is next called to return single precision random numbers in [0,1).

Code:

Simple Interface Default/Pointer
Checking Interface
C FORTRAN C FORTRAN

Compilation: Example compilation on the SGI Power Challenge

f90 -DPOINTER_SIZE=8 -64 -I../include -o fsprngf_mpi fsprngf_mpi.F -L../lib -llcg -L/usr/lib64 -lmpi

Note: f90 is the FORTRAN 90 compiler.

Output:

sprng/EXAMPLES:sif% mpirun -np 2 fsprngf_mpi
Process 0: Print information about stream:

Linear Congruential Generator

        seed = 985456376, prime = 11863279
        multiplier = 44485709377909

Process 0, random number 1: 0.707488
Process 0, random number 2: 0.664048
Process 0, random number 3: 0.005616
Process 1: Print information about stream:

Linear Congruential Generator

        seed = 985456376, prime = 11863259
        multiplier = 44485709377909

Process 1, random number 1: 0.991442
Process 1, random number 2: 0.150989
Process 1, random number 3: 0.097577

Note that the order in which the output is printed may differ.


5. seed

This program demonstrates the use of make_sprng_seed on one processor.

Note that we have included the SPRNG header file at the beginning.

First we initialize a random number stream. The value of a seed is obtained from a call to make_sprng_seed and is based on system date and time information. We call print_sprng immediately after initialization so that we can record the particular stream we obtained, for later reference.

sprng is next called to return double precision random numbers in [0,1).

Code:

Simple Interface Default/Pointer
Checking Interface
C FORTRAN C FORTRAN

Compilation: Example compilation on the SGI Power Challenge

cc -64 -I../include -o seed-simple seed-simple.c -L../lib -llcg

Output:

sprng/EXAMPLES:sif% seed-simple
 Printing information about new stream

Linear Congruential Generator

        seed = 178783069, prime = 11863279
        multiplier = 44485709377909

 Printing 3 random numbers in [0,1):
0.856970
0.110647
0.795213


6. seed_mpi

This program demonstrates the use of make_sprng_seed with the MPI version of SPRNG in order to obtain the same seed in each process.

Note that we have included the SPRNG and MPI header files at the beginning. Before including the SPRNG header file, we have defined the macro USE_MPI, which enables SPRNG to make MPI calls to ensure that the same seed is obtained on each process.

First we initialize MPI.

We then initialize a random number stream. The value of the seed is obtained from a call to make_sprng_seed. This function makes MPI calls to ensure that the same seed is returned in each process, assuming that the MPI version of SPRNG has been installed. We call print_sprng immediately after initialization so that we can record the particular stream we obtained, for later reference.

sprng is next called to return double precision random numbers in [0,1).

Code:

Simple Interface Default/Pointer
Checking Interface
C FORTRAN C FORTRAN

Compilation: Example compilation on the SGI Power Challenge

cc -64 -I../include -o seed-simple_mpi seed-simple_mpi.c -L../lib -llcg -L/usr/lib64 -lmpi

Output:

sprng/EXAMPLES:sif% mpirun -np 2 seed-simple_mpi
Process 0: seed =        837321565
Process 1: seed =        837321565
Process 0: Print information about stream:

Linear Congruential Generator

        seed = 837321565, prime = 11863279
        multiplier = 44485709377909

process 0, random number 1: 0.732603
process 0, random number 2: 0.753095
process 0, random number 3: 0.084726
Process 1: Print information about stream:

Linear Congruential Generator

        seed = 837321565, prime = 11863259
        multiplier = 44485709377909

process 1, random number 1: 0.200456
process 1, random number 2: 0.445652
process 1, random number 3: 0.576297

Note that the order in which the output is printed may differ.

7. checkpoint

This program demonstrates the use of pack_sprng and unpack_sprng for check-pointing. This program prints a few random numbers and then stores the state of the computation in a file. If users wish to continue their computations from the previous state, then they can have this program read the state of the computations from this file. The user is first prompted for the name of the output file. Then the user is asked for the name of the input file. If the user wishes to start a new run, then he should enter 9 at this stage, in which case the program initializes a random number stream instead of reading it from a file.

Note that we have included the SPRNG header file sprng.h at the beginning.

First we initialize a random number stream, if this is a new run. The value of the seed is defined to be 985456376. We call print_sprng immediately after initialization so that we can record the particular stream we obtained, for later reference.

If this is the continuation of a previous run, then we read in the state of a stream from the input file, and unpack it to obtain a random number stream.

sprng is next called to return double precision random numbers in [0,1).

Finally, we pack the state of the stream into an array and store the contents of this array into the output file.

Code:

Simple Interface Default/Pointer
Checking Interface
C FORTRAN C FORTRAN

Compilation: Example compilation on the SGI Power Challenge

cc -64 -I../include -o checkpoint-simple checkpoint-simple.c -L../lib -llcg

Output:

sprng/EXAMPLES:sif% checkpoint
Enter name of file to store final state of the stream:
temp
Enter name of file to read from:
        (enter 9 for a new run)
9
 Printing 5 random numbers in [0,1): 
1  0.707488
2  0.664048
3  0.005616
4  0.872626
5  0.691387
sprng/EXAMPLES:sif% checkpoint
Enter name of file to store final state of the stream:
temp
Enter name of file to read from:
        (enter 9 for a new run)
temp
 Printing 5 random numbers in [0,1): 
1  0.280336
2  0.005228
3  0.533545
4  0.710482
5  0.891603


8. message_mpi

This program demonstrates the use of pack_sprng and unpack_sprng for passing the state of a stream from one processor to another.

Note that we have included the SPRNG and MPI header files at the beginning.

First we initialize MPI.

We then initialize a random number stream on process 0. The value of the seed is defined to be 985456376. We call print_sprng immediately after initialization so that we can record the particular stream we obtained, for later reference.

sprng is next called by process 0 to return double precision random numbers in [0,1).

Process 0 then packs the state of the stream into an array and sends it to process 1, which unpacks it and prints a few more random numbers from that stream. In this process, the original default stream on process 1 is over-written by the unpacked stream.

Code:

Simple Interface Default/Pointer
Checking Interface
C FORTRAN C FORTRAN

Compilation: Example compilation on the SGI Power Challenge

cc -64 -I../include -o message-simple_mpi message-simple_mpi.c -L../lib -llcg -L/usr/lib64 -lmpi

Output:

sprng/EXAMPLES:sif% mpirun -np 2 message-simple_mpi
Process 0: Print information about stream:

Linear Congruential Generator

        seed = 985456376, prime = 11863279
        multiplier = 44485709377909

Process 0: Print 2 random numbers in [0,1):
Process 0: 0.707488
Process 0: 0.664048
 Process 0 sends stream to process 1
 Process 1 has received the packed stream
Process 1: Print information about stream:

Linear Congruential Generator

        seed = 985456376, prime = 11863279
        multiplier = 44485709377909

 Process 1 prints 2 numbers from received stream:
Process 1: 0.005616
Process 1: 0.872626

Note that the order in which the output is printed may differ.


9. 2streams_mpi

This program demonstrates the use of multiple streams on each process.

Note that we have included the SPRNG and MPI header files at the beginning.

First we initialize MPI and determine the number of processes and the rank of the local process.

We then initialize a random number stream. The value of the seed is defined to be 985456376. We shall have two streams per process, but is only one of these streams will be distinct. The other stream will be identical on each process. This is useful in situations in which we would like all the processes to take the same decision based on a random number. Thus the number of distinct streams is one more than the total number of processor, resulting in nstreams = nprocs + 1. For the distinct stream on each process, we initialize it with stream number as the rank of the local process, myid. The common stream is initialized with the stream number nprocs.

sprng is next called for each stream. It returns a double precision random numbers in [0,1) with the stream ID as its argument.

Finally, we free the memory used to store the states of the two streams by calls to free_sprng.

Code:

Simple Interface Default/Pointer
Checking Interface
Not Available C FORTRAN

Compilation: Example compilation on the SGI Power Challenge

cc -64 -I../include -o 2streams_mpi 2streams_mpi.c -L../lib -llcg -L/usr/lib64 -lmpi

Output:

sprng/EXAMPLES:sif% mpirun -np 2 2streams_mpi
Process 0: Print information about new stream

Linear Congruential Generator

        seed = 985456376, prime = 11863279
        multiplier = 44485709377909

Process 0: This stream is identical on all processes

Linear Congruential Generator

        seed = 985456376, prime = 11863253
        multiplier = 44485709377909

Process 0, random number (distinct stream) 1: 0.707488
Process 0, random number (distinct stream) 2: 0.664048
Process 0, random number (shared stream) 1: 0.700906
Process 0, random number (shared stream) 2: 0.602204
Process 1: Print information about new stream

Linear Congruential Generator

        seed = 985456376, prime = 11863259
        multiplier = 44485709377909

Process 1: This stream is identical on all processes

Linear Congruential Generator

        seed = 985456376, prime = 11863253
        multiplier = 44485709377909

Process 1, random number (distinct stream) 1: 0.991442
Process 1, random number (distinct stream) 2: 0.150989
Process 1, random number (shared stream) 1: 0.700906
Process 1, random number (shared stream) 2: 0.602204

Note that the order in which the output is printed may differ.


10. spawn

This program demonstrates the use of spawn_sprng.

Note that we have included the SPRNG header file at the beginning.

First we initialize a random number stream. The value of the seed is defined to be 985456376. Since there is only one stream, the number of streams nstreams = 1 and the stream number streamnum = 0. stream stores the returned ID of the initialized stream. We call print_sprng immediately after initialization so that we can record the particular stream we obtained, for later reference.

sprng is next called to return double precision random numbers in [0,1), with the stream ID as its argument.

We next spawn two streams from stream. Their ID's are stored in an array allocated by sprng. The variable new points to this array. We print information about the newly spawned streams, and then print a few random numbers from the second stream spawned.

Finally, we free the memory used to store the states of the streams by calls to free_sprng.

Code:

Simple Interface Default/Pointer
Checking Interface
Not Available C FORTRAN

Compilation: Example compilation on the SGI Power Challenge

cc -64 -I../include -o spawn spawn.c -L../lib -llcg

Output:

sprng/EXAMPLES:sif% spawn
 Print information about stream:

Linear Congruential Generator

        seed = 985456376, prime = 11863279
        multiplier = 44485709377909

 Printing 2 random numbers in [0,1):
0.707488
0.664048
 Spawned two streams
 Information on first spawned stream:

Linear Congruential Generator

        seed = 985456376, prime = 11863259
        multiplier = 44485709377909

 Information on second spawned stream:

Linear Congruential Generator

        seed = 985456376, prime = 11863253
        multiplier = 44485709377909

 Printing 2 random numbers from second spawned stream:
0.700906
0.602204


11. invalid_ID

This program demonstrates the handling of invalid pointers in the interface with pointer checking.

Note that we have included the SPRNG header file sprng.h at the beginning. We have also defined the macro CHECK_POINTERS before including the SPRNG header file in order to invoke the interface with pointer checking.

First we initialize a random number stream. The value of the seed is defined to be 985456376. Since there is only one stream, the number of streams nstreams = 1 and the stream number streamnum = 0. stream stores the returned ID of the initialized stream. We call print_sprng immediately after initialization so that we can record the particular stream we obtained, for later reference.

sprng is next called to return double precision random numbers in [0,1), with the stream ID as its argument.

Finally, we free the memory used to store the state of the stream by a call to free_sprng.

we then try to use the freed stream again, which is an incorrect usage. sprng returns -1.0 due to the invalid stream being passed as an argument.

Code:

Simple Interface Pointer
Checking Interface
Not Available C FORTRAN

Compilation: Example compilation on the SGI Power Challenge

cc -64 -I../include -o invalid_ID invalid_ID.c -L../lib -llcg

Output:

sprng/EXAMPLES:sif% invalid_ID
Print information about random number stream:

Linear Congruential Generator

        seed = 985456376, prime = 11863279
        multiplier = 44485709377909

Printing 3 random numbers in [0,1):
0.707488
0.664048
0.005616
Expect a SPRNG error message on the use of an invalid stream ID
ERROR: Invalid generator ID 10014ed8
sprng returns -1.000000 on being given an invalid stream ID

Note that the incorrect ID, 10017258, may vary.


12. convert

This program demonstrates converting user code to call SPRNG instead of the original random number generator myrandom.

Note that we have included the SPRNG header file at the beginning. We have also defined the macro SIMPLE_SPRNG before including the SPRNG header file in order to invoke the simple interface. We define the macro myrandom to sprng after including the SPRNG header. This replaces the former function call by calls to SPRNG instead.

We then add statements to initialize SPRNG.

Code:

Simple Interface Default/Pointer
Checking Interface
C FORTRAN Not Available

Compilation: Example compilation on the SGI Power Challenge

cc -64 -I../include convert.c -L../lib -llcg

Note: In the code provided with SPRNG, users need to define the macro CONVERT in order to get this converted code.

Output:

sprng/EXAMPLES:sif% a.out
Print information about random number stream:

Linear Congruential Generator

        seed = 985456376, prime = 11863279
        multiplier = 44485709377909

Printing 3 random numbers in [0,1):
0.707488
0.664048
0.005616


13. subroutine

This program demonstrates the use of SPRNG in subroutines in FORTRAN programs.

Note that we have included the SPRNG header file sprng_f.h at the beginning. We have also included this header file in the subroutine sub1. If we wished to define a macro for use by SPRNG, we need only do it once in any file, before the first time a SPRNG header is included.

Subroutine sub1 is then called, which makes calls to sprng.

Code:

Simple Interface Default/Pointer
Checking Interface
Not Available FORTRAN

Compilation: Example compilation on the SGI Power Challenge

f77 -64 -I../include -DPOINTER_SIZE=8 subroutinef.F -L../lib -llcg

Output:

sprng/EXAMPLES:sif% a.out
 Printing information about new stream

Linear Congruential Generator

        seed = 985456376, prime = 11863279
        multiplier = 44485709377909

 Printing 3 double precision numbers in [0,1): 
     1   0.7074876636340832
     2   0.6640484187971047
     3   0.0056156511936152


14. pi-simple

This is a serial program that demonstrates the use of several SPRNG features in a simple example application involving the computation of PI through a Monte Carlo method. We generate random points on a square of side 2 which circumscribes a circle of unit radius. We determine the proportion of points that fall within this circle. Since the ratio of the area of the circle to the area of the square is PI/4, the estimated value of PI is four times the proportion of points that lie within the circle.

The user specifies the number of samples to be generated on the square. The final state of the computations is stored in a file specified by the user. The user can restart the computations by reading from this file in subsequent runs. The user should also specify whether the current run is a new one (in which case a new random number stream is initialized) or an old one (in which case the state of the random number stream is read from a file).

Note that we have included the SPRNG header file at the beginning. We have also defined the macro SIMPLE_SPRNG before including the SPRNG header file in order to invoke the simple interface.

The function initialize is then called to take suitable actions based on the information input by the user. A new run involves initializing a random number stream. In a continuation of a previous run, the state of the random number stream is read from a file whose name is input by the user. The final state of the computations is also written into this file. The user should also input the number of samples to be generated in this run. In a new run, make_sprng_seed is called to produce a seed based on system date and time information.

Next the function count_in_circle is called, which generates points on a square of side 2. The number of points that fall on a circle of unit radius inscribed within this square is returned by this function.

We then estimate PI as four times the proportion of points that fall within the circle inscribed in the square.

Finally we call the function save_state to save the state of the random number stream, the cumulative number of sample points generated in all the runs, and the cumulative number of sample points that lie within the inscribed circle in all the runs.

Code:

C FORTRAN

Compilation: Example compilation on the SGI Power Challenge

cc -64 -I../include -o pi-simple pi-simple.c -L../lib -llcg

Output:

sprng/EXAMPLES:sif% pi-simple
Enter 9 for a new run, or 2 for the continuation of an old run:
9
Enter name of file to store final state of the stream:
temp
Enter number of new samples:
10000

Linear Congruential Generator

        seed = 437891907, prime = 11863279
        multiplier = 44485709377909

pi is estimated as 3.1227999999999998 from 10000 samples.
        Error = 0.0187927, standard error = 0.0164218
sprng/EXAMPLES:sif% pi-simple
Enter 9 for a new run, or 2 for the continuation of an old run:
2
Enter name of file to store final state of the stream:
temp
Enter number of new samples:
5000
pi is estimated as 3.1165333333333334 from 15000 samples.
        Error = 0.0250593, standard error = 0.0134084
Note: Results may vary due to the use of a random seed.


15. pi-simple_mpi

This is a parallel version of is a parallel version of pi-simple in which we divide the work of generating the samples among the available processes.

First we initialize MPI and call the function initialize to initialize a random number stream. If this is the continuation of a previously checkpointed run, then process 0 reads the previous state and passes to to each process.

Next we divide the number of samples to be generated among all the processes and then call the function count_in_circle as in the sequential case. We then sum the number of points that fall within the circle across all the processes by a call to MPI_REDUCE and estimate PI as four times the proportion of points that fall within this circle inscribed in the square.

Finally we call the function save_state to save the state of the random number stream, the cumulative number of sample points generated in all the runs, and the cumulative number of sample points that lie within the inscribed circle in all the runs. Each process passes the state of its stream to process 0, which then saves it to a file.

Code:

C

Compilation: Example compilation on the SGI Power Challenge

cc -64 -I../include -o pi-simple pi-simple.c -L../lib -llcg

Compilation: Example compilation on the SGI Power Challenge

cc -64 -I../include -o pi-simple_mpi pi-simple_mpi.c -L../lib -llcg -L/usr/lib64 -lmpi

Output:

sprng/EXAMPLES:sif% mpirun -np 2 pi-simple_mpi 
Enter 9 for a new run, or 2 for the continuation of an old run:
9
Enter name of file to store final state of the stream:
temp
Enter number of new samples:
5000

Linear Congruential Generator

Linear Congruential Generator

        seed = 42578755, prime = 11863279
        multiplier = 44485709377909


        seed = 42578755, prime = 11863259
        multiplier = 44485709377909

pi is estimated as 3.1568000000000001 from 5000 samples.
        Error = 0.0152073, standard error = 0.023224
Note: Results may vary due to the use of a random seed.


Ashok Srinivasan
ashoks@ncsa.uiuc.edu
Last modified: 1 Apr, 1997
SHAR_EOF fi # end of overwriting check if test -f 'fsprng-simple_mpi.c' then echo shar: will not over-write existing file "'fsprng-simple_mpi.c'" else cat << "SHAR_EOF" > 'fsprng-simple_mpi.c' /***************************************************************************/ /* ____Demonstrates use of the single precision generator____ */ /* One stream is maintained per processor. Each processor prints a few */ /* single precision random numbers. */ /***************************************************************************/ #include #include /* MPI header file */ #define SIMPLE_SPRNG /* simple interface */ #define USE_MPI /* use MPI to find number of processes */ #define FLOAT_GEN /* make 'sprng()' return single precision numbers*/ #include "sprng.h" /* SPRNG header file */ #define SEED 985456376 main(int argc, char *argv[]) { int i, myid; float rn; /************************** MPI calls ***********************************/ MPI_Init(&argc, &argv); /* Initialize MPI */ MPI_Comm_rank(MPI_COMM_WORLD, &myid); /* find process id */ /*********************** Initialize streams *****************************/ init_sprng(SEED,SPRNG_DEFAULT); /* initialize stream */ printf("Process %d: Print information about stream:\n",myid); print_sprng(); /*********************** print random numbers ***************************/ for (i=0;i<3;i++) { rn = sprng(); /*generate single precision random number */ printf("Process %d, random number %d: %f\n", myid, i+1, rn); } MPI_Finalize(); /* Terminate MPI */ } SHAR_EOF fi # end of overwriting check if test -f 'fsprng_mpi.c' then echo shar: will not over-write existing file "'fsprng_mpi.c'" else cat << "SHAR_EOF" > 'fsprng_mpi.c' /***************************************************************************/ /* ____Demonstrates use of the single precision generator____ */ /* One stream is maintained per processor. Each processor prints a few */ /* single precision random numbers. */ /***************************************************************************/ #include #include /* MPI header file */ /* Uncomment the following line to get the interface with pointer checking */ /*#define CHECK_POINTERS */ #define FLOAT_GEN /* make 'sprng()' return single precision numbers*/ #include "sprng.h" /* SPRNG header file */ #define SEED 985456376 main(int argc, char *argv[]) { int streamnum, nstreams, *stream; float rn; int i, myid, nprocs; /************************** MPI calls ************************************/ MPI_Init(&argc, &argv); /* Initialize MPI */ MPI_Comm_rank(MPI_COMM_WORLD, &myid); /* find process id */ MPI_Comm_size(MPI_COMM_WORLD, &nprocs); /* find number of processes */ /************************* Initialization ********************************/ streamnum = myid; nstreams = nprocs; /* one stream per processor */ stream = init_sprng(streamnum,nstreams,SEED,SPRNG_DEFAULT); /*initialize stream*/ printf("Process %d: Print information about stream:\n",myid); print_sprng(stream); /*********************** print random numbers ****************************/ for (i=0;i<3;i++) { rn = sprng(stream); /* generate single precision random number */ printf("Process %d, random number %d: %f\n", myid, i+1, rn); } /*************************** free memory *********************************/ free_sprng(stream); /* free memory used to store stream state */ MPI_Finalize(); /* Terminate MPI */ } SHAR_EOF fi # end of overwriting check if test -f 'fsprngf-simple_mpi.F' then echo shar: will not over-write existing file "'fsprngf-simple_mpi.F'" else cat << "SHAR_EOF" > 'fsprngf-simple_mpi.F' C C Demonstrates use of the single precision generator C One stream is maintained per processor. Each processor prints a few C single precision random numbers. C program fsprngf_simple_mpi implicit none #define SIMPLE_SPRNG ! simple interface */ #define USE_MPI ! use MPI to find number of processes */ #define FLOAT_GEN 1 ! make 'sprng()' return single precision numbers #include #include "sprng_f.h" SPRNG_POINTER stream real*4 rn integer i, seed, myid, ierror, junk call MPI_INIT(ierror) call MPI_COMM_RANK(MPI_COMM_WORLD, myid, ierror) seed = 985456376 C stream = init_sprng(seed,SPRNG_DEFAULT) write(*, "('Process',i2,': Print information about stream:')" & ) myid junk = print_sprng() do 100 i = 1, 3 rn = sprng() write(*, "('Process',i2,', random number',i2,': ',f8.6)") & myid,i,rn 100 continue call MPI_FINALIZE(ierror) end SHAR_EOF fi # end of overwriting check if test -f 'fsprngf_mpi.F' then echo shar: will not over-write existing file "'fsprngf_mpi.F'" else cat << "SHAR_EOF" > 'fsprngf_mpi.F' C C Demonstrates use of the single precision generator C One stream is maintained per processor. Each processor prints a few C single precision random numbers. C C Uncomment the following line to get the interface with pointer checking C #define CHECK_POINTERS program fsprngf_mpi implicit none #define FLOAT_GEN 1 ! make 'sprng()' return single precision numbers #include #include "sprng_f.h" integer streamnum, nstreams, seed SPRNG_POINTER stream real*4 rn integer i, myid, nprocs, ierror, junk call MPI_INIT(ierror) call MPI_COMM_SIZE(MPI_COMM_WORLD, nprocs, ierror) call MPI_COMM_RANK(MPI_COMM_WORLD, myid, ierror) streamnum = myid nstreams = nprocs seed = 985456376 C stream = init_sprng(streamnum,nstreams,seed,SPRNG_DEFAULT) write(*, "('Process',i2,': Print information about stream:')" & ) myid junk = print_sprng(stream) do 100 i = 1, 3 rn = sprng(stream) write(*, "('Process',i2,', random number',i2,': ',f8.6)") & myid,i,rn 100 continue junk = free_sprng(stream) call MPI_FINALIZE(ierror) end SHAR_EOF fi # end of overwriting check if test -f 'invalid_ID.c' then echo shar: will not over-write existing file "'invalid_ID.c'" else cat << "SHAR_EOF" > 'invalid_ID.c' /****************************************************************************/ /* ___Demonstrates invalid ID handling in inteface with pointer checking___ */ /* This prorgam prints a few random numbers, frees the stream, and then */ /* tries to use the stream again. */ /****************************************************************************/ #include #ifndef CHECK_POINTERS #define CHECK_POINTERS /* do not uncomment this line */ #endif #include "sprng.h" /* SPRNG header file */ #define SEED 985456376 main() { int streamnum, nstreams, *stream; double rn; int i; /**************************** Initialize *********************************/ streamnum = 0; nstreams = 1; stream = init_sprng(streamnum,nstreams,SEED,SPRNG_DEFAULT); /*initialize stream */ printf("Print information about random number stream:\n"); print_sprng(stream); /*********************** print random numbers *****************************/ printf("Printing 3 random numbers in [0,1):\n"); for (i=0;i<3;i++) { rn = sprng(stream); /* generate a double precision random number */ printf("%f\n", rn); } /**************************** free memory *********************************/ free_sprng(stream); /* free memory used to store stream state */ /********************** Try using freed stream ****************************/ fprintf(stderr,"Expect a SPRNG error message on the use of an invalid stream ID\n"); rn = sprng(stream); printf("sprng returns %f on being given an invalid stream ID\n", rn); } SHAR_EOF fi # end of overwriting check if test -f 'invalid_IDf.F' then echo shar: will not over-write existing file "'invalid_IDf.F'" else cat << "SHAR_EOF" > 'invalid_IDf.F' C C Demonstrates invalid ID handling in inteface with pointer checking C This prorgam prints a few random numbers, frees the stream, and then C tries to use the stream again. C C do not uncomment the following line #ifndef CHECK_POINTERS #define CHECK_POINTERS #endif program invalid_IDf implicit none #include "sprng_f.h" integer streamnum, nstreams, seed, i, junk SPRNG_POINTER stream real*8 rn streamnum = 0 nstreams = 1 seed = 985456376 C initialize stream stream = init_sprng(streamnum,nstreams,seed,SPRNG_DEFAULT) print *, 'Printing information about new stream' junk = print_sprng(stream) print *, 'Printing 3 double precision numbers [0,1): ' do 100 i = 1, 3 rn = sprng(stream) print *, rn 100 continue junk = free_sprng(stream) C print *, ' Expect a SPRNG error message on the use of an invalid stream ID ' rn = sprng(stream) print *, ' sprng returns ', rn, & ' on being given an invalid stream ID' end SHAR_EOF fi # end of overwriting check if test -f 'message-simple_mpi.c' then echo shar: will not over-write existing file "'message-simple_mpi.c'" else cat << "SHAR_EOF" > 'message-simple_mpi.c' /***************************************************************************/ /* ____Demonstrates passing a stream to another process____ */ /* Process 0 initializes a random number stream and prints a few random */ /* numbers. It then passes this stream to process 1, which recieves it */ /* and prints a few random numbers from this stream. */ /***************************************************************************/ #include #include #include /* MPI header file */ #define SIMPLE_SPRNG /* simple interface */ #include "sprng.h" /* SPRNG header file */ #define SEED 985456376 main(int argc, char *argv[]) { double rn; int i, myid, len, nprocs; MPI_Status status; char *packed; /************************** MPI calls ************************************/ MPI_Init(&argc, &argv); /* Initialize MPI */ MPI_Comm_rank(MPI_COMM_WORLD, &myid); /* find process id */ MPI_Comm_size(MPI_COMM_WORLD, &nprocs); /* find number of processes */ if(nprocs < 2) { fprintf(stderr,"ERROR: At least 2 processes required\n"); MPI_Finalize(); exit(1); } if (myid==0) /*********** process 0 sends stream to process 1 ***********/ { init_sprng(SEED,SPRNG_DEFAULT); /*initialize stream */ printf("Process %d: Print information about stream:\n",myid); print_sprng(); printf("Process %d: Print 2 random numbers in [0,1):\n", myid); for (i=0;i<2;i++) { rn = sprng(); /* generate double precision random number */ printf("Process %d: %f\n", myid, rn); } len = pack_sprng(&packed); /* pack stream into an array */ /* inform process 1 how many bytes process 0 will send. */ MPI_Send(&len, 1, MPI_INT, 1, 0, MPI_COMM_WORLD); MPI_Send(packed, len, MPI_BYTE, 1, 0, MPI_COMM_WORLD); /* send stream */ free(packed); /* free storage for array */ printf(" Process 0 sends stream to process 1\n"); } else if(myid == 1) /****** process 1 receives stream from process 0 *****/ { init_sprng(SEED,SPRNG_DEFAULT); /*initialize stream */ MPI_Recv(&len, 1, MPI_INT, 0, MPI_ANY_TAG, MPI_COMM_WORLD, &status); /* receive buffer size required */ if ((packed = (char *) malloc(len)) == NULL) /* allocate array */ { fprintf(stderr,"ERROR: process %d: Cannot allocate memory\n", myid); MPI_Finalize(); exit(1); } MPI_Recv(packed, len, MPI_BYTE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, &status); /* receive packed stream */ unpack_sprng(packed); /* unpack stream */ printf(" Process 1 has received the packed stream\n"); printf("Process %d: Print information about stream:\n",myid); print_sprng(); free(packed); /* free array of packed stream */ printf(" Process 1 prints 2 numbers from received stream:\n"); for (i=0;i<2;i++) { rn = sprng(); /* generate double precision random number */ printf("Process %d: %f\n", myid, rn); } } MPI_Finalize(); /* terminate MPI */ } SHAR_EOF fi # end of overwriting check if test -f 'message_mpi.c' then echo shar: will not over-write existing file "'message_mpi.c'" else cat << "SHAR_EOF" > 'message_mpi.c' /***************************************************************************/ /* ____Demonstrates passing a stream to another process____ */ /* Process 0 initializes a random number stream and prints a few random */ /* numbers. It then passes this stream to process 1, which recieves it */ /* and prints a few random numbers from this stream. */ /***************************************************************************/ #include #include #include /* MPI header file */ /* Uncomment the following line to get the interface with pointer checking */ /*#define CHECK_POINTERS */ #include "sprng.h" /* SPRNG header file */ #define SEED 985456376 main(int argc, char *argv[]) { int streamnum, nstreams, *stream; double rn; int i, myid, nprocs, len; MPI_Status status; char *packed; /************************** MPI calls ************************************/ MPI_Init(&argc, &argv); /* Initialize MPI */ MPI_Comm_rank(MPI_COMM_WORLD, &myid); /* find process id */ MPI_Comm_size(MPI_COMM_WORLD, &nprocs); /* find number of processes */ if(nprocs < 2) { fprintf(stderr,"ERROR: At least 2 processes required\n"); MPI_Finalize(); exit(1); } if (myid==0) /*********** process 0 sends stream to process 1 **********/ { streamnum = 0; nstreams = 1; stream = init_sprng(streamnum,nstreams,SEED,SPRNG_DEFAULT);/*initialize stream*/ printf("Process %d: Print information about stream:\n",myid); print_sprng(stream); printf("Process %d: Print 2 random numbers in [0,1):\n", myid); for (i=0;i<2;i++) { rn = sprng(stream); /* generate double precision random number */ printf("Process %d: %f\n", myid, rn); } len = pack_sprng(stream, &packed); /* pack stream into an array */ /* inform process 1 how many bytes process 0 will send. */ MPI_Send(&len, 1, MPI_INT, 1, 0, MPI_COMM_WORLD); MPI_Send(packed, len, MPI_BYTE, 1, 0, MPI_COMM_WORLD); /* send stream */ free(packed); /* free storage for array */ nstreams = free_sprng(stream); printf(" Process 0 sends stream to process 1\n"); printf(" %d generators now exist on process 0\n", nstreams); } else if(myid == 1) /***** process 1 receives stream from process 0 ******/ { MPI_Recv(&len, 1, MPI_INT, 0, MPI_ANY_TAG, MPI_COMM_WORLD, &status); /* receive buffer size required */ if ((packed = (char *) malloc(len)) == NULL) /* allocate array */ { fprintf(stderr,"ERROR: process %d: Cannot allocate memory\n", myid); MPI_Finalize(); exit(1); } MPI_Recv(packed, len, MPI_BYTE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, &status); /* receive packed stream */ stream = unpack_sprng(packed); /* unpack stream */ printf(" Process 1 has received the packed stream\n"); printf("Process %d: Print information about stream:\n",myid); print_sprng(stream); free(packed); /* free array of packed stream */ printf(" Process 1 prints 2 numbers from received stream:\n"); for (i=0;i<2;i++) { rn = sprng(stream); /* generate double precision random number */ printf("Process %d: %f\n", myid, rn); } free_sprng(stream); /* free memory used to store stream state */ } MPI_Finalize(); /* terminate MPI */ } SHAR_EOF fi # end of overwriting check if test -f 'messagef-simple_mpi.F' then echo shar: will not over-write existing file "'messagef-simple_mpi.F'" else cat << "SHAR_EOF" > 'messagef-simple_mpi.F' C C Demonstrates passing a stream to another process C Process 0 initializes a random number stream and prints a few random C numbers. It then passes this stream to process 1, which recieves it C and prints a few random numbers from this stream. program messagef_simple_mpi implicit none #define SIMPLE_SPRNG #include #include "sprng_f.h" integer seed,i,myid, nprocs, ierror, len, junk integer status(MPI_STATUS_SIZE) SPRNG_POINTER junkPtr real*8 rn integer packed(MAX_PACKED_LENGTH) call MPI_INIT(ierror) call MPI_COMM_SIZE(MPI_COMM_WORLD, nprocs, ierror) call MPI_COMM_RANK(MPI_COMM_WORLD, myid, ierror) if (nprocs .lt. 2) then print *, 'ERROR: At least 2 processes required' call MPI_FINALIZE(ierror) call exit(1) endif seed = 985456376 if (myid .eq. 0) then junkPtr = init_sprng(seed,SPRNG_DEFAULT) write(6,"('Process',i2,': Print information about stream:')") & myid junk = print_sprng() write(6,"('Process',i2,': Print 2 random numbers in [0,1):')") & myid do 100 i = 1, 2 rn = sprng() write(6, "('Process',i2, ': ', f8.6)") myid, rn 100 continue len = pack_sprng(packed) ! inform process 1 how many bytes process 0 will send. call MPI_SEND(len, 1, MPI_INTEGER, 1, 0, MPI_COMM_WORLD, & ierror) call MPI_SEND(packed, len, MPI_INTEGER, 1, 0, MPI_COMM_WORLD, & ierror) print*, 'Process 0 sends stream to process 1' elseif (myid .eq. 1) then junkPtr = init_sprng(seed,SPRNG_DEFAULT) call MPI_RECV(len, 1, MPI_INTEGER, 0, MPI_ANY_TAG, & MPI_COMM_WORLD,status, ierror) call MPI_RECV(packed, len, MPI_INTEGER, 0, MPI_ANY_TAG, & MPI_COMM_WORLD, status, ierror) junkPtr = unpack_sprng(packed) print *, 'Process 1 has received the packed stream' write(6,"('Process',i2,': Print information about stream:')") & myid junk = print_sprng() print *, 'Process 1 prints 2 numbers from received stream:' do 200 i = 1, 2 rn = sprng() write(6, "('Process', i2, ': ', f8.6)") myid, rn 200 continue endif call MPI_FINALIZE(ierror) end SHAR_EOF fi # end of overwriting check if test -f 'messagef_mpi.F' then echo shar: will not over-write existing file "'messagef_mpi.F'" else cat << "SHAR_EOF" > 'messagef_mpi.F' C C Demonstrates passing a stream to another process C Process 0 initializes a random number stream and prints a few random C numbers. It then passes this stream to process 1, which recieves it C and prints a few random numbers from this stream. C C Uncomment the following line to get the interface with pointer checking C #define CHECK_POINTERS program messagef_mpi implicit none #include #include "sprng_f.h" integer seed,i,myid, nprocs, len, junk integer streamnum, nstreams, ierror SPRNG_POINTER stream real*8 rn integer status(MPI_STATUS_SIZE) integer packed(MAX_PACKED_LENGTH) call MPI_INIT(ierror) call MPI_COMM_SIZE(MPI_COMM_WORLD, nprocs, ierror) call MPI_COMM_RANK(MPI_COMM_WORLD, myid, ierror) if (nprocs .lt. 2) then print *, 'ERROR: At least 2 processes required' call MPI_FINALIZE(ierror) call exit(1) endif if (myid .eq. 0) then streamnum = 0 ! process 0 sends stream to process 1 nstreams = 1 seed = 985456376 C stream = init_sprng(streamnum,nstreams,seed,SPRNG_DEFAULT) write(6,"('Process',i2,': Print information about stream:')") & myid junk = print_sprng(stream) write(6,"('Process',i2,': Print 2 random numbers in [0,1):')") & myid do 100 i = 1, 2 rn = sprng(stream) write(6, "('Process', i2, ': ', f8.6)") myid, rn 100 continue len = pack_sprng(stream, packed) ! inform process 1 how many bytes process 0 will send. call MPI_SEND(len,1,MPI_INTEGER,1,0,MPI_COMM_WORLD,ierror) call MPI_SEND(packed,len,MPI_INTEGER,1,0, & MPI_COMM_WORLD,ierror) nstreams = free_sprng(stream) print*, 'Process 0 sends stream to process 1' write(6,"(i2,' generators now exist on process 0')")nstreams elseif (myid .eq. 1) then call MPI_RECV(len,1,MPI_INTEGER,0,MPI_ANY_TAG,MPI_COMM_WORLD, & status, ierror) call MPI_RECV(packed,len,MPI_INTEGER,0,MPI_ANY_TAG, & MPI_COMM_WORLD,status, ierror) stream = unpack_sprng(packed) print *, 'Process 1 has received the packed stream' write(6, 250) myid 250 format('Process',i2,': Print information about stream:') junk = print_sprng(stream) print *, 'Process 1 prints 2 numbers from received stream:' do 200 i = 1, 2 rn = sprng(stream) write(6, "('Process', i2, ': ', f8.6)") myid, rn 200 continue junk = free_sprng(stream) endif call MPI_FINALIZE(ierror) end SHAR_EOF fi # end of overwriting check if test -f 'myrandom.c' then echo shar: will not over-write existing file "'myrandom.c'" else cat << "SHAR_EOF" > 'myrandom.c' #include #include double myrandom_() /* remove _ before C compilation */ { return (double) rand()/RAND_MAX; } SHAR_EOF fi # end of overwriting check if test -f 'pi-simple.c' then echo shar: will not over-write existing file "'pi-simple.c'" else cat << "SHAR_EOF" > 'pi-simple.c' /***************************************************************************/ /* ____Demonstrates SPRNG use for Monte Carlo integration____ */ /* Compute pi using Monte Carlo integration. Random points are generated */ /* in a square of size 2. The value of pi is estimated as four times the */ /* the proportion of samples that fall within a circle of unit radius. */ /***************************************************************************/ #include #include #include #define SIMPLE_SPRNG /* simple interface */ #include "sprng.h" #define EXACT_PI 3.141592653589793238462643 main(argc,argv) int argc; char *argv[]; { int in, n, in_old, n_old; double pi, error, stderror, p=EXACT_PI/4.0; char filename[80]; initialize(&n, &in_old, &n_old, filename); /* read args & initialize */ in = count_in_circle(n); /* count samples in circle */ in += in_old; /* # in circle, in all runs */ n += n_old; /* # of samples, in all runs */ pi = (4.0*in)/n; /* estimate pi */ error = fabs(pi - EXACT_PI); /* determine error */ stderror = 4*sqrt(p*(1.0-p)/n); /* standard error */ printf( "pi is estimated as %18.16f from %12d samples.\n", pi, n); printf( "\tError = %10.8g, standard error = %10.8g\n", error, stderror); save_state(filename, in, n); /* check-point final state */ } int count_in_circle(n) /* count # of samples in circle */ int n; { int i, in; double x, y; for (i=in=0; i 'pi-simple_mpi.c' /***************************************************************************/ /* ____Demonstrates SPRNG use for Monte Carlo integration____ */ /* Compute pi using Monte Carlo integration. Random points are generated */ /* in a square of size 2. The value of pi is estimated as four times the */ /* the proportion of samples that fall within a circle of unit radius. */ /* The final state of the computations is check-pointed at the end, so the */ /* the calculations can be continued from the previous state. However, the */ /* same number of processors should be used as in the previous run. */ /***************************************************************************/ #include #include #include #include "mpi.h" #define SIMPLE_SPRNG /* simple interface */ #define USE_MPI /* MPI version of SPRNG */ #include "sprng.h" #define EXACT_PI 3.141592653589793238462643 #define RECV_STREAM_TAG 1 main(argc,argv) int argc; char *argv[]; { int in, i, seed, n, my_n, in_old, n_old, nprocs, myid, temp; double pi, error, stderror, p=EXACT_PI/4.0; char filename[80]; /*************************** Initialization ******************************/ MPI_Init(&argc,&argv); /* Initialize MPI */ MPI_Comm_size(MPI_COMM_WORLD,&nprocs); /* Find number of processes */ MPI_Comm_rank(MPI_COMM_WORLD,&myid); /* Find rank of process */ initialize(&n, &in_old, &n_old, filename); /* read args & initialize */ my_n = n/nprocs; /* number of samples for this process */ if(myid < n%nprocs) my_n++; /******************** Count number of samples in circle ******************/ temp = count_in_circle(my_n); /* count samples in circle */ /* sum # in circle over all processes */ MPI_Reduce(&temp, &in, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); /*************************** Determine Pi ********************************/ if(myid == 0) { in += in_old; /* # in circle, in all runs */ n += n_old; /* # of samples, in all runs */ pi = (4.0*in)/n; /* estimate pi */ error = fabs(pi - EXACT_PI); /* determine error */ stderror = 4*sqrt(p*(1.0-p)/n); /* standard error */ printf( "pi is estimated as %18.16f from %12d samples.\n", pi, n); printf( "\tError = %10.8g, standard error = %10.8g\n", error, stderror); } /*************************** Save final state ****************************/ save_state(filename,in,n); /* save final state of computation*/ MPI_Finalize(); /* Terminate MPI */ } int count_in_circle(n) /* count # of samples in circle */ int n; { int i, in; double x, y; for (i=in=0; i 'pif-simple.F' C/***************************************************************************/ C/* ____Demonstrates SPRNG use for Monte Carlo integration____ */ C/* Compute pi using Monte Carlo integration. Random points are generated */ C/* in a square of size 2. The value of pi is estimated as four times */ C/* the proportion of samples that fall within a circle of unit radius. */ C/***************************************************************************/ program pif_simple implicit none #define SIMPLE_SPRNG ! simple interface #include "sprng_f.h" integer in, n, in_old, n_old, count_in_circle real*8 pi, error, stderror, p, EXACT_PI character filename*7 EXACT_PI = 3.141592653589793238462643 p = EXACT_PI/4.0 C-- initialization: to initialize n, in_old, n_old, and filename call initialize(n, in_old, n_old, filename) in = count_in_circle(n) ! count samples in circle in = in + in_old ! # in circle, in all runs n = n + n_old ! # of samples, in all runs pi = (4.0*in)/n error = abs(pi - EXACT_PI) stderror = 4*sqrt(p*(1.0-p)/n) write(*,114) pi, n write(*, 115) error, stderror 114 format('pi is estimated as ', f18.16, ' from ', i12, ' samples.') 115 format('Error = ', g18.8, ' standard error = ', g18.8) call save_state(filename, in, n) !check-point final state end C-- count # of samples in cirlce integer function count_in_circle(n) implicit none #include "sprng_f.h" integer n, i, in real*8 x, y in = 0 do 10 i=1, n x = 2*sprng() - 1.0 ! x coordinate y = 2*sprng() - 1.0 ! y coordinate if (x*x + y*y .lt. 1.0) then !check if point (x,y) is in circle in = in +1 endif 10 continue count_in_circle = in return end C-- initialization -- subroutine initialize(n, in_old, n_old, filename) implicit none #include "sprng_f.h" integer n, in_old, n_old, seed, size, junk SPRNG_POINTER junkPtr character filename*7, firstChar*1, buffer(MAX_PACKED_LENGTH) print*, 'Enter 9 for a new run, or 2 to continue an old run' read(*,113) firstChar print*, 'Enter file name(length 7) to store final state:' read(*, 111) filename ! 7 characters please print*, 'Enter number of new samples:' read(*,*)n 111 format(A7) 113 format(A1) if (firstChar .eq. '9') then ! new set of runs seed = make_sprng_seed() ! make seed from date/time information junkPtr = init_sprng(seed, CRAYLCG) ! initialize stream junk = print_sprng() in_old = 0 n_old = 0 else ! continue from previously stored state open(31, file = filename, status = 'unknown', & form = 'unformatted') read(31) in_old, n_old, size, buffer !read previous run info. junkPtr = unpack_sprng(buffer) close (31) endif return end C-- save the final state of the default stream into a file subroutine save_state(filename, in, n) implicit none #include "sprng_f.h" integer in, n, size character filename*7, buffer(MAX_PACKED_LENGTH) open(31, file = filename, status = 'unknown', & form = 'unformatted') size = pack_sprng(buffer) write(31)in,n,size,buffer !write the current run info. for future use close(31) return end SHAR_EOF fi # end of overwriting check if test -f 'seed-simple.c' then echo shar: will not over-write existing file "'seed-simple.c'" else cat << "SHAR_EOF" > 'seed-simple.c' /****************************************************************************/ /* ____Demonstrates the use make_sprng_seed____ */ /* 'make_sprng_seed' is used to produce a new seed each time the program is */ /* run. Then a few random numbers are printed. */ /****************************************************************************/ #include #define SIMPLE_SPRNG /* simple interface */ #include "sprng.h" /* SPRNG header file */ main() { int i, seed; double rn; seed = make_sprng_seed(); /* make new seed each time program is run */ init_sprng(seed,SPRNG_DEFAULT); /* initialize stream */ printf(" Printing information about new stream\n"); print_sprng(); printf(" Printing 3 random numbers in [0,1):\n"); for (i=0;i<3;i++) { rn = sprng(); /* generate double precision random number */ printf("%f\n", rn); } } SHAR_EOF fi # end of overwriting check if test -f 'seed-simple_mpi.c' then echo shar: will not over-write existing file "'seed-simple_mpi.c'" else cat << "SHAR_EOF" > 'seed-simple_mpi.c' /***************************************************************************/ /* ____Demonstrates the use of make_seed with MPI____ */ /* 'make_sprng_seed' is called to produce a new seed each time the program */ /* is run. The same seed is produced on each process. */ /***************************************************************************/ #include #include /* MPI header file */ #define SIMPLE_SPRNG /* simple interface */ #define USE_MPI /* SPRNG makes MPI calls */ #include "sprng.h" /* SPRNG header file */ main(int argc, char *argv[]) { int seed; double rn; int myid, i; /*************************** MPI calls ***********************************/ MPI_Init(&argc, &argv); /* Initialize MPI */ MPI_Comm_rank(MPI_COMM_WORLD, &myid); /* find process id */ /************************** Initialization *******************************/ seed = make_sprng_seed(); /* make new seed each time program is run */ /* Seed should be the same on all processes */ printf("Process %d: seed = %16d\n", myid, seed); init_sprng(seed,SPRNG_DEFAULT); /* initialize stream */ printf("Process %d: Print information about stream:\n",myid); print_sprng(); /************************ print random numbers ***************************/ for (i=0;i<3;i++) { rn = sprng(); /* generate double precision random number */ printf("process %d, random number %d: %f\n", myid, i+1, rn); } MPI_Finalize(); /* Terminate MPI */ } SHAR_EOF fi # end of overwriting check if test -f 'seed.c' then echo shar: will not over-write existing file "'seed.c'" else cat << "SHAR_EOF" > 'seed.c' /****************************************************************************/ /* ____Demonstrates the use make_sprng_seed____ */ /* 'make_sprng_seed' is used to produce a new seed each time the program is */ /* run. Then a few random numbers are printed. */ /****************************************************************************/ #include /* Uncomment the following line to get the interface with pointer checking */ /*#define CHECK_POINTERS */ #include "sprng.h" /* SPRNG header file */ main() { int streamnum, nstreams, seed, *stream, i; double rn; /************************** Initialization *******************************/ streamnum = 0; nstreams = 1; seed = make_sprng_seed(); /* make new seed each time program is run */ stream = init_sprng(streamnum,nstreams,seed,SPRNG_DEFAULT); /*initialize stream*/ printf(" Printing information about new stream\n"); print_sprng(stream); /************************ print random numbers ***************************/ printf(" Printing 3 random numbers in [0,1):\n"); for (i=0;i<3;i++) { rn = sprng(stream); /* generate double precision random number */ printf("%f\n", rn); } free_sprng(stream); /* free memory used to store stream state */ } SHAR_EOF fi # end of overwriting check if test -f 'seed_mpi.c' then echo shar: will not over-write existing file "'seed_mpi.c'" else cat << "SHAR_EOF" > 'seed_mpi.c' /***************************************************************************/ /* ____Demonstrates the use of make_seed with MPI____ */ /* 'make_sprng_seed' is called to produce a new seed each time the program */ /* is run. The same seed is produced on each process. */ /***************************************************************************/ #include #include /* MPI header file */ /* Uncomment the following line to get the interface with pointer checking */ /*#define CHECK_POINTERS */ #define USE_MPI /* SPRNG makes MPI calls */ #include "sprng.h" /* SPRNG header file */ main(int argc, char *argv[]) { int streamnum, nstreams, seed, *stream, i, myid, nprocs; double rn; /*************************** MPI calls ***********************************/ MPI_Init(&argc, &argv); /* Initialize MPI */ MPI_Comm_rank(MPI_COMM_WORLD, &myid); /* find process id */ MPI_Comm_size(MPI_COMM_WORLD, &nprocs); /* find number of processes */ /************************** Initialization *******************************/ streamnum = myid; nstreams = nprocs; /* one stream per processor */ seed = make_sprng_seed(); /* make new seed each time program is run */ /* Seed should be the same on all processes */ printf("Process %d: seed = %16d\n", myid, seed); stream = init_sprng(streamnum,nstreams,seed,SPRNG_DEFAULT); /*initialize stream*/ printf("Process %d: Print information about stream:\n",myid); print_sprng(stream); /************************ print random numbers ***************************/ for (i=0;i<3;i++) { rn = sprng(stream); /* generate double precision random number */ printf("process %d, random number %d: %f\n", myid, i+1, rn); } free_sprng(stream); /* free memory used to store stream state */ MPI_Finalize(); /* Terminate MPI */ } SHAR_EOF fi # end of overwriting check if test -f 'seedf-simple.F' then echo shar: will not over-write existing file "'seedf-simple.F'" else cat << "SHAR_EOF" > 'seedf-simple.F' C C Demonstrates the use make_sprng_seed C 'make_sprng_seed' is used to produce a new seed each time the program is C run. Then a few random numbers are printed. C program seedf_simple implicit none #define SIMPLE_SPRNG #include "sprng_f.h" integer seed, i, junk SPRNG_POINTER junkPtr real*8 rn C generate a new seed each time program is run and initialize stream seed = make_sprng_seed() junkPtr = init_sprng(seed,SPRNG_DEFAULT) print *, 'Printing information about new stream' junk = print_sprng() print *, 'Printing 3 random numbers in [0,1):' do 100 i = 1, 3 rn = sprng() write(*,"(f8.6)") rn 100 continue end SHAR_EOF fi # end of overwriting check if test -f 'seedf-simple_mpi.F' then echo shar: will not over-write existing file "'seedf-simple_mpi.F'" else cat << "SHAR_EOF" > 'seedf-simple_mpi.F' C C Demonstrates the use of make_seed with MPI C'make_sprng_seed' is called to produce a new seed each time the program C is run. The same seed is produced on each process. C program seedf_simple_mpi implicit none #define SIMPLE_SPRNG #define USE_MPI 1 #include #include "sprng_f.h" integer seed, i, myid, ierror, junk SPRNG_POINTER junkPtr real*8 rn call MPI_INIT(ierror) call MPI_COMM_RANK(MPI_COMM_WORLD, myid, ierror) seed = make_sprng_seed() !produce a new seed each time program is run C Seed should be the same on all processes write(6, 911) myid, seed 911 format("Process", i2, ": seed = ", i16) junkPtr = init_sprng(seed,SPRNG_DEFAULT) write(6, 922) myid 922 format("Process", i2, & ": Print information about stream:") junk = print_sprng() do 100 i = 1, 3 rn = sprng() write(6, 933) myid, i, rn 100 continue 933 format("process", i2, ", random number", i2, ": ", f8.6) call MPI_FINALIZE(ierror) end SHAR_EOF fi # end of overwriting check if test -f 'seedf.F' then echo shar: will not over-write existing file "'seedf.F'" else cat << "SHAR_EOF" > 'seedf.F' C C Demonstrates the use make_sprng_seed C 'make_sprng_seed' is used to produce a new seed each time the program is C run. Then a few random numbers are printed. C C Uncomment the following line to get the interface with pointer checking C #define CHECK_POINTERS program seedf implicit none #include "sprng_f.h" integer streamnum, nstreams, seed, i, junk SPRNG_POINTER stream real*8 rn streamnum = 0 nstreams = 1 C generate a new seed each time program is run and initialize stream seed = make_sprng_seed() stream = init_sprng(streamnum,nstreams,seed,SPRNG_DEFAULT) print *, 'Printing information about new stream' junk = print_sprng(stream) print *, 'Printing 3 random numbers in [0,1):' do 100 i = 1, 3 rn = sprng(stream) write(*,"(f8.6)") rn 100 continue junk = free_sprng(stream) end SHAR_EOF fi # end of overwriting check if test -f 'seedf_mpi.F' then echo shar: will not over-write existing file "'seedf_mpi.F'" else cat << "SHAR_EOF" > 'seedf_mpi.F' C C Demonstrates the use of make_seed with MPI C'make_sprng_seed' is called to produce a new seed each time the program C is run. The same seed is produced on each process. C C Uncomment the following line to get the interface with pointer checking C #define CHECK_POINTERS program seedf_mpi implicit none #define USE_MPI 1 #include #include "sprng_f.h" integer streamnum, nstreams, seed, i SPRNG_POINTER stream real*8 rn integer myid, nprocs, ierror, junk call MPI_INIT(ierror) call MPI_COMM_SIZE(MPI_COMM_WORLD, nprocs, ierror) call MPI_COMM_RANK(MPI_COMM_WORLD, myid, ierror) streamnum = myid nstreams = nprocs seed = make_sprng_seed() !produce a new seed each time program is run C Seed should be the same on all processes write(6, 911) myid, seed 911 format("Process", i2, ": seed = ", i16) stream = init_sprng(streamnum,nstreams,seed,SPRNG_DEFAULT) write(6, 922) myid 922 format("Process", i2, & ": Print information about stream:") junk = print_sprng(stream) do 100 i = 1, 3 rn = sprng(stream) write(6, 933) myid, i, rn 100 continue 933 format("process", i2, ", random number", i2, ": ", f8.6) junk = free_sprng(stream) call MPI_FINALIZE(ierror) end SHAR_EOF fi # end of overwriting check if test -f 'simple-simple.c' then echo shar: will not over-write existing file "'simple-simple.c'" else cat << "SHAR_EOF" > 'simple-simple.c' /****************************************************************************/ /* ____Demonstrates the use of sprng without initialization____ */ /* A few double precision random numbers are generated, without the user */ /* explicitly initializing the streams. SPRNG automatically initializes a */ /* stream with default seed and parameter the first time 'sprng' is called. */ /****************************************************************************/ #include #define SIMPLE_SPRNG /* simple interface */ #include "sprng.h" /* SPRNG header file */ main() { double rn; int i; printf(" Printing 3 random numbers in [0,1):\n"); for (i=0;i<3;i++) { rn = sprng(); /* generate double precision random number */ printf("%f\n",rn); } } SHAR_EOF fi # end of overwriting check if test -f 'simplef-simple.F' then echo shar: will not over-write existing file "'simplef-simple.F'" else cat << "SHAR_EOF" > 'simplef-simple.F' C C ____Demonstrates the use of sprng without initialization____ */ C A few double precision random numbers are generated, without the user */ C explicitly initializing the streams. SPRNG automatically initializes a */ C stream with default seed and parameter the first time 'sprng' is called. */ C program simplef_simple implicit none #define SIMPLE_SPRNG #include "sprng_f.h" integer i real*8 rn print *, 'Printing 3 random numbers in [0,1):' do 100 i = 1, 3 rn = sprng() write(*,"(f8.6)") rn 100 continue end SHAR_EOF fi # end of overwriting check if test -f 'spawn.c' then echo shar: will not over-write existing file "'spawn.c'" else cat << "SHAR_EOF" > 'spawn.c' /***************************************************************************/ /* ____Demonstrates the use of spawn_sprng____ */ /* A random number stream is initialized and a few random numbers are */ /* printed. Then two streams are spawned and a few numbers from one of them*/ /* is printed. */ /***************************************************************************/ #include /* Uncomment the following line to get the interface with pointer checking */ /*#define CHECK_POINTERS */ #include "sprng.h" /* SPRNG header file */ #define SEED 985456376 main() { int streamnum, nstreams, *stream, **new; double rn; int i, irn, nspawned; /****************** Initialization values *******************************/ streamnum = 0; nstreams = 1; stream = init_sprng(streamnum,nstreams,SEED,SPRNG_DEFAULT); /* initialize stream */ printf(" Print information about stream:\n"); print_sprng(stream); /*********************** print random numbers ***************************/ printf(" Printing 2 random numbers in [0,1):\n"); for (i=0;i<2;i++) { rn = sprng(stream); /* generate double precision random number*/ printf("%f\n", rn); } /**************************** spawn streams *****************************/ printf(" Spawned two streams\n"); nspawned = 2; nspawned = spawn_sprng(stream,2,&new); /* spawn 2 streams */ if(nspawned != 2) { fprintf(stderr,"Error: only %d streams spawned\n", nspawned); exit(1); } printf(" Information on first spawned stream:\n"); print_sprng(new[0]); printf(" Information on second spawned stream:\n"); print_sprng(new[1]); printf(" Printing 2 random numbers from second spawned stream:\n"); for (i=0;i<2;i++) { rn = sprng(new[1]); /* generate a random number */ printf("%f\n", rn); } /*************************** free memory ********************************/ free_sprng(stream); /* free memory used to store stream state */ free_sprng(new[0]); /* free memory used to store stream state */ free_sprng(new[1]); /* free memory used to store stream state */ free(new); } SHAR_EOF fi # end of overwriting check if test -f 'spawnf.F' then echo shar: will not over-write existing file "'spawnf.F'" else cat << "SHAR_EOF" > 'spawnf.F' C C ____Demonstrates the use of spawn_sprng____ C A random number stream is initialized and a few random numbers are C printed. Then two streams are spawned and a few numbers from one of them C is printed C C Uncomment the following line to get the interface with pointer checking C #define CHECK_POINTERS program sprng_spawnf implicit none #include "sprng_f.h" integer streamnum, nstreams, seed,junk integer i, nspawned SPRNG_POINTER stream, new(2) real*8 rn streamnum = 0 nstreams = 1 seed = 985456376 C initialize stream stream = init_sprng(streamnum,nstreams,seed,SPRNG_DEFAULT) print *, 'Print information about stream:' junk = print_sprng(stream) print *, 'Printing 2 random numbers in [0,1):' do 100 i = 1, 2 rn = sprng(stream) write(*, "(f8.6)") rn 100 continue C spawn streams print*, 'Spawned two streams' nspawned = 2 nspawned = spawn_sprng(stream, 2, new(1)) if (nspawned .ne. 2) then write(*, "('Error: only ',i3, ' streams spawned')") nspawned call exit(1) endif print *, 'Information on first spawned stream:' junk = print_sprng(new(1)) print *, 'Information on second spawned stream:' junk = print_sprng(new(2)) print *, 'Printing 2 random numbers from second spawned stream:' do 200 i = 1, 2 rn = sprng(new(2)) write(*, "(f8.6)") rn 200 continue C free memory junk = free_sprng(stream) junk = free_sprng(new(1)) junk = free_sprng(new(2)) end SHAR_EOF fi # end of overwriting check if test -f 'sprng-simple.c' then echo shar: will not over-write existing file "'sprng-simple.c'" else cat << "SHAR_EOF" > 'sprng-simple.c' /***************************************************************************/ /* ____Demonstrates the use of sprng and isprng____ */ /* A random number stream is initialized and a few random double precision */ /* numbers and a few integers are printed. */ /***************************************************************************/ #include #define SIMPLE_SPRNG /* simple interface */ #include "sprng.h" /* SPRNG header file */ #define SEED 985456376 main() { int seed, i, irn; double rn; /************************** Initialization *******************************/ init_sprng(SEED,SPRNG_DEFAULT); /* initialize stream */ printf(" Print information about new stream:\n"); print_sprng(); /*********************** print random numbers ****************************/ printf(" Printing 3 random numbers in [0,1):\n"); for (i=0;i<3;i++) { rn = sprng(); /* generate double precision random number */ printf("%f\n",rn); } /*********************** print random integers ***************************/ printf(" Printing 3 random integers in [0,2^31):\n"); for (i=0;i<3;i++) { irn = isprng(); /* generate an integer random number */ printf("%16d\n",irn); } } SHAR_EOF fi # end of overwriting check if test -f 'sprng-simple_mpi.C' then echo shar: will not over-write existing file "'sprng-simple_mpi.C'" else cat << "SHAR_EOF" > 'sprng-simple_mpi.C' /***************************************************************************/ /* Demonstrates sprng use in C++ with MPI */ /* A distinct stream is created on each process, then prints a few */ /* random numbers. */ /***************************************************************************/ #include #include // MPI header file #define SIMPLE_SPRNG // simple interface #define USE_MPI // use MPI to find number of processes #include "sprng.h" // SPRNG header file #define SEED 985456376 main(int argc, char *argv[]) { double rn; int i, myid; /*************************** MPI calls ***********************************/ MPI_Init(&argc, &argv); /* Initialize MPI */ MPI_Comm_rank(MPI_COMM_WORLD, &myid); /* find process id */ /************************** Initialization *******************************/ init_sprng(SEED,SPRNG_DEFAULT); /* initialize stream */ printf("Process %d, print information about stream:\n", myid); print_sprng(); /************************ print random numbers ***************************/ for (i=0;i<3;i++) { rn = sprng(); /* generate double precision random number */ printf("Process %d, random number %d: %.14f\n", myid, i+1, rn); } MPI_Finalize(); /* Terminate MPI */ } SHAR_EOF fi # end of overwriting check if test -f 'sprng-simple_mpi.c' then echo shar: will not over-write existing file "'sprng-simple_mpi.c'" else cat << "SHAR_EOF" > 'sprng-simple_mpi.c' /***************************************************************************/ /* Demonstrates sprng use with one stream per process */ /* A distinct stream is created on each process, then prints a few */ /* random numbers. */ /***************************************************************************/ #include #include /* MPI header file */ #define SIMPLE_SPRNG /* simple interface */ #define USE_MPI /* use MPI to find number of processes */ #include "sprng.h" /* SPRNG header file */ #define SEED 985456376 main(int argc, char *argv[]) { double rn; int i, myid; /*************************** MPI calls ***********************************/ MPI_Init(&argc, &argv); /* Initialize MPI */ MPI_Comm_rank(MPI_COMM_WORLD, &myid); /* find process id */ /************************** Initialization *******************************/ init_sprng(SEED,SPRNG_DEFAULT); /* initialize stream */ printf("Process %d, print information about stream:\n", myid); print_sprng(); /************************ print random numbers ***************************/ for (i=0;i<3;i++) { rn = sprng(); /* generate double precision random number */ printf("Process %d, random number %d: %.14f\n", myid, i+1, rn); } MPI_Finalize(); /* Terminate MPI */ } SHAR_EOF fi # end of overwriting check if test -f 'sprng.C' then echo shar: will not over-write existing file "'sprng.C'" else cat << "SHAR_EOF" > 'sprng.C' /***************************************************************************/ /* ____Demonstrates the use of sprng in C++____ */ /* A random number stream is initialized and a few random double precision */ /* numbers are printed. */ /***************************************************************************/ #include #include #include "sprng.h" /* SPRNG header file */ #define SEED 985456376 main() { int streamnum, nstreams, *stream; double rn; int irn; int i; /****************** Initialization values *******************************/ streamnum = 0; nstreams = 1; stream = init_sprng(streamnum,nstreams,SEED,SPRNG_DEFAULT); /* initialize stream */ cout << " Print information about new stream:\n"; print_sprng(stream); /*********************** print random numbers ***************************/ cout << " Printing 3 random numbers in [0,1):\n"; for (i=0;i<3;i++) { rn = sprng(stream); /* generate a double precision random number */ cout << rn << "\n"; } free_sprng(stream); /* free memory used to store stream state */ } SHAR_EOF fi # end of overwriting check if test -f 'sprng.c' then echo shar: will not over-write existing file "'sprng.c'" else cat << "SHAR_EOF" > 'sprng.c' /***************************************************************************/ /* ____Demonstrates the use of sprng and isprng____ */ /* A random number stream is initialized and a few random double precision */ /* numbers and a few integers are printed. */ /***************************************************************************/ #include /* Uncomment the following line to get the interface with pointer checking */ /*#define CHECK_POINTERS */ #include "sprng.h" /* SPRNG header file */ #define SEED 985456376 main() { int streamnum, nstreams, *stream; double rn; int irn; int i; /****************** Initialization values *******************************/ streamnum = 0; nstreams = 1; stream = init_sprng(streamnum,nstreams,SEED,SPRNG_DEFAULT); /* initialize stream */ printf(" Print information about new stream:\n"); print_sprng(stream); /*********************** print random numbers ***************************/ printf(" Printing 3 random numbers in [0,1):\n"); for (i=0;i<3;i++) { rn = sprng(stream); /* generate a double precision random number */ printf("%f\n",rn); } printf(" Printing 3 random integers in [0,2^31):\n"); for (i=0;i<3;i++) { irn = isprng(stream); /* generate an integer random number */ printf("%16d\n",irn); } /*************************** free memory ********************************/ free_sprng(stream); /* free memory used to store stream state */ } SHAR_EOF fi # end of overwriting check if test -f 'sprng_mpi.c' then echo shar: will not over-write existing file "'sprng_mpi.c'" else cat << "SHAR_EOF" > 'sprng_mpi.c' /***************************************************************************/ /* Demonstrates sprng use with one stream per process */ /* A distinct stream is created on each process, then prints a few */ /* random numbers. */ /***************************************************************************/ #include #include /* MPI header file */ /* Uncomment the following line to get the interface with pointer checking */ /*#define CHECK_POINTERS */ #include "sprng.h" /* SPRNG header file */ #define SEED 985456376 main(int argc, char *argv[]) { int streamnum, nstreams, *stream; double rn; int i, myid, nprocs; /*************************** MPI calls ***********************************/ MPI_Init(&argc, &argv); /* Initialize MPI */ MPI_Comm_rank(MPI_COMM_WORLD, &myid); /* find process id */ MPI_Comm_size(MPI_COMM_WORLD, &nprocs); /* find number of processes */ /************************** Initialization *******************************/ streamnum = myid; nstreams = nprocs; /* one stream per processor */ stream = init_sprng(streamnum,nstreams,SEED,SPRNG_DEFAULT); /* initialize stream */ printf("Process %d, print information about stream:\n", myid); print_sprng(stream); /*********************** print random numbers ****************************/ for (i=0;i<3;i++) { rn = sprng(stream); /* generate double precision random number */ printf("Process %d, random number %d: %.14f\n", myid, i+1, rn); } /*************************** free memory *********************************/ free_sprng(stream); /* free memory used to store stream state */ MPI_Finalize(); /* Terminate MPI */ } SHAR_EOF fi # end of overwriting check if test -f 'sprngf-simple.F' then echo shar: will not over-write existing file "'sprngf-simple.F'" else cat << "SHAR_EOF" > 'sprngf-simple.F' C C Demonstrates the use of sprng and isprng C A random number stream is initialized and a few random double precision C numbers and a few integers are printed. C program sprngf_simple implicit none #define SIMPLE_SPRNG #include "sprng_f.h" SPRNG_POINTER junkPtr real*8 rn integer seed, irn, i, junk seed = 985456376 C initialization junkPtr = init_sprng(seed,SPRNG_DEFAULT) print *, 'Print information about new stream:' junk = print_sprng() print *, 'Printing 3 random numbers in [0,1):' do 100 i = 1, 3 rn = sprng() write(*,"(f8.6)") rn 100 continue print *, 'Printing 3 random integers in [0,2^31):' do 200 i = 1, 3 irn = isprng() write(*,"(i16)") irn 200 continue end SHAR_EOF fi # end of overwriting check if test -f 'sprngf-simple_mpi.F' then echo shar: will not over-write existing file "'sprngf-simple_mpi.F'" else cat << "SHAR_EOF" > 'sprngf-simple_mpi.F' C C Demonstrates sprng use with one stream per process C A distinct stream is created on each process then prints a few C random numbers. C program sprngf_mpi implicit none #define SIMPLE_SPRNG ! simple interface #define USE_MPI ! use MPI to find number of processes #include #include "sprng_f.h" SPRNG_POINTER junkPtr real*8 rn integer seed, i, myid, ierror,junk call MPI_INIT(ierror) call MPI_COMM_RANK(MPI_COMM_WORLD, myid, ierror) seed = 985456376 C junkPtr = init_sprng(seed,SPRNG_DEFAULT) write(*,"('Process', i2, ', print information about stream:')") & myid junk = print_sprng() do 100 i = 1, 3 rn = sprng() write(*, "('Process',i2,', random number ',i1,': ',f16.14)") & myid,i,rn 100 continue call MPI_FINALIZE(ierror) end SHAR_EOF fi # end of overwriting check if test -f 'sprngf.F' then echo shar: will not over-write existing file "'sprngf.F'" else cat << "SHAR_EOF" > 'sprngf.F' C C Demonstrates the use of sprng and isprng C A random number stream is initialized and a few random double precision C numbers and a few integers are printed. C C Uncomment the following line to get the interface with pointer checking C #define CHECK_POINTERS program sprngf implicit none #include "sprng_f.h" integer streamnum, nstreams, seed SPRNG_POINTER stream real*8 rn integer irn, i, junk streamnum = 0 nstreams = 1 seed = 985456376 C initialize stream stream = init_sprng(streamnum,nstreams,seed,SPRNG_DEFAULT) print *, 'Print information about new stream:' junk = print_sprng(stream) print *, 'Printing 3 random numbers in [0,1):' do 100 i = 1, 3 rn = sprng(stream) write(*,"(f8.6)") rn 100 continue print *, 'Printing 3 random integers in [0,2^31):' do 200 i = 1, 3 irn = isprng(stream) write(*,"(i16)") irn 200 continue junk = free_sprng(stream) end SHAR_EOF fi # end of overwriting check if test -f 'sprngf_mpi.F' then echo shar: will not over-write existing file "'sprngf_mpi.F'" else cat << "SHAR_EOF" > 'sprngf_mpi.F' C C Demonstrates sprng use with one stream per process C A distinct stream is created on each process then prints a few C random numbers. C C Uncomment the following line to get the interface with pointer checking C #define CHECK_POINTERS program sprngf_mpi implicit none #include #include "sprng_f.h" integer streamnum, nstreams, seed SPRNG_POINTER stream real*8 rn integer i, myid, nprocs, ierror, junk call MPI_INIT(ierror) call MPI_COMM_SIZE(MPI_COMM_WORLD, nprocs, ierror) call MPI_COMM_RANK(MPI_COMM_WORLD, myid, ierror) streamnum = myid nstreams = nprocs seed = 985456376 C stream = init_sprng(streamnum,nstreams,seed,SPRNG_DEFAULT) write(*,"('Process', i2, ', print information about stream:')") & myid junk = print_sprng(stream) do 100 i = 1, 3 rn = sprng(stream) write(*, "('Process',i2,', random number ',i1,': ',f16.14)") & myid,i,rn 100 continue junk = free_sprng(stream) call MPI_FINALIZE(ierror) end SHAR_EOF fi # end of overwriting check if test -f 'subroutinef.F' then echo shar: will not over-write existing file "'subroutinef.F'" else cat << "SHAR_EOF" > 'subroutinef.F' C C Demonstrates the use of sprng in subroutines program sprngf implicit none #include "sprng_f.h" integer streamnum, nstreams, seed,junk SPRNG_POINTER stream streamnum = 0 nstreams = 1 seed = 985456376 C initialize stream stream = init_sprng(streamnum,nstreams,seed,SPRNG_DEFAULT) print *, 'Printing information about new stream' junk = print_sprng(stream) call sub1(stream) junk = free_sprng(stream) end C --- print random numbers in subroutine --- subroutine sub1(stream) #include "sprng_f.h" SPRNG_POINTER stream real *8 rn print *, 'Printing 3 double precision numbers in [0,1): ' do 100 i = 1, 3 rn = sprng(stream) write(*, "(i6, 2H , f19.16)") i, rn 100 continue return end SHAR_EOF fi # end of overwriting check cd .. if test -f 'examples.html' then echo shar: will not over-write existing file "'examples.html'" else cat << "SHAR_EOF" > 'examples.html' SPRNG: Scalable Parallel Pseudo-Random Number Generator Library

User's Guide: Usage:Examples

Next:Generators Previous:Compilation


Examples

1. simple

Use of sprng without explicit initialization in the simple interface.

2. sprng

Produce random integers and reals: Use of init_sprng, sprng, print_sprng, isprng.

3. sprng_mpi

Use sprng to produce double precision random numbers on multiple processes.

4. fsprng_mpi

Produce single precision random numbers through the use of the FLOAT_GEN macro.

5. seed

Use make_sprng_seed to produce a seed using system date and time information on one process.

6. seed_mpi

Use make_sprng_seed to produce seeds on multiple processes.

7. checkpoint

Pack a stream and checkpoint the state of the computation.

8. message_mpi

Pack a stream and pass it to another process with MPI. Also use free_sprng in the default interface.

9. 2streams_mpi

Use two streams on each process. One stream is common to all the processes; the other is distinct.

10. spawn

Spawn new streams from an existing one through calls to spawn_sprng.

11. invalidid

Demonstrates the handling of invalid stream ID's in the interface with pointer checking.

12. convert

Convert a code that uses a different Random Number Generator to use SPRNG.

13. subroutine

Demonstrates SPRNG use in FORTRAN programs with subroutines.

14. pi-simple

This is a simple Monte Carlo application that estimates the value of PI based on the proportion of points that fall within a circle inscribed in a square.

15. pi-simple_mpi

This is a parallel version of pi-simple in which the work is divided among the available processes.


[Quick 
Start] [User's 
Guide] [Reference 
Manual] [Quick 
Reference] [Next: 
Generators]

SHAR_EOF fi # end of overwriting check if test -f 'frames.html' then echo shar: will not over-write existing file "'frames.html'" else cat << "SHAR_EOF" > 'frames.html' SPRNG User's Guide</head> Frame stuff not shown

SHAR_EOF fi # end of overwriting check if test -f 'generators.html' then echo shar: will not over-write existing file "'generators.html'" else cat << "SHAR_EOF" > 'generators.html' SPRNG: Scalable Parallel Pseudo-Random Number Generator Library

User's Guide:Details:Generators

Next:Message Passing Previous:Examples


Generators

1. Combined Multiple Recursive Generator

This generator is defined by the following relation:

z(n) = x(n) + y(n)*232 (Mod 264)

where x(n) is the sequence generated by the 64 bit Linear Congruential Generator and y(n) is the sequence generated by the following prime modulus Multiple Recursive Generator:

y(n) = 107374182*y(n-1) + 104480*y(n-5) (mod 2147483647)

The same prime modulus generator is used for all the streams. Streams differ due to differences in the 64 bit LCG.

The period of this generator is around 2219. The number of distinct streams available is over 108.

The multiplier a for the 64 bit LCG is a parameter to this generator and can be set during initialization.

When a call to isprng is made, the 31 high order bits of z(n) are returned. When a call to sprng is made, the result obtained is z(n)/264.

2. 48 Bit Linear Congruential Generator with Prime Addend

The recurrence relation for the sequence of random numbers produced by this generator is given by the following recurrence:

x(n) = a x(n-1) + p (Mod M)

where x(n) is the n th term in the sequence, p is a prime number and a is the multiplier. The value of M for this generator is 248.

Different random number streams are obtained by choosing different prime numbers as the addend p. There are theoretical results by Percus and Kalos which suggest that such a choice will yield reasonably independent streams. We have tested this generator empirically too.

The period of this generator is 248. The number of distinct streams available is of the order of 219. However, it is possible to exhaust the set of distinct streams quite fast if the user spawns streams too often. The distinct streams provided are more independent, as per the theoretical analysis mentioned above, if the addends are large prime numbers. Thus we provide streams with primes taken from the the high end of the range during initialization.

The multiplier a is a parameter to this generator and can be set during initialization.

When a call to isprng is made, the 31 high order bits of x(n) are returned. When a call to sprng is made, the result obtained is x(n)/M.

Initialization with different seeds starts the generator at different points in the sequence.

Note: The low order bits of this sequence have a small period. Therefore, if users utilizes certain bits of the sequence in order to take certain decisions in their algorithm, they should avoid using the low order bits.

This generator also has correlations between elements of the sequence separated by powers of two. So users should avoid using numbers n at a time where n is a power of two (such as 1024).

3. 64 Bit Linear Congruential Generator with Prime Addend

The features of this generator are similar to the 48 bit Linear Congruential Generator, except that the arithmetic is modulo 264. The multipliers and prime addends p for this generator are different from those for the 48 bit generator.

The period of this generator is 264. The number of distinct streams available is over 108.

4. Modified Lagged Fibonacci Generator

The recurrence relation for this sequence of random numbers is given by the following equation:

z(n) = x(n) XOR y(n)

where XOR is the exclusive-or operator, x and y are sequences obtained from Lagged Fibonacci sequences X and Y of the following form:

X(n) = X(n-k) + X(n-l) (mod M)
Y(n) = Y(n-k) + Y(n-l) (mod M)

l and k are called the lags of the generator, and we use the convention that l > k. M is chosen to be 232. X(n) and Y(n) are 32 bit integers. x is obtained from X by setting the Least Significant Bit of the latter to 0. y is obtained from Y by shifting the latter right by one bit. This modification of the Lagged Fibonacci Generator is performed in order to avoid certain correlations that are observed in the unmodified generator.

When a call to isprng is made, the 31 high order bits of z(n) are returned. When a call to sprng is made, the result obtained is z(n)/M.

The period of this generator is 231(2l-1) where l is the lag. For the default generator with lag l = 1279, the period is approximately 21310. The number of distinct streams available is 2[31(l-1)-1]. For the default generator this gives 239648 distinct streams. However, users should still be cautious while spawning new streams, since it is possible to exhaust the set of distinct streams even without using all of them if they spawn often from only a few of the original streams.

The sequence obtained is determined by the l initial values of the sequences X and Y. The seed used during initialization for this generator does not move one to a different point in the sequence. Rather, it returns a different sequence. The seeding algorithms ensures that if the same seed is used for all the streams, then the streams obtained are independent. If a user initializes different streams with different seeds, then it is possible that the same sequence may be assigned to two different streams and hence we may no longer have independent streams. Thus it is important to use the same seed while initializing all the streams with this generator. Test results for this generator's quality are also available.

The parameters to this generator are the values of the lags. More details on this generator and the seeding algorithms can be found papers by Mascagni, et al.

5. Multiplicative Lagged Fibonacci Generator

The recurrence relation for this sequence of random numbers is given by the following equation:

x(n) = x(n-k) * x(n-l) (mod M)

l and k are called the lags of the generator, and we use the convention that l > k. M is chosen to be 264.

When a call to isprng is made, the 31 high order bits of x(n) are returned. When a call to sprng is made, the result obtained is x(n)/M.

The period of this generator is 261(2l-1) where l is the lag. For the default generator with lag l = 17, the period is approximately 281. The number of distinct streams available is 2[63(l-1)-1]. For the default generator this gives around 21008 distinct streams. However, users should still be cautious while spawning new streams, since it is possible to exhaust the set of distinct streams even without using all of them if they spawn often from only a few of the original streams.

The sequence obtained is determined by the l initial values of the sequence x. The seed used during initialization for this generator does not move one to a different point in the sequence. Rather, it returns a different sequence. The seeding algorithms ensures that if the same seed is used for all the streams, then the streams obtained are independent. If a user initializes different streams with different seeds, then it is possible that the same sequence may be assigned to two different streams and hence we may no longer have independent streams. Thus it is important to use the same seed while initializing all the streams with this generator. Test results for this generator's quality are also available.

The parameters to this generator are the values of the lags. More details on this generator and the seeding algorithm will be given shortly.

6. Prime Modulus Linear Congruential Generator

This generator is defined by the following relation:

x(n) = a*x(n-1) (mod 261-1)

where the multiplier a differs for each stream. The mulitpler is chosen to be certain powers of 37 that give maximal period cycles of acceptable quality. The only acceptable parameter to this generator during initialization is the value SPRNG_DEFAULT.

The period of this generator is 261-2. The number of distinct streams available is roughly 258.

This generator is not installed automatically while installing SPRNG. In order to install it, please first install the GNU multiprecision arithmetic library libgmp.a in the same location as other SPRNG libraries. Then please change directory to sprng/SRC/pmlcg and type make.


[Quick 
Start] [User's 
Guide] [Reference 
Manual] [Quick 
Reference] [Next: 
Message Passing]

SHAR_EOF fi # end of overwriting check if test ! -d 'images' then mkdir 'images' fi cd 'images' if test -f 'energy.ps' then echo shar: will not over-write existing file "'energy.ps'" else cat << "SHAR_EOF" > 'energy.ps' %!PS-Adobe-2.0 %%Creator: MATLAB, The Mathworks, Inc. %%Title: MATLAB graph %%CreationDate: 12/02/96 11:27:51 %%DocumentNeededFonts: Helvetica %%DocumentProcessColors: Cyan Magenta Yellow Black %%Pages: (atend) %%BoundingBox: (atend) %%EndComments %%BeginProlog % MathWorks dictionary /MathWorks 150 dict begin % definition operators /bdef {bind def} bind def /ldef {load def} bind def /xdef {exch def} bdef /xstore {exch store} bdef % operator abbreviations /c /clip ldef /cc /concat ldef /cp /closepath ldef /gr /grestore ldef /gs /gsave ldef /mt /moveto ldef /np /newpath ldef /cm /currentmatrix ldef /sm /setmatrix ldef /rc {rectclip} bdef /rf {rectfill} bdef /rm /rmoveto ldef /rl /rlineto ldef /s /show ldef /sc {setcmykcolor} bdef /sr /setrgbcolor ldef /w /setlinewidth ldef /cap /setlinecap ldef % page state control /pgsv () def /bpage {/pgsv save def} bdef /epage {pgsv restore} bdef /bplot /gsave ldef /eplot {stroke grestore} bdef % orientation switch /portraitMode 0 def /landscapeMode 1 def % coordinate system mappings /dpi2point 0 def % font control /FontSize 0 def /FMS { /FontSize xstore %save size off stack findfont [FontSize 0 0 FontSize neg 0 0] makefont setfont }bdef /reencode { exch dup where {pop load} {pop StandardEncoding} ifelse exch dup 3 1 roll findfont dup length dict begin { 1 index /FID ne {def}{pop pop} ifelse } forall /Encoding exch def currentdict end definefont pop } bdef /isroman { findfont /CharStrings get /Agrave known } bdef /FMSR { 3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse exch FMS } bdef /csm { 1 dpi2point div -1 dpi2point div scale neg translate landscapeMode eq {90 rotate} if } bdef % line types: solid, dotted, dashed, dotdash /SO { [] 0 setdash } bdef /DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef /DA { [6 dpi2point mul] 0 setdash } bdef /DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4 dpi2point mul] 0 setdash } bdef % macros for lines and objects /L { lineto stroke } bdef /MP { 3 1 roll moveto 1 sub {rlineto} repeat } bdef /AP { {rlineto} repeat } bdef /PP { closepath fill } bdef /DP { closepath stroke } bdef /MR { 4 -2 roll moveto dup 0 exch rlineto exch 0 rlineto neg 0 exch rlineto closepath } bdef /FR { MR stroke } bdef /PR { MR fill } bdef /L1i { { currentfile picstr readhexstring pop } image } bdef /tMatrix matrix def /MakeOval { newpath tMatrix currentmatrix pop translate scale 0 0 1 0 360 arc tMatrix setmatrix } bdef /FO { MakeOval stroke } bdef /PO { MakeOval fill } bdef /PD { 2 copy moveto lineto stroke } bdef currentdict end def %%EndProlog %%BeginSetup MathWorks begin 0 cap 0 setlinejoin end %%EndSetup %%Page: 1 1 %%BeginPageSetup %%PageBoundingBox: 53 197 546 604 MathWorks begin bpage %%EndPageSetup %%BeginObject: graph1 1 bplot /dpi2point 12 def portraitMode 0216 7344 csm 431 91 5914 4882 MR c np 76 dict begin %Colortable dictionary /c0 { 0 0 0 sr} bdef /c1 { 1 1 1 sr} bdef /c2 { 1 0 0 sr} bdef /c3 { 0 1 0 sr} bdef /c4 { 0 0 1 sr} bdef /c5 { 1 1 0 sr} bdef /c6 { 1 0 1 sr} bdef /c7 { 0 1 1 sr} bdef %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR c1 0 0 6914 5184 PR 6 w DO 4 w c0 898 4612 mt 898 388 L 898 388 mt 898 388 L 1663 4612 mt 1663 388 L 1663 388 mt 1663 388 L 2429 4612 mt 2429 388 L 2429 388 mt 2429 388 L 3194 4612 mt 3194 388 L 3194 388 mt 3194 388 L 3960 4612 mt 3960 388 L 3960 388 mt 3960 388 L 4725 4612 mt 4725 388 L 4725 388 mt 4725 388 L 5491 4612 mt 5491 388 L 5491 388 mt 5491 388 L 6256 4612 mt 6256 388 L 6256 388 mt 6256 388 L 898 4612 mt 6256 4612 L 6256 4612 mt 6256 4612 L 898 4143 mt 6256 4143 L 6256 4143 mt 6256 4143 L 898 3673 mt 6256 3673 L 6256 3673 mt 6256 3673 L 898 3204 mt 6256 3204 L 6256 3204 mt 6256 3204 L 898 2735 mt 6256 2735 L 6256 2735 mt 6256 2735 L 898 2265 mt 6256 2265 L 6256 2265 mt 6256 2265 L 898 1796 mt 6256 1796 L 6256 1796 mt 6256 1796 L 898 1327 mt 6256 1327 L 6256 1327 mt 6256 1327 L 898 857 mt 6256 857 L 6256 857 mt 6256 857 L 898 388 mt 6256 388 L 6256 388 mt 6256 388 L 898 4612 mt 898 388 L 898 388 mt 6256 388 L 898 4612 mt 898 388 L 898 388 mt 6256 388 L 898 4612 mt 898 388 L 898 388 mt 6256 388 L SO 6 w 898 4612 mt 6256 4612 L 898 388 mt 6256 388 L 6256 4612 mt 6256 388 L 898 4612 mt 898 388 L 6256 4612 mt 6256 4612 L 898 4612 mt 898 4612 L 898 4612 mt 6256 4612 L 898 4612 mt 898 388 L 898 4612 mt 898 4612 L 898 4612 mt 898 4558 L 898 388 mt 898 442 L 734 4781 mt (-12) s 1663 4612 mt 1663 4558 L 1663 388 mt 1663 442 L 1499 4781 mt (-11) s 2429 4612 mt 2429 4558 L 2429 388 mt 2429 442 L 2265 4781 mt (-10) s 3194 4612 mt 3194 4558 L 3194 388 mt 3194 442 L 3070 4781 mt (-9) s 3960 4612 mt 3960 4558 L 3960 388 mt 3960 442 L 3836 4781 mt (-8) s 4725 4612 mt 4725 4558 L 4725 388 mt 4725 442 L 4601 4781 mt (-7) s 5491 4612 mt 5491 4558 L 5491 388 mt 5491 442 L 5367 4781 mt (-6) s 6256 4612 mt 6256 4558 L 6256 388 mt 6256 442 L 6132 4781 mt (-5) s 898 4612 mt 952 4612 L 6256 4612 mt 6202 4612 L 619 4665 mt (-14) s 898 4143 mt 952 4143 L 6256 4143 mt 6202 4143 L 619 4196 mt (-13) s 898 3673 mt 952 3673 L 6256 3673 mt 6202 3673 L 619 3726 mt (-12) s 898 3204 mt 952 3204 L 6256 3204 mt 6202 3204 L 619 3257 mt (-11) s 898 2735 mt 952 2735 L 6256 2735 mt 6202 2735 L 619 2788 mt (-10) s 898 2265 mt 952 2265 L 6256 2265 mt 6202 2265 L 699 2318 mt (-9) s 898 1796 mt 952 1796 L 6256 1796 mt 6202 1796 L 699 1849 mt (-8) s 898 1327 mt 952 1327 L 6256 1327 mt 6202 1327 L 699 1380 mt (-7) s 898 857 mt 952 857 L 6256 857 mt 6202 857 L 699 910 mt (-6) s 898 388 mt 952 388 L 6256 388 mt 6202 388 L 699 441 mt (-5) s 898 388 mt 6256 388 L 898 4612 mt 6256 4612 L 898 4612 mt 898 388 L 6256 4612 mt 6256 388 L 898 388 mt 898 388 L 6256 388 mt 6256 388 L gs 898 388 5359 4225 MR c np -642 1362 -1107 416 -1338 916 -988 643 -521 76 5584 1183 6 MP stroke gr 5548 1183 mt 5620 1183 L 5584 1147 mt 5584 1219 L 5548 1147 mt 5620 1219 L 5620 1147 mt 5548 1219 L 5027 1259 mt 5099 1259 L 5063 1223 mt 5063 1295 L 5027 1223 mt 5099 1295 L 5099 1223 mt 5027 1295 L 4039 1902 mt 4111 1902 L 4075 1866 mt 4075 1938 L 4039 1866 mt 4111 1938 L 4111 1866 mt 4039 1938 L 2701 2818 mt 2773 2818 L 2737 2782 mt 2737 2854 L 2701 2782 mt 2773 2854 L 2773 2782 mt 2701 2854 L 1594 3234 mt 1666 3234 L 1630 3198 mt 1630 3270 L 1594 3198 mt 1666 3270 L 1666 3198 mt 1594 3270 L 952 4596 mt 1024 4596 L 988 4560 mt 988 4632 L 952 4560 mt 1024 4632 L 1024 4560 mt 952 4632 L gs 898 388 5359 4225 MR c np -607 290 -1194 1237 -626 479 -883 570 -340 -145 5343 1248 6 MP stroke gr 5307 1248 mt 5379 1248 L 5343 1212 mt 5343 1284 L 4967 1103 mt 5039 1103 L 5003 1067 mt 5003 1139 L 4084 1673 mt 4156 1673 L 4120 1637 mt 4120 1709 L 3458 2152 mt 3530 2152 L 3494 2116 mt 3494 2188 L 2264 3389 mt 2336 3389 L 2300 3353 mt 2300 3425 L 1657 3679 mt 1729 3679 L 1693 3643 mt 1693 3715 L gs 898 388 5359 4225 MR c np gr 36 36 2123 3486 FO gs 898 388 5359 4225 MR c np gr 3771 1854 mt 3843 1926 L 3843 1854 mt 3771 1926 L gs 898 388 5359 4225 MR c np DA 765 -469 766 -470 765 -469 766 -469 765 -470 766 -469 765 -469 898 3673 8 MP stroke gr DA 3274 4941 mt (log\(Error\)) s 565 2811 mt -90 rotate (log|E-E0|) s 90 rotate 1989 273 mt (Energy: +:LFI, *:LCG, o:Wolff+LCG, x:Metro+LCG) s SO end eplot %%EndObject graph 1 epage end showpage %%Trailer %%BoundingBox: 53 197 546 604 %%Pages: 001 %%EOF SHAR_EOF fi # end of overwriting check if test -f 'interleave.gif' then echo shar: will not over-write existing file "'interleave.gif'" else cat << "SHAR_EOF" > 'interleave.gif' GIF87aë_òÿÿÿ°ÿÐÐÿÿ,ë_þºÜþ0ÊI«½8ëÍ»ÿ`(Ždižhª®lë¾p,Ïtmßx®ï|ïÿÀ pH,ȤrÉl:ŸÐ¨tJ­Z¯Ø¬vËíz¿à°xL.›Ïè´zÍn»ßð¸|N¯Ûïø¼~Ïï߀ƒ+…-‡C‰@…‹Ž ’~H”—™!›#9Ÿ6’¡§•?¡© ­Š¤ª‘¤Ÿ¦±„·²I‡ƒ€‰¾±À¹À³ ¨¾½¿ËÅĘɶ¼ÑÉ®ÏÐÍÊÄ×Ö¶ÎÕËÒÛ´á³Ù£ÆÝÚâáÇ ×Ï캌Á·óø÷êèðþð˜Óö =‚Õ¸½Û·Ž!Â}ÌŽ*bC|þ¼alÇþñáBwÿmTx°iæò¥\çÍ:–.[vä8ñeL›Ýá<'PfŸ÷&Ô$ˆL%L›ÅfTláz¯F,kv®e¾•!ÇTWs]Á–ì J±æÀv6 ¬á¿W+þE)8îéÆÛ®]¼Ùîm¼fWkf)<÷íW¤YÀœ·m]M¾Ó= ü‘b”Ðï&«7ïé‘/Ë—]'Wdâ“ûXÞ3éë•g#^ ÿû,ýÄJ'Í<þ[ûÛñ%_eî ×[~™õƒœz)°‡hkæQV‹ì§Eõ&[A1w˜DﵑA?mbý×ZŠ#†´ ƒ'8(;žZ…ĸ¡Š¡ih¢ˆ™y˜Qw±¹T’BÞ8žR8¢w!cü½£.M±!å”X’!aWfée¢Ñå—d–iæ™h¦©æšl¶éæ›pÆ)çœtÖiçxæ©çž|öé矀*è „j衈&ªè¢Œ6êè£F*餔Vj饘fªé¦œvê駠†*ꨤ–jꩨ¦ªêª¬¶êê«°Æ*무Öjë­¸æªë®¼öêë¯À+ì°Äkì±È&þ«ì²Ì6ëì³ÐF+í´ÔVkíµØf«í¶Üvëí·à†+î¸ä–kî¹è¦«îºì¶ëî»ðÆ+ï¼ôÖkï½øæ«ï¾üöëï¿,ðÀlðÁ'¬ð 7ìðÃG,ñÄWlñÅg¬ñ³t, üBÈW2É+œì1 *w\2-ŸŒBÌ(›@óÊ//qsÍ#ìŒ3 >»œ3AÿBÑB‹€´ÈC±4ÐHC]tÓN/ÍôV_íAÖT ‘uÒ|­õbw DÙX ÚfÝsË Ä¼¶ÜqËœ6ÜuóÜvØ`óM³û­2àB.¸Ý8¾wØŒMöÍ„ãÍAà‰þÛ=9Ý•ë½8.÷ý8åt_ŽwæFkºÈŠožA环yã¡þ:ìšs¾sä–»ç„C¼r馿¸è§¼Ï¸ó^òÌ·ŽpÒÊ_p;íÆ»ùð²#^xîª[½óÞ/yöÚ\½í£o_{÷`<汿Ï}òàSp:ýìK¿õÕ/¿æþã_êö—¿/zËSÛݬ67®Ð~ŽC ¸5V‚Ü]óµ>̓Ìà 0xÁ‚y"¬Á•fÂ-…6XáÑZxB÷Á0S+A¥6½ª°‡:" èCqˆÀ³Y‹Ã$¦`}3s"§HÅ*ZñþŠXÌ¢·ÈÅ.zñ‹` £ÇHÆ2šq^Hc` Æ5¾ g4AḂ9ª‘vLcCÇ9¢ t”# õ¸G 2#8äK HB\¤"éH>Rò‘¼d"59INbr””äBYIÒŸŒÀ)K¹U¢²®L¥*W ‚XŽ’–Vôc'íÈ€>ÖÒ—½Ô¥)¹^æҘä” K`.™­t&!¡ÉDG²R‡\&1£™Gmº‘š`æ3…9Ek¾Òƒô&83ÙMŒ‘Ø”æ7ÉYMT^3œétç6ã™MuÞÓŠô§(3 {þÓ`ëä§< Ѐꓞþøt(CAyÎbVT›kg2 Qv*“™èlç;ZDs^Ô£"ÝgDSºÆ‰R@œÓìè +yÐ ô¤Ü\§K)ÊR3˜·Ô¨EeÚP¡ ô¤EªJ}hÒ_žÒ©¤„j(¯hÔF5¨WÝèT Ïf>«[Õª'eÙ€¯Jµ‘»+Y˪V±æ3­]kAÛêU´n2’r•^iWì5¯³|+_ë×~–§D½kbáJÒÃêµ±)èª $ëØÊZö²˜Í¬f7ËÙÎzö³  ­hGKÚÒšÖlH-` ÚÕ¾ µ£m-lW [Õ² ¶©ý,ne‹‚ÝÎÖ¾µífƒûÛW¸$þ8nn3«\䆠¹Ët]{Ùé&º×m.f§Ýp—ºÞå®e¿Û]¼æ%oeÏ ö†÷»Z¬í{y»€Ý¶×¾ ï|é[_þV1¸éõ­Ü W¿ÖïýËDç ¸ î€ñ›`ú.Â0ðr<ÅòÞWøõˆ'Œa ŒøÁ ö¡‡?Œ_W˜ÂÖÀqIœb ¬Å¸±Át\`£8Ä=–ðKaåҘǸ±’Ñ›0$o@È.~²„£,ão¸Æ0tr•Aã ¸Ë&¶²kÁœe&³ÈTö2@f‹ùÈf¾¡–üæþbÙÍu†sœñ\g wعD¦þ€{E¬Þýb‹i.2| ­]F9‹mæ³u=cJ Ù±‹>ó£5]éñZºŸ~n¨×;jKGzË›®nªAÝiã®ZÕ>î¥KÐêáæù~îí­;h\;˜¶¿>­°‡MìbûØÈN¶²—Íìf;ûÙÐŽ¶´§Míj[ûÚØζ¶·Íín{ûÛà·¸ÇMîr›ûÜèN·º×Íîv»ûÝðŽ·¼çMïzÛûÞøη¾÷Íï~ûû߸ÀNð‚üàO¸ÂÎð†;üá¸Ä¥ ÅPV×sf¡‹T_g|†/lMiì¾Q±wõ©A>?Aî”Ó{~Ûù8žrVßY(t9þN³›h–ŸÜ­‹ rÏ]øóº.UÔ±®ÇQ¾s¤ÏZãB´d\UþtŸÛð¬G't­+!C¬7]ë¯.aÎ¥ÞW§o]ìQzÖ¥ÜhYt¬†5{ÕÑ>;²Oæ¹®aÑQw¼ïz$4zÙÁÞv½_=§5õßÿ7vµí¥ÖÛŸøžxoWhX…>iº¿|çù0y«nÞòa 5OW:‹×ðu7}ëýú! àö Àý Æwx¾¿òñ®/nÞ¯µ%®žUE5„¯?ÿÍÜ÷¥|ù¨¼òÜ~¹Ç~á·÷À²4ù´Góð›_>úÕ±t)d%}a={uê“¢MþåéSÎÏöÂ%çÁõµ¯ÝÿûÆ—TÆDXj&fÕ×>é-wô÷P57}â7f¨A ˆ?”Sóô€IöfCöq4° à°ü7‚þw‚"ˆ> €óÇQA·\vsT~Ô#/ÕS¸~ÀÌ7ƒ4ø|-8€¨ƒ‚ƃ2h}؇‚ @‚×·„ü§„˜W>,xƒ.¨eã>³3…è§QàÇ~Öƒ€BÝ7Wù´vEècYè„‚l¸×„&Ø"… 8‡Qˆ2±w|ºD€Á§`kèƒ+XqTSÒ—cX8ôy@Xˆgø‚Wøh+ç†t؆%躗‰I膚Hþ‡qH‰Z8ˆ (€}|;¨†8†×Ó{AØM~~ò•tħ€({ïT¨'º˜; ‰›h‚L(‡s‚ Š†³‡Ð7„‡ø‰¨ˆp?\øX=õ…§è p?5x~Ò(„H„h×HJø‰ÁXŽý‡‡yH:Ø…égŠih€G(Þ'YÔ%&†ôÈ}µˆxïø#ƒ€¸‹Ø(uØ„Âh‰¾XCÏhfQhŽ]ÆØ?ù*5‘‰a©Ø±S†‰S‰~ö‘7 é„%(‡ ¹Ž¡§|‘§zKg‹ƒ'z5©‚™Ç‡3Y€£)(Œç˜},þIt«ç“9I“—G>7)“K ”;I~=™Œ}§“MùC©’ Ø’V÷”¬÷“˜•6ùyŽ÷Šc™z<™”V‰–°H–xx8é–i)‹“s o9wN™vPI—{i—¤Ç–™R)˜wÉŠa©—ui‘Æè—y¹ŒúÈ—€G˜‹Y’`8t})’Žx•„G™›™‘ ˜éŒs– g˜Lé˜T©˜…i…¥É‹09Š(™Õšƒ‰Œv§šX9¡r¯ÙqŸišÙŽ‘)œöGœvÀ™Py[¬¹ŽxÄ›ÃsPGˆ»9Ž†%Ö)rÈÉs cƒÇZ²DÀ™Vây—žê¹žìÙžîùžðŸò9ŸôYŸöyŸ7; SHAR_EOF fi # end of overwriting check if test -f 'msCv.ps' then echo shar: will not over-write existing file "'msCv.ps'" else cat << "SHAR_EOF" > 'msCv.ps' %!PS-Adobe-2.0 %%Creator: MATLAB, The Mathworks, Inc. %%Title: MATLAB graph %%CreationDate: 03/28/97 10:47:18 %%DocumentNeededFonts: Helvetica %%DocumentProcessColors: Cyan Magenta Yellow Black %%Pages: (atend) %%BoundingBox: (atend) %%EndComments %%BeginProlog % MathWorks dictionary /MathWorks 150 dict begin % definition operators /bdef {bind def} bind def /ldef {load def} bind def /xdef {exch def} bdef /xstore {exch store} bdef % operator abbreviations /c /clip ldef /cc /concat ldef /cp /closepath ldef /gr /grestore ldef /gs /gsave ldef /mt /moveto ldef /np /newpath ldef /cm /currentmatrix ldef /sm /setmatrix ldef /rc {rectclip} bdef /rf {rectfill} bdef /rm /rmoveto ldef /rl /rlineto ldef /s /show ldef /sc {setcmykcolor} bdef /sr /setrgbcolor ldef /w /setlinewidth ldef /cap /setlinecap ldef % page state control /pgsv () def /bpage {/pgsv save def} bdef /epage {pgsv restore} bdef /bplot /gsave ldef /eplot {stroke grestore} bdef % orientation switch /portraitMode 0 def /landscapeMode 1 def % coordinate system mappings /dpi2point 0 def % font control /FontSize 0 def /FMS { /FontSize xstore %save size off stack findfont [FontSize 0 0 FontSize neg 0 0] makefont setfont }bdef /reencode { exch dup where {pop load} {pop StandardEncoding} ifelse exch dup 3 1 roll findfont dup length dict begin { 1 index /FID ne {def}{pop pop} ifelse } forall /Encoding exch def currentdict end definefont pop } bdef /isroman { findfont /CharStrings get /Agrave known } bdef /FMSR { 3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse exch FMS } bdef /csm { 1 dpi2point div -1 dpi2point div scale neg translate landscapeMode eq {90 rotate} if } bdef % line types: solid, dotted, dashed, dotdash /SO { [] 0 setdash } bdef /DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef /DA { [6 dpi2point mul] 0 setdash } bdef /DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4 dpi2point mul] 0 setdash } bdef % macros for lines and objects /L { lineto stroke } bdef /MP { 3 1 roll moveto 1 sub {rlineto} repeat } bdef /AP { {rlineto} repeat } bdef /PP { closepath fill } bdef /DP { closepath stroke } bdef /MR { 4 -2 roll moveto dup 0 exch rlineto exch 0 rlineto neg 0 exch rlineto closepath } bdef /FR { MR stroke } bdef /PR { MR fill } bdef /L1i { { currentfile picstr readhexstring pop } image } bdef /tMatrix matrix def /MakeOval { newpath tMatrix currentmatrix pop translate scale 0 0 1 0 360 arc tMatrix setmatrix } bdef /FO { MakeOval stroke } bdef /PO { MakeOval fill } bdef /PD { 2 copy moveto lineto stroke } bdef currentdict end def %%EndProlog %%BeginSetup MathWorks begin 0 cap 0 setlinejoin end %%EndSetup %%Page: 1 1 %%BeginPageSetup %%PageBoundingBox: 18 180 598 616 MathWorks begin bpage %%EndPageSetup %%BeginObject: graph1 1 bplot /dpi2point 12 def portraitMode 0216 7344 csm 0 -48 6962 5232 MR c np 76 dict begin %Colortable dictionary /c0 { 0 0 0 sr} bdef /c1 { 1 1 1 sr} bdef /c2 { 1 0 0 sr} bdef /c3 { 0 1 0 sr} bdef /c4 { 0 0 1 sr} bdef /c5 { 1 1 0 sr} bdef /c6 { 1 0 1 sr} bdef /c7 { 0 1 1 sr} bdef %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR c1 0 0 6914 5184 PR 6 w DO 4 w c0 898 4612 mt 898 388 L 898 388 mt 898 388 L 2684 4612 mt 2684 388 L 2684 388 mt 2684 388 L 4470 4612 mt 4470 388 L 4470 388 mt 4470 388 L 6256 4612 mt 6256 388 L 6256 388 mt 6256 388 L 898 4612 mt 6256 4612 L 6256 4612 mt 6256 4612 L 898 3556 mt 6256 3556 L 6256 3556 mt 6256 3556 L 898 2500 mt 6256 2500 L 6256 2500 mt 6256 2500 L 898 1444 mt 6256 1444 L 6256 1444 mt 6256 1444 L 898 388 mt 6256 388 L 6256 388 mt 6256 388 L 898 4612 mt 898 388 L 898 388 mt 6256 388 L 898 4612 mt 898 388 L 898 388 mt 6256 388 L 898 4612 mt 898 388 L 898 388 mt 6256 388 L SO 6 w 898 4612 mt 6256 4612 L 898 388 mt 6256 388 L 6256 4612 mt 6256 388 L 898 4612 mt 898 388 L 6256 4612 mt 6256 4612 L 898 4612 mt 898 4612 L 898 4612 mt 6256 4612 L 898 4612 mt 898 388 L 898 4612 mt 898 4612 L 898 4612 mt 898 4585 L 898 388 mt 898 415 L DO 898 4612 mt 898 388 L 898 388 mt 898 388 L SO 898 4612 mt 898 4558 L 898 388 mt 898 442 L %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 764 4825 mt (10) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR 924 4736 mt (-4) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 1436 4612 mt 1436 4585 L 1436 388 mt 1436 415 L DO 1436 4612 mt 1436 388 L 1436 388 mt 1436 388 L SO 1750 4612 mt 1750 4585 L 1750 388 mt 1750 415 L DO 1750 4612 mt 1750 388 L 1750 388 mt 1750 388 L SO 1973 4612 mt 1973 4585 L 1973 388 mt 1973 415 L DO 1973 4612 mt 1973 388 L 1973 388 mt 1973 388 L SO 2146 4612 mt 2146 4585 L 2146 388 mt 2146 415 L DO 2146 4612 mt 2146 388 L 2146 388 mt 2146 388 L SO 2288 4612 mt 2288 4585 L 2288 388 mt 2288 415 L DO 2288 4612 mt 2288 388 L 2288 388 mt 2288 388 L SO 2407 4612 mt 2407 4585 L 2407 388 mt 2407 415 L DO 2407 4612 mt 2407 388 L 2407 388 mt 2407 388 L SO 2511 4612 mt 2511 4585 L 2511 388 mt 2511 415 L DO 2511 4612 mt 2511 388 L 2511 388 mt 2511 388 L SO 2602 4612 mt 2602 4585 L 2602 388 mt 2602 415 L DO 2602 4612 mt 2602 388 L 2602 388 mt 2602 388 L SO 2684 4612 mt 2684 4585 L 2684 388 mt 2684 415 L DO 2684 4612 mt 2684 388 L 2684 388 mt 2684 388 L SO 2684 4612 mt 2684 4558 L 2684 388 mt 2684 442 L %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 2550 4825 mt (10) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR 2710 4736 mt (-3) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 3222 4612 mt 3222 4585 L 3222 388 mt 3222 415 L DO 3222 4612 mt 3222 388 L 3222 388 mt 3222 388 L SO 3536 4612 mt 3536 4585 L 3536 388 mt 3536 415 L DO 3536 4612 mt 3536 388 L 3536 388 mt 3536 388 L SO 3759 4612 mt 3759 4585 L 3759 388 mt 3759 415 L DO 3759 4612 mt 3759 388 L 3759 388 mt 3759 388 L SO 3932 4612 mt 3932 4585 L 3932 388 mt 3932 415 L DO 3932 4612 mt 3932 388 L 3932 388 mt 3932 388 L SO 4074 4612 mt 4074 4585 L 4074 388 mt 4074 415 L DO 4074 4612 mt 4074 388 L 4074 388 mt 4074 388 L SO 4193 4612 mt 4193 4585 L 4193 388 mt 4193 415 L DO 4193 4612 mt 4193 388 L 4193 388 mt 4193 388 L SO 4297 4612 mt 4297 4585 L 4297 388 mt 4297 415 L DO 4297 4612 mt 4297 388 L 4297 388 mt 4297 388 L SO 4388 4612 mt 4388 4585 L 4388 388 mt 4388 415 L DO 4388 4612 mt 4388 388 L 4388 388 mt 4388 388 L SO 4470 4612 mt 4470 4585 L 4470 388 mt 4470 415 L DO 4470 4612 mt 4470 388 L 4470 388 mt 4470 388 L SO 4470 4612 mt 4470 4558 L 4470 388 mt 4470 442 L %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 4336 4825 mt (10) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR 4496 4736 mt (-2) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 5008 4612 mt 5008 4585 L 5008 388 mt 5008 415 L DO 5008 4612 mt 5008 388 L 5008 388 mt 5008 388 L SO 5322 4612 mt 5322 4585 L 5322 388 mt 5322 415 L DO 5322 4612 mt 5322 388 L 5322 388 mt 5322 388 L SO 5545 4612 mt 5545 4585 L 5545 388 mt 5545 415 L DO 5545 4612 mt 5545 388 L 5545 388 mt 5545 388 L SO 5718 4612 mt 5718 4585 L 5718 388 mt 5718 415 L DO 5718 4612 mt 5718 388 L 5718 388 mt 5718 388 L SO 5860 4612 mt 5860 4585 L 5860 388 mt 5860 415 L DO 5860 4612 mt 5860 388 L 5860 388 mt 5860 388 L SO 5979 4612 mt 5979 4585 L 5979 388 mt 5979 415 L DO 5979 4612 mt 5979 388 L 5979 388 mt 5979 388 L SO 6083 4612 mt 6083 4585 L 6083 388 mt 6083 415 L DO 6083 4612 mt 6083 388 L 6083 388 mt 6083 388 L SO 6174 4612 mt 6174 4585 L 6174 388 mt 6174 415 L DO 6174 4612 mt 6174 388 L 6174 388 mt 6174 388 L SO 6256 4612 mt 6256 4585 L 6256 388 mt 6256 415 L DO 6256 4612 mt 6256 388 L 6256 388 mt 6256 388 L SO 6256 4612 mt 6256 4558 L 6256 388 mt 6256 442 L %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 6122 4825 mt (10) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR 6282 4736 mt (-1) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 898 4612 mt 925 4612 L 6256 4612 mt 6229 4612 L DO 898 4612 mt 6256 4612 L 6256 4612 mt 6256 4612 L SO 898 4612 mt 952 4612 L 6256 4612 mt 6202 4612 L %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 594 4665 mt (10) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR 754 4576 mt (-5) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 898 4294 mt 925 4294 L 6256 4294 mt 6229 4294 L DO 898 4294 mt 6256 4294 L 6256 4294 mt 6256 4294 L SO 898 4108 mt 925 4108 L 6256 4108 mt 6229 4108 L DO 898 4108 mt 6256 4108 L 6256 4108 mt 6256 4108 L SO 898 3976 mt 925 3976 L 6256 3976 mt 6229 3976 L DO 898 3976 mt 6256 3976 L 6256 3976 mt 6256 3976 L SO 898 3874 mt 925 3874 L 6256 3874 mt 6229 3874 L DO 898 3874 mt 6256 3874 L 6256 3874 mt 6256 3874 L SO 898 3790 mt 925 3790 L 6256 3790 mt 6229 3790 L DO 898 3790 mt 6256 3790 L 6256 3790 mt 6256 3790 L SO 898 3720 mt 925 3720 L 6256 3720 mt 6229 3720 L DO 898 3720 mt 6256 3720 L 6256 3720 mt 6256 3720 L SO 898 3658 mt 925 3658 L 6256 3658 mt 6229 3658 L DO 898 3658 mt 6256 3658 L 6256 3658 mt 6256 3658 L SO 898 3604 mt 925 3604 L 6256 3604 mt 6229 3604 L DO 898 3604 mt 6256 3604 L 6256 3604 mt 6256 3604 L SO 898 3556 mt 925 3556 L 6256 3556 mt 6229 3556 L DO 898 3556 mt 6256 3556 L 6256 3556 mt 6256 3556 L SO 898 3556 mt 952 3556 L 6256 3556 mt 6202 3556 L %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 594 3609 mt (10) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR 754 3520 mt (-4) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 898 3238 mt 925 3238 L 6256 3238 mt 6229 3238 L DO 898 3238 mt 6256 3238 L 6256 3238 mt 6256 3238 L SO 898 3052 mt 925 3052 L 6256 3052 mt 6229 3052 L DO 898 3052 mt 6256 3052 L 6256 3052 mt 6256 3052 L SO 898 2920 mt 925 2920 L 6256 2920 mt 6229 2920 L DO 898 2920 mt 6256 2920 L 6256 2920 mt 6256 2920 L SO 898 2818 mt 925 2818 L 6256 2818 mt 6229 2818 L DO 898 2818 mt 6256 2818 L 6256 2818 mt 6256 2818 L SO 898 2734 mt 925 2734 L 6256 2734 mt 6229 2734 L DO 898 2734 mt 6256 2734 L 6256 2734 mt 6256 2734 L SO 898 2664 mt 925 2664 L 6256 2664 mt 6229 2664 L DO 898 2664 mt 6256 2664 L 6256 2664 mt 6256 2664 L SO 898 2602 mt 925 2602 L 6256 2602 mt 6229 2602 L DO 898 2602 mt 6256 2602 L 6256 2602 mt 6256 2602 L SO 898 2548 mt 925 2548 L 6256 2548 mt 6229 2548 L DO 898 2548 mt 6256 2548 L 6256 2548 mt 6256 2548 L SO 898 2500 mt 925 2500 L 6256 2500 mt 6229 2500 L DO 898 2500 mt 6256 2500 L 6256 2500 mt 6256 2500 L SO 898 2500 mt 952 2500 L 6256 2500 mt 6202 2500 L %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 594 2553 mt (10) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR 754 2464 mt (-3) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 898 2182 mt 925 2182 L 6256 2182 mt 6229 2182 L DO 898 2182 mt 6256 2182 L 6256 2182 mt 6256 2182 L SO 898 1996 mt 925 1996 L 6256 1996 mt 6229 1996 L DO 898 1996 mt 6256 1996 L 6256 1996 mt 6256 1996 L SO 898 1864 mt 925 1864 L 6256 1864 mt 6229 1864 L DO 898 1864 mt 6256 1864 L 6256 1864 mt 6256 1864 L SO 898 1762 mt 925 1762 L 6256 1762 mt 6229 1762 L DO 898 1762 mt 6256 1762 L 6256 1762 mt 6256 1762 L SO 898 1678 mt 925 1678 L 6256 1678 mt 6229 1678 L DO 898 1678 mt 6256 1678 L 6256 1678 mt 6256 1678 L SO 898 1608 mt 925 1608 L 6256 1608 mt 6229 1608 L DO 898 1608 mt 6256 1608 L 6256 1608 mt 6256 1608 L SO 898 1546 mt 925 1546 L 6256 1546 mt 6229 1546 L DO 898 1546 mt 6256 1546 L 6256 1546 mt 6256 1546 L SO 898 1492 mt 925 1492 L 6256 1492 mt 6229 1492 L DO 898 1492 mt 6256 1492 L 6256 1492 mt 6256 1492 L SO 898 1444 mt 925 1444 L 6256 1444 mt 6229 1444 L DO 898 1444 mt 6256 1444 L 6256 1444 mt 6256 1444 L SO 898 1444 mt 952 1444 L 6256 1444 mt 6202 1444 L %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 594 1497 mt (10) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR 754 1408 mt (-2) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 898 1126 mt 925 1126 L 6256 1126 mt 6229 1126 L DO 898 1126 mt 6256 1126 L 6256 1126 mt 6256 1126 L SO 898 940 mt 925 940 L 6256 940 mt 6229 940 L DO 898 940 mt 6256 940 L 6256 940 mt 6256 940 L SO 898 808 mt 925 808 L 6256 808 mt 6229 808 L DO 898 808 mt 6256 808 L 6256 808 mt 6256 808 L SO 898 706 mt 925 706 L 6256 706 mt 6229 706 L DO 898 706 mt 6256 706 L 6256 706 mt 6256 706 L SO 898 622 mt 925 622 L 6256 622 mt 6229 622 L DO 898 622 mt 6256 622 L 6256 622 mt 6256 622 L SO 898 552 mt 925 552 L 6256 552 mt 6229 552 L DO 898 552 mt 6256 552 L 6256 552 mt 6256 552 L SO 898 490 mt 925 490 L 6256 490 mt 6229 490 L DO 898 490 mt 6256 490 L 6256 490 mt 6256 490 L SO 898 436 mt 925 436 L 6256 436 mt 6229 436 L DO 898 436 mt 6256 436 L 6256 436 mt 6256 436 L SO 898 388 mt 925 388 L 6256 388 mt 6229 388 L DO 898 388 mt 6256 388 L 6256 388 mt 6256 388 L SO 898 388 mt 952 388 L 6256 388 mt 6202 388 L %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 594 441 mt (10) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR 754 352 mt (-1) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 898 388 mt 6256 388 L 898 4612 mt 6256 4612 L 898 4612 mt 898 388 L 6256 4612 mt 6256 388 L 898 388 mt 898 388 L 6256 388 mt 6256 388 L gs 898 388 5359 4225 MR c np gr 5645 712 mt 5717 712 L 5681 676 mt 5681 748 L 4878 1534 mt 4950 1534 L 4914 1498 mt 4914 1570 L 3934 2256 mt 4006 2256 L 3970 2220 mt 3970 2292 L 3144 2284 mt 3216 2284 L 3180 2248 mt 3180 2320 L 2389 3023 mt 2461 3023 L 2425 2987 mt 2425 3059 L 936 3484 mt 1008 3484 L 972 3448 mt 972 3520 L gs 898 388 5359 4225 MR c np -1453 461 -755 739 -790 28 -944 722 -767 822 5681 712 6 MP stroke gr 5507 1166 mt 5579 1166 L 5543 1130 mt 5543 1202 L 5507 1130 mt 5579 1202 L 5579 1130 mt 5507 1202 L 4732 1757 mt 4804 1757 L 4768 1721 mt 4768 1793 L 4732 1721 mt 4804 1793 L 4804 1721 mt 4732 1793 L 3649 1882 mt 3721 1882 L 3685 1846 mt 3685 1918 L 3649 1846 mt 3721 1918 L 3721 1846 mt 3649 1918 L 2900 2718 mt 2972 2718 L 2936 2682 mt 2936 2754 L 2900 2682 mt 2972 2754 L 2972 2682 mt 2900 2754 L 2290 3614 mt 2362 3614 L 2326 3578 mt 2326 3650 L 2290 3578 mt 2362 3650 L 2362 3578 mt 2290 3650 L 1119 3360 mt 1191 3360 L 1155 3324 mt 1155 3396 L 1119 3324 mt 1191 3396 L 1191 3324 mt 1119 3396 L gs 898 388 5359 4225 MR c np -1171 -254 -610 896 -749 836 -1083 125 -775 591 5543 1166 6 MP stroke DA 1786 -1056 1786 -1056 1786 -1056 898 3556 4 MP stroke gr DA 3418 4985 mt (Error) s 540 2795 mt -90 rotate (|Cv-Cv0|) s 90 rotate 2410 273 mt (default multistreams\(256\), lfg:*, lcg:+) s SO end eplot %%EndObject graph 1 epage end showpage %%Trailer %%BoundingBox: 18 180 598 616 %%Pages: 001 %%EOF SHAR_EOF fi # end of overwriting check if test -f 'msE.ps' then echo shar: will not over-write existing file "'msE.ps'" else cat << "SHAR_EOF" > 'msE.ps' %!PS-Adobe-2.0 %%Creator: MATLAB, The Mathworks, Inc. %%Title: MATLAB graph %%CreationDate: 03/28/97 10:39:59 %%DocumentNeededFonts: Helvetica %%DocumentProcessColors: Cyan Magenta Yellow Black %%Pages: (atend) %%BoundingBox: (atend) %%EndComments %%BeginProlog % MathWorks dictionary /MathWorks 150 dict begin % definition operators /bdef {bind def} bind def /ldef {load def} bind def /xdef {exch def} bdef /xstore {exch store} bdef % operator abbreviations /c /clip ldef /cc /concat ldef /cp /closepath ldef /gr /grestore ldef /gs /gsave ldef /mt /moveto ldef /np /newpath ldef /cm /currentmatrix ldef /sm /setmatrix ldef /rc {rectclip} bdef /rf {rectfill} bdef /rm /rmoveto ldef /rl /rlineto ldef /s /show ldef /sc {setcmykcolor} bdef /sr /setrgbcolor ldef /w /setlinewidth ldef /cap /setlinecap ldef % page state control /pgsv () def /bpage {/pgsv save def} bdef /epage {pgsv restore} bdef /bplot /gsave ldef /eplot {stroke grestore} bdef % orientation switch /portraitMode 0 def /landscapeMode 1 def % coordinate system mappings /dpi2point 0 def % font control /FontSize 0 def /FMS { /FontSize xstore %save size off stack findfont [FontSize 0 0 FontSize neg 0 0] makefont setfont }bdef /reencode { exch dup where {pop load} {pop StandardEncoding} ifelse exch dup 3 1 roll findfont dup length dict begin { 1 index /FID ne {def}{pop pop} ifelse } forall /Encoding exch def currentdict end definefont pop } bdef /isroman { findfont /CharStrings get /Agrave known } bdef /FMSR { 3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse exch FMS } bdef /csm { 1 dpi2point div -1 dpi2point div scale neg translate landscapeMode eq {90 rotate} if } bdef % line types: solid, dotted, dashed, dotdash /SO { [] 0 setdash } bdef /DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef /DA { [6 dpi2point mul] 0 setdash } bdef /DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4 dpi2point mul] 0 setdash } bdef % macros for lines and objects /L { lineto stroke } bdef /MP { 3 1 roll moveto 1 sub {rlineto} repeat } bdef /AP { {rlineto} repeat } bdef /PP { closepath fill } bdef /DP { closepath stroke } bdef /MR { 4 -2 roll moveto dup 0 exch rlineto exch 0 rlineto neg 0 exch rlineto closepath } bdef /FR { MR stroke } bdef /PR { MR fill } bdef /L1i { { currentfile picstr readhexstring pop } image } bdef /tMatrix matrix def /MakeOval { newpath tMatrix currentmatrix pop translate scale 0 0 1 0 360 arc tMatrix setmatrix } bdef /FO { MakeOval stroke } bdef /PO { MakeOval fill } bdef /PD { 2 copy moveto lineto stroke } bdef currentdict end def %%EndProlog %%BeginSetup MathWorks begin 0 cap 0 setlinejoin end %%EndSetup %%Page: 1 1 %%BeginPageSetup %%PageBoundingBox: 18 180 598 616 MathWorks begin bpage %%EndPageSetup %%BeginObject: graph1 1 bplot /dpi2point 12 def portraitMode 0216 7344 csm 0 -48 6962 5232 MR c np 76 dict begin %Colortable dictionary /c0 { 0 0 0 sr} bdef /c1 { 1 1 1 sr} bdef /c2 { 1 0 0 sr} bdef /c3 { 0 1 0 sr} bdef /c4 { 0 0 1 sr} bdef /c5 { 1 1 0 sr} bdef /c6 { 1 0 1 sr} bdef /c7 { 0 1 1 sr} bdef %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR c1 0 0 6914 5184 PR 6 w DO 4 w c0 898 4612 mt 898 388 L 898 388 mt 898 388 L 2684 4612 mt 2684 388 L 2684 388 mt 2684 388 L 4470 4612 mt 4470 388 L 4470 388 mt 4470 388 L 6256 4612 mt 6256 388 L 6256 388 mt 6256 388 L 898 4612 mt 6256 4612 L 6256 4612 mt 6256 4612 L 898 3556 mt 6256 3556 L 6256 3556 mt 6256 3556 L 898 2500 mt 6256 2500 L 6256 2500 mt 6256 2500 L 898 1444 mt 6256 1444 L 6256 1444 mt 6256 1444 L 898 388 mt 6256 388 L 6256 388 mt 6256 388 L 898 4612 mt 898 388 L 898 388 mt 6256 388 L 898 4612 mt 898 388 L 898 388 mt 6256 388 L 898 4612 mt 898 388 L 898 388 mt 6256 388 L SO 6 w 898 4612 mt 6256 4612 L 898 388 mt 6256 388 L 6256 4612 mt 6256 388 L 898 4612 mt 898 388 L 6256 4612 mt 6256 4612 L 898 4612 mt 898 4612 L 898 4612 mt 6256 4612 L 898 4612 mt 898 388 L 898 4612 mt 898 4612 L 898 4612 mt 898 4585 L 898 388 mt 898 415 L DO 898 4612 mt 898 388 L 898 388 mt 898 388 L SO 898 4612 mt 898 4558 L 898 388 mt 898 442 L %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 764 4825 mt (10) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR 924 4736 mt (-5) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 1436 4612 mt 1436 4585 L 1436 388 mt 1436 415 L DO 1436 4612 mt 1436 388 L 1436 388 mt 1436 388 L SO 1750 4612 mt 1750 4585 L 1750 388 mt 1750 415 L DO 1750 4612 mt 1750 388 L 1750 388 mt 1750 388 L SO 1973 4612 mt 1973 4585 L 1973 388 mt 1973 415 L DO 1973 4612 mt 1973 388 L 1973 388 mt 1973 388 L SO 2146 4612 mt 2146 4585 L 2146 388 mt 2146 415 L DO 2146 4612 mt 2146 388 L 2146 388 mt 2146 388 L SO 2288 4612 mt 2288 4585 L 2288 388 mt 2288 415 L DO 2288 4612 mt 2288 388 L 2288 388 mt 2288 388 L SO 2407 4612 mt 2407 4585 L 2407 388 mt 2407 415 L DO 2407 4612 mt 2407 388 L 2407 388 mt 2407 388 L SO 2511 4612 mt 2511 4585 L 2511 388 mt 2511 415 L DO 2511 4612 mt 2511 388 L 2511 388 mt 2511 388 L SO 2602 4612 mt 2602 4585 L 2602 388 mt 2602 415 L DO 2602 4612 mt 2602 388 L 2602 388 mt 2602 388 L SO 2684 4612 mt 2684 4585 L 2684 388 mt 2684 415 L DO 2684 4612 mt 2684 388 L 2684 388 mt 2684 388 L SO 2684 4612 mt 2684 4558 L 2684 388 mt 2684 442 L %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 2550 4825 mt (10) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR 2710 4736 mt (-4) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 3222 4612 mt 3222 4585 L 3222 388 mt 3222 415 L DO 3222 4612 mt 3222 388 L 3222 388 mt 3222 388 L SO 3536 4612 mt 3536 4585 L 3536 388 mt 3536 415 L DO 3536 4612 mt 3536 388 L 3536 388 mt 3536 388 L SO 3759 4612 mt 3759 4585 L 3759 388 mt 3759 415 L DO 3759 4612 mt 3759 388 L 3759 388 mt 3759 388 L SO 3932 4612 mt 3932 4585 L 3932 388 mt 3932 415 L DO 3932 4612 mt 3932 388 L 3932 388 mt 3932 388 L SO 4074 4612 mt 4074 4585 L 4074 388 mt 4074 415 L DO 4074 4612 mt 4074 388 L 4074 388 mt 4074 388 L SO 4193 4612 mt 4193 4585 L 4193 388 mt 4193 415 L DO 4193 4612 mt 4193 388 L 4193 388 mt 4193 388 L SO 4297 4612 mt 4297 4585 L 4297 388 mt 4297 415 L DO 4297 4612 mt 4297 388 L 4297 388 mt 4297 388 L SO 4388 4612 mt 4388 4585 L 4388 388 mt 4388 415 L DO 4388 4612 mt 4388 388 L 4388 388 mt 4388 388 L SO 4470 4612 mt 4470 4585 L 4470 388 mt 4470 415 L DO 4470 4612 mt 4470 388 L 4470 388 mt 4470 388 L SO 4470 4612 mt 4470 4558 L 4470 388 mt 4470 442 L %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 4336 4825 mt (10) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR 4496 4736 mt (-3) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 5008 4612 mt 5008 4585 L 5008 388 mt 5008 415 L DO 5008 4612 mt 5008 388 L 5008 388 mt 5008 388 L SO 5322 4612 mt 5322 4585 L 5322 388 mt 5322 415 L DO 5322 4612 mt 5322 388 L 5322 388 mt 5322 388 L SO 5545 4612 mt 5545 4585 L 5545 388 mt 5545 415 L DO 5545 4612 mt 5545 388 L 5545 388 mt 5545 388 L SO 5718 4612 mt 5718 4585 L 5718 388 mt 5718 415 L DO 5718 4612 mt 5718 388 L 5718 388 mt 5718 388 L SO 5860 4612 mt 5860 4585 L 5860 388 mt 5860 415 L DO 5860 4612 mt 5860 388 L 5860 388 mt 5860 388 L SO 5979 4612 mt 5979 4585 L 5979 388 mt 5979 415 L DO 5979 4612 mt 5979 388 L 5979 388 mt 5979 388 L SO 6083 4612 mt 6083 4585 L 6083 388 mt 6083 415 L DO 6083 4612 mt 6083 388 L 6083 388 mt 6083 388 L SO 6174 4612 mt 6174 4585 L 6174 388 mt 6174 415 L DO 6174 4612 mt 6174 388 L 6174 388 mt 6174 388 L SO 6256 4612 mt 6256 4585 L 6256 388 mt 6256 415 L DO 6256 4612 mt 6256 388 L 6256 388 mt 6256 388 L SO 6256 4612 mt 6256 4558 L 6256 388 mt 6256 442 L %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 6122 4825 mt (10) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR 6282 4736 mt (-2) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 898 4612 mt 925 4612 L 6256 4612 mt 6229 4612 L DO 898 4612 mt 6256 4612 L 6256 4612 mt 6256 4612 L SO 898 4612 mt 952 4612 L 6256 4612 mt 6202 4612 L %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 594 4665 mt (10) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR 754 4576 mt (-6) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 898 4294 mt 925 4294 L 6256 4294 mt 6229 4294 L DO 898 4294 mt 6256 4294 L 6256 4294 mt 6256 4294 L SO 898 4108 mt 925 4108 L 6256 4108 mt 6229 4108 L DO 898 4108 mt 6256 4108 L 6256 4108 mt 6256 4108 L SO 898 3976 mt 925 3976 L 6256 3976 mt 6229 3976 L DO 898 3976 mt 6256 3976 L 6256 3976 mt 6256 3976 L SO 898 3874 mt 925 3874 L 6256 3874 mt 6229 3874 L DO 898 3874 mt 6256 3874 L 6256 3874 mt 6256 3874 L SO 898 3790 mt 925 3790 L 6256 3790 mt 6229 3790 L DO 898 3790 mt 6256 3790 L 6256 3790 mt 6256 3790 L SO 898 3720 mt 925 3720 L 6256 3720 mt 6229 3720 L DO 898 3720 mt 6256 3720 L 6256 3720 mt 6256 3720 L SO 898 3658 mt 925 3658 L 6256 3658 mt 6229 3658 L DO 898 3658 mt 6256 3658 L 6256 3658 mt 6256 3658 L SO 898 3604 mt 925 3604 L 6256 3604 mt 6229 3604 L DO 898 3604 mt 6256 3604 L 6256 3604 mt 6256 3604 L SO 898 3556 mt 925 3556 L 6256 3556 mt 6229 3556 L DO 898 3556 mt 6256 3556 L 6256 3556 mt 6256 3556 L SO 898 3556 mt 952 3556 L 6256 3556 mt 6202 3556 L %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 594 3609 mt (10) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR 754 3520 mt (-5) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 898 3238 mt 925 3238 L 6256 3238 mt 6229 3238 L DO 898 3238 mt 6256 3238 L 6256 3238 mt 6256 3238 L SO 898 3052 mt 925 3052 L 6256 3052 mt 6229 3052 L DO 898 3052 mt 6256 3052 L 6256 3052 mt 6256 3052 L SO 898 2920 mt 925 2920 L 6256 2920 mt 6229 2920 L DO 898 2920 mt 6256 2920 L 6256 2920 mt 6256 2920 L SO 898 2818 mt 925 2818 L 6256 2818 mt 6229 2818 L DO 898 2818 mt 6256 2818 L 6256 2818 mt 6256 2818 L SO 898 2734 mt 925 2734 L 6256 2734 mt 6229 2734 L DO 898 2734 mt 6256 2734 L 6256 2734 mt 6256 2734 L SO 898 2664 mt 925 2664 L 6256 2664 mt 6229 2664 L DO 898 2664 mt 6256 2664 L 6256 2664 mt 6256 2664 L SO 898 2602 mt 925 2602 L 6256 2602 mt 6229 2602 L DO 898 2602 mt 6256 2602 L 6256 2602 mt 6256 2602 L SO 898 2548 mt 925 2548 L 6256 2548 mt 6229 2548 L DO 898 2548 mt 6256 2548 L 6256 2548 mt 6256 2548 L SO 898 2500 mt 925 2500 L 6256 2500 mt 6229 2500 L DO 898 2500 mt 6256 2500 L 6256 2500 mt 6256 2500 L SO 898 2500 mt 952 2500 L 6256 2500 mt 6202 2500 L %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 594 2553 mt (10) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR 754 2464 mt (-4) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 898 2182 mt 925 2182 L 6256 2182 mt 6229 2182 L DO 898 2182 mt 6256 2182 L 6256 2182 mt 6256 2182 L SO 898 1996 mt 925 1996 L 6256 1996 mt 6229 1996 L DO 898 1996 mt 6256 1996 L 6256 1996 mt 6256 1996 L SO 898 1864 mt 925 1864 L 6256 1864 mt 6229 1864 L DO 898 1864 mt 6256 1864 L 6256 1864 mt 6256 1864 L SO 898 1762 mt 925 1762 L 6256 1762 mt 6229 1762 L DO 898 1762 mt 6256 1762 L 6256 1762 mt 6256 1762 L SO 898 1678 mt 925 1678 L 6256 1678 mt 6229 1678 L DO 898 1678 mt 6256 1678 L 6256 1678 mt 6256 1678 L SO 898 1608 mt 925 1608 L 6256 1608 mt 6229 1608 L DO 898 1608 mt 6256 1608 L 6256 1608 mt 6256 1608 L SO 898 1546 mt 925 1546 L 6256 1546 mt 6229 1546 L DO 898 1546 mt 6256 1546 L 6256 1546 mt 6256 1546 L SO 898 1492 mt 925 1492 L 6256 1492 mt 6229 1492 L DO 898 1492 mt 6256 1492 L 6256 1492 mt 6256 1492 L SO 898 1444 mt 925 1444 L 6256 1444 mt 6229 1444 L DO 898 1444 mt 6256 1444 L 6256 1444 mt 6256 1444 L SO 898 1444 mt 952 1444 L 6256 1444 mt 6202 1444 L %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 594 1497 mt (10) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR 754 1408 mt (-3) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 898 1126 mt 925 1126 L 6256 1126 mt 6229 1126 L DO 898 1126 mt 6256 1126 L 6256 1126 mt 6256 1126 L SO 898 940 mt 925 940 L 6256 940 mt 6229 940 L DO 898 940 mt 6256 940 L 6256 940 mt 6256 940 L SO 898 808 mt 925 808 L 6256 808 mt 6229 808 L DO 898 808 mt 6256 808 L 6256 808 mt 6256 808 L SO 898 706 mt 925 706 L 6256 706 mt 6229 706 L DO 898 706 mt 6256 706 L 6256 706 mt 6256 706 L SO 898 622 mt 925 622 L 6256 622 mt 6229 622 L DO 898 622 mt 6256 622 L 6256 622 mt 6256 622 L SO 898 552 mt 925 552 L 6256 552 mt 6229 552 L DO 898 552 mt 6256 552 L 6256 552 mt 6256 552 L SO 898 490 mt 925 490 L 6256 490 mt 6229 490 L DO 898 490 mt 6256 490 L 6256 490 mt 6256 490 L SO 898 436 mt 925 436 L 6256 436 mt 6229 436 L DO 898 436 mt 6256 436 L 6256 436 mt 6256 436 L SO 898 388 mt 925 388 L 6256 388 mt 6229 388 L DO 898 388 mt 6256 388 L 6256 388 mt 6256 388 L SO 898 388 mt 952 388 L 6256 388 mt 6202 388 L %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 594 441 mt (10) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR 754 352 mt (-2) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 898 388 mt 6256 388 L 898 4612 mt 6256 4612 L 898 4612 mt 898 388 L 6256 4612 mt 6256 388 L 898 388 mt 898 388 L 6256 388 mt 6256 388 L gs 898 388 5359 4225 MR c np gr 6037 496 mt 6109 496 L 6073 460 mt 6073 532 L 4820 1135 mt 4892 1135 L 4856 1099 mt 4856 1171 L 4200 2407 mt 4272 2407 L 4236 2371 mt 4236 2443 L 3371 2840 mt 3443 2840 L 3407 2804 mt 3407 2876 L 2377 3068 mt 2449 3068 L 2413 3032 mt 2413 3104 L 1331 3565 mt 1403 3565 L 1367 3529 mt 1367 3601 L gs 898 388 5359 4225 MR c np -1046 497 -994 228 -829 433 -620 1272 -1217 639 6073 496 6 MP stroke gr 5686 1367 mt 5758 1367 L 5722 1331 mt 5722 1403 L 5686 1331 mt 5758 1403 L 5758 1331 mt 5686 1403 L 4866 2719 mt 4938 2719 L 4902 2683 mt 4902 2755 L 4866 2683 mt 4938 2755 L 4938 2683 mt 4866 2755 L 3590 1813 mt 3662 1813 L 3626 1777 mt 3626 1849 L 3590 1777 mt 3662 1849 L 3662 1777 mt 3590 1849 L 3189 2316 mt 3261 2316 L 3225 2280 mt 3225 2352 L 3189 2280 mt 3261 2352 L 3261 2280 mt 3189 2352 L 2431 3779 mt 2503 3779 L 2467 3743 mt 2467 3815 L 2431 3743 mt 2503 3815 L 2503 3743 mt 2431 3815 L 1200 3481 mt 1272 3481 L 1236 3445 mt 1236 3517 L 1200 3445 mt 1272 3517 L 1272 3445 mt 1200 3517 L gs 898 388 5359 4225 MR c np -1231 -298 -758 1463 -401 503 -1276 -906 -820 1352 5722 1367 6 MP stroke DA 1786 -1056 1786 -1056 1786 -1056 898 3556 4 MP stroke gr DA 3418 4985 mt (Error) s 540 2715 mt -90 rotate (|E-E0|) s 90 rotate 2410 273 mt (default multistreams\(256\), lfg:*, lcg:+) s SO end eplot %%EndObject graph 1 epage end showpage %%Trailer %%BoundingBox: 18 180 598 616 %%Pages: 001 %%EOF SHAR_EOF fi # end of overwriting check if test -f 'msbadCv.ps' then echo shar: will not over-write existing file "'msbadCv.ps'" else cat << "SHAR_EOF" > 'msbadCv.ps' %!PS-Adobe-2.0 %%Creator: MATLAB, The Mathworks, Inc. %%Title: MATLAB graph %%CreationDate: 02/11/97 00:57:14 %%DocumentNeededFonts: Helvetica %%DocumentProcessColors: Cyan Magenta Yellow Black %%Pages: (atend) %%BoundingBox: (atend) %%EndComments %%BeginProlog % MathWorks dictionary /MathWorks 150 dict begin % definition operators /bdef {bind def} bind def /ldef {load def} bind def /xdef {exch def} bdef /xstore {exch store} bdef % operator abbreviations /c /clip ldef /cc /concat ldef /cp /closepath ldef /gr /grestore ldef /gs /gsave ldef /mt /moveto ldef /np /newpath ldef /cm /currentmatrix ldef /sm /setmatrix ldef /rc {rectclip} bdef /rf {rectfill} bdef /rm /rmoveto ldef /rl /rlineto ldef /s /show ldef /sc {setcmykcolor} bdef /sr /setrgbcolor ldef /w /setlinewidth ldef /cap /setlinecap ldef % page state control /pgsv () def /bpage {/pgsv save def} bdef /epage {pgsv restore} bdef /bplot /gsave ldef /eplot {stroke grestore} bdef % orientation switch /portraitMode 0 def /landscapeMode 1 def % coordinate system mappings /dpi2point 0 def % font control /FontSize 0 def /FMS { /FontSize xstore %save size off stack findfont [FontSize 0 0 FontSize neg 0 0] makefont setfont }bdef /reencode { exch dup where {pop load} {pop StandardEncoding} ifelse exch dup 3 1 roll findfont dup length dict begin { 1 index /FID ne {def}{pop pop} ifelse } forall /Encoding exch def currentdict end definefont pop } bdef /isroman { findfont /CharStrings get /Agrave known } bdef /FMSR { 3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse exch FMS } bdef /csm { 1 dpi2point div -1 dpi2point div scale neg translate landscapeMode eq {90 rotate} if } bdef % line types: solid, dotted, dashed, dotdash /SO { [] 0 setdash } bdef /DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef /DA { [6 dpi2point mul] 0 setdash } bdef /DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4 dpi2point mul] 0 setdash } bdef % macros for lines and objects /L { lineto stroke } bdef /MP { 3 1 roll moveto 1 sub {rlineto} repeat } bdef /AP { {rlineto} repeat } bdef /PP { closepath fill } bdef /DP { closepath stroke } bdef /MR { 4 -2 roll moveto dup 0 exch rlineto exch 0 rlineto neg 0 exch rlineto closepath } bdef /FR { MR stroke } bdef /PR { MR fill } bdef /L1i { { currentfile picstr readhexstring pop } image } bdef /tMatrix matrix def /MakeOval { newpath tMatrix currentmatrix pop translate scale 0 0 1 0 360 arc tMatrix setmatrix } bdef /FO { MakeOval stroke } bdef /PO { MakeOval fill } bdef /PD { 2 copy moveto lineto stroke } bdef currentdict end def %%EndProlog %%BeginSetup MathWorks begin 0 cap 0 setlinejoin end %%EndSetup %%Page: 1 1 %%BeginPageSetup %%PageBoundingBox: 18 179 598 616 MathWorks begin bpage %%EndPageSetup %%BeginObject: graph1 1 bplot /dpi2point 12 def portraitMode 0216 7344 csm 0 -48 6963 5234 MR c np 76 dict begin %Colortable dictionary /c0 { 0 0 0 sr} bdef /c1 { 1 1 1 sr} bdef /c2 { 1 0 0 sr} bdef /c3 { 0 1 0 sr} bdef /c4 { 0 0 1 sr} bdef /c5 { 1 1 0 sr} bdef /c6 { 1 0 1 sr} bdef /c7 { 0 1 1 sr} bdef %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR c1 0 0 6915 5186 PR 6 w DO 4 w c0 898 4614 mt 898 388 L 898 388 mt 898 388 L 2684 4614 mt 2684 388 L 2684 388 mt 2684 388 L 4471 4614 mt 4471 388 L 4471 388 mt 4471 388 L 6257 4614 mt 6257 388 L 6257 388 mt 6257 388 L 898 4614 mt 6257 4614 L 6257 4614 mt 6257 4614 L 898 2501 mt 6257 2501 L 6257 2501 mt 6257 2501 L 898 388 mt 6257 388 L 6257 388 mt 6257 388 L 898 4614 mt 898 388 L 898 388 mt 6257 388 L 898 4614 mt 898 388 L 898 388 mt 6257 388 L 898 4614 mt 898 388 L 898 388 mt 6257 388 L SO 6 w 898 4614 mt 6257 4614 L 898 388 mt 6257 388 L 6257 4614 mt 6257 388 L 898 4614 mt 898 388 L 6257 4614 mt 6257 4614 L 898 4614 mt 898 4614 L 898 4614 mt 6257 4614 L 898 4614 mt 898 388 L 898 4614 mt 898 4614 L 898 4614 mt 898 4587 L 898 388 mt 898 415 L DO 898 4614 mt 898 388 L 898 388 mt 898 388 L SO 898 4614 mt 898 4560 L 898 388 mt 898 442 L %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 764 4827 mt (10) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR 924 4738 mt (-4) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 1436 4614 mt 1436 4587 L 1436 388 mt 1436 415 L DO 1436 4614 mt 1436 388 L 1436 388 mt 1436 388 L SO 1750 4614 mt 1750 4587 L 1750 388 mt 1750 415 L DO 1750 4614 mt 1750 388 L 1750 388 mt 1750 388 L SO 1973 4614 mt 1973 4587 L 1973 388 mt 1973 415 L DO 1973 4614 mt 1973 388 L 1973 388 mt 1973 388 L SO 2147 4614 mt 2147 4587 L 2147 388 mt 2147 415 L DO 2147 4614 mt 2147 388 L 2147 388 mt 2147 388 L SO 2288 4614 mt 2288 4587 L 2288 388 mt 2288 415 L DO 2288 4614 mt 2288 388 L 2288 388 mt 2288 388 L SO 2408 4614 mt 2408 4587 L 2408 388 mt 2408 415 L DO 2408 4614 mt 2408 388 L 2408 388 mt 2408 388 L SO 2511 4614 mt 2511 4587 L 2511 388 mt 2511 415 L DO 2511 4614 mt 2511 388 L 2511 388 mt 2511 388 L SO 2603 4614 mt 2603 4587 L 2603 388 mt 2603 415 L DO 2603 4614 mt 2603 388 L 2603 388 mt 2603 388 L SO 2684 4614 mt 2684 4587 L 2684 388 mt 2684 415 L DO 2684 4614 mt 2684 388 L 2684 388 mt 2684 388 L SO 2684 4614 mt 2684 4560 L 2684 388 mt 2684 442 L %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 2550 4827 mt (10) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR 2710 4738 mt (-3) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 3222 4614 mt 3222 4587 L 3222 388 mt 3222 415 L DO 3222 4614 mt 3222 388 L 3222 388 mt 3222 388 L SO 3537 4614 mt 3537 4587 L 3537 388 mt 3537 415 L DO 3537 4614 mt 3537 388 L 3537 388 mt 3537 388 L SO 3760 4614 mt 3760 4587 L 3760 388 mt 3760 415 L DO 3760 4614 mt 3760 388 L 3760 388 mt 3760 388 L SO 3933 4614 mt 3933 4587 L 3933 388 mt 3933 415 L DO 3933 4614 mt 3933 388 L 3933 388 mt 3933 388 L SO 4074 4614 mt 4074 4587 L 4074 388 mt 4074 415 L DO 4074 4614 mt 4074 388 L 4074 388 mt 4074 388 L SO 4194 4614 mt 4194 4587 L 4194 388 mt 4194 415 L DO 4194 4614 mt 4194 388 L 4194 388 mt 4194 388 L SO 4298 4614 mt 4298 4587 L 4298 388 mt 4298 415 L DO 4298 4614 mt 4298 388 L 4298 388 mt 4298 388 L SO 4389 4614 mt 4389 4587 L 4389 388 mt 4389 415 L DO 4389 4614 mt 4389 388 L 4389 388 mt 4389 388 L SO 4471 4614 mt 4471 4587 L 4471 388 mt 4471 415 L DO 4471 4614 mt 4471 388 L 4471 388 mt 4471 388 L SO 4471 4614 mt 4471 4560 L 4471 388 mt 4471 442 L %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 4337 4827 mt (10) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR 4497 4738 mt (-2) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 5008 4614 mt 5008 4587 L 5008 388 mt 5008 415 L DO 5008 4614 mt 5008 388 L 5008 388 mt 5008 388 L SO 5323 4614 mt 5323 4587 L 5323 388 mt 5323 415 L DO 5323 4614 mt 5323 388 L 5323 388 mt 5323 388 L SO 5546 4614 mt 5546 4587 L 5546 388 mt 5546 415 L DO 5546 4614 mt 5546 388 L 5546 388 mt 5546 388 L SO 5719 4614 mt 5719 4587 L 5719 388 mt 5719 415 L DO 5719 4614 mt 5719 388 L 5719 388 mt 5719 388 L SO 5861 4614 mt 5861 4587 L 5861 388 mt 5861 415 L DO 5861 4614 mt 5861 388 L 5861 388 mt 5861 388 L SO 5980 4614 mt 5980 4587 L 5980 388 mt 5980 415 L DO 5980 4614 mt 5980 388 L 5980 388 mt 5980 388 L SO 6084 4614 mt 6084 4587 L 6084 388 mt 6084 415 L DO 6084 4614 mt 6084 388 L 6084 388 mt 6084 388 L SO 6175 4614 mt 6175 4587 L 6175 388 mt 6175 415 L DO 6175 4614 mt 6175 388 L 6175 388 mt 6175 388 L SO 6257 4614 mt 6257 4587 L 6257 388 mt 6257 415 L DO 6257 4614 mt 6257 388 L 6257 388 mt 6257 388 L SO 6257 4614 mt 6257 4560 L 6257 388 mt 6257 442 L %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 6123 4827 mt (10) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR 6283 4738 mt (-1) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 898 4614 mt 925 4614 L 6257 4614 mt 6230 4614 L DO 898 4614 mt 6257 4614 L 6257 4614 mt 6257 4614 L SO 898 4614 mt 952 4614 L 6257 4614 mt 6203 4614 L %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 594 4667 mt (10) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR 754 4578 mt (-3) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 898 3978 mt 925 3978 L 6257 3978 mt 6230 3978 L DO 898 3978 mt 6257 3978 L 6257 3978 mt 6257 3978 L SO 898 3606 mt 925 3606 L 6257 3606 mt 6230 3606 L DO 898 3606 mt 6257 3606 L 6257 3606 mt 6257 3606 L SO 898 3342 mt 925 3342 L 6257 3342 mt 6230 3342 L DO 898 3342 mt 6257 3342 L 6257 3342 mt 6257 3342 L SO 898 3137 mt 925 3137 L 6257 3137 mt 6230 3137 L DO 898 3137 mt 6257 3137 L 6257 3137 mt 6257 3137 L SO 898 2970 mt 925 2970 L 6257 2970 mt 6230 2970 L DO 898 2970 mt 6257 2970 L 6257 2970 mt 6257 2970 L SO 898 2828 mt 925 2828 L 6257 2828 mt 6230 2828 L DO 898 2828 mt 6257 2828 L 6257 2828 mt 6257 2828 L SO 898 2706 mt 925 2706 L 6257 2706 mt 6230 2706 L DO 898 2706 mt 6257 2706 L 6257 2706 mt 6257 2706 L SO 898 2598 mt 925 2598 L 6257 2598 mt 6230 2598 L DO 898 2598 mt 6257 2598 L 6257 2598 mt 6257 2598 L SO 898 2501 mt 925 2501 L 6257 2501 mt 6230 2501 L DO 898 2501 mt 6257 2501 L 6257 2501 mt 6257 2501 L SO 898 2501 mt 952 2501 L 6257 2501 mt 6203 2501 L %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 594 2554 mt (10) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR 754 2465 mt (-2) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 898 1865 mt 925 1865 L 6257 1865 mt 6230 1865 L DO 898 1865 mt 6257 1865 L 6257 1865 mt 6257 1865 L SO 898 1493 mt 925 1493 L 6257 1493 mt 6230 1493 L DO 898 1493 mt 6257 1493 L 6257 1493 mt 6257 1493 L SO 898 1229 mt 925 1229 L 6257 1229 mt 6230 1229 L DO 898 1229 mt 6257 1229 L 6257 1229 mt 6257 1229 L SO 898 1024 mt 925 1024 L 6257 1024 mt 6230 1024 L DO 898 1024 mt 6257 1024 L 6257 1024 mt 6257 1024 L SO 898 857 mt 925 857 L 6257 857 mt 6230 857 L DO 898 857 mt 6257 857 L 6257 857 mt 6257 857 L SO 898 715 mt 925 715 L 6257 715 mt 6230 715 L DO 898 715 mt 6257 715 L 6257 715 mt 6257 715 L SO 898 593 mt 925 593 L 6257 593 mt 6230 593 L DO 898 593 mt 6257 593 L 6257 593 mt 6257 593 L SO 898 485 mt 925 485 L 6257 485 mt 6230 485 L DO 898 485 mt 6257 485 L 6257 485 mt 6257 485 L SO 898 388 mt 925 388 L 6257 388 mt 6230 388 L DO 898 388 mt 6257 388 L 6257 388 mt 6257 388 L SO 898 388 mt 952 388 L 6257 388 mt 6203 388 L %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 594 441 mt (10) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR 754 352 mt (-1) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 898 388 mt 6257 388 L 898 4614 mt 6257 4614 L 898 4614 mt 898 388 L 6257 4614 mt 6257 388 L 898 388 mt 898 388 L 6257 388 mt 6257 388 L gs 898 388 5360 4227 MR c np gr 5688 2516 mt 5760 2516 L 5724 2480 mt 5724 2552 L 5688 2480 mt 5760 2552 L 5760 2480 mt 5688 2552 L 4604 2283 mt 4676 2283 L 4640 2247 mt 4640 2319 L 4604 2247 mt 4676 2319 L 4676 2247 mt 4604 2319 L 3922 2335 mt 3994 2335 L 3958 2299 mt 3958 2371 L 3922 2299 mt 3994 2371 L 3994 2299 mt 3922 2371 L 2882 2290 mt 2954 2290 L 2918 2254 mt 2918 2326 L 2882 2254 mt 2954 2326 L 2954 2254 mt 2882 2326 L 2206 2127 mt 2278 2127 L 2242 2091 mt 2242 2163 L 2206 2091 mt 2278 2163 L 2278 2091 mt 2206 2163 L gs 898 388 5360 4227 MR c np -676 -163 -1040 -45 -682 52 -1084 -233 5724 2516 5 MP stroke 1786 -2113 1787 -2113 2684 4614 3 MP stroke gr 3427 4987 mt (error) s 540 2796 mt -90 rotate (|Cv-Cv0|) s 90 rotate 2746 273 mt (results using multistreams) s end eplot %%EndObject graph 1 epage end showpage %%Trailer %%BoundingBox: 18 179 598 616 %%Pages: 001 %%EOF SHAR_EOF fi # end of overwriting check if test -f 'msbadE.ps' then echo shar: will not over-write existing file "'msbadE.ps'" else cat << "SHAR_EOF" > 'msbadE.ps' %!PS-Adobe-2.0 %%Creator: MATLAB, The Mathworks, Inc. %%Title: MATLAB graph %%CreationDate: 02/11/97 00:55:19 %%DocumentNeededFonts: Helvetica %%DocumentProcessColors: Cyan Magenta Yellow Black %%Pages: (atend) %%BoundingBox: (atend) %%EndComments %%BeginProlog % MathWorks dictionary /MathWorks 150 dict begin % definition operators /bdef {bind def} bind def /ldef {load def} bind def /xdef {exch def} bdef /xstore {exch store} bdef % operator abbreviations /c /clip ldef /cc /concat ldef /cp /closepath ldef /gr /grestore ldef /gs /gsave ldef /mt /moveto ldef /np /newpath ldef /cm /currentmatrix ldef /sm /setmatrix ldef /rc {rectclip} bdef /rf {rectfill} bdef /rm /rmoveto ldef /rl /rlineto ldef /s /show ldef /sc {setcmykcolor} bdef /sr /setrgbcolor ldef /w /setlinewidth ldef /cap /setlinecap ldef % page state control /pgsv () def /bpage {/pgsv save def} bdef /epage {pgsv restore} bdef /bplot /gsave ldef /eplot {stroke grestore} bdef % orientation switch /portraitMode 0 def /landscapeMode 1 def % coordinate system mappings /dpi2point 0 def % font control /FontSize 0 def /FMS { /FontSize xstore %save size off stack findfont [FontSize 0 0 FontSize neg 0 0] makefont setfont }bdef /reencode { exch dup where {pop load} {pop StandardEncoding} ifelse exch dup 3 1 roll findfont dup length dict begin { 1 index /FID ne {def}{pop pop} ifelse } forall /Encoding exch def currentdict end definefont pop } bdef /isroman { findfont /CharStrings get /Agrave known } bdef /FMSR { 3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse exch FMS } bdef /csm { 1 dpi2point div -1 dpi2point div scale neg translate landscapeMode eq {90 rotate} if } bdef % line types: solid, dotted, dashed, dotdash /SO { [] 0 setdash } bdef /DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef /DA { [6 dpi2point mul] 0 setdash } bdef /DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4 dpi2point mul] 0 setdash } bdef % macros for lines and objects /L { lineto stroke } bdef /MP { 3 1 roll moveto 1 sub {rlineto} repeat } bdef /AP { {rlineto} repeat } bdef /PP { closepath fill } bdef /DP { closepath stroke } bdef /MR { 4 -2 roll moveto dup 0 exch rlineto exch 0 rlineto neg 0 exch rlineto closepath } bdef /FR { MR stroke } bdef /PR { MR fill } bdef /L1i { { currentfile picstr readhexstring pop } image } bdef /tMatrix matrix def /MakeOval { newpath tMatrix currentmatrix pop translate scale 0 0 1 0 360 arc tMatrix setmatrix } bdef /FO { MakeOval stroke } bdef /PO { MakeOval fill } bdef /PD { 2 copy moveto lineto stroke } bdef currentdict end def %%EndProlog %%BeginSetup MathWorks begin 0 cap 0 setlinejoin end %%EndSetup %%Page: 1 1 %%BeginPageSetup %%PageBoundingBox: 18 179 598 616 MathWorks begin bpage %%EndPageSetup %%BeginObject: graph1 1 bplot /dpi2point 12 def portraitMode 0216 7344 csm 0 -48 6963 5234 MR c np 76 dict begin %Colortable dictionary /c0 { 0 0 0 sr} bdef /c1 { 1 1 1 sr} bdef /c2 { 1 0 0 sr} bdef /c3 { 0 1 0 sr} bdef /c4 { 0 0 1 sr} bdef /c5 { 1 1 0 sr} bdef /c6 { 1 0 1 sr} bdef /c7 { 0 1 1 sr} bdef %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR c1 0 0 6915 5186 PR 6 w DO 4 w c0 898 4614 mt 898 388 L 898 388 mt 898 388 L 2684 4614 mt 2684 388 L 2684 388 mt 2684 388 L 4471 4614 mt 4471 388 L 4471 388 mt 4471 388 L 6257 4614 mt 6257 388 L 6257 388 mt 6257 388 L 898 4614 mt 6257 4614 L 6257 4614 mt 6257 4614 L 898 388 mt 6257 388 L 6257 388 mt 6257 388 L 898 4614 mt 898 388 L 898 388 mt 6257 388 L 898 4614 mt 898 388 L 898 388 mt 6257 388 L 898 4614 mt 898 388 L 898 388 mt 6257 388 L SO 6 w 898 4614 mt 6257 4614 L 898 388 mt 6257 388 L 6257 4614 mt 6257 388 L 898 4614 mt 898 388 L 6257 4614 mt 6257 4614 L 898 4614 mt 898 4614 L 898 4614 mt 6257 4614 L 898 4614 mt 898 388 L 898 4614 mt 898 4614 L 898 4614 mt 898 4587 L 898 388 mt 898 415 L DO 898 4614 mt 898 388 L 898 388 mt 898 388 L SO 898 4614 mt 898 4560 L 898 388 mt 898 442 L %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 764 4827 mt (10) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR 924 4738 mt (-5) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 1436 4614 mt 1436 4587 L 1436 388 mt 1436 415 L DO 1436 4614 mt 1436 388 L 1436 388 mt 1436 388 L SO 1750 4614 mt 1750 4587 L 1750 388 mt 1750 415 L DO 1750 4614 mt 1750 388 L 1750 388 mt 1750 388 L SO 1973 4614 mt 1973 4587 L 1973 388 mt 1973 415 L DO 1973 4614 mt 1973 388 L 1973 388 mt 1973 388 L SO 2147 4614 mt 2147 4587 L 2147 388 mt 2147 415 L DO 2147 4614 mt 2147 388 L 2147 388 mt 2147 388 L SO 2288 4614 mt 2288 4587 L 2288 388 mt 2288 415 L DO 2288 4614 mt 2288 388 L 2288 388 mt 2288 388 L SO 2408 4614 mt 2408 4587 L 2408 388 mt 2408 415 L DO 2408 4614 mt 2408 388 L 2408 388 mt 2408 388 L SO 2511 4614 mt 2511 4587 L 2511 388 mt 2511 415 L DO 2511 4614 mt 2511 388 L 2511 388 mt 2511 388 L SO 2603 4614 mt 2603 4587 L 2603 388 mt 2603 415 L DO 2603 4614 mt 2603 388 L 2603 388 mt 2603 388 L SO 2684 4614 mt 2684 4587 L 2684 388 mt 2684 415 L DO 2684 4614 mt 2684 388 L 2684 388 mt 2684 388 L SO 2684 4614 mt 2684 4560 L 2684 388 mt 2684 442 L %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 2550 4827 mt (10) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR 2710 4738 mt (-4) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 3222 4614 mt 3222 4587 L 3222 388 mt 3222 415 L DO 3222 4614 mt 3222 388 L 3222 388 mt 3222 388 L SO 3537 4614 mt 3537 4587 L 3537 388 mt 3537 415 L DO 3537 4614 mt 3537 388 L 3537 388 mt 3537 388 L SO 3760 4614 mt 3760 4587 L 3760 388 mt 3760 415 L DO 3760 4614 mt 3760 388 L 3760 388 mt 3760 388 L SO 3933 4614 mt 3933 4587 L 3933 388 mt 3933 415 L DO 3933 4614 mt 3933 388 L 3933 388 mt 3933 388 L SO 4074 4614 mt 4074 4587 L 4074 388 mt 4074 415 L DO 4074 4614 mt 4074 388 L 4074 388 mt 4074 388 L SO 4194 4614 mt 4194 4587 L 4194 388 mt 4194 415 L DO 4194 4614 mt 4194 388 L 4194 388 mt 4194 388 L SO 4298 4614 mt 4298 4587 L 4298 388 mt 4298 415 L DO 4298 4614 mt 4298 388 L 4298 388 mt 4298 388 L SO 4389 4614 mt 4389 4587 L 4389 388 mt 4389 415 L DO 4389 4614 mt 4389 388 L 4389 388 mt 4389 388 L SO 4471 4614 mt 4471 4587 L 4471 388 mt 4471 415 L DO 4471 4614 mt 4471 388 L 4471 388 mt 4471 388 L SO 4471 4614 mt 4471 4560 L 4471 388 mt 4471 442 L %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 4337 4827 mt (10) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR 4497 4738 mt (-3) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 5008 4614 mt 5008 4587 L 5008 388 mt 5008 415 L DO 5008 4614 mt 5008 388 L 5008 388 mt 5008 388 L SO 5323 4614 mt 5323 4587 L 5323 388 mt 5323 415 L DO 5323 4614 mt 5323 388 L 5323 388 mt 5323 388 L SO 5546 4614 mt 5546 4587 L 5546 388 mt 5546 415 L DO 5546 4614 mt 5546 388 L 5546 388 mt 5546 388 L SO 5719 4614 mt 5719 4587 L 5719 388 mt 5719 415 L DO 5719 4614 mt 5719 388 L 5719 388 mt 5719 388 L SO 5861 4614 mt 5861 4587 L 5861 388 mt 5861 415 L DO 5861 4614 mt 5861 388 L 5861 388 mt 5861 388 L SO 5980 4614 mt 5980 4587 L 5980 388 mt 5980 415 L DO 5980 4614 mt 5980 388 L 5980 388 mt 5980 388 L SO 6084 4614 mt 6084 4587 L 6084 388 mt 6084 415 L DO 6084 4614 mt 6084 388 L 6084 388 mt 6084 388 L SO 6175 4614 mt 6175 4587 L 6175 388 mt 6175 415 L DO 6175 4614 mt 6175 388 L 6175 388 mt 6175 388 L SO 6257 4614 mt 6257 4587 L 6257 388 mt 6257 415 L DO 6257 4614 mt 6257 388 L 6257 388 mt 6257 388 L SO 6257 4614 mt 6257 4560 L 6257 388 mt 6257 442 L %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 6123 4827 mt (10) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR 6283 4738 mt (-2) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 898 4614 mt 925 4614 L 6257 4614 mt 6230 4614 L DO 898 4614 mt 6257 4614 L 6257 4614 mt 6257 4614 L SO 898 4614 mt 952 4614 L 6257 4614 mt 6203 4614 L %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 594 4667 mt (10) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR 754 4578 mt (-3) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 898 3342 mt 925 3342 L 6257 3342 mt 6230 3342 L DO 898 3342 mt 6257 3342 L 6257 3342 mt 6257 3342 L SO 898 2598 mt 925 2598 L 6257 2598 mt 6230 2598 L DO 898 2598 mt 6257 2598 L 6257 2598 mt 6257 2598 L SO 898 2070 mt 925 2070 L 6257 2070 mt 6230 2070 L DO 898 2070 mt 6257 2070 L 6257 2070 mt 6257 2070 L SO 898 1660 mt 925 1660 L 6257 1660 mt 6230 1660 L DO 898 1660 mt 6257 1660 L 6257 1660 mt 6257 1660 L SO 898 1326 mt 925 1326 L 6257 1326 mt 6230 1326 L DO 898 1326 mt 6257 1326 L 6257 1326 mt 6257 1326 L SO 898 1043 mt 925 1043 L 6257 1043 mt 6230 1043 L DO 898 1043 mt 6257 1043 L 6257 1043 mt 6257 1043 L SO 898 798 mt 925 798 L 6257 798 mt 6230 798 L DO 898 798 mt 6257 798 L 6257 798 mt 6257 798 L SO 898 581 mt 925 581 L 6257 581 mt 6230 581 L DO 898 581 mt 6257 581 L 6257 581 mt 6257 581 L SO 898 388 mt 925 388 L 6257 388 mt 6230 388 L DO 898 388 mt 6257 388 L 6257 388 mt 6257 388 L SO 898 388 mt 952 388 L 6257 388 mt 6203 388 L %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 594 441 mt (10) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 96 FMSR 754 352 mt (-2) s %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR 898 388 mt 6257 388 L 898 4614 mt 6257 4614 L 898 4614 mt 898 388 L 6257 4614 mt 6257 388 L 898 388 mt 898 388 L 6257 388 mt 6257 388 L gs 898 388 5360 4227 MR c np gr 5560 1532 mt 5632 1532 L 5596 1496 mt 5596 1568 L 5560 1496 mt 5632 1568 L 5632 1496 mt 5560 1568 L 4531 2844 mt 4603 2844 L 4567 2808 mt 4567 2880 L 4531 2808 mt 4603 2880 L 4603 2808 mt 4531 2880 L 4195 2084 mt 4267 2084 L 4231 2048 mt 4231 2120 L 4195 2048 mt 4267 2120 L 4267 2048 mt 4195 2120 L 3248 1971 mt 3320 1971 L 3284 1935 mt 3284 2007 L 3248 1935 mt 3320 2007 L 3320 1935 mt 3248 2007 L 2462 1883 mt 2534 1883 L 2498 1847 mt 2498 1919 L 2462 1847 mt 2534 1919 L 2534 1847 mt 2462 1919 L gs 898 388 5360 4227 MR c np -786 -88 -947 -113 -336 -760 -1029 1312 5596 1532 5 MP stroke 1786 -4226 4471 4614 2 MP stroke gr 3427 4987 mt (error) s 540 2716 mt -90 rotate (|E-E0|) s 90 rotate 2746 273 mt (results using multistreams) s end eplot %%EndObject graph 1 epage end showpage %%Trailer %%BoundingBox: 18 179 598 616 %%Pages: 001 %%EOF SHAR_EOF fi # end of overwriting check if test -f 'parallel-tests.fig' then echo shar: will not over-write existing file "'parallel-tests.fig'" else cat << "SHAR_EOF" > 'parallel-tests.fig' #FIG 3.1 Landscape Center Inches 1200 2 6 2475 1575 5300 1960 4 0 10 0 0 6 14 0.0000 4 218 847 2475 1768 Stream j:\001 4 0 10 0 0 6 14 0.0000 4 141 116 3759 1768 x\001 4 0 10 0 0 6 14 0.0000 4 167 218 4272 1768 , x\001 4 0 10 0 0 6 14 0.0000 4 52 257 5043 1768 . . .\001 4 0 10 0 0 6 10 0.0000 4 142 167 3887 1896 j,0\001 4 0 10 0 0 6 10 0.0000 4 142 167 4529 1896 j,1\001 -6 6 2475 2602 10050 3501 2 1 0 3 20 7 0 0 -1 0.000 0 0 -1 0 0 4 4272 2923 4272 3051 7675 3051 7675 2923 2 1 0 3 20 7 0 0 -1 0.000 0 0 -1 0 0 4 8381 2923 8381 3051 8894 3051 8894 2923 2 1 0 3 20 7 0 0 -1 0.000 0 0 -1 0 0 4 9481 2923 9481 3051 9994 3051 9994 2923 4 0 10 0 0 6 14 0.0000 4 141 116 4272 2795 x\001 4 0 10 0 0 6 14 0.0000 4 167 218 4786 2795 , x\001 4 0 10 0 0 6 14 0.0000 4 167 218 5556 2795 , x\001 4 0 10 0 0 6 10 0.0000 4 142 218 5813 2923 0,1\001 4 0 10 0 0 6 14 0.0000 4 52 257 7354 2795 . . .\001 4 0 10 0 0 6 14 0.0000 4 52 257 8509 2795 . . .\001 4 0 10 0 0 6 14 0.0000 4 52 257 9601 2795 . . .\001 4 0 10 0 0 6 14 0.0000 4 167 218 6327 2795 , x\001 4 0 10 0 0 6 10 0.0000 4 142 218 6583 2923 1,1\001 4 0 10 0 0 6 14 0.0000 4 141 116 7996 2795 x\001 4 0 10 0 0 6 14 0.0000 4 141 116 9151 2795 x\001 4 0 20 0 0 6 14 0.0000 4 180 591 3301 3437 Block:\001 4 0 20 0 0 6 14 0.0000 4 180 116 5942 3437 0\001 4 0 20 0 0 6 14 0.0000 4 180 116 8574 3437 1\001 4 0 20 0 0 6 14 0.0000 4 180 116 9673 3437 2\001 4 0 10 0 0 6 14 0.0000 4 180 1399 2475 2795 New stream 0:\001 4 0 10 0 0 6 10 0.0000 4 142 218 4401 2923 0,0\001 4 0 10 0 0 6 10 0.0000 4 142 218 5043 2923 1,0\001 -6 2 1 0 3 20 7 0 0 -1 0.000 0 0 -1 0 0 4 4272 5683 4272 5812 7675 5812 7675 5683 2 1 0 3 20 7 0 0 -1 0.000 0 0 -1 0 0 4 8381 5683 8381 5812 8894 5812 8894 5683 2 1 0 3 20 7 0 0 -1 0.000 0 0 -1 0 0 4 9481 5683 9481 5812 9994 5812 9994 5683 2 1 0 3 4 7 0 0 -1 0.000 0 0 -1 1 0 2 1 1 3.00 100.00 160.00 8060 3565 8060 2923 4 0 10 0 0 6 14 0.0000 4 180 116 6327 1768 0\001 4 0 10 0 0 6 14 0.0000 4 141 128 6583 1703 <\001 4 0 10 0 0 6 14 0.0000 4 210 660 6840 1768 j < 7\001 4 0 10 0 0 6 14 0.0000 4 52 128 6583 1832 -\001 4 0 10 0 0 6 17 4.7124 4 64 539 6263 4143 . . .\001 4 0 10 0 0 6 14 0.0000 4 141 116 4272 5555 x\001 4 0 10 0 0 6 14 0.0000 4 167 218 4786 5555 , x\001 4 0 10 0 0 6 14 0.0000 4 167 218 5556 5555 , x\001 4 0 10 0 0 6 10 0.0000 4 142 218 5813 5683 6,1\001 4 0 10 0 0 6 14 0.0000 4 52 257 7354 5555 . . .\001 4 0 10 0 0 6 14 0.0000 4 52 257 8509 5555 . . .\001 4 0 10 0 0 6 14 0.0000 4 52 257 9601 5555 . . .\001 4 0 10 0 0 6 14 0.0000 4 167 218 6327 5555 , x\001 4 0 10 0 0 6 10 0.0000 4 142 218 6583 5683 7,1\001 4 0 10 0 0 6 14 0.0000 4 141 116 7996 5555 x\001 4 0 10 0 0 6 14 0.0000 4 141 116 9151 5555 x\001 4 0 20 0 0 6 14 0.0000 4 180 591 3301 6197 Block:\001 4 0 20 0 0 6 14 0.0000 4 165 120 5942 6197 9\001 4 0 10 0 0 6 14 0.0000 4 180 1399 2475 5555 New stream 3:\001 4 0 10 0 0 6 10 0.0000 4 142 218 4401 5683 6,0\001 4 0 10 0 0 6 10 0.0000 4 142 218 5043 5683 7,0\001 4 0 20 0 0 6 14 0.0000 4 165 240 8509 6197 10\001 4 0 4 0 0 6 17 0.0000 4 269 514 7803 3886 Skip\001 4 0 20 0 0 6 14 0.0000 4 165 240 9609 6197 11\001 SHAR_EOF fi # end of overwriting check if test -f 'parallel-tests.gif' then echo shar: will not over-write existing file "'parallel-tests.gif'" else cat << "SHAR_EOF" > 'parallel-tests.gif' GIF87aKñÿÿÿÐÿÐ,Kþ„©Ëí£œ´Ú‹³Þ¼û†âH–扦êʶî ÇòL×öçúÎ÷þ ‡Ä¢ñˆL*—̦ó J§ÔªõŠÍj·Ü®÷ ‹Çä²ùŒN«×ìn ÐŽŸÞoCu——é:¼‘7â¨G5XGˆ’Xè5á±øqÈh•‡øW©©q™ÉÀ—#¹¹Di ŠÀ‡yšx'ŠúÚë9šš) Y+!›àkk¤ ÀzèiLl¼øñäË›?>½úõìÛ»?¾üùôëÛ¿?¿þýüþûûÿ`€H`ˆ`‚ .È`ƒ>a„NHa…^ˆa†nÈa‡~bˆ"ŽHb‰&žˆbŠ*®Èb‹.¾cŒ2ÎHc6ÞˆcŽ:îÈc>~TXˆõõcoWÝÆÍSùœ.D>…äZ-1Y“èÀ¤>«°´K?m9KOžCLe*iÑ ´±fm6á9´p™’m”(3Îxæ)f”8Ï’Ñ:( p΄S‡RäeŸb-õÒD͹ՔiJ¦Ühú¡…žh¢ž±%—àÐÙ%Q¥¾É¨K))¤ œÂ⧳’R« ·Ê ç—sÒi™VŒötL£•¾Tþ§L»fš+^Ëòõ¬d£þªD+›©XQ¡$ ¥B!{«¢fF»)¹å6‹ë´=ˆ‹+™vi[°ÂÊydœ–f¯­g¶³/ýú›æ †iSÀŒ,'ÿJEVÃüºk'µÙI—­^ZV±ú~¥oXêÒê±¹øÆ‹ÃÀ ÓÊqH»ê,Éx9|2zèr"0•;q4í\Ó m°ñå³Í`àÒÚoO­õ‹nŒáf´ÒK×õ‰ÐC—FtqEÏ ˆÓXkµÔPíô,I#w”Öˆuí5U·uÓk³FvÜp–öo¿]ÐØM{¶wßeÃV·Ý`Ë-öÕ²šÚgq•Ë¦ýõq\—þ}8rmã “lÎô —#]Ãç!l>À™_@ú©Ÿ°ú蜫Ö:×gëJ»±_ ÀéÜîï"øÎð˜ ñäŽú뮗κò ïôJïòP¿»ó$`O÷zy øän}÷Ú÷~þïé¿þðíÿ>äë>øØo>ó˯FzÿþÿÀ p€, ˆÀ*p l ã÷€ùÑ/D *x@þapƒì ? 0œàýDØ¿ ¢%Y¡ _ÃÊ€$”`ö\¨B.®%4á1ÔÃr¨‡>"…ˆXD#F‰J¼Ë×D =1‰Qtþùª¸¡+b1CZÜ¢¡èÅ#‚1ŒR#!ÔÅÿøï\@#ÃBM¤q{oäAð?Ô{,Ì!3GÕõÃë©?óÉFyƒE ‰F&ò ˆÔ£þRÈÆØ!²tœ†$iFõEò’“ôB!7¹ºé˜GŠ’ |‚*9×JL²’y¸t¥û2 J*~ –7 &yÙË]òxº , #K×-Ꮄ$¥2×ÌeR3Ï,L4ŸçKÛó˜Àì%2uYÉqzÒš± ¥4GÎ.P™»Ä¤*éYIÍšî'<³iJt’›š<'=õ©ÎB|s˜ñôÁ<þϸ‰…B4Aè*jÑa4£Ú(GäÑþ'¤"íIKºŸ“¢t¥,m©K_ Ó˜Êt¦4­©MoŠÓœŽh~e?užÀ§ÂªwÊg½ŸõµS‚Âf•\ºSV&q±euäFf,;6Ã’¥0f;»ÉŽ‡´¡Ý1—Icrr®1™2–æ,¡Ù&);Äf½‹•xdÚ˜]eÇIîÚc¢T´á½lÑ„p¡/¸;W®*Ãtð~Æ«¯[¥„MoOÃÛÓN9‚?œp¶=ÍÂb¸Ê)NãOx).Î3Å°8'Šîƾ—z7¯Co™Fœç6ŽÛ”S<ä"׸Å_óþÛÊÜo?˸"\~œœëœÛ覛kŠ.’Á]鬥£Ont^ a›×Kh¨Þ¬g²¡Ñ{ãÓkÖoqrŽc¯zÙ5 uKž}/iŸOÛ)humæPkÿ^ÜëóöÖ]yß:Ý5¸w5Þ½~ƒ¯çÜÕøªôý=‹ÏzáßöÆÇAò졼"_ø«?>󌘡ç?úÐ70Ìá /úÔ«~õž'ý MBÔ³~ö´¯=]¯C”>ļï½ïüà øÄ/¾ñ|óž2ðœß„åý¨½çoàvÒ'äÙüJì“:­>¨Ÿ}‡"s•U_$;­óÌð£ïò‰oB>%IP‚¶ªý p<uÒßþœOýv¨ÚsÙ:æD~¿4€÷w~üÇ>ì·ÄI¨KÉ”…~˜,°¨›tM‰PÿÛÇ}(N ŸèFøJ"¸€Ö$€õ€ãÇ‚kà}vL(~$HIyä€çTƒäwƒeP„‚Gø}¥¤„5°|[Ç5MX‚ÈÑG…å§yÉÇ…]è…_†a(†cH†eh†gˆ†i; SHAR_EOF fi # end of overwriting check if test -f 'serial-lcg.gif' then echo shar: will not over-write existing file "'serial-lcg.gif'" else cat << "SHAR_EOF" > 'serial-lcg.gif' GIF87aõ óóóôôôõõõööö÷÷÷øøøùùùúúúûûûüüüýýýþþþ,þ@Dø€€!$€Î!`h†'HðxM$àC8t;ÈŽSü8¹Ó.8:xœPøyw~šu  XNw ‹NP`PcƒwFBYnj¯N’NH§BrF¼ŠDFÊ œŠvB j\°G ž°U˜Ÿ±CàQ]MYwYHbº°Ñ)pçŽW°è(b@©-ŽPShb6.¦†|)ESýP1ô ‘?4x(ÐdÉ€ n¸ää *g•t£“þ65Dºb¤É¬ ÀèQÓe`T!dvZsÂÀݾžö!Øp烗’N$h˜¤ƒš;M21œ'èÊ(XQ‚´C£y‚ " ÁG¡mp%¶Oɇh¼Öre‘¼³ q% Á„:WÜÍOÁ‘eàÖÓLë$Eº¡7Ëh#Z¼6û“¬*T³ìø¡gΦ9Ì¡œøRA,¡Ì °ˆ€ Íáp%< l +'³Bs-ø­‘he} Ëbdv"2 -ZHäÈv@÷ª?Ø &qÇ࣠˜³P„V‡–(Ið”“.X£åTÇEX4 þÄ£à#=Å7À]ìvÌp¼t€€0[üŽO6éÅ¬Õ À*—å·IG·Ð>MxáÆ$°ˆó”øÅ‹ð”MZè³.Z4ÏaáÆ(ºŒ7†KómŠ"+¢Êz\•D=P$S„Ôí‘Å*ÒØ‘Å9^æE‹‰Bx±ó ‘(?¨µO×ôâd1âw`”;²ˆ3ªÀY ‡^`°I‘pàF"§fÊ5PôBb+µñKvEè‚vù}p€+ uðÅ*ÅãIlW]¡—P Cð‘ø#@%)+°,×-³èQ`ªþ qsĈ d§R´ý€@@‚`0â‘P¬«8 qÀ—ÅB@²¢XPì&´„ÂP™ñ À– –D‡pêvØ^Ø|`œ,ù]Áœp”ÁòˆMŒEØ©º|×= €ZOP1OTâTV·w5 2+ÚåÆ*蓪¬(–„“A³l`Æ,íT6qŽÉ§Ì5´O)I„ó˜åŽñ–‡‘q*hdªQ£üaì~ 8çCpª!èRµÀ&ÃüANJ2üNOï}dæÛ>°lE©íÇäÂÊØb¨]"W,y¯¸ßܪl`@þ™ì%<‹nq´×-‡WlŸÚáæ|ÑPRþôÑ ÖQÞÒpg‰áª4±knnÅŒ¥èà~qºJ…µŸšBPI¼ô2€Œp˜ï,ÒÇ<ó#Èk$}IÙÜЯ4`?Iˆ*¶e–&Í/{iÏ4Ð ’”¨>+D¦”’AéA ˜#!aHV±'àeœ^`rˆ 4¨-eL ‚"xcìG%Iƈ—Jí$ Œƒêâ nìgF‚PÔüåAn0·â5…%!Û€  £˜¢%WáÆ ¤¯ìss¸Ìþ$z(Á{C @\Zôqšz‡Q¤0‘uc sŒ„‹9„ÃKÙˆ „¨=W!FVȉê±sä UIÖzAŒ20D.-ÑvPÃa|‡h“šNG\I ®¸ oææ(€ˆl)‡RPÌá-WáaA2#†Ì6T‰\qËúC¸Jc"ÈBún”còÄ® "äÁJÀÅV#¥“ GÐDª!rÀ/ÆGˆšL!‚#êÉ´¬ÌBp•+‚ü’ÀnDÄ[]‰gI¶‹UŒ šÊñ°ÙH«Ø+_˜Õ|Fô3l¡ 6CN2þ‘Ñà%“qfKŠC:Zæ¬'vx2Tœb7‘F$b9¦BAÏ:ÀŠQ§F„"•×¸N¼2"ŠäQSˆÕ?ž ˜±3nÈJï]Ì+a88„'`@j~ðÇ?”uP=RŽÀ˜Ý*“£¾m/›èåñþôÅUÆÒ„nM!2 á3*I!ÈëYçcx—¼õ8½ [;C¤Ì±9'BɸF À(ÁÁ‰O*‰€QmS ±èoŒž[EAŸZ’pŠ$¾wðôƒQqN®¤…ôð„:A””$/ª“vP7L°ª*ud,/¡sfЀW´Š=# Y‘ee$LÓ(xŸIxg‘p‰œ˜E;QîKP$ c?ęƅ)¾ƒ UЀ”ŠM^-DÙãœFºw$2% Mj #™Mô óéÓÍóäÈ­p4)!W¤W¢@œiƒYÞ‚8“&ã‹ ‹9æbˆÄƒÏ&zÁÝB¢‹±À+l‹d†|ã!W=BÛÁÝA€ÅòÈ°åq%H´x$çøÂz—Q—al¬ŸXŽ¦É¹¯ŒÈFD?”Qª(t(»(ö„ÆøBǧ#’åP@†š¡æLõkjeXE¸ã¨Gt\ éɤ*EUF®®H'.e!‹:PË hÃÅäB†êtfE¨ 5>óaBÁzäÒT^Ô€^1þOäGZÂSZ·â7ßÁpÈ’ U@ `2g„±! |ÓY@ˆ£²€ XÇ^yFJI77jÀà‚Q°=ÒM}ƒR#ÀåAa4EÁ’a æ—®T3± fp_g÷Ñ#Ö² «`:„ AW#â‚uÀa£>ï€~L‚"jN‚zóS1>Ñ np^€cp‚Hdpb·á2 sRcï Pc,âBA‘@±°=Cà)$dÜ@ú³‚qTá%&ƒ Ø ÜH<®àèÀf$†$ ÖðC¤¢9ýÑ#¹@£þ x!<…óÕ;É£ þpeT JÂA ñÊ"P ²HùQa15V© š 5è35¸,ðÁÉ…ÆáE‹tžAtzCäŽp¥ÏÓ7 q0‘7ž×:öRBÿHTq™r~ñôSEwP@ÈQðvƒP#AõôW³yøÀ³€(k)Y! j±€-ă¶t*^PBÄsºö8Cp!ı,£Wñ´.ýð,óó)F'aV'‰p;5á"BAgU'ý"#•‘5`Á§—¹‡ ÇvHFš Œ¢@]ædR`Q–QÜ(n±¤;(š÷]žþ" ˜ joºqy*ã0ód ¾¨ ƒ`†Ô €N4t|yDÖ T± Ò ’àl·_õñÖò¨Rbn†Ö»yU  Kœ‚ćŸ†‡Rp¤NS—p@™p³H) Ž:¬å=±¦Z`ha0f0NdwPšéW6¦¥aâ@It‡Øp!uÒ»·";Ò )W¹ÒY€ež22wÑSìH’~{à þx—§6@ú³*Âò£èµè¥ã´ N„g,$^$QBI,áId7‡˜Ð=À§z &Sïð ïÀOR/›ð€De%p­Ó P6'þ3•ñ)]„…0‰¯WKf\`1|‡R2&#B$c²•s‡°–fqG@’:6S¯z°Æ™ŒP`b¹"hG ¦aÓ¦ •È ?Ú‚à@6kB"];à5]0¬Ð0NóDJër*)¾Ö[©„Éu£€QV'}I  ’üpHvŸÿ$g–aæ’Œ¸â.ž¦‚‡ ¡ Ìbå8Wz7²BJÈþÂSTb:U²Bû]þdy–~Ytõz¢¨>¶JßÑJþØ€™rUñx°¥^0©OE*yW† Àj¹8 :–„ñÁña7Ãig® + Xô8H-DÄ›‹ãÚÛ€áé(ºRAÉø3 ƒÌÕ›P&N#qÙqw7¬@ ÐjÓ …éÀ¸0«Á§Ð¡ûB<0i1 ÂuÖSGèa%Á ñO²0nãì‘¥´ ´f´q­U0„\ hú–½ý$X" ‚ ƒ­ñ80¥ Ëq3.ÔSÊRH:W›¬©Nôý3“c{-†âp'h`À¹1#û1K òF*¨ÈŽ 'FIê p ”¸U ±‰²ðM¢‚ªOc`¢j¸!n'ÒO½P lé¹Ã!$ˆ¢Àx8'Ù€ŒqÚ: @«öfØÐ!\G F Í$N~“ga¶™tn™„bw4B¤&Nó®šI%|³h„âÐP®°þGPO@ð ‚Ç €€e`Àt NÐq ˆ!áü|€€õ ›é[ö€@K2»ƒTÙÏ¡£nÉÉ.°€à, ƒc`®©ÀCì«c@2ÀCréLУ@àã @è£N J²Ê@D@ò*À ‰€¬ƒUk¤ iðc`ÁÖ QÀ@c Qˆ d,€€#ÄãÚ pt J•ÃÀOÑ®ôÀaü,—£t/ý´€Y:ƒƒ üÝIÚ@ZÓ[¶!d„€Â $]76„bÁêÐ$¬:±È”Zr Ö™ ¡¨Dñ7 ‰2Š4ˆp¡t±œ„L MEÊ]+Å&Èþ&l lµ„)‘®q¨!DŠ ÑDg˜<_¦zU)Àa!!s¨RS‰À[NŒá'$“£ bÀF€g‰ê€S%©NšrÀ‚K9Ý>Dn Û9:„Ö2[“lŒñúó€Á8àxDÓ|ËÙüÀó3UÑ’œ!˜˜²g戅æ%*>@,œ c”*ÑÀu>:{Žµáj48ú±ræIz­ Là‚q¾ ;+¨’)°9ChnqX ¶ ”C²°¥ˆ‚²HjÓ‰‰°(;Z¥ dlœ£4üø`†F+ ØøA€±Ç2@Hü2£ã±Ì²i šÙàþ P#D˜—puA.biÂ1Sn'ë g@°ÔWdœ¬#©ðˆ§¶4ÛYF| o7Ø €·Ò­Dkµ@`Ì ÈŠ¤¦.¹E“HD°“„€ÑŠŸ¤¾==^Pò ý…Ì€â F)¤±Hæ6âC=rd‘*1 R V/lA3aø#GaIî÷0bì Û"KcŠÐ4ð(9…ՀŔ ã9)†d)‘LiJé(ƒµ8á Ÿ£¯°´¤ ’%Büðà uãXYP´”‹`¼ã ÔÍspá1+``u`@D „ åŲ :²0¡,þî%…‰È±ÁQðnªPaa„¤q`€ ,…ê`8d‚‹ÙJʧd ‰Å¨Â ± ­!‰)ß@”€`QàIÄ‘{(L—Ö¶…L²‰PBJ(HV‘MfÍ iôQ×|s0õda%ð,ZLiï¨eÿ•®\¬MÑр퀺KÝbM¹HŽSøè NÐd€C×*.YD ‡ð°¦’©øk(B Õ!8åÅ:ªÐÓ(À±ˆ,äe!¡Ð2ñ2aLP" 7"èA)Mà˜ '¬±]/‰JÇ;Âæž[$h>ŠÃªh"=Ç%‘PŠHÚ€âF'(áþk1QÃZU1B!HiO!ë'·òf•HëFáÒïEºÑ€j£ '•BKx`C<`¤,4¦‰a[tN¸P…ìB\}ˆiËŠàZ ™"þ¹”(WKÓ])3n"CLbLj° (d§/ÅÔX¨1šþ¦/LÈ‚Ö°*¡ô W€[]º¬¯éŠ[ hF“ú O,.nãä|É!ŒºET°\ÚnMå(ÖrÔܯØ$Ž‡ì®u:Aè ¡ššhRETæãkâ’û‰š³ix|ÊB4VLH ¿Á*|¦¬©Áfi}S˜ö\"¿!ÁŒ ¾Akä1½ÚF­q ìÉ Dd26Kª+ÅÓS¬ª{%RrØj‹cmK0ŠÜÒá º¡ÜVsw+QÖmþ ŒÒŽ»´£’ž¡–„¢{R„˜I2€]"b3XK€ƒ³Q >äO*ÙªØN=nµ!€ô ÞCÁÁÀb¢­Œ&K¹æ:DsÆxáv£´b®/¾²€Sñ•œfFðG'd£…“SënÛ*Ì5<·y.¶F @Ô!ŒB†™A°D Sb1ÓK”NvÙ4lL¹QfEF´ƒ óX-*9à €KƒMD°)˜&DòÆMä­I=žV‹ qNö›“ÞFC@P‰Ä>+‰W86ª#Áv[éfP^"%phJ×æÀÛ5¼Cèæf¬/–ƒp M´ þÀª„)x­-ªäC(˜C "ðm†bé9N!LªÌ,)á(&®àÖŠ‰ä¦¯ä‰3¦B%>é¤ÌežÅÚ&Dð¢ê@"*büÐDQºFE`C¢À+lE’ …:¤» EH¡–ìj£ið-{<¡W.'‚ÍrhEئì,2àkd!zÄgl$/]òh €dfæ§ë.ê9P"; #ona6Ê[PÖÀ=€0 “NÊO,eÇ(vDŸÆ`º€% ÜÄôàX\p,T"‡* ðAոĊ@"a!`ÁZ|í}!{B ÚAhð]ö ”þ*î̪ ¤%Rè6À›ÀëZ$!|!¥êš0(",vdCØD>ÜJDå-D„$1 ¦!:¾¦½©p^H0XÃ0¼Áø@KbÐáv£Å e9dAÝt#ŸrÑt\+cœæò)>oê ¢¢Ž¥ë”ƒ>b4FåîŠ <¡²z ŽàÃxB؉.iFvç¾°Ã ÙÞr˼ޭ®\cd&Ö&©u ª%†êj0"œfÎkøìøË­ É$j…d†ê’B 0B*KPÐ –aAR!H´ƒ¸Ž #°§_Ú  äâ€0&«*…ˆÅ¢"a"þJÁ.šëÀÂâÀÆ%Ÿ,Ák®Ádø­cBâD±W~Å›8-z8G±è`½ªÁ+ÆàÂÀ À'hã%H½!#C‡Òщpð#anAJ‚ †!°,¨à¾@ ÊÎŒ…ÆÁÁ¦B…Ép’†Õb ì%‰a|,jP%öa Ôç¢Ä€s®& RŽJ…ØÜ"l8 A‰,pÇ|2j0Í“’ SA’Ö¸h±bÁz¡Ò‰àú(&?âž à~–ãXjÁþôüB-wÆ%«³/Hjw>ʇxó%,é jFšÀ«bv’!j¯ÐhE›X‰ ²ÃDþÊ°`ÆFgB$ˆ@6² c&mŠ¢" þ%;è+!hS%ögúT0%7LÌ‚…Îp,hÅd€l P‚Äç‡jÄ2àÑB´ —‚p‚æ!\Ên£1Tï7ñÀ DËTô€Š ºÀÑ ÑO¦dxÊà{H02öî/L%d‡×Î )8ƒ~ã\`B¦ À%Ø ‚€†àß l³d¤g•^Tà–iÇ+nÌ |"/$CÇæ-(#¢ðÁ(h- á&4Šm Ò` NtÄrlåAeàK dHÅTnCÚ©U )ÛsʨÄ• 6D êc)Z£4¢*ÎþâRõ=dgJfé'ý@Bèi7J'  £’¬V>%Â9`â¬ÅVÀh$¸!‰z"Çxøî(*¦c¤AojŠU0BW€[³qBGjªL°2U>¶*Æ‚©¤ï%lsSÅÒÁ>dxÂ+k0ÊŽ‡ë>„ŒDK’èXF`ð(Xî6”F¸fx{„ÐùøΑÂnl¢U )ÚA7šhª ÖÞ‚‰lË=`Á-vAUÔÒ*Ði aÀ´jxÍZ'©AEPl~¨a…ŽF;'ê"’©/(u¬f Ä'¯ì&ig>4s~¡Å-Š2*¤ Ä´*»&TþRB«0"h¤ÁŒ~®Œ¢BÃdP§Oµ´>Þaaé†thL3ÁÃ2iV$t>(l”\«’älKó Ïˆ`©ê ð6j%0óÖ ¾ç76å_¦`„©KçU ŽI³­^™$…G°áhkQn "ªqè\)ã š¢ÀZ:$¸l¥CFငÄ7Ö’@<·Ûbv€’)íÀ€ ±c Eéî1Ž&pçf´`ÐbâȬlîÌŒ4.…dðK‚Ï@Kœw|Á&^—ÉBˆ‚Ëoa^ªü /&(>&*f ÈÌi"÷s:4t#)Cv©U:ä亪þ=Ò…£¯SÜ¢JhÆ2ðá:jbh°Íä@œ+ –}dF ¢°šÊ$`+æO gÐ8y ÀqüD*ôd¡àrÂ"‚!Ùtª€d8ØD0[G ¸d&<¨Ð'QST1ƒ&]ÊÂÎáO¢d®¬d¦µà ­A\¼æ€Žª "Ñ`¬#ŸZ¢/*“OUú€Ñ/+ ® /Hg†ÄÓø†±,òFroëc95xjFÖä1 ¢Tò‚B ÄiN±¨¤Ž¾ÃŒœÕ°GUʧj\ Û®#{Çزmï†,ü€³ÔôØ üäR4£Ûn" _¶N™Åd²þÇ\á1Þa@ˆcø©µ²ñSÕ1\#%lÓ9†ðÙ"¯´æ£ØŒX9Iå9ŠÀgþD|¨§X²€LPa8àYÀ!ŒËÀ/uÃg¸¨#$éãÙÀ+£”ÑŒëàè#$§`µd†As7öÂ=– À mX/¼´Æ[ª„v!Lɹ(+íÂ@Q>Ž $‡)l…ä$HÒEW@(>á Ò€aÈÔ»â§+Ë€K@KT¦Ä¶î²R'u6àÜDJLcF Ê €ìZ"™ˆJrh ,k/º¡ &°¬`4¯Q¬`ô™,îç͸Jx‡³ðÅ{«Ä•âÀè –A]0!n°g èÄbÞ¦‚ª:à@ØuÛMTc •`7ûv7Ä"Hˆ€1Ö†Y@|`ÂŽ& B´¶ÓÚ$ðÅ&TXê…¿Â@XxI¦ @õ<¥ ž…Uª –w¬Æ€•»*«uNH;ê)þ! Ê–±ŒdÙŸ Ô ÀŒe>Ì"ðZ?ÒG½€Ñn ú!äë>~LTCFæ•N#Ȩ¼ ÿ* ½A6kÃ¥@%úvæ&ö*_°² ¢‡§gê‚¢Ô¶bA@ ‚Y_JÁøh*É,2 7AR> Ò‰f/G¾!ó‚+œ|"-u†¼˜‡!>Ç/".>aKï¬Àf.¸y~°e,=Fšd†¡ÅÌJbáL·óÑGD#!>”ëÄãHS³(f½1¿Ls ®@F7Yëmá”­R¢ÂBr¯ _?d àèf©$xø¥r@ø ‰ “ƒÑðÐ"Ó%šŠu!"Ñ ©ú!Ð.c!PÒ„ì×XÝh  „©z¶nÀ‰h3]º~%ÅÅ£ÉêC@A›@¬‹•§‹@"`º6à\y`£ðÄ ÒKH§2 ¢Äy1£Ò¤EÄŒ¯Ä¢²E'•ÈVøôÝ%ÚÄ%@5eÉÂ-Uþ@ŠëVál_iˆZ77èȦmøI·Î —EœApƒ£L$.‘Å …XÆÚ‘µ%tG1ÉÄ FzÜè¾èw(A »‘1{ÙRtÁ½Ø‚BŸ#aHìc XÐAVC8ö2¤—Ô±Ëhzsdž"‚ô‰!RYO†&D@UÂ:nÉšr£;±G4ÙÂÈpˆñhõˆËþ¦06ƒÁ ,[F%RñôìH]‰ 0Ô!1ŠD )4ªÐÌì!º d·è´g8$(f8Fz6´Ê¥CL¸DŠ’>ÐŒB±‹26 (á_šð ((H3ù-ã1-j‡àó•*"(¸Ä)t¢&ÐA0ÜÂHh¡&rà8ÝHe"Èf…F¤‚-Ûèc²°ŸÄ0¼‘Ò^Ò$˜y0¯ ˜BÀf":¸áŒæ€ÓqÂ…Ù¡LX`ñк¸°"Ø¡F 9G¤Ð)3à2.ÈÀƒ*´Ð l€]Uð\\ ñ¹~|‰<^ ‹/‰`•}ɘ L“?:¦„Ü\Á EBþúZÐ"¡õ@Ã)¶áê£K86‚GðA£ç(y† <Œlɇ– »]s MÎp¾u=ìùZ#$m‚…EesMœà“‘¯%D DŠèà,}èI«qL`Ôy#7Pð2먃Hš6Fð+Z…}’€W¡d×±D¤÷#aˆdü‰Ô0†'ØMÒÂ6bñ¼>-lÚTˆØ¹MŸ‹“Œ7¸B(kLó.åFq®Ñ…ñˆ !$,eC¸ì‚2h‚˜¾,«p… C‹LpùKH`·ì4Á Ï0k=³¡Ò>£rc¹þc+/46$¢…õ¢§cÈÅgn·À‚‘;\±èyL9áà ÁT€T„uTIСN é–Ã! çÌP®Ö¥ìªThÄ3ûH˜Ü5hì¾ ‡‚m#)!qfˆ#ø6NŒ!_ …p4‚r®¨0(X'Y#ÃûD …A[MÏr c¥ï¤_8À42h¤ì¡›˜ˆÉþø¸´Ü¾!Å0¢T0" ϸ(x‚)·!È3H¬>î뜉 “hT øáœ,ôe8äD‡"ÎwÈõÂd>ØH'è%Ž‘Tœ#4ô˜D4®§þðÜáºdãMcCLj‚ ‰‘„ú•| ‚q4ý8Ä¡)›( ddp²™4SU(u Y¦º«N‹ùM`"Q qˆ¦$=$Møi*“‰z†Ä0ÇG°Oì`ýF5‚"qÈIžyßy‡kœXR‰˜Ìtb>Íð ÀÐ¥ˆÊd@'T€Y:Vr>Ãé¢CK'­(L¸'¨Nß–ñšp€›Ì'€È³\¤°0±;=³“…8oCb#ËHq–º Ó¥i³ÏÀcL ÂÞu¸¡° 4tƒ¦˜ R1“†ê/ªË°d„c4&ÆQ9ôò!þÜÆá®àqÂ%@FO‚®èLh‡:iÉlL<ᯠăöeµ@5s,G\¯ë …a6u‘‡G „›Øh¹x³3Æ´ìV?¨ÈQv0í!–{Æ–“‡Ád™Í o2 I’d6- y µâf/ ! ˆhéd„%®˜yWŠþÖm9Bc#- .ú. ¥¦‚)Ñ…‹Y ýËWî«ý©ìa|-YP„#d×!¾eŽ`_ŠÔ¶HH]ì"Ïm¤M¸‰f›ˆ¼¤ yØ2 ë ˆ£¦ÅÏÐ*¡…ƒ?h8ã9<Ba„$ÂP0H°Ïþìˆ8¬QQè„j0.(ËÈ…U4D‡Ô‰ƒŸœœäGðÃcPXšô)üK*|LP „Ù9\Õ†P3¤ÝÛÖ´L G¬‹´CÓ؃aðÃ3øOlXQôÈœЉFCü…Ç8K&|ƒ0`K;@MűB=¼ 3ÜÁ_\×Ø s€LÃ4¡½À‹©Áv\COàê†+à‚/‹gH•¥Î; t… u JÄUåŽuŒš£DÂzüK7t  › Ä|‰ð1Z]ÉQF ±59„ŽüD…l8–Ĉ\QçÈC>Å‚MÐþšÌ9Ä¿ŒœÏ-Á•ñÈ4„?ÄÕ|8ÇŒFØ$Œ¬5 -Ãà±ÌF2^.t†>@8áÜ­…ü‘&ÃøÄHDЊ”ZìIY˜Œê ^2òtsY aB- …UÑÛ„‚C’È/RP IíAЂ~àÐ_”Õò¬ †Ð `|ƒÕ$rH2Ò”ÉAëxÇüE¢\ 1= ttt  —É2 E9…j¸+4”nøcÁ ¬Ãé•C¥)B¾Ü”xÁEÞÁK¤I\…¡¸XÀ$‚1A“ôÊ[hAb±Önd7£>>IžþÀÀP˜‡ôEaU ©›1°Je3±‡v@ãzã²ãŒS\ÀZƒ„u9KeN lEpFØ^ !4Ù ^tR£4…XÅ{9‰®”æÙ¬\TÙ\5ƇÝA¬ø^EB0•Âh c>\Ba8Ù˜Dƒ(Á( Åi€ñ(Dåø€Üg°Œ°é˜“Œ¤5ˆÌÍ4ê´Ç\ü$SÈÿÐ4Aˆü\Ô‘ÙoÄH0ˆ,¦E"VyÕùÉÙ„D€`(dAÂuƒP§0¨ÓôÁu5Jí,†ôÅÃuÁ½ÌG7ŽH^&L^5Œa°iŠþHè)à&pK .ÁÁÃ5›Nhú¥ÉA_Î$B<"šœÈ¸9‚‚-P ‹8Á ÄD@fЭ…0 ƒŸÈB’sè…3†–1:%„F)d×½¼ADl\E …ÝØ„¦¡SWLc`V“‡AN#$C8À¬Ã\]Q`ˆN|ÀxâD"heÄxþ¬æxå _zg€2ôÁ(ƒƒb0è#¸Uà^ôŒÉ@ÓãÁš6Àè‡)Ä„/AsЊ)?ÌLÀ§.4Á><ÃørDNm„˜<Ä¥xaŒHåaª*;Vþ[FÞÈØpLaÁè }œôÅ)t†˜‚^ÑV#ø)K ØŒ \¨/)HüÍ7¨Å†h‘–B½©…Ò,¼ÄeAcÈ'\|ˆ7Õ¦TV5¬&8³_µÚ!,Ô@ÑJp–êÝ–Ï #$ÀL0Av a€I8SŒxaœÎ©Ž‹~8 ‚\‚úÍ"Ê„Û%Ë‚˘Œ¶˜&-ÕÈRx†XÐãØÆLPeåb«”Îè{ ?—Ì!K· Ø£˜•w §ÑýS£pÊØϘFÂTÁ¾îc4U÷ÂPD"t†!ÜÉQÍdàÝ‘þ™HH üÒw8Á¾–‚àC8ˆS˜æO…LàÒi"9¢…¸BhÌ‚PÁšhBY:Q08IÆÄ+y¬ÔœCŹdÏÅ@ÃPüñ<$k—i0›3>Dîpˆ¶¨Á!eÄ4Å5D76kZ–SŠ?Î qpÂÞ܈lÈð%0M˜Bvh ˆiŽldc6Þ!XàDmÐImÈ…séá2 †6PŽäSD(‚º¥Ç?"ìíËC-( /9Ä ‹Â ˆl°YŽÞIL„„—œÁ(èD-úE ùLJ⡈ñålœÔ›œÌ ¯bbÚu™è^X­EH"?¦BþchŒДálóŠý9ñEˆCtHº™œe9Šwc,x‡ÀŽ.!]™ÿ0ðÃݧÒÌc¤cÑ*Hf™Žs „šõ•e¹ÄDÃì˜&X|‡?Ð  ‰´'ÙTãꪌjœ‡N``xÝdA¸áJP$Šh9FEP–ϸHÈWb­†úh—xæ§l߬Š™¸ÆAœ¨¢1=Š’èt€ &Ýdœ/MpGfn‚r9A=dË|Ȧ:TÅWl,e2ñìÀER.ŒØ$/9JÛª+ìOÊP 5D0€G Ûñå[Ìo&ãçÄß»Q)I­œÐ¬»¬-ÄþÊw(Ò¯œèdžäÈtn›­¨Â6€©öôÕQ|…v*`ôÉÝœÐÙxNš4 xü^ÔVQg8”­¢ù$‚»‰Øh‚ýµ &É9¬Ã_¼ȬYL¯M¤ÃÛÆ,Ô|èR>8E)PêhlAO¹\'²%D$Ý"8sEÀBL¸Œ_¯â”•§ÖCjnó¬‹MèÐ0ØÈ´TeHÈøñó*ÏD“tKíˆÉ ”ŠToÊdDÊË¡î-\ZèA ‚X^ÖmGC Ì-bŒ‡pGQB<²êpÇH5ĤÌÁeUm \;ÜÛ¾†ÔÅëÉi~AYþ@ƒ§|T°ð%^vÒZÇmtÈòHh¼E:]—Ú¼M ûÇ€&ÎxÈ9ÄÝUýï±r ¶¢•<ú¥§Èå8öLxÂ! »PêW˜Œž¸"k¥)øuØEÒ¨[9ƒL‰á\œYßñ,DÃç`‡"dÁ:¨›]U`ÖAÚD¥”šrdTœÄÏ/t)uH¡ŽFDð$ÄuM²<„ºáF'°ÉJ8 ðCî:Jø" û?¯„!HRcC7i²(«þNàÅÂ2€ Aõ®b€½) ”ïðe%ŒO>KT-IìÄ™$Xex1Q,Ø=\è]¾Ô¬×f4Iê fï<Ædˆ›˜|°Mû?ØFòè7¾U@܆äuÙK|±r%‚å}Eúmp²¨8°Ì6ø…ëÕÉá2@iªXšêÆbc(À¢ÅÂ7` H` ¯rE&ŒUâõ ó^”ALI† ÝS&D—Dø„Ð9ƒŽ{7@Ëemï¢Ö›S0/4 †9 w/[5áã ®+ÅÅWØÁt%A¯lt<[$0ÇYý“nÙgD¦‚ÎáÁaH0˜O ®ˆþÙ·vEÏÿm–Rpœ`'úù%æ&‹ádCI¸7¥ÔN=ŒŸšQ‚ˆ¤à¹FÔ¢˜–sçHq”‹´ŽÆÔôgèI†¡ÉLÜK|Ì­º•±×‰-@ìx„›î1PGD0‹~IVœÂ 1lÔäì0šfÌ0˜Ôø`Q¶G²ì™P´!«ª^Z5$tƒ;+RB1 $„cÙtep”dQšXÅÙBdMÀÄþBmÀHkl&ì4€Ê«Ÿ€`Üð¥§0$ƒS ãU…¼&"¤¤˜æ8$¨Ü&fÎ%­!rsòÆÉÇäJ—!¢º \0Ï (I\¡R©…£þX ˳F²/[°]ZX²ê‰|ë 1륃„“”WÈÅ‚ykA£´cÔYÊé˜Aø4ú.ƒ®LActc«LL\¯€¦/1AðÁt´`>Œß*ß@ì€péú·>lÆv\c¢8I@ E0ÌÞØL{¸ ÀE£”““d”¼­‚HhØ@ É0€8ñG8]ƬQâÀTK¤dÇņ€²ÐÞÚo[Úôò³Y7Î6ÁBdGá©G ÉC w(¼‹†…×$;:‘V:Cê_ óRí4X‹=îDEv‡PhÉ<Ù1v†/ë…þä æa9ÅZfÝ/A‡â|‰è| Lf àl>€©ýh7@±à´MÄUã}SϵÃp €À0ø$ l&­*0¼€ª@¼§®0 (&ªCƒN-‚-ŽÄŽ‚€ƒ *ÍÁ<ª¹&"»9€[‚·ŽÇЮ¡¼<¨cV€:ìŽÎ« Q¦+¬ð­Zß«‚>Å‚+thÒIÕ.y€€®¹Í*!aƘC ‡"úðHNË4eë4­M†jRlí;f,‹ Šæ€±AQ©Húp©ê`à@BXþHI©7ñÃ4&5Í‘Â&€-”ÕŠ€¤e£X@h €'úÆ0á` €W HcÂnˆ t 9ìC=GU-éûSQʨ ž4Ú°á˜L’žV%úËÀ¢˜ n¹Ù‘ÞK}ò˜uJ4ëé1dgÉ#Ö„š‡t2aAi§Tlàu’U`*µ«XÊ\Ù"‚ÌQ<µ´uÀ½NØÕg ˜Ì7Á2éÐaÜ0Ø:eÉÃ|ÀœYƒÀ=pr´â~U] R²b¨J)),ôµlB€üÓR técú½b-«:ð<ŽÕÜtÛ€§Rºxⶅá *älÑÀŠ§´þ ¢ª8P€³ € e¸Á ª«˜ËCŽkBÁbŠ sâ‚€—–Ø9üY®)°‹ŠR à„éQ(nk *=B®&LRrÛhƒ"´à͘86ù¥þºî,»@‡©tÎH ‹ôî BÙÆ4ƒú»™!g‘&à@ ºÖ:à‚mâÀ)-¸‘ Œ+Ú1 µ;¡R048‹ ñX´88Û¨î°r‹÷,ûÅ»îè˜f¹¦)PLdžxI‘æ«G·å0 ^`€7l‘¦ÛBÛ&<¶,Ô’GJãÅ~ÚÄ%ñð1¹jÎé# ¶aä™dþ‰Ï÷¬º@ vÌôÀÄiWØ€—6šx$vË QQ¯*`ÞØhŒVQiž»âŒ †¨Èkƒ7ºú·%fqIVpÌTfaÌ/u먃RU‚*R¦yc¦AêX‡ˆ¼Q<œÁbœ§ïü‰Q”ŸÃŒ§›"è ÎH 2€¼Ã'’’³²/Úر×_cœ#„ÒM¢Bz„åúJ²`Ýœƒ ‚qƒUEÝ`mϾP =$gGºaúr‰Q,ÁqXà©*ñÁ¨Â(K¨Jgò eX†hí`Fˆs`ØÀ&ö¶ $ùN’†‘ÄXFX.Æ0’fépûpÌ)˜A,¥”ØÇÒ¥vl" B(Y]r'Uþ$‡ ¹Á1¤G´+4KÑfõ²È‡jT¨¿¨#II#9‘ †œÔ#†@Å‹éD³Ôƒ#jp‚w „™4W#&`@7éÈ‚2ÅAO`áUÄé‚– Œø½¤ fðKa†[U£BÞñ »Ù ÑÍ ÐÔK: ‚,„°W ¸†r_Ü)T^šð'IÖè!‘Ë怣Ÿtí6ÙÔ‡/d5F@¡aOè€&HÂ˜ï œ³DrBb#µpEa§b‚z:àE\€7wÉ7ºv²¤ POaFgÕ4RDL@ Ch!0Ëøã$UaÊ]ÈR1†ÞŠ’¸ ’š¯þáø æxøQË@Áy ÛJGÄÐÐÊ!ôÛØž#å„a)”`ì'€¤b…W¸ ,:`† C}0%K)Zsùd+* ÁÛmêàˆ±¤´ …© t }öûð@E¿Žèf&¿€¥5r•Qê#+MØ gÎ>ŽãhȇÎ<¡Ošç ^õÔYlQv P!xò "ý¤8N)q†¡É?´0L2!Î@Yw›¶‚ ¾@Ç?–(ñüäX0àf¢¾ñA §òÇW˜± Ê ›0ÇH‹ÅaÑ‘"3Ú&Ä ` rN «bƒtÒp*0Yz‰þ×lÊ6¸@—±6gøÔv,9‚ £X‚ôÞ" xÂö€•¦¼ /„2Þâ­4r«³ÛB(×R£E´H¹ï†¬` m* §³ê:!ÉÿÁ$òqù#‚àÁ5»Àš"Î?&WYй@Ž>Õ£‚£;t$Å„%Ñ ja‚£db/Ÿ>æ±HéQ0Z[i¼Ë_î• ÂÖ™€! î&bJ¤Ä˜Mxé?C»ðÑ@âÞ–Ä!P0€—œt“ ‡ÕK=&ã1p|¥ž­Ç&Ð3º'ôð£ D”F!$iÃÂЉ!þ§G~k ‘ó.`` þ—$:TUâO4(DUôÙÃ?DË!@»èÔ,]A† D²Ê_ PQ8a,¡>G5žcœ±”Àõ*:ƒ+ñ@'ÈhÅÔ³‡'ôÄ3Á¤Ç¶q•‹68¢A `…³Ê)†³i0€ 1)^Ò€)l° ƒ6¤¤³Ñå&Cv Ä~el÷ºVÂHQÜöŒnû4a³  DRŸÓcn'Mˆœ­4„MµÓ@º†  æ X%ô%†lÎ*"D~G¬—›`àMáƒ]¤À›aÚbºËwZ»Md‚¸ÄCr QVíGMBB0¥þÀÀ|ÜɵÐ,`2Š3Œ=øctBÒE8 ¤ÄUe ¼øË6fÑ˼š*¹ ‘8ÅÃ2H±uÖh(1ú£Ä}ÆÉvU•˜p†›Å’ÛU±Ù­Kˆ‹_˜§ ¡Â®.!\ý¥]yÒ!s±b‹Ö…B2ÃkX;(CJ¡B’”Sz…P0¥œŸú“{0ƒ%ì­3Ð(ÙO\ «9bê!8RpåÕ@"¦uÀ %v¥C±¢ Þ8á?Œóšc…ˆ%ËÙtSæåÀÄiAHƒËöP¹”æÑ^PƆ-”»…ŒÂ[ÊÙlnpðš‰'þ†¸Q鬮 {ÒÓ¸°}(ùú¥i`‡lË tšøë|b.d0ó‡"š†Ht‰ðsл£:’P| ˆÅ©ƒï€¨ø¥iXBüÒ+@¸ØY”§¸ îªƒù(2B¸19‚Àlð*^˜ƒ¨À›®Ùh*…âÐ(¾¹+¬Aah /8‡ˆPø£a9 ‹8@´9êñ¡òØ€Iø‚±…ᡪÙU @ª(.+ÄÜëAhø€ˆ\…›ÙZ'F;*¨0˜‚~ÙŠKØ¡R ´¨‡¢è Æ`3 Ýè3†ú —0LZ‰þ…Á7Šð˜z0 {!¢ …H ´Ëê8ˆ‰R+'éšÕ;†+à€bÈ+Ú«*ü€W1¼è!Äà­7H7þq j‰›Y|¹Z;‹lÔY1EHY1wQ‰¹ ‰„3à¡¡&«†¡ƒg€¦šƒ«Xý@§2€ˆEp‚6¨Œå€‘«‰$C˹î€6j*3ù¤$¸ B`.2àNš‚ª±;gÄŒ›•’aƒ'`…ܸ(×™†ÇÁÇІ\@§Ð0°©¿[”QP"X?KÏá ¸^l¡©Øƒ•áª V<xHJ$/â­á›?¼))þpŠ28ƒSð EØ%Y4 ¦±_g¢™À‰ø+"*G™ŽJ#”Ñ¡«Z—ù˜³?z ƒHƒm@Ð`ˆzx†60€©è†‚EäгŒ<¹<ˆ6 ¤î(‰¢{[k489_Ø­»¿Òy)°A¦¢I‘ºD¾"ë§Ð¤ €=>¤‚@µ@ú ZuéUÁµÐ(‚('€ú ¯ A¿æ¸¸ƒ”‚]‘Býj‰åÈÛÁã¡ Ï`T|¦~òÍõ˜Nƒˆ+-Íá® ƒ¥[ŠB!¥cxè3‰^X·á8>‚•` ¹ø Ð)‚ xÄÉ¦Ä 0‰ þÞ@€± ÖÒ…Z`„éĤ:®Ph–PP4… ªŒ X(±+˜à¶»Œ†ä8 ʃW‚’…û )@HT‰}ЊR£p¸‰c¬I‹0Ê€DâÊÈ.˜î€/$Š…Ÿ( ’ÕB;AICñxH»:Ø õ‘šUÁ8[8õDF‰Ú+$á›@¨Ÿ:Á ªãÄäê­¡®£a$ºº1Èúœ-¸½ø¡´ú+>øÅÝ =€º¶­ì&tìD˜ *8‘žÈ Á_ˆ½9†{Š“@ˆƒVÀèÄ¢†³PK9éš<€ƒyX‰ÆË©þ¿xŒ—I—ph¡ ÉSñ‡†äp„W„>`ˆÀ‘DP‹ãC»Ã€Wû5 ª{‰9Š6ÐN*OÞ¸/KŠá#®^ V$¢ „¶Y%cL†p 6€Ï;¤Pñ§8BáÎÚ‘—犬wÊSú§bàˆ ÀäJ»šŸJŠLgŠ†rÙLãe('œ ‡a˜tø |(E£ñq³i¼ ù‰’‰¯[·a„l¢¥»8¶uÙLйÀÇ©H}@Z ôÈ)T0„KCˆ9`q0‚ÆÛC”0)AB ÆP‚9½Ù9 ;#€Ø© …Š]þ Ë«H!c€} ‰Rø‹ÃÌÐ%Ÿ‹XKH¤„  ´¡‡’ÇY¾L(°f0ŠÙ.Å*Š iUˆ£É(Q-‘º2ª°) ’va¢ÈÍŠ>}hJ¨ÙBªYŽ$áÁ̓w‰ÚFCS(‚·x@j¿­¬î8ƒEIL:Ä›HŽ'†œõ"lÔ¹¼8 6L N ©$¸¯wÑœ ûÏ’¬¼8•“t)S>˜ˆû«ñ „z(“c8Èÿð b¬ Dà&E=@>·vѶiÅòÐÜ»š†%Êç9[…Š à‹NÝP†gQ…{ öÓþ† §s²Dµ¡a¢§G0™f±QI©aܧ”—òı[Ýz˜ª<j›º«˜‚·H ë:‘‚Í`Þ!‚dGX,ù˜ˆEsŦX€ÖñÛ…mè/çù '˜Ä 3ƒxƒ¹pÝ]« P‹i S …ìÄÊ,­Ñ]œ%–l¡a/†ÂµYxx0ˆÍŒ”ñD›\qˆtpA¾‚ %„~2?ÖjGöÓ–nÇzŒæI~£&úœvÄ› }‚†ªÈ€y 8/šS!<Ã']ðHSz‡9%z’ˆ€¾UœjøÅå¢ {JK»aˆ„Ê‹Óº!þ…â@L(` ¨â¹P#¼›¤˜•â˜‚¿È8¢(ˆh0E° Ùµ€‰s>æè„4 PŒ 9[– £FaBÁYŽèÅ’q6qدÔ±;ãÎÑšMÐ9N,-Ò !ŽãAÞ3¡ÂCõØ°@棑³® »  ‚蕳£qîØ®®°Å刧3àÑmÝ¿'ͱŠ"ƒêi@œfM-v Aàœw ”ÈÁ‚ÝQŠü ¢qÔ¡[±„h Öð¨,Ð ==âË„¼hç‹FeŽd ˜ p‰ Q»Ð5¾¯\°‹˜|Š`X@ý…=ÕÐÇ»P5¿ »¨_þ œZˆUr Î='Ђª©†ŠðŸ| G¸@ËÄ(±À!Zv6m±ÜHCs-1 VøAu©F˜ IX8ݨt½„`©T$¨0…öI"k ;ˆ]&è!³%/±AŽ¡9ªÃ5ŽQY›R,“Õ ¸Æé—¾… Hk_ <Òé"Òa-p° «šTtÔÑk¬¸‡ .þfx£Å À͸â’|Á˜t Û_l$¢ŒÚ<=ÇDNH"MNyèò§ìSÀ „$Ĥ}ˆL9b4nB(PÚjDì"Åt8²Q’•‡UÕcËpH{ qPh J-\~ $ˆuÀæ_¼Ø2Æf‚°b€X`y`œqÈ5ôØYò èTáÓkÆüÁ(tl–Œõ$RNœxg  oB€¨ÁOô aÑehf‘Ç2äýycr„ ±a.”4GsÞaÁŒOâ¬ÆˆýÀ‹UbYúL €Eªü¡\þ8©yá‹Ì'¶]õÁlwv.%Ö’Ò$ü-.T‘G„‚4±=Cñø—ô=¢(&›¢&ZßPâÄ- u‰Ø¢à"…"ŽWÁJñBOq~ K4ñU•²k¹TÂDU½·‹A“4w­#N4g*ôp ³(† ‚3¢¦Å”Âl“Çâ · mÃʆ³²ÄÐq wÄ"ߦ8@:««9êÀ~á"VÓf˜kÉE| #«×ø“nëÈ£(r¨òA½j!ȉ GXÚ.¤l°3Nd‚…ÌwÔÚ¯Ñ lKÌâÄåb)GPÜZʪþ˜Îè9 bUi±Áq~!`Pcpö@’4±@sÿ‰‰­«*½dœœEžsV‹=£÷*wh!€,£Y€ÿÙAÄÓX±ˆßúø‚ ‹3˶%QÓ1âTbž8ƒaÙ_‹€Ágb@ÀŒÜ´(P4p,A1 ”‰ËÁ –ÔðÃp„¢ìD¯³DÆ"Š²¡Áà€$4A˜»Lÿ>!‘8¥Â>Šé˜Uy“`€$ÎI… )‡Ó(ð‘ÑUôÐ » # ÊH—>¸‹yä#tô!$±À`€ dŠÙpÊ*8 /Ì¡479Àcâe‰G€~¶ø±äñ ”à†¯8ÑlJbÃj%a>éQq3Ì°Î|=DT¢P‰Ë\ñ,vQÂðª,¬B ¬c‚2,òÁÆœ„€@ç´C·ë¢öæÃwì#ŠótNs@#¤ŒbìIô¼®\V)±N NÑ)Àÿü%þ"蔊`îMÀͳ¶Á-B~" °…#씋f‚Q¨(€`D½? `h€jB"òàb8Í)zbýô¯!+Ç=z"K\(ÆC^øÀ§øÎ$j2ˆš¥ÀhºâU}‘/8¼pÙIi¢ü‡¡À )JE»È¢A“ª0 ÈÐ Ô$HUÐÂ1>u è¤{¢¥X±¦ã `ÀYÐÕ³¢ho9€$ƒ‹’djó‘A‚²1,ý´‹H–´D-,¶a=“kšÑWªìãÞÙ!/ØЃe.i ˆ%lVäÁ Mؘ0ÐA»°XŸþXňäáa/ÉÀæ`rÄü¤Nç Ç’àà,243Fˆ)"ÔEÜæËsÃQ Bƒ]½—Z·†qç:»R ,êz” KÔ_(§éh z¬E¡Ž“½ï #‘¸ `‰z3QÂzÂ@¼Öð'º!ô" 0g>01'Ú„U6* IuI pMÑ‹xÄ+Œ%U¬ƒ39ùÉ$^£ Û ©ðÇ9šÀ1áSæéF¹"D‹Í E€õŽ} 4eíÞ‰ |›Ù–lò/È@¯*ª2G_Tá~ŸéQIvÀ Éet±Ñä9£ Ü ‡\¸åÌ@d]’DFµþ$(p&$0ºSI›%“1áâB —ru±¦´C ܇@”Á$åàØSÔ†«B› á9¹4—¸#“ –Ø.ÑóGs§Ä7‚ã ›Ž’``…Í×={¤¢œºü‰¡âò¬~ÍH’åòÅÚ3AhB—ÝuÉ@>`{¶O˜‘T°ó_1á¹?XÄ ™"aD"›gÆ'TØÀY`(÷ °Cïr™>Ö\€í¡2r“"™“d¸‡y2ªeU«†»8 ò„+Ý¢¼hÍDÜ<ý²çJ»0`shR€æ‚ö‰;€#N" xþ#”Î>á…±Òã³â®,LÄÚ?‡S„æT¥1–B^oò`“…Ø´EÞ±9$Ôƒ-¯PÐØRÕ  DÑœ4nkFØ·*ò.Sv>Tz0äO9›v!ˆC X¢ðÑ_þãÇ(Äàɸ̦PÂ%¬ãKä šªgžÂÀ-LÀÌË­•ªª4òÀùŠ›Y‡¬07‘¥àšL~Ž(Í0 wsNåUcÐN‘ùÁ#@dÍyÜa*œB#yEJ!-uÀ)ꮹ<, ³r÷£ÄÉÈÙògåF·Ù ¾§Žû ŠñSB>hQ?|Á"~¡ƒy¢D1þ¦Ð?¾0Z™ðT`+©p/51 ñé2#–’yeo¡ÌEG€o'$öpD3{€qáR]òæxk(²‚Wu’gNƒ#Ñ;As—h'…-1ÅÜ‘ a˜1èá Ø3ÄA@ÜÒ bòCtšô{ ø& ™·H@Ñ+@1©`rÖ$o’ ûã"Ђ6¸Áfrà /‰‹ä Rþˆ 0A£°´']x¢xBø /áR†C ÈàKpR×!å‚$Ú‡gŠfs†ô"z² ßD{Ï1‰€`"•:«ƒj¡ Õq#ws“(‘ˆ~%¹9¨§¢~QC}ò °Q*j@{¸ð-×u4; pBs ` ß\e-JjªŒ©ó±4ÉÖ¢V"”æþ,ÉO^ 3ÕÂ'Š3 k€Ž@“¡ätcX¹$E06™‘/´a¼SM F’áñR[Nˆð ì%MBpÇ@µÐ1nÙcyb±!ŒQˆ á@ø#iâp› òðvA(‚Ô(x±Htð4b ç OA45E«EYRö&Ó¦ ÁÀL ‹_É` )/7; BÄ°ísåà >óÞñZèHT;3Â×t•uBb\ Š&³9pÀJr»@…½ÒÀ 'k„‡8Ã)oŠ&bÚçLÏ2a$·$Ib[ðANrÁ›’AZþP`'»3±1gx™ÁP[ЕÃAÌ’+OW ‰ Hvh)BZðus"º€Èàœ[á6ÖS•v‚™T´ ¤ç úss¥'q#Ø §ÂèRáÒ£[Ê@²À©?Ñ ÄQÙ02s Y0EŒó²]ǸÐ%þÀ4É$öPæi5“öpS 0-_Åñòj7\ä*€ã%ñkpàQð´"VP_6t¢d©7&X )iÆ™ç: v‰LÌ‚BúÁ,v‘¼>QSA{kàðp G¤Ãc %1 hÃNñ¢.$”4 º7G9Æ=c8û%—a6œažÑ@T£Ó^þÆþ%Ü7¤ÀF/Ɔ&´9¢ÄGÞf6eà áX8óñêbpà3×Ú-=1¦<+6$$°P8ŒrZ¼Ñ QMp” 'Š-ý›ÊÈ´1œ@3§b y€ v˜=J«ÞpZò%7ª´Ö2&’ w@˜x‡w˜y[1 Jñ!£Ð=øähÀkºP©Ô Þ°äñ2â-Ì—S\à3eÕƳÊ* ã S4sG‰+¥Oš·ß”Æ\ò²ŒìP.Ç‘Ž ,Á “j:ÿ6ÆÑy²Ò*#&´›:15û˜ hc:c%Kp 6—†°ZE°ÐžËB/þírÑ»õ”) b3½"XR± ”aŒs·­q¯Tš$WÑ &@Q]X6i—v¨ý‰ <–.ÄaŸ"á $Ìb va(ÇÖ7ÕǶ1U6âæD¦åÐÁ+œ€ÌóJSRR8yXUp¢½p‡eÛ÷òÇ€s"e6zÚw å ›P=pŒöÈÝF¢­fU¥˜å–#è†?6ÃËW,ˆ@?1Á5…@YT,x:AysNP$ Í%H¢Õõ’Zá015teà ¤ô¢)Žc¼g|ÖŒ ›{ó-Vµ¸©RDð+ñÇ`‹³Ã|]mþç@ ÞöÐÄL2‰šA{‰›D–`‡Ðs˜(td½€¹yWd$ K ¶&}-16Ò€´·ÐY pˆYÅÜa:çô%äM¶ùà1 táË1i•jG¢Ê¡–à‹b¥9á F›ãÃa--©­@Eøà-!ØA8Q ~E5¿À#qƒ"ñg,l 㯋Â<Øej—r!W§‡ KP$J[à ·ÓvRCQR€ðâ;qsˆg§µ Ù"Ý!˜#c: ¡BƺF|g¼¥Ç³T8 Fv!… ¬à6<±¬ú–tÚD6–2iñ Xþ-üg¡åœ  ¡9dtߘ3 Çñ ÔG*:K4V›#—Šƒè·€;†ŽÌ'¹‘cd™]duZŠÍÆ“3Ï­pæ MÙk„½'”>¡¨o„oƒÀ€Õábíä‘=yh 0QÙ #œA`„bçäȆˆjäãâ€nLðK²2*œf’ëÛ ™ñCLcƒç”x Ô5s#Œb'UaT§U5âi¡Ê R±=…1Á+÷MЪñA8Êåàb`C…QÒ°³ çTÀ"´4HÐ'[1ª¿Ï "|âOEFDV.Dq"3ß_@·þG²ôAÝM ¦a.U\¼R@},¶»JYcWX}É BVߤåâ1lŠ=¶¼/GÑ5OÒ ¹B±ÑƒMu‚ä\ÄNú"€6†2‡Âdz²$Ž¶£”¼6$ ÆÃCX»]Ɉ#ò¸SÀéBð-·š ¹¥ =›Õ2¡x­³?=íŸ"öòÆ$ ã¯rP÷à›÷^N8E+tWSzXuîñ23!o½_x€UeÓÖ‹£dÁápÅìÐ?v± ðQ{„ c{à„t§Ú—ß³‰ ¨â üép"å@w½ é sX˜®€ø‚Ç%KÐþÏ"óÀ ¦”” ß2Ïu¡¯.¯ È`x0H@À ƒ¦#@>ÃÇêñ €€>4¯a2„íDŸA+­Ъ68œ¼;Àª@˜> < Œª:Ö>8 :°˜:?°ª†°8Æ4Â4ê<¥ ×6A<,V­\é>>8ŽkÛ ò¢7°¤¥žÿ’›<˜2êpÓÿ.ô@™âLm4ŽN?0UBæ;,{}°éˆ¥JK,ý)¨ê6Íh€ÈC*WCè TÒé .`þZS¥@dX86± ¥?“HR_• ¤24#àè‹n Ëík%€kR> @–]Û¸i!À ˆ @Uñà*À?cLX‚姀 ©–Ø`ˆ©$´ D)ÈCxžè$²ç¥ÀW tÈ@&šH6iL ƒÂaÆÀJuÊlæ¡[(©Á!ïRW6Ü5à€œ3‚(¨Å D'=a È+àL:!~/ PàV´s‡|ý#ÐÀG:ì¶Bè#[M¢¢Í°”`ÁEèÝ “<-Ó3 Šæ[«ò£ûIP Œq"ÙªöC&§†à@¯ûÂI Ò‚Bþ@2Lˆ`Àj#šni)ž´°ˆb,?˜Â­ (ï|àÂb ~"‘ ­+²Ðbˆ´`b°Š¯bGžÞ*‹"fÌ¢Ãñ‚ £HÐ †È§%áYDÿtÄ®ùœ L¨¼Âå—"RdS¢¥8#|ô“`\@ n¼P1-çFÄpë®ÀæI+ÀjlƱéè}<‘e ­ƒ,psJ1j9£ ) 3&—G¸ )80‚žŠâ~2èfF?¢Yq‰M›?èã ƒ(±¿„ìI+Å#: Ê…0#šóâæ‹ž„,4êƒÜ€þ6ß4xì–Ÿ"­tŒkL‘ç I… ò9Å#68 €¦Qk‘=î«"ÔDº €Éí„ìH!…ØNš.¦[„€p & ™60`T4A€ÆVR0Bdê@RIá ‹{T–% Ðt DJ»JFs¤âAÿ!Áš°{̺jŒR +l/-àÆtpD”þWȪ}ƒ`¦J àLaZŸd„óAcÃZõŒt©´x%:P(L Áðx€ XÈ„z…¶aYˆ0…îðŠû1Æj‹ØÀ cÃR^À°ÐS½L áTGøŸˆÎ„sÂåC%±3½ç CCd>À£f«P¢øƒ>з’á¢[” ”,L¢ºYµ¤ t¬Ãj–e`™Ì‚W„ð›ê`Y¡_Æ3¶+€ ‚Ì$%Å`…VDí`Âqߦ<ã…5D*’&I‡<úЉÌÑ¡Xh“‡!Æø°à|Ç8çdÑç5™dä9+”·˜Ã+†pcÊá:þL2yÊ ‚€0ô#aM0=†ÖœBŠÖ,D šb©Ô 0  ¯%MžˆÜ0P‡i'XÀ„ XdfÖ!ŽÁàe²5; —P`q¤ý"%|¸ÀÔÎ S&ø£‹µJ‚5'ј®y™C0€)^—I‹p¢rüÉü€„Ö ‚ˆÙ虢 AMk0}H”:ðCC>êÖPÀ³ô¼á!Ê 'Ç" P6Xàb&ÓåÐa:°²vº€‰Ôd€HÀ(›"4°¸[l§’ŠÊ¤ªÆr>k*ÓRòRŽK¿â8[uä¶hýŠÈx‘›‰h¯€È¤/—¡rÙþ/ÏUÚ,d€‡‚àhNyLZ‚«%b­%k0Q¾b‰žÅ êCkÅh±€Çi£gTƒ«'!Ô2‚³j!¯LÞb&Ò ¨K#„–0Èãy …[’éùl’àŠv㤴@g+·°Ça †2ÁuÈq÷-‡/ÈUxPOÂGxkŠBPÐLtóà2 ‘%–GÚ]#êTˆ -q]&­¶›è}IÈ@¤`’:ÐcÀ©Ã\Ì#È«cék¤ „f€& Ј󌴈>\D£%Ú2€6|d¦Ô:@pÑ$Q–´Ðeþ ©“wó“`†Ó:¯`–+{w¬4ˆ•0Àø PÞyÝ"è°‰Ö^bkxÅ©³ø…` ¨›‰3|»HÁ&0ë21‰õ!0:À[øA0`„­T!8à®#@aÌ΋ȵ RI£zÈõ‚»têS'6MÙÃ-:qÈ¥isP¸U“hTMË]<õJNÝM>Ñ¡‚ …ã`›0øQ{Gv^¬“oX§­8§VŽE™`ß ÆVD"¾ a e‰} X×<^Ÿb^ÃÎ@€E–á'ðqc`¸"ªcýÇ-tZŠ è–1 "ßáì¼"è QÏþk`Ï3=³|ûL9/ÀÌŒ598EÕÄu íÞléi©%VÞSM¯(*2ÃôH24 2_óöŸ?ã•fËJ´n†€Lî0ARâµQü´S Ò¹‰[O|qTH‘ï)¶%éA ,Þ˜¨žúçCQK†òA$g€& Ê÷]ù¬:PÀc!;ŽB¬vÜÆ&6 Ö¼2”xBP™[†5æÛb4Á8×5¢ƒ6»,®¢„ú'.lµr¹¯KWBz`’ª ãµÊ&TÁ½à; dU_‡FN‰rª³$à ÀʽÆXÙ+° 3-Á =ÁáJ€…›p Û8]þð îîͺ$טìšÜÏ°N-=Œ![ˆ£ƒš.J1~ë˜ÆB@© îÊd(}DGNM˜àÒ€CÁdFèªËC0¨ÖÀ}Ìa<Þ :O‡à!¶¬ÀF ` Þàݸ­ÕP ÈÂúcRDá 2ÀS˜€  ˆïúä¿< 9"Cá¨Ð¢ÃÊÜÄzï™t¯ °™ZÉáô E¶Â]î‰Q†I—Æ0%¶âÏ$0¡SŒCΠ?,€àÐ`;)0:Р,Iˆ²èHÄMPjBZ¢d^¬ƒÀ!¯B0¾`8ŽH¦e Èo¾" BþÐZg7àÌ(ABî zÈ "¢àÔ!¼¡Â,EF#ãËzpEDdÁ¢TPÜÎEdæÍh¡,ß4®• ¨1Jb"i:2+…7 te7"èÔ@C6–­1² žDˆ# H°ÅÍ\²@)Ò‚L&áŽüþ€ÃÂ)x͈.æËèæÔ.]&è vÒœ”Ã:¢m$=£²–‚ðø€_Â*æë²Àäã%Ð`!OLDðæ$Á 1¢NíÀ” @»¨Mj²}"lÖ’KÚÀɾ"QtÙ…È /ÊqÃ@ ZÁ²9Π‚ÜÂÃþlú¢åÎÊ X£›¦ "ÎÎçÍ4¡5_Ío°Ž. N¢(j£âŠP;¥,þJš„ ªîÕž--èØ‚]t«U‚3½ò  Cy à<€ 2€*J#8yÄ–Æ~åu²PC…Î Ê?¢!‰´ öTQÌèënNNh ºÉRéÃ$b7RŠ`1Ò£‚³3c†•TM.$ZøÂ0±ËÃ@‰ÀäÒ@^ Ô(Zê»Òb;b« À#RØÄ锤@»„ ‡‰lZ58³H @TH–GK¥Ž’cÌ>Â)¼Í}„hNK"V¥5úAHsã\ŽS/ï •"b â!"7x‚(dd)¬(á!2˜à ÆGQsE8ôLÎze–…)"Ðîd ®ÞÁ+þ »bµi¶Å=8˜DH†£5'½ðê®A  RÈ㣠"Кa݀džúÏ8yÂQj‚!ÿ£@FCÀJ¦¼6Ši‡ 1ÀÞ¡B;g®Ö¹È ÉÄmUK8Ž,N üº–!—p&8€™^a æsZï,t(Ô\ xbvãI `,³ðPuÁ%ɦ@¬Œ¤Æb¬%(\‰,J$°¾&g˜^Ø`Šb›eR⻞†@6ƒS‹‚ÅR¢0:Ócg¥ Ð`FÒÑ(öèWrÓea[¨rUpò1ÿ&záN~#Ÿ·!– þ¤ t,Ä¡Ad c^¬Àa]ô Þ"2áW¬à¢F/ÁÃ:FÊEg”»Nna—m ò!øB:d1Hu:‚\ÊòV[MÊr)²x€X‚“åÆ8»¶¦®ÁªìaM#ü Wá`°ëa!Ö8od1  `ç K¡æfm˜Ýds@ê7)ÑÁ|vCC`#&[Ã_îVw¸áA#®ÀªkFËÇ æA{¦£3qŒì¦A)`Bnæ $€é~( šEÒ‘ÚžŒÔ4a8ÀG.§£‚øš¸JÄ#Rä.¶«@ô7GŠýàb`!Kfe±ŒÄjz†›oz¶D†þ˜’Š¶Ø(ñV|…?ÍS.+¡DF;ëˆJÁ¢r?B L ˜¦r­Áò+\vú²'ú?Æ£àŠåÐcBä+ÖÈfe~$?Ç¢"ÛiDjÁXnP ÌF.žÄ/Pòº+Ì*Üg¥ØcoSd$KÁ:<÷IvŽкgÓ ÐAbNÞ@F³écÏEvðmš¡žJä¯<¶)ü„æ4VãQ2öX à ‹1bÃZõIr¤3å`J,8 Á‚ø(ƒS¬R!f@t#ŒL²ÔÙ¦d]$Cwé\ Â@'ú  ÏÕê‡,`LJ^t)¤+Èë*µ/ôþÇ{ª9Æ5…(*JìVÈDÞ\$›Ô'1 cØÀ¦3U#SŽ¾¢9¢S :h:Æga,Ñg“˜†²€Ï.ôàÞô\pja<"¦€¦„#Á…n ¾“)Va!ÖÀ²$…LuldÞŽQ0Á»L&ØG>ƒ3öC.Ž $¬£NåLƒœëü? –5:XÒCŠzÑ8\ô¬âc£îke` Z(§ }®¡HWzNŸ¤ovOÆZ£†OýÞ Õ`ÊE­Z;‡kŸM!^»ãÎR"²ž7½‰a§YÂpN)†¢€‘ÎZò¦yWDŠTä,=þäå yWSîlæ*›ò_úwlj-“Xnq£8ÀÖjp\A8¡•ÐÕ:æ=ô€­äàO2@vê'þLÚz‚ÉADœè1hµh–âÏ ¤#X«€ç ª@¡ñ䈅¬€aÑgc¸§M'A}—æc-hÄKŒÛêÌ:<ÿnf3i$Œïž¯‘í(ØaFtÔ*7€%Ú8ØãVOàó²æÄÛhw„!دÖ^%ØáÝIaXðêMø@ d‡‡+%üÀÊ,*7úÂÁ䬣+¤£C5êG‡RÞÿ$‹~ã?@®qc?GÆ$×üþ#Rx®4=xŽHû%fW‚®4TÂ0ªƒ@Þð©¡cŸƒ Båg͇‚Ðç=Œo ¢Sù…Ý)Âàþ¡?î(wÔˆëà=…ê`>$Øøa̲ƚ  2!ògGkmŠ&i ·»Z‹—(¶Ô8« 2¢àp"Ø5Î&ô@ÌãB} LÌ5Ø Þ§þaÖ†¡âÙý€TÝÂxÎL2$‚‚‘å}žC9è(·hp`¦²?ÞÑCŽáµ"´\’ ¶ÂšSˆ\šS¥t‘'¤°›d“}ŽBÜ5bY^¦‚¬ºß§ã#¾Çfö =æ,ÆTÝšIEõŠÕƒòe‚PdT+ØuAMJ; àÁÃKÆ1Xåö˜l½m7ÃΪ>þe0¶f0„ãHàenó>M$– þuœ“ܯŒ»6 ÄK2›G  jóbÎFȬŸÁa€À0(Ѐ}€P.A€'ø,¯œì 8‚Jõ“`F9Úˆ‚@›àcÈ_¯ ×€ÆÀ‚ØÈœÁÔUÇœTZÔÁ@ÁØ¥‡‡Ò@å†Æ•ÆCÙ֢ǘڕÀSGÈ`A†**ÂÕ%ˆAŸÞR€ÁÑ1@‡«Aå’ªÔ벇ÂœVßÒÆìg°8A“œÀâG‡‘€Ø°Ó0ˆ$Á†®°è“s>¸X’sª´X¹"Å1XHY\¨ªÒhÞ>q¨þÀÀ¥Lj ~àÒ À†O ¸ PÇ— Ä,3bÒb ØÃAá(J5Ò:àêÈ ¦fAÚí§JF|8Àå•¥ž³ŠÊ{"eÙ†®¸ŠÙG^Å1Z>›"Là’ÍP}AÀL à2À%&n!1Ò'@e\I‰¬*ˆqÅ8Qb@“¼;AÙ”¹Å€Ïcºu‘§éÓçþ$¨©€aTHˆdî; £912£·àW€µ 3=$ÖN7ý@dA(YÃœkh©êuŒ‹Ó,ðµ€$b!ç¤uWänªŽeô!ƒ ÒôhøÃÁ­*ÔQÇH]8þ2”0'U7P84} äîE`4E¸õÐ1óýaI 5T[æYÁžxð¤Ù "†^ ä Ò0ø {ýù!Œ'áüu@ª„œ\ýe1³p±^H,††BPâÁWP$RÄtÏ÷âGMn”ÔuØ@ŸÐ²Ì|TDSlE !ÐJ@!2LLpeQuK9€l U©â k@ @v}’@É%Ï`uà„âÍ2„Ô5jVÇ€7‰©çØ—(‰>³O-Êž™5tç:u €S§eqO0Ô9ÒҤˆWS¥þ àÈg tYGÝ2e˜h— TRÆ%pàdý`Àq•”»AM*´@<]Àô„ 2#RÖ43nõâË”UlKàbÌaÁ\+C'Ò2Ð%¿ít@¾˜™ÔƘ%{€rš2ˆœU"¥6¹¨”7PBÄèÅ<ˆÃŸ\¢ÑÈFLÅXÌdÁR°"aÙ×H0XtcE;$mQNQE,Œ#"– T-z h8£þdÇ5"sëph±³šå@c…W"K¡€y'¥æÊfV Á+S›N¡3…21‘š·‡®´ !ó$!NºT˜t—V¥Üõþñžä)pt°[3jÊR:tq[GÎD‹½‰yƒ¹iÁŽsF‘{„õ±8y–' G<ØA#ó÷8ò04€×_Ltý[5Äô{ÄÞt…ÃLKùe8Y‰î˜ô++åñ9FÃ1¬Máì|Ä$Ÿ0D‡%…NQ ØŒ„ÞÑ£.áJF`Èn€â IKÊ Ši}!ÄÐ’¬ qáb ¨¹I¾Âk@Aq™ñK„fÝ#3â9ürŽ£‘„ Žƒp›Þƒ‹­F Cˆ×!FLEƒâQ“@X!³ZB pD…$”¼EªéKŠHA€s…ƃ 6"s»)§‘h¦!î0Æ-¶µ¨N"­Mˆ‰©6‘Âàí¡ž—0@ ‡n#kôd‹“6ñH8XÜp Yvƒák°8+T‘ Q¡•Ì0à+ccÃÀ†C t©9˜àÂ/42‡k,yŸ¸UW»—RèјÛ9ÈÙØ$xc;lj½æuÁ&u`T qDŒcA?KÐ@Șñ¾ Ðm2PŠZ·-÷â`>(›ÚÓ+jre; SHAR_EOF fi # end of overwriting check if test -f 'serial-lcg.ppm' then echo shar: will not over-write existing file "'serial-lcg.ppm'" else cat << "SHAR_EOF" > 'serial-lcg.ppm' P5 256 256 255 þþýþþûþúþøüüýüûû ýøüûüùþüýý þþúúûùüûü ûúýýýýùüýþþúýúûþüüþüýþùüþþýþüþþýþüþþüûûø÷þþøüûúþþûüúüúøþüûüüþþûþùþøûþûûüûøüþüûûýüýþýúûü üþ÷ý ýþûþýý ùýþ÷þýýüþýýþ þûùüýüü þûûüûúþýþúþ÷þûúýþþ ýùýùüþýûýüþüùüøüüþýýüüþúüýýüüýþýúýüýüýýüýýüýüúüýþþûþüþýûûþýùþüúùýýþþüýýüûüýþüþýþûùøûýþýýýýûþþûþûüþøúüþü ûþýûþüýùüûýþþøýþýýþúûþüþýþüüý üüüýüû÷þøùûþþûýûýýýýýúþüùþüýýýþüýüüüúþüúýûþù þüüþþüüúûúþþüúþüþýýþýûûüþýüúýþûúúþüýüþûûýþþüþýþûü üûüýþþþþýþûüúþúþþþûþþþ÷÷þûûþýüýþýöþüùýþûþ úþüúýýþþýýøýþúþ ýüùü ýþüýþþþüýúþüþøû þûýúúüüý÷þûûûúþüýýýùýûýøþúýüþûüþùýþþþþý÷üþüüüþúþùüþýýþýüúûþýýþýûúþüûýýýýýûýþøûýþûýþ ýýøû üþûüýþ üüùúúýýüýþ üûüúýûýõúûüúþþúýþþ ýüýû ýüþþüûöûþýûþýöûüþþýúþüúýþúûùöùþ÷ý÷õýýüûýüùü üýù ùýûûý ýþþüýøýýüúþûúþü ýûþþþúûùþúúýúþýþ üüýøþüüýýþþûþþúüþý úþýþýüûûþûýüþýýùþ ýþùýûþüýù üþûýþýüþþøþþúþþú÷ý÷úûûøøý ûþþýýüûûüþûúýüûúýþýýû ûþþþüýýþýþýûùýùûþþþüþýýûüùýúýúüþûúýü ý÷ýüüûûýýþûüùþþ üüýþýþüûþþýú ýþýùüüþýþúûþúýûûüýøûûþûüüýüûýúúüý÷þüýüýüþþøüüýúþûú ùüûþýûøùüýüùþýþýüýûþþùûýüýúüùúþþþüýüþûþúú þýýùúþ ùüþþþ öùýýûüûþúþúü þþþýþýýýþýüýüýþýû÷ú þþûýúþöûúûý÷þûüûúûûü þþûûùûýýýúþþûüüüþûýúøøýþüýýþýþýýùüùü÷úýþøþþúùþüüý  ýúþþüýûýþýýýþ÷ýûüûýþùüüûüùüþþþüýþûýþûüüþûüþüúúùúûþüúýþýüùûþþýüúûýúûþûýûþýøýüúþýþýþüýùýüüþýþüûþûûûþøùüöýýûýøüù÷üþúýþüýúþüûýýûþûýþüþþûýúþûúüùúýýúûûûýýùýùüþýþûýýûýþüþþúüöþþþúûþþþüüûýúýùøýþûúúþû ùýþøþýþþú ýúüþþþøþüýùúúþþùþýýþýüýûýüøþùþþûþüýýýüþ ýûüþøþûúùýþþý ýýþýûþüûúûüüþüûûüýúúõúýýþýþýþüýûüþ þþýøû÷ýùüüýüüýýþüþúüý üüþûúûþýýþýýúþþûþýûüüúýþþýþýûþúúýûýþúúýüûøüþþýþûýýûûþýþüþ þþýþûþþýþýüüþûüþøûúýúþøþþþüþüüúþýûýüüþ ýýüýüýüýüûþýþûþüùþúýüüþþõüüþýûû úþý  üû úüýøüúùýþþüþûþýúüúþþûþùüþþþúúþü ý ýüþþýýýùýþûûþùþ úû÷ùþüöýüûüþûýýþúüúþþüûüþýýýþüüýúýüúýøúþýýüûþþüûúúúúþúýþþûùýüýüþû÷ûýýþýüûþýþüûþüüýûüþûüþýþþúøýüüüûýþûýýþüüûýúþþþûþýþþýýýþüüýùýýüúþûûüüþúûýþýýúýûûþþüýüúýýþþüúüþüüúüùýýýþýýûýýþþþ ùøûþþýþüýýüûýüúüýþùùýþþý÷üþþþûþ ûþüýýüüþýüûþýûþüüûûþþþþúüûüýûúüþþùýùüù ýþüýýüþüþø ùþþýýüûþýýþüúøýûýþùûüýýúþù ûþüýþûýüþýýüùýþþþúþþúýúüýüþúþüþøýþýýûûýûýýýýüøýûýþýûûþýþþþüþþûüúúûüûú÷üýýýùúþýøøýûüüùýýýûþøýüýþýüüþøúþþþúþùúþþýûüûýùýþýüúüûþüûúþ üýþþûþþþþýþþû ûüøüüûýþüýýþýþüûýûúýþ ýúþüýþýýþüüúúù÷þûüþýýþøüûûþûýþ þüýûüþúýýûüûýþþúúùûúþûûúüýýöûûýþýþýûþýþüùýþûþýþü þúþûø ýøþýüùüõûýþþúþþþûþýüú þûúþúþýûýùûüüþýýûþøüýüþùýüþüýþüüþýûþüûþþûùüþýþý÷þýûùþþúýúýþýþþýýüýýüùþüýüþûþúýúûýüüþþøûøþûüúüþýøü øþþþþþýúùüþýþûýþüüþüþýøûýüýþýûþûûüüûýúýýýûø þúýüýøýþ ûýý ûùüúüüøüüúüúþ÷þüù÷ýþýýû þþüøüþúþþúúþýýýþþþüüûüþüüøúýùýüþþýþùþþþ þþùüúýýþýûøûýþüýýúûýþýþ÷ýþþýüüþýþùþþýúþýùþþþüüþùúþüþþýúýüüþúúúýüüüûþü ûüûüøüüý þþûúûü ý þþüþ÷þýûþ ûùýýüþýýüüûûýúúûûûüþüûþþûûùþþþùúþýüý ýüþýüýýûüþýþùûþúþýþüûþûûý ûúüþüþ úþþüýþüûüúûüþýüûþþúþýþýþþüøýýúþþý üúûþúúþüþ ûýüüýüü üýýþþýûþûýýþûüþøýüýýýýùýüþù ùüþþþüüýüþûúýýûýýøýûùýüýýü ûýþýüýþýþøüýþùûûþýþýûüûþþþþýúùýýýþüýüþúüþüýüþþùþþüýüüüøþýþûþûøüùüýüþýýýþüüùûûþúþþýüþýþúøþü ý÷üýýúýþý÷þøýúúüûúûüüýþþú ûþüüúýýþþþýüûúü ùüüüüþþýûûþüøûûûö öþýýýûþüýüüúü ýüúúúþý ýüûýüûüþþøþþþøþúüþýýúþþüøüýþþ ûù þþþûþýúùûûüýþüýúø ýýþþþüýùýýüþüü þýøýüý úýþýýþ üûþþøùöùüüýþþüøýü÷úýýüþøüþþûþþþþüüýýûþýþúþü ýúþþüü ýûýüþ þýøûýûýúüþýýüúýýþûýüûýþùýþþþýþýýûýüûúüþýúûüþþþýüüþýþýúþþùûýûýýþþüüüþüýþùø ûøþýüüýþûúýúýþ ùþþûþûüýþúþøöüûüüüûýüþüüýúúýþþûþûþüøûýüüûûüûþüþúûýþüûûûýûýüþùûþùþúûüþþýûþúþýýýüüüþûþýýøýüþþüýüûúûþþùúþ þýþþþý÷öù÷ ûúýú þûþýý÷úûûþúúþ ýýûüûýþýýþüþûý ýýúýûýýüýýþùþúûûþùýýþþüûüöüûøø ûýþýýþüýýøþþúýüûûüýûýüùýþúüüüýùüýþúýý ûýúþýýþýý ýüùûùýþûüýý÷üûùþþüýüûû ýúùûúüþûøûþüùþüýüüýþþýýþúûüöøøþúýþúýýúýýûùýúþûýûøýýûþþùøû þþýüþýüþüþûþýùüýüûúþýþüúüþþúúúúýúþþþýýúþû þþöýþûýûüýøþýýüþýþûýüþþýþûüýþûûýýüúþþ þþþûü÷üþþüüý÷úüþþúýýüþþüûþ ûúûüýüþ þþüýøüþþþþûýýýûüýýûþûýýüüýüüýþüúýúþ ýøúüþüýûúüþ ûý ùúüþûüüýþûüùþûùýþ þþþþüþþüþûüùýûþüúýýþúü üýüþùþüúúøúýýýüýþýþþüü ûýü þ þüüûþýýú úþüþþü ýþýþöþýþûü üýþüûþýýüùþüþþüûþ÷þøûþúþþüýýøþþþûûý ýýüùûùüþþþýûýûþþþýûþûúùùüýýûüüüþþüýýýþþüýþüüüýûüýþûúþþý øùýûþýýúþüþûþþúýûþýýýþüýúýüýþøþý÷úýúþýþýüüýýöøüþüþûûþþþüýýþõýûþþýûøúõþüüýüþýûþý÷ùùþûüþúþûýüþþüýþýýýþúüþýüþýýýüýýþý÷þþüýüøþüþýøþýûþ üþýüýýüýüþüûýüüüûüþùüûøüüþþýþüüüúùüùþü üüþýþþþúþ÷þüýøþýüýûþþýúüýþýúúýýùýûþýüýõüøüþýüüþþý úûüûûýþþúü úûûúþúþþ þþþýúøûýýúúùúúþüüýüüüûüüþýüûúýûýûþþüûùüýüüýüþýüûüýûýûúúýõüþúþ ûûúýüýüûþùþüúüüúýþøüýýýþý ûüþûûýýþüýûþýþýþýþýûùûüýþùùûøþöüüüþþøùûþþûüþýûúüúüûýüþþùúùþýüýû þü þþþþýýýúûøþ üþýùýúöù þüýýýýþúüþ üúýýùüþþúüúþùüüþüùùøþýþþüýýùûùúúýýþýþýþüþýüýûûûüúþü úùþûþýøþûûýþüüþüüþü  úüþþüûüþøþûýþþüþþõþýúûýþüøýûþüøûüüüûýûûüýúüþþüþøýý üþüúýüþøþ þûýýþþüú ýþþþüýýýþþúúþüþüýøûþýúúøýùùýûýþûü÷ýúýüüüýûûþüüûúþýþýøü øýûþüýúþýùü÷ûüýú üüýþüþüüþü þýüýýûüýþýþúüûýùþýûýüüüþþù ýýþþüýþüþùúûþúüþþþýþú÷þûöþþ ûþþúýþüþþüýýþüùüüþýüûþþþþúüýýþýýüýöýúþýùþúþùüüþýùùùûüüüùþûýúûþþþýüþûýùýýýýúüþüþüþüûü üüüûúþüùùýýüùøýüýùýþþüýüýúþýýûýûýüûýþýù÷þúþþýýýýûúûþýþúüüý öýþ ûýüùþþúøþùýûüúþýþ üýúüýýûûûýöøþýüüýüþþúüýýüþûûþþûþþø þþúýûûüûûûùýúþþüýüüùþüýþüûþüþüûýûûüúþýûûýüúþüþþû üýþúþûüþýøþü üþýýùþ üýüýýûþúüýúþþþýüùýùýýýüüüýüü ûþýþ ýü ýùóüúþúþúþüþøüüýúþûýýýþýúýûýþýûûýú þþýþùøþþúþýûþùüþý ùý þùöüþýüýþýþýûþüûûýùüýûþþþþþþúýýýüúüþüùúýùûýùûüüýüùýýüþùýûþýýþýýýýýýúüû üúýûþüþþý ýûþúûüþûþûýûýûúüýþüþüöûüþùûþüþ ýþúüùþüýýüúþúùûúþû ýùþþýüþýþúþüþýûüûûþýýýüþüý ýúûûûøýúýþþûýýõúýùûüúýü ýûûùýüûûýüþ úüþýùý÷ýüüþûøýüýüüýþüøü üú ýûüýýþüöþþùûþþûýùþúýýùý ýüþüýûýþúüûúúþúúþþüüýþýýýûûúûýþûüþþþüüúùþýú þüþþþüüûýýûþøü÷ýùþüþùùüûüûûþúýûûþýûþüþöýþý þüþùþûþ ýúûúúþýþ üûýü÷üþþüûú þüýýüþüþýúþ úþýýþþþûýüþþü þüþþþýüüþþüüûþûûþþýýúþýýþ÷øýûýüøýùþþýýúýýþýûüúùýûüýùûýýþþøüüþüüüûùýüúþüþüúüûýþúúýüûþýýúûýûýúýúûùþûüþüýþüþýþüûþýýüýøûþþùüýüüþýþøü üùþúû üþüýýûûûþüýûüüþþûüþüúýþþüüüüþûþýýýþý÷þüýú÷øþýþùýýýþüýýþõúýüøýûúüüüþýýýûøûýûúþüýýùüþþþüûúþþþýüüýúýýýþþùþþûþýþþþý  þþýþû ýùþ þýüþüüýüüþüüýþùûþýüüþþýýüþûýýýþþþýüüüüþûùýþýþûúüûþþþýþýüúýþþþýþýüûýüúûþþüþ  þøüýýüûüýúúù ü ûþýüøüþüúþùùþüý úø ûüþûþúþþþþþöüýüûýþûþþþþýúùýùøþüûýûýûþýþýþýþýýýþüþþýüûýþúýúýþþøúýý ùýþþüþøþüüýúûúúú øúþüúûý÷ýþüýøúþüýýúûüþýúýüúþüýþýýþûýüûøüúøýþþþýüýþþþüüüüüþüüýþûù÷þýþýüþûþ úþþþýýþþûþüýþûûüþöýüûýüþþþ ýþþþþüúüûþýþûûùùýýúøþûüýûûûþ ùúýüúûþþùþúýýüþüûþþüúüþõ÷ùü÷þúùýûþûýüû þüüý  üüþûüþûüþý ûüüþþüþþý ý þýûøýüüþúùüúúþùþüþþýüûüýúýúþýüúýþüüûûýþþþûõûþüúüýüþüýýüýüþýøýþþûûûüûûûû üùüøûüþ ûþûýüûþýõþþþþûöûþýùþþüýþûþýýûüü ýýüøüþþûýþþüýþüþüýýüýûþýüý÷ýúþþþ üüþþüüúùüüúúüýþùûýûþþüþùúûýüþþùýþýþüûüüþýþüüýûþþüûþýûýþüýþþýüúþùþúþ÷þýþüþûûýúüüúüþþþýþüýþúþúûþþûúýüøýýùûþýüüýüþüüûûûüþþùýüüûþüûüùûúúþþûýýýýþüùþüþüþþûþýúþþþûýþþûþüþþýùü úúýýþþ úþþþúùûýýùúþ ýþüýýþýùþûýûþþýþøþùüúüþþùþúýýúþúúþ÷þ÷ üúþùýþýþüúüùúýýúûûýú úüùüüúüûýüüüûýþùüûý üýýüþýþûûûþùýþþþüþýúþüùüýùûþüüþöþúûþýýýûüýùýýþúþúüüúúýüþþùúþýúùþ úþýöþþøýýþ úþþûüþýøýúýýüþü üùýøþúþþþýüþúüþýþüúùüýýýúýýýýþüýûúúýýûýøýþ üûúþþþýúûû þúüúýýüýþýþ þüýûüüþýþûøû÷øýûüýþþþú  þýûûüûþüýûþüüöþýüûüùüûûüþúúúþýøþýøþýùýýþúþþüúúûüýüüþ ý þüûýþûþüüúþùýùþüþþþþúþùùúýýûúù÷üý÷ýüøýýýþúýùýüûþþþüüþûúþþýùý ýýýýþúýüøúýøûûýüúøýü÷ûûýý÷üüüüûúýüýúýþþüüûüûûû úþþùüýþüýüýûýþüýþýýüü ÷üûþùüþüýüýøþúýüúþûþþ üöú üúýúþöýúüúùýýþþúýüþýúþþûûþûüüýüùüøþþüüûþþ÷þüýýûûøûþùýþ üþùüýþúþýþýûþ ù üûûþüýýþûùýûüýýýûþý ûýüþüýýüøþýüýøûýûúüùþüúüþüûþü ýûõùúýüûþúþûùý üøûþûøþýüûýýþýûþýþþûûýûþþþý ûýøüþûýþþûýûþþþûúþýþüýýüýýþýü úýýüüþûû üþýüýùþýûýþýüþüüýúûþþýüþý þû øûþûûþüø÷ýûüüýþþýûüýýþþüþüüüúüýýüþþþùþùüþûûþûüúþûúýûþþøýýþûþýýþúýúþý ûúûþþûüüûù÷þúýþüöüþøüüýþöýþþûüýþþ þþûþûúýü þþýüüüýýýüüùûýüúþúþýýûýøûýýúüþýþøûþüúþüýýýùþûþøúýüþúùüþþùþþûþýýýüûþþ ûýüýúüù ýþúúþýúþýýöüüûúý ýýþýüûýüýùüý úùûüûýûþúûúþúû ûúþúõüýýþþûùýýüþüûýúúþüþþþûû ýþûüþüþùþûüþúüüýýûûüþþ ýþþþ úûüýüúþøýúýý÷þüüüüþüûþýüüúþüûúùþþýýþùüûþýùþþýþúýúûûöøþüüüýþûþýýýüýûüýüøýûýþþúþùþüþüýüûùøýüúúüùýøûúüþþúþúûýþý úûûþýýþýýúýþúýüûûûþýþýüþýýùüûúýûüûúúþþþüþýþûùùûüýþýýúþ þúú üýýøöúþþüýúùú üýûúþúýûûûú ûüüûûüöùþùüþûþüùþýýþøúúúûýýþùýýüùùúüýûúýþüûþýýûûú÷ûýûþüþýþüýýþûýüùýùùúûùüþø ûü ýþøøýüýþþûþûþõþûþýüþüûüýøøüûþüýüúþüúþûþùþýþûüûþýþ üüþþýþþýþüþþþû÷þýüüüúýþù ýþüúûúþþüúü þüúü þüûýûþþüüþýþûþþüþý÷ûúûüüûýúúýûüüþûþýûþþþýüúüúýüûþüùùýûû ûþûûþúúþþüüþüþþýû  øþýýúüþþþþýþù üúþöý÷ú ûþøþøûûüþþýûúþþýþþ ûýúýþøþþ þý ûþ üþúüýø þýûþüþýýýöþýüüýûüþþû ýüüûüøýýû ýþùþ÷ûúýýùýþýúþüþüüûýûûý÷üûþýýûûþûýûúþþ ùüüþû üüþüüúüþûþþýþýüþúýùû þüýýþþ ûþýþþøõýüþüûúýþüûþûüûýýúýþûýýûûþþûùþýýýûøüýõüûýþûúþýþ ÷ù ûüýþ÷úþýþüüöúûþþúþýûþþúýþüþýùúúþû ýüûþüüýþüúþüüýþýþûùüüýýþþûüùûúþüüýûûüþýýøþý úûþýýýþûûýýþ÷ýüüüúüýþþþýýüùúûþýüüþþþüþýý÷þüýþúþýúûüüþþüüúþýýþûüüûþúûûûùúþüþúþüøüùþýûþþúþüúý øþýþ ûúþüüþþþþúüýýýùúþþúþýþýýûùùüþþýüûýüûþüþûúþúúþöüùþüþüýûøý÷ýýûûþýþüüûþüüúþþøþþûþþùýúþøüùûþüýýþýüý úû þþýþøúûýüø ûúþúþüýüöüüþþýúûüùþùýúþúþùýþýýúøùùûýþûþúüüþûþýü üüøüüúûþýùùûûùûýüþþüøþþûýúû þûýü ùüûúþýûûüú ýùýýýþùûúýýýûýýþýþüüûþ÷üûùúûþúþûþüüøþ÷ý þýýùûþýùüüýýþúùþýþþûþþýúúüûúøüúüýýüûýüýúûúþþýþþþýýûøüûùûüþúþûýýùýýüþúþ ýþùþüú üûýüþûýýýüüûþûýüùýüûþüûþþüø ûúüü÷øþþþûþúþþýüúýüûþýûüúùýýýýýþþ ûþþüûýöûþýþþúüýþýþüüýþþþûõýûýþýþûüøüûþýþúüöýþýüüøþþýþûýþüýýøüþýýýüýûûýûöüþýýþü÷þüüúýýþýþùùüýüþþýýýýûûýûúþ ýúýúýýýþûýüþþýøûþýûûþúþýûþýüúþþýþýþýûýûþýûþýú ýüýþþüúþüýþýþüýüüýüþùûþþúüýüþüþþýýýüþýýüùþøûüþúýþüùýûüüýþþüþ÷üýþùúùûüýýþüþûýúüûúþúýþùýøþýúüûþ þûýýþþ þýý ýüþüúùøýþþýúýýùýùøþýüýùþþüûüþùþù þþüþûþýþþýýýýù þý þûý þüûüùþúýþýúýûýûýýû üûöù÷ûþþýøüþ÷ýøýýþùýûüýþþüüþþýûþþûùþùýþþþýþùýýúýþþýüþü ýüýøýýýúúûü þüþýþü÷ýüüûþúþüþýþþüýüüúúýüûûþþúý÷þþüùþüþþýþùýúûýüüþûþüýüþýúþüûýýúýü ýûùþþüý øýýùþýùþþþûúþýýúýûýüûüüýýüþüùûøýý ýþûþþüü ûþþüûûþýüüþ ýþýùýûüüûýú þþüýþõõþùüûüûýúúýþýýüýüþþúúüüýþþþþþýþþùþøüýöýû ýûúýþ ûüúþýúüûûþùþúþûýýùþýþþýýþûüüþýþûþûþýúûýûüú üûüûýúýþþúþþûýûüúüýþúøþþúýþúüþþûùþüúýûûþþýúþûúýûýþýúüúüûþþùýûþüþ÷þúüþþúüû üûþýûûüüýüûþ üþþýþ÷üþýüýúúýýþýüýüüùúþþüþøþùûüþýýùúûùýûýþüþûýüüýûùüøþýûúþûûþûûûöþþþþýüýýûûþýûýùøúüüþüþüý þþþýþýüþþþýúþþýþûûýùùþýüüýþûþøùþ þþû ýþþþþûýýýüüûüþýýýþþýýþúýýýüþûüúþþþþüýþýûþüýþüüýþ ûüøøþüüþûûýýþùúøüüúýûýýþ þüýüþýüûýýúüúþüüøþúøùûüýû ýþþýþþýüþýýþú þüý ûøúüþúüü üþüýüýýøúüöýúþûúþþüúþûþþýýýùþ þþüý ùýûþûüüþúûþüýûýûþýüýúùûýþþþúþþý÷ûúüýýþüþýþüüþþþúþüþ÷þûüüûýúüüþþýüýþþúüøüþýýþûúýûüþûþþú÷þ÷þüþýüþýþûüýýþþüýúþùýþüüþöýþûûýøøýúùüþýýýùúþþùùüýýüý þüýúýþþûýûûüýúúþþýý ýü úý÷üüûþýüùýöüýøýüüûýþþ ûýýþþþüþúüýþüþùúùþþý ýúûûþýûþøþüþùý÷ýû þüþùý ýúùýýüüþýüþûûýûüûüýþöþþþýüû ûüûù ýûþýýüþúýþþ üýþüýþþüüûýúöþýþýûûõ üþþýûüüýúüþúúüýþûû÷üýùýüýüþü ûþúþûþüþýþþüùýýþüýýúûýüþúüþùþþúùýþûýýþüý úûüüüýûþùýþü þþüúýøüüýøþþþüþýûû ýúùûøúþûûýüýûþüýüýüúüýþýýýü÷ýþýûþùý ýýýúüüúû üûûýùþüþý þúüüþýüúþþüý üüüüûûüþþýüþýýþüýüýýýþûþþøüúüüþþþþýúþ ýûþþþüû þýûþüþùþýüýýûýýüüþþþüýý÷ú ûýýýýûüùü ýþüüúüýýþþþ üýüùûþüýþþüûüúüþüùýþþþûýûþþþüþýýüýüþþþýüüüûýþûüüüýúþüýüþþþûþþýþýûýýýþüþûüýþüüýýýýþ üúùþýþüýþùúüýüüûþûýþûú ùúþ þýûùûýýþüüüûùúþýýþûþüþþýýüþúúýþþþýùùýû üýüþýþúýûýýûûù÷þûýýüúùýýüûþ÷þþýþýþûûúüýýüøûýþøûþüùûýý÷þûýûþýúüýþúüþüúþþþþûûûýþûüüûûûúþþþýüþýýþþ þ ýþûýýûþùþüúúþþúùþýûþüþþû÷üþüþüúûûùûþýþþüüüû üþþýúüýúüùýùýûûþøûûýüýûþüúýýüûüûýþýþùýýýþûýûþþùüûüúýþþ úþûýþûýûúøþøùûþþþþýüýûþûûüýûþþýüúúúþûüýûýý úþþüýþ÷üøúþüþûþ÷ýúýüýüûøþ üýùþþúüþþûýûûþûü þþû ýöþùþüýûþøüýþþüüúùýüûúýüýþý üþþüþþýýýþùþüþýüýùýýüüþþþûûþùûýýþþþûûýýþûü ýýþþýüþýýüþüüýüûýüýýú ýüýúýþýýþúûþýýüþþþýþþüþþøüþþ÷ûûýûþûüûýûøþýýþúþþøýøýüýüùûûøûüýûûýþûýþøþýüû þþþùûúýýþþùûþøûþþùûþýüüýýýþúûþöýýþýþýüþýýýüýú û ûûþþùüüûùýúûýûýûü ýþþþûýüþúüüýýûùûýýýùýþûþþüýþý üþûøüýüùþùúøþýþýý ûúý÷þý þüûüûýøúþþúüüýýýþûüýûûúûýýûúýþþüþøýúü÷úþúþûüýþþþþûþ ùý ûüüýùþûúü ýüùûýýûûûýþ þýúýþüûýþøþø üûþù þúúþý ûùûüþþüþûýûûüýùþüþþýþþùúþúýûüüûþþûþüþüûýøöüýþüþúûúþúý þýüùýþýùúýüýýøüþýüüýûúýþüþþü üýúüþýýúøøþüüþúû÷üýþüüûýüúýüüûþûüþýúþûüûúûþýõþýþýüýýýýü üûþþýþýûùúþúýûþúúýýýûûüþþý÷þýþþþüþþûþþùýþüûþþþüý÷øûüþþúýþüúþþøûþüú÷üýþûþýþúúüþ þùùþþþüþþüüýúýûýþþþþýþýþûýþýüýþüýü ýýþýüþýùþ÷ýüûþüþþüþýýýýýþûûýþþþûýüþýþþýþþüûúþúúþûýúþþûøüþúþùþüûüýþüùûýüþûúþøùýþüúú ýþûûþýüþýûþþüýþ÷ýþþþûþùüüüüûû üûûüúþþýþùûþþùúýþüýüüûýýþù øýúþ ýûþþýûýþýùþõûþúúûþýþýýüùþøýþüþûûþýýüþþüþúýüüüùþü ýýþüøþýþýþüþþøüú ýþûüûþûú üüþùþýýøûþúûüüþþüõýüþüýüúùüúþýýüýýþýþüúüþýú÷þýýûûüþþùüþþýýþýûûþû ùüû ýýøýúþüýúúþýüûýüþüûýþûûüý þûþýþúþúûýþþûþûûûþüýüüúþùþûùýþýúýþýýøûþûþýüþüþþþþþýþùþþûùüûýþþüýþ÷üûþþþýýýú ýþüþýþýýüûúþýúýúùþþýúýúüýýø ùúýþýüþûûþùþýûüüýýýûýøúýýýûþüýþûûþþý÷ýþûýþþýü üþþþüþùþýüýûû úúþúþûüúýþüýþùüýüþýûýûü þýüùüüúþùùøüüýüþýýþýýûúýüúüûûýýûüúûþþýùýüýöþþüýþþý þúûüûþúþýýúþúúüþøýýýùýþûúùùúüþþöúþüúþø þþûþûþüýúüú÷÷ýþûùûþüþþ þöüýþüþþüúüþþûýüûþþþý ýýþþøþüûüþýþúúüüýüüüûþþýýýþþýýþþýúûþþûþøüûüüüýúúûøþþúü÷ýýúþþùúüþýþûùü÷þýýþûûüþýýüùþþþýýúøûýüþüþþúüýýýýùþýýüþý üþýùþýûþþúþþýýýûþý ûýüûùþþý ûùþýþþûøûøüúûýýýúöüûûýüøþýüüüüúù÷üýüýþûüýýüüýþüþúúöýüýþýþû÷ üûûüûûûýýûöüúýýþûüþúüþüù þþüþüýþþþýûýþýþþþýúýýþþ üûüþ÷ýüýûûýþýøýþüüüûùþúþþüþ ûüûûþþþüüûüüýüýûüüþü úþ÷ûþþüûúþýýýüúþþüúûùýþüþùúüýþþúýùþûùýûþ÷ýüýúýþþøøýûþþýüûýüþúøýþþýûþþüýúýùüþûý üþýþþ üýûþüþûüýû þýùþüûüüþýþüýþýüþþýüùý ûþùúþýýþþþýúþöþüýûþýû ýöøüøýüüüúùüûüþþúþ üýøüüûüûýûûýýýûýýüüûýýûþüüýü÷þüûþûûüöþþüûûúöþýýýþþ ý þþ üüúýüþûýüþýþþüüûûþþü÷úýýýýüýûþøþþ ü ýýùûýþûýûüøûýûþüýøúþþýüùþþþøþûþýþ üþöýýùûþûþüüýþüýûüúüöüýûöûþúúûúûûýüüûýýþúüüúýûþýüþýøúüûûþüþüúúþýþûýýý ý úýýýþþüþúþþ÷üûüüþúú ü ø÷úþûúùþø÷þúþûýûýüþþùúþûþýþøûøüüüúûüþûýüüûûýùýûúüýþü úýýýýüýûúþýüýþû ýþùýýýþþûüþüúýûþýûþþ þþýúþýýþüùýüûúýþûüûüýýþüýýûþþúüûþþùøýüþû üýýúþþûúþþúüýùûúþ ÷ýüüþüüûúþùûûýþýýþüþýøþûüöüúûøýúûûûþûýþúûýùýûýûþøûýþþýþüýýúþùýùûüþùþûþøýýýúþþþüþüþüüûýþýýûýþýþýûþýýûýüúüøýþþþüþüüþþõùýüþüþûþüþþûýþþüþýþýúûøüýúúþüüýþýùþü úýýúþþýýþýþûýýþþùûþüþùüûüûüúûû úþúüûýúýþýþþýþúùþþþþöûþþ÷þýøûüùüýýþüþýýýøûþüþþûýúùüûþûüûúüþþûþúþþúýþý ýüýúýüúþþûþýýùþþþûýþûúýýúüþýüüþþþýû ýþþüøýýþúýûýüúþþýûþ þûüþýüûøúýùþûþþúþþþùûüþøýúþûýþûýýýûþþöõýü üüûý ûûøýþûýþþùýþøúù ûûþþüûýùþþþýú÷þýûþþþýý ûüûûýûýüüýþþýüüúúýüþüýýýøþýþýþúý÷ùüþúöùýûýûþüûúþþþûþûþþüýüþú ûýøþúþ þøýýþùú ùýùøüýýýúúùûúý÷ý÷ýþüþýüþüüþþýþþýùü ýüýüþûþûþüþü üüúüüþþûþþüüþþúþýþûýûþûþýûüüþüþþøûûýýüùþþøüûúþ þùþüþúüýûùûýþüýýýþ ýþýüü þýùþýþýþýúýüúþýýþúü÷üþüýýúüýýöøýüüùúþüúþýúþþüþùýüúýþþýþûþùþýýûýüþýýüþýýüùûüýüýýýþüýýþüüýýõýþýþüþþþþþþûýúýüûûøþûùýýýþüü úýüþýüþüúþüýýøûþúþüûùúúþýüþ üúúûûýý þþ üýúûþþþþþýýþýúþúþúýüþýûþýþþýþúýþüþüþüþúúþû þþþýþýþþþûýýùøýúúûû÷ùýûùþüüúþúùüúþú ýùýýþ ýþûþüýùüþûþúý üýýýýýþ þüûýýûûùýþþþùýûüýþùþùü üýüþûþþýþþûýýûýüþýýþ úùüýùùþþüþüýûüýýýùþüþúþýþ þ÷ýü÷ýþüûûþùúþþúýüúøüûýþüþþüýúýýýûþùþýöü üýþúþüþûúþüûüþúþûúýþûüûüû üýþýüûþþüûýýþùþýüúüýúþýýþþûþþøþüýûýýûüþýüüúýýý ÷þûþüûþúþüþøþü÷úþúüþøúýýþüûú÷ýûùûüûúþûýüùûü ûûþýûüûþüöúýýýüùþþ þüúûûøúøýþþûþþþ þüûûüýýþûûýýýùûôûýýýþþýþúüù÷ýûþýüûþþþýüûþýþüþýýþýøþþùûüûþýþþøûýûùþüþýûþýûùöüþýþûûýþþú÷ûþýüøüýþûþþýúýþþüùüþþþþùþþúþþüýþüþúýûýùüþøûøþþþþøúüþýûýþýûþýþýøýøþþüüûù ùùùþþüüýúþýýýüûûýûþýýùþþúüýþþýýþþüþüþýþúüüûøþþýþþüþ þý üúûøüþþþþþþûýüþûúùûûûýþüúü þþûü ýþüûýùüûþüýüùüûùþûþþ÷þýþþþþþýúüùþýûýýûþþýüü÷ùþýýüüþýûýþýþþøüýþûùþûüýýýüüþ÷ûýù÷ú þþþþûþûüýþýþþûûúýýøûýþýýþýùýýûüþûýýüþýþùûüþþþüþþýúþøüüúþüúûûýüûþüúýþþüüùþýü üüþúøýýûúýúþþýúú þüøþ ýûþþþýýùýýúþûûýûùùþýü ýþüúþüþþýúüþûüûüýþþýûþùüýüúþýúú úþúýþýýþýüýþüýþüþýøýû þþüúþýþþþýûüûýúýüýý üþþþþùûøýúüûûûýûýþýþù÷þüþøýþ÷úþýþûþûúýþûý þúûûýûüøýýþþüúþûü þûûýýý üüúþøøýþüýüýüûûûýüûþùûüûþûþýüüþýúøúþýüþ þþøýþü ûúùþýýýþýûþûüùþüûýþþþøýüýýþýþüýüþøýýþþûýþýýûþ þ ýýüýþýøøýüýûýýþþüþ üþþüûüüý ýþý üüûþûúýþúûþûüþ÷ýûüýüùþþþùûüúýùýýùýýüþüüþþüþýûýûúüýýýü þ úýýþüýþüüüýþ ùû üüûþýüýþýþúþþþüüþý ûû øýýþþûýüþýú üøúýüüüýý÷ýýýüùýûûýüýþþùûùûýüþýýþûýüüûþýýþþþýþýþúþûüüþþþýûú üü ûþýüü ûþûþüüûýøûüúüýþùþýþþùþýþýþýýþþþýüüøüüûýúþþùüúøýúüþýúüû÷þû øþûüýýýþýþýûþüþýúúþþþþýþýú þúþþþý ûýýüþúýýýþýýþýûøûþüþüþüýýùýþþùõýüý ýþ÷úþûüüýüûùýþýþý÷ûýýþüþøüþ úþþþúþýöýøûþþùþþøþü üýýþù üùþùþ ýýüþùüüüûþþþúýüüþüúþüþýüüýýüüþúþýûýøýþúüüþýþþúýùýûýýøýûúýýüýþþüüúýýúþþûþüöûþýùþúûüüþ ùþüùþüþúûüýüûüýþ ùþúûüþý ýüüüûüüûþýúþüøûýúþ üøùýþýûûûûþýþýþùüýüüþþüýúýýúþþûýüüøûþýùþþüýüúýûüýþüúýýþüýþüûýüýýþûûþýøýþýüýúûýýýüùþþü ýþþþþþúþþüýùýþüûýþüþýþýýø þ÷üþ ýýýþþûüýýùûûü ýýýøþþþüüùúþøýûùýýýüúýûþýü øþýýýþþüþýýýýýþüþúüþþþýûüúþþûþýþþú þþüùúöüýùýüþúþüûþþþûüýþþüü÷þûýýþý ûþþùþþýþù÷ýúüýüûþþþþúúùþùýüûûüüýüüýüúýüýþþùúþúöþû þûüýþùúüûüþýþýþýýþýøøýûüúþ ûûþüüýûýüþûýýüþþúûþþþþýúøúþüýþüþøùüûþýþþüùþüøûûûþüüþýþþüüýþûýüüûüþýýþþûûúýýúûýüøúýøþþþüüüúþûþýûùýþýþþþüþýþýüüþøüûøþûýýýüþýûûûþùþüüþ ýûýýüüþøýþýûýøþ þüûøøüþúþüûþüþüþýûüýþýùüýý÷üøýýþüûýþþüøþûüþýþúýüýþûþýþùþúûþüùýýþùüúüøüüþþýþþþùüûþþþýüûüþ þþýûùûþýþû þüüúýüýø üûú þøúþüýþüýýûù ýøþùùþýüþþùþúþþüúý ûýøý þûùü ýþüüûýþ÷úþþýþûþûýü þýþûýýþüûýþüûþüüüüþþýúþþúýüýúýü÷þýøüþøüúýúüüù üüú ûýþý÷ üúýûûùüþ üûþüþýþþþüýú÷þþýýûþýýøýú ûûýýüýýúüþýúþüýõýþýüþùýýýþýûùþýúûþþûøüüþüûþùúüü þûþý ýýýýþúþüøüûû þûþþýûüùüüþýþýýýüöþüüüýýþþ üùüüýùþüûþüüûüþþþüþüûþþüþ÷ýüùýû÷üþúúúýþüþýþþýþúþüýýûüúúýüþýüþüýþþþüþûþþýþùûûþûúþüý úþýþþúúùþûûùýúûüûüûüýûøøöþüûýûþýþþüûýþþþüþûþýúýúüþûüüúþþûüøüþüüþýýü úûûþ÷þ ýýþýþüþüþþþþþýýüþþüþýþý úþþüýý ýýüþýþþþûûûþúýûþûþúùþûþþýýþýþûúúüûýþýûüúýøþûýþûùþûûýýüýüüýýýýþþúüûýùýýý ùýþúþýýùýýúüýûúúýüüþýýüýþúþþþýþþþûûýýöþ ýýýþüþþþýýùýúþüùýúûþýýþýþúûûýýýýùùþûüøùüüüýüýú÷úþþúùþþýýþýþþþþúúþþýûþ÷ûýýüúþýþýýýýûùüþúýúþþýüüúüþþùýþýùüûûþþûúúúýýþüúüýüýüþûþüûþþýþýûþþýþþüüüþúýþûýùþýý þüüþýûþúþ ýøúýúûýýûû ýýýüúýýþúþúýýûþþúþü úþþýüþûþþüþüùúú÷ýûøüþþ ýþýþüýú üþüýýþù÷øþþþþýýþþúüþ þüþþþþüýûýýþûüþþúüû þûúùûúýüûþüþþüýþøýúþúùýþüúûýüûýûþùü øûþùûýûúûúøýýþýþþýüüúþý ûþûüûýüûýüûüþýùýþþüûüý÷þýþýþþüþûûþþüûþ  þýþþüþýýþýýþþûý ýùýýþûþýý ûý û÷ ùþþùþüýüüþøýýþ ùúûýüþþýþýøýüüüþüþþýüüûýýýûù ûûûûþúùþýþûýúýüþþûþþþþýýüûüþúùýûû üøýùüûýþúþýýýýûþûýúûýþüüýýþþûýüþþüûü úþùûþþùûýþûùûþþþøüþüýûüüýùûþýüþýüûûþýûûþûúü ýýüþüýýùýýþþûûùýøýùüþûûþûýþûþúþþþøüþüüüüþ÷ýýûüþþúüþþüþþüýûúþþüþþýþûüúûøýýþüýþþúùúýýûüþûúþþûþ÷þþüüüýüýþþüûøýùþøûúý þýüüýýþþúøýþýûýûýûüþ ûûýþþüøþþþþüþþùûüûþýúýüþþýýü÷þûþýüýûú÷ýúùýýüýù÷ýýþúúüýýýûûýûüûþøúüüüýýüþþþýýúþúûþþýûüýøüþüþøþþúúüýüþýûþùýþùøýøüýýúüý üþüþúüüþýü üýüþþýýýþþþýýûþþýþ÷ýýþüúúþúýúúýøýúûûüûüþøýþùøüþûüûýúüûýýüýýúüûýûþ÷ýûøùúüþþùüûøþúýýûþúýúþýüþøûúýýùþûúüûýýûþüþýûùúüþþûþüûþüûýúúþþýþýþüùþþùýþúûúþýýúûþýûþþþþþýþüüüýþüþøüþþýúýþþþüüþþøþüþþþþýúõøüþþüúþüüýüûþùþûþýúûüúýý þûþüþúýýþýüøüýþ úþûþ üúúýþüýþþþûúøüûýþþü  þþ ûþøýüþýüýýýþýüùýýþüûýûþüýýþþûþüýýüþýþüüýýþþúûýüøûýýüýþüþþ üýü øýûûüüûýþúûýþýýþýùûú÷ùúù÷÷ýþüü ýþþûþüýþþýýþøúýúýý þþþüüýüþùþúûýþüþúþûþúüûüþ üûýýûþúþüþüüþ ûþ ýþýýýþþúýþúüþøþþøûúüþù ýþü ûûüþûþþþþûþûüþûýûüüøúýûûûúùþýþþþýûüüþýþþýþûþüüùüùüüüúûûþûþýüþýüþþýþýùùüýýýüúüùüþúýþúþøýþýû üýþýúþþ üüúýþýüþþûþùüýþüøüøýúúüþüþûøþøúýþþþúþûýûýûú ýýùúûþ ý üýþýûýþþýøþùúýüüþþýúüüýþûþúþüý ÷üùûýûüþüúûýüþüýþýûüúûþúþüýýüüýýûýüýüúüüüúùü üúúýþûýýþûþþýüûýýûýõý úüýýýúþü üýúþþûþýþüúüþüþþþúùüþüþýüþûûý üùúþüúþûýúüýúþþüüüûøüúúýýýûþûþùùûþüþûþøüýüüþüýûûüýøûþýýüýýúýþüþþúþýýýþüøûýýüþùûþþüúþüþþüþûüýûùýúþüûüýûþûúúþþþûýþþý þùù ýüøüûúøúüþüþþþýþýýýþýûýýøûýûýûþøýûýþýþ ÷ùûüþýûýûúýþýüþûýþýþüýþýúþþúþýü ýüýûýøþûûüüýþýþþýúþûûùúþüýþûþþþþýýþúþþþüúüü þûüüøûûýþ üüþþþþùþûþûüýûýüüþúûüúûüüûþùö þùûýýüûýþüþûýûþýýýýúþýýýüþþùüúýþýù úøûúüüþþùýýþþýùþþúþüûýýûýýþüþýüûþþþþüüþþþþýýüýüþýúûþþþýýý ûûúþýþüû øýüýþøüþúþùùüýþþ ûýþüüûùúøþüýüüýýþþýûûþýýûýü ýûüûþüýöüüûùþøþùúýüöþþýû ýýüûþþýüþû ùþþûýüýúûþúûüþþþþþü þýüþýûû÷þûüýýýûþýýùüù úýýþýþüýýüúýüýùþüùþøþýýûþøýùþüüþþûüýþþýýú÷þþûþþûþùýúýþýúûþþûüþüþþþ÷þýúúûüûùúúþüúýúýýüüþúýüþúþûþýü÷úþþûþü ûþúúýþýøýþûýûþùþûþýþøþüüþûýûûýýüøþýûûþýþùûýùûýýùýýþüýýüù ýýþþýüûüýýþûûüþúûüüþþþþüú þ ûøûüýþüüüþ üþýüþþûþýþùú üûýþýýü ûüýüúûûúýûþúüøýøþùü þüýýþþýýúüýþýþûùýú þü÷þþþýûýþþýúøüýöûþüýûý üýýýýýøúüûþþþþüúþøûùüüüýþ ù÷ûüþùýüùý ýûúûùùûú þýþûüüöûþüùùùûþùùùüþúúýýþþúþüþûþû÷üþüùþþöýüþüþûüýúþúþýùûüýüüþþ ùþýýþþû÷þþýúþþùùùþýþþüûûúûýù÷üýýþýùüþþýüùþúúýþ ýþþøýûýýþúþþýü üþþúþüúþþûþýýýþþüùý ûþøþýüþüùûûþüüúýþýþ þûûþûùýýúþþùú þøþýþûü þþýþýþúüýý úþþ üþý ûúþ ùüüûûþûýþþûþþüýüûüúþúüûþþüþûþüúýøûýúûýþü÷ýþý ûúûúûøûýúýüûûüýýýüüýþþùúþþ ýþùýþ þùøüùüüúþüþúüûüøüýüù úüþúþý ÷ûüûýý÷ýúûûüùýûþûüúýýû÷þùûûþþûúþûûþûý øûýýúýþøýüþü ûþþþþüþüüöþýúüþþýýúøþýþüüùûûþûüüüüüüþûüþýþúûúý úýýþ÷ý ûùþûþýüûþüüýü ýüýûýüøüþýüüüý ýüúýþý üþüùüýýúûøýþúúüüþøøýýûúüýúþýýûûþþýûüþûûûüüþüþûýûûþùýùýýúýþüþýþúûüýýþþþýùúøþûúþû þþýþøýþýýùúüûüüüüýùýüüþúüúüý üýúþþúûùþþüûýüýýýüû ýúþùýüûþýûùúýúúûþúþùýþûüûþý ýûþùþþûþýûûþþþýûþûüýýüøûüøúþûýþúúýûþûýüûùüýþüüþüþüûüüüøùûüûüüùüýû÷þüúþùþý üüýüýüýüúýûþüýûþøûýþüþþý÷ûûþýþþýüûþûüýýü ýüûþøþýþúúüüûþþøþþýüþþüþþùýü ûüüýüüýûüûøþüþþü÷ùûüþýùþüüüüþþ üýúýûüþýýýùúúþþýüýüüúöüüþþýûöþúüþû üþþ ûúüûúüüûûúüýúüýûýúþûúþþýõþüüþýöúúþüüüýýûþþúùüüüùþüýþþþýûüþýþüúûùûûûýý þþüüüþøýýøûýýý õüþþþþûýýøü÷ûúþúýüüþýþýþýúûüûýþþûøýþüýüúúýýýýúùýþþöüüûûþü ýþýýüþüþüúþþûüúüýûþúûüýýúýýþúþþüýýúþûùýþþþ ûüùþùýüþ÷ýøûúúûþûúúýþþþûüýþûþûþûýùþüüýûþüøþúþýûýüúýüùýúþûþüýùøüûýúüüþþ þûþüûýûúþø÷üøþûýüýüýüýþýýþþúþýþýüûûüüùûöþöùüùþùýýûûûýýýùýþü÷þüûþþþþýüûúüûûúþþüøþýüþýüþþûùûü ýýþùúüþþþþ úûýýúýøþýþþýûù üûþ þùýýüþûúýûýüþûþþþýýøþþþúüüþûþûþûþýþùþúþýþúûýüþýýþþ ýù ýþýúþþûûüúþùþúúùþþþú ýùùþøùúþýýúþýüüþûúøüüùþúúüýþü ûýûþýüþþýþüþþþþûüýþýþýýýúýü öýüýøþýýûúþúþýýûýùùýûúûúúþþýþþýûúþþûüúþýûþøýþüùýûüý ûýûýþþþ þþýûþþýüùþýüþýøúþúüûþüüþýùüþùþúûúþþýúþü÷þþ ýüúüöýþûþþüþýöûüþü ÷ý üùüþþýüýý ýúýûþúùûþûþýüýýþýøþýûþüþþüøüùúüýþþþýüþþùýýüýþþõ þûúþþþüýýýþûüþüýüüüûýøùüüýøýúüýþýýü÷ýü üþúüùþüúûþûþøûþýûþüýþûýúþþüû ýýöùúüýþþþøüþýôþþýøþ÷üøüûþùùýüúþþþûýùü üþþüýýýýýþüüüþûüþüþýýúüþþýýúþüþýüþúýûûüýüýýýüüüúúþûûúþüüüýýûýýúþýûûüùùþþýýýýúþü÷ûþûþüþþþúûüýúûüüýþýûþþúýþúùûþýüþüýûþ þûûùþþúþýþþûûûû÷þþþùüü ýûùþþþüþûýüúüþþþþûþüþýýùøúû ýþúýüýõþüûüûúûþõûüþùüýüüùõøýýþüþþûýýþûúüþúý ÷ûüýüýúûþüþ þûüøþþúþüýüýûøü þþþýþüýþþýþüúüûýýþüüþþýýüûù þüþüûùúþýþþüýüþýýýþýýýúýþúúýýûüþûýýûþýüýûúþúùùüûúüýüüõùþ þ ýýþýü üýûýþùüþýùýþøüøúþþ üùúüþûýûøþþýþþüþýùþýùýù÷þýýúúüøþþþýþþýü þüüûüùþùþþúýúþúþþúýþüþýþûûþþüüþþýüúûþúþüûýýüþýýýýü úúýüüøþþýýþúýþýùýüýýûúûþüýþüúþúþþþûýûúüþýþüüüüüýþüùþûüþþúûýýüþþýþøüþþûþýùøýýþýýûþþýü ÷ ýþ ûüý÷þýùùþþüüüþýûþýûþýû÷þ þüþüüüýû÷üþüúûüüþþþùþ úú ùúþþþ üþùùúü÷øþý üþýúûûüúúûþýýþûþýþýøþýüþýýúýýüþþüûûþüýýþüýþûýþûüûýþýýùþùýúúýþúýüùúüûúþýöýýýù ûýýýþýþùûþýüøþûúüû þüþûþþýþúûûþûþþþýþûý üùþúþöþûþþþûýüý üûüù üþ þüüûþüþþùþúþüýþúýüýüú÷ùüùþûüýùûüûü ùýûúüþüúþýûþþúþûûüþüüýýûüþûþýþùþýúúþûùøüýþþ þûýúýýøþýúüýþþýýüýýþûûúþüùûþüýþúýûøþýýûýúþüþöúûúþüþüýúúýþüúüüûúýþûþüþþý ýøýþýþþþþùýûüüüüüýýùûüöùüúûúþþþýýûþþýùþüþûþýüûýûûùùýüùüþüøþúýúüüúûýþþýýýüýþýýþþü ýûúúüþþýýûûþýüýüøþýýùúýýûúþûþûþýþûþýúöþüûýøýýýúþþýûüþûüûþþþûú÷þþþøþûüþýþûþüüûýøýúüü ýþýûþûüûûþýýþþùþüüþùüýüúþöüøüýþýüùþýüþúûþüü öûþüýûþ÷þùùýþþþûþýüùýýøûû þýùýýþûþþýþüûùü þûýþùþýûþ ýþ ûúúüùüýþüþüüüþüüþþüüýþþýõýþúýþþùùý÷üúýýþûúúýüþþûüþûûýþûýþøþúüùýýþþýýüýþþþþûøüûýúýø ýþþþüü üþüù üþýþýûüþûúþýûüúüþýýþùüýþþûùýþüüúþûúý÷þûûþùúûþþúúýþþûþýúýûûüýýþý úüýþúúüüþþ÷üúûùüüûþþþþüúûüúùüþýúýþûüýýýþþþüüúþùýûýûýþþüùþüþþþþøþûýþýþû÷úýýûüüýýþüûýûüý÷ûüýúûüýý ýøüû÷þýúþþþûûüþûüûûýþþýûþþûüþûüúþúüþ ûþùûþüýýþýüþýüüúþùüùþüüþüþþýûþýýúþüüûýúýþ üûþøúýþýý þýûýøýùýþþþùþýûþüýü þü  ýþýþúú üúýüýüþþýüýýýü÷ýý ýûýþüüûýüûþûüýþýùýüýþþü þúüþþûúùüþýþýúýýûûþþýüýûþøúüùûþýý øùü þûþüúûýýùþþùýøýüùûýýýýþûýùúûüþùþþúý ûþþûýûùûûýüûùþúþýù þúþøûûþüü þüþüýýüýþþûüýüþþýüúþýüüúûûþ÷þúýþüýüþüúþþ÷ûýýûþûýþüúþ þûüþþûýþþ ùþû øùþûþüùöþþüüûýùüýüøúüýûþ þüûúýüþþýûþüýýþýýùûþþþüýüþýûýþýüýýúûûüýþøüýûýþýþúýþüúúýýüþ þþþüýýøüûþþþûýøþýþüüûýþûýûøüûúýüýüûùúüþþüûýûûþý÷þþýüýúýþýýþþþüýþþþûûþþüüþüûúþþúü  þúþþýýþúþýúþþüýþúüûþþúüþý þýúýúþþùýýýþûýø ûùþûþý÷üüúúýýüùøøúüýþüüþ ûûþúüûýú÷úýþýþüþûüýýþúûþþýþüüþþù ýþýþýûûûþýþ÷üþùüüüýýüüûþþýûüøýþûþýýúûüý ýý ùý ýþþþýýùûüûùûýúýþûüþýøüýúú ýýü þüù÷üùþþúüþ ýþúöüþýüûþþúþüúýþþûúüüþùýùþýþûþúüþþüüý þû  ýüûþþýþùýüýû ú÷ýýû üþûúþ÷þüúþø þ÷ýüûüüý÷þþúú÷ûýý÷ùüýýøþûúùþüþüûþûûýüüûûüüýüüýùûüùûþûþþýüüü ýþúýûþþûû ýýüýüûýøþþýüûøþüüý ýþþüûüþýüûýþùûý÷ùøþúúûýýþüþùýüþþþúùýüýþüþùþþüþþþüþüüþýøüþüýü ûý þûöùþþýüüýüþþþûûþýûúþüþüýþüüýûüüþùýüúüûþüûþþûøûûùüýûúýûþüýûþüþüý þúüûøþ úù þý þùüýûýüúýûüþþýþûþúüýüþüûøþúþþþýúþþ þûþýù÷ùþýøþýû ýüþüýþüüûýýûüþþýúýûýþüúûýüþþþüüûþùûþüþýýúþýûþýþ ýüþûþûûúüþþýýýüûþûüüüþþýúþûøúýýýþþþ þøýúû÷üüüûúüüýûüüûûûüùúþü ýøûûûþûüþýþúùþþûþûúþüþýûýþý ýýüýúýþüþþýýüþþúûúûúúýûü ýýûýýûþýùýþûúüüþþüýþø þúþþþþýýýûýþþùþþûþûüüýüûúþüüüûþüûþûþüüþýûýþ üùþûþý ÷þýþøüýüûýþýýýù ü÷üýþýùþýùýûýþþüúü÷þûûþýûýýþüþüüüþýþ÷üþþþýüüþûùýúþûùüúýýýüûþþýüøüüûûüúý÷þöüþþûþþüû ûþüúüþþüþúûýüþýýýüý þûüþýþýûûýüýüûûý þþûúüü ûýþúþýþýþøüþ ûýüüüüýüýü þýýýþþþýûýþýûüûý üýýûûýþúüùýüúþüùüùýýùþýþúýýüþûüûýûøüüþüþûýúþøûýüýþýþ ûüüþüýþúýüûûüúüýþýýýûþýøþûûþüüýþûþûþüýýþýùýüüúþþý÷þúúþüüüúùýúýþüúþüýüýþüüúýþúþöýûüüøüþýùöý ýúûûûýýþøýûüûþþþ þþùýúýüþýþþþþþüýþùüþøþüýý÷þþüøüþýú þýüýþûþþþýüýýþ SHAR_EOF fi # end of overwriting check if test -f 'serial-lfg.gif' then echo shar: will not over-write existing file "'serial-lfg.gif'" else cat << "SHAR_EOF" > 'serial-lfg.gif' GIF87aô óóóôôôõõõööö÷÷÷øøøùùùúúúûûûüüüýýýþþþ,þ ÀbgÃtxÞ˜ ×°q^‚—'  … IñÒh†Ÿà@" € 9l4V@‡0È`™jSØ‚?OÍ¥ *ÊEÐp6#PpX?3n?&E8$"[U jb 9X–eŽeg& 9$Uq6C$X@ »7¹#Rel`pS±À•º¼`‚Z̦E#j‚gEƒrf¤(paÝ,?Jñ-ZÉ'¾xÄäªN‚Aß8ä8¡fD‡kg†ìÒ—cE‰’UF„%Ñ]†$à†„ O•k¹L0Å:óÐÆ•ˆW>m‹©AÆÇæY`æLǶ"cn—¦ˆ“Y,A2U@•Û h©AÐ-íÉHr¤Ž˜Ö‚^”‘*¨5ÍH Œò Õq¢AHMþTÆy" ¼†€JÄV›3Ä6 n8c q !¬L%J)€ñƒ)Ú(ô„3&øôB“WJ„”â[ÐÁ àd1dC €rR HU€ #0èA‘ØPÐC²"ТÌ:b˜ŽX¦YF¹lT„£œ0D/XLœG+’á mŠ#¶ 1ÀM)@’V tPäIYÐ^¹¢fb©‘g ¼L”“.Ÿ•¤×í…‚=QÇ7è´àžMu€ÂCråV,YÚ6ÀÙ°_cðCR @‰¨Y€9øÁ-´P S:¼˜•Tþí"‡3Ž0£¸â•-ë4Æ:TPˆ§IncDb0B2Òˆ\~PbiªXŠ…Pøˆ›ŸJ 0'!¶]+\)ŠmóœgB=;ÅQÅE!ËC;ÉtF; ìÂQ²Q¬X&R¦(CwÐB§¡ñšŽ€ÁE=E³¸­ÑiÁP^ÔúœÀu¶tpAgͩУæéCÚøì†fB Á#O|G­xkƇ6\K(jÄkÎLƃV,p€\p€Xð}´Ç@zP"‡–àÕm¹¼¦áÃ0 ö@\½‘B)8˜¢ÏþLNm îô¹ïkÑqYäêã|)@–ö>üms€·„¬  (SÁQ8 EýKLñÉg^`‹{¸G°²H ðBxIdž©Î0´¬$o*^ø@ŽF‰UdàB[X §‡@ÇS›bXbÓ’cqè1Qžþ$ T!DÈ‚4$¦ÃYâö!a-:€”:ƒjþþ†,éC8r+H.HÇ!Pqezû ƒ„…Žfƒ $E0dB4TbpÛ`q ødAÛMD@åÂ?8î:AÉ´(,=ˆÅ:P5Èdí™Ø ”@“AE*jˆÂu,õ½@Á#% Vl!‡GLoŽùÂ=La‰/xÂ2*Ú…âæQˆÿÜ„‹DFF–€B4Ù_™2 ‘:l`:Â^Õ”u飖eX¢W0äÎlaˆˆ¦l5,ø‚èÅêæ±±AH0 Àd@d`OføÄ7r¨Ht Tqb?‘RÅó øàŠ<ÍðJÈÅGç@ŠþŽ¶‚"”/ɃBS+‰h…|™¨Â Ù…‡˜„–ExüLŽ0iJñ¡ ú‰5ÂÈÀµÄH4B9ŒÉ"s•¬´8U©ùÅ9‚¥„fP@ØB@>䮣 hCl°#ÓÞE50‡RTp!Gñ©Q »†'ô‰¦[ÓÉ V*ƒp& ïªSê%@S¤ †Qáˆvš'WѤ9ú(jr Y©e‹)mÈ@Ù%H4¬ˆ‚HtÜmÁžP€h|°‚Äç* ¡¸â†ò,(sKFuÖGDv*É;ZM÷ƒÂÀç›HɆ$¦ºðM3ÓcíUþl³.ò5³4áŽ0[<Áf6m5Ќـ@¤,Pa¨À²Ñ89$7žÏN,¹©Äy²ªTï"%’8q#¶èœÇ?R‰ ÍÛ§×N'0TÜ,>8ÏX‰íÆáttb ®¢V»¹nsø?¢Ð¸:JUª ÈF œå‚s0 áÊ®@QÂhu¶o%ݯúW„:áò»PA„õËhÁ‹ÌŸêä›l€E ®W¢F ™Qÿ¼@‰ED¿!Bë2½´æ§ž:L4ฅÂø#ÃF…˜´Ổÿá€Ür`äjçva‹xí±H¨Ìx+;ƒ¢þ´ß$C&ÃF…¤Zh™À&1Ö°.a©â ¨/K)Åã_çÈÐlµkQÌú´(Äqj=Pö"™FtÇJE$ ‘L™¼kk:° €$±sôjî•w/P¤£Ñ¸Åûù„#TòÑ Ñ÷6‹èõôEUC¤¥£‰Dv‰«á5=¸v%L0¨£Îe"¹ UP† Ÿ«æhCic$k»¨‹Áh¼&[x¨õG0®KÓ²tÿ ëÅ:‘/ÛÆ Rr$ð8 ]DAAW¶vÌÌ2àQõ÷Þ,cr«_à ¹±è@±±H„(€ÂZ4°M?~¡þŒE•e F¨”¥Ôv K‘å6Q¡¬°Â2¾<Á>÷@ŒÅ )…ˆòe"’Ô‚z¦ÇÅ]°y¬7`–!xpEÈíœlš.0›"¸¤‰ëš eó©ë4)Z}®ÐbO=†5äÈPrQ‚µ«Å€×’(ÄM½hw3Þ½MV‡ ±)G'@@Yjó™ •n" 6ÌôÁG[` Ñù1ø»N€Ú4ÅGüHk+2œ€!‚ ?hÀCé’¯˜î %§ÊŒ\ëI58UÖ‚¢J°Ÿ›p(YHKÆò/Ñ$Fž’•é•‘§I8C}€`SCÏýiþV,دC–Æ ¦À€é¾„þ‹•Ø&ù´NeòU@0|E }Ç¡QqT:º1+§pMa1( gç<Ž°³–À$ú#v3B0@Ð!¢À2 `aHb°H`kO‘ 2 $DnÑcc‰2=Ö‡ÂbðòN%#QB »ãÛ`NCÃ!´‡ÔõU7jc·Å+È >àVà³9–2Txák…°Jþ„’EµÑ"&€,E ð QÐ]­Ô±À-° µE° ‘—½3=fð*à ž@ç#=X` ¢ $dcü°Byó eñ"£s$ëÀcþ NT ² ÔÄZP'ÐBÁ86°"S*ö%Ç"o(ØÉõ „ç T³pê÷Y2(£QP ø AµH×s+&ö” ÍÅ CpTUáĪUÈÂ=öÀf!§¢gJ=!PAÕ#Š"»Ð1Óñ1©dOC& k”à3HbPwÃ9e_ ]øs›O©`†è`ƒc°+A°2c`%§8v ² ²e.t<š¢RàÁ ¬7Γ â=€ PM&˜U“@ºˆ%øò±D¹óx3l'Á ’¡+F0>”%;.]cŸ¥"þ›´ PT$Ȩ²qÐéçƒ2CÀ£Àõ *)&Ã_Yõ A&XµQ Ò“/à(ƒ;Ø°_ÈrW‘‘ž#­T o8ú–K`§3ÑKCB) pPKV ;@3@Ãd "¹bE¢Wÿ\Å5%â á@‡õ¢g„iÑž€‚¿h¨B&h£†¨9BB=÷Là`%ȧD¦Qþ%TzàOjóI‡U&1‡ÑÓ (P/"ð(àq;°nà#A÷Já&qP_“;TlõR·Õqä&$“znv}' vJHX2-Öñ ŠÒQ(°O! ûPKbb ) lFR±Ep­À£'pTëpyu|* CðCgà&3lÝV‹ÿXA˜µÇ2Ìq=o´yâ$Gwz#+ Qµ"£Pâ*|ñe vrsSR¤o0 üÀ÷H…v² A¾Wì¢RÀX¸‡áDrRñ¡8G6al€p;w°DÿahÂC5)DÐ ˜þtNÉ o°Ž¡A&Õ´]¬g³¸Ô Cð)¡(1nó”9ð<ó“ çW¤ÒxOc“%a~ZÐ%0T%ä3J úY%t>àNX¥¹¢kh¡ˆåDnaRl@ ³ ø×)DYµ ʶ:cpÍD¿ð‡ìcPS±yx°â4}ˆ;ŸÐLlä©£Û¢Ç/Ž0¨£~KpSer0TÂ7WߤUE)×¢ 9²:ôê ¶yîµ4b@QZþÄ+² ž$Q¢`³ Ná“%–Éï€2óCl¦ü ®XÀ7þÙE!NбÌ6(¤ø#ÿz!2º}ÀW+»‚gp!$046vs`ñ^QB‡Ò×Öd ¨)RÂÑ ª7 )âb$$ ÈQ+Ë 1DP¸‰ AG=‚52Ä"¡ð’4 ´„æ°›-¡zT 9pC#2êº!Ó×¹™‹ õÐ0 \A+ÐÚuZú¡zd¡G§–5"p=úà<šro{8ptq Te"PôEXõ¨ «ß 3QRüÏF7d™(–`Jó0 €i,IjC‘0VµºÓ 1£€±•¨(¶I8g0!AWþnP$”€ R„ q2XiÚ=Tc)EbG ïÕb›%‹!iâšU  ÓÓ³Àb6Ú/äŽr.Å—„«1Z”(dOÀPÕä# !|Ã!QÊf.‚4Rî…ˆCs=’"׈·•’Q6á_BP`ds¥[AÀ Ó#¿˜…1ZP‚C%á(rC¢ö¼V3ÂŽ#_v9³„/¢"»º]t’´ 1@›6dð Ò 7š1þ` ‹Ÿ vK¸ìRš¾¦ÒbU%›ÓXÚð4å ÙY"“U*X÷˽8¡z4–Ú0VìþÀƒ×‚q­ Z`QÆR5¯f —v>0)½2eMº zz`zðEÏ:€Úw‰Eê–âLtQ )tHq0!-CnÅL ¦ÁDØA}Ç 8 Õ"'Ðv ¡?‰ 6–L%Â4é'ƒÒ Ü2„!ª6)p5@HK#80\•Ò ´pÈÿÚZ‚à­¡¬Tsqî",Ñ"(£b¯(.`)bálWyЗum +Yå ,"Ì0,ç)Òô¹t5[`N?zG ð3#• 9üuçäÏ[8Ðç@[’1¶»bžoQë#‰Ñ v@U€,…’ kôþù‰BVU“"DtC2!Òè,:°;º4ïó`È‚›¡¤r¦qfÊ# pÖÔ2 Ž!†u/…°f—¥Xa’Q€r†=0jÀñŽði‘Pš¸Â)ÝJ³ö'+$ÒI¤Ÿ©ñ3OT QTb—}|SCÔú«l2t ÿè­‚à±±‚ Z&E”H›pÌ6š” ášN‚=÷ ö#"íC.¯ARM­P¸öâ!§0û›¥ý—˜p~(ãSÛë I>Œ²¦mÁž ^0@Ã:[#–õP7R°~ÉSÍ6AUÕJÎ0þV“!ŒÁ©7)T‘‹#S  W œ»%1„$¤6°l5ƒ…YY¤B¹1X9S0q5ô¢·z$X¸PÊÐ/Þˆ´16£ýG…ÔáM,0CMÃñ#ºólâx€W³5—"`vÐV ÏÆ…ïáDßt1` ,4 a ‚X0ÙA£n&Uá„=€šÖÚ½üÓÓqpŒ‘#dÇi4‡f@Æ[˜00¢¸º@J jxQ”THI¥ i`-ûÙâ²ÃA ÐYµòm/Yn«ñH÷Â?×%üI•Â_c &áÅ`nFâ ?°sS<¥ªÂ}áôÃ8þ‚·L4çE E¿d¼†Ã %c¡­i! \ZAleÝÀIïSÅôÇ4àIÆho1Ð"Ü2š,Q²äm6ÁPZÐ'SZžüPš|â(»0Â#|Õ¼b'›A wq<ÿ#|¢¬ðÍH|;¶B±ñ4Ï>ÖG·ˆÁE™a†þ±…E¯ Δ"ÒKÇå35¥ë;<ÐëNQÅþ.¥0}Î W´½mm[>fæ²¢¼R+dU à‰DhÛ†z@à Àt@̳  €aà¤6œÂî¦44eDÐ5ôt4$ƒ@3A¨f `0 yªJàA °œŽÔ³IÏôÍÂÁ[–MÇÎßN†R‹ÁßÐQ‰@ÁE‡@^‹\@AJ¦ÞOf¨À…”À,ÀE@$cä ƮΚß‘@ïÌŽFV @@â À@F‡Q‡Z,3‚ËM(‡!´‡Á”&@ÆÍ/Mèôy¹ŽÍ‡ùíŒ< ’[FA†5”Bí9¶@‹5´H`þC‡Ÿœ¼i1¤”5%(ŽÚ0€š;eýºÕjCMKÈESQ€HÎÌìy”L‡C}’¸CTš,<™EÀâ#”F…â„°Ue}¬™º³F7–ØÓ%"= ñC€ÒÃF­ÑpëÃ4ñt0…ÅÈmHÖí€a©8ÄÐ(À£\ÏHÔ’•Ž_}Ô¹ñˆèžW‹¸ã% \Áê`¡ ­ÕÐC 4˜:œIÛž;¬¤y¥"]w4Ðè4ƒƒ‚· åy8q <Ȩ@a—D¤€à‘½/:2CMê[ðDêp…þQ‡°ðã¸er6hÎJ ÚÔÈŽ>) `df`;\ÜÀŸòB)wÔDH¤AØ#¿à¡N B  5<1LvRd•ÂˆÂP äL```@¼4À 9QÝÄ"PÒÒuÅ Ï$²VDðt¢Â6Äf`1ÄG’4ÎÔ±“H>Ò-ç½Ä -iÐâ)×p±N™iôøŒ¢¬ †`Ñ!λÕÐC*)Σ\\!š/fÒèW—èðÒC´¹ 0Ò€™ÁP:¦b]k4ÃZ À]m(Tˆ þ¢%Ð\&…Ég2$þDF Oµƒ£ñÑ@Iÿi‘‹BšÉ‘Hc rAeEÄ-©¬ð êðs `A—Ž"È¡Æ% èhOu:Q:ŽÂ €@¬Bt§ÊôrÊS,DA®Ý@Ž34“e²î±W st@Æ ±¸ÎÁÉx•dÞÕè2¿¬ mG„CM – ±æ¤ïÞæ^AÓ¸áQFI‘d&êŒÓ¡”ÌêCôòFÔ=aR9çÑ /_rs ^üñ¥$Æ}æD8I¡i0™C‘¶Ž#Ô|®™v˜ ‚£µÌܶ9dÔu¥Gì¦Æý^Ð<èu”|i¼Tej]`ÏþîV b tµ¡áÐÕ)$à!¡ç^++QMÔ˜IBô‚Õ”ÿæA$9 ëPÞШk*”àKý¡0Z§îWgîÉ%¾6úB‘·Pá ek]†õ ˜<þy”>vÀ&Ç#ÊÆÅs9¥J dEƒW¬«' }b;mÐL’Y ðCW NÜ,¿7vFÅœÁƒ u‹´AÅl°@5ÜâÐÐ¥É+*HƒXêdETÛ€Hó¨/…uBÀÊÌa¶0°ŽwY¸ƒ'†°ud®€ð×|Ô‡!ÄcA ’»V¸§£Ù Ñ©þîHθ/C©gÔ¢ º Ž’3„< B€ØÁ¤Á´-xÍÐÀÔ€ ØÂA¾‚ %Ð=f¹L(¨æ,óRqS">A-‡øúÃxDŠ >EFß,fb`ˆ/ÅŽ‚ÈI,4"¤o“_¢Ã-”ò wÍðþ!;yJ¸âP}ø:XIC",ð¥Î•Å2M;ÀP‚NgA+±1í$¥Aâh+”ºC8@†F@]DÙA]`†r(`TÓbìêðC BI28 9`¦ÄˆÐm(ABpÀ-, K j P¼A xI]ö˜á%…ìÑQªôÌă$ªÃ”Žaš¿l2Hp€®Q²Š€¬lÐßG¶ ÓÉ4YñZ ¸/AŠjÄ –GŒ4“€€í@BÉ,‚˜•{ƒ›Š;Øà 8Ū–}ÝÀg¿@BœNtiPëK踄tÜI˜Ù ù–xt˜,¡þ:…þ–`G‰iìG‚ƒ›µ…jõÐÈôpé3dìÇVÔ"‹=ÀCGÈž˜€ “7iñKW™ð"U§¨t ”iº€dxŠ‘Ð lR‘-ÇIròDªäÇͱOÙiä@õ&š &¢ Å)Ó€.4çFq •Ú®„||ZšÁÿ|(®|˜A"X‡iÔá±ÓJ>Á.­=ÅAÈÄrÅâ© 6˜AlÀ+FŒ"üñÈR+3Ç å°ûSa„̯@¸´þTÍ„$ =A©ÍnfÈŸ'~è`]*èß×H/ ND³ ¬…I°NüA÷¸Æ+„ƒØ,RBÍÂU Î,™wðNXlÖ\Ã-ôK• ¢MÇ-ˆ:üµØÝ ……„ÔïÆ71Qm¨ÌZêýN£Ð °ÅÑÝ@MA +$ƒ²ˆÉ%¸“Ž¨˜C\D8(\3ÉÁ¶ä%0XwTI@ÕÅoÍIÈ!ΗX ÈLÍó¼‹H(š¬”Q[EEÅdÇข~]ÄC Àˆ%˜¯0|ñ€:xJí€pøH?ÐÇT _¼5¤!Ì ¨4‹(8ÊÄ´E)¥Â¸mQ%dþ™4Uêˆ`•ì¼éDÖ¤‰¨ÕU$ü„$"ëýÖ5|EÁÔGÌ”~ýÔnÐÅ(œA&X€Qh‡¢Íƒ|PX]FÎœÛ)´Òý<ÇÇ°›µA"¨ÅÒ°ÁG­AŽùJeÐhÁfO¥¥C(€;OãÍΑPAøÞ‘LC¬ Iˆ?˜ß8$ÒSî|IcTK­`D´ŽMUqvìïtCâ@Ô¤ˆI¯$ŒC¼‰*}ÇhÀ›xʶüVHDÑ%l $"0ÃÓ¡^8ÁQÝo‰N¬TÆ)ÂlŠ9°M«É‰(Ä9¨ŒAÅàNdè <\œPV%þN !BŸ­Š$¨ŒCžŸ±]È‘è…*8‰íÐB ,D ahÓ8D• @Ž¥"” ´…˜@ Jq(ŒˆLy4{Œß €Tv<žÿH@µüpý÷Àƒ$hE£4F:¨ÐhÁZàúù…YTa\°×­- Kd…cYTmÕl,Oø\Ã[ðÀáŒX¨´@ ÐN<@Œƒ¯ÄgÕÑ@„ˆ} H0œ@êüBï9„CVÛ`…þ´œ=¡tHO]@ËmÀ ѸÃ@2‚xÂ(DH¶€tˆb„ä]HF9<Ã@§Œ\À™0eíPKIä&˜\LÇé@þ‰ä©œ L @èÄ:¹ÇB} Và'Õ›#X×’ A@"BPÈÙå~—ç4JýdɽHP&í”Ô´ã(…mE3}‚yX D€-°Ax„B@‰„ô€ [0lÃ. @D·°MÐ,#öCAßïdÆi‰t° %fd' ÙµÁÐÂWÌþ£x4î]^©äCSÌ• 0A p |tÃÜ×gˆÌˆü@ÙtbM`•¹Àt‰VɓņB„ ÍL´¦žE%:ÁZ€Ðq´Àˆð€l”  ¸¤ƒˆSuD™½@P²”ÈAÀåYa½X™†¡ÂʦN¼ü‡*ÌÀŽ5ž ˜Ït4Çgèå줄=Pa‰Ìe•Ì×10‘Ï ÂnP¨ “‚Q.ÕˆŒ(ú `LÌÀ[0„ ØÃA߃ ¡†`P"ˆ…ˆ«ó½ÁnbKÂÒÀ ¤J€B`01Da9œÅ* PM8A<ÔtòÝÁA­ iŽ…þp¤æ‰IÀÕÖ\ȘL#Rë…PaT²@è4 ]XÆš„H&üÀœÂ6À ÐÎ*Ö\EQê(—<`ôÀýtš·•(¼ÄlÎÓ”ŽE(ÉmÜ ¨xU9‚44C, „S 4wZQ ìW±Ä–Á²êÏQ4 £ÕKV0I’‰ $%Ž}$€ZEe@3xT– Á3\Ý‹Ia®,œYA^ÙÆ'4I üíœÀ .A<±Ã.ÍA¬@hG,uÁäm°@*àée ‰€Ò ÝÂ\ÎVˆÎ/4Ã<¹Èª(™™”ÕXºAe ÔóÌDXØáT,8-²”ä˜DyYX%ÂW(„ìëÛOðH ¨§x4ì%(þ(¨ÐJ)^PKìÁ¶S…úܦӼתÙdÆ«¹€°zn’7„f@ÌѶH-i–PÈĤÍNÄÏ~Â4„‹˜aîÄC‹E_0*$`V}ò3ÒÜšÆ õΠ=Aá˜Ã¨Ñ®vL‹ÆÐg`^”¤qð>H­Üí2jÎDò<ST‚òÛ^B’\#\*lB3¤t4Y=‰¸È‹ÌÂÄuNÑ¡ßöuår„Sµ‡Ì‚c±lQËu¨i¼œW‚I+ÕÎä˜!&ÅË@~×+ÛE^™Ý¼¤Í˜î0¼ô@7,Ü-m… Å[²À ”Itª þ/|K4Á.4Í€ùà ½xGÛ:Úƒ¸Xkädf0_W  Jœ€Òd@\ÍðiO0`Iðƒ4ä€ḧ97Ô…,¼@­pÊM‘qVdð{Šõ׆.™×$@˜Iâýœ®Zv„P£ˆX«€ÁòEËEVâU2ç¢ØlHÉIØÕÕ(MÁEŠF42pƒ4€Cx]ŒG´ä·U¯ÝÆKœQL`Ñy”|à«hP’âCW¼Ec{ÄìLA­ÙMJ*r×S|‡&‘|„–9Ä!…‹,ÑfW«Ìáá.ÅÐmMÊÅZäÒRô)/gâ^^Å•þ-§mjÛÞ›±ªßeB]QG¡€о%”H Àë¬ *XÆÛVŠÞLó1RÉU´ÆL§ÂU4Í<àÞ–½‹_ÏTŒ0ãáêtÁ”§»4„S¤v Läh@jŒC±à[A„y”L¬ð’u+ÑLYWèA$$TYF­äÈIŽå@D 1ØUÄÓr ®ÄC3Sêw¸O:d ¾”ÏÒ»ìAðÄùŒbŸàHÇÅ6 i+üÖA’…ø‘¹Æ“œëu$ƒ4ÈÁÔ Yíì„WWžBŸTÏ BÛ$¬/DD‚n™¯EQíñ±€‹½Äõ¾y…e¤Cé»?‚LÑN´â­G"ÆC$W4ãRĬˆn1Äš……Ï…¹ÖGÁ#x¾ÛPÒµK\„_ÓË1ÜÄœIÁ‚`d¢_ æ-©iùYȤ@lÈÕþø_–DH@èN%ü‡ÓÁØ´{tï\ÑO½@’m´&ܦ,Ú¶ÞPÆÝÛŽ˜ŽTÌ*pBÎCLB‘Áàæ YiY>uÖ¸a=j‡(„ÐN ÔÐ÷ÉzÆN²óêð@Å@DT¾†½¬Yï5‡Ô¸|ÈÇh-j¼Æot»øˆQÐņƉ“¸†G3´À­û,ØÀW:moKCÐ<ËVØÎÆrá”ìNÜ-ƒˆ¡DF½×Œ¨Bn) mÜÁ'£9Xvï_½žYLã9D¨ðÆ“+ÈM¶'v'»†Ü`Þ3Bðñ€2 Cf=:ô™Â®w½`’Czþ‹ Ћ­^¡±TÁCdÑ ô‚_mjÑœWŠÖ6=Ä$ì]˜‹˜™ âÿÛ“àŒSbo~Ñä,Ô žtÁ† â1\ @ÈsQŒö6À6²ÎÅã!t'ƒM5g AÕƒX"ÃU’G€œµ\¶AÇ£ÉA¥%ц³4%=§6`ðÆ!Àa°´ÕpС$ÈåÁ'@0€ÖqP—TS$¡ÙŠ¨„Ãäá£ÀÀô2PÐcó°‘+ТQ4²J°˜Ë”‘0²F3àGâdHpz#ÕADlãMLºpr@j’!ÈeБ~óWB(þ’þjS  Ñ“PC­C‹h–„†!Æm¸zØ!ƒ€…¸É dRL60ðÀŽoéZ#` Th 8pŠZ ꘼‘©YÅ He80¢‚…©l,¡BN91§^t™AcÃ…à„ª¢!hªKðŒè1#Ãj>‚T°æO:agdpàâd Þª0Ç¡¡kLjèÛçLbZ|Ô `M„\Òˆ¹á0Xª·"Êâ­4ãµ,g âöÚ OÒ pØ€ã+f¿":èá¥To‹ÊPš·Œ eÀ¬À"g1¨äç¦ÊÈ(¨‰ÈÀ"!þ’‰Ô"CD6ŸÒ`‚#•;2è<çÒ*ˆ›ä|K 0I§GŽSžòw¬-Ô0L ” €؇:,´Å9„”Ù `P€Ý1ŽàA^ SÒVJy(Gi`P€‹¤±' ÀçCbîƒHy%x"Òz%€L“ÀÓCe€Ç·€FĆ‘¥’Ò×T`°#ƒ5ÖPQ‚!ÐD0h`À=§É(¹s„2»Õ$ÃBeܘ 6Ķ—!ž$bH#¼µ@€0rŸ©8áÉoƒúO4&H1ÂB²— ¥7©78uå‚ãEêŠ!€(•K6\,Q[*†Dýµ@ƒ ~ 5ˆsJ-êp¡À<:v¡$"h¥mx‰M5ÜbÍ™²Ä .°ƒL#ã?§Pu@ Õ9“e~‰Æx°ƒ#Ù¬ÛÚãÐp©°mÖlpj‚Íd\;‘´ÂPlZvǃñBJTzâV-¤’oTZ¤ñºê¡‰,—‰j B’“ 7ˆµÐT1—°_RŒ9ŠŒY™ l)Vßš¶Äµ‘áÙs ã¢üœÍ—Y ušÁŒ5e l7#C)ìªC8SP þ¸´§Îª0Ä@ê)Š¬‘H Ö˜–Q[Ùp°çùT> +WB…]|i8À*¡#'D~ñ(Å¥GÅ0K47ÄÉHÀÞ,Üfe,)@;8oDp¥šdÂ)Ý A´áÞR@ˆÌuƒKá‚;Jð6c‰.¹LŠFE¬!tV-,;ÂWõU+~H§™àrA¼Já~+Ðø,€ÞS½-ð™/_váÅð H!@¤†W¤Û‘7RU‰dÝ`vNp[”;)ù@%÷Ë’.Ð"ðÌÀE\Ù# ì¨aÐ"tÁ/Y z@¼hÔ!ˆjÁëNþAAUùa/oÕ‹åm„{ˆñ  N(‚a‚A Ô%NtA8 aT6ð„Nœ†D&˜%Ž8ïI4ƒøÁ Ä@NÞB%Î@YÐUðJŠ8àÌŒÕ&¸à-éà•¢Ìq…Þ -nŽÂ‰öä‘5úxI!:@ ¬Å¡5è(@$*ùg (H` #É († XÀ EQt¡uä‚5(ä^81›%ÄNnÉ0DQÊe)ÃŒŒ§^ÐÊ—u*àŒ¥|ƒ¤¤p ö`BUž£n Y³ëJQŠ@¤Päà)†Etþ”.ÜâìâE ô€`˜ƒWzü– h€G ý ®B†nŠ©* #HÀ€Ì`€æt#A©‹ àÁ)ìgœd AS"ÃU&ŠÕÈh`À·í œqž0@ ”º“¹èüî±<(b]²ˆjè׊š't«Cp¹F]l NhZ…ÜAÏ1Œ=âÒn6$>/ Pc•P£ 1•„N‘‰Ô 2¾0 7¤‚ NAEC(ÅU+Y—‚¥u$‚¶BFs!4Â)O™ m† ÀTZ{£¡ö£00À Ö¤…jîžï1—M4“¤¦—ÏÉž[×5‰þ7\é“Àà ŒÒ¿×†.kN(€BRA‚D†øÃBâšû­i….³0寛r àáŽRæH¦ÓY!OàÀ9(“Bè°¬x¶‹†1—å&ƒØñ6`y‚Ã$ð¹m`C> 7hÑDüC¹`­m=zŠ c*ûÓ|†“àð†A ”qŒÃ Y™n¤ú –-ÐÆRã 4‚#¼nC« Nâ›ä"aBÈ‚ *ŒÞéàY“ˆ´ˆ ¨¹œ’©rÀ™…8!1ÿsæH)Bˆëì”_î ¤¦UE)ÿ¼BÜRS=øl# x©;âd¬þ Æ¶”F‚4Àƒù©ÆF ÆWøTãln¾0Ò(âW$À ÜNL~ù(Â*£!“&Å-ýÉ£š#…Þ%FRÊÂ=ΠxÁc"Ýè`'©s›-‚rr)|#䓽³|%Ȭà"k€Ö£#v!+ôª€V™¬>fðÓh‚Œ‘Þˆ©sºŠ‘ÃyÝ£ZàuàKC&–\y;$ÜƉÁEœP}2?k×Ê„Pù">â±A>øà ‰Q>?ÑN ø2NŠ¥B3ža »ú¦r ´%d…±ƒŒÎÌlPÄ¡–³P‡|e+c0Ì-\ÀA-¤þ! =B²lF5`µF9²Æ€ÊÀ%›f ¹9CrF"v4ÍÌu°ˆ¬ÁΈUX_Õ ; ×Á-@pƒöøç‰ ^`åòF“=LÛv#`ù}µ¶u‹ï“¸‘G*ò ¤@¦;NWXá0Ùçè,/ËËq‹H…zJl¶åæ%Á ¯Kˆa˜]EÈ ˆ ‘xò7±c@€¯×=…x¶ìµ1ñ­ :G#h€j2Ÿ¥i¤N’¬ä‘ñ‹¨Îj¦ EÓ°®þèÇ%V€gê•ÇiÂeîHÅ–žFS$àÌ©©`Ïg±§y¢ê2ž1.6¤˜þ5ã²ÏW:8aeO.gYô"° è H Ã4MüNî.pyVyÑ'b¦Y¹QH¡3›‘8b+‚9èZ)msÜS € Ù"{åQ>Ð$ð¥\òB =´.\µQ&¤ÓG¬afÏQ¸` `A` 4t1 @Y§T’^JÑ{Vuˆá[%@Fƒ@b6ô.*ðet Ì'VâÞ#B ¼¡ `ö¥y€z¤ó©,ø2Jq98iÈ0˜¤X lTDh–àV=°€0“¶Bò€ƒ@%Aáê2(È)Xã)Ÿ¯¥cÑ°96W›~Ÿ°<Á2árƒ°#ÀZxWò4þA ‘UÚºpi¡\üäTóFýáU[ÁÕóU.5q Ò€3$0›\¨!X)ñ:1 “’ 6E6fÕÍ{6(}y²|DòA†ô\­ôŠ½ñ\ï” i„‘á5^€KÓˆ*ÈþÀÔ¥ Ð7…RÚJÐûøMfv¹)Žå’pÞ„n¡rB˜;”°_Õ““éE ³@œ`Ä°*1䈠3ýá7A1;7@ ±£,oS É’R‡·#\£´ä€UaòuÞyj Ò_¸AjdR~_ ã3 @8“é,ÆЉÀ"ý(³ñ%)ј)ñBw²±¯e­_Ú)ÈqV‹1KØL¥Qò4Éâˆ<‘”åóJFQ&™žk@¦õ)v˜tí!«’  2‘²º ›RcêçˆO‘$—ƒ3£PKÀVâZ Ñ · €Š5’3ÁQ4'7).ãbÍ@1¾žNþ¦Ð[EÐ-ôW`÷ã*Rþ„(«#¡p àAQy@*çÇ2]‚nÅYá6f ÑrL>"HQÀ€$±ó5¥•á2»†ò¢T 0aœ‚¤™AqR`20ÃXÕ;¼¢ZzÄ)Å_D1ëRS;âþ™àaPZB>xr%°— î3RaCÅS^º4|¶b'-9ð'– FF;ÅsŽ>eP¦Ü¶ŽÂ>ÀijgûÀRgæ´O‘O°3 Ù€v°†z DPo'àNVÌ?u@ .¢‹¸"%¢ £™]²)}á­„»¥þ#)¤Ã"ù;S`Pæuè%%qð2Á!Ô"ÔÆBÞ¶![ÐJ?c+(2.;ƒG»ªP@#><ãÆe'2wfb÷þŸchó,œ0ûX щìÀ8Ð6ÊO­‹œ;¢¬W~Q›$€ ôY '1 @‹ƒ éµB §Öd{K²m¬lx`ð%’I@ùÓ55¡SÐ e·À5¨g* LÅ“VEä¡@g†é˳5\w¿¤gDaK½Õ9=&ÿ<ç Uu0#Ñ`[ÒPqN¸ +STæâKcI@ÒJ ª[F RPEïãÑþãK\ t!,©–êõ ¥°ÂÂ.NRo1–­' p]ñ–”@"ãÒÁó\7ý…OË/Ð;/óz H·¯ÃÌ{!Jû0Z…Fn*³౧»vÏ’ áôtËee³B·…¿ãˆKq/T¶ µ*Q[)Ñ’>ã² â"(jüI¬©5êõ àFMÌ°8Ê»L-ècFALBØlà 3ðuIt8}.B$…i _Ë›Dí&º€¥£nV`U{±j#Šðae2¡ØÇ)-ûUQ·œ’aǪP‹Á?VÒCá)±±&ò@LþË'Õ4E<3öú ËR;µ¸¬7`T_Ý´ÕekU@c˜´S­qÐò +ZºQÊU<¨ÀCÝt?,i†1½5 U×Ja-[ý’%6“VQF˜w€E±ÝXSmq}Ñm+9NZ°ÄÓUñ5vÂ|Hì-ŽÐJT‘ Îfð Á±µ[€$œ¤h9¼ {f¾ë=‰L,Á=à9Ú n yƒ$’€[Zâ£Éªì–B\àä'`²Y±¤/ABÍk M;G+Æa‚b9ÌV'¯ ÈhGƒICËh65(=ÆsJ)ý±?wMþ!º¤GmFX "OÞ(JÈ‘;‚åÛ9ò·ÐÙTh ÅoD+½s¯ØñbY|ј¿J0)¤È `ÙË[îV¾»95ȯ¾.¤cYK$$¤=®Rh°äÅ|¸Ñ³Ø5ƒZÝi@Q¢ˆHÇÄþ†@AÀÌJ½ÔKÝ „™ @ÖHâ0ªÃ$b‰-@à´ŽšUÿÝé š•€‚ôÉ@!sê‰YÑà (¥ D^Œ•IªDÈÑÿl¬p!ÆÈP4YÙÔ‡š˜H´m$ÁPLIDI©‡ýÀÿ¼ Z,m fÄ Øå m䬊YÁ¼BJœ“¥8‡F="„ñtmnF…UDj6´‰¬C Þ­XF g„¡N´üîèF¤™Ä Ç,Y°Ap`Χ‡jðkȧèGbdÂdìœ.ÈÃ;dŸù2E!Â(8#þ „Ž¹@\Â0ø Ï(ÐßAŸ¼ áxÂsXkÁî0àNqÍC@r™†‘*%Á`€‰œC€èôá-ôƒ‰:xÔ#Ä}œÆ]÷(‚Uô€5øŒUà FÓZ°G÷<ì¯êDBJ@C-†FpÅÁˆ,4D~ðg"0ÏÜ |ÌMKCìGßd³»A,¸À@ X¨] À„Ä`Áh¦Ž§HD9Ʀ†”EJÍûÖš—xZJ¦… Š=TÉELV¿hèP°œîz„l\!¨oì—FBM`œÝMÓ¿Úƒ öÒ†l¤ˆ(ÂÝ~D4páþ»BD÷ ]ó™Ë#ÇOn׿""´ˆëS-ñ`\ÃÓMÂgÑJ9âhAJ A8ƒ „\@ÆŒÑD$„Í3BdÞQ —Qü€6¥„÷. 0À Ji¤FÉÍ /UPVˆ£ñL @("Á_ÔW$hÅè)IÛM\¼^ÕQ+,“z@ÇÔ+ŠÈ(ú’‚øÒ@T§”Ò]šÄª¨@¥–çØÏ`¨ÉhN@܆Cåð†“eÇ|‡l§pŒLé /<]åt ØÖ,HïÂDÿÃTȦ …RìÐ)X)± U.áx0ï© X@ªa•<ÂÒìþÌó±hBTÜ°ð€TÀ,ÖÎÂ@ÖüG¶ÎÐ <’D9Z-#†Tƒt¨Ü¥WiÀ&Ó¦ÿLWäiPŠ À‡o'æà‘:³Ø %L0ƒB£™iÚ^¾p›´b¤dhµÐJЃìqøLS£ð›ª1’ ü@+vVOÐÒ+¼ñO¼Ç‚€†5ùä]Cû¤•~ IC*€' T¢L…Thj)u½— öŽ°L›ìQ7=GEŒ×[ V $(ïPES´Ü•dyAÑMB帆 6Hoõ›àÀ‚QpÎyAIdm%KÅ>4Ú%°/Ið½AÅ ¥*¨„žàQ}þ%ÂZ„žfeF†Ni¯/Wœ\õÇH͉Z¥OUÀƒ”M‚|ýÃ^Ôk³JdnÐb9TIhäø˜ŽF„6ÍÃÄÁ‚-•ß$¦ DÓŒ²@ðû(€øÐ-)hÏȃequ L†[\‚aü¤[Á!ÙçÂS½†°¹ŒF¤Áø†Ô0²ÎZæšÕHFtþr¨ç/倽衾‚X ƒs5–DS˜Yʆ¸ó»åË@ÌÃ_½áÚ„Ã(ßkD‚hDSäÅ“ðÐPÄÔ ª¸q$Ǫ@GTrŠÈ´ BM$ò½aĈ…׉qæU9t]€N”Çiû@þ%|²½ÉÊ([aªö,8ÇMòÙVs’Û¥‰ N4CMMV…MHM¯©s ÀEôTæÅy^F >ÅŽ¸Ã’ñ’íØ›¤d¬[Õ®‚ޞň+á©ÜÿÞ7ŠÜÇÁHðu¸óêˆXX¬œ( /¼Pè,ªl— *àÇŒZËå´8㎫ÊÍëâšÊMm‹T ¢Æ^‘@XâÅsgJ3t6àrÔ‚ äÔ–™\^1Ñ[]Gž”x¼ÄC"tE8†,°ú¦F8ó*9ÇÌ •æ•P`kPJyXE ›hNMÜÞP-P@%¸Ì áxjØ.‡Úˆ‚ €]A¬¤õË|cܘ1ç ×½¢ê?€d± q$†Ç‰Pl@ lÐmÀØlPW:fÃáx6É€ ƒ(¼'#Mˆb…HÇ x:‘ò7Jx"3ýlØ-4$¼€àB¼‚ÊN\pшŽ°D°`Æ’JCöÔ“0Œœ;O< † ¨ýêDM*‹vi(ÐhÆ€-Ç<=" ‚ž7,”Ý ²ŠPØt=ñùhÇ öèX.N2˜ ²€¬;D éø%ïÀ ¦@ÚÄN,qà04Ña(¶5ûéa–G8²Û`U•Õ©›£Þ‚sž<°MÒKÎg¼:yÚ€þÔ“•JUd¼ñ€a£‘J8Àñ ÜЬå,cƒ§C²M¾H(L  ‡‰fB”$ÚÀÌ=©9$AƒÉÓ€`N¹Ñ#Àïì5œ³Ð¥ÜÞ«2èÈNƒ•?öÉp€@1"æñ´_.OÕ Æxœ) XõPÛYá$Òpš±€‘ upŽS547ƒ€ÉÃÁ5ˆ¤qÁ5Tâ…_|lŒÊ8BœpŽX@kÎÌwñ@W »0±¹âÃ3,0D&Ÿ…¢¿ð\3kÔ°Ç1¸@L`4åNÅqü Rƒ ñðäddn0ËNÉÀ¥C#pþü$$ðp…œ2H`Äð™hXä‚ G ‹å1KKíi–Ä_`øË=бFÔ1PH1QøH$ )— áÂ.ééV‡6ü°‰ˆÊ0Bm8<Á$¬!IKÙi÷',#”<3(T“`xBÀ›…~"€ƒU‘UOV@ÆB¶™æAo$àÛw8ÂF ªL¢'¢Ú¶ F $a'„½ÒB"¨Q€€(í X³ô‘Z›$öÄ("tæáGrñ3i´X•qqxpÄÑ‹hGcUºdÅ #Iå  jdp‚ìÂ7{€žjPêx)8_žM’ò6§È¥È€;I2Ž± C`O’0Ì´§(°Q‡ÆðpL"DQ€(‰Ù¸Ã?,úÅ•€¢kBŽ° ¸La"  +ˆáþŒƒ‹}t-}üDírƒàÑ6.¢Áp¼È%ðç¡~‘S´ÖoЃƥ`à €ÃÚ9P±dÅ0N´Dp©Ê™8AX2fâa‡¥ÆBR,‹RÀ%¾I ˆ ÈšP%’yò¨Ñ"@ÏQ¾qখLöˆ’ªy5²¶;Ý ‚8ç „º « SÜ`". ¤,GÐ*|`‘]ñäƒJ`ËúL «‚Ú¤TC¤Úά[«¤£"¾3ÀŠ³^€ãH‹S0BÕ*pÔlÎá渔 @«<©=ö°–'b äê€L»$‘ ü°--8Î%þ™8‚‹v‘ ·p ±ù\¥æƒÀ¼aiΰWzR‹F}¡} Ö•^Õ ¤f+¸)$7<—%S" C‘„¯|Áp´®"4NHÙ±’Ð&>)'sà“ØZ@ çlå)ÍÁð‚ã*&`ðg½E¡²Ô™xÉŽ„²H¹8D‡;द,´8¨!¶™þEZãßhh?C³Èv–ð4 <”‹:¸s–=€ K:F aÅHZîœo–°‡ív2ÉBa<íx¼Ý8m÷—¦-lºr™H@ö$¹y¨ŽÀ²1Op½˜(À-ƒdÙ§ÈÅ þ ÆItE:õ`«çFs|è¤ÊâcKtÑú²t¾Ø,” "Œ±zÙšÚx°-”Ltªªm¼kÓ‹[!£ŠÎ´|P¿Ún€@¤ §)Â™á °qÃœãBÁCXóæl[Ú(ïø'‘_p㬿ÂiÎöFlŠ‹N ð áÕt=Ó œDlWR± ó}ddGØ<ý¦sÕ¬6O¢\„¨Îê»ðq KËÀwÏ°š%•˜I ˆqmziñK÷Ìyúòö'˜Á!PXÑ®Œp_ñðØÂcVœ–tNƒI¯ÅÏj þ«äf÷)ÓÈ@Êzˆy†'ˆš@Æ<3É1§ZhžF>Ø(‚_å™âBƒia¥ÎRú†­Zs¢³imPÀ½'QTœ·þ‹®HÑÄ)ôP^"7z(æêæ~ô¶[T}ˆ&@qc#päÆ5A®AX°Ã¦W!0šÏ3C¶i¿ Ï´Y°r]p,½°“RÍ`XÃ`?<±€_R"†#IVB37!,P5@Np,ÜPLû‘'•°;5à“ Gðy@aybpL“;íÑ]ò€^vµm~’j¾ñjÁ9£_âR¢E‘&Q3  vÓ< zÀRþãsQ*æ@=´JV+¤!@&`yÚrup!ô5IÞf;0LJÀ=ô‚H¡’貂}¢8S Nን¡9xp {D"-·‘Du •€$ðh4‚5ahÎÎo*—6ñEpVbð”D± é W ÿ$ù¹õ•_@oá1‡ÑãÖX™Q~‚Ð9a€ ñðN0³3±Ÿ‘“àW/ä`Çr]•LÉ2/ÃG!:O¨wÀð¤ct½Ð(‚6@ñeóÑ|rV=æó¤""Sþ[ˆàI‰Ð“ï¡N›U p ³²4 !*~9¹Å€ò" j 6WÀ4g5æ1FÑf_Á ðG¶8€dKLÀf7*˜±][àp§!•P7aRò¶)`82g7Æð "¤.á²'nÀ%VCŒ $8rIòU^sÐ ,„S¶„¦ eJU "ÅXñ%fà=Ñ*[àÃ0[Ì~ÍÃG[ñWpËB’³O`cá°õó$XÀA‚fF;@ÀA3  *ò°FÛ6—_‰ššrK4H?T4bS6¨v‚ o7F4# /þE@,E°SŸqª4*œt,ʤ©âKôñ2š±mÖvvƒP{ QžðUbô¦=9Í°]Íó¤’~=*ÞSBð/-v“îàbÑ ±á(°ó úáK{ 9·|·é‡vÃÖC=Îdà$€TÖµs?±h&¶%P Mf6Oâ‚©ýXQÙ ‚³EhTóPŸ4Ù×@mÐcÙæPU—ø EPiqŽÀBš¡+™” r‰"#^se6æ-àרu§7ë" ÊÐO¾ˆ¢A‡}²i“ v¢­ŽwvÆj)ª%›E<)(%,‡ñþv|wæáÑ’€¤Z'wŸ„‡ ÁW{R#-áp¹¥W–…”IB_ KÎ-Á‚"î8ª[p€%J|ø7c*q&ÐVï!8Á31èÖHÎðç±È8:´¢ $9¢š³BO˜µ½“ÔÐ…’=ø*[…‚JYd"jh ôpO¦ñŒ2ËîÈS(p*Ôn°"QÂ,DÖ˜ó$B±¡pUA &¡ ðD@6«7FuÀSœA#l DXã_L° àdbr…HWw²40 ÐÃíð5é¶aöqv=¹0_‘—ww“[¯—–±«þð 1B&#v ièi‘ƒ3x¾ÃU+‚1±i¬˜ÙónÀ=VJ†"up§þGГvP$Ið Âò!4^ Q” šR¤@#(€.´Ð uÔSÊ6NòôAA¢³‹:©™F+G£’ù(1S»I´, 2  ýW;`&R¯XþëjuÓ§-(’9˜å —VU¡@}Æà?¾!:À±ËÇ"kbb^·ã‘‘i¨·†!X÷!W0y Ákº@…âh,¤„#P?ƒIƒáRlbÀ6hØ0/4ÄK­AA+}5 v1,0à¦oPq‡T 4)Ò§VAÉpn0EûwdT,``£y<± #Õ.¢0ËRY4+X£³¼s¨GÐ ªòÀôáh!ó2§ I,"Vª²bÑ!¤ ( ac›þ–ú }~ œàMˆl°Y³'# ("'r‡?ápš¤ *}Ñ\ƒz/ǘñË2fñ [á’þ¤<18€A˜ö8»¹Í /‘¶CZÁ¢jÛRpΣÛ< Bát2ç½pz!È1:$¥T-D&d`"µ  ÙŸ [ÈÁp £¸BìJ3|Ôs@»UŠ ÈpuïYGCÓ"£¿¸PÐB@&?ap…S6¢AJC4MzpÜ8À#Dú¤ºHðd´ÀFåfÒ~Ñ­–¢NÔá¿Æ+éàL²Hà ê’¡P26ö×ä±SØ % ªv11üþ¹Ö‹&ìõC›-œªq;Mªô]Ž/“®r0¹\3£É7,j÷A'Dâ²;K›-ÇN<¢dt}ô`´"0Ä!d‚ #' ŠÓƒÂIzÀÙ/PÚwò/g¡h2 dfš0˜ŒÂ84q“5ÅB¶­‰V£>àПp! ÀÞe»„ït&´ïáø%Þ- 3 G+;| saš#WWG&ú®  öq3±1ÿ`¹r¥ƒÁàØÊÅU%·–,\Sd-À{bügˆ8ô ¾X…³%Iìæ’ÇÐ[!2óà_ -5Ã@5H`bÁáþâ{”£Q•"´°[,ÀR‘Ë­ô ª`2 U!‚ƒ¥j,#+À=<5ˆHƒ sè8€ð ;Qp[%¥2 Ø;„XX±&$¦×[¬$à18›¥ºRhv&:4pjð–{¤Jš‘(@€À 0),¼#á†_ÖMd’·cvxrÓ^äÑ¿(r?£9p("€ÇÁ4ó>A–©–|à.H(«×öp4"I5 B Å‹ØDâ#_¶12cƒ^E2Âh@,êègñ RÂ¥ó‹vJ9%@| %f Ÿz¨‘’`^oú6V=þV g€ ¨QÑ!_‡Þ'aÄ5VgΕÞEÔ­¯Ø~üAî‚ôåg â#€kx…¢uÓ²npàšŠŽ÷7Þ[@“[„ã_¨ÑB¢F k"e::u|­ųDÍó3w&}ðÚ†¯p‚äl6¹vOì u°Ð@O$’ O°9º#ï¼fTèßÆÛ €7\{ÆGú|›F…›ùt±ŒDq8ö<^±>(ÂøÈÐ)ÃS> áç¢J“$ ×! &„äý Nô^Ÿ•  šñÆŒ2 ¨À ik%@ Jƒ‹U T+bd"!"AÀ‹jÞʶjþ£˜9®çÇ0Û>ðuq@“ÁÖUûP†@BNûQbÁ¥6rõFaÕ'ªÓX˜òcT1YJ|@qØ,2(`‚æˆìv g@Mlø] ©cx@_P*;B&¯• &{NA ‹€ ¼°9¿Šú5o·LbôêñÛ¥Zd€7u@ æn–RÑ3CÉe3 €cx7ŒÀ uV¤k—qf°yešé4ðu‰æµò™0*ƒlà pap :'@nDÝÁfTTh¤ZÂx~ˆ€` è*~@]ÁI‡œ‡@W^XJ ™Š@"GK€þŠ ×H€aÕH†Až€Â€JšäJl€ÁXÇXI†ÊPZÞ†ÏM‡×ÞبËÊé†å´@ÀŸA ôXƬžÇd‡H¢²2 @bpÀÂI¦ÉFVìÆK‰»íãÕua `XqÃ#Z¥ógD)>–)[ÆÂ@‚+Z:(ØW@Ú/g6 FŸt2°PL‘X/èüáPKX\ÖŽ² ¸”Ç„ÆÒ•q¨k Ô|Ô÷sOsä9q-NP=è2`è·+[N4QÂPNÛÒó1F¥ M” ›·H@„} KU »±þ¦Ü€“HÅ—éLü³ ©' ZÈA£©`‡Ð{tI êˆwÅX& `"8\Ó±Ç@†.Œ™r!púJ)¬GNh=±2Ó@*[L‘âüFŽÐ]BAm6ÅHGTb‘ƒÞi˜¬ªóKTÕ+”Ù›§éh+uø0+aäóC hP—”fÈ é0JC¤QÇ9hàÐ Žä¦ °´Xx„VÆ2ä±À@EÚb ‹EôÈ(]1R¼%PË@&EBi5D•—\‘Æ9b×;HcÓ~ÕÑš‘+\““dDÍO–¤"V þp‘P`¨3wòTPJÁ­ ÃKpRÀÛaef5`ìW …*à‰¥VdÂÉ9#\àO+PƒB# €…sÇüà\€M¤ñº” Ã/„\ÐCœÄ8àˆ|Ñ×¥³u4šR)åý G KºçjiW»PBߨ€–¬_y :™'Ôö þeQ¢º8Ç…!Ô&P*L )/Š&YS•ŽkUÚ|„acQ x`á8•ÀQœ—p0¬ fÑ0kPˆP2Ü €xàïa¥@›[hôì¡ìdwäm#I5@$¦À9þ–P ‘b7L”e|“•Ç E 7CK|Á¹±ä^©8·*5$a5Å(“‘¥h¬ŠÒæ?;”4\†´…“¥AA(ÂU9¹(µ© Ô \>€¤X1†Ø£ñ|dpêNM–²Ð)D 5(;ÐjÊ(iâßúÉÝ×/’tÕ÷qPý]ÈivÁ…TnÉtƒYpµ×b#Tv°þ8Z*7¿÷Øç#Ì6™‹~-@!@ù•FÀ´Ô¦©Œ zv°X'$€¼B3 T¤ÝW Ê­ H“䡾WNÄèK©+6KAw4Å6žàIÚ¿Rù°À(ûüŠÈþ5¡9\5nðžˆPDüUhÞ ’-PÜë@ ijÜ4‰%ð˜º`Q‚£h.@@`?†:0¨51’Pn`”üß?¶c¨€i(‹^O~P3ä„xåÙ#‚Å„œÂÒ A"˜8@ÈÚ@G. g#,ex ,àÃUMæÄHI€*±W° 5³2ŽáƒäÁxÐÀ’ÕFH¬‚—Fìq)å£ô0à*"4ùD3’„ž)$0 d8Da„t¡fÎЀ!Û €Ö¹ØdxC@eC SxÅ Òp ¡([O¹Õ%þ  œÈ ‚¬Œ»lÈ&X ?4áC‰P¹Ÿœãzs¤Ó†˜¯œ¬*32X~X˜,MG3™¨A¤ Ž™rÈÀZ%jIšA9 $ j˜„-Å#Àñ²<yÑrt©t€V€ Xvf4rˆ „Є;±0–øg€—ˆ w¦Ð/x@JÈ@nÄR¨(Uë‡*±£ð­1§1ÛAÕÆþ۬Њ×L‹ç`@ ‹ti2¶› Æ€á Ä"AM^^ôÿ @¨èƒÌ@€ ,®<²ù†#ga|Ñ}êÂWnÃþÁȬUÇXª_*ùŽú}¯4wl" a ,`Q¼P6x!·uàf!ø" YÇRp-ÞD!¤|JEÕAU>BAñÉA ™H «¼Ð¸#±Ê A=M¢fqeÆ<‚º‡%(†Œ|€í ïô°5à dÄ&˜|ìd«˜VJ”JÙ8èH¨y†ðÅ— …”ì„<=¢+HŒ\ª1º.BXˆÛD‘¥]x,FÉÄr‡)ÔjR6Ñ U(XI¨‚²å˜!¦úÉK‰‡£½ØB‚iš¦†4ç.»C%‘’‚{¥0Ò¡GÆ °¨BÌ1àþˆ “De•ïp0…%TòVÉøÑ…  „7MKŒ2$à7àD¬ZQIã•È@Ýaí¡Ÿü@i„5°!RÁÁj '㈸Ùñtg!Ìp4JPLÅEÐT&Š’ùå•`Ä&”ý¨ [½KyÒÀ€Æâ‡ÑÁ°¢±$¡³5 šÌ4P¡(Aø…8Õ¤ C*çÐÁ«Š!FÿІ #1‰Qý‚ðe`{ÂÂJV„ƒ¶îüÐÁ€·g4©õÀÆÐ0 ®Ò /# H€ËT²ib„ÜÙÜcÄi÷€6F‰'‡äÚó˜¹H Ä—ÛŒoþdŽ/j•˜§H-IÓmØÐQOšâB/b›™¬ÖPiÁÔ¨ýÅ…¼çå.¬9¤áMWpÕyha£H“¾V€¬;bˆá*Èöó‹@¥»D„e&³Þ„{ñî#X’DÏ9ë2þá#r,¾)P)Ž€#'äKIÈOÚ#0m'ê°Á‚–£/}–~¶% #ºÇè ;‚b¼ùÛÍH¤2àó#ÍûªQ„ŽiÝw˜Ü‰Ëx@ •¬Ì+Ÿ­Mw# „ì–o!d3y†:CÓi'êºÁ„x#,-OLkŒxôà.ëPFRéK,£º(Ðèš‘‘*>þ2•Ga‚ÇWðKÜù öÄçjlÂ-n~IˆGE™ä´ úîs2³«FôšOÅmæX›þ’Y\øE‘o‘<ç Þ’ŒR‚tÂ!¦ãÚâ(bä쉨1PZÐ̸ÄÀ’.s³=HxûÃç®Þ<êÄ3‡&PÂŒ„"«/ Ñ„ ƙɶ6X®'Y”@ÔAF˜Î¸dË#8Çi€”8ŒIK Á:‘è‰'˜íA:q]4\$˜2 Ÿ2xAÁ¨@ÆAØá@•Ì‰üƒb0€ŠÔÂÌ’•@B&иx ˆŒ+lcþÔ‚ÔüýD”@+üKî°‘ Jƒ˜$U%Dl I4OŒ¼ˆ øQœÑ=_¸>”Á…ä„€<KÄŠ#̓ÜŸ$œÉ½€#ËšõB(ã(yøÚPRÚ åA!bC¸dTz¨Û1üÜø¡IùN¨àÇÑQÈ´ØBJ¼ªÅOðU˜ÎÀ ‚P¬¡@­ÃµQ'Ô^t…â]>ýK,ÝÜI€¶ù‰~íÑâü,싥ǻ4ÁøQ#°Ãxx"ˆ€©YRkiÀ¤“¿é‡˜VÀRXL– J œ|E M%U]Bt©D¨¨Áþ) ñtˆ[Ý”­0ÃñÆPAø¶m Âÿ%‰óÄ`CÈÃQl’}!1ÄC"˜hLÁP—‰aA(ŒŒy±3šÀQHÑT‚vp‚#¼”!ôØÀH…Y`T`_º\F\(ÃqB£,÷¬ÆGä@d O†aÄý¡;„ ÄM‹<´ÈaOŒI0Å *ÉtÄ“Ézœ@’8 ˆ$ÄŠ*<Å®¸âT¹;| heG€¤}$¤O ÀXňìcB”—m^yBÔØ‘)'Ø:xN‰0PÆUh‚€tmñFI^Ì]”A5ÃÁ¼‰*\P8À¥ùEIþ‘m¬t„Í) ™n‰…Ðm`A&˜FÔ%DùB¬ÀV€ !‚Qù€láÔÔÂ/|ˆ3¢Kc$`™8¨ÍÙœä˜Óø`ÐЧ• TNÞôEdI fD4ä@c°$ÁuYUYÊé³üI)…ÆècÀ!¥·!Å `ƒXEq&fHw ËÇÌÐ×HÁ ”QÍAÅ ”[\HüC9"JrU¨!…3"@Ž™DÝ8Äû¼@ (âäAi“„P8°Ã:@ö„mBùà_ ÓQtÁLJ5d@4™AªIÝþ(ÊÉè€êí‘“ÔƒÎö¶ÑX©ô]h¬ƒVÀ)I3`T&Lp€TfÞtB+f2@:ŒâÄÙuEpìÐ=šDiû4¡)@Ci\íL† ˆûXŒ;1ÀÈ’l•ACN¦„¥[BKM°Ì$ #xÔ)& žzB£¶†ÆÐñ]¼n,¬ÃÒyOþá l¦„SöôÈ$ U䃀Al2\RùˆÑ EÌgà1Q Öù ŸN„',‰"ÆS­Æ§8)Nz\É%tA˜XLÜ èñ•I(†õÛŠQSô ¿IÒ $Aþ³±D‚ß(ôÇ5<„%åM~pG‡è-o¤ÂzÅö­_ùÕ:tY: EŠ)[˜Ž![;¬§€ -·\U‚ªç?8‰^^8YŠ¬äãÜ ÕÌA¯žP@½QbY­1„ªü€Šì@þ$id†!d‡óÄ(fÌŒÔñuxI„}âEìC÷þŠûM‚»á€*d) P‚ØBLç®XSebÚ# g`ýj5€Æe\/Od& Ky„¿íÄElUðØÀL@yáqÉÄj…{3…¤+TDÄåÑèÁ™7DIïHr â TØýå­ü‚~Z‚Î2ˆõà›­p¥h¶}̱€‰ Dl¤ñêqí"Œ›‡E¶œtäk(:Ð|ÔïUK# Å9\RkÍy>ÞLbÇ(üƒBsǂ‚Ì$•¼˜&{á™øÀ¢ên¿8’ªCÐi†_üD<ü‚M ¯ 9HE>|Š2<É8RÖ!HÃÞõ…ÞBǨŽþ±ç…îØ„–É ¼€¿ÀZ/‚ ¹û­1†”aHpÁ˜ìFЀHØz^Õ¤ƒ8R¾#:<æ‹ZˆDõ‰ŸâçÔVáYJ˜EœD ÐÁ¢qÁÀY£ŒAKîÍSiì‘ì&$Õü¡È=Êh\8’\ùf´N3èÌi öGÚƒV\PÀLêJœÍ&R"…aNÀD¼rëÜ ê(»Ð븖1<ß)µ¢@ÄyИ°ûPy?O ûx\ÌlÂ…´tÖµ \¬@`:ôÎ8aÓlNkÌÅJøå{Ð(ˆ\Ci—LBW<ŠaZÛ ¥å<»  þ ²‡{ ïl°#'h`š,š¶³ *Ê¡Ñ…K.Qý>ÏôÆ ËH1ÔÝUÉ&T—ÄÁšÍ4z|ŒV\… ¼ÔÁD‚Í.q’Ê@P¢| …måD‚0‚¯¶hk“¢bž,”î…øQÄ¡2´Ü‚3œ6©Ž€—Ét\Ìù‹)?º‹w”¬hÑ"ÀIÐ6‰læeyËe˜pÐ €\)lÛØ^q,7@A€ƒAÐGGÐ!ê†S`SÙ(L„À æ 6ˆŽ§3%@ µÞx݇NÇkÉbnR‡þ£!àAÐDä¢c°Ñ%“áµVȧcàFÄA0°6âyå¡ÑÀSð¶Aâ6 1ÒS é„¶ÁÃú”ÄÁª™¤yr $5„BÔ‘1‹V Hâ‘j·1°¡¡ãúÖö»!@j6{ €ÀH¤Y7ÌABP@p2ÒÈz¦)À“ÓáÛ7|ˆr%@!%¶°µc¿qC ê0.”w$ž©¥Â• MN¼qÓe„†m0hR…¬™ 2€!r$‰W4ÄÚ9ì@€®¤©Sv¨‡n|€DüR "¤'Zd0àŒt'\ˆ@(à1^4„‚@Þ,z à³þƒMº\ÉÃàäÖ‰+äY €-$ ; É°¬õ6D ´‘âPd—Àƒ{%FÕ>¤Tóà˜ƒ*[êiJ‘Ø Æ¤F¼A © ¢=¬@²äˆŽB @ú2âD‡õH)Ñ EA(\ŒÒ¬ª° 9õ»Š¤¾ç“$|abPÈF 1,ÐW5«õš³AÐhjCÉ@",¥+p`ä¸(~8…ÛÔÎ)ýÀˆ\v£ý¤h ÀÁ\2´›Ô(C°CùþЋf`/ÌI€ø €©ˆ6tÉZpžNîøÕÈDÄ@d¶:IzõŽHü ¢ ,¤†; SHAR_EOF fi # end of overwriting check if test -f 'serial-lfg.ppm' then echo shar: will not over-write existing file "'serial-lfg.ppm'" else cat << "SHAR_EOF" > 'serial-lfg.ppm' P6 # created by 'xv /afs/ncsa.uiuc.edu/projects/qmc/ashok/rng/www/images/serial-.gif' 256 256 255 üüüüüüýýýýýýýýýýýýþþþþþþüüüùùùüüüýýýüüüûûûüüüþþþþþþþþþ÷÷÷ þþþúúúúúúùùùûûûúúúýýýþþþþþþùùùýýýûûûûûûþþþüüüýýý úúúüüüûûûûûûýýýüüüùùùûûûüüüýýýýýýùùùûûûùùùüüüöööüüüûûûþþþûûûþþþúúúýýýýýýþþþþþþøøøûûûöööýýýþþþýýýýýýþþþþþþüüüýýýþþþþþþ ûûûýýýüüüüüüüüüûûûúúúûûûúúúýýýþþþýýýûûûýýýùùùüüüýýýýýýþþþþþþüüüþþþüüüþþþþþþúúúùùùþþþþþþöööûûûþþþûûûýýýþþþüüüûûûúúúûûû ûûûúúúûûûýýýþþþþþþþþþýýýþþþþþþþþþþþþüüüûûûùùùþþþþþþùùùûûûüüüüüüþþþþþþüüüøøøþþþýýýýýýýýýúúúûûûþþþýýýûûûüüüûûûûûûþþþûûûýýýüüüýýýúúúþþþùùùýýýøøøüüüûûûþþþüüüþþþþþþýýýúúú üüüýýýùùùýýýþþþýýýþþþþþþûûûþþþþþþþþþýýýþþþþþþùùùüüüüüüýýýþþþüüüýýýýýýþþþøøøûûûþþþýýýýýýûûûþþþüüüýýýþþþþþþþþþþþþùùùþþþúúúýýýüüü ûûûúúúüüüüüü ýýýùùùüüüýýýüüüýýýýýýýýýüüüýýýúúúýýýþþþþþþýýýþþþýýýüüüýýýûûûüüüüüüùùùøøø üüüúúúúúúýýýþþþüüüüüüüüüúúúþþþûûûûûûüüüöööûûûþþþýýýüüüýýýþþþ øøøúúúûûûýýýýýýþþþûûûùùùùùùýýýöööûûûýýýúúúúúú ýýýþþþýýýüüüþþþúúúûûûýýýýýýþþþþþþþþþýýýüüü ûûûþþþþþþûûûûûûúúúüüüûûûúúúþþþúúúüüüþþþþþþüüüþþþùùùûûûøøøúúúúúúøøøüüüûûûúúúûûûþþþøøøþþþûûûúúúýýýúúúýýýþþþýýýþþþúúúúúúýýýýýýûûûþþþþþþüüüúúúýýýþþþùùùúúúýýýüüüýýýùùùùùùøøøûûûþþþþþþüüü þþþþþþüüüþþþþþþþþþùùùüüüüüüýýýûûûþþþûûûþþþýýýøøøýýýüüüþþþýýýùùùüüüýýýûûûúúú ûûûûûûþþþýýýýýýþþþþþþüüüþþþüüüýýýýýýýýýýýýþþþýýýþþþþþþþþþýýýþþþýýýûûûþþþýýýüüüûûûýýýûûûýýýüüüýýýüüüýýýýýýþþþýýýøøøýýýúúúýýýùùùýýýýýýûûûþþþ üüüûûûýýýúúúþþþþþþüüüþþþùùùüüü÷÷÷þþþ üüüýýýýýýýýýýýýýýýýýýýýýûûûúúúüüüûûûùùùûûûúúúþþþþþþþþþþþþúúúýýýüüüüüüþþþýýýþþþûûûýýýþþþõõõýýýþþþýýýþþþøøøüüüüüüüüüûûûüüüýýýúúúýýýøøøûûûøøøúúúýýýúúúýýýþþþ÷÷÷þþþüüüþþþüüüúúúýýýúúúýýýýýýýýýþþþüüüüüüýýýýýýþþþþþþ üüüþþþýýýûûûþþþüüüþþþ úúúýýýýýýüüüýýýüüüûûûýýýúúúþþþþþþüüüýýýýýýúúúùùùúúúùùùûûûýýýþþþúúúûûûþþþýýýþþþúúúþþþþþþþþþ ýýýýýýýýý÷÷÷ýýýüüüýýýüüüúúúûûûþþþüüüþþþýýýûûûüüüþþþþþþüüüúúúûûûúúúûûûýýýþþþûûûûûûúúú üüüýýýþþþúúúþþþþþþ÷÷÷þþþþþþøøøþþþúúú÷÷÷üüüþþþ÷÷÷üüüýýýûûûùùùúúúüüüþþþ  øøøüüüüüüþþþþþþûûûûûûûûûýýýþþþþþþùùùûûûüüüüüüþþþ þþþûûûúúúýýýüüüýýýýýýúúúüüüþþþýýýýýýýýýþþþüüüþþþüüüýýýþþþûûûýýýýýýýýýýýýýýýüüüýýýýýýþþþýýýþþþþþþþþþüüü ýýýþþþýýýúúúýýýýýýúúúýýýùùùþþþýýýüüüýýýýýýýýýüüüüüüúúúýýýþþþ þþþûûûþþþüüüüüüþþþûûûýýýýýý ûûû üüüýýýþþþüüüþþþýýýýýýþþþøøøùùùúúú üüüûûûþþþýýýýýýþþþþþþþþþýýýüüüþþþ ûûûþþþüüü÷÷÷þþþþþþ þþþüüü üüüýýýûûûúúúýýýþþþýýýùùùûûûþþþýýýúúúþþþýýýûûûùùùþþþûûûýýýþþþüüüþþþýýýüüüýýýúúúþþþ ýýýýýýþþþûûûûûû÷÷÷ýýýùùùúúúþþþ ûûûþþþýýýþþþþþþýýýýýýøøøüüüøøøûûûýýýþþþûûûüüüþþþúúúøøøüüüûûûþþþýýý ýýýýýýþþþþþþúúúýýýýýýþþþüüü÷÷÷ûûûýýýþþþûûûýýýýýýþþþþþþùùùûûûþþþûûûýýýþþþþþþûûûüüüýýýüüüýýýþþþþþþþþþúúúþþþýýýýýýýýýúúúþþþüüüúúú ûûûýýýúúúýýýþþþûûûûûûûûûúúúüüüþþþþþþþþþþþþøøøýýýûûûûûûýýý÷÷÷üüüþþþýýýþþþþþþýýýýýýýýýýýýûûûüüüùùùüüüýýýþþþýýýýýýýýýûûûýýýûûûûûûúúúúúúüüüþþþýýý ûûûýýýûûûûûûüüüøøøýýýüüüúúúûûûüüüþþþþþþýýýùùùùùùþþþûûûøøøþþþüüüþþþùùùýýýþþþþþþýýýýýýþþþúúúúúúýýýüüüýýýþþþüüüýýýþþþýýýþþþüüüþþþýýýþþþþþþþþþøøøýýýþþþùùùýýýþþþýýýýýýýýýýýýþþþýýýüüüþþþ üüüþþþüüüûûûýýýþþþüüüýýý÷÷÷ýýýýýýûûûüüüýýýûûûùùùùùùþþþýýýüüüýýýýýýþþþýýýþþþýýýþþþýýýùùùýýýþþþýýýþþþúúúýýýûûûûûûþþþþþþúúúüüüüüüüüüùùù ýýýýýýþþþüüüþþþûûûúúúþþþþþþúúúüüüüüüþþþþþþûûûýýýþþþþþþþþþ ûûûþþþ þþþýýý ûûûøøøýýýýýýüüüþþþûûûþþþüüüýýýýýýúúúüüüüüüúúúýýýüüüýýýýýýþþþüüüýýýüüüüüüþþþþþþýýýþþþ  ÷÷÷þþþûûûþþþúúúýýýþþþûûûþþþûûûûûûýýýþþþüüüüüüýýýþþþýýýþþþüüüüüüúúú þþþüüüýýýúúúýýýþþþ þþþýýýýýýüüüþþþúúúùùùøøøûûûúúúüüüüüüúúúýýýúúúýýýýýýþþþýýýþþþýýý÷÷÷ýýýùùùýýýþþþýýýüüüþþþýýýþþþþþþüüüþþþþþþûûûýýý üüüùùùýýýþþþûûûüüüýýýþþþþþþüüüüüüþþþøøøûûû õõõüüüþþþûûûýýýþþþúúúüüüùùùööö÷÷÷ûûûþþþýýýüüüýýýüüüüüüúúúûûûüüüýýýüüüýýýýýýýýýýýýþþþþþþüüüþþþùùùøøøýýýüüüþþþþþþþþþýýýüüüøøøýýýûûûüüüüüüþþþúúúýýýüüüþþþüüüùùùýýýýýýýýýûûûüüüþþþüüüüüüüüüûûûýýýþþþþþþ þþþþþþüüüþþþùùùþþþþþþ þþþúúúýýýþþþþþþúúúýýý üüüýýýúúúþþþýýýýýýýýýþþþúúúþþþûûûôôôýýýþþþûûûúúúýýýþþþþþþþþþüüüþþþûûûûûûûûûüüüüüüýýýþþþýýýþþþüüüýýý úúúýýýüüüþþþýýýþþþýýýùùùûûûýýýüüüüüüüüü÷÷÷ ùùùþþþüüüþþþüüüþþþüüüþþþþþþûûûüüüúúúýýýþþþþþþüüüüüüûûûþþþøøøþþþùùùýýýýýýúúúþþþùùùþþþüüüþþþ÷÷÷ùùùýýýøøøýýýýýýþþþ úúúûûûúúúüüüúúúúúúúúúýýýþþþøøøüüüúúúüüü þþþþþþøøøûûûýýýýýýþþþøøøûûûýýýûûûûûûüüüüüüûûûûûûýýýùùùþþþþþþúúúþþþùùùüüüþþþ÷÷÷ûûû÷÷÷ýýýþþþþþþþþþýýýûûûùùùöööúúúûûûúúúþþþûûûûûûýýýüüüþþþüüüùùùþþþûûûüüüýýýùùùþþþöööûûûýýýýýýþþþüüüþþþøøøþþþûûûùùùþþþúúúýýýüüüþþþüüüúúúúúúýýýþþþüüüýýýýýýýýýþþþúúúúúúüüüûûûýýýþþþüüüþþþúúúûûûþþþýýýýýýûûû üüüüüüýýýýýýüüü ûûûúúúþþþýýýýýýûûûüüüþþþüüüþþþüüüûûûüüüýýýüüüúúúþþþüüü øøøûûûüüüüüü ûûûûûûþþþþþþüüüûûûþþþüüüûûûüüüýýýýýýþþþúúúýýýýýýýýýúúúþþþûûûþþþüüüýýýüüüúúúûûû þþþüüüþþþýýýýýý úúúøøøýýýüüüüüüþþþûûû÷÷÷þþþúúúþþþ÷÷÷ üüüüüüûûû ùùùýýýýýýýýýúúúýýýýýýýýýøøøýýýúúúüüüþþþüüüûûûùùùþþþþþþüüüýýýýýýüüüýýýþþþúúúùùùþþþþþþüüüþþþúúúýýýýýýúúúýýýúúúüüüüüüþþþþþþøøøûûûýýýþþþûûûýýýýýýøøøýýýýýýýýýüüüüüüýýýýýýùùùýýýüüüþþþýýýüüüüüüýýýûûû þþþûûûýýý þþþþþþüüüþþþþþþúúúþþþþþþýýýýýýüüüþþþýýýûûûýýý÷÷÷þþþüüüþþþþþþþþþýýýûûûüüüýýýþþþþþþûûûúúúøøø ýýýþþþüüüýýýýýýûûûýýýüüüýýýþþþüüüûûûýýýþþþûûûüüüþþþüüüýýýþþþþþþ÷÷÷þþþüüüùùùýýýûûûüüüüüüþþþûûûýýýøøøþþþüüüýýýüüüþþþýýýûûûýýýúúúþþþþþþþþþýýýþþþýýýþþþ üüüüüüþþþüüüþþþýýýþþþýýýþþþûûûøøøüüüþþþ þþþýýýýýýûûûùùùþþþûûûüüüþþþúúúþþþþþþþþþ÷÷÷þþþþþþþþþþþþþþþþþþýýýýýýþþþúúúýýýúúúþþþøøøûûûýýýþþþýýýþþþüüüúúúùùùþþþøøøùùùûûûüüüþþþýýýþþþýýýýýýüüüüüüüüüýýýþþþýýýüüüûûûþþþþþþýýýýýýüüü ýýýùùùùùùþþþþþþýýýüüüþþþýýýýýý÷÷÷þþþüüüüüüùùùþþþüüüûûûûûûùùùýýýûûûûûûýýýûûûüüüýýýýýýùùùüüüþþþúúúþþþýýýýýýýýýþþþþþþúúúöööýýýýýýüüüüüüûûû ûûûùùùùùùüüüúúúüüüýýýúúúþþþýýýüüüûûûûûûüüüþþþúúúþþþþþþýýýûûûþþþüüüýýýúúúýýýüüüûûû ùùùùùùùùùõõõýýýýýý ýýý ûûûûûûüüüýýýýýýúúúýýýýýýþþþûûûüüüüüüþþþþþþþþþþþþüüüüüüúúúûûûüüüþþþýýýüüüüüüùùùúúúþþþ÷÷÷øøøþþþþþþþþþýýýþþþøøøþþþûûûýýýþþþüüüýýýþþþþþþýýýýýýüüü þþþûûûþþþþþþûûûúúú ûûûþþþüüüûûûþþþýýýüüüùùùüüüýýýûûûýýý øøøýýýþþþýýýüüüõõõþþþøøøýýýüüüýýýùùùûûû üüüþþþýýýþþþþþþþþþúúúýýýûûûúúúüüüþþþúúúþþþøøøýýýþþþýýý ýýýýýýöööúúúþþþûûûýýýýýýþþþ þþþýýýýýýþþþûûû÷÷÷þþþýýýþþþüüüþþþúúúùùùûûûþþþ úúúýýýúúúùùùüüüüüüøøøýýýýýýþþþþþþüüüûûûùùùùùùþþþýýýûûûýýý ýýýþþþþþþýýýûûûýýýþþþúúúþþþþþþþþþûûûúúúûûûýýýûûûþþþþþþ þþþüüüúúúúúúþþþþþþþþþûûûþþþþþþþþþüüüüüüüüüþþþþþþúúúýýýúúúýýýýýýþþþüüüþþþýýýüüüüüüýýýüüüýýýýýýýýýýýýûûû÷÷÷üüüýýýûûûüüüýýýüüüûûûûûûýýýýýýüüüýýýýýýûûû ûûûôôôüüüúúúùùùþþþùùùýýýøøøýýýýýýýýýúúúþþþüüüýýýýýýúúúùùùûûûþþþûûûúúúþþþùùùúúúþþþûûûúúúüüüýýýýýýûûûýýýüüüþþþûûûüüüþþþûûûþþþ ùùùüüüýýýùùùýýýüüüýýýúúúùùùþþþüüüþþþúúúþþþýýýýýýùùùýýýûûûþþþþþþûûûüüüüüüøøøþþþúúúþþþûûûþþþþþþýýýúúúûûûþþþþþþùùùúúúýýýýýýüüüþþþþþþûûûýýýýýýþþþ÷÷÷ûûûþþþúúúùùùþþþúúúýýýýýýüüüþþþüüüùùùþþþûûûûûûýýýûûûýýýþþþüüüúúúûûûúúúüüüüüüûûûüüüûûûýýýùùùýýýûûûýýýþþþüüüûûûûûûþþþþþþþþþûûûúúúûûûüüüþþþøøøüüüþþþûûûýýýýýýûûû þþþûûûùùùûûûýýýþþþýýýûûûýýýûûû ýýýþþþþþþûûûýýýþþþþþþüüüüüüýýýþþþþþþþþþþþþþþþùùùûûûþþþüüüýýýýýýüüüþþþüüüýýýþþþûûûþþþþþþþþþüüüùùùûûûüüüýýýýýýùùùýýýýýýüüüüüüùùùþþþüüüþþþüüüýýýûûûþþþùùùûûûúúúþþþüüüüüüûûûþþþþþþþþþüüüþþþýýýþþþùùùüüüþþþþþþüüüöööýýýþþþûûûþþþþþþüüü÷÷÷þþþýýýûûûüüüúúúþþþúúúüüüøøøûûûýýýûûûûûûýýýþþþüüüýýýüüüþþþýýýýýýûûûüüüþþþûûûüüüûûûþþþþþþþþþùùùþþþýýýþþþûûûýýý ûûûùùùûûûýýýüüüþþþüüüþþþþþþýýýûûûþþþùùùþþþûûûýýýûûûýýýýýýüüüýýýùùùúúúûûûüüüúúú üüüûûûþþþþþþþþþüüüýýýüüüûûûýýýþþþûûûûûûþþþþþþþþþüüüùùùþþþüüüýýýýýýüüüýýýþþþþþþþþþüüüüüüþþþüüüþþþþþþøøøúúúýýýûûûüüüýýýûûûûûûýýýüüüýýýýýýøøøüüüýýýýýýþþþûûûüüüýýýþþþûûûüüüùùùûûûþþþüüüýýýþþþþþþýýýþþþüüüþþþüüüýýýþþþüüü üüüüüüýýýýýýûûûúúúüüüþþþýýýüüüøøøûûûüüüþþþþþþþþþþþþûûûýýýüüü üüüþþþýýýþþþþþþýýýûûûþþþþþþýýýúúúýýýúúúüüüüüüþþþýýýýýýýýýþþþþþþþþþùùùüüü ýýýûûûûûûüüüýýýýýýûûûüüüûûûþþþüüüüüüüüüþþþúúúøøøúúúþþþúúú üüüûûû þþþ ýýýþþþüüüüüü÷÷÷ûûûþþþþþþúúúýýýüüüùùùúúúþþþýýýýýýúúúþþþùùù üüüüüüþþþùùù ýýý ýýýýýýüüüþþþ÷÷÷þþþúúúúúúüüüûûûûûûûûûþþþúúúþþþ÷÷÷ùùù öööûûûüüüþþþþþþûûûþþþûûûüüüþþþùùùûûûýýýþþþýýýþþþûûûþþþýýýþþþýýýûûû ýýýýýýûûûüüüýýýûûûþþþþþþþþþùùùýýýûûûýýýùùùüüüýýýüüüüüüþþþûûûþþþýýýþþþüüü þþþþþþýýýüüüýýýþþþúúúúúúþþþüüüüüüþþþüüüüüüùùùýýýþþþýýýöööýýýþþþúúúüüü øøøýýýøøøþþþûûûõõõüüü÷÷÷þþþüüüþþþýýýûûûþþþþþþ úúúþþþùùùúúúùùùþþþüüü÷÷÷ýýýüüüùùùùùùþþþýýýûûûûûûýýýûûûùùùüüüüüüþþþúúúûûûûûûþþþþþþúúúûûûùùùþþþûûûþþþýýýýýýüüüüüüüüüüüüýýýûûûöööýýýüüüûûûþþþùùùýýýûûûûûûüüüþþþüüüûûûüüüýýý ýýýüüüûûûýýýüüüùùù÷÷÷ýýýþþþýýýûûûþþþýýý úúúþþþùùùþþþýýýýýý ûûûþþþþþþúúúþþþúúú÷÷÷ýýýüüüþþþüüüýýýúúúüüüúúúýýýýýýùùùþþþúúúþþþúúúûûû üüüüüüûûûüüüüüüýýýùùùüüüûûûüüüûûûùùùúúúúúúûûûýýýþþþþþþýýýþþþûûûüüüýýýýýýûûûûûûúúúûûûþþþúúúúúúýýýýýý ýýýûûûüüüþþþüüüüüü÷÷÷ýýýþþþüüüüüüúúúýýýþþþùùùûûûûûûþþþúúúûûûüüüýýýþþþûûûýýýþþþûûûøøøþþþûûûþþþýýýþþþüüüýýýýýýûûûûûûúúúüüüûûûþþþþþþúúúüüüþþþûûûûûûþþþùùùýýý÷÷÷ûûûþþþþþþþþþýýýøøøþþþüüüùùùþþþüüüýýýûûûýýýúúúýýýþþþüüüþþþþþþúúúüüü ýýýüüüýýýýýýýýýúúúýýýþþþöööúúúþþþûûûüüüýýýûûûþþþþþþüüüýýý üüüýýýýýýúúúøøøúúúüüüýýýþþþþþþþþþþþþûûûüüüþþþþþþýýýþþþýýýøøøûûûûûûýýýþþþýýýüüüýýýüüüøøøþþþþþþýýýýýýýýýýýýûûûþþþþþþûûûùùùüüüûûûýýýûûûüüüúúúþþþüüüýýýþþþûûûþþþþþþþþþ÷÷÷üüüþþþýýý ûûûüüüýýýûûûûûûùùùýýýýýýýýýþþþüüüøøøùùùüüüüüüøøøüüüýýýþþþýýýþþþþþþýýýýýýüüü÷÷÷ýýýþþþùùùûûû þþþüüüûûû ýýýþþþüüüûûûþþþüüüýýýþþþþþþþþþýýýüüüýýýüüüþþþüüüýýýýýýþþþûûûüüüþþþüüüþþþþþþþþþüüüþþþûûûýýýþþþ üüüýýýüüüýýýúúúûûûùùùýýýþþþøøøýýýýýýþþþýýýýýýøøøüüüùùùûûûþþþýýýùùùþþþûûûþþþûûûøøøýýýýýýýýýüüüýýýýýýúúú üüüùùùýýýýýýþþþüüüûûûûûûþþþþþþýýýýýýþþþùùùýýýþþþùùùýýý úúúùùùüüüýýýýýýýýýþþþúúúþþþüüüùùùýýýýýýúúúüüüúúúûûûýýýøøøýýýúúú÷÷÷þþþýýýþþþþþþþþþþþþüüüüüüøøøûûû þþþþþþýýýþþþøøø üüüþþþþþþþþþüüüûûûúúúýýýùùùüüüýýýûûûþþþøøøüüüüüüýýýýýý ÷÷÷÷÷÷ûûûþþþøøøüüüøøøþþþþþþþþþþþþüüüûûûþþþþþþþþþùùùùùùþþþûûûýýýúúúûûûýýýþþþûûûýýýþþþúúúýýýùùùüüüùùùüüüûûûüüüúúúüüüûûûýýýûûûþþþýýýüüüþþþ õõõüüüþþþþþþýýý üüüüüüûûûúúúûûûúúúþþþþþþýýýüüüúúúþþþýýýúúúøøøþþþýýýøøøýýýþþþýýýþþþûûûýýýüüüúúúúúú ýýýýýýüüüûûûþþþþþþûûûûûûüüüúúúùùùýýýþþþýýýüüüþþþúúúûûûþþþýýýúúúûûûúúúþþþûûûúúúýýýûûûþþþþþþþþþúúúüüüüüüýýýþþþþþþüüüûûûþþþüüüùùùþþþýýýûûûüüüüüüþþþúúúøøøüüüýýýýýýûûû÷÷÷üüüûûûüüüýýýüüüþþþüüüúúúþþþþþþþþþýýýüüüüüüýýýþþþþþþüüüþþþýýýúúú ýýýûûûþþþýýýýýýûûûüüüþþþþþþùùùþþþþþþúúúþþþûûûúúúþþþþþþøøøþþþ úúúýýý÷÷÷ùùùúúúþþþþþþþþþûûûüüüûûûüüüüüüþþþþþþþþþúúúýýýýýýûûûûûûúúúýýýýýýùùùýýýþþþþþþüüüýýýýýýúúúþþþ üüüýýýþþþüüüûûûýýýýýýþþþûûûþþþüüüýýýþþþþþþûûûûûûþþþûûûüüüþþþüüüúúúüüüüüü ûûûùùùþþþýýýýýýýýýþþþùùùûûûþþþùùùúúúþþþþþþûûûþþþþþþýýýþþþúúúþþþþþþýýýþþþúúúþþþûûûùùùúúúøøøüüüüüüøøøüüüúúúüüüþþþûûûýýý ýýýýýýþþþþþþþþþüüüüüüúúúýýýýýýýýýúúúüüüýýýþþþþþþýýýùùùþþþþþþüüüúúúþþþýýýþþþþþþøøø üüüúúúüüüûûû÷÷÷þþþýýýþþþüüüüüüûûûýýýþþþýýýüüüüüüûûûúúúùùùúúúýýýþþþúúúüüüþþþýýýýýýüüüþþþþþþùùùüüüýýýüüüýýýûûûùùùþþþûûûùùùùùùýýý÷÷÷ùùùúúúùùùýýýüüü þþþüüüýýýüüüüüüþþþûûûýýýúúúýýýþþþþþþþþþùùùüüüûûûþþþ þþþýýýþþþþþþûûûþþþüüüûûûùùùúúúþþþýýýþþþýýýùùùþþþûûûùùù þþþ ùùùþþþþþþþþþýýýûûûüüüþþþùùùûûûýýýþþþþþþúúúøøøùùùþþþýýýûûûøøøþþþþþþûûûþþþûûûûûûûûûýýýþþþûûûüüüþþþúúú  üüüüüüúúúûûûûûûùùùþþþûûûùùùþþþüüüþþþûûûþþþýýýýýýøøøþþþüüüþþþûûû ýýýûûûþþþûûûþþþþþþûûûüüüúúúüüüýýýýýýüüüùùùüüüúúúûûû÷÷÷þþþüüüýýýýýýýýýùùùüüüþþþüüüþþþþþþþþþþþþýýý ûûûýýýûûûüüüþþþýýýùùùýýýýýýúúúüüüýýýýýýüüüþþþùùùýýýûûûþþþüüüþþþýýýþþþþþþ÷÷÷ûûûüüüùùùúúúþþþþþþ þþþþþþüüüúúúüüüüüüüüüüüüûûûüüüüüüþþþþþþûûûúúúûûûúúúýýýüüüüüüúúú øøøþþþøøøþþþüüüþþþýýýýýý üüü÷÷÷ýýý ýýýüüüþþþþþþþþþüüüûûûùùùúúúúúúûûûûûûüüüþþþýýýùùùýýýýýýþþþûûûüüüýýýüüüüüüþþþþþþüüüûûûþþþþþþûûûûûûýýýúúúþþþüüüþþþøøøþþþüüüüüüþþþüüüþþþþþþþþþþþþúúúþþþüüüüüüûûûûûûþþþüüüþþþþþþýýýûûûþþþûûûþþþþþþüüü üüüüüüûûûüüüýýýüüüûûûþþþüüüþþþþþþþþþþþþýýýúúúúúúóóóþþþøøøþþþûûûüüüþþþþþþüüüýýýþþþûûûþþþþþþûûûýýýþþþýýýûûûúúúþþþûûûýýýýýýþþþýýýùùùüüüýýý÷÷÷ýýýþþþýýýýýýüüüþþþüüüþþþûûûþþþþþþýýý÷÷÷÷÷÷þþþýýýøøøýýýþþþûûûþþþøøøþþþýýýúúúþþþ úúúýýýùùùýýý ýýý÷÷÷ ýýýüüüýýýþþþùùùýýý÷÷÷ýýýýýýþþþýýýüüüþþþþþþýýýûûûùùùùùùùùùýýýûûûþþþýýýûûûüüüþþþüüüûûûýýýýýýþþþûûûüüüüüüüüüûûûüüüýýýûûûøøøüüüýýýþþþýýýûûûúúúüüüýýýþþþþþþúúúþþþûûûýýýýýýúúúýýýþþþûûûýýýûûûþþþýýýýýýüüüüüüýýýýýýûûûþþþýýýýýýüüüþþþþþþþþþ ýýýþþþüüüýýýþþþûûûþþþúúúþþþûûûþþþüüüùùùûûûýýýúúúûûûýýýúúúþþþüüüþþþýýýþþþýýýýýýýýýøøøþþþþþþþþþüüüüüüüüüûûûþþþþþþþþþúúúþþþüüüýýýþþþþþþýýýýýýüüüûûûþþþýýýýýýùùùúúúüüüþþþþþþûûûûûûûûû ýýýüüüþþþúúúùùùúúúþþþþþþýýýýýýûûûýýýýýýþþþüüüþþþýýýýýý÷÷÷øøøþþþýýýþþþüüü þþþþþþúúúþþþþþþýýýùùù ýýýüüüþþþþþþüüüýýýýýýüüüüüüüüüþþþùùùþþþýýýýýýûûûþþþüüüýýýöööþþþýýýüüüþþþþþþûûûùùùýýý÷÷÷ùùùýýýþþþüüüþþþüüüöööþþþþþþøøøûûûûûûþþþýýýûûûþþþùùùþþþüüüüüüþþþüüüüüüýýýþþþûûûüüüûûûýýýýýýýýýþþþþþþþþþüüüýýýüüüüüüýýýøøøýýýüüüýýýûûûúúúùùùøøøþþþüüüüüüþþþüüüýýýþþþþþþûûûýýýúúúýýýýýýùùùúúúúúúþþþüüüþþþüüüþþþ÷÷÷þþþþþþþþþýýýüüüýýýúúúþþþþþþûûûûûûýýýýýýýýý÷÷÷þþþþþþýýýþþþýýýýýýúúúýýýþþþüüüüüüüüüýýýþþþýýýþþþþþþûûûþþþüüüýýýüüüýýýþþþüüüþþþýýýþþþþþþúúúüüüýýýýýýüüüþþþþþþýýýûûûúúúýýýùùùüüüýýý ùùù ýýýþþþûûûùùùúúúûûûüüü þþþúúúûûûþþþþþþúúúýýýùùùýýýþþþûûûþþþþþþýýýýýýùùùýýýùùùþþþþþþúúúþþþûûûûûûüüüùùùüüüþþþüüüþþþüüüüüüþþþüüüýýýüüüýýýþþþþþþþþþ üüüûûûýýýùùùýýýüüüøøøùùùüüüþþþüüüøøøüüüüüüþþþýýýûûûþþþýýýþþþþþþ þþþýýýùùùýýýûûûþþþûûûþþþýýýüüüýýýüüüûûûûûûüüüýýýüüüþþþüüüþþþþþþþþþúúúùùùýýýüüüýýýýýýýýýüüüûûûýýýûûûûûûþþþùùùûûûûûûüüüûûûþþþýýýýýýúúúùùùþþþùùùþþþøøøüüüþþþüüüûûûþþþüüüûûûýýýýýýúúúýýýýýýþþþýýýþþþþþþýýýþþþþþþûûûüüüüüüþþþýýýþþþýýýýýýþþþ ýýýþþþ þþþýýý÷÷÷ýýýþþþøøøþþþþþþûûûþþþþþþûûûüüü÷÷÷üüüõõõúúú ûûûüüüùùùûûû ýýýùùùúúúýýýûûûüüüýýýýýý ûûûýýýþþþøøøúúúýýýþþþùùùýýýþþþüüüþþþýýýþþþþþþýýýþþþýýýþþþýýýüüüüüüýýýýýýþþþùùù÷÷÷ýýýüüüþþþûûûüüüýýýþþþüüüþþþýýýýýýýýý ýýýþþþûûûüüüþþþþþþüüüþþþþþþýýýýýýùùùýýýúúúùùùþþþýýýûûûþþþüüü÷÷÷ûûûþþþýýýþþþýýýþþþ ûûû ûûûþþþûûûýýýøøøþþþüüüþþþøøøúúúûûûüüüþþþüüüþþþúúúüüüùùùúúúþþþþþþúúúúúú÷÷÷þþþþþþüüüûûûúúúþþþþþþúúúýýýûûûþþþþþþúúúþþþýýýþþþùùùýýýþþþúúúþþþþþþüüüýýý÷÷÷ýýýùùùþþþþþþýýýüüüøøøþþþþþþ üüüþþþþþþþþþþþþýýýþþþýýýûûûüüüýýýþþþ ûûûýýýúúúýýýýýýýýýüüüþþþúúú÷÷÷þþþýýýýýýþþþüüüüüüüüüüüüýýýýýýûûûüüüþþþþþþøøø úúú ýýýýýýþþþþþþúúúùùùúúú ýýýúúúúúúüüüúúúþþþûûûûûûýýýþþþýýýüüüúúúýýýüüüýýýýýýýýýþþþüüüúúúüüüþþþúúúûûû þþþþþþþþþùùùýýýýýýþþþüüüþþþþþþúúúüüüüüüüüüüüüûûûùùùýýýýýý  üüüþþþþþþúúúþþþüüü ýýýûûûýýýúúúüüüûûûþþþþþþüüüúúúýýýûûû÷÷÷þþþþþþüüüöööþþþûûûþþþýýýúúú÷÷÷ýýýüüüýýýýýýýýýúúúýýýüüüþþþýýýûûûúúúýýýþþþýýýýýýþþþýýýþþþýýýüüüûûûüüüûûûûûûûûûþþþþþþþþþþþþþþþþþþúúúüüüþþþüüüüüüþþþûûûþþþþþþûûûþþþûûûûûûûûûüüüýýýþþþúúúþþþúúúöööþþþüüüþþþýýýûûûþþþûûûýýýúúúúúúúúúþþþýýýúúúûûûýýýþþþüüüþþþ þþþüüüüüüþþþûûû üüüýýýýýýþþþ ûûûúúúýýýüüüþþþþþþüüüþþþþþþþþþüüüýýýûûûûûû þþþ ýýýýýýþþþþþþùùùùùùùùùýýýûûûüüüúúúüüüýýýüüüþþþþþþýýý ýýýûûûûûûûûûüüüûûûþþþþþþýýýüüüöööýýýûûûþþþþþþúúúþþþýýýþþþøøøüüüüüüýýýûûûýýýúúúüüüýýýýýýþþþþþþûûûþþþýýýùùùùùùþþþ þþþúúúüüüúúúýýýþþþùùùüüüûûûþþþþþþþþþýýý ýýý ûûûýýýüüüúúúøøøüüüýýýüüüþþþ üüüþþþüüüùùùþþþüüüûûûùùùüüüþþþùùùýýýûûûüüüûûûüüüüüüýýýþþþõõõýýýýýýýýýüüüüüüýýýüüüüüü ûûûúúúúúúýýýýýýüüüüüüþþþûûûûûûþþþüüüýýýþþþþþþþþþûûûþþþþþþþþþþþþüüüþþþüüüýýýüüüþþþþþþüüüüüüùùùýýýúúúýýýýýýúúúûûûþþþüüüüüüûûûûûûûûûýýýúúúýýýüüüúúúýýýýýýüüüùùùùùùýýýýýýûûûþþþüüüýýýüüüøøøþþþýýýþþþúúúøøøüüü ýýýýýýüüüùùùþþþöööþþþþþþûûûúúúýýýûûûýýýþþþþþþüüü þþþüüüúúúþþþþþþüüüùùùøøøûûûüüüýýýüüüüüüùùù ûûûúúú÷÷÷ùùùüüüøøøúúúýýýýýýýýýüüüûûûþþþûûûýýýþþþþþþýýýýýýúúúûûûþþþûûûüüüûûûþþþþþþ ûûûþþþúúúýýý÷÷÷üüüþþþýýýýýýþþþþþþûûûþþþûûûýýýüüüýýýøøøýýýûûûüüü ýýý þþþùùùùùùüüüûûûþþþúúúûûûýýýûûûüüüüüüùùùüüüþþþþþþüüüúúúüüüþþþýýýúúúüüüþþþþþþøøøþþþüüü úúúûûûýýýúúúúúúúúúýýýùùùüüüýýýýýýýýýûûûùùùûûûûûûýýý úúúûûûüüüúúúýýýûûûýýýüüüùùùþþþüüüùùùýýýùùùùùùüüüþþþýýýþþþýýýüüüþþþþþþûûûþþþþþþûûûþþþüüüþþþüüüýýýýýýüüüþþþþþþûûûûûûýýýùùùúúú þþþùùùþþþþþþ ýýýùùùþþþýýýþþþþþþþþþûûûþþþýýýüüüüüüýýýþþþþþþüüüûûûýýýúúúþþþýýýþþþöööýýýûûûûûûüüüþþþýýýúúúþþþüüüýýýýýýþþþüüüüüüüüüþþþúúúþþþþþþúúúüüüýýýýýýþþþüüüþþþüüüûûûúúúýýýûûûýýýýýýüüüûûûýýýüüüúúúýýýûûûüüüüüüþþþþþþþþþþþþýýýûûûýýýýýýýýýþþþþþþûûûúúúýýýúúúþþþûûûýýýþþþûûûúúúýýýýýýûûûúúúüüüøøøýýýýýýüüüúúúþþþøøøþþþöööýýýüüüúúúýýýþþþþþþüüüúúúýýýþþþþþþýýý ýýýúúúüüüúúúýýýüüüüüüüüüýýýþþþûûûýýýüüüûûûþþþýýýýýýýýýüüüúúúýýýøøøúúúüüüùùùúúúøøøþþþýýýýýýûûûûûûûûûþþþýýýüüüõõõýýýüüüþþþýýýüüüüüüýýý þþþþþþûûû ýýýýýýýýýøøøþþþþþþüüüýýýþþþûûûûûûúúúþþþýýýþþþüüüúúúûûûüüüüüüþþþþþþþþþûûûþþþ÷÷÷üüüýýýüüüýýýþþþüüüýýýýýýýýýúúúûûûüüüüüüþþþüüüýýýýýýûûûýýýýýý ùùùýýýûûûýýýþþþþþþúúúþþþþþþýýýýýýþþþüüüýýýþþþüüüþþþýýýüüüûûûüüüüüüýýýøøøýýý÷÷÷ýýýþþþþþþþþþúúúùùùþþþýýýúúúûûûûûûüüüýýýûûûüüüüüüùùùüüüþþþùùùþþþýýýýýýýýýüüüýýý þþþúúúþþþýýýüüüúúúûûûüüüþþþüüüþþþüüüúúúüüüýýýþþþþþþþþþýýýþþþþþþ ùùùþþþüüüûûûüüüþþþ ýýýþþþþþþûûûþþþýýýýýýýýýùùùýýýýýýþþþýýýþþþ þþþùùùýýýýýýûûûþþþþþþýýýþþþýýýöööøøøþþþýýýüüüùùùþþþùùùýýýùùùüüüýýýýýýüüüýýýüüüûûûûûûþþþûûûùùùùùùûûûüüüüüüüüüüüüþþþúúúýýýýýýþþþ ûûûþþþúúúùùùûûûûûûúúúüüüþþþþþþþþþþþþùùùûûûüüüûûûýýýýýýüüüþþþûûûûûûýýýýýýþþþýýýûûûüüüýýýûûûþþþýýýýýýüüüþþþûûûþþþøøøüüüýýýüüüþþþýýýüüüüüüûûûùùùþþþùùùûûûûûûüüüûûûýýý÷÷÷þþþüüüþþþþþþúúúþþþþþþþþþþþþùùùýýýþþþýýýýýýúúúüüüüüüþþþþþþüüüýýýüüüüüüúúúúúúûûûýýýþþþûûûþþþ þþþüüüýýýýýýþþþüüüûûûþþþùùùýýýýýýþþþþþþüüüýýýýýýþþþüüüûûûýýýþþþýýýýýýøøøöööüüüþþþýýýþþþþþþýýýþþþýýýüüüûûûüüüûûûþþþüüüþþþþþþûûûûûûûûûþþþúúúúúúøøøüüüþþþþþþþþþþþþùùùüüü ÷÷÷ûûûüüüüüüúúúýýýùùùùùùþþþüüüýýýýýýþþþýýýùùùþþþúúúüüüþþþþþþþþþþþþþþþüüüþþþþþþþþþüüüýýýùùùþþþþþþýýýþþþýýýýýýþþþþþþúúúüüüúúúþþþþþþýýýüüüúúúýýýýýýýýýþþþþþþüüüýýýúúú þþþþþþûûûûûûüüüþþþþþþýýýýýýûûûùùùùùùúúúýýýüüüúúúýýýþþþüüüþþþýýýûûûýýýþþþüüüùùùúúúûûû þþþþþþùùùþþþýýýþþþýýýþþþüüüþþþüüüþþþýýýüüüþþþøøøüüüûûûúúúýýýþþþüüüþþþüüüøøøüüüúúúúúúøøøúúúúúúþþþýýýþþþ ûûûûûûþþþýýýûûû ûûûúúúýýýüüüúúúþþþþþþûûûüüüýýýüüüþþþýýýýýýþþþýýýþþþýýýüüüþþþþþþùùùùùùøøøþþþýýýøøøüüüýýýûûûüüüýýýùùùýýýþþþýýýþþþþþþüüü õõõþþþýýýýýýûûû÷÷÷üüüþþþüüüüüüüüüüüüþþþ þþþúúúüüüýýýüüüùùùýýýûûûýýýùùùþþþúúúýýýûûûþþþöööþþþúúúþþþúúúþþþúúúúúúþþþýýýýýýùùùýýý ýýýúúúûûûýýý÷÷÷þþþþþþ÷÷÷ýýýûûûöööýýýýýýþþþþþþùùùüüüüüüþþþýýýþþþùùùøøøýýýþþþúúúüüüüüüûûû÷÷÷þþþýýýùùùüüüþþþüüüýýýúúúýýý þþþþþþýýý þþþüüüüüüüüüùùùþþþùùùûûûüüüýýýûûûþþþ ýýýùùùýýýþþþýýýüüüþþþùùùýýýûûûûûûþþþüüüýýýúúúüüüúúúýýýþþþûûûýýýûûûûûûûûûûûûþþþûûûýýýúúúýýýüüüüüüþþþüüüþþþüüüþþþþþþþþþýýýüüüþþþüüüùùùûûûýýýüüüûûûþþþþþþýýýýýýûûûúúúûûûüüüûûûþþþûûûüüüúúúþþþûûûýýýúúúüüü ûûûüüüþþþýýýüüüýýýüüüüüüýýýûûûýýýþþþþþþûûûþþþýýýûûûýýýýýýýýýùùùüüü ýýýûûûýýýþþþýýýüüüþþþüüüýýý þþþøøø÷÷÷þþþþþþýýýüüüýýýùùùþþþûûûþþþýýýþþþþþþýýýþþþþþþþþþûûûýýý÷÷÷üüüþþþýýýûûûùùùûûûþþþþþþüüüþþþûûûþþþýýýþþþþþþüüüþþþûûûýýýþþþüüüþþþøøøûûûþþþýýýýýýþþþøøøþþþüüüûûûúúúüüüþþþýýýýýýýýýýýýþþþüüü÷÷÷ýýýýýýþþþüüüþþþþþþþþþþþþûûûýýýýýýþþþýýýüüüúúúþþþúúúûûûýýýþþþýýýúúúüüüüüüüüüþþþüüüþþþþþþýýýþþþþþþ ûûûýýýýýýúúúùùù÷÷÷þþþûûûûûûûûûþþþúúúúúúùùùþþþûûû þþþüüü ýýýúúúþþþýýýýýýûûûüüüûûûþþþüüüüüüûûûúúúùùùùùùþþþùùùýýýþþþýýýøøøúúúýýýùùùþþþûûûúúúþþþ ýýýþþþúúúþþþþþþüüüýýýûûûþþþüüüþþþùùùùùùþþþþþþüüüýýýûûû÷÷÷þþþúúúýýýüüüúúúüüüýýýþþþüüüýýýýýýýýýþþþýýýûûûùùùþþþüüüýýýþþþüüüúúú ýýýýýýûûûúúúýýýøøøýýýùùùþþþýýýþþþþþþüüüþþþüüüûûûýýýþþþüüüûûûþþþüüüüüüýýýúúúüüüýýýùùùþþþþþþýýýþþþ ûûûýýýùùùüüüúúúþþþþþþþþþþþþþþþüüüùùùúúúûûûýýýûûûüüüùùùýýýþþþüüüýýýüüüýýýýýýüüüþþþ þþþüüüýýýüüüüüüþþþýýýúúúþþþþþþüüüýýýüüüüüü ûûûþþþýýýýýýýýýýýýýýýþþþþþþþþþýýýüüüþþþûûûþþþþþþþþþùùùþþþ÷÷÷üüüüüüöööþþþûûûþþþúúúúúú ýýýúúúûûûýýýüüüüüüýýýüüüþþþýýýüüüúúúüüüüüüùùùþþþýýýýýý üüüúúúýýýûûûþþþüüüúúú÷÷÷þþþüüüýýýþþþüüüûûûþþþýýýþþþýýýýýýüüüüüüþþþüüüúúúøøøýýýúúúýýýüüüùùùøøøüüüûûû ýýýùùù þþþøøøúúúýýýúúúüüüþþþûûûûûûýýýýýýýýýþþþýýýýýýüüüûûûþþþüüüúúúþþþüüüûûûûûûùùùüüüýýýûûûþþþúúúüüüûûûýýýýýýüüüþþþüüüûûûýýýþþþûûûüüü þþþþþþýýýüüüþþþúúú þþþüüü ûûûüüüþþþüüüþþþýýýûûûüüüýýýþþþþþþýýýþþþüüüüüüúúúþþþþþþüüüþþþýýýüüüûûûúúúûûûþþþþþþúúúüüüüüüüüüúúúüüüúúúüüüýýýþþþüüüýýý úúúýýýýýýþþþþþþüüüþþþûûûúúúýýýùùùøøøýýýüüüüüüþþþøøøýýýùùùüüüþþþüüüþþþþþþþþþýýýþþþýýýüüüþþþûûûøøøüüüþþþüüüþþþûûûúúú÷÷÷üüüþþþýýýüüüþþþúúúþþþýýýûûûþþþþþþùùùþþþ øøøýýýúúúþþþùùùúúúûûûýýýùùùùùùþþþüüüúúúüüüþþþýýýúúú úúúúúúüüüüüüûûûýýýþþþþþþþþþýýýþþþûûûýýýýýý þþþûûû üüüýýýýýýþþþøøøýýýýýýúúúûûûüüüýýýýýý ûûûýýýøøøþþþúúúüüüûûûþþþùùùýýýþþþøøøøøøöööþþþþþþþþþüüüúúúþþþúúúúúú þþþüüüýýýùùùýýýýýýûûûùùù þþþþþþþþþþþþüüüùùùüüüûûûúúúýýýüüüþþþþþþúúúþþþùùùøøøûûûûûûúúúøøøýýýûûûýýýýýýüüüüüüùùùúúúþþþûûûüüüþþþýýý  ýýýþþþùùùûûûüüüýýýþþþøøøþþþþþþûûûýýýüüüþþþýýýýýýþþþýýýþþþýýýûûûúúúþþþýýýüüüþþþýýýüüüýýýüüüüüüùùùüüü ûûûþþþûûûúúúûûûýýýûûûûûûýýýþþþüüüùùùýýýþþþûûûüüüûûûûûûüüüûûûþþþ üüü ýýýüüüþþþþþþþþþøøøùùùýýýøøøýýýýýýüüüûûûüüüúúúþþþþþþùùùüüüúúúúúúùùùúúúýýýýýýþþþþþþýýýùùùüüü üüüùùùúúúþþþüüüûûûýýýûûûøøøýýýúúú ùùùþþþûûûúúúþþþýýýýýýûûûüüüþþþýýýûûûþþþþþþþþþýýýûûûþþþýýýùùùûûûýýýüüüüüüþþþýýýþþþüüüþþþýýýûûûúúúþþþþþþûûûþþþ÷÷÷þþþúúúüüüþþþûûûýýýüüü ýýýþþþùùùþþþýýýýýýþþþüüüýýýøøøûûûúúúþþþþþþùùùûûûþþþýýýþþþüüüþþþüüüþþþ þþþýýýúúúüüüþþþýýýþþþýýýûûûûûûúúúýýýýýýùùùùùùýýýüüüöööúúúýýýýýýþþþýýýýýýûûû ûûûþþþúúúøøøþþþûûûþþþþþþ úúúýýýüüüüüüþþþùùùþþþýýýþþþýýýýýýüüüýýýúúúþþþþþþþþþýýýþþþüüüüüüûûûýýýýýýøøøþþþüüüüüüüüüýýýúúúüüüþþþýýýýýýûûûþþþýýýúúúþþþýýý þþþ úúúþþþýýýýýýþþþþþþûûûùùùþþþüüüüüüýýýúúúüüüþþþùùùûûûýýýûûûüüüýýýýýýþþþþþþýýýüüüüüüûûûþþþûûûûûûüüüýýýþþþ þþþþþþûûûúúúøøøþþþüüüýýýøøøýýýûûûüüüýýýùùùûûûþþþþþþùùùúúúûûûûûûþþþýýýûûû÷÷÷þþþúúúûûûýýý üüüýýýþþþýýýùùùýýýüüüýýýýýýþþþýýýûûûüüüýýýüüüúúúûûûýýýýýýþþþýýýüüüýýýüüüüüüüüüýýýûûû ýýýüüüúúúþþþùùùüüüüüüüüüûûûþþþýýýþþþþþþúúúûûûüüüüüüüüüþþþüüü üüüýýýúúúþþþúúúüüüþþþüüüüüüûûûûûûþþþþþþýýýþþþûûûþþþûûûþþþýýýúúúþþþûûûûûûûûûýýýýýýýýýýýýûûûýýýýýýúúúýýýûûûøøøýýýøøøûûûþþþþþþýýýþþþûûûýýýûûûöööþþþþþþúúú úúúýýýüüüüüüüüüýýýùùùûûûûûûýýýýýýøøøùùùüüüüüüþþþúúúýýýüüüþþþúúúþþþþþþûûûþþþþþþúúúþþþûûûýýýûûû ýýýøøøýýýüüü úúúþþþüüüýýýüüüýýýýýýûûû üüüùùùýýýþþþþþþûûûýýýúúúþþþþþþùùùüüüýýýþþþýýýúúúüüüúúúüüüùùùýýýýýýþþþüüüüüüþþþüüüýýýýýýþþþýýýùùùûûû÷÷÷ûûûþþþüüüüüüüüü÷÷÷ûûûþþþþþþþþþýýýüüüýýýüüüýýýýýýþþþýýýýýýüüüþþþùùùüüüùùùýýýüüüýýýýýýöööþþþýýýýýýýýýþþþùùùþþþýýýüüüûûûõõõýýýúúúýýýûûûýýýþþþýýýúúúüüüüüüþþþúúúþþþýýýùùùûûûþþþþþþúúúþþþýýýþþþüüüüüüþþþúúúüüüýýýûûûûûûþþþûûûþþþûûûýýýüüüýýýûûûüüüüüüýýýþþþ üüüýýýþþþýýýýýýýýýþþþüüüþþþþþþþþþþþþùùùþþþþþþüüüûûûûûûúúúþþþýýýþþþøøøýýýüüüüüüþþþýýýýýýþþþýýýýýýþþþüüüùùùüüüþþþ úúúüüüüüüþþþýýýúúú øøøûûûýýýþþþþþþþþþýýýøøøýýýøøøþþþüüüüüüþþþûûûüüü üüüýýýþþþþþþþþþùùùùùùþþþüüüùùùþþþúúúþþþüüüýýýûûûûûûúúú ûûûøøøüüüþþþüüüþþþýýýüüüüüüûûûþþþøøøþþþþþþþþþûûûýýýþþþüüüøøøþþþüüüüüüýýýýýýýýýûûûúúúüüüüüüþþþþþþþþþüüüþþþüüüüüüýýýûûûýýýüüüüüüþþþþþþýýýüüüúúúþþþûûûýýýüüüüüüþþþøøøþþþþþþúúúûûûýýýþþþþþþüüüüüüüüüûûûûûûüüüþþþúúúúúúüüüýýýüüüýýýþþþþþþþþþüüüýýýúúúýýýýýýüüüýýýþþþýýýùùùüüü üüüùùùþþþ þþþ ýýýþþþýýýþþþþþþúúúþþþýýýûûûýýýúúúýýýþþþùùùþþþùùùþþþûûûûûûùùùûûûþþþùùùþþþýýýúúúüüüýýýýýýþþþüüüþþþþþþýýýúúú÷÷÷ûûûúúúýýýþþþûûûüüüýýýýýýýýýüüüüüüûûûþþþýýýýýýûûûþþþûûûûûûþþþüüüýýýøøøüüüúúúûûû÷÷÷ýýýýýýúúúüüüýýýùùùûûûüüüýýýþþþøøø úúúûûûýýýýýýúúúþþþüüüûûûþþþþþþþþþûûûþþþøøøýýýùùùüüüüüüûûûþþþýýýýýýþþþýýýþþþþþþýýýþþþþþþþþþúúúúúúúúúýýýþþþùùùûûûýýýýýýýýýùùùýýýýýýýýýüüüþþþýýýþþþþþþýýýûûûþþþüüüüüü÷÷÷þþþûûûøøøûûûýýý÷÷÷þþþþþþýýýûûûøøøüüüþþþüüüüüüüüüþþþýýýþþþþþþýýýüüüþþþþþþþþþþþþüüüýýýþþþúúúüüüøøøýýýþþþûûûüüüýýýýýýþþþþþþøøøþþþüüüüüüùùùüüüýýý ýýýýýýþþþüüüþþþúúúþþþýýýýýýþþþýýýþþþüüüüüüþþþýýýýýýüüüýýýþþþýýý üüüýýýüüüøøø ûûûýýýúúúýýýþþþüüüüüüýýýùùù þþþþþþþþþýýýûûûúúúúúúúúúûûûûûûýýýùùùþþþüüüýýýùùùþþþýýýþþþùùùþþþùùùþþþùùùýýýþþþýýýûûûýýýøøøùùùûûûýýýýýýûûûþþþûûûùùùùùùûûûùùùýýýûûûúúúûûûþþþûûûûûû þþþúúúüüüúúúùùùûûûþþþýýýþþþýýýüüüþþþüüü üüüüüüýýýøøøýýýþþþ þþþùùùýýýûûûýýýùùùþþþûûûýýýýýýýýýüüüúúúýýýþþþüüüüüüüüüûûûûûûþþþúúúüüüúúúþþþýýýýýýýýýüüüýýýþþþþþþùùù÷÷÷þþþþþþ þþþùùùþþþüüüýýýþþþýýýøøøúúúþþþüüü ûûûþþþúúúþþþüüüúúúþþþþþþúúúýýýþþþúúúýýýüüüûûûýýýýýýýýýüüüþþþþþþüüüýýýþþþþþþûûûüüüûûûþþþüüüûûûþþþýýýþþþýýý þþþüüüýýýúúúüüüüüüýýýùùùþþþýýýüüüýýýþþþüüüþþþüüüýýýûûûýýýûûûúúúüüüþþþýýýüüüþþþûûûýýýýýý øøøûûûþþþüüüüüüûûûüüüüüüúúúýýýüüüûûûüüüþþþøøøýýýùùùûûûûûûþþþ üüüûûûüüüúúúûûûûûûýýýþþþýýýüüüûûûúúúúúúýýý ýýý þþþõõõþþþúúúþþþúúúüüüüüüûûûùùùøøøýýýúúúûûûüüüûûûüüüýýýûûûüüüûûûþþþùùùúúúþþþüüüýýýýýýúúúüüüüüüþþþþþþûûû ûûûþþþýýýûûûýýýüüüýýýúúúüüüýýýýýýüüüûûûþþþûûûüüüùùùüüüýýýûûûûûûûûûüüüûûûýýýýýýýýýüüüûûûûûûþþþýýýüüüýýýüüüûûûûûûýýýûûûúúúþþþüüüûûûøøøýýýþþþýýýýýý÷÷÷þþþýýýùùùûûûüüüýýýûûûúúúþþþüüüùùùýýýùùùþþþüüü÷÷÷ùùùýýýýýýüüüüüüùùùýýýþþþýýýøøøüüüýýýýýýþþþüüüøøøüüüýýýúúúýýýüüüüüüþþþüüüøøøþþþýýýýýýýýýþþþþþþøøøúúúýýýüüüüüüüüüûûûþþþýýýþþþúúúýýýýýýüüüüüüþþþýýýûûûþþþþþþþþþýýýüüüþþþúúúüüüüüüüüüüüü ýýýúúúúúúùùùýýýüüüûûûýýýþþþþþþûûûþþþüüüýýýüüüýýýúúúþþþùùùüüüüüüûûûýýý þþþýýýþþþüüüûûûüüüýýýüüüýýý÷÷÷ýýýúúúþþþýýýûûûûûûþþþþþþþþþüüüþþþýýýýýýüüüûûûýýýþþþöööúúúûûûüüüþþþüüüûûûüüüýýýüüüüüüýýýýýýøøøýýýþþþüüüûûûþþþýýýüüüúúúûûûüüüþþþýýýþþþøøøþþþüüüþþþüüüýýýûûûüüüüüüýýýøøøýýýüüüûûûûûûøøø üüüýýýùùùþþþþþþúúúþþþýýýýýýùùù÷÷÷ýýýüüüýýýûûûüüüüüüýýýþþþûûûüüüûûûþþþþþþ þþþþþþüüüþþþþþþûûûùùù ùùùüüüûûûúúúýýýýýýýýýýýýüüüþþþûûûþþþþþþýýýýýýþþþþþþüüüüüüùùùùùùüüüûûûþþþþþþ÷÷÷ûûûþþþþþþþþþûûûýýýûûûûûûûûûþþþþþþþþþúúúýýýýýýùùùûûûüüüþþþþþþûûûüüüþþþýýýýýýþþþüüüúúúýýýúúúüüüûûûýýýþþþüüüþþþþþþ üüüûûûúúúþþþüüüýýýûûûùùùþþþûûû÷÷÷üüüüüüþþþþþþüüüþþþøøøýýýúúú þþþþþþüüüýýýøøøþþþýýýûûûüüüýýýýýýùùùþþþ ùùùþþþýýýþþþûûûýýýýýýüüüûûûøøøþþþýýýýýýüüüþþþýýýþþþþþþþþþüüüûûûýýýúúúþþþýýýùùùþþþýýýþþþýýýüüüûûûýýý þþþýýýþþþþþþþþþþþþþþþùùù üüüøøøûûûûûûüüüùùù øøøþþþýýýýýýúúúþþþýýýýýýýýýúúúüüüþþþþþþúúúþþþúúú÷÷÷þþþýýýþþþ÷÷÷úúúýýýýýýùùùöööýýýýýýýýýüüüþþþýýýüüüüüüþþþþþþûûûýýýûûûüüüüüüýýýýýýýýýþþþþþþûûûüüüùùùþþþüüüøøøùùùûûûþþþþþþúúúûûûúúúùùùüüüþþþþþþüüüûûûýýýþþþþþþüüüûûûùùùüüüûûûþþþüüüûûûþþþýýýüüüýýýúúúûûûýýýùùùþþþüüüþþþþþþþþþýýýúúúøøøþþþüüüüüüþþþúúúüüüüüüýýýýýýþþþþþþ þþþúúúüüüüüüùùùýýýüüüüüüþþþùùùýýýýýýþþþüüüýýýúúúùùùþþþüüüööö úúúüüüýýýüüüþþþþþþøøøþþþþþþûûûûûûûûûöööüüü÷÷÷ýýýýýýýýýüüüùùùýýýúúúýýý÷÷÷þþþüüüûûûýýýýýýþþþýýýüüüúúúþþþýýý÷÷÷ûûûýýýúúúüüüþþþþþþúúúûûûýýýøøøþþþýýýüüüüüüþþþùùùþþþþþþþþþýýýýýýûûûúúúüüüþþþþþþýýýüüüýýýýýýýýýûûûüüüýýýýýýþþþúúúþþþüüüøøøýýýýýýþþþþþþûûûýýýýýýüüüýýýûûûúúúúúúþþþüüüþþþ þþþþþþúúúüüüûûûúúúþþþúúúùùùûûûúúúþþþ÷÷÷þþþúúúýýýýýýþþþþþþþþþûûûþþþýýýþþþþþþýýýøøø üüüýýýúúúýýýþþþùùùüüüùùùúúúýýýúúúûûûýýýþþþþþþýýýþþþýýýüüüþþþûûû ýýýýýýúúúúúúúúúýýýüüüùùùüüüüüüüüüþþþýýýþþþþþþþþþüüüþþþøøøüüüüüüþþþüüüûûûúúúúúúýýýýýýþþþûûûúúúþþþýýý÷÷÷úúúüüüûûûýýýýýýþþþüüüûûûúúúüüüþþþþþþûûûýýýþþþþþþûûûýýýþþþþþþþþþýýýüüüýýýýýýùùùýýýþþþûûûûûûþþþùùùþþþýýýüüüøøøúúúýýýþþþýýýüüüüüüýýýûûûýýýüüüûûûûûûýýýüüüýýýûûûþþþþþþþþþûûûüüüþþþýýýúúúýýýýýýþþþþþþýýýýýýþþþûûûüüüþþþýýýúúúûûûýýýýýýûûûýýýþþþüüüþþþùùùûûûüüüýýýüüüþþþ÷÷÷þþþýýýþþþúúú ýýýùùùûûûüüüþþþýýýûûû ûûûùùùýýýþþþþþþüüüþþþüüüüüüýýýûûûûûûùùùüüüþþþùùùþþþ þþþ úúúûûûûûûüüüúúúþþþûûûýýýýýýþþþýýýþþþüüüþþþúúúüüüûûûúúúþþþþþþ÷÷÷þþþûûûüüüýýýýýýúúúýýýýýýþþþøøø ûûûùùùüüüûûûûûûûûûùùùþþþûûûüüüþþþüüüþþþûûûúúúüüüýýýþþþþþþøøøüüüûûûüüüüüüýýýþþþúúúüüüþþþýýýþþþþþþþþþýýýþþþûûû øøøýýýûûûûûûüüüýýýþþþùùùúúúþþþþþþþþþþþþþþþþþþþþþûûûúúú þþþüüüþþþþþþþþþùùùýýýûûûþþþ ûûûûûûüüüüüüýýýýýýúúúýýýýýýýýýüüüýýýùùùþþþþþþûûûþþþüüüüüüýýýýýýùùùúúúüüüþþþþþþùùùûûûûûûúúúýýýöööýýýýýýýýýüüüüüüûûûûûûüüüýýýþþþþþþüüüþþþýýýþþþýýýúúúüüüþþþýýýúúúþþþýýýüüüûûûüüüüüüýýýüüüþþþýýýúúúüüüüüüüüüüüüþþþýýýûûûýýýùùùùùùýýýüüüýýýýýý÷÷÷ýýýûûûûûûúúúýýýýýýûûûþþþþþþýýý þþþüüüþþþüüüûûûüüüýýýþþþþþþúúúýýý ýýýûûûþþþ ýýýþþþüüüþþþýýýýýýþþþýýýþþþ þþþýýý÷÷÷üüüýýýûûûýýýûûûýýýúúú÷÷÷ ûûûþþþþþþüüüüüüþþþüüüûûûþþþúúúöööûûûþþþþþþýýýúúú÷÷÷þþþúúúüüüüüüýýýûûûþþþþþþþþþýýýüüü üüüüüüùùùûûûþþþûûûþþþýýýüüüúúúýýýýýýýýýýýýûûûþþþ þþþþþþýýýüüüûûûüüüýýý ýýýüüüûûûýýýþþþýýý÷÷÷ùùù úúúûûûþþþýýýýýýþþþûûûþþþûûûþþþûûûýýýýýýüüüýýýüüüþþþýýýýýýýýýýýýüüüýýýüüüûûûþþþþþþþþþþþþúúúûûûýýýþþþûûûþþþþþþýýýüüüûûûüüüýýýýýýûûûýýýüüüûûûþþþûûûøøøùùùûûûþþþýýýþþþýýýûûûùùùþþþüüü÷÷÷ýýýýýýøøøûûûüüüþþþúúúþþþýýýþþþýýýúúúüüüþþþ þþþýýýûûûüüüýýýýýýýýýûûûûûûüüüýýýþþþûûûúúúüüüþþþþþþùùùúúúþþþþþþþþþúúúüüüýýýþþþüüüüüüüüüýýýüüüýýýþþþûûûüüüþþþúúúýýýýýýýýýýýýúúúýýýþþþþþþþþþýýýýýýýýýüüüûûûýýýýýýýýýüüüþþþûûûüüüúúúøøøþþþüüüúúúþþþþþþþþþþþþþþþþþþýýýþþþýýýýýýýýýýýý ýýýþþþþþþýýýýýýüüüþþþüüüýýýþþþùùùøøøùùùýýýüüüüüüýýýúúúþþþþþþýýýüüüúúúüüüúúúþþþýýýúúúþþþýýýþþþýýýýýýüüüþþþþþþþþþýýýþþþ ýýýüüüýýýýýýþþþûûû ýýýýýýþþþýýý øøøþþþûûûþþþ÷÷÷úúúüüüüüüþþþýýýþþþüüüýýýþþþûûûüüüýýýùùùûûûýýýýýýýýýüüü÷÷÷úúúýýýýýýüüü÷÷÷þþþûûûýýýûûû üüü ÷÷÷úúúýýýúúúûûûûûûþþþýýýüüüýýýúúúùùùþþþûûûýýýüüüþþþ üüüþþþýýýúúúüüüýýýûûûþþþþþþýýýþþþýýýþþþûûû ýýýþþþþþþùùù÷÷÷ùùùûûûüüüûûûýýýýýýüüüúúúûûûüüüýýýýýýýýýýýýüüüöööùùùõõõüüüþþþþþþýýýýýýýýýúúúþþþþþþýýýþþþûûûúúúýýýþþþûûûüüüûûûüüüûûûüüüþþþúúúþþþýýýþþþûûûüüüúúúýýý úúúûûûýýýþþþøøøýýýùùùúúúøøøþþþúúúýýýüüüøøøúúúýýýþþþþþþùùùýýýýýýûûûùùùþþþýýýþþþûûûúúúþþþüüüûûûúúúþþþùùùýýý úúúþþþüüüúúúùùùüüüüüüùùùüüüùùùýýýþþþüüüýýýþþþùùùþþþþþþýýýþþþýýýûûûúúúûûûûûû ýýýýýýýýýùùùýýýýýýýýýüüüüüüüüüýýýýýýüüüýýýûûû ýýýþþþýýýúúúýýýþþþýýýùùùúúú úúúýýýþþþýýýøøøúúúüüüüüüüüüýýýþþþúúúüüüûûûüüüþþþþþþýýýþþþýýýûûûûûûýýýúúúûûûüüüüüüûûûøøøýýýüüüþþþüüüýýýûûûþþþýýýûûûùùùýýýûûûúúúûûûþþþýýýùùùýýýüüüþþþýýýýýýþþþüüüúúúþþþûûûúúúýýýüüüþþþýýýúúúúúúüüüûûûùùùúúúüüüúúú  ýýýüüüûûûýýýþþþýýýþþþùùùþþþýýýûûûüüüüüüüüüúúúýýýþþþûûûþþþüüüûûûúúúúúúúúúúúúûûûùùùþþþþþþþþþþþþþþþùùùüüüüüüüüü÷÷÷þþþúúúüüüüüüûûûüüüýýýúúúúúúüüüùùùùùù üüüúúúùùùûûû ýýýýýýüüüþþþþþþ þþþýýýûûûûûûùùùúúúûûûûûûýýýýýýýýýþþþýýý÷÷÷þþþþþþúúúþþþþþþþþþûûûüüüûûûþþþþþþýýýüüüýýýùùùüüüüüüúúú þþþúúúúúú ýýýýýýûûûýýýûûûþþþüüüýýýûûûüüüùùùýýýúúúûûûûûûûûûúúúþþþýýýùùùýýýþþþþþþùùùýýýýýýüüüýýýüüüúúúüüüûûûýýý þþþþþþþþþýýýþþþþþþùùùüüüùùùüüüûûûýýýþþþüüüúúúþþþýýýûûûüüüþþþ ûûûûûûûûûþþþöööýýýýýýüüüüüüþþþüüüþþþýýýüüüþþþýýýþþþýýýüüüýýýþþþþþþüüüýýýùùùýýýüüüûûûûûûþþþüüüþþþþþþúúúþþþúúúýýýþþþþþþþþþýýýþþþúúúýýýþþþöööûûûùùùþþþ üüüýýýùùùùùùþþþúúúþþþüüüýýýþþþýýýþþþûûûúúúþþþüüüýýýþþþûûû öööýýýþþþüüüûûûùùùþþþüüüúúúúúúýýýûûûýýýþþþûûûýýýþþþýýýüüüþþþýýýùùùûûû üüüúúúþþþýýýüüüýýýüüüýýýùùùþþþúúúýýý þþþùùùüüü ýýýûûûþþþüüü üüüýýýûûûûûûýýýüüüýýý ûûûùùùûûûýýýýýýþþþþþþþþþüüüûûû þþþüüü úúúúúúþþþ úúú ûûûüüüýýýúúúþþþýýý þþþûûûýýýþþþýýýøøøúúúýýý ýýýüüüùùùúúúþþþüüüûûûüüüýýýûûû üüüþþþþþþùùùüüüúúúùùùþþþ þþþþþþüüüüüüøøøûûûûûûúúúþþþþþþúúúþþþýýýþþþüüüýýýûûûúúú÷÷÷úúúüüüúúú ýýýüüüûûûùùùþþþüüüþþþýýýýýýøøøýýýûûûùùùþþþûûûþþþýýýþþþýýýúúúþþþúúúýýýúúúûûûúúúûûûüüüýýýøøøüüüýýýúúúúúúýýýøøøøøøþþþûûûþþþüüüþþþýýýýýýüüüþþþöööþþþþþþþþþúúúþþþûûûûûûùùùùùùûûûúúúúúúüüüùùùþþþúúúùùùþþþþþþýýýûûûþþþþþþûûû÷÷÷ûûûþþþýýýûûûûûûüüüþþþûûûüüüûûûþþþýýýþþþýýýþþþüüüýýýüüüüüüýýýýýýþþþøøøùùùûûûýýýüüüüüüþþþþþþþþþýýýúúúýýýûûûþþþýýýûûûúúúøøøþþþüüüùùùúúúüüüþþþþþþþþþüüüúúúýýýûûûýýýþþþýýýþþþþþþùùùýýýþþþýýýþþþýýýýýýýýýýýýþþþþþþûûûþþþ üüüûûû÷÷÷úúúþþþýýýþþþ þþþýýýýýýúúúüüüüüüüüüþþþûûûüüüøøøüüüþþþýýýýýýýýýýýýûûûýýýýýýüüüüüüþþþýýýþþþûûûþþþüüü÷÷÷ýýýýýýþþþüüü þþþ ûûûúúúúúúüüüþþþýýýûûûýýýüüüþþþüüüúúúüüüüüüþþþüüüþþþþþþ÷÷÷üüüûûûþþþýýýþþþúúúþþþûûûýýýüüüûûûþþþ üüüýýýýýýýýýýýýûûûþþþþþþúúúþþþüüüûûûûûûúúú üüüûûûýýý þþþ÷÷÷üüüþþþüüüþþþüüüúúúûûûûûûýýýúúúúúúýýýýýýýýýþþþûûûùùùþþþûûûûûûúúúöööþþþ ûûûúúúþþþûûûûûûúúúþþþûûûýýýþþþþþþüüüþþþ ýýýýýýýýýüüüýýýúúúþþþýýýþþþýýýýýýúúúýýýùùùøøøüüüøøøüüüùùùüüüþþþüüüþþþüüüýýýûûûüüüþþþþþþ÷÷÷þþþþþþûûûýýý ýýýþþþþþþüüüýýýþþþ÷÷÷üüüýýýþþþþþþúúú þþþþþþûûûûûûúúúýýýýýýþþþüüüþþþýýýúúúüüüýýýþþþüüüüüüýýýùùùüüüþþþþþþýýýúúúýýýþþþýýýýýýþþþüüüûûûûûûüüüýýýþþþúúúþþþüüüüüüûûû ûûûýýýýýýýýýýýýûûûþþþùùùþþþúúúýýýûûûúúúùùùüüüüüüþþþûûûþþþþþþúúúþþþûûûþþþýýýüüüþþþ  ûûûüüüöööýýýùùùýýýþþþþþþüüüþþþþþþûûûýýýûûûüüüúúú ýýýýýýþþþýýýüüü ýýýûûûúúúýýýýýýýýýûûûýýýûûûüüüúúúýýýýýýüüüýýýýýýùùùúúúýýýùùùûûûüüüûûûûûûüüüþþþýýýþþþýýýþþþ üüüþþþþþþúúúùùùýýýùùùýýýüüüúúúüüüýýýûûûýýýþþþþþþûûûûûûúúú þþþùùùþþþýýýýýýþþþûûûûûûüüüûûûýýýýýýþþþþþþûûûüüüûûû ûûûýýýýýýúúúþþþùùùýýýúúúýýýýýýùùùýýýýýýøøøüüüüüüþþþþþþþþþþþþûûûþþþþþþüüüýýýúúúúúúúúúûûûþþþúúúüüüúúúþþþùùùüüüýýýüüüþþþþþþüüüúúúþþþûûûüüüýýýüüüüüüýýýüüüüüüüüüýýýþþþýýýýýýþþþýýýýýýýýýüüüüüüþþþûûûûûûþþþýýýúúúýýý÷÷÷ùùùüüüúúúüüüüüüýýýþþþûûûþþþûûûýýýüüüþþþüüüþþþþþþýýýûûûùùùúúú ýýýüüüüüüúúúþþþýýýýýýùùùþþþþþþýýýþþþúúúýýýûûûýýýúúúüüüýýýþþþúúúùùùþþþøøøùùùûûûþþþúúúüüüýýýýýýüüüüüüýýýýýýüüüýýý ýýýþþþþþþ üüüþþþþþþýýý þþþþþþ÷÷÷ùùùýýý÷÷÷üüüúúúúúúþþþûûûüüüýýýùùùüüüûûûùùùþþþýýýþþþøøøùùùþþþûûûýýýþþþüüüüüüýýýüüüþþþüüüýýýýýý þþþýýýýýýúúúýýýýýýýýýþþþùùùýýýýýýþþþþþþþþþüüüþþþûûû ûûûþþþýýýùùùýýýýýýüüüùùùýýýýýý÷÷÷úúúýýýýýýýýýýýýüüüúúúþþþüüü ûûûûûû ÷÷÷ýýýüüüûûûþþþûûûþþþþþþûûûþþþþþþüüüþþþûûûýýýûûûüüüúúúûûûþþþþþþøøøýýýþþþûûû ùùùþþþþþþúúúþþþþþþþþþúúúúúúüüüúúúþþþþþþüüüþþþúúúýýýýýýþþþþþþþþþþþþýýýüüüýýýþþþýýýüüüúúúüüüþþþùùùýýý ýýýþþþûûûýýýþþþþþþüüüûûûýýýþþþ÷÷÷þþþøøøþþþþþþüüüýýýýýýþþþ þþþþþþûûûýýýþþþúúúøøøüüü ýýýþþþ ýýýûûûûûûüüüûûû ÷÷÷ýýýþþþûûûýýýùùùþþþüüüþþþþþþüüüýýýøøøûûûþþþüüüþþþýýýþþþøøøýýýûûûþþþûûûýýýþþþúúúþþþ ýýýþþþýýýýýýüüüüüüúúúüüüúúúûûûþþþýýýûûûýýýúúúüüüûûûûûûøøøþþþþþþûûûøøøþþþüüüûûûûûûýýýúúúüüüùùùúúúþþþ úúúþþþûûûûûûþþþùùùþþþüüüûûûýýýüüüùùùýýýúúúùùùþþþýýýýýýýýýþþþûûûýýýüüüùùùûûûûûûþþþýýýýýýüüüþþþýýýûûûüüüùùùþþþúúúþþþþþþüüüúúúþþþüüüúúúþþþüüüùùùþþþüüüþþþüüüûûû÷÷÷ýýýüüüüüüýýýüüüýýýýýýýýýýýýþþþûûûþþþþþþýýýþþþúúúûûûûûûûûûûûûúúúüüüûûûþþþ þþþþþþþþþýýýüüüýýýýýýýýýþþþùùùûûû÷÷÷ýýýþþþþþþþþþýýýþþþüüüùùùüüüþþþüüüüüüþþþüüüøøøýýýýýýùùùýýýþþþ üüüüüüúúúþþþþþþøøøþþþþþþýýýýýýúúúþþþþþþ÷÷÷úúúýýýúúúþþþüüüùùùüüü ûûûûûûûûûüüüüüüüüüýýýûûûöööüüüüüüúúúþþþþþþýýýþþþûûûúúúüüüþþþýýýýýýüüüûûûþþþþþþýýýúúúþþþùùùþþþúúúûûûþþþýýýüüüþþþ÷÷÷üüüýýýüüüýýýþþþüüüûûûûûû øøøýýýüüüþþþùùù ûûûúúú þþþúúúüüüüüüüüüüüüýýýüüüýýýþþþýýýþþþøøøýýýûûûþþþ ûûûüüüþþþúúúùùùýýýøøøøøøþþþ ýýýûûûöööüüüýýýþþþ ýýý÷÷÷þþþúúúýýýýýýúúúýýýüüüýýýüüüûûû øøøüüüþþþþþþûûûýýýýýýþþþýýýøøøýýýûûûúúúûûûþþþüüü ýýýúúúýýýþþþýýýøøøüüüûûûþþþþþþûûûýýýùùùþþþ÷÷÷þþþûûûùùùþþþûûûûûûþþþ þþþþþþýýýþþþþþþùùùüüüþþþþþþþþþûûûüüüüüüþþþþþþýýýûûûüüüþþþýýýúúúûûûþþþþþþýýý÷÷÷þþþüüüûûûúúúþþþþþþþþþýýýøøøþþþýýýúúúüüüþþþýýýþþþþþþüüüþþþþþþþþþüüüþþþùùùýýýþþþùùùýýýüüüüüüûûûýýýüüüþþþûûûüüüúúú  þþþýýýþþþýýýþþþþþþþþþ üüüþþþûûûýýýýýýûûûþþþüüüùùùøøøþþþýýýþþþýýý ûûûüüüøøøúúúþþþüüüþþþúúúúúúýýýüüüûûûûûûýýýþþþüüüûûûúúúþþþþþþþþþøøøüüüþþþýýýúúúûûûûûûûûûüüüüüüùùùüüüüüüøøøþþþüüüûûûýýýüüüýýýûûûøøøûûûùùùþþþýýýûûûýýýþþþ þþþþþþûûûýýýüüüýýýýýýþþþýýýþþþüüüþþþþþþýýý÷÷÷ýýýýýýýýýöööþþþýýýûûûüüüþþþýýýýýýûûûþþþþþþüüüþþþþþþþþþýýýûûûþþþýýýþþþýýýüüüúúúüüüùùùþþþþþþýýýüüüûûû þþþþþþùùùýýýûûûùùùþþþ üüüüüüþþþüüüüüü ýýýþþþýýýýýýüüüüüüøøøþþþûûûúúúþþþüüüüüüýýýþþþùùùýýýþþþùùùþþþýýý÷÷÷ýýýûûûþþþüüüüüüþþþùùùøøøüüüþþþüüüþþþûûûúúúþþþûûû þþþýýýþþþþþþ÷÷÷ýýýüüüüüüûûûûûûþþþþþþþþþ þþþýýýüüüþþþûûûþþþùùùúúúûûûøøøûûûýýýýýýûûûþþþûûûûûûúúúþþþùùù üüüúúúýýýýýýûûûýýýþþþýýýýýýýýýþþþþþþüüüúúúûûûûûûýýýýýýþþþýýýþþþüüüþþþüüüúúúûûûûûûýýýþþþýýýþþþýýýøøøüüüýýýþþþ ýýýûûûûûûüüüüüüýýýýýýýýýûûûþþþùùùûûûûûûûûû÷÷÷þþþøøøþþþüüüùùùûûûüüüýýýüüüýýýûûûúúúûûûøøøüüüþþþûûûüüüüüüüüüýýýýýýûûûûûûûûûýýýýýýûûûûûûúúúúúúýýýøøøþþþüüüùùùùùùýýýúúúþþþùùù  üüüþþþûûûýýýüüüþþþþþþýýýýýýýýýýýýýýýüüüþþþýýýþþþýýýþþþûûûþþþüüüþþþþþþýýýýýýøøøþþþùùùþþþûûûöööûûûúúúýýýýýýûûûýýýûûûüüü ûûûöööýýýýýýýýýþþþþþþûûûýýýþþþýýýýýýþþþþþþúúúþþþþþþ úúúùùùþþþýýýþþþúúúüüüþþþýýýþþþýýýþþþûûûúúúþþþûûûþþþüüüüüüúúúþþþûûûùùùþþþüüüþþþýýýýýýùùùøøøýýýüüüøøøùùùýýýüüüûûûûûûþþþùùùüüüýýýúúúûûûþþþýýýûûûüüüúúúþþþûûûþþþüüüúúúúúúûûûþþþüüüüüüüüüüüüþþþýýýþþþüüüþþþüüüþþþþþþýýýûûûüüüûûûüüü÷÷÷þþþýýýþþþüüüýýýþþþúúúùùùþþþùùùûûûùùùûûûúúúýýýþþþ  üüüýýýþþþýýýýýýüüüúúúþþþüüüþþþüüüúúúþþþ÷÷÷þþþúúúþþþüüüúúúþþþýýýûûûüüüùùùúúúüüüüüüûûûýýýýýýûûûþþþþþþþþþøøøþþþüüüúúúüüüüüüýýýþþþùùùúúúúúúúúúûûûþþþýýýýýýýýýýýý  þþþ÷÷÷þþþûûû÷÷÷þþþûûûýýýþþþþþþûûûúúúûûûþþþùùùþþþüüü úúú þþþþþþþþþþþþýýýþþþüüüþþþþþþüüüþþþýýýýýýýýýýýýüüüþþþøøøúúúýýýüüüüüü üüüþþþúúúþþþüüüýýýüüüþþþøøøøøøúúúýýýûûûùùùþþþ÷÷÷ýýýûûûýýýýýýþþþýýý ùùùùùùþþþüüüþþþýýýùùùþþþúúúüüüþþþùùùüüüþþþüüüùùùûûûþþþ þþþýýýýýýøøøüüüüüüúúúýýýûûûûûûùùùüüüþþþýýýûûûüüüüüüöööüüüüüüüüüûûûøøøøøøøøøýýýýýýúúúýýýýýýùùùûûûûûûþþþýýýøøøýýýþþþþþþûûûþþþþþþþþþýýýúúúþþþ üüüüüüýýýûûûýýýöööùùùýýýüüüûûûûûûüüüüüüýýýüüüüüüûûûûûûýýýýýýýýýûûûþþþüüüýýýüüüþþþþþþûûûýýýþþþúúúþþþ÷÷÷þþþùùùùùùüüüýýýýýýýýýúúúþþþýýý ûûûüüüõõõýýýþþþüüüûûûýýýüüüúúúýýýþþþùùùûûûøøøùùùûûûùùùýýýúúúþþþýýýûûûûûûýýýýýýúúúûûûýýýüüüþþþüüüûûûþþþûûûøøøþþþýýýùùùýýýþþþþþþûûûüüüþþþûûûþþþúúúýýýúúúþþþúúúþþþüüüþþþùùùýýýýýýúúú þþþþþþþþþþþþþþþýýýùùùúúúûûûþþþýýýûûûûûûûûûùùùúúúýýýûûûþþþúúúþþþýýýþþþ úúúúúúüüüþþþþþþýýýýýýúúúýýýþþþüüüýýýüüüþþþýýýüüüøøøþþþýýýþþþûûûüüüúúúüüüùùùùùùûûûþþþüüüûûûüüüýýýüüüþþþýýýþþþúúúúúúþþþûûûüüüùùùþþþ ûûûþþþøøøüüüüüüýýýüüüþþþûûûüüüýýýüüüúúúýýýþþþúúúþþþþþþýýýüüüûûûûûûþþþúúúüüüûûûúúúþþþþþþþþþþþþþþþþþþþþþûûûùùùýýýþþþþþþþþþþþþýýýûûûüüüùùùûûûýýýýýýüüüþþþ þþþýýýýýýýýýýýýþþþýýýýýýöööýýýüüüþþþüüüþþþþþþûûûþþþúúúýýýúúúþþþþþþþþþ þþþýýýøøøýýý÷÷÷ûûûûûûûûûþþþúúúþþþýýýûûûþþþþþþþþþýýýüüüúúúþþþýýýýýýûûû÷÷÷úúúýýýüüüþþþúúúþþþýýýüüüýýýûûûûûûüüüþþþ ùùùüüüýýýýýýþþþúúúûûûýýýýýýþþþûûûýýýþþþýýýüüüüüüýýýüüüýýýúúúûûûýýýþþþ÷÷÷þþþþþþýýýúúúûûû þþþüüüöööüüüûûûýýýýýýþþþþþþûûûþþþûûûúúúýýýþþþþþþøøøþþþýýýýýýþþþýýýþþþþþþüüüþþþúúúúúúûûûûûû ýýýýýýûûûùùùûûûýýýýýýýýýûûûþþþøøøûûûøøøøøøùùùþþþüüüùùù ýýýûûûúúúýýýúúúýýýûûûþþþýýýþþþýýýýýýúúúþþþýýýýýýýýýûûûøøøýýýüüüþþþøøøüüüüüüýýýþþþüüüþþþûûûýýýùùùýýýüüüþþþýýýþþþùùùýýýüüüüüüþþþúúúýýýûûûûûûüüüüüüýýýýýýûûûýýýýýýýýýûûûþþþûûûüüüúúúþþþþþþþþþþþþ ûûûüüüþþþúúúþþþþþþûûûûûûýýýüüüüüüþþþüüüþþþýýýýýýþþþöööþþþýýýþþþþþþþþþþþþüüüþþþýýýþþþüüüýýýþþþúúúüüüúúúúúúþþþþþþûûûûûûûûûüüüýýýýýýþþþüüüüüü÷÷÷ûûûüüüûûûþþþúúúüüüýýýþþþùùùþþþýýýýýýþþþþþþþþþøøøüüüûûûüüüûûûúúúþþþýýýþþþþþþøøøúúúþþþýýýúúúüüüýýýùùùþþþýýý þþþúúúûûûþþþûûûüüüýýýûûûýýýýýýþþþûûûüüüúúúýýýýýýþþþüüüøøø÷÷÷øøøûûûþþþüüüüüüúúúüüüûûûþþþüüüüüüüüüüüüûûûùùùøøøüüüýýýúúú þþþüüüúúúüüüúúúûûûþþþûûûýýýûûûþþþüüüýýýûûûýýýýýýúúúþþþþþþþþþúúúýýýúúúùùùþþþýýýüüüþþþýýýýýýþþþùùù ùùùþþþüüüþþþûûûúúúûûûùùùýýýúúúþþþýýýþþþþþþýýýüüüþþþýýýûûûýýýýýýýýýýýýþþþþþþúúúþþþþþþýýýûûûüüüùùùüüüþþþûûûûûûþþþûûûüüüþþþ÷÷÷ùùù÷÷÷ýýýýýýþþþûûûüüü ùùùýýýùùùùùùûûûþþþþþþúúúüüüýýýüüüûûûýýýüüüúúúþþþøøøúúúûûûýýýøøøüüüýýýûûûüüü þþþùùùüüüüüüýýýþþþþþþýýýûûû úúúýýýüüüþþþþþþùùùüüüûûûýýýþþþýýýùùùýýýûûûýýýþþþûûûøøøýýýúúúùùùýýýûûûþþþýýýýýýþþþýýýûûû÷÷÷ýýýþþþýýýüüüúúúþþþøøøþþþþþþüüüûûûüüüüüüüüüúúúýýýýýýüüüýýýüüüýýýüüüýýýûûûýýýþþþùùùýýýþþþýýýüüüþþþûûûýýýþþþûûûýýýüüüþþþþþþüüüüüü ÷÷÷þþþûûûþþþûûûûûûþþþ ùùùüüüýýý úúúúúúýýýûûûùùùþþþüüüýýýûûûùùùýýýüüüûûûýýýúúúûûûüüüþþþþþþýýýþþþüüüùùùøøøýýýûûûüüüþþþþþþþþþþþþþþþüüüýýýøøøùùùýýýüüüýýýúúúþþþùùùýýýûûû üüüýýýüüüýýýüüüùùùøøøûûûüüüýýýúúúûûûùùùþþþþþþþþþúúúþþþüüüûûûüüüýýýýýýúúúûûûþþþþþþúúúþþþþþþþþþþþþûûûüüüûûûûûûúúúùùùüüüüüüýýýôôôüüüýýýûûûþþþúúúûûûýýýýýýûûûùùùþþþûûûüüüúúúüüüýýýýýýøøøýýýûûûýýýþþþþþþøøøùùùýýýþþþûûûþþþýýýùùùþþþþþþûûûúúúþþþûûûþþþûûûûûûþþþûûûýýýûûûüüü ûûûûûûúúúþþþüüüýýýüüüþþþüüüüüüúúúþþþúúú þþþûûûûûûýýýþþþýýýüüüþþþþþþýýýþþþýýýúúúýýý ýýýþþþþþþýýýüüüýýýúúúüüüüüüýýýýýýüüüþþþûûûüüüûûûþþþùùùúúúùùùúúúüüüüüüüüüûûûüüüüüüûûûüüüýýýüüüýýý ýýýûûû þþþøøøüüüþþþûûû üüüýýýüüüþþþþþþúúúøøøþþþþþþùùùüüüþþþûûûþþþýýýýýýýýýûûûùùùþþþýýýýýýúúú þþþüüüþþþþþþýýýþþþýýýúúúùùùüüüüüüüüüûûûýýýþþþûûûüüüþþþûûûýýý üüüúúúúúúþþþþþþþþþýýýùùùûûûýýýþþþüüüýýýûûûûûûûûûùùùþþþúúúúúúûûûþþþüüü ýýýûûûùùùüüüýýýüüüþþþûûûüüüúúúüüüýýýûûûýýýþþþþþþýýýüüüüüüüüüþþþüüüûûûýýýúúúûûûúúúüüüþþþþþþþþþýýýüüüüüüýýýþþþùùùýýýúúúýýýøøøýýýúúúýýýþþþûûûýýýüüüþþþüüüûûûüüüùùùþþþýýýúúúþþþùùùþþþüüüþþþüüüþþþüüüýýýþþþùùùþþþýýýùùùýýýþþþþþþûûûþþþþþþøøøúúúúúúþþþþþþýýýùùùüüüûûûýýýûûûþþþùùùýýýýýýþþþýýýýýýýýý÷÷÷þþþýýýýýýþþþýýýýýýúúúùùùþþþüüüýýýüüüýýýþþþ üüüøøøþþþþþþùùùýýýþþþþþþüüüúúúþþþøøøúúúþþþýýýúúúýýýüüüûûûýýýýýýþþþüüüúúúýýýûûûýýýýýýøøøúúúýýýþþþøøøùùùüüüþþþþþþüüüþþþþþþüüüýýýýýýþþþøøø üüüûûûýýýýýýýýýýýýùùùþþþýýýööö ýýýüüüþþþüüüúúúýýýùùùýýýýýýþþþýýýþþþýýýûûûüüüýýýúúúüüüûûûýýýýýýþþþüüüúúúûûûþþþúúúýýýüüüúúúþþþþþþüüüüüüüüü÷÷÷üüüýýýþþþüüüþþþ÷÷÷ùùùýýý÷÷÷üüüýýýýýýüüüüüü þþþûûûûûûûûûùùùüüüùùùüüüüüüþþþúúúþþþûûûýýýúúúûûûýýýùùùüüüüüü ûûûøøøüüüþþþþþþþþþþþþþþþþþþøøøþþþ üüüüüüüüüüüüúúúýýýûûûýýýúúúþþþ þþþýýýûûûüüüþþþüüüüüüþþþþþþ ýýýþþþüüüúúúýýýüüüþþþüüüþþþüüüüüüüüüûûû ýýýþþþ÷÷÷ýýýùùù÷÷÷ûûûüüü üüüþþþþþþþþþþþþþþþ÷÷÷ ýýýùùù÷÷÷þþþþþþüüüþþþþþþþþþúúú þþþúúúùùùýýýýýýýýýùùùüüüþþþýýýýýýýýýþþþüüüýýýüüüþþþýýýþþþûûûûûûûûûúúúøøøûûûûûûýýýûûûüüüþþþúúúúúúýýýýýýüüüùùùüüüýýýþþþþþþþþþùùùýýýüüüúúúûûûúúúúúúûûûùùùýýýþþþþþþþþþúúúýýýþþþþþþúúúþþþûûûûûûüüüûûûþþþýýýúúúûûûýýýýýýùùùúúúøøø øøøþþþüüüûûûþþþúúúúúúûûûýýýþþþ üüüúúúýýýþþþùùùýýýøøøüüüþþþþþþ÷÷÷ýýýýýýþþþýýýþþþþþþýýýúúúûûûüüüþþþüüüýýýúúúýýýüüüüüü÷÷÷ùùùýýýþþþûûûúúúúúúþþþýýýüüüüüüûûûþþþüüüüüüýýýýýýûûûûûûþþþùùùýýýùùù úúúþþþüüüþþþúúúøøøûûûþþþþþþþþþûûûþþþýýýüüü ýýýüüü ýýýûûûþþþþþþýýýûûûøøøþþþýýýþþþþþþúúúýýýüüü ýýýùùùüüü ùùùþþþ þþþþþþùùùýýýþþþûûûûûûüüüùùùþþþþþþýýýùùùüüüüüüúúúûûûúúúûûûüüüúúúùùùþþþüüüüüüýýýüüüýýýþþþýýýúúúýýýýýýúúúþþþùùùüüüþþþþþþýýýúúúüüüþþþüüüøøøúúúûûûüüüþþþúúúþþþýýýúúú÷÷÷þþþýýýüüüýýýüüüþþþüüüþþþüüüùùùúúúüüüþþþýýý úúú þþþûûûüüüùùùûûûýýýýýýýýýýýýýýýüüüþþþþþþüüüüüüýýýûûûýýý üüüþþþýýýýýýúúúúúúþþþýýýüüüþþþûûûøøøýýýýýýþþþúúúýýýúúúýýýþþþüüüþþþþþþþþþýýýýýýþþþüüüþþþ ûûûûûûûûû÷÷÷ôôôùùùýýý ýýýûûûþþþýýýúúúûûûþþþûûûýýýýýýþþþýýýýýýýýýøøøýýýúúúþþþþþþùùùüüüûûû þþþùùùùùùüüüüüüþþþþþþýýýþþþüüüüüüúúúüüüýýýþþþüüüûûûýýýþþþüüüúúúüüüýýýøøøûûûüüüýýýýýýýýýþþþüüüýýýýýýþþþþþþþþþýýýüüüþþþýýýþþþýýýýýýýýýþþþýýýûûûýýýþþþþþþþþþûûûúúúýýýûûûýýýþþþüüüüüüüüüþþþûûûýýýúúú þþþüüüüüüüüüüüüýýýýýýûûûüüüýýýüüüûûûûûûýýýýýýüüüúúúüüüüüüýýýýýýþþþþþþþþþûûûüüüþþþüüüüüüþþþüüüýýýýýýûûûýýýþþþøøøûûûüüüýýýýýýúúúþþþ÷÷÷üüüþþþýýýúúúþþþþþþþþþûûûûûû üüüüüüüüüüüüúúú ýýýýýýüüüûûûýýýûûûþþþûûûýýýýýýýýýþþþûûûüüüûûûúúúúúúþþþüüüúúúüüüùùùþþþ øøø ýýýýýýþþþúúúüüüüüüýýýûûûûûûþþþýýýýýýýýýúúú÷÷÷øøøùùùýýýýýýþþþþþþûûûüüüüüüúúúýýýþþþüüüüüüùùùûûûýýýûûûþþþúúúüüü÷÷÷üüüýýý ûûûûûûùùùüüüûûû ýýýýýýúúú÷÷÷þþþýýýúúúþþþýýýøøøþþþüüüþþþýýýûûû þþþýýýùùùüüüýýýýýýüüüúúúûûûþþþýýýûûûûûûýýýùùùûûûûûûûûûûûûüüüüüüþþþüüüþþþúúúþþþüüüüüüùùùûûûùùùüüüùùù ùùùýýýüüüüüüþþþûûûþþþþþþþþþüüüýýýûûûúúúþþþûûû üüüþþþúúúýýýþþþýýýûûûúúúüüüýýýýýýûûûüüüùùùûûûüüü þþþþþþþþþýýýúúúûûûþþþúúúþþþ ûûûþþþýýýøøøýýýþþþýýýúúúúúúúúúþþþýýýþþþùùùüüüûûûþþþþþþüüüþþþýýýþþþýýýýýýûûûýýýýýýûûûþþþýýýúúúýýýüüüýýýýýý üüüþþþüüüýýýýýýýýýþþþýýýûûûüüüüüüüüüüüüüüüüüüýýýûûûýýýùùùùùùüüüüüüýýýüüüüüüþþþýýýþþþþþþøøøûûûüüüüüüøøøûûûþþþýýýüüüýýýúúúýýýýýýþþþûûûøøøûûûýýýþþþýýýüüüýýýûûûüüüúúúúúúöööýýýýýýýýýýýýùùùùùùüüüüüüþþþüüüüüüýýýûûûýýýùùùýýýýýýþþþþþþúúúûûûúúúüüü úúúþþþúúúûûûýýýþþþüüüûûûþþþþþþþþþþþþüüüúúúþþþýýýüüü ûûûùùùüüüøøøüüüüüüýýýüüüþþþýýýýýý üüüúúúþþþþþþþþþþþþúúúýýýûûûþþþýýýýýýýýýýýýûûûûûûûûûþþþûûûüüüýýýýýý÷÷÷ýýýýýýþþþúúúýýýûûûýýýúúúþþþýýýýýýúúúüüüüüüûûûþþþøøøøøøþþþþþþüüüüüüýýýýýýûûûùùùýýýþþþýýý ûûûüüüþþþûûûüüüþþþýýýûûûûûûýýýþþþ üüüüüüüüüýýýúúúüüüýýý þþþþþþþþþøøø þþþüüüýýýûûûþþþüüüúúúûûûüüüþþþýýýþþþúúúúúúýýýûûû þþþþþþýýýúúúûûûþþþþþþþþþüüüþþþùùùüüüúúúüüüýýýûûûýýýúúúüüü ýýýüüüøøøüüüþþþýýýþþþýýýùùùýýýúúúúúú øøøûûûûûûýýýüüüýýýþþþ þþþöööþþþýýýýýýýýýüüüúúúûûûøøøýýýüüüþþþùùù þþþûûûþþþþþþ÷÷÷ùùùþþþúúúùùùþþþûûûûûûýýýüüüûûûùùùúúú÷÷÷üüüýýýúúúüüüþþþüüüùùùüüü üüüûûûþþþýýýþþþúúúþþþüüüþþþýýýþþþþþþüüüþþþùùùýýýýýýþþþûûûýýýþþþúúúýýýûûûþþþüüüýýýþþþþþþ  þþþþþþþþþúúúþþþûûûýýýùùùûûûþþþþþþúúúýýýüüüûûûüüüýýýøøøþþþ  ýýýýýýûûûûûûùùùüüüûûûúúúþþþþþþûûûüüüüüüûûûûûûýýýýýýúúúúúúýýýúúúûûûþþþ úúúûûû ûûûþþþ÷÷÷ýýýýýýþþþþþþýýýýýýøøø üüüýýýüüüþþþþþþüüü÷÷÷ûûûüüüúúúüüüýýýûûûýýýúúúýýýþþþþþþüüüùùùþþþüüüûûûüüüþþþýýýùùùýýýüüüúúúöööþþþúúúüüüþþþúúúüüüúúúþþþþþþýýýúúúûûûþþþûûûûûûýýýþþþþþþúúúýýýþþþûûûúúúüüü þþþþþþþþþùùùýýýþþþþþþýýýýýýþþþþþþþþþúúúûûûüüüýýýþþþ÷÷÷öööýýýþþþüüüüüüùùùþþþýýýúúúýýýüüüùùùüüüùùùþþþùùùõõõüüüûûûþþþúúúüüüùùùýýýýýýþþþûûûüüüúúúýýýþþþþþþýýýüüüûûû þþþüüüþþþýýýùùù ýýýþþþþþþþþþýýýûûûùùùûûûþþþùùùýýýþþþýýýþþþûûûýýýúúúûûûþþþúúúþþþüüüøøøýýýýýýúúúþþþþþþüüüüüüýýýüüüüüüúúúúúúûûûýýýýýýùùùüüüþþþþþþþþþþþþüüüþþþþþþüüü ýýýýýýþþþþþþûûûýýýûûûþþþýýý ýýýýýý ûûûþþþüüüýýýùùùúúúýýýþþþþþþþþþýýýýýýýýý üüüþþþþþþùùùýýýýýýúúúüüüüüüûûûúúú üüüûûûûûû ûûûýýýûûûüüüýýýüüüüüüûûûýýýûûûþþþþþþ øøøýýýúúúýýýýýýüüüüüüüüüüüüþþþüüüüüüþþþüüüþþþþþþüüüþþþýýýþþþþþþþþþûûûþþþýýýûûûýýýýýýýýýûûûýýýúúúúúúûûûüüüûûûúúúýýýþþþþþþûûûüüüýýýüüüûûûþþþþþþþþþýýý ýýýüüüýýýüüüþþþùùùøøøûûûýýýúúúýýýýýýýýýýýýúúúýýýþþþ ýýýþþþúúúûûûûûûùùùþþþþþþüüüûûûýýýúúúýýýþþþûûûýýýûûû þþþýýýþþþþþþþþþýýýüüüýýýþþþüüüûûûûûû üüü öööùùùùùùùùùýýýúúúþþþûûûþþþùùùþþþþþþýýýýýýþþþùùùüüüýýý þþþýýýùùùþþþ þþþþþþûûûûûûüüüýýýþþþþþþþþþüüüþþþüüüþþþýýýüüüüüüýýýüüüþþþþþþýýýýýýüüüþþþ ûûû þþþþþþüüüþþþüüüýýýýýýýýýúúúüüüýýýúúúúúúýýýýýýýýýýýýþþþþþþüüüûûûþþþüüüüüüúúúþþþûûûüüüüüüþþþþþþýýýûûûþþþþþþûûûþþþýýýûûûùùùøøøüüüûûûùùùúúúûûûûûûþþþûûûþþþýýý ÷÷÷ýýýþþþýýýþþþþþþúúúþþþúúúøøøûûûþþþüüüüüüûûûüüüþþþüüüûûûþþþþþþýýýþþþýýýøøøûûûüüüþþþþþþþþþþþþþþþûûûúúú ýýýþþþûûûýýýøøøýýýúúúþþþüüüûûûþþþüüüþþþþþþûûûýýýþþþøøøýýýþþþûûûþþþúúúýýýýýýýýýþþþüüüþþþüüüþþþüüüûûûüüüþþþúúúúúúþþþùùùüüüûûûþþþýýýøøøþþþýýýûûûüüüûûûúúúüüüþþþþþþùùùýýýûûûüüüþþþúúúûûûþþþþþþþþþþþþþþþüüüþþþþþþûûûüüüúúú þþþýýýýýýûûûþþþûûûúúúþþþýýýûûûûûûþþþúúú÷÷÷ûûûúúúüüü ýýý üüüþþþûûûþþþûûûýýýûûûþþþøøøüüüûûûûûûýýýüüüýýýýýýúúúýýýýýýýýýüüüùùùüüüüüüþþþýýý þþþüüüþþþþþþüüüþþþüüüûûûûûûýýýüüüúúúüüüþþþüüüûûûýýýûûûûûûûûûüüüýýýûûûýýýûûûüüü üüüüüüþþþýýýüüüýýýýýýüüüþþþúúúýýýþþþýýýûûûþþþýýý þþþûûûþþþýýýúúúþþþþþþúúúûûûûûûøøø÷÷÷ûûûýýýþþþþþþþþþüüüþþþøøøüüüúúúþþþþþþüüüùùùùùùøøøúúúþþþûûûûûûýýýýýýþþþýýýýýýýýýþþþýýýúúúüüüþþþøøøþþþûûûüüüþþþýýýýýýúúúþþþôôôþþþùùùýýýþþþûûûþþþüüüýýýüüüþþþýýýùùùýýýþþþüüüþþþüüüüüüýýýûûûýýýýýýüüüüüüýýýûûûþþþüüüúúúþþþùùùýýýøøøûûûúúúýýýúúúþþþüüüüüüùùùûûûúúúþþþûûûüüüøøøþþþþþþýýýûûûýýýöööüüüüüüþþþýýýøøøüüüüüüýýýþþþýýýöööþþþüüüüüüüüüþþþþþþýýýýýýþþþ þþþþþþûûûüüüýýýùùùüüüüüüþþþüüüþþþýýýûûûûûûûûûþþþúúúûûûþþþûûûþþþûûû þþþýýýüüüûûûüüüûûûüüüüüüüüüüüüþþþýýýüüüýýýúúúüüüûûûùùùþþþþþþýýýüüüüüüüüüùùùýýýýýýüüüüüüþþþýýýüüüüüüýýýýýýùùùýýýþþþüüüýýýúúúýýýûûûûûûüüüüüüöööýýýþþþüüüûûûþþþøøøûûûþþþþþþþþþûûûüüüýýýûûûúúúúúúþþþüüüþþþþþþþþþüüüýýýüüüýýýúúúúúúýýýýýýýýýýýýþþþþþþùùùüüüýýýüüüûûûùùùýýýõõõþþþúúúüüüþþþþþþûûû öööûûûýýýüüüýýýüüüüüüøøøýýýùùùûûûýýýûûûüüü þþþüüüþþþûûûüüüýýýûûûýýýþþþûûûûûûûûûýýýþþþýýýúúúûûûüüüüüüþþþûûûýýýþþþùùùúúú þþþ þþþþþþýýýýýýüüüúúúûûûýýýùùùýýýõõõýýýýýýýýýüüüþþþýýýüüüüüüúúúýýýýýýøøøþþþ úúúýýýøøøüüüûûûûûûþþþþþþüüüþþþþþþþþþþþþþþþüüüþþþþþþüüüûûûúúúþþþýýýüüüüüüûûûüüüþþþüüüöööüüüýýýüüüýýýûûûúúúûûûúúúýýý ûûûþþþýýý þþþþþþþþþþþþþþþúúúøøøýýýûûûûûûüüü÷÷÷üüüüüüûûûúúúýýýúúúúúú÷÷÷÷÷÷ýýýüüüûûû÷÷÷ýýýüüüûûûþþþ üüüûûûýýýýýýþþþúúúþþþúúúýýýýýýüüüüüüûûûþþþüüüüüüýýýúúúþþþüüüýýýûûûüüüýýýýýýþþþúúúýýýüüüüüüýýýýýýþþþúúúõõõúúúþþþýýýüüüüüüûûûûûûüüüýýýýýýýýýþþþþþþýýýüüüþþþþþþùùùüüüúúúþþþüüüþþþööööööþþþþþþüüüúúúþþþüüüþþþþþþýýýþþþûûûþþþøøøþþþúúúùùùúúúýýýúúúþþþüüüûûûüüüúúúúúú ýýýýýýùùùþþþúúú ýýýþþþúúúþþþüüüûûûüüüýýýûûûþþþýýýýýýüüüþþþýýýüüüüüüþþþüüüþþþýýýþþþøøøûûûûûûýýýûûûýýýüüüþþþøøøüüüýýýýýýþþþúúúüüüüüüøøø þþþüüüûûû øøøþþþþþþúúúýýýþþþþþþýýýüüüýýýûûûûûûýýýþþþüüüüüüþþþþþþùùùùùùúúúüüüþþþýýýúúúüüüùùùüüüþþþýýýüüüüüüþþþýýýþþþþþþûûûüüü þþþùùùùùùüüüüüüþþþýýýþþþúúúüüüþþþþþþúúúýýýýýýþþþþþþüüüüüüþþþþþþûûûûûûþþþýýý÷÷÷ûûûþþþýýýúúúüüüüüüüüüúúúüüüüüüþþþøøøüüüüüüüüüýýýùùùýýýþþþþþþùùùûûûüüüþþþýýý þþþþþþýýýüüüþþþúúúþþþþþþúúúûûûþþþüüüýýýýýýøøøýýýüüüøøøûûûþþþþþþûûûýýý øøøûûûúúúýýýüüüýýýýýýûûûüüüýýýüüüþþþûûûûûûþþþüüüûûûùùùýýýþþþþþþûûûüüüûûûýýýûûûþþþþþþþþþûûûþþþúúúýýýýýýþþþøøøþþþøøøúúúýýýúúúþþþüüüüüüúúúþþþ ýýýþþþûûûüüüûûûþþþþþþþþþüüüûûûýýýûûûúúúûûûþþþüüüùùùûûûýýýøøøûûûùùùúúúûûûúúúýýýýýýúúúüüüüüüýýýüüüúúúüüüýýýýýý üüüþþþüüüþþþýýýüüüüüüüüüýýýúúúüüüúúúøøøýýýüüüýýýþþþýýýþþþ þþþýýý ýýýûûûýýýüüüþþþúúúýýýúúúýýýúúúúúúþþþ þþþûûûûûûýýýúúúüüüúúúùùùúúúøøøüüüûûûùùùûûûþþþþþþýýýþþþüüüþþþýýýýýýüüüûûûùùùýýýúúúýýýþþþþþþþþþüüüúúúþþþýýýýýýüüüþþþþþþ ùùùûûûþþþüüüþþþýýýþþþýýýüüüþþþøøøüüüùùùýýýüüüûûûþþþüüüþþþþþþüüüýýýøøøùùùþþþúúúýýýýýýüüüüüüûûûûûûþþþþþþüüüýýýûûûüüüþþþýýýýýý ýýýûûûýýýþþþ÷÷÷ýýýûûûüüüýýýùùùùùùþþþûûûýýýþþþ þþþüüüýýýýýýûûûüüüþþþûûûþþþþþþüüü þþþüüüúúúþþþþþþþþþüüüýýýûûû ûûûýýýüüüùùùýýýýýýýýýýýý ýýýþþþüüüûûûöööþþþûûûüüüûûûûûûþþþüüüûûûûûûþþþûûûþþþúúúùùùûûûýýýúúúýýýüüü ûûûöööýýýûûûþþþùùùúúúûûûüüüüüüúúúþþþþþþûûûþþþüüüúúúþþþúúúûûûýýýþþþþþþüüüüüüùùùþþþýýýþþþþþþ ýýýûûûûûûþþþ  üüüüüüüüüþþþüüüüüüþþþýýýùùùþþþþþþüüüþþþýýýûûûýýýúúúýýýþþþþþþýýýûûû üüüýýýýýýùùùþþþþþþüüüüüüþþþûûûûûûúúúûûûþþþúúúþþþüüüûûûûûûýýýüüüüüüüüüþþþþþþýýýûûûûûûúúú þþþþþþùùùþþþþþþøøøþþþ÷÷÷ùùùûûûýýýþþþúúúþþþüüüþþþþþþøøøýýýþþþþþþüüüþþþýýýþþþüüüüüüþþþûûûûûûýýýûûûýýýþþþýýýþþþýýýþþþûûûüüüûûûûûûýýýýýý ýýýýýýþþþýýýúúúýýýýýýûûûúúúûûûýýýûûûþþþþþþüüüüüüýýýûûûûûûüüüþþþþþþþþþþþþúúúüüüüüüýýýüüü÷÷÷ýýýûûûþþþýýýüüüûûûýýýüüüýýýþþþúúúûûûúúúûûûúúúýýýýýýûûûüüüüüüûûûþþþûûûüüüþþþøøøýýýüüüúúúþþþûûûýýýþþþýýýýýýþþþþþþýýýùùùýýýþþþýýýýýýþþþ þþþüüüùùùýýýýýýùùùúúúùùùþþþüüüüüüüüüþþþüüüþþþýýýûûûøøøýýýûûûþþþþþþýýýýýýûûûúúúûûûûûûýýýýýýüüüýýýýýýüüüþþþüüüúúúþþþþþþþþþýýýüüüüüüùùùüüüúúúûûûûûûýýýùùùþþþþþþùùùüüüøøøûûûþþþúúúþþþûûûþþþýýý ûûûýýý ýýýüüüüüüþþþýýýþþþüüüüüüþþþùùùùùùþþþøøøýýý ýýýþþþüüüþþþþþþúúúûûûþþþþþþþþþýýýûûûüüüýýýþþþýýýüüüüüüþþþûûûüüüúúúúúúýýýüüüýýýþþþöööüüüþþþüüüýýýúúúþþþöööüüüþþþþþþùùùýýýûûûûûûþþþýýýúúúüüüþþþ  þþþýýýüüüüüüýýýýýýûûûûûûùùùþþþýýýùùùûûûþþþ ýýýþþþõõõþþþþþþþþþþþþùùùüüüúúúýýýþþþöööüüüüüüýýýýýýøøøúúúûûû÷÷÷üüüûûûýýýúúúýýýþþþûûûýýýöööþþþûûûþþþúúú üüüþþþþþþúúúþþþúúúüüüþþþüüüþþþúúú ûûûûûûûûûýýýþþþ ýýýþþþþþþûûûüüüúúúúúúþþþúúúüüüúúúþþþýýýýýýüüüüüüýýýûûûüüüûûûúúúýýýþþþûûûúúúúúúûûûýýýþþþýýýüüüúúúúúúýýýþþþþþþûûûþþþþþþúúúûûûôôôûûûýýýüüüüüüþþþþþþ ýýýúúú ýýýùùùüüüýýýþþþûûûüüüýýýþþþþþþúúúùùùþþþþþþþþþþþþüüüþþþüüüýýýüüüýýýüüüýýýùùùýýýýýýûûûúúúýýýýýýþþþýýýûûûþþþýýýýýý öööûûûýýýûûûùùùýýýûûûúúúþþþþþþþþþþþþýýý þþþýýýþþþýýýýýý÷÷÷þþþûûûþþþýýýüüüýýý÷÷÷ûûûýýýüüüüüüûûûþþþýýýýýýþþþþþþüüüüüüüüüüüüûûûûûûüüüûûûýýýþþþþþþøøøüüüþþþýýýþþþúúúøøøûûûþþþüüüþþþýýýüüüþþþûûûþþþûûûýýýþþþüüüýýýúúúûûûýýýûûûþþþýýýúúúþþþýýýüüüúúúþþþüüüýýýüüüýýýüüüýýýþþþüüüþþþýýýõõõüüüüüüþþþ÷÷÷ûûûýýýþþþùùùþþþýýýþþþ üüüúúúýýýûûû þþþýýýûûûþþþþþþüüüûûûýýýüüüþþþýýýþþþüüüûûûüüüûûûüüüýýýþþþýýýþþþþþþþþþûûûøøøþþþþþþüüüûûûüüüùùùýýýüüüþþþûûûþþþýýýþþþüüü÷÷÷þþþþþþúúúýýýúúúûûû úúúþþþþþþýýýýýýüüü÷÷÷üüüúúú þþþûûûþþþþþþþþþþþþúúúúúúýýý÷÷÷ùùù þþþþþþ þþþýýýöööùùùüüüýýýüüüýýýýýýýýýþþþþþþ þþþýýýýýýþþþþþþþþþýýýüüüþþþûûûýýýúúúûûûþþþ ûûûýýýúúúþþþþþþûûûüüüûûûùùùþþþýýýûûûûûûýýýüüü üüüþþþýýýþþþýýýüüüüüü üüüýýýûûûþþþ þþþúúúûûûýýýýýýûûûýýýüüüüüüþþþûûûþþþþþþþþþýýýüüüýýýþþþûûûúúúúúúúúú ùùùþþþþþþýýýúúúþþþøøøþþþûûûýýýùùùýýýýýý úúú üüüüüüûûûþþþþþþüüüþþþ÷÷÷þþþþþþýýýùùùþþþûûûýýýþþþþþþ ýýýûûûþþþþþþùùùüüüøøøþþþþþþýýýþþþüüüüüüüüüýýýüüüþþþþþþýýýùùùýýýýýýþþþüüüûûûþþþûûûøøøøøøûûûüüüûûûþþþûûûþþþþþþýýýúúúþþþúúúþþþûûûþþþûûûýýýüüüûûûþþþýýýþþþþþþüüüýýýþþþþþþþþþüüüùùùüüüþþþüüüûûûýýýüüüùùùýýýüüüúúú úúúýýýüüüýýýýýýúúúøøøýýýùùùþþþüüüùùùùùùýýý øøøýýýúúúþþþýýýúúúûûûýýýûûûûûûýýýýýýùùùúúúúúúýýýýýý ÷÷÷ýýý÷÷÷ûûûùùùûûûûûûýýýþþþûûûüüüúúúûûûüüüýýýþþþûûûþþþûûûýýýýýýýýýþþþ ûûûùùùùùùþþþüüüýýýýýýüüüýýýýýýúúúþþþþþþûûûøøøþþþøøøýýýûûû ýýýþþþüüüüüüýýýýýýþþþþþþýýýýýýþþþùùùýýýûûûþþþýýýüüüüüüþþþþþþþþþúúúýýýüüüúúúýýýþþþüüüûûûúúúûûûøøøûûûûûûþþþþþþùùùýýý ûûûþþþýýýüüüüüü ùùùûûûýýýþþþùùùûûûþþþüüüýýýüüüúúúûûûúúúýýýûûûþþþúúúúúúþþþøøøúúúúúúþþþþþþûûûùùùüüüûûûúúúýýýýýýþþþüüüüüüùùùüüüûûû üüüûûûûûûýýýþþþýýýûûûüüüýýýýýýýýýýýýþþþ÷÷÷úúúýýýüüüûûûøøøùùùýýýüüüýýýýýýýýýüüüýýýùùùýýýþþþöööûûûýýýþþþ÷÷÷ýýýþþþüüüþþþþþþýýýþþþþþþ÷÷÷ûûûúúúúúúüüüüüüüüü þþþüüüúúúüüüýýýûûûþþþûûûüüüþþþþþþþþþøøøüüüþþþþþþþþþûûûþþþþþþüüüýýýýýýüüüþþþøøøüüüüüüüüüüüüüüüýýýýýýþþþùùùýýýþþþýýýýýý÷÷÷þþþüüüüüüþþþýýýüüüýýýûûûúúúýýýúúúüüü÷÷÷üüüúúúùùùüüüûûûýýýýýýùùù úúúýýýúúúøøøüüüüüüþþþúúúýýýùùùûûûþþþþþþþþþûûûýýýþþþüüüùùùûûûüüüüüüýýýõõõýýýýýýüüüþþþüüüûûûýýýûûûýýýüüüþþþþþþûûûüüüþþþüüüúúúýýýýýýýýýþþþùùùûûûþþþýýýüüüþþþýýýûûûýýýûûûúúúúúúúúúþþþþþþüüüþþþýýýúúúþþþûûûûûûüüüüüüûûûþþþûûûýýýýýýþþþøøøûûûýýýúúúþþþþþþüüüþþþûûûýýýüüüýýýüüüþþþøøøýýýþþþúúúýýýýýýüüüþþþþþþýýýþþþýýýþþþûûûþþþüüüýýýüüüþþþþþþúúúûûûþþþüüüýýýüüüüüüýýýþþþûûûúúúýýýùùùùùùþþþþþþýýýüüüüüüýýýþþþýýýûûûþþþûûûýýýþþþüüüþþþ üüüùùùþþþúúúøøøþþþúúúúúú÷÷÷ýýýüüüýýýþþþýýý þþþúúúýýýýýýúúúúúúûûûýýýùùùúúúùùùüüüþþþûûûýýýþþþþþþüüüþþþýýýùùùüüüùùùüüüøøøüüüþþþûûûüüüûûûüüü üüüþþþýýýýýýûûûøøøþþþýýýùùùúúúþþþþþþþþþûûûýýýûûûüüüûûûøøøüüüüüüüüüýýýûûûûûûýýýþþþþþþýýýùùù ýýýúúúþþþ üüüúúúýýýüüüþþþþþþýýýüüüýýýþþþþþþýýýýýýþþþþþþþþþþþþýýýúúúùùù þþþþþþþþþúúúýýýúúúüüüûûûýýýýýýöööûûûþþþûûûüüüþþþùùùþþþýýýüüüøøøøøøûûûýýýýýýûûûüüüýýýýýýýýýùùùúúúúúúýýýþþþ÷÷÷üüüüüüýýýúúúùùùþþþýýýûûûþþþþþþùùùøøøúúúýýýúúú  þþþýýýþþþûûûüüüýýýþþþþþþýýýõõõ þþþüüüùùùýýýúúúúúúûûûüüüþþþýýýùùùþþþþþþüüüýýýýýýýýýþþþþþþþþþýýýýýýýýýþþþüüüýýýýýýüüüþþþþþþþþþûûûþþþüüüûûûûûûýýýøøøüüüþþþûûûýýýþþþýýýýýýþþþüüüüüüýýýýýýþþþýýýüüü÷÷÷ùùùþþþýýýüüüùùùüüü ýýýüüüûûûýýýûûûüüüýýýüüüþþþþþþþþþúúúýýýýýýýýýúúúúúúýýýþþþ üüüýýý þþþþþþþþþûûûûûûýýýüüüýýýþþþúúúüüüøøøþþþöööúúúûûûýýýüüüûûûøøøûûûýýýýýýýýýþþþùùùùùùýýýüüüþþþýýýûûûþþþýýýûûûúúúýýýýýýúúúýýýüüüþþþüüüþþþþþþýýýþþþûûûûûûûûûþþþüüüþþþúúúýýýûûûýýý ýýýýýýùùùþþþþþþþþþúúúûûûýýýýýýúúúùùùùùùúúúúúúüüüýýýúúúýýýþþþþþþýýýüüüþþþýýýþþþýýýüüüýýýþþþýýýøøøýýýüüüüüüûûûûûûýýýþþþýýýüüüûûûûûûûûûþþþþþþùùùüüüýýýýýýþþþýýýüüüüüüýýýýýýþþþ÷÷÷þþþùùùúúúþþþüüüùùù úúúûûûþþþþþþúúúûûûýýýùùùüüüýýýþþþþþþüüü úúúûûûûûûýýýüüüþþþýýýûûûûûû÷÷÷ýýýüüüþþþüüüûûûþþþ ýýýûûûøøøüüüþþþûûû þþþüüüþþþþþþúúúþþþüüüüüüûûûüüüûûûûûûþþþ ûûûýýýþþþýýýûûûüüüüüü þþþúúúüüüýýýþþþúúúþþþüüüþþþþþþüüüýýýýýýþþþýýýûûûýýýþþþúúúþþþúúúýýýþþþüüüýýýüüüúúúýýýúúúþþþüüüûûûþþþûûûýýýþþþýýýúúúþþþüüüýýýüüüýýýûûûúúúøøøýýýýýýþþþüüüüüüùùùûûûûûûýýýüüüýýýûûûúúúûûûþþþüüüýýýýýýüüüýýýþþþþþþþþþûûûüüüýýýþþþûûûþþþþþþýýýùùùýýýûûûþþþùùùýýýýýýüüüýýýüüüýýýþþþüüüúúúþþþþþþþþþúúúûûûýýýýýýýýýûûûüüüûûûúúúûûûýýýüüüþþþþþþþþþûûûýýýþþþýýýþþþþþþùùùýýý÷÷÷ûûûüüüýýýüüüûûûýýýüüüþþþþþþýýýüüüýýýýýýþþþøøøþþþúúú ýýýþþþ ùùùýýýüüüþþþ þþþüüüýýýûûûüüüþþþþþþûûû þþþþþþþþþþþþüüüúúúüüüýýýýýýþþþþþþüüüþþþþþþþþþùùùþþþüüüýýýýýýþþþýýýüüüþþþúúúýýýûûû÷÷÷þþþüüüûûûþþþúúúüüüýýýþþþüüüþþþýýýýýýþþþùùù÷÷÷ûûûüüüüüüúúúüüüüüüûûûýýýûûûþþþüüüüüüýýýþþþûûûüüüþþþýýýûûûûûûýýýýýýüüüûûûþþþ üüüþþþþþþüüüþþþýýýýýýþþþýýýþþþüüüüüüûûûýýý þþþüüüýýýüüüþþþûûûúúúýýýýýýüüüþþþûûûþþþüüüþþþüüüþþþúúúûûûýýýþþþûûû ùùùþþþýýýýýýýýýþþþøøøþþþüüüþþþûûûüüüøøøþþþûûûþþþûûûüüüýýý÷÷÷þþþþþþýýýüüüûûûýýýýýýýýýýýýþþþûûûýýýûûûþþþüüüþþþýýýúúúþþþýýýýýýþþþ ýýýúúúüüüþþþþþþøøøúúú þþþþþþ þþþûûûüüü÷÷÷þþþûûûþþþùùùúúúüüüýýýüüüûûûýýýüüüüüüüüüþþþüüüþþþ ùùùùùùûûûýýýûûûúúúüüüùùùýýýþþþýýýùùùùùùøøøüüüûûûùùùûûûúúúýýýûûûþþþûûûþþþüüüýýýýýýþþþþþþüüüüüüûûûùùùøøøþþþþþþúúúýýýûûûùùùúúúþþþûûûþþþûûûþþþýýýþþþþþþüüüüüüüüü ûûûýýýøøøþþþþþþýýýùùùþþþüüüüüüýýýüüüûûûüüüüüüüüüþþþþþþùùùþþþùùùýýýüüüûûûþþþýýýúúúýýýøøøüüüûûûþþþüüüüüüûûûüüüýýýüüüüüüûûûúúúþþþýýýýýýþþþùùùüüüþþþþþþûûûþþþýýýýýýþþþýýýúúúþþþýýýúúúþþþýýýüüüùùù ýýýöööúúúûûûýýýþþþüüüþþþýýýþþþþþþúúúýýýþþþýýýýýý þþþùùùýýýùùùüüüýýýþþþþþþøøøûûûþþþûûûûûûúúúýýýþþþýýýþþþþþþüüüþþþþþþýýýýýýýýýþþþýýýûûûûûûþþþþþþ÷÷÷÷÷÷üüüþþþúúúúúú üüüûûûûûûýýýýýýùùùüüüýýýüüüýýýûûû ùùùúúúûûûþþþþþþ ýýýþþþýýýýýýöööþþþþþþþþþúúú ûûûûûûúúúûûûþþþþþþþþþþþþþþþùùùþþþùùùþþþúúúýýýüüüþþþúúúüüüþþþúúúýýýüüüýýýùùù÷÷÷øøøþþþøøøýýýþþþùùùþþþþþþøøøøøøùùùúúúûûûþþþûûûýýýýýýþþþýýýûûûþþþüüüþþþûûûûûûûûûþþþúúúþþþþþþþþþþþþþþþþþþþþþùùùüüüþþþþþþþþþþþþüüüûûûüüüüüüúúúþþþ ýýýûûûøøøýýýþþþýýýþþþûûûüüüûûûúúú÷÷÷úúúþþþþþþ üüüüüüúúúùùùýýýüüü úúúþþþúúúùùùøøøþþþþþþþþþ÷÷÷ýýýùùùþþþúúúüüüüüü ýýýùùùýýýþþþþþþúúúþþþýýýýýýûûûþþþýýýýýýþþþüüüýýýþþþûûûüüüùùùüüüþþþþþþþþþüüüúúúûûûþþþýýýùùùüüüüüüþþþúúúûûûþþþþþþýýýüüüýýýüüüþþþýýýýýýüüüýýýýýýþþþüüüúúúöööýýýüüüþþþûûûüüüúúúþþþýýýûûûúúúþþþöööûûûýýýýýýüüüþþþþþþþþþúúúþþþûûûþþþúúú þþþýýýýýýýýýûûûþþþüüüøøøüüüýýýøøøþþþûûûýýýûûûýýýþþþùùùùùùüüüþþþþþþúúú ýýý ýýýýýýøøøþþþùùùùùùýýýüüüýýý ýýýüüüùùùûûûþþþþþþþþþþþþûûûýýýþþþùùùþþþþþþøøøüüüþþþþþþþþþúúúüüüýýýûûûþþþýýý÷÷÷üüüýýýýýýþþþþþþþþþúúúúúúúúúþþþúúúüüüüüüûûûþþþýýýüüüþþþüüüûûûúúúþþþöööþþþþþþýýýüüüþþþúúúþþþüüüþþþ üüüüüüþþþþþþúúúüüüüüüýýýûûûüüüüüüþþþþþþýýýùùùûûûýýýüüüüüüýýýúúúúúúþþþþþþüüüþþþþþþþþþúúúüüüüüüýýýýýýúúúûûûüüüüüüþþþþþþþþþþþþþþþýýýùùùýýýøøøúúúþþþþþþþþþúúúþþþûûûýýýþþþüüüùùùûûûþþþùùùüüüþþþûûûüüüüüüþþþüüüýýýþþþúúúúúúüüüüüüüüüýýýþþþ þþþüüüþþþúúúþþþýýýöööþþþ þþþýýýýýýýýýýýýþþþûûûýýýúúúûûûþþþýýýþþþýýýûûûþþþûûûþþþùùùùùùüüüøøøýýý÷÷÷üüüýýýýýýûûûüüüþþþ ýýý÷÷÷úúúúúúýýýøøøþþþûûûþþþýýýüüüúúúýýýüüüüüüýýýøøøüüüþþþþþþüüüùùùûûûýýýúúúùùùüüüûûûýýýýýýþþþ üüüûûûýýýþþþýýýýýýûûûûûûýýýüüüùùùþþþ þþþþþþýýýüüüúúúýýýüüüýýýûûûûûûúúúûûûüüüþþþýýýýýýùùùüüüüüüþþþþþþüüüýýýüüüþþþýýýýýýþþþþþþûûûüüüüüüüüüüüüüüüþþþýýýýýýþþþþþþúúúúúúýýýûûûýýýüüüþþþùùùýýýýýý ýýýþþþúúúýýýþþþþþþþþþýýýüüüþþþøøøúúúþþþþþþûûûþþþþþþüüüýýýþþþþþþüüüûûûýýýüüüùùùýýýüüüûûû ûûûþþþþþþûûûþþþýýýûûûþþþýýý  øøøûûûûûûýýýùùùýýýûûû  ûûûüüüûûûøøøýýýþþþ ûûûüüüþþþúúú üüüûûûýýýûûûþþþþþþþþþüüüþþþýýýüüüûûûþþþüüüûûûþþþýýýüüüþþþþþþüüüþþþýýýþþþûûûþþþúúúûûûþþþúúúüüüøøøþþþúúúúúú üüüûûûüüüùùùøøøûûûþþþûûûýýý þþþþþþúúúüüüüüüûûûýýýüüüþþþþþþúúúúúúùùùýýýúúú úúúýýýþþþýýýûûûýýýþþþþþþüüüõõõýýýúúúþþþöööýýýþþþüüüýýýüüüýýý÷÷÷ýýýüüüûûûûûûþþþþþþüüüþþþüüüüüüþþþüüüûûûûûûþþþüüüþþþûûûûûûýýýþþþýýýûûûüüüüüüþþþüüüýýýýýýþþþûûûýýýþþþýýýüüüýýýúúúýýýøøøþþþøøøùùùûûûþþþûûûûûûýýýüüüýýýýýýúúúøøøøøøûûûýýýþþþüüüþþþùùùýýýüüüýýýýýýýýýþþþüüüüüüûûûùùùúúúýýýüüüúúúýýýüüüüüüüüüþþþýýýüüüüüüþþþüüüýýýþþþþþþûûûùùùþþþýýýúúúüüüþþþúúúúúúüüüûûûýýýþþþýýýþþþþþþüüüúúúýýýûûûøøøüüüýýýùùùüüüþþþûûûþþþúúúþþþþþþþþþýýý øøøýýýûûûþþþøøøüüüûûûüüüüüüüüüüüüýýýþþþþþþûûûüüüûûûýýý úúúûûûüüüüüüüüüûûûþþþúúúýýýõõõýýýþþþüüüþþþþþþýýýûûûþþþþþþúúúüüüüüüþþþúúúüüüþþþþþþüüüýýýüüüùùù ûûûýýý ûûûûûûûûûüüüýýýúúúþþþýýýþþþýýýüüüýýýþþþüüüùùùûûûþþþûûûýýýþþþûûûùùùýýýþþþýýýþþþþþþþþþþþþúúúüüü þþþþþþúúúüüüþþþûûûûûûýýýûûûþþþúúúýýýüüüüüüúúúýýýýýýúúúøøøüüüþþþþþþþþþüüüûûûûûûüüüþþþ üüüüüüýýý ýýýûûûûûûüüüûûûþþþûûûþþþýýýùùùøøøýýýýýýûûûþþþýýýüüüüüüþþþýýý üüüúúúþþþýýýþþþùùùþþþüüüþþþüüüüüüüüüþþþûûûþþþüüüüüüþþþýýýýýýýýýùùùøøøûûûþþþþþþþþþþþþûûûýýý÷÷÷þþþùùùþþþýýýþþþùùùþþþþþþüüüþþþüüüþþþüüüýýýúúúýýýúúúþþþþþþýýýüüüüüüüüüþþþýýýøøøþþþúúúöööûûûþþþ úúúûûûûûûüüüþþþøøøýýýýýýýýýýýýýýýüüüûûûþþþ þþþûûûøøøûûûþþþüüüûûûþþþýýýùùùýýýûûûúúúýýýüüü ûûûýýýüüüüüüüüüüüüûûûýýýúúúþþþûûûüüüúúúþþþüüü ýýýýýýúúúýýýýýýüüüùùùúúúþþþüüüüüüûûûþþþøøøûûû þþþûûûþþþüüüýýýþþþûûûýýýûûûüüüþþþýýýþþþýýýýýýþþþþþþúúúúúúþþþüüüúúú ýýýüüüýýýüüü ûûûþþþýýýþþþýýýýýýþþþþþþúúúþþþúúúùùùýýýþþþûûûùùùûûûýýýýýýüüüüüü ùùùýýýüüüûûûûûûûûûýýýþþþúúúüüüûûûþþþ ýýýþþþþþþýýýüüü þþþþþþýýýüüüûûûþþþýýýüüüþþþûûûüüüýýýþþþþþþüüü ýýýþþþüüüýýýýýý ýýý ùùùþþþþþþøøøþþþþþþþþþþþþýýýýýýüüüúúúûûûúúúýýýýýýþþþýýýþþþþþþûûûþþþúúúüüüþþþ÷÷÷üüüúúúþþþüüüúúúöööüüüýýýüüüúúúýýýþþþýýýþþþøøøüüüýýýüüüûûûûûûþþþûûûþþþ÷÷÷ýýýýýýþþþýýýýýýþþþþþþþþþüüüþþþûûûþþþýýýúúúûûûþþþýýýþþþûûûþþþþþþýýýüüüüüüýýýüüüþþþþþþüüüúúúüüüøøøýýýüüüþþþúúúþþþþþþýýýûûûýýýýýýþþþþþþúúúûûûýýýþþþþþþ þþþ üüüüüüýýýýýýýýýüüüþþþûûûüüü ùùùýýýýýý ýýýøøøþþþüüüýýýüüüýýýùùùþþþúúúýýýýýý ýýýýýýüüüýýýüüüþþþýýýýýýûûûöööþþþþþþþþþýýýþþþøøøþþþùùùþþþþþþùùùýýýýýýýýýýýýüüüøøøüüüùùùûûûùùùúúú þþþþþþþþþþþþûûûüüüüüüþþþüüüùùùüüüþþþüüüüüüüüüøøø÷÷÷ùùùýýýùùùþþþûûûüüüýýýûûûøøøùùùýýýüüüýýýüüüýýýüüüüüüýýýýýýúúúþþþüüüüüüúúúüüüüüüüüüüüüúúúýýýþþþúúúýýýþþþþþþþþþýýýþþþûûûûûûýýýþþþýýýûûûýýýüüüýýýùùù÷÷÷üüüþþþûûû þþþþþþþþþüüüýýýùùùüüüúúúûûû þþþûûûüüüýýýûûûýýýýýýûûûþþþýýýûûûüüüûûûþþþ ýýýûûûýýýüüüþþþýýýþþþýýýþþþþþþùùùýýýýýýþþþýýýøøøýýýûûûüüüúúúöööüüüýýýþþþùùùþþþþþþýýýùùùûûûþþþýýýþþþüüüþþþýýýúúúýýýýýýüüüúúúþþþþþþþþþøøøþþþüüüüüüþþþþþþüüüýýýþþþþþþþþþûûûûûûþþþúúúþþþýýýüüüþþþøøøûûûþþþüüüþþþþþþþþþýýýýýýüüü øøøþþþüüüùùùûûûýýýþþþüüü ýýýýýýþþþûûûþþþþþþ üüüüüüýýýûûûûûûûûûýýýþþþýýýýýýþþþ÷÷÷ûûûýýýüüüþþþýýýùùùýýýüüüþþþùùùúúúýýýýýýúúúúúúúúúúúúýýýüüüþþþýýýüüüüüüýýýþþþüüüûûûýýýþþþýýýúúúúúúûûûýýýþþþüüüýýýüüüúúúúúúþþþþþþüüüùùùýýýüüüþþþþþþûûûýýýþþþúúúûûûûûû ýýý÷÷÷þþþýýýüüüøøøöööþþþþþþýýýýýýùùùûûûüüüüüüúúúúúúüüüúúúüüüûûûýýý þþþüüüûûûýýýþþþþþþûûûüüüùùùþþþþþþþþþüüüøøøþþþ÷÷÷þþþýýýýýýþþþþþþüüüþþþøøøüüü÷÷÷ûûûüüüûûûþþþþþþ üüüùùùþþþþþþýýýúúúúúúüüüûûûþþþþþþùùùþþþýýýþþþüüüýýýüüüüüüûûûûûûúúúùùùþþþûûûûûûýýýûûûüüüþþþüüüüüüúúúýýýüüüüüüýýýýýýýýýõõõúúúúúúþþþøøøýýýüüüýýý ýýýýýýþþþþþþþþþþþþûûûûûûþþþüüüþþþùùùûûûûûûüüüýýýùùùüüüüüüüüü ýýýþþþöööøøøþþþüüüúúúýýýþþþûûûùùùýýýþþþþþþùùùûûûøøøýýýþþþýýýýýýúúúþþþøøøúúúýýýøøøþþþýýýûûûþþþûûûüüüýýýýýýüüüüüüþþþüüüþþþùùùûûûûûûþþþýýýùùùýýýûûûþþþüüüþþþþþþþþþøøøþþþýýýûûûùùùùùùýýýýýýüüüùùùüüüýýýýýýûûûùùù  üüüûûûüüüúúúýýýúúúûûûýýýýýýüüüøøøúúúþþþþþþ  ûûûýýý ýýýþþþþþþ üüüüüüûûûþþþýýýýýýþþþüüüûûûýýý ûûûýýýüüü÷÷÷ýýýýýýþþþþþþûûûöööúúúþþþýýýýýýþþþþþþýýýýýýúúúúúúüüüýýýþþþüüü üüüþþþ þþþýýýýýýýýýüüü þþþýýýþþþ ÷÷÷üüüûûûþþþúúúþþþýýý÷÷÷ýýýøøøûûûýýýüüüþþþüüüøøøþþþþþþþþþùùùþþþùùùýýýþþþýýýûûûûûûüüüúúúüüüýýýþþþûûûüüüûûûþþþþþþýýýýýýûûûþþþþþþúúúüüüüüüþþþüüüúúúüüüûûûýýý÷÷÷ üüüúúúøøøþþþþþþþþþýýýûûûûûûüüüûûûþþþüüüüüüþþþûûûýýýúúúûûûúúúûûûùùùýýýøøøýýýýýýþþþþþþþþþüüüþþþüüüüüüüüüüüüþþþüüüüüü þþþùùùýýýþþþ ýýýüüüþþþ ûûûýýýþþþúúúüüüýýýüüüûûûþþþýýýúúúûûûýýý þþþüüü þþþþþþûûûýýýþþþýýýúúúüüüûûûýýýýýýüüüýýýþþþùùùþþþþþþýýýýýýüüüýýýüüüùùùþþþýýýüüüüüüùùùþþþûûûùùùþþþüüüüüüýýýýýýøøøþþþûûûþþþ÷÷÷ýýýþþþüüüýýýþþþüüüýýýûûûþþþùùùýýýþþþþþþþþþüüüþþþûûûûûûùùùüüüþþþýýýúúúüüüþþþüüüþþþýýýýýýöööùùùþþþýýýýýýþþþúúúþþþûûû ûûûýýýýýýþþþûûûþþþýýýýýýþþþùùùûûû÷÷÷úúúõõõùùùýýýûûû÷÷÷ûûûöööøøøüüüüüüþþþüüüûûûþþþüüüþþþûûûþþþþþþþþþüüüýýýþþþýýýüüüüüüûûûþþþùùù üüüýýýýýýýýýüüüýýýþþþùùùûûûûûûûûûþþþüüüþþþüüüýýý ýýýûûûøøøýýýþþþüüüúúú þþþþþþýýýüüüþþþøøøýýýüüüüüüýýýþþþþþþûûûøøøþþþýýýûûûûûûþþþüüüþþþúúúüüüýýýþþþùùùúúúüüüøøøþþþûûûüüüýýýþþþúúúûûûþþþùùùüüüþþþüüüûûûüüüúúúþþþýýýûûûûûûüüüýýýþþþûûûúúúþþþýýýýýýûûûüüüþþþþþþûûûýýýøøøýýýþþþþþþýýýþþþøøøþþþýýýûûûþþþþþþüüüýýýþþþöööüüüþþþþþþùùùýýýûûûýýýùùùþþþýýýüüüúúúúúúùùùýýýüüüûûûþþþýýýþþþþþþüüüýýýýýýýýýýýýþþþûûûùùùüüüüüüúúúþþþûûûþþþýýýþþþýýýüüüûûûüüüüüüùùùþþþþþþþþþýýýüüüýýýúúúþþþýýýúúúþþþþþþþþþýýýùùùýýýýýýüüüúúúüüüúúúþþþüüü ýýýúúúþþþûûûýýýýýýýýýüüüúúúüüüýýý ýýýúúúþþþþþþüüüúúúüüüúúúþþþ ûûûþþþþþþûûûþþþüüüýýýøøøüüü þþþýýýüüüûûûûûûýýýüüüþþþúúúüüüûûûüüüýýýýýýüüüüüüþþþýýýýýýþþþþþþýýýüüüþþþüüüûûûüüüüüüûûûþþþýýýüüüþþþùùùþþþüüüþþþüüüýýýþþþþþþþþþþþþýýýüüüüüüüüüþþþþþþýýýüüüþþþþþþýýýþþþúúúüüüýýýþþþýýýþþþûûûûûûùùùûûûþþþûûû÷÷÷üüüýýýýýýþþþýýýûûûþþþúúúþþþþþþüüüþþþûûûþþþýýýüüüüüüüüüüüüþþþþþþüüüþþþþþþþþþýýýýýýüüüþþþûûûýýý þþþ  þþþûûûþþþûûûúúúöööüüüýýýýýýýýýþþþüüüýýýúúúýýýþþþúúúþþþüüüýýýýýýþþþýýýþþþýýýûûûþþþúúúöööþþþþþþúúú ùùùýýý üüüüüüýýýýýýýýýúúúüüüýýý þþþüüüùùùûûûüüüüüüüüüýýýüüüýýýûûûüüüýýýþþþþþþûûû þþþøøøþþþùùùûûûþþþüüüþþþþþþýýýþþþüüüþþþúúúþþþþþþüüüúúúþþþþþþþþþüüüùùùûûûûûû þþþ ýýýýýýûûûûûûüüüúúúþþþþþþýýýùùùýýýûûûýýýýýýûûûüüüùùùþþþûûûûûûûûûýýýùùùþþþýýýþþþüüüüüüýýýýýýûûûüüüýýýûûûýýýþþþþþþúúúþþþýýýýýýûûûüüüýýýýýýúúúüüüþþþùùùýýýþþþùùùúúúýýýþþþüüüþþþüüüþþþýýýýýýúúúýýýþþþûûûþþþýýýûûûþþþúúúüüüûûûþþþþþþþþþþþþ þþþþþþûûûýýýýýýýýýþþþýýýþþþüüüþþþúúúúúúþþþýýýþþþþþþýýýýýýýýýúúú÷÷÷ûûûùùùûûûýýýþþþýýýýýýüüüûûûþþþûûûûûûþþþúúúùùùþþþþþþûûûûûûýýýüüüûûûüüüýýýûûûýýýþþþýýýþþþüüüúúúüüüþþþþþþþþþüüüþþþüüüþþþþþþþþþþþþúúúþþþþþþûûûþþþùùùþþþþþþýýýúúúüüüþþþûûûþþþýýýýýýüüüùùùøøøþþþüüüùùùúúúþþþ÷÷÷üüüúúúúúúýýýüüüýýýüüüýýýþþþþþþýýýýýýûûûþþþþþþúúúþþþûûûûûûýýýþþþýýýúúúþþþøøøýýý þþþþþþýýýýýýþþþýýýþþþþþþ ýýýúúúþþþýýý ýýýûûûøøøþþþþþþþþþüüüýýýúúúüüüûûûúúúüüüþþþûûûýýýúúúýýýúúúþþþøøøþþþþþþøøøüüüüüüýýý öööüüüþþþüüüýýýüüüýýýûûûýýýùùùýýýüüüýýýþþþüüüþþþýýýúúúþþþúúúýýýüüüþþþþþþùùùúúúþþþúúúýýýùùùüüü÷÷÷üüüüüüýýýúúúþþþûûûýýýûûûþþþúúúüüüùùùùùùûûûûûûþþþüüüüüüúúúüüüüüüûûûüüüûûûüüüþþþýýýþþþþþþøøøøøøþþþþþþûûûþþþöööûûûüüüýýýûûûùùùûûûúúúüüüýýýüüüþþþùùùûûûþþþùùùþþþùùùýýýúúúùùùýýýýýýüüüþþþ ýýýüüüþþþüüüûûûüüü÷÷÷þþþûûûûûûüüüýýýýýýûûûþþþüüüþþþüüüþþþýýýþþþüüü úúúþþþýýýûûûþþþýýýüüüýýýþþþþþþúúúþþþýýýüüüûûûýýýûûûüüüþþþþþþùùùúúúûûûþþþüüüýýýúúúþþþýýýúúúûûûþþþþþþþþþúúú÷÷÷ýýýþþþúúúùùùþþþüüüýýýþþþûûûýýýûûûüüüýýýüüüøøøýýýýýýýýýúúúúúúøøøûûûüüüýýýüüüûûûýýýýýýûûûýýýþþþûûûýýýýýýûûû ûûûþþþûûûþþþýýýþþþüüüüüüûûûüüüûûûûûûþþþùùùýýýýýýüüüþþþùùùûûûýýýþþþýýýþþþøøøþþþþþþùùùúúúûûûýýýýýýýýýûûûüüüüüüúúúüüüüüüûûûýýýûûûþþþýýýýýýýýýýýýýýýýýýýýýúúúüüüüüüýýýøøøýýýüüüúúúýýý ýýýýýýþþþûûûùùùüüüýýýöööúúúùùùþþþþþþûûûüüüýýý÷÷÷þþþýýýüüüûûûûûûüüüûûûýýý üüüýýýüüüûûûýýýüüüýýýøøøüüüøøøþþþýýýýýýüüüûûûùùùþþþûûûýýýùùùüüüþþþþþþþþþûûûúúúüüüüüüþþþûûûþþþýýýþþþüüüüüüûûûýýýþþþúúúüüüþþþýýýüüü øøøüüüýýýýýýüüüþþþþþþþþþúúúþþþüüüýýýùùùþþþüüüýýýýýýýýýüüüþþþýýý÷÷÷ýýýýýýùùùûûûûûûüüüþþþûûûúúúþþþ ýýý ûûûúúúþþþúúúüüüýýý þþþþþþüüüýýýúúúþþþúúúüüüúúúüüü ûûûùùùþþþûûûýýýþþþþþþþþþùùùýýýûûûüüüþþþûûû ûûûüüüþþþúúúöööþþþýýýþþþþþþþþþúúúúúúûûûøøø ýýý üüüþþþüüüúúúöööúúúöööþþþþþþþþþüüüýýýûûû ûûûùùùüüüþþþþþþøøøûûûýýý÷÷÷þþþüüü üüüùùùýýýþþþýýýþþþ÷÷÷þþþûûûþþþþþþúúúüüüþþþþþþþþþþþþýýýýýýþþþ üüü üüüýýýþþþûûûüüüþþþúúúüüüýýýþþþþþþûûûþþþýýýøøøúúúýýýùùùüüüüüüþþþúúúûûûþþþýýýýýýýýýýýýþþþûûûþþþ úúúüüü þþþüüüüüüúúúýýýüüüþþþþþþûûû ùùùúúúþþþ üüüúúúüüüûûûûûûúúúüüüþþþûûûüüüýýýþþþýýýüüüüüüþþþúúúþþþúúúþþþ þþþýýýüüüùùùýýýúúúüüü üüüýýýþþþüüüûûûýýýüüü ýýýýýýýýýýýýþþþûûûüüüûûûýýýüüüýýýþþþþþþüüüøøøþþþþþþúúú÷÷÷þþþüüüûûûþþþ÷÷÷ûûû þþþúúúþþþþþþûûûûûûýýýüüüûûûþþþýýýýýýýýýýýýþþþýýýþþþüüüýýýûûûþþþüüüüüüþþþýýýüüüýýýþþþúúúþþþúúúþþþüüüüüüøøøþþþüüüûûû ûûûýýýþþþüüü øøøþþþþþþûûûþþþýýýüüüüüüúúúþþþýýýþþþþþþþþþýýýþþþüüüôôôýýýûûû ýýýüüüüüüýýýüüüýýýûûûüüüüüüþþþ ýýýþþþýýýüüüüüüùùùýýýþþþýýýüüüþþþþþþûûûýýýùùùüüüûûûþþþûûûýýýûûûþþþûûûüüüüüüþþþûûûýýýüüüûûûþþþ ýýýúúúüüüþþþýýýýýýüüüüüüþþþþþþþþþþþþ üüüúúúýýýýýýýýý ûûû þþþþþþýýýüüüüüü÷÷÷õõõýýýþþþþþþýýýûûûúúúþþþ úúúüüüýýý÷÷÷úúúþþþþþþþþþüüüûûûüüüúúúþþþþþþýýýýýýùùùþþþýýýüüüýýýúúúþþþûûûûûûøøøþþþþþþúúúúúúøøøüüüýýýþþþþþþ üüüþþþþþþüüüýýýþþþüüüùùùüüü þþþýýýûûûþþþþþþúúúþþþþþþüüüüüüüüüýýýúúúûûûûûûþþþûûûþþþýýýýýýúúúüüüþþþýýýüüüûûûþþþúúúýýýüüüþþþ÷÷÷ýýýþþþüüüþþþþþþýýýùùùüüüýýýûûûýýýýýýþþþýýýþþþþþþþþþýýýüüüüüüûûûýýýüüüúúúþþþ øøøûûûþþþûûûþþþýýýúúúüüüýýýùùùúúúúúúúúúþþþþþþüüüþþþ üüüýýý þþþûûûüüüøøøþþþýýýýýýþþþþþþýýýöööþþþýýýüüüøøøþþþúúúûûûþþþþþþüüüþþþþþþüüü ýýýþþþýýýöööøøøûûû ûûûþþþþþþúúúþþþýýýøøøþþþþþþþþþýýýþþþøøøþþþ ùùùùùùüüüùùùþþþüüüøøøýýýþþþþþþýýýúúúþþþûûûýýýýýýþþþùùùþþþþþþûûûýýýþþþýýýýýýûûûþþþþþþþþþþþþùùùýýýýýýûûûúúúþþþþþþýýýüüüþþþùùùýýý üüüüüüøøøýýýüüüùùùþþþýýýýýýüüüýýýüüüþþþýýýûûûüüü ûûûþþþûûûýýý÷÷÷üüüúúúþþþ÷÷÷þþþýýýüüüýýý üüüýýýûûûþþþúúúýýýýýýþþþýýýúúúýýýýýýöööüüüþþþýýýûûûýýýüüüýýýûûûþþþýýýøøøýýýýýýúúúýýýþþþýýýõõõýýýýýýþþþûûûüüüüüüþþþýýýýýýùùùýýýüüüýýýüüüþþþüüüþþþýýýþþþûûûûûûûûûüüüùùùùùù þþþýýýþþþüüü÷÷÷ûûûúúúûûûþþþüüüþþþþþþùùùûûûùùùþþþýýýþþþûûûýýýõõõþþþüüüýýýüüüúúúþþþýýýýýýþþþúúúþþþþþþþþþûûûüüüþþþüüüûûûúúúýýýþþþüüüþþþüüüþþþùùùüüüüüüúúúýýýþþþúúúýýýþþþûûûþþþüüüýýý ÷÷÷ ûûûýýýûûûúúúüüüþþþýýý úúúþþþüüüþþþþþþûûûýýýüüüûûûûûûûûûùùùûûû ýýýþþþùùùþþþùùùüüüüüüþþþúúúýýýüüüûûûûûûýýýúúúûûûþþþþþþýýýüüüüüüýýý úúúüüüýýýüüüþþþýýýøøøýýýþþþ  þþþþþþþþþ ýýýýýýþþþüüüûûûþþþþþþþþþþþþþþþýýýþþþýýýþþþýýýúúúþþþþþþýýýþþþüüüüüüüüüþþþøøøþþþþþþýýýüüüúúúúúúþþþýýýüüüþþþúúúþþþúúúþþþþþþþþþýýýýýýþþþýýýýýýûûûýýýúúúþþþûûûþþþþþþûûûüüüýýýúúúþþþüüüûûûýýýþþþýýý þþþþþþþþþýýýýýýûûûþþþûûûúúúüüüúúúüüüùùùüüüúúúûûûûûû þþþ üüüûûûýýýýýýûûû  ýýýþþþýýýüüüþþþýýýúúúùùùþþþþþþúúú þþþýýýýýýùùùþþþþþþþþþýýýüüüýýýüüüþþþ ýýýýýýýýýüüüýýýüüüþþþúúúüüüúúúþþþþþþüüüöööýýý÷÷÷úúúùùùûûûûûûþþþþþþüüüûûûþþþþþþþþþ  þþþûûûùùù úúúþþþûûûüüüýýýýýýôôôþþþ÷÷÷üüüýýýýýýóóóþþþüüüûûûýýýûûûûûûûûûýýýþþþþþþþþþúúúþþþûûûûûûþþþþþþýýýúúúúúúþþþýýýûûûþþþûûûýýýüüüþþþúúúûûûûûûþþþúúúûûûýýýüüüýýýüüüûûûúúúþþþûûûýýýüüüüüüúúúüüü÷÷÷ûûûúúúþþþ üüüúúúúúúûûûüüüûûûûûûûûûýýýýýýþþþýýýþþþûûûüüüýýýúúúþþþþþþúúúýýýûûûþþþüüüûûûüüüùùùýýýúúúþþþþþþþþþüüüýýýüüüýýýþþþüüüþþþýýýüüüüüüþþþøøøüüüýýýüüüüüüùùùûûûþþþþþþýýýùùù ýýýúúúüüüûûûüüüûûûûûûüüüþþþúúúþþþûûûüüüþþþ ýýýþþþûûûúúúüüüýýýýýýúúúûûûþþþüüüþþþüüüûûûüüüþþþýýýýýýûûûýýýûûûùùùþþþûûûþþþûûûýýý÷÷÷úúúûûûýýýþþþþþþúúúþþþøøøüüüøøøýýýúúúýýýùùùûûûüüüüüüýýýýýýøøøûûûøøøýýýüüü÷÷÷üüüûûû úúúýýýýýýýýýýýýýýýýýýþþþüüüüüüüüüþþþüüüýýýüüüûûûýýýùùùþþþõõõýýýüüüþþþüüüûûûýýýúúúýýýüüüþþþþþþûûû þþþüüüýýýýýýûûûûûûþþþûûûþþþ  þþþùùùüüüýýýþþþûûûûûûýýýýýý üüüûûûýýýùùùýýýþþþôôôýýý þþþûûûýýýþþþüüüþþþþþþüüüþþþýýýûûû þþþùùùýýýþþþýýýûûûüüüþþþýýýþþþúúúüüüþþþ÷÷÷ûûûøøøøøøþþþþþþúúúúúúþþþþþþùùùýýýþþþûûûûûûýýýúúúøøøýýýýýýùùùýýýùùùùùùýýýþþþüüüûûûüüüýýýýýý üüüüüüýýýüüüûûûúúúüüüþþþýýýýýýýýýþþþþþþûûû üüüüüüþþþûûûýýýüüüüüüûûûûûûüüüõõõþþþ þþþûûûüüüþþþýýýüüüøøøüüüýýýýýýüüüùùùýýýýýýûûûýýýýýýýýýþþþýýýüüüûûûþþþüüüüüüþþþþþþþþþýýýüüüøøøýýýþþþýýýýýýýýýüüüûûûüüüýýýüüüüüüþþþþþþûûûþþþûûûøøøþþþúúúùùùüüüþþþþþþ üüüýýýþþþþþþúúúýýýøøøýýýþþþþþþýýýþþþþþþþþþøøøøøøûûûüüüúúúþþþýýýùùùùùùûûûýýýýýýýýýüüüþþþüüüþþþüüü ýýýþþþûûûüüüþþþýýý úúúüüüþþþþþþùùùþþþþþþûûûüüüþþþýýýøøøüüüýýýûûûûûûþþþýýýþþþ üüüùùùýýýüüüþþþúúúþþþþþþýýý ûûûõõõûûû ýýýþþþþþþûûûýýýþþþýýýûûûûûûýýýýýýýýýûûûþþþýýýýýýýýýüüüýýýúúúüüüþþþýýýûûûûûûýýýýýýûûûþþþùùùþþþýýýþþþüüüûûûýýýþþþþþþþþþþþþûûûþþþúúúùùùûûûýýýúúúþþþýýýþþþþþþýýýûûûùùùùùùýýýþþþúúúüüüúúúúúúþþþýýýøøøýýýùùùþþþýýýþþþüüüýýýþþþ ýýýýýýûûûûûûúúúûûûþþþûûûþþþýýýþþþúúúûûûûûûûûûýýýüüüýýýþþþýýýþþþýýýùùùýýýøøøûûû üüüýýýûûûþþþúúúúúúùùùûûûúúúýýýûûûýýýùùùþþþüüüüüüûûûþþþúúúøøøùùùúúúýýýýýýýýýùùùýýýþþþýýýýýýûûûúúúúúúýýýýýýûûûþþþýýýýýýýýýüüüúúúýýýùùùýýýûûûþþþüüüûûûùùùþþþýýýûûûûûûûûûüüüþþþýýý÷÷÷úúúúúúýýýüüüþþþþþþüüüýýýýýýöööûûûùùùûûûüüüøøøþþþþþþþþþûûûþþþüüü ýýýþþþýýýýýýûûûýýýýýýûûûýýýþþþýýýüüüûûûýýýüüüýýýþþþþþþûûûýýýüüüùùùøøøýýýûûûüüüýýýþþþþþþýýýüüüýýýþþþûûûüüüþþþüüüýýýþþþþþþþþþûûûþþþýýýþþþýýý þþþúúúúúúüüüþþþ øøøøøøûûûûûûþþþþþþüüüüüüüüüþþþýýýþþþþþþüüü ýýýýýýüüüýýýýýýþþþûûûüüüýýýûûûûûûüüüþþþüüüüüüûûûûûûþþþýýýüüüþþþõõõþþþýýýûûûýýýýýýûûûüüüûûûûûûûûûýýýýýýûûûþþþýýýýýýþþþüüüþþþøøøþþþþþþûûûúúúúúúûûûüüüýýýûûûþþþþþþûûûýýýþþþûûûüüüúúúüüüýýýûûûþþþþþþ÷÷÷þþþýýýúúúûûûüüüøøøüüüýýýþþþýýýüüü ýýýýýýûûûþþþüüüýýýüüüþþþýýýüüüþþþüüüúúúúúúþþþýýý÷÷÷þþþýýýýýýýýý÷÷÷þþþþþþýýý üüüùùùýýýûûûúúúþþþýýýùùùýýýùùùþþþýýýüüüûûûþþþþþþýýýúúúþþþýýýùùùýýýýýýøøøúúúýýýýýýýýýùùùþþþýýýúúúýýýûûûþþþùùùýýýûûûûûûüüü üüüþþþþþþþþþýýýûûûýýýüüüýýýöööúúú ýýýýýýþþþüüüøøøþþþþþþýýýýýýûûûøøøþþþúúúþþþýýýýýýþþþùùùüüüüüüþþþûûûýýýüüüþþþþþþýýýýýýúúúþþþúúúüüüüüüûûûýýýþþþýýýþþþüüüýýýþþþûûûþþþýýýýýýýýýûûûúúúúúúûûûüüüþþþùùùþþþ üüüûûûúúúúúú þþþúúúþþþüüüýýýùùùýýýþþþþþþüüüýýýüüüþþþúúúùùùúúúþþþûûûþþþ üüüúúúüüüþþþþþþþþþøøøþþþþþþûûûýýýüüüûûûüüüýýýüüüûûû üüüøøøúúúýýýûûûýýýüüüþþþþþþþþþýýýýýýûûûùùùûûûþþþüüü ýýýüüü ûûûýýýüüüúúúüüüýýýþþþüüü ýýýþþþþþþýýýýýýüüüýýýúúúþþþøøøþþþúúúúúúûûûüüüýýýûûûþþþýýýüüüûûûýýýûûûþþþüüüúúúþþþ þþþýýýûûûýýýþþþûûûýýýúúúþþþúúúþþþùùùúúúüüüýýýøøøýýýþþþûûûúúúûûû þþþüüüøøøþþþýýýþþþüüüýýýüüüùùùüüüþþþ üüüûûûüüüùùùüüüýýýþþþøøøþþþùùùþþþúúúüüüúúúþþþüüüúúúúúú ýýýýýýùùùþþþþþþýýý ýýýúúúýýýþþþùùùþþþþþþþþþýýýýýýùùùýýýûûûúúúûûûùùùüüüøøøúúúûûûþþþüüüúúúüüüýýýýýýúúúüüüøøøþþþøøøþþþúúúýýýûûûþþþûûûýýýýýýúúúþþþþþþûûûýýýüüüþþþüüüøøø þþþúúúýýýüüüþþþûûûùùùüüüýýýüüüùùùûûûþþþýýýþþþýýý ûûûýýýýýýûûûýýýüüüúúúüüüýýýüüüûûûþþþýýýùùùþþþþþþ þþþ üüüûûûþþþýýýúúúüüüùùùþþþýýýþþþûûûþþþúúúúúúþþþúúúûûûüüüüüüþþþþþþþþþûûûüüüþþþ üüüþþþøøøþþþøøøüüüþþþþþþýýýüüüúúúþþþüüüùùùþþþüüüûûûûûûùùùýýýýýýüüüüüüþþþûûûþþþûûûþþþþþþþþþúúúüüüýýýüüü÷÷÷ýýýþþþþþþýýýúúúúúúùùùþþþùùùüüüúúúúúúýýýüüüýýýýýýýýýþþþþþþþþþþþþþþþüüüøøøûûûþþþþþþûûûúúúýýýùùùýýýüüüþþþ üüü þþþþþþþþþüüüýýýúúúùùùýýýûûûúúúüüüøøøýýýûûûþþþ üüüöööúúúûûûüüüýýýûûûýýýýýýþþþýýýüüüýýýýýýøøø üüüùùùýýýýýýüüüþþþûûûüüüþþþþþþøøøùùùûûûüüüþþþüüüüüüûûûýýýþþþýýýþþþûûûýýýüüü ûûû SHAR_EOF fi # end of overwriting check if test -f 'specific-heat.ps' then echo shar: will not over-write existing file "'specific-heat.ps'" else cat << "SHAR_EOF" > 'specific-heat.ps' %!PS-Adobe-2.0 %%Creator: MATLAB, The Mathworks, Inc. %%Title: MATLAB graph %%CreationDate: 12/02/96 11:30:22 %%DocumentNeededFonts: Helvetica %%DocumentProcessColors: Cyan Magenta Yellow Black %%Pages: (atend) %%BoundingBox: (atend) %%EndComments %%BeginProlog % MathWorks dictionary /MathWorks 150 dict begin % definition operators /bdef {bind def} bind def /ldef {load def} bind def /xdef {exch def} bdef /xstore {exch store} bdef % operator abbreviations /c /clip ldef /cc /concat ldef /cp /closepath ldef /gr /grestore ldef /gs /gsave ldef /mt /moveto ldef /np /newpath ldef /cm /currentmatrix ldef /sm /setmatrix ldef /rc {rectclip} bdef /rf {rectfill} bdef /rm /rmoveto ldef /rl /rlineto ldef /s /show ldef /sc {setcmykcolor} bdef /sr /setrgbcolor ldef /w /setlinewidth ldef /cap /setlinecap ldef % page state control /pgsv () def /bpage {/pgsv save def} bdef /epage {pgsv restore} bdef /bplot /gsave ldef /eplot {stroke grestore} bdef % orientation switch /portraitMode 0 def /landscapeMode 1 def % coordinate system mappings /dpi2point 0 def % font control /FontSize 0 def /FMS { /FontSize xstore %save size off stack findfont [FontSize 0 0 FontSize neg 0 0] makefont setfont }bdef /reencode { exch dup where {pop load} {pop StandardEncoding} ifelse exch dup 3 1 roll findfont dup length dict begin { 1 index /FID ne {def}{pop pop} ifelse } forall /Encoding exch def currentdict end definefont pop } bdef /isroman { findfont /CharStrings get /Agrave known } bdef /FMSR { 3 1 roll 1 index dup isroman {reencode} {pop pop} ifelse exch FMS } bdef /csm { 1 dpi2point div -1 dpi2point div scale neg translate landscapeMode eq {90 rotate} if } bdef % line types: solid, dotted, dashed, dotdash /SO { [] 0 setdash } bdef /DO { [.5 dpi2point mul 4 dpi2point mul] 0 setdash } bdef /DA { [6 dpi2point mul] 0 setdash } bdef /DD { [.5 dpi2point mul 4 dpi2point mul 6 dpi2point mul 4 dpi2point mul] 0 setdash } bdef % macros for lines and objects /L { lineto stroke } bdef /MP { 3 1 roll moveto 1 sub {rlineto} repeat } bdef /AP { {rlineto} repeat } bdef /PP { closepath fill } bdef /DP { closepath stroke } bdef /MR { 4 -2 roll moveto dup 0 exch rlineto exch 0 rlineto neg 0 exch rlineto closepath } bdef /FR { MR stroke } bdef /PR { MR fill } bdef /L1i { { currentfile picstr readhexstring pop } image } bdef /tMatrix matrix def /MakeOval { newpath tMatrix currentmatrix pop translate scale 0 0 1 0 360 arc tMatrix setmatrix } bdef /FO { MakeOval stroke } bdef /PO { MakeOval fill } bdef /PD { 2 copy moveto lineto stroke } bdef currentdict end def %%EndProlog %%BeginSetup MathWorks begin 0 cap 0 setlinejoin end %%EndSetup %%Page: 1 1 %%BeginPageSetup %%PageBoundingBox: 53 197 546 604 MathWorks begin bpage %%EndPageSetup %%BeginObject: graph1 1 bplot /dpi2point 12 def portraitMode 0216 7344 csm 431 91 5914 4882 MR c np 76 dict begin %Colortable dictionary /c0 { 0 0 0 sr} bdef /c1 { 1 1 1 sr} bdef /c2 { 1 0 0 sr} bdef /c3 { 0 1 0 sr} bdef /c4 { 0 0 1 sr} bdef /c5 { 1 1 0 sr} bdef /c6 { 1 0 1 sr} bdef /c7 { 0 1 1 sr} bdef %%IncludeResource: font Helvetica /Helvetica /ISOLatin1Encoding 144 FMSR c1 0 0 6914 5184 PR 6 w DO 4 w c0 898 4612 mt 898 388 L 898 388 mt 898 388 L 1663 4612 mt 1663 388 L 1663 388 mt 1663 388 L 2429 4612 mt 2429 388 L 2429 388 mt 2429 388 L 3194 4612 mt 3194 388 L 3194 388 mt 3194 388 L 3960 4612 mt 3960 388 L 3960 388 mt 3960 388 L 4725 4612 mt 4725 388 L 4725 388 mt 4725 388 L 5491 4612 mt 5491 388 L 5491 388 mt 5491 388 L 6256 4612 mt 6256 388 L 6256 388 mt 6256 388 L 898 4612 mt 6256 4612 L 6256 4612 mt 6256 4612 L 898 4084 mt 6256 4084 L 6256 4084 mt 6256 4084 L 898 3556 mt 6256 3556 L 6256 3556 mt 6256 3556 L 898 3028 mt 6256 3028 L 6256 3028 mt 6256 3028 L 898 2500 mt 6256 2500 L 6256 2500 mt 6256 2500 L 898 1972 mt 6256 1972 L 6256 1972 mt 6256 1972 L 898 1444 mt 6256 1444 L 6256 1444 mt 6256 1444 L 898 916 mt 6256 916 L 6256 916 mt 6256 916 L 898 388 mt 6256 388 L 6256 388 mt 6256 388 L 898 4612 mt 898 388 L 898 388 mt 6256 388 L 898 4612 mt 898 388 L 898 388 mt 6256 388 L 898 4612 mt 898 388 L 898 388 mt 6256 388 L SO 6 w 898 4612 mt 6256 4612 L 898 388 mt 6256 388 L 6256 4612 mt 6256 388 L 898 4612 mt 898 388 L 6256 4612 mt 6256 4612 L 898 4612 mt 898 4612 L 898 4612 mt 6256 4612 L 898 4612 mt 898 388 L 898 4612 mt 898 4612 L 898 4612 mt 898 4558 L 898 388 mt 898 442 L 734 4781 mt (-10) s 1663 4612 mt 1663 4558 L 1663 388 mt 1663 442 L 1539 4781 mt (-9) s 2429 4612 mt 2429 4558 L 2429 388 mt 2429 442 L 2305 4781 mt (-8) s 3194 4612 mt 3194 4558 L 3194 388 mt 3194 442 L 3070 4781 mt (-7) s 3960 4612 mt 3960 4558 L 3960 388 mt 3960 442 L 3836 4781 mt (-6) s 4725 4612 mt 4725 4558 L 4725 388 mt 4725 442 L 4601 4781 mt (-5) s 5491 4612 mt 5491 4558 L 5491 388 mt 5491 442 L 5367 4781 mt (-4) s 6256 4612 mt 6256 4558 L 6256 388 mt 6256 442 L 6132 4781 mt (-3) s 898 4612 mt 952 4612 L 6256 4612 mt 6202 4612 L 619 4665 mt (-10) s 898 4084 mt 952 4084 L 6256 4084 mt 6202 4084 L 699 4137 mt (-9) s 898 3556 mt 952 3556 L 6256 3556 mt 6202 3556 L 699 3609 mt (-8) s 898 3028 mt 952 3028 L 6256 3028 mt 6202 3028 L 699 3081 mt (-7) s 898 2500 mt 952 2500 L 6256 2500 mt 6202 2500 L 699 2553 mt (-6) s 898 1972 mt 952 1972 L 6256 1972 mt 6202 1972 L 699 2025 mt (-5) s 898 1444 mt 952 1444 L 6256 1444 mt 6202 1444 L 699 1497 mt (-4) s 898 916 mt 952 916 L 6256 916 mt 6202 916 L 699 969 mt (-3) s 898 388 mt 952 388 L 6256 388 mt 6202 388 L 699 441 mt (-2) s 898 388 mt 6256 388 L 898 4612 mt 6256 4612 L 898 4612 mt 898 388 L 6256 4612 mt 6256 388 L 898 388 mt 898 388 L 6256 388 mt 6256 388 L gs 898 388 5359 4225 MR c np -663 273 -1512 514 -794 499 -1055 994 -612 715 6063 824 6 MP stroke gr 6027 824 mt 6099 824 L 6063 788 mt 6063 860 L 6027 788 mt 6099 860 L 6099 788 mt 6027 860 L 5415 1539 mt 5487 1539 L 5451 1503 mt 5451 1575 L 5415 1503 mt 5487 1575 L 5487 1503 mt 5415 1575 L 4360 2533 mt 4432 2533 L 4396 2497 mt 4396 2569 L 4360 2497 mt 4432 2569 L 4432 2497 mt 4360 2569 L 3566 3032 mt 3638 3032 L 3602 2996 mt 3602 3068 L 3566 2996 mt 3638 3068 L 3638 2996 mt 3566 3068 L 2054 3546 mt 2126 3546 L 2090 3510 mt 2090 3582 L 2054 3510 mt 2126 3582 L 2126 3510 mt 2054 3582 L 1391 3819 mt 1463 3819 L 1427 3783 mt 1427 3855 L 1391 3783 mt 1463 3855 L 1463 3783 mt 1391 3855 L gs 898 388 5359 4225 MR c np 16 611 -1337 -653 -1187 1702 -677 835 -548 -245 5594 1852 6 MP stroke gr 5558 1852 mt 5630 1852 L 5594 1816 mt 5594 1888 L 5010 1607 mt 5082 1607 L 5046 1571 mt 5046 1643 L 4333 2442 mt 4405 2442 L 4369 2406 mt 4369 2478 L 3146 4144 mt 3218 4144 L 3182 4108 mt 3182 4180 L 1809 3491 mt 1881 3491 L 1845 3455 mt 1845 3527 L 1825 4102 mt 1897 4102 L 1861 4066 mt 1861 4138 L gs 898 388 5359 4225 MR c np gr 36 36 1970 3978 FO gs 898 388 5359 4225 MR c np gr 1934 3098 mt 2006 3170 L 2006 3098 mt 1934 3170 L gs 898 388 5359 4225 MR c np DA 765 -528 766 -528 765 -528 766 -528 765 -528 766 -528 765 -528 898 4612 8 MP stroke gr DA 3274 4941 mt (log\(Error\)) s 565 2891 mt -90 rotate (log|Cv-Cv0|) s 90 rotate 1804 273 mt (Specific heat: +:LFI, *:LCG, o:Wolff+LCG, x:Metro+LCG) s SO end eplot %%EndObject graph 1 epage end showpage %%Trailer %%BoundingBox: 53 197 546 604 %%Pages: 001 %%EOF SHAR_EOF fi # end of overwriting check if test -f 'sum.eps' then echo shar: will not over-write existing file "'sum.eps'" else cat << "SHAR_EOF" > 'sum.eps' %!PS-Adobe-2.0 EPSF-2.0 %%Title: sum.fig %%Creator: fig2dev Version 3.1 Patchlevel 2 %%CreationDate: Sun Apr 13 13:02:15 1997 %%For: ashoks@pecos.ncsa.uiuc.edu (Ashok Srinivasan) %Magnification: 1.00 %%Orientation: Landscape %%BoundingBox: 0 0 313 427 %%Pages: 0 %%BeginSetup %%IncludeFeature: *PageSize Letter %%EndSetup %%EndComments /MyAppDict 100 dict dup begin def /$F2psDict 200 dict def $F2psDict begin $F2psDict /mtrx matrix put /col-1 {0 setgray} bind def /col0 {0.000 0.000 0.000 srgb} bind def /col1 {0.000 0.000 1.000 srgb} bind def /col2 {0.000 1.000 0.000 srgb} bind def /col3 {0.000 1.000 1.000 srgb} bind def /col4 {1.000 0.000 0.000 srgb} bind def /col5 {1.000 0.000 1.000 srgb} bind def /col6 {1.000 1.000 0.000 srgb} bind def /col7 {1.000 1.000 1.000 srgb} bind def /col8 {0.000 0.000 0.560 srgb} bind def /col9 {0.000 0.000 0.690 srgb} bind def /col10 {0.000 0.000 0.820 srgb} bind def /col11 {0.530 0.810 1.000 srgb} bind def /col12 {0.000 0.560 0.000 srgb} bind def /col13 {0.000 0.690 0.000 srgb} bind def /col14 {0.000 0.820 0.000 srgb} bind def /col15 {0.000 0.560 0.560 srgb} bind def /col16 {0.000 0.690 0.690 srgb} bind def /col17 {0.000 0.820 0.820 srgb} bind def /col18 {0.560 0.000 0.000 srgb} bind def /col19 {0.690 0.000 0.000 srgb} bind def /col20 {0.820 0.000 0.000 srgb} bind def /col21 {0.560 0.000 0.560 srgb} bind def /col22 {0.690 0.000 0.690 srgb} bind def /col23 {0.820 0.000 0.820 srgb} bind def /col24 {0.500 0.190 0.000 srgb} bind def /col25 {0.630 0.250 0.000 srgb} bind def /col26 {0.750 0.380 0.000 srgb} bind def /col27 {1.000 0.500 0.500 srgb} bind def /col28 {1.000 0.630 0.630 srgb} bind def /col29 {1.000 0.750 0.750 srgb} bind def /col30 {1.000 0.880 0.880 srgb} bind def /col31 {1.000 0.840 0.000 srgb} bind def end save -107.0 -157.0 translate 90 rotate 1 -1 scale .9 .9 scale % to make patterns same scale as in xfig % This junk string is used by the show operators /PATsstr 1 string def /PATawidthshow { % cx cy cchar rx ry string % Loop over each character in the string { % cx cy cchar rx ry char % Show the character dup % cx cy cchar rx ry char char PATsstr dup 0 4 -1 roll put % cx cy cchar rx ry char (char) false charpath % cx cy cchar rx ry char /clip load PATdraw % Move past the character (charpath modified the % current point) currentpoint % cx cy cchar rx ry char x y newpath moveto % cx cy cchar rx ry char % Reposition by cx,cy if the character in the string is cchar 3 index eq { % cx cy cchar rx ry 4 index 4 index rmoveto } if % Reposition all characters by rx ry 2 copy rmoveto % cx cy cchar rx ry } forall pop pop pop pop pop % - currentpoint newpath moveto } bind def /PATcg { 7 dict dup begin /lw currentlinewidth def /lc currentlinecap def /lj currentlinejoin def /ml currentmiterlimit def /ds [ currentdash ] def /cc [ currentrgbcolor ] def /cm matrix currentmatrix def end } bind def % PATdraw - calculates the boundaries of the object and % fills it with the current pattern /PATdraw { % proc save exch PATpcalc % proc nw nh px py 5 -1 roll exec % nw nh px py newpath PATfill % - restore } bind def % PATfill - performs the tiling for the shape /PATfill { % nw nh px py PATfill - PATDict /CurrentPattern get dup begin setfont % Set the coordinate system to Pattern Space PatternGState PATsg % Set the color for uncolored pattezns PaintType 2 eq { PATDict /PColor get PATsc } if % Create the string for showing 3 index string % nw nh px py str % Loop for each of the pattern sources 0 1 Multi 1 sub { % nw nh px py str source % Move to the starting location 3 index 3 index % nw nh px py str source px py moveto % nw nh px py str source % For multiple sources, set the appropriate color Multi 1 ne { dup PC exch get PATsc } if % Set the appropriate string for the source 0 1 7 index 1 sub { 2 index exch 2 index put } for pop % Loop over the number of vertical cells 3 index % nw nh px py str nh { % nw nh px py str currentpoint % nw nh px py str cx cy 2 index show % nw nh px py str cx cy YStep add moveto % nw nh px py str } repeat % nw nh px py str } for 5 { pop } repeat end } bind def % PATkshow - kshow with the current pattezn /PATkshow { % proc string exch bind % string proc 1 index 0 get % string proc char % Loop over all but the last character in the string 0 1 4 index length 2 sub { % string proc char idx % Find the n+1th character in the string 3 index exch 1 add get % string proe char char+1 exch 2 copy % strinq proc char+1 char char+1 char % Now show the nth character PATsstr dup 0 4 -1 roll put % string proc chr+1 chr chr+1 (chr) false charpath % string proc char+1 char char+1 /clip load PATdraw % Move past the character (charpath modified the current point) currentpoint newpath moveto % Execute the user proc (should consume char and char+1) mark 3 1 roll % string proc char+1 mark char char+1 4 index exec % string proc char+1 mark... cleartomark % string proc char+1 } for % Now display the last character PATsstr dup 0 4 -1 roll put % string proc (char+1) false charpath % string proc /clip load PATdraw neewath pop pop % - } bind def % PATmp - the makepattern equivalent /PATmp { % patdict patmtx PATmp patinstance exch dup length 7 add % We will add 6 new entries plus 1 FID dict copy % Create a new dictionary begin % Matrix to install when painting the pattern TilingType PATtcalc /PatternGState PATcg def PatternGState /cm 3 -1 roll put % Check for multi pattern sources (Level 1 fast color patterns) currentdict /Multi known not { /Multi 1 def } if % Font dictionary definitions /FontType 3 def % Create a dummy encoding vector /Encoding 256 array def 3 string 0 1 255 { Encoding exch dup 3 index cvs cvn put } for pop /FontMatrix matrix def /FontBBox BBox def /BuildChar { mark 3 1 roll % mark dict char exch begin Multi 1 ne {PaintData exch get}{pop} ifelse % mark [paintdata] PaintType 2 eq Multi 1 ne or { XStep 0 FontBBox aload pop setcachedevice } { XStep 0 setcharwidth } ifelse currentdict % mark [paintdata] dict /PaintProc load % mark [paintdata] dict paintproc end gsave false PATredef exec true PATredef grestore cleartomark % - } bind def currentdict end % newdict /foo exch % /foo newlict definefont % newfont } bind def % PATpcalc - calculates the starting point and width/height % of the tile fill for the shape /PATpcalc { % - PATpcalc nw nh px py PATDict /CurrentPattern get begin gsave % Set up the coordinate system to Pattern Space % and lock down pattern PatternGState /cm get setmatrix BBox aload pop pop pop translate % Determine the bounding box of the shape pathbbox % llx lly urx ury grestore % Determine (nw, nh) the # of cells to paint width and height PatHeight div ceiling % llx lly urx qh 4 1 roll % qh llx lly urx PatWidth div ceiling % qh llx lly qw 4 1 roll % qw qh llx lly PatHeight div floor % qw qh llx ph 4 1 roll % ph qw qh llx PatWidth div floor % ph qw qh pw 4 1 roll % pw ph qw qh 2 index sub cvi abs % pw ph qs qh-ph exch 3 index sub cvi abs exch % pw ph nw=qw-pw nh=qh-ph % Determine the starting point of the pattern fill %(px, py) 4 2 roll % nw nh pw ph PatHeight mul % nw nh pw py exch % nw nh py pw PatWidth mul exch % nw nh px py end } bind def % Save the original routines so that we can use them later on /oldfill /fill load def /oldeofill /eofill load def /oldstroke /stroke load def /oldshow /show load def /oldashow /ashow load def /oldwidthshow /widthshow load def /oldawidthshow /awidthshow load def /oldkshow /kshow load def % These defs are necessary so that subsequent procs don't bind in % the originals /fill { oldfill } bind def /eofill { oldeofill } bind def /stroke { oldstroke } bind def /show { oldshow } bind def /ashow { oldashow } bind def /widthshow { oldwidthshow } bind def /awidthshow { oldawidthshow } bind def /kshow { oldkshow } bind def /PATredef { MyAppDict begin { /fill { /clip load PATdraw newpath } bind def /eofill { /eoclip load PATdraw newpath } bind def /stroke { PATstroke } bind def /show { 0 0 null 0 0 6 -1 roll PATawidthshow } bind def /ashow { 0 0 null 6 3 roll PATawidthshow } bind def /widthshow { 0 0 3 -1 roll PATawidthshow } bind def /awidthshow { PATawidthshow } bind def /kshow { PATkshow } bind def } { /fill { oldfill } bind def /eofill { oldeofill } bind def /stroke { oldstroke } bind def /show { oldshow } bind def /ashow { oldashow } bind def /widthshow { oldwidthshow } bind def /awidthshow { oldawidthshow } bind def /kshow { oldkshow } bind def } ifelse end } bind def false PATredef % Conditionally define setcmykcolor if not available /setcmykcolor where { pop } { /setcmykcolor { 1 sub 4 1 roll 3 { 3 index add neg dup 0 lt { pop 0 } if 3 1 roll } repeat setrgbcolor - pop } bind def } ifelse /PATsc { % colorarray aload length % c1 ... cn length dup 1 eq { pop setgray } { 3 eq { setrgbcolor } { setcmykcolor } ifelse } ifelse } bind def /PATsg { % dict begin lw setlinewidth lc setlinecap lj setlinejoin ml setmiterlimit ds aload pop setdash cc aload pop setrgbcolor cm setmatrix end } bind def /PATDict 3 dict def /PATsp { true PATredef PATDict begin /CurrentPattern exch def % If it's an uncolored pattern, save the color CurrentPattern /PaintType get 2 eq { /PColor exch def } if /CColor [ currentrgbcolor ] def end } bind def % PATstroke - stroke with the current pattern /PATstroke { countdictstack save mark { currentpoint strokepath moveto PATpcalc % proc nw nh px py clip newpath PATfill } stopped { (*** PATstroke Warning: Path is too complex, stroking with gray) = cleartomark restore countdictstack exch sub dup 0 gt { { end } repeat } { pop } ifelse gsave 0.5 setgray oldstroke grestore } { pop restore pop } ifelse newpath } bind def /PATtcalc { % modmtx tilingtype PATtcalc tilematrix % Note: tiling types 2 and 3 are not supported gsave exch concat % tilingtype matrix currentmatrix exch % cmtx tilingtype % Tiling type 1 and 3: constant spacing 2 ne { % Distort the pattern so that it occupies % an integral number of device pixels dup 4 get exch dup 5 get exch % tx ty cmtx XStep 0 dtransform round exch round exch % tx ty cmtx dx.x dx.y XStep div exch XStep div exch % tx ty cmtx a b 0 YStep dtransform round exch round exch % tx ty cmtx a b dy.x dy.y YStep div exch YStep div exch % tx ty cmtx a b c d 7 -3 roll astore % { a b c d tx ty } } if grestore } bind def /PATusp { false PATredef PATDict begin CColor PATsc end } bind def % right45 11 dict begin /PaintType 1 def /PatternType 1 def /TilingType 1 def /BBox [0 0 1 1] def /XStep 1 def /YStep 1 def /PatWidth 1 def /PatHeight 1 def /Multi 2 def /PaintData [ { clippath } bind { 32 32 true [ 32 0 0 -32 0 32 ] {<010101010202020204040404080808081010101020202020 404040408080808001010101020202020404040408080808 101010102020202040404040808080800101010102020202 040404040808080810101010202020204040404080808080 010101010202020204040404080808081010101020202020 4040404080808080>} imagemask } bind ] def /PaintProc { pop exec fill } def currentdict end /P5 exch def 1.1111 1.1111 scale %restore scale /cp {closepath} bind def /ef {eofill} bind def /gr {grestore} bind def /gs {gsave} bind def /sa {save} bind def /rs {restore} bind def /l {lineto} bind def /m {moveto} bind def /rm {rmoveto} bind def /n {newpath} bind def /s {stroke} bind def /sh {show} bind def /slc {setlinecap} bind def /slj {setlinejoin} bind def /slw {setlinewidth} bind def /srgb {setrgbcolor} bind def /rot {rotate} bind def /sc {scale} bind def /sd {setdash} bind def /ff {findfont} bind def /sf {setfont} bind def /scf {scalefont} bind def /sw {stringwidth} bind def /tr {translate} bind def /tnt {dup dup currentrgbcolor 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add 4 -2 roll dup 1 exch sub 3 -1 roll mul add srgb} bind def /shd {dup dup currentrgbcolor 4 -2 roll mul 4 -2 roll mul 4 -2 roll mul srgb} bind def /DrawEllipse { /endangle exch def /startangle exch def /yrad exch def /xrad exch def /y exch def /x exch def /savematrix mtrx currentmatrix def x y tr xrad yrad sc 0 0 1 startangle endangle arc closepath savematrix setmatrix } def /$F2psBegin {$F2psDict begin /$F2psEnteredState save def} def /$F2psEnd {$F2psEnteredState restore end} def %%EndProlog $F2psBegin 10 setmiterlimit n 0 612 m 0 0 l 792 0 l 792 612 l cp clip 0.06000 0.06000 sc 7.500 slw % Ellipse n 4383 2885 170 227 0 360 DrawEllipse gs col4 1.00 shd ef gr gs col4 s gr % Ellipse n 5063 2885 170 227 0 360 DrawEllipse gs col4 1.00 shd ef gr gs col4 s gr % Ellipse n 5744 2885 170 227 0 360 DrawEllipse gs col4 1.00 shd ef gr gs col4 s gr % Ellipse n 6424 2885 170 227 0 360 DrawEllipse gs col4 1.00 shd ef gr gs col4 s gr % Ellipse n 7105 2885 170 227 0 360 DrawEllipse gs col4 1.00 shd ef gr gs col4 s gr % Ellipse n 7785 2885 170 227 0 360 DrawEllipse gs col4 1.00 shd ef gr gs col4 s gr % Ellipse n 8466 2885 170 227 0 360 DrawEllipse gs col4 1.00 shd ef gr gs col4 s gr % Ellipse n 9146 2885 170 227 0 360 DrawEllipse gs col4 1.00 shd ef gr gs col4 s gr % Ellipse n 4383 3792 170 227 0 360 DrawEllipse gs col4 1.00 shd ef gr gs col4 s gr % Ellipse n 5063 3792 170 227 0 360 DrawEllipse gs col4 1.00 shd ef gr gs col4 s gr % Ellipse n 5744 3792 170 227 0 360 DrawEllipse gs col4 1.00 shd ef gr gs col4 s gr % Ellipse n 6424 3792 170 227 0 360 DrawEllipse gs col4 1.00 shd ef gr gs col4 s gr % Ellipse n 7105 3792 170 227 0 360 DrawEllipse gs col4 1.00 shd ef gr gs col4 s gr % Ellipse n 7785 3792 170 227 0 360 DrawEllipse gs col4 1.00 shd ef gr gs col4 s gr % Ellipse n 8466 3792 170 227 0 360 DrawEllipse gs col4 1.00 shd ef gr gs col4 s gr % Ellipse n 9146 3792 170 227 0 360 DrawEllipse gs col4 1.00 shd ef gr gs col4 s gr % Ellipse n 4383 4699 170 227 0 360 DrawEllipse gs col4 1.00 shd ef gr gs col4 s gr % Ellipse n 5063 4699 170 227 0 360 DrawEllipse gs col4 1.00 shd ef gr gs col4 s gr % Ellipse n 5744 4699 170 227 0 360 DrawEllipse gs col4 1.00 shd ef gr gs col4 s gr % Ellipse n 6424 4699 170 227 0 360 DrawEllipse gs col4 1.00 shd ef gr gs col4 s gr % Ellipse n 7105 4699 170 227 0 360 DrawEllipse gs col4 1.00 shd ef gr gs col4 s gr % Ellipse n 7785 4699 170 227 0 360 DrawEllipse gs col4 1.00 shd ef gr gs col4 s gr % Ellipse n 8466 4699 170 227 0 360 DrawEllipse gs col4 1.00 shd ef gr gs col4 s gr % Ellipse n 9146 4699 170 227 0 360 DrawEllipse gs col4 1.00 shd ef gr gs col4 s gr % Ellipse n 4666 5947 284 113 0 360 DrawEllipse gs /PC [[0.00 0.00 1.00] [0.00 0.00 1.00]] def 15.00 15.00 sc P5 [16 0 0 -16 292.13 388.93] PATmp PATsp ef gr PATusp gs col1 s gr % Ellipse n 6027 5947 284 113 0 360 DrawEllipse gs /PC [[0.00 0.00 1.00] [0.00 0.00 1.00]] def 15.00 15.00 sc P5 [16 0 0 -16 382.87 388.93] PATmp PATsp ef gr PATusp gs col1 s gr % Ellipse n 7502 5947 284 113 0 360 DrawEllipse gs /PC [[0.00 0.00 1.00] [0.00 0.00 1.00]] def 15.00 15.00 sc P5 [16 0 0 -16 481.20 388.93] PATmp PATsp ef gr PATusp gs col1 s gr % Ellipse n 8863 5947 284 113 0 360 DrawEllipse gs /PC [[0.00 0.00 1.00] [0.00 0.00 1.00]] def 15.00 15.00 sc P5 [16 0 0 -16 571.93 388.93] PATmp PATsp ef gr PATusp gs col1 s gr /AvantGarde-Demi ff 285.00 scf sf 2625 6060 m gs 1 -1 sc (Sum) col1 sh gr 15.000 slw % Polyline [100.0] 0 sd n 4174 2544 m 4099 2544 4099 4964 75 arcto 4 {pop} repeat 4099 5039 5272 5039 75 arcto 4 {pop} repeat 5347 5039 5347 2619 75 arcto 4 {pop} repeat 5347 2544 4174 2544 75 arcto 4 {pop} repeat cp gs col1 s gr [] 0 sd % Polyline [100.0] 0 sd n 5535 2544 m 5460 2544 5460 4964 75 arcto 4 {pop} repeat 5460 5039 6633 5039 75 arcto 4 {pop} repeat 6708 5039 6708 2619 75 arcto 4 {pop} repeat 6708 2544 5535 2544 75 arcto 4 {pop} repeat cp gs col1 s gr [] 0 sd % Polyline [100.0] 0 sd n 6896 2544 m 6821 2544 6821 4964 75 arcto 4 {pop} repeat 6821 5039 7994 5039 75 arcto 4 {pop} repeat 8069 5039 8069 2619 75 arcto 4 {pop} repeat 8069 2544 6896 2544 75 arcto 4 {pop} repeat cp gs col1 s gr [] 0 sd % Polyline [100.0] 0 sd n 8257 2544 m 8182 2544 8182 4964 75 arcto 4 {pop} repeat 8182 5039 9355 5039 75 arcto 4 {pop} repeat 9430 5039 9430 2619 75 arcto 4 {pop} repeat 9430 2544 8257 2544 75 arcto 4 {pop} repeat cp gs col1 s gr [] 0 sd % Polyline gs clippath 4490 5164 m 4613 5165 l 4504 5222 l 4702 5175 l 4688 5117 l cp clip n 3702 5380 m 4666 5153 l gs /PC [[1.00 0.00 1.00] [1.00 0.00 1.00]] def 15.00 15.00 sc P5 [16 0 0 -16 246.80 343.53] PATmp PATsp ef gr PATusp gs col5 s gr gr % arrowhead n 4490 5164 m 4613 5165 l 4504 5222 l 4497 5193 l 4490 5164 l cp gs col5 1.00 shd ef gr col5 s /AvantGarde-Demi ff 285.00 scf sf 2663 2998 m gs 1 -1 sc (Stream 1) col4 sh gr /AvantGarde-Demi ff 285.00 scf sf 2663 3905 m gs 1 -1 sc (Stream 2) col4 sh gr /AvantGarde-Demi ff 285.00 scf sf 2663 4813 m gs 1 -1 sc (Stream 3) col4 sh gr /AvantGarde-Demi ff 210.00 scf sf 2625 5607 m gs 1 -1 sc (Group Size = 2) col5 sh gr /AvantGarde-Demi ff 210.00 scf sf 2625 6741 m gs 1 -1 sc (Sum is approximately normal when \(number of streams\) x \(block size\)) col5 sh gr /AvantGarde-Demi ff 210.00 scf sf 5630 6956 m gs 1 -1 sc (is "large".) col5 sh gr /AvantGarde-Demi ff 285.00 scf sf 4610 1977 m gs 1 -1 sc (Sum of uniform variates) col9 sh gr $F2psEnd rs end SHAR_EOF fi # end of overwriting check if test -f 'sum.fig' then echo shar: will not over-write existing file "'sum.fig'" else cat << "SHAR_EOF" > 'sum.fig' #FIG 3.1 Landscape Center Inches 1200 2 6 4213 2658 9316 3112 1 1 0 1 4 4 0 0 20 0.000 1 0.0000 4383 2885 170 227 4383 2885 4553 3112 1 1 0 1 4 4 0 0 20 0.000 1 0.0000 5063 2885 170 227 5063 2885 5233 3112 1 1 0 1 4 4 0 0 20 0.000 1 0.0000 5744 2885 170 227 5744 2885 5914 3112 1 1 0 1 4 4 0 0 20 0.000 1 0.0000 6424 2885 170 227 6424 2885 6594 3112 1 1 0 1 4 4 0 0 20 0.000 1 0.0000 7105 2885 170 227 7105 2885 7275 3112 1 1 0 1 4 4 0 0 20 0.000 1 0.0000 7785 2885 170 227 7785 2885 7955 3112 1 1 0 1 4 4 0 0 20 0.000 1 0.0000 8466 2885 170 227 8466 2885 8636 3112 1 1 0 1 4 4 0 0 20 0.000 1 0.0000 9146 2885 170 227 9146 2885 9316 3112 -6 6 4213 3565 9316 4019 1 1 0 1 4 4 0 0 20 0.000 1 0.0000 4383 3792 170 227 4383 3792 4553 4019 1 1 0 1 4 4 0 0 20 0.000 1 0.0000 5063 3792 170 227 5063 3792 5233 4019 1 1 0 1 4 4 0 0 20 0.000 1 0.0000 5744 3792 170 227 5744 3792 5914 4019 1 1 0 1 4 4 0 0 20 0.000 1 0.0000 6424 3792 170 227 6424 3792 6594 4019 1 1 0 1 4 4 0 0 20 0.000 1 0.0000 7105 3792 170 227 7105 3792 7275 4019 1 1 0 1 4 4 0 0 20 0.000 1 0.0000 7785 3792 170 227 7785 3792 7955 4019 1 1 0 1 4 4 0 0 20 0.000 1 0.0000 8466 3792 170 227 8466 3792 8636 4019 1 1 0 1 4 4 0 0 20 0.000 1 0.0000 9146 3792 170 227 9146 3792 9316 4019 -6 6 4213 4472 9316 4926 1 1 0 1 4 4 0 0 20 0.000 1 0.0000 4383 4699 170 227 4383 4699 4553 4926 1 1 0 1 4 4 0 0 20 0.000 1 0.0000 5063 4699 170 227 5063 4699 5233 4926 1 1 0 1 4 4 0 0 20 0.000 1 0.0000 5744 4699 170 227 5744 4699 5914 4926 1 1 0 1 4 4 0 0 20 0.000 1 0.0000 6424 4699 170 227 6424 4699 6594 4926 1 1 0 1 4 4 0 0 20 0.000 1 0.0000 7105 4699 170 227 7105 4699 7275 4926 1 1 0 1 4 4 0 0 20 0.000 1 0.0000 7785 4699 170 227 7785 4699 7955 4926 1 1 0 1 4 4 0 0 20 0.000 1 0.0000 8466 4699 170 227 8466 4699 8636 4926 1 1 0 1 4 4 0 0 20 0.000 1 0.0000 9146 4699 170 227 9146 4699 9316 4926 -6 6 2625 5833 9146 6117 1 1 0 1 1 1 0 0 45 0.000 1 0.0000 4666 5947 284 113 4666 5947 4383 6060 1 1 0 1 1 1 0 0 45 0.000 1 0.0000 6027 5947 284 113 6027 5947 5744 6060 1 1 0 1 1 1 0 0 45 0.000 1 0.0000 7502 5947 284 113 7502 5947 7218 6060 1 1 0 1 1 1 0 0 45 0.000 1 0.0000 8863 5947 284 113 8863 5947 8579 6060 4 0 1 0 0 6 19 0.0000 4 240 585 2625 6060 Sum\001 -6 2 4 1 2 1 7 0 0 -1 6.000 0 0 5 0 0 5 5347 5039 5347 2544 4099 2544 4099 5039 5347 5039 2 4 1 2 1 7 0 0 -1 6.000 0 0 5 0 0 5 6708 5039 6708 2544 5460 2544 5460 5039 6708 5039 2 4 1 2 1 7 0 0 -1 6.000 0 0 5 0 0 5 8069 5039 8069 2544 6821 2544 6821 5039 8069 5039 2 4 1 2 1 7 0 0 -1 6.000 0 0 5 0 0 5 9430 5039 9430 2544 8182 2544 8182 5039 9430 5039 2 1 0 2 5 5 0 0 45 0.000 0 0 -1 1 0 2 1 1 2.00 60.00 120.00 3702 5380 4666 5153 4 0 4 0 0 6 19 0.0000 4 240 1215 2663 2998 Stream 1\001 4 0 4 0 0 6 19 0.0000 4 240 1215 2663 3905 Stream 2\001 4 0 4 0 0 6 19 0.0000 4 240 1215 2663 4813 Stream 3\001 4 0 5 0 0 6 14 0.0000 4 210 1425 2625 5607 Group Size = 2\001 4 0 5 0 0 6 14 0.0000 4 210 6915 2625 6741 Sum is approximately normal when (number of streams) x (block size)\001 4 0 5 0 0 6 14 0.0000 4 210 915 5630 6956 is "large".\001 4 0 9 0 0 6 19 0.0000 4 240 3195 4610 1977 Sum of uniform variates\001 SHAR_EOF fi # end of overwriting check if test -f 'sum.gif' then echo shar: will not over-write existing file "'sum.gif'" else cat << "SHAR_EOF" > 'sum.gif' GIF87aæxòÿÿÿ°ÿÿÿÿ,æxþºÜþ0ÊI«½8ëÍ»ÿ`(Ždižhª®lë¾p,Ïtmßx®ï|ïÿÀ pH,ȤrÉl:ŸÐ¨tJ­Z¯Ø¬vËíz¿à°xL.›Ïè´zÍn»ßð¸|Nî÷ž´Wôu„Qx‡8‡|y‹Oƒ‘…”J“1'š_˜•ŸDž5¢ ¤X¦ ©<˜ˆ‰ˆ® ± ­y{š¹ºµŽ¸‹°œ ·¾»¯¿ÆÃÀ®ÄÅ~¨ªÒ#³Ë‰´ÍÙžÙБÄÆÕÇÜàÚÚ¼×æÈÌêëÕå}ÍÓô+óÝÖÁò“ßÊßúØáó‡/`·qü*Ì›»kJôå/Z½‹î9{ÖþÏÚ¿_=:$¨lŸ@[½:’txÒH.ŽDÙ £ÍM&óqÜrbÁg3†<&ôc:‘>Gæ¤I’(S‚ïàÝœ*béAžHƒ*:ÑiÑ’\á©d•2ìË­=+[/-Õ·‚Ö.d‰UkR¯Yñ:Å{âX®tí‚zVä%À4ÝÂ]ŒNîÃÇÝöK¨ðäW«ƒµªLL¸³eµž»òÄ̸tãšïò"&·’n;˜sÛÊÝ9‚0¶“ÍùävÏ´ïÓfAF¶qC½g7úu¬ZqÒr™5¿n]Üâïëسkßν»÷ïàËO¾¼ùóèÓ«_Ͼ½û÷ðãËŸO¿¾ýûøóëßÏ¿¿þÿÿ(à€hà&¨à‚ 6èàƒF(á„Vhá…f¨á†vèᇠ†(âˆ$–hâ‰(¦¨âŠ,¶èâ‹0Æ(ãŒ4Öhã50€:ö¸c>êÈcCúXdG ‰Á ÉäN&ù¤QI¤•Ff0%U6y¥—Y‚‰$–cŠ©ägBù¥ša²Y¦›iR¹¦œm26fœ\Ιg{¾I§Ÿ}âé$ŸtR)å¡d ªg—pêɦ¡‰nÉ蟊ò9i ŽZ) —vºè§ƒny M\º§¦žEª¤.‘êEx¢*j¬PÐJ붊Z«®°òŠÅ­¿úz°¶¬°Uþ;,±2›,²Ï†ál…ÓNQ­¬ÒBK­¶ à­·0| ®׊+@¸â~P­¹1°K.·îº¯wÓš›î ö~ÛA½ùž‹o¿ûBÛ¯¿ÿæp³0½È|¯ 뫳 qÅ[1ÁGœ±°£2wo̱&Ÿ\AÉ#“òľ¾Ü1ÆZÆlòÌ£'³Ë7Kpm·=óÜò?°³Ð4CPôÑ(­4·7¥lqR«ìeU#=´•XK]BÖOwÍô`‡]ÕS{€¶Õrb°vÓes}ÁÛp{M4Ôtƒ÷Úí­6Ú” 8Õƒó=wáz#~õáqÿÝøâ×­ö’þ³½®ä‰ûݶ•®yžŒ+N9æw+ü°Ñ“÷0¯ã¢kÐy霓Îúã Çþ¹ë²CNÁë³Ûmx £Îö«O@+ï o¼®Ê~;ì 4ï|ëfGŸ;Ò· ±ð@ÏÃö+‹Zyê¡?/·õÙÛ~}à[Žï=Âã[€§û½Ón:Ûà‘ÿòП|üáë±7@þ¡o}bC ôà?¦OûsêP wÔ?˜@ó‰Px ,õ~7ÂN èzXË‚ç1ßE`> ݶö0…ðsáæ<(D À0‡8b WX0Žëtà{âÔÒu/wnþƒKÒa! Äꈻë! »Æ0q~b bg¯î¹±…I¼"÷¢8EòÁ1sk¼áùµÅ ®yÔcóiÂîjdË 9æ47Ò‘‘v|c"ûGé’‰fü£¶ºÈÃAn2™ü\Ñ÷ÆG挈ܻ£$¹IÚO}¢ü$%¨¹K¾–¢³¥ AˆÀQ2„$þ&‡Aa¢Òˆ­te#§g¿Ë2”»"4ÇÆÌhÖN·Ä%5¯y‚ís•©tdÁõÈc ²nÙĦ5¹iÈg¶³uÎĤ6—ÉNdºÓžÔó¥+ILƒ¡Ð`åT%+98Ï­Us›ñLç4é™Ðu.‘šþ Ýf'ó‰Hf‡¤"9ÇiÎfQ}hÒ8ÐNT¢>ü!JEzJ’VÒ¤ÊléonuÏw®´ƒ´¤çAGJãÉ3¦Dó~ªNƒšX ª?…ŠO£þï¦8ý¢SŸªSötª;]XvXÆSÏuµ§ «*UeêR?’Õ«g5`IÓZ¿ài‡«lkP?ÚÔ¹ŽªQ•ª]ï*V/¾4®üªo(&XïyÎZ¨þ³=$h×ÚÏôEô} ÚCZC‚Ã!%m[XâV]ðjmfi;è¦^<ºÌm[E=Æ«j§Ž³©)­µTwÚ¬®žíjÛ°ÈÊu´e]«e[k°Út×¼ö,buÝkÛpm_«þ&¸»EËQ!ÄºÞ G¹`#Šqƒ•å)WùYanëŽ|¼4ä´þ Ú½í.¼âÿ&÷,ÿúóX èÉ6z WÝòŽñ“ÔíZdn}JqX'}¨UGzÓ•žu­Ç¼à>¸Õ›.Zþ  ¾ö:ÙÕþu®/í5¯''.ò¨Î]æq/{N5*Õ¿Îq£R¦1sMÆ®ž¨n7|ØŽÆ£«ñí¥Ë¿Nr‹ÍП5Ä+«·}w›ìŸ|Üÿv¸^î’zÝ!èÙ`h«ÔhàɘI1›~õ¢?}â9~û Ÿ0ô¹Ç}ÁÏt±óÕŠ‹ìhá+ÎæoþäÅ_ûÞ­jéëõqÕ§<±£™ý¼¢l®bòìbv”Õоö{ìîŸ~ûcs¿ðþU¿lùû>øØnï7oPó TÒ³Fw÷Gí'K¥w}Üg€Š·xñ§€¼7}àÇz³h‡>ÌW•~˜oøW€7ð·LöÇs8Z#ȸnáåMã—?ådJü÷z*Uy?§~7—i È€/‡ƒø};(€ëÆR+eKµxxTrःì¶~>˜V4÷~6˜Ššlqý gÈ‹7„¢I›3W…ß©‡©…º ÚD2è½x‰úÉ¡‘(¢J¡ è†êˆï§¢Çù mµ„ă‹Bw€$šŽ&jž¼‰£Z”‡(Z¢=:¢?jŸÇ÷tú3~äH|J‰.ªžÄGz ø¤‘w†J*4fל֤Î(¥ë¹¡ª{Sj£,:zaªxUZ¤l8A3†æ'~²)›îv¦7Z†Z*Ÿc ¦ §Kª…Pê£rZYwŠ†¼¸£­d‰Aꧩ§‰º§4 ˆ:¤tZ¦ˆ £÷hyRw~þþƒnz©WÕ„NzH•ø‰]Z(¤_Zm'بŒhZ]øX_H†°ƒÊçGÔfª]”ªJ¨À†«µ©«&Xª'ê«*~8Ndå±[z:ªD ©X8Íz§¨ ¬æ©D¼º¬sú¬æ˜©Hº£¨„Í—¬Ôyª z«Ôú©žªªºªûs­ž™­¸¶‚–Ê­ô:«Kˆ¬²jU©:š=ª ä:¬Ú««Aÿ­ÎJ KÆ‚õ®/h¬ù*£®ç© ¯\h¡ýÚK»¢˪û¢ „s­×­‡8¨˜:<ʨؚ§ú˜°»Eu ° §1‹°Ò*ª8sQ(+GIx.';<©èˆ>þê²x ãJ´ïx³«´zš£vª‡o%´¦Š´-KµËšN[±ÌÚ´j¨£3µâ‰j°©Œ^Ë´· ‡´HŒªø´[»Ã(³½'‹ÑIœëÚs䊌ËI¶l; ¿x•%Œ¯¸·£*·ƒŒDª·Z;·çqœó õy´¸ž¶i¸Ôè[Œ»žŽ«Z6[Pö˜š¨ªèˆ³ü[¡[·­IŽ}³´å“´¯Õ™¢6ª»º Z’‰ºQÙ “ù—ŽV—»û“cÉ»S¹˜Éå—b ˜¾Ë!Êò,¸«šËû1Íë]uV)‰%Ó &Õ«gF(É{\¹ò¼dò4Þ+&Ÿ*›R¾’*œò)’H¾þæ‹(fr¾–²( ɾð›¾ñ{¿öË)ó˾îÛ(ýK)õ+(»Ù+ƒò¿˜bÀž¿^VÀ‘‚ÀèÛ¾@"T ü¾Œ¿Ü$œÀù{ÁþÛÀL– Â"<Â$\Â&|Â(œÂ*¼ ÐÂ.ü°Â4Ã0,Ã3LÃ-lÃ2‚Ã1¬Ã-ÂÃ.ìÃ+Ä/,Ä(ÄF<Ä<œÄ)BÄL|ÄHüÄ&ÅR\"T\Å"âÄX<"Z¼Å!rÅ^ì!]Æ\\Äd|ÆhœÆj¼Æl fìfœÃ(Äm|8Üw,Ç&PÃuŒz <Ç= ȃ|zÈ}œ ˆÌqLÇ„¼9Ɉ<ÉwLþÈ‹lÉoüÈ pɉL œŒÉ˜,LJÕ ÉŽÊALÃPÊðÉ\¢ÌDZÜé<È’LË,˶LÊ…ìÊà˯<³LDZÌȼlÊš¼É…lÌǬÉKܬlÊËÌ•pÊÎŒËƜ̒œÍn|ÌÄͨ<ÍÖLÍŸàÈ£¬Ì¸ÜÌüͽ¼Ë¡ŒÌ0Îä\Î|¬ÌÒÌÎEͪμ\ÏÎó\™œÌ ,ÍëÜÏ«lΕ<Ðÿ¼ÏýÀüÐ ÑÍÂÓ\ÑѽÑÝÑýÑ Ò"=Ò$]Ò&}Ò(Ò*½ÒFL¿á+%¯¢¼ä»,ü˽í)c.*É•ÓŒ—<þÓ?öÓ™f=]BíÒÏuÔ3½ÓJ]ÔÐÛÔNí^g²½ÚÕôÔV­Ó6Õ@\½ÔDýÒ$ùÕZ-edÕJvÖ]_j½Ö(Ù½œ%CíÓm=×l]×vÝfxM(^½×|M‘uò&M},~MÕo]؆m_ˆØ,¹Ø-9Á‚]%Wò×ÁåØ9iÙh‰ÙèeÙ›=ÙiÂ(‘-Öïë×½Ø4ÆÙamÚfý#¡ÚÖKÓ…½Ú¤m]ˆ-Û{ýÔ…ÒÁ¹½Û†ÛLæÛ,6Û¶ÝÖý(ªÀ¯ÍÛ½×XMÜ[­ÖÍ ÝÅÛr ÚŸ-qÎMÛd]ÙgÔÛýÛk‚Ôƭ܇ÕL­ÔþTÕç}ÔÚ]¿<ÞÇ-5-Óe}–óÞWÍÒú½ßüÝßþýßà>à^à~àžà ¾à Þàþàá>á^á~ážá¾áÞáþá â">â$^â&~â(žâ*> ÝM/žÐã/ðâ4NÏ9.®|ãñ êÌÍ`ã;ÞÊ%Ðàã5^äÐãL^D~äO®JŽãN.U¾Í­<å[Ž]å]nÏÍä`žQ>ò¬ãfþäeNå>^Ë2îækÎåM.Îî¬Ê =ËÝìÍmÏ =Ìè,æ·\ËLèøÌÌí Í}ŽÎ»¼Ä™ ç…ŽþÍ~¾è¾èÜ|Ëb~ÐùüÍ–Œèž®è€ê ¼é”Ìç¤Þè™nÐ Ϙžé•é.êüÌèBä§|ÎDœËý\꧎χ¾Ïõ<èÏœë¨|Ïé êœì¹>ÌpnÐÍžÇÁîЮŽçwNì íº~êÈ^Ãc íN¬Ë[.Ï£ îÅ^îšîÂnè°ÎãŒÌçœê½çÎÎÞéz^ïo¬åÚÜçžèñ¾êûŽïZþîçnïËŒéÅLë¬îÎBŽëÕÏïÏ ÏÌónç—ä÷Þì¯ë ½Èã^ñŸïØìñþþïÓ¾Çúžò ïîã ë.Ÿèð,ñúïÃnêanòÿþNð5_óç>ñZLð'?é3ò‘~ó9¯ó _ÌH_ô¯ÐÝõ©¾ÍGŸã-^Ð ÿÌ*/ó«ê¯ó=ßÌë.ò^?öšNî-îðÙ ôïô´õŒì+?ô&ßõDoìä^ë>÷#ím¿ò¡Nò$öTßΗìÏžÞêZßæOïôBOÐÙ^ñÇNï/ì_í•ä_ø“¾ùvÏø}Oè4Ÿæ‘ÏóêŒ÷õ¥òQÏôV¯ç¨ñè~Ñoð!/÷}ør綮ìú»nçÜN÷{O÷‚žú ísïöRÍí~öé¼éaÞûé.é_/øïú×ßüØè1?÷×ìýþz¯ü,ÏéŠïû®öºlö_üÔíh~ë‡_úé_ïánó_÷Éò³ïÿ@°Ôº A +_ºsWÒ5y–÷86VÌi¶`¼¶ªSŠâý²­Â)Xm÷³ýnB'FDéJI¤åÂyجvËízЯxLÆæÊè´šl\»ßðxÝ–Û³õ»ž~ïÿ3€‚gƒ†‡Z…bŠˆiŒƒ…|}”—]–˜›vš‹œjž £¤¥¦§¨©ª«¬­®z“ >°¯¶·¸¹º¸±µ~r²»ÂÃÄÅƈÁ“¡¾ÇÍÎÏкK¢C!×#ÊÑÛÜÝÞ†×yJUNTæ@Úßêëìí‰2™LBáóš)éîøùúÍáÔð4ØV˜»·¯ Áƒ«¦y ðŸ5*#Jœ¨ÊÊz=0Ú H±£Ç˜ 'index.html' SPRNG: Scalable Parallel Pseudo-Random Number Generator Library

SPRNG Documentation

The following documents are available for the SPRNG parallel pseudorandom number generator libraries:

Quick Start

This is a brief tutorial on installing and using some simple SPRNG features. It assumes some experience in installing software. However, links are provided in case more details are required.

User's Guide

The User's Guide contains detailed information on installing and using the libraries. It also discusses testing the generators for their quality.

Reference Manual

Detailed discussions of the various SPRNG functions are presented in this document.

Quick Reference

Quick reference sheets for the SPRNG interfaces.

Introduction to Parallel RNGs

A discussion of random number generators for use in parallel applications.

SHAR_EOF fi # end of overwriting check if test -f 'install.html' then echo shar: will not over-write existing file "'install.html'" else cat << "SHAR_EOF" > 'install.html' SPRNG: Scalable Parallel Pseudo-Random Number Generator Library

User's Guide:Installation

Next:Platforms Previous:Introduction


SPRNG Installation

After Obtaining SPRNG source code:

  • Change directory to the sprng directory. For example:

    cd sprng

    SPRNG organization

    The main SPRNG directory, sprng, contains the following subdirectories:

    1. SRC contains the source code for the SPRNG libraries. The code for each generator is in a separate subdirectory. Code common to all the generators is in the SRC directory itself.
    2. EXAMPLES contains example C and FORTRAN programs that demonstrate the use of the SPRNG libraries.
    3. DOCS contains SPRNG documentations as a compressed tar file of several html documents. Please uncompress and untar them and see the toc.html file for the rest of the links. The SPRNG home page has links to the updated version of this documentation.
    4. TESTS contains source code for routines that test the quality of the random number generators.
    5. lib The SPRNG random number libraries will be placed here by default when you compile them.
    6. include The SPRNG header files are located here.

    Building the SPRNG libraries

    In order to build the SPRNG libraries, the example programs and the executables that test the quality of the random number generators, please edit the file make.CHOICES

    The make.CHOICES file looks like this:

     
    #PLAT = CONVEX 
    PLAT = SGI 
    #PLAT = SP2 
    #PLAT = T3E 
    

    If users wish to build SPRNG on the HP/Convex Exemplar, then they should comment out the line specifying the SGI and uncomment the line specifying the CONVEX as follows:

     
    PLAT = CONVEX 
    #PLAT = SGI 
    #PLAT = SP2 
    #PLAT = T3E 
    

    Then, the make command will build the libraries using the compiler options set in the file SRC/make.CONVEX. The user may wish to edit this file if a different compiler or different compiler options are wanted. In particular, if a FORTRAN 77 compiler or ranlib is not available, please set F77 or RANLIB to 'echo' respectively.

    Currently SPRNG has been tested on CRAY T3E, HP/CONVEX Exemplar, IBM SP2, SGI-CRAY Origin 2000 and SGI Power Challenge parallel computers. It has also been ported to HP and SUN workstations and PC running Linux. Please read the notes on the makefile to port SPRNG to other machines.

    Alternatively, the subdirectories can be built individually by executing the make command in the desired subdirectory.

    The compilation process includes a file called make.platform, depending on the platform. We have set certain variables based on their setting on our systems. If they differ on your system, please see our explanation for the makefile and make suitable changes.

    By default, the SPRNG libraries are placed in the lib sub-directory. Along with the libraries, certain executables for timing the generators and for checking whether the generators ported correctly placed in the main sprng directory.

    Checking the libraries

    Once the SPRNG library has been built, the user should check that the library has indeed ported correctly. Please execute the following command in the directory sprng:

    ./checksprng

    The output will give the results for the different SPRNG libraries and interfaces. All the tests should be PASSED. If any of the test FAILS, then SPRNG has not ported correctly. Please report this problem to us.

    Timing the libraries

    The user can check the speed of the different SPRNG random number generators by executing the following command in the directory sprng:

    ./timesprng

    The output will give the time taken for generating a million random numbers, and also the number of random numbers generated per second, expressed in MRS (Million Random numbers per Second).


  • [Quick Start] [User's Guide] [Reference Manual] [Quick Reference] [Next: Platforms]

    SHAR_EOF fi # end of overwriting check if test -f 'introduction.html' then echo shar: will not over-write existing file "'introduction.html'" else cat << "SHAR_EOF" > 'introduction.html' SPRNG: Scalable Parallel Pseudo-Random Number Generator Library

    User's Guide: Introduction

    Next:Installation Previous:User's Guide Table of Contents


    Introduction

    SPRNG is a set of libraries for scalable and portable pseudorandom number generation, and has been developed keeping in mind the requirements of users involved in parallel Monte Carlo simulations.

    Monte Carlo calculations consume a large fraction of all supercomputing cycles. The accuracy of these computations is critically influenced by the quality of the random number generators used. While the issue of random number generation in sequential calculations has been well studied, albeit on less powerful computers, there has been comparatively less work done in the context of parallel Monte Carlo applications. SPRNG seeks to fill this gap by implementing parallel random number generators that satisfy the requirements given below.

    Desiderata for parallel random number generators

    Users generally desire the following from any parallel random number generator:
    Quality:

    Provide ``high quality'' pseudorandom numbers in a computationally inexpensive and scalable manner.

    Reproducibility:

    Provide totally reproducible streams of parallel pseudorandom numbers, independent of the number of processors used in the computation and of the loading produced by sharing of the parallel computer.

    Locality:

    Allow for the creation of unique pseudorandom number streams on a parallel machine with minimal interprocessor communication.

    Portability:

    Should be portable between serial and parallel platforms and must be available on the most commonly used workstations and supercomputers.

    SPRNG provides pseudorandom number generators that satisfy the above requirements.

    Generators implemented in SPRNG

    With the above goals in mind, SPRNG provides user-friendly interfaces for parallel FORTRAN and C programs which enables the user to easily obtain sufficiently uncorrelated pseudorandom number streams on different processors, with minimal inter-processor communication. Furthermore, the user can generate random numbers from more than one stream on each processor.

    The generators implemented in SPRNG are (i) two versions of Linear Congruential with Prime Addend and (ii) modified Additive Lagged Fibonacci (iii) Multiplicative Lagged Fibonacci (iv) Combined Multiple Recursive Generator (v) Prime Modulus Linear Congruential Generator.

    SPRNG functionality

    SPRNG provides more functionality than just the ability to generate independent streams on different processors. We mention two of these and their applications below. (i) In order to balance the load the user may want to assign the computations involving a particular random number stream to a different process. A user may also want to check-point the program. SPRNG facilitates these tasks by enabling the user to obtain the state of a stream in a machine independent format using the functions (un)pack_sprng. (ii) In some branching computations, new generators are spawned from old ones. SPRNG enables the spawning of new streams while ensuring their independence from streams on any of the processors, with minimal inter-processor communication. Further details on the functionality provided by SPRNG is given in the section on SPRNG usage.

    SPRNG features

    In order to be accessible to a wide spectrum of supercomputer users, SPRNG has the following features:
    Generators:

    48 bit Linear Congruential, 64 bit Linear Congruential, modified Additive Lagged Fibonacci, (iii) Multiplicative Lagged Fibonacci, Combined Multiple Recursive, and Prime Modulus Linear Congruential(iii) generators are implemented

    Languages:

    C and FORTRAN interfaces are available. SPRNG is also callable from C++.

    Message Passing:

    Support is available for programs using MPI for message passing. Support for PVM may be added in later versions. However, PVM programs can still use the current version.

    Test Suite:

    A test suite with statistical tests and tests based on physical models (ex ISING model) is now provided. This can easily be used to test new generators.

    Platforms:

    SPRNG has been ported to CRAY T3E, HP/Convex Exemplar, IBM SP2, SGI-CRAY Origin 2000 and SGI Power Challenge parallel computers. It has also been ported to HP and SUN workstations, and also to PCs running Linux.

    Extensibility:

    SPRNG is easy to extend, and new parallel generators can easily be developed to support SPRNG features.


    [Quick 
Start] [User's 
Guide] [Reference 
Manual] [Quick 
Reference] [Next: 
Installation]

    SHAR_EOF fi # end of overwriting check if test -f 'languages.html' then echo shar: will not over-write existing file "'languages.html'" else cat << "SHAR_EOF" > 'languages.html' SPRNG: Scalable Parallel Pseudo-Random Number Generator Library

    User's Guide: Usage:Languages


    C and FORTRAN Usage

    SPRNG code is written in C. However, wrappers are provided for use by FORTRAN programmers too. In this section, we discuss some of the steps programmers in either of these languages need to take in order to use SPRNG.

    C Usage

    C users need to include the header file sprng.h.

    Example

    C++ Usage

    C++ users can follow the instructions given for C users.

    Serial Example
    Parallel Example

    FORTRAN Usage

    FORTRAN users need to include the header file sprng_f.h. If FORTRAN users make SPRNG calls in several subroutines, then they will need to include this file at the beginning of each subroutine. FORTRAN users should also be aware that certain SPRNG functions return pointers. These can be handled by FORTRAN users as mentioned in the note on Stream ID's. FORTRAN users who are not familiar with preprocessing directives could also take a look at the note on this topic.

    While SPRNG's FORTRAN documentation has been written keeping in mind FORTRAN 77 users, FORTRAN 90 users too can follow the same instructions, but replacing the FORTRAN 77 compiler with the FORTRAN 90 compiler.

    Example


    [Quick 
Start] [User's 
Guide] [Reference 
Manual] [Quick 
Reference]

    SHAR_EOF fi # end of overwriting check if test -f 'macros.html' then echo shar: will not over-write existing file "'macros.html'" else cat << "SHAR_EOF" > 'macros.html' SPRNG: Scalable Parallel Pseudo-Random Number Generator Library

    User's Guide:Macros


    Macros Defined or Used in SPRNG

    SPRNG users may wish to know the significance of the following macros:

    CHECK_POINTERS

    This macro invokes the interface with pointer checking.

    FLOAT_GEN

    This macro makes sprng return single precision values instead of the double precision default.

    MAX_PACKED_LENGTH

    This macro defines the maximum number of bytes required to store the state of any SPRNG stream when calls to pack_sprng are made. It is usually used by FORTRAN programmers to define an array of sufficient size.

    SPRNG_POINTER

    This macro defines an integer of the same size as a C pointer for use in FORTRAN programs. FORTRAN programmers can use this macro as if it were a FORTRAN data type. If the flag -DPOINTER_SIZE was set to a particular value while building the SPRNG library, then the same value should be used in compiling the user programs too.

    SIMPLE_SPRNG

    This macro invokes the simple interface.

    SPRNG_MPI

    This macro builds the MPI version of the SPRNG libraries.

    USE_MPI

    SPRNG needs to make MPI calls in the MPI version during calls to make_sprng_seed and during initialization in the simple interface. This macro enables these calls. Users running sequential program would not define this macro even if the MPI version of SPRNG has been installed. This macro can be used only if the MPI version of SPRNG has been installed.

    Apart from these macros, the parameters to the generators during initialization too are macros.


    [Quick 
Start] [User's 
Guide] [Reference 
Manual] [Quick 
Reference]

    SHAR_EOF fi # end of overwriting check if test -f 'makefile.html' then echo shar: will not over-write existing file "'makefile.html'" else cat << "SHAR_EOF" > 'makefile.html' SPRNG: Scalable Parallel Pseudo-Random Number Generator Library

    Users Guide:Installation: Makefiles


    SPRNG Makefiles

    The following information may help you port SPRNG to your machine.

    Platform dependent compilation

    There is a file included in the SPRNG distribution called make.CHOICES which sets the platform for compilation. Once this file is properly edited, the user can build the SPRNG libraries by simply using the make command.

    The make.CHOICES file looks like this:

     
    #PLAT = CONVEX 
    PLAT = SGI 
    #PLAT = SP2 
    #PLAT = T3E 
    

    If users wish to build SPRNG on the HP/Convex Exemplar, then they should comment out the line specifying the SGI and uncomment the line specifying the CONVEX as follows:

     
    PLAT = CONVEX 
    #PLAT = SGI 
    #PLAT = SP2 
    #PLAT = T3E 
    

    Then, the make command will build the libraries using the compiler options set in the file SRC/make.CONVEX The user may wish to edit this file if a different compiler or different compiler options are wanted.

    Variables in the Make.PLAT

    We shall next describe the different variables defined in the make.platform files. The makefile includes information from this file in order to determine the values of certain variables. We take as an example platform the make.SGI for use in an SGI Power Challenge. The relevant portion of the file is as follows:

     
    AR = ar 
    ARFLAGS = cr 
    #If your system does not have ranlib, then replace next statement with  
    #RANLIB = echo 
    RANLIB = ranlib 
    CC = cc 
    CLD = $(CC) 
    F77 = f77 
    F77LD = $(F77) 
    FFXN = -DAdd_ 
    # 64 bit compilation 
    # 
    # To use MPI, set the MPIDIR to location of mpi library, and MPILIB  
    # to name of mpi library. Remove # signs from beginning of next 3 lines. 
    # Also, if the previous compilation was without MPI, type: make realclean 
    # before compiling for mpi. 
    # 
    MPIDEF = -DSPRNG_MPI #Only if you plan to use MPI 
    MPIDIR = -L/usr/lib64 
    MPILIB = -lmpi 
    # 
    CFLAGS = -O2 -D$(PLAT) $(MPIDEF) -D_LONG_LONG -align64 -64   
    CLDFLAGS =  -align64 -64 # 64 bit compilation 
    FFLAGS = -O2 -align64   $(MPIDEF)  -DPOINTER_SIZE=8 -D_LONG_LONG -64  #64 bit compilation 
    F77LDFLAGS =  -align64 -64 # 64 bit compilation 
    CPP = gcc -E -P   $(MPIDEF)  -DPOINTER_SIZE=8 -D_LONG_LONG # 64 bit compilation 
    INLINEOPT = -INLINE:must=get_rn_int,get_rn_dbl,get_rn_flt,get_rn_int_simple,get_rn_flt_simple,get_rn_dbl_simple 
    

    Descriptions of variables

    AR is the command to archive the library.

    ARFLAGS is the flag to the archiver. Here we create the library or replace the object files already archived.

    RANLIB is essentially used to generate the table of contents to the library. You can set this to "echo" if ranlib is not available on your machine.

    CC and CLD are the C compiler and loader respectively.

    F77 and F77LD are the FORTRAN77 compiler and loader respectively. If they are not avaiable, then set them to 'echo'.

    FFXN is needed for the following reason. SPRNG is written in C. FORTRAN wrappers are also available, which provide an interface to FORTRAN users. These wrappers are actually C functions. When a FORTRAN user calls a wrapper function fxn, FORTRAN compilers often change the name to something else, for example fxn_. Thus the wrappers should also have their function names modified the same way. The flag FFXN ensures that the correct modification is made to the wrapper function names during SPRNG installation. You can ignore FFXN if you do not wish to get a FORTRAN interface, and have set F77 to "echo".

    CFLAGS and CLDFLAGS are the flags to the C compiler and loader respectively.

    FFLAGS and F77LDFLAGS are the flags to the FORTRAN77 compiler and loader respectively.

    CPP is provided for the sake of those FORTRAN compilers which are not capable of calling the C preprocessor. SPRNG executables and example programs in FORTRAN have names of the form filename.F, and involve preprocessing directives. If some compiler cannot accept such a file, then we preprocess the file using the command:

    CPP filename.F

    The resulting file is called either filename.f or filename.i. In the latter case, the user should move it to a file called filename.f by issuing the following command:

    mv filename.i filename.f

    filename.f can be processed by the user's FORTRAN compiler. You can ignore this if your FORTRAN compiler can invoke the preprocessor itself, or if you do not wish to compile FORTRAN programs.

    MPIDEF should be set to -DSPRNG_MPI if the user is installing the MPI version of SPRNG. This line should be commented out, by appending a # sign, or removed otherwise. This flag causes a macro called SPRNG_MPI to be defined in the SPRNG code, which enables calls to MPI functions.

    MPIDIR indicates the path to the MPI library.

    MPILIB indicates the name of the MPI library.

    Note: MPIDEF, MPIDIR and MPILIB should be commented out or removed if the user does not wish to install the MPI version of SPRNG.

    Users may wish to use the above variables and flags in compiling their programs too. However, the flags -DSPRNG_MPI and -D_LONG_LONG, and the variables MPIDEF and FFXN are needed only during the SPRNG installation. Users can take a look at the Makefile in the EXAMPLES directory in order to see some compilation flags that they might wish to use.

    The flag -DPOINTERSIZE=8 indicates that the size of the pointer is 8 bytes. The default value assumed by SPRNG is 4 bytes. You must set this to the 8 if your machine has 8-bit pointers.

    INLINEOPT gives compiler options to inline certain functions, in order to improve efficiency. You can ignore this if you are not that concerned about efficiency.

    Porting SPRNG to new machines

    Please set the PLAT variable in make.CHOICES to GENERIC and edit the make.GENERIC to suit your system, after reading the explanations above. Little Endian machines may need the option: -DLittleEndian added to CFLAGS. In order to optimize the performance, please try the following: (i) Add -D_LONG_LONG to CFLAGS and/or(ii) Add -DGENERIC to CFLAGS. If checksprng passes, then SPRNG is installed correctly. If not, please remove whichever option caused SPRNG to fail and recompile.
    [Quick 
Start] [User's 
Guide] [Reference 
Manual] [Quick 
Reference]

    SHAR_EOF fi # end of overwriting check if test -f 'message-passing.html' then echo shar: will not over-write existing file "'message-passing.html'" else cat << "SHAR_EOF" > 'message-passing.html' SPRNG: Scalable Parallel Pseudo-Random Number Generator Library

    User's Guide:Details:Message Passing

    Next:Creating New SPRNG Generators Previous:Generators


    Message Passing

    Most SPRNG calls do not require message passing, though SPRNG provides utilities to make it easier for users to pass streams from one process to another. Message passing is used by SPRNG only in two cases: (i) when the same seed is required on all the processes in a call to make_sprng_seed, this function broadcasts a single seed to all the processes and (ii) during initialization with the simple interface, SPRNG needs to determine the total number of processes and the rank of the local process.

    MPI Version

    SPRNG uses MPI in order to obtain or broadcast the information mentioned in the two cases above. The MPI version of SPRNG provides functions that make these calls. This version is obtained by defining the macro SPRNG_MPI in the SPRNG makefile before building the libraries. Even if the MPI version of the library has been installed, SPRNG will make MPI calls only when the user defines the macro USE_MPI before including a SPRNG header file. This feature enables users to use SPRNG in sequential programs even if the MPI version has been installed.

    Note: In the MPI version with USE_MPI defined SPRNG first creates a new communicator when make_sprng_seed is called, in order to avoid any interference with the users communication calls. Then a new seed on the process with rank 0 is created, which is broadcast to all the processes. Users should ensure that if any process calls make_sprng_seed, then all processes do, in order to enable these collective operation to complete.

    In the simple interface, users running multiple processes should define the macro USE_MPI, in order to ensure that they obtain distinct streams on each process. The reason for this is that this interface makes MPI calls to determine the process rank, which is used to obtain different streams on the different processes. If the above mentioned macro is not used, then MPI calls are not made and the process rank is assumed to be 0 in each process.

    Use with PVM

    Later versions of SPRNG may have support for PVM too available. Currently, PVM users can easily use SPRNG as long as they use the default interface or the interface with pointer checking. In order to obtain the same seed on all the processes while using make_sprng_seed, they can produce a seed on a single process and then pass it explicitly to the other processes.


    [Quick 
Start] [User's 
Guide] [Reference 
Manual] [Quick 
Reference] [Next: 
Making New SPRNG Generators]

    SHAR_EOF fi # end of overwriting check if test -f 'newgen.html' then echo shar: will not over-write existing file "'newgen.html'" else cat << "SHAR_EOF" > 'newgen.html' SPRNG: Scalable Parallel Pseudo-Random Number Generator Library

    User's Guide:Details:Creating New SPRNG Generators

    Next:Testing Previous:Message Passing


    Creating New Generators in SPRNG Format

    We have made it easy for developers to create new parallel random number generators in SPRNG format. The developer just needs to make a copy of the file .template.c in the sprng/SRC directory and modify the functions init_rng and get_rng_dbl which initialize a random number stream and return a double precision random number respectively. All other features of SPRNG are automatically implemented.

    SPRNG Scheme

    We shall first explain the philosophy behind the SPRNG parallelization scheme which should enable others to develop generators along the same lines.

    SPRNG generators maintain a set of independent streams. Each stream is identified by a unique integer in [0,MAX_STREAMS) where MAX_STREAMS is the number of independent streams available. When a user performs an initialization, one of these streams is returned. Typically on each process the user will initialize a stream identified by the same number as the process rank.

    The user also specifies a seed during initialization. The initialization routine should return different sequences for different seeds. This may be done in various ways. For instance, the same stream could be returned but with a different starting state. Alternatively, the developer can shuffle the set of streams in different ways depending on the seed, so that the same stream is identified by different integers with different seeds.

    The user also specifies a "parameter". Generators can normally be used used with different sets of parameters. For example, the multiplier is a parameter for the 48 bit Linear Congruential Generator with prime addend, while the lags are parameters for the modified Lagged Fibonacci Generator. The developer must prepare a list of NPARAMS parameter sets that are known to produce highly random streams. Each of these is identified with an integer in [0,NPARAMS). The user will request an initialization with a parameter specified by a number. The parameter set corresponding to that number must be then used. In order to help the user remember the parameter better, we have define macros that give a name to each parameter. For example, SPRNG_DEFAULT is defined to be 0. So if users ask for the SPRNG_DEFAULT parameter, then they will get a stream initialized with the first parameter in the list, such as the multiplier 0x2875a2e7b175 for the 48 bit Linear Congruential Generator.

    Modifying the template

    We explain below the changes that need to be made to the file .template.c in the sprng/SRC directory in order to create a new generator. We shall also give an example of the 64 bit Linear Congruential Generator with prime addend. This example is written for a 64 bit machine in order to simplify the presentation. The actual SPRNG generator differs due to optimizations, and also because it is generalized to cover 32 bit systems too. The locations where changes need to be made to .template.c are indicated by comments starting with /*** in order to make it easy for the developer to perform a search.

    Preliminary steps:

    1. Define a string indicating the generator type. This string will be used while printing out the information about the random number streams.

      Example 1:

       
       
      #define GENTYPE "64 Bit Linear Congruential Generator" 
       
      
    2. Define the number of valid parameters.

      Example 1:

       
       
      #define NPARAMS 3		/*** number of valid parameters ***/ 
       
      
    3. Define the number of independent streams. If users try to use more than these streams, then they will get warning messages stating that the independence of streams is not guaranteed.

      Example 1:

       
       
      int MAX_STREAMS = (1<<19);  /*** Maximum number of independent streams ***/ 
       
      
    4. Modify the structure rngen. Such a structure is associated with each stream initialized. This structure maintains information about the state of the stream and also other information needed for spawning new streams. Developers should not change anything above the line that states: /*** declare other variables here ***/ before they understand the purpose of these variables. While the data structure itself should be modified in the preliminary stages, the assignment of values to these variables will be done during the initialization. We however mention some aspects of these assignments at this stage itself since it is difficult to explain the purpose of the variables without actually mentioning what kinds of values they will contain.

      Each random number stream needs to store its state in scalar variables or arrays. Developers should declare their scalar variables below the line that states /*** declare other variables here ***/.

      Example 1:

       
       
      struct rngen 
      { 
        char *gentype; 
        int stream_number; 
        int nstreams; 
        int init_seed; 
        int parameter; 
        int narrays; 
        int *array_sizes; 
        int **arrays; 
        int spawn_offset; 
        /*** declare other variables here ***/ 
        unsigned long multiplier; 
        unsigned long prime; 
        unsigned long state; 
      }; 
       
      
      Certain generators such as the lagged Fibonacci Generator require arrays to store their information. In that case developers can make use of the variables narrays, array_sizes, and arrays. narrays is the number of arrays that are required. Often this will be just 1. If no array is required then this will be 0. array_sizes lists the size of each array. For example, if we have two arrays with the first one consisting of 24 integers and the second one consisting of 17 integers, then narrays = 2, array_sizes[0] = 24, array_sizes[1] = 17. arrays is a pointer to the actual set of arrays. arrays[0] in our example is an array of 24 integers and arrays[1] is of 17 integers. Developers are not restricted to using integer types. For example, if they wish to use a double precision type with 13 elements, then they can declare a variable:

      double *r

      and set the corresponding array_size[i] to 13*sizeof(double)/sizeof(int) in the initialization routine. Then in that routine they can set r = (double *) arrays[i]. While this may not be great from a software engineering point of view, we feel that people in scientific computing are used to even worse practises!

    Next the developer has to modify the functions that perform the initialization and produce the actual random number.
    1. init_rng: This function follows the specifications for init_sprng. We have written code that allocates all the memory required. The developer still has to write code to initialize some of the data, though. This function returns a pointer to the memory location where the data concerning the newly initialized stream is located. Though the data structure is of type rngen, we convert the pointer to a pointer to an int when we return it. The developer has to perform the following actions:
      1. Specify the number of arrays as explained earlier.

        Example 1:

         
         
          genptr->narrays = 0;		/* number of arrays needed by your generator */ 
         
        
      2. Specify the sizes of the arrays as explained earlier.

        Example (not for the Linear Congruential Generator):

         
         
          		/* initialize ...array_sizes to the sizes of the arrays */ 
        array_sizes[0] = 24; 
        array_sizes[1] = 17; 
         
        
      3. Initialize the data in the arrays arrays[1], ..., arrays[narrays-1] and in the scalar variables based on the requirements of your generator. The initial values will typically depend on the argument gennum.

        Example 1:

         
         
          genptr->multiplier = PARAMLIST[param]; 
          genptr->prime = get_prime(gennum); 
          genptr->state = 0xffffffffffffffff^(((unsigned long) seed<<33)|gennum); 
         
        
        where get_prime(i) is a function that returns the i th prime, and PARAMLIST is an array of multipliers defined as follows:
         
         
        unsigned long PARAMLIST[NPARAMS] = {5015080152056721395UL, 2447899643824353475UL, 
        				  10678851390245329133UL}; 
         
        
    2. get_rng_dbl: The argument to this function is a pointer to the data structure that stores the information concerning a random number stream. This function returns a random double precision number in (0,1).

        Example 1: We first multiply the current state by the multiplier and add the addend to get the new state. We then multiply this by 2-64 to get the desired random number:

         
         
        /* Returns a double precision random number */ 
         
        double get_rn_dbl(int *igenptr) 
        { 
            struct rngen *genptr = (struct rngen *) igenptr; 
         
            genptr->state = genptr->state*genptr->multiplier + genptr->prime; 
        			  /* modulo 64 is automatic in 64 bit arithmetic */ 
            return genptr->state*FLT_MULT;			 
        }  
         
        

        where we had defined the macro FLT_MULT to be 2-64 earlier:

         
         
        #define FLT_MULT 5.4210108624275222e-20 /* 2^(-64) */ 
         
        

    Further Optimization

    If developers want faster implementations of the functions that return random integers and random single precision numbers, then they can modify get_rn_int and get_rn_flt respectively.

    Developers may also wish to modify print_rng if they wish to print more information than we have provided.


    [Quick 
Start] [User's 
Guide] [Reference 
Manual] [Quick 
Reference] [Next: 
Test Results]

    SHAR_EOF fi # end of overwriting check if test -f 'next.gif' then echo shar: will not over-write existing file "'next.gif'" else cat << "SHAR_EOF" > 'next.gif' GIF87a9'÷ØØ¿ÿÿÿ¿oÿm”µeð/ÿ@m¿Øe—El²by@/ànMew&/Mwðwÿw¿@/òuÿp¿daÿt,e@/@&nØMeExtàcØkoEl4.gTifn'â?@àkTãâØkEÄð@ÿ¿…صE@üÌØ‘ñEÿ@¿Ðÿ¿TØ—rE² @TØ rñNÿ¿¸PGðÿ@¿ŒØòEÿ¿Tr,@ØØ,EE@`ìØòñEÿÿ¿¿”—·²T@@ÀLølKñÿ¿Lº,,ž@@@|Ø0òEwÿ¿¤Ø|ÁEñÿ@¿ˆKTøâüK‘L,@ØŒ,Eðÿø”Kò·ÿ¿@È—ò²ÿ¿@ôøóLKèœyñÿ,<¬ó,ðÿÿ¿@¿Øÿ´Eµ@<Ø´óEðÿÿ¿¿ÿ´TµØEøÿ òµØN)EN è´ð¿²Nÿ@9ðNñNÿ¿'Xÿñÿ@¿² N`nòÿ@¿@ Xóñÿÿ¿¿|º”/a¶9{⽨¸.Y³†C…;˜,ξ{çÖE¨xrÞÊ{ ‡¶téÈ¡/oM,wekº¯ùNM”1æÚ­ fNlºràÕ£E¿Ê{6Ø‘j~×0êã”%+¯MðFÙ¼i#×;Ý4C׬sgÔ¬:îrŸÅ5cß7«m¿fÉ—6íb£õËÊoê;?dÏïùç•vÑ…FÓA÷™[–õw *ußDUUh•…N&˜Cvxá‡T¥Å!ˆ$zh"e&–¨"†i¥èâŠo-$ãŒ4; SHAR_EOF fi # end of overwriting check if test -f 'nextbw.gif' then echo shar: will not over-write existing file "'nextbw.gif'" else cat << "SHAR_EOF" > 'nextbw.gif' GIF87a9)ñoooÀÀÀççç,9)þ„©Ëí'¢œ´Ú‹³£û†âH’[‰¦ªœë ‡A pñýδ÷¤¾e†Ä!0ø)*—‘£ËÓ 'nextcol.gif' GIF87a9(ñÙÙóÿÿÿ,9(þ„©Ëí¢œ´Ú‹³ ‚û~bHŽfYn犲n µòKÏ@ ÎzÍß1¿ ®|¸›(ƒL"‰¿ò 0Nœ•yÍb·Z«ôº)EÇ–Î×Gõ|ÉlÉô&n³ÍÚ4Ý™äå”·©o¤Ç7qQ¸·Æ(ˆw¤§Ø¥rèf™X$è–·ÇÐY…ɹ¨’šˆ×XˆvY¸ö)Õ¨zzëXDªÖ©ëJ[ÛŠùªiJûK (iáwŒ|19|vŠí«-[ŒKìû¼èéYl©JäzÍ˪,|NÛÄ;•ž³^?橯to'›? £þ L&! WX›Gçà“) %Bá‚‹Æ#.;fÊÈ1¤Ç‘uv‘<)2%>”,U–ôÐ2¦ËGjÚ¼™ ; SHAR_EOF fi # end of overwriting check if test -f 'nextcol2.gif' then echo shar: will not over-write existing file "'nextcol2.gif'" else cat << "SHAR_EOF" > 'nextcol2.gif' GIF87a9'ñØØ¿ÿÿÿ,9'þ„©ËíDœ²Òk3ÞZ›À…HŽÐˆ–j ß §²ë~ó‡íÞ^à ‡Äâ®ÖÒ—Ì&èø² 'nextcol3.gif' GIF87a9'÷æèúÿÿÿ¿oÿm”µeð/ÿ@m¿Øe—El²by@/ànMew&/Mwðwÿw¿@/òuÿp¿daÿt,e@/@&nØMeExtàcØkoEl3.gTifn'â?@àkTãâØkEÄð@ÿ¿…صE@üÌØ‘ñEÿ@¿Ðÿ¿TØ—rE² @TØ rñNÿ¿¸PGðÿ@¿ŒØòEÿ¿Tr,@ØØ,EE@`ìØòñEÿÿ¿¿”—·²T@@ÀLølKñÿ¿L,,@@|ØÈòEðÿÿ¿¿¤ØÁEˆKT,@øâˆKð¿L,@ØŒ,Eðÿ@¿ø”Kò·ÿ¿@È—ò²ÿ¿@ôøóLKèœyñÿ,<¬ó,ðÿÿ¿@¿Øÿ´Eµ<Ø´óEðÿ´TµØEøÿ òµØN)EN è´ð²Nÿ@9ðNñNÿ¿'Xÿñÿ@¿² N`nòÿ@¿@ Xóñÿÿ¿¿ï 8y罤K§?¯x»_³ãKoÖóqú]ãS.ß«}½ý-¥Ÿx•ÝdSFÙ ä^€]MF c 6ˆNX]ea…N%Ø…fè¡…yu(â‡$:5â‰$rHŠ,¦øÖB0Æ(#B; SHAR_EOF fi # end of overwriting check if test -f 'nextcol4.gif' then echo shar: will not over-write existing file "'nextcol4.gif'" else cat << "SHAR_EOF" > 'nextcol4.gif' GIF87a9'÷ØØ¿ÿÿÿ¿oÿm”µeð/ÿ@m¿Øe—El²by@/ànMew&/Mwðwÿw¿@/òuÿp¿daÿt,e@/@&nØMeExtàcØkoEl4.gTifn'â?@àkTãâØkEÄð@ÿ¿…صE@üÌØ‘ñEÿ@¿Ðÿ¿TØ—rE² @TØ rñNÿ¿¸PGðÿ@¿ŒØòEÿ¿Tr,@ØØ,EE@`ìØòñEÿÿ¿¿”—·²T@@ÀLølKñÿ¿Lº,,ž@@@|Ø0òEwÿ¿¤Ø|ÁEñÿ@¿ˆKTøâüK‘L,@ØŒ,Eðÿø”Kò·ÿ¿@È—ò²ÿ¿@ôøóLKèœyñÿ,<¬ó,ðÿÿ¿@¿Øÿ´Eµ@<Ø´óEðÿÿ¿¿ÿ´TµØEøÿ òµØN)EN è´ð¿²Nÿ@9ðNñNÿ¿'Xÿñÿ@¿² N`nòÿ@¿@ Xóñÿÿ¿¿|º”/a¶9{⽨¸.Y³†C…;˜,ξ{çÖE¨xrÞÊ{ ‡¶téÈ¡/oM,wekº¯ùNM”1æÚ­ fNlºràÕ£E¿Ê{6Ø‘j~×0êã”%+¯MðFÙ¼i#×;Ý4C׬sgÔ¬:îrŸÅ5cß7«m¿fÉ—6íb£õËÊoê;?dÏïùç•vÑ…FÓA÷™[–õw *ußDUUh•…N&˜Cvxá‡T¥Å!ˆ$zh"e&–¨"†i¥èâŠo-$ãŒ4; SHAR_EOF fi # end of overwriting check if test ! -d 'paper' then mkdir 'paper' fi cd 'paper' if test -f 'contents_motif.gif' then echo shar: will not over-write existing file "'contents_motif.gif'" else cat << "SHAR_EOF" > 'contents_motif.gif' GIF89aAñ¿¿¿çççooo[!ù,A²Œ©Ëí£œM€³Þ¼ûr‚„扆㕶®¹–ïLgñ6äCÍw–Îv/¢¤1b”(fS…\‚tÆnÄfÖì•ûÅü¸S)VH6›·ÄvÒMw”ntõ-O×Eq'zWEµ§§ÅÇ’‡¸¨†˜´5–HH©æG×ø'ÉƘWùøˆ)§ÅDõ§GÇi× Ù +[»Ak›‹›[»Ë3" 'cross_ref_motif.gif' GIF89a ñ¿¿¿çççooo!ù, Œ©(¡h!Ú鬤zçŽUŽ$7–)5µ.öÆB; SHAR_EOF fi # end of overwriting check if test -f 'foot_motif.gif' then echo shar: will not over-write existing file "'foot_motif.gif'" else cat << "SHAR_EOF" > 'foot_motif.gif' GIF89añ¿¿¿çççooo!ù,(„‹á¼œ„fNvÓkûäÌ)à"”@)@è±"-k¯kÎ$šRr¬ËP; SHAR_EOF fi # end of overwriting check if test -f 'images.aux' then echo shar: will not over-write existing file "'images.aux'" else cat << "SHAR_EOF" > 'images.aux' \relax \newlabel{moveparticle}{{}{10}} \newlabel{randomwalk}{{}{11}} \newlabel{states}{{}{19}} \newlabel{spawn}{{}{29}} \newlabel{EQN:LCG}{{1}{30}} \newlabel{EQN:SRG}{{2}{41}} \newlabel{EQN:LFIB}{{3}{46}} \newlabel{EQN:MLFIB}{{4}{49}} \newlabel{EQN:ICG1}{{5}{51}} \newlabel{EQN:ICG2}{{6}{52}} \newlabel{expsum.eq}{{8}{61}} \newlabel{expsumcross.eq}{{9}{64}} \newlabel{E.metro.lcg.par}{{}{68}} \newlabel{EQN:KH}{{12}{74}} \newlabel{EQN:Discrep}{{13}{78}} \newlabel{EQN:Roth}{{14}{81}} \newlabel{EQN:PRNbound}{{15}{82}} SHAR_EOF fi # end of overwriting check if test -f 'images.log' then echo shar: will not over-write existing file "'images.log'" else cat << "SHAR_EOF" > 'images.log' This is TeX, Version 3.1415 (C version 6.1) (format=latex 94.7.12) 11 AUG 1997 17:43 **./images.tex (images.tex LaTeX2e <1994/06/01> patch level 2 (/usr/local/texmf/lib/tex/latex/base/latex209.def File: latex209.def 1994/06/01 Standard LaTeX file Entering LaTeX 2.09 compatibility mode. \footheight=\dimen102 \@maxsep=\dimen103 \@dblmaxsep=\dimen104 (/usr/local/texmf/lib/tex/latex/base/tracefnt.sty Package: tracefnt 1994/05/29 v2.3k Standard LaTeX package (font tracing) \tracingfonts=\count82 LaTeX Info: Redefining \selectfont on input line 113. ) \symbold=\mathgroup4 \symsans=\mathgroup5 \symtypewriter=\mathgroup6 \symitalic=\mathgroup7 \symsmallcaps=\mathgroup8 \symslanted=\mathgroup9 LaTeX Font Info: Redeclaring math alphabet \mathbf on input line 179. LaTeX Font Info: Redeclaring math alphabet \mathsf on input line 180. LaTeX Font Info: Redeclaring math alphabet \mathtt on input line 181. LaTeX Font Info: Redeclaring math alphabet \mathit on input line 187. LaTeX Info: Redefining \em on input line 197. (/usr/local/texmf/lib/tex/latex/base/latexsym.sty Package: latexsym 1994/05/27 v2.1e Standard LaTeX package (lasy symbols) \symlasy=\mathgroup10 LaTeX Font Info: Overwriting symbol font `lasy' in version `bold' (Font) U/lasy/m/n --> U/lasy/b/n on input line 47. ) LaTeX Font Info: Redeclaring math delimiter \lgroup on input line 262. LaTeX Font Info: Redeclaring math delimiter \rgroup on input line 264. LaTeX Font Info: Redeclaring math delimiter \bracevert on input line 266. (/usr/local/texmf/lib/tex/latex/base/latex209.cfg)) (/usr/local/texmf/lib/tex/l atex/base/article.cls Document Class: article 1994/06/02 v1.2s Standard LaTeX document class (/usr/local/texmf/lib/tex/latex/base/size11.clo File: size11.clo 1994/06/02 v1.2s Standard LaTeX file (size option) ) \c@part=\count83 \c@section=\count84 \c@subsection=\count85 \c@subsubsection=\count86 \c@paragraph=\count87 \c@subparagraph=\count88 \c@figure=\count89 \c@table=\count90 \abovecaptionskip=\skip41 \belowcaptionskip=\skip42 Compatibility mode: definition of \rm ignored. Compatibility mode: definition of \sf ignored. Compatibility mode: definition of \tt ignored. Compatibility mode: definition of \bf ignored. Compatibility mode: definition of \it ignored. Compatibility mode: definition of \sl ignored. Compatibility mode: definition of \sc ignored. \bibindent=\dimen105 ) \lthtmlwrite=\write4 \sizebox=\box25 No file images.aux. LaTeX Font Info: Checking defaults for T1/cmr/m/n on input line 65. LaTeX Font Info: ... okay on input line 65. LaTeX Font Info: Checking defaults for OT1/cmr/m/n on input line 65. LaTeX Font Info: ... okay on input line 65. LaTeX Font Info: Checking defaults for OML/cmm/m/it on input line 65. LaTeX Font Info: ... okay on input line 65. LaTeX Font Info: Checking defaults for OMS/cmsy/m/n on input line 65. LaTeX Font Info: ... okay on input line 65. LaTeX Font Info: Checking defaults for OMX/cmex/m/n on input line 65. LaTeX Font Info: ... okay on input line 65. LaTeX Font Info: Checking defaults for U/cmr/m/n on input line 65. LaTeX Font Info: ... okay on input line 65. LaTeX Font Info: No math setup on input line 69. LaTeX Font Info: External font `cmex10' loaded for size (Font) <10.95> on input line 69. LaTeX Font Info: External font `cmex10' loaded for size (Font) <8> on input line 69. LaTeX Font Info: External font `cmex10' loaded for size (Font) <6> on input line 69. LaTeX Font Info: Try loading font information for U+lasy on input line 69. (/usr/local/texmf/lib/tex/latex/base/Ulasy.fd File: Ulasy.fd 1994/05/27 v2.1eLaTeX symbol font definitions ) latex2htmlSize :tex2html_wrap_inline1329: 9.12923pt::0.0pt. [1 ] latex2htmlSize :tex2html_wrap_inline1331: 9.12923pt::0.0pt. [2 ] latex2htmlSize :tex2html_wrap_inline1333: 9.12923pt::0.0pt. [3 ] latex2htmlSize :tex2html_wrap_inline1337: 8.2125pt::2.73749pt. [4 ] latex2htmlSize :tex2html_wrap_inline1341: 8.2125pt::2.73749pt. [5 ] latex2htmlSize :tex2html_wrap_inline1345: 4.71457pt::1.7839pt. [6 ] latex2htmlSize :tex2html_wrap_inline1347: 7.48248pt::1.7839pt. [7 ] latex2htmlSize :tex2html_wrap_inline1351: 8.80704pt::0.0pt. [8 ] latex2htmlSize :tex2html_wrap_inline1361: 8.2125pt::2.91495pt. [9 ] [10 ] [11 ] latex2htmlSize :tex2html_wrap_inline1383: 4.71457pt::1.64249pt. [12 ] latex2htmlSize :tex2html_wrap_inline1385: 4.71457pt::2.52838pt. [13 ] latex2htmlSize :tex2html_wrap_inline1387: 4.71457pt::2.52838pt. [14 ] latex2htmlSize :tex2html_wrap_inline1395: 7.48248pt::1.7839pt. [15 ] latex2htmlSize :tex2html_wrap_inline1399: 8.2125pt::2.73749pt. [16 ] latex2htmlSize :tex2html_wrap_inline1401: 8.2125pt::2.73749pt. [17 ] latex2htmlSize :tex2html_wrap_inline1403: 7.48248pt::1.64249pt. [18 ] [19 ] latex2htmlSize :tex2html_wrap_inline1405: 7.4181pt::0.0pt. [20 ] latex2htmlSize :tex2html_wrap_inline1413: 8.2125pt::2.73749pt. [21 ] latex2htmlSize :tex2html_wrap_inline1415: 9.12923pt::0.0pt. [22 ] latex2htmlSize :tex2html_wrap_inline1417: 9.12923pt::0.0pt. [23 ] latex2htmlSize :tex2html_wrap_inline1419: 9.12923pt::0.0pt. [24 ] latex2htmlSize :tex2html_wrap_inline1425: 4.71457pt::2.52838pt. [25 ] latex2htmlSize :tex2html_wrap_inline1431: 4.71457pt::4.22835pt. [26 ] latex2htmlSize :tex2html_wrap_inline1451: 7.48248pt::1.64249pt. [27 ] latex2htmlSize :tex2html_wrap_inline1453: 7.48248pt::0.0pt. [28 ] [29 ] [30 ] latex2htmlSize :tex2html_wrap_inline1477: 9.26236pt::2.73749pt. [31 ] latex2htmlSize :tex2html_wrap_inline1479: 9.26236pt::0.0pt. [32 ] latex2htmlSize :tex2html_wrap_inline1481: 8.2125pt::3.19804pt. [33 ] latex2htmlSize :tex2html_wrap_inline1483: 8.2125pt::3.19804pt. [34 ] latex2htmlSize :tex2html_wrap_inline1485: 7.60416pt::2.12917pt. [35 ] latex2htmlSize :tex2html_wrap_inline1487: 7.60416pt::3.19804pt. [36 ] latex2htmlSize :tex2html_wrap_inline1491: 9.58751pt::2.81258pt. [37 ] latex2htmlSize :tex2html_wrap_inline1495: 7.4181pt::0.9125pt. [38 ] latex2htmlSize :tex2html_wrap_inline1503: 9.52922pt::3.19804pt. [39 ] latex2htmlSize :tex2html_wrap_inline1505: 7.60416pt::3.19804pt. [40 ] [41 ] latex2htmlSize :tex2html_wrap_inline1521: 4.71457pt::1.64249pt. [42 ] latex2htmlSize :tex2html_wrap_inline1523: 4.71457pt::1.64249pt. [43 ] latex2htmlSize :tex2html_wrap_inline1525: 9.52922pt::0.9125pt. [44 ] latex2htmlSize :tex2html_wrap_inline1539: 4.71457pt::2.61728pt. [45 ] [46 ] latex2htmlSize :tex2html_wrap_inline1555: 9.52922pt::2.73749pt. [47 ] latex2htmlSize :tex2html_wrap_inline1557: 9.97366pt::0.0pt. [48 ] [49 ] latex2htmlSize :tex2html_wrap_inline1559: 9.52922pt::2.73749pt. [50 ] [51 ] [52 ] latex2htmlSize :tex2html_wrap_inline1561: 6.21715pt::0.0pt. [53 ] latex2htmlSize :tex2html_wrap_inline1565: 8.2125pt::2.73749pt. [54 ] latex2htmlSize :tex2html_wrap_inline1567: 7.60416pt::2.12914pt. [55 ] latex2htmlSize :tex2html_wrap_inline1569: 8.55923pt::0.0pt. [56 ] latex2htmlSize :tex2html_wrap_inline1571: 8.2125pt::2.73749pt. [57 ] [58 ] latex2htmlSize :tex2html_wrap_inline1573: 6.3875pt::0.9125pt. [59 ] latex2htmlSize :tex2html_wrap_inline1591: 4.71457pt::2.12917pt. [60 ] [61 ] latex2htmlSize :tex2html_wrap_inline1593: 9.12923pt::3.19804pt. [62 ] latex2htmlSize :tex2html_wrap_inline1595: 7.60416pt::2.12917pt. [63 ] [64 ] latex2htmlSize :tex2html_wrap_inline1601: 9.12923pt::2.73749pt. [65 ] latex2htmlSize :tex2html_wrap_inline1603: 9.12923pt::0.0pt. [66 ] latex2htmlSize :tex2html_wrap_inline1607: 7.05666pt::0.9125pt. [67 ] [68 ] latex2htmlSize :tex2html_wrap_inline1613: 9.12923pt::0.0pt. [69 ] latex2htmlSize :tex2html_wrap_inline1619: 9.97366pt::0.0pt. [70 ] [71 ] [72 ] latex2htmlSize :tex2html_wrap_inline1623: 4.71457pt::1.64249pt. [73 ] [74 ] latex2htmlSize :tex2html_wrap_inline1627: 8.2125pt::2.73749pt. [75 ] latex2htmlSize :tex2html_wrap_inline1635: 8.2125pt::2.73749pt. [76 ] latex2htmlSize :tex2html_wrap_inline1637: 9.52922pt::0.0pt. [77 ] [78 ] latex2htmlSize :tex2html_wrap_inline1655: 8.2125pt::2.73749pt. [79 ] latex2htmlSize :tex2html_wrap_inline1657: 8.2125pt::2.73749pt. [80 ] [81 ] [82 ] latex2htmlSize :tex2html_wrap_inline1667: 9.97366pt::2.73749pt. [83 ] latex2htmlSize :tex2html_wrap_inline1683: 11.38275pt::3.11696pt. [84 ] latex2htmlSize :tex2html_wrap_inline1685: 11.38275pt::3.11696pt. [85 ] [86 ] latex2htmlSize :tex2html_wrap_inline1689: 8.2125pt::2.73749pt. [87 ] (images.aux) LaTeX Warning: Label(s) may have changed. Rerun to get cross-references right. ) Here is how much of TeX's memory you used: 409 strings out of 11062 4107 string characters out of 75446 46435 words of memory out of 262141 3201 multiletter control sequences out of 9500 13822 words of font info for 50 fonts, out of 100000 for 255 14 hyphenation exceptions out of 607 22i,6n,21p,298b,343s stack positions out of 300i,40n,60p,3000b,4000s Output written on images.dvi (87 pages, 11960 bytes). SHAR_EOF fi # end of overwriting check if test -f 'images.pl' then echo shar: will not over-write existing file "'images.pl'" else cat << "SHAR_EOF" > 'images.pl' # LaTeX2HTML 96.1-h (September 30, 1996) # Associate images original text with physical files. $key = q/{figure}[htbp]vspace*4.0inhspace*0.75inspecialpsfile=spawn.epshscale=70vscale=70vspace0invspace*-3mmlabelspawn{figure}/; $cached_env_img{$key} = q|figure983|; $key = q/{_inline}$lambda(b)${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1655|; $key = q/{_inline}$cne0${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1567|; $key = q/{_inline}$2^51${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1419|; $key = q/{_inline}$2^pL${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1413|; $key = q/{_inline}$S_0${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1403|; $key = q/{_inline}$[0,1)^s${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1635|; $key = q/{_inline}${u_i}${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1337|; $key = q/{_inline}$u_i,u_i+4N,...${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1387|; $key = q/{_inline}$2^m-1${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1495|; $key = q/{_inline}$x_n=sum_i=0^log_bna_ib^-i-1${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1685|; $key = q/{_inline}$2^26${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1417|; $key = q/{_inline}$S_k${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1395|; $key = q/{_inline}$u_i,u_i+M,...${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1425|; $key = q/{_inline}$D_s(x_i)${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1627|; $key = q/{_inline}$10^12${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1333|; $key = q/{_inline}$(2^k-1)2^m-1${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1555|; $key = q/{_inline}${x_npmod2^j}${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1477|; $key = q/{_inline}$u_iLM,u_iLM+1,...${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1431|; $key = q/{_inline}$a_i${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1523|; $key = q/{figure}[htbp]vspace*5inhspace*0.5inspecialpsfile=E.metro.lcg.par.pshscale=60vscale=60vspace-1.5invspace*3mmlabelE.metro.lcg.par{figure}/; $cached_env_img{$key} = q|figure1102|; $key = q/{_inline}$O(log_2m)${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1571|; $key = q/{_inline}$inej${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1485|; $key = q/{_inline}$langle|C(j,l,k)|^2rangle=k${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1601|; $key = q/{_inline}$langle|C_g(k)|^2rangle=k${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1593|; $key = q/{_inline}$I_k${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1347|; $key = q/{_inline}$(2^k-1)2^m-3${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1559|; $key = q/{_inline}$O(N^-12)${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1667|; $key = q/{_inline}$barc${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1561|; $key = q/{_inline}$10^5${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1329|; $key = q/{_inline}$bar0=0${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1569|; $key = q/{_inline}$s^th${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1637|; $key = q/{_inline}$#(B,x_i)${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1657|; $key = q/{_inline}$u=I2^-n${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1351|; $key = q/{_inline}$n=sum_i=0^log_bna_ib^i${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1683|; $key = q/{_inline}$x_n${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1521|; $key = q/{figure}vspace*3inhspace*0.25inspecialpsfile=states.epshscale=70vscale=70vspace*-3mmlabelstates{figure}/; $cached_env_img{$key} = q|figure953|; $key = q/{_inline}$u_k=F(S_k)${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1399|; $key = q/{_inline}$calP${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1453|; $key = q/{_inline}$10^10${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1613|; $key = q/{_inline}$2^p${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1405|; $key = q/{_inline}$sqrtm2${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1491|; $key = q/{_inline}$x_i${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1623|; $key = q/{_inline}$gne0${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1595|; $key = q/{_inline}$N^-12${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1619|; $key = q/{_inline}$gcd(b_i,b_j)=1${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1483|; $key = q/{_inline}$cbarcequiv1pmodm${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1565|; $key = q/{_inline}$2^j${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1479|; $key = q/{_inline}$u_0,...,u_k${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1591|; $key = q/{_inline}$ell_j${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1505|; $key = q/{figure}vspace*4.5inhspace*0.35inspecialpsfile=rw3.pshscale=60vscale=60vspace*-1.9invspace*-3mmlabelrandomwalk{figure}/; $cached_env_img{$key} = q|figure935|; $key = q/{_inline}${b_j}${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1481|; $key = q/{_inline}$u_i+4N${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1385|; $key = q/{_inline}$a_j=a^ell_jpmodm${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1503|; $key = q/{_inline}$10^7${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1331|; $key = q/{_inline}$T_i${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1451|; $key = q/{_inline}$[1,2^n)${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1341|; $key = q/{_inline}$u_k${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1345|; $key = q/{_inline}$U_i^n=(u_i+1,...u_i+n)${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1361|; $key = q/{_inline}$u_i${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1383|; $key = q/{_inline}$b_j${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1487|; $key = q/{_inline}$2^(k-1)times(m-1)${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1557|; $key = q/{_inline}$10^11${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1603|; $key = q/{_inline}$S_k+1=T(S_k)${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1401|; $key = q/{_inline}$x_n+k${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1539|; $key = q/{_inline}$2^k-1${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1525|; $key = q/{_inline}$16times16${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1607|; $key = q/{figure}centervspace*-4mmfboxhspace*0.25inminipage[t]4.0innoindentflushlefthspace0.2in_inline$x=0$_inlinehspace0.2inrepeatloopNtimeshspace0.4in_inline$xtrial=x+delta*(sprng()-0.5)$_inlinehspace0.4inif_inline$(exp(-beta*(V(xtrial)-V(x)));SPMgt;sprng())$_inlinethenhspace0.6in_inline$x=xtrial$_inlinehspace0.4inifhspace0.2inloopflushleftvspace*2mmminipagehspace*0.25incentervspace*-4mmlabelmoveparticle{figure}/; $cached_env_img{$key} = q|figure912|; $key = q/{_inline}$10^8${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1415|; $key = q/{_inline}$exp(-V(R)k_BT)${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1689|; $key = q/{_inline}$odot${_inline}/; $cached_env_img{$key} = q|tex2html_wrap_inline1573|; 1; SHAR_EOF fi # end of overwriting check if test -f 'images.tex' then echo shar: will not over-write existing file "'images.tex'" else cat << "SHAR_EOF" > 'images.tex' \batchmode \documentstyle[11pt]{article} \makeatletter \topmargin -0.0in \textheight 8.25in \oddsidemargin -0.0in \evensidemargin -0.0in \textwidth 6.25in \font\rmnor=cmr12 \font\twbf=cmbx12 \font\ttt=cmtt12 \font\slt=cmsl12 \font\itt=cmti12 \font\bigbf=cmbx12 scaled\magstephalf \def\be{\begin{equation}} \def\ee{\end{equation}} \def\ss{\smallskip\noindent} \def\bs{\bigskip} \def\qad{\hskip .2 truecm} \def\und{\underbar} \def\bsn{\bigskip\noindent} \def\hah{\hfill&} \def\hac{\hfill &\cr} \def\half{\hskip 4.8 truecm} \def\itb{\item{$\bullet$}} \def\ni{\noindent} \def\sq{\vrule width.6em height.5em depth.1em\relax} \makeatother \newenvironment{tex2html_wrap}{}{} \newwrite\lthtmlwrite \def\lthtmltypeout#1{{\let\protect\string\immediate\write\lthtmlwrite{#1}}}% \newbox\sizebox \textheight 50cm \begin{document} \pagestyle{empty} \stepcounter{section} {\newpage\clearpage\samepage \setbox\sizebox=\hbox{$10^5$}\lthtmltypeout{latex2htmlSize :tex2html_wrap_inline1329: \the\ht\sizebox::\the\dp\sizebox.}\box\sizebox}\hbox{}\vfil {\newpage\clearpage\samepage \setbox\sizebox=\hbox{$10^7$}\lthtmltypeout{latex2htmlSize :tex2html_wrap_inline1331: \the\ht\sizebox::\the\dp\sizebox.}\box\sizebox}\hbox{}\vfil {\newpage\clearpage\samepage \setbox\sizebox=\hbox{$10^{12}$}\lthtmltypeout{latex2htmlSize :tex2html_wrap_inline1333: \the\ht\sizebox::\the\dp\sizebox.}\box\sizebox}\hbox{}\vfil \stepcounter{section} {\newpage\clearpage\samepage \setbox\sizebox=\hbox{$\{ u_i\}$}\lthtmltypeout{latex2htmlSize :tex2html_wrap_inline1337: \the\ht\sizebox::\the\dp\sizebox.}\box\sizebox}\hbox{}\vfil {\newpage\clearpage\samepage \setbox\sizebox=\hbox{$[1, 2^n)$}\lthtmltypeout{latex2htmlSize :tex2html_wrap_inline1341: \the\ht\sizebox::\the\dp\sizebox.}\box\sizebox}\hbox{}\vfil {\newpage\clearpage\samepage \setbox\sizebox=\hbox{$u_k$}\lthtmltypeout{latex2htmlSize :tex2html_wrap_inline1345: \the\ht\sizebox::\the\dp\sizebox.}\box\sizebox}\hbox{}\vfil {\newpage\clearpage\samepage \setbox\sizebox=\hbox{$I_k$}\lthtmltypeout{latex2htmlSize :tex2html_wrap_inline1347: \the\ht\sizebox::\the\dp\sizebox.}\box\sizebox}\hbox{}\vfil {\newpage\clearpage\samepage \setbox\sizebox=\hbox{$u = I 2^{-n}$}\lthtmltypeout{latex2htmlSize :tex2html_wrap_inline1351: \the\ht\sizebox::\the\dp\sizebox.}\box\sizebox}\hbox{}\vfil {\newpage\clearpage\samepage \setbox\sizebox=\hbox{$U_i^n = ( u_{i+1} , ... u_{i+n} )$}\lthtmltypeout{latex2htmlSize :tex2html_wrap_inline1361: \the\ht\sizebox::\the\dp\sizebox.}\box\sizebox}\hbox{}\vfil {\newpage\clearpage\samepage \begin{figure}\begin{center} \vspace*{-4mm} \fbox{ \hspace*{0.25in}\begin{minipage}[t]{4.0in} \noindent \begin{flushleft} \hspace{0.2in} $x = 0$\\ \hspace{0.2in} repeat loop N times\\ \hspace{0.4in} $xtrial = x + \delta*(sprng()-0.5)$\\ \hspace{0.4in} if $(\exp(-\beta*(V(xtrial)-V(x))) > sprng() )$ then\\ \hspace{0.6in} $x = xtrial$\\ \hspace{0.4in} endif\\ \hspace{0.2in} end loop\\ \end{flushleft} \vspace*{2mm} \end{minipage} \hspace*{0.25in}} \end{center} \vspace*{-4mm} \label{moveparticle} \end{figure}}\hbox{}\vfil {\newpage\clearpage\samepage \begin{figure}\vspace*{4.5in}\hspace*{0.35in} \special{psfile=rw3.ps hscale=60 vscale=60}\\ \vspace*{-1.9in} \vspace*{-3mm} \label{randomwalk} \end{figure}}\hbox{}\vfil {\newpage\clearpage\samepage \setbox\sizebox=\hbox{$u_i$}\lthtmltypeout{latex2htmlSize :tex2html_wrap_inline1383: \the\ht\sizebox::\the\dp\sizebox.}\box\sizebox}\hbox{}\vfil {\newpage\clearpage\samepage \setbox\sizebox=\hbox{$u_{i+4N}$}\lthtmltypeout{latex2htmlSize :tex2html_wrap_inline1385: \the\ht\sizebox::\the\dp\sizebox.}\box\sizebox}\hbox{}\vfil {\newpage\clearpage\samepage \setbox\sizebox=\hbox{$u_i, u_{i+4N}, ...$}\lthtmltypeout{latex2htmlSize :tex2html_wrap_inline1387: \the\ht\sizebox::\the\dp\sizebox.}\box\sizebox}\hbox{}\vfil {\newpage\clearpage\samepage \setbox\sizebox=\hbox{$S_k$}\lthtmltypeout{latex2htmlSize :tex2html_wrap_inline1395: \the\ht\sizebox::\the\dp\sizebox.}\box\sizebox}\hbox{}\vfil {\newpage\clearpage\samepage \setbox\sizebox=\hbox{$u_k = F(S_k)$}\lthtmltypeout{latex2htmlSize :tex2html_wrap_inline1399: \the\ht\sizebox::\the\dp\sizebox.}\box\sizebox}\hbox{}\vfil {\newpage\clearpage\samepage \setbox\sizebox=\hbox{$S_{k+1} = T(S_k)$}\lthtmltypeout{latex2htmlSize :tex2html_wrap_inline1401: \the\ht\sizebox::\the\dp\sizebox.}\box\sizebox}\hbox{}\vfil {\newpage\clearpage\samepage \setbox\sizebox=\hbox{$S_0$}\lthtmltypeout{latex2htmlSize :tex2html_wrap_inline1403: \the\ht\sizebox::\the\dp\sizebox.}\box\sizebox}\hbox{}\vfil {\newpage\clearpage\samepage \begin{figure}\vspace*{3in}\hspace*{0.25in} \special{psfile=states.eps hscale=70 vscale=70} \vspace*{-3mm} \label{states} \end{figure}}\hbox{}\vfil {\newpage\clearpage\samepage \setbox\sizebox=\hbox{$2^p$}\lthtmltypeout{latex2htmlSize :tex2html_wrap_inline1405: \the\ht\sizebox::\the\dp\sizebox.}\box\sizebox}\hbox{}\vfil {\newpage\clearpage\samepage \setbox\sizebox=\hbox{$2^p/L$}\lthtmltypeout{latex2htmlSize :tex2html_wrap_inline1413: \the\ht\sizebox::\the\dp\sizebox.}\box\sizebox}\hbox{}\vfil {\newpage\clearpage\samepage \setbox\sizebox=\hbox{$10^8$}\lthtmltypeout{latex2htmlSize :tex2html_wrap_inline1415: \the\ht\sizebox::\the\dp\sizebox.}\box\sizebox}\hbox{}\vfil {\newpage\clearpage\samepage \setbox\sizebox=\hbox{$2^{26}$}\lthtmltypeout{latex2htmlSize :tex2html_wrap_inline1417: \the\ht\sizebox::\the\dp\sizebox.}\box\sizebox}\hbox{}\vfil {\newpage\clearpage\samepage \setbox\sizebox=\hbox{$2^{51}$}\lthtmltypeout{latex2htmlSize :tex2html_wrap_inline1419: \the\ht\sizebox::\the\dp\sizebox.}\box\sizebox}\hbox{}\vfil {\newpage\clearpage\samepage \setbox\sizebox=\hbox{$u_i, u_{i+M}, ...$}\lthtmltypeout{latex2htmlSize :tex2html_wrap_inline1425: \the\ht\sizebox::\the\dp\sizebox.}\box\sizebox}\hbox{}\vfil {\newpage\clearpage\samepage \setbox\sizebox=\hbox{$u_{iL/M}, u_{iL/M+1}, ...$}\lthtmltypeout{latex2htmlSize :tex2html_wrap_inline1431: \the\ht\sizebox::\the\dp\sizebox.}\box\sizebox}\hbox{}\vfil {\newpage\clearpage\samepage \setbox\sizebox=\hbox{$T_i$}\lthtmltypeout{latex2htmlSize :tex2html_wrap_inline1451: \the\ht\sizebox::\the\dp\sizebox.}\box\sizebox}\hbox{}\vfil {\newpage\clearpage\samepage \setbox\sizebox=\hbox{${\cal P}$}\lthtmltypeout{latex2htmlSize :tex2html_wrap_inline1453: \the\ht\sizebox::\the\dp\sizebox.}\box\sizebox}\hbox{}\vfil {\newpage\clearpage\samepage \begin{figure}[htbp] \vspace*{4.0in}\hspace*{0.75in} \special{psfile=spawn.eps hscale=70 vscale=70}\\ \vspace{0in} \vspace*{-3mm} \label{spawn} \end{figure}}\hbox{}\vfil \stepcounter{section} \stepcounter{subsection} {\newpage\clearpage\samepage \begin{equation}x_n = a x_{n-1} +b \pmod{m}. \label{EQN:LCG} \end{equation}}\hbox{}\vfil {\newpage\clearpage\samepage \setbox\sizebox=\hbox{$\{ x_n \pmod{2^j} \}$}\lthtmltypeout{latex2htmlSize :tex2html_wrap_inline1477: \the\ht\sizebox::\the\dp\sizebox.}\box\sizebox}\hbox{}\vfil {\newpage\clearpage\samepage \setbox\sizebox=\hbox{$2^j$}\lthtmltypeout{latex2htmlSize :tex2html_wrap_inline1479: \the\ht\sizebox::\the\dp\sizebox.}\box\sizebox}\hbox{}\vfil \stepcounter{subsubsection} {\newpage\clearpage\samepage \setbox\sizebox=\hbox{$\{ b_j \}$}\lthtmltypeout{latex2htmlSize :tex2html_wrap_inline1481: \the\ht\sizebox::\the\dp\sizebox.}\box\sizebox}\hbox{}\vfil {\newpage\clearpage\samepage \setbox\sizebox=\hbox{$\gcd(b_i , b_j ) = 1$}\lthtmltypeout{latex2htmlSize :tex2html_wrap_inline1483: \the\ht\sizebox::\the\dp\sizebox.}\box\sizebox}\hbox{}\vfil {\newpage\clearpage\samepage \setbox\sizebox=\hbox{$i\ne j$}\lthtmltypeout{latex2htmlSize :tex2html_wrap_inline1485: \the\ht\sizebox::\the\dp\sizebox.}\box\sizebox}\hbox{}\vfil {\newpage\clearpage\samepage \setbox\sizebox=\hbox{$b_j$}\lthtmltypeout{latex2htmlSize :tex2html_wrap_inline1487: \the\ht\sizebox::\the\dp\sizebox.}\box\sizebox}\hbox{}\vfil {\newpage\clearpage\samepage \setbox\sizebox=\hbox{$\sqrt{m/2}$}\lthtmltypeout{latex2htmlSize :tex2html_wrap_inline1491: \the\ht\sizebox::\the\dp\sizebox.}\box\sizebox}\hbox{}\vfil \stepcounter{subsubsection} {\newpage\clearpage\samepage \setbox\sizebox=\hbox{$2^m-1$}\lthtmltypeout{latex2htmlSize :tex2html_wrap_inline1495: \the\ht\sizebox::\the\dp\sizebox.}\box\sizebox}\hbox{}\vfil {\newpage\clearpage\samepage \setbox\sizebox=\hbox{$a_j = a^{\ell_j}\pmod{m}$}\lthtmltypeout{latex2htmlSize :tex2html_wrap_inline1503: \the\ht\sizebox::\the\dp\sizebox.}\box\sizebox}\hbox{}\vfil {\newpage\clearpage\samepage \setbox\sizebox=\hbox{$\ell_j$}\lthtmltypeout{latex2htmlSize :tex2html_wrap_inline1505: \the\ht\sizebox::\the\dp\sizebox.}\box\sizebox}\hbox{}\vfil \stepcounter{subsection} {\newpage\clearpage\samepage \begin{equation}x_{n+k} = \sum_{i=0}^{k-1} a_i x_{n+i} \pmod{2}, \label{EQN:SRG} \end{equation}}\hbox{}\vfil {\newpage\clearpage\samepage \setbox\sizebox=\hbox{$x_n$}\lthtmltypeout{latex2htmlSize :tex2html_wrap_inline1521: \the\ht\sizebox::\the\dp\sizebox.}\box\sizebox}\hbox{}\vfil {\newpage\clearpage\samepage \setbox\sizebox=\hbox{$a_i$}\lthtmltypeout{latex2htmlSize :tex2html_wrap_inline1523: \the\ht\sizebox::\the\dp\sizebox.}\box\sizebox}\hbox{}\vfil {\newpage\clearpage\samepage \setbox\sizebox=\hbox{$2^k-1$}\lthtmltypeout{latex2htmlSize :tex2html_wrap_inline1525: \the\ht\sizebox::\the\dp\sizebox.}\box\sizebox}\hbox{}\vfil {\newpage\clearpage\samepage \setbox\sizebox=\hbox{$x_{n+k}$}\lthtmltypeout{latex2htmlSize :tex2html_wrap_inline1539: \the\ht\sizebox::\the\dp\sizebox.}\box\sizebox}\hbox{}\vfil \stepcounter{subsection} {\newpage\clearpage\samepage \begin{equation}x_n = x_{n-j} + x_{n-k} \pmod{2^m}, \quad j 3. \label{EQN:Roth} \end{equation}}\hbox{}\vfil {\newpage\clearpage\samepage \begin{equation}\left < ( I - \hat I )^2 \right > = \sqrt{ \frac{1}{N} \left[ \int f^2 -(\int f)^2 \right]}. \label{EQN:PRNbound} \end{equation}}\hbox{}\vfil {\newpage\clearpage\samepage \setbox\sizebox=\hbox{$O(N^{-1/2})$}\lthtmltypeout{latex2htmlSize :tex2html_wrap_inline1667: \the\ht\sizebox::\the\dp\sizebox.}\box\sizebox}\hbox{}\vfil {\newpage\clearpage\samepage \setbox\sizebox=\hbox{$n=\sum_{i=0}^{\log_b n} a_i b^i$}\lthtmltypeout{latex2htmlSize :tex2html_wrap_inline1683: \the\ht\sizebox::\the\dp\sizebox.}\box\sizebox}\hbox{}\vfil {\newpage\clearpage\samepage \setbox\sizebox=\hbox{$x_n = \sum_{i=0}^{\log_b n} a_i b^{-i-1}$}\lthtmltypeout{latex2htmlSize :tex2html_wrap_inline1685: \the\ht\sizebox::\the\dp\sizebox.}\box\sizebox}\hbox{}\vfil {\newpage\clearpage\samepage \begin{equation}\left \{ 0, \frac{1}{3}, \frac{2}{3}, \frac{1}{9}, \frac{4}{9}, \frac{7}{9}, \frac{2}{9}, \frac{5}{9}, \frac{8}{9}, \frac{1}{27}, \frac{10}{27}, \frac{19}{27}, \dots \right \}. \end{equation}}\hbox{}\vfil {\newpage\clearpage\samepage \setbox\sizebox=\hbox{$\exp{(-V(R)/k_B T)}$}\lthtmltypeout{latex2htmlSize :tex2html_wrap_inline1689: \the\ht\sizebox::\the\dp\sizebox.}\box\sizebox}\hbox{}\vfil \stepcounter{section} \clearpage \end{document} SHAR_EOF fi # end of overwriting check if test -f 'img1.gif' then echo shar: will not over-write existing file "'img1.gif'" else cat << "SHAR_EOF" > 'img1.gif' GIF89a€¿¿¿!ù,5Œip¬ß€„4¸tã\[îÈ…]f]_"™g¦n9¾çÄ:óJ‚ú«â=tBñv® Ì£VÆC; SHAR_EOF fi # end of overwriting check if test -f 'img10.gif' then echo shar: will not over-write existing file "'img10.gif'" else cat << "SHAR_EOF" > 'img10.gif' GIF89a¤€¿¿¿!ù,¤þ„©Ëí£œ´Ú‹³Þ¼û†âHJÁ‰¦êʶî ÇòL×öçúÎ÷þ ‡Ä"Ì`L*—̦ó J§Ô"²ŠÍj·Ü®÷ 6^ÃTùŒN«×ìظ­¼¾áôºýŽßÍó¿ñž(8øõGxbxÈØèø¨—xw@Éó¶©¹É ™‰†”À¡‚)Ù‰šªøy&zªøPÛºz‹››e {Yë«+)‘“PN™”4éø]ŽõíB¥Vâñ‰^ÄV#–^VÇÎtí|©›cÚÄœ™Mȹ%—Y–¸šrnÑÙ%èa$œrZÉ›½M]Ÿ=¸YUMeÌ@¡Áð¹^žÉ¥è/¸<˜§À!ViIœ!ƒ˜˜Š†¨l–5ꄳù™C†Y˜iP«lè'[†·†ëÐJf¢´]º+5´®§þ묿eÖ+5tÊÚ!´µBJi¢ œl¹¾ŠÝ¯¥€'WLy’EßmêÙà¡«Öv'"ç•{è´EVY¹–ª +;‡9@Ÿ!6ŽÛViÇâ‡Üó›eœùÊKíJ=ÙKຠ/JTDhºz\ª‚qK0{—~\f»ƒÌð°¹LcÛÁ”‘¶V¥Ý’û_1‡ ðÊ“>ŒYg7lݽ|Æ»íÄ%›œÊšúl3º-Sœ3ÍNóTVÄíq̲ΧŠ<¯Ôú‡Qv6þ..å ö¯»ÿöª¸å{:CŒ†N:!£—Ž:§§Îºµ„§ô:ÉW]ŽEì~¹¸"¦o-³P¶÷2Îæ±Ë¬à Öí·_^¾§´öFþ;@Gcj'«ÓU°±VÄzq#råâoä¶î‚#½1g²ó¦é¯¡¦::¿w¡X~x/ôÌú¿I =÷›ÇûÔ?ͯ€õÛÉÀJ娫ÙJ‚² Ëô÷6u0wìŸoá)Ì¥JW ø‹wÁõ }ùQU§Zõ¶wUZÝ[ qcB=Ñ0xŸ"a‡0F¬Ä½ n:ô ®WœòÏjÑòÏSÈ81«ƒ¹¢"þ®Øó¥1}|ƒâÃb“![d.bE,Œ]ÄÆDgå°|’˜ê†2ë2‚çÂgóMìŽ6d›³¢®’j¬£…H›þf äµ2f© nYsû„Ö!¯i.£ 3§2•A’‹ðBY¾VBȈò‡Ìáç´e.>ŽŒejÄÙ,8vG—o¤ ÃÓÊZñfÂS%þî½c¹1úá(çèʱí‹W² döFé¯öÉ’“õ¡¡‰–xmS|’d—ϲ9³GºÍBÈrÙ ÑI@&Sy&³¦$Ó³ÍS™RCš05xÉH^Ð@œY—)ñH2µÓFÃg9þ+tFƈ}ºyU-¦°Y’gM«¥/ëÄ9ÔŒsG·Jå/DÂsÑO'O¤â÷ÂÄC ¡1ƒœ•š1o³c´F&W"Þ“§!ŒÐ†`f$zÃL ŒQò¢ùO&Ð ¦Þ["ŠSC)qƒ¾ÓÈþ\J4CÅj *BÊE‹Ã·È©°J]*÷©3Ñnrƨ¯ÁÃí3…¼&Njb¦;㩼ÆÇÌ1Uv,Ugú8.@Þ!^4™–™È5îìÆ°¨³o.ù'E&'¶.fÏ)ë¸É3:Þ$³¬å¤T9¬±Ü©ÃŒ’1¿2—X–2š·Ãå tjÚ%ï›)¢æ}yhEÕéO’þç?3,Ђž¡ ©C#ºOŠ^4•íh(A:ÒLš4¥çKovÒ³´¦%ìÍW~zË¡îñ¨œé'4õÔL–°\=ˆà±fõkS>'5¡tî˜AmÝÝJ®£nnŽ±-Šk`ãÃÆ^ædüÊCM‰*ûÂvæŸmóH{ÚlM6ãösc^ãPÛ7åöƒm|ª»×ý ·¹2\”–°ÁÝjb ±ëéw+ð ùÖ÷.ùímç¡ßCè©À©p×üà¥M8ÃKFð‡£Zâ'Ž8ÅÅìð‹':ãg4Ç;þèƒ\Ò"y¥KnrL§\Ã_y’Pîr!•`æ4¯¹ÍoŽó œë|ç<ï¹Ïg€; SHAR_EOF fi # end of overwriting check if test -f 'img11.gif' then echo shar: will not over-write existing file "'img11.gif'" else cat << "SHAR_EOF" > 'img11.gif' GIF89aÁ`€¿¿¿!ù,Á`þŒ‰Àí£œ´Ú‹³Þ¼û†âH–f¨¤) ¶î Ç«L׶ÊÞúçü4ø‚ÄÛ°ˆ”iˤsöŒâ¤TE³ê¼b‘Úm±ë{âñ®lÖ¡Óµ5[ùΞã\ú×~ÇÝzhŸÇwø'H8g¨†h¤h3ˆèèÈ(9IYiy9•ˆ¹ÉÙéùi :JZjzvˆºÊÚêJ(ú*;K[›·h›«»ËÛ , ú;l|Œ «šÌÜì\Uü,=Mݸ\­í{½íý >N¾+^ŽžÞz®ÎÛÐÞ ¯›9Ê~ÿú T¨O/ïß:_ÚÊgЂï,L( !DbþV4œÈJ"ÆþNk.nTð#ÇFöD*Ódò“G8)Iil©ˆE ™0)¢¬i‰&7&BJâLóò§ž‡yöš3$Ò>>Š%¸”RШlšZIõÏÔ¬cêùÄÊ5”Ò°@ëÑIvèØ´^|ZqÊöÍÖ¸rêT¤[u-Þ(n3íª÷¯])}³Äe Q‰Ûn Hfá~P!S™k™‰Ùº`3Áì†Õº•C¶fzðdS#Fíz Õ”ÑÆôø¶ß¶´3ƒÖ]ÚLoË¿O<÷‚ä7¡-g;:tÑŸO?,ýúŒ!Ç­ìÔŽü5ø¶á*6?þn›ôÛ­wEÏÞk“•Ýñ­ÿ~º’þóõÎÞrGìÇ|ã¡5 }øŸb.ø e³ÇO€vå^z|§wªW]† ö·ÄBNíÖfqxøam'2táˆþá"[Å™Vc3¨Üm1ÒÑŸŒÍiH^ŽþÙFäש(!FFu#dLî(—ÐE™Øh ®HåtX6¥•—½%¤xK6Ù¥ƒäAøecOî†&JžiÈñõˆã#k–™sS2à›5µ)X‰1Åy%žž%xhp^*êÛž‡Š¡6‚(¨ˆú i¡˜ºg¦)Yš–– ꉨqîejªZÝ9g¥[J«™ºµŠªˆÆzkR’jG꥕êªkÁ–Êþà«’ŠºÑ±Pjšës”.ºê_%2›¬„ØBä,WÄúšfž¼Êúë°ÅŠkk¯ÙÒ lµÈ"ºíºñNÔíO,ºÔî¸ÄÍ:醆«Jùþ)¿“|;­›îÆõ­$ Ï{O½HÍg.ƒÏ#±P³»ìÅíd<ª¦ëz/¹K¹åÈåj«ª¾¯¼‰Êð€<¨žÈüñÂK½8§.[«+''Gs³AÇl³º'ƒy4¾«³ÆM—ÒÎßM/ÉøLÍôÏY& ®{V{ƒõGWŒ­õÓèö °Eý–‹v6òá`çË;&\'Ø©‘H7Ì §,ðº{sè]‚­uÊÐóÓª‰~ÛÑ„;þäQÜÛXŽ[¯ŽYyÛ\oý9=•\÷ßç÷ÚëQ;+æ:ª½¯×d•î(觢,{Š0»þºÁ¬F=±ÞBïÆ{3eg-øðÂǾ´§Ëcr¶ÀÛ;‹âª?•%í‰ÃÉzó¿WÏ=äØwïÎãöMSñŸÉ<Û¢­þøñs|Îð¯}èºçþìýÛ'=?aÔ/ÚÃÛ(e:÷ «u¹v€æ¿ƒ ŽûKÞ×ÀÕ‘ùóœ÷˜‹ŠïïÓŸíàÀòQ0+)ߧ§Àï™ÏiüÚ ûgAð™pg艻óÝ°% Ûá OÇ ¤ˆ¾£a…øA©ùÍ€øÛ þ ßÁ^´0±E`tQa¼E¯(C1¶à‹³S"òȽ2FnˆfžíH&(Ƈɻ£Ùè-7&äl~| “HÇš=ˆMäc©òC.¶OƒXÌ"ýp÷ÈýÑkÄä©÷DFΰ’”¬ ÕhÃLšÄzÓ8¤#?‰H¹å‘”há)©ÖÉP‚R•»å>ryË:&Ò ¬l¤+:4KS–’Ë+dxäåL'.“a}Cå"÷Aðš:ä&37'-_âP—Öü]ÀŽäf’Óxüa\Ê´×Kc>#šUlÜ©èù¶`J0Žø 8'ijXêó’ë\åè¤uŸ@zsž 5è0þ#†A*j1™ãœ¦2ºOq:”—šlh7×O¤=ôý¨F¥ÈÑ%>/¤Ï,©"S*L·%™z´¨@«AÓÂ2žäˆ$OIˆ“böÔ£$µiGOŠS™¾Ò¨Eª1rêÔA òr W9§¨N˜Î¬ªVuÆ|Xz°©Ê²™`• Q‰)Ör@•ªÔé?ºPÖÞÕ‡i\[ÙR…j•Œ\«\£JW·BT­Àté[ëz5tÜu®ƒÝ«J [XŒòU°‰å*«TÄzµ¯—µ,FÆøTÎvÖ°ÝéaE›ÔÈÊ­”eëJ'{Q ÆÔ|ÝlƲ3¶]*`m«WÓ cª•¬]5þÏ’-¯· ¬c+«[à6ó¥ÂýliÿèW±àv¨ÅÅÆb£ËÝçÚO¹Ð%mn™úØ×êc­³Eïz™ÛÜñúV¶RE­áK]÷·»H”ÆwçÛ[ná·«á ÞvË{Tó÷ÀËͯCšª_ëÖ—¿ÙÍ ƒµQá-ü—}í­%„ËŒ ƒÁv.xÁ8à cèÂÞ}ŠÍJaGxÂJ°Å‹Wþ¶ ÄJ:›ÚE¾XÃÁû§‹€œcËYMÔ;ç‰~|ZònUǵõ®;áÏýJY˜•*®Ì³d gõÄI5rívœÞŠr¸¾«PY»e× ¹¨%>oÃ|X¾3¾/•ñ¼þ¾Ó™¾\®ñuGlgBzµ$F²Ÿq,g23tÏ6†truŒæ÷:XÑs‚%½[K‡–Ò(õ4†‘[ 0:oaX5PmRwXÖþ…5I]hPÏÔÖ’\£«C„é÷™Ïˆžò§9Ýè©ý: ª&"¯{ögÓúÑÕM4£y¬ë³x׸ֲg—=ì7»Ô×wM]k=§²ËÖ¦Ž±ÑMîl÷ZÔ*ìvpå}ÕsÓæ拺}ýîpKWÉ™¥t¿ÿ]mjÃ{¸¹Öw»ã;æJ'<Ù×>všÎmƒßxá‘vx§ƒÝðQV9ãïømA~ð¹¦|ÛØåÈQÌòŒ˜–¾\ù-m~:þœs àÂöxˆgîèE;ßÈž4 ­Ó‹ûüÒ_w”K>ï¦Ãðé×6ϧ®izÔÞ7y¨¡^ï£ã»åâ\9h•'v¬ëòåy=HÞ”Ÿ]æp÷&Û9éöT;°ì Öz.î‚{âi7zჾé‡s=ê{¾»šÉx’K}‚Þ®úÛ#ïxikÜs‰‹uΥï9Çqeßkånjð¢™N2ŸZ]fÀ ý˜h½ç{àjÍÍ –œèg¯+ßmÚ£^|ÄÇÎI3ÇÉöçÊ|â+>éÎ-?ÝŠf¾Z~ê¼WŒÓÖ§QêûìFU¿ûaû¾ä—ÎAô’ÿ sç™Ò‘ÈþKý±.ºáÁS†öÝò·nÑ–KÚ'~ò×"n0dï§]ö÷z§Çmg|i4xûG[NÇqDG€õgpëÇb`s(fò€'Çu‚ÀÆ}øg~¢‘]'èîÅ8·v¨3ƒb€~å‚èÂ5‚Ð~å׃Ôo;èo~·+ûVƒ"¥~1HwV·„û@)Nmª„ƒ{¨€'M7„KóƒHTaØW8&ÍC…7“–QQˆ…H8+È‚mØ€a‡Jƒ}Ä·suø„Cx„ç…‘†Èt| ƒƒ˜}Uhˆ]ˆt~ÈKd˜€n舣‰™c’(fþch¨ˆÈ‚[d„—ˆ—H€ Šœ¨‘ð‰ø€}؈!x‡8¸…ǤŠïaŠ„‘{ >£Èr˜‹ÌÆŠ‡c‡³xŸŒDvÄX†¸"¨‰l²‹‘9¾qúÉȆ·ø€VÃvxÓŠ0—‡k$Ü}ˆ§š1‡¼˜Šâ1}1…éx브PÆjÆX‹¬÷áø1%ÁŒ›èŒÛÈ‹¡È³Ø2Fÿ˜… )eÁŸ¡H‰u‘ =w·!iŒÎw8öh‘ðn‘Pʨu‰{ªÆ{yˆ'™)y±x™(}ׂ34?qf”yf ‡ŠE1. #íø6â)ƒQz)Œ&É5Ú¤7LI7òa")©”ùdäÓÂ8þècBÙ|HB£Ó•éô2•ei8Ùt”WÉ–6¸Q5SyrÙUU9C¦ry©—{É—}é— ˜)˜ƒ™ÿV*éZ‡‰˜rƒ$‹é˜EI”)™“I™•i™™K?7™™¤¡P©T´)ì“R±™3›Yšoh°×–oÓ‹ø š™˜••ø…­wŒtš­Ö^‘PÖ™Ô”4›µiD—HIƒ7ƒšLø™µ)šÁy<霟9›Ä@ì·; SHAR_EOF fi # end of overwriting check if test -f 'img12.gif' then echo shar: will not over-write existing file "'img12.gif'" else cat << "SHAR_EOF" > 'img12.gif' GIF89a€¿¿¿!ù,$ ‰É`í˜9qBÞVò™…â,ÔùTž¤­êRîL×öç; SHAR_EOF fi # end of overwriting check if test -f 'img13.gif' then echo shar: will not over-write existing file "'img13.gif'" else cat << "SHAR_EOF" > 'img13.gif' GIF89a,€¿¿¿!ù,,X ‰Éí#0lÅ‹ß±|æÚl•hxV©AgéQ£Ò^1+ÞH¢}´HUñµfC¤iuûE«©ë¶û Ëçôw; SHAR_EOF fi # end of overwriting check if test -f 'img14.gif' then echo shar: will not over-write existing file "'img14.gif'" else cat << "SHAR_EOF" > 'img14.gif' GIF89aY€¿¿¿!ù,Y– ‰ÉíØr´Ú‹sŒŠgeHÞG–&äM…Šn9Bâj>ÜJ³w<‚ºªa9ÍîÓ3Ð6¡EELÚfJ’ÙØÜœÖBÛéE¿JÖÃ× ‰—ßq¸…U^Qä]¶}ɲl­×x#ÅÓ‚¶ÈÕew’#’V5•¨IrXùö’5ié(ôYSÔIzZŠšªºÊÚêú +;P; SHAR_EOF fi # end of overwriting check if test -f 'img15.gif' then echo shar: will not over-write existing file "'img15.gif'" else cat << "SHAR_EOF" > 'img15.gif' GIF89a€¿¿¿!ù,4Œ ÆÈ ‹«ÕùîÁGr«h\X%ŸÙQŽÇŠl†¦Yjq=)Ÿ•=;Û ‡Ä¢ñˆL*—Œ; SHAR_EOF fi # end of overwriting check if test -f 'img16.gif' then echo shar: will not over-write existing file "'img16.gif'" else cat << "SHAR_EOF" > 'img16.gif' GIF89aV€¿¿¿!ù,V²Œ©ËíÀsrÚ»¢ÞÕDÅ}Œˆ• Ô¡àjÆ™ÛÂ)l'¹Ì“UýÒ=~¾oÔ ê\C‰óÀl„BRh¶±P=DãmªAf—âpxÆMC½½$™"ŠÞÔ*¶Ì§\¿åŸbò¼ÆçEƒóóEw¶u´ÆfÈÂ5¦÷5Ø(y™‡8'‰Ô$‡Ù¡æ˜cçô$Zbç1·š¦¹:+KC›ûÙ¦Ûëû , 'img17.gif' GIF89af€¿¿¿!ù,fÏŒ©Ëí߀QÉ+©Þ û|€È71¢!žÜ ¥eðÂÝ«&®Íæm˜òV,sЀ@5Š 8!¯xŒ"}!j)}¤YÒEˆ…n[C ªöÀ¼_½6Çg¿e§Îµ…Õg»^us'˜wæ¦wXXGD37bÒÅ–e˜„(ÓÖ§Tv9eAØWAi5†©•i:ÄEB÷”ø‰·¦8Ø䙦äúTć”AôX»£1Ñke¸É™»[ w¸© ¬ÃL&õ}­½ÍÝíý .>N^n~Žž®¾ÎÎR; SHAR_EOF fi # end of overwriting check if test -f 'img18.gif' then echo shar: will not over-write existing file "'img18.gif'" else cat << "SHAR_EOF" > 'img18.gif' GIF89a€¿¿¿!ù,2Œ Æü\NNIm²\E~xW= F¥›³|k‡eæª(âÁžù ‡Ä¢ñˆ´; SHAR_EOF fi # end of overwriting check if test -f 'img19.gif' then echo shar: will not over-write existing file "'img19.gif'" else cat << "SHAR_EOF" > 'img19.gif' GIF89a€¿¿¿!ù,þŒ©Ëí£œ´Ú‹³Þ¼û„âH–߉¦êʶî ÇòL×6VæúÎ÷ý ‡Ä¢ñˆL¶|Ìf(ãŒò”ÔªõŠÍj·iTëmrÇä²ùŒNzÓ«0û Ëç`&}h¿ë÷ü¾_!ö‡(XhxˆH“—ˆEÈøÉè(I¶X‰™©yE¹ùÖé*:ºqIÚzªºšiÊšèó*;û7E+j{«»Ë¥Ã+ëû+< LLk|¬¼\šÃü»ó,= èLMœ|­­›½}Üí¾ >9â"ÂL.¾^¨^n­‚>íÎ^ÿ ¯éÚ!mÿ†ž$¦àçM À…xð‘2ˆÀ „ë2¼xÎb+þŠÑqñ¤£D‘ LlÓˆ1¥”ù>07ò¥¼\ür4©2ç>œ»\.ˆ òI¬ 2m†ã©3i‡¼|þ¬9¡Ä¨!‹ˆT©V‘N¹U] U(GªA¯–üú/ëÖ”j±¡…05dW¢úì1]kâ<Ÿ#aVëq¨Ê¶xµÝ•ÆW*NÀb(%\xdÄ–5kµšÙÀo#_Æìù›^v³ŽŽw3Ź‡f¹^ݱŽ©úó<ùu¨Üok~j,¬k¼£uãŠÍ¶øYÐËW£åM¹ñÒ³ž>Q9vDÚ·_ßžý;ø8Ð_‹¢;zòÕÇŸ_ÿA=|3òçÛ·Qþ¾šúúþû+jïßüH` X€.h ‚ ¾pàƒ¶áà„éUha†a¨ávb|ï…øÀ‡$žÈ‡(6ÇÜŠ.²`"Š1¾H£‡*†xc:Ú8¢…9î¤3.øcFVPd€IɤKÎ÷d“R–Ø£}CN‰¥“U¢e–^2påta~If[êÖe™j²X`šk¾Ñ™k¹ g™Y)§zjÖ¢wyî hœ™÷g †Þ)f¡‡.ª¨8t.jè£Ô4 )¤’¦Ci¥–f*§šnÚgrƒ~J*ž65j©ªòj^©® +—Î2k¬•žÊJ­¶ÞŠëC¯î ì½×j°Æ ûþ+¦ÅË,XŽ&Ûl´`.+µÒ^û”aÐbËmG“nÛm¸àÂfm¸æʤì¹ê:[íºîRéV¹ïž;înõÎÛí½É‹¯ºÃÒño¿¥ê IÀ“jð=/<-¿‘$Ì°¦—1qļªR±Å žB°ÆâvŒ Ès›±%¼qK£ìîɃˆÌr¾0ÃářΜFÍ6ß\ Î;c«s1+ÿå’Ãjyƒ—ïü¸›s¹™>pèAŒNú§ËjzêÆ¢Oë® û†³Ç¼:»·£\;Þ»³Ü»Áÿîµì2 O¼ÜÆkž¼ÇÈ7Ó¼óËo=}ôW¿öÖ_œ³öÛóÜý÷?ùâ“i¾ÞŸ_|øìœ>’뿯gü¬Ó/°ýÈâŸÿü"ò¯ÜM €Eóßÿø4÷!°m \ ¹ô·?>Ѐ” ÌØA ®(ƒºÓàµ8 zðH „×''Bá¥ð„:*¡ Y8¶¦H†0t‘ ÍDÞè†fÒáër¸ úPC<ÄámUÄsB âW•D#>ñzkâþ E%^1erÈâÑdÅ~|Uc¤¼¨E3Ö/Œ;Q£òø€F7&E€<’#œâB;®‰Žåc£#ƒÇþqJ|„Ü ³H-’‰‹™“Fj鑼ˆ$#XÉ^r’™ÔdÁ(ÙIÒlY  åQJY6SÊh”¬C¥*)ãʲÅò•Ê(¤,ié#VÖ—²eFfÉË[øBº &&†IL`sÈLæ2õÓLê)ó™öšfåŠIÍv`ÓwOÎ8X¢-kþGœ¹ôÍ(cÉm†‡jF!8÷ârf(šB“gíy8|öR±Ó'ýy4€¶‰Ÿ(} :Nv"ô—É©%Aþ¹ôÐ -t uæ'zK†T”z{Ã(…<ʉIu´'Íf@J:Cš”i*]çJqƒÒf´ô¥')7i›ªP§8=oðÓžÂ1¦Aäi“ÆN¢öQ©¬2êcÞyo~Sª*ËÏÍ™N¬º“ª=k§ªPT–‚FW÷ø YÿiÖ°&ê-jí[™ŠÃµµ r…kZΊª¹JÓ®­äë`ôjÑdâó_xlƒxتú5„Hm€UÁöؾ⪓ W׊œÆ–•²q•SaÅYÇFVm^Mi”…N(™f´U¬ËRÏôY®¤Ö´ÈüÞž„ÚT`©s~[’àFD¸!îKŒþ äºa§IêLžkÛh–EЭîe‹[àw»Å¥®kÁV’PG0á´P§[™š×Nøèzx–~ÎVµPïô*_Õä½ø¥«~§[ÞëU.Lyk~¬•¾`&±¤œXjŠ’Ç|:˜,D¡‚€™ á Ç©öeê›áû¶®ªÙ0oý7·xÃN1mJì­Ï€8;Š‚í›ç¬Ø['öƒ£ÂâñþÈ1¾Íb_a‚Å,øÈ²ä ‘ÑõÂ=$Ù i=&ALReAqøK©í­S% ,§QÊ4ë—e«ä ÇX͈ÌÆ…ãÅ1‹V¾‘³õbgl¹LÚA0­TÌþæli“6¾óžõßD µ Â8óJÅZ45kôs‚'Ý”J3ØŽ~t¦ëdé9aº'oz²„: JóÕ57¸ÌäI¸Z˜m®«=¤j&múÓ¼~5 o½›Y##H»Æ†°iµ£XãâØÀ Q±ÓÁl$ÛØÍε¯q¤ì\E[Û Êvµ{MëyzÙÖ÷©©= t «ÜX7©ÙMîZjÛÌl·º¡ ïoßÇݵ¤7ÆöÍoÉø›cªEâÀÑ{åàçOÀ Ãðe[çá'‰x° õÁÎÆ6¤¢}³”©äqhP¼"¶“Jn×eõwD9«‹µrî€<Ò&…¹É…×þ†ç|Ѹî8Á}®s Ÿs¯“bЃp£s:ä»–Íïýô¤ }ªL—ŸÂ¥ô‹7Lê[¯æ’]|õ…wœæsy>fê^(ìE{Ú)föV }ãûùU[îî—°'$îrw;Ý-<÷›Ýï`MÆ|1—uN'þì‹ïªŠm1ò|êZGúÑ-ïõç¬ý¿ ETYÚÞõË/‡ë˜ß*W~óøÏžvï{è+_ú­^Å´wîÈÓúcæ~ Ï•“£Qû> ~+Q'ýê%Nùxw Á}¬Š/z-G_úSå“Sª“zÖç[Úñ$°“WÿcΟ^ûà6IƒùÚŠW|^ñ\çøþÇ\uíGº]‚÷Ìæôïî?ÏãQŒ÷¸}Ü6€€®w€é‘€º·€Ñ€=ó€X€õ6ñ¼w“­¶ûÐó Xÿ6‚3ro§*øR‡VzÇ''È*çƒÍ!ƒM‡ ÷S7ˆƒ9˜W<¨>"'„@x?¨2„D¸nFX~HX"!ø5È„Q(…SH…Uh…Wˆ…Y¨…[È…]è…_†a(†cH†eh†gˆ†i¨†kȆmè†o‡øHìU 4ÓƒDIlDA┇D-'Fx5|ÈX¢£G‚˜BV„ˆ0Ždˆrd-.ÓD‘ø5ÓD‰‰‰Žˆj þ‰m@œôˆfT.5D£6ÀdŠ+…Š›h©x–@Jo#Š³H‹E /¸K¹ˆ<«È(¶ˆa8犭ȈÕJt…$[Ä/Š’#˜ŒÅÇX^ÉxEË5ú"B3, ¤ƒ¸2¾(7VxÖs@%Ž%WŽ÷ŒÀñc‚&+SÔ*·_Mc@ßø*7‡ê#§!|CŽ ¦/dwRƒb©EØx‡ç8gP†c ùŽGdòXdðçi b ‰hÂ6=¸gÞ—féC)ÿ•gi‘ _ ’œx‘)é‘¥áK$’)ˆY9©h£‡8dšçŽÔ¨CþxKFŽéþx<<¹f:i2HÉ>yh&YCB)‘™’Fi L™‘J¹‘-éŽN©h@•s°>}¸•v’by’ê(8]4Dú4–Ѹ–ly–ry”pÉ’t Cn©Æ—xyBþä=¥¤ˆe–„y•v9†ÉB¥=‚ xhY˜y˜ˆ‰‹wð|f™uÉ—²‚‘é—KàSw)™™™ši5¢IAYš“™‰©˜¤ùš±H™¯›˜{9›•9š°ù™²yš}™šªÙ› ™›·8œ$•U‰›7É•k†Àù m‰“ó–Í©aø˜Á)œ(ÙÌéÒx|Ø™Ñ9—ÜbËùëxž$8ž$þÖY1󓜿Á€eIžå©ž×™ž¬™Ÿ²“Ö©’û¹˜ð‰^æhžú™"KI ò)“ j iÙŸ>C‡ ¡Û¡‰*žöIŒÝ¹5 z V‡!*¡­y¡ ¢'Z¡èÙ‰Ô— &Ú¡ëù¡OÎ!¡£šj¿©¢j¡…HŸ(˜„§ž.j“0Ú{A:`pñE¼øVkã ªØWJz¤j ¤á)¤M¨ŒS:~гºYY÷¢½Ð£bÄhcä¤à UÉBCÖ¨Uk*‹9úbíø”€P‹ ¦k‰œ‰§ÊáM¨(§OJ§_i§j‰áœÊù®)Y­Ò[Z§Wj¤Y9duu¦wju;Pgˆš”*–èH$Ö‘$yc`bG¡ó¨ŸQhÜŧ™ Èš¡*¦=Iª3V¨n„ªDe‹ *”¨¬ú‰Øu©ú«¯z\‡èªy©ÚFT ¬pªyª«Å:(—ÉŠ4æ¬uú¬­ê©¡"Oi:*Äš­Îµ; SHAR_EOF fi # end of overwriting check if test -f 'img2.gif' then echo shar: will not over-write existing file "'img2.gif'" else cat << "SHAR_EOF" > 'img2.gif' GIF89a€¿¿¿!ù,4Œi í¡›,È¥bEL§{aG¸láf¡W‘. Â2[Òãܼv†×¹zRÝ>&¡&ØN†Ž; SHAR_EOF fi # end of overwriting check if test -f 'img20.gif' then echo shar: will not over-write existing file "'img20.gif'" else cat << "SHAR_EOF" > 'img20.gif' GIF89a €¿¿¿!ù, " ¡†yú cq"x±¦i¿ŠuM·Tä²MhÚ¬æZŽ'*ÏK; SHAR_EOF fi # end of overwriting check if test -f 'img21.gif' then echo shar: will not over-write existing file "'img21.gif'" else cat << "SHAR_EOF" > 'img21.gif' GIF89a#€¿¿¿!ù,#\Œ©êÌŒ«I³m‘Êg^§%ÞuŽÛj‚fXž¢ë8½ô.`/?•–M(Ãíf£Ú¥–ÂܜɣК£¥Yçà WÃäcùLD£‡ê¶û ËçôºýŽ¿; SHAR_EOF fi # end of overwriting check if test -f 'img22.gif' then echo shar: will not over-write existing file "'img22.gif'" else cat << "SHAR_EOF" > 'img22.gif' GIF89a€¿¿¿!ù,8ŒyêÊB|¯+!Ãqï4…ß…‘KãYÓ‚x¬T®ðªÆ6ŒçæYݼ# –ZCÚð‡”‘\KEC); SHAR_EOF fi # end of overwriting check if test -f 'img23.gif' then echo shar: will not over-write existing file "'img23.gif'" else cat << "SHAR_EOF" > 'img23.gif' GIF89a€¿¿¿!ù,1ŒʼÚrîIC§®÷Nq‡BJœ˜gÔ­l7`’‘Z7[:¾ClOU¶¡©8,; SHAR_EOF fi # end of overwriting check if test -f 'img24.gif' then echo shar: will not over-write existing file "'img24.gif'" else cat << "SHAR_EOF" > 'img24.gif' GIF89a€¿¿¿!ù,0Œ‹Õƒ®I›"ÒÛЙžw}á(‚fI†ßêp5_iU™xlïë#Õ‚Â1P; SHAR_EOF fi # end of overwriting check if test -f 'img25.gif' then echo shar: will not over-write existing file "'img25.gif'" else cat << "SHAR_EOF" > 'img25.gif' GIF89aU€¿¿¿!ù,UŒ ‰ÉíØr´Ú‹kŒŠgeHÞG–äM…Šî±«)wÍ\#>Š;N»q€˜ñ¦Yƒ*c/§>C,jh´E7ºNωØ<§Üëï öz[å¨ ÅMÁcÝa×÷H»‹_p¬f…”Å'çÇSåƃE(ƒ($¶õÐxh9˜µ„É©Ñù *:JZjzŠšZ; SHAR_EOF fi # end of overwriting check if test -f 'img26.gif' then echo shar: will not over-write existing file "'img26.gif'" else cat << "SHAR_EOF" > 'img26.gif' GIF89aˆ€¿¿¿!ù,ˆß ‰Éí£<€-‰³Þ¼Õª€Ý¨}–H¦*I‰»ž×Û¡ñ=ïÜB:m:<™ðg &#˵kB£MÏïdeZ§K‡ U…†m6ÓJÍáG_ÏChYq×åÁ½Ûî’7äSÇ¥§$÷õá²æq·È¶ÕGè¨Óg9‰Øù5!H6õ˜éXÚ‡I5è×Vúdú™DöG7kq8¦ ö)»K‹TõÇ8,øXÜûº ‹Ø:cÖUc=©,½(ZX~sËq<®rŽŽ¡~ºÛþþ,Oo^?¯¿Ï^; SHAR_EOF fi # end of overwriting check if test -f 'img27.gif' then echo shar: will not over-write existing file "'img27.gif'" else cat << "SHAR_EOF" > 'img27.gif' GIF89a€¿¿¿!ù,/ Ž ÁǶڋF Ÿ‘ã®…£‘£hfb˜ª£—)äò­­}³ùÊ÷þ ‡Äb ; SHAR_EOF fi # end of overwriting check if test -f 'img28.gif' then echo shar: will not over-write existing file "'img28.gif'" else cat << "SHAR_EOF" > 'img28.gif' GIF89a €¿¿¿!ù, Œ™§¬ÀŒ\Qdq†“×nåxäežÚ²ßY; SHAR_EOF fi # end of overwriting check if test -f 'img29.gif' then echo shar: will not over-write existing file "'img29.gif'" else cat << "SHAR_EOF" > 'img29.gif' GIF89a k€¿¿¿!ù, kþŒ©Ëí£œ´Ú‹³6 ï†âH–扦êʶh¸òL×öçú¾Â ‡Ä¢ñxòÅ̦ó J-Ê©õŠÍj·#å ‹Çä",p.«×ì¶ãC§ßôºý¾Ïñü¾ÿŸ£÷HXhx˜DZ‡ØèøhèUIYié&éu¹ÉÙi•©é):J Zšªºš¤˜àÊ+;;û:H›«›k‹Ð» ìùë‹+|Œ I|À˜ìü -=M]m}­½ÍÝíý .>N^n~Žž®¾ÎÞîþ/?O_oŸ¯¿Ïßïÿ0 À <ˆ0¡Â… B;1¢Ä‰+Z¼ØÌ¡ÀþŒ¬8jÜçq–±ú–$IòžÉ“)ù­dÙ²¤´—1çÑ„Y³ÞMd;sºë) ¨ÏuBŠî¨.¥HË1¥õ´©¸¨²¨JýfµãUxYWuݪík*±`¯‘%u¶,µ´¢Øªæ¶SÜ·Îæn²K÷^K{óÖ×ïRÀ‚Ï–0©ÍáÂUuHÂÄØ©c“!¹,Žì5QŒÊ¾pÖróXͨ(xF&´h´¤™ÑÌt˵j³WÓ\ì%ìb²Û×ê§kÓ0þûRpÝÌKËéÍyòJË—ØÚíúéÓ•‘NlÚyîÝU_üöòÛ–—"Ïþ{Öñ±Í¿>¡üxþøë÷ãŸþ×a®eà3%¨àC 6X׃ò$á„AUhá_ fˆÓwÃuöz¹¹°ÇgpØ!â¥÷ZQ+’à܇̠Há§QÑ‹‹â 2žHã…øH•pGݘB”ýˆFBâ–]FJɤ‡+U9 “bˆ•F‰ÅÆ[x,\ÇT–Z‚ÁeŒ_.²@•rðØ#˜é¹Kš&*` –nª%ˆÑ9Ø=a×g¡ &ˆ¡˜ h_ G(›a²¸X—HþÙ¨H‚Ú8夲Å1RœÏáÙbbn2šé'› Êœœ;Vªu²¶y™¦¥Úœ1¹'­bÖ‚k,ð…Ä+YzF…þj°P$»ž²ª0«´Î"!-ÕNk†Ø*§í¶Ôuë­w†+¸ä6rí–ç–;îº|™ën!½j/·pÕkï3éâ««ƒü¾á¿Êí;Åb0' ¼F? qÄ3LqÅ_ŒqÆoÌqÇ rÈ"LrÉ&ŸŒrÊ*¯ÌrË.¿ sÌ2ÏLsÍ,lÁ6;q†Î Ì»³2W¦æsÐAä¹eÑF늒Ò?;½´ ÄF=ÐPS=L™X»´çÕ[ m•×_#´ŸÑŽMGÙ3ú†v´jûò†Ømk‚Ü Îm™]vß÷owÖ÷T/8VƒÏYx{ªíø'µ1Þø8×þÝÇá‘ãÈäˆi.²åCþáùåÄùÇù梷2`阞.Âä*¨ÎºÔÉÂ{ÐÒ^» ®Ï€{î­‡þ:º¾?]°yÃ{Eïµ(Oçî;0ozìÎó}ô—߯¸cÈñ sï˜÷|LDõôøiãn>ŽF“¿¬\íûòYÏŒ>óßsþMìÏ?–ÕÏQêÿâW@Ç/ÉàÏȳbÁ4sˆòà VÍN$‚¡T±¿%êlù`I× 0T#|΋zPÚ£ƒ+üD$Õ³5‘H$2”÷Lu#E䇲*âq È4Û‰êUDz“ —8*©!ñ8ÜQþ_PªŠk›â˜ØD#yÉŠ®h"ï¼h;ÙÑR¡`ã›–„¼1£‡áà⧔4 ì@ÑŒR4 ¹ÑA*,Œ¯Ø‚?R.H¬›Ø´¨ Ù‘JhÒ!/,4I÷åí…ÂRP#¦4.*“‘à¤(5“PžÒUÖ0åñEJJ¨rŽj‰•"o0K?‚…· Ä'©ÓKóä1˜¾Œå÷I§ó˜9I¦2‰©»W|ä†æX&Ù¬Ù ‰š¯û%Q´i˜l¸ÒÔT7QwA®3eÎÜ6×UÎU'RòôF;ëiÏuâ³–Üg>½éϾ3 ²(A zÐq4¡ m¨Cþ шJt¢­¨E/ŠÑŒjt£”Ò'=ú™Ás&íž'¤çX —Sôƒ"%¨àˆ„Ò¥ "—òsi½S¨ü‚¦wI'>È$ҢƧ`#ªNpÔe˦nÛLNyϢǨ×T!S³©Ò’&uyKÊ‘œê³²=õiYýéU+WœÑQʉ«ŽR˪’³öGMs‘ï WNÁt¬!Ýj¢*),ZÕ†eLaÅèÔ(’—oÌ“Uãh ú•Zy­8µ-f©9lãc,ÅDÏ6–àáknJ•šRµa¹E瘝7’QŒNL”E'7>¶±EeÎ«Õљփ[‰þ8ÛÏ–êJÌelmÁzÅÜ2÷¸Ñ½/+«¯®aÚ…i`‘û\åÒ ´§$ÍøØìtê»”]¬:o»]îÕ»ÔÅí`}%\D–¶«²­.›ÂØ*ß®f½lMa‰^ÝƾˆT,tGÛÛðÎʉU¯nÙ[>kÕ¤|©ÌCkß×Òµ,ôli–˜`ÿB˜¿é{±»I¡ÔðS£Š0ÉzǽªøR5®p` ;YŽÓ im0GáDSöÈB|™ å(KyÊT®²•¯Œå,kyË\î²—¿ æ0‹yÌd~¦ÄÎŒæ4§Yjn³›ßÜÚöÂyÎtn3Žýh&Ç-Ïàô%þ„>cðhA¶^¡­÷<QÏ_‡õý×ôºIŠßCøéÍe:Ò‰¾W§/ /¶+{ 5mB-êR{º{¦>uJQ$XÇúÕ­>b­m­êJãRÖ/H%¯£yë3ÒzÕ¤Öõ®‡mìlšÓ–Îõ¤YMìb×eÙˆƒv²•íë`ïPÛÛvvÀ¬ýlpŸ„Ú„köµqÝ_—€Ü€ûtº¹-GxÇÛÛÊÖ³°Å]o{wßTÔ÷ŸçïDº›6õÛ¢‹ùdÉ‘Ž}¯7ÝÆsð$S×Z ?ŸŠ‹•ÅÍ2·˜vWd·YIm·QùÊSâY1:dÊU>ñ1lŽ$&FÉ?çñþðÐü´S½9Z®sEÑ3äã¹ÏÄ9ìs$ç|yÆÍñ|a‡i>=|è/:1Ìô¸ÑFÖ´Ö·®#Ȇ=æI»º~]œôòû¯vz­Òþs°’•T¸ÌÝÚ_·Ãœmk_kÞAŒÚ´«Xä¹aí^vœ•—¶Î_NªÅK!ê7sqGž¤ó8îR’û(!yÐÜóÂM¸èýfôÛ,ëìZýØÛ’úÖ;>ëø<ë{…‘^­ôqýÜÑÂnâì>’}×¥¼ƒw|äÓ»FÅ×ïmWG_úïž>ºÃ={½ÿÏw~óeªn…_üÈÆ>õÍþq¿uëgù¿}½þØ^û?=f?taj ÿP“«ár;Ë3ó‡r@ÓY6GtVö·XÆx´¥·0Ž%…õ?¨i«µ€ÿ7]lVÆ{=öv-RÝ7v½2|ƒuNflç0‡wÕu–&b‡‚fw˜×n߇‚1ø…wgd§‚H*4øvµr8؃•G„{×X¡·ú#„CØ‚øõ_^õ„ú…žb‚"fK-DYzµr+F…>ètS¸‚Ç*a(†®2a㵄¦p†‡¢†uadu…È*×¥uÕ08\§W’å\KRˆ…$ˆ5ˆ†‡Y”uåZab]YÈsR‚IX‰–ÈþD˜Èx—b]38^ªdc9ba’É)¸†”ˆvm…©øt¡TŠ“^ÿó(FŠ¼eŠä5‚:È„5wx«Hw›ˆˆcè„Á˜lÅ‹hv˜S†¨ŠAè‹Æ茆ÈcÑhqø‹‚”c6L ·*­Acßµˆ‡,˜†Ö¸sf¨©¦I⨆æˆxˆK/øzæxlõh„;ˆù˜o÷Ȉ_XLIy4¨Ã´€©èHV(‡à˜|½‘¹|òWŒPÑŽ<Ô~‹d}ק~ lyoÕwn}$’&I’èç‘)âÓ¶‘÷’0ù~,‰m ’) -™“: U1‰s'¹o.i“ä”hXX‘OrŽ´ÄÀ·}x’‘¹r‘Ñ”pó”%T•Z1•]´”ªw•£a6 ‡*™~OÂy©d)iÌÇŽLù[xÖ–u‹u&—sy¶H—w‰—€5`yÉ—}‰ ; SHAR_EOF fi # end of overwriting check if test -f 'img3.gif' then echo shar: will not over-write existing file "'img3.gif'" else cat << "SHAR_EOF" > 'img3.gif' GIF89a€¿¿¿!ù,CŒ‰À ›[fÆ^~6+×U‡‚R¥y—n£Öºh³Àç[ç"®†>Sg<"¦(3“ÌÐÑÙqb °$X.·RL; SHAR_EOF fi # end of overwriting check if test -f 'img30.gif' then echo shar: will not over-write existing file "'img30.gif'" else cat << "SHAR_EOF" > 'img30.gif' GIF89aô€¿¿¿!ù,ôþŒ©Ëí£œ´ZÀÝUó†âH–æ—9Þɶn˜­\jÆ°üæúÎ÷ }À}Äâh¸Á‘I¥ñ J%«˜’9;œî+[¼Ú²ù\:Éèö8"¦²gsªûŽÏËØzZc“cS•(a§B88”ˆèåèah ¨—©™…ÔçwÔh‰( ÙuYŠ6Ú˜ÄGKxŠÚ`E{ù¹ÉÛ«sµ¶ “«Dzûj|I,Œ7ªÜŒP(#Ý´}Ýìû þ3mZT,DŽvŒ¬KMÁ„ÍìþHÆÏldŽN­d«Ì5fܽzÕº-ŠÖÉ¿‰óY¼Ø£ -ŸQÆØ©Qv Ÿ¤/ÏÌJHn¡CCbîËV1¦L“ãî°ö玎r¶²sPÅ»)Oºt¹i;ng:ÕSãRÔ.‚t¬*£RË‚Új‡r£Ç†?ɒ墔áЧlù1eÕ…<€Kšä·\Û½N‹5=«Ú“À~êü%Š'/ßÅw .Jñ°³¬$~¼…±æ‰˜0oöeyêçÑàâÐ(; SHAR_EOF fi # end of overwriting check if test -f 'img31.gif' then echo shar: will not over-write existing file "'img31.gif'" else cat << "SHAR_EOF" > 'img31.gif' GIF89ax€¿¿¿!ù,xýŒ©Ëí#²Ú‹³¦x®e^HJ ñ)c)žì‘2Ÿ+r£îí¼íê`5!Žü-rJ£ ´¢0‘ fS–dY‡Ü.ªJK·¤[j<Íè%Tý<‚çë&[lj¾‰ù,ž(‡3D¶±£×çädæ·h•S4w©X¨vé峸™ÊY‰¨9©éIù(øùõºæˆØøØ·7ûÚpª*¤gã++C‹[ÛEëÇ;ˆWj8ñ–\w–9¶•ü°Üíj"|uÆ­¼n7î½Ô.ÎJß[ß"–{¿Ïÿ0 À <ˆ0¡Â… :|1¢Ä‰+Z¼ø£; SHAR_EOF fi # end of overwriting check if test -f 'img32.gif' then echo shar: will not over-write existing file "'img32.gif'" else cat << "SHAR_EOF" > 'img32.gif' GIF89a €¿¿¿!ù, #Œɱ̀|gJEíÅÊÍJy›‡„"˜Œ$ÚêÇu©fŠS; SHAR_EOF fi # end of overwriting check if test -f 'img33.gif' then echo shar: will not over-write existing file "'img33.gif'" else cat << "SHAR_EOF" > 'img33.gif' GIF89a€¿¿¿!ù,YŒ`Ë}è K®Êu±ª-ÿmœÖ‰äx¦ObF­GÓK§ôF•+fA9ÿ@…fÓ/HœìXº¤&§€Õ„HÕúq5… n«WúV‹öˆM«×ì¶û Ëçôz£; SHAR_EOF fi # end of overwriting check if test -f 'img34.gif' then echo shar: will not over-write existing file "'img34.gif'" else cat << "SHAR_EOF" > 'img34.gif' GIF89ai€¿¿¿!ù,iጩk c|²Ú›=ŽwhÕZ[‰Mv^*ô¢©(Ïö ÆL[ã½úÒI„ ^¯qÒ(‘4%0étE'Æßæ³Ä>šIÖ¶Zì‘;§¹ì!«Å×6+=&ß ó¹îQ‚ÐôM·7çs¤¦wh˜(×’7â&#‡È4ÓòHóèe'´ˆÇA9HªÇæÑ…ÊĨY²8øEÛˆ*¶©j9ÉW¨:•˜£ó\\ƒ‰<ôäBç;ê Ù™;ÂøLµt4æ¼Lˆ C)^n^v|®¾ÎÞîþ/?O_oŸ¯¿Ïßïï^; SHAR_EOF fi # end of overwriting check if test -f 'img35.gif' then echo shar: will not over-write existing file "'img35.gif'" else cat << "SHAR_EOF" > 'img35.gif' GIF89a$€¿¿¿!ù,$RŒ© À\‹2Àsë£2ëù…÷AäXfÌi˜î;­–é¼6Q^µó:»ÍZ²ÅÍ…‰BÍ×\Ƅæè"5^ŸÛm– ‹Çä²ùŒN«×춣; SHAR_EOF fi # end of overwriting check if test -f 'img36.gif' then echo shar: will not over-write existing file "'img36.gif'" else cat << "SHAR_EOF" > 'img36.gif' GIF89a €¿¿¿!ù, )„ƒ™§Ê^3Ì#ÃÛŒ.ËvXUEšeDÂ+l¹++çúÎ÷~^; SHAR_EOF fi # end of overwriting check if test -f 'img37.gif' then echo shar: will not over-write existing file "'img37.gif'" else cat << "SHAR_EOF" > 'img37.gif' GIF89a0€¿¿¿!ù,0€ŒËí_šЋ³kãî}árÌXŽJe™a«*p™’plÜôMÊÖiâåd,Mª‘Õj,ab·+®lRâs6›8]É%%Ê­ZÇáj4«E'+_l³Å„X™a¨¸‹$nUûLw÷¸HÓgDø´Øèø)9IYiy‰™©¹ÉÙéQ; SHAR_EOF fi # end of overwriting check if test -f 'img38.gif' then echo shar: will not over-write existing file "'img38.gif'" else cat << "SHAR_EOF" > 'img38.gif' GIF89a1€¿¿¿!ù,1P ¡† £œêjִ˶mHxy&T–\šîúÀb¿”ºŒFŽÕö„ ý†(_ÐæHvpGâPu:Y)‘ ²¾”Ú®÷ ‹Çä²ùŒN«×Ã; SHAR_EOF fi # end of overwriting check if test -f 'img39.gif' then echo shar: will not over-write existing file "'img39.gif'" else cat << "SHAR_EOF" > 'img39.gif' GIF89a‘ €¿¿¿!ù,‘ þŒ©Ë½œœ´Ú‹ó…Qû†âÄd¦G§†(;¢mé­F6~ë;þëQr EvCº„À™±f‚•ž¢©ï¤l_Ó,GùÍb#4âöz†×ò»¥’Æ>7ëm·7àqôŸ´Æxg$¶a#S¦·Ò˜¦À Fve¹…å·(Uɹg¸RÈ(dª âõèÉIéY7šÇ0VèX‰˜˜;ùx–Ó ¬kˆÇEì;ˤÈ:ŠÛ¦ËüGCxšwˈÝ'ù üI"Ǥj~>´®Þܾ ›þž¡<«fßSŸ/n+Ë0 3 <ˆ0¡Â… :|1¢Ä‰+Z¼ˆ1£Æ ;zü’_; SHAR_EOF fi # end of overwriting check if test -f 'img4.gif' then echo shar: will not over-write existing file "'img4.gif'" else cat << "SHAR_EOF" > 'img4.gif' GIF89a€¿¿¿!ù,VŒ`˽é›4Hv«¶ ÷]eÇN"×@cH¢˜õ´^J&_&ª*½Æ‘´ó¹X³"§sJ¶.6Xn)³AP^iØ–‚ÊëѨõŽdÙëIŒN«×ì¶û ËÙ; SHAR_EOF fi # end of overwriting check if test -f 'img40.gif' then echo shar: will not over-write existing file "'img40.gif'" else cat << "SHAR_EOF" > 'img40.gif' GIF89a €¿¿¿!ù, +Œy‹€|܃JQ'¯eiÇ–-XxiQ5B"ɹüÊ­«ÊúÎ÷þ\; SHAR_EOF fi # end of overwriting check if test -f 'img41.gif' then echo shar: will not over-write existing file "'img41.gif'" else cat << "SHAR_EOF" > 'img41.gif' GIF89aô1€¿¿¿!ù,ô1þŒ©ËícT`³Þ¼û†âH–扦jXI¶ÆòL×öçúž´Ì ‡Ä¢ñˆ,a^®¤ó J§ÔÇ‹V·Ü®÷ vù&Wì%ŒN«×lÝ5£mËçôº±\6ïü¾ÿÿTaæPhxˆ˜¨¸ÈØèø)9IYiy‰™©¹ÉÙéù :TFZ'ŠšªªðFغ +:è*k{»ùju 6¶Ã‹ËéÛ©K¸6Ì’|a¶Œé£ë|h̬ÜÐ}ý\ ¤­5mX]'îá¼}ÖûÝŽWLkgÞînÀ½™~¾Âo„\A þÍK. _…˜ $Ã,b>hö J<± þSñh¬eÑbƃñsÈÆ>‘àVœè­d8“ôø…Üð‘ Gš:5¬Ôfó /’=â$´y³%Ò]aZZÆç9©÷¥—“Õ7¦pLD]ª4èL_RJ6ì*Nª¬²åµ¨Ê—KSÆ;¥ö"Ò}c6ù׬¤´CßúTGŠ•ÕžZwŠñéÎﻪynV}—×rØ°›q‹¦Wð£²mCLPòd?¨ÝöO¬Ø¹v é9WlÅÍ×J]Œ+Úki†Éúfœ01c„Å'Åùr`¸sw…­ØñÀƒËk×°.襇3Çh¨ÑÆSàõ¾HhõĈT"_ŒÉêë”åºhTqð©ASf ðW_DÝý ”€¸¡WÄ{*’ž®õf³¡¤MˆÈ4ÆС~Ö…bŠ*þrâv+¾£ -*c6ÞˆcŽ:îÈc>þˆË<#IdpéUVd’J^6ä’NÚr¤:ON ’ÖIIe–fÝX‰Z~ÉŽqX‚If0XpTZ“e®éÍ‘j² §; SHAR_EOF fi # end of overwriting check if test -f 'img42.gif' then echo shar: will not over-write existing file "'img42.gif'" else cat << "SHAR_EOF" > 'img42.gif' GIF89a€¿¿¿!ù,(L€—Æ›<æ‰ÎwgÖA‘U]橈K¤x`ع+%—š‹çúÎ÷{; SHAR_EOF fi # end of overwriting check if test -f 'img43.gif' then echo shar: will not over-write existing file "'img43.gif'" else cat << "SHAR_EOF" > 'img43.gif' GIF89a €¿¿¿!ù, #ŒÆ·úZr,M%Ѽ5Z:¨•XÔdé:®êÆòL×vS; SHAR_EOF fi # end of overwriting check if test -f 'img44.gif' then echo shar: will not over-write existing file "'img44.gif'" else cat << "SHAR_EOF" > 'img44.gif' GIF89a,€¿¿¿!ù,,TŒ È툴Âe3S8®QÓ7v6§a–]ú`-‹ÂŽ<’¬žÛ’º¾|4 Ñ2ŠNÌâ¥<Ær&iÇ´^\Yí¦ë ‹Çä²ùŒN«×ì¶û.; SHAR_EOF fi # end of overwriting check if test -f 'img45.gif' then echo shar: will not over-write existing file "'img45.gif'" else cat << "SHAR_EOF" > 'img45.gif' GIF89a$€¿¿¿!ù,$FL€—Æíš°ÚŒÌ÷Ò·tXÄ9¡¨‘ÃMß*Ô")¶ ºº«Ñíî+u|1ÓËÓ:àp5Oï¤ÄdŽ¨UõºÄj·Ü®÷ë-; SHAR_EOF fi # end of overwriting check if test -f 'img46.gif' then echo shar: will not over-write existing file "'img46.gif'" else cat << "SHAR_EOF" > 'img46.gif' GIF89aû€¿¿¿!ù,ûþŒ©Ëí£œ´"¬Ž¸û»…âH–扦#ædê Ç0«vÍgd4KýûÙdÄ¢ñ¸éár.¤óYlÖ¤×îʬƂB*ô  X²Wl<£!ÜSÛ×,ïjpý½ÎëÃJ믾—¨5£Ö—§(5ˆ4´ÐH(9éçÇh¦ƒgbó(Óع™f©ÉäÁˆÊ€èCÆD%ªáy3›pI™«Ëvvª WÛ‚:LW[2hì{›¨˜8»L+¨ó°Tý»ËÝ=áUË“uœ9>ŽÛ†BÍ~ú 'img46.ppm' P4 507 19  x³c0€1á€Ìæa€0€#0À€Æf@€€c8@€ÆfЀc8@;€à€pïp|?ÆDàÀàð8`0`o€øà€ ðs˜ÆsÀ ÀX@à`M€ø`€ °p03™†c À ˜Àp` þ€003†ÃÀ`À8` €€003†Ã0À`ÀÂ`Ÿ€ø'àp€ð.03†ãbÀ`ÀXÃ`Ù­€6k`ð€5°~3ÆcþÇÀðQÀC8`ÿ9€?Îgø°€ç3üpÿüìw€þÇÀ<qÀcð`€`0€0xÀ`À@@P €(Zƒ€ ÀÀð`xÜ €0€`€`À SHAR_EOF fi # end of overwriting check if test -f 'img47.gif' then echo shar: will not over-write existing file "'img47.gif'" else cat << "SHAR_EOF" > 'img47.gif' GIF89a`€¿¿¿!ù,`¹Œ ›í£œPe¯Þ<®|0Øidi"¢ñ‘Ö‡V¶í†j&ÞgÙj¬z<ïõ{€jCd2f”±–ΩÕèS…\TìUÓ]£ä^Ž 'img48.gif' GIF89a\€¿¿¿!ù,\ŒÉíúÚŠ4N;®é*q¢·YHÉi ø°"£váŽÝµõÛÞ_ üÙN¸¢®¨JòV±¨LÁˆ§ÎéÜ™nÆê‘”lZO>ò÷ˆþ…e\Zêê±Ý$*6î`‰Kõ ~>V…†æ7dvv· †±×¥8–¡%…•fÉ3£™9òxÉ ógJ1è"º”JZê¸ú û6[kKWy«{[; SHAR_EOF fi # end of overwriting check if test -f 'img49.gif' then echo shar: will not over-write existing file "'img49.gif'" else cat << "SHAR_EOF" > 'img49.gif' GIF89aû€¿¿¿!ù,ûþŒ©Ëí£œ´"¬Ž¸û»…âH–扦#ædê Ç0«vÍgd4KýûÙdÄ¢ñ¸ ú\K¤óydÖ¤×îš“*OÛ$ ‹…‹_wŒN—¿\v3 ÝaúYÏ?•Ã]OÂxó·âÖƒÕÄ¢Ö§P8)Y¤CÅdãÄs¨uÈ I„jy‰“…š@šã—º*Z¡É úhÕ9™«û`f «XËë1ÌgŠkg»4»{{ë‡ùœL²ØÂüë»ëý qI­wM mÞ"|¦nm ¯ü»×›Œ»~bU;¤œ@=÷Þì7J;a®2š½O+>´PB—þmküˆÇÌAj!" 6Yˆbø$–£HÈ˦j»¼é±*Œ|¤Ú†nØ WË8:Ó†pÑêaŒØ’¤©‘ô|R(®Jž>±âüZdã)Nå€Q궈lVw0ybñuŒ)Æy¬¢+ôª4\×Úé·¬à4 œ¡{eÑ S€Ïòv-¬Ô0Æ?Qmx.(c›™˜Ö{ΓÞ-> ¥’ªN‰d´ÎêÚ¥6¯‰s>=µn]æ í°ã÷¿„­|“KòQõJ»›7•ïç(é°]Sy™¡À9i;ÿNÐøiï¼ù¦>Õ¼zÁwÈ7ª½>¾üùôÁf¯?¿~p; SHAR_EOF fi # end of overwriting check if test -f 'img49.ppm' then echo shar: will not over-write existing file "'img49.ppm'" else cat << "SHAR_EOF" > 'img49.ppm' P4 507 19  x³c0€01€Ìæa€0€ 0ÀÆf@€€`p@ ÆfЀ`°@;€àpïp|?ÆDàÀàð8a°`o€øà0 ðs˜ÆsÀ ÀXA0`M€ø`à °p03™†c À ˜Ã0` À€003†ÃÀ`Â0` à€003†Ã0À`ÀÇø`Ÿ€ø'àp0ð.03†ãbÀ`ÀXÀ0`Ù­€6k`ð5°~3ÆcþÇÀðQÀ@0`ÿ9€?Îgø° ç3üpÿüìw€þÇÀ<qÀ`ø`€`00xÀ`@@P (Zƒ€ ÀÀð`xÜ €0€`€`À SHAR_EOF fi # end of overwriting check if test -f 'img5.gif' then echo shar: will not over-write existing file "'img5.gif'" else cat << "SHAR_EOF" > 'img5.gif' GIF89a+€¿¿¿!ù,+o„©Ë펒iñ©Sž2r}X—çæx¢b:…©ôÆPÅÕ™ÖgÃÆЭ@%âÏ¥v”ÆàM$„"—ʨTh¥ÐªÓWw“uò6ø9 /Ð̵LÛÞ!Ô°øƒ¦sËl»ÿ(8HXhxˆ˜¨¸ÈhX; SHAR_EOF fi # end of overwriting check if test -f 'img50.gif' then echo shar: will not over-write existing file "'img50.gif'" else cat << "SHAR_EOF" > 'img50.gif' GIF89a`€¿¿¿!ù,`»Œ ›í£œQd¯Þ“eØ]_¹1–¸°A‹:çA¶ókÛéy¯|£Á3úFF¡s$ÊœIܯjb”½"w{©Í›§Ês_Qª‰5ª"rÚ›­Ç>ž©%³×¶%X1g’øöˆEXx(I7˜V ‰H¨çÆcÖšxùã(™†šŠê³šGši";Kky‹›ÛaK«¸Ë, 'img51.gif' GIF89aô€¿¿¿!ù,ôþŒ©Ëí£œ´ZÀÝVó†âH–&˜9Þɶ.š~±™­ÜüæúÎ÷b\ Ìp¾¢1D츒æñ J%«Zðàœ¾¬\[ËËÈFÄ°X‹N«wÃk⼎ËÆpjy§äåü¾?\U·G“â¶TˆUHfÑÕ¨a%DÄ…Q¹teh°øçù©ÖÆÔi)i×uªä¡¸ùÕ¨ØôÆÚ˜ÈÉ X›K ú ,g“éEúÓkœzéÛ+„<¨2‹«Æ;ÙÜ܆é¶m …ãÝc,Sµ ­â¤¬Jýú¤«=lú HíÌ,îÿ¿EÐ=#è6h²Ænž4…æì¬ËVïY>nñ¼ˆ‘¹ª[ûÎa™ÏÒ;‹È0|)/ÌÂh é<Äfï[78åü3§Ã}yȉ­`QÄJþ\É’eJ†ùjr,×hS¡:«‚6¦e@µâ©Äµk­eœî¢ªuä©¢¹LâصbB«t¥4—EÄ#{™& ø©XÝÁ9ñbÒ„ßVŠýõé©'áÉ¡¥Ñ6¯Æ̱–¹ Ù$åÑþi& tɨ[ÿ£; SHAR_EOF fi # end of overwriting check if test -f 'img52.gif' then echo shar: will not over-write existing file "'img52.gif'" else cat << "SHAR_EOF" > 'img52.gif' GIF89aô€¿¿¿!ù,ôþŒ©Ëíã´Ú‹³ÞVú†âH–扦êʶî ÇòL×öçúÎ÷.åk‚Ä¢ñø ‘ÌWå¤\=MѦõŠmU;†jöûñŠ†?2Õ N«× ´2*f3ÑŒx˜®²‡ðò¾¿G6ÕõgÅ×vè¡w–’Xø)¸44ó$h¹8‘t18Ôqù9QºùæÅÙêÊØÅ…ÀŠ³y Á§»›ä)êè@7E¬iÊ+Tl|üêü 5»‰ˆdLkÊ¡0)Ë< "¦jíÆ`Çm¶ ÍÞ.ýžÜ\IoΗ;¬¹®×{ð˜:aéÒQs‡0áÁxVãw¦\Ãn¾*òWnš@šr›­‚¨0d¡¯å0xO¢lö,MU‘RÃ;ýjL6HÏ7€EúdGr¦IzÀpòÙ‘WQ£Â*ÞRTó¥ÍŒ‰v¢Ãö3ë#Ž%‘ÎЀlf‰ S×yS ®`¾”/붬ֹ}~TóïˆWP{OÒý;Rª5oÌÍ©Ñ÷ÆPÀŒð[ìc_âH7¾LØ,溓%uÞ šhÒ; SHAR_EOF fi # end of overwriting check if test -f 'img53.gif' then echo shar: will not over-write existing file "'img53.gif'" else cat << "SHAR_EOF" > 'img53.gif' GIF89a €¿¿¿!ù,  ŽËíØYsRee¾Ï@ *; SHAR_EOF fi # end of overwriting check if test -f 'img54.gif' then echo shar: will not over-write existing file "'img54.gif'" else cat << "SHAR_EOF" > 'img54.gif' GIF89aƒ€¿¿¿!ù,ƒÞŒ©Ëío€´Ú3¯~y#éAR 3¦e4®‘‹’å _txן<ë6¯ÉùL@IÅSÌ¢ò‡©Z;jÒšhQ±¬.ñ †=-²í‰†Î˜Èõ.Œ »Æáùîõ¦ñý;G·Ôĵb§ÖWx3æg¢ÀT5T8ãÆ8‘ÙàwX$Zg‰H¹iõä(õ'IY5˜*ZYš×™è„uª)Õ ·KH†lÖ»+ȧ›”%;©Cmuí3mÍ-ò½ÎLn~Žž®¾ÎÞîþ/?O_oŸ¯¿__; SHAR_EOF fi # end of overwriting check if test -f 'img55.gif' then echo shar: will not over-write existing file "'img55.gif'" else cat << "SHAR_EOF" > 'img55.gif' GIF89a'€¿¿¿!ù,'ZŒ©ëQ{ Î+Ó|u^".ZX©”Ý{¢Ö¬’§&²ô£RÃE\³cu«mxÊßç4õ9 ujRqØ­1Ûý|ÇÏ0ysN«×ì¶û Ëçôº]; SHAR_EOF fi # end of overwriting check if test -f 'img56.gif' then echo shar: will not over-write existing file "'img56.gif'" else cat << "SHAR_EOF" > 'img56.gif' GIF89a(€¿¿¿!ù,(E ŽËí£œ4¦ŠÙ]‡«LuÆ'ŽàTvŸwJëXšío,ä±ìÕ¯¦Ë9|¾®aão¬Ô¯ÜñT+©Ñ S.{Jë–Y; SHAR_EOF fi # end of overwriting check if test -f 'img57.gif' then echo shar: will not over-write existing file "'img57.gif'" else cat << "SHAR_EOF" > 'img57.gif' GIF89aI€¿¿¿!ù,I­ŒiêclŠ5›Ø²û§Ü–eÔ‡¢a°ŠgËžé,Q0‰»ô>ŲžÃYZÃHÃ1nn¹_ì)´)+Élx .eViÛüM^2·Lt†ETæê6†"¹Z¨ÜÂVûÝôtv…Ge×eèwøÂw!¥öV4çRˆIiéÁÄyv©6Ê™rÈ£ø5šµ€Ê²Óé ¹%«úŠ›«»ËÛëû , 'img58.gif' GIF89aô€¿¿¿!ù,ôþŒ©Ëí£œ´Ú‹³Þ¼û†âŽ9¦êʶî ÇòL#¥Qæyp×þ ‡ÄbÅÓí’ÆfSÙsJ§Ô*(Šd²Ö.+ŠãzÇä²kKˆÍÞúz[FÀi5öÍÎë÷:NáÇg5Eh¢TØ@—¸…')É·æ89Fa¨¨y¹ug#ŠyŠJX ™Ê`ú(Š¨éŠ›{&¶Úª{û"ë†d‰"ü›¬ 'img59.gif' GIF89a €¿¿¿!ù, #L€ fȽN|íЗðÌpJÆI¥\ÕGnN¨æ ÇòL×6\; SHAR_EOF fi # end of overwriting check if test -f 'img6.gif' then echo shar: will not over-write existing file "'img6.gif'" else cat << "SHAR_EOF" > 'img6.gif' GIF89a€¿¿¿!ù,) ‰É æ^‹ËÈ#£Êv®Úi[ö`!v¡©:N.ŽJ{%(çúÎ÷þT; SHAR_EOF fi # end of overwriting check if test -f 'img60.gif' then echo shar: will not over-write existing file "'img60.gif'" else cat << "SHAR_EOF" > 'img60.gif' GIF89a@€¿¿¿!ù,@h ‰Éí#;`ÖX¯Ñ²û—Y%*܇6”¶êµlrJ—ñl³fÍ·Ü#y´àPCNL'—áÊùVLêpÓœ2± •ösU—)*x‡&Þ<™PÇ,ŠíSÙ~—ë÷ü¾ÿ(8HXØP; SHAR_EOF fi # end of overwriting check if test -f 'img61.gif' then echo shar: will not over-write existing file "'img61.gif'" else cat << "SHAR_EOF" > 'img61.gif' GIF89aô4€¿¿¿!ù,ô4þŒ©Ëí£œXÞ¼û†âH–扦êê]’¥±òL×öçú^»SÌ ‡Ä¢ñˆ,i`¯¤ó J§ÔŒV·Ü®÷ ~ù2WìAN«×ì¶íZqËçôº±\6ïü¾ÿÿtaæPhxˆ˜¨¸ÈØèø)9IYiy‰™©¹ÉÙI3Öê9JjYvŠŠFh šÐZ »GHkó*«»û8X›…\èsêË‹œ| ¡*b»ü“—1=í"­d­¼íÜ|æVìÍŠ-šûñ¼*ÆJ–M}¦šË=ßAa„NÈ—:^(ZZíaÈ!zšuâ<åb‰ÛزŸN&®KoñÝÇbŒ¨×ŽŒ6’B*Ôdwcá­•ŸBBÂãFÎbÙ‘JrRÞ’; SHAR_EOF fi # end of overwriting check if test -f 'img62.gif' then echo shar: will not over-write existing file "'img62.gif'" else cat << "SHAR_EOF" > 'img62.gif' GIF89ai €¿¿¿!ù,i þŒ©Ëí À›´Ú‹‘ 1{¸qø„šÑq›9Z©˜D²Ä’‡×ëŽÖ­ê3±^½’M3´7y\,UÒXîļZ±Ô¨Ù¡Ù›w, ÑMn*4m½;KžÇ)zÑ83cØwECÖ…1Õ§÷¤ö(5—8¦å˜ãs怙!è‡ÇIY”ȸ)zA'””9:ÓFF‹2Áù©%[׳Ë5V8«YÖ< §ºF+œÜûiYæÜ|I¼‡ú;lX¼™ÝÝŠ=ªMÆÝ`Zë)þ·M\n×ÙþÎNïþÞún_üÊÿ0 À <ˆ0¡Â… :|1¢Ä‰+Z¼ˆC; SHAR_EOF fi # end of overwriting check if test -f 'img63.gif' then echo shar: will not over-write existing file "'img63.gif'" else cat << "SHAR_EOF" > 'img63.gif' GIF89a(€¿¿¿!ù,(aŒ©ëSs Îˆ+Ç«tè… „ˆù°)Øŧ±Ö–7÷8óöŠ{ñ½`+7¤S¤jóÛ •I—±IôI7ž›Ëš-%«Kšx!ƒ€K5ìù ËçôºýŽÏë÷ü¾ßS; SHAR_EOF fi # end of overwriting check if test -f 'img64.gif' then echo shar: will not over-write existing file "'img64.gif'" else cat << "SHAR_EOF" > 'img64.gif' GIF89aô4€¿¿¿!ù,ô4þŒ©Ëí£œXÞ¼û†âH–扦êê]’¥±òL×öçú^»SÌ ‡Ä¢ñˆ,i`¯¤ó J§ÔŒV·Ü®÷ ~ù*Wl%ŒN«×lÝ•¢mËçôº±\6ïü¾ÿÿtaæPhxˆ˜¨¸ÈØèø)9IYiy‰™™WÅ©ù 6Ö0ºé9Uªº RæúzÊ“Š›f˪»K8¸P˜5›k5 EË‹œ|àKZœ!LV8öö¼ œâr ¡­ÜMÃâŒA½-NV­w›={¶Œ®’WÝâ]©m'Ý[[L.; Ρ!|g̤“ÇΔ5qZ`©k0Î=z}|ô8N¢-þN#rœ ㉷¬™Ì¦€ä¯•Á ªÜ“b$ L¦l–2V©Žü<Ý,'²œKyÏ¢ŒfTÖAÐðd‘ É"͆$RÛ9ò)Ë[cº©É¢éºjtö5¥©†?¡¶‘:¶]f%ý­¥[KhѸ&ºŠ JŠoκñ–[ئ[GpÏ îXnغ¿zª›ê–ÇÈë Ç{쎲dÇĈþLzñ"¶|#WÞ°“¦> ¤ii6¼6#èûêýwrh§ÃU+R¼w·nÔ¯ó¦fÞì”ë‘A]^U­ñ¨gMW¨¬àÆvKÇ^»ù¶m·&ßÎX'ë¹cvþ^m.”äæï:l9|rœwíEƒßQ£YT’AýÆÎ|á€Ô߀1ß?"h Q²‡ X!×á„žåwaŠCÀu^UX}hÎ01b³¡Š6^'aL2˜•ÕlöÕÑBóã7Ð d¢UãN*!ã7ŸçcyEº(Æ“Zb¸Q“Ä|×ÉmÿmIf™3ˆ©™™j®ÉšÖ± gœrÎIgvÞ‰gžz®–åž~Âi˜zcS„Z(8 "Êè…Ô¤¹h£’n7%N£MŠ)TŠÊ–i§š.ô¦¡žŽš O‚’Šj|©®J©‡¬¾JOz°zZ; SHAR_EOF fi # end of overwriting check if test -f 'img65.gif' then echo shar: will not over-write existing file "'img65.gif'" else cat << "SHAR_EOF" > 'img65.gif' GIF89a€¿¿¿!ù,þŒ©Ëí±Ú‹³†4Ì ŸÑacx•"Ù*¹ÊDSê)½9>óÞÛ Št(Úâ–àáˆ?‡¯wD&KÏ¢n™ƒ²6ÕìQ2M´àr“Ü}¤I é6<^ÁåÆ™w§fY7êÞs76b¤ô¦¥wæd£¨T#ÆP3YfùÖÈØ–ÈgèÃDIõxú·¹•§'W)WöÔ'™¸öqëÇñiÁ‹k{5Lö¥ÛÒ{˜[Jûv¹ùÈ9GË ê…¹ ¬¬ì[KØ‹¶TM¥$î×ù£n¦í:gÝf"/éΑ/»ôé[«€ÀܹÇ¿‘Úí[T+Å%€y$6Ô÷0XÆ'_8zü2¤È‘$Kš<‰2¥Ê•,[º| 3¦Ì™4kÚ¼‰3§Î—; SHAR_EOF fi # end of overwriting check if test -f 'img66.gif' then echo shar: will not over-write existing file "'img66.gif'" else cat << "SHAR_EOF" > 'img66.gif' GIF89a€¿¿¿!ù,@Œ‰ ¬Ÿ€\ÚãVl2ÿ}]äTá†æÚP¨ˆµ©;ŸZ Ï]µ—ž^‚¿â–K…+Ð…™Bzщôø¸Z ; SHAR_EOF fi # end of overwriting check if test -f 'img67.gif' then echo shar: will not over-write existing file "'img67.gif'" else cat << "SHAR_EOF" > 'img67.gif' GIF89a6€¿¿¿!ù,6sŒayÀê’ Õ©ZбçJ-â·`Þ¹™˜†—˜ Çò%“ö«^ºmÉíZ¼Opˆ¬…®±ÆQþŠÉ #-1§Që Ë\mÄçÉÓÀ¸^yzˆ´wY8ê>ã÷ü¾ÿ(8HXhxˆ˜¨¸ÈØèø‰R; SHAR_EOF fi # end of overwriting check if test -f 'img68.gif' then echo shar: will not over-write existing file "'img68.gif'" else cat << "SHAR_EOF" > 'img68.gif' GIF89aÚw€¿¿¿!ù,ÚwþŒ©kÀ£œ´Ú‹³Þ¼û†âH–à˜êʶî ÇòLsiçúÎ÷þ¿B¥nÀ¢ñˆL*—"ó J§ÔQXÍj·Üî u;½ä²ùŒn„סû ËçôºýŽÏë÷ü¾ÿ(8HXhHØq£81ÖÒxñøyñh©à4i¢IÁIÙV)¹Ð˜ùåáù1IŠéjÃà‰*B+j1:Ê0V*c{Ûɨ»ûjuü{ 9lœ ¡è€Š•–|]“­c½qÆÜ}ÄMc~î’®¬îþ_Æž(ooômšßïÿ¿ Ç<€ t–ì Â… Am«×0¢D‚ûN¼ˆ±ß@þp;z|·QCÈ$KÙĤʕZPB‚È2¦Ì“0½Í¼‰ó‡K\9{ú¤±³BПD‹F³i4©Òv@k.} “ÓC£Z%YÕáÕ­[³ªâ ÖªWbaËÛLf&8VКõç¶XX7mß {+1®T½9íž`‹^E¤©>Z˜ ßg‰uøýÛ›ÀÈOÓ¥Ì(æ.5oþ°ñçn‡G h`œÔ¡Õ¤~­°µ¬©°kƒ¤íÈvCÜ`eËÖ]ù÷îÉÀ# _軸òxÉ—_<þ¯¹ó‰¼‹JŸNú½ëØ»Ë#î=¼îâ³k' ¾|ÇÁ3}WW_çûMñcžÏ2$}}“—þŸ³!¿_€Ž!D˜€8ÝÇÃ"wefà󑳊~ ˆ‚¼H8a†#Tƒ¡†=õ'O~ã0èaR‚ €%®ØF:*²hâƒ=ȸ E0^E㹵ω7–£\,PÃØs $Y¹‰f$WìÑ€KYa“MFUYyåAIÞò¥V"ýÅa—Ÿ=™Ò’"M#‹0fÖg!”°¸Öf‹h¾Ù-c•&M,¹àiˆ~ÚØ'ÚÝ‹nÎV§˜ˆ'¡iFYM˜–…¤¥s^ ‚Šr™§i êY|qr祆:D\~ºjW§¦Øa¬bµj7îqiëmÞ˜“ªœ½Þå:šÂ:þ¬O¤v2²É¶÷‹”£òúìwÆJ¹l¡Õ*ËdÙ )é¶Ð:òí…¨‰«:®ÖŠ.F‘nr*»íR—«fQ;ïIÝ‚P®Pý •ïz†íàlÀù¼»á¿Ú’h°—Æê{nɯK¬ŽÂaðº+Æ£¥1Š{ŒFÈÁÎ(/É%ï‰oª|ŽÆ'12ÌŠy²š Û<^±ðrQ3ÏLL™3:) ]Ù¾à´ÌSÄHãÓËÜûôŸRtSAWM° Yè4×H\mÃ×]‡-¶>?ƒttÚö®-XÛn¯£´4fÓ,÷ܪÂ]aÞz{]ÂÝ’¡ý÷Ã$Ìœ±ß…—í³·R¿ ùâ|óþ+x[KήŽç5-æ‡ïT¹Õ¡Óé9Ö€»«xé¼d™Ñåª7z:ê„¿>"}­§^úºÏNû t{äºÞ‹=îCð\“m;ð¸»müvË?¼°Êó.9’üÕ[wÚâX_°ïáè.ïn8é…oòõ^‹ñ½çâƒû‘–Wœo1Kš ýj¯Ti•d.z<ŽÙ'sý©ûj=.olªØR*¢G©÷iH‚žg´AØ©Lsƒà¦2¸Àå<.„åhàÙÔ?e0}ö«Žzô? |$d`%’Žf…:¡Ð ‹•C ª‡„:¤™ ©”Ã|ño>”ÄPŠ˜' }¨EþÍ7.'â¯lWœ º(Ÿæ•Hˆµø‰´=0jð&¨B\/EÆÃå~DB‰­ÃAk™±m²c1óÇ**ëˆntÔ•Ò¨;îÏ„T “7ÇçÁG‘Jâ– ¿EɲÍD| Ü#»â<<Ò’Ìž2¹È´x‹E¨4d$o¸EŽdh‰gh%߆Æè@åŒ;4e"w ŠåO@¶lÚSXñŸZ|’¾DÏ1i£ ;Â)6b &7åô¤˜%\ŸQže&G’,Œ8‹JêuŠ›²$§:ÏÄN¦Tó›9gÔ¹uNïV¼TJéÕ;a²SXÁT'åx¦fRÄ ?d=þUO% Š”@RhA"*ÑK4Td(.ÍBKäà…«YeE³èÑͳ‰ -'D-ʹ“~˜{”©Ž0êa²S¼QN öÓpyñ eŒQã,iNJÓ¨œŒ"=»÷Ïš&få êÀŽI:Rc©l´êÙœêD˜š««îähC7ÚѲš–Òzé5± H—j¤¥m(B÷éUt&”¨&Ý']ëªÅB:#¯Æ$ì=÷Z¾5gª¦¥2æg±Ò°Ph㚶 Ùʼn²RЪ`ÄÙnV7óG™¶ÙÐ*†q@|ãÇÞŠ#ÕBm¬:mcé«·|v¤í-t¨ ɨáA¦kzþá»Ó¼V·Ãím±ˆBfaÔžöØ-ð–»\Ï“: f.«þÒÆÉ8‡+¾{¾ =èW:–àmôÈÒ;ééª7ÓçXô§7õçR2Õ«¾ÓÈaÝê7ݺ£îu® :ìöC:Ùábö³?ØéjçØÛžÖ±Ã=~iŸû¼¯nw¿Ê=ï;¶6ßû-™=Ùþ{÷ênxgâ=ñ1]<ã5ë÷Ç»ñ’ïÒ+¯šcÞ8oß¼Òïy‹ï=ô™¿<éC úÓÏÕôª¿{ä[¿öÔþº”Ÿ½Õjo{Ëá>÷Ic;ï…Ëîß÷^öÂ?7ë‹_Þã#_¾Ê_þwïü[¾>úím>õ·üëCŒøÚ¾õ»¿ÚïƒÃGøø+ îñÿ—åøú½Ïp"þ™Ÿ|GWkÔ2KÓ•ÖÍ3^|y>qw 5âÿwh2q­€pØ-Æå2ÈÕq­õrWx4rèeæÀ x€ê[ H€Ó·È`X$ØN·u-è‚/ƒ1(ƒ3Hƒ5hƒ7x$g[ïÇL%ǃMÇ(‚‡|ÚõƒEØs„§wþôo¢BèqGç„òxP[é”nj€rHÔrTòqIæjí— vb}…qSG)fˆ„ŸW†äâq·%RøumÈTA˜~;h¾õJvx‡>¸7zh_·F>€ˆó÷\îçV|(U‚x;ˆ;6—‡txr8uŽ(=i8y;÷ˆ–x‰ghŠ„艟Š¡(Š¢sC&K؉š“ ¶à £Ø” …k`@Rh òG‰ÈUG‡®Xov1 ZˆH­‚YþSexšÈ‹v#LÀU'ĨMUrŒªDN˜g5ŒƒMµ˜\Е\»˜Œ=Æ( §‡[Ž"‚B­ØäH€V@€CÑÈ…´ÚH:ôØ ; SHAR_EOF fi # end of overwriting check if test -f 'img69.gif' then echo shar: will not over-write existing file "'img69.gif'" else cat << "SHAR_EOF" > 'img69.gif' GIF89a€¿¿¿!ù,BŒ‰À ›[lÆžy6+×mG†§y›†J#ûŽkCɳxÖ1Ž[á_)­H) Ƶ»•¹äÒD\:›TL‰”>SË; SHAR_EOF fi # end of overwriting check if test -f 'img7.gif' then echo shar: will not over-write existing file "'img7.gif'" else cat << "SHAR_EOF" > 'img7.gif' GIF89a€¿¿¿!ù,,ŒiË ƒŠ ÑfïÊzJ¾=•8bdˆ}¢§&.ÇR®&}udÅôÎ÷þ i; SHAR_EOF fi # end of overwriting check if test -f 'img70.gif' then echo shar: will not over-write existing file "'img70.gif'" else cat << "SHAR_EOF" > 'img70.gif' GIF89a.€¿¿¿!ù,.UŒ©Ë £z‹`¥¾¸Úm[ö9 ……fª‘œ #ìç6n­ry–öü4!=fQQ&¼Åra"ô{I›½­ºìÔDLoh¶]ãV| ?[IuØ·v‹ ; SHAR_EOF fi # end of overwriting check if test -f 'img71.gif' then echo shar: will not over-write existing file "'img71.gif'" else cat << "SHAR_EOF" > 'img71.gif' GIF89aô(€¿¿¿!ù,ô(þŒ©Ëí£œЋ³Þ¼û†âH–æ‰rÀš¶î ÇòL×öYøÎ÷þ aº¡ñˆL*—Ì ëPlJ§ÔªõšY= Q¬÷ ‹o–m ;N«×ì6à uËçôº®…Û÷ü¾ÿ¤÷'8HXHh˜¨¸ø‡Èø)æ(Yiy‰Dy¡¢y† jä¹€æ–7šU:Áù‰ e6ê:Û‚§‡ ¦{¨Ú{Æ å{KL{\ûŠ§k<ÆZœðí4휋¬-³|ýš]'mÝÁ¼Ù%‹½½îÑ Î5l'ž£^ÌZ6\Þ\½ŒŸÏЄ;x¹þÑqt*¡³j«˜ùÒÇðÓ4o§ ¼(M3ñ‹ßæDT¦ÐÓÇ[Hœ>Ž[nг±cJ9ó +Iï :Ujº¼ÓàL`ë¥Âp"”,›þ|šÓ›L¢SÛP ‰‹¤Ñ™åHÆqºôëP¨d•Juìš‘Øš-’•¢Ã‰·,RZ6/©bhc²I(ð&`R Ѳ iX¯b®ááKŒÌg»Ré[®úv/@É/GÖã|9ÔVÈ‘GgD¨ÎtèuâT?Š˜H׫µ 趶îÝMüòþ \ÜÇÁ‹ß3íñåÌ]ÜÛ<ºô%áN¿Ž½³LÚÙ»›–»÷ñ»ÁK„M>½â èÕ»P; SHAR_EOF fi # end of overwriting check if test -f 'img72.gif' then echo shar: will not over-write existing file "'img72.gif'" else cat << "SHAR_EOF" > 'img72.gif' GIF89aô.€¿¿¿!ù,ô.þŒ©Ëí£œ”‹«Þ¼û†âH–扦ª —Û®òL×öçúÎ+Ü ‡Ä¢ñˆ¤Ä”±Wò J§T(f9q¶°Õ®÷ ‹N¥á:N«×ì6­ìŽËçô:nÏë÷|6¾(8ôGxˆ˜(gx¨ø…&ãxv…™ù#ÉÙé¹±ÄÕ(š@Ù€ù™ªººcyIJûàêÃjKEK¶—É‚zº9+ ƒ•[*|‹ÌƒËU¬æüì |ü›ŒM*mz&-Ô Úl}š®\«›÷]3^±ln‘n3Ï^ëN.áë’±-ŽÞÝ;HΘ>…v i ("^–}Þþˆ0# þQ†:ösÑÂÃ$Bȇ  ÁŠ)?j|y’#) ]rI‹äµ–"}³ 3¨Ï¡DÒ1xÃä´u w }ªáÍ¢sÊðŠ…sP”U… 6‚Ô™dëüX‰tÔÍvµlÂòUعlã~µë†×Y j}xÆ…QtƒZ x/?Œ=ÒNYŠbaºi÷Ñ"XÝÍ‹ô6qLÙCå/*G l¹¢¬\ž%ƒžëøõ@€å¨¹ü,;¬AÓ’2,Æ;·ðá§÷ŠÄ©‰¸òåÑcEž˜¹ôé$œû„‘ºöí~árÿ~†s¾áË›wú‚üùõë3맞½ü嬃Ͽ>>þý…(òÿÿÝJÃD§€¾ôÖD.HßG2!:{%çM„¾†ZvîW; SHAR_EOF fi # end of overwriting check if test -f 'img73.gif' then echo shar: will not over-write existing file "'img73.gif'" else cat << "SHAR_EOF" > 'img73.gif' GIF89a€¿¿¿!ù,#L€—ƉϚq UçÕ¹©„‹£<æUm·ZªµòL׶]; SHAR_EOF fi # end of overwriting check if test -f 'img74.gif' then echo shar: will not over-write existing file "'img74.gif'" else cat << "SHAR_EOF" > 'img74.gif' GIF89aô€¿¿¿!ù,ôþŒ©Ëíã@Ú‹³Þ¼û†âH–扊•¶î ÇòL×öÝU†Ž÷þ ‡DOvì±.ÉÌÒÑ,J§TÒ“YE$W«wå|¹‘«Äü=ÕánÀœËç ´Ñ½ £ðÜQ_øö'ø¶ÖdÈÓGçø(ň—GÉ—ب1Y˜—Ù™àéù°•ÚV ™ª*„hj©vy7¢8*Z©hÛ@ *;º,LÓŠûº몲5YëhZálÌ& m]<¼Í}¢}{¥«„íÅüË©\]皭ηûÛ=O‚¹ŽŽCªá|Úo?|½¼uðœF}ÄÕ{1á1roðZ4†!°Ósèæ:…­UCä"š<)¡º‰‘ÒÙÛˆ¯Çfîh#Y2%Êõfæ¬hãbˆ…g¨­L‰‡!,¤üpºdÉ3*7ŸïŽ!°L­NctS‹¯G.5RÓ¬Ôµsîáj§òj'µÆô‘Ú?Iv ûT'8 l yÒWàÀC²Ú#–¯è]¨•N6Œ¹ áË-‰a̘™–¢×4½åó7³ê·{~}'¯kdßbžuÂwçÕ¼ƒlevèÃW2Z»·ò›Ï.f¹ôéR ; SHAR_EOF fi # end of overwriting check if test -f 'img75.gif' then echo shar: will not over-write existing file "'img75.gif'" else cat << "SHAR_EOF" > 'img75.gif' GIF89a1€¿¿¿!ù,1zŒ©°\j´Â(ïj;~yšbbIŠã4©h»B§«b­C…ÞûÕÆÜËÉ2BÓã%á”DÚðèd4SÏÎj 4þ|Ä-5(e-à eïVIß`ÛtòóÏWWì‡gÈQ¼Ý62çsFøgˆ˜¨¸ÈØèø)9IYiyyW; SHAR_EOF fi # end of overwriting check if test -f 'img76.gif' then echo shar: will not over-write existing file "'img76.gif'" else cat << "SHAR_EOF" > 'img76.gif' GIF89a)€¿¿¿!ù,)n„©ËÍè’YFú¬œsû[5„_©9#¶A£¶ª)©èy_yF#ÝÍr¾".ÈÊŽCÊùƒ5kÏ*õªƒZOíRÙ"Æ*ã-–¥C'³S°”~€ld}jŠë÷ü¾ÿ(8HXhxˆ˜¨¸ÈP; SHAR_EOF fi # end of overwriting check if test -f 'img77.gif' then echo shar: will not over-write existing file "'img77.gif'" else cat << "SHAR_EOF" > 'img77.gif' GIF89a€¿¿¿!ù,+Œ›l S€Î¸`®Sêëqœ>ã=©Y}¬™¶â• tÝØ®k#ÍÜ ; SHAR_EOF fi # end of overwriting check if test -f 'img78.gif' then echo shar: will not over-write existing file "'img78.gif'" else cat << "SHAR_EOF" > 'img78.gif' GIF89aô(€¿¿¿!ù,ô(þŒ©Ëí£œPìÝ•ûÏhàH–扦êʶ®¸d†ŒÐU†ã¦íªp ‡Ä¢ñøø%h¼€rk~¤HʳŠÍj·Üîè:ëÔžMªì]¦×ì¶ûÝB‹~Ô2úrgçáü¾ÿ¿ÆDGevc¡²çÅø) B˜cÉ´h !£¹øè8*::Yy©Xgx§Á9gøI+;+)(vC(!ÅsØJ,< t5¸Tˆ¼›ç«Gü ]Œ|šã”<¶+f+íý Îa|[ƒ¡‹˜}œø þþÞŒÁ‡ŠxJ=vv$_>žÀÆÌÝ?,õ°mpT&…;ø ˆEDþjì¾t q¦à2äÔ<„hc¡’¹²Y˜1æÁ{Ê®¹œÂÍÓ™7, ê´²rÎ ^_†)3éÉš¸®Eñh®Ê‹Î.Ê5•©Ä~7ú,©4ì&®6"§äE³?=ê°†j_ ™9µ*ò*RlƺQ».ÕjW§²^õ!dÊê”ÄiéÒÉdÍ®ÞÉIúæô²å£­š¾W qÓ”î%Ý]×¼”ã¥5ÆÏk©°Çî¸[µgr{ûþ Ü·¹Ãwç˺58¢´K¯´|w"Ù¬"çvå÷«ÀΟ î¥<üçxó"¿’Ÿwé½E¿Ô=£n{~Á‹WÎüf/‘¸ú÷?œ˜Ad…t‹bláfškØ%øÝl`!xß@Ž¶ßI¡iFØ…ÞmÒ:¾â\ÛuDš†« ¡c ¹b]w;$¸PHÈ“\q ÑÃ_`)êcOCmÈHt5X ý )DAäíÈ#%HÊ&NꨑŒPד“QÖHÀpYÂ`"úÀ–v}LÅ‹–”q fkOšdàrjÎÉdE¼ PœßàIgŸÄÀWäV‹™¹§Ÿ†â·à&? ¶Ý¡Žò˜h Ö裖:Ö¢¤'TR饞¨¦aX触.÷”6›fÊ畧¾*M¨ÕÁJ(­¶Žb¢¨ž¶zk¯ð°¾ÆR; SHAR_EOF fi # end of overwriting check if test -f 'img79.gif' then echo shar: will not over-write existing file "'img79.gif'" else cat << "SHAR_EOF" > 'img79.gif' GIF89a€¿¿¿!ù,SŒÈþÚR“¦zo48t¾y¡§•dZÔ‚u_ÈŠ*½õÓÆ ©WSžÙí€2ÇŒE$E7× ¢6fSE5x-fµÕÑõsÚŠÇä²ùŒN«×춻Z; SHAR_EOF fi # end of overwriting check if test -f 'img8.gif' then echo shar: will not over-write existing file "'img8.gif'" else cat << "SHAR_EOF" > 'img8.gif' GIF89aE €¿¿¿!ù,E [Œ©Ëào`J:Š3½qŽM¨•!ˆz}ž /dªq6góK6ê佫ÕfHìÉ:ÆŽ¬(ñ!ÊØ-§›:±É-÷ þz[ h4Ü|oU.™yv7Å®xÝ+; SHAR_EOF fi # end of overwriting check if test -f 'img80.gif' then echo shar: will not over-write existing file "'img80.gif'" else cat << "SHAR_EOF" > 'img80.gif' GIF89a>€¿¿¿!ù,>–Œyê_sÌÔt-Û;z<š"Yp~QŠ.d9š° Í¡‹ô_ì_ê¬*B çxt½’"§†Œ.rÓf”9i•²—ŽG¡&@oWÅZF™å3O™Êr¯nñ8ØðåÇg½„¼Ö£%Õ"“Æ·3×ÔÃeµˆöhtsY‡¦Xdy9¤øõ*:JZjzŠšªºÊÚêú +;«Z; SHAR_EOF fi # end of overwriting check if test -f 'img81.gif' then echo shar: will not over-write existing file "'img81.gif'" else cat << "SHAR_EOF" > 'img81.gif' GIF89aô€¿¿¿!ù,ôþŒ©Ëí£œ´Ú îÊ[û†âH–扦êÉ­!ÐZ1Ü´‹çúÎ÷þïƒÅ€!æv0¶8H¢ó J§ÔdUÑ”%²Ìîõ ‹F[Ùq£7é•r–]#š·z[ÏSã‘·ð? ´uÇ–òG“˜´X„ÕÅ'3Ȉ¸e‰•iõøÓ¨÷ jfI¶TFWWHÚ0IÁu×*ˆZ8ÊH‹D7wŠ8£iÃäZœ7Ë G8d—«Jöý†–[ÁŒ=âÉ\K‰ü*‚¹*ûl|Þ™ÍÆÍ+œñÞ®¡*m( Ýj+^¾ù/¨–9%eéó@¯š™|èæ—‰ !{'zKȯ¦þ„°D”@ëcÆåNmZÅAmNi3wzÑ¥$Ÿªõ MéSÙÇHÍ*îÛùÁ%B&T«v½ŠE*u[³Ò —¬?rh<ûVÔ©¤g”ù=â×\Á 'img81.ppm' P4 500 21 `†08@‚LÀƒÌ  @Àƒ Ì€ð¸0ýx|àà‚À x0@Àð €8ƒ1þ`†0‡ðÌ#À` ø`€< 0`„ƒ€0Î`À8 ¨`€€. 0`Ä„€dÎ`ÀX aÜÀà&`>0cáüÌÅ€ãü<à `ÀØ0 C|À8 &` f3<ÌÀ0d88@À˜0Âl`À8 g@`l30 è` dÀÁ˜0À``Àà C@`l30h  xÀÁ0À`À€ CÀ`l3`x <†ÀÃü00ÀDÀÀ pAÀ`l2À8Ì8ÆÀÀ08`pFÍ`À8XÁ€ f30pÌàÎà@À0ÿÀXgù@Àpãà€1÷cø|pØ€üàcð|0à`À€Àp00` p á€?ø00 `0á?ø° 0@° ð``À SHAR_EOF fi # end of overwriting check if test -f 'img82.gif' then echo shar: will not over-write existing file "'img82.gif'" else cat << "SHAR_EOF" > 'img82.gif' GIF89aô0€¿¿¿!ù,ô0þŒ©Ëí£œ Ø‹³Þ¼û†âH†Ô‰¦êʶî ÇòL+VçúÎ÷þ ‡'ñˆL*—̦ó)1B§ÔªõŠÍú¤Ú®÷ ‹ƒ·±ùŒN«Ååµû ËkÜE‚™Ëòú¾ÿ¯rgÀuaˆ…CØèø8ØÐv8ÁHe¹©¹97Y!èÊ`ä9E*ê‚ʹªTZ¥ªã:[Q¨%›ÉªëDËÛK£Škg›%üò»›‹ÌÄœ;ÊükÜ4Ý⬌½x c\Z=}¸=ôÍBžH„y 5iÎNÑdŸ‚®¾O,ÄZÆ“¾|ó* 4°HBÞø9¤̧YÀŠWoÛ»þ…#æ³Ñ1ÒÃdød´sGCª &E5´(‰%%<7†´Væ¿:yŽÜ%ðÓ)w´\¹äxÓ@¤xÀÑ,d³%·PÈIí燐eÞ´±%R«&+‚Ý´ìƒj²JžÙ!J¹Z9u êÜ·ò@iv™Óµ'ùâÔ{Ð/Ôuí¦|,)”ÇÀ+ߪ4œÃmd„ÉjÆLY¬ÒÅŠ?º»ØèÑQ“ ÂÍC`g’Vkª´Ééš>ÙjÐW…j{m©lÖ¥§ê~šš,ÁçÐ-{ÅýÐèÛÅ»ÿÝšh‡Ößã¦Äf¸Õ¡r1ñZÙmoÝ–ü×Ãóþõ¯¸ÿŒýõÅ^{Ü­WŸÏjÄ}ö`r¢½'Vx¹É‡!9qz *ˆœY ˆÜXªÑ“IP´ÅTO¨HÇ\‡ÍÁøá!úÖ.¶ÔŽB˜˜ap±h m±õbQÆÕèF—ñèY’2n"8ŒÅÆSØ Xž`Sö×"“}|cÔZ1’QUZ9^4¢dbIå—âí覘zèÓMXþT¹â~Ñáx&—4j(ç,/Faç˜è„É%0iù™Š(ùf…ÝH]£€%*GIH†$of^5M’jjxj œšꞺ3jOM E«ˆ®š`ª^ê]EÂ٦鶋+«º¾Š}¬0Yn©j—V ;k±¿A»µô]ôg´Á¶rlsÒÖe-²™‘2ªxÄ:ûJ·Þ~Ën'äVJ&­O„‹`»öÆÑãu̪%5ƒfvoÀøþ{ᜉ<¤À «ðÛ&Ao O 'img83.gif' GIF89aH €¿¿¿!ù,H ¯Œ©ËížœTÆuÁ­¼+½!™¡y_hbj°-V‚‰Kʈ2yœm´]›é~¹Æî$òí”°ß G{ “Ÿ Ò*³P”Ôú†oª±™‚òŽ’âó¶‡}@!O`­Íçc©¸×äF¶…Vxu&ÂV8ÑØõETöÔ'åh§8HµYy±Wä2·ØéI9TšJz¨ªÚfôØêhò*kk›«»ËÛëû , 'img84.gif' GIF89ar%€¿¿¿!ù,r%þŒ©Ëœ´Ú‹Q̼û/màH–Ó‰iÚ¬bùšjÐààQ<ò2¶ÃÕ†·CŒuþ–—¥S WFeµf¾|?¤4b­Yì°lQ%™Íœk {‹I.EfÚé-é9ßC68³â¦¥ÃàTW7¸ðôÖWˆ(g)©éå3IåÆv¡"uz¥ºtHšÊ·fö¨ú*³×*[ ÕR ÷z(œ GüºãËw„jœf²YaÊ¢6{Œ«‹xç§ûÆX5çJÛêÛœ]ÈHLxÎf'§-FžÎ<¸ïHwPU»{ <ˆ0¡Â… :|1¢Ä‰+Z¼ˆ1£Æ ;zü2¤Œ; SHAR_EOF fi # end of overwriting check if test -f 'img85.gif' then echo shar: will not over-write existing file "'img85.gif'" else cat << "SHAR_EOF" > 'img85.gif' GIF89a–%€¿¿¿!ù,–%þŒ©Ëíâ›´Ú‹³¦rû†âÔ扦J•mÛ¼¥šÌ@§¬±xìÃÙrAÒø‘¸xÌbõCf¢Ò•ìêF/õÝÀ*GÆ· .‹ËàÖÌõ‰Ïf' ¿i•Z/¬ áGÇñ…%$'Ø„guc&W"ÙHÁ7x²¦‘Õ7¥´pe”Y“æFie(¹ùù‡šgwé©GšˆÈw¡ÊúijõëeJôªS[Õì´‹BÌ\KÜüÄ5Œôvª¦KúÊ=K<[]¬|ˆËl2Ñi>m<'ê–ŒnÜ ©.zhÛ›Mèè©Ížˆ~Rv¸ó$Ò£E“40Óšz A,Û7L[§3D]Òaü¸ï¢¬ƒ Kš<‰2¥Ê•,[º| 3¦Ì™4kÚ¼‰3§Î<{úü 4¨Ð¡D‹æ,; SHAR_EOF fi # end of overwriting check if test -f 'img86.gif' then echo shar: will not over-write existing file "'img86.gif'" else cat << "SHAR_EOF" > 'img86.gif' GIF89a'€¿¿¿!ù,'þŒpËÝêbHIJh/δo]eHŠFgZ_º¬({>LŸkçúÎ÷þÏ*á^©P5ËA‘ñæð@£¥‰HÃNªS†vf&ä²ùŒN{»AözÔV†-÷îëòݱ4'óf£vWxˆ˜¨XÓ8hxeG÷ƒP„QY)H84ñLJ ¹©£·ˆšªºZÊñYÚJ(;×é* ö é)z›GºÛ»J\l|F *lóIË•µ|ª¬Ðªí·!û¸|} .nÛ“)ùÛ‡þ‹k~^£ÝÌÍåíx?®¿¯öÎK>Êž€ßâMzâÍŸ<_ÀÖX3ãŸÄ‰åò1$0”þŒìnš·.ä¹mHE¤ˆ2%Flé™z•+SÇ9â –¡I‹*{úü÷_“•7m2‘¥¦²‡ $)êdÇŸT÷%sqã¡ ­[¹ÖñJéÒ6CÝm£­,Ù1º0!Á“hÕ¹ÅBue ÏTº–]‹ ð^¹| +Ê$í Ó%Ý ;~eóOþAæ……Ö.ù€ÎÄd 0’õ ~Å[r•A¨ŸkœôUlh1S A vâƒ"Žø’`{‚"zîWácÝ`rbvaA‘•X8*Ç(7úX£AzñcrjíˆÞ‘= #DâµhÕAY)5!¯qŸ„YjIÚVyiø%VµÅ˜5ùVfYV Y];¼¨¦xÄA©O>êq0–;rØŠ½U¦  Üøi—Œ}ªrþ*ß¡ZCOÎI§8ïtÙ–­¨gŽ‹íy }ŸBªÔ¦n†ºh£‰®*ê›}n £Tò@i¥áüEfPM•t*©™jR߯RŠ誮dææ’›Oúik³½z¢°Ùa*¯ÿ]øQ°$þ…©P¹:él¸×zò!;¾ ,ŸÇ–in¶ê• "1ÚϲâºÆÚ¹fw–¾ÚYç–¾iVß®ãZK,¸÷ÚzRª¥%\%aK¬S™ÎZñŒrÕúíÂï5¬­µé²Û.µö”ŒrÊ¿bL(Ëغ,†½ò»Ÿ‹fCîœa@Pe{$Lÿôj3Ó 2XLK0Ï|µÐN/í0x0S}µ]•ÀO6Å_,öئ‘¯Ñ\C¹õÚn7ØöÛÆÅ-wÝ$Úý1Þz#óÞ; SHAR_EOF fi # end of overwriting check if test -f 'img86.ppm' then echo shar: will not over-write existing file "'img86.ppm'" else cat << "SHAR_EOF" > 'img86.ppm' P4 514 39 €<€ü°À0€f€ü3ð€`x;8 €c€1€ÀÀ01€ €c€ 1€À01€€c€ 1€À€ 01€€€`€° 01€€€3@€ 03€€ €#ÀÀ 0€€€€À À 0€€1€À€À03€€€À?€À03`àà€À?€ð€ÀÇ`~6Á À€1€Àƒp€Àƒ€0ÀƒÀÀ00À`À00À0Àà0Àøÿ€øÀüÀü?àÿÿÿøÿÿÀ€0ÀÀ0ÀÀ0À`À€0À0ÜÀàpp€8ÀÀ0À8œÀàpp€8ÀÀÃ`ÀÀ@<À àà€ðÿ‡ø@ 'img87.gif' GIF89aŠ€¿¿¿!ù,ŠþŒ©« cr½H«†wûÙiÎxŒaVš¦.ù©2~^-âm€Óéµ³Xz˜ÊH´1‚•` ó±–§äòW*7LÉN×û¯ÚÛ°ÌûI2Uu†«H×™×E·ªx)û¨³Õ7Õð†÷vöwè•æsÄw·Ö0çb8t‰¸‚™Ô¶GZ)E3šH¸‰iºš…õ˜ÒÊ ByšÃèh*Æ*©¨û*‡;Ìe;K«ûÅÊX7ÜHq4;¹&¸µŒ†Š%í ‰ºÌ}]®-ké…úÉì»JªÙ|c•Ü´ß8?®²n\¶í8ƒ;€ýæ0xð_B‰€õ›aãà#4s®æ{WÑãB‘$KÒh2¥Ê•,[º| 3¦Ì™4kÚ¼‰3§Î<{úü 4¨Ð¡D‹=P; SHAR_EOF fi # end of overwriting check if test -f 'img9.gif' then echo shar: will not over-write existing file "'img9.gif'" else cat << "SHAR_EOF" > 'img9.gif' GIF89a’€¿¿¿!ù,’þŒ©Ëœœ´Ú Ü™kž]$–æY’_øi©¢ +×6ªÆG¸µ÷Kû ‡N• â”Ä&Ñ8Cv^?]Ïç¬\CÐì Ôí@ä-ÂcfÍTìÍû0‘ËÑÇ6&.VïК¼ææcu¦°õÖǨu¨(¸g˜ÈÀ¤&'ɆÑxV96×èˆu•G)„£t×)¸¨èVˆ¹ed;{ôuZ{º¹&6GeKçÒYK¶ »œ{™¤›I1:iø„)È9ȼcm‡­[×ýhö½Dy×ôYþ×6ñÙ¥~]oƒ/¾ßÊU@j <ˆ0¡Â… :|1¢Ä‰+Z¼ˆ1£Æ;6,; SHAR_EOF fi # end of overwriting check if test -f 'index.html' then echo shar: will not over-write existing file "'index.html'" else cat << "SHAR_EOF" > 'index.html' No Title next up previous
    Next: Introduction

    1. Introduction

      Contents

    2. Desired Properties of Random Number Generators

    3. Parallelization

    4. Methods for Random Number Generation

    5. Testing Random Number Generators

    6. Parallel Tests

    7. Quasi-random numbers

    8. References

    SHAR_EOF fi # end of overwriting check if test -f 'index_motif.gif' then echo shar: will not over-write existing file "'index_motif.gif'" else cat << "SHAR_EOF" > 'index_motif.gif' GIF89a+ñ¿¿¿çççooo[!ù,+…Œ©Ëí—0 Ú‹³ÞVÌÀ…"çQãy– Ê’ß5°q ¨°Lׯ5Ÿ=kãUbƒ"ÌØ+¿^p8L ™³&”yyb·W+w[ÍoU¹¤b´á©÷w\Áå·¦]a_÷ç)ý«gƃt„Ç¥•Cƒ˜4ÇØhòز()¢â™©¹ÉÙ¹à*:Z; SHAR_EOF fi # end of overwriting check if test -f 'internals.pl' then echo shar: will not over-write existing file "'internals.pl'" else cat << "SHAR_EOF" > 'internals.pl' # LaTeX2HTML 96.1-h (September 30, 1996) # Associate internals original text with physical files. $key = q/methods/; $ref_files{$key} = "$dir".q|node8.html|; $noresave{$key} = "$nosave"; $key = q/srg/; $ref_files{$key} = "$dir".q|node12.html|; $noresave{$key} = "$nosave"; $key = q/moveparticle/; $ref_files{$key} = "$dir".q|node3.html|; $noresave{$key} = "$nosave"; $key = q/EQNDiscrep/; $ref_files{$key} = "$dir".q|node18.html|; $noresave{$key} = "$nosave"; $key = q/cite_LP/; $ref_files{$key} = "$dir".q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_dirac/; $ref_files{$key} = "$dir".q|node19.html|; $noresave{$key} = "$nosave"; $key = q/paralleltests/; $ref_files{$key} = "$dir".q|node17.html|; $noresave{$key} = "$nosave"; $key = q/cite_andersonjb/; $ref_files{$key} = "$dir".q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_MCPR2/; $ref_files{$key} = "$dir".q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_Hlwaka/; $ref_files{$key} = "$dir".q|node19.html|; $noresave{$key} = "$nosave"; $key = q/combinedgenerators/; $ref_files{$key} = "$dir".q|node15.html|; $noresave{$key} = "$nosave"; $key = q/cite_grassberger/; $ref_files{$key} = "$dir".q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_RPIMC/; $ref_files{$key} = "$dir".q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_N14/; $ref_files{$key} = "$dir".q|node19.html|; $noresave{$key} = "$nosave"; $key = q/poweroftwo/; $ref_files{$key} = "$dir".q|node10.html|; $noresave{$key} = "$nosave"; $key = q/cite_knuth/; $ref_files{$key} = "$dir".q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_numericalrecipes/; $ref_files{$key} = "$dir".q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_KW/; $ref_files{$key} = "$dir".q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_park/; $ref_files{$key} = "$dir".q|node19.html|; $noresave{$key} = "$nosave"; $key = q/EQNMLFIB/; $ref_files{$key} = "$dir".q|node13.html|; $noresave{$key} = "$nosave"; $key = q/cite_Ta/; $ref_files{$key} = "$dir".q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_MCPR1/; $ref_files{$key} = "$dir".q|node19.html|; $noresave{$key} = "$nosave"; $key = q/lcg/; $ref_files{$key} = "$dir".q|node9.html|; $noresave{$key} = "$nosave"; $key = q/cite_marsaglia/; $ref_files{$key} = "$dir".q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_Halton/; $ref_files{$key} = "$dir".q|node19.html|; $noresave{$key} = "$nosave"; $key = q/expsumcrosseq/; $ref_files{$key} = "$dir".q|node17.html|; $noresave{$key} = "$nosave"; $key = q/cite_marsaglia2/; $ref_files{$key} = "$dir".q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_EL/; $ref_files{$key} = "$dir".q|node19.html|; $noresave{$key} = "$nosave"; $key = q/EQNRoth/; $ref_files{$key} = "$dir".q|node18.html|; $noresave{$key} = "$nosave"; $key = q/EQNICG2/; $ref_files{$key} = "$dir".q|node14.html|; $noresave{$key} = "$nosave"; $key = q/lfg/; $ref_files{$key} = "$dir".q|node13.html|; $noresave{$key} = "$nosave"; $key = q/expsumeq/; $ref_files{$key} = "$dir".q|node17.html|; $noresave{$key} = "$nosave"; $key = q/cite_MC/; $ref_files{$key} = "$dir".q|node19.html|; $noresave{$key} = "$nosave"; $key = q/EQNSRG/; $ref_files{$key} = "$dir".q|node12.html|; $noresave{$key} = "$nosave"; $key = q/EQNPRNbound/; $ref_files{$key} = "$dir".q|node18.html|; $noresave{$key} = "$nosave"; $key = q/cite_CMPTEST/; $ref_files{$key} = "$dir".q|node19.html|; $noresave{$key} = "$nosave"; $key = q/states/; $ref_files{$key} = "$dir".q|node4.html|; $noresave{$key} = "$nosave"; $key = q/EQNICG1/; $ref_files{$key} = "$dir".q|node14.html|; $noresave{$key} = "$nosave"; $key = q/cite_Mascagni:SIAM/; $ref_files{$key} = "$dir".q|node19.html|; $noresave{$key} = "$nosave"; $key = q/EQNKH/; $ref_files{$key} = "$dir".q|node18.html|; $noresave{$key} = "$nosave"; $key = q/cite_Go/; $ref_files{$key} = "$dir".q|node19.html|; $noresave{$key} = "$nosave"; $key = q/Emetrolcgpar/; $ref_files{$key} = "$dir".q|node17.html|; $noresave{$key} = "$nosave"; $key = q/secproperties/; $ref_files{$key} = "$dir".q|node2.html|; $noresave{$key} = "$nosave"; $key = q/cite_marsaglia3/; $ref_files{$key} = "$dir".q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_diehard/; $ref_files{$key} = "$dir".q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_MT/; $ref_files{$key} = "$dir".q|node19.html|; $noresave{$key} = "$nosave"; $key = q/EQNLFIB/; $ref_files{$key} = "$dir".q|node13.html|; $noresave{$key} = "$nosave"; $key = q/cite_selke/; $ref_files{$key} = "$dir".q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_Faure/; $ref_files{$key} = "$dir".q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_Roth/; $ref_files{$key} = "$dir".q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_L'E/; $ref_files{$key} = "$dir".q|node19.html|; $noresave{$key} = "$nosave"; $key = q/randomwalk/; $ref_files{$key} = "$dir".q|node3.html|; $noresave{$key} = "$nosave"; $key = q/cite_coddington2/; $ref_files{$key} = "$dir".q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_Le/; $ref_files{$key} = "$dir".q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_lecuyer/; $ref_files{$key} = "$dir".q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_BFN/; $ref_files{$key} = "$dir".q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_coddington3/; $ref_files{$key} = "$dir".q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_N13/; $ref_files{$key} = "$dir".q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_brent/; $ref_files{$key} = "$dir".q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_N7/; $ref_files{$key} = "$dir".q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_ferrenberg/; $ref_files{$key} = "$dir".q|node19.html|; $noresave{$key} = "$nosave"; $key = q/spawn/; $ref_files{$key} = "$dir".q|node7.html|; $noresave{$key} = "$nosave"; $key = q/cite_Br2/; $ref_files{$key} = "$dir".q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_mascagni/; $ref_files{$key} = "$dir".q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_percuskalos/; $ref_files{$key} = "$dir".q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_schmid/; $ref_files{$key} = "$dir".q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_massey/; $ref_files{$key} = "$dir".q|node19.html|; $noresave{$key} = "$nosave"; $key = q/EQNLCG/; $ref_files{$key} = "$dir".q|node9.html|; $noresave{$key} = "$nosave"; $key = q/primemodulus/; $ref_files{$key} = "$dir".q|node11.html|; $noresave{$key} = "$nosave"; 1; SHAR_EOF fi # end of overwriting check if test -f 'labels.pl' then echo shar: will not over-write existing file "'labels.pl'" else cat << "SHAR_EOF" > 'labels.pl' # LaTeX2HTML 96.1-h (September 30, 1996) # Associate labels original text with physical files. $key = q/methods/; $external_labels{$key} = "$URL/" . q|node8.html|; $noresave{$key} = "$nosave"; $key = q/srg/; $external_labels{$key} = "$URL/" . q|node12.html|; $noresave{$key} = "$nosave"; $key = q/moveparticle/; $external_labels{$key} = "$URL/" . q|node3.html|; $noresave{$key} = "$nosave"; $key = q/EQNDiscrep/; $external_labels{$key} = "$URL/" . q|node18.html|; $noresave{$key} = "$nosave"; $key = q/cite_LP/; $external_labels{$key} = "$URL/" . q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_dirac/; $external_labels{$key} = "$URL/" . q|node19.html|; $noresave{$key} = "$nosave"; $key = q/paralleltests/; $external_labels{$key} = "$URL/" . q|node17.html|; $noresave{$key} = "$nosave"; $key = q/cite_andersonjb/; $external_labels{$key} = "$URL/" . q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_MCPR2/; $external_labels{$key} = "$URL/" . q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_Hlwaka/; $external_labels{$key} = "$URL/" . q|node19.html|; $noresave{$key} = "$nosave"; $key = q/combinedgenerators/; $external_labels{$key} = "$URL/" . q|node15.html|; $noresave{$key} = "$nosave"; $key = q/cite_grassberger/; $external_labels{$key} = "$URL/" . q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_RPIMC/; $external_labels{$key} = "$URL/" . q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_N14/; $external_labels{$key} = "$URL/" . q|node19.html|; $noresave{$key} = "$nosave"; $key = q/poweroftwo/; $external_labels{$key} = "$URL/" . q|node10.html|; $noresave{$key} = "$nosave"; $key = q/cite_knuth/; $external_labels{$key} = "$URL/" . q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_numericalrecipes/; $external_labels{$key} = "$URL/" . q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_KW/; $external_labels{$key} = "$URL/" . q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_park/; $external_labels{$key} = "$URL/" . q|node19.html|; $noresave{$key} = "$nosave"; $key = q/EQNMLFIB/; $external_labels{$key} = "$URL/" . q|node13.html|; $noresave{$key} = "$nosave"; $key = q/cite_Ta/; $external_labels{$key} = "$URL/" . q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_MCPR1/; $external_labels{$key} = "$URL/" . q|node19.html|; $noresave{$key} = "$nosave"; $key = q/lcg/; $external_labels{$key} = "$URL/" . q|node9.html|; $noresave{$key} = "$nosave"; $key = q/cite_marsaglia/; $external_labels{$key} = "$URL/" . q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_Halton/; $external_labels{$key} = "$URL/" . q|node19.html|; $noresave{$key} = "$nosave"; $key = q/expsumcrosseq/; $external_labels{$key} = "$URL/" . q|node17.html|; $noresave{$key} = "$nosave"; $key = q/cite_marsaglia2/; $external_labels{$key} = "$URL/" . q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_EL/; $external_labels{$key} = "$URL/" . q|node19.html|; $noresave{$key} = "$nosave"; $key = q/EQNRoth/; $external_labels{$key} = "$URL/" . q|node18.html|; $noresave{$key} = "$nosave"; $key = q/EQNICG2/; $external_labels{$key} = "$URL/" . q|node14.html|; $noresave{$key} = "$nosave"; $key = q/lfg/; $external_labels{$key} = "$URL/" . q|node13.html|; $noresave{$key} = "$nosave"; $key = q/expsumeq/; $external_labels{$key} = "$URL/" . q|node17.html|; $noresave{$key} = "$nosave"; $key = q/cite_MC/; $external_labels{$key} = "$URL/" . q|node19.html|; $noresave{$key} = "$nosave"; $key = q/EQNSRG/; $external_labels{$key} = "$URL/" . q|node12.html|; $noresave{$key} = "$nosave"; $key = q/EQNPRNbound/; $external_labels{$key} = "$URL/" . q|node18.html|; $noresave{$key} = "$nosave"; $key = q/cite_CMPTEST/; $external_labels{$key} = "$URL/" . q|node19.html|; $noresave{$key} = "$nosave"; $key = q/states/; $external_labels{$key} = "$URL/" . q|node4.html|; $noresave{$key} = "$nosave"; $key = q/EQNICG1/; $external_labels{$key} = "$URL/" . q|node14.html|; $noresave{$key} = "$nosave"; $key = q/cite_Mascagni:SIAM/; $external_labels{$key} = "$URL/" . q|node19.html|; $noresave{$key} = "$nosave"; $key = q/EQNKH/; $external_labels{$key} = "$URL/" . q|node18.html|; $noresave{$key} = "$nosave"; $key = q/cite_Go/; $external_labels{$key} = "$URL/" . q|node19.html|; $noresave{$key} = "$nosave"; $key = q/Emetrolcgpar/; $external_labels{$key} = "$URL/" . q|node17.html|; $noresave{$key} = "$nosave"; $key = q/secproperties/; $external_labels{$key} = "$URL/" . q|node2.html|; $noresave{$key} = "$nosave"; $key = q/cite_marsaglia3/; $external_labels{$key} = "$URL/" . q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_diehard/; $external_labels{$key} = "$URL/" . q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_MT/; $external_labels{$key} = "$URL/" . q|node19.html|; $noresave{$key} = "$nosave"; $key = q/EQNLFIB/; $external_labels{$key} = "$URL/" . q|node13.html|; $noresave{$key} = "$nosave"; $key = q/cite_selke/; $external_labels{$key} = "$URL/" . q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_Faure/; $external_labels{$key} = "$URL/" . q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_Roth/; $external_labels{$key} = "$URL/" . q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_L'E/; $external_labels{$key} = "$URL/" . q|node19.html|; $noresave{$key} = "$nosave"; $key = q/randomwalk/; $external_labels{$key} = "$URL/" . q|node3.html|; $noresave{$key} = "$nosave"; $key = q/cite_coddington2/; $external_labels{$key} = "$URL/" . q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_Le/; $external_labels{$key} = "$URL/" . q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_lecuyer/; $external_labels{$key} = "$URL/" . q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_BFN/; $external_labels{$key} = "$URL/" . q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_coddington3/; $external_labels{$key} = "$URL/" . q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_N13/; $external_labels{$key} = "$URL/" . q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_brent/; $external_labels{$key} = "$URL/" . q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_N7/; $external_labels{$key} = "$URL/" . q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_ferrenberg/; $external_labels{$key} = "$URL/" . q|node19.html|; $noresave{$key} = "$nosave"; $key = q/spawn/; $external_labels{$key} = "$URL/" . q|node7.html|; $noresave{$key} = "$nosave"; $key = q/cite_Br2/; $external_labels{$key} = "$URL/" . q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_mascagni/; $external_labels{$key} = "$URL/" . q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_percuskalos/; $external_labels{$key} = "$URL/" . q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_schmid/; $external_labels{$key} = "$URL/" . q|node19.html|; $noresave{$key} = "$nosave"; $key = q/cite_massey/; $external_labels{$key} = "$URL/" . q|node19.html|; $noresave{$key} = "$nosave"; $key = q/EQNLCG/; $external_labels{$key} = "$URL/" . q|node9.html|; $noresave{$key} = "$nosave"; $key = q/primemodulus/; $external_labels{$key} = "$URL/" . q|node11.html|; $noresave{$key} = "$nosave"; 1; SHAR_EOF fi # end of overwriting check if test -f 'next_group_motif.gif' then echo shar: will not over-write existing file "'next_group_motif.gif'" else cat << "SHAR_EOF" > 'next_group_motif.gif' GIF89aQñ¿¿¿çççooo[!ù,QÔŒ©Ëí£œ´2a€Þ¼û†â8 X@¦êÊ~fÖÆò¬½(碽 ž¯Ó †Ã`ˆ'öZÊNqiô ¾f3u…r²ÆiuÛ# Áb§è›|RÁëríU­ãuÝRÛåìgÓ›TG·§Å–6gHg(x¨¦Ç%yg縨Õ8†øÉéY ºiy—ÙFy šH%JɪTºªµÉÇÉǪXéÇé×ǵú›JdU„è0Å|²Ü''m­º}½Ý¡Íýmc">N^n~Žž®¾þÂîþO^; SHAR_EOF fi # end of overwriting check if test -f 'next_motif.gif' then echo shar: will not over-write existing file "'next_motif.gif'" else cat << "SHAR_EOF" > 'next_motif.gif' GIF89a%ñ¿¿¿çççooo[!ù,%}Œ©Ëí¿„´Ú‹ó2èbÜ–ßè™êÖUö®bK ±+7€âûnÚõj:ËÍf#ú’”añùü)gŒy5Nq+÷Šdê¤]´˜ÍˆÏ^Ÿò’f›bj”ÛœÃXí¸L’£â$XBXrˆ¨¡¸8cÀ)9IYi`™©™Y; SHAR_EOF fi # end of overwriting check if test -f 'node1.html' then echo shar: will not over-write existing file "'node1.html'" else cat << "SHAR_EOF" > 'node1.html' Introduction next up previous
    Next: Desired Properties of Random Up: No Title Previous: No Title

    Introduction

    Random numbers arise in computer applications in several different contexts, such as : (i) In the Monte Carlo method to estimate a many-dimensional integral by sampling the integrand. Metropolis Monte Carlo or, more generally, Markov Chain Monte Carlo (MCMC), to which this volume is mainly devoted, is a sophisticated version of this where one uses properties of random walks to solve problems in high dimensional spaces, particularly those arising in statistical mechanics, (ii) In modeling random processes in nature such as those arising in ecology or economics. (iii) In cryptography, one uses randomness to hide information from others. (iv) Random numbers may also be used in games, for example during interaction with the user.

    It is only the first class of applications to which this article is devoted, because these computations require the highest quality of random numbers. The ability to do a multidimensional integral relies on properties of uniformity of n-tuples of random numbers and/or the equivalent property that random numbers be uncorrelated. The quality aspect in the other uses is normally less important simply because the models are usually not all that precisely specified. The largest uncertainties are typically due more to approximations arising in the formulation of the model than those caused by lack of randomness in the random number generator.

    In contrast, the first class of applications can require very precise solutions. Increasingly, computers are being used to solve very well-defined but hard mathematical problems. For example, as Dirac [1] observed in 1929, the physical laws necessary for the mathematical theory of a large part of physics and the whole of chemistry are completely known and it is only necessary to find precise methods for solving the equations for complex systems. In the intervening years fast computers and new computational methods have come into existence. In quantum chemistry, physical properties must be calculated to ``chemical accuracy'' (say 0.001 Rydbergs) to be relevant to physical properties. This often requires a relative accuracy of tex2html_wrap_inline1329 or better. Monte Carlo methods are used to solve the ``electronic structure problem'' often to high levels of accuracy [2] (see also articles by Reynolds, Nightingale, and Kalos in this volume). In these methods one can use from tex2html_wrap_inline1331 to tex2html_wrap_inline1333 random numbers, and subtle correlations between these numbers could lead to significant errors.

    Another example is from the numerical study of phase transitions. Renormalization theory has proven accurate for the basic scaling properties of simple transitions. The attention of the research community is now shifting to corrections to scaling, and to more complex models. Very long simulations (also of the MCMC type) are done to investigate this effect and it has been discovered that the random number generator can influence the results [3, 4, 5, 6]. As computers become more powerful, and Monte Carlo methods become more commonly used and more central to scientific progress, the quality of the random number sequence becomes more important.

    Given that the quality (which we shall define in a moment) of random numbers is becoming more and more important, the unfortunate fact is that important aspects of quality are very difficult to prove mathematically. The best one can do today is test empirically. But an empirical test is always finite. We will report here tests on random number streams that are of record length (up to about tex2html_wrap_inline1333 numbers). However, they will have to be redone in a few years with even longer sequences. Also, important algorithms use random numbers in a way that is hard to encapsulate in a test for which we know the answer, and so we must resort to general guidelines on safe ways to use random number generators in practice.

    This article constitutes a brief review of recent developments in random number generation. There are several excellent reviews of the older literature. In particular we recommend the reader seriously interested in random number generation read the lengthy introduction in Knuth [7] and the shorter introduction in the 2nd edition of Numerical Recipes [8]. More information can also be found in references [9, 10, 11].

    We shall focus here on developments caused by widespread use of parallel computers to perform Monte Carlo calculations. Our impression is that individual users are porting random number generators to parallel computers in an ad hoc fashion, possibly unaware of some of the issues which come to the fore when massive calculations are performed. Parallel algorithms can probe other qualities of random number generators such as inter-process correlation. There is a recent review which covers parallel random number generation in somewhat more depth by Coddington [12]. The interested reader can also refer to [13, 14, 15, 16, 17] for work related to parallel random number generation and testing.

    This article is structured as follows. First we discuss the desired properties that random number generators should have. Next we discuss several methods that have been used as generators in particular on parallel computers. Then we discuss testing procedures and show some results of our extensive tests. Quasi random numbers (QRN) have recently been introduced as a way to achieve faster convergence than true random numbers. We briefly discuss these and give some guidelines concerning those applications for which they are likely to be most effective.

    We have recently developed a library implementing several of the parallel random number generators and statistical tests of them on the most widely available multiprocessor computers. Documentation and software are available at:
    http://www.ncsa.uiuc.edu/Apps/CMP/RNG/RNG-home.html.


    next up previous
    Next: Desired Properties of Random Up: No Title Previous: No Title

    SHAR_EOF fi # end of overwriting check if test -f 'node10.html' then echo shar: will not over-write existing file "'node10.html'" else cat << "SHAR_EOF" > 'node10.html' Power of 2 Modulus next up previous
    Next: Prime Modulus Up: Linear Congruential Generators Previous: Linear Congruential Generators

    Power of 2 Modulus

      The parameterization chooses a set of additive constants tex2html_wrap_inline1481 that are pairwise relatively prime, i.e. tex2html_wrap_inline1483 when tex2html_wrap_inline1485 so that the sequences are generated in different orders. The best choice is to let tex2html_wrap_inline1487 be the jth prime less than tex2html_wrap_inline1491 [14]. One important advantage of this parameterization is that there is an inter-stream correlation measure based on the spectral test that suggests that there will be good inter-stream independence.



    SHAR_EOF fi # end of overwriting check if test -f 'node11.html' then echo shar: will not over-write existing file "'node11.html'" else cat << "SHAR_EOF" > 'node11.html' Prime Modulus next up previous
    Next: Shift-Register Generators Up: Linear Congruential Generators Previous: Power of 2 Modulus

    Prime Modulus

     

    When the modulus m is prime, (usually very close to a power of 2 such as a Mersenne prime, tex2html_wrap_inline1495 , so that the operation of taking the modulus will be faster) a method based on using the multiplier, a, as the parameter to generate many sequences has been proposed. We start with a reference value of a and choose the multiplier for the jth stream as tex2html_wrap_inline1503 where tex2html_wrap_inline1505 is the jth integer relatively prime to m-1. This is closely related to the leapfrog method method discussed earlier. Conditions on a and efficient algorithms for computing tex2html_wrap_inline1505 can be found in a recent work of one of the authors [16].

    The scheme given above can be justified based on exponential sums, which is explained in section gif. Two important open questions remain: (1) is it more efficient overall to choose m to be amenable to fast modular multiplication or fast calculation of the jth integer relatively prime to m-1, and (2) does the good inter-stream correlation also ensure good intra-stream independence via the spectral test?



    SHAR_EOF fi # end of overwriting check if test -f 'node12.html' then echo shar: will not over-write existing file "'node12.html'" else cat << "SHAR_EOF" > 'node12.html' Shift-Register Generators next up previous
    Next: Lagged-Fibonacci Generators Up: Methods for Random Number Previous: Prime Modulus

    Shift-Register Generators

     

    Shift Register Generators (SRGs) [21, 22] are of the form:
     equation1300
    where the tex2html_wrap_inline1521's and the tex2html_wrap_inline1523's are either 0 or 1. The maximal period of tex2html_wrap_inline1525 and can be achieved using as few as two non-zero values of tex2html_wrap_inline1523. This leads to a very fast random number generator.

    There are two ways to make pseudorandom integers out of the bits produced by Eq. (gif). The first, called the digital multi-step method, takes n successive bits from Eq. (gif) to form an integer of n-bits. Then n more bits are generated to create the next integer, and so on. The second method, called the generalized feedback shift-register, creates a new n-bit pseudorandom integer for every iteration of Eq. (gif). This is done by constructing the n-bit word from the last bit generated, tex2html_wrap_inline1539, and n-1 other bits from the k bits of SRG state. Thus a random number is generated for each new bit generated. While these two methods seem different, they are very related, and theoretical results for one always hold for the other. Serious correlations can result if k is small. Reader's interested in more general information on SRGs should consult the references: [23, 21, 22].

    The shift register sequences can be parameterized through the choice of tex2html_wrap_inline1523. One can systematically assign the values of tex2html_wrap_inline1523 to the processors to produce distinct maximal period shift register sequences [24]. This scheme can be justified based on exponential sum bounds, as in the case of the prime modulus LCG. This similarity is no accident, and is based on the fact that both generators are maximal period linear recursions over a finite field [25].



    SHAR_EOF fi # end of overwriting check if test -f 'node13.html' then echo shar: will not over-write existing file "'node13.html'" else cat << "SHAR_EOF" > 'node13.html' Lagged-Fibonacci Generators next up previous
    Next: Inversive Congruential Generators Up: Methods for Random Number Previous: Shift-Register Generators

    Lagged-Fibonacci Generators

     

    The Additive Lagged-Fibonacci Generator (ALFG) is:
     equation1302
    In recent years the ALFG has become a popular generator for serial as well as scalable parallel machines because it is easy to implement, it is cheap to compute and it does well on standard statistical tests [11], especially when the lag k is sufficiently high (such as k = 1279). The maximal period of the ALFG is tex2html_wrap_inline1555 [26, 27] and has tex2html_wrap_inline1557 different full-period cycles [28]. Another advantage of the ALFG is that one can implement these generators directly in floating-point to avoid the conversion from integer to floating-point that accompanies the use of other generators. However, some care should be taken in the implementation to avoid floating point round-off errors [15].

    In the previous sections we have discussed generators that can be parallelized by varying a parameter in the underlying recursion. Instead the ALFG can be parameterized through its initial values because of the tremendous number of different cycles. We produce different streams by assigning each stream a different cycle. An elegant seeding algorithm that accomplishes this is described in reference [28].

    An interesting cousin of the ALFG is the Multiplicative Lagged-Fibonacci Generator (MLFG). It is defined by:
     equation1304
    While this generator has a maximal-period of tex2html_wrap_inline1559, which is a quarter the length of the corresponding ALFG [27], it has empirical properties considered to be superior to ALFGs [11]. Of interest for parallel computing is that a parameterization analogous to that of the ALFG exists for the MLFG [29].



    SHAR_EOF fi # end of overwriting check if test -f 'node14.html' then echo shar: will not over-write existing file "'node14.html'" else cat << "SHAR_EOF" > 'node14.html' Inversive Congruential Generators next up previous
    Next: Combination Generator Up: Methods for Random Number Previous: Lagged-Fibonacci Generators

    Inversive Congruential Generators

    An important new type of PRNG that, as yet, has not found any widely distributed implementation is the Inversive Congruential Generator (ICG). This generator comes in two versions, the recursive ICG [30, 31]
     equation1306
    and the explicit ICG [32]
     equation1308
    In both the above equations tex2html_wrap_inline1561 denotes the multiplicative inverse modulo m in the sense that tex2html_wrap_inline1565 when tex2html_wrap_inline1567, and tex2html_wrap_inline1569.

    An advantage of ICGs over LCGs are that tuples made from ICGs do not fall in hyper-planes [33, 34]. Unfortunately the cost of doing modular inversion is considerable: it is tex2html_wrap_inline1571 times the cost of multiplication.



    SHAR_EOF fi # end of overwriting check if test -f 'node15.html' then echo shar: will not over-write existing file "'node15.html'" else cat << "SHAR_EOF" > 'node15.html' Combination Generator next up previous
    Next: Testing Random Number Generators Up: Methods for Random Number Previous: Inversive Congruential Generators

    Combination Generator

     

    Better quality sequences can often be obtained by combining the output of the basic generators to create a new random sequence as follows:
    equation1310
    where tex2html_wrap_inline1573 is typically either the exclusive-or operator or addition modulo some integer m, and x and y are sequences from two independent generators. It is best if the cycle length of the two generators is relatively prime, for this implies that the cycle length of z will be the product of that of the basic generators. One can show that the statistical properties of z are no worse than those of x or y [11]. In fact, one expects it would be much superior but little has yet been proven to date.

    Good combined generators have been developed by L'Ecuyer [35], based on the addition of Linear Congruential sequences.



    SHAR_EOF fi # end of overwriting check if test -f 'node16.html' then echo shar: will not over-write existing file "'node16.html'" else cat << "SHAR_EOF" > 'node16.html' Testing Random Number Generators next up previous
    Next: Parallel Tests Up: No Title Previous: Combination Generator

    Testing Random Number Generators

    We have so far discussed the desired features of random number generators and described some of the popular generators used in Monte Carlo applications. Now the question arises: How good are the random number generators? While most generators are quite good for a variety of applications, there have been a few applications in which popular generators have been found to be inadequate [3, 4, 5, 6].

    Sophisticated Monte Carlo applications often spend only a small fraction of their time in the actual random number generation. Most of the time is taken up by other operations. It is therefore preferable if we can test the random number generator fast, without actually using it in the application, to determine if it is good. For example in the runs test we divide the random number sequence into blocks that are monotonically increasing, and determine the distribution of the lengths of each block. This is a good test of randomness because it is fast and looks at correlations between longer and longer groups of random numbers. (Using a sequence of length tex2html_wrap_inline1333 we expect to see runs as long as 15.)

    However, a single statistical test is not adequate to verify the randomness of a sequence, because typical MCMC applications can be sensitive to various types of correlations. However, if the generator passes a wide variety of tests, then our confidence in its randomness increases. The tests suggested by Knuth [7] and those implemented in the DIEHARD package by Marsaglia [36] are a standard. Since there are many generators which pass these tests there is no reason to consider one that is known to fail. Of course, any generator will eventually fail most tests, so we always must state how many numbers were used in the test. level of accuracy).

    The second type of test is to run an application that uses random numbers in a similar manner to your applications, but for which the exact answer is known. For statistical mechanical applications, the two-dimensional Ising model (a simple lattice spin model) is often used since the exact answer is known and it has a phase transition so one expects sensitivity to long range correlations. There are several different MCMC algorithms that can be used to simulate the Ising model and the random numbers enter quite differently in each algorithm. Thus this application is very popular in testing random number generators and has often detected defects in generators. We can test parallel generators on the Ising model application by assigning distinct random number sequences to subsets of lattice sites [37].

    How good are the popular generators on the Ising model? Ferrenberg, et al [3] found that certain generators such as the particular shift register generator they used (R250) failed with the Wolff algorithm, while the simple and much maligned 32 bit LCG called CONG did well. Similar defects in popular generators have also been observed by others [4, 5, 6]. However, with the Metropolis algorithm, CONG performed much worse than R250. Thus it appears that it is the combination of problem and generator that must be considered in choosing a suitable generator. Thus statistical tests are not adequate; we must also test the generators in our actual application.

    Of course in almost all cases we do not know the exact answer. How then can we trust a given generator on our problem? The only general approach is to run our application with several different types of generators that are known to have good statistical properties. Hopefully at least two will agree within the error bars and they can be used on further similar runs with that algorithm. A word of caution: the test runs must be at least as long as the production runs because subtle correlations in the PRNG may not show up until long runs are made. This approach is quite computationally expensive and if done seriously would increase the cost of all MC simulations by a factor of two. (If you decide at the end that all generators are good, you can recover the time by averaging the results together.)




    next up previous
    Next: Parallel Tests Up: No Title Previous: Combination Generator

    SHAR_EOF fi # end of overwriting check if test -f 'node17.html' then echo shar: will not over-write existing file "'node17.html'" else cat << "SHAR_EOF" > 'node17.html' Parallel Tests next up previous
    Next: Quasi-random numbers Up: Testing Random Number Generators Previous: Testing Random Number Generators

    Parallel Tests

      We now mention some tests of parallel random number generators.

    Exponential sums: The exponential sum (Fourier transform of the density) of a sequence tex2html_wrap_inline1591 is:
     equation1080
    For a random sequence tex2html_wrap_inline1593 (for tex2html_wrap_inline1595). This fact can be used to test correlation within, and between, random number sequences [13, 16]. Consider two random sequences X and Y and define the exponential sum cross-correlation:
     equation1087
    In each term of this sum, we find the difference between an element of each sequence at a fixed offset apart. If this difference were uniformly distributed, then we should have: tex2html_wrap_inline1601

    Parallel spectral test: Percus and Kalos [14] have developed a version of the spectral test for parallel linear congruential generators.

    Interleaved tests: We create a new random sequence by interleaving several random sequences, and test this new sequence for randomness using standard sequential tests.

    Fourier transform test: Generate a two dimensional array of random numbers with each row in the array consisting of consecutive random numbers from one particular sequence. The two dimensional Fourier transform can be performed. For a truly uncorrelated set of sequences the coefficients (except the constant term) should be close to 0.

    Blocking test: In the blocking test we add random numbers from several streams as well as from within a stream. If the streams are independent, then the distribution of these sums will approach the normal distribution.

    We now give some test results for the LCG with (parameterized) prime addend and a modified version of the LFG. Both of these generators performed acceptably in the sequential tests with tex2html_wrap_inline1603 random numbers. Preliminary results from other tests of PPRNG can also be found in the paper by Coddington [37].

    We first tested the generators by interleaving about 1000 pairs of random sequences each containing about tex2html_wrap_inline1415 PRNs. Both the generators passed this tests. Next we simulated parallelism on the tex2html_wrap_inline1607 Ising model by using a different random sequence for each lattice site in the Metropolis algorithm. The LCG (with identical seeds) failed badly as can be seen from the dashed line in Fig. gif. We then generalized the statistical tests, interleaving 256 sequences at a time. The LCG again failed, demonstrating the effectiveness of these tests in detecting non-random behavior. The modified LFG passed these tests.

      figure1102
    Figure: Plot of the actual error versus the internally estimated standard deviation of the energy error for Ising model simulations with the Metropolis algorithm on a tex2html_wrap_inline1607 lattice with a different Linear Congruential sequence at each lattice site. The dashed line shows the results when all the Linear Congruential sequences were started with the same seeds but with different additive constants. The solid line shows the results when the sequences were started with different seeds. We expect around 95% of the points to be below the dotted line (which represents an error of two standard deviations) with a good generator.

    In the tests mentioned above, we had started each parameterized LCG with the same seed but used different additive constants. Even when we discarded the first million random numbers from each sequence, the sequences were still correlated. However, when we started the streams from different, systematically spaced seeds, the LCG passed all statistical tests (including parallel ones) with up to tex2html_wrap_inline1613 - tex2html_wrap_inline1333 numbers. We finally repeated the parallel Metropolis algorithm simulation with tex2html_wrap_inline1603 random numbers, and both generators performed acceptably, as can be seen from the solid line in Fig. gif.

    Apart from verifying the quality of two particular generators, our results illustrate that it is commonplace for generators to pass some test and fail others. It is important to test parallel generators the way they will be seeded, since correlations in the seeding can lead to correlations in the resulting sequences.


    next up previous
    Next: Quasi-random numbers Up: Testing Random Number Generators Previous: Testing Random Number Generators

    SHAR_EOF fi # end of overwriting check if test -f 'node18.html' then echo shar: will not over-write existing file "'node18.html'" else cat << "SHAR_EOF" > 'node18.html' Quasi-random numbers next up previous
    Next: References Up: No Title Previous: Parallel Tests

    Quasi-random numbers

    It is well known that the error estimate from any MC calculations (or in general from a simulation) converges as tex2html_wrap_inline1619 where N is the number of random samples or equivalently the computer time expended. Recently there has been much research into whether non-random sequences could result in faster convergence, but still have the advantages of MC in being applicable to high-dimensional problems.

    Consider the integral:
    equation1312
    The Monte Carlo estimate for this integral is:
    equation1314
    where the points tex2html_wrap_inline1623 are to be uniformly distributed in the s-dimensional unit cube. An important, and very general, result that bounds the absolute error of the Monte Carlo estimate is the Koksma-Hlwaka inequality [25]:
     equation1316
    where tex2html_wrap_inline1627 is the discrepancy of the points tex2html_wrap_inline1623 as defined by Eq. (gif), and V(f) is the total variation of f on tex2html_wrap_inline1635 in the sense of Hardy and Krause [38]. The total variation is roughly the average absolute value of the tex2html_wrap_inline1637 derivative of f(x).

    Note that Eq. (gif) gives a deterministic error bound for integration because V(f) depends only on the nature of the function. Similarly, the discrepancy of a point set is a purely geometric property of that point set. When given a numerical quadrature problem, we must cope with whatever function we are given, it is really only the points, tex2html_wrap_inline1623, that we control. Thus one approach to efficient integration is to seek point sets with small discrepancies. Such sets are necessarily not random but are instead referred to as quasi-random numbers (QRNs).

    The s dimensional discrepancy of the N points, tex2html_wrap_inline1623 is defined as:
     equation1318
    Here B is any rectangular subvolume inside the s-dimensional unit cube with sides parallel to the axes and volume tex2html_wrap_inline1655. The function tex2html_wrap_inline1657 counts the number of points of tex2html_wrap_inline1623 in B. Hence a set of points with a low discrepancy covers the unit cube more uniformly than one with a large discrepancy. A lattice has a very low discrepancy, however adding additional points to the lattice is slow in high dimensions. The discrepancy of a lattice does not decrease smoothly with increasing N.

    A remarkable fact is that there is a lower (Roth) bound to the its discrepancy [39]:
     equation1320
    This gives us a target to aim at for the construction of low-discrepancy point sets (quasi-random numbers). For comparison, the estimated error with random sequences is:
     equation1322
    The quantity in brackets, the variance, only depends on f. Hence the standard deviation of the Monte Carlo estimate is tex2html_wrap_inline1667. This is much worse than the bounds of Eq. (gif) as a function of the number of points. It is this fact that has motivated the search for quasi-random points.

    What goes wrong with this argument as far as most high-dimensional problems in physical science is that the Koksma-Hlwaka bound is extremely poor for large s. Typical integrands become more and more singular the more one differentiates. The worse case is the Metropolis rejection step: the acceptance is itself discontinuous. Even assuming V(f) were finite, it is likely to be so large (for large s) that truly astronomical values of N would be required for the bound in Eq. (gif) to be less than the MC convergence rate given in Eq. (gif).

    We will now present a very brief description of quasi-random sequences. Those interested in a much more detailed review of the subject are encouraged to consult the recent work of Niederreiter [25]. An example of a one-dimensional set of quasi-random numbers is the van der Corput sequence. First we choose a base, b, and write an integer n in base b as tex2html_wrap_inline1683. Then we define the van der Corput sequence as tex2html_wrap_inline1685. For base b=3, the first 12 terms of the van der Corput sequence are:
    equation1324
    One sees intuitively how this sequence, while not behaving in a random fashion, fills in all the holes in a regular and low-discrepancy way.

    There are many other low-discrepancy point sets and sequences. Some, like the Halton sequence [40] use the van der Corput sequence. There have been many others which are thought to be more general and have provably smaller discrepancy. Of particular note are the explicit constructions of Faure [41] and Niederreiter [42].

    The use of quasi-random numbers in quadrature has not been widespread because the claims of superiority of quasi-random over pseudo-random for quadrature have not been shown empirically especially for high dimensional integrals and never in MCMC simulations [43]. QRNs work best in low dimensional spaces where the spacing between the points can be made small with respect to the curvature of the integrand. QRNs work well for very smooth integrands. The Boltzmann distribution tex2html_wrap_inline1689 is highly peaked for R a many dimensional point. Empirical studies have shown that the number of integration points needed for QRN error to be less than the MC error increases very rapidly with the dimensionality. Until the asymptotic region is reached, the error of QRN is not very different from simple MC. Also there are many MC tricks which can be used to reduce the variance such as importance sampling, antithetic sampling and so forth. Finally MC has a very robust way of estimating errors; that is one of its main advantages as a method. Integrations with QRNs have to rely on empirical error estimates since the rigorous upper bound is exceedingly large. It may happen that the integrand in some way correlates with the QRN sequence so that these error estimates are completely wrong, just as sometimes happens with other deterministic integration methods.

    There seem to be some advantages of quasi-random over pseudo-random for simple smooth integrands that are effectively low dimensional (say less than 15 dimensions), but they are much smaller than one is lead to expect from the mathematical results.

    SHAR_EOF fi # end of overwriting check if test -f 'node19.html' then echo shar: will not over-write existing file "'node19.html'" else cat << "SHAR_EOF" > 'node19.html' References next up previous
    Next: About this document Up: No Title Previous: Quasi-random numbers

    References

    1
    P. A. M. Dirac. Proc. R. Soc. London Ser A, 123:734, 1929.

    2
    J. B. Anderson. In S. R. Langhoff, editor, Understanding Chemical Reactivity. Kluwer, Dordrecht, The Netherlans, 1995.

    3
    A. M. Ferrenberg, D. P. Landau, and Y. J. Wong. Monte Carlo simulations: Hidden errors from ``good'' random number generators. Phys. Rev. Let., 69:3382-3384, 1992.

    4
    P. Grassberger. On correlations in 'good' random number generators. Phys. Lett. A, 181(1):43-46, 1993.

    5
    W. Selke, A. L. Talapov, and L. N. Schur. Cluster-flipping Monte Carlo algorithm and correlations in ``good'' random number generators. JETP Lett., 58(8):665-668, 1993.

    6
    F. Schmid and N. B. Wilding. Errors in Monte Carlo simulations using shift register random number generators. Int. J. Mod. Phys. C, 6(6):781-787, 1995.

    7
    D. E. Knuth. The Art of Computer Programming, Vol. 2: Seminumerical Algorithms, Second edition. Addison-Wesley, Reading, Massachusetts, 1981.

    8
    W. H. Press, S. A. Teukolsky, W. T. Vetterling, and B. P. Flannery. Numerical Recipes in FORTRAN. Cambridge University Press, New York, NY, second edition, 1994.

    9
    S. K. Park and K. W. Miller. Random number generators: good ones are hard to find. Comm. of the ACM, 31:1192-1201, 1988.

    10
    P. L'Ecuyer. Random numbers for simulation. Comm. of the ACM, 33:85-97, 1990.

    11
    G. Marsaglia. A current view of random number generators. In Computing Science and Statistics: Proceedings of the XVIth Symposium on the Interface, pages 3-10, 1985.

    12
    P. Coddington. Random number generators for parallel computers, NHSE Review, 1996 Volume, Second Issue.

    13
    M. Mascagni, S. A. Cuccaro, D. V. Pryor, and M. L. Robinson. Recent developments in parallel pseudorandom number generation. In D. E. Keyes, M. R. Leuze, L. R. Petzold, and D. A. Reed, editors, Proceedings of the Sixth SIAM Conference on Parallel Processing for Scientific Computing, volume II, pages 524-529, Philadelphia, Pennsylvania, 1993. SIAM.

    14
    O. E. Percus and M. H. Kalos. Random number generators for MIMD parallel processors. J. of Par. Distr. Comput., 6:477-497, 1989.

    15
    R. P. Brent. Uniform random number generators for supercomputers. In Proceedings Fifth Australian Supercomputer Conference, pages 95-104. 5ASC Organizing Committee, 1992.

    16
    M. Mascagni. Parallel linear congruential generators with prime moduli. IMA Reprint 1470 and submitted, 1997.

    17
    M. Mascagni S. A. Cuccaro and D. V. Pryor. Techniques for testing the quality of parallel pseudorandom number generators. In Proceedings of the Seventh SIAM Conference on Parallel Processing for Scientific Computing, pages 279-284, Philadelphia, Pennsylvania, 1995. SIAM.

    18
    M. Kalos and P. Whitlock. Monte Carlo Methods. Wiley-Interscience, New York, 1986. Volume I: Basics.

    19
    D. M. Ceperley. Path integrals in the theory of condensed helium. Reviews of Modern Physics, 67(2):279-355, 1995.

    20
    D. H. Lehmer. Mathematical methods in large-scale computing units. In Proceedings of the 2nd Symposium on Large-Scale Digital Calculating Machinery, pages 141-146, Cambridge, Massachusetts, 1949. Harvard University Press.

    21
    T. G. Lewis and W. H. Payne. Generalized feedback shift register pseudorandom number algorithms. J. of the ACM, 20:456-468, 1973.

    22
    R. C. Tausworthe. Random numbers generated by linear recurrence modulo two. Math. Comput., 19:201-209, 1965.

    23
    S. W. Golomb. Shift Register Sequences. Aegean Park Press, Laguna Hills, California, 1982. Revised Edition.

    24
    J. L. Massey. Shift-register synthesis and bch decoding. IEEE Trans. Information Theory, 15:122-127, 1969.

    25
    H. Niederreiter. Random number generation and quasi-Monte Carlo methods. SIAM, Philadelphia, Pennsylvania, 1992.

    26
    R. P. Brent. On the periods of generalized Fibonacci recurrences. Math. Comput., 63:389-401, 1994.

    27
    G. Marsaglia and L.-H. Tsay. Matrices and the structure of random number sequences. Linear Alg. and Applic., 67:147-156, 1985.

    28
    M. Mascagni, S. A. Cuccaro, D. V. Pryor, and M. L. Robinson. A fast, high-quality, and reproducible lagged-Fibonacci pseudorandom number generator. J. Comput. Physics, 15:211-219, 1995.

    29
    M. Mascagni. A parallel non-linear Fibonacci pseudorandom number generator, 1997. Abstract, 45th SIAM Annual Meeting.

    30
    J. Eichenauer and J. Lehn. A nonlinear congruential pseudorandom number generator. Statist. Hefte, 37:315-326, 1986.

    31
    H. Niederreiter. Statistical independence of nonlinear congruential pseudorandom numbers. Montash. Math., 106:149-159, 1988.

    32
    H. Niederreiter. On a new class of pseudorandom numbers for simulation methods. J. Comput. Appl. Math., 56:159-167, 1994.

    33
    G. Marsaglia. Random numbers fall mainly in the planes. Proc. Nat. Acad. Sci. U.S.A., 62:25-28, 1968.

    34
    G. Marsaglia. The structure of linear congruential sequences. In S. K. Zaremba, editor, Applications of Number Theory to Numerical Analysis, pages 249-285. Academic Press, New York, 1972.

    35
    P. L'Ecuyer. Efficient and portable combined random number generators. Comm. of the ACM, 31:742-774, 1988.

    36
    G. Marsaglia. Diehard. ftp://stat.fsu.edu/pub/diehard.

    37
    P. Coddington. Tests of random number generators using Ising model simulations. Int. J. of Mod. Phys. ``C'', 7(3):295-303, 1996.

    38
    E. Hlwaka. Funktionen von beschränkter variation in der theorie der gleichverteiling. Ann. Mat. Pura Appl., 54:325-333, 1961.

    39
    K. F. Roth. On irregularities of distribution. Mathematika, 1:73-79, 1954.

    40
    J. H. Halton. On the efficiency of certain quasi-random sequences of points in evaluating multi-dimensional integrals. Numer. Math., 2:84-90, 1960.

    41
    H. Faure. Using permutations to reduce discrepancy. J. Comp. Appl. Math., 31:97-103, 1990.

    42
    B. L. Fox P. Bratley and H. Niederreiter. Implementation and tests of low-discrepancy point sets. ACM Trans. on Modeling and Comp. Simul., 2:195-213, 1992.

    43
    W. J. Morokoff and R. E. Caflisch. Quasi-Monte Carlo integration. J. Comp. Phys., 122:218-230, 1995.


    SHAR_EOF fi # end of overwriting check if test -f 'node2.html' then echo shar: will not over-write existing file "'node2.html'" else cat << "SHAR_EOF" > 'node2.html' Desired Properties of Random Number Generators next up previous
    Next: A. Randomness: Up: No Title Previous: Introduction

    Desired Properties of Random Number Generators

     

    In this section we discuss some of the desired properties of good random number generators. We shall then explain specific implications of these for parallel random number generation.

    First of all let us define a random number sequence, tex2html_wrap_inline1337 where i is an integer. In this article we will be concerned exclusively with uniformly distributed numbers. Other distributions can be generated by standard techniques [18]. Uniform numbers can be either reals, by convention in (0,1) such as those returned by the FORTRAN ranf and C drand48 functions, or integer, by convention in tex2html_wrap_inline1341 for some n close to the word size on the computer. We shall denote the reals by tex2html_wrap_inline1345 and the integers by tex2html_wrap_inline1347. Clearly, for many purposes integer and real generators on a computer are virtually equivalent if n is large enough and if we define tex2html_wrap_inline1351.



    SHAR_EOF fi # end of overwriting check if test -f 'node20.html' then echo shar: will not over-write existing file "'node20.html'" else cat << "SHAR_EOF" > 'node20.html' About this document ... next up previous
    Up: No Title Previous: References

    About this document ...

    This document was generated using the LaTeX2HTML translator Version 96.1-h (September 30, 1996) Copyright © 1993, 1994, 1995, 1996, Nikos Drakos, Computer Based Learning Unit, University of Leeds.

    The command line arguments were:
    latex2html paper.tex.

    The translation was initiated by Paul Melby on Mon Aug 11 17:43:05 EDT 1997


    SHAR_EOF fi # end of overwriting check if test -f 'node3.html' then echo shar: will not over-write existing file "'node3.html'" else cat << "SHAR_EOF" > 'node3.html' A. Randomness: next up previous
    Next: B. Reproducibility: Up: Desired Properties of Random Previous: Desired Properties of Random

    A. Randomness:

    Let us consider the following experiment to verify the randomness of an infinite sequence of integers in [1,d]. Suppose we let you view as many numbers from the sequence as you wished to. You should then guess any other number in the sequence. If the likelihood of your guess being correct is greater than 1/d, then the sequence is not random. In practice, to estimate the winning probabilities we must play this guessing game several times.

    This test has certain implications, the most important of which is the uniformity of the individual elements. If the sequence consists of integers in [1,d], then the probability of getting any particular integer should be 1/d. All good sequences are constructed to have this property. But applications in statistical mechanics as well as other real applications rely heavily on uniformity in higher dimensions, at least 4 dimensions if not thousands.

    We define uniformity in higher dimensions as follows. Suppose we define n-tuples tex2html_wrap_inline1361 and divide the n-dimensional unit hypercube into many equal sub-volumes. A sequence is uniform if in the limit of an infinite sequence all the sub-volumes have an equal number of occurrences of random n-tuples. For a random sequence this will be true for all values of n and all partitions into subvolumes, though in practice we only test for small values of n.

    The following simple Metropolis Monte Carlo example demonstrates how correlations between successive pairs of random numbers can give incorrect results. Suppose we sample the movement of a particle along the x axis confined in a potential well which is symmetric about the origin: V(x)=V(-x). The classic Metropolis algorithm is outlined in Fig. gif. At each step in our calculations, the particle is moved to a trial position with the first random number (sprng() ) and then that step is accepted or rejected with the second random number.

    Fig. gif shows the results of the particle density computed exactly (for a harmonic well) with a good random number sequence, and also with sequences which are deliberately chosen to be correlated or anti-correlated. In the latter case a high number is likely to be followed by a low number and a low number by a high number. The particle density is then not symmetric because movements to the right are more likely to be rejected than movements to the left, so that the final distribution is skewed. This occurs despite uniformity of the individual elements of the sequence.

      figure912
    Figure: Algorithm for simulating movement of the particle.

      figure935
    Figure: Distribution of particle positions in one-dimensional random walk simulations. The solid line shows the results with an uncorrelated sequence, the bold dashed line for sequences with correlation coefficient = -0.2, and the dashed-dotted line for sequences with correlation coefficient = 0.2.

    Now let us imagine how this changes for N particles in three dimensions. The usual Metropolis MC algorithm for a simple classical fluid will use random numbers four at a time (three for the displacement and one for the acceptance test) so that the algorithm is potentially sensitive to correlations between successive quadruples of numbers. But it can also be sensitive to correlations of tex2html_wrap_inline1383 with tex2html_wrap_inline1385 since one usually goes through the particles in order, causing tex2html_wrap_inline1387 to be used for the same purpose on the same particle. Unfortunately, the usual linear congruential generator has correlations between numbers separated by distances that are powers of 2; so it is not a good idea to simulate systems where N is a power of 2 with this generator. In general each Monte Carlo algorithm is sensitive to particular types of correlations, making it hard to define a universal test.


    next up previous
    Next: B. Reproducibility: Up: Desired Properties of Random Previous: Desired Properties of Random

    SHAR_EOF fi # end of overwriting check if test -f 'node4.html' then echo shar: will not over-write existing file "'node4.html'" else cat << "SHAR_EOF" > 'node4.html' B. Reproducibility: next up previous
    Next: C. Speed: Up: Desired Properties of Random Previous: A. Randomness:

    B. Reproducibility:

    In the early days of computers, it was suggested that one could make a special circuit element which would deliver truly random numbers. Computer vendors have not supplied such an element because it is not trivial to design a device to deliver high quality numbers at a sufficient rate. Even more importantly, debugging codes would becomes much more difficult if each time the code was run a completely irreproducible sequence were to be generated. In Monte Carlo simulations, bugs may be manifest only at certain times, depending on the sequence of random numbers obtained. In order to detect the errors, it is necessary to repeat the calculations to find out how the errors occurred. The feature of reproducibility is also helpful while porting the program to a different machine. If we have a sample run from one machine available, then we can try an identical run on a different machine and verify that it ported correctly. Such reproducible random number generators are said to be pseudo random (PRNG), and we shall call the numbers produced by such generators as PRNs.

    There is a conflict between the requirements of reproducibility and randomness. On a finite memory computer, at any step k in the sequence the PRNG has an internal state specifiable conceptually by an integer tex2html_wrap_inline1395, where the size of this integer is not necessarily related to the word length of the computer. For each state S in the sequence, there is a mapping that gives a random number the user sees, tex2html_wrap_inline1399. We also have an iteration process to determine the next state of the sequence from the current state, tex2html_wrap_inline1401. All PRNGs can be classified by the internal state space, the mapping, and the iteration. The sequence is defined once we have specified the initial starting state tex2html_wrap_inline1403 known as the seed. Fig. gif illustrates the procedure for obtaining pseudo-random sequences described above.

      figure953
    Figure: A pseudo-random sequence is defined by the internal state space, the mapping, the iteration, and the initial state.

    Now let us return to the possible conflict between the properties of reproducibility and randomness: if it is reproducible then it cannot be perfectly random since knowing the sequence will make betting on the next number easy. How do we resolve the incompatibility between the two properties? In common sense terms, we mean a good PRNG is one whose numbers are uncorrelated as long as you do not explicitly try to back out the mapping and iteration processes and use that to predict another member of the sequence. PRNG's have not been designed to be good cryptographic sequences.


    next up previous
    Next: C. Speed: Up: Desired Properties of Random Previous: A. Randomness:

    SHAR_EOF fi # end of overwriting check if test -f 'node5.html' then echo shar: will not over-write existing file "'node5.html'" else cat << "SHAR_EOF" > 'node5.html' C. Speed: next up previous
    Next: D. Large cycle length: Up: Desired Properties of Random Previous: B. Reproducibility:

    C. Speed:

    It is of course desirable to generate the random numbers fast. While for some applications the generation of the random numbers is the limiting factor, many generators take only a few clock cycles to deliver a new number so that usually the generation of random numbers is only a small fraction of the time required for the calculation. Hence speed is not a major concern unless, either the generator is extremely slow, or the remainder of the algorithm is extremely fast such as with a lattice spin model.



    SHAR_EOF fi # end of overwriting check if test -f 'node6.html' then echo shar: will not over-write existing file "'node6.html'" else cat << "SHAR_EOF" > 'node6.html' D. Large cycle length: next up previous
    Next: Parallelization: Up: Desired Properties of Random Previous: C. Speed:

    D. Large cycle length:

    A pseudo random number generator is a finite state machine with at most tex2html_wrap_inline1405 different states where p is the number of bits that represent the state. One can easily see that the sequence must repeat after at most tex2html_wrap_inline1405 different numbers have been generated. The smallest number of steps after which the generator starts repeating itself is called the period or cycle length, L. Assuming all cycles have the same length, the number of disjoint cycles (i.e. having no states in common) is then: tex2html_wrap_inline1413.

    A computer in 1997 might deliver tex2html_wrap_inline1415 numbers/processor/ second (or tex2html_wrap_inline1417). Hence it will take 1 second to exhaust a generator with a 26 bit internal state and 1 year to exhaust one with tex2html_wrap_inline1419 internal states. This suggests that it could be dangerous to use the 32 bit generators developed for the microprocessors of the 1980's on today's computers. After the sequence is exhausted, the ``true'' error of a simple MC evaluation integral will no longer decrease and one can be mislead into trusting an incorrect answer.

    However, for many applications a small period will not in itself bias the results significantly. For example in MCMC we can think of the ``state'' of the random walk as consisting both of the coordinates of the particles (say 3N position variables) and of the internal state of the PRNG. The walk will repeat itself only if all the coordinates are exactly the same. Hence even if the random number sequence repeats, the particles will have moved on and have a different internal state. However, it is not a good idea to have repeating sequences, especially since it is easy to avoid.



    SHAR_EOF fi # end of overwriting check if test -f 'node7.html' then echo shar: will not over-write existing file "'node7.html'" else cat << "SHAR_EOF" > 'node7.html' Parallelizatio: next up previous
    Next: Methods for Random Number Up: Desired Properties of Random Previous: D. Large cycle length:

    Parallelization

    We next mention the implications of correlation and cycle length on parallel random number generators (PPRNG).

    In order to get higher speed, Monte Carlo applications make extensive use of parallel computers, since these calculations are particularly well suited to such architectures and often require very long runs. A common way to parallelize Monte Carlo is to put identical ``clones '' on the various processors; only the random number sequences are different. It is therefore important for the sequences on the different processors to be uncorrelated. That is, given an initial segment of the sequence on one process, and the random number sequences on other processes, we should not be able to predict the next element of the sequence on the first process. For example, it should not happen that if we obtain random numbers of large magnitude on one process, then we are more likely to obtain large numbers on another.

    Consider the following extreme case to demonstrate the impact of correlations. Suppose we perform identical calculations on each process, expecting different results due to the presence of a different random number sequence. If, however, we use the same sequence on each process, then we will get an identical result on each process and the the power of the parallel computer is wasted. Even worse we may incorrectly believe that the errors are much reduced because all processes give identical results. Such cases routinely occur when users first port their MC codes to parallel computers without considering how the random number sequence is to be parallelized.

    Even if the correlations across processes are not perfect, any correlation can affect the random walk. It is generally true that inter-processor correlation is less important that intra-processor correlation, but that can depend on the application. The danger is that a particular parallel application will be sensitive to a particular correlation. New statistical tests have to be invented for correlation between processors.

    The desire for reproducibility, when combined with speed, is also an important factor, and limits the feasible parallelization schemes. We shall next describe some common schemes for creating PPRNGs along with their merits.

    1. Central Server

      One can maintain one particular process that serves as a centralized random number generator for all the processes. Any process that requires a random number obtains it from that process by sending messages. Such a scheme reduces the speed greatly since inter-processor communication is very expensive and the process needing the PRN must have exclusive access to the server to ensure that there are no conflicts. It also hinders reproducibility because the different processes may request random numbers in different orders in different runs of the program, depending on the network traffic and implementation of the communication software.

    2. Cycle Division

      In one popular scheme the same iteration process is used on the different processes, but with widely separated seeds on each process. There are two related schemes: (i) the leap frog method where processor i gets tex2html_wrap_inline1425, where M is the total number of processes. For example, process 1 gets the first member of the sequence, process 2 the second and so forth. (ii) In the cycle splitting method for M processors, process i+1 gets tex2html_wrap_inline1431, where l is the cycle length. That is, the first process will get the first L/M numbers, the second process the second L/M numbers, and so forth.

      Both methods require a fast way of advancing the PRNG a few steps; faster than iterating the sequence that number of steps. In the first method we need to be able to advance by M steps at each iteration. In the second method we need to be able to advance by L/M steps during initialization.

      Statistical tests performed on the original sequence are not necessarily adequate for the divided sequence. For example, in the leap frog method correlations M numbers apart in the original sequence become adjacent correlations of the split sequence.

      Clearly either method reduces the period of the original sequence by the number of processes. For example, with 512 nodes running at 100 MFlops one will exhaust the sequence of a PRNG with a 46 bit internal state (the common real*8 or long rng) in only 23 minutes! If the number of random numbers consumed is greater than expected, then the sequences on different processes could overlap.

    3. Cycle Parameterization

      Another scheme makes use of the fact that some PRNGs have more than one cycle. If we choose the seeds carefully, then we can ensure that each random sequence starts out in a different cycle, and so two sequences will not overlap. Thus the seeds are parameterized (that is, sequence i gets a seed from cycle i, the sequence number being the parameter that determines its cycle). This is the case for the Lagged Fibonacci Generator described in the next section.

    4. Parameterized Iteration

      Just as the disjoint cycles can be parameterized, so can many of the iteration functions for the internal state as with the Generalized Feedback Shift Register described in the next section. Here, sequence i gets iteration function tex2html_wrap_inline1451.

    It is difficult to ensure reproducibility if the number of processors changes between one run and the next. This problem cannot be solved by the PPRNG in itself. In order to write a parallel MC application which gives identical results with a variable number of processors, it is necessary to write in terms of "virtual processors", each virtual processor having its own PRNG. Each physical processor would handle several virtual processors. It is unlikely that many programmers would go to this much trouble just to ensure that their code has this degree of portability unless it can be done automatically.

    There are other consequences of the desire for reproducibility and speed. As an example, consider the simulation of a branching process. Suppose ``neutron'' paths are generated based on the outcome of various interactions between the neutrons and a medium. During a neutron flight, the neutron may collide with an atom and produce new neutrons (fission) or be absorbed (fusion). Efficient utilization of the processors requires good load balancing, and so one can move the computation of the statistics for new neutrons to different processors in order to keep the work evenly balanced. To ensure reproducibility in different runs, each neutron must be given a different random number sequence in a deterministic fashion. Thus, in a repetition of a run, even if the neutron is migrated to a different processor, the same random number sequence will be produced in determining its path. We also need to ensure that the random number sequence produced for each neutron is unique without incurring inter-processor communication. This can be accomplished by developing the ability to ``spawn'' unique sequences from an existing one.

    We take the model that when a new process forks, a new sequence is generated for that process. Each sequence can be identified by a parameter if we parallelize the generators by any of the methods of parameterization described earlier. We ensure uniqueness of the new sequence by assigning each process a set tex2html_wrap_inline1453 of parameters available for spawning. When a process forks, it partitions the elements of tex2html_wrap_inline1453 among itself and its children, to create new sets of parameters available for spawning as shown in Fig. gif. Since the sets available for spawning on each process are disjoint, different sequences are obtained on each process. There is, however, the risk that eventually all the parameters could be used up; so we should not spawn too often. In the next section we will discuss some generators with very large numbers of possible parameters, so that quite a lot of spawning could be done before we would be in danger of repeating parameters.

      figure983
    Figure: Process A spawns processes B and C. Each new process gets a new random number sequence parameterized by p and a set of parameters tex2html_wrap_inline1453 for spawning.

    On today's parallel computers communication is very slow compared to floating point performance. It is sometimes possible to use multiple random number sequences to reduce the communication costs in a Monte Carlo simulation. An example occurs in our parallel path integral calculations [19]. The total configuration space of the imaginary time path is divided into subspaces based on the ``imaginary time'' coordinate so that a given processor has control over a segment of imaginary time. Most moves are made on variables local to each processor but occasionally there are global moves to be made which move all values of imaginary time, where each processor has to evaluate the effect of the move on its variables. For these moves the number of messages can be cut in half by having available two different sequences of random numbers on each processor: (i) a local sequence which is different on each processor (and uncorrelated) and (ii) a global sequence shared by all processors. The global sequence permits all the processors to ``predict'' without communication what the global move will be, evaluate its consequence on their variables, and then ``vote'' whether that global move is acceptable. Thus half of the communication and synchronization cost is avoided compared to the scheme whereby a master processor would generate the global move, send it out to all the workers and tally up the results from the various processors.


    next up previous
    Next: Methods for Random Number Up: Desired Properties of Random Previous: D. Large cycle length:

    SHAR_EOF fi # end of overwriting check if test -f 'node8.html' then echo shar: will not over-write existing file "'node8.html'" else cat << "SHAR_EOF" > 'node8.html' Methods for Random Number Generation next up previous
    Next: Linear Congruential Generators Up: No Title Previous: Parallelization:

    Methods for Random Number Generation

     

    We describe in this section some popular basic generators and their parallelization. We also mention about ``combined generators'', which are obtained from the basic ones.





    SHAR_EOF fi # end of overwriting check if test -f 'node9.html' then echo shar: will not over-write existing file "'node9.html'" else cat << "SHAR_EOF" > 'node9.html' Linear Congruential Generators next up previous
    Next: Power of 2 Modulus Up: Methods for Random Number Previous: Methods for Random Number

    Linear Congruential Generators

     

    The most commonly used generator for pseudorandom numbers is the Linear Congruential Generator (LCG) [20]:
     equation1298
    where m is the modulus, a the multiplier, and c the additive constant or addend. The size of the modulus constrains the period, and it is usually chosen to be either prime or a power of 2.

    This generator (with m a power of 2 and c=0) is the de facto standard included with FORTRAN and C compilers. One of the biggest disadvantages to using a power of 2 modulus is that the least significant bits of the integers produced by these LCGs have extremely short periods. For example, tex2html_wrap_inline1477 will have period tex2html_wrap_inline1479 [7]. In particular, this means the the least-significant bit of the LCG will alternate between 0 and 1. Since PRNs are generated with this algorithm, some cautions to the reader are in order: (i) The PRN should not be split apart to make several random numbers since the higher order bits are much more random than the lower order bits. (ii) One should avoid using the power of 2 modulus in batches of powers of 2. (For example if one has 1024 particles in 3 dimensions, one is using the PRNs 4096 at a time and the correlations between a PRN and one 4096 later may be large.) (iii) Generators with large modulus are preferable to ones with small modulus. Not only is the period longer, but the correlations are much less. In particular one should not use 32 bit modulus for careful work. In spite of this known defect of power of 2 LCGs, 48 bit multipliers (and higher) have passed many very stringent randomness tests.

    Generally LCGs are best parallelized by parameterizing the iteration process, either through the multiplier or the additive constant. Based on the modulus, different parameterizations have been tried.




    next up previous
    Next: Power of 2 Modulus Up: Methods for Random Number Previous: Methods for Random Number

    SHAR_EOF fi # end of overwriting check if test -f 'paper.css' then echo shar: will not over-write existing file "'paper.css'" else cat << "SHAR_EOF" > 'paper.css' SMALL.TINY { font-size : xx-small } SMALL.SCRIPTSIZE { font-size : xx-small } SMALL.FOOTNOTESIZE { font-size : x-small } SMALL.SMALL { font-size : small } BIG.LARGE { font-size : large } BIG.XLARGE { font-size : x-large } BIG.XXLARGE { font-size : xx-large } BIG.HUGE { font-size : xx-large } BIG.XHUGE { font-size : xx-large } SHAR_EOF fi # end of overwriting check if test -f 'paper.html' then echo shar: will not over-write existing file "'paper.html'" else cat << "SHAR_EOF" > 'paper.html' No Title next up previous
    Next: Introduction

    Contents

    1. Introduction

    2. Desired Properties of Random Number Generators

    3. Parallelization

    4. Methods for Random Number Generation

    5. Testing Random Number Generators

    6. Parallel Tests

    7. Quasi-random numbers

    8. References

    SHAR_EOF fi # end of overwriting check if test -f 'previous_group_motif.gif' then echo shar: will not over-write existing file "'previous_group_motif.gif'" else cat << "SHAR_EOF" > 'previous_group_motif.gif' GIF89akñ¿¿¿çççooo[!ù,kþŒ©Ëí£œ´Ú‹0 û†âH–扞¤î Çò·róçoÝêþäyÄbnü‰É°ƒF›8æêy¦Pl5ÄMjÃQätÙUn¥Öõuk—Ìì³zeûÛøÖÅæ6Òææ—fÅ5¶¤h˜ø—¶¨VBGx·9µ'’‰fXF)y•'§ÚY9)ªjjéÚjš*[ëi»«Ç"ˆy'H‰[Ì|šûék|üËZJÉÄʇ*+MÚg Œ‰¨ •jÔ·| 'previous_motif.gif' GIF89a?ñ¿¿¿çççooo[!ù,?­Œ©Ëí£œI€³Þ¼ûj‚„æ‰~㕶.¸–ïLq6äz ¼HÂir¿"æÖÛøŒ?$`)|J{»©ªÃ©ÄŒú\v­S­UM‚¡ß¬95£ã[0EÞâÜðrß5æô§WxE—øWeC˜—ö¨¦xÈæhyf¨ÉFf‰‡Y)ø¹'¸#Æ؈ÇÔ:ÈêÚê+ëHË4{[3Òëû , 'rng.css' SMALL.TINY { font-size : xx-small } SMALL.SCRIPTSIZE { font-size : xx-small } SMALL.FOOTNOTESIZE { font-size : x-small } SMALL.SMALL { font-size : small } BIG.LARGE { font-size : large } BIG.XLARGE { font-size : x-large } BIG.XXLARGE { font-size : xx-large } BIG.HUGE { font-size : xx-large } BIG.XHUGE { font-size : xx-large } SHAR_EOF fi # end of overwriting check if test -f 'up_motif.gif' then echo shar: will not over-write existing file "'up_motif.gif'" else cat << "SHAR_EOF" > 'up_motif.gif' GIF89añ¿¿¿çççooo[!ù,bŒ©Ë­b€œ´Z `¸üæØ…Ò·‰!9 –zjé*¢KÑœ Øó>ô®ËÍX6 Lø¹vbmbl2§Ñ'’ºœ^}WLvÈå…½ QPYÉ%óík²àârMæŽÏëñ½ÿ/P; SHAR_EOF fi # end of overwriting check cd .. if test -f 'parameters.html' then echo shar: will not over-write existing file "'parameters.html'" else cat << "SHAR_EOF" > 'parameters.html' SPRNG: Scalable Parallel Pseudo-Random Number Generator Library

    User's Guide:Details: Generators:Parameters


    Generator Parameters

    Each generator may contain several variants, which can be selected by setting the generator parameter during initialization. For example, the multiplier is a parameter for the 48 bit linear congruential generator. Choosing different multipliers will give diferent sets of streams. The value SPRNG_DEFAULT is always an acceptable parameter. Tests to verify the quality of each generator are based on the default parameter.

    1. Combined Multiple Recursive Generator

    The acceptable parameter values are identical to those for the 64 Bit Linear Congruential Generator.

    2. 48 Bit Linear Congruential Generator with Prime Addend

    We give below the different choices of parameters available to the user while initializing streams with the 48 bit Linear Congruential Generator with prime addend.

    SPRNG_DEFAULT

    Multiplier a = 2875a2e7b175 in base 16. This is the same as using the parameter CRAYLCG.

    CRAYLCG

    Multiplier a = 2875a2e7b175 in base 16. This multiplier is identical to that used by the FORTRAN INTRINSIC getranf available on CRAY machines.

    DRAND48

    Multiplier a = 5deece66d in base 16. This multiplier is available as the default on the drand48 random number generator available on several UNIX systems. Please note that the multiplier is incorrectly documented as 5deece66d16 on some machines.

    FISH1

    Multiplier a = 3eac44605265 in base 16. This multiplier was analysed by Fishman.

    FISH2

    Multiplier a = 1ee1429cc9f5 in base 16. This multiplier was analysed by Fishman.

    FISH3

    Multiplier a = 275b38eb4bbd in base 16. This multiplier was analysed by Fishman.

    FISH4

    Multiplier a = 739a9cb08605 in base 16. This multiplier was analysed by Fishman.

    FISH5

    Multiplier a = 3228d7cc25f5 in base 16. This multiplier was analysed by Fishman.

    3. 64 Bit Linear Congruential Generator with Prime Addend

    We give below the different choices of parameters available to the user while initializing streams with the 64 bit Linear Congruential Generator with prime addend.

    SPRNG_DEFAULT

    Multiplier a = 27bb2ee687b0b0fd in base 16. This is the same as using the parameter LECU1.

    LECU1

    Multiplier a = 27bb2ee687b0b0fd in base 16, = 2862933555777941757, suggested by L'cuyer in his table of multipliers.

    LECU2

    Multiplier a = 2c6fe96ee78b6955 in base 16, = 3202034522624059733, suggested by L'cuyer in his table of multipliers.

    LECU3

    Multiplier a = 369dea0f31a53f85 in base 16, = 3935559000370003845, suggested by L'cuyer in his table of multipliers.

    4. Modified Lagged Fibonacci Generator

    We give below the different choices of parameters available to the user while initializing streams with the modified Lagged Fibonacci Generator.

    SPRNG_DEFAULT

    Lags l = 1279, k = 861. This is the same as using the parameter LAG1279.

    LAG1279

    Lags l = 1279, k = 861.
    LAG17

    Lags l = 17, k = 5.

    LAG31

    Lags l = 31, k = 6.

    LAG55

    Lags l = 55, k = 24.

    LAG63

    Lags l = 63, k = 31.

    LAG127

    Lags l = 127, k = 97.

    LAG521

    Lags l = 521, k = 353.

    LAG521B

    Lags l = 521, k = 168.

    LAG607

    Lags l = 607, k = 334.

    LAG607B

    Lags l = 607, k = 273.

    LAG1279B

    Lags l = 1279, k = 418.

    5. Multiplicative Lagged Fibonacci Generator

    The lags are identical to that of the Modified Lagged Fibonacci Generator, except the following:

    SPRNG_DEFAULT

    Lags l = 17, k = 5. This is the same as using the parameter LAG17.

    6. Prime Modulus Linear Congruential Generator

    The only acceptable parameter is the value SPRNG_DEFAULT, which corresponds to a modulus of 261-1.

    Example


    [Quick 
Start] [User's 
Guide] [Reference 
Manual] [Quick 
Reference]

    SHAR_EOF fi # end of overwriting check if test -f 'physical-model-tests.html' then echo shar: will not over-write existing file "'physical-model-tests.html'" else cat << "SHAR_EOF" > 'physical-model-tests.html' SPRNG: Scalable Parallel Pseudo-Random Number Generator Library

    User's Guide: Testing:Physical Model Tests


    Physical Model Tests

    It is best to test random number generator in an application similar to where it will be used. We have subjected our generators to ISING model tests and random walk tests. The exact solution for these tests are known, and the tests also have the structure of practical applications. Thus they are good measures of the quality of the generators. We hope that our results will give the computational scientist a measure of the expected biases in the simulation. We explain these test results in this section.

    Ising Model Tests

    The Ising model is a model proposed in statistical mechanics that is simple enough that the exact solution is known, but still realistic enough that it has practical applications. In this model, a lattice of spin states is maintained. For each configuration of spin states, it is possible to calculate certain macroscopic properties. Different configurations are generated, and the statistical average of the macroscopic quantity over all the configurations generated is considered the observed value of that quantity. Two popular Monte Carlo algorithms for generating the configurations are (i) the Metropolis Algorithm and (ii) the Wolff Algorithm.

    Sequential tests

    We present results for these two algorithms with each of our generators for the Specific Heat and the Energy, were we generated around 1011 random numbers in our simulations on a 16x16 lattice.

    Specific Heat
    Energy

    Parallel tests

    We simulated parallelism with the Metropolis algorithm by maintaining a different random number stream at each of the 256 lattice sites. This tests for correlations between streams. The results for the Specific Heat and Energy are given below, with a total of round 1011 random numbers generated.

    Specific Heat
    Energy

    We need to be careful in choosing the seeds. Otherwise correlations between the streams can cause poor results as in the examples shown below. SPRNG users need not bother about this issue, since we automatically handle it in our code.

    Specific Heat
    Energy

    Test suite

    Our current Ising model codes run on a single processor. Even the "parallel" tests are actually serial simulations of a parallel run, in which we use a different random number stream for each lattice site. Users can type: make metropolis or make wolff in order to get the Metropolis or the Wolff algorithm test respectively. The executable has the name metropolis.rng or wolff.rng where rng is the name of the random number generator used. By default, the serial tests are produced. Parallel tests can be generated by defining the macro PARALLEL at the top of the files metropolis.c or wolff.c. These tests take 6 command line arguments: seed param lattice_size block_size discard_blocks use_blocks. For example:

    mpirun -np 1 metropolis.lcg64 111 0 16 10 10 100

    runs the Metropolis algorithm test using the 64 bit Linear Congruential Generator. The seed is 111, the parameter to the generator is 0 (which indicated the default multiplier for the LCG). We use a 16x16 lattice. The simulation performs several sweeps through the entire lattice. We record results of blocks of 10 sweeps. We discard the results of the first 10 blocks (thus a total of 100 sweeps) and then use the results of the next 100 blocks. The last number must be a power of 10. Sample results are shown below:

     
    Metropolis Algorithm with Serial RNG 
    lattice_size = 16, block_size = 10, discard_blocks = 10, use_blocks = 100 
     
    64 bit Linear Congruential Generator with Prime Addend 
     
            seed = 111, stream_number = 0   parameter = 0 
     
     
            Streams are synchronized! 
                    Energy          Energy_error    Sigma_Energy    Cv              Cv_error        Sigma_Cv 
            0.      -1.4737500      0.0206851       0.0465998       1.0225614       0.4761435       0.2184153 
            1.      -1.4819062      0.0288413       0.0141733       1.2165686       0.2821362       0.1030086 
    

    The important field are the Energy_error which gives the observed error in Energy, and the Sigma_Energy which gives the standard error for the energy. We have similar fields for the specific heat, Cv. The first line is obtained after 10 blocks of data have been averaged. Each subsequent line is the average of ten times the previous run.

    Random Walk Tests

    In the Random Walk test, we start a "Random Walker" from a certain position on a two dimensional lattice. The random walker then takes a certain number of steps to other lattice points. The direction of each step is determined from the value returned by a random number generated. A series of such tests are performed, and for each such test, the final position of the random walker is noted. This distribution of positions is compared with the expected distribution with a random number stream from a uniform distribution. A Chisquare value is computed as a quantitative measure of the likelihood of the distribution being uniform.

    This test can check for correlations between streams if we interleave streams to form a new stream and run this test. We compared the probability of the random walker being in each of the four quadrants, as in the tests implemented by Vattulainen, et al. Acceptable values were obtained for our generators with 108 random numbers generated, both in the sequential and parallel tests.

    Test suite

    The first 6 command line arguments for this test are as for the statistical tests. The seventh command line argument is the length of each walk. For example:

    mpirun -np 2 random_walk.lcg64 2 3 0 0 10 0 100

    runs the (parallel) random walk test using the 64 bit Linear Congruential Generator, where we interleave 3 streams at a time to produce a new stream; two such streams being tested. The seed is 0, the parameter to the generator is 0 (which indicated the default multiplier for the LCG). We perform 10 test per stream. Each test uses a walk length of 100.


    [Quick 
Start] [User's 
Guide] [Reference 
Manual] [Quick 
Reference]

    SHAR_EOF fi # end of overwriting check if test -f 'platforms.html' then echo shar: will not over-write existing file "'platforms.html'" else cat << "SHAR_EOF" > 'platforms.html' SPRNG: Scalable Parallel Pseudo-Random Number Generator Library

    User's Guide: Installation:Platforms

    Next:Trouble Shooting Previous:Installation


    Platforms to which SPRNG has been Ported

    We describe, in this section, certain platform dependent matters relating to SPRNG installation and usage.

    We also give typical compilation examples. These examples assume that liblcg.a is installed in the lib subdirectory, and that the SPRNG header files are in the subdirectory include of the parent directory.

    We give examples with MPI in the case of parallel machines and sequential examples in the workstations. In order to execute the MPI executables, the user typically issues a command of the following form:

    mpirun -np n a.out

    where n is the number of processors required.

    Parallel Machines

    Cray T3D

    A previous version of SPRNG was ported to the CRAY T3D. The particular system used was the one at the Pittsburgh Supercomputer Center. Users can set the PLAT variable in make.CHOICES to T3E and try to build SPRNG on this machine.

    Typical Compilation:

    • /mpp/bin/cc -Tcray-t3d -O 3 -I../include -I/usr/local/mpp/include program.c -L../lib -llcg -L/usr/local/mpp/lib -lmpi

    • (1) cc -E -P -I../include -I/usr/local/mpp/include program.F
      (2) mv program.i program.f
      (3) cf77 -O scalar3 program.f -L../lib -llcg -L/usr/local/mpp/lib -lmpi
    A three step procedure is used in compiling FORTRAN programs. The first step uses the C preprocessor to produce a file with a .i extension. We move this to a file with a .f extension and compile as a standard FORTRAN program.

    More recent versions of the compilers may not require this complicated process. The instructions for the T3E may work for this machine too.

    The system on which we tested SPRNG does not use mpirun. Instead, we set the number of processors to be used by issuing a command of the following form:

    setenv MPP_NPES n

    where n is the number of processors. The executable can then be run by just entering its name.

    Cray T3E

    SPRNG has been ported to the CRAY T3E. The particular system tested on was the one at the Pittsburgh Supercomputer Center.

    Typical Compilation:

    • c89 -O -I../include program.c -L../lib -llcg

    • f90 -F -O program.F -L../lib -llcg
    If the 'mpt' module is used, then it automatically links to the MPI library.

    IBM SP2

    SPRNG has been ported to the IBM SP2 available at the Cornell Theory Center.

    Typical Compilation:

    • mpcc -O3 -qstrict -qarch=pwr2 -qlanglvl=ansi -qtune=pwr2 -I../include -I/usr/lpp/ppe.poe/include program.c -L../lib -llcg

    • mpxlf -O3 -qstrict -qarch=pwr2 -qtune=pwr2 -WF,-I../include -WF,-I/usr/lpp/ppe.poe/include program.F -L../lib -llcg
    The C and FORTRAN compilers used above automatically link to the MPI library. The -WF, switch is used to pass flags in a format similar to that with "standard" compilers.

    HP/CONVEX Exemplar

    SPRNG was ported to the HP/CONVEX Exemplar at NCSA.

    Typical Compilation:

    • c89 +O2 +U77 +Odataprefetch +Olibcalls +e -I../include program.c -L../lib -llcg -L/opt/mpi/lib/pa1.1 -lpmpi -lmpi /usr/lib/libail.sl -lcnx_syscall

    • fort77 +O2 +U77 +Odataprefetch +Olibcalls -I../include program.F -L../lib -llcg -L/opt/mpi/lib/pa1.1 -lpmpi -lmpi /usr/lib/libail.sl -lcnx_syscall

    SGI-CRAY Origin 2000

    SPRNG has been ported to the SGI-CRAY Origin 2000 at NCSA. Please see the notes for the SGI Power Challenge for further details.

    Typical Compilation:

    • cc -O3 -align64 -64 -I../include program.c -L../lib -llcg -L/usr/lib64 -lmpi

    • f77 -O3 -align64 -64 -DPOINTER_SIZE=8 -I../include program.F -L../lib -llcg -L/usr/lib64 -lmpi

    SGI Power Challenge

    SPRNG has been ported to the SGI Power Challenge at NCSA. Both 32 bit and 64 bit compilations can be performed. The file make.SGI contains variable definitions for both the versions. Initially, we comment out the variable setting for one of the versions. If users wish to compile SPRNG in the other mode, then they should uncomment the lines that refer to that mode and comment out the lines that refer to the previous mode.

    Typical Compilation:

    • cc -O3 -align64 -64 -I../include program.c -L../lib -llcg -L/usr/lib64 -lmpi

    • f77 -O3 -align64 -64 -DPOINTER_SIZE=8 -I../include program.F -L../lib -llcg -L/usr/lib64 -lmpi

    Sequential Machines

    SPRNG has been ported to the workstations mentioned below. Since these machines were single processor systems, the MPI version of SPRNG was not used.

    HP

    SPRNG was been ported to an HP9000/715 workstation.

    Typical Compilation:

    • c89 -O -ansi -I../include program.c -L../lib -llcg

    • fort77 -O2 -I../include program.F -L../lib -llcg -L/usr/lib -lU77
    We need to use -llcg -L/usr/lib -lU77 only if command line arguments are used in the program.

    PC running Linux

    SPRNG was been ported to a Pentium 200Mhz PC running Linux.

    Typical Compilation:

    • gcc -O3 -I../include program.c -L../lib -llcg

    • g77 -O3 -I../include program.F -L../lib -llcg

    SUN

    SPRNG was been ported to a SUN workstation running SUN OS and SOLARIS.

    Typical Compilation:

    • gcc -O3 -I../include program.c -L../lib -llcg

    • f77 -fast -O3 -u -I../include program.F -L../lib -llcg


    [Quick 
Start] [User's 
Guide] [Reference 
Manual] [Quick 
Reference] [Next: 
Trouble Shooting]

    SHAR_EOF fi # end of overwriting check if test -f 'qr.gif' then echo shar: will not over-write existing file "'qr.gif'" else cat << "SHAR_EOF" > 'qr.gif' GIF87a’(ñoooÀÀÀççç,’(þ„©Ëí£œô‰³Þ¼û†âH–&'×ɶî ÇA ¬ñçúÌê _=_mˆL*5E£ #ˆJ§ÔªõŠÍj·Ü®wÛtn¾ä²ùŒF‡iÏA4 ËçôºýŽÏë{ï&{,0“6HXhHåè÷£ñvø¹•¸Æ˜á(™© I¹xÔX…ूu ÅÐuºéÕYô*U:[³E{…›kKÃkZã˪åÊg Z+|¦k…Û,*LF,+Õ ]–=õ¼Lµ-mE {‰œPk»šÎ[ºÎíÛí>ÊžÎVß› /Ï;nL©OÙ½´æôF0žº…ðô©0xïá:ˆý}*'è°þv2Lñ‹^@6æ)ñcÉú¼ú‡IcÂk¿Ë‘ݨ’ X¦ZÉRç)‹mb"”H3iP|»”.)ÐiC‡Ë $ [M Ð6UÚµcÔ‘NsJ•rÕÙˆbÙ:«isê»4ãù|U«Ý´§zÜض Ç·qó™=eÖðÖÀöJñ=&«nÕ”½8γlS>‘•™n^5qîºÇdž;-4&Ó¨[KRì-B×´ÑÀŽ¬ \íÝ\nóþ­éö’áÄM¸,vñðåš*%OÄ<:$çmöX¿Ž=»vìälÿ>¼ø;äÆ›?>;¬ôìÛ»‡óç½üùçŸJ¿Ÿ©‚þýüûûÿ¿@; SHAR_EOF fi # end of overwriting check if test -f 'qs.gif' then echo shar: will not over-write existing file "'qs.gif'" else cat << "SHAR_EOF" > 'qs.gif' GIF87al(ñoooÀÀÀççç,l(þ„©Ëí£D¢Ú‹³Þ¼û†‚! 扦êʶî Çñ”òçú~´Í ‡²€DL*•Æcm âšN I„Íj·j5Å ‹Çï,ðª×ì¶û ·+f$ŠNÎëA:õ|—¶7HxÑ—ögw‚WبwX÷èƒABÂq¢YC™(¹(hYQÚqª‘ªÚ¹JöÙ(JùSÙ9æzqz;ÂÅ k${5Z«Ë–Kz¬¼u ü5iº,­IÓº[]›­¼œ@}ËYã]â«8L™KRÊ~-MºaÉ _¼þnñ, YŸqO¯Í]½iÜxµë·ÍY¹`çø³eOàCfmI4v±9¹DæB¡Óh,"=Wó 'quick-default.html' SPRNG: Scalable Parallel Pseudo-Random Number Generator Library

    Quick Reference:Default Interface

    Previous:Simple Interface


    Quick Reference for the Default Interface

    Header files and Macros

    C: Include the header file sprng.h.
    FORTRAN: Include the header file sprng_f.h.

    Define the following macro before including a SPRNG header file:
    CHECK_POINTERS to obtain the interface with pointer checking.
    FLOAT_GEN to obtain single precision numbers when calling sprng, instead of the double precision default.
    USE_MPI to get the same seed on all processors with make_sprng_seed in the MPI version.

    sprng_f.h defines the macro SPRNG_POINTER to be a FORTRAN integer large enough to hold a C pointer. If the size of a pointer is 8 bytes, then either the macro SPRNG_POINTER=8 should be defined before including the header file, or this should be done through a compiler option (typically -DSPRNG_POINTER=8). Please take a look at the make.PLAT file of your platform for the correct setting.

    SPRNG Functions

    The C call is given first, followed by the FORTRAN call.

    int *init_sprng(int streamnum, int nstreams, int seed, int param)
    SPRNG_POINTER init_sprng(integer streamnum, integer nstreams, integer seed, integer param)

    Initialize a random number stream with seed seed and parameter param. streamnum is the stream number and must be in [0,nstreams-1]. nstreams is the number of different streams that will be initialized (on all the processors). init_sprng returns the stream ID.

    double sprng(int *stream)
    real*8 sprng(SPRNG_POINTER stream)

    The next random number in [0,1) from the stream with ID stream is returned.

    int isprng(int *stream)
    integer isprng(SPRNG_POINTER stream)

    The next random number in [0,231) from the stream with ID stream is returned.

    int print_sprng(int *stream)
    integer print_sprng(SPRNG_POINTER stream)

    Print information about a stream with ID stream.

    int make_sprng_seed()
    integer make_sprng_seed()

    Produce a seed. Define USE_MPI to get the same seed on all processors with the MPI version.

    int pack_sprng(int *stream, char **buffer)
    integer pack_sprng(SPRNG_POINTER stream, character fbuffer)

    Pack the stream with ID stream into an array and return the number of bytes of storage required. fbuffer is an array of size MAX_PACKED_LENGTH. In C, SPRNG allocates memory and has the result stored in *buffer.

    int *unpack_sprng(char *buffer)
    SPRNG_POINTER unpack_sprng(character buffer)

    Return an ID after recreating the stream that had been packed into buffer.

    int free_sprng(int *stream)
    integer free_sprng(SPRNG_POINTER stream)

    Free memory used to store the state of the stream with ID stream. Return the number of streams available on the process.

    int spawn_sprng(int *stream, int nspawned, int ***newstreams)
    integer spawn_sprng(SPRNG_POINTER stream, integer nspawned, SPRNG_POINTER fnewstreams)

    Spawn nspawned new streams from an exiting one with ID stream. fnewstreams is an array of size at least nspawned in which the ID's of the new streams are stored. In C, SPRNG allocates memory and makes *newstreams point to this array. The number of streams successfully spawned is returned.


    [Quick 
Start] [User's 
Guide] [Reference 
Manual] [Quick 
Reference]

    SHAR_EOF fi # end of overwriting check if test -f 'quick-reference.html' then echo shar: will not over-write existing file "'quick-reference.html'" else cat << "SHAR_EOF" > 'quick-reference.html' SPRNG: Scalable Parallel Pseudo-Random Number Generator Library

    Quick Reference

    Simple Interface

    Quick reference sheet for the simple interface.

    Default Interface

    Quick reference sheet for the default interface. This can also be used for the interface with pointer checking.


    [Quick 
Start] [User's 
Guide] [Reference 
Manual]

    SHAR_EOF fi # end of overwriting check if test -f 'quick-simple.html' then echo shar: will not over-write existing file "'quick-simple.html'" else cat << "SHAR_EOF" > 'quick-simple.html' SPRNG: Scalable Parallel Pseudo-Random Number Generator Library

    Quick Reference:Simple Interface

    Next:Default Interface


    Quick Reference for the Simple Interface

    Header files and Macros

    C: Include the header file sprng.h.
    FORTRAN: Include the header file sprng_f.h.

    Define the following macro before including a SPRNG header file:
    SIMPLE_SPRNG to obtain this simple interface.
    FLOAT_GEN to obtain single precision numbers when calling sprng, instead of the double precision default.
    USE_MPI to get the same seed on all processors with make_sprng_seed, or if user does not plan to call init_sprng, in the MPI version.

    sprng_f.h defines the macro SPRNG_POINTER to be a FORTRAN integer large enough to hold a C pointer.

    SPRNG Functions

    The C call is given first, followed by the FORTRAN call.

    int *init_sprng(int seed, int param)
    SPRNG_POINTER init_sprng(integer seed, integer param)

    Initialize a random number stream with seed seed and parameter param. Return 0 if unsuccessful.

    double sprng()
    real*8 sprng()

    The next random number in [0,1) is returned.

    int isprng()
    integer isprng()

    The next random number in [0,231) is returned.

    int print_sprng()
    integer print_sprng()

    Print information about the random number stream.

    int make_sprng_seed()
    integer make_sprng_seed()

    Produce a seed. Define USE_MPI to get the same seed on all processors with the MPI version.

    int pack_sprng(int *stream, char **buffer)
    integer pack_sprng(SPRNG_POINTER stream, character fbuffer)

    Pack the stream into an array and return the number of bytes of storage required. fbuffer is an array of size MAX_PACKED_LENGTH. In C, SPRNG allocates memory and has the result stored in *buffer.

    int *unpack_sprng(char *buffer)
    SPRNG_POINTER unpack_sprng(character buffer)
    .
    Recreate the stream that had been packed into buffer. Return 0 if unsuccessful.


    [Quick 
Start] [User's 
Guide] [Reference 
Manual] [Quick 
Reference] [Next: 
Default Interface]

    SHAR_EOF fi # end of overwriting check if test -f 'quick-start.html' then echo shar: will not over-write existing file "'quick-start.html'" else cat << "SHAR_EOF" > 'quick-start.html' SPRNG: Scalable Parallel Pseudo-Random Number Generator Library

    Quick Start

    This document instructs the user on how to quickly install and use some of the simpler SPRNG features. It assumes that the user has some experience installing software and in using random number generators. However, links are provided in case more details are required.

    Installing Default SPRNG Libraries

      • Change directory to the sprng directory. For example:

      • cd sprng

      • Select your platform: Edit the make.CHOICES file -- Remove any # sign from in front of the platform you are using, and place one in front of all others. Please read the notes on the makefile to port SPRNG to other machines.

      • cd SRC
      • make
        If you encounter any problems, then please take a look at the make.PLAT file (where PLAT is the platform you are on) to check if the compiler information is set approprately for your machine. If not, you can edit this file and try the make command again. In particular, if you wish to install the MPI version, then you need to edit this file and follow the directions given there.

      • cd ..
      • ./checksprng
        Several tests are conducted. The results should show that each of the tests passed.

    • SPRNG has been correctly installed on your machine. The libraries are placed in the sprng/lib directory, and the include files are in sprng/include.
    • You may check the speed of the different SPRNG random number generators by executing the following command in the directory sprng:
      ./timesprng

    SPRNG Usage

    We give some examples to demonstrate the use of some simple features of SPRNG. Our examples use the 48 bit Linear Congruential Generator. These examples assume that the user wishes to use only one random number stream per processor. Thus we can make use of the simple interface available on SPRNG. We have provided examples for both serial and parallel computers. Further details, especially for the default interface, can be found in the usage section of the user's guide.

    Note that the SPRNG libraries are placed by default in the sprng/lib directory, and the include files are in sprng/include.

    Using SPRNG in a serial program

    • The macro SIMPLE_SPRNG should be defined in order to invoke the simple interface.
    • Then FORTRAN users should include the header file sprng_f.h and C users sprng.h.
    • (Optional) If users wish to, they can call an initialization function, init_sprng. It has two arguments. The first is any integer seed and the second chooses the multiplier parameter for the LCG generator. If the user does not call the initialization routine, SPRNG performs a default initialization with seed = 0, parameter = SPRNG_DEFAULT.
    • The user can then call the function sprng in order to obtain a double precision random number in [0,1).
    • While compiling, the library liblcg.a should be linked. We have provided examples for compilation on different platforms.

    Example

    Using SPRNG in a parallel program

    • The macro SIMPLE_SPRNG should be defined in order to invoke the simple interface.
    • Then the macro USE_MPI should be defined to instruct SPRNG to make MPI calls during initialization.
    • Next FORTRAN users should include the header file sprng_f.h and C users sprng.h.
    • Before calling any SPRNG function the users should call MPI_Init and finally they must call MPI_Finalize.
    • (Optional) If users wish to, they can call an initialization function, init_sprng. It has two arguments. The first is any integer seed and the second chooses the multiplier parameter for the LCG generator. If the user does not call the initialization routine, SPRNG performs a default initialization with seed = 0, parameter = SPRNG_DEFAULT. Independent streams are produced on each processor.
    • The user can then call the function sprng in order to obtain a double precision random number in [0,1).
    • While compiling, the libraries liblcg.a and the MPI library should be linked. We have provided examples for compilation on different platforms.

    Example

    Converting User Code to SPRNG

    • Users should define the necessary macros and include a SPRNG header file as mentioned in the examples above, in each file where the random number function is called.
    • Then they should replace the initialization calls with a call to init_sprng if they wish to explicitly perform an initialization. [Optional]
    • In order to replace the calls to the users' original random number generator, oldrandom, with calls to sprng, there are two choices:

      1. Users can perform a search and replace in which oldrandom is replaced by sprng.

      2. Alternatively, users can insert the following line after including the SPRNG header file:

        #define oldrandom sprng

    • Instead of linking to any library for their previous random number generator, they must link to liblcg.a.

    Those FORTRAN users who are not used to the C preprocessor can read the note to FORTRAN users on this topic.

    Example


    [User's 
Guide] [Reference 
Manual] [Quick 
Reference]

    SHAR_EOF fi # end of overwriting check if test -f 'ref.gif' then echo shar: will not over-write existing file "'ref.gif'" else cat << "SHAR_EOF" > 'ref.gif' GIF87a`(ñoooÀÀÀççç,`(þ„©Ëí£´Ú‹³Þ¼ûO H–æé"€¶î»ê׶)ÏìÍ÷Y®»†Ä¢ñˆL*—̦´8§Ôª5 ] Ю÷ ‹Çâa–V1_×löÀ ÔJ¹íºùæÆÑ!úý(w¶“æÇ0uh7¸Wا2d@¤È4 °Xט#g¹R4i™y·)Ó I‰©j¹JÚfåÉJ+Y™ *ª(º¢ëk„Z)ÇÉ7XË º¬ü êül;ͼ‹Šl+M=ÍÛŒ9üÝKí î z}¬F~ŽX®°¬[΋›þ˜OÄÜ~.Ù*eõˆàÛòI\ 'reference.html' SPRNG: Scalable Parallel Pseudo-Random Number Generator Library

    Reference Manual


    [Quick 
Start] [User's 
Guide] [Quick 
Reference]

    SHAR_EOF fi # end of overwriting check if test -f 'refs.html' then echo shar: will not over-write existing file "'refs.html'" else cat << "SHAR_EOF" > 'refs.html' SPRNG: Scalable Parallel Pseudo-Random Number Generator Library

    User's Guide:References


    References


    [Quick 
Start] [User's 
Guide] [Reference 
Manual] [Quick 
Reference]

    SHAR_EOF fi # end of overwriting check if test -f 'simple-interface.html' then echo shar: will not over-write existing file "'simple-interface.html'" else cat << "SHAR_EOF" > 'simple-interface.html' SPRNG: Scalable Parallel Pseudo-Random Number Generator Library

    User's Guide: Usage:Simple Interface


    Simple Interface

    In this section, we describe the function calls available in the Simple SPRNG interface. It is invoked by defining the macro SIMPLE_SPRNG before including a SPRNG header file. This interface is used when only one random number stream is required on each process at any given time. In this case, it is not necessary to use stream ID's to distinguish between different streams. Hence a simpler interface is possible.

    Further details on each function can be found in the reference manual.

    Pointers for FORTRAN users

    The different random number streams available on a process, in the other interfaces, are distinguished by unique ID's, which are implemented as pointers to the memory locations where the states of the respective streams are stored. Though stream ID's are not used in the simple interface, some functions return pointers for the sake of consistency with the other interfaces. Since standard FORTRAN 77 does not have a pointer type, we can store a pointer as an integer of the same size as a C pointer. We have defined a macro called POINTER in the file sprng_f.h that automatically defines an integer of the correct size on the platforms on which SPRNG is supported. A FORTRAN programmer can then use the type POINTER just as if it were a FORTRAN data type. However, this applies only if the FORTRAN program is compiled with the same flags as given in the make file that comes with SPRNG.

    SPRNG Functions

    We describe below the SPRNG function calls available in the simple interface. For each function, the C call is given first, followed by the FORTRAN call. The function descriptions are along the lines of the C function prototypes. The data type preceding the function name is the type returned by the function. The data types preceding the arguments to the functions are the data types of the corresponding function arguments.
    1. init_sprng

    int *init_sprng(int seed, int param)
    SPRNG_POINTER init_sprng(integer seed, integer param)

    init_sprng initializes random number streams. This function call can be omitted if the user wishes to use the default values of the arguments. seed is the seed to the generators. The seed is not the starting state of the sequence; rather, it is an encoding of the starting state. It is acceptable, and recommended, to use the same seed for all the streams. The argument param selects the appropriate parameters (for example, the multiplier for a Linear Congruential Generator or the lag for a Lagged Fibonacci Generator). init_sprng returns a NULL pointer if it fails, normally due to an inability to allocate memory. Otherwise it returns a non-NULL value. If the MPI version of SPRNG has been installed and the macro USE_MPI has been defined before including a SPRNG header file, then this routine makes some MPI calls to determine the number of processes. This value is used to ensure that different streams are produced on different processes.

    In case the user calls init_sprng while another stream has already been initialized, the new stream replaces the previous one.

    Example

    2. sprng

    double sprng()
    real*8 sprng()

    The next random number in [0,1) is returned by this function. If FORTRAN programmers wish to obtain real*4 numbers, or C programmers float numbers, instead of the double precision default, then they should define the macro FLOAT_GEN before including a SPRNG header file.

    Example

    3. isprng

    int isprng()
    integer isprng()

    The next random integer in [0,231) is returned by this function. Calling isprng is equivalent to multiplying the result of sprng by 231 and truncating to an integer. Calls to sprng and isprng can be interleaved.

    Example

    4. print_sprng

    int print_sprng()
    integer print_sprng()

    The user may wish to print information about streams after initialization, without printing the entire state This is typically used when the user wishes to record information which can later be used to identify the random number stream used in the computations. This information can be obtained by a call to print_sprng.

    Example

    5. make_sprng_seed

    int make_sprng_seed()
    integer make_sprng_seed()

    This function produces a new seed using system date and time information. It will typically be used when the programmer wishes to initialize with a different seed every time the program is run. User should note that both the Lagged Fibonacci Generators requires the use of the same seed for each stream in order to guarantee their independence. In order to ensure this on a parallel computer, they should install the MPI version of SPRNG and define the macro USE_MPI before including a SPRNG header file. This function will then involves some inter-processor communication.

    Example

    6. pack_sprng

    int pack_sprng(char **buffer)
    integer pack_sprng(SPRNG_POINTER fbuffer)

    This function packs the state of the random number stream into an array and returns the number of bytes actually required for the storage. fbuffer should be the first element of an array of size MAX_PACKED_LENGTH bytes, where MAX_PACKED_LENGTH is a macro defined in "sprng_f.h" and "sprng.h". In the C interface, the programmer need not allocate memory. SPRNG allocates memory for the array and has the result stored in *buffer. This function can be used for check-pointing, where the programmer packs the state of the stream into an array and then saves it to a file. This state can later be retrieved by calling unpack_sprng, which is explained later. pack_sprng can also be used to pass a stream to another process. That process will unpack the stream to obtain the generator.

    Example

    7. unpack_sprng

    int *unpack_sprng(char *buffer)
    SPRNG_POINTER unpack_sprng(SPRNG_POINTER buffer)

    This function recreates a stream given the array buffer, which was used to store the stream's state through a call to the function pack_sprng. The return value should be ignored unless it is NULL. A NULL pointer is returned only if this function failed due to an inability to allocate memory.

    In case a random number stream has already been initialized, the unpacked stream replaces the previous stream.

    Example


    [Quick 
Start] [User's 
Guide] [Reference 
Manual] [Quick 
Reference]

    SHAR_EOF fi # end of overwriting check if test -f 'simple-reference.html' then echo shar: will not over-write existing file "'simple-reference.html'" else cat << "SHAR_EOF" > 'simple-reference.html' SPRNG: Scalable Parallel Pseudo-Random Number Generator Library

    Reference:Simple Interface

    Next:Default Reference


    Simple Interface

    In this section, we give detailed descriptions of each SPRNG function call with the simple interface. It is invoked by defining the macro SIMPLE_SPRNG before including a SPRNG header file. This interface is used when only one random number stream is required on each process at any given time. In this case, it is not necessary to use stream ID to distinguish between different streams. Hence a simpler interface is possible in which SPRNG maintains a single random number stream. Functions that require a stream ID in other interfaces make use of this stream instead.

    Pointers for FORTRAN users

    Different random number streams available on a process, in other interfaces, are distinguished by unique ID's, which are implemented as pointers to memory locations where states of the respective streams are stored. Though stream ID's are not used in the simple interface, some functions return pointers for the sake of consistency with the other interfaces. Since standard FORTRAN 77 does not have a pointer type, we can store a pointer as an integer of the same size as a C pointer. We have defined a macro called POINTER in the file sprng_f.h that automatically defines an integer of the correct size on platforms on which SPRNG is supported. A FORTRAN programmer can then use the type POINTER just as if it were a FORTRAN data type. However, this applies only if the FORTRAN program is compiled with the same flags as given in the make file that comes with SPRNG.

    Terminology

    In the following description, an argument marked as IN indicates that the argument, or array elements pointed to by that argument, are read by the function, but not modified. OUT indicates that the argument, or array elements pointed to by that argument, are written into by the function, but that its values are not used by the function. Arguments that are both read and modified are denoted by INOUT.

    SPRNG Functions

    We describe below SPRNG function calls available in the simple interface. For each function, the C call is given first, followed by the FORTRAN call. The data type preceding the function name is the type returned by the function. The data types preceding the arguments to the functions are the data types of the corresponding function arguments.
    1. init_sprng

    int *init_sprng(int seed, int param)
    SPRNG_POINTER init_sprng(integer seed, integer param)

    IN seed, IN param.

    init_sprng initializes random number streams. This function call can be omitted if the user wishes to use default values of the arguments.

    seed is the seed to the random number generator. It is not the starting state of the sequence; rather, it is an encoding of the starting state. It is acceptable (and recommended) to use the same seed for all the streams. Distinct streams are returned based on their seed and the stream number. Only the 31 least significant bits of seed are used in determining the initial starting state of the stream. Higher order bits that are set will be ignored. No warning message is printed if the higher order bits are set.

    The argument param selects appropriate parameters (for example, multiplier for a Linear Congruential Generator or lag for a Lagged Fibonacci Generator). The macro SPRNG_DEFAULT, defined in SPRNG header files, can be used to choose default parameters. If an invalid parameter is passed to this function, then a warning message is sent to stderr and the default parameter is used.

    init_sprng returns a NULL pointer if it fails, normally due to an inability to allocate memory. Otherwise it returns a non-NULL value.

    If the MPI version of SPRNG has been installed and the macro USE_MPI has been defined before including a SPRNG header file, then this routine makes some MPI calls to determine the number of processes. This value is used to ensure that different streams are produced on different processes. If the MPI version of SPRNG has been installed but the macro USE_MPI has not been defined, then the same stream is returned on all processes (provided the same seed and param value have been passed to this function on all processes). If the MPI version of SPRNG has not been installed but the macro USE_MPI has been defined, then a warning message is sent to stderr and the initialization is performed as if the macro USE_MPI has not been defined.

    In case the user calls init_sprng while another stream has already been initialized by calling init_sprng, unpack_sprng, isprng or sprng, then the new stream replaces the previous one. If a call to this function fails, then the previous stream is still available.

    Note: If the user has installed the MPI version of the library and defined the macro USE_MPI, then the user must have called MPI_Init before making calls to init_sprng. The user should also call MPI_Finalize later. SPRNG does not make either of these calls.

    Example

    2. sprng

    double sprng()
    real*8 sprng()

    The next random number in [0,1) is returned by this function.

    If FORTRAN programmers wish to obtain real*4 numbers, or C programmers float numbers, instead of the double precision default, then they should define the macro FLOAT_GEN before including a SPRNG header file.

    If no stream has been initialized before, by calling init_sprng, unpack_sprng, isprng or sprng, then a new stream is initialized using the default parameters. If this initialization fails due to an inability to allocate sufficient memory, then this function returns -1. Please see init_sprng for further details on the initialization.

    Example

    3. isprng

    int isprng()
    integer isprng()

    The next random number in [0,231) is returned by this function.

    Calling isprng is equivalent to multiplying the result of sprng by 231 and truncating to an integer. Calls to sprng and isprng can be interleaved.

    If no stream has been initialized before, by calling init_sprng, unpack_sprng, isprng or sprng, then a new stream is initialized using the default parameters. If this initialization fails due to an inability to allocate sufficient memory, then this function returns -1. Please see init_sprng for further details on the initialization.

    Example

    4. print_sprng

    int print_sprng()
    integer print_sprng()

    The user may wish to print information about streams without printing the entire state, for example after initialization. This is typically done when the user wishes to record information which can later be used to identify the random number stream used in the computations. This information can be obtained by a call to print_sprng.

    Example

    5. make_sprng_seed

    int make_sprng_seed()
    integer make_sprng_seed()

    This function produces a new seed using system date and time information. It will typically be used when the programmer wishes to initialize with a different seed every time the program is run. User should note that both the Lagged Fibonacci Generators requires the use of the same seed for each stream in order to guarantee their independence. In order to ensure this on a parallel computer, they should install the MPI version of SPRNG and define the macro USE_MPI before including a SPRNG header file. This function will then involves some inter-processor communication.

    If the user has installed the MPI version of the library but has not defined the macro USE_MPI, then the seed could be different on the different processes. No warning message is printed. If the user has not installed the MPI version of the library but includes the macro USE_MPI, then link time errors will be reported by the compiler.

    Note: If users have installed the MPI version of the library and defined the macro USE_MPI, then they must call MPI_Init before making calls to make_sprng_seed. The user should also call MPI_Finalize later. SPRNG does not make either of these calls. If any process calls make_sprng_seed, then users should ensure that all their processes call this function, since collective MPI operations are performed here.

    Example

    6. pack_sprng

    int pack_sprng(char **buffer)
    integer pack_sprng(character fbuffer)

    OUT buffer, OUT fbuffer.

    This function packs the state of the random number stream into an array and returns the number of bytes actually required for the storage.

    fbuffer should be the first element of an array of size MAX_PACKED_LENGTH bytes, where MAX_PACKED_LENGTH is a macro defined in "sprng_f.h" and "sprng.h". If the memory in the array is insufficient, undetected errors could occur. It might also lead to segmentation faults. In the C interface, the programmer need not allocate memory. SPRNG allocates memory for the array and has the result stored in *buffer.

    Calls to this function in C or FORTRAN involve memory allocation within this function. In case of insufficient memory, an error message is sent to stderr and the value 0 is returned.

    This function can be used for check-pointing, where the programmer packs the state of the stream into an array and then saves it to a file. This state can later be retrieved by calling unpack_sprng, which is explained below. pack_sprng can also be used to pass a stream to another process. That process will unpack the packed array to obtain the stream.

    Example

    7. unpack_sprng

    int *unpack_sprng(char *buffer)
    SPRNG_POINTER unpack_sprng(character fbuffer)

    IN buffer, IN fbuffer.

    This function recreates a stream given the array buffer or fbuffer, which was used to store the stream's state through a call to the function pack_sprng. The return value should be ignored unless it is NULL. A NULL pointer is returned only if this function failed due to an inability to allocate memory.

    Calls to this function involve memory allocation. In case sufficient memory was not obtained, an error message is sent to stderr and the NULL pointer is returned. The packed string must be the state of a valid stream. If it is not, the error may not necessarily be detected by SPRNG. If an error is detected, then an error message is sent to stderr and a NULL pointer is returned.

    In case a random number stream has already been initialized, by calling init_sprng, unpack_sprng, isprng or sprng, then the unpacked stream replaces the previous stream. If a call to this function fails, then the previous stream is still available.

    Example


    [Quick 
Start] [User's 
Guide] [Reference 
Manual] [Quick 
Reference] [Next: 
Default Reference]

    SHAR_EOF fi # end of overwriting check if test -f 'sprng.html' then echo shar: will not over-write existing file "'sprng.html'" else cat << "SHAR_EOF" > 'sprng.html' SPRNG: Scalable Parallel Pseudo-Random Number Generator Library

    User's Guide: Usage:SPRNG Heaer Files


    SPRNG Header Files

    sprng.h

    C users must include the header file sprng.h in their program. We explain below the purpose of this header file.

    The actual names of SPRNG functions differ from the user calls. This header file defines certain macros that make the calls to the correct functions, depending on the interface and other options a user desires. Additionally, this file also defines the parameters for the generators, and a macro called MAX_PACKED_LENGTH which gives the maximum number of bytes required to store the state of any SPRNG stream.

    sprng_f.h

    FORTRAN users must include the header file sprng_f.h in their program. If SPRNG calls are made in several subroutines, then this file should be included at the beginning of each subroutine as shown in the following example:

    Example

    We explain below the purpose of this header file.

    The actual names of SPRNG functions differ from those given in the SPRNG interfaces. This header file defines certain macros that make the calls to the correct functions, depending on the interface and other options a user desires. Additionally, this file also defines the parameters for the generators, and a macro called MAX_PACKED_LENGTH which gives the maximum number of bytes required to store the state of any SPRNG stream.

    Another macro called POINTER is defined, which gives the name of an integer type large enough to hold a C pointer. FORTRAN programmers can use this macro as if it were a FORTRAN data type in order to store the results of those SPRNG functions that return pointers. More details on this can be found in the note on Stream ID's.

    FORTRAN programmers unfamiliar with preprocessing directives can also take a look at the note to FORTRAN users on preprocessor directives.


    [Quick 
Start] [User's 
Guide] [Reference 
Manual] [Quick 
Reference] [Next: 
Platforms]

    SHAR_EOF fi # end of overwriting check if test -f 'statistical-tests.html' then echo shar: will not over-write existing file "'statistical-tests.html'" else cat << "SHAR_EOF" > 'statistical-tests.html' SPRNG: Scalable Parallel Pseudo-Random Number Generator Library

    User's Guide: Testing:Statistical Tests


    Statistical Tests

    The basic idea behind the statistical tests of randomness is that the random number streams obtained from a generator should have the properties of a sample drawn from a uniform distribution. Tests are designed so that the expected value of some test statistic is known for the uniform distribution. The empirically generated random number stream is then subjected to the same test, and the statistic obtained is compared against the expected value. While a boundless number of tests can be constructed, certain tests have become popular and are accepted as the de facto standard. Generators that pass such tests are considered "good". The series of tests proposed by Knuth and the DIEHARD tests implemented by Marsaglia are practically considered the standard tests.

    These tests check a random number stream for the uniformity of the stream and for correlations between numbers in the stream. In a parallel random number generator, we include the additional restriction that there should not be correlations between different random number streams. For example, it should not so happen that most of the random numbers streams generate high random numbers in similar positions. If we interleave two streams such that the new stream generated has alternate numbers from the same stream, then this new stream should pass the tests for a serial random number stream if the original streams were not correlated. This testing scheme can be generalized to interleaving several streams to form a new stream.

    Sequential Tests

    These tests were proposed by Knuth and are widely used to check the quality of the random number streams.

    We tested several streams from our our random number generators, producing a total of around 1011 random numbers for each test given below. The test statistics obtained for all the streams were then subjected to the Kolmogorov-Smirnov test. The results were considered acceptable if they were not in the 1% tails. Our generators pass all these tests.

    The tests performed included the following: Coupon collector's test, Equidistribution test, Gap test, Maximum of t test, Permutations test, Poker test, Runs test and Serial test.

    Parallel Tests

    We performed parallel versions of these tests in which we interleaved several streams at a time. We give details for the serial test below.

    We also parallelized the set of tests described above in which we interleaved 256 streams to produce a new stream. In the preliminary tests, we generated a total of 108 random numbers in each test. We also performed the runs test and the gap test in which we tested 4 sets of 256 streams each for a total of 1024 streams, generating about 1012 random numbers in the process. Both our generators passed these parallel tests.
    Sum of distributions test:
    We can use the fact that the sum of independent variables approaches the normal distribution to test for the independence of random number streams. We add random numbers from several streams and form a sum. We generate several such sums and check if their distribution is normal. In our tests, we formed sums by adding 128 random numbers each from 1024 streams. We checked the distribution of 106 sums for a total of around 1011 random numbers. Our generators performed acceptably.

    DIEHARD Tests

    The DIEHARD tests were proposed and implemented by Marsaglia, and are considered to be more stringent tests of randomness than the tests proposed by Knuth. The DIEHARD code is not easy to modify, and so we have not modified any of the parameters used in these tests. The results of this test indicate that the SPRNG generators perform acceptably.


    [Quick 
Start] [User's 
Guide] [Reference 
Manual] [Quick 
Reference]

    SHAR_EOF fi # end of overwriting check if test -f 'test-results.html' then echo shar: will not over-write existing file "'test-results.html'" else cat << "SHAR_EOF" > 'test-results.html' SPRNG: Scalable Parallel Pseudo-Random Number Generator Library

    User's Guide: Testing:Test Results

    Next:Test Suite Previous:Testing


    Test Results

    Serial Test

    The serial test measures correlation between adjacent elements in a random number sequence. We multiply the double precision random numbers by d and truncate to get an integer in [0,d). We consider n subsequences of 2 random numbers each. There are d2 possible subsequences, and each should be equally likely if the distribution were truly uniform. If we interleave two streams with adjacent elements of the sequence coming from the same stream, then again, each subsequence will be equally likely if the individual streams are uniform and the corresponding elements of each stream are uncorrelated. The Chisquare test can then be applied to these sequences to determine the likelihood of the sequence coming from a uniform distribution.

    We tested a set of 100 streams individually, without interleaving. We considered 105 pairs of adjacent random integers in [0,100). We then interleaved 100 pairs of these streams and performed this test again. In both the cases, acceptable values of the Chisquare distribution were obtained. We plan to conduct larger tests later.

    We illustrate the results of the test qualitatively below. We consider a million random integers in [0,256) from two streams. Then we form pairs from corresponding elements of each stream. There are 2562 such possible values for these pairs. We determine the frequencies of each possible pair. We then subtract the expected frequency and scale the result to a value in [0,256). In the plot below, these scaled values are treated as the pixel intensities. The horizontal axis represents the values from the first stream and the vertical axis those from the second stream.

    48 bit Linear Congruential Generator with prime addend Modified Lagged Fibonacci Generator

    If any patterns could be observed in the figures above, then this would indicate correlations between corresponding elements of the two streams.


    Overview of Empirical Test Results

    The numbers in the table are the total number of random numbers tested.

    Sequential Parallel
    Test 48 bit LCG LFG MLFG 64 bit LCG CMRG PMLCG 48 bit LCG LFG MLFG 64 bit LCG CMRG PMLCG
    Collisions 1012 1012 1012 1012 1012 1012 1012 1012 1012 1012 1012 1012
    Coupon 1011 1011 1011 1011 1011 1011 1011 1011 1011 1011 1011 1011
    Equidistribution 1011 1011 1011 1011 1011 1011 Not needed
    Gap 1011 1013 1011 1011 1011 1011 1012 1012 1011 1011 1011 1011
    Maximum of t 1011 1011 1011 1011 1011 1011 1011 1011 1011 1011 1011 1011
    Permutations 1011 1011 1011 1011 1011 1011 1011 1011 1011 1011 1011 1011
    Poker 1011 1011 1011 1011 1011 1011 1011 1011 1011 1011 1011 1011
    Runs up 1011 1011 1011 1011 1011 1011 1012 1012 1011 1011 1011 1011
    Serial 1011 1011 1011 1011 1011 1011 1011 1011 1011 1011 1011 1011
    Sum of distributions Not needed 1011 1011 1011 1011 1011 1011
    Ising: Metropolis 1011 1011 1011 1011 1011 1011 1011 1011 1011 1011 1011 1011
    Ising: Wolff 1011 1011 1011 1011 1011 1011 1011 1011 1011 1011 1011 1011
    Random Walk 108 108 108 108 108 108 108 108 108 108 108 108


    [Quick 
Start] [User's 
Guide] [Reference 
Manual] [Quick 
Reference] [Next: 
Test Suite]

    SHAR_EOF fi # end of overwriting check if test -f 'test-suite.html' then echo shar: will not over-write existing file "'test-suite.html'" else cat << "SHAR_EOF" > 'test-suite.html' SPRNG: Scalable Parallel Pseudo-Random Number Generator Library

    User's Guide: Testing:Test Suite

    Next:Glossary Previous:Test Results


    Test Suite

    The SPRNG test suite is available in the TESTS directory under sprng. The tests can be divided into two categories, (i) Physical model tests and (ii) Statistical tests. The former are described in the section on Physical model tests. The latter are described in this section.

    We have implemented parallel versions of certain popular tests described by Knuth. These test can also be used for sequential random number generators. We have also provided a few other parallel tests. Before describing the test suite, we shall provide an overview of testing random number generators.

    Testing Random Number Generators

    Tests of random number generators typically compute some statistic from a portion of a random stream. This statistic is compared against the expected value from a truly random sample from a uniform distribution. If the results from the random number generator are consistent with those from a random sample, then the test is said to have been "passed" by the random number generator. Passing a test does not imply that the generator is producing a truly random sequence. It just means that that particular test could not differentiate between a truly random stream and the stream generated by the generator under consideration. However, if several different tests are passed, then our confidence in the random number generator increases. Since we need to compare the statistics from the generate stream with that from a truly random stream, we need to use some general statistical test procedures that can compare different distributions. We mention below the Chisquare test and the Kolmogorov-Smirnov (KS) test, which we use to determine the likelihood of our random streams coming from a uniform distribution.

    Chisquare test

    We can use this test for discrete distributions. Let us assume that we have k possible values or "categories" for our variable, and that the probability of a sample being of category i is pi. We make n independent observations and count the number of times each category occurred.

    For example, we can generate random numbers in (0.0,1.0) and divide them into four categories. If the number is less than 0.25, then it goes to category 0; if it is between 0.25 and 0.5, then it goes to category 1; if it is between 0.5 and 0.75, then it goes to category 2; if it is greater than 0.75 then it goes to category 3. Note that although the sampled distribution was continuous, we have transformed it to a discrete distribution by associating the numbers with their categories. The probability for each category is equal to 0.25. We count the number of times numbers in each of the four categories occur. For n trials, we expect that each category will have roughly 0.25 x n samples.

    In general, if category i occurred Yi times, then Yi - npi is the difference between the observed number of values and the expected number of values, and can be considered an "error" between the observed and expected quantity. The chisquare statistic is a function of these "errors" for each of the categories and n. The distribution of the Chisquare statistic is known when the number of categories is given. We can therefore determine the Chisquare percentile for a given chisquare statistic, which is just the proportion of samples from the true distribution that have a chisquare statistic less than the percentile.

    For example, if our expected probabilities were computed based on samples from a uniform distribution and the chisquare percentile is 10%, then this means that 10% of random samples drawn from the uniform distribution will have chisquare statistics less than what we observed. Thus if the chisquare values is very high, say 99%, then it is unlikely that our sample came from the uniform distribution, since only 1% of the samples from the uniform distribution will have such a high value. Less obvious is the fact that even very low values are unacceptable. For example, if the chisquare statistic is 1%, this means that the observed values were too close to the expected values; even a truly random sample from the uniform distribution would have a higher chisquare value 99% of the time.

    Kolmogorov-Smirnov Test

    The Kolmogorov-Smirnov (KS) test is used to compare continuous distributions. In this tests, the cumulative distribution function is determined for the samples. Then the maximum difference (in absolute value) between this distribution and the exact tested distribution is computed. The KS statistic is the product of this difference and the square root of the number of samples. A high value of this statistic therefore indicates that the two distributions are far apart, and vice versa. The KS percentile can be computed, analogous to the chisquare percentile. We reject samples in either tails, as in the case for the chisquare test.

    SPRNG Test Suite

    The SPRNG test suite implements the tests described by Knuth, and a few others. We have generalized the tests of single random number streams to detect correlations between streams in a parallel random number generator. In our test scheme we interleave several streams to form a new stream, and then test this new stream with conventional tests. We show an example in the figure below where we combine three streams to form a new stream.

    We form several such new streams, and test several blocks of random numbers from each stream. Usually the result of the test for each block is a chisquare value. We take the chisquare statistics for all the blocks and use the Kolmogorov-Smirnov test to verify that they are distributed according to the chisquare distribution. If the Kolmogorov-Smirnov percentile is between 1% and 99%, then the test is passed by the random number generator.

    The tests in the SPRNG test suite take several arguments. The first few arguments are common to all the tests, and are explained below. The test specific arguments will be explained later. The SPRNG tests are called as follows:

    test.lib nstreams ncombine seed param nblocks skip test_arguments

    where the name of the executable test.lib is formed by concatenating the name of the test and the random number library from which the random numbers are generated. For example

    Example:

    equidist.lcg 4 2 0 0 3 1 2 100
    mpirun -np 2 equidist.lcg 4 2 0 0 3 1 2 100

    perform the equidistribution test with the 48 bit Linear Congruential Generator with prime addend in a serial and parallel machine respectively.

    The argument ncombine ( = 2 in our example) indicates the number of streams we interleave to form a new stream. We form nstreams (=4) such new streams and test nblocks (=3) blocks of random numbers from each new stream. The argument seed (=0) is the encoded seed to the random number generator, and param (=0) is the parameter to the generator. The argument skip (=1) indicates how many random numbers we skip after testing a block before we start a test on the next block. The rest of the arguments in our example are specific to that test. Note that we can perform tests on individual streams by setting ncombine to 1.

    The result of the example given above are as follows:

    sprng/TESTS:sif% mpirun -np 2 equidist.lcg 4 2 0 0 3 1 2 100
    equidist.lcg 4 2 0 0 3 1 2 100
    Result: KS value = 0.601752
    KS value prob = 17.50 %

    The KS value prob line gives the KS percentile for the entire set of tests. Since it is between 1% and 99%, we consider this example to have passed. It should be noted that the real tests are much larger than this simple example.

    The figure below illustrates the use of random numbers in the example mentioned above.

    Parallel versions of sequential tests

    While most of tests we have implemented are parallel versions of popular sequential tests, some others are inherently parallel. We first describe the former. The users should note that when we state that a particular test is parallel, we are refering to the fact that it can be used to test correlations between streams. We do not mean that it actually runs on multiple processors. All SPRNG tests run can be run either on a single processor or on multiple processors.

    We next briefly describe each test followed by its test specific arguments. We also give the number of random numbers tested and asymptotic memory requirements (in bytes, assuming an integer is 4 bytes and double precision is 8 bytes). This should helps users estimate the time required for their calculations from smaller sample runs.

    The details concerning these tests are presented in Knuth's book, unless we give some other reference.

    1. Collisions test: n logmd logd
    Suppose we throw n << m balls into m urns, then most of the balls will fall into empty urns. If a ball falls into an urn that is occupied, then a collision is said to have occurred. The collisions test counts the number of collisions.

    We generate random integers in [0,2logd-1]. We divide the sequence into n disjoint subsequences of length 2logmd each. We count the number of distinct sub-sequences obtained empirically and subtract this from n to obtain a count of the number of ``collisions''.

    Our implementation of this test requires logmd*logd < 32. The number of subsequences, n, should also be less than the number of possible subsequences, 2logmd*logd.

    Random numbers tested: n*logmd
    Memory: 8*nstreams*nblocks + 4*n + 2^{logmd*logd}

    2. Coupon collector's test: n t d
    We generate random integers in [0,d-1]. We then scan the sequence until we find at least one instance of each of the d integers, and note the length of the segment over which we found this complete set. For example, if d = 3 and the sequence is: 0 2 0 1 ..., then the length of the first segment over which we found a complete set of integers is 4. We continue from the next position in the sequence until we find n such complete sets. The distribution of lengths of the segments is compared against the expected distribution. In our analysis, we lump segments of length > t together.

    Random numbers tested: n*d*ln(d)
    Memory: 8*nstreams*nblocks + 4*d + 16*(t-d+1)

    3. Equidistribution test: d n
    We generate random integers in [0,d-1] and check whether they come from a uniform distribution, that is, each of the d numbers has equal probability.

    Random numbers tested: n
    Memory: 8*nstreams*nblocks + 16*d

    4. Gap test: t a b n
    We generate floating point numbers in (0,1) and note the gap in the sequence between successive appearances of numbers in the interval [a,b] in (0,1). For example, if [a,b] = [0.4,0.7] and the sequence is: 0.1, 0.5, 0.9, 0.6, ..., then the length of the first gap (between the numbers 0.5 and 0.6) is 2. We record 'n' such gaps, and lump gap lengths greater than 't' together in a category in our analysis.

    Random numbers tested: n/(b-a)
    Memory: 8*nstreams*nblocks + 16*t

    5. Maximum-of-t test: n t
    We generate t floating point numbers in [0,1) and note the largest number. We repeat this n times. The distribution of this largest number should be as xt.

    Random numbers tested: n*m
    Memory: 8*nstreams*nblocks + 16*n

    6. Permutations test: m n
    We generate m floating point numbers in (0,1). We can rank them according to their magnitude; the smallest number is ranked 1, ..., the largest is ranked m. There are m! possible ways in which the ranks can be ordered. For example, if m = 3, then the following orders are possible: (1,2,3), (1,3,2), (2,1,3), (2,3,1), (3,1,2), (3,2,1). We repeat this test n times and check if each possible permutations was equally probable.

    Random numbers tested: n*m
    Memory: 8*nstreams*nblocks + 8*m + 16*(m!)

    7. Poker test: n k d
    We generate k integers in [0,d-1] and count the number of distinct integers obtained. For example if k = 3, d = 3 and the sequence is: 0, 1, 1, ..., then the number of distinct integers obtained in the first 3-tuple is 2. We repeat this n times and compare with the expected distribution for random samples from the uniform distribution.

    Random numbers tested: n*k
    Memory: 8*nstreams*nblocks + 0.4*min(n,k) + 12*k + 4*d

    8. Runs up test: t n
    We count the length of a "run" in which successive random numbers are non-decreasing. For example if the sequence is: 0.1, 0.2, 0.4, 0.3, then the length of the first run is 3. We repeat this n times and compare with the expected distribution of run lengths for random samples from the uniform distribution. Runs of length greater than 't' are lumped together during our analysis. We implement a modified version of this test in which we discard the number that follows a run before starting the new run. In our example, the number 0.3 would be discarded.

    Random numbers tested: 1.5*n
    Memory: 8*nstreams*nblocks + 16*t

    9. Serial test: d n
    We generate n pairs of integers in [0,d-1]. Each of the d2 pairs should be equally likely to occur.

    Random numbers tested: 2*n
    Memory:8*nstreams*nblocks + 16*d*d

    Inherently parallel tests

    Unlike the preceding tests which modify sequential tests to test for correlations between streams, the tests mentioned below are inherently parallel and test for correlations between streams. The meaning of the arguments for these tests are slightly different from those for the preceding tests. Since these tests are inherently parallel, we need not interleave streams, and thus the second argument ncombine should be set to 1. The first argument nstreams is the total number of streams tested. All these streams are tested simulatnaneously, rather than independently as in the previous case. The rest of the arguments are indentical to the previous case.

    1. Sum of independent distributions test: n groupsize

    We can use the fact that the sum of independent variables approaches the normal distribution to test for the independence of random number streams. We add random numbers from several streams and form a sum. We generate several such sums and check if their distribution is normal.

    We add groupsize random numbers in (0,1) from each stream to form a sum. We verify if the distribution of n such sums is normal using the Kolmogorov-Smirnov test. We illustrate this test in the figure below with nstreams = 3, n = 4, and groupsize = 2.

    In the current implementation, the argument nblocks must be 1, implying that only one test is performed. The reason for this is that the result of this test is not exact. The true distribution approaches the normal distribution, but is not identical to it. Thus the result of this test has an error, and we are not sure if subjecting a number of such results to another test would yield meaningful results.

    We have numerically calculated the maximum difference between the exact distribution and the normal distribution. Based on this result, we also output a range for the the exact KS statistic, if we had used the true distribution instead of the normal approximation.

    Test Wizard

    To aid you in running the statistical tests, we have included a Test Wizard in this document. It is Java applet that will translate your choices of test parameters into the appropriate command line. In addition to relieving you from remembering the command line syntax, the wizard will also catch certain simple errors in your choice of parameters. Only some of the tests are included in the wizard.

    If your browser's Java feature is not enabled, and if you have java, then please move to the sprng/www/testwiz directory if you have installed SPRNG and type
    java TestWizard

    Click here to invoke the Translator:

    If you are seeing this, you need to enable your browser's Java feature. Alternatively, if you have java, please move to the sprng/www/testwiz directory if you have installed SPRNG and type
    java TestWizard

    Testing New Random Number Generators

    We can easily test new random number generators. Let us assume that the new generator is in the library libnew.a, in the same directory as the other SPRNG libraries.
    • This new generator must define functions called init_rng, get_rn_dbl, and free_rng that follow the specifications of the SPRNG functions init_sprng, sprng, and free_sprng respectively (that is, the first function must perform an initialization, the second must produce random double precision numbers, and the third must free up any memory allocated for the random stream).

      If users wish to test only a single random number stream, then they can, instead of defining the above functions, just write the stream of random double precision numbers to a file in ASCII (not in binary format). Then they should define the macro READ_FROM_STDIN in the file sprng/TESTS/init_tests.c and compile. The test programs will then read input from standard input. If users redirect stdin from the random number file, then these numbers will be tested. This procedure will not, however, work for the Ising model programs (Wolff and Metropolis.)

    • The user just needs to add new to the list specified by LIBLIST in the Makefile in the TESTS directory and compile.

      Example: LIBLIST = lcg lfg new

    Exectuables are created with the name test.new for each test test. For example equidist.new is the equidistribution test executable for the new generator.


    [Quick 
Start] [User's 
Guide] [Reference 
Manual] [Quick 
Reference] [Next: 
Glossary]

    SHAR_EOF fi # end of overwriting check if test -f 'tests.html' then echo shar: will not over-write existing file "'tests.html'" else cat << "SHAR_EOF" > 'tests.html' SPRNG: Scalable Parallel Pseudo-Random Number Generator Library

    User's Guide:Testing

    Next:Test Results Previous:Creating New SPRNG Generators


    Tests

    The random number generators provided in SPRNG are expected to be used in large-scale Monte Carlo simulations, and so we need to ensure that they are of high quality by theoretical analyses and empirical tests.

    Theoretical Analyses

    Pseudorandom number sequences depend on a finite number of states, and so they have a finite period after which the random number sequence repeats. Clearly, it is important that the sequences have a much larger period than the length of the sequence that will be used. Usually the period of the generators can be determined theoretically, and are given in the section describing the generators.

    In a parallel random number generator, we need to ensure that are is no correlation between different random number streams. For example, it should not so happen that most of the random numbers streams generate high random numbers in similar positions in the sequence. There are some theoretical analyses that discuss the independence of streams, as described in papers by Percus and Kalos and Mascagni, et al. The generators currently available in SPRNG satisfy the recommendations based on these theoretical tests.

    Empirical Tests

    The empirical tests can be grouped into two general categories as described below:

    Statistical Tests

    A single stream of parallel random numbers should pass all the tests applicable to a serial stream. We shall discuss this issue first. The basic idea behind these tests of randomness is that the random number streams obtained from a generator should have the properties of a sample drawn from a uniform distribution. Tests are designed so that the expected value of some test statistic is known for the uniform distribution. The empirically generated random number stream is then subjected to the same test, and the statistic obtained is compared against the expected value. While a boundless number of tests can be constructed, certain tests have become popular and are accepted as the de facto standard. Generators that pass such tests are considered "good". The series of tests proposed by Knuth and the DIEHARD tests implemented by Marsaglia are practically considered the standard tests.

    These tests check a random number stream for the uniformity of the stream and for correlations between numbers in the stream. In a parallel random number generator, we include the additional restriction that there should not be correlations between different random number streams. For example, it should not so happen that most of the random numbers streams generate high random numbers in similar positions. We wish to test our generators empirically, in addition to the theoretical analyses mentioned above. The tests we have conducted are modifications of the ideas for serial streams. If we interleave two streams such that the new stream generated has alternate numbers from the same stream, then this new stream should pass the tests for a serial random number stream if the original streams were not correlated. We perform such tests on several pairs of streams and observe whether the test statistics are acceptable. We can generalize this scheme to interleaving several random number streams at a time.

    Physical Model Tests

    Random number generators that pass the statistical tests mentioned above do not always perform well in large-scale Monte Carlo simulations. It is best to test the random number generator in an application similar to where it will be used. We have subjected our generators to ISING model tests and random walk tests. The exact solution for these tests are known, and the tests also have the structure of practical applications. Thus they are good measures of the quality of the generators. We hope that our results will give the computational scientist a measure of the expected biases in the simulation.

    We have performed these physical model tests using both, single streams and multiple streams in the simulation. The latter tests probe for correlations between streams.


    [Quick 
Start] [User's 
Guide] [Reference 
Manual] [Quick 
Reference] [Next: 
Test Results]

    SHAR_EOF fi # end of overwriting check if test -f 'testsold.html' then echo shar: will not over-write existing file "'testsold.html'" else cat << "SHAR_EOF" > 'testsold.html' SPRNG: Scalable Parallel Pseudo-Random Number Generator Library

    User's Guide:Testing

    Next:Test Results Previous:Creating New SPRNG Generators


    Tests

    The random number generators provided in SPRNG are expected to be used in large-scale Monte Carlo simulations, and so we need to ensure that they are of high quality by theoretical analyses and empirical tests.

    Theoretical Analyses

    Pseudorandom number sequences depend on a finite number of states, and so they have a finite period after which the random number sequence repeats. Clearly, it is important that the sequences have a much larger period than the length of the sequence that will be used. Usually the period of the generators can be determined theoretically. The period of the 48 bit Linear Congruential Generator with prime addend is 248, that of the 64 bit Linear Congruential Generator with prime addend is 264, and that of the modified Lagged Fibonacci Generator is 231(2l-1) where l is the lag. For the default generator with lag l = 1279, the period is approximately 21310.

    In a parallel random number generator, we need to ensure that are is no correlation between different random number streams. For example, it should not so happen that most of the random numbers streams generate high random numbers in similar positions in the sequence. There are some theoretical analyses that discuss the independence of streams, as described in papers by Percus and Kalos and Mascagni, et al. The generators currently available in SPRNG satisfy the recommendations based on these theoretical tests.

    Empirical Tests

    Summary of test results

    The number of random numbers generated in the tests are given below.

    Sequential Parallel
    Test 48 bit LCG LFG 48 bit LCG LFG
    Collisions 108 108 108 108
    Coupon 1011 1011 1010 1010
    Equidistribution 1011 1011 Not needed
    Gap 1011 1011 1012 1012
    Maximum of t 1011 1011 1010 1010
    Permutations 1011 1011 1010 1010
    Poker 1011 1011 1010 1010
    Runs up 1011 1011 1012 1012
    Serial 1011 1011 1010 1010
    Sum of distributions Not needed 1011 1011
    Ising: Metropolis 1011 1011 1011 1011
    Ising: Wolff 1011 1011 1011 1011
    Random Walk 108 108 108 108

    The empirical tests can be grouped into two general categories as described below:

    Statistical Tests

    A single stream of parallel random numbers should pass all the tests applicable to a serial stream. We shall discuss this issue first. The basic idea behind these tests of randomness is that the random number streams obtained from a generator should have the properties of a sample drawn from a uniform distribution. Tests are designed so that the expected value of some test statistic is known for the uniform distribution. The empirically generated random number stream is then subjected to the same test, and the statistic obtained is compared against the expected value. While a boundless number of tests can be constructed, certain tests have become popular and are accepted as the de facto standard. Generators that pass such tests are considered "good". The series of tests proposed by Knuth and the DIEHARD tests implemented by Marsaglia are practically considered the standard tests.

    These tests check a random number stream for the uniformity of the stream and for correlations between numbers in the stream. In a parallel random number generator, we include the additional restriction that there should not be correlations between different random number streams. For example, it should not so happen that most of the random numbers streams generate high random numbers in similar positions. We wish to test our generators empirically, in addition to the theoretical analyses mentioned above. The tests we have conducted are modifications of the ideas for serial streams. If we interleave two streams such that the new stream generated has alternate numbers from the same stream, then this new stream should pass the tests for a serial random number stream if the original streams were not correlated. We perform such tests on several pairs of streams and observe whether the test statistics are acceptable. We can generalize this scheme to interleaving several random number streams at a time.

    Physical Model Tests

    Random number generators that pass the statistical tests mentioned above do not always perform well in large-scale Monte Carlo simulations. It is best to test the random number generator in an application similar to where it will be used. We have subjected our generators to ISING model tests and random walk tests. The exact solution for these tests are known, and the tests also have the structure of practical applications. Thus they are good measures of the quality of the generators. We hope that our results will give the computational scientist a measure of the expected biases in the simulation.

    We have performed these physical model tests using both, single streams and multiple streams in the simulation. The latter tests probe for correlations between streams.


    [Quick 
Start] [User's 
Guide] [Reference 
Manual] [Quick 
Reference] [Next: 
Test Results]

    SHAR_EOF fi # end of overwriting check if test ! -d 'testwiz' then mkdir 'testwiz' fi cd 'testwiz' if test -f 'CollisionsPanel.java' then echo shar: will not over-write existing file "'CollisionsPanel.java'" else cat << "SHAR_EOF" > 'CollisionsPanel.java' /******************************************************************************* CollisionsPanel class *******************************************************************************/ //****************************************************************************** // CollisionsPanel class defines a panel for entering and translating parameters of // "Collisions Test". //****************************************************************************** public class CollisionsPanel extends ParmGrpPanel { //--------------------------------------------------------------------------- // Parameter field for number of digits. protected IntParmField logmdField; // Parameter field for log of base of each digit. protected IntParmField logdField; // Parameter field for number of samples. protected IntParmField numSampField; // The command line translation of the parameters. protected String parmStr; // Owner of this panel. protected TestWizard wiz; //*************************************************************************** // The constructor constructs PermPanel with owner . //--------------------------------------------------------------------------- public CollisionsPanel(TestWizard wizard) { // Set up a group panel that will contain three parameter fields. super("Collisions Test", 3); // Set the command line id. super.cmdId = "collisions"; // Create the parameter fields. numSampField = new IntParmField("Form ? numbers per test by ...", 2, Integer.MAX_VALUE,25000); logdField = new IntParmField("... concatenating ? bits from ...", 1, Integer.MAX_VALUE,5); logmdField = new IntParmField("... ? random numbers each.", 1, Integer.MAX_VALUE,4); // Initialize internal variables. parmStr = ""; wiz = wizard; // Add the components. addField(numSampField); addField(logdField); addField(logmdField); } //--------------------------------------------------------------------------- // checkParms() checks the validity of the parameter values, and returns a // description of the error. // // No error: checkParms() returns empty string // Warning : checkParms() returns warning message (non-empty string) // getParms() returns command line segment (non-empty string) // Error : checkParms() returns error message (non-empty string) // getParms() returns empty string //--------------------------------------------------------------------------- public String checkParms() { long numSamp; long logd; long logmd; String errorMsg; long limit; // Check parameters for errors and concatenate error messages. errorMsg = numSampField.checkParm() + logdField.checkParm() + logmdField.checkParm(); // If error exists, set command line translation to empty string and // return the error message. if (errorMsg.length() > 0) { parmStr = ""; return errorMsg; } // Translate the parameters into command line segment and cache it. parmStr = numSampField.getParmString() + " " + logmdField.getParmString() + " " + logdField.getParmString(); // Get the numerical values of the parameters. numSamp = numSampField.getParmValue(); logmd = logmdField.getParmValue(); logd = logdField.getParmValue(); limit = wiz.maxTestMemory * wiz.KILO_BYTE / 4; // Create a warning message if memory used by the test will exceed // the memory constraint. if ((numSamp+(1<<(logmd*logd))) > limit) { errorMsg += "WARNING: memory constraint exceeded\n" + " make sure " + "\n"; } return errorMsg; } //--------------------------------------------------------------------------- // getParms() translates the user-specified parameters into a command line // segment, and returns it in a string. // NOTE: Before calling getParms(), call checkParms() first. //--------------------------------------------------------------------------- public String getParms() { // Return the cached translation. return parmStr; } } SHAR_EOF fi # end of overwriting check if test -f 'CouponPanel.java' then echo shar: will not over-write existing file "'CouponPanel.java'" else cat << "SHAR_EOF" > 'CouponPanel.java' /******************************************************************************* CouponPanel class *******************************************************************************/ //****************************************************************************** // CouponPanel class defines a panel for entering and translating parameters of // "Coupon Test". //****************************************************************************** public class CouponPanel extends ParmGrpPanel { //--------------------------------------------------------------------------- // Parameter field for maximum sequence length. protected IntParmField maxSeqField; // Parameter field for largest integer+1. protected IntParmField maxNumField; // Parameter field for number of samples. protected IntParmField numSampField; // The command line translation of the parameters. protected String parmStr; // Owner of this panel. protected TestWizard wiz; //*************************************************************************** // The constructor constructs PermPanel with owner . //--------------------------------------------------------------------------- public CouponPanel(TestWizard wizard) { // Set up a group panel that will contain three parameter fields. super("Coupon Test", 3); // Set the command line id. super.cmdId = "coupon"; // Create the parameter fields. numSampField = new IntParmField("Numbers of complete sets", 2, Integer.MAX_VALUE,20000); maxSeqField = new IntParmField("Lump together sets larger than:", 2, Integer.MAX_VALUE,30); maxNumField = new IntParmField("Generate integers in [0,?).", 2, Integer.MAX_VALUE,10); // Initialize internal variables. parmStr = ""; wiz = wizard; // Add the components. addField(numSampField); addField(maxSeqField); addField(maxNumField); } //--------------------------------------------------------------------------- // checkParms() checks the validity of the parameter values, and returns a // description of the error. // // No error: checkParms() returns empty string // Warning : checkParms() returns warning message (non-empty string) // getParms() returns command line segment (non-empty string) // Error : checkParms() returns error message (non-empty string) // getParms() returns empty string //--------------------------------------------------------------------------- public String checkParms() { long numSamp; long maxNum; long maxSeq; String errorMsg; long limit; // Check parameters for errors and concatenate error messages. errorMsg = numSampField.checkParm() + maxSeqField.checkParm() + maxNumField.checkParm(); // If error exists, set command line translation to empty string and // return the error message. if (errorMsg.length() > 0) { parmStr = ""; return errorMsg; } // Translate the parameters into command line segment and cache it. parmStr = numSampField.getParmString() + " " + maxSeqField.getParmString() + " " + maxNumField.getParmString(); // Get the numerical values of the parameters. numSamp = numSampField.getParmValue(); maxNum = maxNumField.getParmValue(); maxSeq = maxSeqField.getParmValue(); limit = wiz.maxTestMemory * wiz.KILO_BYTE / 4; // Create a warning message if memory used by the test will exceed // the memory constraint. if (maxSeq > limit) { errorMsg += "WARNING: memory constraint exceeded\n" + " make sure " + "\n"; } return errorMsg; } //--------------------------------------------------------------------------- // getParms() translates the user-specified parameters into a command line // segment, and returns it in a string. // NOTE: Before calling getParms(), call checkParms() first. //--------------------------------------------------------------------------- public String getParms() { // Return the cached translation. return parmStr; } } SHAR_EOF fi # end of overwriting check if test -f 'DecParmField.java' then echo shar: will not over-write existing file "'DecParmField.java'" else cat << "SHAR_EOF" > 'DecParmField.java' /******************************************************************************* DecParmField class *******************************************************************************/ //****************************************************************************** // DecParmField class defines a parameter field for entering decimal numbers. //****************************************************************************** public class DecParmField extends ParmField { //--------------------------------------------------------------------------- // Minimum and maximum on allowed values. protected double minValue; protected double maxValue; // Default value. protected double defaultValue; // Value of the parameter. protected double parmVal; //*************************************************************************** // The constructor constructs DecParmField with title , minimum // allowed value , maximum allowed value and default value. //--------------------------------------------------------------------------- public DecParmField(String parmName, double min, double max,double def) { super(parmName); minValue = min; maxValue = max; defaultValue = def; } //--------------------------------------------------------------------------- // The constructor constructs DecParmField with title , minimum // allowed value , and maximum allowed value . //--------------------------------------------------------------------------- public DecParmField(String parmName, double min, double max) { this(parmName, min, max, 0.0); } //--------------------------------------------------------------------------- // Assigns the default value to the parameter. //--------------------------------------------------------------------------- public void setDefault() { super.entryField.setText(Double.toString(defaultValue)); // Update the internal variable. parmVal = defaultValue; } //--------------------------------------------------------------------------- // checkParm() checks the validity of the parameter value, and returns a // description of the error. Empty string indicates no error. //--------------------------------------------------------------------------- public String checkParm() { try { // Convert the parameter string into a double. parmVal = Double.valueOf(super.entryField.getText()) .doubleValue(); } catch (NumberFormatException e) { // The parameter string cannot be interpreted as a double. return "ERROR: " + getParmTitle() + " must be a real\n"; } // Check if the parameter value is outside the max/min limits. if ((parmVal < minValue) || (parmVal >= maxValue)) { return "ERROR: make sure " + minValue + " <= " + getParmTitle() + " < " + maxValue + "\n"; } return ""; } //--------------------------------------------------------------------------- // setParm() sets the parameter to . //--------------------------------------------------------------------------- public void setParm(double theValue) { // Update the screen. super.entryField.setText(Double.toString(theValue)); // Update the internal variable. parmVal = theValue; } //--------------------------------------------------------------------------- // getParmValue() returns the parameter as a double. // NOTE: Before calling getParmValue(), call checkParm() first. //--------------------------------------------------------------------------- public double getParmValue() { return parmVal; } } SHAR_EOF fi # end of overwriting check if test -f 'EquidistPanel.java' then echo shar: will not over-write existing file "'EquidistPanel.java'" else cat << "SHAR_EOF" > 'EquidistPanel.java' /******************************************************************************* EquidistPanel class *******************************************************************************/ //****************************************************************************** // EquidistPanel class defines a panel for entering and translating parameters // of "Equidistribution Test". //****************************************************************************** public class EquidistPanel extends ParmGrpPanel { //--------------------------------------------------------------------------- // Parameter field for number of divisions. protected IntParmField numDivnField; // Parameter field for number of samples. protected IntParmField numSampField; // The command line translation of the parameters. protected String parmStr; // Owner of this panel. protected TestWizard wiz; //*************************************************************************** // The constructor constructs EquidistPanel with owner . //--------------------------------------------------------------------------- public EquidistPanel(TestWizard wizard) { // Set up a group panel that will contain two parameter fields. super("Equidistribution Test", 2); // Set the command line id. super.cmdId = "equidist"; // Create the parameter fields. numDivnField = new IntParmField(" Number of Bins", 2, Integer.MAX_VALUE, 100); numSampField = new IntParmField("Number of Random Numbers", 1, Integer.MAX_VALUE,1000000); // Initialize internal variables. parmStr = ""; wiz = wizard; // Add the components. addField(numDivnField); addField(numSampField); } //--------------------------------------------------------------------------- // checkParms() checks the validity of the parameter values, and returns a // description of the error. // // No error: checkParms() returns empty string // Warning : checkParms() returns warning message (non-empty string) // getParms() returns command line segment (non-empty string) // Error : checkParms() returns error message (non-empty string) // getParms() returns empty string //--------------------------------------------------------------------------- public String checkParms() { String errorMsg; long numDivn; long numSamp; long limit; // Check parameters for errors and concatenate error messages. errorMsg = numDivnField.checkParm() + numSampField.checkParm(); // If error exists, set command line translation to empty string and // return the error message. if (errorMsg.length() > 0) { parmStr = ""; return errorMsg; } // Translate the parameters into command line segment and cache it. parmStr = numDivnField.getParmString() + " " + numSampField.getParmString(); // Get the numerical values of the parameters. numDivn = numDivnField.getParmValue(); numSamp = numSampField.getParmValue(); // Create a warning message if the sampling requirement "minimum of 5 // in the least likely bin" is not met. if (numSamp/numDivn < 5) { errorMsg += "WARNING: sampling requirement not met\n" + " make sure " + numSampField.getParmTitle() + " >= " + numDivnField.getParmTitle() + " * 5\n"; } limit = wiz.maxTestMemory * wiz.KILO_BYTE / 4; // Create a warning message if memory used by the test will exceed // the memory constraint. if (numDivn > limit) { errorMsg += "WARNING: memory constraint exceeded\n" + " make sure " + numDivnField.getParmTitle() + " <= " + limit + "\n"; } return errorMsg; } //--------------------------------------------------------------------------- // getParms() translates the user-specified parameters into a command line // segment, and returns it in a string. // NOTE: Before calling getParms(), call checkParms() first. //--------------------------------------------------------------------------- public String getParms() { // Return the cached translation. return parmStr; } } SHAR_EOF fi # end of overwriting check if test -f 'GapPanel.java' then echo shar: will not over-write existing file "'GapPanel.java'" else cat << "SHAR_EOF" > 'GapPanel.java' /******************************************************************************* GapPanel class *******************************************************************************/ //****************************************************************************** // GapPanel class defines a panel for entering and translating parameters of // "Gap Test". //****************************************************************************** public class GapPanel extends ParmGrpPanel { //--------------------------------------------------------------------------- // Parameter field for maximum gap length. protected IntParmField maxGapLenField; // Parameter field for number of samples. protected IntParmField numSampField; // Parameter fields for the lower and upper bound. protected DecParmField lowerBoundField; protected DecParmField upperBoundField; // The command line translation of the parameters. protected String parmStr; // Owner of this panel. protected TestWizard wiz; //*************************************************************************** // The constructor constructs PermPanel with owner . //--------------------------------------------------------------------------- public GapPanel(TestWizard wizard) { // Set up a group panel that will contain four parameter fields. super("Gap Test", 4); // Set the command line id. super.cmdId = "gap"; // Create the parameter fields. maxGapLenField = new IntParmField("Maximum Gap Length", 2, Integer.MAX_VALUE,20); numSampField = new IntParmField(" Number of Gaps", 1, Integer.MAX_VALUE,100000); lowerBoundField = new DecParmField(" Lower Bound", 0.0, 1.0, 0.5); upperBoundField = new DecParmField(" Upper Bound", 0.0, 1.0, 0.6); // Initialize internal variables. parmStr = ""; wiz = wizard; // Add the components. addField(maxGapLenField); addField(lowerBoundField); addField(upperBoundField); addField(numSampField); } //--------------------------------------------------------------------------- // checkParms() checks the validity of the parameter values, and returns a // description of the error. // // No error: checkParms() returns empty string // Warning : checkParms() returns warning message (non-empty string) // getParms() returns command line segment (non-empty string) // Error : checkParms() returns error message (non-empty string) // getParms() returns empty string //--------------------------------------------------------------------------- public String checkParms() { long maxGapLen; double lowerBound; double upperBound; long numSamp; String errorMsg; double prob; double binProb; long limit; // Check parameters for errors and concatenate error messages. errorMsg = maxGapLenField.checkParm() + lowerBoundField.checkParm() + upperBoundField.checkParm() + numSampField.checkParm(); // If error exists, set command line translation to empty string and // return the error message. if (errorMsg.length() > 0) { parmStr = ""; return errorMsg; } // Get the numerical values of the parameters. maxGapLen = maxGapLenField.getParmValue(); lowerBound = lowerBoundField.getParmValue(); upperBound = upperBoundField.getParmValue(); numSamp = numSampField.getParmValue(); // Set command line translation to empty string and return an error // message if the lower bound is not smaller than the upper bound. if (lowerBound >= upperBound) { parmStr = ""; return "ERROR: make sure " + lowerBoundField.getParmTitle() + " < " + upperBoundField.getParmTitle(); } // Translate the parameters into command line segment and cache it. parmStr = maxGapLenField.getParmString() + " " + lowerBoundField.getParmString() + " " + upperBoundField.getParmString() + " " + numSampField.getParmString(); // Find the probability of the least likely bin. prob = upperBound - lowerBound; if (prob < 0.5) { binProb = Math.pow((1-prob), maxGapLen) * prob; } else { binProb = Math.pow((1-prob), maxGapLen+1); } // Create a warning message if the sampling requirement "minimum of 5 // in the least likely bin" is not met. if (binProb * numSamp < 5) { errorMsg += "WARNING: sampling requirement not met\n" + " make sure the least likely bin will have " + "at least 5 samples on the average\n"; } // Create a warning message if memory used by the test will exceed // the memory constraint. limit = wiz.maxTestMemory * wiz.KILO_BYTE / 4; if (maxGapLen+2 > limit) { errorMsg += "WARNING: memory constraint exceeded\n" + " make sure " + maxGapLenField.getParmTitle() + " <= " + (limit-2) + "\n"; } return errorMsg; } //--------------------------------------------------------------------------- // getParms() translates the user-specified parameters into a command line // segment, and returns it in a string. // NOTE: Before calling getParms(), call checkParms() first. //--------------------------------------------------------------------------- public String getParms() { // Return the cached translation. return parmStr; } } SHAR_EOF fi # end of overwriting check if test -f 'IntParmField.java' then echo shar: will not over-write existing file "'IntParmField.java'" else cat << "SHAR_EOF" > 'IntParmField.java' /******************************************************************************* IntParmField class *******************************************************************************/ //****************************************************************************** // IntParmField class defines a parameter field for entering integers. //****************************************************************************** public class IntParmField extends ParmField { //--------------------------------------------------------------------------- // Minimum and maximum on allowed values. protected long minValue; protected long maxValue; // Default value. protected long defaultValue; // Value of the parameter. protected long parmVal; //*************************************************************************** // The constructor constructs IntParmField with title , minimum // allowed value , maximum allowed value , and default value. //--------------------------------------------------------------------------- public IntParmField(String parmName, long min, long max, long def) { super(parmName); minValue = min; maxValue = max; defaultValue = def; } //--------------------------------------------------------------------------- // The constructor constructs IntParmField with title , minimum // allowed value , maximum allowed value , and default value. //--------------------------------------------------------------------------- public IntParmField(String parmName, long min, long max) { this(parmName, min, max, 0); } //--------------------------------------------------------------------------- // Assigns the default value to the parameter. //--------------------------------------------------------------------------- public void setDefault() { super.entryField.setText(Long.toString(defaultValue)); // Update the internal variable. parmVal = defaultValue; } //--------------------------------------------------------------------------- // checkParm() checks the validity of the parameter value, and returns a // description of the error. Empty string indicates no error. //--------------------------------------------------------------------------- public String checkParm() { try { // Convert the parameter string into a long integer. parmVal = Long.parseLong(super.entryField.getText()); } catch (NumberFormatException e) { // The parameter string cannot be interpreted as a long integer. return "ERROR: " + getParmTitle() + " must be an integer\n"; } // Check if the parameter value is outside the max/min limits. if ((parmVal < minValue) || (parmVal > maxValue)) { return "ERROR: make sure " + minValue + " <= " + getParmTitle() + " <= " + maxValue + "\n"; } return ""; } //--------------------------------------------------------------------------- // setParm() sets the parameter to . //--------------------------------------------------------------------------- public void setParm(long theValue) { super.entryField.setText(Long.toString(theValue)); parmVal = theValue; } //--------------------------------------------------------------------------- // getParmValue() returns the parameter as a long integer. // NOTE: Before calling getParmValue(), call checkParm() first. //--------------------------------------------------------------------------- public long getParmValue() { return parmVal; } } SHAR_EOF fi # end of overwriting check if test -f 'LcgPanel.java' then echo shar: will not over-write existing file "'LcgPanel.java'" else cat << "SHAR_EOF" > 'LcgPanel.java' /******************************************************************************* LcgPanel class *******************************************************************************/ //****************************************************************************** // LcgPanel class defines a panel for entering and translating parameters of // "48 bit Linear Congruential Generator". //****************************************************************************** public class LcgPanel extends ParmGrpPanel { //--------------------------------------------------------------------------- // Parameter field for number of logical streams. protected IntParmField numLogicStrmField; // Parameter field for number of real streams per logical stream. protected IntParmField numRealStrmField; // Parameter field for generator seed. protected IntParmField seedField; // Parameter field for generator type. protected IntParmField genTypeField; // Number of tests per logical stream protected IntParmField ntestsField; // skip n random numbers between each test on the same stream. protected IntParmField skipField; // The command line translation of the parameters. protected String parmStr; // Owner of this panel. protected TestWizard wiz; //*************************************************************************** // The constructor constructs LcgPanel with owner . //--------------------------------------------------------------------------- public LcgPanel(TestWizard wizard) { // Set up a group panel that will contain six parameter fields. super("48 bit Linear Congruential Generator (lcg)", 6); // Set the command line id. super.cmdId = "lcg"; // Create the parameter fields. numLogicStrmField = new IntParmField( "Number of Logical Streams", 1, Integer.MAX_VALUE,1); numRealStrmField = new IntParmField( "Combine how many real streams to create a logical stream?", 1, Integer.MAX_VALUE,1); seedField = new IntParmField( " Generator Seed", 0, Integer.MAX_VALUE,0); genTypeField = new IntParmField( " Generator Parameter", 0, 7,0); ntestsField = new IntParmField("Tests per logical stream", 0, Integer.MAX_VALUE,1); skipField = new IntParmField("Skip ? random numbers each test.(Set this to 0.)", 0, 7,0); // Initialize internal variables. parmStr = ""; wiz = wizard; // Add the components. addField(numLogicStrmField); addField(numRealStrmField); addField(seedField); addField(genTypeField); addField(ntestsField); addField(skipField); } //--------------------------------------------------------------------------- // checkParms() checks the validity of the parameter values, and returns a // description of the error. // // No error: checkParms() returns empty string // Warning : checkParms() returns warning message (non-empty string) // getParms() returns command line segment (non-empty string) // Error : checkParms() returns error message (non-empty string) // getParms() returns empty string //--------------------------------------------------------------------------- public String checkParms() { String errorMsg; // Check parameters for errors and concatenate error messages. errorMsg = numLogicStrmField.checkParm() + numRealStrmField.checkParm() + seedField.checkParm() + genTypeField.checkParm() + ntestsField.checkParm() + skipField.checkParm(); // If error exists, set command line translation to empty string and // return the error message. if (errorMsg.length() > 0) { parmStr = ""; return errorMsg; } // Translate the parameters into command line segment and cache it. parmStr = numLogicStrmField.getParmString() + " " + numRealStrmField.getParmString() + " " + seedField.getParmString() + " " + genTypeField.getParmString() + " " + ntestsField.getParmString() + " " + skipField.getParmString(); return errorMsg; } //--------------------------------------------------------------------------- // getParms() translates the user-specified parameters into a command line // segment, and returns it in a string. // NOTE: Before calling getParms(), call checkParms() first. //--------------------------------------------------------------------------- public String getParms() { // Return the cached translation. return parmStr; } } SHAR_EOF fi # end of overwriting check if test -f 'LfgPanel.java' then echo shar: will not over-write existing file "'LfgPanel.java'" else cat << "SHAR_EOF" > 'LfgPanel.java' /******************************************************************************* LfgPanel class *******************************************************************************/ //****************************************************************************** // LfgPanel class defines a panel for entering and translating parameters of // "Lagged Fibonacci Generator". //****************************************************************************** public class LfgPanel extends ParmGrpPanel { //--------------------------------------------------------------------------- // Parameter field for number of logical streams. protected IntParmField numLogicStrmField; // Parameter field for number of real streams per logical stream. protected IntParmField numRealStrmField; // Parameter field for generator seed. protected IntParmField seedField; // Parameter field for generator type. protected IntParmField genTypeField; // Number of tests per logical stream protected IntParmField ntestsField; // skip n random numbers between each test on the same stream. protected IntParmField skipField; // The command line translation of the parameters. protected String parmStr; // Owner of this panel. protected TestWizard wiz; //*************************************************************************** // The constructor constructs LfgPanel with owner . //--------------------------------------------------------------------------- public LfgPanel(TestWizard wizard) { // Set up a group panel that will contain six parameter fields. super("Lagged Fibonacci Generator (LFG)", 6); // Set the command line id. super.cmdId = "lfg"; // Create the parameter fields. numLogicStrmField = new IntParmField( "Number of Logical Streams", 1, Integer.MAX_VALUE,1); numRealStrmField = new IntParmField( "Combine how many real streams to create a logical stream?", 1, Integer.MAX_VALUE,1); seedField = new IntParmField( " Generator Seed", 0, Integer.MAX_VALUE,0); genTypeField = new IntParmField( " Generator Parameter", 0, 7,0); ntestsField = new IntParmField("Tests per logical stream", 0, Integer.MAX_VALUE,1); skipField = new IntParmField("Skip ? random numbers each test.(Set this to 0.)", 0, 7,0); // Initialize internal variables. parmStr = ""; wiz = wizard; // Add the components. addField(numLogicStrmField); addField(numRealStrmField); addField(seedField); addField(genTypeField); addField(ntestsField); addField(skipField); } //--------------------------------------------------------------------------- // checkParms() checks the validity of the parameter values, and returns a // description of the error. // // No error: checkParms() returns empty string // Warning : checkParms() returns warning message (non-empty string) // getParms() returns command line segment (non-empty string) // Error : checkParms() returns error message (non-empty string) // getParms() returns empty string //--------------------------------------------------------------------------- public String checkParms() { String errorMsg; // Check parameters for errors and concatenate error messages. errorMsg = numLogicStrmField.checkParm() + numRealStrmField.checkParm() + seedField.checkParm() + genTypeField.checkParm() + ntestsField.checkParm() + skipField.checkParm(); // If error exists, set command line translation to empty string and // return the error message. if (errorMsg.length() > 0) { parmStr = ""; return errorMsg; } // Translate the parameters into command line segment and cache it. parmStr = numLogicStrmField.getParmString() + " " + numRealStrmField.getParmString() + " " + seedField.getParmString() + " " + genTypeField.getParmString() + " " + ntestsField.getParmString() + " " + skipField.getParmString(); return errorMsg; } //--------------------------------------------------------------------------- // getParms() translates the user-specified parameters into a command line // segment, and returns it in a string. // NOTE: Before calling getParms(), call checkParms() first. //--------------------------------------------------------------------------- public String getParms() { // Return the cached translation. return parmStr; } } SHAR_EOF fi # end of overwriting check if test -f 'MaxtPanel.java' then echo shar: will not over-write existing file "'MaxtPanel.java'" else cat << "SHAR_EOF" > 'MaxtPanel.java' /******************************************************************************* MaxtPanel class *******************************************************************************/ //****************************************************************************** // MaxtPanel class defines a panel for entering and translating parameters of // "Maxt Test". //****************************************************************************** public class MaxtPanel extends ParmGrpPanel { //--------------------------------------------------------------------------- // Parameter field for block length. protected IntParmField blockLengthField; // Parameter field for number of blocks. protected IntParmField numSampField; // The command line translation of the parameters. protected String parmStr; // Owner of this panel. protected TestWizard wiz; //*************************************************************************** // The constructor constructs PermPanel with owner . //--------------------------------------------------------------------------- public MaxtPanel(TestWizard wizard) { // Set up a group panel that will contain two parameter fields. super("Maxt Test", 2); // Set the command line id. super.cmdId = "maxt"; // Create the parameter fields. numSampField = new IntParmField("Numbers of blocks", 2, Integer.MAX_VALUE,100000); blockLengthField = new IntParmField("Length of each block", 2, Integer.MAX_VALUE,10); // Initialize internal variables. parmStr = ""; wiz = wizard; // Add the components. addField(numSampField); addField(blockLengthField); } //--------------------------------------------------------------------------- // checkParms() checks the validity of the parameter values, and returns a // description of the error. // // No error: checkParms() returns empty string // Warning : checkParms() returns warning message (non-empty string) // getParms() returns command line segment (non-empty string) // Error : checkParms() returns error message (non-empty string) // getParms() returns empty string //--------------------------------------------------------------------------- public String checkParms() { long numSamp; long blockLength; String errorMsg; long limit; // Check parameters for errors and concatenate error messages. errorMsg = numSampField.checkParm() + blockLengthField.checkParm(); // If error exists, set command line translation to empty string and // return the error message. if (errorMsg.length() > 0) { parmStr = ""; return errorMsg; } // Translate the parameters into command line segment and cache it. parmStr = numSampField.getParmString() + " " + blockLengthField.getParmString(); // Get the numerical values of the parameters. numSamp = numSampField.getParmValue(); blockLength = blockLengthField.getParmValue(); limit = wiz.maxTestMemory * wiz.KILO_BYTE / 4; // Create a warning message if memory used by the test will exceed // the memory constraint. if (numSamp > limit) { errorMsg += "WARNING: memory constraint exceeded\n" + " make sure " + "\n"; } return errorMsg; } //--------------------------------------------------------------------------- // getParms() translates the user-specified parameters into a command line // segment, and returns it in a string. // NOTE: Before calling getParms(), call checkParms() first. //--------------------------------------------------------------------------- public String getParms() { // Return the cached translation. return parmStr; } } SHAR_EOF fi # end of overwriting check if test -f 'OutputFrame.java' then echo shar: will not over-write existing file "'OutputFrame.java'" else cat << "SHAR_EOF" > 'OutputFrame.java' /******************************************************************************* OutputFrame class *******************************************************************************/ import java.awt.*; //****************************************************************************** // OutputFrame class defines a frame that includes a message text area and a // command line text field for output. //****************************************************************************** public class OutputFrame extends Frame { //--------------------------------------------------------------------------- // Message area. protected TextArea msgArea; // Command line text field. protected TextField cmdLnField; // Button for closing the window. protected Button closeButton; // Owner of this frame. protected TestWizard wiz; //*************************************************************************** // The constructor constructs OutputFrame with owner . //--------------------------------------------------------------------------- public OutputFrame(TestWizard wizard) { super(TestWizard.APP_NAME+": Output"); // Synchronize with the owner's font. setFont(wizard.getFont()); // Add the components. add("Center", createMsgPanel()); add("South", createCmdPanel()); // The size of limits the minimal pack size. pack(); // Remember the owner. wiz = wizard; } //--------------------------------------------------------------------------- // insets() customizes this frame's insets. //--------------------------------------------------------------------------- public Insets insets() { Insets oldVal = super.insets(); // Increase from default value by 5. return new Insets(oldVal.top + 5, oldVal.left + 5, oldVal.bottom + 5, oldVal.right + 5); } //--------------------------------------------------------------------------- // handleEvent() catches "close window" event, then hides this frame. //--------------------------------------------------------------------------- public boolean handleEvent(Event eve) { if (eve.id == Event.WINDOW_DESTROY) { hide(); return true; } return super.handleEvent(eve); } //--------------------------------------------------------------------------- // action() catches events on the button, then hides this frame. //--------------------------------------------------------------------------- public boolean action(Event event, Object arg) { // Check if there is action on the button. if (event.target == closeButton) { hide(); return true; } return super.action(event, arg); } //--------------------------------------------------------------------------- // setText() copies into the message text area and into // the command line text field. //--------------------------------------------------------------------------- public void setText(String message, String command) { msgArea.setText(message); cmdLnField.setText(command); } //*************************************************************************** // createMsgPanel() creates a panel that contains the message area. //--------------------------------------------------------------------------- protected Panel createMsgPanel() { Panel msgPanel; Panel namePanel; // Create a panel that contains the title of the message area. namePanel = new Panel(); namePanel.setLayout(new BorderLayout()); namePanel.add("West", new Label("Messages")); // Create the message text area. msgArea = new TextArea(15,50); // Create a panel that will contain the message area and the title. msgPanel = new Panel(); msgPanel.setLayout(new BorderLayout()); // Add in the components. msgPanel.add("North", namePanel); msgPanel.add("Center", msgArea); return msgPanel; } //--------------------------------------------------------------------------- // createCmdPanel() creates a panel that contains the command line text field // and the "Close" button. //--------------------------------------------------------------------------- protected Panel createCmdPanel() { Panel cmdPanel; Panel namePanel; Panel buttonPanel; // Create a panel that contains the title of the command line. namePanel = new Panel(); namePanel.setLayout(new BorderLayout()); namePanel.add("West", new Label("Command Line")); // Create the command line text field. cmdLnField = new TextField(); // Create a panel that contains the "Close" button. buttonPanel = new Panel(); buttonPanel.setLayout(new GridLayout(1,3)); // Add dummy labels to space the button right. buttonPanel.add(new Label()); buttonPanel.add(new Label()); // Create and add in the button. closeButton = new Button("Close"); buttonPanel.add(closeButton); // Create a panel that will contain the command line text field and the // button. cmdPanel = new Panel(); cmdPanel.setLayout(new BorderLayout()); // Add in the components. cmdPanel.add("North", namePanel); cmdPanel.add("Center", cmdLnField); cmdPanel.add("South", buttonPanel); return cmdPanel; } } SHAR_EOF fi # end of overwriting check if test -f 'ParmField.java' then echo shar: will not over-write existing file "'ParmField.java'" else cat << "SHAR_EOF" > 'ParmField.java' /******************************************************************************* ParmField class *******************************************************************************/ import java.awt.*; //****************************************************************************** // ParmField class defines the basic behavior and GUI structure of a parameter // field, which includes a label, a text field, and a button called "Random". //****************************************************************************** public abstract class ParmField extends Panel { //--------------------------------------------------------------------------- // Label of the parameter. protected Label parmLabel; // Text field where user can enter value for the parameter. protected TextField entryField; // "Default" button. protected Button defaultButton; // Ratio of (default text field length) / (parameter label length). protected final static double RATIO = 1.0; //*************************************************************************** // The constructor constructs ParmField with title . //--------------------------------------------------------------------------- public ParmField(String parmName) { // Change layout manager to BorderLayout. setLayout(new BorderLayout()); // Create the label, the text field, and the button. parmLabel = new Label(parmName); // Default text field length is set to (parameter label length) * . entryField = new TextField(15); defaultButton = new Button("Default"); // Add the components. add("West", parmLabel); add("Center", entryField); add("East", defaultButton); } //--------------------------------------------------------------------------- // action() catches events on the button, then invokes default(). //--------------------------------------------------------------------------- public boolean action(Event event, Object arg) { // Check for action on the button. if (event.target == defaultButton) { setDefault(); return true; } return super.action(event, arg); } //--------------------------------------------------------------------------- // no_default() removes the button. //--------------------------------------------------------------------------- public void no_default() { remove(defaultButton); defaultButton = null; } //--------------------------------------------------------------------------- // getParmTitle() returns the name of the parameter. //--------------------------------------------------------------------------- public String getParmTitle() { return parmLabel.getText().trim(); } //--------------------------------------------------------------------------- // setDefault() assigns a default value to the parameter. //--------------------------------------------------------------------------- public abstract void setDefault(); //--------------------------------------------------------------------------- // checkParm() checks the validity of the parameter value, and returns a // description of the error. Empty string indicates no error. //--------------------------------------------------------------------------- public abstract String checkParm(); //--------------------------------------------------------------------------- // getParmString() returns the parameter as a string. // NOTE: Before calling getParmString(), call checkParm() first. //--------------------------------------------------------------------------- public String getParmString() { return entryField.getText(); } } SHAR_EOF fi # end of overwriting check if test -f 'ParmGrpPanel.java' then echo shar: will not over-write existing file "'ParmGrpPanel.java'" else cat << "SHAR_EOF" > 'ParmGrpPanel.java' /******************************************************************************* ParmGrpPanel class *******************************************************************************/ import java.awt.*; //****************************************************************************** // ParmGrpPanel class defines the basic behavior and GUI structure of a group // of parmeter fields embedded in a panel. //****************************************************************************** public abstract class ParmGrpPanel extends Panel { //--------------------------------------------------------------------------- // Panel that contains the group of parameter fields. protected Panel parmPanel; // Command line id that is associated with this group of parameters. protected String cmdId; //*************************************************************************** // The constructor constructs ParmGrpPanel with title , that will // hold <numField> parameter fields. //--------------------------------------------------------------------------- public ParmGrpPanel(String title, int numField) { // Create a panel that contains the title of the parameter group. Panel namePanel = new Panel(); namePanel.add(new Label(title)); // Create the panel that will contain <numField> parameter fields. parmPanel = new Panel(); parmPanel.setLayout(new GridLayout(numField, 1)); // Change layout manager to BorderLayout. setLayout(new BorderLayout(0,10)); // Add the components. add("North", namePanel); add("South", parmPanel); } //--------------------------------------------------------------------------- // addField() adds the component <field>. //--------------------------------------------------------------------------- public void addField(Component field) { parmPanel.add(field); } //--------------------------------------------------------------------------- // getCmdId() returns the command line id associated with this group of // parameters. //--------------------------------------------------------------------------- public String getCmdId() { return cmdId; } //--------------------------------------------------------------------------- // checkParms() checks the validity of the parameter values, and returns a // description of the error. // // No error: checkParms() returns empty string // Warning : checkParms() returns warning message (non-empty string) // getParms() returns command line segment (non-empty string) // Error : checkParms() returns error message (non-empty string) // getParms() returns empty string //--------------------------------------------------------------------------- public abstract String checkParms(); //--------------------------------------------------------------------------- // getParms() translates the user-specified parameters into a command line // segment, and returns it in a string. // NOTE: Before calling getParms(), call checkParms() first. //--------------------------------------------------------------------------- public abstract String getParms(); } SHAR_EOF fi # end of overwriting check if test -f 'PermPanel.java' then echo shar: will not over-write existing file "'PermPanel.java'" else cat << "SHAR_EOF" > 'PermPanel.java' /******************************************************************************* PermPanel class *******************************************************************************/ //****************************************************************************** // PermPanel class defines a panel for entering and translating parameters of // "Permutation Test". //****************************************************************************** public class PermPanel extends ParmGrpPanel { //--------------------------------------------------------------------------- // Parameter field for group length. protected IntParmField grpLenField; // Parameter field for number of samples. protected IntParmField numSampField; // The command line translation of the parameters. protected String parmStr; // Owner of this panel. protected TestWizard wiz; //*************************************************************************** // The constructor constructs PermPanel with owner <wizard>. //--------------------------------------------------------------------------- public PermPanel(TestWizard wizard) { // Set up a group panel that will contain two parameter fields. super("Permutation Test", 2); // Set the command line id. super.cmdId = "perm"; // Create the parameter fields. grpLenField = new IntParmField("Length of Each Subsequence", 2, Integer.MAX_VALUE,5); numSampField = new IntParmField(" Number of Subsequences", 1, Integer.MAX_VALUE,200000); // Initialize internal variables. parmStr = ""; wiz = wizard; // Add the components. addField(grpLenField); addField(numSampField); } //--------------------------------------------------------------------------- // checkParms() checks the validity of the parameter values, and returns a // description of the error. // // No error: checkParms() returns empty string // Warning : checkParms() returns warning message (non-empty string) // getParms() returns command line segment (non-empty string) // Error : checkParms() returns error message (non-empty string) // getParms() returns empty string //--------------------------------------------------------------------------- public String checkParms() { long grpLen; long numSamp; String errorMsg; double numBins; long limit; // Check parameters for errors and concatenate error messages. errorMsg = grpLenField.checkParm() + numSampField.checkParm(); // If error exists, set command line translation to empty string and // return the error message. if (errorMsg.length() > 0) { parmStr = ""; return errorMsg; } // Translate the parameters into command line segment and cache it. parmStr = grpLenField.getParmString() + " " + numSampField.getParmString(); // Get the numerical values of the parameters. grpLen = grpLenField.getParmValue(); numSamp = numSampField.getParmValue(); // Use Sterling approximation to calculate the number of bins. numBins = Math.sqrt(2*Math.PI*grpLen) * Math.pow(grpLen/Math.E, grpLen); // Create a warning message if the sampling requirement "minimum of 5 // in the least likely bin" is not met. if (numSamp/numBins < 5) { errorMsg += "WARNING: sampling requirement not met\n" + " make sure " + numSampField.getParmTitle() + " >= (" + grpLenField.getParmTitle() + ")! * 5\n"; } limit = wiz.maxTestMemory * wiz.KILO_BYTE / 4; // Create a warning message if memory used by the test will exceed // the memory constraint. if (numBins > limit) { errorMsg += "WARNING: memory constraint exceeded\n" + " make sure (" + grpLenField.getParmTitle() + ")! <= " + limit + "\n"; } return errorMsg; } //--------------------------------------------------------------------------- // getParms() translates the user-specified parameters into a command line // segment, and returns it in a string. // NOTE: Before calling getParms(), call checkParms() first. //--------------------------------------------------------------------------- public String getParms() { // Return the cached translation. return parmStr; } } SHAR_EOF fi # end of overwriting check if test -f 'PokerPanel.java' then echo shar: will not over-write existing file "'PokerPanel.java'" else cat << "SHAR_EOF" > 'PokerPanel.java' /******************************************************************************* PokerPanel class *******************************************************************************/ //****************************************************************************** // PokerPanel class defines a panel for entering and translating parameters of // "Poker Test". //****************************************************************************** public class PokerPanel extends ParmGrpPanel { //--------------------------------------------------------------------------- // Parameter field for block length. protected IntParmField blockLengthField; // Parameter field for number of samples. protected IntParmField numSampField; // Parameter field for range of integers to generate. protected IntParmField maxNumField; // The command line translation of the parameters. protected String parmStr; // Owner of this panel. protected TestWizard wiz; //*************************************************************************** // The constructor constructs PermPanel with owner <wizard>. //--------------------------------------------------------------------------- public PokerPanel(TestWizard wizard) { // Set up a group panel that will contain three parameter fields. super("Poker Test", 3); // Set the command line id. super.cmdId = "poker"; // Create the parameter fields. numSampField = new IntParmField("Numbers of blocks", 2, Integer.MAX_VALUE,100000); blockLengthField = new IntParmField("Length of each block", 2, Integer.MAX_VALUE,10); maxNumField = new IntParmField("Generate integers in [0,?).", 2, Integer.MAX_VALUE,10); // Initialize internal variables. parmStr = ""; wiz = wizard; // Add the components. addField(numSampField); addField(blockLengthField); addField(maxNumField); } //--------------------------------------------------------------------------- // checkParms() checks the validity of the parameter values, and returns a // description of the error. // // No error: checkParms() returns empty string // Warning : checkParms() returns warning message (non-empty string) // getParms() returns command line segment (non-empty string) // Error : checkParms() returns error message (non-empty string) // getParms() returns empty string //--------------------------------------------------------------------------- public String checkParms() { long numSamp; long maxNum; long blockLength; String errorMsg; long limit; // Check parameters for errors and concatenate error messages. errorMsg = numSampField.checkParm() + blockLengthField.checkParm() + maxNumField.checkParm(); // If error exists, set command line translation to empty string and // return the error message. if (errorMsg.length() > 0) { parmStr = ""; return errorMsg; } // Translate the parameters into command line segment and cache it. parmStr = numSampField.getParmString() + " " + blockLengthField.getParmString() + " " + maxNumField.getParmString(); // Get the numerical values of the parameters. numSamp = numSampField.getParmValue(); maxNum = maxNumField.getParmValue(); blockLength = blockLengthField.getParmValue(); limit = wiz.maxTestMemory * wiz.KILO_BYTE / 4; // Create a warning message if memory used by the test will exceed // the memory constraint. if (blockLength > limit) { errorMsg += "WARNING: memory constraint exceeded\n" + " make sure " + "\n"; } return errorMsg; } //--------------------------------------------------------------------------- // getParms() translates the user-specified parameters into a command line // segment, and returns it in a string. // NOTE: Before calling getParms(), call checkParms() first. //--------------------------------------------------------------------------- public String getParms() { // Return the cached translation. return parmStr; } } SHAR_EOF fi # end of overwriting check if test -f 'PrefDialog.java' then echo shar: will not over-write existing file "'PrefDialog.java'" else cat << "SHAR_EOF" > 'PrefDialog.java' /******************************************************************************* PrefDialog class *******************************************************************************/ import java.awt.*; //****************************************************************************** // PrefDialog class defines a dialog window where user can adjust preferences. //****************************************************************************** public class PrefDialog extends Dialog { //--------------------------------------------------------------------------- // Text fields for adjusting maximum test memory and maximum generator // memory. protected IntParmField maxTestMemField; protected IntParmField maxGenMemField; // Usual buttons. protected Button okButton; protected Button cancelButton; // Owner of this dialog. protected TestWizard wiz; //*************************************************************************** // The constructor constructs PrefDialog with owner <wizard>. //--------------------------------------------------------------------------- public PrefDialog(TestWizard wizard) { // Create a modal dialog. super(wizard, TestWizard.APP_NAME+": Preferences", true); // Change layout manager to BoarderLayout. setLayout(new BorderLayout(0,20)); // Remember the owner. wiz = wizard; // Add the components. add("North", createInputPanel()); add("South", createButtonPanel()); } //--------------------------------------------------------------------------- // insets() customizes this dialog's insets. //--------------------------------------------------------------------------- public Insets insets() { Insets oldVal = super.insets(); // Increase from default value by 5. return new Insets(oldVal.top + 10, oldVal.left + 10, oldVal.bottom + 10, oldVal.right + 10); } //--------------------------------------------------------------------------- // action() catches events on the buttons, then makes sure any adjustment on // the preferences are valid and close the dialog window. //--------------------------------------------------------------------------- public boolean action(Event eve, Object arg) { if (eve.target == okButton) { // Check for errors before accepting the new preference settings. if (maxTestMemField.checkParm().length() == 0) { wiz.maxTestMemory = maxTestMemField.getParmValue(); } if (maxGenMemField.checkParm().length() == 0) { wiz.maxGenMemory = maxGenMemField.getParmValue(); } // Close and destroy the dialog window. hide(); dispose(); return true; } if (eve.target == cancelButton) { // Close and destroy the dialog window. hide(); dispose(); return true; } return super.action(eve, arg); } //*************************************************************************** // createInputPanel() creates a panel that contains the text fields for // adjusting preferences //--------------------------------------------------------------------------- protected Panel createInputPanel() { Panel inputPanel; // Create preference text fields. maxTestMemField = new IntParmField(" Maximum Test Memory (KBytes)", 1, Integer.MAX_VALUE); maxGenMemField = new IntParmField("Maximum Generator Memory (KBytes)", 1, Integer.MAX_VALUE); // Remove the "Random" button and display current preference values. maxTestMemField.no_default(); maxTestMemField.setParm(wiz.maxTestMemory); maxGenMemField.no_default(); maxGenMemField.setParm(wiz.maxGenMemory); // Create the panel that will contain the preference fields. inputPanel = new Panel(); inputPanel.setLayout(new GridLayout(2,1)); // Add in the preference fields. inputPanel.add(maxTestMemField); inputPanel.add(maxGenMemField); return inputPanel; } //--------------------------------------------------------------------------- // createButtonPanel() creates a panel that contains the buttons. //--------------------------------------------------------------------------- protected Panel createButtonPanel() { Panel buttonPanel; // Create the buttons. okButton = new Button("OK"); cancelButton = new Button("Cancel"); // Create the panel that will contain the buttons. buttonPanel = new Panel(); buttonPanel.setLayout(new GridLayout(1,5,5,0)); // Add in dummy labels for spacing. buttonPanel.add(new Label()); buttonPanel.add(new Label()); // Add in the buttons. buttonPanel.add(okButton); buttonPanel.add(cancelButton); return buttonPanel; } } SHAR_EOF fi # end of overwriting check if test -f 'RunsPanel.java' then echo shar: will not over-write existing file "'RunsPanel.java'" else cat << "SHAR_EOF" > 'RunsPanel.java' /******************************************************************************* RunsPanel class *******************************************************************************/ //****************************************************************************** // RunsPanel class defines a panel for entering and translating parameters of // "Runs Test". //****************************************************************************** public class RunsPanel extends ParmGrpPanel { //--------------------------------------------------------------------------- // Parameter field for maximum run length. protected IntParmField maxRunLenField; // Parameter field for number of samples. protected IntParmField numSampField; // The command line translation of the parameters. protected String parmStr; // Owner of this panel. protected TestWizard wiz; //*************************************************************************** // The constructor constructs PermPanel with owner <wizard>. //--------------------------------------------------------------------------- public RunsPanel(TestWizard wizard) { // Set up a group panel that will contain two parameter fields. super("Runs Test", 2); // Set the command line id. super.cmdId = "runs"; // Create the parameter fields. maxRunLenField = new IntParmField("Maximum Run Length", 2, Integer.MAX_VALUE,7); numSampField = new IntParmField(" Number of Runs", 1, Integer.MAX_VALUE,600000); // Initialize internal variables. parmStr = ""; wiz = wizard; // Add the components. addField(maxRunLenField); addField(numSampField); } //--------------------------------------------------------------------------- // checkParms() checks the validity of the parameter values, and returns a // description of the error. // // No error: checkParms() returns empty string // Warning : checkParms() returns warning message (non-empty string) // getParms() returns command line segment (non-empty string) // Error : checkParms() returns error message (non-empty string) // getParms() returns empty string //--------------------------------------------------------------------------- public String checkParms() { long maxRunLen; long numSamp; String errorMsg; double binProb; long limit; // Check parameters for errors and concatenate error messages. errorMsg = maxRunLenField.checkParm() + numSampField.checkParm(); // If error exists, set command line translation to empty string and // return the error message. if (errorMsg.length() > 0) { parmStr = ""; return errorMsg; } // Translate the parameters into command line segment and cache it. parmStr = maxRunLenField.getParmString() + " " + numSampField.getParmString(); // Get the numerical values of the parameters. maxRunLen = maxRunLenField.getParmValue(); numSamp = numSampField.getParmValue(); // <maxRunLen>! is calculated by using Sterling approximation. binProb = 1 / (Math.sqrt(2*Math.PI*maxRunLen) * Math.pow(maxRunLen/Math.E, maxRunLen)) / (maxRunLen+1); // Create a warning message if the sampling requirement "minimum of 5 // in the least likely bin" is not met. if (numSamp*binProb < 5) { errorMsg += "WARNING: sampling requirement not met\n" + " make sure the least likely bin will have " + "at least 5 samples on the average\n"; } limit = wiz.maxTestMemory * wiz.KILO_BYTE / 4; // Create a warning message if memory used by the test will exceed // the memory constraint. if (maxRunLen+1 > limit) { errorMsg += "WARNING: memory constraint exceeded\n" + " make sure " + maxRunLenField.getParmTitle() + " <= " + (limit-1) + "\n"; } return errorMsg; } //--------------------------------------------------------------------------- // getParms() translates the user-specified parameters into a command line // segment, and returns it in a string. // NOTE: Before calling getParms(), call checkParms() first. //--------------------------------------------------------------------------- public String getParms() { // Return the cached translation. return parmStr; } } SHAR_EOF fi # end of overwriting check if test -f 'SerialPanel.java' then echo shar: will not over-write existing file "'SerialPanel.java'" else cat << "SHAR_EOF" > 'SerialPanel.java' /******************************************************************************* SerialPanel class *******************************************************************************/ //****************************************************************************** // SerialPanel class defines a panel for entering and translating parameters of // "Serial Test". //****************************************************************************** public class SerialPanel extends ParmGrpPanel { //--------------------------------------------------------------------------- // Parameter field for number of divisions. protected IntParmField numDivnField; // Parameter field for number of samples. protected IntParmField numSampField; // The command line translation of the parameters. protected String parmStr; // Owner of this panel. protected TestWizard wiz; //*************************************************************************** // The constructor constructs SerialPanel with owner <wizard>. //--------------------------------------------------------------------------- public SerialPanel(TestWizard wizard) { // Set up a group panel that will contain two parameter fields. super("Serial Test", 2); // Set the command line id. super.cmdId = "serial"; // Create the parameter fields. numDivnField = new IntParmField("Generate integers in [0,?]", 2, Integer.MAX_VALUE,64); numSampField = new IntParmField(" Number of Pairs", 1, Integer.MAX_VALUE,500000); // Initialize internal variables. parmStr = ""; wiz = wizard; // Add the components. addField(numDivnField); addField(numSampField); } //--------------------------------------------------------------------------- // checkParms() checks the validity of the parameter values, and returns a // description of the error. // // No error: checkParms() returns empty string // Warning : checkParms() returns warning message (non-empty string) // getParms() returns command line segment (non-empty string) // Error : checkParms() returns error message (non-empty string) // getParms() returns empty string //--------------------------------------------------------------------------- public String checkParms() { String errorMsg; long numDivn; long numSamp; long limit; // Check parameters for errors and concatenate error messages. errorMsg = numDivnField.checkParm() + numSampField.checkParm(); // If error exists, set command line translation to empty string and // return the error message. if (errorMsg.length() > 0) { parmStr = ""; return errorMsg; } // Translate the parameters into command line segment and cache it. parmStr = numDivnField.getParmString() + " " + numSampField.getParmString(); // Get the numerical values of the parameters. numDivn = numDivnField.getParmValue(); numSamp = numSampField.getParmValue(); // Create a warning message if the sampling requirement "minimum of 5 // in the least likely bin" is not met. if (numSamp/(numDivn*numDivn) < 5) { errorMsg += "WARNING: sampling requirement not met\n" + " make sure " + numSampField.getParmTitle() + " >= " + numDivnField.getParmTitle() + "^2 * 5\n"; } limit = wiz.maxTestMemory * wiz.KILO_BYTE / 4; // Create a warning message if memory used by the test will exceed // the memory constraint. if (numDivn*numDivn > limit) { errorMsg += "WARNING: memory constraint exceeded\n" + " make sure " + numDivnField.getParmTitle() + "^2 <= " + limit + "\n"; } return errorMsg; } //--------------------------------------------------------------------------- // getParms() translates the user-specified parameters into a command line // segment, and returns it in a string. // NOTE: Before calling getParms(), call checkParms() first. //--------------------------------------------------------------------------- public String getParms() { // Return the cached translation. return parmStr; } } SHAR_EOF fi # end of overwriting check if test -f 'StartApplet.java' then echo shar: will not over-write existing file "'StartApplet.java'" else cat << "SHAR_EOF" > 'StartApplet.java' /******************************************************************************* StartApplet class *******************************************************************************/ import java.applet.*; import java.awt.*; //****************************************************************************** // StartApplet class provides the front-end where user can invoke TestWizard. //****************************************************************************** public class StartApplet extends Applet { //--------------------------------------------------------------------------- // Button for starting TestWizard. protected Button startButton; //*************************************************************************** // init() displays a button in the applet that will start TestWizard. //--------------------------------------------------------------------------- public void init() { startButton = new Button("Start "+TestWizard.APP_NAME); startButton.setFont(new Font("Courier", Font.ITALIC, 16)); startButton.setBackground(Color.pink); add(startButton); } //--------------------------------------------------------------------------- // action() catches events on the button, then starts TestWizard. //--------------------------------------------------------------------------- public boolean action(Event eve, Object arg) { if (eve.target == startButton) { TestWizard twiz = new TestWizard(); twiz.setFont(new Font("Courier", Font.PLAIN, 16)); twiz.resize(500,200); twiz.show(); return true; } return super.action(eve, arg); } } SHAR_EOF fi # end of overwriting check if test -f 'SumPanel.java' then echo shar: will not over-write existing file "'SumPanel.java'" else cat << "SHAR_EOF" > 'SumPanel.java' /******************************************************************************* SumPanel class *******************************************************************************/ //****************************************************************************** // SumPanel class defines a panel for entering and translating parameters of // "Sum Test". //****************************************************************************** public class SumPanel extends ParmGrpPanel { //--------------------------------------------------------------------------- // Parameter field for block length. protected IntParmField blockLengthField; // Parameter field for number of blocks. protected IntParmField numSampField; // The command line translation of the parameters. protected String parmStr; // Owner of this panel. protected TestWizard wiz; //*************************************************************************** // The constructor constructs PermPanel with owner <wizard>. //--------------------------------------------------------------------------- public SumPanel(TestWizard wizard) { // Set up a group panel that will contain two parameter fields. super("Sum Test", 2); // Set the command line id. super.cmdId = "sum"; // Create the parameter fields. numSampField = new IntParmField("Numbers of blocks", 2, Integer.MAX_VALUE,100000); blockLengthField = new IntParmField("Length of each block", 2, Integer.MAX_VALUE,10); // Initialize internal variables. parmStr = ""; wiz = wizard; // Add the components. addField(numSampField); addField(blockLengthField); } //--------------------------------------------------------------------------- // checkParms() checks the validity of the parameter values, and returns a // description of the error. // // No error: checkParms() returns empty string // Warning : checkParms() returns warning message (non-empty string) // getParms() returns command line segment (non-empty string) // Error : checkParms() returns error message (non-empty string) // getParms() returns empty string //--------------------------------------------------------------------------- public String checkParms() { long numSamp; long blockLength; String errorMsg; long limit; // Check parameters for errors and concatenate error messages. errorMsg = numSampField.checkParm() + blockLengthField.checkParm(); // If error exists, set command line translation to empty string and // return the error message. if (errorMsg.length() > 0) { parmStr = ""; return errorMsg; } // Translate the parameters into command line segment and cache it. parmStr = numSampField.getParmString() + " " + blockLengthField.getParmString(); // Get the numerical values of the parameters. numSamp = numSampField.getParmValue(); blockLength = blockLengthField.getParmValue(); limit = wiz.maxTestMemory * wiz.KILO_BYTE / 4; // Create a warning message if memory used by the test will exceed // the memory constraint. if (numSamp > limit) { errorMsg += "WARNING: memory constraint exceeded\n" + " make sure " + "\n"; } return errorMsg; } //--------------------------------------------------------------------------- // getParms() translates the user-specified parameters into a command line // segment, and returns it in a string. // NOTE: Before calling getParms(), call checkParms() first. //--------------------------------------------------------------------------- public String getParms() { // Return the cached translation. return parmStr; } } SHAR_EOF fi # end of overwriting check if test -f 'TestWizard.java' then echo shar: will not over-write existing file "'TestWizard.java'" else cat << "SHAR_EOF" > 'TestWizard.java' /******************************************************************************* TestWizard class *******************************************************************************/ import java.awt.*; //****************************************************************************** // TestWizard class provides the main interface where user specifies the test // parameters and obtains the command line translations. //****************************************************************************** public class TestWizard extends Frame { //--------------------------------------------------------------------------- // Menu items under "File" menu. protected MenuItem exitMI; // Menu items under "Test" menu. protected MenuItem eqdistrMI; protected MenuItem serialMI; protected MenuItem gapMI; protected MenuItem permMI; protected MenuItem runsMI; protected MenuItem collisionsMI; protected MenuItem couponMI; protected MenuItem maxtMI; protected MenuItem pokerMI; protected MenuItem sumMI; // Menu items under "Generator" menu. protected MenuItem lcgMI; protected MenuItem lfgMI; protected MenuItem lcg64MI; protected MenuItem cmrgMI; protected MenuItem pmlcgMI; // Menu items under "Options" menu. protected MenuItem prefMI; // Parameter panels for various tests and generators. protected ParmGrpPanel testParmPanel; protected ParmGrpPanel genParmPanel; // Button for invoking command line translation. protected Button translButton; // Output screen. protected OutputFrame outputScrn; // Preference screen. protected PrefDialog prefScrn; // Memory limits on tests and generators. protected long maxTestMemory; protected long maxGenMemory; // Official name for this application. public final static String APP_NAME = "Test Wizard"; // Conversion factor for kilobytes. public final static int KILO_BYTE = 1024; //*************************************************************************** // The constructor. //--------------------------------------------------------------------------- public TestWizard() { super(APP_NAME); // Change the layout manager to GridBagLayout. setLayout(new GridBagLayout()); // Add menu bar. setMenuBar(createMenuBar()); // Initialize components. testParmPanel = null; genParmPanel = null; translButton = new Button ("Translate"); outputScrn = null; prefScrn = null; // Default memory limits to 50Mbytes. maxTestMemory = 50000; maxGenMemory = 5000; } //--------------------------------------------------------------------------- // finalize() prints out a message. Used for debugging purpose only. //--------------------------------------------------------------------------- protected void finalize() throws Throwable { System.out.println("TestWizard::finalize()"); super.finalize(); } //--------------------------------------------------------------------------- // handleEvent() catches "close window" event, then invokes collapse(). //--------------------------------------------------------------------------- public boolean handleEvent(Event eve) { if (eve.id == Event.WINDOW_DESTROY) { collapse(); return true; } return super.handleEvent(eve); } //--------------------------------------------------------------------------- // action() catches events on the button and the menu bar. //--------------------------------------------------------------------------- public boolean action(Event eve, Object arg) { // Translate the parameters if the button is clicked. if (eve.target == translButton) { translate(); return true; } // Display the "Equidistribution Test" panel for that menu choice. if (eve.target == eqdistrMI) { // Create and add a new "Equidistribution Test" panel only if none is // displayed. if (!(testParmPanel instanceof EquidistPanel)) { testParmPanel = new EquidistPanel(this); adjustPanel(); } return true; } // Display the "Serial Test" panel for that menu choice. if (eve.target == serialMI) { // Create and add a new "Serial Test" panel only if none is displayed. if (!(testParmPanel instanceof SerialPanel)) { testParmPanel = new SerialPanel(this); adjustPanel(); } return true; } // Display the "Gap Test" panel for that menu choice. if (eve.target == gapMI) { // Create and add a new "Gap Test" panel only if none is displayed. if (!(testParmPanel instanceof GapPanel)) { testParmPanel = new GapPanel(this); adjustPanel(); } return true; } // Display the "Permutation Test" panel for that menu choice. if (eve.target == permMI) { // Create and add a new "Permutation Test" panel only if none is // displayed. if (!(testParmPanel instanceof PermPanel)) { testParmPanel = new PermPanel(this); adjustPanel(); } return true; } // Display the "Runs Test" panel for that menu choice. if (eve.target == runsMI) { // Create and add a new "Runs Test" panel only if none is displayed. if (!(testParmPanel instanceof RunsPanel)) { testParmPanel = new RunsPanel(this); adjustPanel(); } return true; } // Display the "Collisions Test" panel for that menu choice. if (eve.target == collisionsMI) { // Create and add a new "Collisions Test" panel only if none is displayed. if (!(testParmPanel instanceof CollisionsPanel)) { testParmPanel = new CollisionsPanel(this); adjustPanel(); } return true; } // Display the "Coupon Test" panel for that menu choice. if (eve.target == couponMI) { // Create and add a new "Coupon Test" panel only if none is displayed. if (!(testParmPanel instanceof CouponPanel)) { testParmPanel = new CouponPanel(this); adjustPanel(); } return true; } // Display the "Maxt Test" panel for that menu choice. if (eve.target == maxtMI) { // Create and add a new "Maxt Test" panel only if none is displayed. if (!(testParmPanel instanceof MaxtPanel)) { testParmPanel = new MaxtPanel(this); adjustPanel(); } return true; } // Display the "Poker Test" panel for that menu choice. if (eve.target == pokerMI) { // Create and add a new "Poker Test" panel only if none is displayed. if (!(testParmPanel instanceof PokerPanel)) { testParmPanel = new PokerPanel(this); adjustPanel(); } return true; } // Display the "Sum Test" panel for that menu choice. if (eve.target == sumMI) { // Create and add a new "Sum Test" panel only if none is displayed. if (!(testParmPanel instanceof SumPanel)) { testParmPanel = new SumPanel(this); adjustPanel(); } return true; } // Display the "LCG" panel for that menu choice. if (eve.target == lcgMI) { // Create and add a new "LCG" panel only if none is displayed. if (!(genParmPanel instanceof LcgPanel)) { genParmPanel = new LcgPanel(this); adjustPanel(); } return true; } // Display the "LFG" panel for that menu choice. if (eve.target == lfgMI) { // Create and add a new "LFG" panel only if none is displayed. if (!(genParmPanel instanceof LfgPanel)) { genParmPanel = new LfgPanel(this); adjustPanel(); } return true; } // Display the "LCG64" panel for that menu choice. if (eve.target == lcg64MI) { // Create and add a new "LCG64" panel only if none is displayed. if (!(genParmPanel instanceof lcg64Panel)) { genParmPanel = new lcg64Panel(this); adjustPanel(); } return true; } // Display the "CMRG" panel for that menu choice. if (eve.target == cmrgMI) { // Create and add a new "CMRG" panel only if none is displayed. if (!(genParmPanel instanceof cmrgPanel)) { genParmPanel = new cmrgPanel(this); adjustPanel(); } return true; } // Display the "PMLCG" panel for that menu choice. if (eve.target == pmlcgMI) { // Create and add a new "PMLCG" panel only if none is displayed. if (!(genParmPanel instanceof pmlcgPanel)) { genParmPanel = new pmlcgPanel(this); adjustPanel(); } return true; } // Pop up the preference screen for that menu choice. if (eve.target == prefMI) { // Create the preference screen. prefScrn = new PrefDialog(this); // Dummy statement to reduce flickering when the dialog pops // up in an applet. prefScrn.resize(300,70); // Pack and display the preference screen. prefScrn.pack(); prefScrn.show(); return true; } // Destroy TestWizard for that menu choice. if (eve.target == exitMI) { collapse(); return true; } return super.action(eve, arg); } //*************************************************************************** // createMenuBar() creates the menu bar. //--------------------------------------------------------------------------- protected MenuBar createMenuBar() { MenuBar mBar = new MenuBar(); Menu fileMenu = new Menu("File"); Menu testMenu = new Menu("Test"); Menu genMenu = new Menu("Generator"); Menu optionMenu = new Menu("Options"); // Create and add items under menu "Exit". exitMI = new MenuItem("Exit"); fileMenu.add(exitMI); // Create and add items under menu "Test". eqdistrMI = new MenuItem("Equidistribution"); serialMI = new MenuItem("Serial"); gapMI = new MenuItem("Gap"); permMI = new MenuItem("Permutation"); runsMI = new MenuItem("Runs"); collisionsMI = new MenuItem("Collisions"); couponMI = new MenuItem("Coupon"); maxtMI = new MenuItem("Maxt"); pokerMI = new MenuItem("Poker"); sumMI = new MenuItem("Sum"); testMenu.add(eqdistrMI); testMenu.add(serialMI); testMenu.add(gapMI); testMenu.add(permMI); testMenu.add(runsMI); testMenu.add(collisionsMI); testMenu.add(couponMI); testMenu.add(maxtMI); testMenu.add(pokerMI); testMenu.add(sumMI); // Create and add items under menu "Generator". lcgMI = new MenuItem("48 bit Linear Congruential"); lfgMI = new MenuItem("Lagged Fibonacci"); lcg64MI = new MenuItem("64 Linear Congruential"); cmrgMI = new MenuItem("Combined Mulitple Recursive"); pmlcgMI = new MenuItem("Prime Modulus Linear Congruential"); genMenu.add(lcgMI); genMenu.add(lfgMI); genMenu.add(lcg64MI); genMenu.add(cmrgMI); genMenu.add(pmlcgMI); // Create and add items under menu "Options". prefMI = new MenuItem("Preferences..."); optionMenu.add(prefMI); // Add menus onto menu bar. mBar.add(fileMenu); mBar.add(testMenu); mBar.add(genMenu); mBar.add(optionMenu); return mBar; } //--------------------------------------------------------------------------- // adjustPanel() adjusts the display to accomodate the new set of parameter // panels. //--------------------------------------------------------------------------- protected void adjustPanel() { GridBagLayout layoutMgr = (GridBagLayout) getLayout(); GridBagConstraints constraint = new GridBagConstraints(); // All other constraints use their default values. constraint.gridx = 0; constraint.fill = GridBagConstraints.HORIZONTAL; constraint.insets = new Insets(20,10,10,10); constraint.weightx = 1; // Remove all components, so we have a clean slate. removeAll(); // Add in the test parameter panel if there is one. if (testParmPanel != null) { layoutMgr.setConstraints(testParmPanel, constraint); add(testParmPanel); } // Add in the generator parameter panel if there is one. if (genParmPanel != null) { layoutMgr.setConstraints(genParmPanel, constraint); add(genParmPanel); } // Modify constraints for the button. constraint.anchor = GridBagConstraints.EAST; constraint.fill = GridBagConstraints.NONE; constraint.weighty = 1; // Add in the button. layoutMgr.setConstraints(translButton, constraint); add(translButton); // Enable the button if both test and generator panel are shown. if ((testParmPanel!=null) && (genParmPanel!=null)) translButton.enable(); else translButton.disable(); // Adjust the frame size. pack(); } //--------------------------------------------------------------------------- // translate() translates the user-specified parameters into the appropriate // command line. //--------------------------------------------------------------------------- protected void translate() { String message; String command; String testParms; String genParms; // Check parameters for errors and concatenate error messages. message = testParmPanel.checkParms()+genParmPanel.checkParms(); // Obtain the translated test parameters. testParms = testParmPanel.getParms(); // Obtain the translated generator parameters. genParms = genParmPanel.getParms(); // Formulate the command line. if ((testParms.length()==0) || (genParms.length()==0)) command = ""; else command = testParmPanel.getCmdId() + "." + genParmPanel.getCmdId() + " " + genParms + " " + testParms; // Make sure the output screen exists. if (outputScrn == null) outputScrn = new OutputFrame(this); // Update and display the output screen. outputScrn.setText(message, command); outputScrn.show(); } //--------------------------------------------------------------------------- // collapse() destroys TestWizard and its children, and releases the GUI // resources. //--------------------------------------------------------------------------- protected void collapse() { // Destroys output screen and releases its GUI resources. if (outputScrn != null) { outputScrn.hide(); outputScrn.dispose(); outputScrn = null; } // Destroys preference screen and releases its GUI resources. if (prefScrn != null) { prefScrn.hide(); prefScrn.dispose(); prefScrn = null; } // Self-destruct. hide(); dispose(); } //--------------------------------------------------------------------------- // Entry point for running TestWizard standalone. //--------------------------------------------------------------------------- public static void main(String arg[]) { TestWizard twiz = new TestWizard(); twiz.setFont(new Font("Courier", Font.PLAIN, 16)); twiz.resize(500,200); twiz.show(); } } SHAR_EOF fi # end of overwriting check if test -f 'cmrgPanel.java' then echo shar: will not over-write existing file "'cmrgPanel.java'" else cat << "SHAR_EOF" > 'cmrgPanel.java' /******************************************************************************* cmrgPanel class *******************************************************************************/ //****************************************************************************** // cmrgPanel class defines a panel for entering and translating parameters of // "Combine Mulitple Reacursive Generator". //****************************************************************************** public class cmrgPanel extends ParmGrpPanel { //--------------------------------------------------------------------------- // Parameter field for number of logical streams. protected IntParmField numLogicStrmField; // Parameter field for number of real streams per logical stream. protected IntParmField numRealStrmField; // Parameter field for generator seed. protected IntParmField seedField; // Parameter field for generator type. protected IntParmField genTypeField; // Number of tests per logical stream protected IntParmField ntestsField; // skip n random numbers between each test on the same stream. protected IntParmField skipField; // The command line translation of the parameters. protected String parmStr; // Owner of this panel. protected TestWizard wiz; //*************************************************************************** // The constructor constructs cmrgPanel with owner <wizard>. //--------------------------------------------------------------------------- public cmrgPanel(TestWizard wizard) { // Set up a group panel that will contain six parameter fields. super("Combined Multiple Recursive Generator (cmrg)", 6); // Set the command line id. super.cmdId = "cmrg"; // Create the parameter fields. numLogicStrmField = new IntParmField( "Number of Logical Streams", 1, Integer.MAX_VALUE,1); numRealStrmField = new IntParmField( "Combine how many real streams to create a logical stream?", 1, Integer.MAX_VALUE,1); seedField = new IntParmField( " Generator Seed", 0, Integer.MAX_VALUE); genTypeField = new IntParmField( " Generator Parameter", 0, 7); ntestsField = new IntParmField("Tests per logical stream", 0, Integer.MAX_VALUE,1); skipField = new IntParmField("Skip ? random numbers each test.(Set this to 0.)", 0, 7,0); // Initialize internal variables. parmStr = ""; wiz = wizard; // Add the components. addField(numLogicStrmField); addField(numRealStrmField); addField(seedField); addField(genTypeField); addField(ntestsField); addField(skipField); } //--------------------------------------------------------------------------- // checkParms() checks the validity of the parameter values, and returns a // description of the error. // // No error: checkParms() returns empty string // Warning : checkParms() returns warning message (non-empty string) // getParms() returns command line segment (non-empty string) // Error : checkParms() returns error message (non-empty string) // getParms() returns empty string //--------------------------------------------------------------------------- public String checkParms() { String errorMsg; // Check parameters for errors and concatenate error messages. errorMsg = numLogicStrmField.checkParm() + numRealStrmField.checkParm() + seedField.checkParm() + genTypeField.checkParm() + ntestsField.checkParm() + skipField.checkParm(); // If error exists, set command line translation to empty string and // return the error message. if (errorMsg.length() > 0) { parmStr = ""; return errorMsg; } // Translate the parameters into command line segment and cache it. parmStr = numLogicStrmField.getParmString() + " " + numRealStrmField.getParmString() + " " + seedField.getParmString() + " " + genTypeField.getParmString() + " " + ntestsField.getParmString() + " " + skipField.getParmString(); return errorMsg; } //--------------------------------------------------------------------------- // getParms() translates the user-specified parameters into a command line // segment, and returns it in a string. // NOTE: Before calling getParms(), call checkParms() first. //--------------------------------------------------------------------------- public String getParms() { // Return the cached translation. return parmStr; } } SHAR_EOF fi # end of overwriting check if test -f 'lcg64Panel.java' then echo shar: will not over-write existing file "'lcg64Panel.java'" else cat << "SHAR_EOF" > 'lcg64Panel.java' /******************************************************************************* lcg64Panel class *******************************************************************************/ //****************************************************************************** // lcg64Panel class defines a panel for entering and translating parameters of // "64 bit Linear Congruential Generator". //****************************************************************************** public class lcg64Panel extends ParmGrpPanel { //--------------------------------------------------------------------------- // Parameter field for number of logical streams. protected IntParmField numLogicStrmField; // Parameter field for number of real streams per logical stream. protected IntParmField numRealStrmField; // Parameter field for generator seed. protected IntParmField seedField; // Parameter field for generator type. protected IntParmField genTypeField; // Number of tests per logical stream protected IntParmField ntestsField; // skip n random numbers between each test on the same stream. protected IntParmField skipField; // The command line translation of the parameters. protected String parmStr; // Owner of this panel. protected TestWizard wiz; //*************************************************************************** // The constructor constructs lcg64Panel with owner <wizard>. //--------------------------------------------------------------------------- public lcg64Panel(TestWizard wizard) { // Set up a group panel that will contain six parameter fields. super("64 bit Linear Congruential Generator (lcg64)", 6); // Set the command line id. super.cmdId = "lcg64"; // Create the parameter fields. numLogicStrmField = new IntParmField( "Number of Logical Streams", 1, Integer.MAX_VALUE,1); numRealStrmField = new IntParmField( "Combine how many real streams to create a logical stream?", 1, Integer.MAX_VALUE,1); seedField = new IntParmField( " Generator Seed", 0, Integer.MAX_VALUE); genTypeField = new IntParmField( " Generator Parameter", 0, 7); ntestsField = new IntParmField("Tests per logical stream", 0, Integer.MAX_VALUE,1); skipField = new IntParmField("Skip ? random numbers each test.(Set this to 0.)", 0, 7,0); // Initialize internal variables. parmStr = ""; wiz = wizard; // Add the components. addField(numLogicStrmField); addField(numRealStrmField); addField(seedField); addField(genTypeField); addField(ntestsField); addField(skipField); } //--------------------------------------------------------------------------- // checkParms() checks the validity of the parameter values, and returns a // description of the error. // // No error: checkParms() returns empty string // Warning : checkParms() returns warning message (non-empty string) // getParms() returns command line segment (non-empty string) // Error : checkParms() returns error message (non-empty string) // getParms() returns empty string //--------------------------------------------------------------------------- public String checkParms() { String errorMsg; // Check parameters for errors and concatenate error messages. errorMsg = numLogicStrmField.checkParm() + numRealStrmField.checkParm() + seedField.checkParm() + genTypeField.checkParm() + ntestsField.checkParm() + skipField.checkParm(); // If error exists, set command line translation to empty string and // return the error message. if (errorMsg.length() > 0) { parmStr = ""; return errorMsg; } // Translate the parameters into command line segment and cache it. parmStr = numLogicStrmField.getParmString() + " " + numRealStrmField.getParmString() + " " + seedField.getParmString() + " " + genTypeField.getParmString() + " " + ntestsField.getParmString() + " " + skipField.getParmString(); return errorMsg; } //--------------------------------------------------------------------------- // getParms() translates the user-specified parameters into a command line // segment, and returns it in a string. // NOTE: Before calling getParms(), call checkParms() first. //--------------------------------------------------------------------------- public String getParms() { // Return the cached translation. return parmStr; } } SHAR_EOF fi # end of overwriting check if test -f 'pmlcgPanel.java' then echo shar: will not over-write existing file "'pmlcgPanel.java'" else cat << "SHAR_EOF" > 'pmlcgPanel.java' /******************************************************************************* pmlcgPanel class *******************************************************************************/ //****************************************************************************** // pmlcgPanel class defines a panel for entering and translating parameters of // "Prime Modulus Linear Congruential Generator". //****************************************************************************** public class pmlcgPanel extends ParmGrpPanel { //--------------------------------------------------------------------------- // Parameter field for number of logical streams. protected IntParmField numLogicStrmField; // Parameter field for number of real streams per logical stream. protected IntParmField numRealStrmField; // Parameter field for generator seed. protected IntParmField seedField; // Parameter field for generator type. protected IntParmField genTypeField; // Number of tests per logical stream protected IntParmField ntestsField; // skip n random numbers between each test on the same stream. protected IntParmField skipField; // The command line translation of the parameters. protected String parmStr; // Owner of this panel. protected TestWizard wiz; //*************************************************************************** // The constructor constructs pmlcgPanel with owner <wizard>. //--------------------------------------------------------------------------- public pmlcgPanel(TestWizard wizard) { // Set up a group panel that will contain six parameter fields. super("Prime Modulus Linear Congruential Generator (pmlcg)", 6); // Set the command line id. super.cmdId = "pmlcg"; // Create the parameter fields. numLogicStrmField = new IntParmField( "Number of Logical Streams", 1, Integer.MAX_VALUE,1); numRealStrmField = new IntParmField( "Combine how many real streams to create a logical stream?", 1, Integer.MAX_VALUE,1); seedField = new IntParmField( " Generator Seed", 0, Integer.MAX_VALUE); genTypeField = new IntParmField( " Generator Parameter", 0, 7); ntestsField = new IntParmField("Tests per logical stream", 0, Integer.MAX_VALUE,1); skipField = new IntParmField("Skip ? random numbers each test.(Set this to 0.)", 0, 7,0); // Initialize internal variables. parmStr = ""; wiz = wizard; // Add the components. addField(numLogicStrmField); addField(numRealStrmField); addField(seedField); addField(genTypeField); addField(ntestsField); addField(skipField); } //--------------------------------------------------------------------------- // checkParms() checks the validity of the parameter values, and returns a // description of the error. // // No error: checkParms() returns empty string // Warning : checkParms() returns warning message (non-empty string) // getParms() returns command line segment (non-empty string) // Error : checkParms() returns error message (non-empty string) // getParms() returns empty string //--------------------------------------------------------------------------- public String checkParms() { String errorMsg; // Check parameters for errors and concatenate error messages. errorMsg = numLogicStrmField.checkParm() + numRealStrmField.checkParm() + seedField.checkParm() + genTypeField.checkParm() + ntestsField.checkParm() + skipField.checkParm(); // If error exists, set command line translation to empty string and // return the error message. if (errorMsg.length() > 0) { parmStr = ""; return errorMsg; } // Translate the parameters into command line segment and cache it. parmStr = numLogicStrmField.getParmString() + " " + numRealStrmField.getParmString() + " " + seedField.getParmString() + " " + genTypeField.getParmString() + " " + ntestsField.getParmString() + " " + skipField.getParmString(); return errorMsg; } //--------------------------------------------------------------------------- // getParms() translates the user-specified parameters into a command line // segment, and returns it in a string. // NOTE: Before calling getParms(), call checkParms() first. //--------------------------------------------------------------------------- public String getParms() { // Return the cached translation. return parmStr; } } SHAR_EOF fi # end of overwriting check if test -f 'stat_test.html' then echo shar: will not over-write existing file "'stat_test.html'" else cat << "SHAR_EOF" > 'stat_test.html' <HTML> <HEAD><TITLE>SPRNG: Statistical Tests

    Statistical Tests for SPRNG

    Overview

    The directory TESTS contains statistics-testing programs for the SPRNG random number generators. All tests are implementations of the sequential tests in Knuth's book, but with modification that can examine both sequential and parallel streams. You can also run these tests on your own random number generators by modifing TESTS/Makefile.

    Installation

    To create the executables, set the variables $LIBDIR and $SRCDIR in TESTS/Makefile to the appropriate directory, as explained in the makefile, and type make in the directory TESTS. A test executable xxx.yyy is generated for each type of test xxx and each type of SPRNG random number generator yyy.

    If you wish to run the tests on a parallel machine, you should first set certain variables in TESTS/make.mpi for locating the MPI directories on your system. Then, typing make -f make.mpi will create the executables that perform the tests in parallel. We have set the default location to that of the SGI power challenge machines here at NCSA.

    NOTE: If you have already compiled the sequential version of the tests, you must first delete the intermediate files (by typing make clean) before compiling the parallel version.

    Sequential Stream Tests

    This section briefly describes the statistical tests, as they are applied to sequential random-number streams.
    1. Equidistribution test: We divide the interval [0,1) into d subintervals of equal size. Given a sequence of random numbers, we first count how many of them fall into each subinterval. Then, we apply a chi-square test to determine the probability that such an emprical distribution could have been obtained from a sequence of random numbers that is uniformly distributed in the interval [0,1).

      Parameters:

      • d: number of divisions between 0 and 1
      • n: number of random numbers under test
      Usage: equidist.xxx d n
    2. Serial test: We divide the interval [0,1) into d subintervals of equal size, and set up an d by d array of bins. Given a sequence of random numbers, we partition the sequence into disjoint pairs. For each pair of numbers (a, b), if a falls in the ith interval and b falls in the jth interval, we place the pair in bin (i, j). In the end, we count the number of pairs in each bin, and apply a chi-square test to determine the probability that such an emprical distribution could have been obtained from a sequence of random numbers with pairs uniformly distributed in [0,1)2 space.

      Parameters:

      • d: number of divisions between 0 and 1
      • n: number of pairs of random numbers under test
      Usage: serial.xxx d n
    3. Gap test: We focus on a subinterval [a, b) of [0,1). Given a sequence of random numbers, we check each number in turn to see whether it falls within this subinterval. We note the gap, in the original sequence, between two successive numbers that do. As we scan the sequence, we record all the gap lengths. In the end, we apply a chi-square test on the distribution of gap lengths to determine the probability that such an emprical distribution could have been obtained from a sequence of truly random numbers.

      l+2 bins are set up, numbered 0, 1, 2, ..., l, l+1. Bin 0 counts gaps with gap length 0; bin 1 counts gaps with gap length 1; and so on. Gaps with gap length longer than l are lumped together and assigned to bin l+1.

      Parameters:

      • l: maximum gap length that are individually counted
      • a: lower bound on the subinterval
      • b: upper bound on the subinterval
      • n: number of gaps under test
      Usage: gap.xxx l a b n
    4. Poker test: Given a sequence of random numbers, we multiply each random nubmer by d and truncate the product to obtain an integer in the range [0, d-1]. We consider n disjoint subsequences, each of length k, from the sequence. In each subsequence, we count the number of distinct integers. This should be an integer in [1, min(d-1, k)]. We apply a chi-square test on the distribution of the counts to determine the probability that such an emprical distribution could have been obtained from a sequence of truly random numbers.

      Parameters:

      • d: multiplier
      • k: length of each subsequence
      • n: number of subsequences under test
      Usage: poker.xxx n k d
    5. Coupon collector's test: Given a sequence of random numbers, we multiply each random number by d and truncate the product to obtain an integer in the range [0,d-1]. We then scan the sequence in order. We wish to find all the d numbers in our range. When we first find such a "complete" set, we note the length of the segment over which this complete set was obtained. We repeat the process n times. In the end, we apply a chi-square test on the distribution of the segment lengths to determine the probability that such an emprical distribution could have been obtained from a sequence of truly random numbers.

      t-d+1 bins are set up, numbered d, d+1, ..., t-1, t. Bin d counts segments with length d; Bin d+1 counts segments with length d+1; and so on. Segments with length greater than t-1 are lumped together and assigned to bin t.

      Parameters:

      • d: multiplier
      • t: maximum segment length that are individually counted
      • n: number of segments under test
      Usage: coupon.xxx n t d
    6. Permutations test: Given a sequence of random numbers, we partition the sequence into n disjoint subsequences of length l each. We enumerate each random number by its magnitude relative to the other numbers in the subsequence. For example, the smallest number will be enumerated as 1 and the largest l. (We assume that there are no ties). This enumeration gives us a permutation in [1, t]. There are t! such permutations. We apply a chi-square test on the distribution of the observed permutations to determine the probability that such an emprical distribution could have been obtained from a sequence of truly random numbers where each of these permutations is equally likely.

      Parameters:

      • l: length of each subsequence
      • n: number of subsequences under test
      Usage: perm.xxx l n
    7. Runs test: Given a sequence of random numbers, we partition the sequence into disjoint subsequences in which the random numbers monotonically increase. Each such subsequence is called a "run". We apply a chi-square test on the distribution of the observed run lengths, to determine the probability that such an emprical distribution could have been obtained from a sequence of truly random numbers.

      l+1 bins are set up, numbered 1, 2, ..., l, l+1. Bin 1 counts runs with run length 1; bin 2 counts runs with run length 2; and so on. Runs with run length greater than l are lumped together and assigned to bin l+1.

      Parameters:

      • l: maximum run length that are individually counted
      • n: number of runs under tests
      Usage: run.xxx l n
    8. Maximum-of-t test: Given a sequence of random numbers, we divide the sequence into n subsequences of length t each. For each subsequence, we find the largest number. The distribution of the maximum values follows the cumulative distribution function F(x)=xt for trully uniformly distributed random numbers. We apply a Kolmogorov-Smirnov test to determine the probability that our empirical distribution are consistent with this.

      Parameters:

      • t: length of each subsequence
      • n: number of subsequences under test
      Usage: maxt.xxx n t
    9. Collision test: Given a sequence of random numbers, we multiply each random number by d and truncate the product to obtain an integer in the range [0, d-1]. We then divide the sequence into n disjoint subsequences of length m each. There are dm possible such subsequences. We count the number of distinct subsequences observed empirically, and substract it from n, obtaining a count of "collisions". We apply a chi-square test on the distribution of the observed collisions to determine the probability that such an empirical distribution could have been obtained from a sequence of truly random numbers.

      Parameters:

      • d: multiplier
      • m: length of each subsequence
      • n: number of subsequences under test
      Usage: collisions.xxx n m d

    Parallel Stream Tests

    The above tests examine only individual sequential random number streams. To test for correlations between different random-number streams, we mix the random numbers from several different streams to produce a single stream. In other words, we create a logical stream by combining several real streams. (Right now, we generate a logical stream by interleaving the real streams.) We then feed the logical stream to the above sequential tests. If each individual stream is truly random and the streams are uncorrelated, then the logical stream should pass the tests.

    If you specify more than one logical stream per test, each logical stream is generated from a different group of real streams. In this case, a Kolmogorov-Smirnov test is applied to the test results of the logical streams.

    Running the Tests

    The statistical tests themselves use only the parameters as described above. However, to run the tests on SPRNG generators, four additional parameters are required:
    • g: number of logical streams under test
    • r: ratio of real/logical streams
    • s: seed to the SPRNG generator
    • f: generator family
    These four parameters should appear right after the test name but before the other test parameters. For example, to run equidistribution test on the SPRNG linear congruential generator, type: equidist.lcg g r s f d n

    Translator

    To aid you in running the statistical tests, we have included Translator in this document. Translator is a manual-driven Java applet that will translate your choices of test parameters into the appropriate command line. In addition to relieving you from remembering the command line syntax, Translator will also catch certain simple errors in your choice of parameters.

    NOTE: The memory required for each SPRNG generator is not monitored. You can still set the test to run on an extremely long sequence of random numbers, which will take forever to finish.

    Click here to invoke the Translator:

    If you are seeing this, you need to enable your browser's Java feature.

    SHAR_EOF fi # end of overwriting check cd .. if test -f 'timesprng.html' then echo shar: will not over-write existing file "'timesprng.html'" else cat << "SHAR_EOF" > 'timesprng.html' SPRNG: Scalable Parallel Pseudo-Random Number Generator Library

    User's Guide: Installation:Performance

    Next:Usage Previous:Trouble Shooting


    Performance: Timing the speed of SPRNG Libraries

    On building the SPRNG library, executables will be created to time each generator provided. A shell script called timesprng is provided that will run each of these timing executables. Enter the following command in the same directory where the SPRNG libraries reside in order to determine the speeds of the generators on your machine:

    timesprng

    The output will give the time taken to generate a million random numbers and also the number of random numbers generated per second, in millions (MRS). These results are based on the timings in C programs. FORTRAN timings are also given for millions of random numbers generated per second.

    We give below a table of timing results on a few parallel platforms, in Millions of Random Numbers per Second for the integer and double precision numbers generated:



    Time SPRNG

    CRAY T3E HP/CONVEX Exemplar IBM SP2 SGI-CRAY Origin 2000 SGI Power Challenge
    Clock Speed MHz 300 180 135 195 195
    drand48()
    (for comparison)
    2.6 0.32 1.4 1.8 1.8
    C LCG48
    Integer
    14.5 7.7 4.4 10.3 10.2
    C LCG48
    Double Precision
    6.3 5.9 5.0 8.7 8.3
    FORTRAN LCG48
    Integer
    12.8 7.7 5.3 10.3 10.2
    FORTRAN LCG48
    Double Precision
    6.1 6.2 3.3 8.5 8.5
    C LFG
    Integer
    5.5 6.7 4.0 6.1 5.8
    C LFG
    Double Precision
    3.2 3.2 3.2 3.8 3.8
    FORTRAN LFG
    Integer
    5.4 6.3 4.1 5.2 5.3
    FORTRAN LFG
    Double Precision
    3.3 2.9 3.2 3.6 3.8
    C LCG64
    Integer
    16.6 10.0 5.6 11.5 11.5
    C LCG64
    Double Precision
    6.5 6.7 4.0 7.8 7.8
    FORTRAN LCG64
    Integer
    14.5 7.7 5.0 10.8 10.8
    FORTRAN LCG64
    Double Precision
    6.3 6.3 3.6 7.8 7.8
    C CMRG
    Integer
    8.6 5.6 1.9 4.6 4.7
    C CMRG
    Double Precision
    4.8 4.8 1.8 3.6 4.3
    FORTRAN CMRG
    Integer
    8.4 5.0 1.9 4.2 4.5
    FORTRAN CMRG
    Double Precision
    4.7 4.8 1.7 3.6 3.5
    C MLFG
    Integer
    5.6 5.3 4.2 8.3 8.3
    C MLFG
    Double Precision
    5.0 5.3 3.1 6.0 6.1
    FORTRAN MLFG
    Integer
    5.9 3.3 3.8 7.6 8.2
    FORTRAN MLFG
    Double Precision
    3.1 2.8 3.2 5.6 6.0
    C PMLCG
    Integer
    7.5 0.7 2.2 2.5 2.4
    C PMLCG
    Double Precision
    4.2 0.7 1.8 2.3 2.3
    FORTRAN PMLCG
    Integer
    7.2 0.61 1.9 2.5 2.5
    FORTRAN PMLCG
    Double Precision
    4.1 0.58 1.9 2.4 2.5


    [Quick 
Start] [User's 
Guide] [Reference 
Manual] [Quick 
Reference]

    SHAR_EOF fi # end of overwriting check if test -f 'toc.html' then echo shar: will not over-write existing file "'toc.html'" else cat << "SHAR_EOF" > 'toc.html' SPRNG: Scalable Parallel Pseudo-Random Number Generator Library

    SPRNG Documentation

    Version 1.0

    For technical assistance in installing or using SPRNG, please call Ashok Srinivasan at (217) 244-2937 or email sprng@ncsa.uiuc.edu.

    Changes to Version 0.5
    Please read this if you have been using SPRNG 0.5.

    The following documents are available for the SPRNG parallel pseudorandom number generator libraries:

    Quick Start

    This is a brief tutorial on installing and using some simple SPRNG features. It assumes some experience in installing software. However, links are provided in case more details are required.

    Quick Reference

    Quick reference sheets for the SPRNG interfaces.

    User's Guide

    The User's Guide contains detailed information on installing and using the libraries. It also discusses testing the generators for their quality.

    Reference Manual

    Detailed discussions of the various SPRNG functions are presented in this document.

    Introduction to Parallel RNGs

    A discussion of random number generators for use in parallel applications.

    SHAR_EOF fi # end of overwriting check if test -f 'trouble-shooting.html' then echo shar: will not over-write existing file "'trouble-shooting.html'" else cat << "SHAR_EOF" > 'trouble-shooting.html' SPRNG: Scalable Parallel Pseudo-Random Number Generator Library

    User's Guide: Installation:Trouble Shooting

    Next:Performance Previous:Platforms


    Trouble Shooting

    Compiler cannot find the MPI library while installing SPRNG

    We have set the path to the MPI library based on the systems we used. The MPI library may be in a different location on your system. Please look at the man pages for mpi or ask your system consultant for the path to the MPI library. Then set the variables MPIDIR and MPILIB to the correct values in the makefile for your platform. As an alternative, if you plan to perform only serial computations, please remove the three lines in your makefile that define variables for the MPI version of SPRNG.


    [Quick 
Start] [User's 
Guide] [Reference 
Manual] [Quick 
Reference] [Next: 
Usage]

    SHAR_EOF fi # end of overwriting check if test -f 'us.gif' then echo shar: will not over-write existing file "'us.gif'" else cat << "SHAR_EOF" > 'us.gif' GIF87au(ñoooÀÀÀççç,u(þ„©Ëí£Œ¢Ú‹³Þ¼û†1”扦êʶî Ǭ@ÊöçºÐÀ ^mˆL*MEão æšN”èŠÍjµÔêi ‹³]ŸUÐM«×ì¶û —ÑTó=ÎëŃJùXâ·7HÒG×dg"XØèxqø÷´ˆçcpq0v‰…P𱉺Yi1ê™—2Ú:ò™¡šQšxÊè3»' Ú›úË\ëg:X©‹1¼Å¼AK Y|{Œê9Ü{ùÛi©¼üÉ<-Û kù k[¤ˆÜ“½«ºY/®}¯AÏnÌJðÀ¥âg®Û=gõôáã¶-b¿ºÃfpÕ7Ä` 2ŠræQ=‰þv´ˆ+­ˆ$ÃÅb8.!@„$¡¡¼–kåÇ~¢< ëé²äÌ‘<-Üæ/FÄŒ¯(ÎÕ8ò‡Çh¤X¾Lø¢äÍX$á ÚƒçrJ›>:µ1Òª[»~ZìÙ´k¶;wk3º{ûŽ“n‚ðáÄ‹oP; SHAR_EOF fi # end of overwriting check if test -f 'usage.html' then echo shar: will not over-write existing file "'usage.html'" else cat << "SHAR_EOF" > 'usage.html' SPRNG: Scalable Parallel Pseudo-Random Number Generator Library

    User's Guide:Usage

    Next:Compilation Previous:Performance


    SPRNG Usage

    In this section we assume that the SPRNG libraries have already been installed. Users may wish to read about SPRNG parallelization scheme in case they wish to know more about the strategy used in SPRNG to provide independent random number streams.

    Header Files

    SPRNG provides both FORTRAN and C interfaces for the use of its parallel random number generator libraries. It can be used in C++ programs too. In order to use SPRNG in a FORTRAN program, the user must include the file sprng_f.h before calling any SPRNG function. C programmers must similarly include the file sprng.h. The user may also wish to define certain macros before including the above mentioned header files in order to modify the behavior of SPRNG. The effects of different macros will be described in the appropriate sections.

    Distinguishing the streams

    SPRNG permits the use of several random number streams on each processor. We therefore need to be able to distinguish between the different streams. The SPRNG initialization routine returns a unique ID for each stream, based on which the different streams can be distinguished. In our implementation, an ID is actually a pointer to the memory location were the state of the stream is stored. When a SPRNG function is called, this stream ID is also passed to the function by the user in order to provide information on the particular stream involved.

    SPRNG interfaces

    Three different interfaces are available to the SPRNG user, as described below:
    Default interface:
    This is the default interface provided by SPRNG. The user can have several random number streams on each processor. The user passes the stream ID to SPRNG functions in order to distinguish the streams. If due to errors in the program the user passes an invalid ID, then this can lead to erroneous results, or the program may even terminate.

    Interface with pointer checking:
    This interface is invoked by defining the macro CHECK_POINTERS before including a SPRNG header file. It is similar to the default interface, except that it checks for the validity of the stream ID each time a SPRNG function is called. This facility slows down the SPRNG routines, and so would normally be used only while debugging the program.

    Simple Interface:
    Users may wish to use only one random number stream per process at any given time. It is then not necessary to provide a stream ID in order to distinguish the streams. The simple interface enables the user to call SPRNG functions without providing stream ID's. This interface is invoked by defining the macro SIMPLE_SPRNG before including a SPRNG header file.


    [Quick 
Start] [User's 
Guide] [Reference 
Manual] [Quick 
Reference] [Next: 
Compilation]

    SHAR_EOF fi # end of overwriting check if test -f 'users-guide.html' then echo shar: will not over-write existing file "'users-guide.html'" else cat << "SHAR_EOF" > 'users-guide.html' SPRNG: Scalable Parallel Pseudo-Random Number Generator Library

    SPRNG User's Guide


    [Quick 
Start] [Reference 
Manual] [Quick 
Reference]

    SHAR_EOF fi # end of overwriting check if test ! -d 'workshop' then mkdir 'workshop' fi cd 'workshop' if test -f 'WorkshopThankYou.html' then echo shar: will not over-write existing file "'WorkshopThankYou.html'" else cat << "SHAR_EOF" > 'WorkshopThankYou.html' Thank You
    homediscover ncsapartnershipsoutreachsoftware_tech
    searchspotlightadv_computingsciencedivisions
    Thank you -- your application has been sent to ashoks@ncsa.uiuc.edu.



    NCSA
    The National Center for Supercomputing Applications

    University of Illinois at Urbana-Champaign

    ashoks@ncsa.uiuc.edu

    Last modified: 6 March, 1998


    SHAR_EOF fi # end of overwriting check if test -f 'details-speakers.html' then echo shar: will not over-write existing file "'details-speakers.html'" else cat << "SHAR_EOF" > 'details-speakers.html' Workshop on High Performance Monte Carlo Tools
    Details of Talks

    • Greg Astfalk, Hewlett Packard

      Title: Scaling up to very large parallel systems

      Abstract: There is a desire for dramatically increased levels of performance from computer systems. The applications to which this increased performance could be applied are quite diverse. Owing to this the systems that would be most useful are general-purpose. This leads us to the question of what would be the architecture of a general-purpose system of enormous computing power. As a target we examine what a system of greater than 5 Tflops would resemble within the next few years. Our examination looks at several possible ways of getting there (some of which are silly) and the technological challenges associated with each alternative. While it would be nice to maintain technological purity, we will cloud this talk with some genuine constraints. The dirty words we consider are; physics and economics. At the end of all of this we describe the impact on the users of the type of general-purpose system that we feel could actually reach the multi-Tflop level.

    • David Ceperley, NCSA, University of Illinois at Urbana-Champaign

      Title: Testing Parallel Random Number Generators

      Abstract:

    • Mark Durst, NERSC, Lawrence Berkeley National Laboratory

      Title: The Embarrassing Success of Embarrassing Parallelism

      Abstract: So-called "embarrassingly parallel" computations (roughly speaking, those with trivially low communication-to-computation ratios) are becoming the principal beneficiaries of the massively parallel computing resources currently moving out of the pure research state and into use as tools for routine scientific computation. I will describe two such codes gearing up for computational advances at NERSC, one simple in its overall structure and one alarmingly complex. I will argue that this often-scorned category of computation is likely to make further gains in the likely computational environment of the next decade. Needs for random number generation will be discussed just enough to keep me from being bodily thrown out of the workshop.

    • Karl Entacher, Mathematics, University of Salzburg

      Title: Parallel Streams of Linear Random Numbers in the Spectral Test

      Abstract: We discuss recent methods of random number generation and we show how to analyze different substreams of linear congruential pseudorandom numbers by means of the spectral test. Such substreams occur in particular simulation setups, in transformation methods for non-uniform pseudorandom numbers or when we produce distinct parallel streams of random numbers for parallel and distributed simulation by the usual parallelization methods. Especially in the latter case, two kinds of substreams are of special interest: (i) lagged subsequences of random numbers with step sizes K ("leap-frog technique") and (ii) consecutive disjoint streams of random numbers of length L. For linear congruential generators, both techniques are easily implemented, but great attention has to be paid to the quality of such subsequences. Using the spectral test, we show that almost all linear congruential generators recently in use produce disastrously lagged subsequences with very small lags. Hence, an a-priori analysis of such subsequences is required. We show how to assess lagged subsequences for the full-period and non-full-period case. Analyzing consecutive streams with the spectral test is related to the well known long-range correlation analysis of linear congruential generators. Whereas the latter was carried out to exhibit correlations between pairs of processors only, the spectral test provides an easy method to study correlations between an arbitrary number of parallel streams as well.

    • James Given, Biotechnology Center, NIST

      Title: A New Class of Parallel Diffusion Algorithms

      Abstract: We have previously used first-passage algorithms to treat random diffusion in a complex, two-phase environment. These algorithms utilize an efficient diffusion propagator selected from a library of Laplacian Green's functions in order to traverse, in a single propagation event, a large portion of the diffusing particle's environment which is known to be free of interaction sites; they generalize the well-known ``walk-on-spheres'' algorithms. This approach was shown to provide the most rapid and accurate calculations currently available of translational hydrodynamic friction of an irregularly shaped object, e.g. a macromolecule. A related class of algorithms, the last-passage algorithms, utilize probabilistic h-processes; these algorithms provide rapid, diffusion-based codes for mutual capacitance and diffusion-limited reaction rate. Here we introduce a further extension of this class of algorithms: we show how to solve a general, stationary Smoluchowski equation by shifting the force-field terms, i.e., all the terms other than the Laplacian term, to the RHS and treating them as source terms to be determined self-consistently. These field- induced source terms then prescribe the rate at which diffusing particles are created at various points in the system. The newly-created particles subsequently undergo force-free diffusion in the environment, which we model using the algorithms just described. In particular, this provides an efficient algorithm for calculating the solvation energy of a macromolecule.

    • John Halton, Computer Science, University of North Carolina, Chapel Hill

      Title: Why Quasi-Monte-Carlo methods are statistically valid and how their errors can be estimated statistically

      Abstract: Quasi-random sequences are extremely useful, relatively new tools for performing accurate, efficient Monte Carlo computations. However, two major problems arise in their use. First, how can statistical and probabilistic concepts be applied to what are patently deterministic quantities? Secondly, how can we accurately estimate the errors generated by quasi-Monte-Carlo calculations? By demonstrating that these sequences can be viewed, in an appropriate and precisely defined sense, as representative of random samples drawn from truly random processes, their use in a statistical setting is rigorously justified. By further pointing out that a multi-dimensional quasi-random sequence can be decomposed into mutually statistically independent sequences (of one or more dimensions), we can apply the Central Limit Theorem to generate valid statistical estimates of the errors generated by computations depending on such sequences.

    • Malvin Kalos, Physics, Cornell University

      Title: Tools for Good Practice in Monte Carlo Calculations

      Abstract: Monte Carlo methods are now well recognized and widely used in many of the physical and mathematical sciences. They are, under certain conditions, capable of high accuracy, and often are used to adjudicate theoretical questions. They are also subject to misuse. I propose a concerted effort to establish principles of good practice so that results can be objectively judged for their credibility. More specifically, I will address the needs for standards and tools to answer the following generic questions about Monte Carlo results: Are the random numbers good enough for the results to be believed (at the level of the quoted confidence limits?) Are the errors computed in a reliable way? Are there systematic errors (e.g., associated with convergence to equilibrium) and are they convincingly estimated or bounded? The issue of determining and ameliorating the effects of the use of pseudorandom numbers with known or unknown defects is clearly the most interesting and difficult.

    • Miron Livny, Computer Science, University of Wisconsin, Madison

      Title: High Throughput Monte Carlo

      Abstract:

    • Michael Mascagni, Mathematics and Scientific Computing, University of Southern Mississippi

      Title: Future Directions in Random Number Tools

      Abstract: SPRNG incorporates many developments in parallel random number generation into a general purpose tool. Clearly, a single tool does not satisfy all of the future requirements for random number generation. In this talk we consider some of the requirements for random number generation that were not met by SPRNG and possible approaches. These include:

      1. Pseudorandom numbers for distributed systems: CONDOR and SPRNG

      2. Alternative pseudorandom number generation methods to meet different Monte Carlo requirements

      3. Parallel and distributed quasirandom numbers

      4. Domain specific testing

    • Giray Ökten, University of Alaska, Fairbanks

      Title: High Dimensional Simulation

      Abstract: Although quasi-Monte Carlo methods generally provide more accurate estimates than Monte Carlo methods in "moderate" dimensions, their advantages diminish quickly as the dimension of the problem increases. In addition, generation of low-discrepancy sequences may become impractical in very high dimensions. We will survey the hybrid-Monte Carlo methods that are proposed to provide remedies for the difficulties faced in high dimensional problems. We will then investigate the one based on the so-call ed "mixed" sequences. A probabilistic result on the discrepancy of mixed sequences as well as numerical results obtained upon application of these sequences to problems from numerical integration and computational finance will be presented.

    • Simonetta Pagnuti, ENEA (Italian DOE), Bologna

      Title: A priori and a posteriori control of correlations in parallel Monte Carlo

      Abstract: Two alternatives are discussed for feeding a parallel machine with random numbers: i) the processors cooperating to the solution of a Monte Carlo problem use subsequences of a unique generator; ii)each processor uses its own generator. In both cases the serious problem of stochastic independence of the coprocessors must be taken into account. Since in most of the widely used generators strong long-range autocorrelations appear, in the first case one can safely use only a fraction of the whole sequence: the smaller the tolerated interdependence, the smaller the fraction that can be used. Methods for computing such a fraction will be briefly described. In the second case, where an "a priori" analysis of the mutual correlations among the several processors seems generally not feasible, an "a posteriori" control may be performed by means of a special estimator implemented in the Monte Carlo program, with the purpose of monitoring the effects of mutual correlations on the variance of the Monte Carlo result.

    • Ashok Srinivasan, NCSA, University of Illinois at Urbana-Champaign

      Title: SPRNG Scalable Parallel Random Number Generators

      Abstract: We shall discuss the implementation of the SPRNG Scalable Parallel Random Number Generators, the accompanying test suite, and test results.

    • Todd Urbatsch, Los Alamos National Laboratory

      Title: A Strategy for Parallel Implicit Monte Carlo

      Abstract: For the Accelerated Scientific Computing Initiative (ASCI) parallel computers at Los Alamos National Laboratory, we are developing a new Implicit Monte Carlo (IMC) code using the Fleck-Cummings linearized Monte Carlo method for time-dependent radiative transfer. Our strategy for parallelism employs the usual Monte Carlo duplication scheme but permits domain decomposition, a constraint necessary for the projected size of our calculations. From the random number generators in our code, we require repeatability, excellent quality, and longer periods to accommodate our large calculations. Because our strategy includes a vast number of particles with increased communication and storage, the amount of random number information per particle must be small. Finally, the random number generator must provide statistically independent random number streams for new methods research in our code.

    • Tony Warnock, Los Alamos National Laboratory

      Title: Effective Error Estimates for Quasi-Monte Carlo Computations

      Abstract: While quasi-Monte Carlo methods are generally more efficient than traditional Monte Carlo, they have not been as widely used because of the difficulty of obtaining effective error estimates. We present error estimates that are effective for quasi-Monte Carlo computations along with some new low-discrepancy sequences.

    • Pavlos Vranas, Physics, Columbia University

      Title: Lattice QCD on a teraflop parallel supercomputer

      Abstract: Quantum Chromodynamics (QCD) is the theory that describes the strong nuclear force. This force is responsible for the formation and interaction of nucleons. By discretizing space time (lattice) it is possible to simulate this theory on a computer using Monte Carlo techniques. This approach provides the most powerful tool for theoretical physics studies of QCD. It is also one of the computationally most demanding numerical applications. In this talk a general description of lattice QCD will be given with focus on the numerical techniques used to simulate the theory on parallel supercomputers. Also, the QCDSP (QCD Digital Signal Processor) parallel supercomputer will be described. This machine was designed and built by a group of theoretical physicists, has an aggregate speed of 1 Teraflop and is dedicated to lattice QCD simulations.


    ashoks@ncsa.uiuc.edu

    Last modified:2 Mar 1998

    SHAR_EOF fi # end of overwriting check if test -f 'food.gif' then echo shar: will not over-write existing file "'food.gif'" else cat << "SHAR_EOF" > 'food.gif' GIF87a,çÿÿÿ2–KÿKÿÿ´Òÿÿÿkÿÿ¥f™f™Ì™¥ÆœªÜªÌÌfÌÌ™™™fçÆÆ{{sBBRÿ¹–9¥ÎÎÎÀÀÀÒ›Òÿ sÜddÀÀxdͽŒ9s„{ªxxÿ––Z–ÿÌ™3ï99(ÜdÞÞÞÿÿÎ\\\zzz¥Æ÷zè´´´ðÜÜÜðððððð((dÜÜÜ<ÜPÈ<P(((ðÈdððÈ´ŒxððÈÈPP´´<“þTz“éP MJõ) ƒU«¦BÕzðƒ GÊ;6£J&"Òì8fZœ$Ò6Ì@“f¹‡ mÈD†\t~=H°®‹•`Zü·#‰–3ÞI´+W®•¥Ü3³VÏ5+zS¦¨h–´’託ºFjiV’VJ,kÅ‹é¥âñ– œùgWaÃÙH$€ÐšjÜFøµd‘‚¹%ˆ’@¼ù9‘±ÊÊè …*bx­õšn°ëzô+³š¶–,²Ê.ëï¾a÷C %‰\\qŠ°¶O¦ã_ƒ%Œæ_˜4îG.l„«ÄU{ãÚ|'¼ÍuÎn£ùÊÿ–ÇÀæYŒ}"#FpÆžJÍO"ö;Hé“=ÛéäƒLY q&@¶°€(t[ßl1Ê™®§ÓÝÝW’ÂJ‚¼ß±øU:JíÍeþÆâ!¾ìGD䑇1üLŠÞ6ŠP*(aæRHE ¯pÅ2¥Žh, ®uÛÉ’K•qRd\!§Ã¼µÑ‚÷‹ãñFGøaPŽpœaý(µF”ÅK,ö2ì%¾Br‹ÞËŠè’wD˜1—#'IÉJâ«q`¼Y5G<ʱt^ %ofGùej0äàâðöÄî˜è‹!«cDH×EY>2®¬¤.uɬ>ÎkLVu–3!N°”l™2÷ÕË.Š™¸«×+Y¶EÔlR‡ŠÌÏxæÆ0zSw» ç%·7¹V>ƒ}›ä¥ZiNÊ‘Òz6™&U4éʾ “–zþe*q™ËpòR3¾Ä&ëU¥c¾P’edã®Ö5DXÆò*ÀbÏ õµÂ{22Ÿ]Yô6ÊÑŽFOR”DhCºÎ’夣4TÀ„Ð’ÖJš]qèC¯"ÓQyXÌé°jÉÅžæô#_ ªP‡JÔ¢õ¨Gm)HÓ¸TuºOüäÕJQWÍhrW´á¢ÞÑqæ0žž%±¸t³òI©hM«Z*Ò2ZÒ’OUbT¥ô«íS®aR¦ÚB{u5“6Eç¯ÈÉ@VJ²ñ¨b»Ñ¶:®êÂkû²F»jTk~”’J¨ÊÈs²-b'=¹Y±66ëz¢yRÈôª íþlh®&;v’”Uœgÿ X›Šv¢Á¼c›Ú—Úë­­ é UÙÛ0‰fлÝ9e(ÌJñõ¤d™ ocÛÈF"’™/Ãí¯›DíÅS¤¬ejd%ËYºŠ§ w ŸÙLÊn3 c÷«Ø ’w®°§?ÿ Ÿÿ ´¸³-Ùùœ)F Ú7“øeÜÖDFaËöIEÎìqÀá{ØÃÅS0óË]•iH(R»%{±*€ÿö–(Ÿå®t›kW oÕ¸çí0H›:æ"Š Õ(ÛkÛXºøÅÜ®Œ¿ÉÆ÷ÆÓmÔ¤ ÂU}Ø Ù‚ILá.›WwöÒ² "ŒË/¹P6–mþ”w¢>zYÅå•ê‰ à¯Ç‰bþ[ŒÏŒ: k'ÍÎõ‰bÒæ8Ã9¥ïé™Küå;÷íÈùÊž›Ìä 'ÐåñFMh‹úÐuNô‡ªDg¿Gy-Ö-†È\æJ§Ë²˜vïš="¸Ü¾ÔÍ51§}k;_yŽ´»êg^¿úyOô¬1RèGk8¾rÞu‹ì«›[Ø•"ö´]]ì¡$[×ñbŠóíêO«tÔÛÆq=s­lÄu)Õ£qºÉ‡Z5‡;)…Æ®¦G»®Y˜Úwv#¤Ç‡IVsQÜžwW¾ígÓÚ$ëãÕµM][Åàcƒw÷ÈöëšÆ›ÒPb¸¬þïí“qÓuâPmâJmÕÿZƒ×ä2 DzŽÕˆ5·T·¯'òs¯Kp'QÊW¼\–c5XdÔDÃzó9 VtyĹVAéž‹º^µ¶õáÙ×vÉêŽTÔƒ]¹NÖ/™µ9Ú™pž×܉ òATçæ/™gè­6)¶—]"³O|æH$­éBüÛbêÕÒn_Ù¾9 ”Mߤiª»ÝqmïÁ¢'×+x‚¸Ü)öjÞCþö†Û®²GÉ·Ä)ßnËôè‘ÔùæÉ[?§«¥òN<”‰Þ:£î’ß:´S»xƇ)Êlyëo†•GÙÞ3¸çó‹ý[ùLò ä5þ^¥k]ó_×¼kº/\sõ“æš=ô»bØÆÖ;÷véI¤xŨ\Þ>K+ÆÂ6Š“ï£gþ7€¡&Xf—M³w{Ûõ|m7z¤wdò’••}D%ŸqwþçqÖ4X~Z£U€lgm (2÷Buü4fuÇ×xñ¡@pCe!„ÄS×tJÞuPY…~4wJ-#iø}½&Q0W‚±òn(˜k*(c,Èw*§}ò€V(ƒBEƒ`“+dztõF•s¨fv³ÄIv$i|ô-f'‚ç%)xÇd’¢d ¨pÒ÷€­WMz‡å¡@P…V(a(…'Å……å…þµ$Za˜ˆÚdZP§yíu¦Un\r7„˜ģ‚xîg‡ k^#0–2Š¤8)£¨EƒVˆ½7ˆögƒd8Z›5VM'~³h‹LGCTX¸Âq Èhç•QÊ—aÙ¦‰U‡}æ‰ 7W‡)¦ÒhŠm~ˆ®ˆ]°ø\²ˆL(Jt„‹¥Äq~—Q7×I:á!Èn`å‹ê7aÆ¢dÇV^Mø‰O˜/‡Ô! 4)­6°1ƒHˆ‹x^D?æXLâŽ÷];TsI6j8>ìfš4tÙÅÍQ—%w%V^ŠÁ"0’$Y’&9’k؈%U(Pƒÿþ¸"HxYf~ò‚Ex×+'øyÉŒ³’wv’DY’×ØŠ/éX(“4Y“‚v“ˆæ!uÄGÃÇ{ñQ_ÆFjüuúb’@’f’ÅÃ!Ù‡.ÙûcøW|p—r9—ZÓbpø•té–Œu/y —kuT´rH"9’e)–FiHª!˜Šù=Ù˜Žù˜™h%AE™’y™9)&P“¢›))˜š¢éŒ6¡•¦yšªa˜ª‰’¨Ùš®ùš°›¯¹˜´I3£y›Ee™_1,¸Ù›¢xŠ’B¨HŠ½™û–!›Z9˜d¹š¬©œÐÒ9ÔY45,}Y|:þ·†jè–`‘‹÷›Ó8žÜ žƒöȉS]‚šÌI˜%9–fÙšµ9ŸâcöäwJ¹ŸüÙŸJ))û)àŸŠ´bš  Š ‚%>W¹yÞé!ÔÙžðYJ’ëyŸ›ôÙ¡2áù™:¢üÉjé_$ÚŸº ,š •R”0êPq؇¤‰§>ÍI˜…I3Ú£>ú£7:3 ª)Z¤V8)òa¤ê-Ú¤€)0Z”2 •9‘}.´SQÙžDÙKã¡^š¡@¦×Ù™òI„' ¤Eê’IŠ¦WȤNÊ¢Pª£F–ZSJ¥òGv1:2”q 𧀨‚:¨þ„Z¨†*¨_ê¡bj)lʦ-懪|o §qj¡ªy¡wŠ§ô¦xP´¥é‡”±ñ‡‡:ª¤Zª¦ ¨šª%Ê£öɨª:¢kʦ’:© ªA9š£˜ú êG} u¥Çswû()§:¬ÄzªJ9 ¯š¬«*¤²éªÊÚŠÿˆ¬² &MÊtz¡…‰’ºº«5š`MIÚ’P¬äZ®¨z¬Ïš®)j)Ê鬯«$ŠYJÑ¢¡¡¥–úžF¹­šžIN*é§æ°äŠ®êZ°ëJ¦Cº– ¯h:«.ZY/Š¯k§¬÷Žü*Œ‚r>ˆ%ªÛ±¦ ²iŠ°°i¢F* ©Z„ ê­¶šþ­Ù*oZ„ (”, [,é±:;ªÇ*­"û³#ʮˤ «©Åˆz¥v:©2Ë­—h~Xs³*;{µ„ ²jžûõª$›‘ì [Ë°Jú´ØÕ(©)¥´j¶ûÚ­ëÀ .iµX[·ªµ* ´h곩úµÈ¶þI¶e›´Å%Xa¯M»¶„Ëu4û¶·i·X‹·y«·'«®s¸œëi²Wx´²Ú–”ã0C«µ:£èy±[Ï°…Z¤’;¨”»– «ë·™ ¸ÑªªíÕ{È'ºBº¥«©}궎е±tÛº³ëŸYK°•»¼´¸F¡ª¶»¹ þÉ· «|3É‘™H,¿ ¼l ¡ x‰È[¨Ñ°/I¢±¾­¨'¿ÐÊ– a è¾ýˆ¿z‹½Wx…aÑ··{¸Ö[´ µ¤!wr·ÇÈÀû¤‹Û¶5JƒQË»yʱƒzD²š#ŠÁ÷³ŸÜ¿èªÈúÁý¨Á³Ë¿ö ÿ‹¦Õ;Àñ ¨gÀéø( | ¾Pû^µuù•»É+¨Ý”¾±”ç'Ä/9xCœÄ½TÂÿWÄ6‘®(ŒÂþ{,Àlšœ[ ò5Á…[Ã5|à Á5f2å4ÁúÃG÷Ë‚—H¼–jÂQ'{%  FÔ}Є<êÅEºÂFZ½þD»ÁJû«,ßKº8l=Òc¥eÖ?˜!×8)ÌrœL’¨ˆ7÷ˆHQDðÃÄú\Rw)Pü¼J:½UünVœ˜bËŸ"vj›øÅàƤ}Ñ#ˆÎÈáÇ”7Áº“Œˆ¿5vmÄ‹½ˆG\ÉïätØÄvÏÊÇ©JÅJÚÂX¼Êô˽úòʇ¬¸×FÆ 6}ó‹X¡gŠÆilDjiÇÉçƒg G®È¨Ÿ^ø l@¸L.Æ>TžÑS Ìü®R Á:ÀÑlÏ.–¹ sÍN+˾VóÅÍ¥‹Iy¨S±”DœÄKiÂÙX¿>¡”[zѸ½Ì¦¼µ ¨Ð¬¹ªIX1þÃ^ÆÁv( Ýei¦hzG£UKª!ë’gʦÎüÑÉÚRñºµ< ÅQì_ƒšÊB¶y•ÒöҔJ©-­o…kßi}R»Š`aÁ†J¢Ä¿ñ«¼°ºÓÎËŸû¼Ÿ>ÝÑbÔ=˾ë›Îþ+Ö GÒFÝ™×yª¬Yîa<ÝNmŒR8d ÊÐ5û¯9®¯+°_ Öù<²ŒÖaÝØý;ÖGÌI GD¨Õ{?&Ý ‹hOηÀñ°6L¯}UOÙ×÷8Áþ㧄]؆ͼ °Â‰m°±íØöÒþ¹,‘=Y2u\½Ž‹hÉHìĘ²‰¢³‰zí¤‰œi¨- )=]ÁâÌÚþËŸ‚** Ùª:Û \¹`­ÑºèCG¨SÑäM~ nAåSn¸þ[©À7ŽÜó=³ÛrßÑÏ«mæe>½¶½ÌF¾èëÚæeÔÐ:Ò’‘tmÒܽ~u"DÑåîÈ)æUJ懎è‰> \ËX, é‹=¿Kévû-×Þ»•Z‰è^n>fUˆ>‰nêfn ©Î_,Í*<é`!Ý¿Hëqå·Þ'ºþé½Êzdœ}ؽ!k®?­íÄÞÝFžÂ¯ÎäÌcΞ¡ÕÙQ­Ž„½"êÍXµÞ.²ÜnÖÞ>äkî¼òñá²3ëÑœdÀR¢½ë3k³I9ï[ïøŒð* îâ~ÖãäÚWÒHí"³×Ô¾{[èãÀÇð _®ÝîñÐ:äjnþ Dè¦+À^q\þ°_ðˆ’¤Y,ò© ò!?¢:;à~ ñ&¿ìˆ_~{¸C»•ó`»vð6¯¬8oï:¹‡íðÒºï¦PC¿ò‡;Ó¹^º ŒÈIÿGL߳ŗVøô ¯Õv›¢dáêVõìVÈCªrÜñõŠ«~å_ÙNÛüÛ÷ùî÷²›Âh/é*Ýißö/ì¯Í8h+º©L´¶v/ß1ùµß¿Îë?à€øØÛù®®µhïèÿíJéáhM'_·äNª)Öø ¥òcz–™aùì^ù–ÿ٠ݶòÞŸl}ÑCœ¿9-ü² úîê‹®ŠõðAîódþÿó­µÑïúŸª]¶¾,s_ý/oû6QÐ<±²h¦HorK $¬ÇÞ=ü&îØÆ_ú œü#ÙØÛü¥, Ò?ý¥ =çí ,û¬ýqBà  D˜pàB‚ 2„Ø°`DŠ ¼X‘aƈ&4Z<@ä ŽK<Á‘-E²t¹2æK‘ lÞÄ™çL˜3yºÔTèP¢ ~ú|iÂĦŠ>ÅɪΫšìÐ!¥Å¬|ÍVlد™jt˜Ö Eµ?>ü±,Ư$ëÚÍèõn]½y÷Îm‰Þ¾síâ¥û•æQ—=לºéd¤‘-eŒôƒR§ š^þ*´Í«'J ü  ëGÉǪ~ýõlŶ #ÖŽ 7îÆÃyQrì‹‘0pâ(CŽ,y—$Èåeý”™yqL˜£)_9Z»Qê”7sÎ)ztçí§›ž…½uál†©Áv}/¶ìéÛµ Ôo›{ínÞÍ…Ó5Î0¾¼ú­@áK‰/„S®@¦|rlºÇ ; !ÛÎ2½/4ò¦/CúPZí#ö ª 6²â[Q½…òÃ/-ýÜâï7ñ9½sÏ//B°,œî9!{ÔkÃîŽÊP² 1lr*éxêP¨­¼RDŠÒ‹ëÄö0Š­¬±´j0FÝh³ ­ýjd³Íss7þ`Ê‹2(ìòŒLIÍ8ƒÒÃóÈûŒÏ›F$©D¼\ÏFù\ ó­3%¥ÍJ)”Ñ8MãLÈÉî| Ô ý`N:íTÒPUUõB@[Šì¼U£ÂJ«Ý4EÍ$•3R5Ý\3Æ6«Â•ÍïX’`ÈO!µ¥5k©Ô9ë\rÔ gÅ6Ã)Sj)Ÿ²>.»D4W]µQÅ7¥7cÙE‘³d±‹¦fYz¶Z‘<ÕWBg7`¢Z¥ÒÛÉ´köÉ‘ÄU´¢«Ê-×®7bq]xÙ‚±Æˆ‡tÞëžÍ7ºÆìõNQMNU`•ÞÖÙW¦f︲µKswsŽÅœw³µ‹!þ’ñÝŸ9õÖãWª×±¡í÷ߦ£[9j¦îe™½»Z³ÒÆ]´Q‹v®xL±ÉìU¾2‡¡aÑ>£ösi­3eÚZ§¥*ëo§n9)ƒõ®pgI¬¹k«š {lÅw®çœm„mÉ1íôm¬O9æ Qfo¾WøÞnë=sЯJÏE«Î]œìÄ[oñµpnvÚËš]õÉ/n›_£“ûw¬7߶:Ïs*=ôO­žºLŸ‡>áOÁ,ÜaŠÃlvíïÊvï¿·]÷ÝÙmÛrÓ•^–xõíÆóx'©vZëÀ«þ;Tï8g¿ù©kuÉüÍâxÖ¢ÿ l$Òøþ&w¬˜/sK»×ú4—?ã¹Ï&Ë:æ0çªúéOxø{½Õ0LIÌl4Ûã®GÀ×i¥/„a eøBñ)ÐX«›Ü‚‡4 I}%ƒ D.s±(a瀘¾‚°eNŒ_èFØ¿Šñêg#ˆ\vEœ `†_Œa mÈŸò%qƒð몓j)l9Ø9Ìa •AùÍÏo4ÝÓ–˜ÆéqmKW$NlÒ¶ŸI™>_{c€E22ŒcÚw–’¬6:/a„[‹$ &$[ªÈ`óv1±xÌã¡)£¸JVö0‘$Í&æARg ú M¥Ë:’†>ƒ$Ç–þ¢˜JŽl‚<¹ä“ (²å'$Bjæô8erG $Ò#UR•É„ßCçÇ…ðQоvÂÈЗŽôeR'Æ`®§c¾£¾2ɬèõÓŸ;ìI3‘ ÿø&šuæ5™ãà4ó8hÌcÛÒ(ÎVæÑ•$ÌXGÅFÓ̇§UêPƒU8=JQYeóOŽ™@Í^Ÿ„þÔp#+jê¥$BKD†i‘#õåR»ˆÅzKSŒ¿¾*V˜Q6TMq“'= O¾10ší,C<‰¨ÁHëTae`ÈÀùD;Zˆœ= l+Xû°N>#íeb縓òî;eiêTÔÖž®²šÌZ*³f™¶«ÊäLOšbÑŠt~ܨ¸¶8ÛJU…»n©"¯º=BÒ±”l£0©×ÒY–ºF¥Ì'×\S=·‡vE&@[»Þ½6l©'Úèw»;ØÙ¦«,â yÉfÞNᓽw…é{‹ ߧÑw¡ÛŒ 4,| ‚h¤è…¸¶EÓÈò+ðî)C\fO{Àd+ißþ˜Öøjî«{#¬cènXÃ.èðýô â Sf\$ö`QìÔ›Ml8ËìæBW*sæo‹ìƒóKe.w¹–àŽMàã»`= ñ{u|d²¬Î'^2“Kü%­Æ«ŒqÑ jc>‡9y<þ3˜‘6fygþ²1Y+3.½Ò\%°€½6é:Û¹…È3²ø(“Ì€n¯ ¿³a ›ùЉÎkš±Óhs¢çQqÖˆ6Vi-Ó?“dù<é¾To Öò– SI–ÚЇFô>)ØÍUKµÍ¹"1¬c"ZÇ©b™×0%e ‘ndƒR´qO½¹) Ø©Üñ±ŒìSþûúƒEžLêž]âíJ{ÚtÆ·›)­ï}7™5ïÁv{¼3o‡•Ø¡^ô¦=<ì¶Ñ€ÝÈFuuáyWÏ=]±·ÚøíoŽË:"ˆ¹›ÛIË«˜ê¥p°™‹ðªÚÝ \ €‡û™¨ŸÉ•"tfüÞýžs¿CNm¢Û0&%ÿʶc‚ò¼Ú<¸ŽVŸŸÎ/ëÞüÆ ùÌñwï9ÞðÙyjÈâó3y¼è:ЇôM!5&P¯sÂíÁ—G}_>i£{Ó›O"{ÙíåŒÌí;Ý W]Â_'ÓÎIö²ŸífÏ7ÚÓÎñR.o’S7¨“võ2¥ó]ö猇Ûw…ûþýÆÝ<½/qÒï5=Ïæ9™ëç}Üñ“§üÚ%?4néÙ%£/}‘©ELç¤æ÷Ä—{Η®MªÐçæ  Ra—†ç9ïʼŎñÙ§Xí·×½ä!ÏöMwÆvÂ’_Í•œø¿W>üßòë?þ›þõ›p…]Ñ*»ê¾Ÿ?ð³½Ûýðã«$—s:ö{¿—½¼»å“¿®RµçÓ›çúŽü38fi½þÒ¾W @ïÀÈýD@$ŸèÚ6n<У² ¬¦¼K¯ ­P¼žA¡+@%4À\B\»§§+™‚³éaþ‰d?|À„?»ÓAÖ³¿¦[µb*!Ü/ŒtI*A<ÁlÂ'|<9„—Þ±“ª£B¼Ë™§c¾©ó~›hñ!¼:F®ÞÛ¡ã:C"\:5ÜZ£ˆ!À8œD,¿n!¸èa¶eš;¤Ar³¾T&\ºCd©;‚>«Û$F{ª­R+z«Ä´ÄñÛ=79¯»ã6®ãÄo[½aC?çëÀR´;e9?¦@¥_[Ä0ÜG4§J‹Å¸2A[Ì=:TÁ8q¬-TD=ª;QÛ5ºaÄ"¾¨Ë²áŠ.O EftyÄjK‘™Åj¤ÄïƒB,F›c@ºÛ1Q<< J>,þ”À¯À/–[ÅlÄgkÇj3ydÂZ´F:ÄÆ{*ÇmÜÁnÜGþ“º ™H4EæCÆ¥°¬_¬È‚ì¿Gq4¶»Æ‚HjTA'4@\Ä¡.Tž¾é4`l¥4Ó<¾½#ÃÔÒ?Âã/0,É6K—dóÀ¬³‘HüĦlʈ”‚Œ©KEeSE1„›¼Ç”$ƒ97‘\6u\ª¾RID‘¤äâh¦ó #yÈ—¼!ß3É⺠3<Ë7§ùCá²À®ü›Á'û¾#ÉãÛÃ4$JŒÚ=ö`K‘[ÈÔ(ëiËx¤Õt¿bÄB™ÔE«Î`ºÎ*?ÿtIKÜMyq ß„¯{AŸíº)aºRŒ,Ñ™ždOõ—½›PŒ 5L ½OÑd¾ŠÓ õ-"%RˆœGï´L·98>¢#ƒÜÄ”þø‹ÑRÌ<å+À„¿÷T˜àQÕÉ=9Õ¨8õòг8Ò#…KzdÓïdRá4P~¤È›´#¦«R­–¦`ÏsE ýC ÝQ/H•Á­\Ç׃ÍH:‘#í-uÈG…JmkÒ…¨¯4Oá9Äq´A2ôÄ=Ëc Løäà E¾ú,U@Ü?ì 5%—Ù¬Lú8§\É$]Ò„SºëE}LP~ÜÈìK¿lO›ôDÎô²â”yõÆTÁ­hT\TÈ·“K©ÄÕM³ÑeÉÑlÍ>D¦=ɪœ/aÅ»cÒdeÌ9¬ˆ’`ÕgTðl¯O$Bb}_ô¼ù@œ¸»Âý6O­VpþÕÕ ÛdÅÅþì8Xbue°h•ÖaôF~ÊœæÄÑ*Í/nýT~ý;`\ªUÅÆÈœ3j,X‡2X*£‹dQ‘õ@ÌÐÑüU}õV»¤X×”§$£kd#íüØ$Ð[UØO{© íUK’Ø•]Ø–ý×qPþŒýlÖ[œÌñÉF ÌÙo­K«„0?$Ô‘ùY ÆµÉ‹%ZaÚIÚØ\ÚÝ)# |ZelÀŠµ›“uP,ÅZaÕÒa[,ýÚ´¬CÞQ \{S(å[•Ûº™Õ“µZ•mY’ÄZ3½•t5œ?J òÃ[¦½Y¬2xÝ×ßéÌ~mX|-ÍnµIËÁøLV$ þŒÛH"Xƒ‚Ü»•\„u.+LâÂKéºÒ‰­›Þ\‰¥,ØUÇ™ ™Ñ%ÝG1R²M]šºÍ6IÑX¢qÝ~d%Ù%¼ä´¯Â0 Ü`íS©}Û é<|œÄ]^¥=^PB òqÌ…\ Ê1ŸÝu ˆ°›Î%ÓÁ”ûIÛ=+ÍËí3ém/‚3[SܘUÉX­½Ó]6y2²¨cß‘ Œ~9(‰£º°Âš\úIƨN‹=>PL®žÑÍÆÜsõ Æ[ò-a˜œ\Íe&š](÷%©<ÊÞ\ËIwÛÞh̼+Äýàÿ a¹°©Õ5ßô5˜õ\z:²ºÀ°¦ÞþÀ€¦ÞÄÀõäÓ³%NPE¼a\vÔš Ûþš¥DàæuÞøAâ…j(© º‘‚j«8^.6¦Ù+FÜ,¦cŠkÅ.f›âõXgµ[ãlk^ã¤tc†â7&l’c‰¨_£a!ÌÒp4Dà“ÁTDT³â®µÿ_;CßB.9˜X_„"É&V&n(ÿ€ä7Šb¹Z@Ô2Íùª>íå]K:Z$)FNF?F]œá@¶Y÷@CÇh;%ˆf¢Û¬Fq.-¾#ÿ#a/ÜüdKSËH²+[åÛe‚¢<”¬¹’úÂæJf.üþõLpõÒ¾=Há%Ÿ~”ë,—Ç%gP®ÃWq DÎçç]hÌu–k¦ãJÉó@[~Ö? =·N>af]Šá‚îèÅu˜–a†V£* ª •A Ü×|©a‹.Ä’6²ì³Æ5AZÐåéýéSÛ“þ!é(OÊU †ç©µŸ™¦éq“iÄäœ6hUÝQ¶ê,bëUawê`dØ ÚœÃ|ŒR‹5ΧžÎq‘ê6°Ç½jäÍ´½åA®nš¤~R4DÅ:ú ²¾Ôäݤʨžê·fV¶†¥Rgåk‡îêó 'Û™ÉëUÜ¿ ~ÝüÍLÑOÈlj>6›lþAîÑ~kîX¬®Š½=£nnèIÎà鸤!»ŸÉŽÞ¦Sh´.ÎßSéþìŒðb16f=çó]fÕö°Õ³.êjè믪ÑõéÅôf×ÓáÎ.Bµm‡s.m°­GIÕŸò¬ëå¾ìx¥KËeõ™Âã¦WàÄmR,>ë¾îÕømÙŒžc.Úîa·¾Ä¥x&ÅX­¡nl'·xþ[ç³çmjˆîk,Þí«©"àöÚb¾Ã&åªîoTžÖÆvmyýŅЗ;ºÔßÍq߇R?z¶V,ÞÀAìÎnüžðá¾pã]WÕÆgº–agnckñ,¢ßõ\ !ž"_.úšþ–²î_¹37ÁÑèú–ðü®qý&_³ÌðãûÊwþ²d­þ­’¨æSŠžJñ‹åWNË]lí–?ù>HÁÎi §òbÔÖršÈ§ôÃc·Û‘žåÂ¥(ž‹nAóÒ&ÄÐ)Yž ¹Ë&îeG΃q³i߶s n+w\QvÓ-?ܧÕßè +4‡ãšRõW¾ ª.(&.­mJ^7rí´»t×Êô)¯Y$ n‚EßÓÍƇ&ÕŠ¦S Š`8^c†B(0–ÍÒ‰AoäXfQd^”ÛøÆæùm´q߆ž»H›ZÓ;'åaßÎö()Fö­‡6þƦG‡¦>|à(EŸ÷ö’¸råy¿õ]uqmÚõf;!)+ f [Çñ:7à^¦<–yyQ‡Ú7GãÁPø2?ñ‘ˆßÐâ,•ygòøN²á<æT9‡júVxyÇöyï´ºv ®÷bÕZW£,[™È?ÿsñ6ð?©âêJ-ï¦ôWtù—ÿvp7 áohâUç©*oóŽÕX•±}ö^§S"óFµÌužô®¬è¾|~oé]Üg'SdÄ`,^aöGzÚy¯)Kˆ©xøäB¦¦ å¼Vç½ßˆ^ï"cûÞ¥Ò~Éè^÷utV¡k:»ï©)Ëùòöµèþ‰×î¨Dš“›ËÆ+Š’l«Yà J+6DŒFë(‡Æ€^Ôͳ©/˜E$šµdæ¶ÔªÉ œàÉ®VÙ®T¿E3Ìöåy+ÈÜå ìõ˜çhƒ1çêtK;mò;œWyѧ—0ÈÞkUŠmÚîG’ ¶ÕGQ8ÒËZ|—­é¿þJ³þÍ÷hÒ_hõJ¼v|³Ç`?|Å|hp`Áƒ.dèÐa‡'"áEŠtèÀÑã‰'F’,iò$Ê”!U²lYR¤J2UÂtyBJœ&k¶ü`ÂÄ ?d$¨q"ѤE*\:ô S¢?‰J¤Ú´¨Ó§ ­6ÝþªôëV¦e öèÇ´+m²¥Ùö-Ižp×ÚÔiÒîH‘rQJºðƒÅ†gæ õpÓŸ@³ Ʊêã°PP®\y)c±ferÎLøcÇ™{çÚ$Jší趩s²Ž›wµÒ©O9ÓöLø¶Á’’W^<à„bÃOê…˜U¸Ö®“-[ÆŒ{£ÀÍFŸ+Lšîé·«³»Î¾ý$Þ›/dz웰 Ù2mS'|§qñ½qNeÿ~&NäÉ%#VnðsÍñG]z›±§Yh×}Çq žæ [oц×^Û™·^Eе·áA#Í4Òo¾Ý"‰x…¨Ò@≞ˆ(Eöß‹xÙ€}õ•Eþ€éx Z ‚!ƒÝIw@–—R…¼M5azûq¸áŠ:IémZIÛo‘u|©ˆ˜œˆßLÆõwæP3R†Ùm&¥Yé÷™:䪉'M<Á¤—lMÈã“y(æ—*&º"I`6šhŠœý†×”\úãtþɨ¦sí5)Øœz¤àÚ•J¤w ~W«!Z¡…Jôž•‰ÚU©£W>:e¤%…ù¡”vUV©©€HY6öܧ±ŽU'v§)­¤åI^OtýY_te9++CŠ’Yf•–bIå–¼z™ß¤–¢{Ÿ–ŸbŠIÆrz—:y›¤Ý*SG×EK-þÁÓ>˜*jãùÄm†0‚Ûžˆ'2(1‰{©l‹ØšÇòjú¾lðO œ`²Éø’˜)nv&«u?lð”îi-jI¹¶°œñªêÃ…Ù\{Œ!'ÇxŒ&½ùª  È)çët¾ŒÌò†f}ûPÌùÍa©6# „­æåêbÝN8Ô›A?—ÙÂ~TuI/ípS*?MÕ"4u–[“åo`0Lêר†Íäͦºdy€¦]lÛnŸetp[ãýPQ/C¶UÈ#¤€ÈT—$²²nª®TŽI­WyÖÐ^ÛxØÏu§ƒ©±º¤¤ƒn9SÇeΡmQ ‘Þ"š®2²*‹Žþ5SŸn¦5ìÌÊž8_‰Ï~¶ž=Á–,Ï.÷Ë9ðbÏ0ñ6Fõ;T*§¸|¾ÍW-ú·KkͶæÑ]ýN‹7úúê¤Ð7áóWÃÈW¾£° }鳑‹5÷y‰t óDâ4«A- )F€&Ð Ž¶s ‹jE+Eá¬4ëŸMÂ;ßÝmY Œ Fø¤âáps SAJ‚²“%+b!á×±B¥ˆJ-Û[Ä&®GA1BŠ¢EdÑí†ü϶f€1ΫŒlû˜ Ä) ¢EzÐËH«³?V«.¾¢â‡Xx»Ç°ŽH:xVßõЋê‹Ün3F˜þI}Ã"Õ8£Nñ KX[Ih':r‡qÿ»U ¿¦;RƒÉŸ¬Î7Í-’‘P9Fx„Éÿ‹’R"åä8*™qÒ-‘â«ÈÇìe 2L¤ù ùÅU⦕d< UxÈÀyI2@¶œÓöÕ¹9öò‰Ãl¡ãLcšòrÊTÑšéLþˆp‰Ó¤\-ñ'Ày¶émº ˜×zùB–Lˆ”àìž8Å)”r•©L§:[ùÅ..”iÕdÓ˜Ël20#$ä¥>”G=s ¨í©Esž³*Mè"c©Ò†úÐ^“œ¨CÑ<]:QŸÜ« ‹BIÅÂpœ= h‘9Ó’rnþ¤Ïq¦+:,–¦1ž‘„© ‡ZnšrQl —úÉÓŸ‚ô¦=¦³ ºÃ“¢ô™J}Œg¹©—>µ­-•ªz—ONZõªàÙé·êË>î3ZÌ<%Q·BÖ²&•}ìØ·óJ:ûŤ OopEæ¢Úz7Hñ/ÂÖoŒ÷ß3(§ZmŽm\ÇûxZ ²z$Œdé„9 Dò™ËìF ©9¼Qf1d©œÙnTWå§'šGsnŽžyÊÜ°5 ÙÉk´ ),æúÏož0‡SƒÔI±—“½‘Er¤Ó9Wö%W,OM¸\âù†Íh63YídD#PѨft›-å8Ÿ€Ò“þ¦ò^‚µéoö©ÀHªžc• Ù˜zшVu¢[ìW³ùÌŽ–ukkŠ[#Õ¼øY?‰m÷¼ç\”…läT»È>‹WïÂ]î-RxÈìn1´ùé”P»Ú6ÍÕdÁ!PÖVÄ4ñ¶!”å¼àÀ6l¼ý;ã×’¤ÞöÖ'¾ï*¥6aõV§*À½\Äv°ãl­ú ëϵÑrø­ï½¨;VJ·Ášn‘ˆÍþ•ãjåxEG cùÊú¢ GùÃ!Þ‰÷Û«ŸüŸ´džñò |àl<ŸuÞ_ž?Z“º3q“¡g¶ësËÌ™Nbª/]hLÝ9E«Y¬·ÒÚ\ïþÓu?œt°—Ým5W–,†÷• µ^¹âßùž¢À ^_ìy¶áL¾¶/¶üæ3u“>˜„ÝîõíU»F˜ù™Êcâ W~ì· ƒ<áV ã+­r¼–«ÃÒ5z©’”¬ºƒË<_ÌëUôn¯°bí"‰Ä6©›Œ ¿%ò”O’z8ž¶À>–s?$?ý©òÞE°³ÚùíëZLèÞ~Azo+I¡ X´ªÈ—ÄòWéø)¬2“o’å7§b»Ó€çžXÿ ½î•‹Å±P®D‰hœˆù1Š-JÄõ^Fœû „Y½ŸÃmXhX½¥ž¥ÑëížµÁ˜†\ôßXþÝ…Ÿ×„ÉýÞ¯<`ï…-  ÚJmáGZI._JÈée ãYZGÑÙ®½Þ]Ü^ÁYgqŽ|¤ŸY|žzŸÆ »…H•œË÷©`LÉÚ ÏŒé=„î õ(žJh`ÕDtiÙÅ!œÇÍå)„ˆèEöØá/± Ÿñ¹ñ½ÅpHØ s1Ä:ÅßÂmÊ•ó9ž¾åÞ‚Ç#F–ßMÝj!ÞÝÙ•K6maÀMÝt ÚQà‚ÍÛÚšœÙÙ®áßÊyÅY ÿ>[ÓOD!E…!Òˆ¢%ò—üM*¦"¾‰f±œ‡ä–þÈ/š–þNŽ-*—Š~€buâm˜´ù`ÐQY‚ÍUµ%2c;]Ó-Ía¡ríW#‘Ýá‘\¦b'©váÔzÐQMÈ¢3þY&*á#íÔÁ!;¦0.œëÉcìù[Á@ÎS„ÊÍ=c6Fà vÜEÌ“3ä(V0"dv¬â\Ô]‘£cÈ—›mÍ™=ÁÈ.jØH d†ir$\ =z]ÅEbBÐÙ5cð c*QcOiIdZ™ž)ʤ]Ý·¡P–iˆxÆqÏFã)™£>ÂØ;º¤gm$R‚˜Þ–IßB‚¹¡QèݬAcŠTbÞuˆZ^¤ÙI]@Ê¥FÖþ €yØá^—X.¤N~Ž¥<ÅçQDa"DwqI‡t æ•íícgIä9ÅcWÚcžÕãœq`HB%îqTxâ_V"_®!Kddd:&O$´ùÜAVæydXî`ræ¤<ß”‹Rf!MŽ‹¾À‹¹ho*fT}‹,±$i‘])ºV]ÙD4§s>çs!‚eäUUQâž'ݦ¹ì Mvcà^‚áˉ¤d"§j^Î:Æe¶t¶§sº&ìá˜uú›TŽæ•£ä‘ÅmÔxö¦•àmþç%âFq–grõÜQ²§{¶'|îßr]æXÆM½ û©_ºŒ‰®•Ÿ®™€¸’b^!pþþÊ»]ÊrIÝ4Þç@Ò›q¥K,(ƒÂ'+†fÌIè؆Ýô!h²EÞ醗 z£êDP!’œÉÕµ¸(tΊœÅh|ª "eNÏL˜Ý§I™`°)ΕÔ*T\áSkš’>§¡h|~åzÑèbäcVô¢ÒPiQ‰ÚmDäÉ)Slé!V„ì„©ž"阦áL^™wg^Ê&zá$_jš¢HTfiŠöãc.ªi6*—b½u©‚T*«¶ê‚^j§¡Wž$…b@©KxmÕTŽ*©Æ¡2ªDPÚ…Eš«k±Âj_ršþŒîšêLƒ>+´F«J+µ6g¤ê)²6iLꯡi§J+¸†+´V+µ^k˜fë—Ö Ü5ërþi©ÐlífM‚`¾+zud¼ÞëtÒë<Ú+(ý«w†Gxf&¿!¹«¹")º>Q Ñj­~k¿ RÞ ºÞ˜™:SV~ê«Å`ͨŸ¯$ zì]ˆã/%å ì±îéÂâ«+>,ÄVÙ~ÞØÌV¬ôÅ«~Zl?Yè¿j¦þÊÑy'¼n¿ÍkÈî Í"­Í"m÷M¼ê§mâ„ʺjºhËJˆ˜ì»"k ìÐî%eqŸÒvèª× âÊ»¬ÖŠ×:-Æ2 žuìÊÍüàkŽ,Û®-Å* ÔN-«®Ž¥¦eʧ:+ÁtgÛºKë…-w‚lÑiç¡\‰Þ­øµmÎ2`wö[åâÊ.àÓF-$>.â’ìÎ&-Ë ÐÊb+à¢hU­î×\¡tÕl+æ˜ Ê. ÎlÙ²mxŠMæÊ Íž­än« &­ïáËå.ïŽmÄ,Q´jÕ¾jêê} êúkÐNìhN¡ÚºKç>n¾‚¡$.Ôö,æÊ+õnÉZïö­¯ñžoåÚßøÞíÔ>/¶²lôv+̾Ž¸r’¦Šk(õo¸ò-ý*¬ý†àºÂ¬ëì/ÿ*0Ê6%Ÿ„ð«0µLÞàZº¶D@; SHAR_EOF fi # end of overwriting check if test -f 'food.html' then echo shar: will not over-write existing file "'food.html'" else cat << "SHAR_EOF" > 'food.html' Workshop on High Performance Monte Carlo Tools
    Workshop Dinner

    Time:
    There will be an informal special buffet dinner on the 23 rd evening.

    Location:
    Doug's Restaurant & Lounge
    348 Robert Blvd
    Slidell, LA 70458-1343
    Phone: (504)649-1805

    Price:
    $14.95 including tip. This is not included in the workshop registration fee. There will also be a cash bar.

    Map:


    ashoks@ncsa.uiuc.edu

    Last modified: 16 April 1998

    SHAR_EOF fi # end of overwriting check if test -f 'index.html' then echo shar: will not over-write existing file "'index.html'" else cat << "SHAR_EOF" > 'index.html' Workshop on High Performance Monte Carlo Tools
    Workshop on
     
    High Performance Monte Carlo Tools

    April 23-24, 1998
    Stennis Space Center, MS

    Organizers:

    Michael Mascagni
    University of Southern Mississippi

    Ashok Srinivasan
    David Ceperley
    Faisal Saied
    NCSA, University of Illinois, Urbana-Champaign
     

    Summary of the Proceedings

    Discussion Topics

    Registration Form

    Invited Speakers

    Workshop Program

    Workshop Details

    Fee: Since this meeting is funded by the US Department of Defense, a workshop fee is necessary to offset the cost of food (lunch, coffee, and continental breakfast) provided at the meeting. Thus a $25.00 workshop fee per attendee will be charged. Payment can be made at the workshop by cash or check payable to the Center of Higher Learning. Alternatively, the check may be mailed in advance to Keri Hensarling.

    Deadline: Registration deadline is Tuesday, 21 April 1998.

    Location: The workshop will be located in room 107 at the Conference Center of Building 1100 at the Stennis Space Center. Maps of Stennis and environs can be found on the web at : http://www.nav.hpc.mil/pet/Visitor/visitor.html, which is a part of the NAVO PET home page.

    Duration: The workshop will begin at 9:15 am on the 23 rd and 24 th, and will adjourn by 3:30 pm on the 24 th. There will be an informal workshop dinner on the 23 rd evening.

    Security: The Stennis Space Center uses badges to control access to the facility, and visitors need temporary badges to be on-site. Thus, we need an accurate list of the workshop attendees to assure the availability of temporary badges on the mornings of the workshop. If you are not a U.S. citizen, you MUST have your passport with you in order to be allowed into the facility.

    Travel Information

    Hotel: A block of rooms has been reserved at the Slidell, Louisiana Ramada Inn for this workshop at the rate of $50 per night. Please call Ramada directly at (504) 643-9960 to reserve your room and say that you are with the "Stennis Tools Meeting."

    Air Travel: The Stennis Space Center and the Slidell, Louisiana Ramada Inn are conveniently served by the New Orleans International Airport (MSY). We recommend flying into New Orleans, which is about 45 miles from the conference location (see map).

    Ground Transportation: Due to its rocket engine testing mission, the Stennis Space Center is located on a large parcel of land that is poorly served by public transportation. However, those wishing not to rent a car can take the Coastliner, an airport shuttle service, from the New Orleans airport to the Ramada Inn for $22.00 one-way or $39.00 round trip. The Coastliner encourages reservations, and can be reached at (800) 647-3957.

    There will be van service provided by the workshop between the Ramada Inn and Stennis on Thursday the 23 rd, and from the Ramada to Stennis in the morning of the 24 th, and to the New Orleans airport after the workshop adjourns in the early afternoon of the 24 th. In addition, on the evening of the 23 rd, the van will take participants requiring transportation to a Slidell restaurant for an informal workshop dinner. The van will leave Ramada at 8:00 am each morning for Stennis.

    Sponsors

    Local Arrangements



    For more information contact:

    Ashok Srinivasan
    NCSA, University of Illinois at Urbana-Champaign
    405 N. Mathews Ave, Urbana IL 61801, USA
    Phone: (217) 244-2937
    Fax: (217) 244-2909
    E-mail: ashoks@ncsa.uiuc.edu


    ashoks@ncsa.uiuc.edu

    Last modified: 6 May 1998

    SHAR_EOF fi # end of overwriting check if test -f 'registration.html' then echo shar: will not over-write existing file "'registration.html'" else cat << "SHAR_EOF" > 'registration.html'
    homediscover ncsapartnershipsoutreachsoftware_tech
    searchspotlightadv_computingsciencedivisions

    Workshop on
     
    High Performance Monte Carlo Tools

    April 23-24, 1998
    Stennis Space Center, MS


    Registration Form


    Fee: A $25 workshop fee is necessary to offset the cost of food (lunch, coffee, and continental breakfast) provided at the meeting. Payment can be made at the workshop by cash or check payable to the Center of Higher Learning. Alternatively, the check may be mailed in advance to:

    Keri Hensarling, Center of Higher Learning,
    Bld. 1103, Room 103
    Stennis Space Center, MS 39529
    Phone: (228) 688-3366
    Fax: (228) 688-7454
    email: keri@sunfish.st.usm.edu

    Deadline: Registration deadline is Tuesday, 21 April 1998.
    1. Full name:

    2. Company or institution:

    3. E-mail address:

    4. Street address: (NOT including city, state, zip code, or country)


    5. City:

    6. State or province:

    7. Zip or postal code:

    8. Country:

    9. Telephone:

    10. Fax:



      Professional Affiliation and Experience

    11. Please indicate your primary occupation or professional association by checking only one of the choices below.

      Faculty
      Postdoctoral Researcher
      Other Academic Staff
      Graduate Student
      National Lab Staff
      Other (please explain):
           

    12. Academic discipline or area of professional concentration:

    13. What do you hope to learn from this workshop?

    14. Please list any special needs below.

    15. If you wish to give a short talk, please give the title and abstract below.

    16. Participants are expected to pay their own travel and living expenses. However, we may try to find some funding for graduate students. If you need support please give the minimum support needed to enable you to attend the workshop:



    For more information contact:

    Ashok Srinivasan
    NCSA, University of Illinois at Urbana-Champaign
    405 N. Mathews Ave, Urbana IL 61801, USA
    Phone: (217) 244-2937
    Fax: (217) 244-2909
    E-mail: ashoks@ncsa.uiuc.edu



    ncsa
    The National Center for Supercomputing Applications

    University of Illinois at Urbana-Champaign

    ashoks@ncsa.uiuc.edu

    Last modified: 3 March, 1998


    SHAR_EOF fi # end of overwriting check if test -f 'schedule.html' then echo shar: will not over-write existing file "'schedule.html'" else cat << "SHAR_EOF" > 'schedule.html' Workshop on High Performance Monte Carlo Tools

    Workshop Program

    Thursday 23 April 1998
    Time
    Speaker
    8:30 am - 9:15 am Registration and Continental Breakfast
    9:15 am - 9:30 am Introduction
    9:30 am - 9:45 am David Ceperley
    9:45 am - 10:30 am Simonetta Pagnuti
    10:30 am - 10:45 am Coffee Break
    10:45 am - 11:30 am Karl Entacher
    11:30 am - 12:15 pm Todd Urbatsch
    12:15 pm - 1:30 pm Lunch
    1:30 pm - 2:15 pm Pavlos Vranas
    2:15 pm - 3:00 pm Malvin Kalos
    3:00 pm - 3:15 pm Coffee Break
    3:15 pm - 4:00 pm Miron Livny
    4:00 pm - 4:45 pm James Given
    Evening (TBA) Informal Dinner at a Slidell restaurant


    Friday 24 April 1998
    Time
    Speaker
    8:15 am - 9:00 am Continental Breakfast
    9:00 am - 9:45 am Tony Warnok
    9:45 am - 10:30 am John Halton
    10:30 am - 10:45 am Coffee Break
    10:45 am - 11:30 am Giray Ökten
    11:30 am - 12:15 pm Greg Astfalk
    12:15 pm - 1:15 pm Lunch
    1:15 pm - 2:00 pm Ashok Srinivasan
    2:00 pm - 2:45 pm Michael Mascagni
    2:45 pm - 3:30 pm Discussion


    ashoks@ncsa.uiuc.edu

    Last modified: 6 Mar 1998


    SHAR_EOF fi # end of overwriting check if test -f 'speakers.html' then echo shar: will not over-write existing file "'speakers.html'" else cat << "SHAR_EOF" > 'speakers.html' Workshop on High Performance Monte Carlo Tools
    Invited Speakers


    ashoks@ncsa.uiuc.edu

    Last modified:2 Mar 1998

    SHAR_EOF fi # end of overwriting check if test -f 'speakers_old.html' then echo shar: will not over-write existing file "'speakers_old.html'" else cat << "SHAR_EOF" > 'speakers_old.html' Workshop on High Performance Monte Carlo Tools
    Invited Speakers


    ashoks@ncsa.uiuc.edu

    Last modified:2 Mar 1998

    SHAR_EOF fi # end of overwriting check if test -f 'summary.html' then echo shar: will not over-write existing file "'summary.html'" else cat << "SHAR_EOF" > 'summary.html' Workshop on High Performance Monte Carlo Tools

    Workshop on   High-Performance Monte Carlo Tools

    April 23-24, 1998 Stennis Space Center, MS

    Organizers:

    Michael Mascagni: University of Southern Mississippi

    Ashok Srinivasan, David Ceperley: NCSA, University of Illinois, Urbana-Champaign  

     


    Summary

    This workshop was organized to discuss tools that enable Monte Carlo computations on parallel and distributed systems. The organizers brought together a diverse group of speakers who presented new work in the areas of Monte Carlo algorithms, parallel Monte Carlo applications, parallel and distributed computing tools, random number generation, and recent trends in high-performance parallel and distributed computing. The organizers of the workshop have recently completed development of a library for parallel random number generation, named SPRNG. The goal of this workshop is to place this new high-performance Monte Carlo tool in the context of current and future user needs, applications requirements, recent theoretical results, and future computing trends.

    The program for the workshop began with a discussion of issues related to the testing of parallel random numbers given by David Ceperley of NCSA. The next talk, by Simonetta Pagnutti of ENEA-Bologna (Italy), described recent results on the theoretical analysis of correlation found in common parallel random number generators and on the possibility to control correlations' effects during a Monte Carlo computation. This talk was followed by Karl Entacher of the University of Salzburg (Austria) who discussed the geometrical quality of random numbers and another theoretical way to study the quality of random numbers. Miron Livny of the University of Wisconsin then presented his distributed computing package, CONDOR. CONDOR could be a power tool for distributed Monte Carlo, especially when outfitted with SPRNG.

    The next cluster of talks focused on different applications areas in Monte Carlo. The various speakers were asked to present their application area in detail and to think about any special random number requirements for their application. Todd Urbatsch of Los Alamos National Laboratory spoke about thermal radiative transfer calculations using time-Implicit Monte Carlo on parallel machines. Besides the algorithmic challenges, this application furnishes some of the most stringent requirements for random numbers. Next, Mal Kalos of Cornell University's Physics Department spoke about new Monte Carlo algorithms for solving the fermionic Schödinger equation. In this talk he also advocated the use of controllably bad random number generators (generators constructed with known correlations) to help understand quality in Monte Carlo computations. This talk was followed by Pavlos Vranas of Columbia University's Physics Department who presented the algorithmics of lattice quantum chromo dynamics and described the construction of a 400 gigaflop lattice QCD machine machine out of commodity DSPs and custom designed ASICs, a considerable undertaking. The applications talk concluded with James Given of the National Institute of Standards and Technology who spoke about a new class of diffusion algorithms for the point solution of elliptic partial differential equations. Besides describing the new algorithms, he described a wide variety of physical quantities that could be calculated effectively with this new methods

    On the second day, the morning began with three talks on quasirandom numbers. These are numbers that attempt to be as evenly distributed as possible, but unlike the pseudorandom numbers described on the previous day, do not need to pass statistical tests. Tony Warnock of Los Alamos National Laboratory spoke about some new results that directly impact the use of quasirandom numbers on parallel machines: error bounds for combining of results obtained from different quasirandom streams. It turns out that even though quasirandom numbers have quicker convergence that pseudorandom numbers in some applications, N quasirandom streams combine to reduce the error as O(N ^{1/2}), just like combining pseudorandom number streams!! The next speaker, John Halton from Computer Science at the University of North Carolina, Chapel Hill, proved that result. The third quasirandom number speaker, Giray Ökten of the University of Alaska-Fairbanks, spoke on some new constructions of quasirandom sequences that combine traditional quasirandom sequences with pseudorandom sequences. This series of talks was meant to address some of the mathematical difficulties behind providing parallel streams of quasirandom numbers. During the extensive discussion on this topic, new results on how to use full period pseudorandom numbers to provide many, related, quasirandom streams was presented. This seems like a promising approach that needs more study.

    The next speaker was Greg Astfalk, Chief Scientist of Hewlett Packard's High-Performance System's Division. He shared his views on the future of high-performance computing. Two of the most telling points he made are that vector architectural features (such as flat memory [i.e., no cache], low latency, extremely high sustainable memory bandwidth, multiple pipes to memory, hardware support for gather/scatter, efficient single word access, vector instructions -- it is all the other parts of the vector architecture that matter more than the vector instructions themselves) are dead; and that almost all vendors seem to be converging on clusters of SMPs for their high-end products. These clusters will be based on the same SMPs that make up their server and high-end workstation markets: success will be based on maximally leveraging commodity technology. The last two speakers spoke about SPRNG and its suitability for this community. Ashok Srinivasan of NCSA described SPRNG in detail, and Michael Mascagni of the University of Southern Mississippi, presented SPRNG in terms of the design decisions that were made in its implementation. This lead into a broad discussion on whether SPRNG was the right tool for the present, and what are things that an improved SPRNG should have for the future. The conclusion was that SPRNG is well designed for current applications, but that new generators should be designed to better meet the demands of ASCI-class applications. In addition, applications based testing, coupled with a web-accessible test site would serve both the theoretical and applications community. Quasirandom numbers should be made available for parallel and distributed computing, but it was clear that a better mathematical understanding of key issues here will be required, first. The actual discussion topics follow.

     


    ashoks@ncsa.uiuc.edu

    Last modified: 6 May 1998

    SHAR_EOF fi # end of overwriting check if test -f 'topics.html' then echo shar: will not over-write existing file "'topics.html'" else cat << "SHAR_EOF" > 'topics.html' Workshop on High Performance Monte Carlo Tools
    Discussion Topics

    Tests of Serial and Parallel RNGs

    Are the current mix of random number tests adequate for the needs of the Monte Carlo and the random number generation communities? What other sorts of tests should be made widely available? Should these two communities work together in developing a suite of tests based on applications to create a tool that will (one hopes) predict undesirable interactions between generators and real applications?

    Applications

    What are the applications requirements that have not been addressed in the current generation of pseudorandom number generation tools for high performance machines? What sorts of future requirements need to be considered in the further development of pseudorandom number generation tools for high performance machines?

    Quasi-random Numbers

    What are the quasirandom number needs of the Monte Carlo community? Can quasirandom numbers be implemented with enough support to allow their often subtle application be used effectively by relative novices? What are the quasirandom number generation techniques that should be implemented for the Monte Carlo community? Are there fundamental differences between providing parallel quasirandom numbers and providing parallel pseudorandom numbers?

    Theoretical RNG issues

    What recent developments in pseudorandom number generation stand to benefit the the Monte Carlo community the most? What are some requirements of the Monte Carlo community that need to be addressed in the search for new pseudorandom number generators?

    RNG Libraries

    What are the roadblocks that vendors face in adopting the parallel random number generation tools presented in this workshop into their own scientific software? What are vendor requirements that have not been addressed in the parallel random number generation tools presented in this workshop?

    ashoks@ncsa.uiuc.edu

    Last modified:2 Mar 1998

    SHAR_EOF fi # end of overwriting check cd .. cd .. cd .. if test ! -d 'EXAMPLES' then mkdir 'EXAMPLES' fi cd 'EXAMPLES' if test -f '2streams_mpi.c' then echo shar: will not over-write existing file "'2streams_mpi.c'" else cat << "SHAR_EOF" > '2streams_mpi.c' /***************************************************************************/ /* ____Demonstrates use of shared and non-shared streams____ */ /* Each process has two streams. One stream is common to all the */ /* processes. The other stream is different on each process. */ /***************************************************************************/ #include #include /* MPI header file */ /* Uncomment the following line to get the interface with pointer checking */ /*#define CHECK_POINTERS */ #include "sprng.h" /* SPRNG header file */ #define SEED 985456376 main(int argc, char *argv[]) { int streamnum, commNum, nstreams, *stream, *commonStream; double rn; int i, myid, nprocs; /************************** MPI calls ***********************************/ MPI_Init(&argc, &argv); /* Initialize MPI */ MPI_Comm_rank(MPI_COMM_WORLD, &myid); /* find process id */ MPI_Comm_size(MPI_COMM_WORLD, &nprocs); /* find number of processes */ /****************** Initialization values *******************************/ streamnum = myid; /*This stream is different on each process*/ commNum = nprocs; /* This stream is common to all processes */ nstreams = nprocs + 1; /* extra stream is common to all processes*/ /*********************** Initialize streams *****************************/ /* This stream is different on each process */ stream = init_sprng(streamnum,nstreams,SEED,SPRNG_DEFAULT); printf("Process %d: Print information about new stream\n", myid); print_sprng(stream); /* This stream is identical on each process */ commonStream = init_sprng(commNum,nstreams,SEED,SPRNG_DEFAULT); printf("Process %d: This stream is identical on all processes\n", myid); print_sprng(commonStream); /*********************** print random numbers ***************************/ for (i=0;i<2;i++) /* random numbers from distinct stream */ { rn = sprng(stream); /* generate double precision random number*/ printf("Process %d, random number (distinct stream) %d: %f\n", myid, i+1, rn); } for (i=0;i<2;i++) /* random number from common stream */ { rn = sprng(commonStream); /*generate double precision random number */ printf("Process %d, random number (shared stream) %d: %f\n", myid, i+1, rn); } /*************************** free memory ********************************/ free_sprng(stream); /* free memory used to store stream state */ free_sprng(commonStream); MPI_Finalize(); /* terminate MPI */ } SHAR_EOF fi # end of overwriting check if test -f '2streamsf_mpi.F' then echo shar: will not over-write existing file "'2streamsf_mpi.F'" else cat << "SHAR_EOF" > '2streamsf_mpi.F' C C Demonstrates use of shared and non-shared streams C Each process has two streams. One stream is common to all the C processes. The other stream is different on each processor. C C Uncomment the following line to get the interface with pointer checking C #define CHECK_POINTERS program twostreamsf_mpi implicit none #include #include "sprng_f.h" integer streamnum,commNum, nstreams, seed SPRNG_POINTER stream, commonStream real*8 rn integer i integer myid, nprocs, ierror integer junk call MPI_INIT(ierror) call MPI_COMM_SIZE(MPI_COMM_WORLD, nprocs, ierror) call MPI_COMM_RANK(MPI_COMM_WORLD, myid, ierror) streamnum = myid !This stream is different on each proces commNum = nprocs !This stream is common to all processes nstreams = nprocs +1 !extra stream is common to all processes seed = 985456376 C This stream is different on each process stream = init_sprng(streamnum,nstreams,seed,SPRNG_DEFAULT) write(6, 44) myid 44 format("Process", i2, ": Print information about new stream") junk = print_sprng(stream) C This stream is identical on each process commonStream = init_sprng(commNum,nstreams,seed,SPRNG_DEFAULT) write (6, 55) myid 55 format ("Process", i2, & ": This stream is identical on all processes") junk = print_sprng(commonStream) do 100 i = 1, 2 rn = sprng(stream) write(6, 66) myid, i, rn 100 continue do 200 i = 1, 2 rn = sprng(commonStream) write(6, 77) myid, i, rn 200 continue 66 format("Process", i2, & ", random number (distinct stream)",i2,": ", f8.6) 77 format("Process", i2, ", random number (shared stream)", & i2,": ", f8.6) junk = free_sprng(stream) junk = free_sprng(commonStream) call MPI_FINALIZE(ierror) end SHAR_EOF fi # end of overwriting check if test -f 'Makefile' then echo shar: will not over-write existing file "'Makefile'" else cat << "SHAR_EOF" > 'Makefile' ############################################################################ # This is a sample make file to compile some example programs # # We have set variables giving information on the archiver, the C compiler # and the FORTRAN compiler for certain machines in files make.xxx, where xxx # is the machine name, set using the PLAT variable in ../make.CHOICES. # # Then typing the command below => results in the following being created # make => Same as: make serial. # make serial => Single processor examples. # # make mpi => Examples using MPI # # make all => Single processor and MPI examples. # # # Object files created during the compilation process can be deleted # by typing # make clean # # Set 'LIBDIR' to the directory where the SPRNG libraries are. # Set 'INCDIR' to the directory where the SPRNG include files are. # We have already set these correctly, unless whoever installed the libraries # changed the locations. ############################################################################ SHELL = /bin/sh include ../make.CHOICES LIBDIR = ../$(LIB_REL_DIR) SRCDIR = ../SRC INCDIR = ../include # use 'lfg' to get Lagged Fibonacci, 'lcg' to get Linear Congruential, etc. SPRNGLIB=lcg ########################################################################## EX = sprng seed checkpoint invalid_ID sprng-simple simple-simple seed-simple \ checkpoint-simple spawn sprngf seedf checkpointf invalid_IDf \ spawnf sprngf-simple simplef-simple seedf-simple checkpointf-simple \ pi-simple pif-simple MPIEX = sprng_mpi fsprng_mpi 2streams_mpi seed_mpi message_mpi \ sprng-simple_mpi fsprng-simple_mpi seed-simple_mpi message-simple_mpi \ sprngf_mpi fsprngf_mpi seedf_mpi messagef_mpi 2streamsf_mpi \ sprngf-simple_mpi fsprngf-simple_mpi seedf-simple_mpi \ messagef-simple_mpi pi-simple_mpi include $(SRCDIR)/make.$(PLAT) serial : $(EX) all: $(EX) $(MPIEX) mpi : $(MPIEX) simple-simple : simple-simple.c $(LIBDIR)/lib$(SPRNGLIB).a $(CC) $(CFLAGS) -I$(INCDIR) -o simple-simple simple-simple.c -L$(LIBDIR) -l$(SPRNGLIB) sprng : sprng.c $(LIBDIR)/lib$(SPRNGLIB).a $(CC) $(CFLAGS) $(CHK) -I$(INCDIR) -o sprng sprng.c -L$(LIBDIR) -l$(SPRNGLIB) sprng-simple : sprng-simple.c $(LIBDIR)/lib$(SPRNGLIB).a $(CC) $(CFLAGS) -I$(INCDIR) -o sprng-simple sprng-simple.c -L$(LIBDIR) -l$(SPRNGLIB) sprng-simple_mpi : sprng-simple_mpi.c $(LIBDIR)/lib$(SPRNGLIB).a $(MPICC) $(CFLAGS) -I$(INCDIR) -o sprng-simple_mpi sprng-simple_mpi.c -L$(LIBDIR) -l$(SPRNGLIB) $(MPIDIR) $(MPILIB) sprng_mpi : sprng_mpi.c $(LIBDIR)/lib$(SPRNGLIB).a $(MPICC) $(CFLAGS) $(CHK) -I$(INCDIR) -o sprng_mpi sprng_mpi.c -L$(LIBDIR) -l$(SPRNGLIB) $(MPIDIR) $(MPILIB) fsprng_mpi : fsprng_mpi.c $(LIBDIR)/lib$(SPRNGLIB).a $(MPICC) $(CFLAGS) $(CHK) -I$(INCDIR) -o fsprng_mpi fsprng_mpi.c -L$(LIBDIR) -l$(SPRNGLIB) $(MPIDIR) $(MPILIB) fsprng-simple_mpi : fsprng-simple_mpi.c $(LIBDIR)/lib$(SPRNGLIB).a $(MPICC) $(CFLAGS) -I$(INCDIR) -o fsprng-simple_mpi fsprng-simple_mpi.c -L$(LIBDIR) -l$(SPRNGLIB) $(MPIDIR) $(MPILIB) 2streams_mpi : 2streams_mpi.c $(LIBDIR)/lib$(SPRNGLIB).a $(MPICC) $(CFLAGS) $(CHK) -I$(INCDIR) -o 2streams_mpi 2streams_mpi.c -L$(LIBDIR) -l$(SPRNGLIB) $(MPIDIR) $(MPILIB) seed : seed.c $(LIBDIR)/lib$(SPRNGLIB).a $(CC) $(CFLAGS) $(CHK) -I$(INCDIR) -o seed seed.c -L$(LIBDIR) -l$(SPRNGLIB) seed-simple : seed-simple.c $(LIBDIR)/lib$(SPRNGLIB).a $(CC) $(CFLAGS) -I$(INCDIR) -o seed-simple seed-simple.c -L$(LIBDIR) -l$(SPRNGLIB) seed_mpi : seed_mpi.c $(LIBDIR)/lib$(SPRNGLIB).a $(MPICC) $(CFLAGS) $(CHK) -I$(INCDIR) -o seed_mpi seed_mpi.c -L$(LIBDIR) -l$(SPRNGLIB) $(MPIDIR) $(MPILIB) seed-simple_mpi : seed-simple_mpi.c $(LIBDIR)/lib$(SPRNGLIB).a $(MPICC) $(CFLAGS) -I$(INCDIR) -o seed-simple_mpi seed-simple_mpi.c -L$(LIBDIR) -l$(SPRNGLIB) $(MPIDIR) $(MPILIB) checkpoint : checkpoint.c $(LIBDIR)/lib$(SPRNGLIB).a $(CC) $(CFLAGS) $(CHK) -I$(INCDIR) -o checkpoint checkpoint.c -L$(LIBDIR) -l$(SPRNGLIB) checkpoint-simple : checkpoint-simple.c $(LIBDIR)/lib$(SPRNGLIB).a $(CC) $(CFLAGS) -I$(INCDIR) -o checkpoint-simple checkpoint-simple.c -L$(LIBDIR) -l$(SPRNGLIB) message_mpi : message_mpi.c $(LIBDIR)/lib$(SPRNGLIB).a $(MPICC) $(CFLAGS) $(CHK) -I$(INCDIR) -o message_mpi message_mpi.c -L$(LIBDIR) -l$(SPRNGLIB) $(MPIDIR) $(MPILIB) message-simple_mpi : message-simple_mpi.c $(LIBDIR)/lib$(SPRNGLIB).a $(MPICC) $(CFLAGS) -I$(INCDIR) -o message-simple_mpi message-simple_mpi.c -L$(LIBDIR) -l$(SPRNGLIB) $(MPIDIR) $(MPILIB) pi-simple : pi-simple.c $(LIBDIR)/lib$(SPRNGLIB).a $(CC) $(CFLAGS) $(CHK) -I$(INCDIR) -o pi-simple pi-simple.c -L$(LIBDIR) -l$(SPRNGLIB) -lm pi-simple_mpi : pi-simple_mpi.c $(LIBDIR)/lib$(SPRNGLIB).a $(MPICC) $(CFLAGS) -I$(INCDIR) -o pi-simple_mpi pi-simple_mpi.c -L$(LIBDIR) -l$(SPRNGLIB) $(MPIDIR) $(MPILIB) -lm spawn : spawn.c $(LIBDIR)/lib$(SPRNGLIB).a $(CC) $(CFLAGS) -DCHECK_POINTERS -I$(INCDIR) -o spawn spawn.c -L$(LIBDIR) -l$(SPRNGLIB) invalid_ID : invalid_ID.c $(LIBDIR)/lib$(SPRNGLIB).a $(CC) $(CFLAGS) -DCHECK_POINTERS -I$(INCDIR) -o invalid_ID invalid_ID.c -L$(LIBDIR) -l$(SPRNGLIB) sprngf : sprngf.$(FSUFFIX) $(LIBDIR)/lib$(SPRNGLIB).a $(F77) $(FFLAGS) -I$(INCDIR) -o sprngf sprngf.$(FSUFFIX) -L$(LIBDIR) -l$(SPRNGLIB) sprngf_mpi : sprngf_mpi.$(FSUFFIX) $(LIBDIR)/lib$(SPRNGLIB).a $(MPIF77) $(FFLAGS) -I$(INCDIR) -o sprngf_mpi sprngf_mpi.$(FSUFFIX) -L$(LIBDIR) -l$(SPRNGLIB) $(MPIDIR) $(MPILIB) fsprngf_mpi : fsprngf_mpi.$(FSUFFIX) $(LIBDIR)/lib$(SPRNGLIB).a $(MPIF77) $(FFLAGS) -I$(INCDIR) -o fsprngf_mpi fsprngf_mpi.$(FSUFFIX) -L$(LIBDIR) -l$(SPRNGLIB) $(MPIDIR) $(MPILIB) seedf : seedf.$(FSUFFIX) $(LIBDIR)/lib$(SPRNGLIB).a $(F77) $(FFLAGS) -I$(INCDIR) -o seedf seedf.$(FSUFFIX) -L$(LIBDIR) -l$(SPRNGLIB) seedf_mpi : seedf_mpi.$(FSUFFIX) $(LIBDIR)/lib$(SPRNGLIB).a $(MPIF77) $(FFLAGS) -I$(INCDIR) -o seedf_mpi seedf_mpi.$(FSUFFIX) -L$(LIBDIR) -l$(SPRNGLIB) $(MPIDIR) $(MPILIB) checkpointf : checkpointf.$(FSUFFIX) $(LIBDIR)/lib$(SPRNGLIB).a $(F77) $(FFLAGS) -I$(INCDIR) -o checkpointf checkpointf.$(FSUFFIX) -L$(LIBDIR) -l$(SPRNGLIB) $(CMDDIR) $(CMDLIB) messagef_mpi : messagef_mpi.$(FSUFFIX) $(LIBDIR)/lib$(SPRNGLIB).a $(MPIF77) $(FFLAGS) -I$(INCDIR) -o messagef_mpi messagef_mpi.$(FSUFFIX) -L$(LIBDIR) -l$(SPRNGLIB) $(MPIDIR) $(MPILIB) 2streamsf_mpi : 2streamsf_mpi.$(FSUFFIX) $(LIBDIR)/lib$(SPRNGLIB).a $(MPIF77) $(FFLAGS) -I$(INCDIR) -o 2streamsf_mpi 2streamsf_mpi.$(FSUFFIX) -L$(LIBDIR) -l$(SPRNGLIB) $(MPIDIR) $(MPILIB) invalid_IDf : invalid_IDf.$(FSUFFIX) $(LIBDIR)/lib$(SPRNGLIB).a $(F77) $(FFLAGS) -I$(INCDIR) -o invalid_IDf invalid_IDf.$(FSUFFIX) -L$(LIBDIR) -l$(SPRNGLIB) spawnf : spawnf.$(FSUFFIX) $(LIBDIR)/lib$(SPRNGLIB).a $(F77) $(FFLAGS) -I$(INCDIR) -o spawnf spawnf.$(FSUFFIX) -L$(LIBDIR) -l$(SPRNGLIB) simplef-simple : simplef-simple.$(FSUFFIX) $(LIBDIR)/lib$(SPRNGLIB).a $(F77) $(FFLAGS) -I$(INCDIR) -o simplef-simple simplef-simple.$(FSUFFIX) -L$(LIBDIR) -l$(SPRNGLIB) sprngf-simple : sprngf-simple.$(FSUFFIX) $(LIBDIR)/lib$(SPRNGLIB).a $(F77) $(FFLAGS) -I$(INCDIR) -o sprngf-simple sprngf-simple.$(FSUFFIX) -L$(LIBDIR) -l$(SPRNGLIB) sprngf-simple_mpi : sprngf-simple_mpi.$(FSUFFIX) $(LIBDIR)/lib$(SPRNGLIB).a $(MPIF77) $(FFLAGS) -I$(INCDIR) -o sprngf-simple_mpi sprngf-simple_mpi.$(FSUFFIX) -L$(LIBDIR) -l$(SPRNGLIB) $(MPIDIR) $(MPILIB) fsprngf-simple_mpi : fsprngf-simple_mpi.$(FSUFFIX) $(LIBDIR)/lib$(SPRNGLIB).a $(MPIF77) $(FFLAGS) -I$(INCDIR) -o fsprngf-simple_mpi fsprngf-simple_mpi.$(FSUFFIX) -L$(LIBDIR) -l$(SPRNGLIB) $(MPIDIR) $(MPILIB) seedf-simple : seedf-simple.$(FSUFFIX) $(LIBDIR)/lib$(SPRNGLIB).a $(F77) $(FFLAGS) -I$(INCDIR) -o seedf-simple seedf-simple.$(FSUFFIX) -L$(LIBDIR) -l$(SPRNGLIB) seedf-simple_mpi : seedf-simple_mpi.$(FSUFFIX) $(LIBDIR)/lib$(SPRNGLIB).a $(MPIF77) $(FFLAGS) -I$(INCDIR) -o seedf-simple_mpi seedf-simple_mpi.$(FSUFFIX) -L$(LIBDIR) -l$(SPRNGLIB) $(MPIDIR) $(MPILIB) checkpointf-simple : checkpointf-simple.$(FSUFFIX) $(LIBDIR)/lib$(SPRNGLIB).a $(F77) $(FFLAGS) -I$(INCDIR) -o checkpointf-simple checkpointf-simple.$(FSUFFIX) -L$(LIBDIR) -l$(SPRNGLIB) $(CMDDIR) $(CMDLIB) messagef-simple_mpi : messagef-simple_mpi.$(FSUFFIX) $(LIBDIR)/lib$(SPRNGLIB).a $(MPIF77) $(FFLAGS) -I$(INCDIR) -o messagef-simple_mpi messagef-simple_mpi.$(FSUFFIX) -L$(LIBDIR) -l$(SPRNGLIB) $(MPIDIR) $(MPILIB) pif-simple : pif-simple.$(FSUFFIX) $(LIBDIR)/lib$(SPRNGLIB).a $(F77) $(FFLAGS) -I$(INCDIR) -o pif-simple pif-simple.$(FSUFFIX) -L$(LIBDIR) -l$(SPRNGLIB) -lm .SUFFIXES : .SUFFIXES : .f .F .F.f : @if [ -f $*.i ] ; then \ rm $*.i ;\ fi $(CPP) -I$(INCDIR) $*.F @if [ -f $*.i ] ; then \ mv $*.i $*.f ;\ fi clean : rm -f *.o realclean : rm -f *.o $(EX) $(MPIEX) *~ *.i core a.out SHAR_EOF fi # end of overwriting check if test -f 'README' then echo shar: will not over-write existing file "'README'" else cat << "SHAR_EOF" > 'README' ___ Example programs to demonstrate SPRNG use ___ This directory contains some example programs to demonstrate the use of the SPRNG library. Fortran program file names end in ".F" and C program names end in ".c". Some programs are sequential, while other require MPI calls. The latter file names have the suffix "_mpi" before the ".c" or ".F" extension. Besides, the FORTRAN programs have an "f" suffix just before the "_mpi" or ".F".In the listing below, we give the base name for each program. (The '.C' extension is used for a couple of C++ examples.) For example, "sprng" will be associated with a file called "sprng.c" which demonstrates the default interface in C and a corresponding executable called "sprng", a file called "sprngf.F" which demonstrates the default interface in FORTRAN with a corresponding executable "sprngf". The corresponding files for the simple interface have a "-simple" suffix, namely:"sprng-simple.c", "sprng-simple", "sprngf-simple.F" and "sprngf-simple". Separate programs are not available for the interface with pointer checking. This interface is demonstrated by defining the macro "CHECK_POINTERS" before including the SPRNG header file, in the default interface examples. We have commented out a line that defines this macro in each file. Please uncomment this line in order to invoke this interface. Examples are provided for each interface, unless stated otherwise. The file 'Makefile' has the directives to compile these programs. "make" or "make serial" builds only the sequential programs. "make mpi" build only the programs that use MPI. "make all" builds all programs. 1. sprng: Demonstrates the use of sprng and isprng. 2. sprng_mpi: Demonstrates sprng use with one stream per process. 3. fsprng_mpi: Demonstrates use of the single precision generator. 4. seed: Demonstrates the use make_sprng_seed. 5. seed_mpi: Demonstrates the use of make_seed with MPI. 6. checkpoint: Demonstrates check-pointing to store the state of a stream. 7. message_mpi: Demonstrates passing a stream to another process. 8. 2streams_mpi: Demonstrates use of multiple streams on each process. Not available for the simple interface. 9. invalid_ID: Demonstrates invalid ID handling in the interface with pointer checking. It is not available in the other interfaces. 10. simple: Demonstrates SPRNG calls without initialization in the simple interface alone. 11. pi: A simple Monte Carlo application to calculate the value of pi. Not available for the default interface. Please look at http://www.ncsa.uiuc.edu/Apps/SPRNG/www/examples.html for further details. SHAR_EOF fi # end of overwriting check if test -f 'checkpoint-simple.c' then echo shar: will not over-write existing file "'checkpoint-simple.c'" else cat << "SHAR_EOF" > 'checkpoint-simple.c' /****************************************************************************/ /* ____Demonstrates checkpointing____ */ /* In a new run, this program initializes a random number stream and prints */ /* a few random numbers. Finally it packs the state of the stream into a */ /* file. In a continuation of an old run this program reads in the state of */ /* a stream from a file, prints a few random numbers, and stores the final */ /* state of the stream into a file. */ /****************************************************************************/ #include #define SIMPLE_SPRNG /* simple interface */ #include "sprng.h" /* SPRNG header file */ #define SEED 985456376 main(int argc, char *argv[]) { int i, size; double rn; FILE *fp; char buffer[MAX_PACKED_LENGTH], outfile[80], infile[80], *bytes; /*********************** Initialize streams *******************************/ printf("Enter name of file to store final state of the stream:\n"); scanf("%s", outfile); printf("Enter name of file to read from:\n\t(enter 9 for a new run)\n"); scanf("%s", infile); if(infile[0] == '9') /* initialize stream the first time */ init_sprng(SEED,SPRNG_DEFAULT); else /* read stream state from file afterwards */ { fp = fopen(infile,"r"); if(fp == NULL) { fprintf(stderr,"Could not open file %s for reading\nCheck path or permissions\n", infile); exit(1); } fread(&size,1,sizeof(int),fp); fread(buffer,1,size,fp); unpack_sprng(buffer); fclose(fp); } /*********************** print random numbers *****************************/ printf(" Printing 5 random numbers in [0,1): \n"); for(i=0; i<5; i++) { rn = sprng(); /* generate a double precision random number */ printf("%d %f\n", i+1, rn); } /************************* store stream state *****************************/ size = pack_sprng(&bytes); /* pack stream state into an array */ fp = fopen(outfile,"w"); /* open file to store stream state */ if(fp == NULL) { fprintf(stderr,"Could not open file %s for writing\nCheck path or permissions\n", outfile); exit(1); } fwrite(&size,1,sizeof(int),fp); /* store # of bytes required for storage */ fwrite(bytes,1,size,fp); /* store stream state */ fclose(fp); free(bytes); /* free memory needed to store stream state */ } SHAR_EOF fi # end of overwriting check if test -f 'checkpoint.c' then echo shar: will not over-write existing file "'checkpoint.c'" else cat << "SHAR_EOF" > 'checkpoint.c' /****************************************************************************/ /* ____Demonstrates checkpointing____ */ /* In a new run, this program initializes a random number stream and prints */ /* a few random numbers. Finally it packs the state of the stream into a */ /* file. In a continuation of an old run this program reads in the state of */ /* a stream from a file, prints a few random numbers, and stores the final */ /* state of the stream into a file. */ /****************************************************************************/ #include /* Uncomment the following line to get the interface with pointer checking */ /*#define CHECK_POINTERS */ #include "sprng.h" /* SPRNG header file */ #define SEED 985456376 main(int argc, char *argv[]) { int *stream, i, size, nstreams, streamnum; double rn; FILE *fp; char buffer[MAX_PACKED_LENGTH], outfile[80], infile[80], *bytes; /****************** Initialization values *********************************/ streamnum = 0; nstreams = 1; /*********************** Initialize streams *******************************/ printf("Enter name of file to store final state of the stream:\n"); scanf("%s", outfile); printf("Enter name of file to read from:\n\t(enter 9 for a new run)\n"); scanf("%s", infile); if(infile[0] == '9') /* initialize stream the first time */ stream = init_sprng(streamnum,nstreams,SEED,SPRNG_DEFAULT); else /* read stream state from file afterwards */ { fp = fopen(infile,"r"); fread(&size,1,sizeof(int),fp); fread(buffer,1,size,fp); stream = unpack_sprng(buffer); fclose(fp); } /*********************** print random numbers *****************************/ printf(" Printing 5 random numbers in [0,1): \n"); for(i=0; i<5; i++) { rn = sprng(stream); /* generate double precision random number */ printf("%d %f\n", i+1, rn); } /************************* store stream state *****************************/ size = pack_sprng(stream,&bytes); /* pack stream state into an array */ fp = fopen(outfile,"w"); /* open file to store stream state */ if(fp == NULL) { fprintf(stderr,"Could not open file %s for writing\nCheck path or permissions\n", outfile); exit(1); } fwrite(&size,1,sizeof(int),fp); /* store # of bytes required for storage */ fwrite(bytes,1,size,fp); /* store stream state */ fclose(fp); /*************************** free memory **********************************/ free(bytes); /* free memory needed to store stream state */ free_sprng(stream); /* free memory used to store stream state */ } SHAR_EOF fi # end of overwriting check if test -f 'checkpointf-simple.F' then echo shar: will not over-write existing file "'checkpointf-simple.F'" else cat << "SHAR_EOF" > 'checkpointf-simple.F' C C/****************************************************************************/ C/* ____Demonstrates checkpointing____ */ C/* In a new run, this program initializes a random number stream and prints */ C/* a few random numbers. Finally it packs the state of the stream into a */ C/* file. In a continuation of an old run, this program reads in the state of*/ C/* a stream from a file, prints a few random numbers, and stores the final */ C/* state of the stream into a file. */ C/****************************************************************************/ C C program checkpointf_simple implicit none #define SIMPLE_SPRNG #include "sprng_f.h" integer seed, i, size SPRNG_POINTER stream real*8 rn character buffer1(MAX_PACKED_LENGTH), buffer2(MAX_PACKED_LENGTH) character outfile*7, infile*7, firstChar*1 seed = 985456376 C/*********************** Initialize streams *******************************/ C=========================================== C outfile -- state.X ; infile -- state.X C=========================================== print*, 'Enter file name(length 7) to store final state:' read(*, 111) outfile ! 7 characters please print*, 'Enter file name(length 7) to read from:' print*, ' (enter 9 for a new run)' read(*, 112) infile ! 7 characters please write(firstChar, 113) infile 111 format(A7) 112 format(A7) 113 format(A1) if (firstChar .eq. '9') then ! initialize stream the first time stream = init_sprng(seed,SPRNG_DEFAULT) else ! read stream state from the old file open(30, file =infile , status = 'old', form = 'unformatted') read(30) size read(30) buffer1 stream = unpack_sprng(buffer1) close(30) endif print *, 'Printing 5 random numbers in [0,1):' do 100 i = 1, 5 rn = sprng() write(6,150) i, rn 100 continue 150 format(i1, " ", f8.6) size = pack_sprng(buffer2) open(31, file = outfile, status = 'unknown', & form = 'unformatted') write(31) size write(31) buffer2 close(31) end SHAR_EOF fi # end of overwriting check if test -f 'checkpointf.F' then echo shar: will not over-write existing file "'checkpointf.F'" else cat << "SHAR_EOF" > 'checkpointf.F' C/****************************************************************************/ C/* ____Demonstrates checkpointing____ */ C/* In a new run, this program initializes a random number stream and prints */ C/* a few random numbers. Finally it packs the state of the stream into a */ C/* file. In a continuation of an old run, this program reads in the state of*/ C/* a stream from a file, prints a few random numbers, and stores the final */ C/* state of the stream into a file. */ C/****************************************************************************/ C C Uncomment the following line to get the interface with pointer checking C #define CHECK_POINTERS program checkpointf implicit none #include "sprng_f.h" integer streamnum, nstreams, seed SPRNG_POINTER stream real*8 rn integer i, size, junk character buffer1(MAX_PACKED_LENGTH), buffer2(MAX_PACKED_LENGTH) character outfile*7, infile*7, firstChar*1 streamnum = 0 nstreams = 1 seed = 985456376 C/*********************** Initialize streams *******************************/ C=========================================== C outfile -- state.X ; infile -- state.X C=========================================== print*, 'Enter file name(length 7) to store final state:' read(*, 111) outfile ! 7 characters please print*, 'Enter file name(length 7) to read from:' print*, ' (enter 9 for a new run)' read(*, 112) infile ! 7 characters please write(firstChar, 113) infile 111 format(A7) 112 format(A7) 113 format(A1) if (firstChar .eq. '9') then ! initialize stream the first time stream = init_sprng(streamnum,nstreams,seed,SPRNG_DEFAULT) else ! read stream state from the old file open(30, file =infile , status = 'old', form = 'unformatted') read(30) size read(30) buffer1 stream = unpack_sprng(buffer1) close(30) endif print *, 'Printing 5 random numbers in [0,1): ' do 100 i = 1, 5 rn = sprng(stream) write(6,150) i, rn 100 continue 150 format(i1, " ", f8.6) size = pack_sprng(stream, buffer2) open(31, file = outfile, status = 'unknown', & form = 'unformatted') write(31) size write(31) buffer2 close(31) junk = free_sprng(stream) end SHAR_EOF fi # end of overwriting check if test -f 'convert.c' then echo shar: will not over-write existing file "'convert.c'" else cat << "SHAR_EOF" > 'convert.c' /***************************************************************************/ /* ____Demonstrates converting code to SPRNG____ */ /* The original random number call is to 'myrandom'. We change it to call */ /* SPRNG by defining a macro. */ /* The lines between the '#ifdef CONVERT' and the '#else' are the newly added lines. Those lines between the '#else' and the '#endif' are theoriginal lines that need to be deleted. */ /***************************************************************************/ #include #ifdef CONVERT #define SIMPLE_SPRNG /* simple interface */ #include "sprng.h" /* SPRNG header file */ #define myrandom sprng /* we define this macro to make SPRNG calls*/ #endif #define SEED 985456376 double myrandom(); main() { int seed, i; double rn; #ifdef CONVERT /************************** Initialization *******************************/ /******* We add the following optional initialization lines **************/ init_sprng(SEED,SPRNG_DEFAULT); /* initialize stream */ printf("Print information about random number stream:\n"); print_sprng(); #else /* Old initialization lines*/ #endif /*********************** print random numbers ****************************/ printf("Printing 3 random numbers in [0,1):\n"); for (i=0;i<3;i++) { rn = myrandom(); /* generate double precision random number */ printf("%f\n", rn); } } SHAR_EOF fi # end of overwriting check if test -f 'convertf.F' then echo shar: will not over-write existing file "'convertf.F'" else cat << "SHAR_EOF" > 'convertf.F' C ____Demonstrates converting code to SPRNG____ C C The original random number call is to 'myrandom'. We change it to C call SPRNG by defining a macro. C C The lines between the '#ifdef CONVERT' and the '#else' are the C newly added lines. Those lines between the '#else' and the '#endif' C are theoriginal lines that need to be deleted. program sprngf_simple implicit none #ifdef CONVERT #define SIMPLE_SPRNG #include "sprng_f.h" #define myrandom sprng SPRNG_POINTER junkPtr #else external myrandom real*8 myrandom #endif real*8 rn integer seed, irn, i, junk seed = 985456376 #ifdef CONVERT C initialization junkPtr = init_sprng(seed,SPRNG_DEFAULT) print *, 'Printing information about new stream' junk = print_sprng() #else C Old initialization lines #endif print *, 'Printing 3 double precision numbers in [0,1): ' do 100 i = 1, 3 rn = myrandom() print *,i, rn 100 continue end SHAR_EOF fi # end of overwriting check if test -f 'displaybytes.c' then echo shar: will not over-write existing file "'displaybytes.c'" else cat << "SHAR_EOF" > 'displaybytes.c' #include main() { int c; while( (c=getchar())!=EOF ) printf("%x ",c); putchar('\n'); } SHAR_EOF fi # end of overwriting check if test -f 'fsprng-simple_mpi.c' then echo shar: will not over-write existing file "'fsprng-simple_mpi.c'" else cat << "SHAR_EOF" > 'fsprng-simple_mpi.c' /***************************************************************************/ /* ____Demonstrates use of the single precision generator____ */ /* One stream is maintained per processor. Each processor prints a few */ /* single precision random numbers. */ /***************************************************************************/ #include #include /* MPI header file */ #define SIMPLE_SPRNG /* simple interface */ #define USE_MPI /* use MPI to find number of processes */ #define FLOAT_GEN /* make 'sprng()' return single precision numbers*/ #include "sprng.h" /* SPRNG header file */ #define SEED 985456376 main(int argc, char *argv[]) { int i, myid; float rn; /************************** MPI calls ***********************************/ MPI_Init(&argc, &argv); /* Initialize MPI */ MPI_Comm_rank(MPI_COMM_WORLD, &myid); /* find process id */ /*********************** Initialize streams *****************************/ init_sprng(SEED,SPRNG_DEFAULT); /* initialize stream */ printf("Process %d: Print information about stream:\n",myid); print_sprng(); /*********************** print random numbers ***************************/ for (i=0;i<3;i++) { rn = sprng(); /*generate single precision random number */ printf("Process %d, random number %d: %f\n", myid, i+1, rn); } MPI_Finalize(); /* Terminate MPI */ } SHAR_EOF fi # end of overwriting check if test -f 'fsprng_mpi.c' then echo shar: will not over-write existing file "'fsprng_mpi.c'" else cat << "SHAR_EOF" > 'fsprng_mpi.c' /***************************************************************************/ /* ____Demonstrates use of the single precision generator____ */ /* One stream is maintained per processor. Each processor prints a few */ /* single precision random numbers. */ /***************************************************************************/ #include #include /* MPI header file */ /* Uncomment the following line to get the interface with pointer checking */ /*#define CHECK_POINTERS */ #define FLOAT_GEN /* make 'sprng()' return single precision numbers*/ #include "sprng.h" /* SPRNG header file */ #define SEED 985456376 main(int argc, char *argv[]) { int streamnum, nstreams, *stream; float rn; int i, myid, nprocs; /************************** MPI calls ************************************/ MPI_Init(&argc, &argv); /* Initialize MPI */ MPI_Comm_rank(MPI_COMM_WORLD, &myid); /* find process id */ MPI_Comm_size(MPI_COMM_WORLD, &nprocs); /* find number of processes */ /************************* Initialization ********************************/ streamnum = myid; nstreams = nprocs; /* one stream per processor */ stream = init_sprng(streamnum,nstreams,SEED,SPRNG_DEFAULT); /*initialize stream*/ printf("Process %d: Print information about stream:\n",myid); print_sprng(stream); /*********************** print random numbers ****************************/ for (i=0;i<3;i++) { rn = sprng(stream); /* generate single precision random number */ printf("Process %d, random number %d: %f\n", myid, i+1, rn); } /*************************** free memory *********************************/ free_sprng(stream); /* free memory used to store stream state */ MPI_Finalize(); /* Terminate MPI */ } SHAR_EOF fi # end of overwriting check if test -f 'fsprngf-simple_mpi.F' then echo shar: will not over-write existing file "'fsprngf-simple_mpi.F'" else cat << "SHAR_EOF" > 'fsprngf-simple_mpi.F' C C Demonstrates use of the single precision generator C One stream is maintained per processor. Each processor prints a few C single precision random numbers. C program fsprngf_simple_mpi implicit none #define SIMPLE_SPRNG ! simple interface */ #define USE_MPI ! use MPI to find number of processes */ #define FLOAT_GEN 1 ! make 'sprng()' return single precision numbers #include #include "sprng_f.h" SPRNG_POINTER stream real*4 rn integer i, seed, myid, ierror, junk call MPI_INIT(ierror) call MPI_COMM_RANK(MPI_COMM_WORLD, myid, ierror) seed = 985456376 C stream = init_sprng(seed,SPRNG_DEFAULT) write(*, "('Process',i2,': Print information about stream:')" & ) myid junk = print_sprng() do 100 i = 1, 3 rn = sprng() write(*, "('Process',i2,', random number',i2,': ',f8.6)") & myid,i,rn 100 continue call MPI_FINALIZE(ierror) end SHAR_EOF fi # end of overwriting check if test -f 'fsprngf_mpi.F' then echo shar: will not over-write existing file "'fsprngf_mpi.F'" else cat << "SHAR_EOF" > 'fsprngf_mpi.F' C C Demonstrates use of the single precision generator C One stream is maintained per processor. Each processor prints a few C single precision random numbers. C C Uncomment the following line to get the interface with pointer checking C #define CHECK_POINTERS program fsprngf_mpi implicit none #define FLOAT_GEN 1 ! make 'sprng()' return single precision numbers #include #include "sprng_f.h" integer streamnum, nstreams, seed SPRNG_POINTER stream real*4 rn integer i, myid, nprocs, ierror, junk call MPI_INIT(ierror) call MPI_COMM_SIZE(MPI_COMM_WORLD, nprocs, ierror) call MPI_COMM_RANK(MPI_COMM_WORLD, myid, ierror) streamnum = myid nstreams = nprocs seed = 985456376 C stream = init_sprng(streamnum,nstreams,seed,SPRNG_DEFAULT) write(*, "('Process',i2,': Print information about stream:')" & ) myid junk = print_sprng(stream) do 100 i = 1, 3 rn = sprng(stream) write(*, "('Process',i2,', random number',i2,': ',f8.6)") & myid,i,rn 100 continue junk = free_sprng(stream) call MPI_FINALIZE(ierror) end SHAR_EOF fi # end of overwriting check if test -f 'invalid_ID.c' then echo shar: will not over-write existing file "'invalid_ID.c'" else cat << "SHAR_EOF" > 'invalid_ID.c' /****************************************************************************/ /* ___Demonstrates invalid ID handling in inteface with pointer checking___ */ /* This prorgam prints a few random numbers, frees the stream, and then */ /* tries to use the stream again. */ /****************************************************************************/ #include #ifndef CHECK_POINTERS #define CHECK_POINTERS /* do not uncomment this line */ #endif #include "sprng.h" /* SPRNG header file */ #define SEED 985456376 main() { int streamnum, nstreams, *stream; double rn; int i; /**************************** Initialize *********************************/ streamnum = 0; nstreams = 1; stream = init_sprng(streamnum,nstreams,SEED,SPRNG_DEFAULT); /*initialize stream */ printf("Print information about random number stream:\n"); print_sprng(stream); /*********************** print random numbers *****************************/ printf("Printing 3 random numbers in [0,1):\n"); for (i=0;i<3;i++) { rn = sprng(stream); /* generate a double precision random number */ printf("%f\n", rn); } /**************************** free memory *********************************/ free_sprng(stream); /* free memory used to store stream state */ /********************** Try using freed stream ****************************/ fprintf(stderr,"Expect a SPRNG error message on the use of an invalid stream ID\n"); rn = sprng(stream); printf("sprng returns %f on being given an invalid stream ID\n", rn); } SHAR_EOF fi # end of overwriting check if test -f 'invalid_IDf.F' then echo shar: will not over-write existing file "'invalid_IDf.F'" else cat << "SHAR_EOF" > 'invalid_IDf.F' C C Demonstrates invalid ID handling in inteface with pointer checking C This prorgam prints a few random numbers, frees the stream, and then C tries to use the stream again. C C do not uncomment the following line #ifndef CHECK_POINTERS #define CHECK_POINTERS #endif program invalid_IDf implicit none #include "sprng_f.h" integer streamnum, nstreams, seed, i, junk SPRNG_POINTER stream real*8 rn streamnum = 0 nstreams = 1 seed = 985456376 C initialize stream stream = init_sprng(streamnum,nstreams,seed,SPRNG_DEFAULT) print *, 'Printing information about new stream' junk = print_sprng(stream) print *, 'Printing 3 double precision numbers [0,1): ' do 100 i = 1, 3 rn = sprng(stream) print *, rn 100 continue junk = free_sprng(stream) C print *, ' Expect a SPRNG error message on the use of an invalid stream ID ' rn = sprng(stream) print *, ' sprng returns ', rn, & ' on being given an invalid stream ID' end SHAR_EOF fi # end of overwriting check if test -f 'make.test' then echo shar: will not over-write existing file "'make.test'" else cat << "SHAR_EOF" > 'make.test' SHELL = /bin/sh include ../make.CHOICES SRCDIR = ../SRC include $(SRCDIR)/make.$(PLAT) .SUFFIXES : .SUFFIXES : .f .F .F.f : @if [ -f $*.i ] ; then \ rm $*.i ;\ fi $(CPP) -I../SRC -DCONVERT $*.F @if [ -f $*.i ] ; then \ mv $*.i $*.f ;\ fi #.F.f: # $(CPP) -WF,-I$(SRCDIR) -WF,-DCONVERT $*.F # @if [ -f F$*.f ] ; then \ # mv F$*.f $*.f ;\ # fi SHAR_EOF fi # end of overwriting check if test -f 'message-simple_mpi.c' then echo shar: will not over-write existing file "'message-simple_mpi.c'" else cat << "SHAR_EOF" > 'message-simple_mpi.c' /***************************************************************************/ /* ____Demonstrates passing a stream to another process____ */ /* Process 0 initializes a random number stream and prints a few random */ /* numbers. It then passes this stream to process 1, which recieves it */ /* and prints a few random numbers from this stream. */ /***************************************************************************/ #include #include #include /* MPI header file */ #define SIMPLE_SPRNG /* simple interface */ #include "sprng.h" /* SPRNG header file */ #define SEED 985456376 main(int argc, char *argv[]) { double rn; int i, myid, len, nprocs; MPI_Status status; char *packed; /************************** MPI calls ************************************/ MPI_Init(&argc, &argv); /* Initialize MPI */ MPI_Comm_rank(MPI_COMM_WORLD, &myid); /* find process id */ MPI_Comm_size(MPI_COMM_WORLD, &nprocs); /* find number of processes */ if(nprocs < 2) { fprintf(stderr,"ERROR: At least 2 processes required\n"); MPI_Finalize(); exit(1); } if (myid==0) /*********** process 0 sends stream to process 1 ***********/ { init_sprng(SEED,SPRNG_DEFAULT); /*initialize stream */ printf("Process %d: Print information about stream:\n",myid); print_sprng(); printf("Process %d: Print 2 random numbers in [0,1):\n", myid); for (i=0;i<2;i++) { rn = sprng(); /* generate double precision random number */ printf("Process %d: %f\n", myid, rn); } len = pack_sprng(&packed); /* pack stream into an array */ /* inform process 1 how many bytes process 0 will send. */ MPI_Send(&len, 1, MPI_INT, 1, 0, MPI_COMM_WORLD); MPI_Send(packed, len, MPI_BYTE, 1, 0, MPI_COMM_WORLD); /* send stream */ free(packed); /* free storage for array */ printf(" Process 0 sends stream to process 1\n"); } else if(myid == 1) /****** process 1 receives stream from process 0 *****/ { init_sprng(SEED,SPRNG_DEFAULT); /*initialize stream */ MPI_Recv(&len, 1, MPI_INT, 0, MPI_ANY_TAG, MPI_COMM_WORLD, &status); /* receive buffer size required */ if ((packed = (char *) malloc(len)) == NULL) /* allocate array */ { fprintf(stderr,"ERROR: process %d: Cannot allocate memory\n", myid); MPI_Finalize(); exit(1); } MPI_Recv(packed, len, MPI_BYTE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, &status); /* receive packed stream */ unpack_sprng(packed); /* unpack stream */ printf(" Process 1 has received the packed stream\n"); printf("Process %d: Print information about stream:\n",myid); print_sprng(); free(packed); /* free array of packed stream */ printf(" Process 1 prints 2 numbers from received stream:\n"); for (i=0;i<2;i++) { rn = sprng(); /* generate double precision random number */ printf("Process %d: %f\n", myid, rn); } } MPI_Finalize(); /* terminate MPI */ } SHAR_EOF fi # end of overwriting check if test -f 'message_mpi.c' then echo shar: will not over-write existing file "'message_mpi.c'" else cat << "SHAR_EOF" > 'message_mpi.c' /***************************************************************************/ /* ____Demonstrates passing a stream to another process____ */ /* Process 0 initializes a random number stream and prints a few random */ /* numbers. It then passes this stream to process 1, which recieves it */ /* and prints a few random numbers from this stream. */ /***************************************************************************/ #include #include #include /* MPI header file */ /* Uncomment the following line to get the interface with pointer checking */ /*#define CHECK_POINTERS */ #include "sprng.h" /* SPRNG header file */ #define SEED 985456376 main(int argc, char *argv[]) { int streamnum, nstreams, *stream; double rn; int i, myid, nprocs, len; MPI_Status status; char *packed; /************************** MPI calls ************************************/ MPI_Init(&argc, &argv); /* Initialize MPI */ MPI_Comm_rank(MPI_COMM_WORLD, &myid); /* find process id */ MPI_Comm_size(MPI_COMM_WORLD, &nprocs); /* find number of processes */ if(nprocs < 2) { fprintf(stderr,"ERROR: At least 2 processes required\n"); MPI_Finalize(); exit(1); } if (myid==0) /*********** process 0 sends stream to process 1 **********/ { streamnum = 0; nstreams = 1; stream = init_sprng(streamnum,nstreams,SEED,SPRNG_DEFAULT);/*initialize stream*/ printf("Process %d: Print information about stream:\n",myid); print_sprng(stream); printf("Process %d: Print 2 random numbers in [0,1):\n", myid); for (i=0;i<2;i++) { rn = sprng(stream); /* generate double precision random number */ printf("Process %d: %f\n", myid, rn); } len = pack_sprng(stream, &packed); /* pack stream into an array */ /* inform process 1 how many bytes process 0 will send. */ MPI_Send(&len, 1, MPI_INT, 1, 0, MPI_COMM_WORLD); MPI_Send(packed, len, MPI_BYTE, 1, 0, MPI_COMM_WORLD); /* send stream */ free(packed); /* free storage for array */ nstreams = free_sprng(stream); printf(" Process 0 sends stream to process 1\n"); printf(" %d generators now exist on process 0\n", nstreams); } else if(myid == 1) /***** process 1 receives stream from process 0 ******/ { MPI_Recv(&len, 1, MPI_INT, 0, MPI_ANY_TAG, MPI_COMM_WORLD, &status); /* receive buffer size required */ if ((packed = (char *) malloc(len)) == NULL) /* allocate array */ { fprintf(stderr,"ERROR: process %d: Cannot allocate memory\n", myid); MPI_Finalize(); exit(1); } MPI_Recv(packed, len, MPI_BYTE, 0, MPI_ANY_TAG, MPI_COMM_WORLD, &status); /* receive packed stream */ stream = unpack_sprng(packed); /* unpack stream */ printf(" Process 1 has received the packed stream\n"); printf("Process %d: Print information about stream:\n",myid); print_sprng(stream); free(packed); /* free array of packed stream */ printf(" Process 1 prints 2 numbers from received stream:\n"); for (i=0;i<2;i++) { rn = sprng(stream); /* generate double precision random number */ printf("Process %d: %f\n", myid, rn); } free_sprng(stream); /* free memory used to store stream state */ } MPI_Finalize(); /* terminate MPI */ } SHAR_EOF fi # end of overwriting check if test -f 'messagef-simple_mpi.F' then echo shar: will not over-write existing file "'messagef-simple_mpi.F'" else cat << "SHAR_EOF" > 'messagef-simple_mpi.F' C C Demonstrates passing a stream to another process C Process 0 initializes a random number stream and prints a few random C numbers. It then passes this stream to process 1, which recieves it C and prints a few random numbers from this stream. program messagef_simple_mpi implicit none #define SIMPLE_SPRNG #include #include "sprng_f.h" integer seed,i,myid, nprocs, ierror, len, junk integer status(MPI_STATUS_SIZE) SPRNG_POINTER junkPtr real*8 rn integer packed(MAX_PACKED_LENGTH) call MPI_INIT(ierror) call MPI_COMM_SIZE(MPI_COMM_WORLD, nprocs, ierror) call MPI_COMM_RANK(MPI_COMM_WORLD, myid, ierror) if (nprocs .lt. 2) then print *, 'ERROR: At least 2 processes required' call MPI_FINALIZE(ierror) call exit(1) endif seed = 985456376 if (myid .eq. 0) then junkPtr = init_sprng(seed,SPRNG_DEFAULT) write(6,"('Process',i2,': Print information about stream:')") & myid junk = print_sprng() write(6,"('Process',i2,': Print 2 random numbers in [0,1):')") & myid do 100 i = 1, 2 rn = sprng() write(6, "('Process',i2, ': ', f8.6)") myid, rn 100 continue len = pack_sprng(packed) ! inform process 1 how many bytes process 0 will send. call MPI_SEND(len, 1, MPI_INTEGER, 1, 0, MPI_COMM_WORLD, & ierror) call MPI_SEND(packed, len, MPI_INTEGER, 1, 0, MPI_COMM_WORLD, & ierror) print*, 'Process 0 sends stream to process 1' elseif (myid .eq. 1) then junkPtr = init_sprng(seed,SPRNG_DEFAULT) call MPI_RECV(len, 1, MPI_INTEGER, 0, MPI_ANY_TAG, & MPI_COMM_WORLD,status, ierror) call MPI_RECV(packed, len, MPI_INTEGER, 0, MPI_ANY_TAG, & MPI_COMM_WORLD, status, ierror) junkPtr = unpack_sprng(packed) print *, 'Process 1 has received the packed stream' write(6,"('Process',i2,': Print information about stream:')") & myid junk = print_sprng() print *, 'Process 1 prints 2 numbers from received stream:' do 200 i = 1, 2 rn = sprng() write(6, "('Process', i2, ': ', f8.6)") myid, rn 200 continue endif call MPI_FINALIZE(ierror) end SHAR_EOF fi # end of overwriting check if test -f 'messagef_mpi.F' then echo shar: will not over-write existing file "'messagef_mpi.F'" else cat << "SHAR_EOF" > 'messagef_mpi.F' C C Demonstrates passing a stream to another process C Process 0 initializes a random number stream and prints a few random C numbers. It then passes this stream to process 1, which recieves it C and prints a few random numbers from this stream. C C Uncomment the following line to get the interface with pointer checking C #define CHECK_POINTERS program messagef_mpi implicit none #include #include "sprng_f.h" integer seed,i,myid, nprocs, len, junk integer streamnum, nstreams, ierror SPRNG_POINTER stream real*8 rn integer status(MPI_STATUS_SIZE) integer packed(MAX_PACKED_LENGTH) call MPI_INIT(ierror) call MPI_COMM_SIZE(MPI_COMM_WORLD, nprocs, ierror) call MPI_COMM_RANK(MPI_COMM_WORLD, myid, ierror) if (nprocs .lt. 2) then print *, 'ERROR: At least 2 processes required' call MPI_FINALIZE(ierror) call exit(1) endif if (myid .eq. 0) then streamnum = 0 ! process 0 sends stream to process 1 nstreams = 1 seed = 985456376 C stream = init_sprng(streamnum,nstreams,seed,SPRNG_DEFAULT) write(6,"('Process',i2,': Print information about stream:')") & myid junk = print_sprng(stream) write(6,"('Process',i2,': Print 2 random numbers in [0,1):')") & myid do 100 i = 1, 2 rn = sprng(stream) write(6, "('Process', i2, ': ', f8.6)") myid, rn 100 continue len = pack_sprng(stream, packed) ! inform process 1 how many bytes process 0 will send. call MPI_SEND(len,1,MPI_INTEGER,1,0,MPI_COMM_WORLD,ierror) call MPI_SEND(packed,len,MPI_INTEGER,1,0, & MPI_COMM_WORLD,ierror) nstreams = free_sprng(stream) print*, 'Process 0 sends stream to process 1' write(6,"(i2,' generators now exist on process 0')")nstreams elseif (myid .eq. 1) then call MPI_RECV(len,1,MPI_INTEGER,0,MPI_ANY_TAG,MPI_COMM_WORLD, & status, ierror) call MPI_RECV(packed,len,MPI_INTEGER,0,MPI_ANY_TAG, & MPI_COMM_WORLD,status, ierror) stream = unpack_sprng(packed) print *, 'Process 1 has received the packed stream' write(6, 250) myid 250 format('Process',i2,': Print information about stream:') junk = print_sprng(stream) print *, 'Process 1 prints 2 numbers from received stream:' do 200 i = 1, 2 rn = sprng(stream) write(6, "('Process', i2, ': ', f8.6)") myid, rn 200 continue junk = free_sprng(stream) endif call MPI_FINALIZE(ierror) end SHAR_EOF fi # end of overwriting check if test -f 'myrandom.c' then echo shar: will not over-write existing file "'myrandom.c'" else cat << "SHAR_EOF" > 'myrandom.c' #include #include double myrandom_() /* remove _ before C compilation */ { return (double) rand()/RAND_MAX; } SHAR_EOF fi # end of overwriting check if test -f 'pi-simple.c' then echo shar: will not over-write existing file "'pi-simple.c'" else cat << "SHAR_EOF" > 'pi-simple.c' /***************************************************************************/ /* ____Demonstrates SPRNG use for Monte Carlo integration____ */ /* Compute pi using Monte Carlo integration. Random points are generated */ /* in a square of size 2. The value of pi is estimated as four times the */ /* the proportion of samples that fall within a circle of unit radius. */ /***************************************************************************/ #include #include #include #define SIMPLE_SPRNG /* simple interface */ #include "sprng.h" #define EXACT_PI 3.141592653589793238462643 main(argc,argv) int argc; char *argv[]; { int in, n, in_old, n_old; double pi, error, stderror, p=EXACT_PI/4.0; char filename[80]; initialize(&n, &in_old, &n_old, filename); /* read args & initialize */ in = count_in_circle(n); /* count samples in circle */ in += in_old; /* # in circle, in all runs */ n += n_old; /* # of samples, in all runs */ pi = (4.0*in)/n; /* estimate pi */ error = fabs(pi - EXACT_PI); /* determine error */ stderror = 4*sqrt(p*(1.0-p)/n); /* standard error */ printf( "pi is estimated as %18.16f from %12d samples.\n", pi, n); printf( "\tError = %10.8g, standard error = %10.8g\n", error, stderror); save_state(filename, in, n); /* check-point final state */ } int count_in_circle(n) /* count # of samples in circle */ int n; { int i, in; double x, y; for (i=in=0; i 'pi-simple_mpi.c' /***************************************************************************/ /* ____Demonstrates SPRNG use for Monte Carlo integration____ */ /* Compute pi using Monte Carlo integration. Random points are generated */ /* in a square of size 2. The value of pi is estimated as four times the */ /* the proportion of samples that fall within a circle of unit radius. */ /* The final state of the computations is check-pointed at the end, so the */ /* the calculations can be continued from the previous state. However, the */ /* same number of processors should be used as in the previous run. */ /***************************************************************************/ #include #include #include #include "mpi.h" #define SIMPLE_SPRNG /* simple interface */ #define USE_MPI /* MPI version of SPRNG */ #include "sprng.h" #define EXACT_PI 3.141592653589793238462643 #define RECV_STREAM_TAG 1 main(argc,argv) int argc; char *argv[]; { int in, i, seed, n, my_n, in_old, n_old, nprocs, myid, temp; double pi, error, stderror, p=EXACT_PI/4.0; char filename[80]; /*************************** Initialization ******************************/ MPI_Init(&argc,&argv); /* Initialize MPI */ MPI_Comm_size(MPI_COMM_WORLD,&nprocs); /* Find number of processes */ MPI_Comm_rank(MPI_COMM_WORLD,&myid); /* Find rank of process */ initialize(&n, &in_old, &n_old, filename); /* read args & initialize */ my_n = n/nprocs; /* number of samples for this process */ if(myid < n%nprocs) my_n++; /******************** Count number of samples in circle ******************/ temp = count_in_circle(my_n); /* count samples in circle */ /* sum # in circle over all processes */ MPI_Reduce(&temp, &in, 1, MPI_INT, MPI_SUM, 0, MPI_COMM_WORLD); /*************************** Determine Pi ********************************/ if(myid == 0) { in += in_old; /* # in circle, in all runs */ n += n_old; /* # of samples, in all runs */ pi = (4.0*in)/n; /* estimate pi */ error = fabs(pi - EXACT_PI); /* determine error */ stderror = 4*sqrt(p*(1.0-p)/n); /* standard error */ printf( "pi is estimated as %18.16f from %12d samples.\n", pi, n); printf( "\tError = %10.8g, standard error = %10.8g\n", error, stderror); } /*************************** Save final state ****************************/ save_state(filename,in,n); /* save final state of computation*/ MPI_Finalize(); /* Terminate MPI */ } int count_in_circle(n) /* count # of samples in circle */ int n; { int i, in; double x, y; for (i=in=0; i 'pif-simple.F' C/***************************************************************************/ C/* ____Demonstrates SPRNG use for Monte Carlo integration____ */ C/* Compute pi using Monte Carlo integration. Random points are generated */ C/* in a square of size 2. The value of pi is estimated as four times */ C/* the proportion of samples that fall within a circle of unit radius. */ C/***************************************************************************/ program pif_simple implicit none #define SIMPLE_SPRNG ! simple interface #include "sprng_f.h" integer in, n, in_old, n_old, count_in_circle real*8 pi, error, stderror, p, EXACT_PI character filename*7 EXACT_PI = 3.141592653589793238462643 p = EXACT_PI/4.0 C-- initialization: to initialize n, in_old, n_old, and filename call initialize(n, in_old, n_old, filename) in = count_in_circle(n) ! count samples in circle in = in + in_old ! # in circle, in all runs n = n + n_old ! # of samples, in all runs pi = (4.0*in)/n error = abs(pi - EXACT_PI) stderror = 4*sqrt(p*(1.0-p)/n) write(*,114) pi, n write(*, 115) error, stderror 114 format('pi is estimated as ', f18.16, ' from ', i12, ' samples.') 115 format('Error = ', g18.8, ' standard error = ', g18.8) call save_state(filename, in, n) !check-point final state end C-- count # of samples in cirlce integer function count_in_circle(n) implicit none #include "sprng_f.h" integer n, i, in real*8 x, y in = 0 do 10 i=1, n x = 2*sprng() - 1.0 ! x coordinate y = 2*sprng() - 1.0 ! y coordinate if (x*x + y*y .lt. 1.0) then !check if point (x,y) is in circle in = in +1 endif 10 continue count_in_circle = in return end C-- initialization -- subroutine initialize(n, in_old, n_old, filename) implicit none #include "sprng_f.h" integer n, in_old, n_old, seed, size, junk SPRNG_POINTER junkPtr character filename*7, firstChar*1, buffer(MAX_PACKED_LENGTH) print*, 'Enter 9 for a new run, or 2 to continue an old run' read(*,113) firstChar print*, 'Enter file name(length 7) to store final state:' read(*, 111) filename ! 7 characters please print*, 'Enter number of new samples:' read(*,*)n 111 format(A7) 113 format(A1) if (firstChar .eq. '9') then ! new set of runs seed = make_sprng_seed() ! make seed from date/time information junkPtr = init_sprng(seed, CRAYLCG) ! initialize stream junk = print_sprng() in_old = 0 n_old = 0 else ! continue from previously stored state open(31, file = filename, status = 'unknown', & form = 'unformatted') read(31) in_old, n_old, size, buffer !read previous run info. junkPtr = unpack_sprng(buffer) close (31) endif return end C-- save the final state of the default stream into a file subroutine save_state(filename, in, n) implicit none #include "sprng_f.h" integer in, n, size character filename*7, buffer(MAX_PACKED_LENGTH) open(31, file = filename, status = 'unknown', & form = 'unformatted') size = pack_sprng(buffer) write(31)in,n,size,buffer !write the current run info. for future use close(31) return end SHAR_EOF fi # end of overwriting check if test -f 'seed-simple.c' then echo shar: will not over-write existing file "'seed-simple.c'" else cat << "SHAR_EOF" > 'seed-simple.c' /****************************************************************************/ /* ____Demonstrates the use make_sprng_seed____ */ /* 'make_sprng_seed' is used to produce a new seed each time the program is */ /* run. Then a few random numbers are printed. */ /****************************************************************************/ #include #define SIMPLE_SPRNG /* simple interface */ #include "sprng.h" /* SPRNG header file */ main() { int i, seed; double rn; seed = make_sprng_seed(); /* make new seed each time program is run */ init_sprng(seed,SPRNG_DEFAULT); /* initialize stream */ printf(" Printing information about new stream\n"); print_sprng(); printf(" Printing 3 random numbers in [0,1):\n"); for (i=0;i<3;i++) { rn = sprng(); /* generate double precision random number */ printf("%f\n", rn); } } SHAR_EOF fi # end of overwriting check if test -f 'seed-simple_mpi.c' then echo shar: will not over-write existing file "'seed-simple_mpi.c'" else cat << "SHAR_EOF" > 'seed-simple_mpi.c' /***************************************************************************/ /* ____Demonstrates the use of make_seed with MPI____ */ /* 'make_sprng_seed' is called to produce a new seed each time the program */ /* is run. The same seed is produced on each process. */ /***************************************************************************/ #include #include /* MPI header file */ #define SIMPLE_SPRNG /* simple interface */ #define USE_MPI /* SPRNG makes MPI calls */ #include "sprng.h" /* SPRNG header file */ main(int argc, char *argv[]) { int seed; double rn; int myid, i; /*************************** MPI calls ***********************************/ MPI_Init(&argc, &argv); /* Initialize MPI */ MPI_Comm_rank(MPI_COMM_WORLD, &myid); /* find process id */ /************************** Initialization *******************************/ seed = make_sprng_seed(); /* make new seed each time program is run */ /* Seed should be the same on all processes */ printf("Process %d: seed = %16d\n", myid, seed); init_sprng(seed,SPRNG_DEFAULT); /* initialize stream */ printf("Process %d: Print information about stream:\n",myid); print_sprng(); /************************ print random numbers ***************************/ for (i=0;i<3;i++) { rn = sprng(); /* generate double precision random number */ printf("process %d, random number %d: %f\n", myid, i+1, rn); } MPI_Finalize(); /* Terminate MPI */ } SHAR_EOF fi # end of overwriting check if test -f 'seed.c' then echo shar: will not over-write existing file "'seed.c'" else cat << "SHAR_EOF" > 'seed.c' /****************************************************************************/ /* ____Demonstrates the use make_sprng_seed____ */ /* 'make_sprng_seed' is used to produce a new seed each time the program is */ /* run. Then a few random numbers are printed. */ /****************************************************************************/ #include /* Uncomment the following line to get the interface with pointer checking */ /*#define CHECK_POINTERS */ #include "sprng.h" /* SPRNG header file */ main() { int streamnum, nstreams, seed, *stream, i; double rn; /************************** Initialization *******************************/ streamnum = 0; nstreams = 1; seed = make_sprng_seed(); /* make new seed each time program is run */ stream = init_sprng(streamnum,nstreams,seed,SPRNG_DEFAULT); /*initialize stream*/ printf(" Printing information about new stream\n"); print_sprng(stream); /************************ print random numbers ***************************/ printf(" Printing 3 random numbers in [0,1):\n"); for (i=0;i<3;i++) { rn = sprng(stream); /* generate double precision random number */ printf("%f\n", rn); } free_sprng(stream); /* free memory used to store stream state */ } SHAR_EOF fi # end of overwriting check if test -f 'seed_mpi.c' then echo shar: will not over-write existing file "'seed_mpi.c'" else cat << "SHAR_EOF" > 'seed_mpi.c' /***************************************************************************/ /* ____Demonstrates the use of make_seed with MPI____ */ /* 'make_sprng_seed' is called to produce a new seed each time the program */ /* is run. The same seed is produced on each process. */ /***************************************************************************/ #include #include /* MPI header file */ /* Uncomment the following line to get the interface with pointer checking */ /*#define CHECK_POINTERS */ #define USE_MPI /* SPRNG makes MPI calls */ #include "sprng.h" /* SPRNG header file */ main(int argc, char *argv[]) { int streamnum, nstreams, seed, *stream, i, myid, nprocs; double rn; /*************************** MPI calls ***********************************/ MPI_Init(&argc, &argv); /* Initialize MPI */ MPI_Comm_rank(MPI_COMM_WORLD, &myid); /* find process id */ MPI_Comm_size(MPI_COMM_WORLD, &nprocs); /* find number of processes */ /************************** Initialization *******************************/ streamnum = myid; nstreams = nprocs; /* one stream per processor */ seed = make_sprng_seed(); /* make new seed each time program is run */ /* Seed should be the same on all processes */ printf("Process %d: seed = %16d\n", myid, seed); stream = init_sprng(streamnum,nstreams,seed,SPRNG_DEFAULT); /*initialize stream*/ printf("Process %d: Print information about stream:\n",myid); print_sprng(stream); /************************ print random numbers ***************************/ for (i=0;i<3;i++) { rn = sprng(stream); /* generate double precision random number */ printf("process %d, random number %d: %f\n", myid, i+1, rn); } free_sprng(stream); /* free memory used to store stream state */ MPI_Finalize(); /* Terminate MPI */ } SHAR_EOF fi # end of overwriting check if test -f 'seedf-simple.F' then echo shar: will not over-write existing file "'seedf-simple.F'" else cat << "SHAR_EOF" > 'seedf-simple.F' C C Demonstrates the use make_sprng_seed C 'make_sprng_seed' is used to produce a new seed each time the program is C run. Then a few random numbers are printed. C program seedf_simple implicit none #define SIMPLE_SPRNG #include "sprng_f.h" integer seed, i, junk SPRNG_POINTER junkPtr real*8 rn C generate a new seed each time program is run and initialize stream seed = make_sprng_seed() junkPtr = init_sprng(seed,SPRNG_DEFAULT) print *, 'Printing information about new stream' junk = print_sprng() print *, 'Printing 3 random numbers in [0,1):' do 100 i = 1, 3 rn = sprng() write(*,"(f8.6)") rn 100 continue end SHAR_EOF fi # end of overwriting check if test -f 'seedf-simple_mpi.F' then echo shar: will not over-write existing file "'seedf-simple_mpi.F'" else cat << "SHAR_EOF" > 'seedf-simple_mpi.F' C C Demonstrates the use of make_seed with MPI C'make_sprng_seed' is called to produce a new seed each time the program C is run. The same seed is produced on each process. C program seedf_simple_mpi implicit none #define SIMPLE_SPRNG #define USE_MPI 1 #include #include "sprng_f.h" integer seed, i, myid, ierror, junk SPRNG_POINTER junkPtr real*8 rn call MPI_INIT(ierror) call MPI_COMM_RANK(MPI_COMM_WORLD, myid, ierror) seed = make_sprng_seed() !produce a new seed each time program is run C Seed should be the same on all processes write(6, 911) myid, seed 911 format("Process", i2, ": seed = ", i16) junkPtr = init_sprng(seed,SPRNG_DEFAULT) write(6, 922) myid 922 format("Process", i2, & ": Print information about stream:") junk = print_sprng() do 100 i = 1, 3 rn = sprng() write(6, 933) myid, i, rn 100 continue 933 format("process", i2, ", random number", i2, ": ", f8.6) call MPI_FINALIZE(ierror) end SHAR_EOF fi # end of overwriting check if test -f 'seedf.F' then echo shar: will not over-write existing file "'seedf.F'" else cat << "SHAR_EOF" > 'seedf.F' C C Demonstrates the use make_sprng_seed C 'make_sprng_seed' is used to produce a new seed each time the program is C run. Then a few random numbers are printed. C C Uncomment the following line to get the interface with pointer checking C #define CHECK_POINTERS program seedf implicit none #include "sprng_f.h" integer streamnum, nstreams, seed, i, junk SPRNG_POINTER stream real*8 rn streamnum = 0 nstreams = 1 C generate a new seed each time program is run and initialize stream seed = make_sprng_seed() stream = init_sprng(streamnum,nstreams,seed,SPRNG_DEFAULT) print *, 'Printing information about new stream' junk = print_sprng(stream) print *, 'Printing 3 random numbers in [0,1):' do 100 i = 1, 3 rn = sprng(stream) write(*,"(f8.6)") rn 100 continue junk = free_sprng(stream) end SHAR_EOF fi # end of overwriting check if test -f 'seedf_mpi.F' then echo shar: will not over-write existing file "'seedf_mpi.F'" else cat << "SHAR_EOF" > 'seedf_mpi.F' C C Demonstrates the use of make_seed with MPI C'make_sprng_seed' is called to produce a new seed each time the program C is run. The same seed is produced on each process. C C Uncomment the following line to get the interface with pointer checking C #define CHECK_POINTERS program seedf_mpi implicit none #define USE_MPI 1 #include #include "sprng_f.h" integer streamnum, nstreams, seed, i SPRNG_POINTER stream real*8 rn integer myid, nprocs, ierror, junk call MPI_INIT(ierror) call MPI_COMM_SIZE(MPI_COMM_WORLD, nprocs, ierror) call MPI_COMM_RANK(MPI_COMM_WORLD, myid, ierror) streamnum = myid nstreams = nprocs seed = make_sprng_seed() !produce a new seed each time program is run C Seed should be the same on all processes write(6, 911) myid, seed 911 format("Process", i2, ": seed = ", i16) stream = init_sprng(streamnum,nstreams,seed,SPRNG_DEFAULT) write(6, 922) myid 922 format("Process", i2, & ": Print information about stream:") junk = print_sprng(stream) do 100 i = 1, 3 rn = sprng(stream) write(6, 933) myid, i, rn 100 continue 933 format("process", i2, ", random number", i2, ": ", f8.6) junk = free_sprng(stream) call MPI_FINALIZE(ierror) end SHAR_EOF fi # end of overwriting check if test -f 'simple-simple.c' then echo shar: will not over-write existing file "'simple-simple.c'" else cat << "SHAR_EOF" > 'simple-simple.c' /****************************************************************************/ /* ____Demonstrates the use of sprng without initialization____ */ /* A few double precision random numbers are generated, without the user */ /* explicitly initializing the streams. SPRNG automatically initializes a */ /* stream with default seed and parameter the first time 'sprng' is called. */ /****************************************************************************/ #include #define SIMPLE_SPRNG /* simple interface */ #include "sprng.h" /* SPRNG header file */ main() { double rn; int i; printf(" Printing 3 random numbers in [0,1):\n"); for (i=0;i<3;i++) { rn = sprng(); /* generate double precision random number */ printf("%f\n",rn); } } SHAR_EOF fi # end of overwriting check if test -f 'simplef-simple.F' then echo shar: will not over-write existing file "'simplef-simple.F'" else cat << "SHAR_EOF" > 'simplef-simple.F' C C ____Demonstrates the use of sprng without initialization____ */ C A few double precision random numbers are generated, without the user */ C explicitly initializing the streams. SPRNG automatically initializes a */ C stream with default seed and parameter the first time 'sprng' is called. */ C program simplef_simple implicit none #define SIMPLE_SPRNG #include "sprng_f.h" integer i real*8 rn print *, 'Printing 3 random numbers in [0,1):' do 100 i = 1, 3 rn = sprng() write(*,"(f8.6)") rn 100 continue end SHAR_EOF fi # end of overwriting check if test -f 'spawn.c' then echo shar: will not over-write existing file "'spawn.c'" else cat << "SHAR_EOF" > 'spawn.c' /***************************************************************************/ /* ____Demonstrates the use of spawn_sprng____ */ /* A random number stream is initialized and a few random numbers are */ /* printed. Then two streams are spawned and a few numbers from one of them*/ /* is printed. */ /***************************************************************************/ #include /* Uncomment the following line to get the interface with pointer checking */ /*#define CHECK_POINTERS */ #include "sprng.h" /* SPRNG header file */ #define SEED 985456376 main() { int streamnum, nstreams, *stream, **new; double rn; int i, irn, nspawned; /****************** Initialization values *******************************/ streamnum = 0; nstreams = 1; stream = init_sprng(streamnum,nstreams,SEED,SPRNG_DEFAULT); /* initialize stream */ printf(" Print information about stream:\n"); print_sprng(stream); /*********************** print random numbers ***************************/ printf(" Printing 2 random numbers in [0,1):\n"); for (i=0;i<2;i++) { rn = sprng(stream); /* generate double precision random number*/ printf("%f\n", rn); } /**************************** spawn streams *****************************/ printf(" Spawned two streams\n"); nspawned = 2; nspawned = spawn_sprng(stream,2,&new); /* spawn 2 streams */ if(nspawned != 2) { fprintf(stderr,"Error: only %d streams spawned\n", nspawned); exit(1); } printf(" Information on first spawned stream:\n"); print_sprng(new[0]); printf(" Information on second spawned stream:\n"); print_sprng(new[1]); printf(" Printing 2 random numbers from second spawned stream:\n"); for (i=0;i<2;i++) { rn = sprng(new[1]); /* generate a random number */ printf("%f\n", rn); } /*************************** free memory ********************************/ free_sprng(stream); /* free memory used to store stream state */ free_sprng(new[0]); /* free memory used to store stream state */ free_sprng(new[1]); /* free memory used to store stream state */ free(new); } SHAR_EOF fi # end of overwriting check if test -f 'spawnf.F' then echo shar: will not over-write existing file "'spawnf.F'" else cat << "SHAR_EOF" > 'spawnf.F' C C ____Demonstrates the use of spawn_sprng____ C A random number stream is initialized and a few random numbers are C printed. Then two streams are spawned and a few numbers from one of them C is printed C C Uncomment the following line to get the interface with pointer checking C #define CHECK_POINTERS program sprng_spawnf implicit none #include "sprng_f.h" integer streamnum, nstreams, seed,junk integer i, nspawned SPRNG_POINTER stream, new(2) real*8 rn streamnum = 0 nstreams = 1 seed = 985456376 C initialize stream stream = init_sprng(streamnum,nstreams,seed,SPRNG_DEFAULT) print *, 'Print information about stream:' junk = print_sprng(stream) print *, 'Printing 2 random numbers in [0,1):' do 100 i = 1, 2 rn = sprng(stream) write(*, "(f8.6)") rn 100 continue C spawn streams print*, 'Spawned two streams' nspawned = 2 nspawned = spawn_sprng(stream, 2, new(1)) if (nspawned .ne. 2) then write(*, "('Error: only ',i3, ' streams spawned')") nspawned call exit(1) endif print *, 'Information on first spawned stream:' junk = print_sprng(new(1)) print *, 'Information on second spawned stream:' junk = print_sprng(new(2)) print *, 'Printing 2 random numbers from second spawned stream:' do 200 i = 1, 2 rn = sprng(new(2)) write(*, "(f8.6)") rn 200 continue C free memory junk = free_sprng(stream) junk = free_sprng(new(1)) junk = free_sprng(new(2)) end SHAR_EOF fi # end of overwriting check if test -f 'sprng-simple.c' then echo shar: will not over-write existing file "'sprng-simple.c'" else cat << "SHAR_EOF" > 'sprng-simple.c' /***************************************************************************/ /* ____Demonstrates the use of sprng and isprng____ */ /* A random number stream is initialized and a few random double precision */ /* numbers and a few integers are printed. */ /***************************************************************************/ #include #define SIMPLE_SPRNG /* simple interface */ #include "sprng.h" /* SPRNG header file */ #define SEED 985456376 main() { int seed, i, irn; double rn; /************************** Initialization *******************************/ init_sprng(SEED,SPRNG_DEFAULT); /* initialize stream */ printf(" Print information about new stream:\n"); print_sprng(); /*********************** print random numbers ****************************/ printf(" Printing 3 random numbers in [0,1):\n"); for (i=0;i<3;i++) { rn = sprng(); /* generate double precision random number */ printf("%f\n",rn); } /*********************** print random integers ***************************/ printf(" Printing 3 random integers in [0,2^31):\n"); for (i=0;i<3;i++) { irn = isprng(); /* generate an integer random number */ printf("%16d\n",irn); } } SHAR_EOF fi # end of overwriting check if test -f 'sprng-simple_mpi.C' then echo shar: will not over-write existing file "'sprng-simple_mpi.C'" else cat << "SHAR_EOF" > 'sprng-simple_mpi.C' /***************************************************************************/ /* Demonstrates sprng use in C++ with MPI */ /* A distinct stream is created on each process, then prints a few */ /* random numbers. */ /***************************************************************************/ #include #include // MPI header file #define SIMPLE_SPRNG // simple interface #define USE_MPI // use MPI to find number of processes #include "sprng.h" // SPRNG header file #define SEED 985456376 main(int argc, char *argv[]) { double rn; int i, myid; /*************************** MPI calls ***********************************/ MPI_Init(&argc, &argv); /* Initialize MPI */ MPI_Comm_rank(MPI_COMM_WORLD, &myid); /* find process id */ /************************** Initialization *******************************/ init_sprng(SEED,SPRNG_DEFAULT); /* initialize stream */ printf("Process %d, print information about stream:\n", myid); print_sprng(); /************************ print random numbers ***************************/ for (i=0;i<3;i++) { rn = sprng(); /* generate double precision random number */ printf("Process %d, random number %d: %.14f\n", myid, i+1, rn); } MPI_Finalize(); /* Terminate MPI */ } SHAR_EOF fi # end of overwriting check if test -f 'sprng-simple_mpi.c' then echo shar: will not over-write existing file "'sprng-simple_mpi.c'" else cat << "SHAR_EOF" > 'sprng-simple_mpi.c' /***************************************************************************/ /* Demonstrates sprng use with one stream per process */ /* A distinct stream is created on each process, then prints a few */ /* random numbers. */ /***************************************************************************/ #include #include /* MPI header file */ #define SIMPLE_SPRNG /* simple interface */ #define USE_MPI /* use MPI to find number of processes */ #include "sprng.h" /* SPRNG header file */ #define SEED 985456376 main(int argc, char *argv[]) { double rn; int i, myid; /*************************** MPI calls ***********************************/ MPI_Init(&argc, &argv); /* Initialize MPI */ MPI_Comm_rank(MPI_COMM_WORLD, &myid); /* find process id */ /************************** Initialization *******************************/ init_sprng(SEED,SPRNG_DEFAULT); /* initialize stream */ printf("Process %d, print information about stream:\n", myid); print_sprng(); /************************ print random numbers ***************************/ for (i=0;i<3;i++) { rn = sprng(); /* generate double precision random number */ printf("Process %d, random number %d: %.14f\n", myid, i+1, rn); } MPI_Finalize(); /* Terminate MPI */ } SHAR_EOF fi # end of overwriting check if test -f 'sprng.C' then echo shar: will not over-write existing file "'sprng.C'" else cat << "SHAR_EOF" > 'sprng.C' /***************************************************************************/ /* ____Demonstrates the use of sprng in C++____ */ /* A random number stream is initialized and a few random double precision */ /* numbers are printed. */ /***************************************************************************/ #include #include #include "sprng.h" /* SPRNG header file */ #define SEED 985456376 main() { int streamnum, nstreams, *stream; double rn; int irn; int i; /****************** Initialization values *******************************/ streamnum = 0; nstreams = 1; stream = init_sprng(streamnum,nstreams,SEED,SPRNG_DEFAULT); /* initialize stream */ cout << " Print information about new stream:\n"; print_sprng(stream); /*********************** print random numbers ***************************/ cout << " Printing 3 random numbers in [0,1):\n"; for (i=0;i<3;i++) { rn = sprng(stream); /* generate a double precision random number */ cout << rn << "\n"; } free_sprng(stream); /* free memory used to store stream state */ } SHAR_EOF fi # end of overwriting check if test -f 'sprng.c' then echo shar: will not over-write existing file "'sprng.c'" else cat << "SHAR_EOF" > 'sprng.c' /***************************************************************************/ /* ____Demonstrates the use of sprng and isprng____ */ /* A random number stream is initialized and a few random double precision */ /* numbers and a few integers are printed. */ /***************************************************************************/ #include /* Uncomment the following line to get the interface with pointer checking */ /*#define CHECK_POINTERS */ #include "sprng.h" /* SPRNG header file */ #define SEED 985456376 main() { int streamnum, nstreams, *stream; double rn; int irn; int i; /****************** Initialization values *******************************/ streamnum = 0; nstreams = 1; stream = init_sprng(streamnum,nstreams,SEED,SPRNG_DEFAULT); /* initialize stream */ printf(" Print information about new stream:\n"); print_sprng(stream); /*********************** print random numbers ***************************/ printf(" Printing 3 random numbers in [0,1):\n"); for (i=0;i<3;i++) { rn = sprng(stream); /* generate a double precision random number */ printf("%f\n",rn); } printf(" Printing 3 random integers in [0,2^31):\n"); for (i=0;i<3;i++) { irn = isprng(stream); /* generate an integer random number */ printf("%16d\n",irn); } /*************************** free memory ********************************/ free_sprng(stream); /* free memory used to store stream state */ } SHAR_EOF fi # end of overwriting check if test -f 'sprng_mpi.c' then echo shar: will not over-write existing file "'sprng_mpi.c'" else cat << "SHAR_EOF" > 'sprng_mpi.c' /***************************************************************************/ /* Demonstrates sprng use with one stream per process */ /* A distinct stream is created on each process, then prints a few */ /* random numbers. */ /***************************************************************************/ #include #include /* MPI header file */ /* Uncomment the following line to get the interface with pointer checking */ /*#define CHECK_POINTERS */ #include "sprng.h" /* SPRNG header file */ #define SEED 985456376 main(int argc, char *argv[]) { int streamnum, nstreams, *stream; double rn; int i, myid, nprocs; /*************************** MPI calls ***********************************/ MPI_Init(&argc, &argv); /* Initialize MPI */ MPI_Comm_rank(MPI_COMM_WORLD, &myid); /* find process id */ MPI_Comm_size(MPI_COMM_WORLD, &nprocs); /* find number of processes */ /************************** Initialization *******************************/ streamnum = myid; nstreams = nprocs; /* one stream per processor */ stream = init_sprng(streamnum,nstreams,SEED,SPRNG_DEFAULT); /* initialize stream */ printf("Process %d, print information about stream:\n", myid); print_sprng(stream); /*********************** print random numbers ****************************/ for (i=0;i<3;i++) { rn = sprng(stream); /* generate double precision random number */ printf("Process %d, random number %d: %.14f\n", myid, i+1, rn); } /*************************** free memory *********************************/ free_sprng(stream); /* free memory used to store stream state */ MPI_Finalize(); /* Terminate MPI */ } SHAR_EOF fi # end of overwriting check if test -f 'sprngf-simple.F' then echo shar: will not over-write existing file "'sprngf-simple.F'" else cat << "SHAR_EOF" > 'sprngf-simple.F' C C Demonstrates the use of sprng and isprng C A random number stream is initialized and a few random double precision C numbers and a few integers are printed. C program sprngf_simple implicit none #define SIMPLE_SPRNG #include "sprng_f.h" SPRNG_POINTER junkPtr real*8 rn integer seed, irn, i, junk seed = 985456376 C initialization junkPtr = init_sprng(seed,SPRNG_DEFAULT) print *, 'Print information about new stream:' junk = print_sprng() print *, 'Printing 3 random numbers in [0,1):' do 100 i = 1, 3 rn = sprng() write(*,"(f8.6)") rn 100 continue print *, 'Printing 3 random integers in [0,2^31):' do 200 i = 1, 3 irn = isprng() write(*,"(i16)") irn 200 continue end SHAR_EOF fi # end of overwriting check if test -f 'sprngf-simple_mpi.F' then echo shar: will not over-write existing file "'sprngf-simple_mpi.F'" else cat << "SHAR_EOF" > 'sprngf-simple_mpi.F' C C Demonstrates sprng use with one stream per process C A distinct stream is created on each process then prints a few C random numbers. C program sprngf_mpi implicit none #define SIMPLE_SPRNG ! simple interface #define USE_MPI ! use MPI to find number of processes #include #include "sprng_f.h" SPRNG_POINTER junkPtr real*8 rn integer seed, i, myid, ierror,junk call MPI_INIT(ierror) call MPI_COMM_RANK(MPI_COMM_WORLD, myid, ierror) seed = 985456376 C junkPtr = init_sprng(seed,SPRNG_DEFAULT) write(*,"('Process', i2, ', print information about stream:')") & myid junk = print_sprng() do 100 i = 1, 3 rn = sprng() write(*, "('Process',i2,', random number ',i1,': ',f16.14)") & myid,i,rn 100 continue call MPI_FINALIZE(ierror) end SHAR_EOF fi # end of overwriting check if test -f 'sprngf.F' then echo shar: will not over-write existing file "'sprngf.F'" else cat << "SHAR_EOF" > 'sprngf.F' C C Demonstrates the use of sprng and isprng C A random number stream is initialized and a few random double precision C numbers and a few integers are printed. C C Uncomment the following line to get the interface with pointer checking C #define CHECK_POINTERS program sprngf implicit none #include "sprng_f.h" integer streamnum, nstreams, seed SPRNG_POINTER stream real*8 rn integer irn, i, junk streamnum = 0 nstreams = 1 seed = 985456376 C initialize stream stream = init_sprng(streamnum,nstreams,seed,SPRNG_DEFAULT) print *, 'Print information about new stream:' junk = print_sprng(stream) print *, 'Printing 3 random numbers in [0,1):' do 100 i = 1, 3 rn = sprng(stream) write(*,"(f8.6)") rn 100 continue print *, 'Printing 3 random integers in [0,2^31):' do 200 i = 1, 3 irn = isprng(stream) write(*,"(i16)") irn 200 continue junk = free_sprng(stream) end SHAR_EOF fi # end of overwriting check if test -f 'sprngf_mpi.F' then echo shar: will not over-write existing file "'sprngf_mpi.F'" else cat << "SHAR_EOF" > 'sprngf_mpi.F' C C Demonstrates sprng use with one stream per process C A distinct stream is created on each process then prints a few C random numbers. C C Uncomment the following line to get the interface with pointer checking C #define CHECK_POINTERS program sprngf_mpi implicit none #include #include "sprng_f.h" integer streamnum, nstreams, seed SPRNG_POINTER stream real*8 rn integer i, myid, nprocs, ierror, junk call MPI_INIT(ierror) call MPI_COMM_SIZE(MPI_COMM_WORLD, nprocs, ierror) call MPI_COMM_RANK(MPI_COMM_WORLD, myid, ierror) streamnum = myid nstreams = nprocs seed = 985456376 C stream = init_sprng(streamnum,nstreams,seed,SPRNG_DEFAULT) write(*,"('Process', i2, ', print information about stream:')") & myid junk = print_sprng(stream) do 100 i = 1, 3 rn = sprng(stream) write(*, "('Process',i2,', random number ',i1,': ',f16.14)") & myid,i,rn 100 continue junk = free_sprng(stream) call MPI_FINALIZE(ierror) end SHAR_EOF fi # end of overwriting check if test -f 'subroutinef.F' then echo shar: will not over-write existing file "'subroutinef.F'" else cat << "SHAR_EOF" > 'subroutinef.F' C C Demonstrates the use of sprng in subroutines program sprngf implicit none #include "sprng_f.h" integer streamnum, nstreams, seed,junk SPRNG_POINTER stream streamnum = 0 nstreams = 1 seed = 985456376 C initialize stream stream = init_sprng(streamnum,nstreams,seed,SPRNG_DEFAULT) print *, 'Printing information about new stream' junk = print_sprng(stream) call sub1(stream) junk = free_sprng(stream) end C --- print random numbers in subroutine --- subroutine sub1(stream) #include "sprng_f.h" SPRNG_POINTER stream real *8 rn print *, 'Printing 3 double precision numbers in [0,1): ' do 100 i = 1, 3 rn = sprng(stream) write(*, "(i6, 2H , f19.16)") i, rn 100 continue return end SHAR_EOF fi # end of overwriting check cd .. if test -f 'Makefile' then echo shar: will not over-write existing file "'Makefile'" else cat << "SHAR_EOF" > 'Makefile' ############################################################################ # # Then typing the command below => results in the following being created # make => SPRNG libraries and example programs # make src => SPRNG libraries (in ./lib) and certain executables # make examples => SPRNG examples # make tests => Tests of quality of random streams # # Object files created during the compilation process can be deleted finally # by typing # make clean # # Object files, executables, and the libraries can be deleted by typing # make realclean ############################################################################ SHELL = /bin/sh include make.CHOICES LIBDIR = $(LIB_REL_DIR) SRCDIR = SRC DIRS = SRC EXAMPLES TESTS lib include $(SRCDIR)/make.$(PLAT) all : src examples tests #--------------------------------------------------------------------------- src : (cd SRC; $(MAKE) LIBDIR=../$(LIBDIR) SRCDIR=../$(SRCDIR) PLAT=$(PLAT); cd ..) examples : (cd EXAMPLES; $(MAKE) LIBDIR=../$(LIBDIR) SRCDIR=../$(SRCDIR) PLAT=$(PLAT)) tests : (cd TESTS; $(MAKE) LIBDIR=../$(LIBDIR) SRCDIR=../$(SRCDIR) PLAT=$(PLAT)) #--------------------------------------------------------------------------- clean : @for l in $(DIRS) ; do \ cd $$l ; \ $(MAKE) PLAT=$(PLAT) clean ; \ cd .. ; \ done realclean : @for l in $(DIRS) ; do \ cd $$l ; \ $(MAKE) PLAT=$(PLAT) realclean ; \ cd .. ; \ done @rm -f core *~ check* time* *.data .SUFFIXES : SHAR_EOF fi # end of overwriting check if test -f 'README' then echo shar: will not over-write existing file "'README'" else cat << "SHAR_EOF" > 'README' SPRNG: Scalable Parallel Random Number Generator libraries ---------------------------------------------------------- http://www.ncsa.uiuc.edu/Apps/SPRNG/ /* Disclaimer: NCSA expressly disclaims any and all warranties, expressed */ /* or implied, concerning the enclosed software. The intent in sharing */ /* this software is to promote the productive interchange of ideas */ /* throughout the research community. All software is furnished on an */ /* "as is" basis. No further updates to this software should be */ /* expected. Although this may occur, no commitment exists. The authors */ /* certainly invite your comments as well as the reporting of any bugs. */ /* NCSA cannot commit that any or all bugs will be fixed. */ IMPORTANT: Please read CHANGES.TEXT for the history of changes since the last release of SPRNG. The SPRNG libraries of generators produce good quality random numbers, and are also fast. They have been subjected to some of the largest random number tests, with around 10^13 RNs per test. Languages: C, C++, FORTRAN Platforms: Cray T3E, IBM SP2, SGI Power Challenge Array, Origin 2000, CONVEX Exemplar, SUN workstations, PC running Linux, HP workstations Generators: Modified Additive Lagged Fibonacci, Multiplicative Lagged Fibonacci, Combined Multiple Recursive generator, three types of Linear Congruential. (The user can switch from one generator to another at link time, without modifying or recompiling the code.) Directory structure: SRC: SPRNG source code. EXAMPLES: Example program that demonstrate the use of the SPRNG. TESTS: Test suite to verify the quality of sequential and parallel random number generators. DOCS: Detailed documentation. For more up-to-date information: http://www.ncsa.uiuc.edu/Apps/SPRNG/www/toc.html include: Header files for the user to include. lib: The SPRNG libraries will go in here when SPRNG is built. Building the library: To build the library, examples and tests, please edit the make.CHOICES file to select the type of platform you are working on. Then type: make To build the library alone, please type: make SRC In case of errors, please edit the SRC/make.XXX file for your platform. After the make is completed, please type: checksprng This checks each generator to verify that the library works as expected. Please see documentation for details. SHAR_EOF fi # end of overwriting check if test ! -d 'SRC' then mkdir 'SRC' fi cd 'SRC' if test -f 'Makefile' then echo shar: will not over-write existing file "'Makefile'" else cat << "SHAR_EOF" > 'Makefile' ############################################################################ # # Then typing the command below => results in the following being created # make => Fortran and C libraries for all the generators, # Timing and checking executibles. # # Object files created during the compilation process can be deleted finally # by typing # make clean ############################################################################ SHELL = /bin/sh include ../make.CHOICES LIBDIR = ../$(LIB_REL_DIR) CHKDIR = .. ############################################################################## ####### The following is the only line in this file that you may modify ###### LIBLIST = lcg lfg lcg64 cmrg mlfg ############################################################################## include make.$(PLAT) #--------------------------------------------------------------------------- # Jump point to each generator's own makefile #--------------------------------------------------------------------------- all : @for l in $(LIBLIST) ; do \ (cd $$l; $(MAKE) ) ; \ done #--------------------------------------------------------------------------- # Create files that all generators need #--------------------------------------------------------------------------- SPRNG_COMMON_DEPEND = fwrap_mpi.o cputime.o makeseed.o store.o\ simple_mpi.o memory.o communicate.o checkid.o sprng_common : $(SPRNG_COMMON_DEPEND) fwrap_mpi.o : fwrap.h fwrap_mpi.c $(CC) -c $(CFLAGS) $(FFXN) fwrap_mpi.c cputime.o : cputime.c fwrap.h $(CC) -c $(CFLAGS) $(FFXN) cputime.c makeseed.o : makeseed.c $(CC) -c $(CFLAGS) makeseed.c simple_mpi.o : simple_mpi.c memory.h interface.h $(CC) -c $(CFLAGS) simple_mpi.c memory.o : memory.c $(CC) -c $(CFLAGS) memory.c communicate.o : communicate.c memory.h $(CC) -c $(CFLAGS) communicate.c checkid.o : checkid.c memory.h $(CC) -c $(CFLAGS) checkid.c store.o : store.c store.h $(CC) -c $(CFLAGS) store.c #--------------------------------------------------------------------------- # Create executables to time the generator #--------------------------------------------------------------------------- timesprng_exec : timesprng_c_exec timesprng_f_exec @chmod u+x $(CHKDIR)/timesprng timesprng_c_exec : $(CHKDIR)/time$(TIMESPRNG_LIB) @./insertlib $(TIMESPRNG_LIB) $(CHKDIR)/timesprng "Timing C interface" time$(TIMESPRNG_LIB) $(CHKDIR)/time$(TIMESPRNG_LIB) timesprng_f_exec : $(CHKDIR)/timef$(TIMESPRNG_LIB) @./insertlib $(TIMESPRNG_LIB) $(CHKDIR)/timesprng "Timing FORTRAN interface" timef$(TIMESPRNG_LIB) $(CHKDIR)/timef$(TIMESPRNG_LIB) $(CHKDIR)/time$(TIMESPRNG_LIB) : timing.o $(LIBDIR)/lib$(TIMESPRNG_LIB).a $(CLD) $(CLDFLAGS) -o $(CHKDIR)/time$(TIMESPRNG_LIB) timing.o -L$(LIBDIR) \ -l$(TIMESPRNG_LIB) $(GMPLIB) $(CHKDIR)/timef$(TIMESPRNG_LIB) : timingf.o $(LIBDIR)/lib$(TIMESPRNG_LIB).a $(F77LD) $(F77LDFLAGS) -o $(CHKDIR)/timef$(TIMESPRNG_LIB) timingf.o -L$(LIBDIR) \ -l$(TIMESPRNG_LIB) $(GMPLIB) timing.o : timing.c cputime.o $(CC) -c $(CFLAGS) timing.c drand : drand.c cputime.h cputime.o $(CC) $(CFLAGS) -o drand drand.c cputime.o timingf.o : timingf.$(FSUFFIX) $(F77) -c $(FFLAGS) timingf.$(FSUFFIX) $(LIBDIR)/lib$(TIMESPRNG_LIB).a : $(TIMESPRNG_LIB)/$(TIMESPRNG_LIB).c (cd $(TIMESPRNG_LIB); $(MAKE) $(TIMESPRNG_LIB)) #--------------------------------------------------------------------------- # Create executables to check whether the generator is ported correctly #--------------------------------------------------------------------------- checksprng_exec : checksprng_c_exec checksprng_f_exec @chmod u+x $(CHKDIR)/checksprng checksprng_c_exec : $(CHKDIR)/check.c$(CHECKSPRNG_LIB) \ $(CHKDIR)/check_sim.c$(CHECKSPRNG_LIB) \ $(CHKDIR)/check_ptr.c$(CHECKSPRNG_LIB) @./insertlib $(CHECKSPRNG_LIB) $(CHKDIR)/checksprng "Checking Default C interface:" "check.c$(CHECKSPRNG_LIB) < $(CHECKSPRNG_LIB).data 2> /dev/null" $(CHKDIR)/check.c$(CHECKSPRNG_LIB) @./insertlib $(CHECKSPRNG_LIB) $(CHKDIR)/checksprng "Checking Simple C interface:" "check_sim.c$(CHECKSPRNG_LIB) < $(CHECKSPRNG_LIB).data 2> /dev/null" $(CHKDIR)/check_sim.c$(CHECKSPRNG_LIB) @./insertlib $(CHECKSPRNG_LIB) $(CHKDIR)/checksprng "Checking C interface with pointer checking:" "check_ptr.c$(CHECKSPRNG_LIB) < $(CHECKSPRNG_LIB).data 2> /dev/null" $(CHKDIR)/check_ptr.c$(CHECKSPRNG_LIB) checksprng_f_exec : $(CHKDIR)/check.f$(CHECKSPRNG_LIB) \ $(CHKDIR)/check_sim.f$(CHECKSPRNG_LIB) \ $(CHKDIR)/check_ptr.f$(CHECKSPRNG_LIB) @./insertlib $(CHECKSPRNG_LIB) $(CHKDIR)/checksprng "Checking Default FORTRAN interface:" "check.f$(CHECKSPRNG_LIB) < $(CHECKSPRNG_LIB).data 2> /dev/null" $(CHKDIR)/check.f$(CHECKSPRNG_LIB) @./insertlib $(CHECKSPRNG_LIB) $(CHKDIR)/checksprng "Checking Simple FORTRAN interface:" "check_sim.f$(CHECKSPRNG_LIB) < $(CHECKSPRNG_LIB).data 2> /dev/null" $(CHKDIR)/check_sim.f$(CHECKSPRNG_LIB) @./insertlib $(CHECKSPRNG_LIB) $(CHKDIR)/checksprng "Checking FORTRAN interface with pointer checking:" "check_ptr.f$(CHECKSPRNG_LIB) < $(CHECKSPRNG_LIB).data 2> /dev/null" $(CHKDIR)/check_ptr.f$(CHECKSPRNG_LIB) $(CHKDIR)/check.c$(CHECKSPRNG_LIB) : check_gen.o $(LIBDIR)/lib$(CHECKSPRNG_LIB).a $(CLD) $(CLDFLAGS) -o $(CHKDIR)/check.c$(CHECKSPRNG_LIB) check_gen.o \ -L$(LIBDIR) -l$(CHECKSPRNG_LIB) $(GMPLIB) $(CHKDIR)/check_sim.c$(CHECKSPRNG_LIB) : check_gen_simple.o $(LIBDIR)/lib$(CHECKSPRNG_LIB).a $(CLD) $(CLDFLAGS) -o $(CHKDIR)/check_sim.c$(CHECKSPRNG_LIB) check_gen_simple.o \ -L$(LIBDIR) -l$(CHECKSPRNG_LIB) $(GMPLIB) $(CHKDIR)/check_ptr.c$(CHECKSPRNG_LIB) : check_gen_ptr.o $(LIBDIR)/lib$(CHECKSPRNG_LIB).a $(CLD) $(CLDFLAGS) -o $(CHKDIR)/check_ptr.c$(CHECKSPRNG_LIB) check_gen_ptr.o \ -L$(LIBDIR) -l$(CHECKSPRNG_LIB) $(GMPLIB) $(CHKDIR)/check.f$(CHECKSPRNG_LIB) : check_genf.o $(LIBDIR)/lib$(CHECKSPRNG_LIB).a $(F77LD) $(F77LDFLAGS) -o $(CHKDIR)/check.f$(CHECKSPRNG_LIB) check_genf.o \ -L$(LIBDIR) -l$(CHECKSPRNG_LIB) $(GMPLIB) $(CHKDIR)/check_sim.f$(CHECKSPRNG_LIB) : check_genf_simple.o $(LIBDIR)/lib$(CHECKSPRNG_LIB).a $(F77LD) $(F77LDFLAGS) -o $(CHKDIR)/check_sim.f$(CHECKSPRNG_LIB) check_genf_simple.o \ -L$(LIBDIR) -l$(CHECKSPRNG_LIB) $(GMPLIB) $(CHKDIR)/check_ptr.f$(CHECKSPRNG_LIB) : check_genf_ptr.o $(LIBDIR)/lib$(CHECKSPRNG_LIB).a $(F77LD) $(F77LDFLAGS) -o $(CHKDIR)/check_ptr.f$(CHECKSPRNG_LIB) check_genf_ptr.o \ -L$(LIBDIR) -l$(CHECKSPRNG_LIB) $(GMPLIB) $(LIBDIR)/lib$(CHECKSPRNG_LIB).a : $(CHECKSPRNG_LIB)/$(CHECKSPRNG_LIB).c (cd $(CHECKSPRNG_LIB); $(MAKE) $(CHECKSPRNG_LIB)) check_gen.o : check_gen.c sprng.h $(CC) -c $(CFLAGS) check_gen.c check_gen_simple.o : check_gen_simple.c sprng.h $(CC) -c $(CFLAGS) check_gen_simple.c check_gen_ptr.o : check_gen_ptr.c sprng.h $(CC) -c $(CFLAGS) check_gen_ptr.c check_genf.o : check_genf.$(FSUFFIX) sprng_f.h $(F77) -c $(FFLAGS) check_genf.$(FSUFFIX) check_genf_simple.o : check_genf_simple.$(FSUFFIX) sprng_f.h $(F77) -c $(FFLAGS) check_genf_simple.$(FSUFFIX) check_genf_ptr.o : check_genf_ptr.$(FSUFFIX) sprng_f.h $(F77) -c $(FFLAGS) check_genf_ptr.$(FSUFFIX) .SUFFIXES : .SUFFIXES : .f .F #--------------------------------------------------------------------------- .F.f : @if [ -f $*.i ] ; then \ rm $*.i ;\ fi $(CPP) $(SRCDIR) $*.F @if [ -f $*.i ] ; then \ mv $*.i $*.f ;\ fi #--------------------------------------------------------------------------- clean : rm -f *.o *.i @for l in $(LIBLIST) ; do \ cd $$l ; \ $(MAKE) PLAT=$(PLAT) clean ; \ cd .. ; \ done realclean : rm -f *.o *.f *~ *.i core a.out @for l in $(LIBLIST) ; do \ cd $$l ; \ $(MAKE) PLAT=$(PLAT) realclean ; \ cd .. ; \ rm -f $(CHKDIR)/$$l.data; \ done SHAR_EOF fi # end of overwriting check if test -f 'README' then echo shar: will not over-write existing file "'README'" else cat << "SHAR_EOF" > 'README' SPRNG Libraries --------------- (http://www.ncsa.uiuc.edu/Apps/CMP/RNG/www/install.html) (http://www.ncsa.uiuc.edu/Apps/CMP/RNG/www/makefile.html) This directory contains the source code for the SPRNG libraries, and certain other test executables. Select the platform and installation directory, as explained in ../make.CHOICES. Please read ../README too. Next, typing the command below => results in the following being created: make => Fortran and C libraries for all the generators, Timing executables, test executables make lfg => Modified Additive Lagged Fibonacci Generator make mlfg => Multiplicative Lagged Fibonacci Generator make lcg => 48 bit Linear Congruential Generator make lcg64 => 64 bit Linear Congruential Generator make pmlcg => Prime Modulus Linear Congruential Generator (Requires GMP library) make cmrg => Combined Multiple Recursive Generator Object files created during the compilation process can be deleted finally by typing make clean SHAR_EOF fi # end of overwriting check if test -f 'check_gen.c' then echo shar: will not over-write existing file "'check_gen.c'" else cat << "SHAR_EOF" > 'check_gen.c' #include #include #include /*#define USE_MPI Uncomment to test with MPI */ #ifdef USE_MPI #include #endif #include "sprng.h" #ifdef VERBOSE #define report printf #else #define report ignore #endif #define PARAM SPRNG_DEFAULT #define YES 1 #define NO 0 #define diff(a,b) (((a)>(b))?((a)-(b)):((b)-(a))) #ifdef __STDC__ void ignore(char *s, ...) #else void ignore(s) char *s; #endif { } int check_gen() /* Check generator with correct parameters */ { int *gen1, *gen2, *gen3, *gen4, **gen5, **newgen1, **newgen2, i, size; char *s; int tempi, tempi2, correct, result = YES; int ngens, seed, nsp; float tempf1, tempf2; double tempd1; ngens = 3; seed = 985456376; gen1 = init_sprng(0,ngens,seed,PARAM); /* initiallize generators */ gen2 = init_sprng(1,ngens,seed,PARAM); gen3 = init_sprng(2,ngens,seed,PARAM); /* ____________________ Check arithmetic ___________________________ */ #ifdef CREATE_DATA for(i=0; i<500; i++) /* generate integers */ printf("%d\n", isprng(gen1)); for(i=0; i<500; i++) /* generate floats */ printf("%8.6f\n", get_rn_flt(gen1)); for(i=0; i<500; i++) printf("%16.14f\n", sprng(gen1)); /* generate double precision numbers */ #else correct = YES; for(i=0; i<500; i++) /* check integer arithmetic */ { tempi2 = isprng(gen1); scanf("%d\n", &tempi); if(tempi != tempi2) { printf("%d. %d, %d\n", i, tempi, tempi2); result = correct = NO; } } if(correct == NO) printf("FAILED: Integer generator does not reproduce correct stream.\n\tArithmetic on this machine may not be compatible with this generator.\n"); else report("PASSED: Integer generator passed the reproducibility test\n"); correct = YES; for(i=0; i<500; i++) /* check float arithmetic */ { tempf1 = get_rn_flt(gen1); scanf("%f\n", &tempf2); if(diff(tempf1,tempf2) > 1.0e-6) { printf("%d. %8.6f %8.6f\n", i, tempf2, tempf1); result = correct = NO; } } if(correct == NO) printf("FAILED: Float generator does not reproduce correct stream\n\tArithmetic on this machine may not be compatible with this generator.\n"); else report("PASSED: Float generator passed the reproducibility test\n"); correct = YES; for(i=0; i<500; i++) /* check double precision arithmetic */ { double tempd2; scanf("%lf\n", &tempd1); tempd2 = sprng(gen1); if(diff(tempd1,tempd2)>1.0e-14) { printf("%d. %18.15f %18.15f\n", i, tempd1, tempd2); result = correct = NO; } } if(correct == NO) printf("FAILED: Double generator does not reproduce correct stream.\n\tArithmetic on this machine may not be compatible with this generator.\n"); else report("PASSED: Double generator spawns correctly\n"); #endif /* ____________________ Check spawning ___________________ */ nsp = 0; nsp += spawn_sprng(gen2,2,&newgen1); /* spawn new generators */ nsp += spawn_sprng(newgen1[1],2,&newgen2); #ifdef CREATE_DATA for(i=0; i<50; i++) /* generate numbers from new stream */ printf("%d\n", isprng(newgen2[1])); #else if(nsp != 4) /* check if spawn_sprng returned correct value */ { result = NO; printf("FAILED: Generator was unable to spawn\n"); } correct = YES; for(i=0; i<50; i++) /* check new stream */ { int irn; scanf("%d\n", &tempi); irn = isprng(newgen2[1]); if(tempi != irn) { printf("%d. %x %x\n", i, tempi, irn); result = correct = NO; } } if(correct == NO) printf("FAILED: Generator does not reproduce correct stream after spawning\n\tThis is probably an error in spawning the generators\n"); else report("PASSED: Generator spawns correctly\n"); #endif /* _____________________ Pack and unpack generator ______________________ */ #ifdef CREATE_DATA for(i=0; i<50; i++) /* generate from original stream */ printf("%d\n", isprng(newgen2[1])); spawn_sprng(newgen2[1],1,&gen5); /* spawn from original stream */ for(i=0; i<50; i++) printf("%d\n", isprng(gen5[0])); #else size = pack_sprng(newgen2[1], &s); /* pack the original stream */ if(size == 0) /* check if pack_sprng succeeded */ { result = NO; printf("FAILED: Generator was unable to pack\n"); } gen4 = unpack_sprng(s); /* unpack generator */ correct = YES; for(i=0; i<50; i++) /* check if unpacked stream = original stream*/ { scanf("%d\n", &tempi); if(tempi != isprng(gen4)) result = correct = NO; } if(correct == NO) printf("FAILED: Generator does not reproduce correct stream after packing and unpacking\n\tThis is probably an error in packing/unpacking the generators\n"); else report("PASSED: Generator packs and unpacks stream correctly\n"); correct = YES; spawn_sprng(gen4,1,&gen5); /* spawn from unpacked stream */ for(i=0; i<50; i++) /* check if spawned stream is correct */ { scanf("%d\n", &tempi); if(tempi != isprng(gen5[0])) result = correct = NO; } if(correct == NO) printf("FAILED: Generator does not spawn correct stream after packing and unpacking\n\tThis is probably an error in packing/unpacking the generators\n"); else report("PASSED: Generator packs and unpacks spawning information correctly\n"); #endif /* _______________ Free generators ___________________ */ #ifndef CREATE_DATA report("Checking free_sprng for integer generator ...\n"); nsp = free_sprng(gen1); nsp = free_sprng(gen2); nsp = free_sprng(gen3); if(nsp != 6) /* check if free rng returns # of available generators */ { result = NO; printf("FAILED: Free returns %d instead of %d\n", nsp,6); } nsp = free_sprng(gen4); nsp = free_sprng(gen5[0]); nsp = free_sprng(newgen1[0]); nsp = free_sprng(newgen1[1]); nsp = free_sprng(newgen2[0]); nsp = free_sprng(newgen2[1]); if(nsp != 0) { result = NO; printf("FAILED: Free returns %d instead of %d\n", nsp,0); } #endif #ifndef CREATE_DATA report("\n... Completed checking generator \n\n"); #endif return result; } /* Check if generator meets specifications in handling errors */ int check_errors() { int *gen1, **gen2, i; int tempi, correct, result = YES; int seed, nsp, size; char s[MAX_PACKED_LENGTH]; seed = 985456376; /* ___________ ngens incorrect in init_sprng _____________ */ #ifdef CREATE_DATA gen1 = init_sprng(0,1,seed,PARAM); /* take ngens = 1 */ for(i=0; i<50; i++) printf("%d\n", isprng(gen1)); #else correct = YES; fprintf(stderr,"Expect SPRNG WARNING: ngens <= 0.\n"); gen1 = init_sprng(0,0,seed,PARAM); for(i=0; i<50; i++) /* ngens should be reset to 1 */ { scanf("%d\n", &tempi); if(tempi != isprng(gen1)) result = correct = NO; } if(correct == NO) printf("FAILED: Generator does not produce expected stream when ngens is 0 during initialization.\n"); else report("PASSED: Generator produces expected stream when ngens is 0 during initialization.\n"); nsp = free_sprng(gen1); /* check if only one stream had been produced */ if(nsp != 0) { result = NO; printf("FAILED: Generator produces %d streams instead of 1 when ngens is 0 during initialization.\n",nsp+1); } else report("PASSED: Generator produces the correct number of streams when ngens is 0 during initialization.\n"); #endif /* _______________ invalid range for gennum _______________ */ #ifndef CREATE_DATA correct = YES; fprintf(stderr,"Expect SPRNG ERROR: gennum not in range\n"); gen1 = init_sprng(-1,1,seed,PARAM); /* negative gennum */ if(gen1 != NULL) { free_sprng(gen1); result = correct = NO; } fprintf(stderr,"Expect SPRNG ERROR: gennum not in range\n"); gen1 = init_sprng(2,1,seed,PARAM); /* gennum >= ngens */ if(gen1 != NULL) { free_sprng(gen1); result = correct = NO; } if(correct == NO) printf("FAILED: Generator does not return NULL when gennum is incorrect during initialization.\n"); else report("PASSED: Generator returns NULL when gennum is incorrect during initialization.\n"); #endif /* _______________ Invalid parameter ______________________________ */ #ifdef CREATE_DATA gen1 = init_sprng(0,1,seed,SPRNG_DEFAULT); /* use default parameter */ for(i=0; i<50; i++) printf("%d\n", isprng(gen1)); #else correct = YES; fprintf(stderr,"Expect SPRNG WARNING: Invalid parameter\n"); gen1 = init_sprng(0,1,seed,1<<30); for(i=0; i<50; i++) /* check if default parameter is used ... */ { /* ... when an invalid parameter is passed. */ scanf("%d\n", &tempi); if(tempi != isprng(gen1)) result = correct = NO; } #endif /* _____________________ Check spawn with invalid ngens _________________ */ #ifdef CREATE_DATA spawn_sprng(gen1,1,&gen2); /* spawn one generator */ for(i=0; i<50; i++) printf("%d\n", isprng(gen2[0])); #else report("Checking spawn with incorrect nspawned\n"); fprintf(stderr,"Expect SPRNG WARNING: nspawned <= 0.\n"); nsp = spawn_sprng(gen1,0,&gen2); free_sprng(gen1); if(nsp != 1) /* check if one generator was spawned */ { result = NO; printf("FAILED: Spawn returned %d streams instead of 1 when nspawned was greater than permitted.\n", nsp); } for(i=0; i<50; i++) /* check spawned stream */ { scanf("%d\n", &tempi); if(tempi != isprng(gen2[0])) result = correct = NO; } free_sprng(gen2[0]); if(correct == NO) printf("FAILED: Generator does not spawn correct stream when nspawned was 0.\n"); else report("PASSED: Generator spawns correctly when nspawned was 0.\n"); #endif /* ____________________ Unpack invalid string _____________________ */ #ifndef CREATE_DATA memset(s,0,MAX_PACKED_LENGTH); /* set string to 0's */ fprintf(stderr,"Expect SPRNG ERROR: packed string invalid\n"); gen1 = unpack_sprng(s); if(gen1 != NULL) /* NULL should be returned for invalid string */ { result = NO; printf("FAILED: Generator unpacks invalid string\n"); } else report("PASSED: Generator detected invalid string while unpacking\n"); #endif return result; } #ifdef USE_MPI #ifdef __STDC__ int check_mpi_seed(unsigned int seed) #else int check_mpi_seed(seed) unsigned int seed; #endif { int nprocs, myid, result = YES, i, tag=0; MPI_Status status; unsigned int temp; MPI_Comm_rank(MPI_COMM_WORLD, &myid); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); if(myid != 0) MPI_Send(&seed, 1, MPI_UNSIGNED, 0, tag, MPI_COMM_WORLD); else for(i=1; i 'check_gen_ptr.c' #include #include #include /*#define USE_MPI Uncomment to test with MPI */ #ifdef SPRNG_MPI #include #endif #define CHECK_POINTERS #include "sprng.h" #ifdef VERBOSE #define report printf #else #define report ignore #endif #define PARAM SPRNG_DEFAULT #define YES 1 #define NO 0 #define diff(a,b) (((a)>(b))?((a)-(b)):((b)-(a))) #ifdef __STDC__ void ignore(char *s, ...) #else void ignore(s) char *s; #endif { } int check_gen() /* Check generator with correct parameters */ { int *gen1, *gen2, *gen3, *gen4, **gen5, **newgen1, **newgen2, i, size; char *s; int tempi, correct, result = YES; int ngens, seed, nsp; float tempf1, tempf2; double tempd1, tempd2; ngens = 3; seed = 985456376; gen1 = init_sprng(0,ngens,seed,PARAM); /* initiallize generators */ gen2 = init_sprng(1,ngens,seed,PARAM); gen3 = init_sprng(2,ngens,seed,PARAM); /* ____________________ Check arithmetic ___________________________ */ correct = YES; for(i=0; i<500; i++) /* check integer arithmetic */ { scanf("%d\n", &tempi); if(tempi != isprng(gen1)) result = correct = NO; } if(correct == NO) printf("FAILED: Integer generator does not reproduce correct stream.\n\tArithmetic on this machine may not be compatible with this generator.\n"); else report("PASSED: Integer generator passed the reproducibility test\n"); correct = YES; for(i=0; i<500; i++) /* check float arithmetic */ { tempf1 = get_rn_flt(gen1); scanf("%f\n", &tempf2); if(diff(tempf1,tempf2) > 1.0e-6) result = correct = NO; } if(correct == NO) printf("FAILED: Float generator does not reproduce correct stream\n\tArithmetic on this machine may not be compatible with this generator.\n"); else report("PASSED: Float generator passed the reproducibility test\n"); correct = YES; for(i=0; i<500; i++) /* check double precision arithmetic */ { scanf("%lf\n", &tempd1); tempd2 = sprng(gen1); if(diff(tempd1,tempd2)>1.0e-14) result = correct = NO; } if(correct == NO) printf("FAILED: Double generator does not reproduce correct stream.\n\tArithmetic on this machine may not be compatible with this generator.\n"); else report("PASSED: Double generator passed the reproducibility test.\n"); /* ____________________ Check spawning ___________________ */ nsp = 0; nsp += spawn_sprng(gen2,2,&newgen1); /* spawn new generators */ nsp += spawn_sprng(newgen1[1],2,&newgen2); if(nsp != 4) /* check if spawn_sprng returned correct value */ { result = NO; printf("FAILED: Generator was unable to spawn\n"); } correct = YES; for(i=0; i<50; i++) /* check new stream */ { scanf("%d\n", &tempi); if(tempi != isprng(newgen2[1])) result = correct = NO; } if(correct == NO) printf("FAILED: Generator does not reproduce correct stream after spawning\n\tThis is probably an error in spawning the generators\n"); else report("PASSED: Generator spawns correctly\n"); /* _____________________ Pack and unpack generator ______________________ */ size = pack_sprng(newgen2[1], &s); /* pack the original stream */ if(size == 0) /* check if pack_sprng succeeded */ { result = NO; printf("FAILED: Generator was unable to pack\n"); } gen4 = unpack_sprng(s); /* unpack generator */ correct = YES; for(i=0; i<50; i++) /* check if unpacked stream = original stream*/ { scanf("%d\n", &tempi); if(tempi != isprng(gen4)) result = correct = NO; } if(correct == NO) printf("FAILED: Generator does not reproduce correct stream after packing and unpacking\n\tThis is probably an error in packing/unpacking the generators\n"); else report("PASSED: Generator packs and unpacks stream correctly\n"); correct = YES; spawn_sprng(gen4,1,&gen5); /* spawn from unpacked stream */ for(i=0; i<50; i++) /* check if spawned stream is correct */ { scanf("%d\n", &tempi); if(tempi != isprng(gen5[0])) result = correct = NO; } if(correct == NO) printf("FAILED: Generator does not spawn correct stream after packing and unpacking\n\tThis is probably an error in packing/unpacking the generators\n"); else report("PASSED: Generator packs and unpacks spawning information correctly\n"); /* _______________ Free generators ___________________ */ report("Checking free_sprng for integer generator ...\n"); nsp = free_sprng(gen1); nsp = free_sprng(gen2); nsp = free_sprng(gen3); if(nsp != 6) /* check if free rng returns # of available generators */ { result = NO; printf("FAILED: Free returns %d instead of %d\n", nsp,6); } nsp = free_sprng(gen4); nsp = free_sprng(gen5[0]); nsp = free_sprng(newgen1[0]); nsp = free_sprng(newgen1[1]); nsp = free_sprng(newgen2[0]); nsp = free_sprng(newgen2[1]); if(nsp != 0) { result = NO; printf("FAILED: Free returns %d instead of %d\n", nsp,0); } report("\n... Completed checking generator \n\n"); return result; } /* Check if generator meets specifications in handling errors */ int check_errors() { int *gen1, **gen2, i; int tempi, correct, result = YES; int seed, nsp, size; char s[MAX_PACKED_LENGTH], *s2; double tempd; seed = 985456376; /* ___________ ngens incorrect in init_sprng _____________ */ correct = YES; fprintf(stderr,"Expect SPRNG WARNING: ngens <= 0.\n"); gen1 = init_sprng(0,0,seed,PARAM); for(i=0; i<50; i++) /* ngens should be reset to 1 */ { scanf("%d\n", &tempi); if(tempi != isprng(gen1)) result = correct = NO; } if(correct == NO) printf("FAILED: Generator does not produce expected stream when ngens is 0 during initialization.\n"); else report("PASSED: Generator produces expected stream when ngens is 0 during initialization.\n"); nsp = free_sprng(gen1); /* check if only one stream had been produced */ if(nsp != 0) { result = NO; printf("FAILED: Generator produces %d streams instead of 1 when ngens is 0 during initialization.\n",nsp+1); } else report("PASSED: Generator produces the correct number of streams when ngens is 0 during initialization.\n"); /* _______________ invalid range for gennum _______________ */ correct = YES; fprintf(stderr,"Expect SPRNG ERROR: gennum not in range\n"); gen1 = init_sprng(-1,1,seed,PARAM); /* negative gennum */ if(gen1 != NULL) { free_sprng(gen1); result = correct = NO; } fprintf(stderr,"Expect SPRNG ERROR: gennum not in range\n"); gen1 = init_sprng(2,1,seed,PARAM); /* gennum >= ngens */ if(gen1 != NULL) { free_sprng(gen1); result = correct = NO; } if(correct == NO) printf("FAILED: Generator does not return NULL when gennum is incorrect during initialization.\n"); else report("PASSED: Generator returns NULL when gennum is incorrect during initialization.\n"); /* _______________ Invalid parameter ______________________________ */ correct = YES; fprintf(stderr,"Expect SPRNG WARNING: Invalid parameter\n"); gen1 = init_sprng(0,1,seed,1<<30); for(i=0; i<50; i++) /* check if default parameter is used ... */ { /* ... when an invalid parameter is passed. */ scanf("%d\n", &tempi); if(tempi != isprng(gen1)) result = correct = NO; } /* _____________________ Check spawn with invalid ngens _________________ */ report("Checking spawn with incorrect nspawned\n"); fprintf(stderr,"Expect SPRNG WARNING: nspawned <= 0.\n"); nsp = spawn_sprng(gen1,0,&gen2); free_sprng(gen1); if(nsp != 1) /* check if one generator was spawned */ { result = NO; printf("FAILED: Spawn returned %d streams instead of 1 when nspawned was 0.\n", nsp); } for(i=0; i<50; i++) /* check spawned stream */ { scanf("%d\n", &tempi); if(tempi != isprng(gen2[0])) result = correct = NO; } free_sprng(gen2[0]); if(correct == NO) printf("FAILED: Generator does not spawn correct stream when nspawned was 0.\n"); else report("PASSED: Generator spawns correctly when nspawned was 0.\n"); /* ______________________ Try using freed stream _______________________ */ if(isprng(gen2[0]) != -1) { result = NO; printf("FAILED: isprng accepts freed stream\n"); } else report("PASSED: isprng detects freed stream\n"); /* _______________________ Unpack invalid string ________________________ */ memset(s,0,MAX_PACKED_LENGTH); /* set string to 0's */ fprintf(stderr,"Expect SPRNG ERROR: packed string invalid\n"); gen1 = unpack_sprng(s); if(gen1 != NULL) /* NULL should be returned for invalid string */ { result = NO; printf("FAILED: Generator unpacks invalid string\n"); } else report("PASSED: Generator detected invalid string while unpacking\n"); /* ________________________ Invalid ID's _________________________________ */ report("Checking handling of invalid ID's\n"); fprintf(stderr,"Expect SPRNG ERROR: Invalid stream ID.\n"); tempd = sprng(&tempi); if(tempd != -1.0) { result = NO; fprintf(stderr,"FAILED: sprng accepts invalid stream ID\n"); } else report("PASSED: sprng handles invalid stream ID correctly\n"); fprintf(stderr,"Expect SPRNG ERROR: Invalid stream ID.\n"); tempd = sprng(NULL); if(tempd != -1.0) { result = NO; fprintf(stderr,"FAILED: sprng accepts NULL stream ID\n"); } else report("PASSED: sprng handles NULL stream ID correctly\n"); fprintf(stderr,"Expect SPRNG ERROR: Invalid stream ID.\n"); tempi = isprng(&tempi); if(tempi != -1) { result = NO; fprintf(stderr,"FAILED: isprng accepts invalid stream ID\n"); } else report("PASSED: isprng handles invalid stream ID correctly\n"); fprintf(stderr,"Expect SPRNG ERROR: Invalid stream ID.\n"); tempi = pack_sprng(&tempi,&s2); if(tempi != 0) { result = NO; fprintf(stderr,"FAILED: pack accepts invalid stream ID\n"); } else report("PASSED: pack handles invalid stream ID correctly\n"); fprintf(stderr,"Expect SPRNG ERROR: Invalid stream ID.\n"); tempi = free_sprng(&tempi); if(tempi != -1) { result = NO; fprintf(stderr,"FAILED: free_sprng accepts invalid stream ID\n"); } else report("PASSED: free_sprng handles invalid stream ID correctly\n"); fprintf(stderr,"Expect SPRNG ERROR: Invalid stream ID.\n"); tempi = spawn_sprng(&tempi,1,&gen2); if(tempi != 0) { result = NO; fprintf(stderr,"FAILED: spawn_sprng accepts invalid stream ID\n"); } else report("PASSED: spawn_sprng handles invalid stream ID correctly\n"); fprintf(stderr,"Expect SPRNG ERROR: Invalid stream ID.\n"); tempi = print_sprng(&tempi); if(tempi != 0) { result = NO; fprintf(stderr,"FAILED: print_sprng accepts invalid stream ID\n"); } else report("PASSED: print_sprng handles invalid stream ID correctly\n"); return result; } #ifdef USE_MPI #ifdef __STDC__ int check_mpi_seed(unsigned int seed) #else int check_mpi_seed(seed) unsigned int seed; #endif { int nprocs, myid, result = YES, i, tag=0; MPI_Status status; unsigned int temp; MPI_Comm_rank(MPI_COMM_WORLD, &myid); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); if(myid != 0) MPI_Send(&seed, 1, MPI_UNSIGNED, 0, tag, MPI_COMM_WORLD); else for(i=1; i 'check_gen_simple.c' #include #include #include /*#define USE_MPI Uncomment to test with MPI. */ #ifdef USE_MPI #include #endif #define SIMPLE_SPRNG #include "sprng.h" #ifdef VERBOSE #define report printf #else #define report ignore #endif #define PARAM SPRNG_DEFAULT #define YES 1 #define NO 0 #ifdef __STDC__ void ignore(char *s, ...) #else void ignore(s) char *s; #endif { } int check_gen() /* Check generator with correct parameters */ { int *gen, i, size, seed; char *s; int tempi, correct, result = YES; const unsigned int fltmult = 1<<20, dblmult = 1<<30; double tempd; seed = 985456376; gen = init_sprng(seed,PARAM); /* initialize generator */ if(gen == NULL) { result = NO; printf("FAILED: SPRNG was unable to initialize the generator\n"); } /* ____________________ Check default generator ________________________ */ correct = YES; for(i=0; i<200; i++) /* check integer generator */ { scanf("%d\n", &tempi); if(tempi != isprng()) result = correct = NO; } if(correct == NO) printf("FAILED: Integer generator does not reproduce correct stream.\n\tArithmetic on this machine may not be compatible with this generator.\n"); else report("PASSED: Integer generator passed the reproducibility test\n"); correct = YES; for(i=0; i<50; i++) /* check float generator */ { scanf("%d\n", &tempi); #ifdef USE_MPI tempd = (double) get_rn_flt_simple_mpi(); #else tempd = (double) get_rn_flt_simple(); #endif /* printf("%d. %d %f\n", i, tempi, tempd);*/ if(abs((tempi>>11) - (int) (tempd*fltmult)) > 1 ) { printf("%d. %d %d\n", i, tempi>>11, (int)(tempd*fltmult)); result = correct = NO; } } if(correct == NO) printf("FAILED: Float generator does not reproduce correct stream.\n\tArithmetic on this machine may not be compatible with this generator.\n"); else report("PASSED: Float generator passed the reproducibility test\n"); correct = YES; for(i=0; i<50; i++) /* check double precision generator */ { scanf("%d", &tempi); tempd = sprng(); if(abs((tempi>>1) - (int) (tempd*dblmult)) > 1 ) { result = correct = NO; } } if(correct == NO) printf("FAILED: Double generator does not reproduce correct stream.\n\tArithmetic on this machine may not be compatible with this generator.\n"); else report("PASSED: Double generator passed the reproducibility test\n"); size = pack_sprng(&s); /* check packing */ if(size == 0) { result = NO; printf("FAILED: SPRNG was unable to pack the generator\n"); } for(i=0; i<100; i++) /* default and packed generators now differ */ isprng(); gen = unpack_sprng(s); /* check unpacking */ if(gen == NULL) { result = NO; printf("FAILED: SPRNG was unable to unpack the generator\n"); } correct = YES; for(i=0; i<100; i++) /* check unpacked generator */ { scanf("%d\n", &tempi); if(tempi != isprng()) result = correct = NO; } if(correct == NO) printf("FAILED: Generator does not reproduce correct stream after packing.\n\tProbably error in packing/unpacking\n"); else report("PASSED: Generator packs and unpacks correctly.\n"); return result; } /* Check if generator meets specifications in handling errors */ int check_errors() { int *gen1, i, size; int tempi, correct, result = YES; char s[MAX_PACKED_LENGTH]; /* ____________________ Unpack invalid string _____________________ */ #ifndef CREATE_DATA memset(s,0,MAX_PACKED_LENGTH); /* set string to 0's */ fprintf(stderr,"Expect SPRNG ERROR: packed string invalid\n"); gen1 = unpack_sprng(s); if(gen1 != NULL) /* NULL should be returned for invalid string */ printf("FAILED: Generator unpacks invalid string\n"); else report("PASSED: Generator detected invalid string while unpacking\n"); #endif correct = YES; for(i=0; i<100; i++) /* check packing/unpacking */ { scanf("%d\n", &tempi); if(tempi != isprng()) result = correct = NO; } if(correct == NO) printf("FAILED: Generator does not maintain original stream when unpacked stream is invalid.\n"); else report("PASSED: Generator maintains original stream when unpacked stream is invalid.\n"); return result; } #ifdef USE_MPI #ifdef __STDC__ int check_mpi_seed(unsigned int seed) #else int check_mpi_seed(seed) unsigned int seed; #endif { int nprocs, myid, result = YES, i, tag=0; MPI_Status status; unsigned int temp; MPI_Comm_rank(MPI_COMM_WORLD, &myid); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); if(myid != 0) MPI_Send(&seed, 1, MPI_UNSIGNED, 0, tag, MPI_COMM_WORLD); else for(i=1; i 'check_genf.F' #define YES 1 #define NO 0 #define NULL 0 #define PARAM 0 program test_generator implicit none #include "sprng_f.h" integer check_gen integer check_errors integer result, temp integer seed1, seed2 result = YES C -- Checking make_sprng_seed ... seed1 = make_sprng_seed() seed2 = make_sprng_seed() if( seed1 .eq. seed2 ) then print *, 'ERROR: make_sprng_seed does not return unique seeds' result = NO end if C -- Check generator with correct parameters -- temp = check_gen() if(temp .ne. YES) then result = NO end if C -- Check if generator meets specifications in handling errors -- temp = check_errors() if(temp .ne. YES) then result = NO end if print *, ' ' if(result .eq. YES) then print *, 'Result: PASSED' else print *, 'Result: FAILED' end if print *, ' ' end integer function check_gen() implicit none #include "sprng_f.h" SPRNG_POINTER gen1, gen2, gen3, gen4 SPRNG_POINTER gen5(1), newgen1(2), newgen2(2) SPRNG_POINTER tmpGen integer tempi1, tempi2 real tempf1, tempf2 real*8 tempd1, tempd2 integer i, correct, result integer temp integer ngens, seed integer nsp integer size character s(MAX_PACKED_LENGTH) ngens = 3 seed = 985456376 gen1 = init_sprng(0,ngens,seed,PARAM) gen2 = init_sprng(1,ngens,seed,PARAM) gen3 = init_sprng(2,ngens,seed,PARAM) result = YES correct = YES C -- Check arithmetic for integer, float and double -- do 100 i = 1,500 tempi2 = isprng(gen1) read *, tempi1 if(tempi2 .ne. tempi1) then result = NO correct = NO end if 100 continue if(correct .eq. NO) then print *, 'ERROR: Integer generator produces incorrect stream.' C else C print *, 'PASSED: Integer generator passed reproducibility test.' endif correct = YES do 200 i = 1,500 tempf1 = fget_rn_flt(gen1) read *, tempf2 if ( abs(tempf2-tempf1) .ge. 1.e-6) then result = NO correct = NO end if 200 continue if(correct .eq. NO) then print *, 'FAILED: Float generator produces incorrect stream.' else C print *, 'PASSED: Float generator passed reproducibility test.' endif correct = YES do 300 i = 1,500 tempd1 = fget_rn_dbl(gen1) read *, tempd2 if ( abs(tempd2-tempd1) .ge. 1.e-14) then result = NO correct = NO end if 300 continue if(correct .eq. NO) then print *, 'FAILED: Double generator produces incorrect stream.' else c print *, 'PASSED: Double generator passed reproducibility test.' endif C ---- check spawning ---- nsp = 0 temp = spawn_sprng(gen2,2, newgen1(1)) nsp = nsp + temp tmpGen = newgen1(2) temp = spawn_sprng(tmpGen,2,newgen2(1)) nsp = nsp + temp if (nsp .ne. 4) then result = NO print *, 'FAILED: Generator was unable to spawn.' end if correct = YES tmpGen = newgen2(2) do 400 i = 1,50 read *, tempi2 tempi1 = isprng(tmpGen) if(tempi2 .ne. tempi1) then result = NO correct = NO end if 400 continue if(correct .eq. NO) then print *, 'FAILED: Generator incorrect after spawning.' print *, 'Probably an error in spawning the generators.' else C print *, 'PASSED: Generator spawns correctly.' endif C -- Pack and unpack generator -- size = pack_sprng(newgen2(2), s(1)) if (size .eq. 0) then result = NO print *, 'FAILED: Generator was unable to pack.' end if gen4 = unpack_sprng(s(1)) if (gen4 .eq. 0) then print *, 'Generator was unable to unpack ' end if correct = YES do 500 i = 1,50 read *, tempi2 tempi1 = isprng(gen4) if(tempi1 .ne. tempi2) then result = NO correct = NO end if 500 continue if(correct .eq. NO) then print *, 'FAILED: Incorrect after packing and unpacking.' else C print *, 'PASSED: Generator packs and unpacks correctly.' end if correct = YES temp = spawn_sprng(gen4,1,gen5(1)) do 600 i=1, 50 read *, tempi2 tempi1 = isprng(gen5(1)) if(tempi1 .ne. tempi2) then result = NO correct = NO end if 600 continue if(correct .eq. NO) then print *, 'FAILED: Generator incorrect stream after pack/unpack.' else C print *, 'PASSED: Generator packs/unpacks .' end if C -- Free generators -- nsp = free_sprng(gen1) nsp = free_sprng(gen2) nsp = free_sprng(gen3) if(nsp .ne. 6) then result = NO print *, 'FAILED: Free returns ', nsp, 'instead of 6.' end if nsp = free_sprng(gen4) nsp = free_sprng(gen5(1)) nsp = free_sprng(newgen1(1)) nsp = free_sprng(newgen1(2)) nsp = free_sprng(newgen2(1)) nsp = free_sprng(newgen2(2)) if(nsp .ne. 0) then result = NO print *, 'FAILED: Free returns ', nsp, 'instead of 0.' end if check_gen = result return end C -- Check if generator meets specifications in handling errors -- integer function check_errors() implicit none #include "sprng_f.h" SPRNG_POINTER gen1, gen2(1) integer i integer tempi integer tempi1, tempi2 integer correct, result integer seed, nsp character s(MAX_PACKED_LENGTH) result = YES seed = 985456376 correct = YES C -- checking incorrect ngens in init_sprng -- C print *, 'Expect SPRNG WARNING: ngens <= 0.' gen1 = init_sprng(0,0,seed,PARAM) do 100 i = 1,50 tempi2 = isprng(gen1) read *, tempi1 if(tempi2 .ne. tempi1) then result = NO correct = NO end if 100 continue if(correct .eq. 0) then print *, 'FAILED: Generator does not produce expected stream' print *, ' ... when ngens = 0.' else C print *, 'PASSED: Generator OK when ngens = 0.' end if C -- check if only one stream had been produced -- nsp = free_sprng(gen1) if(nsp .ne. 0) then result = 0 print *, 'FAILED: Generator produces more than 1 stream' print *, ' ... when ngens = 0.' else C print *, 'PASSED: Generator OK when ngens = 0.' endif C -- checking invalid range for gennum -- correct = YES C print *, 'Expect SPRNG ERROR: gennum not in range.' gen1 = init_sprng(-1,1,seed,PARAM) if (gen1 .ne. NULL) then tempi = free_sprng(gen1) result = NO correct = NO endif C print *, 'Expect SPRNG ERROR: gennum not in range.' gen1 = init_sprng(2,1,seed,PARAM) if (gen1 .ne. NULL) then tempi = free_sprng(gen1) result = NO correct = NO endif if(correct .eq. NO) then print *, 'FAILED: Generator wrong with wrong gennum.' else C print *, 'PASSED: Generator OK when gennum is incorrect.' endif C-- Invalid parameter-- correct = YES C print *, 'Expect SPRNG WARNING: Invalid parameter' gen1 = init_sprng(0,1,seed,2**30) do 200 i = 1,50 tempi2 = isprng(gen1) read *, tempi1 if(tempi2 .ne. tempi1) then result = NO correct = NO end if 200 continue C-- Check spawn with invalid ngens -- C print *, 'Expect SPRNG WARNING: nspawned <= 0.' nsp = spawn_sprng(gen1, 0, gen2(1)) tempi = free_sprng(gen1) if (nsp .ne. 1) then result = NO print *, 'FAILED: Spawn returned', nsp print *, ' instead of 1 when nspawned = 0.' endif C -- check spawned stream -- do 300 i = 1,50 tempi2 = isprng(gen2(1)) read *, tempi1 if(tempi2 .ne. tempi1) then result = NO correct = NO end if 300 continue tempi = free_sprng(gen2(1)) if(correct .eq. NO) then print *, 'FAILED: Incorrect when nspawned = 0.' else C print *, 'PASSED: Generator OK when nspawned = 0.' endif C -- Unpack invalid string -- do 400 i = 1, MAX_PACKED_LENGTH s(i) = '0' 400 continue C print *, 'Expect SPRNG ERROR: packed string invalid' gen1 = unpack_sprng(s) if (gen1 .ne. NULL) then result = NO print *, 'FAILED: Generator unpacks invalid string' C else C print *, 'PASSED: Detected invalid string while unpacking' endif check_errors = result return end SHAR_EOF fi # end of overwriting check if test -f 'check_genf_ptr.F' then echo shar: will not over-write existing file "'check_genf_ptr.F'" else cat << "SHAR_EOF" > 'check_genf_ptr.F' #define YES 1 #define NO 0 #define NULL 0 #define PARAM 0 #define CHECK_POINTERS program test_ptr_generator implicit none #include "sprng_f.h" integer check_gen_ptr integer check_errors_ptr integer result, temp integer seed1, seed2 result = YES C -- Checking make_sprng_seed ... seed1 = make_sprng_seed() seed2 = make_sprng_seed() if( seed1 .eq. seed2 ) then print *, 'FAILED: make_sprng_seed returns same seeds' result = NO end if C -- Check generator with correct parameters -- temp = check_gen_ptr() if(temp .ne. YES) then result = NO end if C -- Check if generator meets specifications in handling errors -- temp = check_errors_ptr() if(temp .ne. YES) then result = NO end if print *, ' ' if(result .eq. YES) then print *, 'Result: PASSED' else print *, 'Result: FAILED' end if print *, ' ' end integer function check_gen_ptr() implicit none #include "sprng_f.h" SPRNG_POINTER gen1, gen2, gen3, gen4 SPRNG_POINTER gen5(1), newgen1(2), newgen2(2) SPRNG_POINTER tmpGen integer tempi1, tempi2 real tempf1, tempf2 real*8 tempd1, tempd2 integer i, correct, result integer temp integer ngens, seed integer nsp integer size character s(MAX_PACKED_LENGTH) ngens = 3 seed = 985456376 gen1 = init_sprng(0,ngens,seed,PARAM) gen2 = init_sprng(1,ngens,seed,PARAM) gen3 = init_sprng(2,ngens,seed,PARAM) result = YES correct = YES C -- Check arithmetic for integer, float and double -- do 100 i = 1,500 tempi2 = isprng(gen1) read *, tempi1 if(tempi2 .ne. tempi1) then result = NO correct = NO end if 100 continue if(correct .eq. NO) then print *, 'FAILED: Integer generator incorrect.' else c print *, 'PASSED: Integer generator passed reproducibility test.' endif correct = YES do 200 i = 1,500 tempf1 = fget_rn_flt_ptr(gen1) read *, tempf2 if ( abs(tempf2-tempf1) .ge. 1.e-6) then result = NO correct = NO end if 200 continue if(correct .eq. NO) then print *, 'FAILED: Float generator incorrect.' else c print *, 'PASSED: Float generator passed the reproducibility test.' endif correct = YES do 300 i = 1,500 tempd1 = sprng(gen1) read *, tempd2 if ( abs(tempd2-tempd1) .ge. 1.e-14) then result = NO correct = NO end if 300 continue if(correct .eq. NO) then print *, 'FAILED: Double generator incorrect stream.' else c print *, 'PASSED: Double generator passed the reproducibility test.' endif C ---- check spawning ---- nsp = 0 temp = spawn_sprng(gen2,2, newgen1(1)) nsp = nsp + temp tmpGen = newgen1(2) temp = spawn_sprng(tmpGen,2,newgen2(1)) nsp = nsp + temp if (nsp .ne. 4) then result = NO print *, 'FAILED: Generator was unable to spawn.' end if correct = YES tmpGen = newgen2(2) do 400 i = 1,50 read *, tempi2 tempi1 = isprng(tmpGen) if(tempi2 .ne. tempi1) then result = NO correct = NO end if 400 continue if(correct .eq. NO) then print *, 'FAILED: Generator incorrect after spawning.' print *, 'Probable error in spawning the generators.' else c print *, 'PASSED: Generator spawns correctly.' endif C -- Pack and unpack generator -- size = pack_sprng(newgen2(2), s(1)) if (size .eq. 0) then result = NO print *, 'FAILED: Generator was unable to pack.' end if gen4 = unpack_sprng(s(1)) correct = YES do 500 i = 1,50 read *, tempi2 tempi1 = isprng(gen4) if(tempi1 .ne. tempi2) then result = NO correct = NO end if 500 continue if(correct .eq. NO) then print *, 'FAILED: Incorrect stream produced after pack/unpack.' print *, 'Probable error in packing/unpacking the generators.' else c print *, 'PASSED: Generator packs and unpacks correctly.' end if correct = YES temp = spawn_sprng(gen4,1,gen5(1)) do 600 i=1, 50 read *, tempi2 tempi1 = isprng(gen5(1)) if(tempi1 .ne. tempi2) then result = NO correct = NO end if 600 continue if(correct .eq. NO) then print *, 'FAILED: Generator incorrect stream after pack/unpack.' print *, 'Probably an error in packing/unpacking the generators.' else c print *, 'PASSED: Generator packs/unpacks spawning info.' end if C -- Free generators -- nsp = free_sprng(gen1) nsp = free_sprng(gen2) nsp = free_sprng(gen3) if(nsp .ne. 6) then result = NO print *, 'FAILED: Free returns ', nsp, 'instead of 6.' end if nsp = free_sprng(gen4) nsp = free_sprng(gen5(1)) nsp = free_sprng(newgen1(1)) nsp = free_sprng(newgen1(2)) nsp = free_sprng(newgen2(1)) nsp = free_sprng(newgen2(2)) if(nsp .ne. 0) then result = NO print *, 'FAILED: Free returns ', nsp, 'instead of 0.' end if check_gen_ptr = result return end C -- Check if generator meets specifications in handling errors -- integer function check_errors_ptr() implicit none #include "sprng_f.h" SPRNG_POINTER gen1, gen2(1), genNULL integer i, tempi, tempi1, tempi2 real*8 tempd1 integer correct, result, seed, nsp character s(MAX_PACKED_LENGTH), s2(MAX_PACKED_LENGTH) result = YES seed = 985456376 correct = YES C -- checking incorrect nges in init_sprng -- c print *, 'Expect SPRNG WARNING: ngens <= 0.' gen1 = init_sprng(0,0,seed,PARAM) do 100 i = 1,50 tempi2 = isprng(gen1) read *, tempi1 if(tempi2 .ne. tempi1) then result = NO correct = NO end if 100 continue if(correct .eq. 0) then print *, 'FAILED: Generator does not produce expected stream' print *, ' ... when ngens <= 0.' else c print *, 'PASSED: Generator OK when ngens <= 0.' end if C -- check if only one stream had been produced -- nsp = free_sprng(gen1) if(nsp .ne. 0) then result = 0 print *, 'FAILED: Generator produces more than 1 stream' print *, ' ... when ngens = 0.' else c print *, 'PASSED: Generator OK when ngens = 0.' endif C -- checking invalid range for gennum -- correct = YES c print *, 'Expect SPRNG ERROR: gennum not in range.' gen1 = init_sprng(-1,1,seed,PARAM) if (gen1 .ne. NULL) then tempi = free_sprng(gen1) result = NO correct = NO endif c print *, 'Expect SPRNG ERROR: gennum not in range.' gen1 = init_sprng(2,1,seed,PARAM) if (gen1 .ne. NULL) then tempi = free_sprng(gen1) result = NO correct = NO endif if(correct .eq. NO) then print *, 'FAILED: Generator wrong with wrong gennum.' else c print *, 'PASSED: Generator OK with worng gennum.' endif C-- Invalid parameter-- correct = YES c print *, 'Expect SPRNG WARNING: Invalid parameter' gen1 = init_sprng(0,1,seed,2**30) do 200 i = 1,50 tempi2 = isprng(gen1) read *, tempi1 if(tempi2 .ne. tempi1) then result = NO correct = NO end if 200 continue C-- Check spawn with invalid nspawned -- c print *, 'Expect SPRNG WARNING: nspawned <= 0.' nsp = spawn_sprng(gen1, 0, gen2(1)) tempi = free_sprng(gen1) if (nsp .ne. 1) then result = NO print *, 'FAILED: Spawn returned', nsp, ' instead of 1' print *, ' ... when nspawned was 0.' endif C -- check spawned stream -- do 300 i = 1,50 tempi2 = isprng(gen2(1)) read *, tempi1 if(tempi2 .ne. tempi1) then result = NO correct = NO end if 300 continue tempi = free_sprng(gen2(1)) if(correct .eq. NO) then print *, 'FAILED: Generator wrong when nspawned = 0.' else c print *, 'PASSED: Generator OK when nspawned = 0.' endif C -- Try using freed stream -- if (isprng(gen2(1)) .ne. -1) then result = NO print *, 'FAILED: isprng accepts freed stream.' else c print *, 'PASSED: isprng detects freed stream.' endif C -- Unpack invalid string -- do 400 i = 1, MAX_PACKED_LENGTH s(i) = '0' 400 continue c memset(s,0,MAX_PACKED_LENGTH) c print *, 'Expect SPRNG ERROR: packed string invalid' gen1 = unpack_sprng(s) if (gen1 .ne. NULL) then result = NO print *, 'FAILED: Generator unpacks invalid string' else c print *, 'PASSED: Generator detected invalid string while unpacking' endif C -- Invalid ID s -- c print *, 'Expect SPRNG ERROR: Invalid stream ID.' tempd1 = sprng(tempi1) if (tempd1 .ne. -1.0) then result = NO print *, 'FAILED: sprng accepts invalid stream ID.' else c print *, 'PASSED: sprng handles invalid stream ID correctly.' endif c print *, 'Expect SPRNG ERROR: Invalid stream ID.' genNULL = 0 tempd1 = sprng(genNULL) if (tempd1 .ne. -1.0) then result = NO print *, 'FAILED: sprng accepts NULL stream ID.' else c print *, 'PASSED: sprng handles NULL stream ID correctly.' endif c print *, 'Expect SPRNG ERROR: Invalid stream ID.' tempd1 = isprng(tempi1) if (tempd1 .ne. -1) then result = NO print *, 'FAILED: isprng accepts invalid stream ID.' else c print *, 'PASSED: isprng handles invalid stream ID correctly.' endif c print *, 'Expect SPRNG ERROR: Invalid stream ID.' tempi1 = pack_sprng(tempi1, s2(1)) if (tempi1 .ne. 0) then result = NO print *, 'FAILED: pack() accepts invalid stream ID.' else c print *, 'PASSED: pack() handles invalid stream ID correctly.' endif c print *, 'Expect SPRNG ERROR: Invalid stream ID.' tempi1 = free_sprng(tempi1) if (tempi1 .ne. -1) then result = NO print *, 'FAILED: free_sprng accepts invalid stream ID.' else c print *, 'PASSED: free_sprng handles invalid stream ID correctly.' endif c print *, 'Expect SPRNG ERROR: Invalid stream ID.' tempi1 = spawn_sprng(tempi1, 1, gen2) if (tempi1 .ne. 0) then result = NO print *, 'FAILED: spawn_sprng accepts invalid stream ID.' else c print *, 'PASSED: spawn_sprng handles invalid stream ID correctly.' endif c print *, 'Expect SPRNG ERROR: Invalid stream ID.' tempi1 = print_sprng(tempi1) if (tempi1 .ne. 0) then result = NO print *, 'FAILED: print_sprng accepts invalid stream ID.' else c print *, 'PASSED: print_sprng handles invalid stream ID correctly.' endif check_errors_ptr = result return end SHAR_EOF fi # end of overwriting check if test -f 'check_genf_simple.F' then echo shar: will not over-write existing file "'check_genf_simple.F'" else cat << "SHAR_EOF" > 'check_genf_simple.F' #define YES 1 #define NO 0 #define NULL 0 #define PARAM 0 #define SIMPLE_SPRNG program test_simple_generator implicit none #include "sprng_f.h" integer check_simple_gen integer check_simple_errors integer result, temp integer seed1, seed2 result = YES seed1 = make_sprng_seed() seed2 = make_sprng_seed() if( seed1 .eq. seed2 ) then print *, 'ERROR: make_sprng_seed does not return unique seeds' result = NO end if temp = check_simple_gen() if(temp .ne. YES) then result = NO end if temp = check_simple_errors() if(temp .ne. YES) then result = NO end if print *, ' ' if(result .eq. YES) then print *, 'Result: PASSED' else print *, 'Result: FAILED' end if print *, ' ' end integer function check_simple_gen() implicit none #include "sprng_f.h" SPRNG_POINTER gen integer tempi1, tempi2, seed, size, dblmult real tempf1 real*8 tempd1 integer i, correct, result, fltmult character s(MAX_PACKED_LENGTH) correct = YES result = YES seed = 985456376 fltmult = 2**20 dblmult = 2**30 gen = init_sprng(seed,PARAM) if (gen .eq. NULL) then result = NO print *, ' FAILED: SPRNG unable to initialize the generator.' endif C -- check default generator do 100 i = 1,200 tempi2 = isprng() read *, tempi1 if(tempi2 .ne. tempi1) then result = NO correct = NO end if 100 continue if(correct .eq. NO) then print *, 'ERROR: Integer generator incorrect.' else c print *, 'PASSED: Integer generator passed reproducibility test.' endif correct = YES do 200 i = 1,50 tempf1 = fget_rn_flt_sim() tempd1 = tempf1 read *, tempi1 tempi1 = tempi1 / (2**11) tempi2 = tempd1 * fltmult if ( abs(tempi1-tempi2) .gt. 1) then result = NO correct = NO end if 200 continue if(correct .eq. NO) then print *, 'ERROR: Float generator incorrect.' else c print *, 'PASSED: Float generator passed reproducibility test.' endif correct = YES do 300 i = 1,50 tempd1 = sprng() read *, tempi2 tempi1 = tempd1 * dblmult if ( abs(tempi2/2-tempi1) .gt. 1) then result = NO correct = NO end if 300 continue if(correct .eq. NO) then print *, 'ERROR: Double generator incorrect stream.' else c print *, 'PASSED: Double generator passed reproducibility test.' endif C -- Pack and unpack generator -- size = pack_sprng(s(1)) if (size .eq. 0) then result = NO print *, 'FAILED: SPRNG was unable to pack the generator.' end if do 400 i = 1,100 tempi1 = isprng() 400 continue gen = unpack_sprng(s(1)) if (gen .eq. NULL) then result = NO print *, 'FAILED: SPRNG was unable to unpack the generator.' endif correct = YES do 500 i = 1,100 read *, tempi2 tempi1 = isprng() if(tempi1 .ne. tempi2) then result = NO correct = NO end if 500 continue if(correct .eq. NO) then print *, 'ERROR: Incorrect stream produced after pack/unpack.' else c print *, 'PASSED: Generator packs and unpacks correctly.' end if check_simple_gen = result return end integer function check_simple_errors() C -- Check if generator meets specifications in handling errors -- implicit none #include "sprng_f.h" SPRNG_POINTER gen1 integer i, tempi1, tempi2, correct, result, seed character s(MAX_PACKED_LENGTH) result = YES seed = 985456376 correct = YES do 100 i = 1, MAX_PACKED_LENGTH s(i) = '0' 100 continue c print *, ' Expect SPRNG ERROR: packed string invalid.' gen1 = unpack_sprng(s(1)) if (gen1 .ne. NULL) then print *, 'FAILED: Generator unpacks invalid string.' else c print *, 'PASSED: Generator detected invalid string while unpacking.' endif correct = YES do 200 i = 1,50 tempi2 = isprng() read *, tempi1 if(tempi2 .ne. tempi1) then result = NO correct = NO end if 200 continue if(correct .eq. 0) then print *, 'FAILED: Original stream not maintained ' print *, ' ... when unpacked stream is invalid.' else c print *, 'PASSED: Generator OK with invalid unpacked stream.' end if check_simple_errors = result return end SHAR_EOF fi # end of overwriting check if test -f 'checkid.c' then echo shar: will not over-write existing file "'checkid.c'" else cat << "SHAR_EOF" > 'checkid.c' #include #include #include "memory.h" #define CHECK_MASK 0x1c /* Assumes exactly last two bits are 0 ... */ /* ... If not, change checklist dimension */ typedef struct checkidstruct { int *ID; struct checkidstruct *next; } Checklisttype; Checklisttype checklist[(CHECK_MASK>>2)+1] = {{NULL,NULL},{NULL,NULL},{NULL,NULL},{NULL,NULL}}; #ifdef __STDC__ int *checkID( int *ptr) #else int *checkID(ptr) int *ptr; #endif { int bucket; Checklisttype *next; if(ptr == NULL) return NULL; bucket = (((long) ptr)&CHECK_MASK)>>2; next = checklist[bucket].next; while(next != NULL) { if(next->ID == ptr) { return (int *) ptr; } else { next = next->next; } } fprintf(stderr,"ERROR: Invalid generator ID %p\n", ptr); return NULL; } #ifdef __STDC__ int *deleteID( int *ptr) #else int *deleteID(ptr) int *ptr; #endif { int bucket; Checklisttype *next, *temp; if(ptr == NULL) return NULL; bucket = (((long) ptr)&CHECK_MASK)>>2; next = &checklist[bucket]; while(next->next != NULL) if(next->next->ID == ptr) { temp = next->next; next->next = next->next->next; free(temp); return (int *) ptr; } else { next = next->next; } fprintf(stderr,"ERROR: Invalid generator ID %p\n", ptr); return NULL; } #ifdef __STDC__ int *addID( int *ptr) #else int *addID(ptr) int *ptr; #endif { int bucket; Checklisttype *next, *temp; if(ptr == NULL) return NULL; bucket = (((long) ptr)&CHECK_MASK)>>2; temp = (Checklisttype *) mymalloc(sizeof(Checklisttype)); if(temp == NULL) return NULL; temp->ID = (int *) ptr; temp->next = checklist[bucket].next; checklist[bucket].next = temp; return (int *) ptr; } SHAR_EOF fi # end of overwriting check if test ! -d 'cmrg' then mkdir 'cmrg' fi cd 'cmrg' if test -f 'Makefile' then echo shar: will not over-write existing file "'Makefile'" else cat << "SHAR_EOF" > 'Makefile' ############################################################################ # # Then typing the command below => results in the following being created # make => Fortran and C libraries for the generator, # Timing executibles. # make cmrg => Library for Combined Multiple Recursive Generator # # Object files created during the compilation process can be deleted finally # by typing # make clean ############################################################################ SHELL = /bin/sh include ../../make.CHOICES LIBDIR = ../../$(LIB_REL_DIR) SRCDIR = .. CHKDIR = ../.. include $(SRCDIR)/make.$(PLAT) all : cmrg timesprng checksprng #--------------------------------------------------------------------------- # Construct Library #--------------------------------------------------------------------------- SPRNG_COMMON_DEPEND = $(SRCDIR)/fwrap_mpi.o $(SRCDIR)/cputime.o \ $(SRCDIR)/makeseed.o $(SRCDIR)/simple_mpi.o \ $(SRCDIR)/memory.o $(SRCDIR)/communicate.o $(SRCDIR)/checkid.o $(SRCDIR)/store.o cmrg : (cd ..; $(MAKE) sprng_common) $(MAKE) $(LIBDIR)/libcmrg.a $(LIBDIR)/libcmrg.a : cmrg.o primes.o $(SPRNG_COMMON_DEPEND) $(AR) $(ARFLAGS) $(LIBDIR)/libcmrg.a cmrg.o primes.o \ $(SPRNG_COMMON_DEPEND) $(RANLIB) $(LIBDIR)/libcmrg.a cmrg.o : $(SRCDIR)/interface.h cmrg.c $(SRCDIR)/memory.h primes.h $(SRCDIR)/multiply.h $(SRCDIR)/store.h $(SRCDIR)/fwrap_.h $(CC) -c $(CFLAGS) $(FFXN) $(INLINEOPT) cmrg.c -I$(SRCDIR) primes.o : primes.h primes.c $(CC) -c $(CFLAGS) primes.c -I$(SRCDIR) #--------------------------------------------------------------------------- # Time the generator #--------------------------------------------------------------------------- timesprng : (cd ..; $(MAKE) timesprng_exec TIMESPRNG_LIB=cmrg) #--------------------------------------------------------------------------- # Check portability of generator #--------------------------------------------------------------------------- checksprng : (cd ..; $(MAKE) checksprng_exec CHECKSPRNG_LIB=cmrg) cp cmrg.data $(CHKDIR)/. #--------------------------------------------------------------------------- .F.f : @if [ -f $*.i ] ; then \ rm $*.i ;\ fi $(CPP) $*.F @if [ -f $*.i ] ; then \ mv $*.i $*.f ;\ fi #--------------------------------------------------------------------------- #--------------------------------------------------------------------------- clean : rm -f *.o *.i realclean : rm -f *.o *.f *~ *.i core a.out .SUFFIXES : .SUFFIXES : .f .F SHAR_EOF fi # end of overwriting check if test -f 'cmrg.c' then echo shar: will not over-write existing file "'cmrg.c'" else cat << "SHAR_EOF" > 'cmrg.c' /*************************************************************************/ /*************************************************************************/ /* Parallel Combined Multiple Recursive Generator */ /* */ /* Author: Ashok Srinivasan, */ /* NCSA, University of Illinois, Urbana-Champaign */ /* E-Mail: ashoks@ncsa.uiuc.edu */ /* */ /* Note: This generator combines the 64 bit LCG (lcg64) with a 32 bit */ /* multiple recursive generator. */ /* */ /* Disclaimer: NCSA expressly disclaims any and all warranties, expressed*/ /* or implied, concerning the enclosed software. The intent in sharing */ /* this software is to promote the productive interchange of ideas */ /* throughout the research community. All software is furnished on an */ /* "as is" basis. No further updates to this software should be */ /* expected. Although this may occur, no commitment exists. The authors */ /* certainly invite your comments as well as the reporting of any bugs. */ /* NCSA cannot commit that any or all bugs will be fixed. */ /*************************************************************************/ /*************************************************************************/ /* This is version 1.0, created 25 May 1998 */ #include #include #include #include #define NDEBUG #include #include "memory.h" #include "interface.h" #include "primes.h" #include "store.h" #define VERSION "00" /*** Name for Generator ***/ #define GENTYPE VERSION "Combined multiple recursive generator" int MAX_STREAMS = (146138719); /*** Maximum number of independent streams ***/ #define NPARAMS 3 /*** number of valid parameters ***/ #if LONG_MAX > 2147483647L #if LONG_MAX > 35184372088831L #if LONG_MAX >= 9223372036854775807L #define LONG_SPRNG #define LONG64 long /* 64 bit long */ #define store_long64 store_long #define store_long64array store_longarray #define load_long64 load_long #define load_long64array load_longarray #endif #endif #endif #if !defined(LONG_SPRNG) && defined(_LONG_LONG) #define LONG64 long long #define store_long64 store_longlong #define store_long64array store_longlongarray #define load_long64 load_longlong #define load_long64array load_longlongarray #endif unsigned int PARAMLIST[NPARAMS][2] = {{0x87b0b0fdU, 0x27bb2ee6U}, {0xe78b6955U,0x2c6fe96eU}, {0x31a53f85U,0x369dea0fU}}; /*** Change this to the type of generator you are implementing ***/ struct rngen { char *gentype; int stream_number; int nstreams; int init_seed; int parameter; int narrays; int *array_sizes; int **arrays; int spawn_offset; /*** declare other variables here ***/ unsigned int prime; #ifdef LONG64 /* 64 bit integer types */ unsigned LONG64 state, multiplier; unsigned LONG64 s0, s1, s2, s3, s4; #else /* No 64 bit type available, so use array of floats */ double state[3], multiplier[3];/* simulate 64 bit arithmetic */ int s0, s1, s2, s3, s4; #endif }; /*************************************************************************/ /* You should not need to look at the next few lines! */ #define INIT_SEED1 0x2bc6ffffU #define INIT_SEED0 0x8cfe166dU #define TWO_M22 2.384185791015625e-07 /* 2^(-22) */ #define TWO_P22 4194304 /* 2^(22) */ #define TWO_M20 9.5367431640625e-07 /* 2^(-20) */ #define TWO_P20 1048576 /* 2^(20) */ #define TWO_M42 2.273736754432321e-13 /* 2^(-42) */ #define TWO_M64 5.4210108624275222e-20 /* 2^(-64) */ /* */ /************************************************************************/ int NGENS=0; /* number of random streams in current process */ /* Initialize random number stream */ #ifdef __STDC__ int *init_rng( int gennum, int total_gen, int seed, int param) #else int *init_rng(gennum,total_gen,seed,param) int gennum,param,seed,total_gen; #endif { /* gives back one stream (node gennum) with updated spawning */ /* info; should be called total_gen times, with different value */ /* of gennum in [0,total_gen) each call */ struct rngen *genptr; int i; double tempdbl; if (total_gen <= 0) /* Is total_gen valid ? */ { total_gen = 1; fprintf(stderr,"WARNING - init_rng: Total_gen <= 0. Default value of 1 used for total_gen\n"); } if (gennum >= MAX_STREAMS) /* check if gen_num is valid */ fprintf(stderr,"WARNING - init_rng: gennum: %d > maximum number of independent streams: %d\n\tIndependence of streams cannot be guranteed.\n", gennum, MAX_STREAMS); if (gennum < 0 || gennum >= total_gen) /* check if gen_num is valid */ { fprintf(stderr,"ERROR - init_rng: gennum %d out of range [%d,%d).\n", gennum, 0, total_gen); return (int *) NULL; } if (param < 0 || param >= NPARAMS) /* check if parameter is valid */ { fprintf(stderr,"WARNING - init_rng: parameter not valid. Using Default parameter.\n"); param = 0; } genptr = (struct rngen *) mymalloc(1*sizeof(struct rngen)); if(genptr == NULL) /* check if memory allocated for data structure */ return NULL; /* Initiallize data structure variables */ genptr->gentype = GENTYPE; genptr->stream_number = gennum; genptr->nstreams = total_gen; genptr->init_seed = seed & 0x7fffffff; /* Only 31 LSB of seed considered */ genptr->parameter = param; genptr->spawn_offset = total_gen; /*** Change the next line depending on your generators data needs ***/ genptr->narrays = 0; /* number of arrays needed by your generator */ if(genptr->narrays > 0) { genptr->array_sizes = (int *) mymalloc(genptr->narrays*sizeof(int)); genptr->arrays = (int **) mymalloc(genptr->narrays*sizeof(int *)); if(genptr->array_sizes == NULL || genptr->arrays == NULL) return NULL; } else { genptr->array_sizes = NULL; genptr->arrays = NULL; } /*** Change the next line depending on your generators data needs ***/ /* initiallize ...array_sizes to the sizes of the arrays */ for(i=0; inarrays; i++) { genptr->arrays[i] = (int *) mymalloc(genptr->array_sizes[i]*sizeof(int)); if(genptr->arrays[i] == NULL) /* check if memory allocated for data structure */ return NULL; } /*** Add initialization statements for your data in the arrays and other variables you have defined ***/ getprime(1,&genptr->prime,gennum); #ifdef LONG64 genptr->multiplier = ((unsigned LONG64) PARAMLIST[param][1])<<32 | ((unsigned LONG64) PARAMLIST[param][0]); genptr->state = ( ((unsigned LONG64) INIT_SEED1)<<32 | INIT_SEED0) ^(((unsigned LONG64) seed<<33)|gennum); #else genptr->multiplier[0] = (double) (PARAMLIST[param][0]&0x3fffff); genptr->multiplier[1] = (double) (PARAMLIST[param][0]>>22 | (PARAMLIST[param][1]&0xfff)<<10); genptr->multiplier[2] = (double) (PARAMLIST[param][1]>>12); genptr->state[0] = (double) ((INIT_SEED0^gennum)&0x3fffff); genptr->state[1] = (double) ((INIT_SEED0^gennum)>>22 | ((INIT_SEED1 ^ (unsigned)seed<<1)&0xfff)<<10); genptr->state[2] = (double) ((INIT_SEED1 ^ (unsigned)seed<<1)>>12); #endif genptr->s0 = genptr->s1 = genptr->s2 = genptr->s3 = genptr->s4 = /*0xfffffff*/ 0x1; for(i=0; i<127*genptr->stream_number; i++) tempdbl = get_rn_dbl((int *) genptr); NGENS++; /* NGENS = # of streams */ return (int *) genptr; } #ifdef LONG64 #define advance_state(genptr) genptr->state = genptr->state*genptr->multiplier + genptr->prime; #else #define advance_state(genptr) {double t0, t1, t2, t3, st0, st1, st2;\ t0 = genptr->state[0]*genptr->multiplier[0] + genptr->prime;\ t1 = (double) (int) (t0*TWO_M22); \ st0 = t0 - TWO_P22*t1; \ assert( (int) st0 == st0); \ t1 += genptr->state[1]*genptr->multiplier[0] + \ genptr->state[0]*genptr->multiplier[1]; \ t2 = (double) (int) (t1*TWO_M22); \ st1 = t1 - TWO_P22*t2; \ assert( (int) st1 == st1); \ t2 += genptr->state[2]*genptr->multiplier[0] + \ genptr->state[1]*genptr->multiplier[1] + \ genptr->state[0]*genptr->multiplier[2];\ t3 = (double) (int) (t2*TWO_M20); \ st2 = t2 - TWO_P20*t3; \ assert( (int) st2 == st2); \ genptr->state[0] = st0; \ genptr->state[1] = st1; \ genptr->state[2] = st2;} #endif #define m1 2147483647 #define a0 107374182 #define a4 104480 #define q0 20 #define q4 20554 #define r0 7 #define r4 1727 #ifdef LONG64 #define advance_cmrg(genptr) {unsigned LONG64 p;\ advance_state(genptr);\ p = a0*genptr->s0 + a4*genptr->s4;\ p = (p>>31) + (p&0x7fffffff);\ if(p&0x80000000) p = (p+1)&0x7fffffff;\ genptr->s4=genptr->s3; genptr->s3=genptr->s2;genptr->s2=genptr->s1;genptr->s1=genptr->s0;genptr->s0=p;} #else #define advance_cmrg(genptr) {int h, p0, p4;\ advance_state(genptr);\ h=genptr->s4/q4;p4=a4*(genptr->s4-h*q4)-h*r4;\ genptr->s4=genptr->s3;genptr->s3=genptr->s2;genptr->s2=genptr->s1;genptr->s1=genptr->s0;\ h=genptr->s0/q0; p0=a0*(genptr->s0-h*q0)-h*r0;\ if(p0<0) p0+=m1; if(p4>0)p4-=m1;\ genptr->s0=p0+p4; if(genptr->s0<0) genptr->s0+=m1;} #endif /* Returns a double precision random number */ #ifdef __STDC__ double get_rn_dbl(int *igenptr) #else double get_rn_dbl(igenptr) int *igenptr; #endif { struct rngen *genptr = (struct rngen *) igenptr; #ifdef LONG64 #ifdef _LONG_LONG #define EXPO 0x3ff0000000000000ULL #define MULT_MASK 0xffffffffffffffffULL #else #define EXPO 0x3ff0000000000000UL #define MULT_MASK 0xffffffffffffffffUL #endif static double dtemp[1] = {0.0}; advance_cmrg(genptr); #if defined(CONVEX) || defined(O2K) || defined(SGI) || defined(GENERIC) *((unsigned LONG64 *) dtemp) = (((genptr->state+(genptr->s0<<32))&MULT_MASK)>>12) | EXPO; return *dtemp - (double) 1.0; #else return ((genptr->state+(genptr->s0<<32))&MULT_MASK)*TWO_M64; #endif #else /* 32 bit machine */ #define EXPO 0x3ff00000 #ifdef LittleEndian #define MSB 1 #else #define MSB 0 #endif #define LSB (1-MSB) double ans; unsigned int ist0, ist1, ist2, tempi, tempi2; static double temp[1] = {0.0}; advance_cmrg(genptr); ist0 = genptr->state[0]; ist1 = genptr->state[1]; ist2 = genptr->state[2]; tempi2 = ist2<<12 | ist1>>10; tempi = (genptr->s0+tempi2)&0xffffffff; /* add modulo 2^64 */ ist1 = (ist1&0x3ff) | (tempi&0xfff)<<10; ist2 = tempi>>12; #if defined(HP) || defined(SUN) || defined(SOLARIS) || defined(GENERIC) /*IEEE mantissa is 52 bits. */ ((unsigned int *)temp)[LSB] = (ist1<<10 | ist0>>12); ((unsigned int *)temp)[MSB] = EXPO | ist2; return *temp - (double) 1.0; #else return ist2*TWO_M20 + ist1*TWO_M42 + ist0*TWO_M64; #endif #endif } /* Return a random integer */ #ifdef __STDC__ int get_rn_int(int *igenptr) #else int get_rn_int(igenptr) int *igenptr; #endif { #ifdef LONG64 struct rngen *genptr = (struct rngen *) igenptr; advance_cmrg(genptr); return ((genptr->state+(genptr->s0<<32))&MULT_MASK)>>33; #else return (int) (get_rn_dbl(igenptr)*0x80000000U); #endif } /* Return a single precision random number */ #ifdef __STDC__ float get_rn_flt(int *igenptr) #else float get_rn_flt(igenptr) int *igenptr; #endif { /* If you have a more efficient way of computing the random integer, then please replace the statement below with your scheme. */ return (float) get_rn_dbl(igenptr); } #undef m1 #undef a0 #undef a4 #undef q0 #undef q4 #undef r0 #undef r4 /*************************************************************************/ /*************************************************************************/ /* SPAWN_RNG: spawns new generators */ /*************************************************************************/ /*************************************************************************/ #ifdef __STDC__ int spawn_rng(int *igenptr, int nspawned, int ***newgens, int checkid) #else int spawn_rng(igenptr,nspawned, newgens, checkid) int *igenptr,nspawned, ***newgens, checkid; #endif { struct rngen **genptr, *tempptr = (struct rngen *) igenptr; int i, j; if (nspawned <= 0) /* is nspawned valid ? */ { nspawned = 1; fprintf(stderr,"WARNING - spawn_rng: nspawned <= 0. Default value of 1 used for nspawned\n"); } genptr = (struct rngen **) mymalloc(nspawned*sizeof(struct rngen *)); if(genptr == NULL) /* allocate memory for pointers to structures */ { *newgens = NULL; return 0; } for(i=0; istream_number + tempptr->spawn_offset*(i+1); if(gennum > MAX_STREAMS) /* change seed to avoid repeating sequence */ seed = (tempptr->init_seed)^gennum; else seed = tempptr->init_seed; /* Initialize a stream. This stream has incorrect spawning information. But we will correct it below. */ genptr[i] = (struct rngen *) init_rng(gennum, gennum+1, seed, tempptr->parameter); if(genptr[i] == NULL) /* Was generator initiallized? */ { nspawned = i; break; } genptr[i]->spawn_offset = (nspawned+1)*tempptr->spawn_offset; } tempptr->spawn_offset *= (nspawned+1); *newgens = (int **) genptr; if(checkid != 0) for(i=0; inarrays; i++) free(q->arrays[i]); if(q->narrays > 0) { free(q->array_sizes); free(q->arrays); } free(q); NGENS--; return NGENS; } #ifdef __STDC__ int pack_rng( int *genptr, char **buffer) #else int pack_rng(genptr,buffer) int *genptr; char **buffer; #endif { unsigned char *p, *initp; int size, i; unsigned int temp, m[2]; struct rngen *q; q = (struct rngen *) genptr; size = 64 + strlen(q->gentype)+1; initp = p = (unsigned char *) mymalloc(size); /* allocate memory */ /* The new load/store routines make using sizeof unnecessary. Infact, */ /* using sizeof could be erroneous. */ if(p == NULL) { *buffer = NULL; return 0; } strcpy((char *)p,q->gentype); p += strlen(q->gentype)+1; p += store_int(q->stream_number,4,p); p += store_int(q->nstreams,4,p); p += store_int(q->init_seed,4,p); p += store_int(q->parameter,4,p); p += store_int(q->narrays,4,p); p += store_int(q->spawn_offset,4,p); p += store_int(q->prime,4,p); #ifdef LONG64 /* 64 bit integer types */ p += store_long64(q->state,8,p); p += store_long64(q->multiplier,8,p); p += store_long64(q->s0,4,p); p += store_long64(q->s1,4,p); p += store_long64(q->s2,4,p); p += store_long64(q->s3,4,p); p += store_long64(q->s4,4,p); #else /* No 64 bit type available */ m[0] = q->state[2]; temp = q->state[1];m[0]=(m[0]<<12)|(temp>>10); m[1] = q->state[1]; temp = q->state[0];m[1]=(m[1]<<22)|(temp); p += store_intarray(m,2,4,p); m[0] = q->multiplier[2]; temp = q->multiplier[1];m[0]=(m[0]<<12)|(temp>>10); m[1] = q->multiplier[1]; temp = q->multiplier[0];m[1]=(m[1]<<22)|(temp); p += store_intarray(m,2,4,p); p += store_int(*(unsigned int *)&q->s0,4,p); p += store_int(*(unsigned int *)&q->s1,4,p); p += store_int(*(unsigned int *)&q->s2,4,p); p += store_int(*(unsigned int *)&q->s3,4,p); p += store_int(*(unsigned int *)&q->s4,4,p); #endif *buffer = (char *) initp; assert(p-initp == size); return p-initp; } #ifdef __STDC__ int *unpack_rng( char *packed) #else int *unpack_rng(packed) char *packed; #endif { struct rngen *q; unsigned int i, m[2]; unsigned char *p; p = (unsigned char *) packed; q = (struct rngen *) mymalloc(sizeof(struct rngen)); if(q == NULL) return NULL; if(strcmp((char *)p,GENTYPE) != 0) { fprintf(stderr,"ERROR: Unpacked ' %.24s ' instead of ' %s '\n", p, GENTYPE); return NULL; } else q->gentype = GENTYPE; p += strlen(q->gentype)+1; p += load_int(p,4,(unsigned int *)&q->stream_number); p += load_int(p,4,(unsigned int *)&q->nstreams); p += load_int(p,4,(unsigned int *)&q->init_seed); p += load_int(p,4,(unsigned int *)&q->parameter); p += load_int(p,4,(unsigned int *)&q->narrays); p += load_int(p,4,(unsigned int *)&q->spawn_offset); p += load_int(p,4,&q->prime); #ifdef LONG64 /* 64 bit integer types */ p += load_long64(p,8,&q->state); p += load_long64(p,8,&q->multiplier); p += load_long64(p,4,&q->s0); p += load_long64(p,4,&q->s1); p += load_long64(p,4,&q->s2); p += load_long64(p,4,&q->s3); p += load_long64(p,4,&q->s4); #else /* No 64 bit type available */ p += load_intarray(p,2,4,m); q->state[0] = (double) (m[1]&0x3fffff); q->state[1] = (double) ((m[1]>>22) | (m[0]&0xfff)<<10); q->state[2] = (double) (m[0]>>12); p += load_intarray(p,2,4,m); q->multiplier[0] = (double) (m[1]&0x3fffff); q->multiplier[1] = (double) ((m[1]>>22) | (m[0]&0xfff)<<10); q->multiplier[2] = (double) (m[0]>>12); p += load_int(p,4,(unsigned int *)&q->s0); p += load_int(p,4,(unsigned int *)&q->s1); p += load_int(p,4,(unsigned int *)&q->s2); p += load_int(p,4,(unsigned int *)&q->s3); p += load_int(p,4,(unsigned int *)&q->s4); #endif q->array_sizes = NULL; q->arrays = NULL; NGENS++; return (int *) q; } #ifdef __STDC__ int get_seed_rng(int *gen) #else int get_seed_rng(gen) int *gen; #endif { return ((struct rngen *) gen)->init_seed; } #ifdef __STDC__ int print_rng( int *igen) #else int print_rng(igen) int *igen; #endif { struct rngen *gen; printf("\n%s\n", GENTYPE+2); gen = (struct rngen *) igen; printf("\n \tseed = %d, stream_number = %d\tparameter = %d\n\n", gen->init_seed, gen->stream_number, gen->parameter); return 1; } #include "../simple_.h" #include "../fwrap_.h" SHAR_EOF fi # end of overwriting check if test -f 'cmrg.data' then echo shar: will not over-write existing file "'cmrg.data'" else cat << "SHAR_EOF" > 'cmrg.data' 182997154 980243147 525052506 2019719429 1284886589 155656878 1048740876 115060897 862575554 1658089133 108607816 811661852 140275319 244735413 30511366 92458912 1780071600 1007621128 817259503 1749225907 1477987543 323655870 1079787480 1525898793 1286028553 491521188 1806060009 1506979221 2039235216 165159676 208632912 1749954329 1861992450 1473562181 320464002 183746587 926397279 459756705 614504933 151382196 687391447 831885882 1167319930 211455669 2110289956 616759194 1362983493 870083917 2011047303 1411321372 47349973 1892523924 830859568 1958786195 730610682 1859619350 716349708 994881505 1884877912 1014954219 1691786504 1025151363 657210055 791586676 1099037714 1868448777 1692347972 1460416070 595330613 748221135 348311646 1037378259 1597344249 803812994 2036799421 1312821219 1301591250 1019830737 78225855 928335293 2036469592 1289499649 1233844866 1148336379 495817327 1005356803 1825265598 1647052241 197712002 1183890214 1183405739 396353740 1762658558 644798733 1242980094 739317667 1487939406 1822630565 1271548451 1108961696 706040167 39656472 1833393062 1401650593 1642806011 550918089 305060038 1188062354 497316276 243394525 2108733603 46387459 1110105413 824149788 400843049 1658526252 269995852 1378516169 26637038 410372319 1003963543 928708029 1896000499 921315445 1641410062 790644144 1946856559 1252325370 1327457963 1407813879 280843573 1492139874 526490823 1244389354 1249778725 2099608387 488175297 1995719452 511616748 722210213 1901401238 242610881 1855662872 139292528 278402137 641928149 1820348178 1438722282 541157614 928148494 1016879601 1770886984 54147044 1341445208 1331900133 767087122 1399346935 773551166 155211299 1692424100 1464472933 563769229 62598784 467239664 1678040064 1019236288 354363047 1253487521 1200905665 1912278799 1769631816 396747658 1746229099 1954232935 2082671973 2102953123 847425252 218133881 657189250 430720043 1295389412 162734913 456535515 1176299256 273458607 417509155 16451185 1111619082 128329567 478197924 1900908566 1342284455 1092129147 665825799 2050891282 1488633220 599254084 1302804920 848570997 710567194 907332439 734663498 477936282 919104274 251781459 2051314905 1353615826 6681001 1632393464 932464398 1312042154 1506855584 1888461214 1253882575 871439364 1654529287 1943324377 472207523 1505090104 230681282 838565205 1857140297 801482745 2106484442 1303305732 2002628225 540747303 1159890840 35918202 470729892 1363869116 1251102272 309340609 614591529 769011708 1837326594 220428087 1051692163 408568808 455575628 1196649666 1730441854 616019756 1021201297 762561673 65063158 1571145132 155420776 1155919183 485858392 1822576979 2081420940 1265175884 9482277 1450216829 758345602 2103723639 1819350853 997915729 848007280 1786468060 1288236387 1267476189 311176800 398920139 1111772872 814818918 1028762672 183483289 971674797 698933437 987041171 1869579462 698033803 2071603499 295335252 681030022 280110957 302891909 2139470671 1246680071 1471011666 1686677251 1344747207 1960063221 1792286990 1818480207 1098873574 1216111524 538932864 1881607000 1966552622 1056870988 2102406969 663490056 847410935 116576065 2017958629 1524957120 917454901 2072802312 498800140 1366589578 619734046 2009394450 1543240155 1367939463 1822687838 1305732997 1249020343 1522712532 721340992 101397054 1038131058 1137553601 865695486 489228372 1407731978 454917256 398580385 1067295970 37500789 1613886540 386618226 2140888043 1735934621 1928442217 1227130727 432985582 1470155642 719546349 396453971 93733051 262660602 731309538 1857302980 2017344593 1015895977 358999679 1310363859 106406778 2514994 1472008026 1641070229 782799159 1758738910 802701469 631291884 1355220806 1424954654 233949258 625556574 1253918264 1599042057 1141344276 1900908835 1976223819 1620156844 1207509819 1817009576 2084732474 432189261 959658269 538618415 2141452345 2105712356 1340601934 2115194356 1049947155 1258874930 531177503 2133900012 1294618897 550347315 735686984 843503640 349796213 194627279 1557683812 2055248858 1370538723 1544699072 1550152269 192089195 307091590 96291152 739578706 207640831 453993963 114239791 640484774 1127151763 1326888538 411009848 1902930192 452366 874957959 743356685 816693878 1803839239 2027211820 323478587 1984357861 581463215 267228064 540473485 1724562208 127791453 1421641282 1251300303 1818515446 228361347 682586589 1760468478 2064648405 1230707479 57303563 637734771 1654262525 688848088 1045175708 1906910024 570884749 1905407811 1637356937 659228482 1524700782 528293629 1668770424 209281767 1801749637 1853994139 1570228407 1111746269 653975114 1346015334 1107003000 1513824319 1233802201 552342046 1711074366 2099082827 351874407 337480501 1825705334 1694618140 1827328899 30351041 837364191 1659133281 203628599 713311514 1503396533 682808507 2144364161 809575332 1222432116 194117867 825997351 1796294773 2084282802 1463126747 1738250532 1835031468 268722855 915603680 271591373 1744063938 1704455313 1270173671 1571915868 2042499272 1286163519 704577726 1717543017 626055368 868827564 799266579 344073070 69842515 1071479410 657082754 1156759897 1453007773 587694234 1697988423 757582925 513728237 1841666695 1284247162 2018340631 821219249 975586551 921872572 78917840 329913347 695689677 874011045 57484672 1903562060 0.658053 0.551562 0.187979 0.296808 0.281578 0.495918 0.589155 0.444410 0.474906 0.947758 0.678619 0.742282 0.107869 0.695372 0.017141 0.684191 0.615959 0.907197 0.811641 0.567254 0.919333 0.251522 0.732350 0.578711 0.270919 0.841895 0.029191 0.571808 0.357838 0.806187 0.492810 0.536877 0.927150 0.103794 0.999571 0.595667 0.918043 0.921010 0.418058 0.200784 0.680036 0.418310 0.665767 0.827004 0.310969 0.531677 0.310919 0.871498 0.418994 0.200844 0.288546 0.351842 0.611276 0.184181 0.218455 0.512269 0.547331 0.446513 0.799836 0.953656 0.469603 0.043103 0.804592 0.876802 0.300922 0.453802 0.871024 0.225266 0.415419 0.108719 0.590979 0.308942 0.209010 0.899214 0.067707 0.959648 0.406665 0.375892 0.829870 0.879680 0.206808 0.205592 0.153801 0.269261 0.730770 0.628327 0.611945 0.726853 0.788385 0.884034 0.655384 0.402954 0.713928 0.880302 0.068064 0.426456 0.293817 0.770129 0.014841 0.823801 0.601296 0.267259 0.523306 0.980761 0.271122 0.977653 0.856411 0.973257 0.832885 0.687788 0.151196 0.068025 0.523974 0.953646 0.621026 0.575944 0.187315 0.085724 0.196532 0.088853 0.882005 0.027115 0.301636 0.670582 0.442524 0.611885 0.681702 0.231514 0.692427 0.477104 0.752114 0.064560 0.108388 0.555047 0.843860 0.258027 0.548985 0.490017 0.730367 0.110219 0.831523 0.222111 0.467836 0.538988 0.338782 0.027390 0.346037 0.648227 0.011531 0.263487 0.192151 0.770453 0.327679 0.448611 0.169603 0.697369 0.611394 0.370577 0.364708 0.910594 0.197139 0.364577 0.732722 0.970462 0.316994 0.072490 0.018489 0.061600 0.042531 0.042124 0.632121 0.842862 0.685714 0.835012 0.404959 0.568147 0.790333 0.104050 0.222796 0.196431 0.120275 0.457400 0.958947 0.537154 0.838261 0.271123 0.756870 0.477165 0.625975 0.709342 0.806743 0.476370 0.899730 0.104167 0.306832 0.639532 0.088187 0.128113 0.904924 0.507116 0.411623 0.995729 0.802248 0.508999 0.290632 0.713522 0.771114 0.265364 0.413915 0.357169 0.471262 0.629659 0.904696 0.147741 0.924396 0.348667 0.110431 0.694352 0.160959 0.584291 0.399835 0.365847 0.227062 0.841882 0.350164 0.130917 0.092353 0.406939 0.713375 0.585630 0.678936 0.802821 0.820506 0.243635 0.906170 0.428904 0.641224 0.117921 0.210803 0.554729 0.096298 0.558565 0.162572 0.229089 0.651344 0.460036 0.463095 0.777302 0.443677 0.724354 0.458565 0.985047 0.466396 0.533349 0.298385 0.185995 0.158069 0.620151 0.203814 0.174955 0.037054 0.852719 0.023587 0.247030 0.685208 0.245352 0.817773 0.006480 0.188090 0.270050 0.577729 0.882310 0.168735 0.378238 0.515741 0.994265 0.967962 0.048054 0.598882 0.752816 0.128891 0.166629 0.902532 0.726653 0.831347 0.297708 0.482643 0.966783 0.877701 0.406139 0.651495 0.921146 0.624596 0.799276 0.687792 0.913154 0.503190 0.896580 0.071161 0.049132 0.372497 0.456986 0.831101 0.871751 0.495536 0.070349 0.021704 0.793937 0.572580 0.985856 0.172615 0.328538 0.036474 0.803347 0.162663 0.382813 0.711287 0.873470 0.085700 0.947703 0.369537 0.548384 0.578175 0.543133 0.333789 0.429731 0.764324 0.407350 0.719884 0.670294 0.023340 0.965245 0.225108 0.316811 0.014528 0.601312 0.006482 0.005821 0.208699 0.149236 0.198171 0.245730 0.392691 0.617020 0.904927 0.180749 0.058925 0.409909 0.045301 0.877272 0.294694 0.396249 0.583618 0.411113 0.181879 0.977374 0.609643 0.035555 0.539014 0.456022 0.809574 0.489663 0.286867 0.491479 0.203980 0.116796 0.713897 0.416914 0.634037 0.327607 0.006672 0.407987 0.980996 0.187672 0.948941 0.790931 0.291913 0.523832 0.397293 0.715613 0.029392 0.309920 0.043752 0.797669 0.528476 0.788722 0.178633 0.472087 0.812741 0.054275 0.123817 0.966846 0.738374 0.153095 0.456845 0.518555 0.386978 0.384208 0.733861 0.178603 0.885935 0.921258 0.450690 0.722681 0.673350 0.102154 0.052656 0.862952 0.455682 0.973709 0.156546 0.174499 0.260213 0.177915 0.706033 0.547907 0.384722 0.474936 0.361979 0.617647 0.829847 0.230345 0.559533 0.893224 0.380194 0.141300 0.593726 0.978763 0.758809 0.247903 0.631714 0.787780 0.208752 0.262317 0.636291 0.002386 0.737085 0.294047 0.344499 0.641598 0.805961 0.748011 0.555050 0.080118 0.705917 0.324879 0.349041 0.632671 0.798716 0.931858 0.443806 0.874538 0.693772 0.590838 0.063412 0.778477 0.525573 0.330186 0.585378 0.816047 0.631065 0.959695 0.716192 0.842090 0.184413 0.895659 0.148406 0.327512 0.286159 0.772856 0.550395 0.459390 0.467594 0.951874 0.751457 0.648331 0.207181 0.525039 0.463172 0.545387 0.760511 0.014017 0.821159 0.423283 0.606584 0.431038 0.749859 0.132122 0.837798 0.198380 0.697724 0.408195 0.650110 0.627824 0.409741 0.156608 0.376994 0.083867 0.686850 0.899871 0.57872702600771 0.63960826504228 0.68915563967026 0.65996939934417 0.69120413374132 0.78633383843826 0.74561054805038 0.29392799625156 0.51026933865115 0.67904779801236 0.16885252050191 0.21347519759846 0.55277444925741 0.69185153219520 0.94503317044625 0.98447286845073 0.34995507567350 0.02729067531159 0.70309691332646 0.99774321717031 0.94982980887752 0.10054968186078 0.70587781066997 0.54584639097166 0.63097382737274 0.79754500875727 0.63346445057816 0.45576045229815 0.08291754717446 0.77147499226177 0.70783204277544 0.54755455981837 0.41627080623438 0.06000462959153 0.59127736221172 0.28614076663483 0.09523612991561 0.23976490096962 0.51972705389818 0.49310761990590 0.70544921551895 0.79246334299701 0.08698281441285 0.53462365335892 0.62614924107497 0.69511922748824 0.51999274946842 0.76986152073819 0.37627974916005 0.96860296908990 0.96407900124404 0.85264254052003 0.38447666122292 0.14588028902542 0.82304116938263 0.66817389334312 0.55653547386238 0.06572857251342 0.75796262563541 0.95811869743735 0.30165548264877 0.13662439006478 0.33859860467378 0.65323757982787 0.67070104374408 0.29234884203203 0.64989132573669 0.79973325087359 0.64306616802467 0.23695985023257 0.14218655434438 0.10311851932187 0.09973359354232 0.81111095243303 0.07877745572902 0.75560229784612 0.32035326064509 0.54271218456187 0.87525201871625 0.70478228695783 0.30501787447234 0.79201587647001 0.16088275401213 0.78427938464329 0.35546646231470 0.23318718699527 0.33792129877488 0.02185497262856 0.86529088041045 0.97474083074739 0.19001017699512 0.71032319300219 0.83671330190797 0.42289370153530 0.64354867202761 0.97163044040309 0.08130936433333 0.70717174009388 0.19962352263661 0.99650510219045 0.05141423577815 0.95862220837834 0.80824489729501 0.89535590540748 0.12785007446798 0.10959888147636 0.25852978369929 0.86231747829558 0.44981454155620 0.02387896981428 0.47874742683981 0.52182488711139 0.19815425518774 0.23639488067296 0.97514378043681 0.73141579922791 0.91010422070964 0.39722938820629 0.09158847829843 0.06633032390813 0.81166049933315 0.80716991886919 0.17402198573231 0.98933792948868 0.73300373693573 0.76267220123587 0.61304743505464 0.35584498983110 0.63157911043844 0.25561192062955 0.85864861479594 0.19193905480824 0.56343026059153 0.81396684382578 0.11784330734473 0.42453077193893 0.98730690437333 0.35933933601888 0.20618030481857 0.89925618185677 0.25812135754304 0.17317790309989 0.39185745426451 0.35906716423741 0.72398818844147 0.48515561295292 0.61148597735814 0.13756924039483 0.40071879762388 0.85042972122989 0.30474580313456 0.13639024442558 0.37653592844945 0.36585714972637 0.37995199895844 0.98381594453786 0.54515316880698 0.89244531945546 0.59252554767640 0.22861214512570 0.30895158290386 0.43610615606170 0.09897384198914 0.87899867960702 0.87164466003429 0.92081696080544 0.64028600631617 0.87413363550144 0.78356925418909 0.62520544499795 0.50252235414704 0.35267719551957 0.15935602681275 0.40466632607065 0.26913778835739 0.85465761345125 0.91359045751559 0.07115176515934 0.60419919614288 0.29837487689990 0.58866232187980 0.19714071676866 0.94709731243982 0.20847175535337 0.06216227891176 0.36745794329362 0.21089397598549 0.00412432332176 0.39830329950584 0.92698683386990 0.49612509028362 0.69957325312098 0.08493266203149 0.70218049948218 0.67089898265797 0.40495903396562 0.02560713540830 0.39977929067641 0.92722439105617 0.07369912771778 0.38296538115291 0.57180888789433 0.09085498762590 0.26669054040097 0.26716097178335 0.95433102924118 0.81938595314950 0.67660048650670 0.24348370761987 0.63955339734398 0.21812349961553 0.16802074302222 0.19033442137901 0.06637808307326 0.61238728952883 0.84832672461885 0.72466452164169 0.75943081032991 0.40288152182081 0.85870930160378 0.35845082307547 0.19540957506043 0.87988247552761 0.05460998966687 0.43814601105733 0.30391782559603 0.69773601926933 0.53246960751309 0.63977820583038 0.92816903315120 0.89537190428725 0.76050893395201 0.36174107418226 0.71366940126156 0.77440869821488 0.31838543635164 0.74586572845682 0.54746381982354 0.66718342106422 0.92109859724489 0.37585445168771 0.88740750921349 0.04665605407635 0.60428537970756 0.12607298019740 0.98392302450681 0.11095187370387 0.61383945287541 0.67816042095278 0.54430188363520 0.65531569659775 0.55412400862747 0.89497450768689 0.41968806083365 0.77338582096814 0.19266770651408 0.15992619864679 0.79940307316739 0.70018306849570 0.03907156278345 0.57262712236924 0.83122326911150 0.72038618350672 0.03503314412538 0.06031594430466 0.95722680642355 0.37046969353609 0.62617745776160 0.10302374924185 0.46143558900623 0.08538653733711 0.71177421470723 0.98435439959771 0.95196793417853 0.12606893434201 0.50577329001614 0.61898865320312 0.70644426532299 0.25192395437102 0.01518579784338 0.49462008812595 0.83233698617315 0.67240400840934 0.31589323134496 0.57852967990937 0.71988478351389 0.75610152513500 0.93379968539543 0.29342972699412 0.81692602943861 0.59623954354940 0.02542024932715 0.87310362599951 0.95744287473668 0.21607305015721 0.43116220146262 0.32229426181953 0.18115695863707 0.41272349877165 0.28868737930962 0.67923083881466 0.75983847572258 0.13881850262422 0.75734265548867 0.74651919392746 0.72815148139930 0.59506402178590 0.03078200776727 0.98588480138724 0.60514765545803 0.64825078391465 0.77609087097397 0.65982492261588 0.81355686408307 0.14034825916430 0.52903203251270 0.75957122131485 0.88050247764618 0.92079690402944 0.83640962233274 0.80565203732745 0.12591547886832 0.72147091849891 0.77364159036706 0.47554284356672 0.45829239095771 0.45078675497092 0.72686549848240 0.04631211685926 0.51835310842316 0.97540230053203 0.19245880939690 0.53310738565772 0.09777934751641 0.63977403838612 0.27358184278134 0.26826709372644 0.73891357368193 0.17854209052775 0.77713558584537 0.55356999945036 0.08371766048608 0.90135310298080 0.93530083640941 0.60959605089032 0.38588098686963 0.75504308099048 0.69122538789436 0.81824935650866 0.00260500334004 0.89532690463126 0.12566174491845 0.43576929434879 0.82159575377363 0.74957574718014 0.67554578624458 0.43179094306958 0.57359672744172 0.40602339045833 0.97586442212773 0.91626407581120 0.49474612042082 0.34113138672805 0.57848236328009 0.73577304995269 0.49365176399495 0.37059468958936 0.70220773480340 0.38254840153144 0.37739490199863 0.42137853651429 0.31004992223201 0.98946539952398 0.54602106890265 0.41411084452476 0.74872200331283 0.06130920369726 0.47799840308820 0.71011151730951 0.74202379906960 0.48395065668459 0.83284504464475 0.00979017397261 0.86628636049553 0.87066581427800 0.11329312636083 0.87318563616090 0.58694368404998 0.11034809356021 0.78599372958078 0.56519975969143 0.89850643040061 0.49814628426455 0.37913046121212 0.79328044902880 0.39155169504797 0.86932417457119 0.40951651810132 0.57930364292327 0.22736472486939 0.63332717701910 0.61659537942882 0.81132944818748 0.88563519223492 0.03810429635829 0.65322662002683 0.61092010045675 0.96172329836651 0.29461144681230 0.96735325787644 0.42443829088060 0.29382587458752 0.86740999915673 0.55995045210799 0.29692056502944 0.66481353854400 0.76226445758234 0.15518079118971 0.95152086917150 0.16373687715460 0.31323152914635 0.84561429563710 0.72611805589512 0.42058058819984 0.21645285841141 0.82571393365204 0.44471181345121 0.70073917241458 0.67566983060072 0.55094695908106 0.51830515185838 0.67696328943363 0.33534530045741 0.32692741339707 0.43960568690701 0.72538076717360 0.71191600727471 0.40228541369243 0.25537736460940 0.55086304724633 0.19227133935383 0.32700924977744 0.23400693903722 0.50150802225296 0.86159914353185 0.68208390613566 0.85304094012854 0.36163163177110 0.02747159740485 0.02476099725258 0.40784415502731 0.30896397859881 0.43723813384159 0.86097527955126 0.19040858061591 0.62991754954355 0.40597028245868 0.87610978586730 0.01695488648838 0.79356267756460 0.47083874970652 0.61347703854432 0.68566034169507 0.69442421130864 0.55365308215130 0.64030126750035 0.13713035939842 0.05979300928748 0.61556904616336 0.59987423221360 0.56472677136001 0.24648169729288 0.57089746528911 0.20403538173565 0.29514210556975 0.05681143362751 0.18225580655517 0.51065163889187 0.04411964612121 0.28445223218054 0.02801315806450 0.22629379375630 0.88341584391547 0.79571113277195 0.22637037505492 0.93965537677790 0.52028827737293 0.69393084051914 0.04227016160473 0.73304506267842 0.77050078313178 0.03002381517796 0.46980996423891 0.04770708625613 0.45895281467201 0.77642417720459 0.69989314110809 0.41739228723726 0.00128043208545 0.96469940991764 835614087 1287290571 1564766039 304704185 1774165154 70727300 1320520476 1590403527 351322547 301736453 633801215 1953730905 1166424433 1077116052 1252126899 1278547983 80675490 22698981 1773437191 368531641 1387729442 576010412 573490890 1738345371 125179025 1109242584 304445817 1209410410 1892190454 1058524404 1623908133 529285618 1939507201 1110843849 416770838 1241982568 89521622 499865715 1862474926 571405775 1258773055 347158051 2078839531 1913993865 611767209 1300752222 1395253678 680010138 166582059 2010616074 1993925613 2116070362 371870295 1244911239 2037300598 206367479 851692855 1650287842 139418325 1550889197 659381844 738216933 1497690900 1441507288 1441054165 852273377 1582480776 1210167469 2134346057 1361257535 819933710 1906947033 306148144 550919470 727628327 2132834593 314817393 349433337 1554410658 408970032 777252135 1259555305 532660655 456496940 415964679 273309439 1386848673 305016848 706351210 1424266651 1974937742 496447902 876744978 1980155768 1626279545 1653014322 1655275566 1121591667 840032553 1828367448 591323025 797224514 414717538 2074575814 836905725 1348125540 1953040429 285688975 1946526550 1758551528 682059336 1571100808 934872562 689668957 807258583 1142264774 917327791 2062835488 837995389 572190818 1385268609 148635639 100576780 1049168955 2071753382 635843264 1935012889 898143408 1421890241 1095753641 1802001833 1957841769 793987359 266727562 1832969092 367666082 841265165 897486930 2028104229 1660451396 1456594993 661061275 727094865 892484700 274466554 1753757996 763564758 1441572689 1088431730 1468892641 182997154 980243147 525052506 2019719429 1284886589 155656878 1048740876 115060897 862575554 1658089133 108607816 811661852 140275319 244735413 30511366 92458912 1780071600 1007621128 817259503 1749225907 1477987543 323655870 1079787480 1525898793 1286028553 491521188 1806060009 1506979221 2039235216 165159676 208632912 1749954329 1861992450 1473562181 320464002 183746587 926397279 459756705 614504933 151382196 687391447 831885882 1167319930 211455669 2110289956 616759194 1362983493 870083917 2011047303 1411321372 182997154 980243147 525052506 2019719429 1284886589 155656878 1048740876 115060897 862575554 1658089133 108607816 811661852 140275319 244735413 30511366 92458912 1780071600 1007621128 817259503 1749225907 1477987543 323655870 1079787480 1525898793 1286028553 491521188 1806060009 1506979221 2039235216 165159676 208632912 1749954329 1861992450 1473562181 320464002 183746587 926397279 459756705 614504933 151382196 687391447 831885882 1167319930 211455669 2110289956 616759194 1362983493 870083917 2011047303 1411321372 1877508010 366385584 1934173720 1178994858 1386446991 1431633836 1694496562 982423889 773365212 405306722 1280891382 1952280882 828215770 757408465 1146028204 1723593626 1027250789 1421943571 15696760 1937951033 872456604 1423919865 2108743444 1434391778 1423601705 1121344724 2035365303 54265179 698388977 1094134192 60792674 600539484 412180606 1324269307 865670597 701180872 1911421216 724675296 1058662019 61415479 1796941581 1490686861 56318643 417547141 1335747007 1664701401 399601952 525499862 862519976 1613064011 SHAR_EOF fi # end of overwriting check if test -f 'primelist.h' then echo shar: will not over-write existing file "'primelist.h'" else cat << "SHAR_EOF" > 'primelist.h' #define PRIMELISTSIZE1 1000 #define STEP 10000 #define PRIMELISTSIZE2 15613 unsigned int prime_list[PRIMELISTSIZE2] = { 3037000493U, 3037000453U, 3037000429U, 3037000427U, 3037000399U, 3037000391U, 3037000333U, 3037000331U, 3037000303U, 3037000289U, 3037000249U, 3037000193U, 3037000181U, 3037000177U, 3037000159U, 3037000121U, 3037000111U, 3037000103U, 3037000069U, 3037000039U, 3037000013U, 3036999991U, 3036999983U, 3036999941U, 3036999899U, 3036999887U, 3036999877U, 3036999841U, 3036999821U, 3036999817U, 3036999811U, 3036999803U, 3036999773U, 3036999769U, 3036999761U, 3036999739U, 3036999737U, 3036999733U, 3036999727U, 3036999499U, 3036999487U, 3036999473U, 3036999467U, 3036999457U, 3036999443U, 3036999439U, 3036999431U, 3036999403U, 3036999379U, 3036999341U, 3036999319U, 3036999307U, 3036999293U, 3036999283U, 3036999271U, 3036999233U, 3036999209U, 3036999167U, 3036999157U, 3036999137U, 3036999113U, 3036999101U, 3036999089U, 3036999079U, 3036999067U, 3036999061U, 3036999023U, 3036999019U, 3036999001U, 3036998999U, 3036998989U, 3036998977U, 3036998963U, 3036998957U, 3036998933U, 3036998903U, 3036998873U, 3036998857U, 3036998849U, 3036998843U, 3036998837U, 3036998803U, 3036998777U, 3036998761U, 3036998759U, 3036998743U, 3036998717U, 3036998611U, 3036998599U, 3036998567U, 3036998563U, 3036998561U, 3036998537U, 3036998477U, 3036998449U, 3036998429U, 3036998401U, 3036998381U, 3036998347U, 3036998333U, 3036998329U, 3036998299U, 3036998267U, 3036998257U, 3036998249U, 3036998231U, 3036998213U, 3036998183U, 3036998161U, 3036998113U, 3036998093U, 3036998071U, 3036998051U, 3036998047U, 3036998011U, 3036998009U, 3036997973U, 3036997939U, 3036997933U, 3036997897U, 3036997853U, 3036997837U, 3036997813U, 3036997811U, 3036997787U, 3036997783U, 3036997751U, 3036997741U, 3036997727U, 3036997721U, 3036997709U, 3036997697U, 3036997693U, 3036997643U, 3036997631U, 3036997619U, 3036997603U, 3036997597U, 3036997577U, 3036997559U, 3036997511U, 3036997501U, 3036997493U, 3036997393U, 3036997391U, 3036997343U, 3036997339U, 3036997331U, 3036997289U, 3036997279U, 3036997217U, 3036997213U, 3036997169U, 3036997151U, 3036997133U, 3036997109U, 3036997081U, 3036997063U, 3036997021U, 3036996983U, 3036996947U, 3036996931U, 3036996923U, 3036996901U, 3036996883U, 3036996863U, 3036996829U, 3036996817U, 3036996799U, 3036996769U, 3036996761U, 3036996737U, 3036996713U, 3036996709U, 3036996707U, 3036996673U, 3036996631U, 3036996601U, 3036996587U, 3036996553U, 3036996527U, 3036996497U, 3036996491U, 3036996481U, 3036996451U, 3036996439U, 3036996421U, 3036996379U, 3036996373U, 3036996353U, 3036996349U, 3036996329U, 3036996307U, 3036996299U, 3036996283U, 3036996253U, 3036996247U, 3036996211U, 3036996197U, 3036996121U, 3036996091U, 3036996077U, 3036996071U, 3036996049U, 3036996019U, 3036996013U, 3036995981U, 3036995977U, 3036995953U, 3036995933U, 3036995921U, 3036995909U, 3036995893U, 3036995887U, 3036995881U, 3036995867U, 3036995839U, 3036995833U, 3036995827U, 3036995791U, 3036995761U, 3036995737U, 3036995723U, 3036995711U, 3036995671U, 3036995641U, 3036995627U, 3036995609U, 3036995603U, 3036995581U, 3036995579U, 3036995573U, 3036995543U, 3036995531U, 3036995527U, 3036995491U, 3036995477U, 3036995459U, 3036995369U, 3036995281U, 3036995267U, 3036995257U, 3036995249U, 3036995239U, 3036995189U, 3036995161U, 3036995153U, 3036995123U, 3036995089U, 3036995083U, 3036995057U, 3036995051U, 3036995041U, 3036995021U, 3036994997U, 3036994963U, 3036994931U, 3036994921U, 3036994897U, 3036994889U, 3036994879U, 3036994847U, 3036994799U, 3036994787U, 3036994777U, 3036994747U, 3036994717U, 3036994703U, 3036994679U, 3036994673U, 3036994663U, 3036994661U, 3036994627U, 3036994621U, 3036994619U, 3036994591U, 3036994549U, 3036994547U, 3036994531U, 3036994511U, 3036994507U, 3036994489U, 3036994469U, 3036994439U, 3036994423U, 3036994417U, 3036994397U, 3036994381U, 3036994369U, 3036994349U, 3036994327U, 3036994309U, 3036994283U, 3036994249U, 3036994237U, 3036994229U, 3036994211U, 3036994193U, 3036994141U, 3036994099U, 3036994073U, 3036994069U, 3036994063U, 3036994043U, 3036994039U, 3036994033U, 3036994001U, 3036993977U, 3036993937U, 3036993913U, 3036993901U, 3036993893U, 3036993871U, 3036993769U, 3036993737U, 3036993727U, 3036993719U, 3036993677U, 3036993667U, 3036993613U, 3036993607U, 3036993601U, 3036993587U, 3036993571U, 3036993569U, 3036993541U, 3036993539U, 3036993529U, 3036993527U, 3036993511U, 3036993469U, 3036993437U, 3036993413U, 3036993367U, 3036993359U, 3036993331U, 3036993329U, 3036993319U, 3036993283U, 3036993277U, 3036993257U, 3036993251U, 3036993241U, 3036993233U, 3036993221U, 3036993217U, 3036993181U, 3036993161U, 3036993143U, 3036993133U, 3036993131U, 3036993107U, 3036993103U, 3036993097U, 3036993083U, 3036993077U, 3036993073U, 3036993023U, 3036992983U, 3036992977U, 3036992969U, 3036992957U, 3036992953U, 3036992921U, 3036992899U, 3036992879U, 3036992873U, 3036992869U, 3036992809U, 3036992773U, 3036992753U, 3036992747U, 3036992743U, 3036992741U, 3036992731U, 3036992719U, 3036992711U, 3036992701U, 3036992681U, 3036992669U, 3036992639U, 3036992579U, 3036992521U, 3036992507U, 3036992503U, 3036992461U, 3036992437U, 3036992423U, 3036992401U, 3036992383U, 3036992377U, 3036992341U, 3036992333U, 3036992293U, 3036992291U, 3036992249U, 3036992207U, 3036992191U, 3036992141U, 3036992131U, 3036992113U, 3036992087U, 3036992083U, 3036992069U, 3036992051U, 3036992033U, 3036992017U, 3036992011U, 3036991987U, 3036991981U, 3036991949U, 3036991943U, 3036991897U, 3036991891U, 3036991883U, 3036991861U, 3036991777U, 3036991757U, 3036991753U, 3036991747U, 3036991717U, 3036991649U, 3036991627U, 3036991619U, 3036991591U, 3036991543U, 3036991511U, 3036991501U, 3036991481U, 3036991453U, 3036991381U, 3036991361U, 3036991357U, 3036991327U, 3036991303U, 3036991301U, 3036991271U, 3036991261U, 3036991253U, 3036991249U, 3036991247U, 3036991189U, 3036991183U, 3036991171U, 3036991147U, 3036991127U, 3036991109U, 3036991081U, 3036991063U, 3036991049U, 3036991037U, 3036991033U, 3036991031U, 3036991021U, 3036990997U, 3036990977U, 3036990961U, 3036990949U, 3036990923U, 3036990907U, 3036990899U, 3036990893U, 3036990871U, 3036990851U, 3036990829U, 3036990779U, 3036990769U, 3036990763U, 3036990739U, 3036990727U, 3036990709U, 3036990703U, 3036990611U, 3036990559U, 3036990491U, 3036990431U, 3036990421U, 3036990401U, 3036990391U, 3036990379U, 3036990371U, 3036990323U, 3036990317U, 3036990277U, 3036990263U, 3036990247U, 3036990233U, 3036990227U, 3036990199U, 3036990193U, 3036990167U, 3036990163U, 3036990157U, 3036990071U, 3036990059U, 3036990049U, 3036990037U, 3036990029U, 3036990017U, 3036989999U, 3036989993U, 3036989983U, 3036989957U, 3036989863U, 3036989821U, 3036989797U, 3036989779U, 3036989723U, 3036989693U, 3036989687U, 3036989651U, 3036989611U, 3036989609U, 3036989603U, 3036989573U, 3036989561U, 3036989539U, 3036989477U, 3036989471U, 3036989441U, 3036989419U, 3036989381U, 3036989377U, 3036989363U, 3036989357U, 3036989353U, 3036989323U, 3036989297U, 3036989281U, 3036989261U, 3036989209U, 3036989167U, 3036989159U, 3036989149U, 3036989129U, 3036989107U, 3036989101U, 3036989077U, 3036989071U, 3036989063U, 3036989041U, 3036989027U, 3036988991U, 3036988879U, 3036988849U, 3036988819U, 3036988751U, 3036988739U, 3036988729U, 3036988727U, 3036988723U, 3036988699U, 3036988679U, 3036988673U, 3036988667U, 3036988651U, 3036988637U, 3036988631U, 3036988627U, 3036988583U, 3036988573U, 3036988571U, 3036988543U, 3036988523U, 3036988483U, 3036988469U, 3036988429U, 3036988417U, 3036988399U, 3036988397U, 3036988393U, 3036988387U, 3036988369U, 3036988349U, 3036988319U, 3036988313U, 3036988309U, 3036988301U, 3036988277U, 3036988271U, 3036988117U, 3036988111U, 3036988109U, 3036988081U, 3036988079U, 3036988043U, 3036988037U, 3036988027U, 3036988021U, 3036987991U, 3036987979U, 3036987937U, 3036987931U, 3036987929U, 3036987917U, 3036987913U, 3036987901U, 3036987883U, 3036987871U, 3036987809U, 3036987799U, 3036987773U, 3036987743U, 3036987731U, 3036987727U, 3036987719U, 3036987691U, 3036987659U, 3036987637U, 3036987631U, 3036987601U, 3036987589U, 3036987587U, 3036987581U, 3036987563U, 3036987557U, 3036987553U, 3036987533U, 3036987529U, 3036987523U, 3036987521U, 3036987469U, 3036987439U, 3036987427U, 3036987361U, 3036987337U, 3036987319U, 3036987311U, 3036987293U, 3036987251U, 3036987241U, 3036987197U, 3036987167U, 3036987127U, 3036987089U, 3036987077U, 3036987073U, 3036987067U, 3036987061U, 3036987043U, 3036986969U, 3036986957U, 3036986917U, 3036986881U, 3036986863U, 3036986851U, 3036986839U, 3036986803U, 3036986791U, 3036986789U, 3036986767U, 3036986759U, 3036986737U, 3036986713U, 3036986669U, 3036986609U, 3036986599U, 3036986593U, 3036986569U, 3036986509U, 3036986507U, 3036986501U, 3036986479U, 3036986441U, 3036986431U, 3036986417U, 3036986411U, 3036986383U, 3036986333U, 3036986287U, 3036986279U, 3036986203U, 3036986189U, 3036986167U, 3036986129U, 3036986123U, 3036986107U, 3036986041U, 3036986023U, 3036986009U, 3036985999U, 3036985993U, 3036985979U, 3036985949U, 3036985921U, 3036985877U, 3036985873U, 3036985837U, 3036985829U, 3036985817U, 3036985813U, 3036985799U, 3036985771U, 3036985753U, 3036985747U, 3036985741U, 3036985739U, 3036985733U, 3036985729U, 3036985709U, 3036985697U, 3036985673U, 3036985643U, 3036985613U, 3036985607U, 3036985603U, 3036985583U, 3036985561U, 3036985559U, 3036985547U, 3036985543U, 3036985499U, 3036985459U, 3036985439U, 3036985433U, 3036985409U, 3036985373U, 3036985361U, 3036985309U, 3036985291U, 3036985283U, 3036985267U, 3036985253U, 3036985249U, 3036985219U, 3036985207U, 3036985187U, 3036985177U, 3036985151U, 3036985097U, 3036985093U, 3036985073U, 3036985033U, 3036985031U, 3036985001U, 3036984997U, 3036984989U, 3036984971U, 3036984953U, 3036984943U, 3036984917U, 3036984887U, 3036984803U, 3036984799U, 3036984787U, 3036984773U, 3036984761U, 3036984751U, 3036984749U, 3036984721U, 3036984697U, 3036984673U, 3036984667U, 3036984637U, 3036984623U, 3036984589U, 3036984569U, 3036984563U, 3036984539U, 3036984527U, 3036984481U, 3036984479U, 3036984427U, 3036984421U, 3036984413U, 3036984407U, 3036984403U, 3036984373U, 3036984367U, 3036984361U, 3036984343U, 3036984319U, 3036984287U, 3036984259U, 3036984257U, 3036984253U, 3036984199U, 3036984191U, 3036984151U, 3036984133U, 3036984131U, 3036984089U, 3036984059U, 3036984053U, 3036984047U, 3036984017U, 3036983933U, 3036983923U, 3036983909U, 3036983897U, 3036983867U, 3036983843U, 3036983837U, 3036983827U, 3036983813U, 3036983809U, 3036983777U, 3036983771U, 3036983699U, 3036983689U, 3036983671U, 3036983657U, 3036983629U, 3036983623U, 3036983597U, 3036983567U, 3036983561U, 3036983539U, 3036983533U, 3036983497U, 3036983483U, 3036983441U, 3036983407U, 3036983387U, 3036983297U, 3036983281U, 3036983249U, 3036983203U, 3036983189U, 3036983177U, 3036983167U, 3036983137U, 3036983111U, 3036983099U, 3036983083U, 3036983063U, 3036983057U, 3036983041U, 3036982981U, 3036982937U, 3036982919U, 3036982853U, 3036982843U, 3036982841U, 3036982789U, 3036982777U, 3036982757U, 3036982727U, 3036982693U, 3036982643U, 3036982639U, 3036982601U, 3036982589U, 3036982577U, 3036982567U, 3036982547U, 3036982541U, 3036982523U, 3036982519U, 3036982489U, 3036982469U, 3036982451U, 3036982423U, 3036982397U, 3036982387U, 3036982349U, 3036982337U, 3036982331U, 3036982313U, 3036982297U, 3036982279U, 3036982271U, 3036982189U, 3036982139U, 3036982133U, 3036982121U, 3036982111U, 3036982103U, 3036982099U, 3036982093U, 3036982061U, 3036982043U, 3036982009U, 3036982001U, 3036981979U, 3036981967U, 3036981953U, 3036981931U, 3036981923U, 3036981917U, 3036981863U, 3036981859U, 3036981853U, 3036981851U, 3036981821U, 3036981811U, 3036981797U, 3036981763U, 3036981733U, 3036981713U, 3036981691U, 3036981659U, 3036981553U, 3036981547U, 3036981539U, 3036981533U, 3036981481U, 3036981421U, 3036981407U, 3036981401U, 3036981383U, 3036981373U, 3036981359U, 3036981347U, 3036981323U, 3036981313U, 3036981307U, 3036981301U, 3036981289U, 3036981287U, 3036981209U, 3036981179U, 3036981139U, 3036981097U, 3036981067U, 3036981043U, 3036981041U, 3036981023U, 3036981011U, 3036980971U, 3036980941U, 3036980917U, 3036980911U, 3036980897U, 3036980867U, 3036980851U, 3036980819U, 3036980803U, 3036980761U, 3036980753U, 3036980747U, 3036980701U, 3036980699U, 3036980677U, 3036980599U, 3036980579U, 3036980549U, 3036980537U, 3036980533U, 3036980519U, 3036980497U, 3036980491U, 3036980459U, 3036980423U, 3036980371U, 3036980363U, 3036980339U, 3036980327U, 3036980269U, 3036980267U, 3036980263U, 3036980207U, 3036980161U, 3036980129U, 3036980123U, 3036980117U, 3036980077U, 3036980071U, 3036980047U, 3036980041U, 3036980039U, 3036980033U, 3036980027U, 3036979997U, 3036979987U, 3036979937U, 3036979927U, 3036979919U, 3036979873U, 3036979861U, 3036979849U, 3036979837U, 3036979793U, 3036979787U, 3036979769U, 3036979763U, 3036979723U, 3036979709U, 3036979679U, 3036979661U, 3036979601U, 3036979597U, 3036979579U, 3036979571U, 3036979531U, 3036979529U, 3036979523U, 3036979457U, 3036979391U, 3036979357U, 3036979343U, 3036979339U, 3036979303U, 3036979301U, 3036979291U, 3036979289U, 3036979261U, 3036979249U, 3036979237U, 3036979223U, 3036762997U, 3036545581U, 3036327389U, 3036107951U, 3035888633U, 3035669363U, 3035449477U, 3035232667U, 3035014193U, 3034795427U, 3034577531U, 3034357853U, 3034138969U, 3033923621U, 3033706409U, 3033488597U, 3033267889U, 3033049871U, 3032832493U, 3032615063U, 3032396527U, 3032177359U, 3031960339U, 3031742731U, 3031526081U, 3031308359U, 3031092199U, 3030873071U, 3030655757U, 3030437257U, 3030218647U, 3029999191U, 3029780833U, 3029559389U, 3029339741U, 3029122153U, 3028904231U, 3028687897U, 3028467803U, 3028251181U, 3028034189U, 3027815579U, 3027597247U, 3027377317U, 3027158237U, 3026939441U, 3026721421U, 3026502179U, 3026282261U, 3026065561U, 3025847507U, 3025627663U, 3025409689U, 3025190813U, 3024971231U, 3024753383U, 3024533179U, 3024312673U, 3024094123U, 3023876753U, 3023655737U, 3023439317U, 3023222239U, 3023004151U, 3022786831U, 3022566857U, 3022349243U, 3022131979U, 3021911663U, 3021695137U, 3021477377U, 3021256289U, 3021037769U, 3020820247U, 3020600897U, 3020381843U, 3020165179U, 3019948573U, 3019729819U, 3019510561U, 3019294087U, 3019074679U, 3018854257U, 3018637471U, 3018418159U, 3018199469U, 3017981123U, 3017762807U, 3017544701U, 3017327809U, 3017107381U, 3016890403U, 3016671503U, 3016453117U, 3016234721U, 3016015661U, 3015797003U, 3015579211U, 3015360779U, 3015141427U, 3014924197U, 3014705597U, 3014487473U, 3014268743U, 3014052511U, 3013832473U, 3013615529U, 3013397269U, 3013177819U, 3012960241U, 3012743291U, 3012525497U, 3012307019U, 3012088889U, 3011870993U, 3011652491U, 3011434169U, 3011217061U, 3010999219U, 3010780781U, 3010564993U, 3010348387U, 3010127833U, 3009910177U, 3009693839U, 3009474253U, 3009255637U, 3009037517U, 3008820911U, 3008599381U, 3008379739U, 3008159723U, 3007941473U, 3007724221U, 3007506361U, 3007288589U, 3007068709U, 3006850277U, 3006630499U, 3006412979U, 3006194489U, 3005975761U, 3005755367U, 3005537413U, 3005317433U, 3005101609U, 3004884821U, 3004669463U, 3004450633U, 3004231093U, 3004011743U, 3003795953U, 3003576871U, 3003357971U, 3003138847U, 3002919079U, 3002700947U, 3002481649U, 3002264299U, 3002046821U, 3001828987U, 3001609753U, 3001390789U, 3001172389U, 3000954289U, 3000736049U, 3000517057U, 3000299059U, 3000081691U, 2999865541U, 2999645267U, 2999428681U, 2999208437U, 2998989517U, 2998769261U, 2998552309U, 2998331761U, 2998112737U, 2997895037U, 2997675017U, 2997456079U, 2997236027U, 2997018683U, 2996799863U, 2996579689U, 2996360473U, 2996141653U, 2995922999U, 2995706647U, 2995488203U, 2995270471U, 2995052131U, 2994832817U, 2994613397U, 2994394969U, 2994176371U, 2993958943U, 2993739953U, 2993521463U, 2993302891U, 2993085449U, 2992867159U, 2992647499U, 2992428287U, 2992211983U, 2991996857U, 2991776339U, 2991556427U, 2991341417U, 2991121901U, 2990904949U, 2990686943U, 2990471509U, 2990252131U, 2990033617U, 2989816859U, 2989597759U, 2989377431U, 2989159883U, 2988940987U, 2988721301U, 2988502883U, 2988285617U, 2988066629U, 2987849437U, 2987630771U, 2987414873U, 2987198597U, 2986980923U, 2986764181U, 2986545649U, 2986327571U, 2986109209U, 2985890657U, 2985670433U, 2985453733U, 2985237617U, 2985019019U, 2984801321U, 2984581697U, 2984360947U, 2984142757U, 2983925299U, 2983708313U, 2983488721U, 2983270751U, 2983052749U, 2982833473U, 2982617243U, 2982401029U, 2982184763U, 2981967419U, 2981746181U, 2981525629U, 2981308009U, 2981089733U, 2980871129U, 2980654093U, 2980435439U, 2980218091U, 2980002373U, 2979781547U, 2979562793U, 2979344219U, 2979127687U, 2978907857U, 2978690389U, 2978472713U, 2978255261U, 2978038267U, 2977818317U, 2977601191U, 2977384337U, 2977166617U, 2976948059U, 2976730721U, 2976512857U, 2976292927U, 2976075541U, 2975857043U, 2975638751U, 2975421623U, 2975204087U, 2974987151U, 2974768619U, 2974552081U, 2974332671U, 2974113341U, 2973895261U, 2973677171U, 2973458113U, 2973241703U, 2973023369U, 2972804099U, 2972586329U, 2972367829U, 2972149039U, 2971931051U, 2971711019U, 2971494139U, 2971277423U, 2971059173U, 2970838919U, 2970619343U, 2970403757U, 2970183743U, 2969959627U, 2969743547U, 2969525033U, 2969309891U, 2969090279U, 2968871251U, 2968651541U, 2968435117U, 2968214531U, 2967996443U, 2967780931U, 2967562369U, 2967343021U, 2967124487U, 2966906353U, 2966688983U, 2966472557U, 2966253179U, 2966035691U, 2965819673U, 2965600733U, 2965383739U, 2965166959U, 2964946847U, 2964729197U, 2964510889U, 2964292297U, 2964075437U, 2963855227U, 2963638693U, 2963421677U, 2963204119U, 2962986503U, 2962766491U, 2962547311U, 2962331657U, 2962112771U, 2961895337U, 2961679121U, 2961460591U, 2961241603U, 2961022781U, 2960805161U, 2960587099U, 2960369359U, 2960151149U, 2959931383U, 2959714627U, 2959495937U, 2959277393U, 2959059997U, 2958843161U, 2958625499U, 2958407399U, 2958189191U, 2957972767U, 2957753053U, 2957535137U, 2957317171U, 2957098873U, 2956880557U, 2956660747U, 2956441343U, 2956224577U, 2956007273U, 2955789979U, 2955569107U, 2955349213U, 2955131051U, 2954912297U, 2954693083U, 2954475233U, 2954255153U, 2954037211U, 2953818851U, 2953599667U, 2953381993U, 2953162151U, 2952942739U, 2952725873U, 2952506693U, 2952289517U, 2952071821U, 2951854319U, 2951636731U, 2951419189U, 2951201251U, 2950982971U, 2950763201U, 2950544221U, 2950326689U, 2950110017U, 2949891643U, 2949673561U, 2949456077U, 2949238151U, 2949022819U, 2948803327U, 2948584297U, 2948367439U, 2948148473U, 2947930483U, 2947712767U, 2947495459U, 2947277803U, 2947061057U, 2946842537U, 2946625949U, 2946405619U, 2946187753U, 2945970421U, 2945751373U, 2945535001U, 2945315713U, 2945096753U, 2944880387U, 2944658933U, 2944441141U, 2944223479U, 2944005997U, 2943788681U, 2943569197U, 2943351529U, 2943132887U, 2942914609U, 2942697049U, 2942480587U, 2942261857U, 2942041747U, 2941824229U, 2941604959U, 2941387153U, 2941168301U, 2940949691U, 2940733787U, 2940516781U, 2940299849U, 2940084479U, 2939867743U, 2939650613U, 2939432609U, 2939214277U, 2938996777U, 2938779271U, 2938560353U, 2938341551U, 2938124249U, 2937905819U, 2937690901U, 2937472607U, 2937253091U, 2937035341U, 2936814169U, 2936597249U, 2936378723U, 2936162003U, 2935942103U, 2935724443U, 2935504679U, 2935286489U, 2935067897U, 2934850591U, 2934633607U, 2934416071U, 2934197197U, 2933980571U, 2933761433U, 2933543771U, 2933324839U, 2933105831U, 2932886129U, 2932668953U, 2932451867U, 2932234901U, 2932015831U, 2931799373U, 2931579601U, 2931363089U, 2931144523U, 2930928227U, 2930711587U, 2930493919U, 2930273009U, 2930054573U, 2929836719U, 2929619653U, 2929400603U, 2929183613U, 2928966151U, 2928748139U, 2928530929U, 2928313153U, 2928094357U, 2927875619U, 2927658673U, 2927442487U, 2927222069U, 2927004709U, 2926787309U, 2926569361U, 2926350367U, 2926135529U, 2925917893U, 2925698173U, 2925480919U, 2925263279U, 2925046463U, 2924831069U, 2924613371U, 2924393729U, 2924175193U, 2923954801U, 2923737343U, 2923518683U, 2923300829U, 2923082209U, 2922864767U, 2922649421U, 2922430073U, 2922212519U, 2921994917U, 2921775803U, 2921559653U, 2921341103U, 2921126489U, 2920908283U, 2920689061U, 2920471049U, 2920251703U, 2920034347U, 2919817627U, 2919598021U, 2919381319U, 2919162959U, 2918943683U, 2918729057U, 2918510587U, 2918292271U, 2918072057U, 2917854413U, 2917635811U, 2917419499U, 2917202663U, 2916983521U, 2916765193U, 2916545773U, 2916328517U, 2916112183U, 2915893681U, 2915677241U, 2915456513U, 2915239601U, 2915020937U, 2914803761U, 2914586503U, 2914368059U, 2914150271U, 2913932779U, 2913714131U, 2913494791U, 2913274457U, 2913057307U, 2912839169U, 2912621401U, 2912404247U, 2912187853U, 2911970317U, 2911752157U, 2911532539U, 2911313501U, 2911094951U, 2910876457U, 2910657353U, 2910439451U, 2910221297U, 2910003703U, 2909787409U, 2909568721U, 2909351741U, 2909134769U, 2908916249U, 2908699601U, 2908480777U, 2908262023U, 2908043023U, 2907825317U, 2907607337U, 2907388073U, 2907166967U, 2906952473U, 2906736593U, 2906518943U, 2906300231U, 2906082233U, 2905864067U, 2905644013U, 2905426619U, 2905208881U, 2904993263U, 2904773771U, 2904556769U, 2904338867U, 2904123031U, 2903903861U, 2903686447U, 2903468497U, 2903250821U, 2903031559U, 2902812839U, 2902597123U, 2902380449U, 2902160717U, 2901941417U, 2901724187U, 2901507019U, 2901289403U, 2901071813U, 2900854379U, 2900634593U, 2900418889U, 2900202287U, 2899984603U, 2899766291U, 2899550011U, 2899332323U, 2899114357U, 2898895687U, 2898677891U, 2898458359U, 2898238669U, 2898022789U, 2897804407U, 2897587421U, 2897369021U, 2897150423U, 2896932589U, 2896714631U, 2896495643U, 2896278251U, 2896061459U, 2895842179U, 2895625609U, 2895408143U, 2895191393U, 2894976157U, 2894758709U, 2894538461U, 2894320211U, 2894101087U, 2893885381U, 2893666007U, 2893448681U, 2893230569U, 2893012403U, 2892794153U, 2892573601U, 2892357361U, 2892141401U, 2891924291U, 2891705197U, 2891485453U, 2891265869U, 2891046343U, 2890827241U, 2890611539U, 2890395037U, 2890176347U, 2889959197U, 2889741301U, 2889523193U, 2889304499U, 2889089393U, 2888872171U, 2888652913U, 2888435443U, 2888217103U, 2887998313U, 2887779967U, 2887561093U, 2887343237U, 2887123997U, 2886907081U, 2886689119U, 2886472033U, 2886253057U, 2886035473U, 2885816789U, 2885599417U, 2885384233U, 2885167091U, 2884947421U, 2884728403U, 2884511183U, 2884293637U, 2884076357U, 2883857357U, 2883636991U, 2883420959U, 2883205421U, 2882988211U, 2882768663U, 2882551601U, 2882332891U, 2882115923U, 2881893467U, 2881675499U, 2881460221U, 2881243067U, 2881026271U, 2880811447U, 2880592861U, 2880372919U, 2880155819U, 2879937503U, 2879719223U, 2879501707U, 2879284477U, 2879065151U, 2878847353U, 2878630171U, 2878412213U, 2878195469U, 2877978211U, 2877761027U, 2877542959U, 2877323003U, 2877103631U, 2876887777U, 2876669153U, 2876450789U, 2876234329U, 2876015969U, 2875798063U, 2875580219U, 2875359587U, 2875143757U, 2874924197U, 2874705727U, 2874488887U, 2874269987U, 2874053293U, 2873838833U, 2873621573U, 2873405077U, 2873184967U, 2872965317U, 2872747699U, 2872530079U, 2872311397U, 2872093027U, 2871876197U, 2871660371U, 2871442997U, 2871223709U, 2871006713U, 2870788931U, 2870569511U, 2870353319U, 2870136403U, 2869918537U, 2869699211U, 2869482403U, 2869264327U, 2869046833U, 2868829897U, 2868611561U, 2868394531U, 2868174143U, 2867957447U, 2867741813U, 2867525273U, 2867306537U, 2867087807U, 2866870037U, 2866650131U, 2866432507U, 2866214723U, 2865995389U, 2865779281U, 2865562759U, 2865345643U, 2865128281U, 2864909689U, 2864694359U, 2864474981U, 2864259109U, 2864041781U, 2863821967U, 2863603163U, 2863384697U, 2863168019U, 2862948337U, 2862729659U, 2862513271U, 2862296011U, 2862079601U, 2861861329U, 2861642369U, 2861425097U, 2861209789U, 2860995217U, 2860778423U, 2860561097U, 2860342603U, 2860123993U, 2859905843U, 2859688873U, 2859471767U, 2859252779U, 2859032731U, 2858814547U, 2858597117U, 2858380367U, 2858163197U, 2857943411U, 2857725271U, 2857506689U, 2857290773U, 2857072787U, 2856856927U, 2856636661U, 2856421241U, 2856205237U, 2855990087U, 2855772947U, 2855553373U, 2855333407U, 2855115623U, 2854898329U, 2854680739U, 2854464091U, 2854245203U, 2854025267U, 2853810433U, 2853595379U, 2853379457U, 2853160217U, 2852940071U, 2852723551U, 2852506303U, 2852289907U, 2852072389U, 2851854713U, 2851637123U, 2851420771U, 2851204067U, 2850984959U, 2850768589U, 2850549269U, 2850330421U, 2850111983U, 2849894777U, 2849677687U, 2849461753U, 2849245277U, 2849027833U, 2848809701U, 2848590973U, 2848374059U, 2848154471U, 2847936691U, 2847718589U, 2847501413U, 2847283139U, 2847064399U, 2846845681U, 2846630233U, 2846412451U, 2846195621U, 2845978997U, 2845761719U, 2845545929U, 2845328281U, 2845111153U, 2844894137U, 2844676819U, 2844457703U, 2844237833U, 2844020057U, 2843802061U, 2843583269U, 2843367311U, 2843148307U, 2842929931U, 2842712767U, 2842494803U, 2842276837U, 2842059893U, 2841843317U, 2841625249U, 2841405043U, 2841186893U, 2840966993U, 2840751341U, 2840533337U, 2840315887U, 2840099881U, 2839879993U, 2839663579U, 2839446527U, 2839227731U, 2839010423U, 2838792029U, 2838573323U, 2838357359U, 2838139411U, 2837920433U, 2837703611U, 2837486299U, 2837267611U, 2837049623U, 2836833059U, 2836613807U, 2836398179U, 2836180517U, 2835963887U, 2835744931U, 2835526247U, 2835309481U, 2835089911U, 2834871859U, 2834655797U, 2834437279U, 2834220317U, 2834003617U, 2833786201U, 2833565099U, 2833349143U, 2833132711U, 2832915803U, 2832695309U, 2832478303U, 2832259931U, 2832041741U, 2831822611U, 2831604649U, 2831385941U, 2831168953U, 2830949377U, 2830732193U, 2830514789U, 2830296191U, 2830078421U, 2829861907U, 2829645557U, 2829428501U, 2829210367U, 2828994253U, 2828776007U, 2828556517U, 2828338973U, 2828122361U, 2827905911U, 2827687451U, 2827470001U, 2827253929U, 2827036441U, 2826817351U, 2826600781U, 2826383321U, 2826165103U, 2825945599U, 2825728769U, 2825510437U, 2825292881U, 2825075599U, 2824857577U, 2824637267U, 2824421753U, 2824203383U, 2823985121U, 2823767741U, 2823552713U, 2823334027U, 2823115531U, 2822899567U, 2822681171U, 2822466149U, 2822249779U, 2822031559U, 2821815097U, 2821597187U, 2821377467U, 2821161307U, 2820944677U, 2820726023U, 2820509233U, 2820291787U, 2820074617U, 2819858617U, 2819639863U, 2819420909U, 2819204699U, 2818986097U, 2818769671U, 2818554127U, 2818338797U, 2818119323U, 2817902393U, 2817687143U, 2817470609U, 2817251677U, 2817033533U, 2816816729U, 2816597177U, 2816379701U, 2816161721U, 2815943177U, 2815724267U, 2815508719U, 2815292171U, 2815074161U, 2814855517U, 2814639523U, 2814424241U, 2814205813U, 2813989523U, 2813771789U, 2813553863U, 2813335013U, 2813118311U, 2812899511U, 2812682017U, 2812466269U, 2812247873U, 2812029713U, 2811814463U, 2811594971U, 2811377483U, 2811158557U, 2810940163U, 2810724047U, 2810504129U, 2810285299U, 2810067109U, 2809850917U, 2809632401U, 2809416563U, 2809198597U, 2808980641U, 2808761933U, 2808546109U, 2808327799U, 2808109763U, 2807892041U, 2807673161U, 2807455799U, 2807239129U, 2807021237U, 2806801457U, 2806581781U, 2806364989U, 2806148617U, 2805931031U, 2805715879U, 2805500573U, 2805283331U, 2805064187U, 2804847361U, 2804630473U, 2804413741U, 2804195767U, 2803975861U, 2803759481U, 2803540147U, 2803324603U, 2803107253U, 2802890353U, 2802672823U, 2802457183U, 2802239873U, 2802023131U, 2801805257U, 2801588953U, 2801372323U, 2801154773U, 2800937873U, 2800719839U, 2800502303U, 2800284107U, 2800066679U, 2799847909U, 2799629947U, 2799413213U, 2799194747U, 2798976953U, 2798757359U, 2798541121U, 2798323391U, 2798104747U, 2797889089U, 2797671869U, 2797455259U, 2797239293U, 2797022453U, 2796803531U, 2796585007U, 2796367729U, 2796151247U, 2795933939U, 2795714539U, 2795497283U, 2795280629U, 2795064541U, 2794846657U, 2794628513U, 2794411001U, 2794193641U, 2793974507U, 2793756883U, 2793538697U, 2793322783U, 2793104891U, 2792887567U, 2792669413U, 2792450077U, 2792234747U, 2792015983U, 2791799281U, 2791579949U, 2791362671U, 2791148117U, 2790929363U, 2790712147U, 2790494117U, 2790276341U, 2790057701U, 2789840201U, 2789622509U, 2789404531U, 2789187923U, 2788970959U, 2788753739U, 2788535047U, 2788317643U, 2788099129U, 2787883151U, 2787666533U, 2787448931U, 2787231721U, 2787014497U, 2786796839U, 2786578331U, 2786361649U, 2786144821U, 2785926443U, 2785709483U, 2785492691U, 2785276147U, 2785059701U, 2784842513U, 2784623269U, 2784403757U, 2784186253U, 2783970367U, 2783751689U, 2783533561U, 2783316001U, 2783098823U, 2782882673U, 2782664111U, 2782447223U, 2782229669U, 2782011607U, 2781792473U, 2781577033U, 2781359699U, 2781143957U, 2780925857U, 2780705443U, 2780487971U, 2780272037U, 2780052623U, 2779835621U, 2779620559U, 2779402261U, 2779184761U, 2778966361U, 2778750509U, 2778533341U, 2778314027U, 2778097499U, 2777877251U, 2777660539U, 2777443531U, 2777226589U, 2777009243U, 2776792973U, 2776576351U, 2776361117U, 2776143047U, 2775924847U, 2775707611U, 2775489313U, 2775272177U, 2775054169U, 2774836811U, 2774619791U, 2774401967U, 2774184313U, 2773966513U, 2773747181U, 2773530527U, 2773313149U, 2773095791U, 2772879017U, 2772660467U, 2772444667U, 2772228551U, 2772009767U, 2771792449U, 2771576581U, 2771359039U, 2771144221U, 2770927889U, 2770711787U, 2770494997U, 2770277231U, 2770058563U, 2769839873U, 2769624397U, 2769407651U, 2769188251U, 2768970991U, 2768754187U, 2768536579U, 2768319319U, 2768102431U, 2767887809U, 2767669573U, 2767451647U, 2767235123U, 2767018187U, 2766800807U, 2766583471U, 2766366329U, 2766148349U, 2765931257U, 2765713711U, 2765494453U, 2765279519U, 2765058767U, 2764841509U, 2764622239U, 2764406269U, 2764188703U, 2763970529U, 2763752401U, 2763533807U, 2763317149U, 2763100811U, 2762884231U, 2762668303U, 2762450149U, 2762230519U, 2762015407U, 2761798139U, 2761581419U, 2761365491U, 2761146097U, 2760927271U, 2760711053U, 2760493937U, 2760274871U, 2760056279U, 2759839081U, 2759621659U, 2759403499U, 2759183873U, 2758967117U, 2758749431U, 2758531091U, 2758312511U, 2758094869U, 2757875647U, 2757661289U, 2757443287U, 2757225577U, 2757009529U, 2756793001U, 2756576659U, 2756357939U, 2756141051U, 2755926427U, 2755708801U, 2755491989U, 2755275233U, 2755057649U, 2754840499U, 2754623321U, 2754407107U, 2754190189U, 2753970071U, 2753751277U, 2753533889U, 2753317397U, 2753098739U, 2752879889U, 2752663559U, 2752447129U, 2752230763U, 2752012477U, 2751795523U, 2751574817U, 2751359173U, 2751143231U, 2750927563U, 2750710201U, 2750494993U, 2750277767U, 2750058631U, 2749838719U, 2749621681U, 2749404323U, 2749186409U, 2748969491U, 2748754933U, 2748537481U, 2748318541U, 2748099931U, 2747881769U, 2747664079U, 2747446327U, 2747228923U, 2747009921U, 2746791577U, 2746574401U, 2746356461U, 2746139393U, 2745923597U, 2745705107U, 2745486259U, 2745268853U, 2745053603U, 2744837633U, 2744620103U, 2744402081U, 2744184061U, 2743965649U, 2743747399U, 2743529093U, 2743309747U, 2743091501U, 2742875263U, 2742657499U, 2742436849U, 2742221177U, 2742002209U, 2741784317U, 2741565467U, 2741350751U, 2741134939U, 2740917589U, 2740700147U, 2740484129U, 2740268543U, 2740051661U, 2739832097U, 2739613999U, 2739397519U, 2739180611U, 2738965601U, 2738750713U, 2738530519U, 2738312657U, 2738097601U, 2737880659U, 2737663919U, 2737447673U, 2737231039U, 2737011469U, 2736795203U, 2736577367U, 2736359929U, 2736140411U, 2735922361U, 2735707621U, 2735490701U, 2735272087U, 2735051993U, 2734834733U, 2734617673U, 2734399807U, 2734183789U, 2733964489U, 2733747299U, 2733531319U, 2733315773U, 2733096937U, 2732877229U, 2732659313U, 2732442539U, 2732224381U, 2732008493U, 2731791107U, 2731575277U, 2731359073U, 2731143791U, 2730927193U, 2730710711U, 2730492463U, 2730272821U, 2730056191U, 2729836853U, 2729618401U, 2729401309U, 2729183783U, 2728967399U, 2728750513U, 2728532957U, 2728316387U, 2728095649U, 2727876353U, 2727657487U, 2727441889U, 2727223129U, 2727005321U, 2726785889U, 2726567969U, 2726350567U, 2726134057U, 2725917767U, 2725702043U, 2725483997U, 2725265143U, 2725048691U, 2724834121U, 2724617173U, 2724400213U, 2724182843U, 2723963009U, 2723744983U, 2723527771U, 2723309219U, 2723091817U, 2722872419U, 2722654423U, 2722437283U, 2722221071U, 2722003787U, 2721787063U, 2721571087U, 2721354179U, 2721135533U, 2720918813U, 2720700211U, 2720482043U, 2720263867U, 2720045333U, 2719829513U, 2719610849U, 2719394527U, 2719178291U, 2718963449U, 2718746123U, 2718526709U, 2718310267U, 2718091331U, 2717873803U, 2717658043U, 2717440529U, 2717224541U, 2717007047U, 2716791377U, 2716572949U, 2716355051U, 2716137659U, 2715920573U, 2715704273U, 2715486167U, 2715267853U, 2715051109U, 2714833687U, 2714615261U, 2714398829U, 2714182301U, 2713964917U, 2713748071U, 2713530331U, 2713313419U, 2713095769U, 2712878431U, 2712662101U, 2712443231U, 2712227411U, 2712009089U, 2711793187U, 2711574529U, 2711360329U, 2711144291U, 2710924687U, 2710707551U, 2710489841U, 2710273571U, 2710057997U, 2709838841U, 2709622463U, 2709405917U, 2709186349U, 2708968877U, 2708750413U, 2708532971U, 2708318071U, 2708101423U, 2707882889U, 2707665913U, 2707449389U, 2707232833U, 2707015789U, 2706799423U, 2706580579U, 2706364931U, 2706147757U, 2705930971U, 2705712257U, 2705495677U, 2705279699U, 2705062303U, 2704846349U, 2704628477U, 2704412203U, 2704194443U, 2703975119U, 2703756427U, 2703538801U, 2703322967U, 2703105413U, 2702888407U, 2702670497U, 2702454919U, 2702235997U, 2702021737U, 2701801493U, 2701585729U, 2701367989U, 2701151581U, 2700934559U, 2700718619U, 2700500519U, 2700284057U, 2700067691U, 2699850661U, 2699632207U, 2699414203U, 2699197199U, 2698979867U, 2698763449U, 2698546423U, 2698328177U, 2698112723U, 2697894349U, 2697677911U, 2697461189U, 2697244709U, 2697028651U, 2696813281U, 2696594269U, 2696377417U, 2696159857U, 2695942259U, 2695726037U, 2695509877U, 2695293703U, 2695077029U, 2694857899U, 2694641657U, 2694426953U, 2694209863U, 2693992429U, 2693776999U, 2693558843U, 2693339317U, 2693121281U, 2692904281U, 2692687223U, 2692468787U, 2692252309U, 2692034089U, 2691819241U, 2691602107U, 2691383239U, 2691166903U, 2690948789U, 2690732003U, 2690515171U, 2690299373U, 2690081593U, 2689862561U, 2689645753U, 2689428227U, 2689209829U, 2688993607U, 2688777209U, 2688561017U, 2688343547U, 2688127933U, 2687911913U, 2687694539U, 2687476763U, 2687263067U, 2687049571U, 2686832471U, 2686615571U, 2686398347U, 2686179949U, 2685965081U, 2685747137U, 2685529541U, 2685310961U, 2685093211U, 2684876093U, 2684658019U, 2684440067U, 2684223953U, 2684005817U, 2683789963U, 2683571243U, 2683353733U, 2683137199U, 2682917623U, 2682700063U, 2682479377U, 2682264451U, 2682047707U, 2681828923U, 2681611753U, 2681394413U, 2681177111U, 2680959709U, 2680744291U, 2680525957U, 2680308977U, 2680096213U, 2679877279U, 2679660703U, 2679442013U, 2679225181U, 2679008639U, 2678791777U, 2678576051U, 2678358019U, 2678142487U, 2677926301U, 2677708807U, 2677493873U, 2677275257U, 2677055411U, 2676838837U, 2676620759U, 2676405769U, 2676189599U, 2675970641U, 2675755597U, 2675538689U, 2675323379U, 2675104633U, 2674886273U, 2674669183U, 2674452647U, 2674236199U, 2674019521U, 2673802099U, 2673589109U, 2673370517U, 2673153583U, 2672936393U, 2672719319U, 2672502383U, 2672285699U, 2672069171U, 2671851187U, 2671632563U, 2671414829U, 2671199281U, 2670982297U, 2670764023U, 2670547589U, 2670329219U, 2670112937U, 2669897969U, 2669681671U, 2669463829U, 2669247731U, 2669028689U, 2668810241U, 2668592911U, 2668377587U, 2668161701U, 2667945023U, 2667728057U, 2667510931U, 2667293077U, 2667076751U, 2666860253U, 2666643367U, 2666425523U, 2666207899U, 2665990751U, 2665773419U, 2665557353U, 2665337501U, 2665121737U, 2664904817U, 2664690073U, 2664472079U, 2664258323U, 2664039709U, 2663820461U, 2663602421U, 2663387431U, 2663168177U, 2662951507U, 2662735541U, 2662516147U, 2662300259U, 2662082509U, 2661865067U, 2661648779U, 2661432827U, 2661214163U, 2660999801U, 2660781689U, 2660562241U, 2660345951U, 2660127443U, 2659910443U, 2659691731U, 2659474313U, 2659255663U, 2659039301U, 2658822889U, 2658607327U, 2658391117U, 2658171743U, 2657953993U, 2657735627U, 2657519093U, 2657300533U, 2657084537U, 2656869827U, 2656653679U, 2656434799U, 2656218541U, 2656001609U, 2655785789U, 2655570427U, 2655354607U, 2655138589U, 2654923177U, 2654706149U, 2654489879U, 2654274641U, 2654055773U, 2653839263U, 2653621843U, 2653405831U, 2653189291U, 2652972197U, 2652754297U, 2652539249U, 2652321443U, 2652103859U, 2651884883U, 2651667787U, 2651451791U, 2651231629U, 2651014127U, 2650796653U, 2650580249U, 2650363361U, 2650147111U, 2649933037U, 2649715879U, 2649498611U, 2649282833U, 2649064001U, 2648847847U, 2648628863U, 2648409479U, 2648192941U, 2647976189U, 2647759267U, 2647543273U, 2647326169U, 2647110629U, 2646891629U, 2646675377U, 2646458467U, 2646241303U, 2646024781U, 2645808241U, 2645591363U, 2645373799U, 2645155729U, 2644938983U, 2644720241U, 2644505509U, 2644285547U, 2644068403U, 2643849823U, 2643632899U, 2643416371U, 2643198983U, 2642982389U, 2642764637U, 2642546867U, 2642330021U, 2642114309U, 2641897289U, 2641679903U, 2641464583U, 2641247107U, 2641030501U, 2640813577U, 2640595387U, 2640378677U, 2640158657U, 2639944249U, 2639727721U, 2639511683U, 2639296301U, 2639077267U, 2638858801U, 2638637987U, 2638423691U, 2638207669U, 2637992069U, 2637776507U, 2637558317U, 2637341431U, 2637125737U, 2636909777U, 2636691353U, 2636473793U, 2636255731U, 2636038121U, 2635820051U, 2635603241U, 2635384553U, 2635166099U, 2634948179U, 2634729767U, 2634513631U, 2634295421U, 2634078131U, 2633861851U, 2633645137U, 2633429243U, 2633212481U, 2632993633U, 2632775279U, 2632558007U, 2632341337U, 2632126339U, 2631908537U, 2631692597U, 2631477319U, 2631259781U, 2631043561U, 2630828731U, 2630613143U, 2630397893U, 2630179499U, 2629962739U, 2629744907U, 2629529321U, 2629310449U, 2629091953U, 2628874163U, 2628659393U, 2628440917U, 2628222629U, 2628006571U, 2627789387U, 2627571263U, 2627356183U, 2627139131U, 2626923749U, 2626706723U, 2626490747U, 2626273151U, 2626054199U, 2625836069U, 2625621469U, 2625405073U, 2625186331U, 2624968571U, 2624753177U, 2624536573U, 2624318867U, 2624102137U, 2623886479U, 2623670167U, 2623450667U, 2623233539U, 2623015669U, 2622798911U, 2622582203U, 2622365293U, 2622146899U, 2621929019U, 2621714273U, 2621497343U, 2621280383U, 2621064059U, 2620847813U, 2620631471U, 2620414429U, 2620198877U, 2619982487U, 2619765787U, 2619550579U, 2619333139U, 2619116081U, 2618899931U, 2618682371U, 2618463889U, 2618248037U, 2618032909U, 2617816303U, 2617598407U, 2617381099U, 2617163711U, 2616947087U, 2616730153U, 2616515873U, 2616296401U, 2616081211U, 2615863463U, 2615646091U, 2615429951U, 2615214491U, 2614996649U, 2614780747U, 2614561129U, 2614343869U, 2614125539U, 2613909959U, 2613692597U, 2613477539U, 2613260467U, 2613044363U, 2612829473U, 2612611453U, 2612394649U, 2612176891U, 2611957609U, 2611740809U, 2611525001U, 2611307623U, 2611092301U, 2610874723U, 2610658429U, 2610440659U, 2610225349U, 2610009869U, 2609793761U, 2609575523U, 2609357537U, 2609140153U, 2608923287U, 2608707473U, 2608489789U, 2608273363U, 2608055477U, 2607838963U, 2607621487U, 2607403291U, 2607186877U, 2606966951U, 2606751743U, 2606533609U, 2606317411U, 2606100793U, 2605883897U, 2605667153U, 2605448753U, 2605231193U, 2605014913U, 2604797309U, 2604582131U, 2604366593U, 2604149179U, 2603934233U, 2603717729U, 2603502661U, 2603284571U, 2603067263U, 2602846133U, 2602629787U, 2602412567U, 2602195759U, 2601979477U, 2601761791U, 2601547447U, 2601328687U, 2601107869U, 2600891873U, 2600673967U, 2600457787U, 2600242111U, 2600025353U, 2599807471U, 2599589617U, 2599374607U, 2599156873U, 2598942991U, 2598725593U, 2598507889U, 2598293911U, 2598075091U, 2597857697U, 2597643011U, 2597426287U, 2597207407U, 2596990943U, 2596775537U, 2596557989U, 2596340353U, 2596123469U, 2595906763U, 2595690697U, 2595473267U, 2595256019U, 2595041297U, 2594823029U, 2594608529U, 2594391979U, 2594174971U, 2593957823U, 2593739803U, 2593521767U, 2593305053U, 2593087513U, 2592871531U, 2592654041U, 2592437929U, 2592221161U, 2592003863U, 2591787493U, 2591571179U, 2591355859U, 2591139919U, 2590921727U, 2590705829U, 2590488157U, 2590272709U, 2590057949U, 2589843371U, 2589624967U, 2589408167U, 2589194147U, 2588976583U, 2588759923U, 2588542763U, 2588325721U, 2588107619U, 2587892101U, 2587675567U, 2587460251U, 2587244389U, 2587025141U, 2586807149U, 2586590401U, 2586374317U, 2586158693U, 2585941643U, 2585722697U, 2585505907U, 2585290069U, 2585072767U, 2584855279U, 2584640579U, 2584422497U, 2584204607U, 2583990001U, 2583773659U, 2583555721U, 2583338327U, 2583121259U, 2582905651U, 2582688041U, 2582469793U, 2582254019U, 2582037103U, 2581820699U, 2581606201U, 2581389763U, 2581174697U, 2580956501U, 2580739171U, 2580522377U, 2580305843U, 2580090167U, 2579872481U, 2579656291U, 2579442023U, 2579223007U, 2579006891U, 2578788097U, 2578569919U, 2578353559U, 2578136993U, 2577920299U, 2577706259U, 2577488027U, 2577272167U, 2577055669U, 2576837143U, 2576619973U, 2576404241U, 2576188333U, 2575971793U, 2575754497U, 2575538299U, 2575321747U, 2575105031U, 2574888223U, 2574672091U, 2574456811U, 2574239957U, 2574024287U, 2573808011U, 2573590927U, 2573375023U, 2573157761U, 2572940339U, 2572723019U, 2572506899U, 2572292279U, 2572077103U, 2571858599U, 2571642473U, 2571425821U, 2571208529U, 2570990369U, 2570773441U, 2570559869U, 2570342717U, 2570124047U, 2569905977U, 2569691791U, 2569474489U, 2569259047U, 2569043497U, 2568826747U, 2568610543U, 2568394487U, 2568177319U, 2567960729U, 2567743853U, 2567527723U, 2567312149U, 2567094511U, 2566876579U, 2566660301U, 2566443881U, 2566226821U, 2566010947U, 2565794353U, 2565579977U, 2565364231U, 2565146569U, 2564930507U, 2564713583U, 2564498843U, 2564283143U, 2564066677U, 2563849087U, 2563634039U, 2563419293U, 2563201339U, 2562985517U, 2562768883U, 2562550747U, 2562331649U, 2562114743U, 2561899009U, 2561684717U, 2561469901U, 2561252557U, 2561036551U, 2560819993U, 2560600963U, 2560383131U, 2560163939U, 2559947333U, 2559732017U, 2559515687U, 2559298571U, 2559083963U, 2558866837U, 2558650291U, 2558433401U, 2558218781U, 2558002897U, 2557785821U, 2557567981U, 2557350097U, 2557134737U, 2556919997U, 2556701327U, 2556484211U, 2556267677U, 2556051929U, 2555837747U, 2555622319U, 2555406457U, 2555188639U, 2554971443U, 2554754921U, 2554539539U, 2554320997U, 2554104451U, 2553889699U, 2553674129U, 2553456461U, 2553239069U, 2553022207U, 2552804363U, 2552586833U, 2552373497U, 2552154617U, 2551939211U, 2551722221U, 2551507171U, 2551289401U, 2551072441U, 2550854513U, 2550637459U, 2550422011U, 2550204619U, 2549989213U, 2549772451U, 2549556367U, 2549344409U, 2549126737U, 2548911913U, 2548696739U, 2548480237U, 2548263559U, 2548045919U, 2547829759U, 2547611191U, 2547396581U, 2547179527U, 2546962577U, 2546746981U, 2546529199U, 2546312413U, 2546095631U, 2545880399U, 2545664809U, 2545449493U, 2545232681U, 2545014881U, 2544797323U, 2544580949U, 2544362081U, 2544144749U, 2543927899U, 2543710349U, 2543493541U, 2543278021U, 2543058757U, 2542841729U, 2542624603U, 2542408513U, 2542191709U, 2541975707U, 2541759137U, 2541542141U, 2541326009U, 2541111257U, 2540896591U, 2540679419U, 2540462593U, 2540246953U, 2540030399U, 2539813907U, 2539596281U, 2539379419U, 2539161697U, 2538945569U, 2538728831U, 2538513301U, 2538297287U, 2538080243U, 2537864347U, 2537649151U, 2537433263U, 2537217229U, 2537001541U, 2536784311U, 2536567823U, 2536351751U, 2536135703U, 2535920071U, 2535703109U, 2535485651U, 2535267913U, 2535049381U, 2534835071U, 2534618899U, 2534401141U, 2534184743U, 2533968511U, 2533751977U, 2533535057U, 2533319801U, 2533103939U, 2532889717U, 2532672287U, 2532458581U, 2532240527U, 2532024263U, 2531808221U, 2531594033U, 2531375533U, 2531159747U, 2530945583U, 2530728091U, 2530510111U, 2530291601U, 2530076701U, 2529860363U, 2529644539U, 2529427169U, 2529210923U, 2528994893U, 2528778227U, 2528561443U, 2528344967U, 2528129983U, 2527914227U, 2527697857U, 2527483549U, 2527265941U, 2527048369U, 2526831781U, 2526617609U, 2526401041U, 2526186511U, 2525969521U, 2525751269U, 2525536837U, 2525319001U, 2525102543U, 2524883839U, 2524667221U, 2524449793U, 2524233617U, 2524016647U, 2523800459U, 2523584641U, 2523368747U, 2523151927U, 2522932883U, 2522717297U, 2522499653U, 2522283347U, 2522067281U, 2521852183U, 2521635689U, 2521420529U, 2521202821U, 2520984749U, 2520769301U, 2520551983U, 2520337163U, 2520121147U, 2519904151U, 2519687407U, 2519469941U, 2519254519U, 2519038309U, 2518820833U, 2518604357U, 2518386329U, 2518171613U, 2517954631U, 2517740233U, 2517524573U, 2517306587U, 2517091133U, 2516875549U, 2516659099U, 2516440349U, 2516223511U, 2516009189U, 2515791953U, 2515574741U, 2515356967U, 2515140851U, 2514925321U, 2514708857U, 2514492941U, 2514278527U, 2514060737U, 2513844511U, 2513629211U, 2513413999U, 2513197331U, 2512982491U, 2512767919U, 2512550039U, 2512333891U, 2512118659U, 2511902051U, 2511683351U, 2511466921U, 2511249691U, 2511035069U, 2510818363U, 2510602331U, 2510385959U, 2510168447U, 2509952597U, 2509736107U, 2509518721U, 2509301233U, 2509086889U, 2508870779U, 2508654017U, 2508436187U, 2508220999U, 2508004423U, 2507788471U, 2507572759U, 2507358193U, 2507142773U, 2506926857U, 2506708901U, 2506492003U, 2506275773U, 2506059841U, 2505843227U, 2505628639U, 2505412999U, 2505197309U, 2504978291U, 2504764349U, 2504546719U, 2504331703U, 2504116333U, 2503900211U, 2503686869U, 2503468057U, 2503251931U, 2503034987U, 2502819383U, 2502601529U, 2502383761U, 2502165307U, 2501950663U, 2501732017U, 2501516429U, 2501298523U, 2501082677U, 2500865963U, 2500651249U, 2500433521U, 2500215791U, 2499999013U, 2499784513U, 2499566551U, 2499348193U, 2499133477U, 2498919091U, 2498700949U, 2498484803U, 2498268767U, 2498051131U, 2497835203U, 2497619143U, 2497401107U, 2497185151U, 2496967981U, 2496751651U, 2496536257U, 2496318859U, 2496101129U, 2495884337U, 2495667091U, 2495449483U, 2495234069U, 2495015851U, 2494798981U, 2494586071U, 2494369567U, 2494153777U, 2493936787U, 2493720041U, 2493503279U, 2493288713U, 2493072847U, 2492855327U, 2492639627U, 2492424367U, 2492206993U, 2491988657U, 2491772527U, 2491556789U, 2491340471U, 2491123897U, 2490906919U, 2490690511U, 2490473023U, 2490256157U, 2490039371U, 2489824397U, 2489606737U, 2489386771U, 2489169691U, 2488953791U, 2488738607U, 2488524167U, 2488307113U, 2488089367U, 2487872069U, 2487655309U, 2487439177U, 2487224461U, 2487006499U, 2486788963U, 2486573101U, 2486356783U, 2486139791U, 2485923217U, 2485705493U, 2485487957U, 2485271471U, 2485052771U, 2484839933U, 2484624929U, 2484408247U, 2484192527U, 2483973307U, 2483759609U, 2483543987U, 2483328161U, 2483109467U, 2482893463U, 2482675901U, 2482457161U, 2482241299U, 2482026611U, 2481810781U, 2481595201U, 2481379739U, 2481163543U, 2480947769U, 2480731301U, 2480516641U, 2480302337U, 2480086997U, 2479867427U, 2479650223U, 2479434857U, 2479215799U, 2479001621U, 2478785357U, 2478571189U, 2478356417U, 2478141383U, 2477923397U, 2477707373U, 2477488961U, 2477271481U, 2477057941U, 2476842673U, 2476624159U, 2476409263U, 2476193219U, 2475977579U, 2475761023U, 2475543029U, 2475328783U, 2475110999U, 2474890879U, 2474674327U, 2474459227U, 2474244041U, 2474029147U, 2473812701U, 2473596403U, 2473381349U, 2473165927U, 2472951167U, 2472735413U, 2472520727U, 2472307091U, 2472091723U, 2471874173U, 2471656697U, 2471441579U, 2471224237U, 2471006873U, 2470790431U, 2470575083U, 2470358629U, 2470143691U, 2469927209U, 2469711271U, 2469499757U, 2469281999U, 2469064889U, 2468847947U, 2468629519U, 2468413229U, 2468197247U, 2467983239U, 2467766527U, 2467549933U, 2467333889U, 2467116077U, 2466900307U, 2466683279U, 2466465941U, 2466249673U, 2466036497U, 2465821507U, 2465604553U, 2465388727U, 2465172733U, 2464957717U, 2464740137U, 2464523959U, 2464308311U, 2464091587U, 2463874783U, 2463659027U, 2463441269U, 2463225563U, 2463010027U, 2462791873U, 2462574523U, 2462356487U, 2462139853U, 2461922713U, 2461706603U, 2461490771U, 2461272043U, 2461055423U, 2460842491U, 2460624181U, 2460409169U, 2460192541U, 2459976229U, 2459758421U, 2459540911U, 2459325443U, 2459107793U, 2458892551U, 2458677601U, 2458461193U, 2458243223U, 2458027157U, 2457811933U, 2457594323U, 2457378923U, 2457161789U, 2456946269U, 2456730629U, 2456513639U, 2456297149U, 2456079463U, 2455863857U, 2455649191U, 2455433069U, 2455218023U, 2455004333U, 2454788311U, 2454571607U, 2454356581U, 2454139231U, 2453920571U, 2453704789U, 2453488979U, 2453271463U, 2453054039U, 2452840781U, 2452623821U, 2452410967U, 2452195063U, 2451976601U, 2451763159U, 2451547559U, 2451331549U, 2451116651U, 2450900741U, 2450682943U, 2450465513U, 2450249993U, 2450033627U, 2449816027U, 2449597919U, 2449381289U, 2449162117U, 2448946469U, 2448729883U, 2448513373U, 2448294643U, 2448077341U, 2447859991U, 2447646029U, 2447430317U, 2447215081U, 2446995403U, 2446778861U, 2446563043U, 2446347913U, 2446130653U, 2445914279U, 2445699913U, 2445483571U, 2445267343U, 2445053797U, 2444836921U, 2444622311U, 2444408423U, 2444189777U, 2443974557U, 2443759229U, 2443540247U, 2443324393U, 2443106177U, 2442890503U, 2442673561U, 2442456791U, 2442241667U, 2442025237U, 2441808221U, 2441594489U, 2441376631U, 2441160893U, 2440945873U, 2440728361U, 2440510843U, 2440294657U, 2440080157U, 2439865657U, 2439651391U, 2439433319U, 2439217799U, 2439004261U, 2438787661U, 2438570569U, 2438355421U, 2438138531U, 2437923409U, 2437707127U, 2437492373U, 2437275517U, 2437061327U, 2436844313U, 2436629971U, 2436414881U, 2436198631U, 2435981077U, 2435762471U, 2435546731U, 2435333387U, 2435115047U, 2434897891U, 2434683133U, 2434464391U, 2434247779U, 2434031381U, 2433816977U, 2433598367U, 2433382891U, 2433166579U, 2432951363U, 2432734259U, 2432519267U, 2432303207U, 2432088437U, 2431871549U, 2431654009U, 2431438567U, 2431222883U, 2431004551U, 2430789007U, 2430572239U, 2430357899U, 2430140243U, 2429923631U, 2429708647U, 2429490697U, 2429277119U, 2429059631U, 2428841551U, 2428626203U, 2428410749U, 2428193741U, 2427976979U, 2427760243U, 2427542993U, 2427328229U, 2427113081U, 2426897147U, 2426680747U, 2426465647U, 2426250041U, 2426034613U, 2425818701U, 2425601929U, 2425385723U, 2425169891U, 2424956221U, 2424741701U, 2424525161U, 2424310661U, 2424093157U, 2423875841U, 2423659657U, 2423445293U, 2423230783U, 2423015821U, 2422799177U, 2422585771U, 2422367743U, 2422152179U, 2421936493U, 2421719873U, 2421503983U, 2421287081U, 2421068899U, 2420852347U, 2420636627U, 2420420903U, 2420204023U, 2419987799U, 2419771187U, 2419554157U, 2419338787U, 2419124819U, 2418907529U, 2418693047U, 2418479549U, 2418264571U, 2418048331U, 2417831257U, 2417614807U, 2417399119U, 2417184257U, 2416967611U, 2416752409U, 2416536271U, 2416319387U, 2416105057U, 2415886301U, 2415670069U, 2415453023U, 2415235709U, 2415018433U, 2414803031U, 2414586983U, 2414370943U, 2414155213U, 2413940083U, 2413723471U, 2413506059U, 2413290541U, 2413073251U, 2412857789U, 2412643193U, 2412426707U, 2412211163U, 2411993867U, 2411776583U, 2411562311U, 2411345479U, 2411129923U, 2410914791U, 2410699133U, 2410481377U, 2410266007U, 2410048829U, 2409832129U, 2409617663U, 2409401249U, 2409184651U, 2408968189U, 2408751419U, 2408534461U, 2408320127U, 2408104597U, 2407888957U, 2407671853U, 2407458671U, 2407241731U, 2407025459U, 2406810563U, 2406592847U, 2406378241U, 2406160049U, 2405944223U, 2405727229U, 2405511811U, 2405297623U, 2405082629U, 2404866197U, 2404648957U, 2404432183U, 2404215091U, 2403999487U, 2403782401U, 2403567059U, 2403350249U, 2403134623U, 2402919731U, 2402704211U, 2402489473U, 2402272571U, 2402054147U, 2401837289U, 2401621687U, 2401406131U, 2401189979U, 2400973123U, 2400757439U, 2400539651U, 2400323077U, 2400105919U, 2399889293U, 2399675141U, 2399460449U, 2399245733U, 2399029231U, 2398813981U, 2398597219U, 2398379413U, 2398164833U, 2397948569U, 2397732923U, 2397515801U, 2397299549U, 2397085021U, 2396867801U, 2396653109U, 2396435089U, 2396217739U, 2395999153U, 2395783231U, 2395566959U, 2395350827U, 2395135343U, 2394920179U, 2394702979U, 2394486719U, 2394270059U, 2394055669U, 2393840479U, 2393622653U, 2393406401U, 2393190893U, 2392975477U, 2392759277U, 2392544101U, 2392327433U, 2392113121U, 2391896839U, 2391678997U, 2391461393U, 2391247091U, 2391031847U, 2390816957U, 2390600393U, 2390384861U, 2390168317U, 2389953641U, 2389736719U, 2389520779U, 2389304989U, 2389091333U, 2388874603U, 2388658969U, 2388442499U, 2388225803U, 2388006067U, 2387791751U, 2387577977U, 2387360413U, 2387144453U, 2386930687U, 2386714199U, 2386497403U, 2386279781U, 2386064861U, 2385851509U, 2385635543U, 2385420431U, 2385202607U, 2384985487U, 2384769461U, 2384554421U, 2384337071U, 2384122519U, 2383906543U, 2383692127U, 2383476829U, 2383262647U, 2383047829U, 2382830459U, 2382615419U, 2382400133U, 2382184537U, 2381968223U, 2381751839U, 2381535539U, 2381318791U, 2381103733U, 2380886887U, 2380673297U, 2380455919U, 2380238759U, 2380021361U, 2379807751U, 2379591671U, 2379377153U, 2379160853U, 2378944891U, 2378727539U, 2378510513U, 2378293279U, 2378076593U, 2377861237U, 2377644917U, 2377429697U, 2377213193U, 2376996647U, 2376782251U, 2376566029U, 2376349571U, 2376133733U, 2375919907U, 2375704391U, 2375485579U, 2375270591U, 2375054579U, 2374837373U, 2374621817U, 2374406971U, 2374192853U, 2373976057U, 2373760531U, 2373545989U, 2373327241U, 2373111347U, 2372894317U, 2372680469U, 2372464907U, 2372249629U, 2372032771U, 2371818637U, 2371601437U, 2371383727U, 2371168507U, 2370952511U, 2370736603U, 2370518873U, 2370304579U, 2370089479U, 2369872579U, 2369658763U, 2369441329U, 2369224889U, 2369010191U, 2368793017U, 2368578991U, 2368362539U, 2368147211U, 2367932341U, 2367716921U, 2367502859U, 2367286853U, 2367071513U, 2366857811U, 2366642171U, 2366426123U, 2366209843U, 2365994641U, 2365779181U, 2365561397U, 2365345733U, 2365130297U, 2364913519U, 2364698551U, 2364482947U, 2364266941U, 2364048899U, 2363831777U, 2363616797U, 2363399443U, 2363185907U, 2362970219U, 2362753663U, 2362538753U, 2362325137U, 2362108759U, 2361891607U, 2361677057U, 2361460697U, 2361244889U, 2361029521U, 2360811251U, 2360593589U, 2360377871U, 2360160973U, 2359944163U, 2359729637U, 2359513753U, 2359298749U, 2359081141U, 2358864077U, 2358647191U, 2358433151U, 2358217307U, 2358002501U, 2357786393U, 2357572391U, 2357355223U, 2357140127U, 2356922443U, 2356706927U, 2356491167U, 2356276309U, 2356060219U, 2355843337U, 2355628351U, 2355412211U, 2355196939U, 2354979299U, 2354762923U, 2354547589U, 2354332327U, 2354116403U, 2353898347U, 2353682899U, 2353467719U, 2353251041U, 2353034861U, 2352821521U, 2352608729U, 2352391733U, 2352177071U, 2351959373U, 2351743871U, 2351527331U, 2351311103U, 2351095787U, 2350880537U, 2350663867U, 2350448987U, 2350233607U, 2350018009U, 2349802193U, 2349585643U, 2349371473U, 2349154459U, 2348938483U, 2348723393U, 2348506163U, 2348290627U, 2348073529U, 2347858001U, 2347641251U, 2347426061U, 2347210109U, 2346994847U, 2346777833U, 2346563741U, 2346347957U, 2346130597U, 2345915233U, 2345700967U, 2345483321U, 2345268559U, 2345055421U, 2344836029U, 2344620749U, 2344404077U, 2344188467U, 2343971621U, 2343753989U, 2343537377U, 2343322691U, 2343106237U, 2342889763U, 2342675663U, 2342461337U, 2342245693U, 2342028907U, 2341811071U, 2341594513U, 2341380673U, 2341165823U, 2340950653U, 2340737603U, 2340521567U, 2340303299U, 2340086269U, 2339869699U, 2339651581U, 2339437049U, 2339222891U, 2339007247U, 2338790449U, 2338576003U, 2338361213U, 2338146329U, 2337927731U, 2337714713U, 2337499061U, 2337281887U, 2337065981U, 2336851397U, 2336635331U, 2336418673U, 2336202863U, 2335987399U, 2335772269U, 2335553713U, 2335341083U, 2335126153U, 2334909481U, 2334693863U, 2334479723U, 2334262787U, 2334047503U, 2333831449U, 2333616709U, 2333401867U, 2333186161U, 2332970869U, 2332755569U, 2332541017U, 2332323197U, 2332106743U, 2331891473U, 2331676169U, 2331460273U, 2331243809U, 2331029143U, 2330814481U, 2330599837U, 2330384489U, 2330164511U, 2329947589U, 2329731637U, 2329515427U, 2329299289U, 2329084333U, 2328867469U, 2328652009U, 2328436417U, 2328218201U, 2328001597U, 2327784983U, 2327571221U, 2327354473U, 2327138579U, 2326921769U, 2326706687U, 2326492871U, 2326275509U, 2326060369U, 2325845507U, 2325630133U, 2325415607U, 2325198173U, 2324982083U, 2324766023U, 2324552177U, 2324336591U, 2324119951U, 2323903651U, 2323689751U, 2323472693U, 2323258859U, 2323044107U, 2322827393U, 2322611059U, 2322394247U, 2322179177U, 2321964247U, 2321747737U, 2321531423U, 2321315869U, 2321098673U, 2320883861U, 2320668953U, 2320454753U, 2320239629U, 2320027529U, 2319811937U, 2319596449U, 2319378899U, 2319162739U, 2318945131U, 2318727809U, 2318510639U, 2318296021U, 2318078921U, 2317863337U, 2317645181U, 2317427533U, 2317209683U, 2316994513U, 2316778027U, 2316562777U, 2316347219U, 2316132769U, 2315916809U, 2315702513U, 2315487613U, 2315271197U, 2315055979U, 2314841521U, 2314625671U, 2314411019U, 2314197409U, 2313983249U, 2313767077U, 2313551609U, 2313335711U, 2313119387U, 2312904719U, 2312689363U, 2312472829U, 2312256629U, 2312040277U, 2311822883U, 2311606477U, 2311392157U, 2311180061U, 2310965303U, 2310751957U, 2310537049U, 2310322247U, 2310106033U, 2309889749U, 2309673881U, 2309456431U, 2309242093U, 2309026361U, 2308810601U, 2308595363U, 2308379243U, 2308164263U, 2307949739U, 2307733583U, 2307514733U, 2307299173U, 2307083393U, 2306868197U, 2306651671U, 2306436793U, 2306223461U, 2306007931U, 2305792133U, 2305573537U, 2305358221U, 2305141999U, 2304925529U, 2304710599U, 2304495799U, 2304279137U, 2304063901U, 2303847761U, 2303633251U, 2303417483U, 2303201833U, 2302986457U, 2302770469U, 2302556077U, 2302338421U, 2302121279U, 2301906433U, 2301689417U, 2301475069U, 2301260047U, 2301042587U, 2300826287U, 2300609203U, 2300394193U, 2300180731U, 2299964179U, 2299748471U, 2299534609U, 2299320679U, 2299105141U, 2298888577U, 2298672281U, 2298456929U, 2298242797U, 2298027227U, 2297811077U, 2297594521U, 2297378177U, 2297160329U, 2296945369U, 2296729447U, 2296513621U, 2296300339U, 2296084877U, 2295871601U, 2295656147U, 2295440813U, 2295224741U, 2295008923U, 2294792809U, 2294578633U, 2294364481U, 2294148251U, 2293932703U, 2293718041U, 2293502089U, 2293287109U, 2293071899U, 2292855451U, 2292641287U, 2292422921U, 2292208781U, 2291993437U, 2291777737U, 2291564321U, 2291348981U, 2291133973U, 2290918037U, 2290702693U, 2290489129U, 2290270789U, 2290053737U, 2289838373U, 2289621101U, 2289405653U, 2289190741U, 2288976737U, 2288762257U, 2288547733U, 2288330609U, 2288117243U, 2287900829U, 2287686169U, 2287468607U, 2287251751U, 2287037479U, 2286824389U, 2286608047U, 2286394637U, 2286182329U, 2285966717U, 2285752123U, 2285536247U, 2285320237U, 2285106023U, 2284891771U, 2284674407U, 2284457257U, 2284241537U, 2284026853U, 2283811573U, 2283596327U, 2283380261U, 2283161161U, 2282946331U, 2282730977U, 2282518223U, 2282301737U, 2282084897U, 2281870651U, 2281654673U, 2281437143U, 2281221827U, 2281004771U, 2280789233U, 2280573557U, 2280359363U, 2280142591U, 2279927491U, 2279711261U, 2279494291U, 2279276653U, 2279060527U, 2278846901U, 2278628909U, 2278411781U, 2278196407U, 2277980993U, 2277763753U, 2277549089U, 2277334771U, 2277118411U, 2276902399U, 2276688613U, 2276472853U, 2276256329U, 2276042711U, 2275828517U, 2275612679U, 2275397063U, 2275181479U, 2274965159U, 2274748517U, 2274535463U, 2274319609U, 2274107327U, 2273891549U, 2273676997U, 2273462767U, 2273248399U, 2273032639U, 2272818917U, 2272605253U, 2272389437U, 2272172081U, 2271957209U, 2271743939U, 2271528041U, 2271313729U, 2271098429U, 2270884471U, 2270669353U, 2270455567U, 2270240681U, 2270025151U, 2269809527U, 2269596941U, 2269382131U, 2269165319U, 2268951577U, 2268735797U, 2268517921U, 2268302123U, 2268086111U, 2267870603U, 2267656903U, 2267442757U, 2267227777U, 2267012081U, 2266797487U, 2266582793U, 2266368007U, 2266153339U, 2265938137U, 2265722351U, 2265506083U, 2265290141U, 2265075049U, 2264860427U, 2264644769U, 2264428451U, 2264214773U, 2263997711U, 2263782289U, 2263565729U, 2263352327U, 2263137001U, 2262920839U, 2262705761U, 2262492191U, 2262278069U, 2262062813U, 2261848051U, 2261633197U, 2261418409U, 2261204657U, 2260990273U, 2260774759U, 2260560277U, 2260345247U, 2260129169U, 2259914563U, 2259700207U, 2259484361U, 2259267151U, 2259053309U, 2258839753U, 2258625431U, 2258409821U, 2258192591U, 2257975997U, 2257761001U, 2257544407U, 2257329817U, 2257113083U, 2256895787U, 2256679597U, 2256466463U, 2256251911U, 2256035759U, 2255819249U, 2255604433U, 2255387119U, 2255171729U, 2254957261U, 2254742569U, 2254525633U, 2254311419U, 2254096151U, 2253881089U, 2253665009U, 2253448303U, 2253232537U, 2253017629U, 2252801377U, 2252586353U, 2252370139U, 2252154943U, 2251940153U, 2251724287U, 2251508141U, 2251293211U, 2251080107U, 2250864989U, 2250650741U, 2250437317U, 2250221147U, 2250007937U, 2249792849U, 2249577443U, 2249360747U, 2249143511U, 2248928303U, 2248714289U, 2248500389U, 2248282607U, 2248066363U, 2247851681U, 2247636583U, 2247421817U, 2247207073U, 2246990947U, 2246775449U, 2246560403U, 2246348051U, 2246132507U, 2245917799U, 2245703177U, 2245488887U, 2245273741U, 2245058089U, 2244843721U, 2244629719U, 2244412999U, 2244197437U, 2243982737U, 2243769653U, 2243551433U, 2243337457U, 2243120419U, 2242904581U, 2242688449U, 2242473991U, 2242259861U, 2242043599U, 2241825133U, 2241609701U, 2241395071U, 2241180787U, 2240967343U, 2240751923U, 2240536327U, 2240319527U, 2240105237U, 2239888687U, 2239674629U, 2239458203U, 2239244101U, 2239028387U, 2238815521U, 2238600541U, 2238383569U, 2238167417U, 2237952851U, 2237735261U, 2237518081U, 2237301083U, 2237088229U, 2236873019U, 2236658693U, 2236444453U, 2236229201U, 2236016201U, 2235800159U, 2235586427U, 2235370021U, 2235154721U, 2234939537U, 2234725013U, 2234510909U, 2234295191U, 2234081099U, 2233866847U, 2233652459U, 2233436629U, 2233218679U, 2233003183U, 2232789619U, 2232571813U, 2232355067U, 2232138367U, 2231922923U, 2231708449U, 2231493413U, 2231277413U, 2231061221U, 2230846967U, 2230632791U, 2230417751U, 2230201531U, 2229985133U, 2229769579U, 2229554461U, 2229340651U, 2229128767U, 2228912453U, 2228698319U, 2228481883U, 2228267953U, 2228051513U, 2227836329U, 2227622203U, 2227408321U, 2227192519U, 2226974441U, 2226760573U, 2226547241U, 2226332261U, 2226116807U, 2225900503U, 2225684207U, 2225468123U, 2225253677U, 2225039759U, 2224826473U, 2224610537U, 2224393937U, 2224179077U, 2223962707U, 2223747133U, 2223531173U, 2223316279U, 2223098953U, 2222882659U, 2222668169U, 2222453179U, 2222236673U, 2222020433U, 2221805137U, 2221591007U, 2221375883U, 2221160077U, 2220945563U, 2220729323U, 2220513517U, 2220299443U, 2220085447U, 2219871361U, 2219657239U, 2219440397U, 2219226643U, 2219013089U, 2218798327U, 2218581803U, 2218365979U, 2218151977U, 2217936223U, 2217720587U, 2217503231U, 2217288769U, 2217073951U, 2216859137U, 2216643199U, 2216429123U, 2216217607U, 2216003639U, 2215785851U, 2215570163U, 2215356079U, 2215137607U, 2214921911U, 2214707081U, 2214490303U, 2214276599U, 2214059119U, 2213841127U, 2213626687U, 2213409799U, 2213195329U, 2212980269U, 2212766779U, 2212554011U, 2212339553U, 2212125329U, 2211910373U, 2211695159U, 2211479729U, 2211262793U, 2211046499U, 2210831927U, 2210615761U, 2210401003U, 2210185847U, 2209971091U, 2209755451U, 2209536949U, 2209322803U, 2209108799U, 2208892547U, 2208677441U, 2208463339U, 2208247117U, 2208034453U, 2207819147U, 2207604541U, 2207391643U, 2207176733U, 2206959901U, 2206745909U, 2206531433U, 2206317367U, 2206101241U, 2205886327U, 2205671543U, 2205456833U, 2205243319U, 2205027023U, 2204811307U, 2204595641U, 2204379659U, 2204165801U, 2203948541U, 2203733117U, 2203517681U, 2203300223U, 2203086371U, 2202871961U, 2202654689U, 2202436493U, 2202221279U, 2202004547U, 2201791373U, 2201574377U, 2201360167U, 2201145061U, 2200928497U, 2200714381U, 2200498441U, 2200281751U, 2200068601U, 2199853559U, 2199635749U, 2199418691U, 2199204421U, 2198990219U, 2198773793U, 2198559829U, 2198343977U, 2198127923U, 2197912859U, 2197698263U, 2197483471U, 2197269587U, 2197052761U, 2196839891U, 2196623977U, 2196407699U, 2196193177U, 2195978129U, 2195763049U, 2195548093U, 2195333801U, 2195118769U, 2194903967U, 2194689127U, 2194475233U, 2194259981U, 2194045093U, 2193829657U, 2193615779U, 2193400303U, 2193183463U, 2192968597U, 2192753141U, 2192540993U, 2192325229U, 2192109989U, 2191894543U, 2191680791U, 2191463497U, 2191249147U, 2191034509U, 2190820267U, 2190606317U, 2190390899U, 2190174199U, 2189958893U, 2189743967U, 2189528807U, 2189313311U, 2189096633U, 2188880977U, 2188665929U, 2188452439U, 2188238047U, 2188022989U, 2187806953U, 2187592339U, 2187375787U, 2187160567U, 2186947853U, 2186734469U, 2186520907U, 2186305777U, 2186090447U, 2185874939U, 2185660657U, 2185444423U, 2185228519U, 2185014731U, 2184798521U, 2184583937U, 2184368803U, 2184153427U, 2183937773U, 2183724187U, 2183508791U, 2183292037U, 2183077639U, 2182862839U, 2182647839U, 2182430443U, 2182214731U, 2181997007U, 2181781843U, 2181567317U, 2181352403U, 2181134429U, 2180919913U, 2180705173U, 2180489261U, 2180274289U, 2180059613U, 2179844789U, 2179628147U, 2179411453U, 2179195943U, 2178981173U, 2178765881U, 2178552247U, 2178338983U, 2178124589U, 2177911657U, 2177695537U, 2177480443U, 2177264501U, 2177048869U, 2176833577U, 2176622813U, 2176405919U, 2176191037U, 2175977563U, 2175761669U, 2175546547U, 2175332921U, 2175118607U, 2174905169U, 2174691347U, 2174474537U, 2174260867U, 2174044051U, 2173830367U, 2173613773U, 2173400321U, 2173182191U, 2172969907U, 2172756941U, 2172541463U, 2172324157U, 2172107263U, 2171892293U, 2171676751U, 2171462441U, 2171245553U, 2171030177U, 2170817087U, 2170603703U, 2170388111U, 2170175779U, 2169961919U, 2169744097U, 2169531443U, 2169315259U, 2169100067U, 2168884763U, 2168668939U, 2168454077U, 2168240089U, 2168025037U, 2167808509U, 2167594523U, 2167378901U, 2167164107U, 2166947911U, 2166735047U, 2166519647U, 2166305593U, 2166090191U, 2165877419U, 2165660327U, 2165445811U, 2165231377U, 2165016067U, 2164800061U, 2164584337U, 2164370653U, 2164156157U, 2163937541U, 2163722377U, 2163510857U, 2163294317U, 2163076691U, 2162863051U, 2162648759U, 2162435339U, 2162219417U, 2162005633U, 2161788371U, 2161572109U, 2161357039U, 2161143913U, 2160930071U, 2160715201U, 2160498959U, 2160284281U, 2160071057U, 2159857957U, 2159644441U, 2159431277U, 2159216399U, 2158999463U, 2158783609U, 2158570681U, 2158353931U, 2158136809U, 2157922717U, 2157706357U, 2157490921U, 2157278737U, 2157063401U, 2156846201U, 2156631929U, 2156417051U, 2156202101U, 2155984819U, 2155770917U, 2155555967U, 2155339559U, 2155125689U, 2154911813U, 2154697789U, 2154481897U, 2154267373U, 2154053557U, 2153838251U, 2153623891U, 2153409701U, 2153194049U, 2152977367U, 2152761631U, 2152549747U, 2152334189U, 2152120979U, 2151905143U, 2151690707U, 2151475523U, 2151261493U, 2151045469U, 2150830289U, 2150614667U, 2150399893U, 2150187059U, 2149972697U, 2149756703U, 2149543889U, 2149327627U, 2149112429U, 2148896411U, 2148679669U, 2148466009U, 2148250061U, 2148035749U, 2147821513U, 2147607401U, 2147392201U, 2147178329U, 2146961347U, 2146748057U, 2146533959U, 2146317191U, 2146102477U, 2145889267U, 2145675289U, 2145460909U, 2145248167U, 2145033001U, 2144818411U, 2144602787U, 2144389217U, 2144174281U, 2143959581U, 2143744997U, 2143529491U, 2143314917U, 2143101241U, 2142887399U, 2142671353U, 2142457117U, 2142240403U, 2142027137U, 2141814319U, 2141596757U, 2141383633U, 2141168963U, 2140954709U, 2140740733U, 2140527553U, 2140313443U, 2140096993U, 2139883771U, 2139669449U, 2139456377U, 2139240409U, 2139025991U, 2138809969U, 2138593397U, 2138376997U, 2138163977U, 2137948823U, 2137734017U, 2137517407U, 2137301819U, 2137086989U, 2136872957U, 2136658427U, 2136442873U, 2136229309U, 2136014159U, 2135798803U, 2135582873U, 2135366899U, 2135151517U, 2134935289U, 2134721027U, 2134508581U, 2134293869U, 2134076557U, 2133860653U, 2133647933U, 2133431987U, 2133216271U, 2133000449U, 2132785727U, 2132571839U, 2132356769U, 2132141177U, 2131927409U, 2131711019U, 2131494667U, 2131280273U, 2131062221U, 2130845993U, 2130632453U, 2130418541U, 2130203653U, 2129987053U, 2129772677U, 2129556967U, 2129342653U, 2129127817U, 2128912277U, 2128695007U, 2128478327U, 2128264429U, 2128050467U, 2127837703U, 2127623801U, 2127408931U, 2127193907U, 2126978179U, 2126761667U, 2126547263U, 2126332057U, 2126115379U, 2125901263U, 2125684789U, 2125470601U, 2125257157U, 2125041631U, 2124825877U, 2124610991U, 2124395233U, 2124182597U, 2123968739U, 2123753647U, 2123537153U, 2123322571U, 2123108069U, 2122892371U, 2122672733U, 2122457621U, 2122243469U, 2122030279U, 2121815011U, 2121602663U, 2121386779U, 2121170593U, 2120957849U, 2120743579U, 2120527163U, 2120310461U, 2120094611U, 2119880879U, 2119665617U, 2119452541U, 2119237949U, 2119023493U, 2118807931U, 2118592439U, 2118377557U, 2118162689U, 2117948653U, 2117734709U, 2117518787U, 2117303467U, 2117087933U, 2116872119U, 2116657061U, 2116443677U, 2116230829U, 2116016173U, 2115801371U, 2115585181U, 2115369701U, 2115153727U, 2114938379U, 2114722927U, 2114507833U, 2114296181U, 2114083091U, 2113870123U, 2113654157U, 2113441021U, 2113224103U, 2113012547U, 2112798203U, 2112583841U, 2112367709U, 2112151631U, 2111937301U, 2111724911U, 2111509861U, 2111295701U, 2111081629U, 2110866419U, 2110651363U, 2110438397U, 2110223261U, 2110009829U, 2109797897U, 2109582913U, 2109369523U, 2109152387U, 2108937829U, 2108720821U, 2108508851U, 2108295751U, 2108080607U, 2107865293U, 2107650091U, 2107436741U, 2107222657U, 2107007647U, 2106792673U, 2106576917U, 2106359917U, 2106144197U, 2105930401U, 2105715049U, 2105501309U, 2105287433U, 2105073029U, 2104858771U, 2104647023U, 2104433021U, 2104219151U, 2104005019U, 2103788759U, 2103574393U, 2103359521U, 2103143461U, 2102929097U, 2102714129U, 2102500709U, 2102287063U, 2102071733U, 2101858169U, 2101644367U, 2101430251U, 2101215421U, 2101000631U, 2100786707U, 2100573677U, 2100356977U, 2100144953U, 2099929943U, 2099714203U, 2099498983U, 2099284679U, 2099070541U, 2098855537U, 2098641661U, 2098426349U, 2098211051U, 2097996079U, 2097777797U, 2097563203U, 2097349259U, 2097134239U, 2096920559U, 2096705759U, 2096492033U, 2096275873U, 2096060987U, 2095845113U, 2095630739U, 2095417099U, 2095204193U, 2094990617U, 2094777257U, 2094563689U, 2094349931U, 2094135709U, 2093917997U, 2093703973U, 2093489929U, 2093275181U, 2093060483U, 2092847143U, 2092631617U, 2092415669U, 2092200577U, 2091986231U, 2091773147U, 2091560467U, 2091343981U, 2091128869U, 2090914373U, 2090697439U, 2090484707U, 2090271769U, 2090056609U, 2089841513U, 2089626109U, 2089413709U, 2089199999U, 2088986687U, 2088770249U, 2088557147U, 2088342253U, 2088126977U, 2087912909U, 2087700257U, 2087485703U, 2087269703U, 2087054653U, 2086840409U, 2086626083U, 2086411141U, 2086194871U, 2085979487U, 2085764441U, 2085549139U, 2085334943U, 2085119369U, 2084905873U, 2084691677U, 2084475109U, 2084259323U, 2084044163U, 2083831573U, 2083616219U, 2083402001U, 2083186583U, 2082971789U, 2082759373U, 2082545177U, 2082330127U, 2082117649U, 2081901823U, 2081688289U, 2081474251U, 2081261443U, 2081046613U, 2080831771U, 2080617281U, 2080400599U, 2080186891U, 2079971801U, 2079758281U, 2079542903U, 2079328387U, 2079114383U, 2078897809U, 2078683337U, 2078472707U, 2078257351U, 2078045183U, 2077830827U, 2077616641U, 2077400671U, 2077185667U, 2076969607U, 2076755251U, 2076538223U, 2076323617U, 2076108059U, 2075893903U, 2075679917U, 2075462471U, 2075249549U, 2075035973U, 2074823669U, 2074609139U, 2074395527U, 2074179623U, 2073964481U, 2073751951U, 2073538321U, 2073326219U, 2073110059U, 2072896093U, 2072680901U, 2072466947U, 2072251847U, 2072036851U, 2071820351U, 2071608421U, 2071392137U, 2071176323U, 2070961337U, 2070746221U, 2070532231U, 2070319253U, 2070103601U, 2069889037U, 2069675147U, 2069458541U, 2069244319U, 2069030893U, 2068817347U, 2068602559U, 2068387669U, 2068172839U, 2067958549U, 2067743423U, 2067529463U, 2067313427U, 2067097567U, 2066881273U, 2066666963U, 2066452979U, 2066238739U, 2066026559U, 2065812179U, 2065594439U, 2065379831U, 2065165519U, 2064950903U, 2064736903U, 2064522697U, 2064309791U, 2064095249U, 2063882111U, 2063669011U, 2063454871U, 2063240269U, 2063025931U, 2062811071U, 2062597567U, 2062384199U, 2062167797U, 2061955403U, 2061740983U, 2061522713U, 2061310241U, 2061094153U, 2060880043U, 2060665253U, 2060449087U, 2060235917U, 2060020987U, 2059806971U, 2059590917U, 2059377119U, 2059160731U, 2058946231U, 2058731617U, 2058517511U, 2058304147U, 2058088283U, 2057873417U, 2057656157U, 2057439991U, 2057225377U, 2057011381U, 2056797829U, 2056582037U, 2056367063U, 2056152523U, 2055938219U, 2055726181U, 2055511897U, 2055295643U, 2055080669U, 2054867093U, 2054653849U, 2054438983U, 2054223761U, 2054008921U, 2053794817U, 2053582747U, 2053368827U, 2053151159U, 2052935029U, 2052719261U, 2052503023U, 2052290129U, 2052077113U, 2051862493U, 2051648983U, 2051433383U, 2051217811U, 2051001461U, 2050788151U, 2050575347U, 2050360619U, 2050148801U, 2049934517U, 2049720053U, 2049507997U, 2049295841U, 2049080531U, 2048866219U, 2048651251U, 2048437513U, 2048223949U, 2048009279U, 2047791847U, 2047578653U, 2047363049U, 2047149409U, 2046934993U, 2046720463U, 2046506843U, 2046291199U, 2046077087U, 2045861539U, 2045647739U, 2045434463U, 2045221103U, 2045007113U, 2044792049U, 2044576769U, 2044363891U, 2044149299U, 2043936319U, 2043720761U, 2043504637U, 2043292763U, 2043078641U, 2042866541U, 2042653213U, 2042438569U, 2042225033U, 2042009527U, 2041792717U, 2041579739U, 2041363763U, 2041147879U, 2040934349U, 2040718517U, 2040504493U, 2040289607U, 2040074797U, 2039858837U, 2039645171U, 2039430467U, 2039216407U, 2039003861U, 2038790651U, 2038576081U, 2038359943U, 2038146151U, 2037932623U, 2037716911U, 2037503981U, 2037287653U, 2037073373U, 2036858851U, 2036643893U, 2036429471U, 2036215387U, 2036000677U, 2035784449U, 2035570907U, 2035354273U, 2035139747U, 2034925411U, 2034711461U, 2034497363U, 2034284051U, 2034072233U, 2033859251U, 2033644259U, 2033431303U, 2033216407U, 2033002691U, 2032786661U, 2032573117U, 2032359227U, 2032146469U, 2031931939U, 2031718771U, 2031504173U, 2031288319U, 2031072521U, 2030860333U, 2030646193U, 2030432291U, 2030217193U, 2030003243U, 2029787321U, 2029573459U, 2029359097U, 2029144891U, 2028930721U, 2028716447U, 2028500113U, 2028285971U, 2028072061U, 2027854601U, 2027639671U, 2027425307U, 2027211397U, 2026995167U, 2026782997U, 2026568471U, 2026352353U, 2026140001U, 2025926909U, 2025711001U, 2025496607U, 2025283669U, 2025069139U, 2024855797U, 2024642273U, 2024426897U, 2024211479U, 2024000453U, 2023784047U, 2023568411U, 2023353641U, 2023137863U, 2022923561U, 2022708829U, 2022496247U, 2022282133U, 2022068203U, 2021852201U, 2021636473U, 2021423681U, 2021208647U, 2020993567U, 2020777973U, 2020563967U, 2020350851U, 2020136771U, 2019921859U, 2019706397U, 2019493009U, 2019277723U, 2019064589U, 2018850983U, 2018639201U, 2018424713U, 2018208637U, 2017993009U, 2017777939U, 2017562731U, 2017348253U, 2017134761U, 2016919963U, 2016705421U, 2016490933U, 2016277763U, 2016063589U, 2015850721U, 2015637157U, 2015421799U, 2015209013U, 2014994939U, 2014782433U, 2014566331U, 2014351637U, 2014137989U, 2013925063U, 2013711647U, 2013499049U, 2013286763U, 2013075139U, 2012859839U, 2012647649U, 2012431891U, 2012216867U, 2012004413U, 2011791329U, 2011576517U, 2011362433U, 2011148519U, 2010933593U, 2010720161U, 2010505199U, 2010290519U, 2010075337U, 2009859959U, 2009645977U, 2009431447U, 2009218259U, 2009003429U, 2008787149U, 2008574681U, 2008360573U, 2008145099U, 2007930259U, 2007716329U, 2007502459U, 2007286573U, 2007071909U, 2006858713U, 2006644403U, 2006430821U, 2006218061U, 2006003647U, 2005789979U, 2005575623U, 2005364209U, 2005151389U, 2004935551U, 2004721613U, 2004506423U, 2004292663U, 2004078577U, 2003863541U, 2003650409U, 2003440357U, 2003225123U, 2003010937U, 2002796941U, 2002581443U, 2002369483U, 2002153999U, 2001941651U, 2001729157U, 2001516353U, 2001301853U, 2001088319U, 2000875991U, 2000662501U, 2000447263U, 2000234189U, 2000021819U, 1999805713U, 1999591519U, 1999377031U, 1999163767U, 1998946837U, 1998733271U, 1998518189U, 1998303647U, 1998088991U, 1997874821U, 1997659667U, 1997445841U, 1997235533U, 1997021729U, 1996806061U, 1996589219U, 1996372933U, 1996159237U, 1995945257U, 1995733277U, 1995516739U, 1995302677U, 1995089477U, 1994873599U, 1994659547U, 1994447443U, 1994233277U, 1994020141U, 1993804573U, 1993591349U, 1993377929U, 1993161893U, 1992947581U, 1992735991U, 1992521611U, 1992307687U, 1992093223U, 1991878487U, 1991663129U, 1991450303U, 1991237041U, 1991022613U, 1990808779U, 1990594729U, 1990379987U, 1990165141U, 1989950267U, 1989736093U, 1989522463U, 1989308263U, 1989094451U, 1988879909U, 1988668001U, 1988453771U, 1988239081U, 1988022431U, 1987809871U, 1987597069U, 1987382933U, 1987166897U, 1986953041U, 1986741131U, 1986525991U, 1986312707U, 1986097783U, 1985884553U, 1985668123U, 1985453983U, 1985239303U, 1985025799U, 1984808653U, 1984596529U, 1984382563U, 1984169507U, 1983958577U, 1983743011U, 1983527261U, 1983314681U, 1983099403U, 1982885549U, 1982671441U, 1982456033U, 1982243303U, 1982026903U, 1981813313U, 1981600333U, 1981386437U, 1981174301U, 1980956819U, 1980744853U, 1980530767U, 1980316879U, 1980102307U, 1979890327U, 1979675213U, 1979460403U, 1979246653U, 1979031823U, 1978817069U, 1978604077U, 1978390889U, 1978178009U, 1977963947U, 1977749701U, 1977534121U, 1977320621U, 1977108079U, 1976893027U, 1976678113U, 1976464909U, 1976253337U, 1976037941U, 1975823131U, 1975607279U, 1975395517U, 1975179749U, 1974966589U, 1974752149U, 1974538739U, 1974325789U, 1974111697U, 1973900053U, 1973685503U, 1973472451U, 1973255929U, 1973042179U, 1972827331U, 1972612991U, 1972401703U, 1972186661U, 1971974149U, 1971760337U, 1971547093U, 1971334973U, 1971122009U, 1970910197U, 1970696591U, 1970480849U, 1970265071U, 1970049421U, 1969836083U, 1969621729U, 1969408369U, 1969193627U, 1968979921U, 1968765377U, 1968552293U, 1968339173U, 1968125447U, 1967912579U, 1967699759U, 1967485391U, 1967270213U, 1967054437U, 1966839869U, 1966624633U, 1966410613U, 1966194941U, 1965982463U, 1965767701U, 1965554191U, 1965341783U, 1965125849U, 1964913271U, 1964698751U, 1964484989U, 1964271983U, 1964054333U, 1963841857U, 1963626869U, 1963415351U, 1963201589U, 1962987557U, 1962773513U, 1962559147U, 1962341369U, 1962128447U, 1961914793U, 1961701477U, 1961488423U, 1961275501U, 1961060869U, 1960848299U, 1960633061U, 1960417241U, 1960204229U, 1959988241U, 1959770467U, 1959554581U, 1959344813U, 1959133037U, 1958918903U, 1958704933U, 1958490823U, 1958275273U, 1958060563U, 1957848889U, 1957634227U, 1957421957U, 1957206529U, 1956991991U, 1956777359U, 1956563137U, 1956349627U, 1956136801U, 1955922713U, 1955709199U, 1955494259U, 1955281897U, 1955067349U, 1954854449U, 1954638899U, 1954424539U, 1954210151U, 1953996521U, 1953781757U, 1953568061U, 1953354313U, 1953138323U, 1952924947U, 1952711471U, 1952499607U, 1952285947U, 1952073337U, 1951860359U, 1951646947U, 1951429421U, 1951215599U, 1951001777U, 1950789343U, 1950577147U, 1950364093U, 1950151409U, 1949937593U, 1949722681U, 1949510449U, 1949296903U, 1949084747U, 1948870019U, 1948653431U, 1948438379U, 1948225849U, 1948010171U, 1947797431U, 1947584029U, 1947369353U, 1947156833U, 1946945327U, 1946730593U, 1946516281U, 1946303641U, 1946090359U, 1945876957U, 1945662233U, 1945447381U, 1945234493U, 1945019243U, 1944807173U, 1944592619U, 1944378089U, 1944164279U, 1943952403U, 1943736161U, 1943523271U, 1943309701U, 1943097553U, 1942884479U, 1942669921U, 1942453361U, 1942239361U, 1942026481U, 1941812861U, 1941599599U, 1941383267U, 1941169357U, 1940955971U, 1940740007U, 1940530087U, 1940315623U, 1940101721U, 1939887941U, 1939671631U, 1939459111U, 1939246339U, 1939030463U, 1938815773U, 1938601583U, 1938388579U, 1938173087U, 1937959571U, 1937746337U, 1937530079U, 1937314759U, 1937100097U, 1936885309U, 1936673131U, 1936458907U, 1936247077U, 1936033289U, 1935819463U, 1935605239U, 1935390563U, 1935176689U, 1934965691U, 1934751667U, 1934537677U, 1934322787U, 1934110439U, 1933897331U, 1933680613U, 1933466789U, 1933253327U, 1933040761U, 1932827927U, 1932614807U, 1932400721U, 1932186007U, 1931972417U, 1931759197U, 1931545013U, 1931330741U, 1931116997U, 1930902073U, 1930690271U, 1930477583U, 1930262641U, 1930050217U, 1929835819U, 1929622771U, 1929410531U, 1929197299U, 1928981581U, 1928767499U, 1928552657U, 1928340781U, 1928126819U, 1927911509U, 1927700891U, 1927487371U, 1927272463U, 1927060243U, 1926846787U, 1926631963U, 1926417281U, 1926202891U, 1925987633U, 1925774309U, 1925560577U, 1925346653U, 1925132813U, 1924917391U, 1924703741U, 1924489667U, 1924274753U, 1924061647U, 1923848099U, 1923635011U, 1923423013U, 1923209657U, 1922995003U, 1922780593U, 1922567051U, 1922354261U, 1922142449U, 1921923569U, 1921709773U, 1921496867U, 1921285153U, 1921071419U, 1920855917U, 1920641953U, 1920426647U, 1920210139U, 1919997463U, 1919784743U, 1919571817U, 1919357707U, 1919144197U, 1918928327U, 1918716967U, 1918505287U, 1918288951U, 1918074289U, 1917859243U, 1917645077U, 1917431177U, 1917217327U, 1917001897U, 1916787517U, 1916575319U, 1916359751U, 1916145289U, 1915931917U, 1915718513U, 1915503833U, 1915291013U, 1915078507U, 1914865129U, 1914652417U, 1914438937U, 1914226511U, 1914012007U, 1913797597U, 1913583341U, 1913369903U, 1913155711U, 1912942181U, 1912728781U, 1912513847U, 1912300451U, 1912087831U, 1911873253U, 1911657779U, 1911442763U, 1911231353U, 1911015773U, 1910802847U, 1910588893U, 1910375063U, 1910162201U, 1909948321U, 1909733303U, 1909520323U, 1909307419U, 1909093247U, 1908879877U, 1908664063U, 1908449857U, 1908236677U, 1908022811U, 1907810987U, 1907598467U, 1907384467U, 1907169083U, 1906953211U, 1906739209U, 1906525109U, 1906310951U, 1906096999U, 1905884731U, 1905673373U, 1905457363U, 1905243209U, 1905029017U, 1904816713U, 1904602537U, 1904389517U, 1904176861U, 1903963189U, 1903749361U, 1903537567U, 1903322501U, 1903108331U, 1902895109U, 1902682841U, 1902468143U, 1902255833U, 1902042173U, 1901825033U, 1901610857U, 1901394977U, 1901180863U, 1900966337U, 1900753301U, 1900539409U, 1900326377U, 1900115621U, 1899902029U, 1899689683U, 1899477733U, 1899264779U, 1899050837U, 1898835283U, 1898621423U, 1898407963U, 1898196023U, 1897983083U, 1897770997U, 1897556651U, 1897344901U, 1897133809U, 1896919259U, 1896705157U, 1896491041U, 1896277457U, 1896063769U, 1895850709U, 1895636689U, 1895420279U, 1895208223U, 1894993829U, 1894782023U, 1894566353U, 1894350527U, 1894137731U, 1893924589U, 1893710851U, 1893496691U, 1893283459U, 1893069709U, 1892854861U, 1892641133U, 1892428999U, 1892215747U, 1892003387U, 1891790491U, 1891579493U, 1891362449U, 1891148263U, 1890934141U, 1890720857U, 1890507551U, 1890292267U, 1890078847U, 1889865743U, 1889652253U, 1889438801U, 1889224241U, 1889013617U, 1888800223U, 1888587439U, 1888373471U, 1888163867U, 1887952039U, 1887737603U, 1887523223U, 1887309659U, 1887096331U, 1886884289U, 1886670587U, 1886456149U, 1886240141U, 1886028191U, 1885812587U, 1885599461U, 1885386431U, 1885172129U, 1884957803U, 1884746813U, 1884531721U, 1884315151U, 1884102601U, 1883889043U, 1883673413U, 1883458481U, 1883244703U, 1883033723U, 1882821439U, 1882608839U, 1882393321U, 1882178719U, 1881963827U, 1881750943U, 1881536119U, 1881320087U, 1881108149U, 1880896177U, 1880681953U, 1880466319U, 1880252831U, 1880038367U, 1879824493U, 1879610081U, 1879395409U, 1879181047U, 1878969739U, 1878756823U, 1878542957U, 1878330583U, 1878116137U, 1877904227U, 1877689511U, 1877474453U, 1877263457U, 1877050621U, 1876835243U, 1876622257U, 1876411883U, 1876197749U, 1875985613U, 1875770417U, 1875554969U, 1875341953U, 1875126829U, 1874913457U, 1874701039U, 1874489093U, 1874272849U, 1874060159U, 1873846979U, 1873635529U, 1873421219U, 1873209713U, 1872994463U, 1872782473U, 1872569861U, 1872355663U, 1872141379U, 1871927711U, 1871713241U, 1871499821U, 1871282653U, 1871070701U, 1870859063U, 1870646521U, 1870431113U, 1870216661U, 1870002733U, 1869789989U, 1869578903U, 1869364733U, 1869150917U, 1868934923U, 1868723261U, 1868509567U, 1868296949U, 1868082787U, 1867868263U, 1867655113U, 1867441489U, 1867226723U, 1867011511U, 1866798541U, 1866586681U, 1866375299U, 1866161233U, 1865946409U, 1865732599U, 1865516353U, 1865304169U, 1865090393U, 1864877809U, 1864661059U, 1864446949U, 1864231703U, 1864019951U, 1863806657U, 1863593309U, 1863380551U, 1863168421U, 1862955293U, 1862742773U, 1862527981U, 1862316163U, 1862102299U, 1861887043U, 1861671997U, 1861458811U, 1861246481U, 1861033093U, 1860819593U, 1860606511U, 1860392983U, 1860179969U, 1859966057U, 1859753327U, 1859537033U, 1859321609U, 1859109403U, 1858896001U, 1858682179U, 1858468021U, 1858255141U, 1858040617U, 1857826583U, 1857614989U, 1857401957U, 1857189121U, 1856974877U, 1856761057U, 1856548943U, 1856334443U, 1856122343U, 1855909711U, 1855697113U, 1855485559U, 1855272659U, 1855059971U, 1854846797U, 1854633577U, 1854417667U, 1854205447U, 1853992741U, 1853779349U, 1853563861U, 1853348593U, 1853135209U, 1852922107U, 1852710059U, 1852494713U, 1852281311U, 1852068733U, 1851856651U, 1851644933U, 1851430187U, 1851217127U, 1851003919U, 1850791277U, 1850576047U, 1850363993U, 1850149817U, 1849934699U, 1849722047U, 1849507193U, 1849292813U, 1849082251U, 1848865933U, 1848650597U, 1848437771U, 1848223219U, 1848011083U, 1847798189U, 1847584031U, 1847369309U, 1847155309U, 1846942483U, 1846728739U, 1846515617U, 1846302167U, 1846089199U, 1845873173U, 1845658319U, 1845445027U, 1845234277U, 1845021179U, 1844808467U, 1844594179U, 1844381387U, 1844167673U, 1843954171U, 1843740683U, 1843527457U, 1843314307U, 1843101739U, 1842889381U, 1842677059U, 1842463939U, 1842250661U, 1842035359U, 1841822201U, 1841610737U, 1841396317U, 1841181707U, 1840969279U, 1840756397U, 1840542703U, 1840329529U, 1840114021U, 1839902681U, 1839690289U, 1839477257U, 1839262553U, 1839049451U, 1838834191U, 1838622671U, 1838409107U, 1838193991U, 1837980367U, 1837766683U, 1837552097U, 1837338709U, 1837126441U, 1836914561U, 1836700787U, 1836487573U, 1836273797U, 1836060607U, 1835848667U, 1835633953U, 1835420233U, 1835206981U, 1834993807U, 1834782097U, 1834566973U, 1834353881U, 1834140647U, 1833926671U, 1833715579U, 1833503561U, 1833293153U, 1833081637U, 1832866859U, 1832653061U, 1832438771U, 1832224573U, 1832010209U, 1831797823U, 1831585487U, 1831372853U, 1831157287U, 1830944299U, 1830730943U, 1830517193U, 1830305447U, 1830091709U, 1829876317U, 1829662273U, 1829449411U, 1829236631U, 1829023943U, 1828810271U, 1828596149U, 1828382207U, 1828170133U, 1827959183U, 1827746581U, 1827532807U, 1827317861U, 1827106199U, 1826891467U, 1826680879U, 1826467309U, 1826253997U, 1826039113U, 1825825087U, 1825610833U, 1825397839U, 1825185599U, 1824970999U, 1824757813U, 1824544453U, 1824331781U, 1824120253U, 1823907461U, 1823694571U, 1823483819U, 1823269337U, 1823056657U, 1822841029U, 1822628681U, 1822413007U, 1822199881U, 1821987077U, 1821771307U, 1821559319U, 1821348401U, 1821133981U, 1820921497U, 1820707351U, 1820492903U, 1820278483U, 1820065243U, 1819853467U, 1819640743U, 1819428503U, 1819214503U, 1818999947U, 1818786679U, 1818571829U, 1818358589U, 1818143609U, 1817931289U, 1817716661U, 1817504939U, 1817292857U, 1817077921U, 1816863773U, 1816650911U, 1816437629U, 1816224331U, 1816011343U, 1815798827U, 1815584137U, 1815372683U, 1815158353U, 1814944921U, 1814730259U, 1814519281U, 1814305679U, 1814091911U, 1813878061U, 1813665221U, 1813450559U, 1813237159U, 1813022209U, 1812810889U, 1812598517U, 1812386621U, 1812172727U, 1811959999U, 1811746201U, 1811532013U, 1811320249U, 1811105171U, 1810891699U, 1810676641U, 1810464479U, 1810251841U, 1810039403U, 1809825361U, 1809610937U, 1809398191U, 1809185471U, 1808972351U, 1808760589U, 1808548033U, 1808335171U, 1808122291U, 1807908719U, 1807695269U, 1807482529U, 1807269617U, 1807056437U, 1806843373U, 1806629173U, 1806416483U, 1806203057U, 1805989663U, 1805777483U, 1805564641U, 1805352947U, 1805137171U, 1804922843U, 1804709029U, 1804496621U, 1804282919U, 1804070239U, 1803858137U, 1803644209U, 1803430969U, 1803217879U, 1803004363U, 1802791009U, 1802576609U, 1802366077U, 1802150351U, 1801937953U, 1801724581U, 1801510229U, 1801298753U, 1801085947U, 1800871399U, 1800657197U, 1800444797U, 1800231943U, 1800018919U, 1799806523U, 1799593049U, 1799379191U, 1799166077U, 1798952293U, 1798742359U, 1798528609U, 1798316879U, 1798103999U, 1797889399U, 1797677771U, 1797463951U, 1797250849U, 1797038773U, 1796829191U, 1796613449U, 1796399977U, 1796188403U, 1795976477U, 1795764959U, 1795551127U, 1795337413U, 1795124281U, 1794911507U, 1794700001U, 1794488291U, 1794275677U, 1794061361U, 1793848423U, 1793635369U, 1793420693U, 1793210383U, 1792996691U, 1792784233U, 1792570531U, 1792358257U, 1792146007U, 1791934237U, 1791723223U, 1791509171U, 1791295381U, 1791082301U, 1790868851U, 1790656031U, 1790443537U, 1790230961U, 1790017003U, 1789805027U, 1789593419U, 1789379479U, 1789164787U, 1788954239U, 1788740491U, 1788525853U, 1788313313U, 1788099323U, 1787886053U, 1787673467U, 1787459507U, 1787246339U, 1787034257U, 1786821557U, 1786608137U, 1786394063U, 1786182059U, 1785967481U, 1785754219U, 1785541067U, 1785328469U, 1785115117U, 1784902591U, 1784691409U, 1784479457U, 1784264249U, 1784052359U, 1783837177U, 1783625471U, 1783412083U, 1783199161U, 1782985577U, 1782774361U, 1782561791U, 1782349147U, 1782135227U, 1781922349U, 1781707453U, 1781494499U, 1781281357U, 1781067257U, 1780853203U, 1780641661U, 1780427603U, 1780215917U, 1780004623U, 1779789901U, 1779579163U, 1779366067U, 1779154763U, 1778941309U, 1778728537U, 1778516123U, 1778303041U, 1778091787U, 1777879687U, 1777663243U, 1777451671U, 1777236971U, 1777025297U, 1776810323U, 1776599551U, 1776385619U, 1776175129U, 1775962709U, 1775748791U, 1775538503U, 1775324981U, 1775111743U, 1774897037U, 1774682293U, 1774468921U, 1774256161U, 1774044773U, 1773831989U, 1773617759U, 1773403967U, 1773190319U, 1772977307U, 1772763497U, 1772549873U, 1772335879U, 1772125603U, 1771913347U, 1771699337U, 1771487587U, 1771272023U, 1771059089U, 1770847583U, 1770636541U, 1770423601U, 1770210877U, 1769994487U, 1769781749U, 1769568701U, 1769356007U, 1769142241U, 1768928741U, 1768713641U, 1768501909U, 1768289251U, 1768078313U, 1767865181U, 1767649771U, 1767438721U, 1767226861U, 1767012337U, 1766798269U, 1766585551U, 1766372479U, 1766160161U, 1765946669U, 1765734799U, 1765523477U, 1765309201U, 1765095139U, 1764883123U, 1764672967U, 1764461749U, 1764246829U, 1764032813U, 1763819731U, 1763606881U, 1763393377U, 1763181727U, 1762969993U, 1762756637U, 1762543031U, 1762331981U, 1762118279U, 1761903823U, 1761692489U, 1761477937U, 1761263827U, 1761050773U, 1760839001U, 1760628371U, 1760413229U, 1760197709U, 1759985173U, 1759773131U, 1759560839U, 1759348933U, 1759135717U, 1758923039U, 1758710171U, 1758498877U, 1758285307U, 1758073949U, 1757860073U, 1757647841U, 1757436281U, 1757222959U, 1757008063U, 1756793993U, 1756581121U, 1756368917U, 1756154579U, 1755940577U, 1755728027U, 1755514219U, 1755303233U, 1755091193U, 1754878501U, 1754665361U, 1754454571U, 1754242561U, 1754030731U, 1753816681U, 1753602211U, 1753389713U, 1753176443U, 1752964153U, 1752750449U, 1752537337U, 1752324599U, 1752112291U, 1751899441U, 1751687213U, 1751473417U, 1751261329U, 1751049169U, 1750837849U, 1750623913U, 1750410733U, 1750198199U, 1749985409U, 1749773527U, 1749560107U, 1749347723U, 1749135239U, 1748924363U, 1748710897U, 1748498359U, 1748287217U, 1748070949U, 1747857149U, 1747644641U, 1747430963U, 1747216301U, 1747002469U, 1746789469U, 1746578459U, 1746366119U, 1746151037U, 1745939603U, 1745725207U, 1745513141U, 1745303071U, 1745089651U, 1744877551U, 1744663763U, 1744451789U, 1744237181U, 1744025083U, 1743814301U, 1743600853U, 1743387367U, 1743174197U, 1742962841U, 1742749471U, 1742536847U, 1742322259U, 1742111281U, 1741899253U, 1741687861U, 1741474171U, 1741258007U, 1741045811U, 1740835949U, 1740621881U, 1740408053U, 1740196361U, 1739983067U, 1739771023U, 1739558827U, 1739345351U, 1739134457U, 1738920671U, 1738707163U, 1738494731U, 1738281847U, 1738067677U, 1737856069U, 1737644603U, 1737432539U, 1737221611U, 1737006983U, 1736794487U, 1736581619U, 1736369281U, 1736154647U, 1735943387U, 1735729111U, 1735517011U, 1735305269U, 1735090199U, 1734876943U, 1734664441U, 1734449077U, 1734237377U, 1734024737U, 1733811263U, 1733597969U, 1733384509U, 1733171707U, 1732961677U, 1732746863U, 1732535537U, 1732321049U, 1732108141U, 1731895523U, 1731682793U, 1731469843U, 1731254191U, 1731041219U, 1730829523U, 1730618177U, 1730405549U, 1730192197U, 1729976291U, 1729763383U, 1729549669U, 1729337327U, 1729125011U, 1728914417U, 1728701587U, 1728488477U, 1728276799U, 1728063221U, 1727849777U, 1727635841U, 1727422667U, 1727208947U, 1726994957U, 1726783987U, 1726573733U, 1726361471U, 1726147603U, 1725936371U, 1725724123U, 1725510341U, 1725297971U, 1725083699U, 1724868617U, 1724657423U, 1724445431U, 1724230499U, 1724017907U, 1723805329U, 1723596101U, 1723381903U, 1723167899U, 1722954017U, 1722740653U, 1722527047U, 1722312811U, 1722102953U, 1721891051U, 1721678617U, 1721466457U, 1721252303U, 1721040851U, 1720830509U, 1720616329U, 1720403401U, 1720190291U, 1719977801U, 1719766823U, 1719554429U, 1719342839U, 1719129833U, 1718917727U, 1718705621U, 1718492519U, 1718278847U, 1718067781U, 1717854091U, 1717640279U, 1717427989U, 1717216279U, 1717003237U, 1716788687U, 1716577411U, 1716367007U, 1716156181U, 1715943997U, 1715731957U, 1715519549U, 1715306557U, 1715093563U, 1714882331U, 1714670413U, 1714457677U, 1714244459U, 1714031303U, 1713818269U, 1713604801U, 1713389563U, 1713178517U, 1712965213U, 1712753267U, 1712539687U, 1712328841U, 1712113927U, 1711899883U, 1711688063U, 1711475021U, 1711261333U, 1711051409U, 1710837059U, 1710624329U, 1710413077U, 1710198703U, 1709987243U, 1709773981U, 1709563153U, 1709351911U, 1709141977U, 1708930331U, 1708718107U, 1708502867U, 1708290503U, 1708076729U, 1707863831U, 1707652277U, 1707439001U, 1707227173U, 1707014329U, 1706801633U, 1706589107U, 1706378419U, 1706166377U, 1705953643U, 1705741783U, 1705531549U, 1705316959U, 1705106129U, 1704894109U, 1704681709U, 1704468937U, 1704255689U, 1704045223U, 1703832359U, 1703619641U, 1703405609U, 1703195113U, 1702983229U, 1702769197U, 1702556957U, 1702344983U, 1702131659U, 1701917627U, 1701705373U, 1701491459U, 1701278609U, 1701065897U, 1700854567U, 1700644447U, 1700429513U, 1700217709U, 1700006197U, 1699793419U, 1699580317U, 1699369627U, 1699155581U, 1698940723U, 1698727337U, 1698513253U, 1698301307U, 1698091267U, 1697877743U, 1697664337U, 1697450791U, 1697237897U, 1697025769U, 1696813771U, 1696599187U, 1696387493U, 1696177811U, 1695964349U, 1695752273U, 1695539983U, 1695328517U, 1695112499U, 1694901031U, 1694687689U, 1694475023U, 1694261953U, 1694049001U, 1693835707U, 1693622737U, 1693410343U, 1693197481U, 1692985631U, 1692774529U, 1692562093U, 1692348953U, 1692136417U, 1691923169U, 1691710081U, 1691497571U, 1691284057U, 1691071279U, 1690859791U, 1690645939U, 1690435493U, 1690223939U, 1690010563U, 1689798259U, 1689584801U, 1689374539U, 1689162413U, 1688949023U, 1688734417U, 1688524517U, 1688313817U, 1688102477U, 1687890049U, 1687679137U, 1687466219U, 1687256309U, 1687042309U, 1686831407U, 1686620363U, 1686407869U, 1686194189U, 1685982491U, 1685769949U, 1685554763U, 1685339581U, 1685127391U, 1684918171U, 1684703561U, 1684493633U, 1684280249U, 1684067551U, 1683855757U, 1683645311U, 1683433723U, 1683221711U, 1683008251U, 1682796551U, 1682583167U, 1682371753U, 1682155987U, 1681944119U, 1681733363U, 1681519849U, 1681308011U, 1681098073U, 1680884237U, 1680671623U, 1680459233U, 1680247291U, 1680031811U, 1679819293U, 1679605723U, 1679392699U, 1679181041U, 1678968337U, 1678756411U, 1678543357U, 1678332811U, 1678122869U, 1677911009U, 1677697997U, 1677485779U, 1677275011U, 1677060713U, 1676850353U, 1676637649U, 1676424697U, 1676211011U, 1676000453U, 1675787273U, 1675576393U, 1675363649U, 1675151339U, 1674939241U, 1674727057U, 1674512789U, 1674299479U, 1674087917U, 1673876467U, 1673661967U, 1673449919U, 1673235139U, 1673021521U, 1672808327U, 1672596941U, 1672384589U, 1672173589U, 1671961757U, 1671749039U, 1671536963U, 1671325529U, 1671112967U, 1670901179U, 1670689117U, 1670475277U, 1670262637U, 1670051791U, 1669837633U, 1669625107U, 1669414039U, 1669203233U, 1668990637U, 1668775393U, 1668563849U, 1668350561U, 1668138847U, 1667926867U, 1667713757U, 1667501833U, 1667287651U, 1667077777U, 1666863299U, 1666650637U, 1666439549U, 1666227977U, 1666014149U, 1665800771U, 1665591229U, 1665380273U, 1665168877U, 1664957753U, 1664744593U, 1664532421U, 1664320123U, 1664105249U, 1663891367U, 1663680947U, 1663469519U, 1663254757U, 1663042397U, 1662830083U, 1662618499U, 1662405971U, 1662195949U, 1661984659U, 1661771983U, 1661559659U, 1661347057U, 1661134081U, 1660921679U, 1660710313U, 1660497737U, 1660285441U, 1660073287U, 1659859973U, 1659645607U, 1659431777U, 1659216851U, 1659004939U, 1658794849U, 1658581553U, 1658372297U, 1658159369U, 1657946183U, 1657734823U, 1657521973U, 1657309891U, 1657097159U, 1656885457U, 1656674549U, 1656462763U, 1656251131U, 1656038099U, 1655824243U, 1655613227U, 1655398643U, 1655187257U, 1654976711U, 1654763909U, 1654550113U, 1654337563U, 1654125673U, 1653912119U, 1653698759U, 1653486361U, 1653274141U, 1653059761U, 1652848279U, 1652634989U, 1652424523U, 1652209519U, 1651998191U, 1651784759U, 1651572101U, 1651359301U, 1651147033U, 1650934469U, 1650723083U, 1650509953U, 1650298159U, 1650085873U, 1649872649U, 1649659841U, 1649449441U, 1649235881U, 1649024249U, 1648812073U, 1648598869U, 1648387141U, 1648175587U, 1647962123U, 1647750473U, 1647538483U, 1647326743U, 1647114061U, 1646903021U, 1646688727U, 1646476903U, 1646264027U, 1646051219U, 1645838983U, 1645628581U, 1645415971U, 1645204021U, 1644993293U, 1644776921U, 1644563593U, 1644351343U, 1644139267U, 1643924603U, 1643713501U, 1643499029U, 1643288453U, 1643075813U, 1642860589U, 1642648877U, 1642437869U, 1642225457U, 1642012793U, 1641801523U, 1641589661U, 1641376409U, 1641162559U, 1640952241U, 1640741437U, 1640529173U, 1640318839U, 1640106227U, 1639894213U, 1639681237U, 1639470661U, 1639257131U, 1639045273U, 1638833389U, 1638619711U, 1638407233U, 1638194989U, 1637980541U, 1637769223U, 1637559887U, 1637346769U, 1637134337U, 1636922267U, 1636710653U, 1636499873U, 1636286867U, 1636076087U, 1635863939U, 1635650407U, 1635436661U, 1635226577U, 1635015631U, 1634803927U, 1634589751U, 1634378377U, 1634166799U, 1633954739U, 1633743409U, 1633531651U, 1633318207U, 1633106641U, 1632897269U, 1632687919U, 1632475811U, 1632263639U, 1632052379U, 1631839457U, 1631626849U, 1631414489U, 1631202467U, 1630990519U, 1630778063U, 1630565177U, 1630354853U, 1630143049U, 1629931943U, 1629719171U, 1629508193U, 1629295721U, 1629082687U, 1628870843U, 1628660101U, 1628448221U, 1628236867U, 1628023801U, 1627812029U, 1627600441U, 1627389431U, 1627177001U, 1626962539U, 1626751979U, 1626539179U, 1626326791U, 1626113729U, 1625903567U, 1625691247U, 1625478037U, 1625266073U, 1625054153U, 1624841633U, 1624630261U, 1624417189U, 1624206053U, 1623992599U, 1623781619U, 1623568949U, 1623354829U, 1623142987U, 1622929513U, 1622718421U, 1622506999U, 1622294161U, 1622082901U, 1621868393U, 1621658257U, 1621446997U, 1621235573U, 1621024253U, 1620813553U, 1620603793U, 1620392623U, 1620180607U, 1619968247U, 1619753719U, 1619541383U, 1619329603U, 1619117597U, 1618904627U, 1618691989U, 1618479787U, 1618267333U, 1618055717U, 1617843229U, 1617630947U, 1617417619U, 1617204377U, 1616993519U, 1616781559U, 1616568367U, 1616356229U, 1616143759U, 1615933097U, 1615723597U, 1615509367U, 1615297399U, 1615086917U, 1614874609U, 1614661459U, 1614448681U, 1614236551U, 1614023113U, 1613812303U, 1613601079U, 1613389003U, 1613176379U, 1612963951U, 1612751549U, 1612540789U, 1612329503U, 1612118173U, 1611906383U, 1611695711U, 1611483151U, 1611271957U, 1611057827U, 1610844611U, 1610632469U, 1610418559U, 1610206529U, 1609994033U, 1609781203U, 1609569413U, 1609359209U, 1609145459U, 1608933947U, 1608720361U, 1608508801U, 1608296717U, 1608084109U, 1607870417U, 1607658197U, 1607445701U, 1607234537U, 1607022997U, 1606810687U, 1606600679U, 1606388731U, 1606176347U, 1605965227U, 1605752081U, 1605539021U, 1605328313U, 1605115663U, 1604904061U, 1604693239U, 1604480057U, 1604268389U, 1604057183U, 1603842913U, 1603631873U, 1603420561U, 1603210649U, 1603000219U, 1602789143U, 1602577609U, 1602365857U, 1602153079U, 1601940149U, 1601727781U, 1601517839U, 1601302363U, 1601090371U, 1600879667U, 1600667899U, 1600455133U, 1600242403U, 1600031369U, 1599820517U, 1599606803U, 1599396749U, 1599184751U, 1598975051U, 1598761279U, 1598549501U, 1598335411U, 1598123407U, 1597911299U, 1597700057U, 1597487621U, 1597277893U, 1597065859U, 1596852787U, 1596642133U, 1596428957U, 1596216553U, 1596002173U, 1595792243U, 1595579933U, 1595369533U, 1595158241U, 1594948063U, 1594737161U, 1594525729U, 1594311107U, 1594098707U, 1593885151U, 1593671377U, 1593458753U, 1593247781U, 1593035057U, 1592822603U, 1592610959U, 1592398513U, 1592185459U, 1591975481U, 1591765501U, 1591554421U, 1591341443U, 1591131319U, 1590920003U, 1590707633U, 1590494783U, 1590283363U, 1590070931U, 1589859377U, 1589646811U, 1589434129U, 1589223187U, 1589011031U, 1588799903U, 1588586047U, 1588375429U, 1588163957U, 1587952687U, 1587741893U, 1587529987U, 1587318851U, 1587105677U, 1586891203U, 1586680391U, 1586469947U, 1586257091U, 1586045543U, 1585835543U, 1585622579U, 1585410503U, 1585198583U, 1584985397U, 1584772169U, 1584559601U, 1584347197U, 1584135689U, 1583923169U, 1583711639U, 1583501189U, 1583290279U, 1583078971U, 1582868279U, 1582658101U, 1582445219U, 1582233599U, 1582020931U, 1581806959U, 1581596773U, 1581385601U, 1581173551U, 1580962969U, 1580751941U, 1580539157U, 1580325619U, 1580114611U, 1579903427U, 1579693151U, 1579481467U, 1579268359U, 1579056379U, 1578842593U, 1578632179U, 1578421843U, 1578209747U, 1577998151U, 1577787647U, 1577579093U, 1577369909U, 1577155537U, 1576943099U, 1576730611U, 1576521313U, 1576311547U, 1576100221U, 1575886001U, 1575674297U, 1575462277U, 1575251819U, 1575039077U, 1574829143U, 1574617871U, 1574406947U, 1574196319U, 1573984591U, 1573771307U, 1573558699U, 1573347103U, 1573134727U, 1572923981U, 1572710869U, 1572499171U, 1572285719U, 1572074671U, 1571864771U, 1571650979U, 1571438179U, 1571225417U, 1571013593U, 1570801511U, 1570589539U, 1570376557U, 1570164923U, 1569953963U, 1569742417U, 1569531179U, 1569320693U, 1569107899U, 1568896783U, 1568684263U, 1568472599U, 1568261309U, 1568048311U, 1567834613U, 1567622321U, 1567411583U, 1567200757U, 1566991141U, 1566778691U, 1566568769U, 1566357157U, 1566143399U, 1565932283U, 1565721347U, 1565509193U, 1565297891U, 1565085653U, 1564873847U, 1564660499U, 1564447433U, 1564235279U, 1564021853U, 1563811489U, 1563600547U, 1563390781U, 1563178303U, 1562966143U, 1562753519U, 1562540341U, 1562328893U, 1562116663U, 1561904369U, 1561691323U, 1561478873U, 1561266367U, 1561053881U, 1560842071U, 1560628519U, 1560415321U, 1560203707U, 1559991437U, 1559780639U, 1559568349U, 1559356307U, 1559145017U, 1558935383U, 1558724383U, 1558512313U, 1558300649U, 1558088447U, 1557875689U, 1557664697U, 1557452837U, 1557241417U, 1557027809U, 1556815321U, 1556607361U, 1556394971U, 1556182799U, 1555972007U, 1555757803U, 1555547131U, 1555336427U, 1555123693U, 1554912313U, 1554701053U, 1554488371U, 1554276719U, 1554064399U, 1553854661U, 1553642743U, 1553430247U, 1553219651U, 1553007349U, 1552796459U, 1552584197U, 1552373029U, 1552160453U, 1551947497U, 1551736567U, 1551524531U, 1551312557U, 1551101779U, 1550890007U, 1550680333U, 1550469667U, 1550258377U, 1550048537U, 1549836947U, 1549626413U, 1549413953U, 1549202497U, 1548990721U, 1548777619U, 1548566603U, 1548353953U, 1548143243U, 1547932783U, 1547718707U, 1547508233U, 1547295949U, 1547084933U, 1546874491U, 1546660861U, 1546449799U, 1546240771U, 1546029269U, 1545817543U, 1545608279U, 1545395063U, 1545184891U, 1544973307U, 1544762029U, 1544550919U, 1544340169U, 1544126369U, 1543917269U, 1543704583U, 1543492921U, 1543278167U, 1543066607U, 1542855121U, 1542643969U, 1542432631U, 1542220997U, 1542009797U, 1541798197U, 1541588329U, 1541375651U, 1541164321U, 1540951459U, 1540741079U, 1540529233U, 1540316951U, 1540104407U, 1539892303U, 1539682103U, 1539472589U, 1539260353U, 1539048419U, 1538837119U, 1538625079U, 1538413381U, 1538200369U, 1537988381U, 1537776257U, 1537564159U, 1537351003U, 1537141829U, 1536930599U, 1536719453U, 1536509207U, 1536298567U, 1536084287U, 1535872307U, 1535661467U, 1535448043U, 1535237141U, 1535025673U, 1534813279U, 1534603751U, 1534391513U, 1534179809U, 1533966341U, 1533756793U, 1533546401U, 1533334199U, 1533122693U, 1532910019U, 1532698561U, 1532487683U, 1532274157U, 1532063317U, 1531852901U, 1531640309U, 1531427567U, 1531215589U, 1531002287U, 1530788503U, 1530577127U, 1530366421U, 1530154837U, 1529942443U, 1529731897U, 1529522737U, 1529311841U, 1529103517U, 1528891963U, 1528680841U, 1528467029U, 1528256663U, 1528046269U, 1527835061U, 1527624487U, 1527413753U, 1527202763U, 1526992429U, 1526780881U, 1526568913U, 1526357621U, 1526146381U, 1525935077U, 1525723673U, 1525511483U, 1525301759U, 1525088857U, 1524876253U, 1524665299U, 1524452729U, 1524241639U, 1524031711U, 1523819651U, 1523608943U, 1523397277U, 1523184791U, 1522974181U, 1522761347U, 1522549627U, 1522339421U, 1522130107U, 1521919109U, 1521705557U, 1521496439U, 1521282947U, 1521071219U, 1520860261U, 1520647981U, 1520436857U, 1520224591U, 1520013307U, 1519800533U, 1519589777U, 1519377709U, 1519166063U, 1518957403U, 1518747859U, 1518537569U, 1518326107U, 1518115609U, 1517902261U, 1517689727U, 1517479627U, 1517268097U, 1517056027U, 1516842331U, 1516630799U, 1516422581U, 1516211933U, 1516000391U, 1515788333U, 1515576967U, 1515365569U, 1515154343U, 1514942327U, 1514732293U, 1514522249U, 1514311637U, 1514100949U, 1513888829U, 1513677317U, 1513464419U, 1513253267U, 1513040521U, 1512829321U, 1512619337U, 1512406871U, 1512196163U, 1511984137U, 1511773339U, 1511559821U, 1511349289U, 1511138999U, 1510926353U, 1510713947U, 1510500547U, 1510288337U, 1510077571U, 1509863603U, 1509652121U, 1509441179U, 1509226711U, 1509014431U, 1508801669U, 1508591653U, 1508381621U, 1508170903U, 1507960691U, 1507750679U, 1507539263U, 1507328419U, 1507115851U, 1506903271U, 1506692387U, 1506480763U, 1506267967U, 1506056749U, 1505847173U, 1505635909U, 1505425291U, 1505215927U, 1505005493U, 1504793657U, 1504581619U, 1504371229U, 1504162333U, 1503952867U, 1503740867U, 1503529823U, 1503316649U, 1503105971U, 1502893967U, 1502682551U, 1502471153U, 1502260021U, 1502047271U, 1501834643U, 1501623469U, 1501411771U, 1501200923U, 1500989389U, 1500775873U, 1500565127U, 1500353909U, 1500143621U, 1499932537U, 1499720281U, 1499508971U, 1499297563U, 1499086661U, 1498874747U, 1498663967U, 1498451329U, 1498239949U, 1498028803U, 1497818087U, 1497605653U, 1497394813U, 1497185497U, 1496972819U, 1496762291U, 1496551181U, 1496339959U, 1496130263U, 1495919351U, 1495706561U, 1495496021U, 1495283507U, 1495072847U, 1494862697U, 1494651533U, 1494441001U, 1494230201U, 1494019927U, 1493808817U, 1493596171U, 1493385767U, 1493174381U, 1492964443U, 1492753439U, 1492542301U, 1492331219U, 1492120969U, 1491911543U, 1491699217U, 1491487813U, 1491275839U, 1491064643U, 1490853697U, 1490645441U, 1490435729U, 1490226733U, 1490013949U, 1489802617U, 1489589581U, 1489379527U, 1489166039U, 1488954433U, 1488743299U, 1488531413U, 1488320387U, 1488111187U, 1487900389U, 1487690467U, 1487478497U, 1487267263U, 1487057459U, 1486847729U, 1486637849U, 1486427429U, 1486216819U, 1486003891U, 1485793697U, 1485583139U, 1485372797U, 1485160133U, 1484950217U, 1484741021U, 1484529037U, 1484317111U, 1484106011U, 1483894001U, 1483681889U, 1483471441U, 1483259819U, 1483049713U, 1482838807U, 1482628339U, 1482417641U, 1482206351U, 1481995027U, 1481782711U, 1481570309U, 1481359603U, 1481147693U, 1480933667U, 1480722539U, 1480513499U, 1480303739U, 1480090541U, 1479879637U, 1479668173U, 1479455969U, 1479244651U, 1479032449U, 1478822083U, 1478609551U, 1478399057U, 1478187493U, 1477978231U, 1477768079U, 1477556897U, 1477346933U, 1477136621U, 1476926603U, 1476715193U, 1476506771U, 1476293653U, 1476083051U, 1475872933U, 1475662079U, 1475452523U, 1475242933U, 1475032721U, 1474821919U, 1474611221U, 1474401239U, 1474190131U, 1473977039U, 1473765289U, 1473553997U, 1473340133U, 1473130889U, 1472919583U, 1472708987U, 1472498773U, 1472287043U, 1472077699U, 1471867637U, 1471657441U, 1471446443U, 1471235713U, 1471023823U, 1470812389U, 1470599993U, 1470390283U, 1470178133U, 1469966669U, 1469755801U, 1469543599U, 1469330881U, 1469119987U, 1468907851U, 1468695629U, 1468484929U, 1468273421U, 1468062059U, 1467851149U, 1467640763U, 1467428411U, 1467217327U, 1467006161U, 1466794151U, 1466583073U, 1466371843U, 1466160329U, 1465948373U, 1465736777U, 1465525723U, 1465314119U, 1465102643U, 1464892417U, 1464680897U, 1464467821U, 1464255641U, 1464045809U, 1463835853U, 1463624989U, 1463414549U, 1463204381U, 1462995643U, 1462784161U, 1462573369U, 1462359733U, 1462148579U, 1461938441U, 1461727649U, 1461517399U, 1461304841U, 1461094379U, 1460884471U, 1460673547U, 1460463343U, 1460253167U, 1460041901U, 1459830943U, 1459617227U, 1459408543U, 1459198619U, 1458986429U, 1458775291U, 1458563719U, 1458353033U, 1458142883U, 1457931973U, 1457721589U, 1457511773U, 1457299489U, 1457087893U, 1456876859U, 1456666873U, 1456456499U, 1456244849U, 1456034231U, 1455822019U, 1455611659U, 1455401117U, 1455191977U, 1454981797U, 1454771543U, 1454560109U, 1454349367U, 1454137843U, 1453927427U, 1453715761U, 1453504249U, 1453294127U, 1453081739U, 1452870073U, 1452659729U, 1452448273U, 1452238709U, 1452026141U, 1451813369U, 1451603563U, 1451391889U, 1451180063U, 1450969483U, 1450758469U, 1450547621U, 1450334971U, 1450123639U, 1449913747U, 1449701947U, 1449489913U, 1449279817U, 1449069893U, 1448857687U, 1448648989U, 1448438279U, 1448227537U, 1448017553U, 1447806317U, 1447595869U, 1447382917U, 1447174103U, 1446960607U, 1446749641U, 1446540443U, 1446328439U, 1446119281U, 1445908159U, 1445699449U, 1445489839U, 1445278733U, 1445068367U, 1444856983U, 1444646449U, 1444435033U, 1444222807U, 1444011887U, 1443800339U, 1443587273U, 1443379013U, 1443171043U, 1442957707U, 1442748763U, 1442539339U, 1442327533U, 1442114507U, 1441904047U, 1441690351U, 1441476593U, 1441266361U, 1441055647U, 1440847669U, 1440637277U, 1440426077U, 1440217231U, 1440006509U, 1439794799U, 1439583407U, 1439374171U, 1439162957U, 1438950691U, 1438740437U, 1438528463U, 1438318181U, 1438106513U, 1437895027U, 1437681979U, 1437470873U, 1437259559U, 1437048287U, 1436837653U, 1436626987U, 1436415569U, 1436205919U, 1435995373U, 1435784563U, 1435572799U, 1435360867U, 1435150831U, 1434940153U, 1434729199U, 1434520643U, 1434309757U, 1434099409U, 1433886089U, 1433674607U, 1433466031U, 1433253691U, 1433041403U, 1432829141U, 1432619269U, 1432407803U, 1432197869U, 1431984497U, 1431775249U, 1431565097U, 1431356779U, 1431143009U, 1430932183U, 1430722303U, 1430512469U, 1430300119U, 1430090093U, 1429879069U, 1429668403U, 1429460267U, 1429249499U, 1429038931U, 1428829397U, 1428618013U, 1428406739U, 1428195491U, 1427984963U, 1427775317U, 1427565439U, 1427352851U, 1427142841U, 1426932539U, 1426720049U, 1426508137U, 1426295809U, 1426083629U, 1425873301U, 1425663559U, 1425453457U, 1425242501U, 1425033223U, 1424823151U, 1424609591U, 1424398769U, 1424186873U, 1423976707U, 1423764707U, 1423554833U, 1423345877U, 1423133431U, 1422924851U, 1422714019U, 1422502589U, 1422290981U, 1422080969U, 1421869187U, 1421659849U, 1421447683U, 1421235259U, 1421022943U, 1420814009U, 1420605029U, 1420395637U, 1420184053U, 1419971947U, 1419759763U, 1419551207U, 1419341041U, 1419129991U, 1418921551U, 1418709581U, 1418500289U, 1418290387U, 1418078429U, 1417870807U, 1417660261U, 1417450193U, 1417239283U, 1417028629U, 1416816109U, 1416605381U, 1416393973U, 1416184151U, 1415974367U, 1415759791U, 1415548481U, 1415338993U, 1415127737U, 1414916513U, 1414706081U, 1414496683U, 1414285841U, 1414075933U, 1413865723U, 1413655609U, 1413443107U, 1413233803U, 1413023639U, 1412815031U, 1412603749U, 1412393903U, 1412182423U, 1411972363U, 1411758683U, 1411549081U, 1411338163U, 1411128419U, 1410915481U, 1410704203U, 1410493127U, 1410282767U, 1410072823U, 1409859751U, 1409648803U, 1409438881U, 1409228333U, 1409018059U, 1408806713U, 1408597321U, 1408386337U, 1408174433U, 1407966977U, 1407755081U, 1407545411U, 1407331943U, 1407121483U, 1406910187U, 1406702161U, 1406491811U, 1406281687U, 1406072201U, 1405861619U, 1405649281U, 1405438123U, 1405227907U, 1405017281U, 1404804259U, 1404592459U, 1404382807U, 1404170093U, 1403960413U, 1403749219U, 1403539117U, 1403328253U, 1403117977U, 1402907347U, 1402696543U, 1402487101U, 1402274179U, 1402063451U, 1401852989U, 1401641771U, 1401431819U, 1401220687U, 1401008503U, 1400799527U, 1400586883U, 1400375531U, 1400164691U, 1399955521U, 1399745411U, 1399536209U, 1399323823U, 1399113361U, 1398902599U, 1398693211U, 1398480011U, 1398271157U, 1398059851U, 1397849273U, 1397638597U, 1397427527U, 1397219311U, 1397008007U, 1396796321U, 1396584877U, 1396373389U, 1396163933U, 1395953003U, 1395742811U, 1395532583U, 1395320299U, 1395110599U, 1394900411U, 1394691731U, 1394481623U, 1394269621U, 1394061323U, 1393848473U, 1393637447U, 1393427027U, 1393216597U, 1393005013U, 1392793447U, 1392582857U, 1392373667U, 1392162097U, 1391951017U, 1391739917U, 1391531941U, 1391323799U, 1391112179U, 1390903231U, 1390693357U, 1390480867U, 1390273177U, 1390061591U, 1389854443U, 1389644899U, 1389435529U, 1389224101U, 1389013657U, 1388802889U, 1388590771U, 1388379371U, 1388168759U, 1387959973U, 1387749851U, 1387538531U, 1387326557U, 1387115207U, 1386903257U, 1386690259U, 1386480191U, 1386269273U, 1386059749U, 1385850449U, 1385640629U, 1385426899U, 1385217611U, 1385009077U, 1384797541U, 1384587221U, 1384376911U, 1384166219U, 1383955427U, 1383743587U, 1383531871U, 1383321073U, 1383109709U, 1382900023U, 1382688089U, 1382478193U, 1382270801U, 1382059321U, 1381850683U, 1381640213U, 1381429349U, 1381218071U, 1381008397U, 1380799099U, 1380588893U, 1380376549U, 1380165037U, 1379956027U, 1379745391U, 1379534699U, 1379324861U, 1379115107U, 1378903499U, 1378695559U, 1378484147U, 1378274273U, 1378062869U, 1377849181U, 1377638539U, 1377427537U, 1377217271U, 1377005527U, 1376795093U, 1376583451U, 1376372927U, 1376163917U, 1375954799U, 1375744219U, 1375533587U, 1375323067U, 1375111141U, 1374901441U, 1374690479U, 1374476767U, 1374266947U, 1374055327U, 1373845763U, 1373635849U, 1373424677U, 1373214013U, 1373002481U, 1372792661U, 1372582951U, 1372371989U, 1372160681U, 1371951631U, 1371740347U, 1371530051U, 1371317737U, 1371107293U, 1370898161U, 1370689351U, 1370478199U, 1370269447U, 1370059211U, 1369848439U, 1369638217U, 1369428089U, 1369216799U, 1369007459U, 1368795163U, 1368583901U, 1368373793U, 1368162869U, 1367952449U, 1367742331U, 1367532007U, 1367321981U, 1367114009U, 1366899931U, 1366690271U, 1366478059U, 1366267829U, 1366055539U, 1365846239U, 1365637037U, 1365426473U, 1365217783U, 1365005639U, 1364797337U, 1364586019U, 1364374621U, 1364163901U, 1363954373U, 1363745497U, 1363535959U, 1363324243U, 1363115399U, 1362903431U, 1362693061U, 1362483347U, 1362272159U, 1362061843U, 1361852521U, 1361642413U, 1361433547U, 1361222483U, 1361011681U, 1360802489U, 1360590611U, 1360380881U, 1360171817U, 1359961501U, 1359749983U, 1359539257U, 1359328409U, 1359117871U, 1358908721U, 1358698249U, 1358486093U, 1358278799U, 1358066891U, 1357857821U, 1357647553U, 1357437911U, 1357226729U, 1357017223U, 1356807173U, 1356596411U, 1356385637U, 1356176741U, 1355964263U, 1355755039U, 1355545183U, 1355336251U, 1355128459U, 1354919273U, 1354708483U, 1354498751U, 1354287721U, 1354078309U, 1353870257U, 1353661961U, 1353449791U, 1353240853U, 1353029723U, 1352821361U, 1352612003U, 1352403421U, 1352193341U, 1351982417U, 1351771667U, 1351559323U, 1351347821U, 1351136029U, 1350925787U, 1350716659U, 1350507239U, 1350298679U, 1350086779U, 1349874391U, 1349663261U, 1349453851U, 1349244133U, 1349031391U, 1348822213U, 1348612427U, 1348402843U, 1348194559U, 1347983867U, 1347773291U, 1347559459U, 1347350909U, 1347141193U, 1346933207U, 1346723429U, 1346514991U, 1346305277U, 1346093471U, 1345883647U, 1345672399U, 1345461539U, 1345252241U, 1345040321U, 1344829741U, 1344618323U, 1344407489U, 1344196753U, 1343988967U, 1343780203U, 1343568277U, 1343355241U, 1343147083U, 1342937987U, 1342728071U, 1342517987U, 1342307893U, 1342097557U, 1341887003U, 1341675697U, 1341468683U, 1341261511U, 1341050771U, 1340841889U, 1340632757U, 1340423269U, 1340211359U, 1340001323U, 1339791269U, 1339578307U, 1339367231U, 1339154987U, 1338943393U, 1338732971U, 1338525077U, 1338315793U, 1338103777U, 1337891767U, 1337684981U, 1337475847U, 1337265647U, 1337056157U, 1336846079U, 1336636783U, 1336427837U, 1336218349U, 1336009819U, 1335798707U, 1335587749U, 1335378673U, 1335167833U, 1334957387U, 1334748409U, 1334537419U, 1334327461U, 1334118859U, 1333910269U, 1333701917U, 1333489019U, 1333276801U, 1333068907U, 1332859907U, 1332650933U, 1332443591U, 1332235007U, 1332026453U, 1331816303U, 1331608273U, 1331395193U, 1331182871U, 1330972241U, 1330765867U, 1330554023U, 1330343453U, 1330131511U, 1329919051U, 1329708893U, 1329498817U, 1329287497U, 1329079417U, 1328868181U, 1328658781U, 1328450027U, 1328240899U, 1328029309U, 1327816559U, 1327606783U, 1327398283U, 1327186691U, 1326977819U, 1326767693U, 1326556859U, 1326346837U, 1326137347U, 1325926681U, 1325717227U, 1325506499U, 1325296927U, 1325087851U, 1324877819U, 1324667611U, 1324459139U, 1324247699U, 1324035077U, 1323826727U, 1323617293U, 1323406849U, 1323194489U, 1322982083U, 1322772643U, 1322561957U, 1322351603U, 1322140619U, 1321930747U, 1321720937U, 1321512457U, 1321303331U, 1321092109U, 1320882851U, 1320674917U, 1320465659U, 1320254339U, 1320043337U, 1319834357U, 1319625709U, 1319414983U, 1319203747U, 1318993883U, 1318785301U, 1318577279U, 1318366037U, 1318152007U, 1317943181U, 1317732791U, 1317523841U, 1317314303U, 1317103897U, 1316895257U, 1316685211U, 1316474221U, 1316265331U, 1316054891U, 1315843693U, 1315632137U, 1315421413U, 1315208959U, 1314999743U, 1314788777U, 1314578333U, 1314370261U, 1314159463U, 1313949479U, 1313740369U, 1313531839U, 1313319703U, 1313108959U, 1312898203U, 1312688057U, 1312479703U, 1312267717U, 1312058303U, 1311847529U, 1311637417U, 1311426583U, 1311215863U, 1311006553U, 1310797487U, 1310588473U, 1310377987U, 1310168747U, 1309958267U, 1309749391U, 1309539499U, 1309329479U, 1309120567U, 1308910397U, 1308700637U, 1308490721U, 1308281453U, 1308072991U, 1307865961U, 1307656717U, 1307445779U, 1307237363U, 1307026261U, 1306817159U, 1306605631U, 1306395403U, 1306185103U, 1305975263U, 1305767531U, 1305558109U, 1305348797U, 1305139603U, 1304929123U, 1304720051U, 1304511617U, 1304300269U, 1304090467U, 1303881353U, 1303671079U, 1303459217U, 1303250287U, 1303040521U, 1302831029U, 1302621143U, 1302409819U, 1302198973U, 1301989541U, 1301779541U, 1301570293U, 1301362219U, 1301151557U, 1300942213U, 1300732399U, 1300522403U, 1300313351U, 1300106153U, 1299895273U, 1299682561U, 1299472831U, 1299264649U, 1299053519U, 1298843407U, 1298634643U, 1298425393U, 1298213723U, 1298005127U, 1297796261U, 1297585661U, 1297373851U, 1297163779U, 1296953461U, 1296743507U, 1296533111U, 1296323929U, 1296112973U, 1295901839U, 1295691101U, 1295482039U, 1295272897U, 1295060023U, 1294851017U, 1294641659U, 1294429363U, 1294219313U, 1294009729U, 1293800581U, 1293592733U, 1293382037U, 1293171641U, 1292958059U, 1292746541U, 1292537063U, 1292325929U, 1292117027U, 1291908257U, 1291699309U, 1291488907U, 1291281083U, 1291071497U, 1290862493U, 1290651811U, 1290443393U, 1290234571U, 1290025021U, 1289815477U, 1289604307U, 1289395417U, 1289184679U, 1288975997U, 1288766833U, 1288556921U, 1288348429U, 1288138339U, 1287928099U, 1287718339U, 1287505741U, 1287295949U, 1287085523U, 1286875927U, 1286667689U, 1286457461U, 1286249161U, 1286040269U, 1285833047U, 1285623533U, 1285412059U, 1285202393U, 1284992759U, 1284780683U, 1284571111U, 1284360967U, 1284151301U, 1283940841U, 1283732231U, 1283522021U, 1283313019U, 1283104279U, 1282895363U, 1282682057U, 1282472407U, 1282264663U, 1282053103U, 1281842747U, 1281633181U, 1281423527U, 1281213191U, 1281003403U, 1280793589U, 1280583313U, 1280372719U, 1280164439U, 1279955377U, 1279745221U, 1279534447U, 1279326287U, 1279117223U, 1278905813U, 1278698909U, 1278491231U, 1278280687U, 1278070979U, 1277860873U, 1277650267U, 1277440727U, 1277231077U, 1277022427U, 1276813621U, 1276603609U, 1276392329U, 1276182547U, 1275971579U, 1275761801U, 1275553781U, 1275343483U, 1275133991U, 1274922373U, 1274710727U, 1274501663U, 1274294531U, 1274083753U, 1273875037U, 1273665233U, 1273455991U, 1273245527U, 1273035679U, 1272825977U, 1272615397U, 1272407239U, 1272197977U, 1271987671U, 1271776811U, 1271566627U, 1271355739U, 1271148253U, 1270937953U, 1270728527U, 1270517849U, 1270308241U, 1270098527U, 1269886873U, 1269680053U, 1269470837U, 1269262321U, 1269054197U, 1268844481U, 1268635651U, 1268427047U, 1268216891U, 1268006891U, 1267800031U, 1267590887U, 1267381691U, 1267170791U, 1266961207U, 1266754579U, 1266546143U, 1266337901U, 1266129401U, 1265918683U, 1265706697U, 1265496943U, 1265288159U, 1265077771U, 1264869971U, 1264660013U, 1264449523U, 1264238123U, 1264029539U, 1263820993U, 1263611597U, 1263400771U, 1263193111U, 1262981519U, 1262772097U, 1262563301U, 1262354279U, 1262142769U, 1261934431U, 1261723741U, 1261515029U, 1261306933U, 1261099303U, 1260888019U, 1260676409U, 1260468359U, 1260257827U, 1260050257U, 1259839093U, 1259629243U, 1259419391U, 1259210399U, 1259001217U, 1258793857U, 1258585037U, 1258375523U, 1258165679U, 1257955429U, 1257744953U, 1257534881U, 1257325829U, 1257116669U, 1256905073U, 1256695789U, 1256486117U, 1256277961U, 1256067493U, 1255856647U, 1255647719U, 1255437529U, 1255225837U, 1255015369U, 1254806131U, 1254595753U, 1254386789U, 1254178421U, 1253968913U, 1253758447U, 1253548619U, 1253338423U, 1253130479U, 1252923073U, 1252715501U, 1252508093U, 1252297457U, 1252086653U, 1251874859U, 1251664657U, 1251453971U, 1251246587U, 1251037709U, 1250828521U, 1250619481U, 1250410003U, 1250200339U, 1249992089U, 1249782367U, 1249573147U, 1249364279U, 1249156483U, 1248948131U, 1248738089U, 1248528599U, 1248319139U, 1248109439U, 1247902109U, 1247692639U, 1247481349U, 1247271547U, 1247063087U, 1246854223U, 1246645307U, 1246435901U, 1246227581U, 1246018871U, 1245810227U, 1245601571U, 1245392903U, 1245184243U, 1244973703U, 1244765047U, 1244557333U, 1244346863U, 1244135653U, 1243927999U, 1243717823U, 1243509257U, 1243298579U, 1243088681U, 1242879059U, 1242671167U, 1242460357U, 1242246671U, 1242039277U, 1241829913U, 1241620693U, 1241410673U, 1241202409U, 1240991117U, 1240782497U, 1240572649U, 1240363273U, 1240153777U, 1239943217U, 1239734767U, 1239525311U, 1239313181U, 1239103571U, 1238893823U, 1238684219U, 1238472803U, 1238262409U, 1238054203U, 1237844537U, 1237634821U, 1237427551U, 1237217627U, 1237009793U, 1236798539U, 1236589789U, 1236381481U, 1236172387U, 1235964097U, 1235754187U, 1235545853U, 1235335271U, 1235126447U, 1234917487U, 1234708621U, 1234500199U, 1234289923U, 1234080811U, 1233871147U, 1233660019U, 1233451543U, 1233242953U, 1233033727U, 1232823541U, 1232613331U, 1232402621U, 1232193211U, 1231982483U, 1231772611U, 1231562147U, 1231353373U, 1231146467U, 1230937441U, 1230727991U, 1230517793U, 1230311371U, 1230102737U, 1229895523U, 1229684839U, 1229476231U, 1229268809U, 1229059703U, 1228850041U, 1228638493U, 1228429607U, 1228220797U, 1228011221U, 1227800507U, 1227590239U, 1227381409U, 1227172223U, 1226964671U, 1226753419U, 1226542657U, 1226332829U, 1226122453U, 1225911629U, 1225702547U, 1225493051U, 1225282477U, 1225072763U, 1224862213U, 1224653371U, 1224442993U, 1224234727U, 1224025021U, 1223816687U, 1223607443U, 1223398019U, 1223187829U, 1222978951U, 1222770077U, 1222560371U, 1222351069U, 1222142459U, 1221933131U, 1221721819U, 1221514477U, 1221302977U, 1221094829U, 1220885647U, 1220675699U, 1220464283U, 1220254433U, 1220047229U, 1219838999U, 1219629767U, 1219421089U, 1219213297U, 1219005551U, 1218797189U, 1218587507U, 1218377591U, 1218168283U, 1217959759U, 1217750113U, 1217539289U, 1217329511U, 1217123249U, 1216913377U, 1216703687U, 1216494469U, 1216286101U, 1216077211U, 1215867539U, 1215660739U, 1215451949U, 1215241673U, 1215031777U, 1214822281U, 1214612899U, 1214402617U, 1214193439U, 1213983487U, 1213775221U, 1213567811U, 1213358513U, 1213147499U, 1212936583U, 1212727433U, 1212520013U, 1212311081U, 1212103577U, 1211893097U, 1211685161U, 1211473667U, 1211264987U, 1211058197U, 1210849229U, 1210639567U, 1210431389U, 1210221599U, 1210011203U, 1209802301U, 1209594917U, 1209386179U, 1209175673U, 1208967143U, 1208757743U, 1208547889U, 1208338451U, 1208131159U, 1207920361U, 1207710793U, 1207501777U, 1207294171U, 1207084621U, 1206876179U, 1206669041U, 1206459521U, 1206249859U, 1206041953U, 1205831299U, 1205622923U, 1205415979U, 1205207389U, 1204998191U, 1204787341U, 1204578779U, 1204371323U, 1204162783U, 1203951167U, 1203740099U, 1203532607U, 1203322357U, 1203111703U, 1202902793U, 1202693599U, 1202485397U, 1202275051U, 1202065471U, 1201854851U, 1201645231U, 1201434701U, 1201227581U, 1201018723U, 1200811463U, 1200602569U, 1200391783U, 1200182749U, 1199970719U, 1199762611U, 1199552531U, 1199343581U, 1199132707U, 1198924267U, 1198714327U, 1198506821U, 1198298653U, 1198090477U, 1197882457U, 1197674893U, 1197466163U, 1197256231U, 1197048563U, 1196838133U, 1196629429U, 1196420011U, 1196211407U, 1196001601U, 1195792771U, 1195585481U, 1195374319U, 1195164823U, 1194956393U, 1194748517U, 1194540509U, 1194329251U, 1194120047U, 1193911993U, 1193703031U, 1193491619U, 1193283407U, 1193075309U, 1192865567U, 1192657183U, 1192448381U, 1192240703U, 1192030831U, 1191823163U, 1191612913U, 1191402739U, 1191193649U, 1190984173U, 1190775451U, 1190564161U, 1190355941U, 1190148107U, 1189939213U, 1189728121U, 1189519997U, 1189311247U, 1189101713U, 1188892717U, 1188685703U, 1188475777U, 1188268001U, 1188058351U, 1187849153U, 1187640917U, 1187433263U, 1187226367U, 1187015953U, 1186805089U, 1186596007U, 1186388261U, 1186178297U, 1185970603U, 1185761939U, 1185550823U, 1185341567U, 1185133997U, 1184923501U, 1184713903U, 1184506039U, 1184297089U, 1184087273U, 1183878329U, 1183669787U, 1183458817U, 1183250791U, 1183041817U, 1182832331U, 1182623809U, 1182414503U, 1182205709U, 1181997067U, 1181787179U, 1181577517U, 1181368277U, 1181158673U, 1180949249U, 1180738123U, 1180528859U, 1180320989U, 1180111057U, 1179901351U, 1179692753U, 1179482891U, 1179277469U, 1179068017U, 1178859497U, 1178650687U, 1178442443U, 1178232611U, 1178021371U, 1177811227U, 1177601077U, 1177390987U, 1177182557U, 1176975281U, 1176766693U, 1176558433U, 1176348211U, 1176142267U, 1175934349U, 1175724499U, 1175516383U, 1175305661U, 1175096981U, 1174887067U, 1174678643U, 1174471559U, 1174261367U, 1174052647U, 1173844219U, 1173636703U, 1173426931U, 1173217663U, 1173009319U, 1172799917U, 1172590231U, 1172381857U, 1172174807U, 1171965953U, 1171758163U, 1171550299U, 1171342357U, 1171133347U, 1170923531U, 1170715573U, 1170506611U, 1170297743U, 1170087619U, 1169879033U, 1169673629U, 1169464913U, 1169253593U, 1169046509U, 1168837333U, 1168628623U, 1168419073U, 1168211003U, 1168001629U, 1167792499U, 1167582679U, 1167374083U, 1167164641U, 1166955613U, 1166747363U, 1166538743U, 1166330059U, 1166119189U, 1165910633U, 1165703027U, 1165492703U, 1165285949U, 1165078643U, 1164868769U, 1164659869U, 1164451963U, 1164242549U, 1164034369U, 1163827999U, 1163620747U, 1163411423U, 1163203091U, 1162992989U, 1162784431U, 1162574671U, 1162365587U, 1162159013U, 1161950299U, 1161741389U, 1161533117U, 1161327229U, 1161119857U, 1160911247U, 1160702561U, 1160493413U, 1160284217U, 1160074693U, 1159865429U, 1159657883U, 1159447573U, 1159238293U, 1159029413U, 1158821291U, 1158610679U, 1158401791U, 1158192437U, 1157983051U, 1157773979U, 1157566313U, 1157356867U, 1157148761U, 1156940111U, 1156732697U, 1156522207U, 1156314457U, 1156105541U, 1155900293U, 1155689329U, 1155480661U, 1155273419U, 1155064697U, 1154855899U, 1154646653U, 1154436793U, 1154228027U, 1154020729U, 1153810711U, 1153603991U, 1153394663U, 1153187417U, 1152978973U, 1152771073U, 1152563249U, 1152353821U, 1152145993U, 1151938247U, 1151730473U, 1151522587U, 1151315437U, 1151105951U, 1150895927U, 1150688501U, 1150477577U, 1150271407U, 1150063381U, 1149855211U, 1149644887U, 1149437147U, 1149227243U, 1149020567U, 1148810137U, 1148600951U, 1148394769U, 1148185991U, 1147977247U, 1147768847U, 1147562491U, 1147353859U, 1147143593U, 1146933899U, 1146724949U, 1146514861U, 1146306919U, 1146100591U, 1145894003U, 1145683807U, 1145478899U, 1145271119U, 1145060519U, 1144849163U, 1144640489U, 1144431487U, 1144221607U, 1144014493U, 1143805609U, 1143596227U, 1143388151U, 1143178501U, 1142967641U, 1142757263U, 1142548973U, 1142340253U, 1142130797U, 1141922099U, 1141712267U, 1141504339U, 1141295399U, 1141085873U, 1140875789U, 1140666523U, 1140455947U, 1140247531U, 1140040739U, 1139831323U, 1139624011U, 1139414651U, 1139205901U, 1138998829U, 1138789373U, 1138581187U, 1138373713U, 1138165307U, 1137956741U, 1137749777U, 1137543557U, 1137334369U, 1137125887U, 1136915501U, 1136704747U, 1136495683U, 1136285251U, 1136077577U, 1135868191U, 1135660817U, 1135452361U, 1135244809U, 1135035169U, 1134824861U, 1134615437U, 1134406519U, 1134197663U, 1133988629U, 1133778851U, 1133568727U, 1133357807U, 1133149687U, 1132940047U, 1132731473U, 1132524047U, 1132317119U, 1132109567U, 1131901469U, 1131692797U, 1131482159U, 1131273667U, 1131064631U, 1130857417U, 1130648083U, 1130439929U, 1130231803U, 1130021449U, 1129813459U, 1129605619U, 1129394641U, 1129186661U, 1128976669U, 1128768803U, 1128560591U, 1128354179U, 1128145127U, 1127938793U, 1127729279U, 1127520491U, 1127310199U, 1127101757U, 1126891127U, 1126683491U, 1126474469U, 1126268371U, 1126060379U, 1125850861U, 1125645503U, 1125435653U, 1125228911U, 1125019937U, 1124810191U, 1124601029U, 1124391427U, 1124181301U, 1123972217U, 1123763177U, 1123553309U, 1123346023U, 1123136743U, 1122928627U, 1122720967U, 1122511417U, 1122302417U, 1122093737U, 1121887787U, 1121678477U, 1121468987U, 1121263597U, 1121054999U, 1120848263U, 1120639991U, 1120430299U, 1120221979U, 1120012321U, 1119805361U, 1119597139U, 1119388597U, 1119178637U, 1118973001U, 1118764489U, 1118557243U, 1118348449U, 1118141587U, 1117932931U, 1117724207U, 1117513043U, 1117305067U, 1117096891U, 1116887111U, 1116679621U, 1116471449U, 1116262709U, 1116055631U, 1115846243U, 1115635361U, 1115427913U, 1115219251U, 1115012053U, 1114803533U, 1114593659U, 1114385507U, 1114178473U, 1113968143U, 1113762623U, 1113553663U, 1113347029U, 1113138293U, 1112928077U, 1112717911U, 1112509877U, 1112301271U, 1112092691U, 1111885717U, 1111677641U, 1111467271U, 1111260041U, 1111051927U, 1110844181U, 1110635249U, 1110426409U, 1110217847U, 1110008941U, 1109801263U, 1109592233U, 1109383721U, 1109176469U, 1108968821U, 1108760137U, 1108551179U, 1108344191U, 1108137031U, 1107929003U, 1107720883U, 1107514039U, 1107305911U, 1107098303U, 1106892403U, 1106683751U, 1106474197U, 1106265071U, 1106056043U, 1105847839U, 1105639783U, 1105429693U, 1105221853U, 1105013123U, 1104804509U, 1104595663U, 1104387239U, 1104180157U, 1103972567U, 1103765197U, 1103556331U, 1103348461U, 1103142101U, 1102933277U, 1102726543U, 1102519267U, 1102313431U, 1102104473U, 1101895429U, 1101685861U, 1101479651U, 1101268541U, 1101060229U, 1100852899U, 1100645999U, 1100436301U, 1100227207U, 1100018219U, 1099811047U, 1099602997U, 1099393643U, 1099185673U, 1098978599U, 1098770263U, 1098561227U, 1098351797U, 1098144017U, 1097937167U, 1097728157U, 1097520947U, 1097312089U, 1097103767U, 1096897601U, 1096689799U, 1096482011U, 1096274651U, 1096066739U, 1095859199U, 1095650089U, 1095442963U, 1095231623U, 1095024257U, 1094816797U, 1094609557U, 1094398931U, 1094189693U, 1093980971U, 1093770611U, 1093563649U, 1093358719U, 1093150999U, 1092943727U, 1092736243U, 1092527509U, 1092318377U, 1092112319U, 1091904797U, 1091696719U, 1091489419U, 1091281019U, 1091072471U, 1090864699U, 1090656817U, 1090447843U, 1090240531U, 1090031741U, 1089824773U, 1089618017U, 1089409109U, 1089200053U, 1088991263U, 1088783723U, 1088576893U, 1088365753U, 1088157073U, 1087948157U, 1087740917U, 1087532689U, 1087324613U, 1087118537U, 1086911729U, 1086703643U, 1086495727U, 1086288169U, 1086080651U, 1085870603U, 1085664887U, 1085456423U, 1085247697U, 1085038519U, 1084833017U, 1084624049U, 1084416631U, 1084208351U, 1084001693U, 1083793349U, 1083585871U, 1083377047U, 1083170471U, 1082963663U, 1082756149U, 1082546651U, 1082338427U, 1082131829U, 1081924471U, 1081716761U, 1081511393U, 1081303913U, 1081096957U, 1080887629U, 1080678889U, 1080469007U, 1080262063U, 1080055027U, 1079847971U, 1079640707U, 1079432869U, 1079223599U, 1079014879U, 1078808681U, 1078599227U, 1078390589U, 1078182643U, 1077975377U, 1077768583U, 1077558403U, 1077350501U, 1077143029U, 1076934251U, 1076724241U, 1076518097U, 1076309501U, 1076101567U, 1075893557U, 1075684787U, 1075475461U, 1075267649U, 1075058701U, 1074849661U, 1074641677U, 1074432679U, 1074225577U, 1074019853U, 1073811041U, 1073601887U, 1073392231U, 1073184083U, 1072976483U, 1072767901U, 1072560497U, 1072351633U, 1072144147U, 1071935113U, 1071728831U, 1071520193U, 1071314423U, 1071105181U, 1070897921U, 1070692321U, 1070484431U, 1070277881U, 1070069713U, 1069861379U, 1069652459U, 1069443377U, 1069236671U, 1069029323U, 1068821141U, 1068613543U, 1068406421U, 1068198277U, 1067990419U, 1067782787U, 1067575109U, 1067369003U, 1067160917U, 1066953301U, 1066746419U, 1066536941U, 1066330519U, 1066124239U, 1065916381U, 1065710047U, 1065502043U, 1065293909U, 1065085093U, 1064875531U, 1064669233U, 1064464769U, 1064256913U, 1064052889U, 1063841941U, 1063634183U, 1063429519U, 1063220489U, 1063011779U, 1062803279U, 1062594389U, 1062385393U, 1062178993U, 1061971153U, 1061765231U, 1061557109U, 1061348021U, 1061139697U, 1060931147U, 1060724087U, 1060514333U, 1060306607U, 1060098943U, 1059890033U, 1059683543U, 1059476063U, 1059268699U, 1059058799U, 1058851631U, 1058644291U, 1058437243U, 1058228651U, 1058022887U, 1057815553U, 1057607189U, 1057398107U, 1057191097U, 1056981413U, 1056774827U, 1056567443U, 1056358829U, 1056150707U, 1055942477U, 1055735311U, 1055524109U, 1055317657U, 1055108851U, 1054899821U, 1054691531U, 1054482683U, 1054276051U, 1054070753U, 1053861643U, 1053652829U, 1053443057U, 1053235811U, 1053029443U, 1052820511U, 1052613781U, 1052407277U, 1052201207U, 1051991939U, 1051782857U, 1051575347U, 1051368133U, 1051161451U, 1050953941U, 1050747079U, 1050538583U, 1050331537U, 1050123911U, 1049915177U, 1049708141U, 1049499391U, 1049291899U, 1049084801U, 1048875713U, 1048666351U, 1048459133U, 1048250167U, 1048043951U, 1047834761U, 1047627271U, 1047418517U, 1047210709U, 1047002123U, 1046793551U, 1046584937U, 1046377229U, 1046170379U, 1045963277U, 1045755479U, 1045548289U, 1045341391U, 1045131757U, 1044923059U, 1044714707U, 1044506663U, 1044299353U, 1044089779U, 1043881469U, 1043675887U, 1043468333U, 1043259947U, 1043052079U, 1042842733U, 1042636327U, 1042430009U, 1042222837U, 1042014559U, 1041806749U, 1041601129U, 1041395071U, 1041186929U, 1040977403U, 1040770943U, 1040561549U, 1040352769U, 1040148119U, 1039940617U, 1039734901U, 1039527631U, 1039319389U, 1039112171U, 1038904313U, 1038697459U, 1038489227U, 1038281971U, 1038076063U, 1037869297U, 1037660693U, 1037454337U, 1037245081U, 1037036801U, 1036830203U, 1036622537U, 1036418689U, 1036209221U, 1036001821U, 1035793637U, 1035585337U, 1035377579U, 1035169859U, 1034963477U, 1034755889U, 1034547919U, 1034339519U, 1034133439U, 1033926133U, 1033718393U, 1033508219U, 1033301741U, 1033093891U, 1032883727U, 1032675671U, 1032468491U, 1032261277U, 1032053389U, 1031846441U, 1031638939U, 1031432029U, 1031222191U, 1031015443U, 1030807237U, 1030602227U, 1030394653U, 1030187299U, 1029978863U, 1029770507U, 1029562477U, 1029356557U, 1029149479U, 1028943049U, 1028736311U, 1028526439U, 1028322089U, 1028114587U, 1027905079U, 1027698571U, 1027491097U, 1027281383U, 1027072499U, 1026864593U, 1026655111U, 1026449509U, 1026242017U, 1026034411U, 1025827493U, 1025619773U, 1025412833U, 1025205917U, 1024998553U, 1024790993U, 1024585409U, 1024377589U, 1024170479U, 1023963079U, 1023754891U, 1023546973U, 1023340459U, 1023130879U, 1022924689U, 1022717417U, 1022509559U, 1022303539U, 1022093477U, 1021885679U, 1021678703U, 1021470403U, 1021262609U, 1021056017U, 1020847343U, 1020639803U, 1020432683U, 1020225047U, 1020020171U, 1019812693U, 1019606831U, 1019398117U, 1019190233U, 1018982821U, 1018775161U, 1018567057U, 1018358507U, 1018151209U, 1017944381U, 1017736241U, 1017530897U, 1017324137U, 1017116063U, 1016908021U, 1016700959U, 1016493871U, 1016286463U, 1016078939U, 1015870729U, 1015663459U, 1015456751U, 1015249799U, 1015043849U, 1014837041U, 1014630109U, 1014424841U, 1014216271U, 1014010013U, 1013804111U, 1013594851U, 1013387113U, 1013179397U, 1012969481U, 1012763077U, 1012555567U, 1012347803U, 1012140301U, 1011933803U, 1011728813U, 1011522041U, 1011312689U, 1011105943U, 1010899103U, 1010691037U, 1010484037U, 1010277799U, 1010068273U, 1009863587U, 1009654741U, 1009449401U, 1009242103U, 1009035059U, 1008826657U, 1008617111U, 1008409531U, 1008202501U, 1007995843U, 1007786251U, 1007579669U, 1007371847U, 1007167529U, 1006961783U, 1006755119U, 1006546817U, 1006337861U, 1006130189U, 1005921529U, 1005714239U, 1005508093U, 1005301811U, 1005096139U, 1004888011U, 1004681233U, 1004475079U, 1004267977U, 1004061257U, 1003852589U, 1003647949U, 1003439069U, 1003232161U, 1003024067U, 1002817859U, 1002610171U, 1002403361U, 1002194651U, 1001986877U, 1001778803U, 1001571667U, 1001364493U, 1001156677U, 1000951957U, 1000744669U, 1000537129U, 1000327297U, 1000119983U, 999912523U, 999703801U, 999493673U, 999286423U, 999078749U, 998871407U, 998664533U, 998458471U, 998253203U, 998046109U, 997839767U, 997633313U, 997426693U, 997218899U, 997011133U, 996803813U, 996597577U, 996390223U, 996183359U, 995977547U, 995770397U, 995562409U, 995354803U, 995146829U, 994941529U, 994735051U, 994527539U, 994320137U, 994113697U, 993907393U, 993698323U, 993491119U, 993282299U, 993076549U, 992870051U, 992663029U, 992455333U, 992248849U, 992042297U, 991833253U, 991624423U, 991417409U, 991211311U, 991005881U, 990798979U, 990592243U, 990385157U, 990176959U, 989971237U, 989762567U, 989556467U, 989348963U, 989142277U, 988934563U, 988729121U, 988519901U, 988313663U, 988104911U, 987897461U, 987692201U, 987484747U, 987276473U, 987069637U, 986861357U, 986656057U, 986450291U, 986242583U, 986034559U, 985828897U, 985620491U, 985413613U, 985208027U, 984999641U, 984793639U, 984586049U, 984379723U, 984171319U, 983966077U, 983761687U, 983554151U, 983347199U, 983139727U, 982933051U, 982728209U, 982520449U, 982314679U, 982108307U, 981899161U, 981692263U, 981484789U, 981277889U, 981072341U, 980865359U, 980657081U, 980449601U, 980242871U, 980035361U, 979828741U, 979620721U, 979413271U, 979206149U, 979000333U, 978793337U, 978582823U, 978378091U, 978170003U, 977962343U, 977755951U, 977548213U, 977341201U, 977134861U, 976928089U, 976721873U, 976515613U, 976308323U, 976101821U, 975892903U, 975685771U, 975477911U, 975270103U, 975063059U, 974856133U, 974650109U, 974441773U, 974234951U, 974027363U, 973819969U, 973612897U, 973407217U, 973200797U, 972991693U, 972783767U, 972575189U, 972370271U, 972161327U, 971955211U, 971747593U, 971541997U, 971334241U, 971126231U, 970917953U, 970712653U, 970504793U, 970298893U, 970093193U, 969885979U, 969678383U, 969471989U, 969264253U, 969059699U, 968852399U, 968645647U, 968438519U, 968231983U, 968024059U, 967817281U, 967613329U, 967406161U, 967197743U, 966990467U, 966783197U, 966577459U, 966369473U, 966164629U, 965956177U, 965746939U, 965540179U, 965333641U, 965127589U, 964920427U, 964712663U, 964505779U, 964297351U, 964090601U, 963884557U, 963679721U, 963472667U, 963264233U, 963057677U, 962851469U, 962644237U, 962439397U, 962233927U, 962026067U, 961818331U, 961609657U, 961402753U, 961196113U, 960989921U, 960783503U, 960575053U, 960369671U, 960164357U, 959958569U, 959751467U, 959545339U, 959337787U, 959132063U, 958927643U, 958719757U, 958513207U, 958308079U, 958099903U, 957892121U, 957686003U, 957479813U, 957274463U, 957070073U, 956863231U, 956656499U, 956450219U, 956243017U, 956035967U, 955827647U, 955619213U, 955411801U, 955206139U, 955000157U, 954793003U, 954587419U, 954379667U, 954173333U, 953967467U, 953761241U, 953554561U, 953347751U, 953141549U, 952936403U, 952729321U, 952522433U, 952313891U, 952108571U, 951902069U, 951695267U, 951487843U, 951281183U, 951072641U, 950867891U, 950659939U, 950453393U, 950245817U, 950038891U, 949831711U, 949624163U, 949418621U, 949210631U, 949004237U, 948797947U, 948590129U, 948383503U, 948176329U, 947969749U, 947762281U, 947557529U, 947350549U, 947146309U, 946941377U, 946733339U, 946525397U, 946319123U, 946112749U, 945906653U, 945699767U, 945493957U, 945286103U, 945079393U, 944872997U, 944666137U, 944457727U, 944251129U, 944045093U, 943841623U, 943634413U, 943428457U, 943221553U, 943014223U, 942807059U, 942599201U, 942394279U, 942186577U, 941980649U, 941770757U, 941565017U, 941358941U, 941153023U, 940944761U, 940739473U, 940534457U, 940328141U, 940121129U, 939914237U, 939707311U, 939498481U, 939290711U, 939083969U, 938877299U, 938670497U, 938463313U, 938256743U, 938050571U, 937843117U, 937635403U, 937430023U, 937224481U, 937017241U, 936808751U, 936602551U, 936393247U, 936187487U, 935980187U, 935774839U, 935568223U, 935362513U, 935157149U, 934950433U, 934744141U, 934538333U, 934332799U, 934125721U, 933915907U, 933712601U, 933505961U, 933298987U, 933094187U, 932887321U, 932682197U, 932474657U, 932268949U, 932062069U, 931853539U, 931648031U, 931441501U, 931235729U, 931028831U, 930822023U, 930615799U, 930410359U, 930203363U, 929997377U, 929791073U, 929583461U, 929378647U, 929171809U, 928961563U, 928753213U, 928546337U, 928340111U, 928133047U, 927927431U, 927719873U, 927511327U, 927303313U, 927097819U, 926891057U, 926683861U, 926476429U, 926272069U, 926065423U, 925858279U, 925653983U, 925447087U, 925239961U, 925034359U, 924827639U, 924620899U, 924415159U, 924208093U, 924001801U, 923795833U, 923589143U, 923381033U, 923174653U, 922968353U, 922762307U, 922554167U, 922346597U, 922140283U, 921933101U, 921726833U, 921521323U, 921314491U, 921104917U, 920900389U, 920696473U, 920488883U, 920284241U, 920077003U, 919871549U, 919665931U, 919461089U, 919253327U, 919047611U, 918843181U, 918636781U, 918431209U, 918225853U, 918018929U, 917810801U, 917602223U, 917395903U, 917188477U, 916982489U, 916774951U, 916568707U, 916361893U, 916156721U, 915951917U, 915745531U, 915540091U, 915333547U, 915126503U, 914921417U, 914715511U, 914509529U, 914303749U, 914097449U, 913892719U, 913684151U, 913479859U, 913271237U, 913061893U, 912856787U, 912650659U, 912447581U, 912239071U, 912033929U, 911828861U, 911623931U, 911416811U, 911211313U, 911004803U, 910799521U, 910594129U, 910388137U, 910180189U, 909975103U, 909769517U, 909564301U, 909358363U, 909154039U, 908950027U, 908742859U, 908536289U, 908330999U, 908122427U, 907915453U, 907709161U, 907504669U, 907298807U, 907092811U, 906888161U, 906681863U, 906477373U, 906270719U, 906063619U, 905857787U, 905652047U, 905446649U, 905241457U, 905037937U, 904830643U, 904624129U, 904412191U, 904207417U, 904001689U, 903795047U, 903589319U, 903382463U, 903178417U, 902973857U, 902767081U, 902558269U, 902351161U, 902142887U, 901935031U, 901729561U, 901524121U, 901318051U, 901111439U, 900906637U, 900700831U, 900494867U, 900290857U, 900084401U, 899879263U, 899671099U, 899463869U, 899258387U, 899051437U, 898845781U, 898638131U, 898431239U, 898226999U, 898020311U, 897812969U, 897607853U, 897401333U, 897194827U, 896988797U, 896782561U, 896575313U, 896370289U, 896163013U, 895955897U, 895751147U, 895544131U, 895337041U, 895131739U, 894924157U, 894717371U, 894511207U, 894304603U, 894098801U, 893892721U, 893686333U, 893479253U, 893273831U, 893069227U, 892863337U, 892659133U, 892455203U, 892249121U, 892042433U, 891836821U, 891629833U, 891421211U, 891214297U, 891007393U, 890801147U, 890593727U, 890387999U, 890182673U, 889977527U, 889771829U, 889565387U, 889357043U, 889151611U, 888944711U, 888738751U, 888533159U, 888326333U, 888119311U, 887913683U, 887710319U, 887504369U, 887298869U, 887092457U, 886885721U, 886678853U, 886474403U, 886268503U, 886062503U, 885857129U, 885650761U, 885443579U, 885236993U, 885030703U, 884822867U, 884615929U, 884409923U, 884205199U, 883998877U, 883793107U, 883588081U, 883380077U, 883172489U, 882967091U, 882760639U, 882556957U, 882351131U, 882144853U, 881939497U, 881732437U, 881527169U, 881321641U, 881116981U, 880910321U, 880702661U, 880495237U, 880288337U, 880082239U, 879875501U, 879669793U, 879464407U, 879258439U, 879051493U, 878846819U, 878642081U, 878436607U, 878230709U, 878025917U, 877819699U, 877613479U, 877406449U, 877200449U, 876993101U, 876786593U, 876580267U, 876375277U, 876167623U, 875960333U, 875755271U, 875547059U, 875341081U, 875133761U, 874927159U, 874724077U, 874517923U, 874312423U, 874106309U, 873900127U, 873692717U, 873487577U, 873282323U, 873076363U, 872872051U, 872667931U, 872461297U, 872252947U, 872048687U, 871843979U, 871637411U, 871431779U, 871224707U, 871016617U, 870810277U, 870604591U, 870398107U, 870193447U, 869988349U, 869782429U, 869579747U, 869372099U, 869166061U, 868958539U, 868754771U, 868548341U, 868343237U, 868135109U, 867930487U, 867723991U, 867518711U, 867314957U, 867109753U, 866904347U, 866699791U, 866493643U, 866287339U, 866080493U, 865873159U, 865665811U, 865460467U, 865256173U, 865051073U, 864844751U, 864638191U, 864434687U, 864229549U, 864024071U, 863818961U, 863613349U, 863408839U, 863200651U, 862995349U, 862789141U, 862584491U, 862376869U, 862173199U, 861967571U, 861759439U, 861555043U, 861350729U, 861143057U, 860938087U, 860732359U, 860524417U, 860319727U, 860112137U, 859906457U, 859700689U, 859493447U, 859285943U, 859078879U, 858872177U, 858667783U, 858462079U, 858257021U, 858050153U, 857845171U, 857641481U, 857434343U, 857229661U, 857021821U, 856815683U, 856610141U, 856403957U, 856197857U, 855991243U, 855787067U, 855580549U, 855376927U, 855170389U, 854963783U, 854759743U, 854554699U, 854348233U, 854142089U, 853936907U, 853731059U, 853526381U, 853322969U, 853117247U, 852910259U, 852705479U, 852499171U, 852292559U, 852088277U, 851882099U, 851674477U, 851469019U, 851264669U, 851057611U, 850851587U, 850646939U, 850441219U, 850233557U, 850027799U, 849822679U, 849618937U, 849412657U, 849206053U, 849000613U, 848795179U, 848593357U, 848389111U, 848183599U, 847977167U, 847770809U, 847565239U, 847359661U, 847153661U, 846946957U, 846740357U, 846533267U, 846328151U, 846122219U, 845917427U, 845711719U, 845507317U, 845300191U, 845093831U, 844888931U, 844684639U, 844476407U, 844270619U, 844064857U, 843857627U, 843651791U, 843446467U, 843243067U, 843038501U, 842832899U, 842629639U, 842424053U, 842217149U, 842013313U, 841808101U, 841604131U, 841399711U, 841190411U, 840984299U, 840779671U, 840573443U, 840368603U, 840162481U, 839958013U, 839751259U, 839547497U, 839344031U, 839137381U, 838930861U, 838723777U, 838515877U, 838312229U, 838108081U, 837905749U, 837700639U, 837495367U, 837289603U, 837084181U, 836877871U, 836671211U, 836468057U, 836260973U, 836056369U, 835849453U, 835644737U, 835437937U, 835233631U, 835027631U, 834821531U, 834617561U, 834413053U, 834207961U, 834001559U, 833795381U, 833590399U, 833388103U, 833180779U, 832975837U, 832771883U, 832566463U, 832361093U, 832154209U, 831950087U, 831745181U, 831538217U, 831331097U, 831128377U, 830922097U, 830714711U, 830510453U, 830306963U, 830101141U, 829895009U, 829689409U, 829481797U, 829277191U, 829072877U, 828868163U, 828661567U, 828457241U, 828252463U, 828047761U, 827842021U, 827636519U, 827429737U, 827225387U, 827019359U, 826814369U, 826608259U, 826403551U, 826198921U, 825992749U, 825787181U, 825582193U, 825377621U, 825173177U, 824968519U, 824762513U, 824555269U, 824349683U, 824142367U, 823937089U, 823731899U, 823527623U, 823323491U, 823117289U, 822911773U, 822704539U, 822498949U, 822298387U, 822092333U, 821884897U, 821679041U, 821473817U, 821267743U, 821060567U, 820857749U, 820652309U, 820449247U, 820243231U, 820038239U, 819832337U, 819626957U, 819422881U, 819216481U, 819009029U, 818804929U, 818600191U, 818395423U, 818188193U, 817983277U, 817775953U, 817571851U, 817365001U, 817161731U, 816957101U, 816754249U, 816547183U, 816342731U, 816137629U, 815932811U, 815728063U, 815525041U, 815320771U, 815114593U, 814909063U, 814704377U, 814499137U, 814294979U, 814090049U, 813884047U, 813678431U, 813473777U, 813266687U, 813062197U, 812858303U, 812653463U, 812444767U, 812240867U, 812035387U, 811829387U, 811623677U, 811416707U, 811210409U, 811006307U, 810802211U, 810597041U, 810391237U, 810187129U, 809982451U, 809777047U, 809570357U, 809367527U, 809162383U, 808957727U, 808753609U, 808548869U, 808343827U, 808138619U, 807933043U, 807728011U, 807520933U, 807315097U, 807110879U, 806906183U, 806700733U, 806496791U, 806292649U, 806087551U, 805883863U, 805677811U, 805473197U, 805269511U, 805063621U, 804860167U, 804656609U, 804452377U, 804248353U, 804043717U, 803837729U, 803632777U, 803427617U, 803222543U, 803016983U, 802811783U, 802605607U, 802398869U, 802193299U, 801988721U, 801783091U, 801576833U, 801372301U, 801170593U, 800964947U, 800759837U, 800555507U, 800349989U, 800145637U, 799941431U, 799735591U, 799530211U, 799321723U, 799115183U, 798908287U, 798702907U, 798498577U, 798294529U, 798091429U, 797886301U, 797683489U, 797478323U, 797274593U, 797070173U, 796866731U, 796663463U, 796458079U, 796253543U, 796047509U, 795843017U, 795637589U, 795433099U, 795228689U, 795024343U, 794818757U, 794611771U, 794405483U, 794201981U, 793996361U, 793791871U, 793589521U, 793383473U, 793175657U, 792971173U, 792767303U, 792562187U, 792356891U, 792152663U, 791946361U, 791741987U, 791537057U, 791331511U, 791127121U, 790921451U, 790715449U, 790512449U, 790309699U, 790103269U, 789898783U, 789696023U, 789491359U, 789286541U, 789083311U, 788879213U, 788676593U, 788471473U, 788266363U, 788060909U, 787855697U, 787649867U, 787445047U, 787238801U, 787033469U, 786827917U, 786623683U, 786418057U, 786213613U, 786009541U, 785805851U, 785602429U, 785397241U, 785192389U, 784987867U, 784784137U, 784580513U, 784374709U, 784168753U, 783964201U, 783759491U, 783556097U, 783350957U, 783146677U, 782942621U, 782737691U, 782533847U, 782329189U, 782124271U, 781920047U, 781716347U, 781508461U, 781306091U, 781102481U, 780898067U, 780693167U, 780489373U, 780281669U, 780078977U, 779874761U, 779670799U, 779465539U, 779259721U, 779055377U, 778850389U, 778646443U, 778439353U, 778234753U, 778029961U, 777825071U, 777620797U, 777415897U, 777212977U, 777008467U, 776805607U, 776599469U, 776394529U, 776188249U, 775983587U, 775778981U, 775571197U, 775363819U, 775160839U, 774958963U, 774755101U, 774549131U, 774344911U, 774139987U, 773935823U, 773731103U, 773525183U, 773320489U, 773114789U, 772908407U, 772703273U, 772499641U, 772296299U, 772091959U, 771888739U, 771682333U, 771478817U, 771274909U, 771069413U, 770866417U, 770659819U, 770457361U, 770251723U, 770047417U, 769842737U, 769639153U, 769435741U, 769230353U, 769026721U, 768821993U, 768617809U, 768415003U, 768209993U, 768005369U, 767801081U, 767596649U, 767392177U, 767188109U, 766984861U, 766780723U, 766577017U, 766370587U, 766165427U, 765960827U, 765755923U, 765551887U, 765346807U, 765140107U, 764934101U, 764729831U, 764524559U, 764318081U, 764113409U, 763908421U, 763702871U, 763496977U, 763292863U, 763085441U, 762881213U, 762677887U, 762472883U, 762269491U, 762066233U, 761861773U, 761656757U, 761454761U, 761250397U, 761045281U, 760841267U, 760636241U, 760431571U, 760227421U, 760022563U, 759818119U, 759613373U, 759409121U, 759205961U, 759002147U, 758797409U, 758590351U, 758386777U, 758180999U, 757974431U, 757770557U, 757563913U, 757360343U, 757155391U, 756951557U, 756745879U, 756541993U, 756335977U, 756132043U, 755928577U, 755725219U, 755522717U, 755318411U, 755117449U, 754911943U, 754708613U, 754505491U, 754301363U, 754096429U, 753891353U, 753686273U, 753478769U, 753274433U, 753071041U, 752863843U, 752659769U, 752454491U, 752252723U, 752047913U, 751843847U, 751641613U, 751436113U, 751231693U, 751027219U, 750820591U, 750617599U, 750413071U, 750209107U, 750002681U, 749799353U, 749596063U, 749390321U, 749187239U, 748983497U, 748777097U, 748570727U, 748365781U, 748161493U, 747956771U, 747753049U, 747549137U, 747345839U, 747141341U, 746936653U, 746730653U, 746525287U, 746319589U, 746115709U, 745910587U, 745706963U, 745500979U, 745297621U, 745091561U, 744887953U, 744681803U, 744478247U, 744274087U, 744070963U, 743866531U, 743660123U, 743455499U, 743252057U, 743046131U, 742841441U, 742636201U, 742430959U, 742227581U, 742023407U, 741819343U, 741614831U, 741412043U, 741210733U, 741006107U, 740802157U, 740599147U, 740395081U, 740190901U, 739986479U, 739783483U, 739579301U, 739376173U, 739172509U, 738967561U, 738763513U, 738560629U, 738354811U, 738150871U, 737948891U, 737742631U, 737539013U, 737333279U, 737130917U, 736926341U, 736721627U, 736518637U, 736313399U, 736107901U, 735905449U, 735701039U, 735498311U, 735292559U, 735087839U, 734883719U, 734680031U, 734475019U, 734270261U, 734066527U, 733863617U, 733658491U, 733451969U, 733248409U, 733045849U, 732842687U, 732637471U, 732431977U, 732227963U, 732024677U, 731820107U, 731616659U, 731410013U, 731206789U, 731003699U, 730800157U, 730597859U, 730392911U, 730186241U, 729983159U, 729778739U, 729572989U, 729367999U, 729164873U, 728958179U, 728752537U, 728547713U, 728343281U, 728139547U, 727934741U, 727731241U, 727527331U, 727325023U, 727122239U, 726918719U, 726714731U, 726508303U, 726304021U, 726100841U, 725896487U, 725691401U, 725488607U, 725283917U, 725079499U, 724872257U, 724670717U, 724465921U, 724262933U, 724059107U, 723855389U, 723651367U, 723447541U, 723243071U, 723040919U, 722835679U, 722632091U, 722430077U, 722225747U, 722022241U, 721818211U, 721614809U, 721411309U, 721206137U, 721001899U, 720798943U, 720594737U, 720394001U, 720189739U, 719985113U, 719779663U, 719574659U, 719370763U, 719168381U, 718965557U, 718759667U, 718557457U, 718352377U, 718147487U, 717944737U, 717741457U, 717537397U, 717333257U, 717129419U, 716926489U, 716723647U, 716518147U, 716314759U, 716110303U, 715906249U, 715701733U, 715496503U, 715293221U, 715088713U, 714884113U, 714679831U, 714473567U, 714269599U, 714065827U, 713862659U, 713657779U, 713453441U, 713248951U, 713045633U, 712842859U, 712636681U, 712433479U, 712230031U, 712028087U, 711824431U, 711620251U, 711416557U, 711212743U, 711009647U, 710806249U, 710602241U, 710397929U, 710193521U, 709987973U, 709784423U, 709579397U, 709375097U, 709173313U, 708971059U, 708766621U, 708560641U, 708357941U, 708154789U, 707951423U, 707747771U, 707544449U, 707340901U, 707136037U, 706933907U, 706729477U, 706526057U, 706322767U, 706119229U, 705915263U, 705708581U, 705507211U, 705303433U, 705098729U, 704896967U, 704689123U, 704485543U, 704283677U, 704081153U, 703877453U, 703673827U, 703469479U, 703265593U, 703061603U, 702857261U, 702652763U, 702450323U, 702246911U, 702042587U, 701839483U, 701635811U, 701431931U, 701230391U, 701026709U, 700824233U, 700619299U, 700414969U, 700211597U, 700008041U, 699803639U, 699601703U, 699396107U, 699192971U, 698990321U, 698784601U, 698583167U, 698379893U, 698174573U, 697969771U, 697766647U, 697562161U, 697358087U, 697153277U, 696948883U, 696745613U, 696541897U, 696337199U, 696132923U, 695930063U, 695727287U, 695524421U, 695321987U, 695118793U, 694915033U, 694713121U, 694510799U, 694308409U, 694103749U, 693902189U, 693697861U, 693495707U, 693290693U, 693086063U, 692880593U, 692676043U, 692471839U, 692267629U, 692066027U, 691860787U, 691654427U, 691452701U, 691248563U, 691046197U, 690843497U, 690640073U, 690436451U, 690233857U, 690031691U, 689827861U, 689626391U, 689421461U, 689218693U, 689016061U, 688813313U, 688608259U, 688404593U, 688201453U, 688000597U, 687794941U, 687591491U, 687387941U, 687185729U, 686981179U, 686778749U, 686575619U, 686372573U, 686170627U, 685965883U, 685763807U, 685561589U, 685358743U, 685152973U, 684952267U, 684749539U, 684546301U, 684343783U, 684139223U, 683937043U, 683733839U, 683530657U, 683328223U, 683124397U, 682920827U, 682714943U, 682511183U, 682309351U, 682103599U, 681899051U, 681696179U, 681493469U, 681289709U, 681085721U, 680882903U, 680679397U, 680471927U, 680270299U, 680065777U, 679861867U, 679660061U, 679456607U, 679253357U, 679050059U, 678847717U, 678642989U, 678440069U, 678236347U, 678035641U, 677830873U, 677628803U, 677424799U, 677220611U, 677016947U, 676812611U, 676609151U, 676406209U, 676201349U, 675997891U, 675795247U, 675590893U, 675387701U, 675183583U, 674978831U, 674776187U, 674572439U, 674370167U, 674165113U, 673961681U, 673757599U, 673553927U, 673350653U, 673147133U, 672945331U, 672743177U, 672540733U, 672338573U, 672133181U, 671930689U, 671727011U, 671523233U, 671318261U, 671115199U, 670911421U, 670709293U, 670506917U, 670302641U, 670101259U, 669897967U, 669694541U, 669491029U, 669287683U, 669083971U, 668881069U, 668676179U, 668472397U, 668270507U, 668068201U, 667863941U, 667658281U, 667455779U, 667252673U, 667049989U, 666846907U, 666644311U, 666440711U, 666237587U, 666033439U, 665831629U, 665628493U, 665425433U, 665220097U, 665019863U, 664815269U, 664610027U, 664406489U, 664204199U, 663999913U, 663797773U, 663594973U, 663391571U, 663189217U, 662985991U, 662781139U, 662578771U, 662376301U, 662173163U, 661970923U, 661766587U, 661564117U, 661360867U, 661158109U, 660956579U, 660753323U, 660550507U, 660347899U, 660143741U, 659941621U, 659737963U, 659535911U, 659332409U, 659131883U, 658928773U, 658726249U, 658522097U, 658318981U, 658115791U, 657911473U, 657709483U, 657506237U, 657303599U, 657101573U, 656898113U, 656695649U, 656493203U, 656289511U, 656086637U, 655885333U, 655683869U, 655477967U, 655274233U, 655071191U, 654867817U, 654663497U, 654460787U, 654256483U, 654053731U, 653852063U, 653650927U, 653448149U, 653244967U, 653042101U, 652837447U, 652635847U, 652434457U, 652230121U, 652026413U, 651823261U, 651619429U, 651414263U, 651213137U, 651010247U, 650806159U, 650604349U, 650401841U, 650199787U, 649998353U, 649795441U, 649591843U, 649389071U, 649186823U, 648983471U, 648779801U, 648576407U, 648375163U, 648172121U, 647967751U, 647766323U, 647563951U, 647360759U, 647158151U, 646956643U, 646751759U, 646549147U, 646347641U, 646142711U, 645940591U, 645738493U, 645535757U, 645336379U, 645133271U, 644930747U, 644725849U, 644524271U, 644320097U, 644116379U, 643912121U, 643709431U, 643507399U, 643302419U, 643098277U, 642895997U, 642692101U, 642490577U, 642287293U, 642084581U, 641879369U, 641675651U, 641473507U, 641272769U, 641068943U, 640865791U, 640663691U, 640461149U, 640258441U, 640056797U, 639853933U, 639651763U, 639448993U, 639245209U, 639043667U, 638841017U, 638636197U, 638432797U, 638230627U, 638028499U, 637825693U, 637622473U, 637419509U, 637218331U, 637014737U, 636813649U, 636611513U, 636407791U, 636204119U, 636002737U, 635801591U, 635599907U, 635397629U, 635193677U, 634989863U, 634789277U, 634586243U, 634382291U, 634179061U, 633977947U, 633775931U, 633574021U, 633367927U, 633164879U, 632962807U, 632759377U, 632555153U, 632351501U, 632150209U, 631946437U, 631743881U, 631540807U, 631339997U, 631139219U, 630934589U, 630731029U, 630527089U, 630324089U, 630122813U, 629920561U, 629717899U, 629513603U, 629311447U, 629108819U, 628907117U, 628703701U, 628502051U, 628298389U, 628095469U, 627893857U, 627691369U, 627491489U, 627289417U, 627087541U, 626884411U, 626682481U, 626481029U, 626279263U, 626075917U, 625873021U, 625669463U, 625467991U, 625264193U, 625060103U, 624858583U, 624656741U, 624453941U, 624251627U, 624049919U, 623848559U, 623644843U, 623442283U, 623240573U, 623038027U, 622835881U, 622632193U, 622429267U, 622225393U, 622024201U, 621821443U, 621618353U, 621416293U, 621213811U, 621010913U, 620807219U, 620605273U, 620404303U, 620202071U, 619998289U, 619795069U, 619594111U, 619392973U, 619191751U, 618987839U, 618784261U, 618581881U, 618380407U, 618179491U, 617976509U, 617775247U, 617572051U, 617364289U, 617162387U, 616957969U, 616754869U, 616551841U, 616350121U, 616148317U, 615943327U, 615740759U, 615539033U, 615337127U, 615132989U, 614932831U, 614733143U, 614529679U, 614325851U, 614124109U, 613920361U, 613718159U, 613514249U, 613312057U, 613110397U, 612910351U, 612707237U, 612504667U, 612304261U, 612103909U, 611900753U, 611698123U, 611496157U, 611294227U, 611090479U, 610887731U, 610683587U, 610480919U, 610280401U, 610078039U, 609876131U, 609674269U, 609471799U, 609269761U, 609066739U, 608862853U, 608660761U, 608456423U, 608255107U, 608053217U, 607852319U, 607649767U, 607446799U, 607245157U, 607042897U, 606840127U, 606637931U, 606436657U, 606232813U, 606032149U, 605830289U, 605626213U, 605422177U, 605219947U, 605016959U, 604813397U, 604610459U, 604408589U, 604206847U, 604006127U, 603805283U, 603604933U, 603403301U, 603202087U, 603001453U, 602798479U, 602596451U, 602394857U, 602192561U, 601991009U, 601786813U, 601586017U, 601384957U, 601182587U, 600980227U, 600778547U, 600576233U, 600374387U, 600172591U, 599971679U, 599769923U, 599566883U, 599363221U, 599161111U, 598958683U, 598756549U, 598555813U, 598352719U, 598150877U, 597947153U, 597745297U, 597541999U, 597337567U, 597136207U, 596934421U, 596732161U, 596529809U, 596328263U, 596126887U, 595926047U, 595726231U, 595525477U, 595323367U, 595123103U, 594920329U, 594717373U, 594516499U, 594314507U, 594112087U, 593912741U, 593711309U, 593508803U, 593308451U, 593103053U, 592900741U, 592698257U, 592494193U, 592293173U, 592091407U, 591888067U, 591687923U, 591486463U, 591284051U, 591082729U, 590883119U, 590681459U, 590480369U, 590278001U, 590076283U, 589874573U, 589674193U, 589472339U, 589270849U, 589070381U, 588870313U, 588669443U, 588464057U, 588263561U, 588060061U, 587857031U, 587654689U, 587452897U, 587251337U, 587049017U, 586846721U, 586644491U, 586443799U, 586242571U, 586040383U, 585835819U, 585633127U, 585433627U, 585230879U, 585029329U, 584826139U, 584624393U, 584422913U, 584219341U, 584015989U, 583814299U, 583611703U, 583411267U, 583210997U, 583007807U, 582807571U, 582605579U, 582405001U, 582205361U, 582002873U, 581798431U, 581597867U, 581397871U, 581194717U, 580991603U, 580790069U, 580589203U, 580387013U, 580186129U, 579982621U, 579781781U, 579578579U, 579376393U, 579178037U, 578976389U, 578773919U, 578570711U, 578369717U, 578169673U, 577965979U, 577763447U, 577562731U, 577360717U, 577158581U, 576956839U, 576754333U, 576554747U, 576354287U, 576152683U, 575949761U, 575748139U, 575545297U, 575344691U, 575141939U, 574940273U, 574739071U, 574537841U, 574335733U, 574132697U, 573930839U, 573729197U, 573527359U, 573326459U, 573124847U, 572923643U, 572722207U, 572520763U, 572320277U, 572119133U, 571917083U, 571714459U, 571514039U, 571312447U, 571109333U, 570908267U, 570706163U, 570505211U, 570302011U, 570100901U, 569899741U, 569695739U, 569494903U, 569292637U, 569090791U, 568890131U, 568688333U, 568486201U, 568285241U, 568083853U, 567883439U, 567682277U, 567480181U, 567278477U, 567075389U, 566876873U, 566672047U, 566471351U, 566269831U, 566067713U, 565866193U, 565665403U, 565463131U, 565261157U, 565060669U, 564859157U, 564657833U, 564456637U, 564253399U, 564050923U, 563849423U, 563648951U, 563446757U, 563245951U, 563043527U, 562844081U, 562640021U, 562439363U, 562237279U, 562037263U, 561836309U, 561636739U, 561436591U, 561233341U, 561031321U, 560827517U, 560628337U, 560425741U, 560224517U, 560023267U, 559821347U, 559619603U, 559418737U, 559216529U, 559013027U, 558812473U, 558611803U, 558408817U, 558207941U, 558007081U, 557807857U, 557605397U, 557403169U, 557203447U, 557001349U, 556799281U, 556595849U, 556396177U, 556194521U, 555994253U, 555791333U, 555590479U, 555389213U, 555186431U, 554986511U, 554785073U, 554584267U, 554380919U, 554178277U, 553976713U, 553776191U, 553572707U, 553372213U, 553172117U, 552972401U, 552771497U, 552570311U, 552369217U, 552167767U, 551967211U, 551766811U, 551565811U, 551364811U, 551162357U, 550961809U, 550761137U, 550560139U, 550358761U, 550159567U, 549958901U, 549757049U, 549557549U, 549356981U, 549155773U, 548954101U, 548752109U, 548551309U, 548349407U, 548149279U, 547949123U, 547747367U, 547545563U, 547344871U, 547145353U, 546945383U, 546744547U, 546542723U, 546340393U, 546138457U, 545937809U, 545735521U, 545535997U, 545334311U, 545133191U, 544932499U, 544732439U, 544530967U, 544329011U, 544127197U, 543926419U, 543724817U, 543523769U, 543322561U, 543119747U, 542918149U, 542717267U, 542513899U, 542313859U, 542112257U, 541910729U, 541709111U, 541507361U, 541304821U, 541103399U, 540902563U, 540701129U, 540501653U, 540301187U, 540098873U, 539897623U, 539694797U, 539494807U, 539294407U, 539095981U, 538892941U, 538692157U, 538491649U, 538288771U, 538087817U, 537887657U, 537687739U, 537487169U, 537284981U, 537083843U, 536882651U, 536681611U, 536479873U, 536280743U, 536080177U, 535880399U, 535676699U, 535475179U, 535275227U, 535076489U, 534877139U, 534675809U, 534475439U, 534273799U, 534072523U, 533871847U, 533669711U, 533467969U, 533268401U, 533066321U, 532865881U, 532665751U, 532465837U, 532263973U, 532062943U, 531863203U, 531661121U, 531460661U, 531258587U, 531058793U, 530857277U, 530654587U, 530453389U, 530251793U, 530050559U, 529850803U, 529650467U, 529450759U, 529250581U, 529048207U, 528848687U, 528646109U, 528445363U, 528244949U, 528043793U, 527843429U, 527644543U, 527442943U, 527244271U, 527042909U, 526841269U, 526640363U, 526441231U, 526241101U, 526040443U, 525839239U, 525638411U, 525434137U, 525234989U, 525033917U, 524833663U, 524631677U, 524432423U, 524231369U, 524029361U, 523831199U, 523626899U, 523425431U, 523225741U, 523026701U, 522826373U, 522627043U, 522427067U, 522224917U, 522023401U, 521821427U, 521621959U, 521422549U, 521221067U, 521019319U, 520817963U, 520616627U, 520416683U, 520213721U, 520012981U, 519811693U, 519612167U, 519410641U, 519212537U, 519010183U, 518809799U, 518610613U, 518408963U, 518208749U, 518007229U, 517808209U, 517608347U, 517408183U, 517207921U, 517005949U, 516805997U, 516604573U, 516406013U, 516207467U, 516008153U, 515806139U, 515604629U, 515405351U, 515204141U, 515003767U, 514802657U, 514601641U, 514400261U, 514198963U, 513997249U, 513796343U, 513594311U, 513394933U, 513194443U, 512993147U, 512791793U, 512591657U, 512391179U, 512189567U, 511989869U, 511791689U, 511592533U, 511390471U, 511189741U, 510988547U, 510785537U, 510583921U, 510382417U, 510182483U, 509981909U, 509779393U, 509577611U, 509376979U, 509178223U, 508978709U, 508776343U, 508576129U, 508377131U, 508175669U, 507974827U, 507776117U, 507575839U, 507374239U, 507172243U, 506971207U, 506771051U, 506569117U, 506371009U, 506169997U, 505970363U, 505771171U, 505568621U, 505370287U, 505167449U, 504965723U, 504765221U, 504565993U, 504363793U, 504162943U, 503962243U, 503761499U, 503562671U, 503362183U, 503161073U, 502963723U, 502760147U, 502557053U, 502358569U, 502157779U, 501955921U, 501757211U, 501555529U, 501353029U, 501151003U, 500950243U, 500749423U, 500548927U, 500349547U, 500150419U, 499949237U, 499748027U, 499548073U, 499348043U, 499148371U, 498946183U, 498744937U, 498544243U, 498344221U, 498145331U, 497944339U, 497742803U, 497542301U, 497342597U, 497142461U, 496944137U, 496743421U, 496542467U, 496342559U, 496141033U, 495942431U, 495744017U, 495541757U, 495342109U, 495144467U, 494944381U, 494744039U, 494544251U, 494343253U, 494142589U, 493941887U, 493744421U, 493544963U, 493343107U, 493144049U, 492942053U, 492741779U, 492543169U, 492340843U, 492142411U, 491941981U, 491741039U, 491539963U, 491339879U, 491139391U, 490939979U, 490739591U, 490540991U, 490338143U, 490138709U, 489939733U, 489741347U, 489539027U, 489340637U, 489141589U, 488941511U, 488740841U, 488539937U, 488338727U, 488139371U, 487937057U, 487738711U, 487538809U, 487339261U, 487140481U, 486937639U, 486736531U, 486537329U, 486338273U, 486136883U, 485937509U, 485738203U, 485538127U, 485337989U, 485140349U, 484937711U, 484737509U, 484536757U, 484336837U, 484137497U, 483939971U, 483737039U, 483537449U, 483337639U, 483138653U, 482938283U, 482739253U, 482538299U, 482338403U, 482138263U, 481938917U, 481736617U, 481536409U, 481337513U, 481137857U, 480937759U, 480739001U, 480537581U, 480336917U, 480136567U, 479938223U, 479737619U, 479539097U, 479339183U, 479141059U, 478942067U, 478741559U, 478542703U, 478340857U, 478142449U, 477944321U, 477743977U, 477546011U, 477347399U, 477147521U, 476947259U, 476747641U, 476548901U, 476348827U, 476150273U, 475948013U, 475750589U, 475551379U, 475352797U, 475150409U, 474949693U, 474751171U, 474549793U, 474348517U, 474147491U, 473949131U, 473748619U, 473548253U, 473348831U, 473147219U, 472948547U, 472747463U, 472547989U, 472347287U, 472145659U, 471945917U, 471748649U, 471548069U, 471348961U, 471149207U, 470950153U, 470748791U, 470549347U, 470351477U, 470150717U, 469952341U, 469751767U, 469551091U, 469352539U, 469151213U, 468950203U, 468751051U, 468552247U, 468353461U, 468152129U, 467952377U, 467754227U, 467555227U, 467355353U, 467156101U, 466955911U, 466757003U, 466556239U, 466357963U, 466158311U, 465959267U, 465760007U, 465561557U, 465360937U, 465161383U, 464962279U, 464762321U, 464563501U, 464362757U, 464163571U, 463962397U, 463764967U, 463564469U, 463364893U, 463166261U, 462966761U, 462766189U, 462569413U, 462372247U, 462170981U, 461971409U, 461772973U, 461573053U, 461372407U, 461172953U, 460973837U, 460773757U, 460575421U, 460375787U, 460175531U, 459975463U, 459775529U, 459576269U, 459375529U, 459176827U, 458978837U, 458778251U, 458579623U, 458378449U, 458179201U, 457980247U, 457780087U, 457579873U, 457380149U, 457179883U, 456978043U, 456778277U, 456580403U, 456382621U, 456183779U, 455983999U, 455784811U, 455587133U, 455387473U, 455190709U, 454989583U, 454790839U, 454592141U, 454393207U, 454192829U, 453991639U, 453792349U, 453594863U, 453395477U, 453195317U, 452997271U, 452797781U, 452598371U, 452398861U, 452198111U, 451999063U, 451798381U, 451599991U, 451401329U, 451203043U, 451003369U, 450804311U, 450605033U, 450406111U, 450207323U, 450005779U, 449805127U, 449607377U, 449408263U, 449210183U, 449009257U, 448811263U, 448610651U, 448410961U, 448211779U, 448012727U, 447814069U, 447614969U, 447417629U, 447219607U, 447018653U, 446819507U, 446619211U, 446420999U, 446222983U, 446025029U, 445823501U, 445625413U, 445426213U, 445225961U, 445026437U, 444825617U, 444626759U, 444429047U, 444229369U, 444030101U, 443829811U, 443630137U, 443431517U, 443232901U, 443033827U, 442834741U, 442637519U, 442437967U, 442240273U, 442041881U, 441842741U, 441643283U, 441444281U, 441245989U, 441046421U, 440848217U, 440650913U, 440452801U, 440253907U, 440054633U, 439853749U, 439654013U, 439457189U, 439257359U, 439056533U, 438858703U, 438659831U, 438462467U, 438263159U, 438064609U, 437865427U, 437666947U, 437466863U, 437268773U, 437068847U, 436868449U, 436670497U, 436471037U, 436273589U, 436074449U, 435875689U, 435675841U, 435478531U, 435278447U, 435078181U, 434878967U, 434679697U, 434481449U, 434283781U, 434085941U, 433886129U, 433689709U, 433489633U, 433289327U, 433091431U, 432890333U, 432691601U, 432492787U, 432294497U, 432094483U, 431894923U, 431696873U, 431497559U, 431296277U, 431098417U, 430900109U, 430702603U, 430503809U, 430302787U, 430105099U, 429906679U, 429707029U, 429509417U, 429310421U, 429109423U, 428910857U, 428711483U, 428511703U, 428314927U, 428117311U, 427918651U, 427719401U, 427521481U, 427322989U, 427123111U, 426925133U, 426724349U, 426525871U, 426326893U, 426127813U, 425928799U, 425728997U, 425533403U, 425334583U, 425135617U, 424936537U, 424737011U, 424541581U, 424343551U, 424146511U, 423946121U, 423748387U, 423548303U, 423351671U, 423152069U, 422954933U, 422755831U, 422557453U, 422359213U, 422158339U, 421960291U, 421763827U, 421563733U, 421366151U, 421167689U, 420969389U, 420769309U, 420572881U, 420375001U, 420176611U, 419976331U, 419776127U, 419578361U, 419379509U, 419179603U, 418979641U, 418780897U, 418582277U, 418383109U, 418183849U, 417986473U, 417785383U, 417587249U, 417388949U, 417191617U, 416992963U, 416794331U, 416597381U, 416398579U, 416200951U, 416001809U, 415803473U, 415603697U, 415405307U, 415207843U, 415009589U, 414810257U, 414610699U, 414413353U, 414215677U, 414018053U, 413818421U, 413621567U, 413423687U, 413225717U, 413026183U, 412828747U, 412631039U, 412431941U, 412232773U, 412034221U, 411835729U, 411636413U, 411439513U, 411240233U, 411042397U, 410843287U, 410646013U, 410449189U, 410249803U, 410050819U, 409853333U, 409656281U, 409458463U, 409258793U, 409058711U, 408860971U, 408664187U, 408464179U, 408266189U, 408065837U, 407867311U, 407669081U, 407471927U, 407271439U, 407073881U, 406877249U, 406679659U, 406479001U, 406280117U, 406082849U, 405884041U, 405687781U, 405490279U, 405291479U, 405093827U, 404895737U, 404697413U, 404499299U, 404301481U, 404102047U, 403904159U, 403705843U, 403507213U, 403310881U, 403112621U, 402915971U, 402715903U, 402517751U, 402320783U, 402121381U, 401923957U, 401724599U, 401528717U, 401332213U, 401131697U, 400931189U, 400733779U, 400535969U, 400336843U, 400139683U, 399941057U, 399744157U, 399547763U, 399350779U, 399152113U, 398954053U, 398755499U, 398555467U, 398357359U, 398159819U, 397961419U, 397764043U, 397567669U, 397369877U, 397171807U, 396973267U, 396774629U, 396577301U, 396379943U, 396181067U, 395980789U, 395781667U, 395584159U, 395385007U, 395188181U, 394990331U, 394794503U, 394596827U, 394396969U, 394198813U, 394002709U, 393804911U, 393606827U, 393408269U, 393210053U, 393009401U, 392811593U, 392612743U, 392415109U, 392218621U, 392022847U, 391824457U, 391626553U, 391429637U, 391231889U, 391033793U, 390835553U, 390637921U, 390441223U, 390241699U, 390042449U, 389843183U, 389645681U, 389447621U, 389248823U, 389052439U, 388855781U, 388656199U, 388459307U, 388259567U, 388061561U, 387864629U, 387667837U, 387469879U, 387272381U, 387076399U, 386878507U, 386682287U, 386482841U, 386284729U, 386088091U, 385888673U, 385690637U, 385492399U, 385295177U, 385097183U, 384897481U, 384702599U, 384503279U, 384303877U, 384105457U, 383910119U, 383710697U, 383513033U, 383314843U, 383118283U, 382920323U, 382722091U, 382526117U, 382327081U, 382131317U, 381932543U, 381733871U, 381536263U, 381339001U, 381141713U, 380943287U, 380745119U, 380549473U, 380353643U, 380155829U, 379959787U, 379761233U, 379564693U, 379368433U, 379169093U, 378972059U, 378774973U, 378576661U, 378379069U, 378181577U, 377986579U, 377790331U, 377593961U, 377396317U, 377199353U, 377001491U, 376804807U, 376607597U, 376412041U, 376214897U, 376016687U, 375818951U, 375622451U, 375423943U, 375226717U, 375030277U, 374835067U, 374637187U, 374441663U, 374245843U, 374049421U, 373850149U, 373652611U, 373455721U, 373259041U, 373061153U, 372865313U, 372666439U, 372467983U, 372269861U, 372073027U, 371875487U, 371679949U, 371481403U, 371284019U, 371087051U, 370890119U, 370690913U, 370493017U, 370294313U, 370097443U, 369899443U, 369703973U, 369505193U, 369307739U, 369109889U, 368911969U, 368714663U, 368517571U, 368320279U, 368120243U, 367923209U, 367726043U, 367529347U, 367332887U, 367135781U, 366938617U, 366741209U, 366543559U, 366347753U, 366149503U, 365955307U, 365756527U, 365558581U, 365363857U, 365166587U, 364970513U, 364773737U, 364575859U, 364377521U, 364179511U, 363983131U, 363785197U, 363588817U, 363390553U, 363195181U, 362999201U, 362803139U, 362604239U, 362406371U, 362210389U, 362014487U, 361815557U, 361619017U, 361423003U, 361226137U, 361028461U, 360832673U, 360635521U, 360439447U, 360240187U, 360040679U, 359842253U, 359645311U, 359447687U, 359249707U, 359052313U, 358858273U, 358661063U, 358463939U, 358266409U, 358068593U, 357872413U, 357675007U, 357478169U, 357280499U, 357083897U, 356885869U, 356688811U, 356492189U, 356295151U, 356098751U, 355901947U, 355704463U, 355507771U, 355309891U, 355114247U, 354917833U, 354720913U, 354523361U, 354326381U, 354130529U, 353933969U, 353737781U, 353539999U, 353342723U, 353145461U, 352948801U, 352753501U, 352555993U, 352360607U, 352163509U, 351967027U, 351769367U, 351572531U, 351374641U, 351177149U, 350980813U, 350785063U, 350585953U, 350388953U, 350192669U, 349996081U, 349801069U, 349605001U, 349408399U, 349212121U, 349017743U, 348820009U, 348624013U, 348426301U, 348229087U, 348031709U, 347834699U, 347637391U, 347439167U, 347242471U, 347044981U, 346849813U, 346652567U, 346454621U, 346257913U, 346061753U, 345865753U, 345669557U, 345473837U, 345275929U, 345078781U, 344882101U, 344684033U, 344488973U, 344292059U, 344097217U, 343898977U, 343703963U, 343508807U, 343311377U, 343115831U, 342919721U, 342722383U, 342523879U, 342328037U, 342131789U, 341935313U, 341738809U, 341541943U, 341347519U, 341150387U, 340953829U, 340757311U, 340561127U, 340364267U, 340168667U, 339974029U, 339778027U, 339582403U, 339384623U, 339187153U, 338991377U, 338796769U, 338599637U, 338403323U, 338206987U, 338010899U, 337813561U, 337615627U, 337419529U, 337223017U, 337028317U, 336830243U, 336634169U, 336437867U, 336240617U, 336046489U, 335848273U, 335650519U, 335451937U, 335257631U, 335061379U, 334866143U, 334671119U, 334475023U, 334278407U, 334081999U, 333885493U, 333689641U, 333493817U, 333295159U, 333099301U, 332902267U, 332708333U, 332513537U, 332317099U, 332121589U, 331923899U, 331726243U, 331530721U, 331334567U, 331139597U, 330943961U, 330746777U, 330549281U, 330353497U, 330155801U, 329958217U, 329761063U, 329565997U, 329372503U, 329175647U, 328979237U, 328784177U, 328586053U, 328389337U, 328193059U, 327995519U, 327800741U, 327605669U, 327410011U, 327213077U, 327017179U, 326821853U, 326623663U, 326428433U, 326231999U, 326037541U, 325842991U, 325645601U, 325448521U, 325253213U, 325057771U, 324862957U, 324666421U, 324471799U, 324273199U, 324076547U, 323881451U, 323686007U, 323491559U, 323294771U, 323098057U, 322903201U, 322706641U, 322510327U, 322315337U, 322119839U, 321923383U, 321727409U, 321530717U, 321333583U, 321137129U, 320941081U, 320744891U, 320551463U, 320355521U, 320159297U, 319962779U, 319766467U, 319571167U, 319375031U, 319180403U, 318982711U, 318785903U, 318589429U, 318393197U, 318196201U, 318000107U, 317805539U, 317609239U, 317414249U, 317218159U, 317021557U, 316825007U, 316630189U, 316434571U, 316240933U, 316042729U, 315846803U, 315650969U, 315456887U, 315260969U, 315064801U, 314867783U, 314671963U, 314475647U, 314281483U, 314084747U, 313889507U, 313693873U, 313499171U, 313301939U, 313106369U, 312911791U, 312714757U, 312520513U, 312326171U, 312130883U, 311935249U, 311740393U, 311544097U, 311348537U, 311150603U, 310954757U, 310760423U, 310565063U, 310367201U, 310172567U, 309976889U, 309780833U, 309585277U, 309390391U, 309194843U, 308999861U, 308803367U, 308608061U, 308414591U, 308219759U, 308025181U, 307831889U, 307635407U, 307438961U, 307243633U, 307049789U, 306853601U, 306659321U, 306462509U, 306268327U, 306071489U, 305877857U, 305682331U, 305488069U, 305293357U, 305095501U, 304900741U, 304706543U, 304511563U, 304317733U, 304123049U, 303926687U, 303730639U, 303533579U, 303337841U, 303142717U, 302947639U, 302751403U, 302556227U, 302360789U, 302164789U, 301969669U, 301774477U, 301578371U, 301384009U, 301189789U, 300993977U, 300799193U, 300604537U, 300409147U, 300214097U, 300018991U, 299824153U, 299630267U, 299435627U, 299240393U, 299045213U, 298849277U, 298652239U, 298456597U, 298263409U, 298066163U, 297872719U, 297677909U, 297481843U, 297285559U, 297091783U, 296897011U, 296700601U, 296505931U, 296311601U, 296116567U, 295921999U, 295726633U, 295531559U, 295336793U, 295140841U, 294942679U, 294748271U, 294553247U, 294359101U, 294165023U, 293968579U, 293776391U, 293581697U, 293386861U, 293190439U, 292996973U, 292800799U, 292605169U, 292409519U, 292215767U, 292021063U, 291827639U, 291633949U, 291437387U, 291242587U, 291048767U, 290854877U, 290661247U, 290463907U, 290269211U, 290071961U, 289876151U, 289683391U, 289489001U, 289295263U, 289099033U, 288904207U, 288709153U, 288515441U, 288322451U, 288125489U, 287931167U, 287736619U, 287540761U, 287346179U, 287151391U, 286959503U, 286764607U, 286568573U, 286374031U, 286178987U, 285983519U, 285789107U, 285594181U, 285399307U, 285205703U, 285008237U, 284812981U, 284618359U, 284422013U, 284227513U, 284032559U, 283836739U, 283642439U, 283449623U, 283255697U, 283058701U, 282864317U, 282669041U, 282475181U, 282280811U, 282085339U, 281889917U, 281695201U, 281500633U, 281306489U, 281113423U, 280918579U, 280723097U, 280528693U, 280334149U, 280141241U, 279946393U, 279751027U, 279560293U, 279365003U, 279170747U, 278975017U, 278780989U, 278585389U, 278389271U, 278195611U, 278001011U, 277805389U, 277611193U, 277419089U, 277225111U, 277029673U, 276835171U, 276644429U, 276448457U, 276252617U, 276058423U, 275863681U, 275669291U, 275475751U, 275281729U, 275088881U, 274894013U, 274697779U, 274504193U, 274310441U, 274117891U, 273924907U, 273730747U, 273535697U, 273342491U, 273147961U, 272953697U, 272758777U, 272564821U, 272371163U, 272178229U, 271982563U, 271787753U, 271595333U, 271400323U, 271206511U, 271009061U, 270814079U, 270619381U, 270427243U, 270232243U, 270036869U, 269844067U, 269647501U, 269451593U, 269257223U, 269063869U, 268870291U, 268676921U, 268483349U, 268290353U, 268094273U, 267900641U, 267707107U, 267513931U, 267318967U, 267123811U, 266929331U, 266735921U, 266541529U, 266344789U, 266149801U, 265955761U, 265762681U, 265568717U, 265376333U, 265184369U, 264990793U, 264798371U, 264604061U, 264408223U, 264215219U, 264021649U, 263825923U, 263631391U, 263435899U, 263239267U, 263046703U, 262852531U, 262658387U, 262464793U, 262271809U, 262080089U, 261886379U, 261692357U, 261498031U, 261306077U, 261112427U, 260918267U, 260725741U, 260532791U, 260338409U, 260144699U, 259950673U, 259756537U, 259560409U, 259367083U, 259174913U, 258980681U, 258786469U, 258593123U, 258399347U, 258205139U, 258011459U, 257818237U, 257623973U, 257431091U, 257237641U, 257044279U, 256853161U, 256658621U, 256462571U, 256266811U, 256073957U, 255879553U, 255687011U, 255493417U, 255301757U, 255107311U, 254913271U, 254719727U, 254527073U, 254334673U, 254141203U, 253946449U, 253754503U, 253559893U, 253366097U, 253173623U, 252979483U, 252786907U, 252591419U, 252398903U, 252204389U, 252012149U, 251819627U, 251622391U, 251429363U, 251237071U, 251043629U, 250851683U, 250658201U, 250465169U, 250271443U, 250077787U, 249883757U, 249690719U, 249497777U, 249303823U, 249110591U, 248917909U, 248722577U, 248531111U, 248338187U, 248146201U, 247953331U, 247759651U, 247565719U, 247371941U, 247179193U, 246985139U, 246791761U, 246598217U, 246406241U, 246212237U, 246018317U, 245824157U, 245630933U, 245437499U, 245244113U, 245050829U, 244859389U, 244669351U, 244476997U, 244284641U, 244092203U, 243896459U, 243703637U, 243509891U, 243316207U, 243123827U, 242930803U, 242737823U, 242542541U, 242349871U, 242155003U, 241962229U, 241768279U, 241573951U, 241381463U, 241187647U, 240994267U, 240802189U, 240609661U, 240417691U, 240225439U, 240033793U, 239840473U, 239647459U, 239455163U, 239262083U, 239068651U, 238874029U, 238681423U, 238488847U, 238295927U, 238103737U, 237912613U, 237719497U, 237528143U, 237335599U, 237142793U, 236950423U, 236759689U, 236566277U, 236372723U, 236180239U, 235988591U, 235796063U, 235601153U, 235409131U, 235218167U, 235025429U, 234833069U, 234642053U, 234449203U, 234255401U, 234063703U, 233870243U, 233675419U, 233483567U, 233289703U, 233095871U, 232901521U, 232711207U, 232517699U, 232323913U, 232130593U, 231937631U, 231744913U, 231553181U, 231360061U, 231167999U, 230975573U, 230782369U, 230591323U, 230400697U, 230206813U, 230014139U, 229822447U, 229631383U, 229437889U, 229244651U, 229050709U, 228859753U, 228667319U, 228474931U, 228283373U, 228091951U, 227898883U, 227705561U, 227510263U, 227318057U, 227125973U, 226933331U, 226741129U, 226549201U, 226356973U, 226164139U, 225972629U, 225781723U, 225588239U, 225395087U, 225201127U, 225008657U, 224817499U, 224623351U, 224430487U, 224238809U, 224047783U, 223854737U, 223660903U, 223470251U, 223278821U, 223088597U, 222898021U, 222703603U, 222513397U, 222320779U, 222128581U, 221936789U, 221745649U, 221553767U, 221359997U, 221169271U, 220977649U, 220785023U, 220592791U, 220400603U, 220207301U, 220014643U, 219822851U, 219630181U, 219437957U, 219245029U, 219053453U, 218861609U, 218669813U, 218477293U, 218283259U, 218092937U, 217902037U, 217708723U, 217515989U, 217323787U, 217133011U, 216939881U, 216748201U, 216554441U, 216362941U, 216171331U, 215979851U, 215787829U, 215595199U, 215402939U, 215211307U, 215019767U, 214829773U, 214638997U, 214447763U, 214255211U, 214063807U, 213871681U, 213679183U, 213484949U, 213293911U, 213101849U, 212911249U, 212719163U, 212526101U, 212335061U, 212143537U, 211951819U, 211758037U, 211566871U, 211375777U, 211184881U, 210993641U, 210801817U, 210609337U, 210416527U, 210224867U, 210032651U, 209840663U, 209650703U, 209460331U, 209269979U, 209078249U, 208885571U, 208694699U, 208503187U, 208309727U, 208118389U, 207925591U, 207734029U, 207542903U, 207352543U, 207161509U, 206968849U, 206778353U, 206587259U, 206395493U, 206205443U, 206012971U, 205821611U, 205629667U, 205438339U, 205246957U, 205056107U, 204863557U, 204673607U, 204481997U, 204291247U, 204098737U, 203907721U, 203717797U, 203524921U, 203334251U, 203142649U, 202952569U, 202762199U, 202569253U, 202376893U, 202185367U, 201993299U, 201804233U, 201612913U, 201420629U, 201230069U, 201038863U, 200847253U, 200655667U, 200466187U, 200271727U, 200082481U, 199893791U, 199701701U, 199509859U, 199319431U, 199128547U, 198937253U, 198745559U, 198554557U, 198365039U, 198174583U, 197981587U, 197790517U, 197598103U, 197405587U, 197214601U, 197022479U, 196832221U, 196641343U, 196450417U, 196258003U, 196065559U, 195875749U, 195684091U, 195493957U, 195301861U, 195110033U, 194920021U, 194730253U, 194538937U, 194348221U, 194157839U, 193967047U, 193777123U, 193586951U, 193397299U, 193205863U, 193014079U, 192823493U, 192634577U, 192444121U, 192253307U, 192063899U, 191872073U, 191680613U, 191488183U, 191296309U, 191105209U, 190913759U, 190722271U, 190531303U, 190340209U, 190148869U, 189959467U, 189768749U, 189578791U, 189386867U, 189195871U, 189006953U, 188817067U, 188626177U, 188434369U, 188243597U, 188051989U, 187862693U, 187672487U, 187479947U, 187290289U, 187101599U, 186909721U, 186718979U, 186529927U, 186340093U, 186149101U, 185957879U, 185767973U, 185576759U, 185386519U, 185196007U, 185006201U, 184815809U, 184626997U, 184437511U, 184248707U, 184057999U, 183868519U, 183677189U, 183489073U, 183299393U, 183108421U, 182919001U, 182726549U, 182535739U, 182343781U, 182154179U, 181962689U, 181771903U, 181582549U, 181390861U, 181200457U, 181010399U, 180818789U, 180628141U, 180437107U, 180246329U, 180056753U, 179865403U, 179677123U, 179488103U, 179298667U, 179108591U, 178917853U, 178729183U, 178538917U, 178348147U, 178156337U, 177967877U, 177779429U, 177589199U, 177399011U, 177208567U, 177020047U, 176829997U, 176641147U, 176450971U, 176261209U, 176070889U, 175881457U, 175690829U, 175501171U, 175312391U, 175124483U, 174934229U, 174744569U, 174553387U, 174362887U, 174173123U, 173984141U, 173793853U, 173603611U, 173414587U, 173225827U, 173036407U, 172846613U, 172655837U, 172466647U, 172276381U, 172087627U, 171897619U, 171708997U, 171518131U, 171328837U, 171140153U, 170951563U, 170762941U, 170571809U, 170381957U, 170191919U, 170004691U, 169814977U, 169624019U, 169434773U, 169248449U, 169058089U, 168869417U, 168679261U, 168490577U, 168301619U, 168112519U, 167921771U, 167733523U, 167543461U, 167355193U, 167165281U, 166977197U, 166787039U, 166597537U, 166409207U, 166221217U, 166031297U, 165842861U, 165653129U, 165462509U, 165272743U, 165083201U, 164893327U, 164702893U, 164514887U, 164325341U, 164135749U, 163945493U, 163758097U, 163569001U, 163380533U, 163193077U, 163003367U, 162815113U, 162625381U, 162435659U, 162247079U, 162058889U, 161868769U, 161679187U, 161490583U, 161299297U, 161109331U, 160920703U, 160733017U, 160544453U, 160355989U, 160166753U, 159978367U, 159790819U, 159601727U, 159412639U, 159223517U, 159034937U, 158847659U, 158657761U, 158466983U, 158277827U, 158087929U, 157899923U, 157711129U, 157521739U, 157333247U, 157144913U, 156955559U, 156766583U, 156578579U, 156389789U, 156200969U, 156012877U, 155824663U, 155635999U, 155449181U, 155259329U, 155071097U, 154882151U, 154692103U, 154504913U, 154316737U, 154127989U, 153937877U, 153750617U, 153563087U, 153374737U, 153184901U, 152998253U, 152808611U, 152622137U, 152433731U, 152244559U, 152054831U, 151864819U, 151676659U, 151488713U, 151299593U, 151112447U, 150922319U, 150734347U, 150543803U, 150355943U, 150167639U, 149979413U, 149790647U, 149602613U, 149414519U, 149226059U, 149036633U, 148848053U, 148660459U, 148473037U, 148284233U, 148095697U, 147908051U, 147719849U, 147530927U, 147342497U, 147154583U, 146967131U, 146779973U, 146592161U, 146404283U, 146215987U, 146028829U, 145840997U, 145653953U, 145465849U, 145277879U, 145088759U, 144900647U, 144710743U, 144522883U, 144335641U, 144148133U, 143960009U, 143772731U, 143584663U, 143397817U, 143211583U, 143023403U, 142836769U, 142649069U, 142460501U, 142273903U, 142086817U, 141901079U, 141713353U, 141526009U, 141337631U, 141150731U, 140963029U, 140773079U, 140585771U, 140397097U, 140208613U, 140020883U, 139833637U, 139647301U, 139459559U, 139273223U, 139084727U, 138896581U, 138710941U, 138523223U, 138335569U, 138146971U, 137958407U, 137770219U, 137581757U, 137396477U, 137209543U, 137020991U, 136832713U, 136645373U, 136459727U, 136273777U, 136085947U, 135898517U, 135710527U, 135521381U, 135334181U, 135146093U, 134959613U, 134773459U, 134586799U, 134399621U, 134213483U, 134026553U, 133838149U, 133651027U, 133462151U, 133276543U, 133087957U, 132901367U, 132714497U, 132526507U, 132339761U, 132152729U, 131965111U, 131777039U, 131591081U, 131403011U, 131217089U, 131030267U, 130844327U, 130658131U, 130471373U, 130284131U, 130096721U, 129908039U, 129720413U, 129533941U, 129348269U, 129161959U, 128974297U, 128787667U, 128603047U, 128417117U, 128229061U, 128042461U, 127856539U, 127670819U, 127482731U, 127296359U, 127108343U, 126923837U, 126736237U, 126549919U, 126363241U, 126176537U, 125990521U, 125804839U, 125619577U, 125431459U, 125245501U, 125059483U, 124873351U, 124686977U, 124499801U, 124313051U, 124128931U, 123941581U, 123756023U, 123570427U, 123384229U, 123198661U, 123012431U, 122825713U, 122640377U, 122453621U, 122265487U, 122079197U, 121893817U, 121707613U, 121521013U, 121334561U, 121148387U, 120964253U, 120777233U, 120590153U, 120403117U, 120216113U, 120030817U, 119846431U, 119659843U, 119473723U, 119288087U, 119101837U, 118913621U, 118726159U, 118540469U, 118355789U, 118168691U, 117983309U, 117797447U, 117610693U, 117426377U, 117239467U, 117053617U, 116868613U, 116680763U, 116495963U, 116310731U, 116124461U, 115940059U, 115755071U, 115570151U, 115383889U, 115197619U, 115012217U, 114826507U, 114639611U, 114453901U, 114268459U, 114083461U, 113896997U, 113710601U, 113523551U, 113337607U, 113151163U, 112968187U, 112781413U, 112597567U, 112410863U, 112224869U, 112041313U, 111856057U, 111671939U, 111485417U, 111300359U, 111113659U, 110927723U, 110742817U, 110558197U, 110373097U, 110185429U, 110000207U, 109816123U, 109631227U, 109445953U, 109261027U, 109076729U, 108891301U, 108706319U, 108520781U, 108338011U, 108154273U, 107969483U, 107783167U, 107599229U, 107414033U, 107229569U, 107045951U, 106860881U, 106674979U, 106491023U, 106305917U, 106121371U, 105936421U, 105751201U, 105566597U, 105380491U, 105195661U, 105011527U, 104826877U, 104640791U, 104456647U, 104271161U, 104088581U, 103905899U, 103720889U, 103535363U, 103351607U, 103166803U, 102982193U, 102797509U, 102611801U, 102428533U, 102245177U, 102061153U, 101878417U, 101693441U, 101508191U, 101324557U, 101140019U, 100957291U, 100772813U, 100587523U, 100402817U, 100217561U, 100034317U, 99851249U, 99665549U, 99482633U, 99298943U, 99112829U, 98929081U, 98743261U, 98558099U, 98374879U, 98191759U, 98006033U, 97821839U, 97638559U, 97456841U, 97272631U, 97087433U, 96904513U, 96719809U, 96537893U, 96353401U, 96168011U, 95983787U, 95801747U, 95616853U, 95433263U, 95249807U, 95066039U, 94883111U, 94700833U, 94516717U, 94333933U, 94149721U, 93966659U, 93784181U, 93599687U, 93415661U, 93232427U, 93049301U, 92863711U, 92681111U, 92497303U, 92313943U, 92129753U, 91947211U, 91761893U, 91580219U, 91395749U, 91213127U, 91030321U, 90846887U, 90664879U, 90480161U, 90297667U, 90115583U, 89933297U, 89749379U, 89564353U, 89380243U, 89196911U, 89014231U, 88831753U, 88648711U, 88464433U, 88281301U, 88099309U, 87918041U, 87735311U, 87551473U, 87368143U, 87185521U, 87002527U, 86819059U, 86635727U, 86454139U, 86271967U, 86087539U, 85905473U, 85723789U, 85539823U, 85358417U, 85175957U, 84992489U, 84809147U, 84626603U, 84444043U, 84260999U, 84077507U, 83895419U, 83714789U, 83531321U, 83348579U, 83165221U, 82982057U, 82800373U, 82619401U, 82436671U, 82253887U, 82070687U, 81889261U, 81706409U, 81524419U, 81342557U, 81159839U, 80980007U, 80798779U, 80617753U, 80435371U, 80253763U, 80072779U, 79888511U, 79706771U, 79525021U, 79343701U, 79161149U, 78979279U, 78796441U, 78615211U, 78433877U, 78250223U, 78068383U, 77887133U, 77705807U, 77523223U, 77341399U, 77159333U, 76977959U, 76797257U, 76614667U, 76431583U, 76249919U, 76067633U, 75886747U, 75706193U, 75523937U, 75343739U, 75163607U, 74982307U, 74800723U, 74619133U, 74438183U, 74256739U, 74075017U, 73892317U, 73710739U, 73531123U, 73349173U, 73168181U, 72986443U, 72806519U, 72624863U, 72443671U, 72262847U, 72083749U, 71902819U, 71721367U, 71540317U, 71360867U, 71180273U, 70999073U, 70818323U, 70636019U, 70455323U, 70275589U, 70095271U, 69913423U, 69732599U, 69552737U, 69373621U, 69192857U, 69011251U, 68831857U, 68650541U, 68469409U, 68288557U, 68108351U, 67927511U, 67746827U, 67567627U, 67387867U, 67208347U, 67028069U, 66848311U, 66666751U, 66487507U, 66307727U, 66128837U, 65950439U, 65770451U, 65589409U, 65410649U, 65230259U, 65049041U, 64870343U, 64688747U, 64507787U, 64327903U, 64147561U, 63968063U, 63789757U, 63610199U, 63430931U, 63251467U, 63071809U, 62892839U, 62713073U, 62532517U, 62352571U, 62173597U, 61994887U, 61815977U, 61636231U, 61456183U, 61275419U, 61094951U, 60915853U, 60737837U, 60559241U, 60379751U, 60201523U, 60021539U, 59841973U, 59663497U, 59484767U, 59305187U, 59125333U, 58945219U, 58767607U, 58589033U, 58410523U, 58231967U, 58052879U, 57873817U, 57694499U, 57514829U, 57335981U, 57158411U, 56980423U, 56800753U, 56624527U, 56446043U, 56266219U, 56088649U, 55910791U, 55732351U, 55555231U, 55376369U, 55197721U, 55019897U, 54841331U, 54662059U, 54485107U, 54306403U, 54126781U, 53949167U, 53770853U, 53593171U, 53413639U, 53235829U, 53058007U, 52880033U, 52702613U, 52525171U, 52347107U, 52168973U, 51990767U, 51813187U, 51636499U, 51458861U, 51281453U, 51104257U, 50925361U, 50748149U, 50570687U, 50394067U, 50216953U, 50039263U, 49861883U, 49684643U, 49508111U, 49332421U, 49155797U, 48978451U, 48802009U, 48623479U, 48446927U, 48269713U, 48092383U, 47913799U, 47737211U, 47559517U, 47382877U, 47205551U, 47028899U, 46852483U, 46675831U, 46499939U, 46323493U, 46146389U, 45969251U, 45792757U, 45616187U, 45441163U, 45266317U, 45089893U, 44914523U, 44738009U, 44563219U, 44387113U, 44210707U, 44034449U, 43858921U, 43682351U, 43505453U, 43330681U, 43154911U, 42978773U, 42801313U, 42625673U, 42449963U, 42274433U, 42100169U, 41923451U, 41748299U, 41572033U, 41396093U, 41219881U, 41044891U, 40868299U, 40695289U, 40518707U, 40343419U, 40168781U, 39994211U, 39817907U, 39642653U, 39468991U, 39294637U, 39120883U, 38945273U, 38772131U, 38597917U, 38422801U, 38249219U, 38075273U, 37901167U, 37725713U, 37551001U, 37377479U, 37201921U, 37029367U, 36854551U, 36679801U, 36505093U, 36330773U, 36157423U, 35984339U, 35809141U, 35635627U, 35461177U, 35287939U, 35114207U, 34939903U, 34767391U, 34591933U, 34418939U, 34244071U, 34069129U, 33893689U, 33721511U, 33548077U, 33374401U, 33202313U, 33028577U, 32856277U, 32682743U, 32509907U, 32337311U, 32163991U, 31991731U, 31819127U, 31646471U, 31473479U, 31300459U, 31127519U, 30953453U, 30781319U, 30609311U, 30437177U, 30265159U, 30092813U, 29922733U, 29750759U, 29579519U, 29406439U, 29235953U, 29062879U, 28890787U, 28718537U, 28546591U, 28374859U, 28204291U, 28031611U, 27861667U, 27689833U, 27518653U, 27347557U, 27174779U, 27004343U, 26834293U, 26662327U, 26491921U, 26321989U, 26150171U, 25979521U, 25809083U, 25638607U, 25468039U, 25298069U, 25124909U, 24955681U, 24783713U, 24614839U, 24444313U, 24274847U, 24105251U, 23935453U, 23765431U, 23595163U, 23425559U, 23256053U, 23085833U, 22916461U, 22747187U, 22578419U, 22409393U, 22239713U, 22068143U, 21900377U, 21731779U, 21563219U, 21394229U, 21226157U, 21056153U, 20887649U, 20718781U, 20551697U, 20382253U, 20213983U, 20045197U, 19878041U, 19710289U, 19541903U, 19374079U, 19206023U, 19038311U, 18870161U, 18703387U, 18536303U, 18368221U, 18201941U, 18033391U, 17866619U, 17699107U, 17532169U, 17366749U, 17201039U, 17032781U, 16867867U, 16702099U, 16535639U, 16369853U, 16203367U, 16036523U, 15870383U, 15705071U, 15539987U, 15374041U, 15208997U, 15042919U, 14876951U, 14712427U, 14547283U, 14382007U, 14218571U, 14053619U, 13887953U, 13724233U, 13560847U, 13395559U, 13231343U, 13067423U, 12902137U, 12738433U, 12575881U, 12411409U, 12249493U, 12086059U, 11923057U, 11760059U, 11597701U, 11435887U, 11272697U, 11109827U, 10947941U, 10786267U, 10624787U, 10463443U, 10302407U, 10140307U, 9979111U, 9817057U, 9655759U, 9495601U, 9334487U, 9174793U, 9014101U, 8853359U, 8693653U, 8534489U, 8375273U, 8215633U, 8056423U, 7896949U, 7738559U, 7580459U, 7421383U, 7263143U, 7104341U, 6947753U, 6791437U, 6633877U, 6477301U, 6319483U, 6163567U, 6007247U, 5851717U, 5695831U, 5539363U, 5383601U, 5229331U, 5074633U, 4920613U, 4766999U, 4613237U, 4459951U, 4307453U, 4154791U, 4002547U, 3849943U, 3698881U, 3548471U, 3396661U, 3246119U, 3097141U, 2948161U, 2799451U, 2650931U, 2503597U, 2356573U, 2209499U, 2063573U, 1918439U, 1774937U, 1630987U, 1488133U, 1346567U, 1205653U, 1066909U, 927853U, 791447U, 656683U, 523417U, 393073U, 266083U, 143687U }; SHAR_EOF fi # end of overwriting check if test -f 'primes.c' then echo shar: will not over-write existing file "'primes.c'" else cat << "SHAR_EOF" > 'primes.c' #include #include #include "primes.h" #include "primelist.h" #define YES 1 #define NO 0 #define NPRIMES 10000 int primes[NPRIMES]; #ifdef __STDC__ int init_prime(void) #else int init_prime() #endif { int i, j, obtained = 0, isprime; for(i=3; i < MINPRIME; i += 2) { isprime = YES; for(j=0; j < obtained; j++) if(i%primes[j] == 0) { isprime = NO; break; } else if(primes[j]*primes[j] > i) break; if(isprime == YES) { primes[obtained] = i; obtained++; } } return obtained; } #ifdef __STDC__ int getprime(int need, unsigned int *prime_array, int offset) #else int getprime(need, prime_array, offset) int need, offset; unsigned int *prime_array; #endif { static int initiallized = NO, num_prime; unsigned int largest; int i, isprime, index, obtained = 0; if(need <= 0) { fprintf(stderr,"WARNING: Number of primes needed = %d < 1; None returned\n" , need); return 0; } if(offset < 0) { fprintf(stderr,"WARNING: Offset of prime = %d < 1; None returned\n" , offset); return 0; } if(offset+need-1 MAXPRIMEOFFSET) { fprintf(stderr,"WARNING: generator has branched maximum number of times;\nindependence of generators no longer guaranteed"); offset = offset % MAXPRIMEOFFSET; } if(offset < PRIMELISTSIZE1) /* search table for previous prime */ { largest = prime_list[offset] + 2; offset = 0; } else { index = (unsigned int) ((offset-PRIMELISTSIZE1+1)/STEP) + PRIMELISTSIZE1 - 1; largest = prime_list[index] + 2; offset -= (index-PRIMELISTSIZE1+1)*STEP + PRIMELISTSIZE1 - 1; } while(need > obtained && largest > MINPRIME) { isprime = YES; largest -= 2; for(i=0; i 0) offset--; else if(isprime == YES) prime_array[obtained++] = largest; } if(need > obtained) fprintf(stderr,"ERROR: Insufficient number of primes: needed %d, obtained %d\n", need, obtained); return obtained; } #if 0 main() { unsigned int newprimes[1500], np, i; np = getprime(2,newprimes,0); np = getprime(2,newprimes+2,9); np = getprime(2,newprimes+4,12); for(i=0; i<6; i++) printf("%u. %u \n", i, newprimes[i]); /*while(np--) printf("New primes: %u\n", newprimes[np]); np = getprime(5,newprimes); printf("%d new primes obtained ...\n", np); while(np--) printf("New primes: %u\n", newprimes[np]);*/ } #endif SHAR_EOF fi # end of overwriting check if test -f 'primes.h' then echo shar: will not over-write existing file "'primes.h'" else cat << "SHAR_EOF" > 'primes.h' #ifndef _primes_h_ #define _primes_h_ #ifndef ANSI_ARGS #ifdef __STDC__ #define ANSI_ARGS(args) args #else #define ANSI_ARGS(args) () #endif #endif int getprime ANSI_ARGS((int need, unsigned int *prime_array, int offset)); #define MAXPRIME 3037000501U /* largest odd # < sqrt(2)*2^31+2 */ #define MINPRIME 55108 /* sqrt(MAXPRIME) */ #define MAXPRIMEOFFSET 146138719U /* Total number of available primes */ #endif SHAR_EOF fi # end of overwriting check cd .. if test -f 'communicate.c' then echo shar: will not over-write existing file "'communicate.c'" else cat << "SHAR_EOF" > 'communicate.c' #ifdef SPRNG_MPI #include #endif #include #include "interface.h" #ifdef __STDC__ void get_proc_info_mpi(int *myid, int *nprocs) #else void get_proc_info_mpi(myid, nprocs) int *myid, *nprocs; #endif { #ifdef SPRNG_MPI MPI_Comm_rank(MPI_COMM_WORLD, myid); MPI_Comm_size(MPI_COMM_WORLD, nprocs); #else *myid = 0; *nprocs = 1; #endif } #ifdef __STDC__ int make_new_seed_mpi(void) #else int make_new_seed_mpi() #endif { #ifdef SPRNG_MPI unsigned int temp2; int myid, nprocs; MPI_Comm newcomm; MPI_Comm_dup(MPI_COMM_WORLD, &newcomm); /* create a temporary communicator */ MPI_Comm_rank(newcomm, &myid); MPI_Comm_size(newcomm, &nprocs); if(myid == 0) temp2 = make_new_seed(); MPI_Bcast(&temp2,1,MPI_UNSIGNED,0,newcomm); MPI_Comm_free(&newcomm); return temp2; #else return make_new_seed(); #endif } #if 0 main() { printf("%u\n", make_new_seed()); printf("%u\n", make_new_seed()); } #endif SHAR_EOF fi # end of overwriting check if test -f 'cputime.c' then echo shar: will not over-write existing file "'cputime.c'" else cat << "SHAR_EOF" > 'cputime.c' #include #include #include #include "fwrap.h" #ifdef __STDC__ double cputime(void) #else double cputime() #endif { double current_time; #ifdef RUSAGE_SELF struct rusage temp; getrusage(RUSAGE_SELF, &temp); current_time = (temp.ru_utime.tv_sec + temp.ru_stime.tv_sec + 1.0e-6*(temp.ru_utime.tv_usec + temp.ru_stime.tv_usec)); #elif defined(CLOCKS_PER_SEC) current_time = clock()/((double) CLOCKS_PER_SEC); #else fprintf(stderr,"\nERROR: Timing routines not available\n\n"); current_time = 0.0; #endif return (current_time); } #ifdef __STDC__ double FNAMEOF_fcpu_t(void) #else double FNAMEOF_fcpu_t() #endif { return cputime(); } SHAR_EOF fi # end of overwriting check if test -f 'cputime.h' then echo shar: will not over-write existing file "'cputime.h'" else cat << "SHAR_EOF" > 'cputime.h' #ifdef __STDC__ double cputime(void); #else double cputime(); #endif SHAR_EOF fi # end of overwriting check if test -f 'drand.c' then echo shar: will not over-write existing file "'drand.c'" else cat << "SHAR_EOF" > 'drand.c' #include #include #include "cputime.h" #define TIMING_TRIAL_SIZE 1000000 main() { int i; double temp1, temp2, rn; double temp_mult = TIMING_TRIAL_SIZE/1.0e6; temp1 = cputime(); for(i=0; i %8.4f MRS\n", temp2-temp1, temp_mult/(temp2-temp1)); putchar('\n'); } SHAR_EOF fi # end of overwriting check if test -f 'fwrap.h' then echo shar: will not over-write existing file "'fwrap.h'" else cat << "SHAR_EOF" > 'fwrap.h' #ifndef _fwrap_h #define _fwrap_h /************************************************************************/ /************************************************************************/ /* Inter-language Naming Convention Problem Solution */ /* */ /* Note that with different compilers you may find that */ /* the linker fails to find certain modules due to the naming */ /* conventions implicit in particular compilers. Here the */ /* solution was to look at the object code produced by the FORTRAN */ /* compiler and modify this wrapper code so that the C routines */ /* compiled with the same routine names as produced in the FORTRAN */ /* program. */ /* */ /************************************************************************/ /************************************************************************/ /* Turn funcName (which must be all lower-case) into something callable from FORTRAN, typically by appending one or more underscores. */ #if defined(Add__) #define FORTRAN_CALLABLE(funcName) funcName ## __ #elif defined(NoChange) #define FORTRAN_CALLABLE(funcName) funcName #elif defined(Add_) #define FORTRAN_CALLABLE(funcName) funcName ## _ #endif #ifdef UpCase #define FNAMEOF_finit_rng FINIT_RNG #define FNAMEOF_fspawn_rng FSPAWN_RNG #define FNAMEOF_fget_rn_int FGET_RN_INT #define FNAMEOF_fget_rn_flt FGET_RN_FLT #define FNAMEOF_fget_rn_dbl FGET_RN_DBL #define FNAMEOF_fmake_new_seed FMAKE_NEW_SEED #define FNAMEOF_fseed_mpi FSEED_MPI #define FNAMEOF_ffree_rng FFREE_RNG #define FNAMEOF_fget_seed_rng FGET_SEED_RNG #define FNAMEOF_fpack_rng FPACK_RNG #define FNAMEOF_funpack_rng FUNPACK_RNG #define FNAMEOF_fprint_rng FPRINT_RNG #define FNAMEOF_finit_rng_sim FINIT_RNG_SIM #define FNAMEOF_fget_rn_int_sim FGET_RN_INT_SIM #define FNAMEOF_fget_rn_flt_sim FGET_RN_FLT_SIM #define FNAMEOF_fget_rn_dbl_sim FGET_RN_DBL_SIM #define FNAMEOF_finit_rng_simmpi FINIT_RNG_SIMMPI #define FNAMEOF_fget_rn_int_simmpi FGET_RN_INT_SIMMPI #define FNAMEOF_fget_rn_flt_simmpi FGET_RN_FLT_SIMMPI #define FNAMEOF_fget_rn_dbl_simmpi FGET_RN_DBL_SIMMPI #define FNAMEOF_fpack_rng_simple FPACK_RNG_SIMPLE #define FNAMEOF_funpack_rng_simple FUNPACK_RNG_SIMPLE #define FNAMEOF_fprint_rng_simple FPRINT_RNG_SIMPLE #define FNAMEOF_finit_rng_ptr FINIT_RNG_PTR #define FNAMEOF_fget_rn_int_ptr FGET_RN_INT_PTR #define FNAMEOF_fget_rn_flt_ptr FGET_RN_FLT_PTR #define FNAMEOF_fget_rn_dbl_ptr FGET_RN_DBL_PTR #define FNAMEOF_fpack_rng_ptr FPACK_RNG_PTR #define FNAMEOF_funpack_rng_ptr FUNPACK_RNG_PTR #define FNAMEOF_fprint_rng_ptr FPRINT_RNG_PTR #define FNAMEOF_ffree_rng_ptr FFREE_RNG_PTR #define FNAMEOF_fspawn_rng_ptr FSPAWN_RNG_PTR #define FNAMEOF_fcpu_t FCPU_T #else #define FNAMEOF_ffree_rng FORTRAN_CALLABLE(ffree_rng) #define FNAMEOF_fmake_new_seed FORTRAN_CALLABLE(fmake_new_seed) #define FNAMEOF_fseed_mpi FORTRAN_CALLABLE(fseed_mpi) #define FNAMEOF_finit_rng FORTRAN_CALLABLE(finit_rng) #define FNAMEOF_fspawn_rng FORTRAN_CALLABLE(fspawn_rng) #define FNAMEOF_fget_rn_int FORTRAN_CALLABLE(fget_rn_int) #define FNAMEOF_fget_rn_flt FORTRAN_CALLABLE(fget_rn_flt) #define FNAMEOF_fget_rn_dbl FORTRAN_CALLABLE(fget_rn_dbl) #define FNAMEOF_fget_seed_rng FORTRAN_CALLABLE(fget_seed_rng) #define FNAMEOF_fpack_rng FORTRAN_CALLABLE(fpack_rng) #define FNAMEOF_funpack_rng FORTRAN_CALLABLE(funpack_rng) #define FNAMEOF_fprint_rng FORTRAN_CALLABLE(fprint_rng) #define FNAMEOF_finit_rng_sim FORTRAN_CALLABLE(finit_rng_sim) #define FNAMEOF_fget_rn_int_sim FORTRAN_CALLABLE(fget_rn_int_sim) #define FNAMEOF_fget_rn_flt_sim FORTRAN_CALLABLE(fget_rn_flt_sim) #define FNAMEOF_fget_rn_dbl_sim FORTRAN_CALLABLE(fget_rn_dbl_sim) #define FNAMEOF_finit_rng_simmpi FORTRAN_CALLABLE(finit_rng_simmpi) #define FNAMEOF_fget_rn_int_simmpi FORTRAN_CALLABLE(fget_rn_int_simmpi) #define FNAMEOF_fget_rn_flt_simmpi FORTRAN_CALLABLE(fget_rn_flt_simmpi) #define FNAMEOF_fget_rn_dbl_simmpi FORTRAN_CALLABLE(fget_rn_dbl_simmpi) #define FNAMEOF_fpack_rng_simple FORTRAN_CALLABLE(fpack_rng_simple) #define FNAMEOF_funpack_rng_simple FORTRAN_CALLABLE(funpack_rng_simple) #define FNAMEOF_fprint_rng_simple FORTRAN_CALLABLE(fprint_rng_simple) #define FNAMEOF_finit_rng_ptr FORTRAN_CALLABLE(finit_rng_ptr) #define FNAMEOF_fget_rn_int_ptr FORTRAN_CALLABLE(fget_rn_int_ptr) #define FNAMEOF_fget_rn_flt_ptr FORTRAN_CALLABLE(fget_rn_flt_ptr) #define FNAMEOF_fget_rn_dbl_ptr FORTRAN_CALLABLE(fget_rn_dbl_ptr) #define FNAMEOF_fpack_rng_ptr FORTRAN_CALLABLE(fpack_rng_ptr) #define FNAMEOF_funpack_rng_ptr FORTRAN_CALLABLE(funpack_rng_ptr) #define FNAMEOF_fprint_rng_ptr FORTRAN_CALLABLE(fprint_rng_ptr) #define FNAMEOF_ffree_rng_ptr FORTRAN_CALLABLE(ffree_rng_ptr) #define FNAMEOF_fspawn_rng_ptr FORTRAN_CALLABLE(fspawn_rng_ptr) #define FNAMEOF_fcpu_t FORTRAN_CALLABLE(fcpu_t) #endif #endif SHAR_EOF fi # end of overwriting check if test -f 'fwrap_.h' then echo shar: will not over-write existing file "'fwrap_.h'" else cat << "SHAR_EOF" > 'fwrap_.h' #include "fwrap.h" /************************************************************************/ /************************************************************************/ /* */ /* This package of C wrappers is intended to be called from a */ /* FORTRAN program. The main purpose of the package is to mediate */ /* between the call-by-address and call-by-value conventions in */ /* the two languages. In most cases, the arguments of the C */ /* routines and the wrappers are the same. */ /* */ /* The wrappers should be treated as FORTRAN function calls. */ /* */ /* Note: This code is a header file to facilitte inlining. */ /************************************************************************/ /************************************************************************/ #ifdef __STDC__ int FNAMEOF_fget_seed_rng(int **genptr) #else int FNAMEOF_fget_seed_rng(genptr) int **genptr; #endif { return get_seed_rng(*genptr); } #ifdef __STDC__ int FNAMEOF_ffree_rng_ptr(int **genptr) #else int FNAMEOF_ffree_rng_ptr(genptr) int **genptr; #endif { if (deleteID(*genptr) == NULL) return -1; return free_rng(*genptr); } #ifdef __STDC__ int FNAMEOF_ffree_rng(int **genptr) #else int FNAMEOF_ffree_rng(genptr) int **genptr; #endif { return free_rng(*genptr); } #ifdef __STDC__ int FNAMEOF_fmake_new_seed(void) #else int FNAMEOF_fmake_new_seed() #endif { return make_new_seed(); } #ifdef __STDC__ int * FNAMEOF_finit_rng_sim( int *seed, int *mult) #else int * FNAMEOF_finit_rng_sim(seed,mult) int *mult,*seed; #endif { return init_rng_simple(*seed, *mult); } #ifdef __STDC__ int * FNAMEOF_finit_rng( int *gennum, int *total_gen, int *seed, int *length) #else int * FNAMEOF_finit_rng(gennum, total_gen, seed, length) int *gennum, *length, *seed, *total_gen; #endif { return init_rng(*gennum, *total_gen, *seed, *length); } #ifdef __STDC__ int * FNAMEOF_finit_rng_ptr( int *gennum, int *total_gen, int *seed, int *length) #else int * FNAMEOF_finit_rng_ptr(gennum, total_gen, seed, length) int *gennum, *length, *seed, *total_gen; #endif { int *tmpGen; tmpGen = init_rng(*gennum, *total_gen, *seed, *length); addID(tmpGen); return tmpGen; } #ifdef __STDC__ int FNAMEOF_fspawn_rng(int **genptr, int *nspawned, int **newGen, int checkid) #else int FNAMEOF_fspawn_rng(genptr, nspawned, newGen, checkid) int **genptr, *nspawned, **newGen, checkid; #endif { int i, **tmpGen, n; n = spawn_rng(*genptr, *nspawned, &tmpGen, checkid); for (i=0; i< n; i++) newGen[i] = tmpGen[i]; if(n != 0) free( tmpGen); return n; } #ifdef __STDC__ int FNAMEOF_fspawn_rng_ptr(int **genptr, int *nspawned, int **newGen, int checkid) #else int FNAMEOF_fspawn_rng_ptr(genptr, nspawned, newGen, checkid) int **genptr, *nspawned, **newGen, checkid; #endif { int i, **tmpGen, n; if (checkID(*genptr) == NULL) return 0; n = spawn_rng(*genptr, *nspawned, &tmpGen, checkid); for (i=0; i< n; i++) newGen[i] = tmpGen[i]; if(n != 0) free( tmpGen); return n; } #ifdef __STDC__ int FNAMEOF_fget_rn_int_sim(void) #else int FNAMEOF_fget_rn_int_sim() #endif { return get_rn_int_simple(); } #ifdef __STDC__ int FNAMEOF_fget_rn_int(int **genptr) #else int FNAMEOF_fget_rn_int(genptr) int **genptr; #endif { return get_rn_int(*genptr); } #ifdef __STDC__ int FNAMEOF_fget_rn_int_ptr(int **genptr) #else int FNAMEOF_fget_rn_int_ptr(genptr) int **genptr; #endif { if (checkID(*genptr)==NULL) return -1; return get_rn_int(*genptr); } #ifdef __STDC__ float FNAMEOF_fget_rn_flt_sim(void) #else float FNAMEOF_fget_rn_flt_sim() #endif { return get_rn_flt_simple(); } #ifdef __STDC__ float FNAMEOF_fget_rn_flt(int **genptr) #else float FNAMEOF_fget_rn_flt(genptr) int **genptr; #endif { return get_rn_flt(*genptr); } #ifdef __STDC__ float FNAMEOF_fget_rn_flt_ptr(int **genptr) #else float FNAMEOF_fget_rn_flt_ptr(genptr) int **genptr; #endif { if (checkID(*genptr)==NULL) return -1.0; return get_rn_flt(*genptr); } #ifdef __STDC__ double FNAMEOF_fget_rn_dbl_sim(void) #else double FNAMEOF_fget_rn_dbl_sim() #endif { return get_rn_dbl_simple(); } #ifdef __STDC__ double FNAMEOF_fget_rn_dbl(int **genptr) #else double FNAMEOF_fget_rn_dbl(genptr) int **genptr; #endif { return get_rn_dbl(*genptr); } #ifdef __STDC__ double FNAMEOF_fget_rn_dbl_ptr(int **genptr) #else double FNAMEOF_fget_rn_dbl_ptr(genptr) int **genptr; #endif { if ( checkID(*genptr)==NULL) return -1.0; return get_rn_dbl(*genptr); } #ifdef __STDC__ int FNAMEOF_fpack_rng( int **genptr, char *buffer) #else int FNAMEOF_fpack_rng(genptr, buffer) int **genptr; char *buffer; #endif { int size; char *temp; size = pack_rng(*genptr, &temp); if(temp != NULL) { memcpy(buffer,temp,size); free(temp); } return size; } #ifdef __STDC__ int FNAMEOF_fpack_rng_ptr( int **genptr, char *buffer) #else int FNAMEOF_fpack_rng_ptr(genptr, buffer) int **genptr; char *buffer; #endif { int size; char *temp; if( checkID(*genptr)==NULL) return 0; size = pack_rng(*genptr, &temp); if(temp != NULL) { memcpy(buffer,temp,size); free(temp); } return size; } #ifdef __STDC__ int FNAMEOF_fpack_rng_simple(char *buffer) #else int FNAMEOF_fpack_rng_simple(buffer) char *buffer; #endif { int size; char *temp; size = pack_rng_simple(&temp); if(temp != NULL) { memcpy(buffer,temp,size); free(temp); } return size; } #ifdef __STDC__ int * FNAMEOF_funpack_rng( char *buffer) #else int * FNAMEOF_funpack_rng(buffer) char *buffer; #endif { return unpack_rng(buffer); } #ifdef __STDC__ int * FNAMEOF_funpack_rng_ptr( char *buffer) #else int * FNAMEOF_funpack_rng_ptr(buffer) char *buffer; #endif { int *tmpGen; tmpGen = unpack_rng(buffer); addID(tmpGen); return tmpGen; } #ifdef __STDC__ int * FNAMEOF_funpack_rng_simple( char *buffer) #else int * FNAMEOF_funpack_rng_simple(buffer) char *buffer; #endif { return unpack_rng_simple(buffer); } /* 11/15/96 J.J.: split into two cases: general print_rng, and print_rng_ptr #ifdef __STDC__ int FNAMEOF_fprint_rng( int **genptr,int checkid) #else int FNAMEOF_fprint_rng(genptr, checkid) int **genptr, checkid; #endif { if(checkid != 0) if(checkID(*genptr) == NULL) return 0; return print_rng(*genptr); } */ #ifdef __STDC__ int FNAMEOF_fprint_rng( int **genptr) #else int FNAMEOF_fprint_rng(genptr) int **genptr; #endif { return print_rng(*genptr); } #ifdef __STDC__ int FNAMEOF_fprint_rng_simple(void) #else int FNAMEOF_fprint_rng_simple() #endif { return print_rng_simple(); } #ifdef __STDC__ int FNAMEOF_fprint_rng_ptr( int **genptr) #else int FNAMEOF_fprint_rng_ptr(genptr) int **genptr; #endif { if(checkID(*genptr) == NULL) return 0; return print_rng(*genptr); } SHAR_EOF fi # end of overwriting check if test -f 'fwrap_mpi.c' then echo shar: will not over-write existing file "'fwrap_mpi.c'" else cat << "SHAR_EOF" > 'fwrap_mpi.c' #include "fwrap.h" #include "interface.h" #include "memory.h" #include #include #include /************************************************************************/ /************************************************************************/ /* */ /* This package of C wrappers is intended to be called from a */ /* FORTRAN program. The main purpose of the package is to mediate */ /* between the call-by-address and call-by-value conventions in */ /* the two languages. In most cases, the arguments of the C */ /* routines and the wrappers are the same. There are two */ /* exceptions to this. The trivial exception is that the C number */ /* scheme of 0 thru N-1 is automatically converted to the FORTRAN */ /* scheme of 1 thru N, so when referring to a particular generator */ /* the FORTRAN user should number as is natural to that language. */ /* */ /* */ /* The wrappers should be treated as FORTRAN function calls. */ /* */ /************************************************************************/ /************************************************************************/ #ifdef __STDC__ int FNAMEOF_fseed_mpi(void) #else int FNAMEOF_fseed_mpi() #endif { #ifdef SPRNG_MPI return make_new_seed_mpi(); #else return -1; #endif } #ifdef SPRNG_MPI #ifdef __STDC__ int * FNAMEOF_finit_rng_simmpi( int *seed, int *mult) #else int * FNAMEOF_finit_rng_simmpi(seed,mult) int *mult,*seed; #endif { return init_rng_simple_mpi(*seed, *mult); } #ifdef __STDC__ int FNAMEOF_fget_rn_int_simmpi(void) #else int FNAMEOF_fget_rn_int_simmpi() #endif { return get_rn_int_simple_mpi(); } #ifdef __STDC__ float FNAMEOF_fget_rn_flt_simmpi(void) #else float FNAMEOF_fget_rn_flt_simmpi() #endif { return get_rn_flt_simple_mpi(); } #ifdef __STDC__ double FNAMEOF_fget_rn_dbl_simmpi(void) #else double FNAMEOF_fget_rn_dbl_simmpi() #endif { return get_rn_dbl_simple_mpi(); } #endif SHAR_EOF fi # end of overwriting check if test -f 'insertlib' then echo shar: will not over-write existing file "'insertlib'" else cat << "SHAR_EOF" > 'insertlib' if [ -f $5 ] then if [ -f $2 ] then s=`grep -c "$1: $3" $2` else cat .insertlib > $2 s=`grep -c "$1: $3" $2` fi s=`grep -c "$1: $3" $2` if [ $s = "0" ] then echo echo >> $2 echo echo $1: $3 >> $2 echo ./$4 >> $2 fi fi SHAR_EOF fi # end of overwriting check if test -f 'interface.h' then echo shar: will not over-write existing file "'interface.h'" else cat << "SHAR_EOF" > 'interface.h' #ifndef _interface_h_ #define _interface_h_ #ifndef ANSI_ARGS #ifdef __STDC__ #define ANSI_ARGS(args) args #else #define ANSI_ARGS(args) () #endif #endif #ifdef __cplusplus extern "C" { #endif int get_rn_int ANSI_ARGS((int *igenptr)); float get_rn_flt ANSI_ARGS((int *igenptr)); double get_rn_dbl ANSI_ARGS((int *igenptr)); int *init_rng ANSI_ARGS(( int gennum, int total_gen, int seed, int mult)); int spawn_rng ANSI_ARGS((int *igenptr, int nspawned, int ***newgens, int checkid) ); int make_new_seed ANSI_ARGS((void)); int make_new_seed_mpi ANSI_ARGS((void)); int get_seed__rng ANSI_ARGS((int *genptr)); int free_rng ANSI_ARGS((int *genptr)); int pack_rng ANSI_ARGS(( int *genptr, char **buffer)); int *unpack_rng ANSI_ARGS(( char *packed)); int print_rng ANSI_ARGS(( int *igen)); int *checkID ANSI_ARGS(( int *igen)); int *addID ANSI_ARGS(( int *igen)); int *deleteID ANSI_ARGS(( int *igen)); int *init_rng_simple ANSI_ARGS(( int seed, int mult)); int *init_rng_simple_mpi ANSI_ARGS(( int seed, int mult)); int get_rn_int_simple ANSI_ARGS((void)); int get_rn_int_simple_mpi ANSI_ARGS((void)); float get_rn_flt_simple ANSI_ARGS((void)); float get_rn_flt_simple_mpi ANSI_ARGS((void)); double get_rn_dbl_simple ANSI_ARGS((void)); double get_rn_dbl_simple_mpi ANSI_ARGS((void)); int pack_rng_simple ANSI_ARGS((char **buffer)); int *unpack_rng_simple ANSI_ARGS(( char *packed)); int print_rng_simple ANSI_ARGS((void)); #ifdef __cplusplus } #endif #endif SHAR_EOF fi # end of overwriting check if test ! -d 'lcg' then mkdir 'lcg' fi cd 'lcg' if test -f 'Makefile' then echo shar: will not over-write existing file "'Makefile'" else cat << "SHAR_EOF" > 'Makefile' ############################################################################ # # Typing the command below => results in the following being created # make => Fortran and C libraries for the generator, # Timing executibles. # make lcg => Library for the Linear Congruential Generator # # Object files created during the compilation process can be deleted finally # by typing # make clean ############################################################################ SHELL = /bin/sh include ../../make.CHOICES LIBDIR = ../../$(LIB_REL_DIR) SRCDIR = .. CHKDIR = ../.. include $(SRCDIR)/make.$(PLAT) all : lcg timesprng checksprng #--------------------------------------------------------------------------- # Construct Library #--------------------------------------------------------------------------- SPRNG_COMMON_DEPEND = $(SRCDIR)/fwrap_mpi.o $(SRCDIR)/cputime.o \ $(SRCDIR)/makeseed.o $(SRCDIR)/simple_mpi.o \ $(SRCDIR)/memory.o $(SRCDIR)/communicate.o $(SRCDIR)/checkid.o $(SRCDIR)/store.o lcg : (cd ..; $(MAKE) sprng_common) $(MAKE) $(LIBDIR)/liblcg.a $(LIBDIR)/liblcg.a : lcg.o primes.o $(SPRNG_COMMON_DEPEND) $(AR) $(ARFLAGS) $(LIBDIR)/liblcg.a lcg.o primes.o \ $(SPRNG_COMMON_DEPEND) $(RANLIB) $(LIBDIR)/liblcg.a lcg.o : $(SRCDIR)/interface.h lcg.c $(SRCDIR)/memory.h primes.h $(SRCDIR)/multiply.h $(SRCDIR)/store.h $(SRCDIR)/fwrap_.h $(CC) -c $(CFLAGS) $(FFXN) $(INLINEOPT) lcg.c -I$(SRCDIR) primes.o : primes.h primes.c $(CC) -c $(CFLAGS) primes.c -I$(SRCDIR) #--------------------------------------------------------------------------- # Time the generator #--------------------------------------------------------------------------- timesprng : (cd ..; $(MAKE) timesprng_exec TIMESPRNG_LIB=lcg) #--------------------------------------------------------------------------- # Check portability of generator #--------------------------------------------------------------------------- checksprng : (cd ..; $(MAKE) checksprng_exec CHECKSPRNG_LIB=lcg) cp lcg.data $(CHKDIR)/. #--------------------------------------------------------------------------- .F.f : @if [ -f $*.i ] ; then \ rm $*.i ;\ fi $(CPP) $*.F @if [ -f $*.i ] ; then \ mv $*.i $*.f ;\ fi #--------------------------------------------------------------------------- #--------------------------------------------------------------------------- clean : rm -f *.o *.i realclean : rm -f *.o *.f *~ *.i core a.out .SUFFIXES : .SUFFIXES : .f .F SHAR_EOF fi # end of overwriting check if test -f 'lcg.c' then echo shar: will not over-write existing file "'lcg.c'" else cat << "SHAR_EOF" > 'lcg.c' /*************************************************************************/ /*************************************************************************/ /* Parallel 48 bit Linear Congruential Generator */ /* */ /* Author: Ashok Srinivasan, */ /* NCSA, University of Illinois, Urbana-Champaign */ /* E-Mail: ashoks@ncsa.uiuc.edu */ /* */ /* Disclaimer: NCSA expressly disclaims any and all warranties, expressed*/ /* or implied, concerning the enclosed software. The intent in sharing */ /* this software is to promote the productive interchange of ideas */ /* throughout the research community. All software is furnished on an */ /* "as is" basis. No further updates to this software should be */ /* expected. Although this may occur, no commitment exists. The authors */ /* certainly invite your comments as well as the reporting of any bugs. */ /* NCSA cannot commit that any or all bugs will be fixed. */ /*************************************************************************/ /*************************************************************************/ /* This is version 0.2, created 13 April 1998 */ #include #include #include #include "memory.h" #include "primes.h" #include "interface.h" #include #define NDEBUG #include #include "store.h" #define VERSION "00" #define GENTYPE VERSION "48 bit Linear Congruential Generator with Prime Addend" #if LONG_MAX > 2147483647L /* 32 bit integer */ #if LONG_MAX > 35184372088831L /* 46 bit integer */ #if LONG_MAX >= 9223372036854775807L /* 64 bit integer */ #define LONG_SPRNG #define LONG64 long #define store_long64 store_long #define store_long64array store_longarray #define load_long64 load_long #define load_long64array load_longarray #define INIT_SEED 0x2bc68cfe166dL #define MSB_SET 0x3ff0000000000000L #define LSB48 0xffffffffffffL #define AN1 0xdadf0ac00001L #define AN2 0xfefd7a400001L #define AN3 0x6417b5c00001L #define AN4 0xcf9f72c00001L #define AN5 0xbdf07b400001L #define AN6 0xf33747c00001L #define AN7 0xcbe632c00001L #define PMULT1 0xa42c22700000L #define PMULT2 0xfa858cb00000L #define PMULT3 0xd0c4ef00000L #define PMULT4 0xc3cc8e300000L #define PMULT5 0x11bdbe700000L #define PMULT6 0xb0f0e9f00000L #define PMULT7 0x6407de700000L #define MULT1 0x2875a2e7b175L /* 44485709377909 */ #define MULT2 0x5deece66dL /* 1575931494 */ #define MULT3 0x3eac44605265L /* 68909602460261 */ #define MULT4 0x275b38eb4bbdL /* 4327250451645 */ #define MULT5 0x1ee1429cc9f5L /* 33952834046453 */ #define MULT6 0x739a9cb08605L /* 127107890972165 */ #define MULT7 0x3228d7cc25f5L /* 55151000561141 */ #endif #endif #endif #if !defined(LONG_SPRNG) && defined(_LONG_LONG) #define LONG64 long long #define store_long64 store_longlong #define store_long64array store_longlongarray #define load_long64 load_longlong #define load_long64array load_longlongarray #define INIT_SEED 0x2bc68cfe166dLL #define MSB_SET 0x3ff0000000000000LL #define LSB48 0xffffffffffffLL #define AN1 0xdadf0ac00001LL #define AN2 0xfefd7a400001LL #define AN3 0x6417b5c00001LL #define AN4 0xcf9f72c00001LL #define AN5 0xbdf07b400001LL #define AN6 0xf33747c00001LL #define AN7 0xcbe632c00001LL #define PMULT1 0xa42c22700000LL #define PMULT2 0xfa858cb00000LL #define PMULT3 0xd0c4ef00000LL #define PMULT4 0x11bdbe700000LL #define PMULT5 0xc3cc8e300000LL #define PMULT6 0xb0f0e9f00000LL #define PMULT7 0x6407de700000LL #define MULT1 0x2875a2e7b175LL #define MULT2 0x5deece66dLL #define MULT3 0x3eac44605265LL #define MULT4 0x1ee1429cc9f5LL #define MULT5 0x275b38eb4bbdLL #define MULT6 0x739a9cb08605LL #define MULT7 0x3228d7cc25f5LL #endif #define TWO_M24 5.96046447753906234e-8 #define TWO_M48 3.5527136788005008323e-15 #include "multiply.h" #ifdef LittleEndian #define MSB 1 #else #define MSB 0 #endif #define LSB (1-MSB) #define LCGRUNUP 29 int MAX_STREAMS = 1<<19; #ifndef TOOMANY #define TOOMANY "generator has branched maximum number of times;\nindependence of streams cannot be guranteed\n" #endif #ifdef LONG64 struct rngen { unsigned LONG64 seed; int init_seed; int prime; int prime_position; int prime_next; char *gentype; int parameter; unsigned LONG64 multiplier; }; unsigned LONG64 mults[] = {MULT1,MULT2,MULT3,MULT4,MULT5,MULT6,MULT7}; unsigned LONG64 multiplier=0; #else struct rngen { int seed[2]; int init_seed; int prime; int prime_position; int prime_next; char *gentype; int parameter; int *multiplier; }; int mults[][4] = {{0x175,0xe7b,0x5a2,0x287},{0x66d,0xece,0x5de,0x000}, {0x265,0x605,0xc44,0x3ea},{0x9f5,0x9cc,0x142,0x1ee}, {0xbbd,0xeb4,0xb38,0x275},{0x605,0xb08,0xa9c,0x739}, {0x5f5,0xcc2,0x8d7,0x322}}; int *multiplier=NULL; #endif #define NPARAMS 7 int NGENS=0; void plus ANSI_ARGS((int *a, int *b, int *c)); void mult ANSI_ARGS((int *a, int *b, int *c, int size)); void advance_seed ANSI_ARGS((struct rngen *gen)); double get_rn_dbl ANSI_ARGS((int *gen)); #ifdef __STDC__ int bit_reverse(int n) #else int bit_reverse(n) int n; #endif { int i=31, rev=0; for(i=30; i>=0; i--) { rev |= (n&1)<>= 1; } return rev; } #ifdef __STDC__ void errprint(char *level, char *routine, char *error) #else void errprint(level, routine, error) char *level,*routine,*error; #endif { #ifdef CRAY #pragma _CRI guard 63 #endif fprintf(stderr,"%s from %s: %s\n",level,routine,error); #ifdef CRAY #pragma _CRI endguard 63 #endif } #ifdef __STDC__ int strxncmp(char *s1, char *s2, int n) #else int strxncmp(s1, s2, n) char *s1, *s2; int n; #endif { int i; for(i=0; i= MAX_STREAMS) /* check if gen_num is valid */ fprintf(stderr,"WARNING - init_rng: gennum: %d > maximum number of independent streams: %d\n\tIndependence of streams cannot be guranteed.\n", gennum, MAX_STREAMS); if (gennum < 0 || gennum >= total_gen) /* check if gen_num is valid */ { errprint("ERROR","init_rng","gennum out of range. "); return (int *) NULL; } seed &= 0x7fffffff; /* Only 31 LSB of seed considered */ if (mult < 0 || mult >= NPARAMS) { errprint("WARNING","init_rng","multiplier not valid. Using Default param"); mult = 0; } #ifdef LONG64 if(multiplier == 0) multiplier = mults[mult]; /* else if(multiplier != mults[mult]) fprintf(stderr,"WARNING: init_rng_d: Proposed multiplier does not agree with current multiplier.\n\t Independence of streams is not guaranteed\n");*/ #else if(multiplier == NULL) multiplier = mults[mult]; /*else if(strxncmp((char *) multiplier,(char *) mults[mult],4*sizeof(int)) != 0) fprintf(stderr,"WARNING: init_rng_d: Proposed multiplier does not agree with current multiplier.\n\t Independence of streams is not guaranteed\n");*/ #endif genptr = (struct rngen *) mymalloc(1*sizeof(struct rngen)); if(genptr == NULL) return NULL; genptr->gentype = GENTYPE; genptr->init_seed = seed; getprime(1, &(genptr->prime), gennum); genptr->prime_position = gennum; genptr->prime_next = total_gen; genptr->parameter = mult; #ifdef LONG64 genptr->seed = INIT_SEED; /* initialize generator */ genptr->seed ^= ((unsigned LONG64) seed)<<16; genptr->multiplier = mults[mult]; if (genptr->prime == 0) genptr->seed |= 1; #else genptr->seed[1] = 16651885^((seed<<16)&(0xff0000));/* initialize generator */ genptr->seed[0] = 2868876^((seed>>8)&(0xffffff)); genptr->multiplier = mults[mult]; if (genptr->prime == 0) genptr->seed[1] |= 1; #endif for(i=0; iprime_position); i++) get_rn_dbl( (int *) genptr); NGENS++; return (int *) genptr; } /* On machines with 32 bit integers, */ /* the Cray's 48 bit integer math is duplicated by breaking the problem into*/ /* steps. The algorithm is linear congruential. M is the multiplier and S*/ /* is the current seed. The 31 High order bits out of the 48 bits are returned*/ #ifdef __STDC__ int get_rn_int(int *igenptr) #else int get_rn_int(igenptr) int *igenptr; #endif { struct rngen *genptr = (struct rngen *) igenptr; #ifdef LONG64 multiply(genptr); return ((unsigned LONG64) genptr->seed) >> 17; #else int s[4], res[4]; multiply(genptr,genptr->multiplier,s,res); return (genptr->seed[0]<<7) | ((unsigned int) genptr->seed[1] >> 17) ; #endif } #ifdef __STDC__ float get_rn_flt(int *igenptr) #else float get_rn_flt(igenptr) int *igenptr; #endif { return (float) get_rn_dbl(igenptr); } /* get_rn_float */ #ifdef __STDC__ double get_rn_dbl(int *igenptr) #else double get_rn_dbl(igenptr) int *igenptr; #endif { struct rngen *genptr = (struct rngen *) igenptr; #ifdef LONG64 double temp[1]; unsigned LONG64 *ltemp; temp[0] = 0.0; multiply(genptr); /* Add defined(O2K) || defined(SGI) if optimization level is -O2 or lower */ #if defined(CONVEX) || defined(GENERIC) ltemp = (unsigned LONG64 *) temp; *ltemp = (genptr->seed<<4) | MSB_SET; return temp[0] - (double) 1.0; #else return genptr->seed*3.5527136788005008e-15; #endif #else static double equiv[1]; #define iran ((int *)equiv) #define ran (equiv) int expo, s[4], res[4]; multiply(genptr,genptr->multiplier,s,res); #if defined(HP) || defined(SUN) || defined(SOLARIS) || defined(GENERIC) expo = 1072693248; /*IEEE mantissa is 52 bits. We have only 48 bits, so we shift our result 4*/ /* bits left. 32-(24+4) = 4 bits are still blank in the lower word, so we*/ /* grab the low 4 bits of seedhi to fill these. */ iran[LSB] = genptr->seed[1] << 4 | genptr->seed[0] << 28; /* place the remaining (24-4)=20 bits of seedhi in bits 20-0 of ran. */ /* Expo occupies bits 30-20. Bit 31 (sign) is always zero. */ iran[MSB] = expo | genptr->seed[0] >> 4; return (*ran - (double) 1.0); #else return genptr->seed[0]*TWO_M24 + genptr->seed[1]*TWO_M48; #endif #undef ran #undef iran #endif } /* get_rn_dbl */ /*************************************************************************/ /*************************************************************************/ /* SPAWN_RNG: spawns new generators */ /*************************************************************************/ /*************************************************************************/ #ifdef __STDC__ int spawn_rng(int *igenptr, int nspawned, int ***newgens, int checkid) #else int spawn_rng(igenptr,nspawned, newgens, checkid) int *igenptr,nspawned, ***newgens, checkid; #endif { struct rngen **genptr, *tempptr = (struct rngen *) igenptr; int i, j; if (nspawned <= 0) /* check if nspawned is valid */ { nspawned = 1; errprint("WARNING","spawn_rng","nspawned <= 0. Default value of 1 used for nspawned"); } genptr = (struct rngen **) mymalloc(nspawned*sizeof(struct rngen *)); if(genptr == NULL) { *newgens = NULL; return 0; } for(i=0; iinit_seed = tempptr->init_seed; genptr[i]->prime_position = tempptr->prime_position + tempptr->prime_next*(i+1); if(genptr[i]->prime_position > MAXPRIMEOFFSET) { fprintf(stderr,"WARNING - spawn_rng: gennum: %d > maximum number of independent streams: %d\n\tIndependence of streams cannot be guranteed.\n", genptr[i]->prime_position, MAX_STREAMS); genptr[i]->prime_position %= MAXPRIMEOFFSET; } genptr[i]->prime_next = (nspawned+1)*tempptr->prime_next; getprime(1, &(genptr[i]->prime), genptr[i]->prime_position); genptr[i]->multiplier = tempptr->multiplier; genptr[i]->parameter = tempptr->parameter; genptr[i]->gentype = tempptr->gentype; #ifdef LONG64 genptr[i]->seed = INIT_SEED; /* initialize generator */ genptr[i]->seed ^= ((unsigned LONG64) tempptr->init_seed)<<16; if (genptr[i]->prime == 0) genptr[i]->seed |= 1; #else genptr[i]->seed[1] = 16651885^((tempptr->init_seed<<16)&(0xff0000)); genptr[i]->seed[0] = 2868876^((tempptr->init_seed>>8)&(0xffffff)); if (genptr[i]->prime == 0) genptr[i]->seed[1] |= 1; #endif if(genptr[i]->prime_position > MAXPRIMEOFFSET) advance_seed(genptr[i]); /* advance lcg 10^6 steps from initial seed */ for(j=0; jprime_position); j++) get_rn_dbl( (int *) genptr[i]); } tempptr->prime_next = (nspawned+1)*tempptr->prime_next; NGENS += nspawned; *newgens = (int **) genptr; if(checkid != 0) for(i=0; i>12; temp[i-1] &= 4095; } for(i=0; i<4 ; i++) result[i] = temp[i]; } /*multiply two 4 digit numbers in base 2^12 and return 'size' lowest order */ /* digits*/ #ifdef __STDC__ void mult(int *a, int *b, int *c, int size) #else void mult(a,b,c,size) int *a, *b, *c, size; #endif { int temp[8]; int i, j; for(i=0; i<8; i++) temp[i] = 0; for(i=0; i<4; i++) for(j=0; j<4; j++) temp[i+j] += a[i]*b[j]; for(i=1; i<8; i++) { temp[i] += temp[i-1]>>12; temp[i-1] &= 4095; } for(i=0; imultiplier == mults[i]) { found = 1; break; } if(found == 0) { fprintf(stderr,"WARNING: advance_seed: multiplier not acceptable.\n"); return ; } /* a^n, n = 10^6 and pmult = (a^n-1)/(a-1), n = 10^6 */ switch(i) { case 0 : an = AN1; pmult = PMULT1; break; case 1 : an = AN2; pmult = PMULT2; break; case 2 : an = AN3; pmult = PMULT3; break; case 3 : an = AN4; pmult = PMULT4; break; case 4 : an = AN5; pmult = PMULT5; break; case 5 : an = AN6; pmult = PMULT6; break; case 6 : an = AN7; pmult = PMULT7; break; default: fprintf(stderr,"WARNING: advance_seed parameters for multiplier %d not available\n", i); return; } gen->seed = gen->seed*an + pmult*gen->prime; gen->seed &= LSB48; #else int an[4], pmult[4], x0, x1, temp[4],temp2[4], i, found; for(i=0, found=0; imultiplier, (char *) (mults[i]), 4*sizeof(int)) == 0) { found = 1; break; } if(found == 0) { fprintf(stderr,"WARNING: advance_seed: multiplier not acceptable.\n"); return ; } /* a^n, n = 10^6 and pmult = (a^n-1)/(a-1), n = 10^6 */ switch(i) { case 0 : an[0] = 0x001; an[1] = 0xc00; an[2] = 0xf0a; an[3] = 0xdad; pmult[0] = 0x000; pmult[1] = 0x700; pmult[2] = 0xc22; pmult[3] = 0xa42; break; case 1 : an[0] = 0x001; an[1] = 0x400; an[2] = 0xd7a; an[3] = 0xfef; pmult[0] = 0x000; pmult[1] = 0xb00; pmult[2] = 0x58c; pmult[3] = 0xfa8; break; case 2 : an[0] = 0x001; an[1] = 0xc00; an[2] = 0x7b5; an[3] = 0x641; pmult[0] = 0x000; pmult[1] = 0xf00; pmult[2] = 0xc4e; pmult[3] = 0x0d0; break; case 3 : an[0] = 0x001; an[1] = 0xc00; an[2] = 0xf72; an[3] = 0xcf9; pmult[0] = 0x000; pmult[1] = 0x700; pmult[2] = 0xdbe; pmult[3] = 0x11b; break; case 4 : an[0] = 0x001; an[1] = 0x400; an[2] = 0x07b; an[3] = 0xbdf; pmult[0] = 0x000; pmult[1] = 0x300; pmult[2] = 0xc8e; pmult[3] = 0xc3c; break; case 5 : an[0] = 0x001; an[1] = 0xc00; an[2] = 0x747; an[3] = 0xf33; pmult[0] = 0x000; pmult[1] = 0xf00; pmult[2] = 0x0e9; pmult[3] = 0xb0f; break; case 6 : an[0] = 0x001; an[1] = 0xc00; an[2] = 0x632; an[3] = 0xcbe; pmult[0] = 0x000; pmult[1] = 0x700; pmult[2] = 0x7de; pmult[3] = 0x640; break; default: fprintf(stderr,"WARNING: advance_seed parameters for multiplier %d not available\n", i); return; } x0 = gen->seed[0]; x1 = gen->seed[1]; temp[0] = x1&4095; temp[1] = (x1>>12)&4095; temp[2] = x0&4095; /* seed */ temp[3] = (x0>>12)&4095; temp2[0] = gen->prime%(1<<12); temp2[1] = (gen->prime>>12)%(1<<12); temp2[2] = (gen->prime>>24)%(1<<12); temp2[3] = 0; /* prime */ mult(temp,an,temp,4); mult(temp2,pmult,temp2,4); plus(temp,temp2,temp); gen->seed[1] = (temp[1]<<12) + temp[0]; gen->seed[0] = (temp[3]<<12) + temp[2]; #endif } #ifdef __STDC__ int free_rng(int *genptr) #else int free_rng(genptr) int *genptr; #endif { struct rngen *q; q = (struct rngen *) genptr; free(q); NGENS--; return NGENS; } #ifdef __STDC__ int pack_rng( int *genptr, char **buffer) #else int pack_rng(genptr,buffer) int *genptr; char **buffer; #endif { unsigned char *p, *initp; unsigned int size, m[2], i; struct rngen *q; q = (struct rngen *) genptr; size = 5*4 /*sizeof(int)*/ + 2*8/*sizeof(unsigned LONG64)*/ + strlen(q->gentype)+1; /* The new load/store routines make using sizeof unnecessary. Infact, */ /* using sizeof could be erroneous. */ initp = p = (unsigned char *) mymalloc(size); if(p == NULL) { *buffer = NULL; return 0; } strcpy((char *)p,q->gentype); p += strlen(q->gentype)+1; #ifdef LONG64 p += store_long64(q->seed,8,p); p += store_int(q->init_seed,4,p); p += store_int(q->prime,4,p); p += store_int(q->prime_position,4,p); p += store_int(q->prime_next,4,p); p += store_int(q->parameter,4,p); p += store_long64(q->multiplier,8,p); #else m[0] = q->seed[0]>>8;m[1] = q->seed[0]<<24 | q->seed[1]; p += store_intarray(m,2,4,p); p += store_int(q->init_seed,4,p); p += store_int(q->prime,4,p); p += store_int(q->prime_position,4,p); p += store_int(q->prime_next,4,p); p += store_int(q->parameter,4,p); /* The following is done since the multiplier is stored in */ /* pieces of 12 bits each */ m[1] = q->multiplier[2]&0xff; m[1] <<= 24; m[1] |= q->multiplier[1]<<12; m[1] |= q->multiplier[0]; m[0] = (q->multiplier[3]<<4) | (q->multiplier[2]>>8); p += store_intarray(m,2,4,p); #endif *buffer = (char *) initp; assert(p-initp == size); return p-initp; } #ifdef __STDC__ int get_seed_rng(int *gen) #else int get_seed_rng(gen) int *gen; #endif { return ((struct rngen *) gen)->init_seed; } #ifdef __STDC__ int *unpack_rng( char *packed) #else int *unpack_rng(packed) char *packed; #endif { struct rngen *q; unsigned char *p; unsigned int m[4], m2[2], i; p = (unsigned char *) packed; q = (struct rngen *) mymalloc(sizeof(struct rngen)); if(q == NULL) return NULL; if(strcmp((char *)p,GENTYPE) != 0) { fprintf(stderr,"ERROR: Unpacked ' %.24s ' instead of ' %s '\n", p, GENTYPE); return NULL; } else q->gentype = GENTYPE; p += strlen(q->gentype)+1; #ifdef LONG64 p += load_long64(p,8,&q->seed); p += load_int(p,4,(unsigned int *)&q->init_seed); p += load_int(p,4,(unsigned int *)&q->prime); p += load_int(p,4,(unsigned int *)&q->prime_position); p += load_int(p,4,(unsigned int *)&q->prime_next); p += load_int(p,4,(unsigned int *)&q->parameter); p += load_long64(p,8,&q->multiplier); #else p += load_intarray(p,2,4,m2); q->seed[1] = m2[1]&0xffffff; q->seed[0] = m2[1]>>24 | m2[0]<<8; p += load_int(p,4,(unsigned int *)&q->init_seed); p += load_int(p,4,(unsigned int *)&q->prime); p += load_int(p,4,(unsigned int *)&q->prime_position); p += load_int(p,4,(unsigned int *)&q->prime_next); p += load_int(p,4,(unsigned int *)&q->parameter); p += load_intarray(p,2,4,m2); /* The following is done since the multiplier is stored in */ /* pieces of 12 bits each */ m[0] = m2[1]&0xfff; m[1] = (m2[1]&0xfff000)>>12; m[2] = (m2[1]&0xff000000)>>24 | (m2[0]&0xf)<<8; m[3] = (m2[0]&0xfff0)>>4; #endif if(q->parameter < 0 || q->parameter >= NPARAMS) { fprintf(stderr,"ERROR: Unpacked parameters not acceptable.\n"); free(q); return NULL; } q->multiplier = mults[q->parameter]; NGENS++; return (int *) q; } #ifdef __STDC__ int print_rng( int *igen) #else int print_rng(igen) int *igen; #endif { struct rngen *gen; printf("\n%s\n", GENTYPE+2); gen = (struct rngen *) igen; printf("\n \tseed = %d, stream_number = %d\tparameter = %d\n\n", gen->init_seed, gen->prime_position, gen->parameter); return 1; } #include "../simple_.h" #include "../fwrap_.h" SHAR_EOF fi # end of overwriting check if test -f 'lcg.data' then echo shar: will not over-write existing file "'lcg.data'" else cat << "SHAR_EOF" > 'lcg.data' 1519318188 1426033120 12059519 1873949618 1484742006 602016304 11227543 1145778485 1525748633 1914701950 932487892 948632171 286774045 1574863317 922218844 247310540 297059622 228081932 1819872467 801091272 513858329 1997145938 1012370293 1653503743 1767026203 842568853 1252519042 2098459738 436163829 1916905936 439668243 734555397 1165558358 1628700465 1554741325 543795789 280206705 1186924583 1235312622 1552193364 1446962952 1185562439 1752998470 835074222 644816067 2089587740 1169677443 819644125 1287154939 1649374411 1236934759 451777959 1414458583 587582881 1408116822 780292690 902570703 732313726 2001226958 222298815 1540134799 2015917594 1600199985 507514722 1804287800 1960913714 34790911 577208861 1893068035 1952168852 377654882 1126073337 481125185 794885381 1057584933 1447166915 803008961 1060264974 1358079232 1833783170 1563489420 1394863267 1993347153 1549093588 705750285 1452064946 497914919 879021094 176230287 2019278470 1643919033 989432528 726753057 1784680729 941008182 648734732 149033431 895429687 1763190009 306691284 1523353454 474431116 80321559 282474137 2135276617 168545164 335852373 79211741 2023318233 1927481151 494629751 732707247 973598043 210595305 1286807541 1531035395 1073691134 1710092694 1569943818 2058871535 1148515167 710932353 361738023 916221120 1601902448 1892237154 1334153672 2033536248 341472952 591441556 341189536 1799715368 83123702 371710242 1297567281 1479519399 1380187170 1789133488 1449725627 94430000 770799311 811348292 488093324 179206743 1550057198 1462029298 2082797752 1737457897 1090361327 1320034147 1282664228 716100384 428516163 1984037443 84435197 2023974595 1859166783 956150664 217109641 1669730842 216727646 2107632797 1189713496 2113927116 1999247328 2144862571 1421045716 69902745 1523581649 702662725 785606458 1590866928 783297128 1073931185 236987107 633341039 297920200 1712384016 1115793917 1580318009 142860579 1969534765 721069208 1889736494 318589503 1432767392 1976999198 722277645 1872451411 1645022752 2114921758 2081655141 1618794316 1277931174 1208098691 314544500 1767051888 721640314 1355665956 175607521 1714849371 1799950367 1081327798 581732946 1275555944 1566610969 1084338975 2115422443 126711916 1827910040 1276160296 423050918 1239887327 320394247 170646924 1342793613 1364814167 1070829164 663116399 776008147 697304175 1740234173 116130091 351830734 742701576 1356090115 1945323399 2000339157 1130782953 1514387812 1144998981 825011187 1252135619 1521916946 1199457556 2058891144 1006186898 438316560 1090430950 1195882174 1346018656 1029121503 64344477 1800367591 2032323686 303972101 157633570 719764145 1509283727 1031787387 2029008338 2037667144 2029514072 1295425268 390638676 843664457 379321621 553166343 1522891975 937106850 2130037904 230562620 252361562 670756421 290720269 1634532338 1427915831 768592584 2101365931 545980203 672106458 1465629406 568218919 731533367 283272385 1724862893 891371774 443707196 1239363712 1019561229 770490860 253587873 1256878638 378500512 1129958354 1197653080 628961341 1139323338 39422711 638792200 742855592 1149394319 708236456 524267287 1423835784 887294281 173909053 312577427 1759327235 1640161605 1824102006 361089789 1355030432 2053423165 239580485 2069776885 1093011960 808881837 1938114024 228166079 1470976200 1227454742 1788128112 778571186 1618606180 2039637775 1034080160 646418046 785996937 1658649924 1537926194 1172762457 832390797 1087329360 1284222582 1843056904 2027096819 879390324 165211991 260668617 665301085 1484478004 1280104888 1510850843 860127708 1771220943 1956178238 326318701 566218404 473196444 770886507 838558115 1212152095 1032259392 863595809 1710332546 2088982362 1937382346 1137680007 1066753017 2105919197 1378154156 1047338826 1915513933 341128666 1071838105 1821132094 1493437219 1857078207 760237369 245485407 585548647 1881832232 1755474631 2069223221 1815445273 630327090 633893002 1818243735 960845556 80684587 1496104237 1356330953 1304459259 1315240873 112582142 634729985 1081039076 2096874483 10839043 34952267 350247261 1944373982 51176438 906356932 1606337850 854910964 732252959 2005875267 1261376893 564929040 935498510 311361113 1410672963 214793288 1908784692 546129328 664932489 1101549125 1974527840 1781590226 331997916 885320177 1681722900 733357894 1898904540 63484041 1508321733 361335574 260495278 865736980 851045872 797606575 2120067391 494111278 1560512789 1455194914 625517683 1124878654 394954901 1253237962 334222890 816390410 2014505829 1143671881 831996976 1126351266 201084334 91345390 629665538 824064955 1196685126 1572632948 904671098 355752280 163673862 585821223 814205529 670496229 823809289 1402488675 1243280307 1007146912 1980319172 441463159 291527731 1160440945 149891071 1888667369 24199755 12987420 1054341039 493244950 1367564605 1073463760 1827389362 1777164083 321091586 14122777 856388713 1664163506 2082996757 507968054 892043567 158033922 1887083554 1898191303 827962038 1660489392 224620167 349974495 991037502 1042062316 35182534 261236347 1920325044 1161485928 131494092 1365286733 164006 463348382 143222040 737757427 1852375585 225592684 706017482 547949447 1359296363 787690268 321975948 1713704594 755755930 1628488897 499949401 181598811 1857578000 1400262143 731092520 920598175 896408023 0.666551 0.621556 0.318551 0.990514 0.701296 0.388824 0.174647 0.561276 0.679550 0.804865 0.290286 0.234919 0.733417 0.950939 0.146278 0.202764 0.097724 0.157808 0.102785 0.627753 0.197040 0.000145 0.857481 0.848108 0.033915 0.181840 0.593291 0.535873 0.628871 0.059161 0.759953 0.048481 0.176654 0.104791 0.796072 0.893795 0.412338 0.254155 0.922159 0.795978 0.209243 0.295208 0.556261 0.932856 0.333062 0.966098 0.823473 0.725102 0.868571 0.867195 0.465907 0.631756 0.822799 0.033161 0.893151 0.361405 0.638345 0.858702 0.843227 0.188191 0.559840 0.042883 0.614248 0.689145 0.363362 0.279327 0.057079 0.544694 0.651493 0.244032 0.734244 0.496368 0.644735 0.143001 0.110992 0.391442 0.963131 0.005584 0.377095 0.298604 0.730455 0.326548 0.044662 0.114689 0.278399 0.553901 0.635602 0.141356 0.751410 0.726913 0.385590 0.861625 0.876559 0.929197 0.538395 0.236879 0.569985 0.727966 0.589624 0.250878 0.795546 0.718574 0.132561 0.202238 0.206618 0.432099 0.146460 0.272503 0.513203 0.145356 0.800807 0.633411 0.789137 0.462441 0.794714 0.592210 0.024246 0.523191 0.841300 0.874245 0.230512 0.398352 0.090970 0.801744 0.316912 0.918319 0.778690 0.119322 0.382580 0.069908 0.408294 0.140701 0.060834 0.104651 0.846553 0.426335 0.236591 0.006483 0.301963 0.854731 0.906569 0.543726 0.584392 0.806334 0.845897 0.310067 0.073761 0.650985 0.167316 0.175353 0.526515 0.309234 0.031842 0.105822 0.290966 0.663787 0.804727 0.264695 0.525563 0.927246 0.600920 0.510464 0.972213 0.951927 0.573338 0.417766 0.350099 0.200418 0.749492 0.753380 0.139736 0.813624 0.892006 0.149762 0.823647 0.626248 0.561867 0.685994 0.456029 0.126086 0.505866 0.069377 0.931702 0.349338 0.018264 0.421707 0.712783 0.493768 0.278668 0.827205 0.013707 0.137367 0.721199 0.261861 0.021006 0.222807 0.513007 0.467529 0.378632 0.336147 0.622054 0.382460 0.663535 0.028765 0.034777 0.720290 0.435748 0.339312 0.384093 0.982022 0.714716 0.930730 0.898356 0.073698 0.716358 0.107234 0.653931 0.722728 0.706804 0.986934 0.970339 0.177955 0.977677 0.425000 0.430444 0.335147 0.828738 0.385487 0.832290 0.246726 0.926731 0.900823 0.918368 0.201140 0.380193 0.918451 0.406846 0.645483 0.980080 0.174054 0.733303 0.580131 0.472418 0.038371 0.456603 0.784556 0.884344 0.425932 0.085609 0.900784 0.267128 0.523557 0.631610 0.769671 0.962950 0.066549 0.612647 0.203182 0.375820 0.261770 0.048896 0.003981 0.226176 0.407973 0.852077 0.385974 0.404140 0.801655 0.476313 0.083050 0.584536 0.226282 0.953404 0.388520 0.019517 0.117125 0.063135 0.877960 0.939680 0.364269 0.110731 0.819894 0.345077 0.482081 0.211162 0.661675 0.992463 0.931856 0.366621 0.834724 0.938883 0.461217 0.612760 0.500012 0.204477 0.222773 0.885281 0.250144 0.104894 0.787346 0.696069 0.901012 0.477286 0.183851 0.522696 0.998744 0.800541 0.316546 0.712783 0.895237 0.772802 0.147264 0.532159 0.019233 0.955670 0.329601 0.480250 0.304467 0.088619 0.566375 0.535570 0.599619 0.598620 0.181592 0.347245 0.947481 0.923867 0.682318 0.464164 0.007035 0.797525 0.691142 0.291664 0.929076 0.624017 0.391263 0.026797 0.963940 0.068488 0.706741 0.178478 0.962183 0.777294 0.081306 0.399673 0.162254 0.577071 0.989695 0.107682 0.882894 0.150752 0.863209 0.248379 0.545067 0.165598 0.911650 0.464545 0.134439 0.500770 0.430737 0.891340 0.529912 0.976080 0.479310 0.748403 0.018606 0.970637 0.754123 0.393298 0.698154 0.207126 0.869837 0.501276 0.941800 0.697089 0.934191 0.638173 0.731912 0.342999 0.987594 0.684023 0.717910 0.688073 0.824974 0.972624 0.542998 0.024040 0.536274 0.655320 0.231360 0.005729 0.469151 0.834913 0.607687 0.589985 0.740112 0.497654 0.411177 0.791450 0.983426 0.888130 0.496752 0.221258 0.143777 0.804593 0.520631 0.704130 0.280000 0.562603 0.471981 0.528112 0.872698 0.195013 0.226940 0.908079 0.915519 0.579299 0.808531 0.393571 0.343948 0.752546 0.781775 0.843811 0.420469 0.974265 0.196782 0.863406 0.682490 0.302376 0.915736 0.642800 0.679701 0.373649 0.177935 0.894951 0.018478 0.932663 0.728689 0.206511 0.308822 0.779592 0.074456 0.826358 0.418439 0.444205 0.942827 0.660428 0.501480 0.919263 0.289535 0.508941 0.436578 0.469577 0.376498 0.115477 0.509041 0.282552 0.169082 0.157588 0.162101 0.841866 0.394345 0.422185 0.756983 0.328445 0.845339 0.117744 0.184318 0.413222 0.392978 0.887082 0.601323 0.975818 0.613061 0.922293 0.099478 0.924820 0.091377 0.736288 0.883689 0.411405 0.427276 0.217707 0.041660 0.712436 0.511440 0.457918 0.755139 0.445928 0.055986 0.376158 0.234689 0.995726 0.056529 0.032836 0.706645 0.128866 0.271734 0.878815 0.732971 0.24439589714294 0.02460828192258 0.47251767648351 0.36815388833876 0.09308219838651 0.22284275471320 0.85536976547220 0.34625905696713 0.64082497994713 0.22750141684434 0.02315561673536 0.41841392396106 0.14252785684421 0.78816422657355 0.49589046230880 0.22678216479177 0.96631945030455 0.12902456323107 0.86686771845178 0.88429089697886 0.91948051212101 0.28854740281495 0.41339807612692 0.73680480678233 0.32704805752087 0.06220489033666 0.15376963017926 0.20106265208404 0.09225896114891 0.40381456412025 0.42912267552565 0.01059168901982 0.00581819415905 0.63950631123324 0.73286514119486 0.65420433335206 0.39011063895309 0.52586107048266 0.67719722949445 0.07689483803073 0.37722489930667 0.42994578744719 0.01513386542226 0.22845288338175 0.97895241497947 0.06658860233467 0.38160322818828 0.51648167338262 0.25632017892084 0.34319415355358 0.99887611986697 0.45146134803813 0.11989012935156 0.43371464526829 0.14548641326100 0.39387019545307 0.26481753582891 0.93321639336983 0.61530449952355 0.53712721531383 0.78193410538451 0.48808736873719 0.11151571345993 0.62333598563756 0.79396378946299 0.01271723688907 0.21155133820827 0.00770245432492 0.89107006218471 0.30297098663145 0.90176316868470 0.00640415376198 0.91957745290659 0.55461888459388 0.17869093227009 0.00406635795645 0.18983703866293 0.95885262511542 0.82663731321372 0.91143780496533 0.18237012233132 0.84800860329099 0.45405509163323 0.68006573017371 0.25480612778914 0.92665766061951 0.46470717630111 0.95558303581827 0.48553452140186 0.27345487510769 0.88005027012438 0.41960039651451 0.07384600741717 0.31784642837625 0.35880874584750 0.09522890694310 0.48170003072735 0.86630171879036 0.18586421453774 0.11415545377830 0.72080344150736 0.91170113939158 0.24863042834757 0.23328927690089 0.72272371993728 0.04651173994602 0.67387975939094 0.39375511242764 0.08221911307517 0.40819778124166 0.96602872581763 0.81001181961132 0.52840208745997 0.50983940436722 0.53929308182502 0.51583642271780 0.28894133769414 0.79919371558615 0.85663003790628 0.85866798507077 0.99405590058188 0.29757696608118 0.12936341860158 0.58431461306987 0.48499239388106 0.10124762278828 0.35982918489133 0.67837610063448 0.80205771586580 0.49082641926358 0.35790093465022 0.89513520670326 0.82678439419162 0.95022438153255 0.17909993476606 0.60345824762827 0.52873884750596 0.81021178065782 0.93102912011941 0.48488152004308 0.14777380835467 0.72092340883064 0.30558750511795 0.33212998555543 0.94572973869842 0.64315694664017 0.01193778038385 0.39552958391798 0.54688593727313 0.90430492330607 0.02025769800300 0.91697043366451 0.40365487860458 0.66831530657162 0.45527237096159 0.76121596606425 0.26353282421975 0.45047453214830 0.89343201351885 0.81551865714353 0.75622059498622 0.30044823157695 0.77598511679384 0.57190741095159 0.58779027705582 0.66742247962695 0.72534277527969 0.35149074270634 0.43410124008989 0.63901049539163 0.58290304284080 0.87413465044637 0.22129186280092 0.05359983255660 0.32739698849615 0.54551038583658 0.21064647485909 0.46991162141731 0.30394773044646 0.23047617632787 0.45263992338197 0.13674981560301 0.03114233886335 0.53889424945514 0.91529954405212 0.14238308762634 0.65787130142557 0.47725120317319 0.74062584888942 0.99199844682120 0.83048342796013 0.75493179127644 0.84573362234383 0.82159225845609 0.48655281932594 0.19390448762639 0.80929403216912 0.61904456131610 0.11250102836262 0.51924769461936 0.90608049898941 0.70260485033361 0.25232898481918 0.82783910756763 0.15087611607755 0.77137524841642 0.01328182917540 0.09423347493841 0.55624305612830 0.26250867497131 0.72651268967287 0.10497674219775 0.90586433222892 0.14976866525226 0.54747083018312 0.97218327184071 0.49615018330633 0.52497234207425 0.14818268125752 0.19909843155404 0.44398491756193 0.09793212712726 0.80381323032594 0.81766727385441 0.62892995829432 0.61522354059965 0.41650727704127 0.13204223147276 0.60557478255468 0.06995931257567 0.67375734370179 0.65182466071427 0.24834411178114 0.59339245520937 0.69529475602551 0.03210761751410 0.47985679241545 0.17737635849523 0.78624476379866 0.72965638542987 0.57844398101938 0.67037681205570 0.15514274157454 0.18953992886518 0.79485121007779 0.06788255824629 0.55911868415992 0.07604655590221 0.75727534500186 0.43284598554152 0.45648857759242 0.31574158073659 0.47315303732798 0.23847731310788 0.54613597118594 0.81713961335432 0.10157672124697 0.63271253519494 0.98604238750006 0.03688021126837 0.66854717789276 0.64250092498132 0.55837327227501 0.27084894234132 0.01578289177104 0.43136047929954 0.79951419296581 0.43283736646078 0.64042553381587 0.11320275573207 0.36987213000679 0.24367098460586 0.21626261332582 0.73013054942046 0.69522615684253 0.36896476414561 0.14621233395108 0.69578621606034 0.17967276057131 0.12062736654427 0.03058665447929 0.36602360746718 0.84613070226434 0.46088861551369 0.63649618090018 0.45546598429111 0.39594084214678 0.13105598754926 0.40173948961777 0.50529434443350 0.95193494735617 0.76162592021413 0.42330949022384 0.71090879297428 0.73269634642914 0.62512045399466 0.87855516744759 0.52756831745546 0.93846158250924 0.66555008854101 0.15898818325361 0.93051505868545 0.06570813401674 0.30430568112788 0.30627505907441 0.05932631932765 0.82805600467555 0.08526668172303 0.41128668233306 0.72333456791806 0.98142272185296 0.11381592263574 0.14499237823827 0.58806101211877 0.53277921063458 0.67523349883186 0.84991544481626 0.45699536945734 0.47135031843020 0.92568992514926 0.33886555378254 0.26712169402682 0.98130563868524 0.74998267632478 0.57041045965177 0.04186096112702 0.77413590995817 0.21859634245299 0.43534972193487 0.10622400611475 0.18087483571626 0.57507590373718 0.37323631788009 0.33371679629904 0.94859786819961 0.69367098166460 0.21131279347830 0.73381232306704 0.53732551410815 0.89544729654060 0.38926665587290 0.42662307305714 0.37332123817671 0.15540589115033 0.40176973839061 0.31492350960792 0.00917025041978 0.90856190468196 0.29727795764212 0.83315670640492 0.01194755145121 0.03249873744183 0.24708591803008 0.01191166172188 0.45584876531274 0.38884127281952 0.51483489004686 0.18110132140889 0.95810769818134 0.61571935592018 0.47586748244572 0.58535438931699 0.85572741166673 0.32508090577125 0.16093753222647 0.59373004266724 0.47999907865880 0.44824879753255 0.02337403789019 0.34867213447174 0.91609218533882 0.24410793019124 0.28704304808785 0.36516179299495 0.52191294252875 0.31859463130722 0.24915597711345 0.71245295690602 0.97531226052005 0.36170068098977 0.85256653817500 0.89285775171573 0.38857251139614 0.97708469993264 0.66273605251527 0.98318615581681 0.00653073914220 0.82581537851266 0.18170799474903 0.08616056045166 0.13794716802132 0.02408996316591 0.19252195973485 0.91606903471927 0.97266899128804 0.59743849999547 0.18044447140683 0.63286480180086 0.03926268280815 0.40152550133668 0.84075388675544 0.76276205343381 0.75421065105810 0.95090688630828 0.41576876606631 0.57514321379413 0.31523213578773 0.55882718871174 0.15615817110233 0.20242854885981 0.37416101984710 0.16831106250664 0.26374810364656 0.62173904052089 0.28108687980085 0.66049998398610 0.32609539521221 0.59810614367651 0.27875731648323 0.75162068820422 0.71871849227095 0.50517085681524 0.91779157808227 0.15448222266626 0.84135843755195 0.48041789961189 0.99793490118325 0.38144449128294 0.12292261432124 0.48078214239269 0.87288203695004 0.62896873361105 0.61939318456515 0.02684220941992 0.60623428777672 0.91286047595608 0.02414130117096 0.75880381832824 0.86966924180287 0.14998403949589 0.18558179602439 0.57722135920704 0.03276344615237 0.91652563370008 0.59836082792607 0.26118389626630 0.52410769212877 0.19289533846605 0.00734560386732 0.90489963024831 0.42800958437972 0.64729782307055 0.58526045200112 0.60177432825325 0.61843081872799 0.85820340174438 0.35219191209484 0.04784274693395 0.48572428745920 0.85287592191827 0.47629680685891 0.60155108258318 0.96171095385352 0.29534795945940 0.09844615280937 0.99530141498692 0.83978557715376 0.52148779302067 0.76840394974191 0.96987940854738 0.07980601247211 0.14791258445910 0.76627804097143 0.42304263159206 0.40887014485512 0.51042904164445 0.45082004972348 0.00842219047832 0.12070973034911 0.37951252137630 0.65674755795251 0.97388338657751 0.84594869693792 0.99627898105499 0.52829388990703 0.32612522897868 0.53612699216009 0.04179734571106 0.38796378146259 0.29022231128897 0.06504703955463 0.84289365948820 0.30091654510132 0.59179922472601 0.30615047033245 0.40439877519579 0.30006676693014 0.12147576929751 0.16439521732469 0.29479923960034 132160837 1590045634 572998684 535426631 2035021558 1321766978 841786435 1834117734 1601058066 936071460 1539773974 229258807 719095824 1544468387 1804878971 34684357 1783446270 1532162905 1925035341 8079570 1312817337 528383937 1468141516 163740485 1469305353 589471769 1985412317 821821692 1787012760 2021049256 1588435774 460861185 2110206672 977863766 9986444 1507965978 1538438290 1005146555 1053829161 646714044 1476966607 1839086198 1388246287 1284447835 1369613320 2132649460 1747583856 1513051679 1979754401 556871827 1739678026 1688413939 1394060829 1702706210 142761158 1256931065 674474044 867378882 573234061 1384750171 1516143856 615152170 559322603 1321967997 2119171639 642925896 960761817 662032530 1180189916 562246214 231606765 223096967 215971078 282348262 1994327067 59817310 1423285692 470793544 401034344 142714327 1672152378 1059214094 1079702382 1099135114 687748138 1472179416 724820168 1901576788 637350339 1322693674 987046235 2028404777 39926461 146085297 1448569219 1763518026 1372593455 1086191068 689677594 864181970 793280037 1582421121 1303331892 1733881858 1601374588 1976647084 1737338874 393027171 1870227560 546837173 479531248 1722597854 1454092851 1267955816 647201799 206573599 1725749666 1759629210 613583319 1638414161 793928791 1849232578 767774679 578103762 466603864 1720078141 1811066286 984276091 1949431478 1231554087 1244363951 1821758866 649655890 570724569 662114154 1775929942 193927618 1008593164 109752166 753183021 1114739033 1002407056 130426611 61017716 1354482251 152976560 1196588324 444776939 2040014839 2094704943 1519318188 1426033120 12059519 1873949618 1484742006 602016304 11227543 1145778485 1525748633 1914701950 932487892 948632171 286774045 1574863317 922218844 247310540 297059622 228081932 1819872467 801091272 513858329 1997145938 1012370293 1653503743 1767026203 842568853 1252519042 2098459738 436163829 1916905936 439668243 734555397 1165558358 1628700465 1554741325 543795789 280206705 1186924583 1235312622 1552193364 1446962952 1185562439 1752998470 835074222 644816067 2089587740 1169677443 819644125 1287154939 1649374411 1519318188 1426033120 12059519 1873949618 1484742006 602016304 11227543 1145778485 1525748633 1914701950 932487892 948632171 286774045 1574863317 922218844 247310540 297059622 228081932 1819872467 801091272 513858329 1997145938 1012370293 1653503743 1767026203 842568853 1252519042 2098459738 436163829 1916905936 439668243 734555397 1165558358 1628700465 1554741325 543795789 280206705 1186924583 1235312622 1552193364 1446962952 1185562439 1752998470 835074222 644816067 2089587740 1169677443 819644125 1287154939 1649374411 2129106294 324246799 209545887 1393979611 1102645140 1149182893 1690984822 694903242 1122073028 343423450 1316159802 772506814 1997653610 2044311118 2110665040 1093392335 708209004 563020986 312610139 1608756074 2092806467 1662256380 67241153 919071422 759636339 697031486 689172620 722296326 434563154 1619655405 220131752 1586356401 618703430 571250324 2081180044 2057397612 1856455758 61177494 904511287 1264222733 2037090296 1107712199 1751548563 1346313567 586306227 1693907690 1259266103 1659418823 724222593 1292407299 SHAR_EOF fi # end of overwriting check if test -f 'primelist.h' then echo shar: will not over-write existing file "'primelist.h'" else cat << "SHAR_EOF" > 'primelist.h' #define PRIMELISTSIZE1 1000 #define STEP 1000 #define PRIMELISTSIZE2 1778 int prime_list[PRIMELISTSIZE2] = { 11863279, 11863259, 11863253, 11863249, 11863237, 11863213, 11863207, 11863183, 11863171, 11863153, 11863151, 11863133, 11863121, 11863109, 11863099, 11863073, 11863067, 11863057, 11863039, 11863037, 11863031, 11863021, 11862989, 11862979, 11862959, 11862919, 11862911, 11862881, 11862869, 11862857, 11862839, 11862803, 11862791, 11862761, 11862713, 11862703, 11862701, 11862679, 11862673, 11862661, 11862623, 11862611, 11862581, 11862577, 11862569, 11862563, 11862547, 11862527, 11862493, 11862469, 11862439, 11862391, 11862373, 11862343, 11862317, 11862313, 11862307, 11862293, 11862271, 11862269, 11862259, 11862241, 11862239, 11862233, 11862229, 11862223, 11862217, 11862203, 11862199, 11862167, 11862157, 11862083, 11862049, 11862031, 11862029, 11862013, 11862007, 11861987, 11861959, 11861953, 11861921, 11861917, 11861887, 11861879, 11861873, 11861849, 11861827, 11861819, 11861803, 11861791, 11861749, 11861713, 11861711, 11861701, 11861693, 11861687, 11861683, 11861671, 11861659, 11861639, 11861627, 11861611, 11861599, 11861581, 11861579, 11861573, 11861569, 11861539, 11861527, 11861467, 11861441, 11861429, 11861413, 11861411, 11861407, 11861401, 11861371, 11861363, 11861357, 11861351, 11861327, 11861303, 11861299, 11861293, 11861273, 11861237, 11861231, 11861221, 11861219, 11861197, 11861191, 11861167, 11861159, 11861141, 11861131, 11861107, 11861099, 11861093, 11861089, 11861081, 11861071, 11861033, 11861011, 11860993, 11860973, 11860963, 11860897, 11860867, 11860859, 11860837, 11860811, 11860789, 11860787, 11860777, 11860753, 11860741, 11860727, 11860703, 11860699, 11860697, 11860691, 11860687, 11860669, 11860661, 11860649, 11860643, 11860637, 11860627, 11860619, 11860613, 11860573, 11860547, 11860517, 11860489, 11860487, 11860483, 11860477, 11860469, 11860411, 11860397, 11860379, 11860327, 11860267, 11860243, 11860231, 11860223, 11860207, 11860171, 11860151, 11860133, 11860109, 11860103, 11860097, 11860087, 11860081, 11860049, 11860039, 11860031, 11860021, 11859997, 11859989, 11859979, 11859961, 11859929, 11859923, 11859917, 11859907, 11859901, 11859893, 11859889, 11859877, 11859853, 11859847, 11859833, 11859821, 11859817, 11859791, 11859751, 11859739, 11859719, 11859713, 11859707, 11859643, 11859611, 11859583, 11859571, 11859569, 11859563, 11859541, 11859539, 11859509, 11859503, 11859487, 11859481, 11859473, 11859461, 11859457, 11859451, 11859433, 11859427, 11859383, 11859377, 11859371, 11859359, 11859349, 11859311, 11859307, 11859293, 11859269, 11859247, 11859241, 11859233, 11859187, 11859179, 11859167, 11859163, 11859157, 11859151, 11859139, 11859137, 11859109, 11859101, 11859083, 11859079, 11859077, 11859073, 11859061, 11859049, 11859031, 11859017, 11858989, 11858971, 11858969, 11858953, 11858947, 11858921, 11858897, 11858893, 11858851, 11858839, 11858813, 11858807, 11858801, 11858783, 11858779, 11858747, 11858729, 11858723, 11858719, 11858701, 11858683, 11858659, 11858657, 11858629, 11858599, 11858597, 11858579, 11858573, 11858569, 11858557, 11858551, 11858543, 11858533, 11858479, 11858447, 11858443, 11858423, 11858387, 11858381, 11858377, 11858359, 11858323, 11858311, 11858291, 11858281, 11858279, 11858269, 11858267, 11858243, 11858227, 11858201, 11858177, 11858159, 11858149, 11858131, 11858101, 11858059, 11858057, 11858051, 11858039, 11858029, 11858023, 11858017, 11857999, 11857991, 11857969, 11857931, 11857913, 11857907, 11857889, 11857883, 11857877, 11857873, 11857837, 11857831, 11857819, 11857817, 11857801, 11857793, 11857787, 11857777, 11857763, 11857759, 11857753, 11857751, 11857711, 11857709, 11857697, 11857693, 11857667, 11857661, 11857613, 11857591, 11857589, 11857543, 11857529, 11857523, 11857519, 11857499, 11857493, 11857481, 11857477, 11857457, 11857453, 11857451, 11857423, 11857409, 11857393, 11857369, 11857367, 11857361, 11857333, 11857331, 11857327, 11857303, 11857291, 11857267, 11857249, 11857243, 11857217, 11857193, 11857151, 11857147, 11857127, 11857123, 11857099, 11857093, 11857091, 11857081, 11857073, 11857067, 11857061, 11857049, 11857039, 11857037, 11857033, 11857003, 11856979, 11856953, 11856947, 11856919, 11856899, 11856883, 11856877, 11856857, 11856841, 11856821, 11856811, 11856763, 11856731, 11856727, 11856709, 11856697, 11856673, 11856659, 11856653, 11856641, 11856629, 11856583, 11856553, 11856547, 11856541, 11856517, 11856511, 11856479, 11856473, 11856469, 11856461, 11856419, 11856409, 11856373, 11856371, 11856359, 11856343, 11856329, 11856311, 11856307, 11856287, 11856281, 11856269, 11856239, 11856223, 11856199, 11856193, 11856179, 11856161, 11856151, 11856139, 11856113, 11856107, 11856101, 11856071, 11856049, 11856023, 11856001, 11855999, 11855993, 11855989, 11855959, 11855933, 11855911, 11855903, 11855881, 11855869, 11855839, 11855827, 11855813, 11855773, 11855759, 11855747, 11855743, 11855737, 11855731, 11855713, 11855699, 11855689, 11855687, 11855653, 11855633, 11855593, 11855581, 11855567, 11855551, 11855549, 11855531, 11855521, 11855507, 11855491, 11855489, 11855413, 11855407, 11855387, 11855383, 11855381, 11855359, 11855357, 11855353, 11855351, 11855339, 11855329, 11855321, 11855309, 11855303, 11855269, 11855267, 11855231, 11855219, 11855213, 11855177, 11855159, 11855149, 11855147, 11855141, 11855111, 11855033, 11855023, 11855017, 11855003, 11854979, 11854961, 11854937, 11854919, 11854901, 11854897, 11854891, 11854883, 11854877, 11854873, 11854853, 11854847, 11854813, 11854793, 11854757, 11854709, 11854691, 11854681, 11854607, 11854603, 11854573, 11854571, 11854567, 11854529, 11854523, 11854519, 11854517, 11854489, 11854477, 11854463, 11854441, 11854439, 11854433, 11854429, 11854411, 11854399, 11854379, 11854363, 11854333, 11854331, 11854327, 11854279, 11854267, 11854261, 11854211, 11854169, 11854163, 11854159, 11854147, 11854061, 11854057, 11854019, 11854009, 11854001, 11853991, 11853979, 11853943, 11853931, 11853899, 11853893, 11853889, 11853883, 11853869, 11853857, 11853847, 11853839, 11853817, 11853791, 11853773, 11853761, 11853757, 11853731, 11853719, 11853689, 11853679, 11853649, 11853629, 11853617, 11853613, 11853601, 11853571, 11853557, 11853529, 11853463, 11853451, 11853449, 11853427, 11853421, 11853419, 11853383, 11853367, 11853329, 11853323, 11853319, 11853241, 11853227, 11853221, 11853217, 11853203, 11853181, 11853161, 11853157, 11853133, 11853031, 11853019, 11853001, 11852989, 11852969, 11852959, 11852957, 11852921, 11852917, 11852891, 11852879, 11852873, 11852857, 11852837, 11852833, 11852831, 11852809, 11852807, 11852803, 11852773, 11852767, 11852759, 11852741, 11852719, 11852717, 11852663, 11852657, 11852647, 11852641, 11852623, 11852611, 11852609, 11852591, 11852579, 11852573, 11852557, 11852539, 11852537, 11852531, 11852513, 11852473, 11852459, 11852437, 11852369, 11852359, 11852341, 11852339, 11852327, 11852311, 11852303, 11852297, 11852293, 11852287, 11852279, 11852273, 11852263, 11852251, 11852237, 11852221, 11852209, 11852177, 11852171, 11852161, 11852147, 11852129, 11852089, 11852083, 11852059, 11852053, 11852051, 11852017, 11851997, 11851967, 11851949, 11851933, 11851927, 11851919, 11851909, 11851891, 11851867, 11851859, 11851841, 11851813, 11851799, 11851793, 11851787, 11851759, 11851753, 11851681, 11851673, 11851639, 11851621, 11851613, 11851603, 11851597, 11851591, 11851589, 11851577, 11851559, 11851549, 11851547, 11851529, 11851523, 11851519, 11851493, 11851481, 11851451, 11851447, 11851409, 11851403, 11851373, 11851361, 11851351, 11851349, 11851313, 11851303, 11851291, 11851219, 11851201, 11851181, 11851157, 11851139, 11851127, 11851123, 11851109, 11851093, 11851067, 11851051, 11851033, 11850997, 11850991, 11850983, 11850961, 11850953, 11850947, 11850941, 11850931, 11850919, 11850913, 11850907, 11850899, 11850877, 11850859, 11850829, 11850803, 11850791, 11850749, 11850739, 11850731, 11850701, 11850677, 11850667, 11850611, 11850607, 11850557, 11850541, 11850529, 11850511, 11850481, 11850469, 11850427, 11850407, 11850379, 11850373, 11850367, 11850347, 11850341, 11850283, 11850269, 11850259, 11850247, 11850233, 11850191, 11850169, 11850161, 11850133, 11850127, 11850121, 11850109, 11850103, 11850077, 11850073, 11850061, 11850049, 11850031, 11850023, 11850019, 11850011, 11850001, 11849987, 11849947, 11849933, 11849923, 11849909, 11849891, 11849881, 11849869, 11849813, 11849801, 11849791, 11849771, 11849767, 11849759, 11849743, 11849741, 11849723, 11849713, 11849707, 11849701, 11849699, 11849693, 11849689, 11849683, 11849671, 11849659, 11849653, 11849641, 11849633, 11849599, 11849587, 11849573, 11849569, 11849567, 11849557, 11849507, 11849503, 11849491, 11849473, 11849443, 11849437, 11849417, 11849413, 11849401, 11849399, 11849363, 11849359, 11849339, 11849309, 11849297, 11849291, 11849273, 11849269, 11849251, 11849249, 11849239, 11849237, 11849231, 11849203, 11849183, 11849177, 11849137, 11849129, 11849111, 11849107, 11849093, 11849087, 11849077, 11849069, 11849059, 11849053, 11849039, 11849021, 11848961, 11848937, 11848931, 11848919, 11848909, 11848873, 11848867, 11848861, 11848853, 11848829, 11848801, 11848787, 11848757, 11848751, 11848741, 11848729, 11848721, 11848717, 11848709, 11848691, 11848679, 11848673, 11848663, 11848637, 11848619, 11848601, 11848591, 11848589, 11848553, 11848537, 11848531, 11848523, 11848513, 11848493, 11848489, 11848477, 11848469, 11848451, 11848433, 11848393, 11848379, 11848373, 11848363, 11848351, 11848339, 11848313, 11848297, 11848271, 11848253, 11848247, 11848241, 11848237, 11848219, 11848181, 11848159, 11848157, 11848147, 11848129, 11848117, 11848093, 11848069, 11848043, 11848027, 11848021, 11847977, 11847961, 11847949, 11847907, 11847883, 11847877, 11847853, 11847799, 11847791, 11847761, 11847749, 11847721, 11847701, 11847653, 11847643, 11847637, 11847629, 11847607, 11847593, 11847587, 11847581, 11847571, 11847569, 11847533, 11847529, 11847527, 11847523, 11847499, 11847497, 11847467, 11847463, 11847427, 11847397, 11847391, 11847373, 11847347, 11847343, 11847299, 11847281, 11847271, 11847263, 11847257, 11847233, 11830253, 11814059, 11797861, 11781907, 11765609, 11749061, 11732887, 11716381, 11699993, 11684149, 11667269, 11651309, 11634739, 11618281, 11602949, 11586493, 11570407, 11554009, 11538067, 11522363, 11505511, 11489431, 11472817, 11457029, 11441081, 11424467, 11408317, 11392207, 11375563, 11359163, 11343187, 11326423, 11310521, 11293801, 11278019, 11261317, 11245081, 11228929, 11212433, 11196127, 11179907, 11163877, 11148019, 11131741, 11114879, 11098937, 11082817, 11066729, 11050939, 11034811, 11018591, 11001821, 10985479, 10969193, 10953181, 10937063, 10921171, 10904617, 10888811, 10872223, 10856141, 10840157, 10824139, 10807817, 10791629, 10775437, 10758619, 10742231, 10726003, 10709957, 10693897, 10677893, 10662257, 10646191, 10629929, 10613903, 10597597, 10581289, 10565047, 10549031, 10533073, 10516343, 10500547, 10484483, 10468361, 10452551, 10436291, 10420139, 10403951, 10388171, 10371899, 10356113, 10339639, 10323751, 10307537, 10291129, 10274821, 10259153, 10243201, 10226893, 10210831, 10194593, 10178017, 10161439, 10145197, 10129397, 10113241, 10097149, 10080997, 10064671, 10048859, 10033087, 10017113, 10000987, 9984587, 9968117, 9951703, 9935437, 9919439, 9903083, 9887179, 9870853, 9854791, 9838123, 9821809, 9805793, 9790177, 9774007, 9757703, 9741377, 9725707, 9709379, 9693031, 9677027, 9661009, 9645131, 9628939, 9613127, 9596597, 9581053, 9565291, 9548909, 9533023, 9516809, 9500993, 9484931, 9468793, 9452269, 9436439, 9419909, 9403967, 9387671, 9371371, 9355471, 9339569, 9323669, 9307513, 9291539, 9275377, 9259109, 9243281, 9227321, 9211759, 9195671, 9179591, 9163981, 9147521, 9131957, 9115709, 9099589, 9083521, 9067631, 9051563, 9035357, 9019259, 9002717, 8986751, 8970821, 8954321, 8938301, 8922611, 8907077, 8890823, 8874659, 8858677, 8842541, 8826221, 8810147, 8794081, 8778299, 8762357, 8746637, 8730467, 8714551, 8698813, 8683159, 8666773, 8651117, 8635049, 8618861, 8603183, 8587127, 8571509, 8555317, 8539747, 8523787, 8508217, 8492329, 8476723, 8460533, 8444671, 8428289, 8412169, 8396111, 8380237, 8364329, 8348107, 8332547, 8316449, 8300603, 8284447, 8268907, 8252551, 8236729, 8220881, 8205163, 8189123, 8173427, 8157343, 8141753, 8125373, 8109887, 8093707, 8077463, 8061421, 8045669, 8029717, 8013701, 7997623, 7981837, 7965871, 7949731, 7934089, 7918123, 7902269, 7886297, 7870657, 7854667, 7839269, 7823279, 7807549, 7791857, 7775479, 7759813, 7743737, 7727477, 7711741, 7695707, 7680181, 7664311, 7648439, 7632511, 7616881, 7601081, 7585639, 7569469, 7553437, 7537903, 7521949, 7505863, 7489847, 7474381, 7457993, 7442333, 7426421, 7410857, 7394873, 7378687, 7363123, 7347521, 7331309, 7315673, 7299493, 7283833, 7268039, 7252381, 7236821, 7220921, 7204891, 7189333, 7173233, 7157429, 7141759, 7125413, 7109423, 7094023, 7078283, 7062529, 7046581, 7031281, 7015973, 6999823, 6984193, 6968123, 6952441, 6937027, 6921281, 6905713, 6889789, 6874223, 6858913, 6843289, 6827543, 6811877, 6796591, 6780271, 6764353, 6748897, 6733171, 6717493, 6702197, 6686663, 6670709, 6654877, 6639049, 6622999, 6607379, 6591811, 6576307, 6560669, 6545171, 6529403, 6513613, 6498169, 6482407, 6466487, 6451087, 6435179, 6419299, 6403739, 6388061, 6371879, 6355963, 6340043, 6324401, 6308737, 6293681, 6278309, 6262721, 6247243, 6231497, 6215617, 6199847, 6184289, 6168353, 6152869, 6137477, 6121681, 6105949, 6090569, 6074779, 6058963, 6043417, 6027277, 6011899, 5996687, 5981071, 5965021, 5949313, 5933713, 5918293, 5903251, 5887631, 5872549, 5856709, 5841373, 5825711, 5809861, 5794457, 5778673, 5762759, 5747227, 5731463, 5716021, 5700451, 5685413, 5669803, 5654083, 5638103, 5622731, 5607149, 5591459, 5575601, 5560327, 5544613, 5529079, 5513267, 5497711, 5481989, 5466217, 5450773, 5435533, 5420083, 5404433, 5388689, 5373607, 5357903, 5342327, 5327041, 5311511, 5295839, 5280367, 5264821, 5249411, 5234237, 5218721, 5203477, 5188123, 5172227, 5156839, 5141117, 5125871, 5110561, 5094841, 5079493, 5064119, 5048741, 5033053, 5017637, 5001923, 4986439, 4971409, 4956151, 4940843, 4925419, 4909859, 4894753, 4879937, 4864511, 4849081, 4833989, 4818287, 4803031, 4787569, 4771999, 4756649, 4740979, 4725673, 4710373, 4695079, 4679813, 4664641, 4649119, 4633693, 4618307, 4603031, 4587589, 4572383, 4556933, 4541819, 4526363, 4510687, 4495079, 4480183, 4464877, 4449617, 4434811, 4419773, 4404679, 4389223, 4373647, 4358659, 4342991, 4327621, 4312381, 4297201, 4281481, 4265903, 4250777, 4235411, 4220207, 4204903, 4189583, 4174601, 4159471, 4144267, 4128763, 4113127, 4097957, 4082909, 4067741, 4052383, 4037521, 4022587, 4007447, 3992159, 3976481, 3961229, 3945919, 3930611, 3915761, 3900509, 3885691, 3870299, 3854969, 3839923, 3824591, 3809959, 3794941, 3779443, 3764311, 3748879, 3733397, 3718837, 3703643, 3688757, 3673793, 3658769, 3643331, 3628057, 3613201, 3598691, 3583757, 3568259, 3553453, 3538027, 3522763, 3507587, 3492287, 3476783, 3461291, 3445801, 3431353, 3416267, 3401509, 3386563, 3371419, 3356389, 3341101, 3325991, 3311051, 3295883, 3280759, 3265861, 3250837, 3235819, 3220967, 3206311, 3191603, 3176821, 3162059, 3147101, 3131761, 3117031, 3102371, 3087239, 3072533, 3057647, 3042493, 3027347, 3012137, 2997509, 2982583, 2967647, 2952629, 2937611, 2922677, 2907871, 2892973, 2877899, 2862917, 2847893, 2833211, 2818451, 2804027, 2789327, 2774309, 2759621, 2744551, 2729563, 2714629, 2699903, 2685323, 2670533, 2655571, 2641063, 2626307, 2611597, 2596501, 2581697, 2567447, 2552657, 2537779, 2523163, 2508281, 2493767, 2478937, 2464009, 2449417, 2434681, 2419793, 2405069, 2390207, 2375921, 2361167, 2346473, 2331689, 2316593, 2301709, 2287249, 2272241, 2258083, 2243551, 2228797, 2214161, 2199623, 2184779, 2170153, 2155603, 2141149, 2126623, 2111933, 2097539, 2082917, 2068201, 2053789, 2038969, 2024417, 2010017, 1995977, 1981523, 1966619, 1952023, 1937657, 1923253, 1908923, 1894127, 1879949, 1865509, 1851503, 1836943, 1822703, 1808071, 1793927, 1779497, 1765187, 1750423, 1736281, 1721659, 1707253, 1692967, 1678429, 1664501, 1650059, 1635317, 1621421, 1606897, 1592881, 1578217, 1563967, 1549577, 1535459, 1520707, 1506497, 1492499, 1478467, 1464173, 1450139, 1435919, 1422163, 1407569, 1393663, 1379321, 1365281, 1351199, 1336997, 1322693, 1308719, 1294483, 1280453, 1266281, 1252469, 1238551, 1224193, 1210369, 1195771, 1181963, 1168231, 1154633, 1140563, 1126693, 1112483, 1099051, 1085023, 1071229, 1057279, 1043201, 1029179, 1015451, 1001821, 988061, 973901, 960293, 946133, 932357, 918677, 905071, 891239, 877469, 864013, 850247, 836477, 822883, 809423, 795737, 782191, 768671, 755309, 741509, 728003, 714563, 701341, 687679, 674363, 660893, 647557, 634031, 620363, 607127, 593899, 580733, 567659, 554167, 540863, 527441, 514561, 501217, 488347, 475283, 462493, 449161, 435889, 423257, 410341, 397223, 384407, 371573, 358471, 345769, 333019, 320317, 307873, 295291, 282427, 269947, 257501, 245083, 232523, 220327, 208049, 195787, 183683, 171673, 159499, 147551, 135649, 123853, 112223, 100547, 89203, 77719, 66587, 55589, 44633, 34019, 23741, 13877, 4733 }; SHAR_EOF fi # end of overwriting check if test -f 'primes.c' then echo shar: will not over-write existing file "'primes.c'" else cat << "SHAR_EOF" > 'primes.c' #include #include #include "primes.h" #include "primelist.h" #define YES 1 #define NO 0 #define NPRIMES 1000 int primes[NPRIMES]; #ifdef __STDC__ int init_prime(void) #else int init_prime() #endif { int i, j, obtained = 0, isprime; for(i=3; i < MINPRIME; i += 2) { isprime = YES; for(j=0; j < obtained; j++) if(i%primes[j] == 0) { isprime = NO; break; } else if(primes[j]*primes[j] > i) break; if(isprime == YES) { primes[obtained] = i; obtained++; } } return obtained; } #ifdef __STDC__ int getprime(int need, int *prime_array, int offset) #else int getprime(need, prime_array, offset) int need, *prime_array,offset; #endif { static int initiallized = NO, num_prime; int largest; int i, isprime, index, obtained = 0; if(need <= 0) { fprintf(stderr,"WARNING: Number of primes needed = %d < 1; None returned\n" , need); return 0; } if(offset < 0) { fprintf(stderr,"WARNING: Offset of prime = %d < 1; None returned\n" , offset); return 0; } if(offset+need-1 MAXPRIMEOFFSET) { fprintf(stderr,"WARNING: generator has branched maximum number of times;\nindependence of generators no longer guaranteed"); offset = offset % MAXPRIMEOFFSET; } if(offset < PRIMELISTSIZE1) /* search table for previous prime */ { largest = prime_list[offset] + 2; offset = 0; } else { index = (int) ((offset-PRIMELISTSIZE1+1)/STEP) + PRIMELISTSIZE1 - 1; largest = prime_list[index] + 2; offset -= (index-PRIMELISTSIZE1+1)*STEP + PRIMELISTSIZE1 - 1; } while(need > obtained && largest > MINPRIME) { isprime = YES; largest -= 2; for(i=0; i 0) offset--; else if(isprime == YES) prime_array[obtained++] = largest; } if(need > obtained) fprintf(stderr,"ERROR: Insufficient number of primes: needed %d, obtained %d\n", need, obtained); return obtained; } #if 0 main() { int newprimes[1500], np, i; np = getprime(2,newprimes,0); np = getprime(2,newprimes+2,9); np = getprime(2,newprimes+4,12); for(i=0; i<6; i++) printf("%d. %d \n", i, newprimes[i]); /*while(np--) printf("New primes: %d\n", newprimes[np]); np = getprime(5,newprimes); printf("%d new primes obtained ...\n", np); while(np--) printf("New primes: %d\n", newprimes[np]);*/ } #endif SHAR_EOF fi # end of overwriting check if test -f 'primes.h' then echo shar: will not over-write existing file "'primes.h'" else cat << "SHAR_EOF" > 'primes.h' #ifndef _primes_h_ #define _primes_h_ #ifndef ANSI_ARGS #ifdef __STDC__ #define ANSI_ARGS(args) args #else #define ANSI_ARGS(args) () #endif #endif int getprime ANSI_ARGS((int need, int *prime_array, int offset)); #define MAXPRIME 11863285 /* sqrt(2)*2^23 + 2 */ #define MINPRIME 3444 /* sqrt(MAXPRIME) */ #define MAXPRIMEOFFSET 779156 #endif SHAR_EOF fi # end of overwriting check cd .. if test ! -d 'lcg64' then mkdir 'lcg64' fi cd 'lcg64' if test -f 'Makefile' then echo shar: will not over-write existing file "'Makefile'" else cat << "SHAR_EOF" > 'Makefile' ############################################################################ # # Typing the command below => results in the following being created # make => Fortran and C libraries for the generator, # Timing executibles. # make lcg64 => Library for 64 bit Linear Congruential Generator # # Object files created during the compilation process can be deleted finally # by typing # make clean ############################################################################ SHELL = /bin/sh include ../../make.CHOICES LIBDIR = ../../$(LIB_REL_DIR) SRCDIR = .. CHKDIR = ../.. include $(SRCDIR)/make.$(PLAT) all : lcg64 timesprng checksprng #--------------------------------------------------------------------------- # Construct Library #--------------------------------------------------------------------------- SPRNG_COMMON_DEPEND = $(SRCDIR)/fwrap_mpi.o $(SRCDIR)/cputime.o \ $(SRCDIR)/makeseed.o $(SRCDIR)/simple_mpi.o \ $(SRCDIR)/memory.o $(SRCDIR)/communicate.o $(SRCDIR)/checkid.o $(SRCDIR)/store.o lcg64 : (cd ..; $(MAKE) sprng_common) $(MAKE) $(LIBDIR)/liblcg64.a $(LIBDIR)/liblcg64.a : lcg64.o primes.o $(SPRNG_COMMON_DEPEND) $(AR) $(ARFLAGS) $(LIBDIR)/liblcg64.a lcg64.o primes.o \ $(SPRNG_COMMON_DEPEND) $(RANLIB) $(LIBDIR)/liblcg64.a lcg64.o : $(SRCDIR)/interface.h lcg64.c $(SRCDIR)/memory.h primes.h $(SRCDIR)/multiply.h $(SRCDIR)/store.h $(SRCDIR)/fwrap_.h $(CC) -c $(CFLAGS) $(FFXN) $(INLINEOPT) -I$(SRCDIR) lcg64.c primes.o : primes.h primes.c $(CC) -c $(CFLAGS) primes.c -I$(SRCDIR) #--------------------------------------------------------------------------- # Time the generator #--------------------------------------------------------------------------- timesprng : (cd ..; $(MAKE) timesprng_exec TIMESPRNG_LIB=lcg64) #--------------------------------------------------------------------------- # Check portability of generator #--------------------------------------------------------------------------- checksprng : (cd ..; $(MAKE) checksprng_exec CHECKSPRNG_LIB=lcg64) cp lcg64.data $(CHKDIR)/. #--------------------------------------------------------------------------- .F.f : @if [ -f $*.i ] ; then \ rm $*.i ;\ fi $(CPP) $*.F @if [ -f $*.i ] ; then \ mv $*.i $*.f ;\ fi #--------------------------------------------------------------------------- #--------------------------------------------------------------------------- clean : rm -f *.o *.i realclean : rm -f *.o *.f *~ *.i core a.out .SUFFIXES : .SUFFIXES : .f .F SHAR_EOF fi # end of overwriting check if test -f 'lcg64.c' then echo shar: will not over-write existing file "'lcg64.c'" else cat << "SHAR_EOF" > 'lcg64.c' /*************************************************************************/ /*************************************************************************/ /* Parallel 64-bit Linear Congruential Generator */ /* */ /* Author: Ashok Srinivasan, */ /* NCSA, University of Illinois, Urbana-Champaign */ /* E-Mail: ashoks@ncsa.uiuc.edu */ /* */ /* Note: The modulus is 2^64 */ /* */ /* Disclaimer: NCSA expressly disclaims any and all warranties, expressed*/ /* or implied, concerning the enclosed software. The intent in sharing */ /* this software is to promote the productive interchange of ideas */ /* throughout the research community. All software is furnished on an */ /* "as is" basis. No further updates to this software should be */ /* expected. Although this may occur, no commitment exists. The authors */ /* certainly invite your comments as well as the reporting of any bugs. */ /* NCSA cannot commit that any or all bugs will be fixed. */ /*************************************************************************/ /*************************************************************************/ /* This is version 1.0, created 20 May 1998 */ #include #include #include #include #define NDEBUG #include #include "memory.h" #include "interface.h" #include "primes.h" #include "store.h" #define VERSION "00" /*** Name for Generator ***/ #define GENTYPE VERSION "64 bit Linear Congruential Generator with Prime Addend" int MAX_STREAMS = (146138719); /*** Maximum number of independent streams ***/ #define NPARAMS 3 /*** number of valid parameters ***/ #if LONG_MAX > 2147483647L #if LONG_MAX > 35184372088831L #if LONG_MAX >= 9223372036854775807L #define LONG_SPRNG #define LONG64 long /* 64 bit long */ #define store_long64 store_long #define store_long64array store_longarray #define load_long64 load_long #define load_long64array load_longarray #endif #endif #endif #if !defined(LONG_SPRNG) && defined(_LONG_LONG) #define LONG64 long long #define store_long64 store_longlong #define store_long64array store_longlongarray #define load_long64 load_longlong #define load_long64array load_longlongarray #endif unsigned int PARAMLIST[NPARAMS][2] = {{0x87b0b0fdU, 0x27bb2ee6U}, {0xe78b6955U,0x2c6fe96eU}, {0x31a53f85U,0x369dea0fU}}; /*** Change this to the type of generator you are implementing ***/ struct rngen { char *gentype; int stream_number; int nstreams; int init_seed; int parameter; int narrays; int *array_sizes; int **arrays; int spawn_offset; /*** declare other variables here ***/ unsigned int prime; #ifdef LONG64 /* 64 bit integer types */ unsigned LONG64 state, multiplier; #else /* No 64 bit type available, so use array of floats */ double state[3], multiplier[3];/* simulate 64 bit arithmetic */ #endif }; /*************************************************************************/ /* You should not need to look at the next few lines! */ #define INIT_SEED1 0x2bc6ffffU #define INIT_SEED0 0x8cfe166dU #define TWO_M22 2.384185791015625e-07 /* 2^(-22) */ #define TWO_P22 4194304 /* 2^(22) */ #define TWO_M20 9.5367431640625e-07 /* 2^(-20) */ #define TWO_P20 1048576 /* 2^(20) */ #define TWO_M42 2.273736754432321e-13 /* 2^(-42) */ #define TWO_M64 5.4210108624275222e-20 /* 2^(-64) */ /* */ /************************************************************************/ int NGENS=0; /* number of random streams in current process */ /* Initialize random number stream */ #ifdef __STDC__ int *init_rng( int gennum, int total_gen, int seed, int param) #else int *init_rng(gennum,total_gen,seed,param) int gennum,param,seed,total_gen; #endif { /* gives back one stream (node gennum) with updated spawning */ /* info; should be called total_gen times, with different value */ /* of gennum in [0,total_gen) each call */ struct rngen *genptr; int i; double tempdbl; if (total_gen <= 0) /* Is total_gen valid ? */ { total_gen = 1; fprintf(stderr,"WARNING - init_rng: Total_gen <= 0. Default value of 1 used for total_gen\n"); } if (gennum >= MAX_STREAMS) /* check if gen_num is valid */ fprintf(stderr,"WARNING - init_rng: gennum: %d > maximum number of independent streams: %d\n\tIndependence of streams cannot be guranteed.\n", gennum, MAX_STREAMS); if (gennum < 0 || gennum >= total_gen) /* check if gen_num is valid */ { fprintf(stderr,"ERROR - init_rng: gennum %d out of range [%d,%d).\n", gennum, 0, total_gen); return (int *) NULL; } if (param < 0 || param >= NPARAMS) /* check if parameter is valid */ { fprintf(stderr,"WARNING - init_rng: parameter not valid. Using Default parameter.\n"); param = 0; } genptr = (struct rngen *) mymalloc(1*sizeof(struct rngen)); if(genptr == NULL) /* check if memory allocated for data structure */ return NULL; /* Initiallize data structure variables */ genptr->gentype = GENTYPE; genptr->stream_number = gennum; genptr->nstreams = total_gen; genptr->init_seed = seed & 0x7fffffff; /* Only 31 LSB of seed considered */ genptr->parameter = param; genptr->spawn_offset = total_gen; /*** Change the next line depending on your generators data needs ***/ genptr->narrays = 0; /* number of arrays needed by your generator */ if(genptr->narrays > 0) { genptr->array_sizes = (int *) mymalloc(genptr->narrays*sizeof(int)); genptr->arrays = (int **) mymalloc(genptr->narrays*sizeof(int *)); if(genptr->array_sizes == NULL || genptr->arrays == NULL) return NULL; } else { genptr->array_sizes = NULL; genptr->arrays = NULL; } /*** Change the next line depending on your generators data needs ***/ /* initiallize ...array_sizes to the sizes of the arrays */ for(i=0; inarrays; i++) { genptr->arrays[i] = (int *) mymalloc(genptr->array_sizes[i]*sizeof(int)); if(genptr->arrays[i] == NULL) /* check if memory allocated for data structure */ return NULL; } /*** Add initialization statements for your data in the arrays and other variables you have defined ***/ getprime(1,&genptr->prime,gennum); #ifdef LONG64 genptr->multiplier = ((unsigned LONG64) PARAMLIST[param][1])<<32 | ((unsigned LONG64) PARAMLIST[param][0]); genptr->state = ( ((unsigned LONG64) INIT_SEED1)<<32 | INIT_SEED0) ^(((unsigned LONG64) seed<<33)|gennum); #else genptr->multiplier[0] = (double) (PARAMLIST[param][0]&0x3fffff); genptr->multiplier[1] = (double) (PARAMLIST[param][0]>>22 | (PARAMLIST[param][1]&0xfff)<<10); genptr->multiplier[2] = (double) (PARAMLIST[param][1]>>12); genptr->state[0] = (double) ((INIT_SEED0^gennum)&0x3fffff); genptr->state[1] = (double) ((INIT_SEED0^gennum)>>22 | ((INIT_SEED1 ^ (unsigned)seed<<1)&0xfff)<<10); genptr->state[2] = (double) ((INIT_SEED1 ^ (unsigned)seed<<1)>>12); #endif for(i=0; i<127*genptr->stream_number; i++) tempdbl = get_rn_dbl((int *) genptr); NGENS++; /* NGENS = # of streams */ return (int *) genptr; } #ifdef LONG64 #define advance_state(genptr) genptr->state = genptr->state*genptr->multiplier + genptr->prime; #else #define advance_state(genptr) {double t0, t1, t2, t3, st0, st1, st2;\ t0 = genptr->state[0]*genptr->multiplier[0] + genptr->prime;\ t1 = (double) (int) (t0*TWO_M22); \ st0 = t0 - TWO_P22*t1; \ assert( (int) st0 == st0); \ t1 += genptr->state[1]*genptr->multiplier[0] + \ genptr->state[0]*genptr->multiplier[1]; \ t2 = (double) (int) (t1*TWO_M22); \ st1 = t1 - TWO_P22*t2; \ assert( (int) st1 == st1); \ t2 += genptr->state[2]*genptr->multiplier[0] + \ genptr->state[1]*genptr->multiplier[1] + \ genptr->state[0]*genptr->multiplier[2];\ t3 = (double) (int) (t2*TWO_M20); \ st2 = t2 - TWO_P20*t3; \ assert( (int) st2 == st2); \ genptr->state[0] = st0; \ genptr->state[1] = st1; \ genptr->state[2] = st2;} #endif /* Returns a double precision random number */ #ifdef __STDC__ double get_rn_dbl(int *igenptr) #else double get_rn_dbl(igenptr) int *igenptr; #endif { struct rngen *genptr = (struct rngen *) igenptr; #ifdef LONG64 #ifdef _LONG_LONG #define EXPO 0x3ff0000000000000ULL #else #define EXPO 0x3ff0000000000000UL #endif static double dtemp[1] = {0.0}; advance_state(genptr); /* next state in sequence */ #if defined(CONVEX) || defined(O2K) || defined(SGI) || defined(GENERIC) *((unsigned LONG64 *) dtemp) = (genptr->state>>12) | EXPO; return *dtemp - (double) 1.0; #else return genptr->state*TWO_M64; #endif #else /* 32 bit machine */ #define EXPO 0x3ff00000 #ifdef LittleEndian #define MSB 1 #else #define MSB 0 #endif #define LSB (1-MSB) double ans; unsigned int ist0, ist1, ist2; static double temp[1] = {0.0}; advance_state(genptr); /* next state in sequence */ ist0 = genptr->state[0]; ist1 = genptr->state[1]; ist2 = genptr->state[2]; #if defined(HP) || defined(SUN) || defined(SOLARIS) || defined(GENERIC) /*IEEE mantissa is 52 bits. */ ((unsigned int *)temp)[LSB] = ist1<<10 | ist0>>12; ((unsigned int *)temp)[MSB] = EXPO | ist2; return *temp - (double) 1.0; #else return genptr->state[2]*TWO_M20 + genptr->state[1]*TWO_M42 + genptr->state[0]*TWO_M64; #endif #endif } /* Return a random integer */ #ifdef __STDC__ int get_rn_int(int *igenptr) #else int get_rn_int(igenptr) int *igenptr; #endif { #ifdef LONG64 struct rngen *genptr = (struct rngen *) igenptr; advance_state(genptr); /* next state in sequence */ return genptr->state>>33; #else return (int) (get_rn_dbl(igenptr)*0x80000000U); #endif } /* Return a single precision random number */ #ifdef __STDC__ float get_rn_flt(int *igenptr) #else float get_rn_flt(igenptr) int *igenptr; #endif { /* If you have a more efficient way of computing the random integer, then please replace the statement below with your scheme. */ return (float) get_rn_dbl(igenptr); } /*************************************************************************/ /*************************************************************************/ /* SPAWN_RNG: spawns new generators */ /*************************************************************************/ /*************************************************************************/ #ifdef __STDC__ int spawn_rng(int *igenptr, int nspawned, int ***newgens, int checkid) #else int spawn_rng(igenptr,nspawned, newgens, checkid) int *igenptr,nspawned, ***newgens, checkid; #endif { struct rngen **genptr, *tempptr = (struct rngen *) igenptr; int i, j; if (nspawned <= 0) /* is nspawned valid ? */ { nspawned = 1; fprintf(stderr,"WARNING - spawn_rng: nspawned <= 0. Default value of 1 used for nspawned\n"); } genptr = (struct rngen **) mymalloc(nspawned*sizeof(struct rngen *)); if(genptr == NULL) /* allocate memory for pointers to structures */ { *newgens = NULL; return 0; } for(i=0; istream_number + tempptr->spawn_offset*(i+1); if(gennum > MAX_STREAMS) /* change seed to avoid repeating sequence */ seed = (tempptr->init_seed)^gennum; else seed = tempptr->init_seed; /* Initialize a stream. This stream has incorrect spawning information. But we will correct it below. */ genptr[i] = (struct rngen *) init_rng(gennum, gennum+1, seed, tempptr->parameter); if(genptr[i] == NULL) /* Was generator initiallized? */ { nspawned = i; break; } genptr[i]->spawn_offset = (nspawned+1)*tempptr->spawn_offset; } tempptr->spawn_offset *= (nspawned+1); *newgens = (int **) genptr; if(checkid != 0) for(i=0; inarrays; i++) free(q->arrays[i]); if(q->narrays > 0) { free(q->array_sizes); free(q->arrays); } free(q); NGENS--; return NGENS; } #ifdef __STDC__ int pack_rng( int *genptr, char **buffer) #else int pack_rng(genptr,buffer) int *genptr; char **buffer; #endif { unsigned char *p, *initp; int size, i; unsigned int temp, m[2]; struct rngen *q; q = (struct rngen *) genptr; size = 48 + strlen(q->gentype)+1; initp = p = (unsigned char *) mymalloc(size); /* allocate memory */ /* The new load/store routines make using sizeof unnecessary. Infact, */ /* using sizeof could be erroneous. */ if(p == NULL) { *buffer = NULL; return 0; } strcpy((char *)p,q->gentype); p += strlen(q->gentype)+1; p += store_int(q->stream_number,4,p); p += store_int(q->nstreams,4,p); p += store_int(q->init_seed,4,p); p += store_int(q->parameter,4,p); p += store_int(q->narrays,4,p); p += store_int(q->spawn_offset,4,p); p += store_int(q->prime,4,p); #ifdef LONG64 /* 64 bit integer types */ p += store_long64(q->state,8,p); p += store_long64(q->multiplier,8,p); #else /* No 64 bit type available */ m[0] = q->state[2]; temp = q->state[1];m[0]=(m[0]<<12)|(temp>>10); m[1] = q->state[1]; temp = q->state[0];m[1]=(m[1]<<22)|(temp); p += store_intarray(m,2,4,p); m[0] = q->multiplier[2]; temp = q->multiplier[1];m[0]=(m[0]<<12)|(temp>>10); m[1] = q->multiplier[1]; temp = q->multiplier[0];m[1]=(m[1]<<22)|(temp); p += store_intarray(m,2,4,p); #endif *buffer = (char *) initp; assert(p-initp == size); return p-initp; } #ifdef __STDC__ int *unpack_rng( char *packed) #else int *unpack_rng(packed) char *packed; #endif { struct rngen *q; unsigned int i, m[2]; unsigned char *p; p = (unsigned char *) packed; q = (struct rngen *) mymalloc(sizeof(struct rngen)); if(q == NULL) return NULL; if(strcmp((char *)p,GENTYPE) != 0) { fprintf(stderr,"ERROR: Unpacked ' %.24s ' instead of ' %s '\n", p, GENTYPE); return NULL; } else q->gentype = GENTYPE; p += strlen(q->gentype)+1; p += load_int(p,4,(unsigned int *)&q->stream_number); p += load_int(p,4,(unsigned int *)&q->nstreams); p += load_int(p,4,(unsigned int *)&q->init_seed); p += load_int(p,4,(unsigned int *)&q->parameter); p += load_int(p,4,(unsigned int *)&q->narrays); p += load_int(p,4,(unsigned int *)&q->spawn_offset); p += load_int(p,4,&q->prime); #ifdef LONG64 /* 64 bit integer types */ p += load_long64(p,8,&q->state); p += load_long64(p,8,&q->multiplier); #else /* No 64 bit type available */ p += load_intarray(p,2,4,m); q->state[0] = (double) (m[1]&0x3fffff); q->state[1] = (double) ((m[1]>>22) | (m[0]&0xfff)<<10); q->state[2] = (double) (m[0]>>12); p += load_intarray(p,2,4,m); q->multiplier[0] = (double) (m[1]&0x3fffff); q->multiplier[1] = (double) ((m[1]>>22) | (m[0]&0xfff)<<10); q->multiplier[2] = (double) (m[0]>>12); #endif q->array_sizes = NULL; q->arrays = NULL; NGENS++; return (int *) q; } #ifdef __STDC__ int get_seed_rng(int *gen) #else int get_seed_rng(gen) int *gen; #endif { return ((struct rngen *) gen)->init_seed; } #ifdef __STDC__ int print_rng( int *igen) #else int print_rng(igen) int *igen; #endif { struct rngen *gen; printf("\n%s\n", GENTYPE+2); gen = (struct rngen *) igen; printf("\n \tseed = %d, stream_number = %d\tparameter = %d\n\n", gen->init_seed, gen->stream_number, gen->parameter); return 1; } #include "../simple_.h" #include "../fwrap_.h" SHAR_EOF fi # end of overwriting check if test -f 'lcg64.data' then echo shar: will not over-write existing file "'lcg64.data'" else cat << "SHAR_EOF" > 'lcg64.data' 129257823 891625490 2005567908 1662548072 658225048 124619346 894161477 1278593180 230042179 1299920542 25504010 2092833572 1810453935 1865573144 1186292018 1533579696 1414683338 956213689 1950757451 766099278 486644064 1902921053 602854549 1096530764 763803282 337705479 1633832953 1234614795 1031978849 1954375998 1812121703 725139917 1622872195 1438657108 2101478192 1393837292 783441859 2070404873 401290008 1667332503 71887285 598995019 333703371 1910585626 2065115544 14527352 985112366 614335509 1328776850 654429097 2010879945 1804161259 1943956955 1041319607 153084571 1432948984 122398495 318575638 1634767737 633110234 1361694648 254964447 593727778 259547807 136835259 1238497692 1680402580 1178530723 135540683 148668461 45539723 454720872 1333077279 233548691 1675183267 853550146 889103151 855851873 1499272128 689751706 1174997923 589946300 678833034 391644013 1967161001 714521683 1125390432 985047121 1948907334 175911730 473227105 203632877 1366405529 172372195 682805398 682476780 1214551386 1719022232 752622383 898669619 158227376 1297469978 1322772351 469615914 591638004 548392693 1882351983 276069981 177157087 2111922002 1312418998 1650432294 938162384 2112406631 1492067256 836051639 142442036 945693969 1567865357 1928211757 688594572 372475856 1141999915 302855089 873230816 580561691 1709595853 1053898842 509063076 501404796 1419007427 874818845 2073464797 409855786 943281468 2055207853 1990707150 1262385810 1637440746 395094880 1290602018 1728468891 1524569476 1580287313 1415855590 2054976780 1103978024 1362268726 348869292 172393262 108002188 1660730502 1777018323 1076755936 675683105 258733167 1329818884 2054914296 104888196 1523224475 858590009 2012795577 1976115807 421904641 1534086210 441376090 1742003076 526491187 751577402 1350476989 1434340076 281936034 1276586748 1260580579 1798567614 1909499649 1938242776 1926971766 2042298621 261579250 1129640426 1287845806 16687454 727996663 2068604139 1844503326 1123075168 689991990 118371670 1809499605 1458781281 567930064 989205512 273465902 1172772292 764224367 336507125 437741416 275145517 1983093934 31319566 200276497 2068121658 2051527559 2038606076 1944548393 796074762 1247898757 687912044 429233861 821444816 496923412 1142066890 687925556 492470004 1390722742 1521879455 1974579434 805822051 1865482055 1999715009 1212160181 30495914 1156556123 247240124 1671059930 1761677390 784254254 1264090193 15876475 702177847 615596408 2076640049 1727873285 624331463 1788356519 94907575 112361542 3518875 220614191 459932779 1536159717 1893010519 558492661 414898191 48002673 1531744898 1890561806 794765385 1578613141 1157318663 1805979904 957477894 1277212555 732366970 383778117 2046915754 846563091 12862552 300572680 1781791383 948916546 573222498 244588685 2091545582 721158395 1997936507 329432191 2061638348 381161203 2002322982 652311919 1653197653 2002238336 1154702735 2093235107 1887635645 188871677 1545698905 1547545438 965219800 717519158 1091393043 496483143 1733183873 1631014390 1580705150 557808141 1157701699 1793840436 945209894 1056606742 144746250 1032663450 347966789 442945097 1649623235 1409559766 1419371903 299580056 1398326113 321368907 1055573592 110627695 948624774 599127409 1191440478 992439540 381913597 712717761 1016012733 1907873678 1281608554 666716673 1054021951 720484978 1954873697 1364344715 1950020389 76844302 108494593 1722345683 1529366861 1958377610 1434730126 1480714672 1136312807 213589410 1529386925 816484618 442955517 1543716915 1931114273 1740154827 497466577 1289029421 1133745647 318911414 236658364 878938378 1576461944 1875338198 1361969982 852214799 332600146 1706114067 799783358 303806135 1310518637 1089416597 2081846362 359355729 956109779 1460719220 1092427667 851128826 1901134793 808554401 690640853 1611179491 1184400890 1921566005 76539758 2115833205 1256013245 1944222171 1056074136 1969820439 646398016 1150871269 1873519197 2084358497 1206439736 226237162 311064203 1956503379 210976685 150327498 979281982 1406765077 389585470 786069589 879638206 2092447982 1903631636 1956830395 114994528 1616965676 34272449 1617008291 1108920 1079529446 340466583 1532846380 1844866907 1362333710 860351975 2062094538 446824465 780349989 1629183125 1773637149 1837956051 1664768347 1934291463 1926141985 1211168717 1685016267 719465066 754276759 1450206325 1818180027 191119363 1273592779 1678307160 651564516 1702128881 1926752799 626892701 1935765857 110211580 1419217059 538784109 1119988430 584038367 1785673102 1280269736 410553964 1275094742 1556271192 926061176 1826589813 1355447466 652320378 2042838840 859727690 239427917 1313058938 880394875 1970007904 821640931 1839839824 1847433512 26250491 1273738426 1137068021 1558389971 21809782 833665888 1435407902 140594975 316406044 510973724 158460778 1893365660 295618631 467025898 1438533597 1961412185 1394192989 1427942212 1170183857 1199909587 1504242532 1569618569 785440264 10487382 1684030713 888687985 765809585 624376243 1123368299 740379876 681463557 827084204 1799076781 2116427765 94606483 2024613680 1819071749 39334281 284714479 1065364875 521388149 452494594 1261048129 331081934 389767227 962985563 846025227 1320298203 688730943 351575530 280450554 1535545708 1938402605 111921332 399766070 1563707466 1233213370 0.455225 0.079967 0.748381 0.215786 0.910184 0.428336 0.157316 0.320319 0.409338 0.512198 0.588366 0.708398 0.750151 0.694167 0.643218 0.255542 0.479000 0.505297 0.364877 0.387817 0.475706 0.935013 0.237495 0.249721 0.810123 0.667207 0.012192 0.322538 0.228260 0.752865 0.004237 0.304370 0.754472 0.702557 0.761873 0.515189 0.759003 0.505866 0.408840 0.940986 0.238939 0.288976 0.300359 0.723310 0.920419 0.373671 0.220838 0.855024 0.042578 0.895455 0.964293 0.336728 0.360173 0.995066 0.141308 0.469918 0.135660 0.082116 0.598908 0.634299 0.026449 0.714151 0.316505 0.566174 0.997307 0.435285 0.746637 0.944634 0.306264 0.730702 0.129533 0.100941 0.898388 0.804443 0.682639 0.600860 0.298385 0.275416 0.757547 0.582538 0.783923 0.122289 0.824916 0.152854 0.420479 0.619841 0.200897 0.691856 0.675862 0.506947 0.455104 0.354301 0.507396 0.384339 0.058742 0.988473 0.969056 0.749606 0.657011 0.336074 0.127946 0.862464 0.234199 0.823102 0.772872 0.830992 0.554980 0.918542 0.420033 0.344743 0.054089 0.008348 0.028742 0.886401 0.477178 0.316220 0.163708 0.612531 0.895906 0.683413 0.460473 0.586679 0.814247 0.326959 0.302302 0.536380 0.395558 0.860012 0.591694 0.176303 0.441974 0.777927 0.707359 0.180739 0.684087 0.088002 0.519473 0.268093 0.642157 0.709338 0.409567 0.823416 0.139960 0.388231 0.286558 0.683739 0.213427 0.445430 0.675677 0.122832 0.161995 0.660844 0.136095 0.269496 0.895525 0.364785 0.156410 0.264598 0.126006 0.628933 0.090423 0.183311 0.622735 0.835178 0.306653 0.658864 0.785728 0.913812 0.609613 0.960755 0.612193 0.740215 0.240203 0.654766 0.152113 0.517021 0.678402 0.865570 0.916006 0.795418 0.812269 0.182046 0.805353 0.436554 0.520094 0.069787 0.302607 0.470357 0.462166 0.231206 0.662395 0.284536 0.747455 0.835672 0.154413 0.240606 0.810142 0.000085 0.768236 0.406584 0.337027 0.613901 0.486109 0.288136 0.896952 0.307902 0.655531 0.936628 0.928719 0.118857 0.296554 0.468970 0.512654 0.766620 0.598849 0.873412 0.723375 0.530088 0.995609 0.168419 0.953189 0.015388 0.770560 0.774447 0.008312 0.767847 0.002579 0.200359 0.303203 0.164837 0.493043 0.498037 0.801421 0.785809 0.428801 0.007720 0.289841 0.083099 0.897118 0.490998 0.043746 0.201505 0.939712 0.973013 0.409731 0.159009 0.368424 0.374156 0.193526 0.716150 0.167692 0.951915 0.053490 0.064084 0.126993 0.132739 0.888579 0.200786 0.009016 0.776429 0.942439 0.391924 0.778024 0.954402 0.529394 0.239604 0.792979 0.647764 0.026748 0.928210 0.331047 0.430429 0.918725 0.156518 0.125471 0.757503 0.642652 0.936254 0.443732 0.688117 0.118695 0.062730 0.657491 0.696355 0.574609 0.898837 0.032425 0.892044 0.686638 0.313268 0.639556 0.502897 0.339832 0.465378 0.320842 0.481047 0.420527 0.602728 0.025429 0.911959 0.290786 0.138755 0.475345 0.852606 0.111420 0.993839 0.860448 0.756602 0.380737 0.853221 0.787468 0.246255 0.596422 0.746086 0.703416 0.122485 0.526611 0.763378 0.780629 0.625124 0.940579 0.229206 0.100458 0.462176 0.225591 0.102828 0.584312 0.363838 0.607936 0.330197 0.657131 0.672181 0.077894 0.032113 0.756237 0.227716 0.889545 0.968221 0.879440 0.708642 0.047614 0.198943 0.933275 0.539141 0.810523 0.992561 0.895638 0.987839 0.757089 0.801847 0.215410 0.108857 0.375032 0.209746 0.078317 0.491806 0.571366 0.840198 0.259498 0.079371 0.598934 0.388358 0.086099 0.030840 0.936060 0.778984 0.468380 0.089915 0.404823 0.096175 0.584654 0.163239 0.588900 0.891046 0.552518 0.731305 0.172991 0.341051 0.106398 0.663304 0.955587 0.137886 0.917886 0.626026 0.266348 0.341122 0.002054 0.011696 0.647546 0.661628 0.050183 0.672457 0.712829 0.871742 0.224104 0.391876 0.108316 0.043104 0.325861 0.687426 0.466486 0.444671 0.971064 0.590729 0.356228 0.634760 0.035672 0.759006 0.976744 0.860522 0.979079 0.101453 0.259101 0.880052 0.250400 0.317789 0.212127 0.086415 0.244096 0.156023 0.655292 0.872473 0.525288 0.440411 0.359248 0.936539 0.315726 0.738022 0.617407 0.922937 0.300466 0.468480 0.882193 0.988905 0.542405 0.890949 0.284912 0.909533 0.914480 0.587261 0.568910 0.682174 0.231275 0.928959 0.267528 0.109306 0.142535 0.272155 0.723731 0.521475 0.071409 0.463376 0.615992 0.337308 0.663750 0.579954 0.101732 0.980084 0.350531 0.725107 0.340771 0.906864 0.540437 0.740280 0.704410 0.476119 0.053374 0.855223 0.022061 0.357803 0.266481 0.105625 0.393226 0.939219 0.576909 0.496003 0.726220 0.309605 0.038905 0.181238 0.368034 0.902428 0.425594 0.323026 0.117797 0.203873 0.469282 0.943698 0.727744 0.916664 0.476424 0.992211 0.510208 0.146139 0.134591 0.673133 0.965441 0.747092 0.619649 0.767244 0.51639715233223 0.33699065321308 0.43392602941900 0.32096011320687 0.46396839345782 0.31566170110145 0.49724715934811 0.19116371294466 0.45600471940316 0.48288453879856 0.83757781270027 0.92255764854898 0.36727068727486 0.41435617917820 0.75482434353368 0.69455872541182 0.31088618214403 0.60790382673709 0.66038559322611 0.91944710015140 0.69755463928331 0.69584813113680 0.68456388516342 0.24958010224228 0.33135708379510 0.31767939210415 0.33337808503113 0.03185271947429 0.60442439382403 0.35656402689548 0.31839961693189 0.33536895532058 0.31058970653830 0.95730768207093 0.45453963767842 0.05912788928229 0.92272238465612 0.88884332342846 0.39046765755376 0.18088251652761 0.30929116430757 0.34500555611471 0.93215446668147 0.31707722107987 0.62347433758718 0.52784560408508 0.13894328571018 0.31245032581952 0.21011856822052 0.60284284852669 0.94391374292399 0.68670838063394 0.37088625971873 0.88044428394530 0.77352953207679 0.24431270685738 0.55385391723896 0.69151729865882 0.56011288675814 0.60149798313611 0.28468808104180 0.09852683431566 0.85802221473891 0.53071179377820 0.38133752468831 0.86450535304636 0.54201002558535 0.31624793005778 0.29315360049484 0.80894422419694 0.80424198504538 0.95815405717571 0.00412879618276 0.52950009124523 0.62971223076299 0.58915832569626 0.06659656708073 0.34229424964496 0.84260769354745 0.65648150147962 0.90570483392899 0.68241949108231 0.75839161918790 0.72105605713323 0.31152551422512 0.14707112242257 0.21271128204184 0.61689246089539 0.83376643268622 0.73551584992929 0.14230817419039 0.23446453491568 0.67001824798596 0.18193720997742 0.22687592956768 0.66221054185400 0.85198629895928 0.33819293122706 0.76951641548345 0.70389010505870 0.88781402148678 0.59200084610010 0.50559401792497 0.68570742523428 0.63631248116287 0.63123991820476 0.25100675365664 0.70105923154594 0.03303623228546 0.62197894589382 0.19990654506747 0.41323997391907 0.69953072713561 0.76314023170438 0.62626414463714 0.40818253170270 0.74650024829886 0.99325563394374 0.01223203050489 0.94973975674215 0.61566043786959 0.68272450213743 0.16471287596627 0.78092678772431 0.47348446212354 0.31707269858485 0.43686107230754 0.15172140853713 0.25692068277157 0.96289736651156 0.80004005071341 0.11126366309508 0.53488312261583 0.41141747945455 0.06710709587161 0.29451025152191 0.49288397105375 0.20241027357230 0.12849638617482 0.75706837321647 0.06390759466366 0.93305543535479 0.37744826445353 0.97328670310489 0.47675769358091 0.36773120055525 0.38214283173806 0.99568718961239 0.90777962018899 0.73084337386041 0.06898800354828 0.97203993059259 0.02238588604596 0.95452728473641 0.19233847073660 0.87456843468208 0.21259253130684 0.86239399587025 0.55872934714766 0.97900306917338 0.26647971282236 0.19054911655124 0.07262916083048 0.76118643096167 0.38161130472560 0.75634045392775 0.44835278420113 0.64902152465943 0.48861429511878 0.46845318692441 0.50193906123062 0.06982543082013 0.07000241814677 0.36680207291290 0.08145912739280 0.70290120925069 0.78931563975456 0.99961018176098 0.54706698649171 0.85186443879108 0.51082271660240 0.01641885964931 0.69571302157326 0.92318912325018 0.87641586735165 0.17550601719448 0.83343652793698 0.63051246241319 0.09965143009706 0.44642615185441 0.20207315252469 0.64830095817124 0.88563206111720 0.54960534981566 0.29421992610107 0.26532534535557 0.99510008309104 0.18366353820853 0.72622032362031 0.81620316074499 0.12029619853755 0.56191551011715 0.97048931069014 0.25384304932661 0.24301574951435 0.78656942540521 0.66799187254601 0.29865631042141 0.16989609583657 0.32248522193126 0.99672041701566 0.11696300314042 0.02566885112922 0.71532833389258 0.15227215551128 0.49028621627035 0.48731336533617 0.73371600661002 0.20907022696526 0.77231871643086 0.86635785790473 0.11881976439845 0.42399500396908 0.78507466769174 0.11914030401132 0.06754484274573 0.40204487438383 0.08791089369513 0.31992068112246 0.62383147877276 0.67763034921861 0.57588645574630 0.28191761142405 0.47741056875659 0.69440302405759 0.85870325720240 0.40022257643967 0.36304606145372 0.38389802256232 0.47740864068229 0.11204605946660 0.75820087881217 0.82447492387573 0.32359951415447 0.67262978708770 0.81679604599209 0.98569570085687 0.52318494256921 0.22564285631146 0.43284486824748 0.36760230349442 0.53987854742058 0.56671921752135 0.09940167232468 0.75651292601793 0.10324778581814 0.95043558277226 0.65999232245978 0.35208983100065 0.00583897702362 0.26593986465095 0.80900704639686 0.34292114774035 0.78567548848096 0.60702931979109 0.73117579669777 0.94863724147357 0.57686358191503 0.63240974552581 0.36459925956844 0.60977210555728 0.57362725103824 0.94395498860299 0.48997658028674 0.92806153652270 0.42922038277836 0.22601131398754 0.41352364002005 0.84776908231492 0.89370620811846 0.16438601665329 0.75049854858426 0.52910155915130 0.93999700473025 0.52255299011620 0.58367309488360 0.62381234786253 0.49019544520147 0.21091621767589 0.80125344397732 0.15449022970317 0.70678464568133 0.78858903974456 0.87556539657113 0.99800040968046 0.06415547955625 0.20286219734776 0.86398215191183 0.91481196100705 0.95846879736119 0.18248471015683 0.74659780004783 0.99463065547187 0.31031853290964 0.49051959923345 0.60720500143802 0.35160014768985 0.94471687093974 0.73565879431126 0.43006067360828 0.19629898935552 0.40369659884771 0.20466299069136 0.55963206795815 0.76634975829190 0.48641398087574 0.57091767027277 0.82786160184473 0.87650972489838 0.33852079067818 0.52087602514708 0.72756502842522 0.51718728034009 0.59566309592965 0.28767982450451 0.05127798746550 0.13816012024648 0.48176004913930 0.71399154451653 0.45642454956133 0.75718062772142 0.83802517577698 0.41479986548796 0.03577244370412 0.26564355723053 0.07914164139080 0.96026331119892 0.25200180488973 0.79264788510654 0.45950921968642 0.17748848481245 0.83013273027850 0.89848073046902 0.55970498437525 0.11330285932512 0.88791593740538 0.32581042310344 0.53597664837055 0.64294761213887 0.87628173598820 0.50114779584579 0.01050751185581 0.96276027495718 0.73588862619135 0.27459417633094 0.18348425321073 0.98973649279048 0.57094673659997 0.12625692073013 0.54923725392868 0.60158826855681 0.23089598562343 0.06243565949521 0.32525505418907 0.54284841539920 0.33281813794073 0.26478999011628 0.50964453303693 0.91067937289239 0.12672152713902 0.93685624738346 0.85462662836393 0.82053362403044 0.45401202511598 0.24209648141469 0.32013506768835 0.78554913700175 0.38260264177901 0.26360072576378 0.66263646768816 0.44868132526475 0.80840754727480 0.76919707260898 0.45297152416295 0.50193941198970 0.82759890649034 0.46845221255162 0.11135820522635 0.69268287532428 0.57264753487206 0.08276495933108 0.76924022119872 0.34753882618159 0.09482146190094 0.63235505207788 0.23491046296535 0.46560490373649 0.95859042820916 0.40786591028076 0.92688667042601 0.43755888309447 0.59567783109645 0.41075671842483 0.86152081676657 0.74940146522037 0.43291384118885 0.22257879025553 0.58381766739427 0.80692831219316 0.61623101873751 0.41818736388867 0.22090498266555 0.66258994620330 0.27270873547165 0.17089284754156 0.48707081935940 0.39968285458612 0.00794181230646 0.51348637173723 0.91611968551953 0.84058849112122 0.71014067409361 0.39501293797619 0.36715413528745 0.99095803755399 0.63500126076095 0.40247579336115 0.22778550152358 0.62040072966459 0.34639699037276 0.27982470080724 0.49105038324139 0.90085711570733 0.86332978254796 0.14612426222331 0.36556183969556 0.50740462139803 0.29830057161553 0.21127838947252 0.22703245666295 0.02405163400872 0.21127980069341 0.96320699299730 0.33536355715666 0.49962979944677 0.33895053551081 0.43529169028652 0.17946844400279 0.96750736898340 0.98866085717831 0.32089962500778 0.07275074574257 0.36004586969821 0.57540418168929 0.89772174917699 0.54285726939933 0.97786106805035 0.60318655544091 0.91915950434631 0.70762808375670 0.19284215445607 0.23503363700463 0.47398730524455 0.38197881312138 0.54164374064873 0.33521924575357 0.82729778739273 0.96937576085775 0.22699727669860 0.44987357968244 0.22258005295110 0.90909482048253 0.34486253508041 0.97965502431185 0.88049147722653 0.01278314424423 0.94176014877403 0.34030591735834 0.76898609385865 0.95807950186767 0.99156670685502 0.85271337779031 0.56817487962199 0.65249169229498 0.02861821200795 0.75864449370923 0.32676378446839 0.68569969309389 0.75300306167662 0.33828377926212 0.34159541178807 0.66611261323338 0.33189549454047 0.04436258814706 0.05121284802990 0.33591430702187 0.26167472166800 0.26696793089776 0.84576635829447 0.82239473053877 530988624 891341337 1028205966 191815761 1318542320 1461250574 431277782 662577812 1684271848 1725307484 443427550 1119270731 337540059 1018549017 665890538 1183115172 1296360066 1961513898 782451236 1859569423 919720142 396371965 503404118 984728760 76467039 1073024875 1880370242 266837237 1578055584 148988804 708453464 1621018580 978483264 950632035 62723641 630877092 1452499475 202033204 1436614853 2100442676 387267772 266752358 1282102486 1562923163 1913015678 1158976169 1345662265 143756795 1387064721 1088497802 1608408626 2066539762 1562073659 727353943 1269684449 24575777 51643941 740108798 1427965529 811105805 525596358 1831273755 586834529 1167388199 1253309601 605655379 1279856060 1209757574 1550805864 807011274 786966117 1895199159 4606511 135764917 1945433356 1655246947 1907927454 1581990789 703707308 1737547515 26076409 834776347 292963155 181254685 1722827864 1490450724 381810775 157277968 347035064 666002974 1944680497 192213169 2035379317 1244326335 1045632907 869905062 1409921706 649863636 225789267 777707430 1776876050 467331494 1552545327 1026668941 169602988 553198541 1208389078 1413879055 1293022041 1435032207 645161361 1059091110 378323326 204243226 2037470931 1096028094 2125446247 1327345239 23652745 1822488331 1118550371 2026594069 1943319940 5741864 1929698340 624540311 1521445755 2120930097 470299480 616497631 1079423783 1161355470 1983598070 1845491101 1220238697 2025680742 350184138 2007431219 1292918379 1407355737 1034462011 73965527 1862063095 492778448 1952534040 1194693951 254079216 932571640 31746881 556976214 129257823 891625490 2005567908 1662548072 658225048 124619346 894161477 1278593180 230042179 1299920542 25504010 2092833572 1810453935 1865573144 1186292018 1533579696 1414683338 956213689 1950757451 766099278 486644064 1902921053 602854549 1096530764 763803282 337705479 1633832953 1234614795 1031978849 1954375998 1812121703 725139917 1622872195 1438657108 2101478192 1393837292 783441859 2070404873 401290008 1667332503 71887285 598995019 333703371 1910585626 2065115544 14527352 985112366 614335509 1328776850 654429097 129257823 891625490 2005567908 1662548072 658225048 124619346 894161477 1278593180 230042179 1299920542 25504010 2092833572 1810453935 1865573144 1186292018 1533579696 1414683338 956213689 1950757451 766099278 486644064 1902921053 602854549 1096530764 763803282 337705479 1633832953 1234614795 1031978849 1954375998 1812121703 725139917 1622872195 1438657108 2101478192 1393837292 783441859 2070404873 401290008 1667332503 71887285 598995019 333703371 1910585626 2065115544 14527352 985112366 614335509 1328776850 654429097 1679081482 1695474344 1027764638 169675064 769125962 831124162 859962994 675926632 728964677 1907838575 547557739 930621232 501100437 146609245 484402566 1392500230 320761926 411913377 1428745391 1221580879 796003048 1231631543 1352988212 525514365 1313445224 696732356 1770676031 1545531799 190035022 1024606141 1342155803 550216382 242980981 718386383 167213298 467214248 1866086193 580721442 480801821 1449055508 1069945247 1041358598 1642000481 82255401 1220935383 1195059050 1853433244 241395504 669066503 556397887 SHAR_EOF fi # end of overwriting check if test -f 'primelist.h' then echo shar: will not over-write existing file "'primelist.h'" else cat << "SHAR_EOF" > 'primelist.h' #define PRIMELISTSIZE1 1000 #define STEP 10000 #define PRIMELISTSIZE2 15613 unsigned int prime_list[PRIMELISTSIZE2] = { 3037000493U, 3037000453U, 3037000429U, 3037000427U, 3037000399U, 3037000391U, 3037000333U, 3037000331U, 3037000303U, 3037000289U, 3037000249U, 3037000193U, 3037000181U, 3037000177U, 3037000159U, 3037000121U, 3037000111U, 3037000103U, 3037000069U, 3037000039U, 3037000013U, 3036999991U, 3036999983U, 3036999941U, 3036999899U, 3036999887U, 3036999877U, 3036999841U, 3036999821U, 3036999817U, 3036999811U, 3036999803U, 3036999773U, 3036999769U, 3036999761U, 3036999739U, 3036999737U, 3036999733U, 3036999727U, 3036999499U, 3036999487U, 3036999473U, 3036999467U, 3036999457U, 3036999443U, 3036999439U, 3036999431U, 3036999403U, 3036999379U, 3036999341U, 3036999319U, 3036999307U, 3036999293U, 3036999283U, 3036999271U, 3036999233U, 3036999209U, 3036999167U, 3036999157U, 3036999137U, 3036999113U, 3036999101U, 3036999089U, 3036999079U, 3036999067U, 3036999061U, 3036999023U, 3036999019U, 3036999001U, 3036998999U, 3036998989U, 3036998977U, 3036998963U, 3036998957U, 3036998933U, 3036998903U, 3036998873U, 3036998857U, 3036998849U, 3036998843U, 3036998837U, 3036998803U, 3036998777U, 3036998761U, 3036998759U, 3036998743U, 3036998717U, 3036998611U, 3036998599U, 3036998567U, 3036998563U, 3036998561U, 3036998537U, 3036998477U, 3036998449U, 3036998429U, 3036998401U, 3036998381U, 3036998347U, 3036998333U, 3036998329U, 3036998299U, 3036998267U, 3036998257U, 3036998249U, 3036998231U, 3036998213U, 3036998183U, 3036998161U, 3036998113U, 3036998093U, 3036998071U, 3036998051U, 3036998047U, 3036998011U, 3036998009U, 3036997973U, 3036997939U, 3036997933U, 3036997897U, 3036997853U, 3036997837U, 3036997813U, 3036997811U, 3036997787U, 3036997783U, 3036997751U, 3036997741U, 3036997727U, 3036997721U, 3036997709U, 3036997697U, 3036997693U, 3036997643U, 3036997631U, 3036997619U, 3036997603U, 3036997597U, 3036997577U, 3036997559U, 3036997511U, 3036997501U, 3036997493U, 3036997393U, 3036997391U, 3036997343U, 3036997339U, 3036997331U, 3036997289U, 3036997279U, 3036997217U, 3036997213U, 3036997169U, 3036997151U, 3036997133U, 3036997109U, 3036997081U, 3036997063U, 3036997021U, 3036996983U, 3036996947U, 3036996931U, 3036996923U, 3036996901U, 3036996883U, 3036996863U, 3036996829U, 3036996817U, 3036996799U, 3036996769U, 3036996761U, 3036996737U, 3036996713U, 3036996709U, 3036996707U, 3036996673U, 3036996631U, 3036996601U, 3036996587U, 3036996553U, 3036996527U, 3036996497U, 3036996491U, 3036996481U, 3036996451U, 3036996439U, 3036996421U, 3036996379U, 3036996373U, 3036996353U, 3036996349U, 3036996329U, 3036996307U, 3036996299U, 3036996283U, 3036996253U, 3036996247U, 3036996211U, 3036996197U, 3036996121U, 3036996091U, 3036996077U, 3036996071U, 3036996049U, 3036996019U, 3036996013U, 3036995981U, 3036995977U, 3036995953U, 3036995933U, 3036995921U, 3036995909U, 3036995893U, 3036995887U, 3036995881U, 3036995867U, 3036995839U, 3036995833U, 3036995827U, 3036995791U, 3036995761U, 3036995737U, 3036995723U, 3036995711U, 3036995671U, 3036995641U, 3036995627U, 3036995609U, 3036995603U, 3036995581U, 3036995579U, 3036995573U, 3036995543U, 3036995531U, 3036995527U, 3036995491U, 3036995477U, 3036995459U, 3036995369U, 3036995281U, 3036995267U, 3036995257U, 3036995249U, 3036995239U, 3036995189U, 3036995161U, 3036995153U, 3036995123U, 3036995089U, 3036995083U, 3036995057U, 3036995051U, 3036995041U, 3036995021U, 3036994997U, 3036994963U, 3036994931U, 3036994921U, 3036994897U, 3036994889U, 3036994879U, 3036994847U, 3036994799U, 3036994787U, 3036994777U, 3036994747U, 3036994717U, 3036994703U, 3036994679U, 3036994673U, 3036994663U, 3036994661U, 3036994627U, 3036994621U, 3036994619U, 3036994591U, 3036994549U, 3036994547U, 3036994531U, 3036994511U, 3036994507U, 3036994489U, 3036994469U, 3036994439U, 3036994423U, 3036994417U, 3036994397U, 3036994381U, 3036994369U, 3036994349U, 3036994327U, 3036994309U, 3036994283U, 3036994249U, 3036994237U, 3036994229U, 3036994211U, 3036994193U, 3036994141U, 3036994099U, 3036994073U, 3036994069U, 3036994063U, 3036994043U, 3036994039U, 3036994033U, 3036994001U, 3036993977U, 3036993937U, 3036993913U, 3036993901U, 3036993893U, 3036993871U, 3036993769U, 3036993737U, 3036993727U, 3036993719U, 3036993677U, 3036993667U, 3036993613U, 3036993607U, 3036993601U, 3036993587U, 3036993571U, 3036993569U, 3036993541U, 3036993539U, 3036993529U, 3036993527U, 3036993511U, 3036993469U, 3036993437U, 3036993413U, 3036993367U, 3036993359U, 3036993331U, 3036993329U, 3036993319U, 3036993283U, 3036993277U, 3036993257U, 3036993251U, 3036993241U, 3036993233U, 3036993221U, 3036993217U, 3036993181U, 3036993161U, 3036993143U, 3036993133U, 3036993131U, 3036993107U, 3036993103U, 3036993097U, 3036993083U, 3036993077U, 3036993073U, 3036993023U, 3036992983U, 3036992977U, 3036992969U, 3036992957U, 3036992953U, 3036992921U, 3036992899U, 3036992879U, 3036992873U, 3036992869U, 3036992809U, 3036992773U, 3036992753U, 3036992747U, 3036992743U, 3036992741U, 3036992731U, 3036992719U, 3036992711U, 3036992701U, 3036992681U, 3036992669U, 3036992639U, 3036992579U, 3036992521U, 3036992507U, 3036992503U, 3036992461U, 3036992437U, 3036992423U, 3036992401U, 3036992383U, 3036992377U, 3036992341U, 3036992333U, 3036992293U, 3036992291U, 3036992249U, 3036992207U, 3036992191U, 3036992141U, 3036992131U, 3036992113U, 3036992087U, 3036992083U, 3036992069U, 3036992051U, 3036992033U, 3036992017U, 3036992011U, 3036991987U, 3036991981U, 3036991949U, 3036991943U, 3036991897U, 3036991891U, 3036991883U, 3036991861U, 3036991777U, 3036991757U, 3036991753U, 3036991747U, 3036991717U, 3036991649U, 3036991627U, 3036991619U, 3036991591U, 3036991543U, 3036991511U, 3036991501U, 3036991481U, 3036991453U, 3036991381U, 3036991361U, 3036991357U, 3036991327U, 3036991303U, 3036991301U, 3036991271U, 3036991261U, 3036991253U, 3036991249U, 3036991247U, 3036991189U, 3036991183U, 3036991171U, 3036991147U, 3036991127U, 3036991109U, 3036991081U, 3036991063U, 3036991049U, 3036991037U, 3036991033U, 3036991031U, 3036991021U, 3036990997U, 3036990977U, 3036990961U, 3036990949U, 3036990923U, 3036990907U, 3036990899U, 3036990893U, 3036990871U, 3036990851U, 3036990829U, 3036990779U, 3036990769U, 3036990763U, 3036990739U, 3036990727U, 3036990709U, 3036990703U, 3036990611U, 3036990559U, 3036990491U, 3036990431U, 3036990421U, 3036990401U, 3036990391U, 3036990379U, 3036990371U, 3036990323U, 3036990317U, 3036990277U, 3036990263U, 3036990247U, 3036990233U, 3036990227U, 3036990199U, 3036990193U, 3036990167U, 3036990163U, 3036990157U, 3036990071U, 3036990059U, 3036990049U, 3036990037U, 3036990029U, 3036990017U, 3036989999U, 3036989993U, 3036989983U, 3036989957U, 3036989863U, 3036989821U, 3036989797U, 3036989779U, 3036989723U, 3036989693U, 3036989687U, 3036989651U, 3036989611U, 3036989609U, 3036989603U, 3036989573U, 3036989561U, 3036989539U, 3036989477U, 3036989471U, 3036989441U, 3036989419U, 3036989381U, 3036989377U, 3036989363U, 3036989357U, 3036989353U, 3036989323U, 3036989297U, 3036989281U, 3036989261U, 3036989209U, 3036989167U, 3036989159U, 3036989149U, 3036989129U, 3036989107U, 3036989101U, 3036989077U, 3036989071U, 3036989063U, 3036989041U, 3036989027U, 3036988991U, 3036988879U, 3036988849U, 3036988819U, 3036988751U, 3036988739U, 3036988729U, 3036988727U, 3036988723U, 3036988699U, 3036988679U, 3036988673U, 3036988667U, 3036988651U, 3036988637U, 3036988631U, 3036988627U, 3036988583U, 3036988573U, 3036988571U, 3036988543U, 3036988523U, 3036988483U, 3036988469U, 3036988429U, 3036988417U, 3036988399U, 3036988397U, 3036988393U, 3036988387U, 3036988369U, 3036988349U, 3036988319U, 3036988313U, 3036988309U, 3036988301U, 3036988277U, 3036988271U, 3036988117U, 3036988111U, 3036988109U, 3036988081U, 3036988079U, 3036988043U, 3036988037U, 3036988027U, 3036988021U, 3036987991U, 3036987979U, 3036987937U, 3036987931U, 3036987929U, 3036987917U, 3036987913U, 3036987901U, 3036987883U, 3036987871U, 3036987809U, 3036987799U, 3036987773U, 3036987743U, 3036987731U, 3036987727U, 3036987719U, 3036987691U, 3036987659U, 3036987637U, 3036987631U, 3036987601U, 3036987589U, 3036987587U, 3036987581U, 3036987563U, 3036987557U, 3036987553U, 3036987533U, 3036987529U, 3036987523U, 3036987521U, 3036987469U, 3036987439U, 3036987427U, 3036987361U, 3036987337U, 3036987319U, 3036987311U, 3036987293U, 3036987251U, 3036987241U, 3036987197U, 3036987167U, 3036987127U, 3036987089U, 3036987077U, 3036987073U, 3036987067U, 3036987061U, 3036987043U, 3036986969U, 3036986957U, 3036986917U, 3036986881U, 3036986863U, 3036986851U, 3036986839U, 3036986803U, 3036986791U, 3036986789U, 3036986767U, 3036986759U, 3036986737U, 3036986713U, 3036986669U, 3036986609U, 3036986599U, 3036986593U, 3036986569U, 3036986509U, 3036986507U, 3036986501U, 3036986479U, 3036986441U, 3036986431U, 3036986417U, 3036986411U, 3036986383U, 3036986333U, 3036986287U, 3036986279U, 3036986203U, 3036986189U, 3036986167U, 3036986129U, 3036986123U, 3036986107U, 3036986041U, 3036986023U, 3036986009U, 3036985999U, 3036985993U, 3036985979U, 3036985949U, 3036985921U, 3036985877U, 3036985873U, 3036985837U, 3036985829U, 3036985817U, 3036985813U, 3036985799U, 3036985771U, 3036985753U, 3036985747U, 3036985741U, 3036985739U, 3036985733U, 3036985729U, 3036985709U, 3036985697U, 3036985673U, 3036985643U, 3036985613U, 3036985607U, 3036985603U, 3036985583U, 3036985561U, 3036985559U, 3036985547U, 3036985543U, 3036985499U, 3036985459U, 3036985439U, 3036985433U, 3036985409U, 3036985373U, 3036985361U, 3036985309U, 3036985291U, 3036985283U, 3036985267U, 3036985253U, 3036985249U, 3036985219U, 3036985207U, 3036985187U, 3036985177U, 3036985151U, 3036985097U, 3036985093U, 3036985073U, 3036985033U, 3036985031U, 3036985001U, 3036984997U, 3036984989U, 3036984971U, 3036984953U, 3036984943U, 3036984917U, 3036984887U, 3036984803U, 3036984799U, 3036984787U, 3036984773U, 3036984761U, 3036984751U, 3036984749U, 3036984721U, 3036984697U, 3036984673U, 3036984667U, 3036984637U, 3036984623U, 3036984589U, 3036984569U, 3036984563U, 3036984539U, 3036984527U, 3036984481U, 3036984479U, 3036984427U, 3036984421U, 3036984413U, 3036984407U, 3036984403U, 3036984373U, 3036984367U, 3036984361U, 3036984343U, 3036984319U, 3036984287U, 3036984259U, 3036984257U, 3036984253U, 3036984199U, 3036984191U, 3036984151U, 3036984133U, 3036984131U, 3036984089U, 3036984059U, 3036984053U, 3036984047U, 3036984017U, 3036983933U, 3036983923U, 3036983909U, 3036983897U, 3036983867U, 3036983843U, 3036983837U, 3036983827U, 3036983813U, 3036983809U, 3036983777U, 3036983771U, 3036983699U, 3036983689U, 3036983671U, 3036983657U, 3036983629U, 3036983623U, 3036983597U, 3036983567U, 3036983561U, 3036983539U, 3036983533U, 3036983497U, 3036983483U, 3036983441U, 3036983407U, 3036983387U, 3036983297U, 3036983281U, 3036983249U, 3036983203U, 3036983189U, 3036983177U, 3036983167U, 3036983137U, 3036983111U, 3036983099U, 3036983083U, 3036983063U, 3036983057U, 3036983041U, 3036982981U, 3036982937U, 3036982919U, 3036982853U, 3036982843U, 3036982841U, 3036982789U, 3036982777U, 3036982757U, 3036982727U, 3036982693U, 3036982643U, 3036982639U, 3036982601U, 3036982589U, 3036982577U, 3036982567U, 3036982547U, 3036982541U, 3036982523U, 3036982519U, 3036982489U, 3036982469U, 3036982451U, 3036982423U, 3036982397U, 3036982387U, 3036982349U, 3036982337U, 3036982331U, 3036982313U, 3036982297U, 3036982279U, 3036982271U, 3036982189U, 3036982139U, 3036982133U, 3036982121U, 3036982111U, 3036982103U, 3036982099U, 3036982093U, 3036982061U, 3036982043U, 3036982009U, 3036982001U, 3036981979U, 3036981967U, 3036981953U, 3036981931U, 3036981923U, 3036981917U, 3036981863U, 3036981859U, 3036981853U, 3036981851U, 3036981821U, 3036981811U, 3036981797U, 3036981763U, 3036981733U, 3036981713U, 3036981691U, 3036981659U, 3036981553U, 3036981547U, 3036981539U, 3036981533U, 3036981481U, 3036981421U, 3036981407U, 3036981401U, 3036981383U, 3036981373U, 3036981359U, 3036981347U, 3036981323U, 3036981313U, 3036981307U, 3036981301U, 3036981289U, 3036981287U, 3036981209U, 3036981179U, 3036981139U, 3036981097U, 3036981067U, 3036981043U, 3036981041U, 3036981023U, 3036981011U, 3036980971U, 3036980941U, 3036980917U, 3036980911U, 3036980897U, 3036980867U, 3036980851U, 3036980819U, 3036980803U, 3036980761U, 3036980753U, 3036980747U, 3036980701U, 3036980699U, 3036980677U, 3036980599U, 3036980579U, 3036980549U, 3036980537U, 3036980533U, 3036980519U, 3036980497U, 3036980491U, 3036980459U, 3036980423U, 3036980371U, 3036980363U, 3036980339U, 3036980327U, 3036980269U, 3036980267U, 3036980263U, 3036980207U, 3036980161U, 3036980129U, 3036980123U, 3036980117U, 3036980077U, 3036980071U, 3036980047U, 3036980041U, 3036980039U, 3036980033U, 3036980027U, 3036979997U, 3036979987U, 3036979937U, 3036979927U, 3036979919U, 3036979873U, 3036979861U, 3036979849U, 3036979837U, 3036979793U, 3036979787U, 3036979769U, 3036979763U, 3036979723U, 3036979709U, 3036979679U, 3036979661U, 3036979601U, 3036979597U, 3036979579U, 3036979571U, 3036979531U, 3036979529U, 3036979523U, 3036979457U, 3036979391U, 3036979357U, 3036979343U, 3036979339U, 3036979303U, 3036979301U, 3036979291U, 3036979289U, 3036979261U, 3036979249U, 3036979237U, 3036979223U, 3036762997U, 3036545581U, 3036327389U, 3036107951U, 3035888633U, 3035669363U, 3035449477U, 3035232667U, 3035014193U, 3034795427U, 3034577531U, 3034357853U, 3034138969U, 3033923621U, 3033706409U, 3033488597U, 3033267889U, 3033049871U, 3032832493U, 3032615063U, 3032396527U, 3032177359U, 3031960339U, 3031742731U, 3031526081U, 3031308359U, 3031092199U, 3030873071U, 3030655757U, 3030437257U, 3030218647U, 3029999191U, 3029780833U, 3029559389U, 3029339741U, 3029122153U, 3028904231U, 3028687897U, 3028467803U, 3028251181U, 3028034189U, 3027815579U, 3027597247U, 3027377317U, 3027158237U, 3026939441U, 3026721421U, 3026502179U, 3026282261U, 3026065561U, 3025847507U, 3025627663U, 3025409689U, 3025190813U, 3024971231U, 3024753383U, 3024533179U, 3024312673U, 3024094123U, 3023876753U, 3023655737U, 3023439317U, 3023222239U, 3023004151U, 3022786831U, 3022566857U, 3022349243U, 3022131979U, 3021911663U, 3021695137U, 3021477377U, 3021256289U, 3021037769U, 3020820247U, 3020600897U, 3020381843U, 3020165179U, 3019948573U, 3019729819U, 3019510561U, 3019294087U, 3019074679U, 3018854257U, 3018637471U, 3018418159U, 3018199469U, 3017981123U, 3017762807U, 3017544701U, 3017327809U, 3017107381U, 3016890403U, 3016671503U, 3016453117U, 3016234721U, 3016015661U, 3015797003U, 3015579211U, 3015360779U, 3015141427U, 3014924197U, 3014705597U, 3014487473U, 3014268743U, 3014052511U, 3013832473U, 3013615529U, 3013397269U, 3013177819U, 3012960241U, 3012743291U, 3012525497U, 3012307019U, 3012088889U, 3011870993U, 3011652491U, 3011434169U, 3011217061U, 3010999219U, 3010780781U, 3010564993U, 3010348387U, 3010127833U, 3009910177U, 3009693839U, 3009474253U, 3009255637U, 3009037517U, 3008820911U, 3008599381U, 3008379739U, 3008159723U, 3007941473U, 3007724221U, 3007506361U, 3007288589U, 3007068709U, 3006850277U, 3006630499U, 3006412979U, 3006194489U, 3005975761U, 3005755367U, 3005537413U, 3005317433U, 3005101609U, 3004884821U, 3004669463U, 3004450633U, 3004231093U, 3004011743U, 3003795953U, 3003576871U, 3003357971U, 3003138847U, 3002919079U, 3002700947U, 3002481649U, 3002264299U, 3002046821U, 3001828987U, 3001609753U, 3001390789U, 3001172389U, 3000954289U, 3000736049U, 3000517057U, 3000299059U, 3000081691U, 2999865541U, 2999645267U, 2999428681U, 2999208437U, 2998989517U, 2998769261U, 2998552309U, 2998331761U, 2998112737U, 2997895037U, 2997675017U, 2997456079U, 2997236027U, 2997018683U, 2996799863U, 2996579689U, 2996360473U, 2996141653U, 2995922999U, 2995706647U, 2995488203U, 2995270471U, 2995052131U, 2994832817U, 2994613397U, 2994394969U, 2994176371U, 2993958943U, 2993739953U, 2993521463U, 2993302891U, 2993085449U, 2992867159U, 2992647499U, 2992428287U, 2992211983U, 2991996857U, 2991776339U, 2991556427U, 2991341417U, 2991121901U, 2990904949U, 2990686943U, 2990471509U, 2990252131U, 2990033617U, 2989816859U, 2989597759U, 2989377431U, 2989159883U, 2988940987U, 2988721301U, 2988502883U, 2988285617U, 2988066629U, 2987849437U, 2987630771U, 2987414873U, 2987198597U, 2986980923U, 2986764181U, 2986545649U, 2986327571U, 2986109209U, 2985890657U, 2985670433U, 2985453733U, 2985237617U, 2985019019U, 2984801321U, 2984581697U, 2984360947U, 2984142757U, 2983925299U, 2983708313U, 2983488721U, 2983270751U, 2983052749U, 2982833473U, 2982617243U, 2982401029U, 2982184763U, 2981967419U, 2981746181U, 2981525629U, 2981308009U, 2981089733U, 2980871129U, 2980654093U, 2980435439U, 2980218091U, 2980002373U, 2979781547U, 2979562793U, 2979344219U, 2979127687U, 2978907857U, 2978690389U, 2978472713U, 2978255261U, 2978038267U, 2977818317U, 2977601191U, 2977384337U, 2977166617U, 2976948059U, 2976730721U, 2976512857U, 2976292927U, 2976075541U, 2975857043U, 2975638751U, 2975421623U, 2975204087U, 2974987151U, 2974768619U, 2974552081U, 2974332671U, 2974113341U, 2973895261U, 2973677171U, 2973458113U, 2973241703U, 2973023369U, 2972804099U, 2972586329U, 2972367829U, 2972149039U, 2971931051U, 2971711019U, 2971494139U, 2971277423U, 2971059173U, 2970838919U, 2970619343U, 2970403757U, 2970183743U, 2969959627U, 2969743547U, 2969525033U, 2969309891U, 2969090279U, 2968871251U, 2968651541U, 2968435117U, 2968214531U, 2967996443U, 2967780931U, 2967562369U, 2967343021U, 2967124487U, 2966906353U, 2966688983U, 2966472557U, 2966253179U, 2966035691U, 2965819673U, 2965600733U, 2965383739U, 2965166959U, 2964946847U, 2964729197U, 2964510889U, 2964292297U, 2964075437U, 2963855227U, 2963638693U, 2963421677U, 2963204119U, 2962986503U, 2962766491U, 2962547311U, 2962331657U, 2962112771U, 2961895337U, 2961679121U, 2961460591U, 2961241603U, 2961022781U, 2960805161U, 2960587099U, 2960369359U, 2960151149U, 2959931383U, 2959714627U, 2959495937U, 2959277393U, 2959059997U, 2958843161U, 2958625499U, 2958407399U, 2958189191U, 2957972767U, 2957753053U, 2957535137U, 2957317171U, 2957098873U, 2956880557U, 2956660747U, 2956441343U, 2956224577U, 2956007273U, 2955789979U, 2955569107U, 2955349213U, 2955131051U, 2954912297U, 2954693083U, 2954475233U, 2954255153U, 2954037211U, 2953818851U, 2953599667U, 2953381993U, 2953162151U, 2952942739U, 2952725873U, 2952506693U, 2952289517U, 2952071821U, 2951854319U, 2951636731U, 2951419189U, 2951201251U, 2950982971U, 2950763201U, 2950544221U, 2950326689U, 2950110017U, 2949891643U, 2949673561U, 2949456077U, 2949238151U, 2949022819U, 2948803327U, 2948584297U, 2948367439U, 2948148473U, 2947930483U, 2947712767U, 2947495459U, 2947277803U, 2947061057U, 2946842537U, 2946625949U, 2946405619U, 2946187753U, 2945970421U, 2945751373U, 2945535001U, 2945315713U, 2945096753U, 2944880387U, 2944658933U, 2944441141U, 2944223479U, 2944005997U, 2943788681U, 2943569197U, 2943351529U, 2943132887U, 2942914609U, 2942697049U, 2942480587U, 2942261857U, 2942041747U, 2941824229U, 2941604959U, 2941387153U, 2941168301U, 2940949691U, 2940733787U, 2940516781U, 2940299849U, 2940084479U, 2939867743U, 2939650613U, 2939432609U, 2939214277U, 2938996777U, 2938779271U, 2938560353U, 2938341551U, 2938124249U, 2937905819U, 2937690901U, 2937472607U, 2937253091U, 2937035341U, 2936814169U, 2936597249U, 2936378723U, 2936162003U, 2935942103U, 2935724443U, 2935504679U, 2935286489U, 2935067897U, 2934850591U, 2934633607U, 2934416071U, 2934197197U, 2933980571U, 2933761433U, 2933543771U, 2933324839U, 2933105831U, 2932886129U, 2932668953U, 2932451867U, 2932234901U, 2932015831U, 2931799373U, 2931579601U, 2931363089U, 2931144523U, 2930928227U, 2930711587U, 2930493919U, 2930273009U, 2930054573U, 2929836719U, 2929619653U, 2929400603U, 2929183613U, 2928966151U, 2928748139U, 2928530929U, 2928313153U, 2928094357U, 2927875619U, 2927658673U, 2927442487U, 2927222069U, 2927004709U, 2926787309U, 2926569361U, 2926350367U, 2926135529U, 2925917893U, 2925698173U, 2925480919U, 2925263279U, 2925046463U, 2924831069U, 2924613371U, 2924393729U, 2924175193U, 2923954801U, 2923737343U, 2923518683U, 2923300829U, 2923082209U, 2922864767U, 2922649421U, 2922430073U, 2922212519U, 2921994917U, 2921775803U, 2921559653U, 2921341103U, 2921126489U, 2920908283U, 2920689061U, 2920471049U, 2920251703U, 2920034347U, 2919817627U, 2919598021U, 2919381319U, 2919162959U, 2918943683U, 2918729057U, 2918510587U, 2918292271U, 2918072057U, 2917854413U, 2917635811U, 2917419499U, 2917202663U, 2916983521U, 2916765193U, 2916545773U, 2916328517U, 2916112183U, 2915893681U, 2915677241U, 2915456513U, 2915239601U, 2915020937U, 2914803761U, 2914586503U, 2914368059U, 2914150271U, 2913932779U, 2913714131U, 2913494791U, 2913274457U, 2913057307U, 2912839169U, 2912621401U, 2912404247U, 2912187853U, 2911970317U, 2911752157U, 2911532539U, 2911313501U, 2911094951U, 2910876457U, 2910657353U, 2910439451U, 2910221297U, 2910003703U, 2909787409U, 2909568721U, 2909351741U, 2909134769U, 2908916249U, 2908699601U, 2908480777U, 2908262023U, 2908043023U, 2907825317U, 2907607337U, 2907388073U, 2907166967U, 2906952473U, 2906736593U, 2906518943U, 2906300231U, 2906082233U, 2905864067U, 2905644013U, 2905426619U, 2905208881U, 2904993263U, 2904773771U, 2904556769U, 2904338867U, 2904123031U, 2903903861U, 2903686447U, 2903468497U, 2903250821U, 2903031559U, 2902812839U, 2902597123U, 2902380449U, 2902160717U, 2901941417U, 2901724187U, 2901507019U, 2901289403U, 2901071813U, 2900854379U, 2900634593U, 2900418889U, 2900202287U, 2899984603U, 2899766291U, 2899550011U, 2899332323U, 2899114357U, 2898895687U, 2898677891U, 2898458359U, 2898238669U, 2898022789U, 2897804407U, 2897587421U, 2897369021U, 2897150423U, 2896932589U, 2896714631U, 2896495643U, 2896278251U, 2896061459U, 2895842179U, 2895625609U, 2895408143U, 2895191393U, 2894976157U, 2894758709U, 2894538461U, 2894320211U, 2894101087U, 2893885381U, 2893666007U, 2893448681U, 2893230569U, 2893012403U, 2892794153U, 2892573601U, 2892357361U, 2892141401U, 2891924291U, 2891705197U, 2891485453U, 2891265869U, 2891046343U, 2890827241U, 2890611539U, 2890395037U, 2890176347U, 2889959197U, 2889741301U, 2889523193U, 2889304499U, 2889089393U, 2888872171U, 2888652913U, 2888435443U, 2888217103U, 2887998313U, 2887779967U, 2887561093U, 2887343237U, 2887123997U, 2886907081U, 2886689119U, 2886472033U, 2886253057U, 2886035473U, 2885816789U, 2885599417U, 2885384233U, 2885167091U, 2884947421U, 2884728403U, 2884511183U, 2884293637U, 2884076357U, 2883857357U, 2883636991U, 2883420959U, 2883205421U, 2882988211U, 2882768663U, 2882551601U, 2882332891U, 2882115923U, 2881893467U, 2881675499U, 2881460221U, 2881243067U, 2881026271U, 2880811447U, 2880592861U, 2880372919U, 2880155819U, 2879937503U, 2879719223U, 2879501707U, 2879284477U, 2879065151U, 2878847353U, 2878630171U, 2878412213U, 2878195469U, 2877978211U, 2877761027U, 2877542959U, 2877323003U, 2877103631U, 2876887777U, 2876669153U, 2876450789U, 2876234329U, 2876015969U, 2875798063U, 2875580219U, 2875359587U, 2875143757U, 2874924197U, 2874705727U, 2874488887U, 2874269987U, 2874053293U, 2873838833U, 2873621573U, 2873405077U, 2873184967U, 2872965317U, 2872747699U, 2872530079U, 2872311397U, 2872093027U, 2871876197U, 2871660371U, 2871442997U, 2871223709U, 2871006713U, 2870788931U, 2870569511U, 2870353319U, 2870136403U, 2869918537U, 2869699211U, 2869482403U, 2869264327U, 2869046833U, 2868829897U, 2868611561U, 2868394531U, 2868174143U, 2867957447U, 2867741813U, 2867525273U, 2867306537U, 2867087807U, 2866870037U, 2866650131U, 2866432507U, 2866214723U, 2865995389U, 2865779281U, 2865562759U, 2865345643U, 2865128281U, 2864909689U, 2864694359U, 2864474981U, 2864259109U, 2864041781U, 2863821967U, 2863603163U, 2863384697U, 2863168019U, 2862948337U, 2862729659U, 2862513271U, 2862296011U, 2862079601U, 2861861329U, 2861642369U, 2861425097U, 2861209789U, 2860995217U, 2860778423U, 2860561097U, 2860342603U, 2860123993U, 2859905843U, 2859688873U, 2859471767U, 2859252779U, 2859032731U, 2858814547U, 2858597117U, 2858380367U, 2858163197U, 2857943411U, 2857725271U, 2857506689U, 2857290773U, 2857072787U, 2856856927U, 2856636661U, 2856421241U, 2856205237U, 2855990087U, 2855772947U, 2855553373U, 2855333407U, 2855115623U, 2854898329U, 2854680739U, 2854464091U, 2854245203U, 2854025267U, 2853810433U, 2853595379U, 2853379457U, 2853160217U, 2852940071U, 2852723551U, 2852506303U, 2852289907U, 2852072389U, 2851854713U, 2851637123U, 2851420771U, 2851204067U, 2850984959U, 2850768589U, 2850549269U, 2850330421U, 2850111983U, 2849894777U, 2849677687U, 2849461753U, 2849245277U, 2849027833U, 2848809701U, 2848590973U, 2848374059U, 2848154471U, 2847936691U, 2847718589U, 2847501413U, 2847283139U, 2847064399U, 2846845681U, 2846630233U, 2846412451U, 2846195621U, 2845978997U, 2845761719U, 2845545929U, 2845328281U, 2845111153U, 2844894137U, 2844676819U, 2844457703U, 2844237833U, 2844020057U, 2843802061U, 2843583269U, 2843367311U, 2843148307U, 2842929931U, 2842712767U, 2842494803U, 2842276837U, 2842059893U, 2841843317U, 2841625249U, 2841405043U, 2841186893U, 2840966993U, 2840751341U, 2840533337U, 2840315887U, 2840099881U, 2839879993U, 2839663579U, 2839446527U, 2839227731U, 2839010423U, 2838792029U, 2838573323U, 2838357359U, 2838139411U, 2837920433U, 2837703611U, 2837486299U, 2837267611U, 2837049623U, 2836833059U, 2836613807U, 2836398179U, 2836180517U, 2835963887U, 2835744931U, 2835526247U, 2835309481U, 2835089911U, 2834871859U, 2834655797U, 2834437279U, 2834220317U, 2834003617U, 2833786201U, 2833565099U, 2833349143U, 2833132711U, 2832915803U, 2832695309U, 2832478303U, 2832259931U, 2832041741U, 2831822611U, 2831604649U, 2831385941U, 2831168953U, 2830949377U, 2830732193U, 2830514789U, 2830296191U, 2830078421U, 2829861907U, 2829645557U, 2829428501U, 2829210367U, 2828994253U, 2828776007U, 2828556517U, 2828338973U, 2828122361U, 2827905911U, 2827687451U, 2827470001U, 2827253929U, 2827036441U, 2826817351U, 2826600781U, 2826383321U, 2826165103U, 2825945599U, 2825728769U, 2825510437U, 2825292881U, 2825075599U, 2824857577U, 2824637267U, 2824421753U, 2824203383U, 2823985121U, 2823767741U, 2823552713U, 2823334027U, 2823115531U, 2822899567U, 2822681171U, 2822466149U, 2822249779U, 2822031559U, 2821815097U, 2821597187U, 2821377467U, 2821161307U, 2820944677U, 2820726023U, 2820509233U, 2820291787U, 2820074617U, 2819858617U, 2819639863U, 2819420909U, 2819204699U, 2818986097U, 2818769671U, 2818554127U, 2818338797U, 2818119323U, 2817902393U, 2817687143U, 2817470609U, 2817251677U, 2817033533U, 2816816729U, 2816597177U, 2816379701U, 2816161721U, 2815943177U, 2815724267U, 2815508719U, 2815292171U, 2815074161U, 2814855517U, 2814639523U, 2814424241U, 2814205813U, 2813989523U, 2813771789U, 2813553863U, 2813335013U, 2813118311U, 2812899511U, 2812682017U, 2812466269U, 2812247873U, 2812029713U, 2811814463U, 2811594971U, 2811377483U, 2811158557U, 2810940163U, 2810724047U, 2810504129U, 2810285299U, 2810067109U, 2809850917U, 2809632401U, 2809416563U, 2809198597U, 2808980641U, 2808761933U, 2808546109U, 2808327799U, 2808109763U, 2807892041U, 2807673161U, 2807455799U, 2807239129U, 2807021237U, 2806801457U, 2806581781U, 2806364989U, 2806148617U, 2805931031U, 2805715879U, 2805500573U, 2805283331U, 2805064187U, 2804847361U, 2804630473U, 2804413741U, 2804195767U, 2803975861U, 2803759481U, 2803540147U, 2803324603U, 2803107253U, 2802890353U, 2802672823U, 2802457183U, 2802239873U, 2802023131U, 2801805257U, 2801588953U, 2801372323U, 2801154773U, 2800937873U, 2800719839U, 2800502303U, 2800284107U, 2800066679U, 2799847909U, 2799629947U, 2799413213U, 2799194747U, 2798976953U, 2798757359U, 2798541121U, 2798323391U, 2798104747U, 2797889089U, 2797671869U, 2797455259U, 2797239293U, 2797022453U, 2796803531U, 2796585007U, 2796367729U, 2796151247U, 2795933939U, 2795714539U, 2795497283U, 2795280629U, 2795064541U, 2794846657U, 2794628513U, 2794411001U, 2794193641U, 2793974507U, 2793756883U, 2793538697U, 2793322783U, 2793104891U, 2792887567U, 2792669413U, 2792450077U, 2792234747U, 2792015983U, 2791799281U, 2791579949U, 2791362671U, 2791148117U, 2790929363U, 2790712147U, 2790494117U, 2790276341U, 2790057701U, 2789840201U, 2789622509U, 2789404531U, 2789187923U, 2788970959U, 2788753739U, 2788535047U, 2788317643U, 2788099129U, 2787883151U, 2787666533U, 2787448931U, 2787231721U, 2787014497U, 2786796839U, 2786578331U, 2786361649U, 2786144821U, 2785926443U, 2785709483U, 2785492691U, 2785276147U, 2785059701U, 2784842513U, 2784623269U, 2784403757U, 2784186253U, 2783970367U, 2783751689U, 2783533561U, 2783316001U, 2783098823U, 2782882673U, 2782664111U, 2782447223U, 2782229669U, 2782011607U, 2781792473U, 2781577033U, 2781359699U, 2781143957U, 2780925857U, 2780705443U, 2780487971U, 2780272037U, 2780052623U, 2779835621U, 2779620559U, 2779402261U, 2779184761U, 2778966361U, 2778750509U, 2778533341U, 2778314027U, 2778097499U, 2777877251U, 2777660539U, 2777443531U, 2777226589U, 2777009243U, 2776792973U, 2776576351U, 2776361117U, 2776143047U, 2775924847U, 2775707611U, 2775489313U, 2775272177U, 2775054169U, 2774836811U, 2774619791U, 2774401967U, 2774184313U, 2773966513U, 2773747181U, 2773530527U, 2773313149U, 2773095791U, 2772879017U, 2772660467U, 2772444667U, 2772228551U, 2772009767U, 2771792449U, 2771576581U, 2771359039U, 2771144221U, 2770927889U, 2770711787U, 2770494997U, 2770277231U, 2770058563U, 2769839873U, 2769624397U, 2769407651U, 2769188251U, 2768970991U, 2768754187U, 2768536579U, 2768319319U, 2768102431U, 2767887809U, 2767669573U, 2767451647U, 2767235123U, 2767018187U, 2766800807U, 2766583471U, 2766366329U, 2766148349U, 2765931257U, 2765713711U, 2765494453U, 2765279519U, 2765058767U, 2764841509U, 2764622239U, 2764406269U, 2764188703U, 2763970529U, 2763752401U, 2763533807U, 2763317149U, 2763100811U, 2762884231U, 2762668303U, 2762450149U, 2762230519U, 2762015407U, 2761798139U, 2761581419U, 2761365491U, 2761146097U, 2760927271U, 2760711053U, 2760493937U, 2760274871U, 2760056279U, 2759839081U, 2759621659U, 2759403499U, 2759183873U, 2758967117U, 2758749431U, 2758531091U, 2758312511U, 2758094869U, 2757875647U, 2757661289U, 2757443287U, 2757225577U, 2757009529U, 2756793001U, 2756576659U, 2756357939U, 2756141051U, 2755926427U, 2755708801U, 2755491989U, 2755275233U, 2755057649U, 2754840499U, 2754623321U, 2754407107U, 2754190189U, 2753970071U, 2753751277U, 2753533889U, 2753317397U, 2753098739U, 2752879889U, 2752663559U, 2752447129U, 2752230763U, 2752012477U, 2751795523U, 2751574817U, 2751359173U, 2751143231U, 2750927563U, 2750710201U, 2750494993U, 2750277767U, 2750058631U, 2749838719U, 2749621681U, 2749404323U, 2749186409U, 2748969491U, 2748754933U, 2748537481U, 2748318541U, 2748099931U, 2747881769U, 2747664079U, 2747446327U, 2747228923U, 2747009921U, 2746791577U, 2746574401U, 2746356461U, 2746139393U, 2745923597U, 2745705107U, 2745486259U, 2745268853U, 2745053603U, 2744837633U, 2744620103U, 2744402081U, 2744184061U, 2743965649U, 2743747399U, 2743529093U, 2743309747U, 2743091501U, 2742875263U, 2742657499U, 2742436849U, 2742221177U, 2742002209U, 2741784317U, 2741565467U, 2741350751U, 2741134939U, 2740917589U, 2740700147U, 2740484129U, 2740268543U, 2740051661U, 2739832097U, 2739613999U, 2739397519U, 2739180611U, 2738965601U, 2738750713U, 2738530519U, 2738312657U, 2738097601U, 2737880659U, 2737663919U, 2737447673U, 2737231039U, 2737011469U, 2736795203U, 2736577367U, 2736359929U, 2736140411U, 2735922361U, 2735707621U, 2735490701U, 2735272087U, 2735051993U, 2734834733U, 2734617673U, 2734399807U, 2734183789U, 2733964489U, 2733747299U, 2733531319U, 2733315773U, 2733096937U, 2732877229U, 2732659313U, 2732442539U, 2732224381U, 2732008493U, 2731791107U, 2731575277U, 2731359073U, 2731143791U, 2730927193U, 2730710711U, 2730492463U, 2730272821U, 2730056191U, 2729836853U, 2729618401U, 2729401309U, 2729183783U, 2728967399U, 2728750513U, 2728532957U, 2728316387U, 2728095649U, 2727876353U, 2727657487U, 2727441889U, 2727223129U, 2727005321U, 2726785889U, 2726567969U, 2726350567U, 2726134057U, 2725917767U, 2725702043U, 2725483997U, 2725265143U, 2725048691U, 2724834121U, 2724617173U, 2724400213U, 2724182843U, 2723963009U, 2723744983U, 2723527771U, 2723309219U, 2723091817U, 2722872419U, 2722654423U, 2722437283U, 2722221071U, 2722003787U, 2721787063U, 2721571087U, 2721354179U, 2721135533U, 2720918813U, 2720700211U, 2720482043U, 2720263867U, 2720045333U, 2719829513U, 2719610849U, 2719394527U, 2719178291U, 2718963449U, 2718746123U, 2718526709U, 2718310267U, 2718091331U, 2717873803U, 2717658043U, 2717440529U, 2717224541U, 2717007047U, 2716791377U, 2716572949U, 2716355051U, 2716137659U, 2715920573U, 2715704273U, 2715486167U, 2715267853U, 2715051109U, 2714833687U, 2714615261U, 2714398829U, 2714182301U, 2713964917U, 2713748071U, 2713530331U, 2713313419U, 2713095769U, 2712878431U, 2712662101U, 2712443231U, 2712227411U, 2712009089U, 2711793187U, 2711574529U, 2711360329U, 2711144291U, 2710924687U, 2710707551U, 2710489841U, 2710273571U, 2710057997U, 2709838841U, 2709622463U, 2709405917U, 2709186349U, 2708968877U, 2708750413U, 2708532971U, 2708318071U, 2708101423U, 2707882889U, 2707665913U, 2707449389U, 2707232833U, 2707015789U, 2706799423U, 2706580579U, 2706364931U, 2706147757U, 2705930971U, 2705712257U, 2705495677U, 2705279699U, 2705062303U, 2704846349U, 2704628477U, 2704412203U, 2704194443U, 2703975119U, 2703756427U, 2703538801U, 2703322967U, 2703105413U, 2702888407U, 2702670497U, 2702454919U, 2702235997U, 2702021737U, 2701801493U, 2701585729U, 2701367989U, 2701151581U, 2700934559U, 2700718619U, 2700500519U, 2700284057U, 2700067691U, 2699850661U, 2699632207U, 2699414203U, 2699197199U, 2698979867U, 2698763449U, 2698546423U, 2698328177U, 2698112723U, 2697894349U, 2697677911U, 2697461189U, 2697244709U, 2697028651U, 2696813281U, 2696594269U, 2696377417U, 2696159857U, 2695942259U, 2695726037U, 2695509877U, 2695293703U, 2695077029U, 2694857899U, 2694641657U, 2694426953U, 2694209863U, 2693992429U, 2693776999U, 2693558843U, 2693339317U, 2693121281U, 2692904281U, 2692687223U, 2692468787U, 2692252309U, 2692034089U, 2691819241U, 2691602107U, 2691383239U, 2691166903U, 2690948789U, 2690732003U, 2690515171U, 2690299373U, 2690081593U, 2689862561U, 2689645753U, 2689428227U, 2689209829U, 2688993607U, 2688777209U, 2688561017U, 2688343547U, 2688127933U, 2687911913U, 2687694539U, 2687476763U, 2687263067U, 2687049571U, 2686832471U, 2686615571U, 2686398347U, 2686179949U, 2685965081U, 2685747137U, 2685529541U, 2685310961U, 2685093211U, 2684876093U, 2684658019U, 2684440067U, 2684223953U, 2684005817U, 2683789963U, 2683571243U, 2683353733U, 2683137199U, 2682917623U, 2682700063U, 2682479377U, 2682264451U, 2682047707U, 2681828923U, 2681611753U, 2681394413U, 2681177111U, 2680959709U, 2680744291U, 2680525957U, 2680308977U, 2680096213U, 2679877279U, 2679660703U, 2679442013U, 2679225181U, 2679008639U, 2678791777U, 2678576051U, 2678358019U, 2678142487U, 2677926301U, 2677708807U, 2677493873U, 2677275257U, 2677055411U, 2676838837U, 2676620759U, 2676405769U, 2676189599U, 2675970641U, 2675755597U, 2675538689U, 2675323379U, 2675104633U, 2674886273U, 2674669183U, 2674452647U, 2674236199U, 2674019521U, 2673802099U, 2673589109U, 2673370517U, 2673153583U, 2672936393U, 2672719319U, 2672502383U, 2672285699U, 2672069171U, 2671851187U, 2671632563U, 2671414829U, 2671199281U, 2670982297U, 2670764023U, 2670547589U, 2670329219U, 2670112937U, 2669897969U, 2669681671U, 2669463829U, 2669247731U, 2669028689U, 2668810241U, 2668592911U, 2668377587U, 2668161701U, 2667945023U, 2667728057U, 2667510931U, 2667293077U, 2667076751U, 2666860253U, 2666643367U, 2666425523U, 2666207899U, 2665990751U, 2665773419U, 2665557353U, 2665337501U, 2665121737U, 2664904817U, 2664690073U, 2664472079U, 2664258323U, 2664039709U, 2663820461U, 2663602421U, 2663387431U, 2663168177U, 2662951507U, 2662735541U, 2662516147U, 2662300259U, 2662082509U, 2661865067U, 2661648779U, 2661432827U, 2661214163U, 2660999801U, 2660781689U, 2660562241U, 2660345951U, 2660127443U, 2659910443U, 2659691731U, 2659474313U, 2659255663U, 2659039301U, 2658822889U, 2658607327U, 2658391117U, 2658171743U, 2657953993U, 2657735627U, 2657519093U, 2657300533U, 2657084537U, 2656869827U, 2656653679U, 2656434799U, 2656218541U, 2656001609U, 2655785789U, 2655570427U, 2655354607U, 2655138589U, 2654923177U, 2654706149U, 2654489879U, 2654274641U, 2654055773U, 2653839263U, 2653621843U, 2653405831U, 2653189291U, 2652972197U, 2652754297U, 2652539249U, 2652321443U, 2652103859U, 2651884883U, 2651667787U, 2651451791U, 2651231629U, 2651014127U, 2650796653U, 2650580249U, 2650363361U, 2650147111U, 2649933037U, 2649715879U, 2649498611U, 2649282833U, 2649064001U, 2648847847U, 2648628863U, 2648409479U, 2648192941U, 2647976189U, 2647759267U, 2647543273U, 2647326169U, 2647110629U, 2646891629U, 2646675377U, 2646458467U, 2646241303U, 2646024781U, 2645808241U, 2645591363U, 2645373799U, 2645155729U, 2644938983U, 2644720241U, 2644505509U, 2644285547U, 2644068403U, 2643849823U, 2643632899U, 2643416371U, 2643198983U, 2642982389U, 2642764637U, 2642546867U, 2642330021U, 2642114309U, 2641897289U, 2641679903U, 2641464583U, 2641247107U, 2641030501U, 2640813577U, 2640595387U, 2640378677U, 2640158657U, 2639944249U, 2639727721U, 2639511683U, 2639296301U, 2639077267U, 2638858801U, 2638637987U, 2638423691U, 2638207669U, 2637992069U, 2637776507U, 2637558317U, 2637341431U, 2637125737U, 2636909777U, 2636691353U, 2636473793U, 2636255731U, 2636038121U, 2635820051U, 2635603241U, 2635384553U, 2635166099U, 2634948179U, 2634729767U, 2634513631U, 2634295421U, 2634078131U, 2633861851U, 2633645137U, 2633429243U, 2633212481U, 2632993633U, 2632775279U, 2632558007U, 2632341337U, 2632126339U, 2631908537U, 2631692597U, 2631477319U, 2631259781U, 2631043561U, 2630828731U, 2630613143U, 2630397893U, 2630179499U, 2629962739U, 2629744907U, 2629529321U, 2629310449U, 2629091953U, 2628874163U, 2628659393U, 2628440917U, 2628222629U, 2628006571U, 2627789387U, 2627571263U, 2627356183U, 2627139131U, 2626923749U, 2626706723U, 2626490747U, 2626273151U, 2626054199U, 2625836069U, 2625621469U, 2625405073U, 2625186331U, 2624968571U, 2624753177U, 2624536573U, 2624318867U, 2624102137U, 2623886479U, 2623670167U, 2623450667U, 2623233539U, 2623015669U, 2622798911U, 2622582203U, 2622365293U, 2622146899U, 2621929019U, 2621714273U, 2621497343U, 2621280383U, 2621064059U, 2620847813U, 2620631471U, 2620414429U, 2620198877U, 2619982487U, 2619765787U, 2619550579U, 2619333139U, 2619116081U, 2618899931U, 2618682371U, 2618463889U, 2618248037U, 2618032909U, 2617816303U, 2617598407U, 2617381099U, 2617163711U, 2616947087U, 2616730153U, 2616515873U, 2616296401U, 2616081211U, 2615863463U, 2615646091U, 2615429951U, 2615214491U, 2614996649U, 2614780747U, 2614561129U, 2614343869U, 2614125539U, 2613909959U, 2613692597U, 2613477539U, 2613260467U, 2613044363U, 2612829473U, 2612611453U, 2612394649U, 2612176891U, 2611957609U, 2611740809U, 2611525001U, 2611307623U, 2611092301U, 2610874723U, 2610658429U, 2610440659U, 2610225349U, 2610009869U, 2609793761U, 2609575523U, 2609357537U, 2609140153U, 2608923287U, 2608707473U, 2608489789U, 2608273363U, 2608055477U, 2607838963U, 2607621487U, 2607403291U, 2607186877U, 2606966951U, 2606751743U, 2606533609U, 2606317411U, 2606100793U, 2605883897U, 2605667153U, 2605448753U, 2605231193U, 2605014913U, 2604797309U, 2604582131U, 2604366593U, 2604149179U, 2603934233U, 2603717729U, 2603502661U, 2603284571U, 2603067263U, 2602846133U, 2602629787U, 2602412567U, 2602195759U, 2601979477U, 2601761791U, 2601547447U, 2601328687U, 2601107869U, 2600891873U, 2600673967U, 2600457787U, 2600242111U, 2600025353U, 2599807471U, 2599589617U, 2599374607U, 2599156873U, 2598942991U, 2598725593U, 2598507889U, 2598293911U, 2598075091U, 2597857697U, 2597643011U, 2597426287U, 2597207407U, 2596990943U, 2596775537U, 2596557989U, 2596340353U, 2596123469U, 2595906763U, 2595690697U, 2595473267U, 2595256019U, 2595041297U, 2594823029U, 2594608529U, 2594391979U, 2594174971U, 2593957823U, 2593739803U, 2593521767U, 2593305053U, 2593087513U, 2592871531U, 2592654041U, 2592437929U, 2592221161U, 2592003863U, 2591787493U, 2591571179U, 2591355859U, 2591139919U, 2590921727U, 2590705829U, 2590488157U, 2590272709U, 2590057949U, 2589843371U, 2589624967U, 2589408167U, 2589194147U, 2588976583U, 2588759923U, 2588542763U, 2588325721U, 2588107619U, 2587892101U, 2587675567U, 2587460251U, 2587244389U, 2587025141U, 2586807149U, 2586590401U, 2586374317U, 2586158693U, 2585941643U, 2585722697U, 2585505907U, 2585290069U, 2585072767U, 2584855279U, 2584640579U, 2584422497U, 2584204607U, 2583990001U, 2583773659U, 2583555721U, 2583338327U, 2583121259U, 2582905651U, 2582688041U, 2582469793U, 2582254019U, 2582037103U, 2581820699U, 2581606201U, 2581389763U, 2581174697U, 2580956501U, 2580739171U, 2580522377U, 2580305843U, 2580090167U, 2579872481U, 2579656291U, 2579442023U, 2579223007U, 2579006891U, 2578788097U, 2578569919U, 2578353559U, 2578136993U, 2577920299U, 2577706259U, 2577488027U, 2577272167U, 2577055669U, 2576837143U, 2576619973U, 2576404241U, 2576188333U, 2575971793U, 2575754497U, 2575538299U, 2575321747U, 2575105031U, 2574888223U, 2574672091U, 2574456811U, 2574239957U, 2574024287U, 2573808011U, 2573590927U, 2573375023U, 2573157761U, 2572940339U, 2572723019U, 2572506899U, 2572292279U, 2572077103U, 2571858599U, 2571642473U, 2571425821U, 2571208529U, 2570990369U, 2570773441U, 2570559869U, 2570342717U, 2570124047U, 2569905977U, 2569691791U, 2569474489U, 2569259047U, 2569043497U, 2568826747U, 2568610543U, 2568394487U, 2568177319U, 2567960729U, 2567743853U, 2567527723U, 2567312149U, 2567094511U, 2566876579U, 2566660301U, 2566443881U, 2566226821U, 2566010947U, 2565794353U, 2565579977U, 2565364231U, 2565146569U, 2564930507U, 2564713583U, 2564498843U, 2564283143U, 2564066677U, 2563849087U, 2563634039U, 2563419293U, 2563201339U, 2562985517U, 2562768883U, 2562550747U, 2562331649U, 2562114743U, 2561899009U, 2561684717U, 2561469901U, 2561252557U, 2561036551U, 2560819993U, 2560600963U, 2560383131U, 2560163939U, 2559947333U, 2559732017U, 2559515687U, 2559298571U, 2559083963U, 2558866837U, 2558650291U, 2558433401U, 2558218781U, 2558002897U, 2557785821U, 2557567981U, 2557350097U, 2557134737U, 2556919997U, 2556701327U, 2556484211U, 2556267677U, 2556051929U, 2555837747U, 2555622319U, 2555406457U, 2555188639U, 2554971443U, 2554754921U, 2554539539U, 2554320997U, 2554104451U, 2553889699U, 2553674129U, 2553456461U, 2553239069U, 2553022207U, 2552804363U, 2552586833U, 2552373497U, 2552154617U, 2551939211U, 2551722221U, 2551507171U, 2551289401U, 2551072441U, 2550854513U, 2550637459U, 2550422011U, 2550204619U, 2549989213U, 2549772451U, 2549556367U, 2549344409U, 2549126737U, 2548911913U, 2548696739U, 2548480237U, 2548263559U, 2548045919U, 2547829759U, 2547611191U, 2547396581U, 2547179527U, 2546962577U, 2546746981U, 2546529199U, 2546312413U, 2546095631U, 2545880399U, 2545664809U, 2545449493U, 2545232681U, 2545014881U, 2544797323U, 2544580949U, 2544362081U, 2544144749U, 2543927899U, 2543710349U, 2543493541U, 2543278021U, 2543058757U, 2542841729U, 2542624603U, 2542408513U, 2542191709U, 2541975707U, 2541759137U, 2541542141U, 2541326009U, 2541111257U, 2540896591U, 2540679419U, 2540462593U, 2540246953U, 2540030399U, 2539813907U, 2539596281U, 2539379419U, 2539161697U, 2538945569U, 2538728831U, 2538513301U, 2538297287U, 2538080243U, 2537864347U, 2537649151U, 2537433263U, 2537217229U, 2537001541U, 2536784311U, 2536567823U, 2536351751U, 2536135703U, 2535920071U, 2535703109U, 2535485651U, 2535267913U, 2535049381U, 2534835071U, 2534618899U, 2534401141U, 2534184743U, 2533968511U, 2533751977U, 2533535057U, 2533319801U, 2533103939U, 2532889717U, 2532672287U, 2532458581U, 2532240527U, 2532024263U, 2531808221U, 2531594033U, 2531375533U, 2531159747U, 2530945583U, 2530728091U, 2530510111U, 2530291601U, 2530076701U, 2529860363U, 2529644539U, 2529427169U, 2529210923U, 2528994893U, 2528778227U, 2528561443U, 2528344967U, 2528129983U, 2527914227U, 2527697857U, 2527483549U, 2527265941U, 2527048369U, 2526831781U, 2526617609U, 2526401041U, 2526186511U, 2525969521U, 2525751269U, 2525536837U, 2525319001U, 2525102543U, 2524883839U, 2524667221U, 2524449793U, 2524233617U, 2524016647U, 2523800459U, 2523584641U, 2523368747U, 2523151927U, 2522932883U, 2522717297U, 2522499653U, 2522283347U, 2522067281U, 2521852183U, 2521635689U, 2521420529U, 2521202821U, 2520984749U, 2520769301U, 2520551983U, 2520337163U, 2520121147U, 2519904151U, 2519687407U, 2519469941U, 2519254519U, 2519038309U, 2518820833U, 2518604357U, 2518386329U, 2518171613U, 2517954631U, 2517740233U, 2517524573U, 2517306587U, 2517091133U, 2516875549U, 2516659099U, 2516440349U, 2516223511U, 2516009189U, 2515791953U, 2515574741U, 2515356967U, 2515140851U, 2514925321U, 2514708857U, 2514492941U, 2514278527U, 2514060737U, 2513844511U, 2513629211U, 2513413999U, 2513197331U, 2512982491U, 2512767919U, 2512550039U, 2512333891U, 2512118659U, 2511902051U, 2511683351U, 2511466921U, 2511249691U, 2511035069U, 2510818363U, 2510602331U, 2510385959U, 2510168447U, 2509952597U, 2509736107U, 2509518721U, 2509301233U, 2509086889U, 2508870779U, 2508654017U, 2508436187U, 2508220999U, 2508004423U, 2507788471U, 2507572759U, 2507358193U, 2507142773U, 2506926857U, 2506708901U, 2506492003U, 2506275773U, 2506059841U, 2505843227U, 2505628639U, 2505412999U, 2505197309U, 2504978291U, 2504764349U, 2504546719U, 2504331703U, 2504116333U, 2503900211U, 2503686869U, 2503468057U, 2503251931U, 2503034987U, 2502819383U, 2502601529U, 2502383761U, 2502165307U, 2501950663U, 2501732017U, 2501516429U, 2501298523U, 2501082677U, 2500865963U, 2500651249U, 2500433521U, 2500215791U, 2499999013U, 2499784513U, 2499566551U, 2499348193U, 2499133477U, 2498919091U, 2498700949U, 2498484803U, 2498268767U, 2498051131U, 2497835203U, 2497619143U, 2497401107U, 2497185151U, 2496967981U, 2496751651U, 2496536257U, 2496318859U, 2496101129U, 2495884337U, 2495667091U, 2495449483U, 2495234069U, 2495015851U, 2494798981U, 2494586071U, 2494369567U, 2494153777U, 2493936787U, 2493720041U, 2493503279U, 2493288713U, 2493072847U, 2492855327U, 2492639627U, 2492424367U, 2492206993U, 2491988657U, 2491772527U, 2491556789U, 2491340471U, 2491123897U, 2490906919U, 2490690511U, 2490473023U, 2490256157U, 2490039371U, 2489824397U, 2489606737U, 2489386771U, 2489169691U, 2488953791U, 2488738607U, 2488524167U, 2488307113U, 2488089367U, 2487872069U, 2487655309U, 2487439177U, 2487224461U, 2487006499U, 2486788963U, 2486573101U, 2486356783U, 2486139791U, 2485923217U, 2485705493U, 2485487957U, 2485271471U, 2485052771U, 2484839933U, 2484624929U, 2484408247U, 2484192527U, 2483973307U, 2483759609U, 2483543987U, 2483328161U, 2483109467U, 2482893463U, 2482675901U, 2482457161U, 2482241299U, 2482026611U, 2481810781U, 2481595201U, 2481379739U, 2481163543U, 2480947769U, 2480731301U, 2480516641U, 2480302337U, 2480086997U, 2479867427U, 2479650223U, 2479434857U, 2479215799U, 2479001621U, 2478785357U, 2478571189U, 2478356417U, 2478141383U, 2477923397U, 2477707373U, 2477488961U, 2477271481U, 2477057941U, 2476842673U, 2476624159U, 2476409263U, 2476193219U, 2475977579U, 2475761023U, 2475543029U, 2475328783U, 2475110999U, 2474890879U, 2474674327U, 2474459227U, 2474244041U, 2474029147U, 2473812701U, 2473596403U, 2473381349U, 2473165927U, 2472951167U, 2472735413U, 2472520727U, 2472307091U, 2472091723U, 2471874173U, 2471656697U, 2471441579U, 2471224237U, 2471006873U, 2470790431U, 2470575083U, 2470358629U, 2470143691U, 2469927209U, 2469711271U, 2469499757U, 2469281999U, 2469064889U, 2468847947U, 2468629519U, 2468413229U, 2468197247U, 2467983239U, 2467766527U, 2467549933U, 2467333889U, 2467116077U, 2466900307U, 2466683279U, 2466465941U, 2466249673U, 2466036497U, 2465821507U, 2465604553U, 2465388727U, 2465172733U, 2464957717U, 2464740137U, 2464523959U, 2464308311U, 2464091587U, 2463874783U, 2463659027U, 2463441269U, 2463225563U, 2463010027U, 2462791873U, 2462574523U, 2462356487U, 2462139853U, 2461922713U, 2461706603U, 2461490771U, 2461272043U, 2461055423U, 2460842491U, 2460624181U, 2460409169U, 2460192541U, 2459976229U, 2459758421U, 2459540911U, 2459325443U, 2459107793U, 2458892551U, 2458677601U, 2458461193U, 2458243223U, 2458027157U, 2457811933U, 2457594323U, 2457378923U, 2457161789U, 2456946269U, 2456730629U, 2456513639U, 2456297149U, 2456079463U, 2455863857U, 2455649191U, 2455433069U, 2455218023U, 2455004333U, 2454788311U, 2454571607U, 2454356581U, 2454139231U, 2453920571U, 2453704789U, 2453488979U, 2453271463U, 2453054039U, 2452840781U, 2452623821U, 2452410967U, 2452195063U, 2451976601U, 2451763159U, 2451547559U, 2451331549U, 2451116651U, 2450900741U, 2450682943U, 2450465513U, 2450249993U, 2450033627U, 2449816027U, 2449597919U, 2449381289U, 2449162117U, 2448946469U, 2448729883U, 2448513373U, 2448294643U, 2448077341U, 2447859991U, 2447646029U, 2447430317U, 2447215081U, 2446995403U, 2446778861U, 2446563043U, 2446347913U, 2446130653U, 2445914279U, 2445699913U, 2445483571U, 2445267343U, 2445053797U, 2444836921U, 2444622311U, 2444408423U, 2444189777U, 2443974557U, 2443759229U, 2443540247U, 2443324393U, 2443106177U, 2442890503U, 2442673561U, 2442456791U, 2442241667U, 2442025237U, 2441808221U, 2441594489U, 2441376631U, 2441160893U, 2440945873U, 2440728361U, 2440510843U, 2440294657U, 2440080157U, 2439865657U, 2439651391U, 2439433319U, 2439217799U, 2439004261U, 2438787661U, 2438570569U, 2438355421U, 2438138531U, 2437923409U, 2437707127U, 2437492373U, 2437275517U, 2437061327U, 2436844313U, 2436629971U, 2436414881U, 2436198631U, 2435981077U, 2435762471U, 2435546731U, 2435333387U, 2435115047U, 2434897891U, 2434683133U, 2434464391U, 2434247779U, 2434031381U, 2433816977U, 2433598367U, 2433382891U, 2433166579U, 2432951363U, 2432734259U, 2432519267U, 2432303207U, 2432088437U, 2431871549U, 2431654009U, 2431438567U, 2431222883U, 2431004551U, 2430789007U, 2430572239U, 2430357899U, 2430140243U, 2429923631U, 2429708647U, 2429490697U, 2429277119U, 2429059631U, 2428841551U, 2428626203U, 2428410749U, 2428193741U, 2427976979U, 2427760243U, 2427542993U, 2427328229U, 2427113081U, 2426897147U, 2426680747U, 2426465647U, 2426250041U, 2426034613U, 2425818701U, 2425601929U, 2425385723U, 2425169891U, 2424956221U, 2424741701U, 2424525161U, 2424310661U, 2424093157U, 2423875841U, 2423659657U, 2423445293U, 2423230783U, 2423015821U, 2422799177U, 2422585771U, 2422367743U, 2422152179U, 2421936493U, 2421719873U, 2421503983U, 2421287081U, 2421068899U, 2420852347U, 2420636627U, 2420420903U, 2420204023U, 2419987799U, 2419771187U, 2419554157U, 2419338787U, 2419124819U, 2418907529U, 2418693047U, 2418479549U, 2418264571U, 2418048331U, 2417831257U, 2417614807U, 2417399119U, 2417184257U, 2416967611U, 2416752409U, 2416536271U, 2416319387U, 2416105057U, 2415886301U, 2415670069U, 2415453023U, 2415235709U, 2415018433U, 2414803031U, 2414586983U, 2414370943U, 2414155213U, 2413940083U, 2413723471U, 2413506059U, 2413290541U, 2413073251U, 2412857789U, 2412643193U, 2412426707U, 2412211163U, 2411993867U, 2411776583U, 2411562311U, 2411345479U, 2411129923U, 2410914791U, 2410699133U, 2410481377U, 2410266007U, 2410048829U, 2409832129U, 2409617663U, 2409401249U, 2409184651U, 2408968189U, 2408751419U, 2408534461U, 2408320127U, 2408104597U, 2407888957U, 2407671853U, 2407458671U, 2407241731U, 2407025459U, 2406810563U, 2406592847U, 2406378241U, 2406160049U, 2405944223U, 2405727229U, 2405511811U, 2405297623U, 2405082629U, 2404866197U, 2404648957U, 2404432183U, 2404215091U, 2403999487U, 2403782401U, 2403567059U, 2403350249U, 2403134623U, 2402919731U, 2402704211U, 2402489473U, 2402272571U, 2402054147U, 2401837289U, 2401621687U, 2401406131U, 2401189979U, 2400973123U, 2400757439U, 2400539651U, 2400323077U, 2400105919U, 2399889293U, 2399675141U, 2399460449U, 2399245733U, 2399029231U, 2398813981U, 2398597219U, 2398379413U, 2398164833U, 2397948569U, 2397732923U, 2397515801U, 2397299549U, 2397085021U, 2396867801U, 2396653109U, 2396435089U, 2396217739U, 2395999153U, 2395783231U, 2395566959U, 2395350827U, 2395135343U, 2394920179U, 2394702979U, 2394486719U, 2394270059U, 2394055669U, 2393840479U, 2393622653U, 2393406401U, 2393190893U, 2392975477U, 2392759277U, 2392544101U, 2392327433U, 2392113121U, 2391896839U, 2391678997U, 2391461393U, 2391247091U, 2391031847U, 2390816957U, 2390600393U, 2390384861U, 2390168317U, 2389953641U, 2389736719U, 2389520779U, 2389304989U, 2389091333U, 2388874603U, 2388658969U, 2388442499U, 2388225803U, 2388006067U, 2387791751U, 2387577977U, 2387360413U, 2387144453U, 2386930687U, 2386714199U, 2386497403U, 2386279781U, 2386064861U, 2385851509U, 2385635543U, 2385420431U, 2385202607U, 2384985487U, 2384769461U, 2384554421U, 2384337071U, 2384122519U, 2383906543U, 2383692127U, 2383476829U, 2383262647U, 2383047829U, 2382830459U, 2382615419U, 2382400133U, 2382184537U, 2381968223U, 2381751839U, 2381535539U, 2381318791U, 2381103733U, 2380886887U, 2380673297U, 2380455919U, 2380238759U, 2380021361U, 2379807751U, 2379591671U, 2379377153U, 2379160853U, 2378944891U, 2378727539U, 2378510513U, 2378293279U, 2378076593U, 2377861237U, 2377644917U, 2377429697U, 2377213193U, 2376996647U, 2376782251U, 2376566029U, 2376349571U, 2376133733U, 2375919907U, 2375704391U, 2375485579U, 2375270591U, 2375054579U, 2374837373U, 2374621817U, 2374406971U, 2374192853U, 2373976057U, 2373760531U, 2373545989U, 2373327241U, 2373111347U, 2372894317U, 2372680469U, 2372464907U, 2372249629U, 2372032771U, 2371818637U, 2371601437U, 2371383727U, 2371168507U, 2370952511U, 2370736603U, 2370518873U, 2370304579U, 2370089479U, 2369872579U, 2369658763U, 2369441329U, 2369224889U, 2369010191U, 2368793017U, 2368578991U, 2368362539U, 2368147211U, 2367932341U, 2367716921U, 2367502859U, 2367286853U, 2367071513U, 2366857811U, 2366642171U, 2366426123U, 2366209843U, 2365994641U, 2365779181U, 2365561397U, 2365345733U, 2365130297U, 2364913519U, 2364698551U, 2364482947U, 2364266941U, 2364048899U, 2363831777U, 2363616797U, 2363399443U, 2363185907U, 2362970219U, 2362753663U, 2362538753U, 2362325137U, 2362108759U, 2361891607U, 2361677057U, 2361460697U, 2361244889U, 2361029521U, 2360811251U, 2360593589U, 2360377871U, 2360160973U, 2359944163U, 2359729637U, 2359513753U, 2359298749U, 2359081141U, 2358864077U, 2358647191U, 2358433151U, 2358217307U, 2358002501U, 2357786393U, 2357572391U, 2357355223U, 2357140127U, 2356922443U, 2356706927U, 2356491167U, 2356276309U, 2356060219U, 2355843337U, 2355628351U, 2355412211U, 2355196939U, 2354979299U, 2354762923U, 2354547589U, 2354332327U, 2354116403U, 2353898347U, 2353682899U, 2353467719U, 2353251041U, 2353034861U, 2352821521U, 2352608729U, 2352391733U, 2352177071U, 2351959373U, 2351743871U, 2351527331U, 2351311103U, 2351095787U, 2350880537U, 2350663867U, 2350448987U, 2350233607U, 2350018009U, 2349802193U, 2349585643U, 2349371473U, 2349154459U, 2348938483U, 2348723393U, 2348506163U, 2348290627U, 2348073529U, 2347858001U, 2347641251U, 2347426061U, 2347210109U, 2346994847U, 2346777833U, 2346563741U, 2346347957U, 2346130597U, 2345915233U, 2345700967U, 2345483321U, 2345268559U, 2345055421U, 2344836029U, 2344620749U, 2344404077U, 2344188467U, 2343971621U, 2343753989U, 2343537377U, 2343322691U, 2343106237U, 2342889763U, 2342675663U, 2342461337U, 2342245693U, 2342028907U, 2341811071U, 2341594513U, 2341380673U, 2341165823U, 2340950653U, 2340737603U, 2340521567U, 2340303299U, 2340086269U, 2339869699U, 2339651581U, 2339437049U, 2339222891U, 2339007247U, 2338790449U, 2338576003U, 2338361213U, 2338146329U, 2337927731U, 2337714713U, 2337499061U, 2337281887U, 2337065981U, 2336851397U, 2336635331U, 2336418673U, 2336202863U, 2335987399U, 2335772269U, 2335553713U, 2335341083U, 2335126153U, 2334909481U, 2334693863U, 2334479723U, 2334262787U, 2334047503U, 2333831449U, 2333616709U, 2333401867U, 2333186161U, 2332970869U, 2332755569U, 2332541017U, 2332323197U, 2332106743U, 2331891473U, 2331676169U, 2331460273U, 2331243809U, 2331029143U, 2330814481U, 2330599837U, 2330384489U, 2330164511U, 2329947589U, 2329731637U, 2329515427U, 2329299289U, 2329084333U, 2328867469U, 2328652009U, 2328436417U, 2328218201U, 2328001597U, 2327784983U, 2327571221U, 2327354473U, 2327138579U, 2326921769U, 2326706687U, 2326492871U, 2326275509U, 2326060369U, 2325845507U, 2325630133U, 2325415607U, 2325198173U, 2324982083U, 2324766023U, 2324552177U, 2324336591U, 2324119951U, 2323903651U, 2323689751U, 2323472693U, 2323258859U, 2323044107U, 2322827393U, 2322611059U, 2322394247U, 2322179177U, 2321964247U, 2321747737U, 2321531423U, 2321315869U, 2321098673U, 2320883861U, 2320668953U, 2320454753U, 2320239629U, 2320027529U, 2319811937U, 2319596449U, 2319378899U, 2319162739U, 2318945131U, 2318727809U, 2318510639U, 2318296021U, 2318078921U, 2317863337U, 2317645181U, 2317427533U, 2317209683U, 2316994513U, 2316778027U, 2316562777U, 2316347219U, 2316132769U, 2315916809U, 2315702513U, 2315487613U, 2315271197U, 2315055979U, 2314841521U, 2314625671U, 2314411019U, 2314197409U, 2313983249U, 2313767077U, 2313551609U, 2313335711U, 2313119387U, 2312904719U, 2312689363U, 2312472829U, 2312256629U, 2312040277U, 2311822883U, 2311606477U, 2311392157U, 2311180061U, 2310965303U, 2310751957U, 2310537049U, 2310322247U, 2310106033U, 2309889749U, 2309673881U, 2309456431U, 2309242093U, 2309026361U, 2308810601U, 2308595363U, 2308379243U, 2308164263U, 2307949739U, 2307733583U, 2307514733U, 2307299173U, 2307083393U, 2306868197U, 2306651671U, 2306436793U, 2306223461U, 2306007931U, 2305792133U, 2305573537U, 2305358221U, 2305141999U, 2304925529U, 2304710599U, 2304495799U, 2304279137U, 2304063901U, 2303847761U, 2303633251U, 2303417483U, 2303201833U, 2302986457U, 2302770469U, 2302556077U, 2302338421U, 2302121279U, 2301906433U, 2301689417U, 2301475069U, 2301260047U, 2301042587U, 2300826287U, 2300609203U, 2300394193U, 2300180731U, 2299964179U, 2299748471U, 2299534609U, 2299320679U, 2299105141U, 2298888577U, 2298672281U, 2298456929U, 2298242797U, 2298027227U, 2297811077U, 2297594521U, 2297378177U, 2297160329U, 2296945369U, 2296729447U, 2296513621U, 2296300339U, 2296084877U, 2295871601U, 2295656147U, 2295440813U, 2295224741U, 2295008923U, 2294792809U, 2294578633U, 2294364481U, 2294148251U, 2293932703U, 2293718041U, 2293502089U, 2293287109U, 2293071899U, 2292855451U, 2292641287U, 2292422921U, 2292208781U, 2291993437U, 2291777737U, 2291564321U, 2291348981U, 2291133973U, 2290918037U, 2290702693U, 2290489129U, 2290270789U, 2290053737U, 2289838373U, 2289621101U, 2289405653U, 2289190741U, 2288976737U, 2288762257U, 2288547733U, 2288330609U, 2288117243U, 2287900829U, 2287686169U, 2287468607U, 2287251751U, 2287037479U, 2286824389U, 2286608047U, 2286394637U, 2286182329U, 2285966717U, 2285752123U, 2285536247U, 2285320237U, 2285106023U, 2284891771U, 2284674407U, 2284457257U, 2284241537U, 2284026853U, 2283811573U, 2283596327U, 2283380261U, 2283161161U, 2282946331U, 2282730977U, 2282518223U, 2282301737U, 2282084897U, 2281870651U, 2281654673U, 2281437143U, 2281221827U, 2281004771U, 2280789233U, 2280573557U, 2280359363U, 2280142591U, 2279927491U, 2279711261U, 2279494291U, 2279276653U, 2279060527U, 2278846901U, 2278628909U, 2278411781U, 2278196407U, 2277980993U, 2277763753U, 2277549089U, 2277334771U, 2277118411U, 2276902399U, 2276688613U, 2276472853U, 2276256329U, 2276042711U, 2275828517U, 2275612679U, 2275397063U, 2275181479U, 2274965159U, 2274748517U, 2274535463U, 2274319609U, 2274107327U, 2273891549U, 2273676997U, 2273462767U, 2273248399U, 2273032639U, 2272818917U, 2272605253U, 2272389437U, 2272172081U, 2271957209U, 2271743939U, 2271528041U, 2271313729U, 2271098429U, 2270884471U, 2270669353U, 2270455567U, 2270240681U, 2270025151U, 2269809527U, 2269596941U, 2269382131U, 2269165319U, 2268951577U, 2268735797U, 2268517921U, 2268302123U, 2268086111U, 2267870603U, 2267656903U, 2267442757U, 2267227777U, 2267012081U, 2266797487U, 2266582793U, 2266368007U, 2266153339U, 2265938137U, 2265722351U, 2265506083U, 2265290141U, 2265075049U, 2264860427U, 2264644769U, 2264428451U, 2264214773U, 2263997711U, 2263782289U, 2263565729U, 2263352327U, 2263137001U, 2262920839U, 2262705761U, 2262492191U, 2262278069U, 2262062813U, 2261848051U, 2261633197U, 2261418409U, 2261204657U, 2260990273U, 2260774759U, 2260560277U, 2260345247U, 2260129169U, 2259914563U, 2259700207U, 2259484361U, 2259267151U, 2259053309U, 2258839753U, 2258625431U, 2258409821U, 2258192591U, 2257975997U, 2257761001U, 2257544407U, 2257329817U, 2257113083U, 2256895787U, 2256679597U, 2256466463U, 2256251911U, 2256035759U, 2255819249U, 2255604433U, 2255387119U, 2255171729U, 2254957261U, 2254742569U, 2254525633U, 2254311419U, 2254096151U, 2253881089U, 2253665009U, 2253448303U, 2253232537U, 2253017629U, 2252801377U, 2252586353U, 2252370139U, 2252154943U, 2251940153U, 2251724287U, 2251508141U, 2251293211U, 2251080107U, 2250864989U, 2250650741U, 2250437317U, 2250221147U, 2250007937U, 2249792849U, 2249577443U, 2249360747U, 2249143511U, 2248928303U, 2248714289U, 2248500389U, 2248282607U, 2248066363U, 2247851681U, 2247636583U, 2247421817U, 2247207073U, 2246990947U, 2246775449U, 2246560403U, 2246348051U, 2246132507U, 2245917799U, 2245703177U, 2245488887U, 2245273741U, 2245058089U, 2244843721U, 2244629719U, 2244412999U, 2244197437U, 2243982737U, 2243769653U, 2243551433U, 2243337457U, 2243120419U, 2242904581U, 2242688449U, 2242473991U, 2242259861U, 2242043599U, 2241825133U, 2241609701U, 2241395071U, 2241180787U, 2240967343U, 2240751923U, 2240536327U, 2240319527U, 2240105237U, 2239888687U, 2239674629U, 2239458203U, 2239244101U, 2239028387U, 2238815521U, 2238600541U, 2238383569U, 2238167417U, 2237952851U, 2237735261U, 2237518081U, 2237301083U, 2237088229U, 2236873019U, 2236658693U, 2236444453U, 2236229201U, 2236016201U, 2235800159U, 2235586427U, 2235370021U, 2235154721U, 2234939537U, 2234725013U, 2234510909U, 2234295191U, 2234081099U, 2233866847U, 2233652459U, 2233436629U, 2233218679U, 2233003183U, 2232789619U, 2232571813U, 2232355067U, 2232138367U, 2231922923U, 2231708449U, 2231493413U, 2231277413U, 2231061221U, 2230846967U, 2230632791U, 2230417751U, 2230201531U, 2229985133U, 2229769579U, 2229554461U, 2229340651U, 2229128767U, 2228912453U, 2228698319U, 2228481883U, 2228267953U, 2228051513U, 2227836329U, 2227622203U, 2227408321U, 2227192519U, 2226974441U, 2226760573U, 2226547241U, 2226332261U, 2226116807U, 2225900503U, 2225684207U, 2225468123U, 2225253677U, 2225039759U, 2224826473U, 2224610537U, 2224393937U, 2224179077U, 2223962707U, 2223747133U, 2223531173U, 2223316279U, 2223098953U, 2222882659U, 2222668169U, 2222453179U, 2222236673U, 2222020433U, 2221805137U, 2221591007U, 2221375883U, 2221160077U, 2220945563U, 2220729323U, 2220513517U, 2220299443U, 2220085447U, 2219871361U, 2219657239U, 2219440397U, 2219226643U, 2219013089U, 2218798327U, 2218581803U, 2218365979U, 2218151977U, 2217936223U, 2217720587U, 2217503231U, 2217288769U, 2217073951U, 2216859137U, 2216643199U, 2216429123U, 2216217607U, 2216003639U, 2215785851U, 2215570163U, 2215356079U, 2215137607U, 2214921911U, 2214707081U, 2214490303U, 2214276599U, 2214059119U, 2213841127U, 2213626687U, 2213409799U, 2213195329U, 2212980269U, 2212766779U, 2212554011U, 2212339553U, 2212125329U, 2211910373U, 2211695159U, 2211479729U, 2211262793U, 2211046499U, 2210831927U, 2210615761U, 2210401003U, 2210185847U, 2209971091U, 2209755451U, 2209536949U, 2209322803U, 2209108799U, 2208892547U, 2208677441U, 2208463339U, 2208247117U, 2208034453U, 2207819147U, 2207604541U, 2207391643U, 2207176733U, 2206959901U, 2206745909U, 2206531433U, 2206317367U, 2206101241U, 2205886327U, 2205671543U, 2205456833U, 2205243319U, 2205027023U, 2204811307U, 2204595641U, 2204379659U, 2204165801U, 2203948541U, 2203733117U, 2203517681U, 2203300223U, 2203086371U, 2202871961U, 2202654689U, 2202436493U, 2202221279U, 2202004547U, 2201791373U, 2201574377U, 2201360167U, 2201145061U, 2200928497U, 2200714381U, 2200498441U, 2200281751U, 2200068601U, 2199853559U, 2199635749U, 2199418691U, 2199204421U, 2198990219U, 2198773793U, 2198559829U, 2198343977U, 2198127923U, 2197912859U, 2197698263U, 2197483471U, 2197269587U, 2197052761U, 2196839891U, 2196623977U, 2196407699U, 2196193177U, 2195978129U, 2195763049U, 2195548093U, 2195333801U, 2195118769U, 2194903967U, 2194689127U, 2194475233U, 2194259981U, 2194045093U, 2193829657U, 2193615779U, 2193400303U, 2193183463U, 2192968597U, 2192753141U, 2192540993U, 2192325229U, 2192109989U, 2191894543U, 2191680791U, 2191463497U, 2191249147U, 2191034509U, 2190820267U, 2190606317U, 2190390899U, 2190174199U, 2189958893U, 2189743967U, 2189528807U, 2189313311U, 2189096633U, 2188880977U, 2188665929U, 2188452439U, 2188238047U, 2188022989U, 2187806953U, 2187592339U, 2187375787U, 2187160567U, 2186947853U, 2186734469U, 2186520907U, 2186305777U, 2186090447U, 2185874939U, 2185660657U, 2185444423U, 2185228519U, 2185014731U, 2184798521U, 2184583937U, 2184368803U, 2184153427U, 2183937773U, 2183724187U, 2183508791U, 2183292037U, 2183077639U, 2182862839U, 2182647839U, 2182430443U, 2182214731U, 2181997007U, 2181781843U, 2181567317U, 2181352403U, 2181134429U, 2180919913U, 2180705173U, 2180489261U, 2180274289U, 2180059613U, 2179844789U, 2179628147U, 2179411453U, 2179195943U, 2178981173U, 2178765881U, 2178552247U, 2178338983U, 2178124589U, 2177911657U, 2177695537U, 2177480443U, 2177264501U, 2177048869U, 2176833577U, 2176622813U, 2176405919U, 2176191037U, 2175977563U, 2175761669U, 2175546547U, 2175332921U, 2175118607U, 2174905169U, 2174691347U, 2174474537U, 2174260867U, 2174044051U, 2173830367U, 2173613773U, 2173400321U, 2173182191U, 2172969907U, 2172756941U, 2172541463U, 2172324157U, 2172107263U, 2171892293U, 2171676751U, 2171462441U, 2171245553U, 2171030177U, 2170817087U, 2170603703U, 2170388111U, 2170175779U, 2169961919U, 2169744097U, 2169531443U, 2169315259U, 2169100067U, 2168884763U, 2168668939U, 2168454077U, 2168240089U, 2168025037U, 2167808509U, 2167594523U, 2167378901U, 2167164107U, 2166947911U, 2166735047U, 2166519647U, 2166305593U, 2166090191U, 2165877419U, 2165660327U, 2165445811U, 2165231377U, 2165016067U, 2164800061U, 2164584337U, 2164370653U, 2164156157U, 2163937541U, 2163722377U, 2163510857U, 2163294317U, 2163076691U, 2162863051U, 2162648759U, 2162435339U, 2162219417U, 2162005633U, 2161788371U, 2161572109U, 2161357039U, 2161143913U, 2160930071U, 2160715201U, 2160498959U, 2160284281U, 2160071057U, 2159857957U, 2159644441U, 2159431277U, 2159216399U, 2158999463U, 2158783609U, 2158570681U, 2158353931U, 2158136809U, 2157922717U, 2157706357U, 2157490921U, 2157278737U, 2157063401U, 2156846201U, 2156631929U, 2156417051U, 2156202101U, 2155984819U, 2155770917U, 2155555967U, 2155339559U, 2155125689U, 2154911813U, 2154697789U, 2154481897U, 2154267373U, 2154053557U, 2153838251U, 2153623891U, 2153409701U, 2153194049U, 2152977367U, 2152761631U, 2152549747U, 2152334189U, 2152120979U, 2151905143U, 2151690707U, 2151475523U, 2151261493U, 2151045469U, 2150830289U, 2150614667U, 2150399893U, 2150187059U, 2149972697U, 2149756703U, 2149543889U, 2149327627U, 2149112429U, 2148896411U, 2148679669U, 2148466009U, 2148250061U, 2148035749U, 2147821513U, 2147607401U, 2147392201U, 2147178329U, 2146961347U, 2146748057U, 2146533959U, 2146317191U, 2146102477U, 2145889267U, 2145675289U, 2145460909U, 2145248167U, 2145033001U, 2144818411U, 2144602787U, 2144389217U, 2144174281U, 2143959581U, 2143744997U, 2143529491U, 2143314917U, 2143101241U, 2142887399U, 2142671353U, 2142457117U, 2142240403U, 2142027137U, 2141814319U, 2141596757U, 2141383633U, 2141168963U, 2140954709U, 2140740733U, 2140527553U, 2140313443U, 2140096993U, 2139883771U, 2139669449U, 2139456377U, 2139240409U, 2139025991U, 2138809969U, 2138593397U, 2138376997U, 2138163977U, 2137948823U, 2137734017U, 2137517407U, 2137301819U, 2137086989U, 2136872957U, 2136658427U, 2136442873U, 2136229309U, 2136014159U, 2135798803U, 2135582873U, 2135366899U, 2135151517U, 2134935289U, 2134721027U, 2134508581U, 2134293869U, 2134076557U, 2133860653U, 2133647933U, 2133431987U, 2133216271U, 2133000449U, 2132785727U, 2132571839U, 2132356769U, 2132141177U, 2131927409U, 2131711019U, 2131494667U, 2131280273U, 2131062221U, 2130845993U, 2130632453U, 2130418541U, 2130203653U, 2129987053U, 2129772677U, 2129556967U, 2129342653U, 2129127817U, 2128912277U, 2128695007U, 2128478327U, 2128264429U, 2128050467U, 2127837703U, 2127623801U, 2127408931U, 2127193907U, 2126978179U, 2126761667U, 2126547263U, 2126332057U, 2126115379U, 2125901263U, 2125684789U, 2125470601U, 2125257157U, 2125041631U, 2124825877U, 2124610991U, 2124395233U, 2124182597U, 2123968739U, 2123753647U, 2123537153U, 2123322571U, 2123108069U, 2122892371U, 2122672733U, 2122457621U, 2122243469U, 2122030279U, 2121815011U, 2121602663U, 2121386779U, 2121170593U, 2120957849U, 2120743579U, 2120527163U, 2120310461U, 2120094611U, 2119880879U, 2119665617U, 2119452541U, 2119237949U, 2119023493U, 2118807931U, 2118592439U, 2118377557U, 2118162689U, 2117948653U, 2117734709U, 2117518787U, 2117303467U, 2117087933U, 2116872119U, 2116657061U, 2116443677U, 2116230829U, 2116016173U, 2115801371U, 2115585181U, 2115369701U, 2115153727U, 2114938379U, 2114722927U, 2114507833U, 2114296181U, 2114083091U, 2113870123U, 2113654157U, 2113441021U, 2113224103U, 2113012547U, 2112798203U, 2112583841U, 2112367709U, 2112151631U, 2111937301U, 2111724911U, 2111509861U, 2111295701U, 2111081629U, 2110866419U, 2110651363U, 2110438397U, 2110223261U, 2110009829U, 2109797897U, 2109582913U, 2109369523U, 2109152387U, 2108937829U, 2108720821U, 2108508851U, 2108295751U, 2108080607U, 2107865293U, 2107650091U, 2107436741U, 2107222657U, 2107007647U, 2106792673U, 2106576917U, 2106359917U, 2106144197U, 2105930401U, 2105715049U, 2105501309U, 2105287433U, 2105073029U, 2104858771U, 2104647023U, 2104433021U, 2104219151U, 2104005019U, 2103788759U, 2103574393U, 2103359521U, 2103143461U, 2102929097U, 2102714129U, 2102500709U, 2102287063U, 2102071733U, 2101858169U, 2101644367U, 2101430251U, 2101215421U, 2101000631U, 2100786707U, 2100573677U, 2100356977U, 2100144953U, 2099929943U, 2099714203U, 2099498983U, 2099284679U, 2099070541U, 2098855537U, 2098641661U, 2098426349U, 2098211051U, 2097996079U, 2097777797U, 2097563203U, 2097349259U, 2097134239U, 2096920559U, 2096705759U, 2096492033U, 2096275873U, 2096060987U, 2095845113U, 2095630739U, 2095417099U, 2095204193U, 2094990617U, 2094777257U, 2094563689U, 2094349931U, 2094135709U, 2093917997U, 2093703973U, 2093489929U, 2093275181U, 2093060483U, 2092847143U, 2092631617U, 2092415669U, 2092200577U, 2091986231U, 2091773147U, 2091560467U, 2091343981U, 2091128869U, 2090914373U, 2090697439U, 2090484707U, 2090271769U, 2090056609U, 2089841513U, 2089626109U, 2089413709U, 2089199999U, 2088986687U, 2088770249U, 2088557147U, 2088342253U, 2088126977U, 2087912909U, 2087700257U, 2087485703U, 2087269703U, 2087054653U, 2086840409U, 2086626083U, 2086411141U, 2086194871U, 2085979487U, 2085764441U, 2085549139U, 2085334943U, 2085119369U, 2084905873U, 2084691677U, 2084475109U, 2084259323U, 2084044163U, 2083831573U, 2083616219U, 2083402001U, 2083186583U, 2082971789U, 2082759373U, 2082545177U, 2082330127U, 2082117649U, 2081901823U, 2081688289U, 2081474251U, 2081261443U, 2081046613U, 2080831771U, 2080617281U, 2080400599U, 2080186891U, 2079971801U, 2079758281U, 2079542903U, 2079328387U, 2079114383U, 2078897809U, 2078683337U, 2078472707U, 2078257351U, 2078045183U, 2077830827U, 2077616641U, 2077400671U, 2077185667U, 2076969607U, 2076755251U, 2076538223U, 2076323617U, 2076108059U, 2075893903U, 2075679917U, 2075462471U, 2075249549U, 2075035973U, 2074823669U, 2074609139U, 2074395527U, 2074179623U, 2073964481U, 2073751951U, 2073538321U, 2073326219U, 2073110059U, 2072896093U, 2072680901U, 2072466947U, 2072251847U, 2072036851U, 2071820351U, 2071608421U, 2071392137U, 2071176323U, 2070961337U, 2070746221U, 2070532231U, 2070319253U, 2070103601U, 2069889037U, 2069675147U, 2069458541U, 2069244319U, 2069030893U, 2068817347U, 2068602559U, 2068387669U, 2068172839U, 2067958549U, 2067743423U, 2067529463U, 2067313427U, 2067097567U, 2066881273U, 2066666963U, 2066452979U, 2066238739U, 2066026559U, 2065812179U, 2065594439U, 2065379831U, 2065165519U, 2064950903U, 2064736903U, 2064522697U, 2064309791U, 2064095249U, 2063882111U, 2063669011U, 2063454871U, 2063240269U, 2063025931U, 2062811071U, 2062597567U, 2062384199U, 2062167797U, 2061955403U, 2061740983U, 2061522713U, 2061310241U, 2061094153U, 2060880043U, 2060665253U, 2060449087U, 2060235917U, 2060020987U, 2059806971U, 2059590917U, 2059377119U, 2059160731U, 2058946231U, 2058731617U, 2058517511U, 2058304147U, 2058088283U, 2057873417U, 2057656157U, 2057439991U, 2057225377U, 2057011381U, 2056797829U, 2056582037U, 2056367063U, 2056152523U, 2055938219U, 2055726181U, 2055511897U, 2055295643U, 2055080669U, 2054867093U, 2054653849U, 2054438983U, 2054223761U, 2054008921U, 2053794817U, 2053582747U, 2053368827U, 2053151159U, 2052935029U, 2052719261U, 2052503023U, 2052290129U, 2052077113U, 2051862493U, 2051648983U, 2051433383U, 2051217811U, 2051001461U, 2050788151U, 2050575347U, 2050360619U, 2050148801U, 2049934517U, 2049720053U, 2049507997U, 2049295841U, 2049080531U, 2048866219U, 2048651251U, 2048437513U, 2048223949U, 2048009279U, 2047791847U, 2047578653U, 2047363049U, 2047149409U, 2046934993U, 2046720463U, 2046506843U, 2046291199U, 2046077087U, 2045861539U, 2045647739U, 2045434463U, 2045221103U, 2045007113U, 2044792049U, 2044576769U, 2044363891U, 2044149299U, 2043936319U, 2043720761U, 2043504637U, 2043292763U, 2043078641U, 2042866541U, 2042653213U, 2042438569U, 2042225033U, 2042009527U, 2041792717U, 2041579739U, 2041363763U, 2041147879U, 2040934349U, 2040718517U, 2040504493U, 2040289607U, 2040074797U, 2039858837U, 2039645171U, 2039430467U, 2039216407U, 2039003861U, 2038790651U, 2038576081U, 2038359943U, 2038146151U, 2037932623U, 2037716911U, 2037503981U, 2037287653U, 2037073373U, 2036858851U, 2036643893U, 2036429471U, 2036215387U, 2036000677U, 2035784449U, 2035570907U, 2035354273U, 2035139747U, 2034925411U, 2034711461U, 2034497363U, 2034284051U, 2034072233U, 2033859251U, 2033644259U, 2033431303U, 2033216407U, 2033002691U, 2032786661U, 2032573117U, 2032359227U, 2032146469U, 2031931939U, 2031718771U, 2031504173U, 2031288319U, 2031072521U, 2030860333U, 2030646193U, 2030432291U, 2030217193U, 2030003243U, 2029787321U, 2029573459U, 2029359097U, 2029144891U, 2028930721U, 2028716447U, 2028500113U, 2028285971U, 2028072061U, 2027854601U, 2027639671U, 2027425307U, 2027211397U, 2026995167U, 2026782997U, 2026568471U, 2026352353U, 2026140001U, 2025926909U, 2025711001U, 2025496607U, 2025283669U, 2025069139U, 2024855797U, 2024642273U, 2024426897U, 2024211479U, 2024000453U, 2023784047U, 2023568411U, 2023353641U, 2023137863U, 2022923561U, 2022708829U, 2022496247U, 2022282133U, 2022068203U, 2021852201U, 2021636473U, 2021423681U, 2021208647U, 2020993567U, 2020777973U, 2020563967U, 2020350851U, 2020136771U, 2019921859U, 2019706397U, 2019493009U, 2019277723U, 2019064589U, 2018850983U, 2018639201U, 2018424713U, 2018208637U, 2017993009U, 2017777939U, 2017562731U, 2017348253U, 2017134761U, 2016919963U, 2016705421U, 2016490933U, 2016277763U, 2016063589U, 2015850721U, 2015637157U, 2015421799U, 2015209013U, 2014994939U, 2014782433U, 2014566331U, 2014351637U, 2014137989U, 2013925063U, 2013711647U, 2013499049U, 2013286763U, 2013075139U, 2012859839U, 2012647649U, 2012431891U, 2012216867U, 2012004413U, 2011791329U, 2011576517U, 2011362433U, 2011148519U, 2010933593U, 2010720161U, 2010505199U, 2010290519U, 2010075337U, 2009859959U, 2009645977U, 2009431447U, 2009218259U, 2009003429U, 2008787149U, 2008574681U, 2008360573U, 2008145099U, 2007930259U, 2007716329U, 2007502459U, 2007286573U, 2007071909U, 2006858713U, 2006644403U, 2006430821U, 2006218061U, 2006003647U, 2005789979U, 2005575623U, 2005364209U, 2005151389U, 2004935551U, 2004721613U, 2004506423U, 2004292663U, 2004078577U, 2003863541U, 2003650409U, 2003440357U, 2003225123U, 2003010937U, 2002796941U, 2002581443U, 2002369483U, 2002153999U, 2001941651U, 2001729157U, 2001516353U, 2001301853U, 2001088319U, 2000875991U, 2000662501U, 2000447263U, 2000234189U, 2000021819U, 1999805713U, 1999591519U, 1999377031U, 1999163767U, 1998946837U, 1998733271U, 1998518189U, 1998303647U, 1998088991U, 1997874821U, 1997659667U, 1997445841U, 1997235533U, 1997021729U, 1996806061U, 1996589219U, 1996372933U, 1996159237U, 1995945257U, 1995733277U, 1995516739U, 1995302677U, 1995089477U, 1994873599U, 1994659547U, 1994447443U, 1994233277U, 1994020141U, 1993804573U, 1993591349U, 1993377929U, 1993161893U, 1992947581U, 1992735991U, 1992521611U, 1992307687U, 1992093223U, 1991878487U, 1991663129U, 1991450303U, 1991237041U, 1991022613U, 1990808779U, 1990594729U, 1990379987U, 1990165141U, 1989950267U, 1989736093U, 1989522463U, 1989308263U, 1989094451U, 1988879909U, 1988668001U, 1988453771U, 1988239081U, 1988022431U, 1987809871U, 1987597069U, 1987382933U, 1987166897U, 1986953041U, 1986741131U, 1986525991U, 1986312707U, 1986097783U, 1985884553U, 1985668123U, 1985453983U, 1985239303U, 1985025799U, 1984808653U, 1984596529U, 1984382563U, 1984169507U, 1983958577U, 1983743011U, 1983527261U, 1983314681U, 1983099403U, 1982885549U, 1982671441U, 1982456033U, 1982243303U, 1982026903U, 1981813313U, 1981600333U, 1981386437U, 1981174301U, 1980956819U, 1980744853U, 1980530767U, 1980316879U, 1980102307U, 1979890327U, 1979675213U, 1979460403U, 1979246653U, 1979031823U, 1978817069U, 1978604077U, 1978390889U, 1978178009U, 1977963947U, 1977749701U, 1977534121U, 1977320621U, 1977108079U, 1976893027U, 1976678113U, 1976464909U, 1976253337U, 1976037941U, 1975823131U, 1975607279U, 1975395517U, 1975179749U, 1974966589U, 1974752149U, 1974538739U, 1974325789U, 1974111697U, 1973900053U, 1973685503U, 1973472451U, 1973255929U, 1973042179U, 1972827331U, 1972612991U, 1972401703U, 1972186661U, 1971974149U, 1971760337U, 1971547093U, 1971334973U, 1971122009U, 1970910197U, 1970696591U, 1970480849U, 1970265071U, 1970049421U, 1969836083U, 1969621729U, 1969408369U, 1969193627U, 1968979921U, 1968765377U, 1968552293U, 1968339173U, 1968125447U, 1967912579U, 1967699759U, 1967485391U, 1967270213U, 1967054437U, 1966839869U, 1966624633U, 1966410613U, 1966194941U, 1965982463U, 1965767701U, 1965554191U, 1965341783U, 1965125849U, 1964913271U, 1964698751U, 1964484989U, 1964271983U, 1964054333U, 1963841857U, 1963626869U, 1963415351U, 1963201589U, 1962987557U, 1962773513U, 1962559147U, 1962341369U, 1962128447U, 1961914793U, 1961701477U, 1961488423U, 1961275501U, 1961060869U, 1960848299U, 1960633061U, 1960417241U, 1960204229U, 1959988241U, 1959770467U, 1959554581U, 1959344813U, 1959133037U, 1958918903U, 1958704933U, 1958490823U, 1958275273U, 1958060563U, 1957848889U, 1957634227U, 1957421957U, 1957206529U, 1956991991U, 1956777359U, 1956563137U, 1956349627U, 1956136801U, 1955922713U, 1955709199U, 1955494259U, 1955281897U, 1955067349U, 1954854449U, 1954638899U, 1954424539U, 1954210151U, 1953996521U, 1953781757U, 1953568061U, 1953354313U, 1953138323U, 1952924947U, 1952711471U, 1952499607U, 1952285947U, 1952073337U, 1951860359U, 1951646947U, 1951429421U, 1951215599U, 1951001777U, 1950789343U, 1950577147U, 1950364093U, 1950151409U, 1949937593U, 1949722681U, 1949510449U, 1949296903U, 1949084747U, 1948870019U, 1948653431U, 1948438379U, 1948225849U, 1948010171U, 1947797431U, 1947584029U, 1947369353U, 1947156833U, 1946945327U, 1946730593U, 1946516281U, 1946303641U, 1946090359U, 1945876957U, 1945662233U, 1945447381U, 1945234493U, 1945019243U, 1944807173U, 1944592619U, 1944378089U, 1944164279U, 1943952403U, 1943736161U, 1943523271U, 1943309701U, 1943097553U, 1942884479U, 1942669921U, 1942453361U, 1942239361U, 1942026481U, 1941812861U, 1941599599U, 1941383267U, 1941169357U, 1940955971U, 1940740007U, 1940530087U, 1940315623U, 1940101721U, 1939887941U, 1939671631U, 1939459111U, 1939246339U, 1939030463U, 1938815773U, 1938601583U, 1938388579U, 1938173087U, 1937959571U, 1937746337U, 1937530079U, 1937314759U, 1937100097U, 1936885309U, 1936673131U, 1936458907U, 1936247077U, 1936033289U, 1935819463U, 1935605239U, 1935390563U, 1935176689U, 1934965691U, 1934751667U, 1934537677U, 1934322787U, 1934110439U, 1933897331U, 1933680613U, 1933466789U, 1933253327U, 1933040761U, 1932827927U, 1932614807U, 1932400721U, 1932186007U, 1931972417U, 1931759197U, 1931545013U, 1931330741U, 1931116997U, 1930902073U, 1930690271U, 1930477583U, 1930262641U, 1930050217U, 1929835819U, 1929622771U, 1929410531U, 1929197299U, 1928981581U, 1928767499U, 1928552657U, 1928340781U, 1928126819U, 1927911509U, 1927700891U, 1927487371U, 1927272463U, 1927060243U, 1926846787U, 1926631963U, 1926417281U, 1926202891U, 1925987633U, 1925774309U, 1925560577U, 1925346653U, 1925132813U, 1924917391U, 1924703741U, 1924489667U, 1924274753U, 1924061647U, 1923848099U, 1923635011U, 1923423013U, 1923209657U, 1922995003U, 1922780593U, 1922567051U, 1922354261U, 1922142449U, 1921923569U, 1921709773U, 1921496867U, 1921285153U, 1921071419U, 1920855917U, 1920641953U, 1920426647U, 1920210139U, 1919997463U, 1919784743U, 1919571817U, 1919357707U, 1919144197U, 1918928327U, 1918716967U, 1918505287U, 1918288951U, 1918074289U, 1917859243U, 1917645077U, 1917431177U, 1917217327U, 1917001897U, 1916787517U, 1916575319U, 1916359751U, 1916145289U, 1915931917U, 1915718513U, 1915503833U, 1915291013U, 1915078507U, 1914865129U, 1914652417U, 1914438937U, 1914226511U, 1914012007U, 1913797597U, 1913583341U, 1913369903U, 1913155711U, 1912942181U, 1912728781U, 1912513847U, 1912300451U, 1912087831U, 1911873253U, 1911657779U, 1911442763U, 1911231353U, 1911015773U, 1910802847U, 1910588893U, 1910375063U, 1910162201U, 1909948321U, 1909733303U, 1909520323U, 1909307419U, 1909093247U, 1908879877U, 1908664063U, 1908449857U, 1908236677U, 1908022811U, 1907810987U, 1907598467U, 1907384467U, 1907169083U, 1906953211U, 1906739209U, 1906525109U, 1906310951U, 1906096999U, 1905884731U, 1905673373U, 1905457363U, 1905243209U, 1905029017U, 1904816713U, 1904602537U, 1904389517U, 1904176861U, 1903963189U, 1903749361U, 1903537567U, 1903322501U, 1903108331U, 1902895109U, 1902682841U, 1902468143U, 1902255833U, 1902042173U, 1901825033U, 1901610857U, 1901394977U, 1901180863U, 1900966337U, 1900753301U, 1900539409U, 1900326377U, 1900115621U, 1899902029U, 1899689683U, 1899477733U, 1899264779U, 1899050837U, 1898835283U, 1898621423U, 1898407963U, 1898196023U, 1897983083U, 1897770997U, 1897556651U, 1897344901U, 1897133809U, 1896919259U, 1896705157U, 1896491041U, 1896277457U, 1896063769U, 1895850709U, 1895636689U, 1895420279U, 1895208223U, 1894993829U, 1894782023U, 1894566353U, 1894350527U, 1894137731U, 1893924589U, 1893710851U, 1893496691U, 1893283459U, 1893069709U, 1892854861U, 1892641133U, 1892428999U, 1892215747U, 1892003387U, 1891790491U, 1891579493U, 1891362449U, 1891148263U, 1890934141U, 1890720857U, 1890507551U, 1890292267U, 1890078847U, 1889865743U, 1889652253U, 1889438801U, 1889224241U, 1889013617U, 1888800223U, 1888587439U, 1888373471U, 1888163867U, 1887952039U, 1887737603U, 1887523223U, 1887309659U, 1887096331U, 1886884289U, 1886670587U, 1886456149U, 1886240141U, 1886028191U, 1885812587U, 1885599461U, 1885386431U, 1885172129U, 1884957803U, 1884746813U, 1884531721U, 1884315151U, 1884102601U, 1883889043U, 1883673413U, 1883458481U, 1883244703U, 1883033723U, 1882821439U, 1882608839U, 1882393321U, 1882178719U, 1881963827U, 1881750943U, 1881536119U, 1881320087U, 1881108149U, 1880896177U, 1880681953U, 1880466319U, 1880252831U, 1880038367U, 1879824493U, 1879610081U, 1879395409U, 1879181047U, 1878969739U, 1878756823U, 1878542957U, 1878330583U, 1878116137U, 1877904227U, 1877689511U, 1877474453U, 1877263457U, 1877050621U, 1876835243U, 1876622257U, 1876411883U, 1876197749U, 1875985613U, 1875770417U, 1875554969U, 1875341953U, 1875126829U, 1874913457U, 1874701039U, 1874489093U, 1874272849U, 1874060159U, 1873846979U, 1873635529U, 1873421219U, 1873209713U, 1872994463U, 1872782473U, 1872569861U, 1872355663U, 1872141379U, 1871927711U, 1871713241U, 1871499821U, 1871282653U, 1871070701U, 1870859063U, 1870646521U, 1870431113U, 1870216661U, 1870002733U, 1869789989U, 1869578903U, 1869364733U, 1869150917U, 1868934923U, 1868723261U, 1868509567U, 1868296949U, 1868082787U, 1867868263U, 1867655113U, 1867441489U, 1867226723U, 1867011511U, 1866798541U, 1866586681U, 1866375299U, 1866161233U, 1865946409U, 1865732599U, 1865516353U, 1865304169U, 1865090393U, 1864877809U, 1864661059U, 1864446949U, 1864231703U, 1864019951U, 1863806657U, 1863593309U, 1863380551U, 1863168421U, 1862955293U, 1862742773U, 1862527981U, 1862316163U, 1862102299U, 1861887043U, 1861671997U, 1861458811U, 1861246481U, 1861033093U, 1860819593U, 1860606511U, 1860392983U, 1860179969U, 1859966057U, 1859753327U, 1859537033U, 1859321609U, 1859109403U, 1858896001U, 1858682179U, 1858468021U, 1858255141U, 1858040617U, 1857826583U, 1857614989U, 1857401957U, 1857189121U, 1856974877U, 1856761057U, 1856548943U, 1856334443U, 1856122343U, 1855909711U, 1855697113U, 1855485559U, 1855272659U, 1855059971U, 1854846797U, 1854633577U, 1854417667U, 1854205447U, 1853992741U, 1853779349U, 1853563861U, 1853348593U, 1853135209U, 1852922107U, 1852710059U, 1852494713U, 1852281311U, 1852068733U, 1851856651U, 1851644933U, 1851430187U, 1851217127U, 1851003919U, 1850791277U, 1850576047U, 1850363993U, 1850149817U, 1849934699U, 1849722047U, 1849507193U, 1849292813U, 1849082251U, 1848865933U, 1848650597U, 1848437771U, 1848223219U, 1848011083U, 1847798189U, 1847584031U, 1847369309U, 1847155309U, 1846942483U, 1846728739U, 1846515617U, 1846302167U, 1846089199U, 1845873173U, 1845658319U, 1845445027U, 1845234277U, 1845021179U, 1844808467U, 1844594179U, 1844381387U, 1844167673U, 1843954171U, 1843740683U, 1843527457U, 1843314307U, 1843101739U, 1842889381U, 1842677059U, 1842463939U, 1842250661U, 1842035359U, 1841822201U, 1841610737U, 1841396317U, 1841181707U, 1840969279U, 1840756397U, 1840542703U, 1840329529U, 1840114021U, 1839902681U, 1839690289U, 1839477257U, 1839262553U, 1839049451U, 1838834191U, 1838622671U, 1838409107U, 1838193991U, 1837980367U, 1837766683U, 1837552097U, 1837338709U, 1837126441U, 1836914561U, 1836700787U, 1836487573U, 1836273797U, 1836060607U, 1835848667U, 1835633953U, 1835420233U, 1835206981U, 1834993807U, 1834782097U, 1834566973U, 1834353881U, 1834140647U, 1833926671U, 1833715579U, 1833503561U, 1833293153U, 1833081637U, 1832866859U, 1832653061U, 1832438771U, 1832224573U, 1832010209U, 1831797823U, 1831585487U, 1831372853U, 1831157287U, 1830944299U, 1830730943U, 1830517193U, 1830305447U, 1830091709U, 1829876317U, 1829662273U, 1829449411U, 1829236631U, 1829023943U, 1828810271U, 1828596149U, 1828382207U, 1828170133U, 1827959183U, 1827746581U, 1827532807U, 1827317861U, 1827106199U, 1826891467U, 1826680879U, 1826467309U, 1826253997U, 1826039113U, 1825825087U, 1825610833U, 1825397839U, 1825185599U, 1824970999U, 1824757813U, 1824544453U, 1824331781U, 1824120253U, 1823907461U, 1823694571U, 1823483819U, 1823269337U, 1823056657U, 1822841029U, 1822628681U, 1822413007U, 1822199881U, 1821987077U, 1821771307U, 1821559319U, 1821348401U, 1821133981U, 1820921497U, 1820707351U, 1820492903U, 1820278483U, 1820065243U, 1819853467U, 1819640743U, 1819428503U, 1819214503U, 1818999947U, 1818786679U, 1818571829U, 1818358589U, 1818143609U, 1817931289U, 1817716661U, 1817504939U, 1817292857U, 1817077921U, 1816863773U, 1816650911U, 1816437629U, 1816224331U, 1816011343U, 1815798827U, 1815584137U, 1815372683U, 1815158353U, 1814944921U, 1814730259U, 1814519281U, 1814305679U, 1814091911U, 1813878061U, 1813665221U, 1813450559U, 1813237159U, 1813022209U, 1812810889U, 1812598517U, 1812386621U, 1812172727U, 1811959999U, 1811746201U, 1811532013U, 1811320249U, 1811105171U, 1810891699U, 1810676641U, 1810464479U, 1810251841U, 1810039403U, 1809825361U, 1809610937U, 1809398191U, 1809185471U, 1808972351U, 1808760589U, 1808548033U, 1808335171U, 1808122291U, 1807908719U, 1807695269U, 1807482529U, 1807269617U, 1807056437U, 1806843373U, 1806629173U, 1806416483U, 1806203057U, 1805989663U, 1805777483U, 1805564641U, 1805352947U, 1805137171U, 1804922843U, 1804709029U, 1804496621U, 1804282919U, 1804070239U, 1803858137U, 1803644209U, 1803430969U, 1803217879U, 1803004363U, 1802791009U, 1802576609U, 1802366077U, 1802150351U, 1801937953U, 1801724581U, 1801510229U, 1801298753U, 1801085947U, 1800871399U, 1800657197U, 1800444797U, 1800231943U, 1800018919U, 1799806523U, 1799593049U, 1799379191U, 1799166077U, 1798952293U, 1798742359U, 1798528609U, 1798316879U, 1798103999U, 1797889399U, 1797677771U, 1797463951U, 1797250849U, 1797038773U, 1796829191U, 1796613449U, 1796399977U, 1796188403U, 1795976477U, 1795764959U, 1795551127U, 1795337413U, 1795124281U, 1794911507U, 1794700001U, 1794488291U, 1794275677U, 1794061361U, 1793848423U, 1793635369U, 1793420693U, 1793210383U, 1792996691U, 1792784233U, 1792570531U, 1792358257U, 1792146007U, 1791934237U, 1791723223U, 1791509171U, 1791295381U, 1791082301U, 1790868851U, 1790656031U, 1790443537U, 1790230961U, 1790017003U, 1789805027U, 1789593419U, 1789379479U, 1789164787U, 1788954239U, 1788740491U, 1788525853U, 1788313313U, 1788099323U, 1787886053U, 1787673467U, 1787459507U, 1787246339U, 1787034257U, 1786821557U, 1786608137U, 1786394063U, 1786182059U, 1785967481U, 1785754219U, 1785541067U, 1785328469U, 1785115117U, 1784902591U, 1784691409U, 1784479457U, 1784264249U, 1784052359U, 1783837177U, 1783625471U, 1783412083U, 1783199161U, 1782985577U, 1782774361U, 1782561791U, 1782349147U, 1782135227U, 1781922349U, 1781707453U, 1781494499U, 1781281357U, 1781067257U, 1780853203U, 1780641661U, 1780427603U, 1780215917U, 1780004623U, 1779789901U, 1779579163U, 1779366067U, 1779154763U, 1778941309U, 1778728537U, 1778516123U, 1778303041U, 1778091787U, 1777879687U, 1777663243U, 1777451671U, 1777236971U, 1777025297U, 1776810323U, 1776599551U, 1776385619U, 1776175129U, 1775962709U, 1775748791U, 1775538503U, 1775324981U, 1775111743U, 1774897037U, 1774682293U, 1774468921U, 1774256161U, 1774044773U, 1773831989U, 1773617759U, 1773403967U, 1773190319U, 1772977307U, 1772763497U, 1772549873U, 1772335879U, 1772125603U, 1771913347U, 1771699337U, 1771487587U, 1771272023U, 1771059089U, 1770847583U, 1770636541U, 1770423601U, 1770210877U, 1769994487U, 1769781749U, 1769568701U, 1769356007U, 1769142241U, 1768928741U, 1768713641U, 1768501909U, 1768289251U, 1768078313U, 1767865181U, 1767649771U, 1767438721U, 1767226861U, 1767012337U, 1766798269U, 1766585551U, 1766372479U, 1766160161U, 1765946669U, 1765734799U, 1765523477U, 1765309201U, 1765095139U, 1764883123U, 1764672967U, 1764461749U, 1764246829U, 1764032813U, 1763819731U, 1763606881U, 1763393377U, 1763181727U, 1762969993U, 1762756637U, 1762543031U, 1762331981U, 1762118279U, 1761903823U, 1761692489U, 1761477937U, 1761263827U, 1761050773U, 1760839001U, 1760628371U, 1760413229U, 1760197709U, 1759985173U, 1759773131U, 1759560839U, 1759348933U, 1759135717U, 1758923039U, 1758710171U, 1758498877U, 1758285307U, 1758073949U, 1757860073U, 1757647841U, 1757436281U, 1757222959U, 1757008063U, 1756793993U, 1756581121U, 1756368917U, 1756154579U, 1755940577U, 1755728027U, 1755514219U, 1755303233U, 1755091193U, 1754878501U, 1754665361U, 1754454571U, 1754242561U, 1754030731U, 1753816681U, 1753602211U, 1753389713U, 1753176443U, 1752964153U, 1752750449U, 1752537337U, 1752324599U, 1752112291U, 1751899441U, 1751687213U, 1751473417U, 1751261329U, 1751049169U, 1750837849U, 1750623913U, 1750410733U, 1750198199U, 1749985409U, 1749773527U, 1749560107U, 1749347723U, 1749135239U, 1748924363U, 1748710897U, 1748498359U, 1748287217U, 1748070949U, 1747857149U, 1747644641U, 1747430963U, 1747216301U, 1747002469U, 1746789469U, 1746578459U, 1746366119U, 1746151037U, 1745939603U, 1745725207U, 1745513141U, 1745303071U, 1745089651U, 1744877551U, 1744663763U, 1744451789U, 1744237181U, 1744025083U, 1743814301U, 1743600853U, 1743387367U, 1743174197U, 1742962841U, 1742749471U, 1742536847U, 1742322259U, 1742111281U, 1741899253U, 1741687861U, 1741474171U, 1741258007U, 1741045811U, 1740835949U, 1740621881U, 1740408053U, 1740196361U, 1739983067U, 1739771023U, 1739558827U, 1739345351U, 1739134457U, 1738920671U, 1738707163U, 1738494731U, 1738281847U, 1738067677U, 1737856069U, 1737644603U, 1737432539U, 1737221611U, 1737006983U, 1736794487U, 1736581619U, 1736369281U, 1736154647U, 1735943387U, 1735729111U, 1735517011U, 1735305269U, 1735090199U, 1734876943U, 1734664441U, 1734449077U, 1734237377U, 1734024737U, 1733811263U, 1733597969U, 1733384509U, 1733171707U, 1732961677U, 1732746863U, 1732535537U, 1732321049U, 1732108141U, 1731895523U, 1731682793U, 1731469843U, 1731254191U, 1731041219U, 1730829523U, 1730618177U, 1730405549U, 1730192197U, 1729976291U, 1729763383U, 1729549669U, 1729337327U, 1729125011U, 1728914417U, 1728701587U, 1728488477U, 1728276799U, 1728063221U, 1727849777U, 1727635841U, 1727422667U, 1727208947U, 1726994957U, 1726783987U, 1726573733U, 1726361471U, 1726147603U, 1725936371U, 1725724123U, 1725510341U, 1725297971U, 1725083699U, 1724868617U, 1724657423U, 1724445431U, 1724230499U, 1724017907U, 1723805329U, 1723596101U, 1723381903U, 1723167899U, 1722954017U, 1722740653U, 1722527047U, 1722312811U, 1722102953U, 1721891051U, 1721678617U, 1721466457U, 1721252303U, 1721040851U, 1720830509U, 1720616329U, 1720403401U, 1720190291U, 1719977801U, 1719766823U, 1719554429U, 1719342839U, 1719129833U, 1718917727U, 1718705621U, 1718492519U, 1718278847U, 1718067781U, 1717854091U, 1717640279U, 1717427989U, 1717216279U, 1717003237U, 1716788687U, 1716577411U, 1716367007U, 1716156181U, 1715943997U, 1715731957U, 1715519549U, 1715306557U, 1715093563U, 1714882331U, 1714670413U, 1714457677U, 1714244459U, 1714031303U, 1713818269U, 1713604801U, 1713389563U, 1713178517U, 1712965213U, 1712753267U, 1712539687U, 1712328841U, 1712113927U, 1711899883U, 1711688063U, 1711475021U, 1711261333U, 1711051409U, 1710837059U, 1710624329U, 1710413077U, 1710198703U, 1709987243U, 1709773981U, 1709563153U, 1709351911U, 1709141977U, 1708930331U, 1708718107U, 1708502867U, 1708290503U, 1708076729U, 1707863831U, 1707652277U, 1707439001U, 1707227173U, 1707014329U, 1706801633U, 1706589107U, 1706378419U, 1706166377U, 1705953643U, 1705741783U, 1705531549U, 1705316959U, 1705106129U, 1704894109U, 1704681709U, 1704468937U, 1704255689U, 1704045223U, 1703832359U, 1703619641U, 1703405609U, 1703195113U, 1702983229U, 1702769197U, 1702556957U, 1702344983U, 1702131659U, 1701917627U, 1701705373U, 1701491459U, 1701278609U, 1701065897U, 1700854567U, 1700644447U, 1700429513U, 1700217709U, 1700006197U, 1699793419U, 1699580317U, 1699369627U, 1699155581U, 1698940723U, 1698727337U, 1698513253U, 1698301307U, 1698091267U, 1697877743U, 1697664337U, 1697450791U, 1697237897U, 1697025769U, 1696813771U, 1696599187U, 1696387493U, 1696177811U, 1695964349U, 1695752273U, 1695539983U, 1695328517U, 1695112499U, 1694901031U, 1694687689U, 1694475023U, 1694261953U, 1694049001U, 1693835707U, 1693622737U, 1693410343U, 1693197481U, 1692985631U, 1692774529U, 1692562093U, 1692348953U, 1692136417U, 1691923169U, 1691710081U, 1691497571U, 1691284057U, 1691071279U, 1690859791U, 1690645939U, 1690435493U, 1690223939U, 1690010563U, 1689798259U, 1689584801U, 1689374539U, 1689162413U, 1688949023U, 1688734417U, 1688524517U, 1688313817U, 1688102477U, 1687890049U, 1687679137U, 1687466219U, 1687256309U, 1687042309U, 1686831407U, 1686620363U, 1686407869U, 1686194189U, 1685982491U, 1685769949U, 1685554763U, 1685339581U, 1685127391U, 1684918171U, 1684703561U, 1684493633U, 1684280249U, 1684067551U, 1683855757U, 1683645311U, 1683433723U, 1683221711U, 1683008251U, 1682796551U, 1682583167U, 1682371753U, 1682155987U, 1681944119U, 1681733363U, 1681519849U, 1681308011U, 1681098073U, 1680884237U, 1680671623U, 1680459233U, 1680247291U, 1680031811U, 1679819293U, 1679605723U, 1679392699U, 1679181041U, 1678968337U, 1678756411U, 1678543357U, 1678332811U, 1678122869U, 1677911009U, 1677697997U, 1677485779U, 1677275011U, 1677060713U, 1676850353U, 1676637649U, 1676424697U, 1676211011U, 1676000453U, 1675787273U, 1675576393U, 1675363649U, 1675151339U, 1674939241U, 1674727057U, 1674512789U, 1674299479U, 1674087917U, 1673876467U, 1673661967U, 1673449919U, 1673235139U, 1673021521U, 1672808327U, 1672596941U, 1672384589U, 1672173589U, 1671961757U, 1671749039U, 1671536963U, 1671325529U, 1671112967U, 1670901179U, 1670689117U, 1670475277U, 1670262637U, 1670051791U, 1669837633U, 1669625107U, 1669414039U, 1669203233U, 1668990637U, 1668775393U, 1668563849U, 1668350561U, 1668138847U, 1667926867U, 1667713757U, 1667501833U, 1667287651U, 1667077777U, 1666863299U, 1666650637U, 1666439549U, 1666227977U, 1666014149U, 1665800771U, 1665591229U, 1665380273U, 1665168877U, 1664957753U, 1664744593U, 1664532421U, 1664320123U, 1664105249U, 1663891367U, 1663680947U, 1663469519U, 1663254757U, 1663042397U, 1662830083U, 1662618499U, 1662405971U, 1662195949U, 1661984659U, 1661771983U, 1661559659U, 1661347057U, 1661134081U, 1660921679U, 1660710313U, 1660497737U, 1660285441U, 1660073287U, 1659859973U, 1659645607U, 1659431777U, 1659216851U, 1659004939U, 1658794849U, 1658581553U, 1658372297U, 1658159369U, 1657946183U, 1657734823U, 1657521973U, 1657309891U, 1657097159U, 1656885457U, 1656674549U, 1656462763U, 1656251131U, 1656038099U, 1655824243U, 1655613227U, 1655398643U, 1655187257U, 1654976711U, 1654763909U, 1654550113U, 1654337563U, 1654125673U, 1653912119U, 1653698759U, 1653486361U, 1653274141U, 1653059761U, 1652848279U, 1652634989U, 1652424523U, 1652209519U, 1651998191U, 1651784759U, 1651572101U, 1651359301U, 1651147033U, 1650934469U, 1650723083U, 1650509953U, 1650298159U, 1650085873U, 1649872649U, 1649659841U, 1649449441U, 1649235881U, 1649024249U, 1648812073U, 1648598869U, 1648387141U, 1648175587U, 1647962123U, 1647750473U, 1647538483U, 1647326743U, 1647114061U, 1646903021U, 1646688727U, 1646476903U, 1646264027U, 1646051219U, 1645838983U, 1645628581U, 1645415971U, 1645204021U, 1644993293U, 1644776921U, 1644563593U, 1644351343U, 1644139267U, 1643924603U, 1643713501U, 1643499029U, 1643288453U, 1643075813U, 1642860589U, 1642648877U, 1642437869U, 1642225457U, 1642012793U, 1641801523U, 1641589661U, 1641376409U, 1641162559U, 1640952241U, 1640741437U, 1640529173U, 1640318839U, 1640106227U, 1639894213U, 1639681237U, 1639470661U, 1639257131U, 1639045273U, 1638833389U, 1638619711U, 1638407233U, 1638194989U, 1637980541U, 1637769223U, 1637559887U, 1637346769U, 1637134337U, 1636922267U, 1636710653U, 1636499873U, 1636286867U, 1636076087U, 1635863939U, 1635650407U, 1635436661U, 1635226577U, 1635015631U, 1634803927U, 1634589751U, 1634378377U, 1634166799U, 1633954739U, 1633743409U, 1633531651U, 1633318207U, 1633106641U, 1632897269U, 1632687919U, 1632475811U, 1632263639U, 1632052379U, 1631839457U, 1631626849U, 1631414489U, 1631202467U, 1630990519U, 1630778063U, 1630565177U, 1630354853U, 1630143049U, 1629931943U, 1629719171U, 1629508193U, 1629295721U, 1629082687U, 1628870843U, 1628660101U, 1628448221U, 1628236867U, 1628023801U, 1627812029U, 1627600441U, 1627389431U, 1627177001U, 1626962539U, 1626751979U, 1626539179U, 1626326791U, 1626113729U, 1625903567U, 1625691247U, 1625478037U, 1625266073U, 1625054153U, 1624841633U, 1624630261U, 1624417189U, 1624206053U, 1623992599U, 1623781619U, 1623568949U, 1623354829U, 1623142987U, 1622929513U, 1622718421U, 1622506999U, 1622294161U, 1622082901U, 1621868393U, 1621658257U, 1621446997U, 1621235573U, 1621024253U, 1620813553U, 1620603793U, 1620392623U, 1620180607U, 1619968247U, 1619753719U, 1619541383U, 1619329603U, 1619117597U, 1618904627U, 1618691989U, 1618479787U, 1618267333U, 1618055717U, 1617843229U, 1617630947U, 1617417619U, 1617204377U, 1616993519U, 1616781559U, 1616568367U, 1616356229U, 1616143759U, 1615933097U, 1615723597U, 1615509367U, 1615297399U, 1615086917U, 1614874609U, 1614661459U, 1614448681U, 1614236551U, 1614023113U, 1613812303U, 1613601079U, 1613389003U, 1613176379U, 1612963951U, 1612751549U, 1612540789U, 1612329503U, 1612118173U, 1611906383U, 1611695711U, 1611483151U, 1611271957U, 1611057827U, 1610844611U, 1610632469U, 1610418559U, 1610206529U, 1609994033U, 1609781203U, 1609569413U, 1609359209U, 1609145459U, 1608933947U, 1608720361U, 1608508801U, 1608296717U, 1608084109U, 1607870417U, 1607658197U, 1607445701U, 1607234537U, 1607022997U, 1606810687U, 1606600679U, 1606388731U, 1606176347U, 1605965227U, 1605752081U, 1605539021U, 1605328313U, 1605115663U, 1604904061U, 1604693239U, 1604480057U, 1604268389U, 1604057183U, 1603842913U, 1603631873U, 1603420561U, 1603210649U, 1603000219U, 1602789143U, 1602577609U, 1602365857U, 1602153079U, 1601940149U, 1601727781U, 1601517839U, 1601302363U, 1601090371U, 1600879667U, 1600667899U, 1600455133U, 1600242403U, 1600031369U, 1599820517U, 1599606803U, 1599396749U, 1599184751U, 1598975051U, 1598761279U, 1598549501U, 1598335411U, 1598123407U, 1597911299U, 1597700057U, 1597487621U, 1597277893U, 1597065859U, 1596852787U, 1596642133U, 1596428957U, 1596216553U, 1596002173U, 1595792243U, 1595579933U, 1595369533U, 1595158241U, 1594948063U, 1594737161U, 1594525729U, 1594311107U, 1594098707U, 1593885151U, 1593671377U, 1593458753U, 1593247781U, 1593035057U, 1592822603U, 1592610959U, 1592398513U, 1592185459U, 1591975481U, 1591765501U, 1591554421U, 1591341443U, 1591131319U, 1590920003U, 1590707633U, 1590494783U, 1590283363U, 1590070931U, 1589859377U, 1589646811U, 1589434129U, 1589223187U, 1589011031U, 1588799903U, 1588586047U, 1588375429U, 1588163957U, 1587952687U, 1587741893U, 1587529987U, 1587318851U, 1587105677U, 1586891203U, 1586680391U, 1586469947U, 1586257091U, 1586045543U, 1585835543U, 1585622579U, 1585410503U, 1585198583U, 1584985397U, 1584772169U, 1584559601U, 1584347197U, 1584135689U, 1583923169U, 1583711639U, 1583501189U, 1583290279U, 1583078971U, 1582868279U, 1582658101U, 1582445219U, 1582233599U, 1582020931U, 1581806959U, 1581596773U, 1581385601U, 1581173551U, 1580962969U, 1580751941U, 1580539157U, 1580325619U, 1580114611U, 1579903427U, 1579693151U, 1579481467U, 1579268359U, 1579056379U, 1578842593U, 1578632179U, 1578421843U, 1578209747U, 1577998151U, 1577787647U, 1577579093U, 1577369909U, 1577155537U, 1576943099U, 1576730611U, 1576521313U, 1576311547U, 1576100221U, 1575886001U, 1575674297U, 1575462277U, 1575251819U, 1575039077U, 1574829143U, 1574617871U, 1574406947U, 1574196319U, 1573984591U, 1573771307U, 1573558699U, 1573347103U, 1573134727U, 1572923981U, 1572710869U, 1572499171U, 1572285719U, 1572074671U, 1571864771U, 1571650979U, 1571438179U, 1571225417U, 1571013593U, 1570801511U, 1570589539U, 1570376557U, 1570164923U, 1569953963U, 1569742417U, 1569531179U, 1569320693U, 1569107899U, 1568896783U, 1568684263U, 1568472599U, 1568261309U, 1568048311U, 1567834613U, 1567622321U, 1567411583U, 1567200757U, 1566991141U, 1566778691U, 1566568769U, 1566357157U, 1566143399U, 1565932283U, 1565721347U, 1565509193U, 1565297891U, 1565085653U, 1564873847U, 1564660499U, 1564447433U, 1564235279U, 1564021853U, 1563811489U, 1563600547U, 1563390781U, 1563178303U, 1562966143U, 1562753519U, 1562540341U, 1562328893U, 1562116663U, 1561904369U, 1561691323U, 1561478873U, 1561266367U, 1561053881U, 1560842071U, 1560628519U, 1560415321U, 1560203707U, 1559991437U, 1559780639U, 1559568349U, 1559356307U, 1559145017U, 1558935383U, 1558724383U, 1558512313U, 1558300649U, 1558088447U, 1557875689U, 1557664697U, 1557452837U, 1557241417U, 1557027809U, 1556815321U, 1556607361U, 1556394971U, 1556182799U, 1555972007U, 1555757803U, 1555547131U, 1555336427U, 1555123693U, 1554912313U, 1554701053U, 1554488371U, 1554276719U, 1554064399U, 1553854661U, 1553642743U, 1553430247U, 1553219651U, 1553007349U, 1552796459U, 1552584197U, 1552373029U, 1552160453U, 1551947497U, 1551736567U, 1551524531U, 1551312557U, 1551101779U, 1550890007U, 1550680333U, 1550469667U, 1550258377U, 1550048537U, 1549836947U, 1549626413U, 1549413953U, 1549202497U, 1548990721U, 1548777619U, 1548566603U, 1548353953U, 1548143243U, 1547932783U, 1547718707U, 1547508233U, 1547295949U, 1547084933U, 1546874491U, 1546660861U, 1546449799U, 1546240771U, 1546029269U, 1545817543U, 1545608279U, 1545395063U, 1545184891U, 1544973307U, 1544762029U, 1544550919U, 1544340169U, 1544126369U, 1543917269U, 1543704583U, 1543492921U, 1543278167U, 1543066607U, 1542855121U, 1542643969U, 1542432631U, 1542220997U, 1542009797U, 1541798197U, 1541588329U, 1541375651U, 1541164321U, 1540951459U, 1540741079U, 1540529233U, 1540316951U, 1540104407U, 1539892303U, 1539682103U, 1539472589U, 1539260353U, 1539048419U, 1538837119U, 1538625079U, 1538413381U, 1538200369U, 1537988381U, 1537776257U, 1537564159U, 1537351003U, 1537141829U, 1536930599U, 1536719453U, 1536509207U, 1536298567U, 1536084287U, 1535872307U, 1535661467U, 1535448043U, 1535237141U, 1535025673U, 1534813279U, 1534603751U, 1534391513U, 1534179809U, 1533966341U, 1533756793U, 1533546401U, 1533334199U, 1533122693U, 1532910019U, 1532698561U, 1532487683U, 1532274157U, 1532063317U, 1531852901U, 1531640309U, 1531427567U, 1531215589U, 1531002287U, 1530788503U, 1530577127U, 1530366421U, 1530154837U, 1529942443U, 1529731897U, 1529522737U, 1529311841U, 1529103517U, 1528891963U, 1528680841U, 1528467029U, 1528256663U, 1528046269U, 1527835061U, 1527624487U, 1527413753U, 1527202763U, 1526992429U, 1526780881U, 1526568913U, 1526357621U, 1526146381U, 1525935077U, 1525723673U, 1525511483U, 1525301759U, 1525088857U, 1524876253U, 1524665299U, 1524452729U, 1524241639U, 1524031711U, 1523819651U, 1523608943U, 1523397277U, 1523184791U, 1522974181U, 1522761347U, 1522549627U, 1522339421U, 1522130107U, 1521919109U, 1521705557U, 1521496439U, 1521282947U, 1521071219U, 1520860261U, 1520647981U, 1520436857U, 1520224591U, 1520013307U, 1519800533U, 1519589777U, 1519377709U, 1519166063U, 1518957403U, 1518747859U, 1518537569U, 1518326107U, 1518115609U, 1517902261U, 1517689727U, 1517479627U, 1517268097U, 1517056027U, 1516842331U, 1516630799U, 1516422581U, 1516211933U, 1516000391U, 1515788333U, 1515576967U, 1515365569U, 1515154343U, 1514942327U, 1514732293U, 1514522249U, 1514311637U, 1514100949U, 1513888829U, 1513677317U, 1513464419U, 1513253267U, 1513040521U, 1512829321U, 1512619337U, 1512406871U, 1512196163U, 1511984137U, 1511773339U, 1511559821U, 1511349289U, 1511138999U, 1510926353U, 1510713947U, 1510500547U, 1510288337U, 1510077571U, 1509863603U, 1509652121U, 1509441179U, 1509226711U, 1509014431U, 1508801669U, 1508591653U, 1508381621U, 1508170903U, 1507960691U, 1507750679U, 1507539263U, 1507328419U, 1507115851U, 1506903271U, 1506692387U, 1506480763U, 1506267967U, 1506056749U, 1505847173U, 1505635909U, 1505425291U, 1505215927U, 1505005493U, 1504793657U, 1504581619U, 1504371229U, 1504162333U, 1503952867U, 1503740867U, 1503529823U, 1503316649U, 1503105971U, 1502893967U, 1502682551U, 1502471153U, 1502260021U, 1502047271U, 1501834643U, 1501623469U, 1501411771U, 1501200923U, 1500989389U, 1500775873U, 1500565127U, 1500353909U, 1500143621U, 1499932537U, 1499720281U, 1499508971U, 1499297563U, 1499086661U, 1498874747U, 1498663967U, 1498451329U, 1498239949U, 1498028803U, 1497818087U, 1497605653U, 1497394813U, 1497185497U, 1496972819U, 1496762291U, 1496551181U, 1496339959U, 1496130263U, 1495919351U, 1495706561U, 1495496021U, 1495283507U, 1495072847U, 1494862697U, 1494651533U, 1494441001U, 1494230201U, 1494019927U, 1493808817U, 1493596171U, 1493385767U, 1493174381U, 1492964443U, 1492753439U, 1492542301U, 1492331219U, 1492120969U, 1491911543U, 1491699217U, 1491487813U, 1491275839U, 1491064643U, 1490853697U, 1490645441U, 1490435729U, 1490226733U, 1490013949U, 1489802617U, 1489589581U, 1489379527U, 1489166039U, 1488954433U, 1488743299U, 1488531413U, 1488320387U, 1488111187U, 1487900389U, 1487690467U, 1487478497U, 1487267263U, 1487057459U, 1486847729U, 1486637849U, 1486427429U, 1486216819U, 1486003891U, 1485793697U, 1485583139U, 1485372797U, 1485160133U, 1484950217U, 1484741021U, 1484529037U, 1484317111U, 1484106011U, 1483894001U, 1483681889U, 1483471441U, 1483259819U, 1483049713U, 1482838807U, 1482628339U, 1482417641U, 1482206351U, 1481995027U, 1481782711U, 1481570309U, 1481359603U, 1481147693U, 1480933667U, 1480722539U, 1480513499U, 1480303739U, 1480090541U, 1479879637U, 1479668173U, 1479455969U, 1479244651U, 1479032449U, 1478822083U, 1478609551U, 1478399057U, 1478187493U, 1477978231U, 1477768079U, 1477556897U, 1477346933U, 1477136621U, 1476926603U, 1476715193U, 1476506771U, 1476293653U, 1476083051U, 1475872933U, 1475662079U, 1475452523U, 1475242933U, 1475032721U, 1474821919U, 1474611221U, 1474401239U, 1474190131U, 1473977039U, 1473765289U, 1473553997U, 1473340133U, 1473130889U, 1472919583U, 1472708987U, 1472498773U, 1472287043U, 1472077699U, 1471867637U, 1471657441U, 1471446443U, 1471235713U, 1471023823U, 1470812389U, 1470599993U, 1470390283U, 1470178133U, 1469966669U, 1469755801U, 1469543599U, 1469330881U, 1469119987U, 1468907851U, 1468695629U, 1468484929U, 1468273421U, 1468062059U, 1467851149U, 1467640763U, 1467428411U, 1467217327U, 1467006161U, 1466794151U, 1466583073U, 1466371843U, 1466160329U, 1465948373U, 1465736777U, 1465525723U, 1465314119U, 1465102643U, 1464892417U, 1464680897U, 1464467821U, 1464255641U, 1464045809U, 1463835853U, 1463624989U, 1463414549U, 1463204381U, 1462995643U, 1462784161U, 1462573369U, 1462359733U, 1462148579U, 1461938441U, 1461727649U, 1461517399U, 1461304841U, 1461094379U, 1460884471U, 1460673547U, 1460463343U, 1460253167U, 1460041901U, 1459830943U, 1459617227U, 1459408543U, 1459198619U, 1458986429U, 1458775291U, 1458563719U, 1458353033U, 1458142883U, 1457931973U, 1457721589U, 1457511773U, 1457299489U, 1457087893U, 1456876859U, 1456666873U, 1456456499U, 1456244849U, 1456034231U, 1455822019U, 1455611659U, 1455401117U, 1455191977U, 1454981797U, 1454771543U, 1454560109U, 1454349367U, 1454137843U, 1453927427U, 1453715761U, 1453504249U, 1453294127U, 1453081739U, 1452870073U, 1452659729U, 1452448273U, 1452238709U, 1452026141U, 1451813369U, 1451603563U, 1451391889U, 1451180063U, 1450969483U, 1450758469U, 1450547621U, 1450334971U, 1450123639U, 1449913747U, 1449701947U, 1449489913U, 1449279817U, 1449069893U, 1448857687U, 1448648989U, 1448438279U, 1448227537U, 1448017553U, 1447806317U, 1447595869U, 1447382917U, 1447174103U, 1446960607U, 1446749641U, 1446540443U, 1446328439U, 1446119281U, 1445908159U, 1445699449U, 1445489839U, 1445278733U, 1445068367U, 1444856983U, 1444646449U, 1444435033U, 1444222807U, 1444011887U, 1443800339U, 1443587273U, 1443379013U, 1443171043U, 1442957707U, 1442748763U, 1442539339U, 1442327533U, 1442114507U, 1441904047U, 1441690351U, 1441476593U, 1441266361U, 1441055647U, 1440847669U, 1440637277U, 1440426077U, 1440217231U, 1440006509U, 1439794799U, 1439583407U, 1439374171U, 1439162957U, 1438950691U, 1438740437U, 1438528463U, 1438318181U, 1438106513U, 1437895027U, 1437681979U, 1437470873U, 1437259559U, 1437048287U, 1436837653U, 1436626987U, 1436415569U, 1436205919U, 1435995373U, 1435784563U, 1435572799U, 1435360867U, 1435150831U, 1434940153U, 1434729199U, 1434520643U, 1434309757U, 1434099409U, 1433886089U, 1433674607U, 1433466031U, 1433253691U, 1433041403U, 1432829141U, 1432619269U, 1432407803U, 1432197869U, 1431984497U, 1431775249U, 1431565097U, 1431356779U, 1431143009U, 1430932183U, 1430722303U, 1430512469U, 1430300119U, 1430090093U, 1429879069U, 1429668403U, 1429460267U, 1429249499U, 1429038931U, 1428829397U, 1428618013U, 1428406739U, 1428195491U, 1427984963U, 1427775317U, 1427565439U, 1427352851U, 1427142841U, 1426932539U, 1426720049U, 1426508137U, 1426295809U, 1426083629U, 1425873301U, 1425663559U, 1425453457U, 1425242501U, 1425033223U, 1424823151U, 1424609591U, 1424398769U, 1424186873U, 1423976707U, 1423764707U, 1423554833U, 1423345877U, 1423133431U, 1422924851U, 1422714019U, 1422502589U, 1422290981U, 1422080969U, 1421869187U, 1421659849U, 1421447683U, 1421235259U, 1421022943U, 1420814009U, 1420605029U, 1420395637U, 1420184053U, 1419971947U, 1419759763U, 1419551207U, 1419341041U, 1419129991U, 1418921551U, 1418709581U, 1418500289U, 1418290387U, 1418078429U, 1417870807U, 1417660261U, 1417450193U, 1417239283U, 1417028629U, 1416816109U, 1416605381U, 1416393973U, 1416184151U, 1415974367U, 1415759791U, 1415548481U, 1415338993U, 1415127737U, 1414916513U, 1414706081U, 1414496683U, 1414285841U, 1414075933U, 1413865723U, 1413655609U, 1413443107U, 1413233803U, 1413023639U, 1412815031U, 1412603749U, 1412393903U, 1412182423U, 1411972363U, 1411758683U, 1411549081U, 1411338163U, 1411128419U, 1410915481U, 1410704203U, 1410493127U, 1410282767U, 1410072823U, 1409859751U, 1409648803U, 1409438881U, 1409228333U, 1409018059U, 1408806713U, 1408597321U, 1408386337U, 1408174433U, 1407966977U, 1407755081U, 1407545411U, 1407331943U, 1407121483U, 1406910187U, 1406702161U, 1406491811U, 1406281687U, 1406072201U, 1405861619U, 1405649281U, 1405438123U, 1405227907U, 1405017281U, 1404804259U, 1404592459U, 1404382807U, 1404170093U, 1403960413U, 1403749219U, 1403539117U, 1403328253U, 1403117977U, 1402907347U, 1402696543U, 1402487101U, 1402274179U, 1402063451U, 1401852989U, 1401641771U, 1401431819U, 1401220687U, 1401008503U, 1400799527U, 1400586883U, 1400375531U, 1400164691U, 1399955521U, 1399745411U, 1399536209U, 1399323823U, 1399113361U, 1398902599U, 1398693211U, 1398480011U, 1398271157U, 1398059851U, 1397849273U, 1397638597U, 1397427527U, 1397219311U, 1397008007U, 1396796321U, 1396584877U, 1396373389U, 1396163933U, 1395953003U, 1395742811U, 1395532583U, 1395320299U, 1395110599U, 1394900411U, 1394691731U, 1394481623U, 1394269621U, 1394061323U, 1393848473U, 1393637447U, 1393427027U, 1393216597U, 1393005013U, 1392793447U, 1392582857U, 1392373667U, 1392162097U, 1391951017U, 1391739917U, 1391531941U, 1391323799U, 1391112179U, 1390903231U, 1390693357U, 1390480867U, 1390273177U, 1390061591U, 1389854443U, 1389644899U, 1389435529U, 1389224101U, 1389013657U, 1388802889U, 1388590771U, 1388379371U, 1388168759U, 1387959973U, 1387749851U, 1387538531U, 1387326557U, 1387115207U, 1386903257U, 1386690259U, 1386480191U, 1386269273U, 1386059749U, 1385850449U, 1385640629U, 1385426899U, 1385217611U, 1385009077U, 1384797541U, 1384587221U, 1384376911U, 1384166219U, 1383955427U, 1383743587U, 1383531871U, 1383321073U, 1383109709U, 1382900023U, 1382688089U, 1382478193U, 1382270801U, 1382059321U, 1381850683U, 1381640213U, 1381429349U, 1381218071U, 1381008397U, 1380799099U, 1380588893U, 1380376549U, 1380165037U, 1379956027U, 1379745391U, 1379534699U, 1379324861U, 1379115107U, 1378903499U, 1378695559U, 1378484147U, 1378274273U, 1378062869U, 1377849181U, 1377638539U, 1377427537U, 1377217271U, 1377005527U, 1376795093U, 1376583451U, 1376372927U, 1376163917U, 1375954799U, 1375744219U, 1375533587U, 1375323067U, 1375111141U, 1374901441U, 1374690479U, 1374476767U, 1374266947U, 1374055327U, 1373845763U, 1373635849U, 1373424677U, 1373214013U, 1373002481U, 1372792661U, 1372582951U, 1372371989U, 1372160681U, 1371951631U, 1371740347U, 1371530051U, 1371317737U, 1371107293U, 1370898161U, 1370689351U, 1370478199U, 1370269447U, 1370059211U, 1369848439U, 1369638217U, 1369428089U, 1369216799U, 1369007459U, 1368795163U, 1368583901U, 1368373793U, 1368162869U, 1367952449U, 1367742331U, 1367532007U, 1367321981U, 1367114009U, 1366899931U, 1366690271U, 1366478059U, 1366267829U, 1366055539U, 1365846239U, 1365637037U, 1365426473U, 1365217783U, 1365005639U, 1364797337U, 1364586019U, 1364374621U, 1364163901U, 1363954373U, 1363745497U, 1363535959U, 1363324243U, 1363115399U, 1362903431U, 1362693061U, 1362483347U, 1362272159U, 1362061843U, 1361852521U, 1361642413U, 1361433547U, 1361222483U, 1361011681U, 1360802489U, 1360590611U, 1360380881U, 1360171817U, 1359961501U, 1359749983U, 1359539257U, 1359328409U, 1359117871U, 1358908721U, 1358698249U, 1358486093U, 1358278799U, 1358066891U, 1357857821U, 1357647553U, 1357437911U, 1357226729U, 1357017223U, 1356807173U, 1356596411U, 1356385637U, 1356176741U, 1355964263U, 1355755039U, 1355545183U, 1355336251U, 1355128459U, 1354919273U, 1354708483U, 1354498751U, 1354287721U, 1354078309U, 1353870257U, 1353661961U, 1353449791U, 1353240853U, 1353029723U, 1352821361U, 1352612003U, 1352403421U, 1352193341U, 1351982417U, 1351771667U, 1351559323U, 1351347821U, 1351136029U, 1350925787U, 1350716659U, 1350507239U, 1350298679U, 1350086779U, 1349874391U, 1349663261U, 1349453851U, 1349244133U, 1349031391U, 1348822213U, 1348612427U, 1348402843U, 1348194559U, 1347983867U, 1347773291U, 1347559459U, 1347350909U, 1347141193U, 1346933207U, 1346723429U, 1346514991U, 1346305277U, 1346093471U, 1345883647U, 1345672399U, 1345461539U, 1345252241U, 1345040321U, 1344829741U, 1344618323U, 1344407489U, 1344196753U, 1343988967U, 1343780203U, 1343568277U, 1343355241U, 1343147083U, 1342937987U, 1342728071U, 1342517987U, 1342307893U, 1342097557U, 1341887003U, 1341675697U, 1341468683U, 1341261511U, 1341050771U, 1340841889U, 1340632757U, 1340423269U, 1340211359U, 1340001323U, 1339791269U, 1339578307U, 1339367231U, 1339154987U, 1338943393U, 1338732971U, 1338525077U, 1338315793U, 1338103777U, 1337891767U, 1337684981U, 1337475847U, 1337265647U, 1337056157U, 1336846079U, 1336636783U, 1336427837U, 1336218349U, 1336009819U, 1335798707U, 1335587749U, 1335378673U, 1335167833U, 1334957387U, 1334748409U, 1334537419U, 1334327461U, 1334118859U, 1333910269U, 1333701917U, 1333489019U, 1333276801U, 1333068907U, 1332859907U, 1332650933U, 1332443591U, 1332235007U, 1332026453U, 1331816303U, 1331608273U, 1331395193U, 1331182871U, 1330972241U, 1330765867U, 1330554023U, 1330343453U, 1330131511U, 1329919051U, 1329708893U, 1329498817U, 1329287497U, 1329079417U, 1328868181U, 1328658781U, 1328450027U, 1328240899U, 1328029309U, 1327816559U, 1327606783U, 1327398283U, 1327186691U, 1326977819U, 1326767693U, 1326556859U, 1326346837U, 1326137347U, 1325926681U, 1325717227U, 1325506499U, 1325296927U, 1325087851U, 1324877819U, 1324667611U, 1324459139U, 1324247699U, 1324035077U, 1323826727U, 1323617293U, 1323406849U, 1323194489U, 1322982083U, 1322772643U, 1322561957U, 1322351603U, 1322140619U, 1321930747U, 1321720937U, 1321512457U, 1321303331U, 1321092109U, 1320882851U, 1320674917U, 1320465659U, 1320254339U, 1320043337U, 1319834357U, 1319625709U, 1319414983U, 1319203747U, 1318993883U, 1318785301U, 1318577279U, 1318366037U, 1318152007U, 1317943181U, 1317732791U, 1317523841U, 1317314303U, 1317103897U, 1316895257U, 1316685211U, 1316474221U, 1316265331U, 1316054891U, 1315843693U, 1315632137U, 1315421413U, 1315208959U, 1314999743U, 1314788777U, 1314578333U, 1314370261U, 1314159463U, 1313949479U, 1313740369U, 1313531839U, 1313319703U, 1313108959U, 1312898203U, 1312688057U, 1312479703U, 1312267717U, 1312058303U, 1311847529U, 1311637417U, 1311426583U, 1311215863U, 1311006553U, 1310797487U, 1310588473U, 1310377987U, 1310168747U, 1309958267U, 1309749391U, 1309539499U, 1309329479U, 1309120567U, 1308910397U, 1308700637U, 1308490721U, 1308281453U, 1308072991U, 1307865961U, 1307656717U, 1307445779U, 1307237363U, 1307026261U, 1306817159U, 1306605631U, 1306395403U, 1306185103U, 1305975263U, 1305767531U, 1305558109U, 1305348797U, 1305139603U, 1304929123U, 1304720051U, 1304511617U, 1304300269U, 1304090467U, 1303881353U, 1303671079U, 1303459217U, 1303250287U, 1303040521U, 1302831029U, 1302621143U, 1302409819U, 1302198973U, 1301989541U, 1301779541U, 1301570293U, 1301362219U, 1301151557U, 1300942213U, 1300732399U, 1300522403U, 1300313351U, 1300106153U, 1299895273U, 1299682561U, 1299472831U, 1299264649U, 1299053519U, 1298843407U, 1298634643U, 1298425393U, 1298213723U, 1298005127U, 1297796261U, 1297585661U, 1297373851U, 1297163779U, 1296953461U, 1296743507U, 1296533111U, 1296323929U, 1296112973U, 1295901839U, 1295691101U, 1295482039U, 1295272897U, 1295060023U, 1294851017U, 1294641659U, 1294429363U, 1294219313U, 1294009729U, 1293800581U, 1293592733U, 1293382037U, 1293171641U, 1292958059U, 1292746541U, 1292537063U, 1292325929U, 1292117027U, 1291908257U, 1291699309U, 1291488907U, 1291281083U, 1291071497U, 1290862493U, 1290651811U, 1290443393U, 1290234571U, 1290025021U, 1289815477U, 1289604307U, 1289395417U, 1289184679U, 1288975997U, 1288766833U, 1288556921U, 1288348429U, 1288138339U, 1287928099U, 1287718339U, 1287505741U, 1287295949U, 1287085523U, 1286875927U, 1286667689U, 1286457461U, 1286249161U, 1286040269U, 1285833047U, 1285623533U, 1285412059U, 1285202393U, 1284992759U, 1284780683U, 1284571111U, 1284360967U, 1284151301U, 1283940841U, 1283732231U, 1283522021U, 1283313019U, 1283104279U, 1282895363U, 1282682057U, 1282472407U, 1282264663U, 1282053103U, 1281842747U, 1281633181U, 1281423527U, 1281213191U, 1281003403U, 1280793589U, 1280583313U, 1280372719U, 1280164439U, 1279955377U, 1279745221U, 1279534447U, 1279326287U, 1279117223U, 1278905813U, 1278698909U, 1278491231U, 1278280687U, 1278070979U, 1277860873U, 1277650267U, 1277440727U, 1277231077U, 1277022427U, 1276813621U, 1276603609U, 1276392329U, 1276182547U, 1275971579U, 1275761801U, 1275553781U, 1275343483U, 1275133991U, 1274922373U, 1274710727U, 1274501663U, 1274294531U, 1274083753U, 1273875037U, 1273665233U, 1273455991U, 1273245527U, 1273035679U, 1272825977U, 1272615397U, 1272407239U, 1272197977U, 1271987671U, 1271776811U, 1271566627U, 1271355739U, 1271148253U, 1270937953U, 1270728527U, 1270517849U, 1270308241U, 1270098527U, 1269886873U, 1269680053U, 1269470837U, 1269262321U, 1269054197U, 1268844481U, 1268635651U, 1268427047U, 1268216891U, 1268006891U, 1267800031U, 1267590887U, 1267381691U, 1267170791U, 1266961207U, 1266754579U, 1266546143U, 1266337901U, 1266129401U, 1265918683U, 1265706697U, 1265496943U, 1265288159U, 1265077771U, 1264869971U, 1264660013U, 1264449523U, 1264238123U, 1264029539U, 1263820993U, 1263611597U, 1263400771U, 1263193111U, 1262981519U, 1262772097U, 1262563301U, 1262354279U, 1262142769U, 1261934431U, 1261723741U, 1261515029U, 1261306933U, 1261099303U, 1260888019U, 1260676409U, 1260468359U, 1260257827U, 1260050257U, 1259839093U, 1259629243U, 1259419391U, 1259210399U, 1259001217U, 1258793857U, 1258585037U, 1258375523U, 1258165679U, 1257955429U, 1257744953U, 1257534881U, 1257325829U, 1257116669U, 1256905073U, 1256695789U, 1256486117U, 1256277961U, 1256067493U, 1255856647U, 1255647719U, 1255437529U, 1255225837U, 1255015369U, 1254806131U, 1254595753U, 1254386789U, 1254178421U, 1253968913U, 1253758447U, 1253548619U, 1253338423U, 1253130479U, 1252923073U, 1252715501U, 1252508093U, 1252297457U, 1252086653U, 1251874859U, 1251664657U, 1251453971U, 1251246587U, 1251037709U, 1250828521U, 1250619481U, 1250410003U, 1250200339U, 1249992089U, 1249782367U, 1249573147U, 1249364279U, 1249156483U, 1248948131U, 1248738089U, 1248528599U, 1248319139U, 1248109439U, 1247902109U, 1247692639U, 1247481349U, 1247271547U, 1247063087U, 1246854223U, 1246645307U, 1246435901U, 1246227581U, 1246018871U, 1245810227U, 1245601571U, 1245392903U, 1245184243U, 1244973703U, 1244765047U, 1244557333U, 1244346863U, 1244135653U, 1243927999U, 1243717823U, 1243509257U, 1243298579U, 1243088681U, 1242879059U, 1242671167U, 1242460357U, 1242246671U, 1242039277U, 1241829913U, 1241620693U, 1241410673U, 1241202409U, 1240991117U, 1240782497U, 1240572649U, 1240363273U, 1240153777U, 1239943217U, 1239734767U, 1239525311U, 1239313181U, 1239103571U, 1238893823U, 1238684219U, 1238472803U, 1238262409U, 1238054203U, 1237844537U, 1237634821U, 1237427551U, 1237217627U, 1237009793U, 1236798539U, 1236589789U, 1236381481U, 1236172387U, 1235964097U, 1235754187U, 1235545853U, 1235335271U, 1235126447U, 1234917487U, 1234708621U, 1234500199U, 1234289923U, 1234080811U, 1233871147U, 1233660019U, 1233451543U, 1233242953U, 1233033727U, 1232823541U, 1232613331U, 1232402621U, 1232193211U, 1231982483U, 1231772611U, 1231562147U, 1231353373U, 1231146467U, 1230937441U, 1230727991U, 1230517793U, 1230311371U, 1230102737U, 1229895523U, 1229684839U, 1229476231U, 1229268809U, 1229059703U, 1228850041U, 1228638493U, 1228429607U, 1228220797U, 1228011221U, 1227800507U, 1227590239U, 1227381409U, 1227172223U, 1226964671U, 1226753419U, 1226542657U, 1226332829U, 1226122453U, 1225911629U, 1225702547U, 1225493051U, 1225282477U, 1225072763U, 1224862213U, 1224653371U, 1224442993U, 1224234727U, 1224025021U, 1223816687U, 1223607443U, 1223398019U, 1223187829U, 1222978951U, 1222770077U, 1222560371U, 1222351069U, 1222142459U, 1221933131U, 1221721819U, 1221514477U, 1221302977U, 1221094829U, 1220885647U, 1220675699U, 1220464283U, 1220254433U, 1220047229U, 1219838999U, 1219629767U, 1219421089U, 1219213297U, 1219005551U, 1218797189U, 1218587507U, 1218377591U, 1218168283U, 1217959759U, 1217750113U, 1217539289U, 1217329511U, 1217123249U, 1216913377U, 1216703687U, 1216494469U, 1216286101U, 1216077211U, 1215867539U, 1215660739U, 1215451949U, 1215241673U, 1215031777U, 1214822281U, 1214612899U, 1214402617U, 1214193439U, 1213983487U, 1213775221U, 1213567811U, 1213358513U, 1213147499U, 1212936583U, 1212727433U, 1212520013U, 1212311081U, 1212103577U, 1211893097U, 1211685161U, 1211473667U, 1211264987U, 1211058197U, 1210849229U, 1210639567U, 1210431389U, 1210221599U, 1210011203U, 1209802301U, 1209594917U, 1209386179U, 1209175673U, 1208967143U, 1208757743U, 1208547889U, 1208338451U, 1208131159U, 1207920361U, 1207710793U, 1207501777U, 1207294171U, 1207084621U, 1206876179U, 1206669041U, 1206459521U, 1206249859U, 1206041953U, 1205831299U, 1205622923U, 1205415979U, 1205207389U, 1204998191U, 1204787341U, 1204578779U, 1204371323U, 1204162783U, 1203951167U, 1203740099U, 1203532607U, 1203322357U, 1203111703U, 1202902793U, 1202693599U, 1202485397U, 1202275051U, 1202065471U, 1201854851U, 1201645231U, 1201434701U, 1201227581U, 1201018723U, 1200811463U, 1200602569U, 1200391783U, 1200182749U, 1199970719U, 1199762611U, 1199552531U, 1199343581U, 1199132707U, 1198924267U, 1198714327U, 1198506821U, 1198298653U, 1198090477U, 1197882457U, 1197674893U, 1197466163U, 1197256231U, 1197048563U, 1196838133U, 1196629429U, 1196420011U, 1196211407U, 1196001601U, 1195792771U, 1195585481U, 1195374319U, 1195164823U, 1194956393U, 1194748517U, 1194540509U, 1194329251U, 1194120047U, 1193911993U, 1193703031U, 1193491619U, 1193283407U, 1193075309U, 1192865567U, 1192657183U, 1192448381U, 1192240703U, 1192030831U, 1191823163U, 1191612913U, 1191402739U, 1191193649U, 1190984173U, 1190775451U, 1190564161U, 1190355941U, 1190148107U, 1189939213U, 1189728121U, 1189519997U, 1189311247U, 1189101713U, 1188892717U, 1188685703U, 1188475777U, 1188268001U, 1188058351U, 1187849153U, 1187640917U, 1187433263U, 1187226367U, 1187015953U, 1186805089U, 1186596007U, 1186388261U, 1186178297U, 1185970603U, 1185761939U, 1185550823U, 1185341567U, 1185133997U, 1184923501U, 1184713903U, 1184506039U, 1184297089U, 1184087273U, 1183878329U, 1183669787U, 1183458817U, 1183250791U, 1183041817U, 1182832331U, 1182623809U, 1182414503U, 1182205709U, 1181997067U, 1181787179U, 1181577517U, 1181368277U, 1181158673U, 1180949249U, 1180738123U, 1180528859U, 1180320989U, 1180111057U, 1179901351U, 1179692753U, 1179482891U, 1179277469U, 1179068017U, 1178859497U, 1178650687U, 1178442443U, 1178232611U, 1178021371U, 1177811227U, 1177601077U, 1177390987U, 1177182557U, 1176975281U, 1176766693U, 1176558433U, 1176348211U, 1176142267U, 1175934349U, 1175724499U, 1175516383U, 1175305661U, 1175096981U, 1174887067U, 1174678643U, 1174471559U, 1174261367U, 1174052647U, 1173844219U, 1173636703U, 1173426931U, 1173217663U, 1173009319U, 1172799917U, 1172590231U, 1172381857U, 1172174807U, 1171965953U, 1171758163U, 1171550299U, 1171342357U, 1171133347U, 1170923531U, 1170715573U, 1170506611U, 1170297743U, 1170087619U, 1169879033U, 1169673629U, 1169464913U, 1169253593U, 1169046509U, 1168837333U, 1168628623U, 1168419073U, 1168211003U, 1168001629U, 1167792499U, 1167582679U, 1167374083U, 1167164641U, 1166955613U, 1166747363U, 1166538743U, 1166330059U, 1166119189U, 1165910633U, 1165703027U, 1165492703U, 1165285949U, 1165078643U, 1164868769U, 1164659869U, 1164451963U, 1164242549U, 1164034369U, 1163827999U, 1163620747U, 1163411423U, 1163203091U, 1162992989U, 1162784431U, 1162574671U, 1162365587U, 1162159013U, 1161950299U, 1161741389U, 1161533117U, 1161327229U, 1161119857U, 1160911247U, 1160702561U, 1160493413U, 1160284217U, 1160074693U, 1159865429U, 1159657883U, 1159447573U, 1159238293U, 1159029413U, 1158821291U, 1158610679U, 1158401791U, 1158192437U, 1157983051U, 1157773979U, 1157566313U, 1157356867U, 1157148761U, 1156940111U, 1156732697U, 1156522207U, 1156314457U, 1156105541U, 1155900293U, 1155689329U, 1155480661U, 1155273419U, 1155064697U, 1154855899U, 1154646653U, 1154436793U, 1154228027U, 1154020729U, 1153810711U, 1153603991U, 1153394663U, 1153187417U, 1152978973U, 1152771073U, 1152563249U, 1152353821U, 1152145993U, 1151938247U, 1151730473U, 1151522587U, 1151315437U, 1151105951U, 1150895927U, 1150688501U, 1150477577U, 1150271407U, 1150063381U, 1149855211U, 1149644887U, 1149437147U, 1149227243U, 1149020567U, 1148810137U, 1148600951U, 1148394769U, 1148185991U, 1147977247U, 1147768847U, 1147562491U, 1147353859U, 1147143593U, 1146933899U, 1146724949U, 1146514861U, 1146306919U, 1146100591U, 1145894003U, 1145683807U, 1145478899U, 1145271119U, 1145060519U, 1144849163U, 1144640489U, 1144431487U, 1144221607U, 1144014493U, 1143805609U, 1143596227U, 1143388151U, 1143178501U, 1142967641U, 1142757263U, 1142548973U, 1142340253U, 1142130797U, 1141922099U, 1141712267U, 1141504339U, 1141295399U, 1141085873U, 1140875789U, 1140666523U, 1140455947U, 1140247531U, 1140040739U, 1139831323U, 1139624011U, 1139414651U, 1139205901U, 1138998829U, 1138789373U, 1138581187U, 1138373713U, 1138165307U, 1137956741U, 1137749777U, 1137543557U, 1137334369U, 1137125887U, 1136915501U, 1136704747U, 1136495683U, 1136285251U, 1136077577U, 1135868191U, 1135660817U, 1135452361U, 1135244809U, 1135035169U, 1134824861U, 1134615437U, 1134406519U, 1134197663U, 1133988629U, 1133778851U, 1133568727U, 1133357807U, 1133149687U, 1132940047U, 1132731473U, 1132524047U, 1132317119U, 1132109567U, 1131901469U, 1131692797U, 1131482159U, 1131273667U, 1131064631U, 1130857417U, 1130648083U, 1130439929U, 1130231803U, 1130021449U, 1129813459U, 1129605619U, 1129394641U, 1129186661U, 1128976669U, 1128768803U, 1128560591U, 1128354179U, 1128145127U, 1127938793U, 1127729279U, 1127520491U, 1127310199U, 1127101757U, 1126891127U, 1126683491U, 1126474469U, 1126268371U, 1126060379U, 1125850861U, 1125645503U, 1125435653U, 1125228911U, 1125019937U, 1124810191U, 1124601029U, 1124391427U, 1124181301U, 1123972217U, 1123763177U, 1123553309U, 1123346023U, 1123136743U, 1122928627U, 1122720967U, 1122511417U, 1122302417U, 1122093737U, 1121887787U, 1121678477U, 1121468987U, 1121263597U, 1121054999U, 1120848263U, 1120639991U, 1120430299U, 1120221979U, 1120012321U, 1119805361U, 1119597139U, 1119388597U, 1119178637U, 1118973001U, 1118764489U, 1118557243U, 1118348449U, 1118141587U, 1117932931U, 1117724207U, 1117513043U, 1117305067U, 1117096891U, 1116887111U, 1116679621U, 1116471449U, 1116262709U, 1116055631U, 1115846243U, 1115635361U, 1115427913U, 1115219251U, 1115012053U, 1114803533U, 1114593659U, 1114385507U, 1114178473U, 1113968143U, 1113762623U, 1113553663U, 1113347029U, 1113138293U, 1112928077U, 1112717911U, 1112509877U, 1112301271U, 1112092691U, 1111885717U, 1111677641U, 1111467271U, 1111260041U, 1111051927U, 1110844181U, 1110635249U, 1110426409U, 1110217847U, 1110008941U, 1109801263U, 1109592233U, 1109383721U, 1109176469U, 1108968821U, 1108760137U, 1108551179U, 1108344191U, 1108137031U, 1107929003U, 1107720883U, 1107514039U, 1107305911U, 1107098303U, 1106892403U, 1106683751U, 1106474197U, 1106265071U, 1106056043U, 1105847839U, 1105639783U, 1105429693U, 1105221853U, 1105013123U, 1104804509U, 1104595663U, 1104387239U, 1104180157U, 1103972567U, 1103765197U, 1103556331U, 1103348461U, 1103142101U, 1102933277U, 1102726543U, 1102519267U, 1102313431U, 1102104473U, 1101895429U, 1101685861U, 1101479651U, 1101268541U, 1101060229U, 1100852899U, 1100645999U, 1100436301U, 1100227207U, 1100018219U, 1099811047U, 1099602997U, 1099393643U, 1099185673U, 1098978599U, 1098770263U, 1098561227U, 1098351797U, 1098144017U, 1097937167U, 1097728157U, 1097520947U, 1097312089U, 1097103767U, 1096897601U, 1096689799U, 1096482011U, 1096274651U, 1096066739U, 1095859199U, 1095650089U, 1095442963U, 1095231623U, 1095024257U, 1094816797U, 1094609557U, 1094398931U, 1094189693U, 1093980971U, 1093770611U, 1093563649U, 1093358719U, 1093150999U, 1092943727U, 1092736243U, 1092527509U, 1092318377U, 1092112319U, 1091904797U, 1091696719U, 1091489419U, 1091281019U, 1091072471U, 1090864699U, 1090656817U, 1090447843U, 1090240531U, 1090031741U, 1089824773U, 1089618017U, 1089409109U, 1089200053U, 1088991263U, 1088783723U, 1088576893U, 1088365753U, 1088157073U, 1087948157U, 1087740917U, 1087532689U, 1087324613U, 1087118537U, 1086911729U, 1086703643U, 1086495727U, 1086288169U, 1086080651U, 1085870603U, 1085664887U, 1085456423U, 1085247697U, 1085038519U, 1084833017U, 1084624049U, 1084416631U, 1084208351U, 1084001693U, 1083793349U, 1083585871U, 1083377047U, 1083170471U, 1082963663U, 1082756149U, 1082546651U, 1082338427U, 1082131829U, 1081924471U, 1081716761U, 1081511393U, 1081303913U, 1081096957U, 1080887629U, 1080678889U, 1080469007U, 1080262063U, 1080055027U, 1079847971U, 1079640707U, 1079432869U, 1079223599U, 1079014879U, 1078808681U, 1078599227U, 1078390589U, 1078182643U, 1077975377U, 1077768583U, 1077558403U, 1077350501U, 1077143029U, 1076934251U, 1076724241U, 1076518097U, 1076309501U, 1076101567U, 1075893557U, 1075684787U, 1075475461U, 1075267649U, 1075058701U, 1074849661U, 1074641677U, 1074432679U, 1074225577U, 1074019853U, 1073811041U, 1073601887U, 1073392231U, 1073184083U, 1072976483U, 1072767901U, 1072560497U, 1072351633U, 1072144147U, 1071935113U, 1071728831U, 1071520193U, 1071314423U, 1071105181U, 1070897921U, 1070692321U, 1070484431U, 1070277881U, 1070069713U, 1069861379U, 1069652459U, 1069443377U, 1069236671U, 1069029323U, 1068821141U, 1068613543U, 1068406421U, 1068198277U, 1067990419U, 1067782787U, 1067575109U, 1067369003U, 1067160917U, 1066953301U, 1066746419U, 1066536941U, 1066330519U, 1066124239U, 1065916381U, 1065710047U, 1065502043U, 1065293909U, 1065085093U, 1064875531U, 1064669233U, 1064464769U, 1064256913U, 1064052889U, 1063841941U, 1063634183U, 1063429519U, 1063220489U, 1063011779U, 1062803279U, 1062594389U, 1062385393U, 1062178993U, 1061971153U, 1061765231U, 1061557109U, 1061348021U, 1061139697U, 1060931147U, 1060724087U, 1060514333U, 1060306607U, 1060098943U, 1059890033U, 1059683543U, 1059476063U, 1059268699U, 1059058799U, 1058851631U, 1058644291U, 1058437243U, 1058228651U, 1058022887U, 1057815553U, 1057607189U, 1057398107U, 1057191097U, 1056981413U, 1056774827U, 1056567443U, 1056358829U, 1056150707U, 1055942477U, 1055735311U, 1055524109U, 1055317657U, 1055108851U, 1054899821U, 1054691531U, 1054482683U, 1054276051U, 1054070753U, 1053861643U, 1053652829U, 1053443057U, 1053235811U, 1053029443U, 1052820511U, 1052613781U, 1052407277U, 1052201207U, 1051991939U, 1051782857U, 1051575347U, 1051368133U, 1051161451U, 1050953941U, 1050747079U, 1050538583U, 1050331537U, 1050123911U, 1049915177U, 1049708141U, 1049499391U, 1049291899U, 1049084801U, 1048875713U, 1048666351U, 1048459133U, 1048250167U, 1048043951U, 1047834761U, 1047627271U, 1047418517U, 1047210709U, 1047002123U, 1046793551U, 1046584937U, 1046377229U, 1046170379U, 1045963277U, 1045755479U, 1045548289U, 1045341391U, 1045131757U, 1044923059U, 1044714707U, 1044506663U, 1044299353U, 1044089779U, 1043881469U, 1043675887U, 1043468333U, 1043259947U, 1043052079U, 1042842733U, 1042636327U, 1042430009U, 1042222837U, 1042014559U, 1041806749U, 1041601129U, 1041395071U, 1041186929U, 1040977403U, 1040770943U, 1040561549U, 1040352769U, 1040148119U, 1039940617U, 1039734901U, 1039527631U, 1039319389U, 1039112171U, 1038904313U, 1038697459U, 1038489227U, 1038281971U, 1038076063U, 1037869297U, 1037660693U, 1037454337U, 1037245081U, 1037036801U, 1036830203U, 1036622537U, 1036418689U, 1036209221U, 1036001821U, 1035793637U, 1035585337U, 1035377579U, 1035169859U, 1034963477U, 1034755889U, 1034547919U, 1034339519U, 1034133439U, 1033926133U, 1033718393U, 1033508219U, 1033301741U, 1033093891U, 1032883727U, 1032675671U, 1032468491U, 1032261277U, 1032053389U, 1031846441U, 1031638939U, 1031432029U, 1031222191U, 1031015443U, 1030807237U, 1030602227U, 1030394653U, 1030187299U, 1029978863U, 1029770507U, 1029562477U, 1029356557U, 1029149479U, 1028943049U, 1028736311U, 1028526439U, 1028322089U, 1028114587U, 1027905079U, 1027698571U, 1027491097U, 1027281383U, 1027072499U, 1026864593U, 1026655111U, 1026449509U, 1026242017U, 1026034411U, 1025827493U, 1025619773U, 1025412833U, 1025205917U, 1024998553U, 1024790993U, 1024585409U, 1024377589U, 1024170479U, 1023963079U, 1023754891U, 1023546973U, 1023340459U, 1023130879U, 1022924689U, 1022717417U, 1022509559U, 1022303539U, 1022093477U, 1021885679U, 1021678703U, 1021470403U, 1021262609U, 1021056017U, 1020847343U, 1020639803U, 1020432683U, 1020225047U, 1020020171U, 1019812693U, 1019606831U, 1019398117U, 1019190233U, 1018982821U, 1018775161U, 1018567057U, 1018358507U, 1018151209U, 1017944381U, 1017736241U, 1017530897U, 1017324137U, 1017116063U, 1016908021U, 1016700959U, 1016493871U, 1016286463U, 1016078939U, 1015870729U, 1015663459U, 1015456751U, 1015249799U, 1015043849U, 1014837041U, 1014630109U, 1014424841U, 1014216271U, 1014010013U, 1013804111U, 1013594851U, 1013387113U, 1013179397U, 1012969481U, 1012763077U, 1012555567U, 1012347803U, 1012140301U, 1011933803U, 1011728813U, 1011522041U, 1011312689U, 1011105943U, 1010899103U, 1010691037U, 1010484037U, 1010277799U, 1010068273U, 1009863587U, 1009654741U, 1009449401U, 1009242103U, 1009035059U, 1008826657U, 1008617111U, 1008409531U, 1008202501U, 1007995843U, 1007786251U, 1007579669U, 1007371847U, 1007167529U, 1006961783U, 1006755119U, 1006546817U, 1006337861U, 1006130189U, 1005921529U, 1005714239U, 1005508093U, 1005301811U, 1005096139U, 1004888011U, 1004681233U, 1004475079U, 1004267977U, 1004061257U, 1003852589U, 1003647949U, 1003439069U, 1003232161U, 1003024067U, 1002817859U, 1002610171U, 1002403361U, 1002194651U, 1001986877U, 1001778803U, 1001571667U, 1001364493U, 1001156677U, 1000951957U, 1000744669U, 1000537129U, 1000327297U, 1000119983U, 999912523U, 999703801U, 999493673U, 999286423U, 999078749U, 998871407U, 998664533U, 998458471U, 998253203U, 998046109U, 997839767U, 997633313U, 997426693U, 997218899U, 997011133U, 996803813U, 996597577U, 996390223U, 996183359U, 995977547U, 995770397U, 995562409U, 995354803U, 995146829U, 994941529U, 994735051U, 994527539U, 994320137U, 994113697U, 993907393U, 993698323U, 993491119U, 993282299U, 993076549U, 992870051U, 992663029U, 992455333U, 992248849U, 992042297U, 991833253U, 991624423U, 991417409U, 991211311U, 991005881U, 990798979U, 990592243U, 990385157U, 990176959U, 989971237U, 989762567U, 989556467U, 989348963U, 989142277U, 988934563U, 988729121U, 988519901U, 988313663U, 988104911U, 987897461U, 987692201U, 987484747U, 987276473U, 987069637U, 986861357U, 986656057U, 986450291U, 986242583U, 986034559U, 985828897U, 985620491U, 985413613U, 985208027U, 984999641U, 984793639U, 984586049U, 984379723U, 984171319U, 983966077U, 983761687U, 983554151U, 983347199U, 983139727U, 982933051U, 982728209U, 982520449U, 982314679U, 982108307U, 981899161U, 981692263U, 981484789U, 981277889U, 981072341U, 980865359U, 980657081U, 980449601U, 980242871U, 980035361U, 979828741U, 979620721U, 979413271U, 979206149U, 979000333U, 978793337U, 978582823U, 978378091U, 978170003U, 977962343U, 977755951U, 977548213U, 977341201U, 977134861U, 976928089U, 976721873U, 976515613U, 976308323U, 976101821U, 975892903U, 975685771U, 975477911U, 975270103U, 975063059U, 974856133U, 974650109U, 974441773U, 974234951U, 974027363U, 973819969U, 973612897U, 973407217U, 973200797U, 972991693U, 972783767U, 972575189U, 972370271U, 972161327U, 971955211U, 971747593U, 971541997U, 971334241U, 971126231U, 970917953U, 970712653U, 970504793U, 970298893U, 970093193U, 969885979U, 969678383U, 969471989U, 969264253U, 969059699U, 968852399U, 968645647U, 968438519U, 968231983U, 968024059U, 967817281U, 967613329U, 967406161U, 967197743U, 966990467U, 966783197U, 966577459U, 966369473U, 966164629U, 965956177U, 965746939U, 965540179U, 965333641U, 965127589U, 964920427U, 964712663U, 964505779U, 964297351U, 964090601U, 963884557U, 963679721U, 963472667U, 963264233U, 963057677U, 962851469U, 962644237U, 962439397U, 962233927U, 962026067U, 961818331U, 961609657U, 961402753U, 961196113U, 960989921U, 960783503U, 960575053U, 960369671U, 960164357U, 959958569U, 959751467U, 959545339U, 959337787U, 959132063U, 958927643U, 958719757U, 958513207U, 958308079U, 958099903U, 957892121U, 957686003U, 957479813U, 957274463U, 957070073U, 956863231U, 956656499U, 956450219U, 956243017U, 956035967U, 955827647U, 955619213U, 955411801U, 955206139U, 955000157U, 954793003U, 954587419U, 954379667U, 954173333U, 953967467U, 953761241U, 953554561U, 953347751U, 953141549U, 952936403U, 952729321U, 952522433U, 952313891U, 952108571U, 951902069U, 951695267U, 951487843U, 951281183U, 951072641U, 950867891U, 950659939U, 950453393U, 950245817U, 950038891U, 949831711U, 949624163U, 949418621U, 949210631U, 949004237U, 948797947U, 948590129U, 948383503U, 948176329U, 947969749U, 947762281U, 947557529U, 947350549U, 947146309U, 946941377U, 946733339U, 946525397U, 946319123U, 946112749U, 945906653U, 945699767U, 945493957U, 945286103U, 945079393U, 944872997U, 944666137U, 944457727U, 944251129U, 944045093U, 943841623U, 943634413U, 943428457U, 943221553U, 943014223U, 942807059U, 942599201U, 942394279U, 942186577U, 941980649U, 941770757U, 941565017U, 941358941U, 941153023U, 940944761U, 940739473U, 940534457U, 940328141U, 940121129U, 939914237U, 939707311U, 939498481U, 939290711U, 939083969U, 938877299U, 938670497U, 938463313U, 938256743U, 938050571U, 937843117U, 937635403U, 937430023U, 937224481U, 937017241U, 936808751U, 936602551U, 936393247U, 936187487U, 935980187U, 935774839U, 935568223U, 935362513U, 935157149U, 934950433U, 934744141U, 934538333U, 934332799U, 934125721U, 933915907U, 933712601U, 933505961U, 933298987U, 933094187U, 932887321U, 932682197U, 932474657U, 932268949U, 932062069U, 931853539U, 931648031U, 931441501U, 931235729U, 931028831U, 930822023U, 930615799U, 930410359U, 930203363U, 929997377U, 929791073U, 929583461U, 929378647U, 929171809U, 928961563U, 928753213U, 928546337U, 928340111U, 928133047U, 927927431U, 927719873U, 927511327U, 927303313U, 927097819U, 926891057U, 926683861U, 926476429U, 926272069U, 926065423U, 925858279U, 925653983U, 925447087U, 925239961U, 925034359U, 924827639U, 924620899U, 924415159U, 924208093U, 924001801U, 923795833U, 923589143U, 923381033U, 923174653U, 922968353U, 922762307U, 922554167U, 922346597U, 922140283U, 921933101U, 921726833U, 921521323U, 921314491U, 921104917U, 920900389U, 920696473U, 920488883U, 920284241U, 920077003U, 919871549U, 919665931U, 919461089U, 919253327U, 919047611U, 918843181U, 918636781U, 918431209U, 918225853U, 918018929U, 917810801U, 917602223U, 917395903U, 917188477U, 916982489U, 916774951U, 916568707U, 916361893U, 916156721U, 915951917U, 915745531U, 915540091U, 915333547U, 915126503U, 914921417U, 914715511U, 914509529U, 914303749U, 914097449U, 913892719U, 913684151U, 913479859U, 913271237U, 913061893U, 912856787U, 912650659U, 912447581U, 912239071U, 912033929U, 911828861U, 911623931U, 911416811U, 911211313U, 911004803U, 910799521U, 910594129U, 910388137U, 910180189U, 909975103U, 909769517U, 909564301U, 909358363U, 909154039U, 908950027U, 908742859U, 908536289U, 908330999U, 908122427U, 907915453U, 907709161U, 907504669U, 907298807U, 907092811U, 906888161U, 906681863U, 906477373U, 906270719U, 906063619U, 905857787U, 905652047U, 905446649U, 905241457U, 905037937U, 904830643U, 904624129U, 904412191U, 904207417U, 904001689U, 903795047U, 903589319U, 903382463U, 903178417U, 902973857U, 902767081U, 902558269U, 902351161U, 902142887U, 901935031U, 901729561U, 901524121U, 901318051U, 901111439U, 900906637U, 900700831U, 900494867U, 900290857U, 900084401U, 899879263U, 899671099U, 899463869U, 899258387U, 899051437U, 898845781U, 898638131U, 898431239U, 898226999U, 898020311U, 897812969U, 897607853U, 897401333U, 897194827U, 896988797U, 896782561U, 896575313U, 896370289U, 896163013U, 895955897U, 895751147U, 895544131U, 895337041U, 895131739U, 894924157U, 894717371U, 894511207U, 894304603U, 894098801U, 893892721U, 893686333U, 893479253U, 893273831U, 893069227U, 892863337U, 892659133U, 892455203U, 892249121U, 892042433U, 891836821U, 891629833U, 891421211U, 891214297U, 891007393U, 890801147U, 890593727U, 890387999U, 890182673U, 889977527U, 889771829U, 889565387U, 889357043U, 889151611U, 888944711U, 888738751U, 888533159U, 888326333U, 888119311U, 887913683U, 887710319U, 887504369U, 887298869U, 887092457U, 886885721U, 886678853U, 886474403U, 886268503U, 886062503U, 885857129U, 885650761U, 885443579U, 885236993U, 885030703U, 884822867U, 884615929U, 884409923U, 884205199U, 883998877U, 883793107U, 883588081U, 883380077U, 883172489U, 882967091U, 882760639U, 882556957U, 882351131U, 882144853U, 881939497U, 881732437U, 881527169U, 881321641U, 881116981U, 880910321U, 880702661U, 880495237U, 880288337U, 880082239U, 879875501U, 879669793U, 879464407U, 879258439U, 879051493U, 878846819U, 878642081U, 878436607U, 878230709U, 878025917U, 877819699U, 877613479U, 877406449U, 877200449U, 876993101U, 876786593U, 876580267U, 876375277U, 876167623U, 875960333U, 875755271U, 875547059U, 875341081U, 875133761U, 874927159U, 874724077U, 874517923U, 874312423U, 874106309U, 873900127U, 873692717U, 873487577U, 873282323U, 873076363U, 872872051U, 872667931U, 872461297U, 872252947U, 872048687U, 871843979U, 871637411U, 871431779U, 871224707U, 871016617U, 870810277U, 870604591U, 870398107U, 870193447U, 869988349U, 869782429U, 869579747U, 869372099U, 869166061U, 868958539U, 868754771U, 868548341U, 868343237U, 868135109U, 867930487U, 867723991U, 867518711U, 867314957U, 867109753U, 866904347U, 866699791U, 866493643U, 866287339U, 866080493U, 865873159U, 865665811U, 865460467U, 865256173U, 865051073U, 864844751U, 864638191U, 864434687U, 864229549U, 864024071U, 863818961U, 863613349U, 863408839U, 863200651U, 862995349U, 862789141U, 862584491U, 862376869U, 862173199U, 861967571U, 861759439U, 861555043U, 861350729U, 861143057U, 860938087U, 860732359U, 860524417U, 860319727U, 860112137U, 859906457U, 859700689U, 859493447U, 859285943U, 859078879U, 858872177U, 858667783U, 858462079U, 858257021U, 858050153U, 857845171U, 857641481U, 857434343U, 857229661U, 857021821U, 856815683U, 856610141U, 856403957U, 856197857U, 855991243U, 855787067U, 855580549U, 855376927U, 855170389U, 854963783U, 854759743U, 854554699U, 854348233U, 854142089U, 853936907U, 853731059U, 853526381U, 853322969U, 853117247U, 852910259U, 852705479U, 852499171U, 852292559U, 852088277U, 851882099U, 851674477U, 851469019U, 851264669U, 851057611U, 850851587U, 850646939U, 850441219U, 850233557U, 850027799U, 849822679U, 849618937U, 849412657U, 849206053U, 849000613U, 848795179U, 848593357U, 848389111U, 848183599U, 847977167U, 847770809U, 847565239U, 847359661U, 847153661U, 846946957U, 846740357U, 846533267U, 846328151U, 846122219U, 845917427U, 845711719U, 845507317U, 845300191U, 845093831U, 844888931U, 844684639U, 844476407U, 844270619U, 844064857U, 843857627U, 843651791U, 843446467U, 843243067U, 843038501U, 842832899U, 842629639U, 842424053U, 842217149U, 842013313U, 841808101U, 841604131U, 841399711U, 841190411U, 840984299U, 840779671U, 840573443U, 840368603U, 840162481U, 839958013U, 839751259U, 839547497U, 839344031U, 839137381U, 838930861U, 838723777U, 838515877U, 838312229U, 838108081U, 837905749U, 837700639U, 837495367U, 837289603U, 837084181U, 836877871U, 836671211U, 836468057U, 836260973U, 836056369U, 835849453U, 835644737U, 835437937U, 835233631U, 835027631U, 834821531U, 834617561U, 834413053U, 834207961U, 834001559U, 833795381U, 833590399U, 833388103U, 833180779U, 832975837U, 832771883U, 832566463U, 832361093U, 832154209U, 831950087U, 831745181U, 831538217U, 831331097U, 831128377U, 830922097U, 830714711U, 830510453U, 830306963U, 830101141U, 829895009U, 829689409U, 829481797U, 829277191U, 829072877U, 828868163U, 828661567U, 828457241U, 828252463U, 828047761U, 827842021U, 827636519U, 827429737U, 827225387U, 827019359U, 826814369U, 826608259U, 826403551U, 826198921U, 825992749U, 825787181U, 825582193U, 825377621U, 825173177U, 824968519U, 824762513U, 824555269U, 824349683U, 824142367U, 823937089U, 823731899U, 823527623U, 823323491U, 823117289U, 822911773U, 822704539U, 822498949U, 822298387U, 822092333U, 821884897U, 821679041U, 821473817U, 821267743U, 821060567U, 820857749U, 820652309U, 820449247U, 820243231U, 820038239U, 819832337U, 819626957U, 819422881U, 819216481U, 819009029U, 818804929U, 818600191U, 818395423U, 818188193U, 817983277U, 817775953U, 817571851U, 817365001U, 817161731U, 816957101U, 816754249U, 816547183U, 816342731U, 816137629U, 815932811U, 815728063U, 815525041U, 815320771U, 815114593U, 814909063U, 814704377U, 814499137U, 814294979U, 814090049U, 813884047U, 813678431U, 813473777U, 813266687U, 813062197U, 812858303U, 812653463U, 812444767U, 812240867U, 812035387U, 811829387U, 811623677U, 811416707U, 811210409U, 811006307U, 810802211U, 810597041U, 810391237U, 810187129U, 809982451U, 809777047U, 809570357U, 809367527U, 809162383U, 808957727U, 808753609U, 808548869U, 808343827U, 808138619U, 807933043U, 807728011U, 807520933U, 807315097U, 807110879U, 806906183U, 806700733U, 806496791U, 806292649U, 806087551U, 805883863U, 805677811U, 805473197U, 805269511U, 805063621U, 804860167U, 804656609U, 804452377U, 804248353U, 804043717U, 803837729U, 803632777U, 803427617U, 803222543U, 803016983U, 802811783U, 802605607U, 802398869U, 802193299U, 801988721U, 801783091U, 801576833U, 801372301U, 801170593U, 800964947U, 800759837U, 800555507U, 800349989U, 800145637U, 799941431U, 799735591U, 799530211U, 799321723U, 799115183U, 798908287U, 798702907U, 798498577U, 798294529U, 798091429U, 797886301U, 797683489U, 797478323U, 797274593U, 797070173U, 796866731U, 796663463U, 796458079U, 796253543U, 796047509U, 795843017U, 795637589U, 795433099U, 795228689U, 795024343U, 794818757U, 794611771U, 794405483U, 794201981U, 793996361U, 793791871U, 793589521U, 793383473U, 793175657U, 792971173U, 792767303U, 792562187U, 792356891U, 792152663U, 791946361U, 791741987U, 791537057U, 791331511U, 791127121U, 790921451U, 790715449U, 790512449U, 790309699U, 790103269U, 789898783U, 789696023U, 789491359U, 789286541U, 789083311U, 788879213U, 788676593U, 788471473U, 788266363U, 788060909U, 787855697U, 787649867U, 787445047U, 787238801U, 787033469U, 786827917U, 786623683U, 786418057U, 786213613U, 786009541U, 785805851U, 785602429U, 785397241U, 785192389U, 784987867U, 784784137U, 784580513U, 784374709U, 784168753U, 783964201U, 783759491U, 783556097U, 783350957U, 783146677U, 782942621U, 782737691U, 782533847U, 782329189U, 782124271U, 781920047U, 781716347U, 781508461U, 781306091U, 781102481U, 780898067U, 780693167U, 780489373U, 780281669U, 780078977U, 779874761U, 779670799U, 779465539U, 779259721U, 779055377U, 778850389U, 778646443U, 778439353U, 778234753U, 778029961U, 777825071U, 777620797U, 777415897U, 777212977U, 777008467U, 776805607U, 776599469U, 776394529U, 776188249U, 775983587U, 775778981U, 775571197U, 775363819U, 775160839U, 774958963U, 774755101U, 774549131U, 774344911U, 774139987U, 773935823U, 773731103U, 773525183U, 773320489U, 773114789U, 772908407U, 772703273U, 772499641U, 772296299U, 772091959U, 771888739U, 771682333U, 771478817U, 771274909U, 771069413U, 770866417U, 770659819U, 770457361U, 770251723U, 770047417U, 769842737U, 769639153U, 769435741U, 769230353U, 769026721U, 768821993U, 768617809U, 768415003U, 768209993U, 768005369U, 767801081U, 767596649U, 767392177U, 767188109U, 766984861U, 766780723U, 766577017U, 766370587U, 766165427U, 765960827U, 765755923U, 765551887U, 765346807U, 765140107U, 764934101U, 764729831U, 764524559U, 764318081U, 764113409U, 763908421U, 763702871U, 763496977U, 763292863U, 763085441U, 762881213U, 762677887U, 762472883U, 762269491U, 762066233U, 761861773U, 761656757U, 761454761U, 761250397U, 761045281U, 760841267U, 760636241U, 760431571U, 760227421U, 760022563U, 759818119U, 759613373U, 759409121U, 759205961U, 759002147U, 758797409U, 758590351U, 758386777U, 758180999U, 757974431U, 757770557U, 757563913U, 757360343U, 757155391U, 756951557U, 756745879U, 756541993U, 756335977U, 756132043U, 755928577U, 755725219U, 755522717U, 755318411U, 755117449U, 754911943U, 754708613U, 754505491U, 754301363U, 754096429U, 753891353U, 753686273U, 753478769U, 753274433U, 753071041U, 752863843U, 752659769U, 752454491U, 752252723U, 752047913U, 751843847U, 751641613U, 751436113U, 751231693U, 751027219U, 750820591U, 750617599U, 750413071U, 750209107U, 750002681U, 749799353U, 749596063U, 749390321U, 749187239U, 748983497U, 748777097U, 748570727U, 748365781U, 748161493U, 747956771U, 747753049U, 747549137U, 747345839U, 747141341U, 746936653U, 746730653U, 746525287U, 746319589U, 746115709U, 745910587U, 745706963U, 745500979U, 745297621U, 745091561U, 744887953U, 744681803U, 744478247U, 744274087U, 744070963U, 743866531U, 743660123U, 743455499U, 743252057U, 743046131U, 742841441U, 742636201U, 742430959U, 742227581U, 742023407U, 741819343U, 741614831U, 741412043U, 741210733U, 741006107U, 740802157U, 740599147U, 740395081U, 740190901U, 739986479U, 739783483U, 739579301U, 739376173U, 739172509U, 738967561U, 738763513U, 738560629U, 738354811U, 738150871U, 737948891U, 737742631U, 737539013U, 737333279U, 737130917U, 736926341U, 736721627U, 736518637U, 736313399U, 736107901U, 735905449U, 735701039U, 735498311U, 735292559U, 735087839U, 734883719U, 734680031U, 734475019U, 734270261U, 734066527U, 733863617U, 733658491U, 733451969U, 733248409U, 733045849U, 732842687U, 732637471U, 732431977U, 732227963U, 732024677U, 731820107U, 731616659U, 731410013U, 731206789U, 731003699U, 730800157U, 730597859U, 730392911U, 730186241U, 729983159U, 729778739U, 729572989U, 729367999U, 729164873U, 728958179U, 728752537U, 728547713U, 728343281U, 728139547U, 727934741U, 727731241U, 727527331U, 727325023U, 727122239U, 726918719U, 726714731U, 726508303U, 726304021U, 726100841U, 725896487U, 725691401U, 725488607U, 725283917U, 725079499U, 724872257U, 724670717U, 724465921U, 724262933U, 724059107U, 723855389U, 723651367U, 723447541U, 723243071U, 723040919U, 722835679U, 722632091U, 722430077U, 722225747U, 722022241U, 721818211U, 721614809U, 721411309U, 721206137U, 721001899U, 720798943U, 720594737U, 720394001U, 720189739U, 719985113U, 719779663U, 719574659U, 719370763U, 719168381U, 718965557U, 718759667U, 718557457U, 718352377U, 718147487U, 717944737U, 717741457U, 717537397U, 717333257U, 717129419U, 716926489U, 716723647U, 716518147U, 716314759U, 716110303U, 715906249U, 715701733U, 715496503U, 715293221U, 715088713U, 714884113U, 714679831U, 714473567U, 714269599U, 714065827U, 713862659U, 713657779U, 713453441U, 713248951U, 713045633U, 712842859U, 712636681U, 712433479U, 712230031U, 712028087U, 711824431U, 711620251U, 711416557U, 711212743U, 711009647U, 710806249U, 710602241U, 710397929U, 710193521U, 709987973U, 709784423U, 709579397U, 709375097U, 709173313U, 708971059U, 708766621U, 708560641U, 708357941U, 708154789U, 707951423U, 707747771U, 707544449U, 707340901U, 707136037U, 706933907U, 706729477U, 706526057U, 706322767U, 706119229U, 705915263U, 705708581U, 705507211U, 705303433U, 705098729U, 704896967U, 704689123U, 704485543U, 704283677U, 704081153U, 703877453U, 703673827U, 703469479U, 703265593U, 703061603U, 702857261U, 702652763U, 702450323U, 702246911U, 702042587U, 701839483U, 701635811U, 701431931U, 701230391U, 701026709U, 700824233U, 700619299U, 700414969U, 700211597U, 700008041U, 699803639U, 699601703U, 699396107U, 699192971U, 698990321U, 698784601U, 698583167U, 698379893U, 698174573U, 697969771U, 697766647U, 697562161U, 697358087U, 697153277U, 696948883U, 696745613U, 696541897U, 696337199U, 696132923U, 695930063U, 695727287U, 695524421U, 695321987U, 695118793U, 694915033U, 694713121U, 694510799U, 694308409U, 694103749U, 693902189U, 693697861U, 693495707U, 693290693U, 693086063U, 692880593U, 692676043U, 692471839U, 692267629U, 692066027U, 691860787U, 691654427U, 691452701U, 691248563U, 691046197U, 690843497U, 690640073U, 690436451U, 690233857U, 690031691U, 689827861U, 689626391U, 689421461U, 689218693U, 689016061U, 688813313U, 688608259U, 688404593U, 688201453U, 688000597U, 687794941U, 687591491U, 687387941U, 687185729U, 686981179U, 686778749U, 686575619U, 686372573U, 686170627U, 685965883U, 685763807U, 685561589U, 685358743U, 685152973U, 684952267U, 684749539U, 684546301U, 684343783U, 684139223U, 683937043U, 683733839U, 683530657U, 683328223U, 683124397U, 682920827U, 682714943U, 682511183U, 682309351U, 682103599U, 681899051U, 681696179U, 681493469U, 681289709U, 681085721U, 680882903U, 680679397U, 680471927U, 680270299U, 680065777U, 679861867U, 679660061U, 679456607U, 679253357U, 679050059U, 678847717U, 678642989U, 678440069U, 678236347U, 678035641U, 677830873U, 677628803U, 677424799U, 677220611U, 677016947U, 676812611U, 676609151U, 676406209U, 676201349U, 675997891U, 675795247U, 675590893U, 675387701U, 675183583U, 674978831U, 674776187U, 674572439U, 674370167U, 674165113U, 673961681U, 673757599U, 673553927U, 673350653U, 673147133U, 672945331U, 672743177U, 672540733U, 672338573U, 672133181U, 671930689U, 671727011U, 671523233U, 671318261U, 671115199U, 670911421U, 670709293U, 670506917U, 670302641U, 670101259U, 669897967U, 669694541U, 669491029U, 669287683U, 669083971U, 668881069U, 668676179U, 668472397U, 668270507U, 668068201U, 667863941U, 667658281U, 667455779U, 667252673U, 667049989U, 666846907U, 666644311U, 666440711U, 666237587U, 666033439U, 665831629U, 665628493U, 665425433U, 665220097U, 665019863U, 664815269U, 664610027U, 664406489U, 664204199U, 663999913U, 663797773U, 663594973U, 663391571U, 663189217U, 662985991U, 662781139U, 662578771U, 662376301U, 662173163U, 661970923U, 661766587U, 661564117U, 661360867U, 661158109U, 660956579U, 660753323U, 660550507U, 660347899U, 660143741U, 659941621U, 659737963U, 659535911U, 659332409U, 659131883U, 658928773U, 658726249U, 658522097U, 658318981U, 658115791U, 657911473U, 657709483U, 657506237U, 657303599U, 657101573U, 656898113U, 656695649U, 656493203U, 656289511U, 656086637U, 655885333U, 655683869U, 655477967U, 655274233U, 655071191U, 654867817U, 654663497U, 654460787U, 654256483U, 654053731U, 653852063U, 653650927U, 653448149U, 653244967U, 653042101U, 652837447U, 652635847U, 652434457U, 652230121U, 652026413U, 651823261U, 651619429U, 651414263U, 651213137U, 651010247U, 650806159U, 650604349U, 650401841U, 650199787U, 649998353U, 649795441U, 649591843U, 649389071U, 649186823U, 648983471U, 648779801U, 648576407U, 648375163U, 648172121U, 647967751U, 647766323U, 647563951U, 647360759U, 647158151U, 646956643U, 646751759U, 646549147U, 646347641U, 646142711U, 645940591U, 645738493U, 645535757U, 645336379U, 645133271U, 644930747U, 644725849U, 644524271U, 644320097U, 644116379U, 643912121U, 643709431U, 643507399U, 643302419U, 643098277U, 642895997U, 642692101U, 642490577U, 642287293U, 642084581U, 641879369U, 641675651U, 641473507U, 641272769U, 641068943U, 640865791U, 640663691U, 640461149U, 640258441U, 640056797U, 639853933U, 639651763U, 639448993U, 639245209U, 639043667U, 638841017U, 638636197U, 638432797U, 638230627U, 638028499U, 637825693U, 637622473U, 637419509U, 637218331U, 637014737U, 636813649U, 636611513U, 636407791U, 636204119U, 636002737U, 635801591U, 635599907U, 635397629U, 635193677U, 634989863U, 634789277U, 634586243U, 634382291U, 634179061U, 633977947U, 633775931U, 633574021U, 633367927U, 633164879U, 632962807U, 632759377U, 632555153U, 632351501U, 632150209U, 631946437U, 631743881U, 631540807U, 631339997U, 631139219U, 630934589U, 630731029U, 630527089U, 630324089U, 630122813U, 629920561U, 629717899U, 629513603U, 629311447U, 629108819U, 628907117U, 628703701U, 628502051U, 628298389U, 628095469U, 627893857U, 627691369U, 627491489U, 627289417U, 627087541U, 626884411U, 626682481U, 626481029U, 626279263U, 626075917U, 625873021U, 625669463U, 625467991U, 625264193U, 625060103U, 624858583U, 624656741U, 624453941U, 624251627U, 624049919U, 623848559U, 623644843U, 623442283U, 623240573U, 623038027U, 622835881U, 622632193U, 622429267U, 622225393U, 622024201U, 621821443U, 621618353U, 621416293U, 621213811U, 621010913U, 620807219U, 620605273U, 620404303U, 620202071U, 619998289U, 619795069U, 619594111U, 619392973U, 619191751U, 618987839U, 618784261U, 618581881U, 618380407U, 618179491U, 617976509U, 617775247U, 617572051U, 617364289U, 617162387U, 616957969U, 616754869U, 616551841U, 616350121U, 616148317U, 615943327U, 615740759U, 615539033U, 615337127U, 615132989U, 614932831U, 614733143U, 614529679U, 614325851U, 614124109U, 613920361U, 613718159U, 613514249U, 613312057U, 613110397U, 612910351U, 612707237U, 612504667U, 612304261U, 612103909U, 611900753U, 611698123U, 611496157U, 611294227U, 611090479U, 610887731U, 610683587U, 610480919U, 610280401U, 610078039U, 609876131U, 609674269U, 609471799U, 609269761U, 609066739U, 608862853U, 608660761U, 608456423U, 608255107U, 608053217U, 607852319U, 607649767U, 607446799U, 607245157U, 607042897U, 606840127U, 606637931U, 606436657U, 606232813U, 606032149U, 605830289U, 605626213U, 605422177U, 605219947U, 605016959U, 604813397U, 604610459U, 604408589U, 604206847U, 604006127U, 603805283U, 603604933U, 603403301U, 603202087U, 603001453U, 602798479U, 602596451U, 602394857U, 602192561U, 601991009U, 601786813U, 601586017U, 601384957U, 601182587U, 600980227U, 600778547U, 600576233U, 600374387U, 600172591U, 599971679U, 599769923U, 599566883U, 599363221U, 599161111U, 598958683U, 598756549U, 598555813U, 598352719U, 598150877U, 597947153U, 597745297U, 597541999U, 597337567U, 597136207U, 596934421U, 596732161U, 596529809U, 596328263U, 596126887U, 595926047U, 595726231U, 595525477U, 595323367U, 595123103U, 594920329U, 594717373U, 594516499U, 594314507U, 594112087U, 593912741U, 593711309U, 593508803U, 593308451U, 593103053U, 592900741U, 592698257U, 592494193U, 592293173U, 592091407U, 591888067U, 591687923U, 591486463U, 591284051U, 591082729U, 590883119U, 590681459U, 590480369U, 590278001U, 590076283U, 589874573U, 589674193U, 589472339U, 589270849U, 589070381U, 588870313U, 588669443U, 588464057U, 588263561U, 588060061U, 587857031U, 587654689U, 587452897U, 587251337U, 587049017U, 586846721U, 586644491U, 586443799U, 586242571U, 586040383U, 585835819U, 585633127U, 585433627U, 585230879U, 585029329U, 584826139U, 584624393U, 584422913U, 584219341U, 584015989U, 583814299U, 583611703U, 583411267U, 583210997U, 583007807U, 582807571U, 582605579U, 582405001U, 582205361U, 582002873U, 581798431U, 581597867U, 581397871U, 581194717U, 580991603U, 580790069U, 580589203U, 580387013U, 580186129U, 579982621U, 579781781U, 579578579U, 579376393U, 579178037U, 578976389U, 578773919U, 578570711U, 578369717U, 578169673U, 577965979U, 577763447U, 577562731U, 577360717U, 577158581U, 576956839U, 576754333U, 576554747U, 576354287U, 576152683U, 575949761U, 575748139U, 575545297U, 575344691U, 575141939U, 574940273U, 574739071U, 574537841U, 574335733U, 574132697U, 573930839U, 573729197U, 573527359U, 573326459U, 573124847U, 572923643U, 572722207U, 572520763U, 572320277U, 572119133U, 571917083U, 571714459U, 571514039U, 571312447U, 571109333U, 570908267U, 570706163U, 570505211U, 570302011U, 570100901U, 569899741U, 569695739U, 569494903U, 569292637U, 569090791U, 568890131U, 568688333U, 568486201U, 568285241U, 568083853U, 567883439U, 567682277U, 567480181U, 567278477U, 567075389U, 566876873U, 566672047U, 566471351U, 566269831U, 566067713U, 565866193U, 565665403U, 565463131U, 565261157U, 565060669U, 564859157U, 564657833U, 564456637U, 564253399U, 564050923U, 563849423U, 563648951U, 563446757U, 563245951U, 563043527U, 562844081U, 562640021U, 562439363U, 562237279U, 562037263U, 561836309U, 561636739U, 561436591U, 561233341U, 561031321U, 560827517U, 560628337U, 560425741U, 560224517U, 560023267U, 559821347U, 559619603U, 559418737U, 559216529U, 559013027U, 558812473U, 558611803U, 558408817U, 558207941U, 558007081U, 557807857U, 557605397U, 557403169U, 557203447U, 557001349U, 556799281U, 556595849U, 556396177U, 556194521U, 555994253U, 555791333U, 555590479U, 555389213U, 555186431U, 554986511U, 554785073U, 554584267U, 554380919U, 554178277U, 553976713U, 553776191U, 553572707U, 553372213U, 553172117U, 552972401U, 552771497U, 552570311U, 552369217U, 552167767U, 551967211U, 551766811U, 551565811U, 551364811U, 551162357U, 550961809U, 550761137U, 550560139U, 550358761U, 550159567U, 549958901U, 549757049U, 549557549U, 549356981U, 549155773U, 548954101U, 548752109U, 548551309U, 548349407U, 548149279U, 547949123U, 547747367U, 547545563U, 547344871U, 547145353U, 546945383U, 546744547U, 546542723U, 546340393U, 546138457U, 545937809U, 545735521U, 545535997U, 545334311U, 545133191U, 544932499U, 544732439U, 544530967U, 544329011U, 544127197U, 543926419U, 543724817U, 543523769U, 543322561U, 543119747U, 542918149U, 542717267U, 542513899U, 542313859U, 542112257U, 541910729U, 541709111U, 541507361U, 541304821U, 541103399U, 540902563U, 540701129U, 540501653U, 540301187U, 540098873U, 539897623U, 539694797U, 539494807U, 539294407U, 539095981U, 538892941U, 538692157U, 538491649U, 538288771U, 538087817U, 537887657U, 537687739U, 537487169U, 537284981U, 537083843U, 536882651U, 536681611U, 536479873U, 536280743U, 536080177U, 535880399U, 535676699U, 535475179U, 535275227U, 535076489U, 534877139U, 534675809U, 534475439U, 534273799U, 534072523U, 533871847U, 533669711U, 533467969U, 533268401U, 533066321U, 532865881U, 532665751U, 532465837U, 532263973U, 532062943U, 531863203U, 531661121U, 531460661U, 531258587U, 531058793U, 530857277U, 530654587U, 530453389U, 530251793U, 530050559U, 529850803U, 529650467U, 529450759U, 529250581U, 529048207U, 528848687U, 528646109U, 528445363U, 528244949U, 528043793U, 527843429U, 527644543U, 527442943U, 527244271U, 527042909U, 526841269U, 526640363U, 526441231U, 526241101U, 526040443U, 525839239U, 525638411U, 525434137U, 525234989U, 525033917U, 524833663U, 524631677U, 524432423U, 524231369U, 524029361U, 523831199U, 523626899U, 523425431U, 523225741U, 523026701U, 522826373U, 522627043U, 522427067U, 522224917U, 522023401U, 521821427U, 521621959U, 521422549U, 521221067U, 521019319U, 520817963U, 520616627U, 520416683U, 520213721U, 520012981U, 519811693U, 519612167U, 519410641U, 519212537U, 519010183U, 518809799U, 518610613U, 518408963U, 518208749U, 518007229U, 517808209U, 517608347U, 517408183U, 517207921U, 517005949U, 516805997U, 516604573U, 516406013U, 516207467U, 516008153U, 515806139U, 515604629U, 515405351U, 515204141U, 515003767U, 514802657U, 514601641U, 514400261U, 514198963U, 513997249U, 513796343U, 513594311U, 513394933U, 513194443U, 512993147U, 512791793U, 512591657U, 512391179U, 512189567U, 511989869U, 511791689U, 511592533U, 511390471U, 511189741U, 510988547U, 510785537U, 510583921U, 510382417U, 510182483U, 509981909U, 509779393U, 509577611U, 509376979U, 509178223U, 508978709U, 508776343U, 508576129U, 508377131U, 508175669U, 507974827U, 507776117U, 507575839U, 507374239U, 507172243U, 506971207U, 506771051U, 506569117U, 506371009U, 506169997U, 505970363U, 505771171U, 505568621U, 505370287U, 505167449U, 504965723U, 504765221U, 504565993U, 504363793U, 504162943U, 503962243U, 503761499U, 503562671U, 503362183U, 503161073U, 502963723U, 502760147U, 502557053U, 502358569U, 502157779U, 501955921U, 501757211U, 501555529U, 501353029U, 501151003U, 500950243U, 500749423U, 500548927U, 500349547U, 500150419U, 499949237U, 499748027U, 499548073U, 499348043U, 499148371U, 498946183U, 498744937U, 498544243U, 498344221U, 498145331U, 497944339U, 497742803U, 497542301U, 497342597U, 497142461U, 496944137U, 496743421U, 496542467U, 496342559U, 496141033U, 495942431U, 495744017U, 495541757U, 495342109U, 495144467U, 494944381U, 494744039U, 494544251U, 494343253U, 494142589U, 493941887U, 493744421U, 493544963U, 493343107U, 493144049U, 492942053U, 492741779U, 492543169U, 492340843U, 492142411U, 491941981U, 491741039U, 491539963U, 491339879U, 491139391U, 490939979U, 490739591U, 490540991U, 490338143U, 490138709U, 489939733U, 489741347U, 489539027U, 489340637U, 489141589U, 488941511U, 488740841U, 488539937U, 488338727U, 488139371U, 487937057U, 487738711U, 487538809U, 487339261U, 487140481U, 486937639U, 486736531U, 486537329U, 486338273U, 486136883U, 485937509U, 485738203U, 485538127U, 485337989U, 485140349U, 484937711U, 484737509U, 484536757U, 484336837U, 484137497U, 483939971U, 483737039U, 483537449U, 483337639U, 483138653U, 482938283U, 482739253U, 482538299U, 482338403U, 482138263U, 481938917U, 481736617U, 481536409U, 481337513U, 481137857U, 480937759U, 480739001U, 480537581U, 480336917U, 480136567U, 479938223U, 479737619U, 479539097U, 479339183U, 479141059U, 478942067U, 478741559U, 478542703U, 478340857U, 478142449U, 477944321U, 477743977U, 477546011U, 477347399U, 477147521U, 476947259U, 476747641U, 476548901U, 476348827U, 476150273U, 475948013U, 475750589U, 475551379U, 475352797U, 475150409U, 474949693U, 474751171U, 474549793U, 474348517U, 474147491U, 473949131U, 473748619U, 473548253U, 473348831U, 473147219U, 472948547U, 472747463U, 472547989U, 472347287U, 472145659U, 471945917U, 471748649U, 471548069U, 471348961U, 471149207U, 470950153U, 470748791U, 470549347U, 470351477U, 470150717U, 469952341U, 469751767U, 469551091U, 469352539U, 469151213U, 468950203U, 468751051U, 468552247U, 468353461U, 468152129U, 467952377U, 467754227U, 467555227U, 467355353U, 467156101U, 466955911U, 466757003U, 466556239U, 466357963U, 466158311U, 465959267U, 465760007U, 465561557U, 465360937U, 465161383U, 464962279U, 464762321U, 464563501U, 464362757U, 464163571U, 463962397U, 463764967U, 463564469U, 463364893U, 463166261U, 462966761U, 462766189U, 462569413U, 462372247U, 462170981U, 461971409U, 461772973U, 461573053U, 461372407U, 461172953U, 460973837U, 460773757U, 460575421U, 460375787U, 460175531U, 459975463U, 459775529U, 459576269U, 459375529U, 459176827U, 458978837U, 458778251U, 458579623U, 458378449U, 458179201U, 457980247U, 457780087U, 457579873U, 457380149U, 457179883U, 456978043U, 456778277U, 456580403U, 456382621U, 456183779U, 455983999U, 455784811U, 455587133U, 455387473U, 455190709U, 454989583U, 454790839U, 454592141U, 454393207U, 454192829U, 453991639U, 453792349U, 453594863U, 453395477U, 453195317U, 452997271U, 452797781U, 452598371U, 452398861U, 452198111U, 451999063U, 451798381U, 451599991U, 451401329U, 451203043U, 451003369U, 450804311U, 450605033U, 450406111U, 450207323U, 450005779U, 449805127U, 449607377U, 449408263U, 449210183U, 449009257U, 448811263U, 448610651U, 448410961U, 448211779U, 448012727U, 447814069U, 447614969U, 447417629U, 447219607U, 447018653U, 446819507U, 446619211U, 446420999U, 446222983U, 446025029U, 445823501U, 445625413U, 445426213U, 445225961U, 445026437U, 444825617U, 444626759U, 444429047U, 444229369U, 444030101U, 443829811U, 443630137U, 443431517U, 443232901U, 443033827U, 442834741U, 442637519U, 442437967U, 442240273U, 442041881U, 441842741U, 441643283U, 441444281U, 441245989U, 441046421U, 440848217U, 440650913U, 440452801U, 440253907U, 440054633U, 439853749U, 439654013U, 439457189U, 439257359U, 439056533U, 438858703U, 438659831U, 438462467U, 438263159U, 438064609U, 437865427U, 437666947U, 437466863U, 437268773U, 437068847U, 436868449U, 436670497U, 436471037U, 436273589U, 436074449U, 435875689U, 435675841U, 435478531U, 435278447U, 435078181U, 434878967U, 434679697U, 434481449U, 434283781U, 434085941U, 433886129U, 433689709U, 433489633U, 433289327U, 433091431U, 432890333U, 432691601U, 432492787U, 432294497U, 432094483U, 431894923U, 431696873U, 431497559U, 431296277U, 431098417U, 430900109U, 430702603U, 430503809U, 430302787U, 430105099U, 429906679U, 429707029U, 429509417U, 429310421U, 429109423U, 428910857U, 428711483U, 428511703U, 428314927U, 428117311U, 427918651U, 427719401U, 427521481U, 427322989U, 427123111U, 426925133U, 426724349U, 426525871U, 426326893U, 426127813U, 425928799U, 425728997U, 425533403U, 425334583U, 425135617U, 424936537U, 424737011U, 424541581U, 424343551U, 424146511U, 423946121U, 423748387U, 423548303U, 423351671U, 423152069U, 422954933U, 422755831U, 422557453U, 422359213U, 422158339U, 421960291U, 421763827U, 421563733U, 421366151U, 421167689U, 420969389U, 420769309U, 420572881U, 420375001U, 420176611U, 419976331U, 419776127U, 419578361U, 419379509U, 419179603U, 418979641U, 418780897U, 418582277U, 418383109U, 418183849U, 417986473U, 417785383U, 417587249U, 417388949U, 417191617U, 416992963U, 416794331U, 416597381U, 416398579U, 416200951U, 416001809U, 415803473U, 415603697U, 415405307U, 415207843U, 415009589U, 414810257U, 414610699U, 414413353U, 414215677U, 414018053U, 413818421U, 413621567U, 413423687U, 413225717U, 413026183U, 412828747U, 412631039U, 412431941U, 412232773U, 412034221U, 411835729U, 411636413U, 411439513U, 411240233U, 411042397U, 410843287U, 410646013U, 410449189U, 410249803U, 410050819U, 409853333U, 409656281U, 409458463U, 409258793U, 409058711U, 408860971U, 408664187U, 408464179U, 408266189U, 408065837U, 407867311U, 407669081U, 407471927U, 407271439U, 407073881U, 406877249U, 406679659U, 406479001U, 406280117U, 406082849U, 405884041U, 405687781U, 405490279U, 405291479U, 405093827U, 404895737U, 404697413U, 404499299U, 404301481U, 404102047U, 403904159U, 403705843U, 403507213U, 403310881U, 403112621U, 402915971U, 402715903U, 402517751U, 402320783U, 402121381U, 401923957U, 401724599U, 401528717U, 401332213U, 401131697U, 400931189U, 400733779U, 400535969U, 400336843U, 400139683U, 399941057U, 399744157U, 399547763U, 399350779U, 399152113U, 398954053U, 398755499U, 398555467U, 398357359U, 398159819U, 397961419U, 397764043U, 397567669U, 397369877U, 397171807U, 396973267U, 396774629U, 396577301U, 396379943U, 396181067U, 395980789U, 395781667U, 395584159U, 395385007U, 395188181U, 394990331U, 394794503U, 394596827U, 394396969U, 394198813U, 394002709U, 393804911U, 393606827U, 393408269U, 393210053U, 393009401U, 392811593U, 392612743U, 392415109U, 392218621U, 392022847U, 391824457U, 391626553U, 391429637U, 391231889U, 391033793U, 390835553U, 390637921U, 390441223U, 390241699U, 390042449U, 389843183U, 389645681U, 389447621U, 389248823U, 389052439U, 388855781U, 388656199U, 388459307U, 388259567U, 388061561U, 387864629U, 387667837U, 387469879U, 387272381U, 387076399U, 386878507U, 386682287U, 386482841U, 386284729U, 386088091U, 385888673U, 385690637U, 385492399U, 385295177U, 385097183U, 384897481U, 384702599U, 384503279U, 384303877U, 384105457U, 383910119U, 383710697U, 383513033U, 383314843U, 383118283U, 382920323U, 382722091U, 382526117U, 382327081U, 382131317U, 381932543U, 381733871U, 381536263U, 381339001U, 381141713U, 380943287U, 380745119U, 380549473U, 380353643U, 380155829U, 379959787U, 379761233U, 379564693U, 379368433U, 379169093U, 378972059U, 378774973U, 378576661U, 378379069U, 378181577U, 377986579U, 377790331U, 377593961U, 377396317U, 377199353U, 377001491U, 376804807U, 376607597U, 376412041U, 376214897U, 376016687U, 375818951U, 375622451U, 375423943U, 375226717U, 375030277U, 374835067U, 374637187U, 374441663U, 374245843U, 374049421U, 373850149U, 373652611U, 373455721U, 373259041U, 373061153U, 372865313U, 372666439U, 372467983U, 372269861U, 372073027U, 371875487U, 371679949U, 371481403U, 371284019U, 371087051U, 370890119U, 370690913U, 370493017U, 370294313U, 370097443U, 369899443U, 369703973U, 369505193U, 369307739U, 369109889U, 368911969U, 368714663U, 368517571U, 368320279U, 368120243U, 367923209U, 367726043U, 367529347U, 367332887U, 367135781U, 366938617U, 366741209U, 366543559U, 366347753U, 366149503U, 365955307U, 365756527U, 365558581U, 365363857U, 365166587U, 364970513U, 364773737U, 364575859U, 364377521U, 364179511U, 363983131U, 363785197U, 363588817U, 363390553U, 363195181U, 362999201U, 362803139U, 362604239U, 362406371U, 362210389U, 362014487U, 361815557U, 361619017U, 361423003U, 361226137U, 361028461U, 360832673U, 360635521U, 360439447U, 360240187U, 360040679U, 359842253U, 359645311U, 359447687U, 359249707U, 359052313U, 358858273U, 358661063U, 358463939U, 358266409U, 358068593U, 357872413U, 357675007U, 357478169U, 357280499U, 357083897U, 356885869U, 356688811U, 356492189U, 356295151U, 356098751U, 355901947U, 355704463U, 355507771U, 355309891U, 355114247U, 354917833U, 354720913U, 354523361U, 354326381U, 354130529U, 353933969U, 353737781U, 353539999U, 353342723U, 353145461U, 352948801U, 352753501U, 352555993U, 352360607U, 352163509U, 351967027U, 351769367U, 351572531U, 351374641U, 351177149U, 350980813U, 350785063U, 350585953U, 350388953U, 350192669U, 349996081U, 349801069U, 349605001U, 349408399U, 349212121U, 349017743U, 348820009U, 348624013U, 348426301U, 348229087U, 348031709U, 347834699U, 347637391U, 347439167U, 347242471U, 347044981U, 346849813U, 346652567U, 346454621U, 346257913U, 346061753U, 345865753U, 345669557U, 345473837U, 345275929U, 345078781U, 344882101U, 344684033U, 344488973U, 344292059U, 344097217U, 343898977U, 343703963U, 343508807U, 343311377U, 343115831U, 342919721U, 342722383U, 342523879U, 342328037U, 342131789U, 341935313U, 341738809U, 341541943U, 341347519U, 341150387U, 340953829U, 340757311U, 340561127U, 340364267U, 340168667U, 339974029U, 339778027U, 339582403U, 339384623U, 339187153U, 338991377U, 338796769U, 338599637U, 338403323U, 338206987U, 338010899U, 337813561U, 337615627U, 337419529U, 337223017U, 337028317U, 336830243U, 336634169U, 336437867U, 336240617U, 336046489U, 335848273U, 335650519U, 335451937U, 335257631U, 335061379U, 334866143U, 334671119U, 334475023U, 334278407U, 334081999U, 333885493U, 333689641U, 333493817U, 333295159U, 333099301U, 332902267U, 332708333U, 332513537U, 332317099U, 332121589U, 331923899U, 331726243U, 331530721U, 331334567U, 331139597U, 330943961U, 330746777U, 330549281U, 330353497U, 330155801U, 329958217U, 329761063U, 329565997U, 329372503U, 329175647U, 328979237U, 328784177U, 328586053U, 328389337U, 328193059U, 327995519U, 327800741U, 327605669U, 327410011U, 327213077U, 327017179U, 326821853U, 326623663U, 326428433U, 326231999U, 326037541U, 325842991U, 325645601U, 325448521U, 325253213U, 325057771U, 324862957U, 324666421U, 324471799U, 324273199U, 324076547U, 323881451U, 323686007U, 323491559U, 323294771U, 323098057U, 322903201U, 322706641U, 322510327U, 322315337U, 322119839U, 321923383U, 321727409U, 321530717U, 321333583U, 321137129U, 320941081U, 320744891U, 320551463U, 320355521U, 320159297U, 319962779U, 319766467U, 319571167U, 319375031U, 319180403U, 318982711U, 318785903U, 318589429U, 318393197U, 318196201U, 318000107U, 317805539U, 317609239U, 317414249U, 317218159U, 317021557U, 316825007U, 316630189U, 316434571U, 316240933U, 316042729U, 315846803U, 315650969U, 315456887U, 315260969U, 315064801U, 314867783U, 314671963U, 314475647U, 314281483U, 314084747U, 313889507U, 313693873U, 313499171U, 313301939U, 313106369U, 312911791U, 312714757U, 312520513U, 312326171U, 312130883U, 311935249U, 311740393U, 311544097U, 311348537U, 311150603U, 310954757U, 310760423U, 310565063U, 310367201U, 310172567U, 309976889U, 309780833U, 309585277U, 309390391U, 309194843U, 308999861U, 308803367U, 308608061U, 308414591U, 308219759U, 308025181U, 307831889U, 307635407U, 307438961U, 307243633U, 307049789U, 306853601U, 306659321U, 306462509U, 306268327U, 306071489U, 305877857U, 305682331U, 305488069U, 305293357U, 305095501U, 304900741U, 304706543U, 304511563U, 304317733U, 304123049U, 303926687U, 303730639U, 303533579U, 303337841U, 303142717U, 302947639U, 302751403U, 302556227U, 302360789U, 302164789U, 301969669U, 301774477U, 301578371U, 301384009U, 301189789U, 300993977U, 300799193U, 300604537U, 300409147U, 300214097U, 300018991U, 299824153U, 299630267U, 299435627U, 299240393U, 299045213U, 298849277U, 298652239U, 298456597U, 298263409U, 298066163U, 297872719U, 297677909U, 297481843U, 297285559U, 297091783U, 296897011U, 296700601U, 296505931U, 296311601U, 296116567U, 295921999U, 295726633U, 295531559U, 295336793U, 295140841U, 294942679U, 294748271U, 294553247U, 294359101U, 294165023U, 293968579U, 293776391U, 293581697U, 293386861U, 293190439U, 292996973U, 292800799U, 292605169U, 292409519U, 292215767U, 292021063U, 291827639U, 291633949U, 291437387U, 291242587U, 291048767U, 290854877U, 290661247U, 290463907U, 290269211U, 290071961U, 289876151U, 289683391U, 289489001U, 289295263U, 289099033U, 288904207U, 288709153U, 288515441U, 288322451U, 288125489U, 287931167U, 287736619U, 287540761U, 287346179U, 287151391U, 286959503U, 286764607U, 286568573U, 286374031U, 286178987U, 285983519U, 285789107U, 285594181U, 285399307U, 285205703U, 285008237U, 284812981U, 284618359U, 284422013U, 284227513U, 284032559U, 283836739U, 283642439U, 283449623U, 283255697U, 283058701U, 282864317U, 282669041U, 282475181U, 282280811U, 282085339U, 281889917U, 281695201U, 281500633U, 281306489U, 281113423U, 280918579U, 280723097U, 280528693U, 280334149U, 280141241U, 279946393U, 279751027U, 279560293U, 279365003U, 279170747U, 278975017U, 278780989U, 278585389U, 278389271U, 278195611U, 278001011U, 277805389U, 277611193U, 277419089U, 277225111U, 277029673U, 276835171U, 276644429U, 276448457U, 276252617U, 276058423U, 275863681U, 275669291U, 275475751U, 275281729U, 275088881U, 274894013U, 274697779U, 274504193U, 274310441U, 274117891U, 273924907U, 273730747U, 273535697U, 273342491U, 273147961U, 272953697U, 272758777U, 272564821U, 272371163U, 272178229U, 271982563U, 271787753U, 271595333U, 271400323U, 271206511U, 271009061U, 270814079U, 270619381U, 270427243U, 270232243U, 270036869U, 269844067U, 269647501U, 269451593U, 269257223U, 269063869U, 268870291U, 268676921U, 268483349U, 268290353U, 268094273U, 267900641U, 267707107U, 267513931U, 267318967U, 267123811U, 266929331U, 266735921U, 266541529U, 266344789U, 266149801U, 265955761U, 265762681U, 265568717U, 265376333U, 265184369U, 264990793U, 264798371U, 264604061U, 264408223U, 264215219U, 264021649U, 263825923U, 263631391U, 263435899U, 263239267U, 263046703U, 262852531U, 262658387U, 262464793U, 262271809U, 262080089U, 261886379U, 261692357U, 261498031U, 261306077U, 261112427U, 260918267U, 260725741U, 260532791U, 260338409U, 260144699U, 259950673U, 259756537U, 259560409U, 259367083U, 259174913U, 258980681U, 258786469U, 258593123U, 258399347U, 258205139U, 258011459U, 257818237U, 257623973U, 257431091U, 257237641U, 257044279U, 256853161U, 256658621U, 256462571U, 256266811U, 256073957U, 255879553U, 255687011U, 255493417U, 255301757U, 255107311U, 254913271U, 254719727U, 254527073U, 254334673U, 254141203U, 253946449U, 253754503U, 253559893U, 253366097U, 253173623U, 252979483U, 252786907U, 252591419U, 252398903U, 252204389U, 252012149U, 251819627U, 251622391U, 251429363U, 251237071U, 251043629U, 250851683U, 250658201U, 250465169U, 250271443U, 250077787U, 249883757U, 249690719U, 249497777U, 249303823U, 249110591U, 248917909U, 248722577U, 248531111U, 248338187U, 248146201U, 247953331U, 247759651U, 247565719U, 247371941U, 247179193U, 246985139U, 246791761U, 246598217U, 246406241U, 246212237U, 246018317U, 245824157U, 245630933U, 245437499U, 245244113U, 245050829U, 244859389U, 244669351U, 244476997U, 244284641U, 244092203U, 243896459U, 243703637U, 243509891U, 243316207U, 243123827U, 242930803U, 242737823U, 242542541U, 242349871U, 242155003U, 241962229U, 241768279U, 241573951U, 241381463U, 241187647U, 240994267U, 240802189U, 240609661U, 240417691U, 240225439U, 240033793U, 239840473U, 239647459U, 239455163U, 239262083U, 239068651U, 238874029U, 238681423U, 238488847U, 238295927U, 238103737U, 237912613U, 237719497U, 237528143U, 237335599U, 237142793U, 236950423U, 236759689U, 236566277U, 236372723U, 236180239U, 235988591U, 235796063U, 235601153U, 235409131U, 235218167U, 235025429U, 234833069U, 234642053U, 234449203U, 234255401U, 234063703U, 233870243U, 233675419U, 233483567U, 233289703U, 233095871U, 232901521U, 232711207U, 232517699U, 232323913U, 232130593U, 231937631U, 231744913U, 231553181U, 231360061U, 231167999U, 230975573U, 230782369U, 230591323U, 230400697U, 230206813U, 230014139U, 229822447U, 229631383U, 229437889U, 229244651U, 229050709U, 228859753U, 228667319U, 228474931U, 228283373U, 228091951U, 227898883U, 227705561U, 227510263U, 227318057U, 227125973U, 226933331U, 226741129U, 226549201U, 226356973U, 226164139U, 225972629U, 225781723U, 225588239U, 225395087U, 225201127U, 225008657U, 224817499U, 224623351U, 224430487U, 224238809U, 224047783U, 223854737U, 223660903U, 223470251U, 223278821U, 223088597U, 222898021U, 222703603U, 222513397U, 222320779U, 222128581U, 221936789U, 221745649U, 221553767U, 221359997U, 221169271U, 220977649U, 220785023U, 220592791U, 220400603U, 220207301U, 220014643U, 219822851U, 219630181U, 219437957U, 219245029U, 219053453U, 218861609U, 218669813U, 218477293U, 218283259U, 218092937U, 217902037U, 217708723U, 217515989U, 217323787U, 217133011U, 216939881U, 216748201U, 216554441U, 216362941U, 216171331U, 215979851U, 215787829U, 215595199U, 215402939U, 215211307U, 215019767U, 214829773U, 214638997U, 214447763U, 214255211U, 214063807U, 213871681U, 213679183U, 213484949U, 213293911U, 213101849U, 212911249U, 212719163U, 212526101U, 212335061U, 212143537U, 211951819U, 211758037U, 211566871U, 211375777U, 211184881U, 210993641U, 210801817U, 210609337U, 210416527U, 210224867U, 210032651U, 209840663U, 209650703U, 209460331U, 209269979U, 209078249U, 208885571U, 208694699U, 208503187U, 208309727U, 208118389U, 207925591U, 207734029U, 207542903U, 207352543U, 207161509U, 206968849U, 206778353U, 206587259U, 206395493U, 206205443U, 206012971U, 205821611U, 205629667U, 205438339U, 205246957U, 205056107U, 204863557U, 204673607U, 204481997U, 204291247U, 204098737U, 203907721U, 203717797U, 203524921U, 203334251U, 203142649U, 202952569U, 202762199U, 202569253U, 202376893U, 202185367U, 201993299U, 201804233U, 201612913U, 201420629U, 201230069U, 201038863U, 200847253U, 200655667U, 200466187U, 200271727U, 200082481U, 199893791U, 199701701U, 199509859U, 199319431U, 199128547U, 198937253U, 198745559U, 198554557U, 198365039U, 198174583U, 197981587U, 197790517U, 197598103U, 197405587U, 197214601U, 197022479U, 196832221U, 196641343U, 196450417U, 196258003U, 196065559U, 195875749U, 195684091U, 195493957U, 195301861U, 195110033U, 194920021U, 194730253U, 194538937U, 194348221U, 194157839U, 193967047U, 193777123U, 193586951U, 193397299U, 193205863U, 193014079U, 192823493U, 192634577U, 192444121U, 192253307U, 192063899U, 191872073U, 191680613U, 191488183U, 191296309U, 191105209U, 190913759U, 190722271U, 190531303U, 190340209U, 190148869U, 189959467U, 189768749U, 189578791U, 189386867U, 189195871U, 189006953U, 188817067U, 188626177U, 188434369U, 188243597U, 188051989U, 187862693U, 187672487U, 187479947U, 187290289U, 187101599U, 186909721U, 186718979U, 186529927U, 186340093U, 186149101U, 185957879U, 185767973U, 185576759U, 185386519U, 185196007U, 185006201U, 184815809U, 184626997U, 184437511U, 184248707U, 184057999U, 183868519U, 183677189U, 183489073U, 183299393U, 183108421U, 182919001U, 182726549U, 182535739U, 182343781U, 182154179U, 181962689U, 181771903U, 181582549U, 181390861U, 181200457U, 181010399U, 180818789U, 180628141U, 180437107U, 180246329U, 180056753U, 179865403U, 179677123U, 179488103U, 179298667U, 179108591U, 178917853U, 178729183U, 178538917U, 178348147U, 178156337U, 177967877U, 177779429U, 177589199U, 177399011U, 177208567U, 177020047U, 176829997U, 176641147U, 176450971U, 176261209U, 176070889U, 175881457U, 175690829U, 175501171U, 175312391U, 175124483U, 174934229U, 174744569U, 174553387U, 174362887U, 174173123U, 173984141U, 173793853U, 173603611U, 173414587U, 173225827U, 173036407U, 172846613U, 172655837U, 172466647U, 172276381U, 172087627U, 171897619U, 171708997U, 171518131U, 171328837U, 171140153U, 170951563U, 170762941U, 170571809U, 170381957U, 170191919U, 170004691U, 169814977U, 169624019U, 169434773U, 169248449U, 169058089U, 168869417U, 168679261U, 168490577U, 168301619U, 168112519U, 167921771U, 167733523U, 167543461U, 167355193U, 167165281U, 166977197U, 166787039U, 166597537U, 166409207U, 166221217U, 166031297U, 165842861U, 165653129U, 165462509U, 165272743U, 165083201U, 164893327U, 164702893U, 164514887U, 164325341U, 164135749U, 163945493U, 163758097U, 163569001U, 163380533U, 163193077U, 163003367U, 162815113U, 162625381U, 162435659U, 162247079U, 162058889U, 161868769U, 161679187U, 161490583U, 161299297U, 161109331U, 160920703U, 160733017U, 160544453U, 160355989U, 160166753U, 159978367U, 159790819U, 159601727U, 159412639U, 159223517U, 159034937U, 158847659U, 158657761U, 158466983U, 158277827U, 158087929U, 157899923U, 157711129U, 157521739U, 157333247U, 157144913U, 156955559U, 156766583U, 156578579U, 156389789U, 156200969U, 156012877U, 155824663U, 155635999U, 155449181U, 155259329U, 155071097U, 154882151U, 154692103U, 154504913U, 154316737U, 154127989U, 153937877U, 153750617U, 153563087U, 153374737U, 153184901U, 152998253U, 152808611U, 152622137U, 152433731U, 152244559U, 152054831U, 151864819U, 151676659U, 151488713U, 151299593U, 151112447U, 150922319U, 150734347U, 150543803U, 150355943U, 150167639U, 149979413U, 149790647U, 149602613U, 149414519U, 149226059U, 149036633U, 148848053U, 148660459U, 148473037U, 148284233U, 148095697U, 147908051U, 147719849U, 147530927U, 147342497U, 147154583U, 146967131U, 146779973U, 146592161U, 146404283U, 146215987U, 146028829U, 145840997U, 145653953U, 145465849U, 145277879U, 145088759U, 144900647U, 144710743U, 144522883U, 144335641U, 144148133U, 143960009U, 143772731U, 143584663U, 143397817U, 143211583U, 143023403U, 142836769U, 142649069U, 142460501U, 142273903U, 142086817U, 141901079U, 141713353U, 141526009U, 141337631U, 141150731U, 140963029U, 140773079U, 140585771U, 140397097U, 140208613U, 140020883U, 139833637U, 139647301U, 139459559U, 139273223U, 139084727U, 138896581U, 138710941U, 138523223U, 138335569U, 138146971U, 137958407U, 137770219U, 137581757U, 137396477U, 137209543U, 137020991U, 136832713U, 136645373U, 136459727U, 136273777U, 136085947U, 135898517U, 135710527U, 135521381U, 135334181U, 135146093U, 134959613U, 134773459U, 134586799U, 134399621U, 134213483U, 134026553U, 133838149U, 133651027U, 133462151U, 133276543U, 133087957U, 132901367U, 132714497U, 132526507U, 132339761U, 132152729U, 131965111U, 131777039U, 131591081U, 131403011U, 131217089U, 131030267U, 130844327U, 130658131U, 130471373U, 130284131U, 130096721U, 129908039U, 129720413U, 129533941U, 129348269U, 129161959U, 128974297U, 128787667U, 128603047U, 128417117U, 128229061U, 128042461U, 127856539U, 127670819U, 127482731U, 127296359U, 127108343U, 126923837U, 126736237U, 126549919U, 126363241U, 126176537U, 125990521U, 125804839U, 125619577U, 125431459U, 125245501U, 125059483U, 124873351U, 124686977U, 124499801U, 124313051U, 124128931U, 123941581U, 123756023U, 123570427U, 123384229U, 123198661U, 123012431U, 122825713U, 122640377U, 122453621U, 122265487U, 122079197U, 121893817U, 121707613U, 121521013U, 121334561U, 121148387U, 120964253U, 120777233U, 120590153U, 120403117U, 120216113U, 120030817U, 119846431U, 119659843U, 119473723U, 119288087U, 119101837U, 118913621U, 118726159U, 118540469U, 118355789U, 118168691U, 117983309U, 117797447U, 117610693U, 117426377U, 117239467U, 117053617U, 116868613U, 116680763U, 116495963U, 116310731U, 116124461U, 115940059U, 115755071U, 115570151U, 115383889U, 115197619U, 115012217U, 114826507U, 114639611U, 114453901U, 114268459U, 114083461U, 113896997U, 113710601U, 113523551U, 113337607U, 113151163U, 112968187U, 112781413U, 112597567U, 112410863U, 112224869U, 112041313U, 111856057U, 111671939U, 111485417U, 111300359U, 111113659U, 110927723U, 110742817U, 110558197U, 110373097U, 110185429U, 110000207U, 109816123U, 109631227U, 109445953U, 109261027U, 109076729U, 108891301U, 108706319U, 108520781U, 108338011U, 108154273U, 107969483U, 107783167U, 107599229U, 107414033U, 107229569U, 107045951U, 106860881U, 106674979U, 106491023U, 106305917U, 106121371U, 105936421U, 105751201U, 105566597U, 105380491U, 105195661U, 105011527U, 104826877U, 104640791U, 104456647U, 104271161U, 104088581U, 103905899U, 103720889U, 103535363U, 103351607U, 103166803U, 102982193U, 102797509U, 102611801U, 102428533U, 102245177U, 102061153U, 101878417U, 101693441U, 101508191U, 101324557U, 101140019U, 100957291U, 100772813U, 100587523U, 100402817U, 100217561U, 100034317U, 99851249U, 99665549U, 99482633U, 99298943U, 99112829U, 98929081U, 98743261U, 98558099U, 98374879U, 98191759U, 98006033U, 97821839U, 97638559U, 97456841U, 97272631U, 97087433U, 96904513U, 96719809U, 96537893U, 96353401U, 96168011U, 95983787U, 95801747U, 95616853U, 95433263U, 95249807U, 95066039U, 94883111U, 94700833U, 94516717U, 94333933U, 94149721U, 93966659U, 93784181U, 93599687U, 93415661U, 93232427U, 93049301U, 92863711U, 92681111U, 92497303U, 92313943U, 92129753U, 91947211U, 91761893U, 91580219U, 91395749U, 91213127U, 91030321U, 90846887U, 90664879U, 90480161U, 90297667U, 90115583U, 89933297U, 89749379U, 89564353U, 89380243U, 89196911U, 89014231U, 88831753U, 88648711U, 88464433U, 88281301U, 88099309U, 87918041U, 87735311U, 87551473U, 87368143U, 87185521U, 87002527U, 86819059U, 86635727U, 86454139U, 86271967U, 86087539U, 85905473U, 85723789U, 85539823U, 85358417U, 85175957U, 84992489U, 84809147U, 84626603U, 84444043U, 84260999U, 84077507U, 83895419U, 83714789U, 83531321U, 83348579U, 83165221U, 82982057U, 82800373U, 82619401U, 82436671U, 82253887U, 82070687U, 81889261U, 81706409U, 81524419U, 81342557U, 81159839U, 80980007U, 80798779U, 80617753U, 80435371U, 80253763U, 80072779U, 79888511U, 79706771U, 79525021U, 79343701U, 79161149U, 78979279U, 78796441U, 78615211U, 78433877U, 78250223U, 78068383U, 77887133U, 77705807U, 77523223U, 77341399U, 77159333U, 76977959U, 76797257U, 76614667U, 76431583U, 76249919U, 76067633U, 75886747U, 75706193U, 75523937U, 75343739U, 75163607U, 74982307U, 74800723U, 74619133U, 74438183U, 74256739U, 74075017U, 73892317U, 73710739U, 73531123U, 73349173U, 73168181U, 72986443U, 72806519U, 72624863U, 72443671U, 72262847U, 72083749U, 71902819U, 71721367U, 71540317U, 71360867U, 71180273U, 70999073U, 70818323U, 70636019U, 70455323U, 70275589U, 70095271U, 69913423U, 69732599U, 69552737U, 69373621U, 69192857U, 69011251U, 68831857U, 68650541U, 68469409U, 68288557U, 68108351U, 67927511U, 67746827U, 67567627U, 67387867U, 67208347U, 67028069U, 66848311U, 66666751U, 66487507U, 66307727U, 66128837U, 65950439U, 65770451U, 65589409U, 65410649U, 65230259U, 65049041U, 64870343U, 64688747U, 64507787U, 64327903U, 64147561U, 63968063U, 63789757U, 63610199U, 63430931U, 63251467U, 63071809U, 62892839U, 62713073U, 62532517U, 62352571U, 62173597U, 61994887U, 61815977U, 61636231U, 61456183U, 61275419U, 61094951U, 60915853U, 60737837U, 60559241U, 60379751U, 60201523U, 60021539U, 59841973U, 59663497U, 59484767U, 59305187U, 59125333U, 58945219U, 58767607U, 58589033U, 58410523U, 58231967U, 58052879U, 57873817U, 57694499U, 57514829U, 57335981U, 57158411U, 56980423U, 56800753U, 56624527U, 56446043U, 56266219U, 56088649U, 55910791U, 55732351U, 55555231U, 55376369U, 55197721U, 55019897U, 54841331U, 54662059U, 54485107U, 54306403U, 54126781U, 53949167U, 53770853U, 53593171U, 53413639U, 53235829U, 53058007U, 52880033U, 52702613U, 52525171U, 52347107U, 52168973U, 51990767U, 51813187U, 51636499U, 51458861U, 51281453U, 51104257U, 50925361U, 50748149U, 50570687U, 50394067U, 50216953U, 50039263U, 49861883U, 49684643U, 49508111U, 49332421U, 49155797U, 48978451U, 48802009U, 48623479U, 48446927U, 48269713U, 48092383U, 47913799U, 47737211U, 47559517U, 47382877U, 47205551U, 47028899U, 46852483U, 46675831U, 46499939U, 46323493U, 46146389U, 45969251U, 45792757U, 45616187U, 45441163U, 45266317U, 45089893U, 44914523U, 44738009U, 44563219U, 44387113U, 44210707U, 44034449U, 43858921U, 43682351U, 43505453U, 43330681U, 43154911U, 42978773U, 42801313U, 42625673U, 42449963U, 42274433U, 42100169U, 41923451U, 41748299U, 41572033U, 41396093U, 41219881U, 41044891U, 40868299U, 40695289U, 40518707U, 40343419U, 40168781U, 39994211U, 39817907U, 39642653U, 39468991U, 39294637U, 39120883U, 38945273U, 38772131U, 38597917U, 38422801U, 38249219U, 38075273U, 37901167U, 37725713U, 37551001U, 37377479U, 37201921U, 37029367U, 36854551U, 36679801U, 36505093U, 36330773U, 36157423U, 35984339U, 35809141U, 35635627U, 35461177U, 35287939U, 35114207U, 34939903U, 34767391U, 34591933U, 34418939U, 34244071U, 34069129U, 33893689U, 33721511U, 33548077U, 33374401U, 33202313U, 33028577U, 32856277U, 32682743U, 32509907U, 32337311U, 32163991U, 31991731U, 31819127U, 31646471U, 31473479U, 31300459U, 31127519U, 30953453U, 30781319U, 30609311U, 30437177U, 30265159U, 30092813U, 29922733U, 29750759U, 29579519U, 29406439U, 29235953U, 29062879U, 28890787U, 28718537U, 28546591U, 28374859U, 28204291U, 28031611U, 27861667U, 27689833U, 27518653U, 27347557U, 27174779U, 27004343U, 26834293U, 26662327U, 26491921U, 26321989U, 26150171U, 25979521U, 25809083U, 25638607U, 25468039U, 25298069U, 25124909U, 24955681U, 24783713U, 24614839U, 24444313U, 24274847U, 24105251U, 23935453U, 23765431U, 23595163U, 23425559U, 23256053U, 23085833U, 22916461U, 22747187U, 22578419U, 22409393U, 22239713U, 22068143U, 21900377U, 21731779U, 21563219U, 21394229U, 21226157U, 21056153U, 20887649U, 20718781U, 20551697U, 20382253U, 20213983U, 20045197U, 19878041U, 19710289U, 19541903U, 19374079U, 19206023U, 19038311U, 18870161U, 18703387U, 18536303U, 18368221U, 18201941U, 18033391U, 17866619U, 17699107U, 17532169U, 17366749U, 17201039U, 17032781U, 16867867U, 16702099U, 16535639U, 16369853U, 16203367U, 16036523U, 15870383U, 15705071U, 15539987U, 15374041U, 15208997U, 15042919U, 14876951U, 14712427U, 14547283U, 14382007U, 14218571U, 14053619U, 13887953U, 13724233U, 13560847U, 13395559U, 13231343U, 13067423U, 12902137U, 12738433U, 12575881U, 12411409U, 12249493U, 12086059U, 11923057U, 11760059U, 11597701U, 11435887U, 11272697U, 11109827U, 10947941U, 10786267U, 10624787U, 10463443U, 10302407U, 10140307U, 9979111U, 9817057U, 9655759U, 9495601U, 9334487U, 9174793U, 9014101U, 8853359U, 8693653U, 8534489U, 8375273U, 8215633U, 8056423U, 7896949U, 7738559U, 7580459U, 7421383U, 7263143U, 7104341U, 6947753U, 6791437U, 6633877U, 6477301U, 6319483U, 6163567U, 6007247U, 5851717U, 5695831U, 5539363U, 5383601U, 5229331U, 5074633U, 4920613U, 4766999U, 4613237U, 4459951U, 4307453U, 4154791U, 4002547U, 3849943U, 3698881U, 3548471U, 3396661U, 3246119U, 3097141U, 2948161U, 2799451U, 2650931U, 2503597U, 2356573U, 2209499U, 2063573U, 1918439U, 1774937U, 1630987U, 1488133U, 1346567U, 1205653U, 1066909U, 927853U, 791447U, 656683U, 523417U, 393073U, 266083U, 143687U }; SHAR_EOF fi # end of overwriting check if test -f 'primes.c' then echo shar: will not over-write existing file "'primes.c'" else cat << "SHAR_EOF" > 'primes.c' #include #include #include "primes.h" #include "primelist.h" #define YES 1 #define NO 0 #define NPRIMES 10000 int primes[NPRIMES]; #ifdef __STDC__ int init_prime(void) #else int init_prime() #endif { int i, j, obtained = 0, isprime; for(i=3; i < MINPRIME; i += 2) { isprime = YES; for(j=0; j < obtained; j++) if(i%primes[j] == 0) { isprime = NO; break; } else if(primes[j]*primes[j] > i) break; if(isprime == YES) { primes[obtained] = i; obtained++; } } return obtained; } #ifdef __STDC__ int getprime(int need, unsigned int *prime_array, int offset) #else int getprime(need, prime_array, offset) int need, offset; unsigned int *prime_array; #endif { static int initiallized = NO, num_prime; unsigned int largest; int i, isprime, index, obtained = 0; if(need <= 0) { fprintf(stderr,"WARNING: Number of primes needed = %d < 1; None returned\n" , need); return 0; } if(offset < 0) { fprintf(stderr,"WARNING: Offset of prime = %d < 1; None returned\n" , offset); return 0; } if(offset+need-1 MAXPRIMEOFFSET) { fprintf(stderr,"WARNING: generator has branched maximum number of times;\nindependence of generators no longer guaranteed"); offset = offset % MAXPRIMEOFFSET; } if(offset < PRIMELISTSIZE1) /* search table for previous prime */ { largest = prime_list[offset] + 2; offset = 0; } else { index = (unsigned int) ((offset-PRIMELISTSIZE1+1)/STEP) + PRIMELISTSIZE1 - 1; largest = prime_list[index] + 2; offset -= (index-PRIMELISTSIZE1+1)*STEP + PRIMELISTSIZE1 - 1; } while(need > obtained && largest > MINPRIME) { isprime = YES; largest -= 2; for(i=0; i 0) offset--; else if(isprime == YES) prime_array[obtained++] = largest; } if(need > obtained) fprintf(stderr,"ERROR: Insufficient number of primes: needed %d, obtained %d\n", need, obtained); return obtained; } #if 0 main() { unsigned int newprimes[1500], np, i; np = getprime(2,newprimes,0); np = getprime(2,newprimes+2,9); np = getprime(2,newprimes+4,12); for(i=0; i<6; i++) printf("%u. %u \n", i, newprimes[i]); /*while(np--) printf("New primes: %u\n", newprimes[np]); np = getprime(5,newprimes); printf("%d new primes obtained ...\n", np); while(np--) printf("New primes: %u\n", newprimes[np]);*/ } #endif SHAR_EOF fi # end of overwriting check if test -f 'primes.h' then echo shar: will not over-write existing file "'primes.h'" else cat << "SHAR_EOF" > 'primes.h' #ifndef _primes_h_ #define _primes_h_ #ifndef ANSI_ARGS #ifdef __STDC__ #define ANSI_ARGS(args) args #else #define ANSI_ARGS(args) () #endif #endif int getprime ANSI_ARGS((int need, unsigned int *prime_array, int offset)); #define MAXPRIME 3037000501U /* largest odd # < sqrt(2)*2^31+2 */ #define MINPRIME 55108 /* sqrt(MAXPRIME) */ #define MAXPRIMEOFFSET 146138719U /* Total number of available primes */ #endif SHAR_EOF fi # end of overwriting check cd .. if test ! -d 'lfg' then mkdir 'lfg' fi cd 'lfg' if test -f 'Makefile' then echo shar: will not over-write existing file "'Makefile'" else cat << "SHAR_EOF" > 'Makefile' ############################################################################ # # Typing the command below => results in the following being created # make => Fortran and C libraries for the generator, # Timing executibles. # make lfg => Library for the Lagged Fibonacci Generator # # Object files created during the compilation process can be deleted finally # by typing # make clean ############################################################################ SHELL = /bin/sh include ../../make.CHOICES LIBDIR = ../../$(LIB_REL_DIR) SRCDIR = .. CHKDIR = ../.. include $(SRCDIR)/make.$(PLAT) all : lfg timesprng checksprng #--------------------------------------------------------------------------- # Construct Library #--------------------------------------------------------------------------- SPRNG_COMMON_DEPEND = $(SRCDIR)/fwrap_mpi.o $(SRCDIR)/cputime.o \ $(SRCDIR)/makeseed.o $(SRCDIR)/simple_mpi.o \ $(SRCDIR)/memory.o $(SRCDIR)/communicate.o $(SRCDIR)/checkid.o $(SRCDIR)/store.o lfg : (cd ..; $(MAKE) sprng_common) $(MAKE) $(LIBDIR)/liblfg.a $(LIBDIR)/liblfg.a: lfg.o $(SPRNG_COMMON_DEPEND) $(AR) $(ARFLAGS) $(LIBDIR)/liblfg.a lfg.o $(SPRNG_COMMON_DEPEND) $(RANLIB) $(LIBDIR)/liblfg.a lfg.o : $(SRCDIR)/interface.h lfg.c $(SRCDIR)/multiply.h $(SRCDIR)/memory.h $(SRCDIR)/store.h $(SRCDIR)/fwrap_.h $(CC) -c $(CFLAGS) $(FFXN) $(INLINEOPT) lfg.c -I$(SRCDIR) #--------------------------------------------------------------------------- # Time the generator #--------------------------------------------------------------------------- timesprng : (cd ..; $(MAKE) timesprng_exec TIMESPRNG_LIB=lfg) #--------------------------------------------------------------------------- # Check portability of generator #--------------------------------------------------------------------------- checksprng : (cd ..; $(MAKE) checksprng_exec CHECKSPRNG_LIB=lfg) cp lfg.data $(CHKDIR)/. #--------------------------------------------------------------------------- .F.f : @if [ -f $*.i ] ; then \ rm $*.i ;\ fi $(CPP) $*.F @if [ -f $*.i ] ; then \ mv $*.i $*.f ;\ fi #--------------------------------------------------------------------------- #--------------------------------------------------------------------------- clean : rm -f *.o *.i realclean : rm -f *.o *.f *~ *.i core a.out .SUFFIXES : .SUFFIXES : .f .F SHAR_EOF fi # end of overwriting check if test -f 'lfg.c' then echo shar: will not over-write existing file "'lfg.c'" else cat << "SHAR_EOF" > 'lfg.c' /*************************************************************************/ /*************************************************************************/ /* Parallel Modified Additive Lagged Fibonacci Generator */ /* */ /* Modified by: Ashok Srinivasan, */ /* NCSA, University of Illinois, Urbana-Champaign */ /* E-Mail: ashoks@ncsa.uiuc.edu */ /* */ /* Based on the Implementation by: */ /* Steven A. Cuccaro and Daniel V. Pryor, */ /* IDA/Center for Computing Sciences (CCS) */ /* E-Mail: cuccaro@super.org pryor@super.org */ /* */ /* Copyright 1996 September 3, United States Government as Represented */ /* by the Director, National Security Agency. All rights reserved. */ /* */ /* Disclaimer 1: NCSA expressly disclaims any and all warranties, expressed*/ /* or implied, concerning the enclosed software. The intent in sharing */ /* this software is to promote the productive interchange of ideas */ /* throughout the research community. All software is furnished on an */ /* "as is" basis. No further updates to this software should be */ /* expected. Although this may occur, no commitment exists. The authors */ /* certainly invite your comments as well as the reporting of any bugs. */ /* NCSA cannot commit that any or all bugs will be fixed. */ /* */ /* Disclaimer 2: CCS expressly disclaims any and all warranties, expressed */ /* or implied, concerning the enclosed software. This software was */ /* developed at CCS for use in internal research. The intent in sharing */ /* this software is to promote the productive interchange of ideas */ /* throughout the research community. All software is furnished on an */ /* "as is" basis. No further updates to this software should be */ /* expected. Although this may occur, no commitment exists. The authors */ /* certainly invite your comments as well as the reporting of any bugs. */ /* CCS cannot commit that any or all bugs will be fixed. */ /*************************************************************************/ /*************************************************************************/ /*************************************************************************/ /* This version has been modified to use two integer-based additive */ /* lagged-Fibonacci generators to produce integer, float and double */ /* values. The lagged-Fibonacci generators each have 31 bits of */ /* precision (after the bit fixed by the canonical form of the */ /* generator is removed), 31-bit values are generated by XORing */ /* the values after one has been shifted left one bit. The floating */ /* point value is formed by dividing the integer by 1.e+32 (the */ /* lsb's will be dropped from the mantissa to make room for the */ /* exponent), and two of these integer values in sequence are used */ /* to get the necessary precision for the double value. */ /* */ /* This method has the advantage that the generators pass fairly */ /* strict randomness tests, including the Birthday Spacings test */ /* that additive lagged-Fibonacci generators are well known to */ /* fail. The disadvantage is the additional time needed to do the */ /* division explicitly, which was avoided in previous versions. */ /* (As the division is by powers of 2, the user might well consider */ /* making machine-specific versions of this code to insert the bits */ /* into the appropriate places and avoid the problem entirely.) */ /*************************************************************************/ #include #include #include #include #include #define NDEBUG #include #include "interface.h" #include "memory.h" #include "store.h" /*#define PRINT_GEN*/ /* BITS_IN_INT_GEN is the log_2 of the modulus of the generator */ /* for portability this is set to 32, but can be modified; */ /* if modified, make sure INT_MOD_MASK can still be calculated */ #define BITS_IN_INT_GEN 32 /* INT_MOD_MASK is used to perform modular arithmetic - specifying */ /* this value compensates for different sized words on */ /* different architectures */ /* FLT_MULT is used in converting to float and double values; the */ /* odd form is due to a compiler glitch on our CM-5, which */ /* caused (0.5/(unsigned)(1<<31)) to be negative. */ #if (BITS_IN_INT_GEN==32) #define INT_MOD_MASK 0xffffffff #define FLT_MULT (0.25/(unsigned)(1<<30)) #else #define INT_MOD_MASK ((unsigned)(1<>1) /* MAX_BIT_INT is the largest bit position allowed in the index */ /* of the node - it equals BITS_IN_INT_GEN - 2 */ #define MAX_BIT_INT (BITS_IN_INT_GEN-2) /* INTX2_MASK is used in calculation of the node numbers */ #define INTX2_MASK ((1<=0;i--) { new_fill[0] = (new_fill[0]<<1) | (1&bitcnt(reg_fill[0]&temp)); new_fill[1] = (new_fill[1]<<1) | (1&bitcnt(reg_fill[1]&temp)); temp >>= 1; } for (i=28;i<32;i++) { temp = bitcnt(reg_fill[0]&(mask<>(32-i))); new_fill[0] |= (1&temp)<=0;i--) { if (b[i]&(1<hptr; int lval, kval; lval = ((struct rngen *)genptr)->lval; kval = ((struct rngen *)genptr)->kval; r0 = ((struct rngen *)genptr)->r0; r1 = ((struct rngen *)genptr)->r1; hptr = *hp; lptr = hptr + kval; if (lptr>=lval) lptr -= lval; /* INT_MOD_MASK causes arithmetic to be modular when integer size is */ /* different from generator modulus */ r0[hptr] = INT_MOD_MASK&(r0[hptr] + r0[lptr]); r1[hptr] = INT_MOD_MASK&(r1[hptr] + r1[lptr]); new_val = (r1[hptr]&(~1)) ^ (r0[hptr]>>1); if (--hptr < 0) hptr = lval - 1; /* skip an element in the sequence */ if (--lptr < 0) lptr = lval - 1; r0[hptr] = INT_MOD_MASK&(r0[hptr] + r0[lptr]); r1[hptr] = INT_MOD_MASK&(r1[hptr] + r1[lptr]); *hp = (--hptr < 0) ? lval-1 : hptr; return (new_val>>1); } #ifdef __STDC__ float get_rn_flt(int *genptr) #else float get_rn_flt(genptr) int *genptr; #endif /* returns value put into new position */ { unsigned long new_val; /* this cannot be unsigned int due to a bug in the SGI compiler */ unsigned *r0,*r1; int hptr,lptr,*hp = &((struct rngen *)genptr)->hptr; int lval, kval; lval = ((struct rngen *)genptr)->lval; kval = ((struct rngen *)genptr)->kval; r0 = ((struct rngen *)genptr)->r0; r1 = ((struct rngen *)genptr)->r1; hptr = *hp; lptr = hptr + kval; if (lptr>=lval) lptr -= lval; /* INT_MOD_MASK causes arithmetic to be modular when integer size is */ /* different from generator modulus */ r0[hptr] = INT_MOD_MASK&(r0[hptr] + r0[lptr]); r1[hptr] = INT_MOD_MASK&(r1[hptr] + r1[lptr]); new_val = (r1[hptr]&(~1)) ^ (r0[hptr]>>1); if (--hptr < 0) hptr = lval - 1; /* skip an element in the sequence */ if (--lptr < 0) lptr = lval - 1; r0[hptr] = INT_MOD_MASK&(r0[hptr] + r0[lptr]); r1[hptr] = INT_MOD_MASK&(r1[hptr] + r1[lptr]); *hp = (--hptr<0) ? lval-1 : hptr; return (new_val*FLT_MULT); } #ifdef __STDC__ double get_rn_dbl(int *genptr) #else double get_rn_dbl(genptr) int *genptr; #endif /* returns value put into new position */ { unsigned *r0,*r1; unsigned long temp1,temp2; /* Due to a bug in the SGI compiler, this should not be unsigned int */ int hptr,lptr,*hp = &((struct rngen *)genptr)->hptr; double new_val; int lval, kval; lval = ((struct rngen *)genptr)->lval; kval = ((struct rngen *)genptr)->kval; r0 = ((struct rngen *)genptr)->r0; r1 = ((struct rngen *)genptr)->r1; hptr = *hp; lptr = hptr + kval; if (lptr>=lval) lptr -= lval; /* INT_MOD_MASK causes arithmetic to be modular when integer size is */ /* different from generator modulus */ r0[hptr] = INT_MOD_MASK&(r0[hptr] + r0[lptr]); r1[hptr] = INT_MOD_MASK&(r1[hptr] + r1[lptr]); temp1 = (r1[hptr]&(~1)) ^ (r0[hptr]>>1); if (--hptr < 0) hptr = lval - 1; if (--lptr < 0) lptr = lval - 1; r0[hptr] = INT_MOD_MASK&(r0[hptr] + r0[lptr]); r1[hptr] = INT_MOD_MASK&(r1[hptr] + r1[lptr]); temp2 = (r1[hptr]&(~1)) ^ (r0[hptr]>>1); *hp = (--hptr < 0) ? lval-1 : hptr; new_val = ((unsigned int) temp2*(double)FLT_MULT + (unsigned int) temp1)*FLT_MULT; return (new_val); } /*************************************************************************/ /*************************************************************************/ /* INITIALIZE: starts the whole thing going */ /*************************************************************************/ /*************************************************************************/ #ifdef __STDC__ static int **initialize(int ngen, int param, unsigned seed, unsigned *nstart, unsigned initseed) #else static int **initialize(ngen,param, seed,nstart, initseed) int ngen, param; unsigned *nstart, seed, initseed; #endif { int i,j,k,l,*order, length; struct rngen **q; unsigned *nindex; length = valid[param].L; /* allocate memory for node number and fill of each generator */ order = (int *) mymalloc(ngen*sizeof(int)); q = (struct rngen **) mymalloc(ngen*sizeof(struct rngen *)); if (q == NULL || order == NULL) return NULL; for (i=0;ihptr = length - 1; q[i]->si = (unsigned *) mymalloc((length-1)*sizeof(unsigned)); q[i]->r0 = (unsigned *) mymalloc(length*sizeof(unsigned)); q[i]->r1 = (unsigned *) mymalloc(length*sizeof(unsigned)); q[i]->lval = length; q[i]->kval = valid[param].K; q[i]->param = param; q[i]->seed = seed; q[i]->init_seed = initseed; q[i]->gentype = GENTYPE; if (q[i]->r1 == NULL || q[i]->r0 == NULL || q[i]->si == NULL) return NULL; } /* specify register fills and node number arrays */ /* do fills in tree fashion so that all fills branch from index */ /* contained in nstart array */ q[0]->stream_number = nstart[0]; si_double(q[0]->si,nstart,length); get_fill(q[0]->si,q[0]->r0,param,seed); q[0]->si[0]++; get_fill(q[0]->si,q[0]->r1,param,seed); i = 1; order[0] = 0; if (ngen>1) while (1) { l = i; for (k=0;ksi; q[i]->stream_number = nindex[0]; si_double(nindex,nindex, length); for (j=0;jsi[j] = nindex[j]; get_fill(q[i]->si,q[i]->r0,param,seed); q[i]->si[0]++; get_fill(q[i]->si,q[i]->r1,param,seed); if (ngen == ++i) break; } if (ngen == i) break; for (k=l-1;k>0;k--) { order[2*k+1] = l+k; order[2*k] = order[k]; } order[1] = l; } free(order); for (i=ngen-1;i>=0;i--) { k = 0; for (j=1;jsi[j]) k = 1; if (!k) break; for (j=0;j=0) { for (j=0;j<4*length;j++) get_rn_int((int *)(q[i])); i--; } return((int **)q); } /*************************************************************************/ /*************************************************************************/ /* INIT_RNG's: user interface to start things off */ /*************************************************************************/ /*************************************************************************/ #ifdef __STDC__ int *init_rng( int gennum, int total_gen, int seed, int param) #else int *init_rng(gennum,total_gen,seed,param) int gennum,param,seed,total_gen; #endif { int doexit=0,i,k, length; int **p=NULL, *rng; unsigned *nstart=NULL,*si; /* gives back one generator (node gennum) with updated spawning */ /* info; should be called total_gen times, with different value */ /* of gennum in [0,total_gen) each call */ /* check values of gennum and total_gen */ if (total_gen <= 0) /* check if total_gen is valid */ { total_gen = 1; errprint("WARNING","init_rng","Total_gen <= 0. Default value of 1 used for total_gen"); } if (gennum >= MAX_STREAMS) /* check if gen_num is valid */ fprintf(stderr,"WARNING - init_rng: gennum: %d > maximum number of independent streams: %d\n\tIndependence of streams cannot be guranteed.\n", gennum, MAX_STREAMS); if (gennum < 0 || gennum >= total_gen) /* check if gen_num is valid */ { errprint("ERROR","init_rng","gennum out of range. "); return (int *) NULL; } seed &= 0x7fffffff; /* Only 31 LSB of seed considered */ if (param < 0 || param >= NPARAMS) { errprint("WARNING","init_rng","Parameter not valid. Using Default param"); param = 0; } /* check whether generators have previously been defined */ /* guard against access while defining generator parameters for */ /* the 1st time */ length = valid[param].L; /* determine parameters */ k = valid[param].K; if (!lval) { lval = length; /* determine parameters */ kval = k; gseed = seed^GS0; } else { if (lval != length) doexit++; if( seed != (gseed^GS0) ) doexit += 2; if (doexit) { if (doexit&1) errprint("WARNING","init_rng","changing global L value! Independence of streams is not guaranteed"); if (doexit&2) errprint("WARNING","init_rng","changing global seed value! Independence of streams is not guaranteed"); } } /* define the starting vector for the initial node */ nstart = (unsigned *) mymalloc((length-1)*sizeof(unsigned)); if (nstart == NULL) return NULL; nstart[0] = gennum; for (i=1;istream_number = gennum; /* update si array to allow for future spawning of generators */ si = ((struct rngen *)(p[0]))->si; while (si[0] < total_gen && !si[1]) si_double(si,si,length); NGENS++; free(nstart); rng = p[0]; free(p); return rng; } /*************************************************************************/ /*************************************************************************/ /* SPAWN_RNG: spawns new generators */ /*************************************************************************/ /*************************************************************************/ #ifdef __STDC__ int spawn_rng(int *genptr, int nspawned, int ***newgens, int checkid) #else int spawn_rng(genptr,nspawned,newgens, checkid) int *genptr,nspawned, ***newgens, checkid; #endif { int **q=NULL, i; unsigned *p; struct rngen *temp; if (nspawned <= 0) /* check if nspawned is valid */ { nspawned = 1; errprint("WARNING","spawn_rng","Nspawned <= 0. Default value of 1 used for nspawned"); } temp = (struct rngen *) genptr; p = temp->si; q = initialize(nspawned,temp->param,temp->seed,p,temp->init_seed); if (q == NULL) { *newgens = NULL; return 0; } si_double(p,p,temp->lval); NGENS += nspawned; *newgens = (int **) q; if(checkid != 0) for(i=0; ihptr); } #ifdef __STDC__ static int *get_fill_rng( int *genptr) #else static int *get_fill_rng(genptr) int *genptr; #endif { int i,*p; unsigned *pp; struct rngen *temp; temp = (struct rngen *) genptr; p = (int *) mymalloc(2*(temp->lval)*sizeof(int)); if(p == NULL) return NULL; pp = ((struct rngen *)genptr)->r0; for (i=0;ir1; for (i=0;ilval;i++) p[temp->lval+i] = pp[i]; return(p); } #ifdef __STDC__ static int *get_next_index_rng( int *genptr) #else static int *get_next_index_rng(genptr) int *genptr; #endif { int i,*p, lval; unsigned *pp; lval = ((struct rngen *) genptr)->lval; pp = ((struct rngen *)genptr)->si; p = (int *) mymalloc((lval-1)*sizeof(int)); if(p == NULL) return NULL; for (i=0;i>= 1; if (a[i+1]&1) a[i] ^= (1<>= 1; } #ifdef __STDC__ static int *get_node_index_rng( int *genptr) #else static int *get_node_index_rng(genptr) int *genptr; #endif { int *p, length; length = ( (struct rngen *) genptr)->lval; p = get_next_index_rng(genptr); if(p == NULL) return NULL; while (!(p[0]&1)) si_halve(p,length); si_halve(p, length); return(p); } /*************************************************************************/ /*************************************************************************/ /* MESSAGE PASSING ROUTINES */ /*************************************************************************/ /*************************************************************************/ #ifdef __STDC__ int pack_rng( int *genptr, char **buffer) #else int pack_rng(genptr,buffer) int *genptr; char **buffer; #endif { int i, size; struct rngen *q; unsigned char *p, *initp; q = (struct rngen *)genptr; size = (3*(q->lval)+5)*4 + strlen(q->gentype)+1; /* The new load/store routines make using sizeof unnecessary. Infact, */ /* using sizeof could be erroneous. */ initp = p = (unsigned char *) mymalloc(size); if(p == NULL) { *buffer = NULL; return 0; } strcpy((char *)p,q->gentype); p += strlen(q->gentype)+1; p += store_int(q->lval,4,p); p += store_int(q->kval,4,p); p += store_int(q->seed,4,p); p += store_int(q->init_seed,4,p); p += store_int(q->stream_number,4,p); p += store_intarray(q->si,q->lval-1,4,p); p += store_intarray(q->r0,q->lval,4,p); p += store_intarray(q->r1,q->lval,4,p); p += store_int(q->hptr,4,p); *buffer = (char *) initp; assert(p-initp == size); return p-initp; } #ifdef __STDC__ int *unpack_rng( char *p) #else int *unpack_rng(p) char *p; #endif { int doexit=0,i, found, length, k, param; struct rngen *q; unsigned seed, lag1, lag2; unsigned char *packed; packed = (unsigned char *) p; if(strcmp((char *)packed,GENTYPE) != 0) { fprintf(stderr,"ERROR: Unpacked ' %.24s ' instead of ' %s '\n", packed, GENTYPE); return NULL; } packed += strlen(GENTYPE)+1; packed += load_int(packed,4,&lag1); packed += load_int(packed,4,&lag2); packed += load_int(packed,4,&seed); /* check values of parameters for consistency */ for(i=found=0; igentype = GENTYPE; q->si = (unsigned *) mymalloc((length-1)*sizeof(unsigned)); q->r0 = (unsigned *) mymalloc(length*sizeof(unsigned)); q->r1 = (unsigned *) mymalloc(length*sizeof(unsigned)); if (q->r1 == NULL || q->si == NULL || q->r0 == NULL) return NULL; q->lval = length; q->kval = k; q->seed = seed; q->param = param; packed += load_int(packed,4,(unsigned int *)&q->init_seed); packed += load_int(packed,4,(unsigned int *)&q->stream_number); packed += load_intarray(packed,length-1,4,q->si); packed += load_intarray(packed,length,4,q->r0); packed += load_intarray(packed,length,4,q->r1); packed += load_int(packed,4,(unsigned int *)&q->hptr); NGENS++; return (int *) q; } /*************************************************************************/ /*************************************************************************/ /* FREE_RNG: remove memory for a generator */ /*************************************************************************/ /*************************************************************************/ #ifdef __STDC__ int free_rng(int *genptr) #else int free_rng(genptr) int *genptr; #endif { struct rngen *q; q = (struct rngen *)genptr; free(q->si); free(q->r0); free(q->r1); free(q); NGENS--; return NGENS; } #ifdef __STDC__ int print_rng( int *igen) #else int print_rng(igen) int *igen; #endif { struct rngen *gen; gen = (struct rngen *) igen; printf("\n%s\n", GENTYPE+2); printf("\n \tseed = %d, stream_number = %d\tparameter = %d\n\n", gen->init_seed, gen->stream_number, gen->param); return 1; } #include "../simple_.h" #include "../fwrap_.h" SHAR_EOF fi # end of overwriting check if test -f 'lfg.data' then echo shar: will not over-write existing file "'lfg.data'" else cat << "SHAR_EOF" > 'lfg.data' 1082915148 1199233690 1820589 1785469446 1634340924 480238811 1196502070 1382254662 196410471 1026618316 1720651202 1408251811 1441289847 1389668416 449443163 1504881093 1494675635 486370894 1385888008 1593217175 124661380 1526201895 848924191 2004280383 1058558138 417420662 250669417 677053801 1969423926 10648102 2094647591 526910115 1201654150 922289955 1079716037 178362827 115267902 1657564313 271409790 1402783932 1108329258 2091298422 1896209337 1133093496 608107545 593856362 629579113 1526251347 1111155562 841703376 58511471 4920091 1267083368 1504572630 473211957 1164337523 2122077619 9943750 829975784 20529118 937050748 218796243 1743373140 786293299 327041861 1270020614 1187738722 793821325 2060527126 1317974913 1074814491 122614888 508339938 2126426459 842358804 865240170 1908934382 1157089863 813650806 234483167 1414062741 1597549919 1778499375 165819196 933340266 681775915 1413208197 639160951 2115095984 1733872182 277394530 481475234 1983416492 531535858 94678105 2066018822 960695378 1277923970 1051814172 452714453 15042504 1996092391 1658280332 71310038 585584617 602712293 1020720263 1289487756 1474553381 2106438679 1902579254 968037622 1157788792 55031502 2030200509 240437508 228490906 969284932 1169324779 1446572751 728612287 151857310 1507778490 935624766 734721362 1194860398 1543890419 140383648 1444281557 2058960911 614018438 881114235 1470925415 1548789527 1385366568 885386763 1190362585 1119709186 679841602 56737667 247522177 101442423 480937025 1953567667 988645479 1310980899 1343566472 616470030 819936764 721927168 146386523 1867101336 2071461643 1593379669 860102917 1097276065 1769005418 1549048981 1268997475 1619394697 1125370564 884053840 2015221480 2065526019 888745304 166903379 188167058 1736367055 1623463168 1485050365 976162994 420526107 1542913900 721166733 881398264 1714523617 1889513419 1344160269 1255016395 627987561 21591261 519043414 685541256 1060541062 868170468 485270694 1184716625 986110697 532592353 102633571 1654583512 738826165 1278644877 946225194 1623543880 304331045 1851699228 1775881931 940197627 746126970 1759367059 328787674 1781017777 978865887 1192077844 737500000 2128880159 290329567 82681427 593729904 268298730 197038387 586865942 895807934 1239101459 1764017066 958055325 1337339538 425030454 1221817411 151083160 626789827 117906390 877557298 1275869094 1185039087 1103197870 2041549242 1458944131 1692988757 1547876195 678479328 1908068798 952789768 2006916588 2089943787 1719284627 2112755131 1588822892 440206677 380051274 1572148369 86985674 926485915 1371229902 1576387163 1757211363 1474334283 42103110 584921816 1458740353 887677761 2050826394 1297339035 115750084 2094636830 2006190686 106452916 318861409 1594733971 924984322 411693427 1329768461 1206309272 1716488864 471467079 1651979349 1449841852 331734861 1290482465 1170542781 333234374 762004337 1246768193 189578868 169357010 1108656811 1088460846 1883043441 1211019540 745457656 165340631 622233637 1449293017 387288879 1362722696 1184815041 1055317754 1793316746 1244417125 601717933 378622289 734762163 2029627568 748097588 341248706 1413865659 662254447 1351102380 929143950 1230533167 396428647 36742287 40344178 1884294169 1106814751 1215901008 2003540268 1709328838 1501017479 1608768013 758955583 261071626 552163574 1634701815 1606947279 385855901 1208065625 1626472290 95894232 705001674 952061060 1129903048 1582273265 639064650 1267106570 1760257316 1809683941 1118291201 695783365 1802442646 1443477646 756170901 1901893812 830384608 837690960 996852867 1512624106 868215664 983500660 461762284 1365332318 877883261 1214788565 557694252 1992978984 1103518964 1351456169 386595182 810980970 683831232 1994220412 397178948 494978713 1413596588 1178699687 812139654 406840253 1309610403 40151582 1753951914 236161097 1662584346 2047905846 666271096 1894404850 1822181353 942406980 834989517 1475295835 398627529 330096131 564247207 2024788629 657142256 1094842623 1630474369 1730003838 551182878 159256206 1426752795 1784240003 1090949850 1433244670 1518617691 132761082 2074940010 2007319433 445595023 961141277 1660013175 835652268 2005625245 1346854011 1616908730 1114396747 1357585748 650346531 1104395683 1423131831 1325935734 1074447958 220160956 595759073 194940716 991995627 582242260 2117906732 238275028 2046826480 931962587 1802263611 383638402 990973716 1656631870 264137560 1862034548 1937004353 796337072 1403297605 260824582 2105812360 1864781054 645907547 1485629558 663707181 52211510 879582911 645893598 1460171647 537007786 1068021317 1575693224 1050663592 1719268982 1257384781 2108881320 770206655 296413422 398655254 1793156379 1387275167 716507647 754246205 1528963411 1290042324 924380666 370662528 1099132851 1712844525 1746402752 2082925859 1554766039 1155091510 1875611912 1950041091 798675665 1992865574 338726457 1300509330 161915346 486327788 381817220 2092678803 1933381465 1928610457 1899033651 208267523 713363055 912680757 454133075 1255987799 2072000947 1532462713 1466254670 1860084984 1539598774 610816887 1092045173 1709809461 269773215 1843009528 1445151406 1804470262 1072612833 1755008280 49324038 868688056 456404746 1080974593 624919661 1564753752 134863444 1931544032 509117018 1174555507 884100906 1094135398 1637558493 477542827 0.084565 0.196052 0.372614 0.844266 0.219029 0.965468 0.346879 0.703500 0.837802 0.531987 0.500011 0.579585 0.350214 0.597210 0.695174 0.527890 0.052670 0.402515 0.007963 0.767096 0.796223 0.663469 0.102739 0.783556 0.919928 0.090126 0.959878 0.631730 0.404889 0.947372 0.656219 0.741640 0.234966 0.102094 0.629456 0.471907 0.909405 0.384857 0.177491 0.983512 0.474653 0.069731 0.852441 0.837793 0.300331 0.153610 0.023311 0.971997 0.991339 0.313292 0.491559 0.487710 0.538644 0.403264 0.988946 0.763108 0.671488 0.061971 0.392591 0.328099 0.589068 0.262114 0.315888 0.553250 0.707616 0.313421 0.190673 0.849147 0.957321 0.716096 0.068405 0.621905 0.954594 0.602671 0.247255 0.733912 0.231511 0.430815 0.906601 0.019603 0.989859 0.929196 0.194851 0.905422 0.350407 0.204284 0.717792 0.136776 0.328207 0.899848 0.455456 0.610385 0.215376 0.868683 0.404006 0.816630 0.879963 0.036760 0.512958 0.355734 0.496193 0.497096 0.976508 0.974541 0.488178 0.715524 0.121608 0.688977 0.207084 0.922361 0.561481 0.604135 0.090783 0.169902 0.740975 0.210638 0.445019 0.915509 0.930839 0.137698 0.856775 0.673924 0.375034 0.143467 0.690523 0.561809 0.537469 0.682556 0.691834 0.688910 0.834252 0.376408 0.505322 0.482286 0.928769 0.792951 0.631153 0.768919 0.835681 0.294784 0.450925 0.464832 0.111385 0.557877 0.326453 0.971990 0.110699 0.857823 0.949940 0.189534 0.022926 0.399146 0.235207 0.593987 0.154091 0.938512 0.062748 0.625616 0.207599 0.125168 0.301926 0.998894 0.993391 0.492688 0.639379 0.949845 0.841346 0.223193 0.092892 0.706118 0.820080 0.114666 0.471873 0.530835 0.281049 0.141862 0.617196 0.097265 0.539146 0.468042 0.621454 0.974997 0.480946 0.369896 0.569148 0.023842 0.354458 0.281947 0.737402 0.324209 0.732038 0.504288 0.758835 0.115402 0.071611 0.857553 0.931595 0.568053 0.936581 0.593471 0.681737 0.512265 0.343489 0.744079 0.897526 0.907772 0.970117 0.943200 0.689388 0.434617 0.481979 0.397025 0.458546 0.001989 0.181251 0.099461 0.159960 0.952582 0.435851 0.174288 0.174681 0.503422 0.124210 0.612005 0.289001 0.571668 0.279214 0.863935 0.217330 0.601641 0.931600 0.154285 0.481873 0.572226 0.406519 0.473143 0.339343 0.586059 0.232514 0.486867 0.544539 0.797295 0.737432 0.959599 0.862588 0.618668 0.738571 0.496201 0.222487 0.503106 0.520251 0.510457 0.021343 0.572528 0.240901 0.066475 0.909150 0.675095 0.346260 0.871986 0.008729 0.119651 0.102065 0.389080 0.988595 0.454460 0.788731 0.024235 0.431859 0.009863 0.355284 0.903744 0.484711 0.772883 0.622879 0.522689 0.680006 0.644400 0.474074 0.155181 0.164737 0.943659 0.349254 0.444874 0.593439 0.017314 0.192612 0.095483 0.669686 0.789194 0.184254 0.277014 0.753862 0.438809 0.372599 0.141073 0.325706 0.140104 0.100488 0.942691 0.461208 0.722981 0.969588 0.033370 0.039492 0.485162 0.554375 0.421127 0.704028 0.791177 0.868085 0.261100 0.613213 0.431087 0.922165 0.821503 0.646905 0.179885 0.080717 0.440958 0.538746 0.603590 0.098122 0.473518 0.724045 0.374444 0.398719 0.235766 0.614035 0.101978 0.437155 0.203825 0.059458 0.365296 0.042470 0.780635 0.248331 0.970834 0.767443 0.616197 0.124482 0.263678 0.400085 0.549784 0.379360 0.098996 0.978036 0.180608 0.272404 0.534683 0.030527 0.522510 0.843832 0.585454 0.838458 0.266721 0.632686 0.108064 0.903690 0.428576 0.176022 0.401554 0.506036 0.012785 0.192799 0.009796 0.607051 0.866970 0.448362 0.206223 0.485726 0.350016 0.751822 0.424784 0.136400 0.530875 0.980608 0.803159 0.491626 0.345262 0.456708 0.849038 0.386937 0.983218 0.818203 0.285865 0.140099 0.031097 0.121795 0.578043 0.926807 0.833291 0.904335 0.071467 0.604735 0.565137 0.784132 0.286838 0.484961 0.899259 0.304782 0.769361 0.050450 0.653514 0.074094 0.181957 0.666000 0.386351 0.121320 0.938299 0.546166 0.076896 0.472274 0.801747 0.632040 0.308400 0.133359 0.335882 0.382081 0.218652 0.549612 0.467773 0.147797 0.340578 0.265013 0.899305 0.146935 0.934812 0.628256 0.700113 0.752177 0.080956 0.393630 0.819703 0.157283 0.016607 0.921891 0.656490 0.714376 0.764266 0.315480 0.108908 0.177422 0.105456 0.601671 0.437089 0.594225 0.114896 0.395778 0.053674 0.279059 0.154631 0.348870 0.066666 0.664357 0.680916 0.827707 0.662216 0.812005 0.869373 0.125513 0.023379 0.476628 0.133960 0.324961 0.162850 0.302400 0.869071 0.484339 0.540658 0.497067 0.583616 0.166497 0.269491 0.845481 0.643167 0.817085 0.825211 0.969944 0.354128 0.620570 0.955046 0.965755 0.383467 0.074659 0.881938 0.604888 0.793314 0.641216 0.157804 0.922639 0.311463 0.383475 0.087235 0.768826 0.128712 0.229284 0.098007 0.602682 0.863902 0.27317102298410 0.72558664793123 0.60129646513886 0.08065075620188 0.58338861836683 0.06074965717798 0.15513102913894 0.64048078966323 0.79992648928916 0.72067078817554 0.93926165260614 0.20094239837379 0.74209313823605 0.11018857642846 0.55701095765544 0.95986252983318 0.27131784017567 0.68925978793567 0.81883947161535 0.86345474049827 0.93937518678452 0.95014163558368 0.73682150894823 0.29613538582785 0.96673880222685 0.79795699070037 0.66521577292453 0.26349461145245 0.16018121187961 0.66075073880821 0.86331792975706 0.51381401843926 0.12463123103283 0.80473413437126 0.43961455783915 0.24579409150244 0.49722838734525 0.55962362468499 0.65700178580975 0.86822098997985 0.42457047628970 0.88307505325149 0.96694369461309 0.98165143585061 0.09704643121898 0.53473755697856 0.43761567594384 0.26982107357454 0.28483534708209 0.29583478126231 0.81703293044304 0.29587728058781 0.78334465179263 0.33627935467734 0.77189976550041 0.22874037252867 0.71016804885287 0.04487569334020 0.64611799315960 0.83760080650360 0.66425183872496 0.41590136963902 0.82542084946122 0.96997548889355 0.58571997357783 0.93271906868244 0.67535354795737 0.51717618842295 0.55834766301398 0.66214085650897 0.71839559810532 0.27918921741599 0.68896290883976 0.51606648764358 0.22880596103434 0.78812318189401 0.67321309266530 0.82899856944231 0.12385453033195 0.30792807387206 0.13275613628357 0.29751064339843 0.29521539670095 0.26369327290946 0.21063487534261 0.46118109379888 0.32625563983687 0.60149954128607 0.43223588074313 0.97262364636138 0.34347354045632 0.13201557885003 0.80728710763711 0.29505548669748 0.60652657995083 0.42341045518008 0.09462719669212 0.12568051703375 0.58051018789434 0.34869067196772 0.70709814250220 0.06510239506263 0.88330149531547 0.28817159502017 0.33600731093415 0.67945872224123 0.55733806801693 0.56236263282570 0.75075920132283 0.16472227097001 0.55003237328651 0.28322828513921 0.41457709460854 0.68015162936350 0.84347877639082 0.91152763896255 0.95201916155873 0.09272226524625 0.03887343750107 0.93319725910536 0.29495920243766 0.79667858101065 0.17473143003486 0.70405254032576 0.27721677876006 0.50345447839951 0.47464559575525 0.94256790417296 0.39128568777510 0.05216184787450 0.36543826811523 0.06306479558539 0.97567302874103 0.37858212331745 0.29426835829534 0.16057388585162 0.23474245407743 0.29599591899407 0.31157298140923 0.12700348306792 0.96924482333323 0.11520133281402 0.38864459297183 0.59055297291519 0.86428312716344 0.70243000548246 0.40932454193933 0.17728384003353 0.42422050358960 0.32506393318502 0.44479651679934 0.86667797159387 0.64294038647865 0.06501382685220 0.64988939215455 0.05463557274075 0.71150018690952 0.13387236283876 0.58087367775102 0.70467089522560 0.10515683255142 0.44055064196522 0.91837270412470 0.13828330569201 0.06107723373269 0.20566671607941 0.53179938770388 0.76013220637013 0.58367634486885 0.14464107908882 0.99681618402364 0.99937552904325 0.88395776758844 0.86442774321636 0.59459098993479 0.53998993649402 0.73108235602164 0.28249982430139 0.62080549477521 0.01791989302620 0.50227409986366 0.43044780995838 0.62026374049308 0.73258581068792 0.36376558358279 0.18179189555253 0.98660686572985 0.06189916028294 0.44639566832559 0.79934362725983 0.63017754739632 0.53087023169450 0.25632559178119 0.26160108158814 0.77921154953738 0.52368048073577 0.29074273578056 0.35381401009629 0.65036737871986 0.13871300537018 0.60440520237544 0.19704518314255 0.58239259827003 0.38027907900611 0.55476282950187 0.36469227272584 0.58931866711983 0.41299301212738 0.02428761991681 0.76262914577616 0.74535171092699 0.19910347321988 0.42866569599016 0.18301955832541 0.13531363605901 0.50805648223186 0.13218548827218 0.29580026207336 0.79801695045903 0.47910663727196 0.63570575002681 0.28699392163885 0.56466001688992 0.07057792403657 0.76788774931071 0.60908320534402 0.41299680937518 0.68248938409697 0.67759987638680 0.97948067006356 0.52246356517782 0.24712798323000 0.42631814096090 0.51124328419935 0.05006550888894 0.67500575813452 0.85877666017627 0.46865596084447 0.38875369369370 0.79031180902164 0.51515779204728 0.44166730147550 0.71059840004315 0.79322009278814 0.81685868295062 0.08270920277150 0.55047460551330 0.55404480746730 0.58012236952670 0.58815416000171 0.38891097440774 0.19677981723587 0.02171030928895 0.72618473696994 0.68091768291418 0.18795285154654 0.46445196958750 0.44007750549464 0.41651380439960 0.66044504340177 0.50603913291062 0.80622576917487 0.08949571339646 0.28729106017023 0.54921668063157 0.98139992129427 0.52667047241936 0.32930476306372 0.51755974027733 0.14084278460711 0.59753430360264 0.32906604112749 0.33588338900610 0.99433900261497 0.25375382631079 0.26950565675376 0.75408044031365 0.40679304005338 0.16951725063857 0.65634463944760 0.34027177378522 0.95959699622679 0.70452235086474 0.86677184090987 0.12373279981896 0.54817664467004 0.28943720945791 0.17503839307615 0.40190447792825 0.18426925519365 0.23530451501494 0.38286693656610 0.59617026863235 0.17364041143691 0.30423985937133 0.87767795918621 0.37390571738913 0.67239386124693 0.97461210649797 0.95323455891695 0.26651776058104 0.32146187130043 0.00155586966032 0.61250053969802 0.68851800209200 0.61202463610799 0.32411403574425 0.76391973727165 0.73396360263641 0.57083680951661 0.78214777466315 0.83068819623571 0.31617279005548 0.09018792970362 0.33922678676485 0.65131946580658 0.30923077229695 0.10200607579674 0.52863359641164 0.68555447661065 0.49009801945333 0.49097815215078 0.56390744544316 0.44415483824883 0.14929954836022 0.39787312031684 0.19031217008914 0.09017257411024 0.85697818909952 0.57017465688392 0.71990351410848 0.04209913117893 0.94254244305420 0.10064085665641 0.79833119800494 0.37254601594719 0.17258492587545 0.42502005788528 0.71757917444448 0.95328385575839 0.93084846053484 0.37149516219801 0.27952875802967 0.58729308253893 0.05012545413651 0.35291530646126 0.01760707998184 0.34174614243465 0.25152445106375 0.18730581439295 0.17080811000152 0.56119223577538 0.61338980406099 0.15113405629357 0.05879698141637 0.72550667421340 0.88854599763898 0.90004082993089 0.41891287524431 0.07509260001911 0.92566049500963 0.14324420400302 0.31973838776494 0.25801612425823 0.70950295543298 0.07019515544850 0.54683704116835 0.72255854364687 0.19011408431915 0.37953744512666 0.70917055064499 0.38019874927546 0.79613387405478 0.73422898577886 0.61879288947156 0.89141665763472 0.63130802428205 0.42797605789261 0.27638747365619 0.88118652440115 0.39680430781264 0.58771354704255 0.99964722759921 0.20964729593823 0.20888776870931 0.53521841841453 0.81305348602004 0.97553074460423 0.58838456943935 0.71062333379075 0.12102116775945 0.99969619618738 0.72495999801104 0.72334853981681 0.17080073364384 0.64939702965870 0.93334779314506 0.34319060851917 0.54723109866630 0.99863894693428 0.28709431164033 0.89922599900911 0.10784113900898 0.80243035204521 0.47618689715900 0.12915342822023 0.44543238399365 0.09436719565681 0.42721896833041 0.77150401047055 0.87109813618572 0.76457051919331 0.61052175750686 0.21049154863914 0.58261469691610 0.15552771865240 0.21302725422349 0.57192189570596 0.33132616769165 0.47986920852239 0.29332917974240 0.79654892387653 0.14710233034404 0.07162961741994 0.10011318309292 0.76681852374507 0.95862226324132 0.19456036418199 0.67475488741889 0.13702386370547 0.72527863831315 0.23100631225585 0.81999525827556 0.53684217708428 0.43272367153386 0.84403251215144 0.06385208259181 0.58178484390887 0.46819229204634 0.54712296398780 0.73196356504527 0.13987752311428 0.69521667836382 0.53344543872510 0.84496343169197 0.78413807614584 0.87295358938402 0.06555891223635 0.06720950824858 0.97777560236604 0.34528838271072 0.83106638435149 0.42383354011967 0.57716377617295 0.87643589167481 0.11499235101814 0.59596497684148 0.14554268478526 0.90199039190191 0.90870243638686 0.83278916089014 0.58407509048039 0.11647290383703 0.70258191094522 0.38069260262574 0.35922653858571 0.77057532365239 0.20207889673117 0.08822282776808 0.64019083701570 0.40661911764037 0.14855007480500 0.66835952591469 0.24488940283634 0.03227247248010 0.31104661964506 0.48517254225549 0.99626521801453 0.04193524195826 0.11011822978945 0.44673383095037 0.51249903675823 0.07132373546889 0.57115626694323 0.67592505967913 0.95163855405298 0.77438734524691 0.36020773811947 0.68932110580271 0.89262808878402 0.65969901390808 0.79086673670325 0.69810147985579 0.02750507481073 0.29431340583717 0.60325173243381 0.24584008201255 0.25199440476582 0.63622234534418 0.53808735476153 190110384 1678862029 1736517969 1918608134 1125559225 1632740624 1597816955 1059635668 945339961 1520124163 1186199443 534637109 1055870353 632991014 697100502 31152944 754270994 1831698854 1761978616 304264878 549161660 1495012659 944191381 1078566196 2067646816 204897486 758763536 1469608325 2079390525 1798948762 1162410917 638812170 777715511 604953539 734797044 885447014 933545291 1140251623 27351439 850326124 84592004 380500294 968906321 1759287123 1524701266 2142164776 2017151432 1786971382 1569130781 1851433264 1651515194 571172520 1198346707 1660248226 1658407615 1387991105 389502914 620678577 601935787 1441060514 22526965 1577404805 326738087 638792767 851098166 184599718 245568258 419105514 1559137640 521919279 53535660 112089696 1997467775 1312078806 430011042 2142789165 1841902343 850089162 1030482206 882859755 235535511 985499354 1298679197 629265995 871745186 153947194 496916583 1353203858 517264437 1665505249 476664311 609520859 1507011941 535683668 1391103581 1715593067 1994322808 1488818386 960190141 1448489698 795516046 354672977 2099445064 374747702 1445292661 150580813 1377000176 1915884849 1374704577 808988016 319282823 1306666433 559280022 1380002720 95955756 593180551 1887448489 1412489239 1547178868 2048789881 1399236858 1854895879 966239250 5274397 49697852 80400569 677859649 559842764 198567847 2090645201 456257075 867732760 1662240176 1121279511 1995210794 2100028078 318780858 145394375 1711951511 367775221 2065949537 1197413030 2133928054 2082508936 608188204 2081763112 1435486546 144252520 598473187 1524114749 1082915148 1199233690 1820589 1785469446 1634340924 480238811 1196502070 1382254662 196410471 1026618316 1720651202 1408251811 1441289847 1389668416 449443163 1504881093 1494675635 486370894 1385888008 1593217175 124661380 1526201895 848924191 2004280383 1058558138 417420662 250669417 677053801 1969423926 10648102 2094647591 526910115 1201654150 922289955 1079716037 178362827 115267902 1657564313 271409790 1402783932 1108329258 2091298422 1896209337 1133093496 608107545 593856362 629579113 1526251347 1111155562 841703376 1082915148 1199233690 1820589 1785469446 1634340924 480238811 1196502070 1382254662 196410471 1026618316 1720651202 1408251811 1441289847 1389668416 449443163 1504881093 1494675635 486370894 1385888008 1593217175 124661380 1526201895 848924191 2004280383 1058558138 417420662 250669417 677053801 1969423926 10648102 2094647591 526910115 1201654150 922289955 1079716037 178362827 115267902 1657564313 271409790 1402783932 1108329258 2091298422 1896209337 1133093496 608107545 593856362 629579113 1526251347 1111155562 841703376 948063366 932099905 1819450438 118594625 788923440 1108295434 1917323050 453850477 1347479445 1361235421 53128094 399102816 2134938035 2031197797 533054116 819039194 21643733 341207232 1058733869 218966777 879535862 2085684616 1066927759 1233486295 292875570 638915742 2020069718 2117755499 1119125662 2123062017 1443032916 35406574 1510032980 2140970133 510825209 1993448585 891323244 918334639 464626764 351726950 1794729821 1685965492 1592280729 1934854227 1690236051 1582614458 1754937553 1907499841 245653183 283521007 SHAR_EOF fi # end of overwriting check cd .. if test -f 'make.CONVEX' then echo shar: will not over-write existing file "'make.CONVEX'" else cat << "SHAR_EOF" > 'make.CONVEX' AR = ar ARFLAGS = cr #If your system does not have ranlib, then replace next statement with #RANLIB = echo RANLIB = ranlib CC = c89 CLD = $(CC) F77 = fort77 F77LD = $(F77) FFXN = -DNoChange FSUFFIX = F MPIF77 = $(F77) MPICC = $(CC) # To use MPI, set the MPIDIR to location of mpi library, and MPILIB # to name of mpi library. Remove # signs from beginning of next 3 lines. # Also, if the previous compilation was without MPI, type: make realclean # before compiling for mpi. # MPIDEF = -DSPRNG_MPI -I/opt/mpi/include #Only if you plan to use MPI MPIDIR = -L/opt/mpi/lib/pa1.1 MPILIB = -lpmpi -lmpi /usr/lib/libail.sl -lcnx_syscall CFLAGS = +O4 +U77 +Odataprefetch +Olibcalls $(MPIDEF) +e -D$(PLAT) -D_LONG_LONG CLDFLAGS = +O4 +U77 +Odataprefetch +Olibcalls +e FFLAGS = +O4 +U77 +Odataprefetch +Olibcalls $(MPIDEF) F77LDFLAGS = +O4 +U77 +Odataprefetch +Olibcalls CPP =fort77 -F #The following sets inlining options. This can be deleted to get slightly # more inefficient FORTRAN and simple interface codes. INLINEOPT = +Oinline=get_rn_int,get_rn_dbl,get_rn_flt,get_rn_int_simple,get_rn_flt_simple,get_rn_dbl_simple SHAR_EOF fi # end of overwriting check if test -f 'make.DEC' then echo shar: will not over-write existing file "'make.DEC'" else cat << "SHAR_EOF" > 'make.DEC' AR = ar ARFLAGS = cr #If your system has ranlib, then replace next statement with the one after it. RANLIB = echo #RANLIB = ranlib CC = cc CLD = $(CC) F77 = f77 F77LD = $(F77) FFXN = -DAdd_ FSUFFIX = F MPIF77 = $(F77) MPICC = $(CC) # To use MPI, set the MPIDIR to location of mpi library, and MPILIB # to name of mpi library. Remove # signs from beginning of next 3 lines. # Also, if the previous compilation was without MPI, type: make realclean # before compiling for mpi. # #MPIDEF = -DSPRNG_MPI #Only if you plan to use MPI MPIDIR = MPILIB = CFLAGS = -D$(PLAT) $(MPIDEF) -O3 -std1 -assume noaligned_objects -DLittleEndian CLDFLAGS = -O3 -std1 -assume noaligned_objects FFLAGS = $(MPIDEF) -O3 -D$(PLAT) -DPOINTER_SIZE=8 F77LDFLAGS = -O3 CPP = f77 -F SHAR_EOF fi # end of overwriting check if test -f 'make.GENERIC' then echo shar: will not over-write existing file "'make.GENERIC'" else cat << "SHAR_EOF" > 'make.GENERIC' AR = ar ARFLAGS = cr #If your system has ranlib, then replace next statement with the one after it. RANLIB = echo #RANLIB = ranlib CC = gcc CLD = $(CC) F77 = f77 F77LD = $(F77) FFXN = -DAdd_ FSUFFIX = F MPIF77 = $(F77) MPICC = $(CC) # To use MPI, set the MPIDIR to location of mpi library, and MPILIB # to name of mpi library. Remove # signs from beginning of next 3 lines. # Also, if the previous compilation was without MPI, type: make realclean # before compiling for mpi. # #MPIDEF = -DSPRNG_MPI #Only if you plan to use MPI MPIDIR = MPILIB = # If _LONG_LONG type is available, then you can use the addition flag # -D_LONG_LONG. Set F77 to echo to compile the C version alone. # Try adding: -DGENERIC to CFLAGS. This can improve speed, but may give # incorrect values. Check with 'checksprng' to see if it works. CFLAGS = -O $(MPIDEF) CLDFLAGS = -O FFLAGS = -O $(MPIDEF) F77LDFLAGS = -O CPP = f77 -F SHAR_EOF fi # end of overwriting check if test -f 'make.HP' then echo shar: will not over-write existing file "'make.HP'" else cat << "SHAR_EOF" > 'make.HP' AR = ar ARFLAGS = cr #If your system does not have ranlib, then replace next statement with #RANLIB = echo RANLIB = echo CC = /afs/ncsa/packages/GNU/gcc-2.8.1/HPUX_10.20/bin/gcc #CC = c89 CLD = $(CC) F77 = fort77 F77LD = $(F77) FFXN = -DNoChange FSUFFIX = F MPIF77 = $(F77) MPICC = $(CC) # To use MPI, set the MPIDIR to location of mpi library, and MPILIB # to name of mpi library. Remove # signs from beginning of next 3 lines. # Also, if the previous compilation was without MPI, type: make realclean # before compiling for mpi. # #MPIDEF = -DSPRNG_MPI #Only if you plan to use MPI # #MPIDIR = #MPILIB = # Libraries for calls to handle command line arguments in FORTRAN CMDDIR = -L/usr/lib CMDLIB = -lU77 # If only the C call is required, then you can use the addition flag # -D_LONG_LONG. Fortran programs will not link then. Set F77 to 'echo' # to build only the C version. Use of the flag mentioned above yields an # LCG that is about three times faster. CFLAGS = -ansi -O2 -D$(PLAT) $(MPIDEF) CLDFLAGS = -O2 FFLAGS = -O2 $(MPIDEF) -D$(PLAT) F77LDFLAGS = -O2 CPP = fort77 -F SHAR_EOF fi # end of overwriting check if test -f 'make.LINUX' then echo shar: will not over-write existing file "'make.LINUX'" else cat << "SHAR_EOF" > 'make.LINUX' AR = ar ARFLAGS = cr #If your system does not have ranlib, then replace next statement with #RANLIB = echo RANLIB = ranlib CC = gcc CLD = $(CC) # Set f77 to echo if you do not have a FORTRAN compiler F77 = g77 #F77 = echo F77LD = $(F77) FFXN = -DAdd__ FSUFFIX = F MPIF77 = $(F77) MPICC = $(CC) # To use MPI, set the MPIDIR to location of mpi library, and MPILIB # to name of mpi library. Remove # signs from beginning of next 3 lines. # Also, if the previous compilation was without MPI, type: make realclean # before compiling for mpi. # #MPIDEF = -DSPRNG_MPI #Only if you plan to use MPI #MPIDIR = -L/usr/local/mpi/lib/LINUX/ch_p4 #MPILIB = -lmpi # Please include mpi header file path, if needed CFLAGS = -O3 -DLittleEndian $(MPIDEF) -D$(PLAT) # -I/usr/local/mpi/include CLDFLAGS = -O3 FFLAGS = -O3 $(MPIDEF) -D$(PLAT) # -I/usr/local/mpi/include F77LDFLAGS = -O3 CPP = cpp -P SHAR_EOF fi # end of overwriting check if test -f 'make.O2K' then echo shar: will not over-write existing file "'make.O2K'" else cat << "SHAR_EOF" > 'make.O2K' # 32 or 64 bit versions of the library can be compiled. # In order to get the 64 bit version, please remove the # signs (if there are # any) before the lines under the statement '# 64 bit compilation' and append # a # sign (if there isn't one) at the beginning of the lines immediately # following the statement '# 32 bit compilation'. # The reverse of this procedure is followed for 32 bit compilation. AR = ar ARFLAGS = cr #If your system does not have ranlib, then replace next statement with RANLIB = echo CC = cc CLD = $(CC) F77 = f77 F77LD = $(F77) FFXN = -DAdd_ FSUFFIX = F MPIF77 = $(F77) MPICC = $(CC) # # To use MPI, set the MPIDIR to location of mpi library, and MPILIB # to name of mpi library. Remove # signs from beginning of next 3 lines. # Also, if the previous compilation was without MPI, type: make realclean # before compiling for mpi. # #MPIDEF = -DSPRNG_MPI #Only if you plan to use MPI #MPIDIR = #MPILIB = -lmpi # 32 bit compilation #CFLAGS = -O3 -D$(PLAT) $(MPIDEF) -mips4 -D_LONG_LONG -n32 # 32 bit compilation #CLDFLAGS = -O3 -n32 # 32 bit compilation #FFLAGS = -O3 -n32 #32 bit compilation #F77LDFLAGS = -O3 -n32 $(MPIDEF) -mips4 # 32 bit compilation #CPP = cc -E -P $(MPIDEF) -D_LONG_LONG # 32 bit compilation # 64 bit compilation # CFLAGS = -O3 -D$(PLAT) $(MPIDEF) -D_LONG_LONG -align64 -64 CLDFLAGS = -O3 -align64 -64 # 64 bit compilation FFLAGS = -O3 -align64 $(MPIDEF) -DPOINTER_SIZE=8 -D_LONG_LONG -64 #64 bit compilation F77LDFLAGS = -O3 -align64 -64 # 64 bit compilation CPP = cc -E -P $(MPIDEF) -DPOINTER_SIZE=8 -D_LONG_LONG # 64 bit compilation #The following sets inlining options. This can be deleted to get slightly # more inefficient FORTRAN and simple interface codes. INLINEOPT = -INLINE:must=get_rn_int,get_rn_dbl,get_rn_flt,get_rn_int_simple,get_rn_flt_simple,get_rn_dbl_simple SHAR_EOF fi # end of overwriting check if test -f 'make.SGI' then echo shar: will not over-write existing file "'make.SGI'" else cat << "SHAR_EOF" > 'make.SGI' # 32 or 64 bit versions of the library can be compiled. # In order to get the 64 bit version, please remove the # signs (if there are # any) before the lines under the statement '# 64 bit compilation' and append # a # sign (if there isn't one) at the beginning of the lines immediately # following the statement '# 32 bit compilation'. # The reverse of this procedure is followed for 32 bit compilation. AR = ar ARFLAGS = cr #If your system does not have ranlib, then replace next statement with RANLIB = echo #RANLIB = ranlib CC = cc CLD = $(CC) F77 = f77 F77LD = $(F77) FFXN = -DAdd_ FSUFFIX = F MPIF77 = $(F77) MPICC = $(CC) # # To use MPI, set the MPIDIR to location of mpi library, and MPILIB # to name of mpi library. Remove # signs from beginning of next 3 lines. # Also, if the previous compilation was without MPI, type: make realclean # before compiling for mpi. # #MPIDEF = -DSPRNG_MPI #Only if you plan to use MPI #MPIDIR = #MPILIB = -lmpi # 32 bit compilation CFLAGS = -O3 -D$(PLAT) $(MPIDEF) -D_LONG_LONG -n32 -mips4 # 32 bit compilation CLDFLAGS = -O3 -n32 -mips4 # 32 bit compilation FFLAGS = -O3 -n32 -mips4 -D$(PLAT) $(MPIDEF) -D_LONG_LONG #32 bit compilation F77LDFLAGS = -O3 -n32 -mips4 # 32 bit compilation CPP = cc -E -P -D_LONG_LONG # 32 bit compilation # 64 bit compilation #CFLAGS = -O3 -D$(PLAT) $(MPIDEF) -D_LONG_LONG -align64 -64 #CLDFLAGS = -O3 -align64 -64 # 64 bit compilation #FFLAGS = -O3 -align64 $(MPIDEF) -DPOINTER_SIZE=8 -D_LONG_LONG -64 #64 bit compilation #F77LDFLAGS = -O3 -align64 -64 # 64 bit compilation #CPP = cc -E -P $(MPIDEF) -DPOINTER_SIZE=8 -D_LONG_LONG # 64 bit compilation #The following sets inlining options. This can be deleted to get slightly # more inefficient FORTRAN and simple interface codes. INLINEOPT = -INLINE:must=get_rn_int,get_rn_dbl,get_rn_flt,get_rn_int_simple,get_rn_flt_simple,get_rn_dbl_simple SHAR_EOF fi # end of overwriting check if test -f 'make.SOLARIS' then echo shar: will not over-write existing file "'make.SOLARIS'" else cat << "SHAR_EOF" > 'make.SOLARIS' AR = ar ARFLAGS = cr #If your system does not have ranlib, then replace next statement with #RANLIB = echo RANLIB = ranlib CC = cc CLD = $(CC) F77 = f77 F77LD = $(F77) FFXN = -DAdd_ FSUFFIX = F MPIF77 = $(F77) MPICC = $(CC) # To use MPI, set the MPIDIR to location of mpi library, and MPILIB # to name of mpi library. Remove # signs from beginning of next 3 lines. # Also, if the previous compilation was without MPI, type: make realclean # before compiling for mpi. # #MPIDEF = -DSPRNG_MPI #Only if you plan to use MPI MPIDIR = MPILIB = # If only the C call is required, then you can use the addition flag # -D_LONG_LONG. Fortran programs will not link then. Set F77 to echo to # compile the C version alone. This may run three times faster. CFLAGS = -O $(MPIDEF) -D$(PLAT) CLDFLAGS = -O FFLAGS = -fast -O3 $(MPIDEF) -D$(PLAT) F77LDFLAGS = -fast -O3 CPP = f77 -F SHAR_EOF fi # end of overwriting check if test -f 'make.SP2' then echo shar: will not over-write existing file "'make.SP2'" else cat << "SHAR_EOF" > 'make.SP2' AR = ar ARFLAGS = cr #If your system does not have ranlib, then replace next statement with #RANLIB = echo RANLIB = ranlib FFXN = -DNoChange FSUFFIX = F CC = xlc F77 = xlf # comment the next five lines to use MPI and then uncomment the following # lines, as explained below. MPICC = $(CC) MPIF77 = $(F77) CFLAGS = -O3 -qstrict -qarch=pwr2 -qlanglvl=ansi -D$(PLAT) -qtune=pwr2 -D_LONG_LONG $(MPIDEF) FFLAGS = -O3 -qstrict -qarch=pwr2 -qtune=pwr2 -WF,-I../SRC $(FMPIDEF) CPP = xlf -c -d -qnoobj -WF,-P # To use MPI, set the MPIDIR to location of mpi library, and MPILIB # to name of mpi library. Remove # signs from beginning of next 3 lines. # Also, if the previous compilation was without MPI, type: make realclean # before compiling for mpi. # #MPIDEF = -DSPRNG_MPI #Only if you plan to use MPI #FMPIDEF = -WF,-DSPRNG_MPI #Only if you plan to use MPI #MPIDIR = #MPILIB = #MPICC = mpcc #CFLAGS = -O3 -qstrict -qarch=pwr2 -qlanglvl=ansi -D$(PLAT) -qtune=pwr2 -I/usr/lpp/ppe.poe/include -D_LONG_LONG $(MPIDEF) #MPIF77 = mpxlf #FFLAGS = -O3 -qstrict -qarch=pwr2 -qtune=pwr2 -WF,-I../SRC -WF,-I/usr/lpp/ppe.poe/include $(FMPIDEF) #CPP = xlf -c -d -qnoobj -WF,-P -WF,-I/usr/lpp/ppe.poe/include $(FMPIDEF) CLD = $(CC) CLDFLAGS = -O3 -qstrict -qarch=pwr2 -qlanglvl=ansi -qtune=pwr2 F77LD = $(F77) F77LDFLAGS = -O3 -qstrict -qarch=pwr2 -qtune=pwr2 #The following sets inlining options. This can be deleted to get slightly # more inefficient FORTRAN and simple interface codes. INLINEOPT = -Q+get_rn_int -Q+get_rn_dbl -Q+get_rn_flt -Q+get_rn_int_simple -Q+get_rn_flt_simple -Q+get_rn_dbl_simple SHAR_EOF fi # end of overwriting check if test -f 'make.SUN' then echo shar: will not over-write existing file "'make.SUN'" else cat << "SHAR_EOF" > 'make.SUN' AR = ar ARFLAGS = cr #If your system does not have ranlib, then replace next statement with #RANLIB = echo RANLIB = ranlib CC = gcc CLD = $(CC) F77 = f77 F77LD = $(F77) FFXN = -DAdd_ FSUFFIX = F MPIF77 = $(F77) MPICC = $(CC) # To use MPI, set the MPIDIR to location of mpi library, and MPILIB # to name of mpi library. Remove # signs from beginning of next 3 lines. # Also, if the previous compilation was without MPI, type: make realclean # before compiling for mpi. # #MPIDEF = -DSPRNG_MPI #Only if you plan to use MPI MPIDIR = MPILIB = # If only the C call is required, then you can use the addition flag # -D_LONG_LONG. Fortran programs will not link then. Set F77 to echo to # compile the C version alone. This may run three times faster. CFLAGS = -O $(MPIDEF) -D$(PLAT) CLDFLAGS = -O FFLAGS = -fast -O3 $(MPIDEF) -D$(PLAT) F77LDFLAGS = -fast -O3 CPP = f77 -F SHAR_EOF fi # end of overwriting check if test -f 'make.T3D' then echo shar: will not over-write existing file "'make.T3D'" else cat << "SHAR_EOF" > 'make.T3D' # We no longer know if this workson the T3D. # Archive and table of contents for archive AR = ar ARFLAGS = cr #If your system does not have ranlib, then replace next statement with #RANLIB = echo RANLIB = echo FSUFFIX = f # To use MPI, set the MPIDIR to location of mpi library, and MPILIB # to name of mpi library. Remove # signs from beginning of next 3 lines. # Also, if the previous compilation was without MPI, type: make realclean # before compiling for mpi. # MPIDEF = -DSPRNG_MPI #Only if you plan to use MPI MPIDIR = -L/usr/local/mpp/lib MPILIB = -lmpi # # C compiler and loader CC = env TARGET=cray-t3d cc CFLAGS = -DT3D -O 3 $(MPIDEF) -I/usr/local/mpp/include CLD = $(CC) CLDFLAGS = -O 3 FFXN = -DUpCase # FORTRAN Compiler and loader. F77 = cf77 -C cray-t3d FFLAGS = -O scalar3 F77LD = cf77 F77LDFLAGS = -O scalar3 CPP = f90 -e P -F MPIF77 = $(F77) MPICC = $(CC) SHAR_EOF fi # end of overwriting check if test -f 'make.T3E' then echo shar: will not over-write existing file "'make.T3E'" else cat << "SHAR_EOF" > 'make.T3E' AR = ar ARFLAGS = cr #If your system does not have ranlib, then replace next statement with #RANLIB = echo RANLIB = echo CC = c89 CLD = $(CC) #Set F77 to "echo" if no FORTRAN 77 compiler is available F77 = f90 F77LD = $(F77) FFXN = -DUpCase FSUFFIX = F MPIF77 = $(F77) MPICC = $(CC) # To use MPI, set the MPIDIR to location of mpi library, and MPILIB # to name of mpi library. Remove # signs from beginning of next 3 lines. # Also, if the previous compilation was without MPI, type: make realclean # before compiling for mpi. # #MPIDEF = -DSPRNG_MPI #Only if you plan to use MPI # The mpt module automatically links MPI library MPIDIR = MPILIB = CFLAGS = -O3 -D$(PLAT) $(MPIDEF) CLDFLAGS = -O3 FFLAGS = -F -O3 $(MPIDEF) -D$(PLAT) -DPOINTER_SIZE=8 F77LDFLAGS = -O3 CPP = f90 -e P -F SHAR_EOF fi # end of overwriting check if test -f 'makeseed.c' then echo shar: will not over-write existing file "'makeseed.c'" else cat << "SHAR_EOF" > 'makeseed.c' #include #ifdef __STDC__ int make_new_seed() #else int make_new_seed() #endif { time_t tp; struct tm *temp; unsigned int temp2, temp3; static unsigned int temp4 = 0xe0e1; time(&tp); temp = localtime(&tp); temp2 = (temp->tm_sec<<26)+(temp->tm_min<<20)+(temp->tm_hour<<15)+ (temp->tm_mday<<10)+(temp->tm_mon<<6); temp3 = (temp->tm_year<<13)+(temp->tm_wday<<10)+(temp->tm_yday<<1)+ temp->tm_isdst; temp2 ^= clock()^temp3; temp4 = (temp4*0xeeee)%0xffff; temp2 ^= temp4<<16; temp4 = (temp4*0xaeee)%0xffff; temp2 ^= temp4; temp2 &= 0x7fffffff; return temp2; } #if 0 main() { printf("%u\n", make_new_seed()); } #endif SHAR_EOF fi # end of overwriting check if test -f 'memory.c' then echo shar: will not over-write existing file "'memory.c'" else cat << "SHAR_EOF" > 'memory.c' #include #include #ifdef __STDC__ void *_mymalloc(long size, int line, char *message) #else void *_mymalloc(size, line, message) long size; int line; char *message; #endif { char *temp; if(size == 0) return NULL; temp = (char *) malloc(size); if(temp == NULL) { fprintf(stderr,"\nmemory allocation failure in file: %s at line number: %d\n", message, line); return NULL; } return (void *) temp; } SHAR_EOF fi # end of overwriting check if test -f 'memory.h' then echo shar: will not over-write existing file "'memory.h'" else cat << "SHAR_EOF" > 'memory.h' #define mymalloc(a) (_mymalloc((a), __LINE__, __FILE__)) #ifndef ANSI_ARGS #ifdef __STDC__ #define ANSI_ARGS(args) args #else #define ANSI_ARGS(args) () #endif #endif void *_mymalloc ANSI_ARGS((long size, int line, char *message)); SHAR_EOF fi # end of overwriting check if test ! -d 'mlfg' then mkdir 'mlfg' fi cd 'mlfg' if test -f 'Makefile' then echo shar: will not over-write existing file "'Makefile'" else cat << "SHAR_EOF" > 'Makefile' ############################################################################ # # Typing the command below => results in the following being created # make => Fortran and C libraries for the generator, # Timing executibles. # make mlfg => Library for the Multiplicative LFG # # Object files created during the compilation process can be deleted finally # by typing # make clean ############################################################################ SHELL = /bin/sh include ../../make.CHOICES LIBDIR = ../../$(LIB_REL_DIR) SRCDIR = .. CHKDIR = ../.. include $(SRCDIR)/make.$(PLAT) all : mlfg timesprng checksprng #--------------------------------------------------------------------------- # Construct Library #--------------------------------------------------------------------------- SPRNG_COMMON_DEPEND = $(SRCDIR)/fwrap_mpi.o $(SRCDIR)/cputime.o \ $(SRCDIR)/makeseed.o $(SRCDIR)/simple_mpi.o \ $(SRCDIR)/memory.o $(SRCDIR)/communicate.o $(SRCDIR)/checkid.o $(SRCDIR)/store.o mlfg : (cd ..; $(MAKE) sprng_common) $(MAKE) $(LIBDIR)/libmlfg.a $(LIBDIR)/libmlfg.a: mlfg.o $(SPRNG_COMMON_DEPEND) $(AR) $(ARFLAGS) $(LIBDIR)/libmlfg.a mlfg.o $(SPRNG_COMMON_DEPEND) $(RANLIB) $(LIBDIR)/libmlfg.a mlfg.o : $(SRCDIR)/interface.h mlfg.c int64.h $(SRCDIR)/memory.h $(SRCDIR)/store.h $(SRCDIR)/fwrap_.h $(CC) -c $(CFLAGS) $(FFXN) $(INLINEOPT) mlfg.c -I$(SRCDIR) #--------------------------------------------------------------------------- # Time the generator #--------------------------------------------------------------------------- timesprng : (cd ..; $(MAKE) timesprng_exec TIMESPRNG_LIB=mlfg) #--------------------------------------------------------------------------- # Check portability of generator #--------------------------------------------------------------------------- checksprng : (cd ..; $(MAKE) checksprng_exec CHECKSPRNG_LIB=mlfg) cp mlfg.data $(CHKDIR)/. #--------------------------------------------------------------------------- .F.f : @if [ -f $*.i ] ; then \ rm $*.i ;\ fi $(CPP) $*.F @if [ -f $*.i ] ; then \ mv $*.i $*.f ;\ fi #--------------------------------------------------------------------------- #--------------------------------------------------------------------------- clean : rm -f *.o *.i realclean : rm -f *.o *.f *~ *.i core a.out .SUFFIXES : .SUFFIXES : .f .F SHAR_EOF fi # end of overwriting check if test -f 'int64.h' then echo shar: will not over-write existing file "'int64.h'" else cat << "SHAR_EOF" > 'int64.h' #ifndef _INT64_H_ #define _INT64_H_ #include #include "store.h" #ifndef __STDC__ #define const /* old C does not have 'const' qualifier */ #endif #if LONG_MAX > 2147483647L #if LONG_MAX > 35184372088831L #if LONG_MAX >= 9223372036854775807L #define LONG_SPRNG #define LONG64 long /* 64 bit long */ #endif #endif #endif #if !defined(LONG_SPRNG) && defined(_LONG_LONG) #define LONG64 long long #endif #ifdef LONG64 typedef unsigned LONG64 uint64; #ifdef LONG_SPRNG #define MINUS1 0xffffffffffffffffUL /* -1 (mod 2^(BITS-2)) */ #define ONE 0x1UL #define MASK64 0xffffffffffffffffUL #else #define MINUS1 0xffffffffffffffffULL /* -1 (mod 2^(BITS-2)) */ #define ONE 0x1ULL #define MASK64 0xffffffffffffffffULL #endif #define multiply(a,b,c) {c = (a)*(b); c &= MASK64;} #define add(a,b,c) {c = (a)+(b); c &= MASK64;} #define decrement(a,c) {c = (a)-1; c &= MASK64;} #define and(a,b,c) {c = (a)&(b);} #define or(a,b,c) {c = (a)|(b);} #define xor(a,b,c) {c = (a)^(b);} #define notzero(a) (a==0?0:1) #define lshift(a,b,c) {c = (a)<<(b); c &= MASK64;} /* b is an int */ #define rshift(a,b,c) {c = (a)>>(b); c &= MASK64;} /* b is an int */ #define highword(a) ((unsigned int)((a)>>32)) #define lowword(a) ((unsigned int)((a)&0xffffffff)) #define set(a,b) {b = (a)&MASK64;} #define seti(a,b) {b = (a)&MASK64;} /* b is an int */ #define seti2(a,b,c) {c = (b); c <<= 32; c |= (a); c &= MASK64;}/*a,b=+int*/ #else /* Simulate 64 bit arithmetic on 32 bit integers */ typedef unsigned int uint64[2]; static const uint64 MASK64={0xffffffffU,0xffffffffU}; static const uint64 MINUS1={0xffffffffU,0xffffffffU}; /* -1 (mod 2^(BITS-2)) */ static uint64 ONE={0x1U,0x0U}; #define TWO_M32 2.3283064365386962e-10 /* 2^(-32) */ #define and(a,b,c) {c[0] = a[0]&b[0]; c[1] = a[1]&b[1];} #define or(a,b,c) {c[0] = a[0]|b[0]; c[1] = a[1]|b[1];} #define xor(a,b,c) {c[0] = a[0]^b[0]; c[1] = a[1]^b[1];} #define notzero(a) ((a[0]==0 && a[1]==0)?0:1) #define multiply(a,b,c) {c[1] = a[0]*b[1]+a[1]*b[0];\ c[1] += (unsigned int) (((double)a[0]*(double)b[0])\ *TWO_M32);\ c[0] = a[0]*b[0]; and(c,MASK64,c);} #define add(a,b,c) {unsigned int t = a[0]+b[0]; \ c[1] = a[1]+b[1]+(t>(32-b)); c[0] = a[0]<<(b);} else {c[1]=a[0]<<(b-32);c[0]=0;} and(c,MASK64,c); } static void rshift(uint64 a,int b,uint64 c) { if(b<32) {c[0] = (a[0]>>b)|(a[1]<<(32-b));c[1] = a[1]>>(b);} else {c[0]=a[1]>>(b-32);c[1]=0;} and(c,MASK64,c); } #define highword(a) ((a)[1]) #define lowword(a) ((a)[0]) #define set(a,b) {b[0] = a[0];b[1]=a[1];and(b,MASK64,b);} #define seti(a,b) {b[0] = a;b[1]=0;} /* b is an int */ #define seti2(a,b,c) {c[1] = b; c[0] = a; and(c,MASK64,c);}/*a,b = +ve int*/ #endif /* LONG64 or 32 bit */ static int store_uint64(uint64 l, unsigned char *c) { int i; unsigned int m[2]; m[0] = highword(l); m[1] = lowword(l); c += store_intarray(m,2,4,c); return 8; /* return number of chars filled */ } static int store_uint64array(uint64 *l, int n, unsigned char *c) { int i; for(i=0; i 'mlfg.c' /*************************************************************************/ /*************************************************************************/ /* Parallel Multiplicative Lagged Fibonacci Generator */ /* */ /* Author: Ashok Srinivasan, */ /* NCSA, University of Illinois, Urbana-Champaign */ /* E-Mail: ashoks@ncsa.uiuc.edu */ /* */ /* Disclaimer: NCSA expressly disclaims any and all warranties, expressed*/ /* or implied, concerning the enclosed software. The intent in sharing */ /* this software is to promote the productive interchange of ideas */ /* throughout the research community. All software is furnished on an */ /* "as is" basis. No further updates to this software should be */ /* expected. Although this may occur, no commitment exists. The authors */ /* certainly invite your comments as well as the reporting of any bugs. */ /* NCSA cannot commit that any or all bugs will be fixed. */ /*************************************************************************/ /*************************************************************************/ /* This is version 0.2, created 26 Dec 1997 */ #include #include #include #define NDEBUG #include #include "memory.h" #include "interface.h" #include "int64.h" #define VERSION "00" /*** Name for Generator ***/ #define GENTYPE VERSION "Multiplicative Lagged Fibonacci Generator" #define NPARAMS 11 /* number of valid parameters */ int MAX_STREAMS = 0x7fffffff; /* Maximum number streams to init_sprng */ struct rngen { char *gentype; int stream_number; int nstreams; int init_seed; int parameter; int narrays; int *array_sizes; int **arrays; uint64 *lags; uint64 *si; int hptr; /* integer pointer into fill */ int lval, kval, seed; }; struct vstruct { int L; int K; int LSBS; /* number of least significant bits that are 1 */ int first; /* the first seed whose LSB is 1 */ }; const struct vstruct valid[] = { {17,5,1,10}, {31,6,1,2}, {55,24,1,11}, {63,31,1,14}, {127,97,1,21}, {521,353,1,100}, {521,168,1,83}, {607,334,1,166}, {607,273,1,105}, {1279,418,1,208}, {1279,861,1,233} }; #define TWO_M52 2.2204460492503131e-16 /* 2^(-52) */ #define TWO_M64 5.4210108624275222e-20 /* 2^(-64) */ #define BITS 62 /* Initialization of ALFG part is m-2 bits */ #define MAX_BIT_INT (BITS-2) #define RUNUP (2*BITS) /* Do RUNUP iterations after initialization */ #define GS0 0x372f05ac #ifdef LONG64 #define INT_MOD_MASK (MASK64>>(64-BITS)) #define INT_MASK (MASK64>>(64-BITS+1)) #define INTX2_MASK ((((uint64)1)<=0;i--) { new_fill[0] = (new_fill[0]<<1) | (1&bitcnt(reg_fill[0]&temp)); new_fill[1] = (new_fill[1]<<1) | (1&bitcnt(reg_fill[1]&temp)); temp >>= 1; } for (i=28;i<32;i++) { temp = bitcnt(reg_fill[0]&(mask<>(32-i))); new_fill[0] |= (1&temp)<=0;i--) { and(b[i],mask1,temp1) if(notzero(temp1)) add(a[i+1],ONE,a[i+1]); and(b[i],INTX2_MASK,temp1); lshift(temp1,1,a[i]); } } static void pow3(uint64 n, uint64 *ui) /* return 3^n (mod 2^BITS) */ { uint64 p, value, temp, bit, temp2, temp3; int exponent; set(n,p); seti(3,temp); seti(1,temp3); and(n,temp3,temp2); if(notzero(temp2)) seti(3,value) else seti(1,value) seti(1,bit); for(exponent=2; exponent<64; exponent++) { multiply(temp,temp,temp); lshift(bit,1,bit); and(bit,n,temp2); if(notzero(temp2)) multiply(value,temp,value); } and(value,MASK64,value); set(value,(*ui)); } static void findseed(int sign, uint64 n, uint64 *ui) { uint64 temp; pow3(n,&temp); if(sign&1) multiply(temp,MINUS1,temp); set(temp,(*ui)); } #define advance_state(genptr) {int lval = genptr->lval, kval = genptr->kval;\ int lptr;\ genptr->hptr--;\ if(genptr->hptr < 0)\ genptr->hptr = lval-1;\ lptr = genptr->hptr + kval;\ if (lptr>=lval)\ lptr -= lval;\ multiply(genptr->lags[genptr->hptr],genptr->lags[lptr],genptr->lags[genptr->hptr]);} static struct rngen **initialize(int ngen, int param, unsigned int seed, uint64 *nstart, unsigned int initseed) { int i,j,k,l,m,*order, length; struct rngen **q; uint64 *nindex, temp1, mask; length = valid[param].L; order = (int *) mymalloc(ngen*sizeof(int)); q = (struct rngen **) mymalloc(ngen*sizeof(struct rngen *)); if (q == NULL || order == NULL) return NULL; for (i=0;ihptr = 0; /* This is reset to lval-1 before first iteration */ q[i]->si = (uint64 *) mymalloc((length-1)*sizeof(uint64)); q[i]->lags = (uint64 *) mymalloc(length*sizeof(uint64)); q[i]->lval = length; q[i]->kval = valid[param].K; q[i]->parameter = param; q[i]->seed = seed; q[i]->init_seed = initseed; q[i]->narrays=2; q[i]->gentype = GENTYPE; if (q[i]->lags == NULL || q[i]->si == NULL) return NULL; } /* specify register fills and node number arrays */ /* do fills in tree fashion so that all fills branch from index */ /* contained in nstart array */ q[0]->stream_number = lowword(nstart[0]); get_fill(nstart,q[0]->lags,param,seed); si_double(q[0]->si,nstart,length); set(ONE,mask); for(m=0; mlags[m], &q[0]->lags[m]); else findseed(0,q[0]->lags[m], &q[0]->lags[m]); lshift(mask,1,mask); } add(q[0]->si[0],ONE,q[0]->si[0]); i = 1; order[0] = 0; if (ngen>1) while (1) { l = i; for (k=0;ksi; q[i]->stream_number = lowword(nindex[0]); get_fill(nindex,q[i]->lags,param,seed); si_double(nindex,nindex, length); for (j=0;jsi[j]); set(ONE,mask); for(m=0; mlags[m], &q[i]->lags[m]); else findseed(0,q[i]->lags[m], &q[i]->lags[m]); lshift(mask,1,mask); } add(q[i]->si[0],ONE,q[i]->si[0]); if (ngen == ++i) break; } if (ngen == i) break; for (k=l-1;k>0;k--) { order[2*k+1] = l+k; order[2*k] = order[k]; } order[1] = l; } free(order); for (i=ngen-1;i>=0;i--) { k = 0; for (j=1;jsi[j])) k = 1; if (!k) break; for (j=0;j=0) { for (j=0;j<4*length;j++) advance_state(q[i]); i--; } return q; } /* Initialize random number stream */ #ifdef __STDC__ int *init_rng( int gennum, int total_gen, int seed, int param) #else int *init_rng(gennum,total_gen,seed,param) int gennum,param,seed,total_gen; #endif { /* gives back one stream (node gennum) with updated spawning */ /* info; should be called total_gen times, with different value */ /* of gennum in [0,total_gen) each call */ struct rngen **p=NULL, *genptr; uint64 *nstart=NULL,*si; int i, length, k; if (total_gen <= 0) /* Is total_gen valid ? */ { total_gen = 1; fprintf(stderr,"WARNING - init_rng: Total_gen <= 0. Default value of 1 used for total_gen\n"); } if (gennum >= MAX_STREAMS) /* check if gen_num is valid */ fprintf(stderr,"WARNING - init_rng: gennum: %d > maximum number of independent streams: %d\n\tIndependence of streams cannot be guranteed.\n", gennum, MAX_STREAMS); if (gennum < 0 || gennum >= total_gen) /* check if gen_num is valid */ { fprintf(stderr,"ERROR - init_rng: gennum %d out of range [%d,%d).\n", gennum, 0, total_gen); return (int *) NULL; } seed &= 0x7fffffff; /* Only 31 LSB of seed considered */ if (param < 0 || param >= NPARAMS) /* check if parameter is valid */ { fprintf(stderr,"WARNING - init_rng: parameter not valid. Using Default parameter.\n"); param = 0; } length = valid[param].L; /* determine parameters */ k = valid[param].K; /* define the starting vector for the initial node */ nstart = (uint64 *) mymalloc((length-1)*sizeof(uint64)); if (nstart == NULL) return NULL; seti(gennum,nstart[0]); for (i=1;isi; while (lowword(si[0]) < total_gen && !highword(si[0])) si_double(si,si,length); NGENS++; genptr->stream_number = gennum; genptr->nstreams = total_gen; genptr->array_sizes = (int *) mymalloc(genptr->narrays*sizeof(int)); genptr->arrays = (int **) mymalloc(genptr->narrays*sizeof(int *)); if(genptr->array_sizes == NULL || genptr->arrays == NULL) return NULL; genptr->arrays[0] = (int *) genptr->lags; genptr->arrays[1] = (int *) genptr->si; genptr->array_sizes[0] = genptr->lval*sizeof(uint64)/sizeof(int); genptr->array_sizes[1] = (genptr->lval-1)*sizeof(uint64)/sizeof(int); return (int *) genptr; } /* Returns a double precision random number */ #ifdef __STDC__ double get_rn_dbl(int *igenptr) #else double get_rn_dbl(igenptr) int *igenptr; #endif { struct rngen *genptr = (struct rngen *) igenptr; advance_state(genptr); /*printf("\t sprng: %lu\n", genptr->lags[genptr->hptr]);*/ #ifdef LONG64 return (genptr->lags[genptr->hptr]>>12)*TWO_M52; #else return (genptr->lags[genptr->hptr][1])*TWO_M32 + (genptr->lags[genptr->hptr][0])*TWO_M64; #endif } /* Return a random integer */ #ifdef __STDC__ int get_rn_int(int *igenptr) #else int get_rn_int(igenptr) int *igenptr; #endif { struct rngen *genptr = (struct rngen *) igenptr; advance_state(genptr); #ifdef LONG64 return genptr->lags[genptr->hptr]>>33; #else return genptr->lags[genptr->hptr][1]>>1; #endif } /* Return a single precision random number */ #ifdef __STDC__ float get_rn_flt(int *igenptr) #else float get_rn_flt(igenptr) int *igenptr; #endif { /* If you have a more efficient way of computing the random integer, then please replace the statement below with your scheme. */ return (float) get_rn_dbl(igenptr); } /*************************************************************************/ /*************************************************************************/ /* SPAWN_RNG: spawns new generators */ /*************************************************************************/ /*************************************************************************/ #ifdef __STDC__ int spawn_rng(int *igenptr, int nspawned, int ***newgens, int checkid) #else int spawn_rng(igenptr,nspawned, newgens, checkid) int *igenptr,nspawned, ***newgens, checkid; #endif { struct rngen **genptr, *temp = (struct rngen *) igenptr; int i; uint64 *p; if (nspawned <= 0) /* is nspawned valid ? */ { nspawned = 1; fprintf(stderr,"WARNING - spawn_rng: nspawned <= 0. Default value of 1 used for nspawned\n"); } p = temp->si; genptr = initialize(nspawned,temp->parameter,temp->seed,p,temp->init_seed); if(genptr == NULL) /* allocate memory for pointers to structures */ { *newgens = NULL; return 0; } si_double(p,p,temp->lval); for(i=0; iarray_sizes = (int *) mymalloc(genptr[i]->narrays*sizeof(int)); genptr[i]->arrays = (int **) mymalloc(genptr[i]->narrays*sizeof(int *)); if(genptr[i]->array_sizes == NULL || genptr[i]->arrays == NULL) return 0; genptr[i]->arrays[0] = (int *) genptr[i]->lags; genptr[i]->arrays[1] = (int *) genptr[i]->si; genptr[i]->array_sizes[0] = genptr[i]->lval*sizeof(uint64)/sizeof(int); genptr[i]->array_sizes[1] = (genptr[i]->lval-1)*sizeof(uint64)/sizeof(int); } NGENS += nspawned; *newgens = (int **) genptr; if(checkid != 0) for(i=0; inarrays; i++) free(q->arrays[i]); if(q->narrays > 0) { free(q->array_sizes); free(q->arrays); } free(q); NGENS--; return NGENS; } #ifdef __STDC__ int pack_rng( int *genptr, char **buffer) #else int pack_rng(genptr,buffer) int *genptr; char **buffer; #endif { unsigned char *p, *initp; int size, i; struct rngen *q; q = (struct rngen *) genptr; size = 24+16*q->lval + strlen(q->gentype)+1; initp = p = (unsigned char *) mymalloc(size); /* allocate memory */ if(p == NULL) { *buffer = NULL; return 0; } strcpy((char *) p,q->gentype); p += strlen(q->gentype)+1; p += store_int(q->stream_number,4,p); p += store_int(q->nstreams,4,p); p += store_int(q->init_seed,4,p); p += store_int(q->parameter,4,p); p += store_int(q->hptr,4,p); p += store_int(q->lval,4,p); p += store_int(q->kval,4,p); p += store_int(q->seed,4,p); p += store_uint64array(q->si,q->lval-1,p); p += store_uint64array(q->lags,q->lval,p); *buffer = (char *) initp; assert(p-initp == size); return p-initp; } #ifdef __STDC__ int *unpack_rng( char *packed) #else int *unpack_rng(packed) char *packed; #endif { struct rngen *q; unsigned char *p; int i, found; q = (struct rngen *) mymalloc(sizeof(struct rngen)); if(q == NULL) return NULL; p = (unsigned char *) packed; if(strcmp((char *) p,GENTYPE) != 0) { fprintf(stderr,"ERROR: Unpacked ' %.24s ' instead of ' %s '\n", p, GENTYPE); return NULL; } else q->gentype = GENTYPE; p += strlen(q->gentype)+1; p += load_int(p,4,(unsigned int *)&q->stream_number); p += load_int(p,4,(unsigned int *)&q->nstreams); p += load_int(p,4,(unsigned int *)&q->init_seed); p += load_int(p,4,(unsigned int *)&q->parameter); p += load_int(p,4,(unsigned int *)&q->hptr); p += load_int(p,4,(unsigned int *)&q->lval); p += load_int(p,4,(unsigned int *)&q->kval); p += load_int(p,4,(unsigned int *)&q->seed); /* check values of parameters for consistency */ for(i=found=0; ilval==valid[i].L && q->kval==valid[i].K) { found = 1; break; } if(found == 0) { fprintf(stderr,"ERROR: Unpacked parameters are not acceptable.\n"); return NULL; } q->narrays = 2; q->array_sizes = (int *) mymalloc(q->narrays*sizeof(int)); q->arrays = (int **) mymalloc(q->narrays*sizeof(int *)); if(q->array_sizes == NULL || q->arrays == NULL) return NULL; q->array_sizes[0] = q->lval*sizeof(uint64)/sizeof(int); q->array_sizes[1] = (q->lval-1)*sizeof(uint64)/sizeof(int); for(i=0; inarrays; i++) { q->arrays[i] = (int *) mymalloc(q->array_sizes[i]*sizeof(int)); if(q->arrays[i] == NULL) return NULL; } q->lags = (uint64 *) q->arrays[0]; q->si = (uint64 *) q->arrays[1]; p += load_uint64array(p,q->lval-1,q->si); p += load_uint64array(p,q->lval,q->lags); NGENS++; return (int *) q; } #ifdef __STDC__ int get_seed_rng(int *gen) #else int get_seed_rng(gen) int *gen; #endif { return ((struct rngen *) gen)->init_seed; } #ifdef __STDC__ int print_rng( int *igen) #else int print_rng(igen) int *igen; #endif { struct rngen *gen; printf("\n%s\n", GENTYPE+2); gen = (struct rngen *) igen; printf("\n \tseed = %d, stream_number = %d\tparameter = %d\n\n", gen->init_seed, gen->stream_number, gen->parameter); return 1; } #include "../simple_.h" #include "../fwrap_.h" SHAR_EOF fi # end of overwriting check if test -f 'mlfg.data' then echo shar: will not over-write existing file "'mlfg.data'" else cat << "SHAR_EOF" > 'mlfg.data' 1344404273 1971277308 290254454 1083372102 895084232 729814190 624854114 899912958 257245571 740331159 307398963 1146378559 564320757 1024779462 1722493988 629853638 1467242619 1123333445 674786328 1945686069 1038818467 1377383964 1508592143 1591781294 751309967 1287962425 2024796058 80440979 1589263475 218971170 26882841 2060952703 2062276123 1949546003 452184916 693844543 286574064 2079184783 883182482 1285429140 1358476124 1681488844 423007346 594894998 236446631 1270172052 392193194 2057970022 1389147619 1613926128 1415911066 863754398 176193777 116183920 553831988 2129269519 920281116 816643758 211608358 667893922 1013642387 925903694 1354637784 1195408961 405550226 1160723497 694730397 453821204 949196364 945410040 1662945891 1382219580 2043159770 996618570 178120018 653579137 820727623 661270676 2141607972 957828023 15599396 934123276 405498384 1463894368 1596350686 1383971408 401806818 1899097687 1435392747 280044166 451535797 667891553 328081257 1404838802 1372423908 679494027 1862006328 2056473173 269394493 336138917 909032177 581660988 314791878 1175454363 1663824789 1975897213 782860028 947600045 2056631522 554900845 958491825 467464269 1084419666 324193819 328410499 925474559 1110871928 1813339558 1629371405 283333840 1729397961 699054089 1676777235 80120204 563439214 1123433668 1571384470 795397952 1163568631 1173697950 875025470 1270724394 2074362053 1991114956 1924898827 395467548 1317995558 835453867 45848263 490734899 1254527314 1166014910 925010564 1754993348 1030617174 515621579 239727235 312935503 247970997 2041231128 807800855 953023582 935038439 981096876 433096946 2121283663 581202621 1744378620 828052051 74082531 757117088 1470977045 1226866639 919321941 2004121677 883266750 1785905196 1773006200 1364307522 1538266683 18772703 789553563 30980478 1663359184 2146435145 662331959 1757759233 1033484021 455632505 290497330 274470917 422036712 1189625250 287261904 108395007 1351218821 66569817 1195242004 1556977983 179426526 1267893111 1760372829 1817116431 1075643649 886526580 919660953 1321658356 1722851223 1609870321 1978721730 387611524 571857310 512754693 594766505 1586894221 378514589 705833231 93189042 574533467 796035982 618717082 709622129 1016621500 769517324 380070887 884625363 836560510 717589286 1760589264 1752652145 2012213828 511359954 1668989206 1511804370 625680404 1239422926 1462724929 1363508673 306812441 3732111 1531256075 1081221917 1743679436 393721496 34533623 708088293 1318475436 102690723 1171438382 1467368976 1391083255 1102642459 1336047243 1621780307 1371606554 574540705 1124015787 927493373 308200721 1423045818 672893583 580263407 457222401 1029658533 1776369839 1835365956 1170624327 284752306 2017154155 610578098 1141504663 1262509647 203926253 1116964753 208874102 1179208379 1603588990 277718350 1943719683 1024149981 1798173807 1642621551 1011879675 2103040509 1085044987 716654720 1508350038 494027439 480853088 1944413426 1147135970 1157923848 606027416 99936483 855056188 1003971078 1984960014 772703801 848514041 1229059881 1528038590 638511859 557013705 1832400779 1475322199 1086818332 743119971 382299528 968193075 159961919 1542723225 25698362 1988262367 2018002873 1936123554 195327859 657935247 243670217 1638126310 1745855456 1714186832 2044971910 1825844872 681215965 744580311 1431909696 617135926 45883337 404305660 1418128758 1696570016 956993983 1708546581 15474574 889607394 1443832571 906917449 2006716320 1406930240 629365879 1414409921 733909111 1657513754 966853919 103339508 514184032 1969441535 1997515329 585668431 625417594 1862889323 1870417561 30924413 1121835174 1000765102 355482564 134853724 1233312675 610694819 92486554 916554444 1828453247 201525650 1131865759 354840432 2145379507 250659414 801197096 2018786822 78703238 378982443 1801681229 1727827390 1039879051 615759336 1759083332 1202452667 1908062337 1197994628 1828948812 95424944 1640450411 828149985 697423169 1508613549 1382079153 1784539927 1475773024 1029085082 1791303007 1162136830 583260098 61759169 1784938377 305061817 1653715166 352382817 857098300 1625462612 1481157488 2042510187 1524384019 1504355392 2065236858 1840819437 654648808 153274497 1150747834 1153036354 450218012 1681901621 1858459529 1294988750 1044913750 1126516198 778637056 395295075 1569926001 1656974970 1771840527 1093679503 299630624 1724524913 59638046 663677881 2025638847 1613241068 558081481 669446626 1469995534 12318760 1703817809 1726527454 1574550754 2096330888 88695219 1136618393 159529883 459463337 1878572988 1746359419 1922251707 836786879 234170641 1388749363 67486428 606008713 379090882 1014454838 1870606359 493659301 255397772 1779960663 1648318975 1056415637 1053562861 946641171 1638701732 1484378635 166919624 73933550 127478512 67049277 2141739038 1383757011 1277505226 217627134 1729686702 215836453 507829502 1297262388 1065023423 1166162663 2118370625 1600373301 582356622 518727986 1057479645 1139371156 760451006 1298553848 493656176 755063548 1221540431 2066178339 2107003517 973995769 1008442424 664996150 1643034021 1997144721 888214295 1455347431 1747211104 953974185 1854727271 51950094 1969226547 385350350 1353384322 1556125725 1351329627 575727567 1810222152 616117321 1817150626 2099005577 1513033110 1194491985 34369753 0.556365 0.464570 0.988374 0.578140 0.951955 0.577156 0.849277 0.242430 0.334194 0.057300 0.446225 0.873265 0.942439 0.953111 0.411449 0.113237 0.187278 0.294615 0.818375 0.780273 0.951770 0.013072 0.323974 0.512235 0.362725 0.363430 0.275777 0.123226 0.652680 0.994410 0.086023 0.777441 0.479927 0.669029 0.682351 0.394146 0.886341 0.029105 0.737987 0.879878 0.280079 0.913448 0.227181 0.894477 0.486361 0.420041 0.065549 0.557863 0.062585 0.260766 0.809889 0.726972 0.726049 0.190116 0.906481 0.514734 0.036951 0.933179 0.751360 0.438607 0.578829 0.582993 0.547446 0.953132 0.197733 0.810112 0.685195 0.663330 0.581476 0.852351 0.750613 0.850654 0.766051 0.092521 0.443414 0.175103 0.702127 0.296415 0.129511 0.401560 0.335992 0.658406 0.028530 0.382178 0.243521 0.269750 0.220765 0.144021 0.503041 0.461049 0.589106 0.528974 0.543907 0.401842 0.848025 0.546879 0.153792 0.871680 0.783100 0.319127 0.881548 0.054978 0.240050 0.668867 0.773522 0.615138 0.460975 0.112203 0.255110 0.843256 0.495164 0.820179 0.658619 0.311778 0.569426 0.998841 0.659705 0.987240 0.670992 0.938948 0.145920 0.240706 0.321197 0.603820 0.845679 0.352306 0.189999 0.881878 0.406841 0.915780 0.600408 0.977865 0.949506 0.677976 0.999998 0.275047 0.287840 0.949228 0.070744 0.802020 0.391978 0.907116 0.677658 0.574524 0.706702 0.752933 0.260338 0.999984 0.553907 0.308594 0.292198 0.149311 0.962380 0.463041 0.405696 0.337848 0.414911 0.022559 0.176959 0.469133 0.110039 0.154065 0.699369 0.870109 0.314921 0.541116 0.718871 0.287507 0.980954 0.559291 0.105017 0.871972 0.709174 0.371855 0.609523 0.497115 0.474982 0.186873 0.390046 0.673785 0.251868 0.320715 0.410845 0.830038 0.579706 0.165204 0.861112 0.298581 0.975676 0.549081 0.025104 0.950148 0.981877 0.074374 0.771066 0.835633 0.224579 0.528940 0.795009 0.390040 0.455583 0.944649 0.676607 0.924170 0.722930 0.003352 0.917310 0.199162 0.506158 0.131757 0.605962 0.774411 0.394792 0.738743 0.535345 0.700964 0.881903 0.201232 0.942461 0.399838 0.186060 0.230631 0.853556 0.427495 0.055923 0.985979 0.761894 0.672840 0.624820 0.570923 0.864983 0.487831 0.471306 0.983926 0.965564 0.608061 0.423419 0.744052 0.829526 0.085885 0.716205 0.617752 0.076796 0.093574 0.476120 0.672465 0.395681 0.329645 0.935817 0.080442 0.961491 0.840832 0.246548 0.697949 0.720137 0.246161 0.101111 0.010964 0.757919 0.140282 0.349373 0.369731 0.144995 0.948966 0.180601 0.147219 0.242224 0.615737 0.126176 0.622113 0.698421 0.869097 0.256896 0.503387 0.364886 0.185977 0.081276 0.700407 0.828774 0.725358 0.888289 0.175982 0.763644 0.147136 0.063501 0.315750 0.420633 0.823039 0.210119 0.003502 0.162781 0.247427 0.340346 0.857208 0.730889 0.254988 0.546633 0.390497 0.791511 0.485924 0.283397 0.607676 0.497457 0.485160 0.346415 0.571326 0.988003 0.896707 0.909368 0.032770 0.898584 0.240087 0.855993 0.808528 0.548880 0.904694 0.609347 0.941593 0.585342 0.468322 0.028794 0.890791 0.620120 0.285701 0.985859 0.533735 0.291378 0.329344 0.019415 0.110826 0.656740 0.445437 0.555885 0.286938 0.230966 0.096156 0.979198 0.641853 0.311523 0.637631 0.244436 0.140502 0.248634 0.413755 0.275295 0.715571 0.306643 0.928175 0.879426 0.476133 0.064039 0.265420 0.623167 0.790017 0.486200 0.255699 0.367829 0.072442 0.752906 0.146597 0.211205 0.382453 0.106569 0.766809 0.994993 0.488874 0.673493 0.093841 0.081955 0.484671 0.939592 0.234405 0.839118 0.371347 0.936747 0.878662 0.762438 0.497614 0.241631 0.346110 0.667393 0.238548 0.964985 0.548044 0.706433 0.156751 0.450895 0.747294 0.505023 0.147009 0.763300 0.526743 0.966622 0.775326 0.075134 0.850813 0.546348 0.716117 0.606450 0.764861 0.565164 0.232192 0.887247 0.738029 0.753110 0.013010 0.222637 0.300216 0.481673 0.023479 0.280923 0.381830 0.508857 0.722632 0.008241 0.216166 0.949090 0.440561 0.690099 0.876038 0.699696 0.368696 0.960746 0.771743 0.966088 0.843554 0.915028 0.168329 0.933063 0.948936 0.685973 0.721296 0.768305 0.286345 0.346782 0.783534 0.679570 0.975080 0.999663 0.455780 0.081140 0.835590 0.588488 0.927249 0.470078 0.490836 0.897980 0.281317 0.012735 0.092694 0.594129 0.425354 0.373070 0.292350 0.961893 0.676502 0.948787 0.588270 0.339951 0.271071 0.257900 0.895763 0.839618 0.695309 0.971764 0.385455 0.049776 0.092051 0.265841 0.632942 0.580560 0.651059 0.897529 0.642173 0.360060 0.277537 0.414824 0.698736 0.645108 0.023722 0.163647 0.805548 0.507287 0.388646 0.829317 0.459725 0.335222 0.808159 0.038340 0.849234 0.530963 0.011742 0.727507 0.422920 0.214055 0.718802 0.087040 0.254013 0.880395 0.127240 0.85946695012587 0.80056548692219 0.39640787665780 0.30348170192968 0.97470308936659 0.15183935089797 0.80678229168707 0.41596220466227 0.46882840344583 0.86467446685724 0.88383852316380 0.13910334436739 0.51046210289985 0.87410538081039 0.43094011194741 0.63968490852616 0.33074547539987 0.68302758839059 0.28935077937821 0.63981321390559 0.96026837233886 0.23811802199661 0.11015051038739 0.10228639123466 0.42445707407712 0.91892284528194 0.34949370893663 0.44087992840965 0.07803874208123 0.88262629989268 0.60435421591064 0.09281185965636 0.71896288616325 0.92521185176017 0.07977189520257 0.35379194231503 0.30686128098497 0.13939489354464 0.91354304826045 0.00239357327978 0.89315284029164 0.20755006448190 0.80886747166137 0.01223880374289 0.27529479061168 0.94885097548783 0.88115642112811 0.93601717172543 0.97920099319651 0.40692646552672 0.28335740759159 0.15193030046281 0.52964895791582 0.99236862384579 0.39072970134332 0.80892471991117 0.66648069833687 0.91860444149815 0.93444964756581 0.07700984911627 0.19336476684994 0.17254322252082 0.33287036817726 0.97530524855316 0.02218692404079 0.23647534577431 0.82912597594910 0.73396996587774 0.95067069730043 0.59470032664439 0.18775462415836 0.98948597084984 0.98837499763500 0.90422865807413 0.63285132384081 0.52649098010234 0.77084279037276 0.34835483881441 0.74425879181949 0.31627147315073 0.39750202262375 0.33600293010495 0.27267557469964 0.45294888366820 0.37136739215805 0.38240828232189 0.72709027138574 0.82911364323873 0.81013993419170 0.31047173417153 0.11150243546357 0.01872270340904 0.65122285389416 0.96533210099204 0.07707090000422 0.16315897867070 0.18968465844986 0.04513422410788 0.54245412541945 0.99834484551506 0.19695437442412 0.97634304967117 0.49752501217347 0.46339180836231 0.92345651920539 0.36119290353744 0.62031737954453 0.39639455474976 0.51532146673407 0.67559715285917 0.06697862119140 0.32714987412626 0.00859764979173 0.46307743364810 0.45561644242125 0.92600053170868 0.87481932968075 0.39712263331300 0.66137359332269 0.27162687728351 0.93750666321480 0.66078939867512 0.80970984784050 0.24849411903893 0.46339573449724 0.72413333835416 0.89448935763164 0.62521852945918 0.28313638059790 0.12269538994015 0.80739956549571 0.66250024791868 0.09593994446749 0.77215721048367 0.77220170160662 0.28316501029737 0.90161074733187 0.70147580958018 0.30908784046016 0.51723922330905 0.28775894734101 0.97178344688766 0.62575423884819 0.51542045411449 0.74676570938357 0.23819615512637 0.70002304649226 0.15057761347154 0.60006375258574 0.63112755508236 0.55170698141761 0.35850302853081 0.37264263691868 0.21435461387003 0.02493232321893 0.55130545599559 0.43074249503634 0.83507103750842 0.73099197195015 0.79720389216208 0.03468113499158 0.94950186840938 0.63193396197243 0.08450410350550 0.18749560326950 0.11407333649404 0.70942111560032 0.41480670603759 0.08237400640921 0.54266862789824 0.18836253198059 0.45539663771361 0.36134790270536 0.10665120831904 0.61781824432736 0.29373945174788 0.61880511508321 0.80597079738558 0.04193730103877 0.45777591709970 0.78525237493057 0.90739536187589 0.22809322953320 0.83230042596123 0.85618984265886 0.68122838123657 0.83103891413751 0.90767180519304 0.14890630237246 0.88719391199446 0.98611578951938 0.46214011945379 0.75160953343117 0.13398905613895 0.16346613525851 0.43303339109780 0.34892176138497 0.50702282492501 0.97631422050038 0.93911765305029 0.42636173516627 0.65485309931944 0.22952002002581 0.71331893721531 0.78268716214510 0.86641236755804 0.56481786578417 0.28671003623434 0.95615602185464 0.75723798426711 0.25874970573985 0.55237167659562 0.96591099186892 0.35145791890784 0.52075056348867 0.81978471983402 0.94264769768073 0.22671495147598 0.71736867806491 0.49601322222352 0.26486393147445 0.51351841999509 0.01454799240635 0.04353412037532 0.02860247127062 0.02841255233654 0.49618141751992 0.14770945990786 0.85147523337192 0.14751009683938 0.16193010351461 0.59463235725218 0.17244194835469 0.85241662900740 0.39121635935361 0.43060632824598 0.15210475353851 0.32025952301746 0.11885676522209 0.90883511166407 0.41349462471682 0.02710297992735 0.50462328235337 0.97311077202069 0.14548304106656 0.09000237643191 0.32637376266085 0.73140002168361 0.25421256360450 0.66124968707229 0.84082228972246 0.58059365452682 0.17838947416790 0.09666475154608 0.11424099049151 0.99754656359987 0.07215969777675 0.04678411506190 0.41273479283618 0.56392632739435 0.94351912744514 0.35461403274363 0.68804698080462 0.68693652178112 0.11815054430796 0.80969919454586 0.04977707560794 0.45585533049243 0.76244201016829 0.26588020696119 0.28692575805366 0.07156898425345 0.50877163076699 0.78787604366826 0.06086863628077 0.83916967653645 0.58712064686126 0.26287989406865 0.08490745519403 0.01403989849807 0.00632466724933 0.81911777066838 0.44176692587976 0.19611076015327 0.04855708030016 0.69417526104711 0.93381073060807 0.75439764792612 0.45663934505440 0.05407957211177 0.18312074968758 0.09883943964941 0.98846923813337 0.70291464913607 0.88909192620075 0.21367536361993 0.43679440437918 0.29871227072608 0.67479945674044 0.40980925564576 0.70996175216629 0.95366018725589 0.48075945067130 0.83985108486118 0.78391528783113 0.59850713147345 0.07145924344622 0.82743318743691 0.07718654192813 0.00475494506683 0.21062738131877 0.24820841598252 0.04925861833583 0.15961829993920 0.46244800765542 0.32622426254585 0.58902624970504 0.76111683911418 0.62602055927647 0.24915654979955 0.21453147343906 0.13917292166892 0.78261868199577 0.90407578319224 0.64269810726328 0.34421569150925 0.38834540609775 0.85295927187742 0.97604630413758 0.92275339501656 0.60656874670885 0.78052304178928 0.11232254294913 0.23615491325053 0.37017074416552 0.54904650610977 0.23025353849609 0.83418059937786 0.96942830554942 0.46636752315076 0.17791276035923 0.91874920068474 0.88275662029807 0.15431314794949 0.27788715937211 0.94024072930113 0.67330725751651 0.71305095881507 0.10143158260350 0.47075359401464 0.38411039546125 0.71569386549073 0.08010477860399 0.95856060891146 0.22704756719775 0.31337251414570 0.73880289599004 0.64281842501174 0.02494690599583 0.45172745134082 0.61737429986686 0.39330579719335 0.90153911085042 0.52463465376154 0.81335401544551 0.44615395795954 0.47198312760876 0.27526717095613 0.12852570790385 0.58667025718580 0.70467450308716 0.84240069042223 0.48956113506305 0.37194763477258 0.66297414145676 0.51378403401043 0.30911982324676 0.60266344770939 0.33357813711707 0.08044358770383 0.52354552871638 0.14783240365495 0.87910231141956 0.44706123715282 0.11499352245197 0.88960222028327 0.52944266387240 0.22718574716011 0.76495937757460 0.05351501111166 0.43996714557439 0.13835074220107 0.42355586507782 0.26704607994602 0.67179288052483 0.06845778996343 0.43994161176626 0.27130393775691 0.57455745750582 0.30940025188281 0.61545544056404 0.56102198900356 0.18319454815460 0.86886330510216 0.34092270950420 0.02118216653959 0.15792182966227 0.40078241915828 0.10640342617356 0.05332129757032 0.56017947847911 0.32214601452229 0.21311799031540 0.81690205774055 0.24296072470632 0.43711577893629 0.43157526807752 0.17399287996012 0.13844320634899 0.01547680655846 0.39881774502858 0.40771913173368 0.27326264828934 0.19060341611863 0.90704563761546 0.18613584195212 0.22757469625008 0.84736639858476 0.17336967002616 0.89232890977906 0.82720750173978 0.15351595803650 0.67301807185670 0.31529863726934 0.64544221588972 0.15977581883501 0.31881798743326 0.32548143473083 0.57093210852830 0.50715277844260 0.02849441721621 0.91495976294511 0.71856031716435 0.67198776080900 0.81056231844221 0.87440573539069 0.71962515097232 0.50307642557387 0.76265845836830 0.74918889615765 0.49018047724802 0.43587403133788 0.79601624747205 0.57226606366110 0.23858735332484 0.03031094086757 0.15539026983738 0.70912999286214 0.96987113750414 0.37023441976761 0.19344196090348 0.92144700477822 0.75335399065430 0.24614770608711 0.16678737707181 0.67387963017395 0.86867710107548 0.58706933692789 0.60312554329572 0.74118742840657 0.61037453618362 0.42327348411580 0.72752437308678 0.97758070581347 0.54745935819843 0.37808773617863 0.59185225382694 0.81967621520487 0.94566229236244 0.11244417310728 0.47349383068317 0.83777050899133 0.51336444911024 0.98975442884257 0.27760064812326 0.43215096619470 0.01465744004170 0.53535622021238 0.02089496744830 0.54073044259555 0.68988816248347 0.00477464521735 0.77723224926727 0.95596283833187 0.62202522856195 0.24710812225554 0.22469906377002 0.15572557557707 0.16096609432528 0.21580851895023 1428368087 1665524327 1270317232 1824115955 512254602 86349257 726836169 648218954 1771285379 1867253637 1683712352 1400185219 1356940758 1601759171 1230636265 1723299111 172261367 222986213 969005022 1011396380 613710413 1507530575 461592300 1799438731 1263949021 1737379567 494813349 971176659 1805179369 221345750 1213262015 1245539906 823537597 1763950955 465969841 1499397093 212889760 1932650612 1665101351 1718191066 808552057 139497366 1584233128 1792285903 808611697 1696608109 591966004 1245736921 73591053 288262780 1883502475 914479277 1494647081 427607079 348451535 1093170849 976601775 125583541 1166593425 1908382582 1556307350 1150847972 1648718153 92193637 670730606 1259013175 430814400 1483442407 805308247 1214921890 912203341 1669106275 1928506533 2139676987 2032324070 1939910549 1755561975 615917460 1665791258 551708917 773804186 295972610 768536204 840207220 2124308057 2105110470 811894388 1207833177 721678025 1090543742 1727120188 1107646163 1186884834 1825003313 2134870661 183116896 956515367 45148199 1236293287 1934801264 1890181208 66493912 946242452 623571602 2114909637 1026151105 1175233941 1808259128 290876938 1920460040 398050799 558695992 1370603791 69915127 433963956 1763268462 1082755345 1154379662 1382592565 1865474156 1993554219 2065273719 1915537838 2065403559 813521382 880532525 922251345 1670472148 2063148946 467652340 1838888164 180543021 1661153355 2109542934 2116375730 114052042 1356969801 300084364 2063237281 781410148 2111805687 1646975985 1917610835 1775597477 1844495938 1732012163 378420045 632659781 665549512 1434901869 1344404273 1971277308 290254454 1083372102 895084232 729814190 624854114 899912958 257245571 740331159 307398963 1146378559 564320757 1024779462 1722493988 629853638 1467242619 1123333445 674786328 1945686069 1038818467 1377383964 1508592143 1591781294 751309967 1287962425 2024796058 80440979 1589263475 218971170 26882841 2060952703 2062276123 1949546003 452184916 693844543 286574064 2079184783 883182482 1285429140 1358476124 1681488844 423007346 594894998 236446631 1270172052 392193194 2057970022 1389147619 1613926128 1344404273 1971277308 290254454 1083372102 895084232 729814190 624854114 899912958 257245571 740331159 307398963 1146378559 564320757 1024779462 1722493988 629853638 1467242619 1123333445 674786328 1945686069 1038818467 1377383964 1508592143 1591781294 751309967 1287962425 2024796058 80440979 1589263475 218971170 26882841 2060952703 2062276123 1949546003 452184916 693844543 286574064 2079184783 883182482 1285429140 1358476124 1681488844 423007346 594894998 236446631 1270172052 392193194 2057970022 1389147619 1613926128 1070502497 185458557 394571982 625063792 1202551232 1106745477 1922274594 1933100968 1849320089 2115080830 1867777732 2130631723 596072318 1653803768 727441528 1679567064 199180016 1759301942 1362247603 843443807 2078602027 1855953608 248916061 853446759 55795458 653874832 60710992 1588551358 1066619885 2096944326 1459833265 2067889981 1180737744 14153581 1877497599 1864031763 288585453 1490975114 137051711 1973393940 1973776514 238811539 307692916 1759733375 1381965177 1608191452 865161446 1908119138 1935244809 1454271467 SHAR_EOF fi # end of overwriting check cd .. if test -f 'multiply.h' then echo shar: will not over-write existing file "'multiply.h'" else cat << "SHAR_EOF" > 'multiply.h' #ifdef LONG64 #define mult_48_64(a,b,c) c = (a*b); #define multiply(genptr) mult_48_64(genptr->seed,genptr->multiplier,genptr->seed); genptr->seed += genptr->prime; genptr->seed &= LSB48; #else #define mult_48_32(a,b,c) c[0] = a[0]*b[0]; c[1] = a[1]*b[0]+a[0]*b[1];\ c[2] = a[0]*b[2]+a[1]*b[1]+a[2]*b[0];\ c[3] = a[3]*b[0]+a[2]*b[1]+a[1]*b[2]+a[0]*b[3]; #define multiply(genptr,m,s,res) s[3] = (unsigned int) genptr->seed[0] >> 12;\ s[2] = genptr->seed[0] & 4095; s[1] = genptr->seed[1] >> 12;\ s[0] = genptr->seed[1] & 4095;\ mult_48_32(m,s,res);\ genptr->seed[1] = res[0] + ((res[1]&4095) << 12) + genptr->prime;\ genptr->seed[0] = ( (unsigned int) genptr->seed[1] >> 24)\ + res[2] + ((unsigned int) res[1] >> 12 ) + (res[3] << 12);\ genptr->seed[1] &= 16777215; genptr->seed[0] &= 16777215; #endif SHAR_EOF fi # end of overwriting check if test ! -d 'pmlcg' then mkdir 'pmlcg' fi cd 'pmlcg' if test -f 'Makefile' then echo shar: will not over-write existing file "'Makefile'" else cat << "SHAR_EOF" > 'Makefile' ############################################################################ # # Then typing the command below => results in the following being created # make => Fortran and C libraries for the generator, # Timing executibles. # make pmlcg => Library for the Prime Modulus LCG # # Object files created during the compilation process can be deleted finally # by typing # make clean ############################################################################ SHELL = /bin/sh include ../../make.CHOICES LIBDIR = ../../$(LIB_REL_DIR) SRCDIR = .. CHKDIR = ../.. include $(SRCDIR)/make.$(PLAT) all : pmlcg timesprng checksprng #--------------------------------------------------------------------------- # Construct Library #--------------------------------------------------------------------------- SPRNG_COMMON_DEPEND = $(SRCDIR)/fwrap_mpi.o $(SRCDIR)/cputime.o \ $(SRCDIR)/makeseed.o $(SRCDIR)/simple_mpi.o \ $(SRCDIR)/memory.o $(SRCDIR)/communicate.o $(SRCDIR)/checkid.o $(SRCDIR)/store.o pmlcg : (cd ..; $(MAKE) sprng_common) $(MAKE) $(LIBDIR)/libpmlcg.a $(LIBDIR)/libpmlcg.a : pmlcg.o $(SPRNG_COMMON_DEPEND) $(AR) $(ARFLAGS) $(LIBDIR)/libpmlcg.a pmlcg.o \ $(SPRNG_COMMON_DEPEND) $(RANLIB) $(LIBDIR)/libpmlcg.a pmlcg.o : $(SRCDIR)/interface.h pmlcg.c $(SRCDIR)/memory.h basic.h info.h gmp.h longlong.h $(SRCDIR)/store.h $(SRCDIR)/fwrap_.h $(CC) -c $(CFLAGS) $(FFXN) $(INLINEOPT) pmlcg.c -I$(SRCDIR) #--------------------------------------------------------------------------- # Time the generator #--------------------------------------------------------------------------- timesprng : (cd ..; $(MAKE) timesprng_exec TIMESPRNG_LIB=pmlcg GMPLIB=-lgmp) #--------------------------------------------------------------------------- # Check portability of generator #--------------------------------------------------------------------------- checksprng : (cd ..; $(MAKE) checksprng_exec CHECKSPRNG_LIB=pmlcg GMPLIB=-lgmp) cp pmlcg.data $(CHKDIR)/. #--------------------------------------------------------------------------- .F.f : @if [ -f $*.i ] ; then \ rm $*.i ;\ fi $(CPP) $*.F @if [ -f $*.i ] ; then \ mv $*.i $*.f ;\ fi #--------------------------------------------------------------------------- #--------------------------------------------------------------------------- clean : rm -f *.o *.i realclean : rm -f *.o *.f *~ *.i core a.out .SUFFIXES : .SUFFIXES : .f .F SHAR_EOF fi # end of overwriting check if test -f 'basic.h' then echo shar: will not over-write existing file "'basic.h'" else cat << "SHAR_EOF" > 'basic.h' #include #include #include #include "info.h" #define LINEAR_SEARCH_LIMIT 5000 #define MOST 18 typedef struct DATATYPE1 { long power; MP_INT *valid; struct MP_ARRAY_TYPE denom; struct MP_ARRAY_TYPE the_primes; struct MP_ARRAY_TYPE kill_us; MP_INT *prim; MP_RAT *magic; } REL_PRIME_TABLE; void free_mp_array(struct MP_ARRAY_TYPE *array) { long i; for(i=0; isize; i++) mpz_clear(&(array->list[i])); free(array->list); return; } /* This function merges two arrays */ extern struct MP_ARRAY_TYPE join(first, second) struct MP_ARRAY_TYPE first, second; { struct MP_ARRAY_TYPE result; long count1 = 0; long count2 = 0; MP_INT absfirst, abssecond; mpz_init(&absfirst); mpz_init(&abssecond); result.size = first.size + second.size; result.list = malloc(result.size * sizeof(MP_INT)); if ((count1 < first.size) && (count2 < second.size)) { mpz_abs(&absfirst, &(first.list[count1])); mpz_abs(&abssecond, &(second.list[count2])); } while ((count1 < first.size) && (count2 < second.size)) { if (mpz_cmp(&absfirst, &abssecond) > 0) { mpz_init_set(&(result.list[count1+count2]),&(second.list[count2])); ++count2; if (count2 < second.size) mpz_abs(&abssecond, &(second.list[count2])); } else { mpz_init_set(&(result.list[count1+count2]),&(first.list[count1])); ++count1; if (count1 < first.size) mpz_abs(&absfirst, &(first.list[count1])); } } mpz_clear(&absfirst); mpz_clear(&abssecond); for (;count1 0) { mpz_init(&(result.list[count2])); for (count=0;count 1) oldones = find_denom(&(the_primes[1]), maxsize-1, limit); else { oldones.size = 1; oldones.list = malloc(sizeof(MP_INT)); mpz_init_set_str(oldones.list, "1", 10); } newones = mult_reduce(the_primes, oldones, limit); answer = join(oldones, newones); free_mp_array(&newones); free_mp_array(&oldones); return(answer); } /* Evaluates Mu function, given denominators */ extern void mu_eval(result, x, denominators) MP_INT *result; MP_INT *x; struct MP_ARRAY_TYPE denominators; { MP_INT val; long count = 0; mpz_set_str(result, "0", 10); mpz_init_set_str(&val, "1", 10); while ((count < denominators.size) && (mpz_cmp_ui(&val, 0) != 0)) { mpz_div(&val, x, &(denominators.list[count])); mpz_add(result, result, &val); count++; } mpz_clear(&val); } /* Checks if x == 0 mod y, returns true if so */ extern short divisible(x, y) MP_INT *x, *y; { MP_INT temp; int sign; mpz_init(&temp); mpz_mod(&temp, x, y); sign = mpz_cmp_si(&temp, 0); mpz_clear(&temp); if (sign == 0) { return(1); } else { return(0); } } /* Checks if any primes divide a number */ extern short any_divide(number, the_primes, no_of_primes) MP_INT *number, *the_primes; long no_of_primes; { if (no_of_primes == 1) { return(divisible(number, &(the_primes[0]))); } else { if (divisible(number, &(the_primes[no_of_primes-1]))) { return(1); } else { return(any_divide(number, the_primes, no_of_primes - 1)); } } } extern void incr(x, num) MP_INT *x; long num; { mpz_add_ui(x, x, num); } extern void decr(x, num) MP_INT *x; long num; { mpz_sub_ui(x, x, num); } /* Uses a linear search to find inverse value given guess, mu(guess) */ extern MP_INT linear_find(y, current_mu, guess, the_primes) MP_INT *y, *current_mu, *guess; struct MP_ARRAY_TYPE the_primes; { while (mpz_cmp(current_mu, y) < 0) { incr(guess, 1L); if (any_divide(guess, the_primes.list, the_primes.size)) { } else incr(current_mu, 1L); } while (mpz_cmp(current_mu, y) > 0) { if (any_divide(guess, the_primes.list, the_primes.size)) decr(guess, 1L); else { decr(guess, 1L); decr(current_mu, 1L); } } while (any_divide(guess, the_primes.list, the_primes.size)) decr(guess, 1L); return(*guess); } /* This guesses at mu_inverse */ extern MP_INT guess_mu_inverse(y, magic) MP_INT *y; MP_RAT *magic; { MP_INT temp, guess; mpz_init(&temp); mpz_init(&guess); mpq_get_num(&temp, magic); mpz_mul(&guess, y, &temp); mpq_get_den(&temp, magic); mpz_div(&guess, &guess, &temp); mpz_clear(&temp); return(guess); } /* Efficient caluculation of mu */ extern void Mu(result, x, left_to_kill, the_final_denom) MP_INT *x, *result; struct MP_ARRAY_TYPE left_to_kill, the_final_denom; { MP_INT subout, first, second; struct MP_ARRAY_TYPE new_kill; if (left_to_kill.size <= 0) { mu_eval(result, x, the_final_denom); } else { mpz_init(&subout); mpz_init(&first); mpz_init(&second); mpz_div(&subout, x, &(left_to_kill.list[0])); new_kill.size = left_to_kill.size - 1; new_kill.list = &(left_to_kill.list[1]); Mu(&first, x, new_kill, the_final_denom); Mu(&second, &subout, new_kill, the_final_denom); mpz_sub(result, &first, &second); mpz_clear(&first); mpz_clear(&second); mpz_clear(&subout); } } /* finds the desired result, given y, the primes to be killed, the denominators, the full set of initial primes, and the density of relative primes */ extern MP_INT find_M(guess, y, left_to_kill, denom, initial_primes, magic) MP_INT *guess, *y; struct MP_ARRAY_TYPE denom, initial_primes, left_to_kill; MP_RAT *magic; { MP_INT temp, temp2, current_mu; mpz_init(&temp); mpz_init(&temp2); mpz_init(¤t_mu); #if 0 Mu(¤t_mu, guess, left_to_kill, denom); mpz_sub(&temp, y, ¤t_mu); mpz_abs(&temp2, &temp); while (mpz_cmp_ui(&temp2, LINEAR_SEARCH_LIMIT) > 0) { temp2 = guess_mu_inverse(&temp, magic); mpz_add(guess, guess, &temp2); Mu(¤t_mu, guess, left_to_kill, denom); mpz_sub(&temp, y, ¤t_mu); mpz_abs(&temp2, &temp); } mpz_clear(&temp); mpz_clear(&temp2); #else mpz_set_str(guess, "17", 10); mpz_set_str(¤t_mu, "1", 10); #endif return(linear_find(y, ¤t_mu, guess, initial_primes)); } /* setup. Note: 'int param' must be another argument if modulii other than 2^61-1 will be used */ extern void init_rel_prime(data, maxval) REL_PRIME_TABLE *data; MP_INT *maxval; { /* modified by cmdavis */ MP_INT limit, num, denom; struct MP_ARRAY_TYPE the_primes; /* initialize 'data.power' */ (*data).power = POWER_N; /* initialize 'data.valid' */ (*data).valid = malloc(sizeof(MP_INT)); mpz_init_set((*data).valid, maxval); /* initialize 'data.prim' */ (*data).prim = malloc(sizeof(MP_INT)); mpz_init_set_ui((*data).prim, PRIM); /* initialize 'data.magic' (density of relative primes) */ (*data).magic = malloc(sizeof(MP_RAT)); mpq_init((*data).magic); mpz_init_set_str(&num,MAGIC_NUM,10); mpz_init_set_str(&denom,MAGIC_DEN,10); mpq_set_num((*data).magic,&num); mpq_set_den((*data).magic,&denom); /* initialize 'data.the_primes[]' */ (*data).the_primes = init_factors(); /* initialize 'data.kill_us[]' */ (*data).kill_us.size = (*data).the_primes.size - MOST; if ((*data).kill_us.size < 0) (*data).kill_us.size = 0; (*data).kill_us.list = (*data).the_primes.list; /* initialize 'data.denom[]' */ the_primes = minus(&((*data).the_primes.list[(*data).kill_us.size]), (*data).the_primes.size - (*data).kill_us.size); /* define maximum value for which setup is valid */ mpz_init(&limit); limit = guess_mu_inverse(maxval, (*data).magic); mpz_mul_ui(&limit, &limit, 2); (*data).denom = find_denom(the_primes.list, the_primes.size, &limit); mpz_clear(&limit); mpz_clear(&num); mpz_clear(&denom); free_mp_array(&the_primes); } void free_rel_prime(REL_PRIME_TABLE *data) { mpz_clear(data->valid); mpz_clear(data->prim); free(data->magic); free_mp_array(&(data->the_primes)); free_mp_array(&(data->denom)); } /* find nth number relatively prime, given data */ extern int rel_prime(result, number, data) MP_INT *result, *number; REL_PRIME_TABLE data; { MP_INT guess; int i; REL_PRIME_TABLE newdata; mpz_init(result); mpz_init(&guess); if (mpz_cmp(data.valid, number) >= 0) { mpq_get_num(&guess, data.magic); guess = guess_mu_inverse(number, data.magic); *result = find_M(&guess, number, data.kill_us, data.denom, data.the_primes, data.magic); } else { init_rel_prime(&newdata, number); rel_prime(result, number, newdata); free_rel_prime(&newdata); } /* Do NOT clear guess, since result uses its component array */ return 0; } /* find nth primitive element, given data */ extern void prim_elt(result, number, data) MP_INT *result, *number; REL_PRIME_TABLE data; { MP_INT x, pow,temp; mpz_init_set_str(&x, "2", 10); mpz_pow_ui(&x, &x, data.power); mpz_sub_ui(&x, &x, 1); mpz_init_set(&temp,number); mpz_add_ui(&temp,&temp,5UL); /* first few streams are bad; so offset by 5 streams */ rel_prime(&pow, &temp, data); mpz_powm(result, data.prim, &pow, &x); mpz_clear(&pow); mpz_clear(&temp); } SHAR_EOF fi # end of overwriting check if test -f 'gmp.h' then echo shar: will not over-write existing file "'gmp.h'" else cat << "SHAR_EOF" > 'gmp.h' /* gmp.h -- Definitions for GNU multiple precision functions. Copyright (C) 1991, 1993, 1994, 1995, 1996 Free Software Foundation, Inc. This file is part of the GNU MP Library. The GNU MP Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. The GNU MP Library 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with the GNU MP Library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifndef __GMP_H__ #ifndef __GNU_MP__ #define __GNU_MP__ 2 #define __need_size_t #include #undef __need_size_t #if defined (__STDC__) || defined (__cplusplus) #define __gmp_const const #else #define __gmp_const #endif #if defined (__GNUC__) #define __gmp_inline __inline__ #else #define __gmp_inline #endif #ifndef _EXTERN_INLINE #ifdef __GNUC__ #define _EXTERN_INLINE extern __inline__ #else #define _EXTERN_INLINE static #endif #endif #ifdef _SHORT_LIMB typedef unsigned int mp_limb_t; typedef int mp_limb_signed_t; #else #ifdef _LONG_LONG_LIMB typedef unsigned long long int mp_limb_t; typedef long long int mp_limb_signed_t; #else typedef unsigned long int mp_limb_t; typedef long int mp_limb_signed_t; #endif #endif typedef mp_limb_t * mp_ptr; typedef __gmp_const mp_limb_t * mp_srcptr; typedef long int mp_size_t; typedef long int mp_exp_t; #ifndef __MP_SMALL__ typedef struct { int _mp_alloc; /* Number of *limbs* allocated and pointed to by the D field. */ int _mp_size; /* abs(SIZE) is the number of limbs the last field points to. If SIZE is negative this is a negative number. */ mp_limb_t *_mp_d; /* Pointer to the limbs. */ } __mpz_struct; #else typedef struct { short int _mp_alloc; /* Number of *limbs* allocated and pointed to by the D field. */ short int _mp_size; /* abs(SIZE) is the number of limbs the last field points to. If SIZE is negative this is a negative number. */ mp_limb_t *_mp_d; /* Pointer to the limbs. */ } __mpz_struct; #endif #endif /* __GNU_MP__ */ /* User-visible types. */ typedef __mpz_struct MP_INT; typedef __mpz_struct mpz_t[1]; /* Structure for rational numbers. Zero is represented as 0/any, i.e. the denominator is ignored. Negative numbers have the sign in the numerator. */ typedef struct { __mpz_struct _mp_num; __mpz_struct _mp_den; #if 0 int _mp_num_alloc; /* Number of limbs allocated for the numerator. */ int _mp_num_size; /* The absolute value of this field is the length of the numerator; the sign is the sign of the entire rational number. */ mp_ptr _mp_num; /* Pointer to the numerator limbs. */ int _mp_den_alloc; /* Number of limbs allocated for the denominator. */ int _mp_den_size; /* Length of the denominator. (This field should always be positive.) */ mp_ptr _mp_den; /* Pointer to the denominator limbs. */ #endif } __mpq_struct; typedef __mpq_struct MP_RAT; typedef __mpq_struct mpq_t[1]; typedef struct { int _mp_prec; /* Max precision, in number of `mp_limb_t's. Set by mpf_init and modified by mpf_set_prec. The area pointed to by the `d' field contains `prec' + 1 limbs. */ int _mp_size; /* abs(SIZE) is the number of limbs the last field points to. If SIZE is negative this is a negative number. */ mp_exp_t _mp_exp; /* Exponent, in the base of `mp_limb_t'. */ mp_limb_t *_mp_d; /* Pointer to the limbs. */ } __mpf_struct; /* typedef __mpf_struct MP_FLOAT; */ typedef __mpf_struct mpf_t[1]; /* Types for function declarations in gmp files. */ /* ??? Should not pollute user name space with these ??? */ typedef __gmp_const __mpz_struct *mpz_srcptr; typedef __mpz_struct *mpz_ptr; typedef __gmp_const __mpf_struct *mpf_srcptr; typedef __mpf_struct *mpf_ptr; typedef __gmp_const __mpq_struct *mpq_srcptr; typedef __mpq_struct *mpq_ptr; #ifndef _PROTO #if defined (__STDC__) || defined (__cplusplus) #define _PROTO(x) x #else #define _PROTO(x) () #endif #endif #ifndef __MPN #if defined (__STDC__) || defined (__cplusplus) #define __MPN(x) __mpn_##x #else #define __MPN(x) __mpn_/**/x #endif #endif #if defined (FILE) || defined (H_STDIO) || defined (_H_STDIO) \ || defined (_STDIO_H) || defined (_STDIO_H_) || defined (__STDIO_H__) \ || defined (_STDIO_INCLUDED) #define _GMP_H_HAVE_FILE 1 #endif void mp_set_memory_functions _PROTO ((void *(*) (size_t), void *(*) (void *, size_t, size_t), void (*) (void *, size_t))); extern __gmp_const int mp_bits_per_limb; /**************** Integer (i.e. Z) routines. ****************/ #if defined (__cplusplus) extern "C" { #endif void *_mpz_realloc _PROTO ((mpz_ptr, mp_size_t)); void mpz_abs _PROTO ((mpz_ptr, mpz_srcptr)); void mpz_add _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); void mpz_add_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); void mpz_and _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); void mpz_array_init _PROTO ((mpz_ptr, mp_size_t, mp_size_t)); void mpz_cdiv_q _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); unsigned long int mpz_cdiv_q_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); void mpz_cdiv_qr _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr)); unsigned long int mpz_cdiv_qr_ui _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int)); void mpz_cdiv_r _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); unsigned long int mpz_cdiv_r_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); unsigned long int mpz_cdiv_ui _PROTO ((mpz_srcptr, unsigned long int)); void mpz_clear _PROTO ((mpz_ptr)); void mpz_clrbit _PROTO ((mpz_ptr, unsigned long int)); int mpz_cmp _PROTO ((mpz_srcptr, mpz_srcptr)); int mpz_cmp_si _PROTO ((mpz_srcptr, signed long int)); int mpz_cmp_ui _PROTO ((mpz_srcptr, unsigned long int)); void mpz_com _PROTO ((mpz_ptr, mpz_srcptr)); void mpz_divexact _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); void mpz_fac_ui _PROTO ((mpz_ptr, unsigned long int)); void mpz_fdiv_q _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); void mpz_fdiv_q_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); unsigned long int mpz_fdiv_q_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); void mpz_fdiv_qr _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr)); unsigned long int mpz_fdiv_qr_ui _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int)); void mpz_fdiv_r _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); void mpz_fdiv_r_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); unsigned long int mpz_fdiv_r_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); unsigned long int mpz_fdiv_ui _PROTO ((mpz_srcptr, unsigned long int)); void mpz_gcd _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); unsigned long int mpz_gcd_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); void mpz_gcdext _PROTO ((mpz_ptr, mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr)); double mpz_get_d _PROTO ((mpz_srcptr)); /* signed */ long int mpz_get_si _PROTO ((mpz_srcptr)); char *mpz_get_str _PROTO ((char *, int, mpz_srcptr)); unsigned long int mpz_get_ui _PROTO ((mpz_srcptr)); mp_limb_t mpz_getlimbn _PROTO ((mpz_srcptr, mp_size_t)); unsigned long int mpz_hamdist _PROTO ((mpz_srcptr, mpz_srcptr)); void mpz_init _PROTO ((mpz_ptr)); #ifdef _GMP_H_HAVE_FILE size_t mpz_inp_binary _PROTO ((mpz_ptr, FILE *)); size_t mpz_inp_raw _PROTO ((mpz_ptr, FILE *)); size_t mpz_inp_str _PROTO ((mpz_ptr, FILE *, int)); #endif void mpz_init_set _PROTO ((mpz_ptr, mpz_srcptr)); void mpz_init_set_d _PROTO ((mpz_ptr, double)); void mpz_init_set_si _PROTO ((mpz_ptr, signed long int)); int mpz_init_set_str _PROTO ((mpz_ptr, const char *, int)); void mpz_init_set_ui _PROTO ((mpz_ptr, unsigned long int)); int mpz_invert _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); void mpz_ior _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); int mpz_jacobi _PROTO ((mpz_srcptr, mpz_srcptr)); int mpz_legendre _PROTO ((mpz_srcptr, mpz_srcptr)); void mpz_mod _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); void mpz_mul _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); void mpz_mul_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); void mpz_mul_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); void mpz_neg _PROTO ((mpz_ptr, mpz_srcptr)); #ifdef _GMP_H_HAVE_FILE size_t mpz_out_binary _PROTO ((FILE *, mpz_srcptr)); size_t mpz_out_raw _PROTO ((FILE *, mpz_srcptr)); size_t mpz_out_str _PROTO ((FILE *, int, mpz_srcptr)); #endif int mpz_perfect_square_p _PROTO ((mpz_srcptr)); unsigned long int mpz_popcount _PROTO ((mpz_srcptr)); void mpz_pow_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); void mpz_powm _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr, mpz_srcptr)); void mpz_powm_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int, mpz_srcptr)); int mpz_probab_prime_p _PROTO ((mpz_srcptr, int)); void mpz_random _PROTO ((mpz_ptr, mp_size_t)); void mpz_random2 _PROTO ((mpz_ptr, mp_size_t)); unsigned long int mpz_scan0 _PROTO ((mpz_srcptr, unsigned long int)); unsigned long int mpz_scan1 _PROTO ((mpz_srcptr, unsigned long int)); void mpz_set _PROTO ((mpz_ptr, mpz_srcptr)); void mpz_set_d _PROTO ((mpz_ptr, double)); void mpz_set_f _PROTO ((mpz_ptr, mpf_srcptr)); void mpz_set_q _PROTO ((mpz_ptr, mpq_srcptr)); void mpz_set_si _PROTO ((mpz_ptr, signed long int)); int mpz_set_str _PROTO ((mpz_ptr, const char *, int)); void mpz_set_ui _PROTO ((mpz_ptr, unsigned long int)); void mpz_setbit _PROTO ((mpz_ptr, unsigned long int)); size_t mpz_size _PROTO ((mpz_srcptr)); size_t mpz_sizeinbase _PROTO ((mpz_srcptr, int)); void mpz_sqrt _PROTO ((mpz_ptr, mpz_srcptr)); void mpz_sqrtrem _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr)); void mpz_sub _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); void mpz_sub_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); void mpz_tdiv_q _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); void mpz_tdiv_q_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); void mpz_tdiv_q_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); void mpz_tdiv_qr _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, mpz_srcptr)); void mpz_tdiv_qr_ui _PROTO ((mpz_ptr, mpz_ptr, mpz_srcptr, unsigned long int)); void mpz_tdiv_r _PROTO ((mpz_ptr, mpz_srcptr, mpz_srcptr)); void mpz_tdiv_r_2exp _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); void mpz_tdiv_r_ui _PROTO ((mpz_ptr, mpz_srcptr, unsigned long int)); void mpz_ui_pow_ui _PROTO ((mpz_ptr, unsigned long int, unsigned long int)); /**************** Rational (i.e. Q) routines. ****************/ void mpq_init _PROTO ((mpq_ptr)); void mpq_clear _PROTO ((mpq_ptr)); void mpq_set _PROTO ((mpq_ptr, mpq_srcptr)); void mpq_set_ui _PROTO ((mpq_ptr, unsigned long int, unsigned long int)); void mpq_set_si _PROTO ((mpq_ptr, signed long int, unsigned long int)); void mpq_set_z _PROTO ((mpq_ptr, mpz_srcptr)); void mpq_add _PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr)); void mpq_sub _PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr)); void mpq_mul _PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr)); void mpq_div _PROTO ((mpq_ptr, mpq_srcptr, mpq_srcptr)); void mpq_neg _PROTO ((mpq_ptr, mpq_srcptr)); int mpq_cmp _PROTO ((mpq_srcptr, mpq_srcptr)); int mpq_cmp_ui _PROTO ((mpq_srcptr, unsigned long int, unsigned long int)); int mpq_equal _PROTO ((mpq_srcptr, mpq_srcptr)); void mpq_inv _PROTO ((mpq_ptr, mpq_srcptr)); void mpq_set_num _PROTO ((mpq_ptr, mpz_srcptr)); void mpq_set_den _PROTO ((mpq_ptr, mpz_srcptr)); void mpq_get_num _PROTO ((mpz_ptr, mpq_srcptr)); void mpq_get_den _PROTO ((mpz_ptr, mpq_srcptr)); double mpq_get_d _PROTO ((mpq_srcptr)); void mpq_canonicalize _PROTO ((mpq_ptr)); /**************** Float (i.e. F) routines. ****************/ void mpf_abs _PROTO ((mpf_ptr, mpf_srcptr)); void mpf_add _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr)); void mpf_add_ui _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int)); void mpf_clear _PROTO ((mpf_ptr)); int mpf_cmp _PROTO ((mpf_srcptr, mpf_srcptr)); int mpf_cmp_si _PROTO ((mpf_srcptr, signed long int)); int mpf_cmp_ui _PROTO ((mpf_srcptr, unsigned long int)); void mpf_div _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr)); void mpf_div_2exp _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int)); void mpf_div_ui _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int)); void mpf_dump _PROTO ((mpf_srcptr)); int mpf_eq _PROTO ((mpf_srcptr, mpf_srcptr, unsigned long int)); double mpf_get_d _PROTO ((mpf_srcptr)); unsigned long int mpf_get_prec _PROTO ((mpf_srcptr)); char *mpf_get_str _PROTO ((char *, mp_exp_t *, int, size_t, mpf_srcptr)); void mpf_init _PROTO ((mpf_ptr)); void mpf_init2 _PROTO ((mpf_ptr, unsigned long int)); #ifdef _GMP_H_HAVE_FILE size_t mpf_inp_str _PROTO ((mpf_ptr, FILE *, int)); #endif void mpf_init_set _PROTO ((mpf_ptr, mpf_srcptr)); void mpf_init_set_d _PROTO ((mpf_ptr, double)); void mpf_init_set_si _PROTO ((mpf_ptr, signed long int)); int mpf_init_set_str _PROTO ((mpf_ptr, const char *, int)); void mpf_init_set_ui _PROTO ((mpf_ptr, unsigned long int)); void mpf_mul _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr)); void mpf_mul_2exp _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int)); void mpf_mul_ui _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int)); void mpf_neg _PROTO ((mpf_ptr, mpf_srcptr)); #ifdef _GMP_H_HAVE_FILE size_t mpf_out_str _PROTO ((FILE *, int, size_t, mpf_srcptr)); #endif void mpf_random2 _PROTO ((mpf_ptr, mp_size_t, mp_exp_t)); void mpf_reldiff _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr)); void mpf_set _PROTO ((mpf_ptr, mpf_srcptr)); void mpf_set_d _PROTO ((mpf_ptr, double)); void mpf_set_default_prec _PROTO ((unsigned long int)); void mpf_set_prec _PROTO ((mpf_ptr, unsigned long int)); void mpf_set_prec_raw _PROTO ((mpf_ptr, unsigned long int)); void mpf_set_q _PROTO ((mpf_ptr, mpq_srcptr)); void mpf_set_si _PROTO ((mpf_ptr, signed long int)); int mpf_set_str _PROTO ((mpf_ptr, const char *, int)); void mpf_set_ui _PROTO ((mpf_ptr, unsigned long int)); void mpf_set_z _PROTO ((mpf_ptr, mpz_srcptr)); size_t mpf_size _PROTO ((mpf_srcptr)); void mpf_sqrt _PROTO ((mpf_ptr, mpf_srcptr)); void mpf_sqrt_ui _PROTO ((mpf_ptr, unsigned long int)); void mpf_sub _PROTO ((mpf_ptr, mpf_srcptr, mpf_srcptr)); void mpf_sub_ui _PROTO ((mpf_ptr, mpf_srcptr, unsigned long int)); void mpf_ui_div _PROTO ((mpf_ptr, unsigned long int, mpf_srcptr)); void mpf_ui_sub _PROTO ((mpf_ptr, unsigned long int, mpf_srcptr)); #if defined (__cplusplus) } #endif /************ Low level positive-integer (i.e. N) routines. ************/ /* This is ugly, but we need to make usr calls reach the prefixed function. */ #define mpn_add __MPN(add) #define mpn_add_1 __MPN(add_1) #define mpn_add_n __MPN(add_n) #define mpn_addmul_1 __MPN(addmul_1) #define mpn_bdivmod __MPN(bdivmod) #define mpn_cmp __MPN(cmp) #define mpn_divmod_1 __MPN(divmod_1) #define mpn_divrem __MPN(divrem) #define mpn_divrem_1 __MPN(divrem_1) #define mpn_dump __MPN(dump) #define mpn_gcd __MPN(gcd) #define mpn_gcd_1 __MPN(gcd_1) #define mpn_gcdext __MPN(gcdext) #define mpn_get_str __MPN(get_str) #define mpn_hamdist __MPN(hamdist) #define mpn_lshift __MPN(lshift) #define mpn_mod_1 __MPN(mod_1) #define mpn_mul __MPN(mul) #define mpn_mul_1 __MPN(mul_1) #define mpn_mul_n __MPN(mul_n) #define mpn_perfect_square_p __MPN(perfect_square_p) #define mpn_popcount __MPN(popcount) #define mpn_preinv_mod_1 __MPN(preinv_mod_1) #define mpn_random2 __MPN(random2) #define mpn_rshift __MPN(rshift) #define mpn_scan0 __MPN(scan0) #define mpn_scan1 __MPN(scan1) #define mpn_set_str __MPN(set_str) #define mpn_sqrtrem __MPN(sqrtrem) #define mpn_sub __MPN(sub) #define mpn_sub_1 __MPN(sub_1) #define mpn_sub_n __MPN(sub_n) #define mpn_submul_1 __MPN(submul_1) #define mpn_udiv_w_sdiv __MPN(udiv_w_sdiv) #if defined (__cplusplus) extern "C" { #endif mp_limb_t mpn_add _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_srcptr,mp_size_t)); mp_limb_t mpn_add_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t)); mp_limb_t mpn_add_n _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); mp_limb_t mpn_addmul_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t)); mp_limb_t mpn_bdivmod _PROTO ((mp_ptr, mp_ptr, mp_size_t, mp_srcptr, mp_size_t, unsigned long int)); int mpn_cmp _PROTO ((mp_srcptr, mp_srcptr, mp_size_t)); mp_limb_t mpn_divmod_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t)); mp_limb_t mpn_divrem _PROTO ((mp_ptr, mp_size_t, mp_ptr, mp_size_t, mp_srcptr, mp_size_t)); mp_limb_t mpn_divrem_1 _PROTO ((mp_ptr, mp_size_t, mp_srcptr, mp_size_t, mp_limb_t)); void mpn_dump _PROTO ((mp_srcptr, mp_size_t)); mp_size_t mpn_gcd _PROTO ((mp_ptr, mp_ptr, mp_size_t, mp_ptr, mp_size_t)); mp_limb_t mpn_gcd_1 _PROTO ((mp_srcptr, mp_size_t, mp_limb_t)); mp_size_t mpn_gcdext _PROTO ((mp_ptr, mp_ptr, mp_ptr, mp_size_t, mp_ptr, mp_size_t)); size_t mpn_get_str _PROTO ((unsigned char *, int, mp_ptr, mp_size_t)); unsigned long int mpn_hamdist _PROTO ((mp_srcptr, mp_srcptr, mp_size_t)); mp_limb_t mpn_lshift _PROTO ((mp_ptr, mp_srcptr, mp_size_t, unsigned int)); mp_limb_t mpn_mod_1 _PROTO ((mp_srcptr, mp_size_t, mp_limb_t)); mp_limb_t mpn_mul _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_srcptr, mp_size_t)); mp_limb_t mpn_mul_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t)); void mpn_mul_n _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); int mpn_perfect_square_p _PROTO ((mp_srcptr, mp_size_t)); unsigned long int mpn_popcount _PROTO ((mp_srcptr, mp_size_t)); mp_limb_t mpn_preinv_mod_1 _PROTO ((mp_srcptr, mp_size_t, mp_limb_t, mp_limb_t)); void mpn_random2 _PROTO ((mp_ptr, mp_size_t)); mp_limb_t mpn_rshift _PROTO ((mp_ptr, mp_srcptr, mp_size_t, unsigned int)); unsigned long int mpn_scan0 _PROTO ((mp_srcptr, unsigned long int)); unsigned long int mpn_scan1 _PROTO ((mp_srcptr, unsigned long int)); mp_size_t mpn_set_str _PROTO ((mp_ptr, const unsigned char *, size_t, int)); mp_size_t mpn_sqrtrem _PROTO ((mp_ptr, mp_ptr, mp_srcptr, mp_size_t)); mp_limb_t mpn_sub _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_srcptr,mp_size_t)); mp_limb_t mpn_sub_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t)); mp_limb_t mpn_sub_n _PROTO ((mp_ptr, mp_srcptr, mp_srcptr, mp_size_t)); mp_limb_t mpn_submul_1 _PROTO ((mp_ptr, mp_srcptr, mp_size_t, mp_limb_t)); #if defined (__cplusplus) } #endif #if defined (__GNUC__) || defined (_FORCE_INLINES) _EXTERN_INLINE mp_limb_t #if defined (__STDC__) || defined (__cplusplus) mpn_add_1 (register mp_ptr res_ptr, register mp_srcptr s1_ptr, register mp_size_t s1_size, register mp_limb_t s2_limb) #else mpn_add_1 (res_ptr, s1_ptr, s1_size, s2_limb) register mp_ptr res_ptr; register mp_srcptr s1_ptr; register mp_size_t s1_size; register mp_limb_t s2_limb; #endif { register mp_limb_t x; x = *s1_ptr++; s2_limb = x + s2_limb; *res_ptr++ = s2_limb; if (s2_limb < x) { while (--s1_size != 0) { x = *s1_ptr++ + 1; *res_ptr++ = x; if (x != 0) goto fin; } return 1; } fin: if (res_ptr != s1_ptr) { mp_size_t i; for (i = 0; i < s1_size - 1; i++) res_ptr[i] = s1_ptr[i]; } return 0; } _EXTERN_INLINE mp_limb_t #if defined (__STDC__) || defined (__cplusplus) mpn_add (register mp_ptr res_ptr, register mp_srcptr s1_ptr, register mp_size_t s1_size, register mp_srcptr s2_ptr, register mp_size_t s2_size) #else mpn_add (res_ptr, s1_ptr, s1_size, s2_ptr, s2_size) register mp_ptr res_ptr; register mp_srcptr s1_ptr; register mp_size_t s1_size; register mp_srcptr s2_ptr; register mp_size_t s2_size; #endif { mp_limb_t cy_limb = 0; if (s2_size != 0) cy_limb = mpn_add_n (res_ptr, s1_ptr, s2_ptr, s2_size); if (s1_size - s2_size != 0) cy_limb = mpn_add_1 (res_ptr + s2_size, s1_ptr + s2_size, s1_size - s2_size, cy_limb); return cy_limb; } _EXTERN_INLINE mp_limb_t #if defined (__STDC__) || defined (__cplusplus) mpn_sub_1 (register mp_ptr res_ptr, register mp_srcptr s1_ptr, register mp_size_t s1_size, register mp_limb_t s2_limb) #else mpn_sub_1 (res_ptr, s1_ptr, s1_size, s2_limb) register mp_ptr res_ptr; register mp_srcptr s1_ptr; register mp_size_t s1_size; register mp_limb_t s2_limb; #endif { register mp_limb_t x; x = *s1_ptr++; s2_limb = x - s2_limb; *res_ptr++ = s2_limb; if (s2_limb > x) { while (--s1_size != 0) { x = *s1_ptr++; *res_ptr++ = x - 1; if (x != 0) goto fin; } return 1; } fin: if (res_ptr != s1_ptr) { mp_size_t i; for (i = 0; i < s1_size - 1; i++) res_ptr[i] = s1_ptr[i]; } return 0; } _EXTERN_INLINE mp_limb_t #if defined (__STDC__) || defined (__cplusplus) mpn_sub (register mp_ptr res_ptr, register mp_srcptr s1_ptr, register mp_size_t s1_size, register mp_srcptr s2_ptr, register mp_size_t s2_size) #else mpn_sub (res_ptr, s1_ptr, s1_size, s2_ptr, s2_size) register mp_ptr res_ptr; register mp_srcptr s1_ptr; register mp_size_t s1_size; register mp_srcptr s2_ptr; register mp_size_t s2_size; #endif { mp_limb_t cy_limb = 0; if (s2_size != 0) cy_limb = mpn_sub_n (res_ptr, s1_ptr, s2_ptr, s2_size); if (s1_size - s2_size != 0) cy_limb = mpn_sub_1 (res_ptr + s2_size, s1_ptr + s2_size, s1_size - s2_size, cy_limb); return cy_limb; } #endif /* __GNUC__ */ /* Allow faster testing for negative, zero, and positive. */ #define mpz_sgn(Z) ((Z)->_mp_size < 0 ? -1 : (Z)->_mp_size > 0) #define mpf_sgn(F) ((F)->_mp_size < 0 ? -1 : (F)->_mp_size > 0) #define mpq_sgn(Q) ((Q)->_mp_num._mp_size < 0 ? -1 : (Q)->_mp_num._mp_size > 0) /* Allow direct user access to numerator and denominator of a mpq_t object. */ #define mpq_numref(Q) (&((Q)->_mp_num)) #define mpq_denref(Q) (&((Q)->_mp_den)) /* When using GCC, optimize certain common comparisons. */ #if defined (__GNUC__) #define mpz_cmp_ui(Z,UI) \ (__builtin_constant_p (UI) && (UI) == 0 \ ? mpz_sgn (Z) : mpz_cmp_ui (Z,UI)) #define mpz_cmp_si(Z,UI) \ (__builtin_constant_p (UI) && (UI) == 0 ? mpz_sgn (Z) \ : __builtin_constant_p (UI) && (UI) > 0 ? mpz_cmp_ui (Z,UI) \ : mpz_cmp_si (Z,UI)) #define mpq_cmp_ui(Q,NUI,DUI) \ (__builtin_constant_p (NUI) && (NUI) == 0 \ ? mpq_sgn (Q) : mpq_cmp_ui (Q,NUI,DUI)) #endif #define mpn_divmod(qp,np,nsize,dp,dsize) mpn_divrem (qp,0,np,nsize,dp,dsize) #if 0 #define mpn_divmod_1(qp,np,nsize,dlimb) mpn_divrem_1 (qp,0,np,nsize,dlimb) #endif /* Compatibility with GMP 1. */ #define mpz_mdiv mpz_fdiv_q #define mpz_mdivmod mpz_fdiv_qr #define mpz_mmod mpz_fdiv_r #define mpz_mdiv_ui mpz_fdiv_q_ui #define mpz_mdivmod_ui(q,r,n,d) \ ((r == 0) ? mpz_fdiv_q_ui (q,n,d) : mpz_fdiv_qr_ui (q,r,n,d)) #define mpz_mmod_ui(r,n,d) \ ((r == 0) ? mpz_fdiv_ui (n,d) : mpz_fdiv_r_ui (r,n,d)) /* Useful synonyms, but not quite compatible with GMP 1. */ #define mpz_div mpz_fdiv_q #define mpz_divmod mpz_fdiv_qr #define mpz_div_ui mpz_fdiv_q_ui #define mpz_divmod_ui mpz_fdiv_qr_ui #define mpz_mod_ui mpz_fdiv_r_ui #define mpz_div_2exp mpz_fdiv_q_2exp #define mpz_mod_2exp mpz_fdiv_r_2exp #define __GNU_MP_VERSION 2 #define __GNU_MP_VERSION_MINOR 0 #define __GMP_H__ #endif /* __GMP_H__ */ SHAR_EOF fi # end of overwriting check if test -f 'info.h' then echo shar: will not over-write existing file "'info.h'" else cat << "SHAR_EOF" > 'info.h' #define MAXVAL "100000000000000000000000" /*maximum # of independent streams*/ struct MP_ARRAY_TYPE { long size; MP_INT *list; }; #define OP_SIZE 2 #define RNGBITS 3 #define SHIFT 29 #define MASK 0X1FFFFFFF #define MAGIC_NUM "153722867280912930" #define MAGIC_DEN "27097804800000000" #define PRIM 37 #define POWER_N 61 /* Values pertain to this particular parameter: 2^61-1 as modulus*/ struct MP_ARRAY_TYPE init_factors() { struct MP_ARRAY_TYPE factors; factors.size = 12; factors.list = malloc(12 * sizeof(MP_INT)); mpz_init_set_str(&(factors.list[0]), "2", 10); mpz_init_set_str(&(factors.list[1]), "3", 10); mpz_init_set_str(&(factors.list[2]), "5", 10); mpz_init_set_str(&(factors.list[3]), "7", 10); mpz_init_set_str(&(factors.list[4]), "11", 10); mpz_init_set_str(&(factors.list[5]), "13", 10); mpz_init_set_str(&(factors.list[6]), "31", 10); mpz_init_set_str(&(factors.list[7]), "41", 10); mpz_init_set_str(&(factors.list[8]), "61", 10); mpz_init_set_str(&(factors.list[9]), "151", 10); mpz_init_set_str(&(factors.list[10]),"331", 10); mpz_init_set_str(&(factors.list[11]),"1321", 10); return (factors); } SHAR_EOF fi # end of overwriting check if test -f 'longlong.h' then echo shar: will not over-write existing file "'longlong.h'" else cat << "SHAR_EOF" > 'longlong.h' /* longlong.h -- definitions for mixed size 32/64 bit arithmetic. Copyright (C) 1991, 1992, 1993, 1994, 1996 Free Software Foundation, Inc. This file is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This file 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 Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this file; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* You have to define the following before including this file: UWtype -- An unsigned type, default type for operations (typically a "word") UHWtype -- An unsigned type, at least half the size of UWtype. UDWtype -- An unsigned type, at least twice as large a UWtype W_TYPE_SIZE -- size in bits of UWtype SItype, USItype -- Signed and unsigned 32 bit types. DItype, UDItype -- Signed and unsigned 64 bit types. On a 32 bit machine UWtype should typically be USItype; on a 64 bit machine, UWtype should typically be UDItype. */ #ifdef SGI #define UWtype unsigned int #define UHWtype unsigned int #define UDWtype unsigned long #define W_TYPE_SIZE 32 #define SItype int #define USItype unsigned int #define DItype long #define UDItype unsigned long #elif defined(CONVEX) #define UWtype unsigned int #define UHWtype unsigned int #define UDWtype unsigned long long #define W_TYPE_SIZE 32 #define SItype int #define USItype unsigned int #define DItype long long #define UDItype unsigned long long #elif defined(SP2) #define UWtype unsigned long #define UHWtype unsigned int #define UDWtype unsigned long long #define W_TYPE_SIZE 32 #define SItype long #define USItype unsigned long #define DItype long long #define UDItype unsigned long long #else #define UWtype unsigned long #define UHWtype unsigned int #define UDWtype unsigned long #define W_TYPE_SIZE 32 #define SItype int #define USItype unsigned int #define DItype int #define UDItype unsigned int #endif #define __BITS4 (W_TYPE_SIZE / 4) #define __ll_B ((UWtype) 1 << (W_TYPE_SIZE / 2)) #define __ll_lowpart(t) ((UWtype) (t) & (__ll_B - 1)) #define __ll_highpart(t) ((UWtype) (t) >> (W_TYPE_SIZE / 2)) /* This is used to make sure no undesirable sharing between different libraries that use this file takes place. */ #ifndef __MPN #define __MPN(x) __##x #endif /* Define auxiliary asm macros. 1) umul_ppmm(high_prod, low_prod, multipler, multiplicand) multiplies two UWtype integers MULTIPLER and MULTIPLICAND, and generates a two UWtype word product in HIGH_PROD and LOW_PROD. 2) __umulsidi3(a,b) multiplies two UWtype integers A and B, and returns a UDWtype product. This is just a variant of umul_ppmm. 3) udiv_qrnnd(quotient, remainder, high_numerator, low_numerator, denominator) divides a UDWtype, composed by the UWtype integers HIGH_NUMERATOR and LOW_NUMERATOR, by DENOMINATOR and places the quotient in QUOTIENT and the remainder in REMAINDER. HIGH_NUMERATOR must be less than DENOMINATOR for correct operation. If, in addition, the most significant bit of DENOMINATOR must be 1, then the pre-processor symbol UDIV_NEEDS_NORMALIZATION is defined to 1. 4) sdiv_qrnnd(quotient, remainder, high_numerator, low_numerator, denominator). Like udiv_qrnnd but the numbers are signed. The quotient is rounded towards 0. 5) count_leading_zeros(count, x) counts the number of zero-bits from the msb to the first non-zero bit in the UWtype X. This is the number of steps X needs to be shifted left to set the msb. Undefined for X == 0, unless the symbol COUNT_LEADING_ZEROS_0 is defined to some value. 6) count_trailing_zeros(count, x) like count_leading_zeros, but counts from the least significant end. 7) add_ssaaaa(high_sum, low_sum, high_addend_1, low_addend_1, high_addend_2, low_addend_2) adds two UWtype integers, composed by HIGH_ADDEND_1 and LOW_ADDEND_1, and HIGH_ADDEND_2 and LOW_ADDEND_2 respectively. The result is placed in HIGH_SUM and LOW_SUM. Overflow (i.e. carry out) is not stored anywhere, and is lost. 8) sub_ddmmss(high_difference, low_difference, high_minuend, low_minuend, high_subtrahend, low_subtrahend) subtracts two two-word UWtype integers, composed by HIGH_MINUEND_1 and LOW_MINUEND_1, and HIGH_SUBTRAHEND_2 and LOW_SUBTRAHEND_2 respectively. The result is placed in HIGH_DIFFERENCE and LOW_DIFFERENCE. Overflow (i.e. carry out) is not stored anywhere, and is lost. If any of these macros are left undefined for a particular CPU, C macros are used. */ /* The CPUs come in alphabetical order below. Please add support for more CPUs here, or improve the current support for the CPUs below! */ #ifdef HP #define NO_ASM /* gives incorrect results on the HP */ #endif #if defined (__GNUC__) && !defined (NO_ASM) /* We sometimes need to clobber "cc" with gcc2, but that would not be understood by gcc1. Use cpp to avoid major code duplication. */ #if __GNUC__ < 2 #define __CLOBBER_CC #define __AND_CLOBBER_CC #else /* __GNUC__ >= 2 */ #define __CLOBBER_CC : "cc" #define __AND_CLOBBER_CC , "cc" #endif /* __GNUC__ < 2 */ #if (defined (__a29k__) || defined (_AM29K)) && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ __asm__ ("add %1,%4,%5 addc %0,%2,%3" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "%r" ((USItype)(ah)), \ "rI" ((USItype)(bh)), \ "%r" ((USItype)(al)), \ "rI" ((USItype)(bl))) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ __asm__ ("sub %1,%4,%5 subc %0,%2,%3" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "r" ((USItype)(ah)), \ "rI" ((USItype)(bh)), \ "r" ((USItype)(al)), \ "rI" ((USItype)(bl))) #define umul_ppmm(xh, xl, m0, m1) \ do { \ USItype __m0 = (m0), __m1 = (m1); \ __asm__ ("multiplu %0,%1,%2" \ : "=r" ((USItype)(xl)) \ : "r" (__m0), \ "r" (__m1)); \ __asm__ ("multmu %0,%1,%2" \ : "=r" ((USItype)(xh)) \ : "r" (__m0), \ "r" (__m1)); \ } while (0) #define udiv_qrnnd(q, r, n1, n0, d) \ __asm__ ("dividu %0,%3,%4" \ : "=r" ((USItype)(q)), \ "=q" ((USItype)(r)) \ : "1" ((USItype)(n1)), \ "r" ((USItype)(n0)), \ "r" ((USItype)(d))) #define count_leading_zeros(count, x) \ __asm__ ("clz %0,%1" \ : "=r" ((USItype)(count)) \ : "r" ((USItype)(x))) #define COUNT_LEADING_ZEROS_0 32 #endif /* __a29k__ */ #if defined (__alpha) && W_TYPE_SIZE == 64 #define umul_ppmm(ph, pl, m0, m1) \ do { \ UDItype __m0 = (m0), __m1 = (m1); \ __asm__ ("umulh %r1,%2,%0" \ : "=r" ((UDItype) ph) \ : "%rJ" (__m0), \ "rI" (__m1)); \ (pl) = __m0 * __m1; \ } while (0) #define UMUL_TIME 46 #ifndef LONGLONG_STANDALONE #define udiv_qrnnd(q, r, n1, n0, d) \ do { UDItype __r; \ (q) = __udiv_qrnnd (&__r, (n1), (n0), (d)); \ (r) = __r; \ } while (0) extern UDItype __udiv_qrnnd (); #define UDIV_TIME 220 #endif /* LONGLONG_STANDALONE */ #endif /* __alpha */ #if defined (__arm__) && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ __asm__ ("adds %1, %4, %5 adc %0, %2, %3" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "%r" ((USItype)(ah)), \ "rI" ((USItype)(bh)), \ "%r" ((USItype)(al)), \ "rI" ((USItype)(bl))) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ __asm__ ("subs %1, %4, %5 sbc %0, %2, %3" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "r" ((USItype)(ah)), \ "rI" ((USItype)(bh)), \ "r" ((USItype)(al)), \ "rI" ((USItype)(bl))) #define umul_ppmm(xh, xl, a, b) \ __asm__ ("%@ Inlined umul_ppmm mov %|r0, %2, lsr #16 mov %|r2, %3, lsr #16 bic %|r1, %2, %|r0, lsl #16 bic %|r2, %3, %|r2, lsl #16 mul %1, %|r1, %|r2 mul %|r2, %|r0, %|r2 mul %|r1, %0, %|r1 mul %0, %|r0, %0 adds %|r1, %|r2, %|r1 addcs %0, %0, #65536 adds %1, %1, %|r1, lsl #16 adc %0, %0, %|r1, lsr #16" \ : "=&r" ((USItype)(xh)), \ "=r" ((USItype)(xl)) \ : "r" ((USItype)(a)), \ "r" ((USItype)(b)) \ : "r0", "r1", "r2") #define UMUL_TIME 20 #define UDIV_TIME 100 #endif /* __arm__ */ #if defined (__clipper__) && W_TYPE_SIZE == 32 #define umul_ppmm(w1, w0, u, v) \ ({union {UDItype __ll; \ struct {USItype __l, __h;} __i; \ } __xx; \ __asm__ ("mulwux %2,%0" \ : "=r" (__xx.__ll) \ : "%0" ((USItype)(u)), \ "r" ((USItype)(v))); \ (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;}) #define smul_ppmm(w1, w0, u, v) \ ({union {DItype __ll; \ struct {SItype __l, __h;} __i; \ } __xx; \ __asm__ ("mulwx %2,%0" \ : "=r" (__xx.__ll) \ : "%0" ((SItype)(u)), \ "r" ((SItype)(v))); \ (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;}) #define __umulsidi3(u, v) \ ({UDItype __w; \ __asm__ ("mulwux %2,%0" \ : "=r" (__w) \ : "%0" ((USItype)(u)), \ "r" ((USItype)(v))); \ __w; }) #endif /* __clipper__ */ #if defined (__gmicro__) && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ __asm__ ("add.w %5,%1 addx %3,%0" \ : "=g" ((USItype)(sh)), \ "=&g" ((USItype)(sl)) \ : "%0" ((USItype)(ah)), \ "g" ((USItype)(bh)), \ "%1" ((USItype)(al)), \ "g" ((USItype)(bl))) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ __asm__ ("sub.w %5,%1 subx %3,%0" \ : "=g" ((USItype)(sh)), \ "=&g" ((USItype)(sl)) \ : "0" ((USItype)(ah)), \ "g" ((USItype)(bh)), \ "1" ((USItype)(al)), \ "g" ((USItype)(bl))) #define umul_ppmm(ph, pl, m0, m1) \ __asm__ ("mulx %3,%0,%1" \ : "=g" ((USItype)(ph)), \ "=r" ((USItype)(pl)) \ : "%0" ((USItype)(m0)), \ "g" ((USItype)(m1))) #define udiv_qrnnd(q, r, nh, nl, d) \ __asm__ ("divx %4,%0,%1" \ : "=g" ((USItype)(q)), \ "=r" ((USItype)(r)) \ : "1" ((USItype)(nh)), \ "0" ((USItype)(nl)), \ "g" ((USItype)(d))) #define count_leading_zeros(count, x) \ __asm__ ("bsch/1 %1,%0" \ : "=g" (count) \ : "g" ((USItype)(x)), \ "0" ((USItype)0)) #endif #if defined (__hppa) && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ __asm__ ("add %4,%5,%1 addc %2,%3,%0" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "%rM" ((USItype)(ah)), \ "rM" ((USItype)(bh)), \ "%rM" ((USItype)(al)), \ "rM" ((USItype)(bl))) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ __asm__ ("sub %4,%5,%1 subb %2,%3,%0" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "rM" ((USItype)(ah)), \ "rM" ((USItype)(bh)), \ "rM" ((USItype)(al)), \ "rM" ((USItype)(bl))) #if defined (_PA_RISC1_1) #define umul_ppmm(wh, wl, u, v) \ do { \ union {UDItype __ll; \ struct {USItype __h, __l;} __i; \ } __xx; \ __asm__ ("xmpyu %1,%2,%0" \ : "=*f" (__xx.__ll) \ : "*f" ((USItype)(u)), \ "*f" ((USItype)(v))); \ (wh) = __xx.__i.__h; \ (wl) = __xx.__i.__l; \ } while (0) #define UMUL_TIME 8 #define UDIV_TIME 60 #else #define UMUL_TIME 40 #define UDIV_TIME 80 #endif #ifndef LONGLONG_STANDALONE #define udiv_qrnnd(q, r, n1, n0, d) \ do { USItype __r; \ (q) = __udiv_qrnnd (&__r, (n1), (n0), (d)); \ (r) = __r; \ } while (0) extern USItype __udiv_qrnnd (); #endif /* LONGLONG_STANDALONE */ #define count_leading_zeros(count, x) \ do { \ USItype __tmp; \ __asm__ ( \ "ldi 1,%0 extru,= %1,15,16,%%r0 ; Bits 31..16 zero? extru,tr %1,15,16,%1 ; No. Shift down, skip add. ldo 16(%0),%0 ; Yes. Perform add. extru,= %1,23,8,%%r0 ; Bits 15..8 zero? extru,tr %1,23,8,%1 ; No. Shift down, skip add. ldo 8(%0),%0 ; Yes. Perform add. extru,= %1,27,4,%%r0 ; Bits 7..4 zero? extru,tr %1,27,4,%1 ; No. Shift down, skip add. ldo 4(%0),%0 ; Yes. Perform add. extru,= %1,29,2,%%r0 ; Bits 3..2 zero? extru,tr %1,29,2,%1 ; No. Shift down, skip add. ldo 2(%0),%0 ; Yes. Perform add. extru %1,30,1,%1 ; Extract bit 1. sub %0,%1,%0 ; Subtract it. " : "=r" (count), "=r" (__tmp) : "1" (x)); \ } while (0) #endif /* hppa */ #if (defined (__i370__) || defined (__mvs__)) && W_TYPE_SIZE == 32 #define umul_ppmm(xh, xl, m0, m1) \ do { \ union {UDItype __ll; \ struct {USItype __h, __l;} __i; \ } __xx; \ USItype __m0 = (m0), __m1 = (m1); \ __asm__ ("mr %0,%3" \ : "=r" (__xx.__i.__h), \ "=r" (__xx.__i.__l) \ : "%1" (__m0), \ "r" (__m1)); \ (xh) = __xx.__i.__h; (xl) = __xx.__i.__l; \ (xh) += ((((SItype) __m0 >> 31) & __m1) \ + (((SItype) __m1 >> 31) & __m0)); \ } while (0) #define smul_ppmm(xh, xl, m0, m1) \ do { \ union {DItype __ll; \ struct {USItype __h, __l;} __i; \ } __xx; \ __asm__ ("mr %0,%3" \ : "=r" (__xx.__i.__h), \ "=r" (__xx.__i.__l) \ : "%1" (m0), \ "r" (m1)); \ (xh) = __xx.__i.__h; (xl) = __xx.__i.__l; \ } while (0) #define sdiv_qrnnd(q, r, n1, n0, d) \ do { \ union {DItype __ll; \ struct {USItype __h, __l;} __i; \ } __xx; \ __xx.__i.__h = n1; __xx.__i.__l = n0; \ __asm__ ("dr %0,%2" \ : "=r" (__xx.__ll) \ : "0" (__xx.__ll), "r" (d)); \ (q) = __xx.__i.__l; (r) = __xx.__i.__h; \ } while (0) #endif #if (defined (__i386__) || defined (__i486__)) && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ __asm__ ("addl %5,%1 adcl %3,%0" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "%0" ((USItype)(ah)), \ "g" ((USItype)(bh)), \ "%1" ((USItype)(al)), \ "g" ((USItype)(bl))) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ __asm__ ("subl %5,%1 sbbl %3,%0" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "0" ((USItype)(ah)), \ "g" ((USItype)(bh)), \ "1" ((USItype)(al)), \ "g" ((USItype)(bl))) #define umul_ppmm(w1, w0, u, v) \ __asm__ ("mull %3" \ : "=a" ((USItype)(w0)), \ "=d" ((USItype)(w1)) \ : "%0" ((USItype)(u)), \ "rm" ((USItype)(v))) #define udiv_qrnnd(q, r, n1, n0, d) \ __asm__ ("divl %4" \ : "=a" ((USItype)(q)), \ "=d" ((USItype)(r)) \ : "0" ((USItype)(n0)), \ "1" ((USItype)(n1)), \ "rm" ((USItype)(d))) #define count_leading_zeros(count, x) \ do { \ USItype __cbtmp; \ __asm__ ("bsrl %1,%0" \ : "=r" (__cbtmp) : "rm" ((USItype)(x))); \ (count) = __cbtmp ^ 31; \ } while (0) #define count_trailing_zeros(count, x) \ __asm__ ("bsfl %1,%0" : "=r" (count) : "rm" ((USItype)(x))) #ifndef UMUL_TIME #define UMUL_TIME 40 #endif #ifndef UDIV_TIME #define UDIV_TIME 40 #endif #endif /* 80x86 */ #if defined (__i860__) && W_TYPE_SIZE == 32 #define rshift_rhlc(r,h,l,c) \ __asm__ ("shr %3,r0,r0\;shrd %1,%2,%0" \ "=r" (r) : "r" (h), "r" (l), "rn" (c)) #endif /* i860 */ #if defined (__i960__) && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ __asm__ ("cmpo 1,0\;addc %5,%4,%1\;addc %3,%2,%0" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "%dI" ((USItype)(ah)), \ "dI" ((USItype)(bh)), \ "%dI" ((USItype)(al)), \ "dI" ((USItype)(bl))) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ __asm__ ("cmpo 0,0\;subc %5,%4,%1\;subc %3,%2,%0" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "dI" ((USItype)(ah)), \ "dI" ((USItype)(bh)), \ "dI" ((USItype)(al)), \ "dI" ((USItype)(bl))) #define umul_ppmm(w1, w0, u, v) \ ({union {UDItype __ll; \ struct {USItype __l, __h;} __i; \ } __xx; \ __asm__ ("emul %2,%1,%0" \ : "=d" (__xx.__ll) \ : "%dI" ((USItype)(u)), \ "dI" ((USItype)(v))); \ (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;}) #define __umulsidi3(u, v) \ ({UDItype __w; \ __asm__ ("emul %2,%1,%0" \ : "=d" (__w) \ : "%dI" ((USItype)(u)), \ "dI" ((USItype)(v))); \ __w; }) #define udiv_qrnnd(q, r, nh, nl, d) \ do { \ union {UDItype __ll; \ struct {USItype __l, __h;} __i; \ } __nn; \ __nn.__i.__h = (nh); __nn.__i.__l = (nl); \ __asm__ ("ediv %d,%n,%0" \ : "=d" (__rq.__ll) \ : "dI" (__nn.__ll), \ "dI" ((USItype)(d))); \ (r) = __rq.__i.__l; (q) = __rq.__i.__h; \ } while (0) #define count_leading_zeros(count, x) \ do { \ USItype __cbtmp; \ __asm__ ("scanbit %1,%0" \ : "=r" (__cbtmp) \ : "r" ((USItype)(x))); \ (count) = __cbtmp ^ 31; \ } while (0) #define COUNT_LEADING_ZEROS_0 (-32) /* sic */ #if defined (__i960mx) /* what is the proper symbol to test??? */ #define rshift_rhlc(r,h,l,c) \ do { \ union {UDItype __ll; \ struct {USItype __l, __h;} __i; \ } __nn; \ __nn.__i.__h = (h); __nn.__i.__l = (l); \ __asm__ ("shre %2,%1,%0" \ : "=d" (r) : "dI" (__nn.__ll), "dI" (c)); \ } #endif /* i960mx */ #endif /* i960 */ #if (defined (__mc68000__) || defined (__mc68020__) || defined (__NeXT__) || defined(mc68020)) && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ __asm__ ("add%.l %5,%1 addx%.l %3,%0" \ : "=d" ((USItype)(sh)), \ "=&d" ((USItype)(sl)) \ : "%0" ((USItype)(ah)), \ "d" ((USItype)(bh)), \ "%1" ((USItype)(al)), \ "g" ((USItype)(bl))) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ __asm__ ("sub%.l %5,%1 subx%.l %3,%0" \ : "=d" ((USItype)(sh)), \ "=&d" ((USItype)(sl)) \ : "0" ((USItype)(ah)), \ "d" ((USItype)(bh)), \ "1" ((USItype)(al)), \ "g" ((USItype)(bl))) #if (defined (__mc68020__) || defined (__NeXT__) || defined(mc68020)) #define umul_ppmm(w1, w0, u, v) \ __asm__ ("mulu%.l %3,%1:%0" \ : "=d" ((USItype)(w0)), \ "=d" ((USItype)(w1)) \ : "%0" ((USItype)(u)), \ "dmi" ((USItype)(v))) #define UMUL_TIME 45 #define udiv_qrnnd(q, r, n1, n0, d) \ __asm__ ("divu%.l %4,%1:%0" \ : "=d" ((USItype)(q)), \ "=d" ((USItype)(r)) \ : "0" ((USItype)(n0)), \ "1" ((USItype)(n1)), \ "dmi" ((USItype)(d))) #define UDIV_TIME 90 #define sdiv_qrnnd(q, r, n1, n0, d) \ __asm__ ("divs%.l %4,%1:%0" \ : "=d" ((USItype)(q)), \ "=d" ((USItype)(r)) \ : "0" ((USItype)(n0)), \ "1" ((USItype)(n1)), \ "dmi" ((USItype)(d))) #define count_leading_zeros(count, x) \ __asm__ ("bfffo %1{%b2:%b2},%0" \ : "=d" ((USItype)(count)) \ : "od" ((USItype)(x)), "n" (0)) #define COUNT_LEADING_ZEROS_0 32 #else /* not mc68020 */ #define umul_ppmm(xh, xl, a, b) \ do { USItype __umul_tmp1, __umul_tmp2; \ __asm__ ("| Inlined umul_ppmm move%.l %5,%3 move%.l %2,%0 move%.w %3,%1 swap %3 swap %0 mulu %2,%1 mulu %3,%0 mulu %2,%3 swap %2 mulu %5,%2 add%.l %3,%2 jcc 1f add%.l %#0x10000,%0 1: move%.l %2,%3 clr%.w %2 swap %2 swap %3 clr%.w %3 add%.l %3,%1 addx%.l %2,%0 | End inlined umul_ppmm" \ : "=&d" ((USItype)(xh)), "=&d" ((USItype)(xl)), \ "=d" (__umul_tmp1), "=&d" (__umul_tmp2) \ : "%2" ((USItype)(a)), "d" ((USItype)(b))); \ } while (0) #define UMUL_TIME 100 #define UDIV_TIME 400 #endif /* not mc68020 */ #endif /* mc68000 */ #if defined (__m88000__) && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ __asm__ ("addu.co %1,%r4,%r5 addu.ci %0,%r2,%r3" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "%rJ" ((USItype)(ah)), \ "rJ" ((USItype)(bh)), \ "%rJ" ((USItype)(al)), \ "rJ" ((USItype)(bl))) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ __asm__ ("subu.co %1,%r4,%r5 subu.ci %0,%r2,%r3" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "rJ" ((USItype)(ah)), \ "rJ" ((USItype)(bh)), \ "rJ" ((USItype)(al)), \ "rJ" ((USItype)(bl))) #define count_leading_zeros(count, x) \ do { \ USItype __cbtmp; \ __asm__ ("ff1 %0,%1" \ : "=r" (__cbtmp) \ : "r" ((USItype)(x))); \ (count) = __cbtmp ^ 31; \ } while (0) #define COUNT_LEADING_ZEROS_0 63 /* sic */ #if defined (__m88110__) #define umul_ppmm(wh, wl, u, v) \ do { \ union {UDItype __ll; \ struct {USItype __h, __l;} __i; \ } __xx; \ __asm__ ("mulu.d %0,%1,%2" \ : "=r" (__xx.__ll) \ : "r" ((USItype)(u)), \ "r" ((USItype)(v))); \ (wh) = __xx.__i.__h; \ (wl) = __xx.__i.__l; \ } while (0) #define udiv_qrnnd(q, r, n1, n0, d) \ ({union {UDItype __ll; \ struct {USItype __h, __l;} __i; \ } __xx; \ USItype __q; \ __xx.__i.__h = (n1); __xx.__i.__l = (n0); \ __asm__ ("divu.d %0,%1,%2" \ : "=r" (__q) \ : "r" (__xx.__ll), \ "r" ((USItype)(d))); \ (r) = (n0) - __q * (d); (q) = __q; }) #define UMUL_TIME 5 #define UDIV_TIME 25 #else #define UMUL_TIME 17 #define UDIV_TIME 150 #endif /* __m88110__ */ #endif /* __m88000__ */ #if defined (__mips__) && W_TYPE_SIZE == 32 #if __GNUC__ > 2 || __GNUC_MINOR__ >= 7 #define umul_ppmm(w1, w0, u, v) \ __asm__ ("multu %2,%3" \ : "=l" ((USItype)(w0)), \ "=h" ((USItype)(w1)) \ : "d" ((USItype)(u)), \ "d" ((USItype)(v))) #else #define umul_ppmm(w1, w0, u, v) \ __asm__ ("multu %2,%3 mflo %0 mfhi %1" \ : "=d" ((USItype)(w0)), \ "=d" ((USItype)(w1)) \ : "d" ((USItype)(u)), \ "d" ((USItype)(v))) #endif #define UMUL_TIME 10 #define UDIV_TIME 100 #endif /* __mips__ */ #if (defined (__mips) && __mips >= 3) && W_TYPE_SIZE == 64 #if __GNUC__ > 2 || __GNUC_MINOR__ >= 7 #define umul_ppmm(w1, w0, u, v) \ __asm__ ("dmultu %2,%3" \ : "=l" ((UDItype)(w0)), \ "=h" ((UDItype)(w1)) \ : "d" ((UDItype)(u)), \ "d" ((UDItype)(v))) #else #define umul_ppmm(w1, w0, u, v) \ __asm__ ("dmultu %2,%3 mflo %0 mfhi %1" \ : "=d" ((UDItype)(w0)), \ "=d" ((UDItype)(w1)) \ : "d" ((UDItype)(u)), \ "d" ((UDItype)(v))) #endif #define UMUL_TIME 20 #define UDIV_TIME 140 #endif /* __mips__ */ #if defined (__ns32000__) && W_TYPE_SIZE == 32 #define umul_ppmm(w1, w0, u, v) \ ({union {UDItype __ll; \ struct {USItype __l, __h;} __i; \ } __xx; \ __asm__ ("meid %2,%0" \ : "=g" (__xx.__ll) \ : "%0" ((USItype)(u)), \ "g" ((USItype)(v))); \ (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;}) #define __umulsidi3(u, v) \ ({UDItype __w; \ __asm__ ("meid %2,%0" \ : "=g" (__w) \ : "%0" ((USItype)(u)), \ "g" ((USItype)(v))); \ __w; }) #define udiv_qrnnd(q, r, n1, n0, d) \ ({union {UDItype __ll; \ struct {USItype __l, __h;} __i; \ } __xx; \ __xx.__i.__h = (n1); __xx.__i.__l = (n0); \ __asm__ ("deid %2,%0" \ : "=g" (__xx.__ll) \ : "0" (__xx.__ll), \ "g" ((USItype)(d))); \ (r) = __xx.__i.__l; (q) = __xx.__i.__h; }) #define count_trailing_zeros(count,x) \ do { __asm__ ("ffsd %2,%0" \ : "=r" ((USItype) (count)) \ : "0" ((USItype) 0), \ "r" ((USItype) (x))); \ } while (0) #endif /* __ns32000__ */ #if (defined (_ARCH_PPC) || defined (_IBMR2)) && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ do { \ if (__builtin_constant_p (bh) && (bh) == 0) \ __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{aze|addze} %0,%2" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "%r" ((USItype)(ah)), \ "%r" ((USItype)(al)), \ "rI" ((USItype)(bl))); \ else if (__builtin_constant_p (bh) && (bh) ==~(USItype) 0) \ __asm__ ("{a%I4|add%I4c} %1,%3,%4\n\t{ame|addme} %0,%2" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "%r" ((USItype)(ah)), \ "%r" ((USItype)(al)), \ "rI" ((USItype)(bl))); \ else \ __asm__ ("{a%I5|add%I5c} %1,%4,%5\n\t{ae|adde} %0,%2,%3" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "%r" ((USItype)(ah)), \ "r" ((USItype)(bh)), \ "%r" ((USItype)(al)), \ "rI" ((USItype)(bl))); \ } while (0) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ do { \ if (__builtin_constant_p (ah) && (ah) == 0) \ __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{sfze|subfze} %0,%2" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "r" ((USItype)(bh)), \ "rI" ((USItype)(al)), \ "r" ((USItype)(bl))); \ else if (__builtin_constant_p (ah) && (ah) ==~(USItype) 0) \ __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{sfme|subfme} %0,%2" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "r" ((USItype)(bh)), \ "rI" ((USItype)(al)), \ "r" ((USItype)(bl))); \ else if (__builtin_constant_p (bh) && (bh) == 0) \ __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{ame|addme} %0,%2" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "r" ((USItype)(ah)), \ "rI" ((USItype)(al)), \ "r" ((USItype)(bl))); \ else if (__builtin_constant_p (bh) && (bh) ==~(USItype) 0) \ __asm__ ("{sf%I3|subf%I3c} %1,%4,%3\n\t{aze|addze} %0,%2" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "r" ((USItype)(ah)), \ "rI" ((USItype)(al)), \ "r" ((USItype)(bl))); \ else \ __asm__ ("{sf%I4|subf%I4c} %1,%5,%4\n\t{sfe|subfe} %0,%3,%2" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "r" ((USItype)(ah)), \ "r" ((USItype)(bh)), \ "rI" ((USItype)(al)), \ "r" ((USItype)(bl))); \ } while (0) #define count_leading_zeros(count, x) \ __asm__ ("{cntlz|cntlzw} %0,%1" \ : "=r" ((USItype)(count)) \ : "r" ((USItype)(x))) #define COUNT_LEADING_ZEROS_0 32 #if defined (_ARCH_PPC) #define umul_ppmm(ph, pl, m0, m1) \ do { \ USItype __m0 = (m0), __m1 = (m1); \ __asm__ ("mulhwu %0,%1,%2" \ : "=r" ((USItype) ph) \ : "%r" (__m0), \ "r" (__m1)); \ (pl) = __m0 * __m1; \ } while (0) #define UMUL_TIME 15 #define smul_ppmm(ph, pl, m0, m1) \ do { \ SItype __m0 = (m0), __m1 = (m1); \ __asm__ ("mulhw %0,%1,%2" \ : "=r" ((SItype) ph) \ : "%r" (__m0), \ "r" (__m1)); \ (pl) = __m0 * __m1; \ } while (0) #define SMUL_TIME 14 #define UDIV_TIME 120 #else #define umul_ppmm(xh, xl, m0, m1) \ do { \ USItype __m0 = (m0), __m1 = (m1); \ __asm__ ("mul %0,%2,%3" \ : "=r" ((USItype)(xh)), \ "=q" ((USItype)(xl)) \ : "r" (__m0), \ "r" (__m1)); \ (xh) += ((((SItype) __m0 >> 31) & __m1) \ + (((SItype) __m1 >> 31) & __m0)); \ } while (0) #define UMUL_TIME 8 #define smul_ppmm(xh, xl, m0, m1) \ __asm__ ("mul %0,%2,%3" \ : "=r" ((SItype)(xh)), \ "=q" ((SItype)(xl)) \ : "r" (m0), \ "r" (m1)) #define SMUL_TIME 4 #define sdiv_qrnnd(q, r, nh, nl, d) \ __asm__ ("div %0,%2,%4" \ : "=r" ((SItype)(q)), "=q" ((SItype)(r)) \ : "r" ((SItype)(nh)), "1" ((SItype)(nl)), "r" ((SItype)(d))) #define UDIV_TIME 100 #endif #endif /* Power architecture variants. */ #if defined (__pyr__) && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ __asm__ ("addw %5,%1 addwc %3,%0" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "%0" ((USItype)(ah)), \ "g" ((USItype)(bh)), \ "%1" ((USItype)(al)), \ "g" ((USItype)(bl))) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ __asm__ ("subw %5,%1 subwb %3,%0" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "0" ((USItype)(ah)), \ "g" ((USItype)(bh)), \ "1" ((USItype)(al)), \ "g" ((USItype)(bl))) /* This insn works on Pyramids with AP, XP, or MI CPUs, but not with SP. */ #define umul_ppmm(w1, w0, u, v) \ ({union {UDItype __ll; \ struct {USItype __h, __l;} __i; \ } __xx; \ __asm__ ("movw %1,%R0 uemul %2,%0" \ : "=&r" (__xx.__ll) \ : "g" ((USItype) (u)), \ "g" ((USItype)(v))); \ (w1) = __xx.__i.__h; (w0) = __xx.__i.__l;}) #endif /* __pyr__ */ #if defined (__ibm032__) /* RT/ROMP */ && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ __asm__ ("a %1,%5 ae %0,%3" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "%0" ((USItype)(ah)), \ "r" ((USItype)(bh)), \ "%1" ((USItype)(al)), \ "r" ((USItype)(bl))) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ __asm__ ("s %1,%5 se %0,%3" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "0" ((USItype)(ah)), \ "r" ((USItype)(bh)), \ "1" ((USItype)(al)), \ "r" ((USItype)(bl))) #define umul_ppmm(ph, pl, m0, m1) \ do { \ USItype __m0 = (m0), __m1 = (m1); \ __asm__ ( \ "s r2,r2 mts r10,%2 m r2,%3 m r2,%3 m r2,%3 m r2,%3 m r2,%3 m r2,%3 m r2,%3 m r2,%3 m r2,%3 m r2,%3 m r2,%3 m r2,%3 m r2,%3 m r2,%3 m r2,%3 m r2,%3 cas %0,r2,r0 mfs r10,%1" \ : "=r" ((USItype)(ph)), \ "=r" ((USItype)(pl)) \ : "%r" (__m0), \ "r" (__m1) \ : "r2"); \ (ph) += ((((SItype) __m0 >> 31) & __m1) \ + (((SItype) __m1 >> 31) & __m0)); \ } while (0) #define UMUL_TIME 20 #define UDIV_TIME 200 #define count_leading_zeros(count, x) \ do { \ if ((x) >= 0x10000) \ __asm__ ("clz %0,%1" \ : "=r" ((USItype)(count)) \ : "r" ((USItype)(x) >> 16)); \ else \ { \ __asm__ ("clz %0,%1" \ : "=r" ((USItype)(count)) \ : "r" ((USItype)(x))); \ (count) += 16; \ } \ } while (0) #endif /* RT/ROMP */ #if defined (__sh2__) && W_TYPE_SIZE == 32 #define umul_ppmm(w1, w0, u, v) \ __asm__ ( \ "dmulu.l %2,%3 sts macl,%1 sts mach,%0" \ : "=r" ((USItype)(w1)), \ "=r" ((USItype)(w0)) \ : "r" ((USItype)(u)), \ "r" ((USItype)(v)) \ : "macl", "mach") #define UMUL_TIME 5 #endif #if defined (__sparc__) && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ __asm__ ("addcc %r4,%5,%1 addx %r2,%3,%0" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "%rJ" ((USItype)(ah)), \ "rI" ((USItype)(bh)), \ "%rJ" ((USItype)(al)), \ "rI" ((USItype)(bl)) \ __CLOBBER_CC) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ __asm__ ("subcc %r4,%5,%1 subx %r2,%3,%0" \ : "=r" ((USItype)(sh)), \ "=&r" ((USItype)(sl)) \ : "rJ" ((USItype)(ah)), \ "rI" ((USItype)(bh)), \ "rJ" ((USItype)(al)), \ "rI" ((USItype)(bl)) \ __CLOBBER_CC) #if defined (__sparc_v8__) /* Don't match immediate range because, 1) it is not often useful, 2) the 'I' flag thinks of the range as a 13 bit signed interval, while we want to match a 13 bit interval, sign extended to 32 bits, but INTERPRETED AS UNSIGNED. */ #define umul_ppmm(w1, w0, u, v) \ __asm__ ("umul %2,%3,%1;rd %%y,%0" \ : "=r" ((USItype)(w1)), \ "=r" ((USItype)(w0)) \ : "r" ((USItype)(u)), \ "r" ((USItype)(v))) #define UMUL_TIME 5 #ifndef SUPERSPARC /* SuperSPARC's udiv only handles 53 bit dividends */ #define udiv_qrnnd(q, r, n1, n0, d) \ do { \ USItype __q; \ __asm__ ("mov %1,%%y;nop;nop;nop;udiv %2,%3,%0" \ : "=r" ((USItype)(__q)) \ : "r" ((USItype)(n1)), \ "r" ((USItype)(n0)), \ "r" ((USItype)(d))); \ (r) = (n0) - __q * (d); \ (q) = __q; \ } while (0) #define UDIV_TIME 25 #endif /* SUPERSPARC */ #else /* ! __sparc_v8__ */ #if defined (__sparclite__) /* This has hardware multiply but not divide. It also has two additional instructions scan (ffs from high bit) and divscc. */ #define umul_ppmm(w1, w0, u, v) \ __asm__ ("umul %2,%3,%1;rd %%y,%0" \ : "=r" ((USItype)(w1)), \ "=r" ((USItype)(w0)) \ : "r" ((USItype)(u)), \ "r" ((USItype)(v))) #define UMUL_TIME 5 #define udiv_qrnnd(q, r, n1, n0, d) \ __asm__ ("! Inlined udiv_qrnnd wr %%g0,%2,%%y ! Not a delayed write for sparclite tst %%g0 divscc %3,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%%g1 divscc %%g1,%4,%0 rd %%y,%1 bl,a 1f add %1,%4,%1 1: ! End of inline udiv_qrnnd" \ : "=r" ((USItype)(q)), \ "=r" ((USItype)(r)) \ : "r" ((USItype)(n1)), \ "r" ((USItype)(n0)), \ "rI" ((USItype)(d)) \ : "%g1" __AND_CLOBBER_CC) #define UDIV_TIME 37 #define count_leading_zeros(count, x) \ __asm__ ("scan %1,0,%0" \ : "=r" ((USItype)(x)) \ : "r" ((USItype)(count))) /* Early sparclites return 63 for an argument of 0, but they warn that future implementations might change this. Therefore, leave COUNT_LEADING_ZEROS_0 undefined. */ #endif /* __sparclite__ */ #endif /* __sparc_v8__ */ /* Default to sparc v7 versions of umul_ppmm and udiv_qrnnd. */ #ifndef umul_ppmm #define umul_ppmm(w1, w0, u, v) \ __asm__ ("! Inlined umul_ppmm wr %%g0,%2,%%y ! SPARC has 0-3 delay insn after a wr sra %3,31,%%g2 ! Don't move this insn and %2,%%g2,%%g2 ! Don't move this insn andcc %%g0,0,%%g1 ! Don't move this insn mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,%3,%%g1 mulscc %%g1,0,%%g1 add %%g1,%%g2,%0 rd %%y,%1" \ : "=r" ((USItype)(w1)), \ "=r" ((USItype)(w0)) \ : "%rI" ((USItype)(u)), \ "r" ((USItype)(v)) \ : "%g1", "%g2" __AND_CLOBBER_CC) #define UMUL_TIME 39 /* 39 instructions */ #endif #ifndef udiv_qrnnd #ifndef LONGLONG_STANDALONE #define udiv_qrnnd(q, r, n1, n0, d) \ do { USItype __r; \ (q) = __udiv_qrnnd (&__r, (n1), (n0), (d)); \ (r) = __r; \ } while (0) extern USItype __udiv_qrnnd (); #define UDIV_TIME 140 #endif /* LONGLONG_STANDALONE */ #endif /* udiv_qrnnd */ #endif /* __sparc__ */ #if defined (__vax__) && W_TYPE_SIZE == 32 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ __asm__ ("addl2 %5,%1 adwc %3,%0" \ : "=g" ((USItype)(sh)), \ "=&g" ((USItype)(sl)) \ : "%0" ((USItype)(ah)), \ "g" ((USItype)(bh)), \ "%1" ((USItype)(al)), \ "g" ((USItype)(bl))) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ __asm__ ("subl2 %5,%1 sbwc %3,%0" \ : "=g" ((USItype)(sh)), \ "=&g" ((USItype)(sl)) \ : "0" ((USItype)(ah)), \ "g" ((USItype)(bh)), \ "1" ((USItype)(al)), \ "g" ((USItype)(bl))) #define umul_ppmm(xh, xl, m0, m1) \ do { \ union {UDItype __ll; \ struct {USItype __l, __h;} __i; \ } __xx; \ USItype __m0 = (m0), __m1 = (m1); \ __asm__ ("emul %1,%2,$0,%0" \ : "=g" (__xx.__ll) \ : "g" (__m0), \ "g" (__m1)); \ (xh) = __xx.__i.__h; (xl) = __xx.__i.__l; \ (xh) += ((((SItype) __m0 >> 31) & __m1) \ + (((SItype) __m1 >> 31) & __m0)); \ } while (0) #define sdiv_qrnnd(q, r, n1, n0, d) \ do { \ union {DItype __ll; \ struct {SItype __l, __h;} __i; \ } __xx; \ __xx.__i.__h = n1; __xx.__i.__l = n0; \ __asm__ ("ediv %3,%2,%0,%1" \ : "=g" (q), "=g" (r) \ : "g" (__xx.ll), "g" (d)); \ } while (0) #endif /* __vax__ */ #if defined (__z8000__) && W_TYPE_SIZE == 16 #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ __asm__ ("add %H1,%H5\n\tadc %H0,%H3" \ : "=r" ((unsigned int)(sh)), \ "=&r" ((unsigned int)(sl)) \ : "%0" ((unsigned int)(ah)), \ "r" ((unsigned int)(bh)), \ "%1" ((unsigned int)(al)), \ "rQR" ((unsigned int)(bl))) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ __asm__ ("sub %H1,%H5\n\tsbc %H0,%H3" \ : "=r" ((unsigned int)(sh)), \ "=&r" ((unsigned int)(sl)) \ : "0" ((unsigned int)(ah)), \ "r" ((unsigned int)(bh)), \ "1" ((unsigned int)(al)), \ "rQR" ((unsigned int)(bl))) #define umul_ppmm(xh, xl, m0, m1) \ do { \ union {long int __ll; \ struct {unsigned int __h, __l;} __i; \ } __xx; \ unsigned int __m0 = (m0), __m1 = (m1); \ __asm__ ("mult %S0,%H3" \ : "=r" (__xx.__i.__h), \ "=r" (__xx.__i.__l) \ : "%1" (__m0), \ "rQR" (__m1)); \ (xh) = __xx.__i.__h; (xl) = __xx.__i.__l; \ (xh) += ((((signed int) __m0 >> 15) & __m1) \ + (((signed int) __m1 >> 15) & __m0)); \ } while (0) #endif /* __z8000__ */ #endif /* __GNUC__ */ #if !defined (umul_ppmm) && defined (__umulsidi3) #define umul_ppmm(ph, pl, m0, m1) \ { \ UDWtype __ll = __umulsidi3 (m0, m1); \ ph = (UWtype) (__ll >> W_TYPE_SIZE); \ pl = (UWtype) __ll; \ } #endif #if !defined (__umulsidi3) #define __umulsidi3(u, v) \ ({UWtype __hi, __lo; \ umul_ppmm (__hi, __lo, u, v); \ ((UDWtype) __hi << W_TYPE_SIZE) | __lo; }) #endif /* If this machine has no inline assembler, use C macros. */ #if !defined (add_ssaaaa) #define add_ssaaaa(sh, sl, ah, al, bh, bl) \ do { \ UWtype __x; \ __x = (al) + (bl); \ (sh) = (ah) + (bh) + (__x < (al)); \ (sl) = __x; \ } while (0) #endif #if !defined (sub_ddmmss) #define sub_ddmmss(sh, sl, ah, al, bh, bl) \ do { \ UWtype __x; \ __x = (al) - (bl); \ (sh) = (ah) - (bh) - (__x > (al)); \ (sl) = __x; \ } while (0) #endif #if !defined (umul_ppmm) #define umul_ppmm(w1, w0, u, v) \ do { \ UWtype __x0, __x1, __x2, __x3; \ UHWtype __ul, __vl, __uh, __vh; \ UWtype __u = (u), __v = (v); \ \ __ul = __ll_lowpart (__u); \ __uh = __ll_highpart (__u); \ __vl = __ll_lowpart (__v); \ __vh = __ll_highpart (__v); \ \ __x0 = (UWtype) __ul * __vl; \ __x1 = (UWtype) __ul * __vh; \ __x2 = (UWtype) __uh * __vl; \ __x3 = (UWtype) __uh * __vh; \ \ __x1 += __ll_highpart (__x0);/* this can't give carry */ \ __x1 += __x2; /* but this indeed can */ \ if (__x1 < __x2) /* did we get it? */ \ __x3 += __ll_B; /* yes, add it in the proper pos. */ \ \ (w1) = __x3 + __ll_highpart (__x1); \ (w0) = (__ll_lowpart (__x1) << W_TYPE_SIZE/2) + __ll_lowpart (__x0);\ } while (0) #endif #if !defined (umul_ppmm) #define smul_ppmm(w1, w0, u, v) \ do { \ UWtype __w1; \ UWtype __m0 = (u), __m1 = (v); \ umul_ppmm (__w1, w0, __m0, __m1); \ (w1) = __w1 - (-(__m0 >> (W_TYPE_SIZE - 1)) & __m1) \ - (-(__m1 >> (W_TYPE_SIZE - 1)) & __m0); \ } while (0) #endif /* Define this unconditionally, so it can be used for debugging. */ #define __udiv_qrnnd_c(q, r, n1, n0, d) \ do { \ UWtype __d1, __d0, __q1, __q0, __r1, __r0, __m; \ __d1 = __ll_highpart (d); \ __d0 = __ll_lowpart (d); \ \ __r1 = (n1) % __d1; \ __q1 = (n1) / __d1; \ __m = (UWtype) __q1 * __d0; \ __r1 = __r1 * __ll_B | __ll_highpart (n0); \ if (__r1 < __m) \ { \ __q1--, __r1 += (d); \ if (__r1 >= (d)) /* i.e. we didn't get carry when adding to __r1 */\ if (__r1 < __m) \ __q1--, __r1 += (d); \ } \ __r1 -= __m; \ \ __r0 = __r1 % __d1; \ __q0 = __r1 / __d1; \ __m = (UWtype) __q0 * __d0; \ __r0 = __r0 * __ll_B | __ll_lowpart (n0); \ if (__r0 < __m) \ { \ __q0--, __r0 += (d); \ if (__r0 >= (d)) \ if (__r0 < __m) \ __q0--, __r0 += (d); \ } \ __r0 -= __m; \ \ (q) = (UWtype) __q1 * __ll_B | __q0; \ (r) = __r0; \ } while (0) /* If the processor has no udiv_qrnnd but sdiv_qrnnd, go through __udiv_w_sdiv (defined in libgcc or elsewhere). */ #if !defined (udiv_qrnnd) && defined (sdiv_qrnnd) #define udiv_qrnnd(q, r, nh, nl, d) \ do { \ UWtype __r; \ (q) = __MPN(udiv_w_sdiv) (&__r, nh, nl, d); \ (r) = __r; \ } while (0) #endif /* If udiv_qrnnd was not defined for this processor, use __udiv_qrnnd_c. */ #if !defined (udiv_qrnnd) #define UDIV_NEEDS_NORMALIZATION 1 #define udiv_qrnnd __udiv_qrnnd_c #endif #if !defined (count_leading_zeros) extern #ifdef __STDC__ const #endif unsigned char __clz_tab[]; #define count_leading_zeros(count, x) \ do { \ UWtype __xr = (x); \ UWtype __a; \ \ if (W_TYPE_SIZE <= 32) \ { \ __a = __xr < ((UWtype) 1 << 2*__BITS4) \ ? (__xr < ((UWtype) 1 << __BITS4) ? 0 : __BITS4) \ : (__xr < ((UWtype) 1 << 3*__BITS4) ? 2*__BITS4 : 3*__BITS4);\ } \ else \ { \ for (__a = W_TYPE_SIZE - 8; __a > 0; __a -= 8) \ if (((__xr >> __a) & 0xff) != 0) \ break; \ } \ \ (count) = W_TYPE_SIZE - (__clz_tab[__xr >> __a] + __a); \ } while (0) /* This version gives a well-defined value for zero. */ #define COUNT_LEADING_ZEROS_0 W_TYPE_SIZE #endif #if !defined (count_trailing_zeros) /* Define count_trailing_zeros using count_leading_zeros. The latter might be defined in asm, but if it is not, the C version above is good enough. */ #define count_trailing_zeros(count, x) \ do { \ UWtype __ctz_x = (x); \ UWtype __ctz_c; \ count_leading_zeros (__ctz_c, __ctz_x & -__ctz_x); \ (count) = W_TYPE_SIZE - 1 - __ctz_c; \ } while (0) #endif #ifndef UDIV_NEEDS_NORMALIZATION #define UDIV_NEEDS_NORMALIZATION 0 #endif SHAR_EOF fi # end of overwriting check if test -f 'pmlcg.c' then echo shar: will not over-write existing file "'pmlcg.c'" else cat << "SHAR_EOF" > 'pmlcg.c' /*************************************************************************/ /*************************************************************************/ /* Parallel Prime Modulus Linear Congruential Generator */ /* */ /* Author: Ashok Srinivasan, */ /* NCSA, University of Illinois, Urbana-Champaign */ /* E-Mail: ashoks@ncsa.uiuc.edu */ /* */ /* Based on: ??? */ /* */ /* Disclaimer: NCSA expressly disclaims any and all warranties, expressed*/ /* or implied, concerning the enclosed software. The intent in sharing */ /* this software is to promote the productive interchange of ideas */ /* throughout the research community. All software is furnished on an */ /* "as is" basis. No further updates to this software should be */ /* expected. Although this may occur, no commitment exists. The authors */ /* certainly invite your comments as well as the reporting of any bugs. */ /* NCSA cannot commit that any or all bugs will be fixed. */ /*************************************************************************/ /*************************************************************************/ /* This is version 0.2, created 13 April 1998 */ #include #include #include #define NDEBUG #include #include #include "memory.h" #include "interface.h" #include "gmp.h" #include "basic.h" #include #ifdef CONVEX #undef _LONG_LONG /* problems on convex compiler with 64 bit arithmetic */ #endif #if LONG_MAX > 2147483647L #if LONG_MAX > 35184372088831L #if LONG_MAX >= 9223372036854775807L #define LONG_SPRNG #define LONG64 long /* 64 bit long */ #endif #endif #endif #if !defined(LONG_SPRNG) && defined(_LONG_LONG) #define LONG64 long long #endif #ifndef LONG64 #include "longlong.h" #endif #define VERSION "00" /*** Name for Generator ***/ #define GENTYPE VERSION "Prime modulus LCG" #define NPARAMS 1 /*** number of valid parameters ***/ int MAX_STREAMS = (1<<30); /* Maximum number of streams for initialization */ /* ... more streams can be spawned, though */ struct rngen { char *gentype; int stream_number; int nstreams; int init_seed; int parameter; int narrays; /*** declare other variables here ***/ #ifdef LONG64 unsigned LONG64 mult, x; #else unsigned long r[2], a[2]; int a_size; /* length of array 'a' */ #endif MP_INT k, si; }; int NGENS=0; /* number of random streams in current process */ /* ************************************************************* */ /* ************************* init ************************** */ /* ************************************************************* */ static int init( aa, x0, k, seed, param) unsigned long *aa, *x0; MP_INT *k; int seed, param; { /* called by: initialize_int() calls : GMP routines init_rel_prime(), prim_elt() [ rand_lcg_mu.h ] params : unsigned long aa, x0 = 'a' and 'r' arrays of a generator ( empty when called ) MP_INT k = k value to use to calculate polynomial param determines the power returns : 'a_size' : the length of the multiplier array ( also, params 'aa[]' and 'x0[]' will be filled ) Sets up the multiplier ('a' array) and initial seed ('r' array) for the given value of k. [ 'a' == 'aa' , 'r' == 'x0' ] */ MP_INT A; REL_PRIME_TABLE data; long i, a_size; /* find multiplier value */ mpz_init_set_str(&A, MAXVAL, 10); init_rel_prime(&data, &A); /* param = 2^61-1 is assumes here */ prim_elt(&A, k, data); for (i=0; isi)); mpz_init(&(q[i]->k)); } /* set up 1st generator */ mpz_set(&(q[0]->k),old_si); #ifdef LONG64 a_size = init(a, r, &(q[0]->k),seed,param); q[0]->mult = (unsigned LONG64)a[1]<<32|a[0]; q[0]->x = (unsigned LONG64)r[1]<<32|r[0]; #else q[0]->a_size = init(q[0]->a, q[0]->r, &(q[0]->k),seed,param); #endif mpz_mul_ui(&(q[0]->si), old_si, 2); mpz_add_ui(&(q[0]->si), &(q[0]->si), 1); /* set up remaining generators */ i = 1; order[0] = 0; if (ngen>1) while (1) { l = i; for (k=0; kk), &(q[order[k]]->si)); #ifdef LONG64 a_size = init(a,r,&(q[i]->k),seed,param); q[i]->mult = (unsigned LONG64)a[1]<<32|a[0]; q[i]->x = (unsigned LONG64)r[1]<<32|r[0]; #else q[i]->a_size = init(q[i]->a,q[i]->r,&(q[i]->k),seed,param); #endif mpz_mul_ui(&(q[order[k]]->si), &(q[order[k]]->si), 2); mpz_set(&(q[i]->si), &(q[order[k]]->si)); mpz_add_ui(&(q[i]->si), &(q[i]->si), 1); if (ngen == ++i) break; } if (ngen == i) break; for (k=l-1; k>0; k--) { order[2*k+1] = l + k; order[2*k] = order[k]; } order[1] = l; } free(order); return( (int **)q ); } /* end of initialize */ /* Initialize random number stream */ #ifdef __STDC__ int *init_rng( int gennum, int total_gen, int seed, int param) #else int *init_rng(gennum,total_gen,seed,param) int gennum,param,seed,total_gen; #endif { /* gives back one stream (node gennum) with updated spawning */ /* info; should be called total_gen times, with different value */ /* of gennum in [0,total_gen) each call */ struct rngen *genptr; int i, **p; MP_INT k; if (total_gen <= 0) /* Is total_gen valid ? */ { total_gen = 1; fprintf(stderr,"WARNING - init_rng: Total_gen <= 0. Default value of 1 used for total_gen\n"); } if (gennum >= MAX_STREAMS) /* check if gen_num is valid */ fprintf(stderr,"WARNING - init_rng: gennum: %d > maximum number of independent streams: %d\n\tIndependence of streams cannot be guranteed.\n", gennum, MAX_STREAMS); if (gennum < 0 || gennum >= total_gen) /* check if gen_num is valid */ { fprintf(stderr,"ERROR - init_rng: gennum %d out of range [%d,%d).\n", gennum, 0, total_gen); return (int *) NULL; } if (param < 0 || param >= NPARAMS) /* check if parameter is valid */ { fprintf(stderr,"WARNING - init_rng: parameter not valid. Using Default parameter.\n"); param = 0; } seed &= 0x7fffffff; /* Only 31 LSB of seed considered */ mpz_init_set_ui(&k, gennum); /*final seed != 0 */ p = initialize(1, &k, seed, param); if(p==NULL) return NULL; else genptr = (struct rngen *) p[0]; free(p); /* Initiallize data structure variables */ genptr->gentype = GENTYPE; genptr->stream_number = gennum; genptr->nstreams = total_gen; genptr->init_seed = seed; genptr->parameter = param; genptr->narrays = 0; /* number of arrays needed by your generator */ while ( mpz_cmp_ui(&(genptr->si), total_gen) < 0 ) mpz_mul_ui(&(genptr->si), &(genptr->si), 2); mpz_clear(&k); NGENS++; /* NGENS = # of streams */ return (int *) genptr; } /* ************************************************************* */ /* ************************* iterate ************************* */ /* ************************************************************* */ #ifdef ANSI_C void iterate( int *genptr ) #else void iterate( genptr ) int *genptr; #endif { #ifdef LONG64 struct rngen *gen = (struct rngen *) genptr; unsigned LONG64 x0, x1, x3, ul, uh, vl, vh; #define MULT_MASK1 0x7fffffffU #define MULT_MASK2 0x3fffffffU #ifdef LONG_SPRNG #define MULT_MASK3 0x1fffffffffffffffUL #define MULT_MASK4 0x2000000000000000UL #else #define MULT_MASK3 0x1fffffffffffffffULL #define MULT_MASK4 0x2000000000000000ULL #endif ul = gen->mult&MULT_MASK1; uh = (gen->mult>>31)&MULT_MASK2; vl = gen->x&MULT_MASK1; vh = (gen->x>>31)&MULT_MASK2; x0 = ul*vl; x1 = ul*vh + uh*vl + (x0>>31); x0 &= MULT_MASK1; x3 = ((uh*vh)<<1) + (x1>>30); x0 |= (x1&MULT_MASK2)<<31; gen->x = (x0+x3); if(gen->x&MULT_MASK4) /*Note: x != ..MASK3 since x!=0 mod prime for pmlcg */ { gen->x &= MULT_MASK3; gen->x += 1; if(gen->x == MULT_MASK4) gen->x = 1; } #else /* end LONG64, start 32 bit arithmetic */ /* called by: get_rn_dbl(int) calls : add_ssaaaa(), umul_ppmm() [ longlong.h ] params : int *genptr = generator to iterate returns : void Performs the modular multiplication needed to iterate generator Xn+1 = (Xn * a) mod (2^N - 1) */ /* aa[] * Xn[] -------- result[] -> result[] is split into 2 parts : kk[]rr[] the new Xn[] = ( kk[] + rr[] ) mod ( 2^n - 1) */ unsigned long *aa, *Xn, *rr, *kk; static unsigned long result[4]; /* should be atleast 2*OP_SIZE */ static char overflow; /* should be atleast 2*OP_SIZE */ unsigned long a0, b0, of, temp, temp2; /* temporary storage variables */ unsigned long prod_lo, prod_hi, res_lo, res_hi; long i,j; /* counter variables */ int param = 0; aa = ((struct rngen *)genptr)->a; Xn = ((struct rngen *)genptr)->r; memset(result,0,4*sizeof(unsigned long)); /* initialize to 0 */ overflow = 0; /* result[] = aa[] * Xn[] */ a0 = aa[0]; b0 = Xn[0]; umul_ppmm(prod_hi,prod_lo, a0,b0); result[0] = prod_lo; result[1] = prod_hi; b0 = Xn[1]; umul_ppmm(prod_hi,prod_lo, a0,b0); res_lo = result[1]; add_ssaaaa(of,temp2, 0,prod_lo, 0,res_lo); result[1] = temp2; add_ssaaaa(res_hi,res_lo,0,prod_hi, 0,of); result[2] = res_lo; overflow = res_hi; if(((struct rngen *)genptr)->a_size == 2) { a0 = aa[1]; b0 = Xn[0]; res_lo = result[1]; res_hi = result[2]; umul_ppmm(prod_hi,prod_lo, a0,b0); add_ssaaaa(of,temp2, 0,prod_lo, 0,res_lo); result[1] = temp2; add_ssaaaa(temp,temp2, 0, prod_hi, 0,res_hi); add_ssaaaa(res_hi,res_lo, temp,temp2, 0,of); result[2] = res_lo; overflow += res_hi; b0 = Xn[1]; res_lo = result[2]; res_hi = result[3]; umul_ppmm(prod_hi,prod_lo, a0,b0); add_ssaaaa(of,temp2, 0,prod_lo, 0,res_lo); result[2] = temp2; add_ssaaaa(temp,of, 0,of, 0,overflow); add_ssaaaa(temp,temp2, 0, prod_hi, 0,res_hi); add_ssaaaa(res_hi,res_lo, temp,temp2, 0,of); result[3] = res_lo; } /* rr = low(result) (R) kk = hi(result) (K) */ rr = result; kk = result + OP_SIZE; /* shift 'kk' left */ temp2 = 0; for (i=0; i> SHIFT; } /* move extra bits at top of rr[] into start of kk[] */ temp = rr[OP_SIZE-1]; temp2 = temp >> SHIFT; rr[OP_SIZE-1] = ((temp<> RNGBITS; kk[0] += temp2; /* Xn+1 = rr + kk */ a0 = 0; for (i=0; i> n ) */ temp2 = Xn[OP_SIZE - 1] >> SHIFT; Xn[OP_SIZE - 1] &= MASK; for (i=0; ix>>9) | EXPO; return *dtemp - (double) 1.0; #else return (genptr->x>>9)*2.2204460492503131e-16; #endif #else /* 32 bit arithmetic */ double num1,num2; long i; iterate(igenptr); num1 = (double) genptr->r[0]; num2 = (double) genptr->r[1]; num2 *= (double) 0XFFFFFFFF + 1.0; num1 += num2; num2 = (double) 0XFFFFFFFF + 1.0; num2 *= (double) 0X1FFFFFFF + 1.0; num2 -= 1.0; num1 /= num2; return (num1); #endif } /* Return a random integer */ #ifdef __STDC__ int get_rn_int(int *igenptr) #else int get_rn_int(igenptr) int *igenptr; #endif { struct rngen *genptr = (struct rngen *) igenptr; #ifdef LONG64 iterate(igenptr); return (int) (genptr->x>>30); #else unsigned long irn; iterate(igenptr); irn = (genptr->r[1]<<2) | ((genptr->r[0]&0xc0000000)>>30); return (int) (irn&0x7fffffff); #endif } /* Return a single precision random number */ #ifdef __STDC__ float get_rn_flt(int *igenptr) #else float get_rn_flt(igenptr) int *igenptr; #endif { return (float) get_rn_dbl(igenptr); } /*************************************************************************/ /*************************************************************************/ /* SPAWN_RNG: spawns new generators */ /*************************************************************************/ /*************************************************************************/ #ifdef __STDC__ int spawn_rng(int *igenptr, int nspawned, int ***newgens, int checkid) #else int spawn_rng(igenptr,nspawned, newgens, checkid) int *igenptr,nspawned, ***newgens, checkid; #endif { struct rngen **genptr, *tempptr = (struct rngen *) igenptr; int i; if (nspawned <= 0) /* is nspawned valid ? */ { nspawned = 1; fprintf(stderr,"WARNING - spawn_rng: nspawned <= 0. Default value of 1 used for nspawned\n"); } genptr = (struct rngen **) initialize(nspawned, &tempptr->si,tempptr->init_seed, tempptr->parameter); if(genptr == NULL) /* allocate memory for pointers to structures */ { *newgens = NULL; return 0; } else { *newgens = (int **) genptr; for(i=0; igentype = GENTYPE; genptr[i]->stream_number = tempptr->stream_number; genptr[i]->nstreams = tempptr->nstreams; genptr[i]->init_seed = tempptr->init_seed; genptr[i]->parameter = tempptr->parameter; genptr[i]->narrays = 0; /* number of arrays needed by your generator */ NGENS++; } } if(checkid != 0) for(i=0; ik)); mpz_clear(&(q->si)); free(q); NGENS--; return NGENS; } #ifdef __STDC__ int pack_rng( int *genptr, char **buffer) #else int pack_rng(genptr,buffer) int *genptr; char **buffer; #endif { char *temp_buffer; int size, i; struct rngen *q; int pos=0; q = (struct rngen *) genptr; size = sizeof(struct rngen) + q->narrays*sizeof(int) + strlen(q->gentype)+1; size += q->k._mp_alloc*sizeof(mp_limb_t); size += q->si._mp_alloc*sizeof(mp_limb_t); temp_buffer = (char *) mymalloc(size); /* allocate memory */ if(temp_buffer == NULL) { *buffer = NULL; return 0; } strcpy(temp_buffer+pos,q->gentype); pos += strlen(q->gentype)+1; memcpy(temp_buffer+pos,q,sizeof(struct rngen)); pos += sizeof(struct rngen); memcpy(temp_buffer+pos,q->k._mp_d,q->k._mp_alloc*sizeof(mp_limb_t)); pos += q->k._mp_alloc*sizeof(mp_limb_t); memcpy(temp_buffer+pos,q->si._mp_d,q->si._mp_alloc*sizeof(mp_limb_t)); pos += q->si._mp_alloc*sizeof(mp_limb_t); assert(pos == size); *buffer = temp_buffer; return size; } #ifdef __STDC__ int *unpack_rng( char *packed) #else int *unpack_rng(packed) char *packed; #endif { struct rngen *q; int i; int pos=0; q = (struct rngen *) mymalloc(sizeof(struct rngen)); if(q == NULL) return NULL; if(strcmp(packed+pos,GENTYPE) != 0) { fprintf(stderr,"ERROR: Unpacked ' %.24s ' instead of ' %s '\n", packed+pos, GENTYPE); return NULL; } else q->gentype = GENTYPE; pos += strlen(q->gentype)+1; memcpy(q,packed+pos,sizeof(struct rngen)); pos += sizeof(struct rngen); q->k._mp_d = (mp_limb_t *) mymalloc(q->k._mp_alloc*sizeof(mp_limb_t)); q->si._mp_d = (mp_limb_t *) mymalloc(q->si._mp_alloc*sizeof(mp_limb_t)); if(q->k._mp_d == NULL || q->si._mp_d == NULL) return NULL; memcpy(q->k._mp_d,packed+pos,q->k._mp_alloc*sizeof(mp_limb_t)); pos += q->k._mp_alloc*sizeof(mp_limb_t); memcpy(q->si._mp_d,packed+pos,q->si._mp_alloc*sizeof(mp_limb_t)); pos += q->si._mp_alloc*sizeof(mp_limb_t); NGENS++; return (int *) q; } #ifdef __STDC__ int get_seed_rng(int *gen) #else int get_seed_rng(gen) int *gen; #endif { return ((struct rngen *) gen)->init_seed; } #ifdef __STDC__ int print_rng( int *igen) #else int print_rng(igen) int *igen; #endif { struct rngen *gen; printf("\n%s\n", GENTYPE+2); gen = (struct rngen *) igen; printf("\n \tseed = %d, stream_number = %d\tparameter = %d\n\n", gen->init_seed, gen->stream_number, gen->parameter); /*#ifdef LONG64 printf("multiplier = %llu, seed = %llu\n", gen->mult, gen->x); #endif*/ return 1; } #include "../simple_.h" #include "../fwrap_.h" SHAR_EOF fi # end of overwriting check if test -f 'pmlcg.data' then echo shar: will not over-write existing file "'pmlcg.data'" else cat << "SHAR_EOF" > 'pmlcg.data' 1974609207 1242005296 566994231 1472072161 1908091761 495722626 1991943381 164982065 2025471139 1515109875 1425320979 592308482 859748427 567169497 186266488 1612102117 774752904 974464178 50294704 1591602406 1634420413 353541495 698258809 481255869 136708263 1567401109 2020505365 1395089033 1381386373 332117459 504097154 1380107858 1250678436 20538143 480274147 1626672047 1029803019 434037382 1292152384 474501713 913885879 1874510191 1873102157 2057720020 883361886 1257014048 1377811516 1227351205 575039804 1865053904 2029142071 2081870640 1183635265 682638956 1839316374 1892287065 424941439 1600951801 1884044755 499699256 1153521950 405181972 873136130 146830234 2010092191 130266476 897663895 1186644539 1551670810 841489741 1115679204 1238313484 1629704234 1624771722 1072176621 161045648 1892073431 649978872 1533723689 1568635129 1990033878 809960838 858960624 462060543 1679138680 616750969 1581652534 1996451906 318723665 105982292 1439296755 1584716475 1282249571 102025390 1375310197 1037991222 2007521160 188842293 1290718901 795842648 1774455327 1104277298 1969198625 30749400 558386114 167967477 1520051239 547177706 1825738115 234697578 2111774382 2038734679 164912801 819341675 1622891122 1029065898 226759264 1288614871 1304075953 671632069 1833965521 1739793409 1355684119 1439579595 1445183551 1066335405 1602215092 577500781 1006413270 2107803281 1082147286 841362501 11457265 763850134 1470402555 2132778137 1563117913 161280186 1461992021 1347600886 361491156 1612077158 1681475114 1925756748 1854263899 1725191918 552364976 1649054511 1176547425 1501087492 578432267 2087393280 224352851 1847592905 697146001 975943176 1687348004 161035443 1553748169 89281513 129691185 573189286 422184742 286539489 866488600 126919742 1381210285 677918625 1727667422 1525519999 459132108 945787897 956037705 1478801026 2012238257 875752216 842158789 1500733400 1580349182 57716235 1817365281 1781214091 634835490 1180328621 1498631097 1147895890 750093609 1917666645 1605573109 1882289832 1457167517 1729335677 1840252802 1139708732 796311417 790871915 669257623 1470704764 2031475044 588377780 1223260585 1854153756 1017805325 741073099 1215912159 1548365036 1662479732 1022913350 614616100 1161968842 447384106 2062128213 1373676399 2089271024 2076527874 749513805 681064474 157761392 1651726560 1337110674 530936868 609461959 2012263959 764190516 1752770572 991730137 664005465 1557282427 1359420315 858007495 2080707922 963600094 120868217 504010738 1078543455 1548961368 1589217783 1571223750 9356936 1308547092 1042173859 455187781 685780466 661169861 1841247238 503823922 1044860281 468529092 1248929183 218240398 1364008612 508815736 837174714 1997147513 1266595716 297470818 517837598 1669001454 432449105 298552140 527547958 58628280 944150779 1480672935 1987594051 281575966 223694421 1340302380 404883248 1894376793 1693551008 355239786 627160033 764705808 623917543 1969476434 715840927 58035777 1797971689 10727959 234677506 1570933529 1510438511 1693092457 275771214 2000791909 1519874132 960226326 1291262837 2002584825 1060818478 1422967765 1766432613 1736040021 594277156 1688619693 2025862787 411122364 37914023 1798698899 537042467 160564801 366431281 1212744597 1138507966 1277694199 1294718535 1832811116 1705117700 1007418918 1478531418 929121356 1066554049 862510326 831015500 1783551324 2054247081 1923028711 917563860 837237693 2141045895 1159940840 1077873110 1476789162 277367475 1495056849 1277172838 899071777 1930095653 713792534 1562931715 1307424607 735705145 1864856790 2125941190 1152354692 741923187 1634566974 307671662 179577733 1714105572 1973319864 1332418668 1301405395 415038161 1554184103 1398194943 38983523 817035214 265356269 1556935055 261854959 908625470 91350536 111812682 1500286026 1171717440 12995825 828542822 1543675562 679903292 1214011578 1808201097 1108680823 1996325404 1046336030 1742401613 864010952 1882224849 493231474 1565550107 269408862 97236735 1684109677 648193241 965618970 1289185404 2012552299 1288374814 1982928711 1493902145 1782894462 560421405 913077356 644029520 1004876917 221320716 1624792704 1072274402 310337349 763233993 1440434844 1632335648 1643189472 1044452680 140099210 1559301946 70264175 1733197903 412642195 1367807603 693817260 650089683 566725942 453642172 645329650 1058544964 243656288 504843898 556153934 2044536912 1179823373 234361219 2132190450 1104781178 503844591 691221568 1568263018 811006451 500389807 1783208664 1247118262 834728300 795028709 1275156837 2122615908 1800475480 195365945 1573109213 2072797642 47489775 1749395454 1817099808 1552029954 1238198206 180540256 157475564 1935888194 1906883471 484904044 1775869208 131322532 1056278903 2049166982 1023002719 1136152686 1615545080 116320683 618287300 1463990864 455395781 1945680683 140523097 868325722 1807439499 2061094600 1748028701 1954169337 411220486 1854155386 1234775447 1041321520 1434065199 1816242496 1291258004 553459946 505009344 1692116132 2026154002 1962596981 1861682326 285796424 971909484 1464603910 1302650501 1313198202 1653265649 992823584 1357248023 119906440 1520170849 759201090 763896085 1827663281 1173968567 1096079620 1767240281 60375054 2100344828 183292341 1362349479 1070063414 1562287986 423577784 2032130523 540623250 58793373 1758856351 1735731151 828287184 0.247057 0.018307 0.498233 0.972517 0.858668 0.999879 0.663896 0.403129 0.710727 0.857622 0.073898 0.277315 0.162192 0.740301 0.136532 0.713719 0.697138 0.800848 0.304391 0.086958 0.235101 0.640715 0.717296 0.324757 0.757059 0.742398 0.350716 0.952364 0.579566 0.467854 0.782143 0.787680 0.960400 0.904122 0.955256 0.742240 0.615787 0.999762 0.874952 0.771569 0.689214 0.232023 0.833603 0.150649 0.449064 0.221140 0.475664 0.871833 0.656191 0.055788 0.903021 0.092664 0.003054 0.082430 0.284273 0.826755 0.932949 0.154818 0.837788 0.029836 0.691672 0.500363 0.115717 0.632184 0.160246 0.061067 0.389381 0.916665 0.077801 0.302678 0.762863 0.675704 0.304163 0.992210 0.063482 0.273537 0.844670 0.848134 0.685739 0.835676 0.640974 0.689540 0.234453 0.529846 0.671619 0.006199 0.940601 0.049744 0.877068 0.391439 0.173482 0.854214 0.490466 0.719387 0.935798 0.184239 0.001251 0.829907 0.913926 0.932728 0.077407 0.629011 0.323848 0.517883 0.691111 0.043796 0.078352 0.063564 0.346171 0.538922 0.705753 0.760216 0.578628 0.317694 0.297093 0.398703 0.205307 0.961721 0.675451 0.297625 0.131478 0.661979 0.301336 0.881712 0.899583 0.068511 0.688454 0.892980 0.190433 0.488078 0.529948 0.017429 0.341264 0.203750 0.082357 0.628639 0.348524 0.663361 0.749665 0.098836 0.466126 0.503611 0.375305 0.840549 0.922808 0.555014 0.304540 0.489866 0.750017 0.109801 0.766102 0.258449 0.654382 0.462248 0.986608 0.688979 0.644954 0.991815 0.370084 0.417971 0.398016 0.283444 0.243549 0.982445 0.820314 0.850454 0.400544 0.445466 0.722167 0.112248 0.552068 0.634980 0.028444 0.494298 0.276737 0.306673 0.592642 0.004556 0.347712 0.278108 0.759396 0.543471 0.541992 0.697693 0.273393 0.048358 0.273191 0.850998 0.183553 0.565525 0.445793 0.795518 0.031870 0.067684 0.217471 0.220870 0.374171 0.048353 0.961043 0.290689 0.244896 0.066929 0.812302 0.690185 0.258120 0.180064 0.933783 0.275825 0.491279 0.541648 0.987186 0.964095 0.969638 0.782994 0.706953 0.012686 0.228162 0.447185 0.793480 0.271880 0.257462 0.328555 0.524303 0.947173 0.847395 0.641974 0.466103 0.693620 0.735548 0.713523 0.340037 0.027537 0.872531 0.787938 0.057647 0.547051 0.832264 0.108595 0.007559 0.919365 0.595731 0.915142 0.273977 0.357601 0.806812 0.830949 0.472441 0.206713 0.521807 0.167668 0.466898 0.787680 0.545658 0.077951 0.016413 0.413074 0.640916 0.633388 0.600942 0.014587 0.442876 0.138184 0.655223 0.689496 0.643480 0.604721 0.330574 0.873477 0.388656 0.261686 0.900128 0.451724 0.575805 0.513430 0.399887 0.149274 0.999558 0.939527 0.518731 0.304703 0.306340 0.489629 0.183948 0.572427 0.801728 0.171490 0.235315 0.102205 0.422926 0.200718 0.004282 0.535947 0.608318 0.117114 0.620330 0.043974 0.894994 0.662574 0.238032 0.080166 0.315760 0.945501 0.573077 0.713137 0.657951 0.799750 0.683104 0.238546 0.801760 0.653342 0.565652 0.428420 0.173982 0.413623 0.405964 0.780875 0.003585 0.471833 0.695598 0.286157 0.043122 0.731455 0.050240 0.920806 0.506883 0.599884 0.656349 0.551862 0.953877 0.170986 0.310800 0.557547 0.144754 0.708831 0.456311 0.235164 0.169430 0.645714 0.379027 0.607331 0.922508 0.532624 0.927988 0.592020 0.829893 0.996999 0.420596 0.245925 0.503831 0.032884 0.134738 0.940966 0.378253 0.545126 0.982053 0.254661 0.140950 0.018630 0.291239 0.510400 0.509658 0.897779 0.412929 0.955141 0.720482 0.572207 0.163662 0.841078 0.630967 0.370136 0.767399 0.823472 0.807895 0.937331 0.613346 0.657235 0.555305 0.207155 0.081095 0.697862 0.170724 0.200505 0.985253 0.674600 0.766149 0.017812 0.814446 0.000759 0.936521 0.126089 0.793189 0.523061 0.868272 0.410577 0.995210 0.560158 0.810948 0.431029 0.307731 0.789807 0.009172 0.330737 0.223829 0.156638 0.744374 0.342854 0.396413 0.272418 0.293351 0.079644 0.769861 0.415786 0.458235 0.849554 0.246462 0.572940 0.201970 0.119795 0.522929 0.429892 0.992643 0.843987 0.063183 0.656319 0.944469 0.222913 0.215560 0.772033 0.715148 0.837082 0.804665 0.300784 0.878367 0.927780 0.741739 0.996964 0.001698 0.218960 0.647037 0.540967 0.372265 0.776045 0.384837 0.866531 0.645895 0.014674 0.374474 0.041487 0.528789 0.823540 0.789092 0.478253 0.001385 0.676197 0.429445 0.422199 0.455473 0.448708 0.968491 0.805350 0.519901 0.372467 0.440899 0.890588 0.345827 0.208109 0.669074 0.646962 0.003006 0.722380 0.031166 0.285727 0.380881 0.494290 0.937284 0.771897 0.942126 0.453352 0.862470 0.514153 0.654789 0.438583 0.559590 0.941038 0.592804 0.888803 0.206437 0.859837 0.021773 0.994627 0.876224 0.061988 0.715886 0.774920 0.369019 0.845217 0.451514 0.741281 0.726380 0.092395 0.47090881796755 0.09282688770642 0.07264316188795 0.17140993545517 0.76405888012589 0.12229899370464 0.01716069780233 0.95124002002110 0.58448325153694 0.33893042731620 0.32644657734266 0.33722293508732 0.36677801330591 0.14666158771974 0.66885364322661 0.68214018091438 0.34642845401755 0.26761723054289 0.83979631628746 0.06880021417211 0.28376163299982 0.01449298498288 0.34196877834960 0.19130789907933 0.05825480388039 0.72316492877125 0.04105303008174 0.54152814932642 0.42910904078775 0.87803929391250 0.19554998156498 0.21753237835081 0.20234426197030 0.57968869563482 0.49357754316979 0.06960851161419 0.10520497858029 0.49781077134288 0.86918023332433 0.20346635074772 0.15433893387972 0.22736594774100 0.23938507586075 0.33960870761082 0.67687502177330 0.09114024985560 0.56566157802708 0.28726927479576 0.38824278463593 0.34379272020963 0.21380506648891 0.59966745404319 0.50273256335170 0.90872769264507 0.05099084848937 0.84076610947521 0.74990005393185 0.90422234138546 0.65850620301368 0.97550107038937 0.79537070946331 0.00255035191472 0.55883103095834 0.52554738165680 0.10395016565392 0.96670573151333 0.68020989853349 0.32044922702150 0.05220115342800 0.03190274317800 0.65289023684356 0.17955494562988 0.85552344722161 0.26119880276131 0.23529369046953 0.71789159205192 0.18429324309892 0.47973457325044 0.01048837349339 0.30542438341422 0.97154229638406 0.48387199047450 0.78893426230014 0.60044855418358 0.51586634947545 0.66609077287094 0.40285462703336 0.63914571312948 0.05370066221773 0.13086065419378 0.49103049548243 0.26449849115593 0.03096114779662 0.78732768225972 0.18342398425349 0.34932801829292 0.64889319673864 0.36222697442025 0.68417977803105 0.46350688273473 0.12069693938682 0.90249435188646 0.75941650810686 0.71357514821284 0.77985289761769 0.60580826304666 0.98348242625061 0.29466157143917 0.92623136496283 0.57252092560464 0.70653654448034 0.50604895954931 0.38668680279461 0.93907139627255 0.40787921935605 0.27856375513603 0.61422032978478 0.00549698658122 0.30072561362635 0.29598276476231 0.63947918696026 0.51399665835879 0.91670109656344 0.96816816789647 0.55750442874103 0.91179383847246 0.80820990638593 0.83250866198768 0.36812914265877 0.44579707149256 0.28922058166534 0.34169038111596 0.74465065135137 0.99131289715331 0.02555097782757 0.17929476114416 0.27531509168067 0.49918728956221 0.01524708104669 0.15630795405673 0.54439819934741 0.34406385944733 0.87378378886599 0.55268940888392 0.10598123184308 0.69261944720878 0.87271484160534 0.12749127719036 0.85580713757956 0.88324927052833 0.94235853395276 0.38139317039181 0.76778332673343 0.96483485569159 0.73892657989447 0.53179654448285 0.11820726477182 0.79200890572892 0.31667631305988 0.05996080492079 0.27443864580766 0.02978621775131 0.46653235261546 0.56651062296508 0.86452015594580 0.87189366966728 0.73176495133345 0.84469036169405 0.48088601879691 0.21596487399767 0.89264415692824 0.90880165344757 0.21140648239413 0.53675261522324 0.30387761818615 0.15822625451228 0.87475694964079 0.71489132898136 0.04769702622872 0.94628682800348 0.37899614165488 0.77632662380589 0.01760388941483 0.71115270240209 0.80452505635867 0.76272487102216 0.71955067563238 0.54900739356626 0.72423152524317 0.44276672036777 0.99015997223081 0.80465248689589 0.58051639511457 0.02645580246119 0.60648054572792 0.09226839276046 0.94635695686094 0.47988790850118 0.39677122745195 0.90937574905420 0.51643730649197 0.59359732585931 0.49420962950812 0.11737511799037 0.67315502767720 0.16260768243975 0.35073799516948 0.30726694253122 0.78266127476067 0.25135397687191 0.82487943869178 0.28791545236292 0.60422444104646 0.27683684113441 0.79494572339826 0.55007215166274 0.99138732585833 0.26414366321878 0.63046436670747 0.72431421156747 0.92525838510928 0.68870476163557 0.65156268632353 0.86165812298864 0.89556475855096 0.66423366094822 0.73533500088349 0.45035543853956 0.83718449123638 0.59478980281085 0.54179010411547 0.77897948890268 0.87409991966020 0.99053780263506 0.96489612710185 0.87994264880587 0.14677600031013 0.11551769935432 0.87836072475050 0.05688826498775 0.43419332780942 0.50503111426353 0.88546654520858 0.97444874567753 0.48040480770644 0.41865095908760 0.85364090821949 0.23275907978992 0.56573777921173 0.74357357208219 0.42750262952979 0.85906469291137 0.68270773539225 0.56927211276386 0.85435810119623 0.95645590496235 0.52065894319824 0.37604131063772 0.77753424352281 0.37247702651909 0.25016001633725 0.34836049495879 0.85292066638321 0.97041233354094 0.47499478542858 0.36590774835706 0.56293791064642 0.02908089860207 0.75359305863216 0.58551882848102 0.28772233575646 0.81534264483955 0.31777342499076 0.65342432461972 0.61514568865049 0.82517711874856 0.77042219171379 0.43683353028436 0.42784419415551 0.44764747810325 0.56867304776419 0.95950376416685 0.20065018504251 0.04308075205579 0.57742099052200 0.12298235457701 0.12565855418632 0.81031894618782 0.59261541243039 0.87675317201409 0.73160681014901 0.62745155521573 0.68415996921127 0.13740871247440 0.52344090484102 0.64876122692613 0.57549356247379 0.18552149232775 0.49042007449791 0.18991591886254 0.39905327941472 0.97421570162549 0.61714364920890 0.99604286785632 0.53183924055225 0.41575174513683 0.29354991856911 0.09785901206532 0.79976125640133 0.32179847948615 0.78672039107185 0.67456010614880 0.66738053181709 0.41413496618055 0.79687419181379 0.90057934483925 0.62762338950556 0.12076136576397 0.43491052477920 0.61813549138152 0.70773697123191 0.12724965071508 0.46930025004115 0.99226210572650 0.26356272829369 0.72063169177761 0.95179220107708 0.11442217586402 0.47913371675254 0.90684986307110 0.69794700034026 0.90326023936908 0.89690654753116 0.97117212987081 0.16318157803401 0.41677954853491 0.90887074796353 0.42159691740893 0.18334112188430 0.42320438699833 0.13024312870438 0.20947497217241 0.51623944068397 0.92531846662294 0.03579554287516 0.34800522273521 0.70476047598443 0.85787318906104 0.57194892463744 0.73871661122201 0.71133197474096 0.15034783378253 0.11416312415795 0.14993721682941 0.86782676431879 0.31926586128570 0.56839235335775 0.89207012009911 0.67237742675919 0.01010912349462 0.54428826209375 0.29162548374225 0.64587316803149 0.14603209721335 0.52875570972799 0.42508556333147 0.72708300450657 0.99144443238614 0.75597513460355 0.52773936928288 0.81524248748421 0.05709994424896 0.37448462960813 0.93408432568666 0.21607122325747 0.60854972228056 0.41351747234696 0.46509452137798 0.53122878564220 0.30327218925403 0.84388955828219 0.45449280427248 0.53376796430932 0.54185410142630 0.25754435354512 0.52881740969907 0.52291164581580 0.28733480065727 0.16760461298756 0.38024263401886 0.64519800045197 0.65097612633203 0.13197578545440 0.39363820394916 0.19539924363928 0.87533102095574 0.44929817742985 0.44965956889737 0.91736329550549 0.35237123372191 0.83880982510843 0.34553543959605 0.47886095172091 0.63738665239126 0.94470421339523 0.22384859993163 0.04468417462235 0.16149805555876 0.03732593376817 0.42406005500014 0.74944830318544 0.02062231687196 0.00311994478954 0.59816935826087 0.89821793142306 0.76205765107363 0.87880128013984 0.85349734647285 0.46955993681890 0.77279631417701 0.06918739836145 0.49639687975046 0.31590116933522 0.47396306729988 0.69986045862638 0.55597945848243 0.10595786774302 0.22726243582972 0.33927822939837 0.26379478201634 0.72540967765299 0.90379325899933 0.70038161218409 0.07548992018454 0.51129145152905 0.94704222811698 0.62256472000951 0.32979553914072 0.30177270084912 0.23440371734560 0.03048245713397 0.73704640212780 0.41534662172100 0.87048584701153 0.70268377356728 0.79376424121207 0.00606682575422 0.15519483799137 0.97848559129402 0.79427608991851 0.62621006971220 0.58315873251306 0.41677186496461 0.45571905873207 0.70307333577044 0.28089107095331 0.07177777201868 0.95284071669437 0.54834042435975 0.08917858144412 0.09206908160377 0.82906514143494 0.63616437707057 0.34374935040116 0.92362594242535 0.38407203871401 0.49545271485657 0.21705016379430 0.66854150996712 0.93507503632199 0.14535797217969 0.07995292066014 0.00378028597990 0.42568406208026 0.07760931473057 0.19752853833188 0.15942888105038 0.15473483875920 0.98999495488178 0.86422129912630 0.93114537656244 0.07005006983108 0.85471848794782 0.68376474946972 0.53544296238063 0.91755134364231 0.23315468432268 0.49877551597818 0.57847782577838 0.46470434904264 0.50859300798595 0.12647120940934 0.63596868576188 0.34535546873913 0.88719010301530 0.72254310098900 0.54725233226561 0.85664840509202 0.01793686372836 0.56094693595241 1294896255 311724874 156747740 773137705 1930038028 631514240 951200607 585303106 689209472 1969744058 2070561912 666068989 1356433643 1462978429 934456485 371003109 1894537816 752562712 1400233622 1440372444 332674540 44369954 1720834547 884576604 58277745 648147323 99507136 437792041 1303259011 746162834 676350736 18555843 2104757427 832187601 466746640 1232943849 2031475044 1518391300 881995468 1204432218 1189400911 144099886 1798304756 1360220291 1809562394 1076299531 1490058131 1994934920 1283312732 2108444942 1349203318 1000245131 1721154403 723261707 327158287 1400570068 1293905070 1836000722 392137161 587592313 1144498335 538060267 1285756958 490228388 218882443 1047743739 56247221 1362326921 1078617053 1410168767 1124832088 1660364391 640454186 70264175 161618822 786741678 1000198317 1373288745 1620275403 432676367 1299094870 1282651267 142136050 446683199 1444509985 695107856 1862361682 901996876 295365993 252581894 469595597 889656312 553527738 1822734902 660518123 54128446 1875014398 1729025959 1683623236 96799850 1709074707 1073343722 766753345 1838306978 1194753203 263744324 775493154 262088250 93069052 57912130 2080176895 1097310747 859010843 357646710 983655045 232643829 952310556 997079463 1269034897 1382207969 139158432 796365829 1452645665 1544313646 136626515 1090146909 718198949 947381370 1666015528 1303610108 756203367 607737989 1579812269 125683379 2004606312 279164485 560421405 860243781 2035092126 538448710 1381164883 1560918451 546404706 1659335235 1128306427 1338457781 1129586225 1417617132 1425386520 2005990905 1974609207 1242005296 566994231 1472072161 1908091761 495722626 1991943381 164982065 2025471139 1515109875 1425320979 592308482 859748427 567169497 186266488 1612102117 774752904 974464178 50294704 1591602406 1634420413 353541495 698258809 481255869 136708263 1567401109 2020505365 1395089033 1381386373 332117459 504097154 1380107858 1250678436 20538143 480274147 1626672047 1029803019 434037382 1292152384 474501713 913885879 1874510191 1873102157 2057720020 883361886 1257014048 1377811516 1227351205 575039804 1865053904 1974609207 1242005296 566994231 1472072161 1908091761 495722626 1991943381 164982065 2025471139 1515109875 1425320979 592308482 859748427 567169497 186266488 1612102117 774752904 974464178 50294704 1591602406 1634420413 353541495 698258809 481255869 136708263 1567401109 2020505365 1395089033 1381386373 332117459 504097154 1380107858 1250678436 20538143 480274147 1626672047 1029803019 434037382 1292152384 474501713 913885879 1874510191 1873102157 2057720020 883361886 1257014048 1377811516 1227351205 575039804 1865053904 1351247504 1449991046 1217832341 1397552316 2008931809 460116997 594494193 1875461551 1927083130 1561348027 321601395 406694984 593167518 746534936 178997844 1353673852 1157508619 573225936 71255906 56828909 746659732 548646789 1875509000 1402874603 1332334612 109483188 1760743773 898079393 58044103 1785669350 57323606 395314357 1853336689 371088785 900107008 1896741480 1873102157 351414749 868812109 1911876 768739365 2040895254 1617489524 579910537 419754062 495789180 633942293 1025321189 437964119 897905379 SHAR_EOF fi # end of overwriting check cd .. if test -f 'simple.c' then echo shar: will not over-write existing file "'simple.c'" else cat << "SHAR_EOF" > 'simple.c' /*************************************************************************/ #include #include #include "memory.h" #include "interface.h" #ifndef ANSI_ARGS #ifdef __STDC__ #define ANSI_ARGS(args) args #else #define ANSI_ARGS(args) () #endif #endif int *defaultgen=NULL; int junk; /* pass useless pointer at times */ #ifdef __STDC__ int *init_rng_simple( int seed, int mult) #else int *init_rng_simple(seed,mult) int mult,seed; #endif { int myid=0, nprocs=1, *temp; temp = init_rng(myid,nprocs,seed,mult); if(temp == NULL) return NULL; else { if(defaultgen != NULL) free_rng(defaultgen); defaultgen = temp; return &junk; /* return "garbage" value */ } } #ifdef __STDC__ int get_rn_int_simple(void) #else int get_rn_int_simple() #endif { if(defaultgen == NULL) if(init_rng_simple(0,0) == NULL) return -1.0; return get_rn_int(defaultgen); } #ifdef __STDC__ float get_rn_flt_simple(void) #else float get_rn_flt_simple() #endif { if(defaultgen == NULL) if(init_rng_simple(0,0) == NULL) return -1.0; return get_rn_flt(defaultgen); } #ifdef __STDC__ double get_rn_dbl_simple(void) #else double get_rn_dbl_simple() #endif { if(defaultgen == NULL) if(init_rng_simple(0,0) == NULL) return -1.0; return get_rn_dbl(defaultgen); } #ifdef __STDC__ int pack_rng_simple(char **buffer) #else int pack_rng_simple(buffer) char **buffer; #endif { if(defaultgen == NULL) return 0; return pack_rng(defaultgen,buffer); } #ifdef __STDC__ int *unpack_rng_simple( char *packed) #else int *unpack_rng_simple(packed) char *packed; #endif { int *temp; temp = unpack_rng(packed); if(temp == NULL) return NULL; else { if(defaultgen != NULL) free_rng(defaultgen); defaultgen = temp; return &junk; /* return "garbage" value */ } } #ifdef __STDC__ int print_rng_simple(void) #else int print_rng_simple() #endif { if(defaultgen == NULL) { fprintf(stderr,"WARNING: No generator initialized so far\n"); return 0; } return print_rng(defaultgen); } SHAR_EOF fi # end of overwriting check if test -f 'simple_.h' then echo shar: will not over-write existing file "'simple_.h'" else cat << "SHAR_EOF" > 'simple_.h' /*************************************************************************/ #include #include #include "memory.h" #include "interface.h" #ifndef ANSI_ARGS #ifdef __STDC__ #define ANSI_ARGS(args) args #else #define ANSI_ARGS(args) () #endif #endif int *defaultgen=NULL; int junk; /* pass useless pointer at times */ #ifdef __STDC__ int *init_rng_simple( int seed, int mult) #else int *init_rng_simple(seed,mult) int mult,seed; #endif { int myid=0, nprocs=1, *temp; temp = init_rng(myid,nprocs,seed,mult); if(temp == NULL) return NULL; else { if(defaultgen != NULL) free_rng(defaultgen); defaultgen = temp; return &junk; /* return "garbage" value */ } } #ifdef __STDC__ int get_rn_int_simple(void) #else int get_rn_int_simple() #endif { if(defaultgen == NULL) if(init_rng_simple(0,0) == NULL) return -1.0; return get_rn_int(defaultgen); } #ifdef __STDC__ float get_rn_flt_simple(void) #else float get_rn_flt_simple() #endif { if(defaultgen == NULL) if(init_rng_simple(0,0) == NULL) return -1.0; return get_rn_flt(defaultgen); } #ifdef __STDC__ double get_rn_dbl_simple(void) #else double get_rn_dbl_simple() #endif { if(defaultgen == NULL) if(init_rng_simple(0,0) == NULL) return -1.0; return get_rn_dbl(defaultgen); } #ifdef __STDC__ int pack_rng_simple(char **buffer) #else int pack_rng_simple(buffer) char **buffer; #endif { if(defaultgen == NULL) return 0; return pack_rng(defaultgen,buffer); } #ifdef __STDC__ int *unpack_rng_simple( char *packed) #else int *unpack_rng_simple(packed) char *packed; #endif { int *temp; temp = unpack_rng(packed); if(temp == NULL) return NULL; else { if(defaultgen != NULL) free_rng(defaultgen); defaultgen = temp; return &junk; /* return "garbage" value */ } } #ifdef __STDC__ int print_rng_simple(void) #else int print_rng_simple() #endif { if(defaultgen == NULL) { fprintf(stderr,"WARNING: No generator initialized so far\n"); return 0; } return print_rng(defaultgen); } SHAR_EOF fi # end of overwriting check if test -f 'simple_mpi.c' then echo shar: will not over-write existing file "'simple_mpi.c'" else cat << "SHAR_EOF" > 'simple_mpi.c' /*************************************************************************/ /*************************************************************************/ /* LINEAR CONGRUENTIAL RANDOM NUMBER GENERATION WITH PRIME ADDEND */ /* */ /* Author: Ashok Srinivasan, */ /* NCSA, University of Illinois, Urbana-Champaign */ /* E-Mail: ashoks@ncsa.uiuc.edu */ /* */ /* Note: This generator is based on the Cray YMP compatible random number*/ /* generator for 32-bit IEEE machines by William Magro, Cornell Theory */ /* Center */ /* */ /* Disclaimer: NCSA expressly disclaims any and all warranties, expressed*/ /* or implied, concerning the enclosed software. The intent in sharing */ /* this software is to promote the productive interchange of ideas */ /* throughout the research community. All software is furnished on an */ /* "as is" basis. No further updates to this software should be */ /* expected. Although this may occur, no commitment exists. The authors */ /* certainly invite your comments as well as the reporting of any bugs. */ /* NCSA cannot commit that any or all bugs will be fixed. */ /*************************************************************************/ /*************************************************************************/ #include #include #include "memory.h" #include "interface.h" #ifndef ANSI_ARGS #ifdef __STDC__ #define ANSI_ARGS(args) args #else #define ANSI_ARGS(args) () #endif #endif extern int *defaultgen; int junkmpi; /* pass useless pointer at times */ #ifdef SPRNG_MPI #ifdef __STDC__ int *init_rng_simple_mpi( int seed, int mult) #else int *init_rng_simple_mpi(seed,mult) int mult,seed; #endif { int myid=0, nprocs=1, *temp; get_proc_info_mpi(&myid,&nprocs); temp = init_rng(myid,nprocs,seed,mult); if(temp == NULL) return NULL; else { if(defaultgen != NULL) free_rng(defaultgen); defaultgen = temp; return &junkmpi; /* return "garbage" value */ } } #ifdef __STDC__ int get_rn_int_simple_mpi(void) #else int get_rn_int_simple_mpi() #endif { if(defaultgen == NULL) if(init_rng_simple_mpi(0,0) == NULL) return -1.0; return get_rn_int(defaultgen); } #ifdef __STDC__ float get_rn_flt_simple_mpi(void) #else float get_rn_flt_simple_mpi() #endif { if(defaultgen == NULL) if(init_rng_simple_mpi(0,0) == NULL) return -1.0; return get_rn_flt(defaultgen); } #ifdef __STDC__ double get_rn_dbl_simple_mpi(void) #else double get_rn_dbl_simple_mpi() #endif { if(defaultgen == NULL) if(init_rng_simple_mpi(0,0) == NULL) return -1.0; return get_rn_dbl(defaultgen); } #endif SHAR_EOF fi # end of overwriting check if test -f 'sprng.h' then echo shar: will not over-write existing file "'sprng.h'" else cat << "SHAR_EOF" > 'sprng.h' #ifndef _sprng_h_ #define _sprng_h_ #include "interface.h" #define SPRNG_DEFAULT 0 #define CRAYLCG 0 #define DRAND48 1 #define FISH1 2 #define FISH2 3 #define FISH3 4 #define FISH4 5 #define FISH5 6 #define LECU1 0 #define LECU2 1 #define LECU3 2 #define LAG1279 0 #define LAG17 1 #define LAG31 2 #define LAG55 3 #define LAG63 4 #define LAG127 5 #define LAG521 6 #define LAG521B 7 #define LAG607 8 #define LAG607B 9 #define LAG1279B 10 #define CHECK 1 #define MAX_PACKED_LENGTH 24000 #ifdef USE_MPI #define MPINAME(A) A ## _mpi #else #define MPINAME(A) A #endif #define make_sprng_seed MPINAME(make_new_seed) #if defined(SIMPLE_SPRNG) #define pack_sprng pack_rng_simple #define unpack_sprng unpack_rng_simple #define isprng MPINAME(get_rn_int_simple) #define init_sprng MPINAME(init_rng_simple) #define print_sprng print_rng_simple #ifdef FLOAT_GEN #define sprng MPINAME(get_rn_flt_simple) #else #define sprng MPINAME(get_rn_dbl_simple) #endif #elif !defined(CHECK_POINTERS) #define free_sprng free_rng #define pack_sprng pack_rng #define unpack_sprng unpack_rng #define isprng get_rn_int #define spawn_sprng(A,B,C) spawn_rng(A,B,C,!CHECK) #define init_sprng init_rng #define print_sprng print_rng #ifdef FLOAT_GEN #define sprng get_rn_flt #else #define sprng get_rn_dbl #endif #else #define free_sprng(A) ((deleteID(A)==NULL) ? -1 : free_rng(A)) #define pack_sprng(A,B) ((checkID(A)==NULL) ? 0 : pack_rng(A,B)) #define unpack_sprng(A) addID(unpack_rng(A)) #define isprng(A) ((checkID(A)==NULL) ? -1 : get_rn_int(A)) #define spawn_sprng(A,B,C) ((checkID(A)==NULL) ? 0 : spawn_rng(A,B,C,CHECK)) #define init_sprng(A,B,C,D) addID(init_rng(A,B,C,D)) #define print_sprng(A) ((checkID(A)==NULL) ? 0 : print_rng(A)) #ifdef FLOAT_GEN #define sprng(A) ((checkID(A)==NULL) ? -1.0 : get_rn_flt(A)) #else #define sprng(A) ((checkID(A)==NULL) ? -1.0 : get_rn_dbl(A)) #endif #endif #endif SHAR_EOF fi # end of overwriting check if test -f 'sprng_f.h' then echo shar: will not over-write existing file "'sprng_f.h'" else cat << "SHAR_EOF" > 'sprng_f.h' #ifndef _sprngf_h_ #define SPRNG_DEFAULT 0 #define CRAYLCG 0 #define DRAND48 1 #define FISH1 2 #define FISH2 3 #define FISH3 4 #define FISH4 5 #define FISH5 6 #define LECU1 0 #define LECU2 1 #define LECU3 2 #define LAG1279 0 #define LAG17 1 #define LAG31 2 #define LAG55 3 #define LAG63 4 #define LAG127 5 #define LAG521 6 #define LAG521B 7 #define LAG607 8 #define LAG607B 9 #define LAG1279B 10 #ifdef CHECK_POINTERS #define CHECK 1 #else #define CHECK 0 #endif /* ifdef CHECK_POINTERS */ #define MAX_PACKED_LENGTH 24000 #ifdef POINTER_SIZE #if POINTER_SIZE == 8 #define SPRNG_POINTER integer*8 #else #define SPRNG_POINTER integer*4 #endif #else #define SPRNG_POINTER integer*4 #endif /* ifdef POINTER_SIZE */ #ifdef USE_MPI #define make_sprng_seed fseed_mpi #else #define make_sprng_seed fmake_new_seed #endif #endif /* ifdef _sprng_h */ #ifdef USE_MPI external fseed_mpi integer fseed_mpi #else external fmake_new_seed integer fmake_new_seed #endif #ifndef DEFAULTINT #define DEFAULTINT #endif #ifndef FLOAT_GEN #define DBLGEN #endif #if defined(SIMPLE_SPRNG) #undef DEFAULTINT #ifndef _sprngf_h_ #define pack_sprng fpack_rng_simple #define unpack_sprng funpack_rng_simple #ifdef USE_MPI #define isprng fget_rn_int_simmpi #define init_sprng finit_rng_simmpi #else #define isprng fget_rn_int_sim #define init_sprng finit_rng_sim #endif /* ifdef USE_MPI */ #define print_sprng fprint_rng_simple #if defined(FLOAT_GEN) && defined(USE_MPI) #define sprng fget_rn_flt_simmpi #endif #if defined(FLOAT_GEN) && !defined(USE_MPI) #define sprng fget_rn_flt_sim #endif #if defined(DBLGEN) && defined(USE_MPI) #define sprng fget_rn_dbl_simmpi #endif #if defined(DBLGEN) && !defined(USE_MPI) #define sprng fget_rn_dbl_sim #endif #endif /* ifdef _sprng_h */ external isprng external fget_rn_dbl_sim, fget_rn_flt_sim external init_sprng, fpack_rng_simple external funpack_rng_simple, fprint_rng_simple #ifdef USE_MPI external fget_rn_flt_simmpi, fget_rn_dbl_simmpi real*4 fget_rn_flt_simmpi real*8 fget_rn_dbl_simmpi #endif integer isprng,fpack_rng_simple,fprint_rng_simple SPRNG_POINTER init_sprng, funpack_rng_simple real*4 fget_rn_flt_sim real*8 fget_rn_dbl_sim #endif #if defined(CHECK_POINTERS) #undef DEFAULTINT external fget_rn_int_ptr, fget_rn_flt_ptr, fget_rn_dbl_ptr external fspawn_rng_ptr, ffree_rng_ptr, finit_rng_ptr external fpack_rng_ptr, funpack_rng_ptr, fprint_rng_ptr integer fget_rn_int_ptr, ffree_rng_ptr, fpack_rng_ptr SPRNG_POINTER finit_rng_ptr, funpack_rng_ptr integer fspawn_rng_ptr, fprint_rng_ptr real*4 fget_rn_flt_ptr real*8 fget_rn_dbl_ptr #ifndef _sprngf_h_ #define isprng fget_rn_int_ptr #define free_sprng ffree_rng_ptr #define spawn_sprng(A,B,C) fspawn_rng_ptr(A,B,C,CHECK) #define pack_sprng fpack_rng_ptr #define unpack_sprng funpack_rng_ptr #define init_sprng finit_rng_ptr #define print_sprng fprint_rng_ptr #ifdef FLOAT_GEN #define sprng fget_rn_flt_ptr #else #define sprng fget_rn_dbl_ptr #endif #endif #endif #if defined(DEFAULTINT) external fget_rn_int, fget_rn_flt, fget_rn_dbl external fspawn_rng, ffree_rng, finit_rng external fpack_rng, funpack_rng, fprint_rng integer fget_rn_int, ffree_rng, fpack_rng SPRNG_POINTER finit_rng, funpack_rng integer fspawn_rng, fprint_rng real*4 fget_rn_flt real*8 fget_rn_dbl #ifndef _sprngf_h_ #define isprng fget_rn_int #define free_sprng ffree_rng #define spawn_sprng(A,B,C) fspawn_rng(A,B,C,CHECK) #define pack_sprng fpack_rng #define unpack_sprng funpack_rng #define init_sprng finit_rng #define print_sprng fprint_rng #ifdef FLOAT_GEN #define sprng fget_rn_flt #else #define sprng fget_rn_dbl #endif #endif #endif #ifndef _sprngf_h_ #define _sprngf_h_ #endif SHAR_EOF fi # end of overwriting check if test -f 'store.c' then echo shar: will not over-write existing file "'store.c'" else cat << "SHAR_EOF" > 'store.c' #include #include "store.h" int store_long(unsigned long l, int nbytes, unsigned char *c) { int i; for(i=0; i>(8*(nbytes-i-1)))&0xff; return nbytes; /* return number of chars filled */ } int store_longarray(unsigned long *l, int n, int nbytes, unsigned char *c) { int i; for(i=0; i>(8*(nbytes-i-1)))&0xff; return nbytes; /* return number of chars filled */ } int store_longlongarray(unsigned long long *l, int n, int nbytes, unsigned char *c) { int i; for(i=0; i>(8*(nbytes-i-1)))&0xff; return nbytes; /* return number of chars filled */ } int store_intarray(unsigned int *l, int n, int nbytes, unsigned char *c) { int i; for(i=0; i 'store.h' #ifndef _STORE_H #define _STORE_H /* Numbers are stored with most significant bit first (left most) */ int store_long(unsigned long l, int nbytes, unsigned char *c); int store_longarray(unsigned long *l, int n, int nbytes, unsigned char *c); int load_long(unsigned char *c, int nbytes, unsigned long *l); int load_longarray(unsigned char *c, int n, int nbytes, unsigned long *l); int store_int(unsigned int l, int nbytes, unsigned char *c); int store_intarray(unsigned int *l, int n, int nbytes, unsigned char *c); int load_int(unsigned char *c, int nbytes, unsigned int *l); int load_intarray(unsigned char *c, int n, int nbytes, unsigned int *l); #ifdef _LONG_LONG int store_longlong(unsigned long long l, int nbytes, unsigned char *c); int store_longlongarray(unsigned long long *l, int n, int nbytes, unsigned char *c); int load_longlong(unsigned char *c, int nbytes, unsigned long long *l); int load_longlongarray(unsigned char *c, int n, int nbytes, unsigned long long *l); #endif /* _LONG_LONG */ #endif /* _STORE_H */ SHAR_EOF fi # end of overwriting check if test -f 'timing.c' then echo shar: will not over-write existing file "'timing.c'" else cat << "SHAR_EOF" > 'timing.c' #include #include #include "cputime.h" #include "interface.h" #define TIMING_TRIAL_SIZE 1000000 #define PARAM 0 main() { int i; int *gen; double temp1, temp2, temp3, temp4; double temp_mult = TIMING_TRIAL_SIZE/1.0e6; gen = init_rng(0,1,0,PARAM); /*print_rng(gen);*/ temp1 = cputime(); for(i=0; i %8.4f MRS\n", temp2-temp1, temp_mult/(temp2-temp1)); printf("\tFloat generator:\t Time = %7.3f seconds => %8.4f MRS\n", temp3-temp2, temp_mult/(temp3-temp2)); printf("\tDouble generator:\t Time = %7.3f seconds => %8.4f MRS\n", temp4-temp3, temp_mult/(temp4-temp3)); putchar('\n'); } SHAR_EOF fi # end of overwriting check if test -f 'timingf.F' then echo shar: will not over-write existing file "'timingf.F'" else cat << "SHAR_EOF" > 'timingf.F' #define PARAM 0 #define TIMING_TRIAL_SIZE 1000000 #ifdef POINTER_SIZE #if POINTER_SIZE == 8 #define SPRNG_POINTER integer*8 #else #define SPRNG_POINTER integer*4 #endif #else #define SPRNG_POINTER integer*4 #endif program test_generator implicit none external finit_rng, fget_rn_int, fget_rn_flt, fget_rn_dbl external fcpu_t SPRNG_POINTER finit_rng real*8 fget_rn_dbl, fcpu_t, tempd real*4 fget_rn_flt, tempf integer fget_rn_int, tempi integer i SPRNG_POINTER gen real*8 temp1, temp2, temp3, temp4 real*8 temp_mult temp_mult = TIMING_TRIAL_SIZE/1.0e6 gen = finit_rng(0,1,0,PARAM) temp1 = fcpu_t() do 100 i = 1,TIMING_TRIAL_SIZE tempi = fget_rn_int(gen) 100 continue temp2 = fcpu_t() do 200 i = 1,TIMING_TRIAL_SIZE tempf = fget_rn_flt(gen) 200 continue temp3 = fcpu_t() do 300 i = 1,TIMING_TRIAL_SIZE tempd = fget_rn_dbl(gen) 300 continue temp4 = fcpu_t() if( temp2-temp1 .lt. 1.0e-15 ) then print *, 'Timing information not available or nor accurate' stop end if if( temp3-temp2 .lt. 1.0e-15 ) then print *, 'Timing information not available or nor accurate' stop end if if(temp4-temp3 .lt. 1.0e-15 ) then print *, 'Timing information not available or not accurate' stop end if temp1 = temp_mult/(temp2-temp1) temp2 = temp_mult/(temp3-temp2) temp3 = temp_mult/(temp4-temp3) print *, 'User + System time Information' print *, '(Note: MRS = Million Random Numbers Per Second)' write(6,500) temp1 write(6,501) temp2 write(6,502) temp3 500 format(' Integer generator: ', f7.3, ' MRS') 501 format(' real*4 generator: ', f7.3, ' MRS') 502 format(' real*8 generator: ', f7.3, ' MRS') end SHAR_EOF fi # end of overwriting check cd .. if test ! -d 'TESTS' then mkdir 'TESTS' fi cd 'TESTS' if test -f 'Makefile' then echo shar: will not over-write existing file "'Makefile'" else cat << "SHAR_EOF" > 'Makefile' ############################################################################ # This is a make file compiles the test executables # # We have set variables giving information on the archiver, the C compiler # and the FORTRAN compiler for certain machines in files make.xxx, where xxx # is the machine name, set in ../make.CHOICES. # # Typing the command below => results in the following being created # make => All the sequential and parallel tests. # make xxx => Test 'xxx.rng' for each generator 'rng'. # # Object files created during the compilation process can be deleted finally # by typing # make clean # # Object files and the test executables created can be deleted finally # by typing # make realclean # # Set 'LIBDIR' to the directory where the SPRNG libraries are. # Set 'INCDIR' to the directory where the SPRNG include files are. # We have already set them to the correct locations, unless whoever installed # the libraries changed them. ############################################################################ SHELL = /bin/sh include ../make.CHOICES LIBDIR = ../$(LIB_REL_DIR) INCDIR = ../include SRCDIR = ../SRC include $(SRCDIR)/make.$(PLAT) TESTLIB = sprngtest #GMPLIB = -lgmp #uncomment for pmlcg ############################################################################# # Random number libraries # lcg, lfg, or lcg64 for 48 bit, Fibonacci, and 64 bit LCG cmrg for # the combined multiple recursive genrator, pmlcg for the prime # modulus LCG, and mlfg for the multiplicative lagged Fibonacci # generator respectively. LIBLIST = cmrg # To create a new test 'xxx', place the source code in file 'xxx.c` # Then append 'xxx' to TESTLIST below. This assumes that 'xxx.c' # depends on 'tests.h' and 'util.h' alone. If there are more dependencies, # then explicitly write the commands for that. 'xxx.yyy' files are created # for each random number library 'libyyy.a' in LIBLIST. TESTLIST = maxt collisions equidist serial gap perm runs coupon poker sum random_walk wolff metropolis # # ____________________________________________________________________ # The user should normally not need to change anything below this line # _____________________________________________________________________ ############################################################################## INCLUDEDIR = -I$(INCDIR) all : $(LIBDIR)/lib$(TESTLIB).a $(TESTLIST) $(LIBDIR)/lib$(TESTLIB).a: init_tests.o util.o \ chisquare.o stirling.o communicate.o $(AR) $(ARFLAGS) $(LIBDIR)/lib$(TESTLIB).a \ init_tests.o util.o chisquare.o stirling.o communicate.o $(RANLIB) $(LIBDIR)/lib$(TESTLIB).a init_tests.o : init_tests.c $(CC) -c $(CFLAGS) $(INCLUDEDIR) $(DEF) init_tests.c util.o : util.c $(CC) -c $(CFLAGS) $(INCLUDEDIR) $(DEF) util.c stirling.o : stirling.c util.h $(CC) -c $(CFLAGS) $(INCLUDEDIR) $(DEF) stirling.c chisquare.o : chisquare.c util.h $(CC) -c $(CFLAGS) $(INCLUDEDIR) $(DEF) chisquare.c communicate.o : communicate.c $(CC) -c $(CFLAGS) $(INCLUDEDIR) $(DEF) communicate.c $(BASE).o : $(BASE).c tests.h util.h $(CC) -c $(CFLAGS) $(INCLUDEDIR) $(DEF) $(BASE).c $(TESTLIST) : @for l in $(LIBLIST) ; do \ $(MAKE) LIB=$$l BASE=$@ DEF=$(DEF) PLAT=$(PLAT) \ $@.$$l ; \ done $(BASE).$(LIB) : $(BASE).o $(LIBDIR)/lib$(TESTLIB).a $(LIBDIR)/lib$(LIB).a $(CLD) $(CLDFLAGS) -o $@ $(BASE).o -L$(LIBDIR) -l$(TESTLIB) -l$(LIB) $(GMPLIB) -lm $(MPIDIR) $(MPILIB) ####################################################################### # FFT test for parallel RNGs # fft : @for l in $(LIBLIST) ; do \ $(MAKE) LIB=$$l DEF=$(DEF) PLAT=$(PLAT) \ $@.$$l ; \ done fft.o : fft.c $(INCDIR)/sprng.h $(CC) -c $(CFLAGS) $(INCLUDEDIR) $(DEF) $(CHK) -I$(INCDIR) fft.c fft.$(LIB) : fft.o $(LIBDIR)/lib$(TESTLIB).a $(LIBDIR)/lib$(LIB).a $(CLD) $(CLDFLAGS) $(INCLUDEDIR) $(DEF) $(CHK) -I$(INCDIR) -o $@ fft.o -L$(LIBDIR) -l$(LIB) -lcomplib.sgimath -lftn $(GMPLIB) ######################################################################### clean : @rm -f *.o realclean : @rm -f *.o $(LIBDIR)/lib$(TESTLIB).a @for l in $(LIBLIST) ; do \ rm -f *.$$l ; \ done rm -f *~ core a.out .SUFFIXES : SHAR_EOF fi # end of overwriting check if test -f 'NEWGEN.TEXT' then echo shar: will not over-write existing file "'NEWGEN.TEXT'" else cat << "SHAR_EOF" > 'NEWGEN.TEXT' Instructions for testing a new generator ---------------------------------------- http://www.ncsa.uiuc.edu/Apps/SPRNG/www/test-suite.html (Section: Testing New Random Number Generators) Option 1 -------- 1. The new generator must define the following three functions: int *init_rng(int streamnum, int nstreams, int seed, int param); double get_rn_dbl(int *stream); int free_rng(int *stream); where the streams are parameterized by 'streamnum', that is, different streams are produced for different values of 'streamnum'. 2. Install your library "libnewgen.a" in sprng/lib directory. 3. Open file sprng/TESTS/Makefile. Add "newgen" to the list on the line "LIBLIST ="... . 4. Type 'make' in sprng/TESTS directory. Now, each type of test in TESTS has a new version that tests the new generator. The new version has the extension ".newgen". For example, to run the equidistribution test on the new generator, type equidist.newgen. Option 2 -------- 1. Define the macro READ_FROM_STDIN in the file sprng/TESTS/init_tests.c. 2. Type 'make' in the TESTS directory. Now the test programs will read input from standard input. If you redirect stdin from a file with floating point random numbers in ASCII from your generator, then these numbers will be tested. This procedure will not, however, work for the Ising model programs (Wolff and Metropolis.) SHAR_EOF fi # end of overwriting check if test -f 'README' then echo shar: will not over-write existing file "'README'" else cat << "SHAR_EOF" > 'README' Testing Parallel Random Number Generators ----------------------------------------- http://www.ncsa.uiuc.edu/Apps/SPRNG/www/test-suite.html This directory contains programs for testing the SPRNG random number generators. A user can also modify the code slightly to test his own generators, as explained in the file: NEWGEN.text. Most of the tests are modifications of the sequential tests from Knuth's book for testing multiple streams for parallel random number generators. The tests described below take several command line arguments each. The general format is: test nstreams ncombine seed param tests_per_stream skip test_arguments The test format and the command line arguments are explained below. We wish to determine if there are correlations between the random numbers produced by the different streams. We interleave 'ncombine' streams to produce a single sequence. For Example, if 'ncombine' = 3 and we are combining streams X,Y and Z, then then new sequence formed will be: x0, y0, z0, x1, y1, z1 ... . We then subject this new sequence to popular tests of randomness. If the individual streams are uncorrelated (and if each stream is random) then the interleaved streams too will pass tests of randomness. We test 'tests_per_stream' blocks of the interleaved sequence. The first random number of each subsequence is the one immediately following the last random number of the previous subsequence tested, provided the parameter 'skip' = 0. If that parameter is not 0, then we skip the next 'skip' random numbers in the sequence and then start the test on the next subsequence. The parameter 'nstreams' determines the number of interleaved sequences to be combined and tested. Each interleaved sequence is formed from a set streams that have not been used before. The parameter 'seed' is the encoding of the seed that is used in initializing SPRNG. 'param' is the parameter to the generator, also used while initializing SPRNG. We determine the test statistic for each of the 'nstreams*tests_per_stream' blocks tested, and then subject these test statistics to a Kolmogorov-Smirnov test from which we can obtain the probability of the streams coming from a truly random sample. The same executables can also be used to perform sequential tests on individual streams (that is, without interleaving) if we set the parameter 'ncombine' to 1. Typing 'make' in this directory after setting the variables $LIBDIR and $SRCDIR to the appropriate directory, as explained in the Makefile, will create the executables. Each test 'xxx' produces executable called 'xxx.rng' for each random number generator library 'librng.a' provided in SPRNG. The next few command line arguments vary from tests to test. We describe them below for each test. (Note: Memory requirement assumes 8-byte doubles and 4-byte integers.) collisions: n logmd logd The test is performed on 'n' '2^logmd' digit numbers in base '2^logd'. (ie, logmd = dimension, logd = # of bits considered per random number.) # of random numbers per subsequence = n*logmd # Approximate memory used = 8*nstreams*tests_per_stream + 4*n + 2^{logmd*logd} coupon: n t d We observe 'n' complete sets of integers in [0,d-1]. Sequences of length > t-1 are lumped together in the category corresponding to length 't'. # of random numbers per subsequence ~ n*d*ln(d) # Approximate memory used = 8*nstreams*tests_per_stream + 4*d + 16*(t-d+1) equidist: d n We divide the unit interval into 'd' bins and observe the distribution of 'n' random numbers. # of random numbers per subsequence = n # Approximate memory used = 8*nstreams*tests_per_stream + 16*d gap: t a b n We note the gap in the sequence between successive numbers that appear in interval [a,b], where 'a' and 'b' are in [0,1). We record 'n' gaps. Gap length greater than 't' are lumped together in a category corresponding to gap length 't+1'. # of random numbers per subsequence ~ n/(b-a) # Approximate memory used = 8*nstreams*tests_per_stream + 16*t maxt: n m 'n' blocks of length 'm' each are considered, and the largest number in each subsequence is determined. # of random numbers per subsequence = n*m # Approximate memory used = 8*nstreams*tests_per_stream + 16*n perm: m n 'n' blocks of length 'm' each are subjected to the permutations test. # of random numbers per subsequence = n*m # Approximate memory used = 8*nstreams*tests_per_stream + 8*m + 16*(m!) poker: n k d 'n' blocks of length 'k' each are considered, and the number of distinct integers in [0,d-1] are analyzed. # of random numbers per subsequence = n*k # Approximate memory used = 8*nstreams*tests_per_stream + 0.4*min(n,k) + 12*k + 4*d runs: t n 'n' runs are recorded. Runs of length greater than 't' are lumped together. # of random numbers per subsequence ~ 1.5*n # Approximate memory used = 8*nstreams*tests_per_stream + 16*t serial: d n 'n' pairs of integers in [0,d-1] are analyzed. # of random numbers per subsequence = 2*n # Approximate memory used = 8*nstreams*tests_per_stream + 16*d*d fft: (not in regular sprng format) nstreams 1 seed param nruns 0 n 'n' numbers from 'nstreams' random streams are used to fill an array. The FFT of this array is computed, and compared with the expected case. # of random numbers per run = nstreams*n # Approximate memory used = 8*nstreams*n sum: (not in regular sprng format) nstreams 1 seed param 1 0 n group_size 'group_size' numbers from nstream different streams are added to form a sum. 'n' such sums are tested for normality. # of random numbers per run = nstreams*n*group_size # Approximate memory used = 8*n Besides these statistical tests, certain physical model tests are also provided: Wolff and Metropolis algorithms for the 2-D Ising model, and a random walk test. SHAR_EOF fi # end of overwriting check if test -f 'chisquare.c' then echo shar: will not over-write existing file "'chisquare.c'" else cat << "SHAR_EOF" > 'chisquare.c' /********************************************************** Chi-Square Probability Function and Kolmogorv-Smirnov **********************************************************/ #include #include #include "util.h" #define ITMAX 10000000 /* maximum allowed number of iterations */ #define EPS 3.0e-7 /* relative accuracy */ #define FPMIN 1.0e-30 /* number near the smallest */ /* representable floating-point number */ #ifndef max #define max(a,b) (ab?b:a) #endif static char *errorMessage; long degrees_of_freedom=1; long KS_n = 1; #ifndef ANSI_ARGS #ifdef __STDC__ #define ANSI_ARGS(args) args #else #define ANSI_ARGS(args) () #endif #endif void set_d_of_f ANSI_ARGS((long df)); double chiF ANSI_ARGS((double chiSq)); double chisquare ANSI_ARGS((long *actual,double *probability,long n,long k, int *nb)); double chipercent ANSI_ARGS((double chiSq, long fr)); double gammp ANSI_ARGS((double a, double x)); double KSpercent ANSI_ARGS((double value, long n)); double KS ANSI_ARGS((double *V, long n, double (*F)(double) )); void gser ANSI_ARGS((double *gamser, double a, double x, double *gln)); void gcf ANSI_ARGS((double *gammcf, double a, double x, double *gln)); double gammln ANSI_ARGS((double xx)); void chiGammaClearErrMess ANSI_ARGS((void)); char *chiGammaReadErrMess ANSI_ARGS((void)); void chiGammaFlagError ANSI_ARGS((char *errorText)); double cum_normal(double sample, double mean, double stddev); void set_normal_params(double mu, double sd); double normalF(double x); void mean_sd(double *x, int n, double *mean, double *sd); #ifdef __STDC__ double KS(double *X, long n, double (*F)(double) ) #else double KS(X, n, F) double *X,(*F)(); long n; #endif { double *a, *b, Y, rminus, rplus, value; long *c, m, k, j; m = n+1; a = (double *) mymalloc((m+1)*sizeof(double)); b = (double *) mymalloc((m+1)*sizeof(double)); c = (long *) mymalloc((m+1)*sizeof(long)); memset(c,0,(m+1)*sizeof(long)); for(k=0; k Nmax) { double yp, p; yp = value + 1.0/6.0/sqrt((double) n); p = 1 - exp(-2.0*yp*yp); return 1.0 - 2.0*(1.0-p); /* return p;*/ } else { static double K[16][9] = {{0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0,0.0}, {0.0,0.01,0.05,0.25,0.5,0.75,0.95,0.99,1.001}, {0.0,0.014,0.06749,0.2929,0.5176,0.7071,1.098,1.2728, 1.415}, {0.0,0.01699,0.07919,0.3112,0.5147,0.7539,1.1017,1.3589, 1.733}, {0.0,0.01943,0.08789,0.3202,0.5110,0.7642,1.1304,1.3777, 2.01}, {0.0,0.02152,0.09471,0.3249,0.5245,0.7674,1.1392,1.4024, 2.237}, {0.0,0.02336,0.1002,0.3272,0.5319,0.7703,1.1463,1.4144, 2.45}, {0.0,0.02501,0.1048,0.328,0.5364,0.7755,1.1537,1.4246, 2.647}, {0.0,0.0265,0.1086,0.328,0.5392,0.7797,1.1586,1.4327, 2.829}, {0.0,0.02786,0.1119,0.3274,0.5411,0.7825,1.1624,1.4388, 3.01}, {0.0,0.02912,0.1147,0.3297,0.5426,0.7845,1.1658,1.444, 3.163}, {0.0,0.03028,0.1172,0.333,0.5439,0.7863,1.1688,1.4484, 3.318}, {0.0,0.03137,0.1193,0.3357,0.5453,0.788,1.1714,1.4521, 3.465}, {0.0,0.03424,0.1244,0.3412,0.55,0.7926,1.1773,1.4606, 3.874}, {0.0,0.03807,0.1298,0.3461,0.5547,0.7975,1.1839,1.4698, 4.473}, {0.0,0.04354,0.1351,0.3509,0.5605,0.8036,1.1916,1.4801, 5.478}}; static int index[16] = {0,1,2,3,4,5,6,7,8,9,10,11,12,15,20,30}; static double p[9] = {0.0,0.01,0.05,0.25,0.5,0.75,0.95,0.99, 1.0}; int i, j; double percent1, percent2, dist1, dist2, percentage; i = 1; while(index[i] < n) /* look up correct row for 'n' in table */ i++; j = 1; while(K[i][j] < value) /* look up percentage in table */ j++; dist1 = K[i][j]-K[i][j-1]; dist2 = K[i][j]-value; percent1 = p[j]*(dist1-dist2)/dist1 + p[j-1]*dist2/dist1; if(index[i]==n) return percent1; else { j = 1; while(K[i-1][j] < value) /* look up percentage in table */ j++; dist1 = K[i-1][j]-K[i-1][j-1]; dist2 = K[i-1][j]-value; percent2 = p[j]*(dist1-dist2)/dist1 + p[j-1]*dist2/dist1; dist1 = (double) (index[i]-index[i-1]); dist2 = (double) (index[i]-n); percentage = percent1*(dist1-dist2)/dist1+ percent2*dist2/dist1; /* return percentage;*/ return 1.0-2.0*(1.0-percentage); } } } #endif #ifdef __STDC__ double chisquare(long *actual, double *probability, long n, long k, int *nb) #else double chisquare(actual, probability, n, k,nb) long *actual, n, k; double *probability; int *nb; #endif { double V, prob; long i, n_actual, nbins; int ch; V = 0.0; for(i=n_actual=nbins=0, prob=0.0; i=5 || i==k-1) { V += (n_actual-n*prob)*(n_actual-n*prob)/ (n*prob); nbins++; n_actual = 0; prob = 0.0; } } *nb = nbins; if(nbins == 1) fprintf(stderr,"WARNING: Only one bin was used in Chisquare\n"); else if(nbins==0) fprintf(stderr,"WARNING: No bin was used in Chisquare => n was <= 5.\n"); else if(nbins != k) fprintf(stderr,"WARNING: The effective number of bins in Chisquare: %ld, was less than the given number of bins: %ld, due to the effect of combining bins in order to make the expected number of hits per bin sufficiently large.\n", nbins, k); return V; } #ifdef __STDC__ void set_d_of_f(long df) #else void set_d_of_f(df) long df; #endif { degrees_of_freedom = df; } #ifdef __STDC__ double chiF(double chiSq) /* returns the chi-square prob. */ #else double chiF(chiSq) double chiSq; #endif { return chipercent(chiSq,degrees_of_freedom); } #ifdef __STDC__ double chipercent(double chiSq, long fr) /* returns the chi-square prob. */ /* function with chi-square chiSq */ #else double chipercent(chiSq, fr) /* returns the chi-square prob. */ double chiSq; /* function with chi-square chiSq */ long fr; #endif { /* & degrees of freedom fr */ return (gammp(fr/2.0, chiSq/2.0)); } #ifdef __STDC__ double gammp(double a, double x) /* returns the incomplete gamma */ #else /* function P(a,x) */ double gammp(a, x) /* returns the incomplete gamma */ double a, x; #endif { double gamser, gammcf, gln; if (x < 0.0 || a <= 0.0) { chiGammaFlagError("Invalid arguments in routine gammp"); return (0.0); } if (x < (a + 1.0)) { /* use the series representation */ gser(&gamser,a,x,&gln); return (gamser); } else { /* use the continued fraction */ gcf(&gammcf,a,x,&gln); /* representation */ return (1.0 - gammcf); /* and take its complement */ } } #ifdef __STDC__ void gser(double *gamser, double a, double x, /* Returns the incomplete gamma*/ double *gln) /* function P(a,x) evaluated by */ #else void gser(gamser, a, x, gln) /* Returns the incomplete gamma*/ /* function P(a,x) evaluated by */ double *gamser, a, x, *gln; #endif { /* its series representation as */ /* gamser. Also returns */ /* ln(gamma(a)) as gln. */ int n; double sum, del, ap; *gln=gammln(a); if (x <= 0.0) { if (x < 0.0) chiGammaFlagError("x less than 0 in routine gser"); *gamser = 0.0; return; } else { ap = a; del = sum = 1.0/a; for (n=1; n<=ITMAX; n++) { ++ap; del *= x/ap; sum += del; if (fabs(del) < fabs(sum)*EPS) { *gamser = sum * exp(-x + a * log(x) - (*gln)); return; } } chiGammaFlagError("a too large, ITMAX too small in routine gser"); return; } } #ifdef __STDC__ void gcf(double *gammcf, double a, double x, /* Returns the complement */ double *gln) /* imcomplete gamma function */ #else void gcf(gammcf, a, x, gln) /* Returns the complement */ /* imcomplete gamma function */ double *gammcf, a, x, *gln; #endif { /* Q(a,x) evaluated by its */ /* continued fraction rep. as */ /* gammcf. Also returns */ /* ln(gamma(a)) as gln */ int i; double an, b, c, d, del, h; *gln = gammln(a); b = x + 1.0 - a; /* set up for evaluating */ c = 1.0 / FPMIN; /* continued fraction by modified*/ d = 1.0 / b; /* Lentz' method with b0=0 */ h = d; for (i=1;i<=ITMAX;i++) { /* iterate to convergence */ an = -i * (i - a); b += 2.0; d = an * d + b; if (fabs(d) < FPMIN) d = FPMIN; c = b + an / c; if (fabs(c) < FPMIN) c = FPMIN; d = 1.0 / d; del = d * c; h *= del; if (fabs(del-1.0) < EPS) break; } if (i > ITMAX) { chiGammaFlagError("a too large, ITMAX too small in gcf"); return; } *gammcf = exp(-x + a * log(x) - (*gln)) * h; /* put factors in front */ } #ifdef __STDC__ double gammln(double xx) /* returns the value */ #else double gammln(xx) /* returns the value */ double xx; #endif { /* ln(gamma(xx)) for xx > 0*/ double x, y, tmp, ser; static double cof[6] = { 76.18009172947146, -86.50532032941677, 24.01409824083091, -1.231739572450155, 0.1208650973866179e-2, -0.5395239384953e-5}; int j; y = x = xx; tmp = x + 5.5; tmp -= (x + 0.5) * log(tmp); ser = 1.000000000190015; for (j=0; j<=5; j++) ser += cof[j]/++y; return (-tmp + log(2.5066282746310005 * ser / x)); } #ifdef __STDC__ void chiGammaClearErrMess(void) /* clears error message buffer */ #else void chiGammaClearErrMess() #endif { errorMessage = NULL; } #ifdef __STDC__ char *chiGammaReadErrMess(void) /* returns the error message */ #else char *chiGammaReadErrMess() #endif { /* from the buffer */ return (errorMessage); } #ifdef __STDC__ void chiGammaFlagError(char *errorText) /* writes to the error message */ #else void chiGammaFlagError(errorText) char *errorText; #endif { /* buffer */ errorMessage = errorText; } #if 0 #ifdef __STDC__ main(int argc, char *argv[]) #else main(argc,argv) int argc; char *argv[]; #endif { double p[1000000], value; long obs[1000000], n; double X[10]; int i, nb; set_d_of_f(99999); /*printf("\nChi square probability for V = %f, degrees of freedom = %d is: %f\n\n", 34.76,50,chiF(34.76));*/ /*for(i=0; i<1000000; i++) { p[i] = (double) 1/1000000; obs[i] = 10; }*/ p[0] = 0.2; p[1] = 0.5; p[2] = 0.3; obs[0] = 30; obs[1] = 30; obs[2] = 40; /*printf("\n chisquare value = %f\n\n", chisquare(obs,p,10000000L,1000000L, &nb));*/ printf("\n chisquare value = %f, nbins = %d\n\n", chisquare(obs,p,100,3, &nb), nb); /*** wrong values of nb may be obtained because function argument evaluation order is not defined. Beware! ***/ /*value = atof(argv[1]); n = atoi(argv[2]); printf("\nd = %f,KS = %f\n\n", value, KSpercent(value,n));*/ set_d_of_f(1000); /*X[0] = 10.0; X[1] = 13.0; X[2] = 5.0; X[3] = 15.0; X[4] = 11.5; X[5] = 4.0; X[6] = 8.0; X[7] = 9.0; X[8] = 6.0; X[9] = 7.0;*/ /*printf("KS = %.14f\n", KS(p,1000000,chiF));*/ } #endif /* Reference: NIST -- NORCDF available on netlib */ double cum_normal(double sample, double mean, double stddev) { double a, b, c, d, e, f, g, h, temp; a = 0.319381530 ; b = -0.356563782; c = 1.781477937; d = -1.821255978; e = 1.330274429; f = .2316419; if(stddev <= 0.0) return -1.0; sample = (sample - mean)/stddev; if(sample < 0.0) temp = -sample; else temp = sample; g = 1.0/(1.0+f*temp); h = 1.0 - (0.39894228040143*exp(-0.5*temp*temp)) *(a*g + b*g*g + c*g*g*g + d*g*g*g*g + e*g*g*g*g*g); if(sample < 0.0) h=1.0-h; return h; } static double normal_mu; static double normal_sd; void set_normal_params(double mu, double sd) { normal_mu = mu; normal_sd = sd; } double normalF(double x) { return cum_normal(x,normal_mu,normal_sd); } void mean_sd(double *x, int n, double *mean, double *sd) { double ave, var, diff, error; int i; ave = 0.0; for(i=0; i 'collisions.c' #include #include "tests.h" #include #ifndef ANSI_ARGS #ifdef __STDC__ #define ANSI_ARGS(args) args #else #define ANSI_ARGS(args) () #endif #endif void init_collision ANSI_ARGS((long n, int logmd, int logd)); long collision ANSI_ARGS((long n, int logmd, int logd)); double identity ANSI_ARGS((double d)); void compute_probability ANSI_ARGS((double *A, int n, int m)); #define MIN_CHISQ_NTESTS 50 int *array, *mask; int arraysize, intsize; double *probability; #ifdef __STDC__ int main(int argc, char *argv[]) #else int main(argc, argv) int argc; char *argv[]; #endif { long ntests, n, i, *bins, ncollisions; double *V, result; int logmd, logd, size, Bins_used; if(argc != N_STREAM_PARAM + 4) { fprintf(stderr,"USAGE: %s (... %d arguments)\n",argv[0], N_STREAM_PARAM+3); exit(1); } ntests = init_tests(argc,argv); n = atol(argv[N_STREAM_PARAM+1]); logmd = atoi(argv[N_STREAM_PARAM+2]); logd = atoi(argv[N_STREAM_PARAM+3]); if(logmd*logd > 31) { fprintf(stderr,"ERROR: log(m-d)*log(d) = %d must be less than 32\n", logmd*logd); exit(1); } if( (1<<(logmd*logd)) < n) { fprintf(stderr,"ERROR: m = %d must be at least as high as n = %ld\n", (1<<(logmd*logd)), n); exit(1); } if( NTESTS < MIN_CHISQ_NTESTS) V = (double *) mymalloc(NTESTS*sizeof(double)); else { bins = (long *) mymalloc((n+1)*sizeof(long)); memset(bins,0,(n+1)*sizeof(long)); } init_collision(n,logmd,logd); for(i=0; i 0) size++; arraysize = size; array = (int *) mymalloc(arraysize*sizeof(int)); mask = (int *) mymalloc(intsize*sizeof(int)); tempmask = 1; for(i=0; i=j0; j--) { A[j] = (double) j/(double) m *A[j] + ( (1.0+1.0/(double)m) - (double)j/(double)m )*A[j-1]; if( A[j] < 1.0e-20 ) { A[j] = 0.0; if(j == j1) j1--; else if(j == j0) j0++; } } } if(NTESTS < MIN_CHISQ_NTESTS && sqrt((double)NTESTS/(double)(j1-j0+1)) > 0.5) { fprintf(stderr,"WARNING: Error in KS estimate may be ~ %f\n", sqrt((double)NTESTS/(double)(j1-j0+1))); if(NTESTS*n > 1.0e10) /* We cannot afford to waste large amounts ... */ { /* ... of computer time */ fprintf(stderr,"Exiting ... \n"); exit(-1); } } if(NTESTS < MIN_CHISQ_NTESTS) { for(j=j1-1; j>=j0; j--) A[j] += A[j+1]; if(A[j0] >= 1.0) A[j0] = 1.0 - 1.0e-7; /* returning 1.0 confuses the KS test! */ } } #ifdef __STDC__ long collision(long n, int logmd, int logd) #else long collision(n, logmd, logd) int logmd, logd; long n; #endif { long m, i, ncollisions; int d, j, index, bit; unsigned int temp, num; d = 1< 'communicate.c' #ifdef SPRNG_MPI #include #endif #include "util.h" #define SPRNG_MPI_KS 0 extern int proc_rank, init_nprocs, nsubsequences; #ifdef __STDC__ void getKSdata (double *V, long ntests) #else void getKSdata (V, ntests) double *V; long ntests; #endif { int nprocs, myid, i, nsets; long first, last; #ifdef SPRNG_MPI MPI_Status status; myid = proc_rank; nprocs = init_nprocs; nsets = ntests/nsubsequences; first = (nsets*myid/nprocs)*nsubsequences; last = (nsets*(myid+1)/nprocs)*nsubsequences - 1; if(myid != 0) MPI_Send(V, last-first+1, MPI_DOUBLE, 0, SPRNG_MPI_KS, MPI_COMM_WORLD); else for(i=1; i 'coupon.c' #include #include "tests.h" #ifndef ANSI_ARGS #ifdef __STDC__ #define ANSI_ARGS(args) args #else #define ANSI_ARGS(args) () #endif #endif void init_coupon ANSI_ARGS((long n, int t, int d)); double coupon ANSI_ARGS((long n, int t, int d)); double stirling ANSI_ARGS((int n, int m)); int *occurs, Bins_used=0; long *count; double *probability; #ifdef __STDC__ main(int argc, char *argv[]) #else main(argc, argv) int argc; char *argv[]; #endif { long ntests, n, i; double *V, result; int t, d; if(argc != N_STREAM_PARAM + 4) { fprintf(stderr,"USAGE: %s (... %d arguments)\n",argv[0], N_STREAM_PARAM+3); exit(1); } ntests = init_tests(argc,argv); V = (double *) mymalloc(NTESTS*sizeof(double)); n = atol(argv[N_STREAM_PARAM+1]); t = atoi(argv[N_STREAM_PARAM+2]); d = atoi(argv[N_STREAM_PARAM+3]); if(t<=d) { fprintf(stderr,"ERROR: t = %d must be greater than d = %d\n", t, d); exit(1); } init_coupon(n,t,d); for(i=0; i= t-d) count[t-d]++; else count[r]++; } answer = chisquare(count,probability,n, t-d+1, &Bins_used); /*printf("\tChisquare for stream = %f, %% = %f\n", answer, chipercent(answer,t-d+1));*/ return answer; } SHAR_EOF fi # end of overwriting check if test -f 'equidist.c' then echo shar: will not over-write existing file "'equidist.c'" else cat << "SHAR_EOF" > 'equidist.c' /********************************************************************* Equidistribution Test *********************************************************************/ #include #include #include "tests.h" /* # of parameters for the test engin */ #define NUM_TEST_ENGIN_PARAM 2 /* # of divisions between [0,1) */ static long numDiv; /* # of random numbers being tested */ static long numRanNum; /* # of tests repeated */ static long numRepeat; /* Array of bins */ static long *bins; /* Array of corresponding probabilities */ static double *probs; /* Array of chi-squares */ static double *chiSqrs; /********************************************************************/ #define FATAL_ABORT printf("Program terminated.\n"); exit(0) /*------------------------------------------------------------------*/ #ifdef __STDC__ void initTest(int argc, char *argv[]) { #else void initTest(argc, *argv[]) int argc; char *argv[]; { #endif int numParam=NUM_TEST_ENGIN_PARAM+N_STREAM_PARAM; long index; double temp; if (argc<(numParam+1)) { printf("Error: %i number of parameters needed\n", numParam); FATAL_ABORT; } numDiv = atol(argv[N_STREAM_PARAM+1]); numRanNum = atol(argv[N_STREAM_PARAM+2]); if ((numDiv<=0) || (numRanNum<=0)) { printf("Error: incorrect parameter value(s)\n"); FATAL_ABORT; } numRepeat = init_tests(argc, argv); bins = mymalloc(sizeof(long)*numDiv); probs = mymalloc(sizeof(double)*numDiv); chiSqrs = mymalloc(sizeof(double)*NTESTS); temp = 1.0 / numDiv; for (index=0;index 'fft.c' /****************************************************************************/ /* Note: This test is not in the regular SPRNG test format */ /* */ /* _________ 2D FFT test _________ */ /* */ /* Type: make fft to compile this program; it is not automatically made */ /* */ /* The FFT routine is based on that on the Power Challenge array at NCSA */ /* Please make changes on your machine. (routines dzfft*) */ /* */ /* We fill a random array with 'n' numbers from 'nstreams' streams. */ /* We then compute the 2D FFT for this array. The expected value for all */ /* terms except the constant one is 0. The standard deviation too can be */ /* determined theoretically. We check to see if most of the coefficients */ /* are acceptable based on how far they are from the expected value. As */ /* its output, this program prints the coeffieients that fall outside a */ /* a certain acceptable range. We should alway expect a number of them */ /* to fall outside the range. However, in repeated runs of this test, we */ /* would expect that the same coefficients do not keep falling outside */ /* the range each time. */ /* */ /* Each column of the array consists of numbers from the same stream. */ /* Note that we use a *** column major *** order, due to the requirements */ /* of the SGI software. The Fourier coeffients are stored in place. This */ /* can be done, even though the results are complex because only about half */ /* the coefficients are needed; the other half can be determined from the */ /* ones computed. We need slightly more than 'n' rows, and the number of */ /* rows needed for the coefficients is given by 'lda'. */ /****************************************************************************/ #include /*#if defined(SPRNG_MPI) #include "mpi.h" #endif*/ #if defined(SPRNG_MPI) #undef SPRNG_MPI #endif #include "sprng.h" #include #include void Analyze(int nstreams, int nruns, int n); void FFTCalc (int nstreams, int nruns, int n); int **streams, lda; double *means, *FFTcoeffs; void main (int argc, char *argv[]) { int i, seed, param, nruns, nstreams, n, *stream, myid=0, nprocs=1; #ifdef SPRNG_MPI MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &myid); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); if(myid != 0) /* This is a sequential program currently */ { MPI_Finalize(); exit(0); } #endif /**************************** Initialization *****************************/ if(argc != 8 || atoi(argv[2]) != 1 || atoi(argv[6]) != 0) { fprintf(stderr,"USAGE: %s nstreams 1 seed param nruns 0 n\n", argv[0]); exit(-1); } else if(atoi(argv[1]) < 1 || atoi(argv[5]) < 1 || atoi(argv[7]) < 1 ) { fprintf(stderr,"ERROR: nstreams, nruns, and n must be > 0\n"); exit(-1); } nstreams = atoi(argv[1]); /* number of streams */ param = atoi(argv[4]); /* parameter to the generator */ nruns = atoi(argv[5]); /* number of runs to repeat */ n = atoi(argv[7]); /* number of random numbers per stream */ if(n&1) /* number of rows for Fourier coefficients */ lda = n+1; else lda = n+2; FFTcoeffs = (double *) malloc(lda*nstreams*sizeof(double)); /* FFT coeffs */ means = (double *) malloc(lda*nstreams*sizeof(double)); /* average coeffs */ streams = (int **) malloc(nstreams*sizeof(int *)); /*random number streams*/ for(i=0; i mult*StdDev1) /* Check constant term */ { count++; printf("%d. (0,0) th coefficient exceeds ~ %g th percentile: Expected = %g, observed = %g, StdDev = %g\n\n", count, percentile, mean1, means[0], StdDev1); } for (j=0; j mult*StdDev) /* Real part of coeff. */ { count++; printf("%d. Real part of (%d,%d) th coefficient exceeds ~ %g th percentile: Expected = %g, observed = %g, StdDev = %g\n\n", count, i, j, percentile, mean2, means[2*i+j*lda], StdDev); } if(fabs(means[2*i+j*lda+1]-mean2) > mult*StdDev) /* Imaginary part */ { count++; printf("%d. Complex part of (%d,%d) th coefficient exceeds ~ %g th percentile: Expected = %g, observed = %g, StdDev = %g\n\n", count, i, j, percentile, mean2, means[2*i+j*lda+1], StdDev); } } printf("No other coefficient exceeds %g th percentile\n\n", percentile); return; } /* Perform FFT on random arrays. Each column is from the same stream. */ /* There are n rows per column, and nstream rows */ void FFTCalc(int nstreams, int nruns, int n) { int i,j,k; double *coeff; for(k=0; k 'gap.c' /********************************************************************* Gap Test *********************************************************************/ #include #include #include "tests.h" #define NUM_TEST_ENGIN_PARAM 4 static int maxGapLen; static double lowerBound, upperBound; static long numTotGap; static int numBin; static long numRepeat; static long *bins; static double *probs; static double *chiSqrs; /********************************************************************/ #define FATAL_ABORT printf("Program terminated.\n"); exit(0) /*------------------------------------------------------------------*/ #ifdef __STDC__ void initTest(int argc, char *argv[]) { #else void initTest(argc, argv) int argc; char *argv[]; { #endif int numParam=NUM_TEST_ENGIN_PARAM+N_STREAM_PARAM; int index; if (argc<(numParam+1)) { printf("Error: %i number of parameters needed\n", numParam); FATAL_ABORT; } maxGapLen = atoi(argv[N_STREAM_PARAM+1]); lowerBound = atof(argv[N_STREAM_PARAM+2]); upperBound = atof(argv[N_STREAM_PARAM+3]); numTotGap = atol(argv[N_STREAM_PARAM+4]); if ((maxGapLen<0) || (lowerBound<0.0) || (upperBound<=lowerBound) || (1.0 max" cases */ numBin = maxGapLen + 2; numRepeat = init_tests(argc, argv); bins = mymalloc(sizeof(long)*numBin); probs = mymalloc(sizeof(double)*numBin); chiSqrs = mymalloc(sizeof(double)*NTESTS); probs[0] = upperBound - lowerBound; for (index=1;index=upperBound)); \ \ /* Add (gapLen<0) clause to catch overflow */ \ if ((gapLen>maxGapLen) || (gapLen<0)) bins[numBin-1]++; \ else bins[gapLen]++; \ } /********************************************************************/ #ifdef __STDC__ void main(int argc, char *argv[]) { #else void main(argc, argv) int argc; char *argv[]; { #endif long curRound, index; double KSvalue, KSprob; int Bins_used; initTest(argc, argv); for (curRound=0;curRound 'init_tests.c' #ifdef SPRNG_MPI #include #endif #include /*#define READ_FROM_STDIN*/ /* read random numbers from stdin */ #ifndef READ_FROM_STDIN #include "sprng.h" #endif #include "util.h" #ifndef ANSI_ARGS #ifdef __STDC__ #define ANSI_ARGS(args) args #else #define ANSI_ARGS(args) () #endif #endif #define OFFSET 0 /* set offset to 'k' to start tests from the k th stream onwards */ long NTESTS = 0; int proc_rank=0, init_nprocs=1; int nsubsequences=0; static int init_seed, init_param, init_total; static int current_subsequence; static long current_group, first_group, init_ngroups; static int **gens, current_gen, n_combine, skip; long init_streams ANSI_ARGS((int argc, char *argv[])); void next_stream ANSI_ARGS((void)); double get_rn ANSI_ARGS((void)); #ifdef READ_FROM_STDIN /* read random numbers from stdin */ int *init_sprng(int a, int b, int c, int d) { return NULL; } int free_sprng(int *a) { return 0; } double sprng(int *a) { double rn; scanf("%lf", &rn); return rn; } #endif #ifdef __STDC__ long init_tests(int argc, char *argv[]) #else long init_tests(argc, argv) int argc; char *argv[]; #endif { long n; #ifdef SPRNG_MPI MPI_Init(&argc, &argv); #endif if(argc < 6+1) { fprintf(stderr,"Usage: %s n_sets ncombine seed param nsubsequences skip test_arguments\n", argv[0]); exit(-1); } if(atoi(argv[2]) <= 0) { fprintf(stderr,"Error: Second command line argument should be greater than 0\n"); exit(-1); } if(atoi(argv[5]) <= 0) { fprintf(stderr,"Error: Fifth command line argument should be greater than 0\n"); exit(-1); } n = init_streams(argc, argv); return n; } #ifdef __STDC__ long init_streams(int argc, char *argv[]) #else long init_streams(argc, argv) int argc; char *argv[]; #endif { int seed, param, n, i, j; int myid = 0, nprocs = 1; long k; n = atoi(argv[1]); n_combine = atoi(argv[2]); seed = atoi(argv[3]); param = atoi(argv[4]); nsubsequences = atoi(argv[5]); skip = atoi(argv[6]); #ifdef SPRNG_MPI MPI_Comm_rank(MPI_COMM_WORLD, &myid); MPI_Comm_size(MPI_COMM_WORLD, &nprocs); proc_rank = myid; init_nprocs = nprocs; #endif if(proc_rank == 0) { for(i=0; i 0) for(i=0; i first_group && current_group < first_group+init_ngroups) for(i=0; i first_group && current_group > first_group+init_ngroups) printf("ERROR: current_pair = %ld not in allowed range [%d,%ld]\n", current_group,0,init_ngroups-1 ); } } #ifdef __STDC__ double get_rn(void) #else double get_rn() #endif { double temp; temp = sprng(gens[current_gen]); current_gen = (current_gen+1)%n_combine; return temp; } #if 0 #ifdef __STDC__ main(int argc, char *argv[]) #else main(argc, argv) int argc; char *argv[]; #endif { int n, i, j, length; n = init_tests(argc,argv); length = atoi(argv[7]); for(i=0; i 'maxt.c' #include #include "tests.h" #include #ifndef ANSI_ARGS #ifdef __STDC__ #define ANSI_ARGS(args) args #else #define ANSI_ARGS(args) () #endif #endif double xt ANSI_ARGS((double x)); double maxt ANSI_ARGS((long n, int t)); void set_t ANSI_ARGS((int t)); double *V2; int xt_t = 1; #ifdef __STDC__ main(int argc, char *argv[]) #else main(argc, argv) int argc; char *argv[]; #endif { long ntests, n, i; double *V, result; int t; if(argc != N_STREAM_PARAM + 3) { fprintf(stderr,"USAGE: %s (... %d arguments)\n",argv[0], N_STREAM_PARAM+2); exit(1); } ntests = init_tests(argc,argv); n = atol(argv[N_STREAM_PARAM+1]); t = atoi(argv[N_STREAM_PARAM+2]); V = (double *) mymalloc(NTESTS*sizeof(double)); V2 = (double *) mymalloc(n*sizeof(double)); for(i=0; i V[i]) V[i] = temp; } } set_t(t); temp = KS(V,n,xt); /*printf("\tKS for stream = %f, %% = %f\n", temp, KSpercent(temp,n));*/ /*free(V);*/ return temp; } SHAR_EOF fi # end of overwriting check if test -f 'metropolis.c' then echo shar: will not over-write existing file "'metropolis.c'" else cat << "SHAR_EOF" > 'metropolis.c' /********************************************************************* * * * metropolis.c * * * *********************************************************************/ #include #include #include #include "sprng.h" #define PARALLEL #define SYNC int lattice_size, *spin, nsites; int **genptr; /* array of random number generators */ int exponent, mask; /* Used for efficiency purposes */ double prob; double Energy[10][10], Cv[10][10], J=0.4406868; double expJarray[17], *expJ; double exact_energy=-1.4530649029, exact_Cv=1.4987048885; /***** This is correct ONLY for a 16x16 lattice!!****** */ int RNG() /* Random number generator used for initializations alone */ { static int seed=17; seed=16807*(seed%127773)-(seed/127773)*2836; if(seed<0) seed+=2147483647; else if(seed > 2147483647) { seed--; seed -= 2147483647; } return seed; } int neighbor[4]; int diff(int Ispin) { int i, s=0; if(Ispin>0) for(i=0; i<4; i++) s+=neighbor[i]; else for(i=0; i<4; i++) s-=neighbor[i]; return s<<1; } int energy_difference(int site) { int diffE; int ix, iy; ix=site>>exponent; iy=site&mask; if(iy==0) neighbor[0]=spin[site+lattice_size-1]; else neighbor[0]=spin[site-1]; if(iy==lattice_size-1) neighbor[2]=spin[ix*lattice_size]; else neighbor[2]=spin[site+1]; if(ix==0) neighbor[1]=spin[lattice_size*(lattice_size-1)+iy]; else neighbor[1]=spin[site-lattice_size]; if(ix==lattice_size-1) neighbor[3]=spin[iy]; else neighbor[3]=spin[site+lattice_size]; diffE=diff(spin[site]); return diffE; } int System_Energy() /* Compute energy of lattice */ { int E =0; int i, j, s; for(i=0, s=0; isprng(genptr[k])){ #elif !SYNC if(dE<=0 || expJ[dE]>sprng(genptr[k])){ #endif energy += dE; spin[k] = -spin[k]; } } average_E += energy; average_Cv += energy*energy; } average_E /= (double) block_size*nsites; /*compute average of quantities */ average_Cv /= (double) block_size; if(i>=10*divisor) /* make scale logarithmic for printing results */ { divisor *= 10; row++; } col = i/divisor; average_E /= divisor; average_Cv /= divisor; Energy[row][col] += average_E; Cv[row][col] += average_Cv; for(k=row+1; k<10; k++) { average_E /= 10; average_Cv /= 10; Energy[k][0] += average_E; Cv[k][0] += average_Cv; } if(old_row != row) { compute(old_row); old_row = row; } } compute(old_row); } void initialize(int seed, int param, int use_blocks) { int i, j, temp; expJ = expJarray+8; for(i=-8; i<9; i++) expJ[i] = exp(-J*i); nsites = lattice_size*lattice_size; prob = 1 - exp(-2.0*J); for(i=0; i<10; i++) for(j=0; j<10; j++) Energy[i][j] = Cv[i][j] = 0.0; spin = malloc(nsites*sizeof(int)); if(!spin) { printf("\n\tMemory allocation failure, program exits!\n"); exit(-1); } for(i=0; iprob)?1:-1; /* here assume that expo is integer exponent of 2 */ temp = mask=lattice_size-1; exponent = 0; /* expo = log_2(lattice_size) */ while(temp) { exponent++; temp >>= 1; } /* initialize generator */ genptr = (int **) malloc(nsites*sizeof(int *)); genptr[0] = init_sprng(0,nsites,seed,param); print_sprng(genptr[0]); for(i=1; i 0\n", lattice_size); exit(-1); } if(block_size<=0) { printf("ERROR: Block_size %d should be > 0\n", block_size); exit(-1); } if(discard_blocks<0) { printf("ERROR: discard_blocks %d should be >= 0\n", discard_blocks); exit(-1); } if(use_blocks<=0) { printf("ERROR: use_blocks %d should be > 0\n", use_blocks); exit(-1); } if((lattice_size&(lattice_size-1)) != 0) /* check if lattice_size = 2^n */ { printf("ERROR: lattice_size %d should be a positive power of 2\n", lattice_size); exit(-1); } if(lattice_size!=16) { printf("WARNING: The current code gives error values correctly only for a 16x16 lattice.\n\t... The Energy_error and Cv_error columns are incorrect.\n\t... Please use the Energy and Cv values and compute error from the exact solution.\n"); } while(use_blocks) /* check if use_blocks is a power of 10 */ { if(use_blocks%10 != 0 && use_blocks!=1) { printf("ERROR: use_blocks %d should be a power of 10\n", use_blocks); exit(-1); } use_blocks /= 10; } } /************** 'Thermalize' system so that results are not influenced by the initial conditions *************/ void thermalize(int block_size, int discard_blocks) { int i, j, k, dE; for(i=0; isprng(genptr[k])) #elif !SYNC if(dE<=0 || expJ[dE]>sprng(genptr[k])) #endif { spin[k] = -spin[k]; } } } /* block_size*use_blocks sweeps through a lattice of size lattice_size*lattice_size using the Metropolis algorithm for the Ising model */ void main(int argc, char **argv) { int seed, param, block_size, discard_blocks, use_blocks; /****************** Read and check Arguments ********************/ if(argc==7 ) { argv++; seed = atoi(*argv++); param = atoi(*argv++); lattice_size = atoi(*argv++); block_size = atoi(*argv++); discard_blocks = atoi(*argv++); use_blocks = atoi(*argv++); check_arguments(lattice_size, block_size, discard_blocks, use_blocks); #ifdef PARALLEL printf("Metropolis Algorithm with Parallel RNG\n"); #else printf("Metropolis Algorithm with Serial RNG\n"); #endif printf("lattice_size = %d, block_size = %d, discard_blocks = %d, use_blocks = %d\n", lattice_size, block_size, discard_blocks, use_blocks); } else { printf("USAGE: %s seed param lattice_size block_size discard_blocks use_blocks\n", argv[0]); exit(-1); } initialize(seed, param, use_blocks); /* initalize data */ /************** 'Thermalize' system so that results are not influenced by the initial conditions *************/ thermalize(block_size, discard_blocks); /********** Perform the actual Metropolis algorithm calculations *********/ metropolis(block_size, use_blocks); } SHAR_EOF fi # end of overwriting check if test -f 'mytest.c' then echo shar: will not over-write existing file "'mytest.c'" else cat << "SHAR_EOF" > 'mytest.c' #include #include "tests.h" double mytest (long n); main(int argc, char *argv[]) { long ntests, n, i; double *V, result; ntests = init_tests(argc,argv); V = (double *) mymalloc(NTESTS*sizeof(double)); n = atol(argv[N_STREAM_PARAM+1]); for(i=0; i 0.5) actual[0]++; else actual[1]++; } return chisquare(actual,expected,n,2,&temp2); } SHAR_EOF fi # end of overwriting check if test -f 'perm.c' then echo shar: will not over-write existing file "'perm.c'" else cat << "SHAR_EOF" > 'perm.c' /********************************************************************* Permutation Test *********************************************************************/ #include #include #include "tests.h" /* # of parameters for the test engin */ #define NUM_TEST_ENGIN_PARAM 2 /* Size of each group */ static int grpSize; /* # of groups in each test */ static long numGrp; /* # of bins */ static long numBin; /* # of tests repeated */ static long numRepeat; /* One group of random numbers */ static double *oneGrp; /* Array of bins */ static long *bins; /* Array of corresponding probabilities */ static double *probs; /* Array of chi-squares */ static double *chiSqrs; /********************************************************************/ #define FATAL_ABORT printf("Program terminated.\n"); exit(0) /*------------------------------------------------------------------*/ #ifdef __STDC__ void initTest(int argc, char *argv[]) { #else void initTest(argc, argv) int argc; char *argv[]; { #endif int numParam=NUM_TEST_ENGIN_PARAM+N_STREAM_PARAM; long index; double temp; if (argc<(numParam+1)) { printf("Error: %i number of parameters needed\n", numParam); FATAL_ABORT; } grpSize = atoi(argv[N_STREAM_PARAM+1]); numGrp = atol(argv[N_STREAM_PARAM+2]); if ((grpSize<=0) || (numGrp<=0)) { printf("Error: incorrect parameter value(s)\n"); FATAL_ABORT; } for (numBin=index=1;index<=grpSize;index++) numBin *= index; numRepeat = init_tests(argc, argv); oneGrp = mymalloc(sizeof(double)*grpSize); bins = mymalloc(sizeof(long)*numBin); probs = mymalloc(sizeof(double)*numBin); chiSqrs = mymalloc(sizeof(double)*NTESTS); temp = 1.0 / numBin; for (index=0;index1;r--) { \ for (index=1,maxPos=0;index 'poker.c' #include #include "tests.h" #include #ifndef ANSI_ARGS #ifdef __STDC__ #define ANSI_ARGS(args) args #else #define ANSI_ARGS(args) () #endif #endif void init_poker ANSI_ARGS((long n, int k, int d)); double poker ANSI_ARGS((long n, int k, int d)); double stirling ANSI_ARGS((int n, int m)); static int ncatagories = 0, *bins, *index, Bins_used=0; long *actual; double *probability; #ifdef __STDC__ main(int argc, char *argv[]) #else main(argc, argv) int argc; char *argv[]; #endif { long ntests, n, i; double *V, result; int k, d; if(argc != N_STREAM_PARAM + 4) { fprintf(stderr,"USAGE: %s (... %d arguments)\n",argv[0], N_STREAM_PARAM+3); exit(1); } ntests = init_tests(argc,argv); V = (double *) mymalloc(NTESTS*sizeof(double)); n = atol(argv[N_STREAM_PARAM+1]); k = atoi(argv[N_STREAM_PARAM+2]); d = atoi(argv[N_STREAM_PARAM+3]); init_poker(n,k,d); for(i=0; i 5 && i < k) { sum = 0; ncatagories++; } } ncatagories++; actual = (long *) mymalloc(ncatagories*sizeof(long)); probability = (double *) mymalloc(ncatagories*sizeof(double)); for(i=0; i< ncatagories; i++) probability[i] = 0.0; for(i=1; i<=k; i++) probability[index[i]] += pr[i]; free(pr); } #ifdef __STDC__ double poker(long n, int k, int d) #else double poker(n, k, d) int k, d; long n; #endif { double temp; int j, sum, temp2; long i; memset(actual, 0, ncatagories*sizeof(long)); for(i=0; i 'random_walk.c' /* A two-dimensional random walk test based on the code of I. Vattulainen, et al */ #include #include "tests.h" #include #define sgn(a) ((a<0)?0:1) #ifndef ANSI_ARGS #ifdef __STDC__ #define ANSI_ARGS(args) args #else #define ANSI_ARGS(args) () #endif #endif void random_walk ANSI_ARGS((int walk_length, double *quadrant)); #ifdef __STDC__ main(int argc, char *argv[]) #else main(argc, argv) int argc; char *argv[]; #endif { long ntests, walk_length, i; double result, expected, chisum, quadrant[4]; quadrant[0] = quadrant[1] = quadrant[2] = quadrant[3] = 0; if(argc != N_STREAM_PARAM + 2) { fprintf(stderr,"USAGE: %s (... %d arguments)\n",argv[0], N_STREAM_PARAM+1); exit(1); } ntests = init_tests(argc,argv); walk_length = atoi(argv[N_STREAM_PARAM+1]); for(i=0; i 0.75) x++; else if(rn > 0.5) x--; else if(rn > 0.25) y++; else y--; } if(x == 0 && y == 0) { quadrant[0] += 0.25; quadrant[1] += 0.25; quadrant[2] += 0.25; quadrant[3] += 0.25; } else if(x == 0) { quadrant[sgn(y)] += 0.5; quadrant[2+sgn(y)] += 0.5; } else if(y == 0) { quadrant[2*sgn(x)] += 0.5; quadrant[2*sgn(x)+1] += 0.5; } else quadrant[2*sgn(x)+sgn(y)] += 1.0; } SHAR_EOF fi # end of overwriting check if test -f 'runs.c' then echo shar: will not over-write existing file "'runs.c'" else cat << "SHAR_EOF" > 'runs.c' /********************************************************************* Run Test *********************************************************************/ #include #include #include "tests.h" /* # of parameters for the test engin */ #define NUM_TEST_ENGIN_PARAM 2 /* Maximum run length */ static int maxRunLen; /* # of runs in each test */ static long numRun; /* # of bins */ static int numBin; /* # of tests repeated */ static long numRepeat; /* Array of bins */ static long *bins; /* Array of corresponding probabilities */ static double *probs; /* Array of chi-squares */ static double *chiSqrs; /********************************************************************/ #define FATAL_ABORT printf("Program terminated.\n"); exit(0) /*------------------------------------------------------------------*/ #ifdef __STDC__ void initTest(int argc, char *argv[]) { #else void initTest(argc, argv) int argc; char *argv[]; { #endif int numParam=NUM_TEST_ENGIN_PARAM+N_STREAM_PARAM; int index; if (argc<(numParam+1)) { printf("Error: %i number of parameters needed\n", numParam); FATAL_ABORT; } maxRunLen = atoi(argv[N_STREAM_PARAM+1]); numRun = atol(argv[N_STREAM_PARAM+2]); if ((maxRunLen<=0) || (numRun<=0)) { printf("Error: incorrect parameter value(s)\n"); FATAL_ABORT; } /* +1 to include ">maxRunLen" case */ numBin = maxRunLen + 1; numRepeat = init_tests(argc, argv); bins = mymalloc(sizeof(long)*numBin); probs = mymalloc(sizeof(double)*numBin); chiSqrs = mymalloc(sizeof(double)*NTESTS); probs[0] = 0.5; for (index=2;indexmaxRunLen) || (theLen<1)) bins[numBin-1]++; \ else bins[theLen-1]++; \ } /********************************************************************/ #ifdef __STDC__ void main(int argc, char *argv[]) { #else void main(argc, argv) int argc; char *argv[]; { #endif long curRound, index; double KSvalue, KSprob; int i, Bins_used; initTest(argc, argv); for (curRound=0;curRound 'serial.c' /********************************************************************* Serial Test *********************************************************************/ #include #include #include "tests.h" /* # of parameters for the test engin */ #define NUM_TEST_ENGIN_PARAM 2 /* # of divisions between [0,1) */ static long numDiv; /* # of random-numbers pairs being tested */ static long numPair; /* # of bins */ static long numBin; /* # of tests repeated */ static long numRepeat; /* Array of bins */ static long *bins; /* Array of corresponding probabilities */ static double *probs; /* Array of chi-squares */ static double *chiSqrs; /********************************************************************/ #define FATAL_ABORT printf("Program terminated.\n"); exit(0) /*------------------------------------------------------------------*/ #ifdef __STDC__ void initTest(int argc, char *argv[]) { #else void initTest(argc, argv) int argc; char *argv[]; { #endif int numParam=NUM_TEST_ENGIN_PARAM+N_STREAM_PARAM; long index; double temp; if (argc<(numParam+1)) { printf("Error: %i number of parameters needed\n", numParam); FATAL_ABORT; } numDiv = atol(argv[N_STREAM_PARAM+1]); numPair = atol(argv[N_STREAM_PARAM+2]); if ((numDiv<=0) || (numPair<=0)) { printf("Error: incorrect parameter value(s)\n"); FATAL_ABORT; } numBin = numDiv * numDiv; numRepeat = init_tests(argc, argv); bins = mymalloc(sizeof(long)*numBin); probs = mymalloc(sizeof(double)*numBin); chiSqrs = mymalloc(sizeof(double)*NTESTS); temp = 1.0 / numBin; for (index=0;index 'stirling.c' #include #include "util.h" #ifdef __STDC__ double stirling(int n, int m) #else double stirling(n, m) int n, m; #endif { double **s, temp; int i, j; if(n < m) return 0.0; else if(n == m) return 1.0; else if(m == 0 && n > 0) return 0.0; else if(m == 1 && n > 0) return 1.0; s = (double **) mymalloc(m*sizeof(double *)); for(i=0; i 'sum.c' /* Note: This test is not in the regular SPRNG test format */ #include #if defined(SPRNG_MPI) #include "mpi.h" #endif #include "tests.h" #include #define min(a,b) ((a)<(b))?(a):(b) #define max(a,b) ((a)>(b))?(a):(b) double test_normal(double *array, int n); void set_normal_params(double mu, double sd); double normalF(double x); void mean_sd(double *x, int n, double *mean, double *sd); int group_size; main(int argc, char *argv[]) { int ntests, n, *stream, i, j, k; double result, rn, *temparray, *sumarray; /****************** Initialization values *******************************/ if(argc != N_STREAM_PARAM+3 || atoi(argv[2]) != 1) { fprintf(stderr,"USAGE: %s nstreams 1 seed param 1 0 n group_size\n", argv[0]); exit(-1); } ntests = init_tests(argc,argv); n = atoi(argv[N_STREAM_PARAM+1]); group_size = atoi(argv[N_STREAM_PARAM+2]); temparray = (double *) mymalloc(n*sizeof(double)); sumarray = (double *) mymalloc(n*sizeof(double)); for(j=0; j 'tests.h' #ifndef _tests_h #define _tests_h #include "util.h" #define N_STREAM_PARAM 6 #ifndef ANSI_ARGS #ifdef __STDC__ #define ANSI_ARGS(args) args #else #define ANSI_ARGS(args) () #endif #endif extern long NTESTS; /*NTESTS is the number of times the tests are performed on the random subsequences. Though init_tests also returns the number of tests when the tests are done on one processor, the number returned is different when multiple processors are used */ extern int proc_rank; /*Rank of processor in the set of processors */ extern int init_nprocs; /* Number of processors */ double chipercent ANSI_ARGS((double chiSq, long fr)); /*chiSq is the chisquare value, normally returned by the function chisquare. fr is the degrees of freedom. The value returned is the percentile level in the chisquare test */ double chisquare ANSI_ARGS((long *actual, double *probability, long n, long k, int *nb)); /* actual is an array of integers, that gives the frequency in each class */ /* (bin). probability is an array of expected probabilities in each bin. k is*/ /* the number of bins. n is the number of trials. So n*probabilit[i] will */ /* give the expected frequency for bin i. The chisquare 'error' value is */ /* returned. If the expected value in a bin is too low, then it is combined */ /* with adjacent bins until this value is sufficiently high; 'nb' is set to */ /* the effective number of bins, and thus is at most k.*/ double chiF ANSI_ARGS((double chiSq)); /* This is the chisquare cumulative distribution function. It is identical to the function 'chipercent', except that the degrees of freedom is not a parameter. This function is usually not called directly, but is passed as an argument to the KS function. Before this, the segrees of freedom must be set using 'set_d_of_f.*/ void set_d_of_f ANSI_ARGS((long df)); /* This sets the degrres of freedom to 'df' for use by chiF. */ double KS ANSI_ARGS((double *V, long n, double (*F)(double) )); /* This returns the Kolmogorov-Smirnov 'error' value. V is an array of doubles, which contains the values of the samples. n is the size of the array. F is the pointer to the cumulative distribution function from which it is expected that the samples are drawn. */ double KSpercent ANSI_ARGS((double value, long n)); /* value is the Kolmogorov-Smirnov error value, normally returned by the function KS. n is the number of samples that were used in order to determine this value. This function returns the percentile according to the K-S test. */ double KSF ANSI_ARGS((double value)); /* This is identical to KSpercent, but does not have an argument for n. n must be set using 'set_KS_n' before this function is called. Normally a pointer to this function is passed to the KS algorithms. */ void set_KS_n ANSI_ARGS((long n)); /* n is the sample size for use in the KS algorithms. */ #if defined(SPRNG_MPI) void getKSdata ANSI_ARGS((double *V, long ntests)); /* When performing the tests on mulitple processors using MPI, a set of streams is tested on each processor. The processor numbered '0' must collect the data (ex, chisquare value) for each stream before it can perform the final KS test. So this function must be called before the KS test is done. ntests is the total number of random subsequences tested, and should be set to NTESTS, rather than to the value returned by init_tests. V is an array of the chisquare values returned for each stream. Processor '0' collects this data from each processor in this function. The other processors send their values in this function. Note that if MPI is being used, then SPRNG_MPI must be defined by the user. */ void reduce_sum ANSI_ARGS((double *array,int n)); /* Perform a reduction (with addition) operation on each of the 'n' elements of 'array'*/ void reduce_sum_long ANSI_ARGS((long *array,long n)); /* Perform a reduction (with addition) operation on each of the 'n' elements of 'array'*/ #endif void next_stream ANSI_ARGS((void)); /*This function frees memory concerned with the current stream, and initiallizes a new stream for use by get_rn */ double get_rn ANSI_ARGS((void)); /*get_rn returns the next random number*/ long init_tests ANSI_ARGS((int argc, char *argv[])); /*The arguments to init_test are the same as for the command line arguments. The first command line argument is the number of stream sets to be tested. The second argument is the number of streams to interleave while creating a enw stream, 'ncombine'. The next two paramemters are the seed and the parameter for the generator. By default, they can be set to 0. The next argument is the number of subsequences to test in each new stream created. The argument after that tell us how many random numbers should be skipped after the completion of a test, before testing the next subsequence of the stream. The rest of the arguments are based on the tests being performed. */ #endif SHAR_EOF fi # end of overwriting check if test -f 'util.c' then echo shar: will not over-write existing file "'util.c'" else cat << "SHAR_EOF" > 'util.c' #include #include #include #ifdef __STDC__ void *_mymalloc(size_t size, int line, char *message) #else void *_mymalloc(size, line, message) size_t size; int line; char *message; #endif { char *temp; if(size == 0) return NULL; temp = (char *) malloc(size); if(temp == NULL) { printf("\nmemory allocation failure in file: %s at line number: %d\n", message, line); exit(-1); } return (void *) temp; } SHAR_EOF fi # end of overwriting check if test -f 'util.h' then echo shar: will not over-write existing file "'util.h'" else cat << "SHAR_EOF" > 'util.h' #ifndef _util_h #define _util_h #include #define mymalloc(a) (_mymalloc((a), __LINE__, __FILE__)) #ifndef ANSI_ARGS #ifdef __STDC__ #define ANSI_ARGS(args) args #else #define ANSI_ARGS(args) () #endif #endif void *_mymalloc ANSI_ARGS((size_t size, int line, char *message)); #endif SHAR_EOF fi # end of overwriting check if test -f 'wolff.c' then echo shar: will not over-write existing file "'wolff.c'" else cat << "SHAR_EOF" > 'wolff.c' /********************************************************************* * * * isingwolff.c * * * *********************************************************************/ #include #include #include #include "sprng.h" /*#define PARALLEL*/ int lattice_size, *spin, *stack, nsites; int **genptr; /* array of random number generators */ int exponent, mask; /* Used for efficiency purposes */ double prob; double Energy[10][10], Cv[10][10], J=0.4406868; double exact_energy=-1.4530649029, exact_Cv=1.4987048885; /***** This is correct ONLY for a 16x16 lattice!!****** */ int RNG() /* Random number generator used for initializations alone */ { static int seed=17; seed=16807*(seed%127773)-(seed/127773)*2836; if(seed<0) seed+=2147483647; else if(seed > 2147483647) { seed--; seed -= 2147483647; } return seed; } void Single_Cluster_Update(void) /* update lattice spins: a single sweep */ { static int nSite[4], Ipt=-1; int i, j, nnJ, ix, iy; double ff; i = RNG()>>(31-(exponent<<1)); if(i<0) i += nsites; spin[i] = -spin[i]; while(i >= 0) { /* ix=I/size; iy=I%size; */ ix =i>>exponent; iy=i&mask; /* printf("ix=%d, iy=%d) ", ix, iy); */ if(iy==0) nSite[0]=(ix<prob) continue; spin[nnJ]=-spin[nnJ]; stack[++Ipt]=nnJ; } if(Ipt>=0) { i=stack[Ipt]; Ipt--; } else i=-1; } } int System_Energy() /* Compute energy of lattice */ { int E =0; int i, j, s, aa; for(i=0, s=0; i=10*divisor) /* make scale logarithmic for printing results */ { divisor *= 10; row++; } col = i/divisor; average_E /= divisor; average_Cv /= divisor; Energy[row][col] += average_E; Cv[row][col] += average_Cv; for(k=row+1; k<10; k++) { average_E /= 10; average_Cv /= 10; Energy[k][0] += average_E; Cv[k][0] += average_Cv; } if(old_row != row) { compute(old_row); old_row = row; } } compute(old_row); } void initialize(int seed, int param, int use_blocks) { int i, j, temp; nsites = lattice_size*lattice_size; prob = 1 - exp(-2.0*J); for(i=0; i<10; i++) for(j=0; j<10; j++) Energy[i][j] = Cv[i][j] = 0.0; spin = malloc(nsites*sizeof(int)); stack = malloc(nsites*sizeof(int)); if(!spin || !stack) { printf("\n\tMemory allocation failure, program exits!\n"); exit(-1); } for(i=0; iprob)?1:-1; /* here assume that expo is integer exponent of 2 */ temp = mask=lattice_size-1; exponent = 0; /* expo = log_2(lattice_size) */ while(temp) { exponent++; temp >>= 1; } /* initialize generator */ genptr = (int **) malloc(nsites*sizeof(int *)); genptr[0] = init_sprng(0,nsites,seed,param); print_sprng(genptr[0]); for(i=1; i 0\n", lattice_size); exit(-1); } if(block_size<=0) { printf("ERROR: Block_size %d should be > 0\n", block_size); exit(-1); } if(discard_blocks<=0) { printf("ERROR: discard_blocks %d should be > 0\n", discard_blocks); exit(-1); } if(use_blocks<=0) { printf("ERROR: use_blocks %d should be > 0\n", use_blocks); exit(-1); } if((lattice_size&(lattice_size-1)) != 0) /* check if lattice_size = 2^n */ { printf("ERROR: lattice_size %d should be a positive power of 2\n", lattice_size); exit(-1); } if(lattice_size!=16) { printf("WARNING: The current code gives error values correctly only for a 16x16 lattice.\n\t... The Energy_error and Cv_error columns are incorrect.\n\t... Please use the Energy and Cv values and compute error from the exact solution.\n"); } while(use_blocks) /* check if use_blocks is a power of 10 */ { if(use_blocks%10 != 0 && use_blocks!=1) { printf("ERROR: use_blocks %d should be a power of 10\n", use_blocks); exit(-1); } use_blocks /= 10; } } /************** 'Thermalize' system so that results are not influenced by the initial onditions *************/ void thermalize(int block_size, int discard_blocks) { int i, j; for(i=0; i 'VERSION' SPRNG 1.0 6 July 1998 SHAR_EOF fi # end of overwriting check if test ! -d 'include' then mkdir 'include' fi cd 'include' if test -f 'interface.h' then echo shar: will not over-write existing file "'interface.h'" else cat << "SHAR_EOF" > 'interface.h' #ifndef _interface_h_ #define _interface_h_ #ifndef ANSI_ARGS #ifdef __STDC__ #define ANSI_ARGS(args) args #else #define ANSI_ARGS(args) () #endif #endif #ifdef __cplusplus extern "C" { #endif int get_rn_int ANSI_ARGS((int *igenptr)); float get_rn_flt ANSI_ARGS((int *igenptr)); double get_rn_dbl ANSI_ARGS((int *igenptr)); int *init_rng ANSI_ARGS(( int gennum, int total_gen, int seed, int mult)); int spawn_rng ANSI_ARGS((int *igenptr, int nspawned, int ***newgens, int checkid) ); int make_new_seed ANSI_ARGS((void)); int make_new_seed_mpi ANSI_ARGS((void)); int get_seed__rng ANSI_ARGS((int *genptr)); int free_rng ANSI_ARGS((int *genptr)); int pack_rng ANSI_ARGS(( int *genptr, char **buffer)); int *unpack_rng ANSI_ARGS(( char *packed)); int print_rng ANSI_ARGS(( int *igen)); int *checkID ANSI_ARGS(( int *igen)); int *addID ANSI_ARGS(( int *igen)); int *deleteID ANSI_ARGS(( int *igen)); int *init_rng_simple ANSI_ARGS(( int seed, int mult)); int *init_rng_simple_mpi ANSI_ARGS(( int seed, int mult)); int get_rn_int_simple ANSI_ARGS((void)); int get_rn_int_simple_mpi ANSI_ARGS((void)); float get_rn_flt_simple ANSI_ARGS((void)); float get_rn_flt_simple_mpi ANSI_ARGS((void)); double get_rn_dbl_simple ANSI_ARGS((void)); double get_rn_dbl_simple_mpi ANSI_ARGS((void)); int pack_rng_simple ANSI_ARGS((char **buffer)); int *unpack_rng_simple ANSI_ARGS(( char *packed)); int print_rng_simple ANSI_ARGS((void)); #ifdef __cplusplus } #endif #endif SHAR_EOF fi # end of overwriting check if test -f 'sprng.h' then echo shar: will not over-write existing file "'sprng.h'" else cat << "SHAR_EOF" > 'sprng.h' #ifndef _sprng_h_ #define _sprng_h_ #include "interface.h" #define SPRNG_DEFAULT 0 #define CRAYLCG 0 #define DRAND48 1 #define FISH1 2 #define FISH2 3 #define FISH3 4 #define FISH4 5 #define FISH5 6 #define LECU1 0 #define LECU2 1 #define LECU3 2 #define LAG1279 0 #define LAG17 1 #define LAG31 2 #define LAG55 3 #define LAG63 4 #define LAG127 5 #define LAG521 6 #define LAG521B 7 #define LAG607 8 #define LAG607B 9 #define LAG1279B 10 #define CHECK 1 #define MAX_PACKED_LENGTH 24000 #ifdef USE_MPI #define MPINAME(A) A ## _mpi #else #define MPINAME(A) A #endif #define make_sprng_seed MPINAME(make_new_seed) #if defined(SIMPLE_SPRNG) #define pack_sprng pack_rng_simple #define unpack_sprng unpack_rng_simple #define isprng MPINAME(get_rn_int_simple) #define init_sprng MPINAME(init_rng_simple) #define print_sprng print_rng_simple #ifdef FLOAT_GEN #define sprng MPINAME(get_rn_flt_simple) #else #define sprng MPINAME(get_rn_dbl_simple) #endif #elif !defined(CHECK_POINTERS) #define free_sprng free_rng #define pack_sprng pack_rng #define unpack_sprng unpack_rng #define isprng get_rn_int #define spawn_sprng(A,B,C) spawn_rng(A,B,C,!CHECK) #define init_sprng init_rng #define print_sprng print_rng #ifdef FLOAT_GEN #define sprng get_rn_flt #else #define sprng get_rn_dbl #endif #else #define free_sprng(A) ((deleteID(A)==NULL) ? -1 : free_rng(A)) #define pack_sprng(A,B) ((checkID(A)==NULL) ? 0 : pack_rng(A,B)) #define unpack_sprng(A) addID(unpack_rng(A)) #define isprng(A) ((checkID(A)==NULL) ? -1 : get_rn_int(A)) #define spawn_sprng(A,B,C) ((checkID(A)==NULL) ? 0 : spawn_rng(A,B,C,CHECK)) #define init_sprng(A,B,C,D) addID(init_rng(A,B,C,D)) #define print_sprng(A) ((checkID(A)==NULL) ? 0 : print_rng(A)) #ifdef FLOAT_GEN #define sprng(A) ((checkID(A)==NULL) ? -1.0 : get_rn_flt(A)) #else #define sprng(A) ((checkID(A)==NULL) ? -1.0 : get_rn_dbl(A)) #endif #endif #endif SHAR_EOF fi # end of overwriting check if test -f 'sprng_f.h' then echo shar: will not over-write existing file "'sprng_f.h'" else cat << "SHAR_EOF" > 'sprng_f.h' #ifndef _sprngf_h_ #define SPRNG_DEFAULT 0 #define CRAYLCG 0 #define DRAND48 1 #define FISH1 2 #define FISH2 3 #define FISH3 4 #define FISH4 5 #define FISH5 6 #define LECU1 0 #define LECU2 1 #define LECU3 2 #define LAG1279 0 #define LAG17 1 #define LAG31 2 #define LAG55 3 #define LAG63 4 #define LAG127 5 #define LAG521 6 #define LAG521B 7 #define LAG607 8 #define LAG607B 9 #define LAG1279B 10 #ifdef CHECK_POINTERS #define CHECK 1 #else #define CHECK 0 #endif /* ifdef CHECK_POINTERS */ #define MAX_PACKED_LENGTH 24000 #ifdef POINTER_SIZE #if POINTER_SIZE == 8 #define SPRNG_POINTER integer*8 #else #define SPRNG_POINTER integer*4 #endif #else #define SPRNG_POINTER integer*4 #endif /* ifdef POINTER_SIZE */ #ifdef USE_MPI #define make_sprng_seed fseed_mpi #else #define make_sprng_seed fmake_new_seed #endif #endif /* ifdef _sprng_h */ #ifdef USE_MPI external fseed_mpi integer fseed_mpi #else external fmake_new_seed integer fmake_new_seed #endif #ifndef DEFAULTINT #define DEFAULTINT #endif #ifndef FLOAT_GEN #define DBLGEN #endif #if defined(SIMPLE_SPRNG) #undef DEFAULTINT #ifndef _sprngf_h_ #define pack_sprng fpack_rng_simple #define unpack_sprng funpack_rng_simple #ifdef USE_MPI #define isprng fget_rn_int_simmpi #define init_sprng finit_rng_simmpi #else #define isprng fget_rn_int_sim #define init_sprng finit_rng_sim #endif /* ifdef USE_MPI */ #define print_sprng fprint_rng_simple #if defined(FLOAT_GEN) && defined(USE_MPI) #define sprng fget_rn_flt_simmpi #endif #if defined(FLOAT_GEN) && !defined(USE_MPI) #define sprng fget_rn_flt_sim #endif #if defined(DBLGEN) && defined(USE_MPI) #define sprng fget_rn_dbl_simmpi #endif #if defined(DBLGEN) && !defined(USE_MPI) #define sprng fget_rn_dbl_sim #endif #endif /* ifdef _sprng_h */ external isprng external fget_rn_dbl_sim, fget_rn_flt_sim external init_sprng, fpack_rng_simple external funpack_rng_simple, fprint_rng_simple #ifdef USE_MPI external fget_rn_flt_simmpi, fget_rn_dbl_simmpi real*4 fget_rn_flt_simmpi real*8 fget_rn_dbl_simmpi #endif integer isprng,fpack_rng_simple,fprint_rng_simple SPRNG_POINTER init_sprng, funpack_rng_simple real*4 fget_rn_flt_sim real*8 fget_rn_dbl_sim #endif #if defined(CHECK_POINTERS) #undef DEFAULTINT external fget_rn_int_ptr, fget_rn_flt_ptr, fget_rn_dbl_ptr external fspawn_rng_ptr, ffree_rng_ptr, finit_rng_ptr external fpack_rng_ptr, funpack_rng_ptr, fprint_rng_ptr integer fget_rn_int_ptr, ffree_rng_ptr, fpack_rng_ptr SPRNG_POINTER finit_rng_ptr, funpack_rng_ptr integer fspawn_rng_ptr, fprint_rng_ptr real*4 fget_rn_flt_ptr real*8 fget_rn_dbl_ptr #ifndef _sprngf_h_ #define isprng fget_rn_int_ptr #define free_sprng ffree_rng_ptr #define spawn_sprng(A,B,C) fspawn_rng_ptr(A,B,C,CHECK) #define pack_sprng fpack_rng_ptr #define unpack_sprng funpack_rng_ptr #define init_sprng finit_rng_ptr #define print_sprng fprint_rng_ptr #ifdef FLOAT_GEN #define sprng fget_rn_flt_ptr #else #define sprng fget_rn_dbl_ptr #endif #endif #endif #if defined(DEFAULTINT) external fget_rn_int, fget_rn_flt, fget_rn_dbl external fspawn_rng, ffree_rng, finit_rng external fpack_rng, funpack_rng, fprint_rng integer fget_rn_int, ffree_rng, fpack_rng SPRNG_POINTER finit_rng, funpack_rng integer fspawn_rng, fprint_rng real*4 fget_rn_flt real*8 fget_rn_dbl #ifndef _sprngf_h_ #define isprng fget_rn_int #define free_sprng ffree_rng #define spawn_sprng(A,B,C) fspawn_rng(A,B,C,CHECK) #define pack_sprng fpack_rng #define unpack_sprng funpack_rng #define init_sprng finit_rng #define print_sprng fprint_rng #ifdef FLOAT_GEN #define sprng fget_rn_flt #else #define sprng fget_rn_dbl #endif #endif #endif #ifndef _sprngf_h_ #define _sprngf_h_ #endif SHAR_EOF fi # end of overwriting check cd .. if test ! -d 'lib' then mkdir 'lib' fi cd 'lib' if test -f 'Makefile' then echo shar: will not over-write existing file "'Makefile'" else cat << "SHAR_EOF" > 'Makefile' SHELL = /bin/sh clean : @rm -f *.o realclean : rm -f lib* .SUFFIXES : SHAR_EOF fi # end of overwriting check cd .. if test -f 'make.CHOICES' then echo shar: will not over-write existing file "'make.CHOICES'" else cat << "SHAR_EOF" > 'make.CHOICES' ############################################################################ # # We have set variables giving information on the archiver, the C compiler # and the FORTRAN compiler for certain machines in SRC/make.xxx, where xxx # is your machine name. In the lines that state: PLAT = ... , exactly one of # the lines must not be commented out. This line corresponds to the machine # you are on. For example, if you are on a Cray T3E, remove the '#' sign from # the beginning of the corresponding line. Change the following line: # #PLAT = T3E # Cray T3E # to: # PLAT = T3E # Cray T3E # # If the machine you are on is not in the list, please send mail to: # ashoks@ncsa.uiuc.edu stating the machine you are on. You may also modify # the make.GENERIC file to suit your machine and continue with the 'make' # process. # # By default, the libraries are placed in the sprng/lib directory. # You can change this through the variable 'LIB_REL_DIR' below. ############################################################################ #PLAT = CONVEX #PLAT = DEC #PLAT = HP #PLAT = LINUX #PLAT = O2K PLAT = SGI #PLAT = SOLARIS #PLAT = SP2 # IBM SP2 #PLAT = SUN # For T3D, Use PLAT=T3E instead #PLAT = T3E #PLAT = GENERIC LIB_REL_DIR = lib SHAR_EOF fi # end of overwriting check # End of shell archive exit 0