[comp.os.minix] esdi_wini again

dbx@olympic.atmos.colostate.edu (Doug Burks) (01/29/91)

Greetings,
     Here is the second version of the esdi_wini hard disk driver for
IBM PS/2's 60MB and 120MB hard disks.  The changes from the first version
include:

     * All hard disk information is now read from the hard disk adapter, since
       the BIOS information apparently contains garbage for some machines.
     * A small bug was fixed in error processing.
     * Dead code and variables were cleared out.
     * Comments were spruced up.

If you couldn't get the first version of this driver working, try this one.
For most people, the biggest trouble was failure to pick up the proper hard
disk DMA channel number.  This corrects that, especially for Model 80s.  If
you did get the first version working, upgrading to this version is optional,
as the bug fixed only shows up if a read/write produces an error.
     For those who missed the first post, the following functions must be
added to the following files:

klib88.x:                             klib386.x:

   _out_word:                            _out_word:
           pop     bx                            mov     edx,4(esp)
           pop     dx                            mov     ax,4+4(esp)
           pop     ax                            outw
           sub     sp,#2+2                       ret
           outw
           jmp     (bx)

The line '.define _out_word' must be added to the list at the start of both
files.  (By the way, klib386.x exists only under Minix-386).  Otherwise, just
copy esdi_wini.c to wini.c, and follow the other instructions for
re-constructing the kernel.  The uuencoded compressed file 'esdi_wini.c'
follows all of this babbling.
     This driver will not work for smaller disks on IBM PS/2's.  Use ps_wini.
This driver will not work with ESDI hard disks on AT bus machines.  Use
at_wini. This driver will not work with other ESDI devices, as is, though it
can serve as a decent start by replacing the IBM PS/2 dependent DMA transfer
and other odds and ends.  (I hope this paragraph satisfactorily concludes the
long confusing (and frustrating) discussion of ESDI devices under Minix).
     For the good news, this driver has been reported as working under IBM
PS/2 Model 50s of various kinds and Model 70s, for both 16-bit and 32-bit
Minix 1.5.  I've only received reports of failure on Model 80s.  Has anyone
gotten it working on a Model 80?  The performance of this driver is rather
slow, taking about fifteen minutes to read through a 120MB disk with 'dd'.
However, speeding it up is beyond my current knowledge.  Any suggestions and/or
contributions welcomed.
     Finally, I would like to thank Art Roberts who contributed some of the
changes in the driver, but never got it running on his Model 80.  (By the way,
Art, this version contains no significant changes from what you have.)
     Good luck, and feel free to ask any questions, report any problems, make
any suggestions, or send any contributions.  I am especially looking for any
reports of success and failure.

Doug Burks                                     _O_
dbx@olympic.atmos.colostate.edu                 |<

--------------------->8  cut here  8<-------------------------
table
 !"#$%&'()*+,-./0123456789:;<=>?
@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_
begin 644 esdi_wini.c.Z
M'YV-+U0H *$"A$&#:,+((0."3)HY:QK*26.GC!P09MY<3".F#0@X<U[( %%Fz
MCD,08<B$@4/'XD"!! \:O#.13DLW(,3D:?BFSIF<=>2LF<,B9Y@Y91B^P?F&y
M#AJ+(-JD<9,&#X@[4]-(I&AQCHN7,D',>=.F#$HR#NFD63HGYTZ%=$#(>2/&x
M(ITY8&6R.1IW3$(W9Y+J,"ACI)(P.&/DR!'C9=Z#<LJ8L5C&S9B2.AZ'Y>@1w
M3M>E8=B(S3.G91N1(!(NO*/0;$N_5,>$EBN9LF6S(% HQH$CA6:9G$'8@/$Bv
MA@P8;<1@K)JTX<.(9"96!/$:3>S9D2='OFU0=P[>O@G^EETQS-W,,</&=/IPu
M:\6+"=O6K4P;CL:6#.F\N:HQXE(0P8&$6AMOD%$&&VW5  -*;I#QFTPW+(B5t
M4P!V=$);PQ5W7'*I*<200Q!Y]6!,&5T4!G5RU&%622>EM%)+<A3E%V*!M845s
M&Z(E-)U^.9G51DIE%"5&'7&QAU=ZZH%PF1QTA#$5&SLA)4=%;1V%$@AGO%&@r
M6$TR^162,A7DQGYJE=7372A%!F ;<+!11EENX%?46-2AT5YT7%TT1D]L,/37q
M3W4TZ!*88:7T'E)*+I766FZ(2*A!!3FUHAQS703'7)?-,<=4/\4'PIAQS8=3p
M2Z4EY8)!;>P$8D1W]->6?OO=<2 ;7\)4$!5/N0?5''7 81^3K^::$8YO8 48o
M"&]X)H=YC+:%0AV;'EN6IF$$AI%&/\;5A@PIH&>K3&U\04<>GJE'1!%6)#%$n
M$3)!(<430WSAA!1A#?%$%4Y0T>X34R1!11)/.&%0$$1((4414TP!5@L,-^SPm
MPQ!'+/'$%$\,%A\&$9'$%$M\<3#!(&!LH!UI7&80QI>^,<:G%V'L%JDG&_2&l
M&68@%1?&0YKQ$1TM7UQQ"RM,'+3$0T=<-,1'/\S'Q2!HS/$75TCA+[LBET&Rk
MR2%_A"G+6;]<4LS(TFQSUCGOW'-,/Z>M]MH47SS%$$%00441!Q/Q!<!57XT;j
MREN[T3)M<:A8VAPN)XGQ6G:8'?+";#?N^,^.Q82K66:DX6:B<3K9*+)NK!BGi
M'#O9-Q4=WCYFK%\EP2CN46OHD,"/4Y'T^4YW/(73'*29!J!\<_F$1ER]OO2"h
M B-,-08;=1@(@@AK6-0YK6B(0+SQR"O/@U14X?&";#CZ[0(:/DQO6?5F79^5g
M]GNV\7WXQ8^??/G85_4"''"EH=92ZRN@?T J]%\022;12AI>L!\7L00JOT(3f
M089'/ -5KG,&&4(3[':P(QP$!GB800UBL* D&20@!DG?CQH$H#A9Q QA,%EDe
MSO 0&'DP3,,;@0.G@ILI4"%N'BN"!4& 00UR\(4@ "&7S .M$L((A2HL PM+d
M=1$@0BJ&,X0@"(0P!"HP(8<[[.$&1_)"(8KA*"7#',_>()H5MA J3H1A R5#c
M0X,(P898O& &MPA$+X)Q9:4A8EO,R,0TAD4%4&2C%.-&A3@:1(LQF$$=_V>>b
MF]P/)WQTH1_5 \@U/A W2<B7(7DXQT0NTB"CLTB*6#)$.A0QDFAT8B7WY[_^a
M&>2+F\)CDTRY1R6>\2)BL%];%J@_&0H2-T1H0A"^4 0G!$&...C@)YLF3-F%z
M00QN(L,/)IG&2OKRD@;)9"&AX 0BR)$&RNSB_T))J5[%Q3,-XM0TJ:G&:[81y
M!!*TF[MVR,GCI%&((D0,0V*7LC-$1E/K9*<UHX@;(51A"EE0#P9_Z$0AML> x
M+AP2[@+*SH,,])<&L:$4OF"$*C!!CC# P3W_ET=:&O&$*30+*B]B,XJVDZ 1w
MG"!'/0I2&HPTA&09X3Y-* <DJM26?31#'7#D4EZZ4XI8,,)&#Q8%D')QF2IIv
M$HH0,P?M($M9S/I/9%*2AZ(^T9+OU.87IE $?1T2#S"(P4W/\J)=5<8AQR+Gu
M*.G@U3\R4 '\\Y]!&EF91])FB2[,9X-VN<JCXH:07XCG6=/J1WSF5)^ $UQ<t
M*FI7L Y2;L1\0A(6^]1EOC5L)RTG*5.6J6C]!(@7Q28($!L$(9@5@S!0Y%J?s
M>9\ZF64,0=E.7QY+PFH&4K6(E8(-SUH$FZ[UGV4H4JY8I!6(IM*/J\1K*_]'r
MAA_]]99GB4Y)D$)8!AHV8\(D)A:HH%A.QD"DXC1(&?!P$P,Q1*B6\>M*?6M9q
M8(:W"%@HPA!DLM!CII<D['UK<^ [!K^NMPRX;0ET[YI75T;E(9?!$6+*T)/Np
M]A*F(* ;O9S8 K5Z4(B!Z=RR1"-*C21*>90U*H;)6L4G;+1?6F#70>B8)"&Jo
MYD//$0N"]</2-.@!-UO0":FZX,'4OE.86""FP5P\A; 8]\/_^Q$>TM"&.GC$n
M#5:NRT5F1IN4O( F]OLIS]+P-15C% 1(_D+!DF %A(6EL^H1HI2I;.5/91DJm
M7(8#&DA3LMG@B4J5_6[3T/4%*-!-S5)K<W=BL()Y%3H(4OC7OP(VA?"DF)I"l
MQ')R\*PS-KR!A=QKB-5*]K7_E"&%:*CLI3']/X/HF<^AOK%S(*(K^@K:T>=*k
MU[J:+!,4I'G-;9Z""G)=Z$,#NPB67O5:YUSE*]]YRYW^=)]%,S)2[]*BOWTGj
M0J=0:!??4*%XR &</TC2W+U)C',130*O)-!L2Y$)23@"$@H9L"1A< CA/(@0i
M*X>'I+1@52@I,$7LMQ,VI.$,O_OKJ7Y$ZZ^RLI4&L8-"TO!,-UE8 >YB<]S8h
M59H4%?@J60'!'B8IQ%7-KWY^G4J)LL4H^AYD=%=QPQ>2M2<#[8"R0HQ,X%+7g
M'( GRR)9Q<F"!Z+LM69L8QW[&!%>X+2.16UJ[2:Z$6/^!=+Z[>85%2)IMQO9f
MU''JJD#WZPLK^?(X4?W/9<!ZUO_WZEC.1M8 1[N=-]U$51O$T\>Z@\QG5K/De
MJIWD_^/[V+: E )KI"W_$2J.9KT&(O-(4E\MNM&[7BH<TQJ:*HL(-<E^]Z7\d
M1.]?\/0=_LY.(8H^=3HV_$5*9-N/H+SEE!S>0?#^>9EOZL>D![Q! $X_)MFOc
MY;<'<N%Y/ <B)XGS4P?]G@)%A]PW]G];)<.7:_+3G9=&+#X&LI!+8GPU'H1Db
M<OC"]FTD\Y1H5U/.EXD7ZT SJ)C_GVUAO<XEVYP![J>R?0 Y5;: :W2I"V%=a
MD'Y0!DJ"@@>#P4-%40,@P# 8,534EF,Q4!3C%GF2MTP'T11/(0=S<(#FYWJ^z
MYU>:IF6QAW%5( 3PME\P!RV<(GYKT18]  )&$ 1,0%:DYU#!8A:Y] 9M 2T#y
M9F)PEV/V%U"5E'%6L'%3YS=?@'9S((#JQT@%5@>S$8*<]A%[YG8/2&MRQTM$x
M:(33,@?58A9W\ 5=R(3DABKG$Q7;]85<XG&FI"8Y8U7'-SQ;.#=3)UADL 4Tw
M$(!KM2>?0T9NHB>\Q1!O^%QC)X>)9H2!LBEGT#D[%1<E!2WBYVECL 9;D -Zv
M*$2/*!^2Z!]$ @=$@A%SX1$G8H=:>(ATF(@'QXA*HAI 809;8(+PTC$P5@0!u
M*'456&-L]WK_T230A(/L!X>3-(2FR"XP5UUA\ 4SX@;/0X;[QAR6!QW6E8S/t
M,W<B6&0,-ET&06"/='%&X&)7 &G>9 =OD 8,P1K-DQLIL ,*T(U2\(U2$([Cs
MR!![ @=Y4'5,@H[JR([N"(_D*!:UA0+IN([>"([)AXR!B(\"V8X$"7-A2 9Or
M\ 6K$1< F8\#^8X%R3-49543F9#[6)"-] 5@IF ;J8\+:79A*%?FA) D:9'Bq
MV(\-^2-?8#.]LI&LU ,V>9,XF9,ZN9,\V9,^^9,]:2L),)0)<#I/P42K Q%$p
MF0!_! (O 910&952.94Y.80E>((@T)+E:#Q'J3I-0FL *7+2]1M2HC>U9'UHo
MPGH_2&OV%SFMME=FX$)9H1:AX6-?!WFU0T8^LEU%P1KV<RTF0GG:DH:!,2<6n
MH3>_83^&24*0]T]#=1=]Z21QP7HG,G^HUX5?:)A30FH 0@=%D5QCX (L\!N@m
M62NR1X!Q$2-*$AI_6!2D]057IS\'88YF09.S:2>7@P)4( 55@&QB:8L&$1F7l
MP16Y$01.D 5%80)AV(4!J1YIH#,HL)S;Y0+A,A9!83(\P$,I()8O="FC YTBk
M8)0\=Q%?&1%9,IC48BUF$(H@4 )DP 5N( )]*8;369T](0>7T9P>Q(=J@65Ij
M!YP@T < RCU_" (O*)V:0ITQ>9^7H8[J\9I^8Z!709\)ZB[P(B]2H(X .@<3i
MXA>Y@:!>$2[CXAG;N0>RN9]'819-ET,$@QXHBB@K^G1SXZ) =!$'FH0/&9&Yh
MH9P4.@?Z"41BL%5KH*$O)!N(\C:$1#=%8#< 0Z,O9*,\\05VH*,HP*-=.)\.g
M"9%D< =T\*,O%*2G-J0GFB0.% :/Z:0>!*5%D$E%R 0.ZD1@&@9BJAX"JAX@f
MJJ C:A8O>$-/<S!0P 19L ,) *!WZJ>%]B[Q,B\2"J%R\*8R4:A%  5C=4-4e
M<% 2VJBX:!!C<BI<-GY3U2C:$1G25V* J#S(=Q!(04(H0* 6D9P@^J,"*J Ud
M296T6JNVV@/?<HNS*:>XH:O0]92W&JS"&I2&J'%TJ)57P:OH*)8!D9A409<&c
M]V-M8346D0?L<2R=DQ3-P2,I,BJYLI9KX)9A 7G#(GI?%V9M4"5J,I<4%ZV"b
M,2(,"*XH81,3,20P4QH:47\XD8-'\I8'P8"]IQ9^Q8MN4A31!XIDT7JK J\Ma
MT!#6A9&@"A72>" &>VKOQ9ZX4RH>L5(,Z[ G K%5Y7XDA)(LT19; "(5EQ1=z
M(*XR 7GRZEP;T1;L6I<_5HZVTWH!$A(CT1YMJ(I+,9J$HH+' GG]M"QM\".]y
M>%5^A11N\G$KY14&X11%!'E+ 26_87Z_!QJB,;/1&G2[$Q5R^G6\HB:09XR?x
M&K(F,K(\-5?]6BAJ@K*]2 :G@BR2LA'/VJX^YK4ITXOIFBA#)8BW]123V(.Jw
MR2M^<;55PA18Y5>!8B!RP!IY,+=$JQ"($8]^VR?9=26H,XF R58') =7*W Dv
M,RX,PA"T=8]4N[C-(KFYPC-#%3J4.R;]*!N05!+)95M7JQ*?.[?,9SEB40<>u
MVBJ40F;J:A8I4Q%NT)=[EA,8:!$_(#Q2AXJ+J*]Q$1UV0(9-B! >PGBU)H5Ut
M-W0'T7;B9ZU?\W[;A;U!!'VG)AK\FEWPMVJKI&_J.V;4VGHI9$I1^&R@):]*s
MB+ >T;Z\%+Y5:)#TF!L81 ,W4 -,4!16MA*Y\9HLH9I$4!0H '[C2RHID#-%r
M$0,IL,%,\*-(V+\OB *CLYTJD#..^IRY$<+2\34^@&9!D&3'5FDLDX0M[((Pq
M+,.)AC I#)TLS!5MP0,O" /;&1D]2Z39:&(H8+T2"@-8Q\39^<-4@G4KL +6p
M6Z( JL+1:9!'"UE+/"5% 5O#D0-%80/;&0(O^ 1+@,7=B1AAA (B4 5ND++4o
ML1^!$1?RVGMA4!8P,@?P*0)>:A!U&A;&D@9;4 ,J8+U=X *@%WP2B@+/TBBIn
MV!RTEP*9&(F9MP4S0&0\D)TQ8,:+XZNY(;VJ6,F7C'F3N 4R4(L',<@  IUAm
M2(HH< -AC%;#$00)>,9IO,;<&1;T$QNY$<=SG+0\<L<=LA#<:[83RP9_#*M2l
M9XS(^!?3.,*GO(FJ3&0FP$DS@&]$# (^\,(<I([-2BA&/!'4>H,-N'@!F[6Ck
MDK+0.YM9L04PL,B@)WH26LB'3,\R9\]#[*92QWI?G#A#_,13 @)1''Y*2,56j
M/"583*@]Z@*Y]G\2JH %8;V..IL/#07\XB\ (S#]?-$S\=#V@B_Z\H*P. 2Ri
MF 0Q!M(3VH4N0# %@S!--L(S<A$JL)TH[- N;:&)2B\O> 69- 1(@#!SDZ$Zh
M79_B0BYZVC1(QZ)$@,3  <LXJJ5<NJ.O"@)H/$5,$(MCI=*^::+=.1%Q IY#g
M@!@GD)H6ZX$"VW($:Q;_(9Y]Y)Y_7!17S-('(14XD@9)>"!AL!,H<!PP$-B!f
M+!/\.14JPM*N_'+0F3.'S$%$EM485 ,*&#(NP]@;% .//<1X$ 1!P,8>Y)UCe
M'<Q)X 829W ,L<X#2\=OS97CV9[O&9]TS=!V;89YO==[X=> +=BS+4:&_9]Td
M.J#)4H^7(I$D'"<I@,AUG:D887&I=B:MA]K-$HRG&:!29\1!X0;J**O2-:S<c
MW=VX.B)%-X_"?8^B7&3 ZMWH7:O":*SL@JSB;8\2"4MEL-=VX!LP)]_T?7,Cb
MMW9&@2C59C*L)W>5-,[^6CDX@GB?Z++;RWNZB!-<FQ.;6+K4.(6H/!0L>Q!4a
MB[GQ8Q70_1^\XBNUQ1JU1" 5009S8CRN82=M@787X1!DX 9G39I3=GVL1T:Gz
MW>".@GSSU7' >TYP\05]!3H$X1F.NN.N^W&%3!!Z!]4 72[4?.0^SB1 /CL$y
ML9TFP-A0 &F%=$,F6 1?\ 1&8 1= +1 I'<2JISQC-\C P(K  *8/=OEDIV0x
MS.,?%[!3SC,[<=,@<.7LMP59'FE?P.5,X.5@+N;;V>:.]N>2UM%3,-M5[!E%w
M4<5ZY]F/Z@8MX /U7"R+6@:7+GJ%Q])Z=^F-G'V;?NG!YZBN/!;W6*7XK.96v
MLP*8'9#:O=WI7>M1F:OEK>J35=Z4=-ZV_NL\N=Y%>*R6J^L?Z@:^8>1LJ']:u
MH7=;H(<F2N!AH>OHW.'MG+0IM"<+<9=DDBL/7N$3#KKB02A&@A*^TAIQ B4Dt
M87#88QY?(Q6:\G763A1UTA,(UYEB,0:1<0<[" >_8>WAWA;ITWO-,2&I)K0_s
M808^AQ,.T7ZZ!7;+TI]G0);FEJZF6=U )9=FEP8LH :.2N=QD>1TP"9,KL1:r
M,="@9- @D.A:SM&4AG5I4,64?A  K09-C'4VGYTL'VDN[P13T&$X+_.]G"1:q
M')UNL 5JH,^AI^DVR4,&80+9''-(#^M*;\^0O9V4#:!)8O1(7_6:_L+.K@94p
MS\C[K.E['O5A/_:9?@=8/<0I,/,>-/)P<,]'G_2[/9MU3V0'6O=4?_<SP?>8o
M+:%RO]N)+<A2Y\K6+0?8K0"S'A# _OC!#MZ4%<L'R>OF31"0G_DX*>Q&R)!<n
MK%.Y\=]!HB1M8.)S!Y(:008^J@#%.&H-*GD.)6IZ4\<0[^Z<$W66+[\R$0,Mm
M\%1M-VW)W,+A[GVYG[X0$A;RRI_I5J"%R/IF-P:EC[ZZ!R")TL6,N1\'EF"]l
MNGG# W.:AOH+L80BEV*QOUZ>46#-X<A<EHD0GGEQ.):$DOU$4K[5#_J4J=8Ek
M,U0*(?ND=N%1FRL_)^*UG/; A\A CVL.5J)<%8L-U+'TW:E1,)"'%%6XCL6Uj
M2!WK(471Y^OHA-:C_/S0H/!7!H$!A:04=UL.$KA[/+FB ^*(5@6VUH#8"@HDi
M4/*A&P\('ZR$0Z@1^.&Y10:246'J'V017J:O+I0(LS 'T, ;(!F 009"GL[!h
M7GB"F=,E=6(NF(>.Y9<FDXE!#*%EKG2L@V7^=DQS\%Z@!0@B'IU!BMB?RL$6g
M06<+)I?KQ@$/$ON;@./.7V7 8_$#:\+7>5I?*]N1A5]&9@313J@,%>?K0!:Xf
M97"2(*$@66B"1U2&L97BS$/K87_SA3_UE;90&BR':%@);8)VV([?4+9*0AH0e
M5=>EC[2'Z#-][,=-N'B0(>-!!9CC J5?&5I #6L.Z#OSX*$8D.1!/C G$[G"d
M.$-=<@S,*B6G1!5>A-*F(M3(,W-]Y4.(@8 :L MUWUE0 ]"B>B'#SG6?0  /c
M E\XQ?K=H7DFH: ?0\@;I";WK!_+(8],8(2C+,C'#FV!P#?0QE08^D@C,/1-b
M0XR!6.))0/IG2LP%WCR#H ^SDPQ0:"X0[B$+(@'^& (*B"=81$8$HBW@ KO a
M8 L4$6XCV2G<5)MV4V\2B+/'_4E$#\+^7M!4N&"UZ8T4D@HRV!1;;@@!*(#]z
M93.$V%$^&$X34KL-(FK$P>;*7)E,Y%RVR2!TQ F%" W8C])B["^K+;%YR$G2y
MRML;>A@-'E(?>3C[Z"%F:2U48+"=I+65DE  $6-IB4_H:!A4AP\O @K0AR@/x
M!/3#TR<& 6(:$(BUPW)41-[TU;1>Y\&))5$GSI(BXA%ESO;)#2(1B\3%5Y8;w
M5"((T"@SY8/E!)CH%JVA&XB(-'%#S<4Y@,E264.44!\1".8&&X)#2")+NXD1v
M82-2MZ1H$T#24AR*37&U8)8BH%GN82KL609!C64W_3&K-%_F$TI$J2'EJ"U%u
M!Y924_)UKA'8<3XZY/FR5$1" >$B@OD&S&0M5$!PY!F":@\,)1 B.G@*[3M8t
M)B8>@B@U-.!P77"R6"%A!%:)]L>YUE/"4G#(;&'%P;"PN89"ZREMY(C@@);&s
M5 ;0$DJ(/P[H+;0%^Q#OL!T),7 ( G<1"H!S!N4 R_%P4 X&]H@AN)KRVK$Xr
M 6$(9&F'$T#[')+"^H3CXC<(KS4PM]+BY4A$P*NT*)[:MXW2Q$]I ?3+])6[q
M'[$3Z@)9ZA4G!'E4F!/''2+@4A@C*[#%O8&O 7F\4%FX?5"P6+@!R77=$(\;p
MX(3"PAEQK_LU<$B7P4$XGNDJ4$2@@#OFUL";?QKH4Y2!Y@!-IH(+-(3^ZDC^o
M#GHW$9#D\PI@UQ&P[ HHQ^R4W.(K.ZF)KB'#ST0I#@]4$WT2ZCC*@4L7T=9%n
M#V.*G"D[+0@^  Y-A@]X0?U'UR",(K8&%9]!6%-/X$X"QZK#,R[=2,L7;4^Km
M<;591"A18X9A4S((JIFY%X3F]H_H8V5_3]3)'+GS@D0?TR$TAF:C'!M!!4*\l
MT'20.V 0%\(R2X?I1J7P^Y,U3 E52C9X*1.E.Z25H(?F%(BE)B<OG8A2:JRRk
M(*PHI8,L+D*,DAIT2%;FAF+I S1:OY@T J,$2$J4UM5B3*3L9EGQ4&)*?R9Uj
M0EVMG#EBXW:](&II+7O>"V Q5,#%=,LBH"C-9;!,EW1@!9RTE!9CWJ5^B9<Oi
MQJMYLY@C*F-2]MF5AI*':$I@N7?P)9O;>P53]#@J>RESEH_969>,<D[Z@$=)h
M!28FP_P"YDM3/#(+-GZV$[6$:0<C87C,@FEUH!2[1%08"JJ="9 X&;, M]%Hg
MD0:7E1":B0*V3;?)F=L)8\ ;>4-OG$ Z<DK%S_A1!S:XBW(%P"&2HZO@')R$f
M8PQIGA(C53C,B:F7-ADELU.:T3!,1J%AS8:F'J!4@EP6$4L.&+W!IL5LU"Y[e
MB6&**UX@@G@7>Z;-_)DWI"A\Q+KI,W'F#;%R(, /#,UY\^6,YLTIC+=(B*!&d
MOO,@:0W45(]:<M>!2=I@*5& VP0!:FR=[,MY"0(& Z*4=:R1UN7&QP<;A]+9c
MS$@6P3:&":2I D8GY-N-Q,@DB0NTB;;6I@)0=CVN3*J )3?^=%]S="$HT"S(b
M'9#'2Z2=3(@^V9'Z;$?3<CG '9>)*B?".YZ&X'G,GI'_:SVD,!X&0+UU0K %a
M.E. QN(GE J0X"V2! -R@+;/16I#[ABN'@4L+"&_AV:10!](0N;@3]B +K(/z
MQ4@JN!35)^@[@=VN!.K/UM0"7R#9>@HR$*<,4*C@*6X@S\D/N>)2C)H>2(J y
MH)"0#/DJ@8H%(X@$?\(27"_52T=VIF A!>E K3"?#:L*=BXLB B55\E(-57Fx
M^H3+$W$"H.?9LBK1)P^<  V:B>;6Z5(N)7!]JK"_Y)!* HPSH1UK;/0*"9='w
M[M$2+5N?<,>@(0(AY!3D!T2AR>HO428'1Q59PHE;1*SI+BT7$L)E((\5%7>Xv
MT.R(OF:8O?B?R6 X$8'U^$_(,E\F)RM, VQ4N3$@61CQ:F'#NH73C?:$C;[3u
M?"Z-$'$!B!0$!)E-5'QH'WM$2U3R'-I1LX.I*M"^"10"1ZL42IR0$C/D=ME.t
MQ'#[81NIDPL78QY]A; DC$!"89B50D,Q1"T,Y"# 28AY+N5.)UN&]?)C"DOEs
MT?2691$@& )1'7)#S48#AH-:Z9.^39"M.T0!ULCC0ARFG*28PH"1@$SE9C;4r
M*>M0[VU+?LDN7L!?_)?R<A8Y*L&C+@GFN22GS4?JJ,-5]LA*& I IWN.DX2Yq
M,/>CU.$F:Z?&[9TZS&_FYLR8I@29G3$>@D;.Y!0+B3TL>5X1+"I,?J@5LA,-p
M,(L"<69*QH,H4RJ(0M2&##$-.,3+>!AG(JA;DKJ)+6+$MY@9]^).W)OD"R_"o
M$<M8&+482O2++-&C',4X-:<\"&9$2+^ME46OC@H7H=I.G(HP8J[X1$49%$<8n
MG,08L$4(',5F^J@ *AWPC&$&3YJ,@OH%H*)4_ (]T2H.MG"980R&-9U0T$PFm
MS;VUZ5,7XSW#JEU4(G&P?ZH4H^I G:JBL9"0QB1@&D$)=$J)9C6;P18CL)U>l
M6&^@G+QR*V(\2ZD:&5_H='RN\]=91\GS#@/J4BQ^MB*Q*M9B->QB9\ASJE!5k
M)(729,=*84XHU6_PSU]I1\UUD*@G<YE7CJ3E<*SQ^*@D4_PQ,?D31A8H'O% j
M'D*J@8(2A8:(3"&8KW1,.AE:")10D"+JJ0+_T-P"%8T0B&9!<](68FBH<&LTi
MXSE:+"")@^X(,*PE8C)MF3X5%EN7WRJL)5RE*#C73]$4>@0GO&Y4,H7X!YS0h
MNT0#Y.$K<4*ULE)2U!Y2%1*=I([(E*X:.Q)+KFLH="&A5)7$TID 4BUB6U0/g
MB)&EG52[F%)10%YDJ<X).KW4O)H;Q HW\288PZ @E+<'-^441TVPAT_JS,RZf
M&5QT2%'8K([JIN9$P)HP"VOC:YV2U=8MUE4#5$5)2DJ:D (WQMCN!CL+4E8Ue
M1O9-C?X(_69)QXG'NJ'?U3 Z+LA%7XSGKH*"6W2YDA+IV7J2WXOTKFB4- VSd
MRX$(?62577"^4&T%U9147+M";AB$UN4Y_8;.45H40AY( 152,JU0+CIF64*%c
MO%G"J0QP!=,7+B$/(B1+9G6^A-):<;7HK(TE);2K1XB:UY #]6S=\E^M)Y7*b
M$CWR7_$,&AU7:*!WW+L3D;%T1T_\"V3 N/X_LP!J"U1[X$'OY0KB"&=59R%3a
M0RB&IA4/G+\<*$C+!(W<#UM'9")/":<="VU^*"#(2J+0#M>*"E$%81*>5B95z
ML%$ALD=G(1WPHQ4HC>97/7)*E::D]:^"UI6*TA'TS*Q+J;0NMS0&C%.ZV6"Iy
MB!5)B$<68ZQ5=4IE "I("CDK-L\2)Q2 !,"1.RH"R<D 'JTW*S/)K4@RMU?$x
MHFHG10ED!^)3K9O!9)C@%_(R06I9#H !5@PF+;.ZZE_K(L\4*RQUL/)*76A8w
M62-BW;'>K72^I&,D5E4G4[(H.A;D!JL>BZQ&;DQ:@W# =N).)!=R=B=V8U:+v
MM6CM,72FS*XL#:1])$YXFH>/54#N(WL"C\^(T 8M[M)Z0*B 80@$0GEL3[]2u
M1KU=1_@(.DO*[I8%>FD)FYV  P;+/&2@.H$%_:P)$0TX0 ;,@!OPP,; "S /t
MVVG@,8ND%77+0+&=.G6W*(@>D(D65).=0#A\-SH4!?T !P*O:MJ[!:8H_%TTs
M@(S2Z??YA""Q+8 ?&>%X7<T \U0\*/RT':@&?D8FY"V9YA3TA,PEI$[CP@@Cr
MF>3+1VW3>9EBI435J4(22M,X,*/',C&%WSBQG[ H;$Y*"=7V[OO!IUW*&KK>q
MMA-/A4 6F!N.:O$:7N"[G9[%\(6]_/2O9C/CBWRE#N%=OB.LA(VRYTL:O!DXp
M V73]_C22ZF#>$UO;M"^JRHN-"P.5GS%;_*=FHV7^>:&]-MA^JI?!9S4=_R:o
M1.=K$5YO]VUZ1 Q \<&5 <>,0),Y V%@.L U%Q)W6A@N20GNR[7)I_-KW, /n
MQ:V[CXQBSAPX4'/TU ORI01CG1RP_3(8#A@-^%$@=FX>W :;<,4+PYU@G.3Am
M1MQC-'']'NSKA5X(VXV!TM(@HY$T.Q#+T.X87)[9@A=N/*EEQV$&1S/$\#SVl
M8N+\'\?CU)"G7#%ZO<9'&$?.40B/6!9\7_++$-"[Q<+P'DVE.38@S^FY"'H6k
M2;HOKI-+% @%&L((MPOK%\4+?]_/T<1$MZL*M^&V@ ,ZS&3#AG"8"RM<+SQXj
MDX48QCIX6+DN7JB0$8+"&MZM4'"4JF BW(5?<"T#)TJX!B/.(AM"W,3^<Y',i
MQPK_3D(DB66&OZU-19@0@X#R.X9?81G.%6>8)$S-4)$CR6!/,#MO> N+I%0\h
MAU,#_"TPK3@15]FI"172<,+9PZ#%8DX6Y*.+47$E/L*<)$)DXA_,!IPP)]8Qg
MRO6,1H5AR?U$["G.#;SX"V]C ]&*G>$K=@VTTZI@8.GFC5?P+G[&#9>3! &(f
;"\TT<=(4(H!0!_-@'J',J'$0%L(JEN)FQ=4(e
 d
end
----------------------->8  cut here  8<-----------------------