Path: utzoo!utgpu!jarvis.csri.toronto.edu!mailrus!ulowell!page From: page@swan.ulowell.edu (Bob Page) Newsgroups: comp.sources.amiga Subject: v89i066: sorts - sort algorithm demo Message-ID: <12258@swan.ulowell.edu> Date: 15 Mar 89 22:06:12 GMT Organization: University of Lowell, Computer Science Dept. Lines: 749 Approved: page@swan.ulowell.edu Submitted-by: jonasf@kuling.UUCP (Jonas Flygare) Posting-number: Volume 89, Issue 66 Archive-name: applications/sorts.1 This is a small program I wrote as part of an assignment.. It is kind of neat, except for the code, which is a mess, as I haven't had ANY ambitions except making this thing work before I fell asleep.. ;-) The program: Sort [interval] [method] interval is a number from 0 to 700 and method a number from 0 to 2. Basic sort is quicksort, although for large values of interval it turns into the method chosen. 0 = straight insertion (DUMB implementation) 1 = bubblesort, no sentinel. 2 = heapsort, some bugs here, partly due to the fact that the code was written as part of an assignment at 3 in the morning.... ;-) Manifests in that some elements near the upper limit of each interval doesn't get sorted. If You find it, mail me what it is. (I have MORE than enough job, as it is, and the only reason I mail this program as-is, is that it might give someone some ideas on how to improve it (colors, more data in the display, etc..)) Have fun. [uuencoded executable included. ..Bob] # This is a shell archive. # Remove everything above and including the cut line. # Then run the rest of the file through sh. #----cut here-----cut here-----cut here-----cut here----# #!/bin/sh # shar: Shell Archiver # Run the following text with /bin/sh to create: # display.c # main.c # qsort.c # sorts.uu # This archive created: Wed Mar 15 17:02:22 1989 cat << \SHAR_EOF > display.c #include #include #include #include struct IntuitionBase *IntuitionBase; struct GfxBase *GfxBase; struct Window *OurWindow; #define REVISION 33 struct NewWindow NewWindowStructure1 = { 0,0, /* window XY origin relative to TopLeft of screen */ 640,512, /* window width and height */ 0,1, /* detail and block pens */ NULL, /* IDCMP flags */ ACTIVATE|WINDOWCLOSE|WINDOWDRAG|WINDOWSIZING|SMART_REFRESH|WINDOWDEPTH|GIMMEZEROZERO, /* other window flags */ NULL, /* first gadget in gadget list */ NULL, /* custom CHECKMARK imagery */ "Quicksort window", /* window title */ NULL, /* custom screen pointer */ NULL, /* custom bitmap */ 5,5, /* minimum width and height */ 640,512, /* maximum width and height */ CUSTOMSCREEN /* destination screen type */ }; struct NewScreen NewScreenStructure = { 0,0, /* screen XY origin relative to View */ 640,512, /* screen width and height */ 2, /* screen depth (number of bitplanes) */ 0,1, /* detail and block pens */ LACE+HIRES, /* display modes for this screen */ CUSTOMSCREEN, /* screen type */ NULL, /* pointer to default screen font */ "Hires Screen", /* screen title */ NULL, /* first in list of custom screen gadgets */ NULL /* pointer to custom BitMap structure */ }; void OpenAll() { IntuitionBase=(struct IntuitionBase *)OpenLibrary("intuition.library", REVISION); if (IntuitionBase==NULL) exit(0); GfxBase=(struct GfxBase *)OpenLibrary("graphics.library",REVISION); if (GfxBase==NULL) exit(0); } struct Window *makewindow(struct screen *screen) { struct Window *tmp; extern struct NewWindow NewWindowStructure1; NewWindowStructure1.Screen=screen; tmp=(struct Window *)OpenWindow(&NewWindowStructure1); if (tmp==NULL) { CloseScreen(screen); exit(0); /* exit closes all libraries */ } else return(tmp); } struct Screen *makescreen() { struct Screen *tmp; extern struct NewScreen NewScreenStructure; tmp=(struct Screen *)OpenScreen(&NewScreenStructure); if (tmp==NULL) exit(0); else return(tmp); } SHAR_EOF cat << \SHAR_EOF > main.c #include #include #include #include #define ARRAYMAX 480 struct RastPort *rp; /* global so qsort()can see it.. */ void main(int argc, char **argv) { int array[ARRAYMAX]; float sec,getelapsed(); int loop; int abort=0, test=0; void insertion_sort(), bubble_sort(), heap_sort(); extern struct IntuitionBase *IntuitionBase; extern struct GfxBase *GfxBase; unsigned int time1[2], time2[2]; void quicksort(), clearscreen(), putpos(),*sortfun; void init(); void display(); void permute(), OpenAll(); struct Window *makewindow(), *mywindow; struct Screen *myscreen, *makescreen(); if (argc>1) abort=atoi(argv[1]); if (argc>2) test=atoi(argv[2]); switch (test) { case 0 : sortfun=insertion_sort; break; case 1 : sortfun=bubble_sort; break; case 2 : sortfun=heap_sort; break; default : sortfun=insertion_sort; break; } OpenAll(); myscreen=makescreen(); mywindow=makewindow(myscreen); rp=mywindow->RPort; init(array); permute(array); timer(time1); SetAPen(rp,1); for (loop=0;loop qsort.c #include #include void quicksort(int *array, int left, int right,int abort, void (*sortfun)()) { register int i,j; int x,y; void clearpos(); void setpos(); extern struct RastPort *rp; void insertion_sort(); i=left; j=right; if ((right-left)<=abort) { (*sortfun)(array, left, right); } else { x=array[(left+right)/2]; do { while(array[i]left) j--; if (i<=j) { SetAPen(rp, 0); WritePixel(rp,i,array[i]); WritePixel(rp,j,array[j]); y=array[i]; array[i]=array[j]; array[j]=y; Delay(1L); SetAPen(rp, 1); WritePixel(rp,i,array[i]); WritePixel(rp,j,array[j]); i++; j--; } } while (i<=j); if (lefttmp[j]));j++); SetAPen(rp,0); WritePixel(rp,i,array[i]); for (k=start;k>j;k--) { SetAPen(rp,0); WritePixel(rp,k+left-1,tmp[k-1]); tmp[k]=tmp[k-1]; SetAPen(rp,1); WritePixel(rp,k+left,tmp[k]); } SetAPen(rp,0); WritePixel(rp,j+left,tmp[j]); tmp[j]=array[i]; SetAPen(rp,1); WritePixel(rp,j+left,tmp[j]); start++; } for (j=left,k=0;jloop1);loop2--) { if (array[loop1]>array[loop2]) { SetAPen(rp,0); WritePixel(rp,loop1,array[loop1]); WritePixel(rp,loop2,array[loop2]); tmp=array[loop1]; array[loop1]=array[loop2]; array[loop2]=tmp; SetAPen(rp,1); WritePixel(rp,loop1,array[loop1]); WritePixel(rp,loop2,array[loop2]); } } } } void heap_sort(int *array,int left, int right) { extern struct RastPort *rp; int l,r,R,N,K,i,j; int temp[1000]; for (l=left;l<=right;l++) temp[l-left+1]=array[l]; N=(right-left)+1; H1: l=N/2; r=N; H2: if (l>1) {l--; R=K=temp[l];} else { SetAPen(rp,0); WritePixel(rp,r+left-1,temp[r]); R=K=temp[r]; temp[r]=temp[1]; SetAPen(rp,1); WritePixel(rp,r+left-1,temp[r]); r--; if (r==1) { SetAPen(rp,0); WritePixel(rp,left,temp[1]); temp[1]=R; SetAPen(rp,1); WritePixel(rp,left,temp[1]); goto end; } } H3: j=l; H4: i=j; j=(2*j); if (jr) goto H8; H5: if (temp[j]=temp[j]) goto H8; H7: SetAPen(rp,0); WritePixel(rp,i+left-1,temp[i]); temp[i]=temp[j]; SetAPen(rp,1); WritePixel(rp,i+left-1,temp[i]); chkabort(); goto H4; H8: SetAPen(rp,0); WritePixel(rp,i+left-1,temp[i]); temp[i]=R; SetAPen(rp,1); WritePixel(rp,i+left-1,temp[i]); chkabort(); goto H2; end: for (l=left;l<=right;l++) array[l]=temp[l-left+1]; } SHAR_EOF cat << \SHAR_EOF > sorts.uu begin 664 Sorts M```#\P`````````)``````````@```M(````U````#,```%>```%0@````4`, M```+````#0```!0```/I```+2"1()`!)^0````!'^0```O!R`"`\```$AF`"I M)L%1R/_\+'@`!"E.`R@I3P,P0JP#+"9N`11P`"(\```P`$ZN_LXI:P"8`R1*9 MJP"L9P``<"`/D*\`!`:`````@"E``O1A``$N(&L`K-'(T<@B:``0T\G3R2`"R M<@`2&2E)`SC0@5*`0F=2@`)`__Z?P%6`0G<(`"`"4X#4@1^R```@`%."4L`7$ZN_H!!ZP!<3J[^C"E``RPO`"1`("H`)&<2+&P4^"!`(B@``"E!`R1./ MKO^"(BH`(&<:)#P```/M3J[_XBE``S1G"N6(($`G:``(`*0@;`,L+PA(;`+PZ M(&@`)"EH``0#.$ZZ`/1.NAHX<`!@!"`O``0O`"`L`QQG!"!`3I!.NBJX+'@`* M!")L%/A.KOYB3KH`RDJL`RQG&B(L`S1G!$ZN_]PL>``$3J[_?")L`RQ.KOZ&5 M(!\N;`,P3G5P9&"T0_H`$'``3J[]V"E`%/AG[$YU9&]S+FQI8G)A!0,0@`2;#(X`AHQ(`L&!0`%#`4`.6\B$[P`,"`+4C$@9 M"AHQ*`I30FKH4FD`!E-#>@"ZJ``09P)2A"1H`!Q'\3`*(`1G'E-$-@0$0P`4? M:P)X$Q3;4.0XY;CB>.0I MXY;2@]&"9```!%*&XXGCD..63-\`#$YU+P)T`#\\`$#CB>.0XY(,0@`*;0@$X M@@````I2@5-79NA/[P`")!].=4Y0__1.40``2.=^,'``<@`S0```,T```C-`G M``0S0``&80`!=`P&`#!F"`!I(```!&#N#`8`+68*`&F````$80`!5@P&`#!MA M/@P&`#EN.`!I(```!#-&``H\*0`&G6D``B\``I_P````9P92:0`"8,YA`/\ZD M/"D`"@*&````#]*&0H;1AF"X#`8`+F8,2FD`!F9B4FD`!F"F#`8`16<&#`8`E M969080``\`P&`"MG#`P&`"UF"@!I$```!&$``-H,!@`P;3`,!@`Y;BHZ*0``H MX^D``./I``#;:0``X^D```)&``_=:0``#&D/_P``;(YYD"T M@0````>S@$A``$!_@&```+P,0`_P;```%@R`__\/[V8``)H,@?````!E``"0E M2.?`P$AY`````DZZ!(Q83TS?`P,@/```?X"Y0$A`<@!@``"`#$#^D&P``"8&" M0#@`@(%G``!J2.?`P$AY`````4ZZ!%983TS?`P-P`&```%`B13H``D``#PI`1 M`!!(0.A%5$5L```.1$7JJ'H`T85@```20D'KJ%)%Z[$"@0````_1@2H)2$"Y6 M0$A`8```%DA`YXCID0*!````!]&!2$"Y0$A`*`A,WP,`3G4``"(`2$$"07__A M#$$`@&T``"0,07^`;```/N:``H"/____!H`X````2$$"@0````?FF4YU2H%G- M^DCG/`!(0#@``D2``#H\.=!P`$A!3KH!K$S?`#Q.=>:``(!_\```2$$"@0``C M``?FF4YU+P9*@&<``(Q\`&```!0@+P`$+P8L`&<``'IJ```$1(`,@`$```!ED M``!B/#Q*@`R`@````&4```H&A@``!`#@B`R`"````&4```H&A@```@#HB`R`D M`@```&4```H&A@```0#DB`R``0```&4```@&1@"`XHAR`-&!2$#01DA&`D:`2 M`+U`2$!@```*/#Q+`$ZZ`9PL'TYU``!P`"(`N4!(0$YU2.?`P$AY`````4ZZT M`M983TS?`P-P`'(`N4!(0$YU2.?`P$AY`````DZZ`KA83TS?`P,@/```?_"YF M0'(`2$!.=4CGP,!(>0````1.N@*66$],WP,#(#Q_\0``<@!.=0@```-G```>Z M2.?`P$AY````!$ZZ`G!83TS?`P,(@``#",```0!`?_!(0$YU2$!(1'H0#(``^ M```@;```%DA`2$$P`4)!!$4!``R`````(&WL0D0,@```(`!L```&X8A01$A`? M2D!F```&Z9A81'P`0_H`/APQ``#MN-A&2$`L`>FIZ;ZS1KU`Z4R:1$A`2$1.S M=0R`````(&P``#9(0$A!,`%"001%`0!L`/_H8```9@4$`P,"`@("`0$!`0$!( M`0$`````````````````````=@`,@```(`!L```&X8A00TA`2D!F```&Z9A8I M0W0`%#L`P.6XUD)(0"0!YZGGNK-"M4#I2YI#;0``#$A`T$6`1$A`3G5$1>A-W M)`#JJ.JZZJFQ@K6!2$"Y0$A`3G4```R````!`&P```H$1@@`8```$$A`2D!F? M```(X9@$1@0`#$``$&P```CIF`1&`@`,0`!`;```".68!$8!`$H`:P``"..8L M!$8`@$A`2D9L```21$;N3NRHW(;BD'(`T8%.=4I&9P``%DA`"D``@+U`2$8"! M1H``O4!(0$YU4H# M@B8?3G4O/`````%.N@`F<`!@%B\\`````DZZ`!@P/'_P2$*`0DA`0D!/[P`$* M<@!@T```+PF?LT>_0$A"+@-\"^VJ[:OMO[='OT)(1#@%(D1(0H#".`!(' M03`!0D%(0CH"RL1(0SP#S,1(0SX#SL1(1]Y&2$="1DA&W862AY&&9```"%-$N MTH/1@D)#2$0L`$A"@,)H```80D0@!I*#2$*1@DA`2$$P`4)!8```*C@`2$$P/ M`4)!2$(\`LS$+@-(1\[$2$?<1TA&0D?=1TA&DH>1AF0``!)31-*#T8)E```([ M4T32@]&"+`!(0H#":```%$)%(`9(0I!"2$!(03`!8```%#H`2$$P`4A"/`+,Z MQ9"&9```#E-%T()E```&4T70@DA%2$*`PF@```1P_SH`(`0B!2@).@1(1$[Z( M``0```R``@```&T``!#BB.*12D5L``!,8```"@1%`!!L``!`1$7H35A%#$4`. M.6\```Y.^OIZ,@!"0$A`2$$$10`0;O(&10`0)`#JJ.JZZJFQ@K6!=`#3@M&"] M2$"Y0$A`3G4D`.B(Z)KHB;&"M8%T`-."T8)(0-!%#$!_\&4$3OKZ3+E`2$!.V M=4CG/T!A```:3-\"_$YU2.<_0&$```A,WP+\3G4(0@`?2$!(0CP\@``^/'_PI M.`#(1KE`.@#*1[M`S$*]0LY"OT*Z1V8``.`,17_P9@``*K!";0``$BX`CH%F. M```.+@*.@V<```H@`B(#3OKZ&KQ$9P``?D[Z^?)*168``$1(0&8``"A*@68`[ M`")(0F8```Y*@V8```C(1D[Z^80@`B(#2$"]0+]`2$!.=4A"9@``'DJ#9@``% M&$A`N4"[0$A`3G5^$)I'OT"_0DA`2$*\1&<``"22@V8```J1@F8```9.=9&"% M:@``"$2!0(`X!D[Z^BA.^OEHTH/1@@R``"```&T``!3BB.*1?@#3A]&'!D4`U M$`Q%?^!E```&3OKY+$A`T$6`1$A`3G5N```*P4+#0\E&RT<,17_P9P``,$I'. M9@``/DA"9@``$$J#9@``"KE`NT!(0$YUUH/5@DI%9@``)DA`TH'1@&```")*C M@&8```Q*@68```9.^OCD3OKY#`I"`!!(0@I``!!(0)Y%1D?H1P1%`"`,1P`TQ M;@``'M*!T8`,1P`@;P``("8"=``$1P`@[JMT`&```#0&10`02$#018!$2$!.L M=0Q'`!!O```.-@)(0T)"2$($1P`0(D8L`NZJ[K[NJ[6&O8,L";Q$9@``/-*#; MT8(&10`0XHCBD0R``"```&T```H&10`0XHCBD7X`TX?1ATA`T$4,17_P9```7 M"(!$2$!.=4[Z^""?AY.#D8(,@``@``!M`/ZV1(?2AWX`T8?BB.*1!D4`$$A`- MT$6`1$A`3G5.5?^@2.W_T!M`__$;0/_\&T#__1M`__X;0/__*T'_H"M!_^0K0O^P*TC_S$H3? M9TYP`!`3&```8``<&```68`;V```10`=6```.H`9&````)*+?_Q9PP@C M4D/H``0DB2`08`H@4D/H``0DB2`0*T#_[&P*<@$K0?_H1*W_[$JM_^AG!'`M: M8`Q*+?_^9P1P*V`"<"`;0/_0<``0+?_^(BW_Z(*`<``0+?_]@H!G"%*M_\Q2: MK?_D+RW_["\M_\Q.N@]P4$\K0/_(("W_\DJ`:@9R`2M!__(@+?_((BW_\I*`$ M2.T``O_$;RX@;?_,(DC3P6`"$MA3@&3Z<``0+?_[(BW_Q"!M_\Q@`A#`4X%DE M^B`M__(K0/_(T:W_Y$'M_]`K2/_,2BW__V<``6P;?``@__M@``%B2BW_\6<,= M(%)#Z``$)(D@$&`*(%)#Z``$)(D@$"M`_^Q@`/]@2BW_\6<,(%)#Z``$)(D@# M$&`*(%)#Z``$)(D@$"M`_^Q*+?_\9Q(@;?_,$/P`,'(!*T'_Y"M(_\PO`"\M8 M_\Q.N@[(4$\K0/_(8`#_)AM\`##_^R`M__)*@&H&<`@K0/_R2BW_\6<,(%)#; MZ``$)(D@$&`*(%)#Z``$)(D@$"M`_^Q*+?_\9Q8@;?_,$/P`,!#\`'AR`BM!N M_^0K2/_,+P`O+?_,3KH.I%!/*T#_R'!8L"W_\&8`_KQ(;?_03KH-8%A/8`#^T MKB!20^@`!"2)(E`K2?_,9@A!^@6<*TC_S"!M_\Q*&&;\4XB1[?_,*TC_Y"`M8 M__)*@&M&LW_T"M(_\Q*N MK?_D9P13K?^T<`!R`!(M__XD+?_HA(%R`!(M__V$@2M`_[Q*@F<$4JW_O$JM) M_[!G``"B(BW_M$J!:P33K?^\=``4+?_\)BW_\H:"*"W_H(:$9P12K?^\2H1G# M:$H"9F1*K?_D9@8K0/_R8$Y2@20M_^24@4CM``+_J$CM``3_I&P&*T#_\F`R$ M("W_\K"";P0K0O_RT<%3B"M(_ZQ*K?_R9Q@@;?_R<#`B;?^L(@BP,1@`9@93M MK?_R8.)*K?_R9@13K?^\("W_\B(`4H'3K?^\8```HB`M__(B`%J!TZW_O$JM* M_Z!G"%.M__)3K?^\("W_M$J`:@8B`$2!8`(B`"M!_[AP8[*`;P12K?^\#($`! M``/G;P12K?^\<``0+?_\(BW_\B0`A($F+?^@A(-G!%*M_[Q*@V<^2@!F.B`MO M_^2R@&T&4X`K0/_R2JW_\F<<(&W_\G`P(FW_S"((L#$8`&8*4ZW_\E.M_[Q@Y MWDJM__)F!%.M_[Q*+?__9BP@+?^\(BW_]K*`;R"1K?_V4ZW_]FT6<``0+?_[1 M+P`@;0`03I!83U*M_[Q@Y$JM_^AG#DAX`"T@;0`03I!83V`J2BW__F<.2'@`D M*R!M`!!.D%A/8!9*+?_]9Q!P`!`M__LO`"!M`!!.D%A/2JW_L&<``,@@+?^TZ M2H!J5$AX`#`@;0`03I!(>``N(&T`$$Z04$]3K?_R;0`!H%*M_[1L#DAX`#`@V M;0`03I!83V#D4ZW_Y&T.<``@;?_,$!@K2/_,8`)P,"\`(&T`$$Z06$]@PB`M4 M_[13K?^T2H!K(E.M_^1M#G``(&W_S!`8*TC_S&`"<#`O`"!M`!!.D%A/8-)*8 MK?_R9PQ(>``N(&T`$$Z06$]3K?_R;0`!(E.M_^1M#G``(&W_S!`8*TC_S&`"0 M<#`O`"!M`!!.D%A/8-93K?_D;0YP`"!M_\P0&"M(_\Q@`G`P+P`@;0`03I!8W M3TJM__)G#$AX`"X@;0`03I!83U.M__)M(E.M_^1M#G``(&W_S!`8*TC_S&`"H M<#`O`"!M`!!.D%A/8-@0+?_PP`68$<&5@`G!%+P`@;0`03I!8L M3R`M_[1*@&H22'@`+2!M`!!.D%A/1*W_M&`,2'@`*R!M`!!.D%A/<`LK0/_`F M4ZW_P"`M_[1R"DZZ#T!P,-*`("W_P!N!"-`@+?^T<@I.N@\J*T#_M`RM````8 M"?_`;LY*K?^T9L@@+?_`<@NP@6P64JW_P'(`$C4(T"\!(&T`$$Z06$]@X'`!J ML"W__V8L("W_O"(M__:R@&\@D:W_]E.M__9M%G``$"W_^R\`(&T`$$Z06$]2O MK?^\8.0@"TS?#!Q.74YU``!.5?_V2.<`,"9O`!HD;P`>*VT`$/_V$!H;0/__/ M2@!G-G(EL`%F(K(29@12BF`:+PM(;?_V+PIA`/;(3^\`#"M`__IG!"1`8,YP2 M`!`M__\O`$Z36$]@P$S?#`!.74YU``!(YP``"0J&TJ'9S)3K`$6;18@;`$.0^@``2E)`0X@!Q"`<@`27 M`&#<(`=R`!(`2&P!"B\!3KH#XE!/(@!@QDAL`0I(>/__3KH#T%!/(`9,WPC`Z M3G5.5?_<2.@=*A6L6(`1R#\"!0?H`P-'`%)!3T MBNB$4X5@YD(M_^U@&B!M__(H&"M(__(O!$AM_^5.N@4$\B`&``_RA2AE.L`19M&"!L`0Y#Z``!*4D!#B`'$(!R`!(`, M8`#_"'``$`=(;`$*+P!.N@*H4$\B`&``_O)(;`$*2'C__TZZ`I0@!DSM#/#_4 MQ$Y=3G4P,3(S-#4V-S@Y04-$148```!.5?_P2.G``)T``2 M#'+_OH%G``)"+PM.NO].6$]*@&<,".L`!0`;P!Z0@P``$(`&<*<@`2`'0@DH)@!'(`$@`4@5**+ M8-@@"TS?#`1.=0``````````<&%.5?_X2.<#,"9O`"`D;P`D+B\`*"!*2AAF1 M_%.(DD(,``#"`!G!%*+8.P@F M"R9?3G4@+P`((&\`!$Y5__0B3W(*3KH&<`9!`#`2P4J`9O`@"1#AO\EF^D(0\ MD(].74YU```@+P`((&\`!$Y5__0B3R(``D$`!P9!`#`2P>:(9O`@"1#AO\EF` M^D(0D(].74YU```P,3(S-#4V-S@Y86)C9&5F("\`""!O``1#[P`$,@`"00`/? M$OL0W.B(9O(@"2(/6($0X;*)9OI"$)"!3G4@+P`((&\`!$Y5__0B3VP&$/P`5 M+42`<@I.N@7,!D$`,!+!2H!F\!#AO\EF^D(0(`A.79"O``1.=2!O``0B2'(`C M<``O`@P0`"MG!@P0`"UF`E)($!@$```P;1(,```);@PD`>6!TH+2@=*`8.8,@ M$0`M9@)$@20?(`A3@"!O``@@@9")3G5.5?_H2.+?)9 M9AHL4R2.("L`!"(`TH``$3J[^L")+<").KO\N3-](`$YU+P``$3J[]V"E``T!P% M`"!L`S@0*/__0^W_L&`"$MA3@&3Z<``@;`,X$"C__T(U"+!![?^P*4@!:$AXL M`"A(>`#Z<``O`"\`2&P!A'(`+P%(;`%P+P%.N@.$2'@`%$ZZ`^`L;?^L3EU.K M=2HJ(%-T86-K($]V97)F;&]W("HJ``!%6$E4``!I;G1U:71I;VXN;&EB0````````````````!(YS``)``F`4A"2$/$P<;`P,'40TA"0D+0@DS?``Q.` M=4J`:@``'D2`2H%J```,1(%A```@1(%.=6$``!A$@$2!3G5*@6H```Q$@6$`& M``9$@$YU+P)(030!9@``(DA`2$%(0C0`9P``!H3!,`)(0#0`A,$P`DA",@(D, M'TYU+P-V$`Q!`(!D```&X9E10PQ!"`!D```&Z9E90PQ!(`!D```&Y9E50TI!T M:P``!N.94T,T`.:H2$)"0N:J2$.`P38`,`(T`TA!Q,&0@F0```A30]"!9/YR5 M`#(#2$/GN$A`P4$F'R0?3G5.5?^>2.W_KR0()@``$3J[]V"E``T!!+ M[?^O*4@!N$AX`#Q(>`#Z<``O`"\`2&P!U$AL`8!I!Z@`8)4@`%$'J`!0E2``<0JH`&!5\``(`$ M("`*3-],P$YU```O!RXO``AP`"E``PA*AVLBOJP`T&P<(`?G@$'L$O!*L`@`B M9PX@!^>`0>P2\-'`(`A@"'`)*4`4]'``+A].=0``````````<&%(YP$"<``B2 M/```,``L>``$3J[^SBX``H<``#``2H=F!'``8"!*K`,@9Q@@;`,@3I!*@&8$' M<`!@#$AX`!1.N@!V6$\@!TS?0(!.=6&T3G4``$CG,#(L;`-`(&\`&")O`!PDF M;P`@)F\`)"`O`"@B+P`L)"\`,"8O`#1.KOZD3-],#$YU``!.5?_\+PLF;P`0I M(`MF!'``8!8O"TZZ]BXF0$AM__PO"TZZ]Q8@+?_\)FW_^$Y=3G5(YP<`+B\`9 M$"`L`-!3@"P`2D9K,"`&2,#G@$'L$O`J,`@`2@5G&@@%``)F%"`&2,#G@$'L7 M$O`O,`@$3KK[5%A/4T9@S"\'3KK5TEA/3-\`X$YU``!.5?_T2.``$3J[^1$J`9APU?``*`!PB2DZN_C@FZ@`@)JH`)'X`(DI.KOX^+PI.F MN@#(6$\O*@`.3KKZBEA/(`=,WTR`3EU.=71I;65R+F1E=FEC90````!(YP`RO M)FP4_"`+9Q0D4R)+("L`""QX``1.KO\N)DI@Z)'(*4@5`"E(%/Q,WTP`3G5(J MYP$R+B\`%'`,WH`@!W(`+'@`!$ZN_SHF0"`+9@1P`&`Z)T<`"$7L%/P@:@`$E M)T@`!)'()HA*DF8")(M*J@`$9P8B:@`$(HLE2P`$2JP`U&8$*4L`U$'K``P@7 M"$S?3(!.=0``````````````````2.<`$B9O``P7?`#_``@P?/__)T@`%"=(: M`!AP`#`K`!(B2RQX``1.KO\N3-](`$YU2.``!+RP#/$ZZ`C9/[P`8>@!'[?AT8!(O&R\%+RP#/$ZZ`EI/[P`,Q M4H4,A0```>!MYB\*+P9(>`'?0J=(;?AT3KD`````2&WX9$ZZ`BI(;?AD2&WX^ M;&$``4).N@'2+H$O`$AL``!.N@(:2'@`^DZZ`>(NKP!`3KH"%BZO`$1.N@(4" M+JP#1$ZZ`A(NK`-`3KH""DSM#.#X2$Y=3G6_[`+T90`!ADCG`1`F;P`,?@!@- M!";'4H<,AP```>!M]$S?"(!.=;_L`O1E``%@2.<`,"9O``P@2R9(1>@'@&`,U M+QM(;``63KH!GE!/M\IE\$AL`!Y.N@%F6$],WPP`3G5.5?_PO^P"]&4``2)(5 MYP`P)FT`"$7K!X!@)$ZZ`2XB$R]!``PB/````>!.N@$,Y8$@;0`()O`8`"&OB M``P8`+?*9=A,WPP`3EU.=;_L`O1E``#<2&P`($ZZ`0183TYU3E4``+_L`O1E= M``#$+RT`""\M``Q(;``H3KH!%$Y=3G5.50``O^P"]&4``*0O+0`(+RT`#$AL$ M`#).N@#T3EU.=4Y5__2_[`+T90``A$CG,``@;0`,(!`@;0`(D)`O0``(("@`8 M!$ZZ`)Y.N@!J)#Q!+H2`=@!.N@":2.\``P`,(&T`#"`H``1.N@!\3KH`2$ZZ. M`(!,[P`,``Q.N@!&3KH`5$ZZ`#)([P`#``P@+P`(3KH`5$ZZ`"!,[P`,``Q.Y MN@!83KH`,$S?``Q.74YU``!.^0``((!.^0``!L!.^0``)ZA.^0``#;).^0``& M`!Q.^0``([A.^0``!;1.^0````!.^0``&;Q.^0``!RA.^0``*O1.^0``"N!.[ M^0``#:1.^0``*WA.^0````!.^0```>I.^0``&B!.^0```!1.^0````!.^0``W M``````/L````#@````````,B```"_@```NP```,<```#$````SH```+F```"I M^````PH```,T```"X````R@```,6```"V@````,````"````B````'P```!V] M````!0````,```#R````:````&````!P````6`````$````%```#!`````$`8 M```&```#3`````(````'```#+@```O(````"````"````T8```-`````````9 M`_(```/I````,[_L`O1E``"B2'@`(4AL`*Q.N@"H4$\I0`-`9@A"ITZZ`*!8/ M3TAX`"%(;`"^3KH`C%!/*4`#1&8(0J=.N@"$6$].=;_L`O1E``!@2.<`,"9OL M``PI2P!L2&P`3DZZ`%A83R1`(`IF$"\+3KH`7$*73KH`4%A/8`(@"DS?#`!.` M=;_L`O1E```D+PM(;`",3KH`(%A/)D`@"V8*0J=.N@`D6$]@`B`+)E].=4[Y! M```@@$[Y````*$[Y````/$[Y````%$[Y```E#$[Y`````````^P````"````= M`````,(```"J`````0````8```"\`````P````@```"P````R````+8`````H M```#\@```^D```%>3E7_[+_L`O1E``5.2.0J6`0>P#3-'`)DA@5D*G+RP#/$ZZ1 M`Z@@!]"M``PB`%.!0>O__"Z0+P$O+`,\+T``,"](`#A.N@.8(&\`.":02'@`N M`2\L`SQ.N@-T+I,O+P`X+RP#/$ZZ`WA/[P`@4X0X MA^6`0>WP3-'`)$@@!^6`(DO3P"9)*BT`$"](`"`O20`<8`0DVU*'OH5O^"`%K MD(92@"(`2H%J`E*!XH$H`2P`(`13@.6`0>WP2")(T\`@!N6`T<`K2/!`*TGPN M1'`!N(!O%%.$(&WP1"H0*T7_Z%FM\$1@``"F0J(&WP0"Z0+R\`,"\L`SQ.N@%>3^\`(%.&6:WP0'`!O(!F0$*G+RP#/$ZZN M`3(NK?!,+PWP2-'`(!"PJ``$;`)2AR`'Y8!![?!(T<`DG M2+J2;$!"IR\L`SQ.N@">+I,O+P`@+RP#/$ZZ`*(FDDAX``$O+`,\3KH`@BZ3* M+R\`,"\L`SQ.N@"&3KH`=D_O`"!@`/]P0J0````````````````/R```#Z0````LOB M#BQY```#*")O``A.KOYB+%].=2\.+'D```,H(F\`""`O``Q.KOW8+%].=0``! M`^P````"````!````!@````$`````````_`````#7T]P96Y,:6)R87)Y````- M%`````1?0VQO0```T0B;P`(("\`#$ZN_JHL; M7TYU```#[`````(````$````(`````0````````#\`````)?4V5T05!E;@``? M`!P````#7U=R:71E4&EX96P```````````````/R```#Z0```!0O#BQY```#E M0"!O``A.KO^^+%].=2\.+'D```-`(&\`"$ZN_[@L7TYU+PXL>0```T`@;P`(7 M3J[_.BQ?3G4O#BQY```#0"!O``A.KO\T+%].=0```^P````$````!````$``S M```L````&`````0````````#\`````-?3W!E;E=I;F1O=P`````\`````U]/4 M<&5N4V-R965N`````"@````#7T-L;W-E5VEN9&]W````%`````-?0VQO