[PATCH] Re: Corrupted inode list?

Benjamin C R LaHaise (blah@dot.superaje.com)
Fri, 29 Nov 1996 14:57:33 -0500 (EST)


On Thu, 28 Nov 1996, Andrew E. Mileski wrote:

> I've tracked down my REPEATABLE OOPSes to the inode list getting
> corrupted...at least that is my take on it. This happens after a
> lot of activity on an IDE VFAT fs.
>
> In fs/inode.c, sync_inodes() will try to de-reference a NULL pointer :-(
> The real problem is, how is the list getting corrupted in the first place
>
> I've had this problem with all v2.* kernels, including v2.1.13.
>
> I'll post more info on this as I discover it, but I'd sure like
> some help with this, as my fs knowledge is almost non-existant.

Ok, this is still the same bug I've had a patch avail for the past
month... no more inode corruption. The following patch fixes the
following:
a. inode list corrupted if put_inode slept after calling
clear_inode, inode could be allocated by iget
b. some routines which called iput forgot that iput could sleep
c. mounting multiple filesystems on top of the same mount point
should work (underlying filesystems _must_ use __iget in their
lookup routines)
d. adds Documentation/filesystems/vfs.txt

I apologize for the ugliness of it, but there isn't really a better way
to deal with it that I can think of - the alternative is to split iput up
into two parts and make require each underlying filesystem to call
either clear_inode or the new alternative (reuse_inode?). As it stands,
most filesystems do not seem to be aware of the potential races
surrounding iput, and almost everyone forgets that iput can (and will)
sleep.

For what it's worth, I checked 0.99pl8, and this bug is indeed present.
Granted only the msdos, smb, umsdos and vfat filesystems were affected,
but can we safely say that this is the longest outstanding bug in the
kernel? Ouch!

-b (who really hates races)

p.s: The patch is against 2.0.24 and needs a slight massage to fit into
2.1, however I think that stable 2.0 needs it much more (as newbies
will try vfat/umsdos with a stable kernel and get bitten). It compiles
cleanly this time (tested w/all fs as modules).

--snip (also at ftp://dot.superaje.com/pub/linux/vfs-2.diff.gz)
begin 644 vfs-2.diff.gz
M'XL(`'HQGS("`^Q<>7/;1I;_6_P4;:>2D.(ADCJL8Z2-QU82;1S992D[F<VZ
M4"#0%#$"`0X.29R,O_N^HP$T@`8)95VU.U6KQ(*`[G[=_:[^O=<-7`6N?#H5
MOA>D3WMO0R==RB"Q$R\,]N:>+^-UG,AEO#<>#Z^NWU[^VG&]^5P,T]8-3B<C
M^N\Y#::=X7#X[!YV_B)=<1T^"'$DIONGD\GI_I&8G)P<=?K]?FMJ.[>+E*F\
M@L:GX\GI6%'Y[CLQG!P,]D4??A^*[[[KB)VA\()Y*,)`)`LITF7LAK&03XD,
M8N@@%DE(!?R\Z&[4$0]S.QDE3TF)2!I[P1VU^(_O7]]J#:`$)N<%XB_P[_I6
MV(%+?YX<=OH/\Y@(]2NCN9=1(/UO8Z!U(WQ[+2,D<"<#&=E^YZJ=W#/BF=CW
M7/FP%Z2^W[8E2H?$F;?4.3P=GZ*H#MO+29'=+*;Q8`Q2&DQ>[:.8^J_%GR-/
MSL7[!QD]>/)1A'-FLA<EJ>V+[X&^N*$..OWS]C_`\ME:_%D&?[.7P-IW]H^V
M%TO1G?GVXCLW3$9QN@)F_TV.G'#9Z_0[_>LP#*20/M2*)4P'%60FQ6/D)2QY
M+QZ(.!0+&4F0G"W^GGK.O7!E[$3>"IF!8W]<V"#NJV\?I/"E#5)VX1'.(:/C
MA\"ET0A[O"5ENA&1](&9#])?B]A;KGPY$+,T$1[\'XO`<Z0(P@2'L["!+`XK
M"A]AF,DB"M.[1:>_LN]DC+T[H4L57)G(".8M:3Q(1CZMI)/0:&20#\8N*7[_
MQW`EYZ`&:YHMS-1?P42#-3+&3J#.BEK%J;/`IM).!L*.Q:,$G8.K@S/&"NFJ
MT\?R1P'3":/$#A*Q"KT@B4'35C)P[<#Q9$Q,Z/0C>>?!`")+LZENG$2ID]#P
M+'YF)>N5%+OS&*^]9RF#KA:@<C!:36V%'4GA1#`9X([\.R@=B$>$$<P811@G
MJ(\@F<2.$A&F>`LEC_9ZA-I;$!J@MJ#,`K$,W11$/@\C>`J4P'#NR4<HG\/F
M/Q"!E"[IF>VZG;Z7Q-*?9WXIL6=``F2J#Q54VK%]'WELXMJCEX!@`B`5@'QM
MW_L']%IC(;,VC>1(B-?!6LS3"#J,X!HX";E&ML%.7R.-3+(=1\;H[)3BT3CG
MH>^'CSBBK#T//5/R3K]!E(T2Q#8[JA%9J37S0["TW>XN2,FUZ%DO5Y%2E7@V
M$`^AYXK=D$P23!:X#F;E@\?JG1%I\$^@W/`_#A\>1VM63IRV7=8-X-`5^R.-
M%:#^#@H.29&PTX#,@N4'/F(FXD68^BXJ1"2!T^`%0`^0R8_HA*Y_>?<.**L1
MPDB0DLV#`#F@/HBE_>0MTR6.Z</K'RZMFZO_O!Q.0`$2MO1\>L!*#W5B#8W^
M(:,0:;'QDT(#DW!L*YL$-X_")0\8^B<VH.M`7LPCF)*PYSB`@LM(C&?`OL\-
MR17!BH=N(1MQS)KM)2.-OZ`A"3H@:YG&B04NE>Q(Q%:X$DNYG$$_,`W@%;1D
M]M.\'T!K723"8@W123.;"K6E7AQXE@AG84=B-["74LGV&OY4OH8)*@:0T=(`
M,E,!2=\'X6-5NK,UT\<11>`.O$C&%JR/BOX-S0,9YMMWV,-$>#4-R=I!]ZR7
MT![=.*\HQ'])DPR#D:[M=6\'+N(IT=5V[DE0K&*"V#/6J;=-E.=?P4!`R]$O
M%?,?D,H!4BDT5?<90)B45#/?JCPVFB^N;,T")'T#)I0=244SR`'IMEV1/UFY
M\@A>`.M>X1'H5NSR4V#>SF]L+0`GAJ#",@Z^37#U3D`6]CTN]T$L/[&N9]1P
MC&A6P(S96L&^&UX\O3N9:,4H;!GS<AIPWT@*[<3VD>"Z*@+N@+PDF*&''2(]
M,A$ET;3$!O0SV$1U)=W<T(!8F6U<L9"J(JH,BXM+4MS9T=>#V]R;Z,L.X8Y8
MKFQH)6LT<)U#.BZHO).$`.?`65!SPL+Q>HGK7TQ3A;$ZP*69+/2++*V["_SR
MYFL+##JXJ\MR(+)[P"%@\66Q?BKT`9&-;%"(6J.\\U6:M%<BTI2\Q09%P1L?
M`80'K@H@CRP$A`Y2(KI@/\`+-]%!:7E`G1PTM`@0%0)V`],4Z/,\5_&=#;R0
M]-)FQ:.%#4T?U71IKZ$C]-?<+W:$&*9`$;G"IP%(3($X*U?C?'8PGF+./_]R
M<ZN6-G:`7I(Q06N?13MT0QZG6`-QJ2H9,A+?M+)OD?@?:@I22>9Q0ZM<Y;@6
M/O`80Y1IL09%DMRZM8$<5H0++UD&7<Q=;=U(6R`E\O^:4>["HC.W4S^Q5$E,
M/2[!)&TPTC5I,4+AFCGG_B`6N':S]5>)\1)$*VO(\(4=3'48%:_-S&*T73=R
M?4T?0%7Z5ZZSP8C],+Q/5S6JX)8&HHH66!H`"@O'HNC#M&&>!HMG\IJYYS9.
M!N_%"QD705H5$,2A#X]M@9VS0T>OK-8+L*VW7H2D;9%YT75F/1H9LNO?%EF4
M]@FGE=@>NW&LBU8EZN@/.Q5=F.T=N!FX]!#Y9_8+<DO),U%C+W!A`0"0R209
M-/&275I#@'08<=Y#L8P$O+N["Q@L3.0I!;H0%<;I4BJ/A)"QQ!0"ECD7R#EY
MU4GC..88C8&J%KRA!C'[R$A".4C4LM#E=2$$@-+!N*?Y1DK1`,/G,G$6&;.4
M)PY*43!$]DK0"L#J>HOK6%UKMRAQD\<`?VLDU[:]6E=;6)'^H(G:\AZ8V\XB
M&UW@LA6)YA%`@Y8^8:,C1FUO06=;N=';:]W8KI']O-@I0K-TGGL:@TO)B)@Q
M!.@K5J![-'2)D!]C5(14L]#W'$HLC`I\Z&G&1!:WE#+A./?&NKIY=_T3.(<8
MDS:`RV!LI4`)[N<<\4$?,%Z.-77UYU#?:F4%;;TW@UB-<I%&@-D0^@EDC'D'
M&\U^7C)6M&OT2\`F<(=DUX^8%'$I]4+QI<ZI&.`_*H>_SF*V4C$P&5T5Q<BV
M<CN>O`MJ'AB#AA@"80X<1I3HV-FYPFA&/G)TB!DSQ%E#X&T(RZBS@$&Z*6:^
M$LK2O:CH$L;AS:B7HG1@GDGA"?^T;9XO_YPKRGIFS=ZY"D08N9@*`H?+"%Z%
MK$M[]:T[R.N3`N4=4W)(Q;PN\4+/BQ'@1P1*Z6W/L3(B>P4!1I"`ES!;R`H[
M@RY)"$H=P->_S]#C`+$R0!,0U(.,,)W/2$6E:\%21D+C+Y*J,\?H0Q0PA)J!
M8X(H35YGA6MNC",Q2&&3$V\]M'(>;3LXU)>M6,K[9NU`@G@;SN>6YO8*W=S>
M5+G-2EN2;XO&NN<U=&]<5:I$..E'<:</#2R=2`R1EI-LIT%>GRM;G'[=U:AX
MH9/XVXFD$*+=!9SMU>[\,+C3B"V-<J_24K</2PLLS+;4K3XHT(-@&QVJGJ=+
M*.ALU40Y_7@=.,^I;[=I4)6SLY#.O;64KF<7*8![5SY8"2;/2AI!*)2-LURC
MO'$VC_?DDW1&3F5?-']>V?[4G^N[G+7ZU<W,\>ED6MTDRQOIFV'C\>EX__1@
MK.U9[D\&DR/1I^LKWK?<F0\OYM8JC,6Y&)_E#]`2[/*C<`7WQ-_A!:96AA>F
MD&\GK^%@A-KO$P'PN%U%9'C!6O0[/B<NRRB"!>!<E"IT&=G,>V=<#PA0O:PA
MCXGZ&`ZY#F5)T@#1MS5WNW.7Y(B-H:";I5:HI@I&B"(_^HR_Z9>31H#J$B"/
MBPI<W-_F[B<<WUEG:)X?ME,DYRX\^%S3#0Z\#,JA"NK:4114U*/2HJ5^J%:;
M%>3@8#(X%GV\*/6`F<%OY'X^[W@FOOE&:+?#"TJFFAX.+[1<U^\E]AFJY#(:
MLL!?Y)4Y>"'U*@^EB4:/A,HR41*JR03!F6>2B2JHRZ0HV"_+I-*BI4Q4J](.
M]M'I_N3T<*(9[>$K$$:?+R@3[:<"=X7*)G3(1DQI(1'/D+MH=8@A,C^'?P_0
M&I3%0VL59L,#3)V>*25X@:LC#^OH9#"9P+CP.E6^1&L%%<\T&2A'\IEWO)$4
M1,Y<C0790_WIPJTX/Q<L5[5ST4/-Z2L?P"5."$`,2MB\2\]TR]S9VQ4V+44(
M\2+;`2;ML3M!CX!SX3%2MZ)$IW`[/&?=;0POK]]?7M^2GNZH&>C>[K-R"5EK
M]I?BG_\4Q=WP(DL@_<[\/#X>G``[CT\&TP/%SCHW=69^AN[5?8UJE])0G'JB
MM).69Z)1=5G8K1MF0N#3!=UNEKC"UB2G3$AEE4R6N&C4:[-CAM(2Z_J99/2T
MF,X&:$"//L,O_%>X<7*Z@,+W=CM]4'/Q!G,QN/&BQWJX[80''O`\"1@HG[&A
MG#06_YL05XEXI"1.K+)J3,P)8]JN7=@/V&(11I$W\]>5&(MR.[Z?'2F!7F54
MRBPA*3I]$Y?.,?@RH<QF&N/&/!]WF*>T<X5G'B@S"M5D\.!%88!C9U(/=N01
M;)1/*YM.&>4;7-DFB(`9.IP>S'*"V4;IHTI6J1GBQC3OQD'D\^\8W=@"<_=W
M"]P:&`[Q(`M6!?-!AZ%QM8*\!"E0Y9E*R0MR-KB5R6F*)>4N#$Y,K1@=91O3
MPQ-<EJ:O#K-E2;,#%/L0D^805R-1B[QJ5X?Y$)$F"];IRL!F@$X'G:&H_50F
M&6\<9O^/]?N\3LBGZ]21!F]%,U\IUP`FJT!-=;5#4&5:[/AY?:W+GU?@1[E^
MRY6.&QG`A[;038]HH>,+2KD#:D]Z3#$[GJM8@WM>@(*5N8PV1EFX#D$,D^Z=
M%3L799TD%Y5Q,(.#<)MA4A9JUL/@FPRAT("/`48?P(CQJHX!UK!F%6FBUZ8Z
M!<P$C+EZ9+#*_K):A.VJSS(L3AX=Z4%3ZE%UV!WWE'&8N#AG-NK1(R#7_Q$#
M2P$776IL1:;MC\>XSNV/@6=CQ3-M6;U]>_4Q`QO=3`A%ND-%!3^__JMU^>OE
M&UB57@!BZ=49_:69+`RX?QOCJQ9HSS<%`GIIW1HKI16;-+4U6.:)P3+UIG7[
M/)P6]GD\!:0';IBN)V8_C&"+W"%H'1"V"EANVN=FG[:*+%?.TKONR]???W]S
M*DI0_OQK/P4\@OI[_G7:^Z_@Y2`7!.Z[5"*$LVJPHG8]*/3(HH%^%4=IPHUA
M"<S"7B2$B>R/ES\4!)<4R@!6S8*3=$0S]4:>M>`H!921'F5I/<T=T',\_,2`
M7(]D2O.BRMK>=K<X&)#M@V?676:L6>D:(QV]M$'IBE*3TFT/?!J5SA#]**7;
MUZ*?HS%%/W1100;*Y?NK=Y?6Y?7;[FPQO)A9KIW8`\3IPXLP\NZ\P/859,?3
M+N=BD82!WZ81PWX2TRS"6`7J<D#*+JG`HK3[EX<O*#T$R7F@HM54.X6EN@/P
M6EA=A15%]F4'.]4?#R]?OWES>7-F2#<E>ZA*OA<GL3GO5*I@2D!5*]0R448*
M!BGO&U-2I=8&0>OGZ5]-2=!T04%_)0.8D>97\#0]VX[)HP@=B[6JJ0?)O!ME
M+7`##-#90EO0RK2@5,Z],Q6R30?3*<9L="7M+%*$9WGFY(7JL-D%E9,=F%_D
M+-<J@MG<=U\6_9^J62QLVA+BDW[@%5E'-WDXW2O2$H9+YZ151U3]_&NWY'WI
MX?.ZS9WQ]JFQPR_WF+GX[3V^T/SJUOX@;@K"8"B?<"\O2)[!4\I@:%TIF*`_
MA#\46!PSNAUGZ#9CC?B3F&!J`/^\H!Q$.D*=BV>CV`KXY,'6.8SQW'=I%O2<
M)P$MTP"7&SZVA$F4IJE-="Y6QC+WHCC!KHDTK5_D8\$>,,;O-MA+3VRGDWGC
MGN@SL_8/!D?`++@H9G%N!EPH.E0:Y=*.[BUEM_A\W6*\`U!X;&M@Q[:%E>85
MR$?E4C@`J8>^/:.;;@1]6J'9/3="/D/+9[CE9L"GN>3I_@`(]/E"+MD+'#^%
MJ?X)0HH]]1['XJ)6(.\P2T$EFNO>@@5SQ]T&,QK<RB;W:D)WV%4-H0UW*DM'
M#7<UE+/*E.9*VM7PVH!931IAFE9H5I-&D&9H^0PU:89H^LI]=,P0[5C;-%!^
MD-B>15!E0,5IR&UXZO<\8;D%3XVYMJCF=O/84J$H')V!]],]S_9!.@W<+XJ-
M_"\5UR50;VV0P9%9!D5;@Q1.]&V""6\33)IR9)ER3G7WO`5%M:F[>;-A`\1B
MY=G'?'=?7=G7YPO)U"H3E/&70U6B^[(RP2^)K2XJT&IS;SK`4MNB7Q)E;9FJ
MAK7*G7\1P-70,Z.NYX,N]MQ33AD(QD+T.A11_=I/<1JB$DN3IIUP@'$RS2-)
M(L1))CS'*31@I5B!J>"7^#I%]""SHZB,M,I`ZYDP*^<=17@Y;IDR<"$MWR&=
MM^ZB,*4M%'U&8HC:M2<N?[V=6E?7[]]>WE@?+C]:/WQ\_\L'[I;6[^F44-1T
MVHRB]//S6IZB%4#:VVWPI!O0SG0CW)ENQ#O3%H"GV8LV(A[-B7)FJU\DN#I"
MVUD@":4K/`RR(;#DM+X;6G0PY:SL>8MW&K8ZWJU5R<S8%KS8L2/76M')Q-#1
M)5EW#2K8*+3I_)PUZ?6;=];5VU]1HZ`.M.6-D(::;U_?OL:J+8"74FY,D;F)
MMY0[Y^+-+Q\_7E[?6K=7/U^6()JNG'6&*PY?W5@W?[U^D^WUGVW*X.4%9%!Q
M+S?\#/R),OHK+WDF_&>NP3;QE0OA4)"]M81'`;,Q!WBL3-4NLP0"G]^Z4/RI
M9[:G3;!PNA$73C<"PVD+9-AH3PW0\.!TK!\X>G7`29T#+7M7WGJO;JG3]GEV
M_J,"#X6&^80&$!L08K6ZRKG]CL<"W!`WAYTHC&.QS-\7UX\'"-,@<Q`)@^1%
MA5'728ZZ#+C7=6QG(2W;=6N[ZUFJEZ&QV(2-FR;_A>=>F7H;^#RW-T2X6F%=
M1<N%%0TUM*PKZ'1L4%"MI4$_M2V-*>=DB@W'W%L#B58!:XMZ.C[.7A*BSQ(,
MQ"Z_JG_6`*`1/_.Q+!SF@69$/]^\?7]C7>7NQ+/42__%<1T^S(;:4:\\2^-U
MC\;.JND%#[9?/X/UW`T3)%@+J7$"AS2!0VT"&3J\"O@M'UJ8NN.GKU>]T^+K
M$7@_$'=A0G_E`!77I8R%RKMF<^3'-,G0=Y7YXKAP,\H./`>!WLO1:*2`IC['
M4A*,V6<FJW.9W1D7\V2/#NA@%%ZF7VRZ+-[:=/EQ-JY\"^Q+3+E.NC9M585U
MHHX/:XYBL5*_8&@F7U$NK[N+6GG%8YC;&U:U8X/3*#<V^`T]Y3$Y.B*_SU<2
M,@"S'T(!B[^+$0*]Z9V_<$?%>^A<E+MF/U!+>BB_GGOUK%HMXU&X=!0&:$PH
M9K;G3S@\-@!S+PXW[0.6B@UG42O%U1.IIM8&MA^8SJ7J;0U</]8/B!SS`9$\
MT51**7%X^'\JL;3T`N]I;^8E@`--;"^7U_E>*Z\PWMR^)>?+C>NLG^B'4%\=
M#@[P>U=X56F:$F;14DQ$M^5&7<NZV[;J2N\]"-IS^?_-MW^AS;<_L/=6FEMY
M&ZUX=G%>/I*>CECA_M#>FFEK;2M(JNT%*AZ!U9PW#\T#D_R-)G`A)ON?>AO&
M6!H8-,-3J`0B"4.V&27W:SIL8CZ"HF;`1>`^:!/S&W&,09`H3E;PTF0:,K3!
M1%W^O1*B)-V1TK>>>7=OMN#=NZT;=3R?/[)5QQZQ,90I%3<YZ\9PQMCZ6:ZZ
M,:31/?5TPIMVDX9-.VUOKEP"4@E7L;YIQXQL$P6UJOFE-NZX,\/676TQJ25O
M&FMDBD2Y/FWR3KA<>DF>!S5O<@P:%*D1;96*FQ2I$6T96S]+D1K1UD2+C2=3
MSMU,#_Y5M_7H6YL;I*`7&Z10*:Y*P=2ZY=9JJ6U="E,=>)V<D#VKJSIC3$*@
MU(.-YU51F2FU-.Z=U5E5G#,9][*O<-!2U)!EJTNKRNS&C)M)>(;<664%^@J(
MC95O4+FRAI=1NF6@M]L3W]`0:QJR?6I%J+5]+N5H:V?KC-@/GU"P0I?\O`\8
M";U/":)39H/D5?CRX>/5]>U/HMM]20JBF"`.1H>XC/]O6Q>?".%)[>>34N\#
M94D#_44?S+\P<?IBW+EHJ%2H;/':3Y/\D)(:?_;G]CQP0RMM]N5T2<&CDB!.
MQ1L;$Z<+>[62V<&J;>GLVCN'#J89H+[QO<.BT/#N8:FPXHT,+5L>Q=5:&CR1
M=A+W>$(G<?F2I;5L/BZ/"R>NS]=O/O!^I/7N_?N?+M]:OWS($DLHTF9CA%%8
M^,5B\F2TVPJ&S]1[_!;8)O/<U!KMML$IYB2S5PCX;:/C?<H*\Z7RPB7][.V*
M'_$C18_TH13H+"F^.T;CP/>X(ORZF?KL4IU$MK&6?7J/DT/5*L_D%]>FY\2T
M9G(M6:@3S/FH;PT7%+"L-D.-XPV&T(BU2\5-QM"(M8VM6VX>E-IN-HDIYZ..
M\^T#_-XWK:X)!#5A+*WYJEMZ+P9^KWA/6,>:R/PF\(R"U/:@MU055;+%%_=:
M5-Y\:LW4@C]6U_AMW,HG[?+O$\$?@.BS@QG30P::AQK0_%SAD<Z$_^[N6'O;
MN)&?W5^Q#9!"LF5;3SLR+L6E;8+F@"0'IX_<?1$42[GX8LLZRTJ<._2_'V>&
MY`[)&2XENT!3H\U*X@R7NQS.#.?%K[)O@>TVHC3IQ2>J5(!+U$P%7(AG/7O^
M\MFKP&/1&XT@=@(N;G*5S7"P'O*AI,'[25=$=CUD5T-V+12E!DE^WD5V'0SK
M=4`,T_/+\E7`HRO,W29!5<[FFISA(LJD&\6+*`]:2=UNL"X,1OFR,\"91217
MA0S7S_$`'$U[<+%)B"^?O9Y\_^3['Y\^?_E+N,4M?F/>2EOXVJIXDP]C.'WZ
M\LD+HP7\\/R4EV7`9SZ_N/A,Q=/0]+18+]E./K`2+,^Q`+OP(REO<IH46X-!
MKG@WB-5MGEV(U:4<9.M\\)Y^<I>]0VI\7'VSF'_"SS[),W7T`$M$&*HM<CX+
ME?7(VY-`.Q\^MZO!`[Q[;\!/*$C@W=2`SGS<OWUHY[9+]\C+ZZLSG>OPUI3M
M1*T1WY%P"ZT4'%7@/$'LL2U"X7RM6X6H\T4!]VZT>;%%40)_/Y:OE(3%<3>3
MLN$4AI)]3$YB0,6N##&%CQ19O8@1X<;8E7T#-"B&147NH2)L)J'8KPD7!+.G
M@;GEX+?A06175'8&JX>X/:V+/G.EX,XQDI)J=[4KLEZ1U0%Y2;PV5I=O];T:
M:TQ71M@8+0P!L]!%S3"%9<$\I4='J%+1Y0^ZA6E!22Z^P]APQQ+C6\IP4^KM
M__0X7U/L@MWFR3.MLL&@69MME1&*V(6[\P!7F',>NXKFVO[PKIL1<\M2/:H!
MM(J[+=:*7,?E2A=@W%&/ZO4HCZ57[^?RNY#<X^N[$,""RL)0GIOV((:\7[_X
M3MR$]&D3TE>6L?O[@4R'K0?!D$[`=WPQPS,TD`*L6A#__?85^RAM7NKG3Q;.
MY]7'3.9,T"PLG*@Y7C@2=BFKY+CIPADP$_L0;9K#<;S[)+HR_13&,I2!-F7+
M!"4Y?/;HZ+@S&%1[=.%),GA3=XOKJ>5Y]QG^$#W6[QP#D;D;#X2H[CL2(O>4
M+!RBVB8>HA7G";?+;KY];(0:=X!^(,-N_O'ZE\GIJU<_V5A_EGQL1B('1BB#
M['9ZG?[V$1(V%@*R8#Z"2V0Z:UF'BZ?'CAL7)O1BRW^AX/$>A=/O&Q+ZUH^=
MAC[QZPH"%%;M=N,;7R^PE)8K@DW/1BO33(,]4.<!=&$YY8.'*R0(2/B'76PK
M6$*T^Y)VIOFT:[^"05$5EGB;!5CP%_"-^OR4\!R;J("GC!^!<!G[8+K4D%5%
M\77;%"2AX6\3C4$L7-7)6*LF652-3,#=2*YH^MB`^<\'?73<TH74B<8T:7Q7
M)0$7)8#W%6^!]Q+"+6)YEU"$!J!$!^.K5;WUO%69;]57+^%N,M^JIWX0Q$M0
MI9I^]TN-EUC3_Q-US44`Z32D`%&=5*4'P373$R8CP@[JID)BQ\F01PMWCZ#"
MV)Z]LI3H(%IUS8V:V:R\(LC,HG,Z=KWVPE]<Y54GHX+[G9`:@KY*K)=OWLDE
M1M&1>*H>S@Y]"B_?GCMG=_7BR=]>G892ROQHY/]I(KHH>;1+KX^N+K>I.,?.
M/=M:*H2UO[-V=;`4WJ&T5SLVC+Y^B;%13`A^=W2C,I<(0"=LE<4H/6Q(V#JC
M&7%&0[D'_3KU0/@[W*W>O'F#)]!!T`*<B&`H=G%VN6RUS:^K^1Q3&=_9O"^I
MBQ8,Z7)Z<_:^A=$W%(@S<QQ&VXR:._\ZIW.)X&!)@PZWV%?A=1/1;/_;V<19
M!YO14QN1Z\!9#;4^0C5'@R)*:\E=V<K&_U.)#_6J'/%9`)WX:@"%JT8]%#J\
M(VR!JS(KTP!MQ_@OD)YGH1G;2R5X@JO(%3PGTYTU6?E>58-1Y3E)C-+@H#*4
MQ.QB10BU"40YF[+R;P^/*GN,JR,<?AHB2B>$Z_IMV"X01=P>,R01OU#K"9$C
MBNB/3X:,'0V0&PT<,W()T'\G*7;;KFP-BEN67?DSA8*5:+IEH/C*Z_@YR&&U
M!2%NJZM/B_DU?(!##A[.8+-AOOGD!M"..MY50$^.>=GSR]D$<856TY68F5F[
M):S!V;LG0'(O5_/U[&IR?75UTP[+<_R,'9]4KX"`Z-0,/$>W1C@P,P#.\>K?
MTS,XEO.OJZN+]=G5]?+@/V<'9U/G\0//8YB3FHA6N5E1RM<-0;3KABC:=4,8
M[;HTCC9#IKK49(QK?#2`&M)P\>%K\%<3#9V0YO0LH)0D_<4='Y$42?%'4.SL
M2!47,,(,:Y#27TC#[ZG\/`HO9B6JP3$'5*11<+<AC;JC+M3>K7`4"H[*';I8
MXJ!+"VC-U^CG8T"&OLR-7&?0>9]<@2T8`]VN\PW^Q/N&]X6H]))B"OP(V=PJ
M_?'6E/JBUHCV)-Q"A8VCIG0W8B40QH,NAF?8ZY\R@'O[R&W+'O^(`=SC(?I0
MZ1+4J;ZF`CV_!2('*&*+B.T5>(`.-MGE>XR-H[?'Y!4>>Z_PGSUZF\W)O01O
MWYY/S;]Z.F_8GK*CI#UB2#)^8;1>B"PPI2&O>S'J]$=THD)_Y%V+]OFIH'MM
M(L&>"YU@A;#.+ZKG]'*/:>HF0\N"F/2+A@_N^$K,+H+5)42REI`@FQ3=3%\_
M[ADZX3_[@DH\Z35)0_U+-8CPR-\2)8#2NTMR4]V?LPN]>?YD'^JDO_5^BM9#
M4&RQ.'KUZX]/3Y].GIZ>XCH4S23,YRM4L+66H]2!A!ME\-1@:)"AL@FX85J>
MO6)\!7^9D.R2&8(83NN1X_32EGGL9Z\GWSW_B6J=_1-<%/N]=IQRJKTMM)&M
M'M@S"'K@^H!+:$&1G3GV^?`?_GH114]4Q6::T\BUTJF2"<?WB1)TY@)A&OPJ
MA%P[5DI<*L0CU#UGT*RQ+W7'*6)OQ+Q4OTK`NT:4X#JJ_2IV>[Z>(">XGBYF
M5Y>3Q35.0<##2C:<19!N78J6WF*.(YA3:YI)C:9UFV0Y93=0@5CD:_V8F]6I
MI9E2]?&@62,A52,7L3<B(5TGYQ94LF+UO!F+<43GL%E:TZ%C?-QIXYE4HW8*
MBHT$G=%0.<L/])-$K:-1!Q-D'8R'](U.FU@=O(_F28&*IDN'XK/6T)>PGTHR
M8I4N`K-3_V0P.ADR-O!H0$E:8<X!D#:ZZ+&7;+R9B(%GR#:A&"Y18^12%FRQ
MIC!O`?Z-#)=U;[G`.^GNN>@["\\;#-XNC3KKC[<4)]UP.IM1?&\K08E/KP)N
M&/_F#P(CFP8_QHDVB_;T<OIP\WD)7"M#X52-L8G"/526PCF43N%)7P*%#_,4
M[KL0*)QQJ>$1%JRE"PFZ0Z-`VY@V=-L(4TR5ZOOU#%?B%-OCA^$M[\9F](:Z
MSY$-O1G:#3-4V!$/U6J&O:K4:,]DA'2(KPUXH7V/CDUO%`^0VQOZ<^3BQS`\
MV4S4ZH85>XAJN^+0Z>P#:4PUQZGR+(?`&;L1X--)4=W/TISD@),GAV*U&PP\
MK3B;(C6LVZ)E6[1JBQ;M':62ZR&_9(_1%W)\))+7A-*=8L*ZNIA-D'L&9]K!
MKS5'A&_`%9-"DA4L\Q0;?JVQX9OGJ7!R_>3M?!+R^.W.NDA)M''GG]!I`8;*
M/U+VH:FQ"<7CX]$97(J50:![?G*7ZNE$IZ9E$&1')#-B2A/GB_.;"1$6)J5(
M=RQ581`XJ[TD4U6F:S2!)H/8.`I?F)R:&S6R+H*%A(;&,^,S_*B1%S7R(0LP
M4'G0W?A/PGN.3X;]H%[/D`AMZ"EM!Z<$-AV.A-H2F[8'W0=Z;`(H)-_Z_AG5
M23?8=W#L)'"!XNPPLD`5[PHIJZU+_'!XI=!$F0J@2K^8<]4=@U$)+LF6I$(B
MQ;Y6K?J(L(B:L5JXJ'9PGL(Q-LR7YLOZ=SZN-AIG^;WT3B[NI1=VEJCZJB^G
MJP]Y?F$+B35QC1HLRSL",%V+27O;G(_4?0B:#$^L[=)I&=U^*K>HCR]'FRDN
M"!@)R;+BI.&R*L61=1I7=&XKK:9^S(WT&C;B#36;7I^*W_=[.HW@:>]5OL]=
M/!+<L!,[WVC*%T=9K`T1>+D^E"]@*,YQJ4YDRWK>42NRO13J10SZKIH117,T
M<SH/EN=T'"S#Z9+>MN!TOH\\I^MWNW0PHXO;/[2K-+2QN&+_@I#.RVA`RLKI
MM*P))Y_F`P9"XBR!KZ0;9-T``HZZ%B.K)^9@LV#)70PQ6JY2?AW<U-\B,ZX.
MC687#_*EC&0XJ/TF3]&4EM)$T!XJ2\\<2B?GI"^!FD=Y:O9=Y(EY0!:N@63A
MPBZ^'*E=FC<6K9>B+-QPR12BR"(;D;>4V/X1-Q+8]7`;Y'602LP%]V!,5#(>
MB5L5))-F05L_P6:[D/1NY7(ZF_<F36NIE$;@NPIIZJ101M?`=Q71:R_JEEF6
MQN"R3"V$T]F:T)_`V([RC(UU$L69#T=!)5RLQ+;GZ['M6`,0')T";]9(;7A7
M1FCW1X?=WN%X5'7[!_W1P>`1BG$FU7O]P^X1`HP/AN:_+N:GB('IE29QI=!T
M#;B*N\Z4DZ;ESA$LP6DU]N!-"&7V<O1R>SYMEG\.*$LI#$@GD[BGS1UFK@=!
M]ATSCS#N6!_5QSN2#WVG0"HQZ&+Y5!!_$S&OLMBXD(F5XLC"B;"WE$[U`U*<
MERIF*.QF>3W_".[AZYBULD?(=Y18SK$PQWBL6,YMO[+MG!J+]XL$7BZ'\D%"
MXAR62B(;%'9'461[*91%#'IS8?3!]#*_./RP^GR9GNH4-D;,)&GDUG,9LR0^
M/\0,F,;8:,N^TA(YV<%H._392SY#G[KZUWSQ?A;5C[,*^:?I4FPX@Z@%:-F+
M6U`^8;9_LEJ1.TW7MQ.J-`%^U=4<'/0?WLZ(BL$FZ?S8O2'&+_:&_0X=4[KS
MIF7("_A:NX/?*+[(?H$H(O-QSWR$T,WYY?+F\P2+/]&/D\F[&H+LPA:3?[[@
07\Q^;N$A_P\(J6?\.;0``/-Q
`
end