From 02ee768ebbccf29ff21acb2c8ff98409358b3752 Mon Sep 17 00:00:00 2001 From: LordBaryhobal Date: Sat, 21 Dec 2024 23:41:44 +0100 Subject: [PATCH] added md5 and md4 --- manual.pdf | Bin 48642 -> 54803 bytes manual.typ | 6 ++ src/lib.typ | 3 +- src/md.typ | 259 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/sha.typ | 7 +- src/utils.typ | 19 ++++ 6 files changed, 291 insertions(+), 3 deletions(-) create mode 100644 src/md.typ diff --git a/manual.pdf b/manual.pdf index f7ad06ab7e2eb861eff0006ab8a44a8d5258256f..8a4192dc0775350df96808cfce0cf39e51dad025 100644 GIT binary patch literal 54803 zcmce-by!@>(&$Za3GVLhGPt|DTY%v1?he7-3BlbVxF)!}TW}3-fp5q@w$I(~dGB}r zxYNZmGrhXHt83NjdH7W~xuU2zJu?FbEV)1M1q;i}M8rg7XJiSh!v_4IOvI?ErA@@a z#K6hU&df%{%*M&U&I;gSCt}irHL*2*YY5BC{C5?=U#M^}0T?(q*f@dR{fi3A-&I)u zLWPx!g@KimnHAXRUsT>&{xgz{2+LDjfewg$=;Uzy{!A0Z#K@X3zPbR9Jws z2LM<&|EvO>*&l|z4fpSc0l0vMv9kVoE-e4J`G2Lt#>vUR!o&=;jH({?CPa+lcDBxM-&9+?l+sd= z(H5qawJ-mohf7b+&N!pqG5p5wrbhXKZ0>2Gsdey{L)P zM_|+%+B(1W=tQLR=42vez2A1&so7cp)l7(3euptEKmR`>{CBgru=tNAi%5ySb^HI% z^0%RZiYgvX&L%cewx)JOzsCU9Dw~*DI5|6d5K##MpEDC`U`t@Ff}=5T*1)Mz{e5bG zyP)D?Z*Og419St?o8N%e16#k@^EPQm3wvifMfdb&-Bm#C06n3CK@Kyl@zy_>fdlOdR-TXrU z0AO=qgSRn&SAi1+_6!^sXbw=`Y+(g<%S6P^$w|Zt{K8Dc!NCF4e-m~#X1zZJ#NXG6 zKLSG5#MaE&oQRFLbROk{I4ZQGiavs2=r<8>L<8Q=M_H? z)2rr>A{^j!$eq?Woz}=;`82O>GtX>hK2{dMWH0vIWM2diwH|>zoR`(Aw0?V%Sx`|a z$v34|buJLW5O7S_a<$U0<1NKXFC?nkH} zJ+6@w);$iq3X3nCkG?i6#Fs8c?U-)E+Pe5EdRmr3?x`PKO%n-x=O^{f_+7g*;3EhF zM;|P*vWnFS28K)zF*m%VTPSmaP$qGbgj*oif?PjCm~UAi2Tc;g0U)SmqlEJIAki%O z{S_1Yv{HzhL17d@JwbZRZo^&h8X!Y5xRQF{O!u+P;XJ`lKa0wDyF_J>d<|9Z1`M2# zoPfJ30zWXoeBDb^2Yz@@^7Xs7(JnPiThdz5vOZ~5wa?U6bgRah{OwJYS`hQ?`^TVD z#3UZR#xKY47B0u?53ya^JM=EsO;3nV03wCAb>(k2{qMh_z^MFVvHo*FF>x{fevJPj zaDbupkHzv|S00f+g;b#?j63RXt1Xq5KTd;)bXre(SvX1W)+Xd2L^BwJVog(WA)0xH zv(!q1MP{W%eZvyPQ%;k`jL*i3Go$J-g#;3El`f*~pilp9_>U26}rBy6L5Q2hpHB+=oRJVPTnQ zCG&%q5@=^%a8tJND5dMd4@pR=DRuF$-%9T!L`9?M$s~pYp9X*K=jIc<&wb>#)Ve=D zE(s$gp+>{GYTTazFJ0A`{@N0f9x{yy;h}73>M3q`lAYgZ_0sM-w+yh#jglMO{JuU! z?OLoD_iY#LJO2mOG-4!-ikR>;RH2A&w9ZKx^iEi$)3e)VPK)5yh?w!*{Egm6F3TKd z%bsp;qT&~5O1wPX5+_#Tiom{bET5ES}*#m~{CnCK<)9#p6(iboyF!`I(+lEu>V_nDR^wiZvlng}x_-f#1ju#6up`SKxo96S(Rzyp`@O@qU;irJ zarPN?$RJWI*w4S5jRLvy2yqNfS^nKou|F~wLP~vwm-Uc5gNVx2!nVba?S-BZJ(IDJ z=(Nu}20NV~K|73x<{`&cmfCG?_YTqKjq4vBd9e6e`CXv2doWv3;|kV{_z7w0RADbS z@$7`6p=~C36QolUAIHiHzjR-;pu8n9yvW0YVxghER}!cVP07c?trl z#G_T47c~y2i@m4@7$e-eQ~dN9Pu0RyA9$t1&pM zkj+bD7in4R@??wjFf;qpzHK@rq;yb=_SDli#TKl}L|h>&w(wvg?qdQLX9SS=Pv$ z&@@W0ZtQN-XpwUDnsG_xXBJN9$Pbjzwca&{{*1R6Wn*Fr^h0YLl~WfKQ#T;%satqt z9_7^{1;rO)VwZf!hV)c>B~!zK;{7xeM2C<^wNJ!B$@#@@sxqirK=uP=8sOCb5R~im z>Aw5a0+kNbaeC76u`On~^rIOp^qxq|)53@tg%b=-ZK`UCl1K=FoglwoTb&a~Cf;=y zD+J=8g7vxBu{%u8J`#lkVfqADP57l75-JSY=ajjf(rdLZw#6e#5np*NlTm4%?njQ| z=Tn*tROEF$AvyMwebQn~&1dAX3^Dch=!6o`rO2z3aM?^F(ns}<)d%|e5gxeWDVOa4(V{@`up6RakSyWb$N;*?*`k$~0r!uz$_#S~-<~T=qq@ z?E;}5AR+A$59~rlJXkZA+lXt1#WsHsQOtgK1ix)Bxy{?R)fIy<#8t@?e~sDl?EXGu zvia~hn#p5C)*d`RC~Lh_BgUK7GBGv06y#OU4oFML&pt;8X_)F%lA- zB8bpNus%55e9x>XIc9+GeQXD*-vAy(IXvWU17v2`_Dn^2KPlGrSdi$frP17Rql1Wr zrs;<0Pp%&)ZEO3K%(+e4At(sS5wdGdosl5?|{ zU%v=IF@u8>UG{}`@}MvG(!?Jp6>2i*S@l*P@UZncW@$Fyj@z5eODjqF#J0ZUa;z&P z_xAv}hTy6t!}fvGUn&?S-V0RsY)q}9t7Fc~Hy@2@qqPc;=BKxo?6IaOky`*;78tq4DZI&OY0qk@wen~+(7IJc0)nUKhv+ONC1rHC+$ z5Zg-0pVS2UMh9b(3E{_iY-$hhd4MTQ#)6+VYYfPHUI&8Fp3kq5m1^(~8B;}U+sp%3 z;cOGUin~=c9?WVs^y@KkTzJ5x-o>y|F5nE=U3)TfNw}_{emVLp9!@j_ZKL`p9OQ#O zO`{)=tQDU&m3)*v9V}DO5>3xp?Bg|*DG*$+kNMuo?%!ftBC~i2LKSP#LPS2FnqVU6 zmDrvU!WGzvri(I5g}eWZC8K^trYQ6dg-o2cAU#rAkx>kA6j^!=)9oevh#L^>sHFw3 z1x6~zCubAF2bBo-z(rNxO%7Xm`epGQRQr1jiNI>%5iPqzyl-M{>?qZ>E|%FM=Zla{ zHSp{~@XaaL7BodR9Q(Ulc-{)%8BiH5mqt5clQX{stQjynq|i4%0r>mznHE}^>;*XS zv3@qnE~TtS(e*yKBgdKzx1kRiaH|#fGz%4Cv4whRF-nDF4(hu?`a7hwbkni+!X~Qd z1YEZ&sAjpOpN9JPj7v69m&f$xk#VzK<91YDyV{W&9ZX`k6?CV3LZSBPYbdvOR77%(x0Xy9;Vm>pgtSWu2+7{Fk|TW`1h zP_F8mldWKDaJq|*c*d~L(qEU7oSjbxjop?4#U~re*jmw%@qV0Mv>BhDZ3i3N^ zeaL=t3K8!KTyy?BD8Kpni#KXPfJPuJixZc3I*eH%F8O%`L~{;ev>9)dCQiY=yL_^F z0i^%2krbQYJFYDl&j5{+?|VN{JBtO(w%W(h6jg!PEmX}}N6uVZcE#xL$WC{gZ0laM zBxBkI6WGL92CO>AOq`WXL!{OR12JcNXNXzNc`fi0`{Wz%Zgg5{To{U}ic19POsHh; zh8&UX(|t7>ObOSG%4*<)--d-NEke@eOAkYhVgiQ@b~jHAh{sj=TY42MUxF-LYH z#EokimQg=IAn7ZTGW<YS`(qMX+|OBaN; z^<#0pue-i03TAXMN69CH{b7{Ulw>CnIKswF^GO9dy@| zcve?4!VV7uB1Ip};wvxPkcNk>)LSQ1MW5!XG3eK)GtpAmVbQ#heN%P}%t5w=0L_vo zP$?-Yw``%joiCGdjd+a<-*_zQ>0w?~w~TIS|S9Y$he@>1kq*V}SF{+@n1n7(Q_(>Rnf zdG&7lr9$ZMr+OnX;9P?i2lcxRkw10$!FKP*KzTw!G zF2!UsQGwXit>do=t}2LcDclv;}6@RVK9M% zQpM`#5w}I=p&HA`QP={q)C@8-sSQ!}Y5S3o>Z*W7%1%AyC36RD!}59M7|UjyL4;Jv zopO8(>XsH_jRou|NI!_H1rUsDYNn8NLkKIl1df4kzode>I90tW7jz>8%@A`_QI)`b z%HvWgEU#0IlBKoq5rsQlxQ!EgxesN2 z|F)rNzH#L}LdPezFwd~{!+_&9i2+0xyOp1HXM)qV*N5=^9sSgPdxb=z@5iRMY|pHDUNCU!K%5|Ps(LpB9GtOX^~ea8>nwS`J12PY zYHKtg^2+hTD|e&BNmf9X=h1F9UR5+R>eyg>5^FQ|j?S%~HZxCM1y}2K9%gg7x8b#i zQ|0w4iWPVP*BqVaj>hD8?0n=>tPkm2C~>YD>4eHrd!t>c zv@iMKPk;0?{i%W@sQ5Qv1Z9B6tYWPE4yZOjy3&!$4m zjk@dZUmMq!3sJ_$QbWFY6$KvaU+;whmW**3k#VQhLo*(WooHu5fv~AG2kE>X*c6#l zhZf4k#7ou5kM`$uk)0OFJW@A~Q$52{7`2XRC(wiq^YDZl>Cd6Q5-h{uA*`LV@a}nY zAkpt5x+&>~z8Wn;%Q!?R8Tn>i)ZgrK2aV$+ve!Dm*?y-d7m}N+V0Q=ExRG(QjGsLL zm7UI(#^VP&l(!mfls}O%c+Ox_DU8A4^BA^+;bg8s!n;Czcq%f(R;NCMMHqF3X!0J) zS%_$~&KCYS-GV(jVaLYbj5TNmONjYG3rS^rEl`ujU*jO&sX@r{} zr{BR8(<`D^N^|mGF^0e6@PDV6|0INeXNK~IHb5x*AAsxchSr8=PC$;w%*4U@cST`g zJ9i=-dUh5L01-Vakg%~ca{wV96EhnF6Y$0U8?{O~8(Ld@6tXq5{u>w*dc(5LM4Vh~ zZ~gp1X`PAaS=iX$zKa;zOPW}inL7h99N?`&1&B)3fv^ymi}?GvK(uB8B!9mV{GUMG z8VQNPye4G=eI1xe?rczZ&(&sSh;}o^$j_*0zvXy0dV|=&1~#I;0%P!z#PZl zAT!`MWM*RnQsUo``3*z=0hs|nX!{3bX5|2~=HHN+1psXHmboJ006H4Tnt{U31$_IB zn^}MfkUwzqZv_4aZe{}3{l?8Kz}Wp8Zhk|{zi~4M(9S<_GbbyM9RJ46EI>g12X6ii zo_`Z(wzs<9xS4|qs0jQ5gvmgIfyTZGEAY}E;Q1ej{S7|@5j=3de?VtepeI;?E@1_N zW#Ai-WdpH08#@rMzXzlY~Z{|3+Hx1Gyj zVL&DE9`lq>bBNik$+ku19XB_sPu)Pv%i3dgUP|!2Li`eo9+0m{AG9>3iDEDrOI*?bq9f699`}-^Oyp8&S0vIw$)8c zAz3MfrZ&HtXDhI@>?ET1yv{Yn_vg#Ht;7aW(D)nVH8;lXzK#zXf$2Up9M(n!BNEM}qc z=u>P9tPl&Epq%Ct_ZRu#ZrfcZdNrO|a>+Gad6WGR*@LU~-0?oSBTEJn2yq=~5FrQ6 z2PDub3Ll4ak`M}k2GdEQgxd*Ho5KwYLYPNnrO8lJ(i9}A_*3np1ZP#P2@W0(LnaJH z98o`Wa?5NDY~>^nTF=0TAK3_5e13lh%Eju8(Z?rZW-9_ZR4$1RA`SY`yc7gu>djM@oV~0Og7A6H>%*?8e@`4t00i`Vb1EFMBew=I(;~Q}64s;CV+E*2~L= ztr3^zv90CTm#yUo9(8P=r|PsKO}1zl4ZTk`XkI90{77xZ_U0$oMFe z!-pbK+*2|$L0ppf9Vj#?gIYgTwi@_C>xs{ai9i=m0Gi&&`5pO{SNdq%{+g4*L+&fr z&KbLHR%TmU+d@Xkn&D8X(oYNO%-)3j-i<{pjCc&(tdrK}te*7!IaHXvkO@bKiBi*E_IzI9pp=pTx;IpJ&#C$Eyj{;;;OV4%?~=xoxP$EgoOn>OIOa zLnuxVbkK1ya&eL~8p(*6X}M@fSZ=;exz(GFX5D5xf-7e8)tWuBG!}M@jLlp@wLP<~4^cN&nj)ZepWmjkY^cdAh!csrqk8t(PCSZ0&Dw#Ye2+uP z|LyvUZ_?=cD&|;pV%idL%Iz=Htf8CwPNCUNH&*8u& z_k4Lpe#MS8*Fa`sZ}k2xU(4oD)6X^3B-GBF18>Vc6)z9Fi$F@b9Mzla4>>t^*U4rW zp7K}i{$fS~e3{R5edoVqCY<2)E!NLHH_+L(d?&*AHeQ9d;ojFSeOMdtUOSJeQhDN? z-ND)g+X$1s-GBASLBs$d)dY#I2(vDVJ@J_f?r(_7<07q7Q-W3)-hM z2=EWha&3H?pKCSE`C0>sBZp&o)f5Gc;)s;%c@-d}v^?zcJD|*~PlFRQ2$TGte>c z4mDU#`D)Q)eoDb+p-zt)8KG7%Yex*sjyAz4n6DH<;t&4?KMH2^EL}fmOrfp)RK9!> zIsB|jYcVuQ_8n&PIIG3z8wM9~YU#`ki!Gl`@yd!#lFhbihmamMhdsxkSSu|kQ#R{o z&bVbsRg(d2(w{cRmm2p8XoW>o!liK|6`(i;wKX!uE~l2gC6m(7CnLr`d)tu;%LEfY z#yK=QHc zsnkARG{uwemoG_$@2nmsKP56IVhn~~7nIC`ds}IHsc4woQSOr2r3`=fPS`>qVes-t z=-vrB=Nvdh%^(r3R;GpSDj6HHJDm@AHmZ-(S=Te68W?GyRwBduF)EeBsDhCD402k4 zcsH-;LrVFfXly<|QH1sVefjZ%DPNjVLVj&lc*`5vL80(OxxD#UwPwn`&zLsd%!y_f{MJkUx5FY zP%5-wyVFMU<~&OEI`??-1noam96z&1ce7l%7$s{~>3o){v)wV$qdZoz+tJGoQA4;) zoAKCA+I(rxX_4!1Elbs@hKac*e7MLgYAmM-7gj^IVW;s#zu6YiUH`NVMpOVVThr34 z3l_k^o7T0u6&5nEZ{1BANc;40=zV6*QyNH8xu$x4-i7w+1~C_I-Cp+s2l~@W?;w(w z!Z5`1OkYgUX~8tf3|zd4bT=fwL2@qZ!e*u3;kh)LBl1vC&Nf&S)G~w(^R7&1ukPo> z$yGfiAq$~UvSL7Ay+SE}?(=$=uGzj&5V=2Gol$OVe zUy+Gh(KsgGg#z!6ohfN6p=gk%AC{m=9gdFpoKGQ-AA?~MZ=Vcu9QcwYt0t5a7Y>6s zBK3Wz31fqz2g;9Xxtt2ahsfVIYd4y%NaRu}GO8?cG2-9(=opjikhwPO{&H)-O`8Iz4TEUiwhB1xkmJM{B@aC;n9q_8n+w7fL6X{)&t z>s~@(ef?g1+Ngqxp*LE*uwRhG1lCz>TNsZIKgX9dy_$|r4IMCN_33A)kE%S_Qi|!A z3<_O39y{yyS}3cloJ~-WU~8a@0pW(3m+5_5!d3D3952&&#Hit+yIkyu|kwr0%etwZj6;R9WHB!>cvoAWeaSFVP}bTdD^S zLMOMWU;OuXGn1QNV?GZ?NZ--qbA$0-;j?USba`1JS%H@87LvyWWuMGsE2DC^H2F&+ zg+!U|`md6#a3&>_6jpmTd~W(RoTr&sEgvjRGtV3(wM{ukHaEL)QduEYtw6@4BP}cq zt1L)D0P<=MrZRTc48_NtF80hDQsY0mKWHH>;SG&gpUO_|>~^PiYDcPykuD_b#G0@T zn{XkjwIe~s^xR*Ic06hfAyGU#2*X($&4Fj3ZDq+L@Ny33ZNBnuOqI3K!nV zCy5`$l^um&VC*Utw4{2!Wwk&!`h8)CWf=1KMoqgYc zw-EKxM7`*bd!Ez?$Dbw+2z+33RXlnI!?;s4^HfXhla=k16BaG8Mh~{w#`4WPa@DX@ zr$cnDZ3g?W>s)$&L_3}%d$G>|0H^u4x`nA6hq3mx8S17uGJTN5h%#Erm3iI%xX$8< zG5ya%I4WUh7oQ<|#^4yPZ$UDB!CKvvR!S!iY_4ww0(Ka1ev+Co&fQprqa#R+@u{{6 zP7=8yR|pXYxeOMtBx?ztsx`I@r=21ONmOW362j-W{^ZI=5EI`fAJ%3v zDvieei4N#_XASZT=!Uc9MSq(_TTAyY>ve)%FYn~AZ#s+<`->l zI#J0JN0Wu@ECzw_-oo94KagO!Q3=`3MvVQLt{T&)bnE<)E|hgJ4n#i18?9)(SNb*!FXR;~a9dFR5MM-b@7TC%9W;ky9m@A^ZDQ?? z(=CheL*n$LqRPxT5+Z8aL3L+#}Qs)XmyxkjO9_p!nX4?>HPDtFxeX#(l?j$56PsTlkrF?Y_TP zu-{^Lh0+zQc)qC|nGe}rQ2&8q@~}jH=x%E2`u*%!Nup<_xf3*JqoN&V03t-DK+6~+ zZ9ut!ZN%%Rc$@e_0IcUBc4jpHPk2K&M~q>k zwLs?WYxbCPWFFSe*i%uZO{lNpKEYmlhM;p`(U~SL839V*$X7>?#M8lE-^qRjTL*1V zPc?-KF`?{F_^#>eqL<(DPGG9}Ky7gS=k0Orp;{w0*`yz9R4 z?nHZjPHj)O*wb{WIHLE@g|tRK_Tf+d3q2p~R6p3e##27V%n|m#V`jQL<(@99F^7Y{ z44T&e38Fz*Q;#p-yP<`1+?Audi_7wh{GINz!o3EP$VH%%J6$z|6OxaQaR_eErp;!M zkITn!W*YYB!^Nq%Zo~XCiRUh_aQ)RENh;rx#I!UGQZ$_y}Bi}h8x6r6^HE=wLCvWhe^ zNiu>7z|T%Y%}P(Hlves9kdSk+gL(bo@UFcNE~F(jojo&D~vUB^_M0!V3)Dw~o(2KAuorAu!Xlk4moh8VVxw2^ zfUwRs2fN+w6K&DZWfjYjpX5xU+1%BS8$s(ngsSW-Y)J=O7U~iKhGd}Wkh9daPsO03eb%|t z6-oPRQ`+x;j2&9&P}v=fz5F=N?H-Nw-AtLal;eJ9)TJz(^Eq;0%hEMUv3f%6BbI2d z7hVn@X3ymWsIB2f5Y`@OS3RG_%{)Au{t)R6Go9QLfeUiX8rP!~g0axKRz&=}gd;xT zI?XJ*vF@1}Rwv;qasnvSvk#E^-9EM}o^VnYnu~WD%Vj(WFgS$(>PAsDZQ~^jyiUAl zZRZ^F{O@`7$+_HCl_D$U3asK``#t5K80gz!FgAMSa}7uy4tKSZO`^TZWNCti!?~f8 zl}y=TERVA=vwsa$SIV!|`Qq1_GsCs<{o2jyz5#XVDoO{DSsYuV0cbf7I!4$g9bN&9 z(A_LtT^+#@QtQ1Ya;A=$UgfU2^GAF28j!=Y^Dv^zNGzd*qt@sQF+tTi{9Z*25%r+7C&^?KA1 zT4OJQB33$C-K<+E7*Q;xB7;F2X9I43rR194S|KWUnx6r0vWlak<^ZGrAq(G*ygpi8 z2|{0AS6PdOdW4EthGl!y(ET|kD-Df>p}^ouCvbyEUz48(C4Y7#CNvX4f^v@EXb)XP zED-8BEWLUn)&Pg3Ylp9!LDZM9I#L9UgM`ju)|l^7*kKpr0`Ga2cETV*%f5a{(UPnS zYBn~`G}>F$h^WVDQ`bU5%csjV>86PI2`YB`mOO-$pYc);>xf)ly#$VC0}@6*oeyV( zcx~{OSXI~Yx67R<`f7m{Sc)adyH@@1eRx#7RSY~5kW2y$CXHlq#gTOSmio5uJOsh$B zX|@!Z^n$&*+0PBc7nRA>HROO$!T_sAt0pKJQhPdnM;uTb|0uIFRawWN185cCz&~=OO>H{8um@xU%LS@;8F8LG}P8z6G ztpQASkgVeX4y+7A{l~Sv^R1_>4J^N#80Ot+;yw@#`S_SRDrg6r{0eM=X^r`Lp0b{bW~=k(yciAxv08GK6(}wFt)Ts*Y`~yA|N+0xDX5&TM|Iko2*@NUxOu z9uJs|YEm|9!a(I^vMJf}GrxM?0%83Hk}`y6H0piNMX5rcK;wAV(2sgSP!GD@=i^yi z$2=X^?{m*?rruAF=YP!Eamp;lXovma)BQRD zUh|$UpzuQP0>?GQ;kjEP`U9toE?K=MxaqQW6Urt;O;kv>voiqQCAvtJGdTlCHtfBC zUss)O3JN@B54k?XpeL+u=_K|pnK$TYgq;Q&0k+hJJsCF2BPX^6S&M=e!?`A6QMaBx zMP8mDT^u!89VlogXmeg5P9v%KR~2T^C3Daj*wg?bk!8$kD!iN*xF95$@dz zCV=#EdSfTG?#OoYay<~C=);I?tua`=)FM{d4*U=Fgz|K=DZcVPhrk5+~A!) z^+fH;>vz~XSyBxbYNl_~mqVB`7wi9sadoR<@*hzj2Fu54Nj9m7*>|PReT|474Y67~t`)f3?9Tfo@ge{dyNn z3F?|2+4(C-bA#hwZYTKr`Lh4p?F9dORvLIP=0EQ!U;&;E`eR1{GYc@O2uyna_j?Hd zzc(%Xv6p}g!0>zP!P|MMKeiJ5PW=2SDGyA_{%b1ek3{90!kZcYIEwKXTM1+|)Wl>| zXhlsd4b@##3~im{>}>7cl>V=esR2{Kf3a=g|2U@hyV*YztN(+A|FUi1cM|KL+Xnte zL;s&0Py=ST|82JbaA;LK2`N$FX{vvo=6iGA?~`i)E+Td&76v8&6X%~(%zt@4i=FBB z_K`pQ^52}#QXR3~W8Dl;0e?q^;Zvf@Y84KT8o{YV0Qcf+or}wj z13-!W_~D5+>-aGCuFt#hI5B-BH_IojieR~S^eXiuYq~s#3$yC?+v@M;`2$O55da%K z=OVKQ-}+{gbLqRLuL#RgfQ{sevBHKA5II4+A`1)2z^v3$Ic}DrKZKlhHNM9Z@JGp> zyi0Z^xzWd{7EGu7s`YZaRZ0|(&eN>`O2U(&(l#O@oA;ayLpD`Rfyx^*+366I&{of` ztb=bs_KP$kyc)}$DB+piLNf3?AJ^M zOifpAOuv{)#@LS<<1L#b{>q;@i8>)r1XZa6<^^Lli~TX)!7P(Ym_RnbNLKkbX@=>M zEj~a(pD@o$)xg!r)C}-^28ZT0fdz*w^~VszRzv`w3j~Wl0yl@qjulj-hZbr~{GkL& z52}rF;UH`fcM<2`6M+c*9+W!~fW%8SC`-~~3>ECGQa~0j3fqiApzH`|LcJ=@Dcv)^ zr8l+oMVWXFYlv1F^B8SX3DXNPH6+m9vc_Oz04CUV^I z07`yo&^F`ira->@J5+D%j@*m5o*@6a_XObbm+($;qBO3Y~eS>8*jYr4~MFtu{VsK0Oa`d6vvzdRDg$;rg= z7XJU+S;93>4+Au{`ST8!BXu>6^K9qVdY6Uh{UZ z*cstqNWq(sQOs!4dCEE4y`DybotHv3?r3^&rGto!exX*lQEOcs)P*m{*}?oYOs;S@ zpUTqO9`A;(5XhUu9Mx`0`=uh=|A?p=tH){8vs%)mKY^UENfFH7>OPeqp;gZoAJ-52 z?EADWvBxm(vtJ`Cxlk267+(;dH5=>s$fm!)#TsqgQIi4fCJ_CD%9rtA0x+HE4CaGB z(k2BmVKsE88scWoo|18~M#7A6uAYGZn3;S*t_5osSO0^v#lMiz0%5c5nl2(Av$hdl z;09DqlP7XNc@kWVEtG+%jY>MCqMsi#ehySWq;~PrYa6@$i9jnhm);mtE7-)w*vjEK zHvz05t0CT|SB(XGq&o21mOa1E>~2h_L3@Oi)FwxJIYO7ehwb^mfnz~`;FbK59rOl_|r)< z*}->)bhzKdx3c!PI`AJ`Slm;rfAD>ccJ$NUbS~kBjZ7f5&F zgRC{g4k1uLAV6)6s%rSu%4S|PnRH|2GU6BuEzbdLPmQsTu zEId?R*Ds1hbx2^fLU|AS>F(j2HqysUSy%e*gX%{c#}j@Q(_9Y^>z!DE7-|&Kr2-#1 zOTzmkpDz<$hYOwUNz*>}X)rpVv~LNEr<>`FSSERDqz3mkd~x zK-c1&?qMl7s~QKdpkr*;tW;psO97~a48ABmhnJPMIDR2YhWaJgE!Pu;P*`b6$>Wj9_;zm-K1z0YBx4Wnio z)isoHPp3U%X0!ifb#MKcD_(|+*f;fuU^e<%F#CJ3mp|EDr zjntP*_S^RF9Wu$NjqDpL;RnzJ(+e8)Evy>#n)iPc%;dnVyANUGq@+)My3J3==H%vsPQ!4Cx@ zL%})6J__oJ0BLm7M|F2G$;1{4oM5U~ZZD)hE zJCa!rLhysG+9ez*i#FisLh^+rICYw6U%d}@zx2WF5oY(EUtF=>wjtU9A{A0AS3aT^ zDWvH8G`o$L4-K(}g({-nTusEBdOK_&B+0?WsPsBeBoz8~Es<$PRbj;%AsNr@M*Kt* z^;#{PLM7#v;^LzVP2oXoqdhSSsUFgw0cZohiw+w*7Z_6~6;9p@>DkzfaR$&XgL4-f z>~K`A*y_4{bv(&_G?-fWAfOOgEbjx#S&wy;H?An9a!iMKVWp<@CddIEarO24J-WiWBIMl5-2-Z(+b1q4WtDSW4)3%Dl-iGTXF>XQ zD(drDQiXirGNUPTev7!phwtc%FbxB0Fnr=W0%l=I$iJNG)}Q%IQ!}vAW4u3Y4sL9- z|Hb}UH}s2cRKHmJ3sPyX5RI%{3{G>8AwD#MnLu-=CVpajjy%sPYq^=QQJ4>`Yo-WQ zsrylBq?`g@-*mo+b0e?F2qJuaNQ)nnb)oqiO-BdrnYJ)t?YuWTBa9ORxt>f`ehKJj80jJSR!pw2?ZA2A`a$;2p`6Av6HtVR zuWE2df}wj2_CjDK@ClpmUB0%%2&*edu+!-^yPmeT9#!g;lMkS;?|+)`IKx~xobuBx z7^^IyJyz6cZ>=JW4|%aYKqWPjvn`j!S#=B{t>V2^bQZ&ua~qwd57ki}Vq;QI%KFu6 z!NBT&rhm>+`5>($I72?RzcS@z3Aqz1A1f6r7b_E6P3qDhU!rmx#nX4B>vGn5(F#4n z=E=ceY-Y03p>=>gDRXl&7iJ29FOpIP%YcZU@%XY8OG~hP%i?p|$X}h*>3lTaWjjUL zEGxikvflIM@}m!`QOIZ*=7gU2?M(slsg*0{guB;yQw!}(l2Gqc0VVidj52T#-+ z6DAVmWU_maJZ-cxt#sKk_(+XQke|w=uytHmolLNw4Gjg&v^r(SqLtysb{S`wDb1_9 z+itd}k)!);n`e(}vtvR$1*3|0g3Y@^rr=4aRl=zxzmync=9(AHrz~XTmABpo%rWMA zq&GH@>dzwJtw7?fC|dWGM9Y<8yadXXB)lh>?-S%BTML%?6# zS7h_KpzjmgAvK=E1+i5xht<#L*Cdsm+s!=V_yK+bVhvd#;b!*j6pljzaZ;n7aYW}p z%9PMc4A{yN5aFXAL_>=x?gg2UQE!k{0*1jA1xcWyB8S3(84u`a7O7(pPOO0weDyn- ze3h7;o3Bx?nxdIbxD6n@e2_-{SOECxeq#XP<+t@CV?!3!)+iWZj*EyjO%3v;O;(Du zx?tTw6elf0@`cHn#SylgsN%#Bk~AuL1C;{mOHGq6d4rr|&Rxnz+6b``Bk-}<9a#OR z>G7&hP}T9Cv1;?VYbqWm+j)tU2(>9ZV8r|v!0j45*aV2yf;>JTyLA|+L-OMJ`^nJ< z)p^U)#+)SO38H9F+%`VQQ&%}Wg-g<{8)l^Jmh}S(nmASpl!t6HDYkd00{8}3D+6)N z&QUf|Ys}G*LD74p*+P9t3%6QIUyHXI7nBhz@$WSmHFK6vcT`TzzNKRle8Arz59evr zJQK{dhBM+27bc~l%R`rrE{x!ZW0(as3|})m3E#lR78tP22t0Hx4FNkza1DjQgORnh zmaU}b_qbV(Xjy4#v|ekyymUDp-i%_}+^Ed_E>}<@J}X~O>9`ZNFTl0nxWyYIF(L;s zY6eXTIhNStc_`I@j%*w$oktR90ske9HiL4cAqdmHRbPnr@HyzJplAc}%It9URy?LI zCz7AJc7}2|Lm{bDiP(0^P_zS~!SwkDDr+C!xT4VQt)uY`+JWjC;e4K15?&?m`8IjZ z!XvuR(yUb1Y~Eethau+gAKMez6mx$Ji@{#vsEU&M$$w3*)gkFBfRki2ITQg+fJ8A}*gFzX z2vy2c?tYOnO?}SL`I@bTS>mAVaGvt``1tYvWA82F>R7Yv;Uo|sxVyVM90(o=65QS0 z-7UBUcZUQgI0Schg1bwwV8QJzlAhbQdou4#_y5kf`M~dRic_a*KSr&+*RvLD%}VIr z*J5@ISdJ-@jlEPB1itylu#vjdg5IT!x(;?TIc!ojpY^DSf;YhuuoBGb;d~+?DF_vs zqc$eRAExQwniIY`BUiP>HbX)g9l{cuIi3o~7WFtmqpIF+x!qBK7+;mxD(Fe{YstmE z9qy@#6HVYtyG9K7RL@lLUNM$ghyN|Mw4OmK1k5?_f|@sUp4u2}h`k&`I86}G;mip1 zJ9l*RWE*!ladJFcQ}9xsR0kr@do51#CbjUwFNF*tNoH2)#hpbKY%MMbVvN0ma;R`2 zC%SwkJ~Vg*5NuaxI;`&yKC%k*qNO0a=*uRH;ZmRRlta>QTjRT49salpAn=~JphED7 z1cSl*67St$v_H)zoe*CER(6Yg{r17|#P4ppwWW8{l*%)uG%Hnap1{p>rgY}0Y{0NYa}dzHuJuKEp5{pL0{f!KJv^w7$W4?3 zJg7_XAj(0MHwTv)R}KLS@^N10b%QU~IxM?j3el*H5oUFScS$xqlt)2CfFB`ePG_cx z%$Zi37(?X2l>5-PwB^njOKOId>iQ;+vs#dq$E~G$stu3(P}0HjCt)bAtJ@^RjMbwF zhxst0i65_9K9sGsZVZ}W-P37G4*qad3EO9Urwz#AMcFPa4CNaaaXnWcY96KIhS+s}p9u#clkKR3m4c zL9r*JFW2NlT=nrS;Sw7(hAZ+t<@b56BV23k(T`x-o$fwEnjVmJygApOrzjKK8%7+7 zJnv43kPG46`;F*9mR}Tm#iwKyPuN-zUztcWwd=own$eg>gKcm|sYsnyGsQ2Kho}?I z8tl@Y@nd{(Go%vq<-^IVjw?3xFInbl-ePAOz2mH-=VhY>S3Hk#-kNoa1$z$Shd5)7 zUpcU~?g$kZ9)hs1gj<5kcEt6nYbNcwEpY9XnZflnMQc!4?w7XBsPed-oE2(n-xb-m zB%z|eA!J>Q)j8w$kSHJ`f0c;pw^Tn(XgrSXP&a>7w(*VYU@c<{cATIU)+NhguD!Lz z_A%&k)ZP8!`~7XL<%(9z#x4Z~TRg3I)iJjr4k7tTy79w>XrHg3QAus3MK1p`P^4*{;!50e%!QxZ(OUb{bWqphPsTXTrvs9b zPahXaNFZD-Ejurhdk|KP3HWlqu_2#qtS!gBaD5K_ z2P#b|<#D)Ovj!$U+LidD5rommzR01-fyj}|xHp9=1MhO>>J_Ni;)-&62Fl+l=Qc7o zF@I#PWG-TE7~gnHQ2qOG}uPGEH-@0_qakKF<5EBKgvf_uP-H zZD6v|aD_|G-{qAgGvC=4N}#21>7Gusd+bqX@b+rHqRR~Zks6S05LqX$$Erpe8iDAT zAl@5wg$An2ERC4?RBfK^$O|5_j$WlqkG z#m3?mH^nKXEW6k*$(3(!lD|tH;s;UTgH5haQp%KZKa!XUqOO1RI}32E(t%*6voWtT z-&Y&)@1=6PO#6vXEo^5S5|M9^G!a!qF^UwiS06|~KCZGKvuu&jb3lbJ zLMfTsDWEWY1zB&R-NF#Q3OF1SJ@kP%GET~O05)`Pumy5rSmcJv`W<`;sG}=!H`7q; z8+D8jxUFkRN};)DevkoC<><#cP5T|<4*|8Vqpo7XCKzo3vQzadAxAJK>}PRIJbdG>iJmaUCSY=>ga(a#eTAXvf5uEpRdnXx(5|p^O(O zs?iFh(hB(gXyp=4x);GA4Luhwg`X+*BE2WPWRk{uI&016Btptd?(5sgvmKS)Kk*VQ z?x0-mYuqw0qV3@0XbGJnxfqZhf?yC{+Tamsgv7}~UU04FJD zqC>{hNl}Y{4n2K*C-s1MKf`d{N%EM?*K|s7Ex7X-z=vwwk~I-DyCQZlN`3B8L;CDvU|cL8fdL|A$9H_^-(_%aC{ z&~MZ8aye22vuqQIay{eA*==N079Kuu+y=B!D4wrQ^qwF^=!ayWG~ScLy$P8F;}Mna z&-3%ErV;qki*@-`Y)v97spi`d3fVWIE@F>S{szLCtP|C%J#AEBcS36+x1!gEleoC7 zH{^I$yQ<5IDwDj5Ned4LVsK(`CDx5OcJ^T%u#IO428#@pbd-6>9zW`r=9)n53cFx(RCF! zLUd@6G6JLr=s5x0tLoWFkw);jcHqN1;j9?<=@@nPk_Mt^U<7~sw1#C-C zMBOIYARy*muST&@Y49@}yx##+3~dmdjg?S|5AyTU!A3q_3>jQb=Ba$0L&*LL*DSK}ie>$Iy!>WLtA9anW zTYNPv&ca_R=b@)YsLjJu4U*i%up($LH6@|Gt2=CmLq!RGr|JwmUof98E1PS1I4HTe zNUeQQ$7C0eJ`VNp(i?5}g29A?Zj;7^YCFu(froA@*X^+YVqH!Xo``hrC~u0LG-wc) zT~S~@)G*0?A*4473)?`?Z$vRaB$^!Nqq=q)ghjVO8bwKy(#b7e>J^mRDm&U$q;qMy zj_F~3ZK-;#;pG-g=0nweK-NK|er61QtH%SPVwKL@&%&Q$;qa3Ua3rv62|mPQ=f>I2 z1hWO(;@+G(n@Fuv4zC?$k*%m|YBQ9+(n}(KEw2I3#l;vW_Bq!7wQngARCWr>_wVY? z)%lS2hlmpH{=ROW7O#85uDXN{9|VLgW2drwzf2W<48@e;BONwoR*u?qd?}_i!$W!$ ztxe*(;FZ1!SJ{|uz;L5n+)^c{%NpE+i7faj04f-{Q#FoAE}XF^30d@oBr>u}OdP3u z{P#TEY>dHZyG;qQQC3kZR#FHd%<(o%5lYfjxF+YUI9 zeXrIt6R_6iqxkzCJMm7x2v8$SWljT4T_c%mMuWvT)#jCj0oS$|E!8;w)JX#<; z*lvbJf4M&`MmaP4=DhEBd$bR#AxNAYutm9ExWl%pCCC)DcCcuVh1W#P1Lb9;5U_Nn zIQw-`&TF3b=UB14E^{83r!tqbt0*#Qbt1$&>W6Wu&J%GS@Pajz6ewxfi3~Ls4Y|Mp z<1Qnk5rd(d_8Jrv9&@XVSj^F{P|D}KdZrq(kRczP&J#Mc@%rv_cg%%*!qnB!i^>?S zTy?}o43Y$%P-nGsZG2CES>_;%b`W}2rg|v57j7#>9loU7*Tn}b$g0#x)ogw+3cx>v{N4|f+Tq| zcQ6u0y@8xx42cDC4GA)T1}>d5^BxQuoQl=BDqV?$811yL;q#TN&!1o~7cq{gNQwxx z9pcC)DWxEy-Wo8eO5qco_1{xoik$408o(QcSCIOx!h`pBjazsSC!nsfM8=T0aKG7( zQKjtu?ot~?+qENKF`3EjpQ*xpVWlqqV_u_aq}v(4)1Ha9Fvds4?U{Pg`(nf}>qH$_ zq81iqZ~cU2FWN7ah@)XA$#b*cJv``vqMHBx$aw3mA=kzarD}BHb$OT*$~JwZ0SDjZ zM`RE4=w%~_2;x|S$AkNkTCSDDu>}G?;r`f1NoCvSYJz9c0tVE{qJera>}k6;%rBcS z`H@3oq{u(Xj@NI344_JV0NQ{YQZU6EQBtfA`>SuRgQA%XFxT;DzH3Vp+ZKcu8lcuk zN(g2!zjCYr?HNE{#QA)hGT^~tYU6mLh4QY@{&Cv$vp1?^40TtJlw8pxd5Auz5Fb}C z*r-#p#l)ymCEh4{v&Hh`IpXw+$glz0w1f#ffA}n%jH2~u7GEwROom}I?d~XJGwt4` zKr6{N=K^nJ$dPPMG;of^H5)Fl2Tw#Vm6x?vO6BUfR(R;v%Sl~UN^Qe(C&KD48kt^M zU3Gr}znZx;JHsN@g$i11jm=+eU_C~z&j_y0Pw6?8K$oI- zD&w}?5yyD;uZ4+TrFF(bt}zFB7jY_tO2_oHEb%SIW%lKuBoqX zd!;U%;R&pnDg019gz}gU+GxofzK~m zHK>nF-?Z`VJW)KR4|3*c8eW@qVlm&giR(myx3=Z@aEJ#VAV_ZFc1CEve!Pt{F`Ejx z21FL_$9vJk>e9)8|D$~$SF6~!XW-#L5gyLPv<}X@`wP5{OD^UGMyEDy`RH?Z&ZeRJ z!((H3caEmb_ipeEEjqdkMr|}gYI zf`|6(N;vSNbE}us2dl@lPN%d%heic+2?J&v7UBVB2dxdzMH!rZMI79I4d+7wE_n)z zH*t}c=@9Do>*(;0!)vCW`8*LbP6f!IKUMNs^vqeo2S^GRwBew2%S61Pxoj8avRIYr z(d7xEn3+{1Q^_P@RYvp!o1nzd-+?Pr=E@_?m zxCy*wdg3MJ)zQe0t|zi6+-@ow>+i|DPLSXc>{W(zzjoMK$fD6|jK$O8Lc%n32;$-o zy@%u&8hszLVDl)D)T>J$qz7+r`<)<>XG5~!b zGe(K{`TSB{#hd1bbxu&l_9%#{_2pf7HLCeFIoKdbz>DPkHmutV_hudOW;u`>-m~Ei zeGo3HjTF<5??~-#2tgL`&2n#48Q@hrvyI)r_c?KyPh$FszzBv`$G}>@BR$_miVDnS z1?6COsO$-d?&5dIy&=k#9cwtWs;c@ z^HN*o`5Bxqz0$E=aIKmucTn9dDtaxno;;xuhfBFJLXZi(Ead_vd~_Xk^crG2QJP<> zAB?&UTp*({Gz`r%M~ABVIis|I&cFc zdP>RN;0aj=LzG-q&_;1f&yjXvWAoJKK1Tb6vdD5`cJNpD3`JAE(?y0v59I(Qwp;p_ zP)YQ48_e{WK>LES!mC}D$W!hfM+w9pyl)v&?ilo{dP9H5TKQK+hW<;^*`LUOzZfq7 z)$VWdLVzGRJsT&>PmLiED?J+%6Cn2jVgdn111x})2@@kT2R#cjBg_9ULlDHqNe^OY z`zayxC&?j3Ko*~sB4e``VNHZ z9KdY=YBzuk3>zywGoT9d)QTW_CKi^bW2_*0MrNj8;!SU?pA_hS$;Jal08dmT!k^qp zfj^Y%e-Z2i^c_sCt$+^zACV_y5V2NxB0U0cga|3^O?2siA0|qwC-r)u$^O)8fIiK? ze*b`D1QRnWpi9Hf3{W}Q0pWH)mx>;+L;wZ`I}&Ulr!)SUn)%;#%HM-xVy0*2VE;L^SpaJcX29nHATt7H6wH5J zr~E!BU{Y~110p`Zi|Kb${lAOpkAcR@#7WP=3IbTQOpNUGOn_Vv5FRTKC_5wPuZjCt z^c1C~0iC4*>u<-|KXOF>HfaB+^Mn;>e!!*UA8(%p@Zn%)X8NmdpY3fXMt%c2&}KbS@ut& zQGYv4&d}c4(N5pc9#Gu++aVD!28+k*nzXo{@v&=biri z8WCMfOI^UggC5Wh`}Ok_#LquT>N?n&0xEQj^uTZe#wa~A(~~e9JtGq!qs2(i!UlSJ z2Le>H80ndqIDzE`m`K1ifKPw`Wv^dX{Pk_Tynma@z+L?u*??!r&-GRANk$83k|zzV zpD#a&%TMZAz`K8-BL8g7zt8-?DF`t$G5yla`;CGSuonJd32~@CXtl(SxU^3bS8ci< zfMs{J%x(e$ZsJ3@Or|;sat!Twg}A`~we=`l=!9&bg*|Q3v=mM|qzo%GjT3kH1dXKk zsG==M-j{P{sm`6x1Gj6EP5)JJX}w2Pgo!A-Q!khEPV*7Y2cagprh!kOjsCN>{Mfa(%9WS_DuZO*gdfqy#jo=aQWxNihE zq2WAiwlI>>jLT6aB}P<&t<8H2_m<}Y4#hR1wKY)LnsN0ot4AABPwCUK7a_7lEMvAq zM2vxkZLaTb8)jc1db=p}kCV4cq&gr}v>2?i>eQT^cf+EhrjtozvAXX9B2*oV=7&+l zx6ZQ1niWpp(2lw}yY!g;;Iuj|_rOT4FzOuCLp$dvIhz;^bIy+yWIBBZWj@q5=kSU4 zyG5NHN^|&X#k=|%PW_mUT^?L1mhT_lPdN!69NH`1nku?0hF?c*m-j^2DfKWCHD!-{ z781@{_^e2^q{mYCWyzSm`?E1Z!>s)XzEO^=Guf>@dLSeN(U5}q25fsC=FB1&eY3_O zXh@W#aYE~vzK_3Q7&7azojGlLXm%sV|gO zgn|LgzA$9AiCs#RD2;}3(QI9$C1_nj$=ozcaNh97c;6_U-gdogr;NroM{++AvA*hk zKd<67t|mz*SrK&2y%vQy^zN=eOJ?mvMM}wO472EiFh#0-BKA;pg_f{>e1+y-o^~~h zY3f7#a)nX@rMRD~_c8Nzz2_ok&VaBM{+B@mW6ntI?4p#(w_6m~wTsYoFE=)8_A>|F zMYtQ<-6!HKpJOPaO{Y#_O$^C&)*U&t5D`uuF1}4_S{=8||Ng3pjOdi@3q$SuqdOVB z(Ch$|nA>BW!*!=k(#1o9ZW|)sRLT{cdzXy^wrky1*QG$aDS^>sCRC~Bh#%I>Q)MR$(u*@rE^P#KYu(ps%T*>B68_{{N#)6 z4M8NC0?cKj9}2#^w34m{rLajE;we}ZoUpr11*}lQOqK^$G3NSwoJPa-^!_&W4!o$L z_UBA!zOtf4#tz?`agYKpeQQ`9EC;E+5!av0>+;Am3e*_drQw zj%bwmwT{z)63APbd95shW5mX)b%4kAJZ@%XsUSycG@MkLvm1(fSMSPg$S)Nj;VB#( zy7vh4*c5JD_Xg&O>-hd~J(QKT?}<~gMK2+|F?d^!;MHZSS@vH0%VL+8b-s@79uPOZ zZztqS6!>ELLUr1%-clL*h-5&`wBe+=Kre8AOms~WYK=(lW!;%Dmh<~hkkBH94v$3Lo8OO5y*A#7k5?d_`;Q!3;B^#m5rSDP&tGML2a7Th*5L#tR3 zwh{JhS(Pb3)5(w*avFrwaLADI+d?b{prmZSrzwAro?8&bxxu;kg40;i7|HCkXC%~`2&dp~vMUXX!! zt>EN6u-Dm^g|`%8p;(xK?F((F786*sox8$xsnH^d=es^K9ng5Z+#=)yPEcCe-uh#{ z|E*B>qOQErmv;vnQL{W$9UDU4+;tl}w!K_IwRq0O<6h=Q;nVO1>mo6u&5N{GNc}8M$Xl)|cGF zUY6uIo7`vB-QMaWaE)4BYpIkU;*J!JQAvt%@iN}1v9Ml?3~pUu*?;`@x4JK`)=Ws3oogWfcK&!3~n(WcNz305;ZP; z`eL+E>myisgXPEBjsmvGUM^P}%-|&r6&eeavGzLh?@$p_uxCYVLQ0*B%bjzO?_mlDP^Hlz|>!RQ<^hP6CAPx9UKkULfXyN zGNk94eOda$Ev9j}%suU8u-7oh*}me5*7dmq;vDhz0Is8B4qwsexsZ-Btt0m!y1++X zIK$k)8It`rhLi^t8co@wYM$yO;zK|kDtvYG^Ig&0N#nW|hfn%cj#W-iDkmcTb1Q0% zOegB?YK(lm(ivM(_KL|>m*-WGF*iiflU789pwAx@+a*XHy#*0+#soJDOxFsyaPAFY zsI7DgIvq!#7QtUY5?}L^5(IBDM2V6|wZdmt*K3L@Q3M@qW3WJRc19(PJ?g?2Ja(hn zLDPJWS$>1k0a4F?9gh6*=*|w}q-O-2 z?EuwPCIEH;c3=P;0RfMa%p4ql9Uh^yG_}{KGqKdw|J~y+phWtwNAL%rVq*iI3W4+i z6C)4_6Z4aNDJu&-AXUu#^HKP(KpubgPy7QTvVuT>9UvPg@U-~12g^SL-`{Ph{O|D8 z-$P;nKst~U`4jL3oYnw`LrxCR|8h`F>;S&z{ACLH&%hT@hy8!)CuSCUP9|nR?v{y_ z88CPRF+R!N0;YnDf8jv;ZBMbV0r-xS<-Z8(-$}9jy{DJ}^Z`f#17gE~ohD!o34jzf zMizQNH2bfF^S=-E06>H z>oQ1xj{|_ofDhpB;&|%7zXQi#`H8;>;XiFHlmqZGkp25Vgb%a>unPYf;XnO%1fcy- zvGymi>!)`=7c$`GY3c(nztI2Bq4rOB|EX>N-fjPZ_kmQ=(V*6-nA5c!1k|~9vV9Q5crrg$F0sDTuSC!+rRS_3^!ZvRZrTMh zupk%*=HP-qjF5UYC49PUM@S?9wOSg`M){$9s#V&%lS4bRX4n`moA#)?-gyihTnNXs zV&Jn}zC-J_<7l0~yY_f^UFrA<%828!?)v)n@(t7-=uCcCdLc*CL#u1W@+6}*uFMN- z#C!g3%j4{eSqkf?aq=%m7u%h0Efz%u#CJdAbzy2(ccyOSm)j4TLVaSkTp$B!L2m`j z)PphPu}5WO4CH+|h!7JCrxjko8t3_V6rd0yH39JkqbYhkF*BAnlOZL#X6h`|yOo~L zwZ2EZP*%OTzvS#D!MjDBBP)?S-fc$0TqfcJ zeA1w)7hEe=hDE5pw=m(4XaZwou+nfifIDkWXNh1Es5Hfg)Dxz)znJnw) zUI8a2=!pPcWmp5{j^`*!7rdDZ0(scw(&4-f5jldp9pBixndWc=3-N=xS`WM>JI4zO ziHR*)8mB%Z+?^?2h8-5K4Z*RXu{mDn$(>sYMw`86L9`f58E?jp!*400aPpa}_hZo{ z+mn-Kgs*liI+uWAOK; zIWf$`qHA7!v#doNXJ=c>K_Q`?)MM*r( zGDUX;h*v5>4WQZnw&FwI&;3HWJ$PSDsz;|&Bf+{l(G7_5R0w?nVR50a3d3oZ>u9lc zpM4JC{e&CtW4R4Mlc>fiUBh4hUj1d9oG9ESVQk5Jy9ZjZ+#*?K+Y%YOJSygieuss( zt$I?M+=K;W^0nxdpvOJM$8ZdMSU#*z`eLyMbn0^kadr;Sj}D{cFc#Uxa`16xI^zm3 zMKY70_lBM2-IDn10$wtg%n1$)Pr=+Mo_G$snzW3@EsQFj(Na>N^eP%EezHz^NXF~( zP`_6kDfUkmY5$xw=#6-JL$n_r`aQ03rhUXS=Ich37By0x_TjA4Hv{XsBQP+;EVS1@ z%pS+2WD~)!yDtx;u8e}**H{OUoN%*XRPx2zxGd6*5MW+}#jfoNadgCVdf;!<={J4w z|1h-7Yy;Jj5kl41D;H1mbE=J_~Uj3@3PN*8Pelfytik#bml% z7{9O5G5n0t4^CJ+V%?~iG=y^OfShHa)&pOf-fLQ47}n8a6tJ&E&pTTpNrlZr@B+b@ z2B>Fch{srj(n*Et8O=Ti1o6i?SC#V#P8x&DB46pGou3kZcvFBpC`)+Dr88-frlpA7 zRPtfA8^XK0waoc*H?;?`@ggT;8LkE!M&F#{Nrt6n7Frgx)&n5|s(Anhr>aP-0!=ld zEfYca+v{9PWeHc>Nh;Yshk?PE#1Nye5*E_pIgR#e?=EZSOkJC)mqIsGi54lA!UgpZ zL-X4z#_j`>$cfnR2f}=(qf-h6`6fHKLtGA)=F-E;>~WR#Tgy66>2=|wWMN|^%J z&jSb4B%%mn?2%u}%$5p*A-7#ic&9X{m@nQSr)FsdIdzmzg?i)K&v}MP-Yt}1@-Fsd zWwVDSTC`)4GVOc*%5M!*X5v!?imxk*qD}6Q4S%z4l|& zot2D8wm?bqtU?y0aH^tfoYO{3QpSPV6_RpG5MiZ{Ncv1w*PNJvy=*l$is}6Z6Cp96 znh#@E`Io%_}$bb+{p7@%h}wq$UcQltv`? ziqY=)SM3$FOXO8cQ&?0z?Tchq(vs2WP^3bWR5PP)c;C%_uYjxch!LFD_B8Xi-wFOU z|J<3yRDI5t`l}F|3Zb%;HdS-goui1l{sXGxtkUz7;y@KR5H`^}^DbjJ&|x7C*&s@z z!l-A;=*u_*PrYxLwdqo>eqwb+Rj@!=xNPaJD5ln0mmZ5LJuxGQZq`^US9 zyOC^S0!Ni2&0eQ&9bqph7WD6ID@8cx(GV!v2W#=Pha=c&+HdF`7GM(#DwWyB(}?V1 z1LB(Egu^o@glo0hUR7YPB zyXWA$Xfi%;Ei&--xk^=qeH|uHBeZxBJowyK7l}oNr-sKy&Ad!tXL5iiHArgWh6j(# zJYp~jNbR-WbSwl3cq%DtBOcbC#MwFKa9LebF7pgHYmd8bub+w!s9Uw>eAv4YA3%F) zD$DrjOW*bx(&Kw0_j@+cBX6|LtOXi_t4UYOK4cwp`1$ zcim||M=5F#?yBzzPA;Y7AaK7YLDFh`v?Y)ua9tqT3l#f^_OiW1!`|iAdj`8>@i(cQ z-&HaH8kE5H6G8qLDB(Y%9mwX7Z^SY;{~iuY|^=Jb$de8Mbe$=F!ZgOT)h_A)1$l_iC*HJV@DYs5#p z-%pH+qPbb=k*WYJ>k}Il`0;pB;GlcB%?bTj(2{oMj|*W{&#L3&PC`7$9I%eK9sf6=X1x ziMd&)h*kG#P4;f^YaEdvHQ%Y=p4&K!42AB~d)-}~v>#R9cJ4W_9pk^2?pF*86%b@(l7Ur8ry-Y&@(T|M-Qje5AuO$UZf}4- zvt67<)Esb&#!QscRNWw7WeDJK5l zhO=Y)M*1cuSv;_*P?EcQ4m z?9u+{Jyi^9T1`K_K?n$>5ftMVV)U0ett15(X+58I*Q8DYVGcssgo2IsgOxB-ip{-h z=RbyhjF-%xHn1Tpdu=Y!)c9K7AI7rr8##EOar8=|la3|i8W{tPAB|Pt8`GLK-&cu# zbRn5o^-@I-g>Bz#bs)52w&g>!b~xfcNIs96R$6pc;V87qbde*}vxuM%L?h#W*Dol+ zf+y6*$h+9w8GF3{fJeHG$6Xf-dbWkQjyHoYho)xHK)iR(EX*z zWvYQ#IJf)W9|hFT*89vhu2ggv$_?Wq$##P6#c>yzBWUU{UeXvd&9FwFkaBJv^EG#O zwqlRj^`^wq8N+orxjr$+`;dF;?0PH`(HOT5sL)l-@eb#nV0P;^DCcL0ny0Xc;bnNF z47ryaCy*=rEHDgyE%hTVmzVQ544u^qE`gWdu681QK8f#+fVLdJ>J|1V&@u8|>J*D@ z=G8?RQ`2lperex2r#>xNs>MfnBi(3`?$+sk?{Zmk)O$o>cb8G7J4buj*V`D#ba$)M zs@;@1(w&+)%G8Bs^t&bPA0hO=$jtZ?gNX$w=`#bwlK%w;lcR&Fg*}~~sTG}rH66fI z_+0`A@Z0)xD&Sv@g9RYSfS8_`SWmfWz#j{Ug9YHnu(14vN%p_R;p$*${}hRdq04V0 z`FFDIf27nvPn;|cmYDyPXq0@Vf;HO^*?%ror9U41;{-E zVf?{bWCyVUl%cs!UfJ2 zvi`E^qW&vi`;Vm#5Kxe0e6m^mO{EPOC;$4K`Fl)H&Beyb&itpCSb&-oAVSIXzZ?@# zIbvdcnytSJ>Nhd{ML^&utL?u40{=${1c;PBO9H<}A=|I20Wf=?4*p!7ftO!Z17OJf zJot+<_;VEgWAT9PAJN<&#RF!>|5@>1!D^8m(Q`(b@-6bD<&cdiJVP1X{EL@rguyH8 z+^kaRA8lYAEVI6?IE#ukiB6Wros*jz=yxGgX$7WrCa)2}(dB2_XK5=vubQ5_*wa6g z23rHG4rD22EBGPjanVY(vE?34!0vrFqqW4=)ZEx$sr4X{NrrOR?ReJtR=Z_Ch^WTy zq{8*=kZk8J1_pNYmi}d>`@3Zx&a`Gr1}{sm1`{nbJU=7h;`-(6mq{0vNm1-aT;@Cs zyGfIb^!GU!wTR`1EQ*h)uG=P*f<&da`Grm+>dz%$npH+@PYAzFd>r+%tDhxfIWlPB zGnd4{zO~98l4H@@b1WW;U9as<)6A^-LdOeRhX_XhdbiAe?k!VbOUV%i{4-8@4O)Eu zT$gVTZwqg|Vyx}^=QYT{I7k!FZclQLJc{}b>dhV0m^RQ6tQ2k&aE6SJL@xha*a-YR7R?uxiXyx9(QDF>H3l~P4 z-+OG@=D|=>4#ss91*JN>^0ioT5Q&OK3D=Z)-=)XQK8UN`#y>nRHMxqTErW{gOOS>L z$#~g)CD@_IcpU|)`s>!;xlS;kqV#w_Kjq~&)JVX)Y9p`zCbFK}JjFO&`>UuR80bd~bzbcQ%dp1T>r`=zPK(y21rHaD zsF4O&QtO^%L}8-*_x@TX7q7lDfPZy+JGZMgCgIclavB_~78_j2OlZ&tY*r6u;%#y* z6-O*SZ#+3s@68!@`c^2ca)a!9@d>b`|n`pc2^1x?3UnN9tEf(TRQ72!-ZrWWSPRMDN@Z&2;Sn zDUom3Rmn)LZbAoe95}dno4?Yl8~yO&<>QE*IXn$D78ie|j=Mx5ssUKKOc0vFD>J-{ zR5`;WySz$50tGqJ$L#bP;LjJOLIg?@BuOYr2cS0)rQD1<+spE}U-&oC=hzvqPBEuK`u}vtCc<4vfbjB1#+FLSaVEurD@D-=)!gCTm zE07WTAyADysv!z8dxSwA3_d9aUegn-+`$?X zOiUHRgUPbe&`Fz?lSg%m}}7hiAK8$vLKw^q4dA9IX=ZtHOR*g>A0ZpPItN&^xo0B`_*8 z!^+`udO2lwLKmZ{weFp7wlKKA=58{jOOL-x6grpHSeLK<79?G0Gyt1No;PN_z#*_k zK1d2N74yR@lcU=F#%@^!wp%V^WhZx1GS)Gza`f#qBbnYzdVK*Cj#fa;y~gL1A8wjf z7mzJBDsppgs02BO`%o$K_jN)%;834EI^n=Z2~&wqWP-gkQ1Fk`a6?srcw>qmvsn^o zjRmV`^j<(>i!nGE__Y%YUT>w>-*2QX?RsTpbDt+!ok)b77nIf!IiSYobUgofc42pe zPI|W$QA_aMmrtG&i<(LuI*l!WokUx>2bF^)v3|Rav<_tt+=HT+s#mWm9-sPfyb=)= zFMRYZJ6aQs-O706D_I*l_#ns71UysebCvwQPO3pBouwXYtZ99tHaCf{fwLb!*)AC* z2L@Y4G<7e`lJj6z~Sj$o+LKtkXL?k3i-lqp;qv-YY!Pa?vwc% z!KnDSYxX>M(P6w1I1di^l~GA`E+w21HGMc)#&3SF(25|M`-%nQc@iB=HmL?sJiR`S zB8X-3A>;v;o6Hp7$n&?Gk9kBhC*iF)G~gn z58pc+Jm1hQhS{}E2aHxR>F)%)#xiIvzQn&~54B$itsipsR8%8bw)nQUNKe7upkKN* zWUP@e6+KxDe$$oVGJ-OyIzK+nK3sb43a?;0j{|M10Q(KhHXR%{)R)#-M2{L)7ok40 zp~!%6Mzk)z?FX!mNML|?oC$n=Iv-LJnNK~r7mnp#Jc%i1-D`f{fKJxU7r{rVkiKL) z-Egih$0J!VdCJ7kf+_a9;Gqc53i`DIP}8+xGv$WkfL(oZSTE#^V^fSx)bMQ9xh&NclYYh= ztb!%{5<5aW)-P6=(!r;MvAkq9Un*&2L(}Z$Q72GOTNt{s`~5StT%*q?2d|kQikK)e zm)$25F*Wbe^y$rZ@CIw_neqs;DU;1os2TkEmBioOCbr|VlvL4SyJ!cS9sypWVNU>SI7#$~@4Am2YV zVb_IN04Q1S`3$ID};uI!Youe~ZUf8at8cbHZ`PJYEhcx*?F{`e<)`3CS1(V(qgt0vbm@rKr zBHIcUBP>jWyM((_c<`&%8;2lQdqS{;HKQ3HY`+^HHBC!VzjC{P6IISTSFnLg=BzUO zEzaPbhe-!&|9YVyA|{GS+HKPLzPyM98le<)G?Y`FhaqGD!c|DTnp)YYvQ>(IP1wXAE z+cm>QW32vg+0b}XdAoZkGI9+#Np_DeO+_~HX&*lLv`&A}(-qcDD!;1ukVCW0lcRd} zF;~x*`<;aOdLVh@w79t1`E0S)E8Xx5=ajLm@+fD2)t0MFXWv())w_z0`ay=BT8haaFCKi}RY2SS&B)?Y;U1-?TG_vN0m60VC?qK75JEeWu zH5rDs#rc)d^`NyKf=&-nm`gf5rF28Im>G^9jEMg3Jk@79tw)>ZE{4`bTQ=U=PN$a@ zhaeD&6CO^!siAG52}jfmqx9D2ZbRMdF88Ce_t$z`QI9CCO@Q)*wojA1!ki36=6>w2V=1`{#)n;FP}ZSSnKWxtdB@sW}^O@r@k(Y*s@a z;?gprr0Ip@ECNn7!(DO?_~S)sn8{q%jmV%=_Ace&BEw!3la4PD#vh)sGS4_V?D+O zt&lb3oQ;%s;9F?^eM`48LXG%)(bV$WeF_U!??rZ0_P$r$rH3C*REIknjJU1HE!7!U zHM>9Lb$?JzFfB)gc){IQR$D#&XctRbZ!9OR{7O@>E6y(Ba!L-YZCSe|y*#>fwl|?b zGr^tb!$SVUU_ZG~T;&o^LaAF}O0w4Fm*#aJ>y|-&6miYC_u3*5CQ+&;zPf=YP}7Sh zx9{_k+weBgj&xFAHN?fOWs7;bB?N6tS!dY8q^^@fwp)iv(Gn~ty-$s&__7gJIaqF= z2^z0gRNY;~qqR@N3I})Zmr&2cc6trR6PA1dA$%=qW-B~?^l^Qz7AB4Vg)9Zsz81&Y zuKk-s3mJsOIRAy5E8C8^!8${o(ADO9DnilNj)=fIj!b_kmD##EE@ zyM`v2?IjU>z!%82?DC&jrQg6g^wzD!iQeM)Udeba5=CzGXd;9b(n76RouZdA-N@Io z=D1j$cb$L;wH0SRe{^kf8icSc?eq?sK*r;0?Z{;BySL6R!O0_EW2RTndu^wp+XeUp zLC6paV87upbUO^OSWo+l0ef;P;b}f3DCB5opU(8#4sgVsNnP+*Zc&}DJFW{hJ8YV1 zvy?r}<}uHEGxl{AD_pAvZS)Bk@-|=PC_mTz24{7eDXR;TK9MSZKtU@1H94d^k!B*l9?(gc(ij2k5uNKR{gTh_dCQ#wQY~eVu~t z64yaii;Au4U0od5qK4<02PrS8t%yZdq^NI12cDbA`crquDZINlQzF)B*IMnL4(tt< z>|4R?OR!m`5#7g@k&{`1^~%vW%*WntiwIwGs}hP1H-T~?=UJUCN%}BTGfViY)a~ez zm4oKxh-5AdLD7!Q49MKy_#=2q7@>+sNLq$z=sWvhe_0=#T;;*i8$KYTs-i@Fqt%1K*2S>U8wVDHl4T2TTd$+qOE5r)&|$atJb0xUqe;N>zEJZLs7! zSv1_jDPvQEd0jC4Jryy1hF^d0Og>y_fI40L!8q4a_y%v8^<7_&6KLgV&CPt7P+EQ7 zElp08^!&A(=N7q^&qcZqv#L)jYckrJ)^4q+R8sGgm^&Bfij+ZJL+N6WUUn5{d? z;Ofi8MR1u=2WFbVxn!&@#9{5KM-HjWK-o$_+g4}J%ivV&4y!I_mQfpO~bzkX)Vc*#dx+VAiebe0cn>0fL)|j3= zYmV`Y^?ob217(YR`!vZtfoeMk*+_7_2FF;_@0^H7vSByN{ zGyY3=x;HxW57D9SYft9Lq_QL^UV~_)51;HZ)AGQ2X|>|vtKaw>HU59CT?bTD#~O~Y zH?U$X(G^X^0^9C31Vlj;={QaJVqlnE%mi#ZRe^?{w-T&2#oT7TkM=w6M`Z?;dTp$u3o-y1(9{ z{!@E}vX~tEM`V?z$@*Rxe=)hyD!bv8=7H;<_^$NME>-LM+{#t2nEZTUX)o`}%tUv` z$O8@wc3xii{m3`HeK%^i)YCroT~ZvivrqHXlf%FHWlC5^Roi*TS6}YZ*FiD(*2H0T zD?Z(@{KuswF9Q{wHV?VdW&E$lvI2Fbjytv&neselBya6oy~bavF9~lnMzXMUd3F7; z($wFKUG6=exBG3<%gmR(;ZE1M1J{a&Y4WbehG8F+q-tN_P;Y8ImGX6{4mV* z)#cLLThC@_2hO_k#2EbQ*nml+gGW!TYH)Amr19zFANbr_@(6UKUe;$*@rBjUoXSVFDQkUmVz;2*uDOkJTD|n2 zhJB8nRkVKQ^HZ-~rhPd0!}at};vKki<~#Qtf6hBjX~KI^9i?UtR0YEjZF{^^*T%i`Tt zBi1BngB-HARSgNhx>;59O5NR5Vb|lt&~@6;Ra>^%nXc{LJZH?CwiUgr>xz6UiLG4! zpT^*LrvDwwBBJ}F)Ldqm>3ulN^g*-xk$$Gu@)mnuMXk?VJLmhp<=czH&1>qlN=ON? zxB5*Bp6WfU@jv%pR9)V>B%s5Q#&*_-i^`{N|9$aDd#UA~`UQ=@H8hf2UoUy?q75=v z_%^60JG1|sHDPI?cIUXK;~w3K&&YNe{BjJHXexPh+P+2dGq2!`Z{HSQzuv0B`2*Jb zQ)XQmu%q>mOM86vmH@2=>K5bS}R8h$IDp|*3`I^XdDzL6R)x|^Y)T`~`q=wXe z&Gx8~U)xs=p#Ja(81u>CK~q9<4rN*{Pk7sWIVJP2qYBoX(-csH+B>?uX{{dO)3(ov z7C)^o3N-Cs*T=DA$HxwPj`-dE>-L`!dwco!PP|cccS=fOJ#+4eEoYvu{M;hl^ZlX* zx@pBXyLgtjbeNy|*ND{JFLs}J^Q_tGswX#=RL);{{<-qgDrFRbj>{AcD>|STE&lUv+dgW zU)~qp+wYXozqmpFlV|4D%b1kl^~ntXK3!M3=SP;7JYVqHs-LAJ>e*FW4qlwF|LFAW zk(LQd7FMjylK=H%aNCe}6FV2Im{?)A>*1s8`%mWEt0(1MzyD*ym&UxNbDBy^>c_+! zTJcqK^V4n%NBul^Zt4no?vA2Hu$8ItYF$9Y(IWr!)k7jnmbIRF*XPcI(9FZfGY%Ga zIe%xP&&HB){kkm<0e=_yB%GD!w8~!d>8p+3PTtvg*Sv!H+n&W#oawM_`>p;*J$H_~ zumAPv;rRtyspIW$+RNh|ADW|j4;>O|AGFHu$a?!>ue9ZXXGRTeeL690)UvUs4G~`t z?&|G%AhV=FljVmtD}MOT_Zg;z>sCc9xVq6%)v4%6_L;M(HwVmkEzNi8QdX(mdg4$_ z*u{g-LP95XJ>=VFQ1N94uS@HoiYw;a?PPT9N=6v4Xk^LS%YwG)3 z(pMr80K=fzKKX11snU?!d707yX9R!!`59vY--7}4px5;1^*a1N{+5(rpXYv2+V+#M zKmBdnGT2n^E{8#BG6@EW!e_AtrO72qI;OB*v6YUv{URtj0Rc9_;agZqM3i8?)oQS$ zz$TO$3PFj2O*S<&FH@4q5@y!N7$ks*#Jq|wudIPxk^0Ca2>b*W3dQ=!B?{bPr~@Sd z->T**FvsE#7iW`hnk7COFkO7TywJUpu>jlxMdE3tShXtNqR(PK#3gcs$(0WiAOXq? zwKPzIk5Gl`Q{oK>e+uQr|8ViOovfNL^B2EggWDVoT0d+~(KnxVYBSlPNBxrreV5M} z*J^o}Q|EeS-T7{2>HKy*k6+mDo7!Sfddt$CKa6`|-=bc_kQSQrOuak3fTAk^=rVsa9o7o|J#9H&MGS{!p zT>P~ACe!L8Q`aW{GGfDxij^0hW~y3$J=){&+q0|NY71Wbw${(B{%DrJTV!gV{nJYI zk&)E(KK~R3G|0`!8TIh_;GZl1nKGvDlIbna=iUtMxGp*A_M)nb-iEPron%(8lN-OP zQ+|E)CK0zn%CqU6QI&$8M+pQlGtih#RUf9Jy#9V4hqRe;f|}zHIc-FTW-T`~S@D%; z&dlTsYx;++JKr(6aDhJCG@vrd`|UD^ZOQF!teRV0Z~vT>(hVK!YaCDXt@P=Czudg% z;Lg0XI>*NC=smAF+{B(gWa)zQw`R074j9xav8>dt{M6n*7RUGRHZm5ox?i84+V<|Ddm%OEy>gV8^2be^6tsR|ZuzA+ht$c> z|L(ddu+``m9XCEI?eR9Jd9?0+FR#w`x=ZpW?|ZcPk4mT6g&Fm7G$*b&KI(C}d_!5! zvq?^8FE?~7-uHLF+BdsGzp?i$4tp|aX=C+~%EFaj*17%V#~nZad1Re)rtiu+`&Nkv zTf^P4!T>yJaIC_@C^jh|;Q{Ir z9Ru-(8chwpnMP~dP{a0r?v{lb&Je#iJ~6D|Jrbw_niY~1XGLBcF92L6hrL~RBMh4v z?!jzL?;x)piHyhxbTBQYDaY87Xihf^}!4|_f37Uha^}|$Y99LUy2wqXE z5Y)!)pK2P&HB5l3V``%-CrMf#TGDl4;x9DPpyNGFJ;{N?5H>YUQXO5KYp$AxTjYsA>^`902k(fJnjjTV%vSo3*LqeImfdMDJ)M zM(~bUh3!xvXAS5X!5I`_tNko)Wz!B6cWl#xMSE5nX=0^-K zB#zL$kfaDN2uP(CUesz8;Du-fyod%>EonHz3yCP07aj3wh8K(x`fv59f)zu8smThf zTG6noCGDrZnIBdY4O!w6AR!guvjBRm4vOchLo}xH>m!yzdlC@{(`sQx1TOzQOwhFwIWP^6 zPBO(LI;R=4**%(A+Yvm844`EAZO1MtsFv@yMEf)sxB?WrY5PPtk93bm+b4O<*eAP_ zK_DaImO>&7U0iG~U6(GkL>Wb;OnB7SVcKBT=oet8S z(4%a+`L}{lD*yopkf@Atk`&VuIU`jIhkz&sM}mZddYx$SMKPM=LnP|Z zERm!LOQM5%F`=p8D2z%ASigLgiUwoMD3)4H;4`L(x0wW51UshDDd?jYtPYNrxX^tt zlPIV$dLdRp8xcn>_H9%J=V4Gz>?{g|K z4Jb8mwh9gqL&W4b74*_#UL`PGA}}l<79+GF%Vi|iG7=(b5eab*m(?O8I85cD0t9j> zkjJ@b0Hzy+t*3@H(n~O`;oydp&#=bsvOd_P55KvKlP_xADb*3VL6CjK+u*nEKc*C0ZXGl99QVljdveB#0)j-}E;41@!oLUTv82$%=xbRe@sj;I~5#AK@p<|` zEvbjL0$X>)NQpeJkrIi&jFd=PL`vjjU@g+2@CHITaLDs0(Qu3q_BdUHTu!<%nkhL6 zk00t$VvZdsPfc&hPZB(-i=7uY-4==HmaEvy zEOI!Q%MJiu7K7euvPhhuaG0@$bAbvM85RtF0yl4X!yO|MCvR8yQUM%%IB%(-WRzkU z&J$pYedlA2#JDkA`1~*&vYy7_9nOy;YBz6_y@t#l$ZH{1NjEjJ;dGOjvnJ zG*~6khInI&yW{;`dmSalSa-)LRe&tO>}42h9Gq=2gk=YY$7CnQ=wcoFdAMb|W+t0q z>QyhvOioHkbIo*j)W@2l4X*GTk)@6joW%V@RRqbW0L0GB!qPNHQd&I~1faJq`TTaGq=?xl__ya4TG5Ov%zr zy%}=KI5`6X-k&!)nUg&{IR5?ltx|Km?F}Y+EAlZ-KXq%J8m#Z78^?~I}E9Bt{g)1d<1z%<2Mq9DgloLyZ|&tkk}p(JXR>4enhU20gMC|1>MR5#|;~ zi2^qsE!#3;r)6K$i2)J`Y7bI}KlqKr$pFK0R?m?M>TCkb^KwlS8Tpf_RVsjTj%!ZS zC`yi2DAAuJh0xUK!;V8!sAcHR6%I`)1E2>!4L}71G&OvN@$ zaAObpz~<3(g7V~)TEGh+DWD-2=Uq4mf{ycZXaHD&4({`4@L9{FDJUJ9$Km7y8k%?H z&?qHbsK%oy)KD>>rh@UBfCjhI322nCJQd7M3-SR(1&^kbsnDH89RA>@F+qFbV?!Vp z82Ae0tk5aY3L>{W9RR5dXn;B+py>oOr4p`d;^hNt5w?S((DxUoUL}ZBNYf&aI&MC= zV2banfQBN_hY~P9gzu^m!~?H9tsuTA)iShT#>ofYjOZpR4h=$%!0zGZI)op=$wz^b z1T>{qU@vf!p@3(gp=Bd(d6W!IsB&l^7C}6PEA|9B2Z(e*YyxcvY=}}(0{v1jL&nz; zphBTFat<$)N{i;8c{Clu%iz-BT0Fkp15yj>k$L%)!nUa?w64g@2dMl48muM=Xd*Jz zfP(q?;My@kI{@}yz_W%z7l(0q(FprSSg=H2pS*lpp^h{A|_Pb*jO?Vi#q&=L(V zA6SflhI(>-J^=L+(6oY>NWq~@LECh4p*=%a!H*jdNrbkmQwjPlFjGMsf>12*RTcE- z{PwEg5=TCNDj0q9bp+vA>O+i%pB|-?8HoZux9qA4#w87 zu-xAnEH)-?1{QX17MA}r!^{Lk2Kg_?!NAGE&H8`mn7?x@u-`G_|5S9?;{(u$Ik;FE zI9Rwj*#0jS*8j5xhK+-hfs2ikg*AQ#6XbgoIsr2a12-EJ*LT_fE{gekiT@)EBao5GOG^$9I;CnCQE4aB&f{aQ_Df8?)a3c?c{_KoTN!Fg8w3 zpaO(EppdMnJdW5uQAAL+eAA^CiUYNdl#=`Adim+RP;F7tmyh+@b4!Y1-oRn_Rs0NX z61dImQ=1qcgQuAo)#Q~l0F%D^*thgEi?D5jRiWFBhdYf+a>5u9zPwDbT2qR&3 ztrknHKj>0h2~)Z|`%(J#nv%Ew`qEi&m)7v@Y$8|;;ju~nMgC4fmDZK-@!oPd5k1*i z$4hbgXQCqBl*Y}dq4y%?pw1zkmK#X-q@+CePu%_`rJe#aBw*MwHQ{!8X1FTP@z=vM zKx-U?iw+jgDnmJrdNG7Tp{{G`;?%IF>HLNMuV&tbE9O7x{ez9sea||b_dOp4nCAhF zT!<5p#9wU>jemq9O4t^56Vcsn5rcWUK{iRlSm()|@e_YyCE{3uc>k~yqMadZ9He$k zJ{mD2o)`|A=BI)n$OSj+W$!dK(%y)Gm#gOPG<766CT=})OoqsTLiTm`9OcM$G?;Tj z%#KA_9u?@m$=nEXedn={If<^zI9y(=iCB-2o^5@Ow%1Mi_kv~a`HbI1_yv}9g3SmF z2t@;70TL5ofU|P4u>$j;1OXZ_t}2Jk_EeKFngvgB%2T~A<*N9|3`nX&l==E`WyFnU zG!SbP1alMwKnl5xyh&Gol?yx3 zZXj$-8dxz9*$7Cz=Ak=0n+v#zlb<#)US{^_Z`-0P4J0HaVLAEgYiQGo=UKeF(@>0l zM1*J`?;IZ?af-OnQyYyONjVc+abrgqrs&~YyT{>oEOT>k`9y^DS|5xum<(E-2Tdof zuI>;0srfC3x2&tw5P(@5IJmi2uh%GH;o^`P;UnqI01w&?4C21oORKtBDKWI*$;@J{ z;dV3u5v(uKf3nE0;Nh;pf;iYFAoP;ln#GBxw3K~muRKJ2ad(a^nt3@yRBg-Nne zsT2riq3I>(eZ?WGCvG!zBVe1RndwUGCcZ~R7GJ|?<&IpLSb*OTqmv51`!;$%a!R`W z+W)21gKui?3}HuWn+yrN&4Z=qG;c1={QFS&1F;3paYJDR*CB_5Zw3)NvV(&Rw!Z0O z)KZ0<20f%@dIPRo!a54=WndVZVgq72|8C#aJ2lasUYz~XF1saWEAM5HZ{*sM6|p=tGs;bJpti5nk;gEjrY zCtFW4AnjRWjVWnKVtNysYV-{r$2catBfh#4n}Gs6sw-W(o2UL2o?$o%*o@!#@1=Nx=F+B=PDWh0|kM~qX3jt;9g#1+6|AY z&D0x<-I1yjyv6Sa#cK9y7)K92{Ux3deLbxr3Uc^B2_pW0U_zJxZ`c80Vi}We=7@rv z-S=zS6ae5)&9yIZltq&;CRIeu2%9}p+5ccRA~u&gk8Bw|h2p%?3-RNZb3-ui6V_y^ z5;{rnAuDbcf&QTf-wCG+GABmH21+G3@d4Q)J+Hml?4f)VUl~#A&Fj zm=XCX4Hx9(Ca52b?HAOn!O9mTW^iDJApf*9Nzozo2|v^@JN?<=$R$?p;fKV=(>Wz| zOAY|}6KP`z=QVM@$M=NP=JI9q{*}yy(BU6!#4iV`-bgxf3|Lv6JQCcQ8o|BsA8X_VhPjK`)inMqd=$Bmv-@$BX8t|L91&1Zw7g!90N6aT-^Q_fBY!7a{e3pQ9 zhu%vIVmanW>RP282eM9FDD`=t5w(z~mJfzfd5}j2CuOQVI+@+>Sb~JYMthO@EhB(S z%l=Jiv7Abc$PO(-{)BFz^MQ`c5_Rc9h)P+?r}$YveQf;*8B%e#)E9>48j>L(7%7(w zHXj7i@I`!wpvRa%HYTM`=_L%X$@}23QO=o$qA2gc zpBQQJ5QAwT%ILe`X9e$3QGSSRRRrLP?_S@~*)?NRW#`SbY+&?AQr0M6+>>=K`7m+x zg7379eZdt?VDc|BK>yfW?cq_65T&Ob^oo;KNUcRWU3&%Rw&6^$pDx8P5_{y2gnW2O zOU7ipQr0d+l+{niBD2i1fF~mTI>)>t*iI=HjjQt$jk z0UiIdV1cA}r+@YdRU=JflnW5o0qDTqZAE0mGUE0-P9&x3>7A1?#6|q4<68BhD9yT* zDBW$W7ZvFY|EU%O+W?ocyo7p5h0!11f7Q&;*)+P&A1r(0heMAp!&5;}x>>G@d#kL{ zl#3D~7)23g&uF3t$!LW-7YSq)Yo)SDNshLc#O0qWs_^i3YU;155(AW-fPhccVcrzA z>5Ngt%Bpid6Fe1H52czii-lkI5m76DkxELBq9Y8+qVY_W)g~JHu8!6JgKKNu9_Bzr zxY0~QNc$9#w(p>?_|{g-=)5;?f09j+ z!gi1FFi^>`SSZNJs%FgG5*C}wnjormGdjxK9!^ugh zHw|D^53JSIWXxhKE~klqqX+*9I>o56OI+Gq-dpqv4&N!U;Dh%E(QvoqQ602mHg!VJ zn@0gJUOt5ZYlg1vhdxt`4SyTsFCpx{uM*WBa__q74gv@@Rdsr?8panWi6=?fsdk9T zN7R!EGSF10((D!75XKLw2G+y5gcPX)l6F}-N;aa~*JYDo@%6RNEv+2Aaa2t}H>NGS za(U6&Ko}~zjYcl%TyC6L;u%I{FvmCUAj^Hagl0*d;SXM|S^^)Cp^ow2H58k|_N@6$ zNo2)VJ^-YyH+R4EvWCeS7Ruz3pxzBH0B6tTzZ8L=zuOPw|;mpV?#%}OS zHww#!ha@Te1{r_c(%$vpCn!K-3$Ha%H^Cxk_Tpn|!hH@B+x_CRE}09AfF@BI*e+G@ zQ#>FoFTXQ`Zi7fTKk(*GPRT68$fI68igl_zI|d|!3O7bo3EuQLYwFOJ&|!&8zwZA% zYg<@zLS;R`iF6HDbx={u6&OB^gmVuPJ73hszBSicgbDU~sxF08C{L0+y3sG2%1#J0gNrG$D!zbw6I z3l9(|bmwN5U$}HtU8%rX^|LtWr-FuHEp2n!is*x>Mk112KbQQ~fI0`khkxPAXGT>t zZocTYgmXTtWH2{QD=j%>tshX)9UiEv6und8arFqb@_g>Mi&d0&R4oeKedC#Jefaf* ze`Pkm*B+VR42+u2`RTa^>|l?&#^DDq%K_lk5)`B%WrNs2zdIx)F|zJCs>NR9m%z&C zo24iDD;-Yuh@4I@go4~x)7h9;Cbz*dCGtidjv0xEuzo^_s3&NY;dWY&d$M}f(w=An zOPOt~o?eL?PFKp>`P#!jCUKm`^U>OrQLN>G2_;E4TnuG<6*Xf=#1|nn$ah`6s{+6h zbEuS-Wn4aaXKgTFfF)(SzdSbO-!_Qk%x>5{jfce3h!@J4Kf4DK*XLpVrRB z_2&-~{(=E%Q6O+%s3%}V^&d^I5jMsq|A>34sEv}fQ}R$l81cKvNcyEL{Rk=5W=^OF zY0dU{5Yx%WFyJy1cyJiba2N^1%02fgW!*HDC@kS=Dl<) z6-y_m#iS=7vVyAL5aHa1PC4E4CR8^q0_Fn3>xgm+dg_ALlywQ=E{qNr@4dBk&etZj zD~9Cd2yrWhjzrHo!X#o`9k$-G-+uMkUqmMz%pb@y8vt2{2N2*y=k&U&;g$es@G@n6 zs{YlC2Zv;NrevEdyOvkByl!-`d?3Y-oVpU-2Hrm*gBXGLOY|Fotaf)UJH-YR;L$?x z5ZjOI=rL1ZOnoc|cmuJ!R>UBINT0BQ(nQ4Je}Z@Jlk-WTVODcey7Y1D}uZQmM4%~)=sE3e~WVr-3#BRn2zc_di=^{l)3FXkJ z5;C*E1a!?0871yBpTdj_HYr=xf+i8eUhF7cCdr89k}9{Ll4kO&8C$u5RD*3bzA$9T z;<<1H`YISonc6XisK30R(oG#iR$csWvj#XIWlE@oeq7wLeHvua*&HI{#IL=_ z*)~<@l^B#7#=06N#YmU-Re0qLXCrqzi)kGjwkN-2x8e#Rft%|G)kW&KZA(%JIVU(uY3pC{)7G7 z$6@^+*uU)+*6#uiVzzG+hV^?87ctwnEyl|IAMEU$#BAT<|LK1>=Ko;l{;&2w*mXI+ zgWnF$w=~yxA=`g&vVHg1|AYP81p1!)8xHR8-glUj_}jlCX8WFjieUKYT9%NDV;>#?Hb0ZSDvF5@j6rn9xI>KVYXpBN$Q#9Lie3PFhYPswNOy2ok%lKHXyHPZHNU8;I$? z4u>lq%O}O?jv7;XJNRt6bZufSNhfzK>n5Re(RkSXYR>Aam%_dXp!O3!n540jaWMxP ztuXfbZL?urhM78PE{cb2kM#cq5YkNk1nsUuCEtH8nzkt@`!;-v)Pr`g>l|tAT&NoP zQyU2Rhp)72kE=Q`yZ2jO{>;Uc>}~f#zOSwBYYs%^k}Z&`Lb4-80$m7H6Tp)cx8Nh8 z$Q8*^6wzfA$-}gNI^d~FdzGds>%)tA$&{iq%O+1T!G$H1wgrHKQBpDk4C~S112ged z^M314p)A1r8bgGP?nzL|QuHtt_#{J;3k}Q)DHCFop^zv9Qe}$-gcsz1qd?_M>O@{33Iq;)8;5M}+)t+A!_`lv%S4gJ|R7AX9&^e`TP66;FkOh~i*_tAPal zdWMG&v_=J6EF{>A2yWpC#@-b2qRie_|3J4NpWk}Q*v`3Kx1#m7*|dU};KQc}#7Gx7 zTt^n$`>MYLr%c>*-<{dL6J@BXH2wGE1BO9if^+<5o900Y0J5~8Jkiyb<#jnaKpFnx zJhNV${P{_hEBZ@uhN#d(7y(=u?v$kKnSParcU=efl*G=4dg`e!!4Zx#~9y;$i2V87AA`y^w!*;h*Ih89K{MZ0$(D zQKJ8T@wf(`&mxIPwEy13;~9%Syt?Yu;bWyTx4G%d-8mV!8E9N(uCuz`%`=Lqc?6_$ z{q7rZLK{}dd{{fH-C2HH^tSWzl@)a~+_PZ?qV^l_p#eHKH?mz^JTj;nnOR+0)_Y_y zE$pKQ!K5qkjhV*Z&S#DnMZy-4u5ji|@ZUfi!ls3Rv&&@55&HRy)@yD*QtS)#L|RJL z$(EgEHuE>Nt}L>ne6PT5sK&$Gd}juPRxj!;3Nl8MFdHdaNmOw2)<%K??#aDh@}PI_=N+IF+<{=ru%!H7vbk zl@32~A=EqP3pCrU%mfE8&C+s1Wi1#h#guYQQYMmuL;A<|t}F)a(ilveY*uB8Q-vke z=7w#_g^0u%!Wn8?K!-HroFBsv6Ryq3%?JRysFimiJ-oqRI-hPNDJAR3pNX(-6BM~Z zsCXTo%FC4$e_*SEd#(neEKDJ2)VR~(gZ@-3mN&gH6sdjw4IGB!Rtb*8fE5mH7OlB( z1>4-PEGZ9-VaugAgRIVx&+nkwiNsIVd!8*3>~YM-H@8d+o|4c4j(5TA1fO> zs7A)R+K$%hucGK3Mft@<2)YNdcLW4L`$sHN_db4JthF;tmvj}edRR>az@b9C5G})O zBmYTR1Vz784w}*k$wIo)x4QoNpySlr8(_h`_;_*P(sb(W>TDUR^V_T6Z&_`LA@|r} zt`{B|919sUdbE_?i4=GD-v0*#sNxSuu>9(5MeRayl*tegaj*W^+*q3ciTikfH<5uE z$?)?1Iyx~JWB^34W)i8|k>h3Wj+bN)ChPq|s(2j$=?#)|x##c+bN!M75Sor% zhf+P_u>G{1Yu%e+$-R^2mSYRBWKHju5O#JRn~lu(QEFmMUsw51HDnVA=7Wg;)$V@U zXWUmlRx~LtR+2B>89VMH*NF$t5kTVp9BR|^4>Ia?S?{-_r0WnYA6u@e0$G|dRx=T* z|4)o{b2iNyF+Y$|sW^U!?gpCaWkOj<9v;-G-JC0rD?5rL%ryOQdkP{zR zkEEn;63RE$u97AlVt@Pn#0PmjrU0ELeUB8l{^=F5hj@x;?&z@a`e z_DMC!Jx$d!dT(^DS*~cpQSM`_*FD~OPvt-2@GJA@)XmrB(KW{}I5uq6BV@_k6>S^M zu=WnkFrdLIqUOrMIBYlZ6D1AXSmHMdC4T$FK^+kv3T(pQDsK?!Lp@hFr2fnQVIuBS zjd?b08By|XTl7&1*g*z(-#4&kD`Ae6K<|)wBFVm8ZWzK&>bE2zer;|H7jUV}K?UzK zv;*xcx8*M1^teC)j!19+-0ktw*Joy4!`k?6+Q$%u-C0DGH<}FL;X2p*uOSOo+Ps6R z@uBhv!*E_oo zS#rA)8}0VeP=PeVOGrH-IIPwH`VX?QrF>GNA9(9Kw-}X%_l7n~cLiS6e;jL|Y+A$Y zT_Po~3NAQ*_H7@DV;uio6xvh3| zAI7WIkuBAeQ;?X*v=TRR6|-dYF#LJm#B6YiGMqcEOZkDg#Rs!-#zLDv9?_oL<_aB? zwV8lfqf8N}TAZ4&KWpSwH5iJjLz1SZPj1)epm+KOC?>U$a7D0U#ymdU6E9FUCXQ#} zZr82Dkf`Vf#u^;cRzZB9;52rGTTQ^RQi_ZOTP>%+)fy-T=+E4@L=hFGOR~6XL!6b- z=dC#0yMTj>2v&^8&0zw(668)dV@lSE(=BH(ONUzRUq1i~)FY6j@)ryZyy4AygTt|~ zzja{%`u_WvZ$tJlB*HC))tWzlocjy@8|t=lBzw?BZ`+M_-0?a!AH8HmMqeyg=$iR< zqZxmPG2BL7Z=LsA_X=xR-yRzdceqk61j|=Xk{F8yd@8Ndw~VMii5E$pl3pv6%Kc@f zQa>+1%S()G`eU*8;&kYAsCLLJJqD~WhMC9)AOqw4(c{89dO76`3s*ngkt&kXMyHjb zT}EtUGK*aYj9Rx%pA#rbDOA*Y6HgJgFe89ecc=qg}BV9r?Wr zP+>3k4i*E1iK;XlR^*TB=lV0K+Le&0wKA?t(wq*g4Uc_oCHc;3T=CSlK16 zDo#xJF}g?$OK7s|vfX$h2&MiGkE$FiaTps|=-8ueX{HC89up6d8NBmql|*&(CFy;N zy8k?OKT3Q4NG`6{m!V2xX&alciw9o>R1IoWB5Wi7GVVBZPD`wJ^2(h}*Ug$p3@{oA zS{Zqxs+vdmgDl&VEZ~jj`1*!~vGDVdwbQcL#(M3&ir1iGVYFJDS)~j8{n4w$RUx}C zMNOaSqArGBoeG0Sw`d_Fk*paTlF6G(`rfo^w*&(+$rTby2lvIZ(>9IicaiT4py9o; zV0=8|{n{l@U%x`IXK)NJP02PI3ffn) z+Uk7@uruk%bZGs`9{f7c@rDmh*IfMOnHIj!^e<9gj)r)gZdRQO$IYYkx$4RjPR<#I zP>2!=iju49_U0uJhc)uEN9LwcqqvuNe2`vTBrhJkzn4<1qY?w^p+83&P^<`}sw>Jx z@b6;DYll85sO{ocs4>^Gmf=Ie?#B!}8-e6kl~($RpQ}l~JO+($?|IKLc&epWV+Zbh=iEee&@J4DD*jRb`z}80{gV(g^-{Ps zp#%T^*Nr3Z2}tMq_$508ps$wi=cMT*O)uQIOeCDxIuLH;(#dJf@B{2x%aIS~WLOIL z+`nL@xyMW{vdinA%N4K01BIMu#gkUi>~9f`)O!|oWkFa!g}*D2LaC~elA@tOnJ6Ja zNhXSBIGroVx8Exn=Qz-Xqp6jPPj=&SUv7&TA|~61jb!9*oW4Q~UW)h-F;gY_ZC9xk_e^@S0)XkXeA9(x(%FrrH<{l=V z(6y-t9$y=m@9T3ZZ>CDyFJ^Q^RH7e4n^%>%E`m$IB`And+y zwSc+*h_MKdfXWKVUX2oLo`3)YIG+xq_3sKb*>gR`9_#1jllWa~tGd#jC`!V| z3h1P5Vzi6_<6MG66+9!!(r|6k+C}7%r^@ZE&B-)ZXt2wJ=f(sxaK0x+Gqi5r0rFL| zr{Ovt)@PZ;=6VM3l*-JimX6R_D_H$d=rBg8M#iqDp1Rh`;+0HlqYy}3E1w|EueUX} z{cwS4DX9z{B?y1OSbK)!z_?cQY9ZwJuv8D#SFHsAVBL0t7Z5>_9!D6i*l(!=&(!G3 zq%`$Jfvqc>JZ4#Rq^@kT_X*~biQI!|LU9^v@?Nt6C8ObZ!Vt=NyLGP8If@N@8p@|& zE44l2nF)WD@Jat551EQPtB7hPywHWH2TNFpn^9s}Tu@nYWR+5SA(|$9BIde#=9d%S zNx$d;{&)pycC!&YD1f!OAzQep+zh4b~LTmzQBoUxY+G*CFuCP9M-zXkP z`h3;$JZV3I0c&8BK94&OFb&4OJG?Fpw6O^jnL_Ui$r<27_*_KnXP<{kDkEuBi=Q%= zBa&Z>S(t5~XHTIclMMkzMhF&ZgT6_^c|Xela(7Il-VJ@l^;S{S%a}_uJLFZ%z9+Ys z_}q5j8b4KO4?)YMvK0*Lb_(Z?MmB9OaI1kZ?85jqBatx%z|6*ET*NRR-Ip^7rri}V z``;l;g=oY-smKqQ%PsL4o>nLp&RLZtKyPOeODu-Hn6B%$=`Vb0qq&D2>|%5}?FSzK zvs#6}@pM#L^|GQ&JdpH9{B5~>jcrqN3T->$CeSR_m2VCX7XI|u)JgQjg{AmoIp(Z2 zZU`&may)$=%bC%?gR{@w1;ggEQCB+BBW}Zb^8Or8P`+ANjgrr7R?EL!q{Jzhce!3n z!?M@_Z?HF_jAb$UILL2I=u5vWqDT?~n2DNdnE*!sulsZekkta?*d5MT5=zuK144&Xs1KLxQ)VRT`)pfW7 z9!KCutrt3Vs#MMY#@=I+3IZ+xn8cUaAw6i`fn_&-OvPWeI4{WE2oypfo+#_gV06O1 zl(R;K>kkTGbjfS7Vq#*mPJSRqit0rgc3m*cj9seH+OE2l-a}9`^fQc7IK^isUJS(L zWo7v^@3bLAqIvE3dRCjay!sRwF)WgZeg}sS(~5Q~0;DqT?cGjLYFm_m2C0lP1U@bh zLw#7VqD4GiUcL9WyaHW=noALe%Av^+JS8ROPh97^byi$-bu;0Y{9AqHy1=PAXRq&n zBd4wp!@|SJ{`=oZn)5+sL92iKk(N9SeRh6N{i}dK9qhw!LN5~D?mwh~faQ}*&}NYd zxDx-djQ>ETigg56nx&cr$cxjlrppu&feSi0Izdzr&M8+QXMRW74l#{uK<0 zzQJ%|?v<%q!<))t;d z$*Ti7*piHIF$~M{Kk))UhvqENqZOVaF~d?syg)Aa#PLG9@`q&W)Z&R2zrV!d{Nq&d zS18!Cl+b8Hl#SYG?qWOKo5?}BZb)2d#kodj#aO~c2 zWvt5PArT$aTeG+lfS*W6MlDBvb!{_m>sT(dZ{YOQ0N zbKEFNN{~(zlCd!MPAY4W4C7L`^z){u)8LIem3i5c{n{^MCIgyW|Eg;*ZPqy5*2LDzD z5dtP&f%1ySfFFNT=WWb(hDH~aFd;~)OXC-Jq1s_Hv`1o|2!^YnYkiO`d|9mv3>J!i zVI_{DTf^FUl~4s6Xsqh1MCY7jBdn?vNc0L>8NCIvv6yxADKh@L97D}oO%D6RT;B5J zXZ!41n}O4SCu8=+Y%cKe2Uw0Ng^{+7mk;BalZJHL4M=EG(?T;3-xtW9NK0kNpuJS- zO0xgHB3&!X`W(z>*7K0~f#`yN<_qklk)|P2)OhOMFS?MmsV@96&AJ{bDL&GsXUS!9 z;XrGji<-cRXh~~aW>FXtc?-HFvT*lr;;Ib7WOqg4;~zYTix7P(nBWfwlMa4Y2v%CY7|i17NI(&T8oHckE~y=h zge?+*H{49*?OI0sHxoeNI8(zJmA|?12l8g|oo3wFAe=sF!J+tdzl!5VoT0gJt0iFA zefK$bDF#_b>~qJ*+@JQR&F#v&Hv;B9lo`>C-2vLVB`Qb6|2~PhN@x@*wb^sIBlz-1 zzY1B3z5CBy{W&&K9ifwA3kDx2Hoc!i-zWOsD!J1NvQ}%K$!u%Lw#5xkvq6TFvGi&$;qFL?G}_~2~{-EH4+*CB|7m%V~v5>efM>7P|si>9(k zq!lpB%sKaPaHc=;wD4N?O{kDND|8bMC1mBa8KwHW26y%|{CU>4#P7b4A}}8(V9kI* zp(wy}Eav}xrd9%+#Fl}SkQR|wkONwA^8xK~G=ZPoNdI35mB$xoh>Hr$iw*RLfCp@Pd;LP!Si0_Vvp)CB%dl@Y zx5863MG*yOZfxD_j^69e>&0FWmD3#x-$zzb+$)*Omp8;8#@;L4=K?PPDZt)OU>1+S zku%1h%qOA95t_7g@hd5xP3;`@0RV_L)!ZE17WJn1k3D`L>q3(UpGcyBB=CKPKqztg zCJ3K!r?7}6|uU*3)3l>@Upo0;q8y&~~_6WdTuMod14q5Fg?PP#@qpt6QSl73w+zot-H3 zCKQweWs+W<81Gap5!wRmFfKz&4&Zhz-&ojFL?yaT|Ie!G-hM5XH^Hw|?TWwj0Qk+Om;clxW{K=dIt z%0`G1Qt%CqBFC>;m(f*<(#lwO&TOQmGO`(1$|Kf`>hR4bpMYk+9E+s>gHtEL0d#(L zu7GSSv4`JW!#$Gy5lsNuI&chAg(MTrW#}lT8!2qS{;7wuYm_H1;TX4Q%mKhb@U9X^ zgr-$(6iZ{wbTW0NkkZ1cum8{*Yhy0rCMQo5wpOGmTq{`YCpZ`)<)PQ+FU3=C+l25i zSDUsrGKg-Uu0~g#Zs)Bi_h()+Lhq0P!j}44Ea>HB%N42Fo?$lsO^_?7p^+dbs1H$Z z$~Js=I=JTR96H{WK9l5%!G0(5fw!wA=0K%QwQIJkhAPVAlO-<1Aw*v{Q{Y^szGS5cCDyQL z$!aiS{ZJroN<}lbk+8UunIE}@Y8TtQ64;@_3(GedC~YL9vI&@?kkj^jI$OnE65S8c zSe?CFI@^|Cuf1pEEXouJIqy={au~qkt@a>tpo4)dr(dkZ2(l^DG|#;bPJ~#*qapQ& zdf7V#qiWP1&FIBd+>bCC=$w}5(f`^M4AS9UackPI8F9;u$RYWNijVvd* z_4=|w@VSdYp91i3Wb+%QSS~yhZC30rr=VYRxB!PD9J-h3_a|RG(}jXcv%Oa>hFku2 zJK&8K!wggJaqW)?*DU8A|KX7+lv#32SlW$rJrr%t)Xt(!XaOpF2e%}x#d3|)`KFa@ zDX$6$S46=BM`oC2Q)wfbQw1(3>7%&<&d0zB<$5QsHUKQ!ZDww!nuMo8N_v1tK910} zZ`WtyXIa#mU4H(O6~n@9wUu5%t7!UCk&U%9Q>S2~_d$IT+7^DTx7~dhsZEa8+f6As z<97VJ>gRHi%D(#@4iqX{SS&tQj~)DGv+XfSONRix-P=n3R3@`?|DE7fwEBbp(LAl< zNR=pEJzychI;JF;)4)=7mNIRRW!_hQ-aA&O4Q$zgeXK}uOiTiQ;1U6Kys}W%z@f_3 zy0Uo7uu1Sx6|2H7p(Wvz^j-EG6>r%*Cv(vD5Oz%8tH}0}wx+Vn>H2CC&*Qo;Nrs4B zuY2QRw#e>6I z2P;3{G4WX zsoiAkp+XuERQuO>0EED6bKSr(JYj^_KP54$M-mtKv5r;1DlH;hh( z8=xIg(kUAQtE&?+o-`=ny#NOI0hdr;UBdMn11h_c6kAeTn!;NTm+d9ZHTeNlk1hgr zu+H*wO}0DA9bZtJR-q7$JyS>IHcGNb!Pv!053RxkD#MZ>!za`|*Xbj1sYd7ggqJSk ze42aJwq0rvM7!UQ9?cMK9ZqFaauO53^NL)czVIBgC-$yFfHCqwx>4~-!LILcOWR&(*bOnO0$|2= z5Op?nR&{oDmSrz1Ues-B)^6c%T~oTOL@YyOmoJR{6!z9`AIu6J@uylWvhhgA{1M8g zhJnv8w)p(ApOehj;f2KSS^K^nxy5zA6Xx@9hyaZFljB8I^WYh~LdEdd=EZuH1*quH zUBckKr~KRSIWrrcg5`0kjD^K%3=ka){gJ#S=64z;D=K5$#c^|+sX!GUu0Yx$hK0dOacMuzRW7FHdBCUUTwFswV!AZJx_wBWz2PoRDt z#$P|H^^k&_YmIQ!2IMdN7=VUCwYLvke(tQbXBA{454{9;mOQQZ%nUdZV{Vxf;m(7o z0>5ZZ0R~r`5E+zfy?z)vDoj>HTKoeyda9R9@5}Phi+JRb$FNJE2~sK=gPpn}Es*1Hi(%{iOX&B3{WA zKLyIjbMG?!$Nzj)#-SNyZvmt$Sxl>G}39{k~&7*1(F( zuUyE|dj`+=Bj@Jvd4E^zpLOHBg(3s(Y&M-K)z6wjkxs~*I(-+_xyYaKRnTi^KY!lo za}}&e*Dsq;m|HiC#sjEu&7>$s*%mWxZ&4X9&7QPF`(o-I;fVAJak-d8eKLEOjri5wkhS}W~~V;2Gyk*{nS zKf(s3IpGE|s!YEFnOU8&udx2lQn2de*~OMNYgT($aS06>ZJ*F6ztAvW)Q!dIPMzSa z=`Z&orK~JM^BTY|^We%_?!0dnhK5j`lqGV>JlXA#X59KKz1!!K$4{dU=TDUv=a9{= zX=@7@%yX_cuZVCj$`Ohf$*`^01Ut98fHVK}o$2Xq5b-TnxQXg9|XEAIOd zkJ3z~m!)_Xj-epUgr%fHK`}68cz^uZ0}!j9dLx&&jC=smEUQ;PPV{Ji!`3`yv3_xT z-Row$wY7E3{6IZDmL-FQ*@qUT^X;HQDXs--zb1T?GZk zXUg8TI}(7K59o?=RC8HZUh>WovjKNpZChyuAFCK7_ln5Co>fNWB0WO^K<#jBa14y(e=sq|*!tLe6O&Gu9{ z(qYabO(JfB};% zb=W{yxh~hQgrKz>(Y$m8RC#YZ$7TEeP;*y2&CcdV*UR>~Ik)Z2w);&Fdiss32c!PE z4g{P5I};+qU!IYEzkpU6>GHse)t}9QpE30Lv$@s_Bjz0zF$szS1kQcVTy9u*@Y)$)8D=2m!r*=Q zI<0$!B4CSP9`PESKOk1Ow;UlOQij9UxJ143?`Ln@`niUxDzp11kB=sMtL1G%{-F#O zmea7G&64Wdn7RWYhM(c`IqNW+qQa~E&e zuJOc=iVT-NRmvQ$P&Kjr6KZTOcKeHl%~?Ye%A5J^C<2XAM*{}s%VEb4aE90%eZ)zX z+Jt{Nr?J@PUf97&AxYM~!#NSE{K?b6DE<(lF`()lD4HA3jGH3BAqohnJU?+If-?3< zYEni%kB4`R{*@H5n9pNG_E4szZiZuG+@?g!Vf)Kc+f7ZVdS43G`SS+n(4j$Lm9q`6 zEmER(p&d6bN_;--jDLeacA+W7y} z^%Y=MHP8P7(yeqOt;8+hQld17bax{y-CQZ@Jcy*AfPhL#cS@I_goM&k(h7p`Kj8c7 z_toG3KF@vbJ#%JvXXEV7nVp>vFS#8`yVg~H?j&z>s+pYJ{b=is=Vkk6D!NV;5mdVz zP8p-NBir4r?I@|9V!o)L@1;4+RuMXiyC%-zmZdgwHLmyXF;>@Fe!BUiAn=$wr*nm# z^(k?j8}0hg?u`@egBe}jaea-vTR18O1=Yr|EN<4Q9<|pQujI$r*Ix&h(@zd=#BU65 zlx}QqgxhPAlI=)KBCrNel?Rnl7_>%9w*(!FMfZir$T(8pXecf*2(#thR zfBt(b-8SzV1s=J5FqrV#vsx%8mv=YloQ$Fzdh%n1?Q3DyQG2`XRS}1e9DM1BKr6L~ zUWDs@%|W2o8rGAhPYdt7uJ_x0ssd(CJXEtuMH4h17FeNbH3AA)38wcSGM*hGJz_0O z%LBc9+wC_~WpjsPC)Iq$QGR`HX>Q3y*?kxp-r{Q- zPK)X^9r035;Rbj1V?Gou7IeSgg~-WDo03o$Jc>8Bdiui(6TNdifdA2zqRUY!)=`~f zGfBfy6~p4FFpAeN5wDA5v*wkr^M%nBj}uCJ?v-Up^c#m;JgmlWaSmLeOS+nbZ_*|O zo(>gUx&J^2Pql?p{*$XbBW^?;OUtKIb4T=rXGoJk2R6(yl9;mDd|dQGp*N&#pxn_&(`ij_9-1QZ!r@ z5#l6F^{08WnTD-xa=AghkA2eun9UXY;HN<)zDg;St-vGpLVH&nhS4H|w7-8xu}6UlGjGSg^_x z)ca~OXn-PPB_463#<EyWA9) zJCTk`%q+Xu!gpFj4dZ~a*+Hx$#?h2nKk44{2UDo&?=Mh1;|)2LN}0r8_I8fn8yq`3 zJ>S6T?+SDd!*ZAKkb~V%S#7IzZb;lDQrzR5{2-v*FCNhtk@&_|=CWP-=L2Jlvh6uMo~THU?W{irk2JZ};bmBlugNYQ@Hw5&!4@9fP+`ub|+kgj;7ce~BYb?I~zmsnS4 z<<}(_tOziZj%1*h!M1?RS!6k(eK;M>h9Xyl3y8Wz;z+H zI)?7A6FGcOmIsgaLfQHEq;P|9vck4({; z%R|X{3z|5tUv`vP9~;F3){IBfieoXm_BO?A7X4-V(*o@tp43 zFh~YmzqwPEk>tz%1 zqGvCC*3Ey@IxjW3Mv?c9HBk`-u7!S;@B<2zgUOsqWBe7l8=7o>T7K%+X71}bMe2$A z^gp`?oNCB?%t*7gdcVI0^c*}G2=Jfli2tIiJ0r<1itqUY)3^bc5rdZ>t9MP!>(bq^ zUX)-C|NfL2#c~|%Z*rI(&^(!6sPfr8@`)P-AW2?!N@jI!{fKy9_!C8fktaigzv$XA z3YvD8rPGN~G}~%_r?YdxyJY3L`{!FXK8p&6X?c9UUlm5#p7w20d;)ux0nKP{n}$xN zR%e)k&PV>ah4>b{=cYqM;mC^w1K~s~{$oDQz9|`ov!`C``vQY`Uk*|p>Abvu@-}F9 zWkR9&>ZC`l_dt z*2yqhh*-;T^GF-9Wv*hk1%uOLz(tjn-&u zHrJCZiO;ESL{BPY;re~WQ_ll(Ki5ZcjUiUd@8WFei$>BWFky?SK79YON~2g$v(^&z z{>Zne$aCw+*?bXeAn)nMov-ZAruwrNfb@g*#kX81W)riWPxt*QyEU(dJiHWY ztLWX}G&A;Ot^ZN*=+?4}tp-uvF60CC6l6SclWv4#+Er~bR-uvXgS5!YkSLae8We{J zUYULm9Nh3^T%lf%d9+VO7t=y#F3vx7*ue|k9q1~Q88Y8+oMJqkY}$!RS?JJM&^FFW z)0J;FCZB*CRaPD37Vt0%J#6fAoTu37f$l3!RXN|PLKe%rpB?&pythyvqrbv+!?S1Q z+mNMb-AzuLJc-7P2u`bCn4VY zEuATMGwDf2_81DI+r3{49*WPa(G*03M|MH8PDzn+x4kmrEX@b;H;l@LM$Q z+Eyz6{t-q=ItlN_^2;G{aAjUwk~bKlT|4XUNc;%E5n-pv0S^`}(5q9AFQLA-?QQcr zE!6Lh9=e|hGi#)?Cx>@4&)+IuRX?5lH}I#zOLtTB7) z*|ADiVaX`U>9ZM?m5#-P)8X60BF`^M%o~WN;=*K=hT=$`FKE;n#!?`_W;HaVtFpF!H={+^ywA zp+moG$v%nJJ6EM;L>=v#^wI;zsSgM7y#~8DDsu&spR`iQ(FQ;rc97|r~n3==-+#zY+_H<~`7GO}aA zsUQrTJlt>RA6{@o@#3PSKT=Ay$r&49WA}=u5U^kj3#Q*Map#VZ;knBy*?k{I>S{}` zB3u9TCVM}D7CJX)S=4El-U|-L^5MP2X^mALY)HkMig6pMEGLv=Y26bu{mh{c$ z!lvZgh`-HwTsaX8-lFz8v8><54es-((Lg&pnczJE zTD$Dr+qyhzY6x!jhOoavShitet%$$FTcP$V2z4d6X>#8qMjA;=bcXZr8+AtEgV8*O zIYh8Jff8@wPiZQkGoeF6!VU~__4m{(XUsr^05|9a>`vm=VdUgK{c5;kF!FJ_*GepEfyPr z7SyYD;#xz0_5^yfb!lSj7PnB_mP{KSmUNWK(Vf1KB?2Rq9#)^hwm#OKn9`8eC;}ss z())o%I`@J?-IKidcJTL0KjDaf#M^5;*&}#j4vA}>7GeplC5PmfHbSgf$*RJvsr!`z zt*QDI0)vjX_nA|AOt6CeutxK1Lski%la@mUFx9CQO(ChRxz56-iKOhy?IGVxM727n zOfra6a`x;|kcX}Ju$po4Ndo}%9I9vwNKosxB_z64g_gh+lERJ?Oidts8Dpybfk8fm ziQdImH`IV*e`|s4JN$E4Wx&xerJXlg>4A09W3uDLq7*fes*SjP37i9 zoJs&wX`wzEE^;jxc3{ede@-*GS_hM(#W75j4CTdOCg&?8P}^=L!^+%Q8GIT~hbOP2 z;3DyiT}MvzGHzy2$YomAcg_mcnf(+`)k)mc9_qJtdG6!v5D3o$^kTz-ePqIrdqYgI zw_o9kqFRN5@`)?pf$6uSdssUl;js!N&mP~_K$jxAO!;-gjHH!`&XRVJi9nl;`?3Ue z2;@HOz6pM86N$YtNsw!cBOL$h<kFR_VI=fl|CBJ3 z4uD#S9Vjv-0Rl~_fB_*g@IM=nCPoZ=p~3=GEVuv?vmn60lpM%*<^qPz9s?=={LeE_ z1{PkBgFFZtlppd>szkG!G%zqEqks??@ehiC@d_dZAz&mxkcl5D1SU`b_*}?<$!I#j z+WaOxj33Ms3I)%OLlH<`1XSQWejozDi+~6UAphmY5m{miMRQp$UR#;K5txXW%b>kUxKfE`Goh@aIIZJ{Ldd z!5+b@^LUPGK#wpB1`G}XvazXwmN+7mp%Xp-)uxZeW&8ef4n}E3Vy8`*XjiVtX}ZeR zG6j-7MO@)XAUS)|WmM7}D=5Tqx0fqJORT7dBVqchF@xpDFDB2P%`Xk>K3+%sX>X(!CYQF~=$-^Dqu^XB zLcW40+b4wP1ZQ4;YJQObV^_ITSjpf+ZNpx_MZa|39$Z%2wg{D@!t{{k#-XcchecHTw14jd?k40Z4- z%h1v~wr{ZutXm}?P$if2pRiJ7p`1GqD1YiZ&eN>x-tpIMpzjR@b2#2;Xuld;+UOg{ zNRNILgwN77ZX6KzjOOe?xL*{inNa*BoJgG5<-{?&hm&lUP|8oOqms|?DJwgBYLbx~ z6M=;vewN&QzlF%UTc6B0uXp5TY6z&vKeD~X86Lu0dh#$}H{5YR#;5#6yP-PT9PJj@r?8)Z{}r6+?QD z-Vq7}bB$(}^U8?X4O?|VMZ!@DW;2gA;!^FFD?=b^c@^(3r>3Qt4Z`L+1pLKpo=SU8 z;G1yAm)ffaVQD$u#UNWDR4Ju_TvK__6^q|mxpS{i+B!S;v320H5N{e-Gc#LE+MHU-6k~Y* zsnN0b`Gcq_y!C_R7#o=arfK5WPWN#%MLfP>52cp&_sXI>-QM=ATpi{4B%&ON&6uXo zo3eM+jAW)g>(8DXkWjhIvLG55|YR467!bTo;h%~-T z){C1@O|C$anaB05{}IEetNh&$cv!dVu3zWRP$i(PPyd{Dm`Md+F<3FIF{q=#>#Y5r zgxAK&ItCa1HYgMFMa-H95UwQNT2S>O4RXme^lOqhp5!~;-Yn1M z2=xi=ly4VuwdTv^Nu0V^QUFqdQL4*+D!bzh4AQ!N9d!osUZ}zms;Bivj3wMXd-WcS zr_c;6I;NfFig#mlo@eb(hZ<#@J9!GD8*^|OO0&n5?wxhf9&J`bI-DFQ4!^Q{6{(>; z&Lhd`$cS+?)N=A`d=Tz`&8QU{{py$0=@tCc-sZUhSEFR16jvi2=`hc*oFE=ch&h%j zn*R38{zi#sU@j`FM6ClM7I>gJcb_e1=RM#$wr%1!Frqdwo5!0nn|G?B|6Y8jF|%$bVR*C~d(yy3+`4uet9D8z zxZr6|REfYrEz6TG!5eks_^rvWm4~S>6JJIVG>%e`QXRFT4tOzTzKwI;?27dq;o5le z$xkz%;cdmI{!J!1)#^_@oE$t7FJ`MI-f2xFYf#(YxlaE5(T#GLMVq`XY`tBz47;A3 z-u)%f+?2DU?Ypow79^j<*3{0C3=7}!3jf5Q?wv@}H zQ0ZtaXh1W-@xlkYX<_7D>c}P((?c=v$GWb2 z_oMW`XYnGx;*@_144ey$1)`iAd3stZ1 zaE9I&6=KBqZ{aC$Tyb-*jC|LB^?L)wvTjHFhSCm=W69dWxB z{TcH|KUAr2`^bTTC+#$7xSU|~_g;#}-qGktz^WXH;AoPnB=_?fnW8Vhl$90D^{sP2 zve@U+Ws->L)#unFoH~I^&%%UfpM0NkQf{SUE}*fhsY0P{dK0trSYOtNUOkv@DtN1W z#=>7LO7n$XgaMY?HORjzG<($tX8M6x#4{vjR_xjF7a5gI8l7mT@ROm*kg3boLt~E1 zN9I*uyEafHDdIcilR`C(z>^n84>w2`h_M%(EtqW>gLYKNxjTGK8V=5!I#Oq(usK*i z9gxnSy(PgvtDf!;IG}`3+h0UJ0=`?^q~QnkNC7w)5gG~yRXUge80ncGiQt6`!GSqY zk1Ta#K}QIH0g|qsE335ppz;Vqz`-y?=j=$td0=RMPMWFq$}GK9?K9zA|8GJPA_)L1LZC|E5?7a}h5b=FaED{LXl@yIJ8A*Haw zLQh_Z2Gxc0$|-=6_xf@Ot#z)2@v=w`pHsjwM`WhXS-2yOGG7o0opY^9=>(C4?@kC3BI$PCH zo4m_iNqE*zD?iC_D^2U?a0||56phf)=3!kqY1?~ zb$Hqc#nfYL#e#giz)9ZE&nhDjqc1-2F6MrtoI8ajxWNd?pM31-^xi0m&bA_4c$7?S zXWNOgu;rb?N+GZ_YO(hcj7ak-q(8VBqsbFDslzsO!{C*&vXQovUz+Q9Z@RWf-+*Jn zXEh#f&n}xApOqtHbsVpkQR+8o);F=RbC7(Of^xj%qE3SFb+U-uEFl+5@9`Uk^IBp~ z^qk(rK~-2Y=)5L+z`e)n!4h8~fziMHJp9#L)ZATsL`R?;YlQAfNcsagyyb@bq+z)k zzP$~K_?$_!v% z-Pog#EOJoZJFRs=@@VXhOrO!VU^Hni$Acamv)$A*4hy$4U&*!vk!|SEqhlvVIPi-+ zpF&CZ`x>({u82H{BWMrsl+UF1$Gur(Cn=*1Jdu~2%CQW2T5_kQPgUiE1ttC+JsoX^ z@fOjQs(QSecxEyw@9}3Dnq1#_&V+kU=;{043tgz=V}BKm>00ynU7hUf(Y;Naw^A{% zV(x=WEYSXhjic?r59EZ=1$Au4-a|8Cb}uDS^)|$=$wG{_ZQ1ooDGNDa3&#N)A2)xL zD4{DdN98@3=O_udtsaM3m^NPcwz9px^Xj8cBl76Q&#Gwp~Tf56J*4%-#IBX3QEqkSd#rXJX!IKxq{lfHcf+2 zKF3w-IAB62oxYzT{i;;?y{TSc%eG{YrEn03C`4yb$EQ{SPlhsk-1!W}93O#0CZXxX z<{Apc^{q8Fn+Zs!dDnxFLxj<%GOLKPsj1RuD`jDPpoA?Zc_i~meLAp`Zw>42aB5bh z@r3ww5_J7I_YPe)%yhFgl*;i!u2RoZ0GMJ-C;qcv8fU8{*VpA&)0 zutd#jW9pCL&v>uZsWcS$kefw5*4vM{W{%`fKJv@zRYkwXT9Ao{s&N7zM|N|R--yUA zKZ{()9)ZW>y54??=sD)<>y4CVs>;jy@3dLPVU2vveSD(HTaj-baD1We(clzUp%++q zC@PYRuAfvjcjKzJ?&MOn^~;wT<;OQ(`M$`sTHXA%@Sb0<+U$zLf=G(CGXLm`0emy+ z?4`s`@28RkMf3-+j*yzk%nzNC>+L*i@DjgnwFFkH9)8+Qz~dx_zi)V%R~WKpRcVb) zp$NG*QaX|!v|4C#z1LVbvxM_$h->(Dm!pq3S$4Pw@g#M{0ebosnPLXG2T7{piP3dM zui}-vMz-g!-)L!uofIYqh*lzsQE2a8a&TSPZEEiG1NSX(L4yoFF!K-vL^=PwP78|x zEiQ06ewA_S=fWFNg%OC_tPBej#1~K?FY-)=%)U%nfN?g1WW+-KZ!x(4GfM%UL*##qkfuoS_6MtXavYE%rF0!fd-)Ui>A-|S&1AV9I8uEbg5|R;Cxexr0!#tZj-csmfV+I{M zG!j=q|2|A#p+V`O?0`_kLlUmR$VQYCmj7{Ose$Y0rk{=A(B%4z)#-755)k&t&nT%#Ra@ zN3&gy%8r)?$X8Ax@u7YJ40l+~ix|X(8h=zapVS`rS$-=vQ+%kKlU$>&Tro5SV>axm z&o-*sSETvi#B(=^rFX;W(?=}&p^LZbAOOTN*K(#F9>cAV} zxg*Y#mFmV#*%wY)3VehM2WpI{q=1s6eA};%AHNotFtBPyjP`bsP7f|pzDKgVIB63} zxIVAZ5esizu1p-V&@U4u#=A#W9#H95KE`*)`&38SI&I7!cP;ZX4`4)JiZPJc-B|qU zK^l*3V~w*`NTFqV<*9*O&Fpm&@8zO_k^S;ah=XhI^}||&!HTRdqIv~-RQ{Lxhl#Vv z?tHyg5!KvwD_8{sUOm&{(+} zp=B(D_#Pce3TU*SLs7y-*$NMY=>_w8VM`9?k~d%E(ww$?t;D9NT{VahDoW9U@MRz! zWs2~111oscZS~af#Bs=?e{fPaaF@>k>0-OvS+VjswQpuB>n!s3+sSye8P@7v6@4fi zP|9m<-e!M=N$9|bS*x&OmC0m`|TT7 zmI=8kpY$o+_L{#EtLblvA9zp2gk`nr5KPMn;0ow(&^n2sTA_DimXc1GhVCQ;gvZF;wxMEx!5^@ z)bYcVO94a6THUD;e1sfsnYtT) zSmp{Dt(J~L?o`vbDJmwfsoh_7PJJ5Aj&fiop&y9D_aO8~Y2W_{iPZ94F=R zjh2x%lwF*AwBR%B{`d)b-IMFshRSTL9ZJ5@>%|2XE%CL>IYzQ=j<)A!-0W4}tJf!< zf52B&p-;MbU^wP__=Libf4^eQ%Qwu#RijU8l^8CO^Ieo+lQ)FnK_1oJe4X?Jmnj^N zXRBh-XPX_|Q;p_K!?m#pyYnP4Tr7#bAL;dQ>esgxFpjq)Xa-=Vn4O%)EJQYSSRt}p}rT-LpedU zK<}1kTRBMVoky(U+}}4}P*bhXYF!JYmVU4l7NnVUaP5b!DTi#Sa!%&5^TTobdWTwf ziDeU3O&(X}DXB1oHo?PoF%CDJPA#970?SW@l1%mwYh0hb#LNyr^!eqd;o#qWbA>Ez z&FgvhRa85ip#qDzZpPJa2#4@PN;hL$FwHlb7ry97u9W~}*0d;(vJPgN1e2wDV%TGO zy;9xss6}R(3ZH{se?jCz3V+iRA(){M>#PeQ7aTSj(NO&3lP$SU(`IdWRy>X;f`;Ca zGL3I$-|xL+bNDpR3$}gC(&*%4s(Z&Cz1Qr&xuBjNjT{Wf*4J`L)J-%|F;M#cc;AiD zJ=f;VV!-p7OX#pKxM)|DyZk;pG$M&HP*u=A@cBXV&Z0mfeF&#t|7@)#HK@3r!tIP|CP&K(`UUN>2USM1eTsKk+VH_TSL0%?L+|9Xn|k(w|oyqjPM!Tr&UIZ zkLQ{SJudYO3MOWq#4Pq&x3|%3%2#Qfybrwb1eM5To>WSUP>ZH1)X$u{ogw#q;{1T7z>asr+sx(|pSljKx zkFa9%sb=2sgYikxS&uFANtbfbL>tBlEAXE7j|O*5=c%0%VWx#V0TpsG5HIaqRlQDo zj_rnogZrDmcPtS?=NhxnFHIGMYy;ufK-{?Vy-sp~BOKgQ1ot|@*xS5dGyqU9{J zr|Kt{q!l^-Fc^uy6-g%4-qqhV*MC`9Da$pR??#~Ry1nOt7)>?M)M^Ak= zn+xZUj@zfkXWkzh-UD%^#=&T)?&ZFxd%m-cdCBk8ueT;IY{64h9|F& zcg((t`0J6G241^o75$|JLROXSE2puS9cqD9nH8tj%^#~ZfE%nJtapP0En4eTo|zm% zut*otD{|&agd(WX_|UWVwmHA#W#%QTSJLZu#zg}Ag)4d=hfvKf1{B5~7farTJ3Pt} zGF%aEk6wtRean{SaWC2HdD;!VTj_;lbm}}YoTIrxgZ^jNp!XcG)ST8mb7sdUM!OrZ zhuUN^j<)!Y8<(k2n&w+C4VN+@ild#&^#1h6kx!l2QQoNVEek)v;kXl~ucV@5eI1@1 zngPYpV3YAB#=?KShe7%J?2e|mdxgPYE5dP^dZkOxxyJeKUkEk zPiKvjN&Y@D<()JiDakOQoLJZKO`%{eE!znm&WBaGQwLNyPAP8B>7q0i(JFqWC#B)?J1*pvE7CVr8pSC^F?@s@e=I_{g| zp+RAhcgiU--HJX08&}dLM(4Y4A}Y+qGv(EWusaC5!zz(Gp zKar6JqiWHf;s5y2=zA0?+%VbmWt<+CgI;kBT^)zP8--g+g1L}*N1jcpXZTR?)-B?9 zo#gI;E$?}?@0qkoesI^7jgLsvpR{b#gB2GTT8X|hILM)i9Ix;9ELgylf1=~_j?l1V zmD#gbd8ZQlnDWhcuJ6%GJEb0OCe9D<<<47B4(GgYdVr}UH+k6tw`ycTg0k;lL1d$7~8OW~}X)CqFdnG7VQTQRB-tt@2)z~d#UF;O7 z$#o@txqIoZ*^=l3J1coQ+Ls3wHnIXr7~QsR9bNXBs2)?l7koo9G^j`$d-<{Z;cEiR z=&sYLo8j9L4{o`V6r_+@JYIkP0#T16tZ|FBQqPmIY$iL*W8@qHC<>28q zd!+UQ!0B>&*i?Vn>j!9iX{DDjTn(4Wre^dUFC{pO<(*h2?`(~=p&yxDzV0lAV@uCb z%kPHgMKAumdPfP;>`x%zm}U0)_Ud4NkkDu+7K5@AikOZALbM#X&>#~zJFtD%VUyWd z2)C$*dMQn|6L;9D^^j^>rH8tlqGSclmT1I^*;WgEMRl!5D?IIeBxZQzr)I{YBwKZf z_FD;_W)h#*J$zkmvZV6t4sK*(Hry`%kbIlZSbx}S?7R2tnSG%i;rNBScH@xTW}SMR z565Y-A5d2Ow_bk!m}X}Q=QSc%$nqJ5c}o!;fI7&q4Q>23pXd|UN|eFLTZfr`iRjbZf$d#1TW9Vt$$PI zx*NU_C-Wsv?t>;YK}gsmsk&;4&duMUu;fPR7<*oL%EI#=^S8?x@=+Cl!eCS_9P%V zEJ>(h)$l29A?%*Sb#h(TT3CLKWg8bJZ+QSD!nGQs&3T?qLtv-Lisa4aWiBaKN0WuU zE0|qFQXEn5+6aXUsj+MII94@$-t{Q!afJE0p%V5yuP)^)F)y}Fmjx+E&KfM$Of2%= zQjcn+f;o`0QCz)wsF{0?nSR=Waw({ITfE^k|r*sXm7v(ywg zO;LFFU>kOP5Uf5eFBYK$_IMW(J*(wfUiOE}kuZM5_-+t_FC~jt%D5k1WJJ+&=_}#Xi>M%7Bx1nK9)hB>~~U!Ye}&sp_|Ek-WQT( zQ^HGBJG4;V;uE6qr6MHozZQjF>cFviukm{MT)G9)f2o<`$LSb{|CN&jm8&Ux@?T)c zxXE6=o8|sy1D&+Ep{iuVu`-^i)>89y3Ki+?FTs}+pZK1k6W^TzHS2TR3H1LBy7y zPGqX-G$vrlWbfpn ze&5s_B>u`<#>vr*NmLZf1%gC6| z0g!)Ii{3pe~a`XL6fdtOlAV70D86aOq0Ysz` z1H=v3qyoS4{V66AFsNn*^eXTHrq_5t1IX!+e~~}QZ%!2#OAk=u!!kKEQ0~{{;(ydt z@K>HcIsd4N;7?3tuw^a;13e9)6?A}6B@tLG8SwTsB|1pDXoEl6Oz>C7{Y(hGXoJ;C z;`4+w|G}94pOGX8qB56}lm067XX^;UfY}lTz@~~BY!Y%RaHD`92^9qU>_1~u5Kyfp zC;eUSMH_+Pz-FrG|7jy!(2Wz^X-9&9LV(O02C(aK7=MZRll@oqFIodE_;(BA5}&(s zLLh?YzLOU=`6nezf2RL6Qhug~10Sme0kalL;C3k`$*;10-b4VJHAviZ2Tpzg0dOca zm$EVa(L2chCINARmP;AXK(wSbT7bNk1xEmMON9%8?@B6V{J=m72^hKUYbgV8tAYS1 ztL4J|1pp4Tm$9P>0-436R$uz-k#45b&A;?YwJgfx0?!z`q(F z;H$;O{e=<^Oups=dRpnu6XU|c_6J`CL4n=M*_eL|{IgQOhSSfk12;h8>lnb@m%4gd zK(L++xL!&Ltd~=e{;t_Y!z1~DD;2_kSpzx9MUMRsusGmR0ipaSqhCF9F`kf!3u#}J zlLNeUWViz0mXVMk4D_6stzbh(!U3g5`rlhVP$UH0@(HhG|D(4+IH!N7p!25$l(nQ% z7{G6$JeTx0aydX&^|SWpC4ujwyig>Fc@E@PvETgFJr|V#@xlL--><>&PZciSa?fX( zpH)C!RDq|N`l2}azqsfCWi>nLFUkH%Dg@lAVgQKRnJ=mfgMw}%{16x%NULTC`@FT9 zl1#(K&EArU(~Il804Ymwp3*1gxC%^e{&dmrAAwdCPqYms$ zDBxSq08U;3Z|DK>3PPZ`gA~k>9Qz+!ctE3`4ILEtd~Aav62QRW355tkz`ig9$fKD7 z+c#Ix!R}%#rzb}IFS0r)$;&t5SfDvW0EPs%-%wNh{Hw?HA1=@e!bnz*=ww2tu-El) z^D>u`ww6dc5F8;uUkRa~be`zpqssmSw^Up6n7!rB@cWa}NRmtyq84z^&as`9SafziEHT34y?2V4MF@2K;=*Isc%3RR{t>!2YZd zNc)%ZfA|DIJh+R*ziA*E-CqJ;oC5fR4=M=zZ$qL$27ct<1q*<3|4|4O4if*MK?DTP z^`rC8Z(#(%NAV9D6plPUC-5IWC;|e3q5dGk;O8e6{$zv+{Mppt2?y}p#DDofv!Br4 zG$H;!X>cLPx%=CNFsOgW9q4!m{j*@uDhd5lY8be?|7V8a0Sgc{@DE`S=Z*z`(*9~` z6a)qy_4un`ei(=i_(x)Jru>U01QYrzEfVp6(7@v(f8+-TXI&W6dH?@U-@&1vs`4iz zc(mnj8o12=#V2q+Z~T!T5=2(~g9d{@esw46-^U&X`)d$_E*Ix#QvREv0O+&vCk^zi z`18qugIJ7zwhUYd3Z9|)Z+_q$1fI3|g9y_88eE`1Ci2hPArOLp%`FJ9L;vD~fX8qC zC<6iE2caGz7w!M+(E&AF(3#}F5+XpA>rbh{#{X;bK|mpYO`HfQxUl`1ALuyxdmN#D z&bkQjw9sFLKm|aU%0GkwC(}Qh8UY1QB>l+;1FQTO?e8ZCfdY>Q{g&n*VZg!vmoVUg zr#}Z00w(xZeL0q{r`suQvYH^oWCFbk(giTF9G48 z|IlB2$a9~ZKhg@FYrp@}em;NT`~iZC{vuxdL4Z~HD>35lsTFbI1N>)Nfxp%b1PCVj zcNvsIf`1hv06_==e(xDPA&_&mP|eB7jp=+w|M|8m?`Y)&x-9*=lw#87{J(V^F)=Qt g|NpIv*DzN%Qx`Wc7fUNVgaASahR4Pxtt|8Z0I%a2umAu6 diff --git a/manual.typ b/manual.typ index e052c0a..c1668d3 100644 --- a/manual.typ +++ b/manual.typ @@ -13,6 +13,12 @@ ) #tidy.show-module(sha-doc) +#let md-doc = mod( + read("src/md.typ"), + name: "md" +) +#tidy.show-module(md-doc) + #let misc-doc = mod( read("src/misc.typ"), name: "misc" diff --git a/src/lib.typ b/src/lib.typ index 2a16f0b..53a1165 100644 --- a/src/lib.typ +++ b/src/lib.typ @@ -1,4 +1,5 @@ #import "misc.typ": * -#import "sha.typ" +#import "sha.typ": * +#import "md.typ": * #import "utils.typ": * #import "base.typ": * \ No newline at end of file diff --git a/src/md.typ b/src/md.typ new file mode 100644 index 0000000..f1ffb48 --- /dev/null +++ b/src/md.typ @@ -0,0 +1,259 @@ +#import "utils.typ": * + +#let rots = ( + 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, 7, 12, 17, 22, + 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, 5, 9, 14, 20, + 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, 4, 11, 16, 23, + 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21, 6, 10, 15, 21 +) + +#let _md5-const(i) = { + return int( + calc.floor( + calc.abs( + calc.sin(i + 1) * max-32 + ) + ) + ) +} + +#let md5-default-iv = ( + 0x67452301, + 0xEFCDAB89, + 0x98BADCFE, + 0x10325476 +) +#let md4-default-iv = md5-default-iv + +/// Message Digest 5 +/// #test( +/// `jumble.bytes-to-hex(jumble.md5("Hello World!")) == "ed076287532e86365e841e92bfc50d8c"` +/// ) +/// ```example +/// #bytes-to-hex(md5("Hello World!")) +/// ``` +/// -> bytes +#let md5( + message, + iv: md5-default-iv +) = { + let message = if type(message) == str {bytes(message)} else {message} + assert(type(message) == bytes, message: "message must be a string or bytes, but is " + repr(type(message))) + + // Complete message to multiple of 512 bits + let bin-str = "" + for char in message { + bin-str += z-fill(str(char, base: 2), 8) + } + let l = bin-str.len() + bin-str += "1" + let padding = calc.rem-euclid(448 - bin-str.len(), 512) + if padding != 0 { + bin-str += "0" * padding + } + let len-bin = z-fill(str(l, base: 2), 64) + // Reverse order to little-endian + len-bin = len-bin.clusters() + .chunks(8) + .rev() + .flatten() + .join() + bin-str += len-bin + let bin = bin-str.clusters().map(int) + + // Split into blocks of 16 32-bit words + let words = bin.chunks(32).map(bin-to-int).map(switch-endianness) + let blocks = words.chunks(16) + + let vec = iv + + for block in blocks { + let (A, B, C, D) = vec + for i in range(64) { + let (f, g) = if i < 16 {( + B.bit-and(C).bit-or(B.bit-not().bit-and(mask-32).bit-and(D)), + i + )} else if i < 32 {( + D.bit-and(B).bit-or(D.bit-not().bit-and(mask-32).bit-and(C)), + calc.rem(5 * i + 1, 16) + )} else if i < 48 {( + B.bit-xor(C).bit-xor(D), + calc.rem(3 * i + 5, 16) + )} else {( + C.bit-xor(B.bit-or(D.bit-not().bit-and(mask-32))), + calc.rem(7 * i, 16) + )} + let temp = circular-shift( + calc.rem(A + f + _md5-const(i) + block.at(g), max-32), + n: rots.at(i) + ) + B + (A, B, C, D) = ( + D, + calc.rem(temp, max-32), + B, + C + ) + } + + vec = vec.zip((A, B, C, D)).map(p => { + calc.rem(p.sum(), max-32) + }) + } + + let digest-bytes = () + for n in vec { + digest-bytes += ( + n.bit-and(0xff), + n.bit-rshift(8).bit-and(0xff), + n.bit-rshift(16).bit-and(0xff), + n.bit-rshift(24) + ) + } + + return bytes(digest-bytes) +} + +#let _md4-round1-shift = (3, 7, 11, 19) +#let _md4-round2-shift = (3, 5, 9, 13) +#let _md4-round3-shift = (3, 9, 11, 15) + +#let _md4-f(x, y, z) = { + return x.bit-and(y).bit-or(x.bit-not().bit-and(mask-32).bit-and(z)) +} + +#let _md4-g(x, y, z) = { + let xy = x.bit-and(y) + let xz = x.bit-and(z) + let yz = y.bit-and(z) + return xy.bit-or(xz).bit-or(yz) +} + +#let _md4-h(x, y, z) = { + return x.bit-xor(y).bit-xor(z) +} + +#let _md4-round1(a, b, c, d, x, s) = { + let temp = a + _md4-f(b, c, d) + x + return circular-shift( + temp.bit-and(mask-32), + n: s + ) +} + +#let _md4-round2(a, b, c, d, x, s) = { + let temp = a + _md4-g(b, c, d) + x + 0x5a827999 + return circular-shift( + temp.bit-and(mask-32), + n: s + ) +} + +#let _md4-round3(a, b, c, d, x, s) = { + let temp = a + _md4-h(b, c, d) + x + 0x6ed9eba1 + return circular-shift( + temp.bit-and(mask-32), + n: s + ) +} + +/// Message Digest 4 +/// #test( +/// `jumble.bytes-to-hex(jumble.md4("Hello World!")) == "b2a5cc34fc21a764ae2fad94d56fadf6"` +/// ) +/// ```example +/// #bytes-to-hex(md4("Hello World!")) +/// ``` +/// -> bytes +#let md4( + /// -> str | bytes + message, + /// -> array + iv: md4-default-iv +) = { + let message = if type(message) == str {bytes(message)} else {message} + assert(type(message) == bytes, message: "message must be a string or bytes, but is " + repr(type(message))) + + // Complete message to multiple of 512 bits + let bin-str = "" + for char in message { + bin-str += z-fill(str(char, base: 2), 8) + } + let l = bin-str.len() + bin-str += "1" + let padding = calc.rem-euclid(448 - bin-str.len(), 512) + if padding != 0 { + bin-str += "0" * padding + } + let len-bin = z-fill(str(l, base: 2), 64) + // Reverse order to little-endian + len-bin = len-bin.clusters() + .chunks(8) + .rev() + .flatten() + .join() + bin-str += len-bin + let bin = bin-str.clusters().map(int) + + // Split into blocks of 16 32-bit words + let words = bin.chunks(32).map(bin-to-int).map(switch-endianness) + let blocks = words.chunks(16) + + let vec = iv + + for block in blocks { + let vec2 = vec + + for i in range(16) { + vec2.at(0) = _md4-round1( + ..vec2, + block.at(i), + _md4-round1-shift.at(calc.rem(i, 4)) + ) + vec2.insert(0, vec2.pop()) + } + + for i in range(16) { + let j = calc.rem(i * 4, 16) + calc.div-euclid(i, 4) + vec2.at(0) = _md4-round2( + ..vec2, + block.at(j), + _md4-round2-shift.at(calc.rem(i, 4)) + ) + vec2.insert(0, vec2.pop()) + } + + for i in range(16) { + let j = bin-to-int( + z-fill( + str(i, base: 2), + 4 + ).clusters() + .map(int) + .rev() + ) + + vec2.at(0) = _md4-round3( + ..vec2, + block.at(j), + _md4-round3-shift.at(calc.rem(i, 4)) + ) + vec2.insert(0, vec2.pop()) + } + + vec = vec.zip(vec2).map(p => { + calc.rem(p.sum(), max-32) + }) + } + + let digest-bytes = () + for n in vec { + digest-bytes += ( + n.bit-and(0xff), + n.bit-rshift(8).bit-and(0xff), + n.bit-rshift(16).bit-and(0xff), + n.bit-rshift(24), + ) + } + + return bytes(digest-bytes) +} \ No newline at end of file diff --git a/src/sha.typ b/src/sha.typ index ec09ff4..dd2b9f0 100644 --- a/src/sha.typ +++ b/src/sha.typ @@ -42,15 +42,18 @@ /// -> bytes #let sha1( /// Message to hash - /// -> str + /// -> str | bytes message, /// Initial vector /// -> array iv: sha1-default-iv ) = { + let message = if type(message) == str {bytes(message)} else {message} + assert(type(message) == bytes, message: "message must be a string or bytes, but is " + repr(type(message))) + // Complete message to multiple of 512 bits let bin-str = "" - for char in bytes(message) { + for char in message { bin-str += z-fill(str(char, base: 2), 8) } let l = bin-str.len() diff --git a/src/utils.typ b/src/utils.typ index 3b7cd2f..0f05eda 100644 --- a/src/utils.typ +++ b/src/utils.typ @@ -97,4 +97,23 @@ } let high-bits = x.bit-rshift(32 - n) return x.bit-lshift(n).bit-or(high-bits).bit-and(mask-32) +} + +/// Switches the endianness of the given value (32-bit integer) +/// -> number +#let switch-endianness( + /// -> number + value +) = { + let a = value.bit-rshift(24) + let b = value.bit-rshift(16).bit-and(0xff) + let c = value.bit-rshift(8).bit-and(0xff) + let d = value.bit-and(0xff) + + let a2 = d.bit-lshift(24) + let b2 = c.bit-lshift(16) + let c2 = b.bit-lshift(8) + let d2 = a + + return a2.bit-or(b2).bit-or(c2).bit-or(d2) } \ No newline at end of file