Date: Sat, 23 Jul 1994 17:00:01 -0700 To: macgifts@mac.archive.umich.edu From: jbrowne@ncsa.uiuc.edu (Zep fanatic) Subject: Traceroute Ethernet LAP 1.0 Traceroute Ethernet LAP 1.0 By: Jim Browne (jbrowne@uiuc.edu) 7/23/94 I wrote this LAP while on my quest to port the Traceroute program to the Macintosh. I 'grew up' on UNIX machines back in the mid-80's, and when I moved over to doing TCP/IP programming on the Mac, I really missed Traceroute... so here's the first part of it. What does it do?: What does this LAP do? Well, it is (I hope) an exact duplicate of Apple's default Ethernet LAP with a few notable exceptions. First, this LAP implementes loopback properly. (Although it still doesn't do 127.0.0.1, but that can be added if enough people complain.) Second, this LAP installs a Gestalt selector that allows application programs to perform Raw IP writes and filter all incoming IP packets. (The traceroute application will soon follow. Perhaps in a week.) (This file must be converted with BinHex 4.0) :%e45)%9ZCA3J6%&3)$%Z-#jMF(3!8%&$9%033e3"!!!!*U3!!!!!qYN"!F`E!!! Pf)!e9QH(Ki!'H)GJ#)#C!(L!3!F)L'#!L("hD!#!"`#!#)KJKTP`!)H)J&GJF)! !L!#(GR8)KJ#!C3"QD)#)!!!!"h!!!)!!!!#!!!!!N!!!!!#3!!!!!!H!J!!!J!! !!!!!!!#!!!!!!!!!!)J!!!#!!)#)J!!!!!!)J(!!!!#)QA!'#!!"-c8!!&93""* 6"&#)Q!Nqd#!*&[KjA3l(AM2i1(3q$#,0GK(,a+)jYkL9h$6NPh1ehjDZRU5STme 1hMTPhDXP11H*i[AI"HSk9rbc4PhYq['p[fIEYIMma(-qK8HXLY,p0*DAq-)jr@B 3ApQ)mF4Qrl%9ic[2U$h0mAKq0cEa8p5j9KTar+9kRdj*AGh"NUa5p&1,(JU`bYk GZahVq5VFTa5kZVdjDZYV@l'jkT8B,rPPXi+I*6jV(!K@9"Tk)Y4cTqh2Sar$H93 *'`PP%FEBU`lGqSZGD[%9JcVaVJk[2mjl@AlCI[2qjrkVIhQ@Uh%DYim[%lUmM0- JbESmP"JJX6ar-hX"1Cf3!#jb%p"f[ilPJUffrp'1,rrVRqm&D)-LjFf6#4b*UfA +NKaIplJ!!%)!!+X!"`!&!!!!!!!!!!!!5C!!#`Gh!'PSGiUU#BQ)!!URL*H+PTU CL'"hHlLUUJS*"(9NCQ@B994T4&9ePjS+!!Z`%J!#)c499@GiHBL3!!Q3!*!!!+! !#Ldc4&999@9QCQCeCRChChGhKhKhL(LCQ)L)QJQ!U*!!LTS!UU#TLCUJN!!!!*! !J!Q(K50XU6cbP$YbibTM,+(iGQf(AVkV)HhcpF2[Z`KlD6daP$Sr2a3%rccZcYe bhCp0N!$kr4kIhqMl2i@3!,)E)D8Q#4PaZUK%dihAbK2''(R$p-j9bKP1(+G!#1- RKkj8R`T(!KmKVmBfhBj6VaeNUmr#NY)CmZFNVrciE2l3`MEaZaP@(M'hj`Za3Di AE[UpA9cee3MMZ"lPL"jK2bPZJ!,3PcG1l(KC$`pfhdE0V4e`!8*DBHG3'e*4[[m `8Ue!qF5MAVe`V1!C0,RUJahh8VPC$P%+T2I#l)*PC$jFBj!!0S5'iJMqAVH`Ufb !"Z%2P+qr845!VdE)FCmTG)81%[eMD"MRb[ZYL'5![pR,PH6eZP[MRH$`p1bdZbi `M$H'@icbMiK[F[eYPbbZRMAA#([+@DR$pGJ#GK,())RI1I)Y0#Pd#!d[m`-HMX[ bicciF5MeFVVld8$(R+N3kr6pH[Uep@[Ve3mFbp)+rD%imC3MZh"R&fq%X52`9C6 "XKE-(10f1[TK$[PE2(Fm3r'Z3E[8+(r33VMH$T+q9Z8`l`Pd"fHJ$iB+@*!!9C% Z,a!e34CP6I1Q%1k1N!!2IdTF9D-$Gpeq3J%##$-%&,mM!%,M,+U1cm!mem1k1hI X-`k2[r(fbkG3K6PR6%TRb%@bC'5#hc+@Nd9bTRD"-+IJlF8E"M)6N!#5l0Z[MdS C-[2P)"eJXKrZcQVa&-h0c#MLS@MfFhrhrrl[4k)IqU$dM86G[&$,BXMj4Z[ppmH &@KHNFJej!dB)@F`1rb,'0Y*flFUFa#1cDJ6pR0c!D-CkJ5JCDK-Lp#NUe3Il0[[ 4Tc4#G#IXG)+K*pN*L@jeNd0&5ci6aqVpK9-BE-GHd2!S3DX)VfKi-YeR-LFNKdk b2rqJ2pX8VV!SHcbm&[TIq,@Q,K,C8&[IAl,1DqH2"`*HRr2AeIk!@riV`f3EldG el,,'1b404!Lh1P"9&"S,Kh4#iPJ,-cGS"4E'XKKICBim+&peFULBSH$[P%`r$aa %4YjE8pJ5KA8D*FY*Y'mC['4XXhS6b1rRpdI+AFdka+@'JQMlJ4pN0e`B`89%jpL @(lJK9,KC%$kdSpMLMJ8jdY0MHiimY6M'B'(%&d`,9jjT-#D#iVS`Q%26$)'Qm6F TdKIR+#QQHXKUdc9U#!G`B&'h'j!!kUK,YS8B8GY%D,M&j0+)RJY`3VTT$cRQ4m* a$5FqMb!j4Ae2UKF&CZ3X-KL)UD,UhNFl%!@b`JhqM!HrFUEN62m8DGD1D5M"(EP kqqk9qiQ!hM!+FQj![k6894Q#@SPJLS-CUJCV)jG$+bclTk!(!iXVhCHRkl,2!-4 )CL``+'JlGKf'RE5G2Q0P`R8Q8+#TERSRFDh2S4DldDi@QfGRmBH8Emfj"&D`&%@ 4-TJb3++JFdh9lFFUHDp(!RS35MNh%5'"f%K&0-X[E+&6KBARJ1%LAbai$@bKJqM T3aBRFrU4KCP'-P")*lIcC&FVT*!!QEc&UQGdq@ZkIZF%$5HLXM'(jjMTTH2V4LQ cEC[caY)[e"G$5HPX)&""JeQq3Vk1fYV3IcR48ie4FcCVQb6Ik)'5MAcef'cefRe Sc$S3#"VP%Qp#P"3MZZS03CAi!ek8rZP8Ee&8XX"H*kq24%(q-a&9DB4,'D8-Eii !kA4S[!a'r#-0m[+3!%+9SJiUBRP31S8GC(Q%KYR`aZrCA!QZTqcND1Uc`&6"CE+ m(`%FCR1'Ge6'(lCRJZ((V"rjicd'LcJGT8lb&2SXqhi`q(am)-LHD9)iqEGcV-A fUV'-EIa$dkX0#Fl-C@fL'FDA($DDjp%BUPQF[ej"Z$+UJGf9c[cJ1+Y2F1cP+L@ #CYjB3j&AGkI'Bl2JUCG80Gc&C0k0MN8JdKplKAr%aN3`[JEUlMbJHX1Ba!SqVC& I')cQm[31P35X%580K*!!2"YM3ml629N&L(3eFpfKc8M03U2l0Zk14BiD)8Y16SC 536p02A`'I,3,1&hN+!N[G!q80J[rh!40"Z%pefm3IF5T$Q&f4k9`q+8)"j44h9# hM((JI&*dcXEXm@Jk"$I@rMCN%Nm4$j[TMBfGh6#UkXS9EpalG,`e+BXj!Qf&FH& KQ`hrPib%#TINEea@1UD($Yk-)DI&XP,RR1Ie4QeRZI"NJX44Jmp1bGLr0lZ8hYL bN!$T6T6I*&KPf9['(EqYfAK2[iMBBf9hSjf)Fp5i3KKKimLTV[0@Uq5ERP@2PTC f#I&r,M&(+ZHGSCEZQ0Q!4AR`4cbq,SiBmZAQjQlElBd6m`I,aJkZ`lNJTB!Ta0' "+KqJm(ceQ!2LUHiI-TX0Q2#ii*aSR$E)&hm&mcPj864bEfG3P!QXCQ`TG`ij",Y '4((Pm1dU*eTTHS&@f3'D48&9ekr*VACm!3"1`,UKV6LXmBNH)S$$IQF-M40I)8% Zr3Ua2%q2LGVM[AU@dVcU4C'Y[6ecAR$l1VrYhhq-80!kXP$Yc*I')0B"V3`*XFZ 4EL6U(SqbVd+iIRA5k@84LNK-2p1#IRQMRLYabCVa,h+5`(RcC%5Gmm*jRd3f#mm %X@ECL2ephc4+N3G!+1`kV1F34G+3!))d[)`TAGPN1iMaZb2`2+!)l--+G5Ckq(e Xa&pM"RM)(Hdjkl3V!`Cq-&"RpcII3B51GY`F0'Jra`Z*8UQ`ecZ"*[X'QAF1J!r 69Nf8kk8NJ!+@8hRkQ'a,JZa&LHQUh!Y1$GmFMcP4h5AI3dM5JS2#a-lfUchj!+P `dFUc,%8iI"+aqcBU,$V$9DBCKjBYj(mN&Yf%V#"rdc0%k)TPGJ@[0iG"1"9,E50 H+iRJDVkU'V1f)G+Z-`HMHH&*a((eDX$RLbdB9#kFkQkmKbbZ"m4hTqiG20+ICJT ##3-iq3BhQ9&KjCQMiK@U-)drkXra(PB&[kqS5N&Aea[$$+[G2'fmGG-m66&cKbI '+j*H(Fprlc62(&Rh&(rdl3XY'kZ)HS&MdHVU4M*m$-"XHiPZ*Y**AX*A$J'fKT- &Q[C*f,%iCMM42R5SiIm-adSLkYY3LmAaci3hdN@&l8Q8)9Tq,MaS!G9UBmf%ah4 b4`#5S3HZSIZ+VXq(!C2XqfBSHPD2+8ES&YAXmC!!ej)Yc6BNKBh2G55,edk1(2A Nm#69fLXE!J["0A'pJL$"6K$-Y-&&YC!!r#4G!cpf6)G$3eXfL+rK5)$)HV8[3d6 !XCcf%QZJq1I%*KPT))Pm"BA[hL9`%`+Ud8[!Uq9c208)qdGQaQm4&+DZYC[`532 Iq!XX"9flGSp&H5Y0j-r0caNHSI(&00"pp`TX63qHQjU[3fITAU(EL8r)"RP1TP- ,k)RRdCpSJJMJlS)GpKcA"BRji4'#A`M)8MYar1DmBNrX8KRjGfc`lBHrZlHf(Im IIiI,XlZe'2PeRXkE,(2d&BqIS'cSq0Sh$Sj))pp2q*F[T0*'cZp`(1h[pDG6BjM kSIe[&Ll[Xm*m0E-3SbC`"l2Lf$(,-L(k,!!!!)"&D(KhD(KSH(PiLSQ+LSPi@(T jH(ThL(GjQCQDLT!!L)TRH*L)D(U*D@PiLjZ-N!#3!*KSL(GhGiKjGfZ*LCQ,N!" `R(QEQTPmQkQAV)UJUjbJ`+L,UVLTQBQVQTZX!*b3!(#!J(ZVN!#XN!#XM*U+N!# E$+#3!+LCM+UJQSb*LAQ,N!#DLAKjH(8J!!%N4@CRKjHJLB#kN!#lX!!!!!!!!!! !!!!!!!!!!!!*3#-e9PCQCQGhGhGfCSGhGjL)GhL*LCJ)U*UCQDQSU*Q!#DS!UTS *!+S+S*N!#D#U#J!!!*!!!+H3!+#S#3!!!!!,#i3L!6k[Q3KA!*&ZIDl$`)4Ckkh AG4I[l$aS3!Ukd9$X-CJ9ZG"cH`krGF,Hlqmi@(iI$[)pT`lqmi@&HF12F@p#9#9 $`EZmm4S0FpeFAQVK&mN2pBH4j0A0d2*VU(8!URVrHh-)9ZP%GZGahHLpkYVN&6p T8FbYYN&E6[!Hf5#ZpfHLpDYh$!VFaHE@pmJUJ#&EIS+lVEk,q9EiL#YYY0"9e[P -5'k"lLX&%&FGJTY!+p@%+EFlVZk%0&M9[+K6Ck%1[P8DU%-#PJdZR06@Ymb6+Rr f6rl+-)5VA3al#%*H4rM@f%k23hd)G5Ga*H4Dk'INI5f9[Q49fXR3mqhc-piJ%F@ hc0$lJ%IJZ28Kq%&1)"RiJ)qq"(ilI-TqS"(jEI-d&5"(*YmcVZN"(UKSMcPJ4T` )b!JhB%H[EjN[0!Mp!M2dJ*qUP9DbE$hYCL3KRqM$q$J4m,!Mpm1M5LeNf+95T`' TlIiSUc@6SURkq***&Tk8J+DLINDAKL!c,LcLKpI%K&,iP[QCrZ0C1PiPakN[&Z1 $,mS&Xp,mDirVYGJT@6['KT5%9hDIhcmLXmUKMak'`hNr`jrH`JSG9Q*B6EIiTI% VX+%ZZaVM#K9Jpi%HmSBmrQrFfK3$[0YHH&`plJm-T+Rpl*Jl%C8QF*66klH58J) e!%F-#05"(%SeXA*ci95e6id+T`%Y0T2fQkMMMK'+Dip*6F3Vjf&*L6mM5Hc3apG K5F56clMdE8Npam)K"da'B,4$dZ-#(2MY*-(eZ-5bmX1YH(A($Vc5"JN1`[iF'6p Zaa)8dRY!0&*q[X#)%R0YmU6Md[TFI#f-f6144FqP#r[Y29fNRlCf+K$Xj[rMS!P 6l(%c[GNcVR#NcVf`l$#NrE*q)"[FNieaI*aA'X'"k'ahM8*f@&*pq$#bqeXBpU[ P3Td%GGL3!,D&1p'9`qc+pf!r,!)[h%fhYYIQa[iCdR6(YQbI+!e2*Q@r3LV0G1N kM%CqjL-PT'-3@Q#6V5I+m(0*dRBjAJjmk3dZ%Rc&591r5'dRkAC9@fYT*`d[VBA eV,RH09mfIN9G9hIb3Q+0MiMUG)kVpKm4h$HdG5HdGj-r)dH5pSkUYE5%ZIND$ZG hMS8YV561Rq"2m2rSbQ$!`X!TG95&+$`@`k9jK0&NR0AK3Q3kM5$cQ%'piI$hZr[ k%ji5+PKp%9hH2#+6f*hmiVBIhkL&96B6GYm8RbMQaDqEDFQ'C2b1ZX,5'ZZC2j% 0UU6SDll8R4QEQ56Gipl,T5HYkN*9p68S8C9+,X*XRm*R"+hTPlZVRN`kPp2ZZ6+ mQji%[bVlYbXEh*2Bf1&*cC19VZ",mZ6PJ0jXRk4EHa(`*H,2qlF`hH2IGqQ0(`) G5IphGip'HpKdd6P1*bV%YiMAGS1N$&M-i1,f`-6'LQKe!+D8*1&FHMFHLj!!@JT XV@S!V[YaP6-@6mbL8h%&`VcHhHmT&Vcj%V4`X*[eq$$5`Q0LK98R88+[62l&"rB S2qa3Pr[IF8+QTIF8+VTZSSD1jH43ahF80IEGQb+DSq88V!T#Rj'L`LeVF9r"KZ, IiSF)ZdhaDC93SPff&FF''$V1#9%EZhc)A)16)q$#rY,'&A(@C2*K69e4qN"[dBY p6@PP#1ed0V8@YR$F6mL(kf-$jRM!mAKB($[,VHq,Yk$**CCJFc6)0QfYM$[apIK hH2VTXQ@K,9hm0f3'Y*-d'-MGii&CB&F6Gik4hrCm4fc`r"TB0j`m$$CCde-6mLC q'1D*SR@UTVfQYdl69&fQUeUDiVa0EpU9['dII01rRUVDdY)6&(#[1+l@f80pFqA I5jR!8D,ZAEE$mY24K&i(E-M`!d8+[XH!4fh4i#X(X9(EDpNCC)6"AA*M1c1Apkq TqAkN*GlfkeA@-Z2ZDlDehhHd[i8d+DG`)83SlRPrH++S3paK4U#CSdp5m@aK3ak *2)`1i5$VRbVkYI5!YDP$N!$S#Sb`XK$&X,1+E4emHcee!QdfFGr$IF[dS8elA@4 !L2D@h+KRSpTFAm*8HdeHfK6A(&fIa4E+1jp2$Sbl!MCFrhA[XJ*fVrKG1i-@RYD J[QLBd[+H(a8C9h'&*Pff&*Q@UTSlicLCG(YhBKFh(!K9PC@9(0Y258V*Rhb9Ac% HL8eTjS)FUdp8T%b*Q*5J8SCCS'*8HDmP3b8#V-dGYC%S1*!!MfQYXBEkPHmhlGI 0ZEUqPIZZU@#p"R#H"PKY#Yc6+d6kjH*$6PHR9KU2(Sqrp[@ED&EFAeVSG9X)4$Q mHfe@iq#CdhQ4TLk9hlE`-ei0Er$`Z(`X2"GYD#`46#M+AfjVdq[L'l+R0fASIJa 4E'VU%bhk+h@3!+S#*`%9K#Mi*M,d'fE'dEKi(KF2!hrK-U+11`fPF`jHTCbAHe4 U@mZ"MBJjXSpXceAVeXSq&QT6SE(%aHfNk1cc0"r,AEH6T-e+HfY5NcMh1m[B3jC B9l6ke)D$p"1Bc)F8MFbjQK*q'ip@60TE"5L&CRQkRSIJSBpak2Tq((UZD5U@#LM X'L(VHV*PhPYG"SEL2QrD$e,2!TQiGHp(flIiI-fkIG[Z8ei2(4SF[G,$Fp14@'8 &XDjLMGrH6GhZ"IEbkYlTQ5"6I9#`k5ipYBAmAF&-hZGa#ji-+[#ZYECPC'f,-25 LdrDAm@TK6,#mVA$1*IpYK')5RMfhBhm9C#Afer&TS6,MN`UR"+XB*DB%Y1Xedr) k`aVED*S92M&8R2Nk5D'0ZEc#ZfXeeEG9V(mbbiUUG@BCrGA(q(Tq(iqIprM+Da4 -jI'[+Hj1QDqq9!hpH6h*3NFA$Z[LP`X2I1Uq'FJ9M&#eUd`*23HFK(#[,iSh[1% bMEQZqN#V+0ZD"&B"(ZdG+r2(`f690pcGilcRkd'PI1IV,GFfMcHp8plZXGZrTk& ,KNY[GI8YUIpE*EC`-Fel'2d0''lMQ`Xhq$Kq%ma5CjQR!De56$E)S!mHGa)Y1"N jCbPjTSFVr'YVjfXZBZi#ELfY5$(I0Z8YqM$LPa'q0-a2iA''$c%U[hqCf1e*mX5 'TKHal8c041A85SpUG,e1U'J)TSCq2Dk[JUK$XZ#bK$J3`5J+B[+9+Zc@efHXR5V d$UQ9`!'cmV"eRfT@&Er&+SmIY#K6*NCMqaVIK8R2$bT,I#keKDkr1A$,VM29fM% %2D`)PI#$QAVVq)`B8H%"Rc&hh6#cI5G!,1KZHmZHm`Gd$(3ZLibBVqT@$AS39d5 4dl!+E,%ZL90QJRj%VS+j+M'KcCrrbk35RTi5"Zba2be%'8L9&bDlX+6TbI0FQ&+ paNa$kRT`l1P45Hk4pD90ID9"9e3Q8+UV`jD$$aN8e+U-8h5DC5U2qQ9*dYplCIC m,%ai$GNQ1SLH*`Z([,rHi9hJYUJ8lM0N"KXVlq&D2$8cZ"&@V!p6eYc09M@&#+Q 0Pd89DC5XbC`*C+X#ZQ%@Cfm,@bLeURZPF@`Qak'KMhdc@F#+`,C1"&C'c`([@iY l@#!P49pl8r5*E430E(T!efi03Kq+23hZT5'qcC4@3%@!%4X5APf#B&@aH9pl@al Ber9mkrK6SZ(9+40&jl*QZpF88qbXMCKh-HdXDZ2D,CG'5'2%&6AYTFEPZQ+2DaR 'Yf5jQQC2Pb1E2SNP0TkH&Djp*6Uf0$(XUDjqhHqaEE0PN!"UGhMR%jPXcA+BChd `Xl9UPB$(Z2ba$Fpb2hCXYBXBDQpXA*KSb(RCqYbBY,HkB%UBHe9Fm@pUDrNaG[5 Ll'E$@ejkNM8`X`Mhe'0YD@%TEdQl5*AFh*Y)[TCZ-dmFZMfr,qpHS-V!-XM0*Zq iJdSKmYI0MU89A&eVDQKjG'8GJE-rQIf8G1mcrHEYk'miH([&M%HXe5T@irDS+M, dZ2UQqF![FAS!88R-Glm[qT[GHlrX+'PHEm+lDpSc'Jm[qVYYf1!brl!@+i$ZmK9 GM39rJBDEX6S#GArI2j,UrkQa(N!2-9rc[59Dk&4Zfha46U0C(CP"AUR@064k'M@ EEiM3`j!!Drdrpllq&+#qmJ[%[PkE5#9iFU(pVpC`%L"A8f`KArDf@NRIqU1SZ95 e69rfU1TYYcbmE"TfM$iR2HZ,SJj-K+(p9%'X+&C#B"QPK6@fe8!-pbSkPjPXml# [2&IE#L1Hl2HEXS1i)DPh"#U+H+TP"R32&T9[LqrGEECLNhHibTH+G@L89hHB,p` NUhA93HM6c,fQT48D%G4LN!#+ka@"eaFk6JbpEX*#KLMTCHNK6hU$J2Sdk#*)"Gj EKCTVPU#USp*Nq@iMT5jSTH5aKElKBHpZpr[I#iG[GhEQ8UeQ8[T-`&$'2Dp9f2% d1RRrQK+X@5BCT@YfG`VP6!BDB,*B@6(l,1jCh(KBF8P9(qH&02m12Z%$(k6!-f' PYX%JV'ih(5U)3Ukl@`PVSf1jfVXF%mQ3!*+qT[%NZ2)%*E4rFYXp1bE&Db'&heV H%[FI"X*P(6cmMrM6f2M3UK,C(6TJ+G+C@2F5k-39dHj4QMVU6[jbCZaYj-bCKCr SbCQrUYam(fC,Mqj+UimKBFT1r1FcU&jA8*`22@QK%50ZhLX$6NLT#9VSV)C9RZ$ T)c)@PPM!0K@Fic*(NfXjTZQreXa`4k'bC&)hUF2qUPGGbHr*h5J6h-hX,c5B@RM U&-3GN8cMfR'",i28K-Ckp*(Hm43*SEhIm&hMDFSdGSE"e,m3eYC`UHjQdG39B-P BdHeY4rh#!lD*GY6ZU&XCj'Z%HLE+50N+%2HAEpYZI&hY*kbV4P&9'9FDI[2D)X" &p[IH-I%jdh1INXh5(U`Q6B4AYJFhP2kNP'Ye2GEhIlVCd0GVY[hHcMm@eM`--@I Ki2$Mf1aMl+&GB`QAe6DbkkhZCXrrUVq-p80cXGfjfhVHY5K0bGVQf%(()8LE9N! [,fQ&[GpJSL2+&Vim-LiFNArh0"'Ulr'YCGaj(Z81raVDV[FZ2HGR31,59Ymb'PQ rcBM-MirDf[`EMi05*DjfGp@ffJ[Y4T[Hh1ch1hYY"Hc1raZcS!NY&%UjfGlm0YR R&icpp24-K##Z2rRq6DrkI"I9DLdSIINrcf-de[(lD5CTkF(2K4AEbXe9YUVQ+qT [4fY'9q6DfQ02rEAEbVe8Hm[DEMNqRq80PL[3P6!P62S5r'%Rj@%KA08@AeRqrf2 D4qRfAf2XGV(Fi(Jah(#`r&`L,%T@-6**2MK8J98b9@9SqI8mF#jHMUXS'rck0"R b5qGcZCc-RrATVqNTQGjf9PCA*j+'ULUU[1prhrMprSScU0(9HGcS3d548[4k,cZ E#'9mL$+Q'L!chf"R*K$RFk'9P--0(kU8QFKQSribHCc2rR1jfFP*8D1Tj2ULPq6 *DCr*PI*PI'"HJUB$X4&SUVj)3dB''DFDM`13!1jp"m0(di53!%20$kVR`bS*Ejq UrBk$qH`2pY`2bRJI,aBB`#2S2KM2JHJr0rBaQj[-F"f!lMLr0QS(d(-jh1k2-cI er(c[hU"Y2c1Cc2fD-"@"T$$j"cI(cZGl@LEmVUC3aqH3!)VC[9",V!ITC**h)j( )-R3))4V!3qK,h0cHY*&R,j!!fE*Arac-cUpA,brRqIU4G62S9U[RNj(mH0p(dCS MHX!M#V4jXi&H0b10b13!h)BN+X5!+FD"lkjh'R)6kk5GaJ6"+FPiTKZZkdkG$MF C#8i1N!#GAeZX"m1-*f#*me+(1LNk`fK`dmR)c86e@GRaUI2mqAPpAUMNNDHCd5D UE[dI4p()Nbf+2V32j+5a!6UJPT!!%6Zd)@JEUFeL2ci(dm&'0NfRd2BSLLBdSU& V,JJ9P%QKD99()j!!#b"3%3YC[JXa!fDJ@i+ZNUd8rMr%&!&!0pLV4B5MpLe6*Cf E'6p3#@,9f%r8FI2e1YCjc"(5-MAQI4eV-%E2VI3fGY*[qRp1Te1TCUc@'FJF$[k Id3b'+-Xl1&TRCc$,UjG+GK+QH+QC5jPcBCla+--r*cBD)lDUS#00rbjm00#E#Xc f6#VLbB@`%Eb6*KLjl&!L%1d%I9jDYKmITJ*P`TDIQ)%K3drY!*PJ*qi"%)Fb(S" 3GjU"))dp)rfH`!Jm2QHmqQK&QM!cU-+JXIdC2KUJ)e8R2!6*3)`)qb!Rr-"**-8 #-@(D$%kl,#fN9r8T-k&,V!*X8#!JJ4JBd8bd#1,a`)N$Z6i!%aj$rR)DGr2T%$P 3[SiShDPI29B6YVGE6DUPc&fqcRr9@HJldSCl[9h`)XIII!FU(VfY4imKlAXN"18 IVPNDkiNbE@CBcMS8NRB-V[6caI03AX3A!EfJ1q%r,LdNkV1!#pL%8RbXi!CC`!p TF!$mmUHk%94bRSfpDKMRq6Il2rR'bKFlBp+(hcKPeCf,E66EjbJ%bEMdIXl$TcI 6b$m12C1eVfEl`$Fpl2(qXJD1K5K9eCkm[A3GXqP+lfkQcXQ1Kal4K*C,XpNb-1[ T@20`T1A+Q`dB@H`0leaXH[pQ$B43ejk+URkH&*rjPGl42QYkIjpPUMhIC0GD5FU [Y*-P%dHmMU,(H@QUAJQmV`GlJ(mCZqYcC22M"9@eCGAAAmU%F)1"9LIDrYSAIJh 1YU*hk[1cBAFlDae%l*mJ#MmFlEXd6BYA#1RB+9,m&*dep#e(C#3UI"eVL'ISbF& (`bQ8VEQe$S1YU`DheS3dh*K%IFXhU3hYhGlR"`q(Ym+I[I"Fq`KrlI&j(NV4Bc4 KhF8-9DIGeG2G81[Il9c([[lAVM3MXH!GC)%cI$`2$hpTHAIKMBJrU6IY*Q3f(eI -K#Z!5,F`rhpDldDR!e-2PKS&rlX$,Tc!0i'"[m(Y3)i!%Dm#2%CJ0K$bGb-m#22 CJQA`6RpcZ!)r+c#2#(k2%[1&i3UH@X'Y@V3,Srql6Y`MUpAVqeH"RdpHjKIdm)G KX(!c9`K@V$(Rm9%GEhl`,[R#,l&A#YmaBK8,D[rp$rIeDXVI!bZl8$23Ic(E,`G l5M`$i62i3kGq$(GGcY1pUZl*LH&(`Vc`X2`q&[l`!!#!4PChL(5!#!F)!!!)J!L !Kd#!!!!!D)D(#)!!F)J)#)!'!)F!G`KA!'"iB(#!!!!!"@D&F(8(9PC`CeD)F!! !!!L!!!!!J!!!!!!!#!!!H)!!!!J!!(#)!!!!!!!!!!!!!!!!!!!!!!#!!!!!!!F (!!!!!!!!!!L!J!!!!!#!L!F)!!%P!e!!!%!$%M49K#iJPJ&36d@cjXR$jSaMVhT @jp&-VmU`P,MdBl+EC@GAGSpqhKm2"0#D',CpQ,eB0UHj$iI'2Tjh%HccDhiqF)D Id*llY)lp9GG1H9lAkmDV,C4M4NYUpe-p(%b'UcfdmNXfr+I"K"XU*CG&GY9p$al 5ml+e4QE2,(SUVY[e@H#ALmIN09JiZ+ZR&4A`SMj3MXfm&1FjIZ`j)GUE,0rha"S HaY3MZCV+-QB'p[U3!0+&k&fE,Gmm0MrIDE[p2bjYlqrXhZNJJMe(HTKdI@'UKAF "N!$F`q[G2PGDlr1RT5blqJ4#(HKdF[j!!!"#!!#*!!8!"3!!!!!!!!!!!%!*!!Q )F*PfGhLBH!#@PT!!"iF)LCB!#*K3KiLB!!F*!!4Q9(GP"dG8B&9'GiHC#!!*N!! 5!!)c0%98CfCRCJ!!"i!!!!!)#5)d9%9AGJCRCr[`afciAbKq[[MYqA6GddlqqQ2 bmYmXq2GqeV"r$2EVZZpK#eYY33hbl)CebiED`rffcTaVP1k18Hqbc#Qr6CrhrqE 4a3pr4d`q(9$ASq%$(BE*dfpd1,4EBSmqT(eR$(2$YaPI#G-Hf'8XjCH%VikAiEf %0U3mVmrD(rbD(GT$YeFQK'pr*-L'rY$)Q`'C6KBhc2"2dN*j8fN,f@,&[ckr6rB '5@!,F!+p(U!JU2q,Z2[4bc$Hp&9Q22emj-'HkQ9@1rV!TpSI'2Mp-X+b1i0,@1, 64EabhAGI'T9+L01@2EAFUS6QI+i$5VXe[hB6V,*5jCEESd3kYe1%liCbV#Q-r,p !+&[2M`S1IEjbVK6'c9"X0KP6KA$'4P1rMhTDHU'qQ')AB9T$AG$I(Eh5USN52LV 08%#i8l(*+Pc)Nr-"RiC`k28FJkBiMFG1k%DXMRaPR`Q0IDSHh,+Q4&A`kJ&f#TG Gaf&jhbbiF@mJI2d0fS1Lb-[2a0&+F,p$Xk"S["rC5Nj4a3eeh+Y"K`biM1ECBm1 mXhl[iMi5q+c1'U(*pH6Pr&XB0a3AjKPaBqmmB9c6`PPQ-+6aI4$qN!!mV92!qb1 f64C(`MK2h6MfjV,rTZM@''F$'Sl*JXGD#XCBqQb`'J%#c&*+VJ-)hhMllQCqkdB i%p,%&9I2U%U@MJkc4*Cr0-Ibrb@9)BGN1abH#JKmVf5KYM1FVeGAUkp"rp`2lSj jMf-&$PjF&[-rbeHPeq@&fmRX$AplVjH3!,mXIFqZlpjCeM1[8HG&X`!!!!!b1UG R!!-!(945)%9ZCA3J6%&3)$%Z-#"5C@aPBA0P)%j[G'9c!3!!!!K849K88LTMD+T @lHkU9[Ka!3#4Q'%2!!B!!!+)!!!@hJ!!!E-!!!U`&e4bB@0PFQpeG'8J4A4SCA* ZCA3J6%&3!3!!$'YYC'9f5Ne#CDSL82DU9[UN)3"kBKh8!!)!!#6D!!!!!!!!&8F !!!!!"e*KGdP3,QJ"!!!KXP4&@&4,38K-UKqYPkT@qZi"!&[kFQ)!"J!!!D`!!!@ G!!!"H!!!!Ul-q`!!: