[comp.sources.amiga] v89i066: sorts - sort algorithm demo

page@swan.ulowell.edu (Bob Page) (03/16/89)

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 <stdio.h>
#include <stdlib.h>
#include <exec/types.h>
#include <intuition/intuition.h>

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 <stdio.h>
#include <stdlib.h>
#include <exec/types.h>
#include <intuition/intuition.h>

#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<ARRAYMAX;loop++)
  {
	WritePixel(rp,loop,array[loop]);
  }
  quicksort(array,0,(ARRAYMAX-1),abort,sortfun);
  timer(time2);
  sec=getelapsed(time1,time2);
  printf("Time elapsed: %2.4f\n", sec);
  Delay(250L);
  CloseWindow(mywindow);
  CloseScreen(myscreen);
  CloseLibrary(GfxBase);
  CloseLibrary(IntuitionBase);
}

void init(int *array)
{
  int loop;
  for (loop=0;loop<ARRAYMAX;loop++) array[loop]=loop;
}

void display(int *array)
{
  int loop;
  for (loop=0;loop<ARRAYMAX;loop++) printf("[%03d]", array[loop]);
  printf("\n");
}

void permute(int *array)
{
  int index;
  int tmp;
  int swap;
  for (index=0;index<ARRAYMAX;index++)
  {
    swap=rand()%ARRAYMAX;
    tmp=array[index];
    array[index]=array[swap];
    array[swap]=tmp;
  }
}

void clearscreen()
{
  printf("\033[H\033[J");
}

void putpos(int x, int y)
{
  printf("\033[%d;%dHX",y,x);
}

void clearpos(int x, int y)
{
  printf("\033[%d;%dH ",y,x);
}

float getelapsed(unsigned int start[2], unsigned int elapsed[2])
{ 
  float t1;
  unsigned int begin;
  float micros;
  begin=elapsed[0]-start[0];
  micros=((float)elapsed[1]/1000000.0)-((float)start[1]/1000000.0);
  t1 = (float)begin+micros;
#ifdef DEBUGGING
  printf("sec: %d Micros: %f Sum: %f\n", begin, micros, t1);
#endif
  return((float)(t1));
}
SHAR_EOF
cat << \SHAR_EOF > qsort.c
#include <stdio.h>
#include <math.h>
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]<x && i<right) i++;
      while(x<array[j] && j>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 (left<j) quicksort(array, left, j, abort, sortfun);
    if (i<right) quicksort(array,i,right, abort, sortfun);
  }
}


void insertion_sort(int *array, int left, int right)
{
  extern struct RastPort *rp;
  static int tmp[1000];
  int i,j,k,l,length, start=0;
  length=right-left;
  tmp[start++]=array[left];
  for (i=left+1;i<(right+1);i++)
  {
     for (j=0;((j<start)&&(array[i]>tmp[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;j<right+1;j++,k++) 
  {
    array[j]=tmp[k];
  }
}
 
void bubble_sort(int *array, int left, int right)
{
   int loop1,loop2, sentinel=1, tmp;
   extern struct RastPort *rp;
   for (loop1=left;loop1<right;loop1++)
    {
      for (loop2=right;(loop2>loop1);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 (j<r) goto H5;
      if (j==r) goto H6;
      if (j>r) goto H8;
H5:   if (temp[j]<temp[j+1]) j=j+1;
H6:   if (K>=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```@`%."4<C_$
M]A^\`"`@`%."'[$@`"``4<K_^")/+PE@``!X*6L`.@+T<']2@-&L`O1A``#"D
M0>L`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<GD`+P<N=
M+P`(4JP2[%.L`19M%B!L`0Y#Z``!*4D!#B`'$(!R`!(`8!0@!W(`$@!(;`$*M
M+P%.NAP$4$\B`"X?3G5.50``+PLF;P`,0JP2[$AM``PO"TAZ_ZQ.NA;P2&P!^
M"DAX__].NAO4("P2["9M__Q.74YU``````````!P84YU3G5.4/_B3E$``$CGI
M?S`D:``((!HB$DZZ!Y9":0`(0FD`!B\`@Y]F#B1H`!PF*``,4X-@``#T4D(SR
M0@`$2$(S0@`(0D8T*0`$9UQJ$E9":Q@*0@`#U6D`!&$``/Q@2&$``2Q2:0`&U
M8!)T!-5I``1A``#F80``[%-I``9*@&O$4VD`!..)XY!@\D)"0D8O`(.?9Q1AE
M``#,2D9F#`Q"``%F!E-I``9@[`8&`#`3AB`*4D(,0@`4:]1V`20H``Q*J``0<
M9PIX`=1I``930FLZ>!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<S__$I#:P@4_``P4<O_^B1H`!A"DDII``AG`E.2)&@`%$*!,BD`3
M!DC!)(%,WPS^3EE.6$YUXHCBD5-"9OA.=7P`2.<P`"0`)@'CB>.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``;<SBZ0``8/(_*0`$`E\@+
M`&8*)&@`%$*28```@#0I```_*0`$`E\0`&<"1$+5:0`"+P"#GV=2,WP`/P``E
M2H!K"N.)XY!3:0``8/)*:0`"9R!K%'0$U6D``&$`_EQA`/YB4VD``F#680#^L
MA%)I``)@S'0`-"D``#\I``0"7X``9P0(P@`?3KH$OB1H`!@DP"2!)&@`%"2\6
M`````7``,"D`"$S?!'Y.64Y83G4L*``(9PHA?```````"$YU2.?\X"1H`!!.Y
MDCP`3-\'/S-&``A3J``,9@@`:0@```1.=3\I``0"7P@`9P)\_TYU2.<`P"!$\
M2$`X``)$@`"Y0`1`.``,0``0;0``:@Q`#^]M``#,#$!'\&T``!I(0.>(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#<AN*03G4``"0``H!_____9@AP`'(`=`!@(DA"2,+H0@*"A
M@``'_P1"`_\O`G0*XXGCD%'*__H(P``?)!].=2\#+P"#GV=D!$(`"TJ`9@@@4
M`4*!!$(`("\``I__X```9R120N*(XI'BDR\``I__X```9NY*@VH.4H%D"E*`E
M8-A30N.)XY`(```49_0&0@/_;QX,0@?_;"8"@``/___I2C\"0D)(0H1?2$*`>
M@B8?3G4O/`````%.N@`F<`!@%B\\`````DZZ`!@P/'_P2$*`0DA`0D!/[P`$*
M<@!@T```+P<N+P`(*4<##$JL`Q!G%#!\``$B;`,0L\AG"$AX``A.D5A/+A].A
M=0```````````````$CG/T!A```(3-\"_$YU/#R``#X\?_!(0$A".`#(1KE`J
MS$*]0KU$L$=M``!PL$)M```L#(```'_P9@``"$J!9P``!D[Z_02T1VT``!X,I
M@@``?_!F```(2H-G```*(`(B`T[Z_.9.^OS$2H)F```J2H-F```D2.?`P$AYY
M`````TZZ_TQ83TS?`P,@/```?_"Y0'(`2$!.=4[Z_(2T1VT``!X,@@``?_!F@
M```(2H-G```*(`(B`T[Z_)).^OPF.@#*1V8``"I*@&8``!Q*@68``!9*@F8`M
M``Q*@V8```9.^OQ,3OK[_DZZ_(Y@```(NT`*0``0SD)F```F2H)F```,2H-FR
M```&8`#_;L%"PT/+1TZZ_&3!0L-#RT=@```(OT(*0@`0!$<_X)I':```!D[ZW
M^]I(0"X!Z8CIB>F?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.<X,"9O`'PD;P"`<``;?``@__MR`"M!__9T_RM"__(K1
M0?_H0>W_T!M`__$;0/_\&T#__1M`__X;0/__*T'_H"M!_^0K0O^P*TC_S$H3?
M9TYP`!`3<AA=06M$L'L0"&;V3OL0!``C8```+``@8```'@`K8```$``M8```0
M`AM\``'__V`6&WP``?_^8`X;?``!__U@!AM\``'__%*+8*X0$W(PL`%F!E*+(
M&T'_^W`JL!-F$"!20^@`!"2)*U#_]E*+8`Y(;?_V+PM.NA%J4$_7P!`3<BZP"
M`68F4HMP*K`39A`@4D/H``0DB2M0__)2BV`.2&W_\B\+3KH1/%!/U\`0$W)LN
ML`%F"AM\``'_\5*+8`AR:+`!9@)2BQ`;<@`2`!M`__!P3EU`:P`"EK)[``AFP
M]$[[``0`9F```GX`16```G(`96```FP`1V```E@`9V```E(`8V```C(`<V``Y
M`?``6&```88`>&```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&L<!O0BM`_^1@/'`!*T#_Y"!20^@`!"2)(!`;0/_00BW_T6`B<`(K]
M0/^P<`$K0/^@8!1"K?^P8`YP`2M`_[!@!G``8``%,"`M_[!*@&H``)(@+?_D2
M(BW_]K*`;`AT`"M"__9@!)&M__9*+?__9S93K?_D;1AP`"!M_\P0&"\`*TC_B
MS"!M`!!.D%A/8.)3K?_V;4AP`!`M__LO`"!M`!!.D%A/8.A3K?_V;1)P`!`M[
M__LO`"!M`!!.D%A/8.A3K?_D;1AP`"!M_\P0&"\`*TC_S"!M`!!.D%A/8.(@<
M"V``!)9P_["M__)F!G`&*T#_\B`M__)R%+"!;01R$V`"(@`K0?^X*T'_Y%*!T
M2&W_T$AM_^A(;?^T+RW_L"\!+Q).NNV83^\`&"(M_[1([0`!_^1([0`"_[QL@
M!$2M_[QP`K"M_[!F0DJM_^1G#@RM````!/^\;01P`&`"<`$K0/^P2H!F)"(M.
M_[A2@4AM_]!(;?_H2&W_M"\`+P$O$DZZ[3Q/[P`8*T#_Y%"20>W_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+?_P<F6P`6<&<F>P`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<P+B\`&"9O`!PL+P`@+P=.NA#`,
M6$\D0"`*9@1P_V`V""H``P`#9Q!(>``"0J<O!TZZ"EQ/[P`,+P8O"R\J``1.&
MN@O(3^\`#"H`2JP#"&<$</]@`B`%3-\,X$YU``````````!P84CG`Q`F;P`0U
M($M*&&;\4XB1RRP(?@`>&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.</,"9O`$1\`$'M``PK2/_R'AM*!V<``0IP);X`9@``S!X;<``0<
M!W(874%K``"(L'L0"&;T3OL0!`!D8```4`!X8```&@!P8```%`!S8````B!MH
M__(D6"M(__)@2B!M__(H&"M(__)%[?_L>@=*A6L6(`1R#\"!0?H`P-'`%)!3T
MBNB$4X5@YD(M_^U@&B!M__(H&"M(__(O!$AM_^5.N@<P4$]%[?_E+PI.NO[LV
M6$_<@&``_UY2AE.L`19M&"!L`0Y#Z``!*4D!#B`'$(!R`!(`8`#_/G``$`=(B
M;`$*+P!.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.<A,B9O`"P,K````"`4:FP`I
M`(80$W(@L`%G#'()L`%G!G(*L`%F!%*+8.A*$V=H("P4:N6`4JP4:D'L%'+1/
MP"1(<"*P$V8F4HLDBTH39PIP(K`39P12BV#R2A-F#$AX``%.N@],6$]@GD(;+
M8)HDBTH39Q@0$W(@L`%G$'()L`%G"G(*L`%G!%*+8.1*$V8"8`9"&V``_W)*;
MK!1J9@8@;`,L8`1![!1R*4@4;DJL%&IF?$'Z`21#[!0P(M@BV"+8(M@RD")L\
M`RP@:0`D2'@`*"\H``1(;!0P3KH$DD_O``Q![!0P(@@D/````^XL;!3X3J[_*
MXBE`$O0I0!+\<@0I01+X*4`3!"E!$P#E@)/)+'@`!"M`__!.KO[:(&W_\")`D
M(V@`"`"D?@`K0/_T8"HL;!3X3J[_RBE`$O1.KO_$*4`2_$'Z`*8B""0\```#9
M[4ZN_^(I0!,$?@0@!P!`@`&!K!+P(`<`0(`"@:P2^`"L``"``Q,`2JP!4&<$W
M<`!@!B`\``"``"X`0JP!!"`'`$```2E``0!P`2E``28@!P!```(I0`$B<`(IV
M0`%((`<`0`"`*4`!1$'Z"T(I2`,@+RP4;B\L%&I.N@`R0I=.N@?,3.U,A/_<"
M3EU.=6-O;CHQ,"\Q,"\S,C`O.#`O`"H`````````````````3OD`````````4
M````````````````````+PLF;P`(2JL`%&<,""L``P`;9@1P`&`V+RP"[$ZZE
M!U983R=```0G0``02H!F"G`,*4`4]'#_8!8G;`+L`!1P\\&K`!AP`"=```PGX
M0``()E].=0``````````````````3E7_[$CG+Q`N+P`T)F\`."@'<#'`JP`8]
M9P9P_V```G`(*P`'`!I6P$0`2(!(P"P`2JL`%&8``(0(*P`"`!MF>G``)T``2
M#'+_OH%G``)"+PM.NO].6$]*@&<,".L`!0`;</]@``(J".L``0`;2@9G#B`K'
M`!0B`$2!)T$`#&`(("L`%"=```Q3JP`,;18@:P`$0^@``2=)``0@!Q"`<@`2@
M`&`2(`=R`!(`+PLO`6$`_U)03R(`(`%@``'6""L``@`;9UAP_[Z`9@9P`&``*
M`<(@!QM`__]*!F<B<@J^@68<<@(O`4AZ`;(O*P`<*T'_\$ZZ^H!/[P`,*@!@9
M&G(!+P%(;?__+RL`'"M!__!.NOID3^\`#"H`?O]@``#@".L``0`;2@9G4G#_?
MOH!G3%2K``QR"KZ!9B8@:P`$0^@``2=)``00O``-(BL`#$J!:PHO"R\`80#^L
MKE!/4JL`#"!K``1#Z``!)TD`!"`'$(`B*P`,2H%K``$<?O\@*P`$D*L`$"M`J
M__!G<@@K``8`&F=22'@``D*G+RL`'$ZZ!&A/[P`,*T#_[$H&9SA3K?_L;3)"$
MIR\M_^PO*P`<3KH$2$AX``%(;?_]+RL`'$ZZ`\1/[P`82JP#"&8*$"W__7(:[
ML`%GR"\M__`O*P`0+RL`'$ZZ^81/[P`,*@!@`GH`</^Z@&8(".L`!0`;8`RZP
MK?_P9P8(ZP`$`!M*!F<.(BL`%"0!1((G0@`,8!@(*P`"`!MG"'(`)T$`#&`(F
M(BL`%"=!``P@:P`0)T@`!+Z`9RY3JP`,;18@:P`$0^@``2=)``0@!Q"`<@`2M
M`&`2(`=R`!(`+PLO`6$`_9!03R(`<##`JP`89P1P_V`,</^X@&8$<`!@`B`$F
M3-\(]$Y=3G4-"@`````N;`,P3KH&3DAY````%$ZZ!'P``````````'!A2.<@2
M,"9O`!`D2TH29R1P`!`20>P!Z0@P``$(`&<*<@`2`'0@DH)@!'(`$@`4@5**+
M8-@@"TS?#`1.=0``````````<&%.5?_X2.<#,"9O`"`D;P`D+B\`*"!*2AAF1
M_%.(D<HL""!+2AAF_%.(D<L@"")+T\`K2?_XO(=C`BP'(`8@2F`"$MA3@&3Z'
M(&W_^$(P:``@"TS?#,!.74YU+PLF;P`(<``0$T'L`>D(,``#"`!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.<!,BXO`#1*AVX&</]@``#2@
M<`B^@&0"+@`@!U:`+@`"1__\)&T`""!M``C1Q]^L`.1#[`#@)E$K2/_P*TG_)
M]"`+9P``D"!+("L`!-'`*TC_[")M__"WR6,0)(LE1P`$+&W_]"R*<`!@>+?)9
M9AHL4R2.("L`!"(`TH<E00`$+&W_]"R*<`!@6K7(9`B?K`#D</]@3K7(9BQ*?
MDV<.(%.SR&,(GZP`Y'#_8#C?JP`$2I-G#K/39@H@*0`$T:L`!":1<`!@'BM+5
M__0K;?_L_^@F4V``_VX@;?_T((I"DB5'``1P`$S?3(!.74YU``````````!P6
M84CG!S`N+P`8)F\`'"PO`"`O!TZZ!J183R1`(`IF!'#_8!XO!B\++RH`!$ZZP
M`HQ/[P`,*@!*K`,(9P1P_V`"(`5,WPS@3G4``"`L`50B/```#EU.N@/$5H`"/
M@'____\I0`%43G4O!RXO``@I1P%4+A].=0``2.</$"XO`!@L+P`<*B\`("\'6
M3KH&,%A/)D`@"V8$</]@'B\%+P8O*P`$3KH!G$_O``PH`$JL`PAG!'#_8`(@(
M!$S?"/!.=0``````````<&%(YP,P+B\`%$J';@9P`&```*1P"+Z`9`(N`"`'X
M5H`N``)'__Q%[`#@)E(@"V=`("L`!+"';3*PAV8,(%,DB)^L`.0@"V!N("L`#
M!)"'<@BP@646($O1QR2()$@DDR5```2?K`#D(`M@3"1+)E-@O"`'(BP!6-"!E
M4X!.N@+Z(BP!6$ZZ`M(L`%"&(`96@"P``D;__"\&3KH';EA/)D`@"V<2+P8O.
M"TZZ_9XNAV$`_U103V`"<`!,WPS`3G4``````````'!A+P<N+P`(+P=.NO\R=
M6$\N'TYU``!(YP,0+B\`$$?L`.@@"V<T""L``@`;9B@(*P`!`!MG("`K``20:
MJP`0+`!*AF<2+P8O*P`0+RL`'$ZZ]`Y/[P`,)E-@R"\'3KH%T%A/3-\(P$YUJ
M``!(YS<0+B\`'"9O`"`L+P`D2JP#(&<$3KH$^$*L`P@B!R0+)@8L;!3X3J[_'
MT"H`</^Z@&8.3J[_?"E``PAP!2E`%/0@!4S?".Q.=0``2.<_`"XO`!PL+P`@1
M*B\`)$JL`R!G!$ZZ!*Q"K`,((`53@"(')`8F`"QL%/A.KO^^*`!P_[B`9@Y.1
MKO]\*4`#"'`6*4`4]"`%#(`````"9Q8,@`````%G"$J`9A@@!F`4(`30AF`.*
M(@=T`'8`+&P4^$ZN_[Y,WP#\3G4``$CG-Q`N+P`<)F\`("PO`"1*K`,@9P1./
MN@0P0JP#""(')`LF!BQL%/A.KO_6*@!P_[J`9@Y.KO]\*4`#"'`%*4`4]"`%=
M3-\([$YU``!(YP`2)F\`#$JK``IG"B)++'@`!$ZN_I@7?`#_``AP_R=``!1P/
M`!`K``\L>``$3J[^L")+<").KO\N3-](`$YU+P<N+P`(2JP#(&<$3KH#KB('[
M+&P4^$ZN_]QP`"X?3G5.5?^P+PY*K`-`9A)#^@"(<``L>``$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;&EB<F%R.
M>0````````````````!(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.<S,GX`(&P#.!XH__]P3[Z`;P(N`"`'4
M0^W_KV`"$MA3@&3Z0C5XKY/)+'@`!$ZN_MHF0$JK`*QG3"`K`*SE@"1`+"H`A
M.$J&9@0L*P"@2H9G-"(&0?H`LB0(=@LL;!3X3J[_T"!'4H<@"!N\``H(KR(&M
M0>W_KR0()@<L;!3X3J[_T'#_8$Y*K`-`9A)#^@"&<``L>``$3J[]V"E``T!!+
M[?^O*4@!N$AX`#Q(>`#Z<``O`"\`2&P!U$AL`<!(;`&L0J=.N@&,3^\`(%.`7
M9P1P_V`"<`!,WTS,3EU.=2HJ(%5S97(@06)O<G0@4F5Q=65S=&5D("HJ``!#1
M3TY424Y510``04)/4E0`*BHJ($)R96%K.B``:6YT=6ET:6]N+FQI8G)A<GD`]
M``!(YP,R)F\`&"XO`!QP_RQX``1.KOZV+``,!@#_9@1P`&!F<"(B/``!``%.N
MKO\Z)$`@"F8*<``0!DZN_K!@2"5+``H@!Q5```D5?``$``A"*@`.%48`#Y/)9
M3J[^VB5``!`@"V<((DI.KOZ>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.<!,B9O`"1^Y
M_T*G0J=.NOX,4$\K0/_X2H!G5DAX`"@O`$ZZ`3A03R1`(`IG.D'Z`$QP`")*T
M<@`L>``$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.<!,B9O`!0N+P`8(`MF!'``8"P@:
M!R(\``$``2QX``1.KO\Z)$`@"F<4%7P`!0`(0BH`"25+``X@!S5``!(@"DS?A
M3(!.=0`````#[`````$````!```=;@````(````$````#`````8````````#F
M\@```^D```#43E7X7+_L`O1E``+.2.<',"XO!\`F;P?$?`!Z`'`!OH!O#"\KC
M``1.N@+L6$\L`'`"OH!O#"\K``A.N@+:6$\J`"`%#(`````"9QP,@`````%GY
M#$J`9AA%^0```2I@%D7Y```"@F`.1?D```,N8`9%^0```2I.N0````!.N0``O
M`'XO`"]``!Q.N0```$(@0"EH`#(#/$AM^'0O0``<80``KDAM^'1A``$&2&WX4
M;$ZZ`GA(>``!+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.</,"XO`#@J!R@M`!`L!"`&D(4F1
M;0`(L*T`%&X4+P0O!R\+(&T`&$Z03^\`#&```.8@!]"$2H!J`E*`XH#E@"!+3
M*#`(`"`%Y8#7P"`&Y8#1P"1(8`12A5B+(!.PA&P,NJT`$&WP8`13AEF*N))LP
M!+R';O2ZAFY>0J<O+`,\3KH$TBZ3+P4O+`,\3KH$V"Z2+P8O+`,\3KH$S"`3C
M)I(D@$AX``%.N@2X2'@``2\L`SQ.N@2@+ILO!2\L`SQ.N@2F+I(O!B\L`SQ..
MN@2:3^\`-%*%4X99BKJ&;X`H+0`4)&T`""9M`!B^AFP2+PLO!"\&+P<O"F$`M
M_OY/[P`4+"T`$+J&;!(O"R\$+P8O!2\*80#^Y$_O`!1,WPSP3EU.=4Y5_]B_G
M[`+T90`$)$CG#S`F;P!(+B\`4'H!("T`#"(`Y8$@2]'!*5`#3"@`4H12AR`'&
M(@3E@=?!+T``&"](`!Q@``#N?`!%[`-,8`12AEB*O(5L!B`3L))N\D*G+RP#U
M/$ZZ`](NDR\$+RP#/$ZZ`]A/[P`0+@4@!>6`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`@4X<F;P`HOH9NID*G+RP#/$ZZF
M`TX@!M"M``PNDB\`+RP#/"]``#!.N@-*(&W_["202'@``2\L`SQ.N@,F+I(OD
M+P`X+RP#/$ZZ`RI/[P`@4H52A"9M_^Q8BRXO`!@K2__LN(=M`/\,+"T`#"9OI
M`!Q%[`-,8`0FVE*&O(=M^$S?#/!.74YU3E7_\+_L`O1E``+,2.<',"XO`#`L:
M+P`T<`$K0/_P(`<N`.6`(&T`"-'`)$A@<BH&(`7E@"!M``C1P"9(8%H@$K"3)
M;U!"IR\L`SQ.N@*0+I(O!R\L`SQ.N@*6+I,O!2\L`SQ.N@**(!(DDR:`2'@`^
M`2\L`SQ.N@)F+I(O!R\L`SQ.N@)L+I,O!2\L`SQ.N@)@3^\`,%.%68NZAVZB%
M4H=8BKZ&;8I,WPS@3EU.=4Y5\#"_[`+T90`"($CG#S`F;P_P+"T`#"X&(`>0X
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<O+`,\3KH!EBXM``P@!M"'?
M4X`@;?!`+I`O`"\L`SPO0``H3KH!BB!M\$`J$"M%_^@@K?!,2'@``2\L`SQ.!
MN@%>(&WP0"Z0+R\`,"\L`SQ.N@%>3^\`(%.&6:WP0'`!O(!F0$*G+RP#/$ZZN
M`3(NK?!,+P<O+`,\3KH!-BMM_^CP3$AX``$O+`,\3KH!$BZM\$PO!R\L`SQ._
MN@$63^\`(&```-@N!"`'WH<O0``DY8!![?!(T<`F2"`O`"30K0`,4X!([P`!)
M`!B^AFT(OH9G&+Z&;F0@!^6`0>WP2-'`(!"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`"!@`/]P0J<O+`,\3KH`7BZ3+R\`("\L`SQ.Q
MN@!B)JW_Z$AX``$O+`,\3KH`0"Z3+R\`,"\L`SQ.N@!$3KH`-$_O`"!@`/YN4
M)&\`'"9O`"`L+0`08`0DVU*'OH9O^$S?#/!.74YU3OD``""`3OD````<3OD`:
M`"IP3OD`````3OD`````<&$```/L`````@````````5F```%6@````$````%Z
M```%;`````(````'```%<@``!6`````````#\@```^H```"\5&EM92!E;&%P%
M<V5D.B`E,BXT9@H``%LE,#-D70``"@`;6T@;6TH``!M;)60[)61(6``;6R5D-
M.R5D2"``475I8VMS;W)T('=I;F1O=P````````*``@```0```````!0/````1
M```````````\````````````!0`%`H`"```/2&ER97,@4V-R965N````````4
M`H`"```"``&`!``/`````````'X``````````&EN='5I=&EO;BYL:6)R87)Y>
M`&=R87!H:6-S+FQI8G)A<GD``````"@`````````````````````````````<
M`0H```````````````````````````````````````````$L````````````X
M`````````````````````````````````````````````````````````````
M``````````````````"```````$```0`__\````.``X```````````````#_>
M_P````0`!````````"=.```!7/__````!``$````````)V0`````__\````.V
M``X````````I3`````#__P````0`!``````````````!F/__````!``$````H
M````*6@`````__\````$``0````````I<@``````("`@("`@("`@*"@H*"@@Z
M("`@("`@("`@("`@("`@("!($!`0$!`0$!`0$!`0$!`0A(2$A(2$A(2$A!`0@
M$!`0$!"!@8&!@8$!`0$!`0$!`0$!`0$!`0$!`0$!`1`0$!`0$(*"@H*"@@(":
M`@("`@("`@("`@("`@("`@("$!`0$"`@("`@("`@("`H*"@H*"`@("`@("`@L
M("`@("`@("`@($@0$!`0$!`0$!`0$!`0$!"$A(2$A(2$A(2$$!`0$!`0$(&!2
M@8&!@0$!`0$!`0$!`0$!`0$!`0$!`0$!$!`0$!`0@H*"@H*"`@("`@("`@("6
M`@("`@("`@("`@(0$!`0(````````@````/L````!0````````'@```!S```:
M`:0```&0```!?`````8````$```!O````8````$*````Z````*````!H````V
M`````_(```/I````!2\.+'D``!3X(B\`"$ZN_SHL7TYU```#[`````$````$D
M````!`````````/P`````E]$96QA>0````````````````/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?0VQO<V5,:6)R87)Y``````````````````/R```#Z0````TO#BQY2
M```#1")O``A,[P`#``Q.KOZ\+%].=0``+PXL>0```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<V53:
18W)E96X``````````````_(#%
``
end
size 15812
SHAR_EOF
#	End of shell archive
exit 0
-- 
Bob Page, U of Lowell CS Dept.  page@swan.ulowell.edu  ulowell!page
Have five nice days.