From a0755e6aa3e572b56facdf014eefdb0c1cbc7c32 Mon Sep 17 00:00:00 2001 From: Michael Tu Date: Tue, 4 Jul 2017 18:28:17 -0400 Subject: [PATCH] SM Model Jupyter Notebook Tutorial (#32) Notebook tutorial for SM CNN. --- .gitignore | 3 + README.md | 12 +- sm_cnn/.gitignore | 1 + sm_cnn/nn-architecture.png | Bin 0 -> 127951 bytes sm_cnn/tutorial.ipynb | 714 +++++++++++++++++++++++++++++++++++++ 5 files changed, 726 insertions(+), 4 deletions(-) create mode 100644 sm_cnn/nn-architecture.png create mode 100644 sm_cnn/tutorial.ipynb diff --git a/.gitignore b/.gitignore index 007c4f3..15b8746 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ +.ipynb_checkpoints +__pycache__ +*.pyc .DS_Store .idea/ *idfsim diff --git a/README.md b/README.md index d4e3975..94342ea 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,15 @@ # Castor -Pytorch deep learning models. +PyTorch deep learning models. 1. [SM model](./sm_cnn/): Similarity between question and candidate answers. -## Setting up Pytorch +## Setting up PyTorch You need Python 3.6 to use the models in this repository. -As per [pytorch.org](pytorch.org), +As per [pytorch.org](pytorch.org), > "[Anaconda](https://www.continuum.io/downloads) is our recommended package manager" ```conda install pytorch torchvision -c soumith``` @@ -21,7 +21,7 @@ We also recommend [gensim](https://radimrehurek.com/gensim/). We use some gensim ```conda install gensim``` -Pytorch has good support for GPU computations. +PyTorch has good support for GPU computations. CUDA installation guide for linux can be found [here](http://docs.nvidia.com/cuda/cuda-installation-guide-linux/) **NOTE**: Install CUDA libraries **before** installing conda and pytorch. @@ -34,3 +34,7 @@ Sourcing and pre-processing of input data for each model is described in respect ## Baselines 1. [IDF Baseline](./idf_baseline/): IDF overlap between question and candidate answers. + +## Tutorials + +SM Model tutorial: [sm_cnn/tutorial.ipynb](sm_cnn/tutorial.ipynb) - notebook that walks through SM CNN model, good for beginnners. diff --git a/sm_cnn/.gitignore b/sm_cnn/.gitignore index 3c6f031..85d6be8 100644 --- a/sm_cnn/.gitignore +++ b/sm_cnn/.gitignore @@ -2,3 +2,4 @@ trec_eval-8.0/trec_eval data/ trained_models/ +trec_eval-8.0/trec_eval.dSYM diff --git a/sm_cnn/nn-architecture.png b/sm_cnn/nn-architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..3734c858a2b6811d340fa4d465b7faa12c84248f GIT binary patch literal 127951 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ǵJPb7>I-7TFZcr|(jhz8kfy0vR$dnSE*TYmooOUlVIHNaS-`sP&-5eYU zvfGI|g4xgr$a`CJF=D3=qq4kXooN?j+k3q{?2ezhNSxiaqkLt#he2j8|3pH(x}8?N<^Twl38lD|=sl!X%{@OP0ig-Nv? zCN=Ta5b*Q~yXs)0m-mpW*Ce?^(Bz4+qKpW|vigBi2>Oi=(VFPPfZE>m{l@Gr;S@8Z zh%Q<8?^%`GOW6pcZE8wYsW{>qkmK_HT8L3q6GA7Lf)AP`?U6NmWyeo6Z+8Dnhr&HA@^cIG;fjfhMIin z9TzZqQg`8DMuv&IPi2VIic1cUf0BYN{BIjOIgxGb)$X86}PA8qi=Q+k@ zg+jMA1&v7FbnR|athL*`|7aoO_qYv*F`p^qV7Xrq^4zrP7ljQS(EI5KuRDp+1!O^3 zpT?X~-p=?}{!JB1n&b+8YBr+N`Td?dD@<7Cn+n0Tmb}pzIOJl;$4PWGs7|?hqiTHV zP?HxZ#4t2e;MK8a2phfBm&|v^W*AGEf)3wZ@nkZuw?EAp-d4CLWf>dm_DWMv+z|D# zFdU&bx6PBtqqyZe1xNkOOtUIOUrWsTWsTnMuNT~8GyCuV7TH1hY}~ZRO!~^WGdWs7G67dYg;9Gbp?*DX<{HAFVUjuDyAHC*4aD8p(Wyb&hXriG&KU#wmmx8IS zKv5lgT$Y&157$&kuhTe2%K3d3|7FAb0`D|ii`2hwet?uIuVe!paEjHPIC|ex&&*IU zR+K~o7kShxb**ge_^sH{7bQ%Dc332}5yRRK!$T}RpTS9l93egV6SPUg<8%hidF?;} zO?SYUn<;svpt-RE`DuJ+DUFFe+JkLHX^6Dl49bFp(Q2;e0iMYf8IpFVrJmU&HG}4L zo}1)%MHO}ZS~*m%ipQOdGqfh7y0vGKsFLW-n1M0v(p<1&tmQylAnk~Q&>oIgaTd_Q zB}E8OZc#27T!sKiimhUp$9LH(2rtL0?CguBThsa|Q$xqL_vce{008y*?(}d5^|$}f z6l0i+6Fxw4rkMMPf>OG{bMj)fscJgxw?Vc3@fpY6l!*{eE8$#?c+6L`dxa|ah((jz zFV-J(pMR@Nx5j`@r}9O<6H4uDavd2N;dl)zR&n{g0(~75CQfm!xOKpJ7!3oF)0Y4m zKitonx~jUK4&02v?LV9kC)fjB(lQk=FD$>Pk4;Y|ZqOREEU5RYDP02)*V5$q{|7q?5R)>R`u7<` z#*yFc;m0-qpb=V)meXWmFm6r`J_UMQ`o%g;cINS-Ivl$?XQ#{Ru|j@etPB*TcT=x8 z{OJchXhB%JYU%IYyoP~R)EJd_6~ig-qT^Yt9#@I7Ut6Ur$p`5E#GKR&iX+`!J!A7ivvBK%ej#cR3{& zx|bI*y82ome;QE#BDUBN{rt(~?~*I|fC^e~9u4{N4FM}mAC^e}iX!Hl<;6QeqQZsx zLN7-Ilr5HAqXHqh?P-r;9PA(z>vg%Vt~vcMIC0daSd!_H?5hu02{BQ?#j26d<}t4U znn|2?n|Tq(;+bAZ$@cIpd-v9ex&39HMPT__LLn>F>lo^mucpaJT^GI!V^y}_aYlyN z_;ZXd%_JyOEYm^(GhMSspGvzJ#2wu%UulY=l{zSV%Fh7O6_4T} zKd-fr)|D8;m9&;kRx5qGapR7~69Vhw7#G8Rjw8K722r6=7&!hTfrNSVPU^BlSW@Qv z2fe3x9Q;k4mAv^eE6BWz5Wqy_+BpWWju?z0riKptn5#c)+G-e%EN4jR$)nS{vi$+{>Ot~dwbhri@oJGS))-gv_XT4ZE}92t7Qo#rqb{gj#< zLE$@5a=~vpWNA9l0XpPMdDH6mIL^?NgZS>spbczH%cy7m$VAaNpE$08MwvR#r1=%h z5*8G+)z_*1Y7DCDWmzoCe5+jKoFDeBrW)Azi=k7j%HI##DIrs>uF%J)&8kOiZOYxW znvbbkI|=J2F2*W$?+yJt05yKK^h&xZk2{?h>15O6xJsbH$Vg$%7YdvlROeHxA~(?w z8_OIc;>G&E@NW&M?@(aeHEw`BnFj?RK(SR7(J4xiaRE|ITMtn;@@g4S!*Sf)cxLP! zEMLy#r;udrvt8{oDG<{RZTq=V&mtC3Y9~}kdB^@0@bBGhF_o#eou%vT(n#o>1AY&` z=sb>y4{yZf_W{}>mC~`nb&Yy#S&r`BgrwM`R5y8+jCeCfFOAKYaZu9&D2BC!m9w^-y|9}YqG&aZ%I$)va@9t#o7r-aNQ9vFD%KF4KbI zz8r9Iq;k^Il8n_*(Ns(oN}%e5F<*+u&*@VtlLEdCeXj`~ zfpLDg{;H}3MUxG2fp=e{>}bn$v3s`NxCaKuTWA)78{`F&1JEIsl*TQ}rBA+*&;)l$ zi6JZ@OuZyyTWS~5%yEXI5dH|2R36-RkUD{$!+VsMCk%AVupHZF9$yL;;ck`_4iS+l zv)B64VufeFSeb1_w<@&VDzGX}o?V<+(;G*WIZX3Ma`i|?o~`iv>|1)!Rk~r$_BLK+ zc8{U4576aeV?BC%|Iuut{C7F4EN=+o@VQAu+3(9DogSpn{6nkll7`F?l0m7u)R5yE zV9xdd9;Tp^dgi$1fPR=7PO6UG6!K+%qok?>8)e3w&tH(#DQAadByV^#m z)_7~#o;PQ3Ji*HxiAiG|>G;aY@T@!FVzTi~)^-3BrcLXzZAH(-gUv{gN1o+V#Ll?H z^($T#q8nNbk<8L|56E-ZWQ1e%E>{F+E#!QUKu5vIQ~z&y=3!KOdWr*KkU%w{-o-gw z)TSrN2EBjX1AFQvXw?B1B4qXYVTc6B<-!rCglG42&M6+r)YsHWr`PtY&{2+S^RX5K zpDVH1?R|Yz-uk6wlTY_`Jhf}1#}9i{UDin~Uv^%q4}QVFG)x*M@NLrm0|3YdWUDuM zp$xW#Fv>~6+`bkU)x|rl2shb%g)LijDA?$!83XeQ-(yS($Z6|*sCIaHHxJ=Z2rMzJ zyi&A#-2Gdbv8qhDSiQagte+~+{XX(KjQW4nHYQWAGuo@QxXwz;X9s|GUI6XE>F1Fx z(02%53CkYqK$wj|7ah@0qCqOP5p6DifM3x1yGfaBQ9Os;bar29nU2icZ?pP<{ESEx zRGDQWb{^A_QT_e&7AFzGk!_Y4m>hhtN?pd~p=Nz%J!hxtX2xsGIY^#9d!`CyB7Rx) zU-tX!dppLoQx^n^ai&NizsgEOUEw-}L)rXdX2@Idc&&9x)cj--37y)Xq~%=TDsK^6f47Tu6MBh6VrGlf;J`f?4;>}tG#Hd1_BBnp z@+cx7u2<5H(w&d~%05C6<)P2jC(<`vYbK)-+DU^r%caGaMj7ZDPG&nY6tm4AuM1bmK7;i|fWVv0%G<5npNcwiOxk-=vexsqDOOoRqy;w&##`Jq#_m5S+jnk1_K=9qy8q z$FMs;R1#v?bJH{FU$HLviM7*d8!3WEM;lQ!>U8~N#IVFOwQpv3X-^$YRchD0Yh)f?5 z<+$v7l*gF z5FEU@=w1TT-IYS^fhd85uw(PoG~@)vG3+))P0Q0Ia`<8MPhCB%qCI=|{#$`?1Uq6o zk6>6`j__>GWDtQ@TvLEo2AfgWa^VW~X?Tg!nZdE$BP;DScHzkw?~0$feAzC==-lHf ze2bPm!Kv59jStM-pj^qbn5Ffm49a|Af}hRri$yu;F&%^pLA7ffUlE5Y;PPP5W;$u3 z^o*%tJZ9%yt;UdQ!yM!LsJ=-c6l>#H;y6xrA40=j^x~hx=d?RRtHPOO>1W*m?HcmS zys)%zOyN=d8bJWk&Afh=^ue0-968N>F#M~M^5Fj7*q3=+Qh3lF{6L6!LC(rI%vY)j z$E%b|ueGxx{xhCusciHR%6|}DZ>d4vVn?D&Fa7|Kkv-JLnF!$hWk#J>mh@1KLdXMj zLRfwHrXP>u=Aoh)dl<$YtOdu*{*+^caM6D@XU@M}AQr{*tv#VZ8tfu8z`XOyUxg~7 zEKamMvT+=I8Plw&(`|Ex-NV+4j?=9uBr`BUgyLw=akG#Mro+j_v71p;#`DO`GYnTwEH1jK@sK!2V;-p(e#J=)jAF zIK^b$$8!gXY5CeKe}@4QM((X`fV$3N(oIsE*ZF<9S-3cLlff(rj7QJq!9lJL5n14& z8}isLrHgEH?~mdE7%V-_SNqL2Jt)Kfrg3kAA+I@dNF+VLrfNYMeH~lqONo;_QClpv z?u2!8Hq}}znIohwQ@kqFx9~`j&<0$y+?QfyCObV*i3d&D&34f&+o0EcB_1t406A9uAa@9%?RFgrX z3-U9|Vz?PFT|Z9QHhIIHz+}Kb8~?-8K-@Z`CBquC^C7N-Z=yj2ojK5A7itBTrDFwaVukTXFKP9rzv zKnI9!epAJ{#xyhP76_?VX-oWn$wQg8e1;EXxI+kj=joh|3qOgR0$~*DJHB2ZwC;~q zN{%iuJC7|inAv_)l8sS|9%T?)$tJE?N-1T!6VGClE!F--G+}#Vc>t6BJFrDZlGZR4FZ%LIeyEmfy6Y$`@QuP2GhBn-E*tq&l znS>LPt6PvS-tg0yD2@B3Y(VKwZU?w+*Xa$^Wr+DyZN06W^wp=%dQxnS!@TbGXn>PG zlH@Ojx2~|}4mfm|S=2m~*R->>EaA{WBg05BQep=k7?6 z0^jC_oOm*OiURuedTF9(PKG*c=3k$JOu~iDpxz?xreUfutY780=l1(2SH|vW7L+s` z_?6J)9C&K7(j@O$?^j@+y}@^Cekqf8u{pK2*|fw;=$n!(SYlM<9(JRb)SB3N$>1(2 z@_a6@I!IhZRk>jKr3?0<0xvypLOajjjjPJt3%;gvWpf7(Bvbd8F%vpRL+tsO^y{wcus~>+;-$6 z0)4fgl+xt3gjge@hDKYZa!DC?rz3APJ=Tn|*hcYO`iX2pknnsGI%%-}ksR)~@J`?N ziAS2qN(BBsdIELzFR-*&r^QlIl~Z$Vp|k9v=-KIi9G7TPiY-m^g zRErVF1UM&SOs^DkQ?CqRCEv{+k4kQcj(-RBsCq_YD=?lLx1&Xg4U0-yn7TOaHDhZC zD-K&wLe@B?4V@Y%J5}{igVX^&(@|AJX+u^ z>S5VC=`U5xiTgp5;_fvDaA%TD?zb(e^B2-x_z1trKrt3-al?NRrkqBK?&@2#M&Jyz zEk6}u1)z$_t8#(JD&6j@%s1ZhCCtEbNx4gi`0iGEl8KKN zxw}4_s;ZUQ&M5or6Gh3TS+=@kNn2q<-!sEnY)JcO8_v}u#xcM+_@0v`7R9d=1n`}e zerh!^zuBJC={`~-mswzx-=CiCCCfcD7d!^~v97RGGjN!gJi)dS+Q@W1Nxn*(Ek^?B zmdBR;WsCh-a9&o;Mz|PmBlShat&$fB_hWF(=BJpOHRhkrr?l?gQsOe2Vw29 z@MeL0ZdVyfUtDki3O|*$Wo`QZu=kGPm9@*(aGXv$X2-T|b&L)=wryJ-+qRRAZQHhO z+wbag&ffcZ_TIm~-`{oRM>1E|nseTF&8ixsM%DTy_Nd&#&SpB($Nlz1uP<%X(Ij>! zpJz~2ltsI&(00Tr3JA19V~f-RA{vPxl%!+xl8>efk|e>Vhsh z70PIYADkR*+SfS|7D6W(;`U%;YV&{8WH49C#FAxQmB@dmG1>w0#vHWYX`jg)De`L%UuNl)K2Tk^i# zA5BXO`67d{jnrhks7hY+XGw~y-C_L@_xKta7xxkc5%5&5qgNIEs@PYt?*R*Tl+PZ+ zwecnk{S&@T(3PGY*e$pE?$0-qr&7XD`Gz2OVrHui<;{y~63kh6ckI<)6PPz7pH_1Y zqrrq7$`hN=vv&@7#C@k`iRFEPWD6en@R7&-S;T3{w6GtB-I!#1O zz1Eu7j}MJPh8hsDkc4qmi|~Eokaj^7s33BQ1*1aRh0(RvwMuRW&F(UxYX|UmJIkw0 zm{A6aoA2TgeO(L}!0BtFgAN)Go~rxnkHd^GUOn&hJ5-&uFn-?|=;2nWLlZ*I#xALp zE12aHhkG@fXijxB!wuY8SzE2M;x`NQ`@qhtFXLb^hSlT6mFZIeNlIEa-9k0}QZo0R zlq@5}V(!&jbPP{bS{pluL3nMuTW^A?bQ8Q57fK3W%W_&QF-{Bgf1t=v5#$V zta%3$60097!%1nIPuguiiei}`VhaTf>%f+<(>6zfG=efE9RwC~qpdOyKy1h8NdH0? zFzt(>5Op8xO9DeX$h~JETn&k}`+Ud?P|P8QG|L>2q6c&nWPUB=uB3vP)4gJ94Za^2 z@@k~}6IWru&bkM_Wyd^1Qx$AP;&4gz0V2hk-}#SJ=Ha&w7rq_qVWbJkqIdv#Y=|5U z$9cq6q`4$u_(mzOOWa`HY~4-Q`HJdHqeE#%1F|K5-#_* zKPD#{OFL~lUEHhjEZ2#xnYGc3PW>9EphcRst%ft#R>HY>-E)gP-#0*iXptAvwWBGV z-@q(7R5MA_)vQypmpJZeXsIO=RP#FiWtpLVlN;93PF;?8)1yC8&%HO6V@I7XH134M zdTQr9uCJLJoR)0>qaw1+7@1Q$AV15Kx?rW2SJuLzH3Lo9$1sac*kvB7A4P%9HSVPD z7@CWdhsBa)?~S4sbZj=nd1Ofs5ci37*iM;AFWM%?p}X3Lw_T`44vJmExY<_yXk#6U zx&O&7ljLnz6&ZBO-sX#D3Y~J*XjI=z9nW_cC<_p;iTQMX9i>U@G;c9e$EEe)6(dW8 zni|>`exog^hJjG4cuq5F1ADy;xNU>9`3B|vin3wtf|s+15@5J?$!8Ss5yA$X$!Goz z;W7;yLa>zaa&m9t`s9vWuZn#G{aBcP+upyM$n~>sqO;z<<%aL`?Y6?0WD>m+luDLl zRJB{W-11HyDjyu=c*#B*4Nf6S4gj9(1bjx2P)%BLR72HQ*l&`fV)gf)^oSGvlfNGQ z{6o$16Cy-&pBgP8at+tzQ6Tz|+M;?G)e!j~#t7#8QT8Hd7%k-hY%@$Qf(8MnB?Ai;n4|o<0Z+a@>w*B#QR7zC75|rakpq_R9`ipx?GL>S5As`V5Ht}@@$b^`Kbr%%tk60w z(Et1O@3*ld0FX($bj{@c*H;x{7R>)szW&ExxW5z=;=rq@0p#9)z3cz`gL1|V_P-rR z3WfyS!Y;667@%(UUzS@~t@6Jf2l@Xu@4s!s|M$&%>d&(XC3ib}3L!QfToz1kS#1vTeFXc0dvo2+6?UE|LA})P4zJgHGR2rzuLm-3gAewarC6eUQ~F#!#6Eg z`}Z>vlSZFV&p7ce*BaM)|CoEG;*DwYO2hQ@n<3C7RME)Gt>|4`y!FHsug)48%@tTB z-YMo|f8Gxks!09#GM4$JE8i=q*SFUAGk~lT7iRl;=HnL29u|+!TbrA$3?dygh@T#DtACSo>-?%Tf2Y_4aM9f4G#JbT?a3W(ra42z6Ne7X8J@X>?t0+CDY z1R84*X760i6X%lPA7PKWGewfNB27PVn^5e%Rs4R_NDRH0WuvMCSl)ko_M>M2z{eBP zct~`B<&ZMHUrI3*eQ@7?(MIQ1yey>|R9BhM#^X|z=^64R^s7s--0v{Oac4+(sr57n z!!P_13k9+Ts~L=AlV z^sxDQB*eiaL<_e3g~V)c(0rG3d(Zdw+v=svGk4Ja?c=vF$L^mT)AxQxVp$~Q(~sq- zq`b|U~u{xqwtxLH34g8(|<{Bpf0bvDHqeMYol~#)eFEk9ClaL#U>>;D~_wlNs z)IF+xvlfphNYDxks$VC-E%m?nFb#D(_n; z7!y7Sf)vo}BQhEie$~i5tKS!V9bgq?z2KTZXUYr{#Xc-sfavZZYYd{SOY7VI9*Bbf zSi-LVF&y-8YrA)LmK?;__==$7q0^_wCE>F4hVk&q!msQVPr5gv-XV@F=nn4{^A*g+ z;YB36*{o_gM7??RkAo~b7wy9i>>jiBq1(=%r}uItw$pX~LQyOPU=xxpH4K}aMf}$$ zL)zb-Zj`ef3jF5^SO0DtzTW_*fkT8gNs~|I9Qi9{x@A$*h^$Wb^SYN&C>@lLD3=)N ziGWGq?x<(qF3;(;=8M$jWiv!URqFA>`bmnK$-M(jSz`4;r#GoZ49&NTm!)hgwMq6aKQ)6XM zPx>oGUZ~P=81OA_|FeA3_51DYb*0eDMx9M()ljfC{13rKV5DSfbJ#Q|9nH8%$A^nr) z)|3{8v@O)rcNA0U_(&d~LqpApHh%tW)%<@+p8m&Abd>{A5Kk&b3LTCFL+LtcYppiC zRb^~O)B10~9uHOXg#j3~ka=pOKVug;OTlPw*>KA!vX601LCUWyBQC>(&11g3Ph>4s zzaYR_afATl4B$&vz_=W>4-9EDil&D9Um$KZNJM3^2PBj(EG4cPHE0!Kfg6ptGT=ou z8|@U>iiXy`cBpN@+vHlPQb{;y>-0)&?YQdP$V`Ns{$7OC!o<%2MlGl$WlAdkH`_J& zlTii|8G7kDoQ5Kqgdr!KXqHALA1x@;`irAnm8viswVS%Uj0qGk6_Z294~J}p18bS* z80OywK{5{*XLE?A{=xk7F7GW`HJ$(&uPd)XQzU@$R`gg%mJ8gr$+NirpM z_>pD%Lz}%JIrs~K-?Yk#YaPZMkG9_*Sl*CzHZFn6kIfT-;6oUH=vLJjZ-Sg`?$#-l zer<{i`}j*5$&X2vohm}v3RJ9+)KZ$AvUKN(6{)*=Rn`#YUaW7a00UJKEXZ|>G7UH&?kh*$8QJ3YY%AZQQX*6yIGU> z19~b4D_RD{qNTj_Z;K1)@%k-RbTg}!|5M8*7kk+jQ(d@(*L@G9LKALqrMY!{Z#NCj z@C0Sxp6XcYg(eFiY%DW~pxJD5$;zL6fh2=Z?;X2TN-1%AWo&Ad6gC)5V@SxdwCos! zl2yHU_+`H{@sSP@9_?fJ>I76I1JujwBuy>Kb`6;YArTK+b8zJ{>j3$;^nxM?@cdI8 zYOL8x-Xx6xOUK8(PKNyS1S*2hV0%t(q+X|!1Z8+w2Pc=~;R{tBjVg0xO2!_izNGot zA%JMZ35cjh-kl>t{GaY4tkrYYg2yWXQ)kt`hm;9h7hBrhM_r{D2B-6BxhsrkjJtC+askS~f8mX-et-o&%*3TpF@I&3``~dxn0hgP7)KqAp6)$D(~*Hu=i5&D<6f^ zdEJB@@AEOB$t<(tL}{DZUzeQF4dsG~EXAc?TP~X&^xgCVLwf_Z*aRwjALX#M{E*%9 z9rT4@tZ2yxqrQD~w#xJVn^$TJ1T2@9J*BlLzG{ELbA^+k4Z9h7>iRmE`yyWN_IXiw zET9und|1(QM#bb-qQa~&b%)H)$<>cuamnwJxo191_vyB%eqjE6Xkzx;^@&AX+-qi$ zdG2>V*{7FRx8Ci6=Wi15)_%dKwo=9<^;+$2u(~&s-cfv7&mX7kmxEe1ijCJpxMyc; z)pRlmw;VS>lXs5N%5dzFRtsn4ZK}Kw*JFRMVh@Ff}WEAVHBM%`l5dIQSAgC zJrtif@$9PX%|OQ5tg0tph{Y^((#MzaMR8?cA^&SG5yt8zhvXn-$s& zk9*kMLY*ZYKV{akljxUn$kpsk_)I~&%2ruOSAJPiEYjz&(bK8v-(^j`o~u)$do#=k zxzX&j7v7`JfA-_C-G=`#hGDO#oBmcg=Yit*RpGkNDz;L(aPar+97i=O7aK?Ue3;S5 zw^MH)VWxEC#e_--=F>0CNc$}gB(!pXn$f>dkQfQThNVf!MrOwiCiZt=zLUxuxS&Ly zaTC#Q4)%k;F;8SP`QMW{rFo3kEum3o%;wLJsFH^@`Mb9mW|nS3OEq}ULQ&(kcIP9i z1Jb93v9*w&_0ZWDp!?j7wR)q z7IEWJu0ng71+y$-6&QeHkkQQEzWd0>=D7`9=v){)$73&~30EI57gy%bQtpi@u4|y2 zx{bHT_~XX?#ZcNp|Jb`DC-R}r8;FNolLsx6u&@@J)n=X2<*E&K(u5WZG?~5ftR|;wvqe;Npm-k{0X&mk-Lu6LneY{l?@?`?1XCvt-pWN-MNy#ju%lMzm z-(x7IZuOn14yZ%2)V+gcusXsCP6xK%I|KE`ug8ttyq{(Bq#jEy3ZPl&GSXuUFFHgs zX6s9l-rW)DWnw!fGrwT-d{v) zL(1H(DQ5LFet)om^3nPyHUn_mLj@OvG;p`q5DuW~fWyzNCggkpS2-tGJ6NiFAC3cv zcc49et?wr-I{xQh`m}``w<;bCw-4zqS}CDOqq#ht?kXR#H-4`pZ&qgcbej+8JU08e z7$38JYqBH8G$;wJ8A{rEk?#)_U_|Te5V}8@^Ddrc{6TeJ$1ssTKc+oCtj!I61Ts-Q zZ;2NZycHndzimqN7q_z&KQXKIk68fcU)` zDK$a(Z)W-AOJthvVWBONih9chX)b1QFsgpjM=>KVo_gqD$}P}YTc=H4{gAVrs=n}C zkqlYN#L!J68Hiu5?%8|?8+e`}4;*nLTW=J5`maWlz3eD>2Zh?2uI=CKJw`LmiCHYh zuMtsygSHdTJf@%L@?S#m;(*VYeG&2pJ^es?ylga}b}Sb9q=juGdj7pwDF!QAXbEVQ z_~)ash$I_Ux0tCmiKnu_jnP%&@h+>u?G8@%@DbKY%7KbE=m<&b-2fvGLBn>jiHe0L z5W!l27z;2ISjl{zss437Z-3j=3FF&BRgWGn5;z}#@~!9TqQ&$yhh%PJ4x zsMj!UFUBbfhkn4c9w_8;6uONycDbr!GDeot{zPhe)Xi46R{Sl07cw_M@lRB|!T*P+ zcyzW1gE^jc-{THHx-SA-h(%Y9DU?x;?NVb@nii}v8D^aOEeG4(&1f~_SEDoiletWL zF%S9`4^%mgXlv<2t8)!hRESf93yVactsxoTu%Z`Pc$Msk^CoeEkRzRHkgHrt$bfht z{1uj`h4<(;W3@41UM{^`nF{b{9GliD5%7HaIzqTXhsl{pS#r(1TErPR<922yOGLm% zJ$;B#gXJnlC68m)Giik|=lZN@!wV3Bm%#N(WYvm)g3 zIVgpfs^J^Ae0?QUpQ)aPP-DT71*zMo5>bTty3<&%k50lb12G_WmOD=b!>a8F-##d+ zlr?&2bd805Ww$O8yO1kSn#{t&y#4~4@e!f&&9wPD`iv*yDG+Vfibt$)CSpmLW{e{{ zb8Yh)mJW;4Q#@UY<-0l_EtYHC0DAC;e*KZ8OFna5-E5VFw=b=jzD!7E79~OhT5Qg2 z725aRF^=f;ZtF-k8g|<^&C_?&zlYS%9t1{vdNbteG+(Qn(u1=Q5kFNI^^4=0>rDf! zXnlu2QtFZI11lK@SzpedbwaBkG%0s3CSo7RL-sBeOKsntLf9|Mc}|)}CQ>*yS@5z_ zCg2@>*wNh;7{UCrB~#p|stx4JxT;}!j2`+Qm|p4ib`8RpZyXPT8^YMUEN?1uVGjYP7W8V2#@V?@rLY{GbgW+vF6aq}a} zh^v`Tpo4T-B9qIPx+@m}Dw$MZ;CR#l9=T$lb~+@O=oJZ=aAeo3$t*!k?5gE~NJbyf zHWx7TcY-==vRmO`z#6QB9MjfFeI|}+CGAibO@p}BsfW%+4H%B`*6bRJS za6Ast(tS}RO{*TkiR3#-f@S|sHI~h}9s7eNcjTqJ4CJUG0BMh`1u!}a1B>PC;2n|C zt_#aHSdmL#e4_Whj`i)|E>?Z#gi4m6s?)>eX00MQy14+fxfEv)I(0vRkr`UJ*-2#H zanRp)RN5XN@p@cISbF@VfQ$@$${Btdj8VPO^_Kkh0k=(&(Wgno6KW=~S3!8xpa9@Q|pDDpgzLxBXj znk=d@yP5g$g%Ch=oCTzi(kx}xi(V_u#tg+Xfyuy`1z>{<`CdoQb(BJcqCwq@0h*IC ze-it7)AOp?gIrefglvWy^a#R!-SSu>;byZ2dU<MZRsL*7S7fm$8a<%UJBO1K0riQ&#D)^hBy9&41a z>7sKV=GOrw)+j5re#2`ejGxHF3L%;u#%s=B0E@4J$e;Un>S=3l##aA9Q&RX_q)T10vnlE&7#nuBc-Zr$Y}0Vfmc{BC!u9=s-cOtq>I#}>dWcjW%qMj z()Dt0Cjq%2P>bgjj4;*Vj~GiC#0WKR$@q?vMl0y@QbMnu$8Mg(>#Z_-qc;aw@f1gj z9q0~iwr(j0sH|Dj8}?|HR{OR)JS^YZog2?W+_(RH&xIW#kQ}1>T3T$3;?FnWn+@L0D0=6 zzy$;q3sv}Yndjpl9CF5P|j3ovdB;?Qd@t_NA4t9DLqyV;mJO zOJuoHp*I|7`dg_glFt|<0%L)9kjW%htH2YNFh|1A2Rw~36wU&KVNsZ84n-fP(R1z? z-(Jh@pC`3BIzQ^TKyM{{#k%IempfGe(7*-q-EA%KB|VVZ?t8IA=$2R zg2kx%D`wcmORbvXSZgkCsC>)yC31Q-<0)<7dE#&EKO&$$&)*6b~o86gVR3L9d{q;YsoRy?=12xe(T&S{nE#L6t& z^6r$`qcGv*o~%d~4c3=(*cNCxzUDAA!>|ff?i5rgjvJU4J3%kX$dnv z1?fETT;_O&41Bpkb~Z{l0z;FAbPJtHmqzpEz|HPCg-RiCltCup6C~A%a6ozL+o){4 z^>?re{>^PZs|uKn#}r7*9a?But2;2jY1!TGeasZ&il zAO21_kRMO34d)Bg6@w??T0)dd=U-_x{2Z_kCLUr3`*mq3Vm#o@F}b5>UGrI=*`Nvi zg~!rr>s|(p_HU61vkfUBRHoB~zfu9bCKy;jxMauAS-mX>n^W=K2hWEiVQSpQX(>Q$ zCl%iU!`{E?Mu`k>-(bx?fs=nYx6!I=S$-PznEMl4HIMPfuso2!&9(U9Bte6bN4*g< z1T|jhtn%b`w`pY!*vo3%Pj$Dar8MVK7p#-lgOW5ynXzVgs;8CG)5-H`yLrxzvEAQB`0wd4KZDn*bT>Ucbc$~2I=TSh@* zhC<(*Wsfps0Fs^(F#J>`yR6}2C`Fde<1`%(%GdNv%u2UxUHGfOKDW2@KDx++m0{s{ z^erQ^5dAkFh_wB~d%)qLXK?!=+_qn5P|9&f?D&;b%ERqNdqF z&jhlvY@>@&dOLQAhboB8k6%PaFgGlYzh^AzkMRD%ftdaRKy%X_=Av>xgO;+$T%Vt` z8Lgp)v88UeJD#~^T0Ir>LF0Xn;KCu6YxPLb@gpJO%RGA>BRKs6HT&biMI9CqRENFv z`=gyz`uzmhD_+okc%L|`_QqZB*3A4S&udUl@==1wGg2{V!Y6u%@=R5`XI|V~kDhOi zE;yv;>Bfb>n@6`+53KXtHg2wdptqJ*D}z$ej2N{Wb;T}sfnkJ=i)~~^o854YU&n<% z^8$zCkwV|sW-dvFJ3@q|vF-bwG>;hvfJlS436xMDxUY^NCI9fxQb;^j%A{$>W5wwR zht4hIyB(E&dvQ>$`*dT1;89ugz?&;z@6dKYnPeM|Vv3!iQ=r~;AehXc0NQ3OKlOX;t5oul7<3fG=LHrEiy|E@f}KDbbWtYXRrRmh6_=@ zpR^uh8XrSVMRk_EyVO&>^_8%+6Bj$+=f1PjuYGOi`_Ko8d3WDI3hZR>1yeD9)WcCQ zQBf#61|FX81G{wYEgZM~DGiUuk-FvCXWR=QH?ED7@N7ji+O@Ul5#*ie`c{xvZ5HX^ z2}Es_P}1Wi&$*f5M<{xl^*Eo-V4RGQy_bW(BxUe^RDhQoV4}Y^oBUxKv1esJtw? zqD*3h<0WDX-r6loZPi&Z2EKA(ta@tSr$0&lDqL5lf&AdGfjTeU>k`L^{oZ(=ci1CK ztxQiFBs`pKrTrAPQ~s|MC!hNdZQW*{OLK$Z>!ZUrclonhYOVhSgR9Evffjq&5rXXT zGfX@yvbwxe_~6NpfROVH~g0Xl+VaX499X)2gq;?~viS*3d`~zrK|?TMeyR zsR(Vk)|t=4)}89I`SvjGF1iNNxLc;2kN)+|pg-zc%ZKtApEpWIVTVQHJ%D4uEnNbB zX5!Qgh^w<5Zmuok@KMU}p~#hG>T%hmBLPZ*jBf!E29gdkc)?on!3RCLPwKGD#PpDY`KRY$W9z45qN_V)d`?QT$^-%_qa5 z%u$9S{7-?mE2PGBnzsyqvw|8jdN_vfxo=w)ja)gsp=6cFvAvp!NRVe7=`me@N=C5G zNT)beaE9}FYXyO-OY2M@!5aMrAeC?DTr6UPPL^AT_U>M%3)X#Q9Jg`%(I3u>yIXgw z4;)Vh`%x z#Tm4uKl!J>a+cb9ILP7J2vEuf`^oDI4I8#KEu*$|P65ArJ*k%aGfr;OQx53J9EHI{r`3j)$Mcc_cB(6^ zoUv79KB;S-{4pFJ`8tSsi%i$1=3sV0lQR?f{A5~T?o4o`3G;>A*d`rf`RuQ!XVCTj z^VFMpuGq5Y7JJ_6&!4umhYk@U@EB?3JA_?d_Tm>%Yb9-J`P(*gg5}DBxHUlTC5^g^ z$wsopQ_7OBq&Vhc@J$@U3>l%BZq1kopO;X{#*MSCTWy~<=}|oPtu>m^0s^xt2CHwk zpOiGlQ##X3`zA)OlGe#8cXG>|BfmPc2paz@$7TaDi*W+Y)t+VbbwI*Ni)rUzh`JlR zgc0bI^A^gyVdBVAmR_Ybt#9bno-s*4HEht^&HYo90r@4oEk-!3&dt^0J%^1xsnz`! zb6VweL94+-8~T2IcQtH-^BS7|efw9ySn>(6S?uCPp;AX^@^zOpyWKVM#_K6p_&O&} z7+eLbd^I)rwa7WywN8pV!p>zKts6-&`eqWd{$_}h6T}kWyQPLXXbM8S%Gx&|GA%Eq zS{+@oX4koLf1&^^^qx-QLSc1vEKt2`!MnW@s|$yZnasP0%2k(?6k zf@)iCD2AYmNb9pO=bv7kADSc^?HI*PuTGW1&&N8E94w(d5C)cZyFUhJI$u-~paOwK zTqLa4?bdp`S@39EHA4~ku#U8a?X=rC_DVr1pG>9!!_le;^O|iXPzDUf1JfM5m*h=m zGXUj1V@C@cu!v4y(G{OYsoWI(2ydn@+izum?XmONcv3_eiAQ%Q_FO=&-4OU7h`4^3 zskD8&F}>Wsx?r2of0fp#DsgrF?y+axU6t)+CR?$i(VRWwi|+`Y9V|amhcbj8|v?PwhUMGPirh?z<*jle?U!c>SyC zv4gdOX@%Pv9a>U?k`hfyndN$yqG zj+RLm21abp@)%++{UXiXf;qkYF_7S&fEkt?PFngq0s@d7({>;GmA1$948VFz# z7xj{3QAq}Wg9nD(rSFYVi_1YM2HW`cNb4eY_eaFwIP-fN>Ywr@#-v8GsqG&1UiiXk zwSJNn!{-~~(cO0(_6cyEZ91$f<8`?=7Td2%QpPg3-9c(1guNmIt}mw|0Jl zHdR7gy-xCvzFKQ#sYqtJtz(e1MUh`34XcqjA`H<GY(HBNAu&!iu1i#vnS8GzvoDjQ&;R*e|Eros-q7e^PP7sWg15G@U)3i?3(e` zsf!~koO2A%wjW=SC{Rat?;Wsm&GG$%qK{1mWR~JE8qSBFV2noa0tp9z`r!WeZ*Ug8 zzK)Dmu6aTre3T{i>Ad`1F=hm!gA2cxK2i|%O_N)Pj>{t zg~&nY(}B@%CyGXtY3<)KD@lRRC>_BPE){6@OF8nK@Rnd<5*$=yI=54LO9=H{Kn=&9 zQ{uYlc7AT$b4;Fzn*TrpS?)9Yk%J^5YA3ERZEkzR1^> ztb9oQNb7&b{19P&%~s^F{DnL)e|~_dP2bn6SR45+YaLX^a~>0*LW8Aj{8LQ#9qI5g zgXVS9!5--BL~vikxg}?VAU%Ck5^Uqm`HIQ&6T=I*gT3k)Or(PqQrjUdSTQzlrTeM_ zDtfKijJMao2 zEy;D}0b0ivt;$cVFSk?GvhI4E)FVmO9DMiIsYF|Jp_N%{Y@-K~*6~|Ps5L2bnt1O? zN$v+>s4=Q2`h`%X8swl}D5Z|YDs^08NSbQD3Ja3fRu=a+Se-{zu{#kWl>jI&^&NfM zZc0QP)(Jc#(5hctb;JCQ7Mb3147%vC_d%Z%hICxh!maC%P5FW$iE&vsLxJU|QTX~J zeL;Ba&rP_^1t>zUy4ysr->M!+5ACCcn)aWL0U9)&r7)%|uh!`&@m~p+nojsRtu5zH zs&>ZwVPvIwmwQ1|9|bL65?Rx^ZQ$Y{Y5PSVqk7lyK4Z2kaV0DrRu^2AeJuo1t~KU^ zY>t+nlbtr%$Ybj1r8Ri{WRxTME4rQYb}#8t$+t>witR%ozn6M{Uo;Eqbew1~ zlD_V^W^dMJu0}1Kv49<^;T|3Or6S33>qpbIEKFFUoPL~#Wdm@Y%7=&|vXEt4QyBUv zsy`bb5l1sq>no{}-!A07T3531aGqXN-kMsbUt==}!{~iqOV(U+J7XNE;D&;b-c_*@ zq5jih_-AeEB>&8TcE7kEii`G%YTKI5_#+6|$uQNtzA1j4zA3@XR(}GB3ad1KB}ANX z!C!9NG6iz;pqd|^eOEBpp=#*H0JT+aWpt58F)N&c9>(_n$~fTOUF>+|eQ5&Yt{bRg zi{#xY9?aQ)M!7`yb z=n7*ZH|PPRh=(~aMd=v*h3k>&nQSXn4QkiJt4^m3>}cahK$_AS(6fOAo!7^k3r6jF z;m3RgxW_ryyd1qcK5yKe?z52ir4||dcaoyVYJ1&a6iGJCQPbs$+if)qUb|%>s!fL{ zMqJDW#oUyjoKHMRsk$5R)d_JlxBq*#u0;NXvR&1AeTiu>k3K^N<85k_CmWJBj%$Hk zC(liDXFsLgDk{W3vQAQurf=`Wng>BD6ESub=lu>Y2K#17h zGu`0G=*0$T_%7=tysrxnS26?%ca-C|j20_EJaKQ=|(S$`@0vE;Zz`66LcudlcLVL48r5nZSEXCwt6$Va>VK^Sfm2@P{!p={2W zQI9aoCAaUjTer?jqOwmR$D>(fAcXvdF&|GkdKb6K3yFSEmNxU1A)=r4)mqEujN+t% zw+A-F6*s}>>g5pz-o)S(F9gsH#01?0Fcq zRh?o@^t#pJqB$T}1nqj;>BNY?bl}ZBXHYG{ccYzMEvyI5=QJevI&GG~-vb2}5_?Yc zIIWQa5>C>Z-V_5lQWJDJVu^Cu|5$u0wr>H+psZKl^kJQQBjLQxoU@~#OgH%icK1d-v6Vh@m- zKXKTdOBwa_efJO|^kO1UamPKnQ~iYy&kNKZ)F_(m0U$78BJrGCmYt605QW41S4u+{ z-{vK^Rfv_Y0J4*o21z>Ft#T6UhX$roo2_j5oZ~lsNEE6Qg*Hv_bt6W&-yxFQ(v54u z%4|a_LfVZ;Y~GrHs%^4bscM20iQ1-525#Gi)ftK0VNY&P_05sU z8do(st-m&_BjhW1uI;wkH~UMnA?%~!(^ok7{YE_B4jG`78W2#?bzQ@13tm%VdS^!2 zA3sAP)G;LmGz-Amf`AeXTe7oSkxYO6F5hrQMEzPgh;9$J{Y(ljyWj3zWyue_=dw+w z@$z7`=XOn({#HXvDS>ipI+-*$cVBcJOn&RY)JT{=C{*;uRVvKTY4tPOwyY^dX!BIQVb|Ws#GQp+0Tj2e?)R)zE*=7uvF%xN)Mii4t~5oFGL=3WQGmrd4xH{V5$ zB2No4c5D*L*H+$DJ-+V>z@LNbc4!2)VUegq!co!AaqIO%Kck(Y| z_ghsPGSWsOvCT0~D2OzDGGwblPBI^aI?&S>F>_&x(nRYR!}8SPl`BH!e+NO_$?5xY zh+ZKq?q#LDOPa}M4+J5_=fehIPRO7#AEw`hr#?<;l0Uw?a7amUNPk?IcDyfbC@7yC7c6yO8+fKDIDGN;pgOWNi?>a~tT^s|SICydi%3ww1z! zUw`vHHTznHiT4e`CtplF9`2ai$;yR#yJJFfQT{ONHTX)BV|PBefikH{r<1KVON z7#1!fEqdsi*AvfM>X^Fz+dfFkuRn>eRT`zBVhSFile!LJq}sC*g_g#7QAHlb_e?#Z(gvwdc2G=N1J@`0`H8(@U>iZ&fR>)+r5>6*t$z$dODgF_{M#NY_Z+|Di{>eC3@MZ zpXmLuj{x(rqkk>^#^=5WoIHEq?`=T0422;^EM%c4tQV%}KB-iSVi}P*qjuieGWFB4 zL@qwJxLq%5$$c=ChA_te?AUwaof!7VURWDC#^cpZyX|K4<44Ed>qhfo`ew-B(zW(Z zqv|XI8d_wCwwK?&I-hZJg}7-2M0l z*tCE6@bX}Jy)1)ya9bdxr(-i1tr1`4w&n>^c(Ciih(vrNy$i>D2j_itU^i2!q`b>N zzPx?Fx9zYi2n9&0JUv*B?b+igLmq=*2DctJ1^S`)8FpqTr~L@WF{cSR^zXZ0L8pp! zLGMo35CkDQsn90*Fqm*zSr=TdF5Xwc`6O@B^TohI89~%AW)>C}n%p0)3UOz*wse>+ zS5T7Zv}s4!N17$UZeV~XN*CB>`ki0N%M$%VhS-DDB)0jxq&C4uS7lIF8-osY-+ceb z9#AZmO-J}W7fpyo7Cn{s42?MTS=nb{Cc`W55TICXcFE^5Cxhg@YH1RZTU=4A>VPYv zeNUv}*U_bcGFf~j`^Yc$L9wqO+th*3Wk7HheQQO1R}7}?y_m74sfP{dwL9~dC+B4_ zlLly?D$y`+Yt7MREzb3_XIDSlX(z?Nh(S~d`L(gWv$v%Nq>QL?&Q~Gc*9HCLu}m~7 zh}$}Ug5hjwL76EB)pVnghF~k&KRTKjI5e5f>9@d{A<*jQ81J~aW&OS^$;TdB_Il|n z=Bfn46|oXl+TteUahwxk!N|&r^m^7r&%%QE`r_tRMNdcYuPsMGmY6=KO#! zdbWtAKsA-cJP;O(waecwRyz?exqf>P&%5vbbWyt_f5dhG`&d^HB6MDmh4ZCwwC1jD zu0kK{m%Y$@Z2c))ccp8b)U{&G4Noyt6zySr5KrGhbnTPT zzKX`Ir2puw5O+2bFWxtIJ(tZAdX6^qe#{04Cu^XM6WFrCwfzGeUwKFt-Kikwxb4+o zm;?T77#~cJlTl12d zCL%5kbP0X4IKLQEEzMfM?ag#gWo{6@bPIOd-q24P33kl zYI8=3gSdGg6sp*ilF(?ER!0ZlByi!mn?P0KoOdwyxm(?UAfZ|zXn;s3PabghUuOu% zA+tcgdV{UZ98zJm@p|n6Z@|qJ!>@Hf#1{mFM!TDws)1U%)AW!q=95{yAuaA)=oo#+ zFML}DR!sk`*DOF4fBx({Ajz}!yc1hnYSdu5pcT)3unQLFo@1CWwJ( zrrD4TXY~02xyJRNJWn)JVM$fC*%Z)&vu=96-5mCV3F%p$5Fc>}9ONsc0uWQcE#t9u zE1ph%mOO2pq37w4v}4t0(rpjb`1A6ZRptTBc%~9w0$WitPX6XBz`UQ zhu;H;A*fjXazb^z0}NOp9_I(B5y0LqWEjH^@U`-_W2t4Pjdr-MA%Z^j-XMs&U5TB( zTx>q=>O)8E@Mn38L3blB$>d=??Pt0bS~9yChIuKI)rjLa8%6x$#y^@EgVdb8uxtoG zTNrqN5**1Y?U13nX~nk}ShkL}&`U)vyXWPAi{(q80MkmhRjyp)U)xb7K4!kWUSt9> z`BKrwM46_Sn-X*h_@#jF?~HFs*mr;@Cju$U7HgIU(%Ye4a`}Cq;Hqn=>8VC8VoXnH zMFI}tw?Z^g=mtS8!DSuIq>2fa%$*cV*vp{AT)&~wWo3x$be3LE> z(UzepYBK{*c5$uNy>RBo8Oh`Y=hJ> zy4WDvPg5xt{}6K=Z01eFH`O-FSF5Gvm0ZVCw4=Fg8jWT*9BeaMVM5s@#Ho>JBSwEf zV{6agAS5cK!qcQur`LN=WL$a{U_qk?zp&35|0qZEQngaVV)e2WLeZkmXU3?fwwS8f zUUC0|(dMLJ??&I1IrrchvXaQ%W!Vy!V=m*`-_D$`?v=s95_8HnyLaoRF#B!7X)j=W z@J4f2?#ufV(1*z_%ZMub*NO^wXDQ$LF^DIZ!^WofJ%I_)$*)jtU0bJMQbfHe1)=DO zkui<0an{U(bnkoQg=l^EU4{>HC`N_lvKxS@dow-%SQ>2VyY2Hr3JNzaYTRvx6Bj1e zu3gO89YQFq>2)J*l-HXe#xHkg3miQ6`?f9s#b?^(-Dw8zmOY9{=65-5jl{(L$%4`9 zr%6LSJ^})Pwh=re-=1Kf3f4GGW)lQftF>V9IMN&sS7;6o@v-r7ZB8P15|BSuO^aB( z`YqdLo0{Z~fZl$mGijE45Cw$BKczS<8m4##vF*I*>O$sGs`q;9YqH}FU3IxmL#I|kQw)Ne4zIy+q>Q?I3 zxo7W%?p~`O7zZvkX{*r!P7f9dnd>h8{52Q5Sj7q02`8ddOGKwqMK;KNOXsmiI`dd0 zP865pESJ`kYD5ks4()kTT2wUF{E-+5_ttN^TzByqRX))jRzgz=BERogz~5vLC0XNN zC2cMyOT`l5d`fS2XO_`y$RrL=P!0{9HRt?sV3|PE>Ga6`aJne>(4W7hYaDZ58t%gi z4f6IZq!LA*NQ^{j18H%XpxuPDJr>w&#Ii864xlj;*!dv}ci2yDZD`o&^;yLm! zU>lf)u?Vx;mKfRfCBK{PE*Z6piHM2fCJniZO@cft0p(WFyiy`VL9!|@M`{Qu7awSP zu;Ef*pd>KA)i~l{$wZZ${Qk=O@&^^wl&7mzwoYLgT_2w|r7BkZ$xL?XXTR-MZv-W! z*;74C6)vWukb||=!?9LEUS41fdVTqBdUsObP#~ZxSWEg)vd*c{-OE(xUw}u7f(D)< zlQtGfGeG3pgB)7IiAW@8hlK5pY*t4I-mj5kx*t&Hjf-ADtfb2YVRZ%jdQ($@u9#*t zT!t%0k*ncCb?49^Zjln*NwMbYU@@OOU#^I)Shgdijft266wjod8W8i2LY|&mNSEBnXRi$aaNA{OR1ICrr%49!qrw^~ytmoa(eCg!TXxAF- zh+Lc|FH$NDF2cu;;;{K)O{IBEHpA#%-qtO59Gs~Dr#C1-J1OQ1tH`kpq{- zc3vXqIo&=~o7St=-3^*yJPpVpPtH#wYp-}j+>M*IMLpJ%ML3ZXVpksV-r{S*Aq6lD zkq;AwXGCnWhYkYC<9kW(M6Go+-ir8F=NHONoi8@s14d@4mbJ-twNJa?&Wx6GKB*rG z7o|a?=z#?uDJjTv1-T}0rb_EI2XoO()-311GE#RhU*~kn4(xFyAc|6;4hAPxN~WpH z`1LeWq;phnl?-shd7%e8-x20&OgB8+4HQ1??=TAP`Y=$s#d~^5uo%XDBLxFR1!+XQ z?vEyeENq5iunI`k9UK^$?cxb4?um2=ky3(F0dJ96jF6f;s;}$s_8t|iT+|)p3EJ`? z1Y6twp7(j(qBrf*bxZIhPE8N<3z1#ssflh)G3N{4VuO5zKz1}yvYVT5Br=)9SqwLV zoux>Hn5)WayJMO#^nbtR7!hM-8OehS>su-=JW?oZ^88l~ISz~pt0OV8NMZ$%qo%a4 zloC8p^<@@$`*V5y$%y{xl^*vW*WgK=kNIbotJ<_IlGJpci5@`{kNZc%H~4>dtrXJ2 zRMOkqdp`VxB?gxZxkx6Be9Su>qY0pkM_+gyca#CVNY4<#`60O8SJhQpK<998Au3k; zyG3*7SjvK}R$y(L2%#YoEAHtc&T5lpk7pn8h4wOhE!x}Ibcda^i2N8j?`RTxpU@LG zF>%4<%hX+pdP!d&c*YV*T7h&K~Id{5u-G6I@ z*fGgLRZcH&iAF^w&_ctu3YL{>6=JUhnC@oIt)JE_!#NfYs?gBLn^P>tKc z!oo7%MgvgHh=NC)=AFWX+}&FftgCD?!#m+Fall)A+wBi0K8_U;VO|FYCf$|k@=H71 z`FCCmVt)+FRT~I5R#U~?rPZ*y{^jWwVQU0YdamepyzJLYUofPkg_GGC=!ZF}`%-E7 z+`?9grx(?|I~RilBs|EV3=xS1IhebLQbI}BYQ2&yJ1RiP4lssfrL~8DNA?ol&gqdH zATOpY<|!n0W+8F8U%>Q!CP8L2z0ZzGJM^PRIuRK#v2=R6@FZ2*G%pIp5N&g_%B@a~ zBwPhb%Wk-{4s(BdMi+m{^{?vLB^j=77Xy^@2Q;7!%zwBrVmZDI(hmg;^bx>PO?5Yk4>VOE>$09wH5SJ?e@Z93ZZN8+R{S`G{tibS=b8j-2nL3@$K#H?VOxM1cE?Nv!Rzs{8!~lf+hO9pMR@Nr>V-9`G%Cz>0kf@HJy0$Tj(~Gis4o`Nl_@Y*K87X0d z10z4KmuZL=#D~aDCdvtm+9~JW-kwf#_`h+4I1DINQv8GhvzO>}{#bL#9~5v&UB3E_ z{q$jVLBv;_dI$*YcQ`zIbkTE?ApT|WuTa8gF@yd3dIu;+90GY^GS!HS8w6a>P?xIp zq8;~#4wqj?9i{#YvjyQj*V{_B@?Mmit@x*J|XUWc7?*zFN}mILD29nC*b2Vi?L z*l4}1Sf)(&C)Ck7-93d`ZRh$r{_*_ONG=Lc7%KijTxs-XIGWIV8Ka}9m=%NOZ6wDL z9I~x<>TzMtGO?VUFCoL4ZzvZy!|9p$X!NQwK93u;E!nx60sP0a2vU$c^#OBR6;9~i zdYzqil6!-)<$$q*g&G41%+?y4^zmr)qa%m>+P=bJw*0_WRSNrmU2+bIp@A>~2zD~6 z#Ine~!%;Q2Q8W0P*GpbqF#$Oz&SUcdpWxzQX0fe}O^gyrSS0RwO?P%wM*Y#B^CTYRz>lzhhxs_$k?wS2U~o{(qpXn#ZREnw zQyy@HDbpc6X3L$2;cX3CPtPR3LU=vhMS=tIw|cy*0@_iLEv3cpy~bj{OmKEYT?^0< zAyjx|Z@zvgh~o~9#R>EQ@UCX6c(08vtlBIk1I#4_WM=;!GXycs6_Z8$jk)4sR~5jX zfFdt>H*NnrHDX0o#Pp?X^b<)=lY?j92hYO91qT`^_j=BJ-~J3n+;*u&us@VR0Z>?_ zy3D^qb61;Rua!lw$E9OpV0WK8F3`QZ-LKZ(olvUcR*g99r>0-*#z;kn2X;1v2%za< ztL#z%$H+6}-{YdhZg%F-?5nA z{4=Gn4sW$bRPJNEJ06&dO7}f~T)xecB{r*q2#6(cheqAi3)=L+M9D=X746%#y8bmi zx=`J(!p*qV%K$9VX0>TQ^j?~v_PJeqk$R=oyJoJuh(A&=LA<9=6JtIXXMUpc(qAas zNldrgQZZ=`*t$CCaa8&=Mg0z=hRGMcWVCQbQMU~@-L3S*`msD^-dYSozcmcd73#}$ z<0oJ_YthNm{cWyCG1}LqKA$bjN;2qL`f(tK9B6|GxVv8fhdZTKCsTk~@gtb)#Lgzb zg9qT(c^rCw_pfjK7m`)Q4L_B8#*sCp@)t*?M5&h$IFW>4H$?%m#e^S&(P$EK-U?Y> z=4?UyHxfL}JoJ4`irV~Q)!Q#wC41k$8)@C$ONP&P}cCNo(FCUx9z4o+3r z+7sHyfW_bgdt-6)?tN?@Y6@%2F)cx~U+3IP&2uR;@!P&Y&qrD4#IQiq$$rbo7meol z0$H|4bva>EN~TqgU~5zlKC`^PCTw!;h%+xI_UPaS5>DHM@W748OTiZ*6F7bD;@OWW>n`iddslI~`tK8`pE@fTGwfli1P#kX*LRMqT28!|nFKA3lDeUj?kPf?Xu zx+fQkKcsWTo}bU@Q)Jdt6lN_sdA}nr72@}HyD)wB_jz#oetd+rd4`alOdPJt|gru!?(H zve-wDky{>tBzd}OO-|!0RiXm(rfe%;(b;Hp_WtO!s`{}zlVDP6P}4-1sEUmCmG$%b z*%b9cPo~$8RE`>FP;W+>}f zO^h^*U>RC#fnM8p+a6EV3siB_{kz7qo7&%pKM4@^5&_a2p<1i6^Dl=oOKe z4Ui_LCQ403Pv`Lt)BK_N^=wtC)eN=$Wly}Z;bdP)!^B@!Xz}mLeV)vcAkAf?k$yNh z9*iVZ(pR{BHFLqJ&g0?PO1H6%3jS`kkzo3)8s;}WL;gAn$2s|3HyZW?^^LP&x)57c{pT!v z&xmLWev0x~yz=0Q0k3B?U!`ts;jj;9#%kf^S$+$aXMD94{#f$awVGE@Y4@-6;aZM5 zKQ)%BYC7E(#Xqc$`)7-6KkaNphY<^H)Wsi05=g|XR1FRDB;)7GNmeC^f5jtN?AQU- zFq3mS@_?ri!`?QzQ)ykCWpNSF z)c9R0M3MdJD*Eg-quazo;|`>Rgqzz+2p%3C#@^blKz!JThu$p%5Rgw@vD`3a((?{5 z|0usFJkE$rw(VkJMhOs*=3QJM!|=NZ53Kkrrl z+Xe8#xj5iQj9Z~n4lU2$0cvoZ>Cj9I$Adz12WyYE-<-4hWA|3U@J~g2f@@ok=rkm_ z=&xdfEd0LH#Q@&5Hy_#G_}M7$gY#3TLh)1govV?{1x9`83@jyJdjg(urfwXadtOD- zDLcEnKKXQQB~I5#*<~kka9DFFO3{bGtH&hJxvtPhXs zK0lk1!L?&GJ6elbWqNx1EoM6+3qDU&;GCMER@$eyw%Zyo865-#Zn-98ZWy;th0rl;8CTmh)8sy6D#N=Zse zC~?IAmaAFQw6l{#Ubue>DHD^Fg?fEFDYPwhgp*GrsTozo^>0jPU0Oz0*xCn;Nz|B_ z!0BS(&hV}TDzYSsEV#q;Kb#5X6EPcbxYmYGr`@xyKF-D`{PJPWbayXdy{glgwz|Gb zeLbk1e3nQ71F^6t6F;qz6mGVbA|puR+0xifcjR;2&;Z!9U%Inb(nuk{$2BW9=i-PO zgAJ}ZtWINdb9g%sQa2w)SCi+xS%dYmd{$jU!yn!*NLGs(K@ZQlwNZ^oK_Q8}@+2s) z<;H$yA>E)8%nWU4QLqe#_ijt!391f;rjts4yJYk&rolwwli(z&f``XbeJDk zTkYZ2%fUOf zn$oA$fA}K<1a}OqZ_xrA(j`bkeF2FVP}CCu_X<&a=H73s!dyq>AbF;L3kb5I#3IS% z$iBFOPYspYiIymD%N`7F9kweW+_Dm3uLr^J9VNYMI(otcjY@7go-=ZauFWpMZ}_!n z7;vUhMs}sF0nWu*=%AqU#7W#L_f;1WPUzS{gRSquju|m-0L*`KIzZB>nlaHW32b2O`d zV!E@rj1?_hb~~m60Y-#Hlx(PPZ3K99APVm9;W@WzSVmVFW3ne=_85nX4ZywrsQC+8 zF11@E?3G29uMIiL$I1Mp_|*5+HPK!mW{XcDE633oO5CGUUm)we!*m=ypTfk$J&j(^ zVW$UZx6EumgOB)mq`rT5L#0H1FrCR{rm1R3qE7;+A`b1FLKe(3SL(2WRZvND5H9Vnf}7pH3!=GTOlGibtEP;33% zyj^l;+JZ{MzmEE9qqV*iEn6*4W3$b58*){1*6;k_BAObwjB47!_*|_r!%I-G2fQjD zBv0oslGARxlT24{Eb3GDn-HNt6r{PPEGcjdl5KpJZ8tvH==DVfSNE zqUVV%lWJ}DH)o`9n~samCDpJpq#G0TV4Q+HA%i{cmDp{tc{yVqm*{%pn9ATR8~N6r zi2%mo{cZ!EkI1ohshtK=i7>s9+KyjL znpaD7gO%X_*>nt4fTDaO(Ic`zWi8GNfz8mE=v=jD6|W5+@3<#K?WP~qgT%acUh%Vm zhU+RQZ#-tD9miw2{|h91z`^}`lVJ?SiM2ej51zw-z}{xNPN#IUW02swbKT(2Gv%s+ zSzG!h4>`Fy=KMAM8=`>RJ39N4dInp{F)1*Yuwcc^)!pHE|NK0PkdRP||M!=FQ-j(Y z?jtSEKbVnAeCKTxB7Mfms151zz$n_W!n?mL^e?^z{t64Vcb&=Zs0&G(cD+;Sj0~Q= zh?yX-=Up8YgS54{ZPab#}DvWGVs**RqWXdt)ojR;pEb3 zpZ8G^UAXSp&E|OGoh>R|*!DmcqQDjcw4l;InyP=P!lRa|Ep*%1T{U1*Y&VtKRZWxW zm7wDW3OvNyVM?NsP>GDh*#*jMJZ9ks?wM|Yk;&QatROP z8=Cyxta?hpQbbNZRPfXg+6u^qa)>xM61mG~pIv6`;GWetfW#;hX+3re-7#085{e+t zMG_gn4H*I*iDT-zld9qUsWhlbh%sC<^B%u3#x=y?ou~k$xTu?=_wgX)D!)J^OWWgN)k-=qjnQ2uD zT&qBwpEukIsbasHbv=Qx5vR76Y*z2Ug6bM{^z{Xg zuBB1|&QBe`&H$#kT(|f|n-u>-Ib0x7EFR;=CIE?k0b;@$Vt(ZI~P?nVajdG^uqm$Ez5ywB$osgKG21`7)2}!CAf%7|G-k#Rwtn*1y$smV$3p+d}nm2_5*Fk8mdlerF#$8jqc0cwIwVU$IE9{vk_}h zjLh)rW)iXsNuG?0b=SJ(rkuzq*H^diP(WT}4`4nr_CzCzI zou2__s)sZrc6+iX3wLB9T*zK^$t>uO5H_0Ni0v*U<_x-!?P29^Xd~~qbYl{ZoK3BP zT7H=+#3ownr{{#LP_{g1#OQv7IHrw5VSD7<3GDp-iY!rX~$1VRw zr9ZCo`}AVODNF7UA><~*uJYNj8^;^jCMzv)zWwO%=J9E3ssUp;vkq*b|J=>zM#@_ zp#}-XN~4)s+}qeq+|P7alH8%!VEE?nx{A}9RVWpg7a6F~>UPNf>9yHv!$YHP=?{p& zzE_r|>R7MQLaB3b_#Bek=yV6Hv$fec7UNp$$f~%I;R9{Z9%}b`q<*^Eq|ubjuqXm( zvKVY~eF{beRP58mH10bgG8MNph!o3=)htE3q4R*`t6q_R|sEr%A5 z*7)t`*A#l5`1zkJluuf_jmL-D!KYj|xV2b)N)7_Jo`{}!zKwwfDi%nY_|jpc*^+!1 zTDVe_L?eGaH1I~wUjk0C0qr_moIG5`=c{$r3U6JBJWpWz^!UJB~`Su*4K2jgZRBSYfM_4>I!9#A==JB`m%jvguHAypjk zd7a)Uy2J%FZSZPFo=2cr{uxn;93V!bKRHdg5WKb+YTX_YoxSf-4PKFrKh}(Sx3<}( zYNNiL4}Y|&-l+NHU3^|$u7Zx!U-rJvSg&|Lb7J!>t9KBTDH1E9BHg%hNK}leuecH6 zw$n=#ILqm9>QGH@_MC=wT4nAv_cJv}Ldoj;!_0eA5)3M%Zj0nNN1Mgg-AtPX;p~ae z(3OiL3K!X@d>>h@uOW0#Hqz6=RAG>I{LLB@{f)kK^(hGN<4S3>09J~vFiSVn=+?rO(H*k zwMnT02*qPFPuEnzxc%#R44(N&d#7aIf6t_*OVinu0$lZyQg}9fC3>|+MoIqOd$BEI z_XSJIZt-S|al2Cq_naFk>GD_rcrsE~R=NoimK0ZD?KSr1%HP?dl{$Qw>WS)9Cd_&5toumINp6aB~yD9ktzYGXa1l7Kh8QpYKn!Kd)=E;u0Y(9?R}$B?ySPxw*3^q6h?6 zM8^8wbq&1wLZGDMWX^~|m8m{%{BHCDLyN!`eT&pIsX}1_&r9$P`(s2rTzHgaCpw!* z))1bjl75{Hw2;z%Ob~EPBU@sO@@zMUNbs3Di-+zV3&6s`mby7Ub@#WmjU6wV;!22q zs9>IB?Ohbo6tFHF;k?h5`LM_eG-2j0`y2f7sUx~Hk_%&m!tu~`ehtRn9IR_ralIWA zZ$P9se;oe~5by{0*zSSEyhWSwKJi~^VdEId)gr2GUKU=^nbSdx_jR_w;(xx%R-0eu zpVmKx+VZ{a7LlP+c*8%+){A|vaP_tIy%YaOLK}c?T*mgi&iN}@JP*Dz1?jc(W~+#V zy=WTEH90s8D5kAq)SV|;S-Gf?y1q495SN>gQc#e@jHzyRIYZE!j#I{k8r+k&;Cg`R zI-S485&}4oo(0kNDCj5z@?c>WmMD)GPi)we*29U_d(B!4sxHiTDCxCzQwuV8GGG8b z((wEDZ%Ee>NKH!5Sb&`rd3pyxZI*SLxS;_Vxbo8CB4?w>aivJ{neN`QG1f-*RonP= zP4G1J`4tfXD-o`q9Vw*#I#Z4TPK@9b^CR4`hEUZ6 z$tFd*fD=qk$WYI(j;&ySyJ%&*vs9!qgPJ(?*X|B(-^a`$ksQYfu2lu!)F>QL@sb_tovj*eK~@$3;z8B|aM0OrvnC_!Ly-bvARay2X6q5jtqrKW~9 zslktm(Uulbm@Q9>`vGi7(GpHa%C8WJ)LejzHRoK%8Si3I1Ng>r)9$o&o@@T$YzdFX zWB&hHk@G+;QqV}$kleFqITv2UMHt#|#S5bQnL*(L0sA;Q z@xJQn>PH&MZUZ6s1zgNPKSd;^Wwjq_TB7qvO&g#Z21|M>n>QasY?WP<5P_i5FOI?! zeLP_OFf@0n=H&DK zpWrHfS(NHlEba8uomimCiOO}RQ%pX~CZUW4tsM(G1WWy;WP0}#5nV$1HwNHUDB>tHAu07PK~#&dS7*E7 z$l%48vN@*YO?R&4WML^oae7%DQ`+OP;fsgB~rV&vX3~|@wUm+RWA76b>{iNk0zlk>9fw8tE!z7CInq2|V%O^)x@r||8}S1~`pHA2IWK8nJBIU~UgzXYGFXxz~S z8`bml4CvmAWmq3lQ?a?U#NV7z z@J?iHPr$BRrJ5>cDJ#(?m-c2MBEuC7zwb~vVt5`JJ+J3CZSF}az= z@?R8fR;$N8_2$&(mM>0XSh_ZL!RNrs8~Oyi#p611G`-hZsn|8*n+Hc) zKOb+lRNqz{g?{5+qm9C^i>Mrw%$^D9dgzL(>Wv1S&rcwmOjpcNDJqLEdAWzzzgR8m z55H4Uq5I81UT;3@3uG70+S>J&v3fsp+7$DZT%BUfAPwTQvYe--eR=9-IBdxJQ z#~}%|!cU*mm82*s`{+A&Q=~~q8QyPWFN*L(JZ%E6B^t@?ClufUTk}k#j&b(w6ykML zmv9D?>;KGH^(p1NPd@WR*!=2-)i|vFCoshUeQ=2~B1Q_R8&Dx#0%SET+*kpNk^&G2FHkXCZB{JWyuk8vXYC7~{~!6_q&F zv~e%Qk6(8~*HGr@$L=M}z8%TLk%HB*mS2U~JZ`iTlWY}lV#q=%Rr(hKoURrx|{W)RvM7s@Mgp6=1;ra%-XX?X<&%IthIihkun#)E@%$ zuwdw})QhF4Qw%dDUS}wpbn{Vx^0t%FE%@`uqs|Y`rU^bdVuR=HC-qwgNk4xdPrIgS zsYBR7;7qf~)1rmlFGKiaJSG*6r0?FGnLT0C2l$z;MIc`2=VWSVz)(1DX7$w@JU-{a zT46P0@j|{R>&Z=p7F!^Ay#4@6M&WaUHcWNDHVH#Qd()#4afYoDf=Qo5MDl|58LEuIwn~YPnsa?cRK{E%wy+Xc*7z>C5Db z_OHLR;X_NLhyTbhF&K+LoLZce9%zGCqS;?29-j7Z8+3GZ&1O5ir5b~pE6V7+Ckh3U zdGpPYcCELsai08m0;BDGy;8kS`mh8dz0pEwYK==dCtl?(NZ{~g{k}iy(T;xC za<{uiXMpN-0#|A?z`P9?r}`LkPVNIaua65NYik!cP=?zEw`TWR?D4=#4D)QC+aLM38p@ceJdudQH7q3c< zL>UEn!?9W5&Nr~IYShdq*cn_(VN*pBJDhk3wspl-wg0*9?m%%lZ!5K4UszW7K)M$>E~3FO z)b9&o$D+Dn*0&-M=s=32%Kqx}qP9#CJS zKm_j2s9 z&?UocO+NikW>yo}Go?_`dph60*Y0>Bz;UZG?NpOb_O7$Wb~8XwGDQ-a=x=uI8ITK@ zfbvhW$wvdeNI1eCLlD7_d~!Z!AfBswZfxVAh<(Xu?r6uU*6k$E5*^q03f2eA+PD0O zNJ;`pWyoM?Dg4szLIy}L`ujZ39DGoJa7IlaHZuRgip63v+nHAo0K+ghZ*@9^=H=t7 zGaiI?IbV{?N)kvGFfnj(&Y>-kNx_bE7hydQGXs6Zqy{DNyq{3M9x3d-x9dzTNZ8?~73_jF9+^0Va9ERd z=mcPv96#UI2K6CmM072LF0r&_1)}kCEtEHzZD|#bAOpXAy^XO`{G^LGPAyeYy8s+M z?&kC(o73CZR);4~xNpbmk!;VzT&1OnZoB+6B5C{6g-AVl>_FFt(#ttbJyD$ zjm>5o8(ttZ8nxm6P^`srHC{nsA(LTGz=O3D#Wf-$G4WsLcl({SSen}Uy2656W-mg9 znPZ0FJeFR~hYW#4*(>b<+sdxL*-dyYh+cH#N~fsv zKxsEeSubm3H2dM?xxXa1vH0axOMZtCtX-JD207npohZf%D}%`W zKE@c7A(sMMpkyOM+kg5Zg*%N=90h2$>5(`eLNQ{(E=r<^r)&8);QSGuCW?kC?YEiV zVGEL6>z<`a3-(nEtxA(zO+3Y{L05EitFvgZBEFfe;&BRh|ITPfrowSmdQW%#nDx5) z7{p|~v8B77Aedb7o^GAL=*?wuC#u%(3?vHPMvESj-61c!`A?()IHN4<367l^5@5==lB)q~EtEO-H?3BMU!B&|Sk? zt448tf7FW-CvTaAncohUBBLOAelCF1tI2fL-5$Khtp@1xMdJ&w zY$Naq!2W_e8aN;&{XO?!A{mA~N524T$lS5_d+r}cUWqEq+Y?Ylzq zjo4>>sN-eIHQ<4&a?o1<3qIY=$pO+(WPHo7;KT~r3?kBLG;~np{iM3X!n@e_aB7+pWrF4rWs9;h5$tj9Nzh#zrKYuyA)WE!qUEeh}cMXMMoe9v(jyH`X3 zaDRXS6k`9(*b|9-quK^WjA2hs)YTN|e`5dpGape=P-YUmcK>gFSy|bw2&BnfWGg9` z2Bxy55Ced25@hgk@k~nPz^~$)ev#?G3D~;SCa?_#KU1ygr?$_onoJ`Z!`qKl{n2rRSn<-ChwnNCx@%pDK;BBMwgksS3cx#e|ZKgJ1*Cn`ku1AZ?<@R>#e`mmRtWs z#=G-fY_$_yZd-k>c^$+8>d_v5q?e{>81YZvU}eD^qvIk-*5`%~dlImzj~Z{&2dz9Q zs#ErN?`JX@R0j4kw-7xxd;gX;L0|Q8huKgCfdOl z133oQLHrXQ_p3audb5*-vU!{g28>7rol_;R9~JPpVm2K|K!3d&sTo<7ra8IXf+G6L zRgnoWrKd>>y9$RD@&MyX<(m~+gd-kuWuKeF^w4VD4>RjuRqE1ZpYb^d2dFk19deKS zOLXgjE%V}%v5U!z4%HUXTS>qB{vQ0M$Y1+@_OyAuq@;`a5e7e)r$Kilz&VN%BKV-P zlU5TTP;9-!NLG9sPYwhkjxOb~VrXXa%5;cJ;Ol_TV^1(tts?)4K-pB6LnNKK z(gToh;%)xUZ|e-FG#T1m^Q5vn)D>$X2=~;eR#j@OK3}Yg&GpYFxm)LCRrn|9&VvQ+ z|IM=-&Bj4BM~3G7#4lJMmAc0xi*@;J#l*rcC^AfX(OpwQ#L4pp*?B(Jedv!gwyFQ# zytb3um?`!V93CGiQs?UOSANzrdu!$Nerny9a`*+o@x95GhskC{FeO{4hGi~mvp?jg zN>`>JkmDed6bxuL3dq}VKY0I$WVUK}R;+x}6xBcZdA<4c&|oyi?!f^l3k!=7qua#_ zlWw;k9)N%WGw?^*J35kXOk^{aNxm}BcqT1dz?_3GlI|M-Y;wIpDUt8bPwu?Apy7*; zd5fEaE?}9xzbB~iDq#Ba3Q}7j0k+t-iydYoS+O`gU#n@8?g_~R!Iqyr2%DR~4JzRA zmaJqeuT4|jQG=%Pv@;QhvjEVR_t4GXuw#~IQQ0C_BQ ztqB5qosU(EADZ$qTd>`XI%-@B)ksaq;#p-hL^?>s%8nav!Sj9s{j|Xq*XbS?nRPUQ zihXj@-!~(RIbk|#Xm>g%_{+a;wo*rT72?mt+wzmHb@!2Gvm?vrWtzrEFP$wcH}~Ld zO9FzM(kt@Rs5(a!MU}=Yp#Q*zwE1X(&O|A6BSwn_wf*xoLBS z_M7rvWiA?2ZGO8(E$T8hHvW~K42fcbvUf5fu-(kiO>p_h)stbKh>3^&m?4e1PK-;& ze8Igm3^1SAH$L&x@Kp~NPo{Tk3Vm21N1P9hpwvpWLV7p4#Nm7iuchT67_8yrYiQ(F z3ba8qFA@SvA~^^ZJ0*nfxPP`JhY$8K`TK&2X+flh+Uw<9m-$M9eCIcvJL4|hYjfq{ zda`XjP_i-0`!iU99$@lsC)ACEz#roimzdqYMw?Al2jDn92hCxz`Ijq` z!&bI+t__pVt$?sC>u%8_1y3JZp&+7S9-zm~lK%DF446B;xw}JtpPHHy!{z7t>8*L&-5KGD%n-A1=ZbsVbHE&hH8bc#X!M-3bNsv%BsDEd7t46C>{jdcVJ|Aa z9|pH`rmUWV^xf!#22l1@MA?ZYJK;Yx=K||!SS>hWJ})~5vTvd(eUqn<7L)Gkt3qCh z^9?lKtaHl3u7+Rd3K_mk(vl$J%3ki+m?3bC&!I-?0m+Rmh-WLSZ5^EIDI?Q;pZ7nugY~+$eKjmZA5peX5ZzgM(RO&fh$wyLo&3fh>MoiRb`AGB ztUcNz8z?$4Jc{$iTu!rn^aD$hhDx z{)j`fWqcey#-HSX9jS6gr~`nPs`cDp0K0Ufmmv92fsN!b8X_Wo>w_}&TNq|<=$mwY9ZH%?-7*UJ@ zjV;U`eIGxXeFg<6uhrq--Wmi+!~nA(ilBkEBo%#b14O+$pLC&m3fI+fvx?ouR4cgf zBAP+?skl(RA#SESKg;w!zPJ?Bu;nhXE$bsaRB%Z zXwsyUonxB(W%3od!HLP;ZrQdUl({*Dkm%Ei5+%70Kes`Q9Q@vY5j7s44;#Q^2p1a}sitY6H}fE?smVU~lg7z=a9=P*6;i&ONWYez;gjL{m^lc4p%t*>dkaWH^Tg z9f*^q|Iv;Vj6B!neAaCqbqwp(y$MB1a@i*mM)0 zs#l1;^vyqQ=HA`$Wd-_j?|v3vFIrezJKW;-3BF;ut7Lh5R}M6laCE1nQKJX(Y-(as z<-+kQY+y+72*F696K`5MnH)7zaFdAXtvXseK&V3-4ra37`+B`bw7p0*=+Wu6Sc47PZxDbD3Hoz>)Z(!`7@s&}Pv%5}em`u0_ zLrw5ra4`&HVdDhC&J{3ZUA1AwXsO){%hePkL#eBNO;-iBp+8<2N$VU84{5vPc`h}U z#Q6mhKibM}vqs&qz20;!yuG!Vk}lk}I9u!r!^B>#TJLacaPT1|?u~{KcTb1->R|{d zp>%QL%2p>QBU_Hipy1$ANNE|2h!O4yfC2PC?P*#eXSasPglgX!CZ0IEAlWwat6gpU zwZPzqLK87DC-ji2n{AJ~pTkqbxck1Uub@c@&|*dT*5tX%4L}-fjt{2H>6QmM*d={n zpwVw1sjQN5%Cf{FY>LCNKpfoqx2hd-vRV+FH7QWa(-+ibbpGI6g@EUzx5^;**mO$Y zKrhvuc~y=~0Ra@37r0wk)G6sOvt-os2=O$GuR>Tt7^^>t3h2{U4dI!czx26lQV|Q$IY}@G=9orq-wylnx6Wi(7wr$&X zGUwj+yEF3-&fd@2RjaDjTIFJV%d95iK2~SfU>AVOWQxh~t+0?eL&--#t-}HxPXM^w zrj%Ms75`9gFh{h0P&vSu{&evnAf0RF1>cqn$orm!hPOEnn_2=_&@ul#vV&yjPRmxt z*Opx8CwKA&-FychYRfzDI;VduFYInWTX;hS{hI3DD%`fH-sV$}b=hTHmgqfcFr<5? z>Z4wJOE@z%$@j)s0*y7xtD!q?+~OMBtWpIP?p>9qc<7GR%t_?C&-D*jkHlmUOQIGr z6MooPHalcimjmzzcXbJPd3)b{JZ&AlbQ_1F_@5&+quJr&n&SWL@1vag3#50so%MOt z)No8(E^;`048M*ozr!VgUoI;ZplfzxzB2!a2-}kt$dpHm_ z0rMQKM#jHu7i&mu63JJnGZ|dkgwcKSTm#L_ zlq3HbTyc1+vs*uk19UfTZ35~j!Uc)MyVbimlM%{-s_GebnQC3Db23kK6L~5_?w{zQ zg~x1&9yFMuH1LC57Aj6ygc0g>qGyh5vw+l&?saq~rrNxs`^%2E0nmcke3x7ZC2=UI zb>C~jeMtbHE673_MpovNDqV&Gm4Tj!sJP+!GedaKIxf&ot(+ZNq^54NcJjK8tc`iiTsd5g7&>eEAL#3%`hd5__WHJm@$rG7*(Z9 zqxk5OrLejt)b{?lzFJ`G%t|QFqUSNLXKG{qWJekAb90UfDb&|HYXkJaPLh(&DqcVE z^DMT%{xsjw_YoX)u={0}Tv*6kp)>6#CHca+5X6&|;!t3BuJ{-G&y$AKr(jNIIUMKv z>u8c?iG*?OJj#`av)%1Hc2KBzcZ8IkXI}pPGwe6zLP^R0rl=s0Zh#bpVikn@S~>|`nL9_Wx?%6D^fEvY4u0jdpdISVybnf zy1dpac`%&8QUNXcwJM61Wk9a!?vNP$5L;s){` zm#=nYi$x%Pm?g`ZH{W#;w|>( z46M{T8B)?MJ)6roKw-XU-CyOZt#gi?9J=5)I^9-08=I=_0X;U6yKhTqV^kG($JPVjUC1A)f=yVeEZV$x(gg!hP z(61;2X!fu2S9RG2kbpwq-rT;S=`Sv|FxH~G%dD~4KQ^m>sgNOgXDmpyF(UiAfC}$T zG|(Y-om|baArTvk=r!VJj_%Z=`B`0 z1EghcOoW1dE5g!)E-tFtRXLg(D(sVV3F(c09SnQLi`(P*iZbbXTIy}U_014r zUmSt<;S>O%P`nOwdB6r8x8t+j$Iy>*D1M|*b~|cIuAxm6xXYRI+p+&*HpAa78Ap$O z=-cAy?cbe1u`G<1sZ`VDVw;}vwSEBFLM{88F*ZWs_uCVHMf?gAGV(&(jo)Kg7zwEb zNQ3>&i|(tND21$tNXm$ZbS$z%2ljiz&rL9p1I$O2OPd&H^R*~wHS6H>LlBkdDB9%P zi5yT+{PBKtmyXuIsR%|h$o=3tz&<>O8$7a}CqlB)=|i@Z1Bkoj5foWUD zEyOj`x||1oxnCy^JBfH0Z<);Vq((lMkSARVevrn05qn-0aeNRHJuSQn2fx$ zJd;!0jDZ5>>UkhA_7HCTdhy!$Y_3O&k^tBlLuk78{JIrIuvs`=yb-F<9*2>_=%jxJky->l-xt$7(pVa@LDK;%EmNrlc@5i)8MZx?iQM!PFB z%X|4Goy~!9|9&#W!Ord)PK=diy4c9|QQpy=_VKrL9P~Z}XxkTW^oI0tAWNLDHvq<< zYS6pvV2$@UD)sz%kJN>ZpH9}jfj)LJ-&IKVooArUZk>pGABVvX}He| zdW_y?@VkeMgrtaxdJY9OOwuZj){8W?q0w{~g z#80rRRz?;T24>^#HE%}m!RkCx7=iYG)nmXopE3ClInrY)6Syrw%{j_%PzA5{P?^$3 z{6zn!AY%xJYfy1uICBE!uIBg%&*@wa0cc4h>lpp56e1}xZDH^k4TsILpj!uEhGCqZ zI&`7I5vs6_>d!0pUrR8cYDFED>9At!keHhr65!3PEv7*AZew9A;V9v%x=)7}I|aY_ zkDQPM$?Jp32fywoQn4#u6mjWZIrD9~L@5K_DDZ#3o5r=+v+JE9o>(BU&h%Aq=`k zK?~6Pu~@Yh1RU&@u|s^y?&FW&}5;V!kC=?PgJBmn2MDgZae>uPwlFl-DFWK#DmMtraKGWdp;JK`ib0Pa`&w}}i z$Ew?dt%<8l)DgN9nL^K(?*#{j#-KD#ftTOEM5ZVNFE`XD03Bk1+Zl03Rw?tJ8~ZOkb<>+3^I^*n?mJXn1!y(sSb(EH6wnhD>VeS>TGT z{!EzwTo7`W6yfdH*)`^F9*TTad^hBjRYtY6eaETy@C4iUsmWjD>{tN=1eNkLgGuB2 z25D?@|B8xo_>)SxU3SqrUp|NMHlA9e0l94Vn_Hp#?$J4K?+ds2-_GAExc`|pq! zOiXho)^mg`e68@n`BhXs#rmEkA}Rbt27>?_z+jR;zr0M9&9VWeSRcoZuinxO?v2CD zjg8=}5=sn6$Os7Hjc0)=_XD<&{f_y!OoXksP0vZk$(MCCFTh)(d-CVX#EGIC9x5dY zc#(@;@6(zMPzTW+h5z$d_g1y>QMAw>9v;C+l2kbEXh<*-Tx!a(U-RABsUbrAcLCL- z?)NEW^QlE*r*>c`x6yhIB~c-L^^k7uK+dK1&q7+Ad;-0J5v5PRC&|s{f!IxtzP{Xk zDczcj!TYiTgWlrHoRYNDBidG$`0IWObtA|<`_*?4ikWbf$Wep~%AZ!P5OL|af-Xp6x%Af?tv2!WR8 z6M9dJd)Gh$K0WMwKvF1>5t-~gexRJlSbujA+$ro^Qhxf%6vP#6S4=9JFp%vlo`HjN zmOhI`-4>$Xn~s$G_bj*i+0*?lR4ngr)@=Q8QTu9x#V*jqD=c!36ym{rM!TU5R$1-U zpRx@d897|5=_;qao;&;$_AaZy?ZkBpn?@>_Es=|V@)5AZV0KR^?*>kFXYxcNy|$nka*mOHJe7}$Uxo!~d&b3QQdc&s@MSUX zx3LFXBs^6I>mQapI7}=)Vm!Oad%pqDiqd zNN<^0WM#i2-$?g+G)>h0|pY_5h4Ui0(jc6#ko?PnKIosawU7^CBjkQ&q@4p~{7 zz!}`#iJz^sGUs8fM2Z0WDGBWp?}v|>4O9)-7Z%S*x-(;&tu3lI{WP?@HPAd-%??7WhbkHM%4-8Xm`AYuwG# zR5RjBI^v+{wTx8sVTEi)+-%y9iK@|N;-@jA!^K6#G;O=~SpACsAGLe&|uLhn( z2M?TMOKF+&YQ9dj!Gr0SR#)NCl#t(tC# z`;(YHv0(2?{zm|O7}-#)Yt-S^?WSepn6PM7XwZ$PM?~+=HUEha^W`c$pkPCrCf}(v zUXgg9kdV(s@#hJH2v-sv3A1ua3Iz%(Dze+dYh%bAP zSt1o|C#7AVCkXGHA1=(qMIE*U^~OyUxp2UdUWqqEyixWFSujh+I5aylp%)#3VTdiH zAS`8yo*cCzs~9l9SPoYT3yb>YS$<5TVl5FFTzo5s7BWib2ntjfpwMsG?wN~#dp!}x z!|XB>4)BG2qnUl@8dd{E6ZZ1jGxnOZhMBxT2#5SHO?7uQ( z@3wtYiCY#S4D2$GUL-l)r_syKgkc2PAeLX~!4vE4CzKa|AmrF;2V}2geH$+ zeEP-6tf1NK97%u0E&%;LJ0xndmm|(YBjRn|usVHspl@AKD;0}@m_xj$G@mYYw4dxq z9XU#m-te~RyIu3BJ_07ity)<|9u-m-4B+zAmAnyERh_!bI@nC6*9+{zq{rX_y*FyS zCvMY+;24bf8^EZc{0P0yi5dWasu~PA5f`BfG%ZnI15r|Y5I%C{h10P$eV@0rO-~0X(<>3_ z$S1zs5=TSO7NY6(1;~r+AzE8FH{w2Y2a+opLn;<0IoD{F^jEKrm&J_M+ZQ~f91%nF z#ofr1s_mWpA+A61FMl4bwfvbwl=53=Z*I~>Ow(fb3HF9!`p5NrkO~JBuQwCrYMfRq zLgHaS_-^`(z*xGk%OKQSqqL`PtcOT%&KoHCFV_t@$xPf3O4UfQ8ojg@Gj3Ln%g z8O%{`EJ4nJGBg2X8{AJM7I@0C*nXgcr zPx^R!nC%56>h{eZlp9Bj#jiEFy2`Q_vHngT0*9sYM=%wd8R`2DlmYw&yeS7X*^zC1 z_|P@~;`2WfU|wHFup~-yw9IXG47e3~1(A1O z@kcaJxPueGc90)x!RkCduUJ(}oACt<^{Gc^opcV%$k(MlZ}!U|gRZ%phkUhsqbj$; z7KbNT=GeGWY00tz*vawJYY&$$lxcwBuVGdhHMDH_+6*NSe;fsfmMFDhShT1OK`4N= zH;T(#1pZkcWsustdtB@6-EZf`jTqlKrBuXy%>J242`yJyW{1jDtBi==lCA7qPF#mo zh6{J@x=MJ-RzB9u6>J-Vyh^k7=_RCWJDRfKFcw|2^%3^q1^=^5;49Tl4m9E)41LC zBqG#(PiV03qEkCXXmFtVJ=PTTSB@F-v8s4NRwfWWyb0X@sc!PMAl2(LaUY4-<;#BJ zu_r+>Oy}9%I9RGNbf9B>`K0wKo)4IsIvQBke0JNA`E{iQ<4GTqZ%D`U3h~Dw zlNFkWvZ1J`xQX$B5^YSHq>uLo_WxuVg82=EY6{Da2KMBOtK;Hh}uj$sL^lSm+5dUSd+~_f#S-%hfIXNq?~4 zNIF=?YI>}LH**SdTQw+~HrSbmRhRr) z$%8;A(bU2s0P^8<`+8>2;Vq--5(#z<8Vie((0sMM6mu9<*1D21l+DS`*L~dADAv#Q zj=ZL!AzA8PuUASZF9^TY`6QK(NVK`>7O+kXAK8@b4eAOe%w)Pw9v8Q!Mm-~|a>29{ zYjb=jd51?cv!WMVN3xp_)VrR_mWm|s_)Nv7=WZOoLI?rZTNcws{~KPLz$wAFk{(XA zx(cE;im+_Ts%2m~vV5N{4Y9(u+Rg^mQm)QmIJQV{Y90+FXi-E^{z{HjjX5?Dj4EA^to|tVt3+B!E&VdrUnp=eScgUQ-z9eZcutOS=t(4vB}gw>AooZ?1F%dS zoTqQn2x7F$`j@g)fLIBqw%00JXAL>OSnEOQ2wGmt2#_Ie&UioX7QXHD={w?riR zgC*k$o6wP=Yd0}N);9rPytlvKH<2TrZ9jBsRm7V1-AJ!FvkCMtg;J=a-6(DL32 zlD10s-fy_p+BKJZZRg#eYL6xfskDVQBb8B{)xCv7F+7Z6DtX{!C5r3D$z-@0yg6Fl z6iuv&oD|v?zOq{3fKE*{ z45oCa!mfS|-aXF&3qYc6Vbj{%)3R>&a@jIWg3iV}&X-Er_=r8{pe7!t-~r)-(^k*xaK*{bMdi={8+#%3*DjV@$J1 zNvYu~3UtMiE_SKgMIvL~Jo1z$-H?H3IX%-f6xCe1Y=(V{4i6iu>XI{@5-|Nci_ni5 zr!VkVG`wzc)iLz^XrU3=l;9b8wK2AA&YJMhJx>CTQh+ zRl(${PkKAtvKIjo$zt^T6av*WdR-R^1R;6856l>fKPlAgBX%x1S-!~`CWy}dRbnR6 zJkr42KWn35)tAqh3YK)=$wO@7Kux7X8CS>;#j&7nM&(fnjq4;=^%&Mu+id^Q8E*{= z9O#Q;i_4fn27|pu#H(1a(v%yN$oFVO6h$zYzEAy&+uyH0!k-VvstS&q^D4Uh{shq9T(d!3_a*B>?pkFQ;XPpYyT z<$R3)cTVy@Vty9imEc|Xq!#PQ*)^I=E3wsdG+U{7T9Qgqyak&>Gs2-J0Zz0O^$8rn zz)>lEsOXtFnS2Q)hgL+jEqOzntR%@5z#R2RCcmd_!)z8`tIMJZ4W;<_Y@%^F;2 zjKGo$jrw;xTobmcq?dWcP(uf(s-O%+tWIOG7%I+RyM<_eu z6ktiao)t8ZVG!E2;h?42ji^J{niioJTS>oy6noVKF&9Z)sTYaE$TUqkr|c40-$4_) z0^IzoRwl1YW4EySuxdz#NExTGv6_x$Rp(>7(x@bPLo1EM$igx(yc4LeQi1h(b(EIM zZ`denw_{|;ZJ&{}X7n6rhNs~OqW{EdkHlU`H&bCNvmCLMH=E5LF?eNbop>|tQ8e{? z2OG@0em<{`Zxad_-hh8)G!)Rp?kF6p_4!R}9o0^oEM=um@~;)`lDY0i*Nx!3%Gl~Q zwLe$*R#AmQA7fR&vE|l}+gR!@T{840_tsM$rnQZz1g_(t_>q{_1)fTSfR(jEepI0< zQ&KP7GhvcQrc=VGDyJJ8%2A-GMs_ordImOSr$t?=>@90gY$$3WhhQi+2=iXsF6v21 zca;v0!C^&;PM8H$+jm zyQJgF_RxAYFzf?y5G!*vk2bOy_KoqyJ+lSJ(o(SvmKL7X{_IU8fJC zd*%yp439%eHAV@o45LsgD>PryO0duRyvh(SA%X|@19I5f0xQT3(HL}f#} zR)3D&{GuJxLC*x11H=A$eV#}#>HDUyEAPAL#tD#d^LzOZ2qo2MoPsn>l4!O0P>T*k z%XvbcEPzO{<}R=FON*YtrN^;EXj@W()P;dF@EI%mOjObo*A1~kg_K2=;nRwPo}iVE z%LQ))Py!+4~W9xd%+dDM(2~DC@JgvIZ^)aeExri9{mZuIh;0aXPLZ-$boYV4u&u zpBQx$YxDZ8TCDFvTlJIlN+br8BY?2CuUF(F^c_>!z)rR~Vab7-Ti?2+1F;3Wnt>l0 zSTh=~#cU{!1K=wcEch{fUsy!d|5B%SzTG7KHZ2`{9E7&$17i+b!GT4V8e zJWH!3^4;5Pf**nP_jOeAOn2GJ83%X$#A$Qs0*Rsr$fC(*HBIqQtvAO?ldUd~L*ox| zh_o>wL=>R#Rqhd&ikyWrK;)Y`{gL`hzva8h^S>y@=+A-t;~-_!Ujdtu2QH3PrriS? zj)P48tsuW%xmVJhJebF+C{bG4mx4a?8Tq8JM$>PTHG3a3$KzHiI0nplLLR7-pjs$I9!o8 z=~#>q>vA(*r-Lef(c}eXWjVnW(ZmY(Az>uHn4WhjKL2uomftu5`S92oNw7Ov%*v`= zIk7a?_fOuOD4=lstSqqdL;!Zw}U`6^jwx4FBP8B+w)6BL#P*y}aNE9KYy zhBWBb2coLc>k^aiVMwqyont#C>b+<>K5c%L3F|Y`l+{KE3=f+M<|jq{dWmM0Rr33$ zmuaE%ZqZOWujrfu0ofe6P^P6F$4_48aL5kt)I)K{cd~1=BfGL`s94N344>LH5-y}? z2ccC71#ixEC107uiIx+V5r-<7o_y};3*qEsyp@C<#RV!yG;{U?)KTx%u zL{Qb*Vz77Cnzl2o$e5})YInZMXGySAanRmkpI)|VUl=DP{;JrzHQM>D$T0kf^F_Ca zehIJi)%0Ai{F`b4x}g=ru4yTG?Js7s#Oj;8qO-O5%?=0D>+ADMtL8Hm5;QJn zu*E+jd^fp|!1Dn8BM9otsZtQFsafRoWp~leSX(D3R6t(e>_2=hjX1hsW>hMRym*xwx^tb; z0{KAxpa?`*iCjAuGtVzeTl<@mRO!qw_$r+J6r^UB__iCJk(IM$@;)jh-Y`6g^eQMr za?iQ;`H*GqZHpzU=$=pb-TeA#?)1j zjQdpbU6D4@g2XjDx{F{STqflJgUVjBt?3kV;o`RQzmJ0^30j&*P}v#Q#(R4p^!!x| zV`xJ!K6YZ8ugu3mTfwGyxl$BQg5%9BpY)+rxt3*EByIe9ejZ)I(#dm=upsA9G-?8y zDo<@Ml6*20D=a#@M0$=4t5BXifv#6r8a7n)I#~QZDN%k8le^AlrS8PXgbtM|><{!B z>s^0=t1(>C{cF2M9jeGoAQs_R3@kG(CLo`)_-U>j2T2@!lE8!mOMxNTpYfmmI*xJJB$&O`uFa>Qm0HPD#*d~sO6ca1hzM5;PR#D)=M}&wHKu@t zd-jh#EM<*7|n9FFoCN%iwMAwgAz>y*8VC{FcVi z?xD)ySFU0s$%K6KYT^^90+det;1bzq9MA%U09?g6A< zAX?P}HY-`J$%U@PSBjv~<%3*BJvD4fW^IvQk)6u9&Gkyjm;mFI+W&B(eP5W#p;WED z!F)q;o?NaQ=+LE{5rS^MFpYuNQyT}fTz?I3FqIKj5n9UF#4cLCz8>FMj$8?<_|GBS%q>tF0Qlx&NKp$S+tv`!i3n^$%w9F?#|%Z^$f%n9MH;W*u~ z@9wg;cqNAHT*?)N*&3Fy)k)YW(;Aj*`FILeGY_0o%?kruFu_aB8upt>s&Ka1MS}lw& zoT=#lrZl+l3~Sc0*ca+_ezQ?I)XxP1v}Y$nL&I~l+F6T6j7^!sXRy$i5@rON*|Ogg zzPU!>WDu|CRcAk*$Q3guEGTl4dy-?5m;)pBY1#E9O*YH!FYRwa!hOtV*%xOO5~jEs zJp|YH`mBu~_9$-{S)vBoC|1&#!bA25g)~js-`6jKmPu(ptq>pI9U&8yE5=0RoG=8| z|KAVdA0YhWc2XEGm0ORVlAabc7t@BAj0h%L1f{yFy!gN)cLDOXdsurf*v0&Xzx4P} z(~KLGQnpPgZ^M440ZrrN$x6Q)K9ANvl=t6} zN~HYi%m8T(s*660s3z-{XNckFYl!l-!X)sVtkR?iO7ymHWIrtVp7>e_9T2-}4^k~W z9ZzWM1Oym-osCwz%BUgAtn>U}U8uDn8`;?%oRv||P8)E`D&}W$S*exnlIsF(Hsg~O zRmcr;H9;YX-}7Y3G2Ccr2adq#Ev9I^f18+uggl(Vjy=(VZ*>%xxbf{oD3&;Md;v#J z>^pwJ!7UOZIg|B%p&1Wxx4hNj#*(XFNwIBvI zMZ|29b1Nmvu(UK`zInQLMlq;&scEISB=7q*hd$HR_Qy%-E2ob3AJ}>MhQFy$Fyy7f z=f#gf`0S^$e{RvDyKGMVR{r&@c~EA4D1mx&6MA)UPEZK5t@ckd;U9#?E%C$d0)%tk zF*wQ5eBAyxoZYt_DurIRmyEmVOV$)V;Z%mf{Fy!PGPrkm7M`DF3%Pcw+M8=sT_m|0 z(wZ-3jD}SM;O&!s6l280}sYie{XD1Ki58-k@lKrufU9feEtv$B;Ka{&#cJ=AcAF^e|&q)T69b z{(XQ?1XDn(8Jj0cNEWJ|iL}M8!UCj->TaX2j~^R;QAEG7eKRrI#wprdg^=T8X&|mp znru|WK=@TkUY(nKPC>9vFc~IJ+~Xse{ALTD%|<85UW!~MZ*&O4DRrk$L_(F;5E#&d zbZ-Wz0dPBEE>kNnd*-FRRspTlYV7WkPTninGXDq5J>&^pQU1y)O(~wo53pGeij)== zB`q(;r><*{3T|#u4QWW?E{tl#dL{XeBid@EA+8=4uVB$o|9Pa)7zIX4OIyb(s_jG^ zQ`r@?EuCHf2kg_EO|KvvlqHSZwQrgGa;7-WVgROU9KSOV_=&|8QSh;eN`f?K=25c! zjBr|hA$_i%Z8m2;*F@LZLcdgbJrR%?zSNA552~AtaB``&_x-=yQvfx3@pgK|p?1FQ z?~(fwQv8JniJuW@gWKt!Ri01~uO{WRN=JF3fL(ajy4!Oi2u^q{UPvFUZ;^jvB7K(M zU+ynqr)uqo_T1>bqoodyU~_}E&_aS`6i)6YY8mTUh8DBz+N~l zHG($P^ATS}g+ooHi-V@)vzM|uYT93-n8)KBoY$fi&U;up$$I{=geviYWtkkvO2_3v z2?=RY3v{$?R5C87W#t1^23z%gLa6w-`J)saq;3W)8FerX3yW{47 zUm%MpHZ|XJOOnz?^qb6E;fvNgx2&!#5I7f-ow}!Ud8mdK24-cR?K99I6B0ZW8Q;8E zq2v@OKb$Tm=NpL1oPa?gnkoq`wk9Z)mzLQ7q9Z4VES3dKtO8RC4JchlM)<8^DW}7| zTh+c1dn$9Vc;uT0a9lCoYI4F&Gpo^?_?2Y?!Q1_+_kC}@6IVh~>SwTK;mn>lL$jxv zUvBNK-2Scakge`d125)7x%H5OH!((bmfmZ^wLJH)bX$UMwf}-JBZw#rFMqM*tCRf+ zffe>MLN;V@&dd-PlRPN`OC6)AeJ-z3Z*{plvgzYExqFZ`)7aHQ}5Uxy>LyBwVI zGet_7kJA~Vd{wq*0-s`MwI18U`b$7Pg(2ENmh51vJRf$DXKE^RIG9&jX23Z2y?jAx zu`FnJYGZk7Vk>Hx=alloqO$A97#jzNu=G`tL-@$Z$a342AN3d;JF`&a(H&{Hdkl1n zq0K33PP=%&&(>#Pne1YzA&>rtY>yhh>x?OYpdLItjkV0B(Nm|v>QwkQh4`BW^ndLME0iAtET58S zyFw(_O>0Qc6WVZZ=}FV(E2fll{rKd>o6X7>qrJgxzkLg7Rg1t+WlyPG2|aF-E3~p? z&@?V}FIrU6>p}p}`WneY_Cw<^@|l*J4!RCg2ncXvUh>~PZ+*j26o^*|hd9U!PzLk7g9{qjARR1b_Mm2M;Z>*TprCEIbG@3H)h>0_8?9K`4V5sb(-y1U70K36@z8RI}oNinHeJEuzLHo%> z=T`tupF*A(gp&pz0)Ll`5Oy`rZM)+bciCih$o1-8Yme_Gxxx@POiJ>FX#JH~DHB2k z4QF?5C+;QO*vEo1l!B>{>$1w+Jf*6!5I%|pDQ)t_TH|1djFxf7C7&l^jvjy@0(BY_ zF~m!gwGRkO4|qLAcWXEK+Nk*v;k=Ukic5x_-h&8LD_6cb#yR~`HOELwFI8v3AN$(( zmF|KNMe8-`!$Be(-<=ZI-Nc}uSamD5SuS@-ob=*9 zh}=2#Pu5~-!dD@Tj#iFYul()cyaLX`&3MYPfA4~fu1@?rN&Yvz%V&4Ti|rx3JyUJA z*1{w3pF>extuoh|CK2E?X&#u4fJy2vLfoiAf^W2wjTtDo(-vwKMxbw>p9ifq1=?S{BK%33 z@5%i;J6F@50xh3bmVUXgLlNITu-~m|MapcC8>Trw2q{KP(*y$CnR##~tz?FnpKoYK z@mxjeiigNjpLwELAz^8Mc-2$&Vv6*@Df?DXFc%b3Lt~iL6-oWA{)^d-jbJPM4-Gb7 z2N?B&GwrwXU9$fTM!um^YJxW+e1W(=W}}bZDb9OVbI{_m*;HPVaHEw*s}in5`pl^j z(bFnw7UJWofRVu{wWeV-p&cJb{6%iI1EWMM%v=Ya&?;jexDRZniZ zN&YW)A|gw1NlD3P=R>@ItXhCo{pf1Wk_XjS#$E%=v-KeO5SAjy_Sz~!r z&(_~rcQS4+B8V*)Jz$exV2d>@={QP2$}8!=2~Z<+=9eYSp&E`~>YILvKnvn&*A}iv zZ^YhW6T~PxUHSqed=$dWenwopl7SJt&BfywM*X={k-E7+7O37HI?vU>MOz=(_v=zUIsIq(Mp2U&aKxy0m~ z;N*jYjO^^7Esshcre#F3iMo95=YQlmr#7oH{fGk z>lE6_f&C1s-L-Z2kX|z=Z0Tx#ov?CZj$OO$33gAThQH4KLhtX|SXqQsyTAtre>b6= z;@Raz{a=JShV_4=U@+_)6Xd;y3$g@Y*jcF~45}X1xK>lf+dqunq|EmA$4codxYJvx zsa^^@XkU(P7c}{T-3)XYv_ak~j)Ua}!JM&j96&!qj~Q#Obt-lII=@(Lm`&cuOEm|E z*y|DvumMrU8Wl?pzumM2i;LA)Xow9gpg+;n4BGi>7Ks%XVIq*Wb#W(4ysHp}2K1PX zE+5FXr{KVXDO6ZmJHc10eGLsH&i^K_Fh5GbmY@H8kW^10(>fXdH1&U(-w&EJB7Kmi zeM>YeoKIf3nLQ&yU0?C`R}iSoN|SSC97Op@N?&d1Rf>d+Z1C6Z2Iaya7!~oDOC4pT zaH0KiXpGW{N~Ro7N__n5JEw-WuYG1B>1)wbu-+B+uYo6?j%On)+{eHu9=UqOGaT2# zCoM(wNUH2duWnJ&u=H-zkEyXINy(9^D}bA~&sB-G>T1Wr`qa_Y++|C1Rm;!`jdh`P zl1Nxs9J%XupLk3@uq#m5)OV{(GTmuSL#xw?vsAU=S8jQ*R7HK4?1RbraNDoD1(uU) zE-f8t1!FQnr`7DRnO4`2uj7im^l>Rkv>&{^FoqAD%>Vuvq~pTW4idA;bVnOn)QRV@ zSRK-tAG1*pav9S4->@D?ENlY4-VXxu#pLU>hwtO(6@O@%?cowwLNc=fO>k6x^;~S# zWE)FY1l+Nqokz$FqZT+TVNmeBD$06*b+Ho_z4-<<|I)O>RBcJNr3bd^sV&sGsMQH@ z)F2xHlEgOIVAT^0-l^+<^6iOTgOBVte1VXM1e7XFyYpS@H zD1#3_B2CT}WGRcnihCS~Y$02m5*}Kvj_Bm26Ptk)^#350QEYc`Fpr)2iOv1WN2Gjq zCGv-$l4;Y^B%qE$0?LEq#e!4yZ{{y&=il~xcnw=NMWa>H-_1fVhN^x%nA3U*q{0Df zy4ft%q!x&TJU&vF?LrWy_h*$}T(l@Q78ViSZ^26iW^FDP!cR6_((+^w z*Mu6x)5U78@BB}4nfE*h3~~?fR=_Ye7@=ZWxa4oh&Rp*p<&DZLKm14XthiO>5Qr&I(t4a?v*Pq#v(t3MR+UnUqZQyYnGn@@XJT-?{5 zi>XcpNyuPNV9X8W-qlU9;8xWyU6gU>OS#HOR{zPzG?t`o_?>vQQ;6<;nv%3?$Un^I ze<;)On;Jz?0S>k`*pukVk%1K-rl3YkOKXHC1+1EwnVC9E*GozgbRa^bccc^^D3&AM zcuGqAsH=$B1%c;F)Mz$a87pStGZE!h5?Q(W^CPj(J95gPuUZ@#p8yKgk>nY^JeocM z=gdpyIK@0f8)2Y{FPVsz6y=aOZ8;Ixwd)O+_URZ8i~a9B1>!%r_>ny+KFApg`ze0x z9(wl&i{%`a#9(KLcSiTGNj|J;$o*JiY9NiwXod4 z0=F&}9ERPB@qq{@RZ8PpxiSfE`FGRfD(BNgF?G4A6)>oZj zT^2?S`v-y&KD|hDsY*8?G%~2V%)nWLyr63cJ>ZU6{qPUN7BERaHam0JJD( z@?G>+)~txs*P>=4IiXF;Mq=0=H;60L$%@hcBdY<_mgRIIL)9idG51U@gBI9 zN6ZQ)b@D?IJiquN$pDt4X!BS55ltp8;4RMov15P*=%@7dW^E*Nn}fJl*Ywa#HD(_W z1FoD@;*QC8%6xo%-)31M-e$8dVK;dhKYwr|?<_Bw$y}%IZTFI-dIgqlbv{ivcgJPp z$#lB?&DCo)q9!M*fuc*Y7Y)X{7_{2y#)Z<+4aX7V^Z{IC0b2CCsS8%N(RkGLSEdWE z6A@1IS7Ju$v@V|qp&M|r(vqrV<1;SGe1EYuFv&5*S`u~thERmhB1(TYsg0FIZ;LSP z{r?(vYA}Cxy@u43T-~+`w(QR{2I~44zq+Q66a1@P4qaP_1q-`*2c6=WcL5?hGcC9+ z@hLOg+zBGYv~kFptF2Xe_gG2JJ4MhSOVspsPPBB!3Tb6PfjbTHlQYp{-Z{p=g<`&Y zK;Xiift$CDj*pyi83C_bfrS;fv2C?-Z2)Dd%g@cVakqNnEbLqkZHmHaAW^>J>xGd3 zoX@}Wxlp|;pQg2I3%rnexl=#!GCL+xs=Ga0%kJdbI#mnk#(PsVDFq6>z93$1P;46HN-$B>t%O!%)YA>>h-&_ z;fb8&FO;YK%-P+BTi&e;Fg}I3)YbGyLi4G+pO-MeL6@RB+L-iD<$%ZQ8Ppcc^cZl| zII{M#a&oVPL$0&x7oJR6HU7dM{x(@WVVoy!>m9gxIrD0w3cp^1o zXN;+-on(7;47X8bbQFexb{%Fks!EIn_q*Z zxnf0jW@RefyV8LqF)(>+Gn+3mL1clo!|eVp!mD^p%O?9CahlgrX0@-23Df^_Dw;Q_ zy?z|?o=Z^4TYKxo|3lR~M%T5qf5VO0#%OHYNn&_u^JnV-S}NS z=RVJWykGa&Bbj^6xvqKP2Xr01W*E5*f}?g%oKx#a#&D7o4(*(q2dC+sLkF#;t={DB za{3`BXZ54cmX))6A-%HP;0Fh0rFybAxq*eYD>P#nWz)B}w_E$a6lgte7SDhyN+Gs4 zF5orz#3iy^@53!ovB>kH`z;r`+eO!}C*4wI^34u6!n{1g@-^yqAxoRpEG%1Mvu5$q zePxu0vWQmCdpWICK)5#KWcwiGdGHQ$ zRV(JWCFTWXO4NweM{&jc^eh>Vrj%%pbXaZ+AoM92UF|djAd%Lao8BN4=pa2ZW=0fl_Mny@KOc~R*Rw@-S?}ynh^|; zIsQg+_x4tKWpt>n#~i36Mk?AacarOcr}Kp-rvwibRyRla296yRoOV|7*};E%#pMRM zduC>486Lvt0)jHp2M_)Q#C*S^;;daO>+Bj5;>K93%ARkdQnjuD@G__rD3X5iS78nC7pC1fWIFBcbs=?e8)t=S?k~DF*h;9VhGup#DRaXW&588JexZ6Y`L$BG z274es!*8b5D?05If7s-A2RqP1DwBO^M^>7EW=Vjr~gmcbWJsyTAW!QXxb zv<{=>W=yH=OO@5T)>sbMJCAu6M!v9UL;FP$;P$AR0(t^cQYor+M&Z$s3G77>Vrz{R z)}|oE<(1`JVBTSQ_X)`_5*Xx#uq!Jw>RgR#!gq2UMvu>do(WLrclMakR0UeGP<8wV@E&>@k>!In zvdFns`#nBD-<}lRQR(zp0`^$YcYg77wg3*Q{O3TRKC;DHX`aldPP6r5EJ_Ui{L|B< z&hMy8XDc^W6z{@^D^*Omn8W|CIAIDvgp2dK2-VZijW++tmc{cS^GQbJ73rzJPO%Ab z_zKi7zx5Jm!*x5V??~D-?4}H`yu`%^++OIo29F{fV$kcfyzNVVuLE|eq5lerpqto>FI7> z{b{^z{xHP-4260Y8X6i~z?F=Sp8fNdX8hvLHpG7uFQDq^B&v0qVC-M#_ zbq6%`6Vo)OKY!P(m&4R?@_E<6(~UJ_kNg+Rnx~p^FC&cqxokD|e(g zBdD2@U}juEa*6Y7+JQ0t#gqU0;6~)ZnI8sf*R+lE>Zx?`fRX&zejF|*^~}6RL<+X^ zb?oe2`3TQc<74g_rHZkEkzr`UkKdAyNo#alIcMcRi=qNM+|CNu?*RizRoYCI2XeRb z8!)U!r|SSu$T!sL=L?_92v4+5A;&!RLPB2m57yQv&VGSGL1Je$J1nrTAD<8B9!0mJ z7`uA`a{slZYj(q4v_Gwsf#l79)OIrmsfLpq~mgyLs5SY!MmqYCglFYL5-yvei9RwLZFY zBb;Jy`x`Y^YXki`d#P$VxyKV<;dr(Pg@AxTekzL_&2%hDs79}A&+9rUHagnd=WBOo z4%&Z)u>@c!i3%_w>Jf$H_DZ?U zrgMe<07Q9(Djdo<#YEQef3mDStbmG>Px(Oey|#MGpSHpWfPH{lAzH^eJS=saxR_y` zzqAWLx#-R9sMXrnLU=Ip@(>2|b=(t+dCMp%E5#>dki>AHS4c)G+h+P2o2L=9#k5Yt z;=Sz4eTYET=B6}L)enw zCm*~cK3Op6qL8;38Sfg{+NN0QpU1I+(|3wJ_IX=`=*3f*6*4IoP|Bk3<=pFKqx((k ze}B9Y^XZ;fK?IaiK%#uyR<~@wC(>D$d;A2}*4C!GeV*T=lkw*sgDTgpm#RaOlQBXO zKj&9br(|VC^LgF-qnjfkA+cF6%8YfooTRAyuF>rX9ZPP|>tP@w`k>un8xj?T(C&7@ z0I_b#je>%r(c{~t@)b}xi;_yF8N~tG8~lUo9d1H3MN+0U8^l#U59jN!h={?dsaU@k zDk#&%B_v4s`3bNXbmBTKx`B^MMD~A{ly+-dSWp4V1@!e4{3-a<#2?OLG+Y49|8rtl z;jdrA_oM?}?Yiz#QtVdlZuLgL^i5140^O1Xr`zK>39|+5=5OgQI@4X8oSdm5mVD0H z=$;v?zkYpgl=r-Je0_3JM5rZ`N}`J2VDtX|@9BmA91xy~gzWpuFxFBXMmqN3V5(Cb#@lDb@#LN5ph=bdjbmgiSN}Ao1$6r0}|Kd;J`dmj@P&7-L{!0*jWo zmMTziQT64;7YsGQVSDq3#mg_`Z7ti&P}QsBQ{>#9Lx2|Df1PZ-S36xxX+c_VjT`ZF zF(kedrYGiO^u&y{NqyX5CASI)a9%zLNbg(gCPy$rmPj!u?JKFlY)@X6GLhyXp4)*r`F)=Z`6i}H2;&FHY>N}^S<86}#GD@{PxpI3@Zq;9Z+*yWT!ql%|t2%Hw@=Agj~qjsonQAmDSs zWVgZlSzZ=%YhvXv$B&_^!UTlJ<4nc>aw&4U)`nI{mWYvYKqU6?{&w+RXqslrL>+}* zvtAm1pvv+y_dhKFEPFGjX&0r!(FD1%_atiN!jLq&vf)_5VYf}6Fu-a~YX9k^re|n> zJhkX0^doLQ@Wz%Z->9?!d%E zv}T)CXr;)8Ig5*1gPamF4<>Zd*ajbd5c&tdDW4#vmqf>P|S{W|p~5xnvbf%hU=fIuk?{WKu+oQ$M< z#M<}2!U-NLU~d_6O~65t;c2ANPjJ6NDcH*l0InGv9eadWvv#h4OZFbNMC^f6FS#m# zG>(;QC#PGM+!ge6y*|_-u^UE1p-K^JqiYsP#9&wI-c7D|YqAtt!kFyldbMD|O*Wq` z|A>iSW3PZ5AuW_>VYsxUzDC${n1d6`*eRXEA*U!1SCgy<1{n<0?uAEBPft=U2aVmw zT?r&+*4DJydY>&B6L%yWM{r~pf0rqjNbScZ4Xv>yd~w|SdK}5`cCJ&lr=_7W^2gk9 zpF-WVJ~WXfW7YM1jXRov?+Jt1!`_-f?6oo1ZWw5IP1 zj=I6qw`aL+B@L-S28QnOR4PTCNHV)oW6FASqOspvr@_Q!;_RHiUf+VkTJ5hK)d0&H zI#hQ&oKP?k@ol-wb-M2g)tPcsv&Y*cSo)6m#n`&_LkX%0JC36ZoCV@N%Og;K05O{} z^wiUfi`Y;2JO-!Bb-5ZA_2mb}ioA?f$AHGltZq1}LHsJSW-o9(z$#Ub3U^s8l&{H< z4kwUgrZm#aVxL9nwueD=_HRQ~QC5pHfrjQu6mNlDHEll-`nL>5z5DL0$nhek2pQD(GhWc^El8K5iL zAge4)V|ANq*y|5An;=^~jn1j7*UB*W*yZ)mO%j=OdCEpeNQlSpt&wt{&t(~TTqLTS zgcx1fXc9w#aNhI&_8hrtQ{va>#s?uI#&K6qpZ-OiMh8FIJO3wP3QWRvQ_*%!s?t>B8!IO7V zZfS3I4yL?n#MIC-`W|u(AISzr>V($#;?lWhe7alG+O#U)^ty=od4Eo46zSbAz)Gsa z3YV%kFe>6AbD`Xdm%%hUYyDY8lOCj9l57@VuW=BGK^r*665s!oxnG5cra}B_8Zfj61ASC}4-STmo0X2_(&Ukd#wJEfeZ3q& zVsTBU8`{&8yIN+W;FJF5>14ZHD`b{Lz-kulj8ADzTjjJ|YsiB8XD|Y7pJ&8KcG0pv za;aKZyFHartC5N?-i}v7vz_`Ng8*D6gH3XXQu)+H>)du7J z4!A!vb$!#TV*WdNlK|6W7`v@J%-mox z5UT~-m(SqL*U&ZuCY}OGg!M;ttBE3O7A$(*0Onms!h;MnThD&S^0_xClK^sBM)Cm? z1XEWW>e|9^#R+FEQUuE6Y?2C^B!15?9|_!Wh86rS4ssm+ehzs=({rkb~vje zs2MFCidswnWShvI>ic>6g-t@vC|&YXThyEm<8XkvOV{VSf-Z$`o+}xwzonNfHXBP) zAI&%@Dwe2eIXy_HAux=@y(oq(JCDJ@9rph>UV8+5yUEZ~zLQ_tt+&MCrTWKXVeRZO zRwy*-OQX|P=q)S0ou-)6M?;?DxA}kMd#6m*D@&wYdumoN#ho!k;kpb6kC&4Rkrk7; z72ra9BI!frG=;_Ecfmx6BOj{7znu6Hth$}Y=i|bIcmxuR%j#-gQrf&? z83S$Chtd=Wt^sR?GzN@7<(iuX*E$J({VpFIkPbKIt~PaYhWYDJY8gX9 zu$P=HJZ=hBaRvmSU0|QRQQFJqht39h0W&vY6%{rDzE5JwW67dirNxkyN=`=!c%DS@ zNlDR9{i@wr%D;Fwd9({}@VMni{?|bfbb}+~jTu^zBLoIf;u>F4#nUOynOHbO#Ey3? zp3bP^jDQXAhkr?*YIF^sfZruk_fbZk~7v zYQ;D)KK7vgof*oXqh58bIm-DbAR^&R!^q-rPPE18M4O25U|qWZUwbKz8*I#?^QKC_ z)@{~~sjeVulG#+SBsiMJ&&o12dEN|jAP zLfcoi>OSg-(MzOD<*cW;1$n2TZn>20i%y>lKNm_2O?f zXl$Obwu#j9;_}PK%{xB110Akh*o&-|;&I3c>6QGqXCJb_5}}8yt$B-@a9DD~{`qeMeVY=&e{%NiQiyU}t9+ zTAIW+0BLqaJyjjN{@3`S%7Dz?fbB~O*z{kMjY_V=QmcQizh^bwJa0Wp%x|;Yz(8}4 z5v-c|VW=~qlik($ttL9%w!McsWMiPPDWth-nL^J6m}(BH-N%uf4XEE3!%7fcUA@@6Ac zbR&#PJKSk)*d&y%UJJEJuE+L$v%`+8?ALi{yWG&%^SFmo_!D?&9<UgrIf9@?Ey53X`lQ4x&=hJq5bTsP9x^lJ$c<-Q&9Q$JZEK~b%u3g)B4{#YBjtOm zuUP#D(bF`v4F*H}av2Hi9h5_Ruh2?r?cRy0CjdUx?eT)_=e`z9io?tF#}y{FKU=_~^wS9dz!(ZmJxHG4o<0qwm^q58<*R;} zB0=B_fIq_>ORzBDwV#?UCt4WY^nvQQLx+)y@aqphde z;9^iS+~)<|<}EFH8w|%9OSAh{luz3h=mi(b`;SqvKRUK{{*m#1?`)SdUXbZ=JD>D~ zRd@73$&`(;Y62X0@Cy{rNA`RhySw?d+%+u0Kl27r813*GsZGqKLo}RVrN(DTg=6*h%#K!Uk~|_JGXVvsC1_=_O%xVs`z|i zF(dxaz)3Tc?<=<-!l!x{|WR&G%Jn4nol=UoW?|NqOP? zA_39Lk&8ho2x{#i6jMBWd&WI}0)EeESVdHTi1}HWLVnk<1+`dgbQt=f+FqVL zls_AojA~70^mR4?mWn)audvX9ZqsVS*W*X1_`8cS>~#-PtXi_dc**Rzu9J_qmn_k5 zXXk+QvV#coYN&3Z-XBfsiXB}DfTJ-(klj&A#T?-DjU)Edh8`I!7b!o~_$i9XW;IS{ z^q>#eLZ$#=F@L4PaLOkW2R#kz!p7XT*i-+RrBo~37Q@_ghKaHSh(16!!CGl|?wEh4*wi}#fq*9l4MAuepA?E*L;Gnb^ETBUIl zsyCLMeKWlI=g+`H5{A}bVZ2bIM2lRhN}X``nT$Ecu{UXT|KJm}r+v8^Y6}EGzu(ly zU>(0e4$_nU-Z(PN@e8^8pPYrN5po2;@9Vo`|8zZy zpdoo{Td0gUYQCpUx+*8GDFO+MbH4nQ#NYH?oU%RX zQ3{+T;jq67O zULR~-QP+|Uj_6?8m+6a@5xB)SXILcLa^(%dF8o@PzZWND4ta}XjmMdK2pM4t?f;>2KUOwX(tGn#+1=paqf*(2rO zPisk}({&=a+r0&pP}QrgP%00aF^d2c%_bZ$jeIY?_fRxG^Ps=kE1Sb+`zE6&|2*bh z`L!poz`n=9p87l3oK}8o0R`*c&}Rt;vnBR7>9kRss^6-gWS=bPn4LB@f`hqSe7Vi) z5xf7H3@Su_FlCi>FZW1mZ{AgTIc8B9lK1rGhkU(%r8&I9UKOi*)IbLI;213z58`}a zWjqSN4!|NI%Jme0o1gehON3g-l{VoEs0orpeI+#jbWqB>O+xO!?B=*i&ZsLb@>#W6 zo9cDrmGT_~sl#aiH(zq>Lj~o{AAH(b4@8}_ZoFfdydv z)AqkVIBRgJwmYd4&TA!Y*U`Bn9AYpBkjV6&j2qV9^VnSN$51qFrUF|Nu4dNo<*OPm-j#aJ#pdYHGd=8pM>)bDb?j{PmS;opofbLPjr}oraBF0)ZQnl)4 z8T+^e6#&F0S9EtpEAk#q zX~Imgd39g_zZh4XA{3UFAX?Y&86!~j1{LV-POE~KNsflMKVbW*<44j~d;)j^nJQ^9 zQRxHCj+$(kwringI2EDQEIU4|0fEA~2P5BW9TzpCrrrd+mcXz;GoW{=i@@C5d@35M z{6Kh2bikRbW!Wg7;z~N2IbvpTa0B>&Qw3eI&Hze9K@k#4OwjYetAQ3WCd3iJjp^dB z-K&GuZsX;lb)B<@p6^4kg0zqn4GoogM?!DLzIb>i3K@v0D21{@GfP*Og6NU}6}2!z z%=~;^DK?yy_9?u=tJ3pwTFyE05kKM%%4uwt?CYYm}j46 zW)%kUsOBo_VNE zRyqB+8amA}EvTdee?Qd)tLBz5=Z8{yY9i%u@G%&nD2Wh=J8a&ay`Ru)oJmE3*3SHjQFh$AHzdk_lwq` zTa|2$lYuX1ivwUTTIxbpN<3IGImf*GJjOL3qPWmm&Xr+v`Y%6)I~oh8XXCH`T)iMNswi=&?F zbh+9^j=S;>w`DYNU%~^CV4Cvq}_3MFKwOE_n>#Bp2B_7{bK|?l)T|%>EDq_-_l8YQR4W( z<9&serBe=D(9ufFjS=~*jSZ1gd^#S%vw6SXhdX`83&^RT)10k4#ko-W zs$lF46JTRzh2!n3M+-tON+}5m;f{_Lt;wCASK0g}|#(t_n027yTFUOdV` zybpuvV(rS$9Hkm{!sl~hzQD3c!gTndP4?^BU#B%nxql?2g&L37?0jD`engg&D^yTb z9|~_f%N04llz%04aKAF;j*pJ|dz_QlAW^d=wkJ5F;%|R{WQ(~AsaO3xYRTkO5i#lI zOKUl|f3ppnWCgiW@90c31`gfL+VV9t#Ki|jP*-e=uy#RNN!@Xjf_OOE>+VQcoLVt? zrQ0diB;o#KoiFTR!w1IcyY!9F)+^C1E?fOF@m8dB-DcnpnxM2iextgg_vOIG55W&d&MkUhhY?Wt!+;MiP8_-ABe(zI9;!D12K!^1J^NmE!1_J|U(%B?bBJK~+aWbir4dj~{Pm zIG4ah97ZQGj(3Fh#=3`cw>HKp4oah2>p7iIE6ngu^WJTAhpoKSLm|my2obfh(>y5!xC2yAke? zT6F0j$W>>wydNKA6MioBjzQ9hw}Zbc)Zl)N-nwwBhwK0nFK#u?!Bp9{LSY0Q>lskN5JX(nn>QM;cn%0$cnUt(W^V z?J*J`B~-jL)pk-4B&(F9WWZs%Q@?}dtKHxcobclLPPTxb71jfOT*1{slgf;hyKbNG zYl@BvxKB2`L!aH;_(*&bh%#~*nNp?NIC5|qz4C`Qp5^Fg5G5kvKX08ET39P5-gW)JpfZCtLS{7J8to(u~_ySSl!Sd-1gN^`lIqGKtsgY5CiMj1o z|2(_<4H-DY=EG3#2`!YHZOnB$H{%qDl$(`8fdT*lIQv*vB5(2+tgapyOVJp*cYe_s8^A2Hf zRx5nw;v}}cX`4c~R8s{NR-^V|Y+~AMmy~Q!oa?lsKKC__ia!c#pPFX&o?jx8f z~JcgaXPawwGfV)5bUH-E*(Ko2Vc!HTvlF7OaB zfAVv~JSJ^ipO~l~TmNb?sN14ebJ|!Qg++y+YSXL5R=U#{cRwI*33@_4xkpS@O*A^M zX?bYWgIPOUXAC^g5@tGme+>ABjLk1P;nv5S*!*pi9=Dj#o?5vW(bJXE7!0Msmyk>2 zWo!?I1aovaegI~mE=43h`mRlAki<2|y00eL3UZmSQt1)V`DhJR5BCE0s_*&Wskcpp zeYq_yRqI=Mn^r!3TMwbW14gFr_2Ax5zCQGCayfzq=W2ox=(^Mvj($WpKbn5k@%J_p zZ-P$%9*QiLIRen%$T^#b9|A5ZcU->{@X}3=^oG+du?K7ve2A4JBYl@l+QCd_%a&v` z&eaqmtf;sRt8Rkx^qLep)SXl8D}&eQX9}`1;!aB7u;VBE`v7ntZ*6|&YS!T;kQiU} zb0Rl|Hj&aco#v#|G`5-xE=FVeO zVJzL1vokT3Y6R)plokE+ZWvz8A~r<7VD7sC9NRZ=HZ0R7`dU>P8_UKe- zVw}t|G(loxV;VpypF@2A6L+oC1xv1J^hS25u%rSZ6|kned-^CU)-@EP-J)31To5f0 zFYk&$tJYhJ60|SO_0Lx4Y6xqn)O;uwtRK{#!0EV&b-ENF%-2Yai*KYGe;oX{o|jh; zdYMawr{yjwp2dwjilU$jaZ5GF>2$&`X}kF_BJ7iz5Hz7fs#Txf;Vz7~btuBTxc)Vd z0<~QQOU^1CV)u zf&^Wm?aHmmsM=&^l8ub-3L8fKcHs(#X7X7m(}|~>oQCoA4jHGvh!RjGZg49pD+AM! z;MP`m(c!@zRTXqSQGl@W(zezAbFJ0MPE9R^JF9C_cZ8ea7^a+?A0*LGb!hJ}p5lAKWAICcC>k>=4deM9W*?IY{RAVeoB7ioed&`h7w-iB+-h zIi=g5g)%S^Y^-}tNl8uX^PpF^w5^zk<-BBqW9!tlZ>9<+HPVQZM9+5g{8^%+xUO%H z+9>Bp*TWC@hR)ESHm=dYYC@#`>|Yz;7nWhrg3_@})Wo;f3$&G*Ep1=TjSEU5x?Kedm?oD4#D$csU|aab_8DFs`iD``$|5@t|$q!!h6Kg zjA|Jk^gYAF)~1f^E!ov}FWQ&itiensdTlGzY)*eW$39ZHxA~jS0J(4}vb)a(^`v(P zq|K+-04Z8^^PXb#h09A^UgSkjPcaTXNy2dI<{M0gBK6=F1vRyyhs5p_QBH%DQxAkx z#g$ZN&m8(FLJE20d-BivJ-98G(NfVa$MfCGC7M=rv)`a7Ic2lC2+GUrV^3ryB{AOY zeP0ZX&bLi`@dz`c)3ddqx@AyK7lM-DA}p4&A&!>wKC;aV)L@@yco2-jm3@Vq_V+Qi zp0^SC{Ou;M@O;Ay8PE<0ET%}NP6*e~?a}2dbnq)%YNpA4lGs^^he?~UL@>+31IM5t z9x8(*?xkDg3yr|d#B5L?%e|J41>urL{m1JI$X**E) z23sr2AKlEJ{=rAvsd4j`ROYw3#3PPc|D#-zPbM0WfCFhOJmf5Z4}1$twrD%mUfVnl zIVwT9NbE{=4y(cU?#Q&zEI1vEwo z6Gg9-^FdE?XR8Jm0RzI^l?{iTGx=>^0VZlma`!3?+5}Si%$QslPGx{ppfraw!8-)xDM@{_SdSCZu`e`_H){(uXx6E7^HtU|ha)9=?%& zgXNZtsu8vA`PBES$8h<;6MI0gm#Hpg@c^e(Hk?nhpp4vaKZDp3SWa!?(NMxYjg(K(T3Aec8^$^r6 z#bIeNvY}yOt`7CIKSoT!k+L>w*V`0;@VRL4a1~2bWn>&8%sYe!u)E)Vn8l&L0so|4 zcoT?fmuL=&$47&}+%J);F9x3+w8DMDn{n?FZ2GZ)_eSA1G_mD&knl$fNkAtw$BR3v z$h%e5k+P?}uM?{>BF^+-ms9;yuN5&ME2OP<8kvox9O*>6IAQb?{Y19{gl(<1^mITD z1i|X>xYOq73N_3M-T7&nyw5nBSU3S;VGP^zX&%_P-7pwG%1KfZ!kDeP4RrE6oS^@G zmW;3_@xpknZ{N2b^9%D4b8?pQ0t@IXwYiPw3v9lUMC~W6x?PH_^BgG`!8fX?)Hd7T zB62yR*HAsq8};C(9mza$U4NxX>JWqSQ10}zw+V0PxQ`2b#T3wQ4WH}sf_G^3z>DO3 zMg*TI`dj%ecRST=?f3*&&hd4)y~)G|>KiRyoIX%au^!H}k%puuE8uW@BO@Y?AQQtR zwe+xXBPT`Wa={)YEr~Kp@t7HD6KHV3K&Pvv^Kj7J|x(#l>;(p(kn$zpmp=;t6wz?>&1qLoHasjoxj zf`Qyf{Duc7I>k8-%`jQ2K1{v&T6olpVM(p9&#RbXCD($Zhjj;tx+g@U2G)e^_P#`g z$1-#mT8MdQ&o`+s8&$XB9JQT8XRpQ3jcq?_Tu1uX(>$Ue<$ch#+wv|=!#lf(5!~hQ zZ~I6tQ;=gKpj7FH1J+muJzpFg=rgL+WlVm##SoW9RKrT^+BTc0WDoGH`lTx(i*bNn zHOdVW-hPF4-aCjK#6XDkPn5!ktxfPiSt5juI;IqV3Brwf5Yp7efT&>zLzDh4ne;;- zlzRBBrof@x+I$UnT0kPg%tqzNqqaEaXeMO>^+2z!Urt(Br0lJhLsS0qt8m>fOB10( zGF(WF>+MPW)qSQf`yL#J8jCPLGueMiTDbmhblx4&I)Aw|ZYvFq$-m^{Ca(TEJ{m(+ zW~5?m5nzi>S!J9X0F>RQIbJA2>H|{0oi{Vp_j!sfzO0DZA8N85V;ku^k{|K;|AD#Z zfO7r}S;_Y)%SR?+%p%Wn(k$0hy|+Cw?J9Gj?#+~Kx(;)zkd$VTt}VTXkb3c|2nW=H z{*2Xn#+IFZ9~4>46Nm)J>e&&^-?}g@+hIhX{7Sa+{sVYX1C28wqGMCK{xWZZf}3~k z7}m}3D7PQ3?@|$i6!3@aF`^ZPm)q-p^!J4RbNBfDl(>BBYpKD;>Q1a&YRDqHpLk)1 zZXhi;NE@jh&mkRY&CxLlW9b6|`kCM5IbhS$um?hU0r&BY>4#%IDItt#M8%5Yu3jFx zQ*Hpy5^t1dw4a`m5^Aga1)~D74dxJ#A7cAcM+R%5^tp5rZCwHM3vXf}VnOSE#T%ha za<-LPk|hG1#b%`iv%EbG!S*aF^g=?*aWuyXEN^EW8+-zzbMAw|G5?kdvStaj=C4kh zLeU2Z8g;A_9afO%5M=$gB~nm^UguLB?VlBHbT^;2d8);!$@P517IRDde7f^$zEBAX zpOA~Gt;`BVr_v+1{vL&Y0+OH9ZNo?sM9Ai1;qa1H-z!Z_2!h3 z^S3bzM(%j$dZq?3lzi*3KkX9?-9316$;Ebd2unJipxa_UqF=>icc~|;NO5teEVol3 zhHrvk3)ZIVBUIh*QJ9vd5xku|ow0!ym($%AX3t!f{!A+Hh6uP6NEJ|l)h zS^(je^u+LZF!0424=e?*qB@cE#dbsd+bQl^s{=03aC~#$70y~%Tom^?Y;Sdcgx}fO zK|yvWWXHEc4=nI@(QS1mH*`bra#hgC!bA3Zjtk0E$Pg`6S%t)?y4!BrPs#lXsN#qG zmQ^ompUWSYmK@BdGo8w+ZAUP3T@6L1iE%O55ChuQYNyI)4hAIIAhA9DPh*K!tHmyl z7ZQ92UNU_xchH!nj2EJ?N7MPr9eO)M9}M@K7?knmLCPv-QFOCHZx`lJ=A#ozW9`_HtHwqi1NHOyDOdR!lP+sPD6W1)jLv+yz9&i2okv_ zB)yId7OHH5QqFj;EstPl9B)V|=S?#X!;I6+Sh_Xrv@c68&mwHugP^`F^dD%tJVGJD zUTN1ESQ!V4$YF$hsFi7SYMxFKmY931Ds`ZzFK#HvXhCi2HHL9~nq^H**CZr%i7=3B zYdBl?x>DWJ%om5$BA!)R_X<9#It)nbH*14GoA_-vx}(U({`dw~&bq4FeU0~phT#7sSXEb}6n(?~=GI73}*wsPgR(I8|< zfM$N!x+W#r*=Y5<4%el--9LBer6ur^v&8)g^i_^%=D>@!c5)ML$md^s|12xjh^ErW zZZI==HHXOGnjpuG|NCMkre-o*NX5~sgo(Npr*tS5{mJ8a$5l0_r*jBK$V(c%?RWH&>r4%5oFS8IWlDNG^ z)V*t?Q33hj!V1+1WeO}8%W*wallIXDKIeXx5%%5KqB|mg=LAK_0e{RHp&m|UC-vcq zZrbs)BA}I@2bvo)<5C0YfA6OneYKobS00#}oV2hq%h)^@ewI{`@J#gk5RACdtv<87 zh9^}y8x&mzjP0F@_B62cMGa_^6^$fEzTMrK@=6_>9_rM5s(xMguLh0f9jOPWGB zXG|kwxjycK29_>2T(M?kcedxpFek{{3l+~WlTlpXF}z)$jbD){uYRuBPP5O_-CJfK zHNl7C6b4HQLL=xpp&z#>zc`$Q2$(|h1&S@T5HYZW%`wnnHXo?n%`^wnvcyA?Cv|!; zf;H-!jq3DeHluMaX0!!v7A^m-I24O&e0OK?quI0L#b<^gtXC*?rui+Iq=GR2wHcDN()(xgbpA-IlwWO~;J&_1WxtjZL zrvwj-8pXhn3`b@25h!jipM*-|?t0!Hd=xe|GI+hHYIc_ypa}S*QKJ@C>k#}n9YISM zm19tbW?v(EDH2&;hfVc)$*~;NF50A3%g>3xUiVgzf866ESI%x`7lGc-*CA<}AVrdS zQYMmDyCg~R_)9zg~rUueNS-4aBkO+!3IZ5 zjD$L4xbfAAPvI`iGW126o>oM&lC#tIL_gl9xqR>qyv$v)V9#gJ;5$eVx9N5qa?04; zU1h9&^P^-olvOW(R-ZL{JbvWL>2FU@6EO>I7^dL*w=Xd#fze59d6P~tV7J=T z5G;%H!I=?oZBDqD8LJj0D;hpwoqt9$xDUrv8|&)=iXlfat46@r$7aEYb3%7mlC6#4 zChN!TF+5STz^oEn{*18;{O!WwN2a^x?HN=$Cs&q5+L)%r!-#UN4``#ao~=wn?NiAJ z#+SjFlBZJcL;|rtMu{P+-T^wJ(Pb#43M?G(blT`)%r#uXF@PJBLZz;tGMvt#uQOQY z?}MMx>3V*ftt69WmUmKQsEFqH3(ZzlV*3Q`Ww?F!^D@>mT#y%Z`=><1@0pG#x#BxD zfD%?!%_7tE02d^{VFtBZYCGU^%BobRuRiQ-4(^#&?x|H&8+BP92#@^MYv2npgB|{r z6TecDlG#$ucsf$V3rD}{~t}~*cfRWZ0p#bXky#u#I|kQwr$(C z?MWuKZQIW2cb~m~K!17qR#mOFt_wMMtlcbTGi0gj{f&z4hg(7Q4nFevnHcQ7%_dy& z($(vNf3XMay8-f4GF9Jspk?tZ>WQ3jrZNpqFMk3SC})~5XXDUQNb>=>Ed8m@sX&$Y z-8~~r9)GF;3WldsX3VVR8voMLQ0>XU?QjkUutP{-A0u4nk6y-VD^*lWdc9Q-4Baf- zu{eLG#9)o}upc4D3gNaHp1>0>zTXb2(rluc5SV+bxMG@gBP5Uf)Qdr6i+3cf5K%<* z1N+N)8U4~z^*ld6l{IO@WK?s^W4Kq{Ct(JoQp&DNNeStv2TTD5M=fc< zfB(h`j2Wij`2^SPi$#w`yX#9%M*U?7LtQ!F)C0y-TNu2ECmi)zOW8kfP*Xs=WTGHP%J;2R2~x@Bas*&% zWKY60NmfLO6ocu^IOWz)@ajq*OZQO7}USAW=Ik z9RR=-k^~5lH~dUb2r+t%*aje;1`126D7GZXT5We? z>i)$PvRZ2%DKIFO4dbQ?%jAYr&)++>)y)eNiZFt8cJ>8f2OFLNLNGLW|~0)X_Ls!LgxBK_R>ttM?tnq|4UCC{YnIBLxNyWcugd`s$KeIBN9Mh7-GXah?P`Lb=Y~vt*U>7d!$w zI=ncc+``0|%N+++3I$wh?BV@}Unsxs0=F?_D4Dwo=dd)LIlQhxT5YvS*aFhW`?GG+NOYanZRm1zBGn%t*B&rMs~ZIisDy2f4<@i!CCQLy}9?!c|!t5%J?d|In`K23}WfEU3gF z=Wx{AF;5B*O1d3P}2J2)*w*yWnDGAE zwA}exEN)?b{XX@^ngC6k@Df!@K`EJLoC!P3Y<(|mt!`I@uL?*&Q)03brG_~=m7p7B1^ABL3Z;!eouH3us6=M8D|&j+U5wP@i4$(v@u z_=feiT}ee*=$_NM{@Uu$?b;P0Hr0p8j`(u}(@h-JzdW3CVCL`7Mt@f2g5-qQNXiUM zz5^0bD+@yV1!?E-7s0*@#D;!Cw5(o-VIDD~PutT_JBaC!&_)*Y4|>=tf7(v@&--lr zfV7#4Z5ER>v$d|0{O<#QSn^?qboM}Sz1MgU)9EDQ{BVG#R`kF=@3;B=i8yA$hUSZi{A6UF8<;MIiU1yD>0!74+Ml;unDsf!_k2~Y#KT>z|DJ{(j z2^j%!l}R}X2>~>c3@HLyrsy`!GvnUW*JGX885tqfZI|BY+w&(hj=#*Xzr=n{ad79s z_q6Fv&?ZgrEiO8L2x6a3RfCyn*Mt~NmSZe=^6u`@2QlNANZU$5=SRB&G%D6oQ*#Bp zo-?+z9Hji(W{SP0u4%h&tm!w^T=_z-uDZM?{`8@_n-+CgUWrEIak6|AZQk_dFrY`E z3KGgGH~Zb)vpCU32@=Z#YSz`Iw*Fqf?z>|ZBDODQm>MyzqC$8LMznOAE9ydSTGV>1 z^{g^a!}(IYa(xlf2#zCo;IDhZZpj*CW+X{orZaGXi+jsSnkH0}S8%^!U`tQVujO7Qk@}}i9LhhfJ?Q!Pt?hNXX9IpOIV=wl%Lp6Nc zI!q@lIha2A%Q;^M3oANDYDP@wek7*iaeSU4CyIyOj9z&vJe})H435v23d3M+Bufma zDJc?P82w&fWxeBZdNGm2*+@S1{@wY_$>n~H6S(tt4~CReikws?N5eVRC6;==uh_fL z$KVh@Q-N{+YDW()-i~)bRxTo=-7KCoHwTdBQ9F1G!7NpZ!XV4a+~6}4C03E_XXGLh z{$zbw*w5V=rhxQC_3aRP5<>aqDaew_;mD*VHhm7^b)7qKEvB(%ipni@zXHDqWc=Ggg;SMn4A{ z?Sm1QMQzeZ;#P?$`&tD#d=@fRjaoCFaa4xHQ+-lqTk~KxRQnVcvNmdotCfE{CyPY1SiPxNz0MXm1UTm@u zUj-5a-0X5}vez?joUK;op{+(a1=Xd&?d2qw*&YZ0Nhc-xA!r9>uCRjn=DqAJ^E^uR zRhRjn>c8ORYXq~S-3Ydb8)3;ew)zTDdHMxbaHNeaH&8qf6Gyc9_i@CgAGIRIIw}tR z21&wEkM(2zFdC&cm;S)(}Le0VfhLu9h%82J($GrPhrHiGrSwvo#_P z7tyMdC@+eidJ%Yuna%#l7}TB+;*1a{V}Mr~DmMsa12o4As7F4M$SXMEy=c7sWy7h} z~wIa(7OX z|EJ$E-S_~%B)%6!Me^qw$#!X)z$RtGBq&9(NE2O3bV7J=9aM}$C_D*aM0*1;3?qV1 zmJ)si5p!yFgs|lMZ}}DpzZq=yu{g<#?vLe}dn~%YaL_SFw|(VicJ=zFe>6u&g-`5s zLYVaNe>rW9)P#qJqtZPAe1DDATL72Vh!R!PK)KsYZMk#_d#^B{<%OIiC`mrILHV6$ zGwt5Qh`A=8I@{axu)8ibHUdQuF9l-Xw+l;Jm$ai_`2vCi_gt9ryz+>K+(*LZX{x@u z?`KbZw85WaiRTwd0UfSiKxPGww~3r&veiRoir04x&qCOCq(%=!t@WNbFNmpxjux{D z+SA!c@f4UdpHdN7c*E2rZgmEvrW+B385xR}mIf$>UlBomQ(CmQ>?57~YzWzJY;Wv| zJ$BVYWuiU)EU0eF3NJ);19v#?5Tt2we>pmq2%8zHm<^E;o?(7?`-~ElOC^6=ckIZ} z^mr&?y0Q<4v$r))q6gfV`1hC6awDOCYwsS;bwi(X_i6o21-{v&d5*{SkiR9~Q?A3) z(bwuwyq<7$@xHxftbbqGV6RJ{HtAfXn4c6ee9rb$164G^lppMsXLwmp7B+*8y!skuq4MY_D6WuV-Y=E(=#=>{ zx>7J8oL^}XFj{MDF8p4=jHD+W_0o`*Z03;Q!jQzNqoH^I3%$<39bZE4O!m2cX%NGiNZ{|)Po_D-CZtrsg=W+ax#4q_RtBN`i8)crN5WB7JfUTSYm~7 z%O+YsMs`YiD7y-Kx4spYCatBv5t|zcOU!oTjZ{XlzQtusr?b_3&t^?!(+yAjdeZpL zbVW}DNRHxex<{-3XkkCMBle%L0uG}_hsHhgv8rw|iw&}eOZ>&hXI=@mN}M)t4#jcY zQO;{?ob!SGG@w%PpF|3Wh7no?fA=Bc;>2-SGosF92VE;ZlkvGZEn>?hD-fM2Zuiv;`G()W#=xF9jDxa)5`VYN$wn_pxDxc@ZP* zUDtzR>Q-S#x4=5(12VKL}7`+nqt z<4LCRh*8~f>c#R~@B^m*aOoFpMH9^I2Zw48<%+vn%{uJhIc{)TWZQ)+zJpgMRJqAQe_B(Xr?K--pd!iYF^I*3Hlvr zSsiWS7hE3L?xz#OJKe5G?5FcXihLju09$%*H5QK(6`=a3#`y*9=_H~FBF`!HCe)uO zDd7Sz0trd=yo4C3vVs>nP0^4Si|4P$nzcg`WMx#a*g@kqTPL36fF;N+&~^)f)AhLAh29 z;Y8N)@Rn4CtMrFH2iR5*xn`Ya?RQu1tKH^{*uU3#3G|_!&-_)(gF*Thx>py|8Z+Bl znz6N?P}FS1oB!Sgqo@JVhswd8Td3~aI({JkAbuhi*(2<~Oc)^a^eEi}ek(T>_Zaq? zZbx{+Pq<(sp0t}GAJUaOT2`K8OcJV8W-oC zNu1tkDUgyitQj3m3y<+39!sWHYb^Z~HhgOqi_0Tmq?AZ>fEijGpU0_%A1fy?D^BmT zcZ49q5MxA|T~rZzAZ*!|g6U19>4Ih)i(~{&R20%eGfH(uJ+}AoBLJb}QNUc2D$F;L zD7ZAgh$ZGt-5+juQr~{ZU}10pbNbr0e*wz0#THCGSAAXcLIx?qlYj+w0yS$`os`KQ zHev?P!d)SJF)wwdPT1g45(hmyN*iX+Bd-h1?@B)VZ2j-^PDbXaIa&c@suq)2KI-!| zkk|Fx@6?)L@N0-PcYEQ_`1x%I{pYlR2BASdjG}&tPst5n$m`cbr%1Eaw#md&A|p4$Bb3FUl2r1`aWCZpx%ZLh+HpYhZM;46VJtJ+$zlm1R+ z$Ku}edIjX$*%>;l*miUgYv&V*>{j@Ze4jR=z0ilDpS6elp6t#<_WU}eYcIFU@kK|D zD}o)0eMvzE>9kzO)ak;YL)?rED~jDSTdC8RDQU_j@BTYEQKjG4%AC#qJTi~Hf&5X6 zlO7%V&4cZtX`))>Zk0;gU6@g>zp)IosR=4LWvbZA+B{0i6P)Nd=XN&gx_c(nAEq0= zdJ<2-D4U_t==6)4z4bfU{g{MuK7*;X+bnL__<~#Wlf|hJGb_g@=H|akV+>gwDo$|x zg5z(PsG;6T#qEwW%5jWk;Y03@Jit59EHf?y(2hBBMjHB47u&b;x{HU0AmGd*qU~s$ zMH*Ub#5I(Io3Q(0Q1gB#msPKw+*a{pvJ$?yiEhsf-ZGGponY}%@PJfLn!B=Q1qTZU z2lLSKEX3I}Fwr3XGSb8$_xvUjT>Ud&y($}n#R-PMItnW{9j;Y;bQx;z5Q!d8Nw**O zGlDN?Fk^jFh}(@+v}9od+iId<5o}_FNKAcYL)ea1eR2I!#<1abh0&HA-5dy?-`_)Z zp=Bs~P>0O)PV!$hg&fOEu`CO}LJY#N?L_uSdEo{~qivu+b-tTQ)X+>XS!raFpXQ&W zu(gDCKBZpnZ*3t5&q}^cQ=Uj%Iy24qn=zburKB{fvx&h#e$*ZME2j*z+hzim4FmmO zP9jZbR@0#cW1W9__)D9lv4%kuaJBSmEE+g=*vtNZ4ccg+su!FW7L<&NvsHCB)b6s{ zfLIUkW_2E5*7sI_z|19I`Xr+ukR`fsr*PwN88@%=b%xfIHg~PK!QUHa%IpU8{VO@# zv?B=;RRKbS`Cm5G$VsN~1GQ~y5ahhm8!m3X=eQzLlcd={N#<`rS1j2u9pp}$oF4Op zOLn&4)z5?2GYQ~nqv(Nx%h!*Z|W$Emk@)Z{??z@@(-827Wcm=vY%;lwUG|9whq zXTU7K@@sSG-|`tKMpEWIBQ*MoISn0CL2nm@(vQP_Z$Mc2;va&xTOBK5H3!!aQZO$p z=~N3x{F!l7DHk6{Ih#@Vdj5=`)JY&uI7nq>5s%lO|Gl7nkzhc%rK+7UVOVu&;d&cj z0L6Y#MiuWkMM{W{oLfc=sa&)-F;V@WTf9_OC$Z6Z0eL0GMDjZrnhA=3ny8x2z!`_B zKW#TE&ShMyit?N;tZ-Etzb>w~ho{o$$C$q0WN0YW~l9ai3W z9bsWDx}`$jY)U%=U^a59J3#MR;f3I&e(MuKXsZ|9>;RBjc#Kt=P}CsZVMM!#X6`ja zT8TPR`A!E{uf_^|XJ}?%)?;A7$F3Vsxw`S#OuqG#{bORR{EDK8C(UngJJhQCIk40aXttdCezJq_|j9bFfzHv3~mj^Ps&6NZqg;3P6y0_TeTfP)^@-L+L_^*K+j zl=(&h=W%T7N51g)toK1%7f9(RUGeK(QY2ZOkgzW1eH0Qh6)S! zF1w+=gL`5?yC7d4U^BE41t>~~rqOrixYWrqr?Dh7+We5F)ow0;b*d8gI%%a(iGOgR zJpy|W@#k(FBqJ0Go60)ctjzY}O_skem^@GyQhmochwpBapb#>eu2!_7 z4NRlybxXktQ4}W7uQ{`4a$d$b>83&dX|ggJY^uqZfn$3V`R&*r$uQ9&iseHgGgMgn zQ*wXkzv!JfOgtdFCS|$p4$H%R7KtEBCj1m6t0Xh{s+dil^Tb$LgMn?StYoe)q&bG78&VmA$$?jUXbF8nv9(=Z=!stn(K?v^7@S_D z2|WM^mAQZ$Zj>G540=p{Zn-~YZDY4hpFVVFBm7rvCzC(2zL=GYJ@;fWQL9%>aUkR0^ptU+52iT49zy;pDd)UPxIsVGq?i-xqL+ML zw*MY>SMJHqz3v&(=nJDEz^a7e2S*_kWC zXd0Eth%){td9ReH1P)Fy>6a-;kpHL+2y%O5D+!o1vNsRo%a9S+?yG3y)Pws}wxQ8H zs_DHRRQ>7`v=abr-r~j5Ro1K$Kf43n&C&&g#FAP{W9*)LC`7oH441I}3(!KP=e0rJ z-PW~#s-5q|1xaeU)hz4AG_o-jd8)Nw3?}7ZW&$2p1A2r9=8gQfOi8Ypr9s5#@_t=8 z4>F69e0tfzZnuoN@?|@2;t^~8`z@E4US;q+X%Wej7f91KXgcvnXeg}n3X7GciG@Olli=*gUxAzEXyKUG z)>Y*ixsuSy0xIdSk%DZyQTB1!pE70S|o{IGr<4}ug-qe9i8umI< zmPTG>en?;N!}2fM2>)PQ#R;muBL4j`@AbiyPGcL2FH*V_q*}R2Cea_e;fK|#+|dT* z=*`+}A{H@ut$R9@d&XJag=Vn;HBUszjsj?_=1Nsyarh)wNJ-GCRl~HQdb&rsrvI}w zkNyH-957JVGGf5HrBH(B+@{VRt~Lk(v!uG zYLYJqT?9bmqJl=h^w=)I^+-c5Q7GgBX!wH<_TTM3R}<3T`^ErLTC;ygk&kA3dl*vG zAP}Wo>Gh@5o1Ux00NWzDs?N~4T^tc@2&s6YP$8*V%Xo!+Z93s-yDO6hoD>kF6)Q0_ zt|ldc;j(6_y__>1RH=Jw&7yeup4*hXPQCF=M<;MaGO72$R#4!CyE+eL0F3y1vVXNs z$w)h=GveUCoZ&)rzJl)1+xX`Ph(nL7F;MF z63x7@g`kT|qvvCAXKW(PR6b_)CrcG%T-+dXxr(0P#nBdEkQ=`KDhkF{rNIIYt62X* zqIeYCuoxGLgJ-!ah3REDl`fXh2q{*Is;a{4;A?qma=+j9Q6QJj<1||jtI*Ay_E77^ z>6p~^5mnv$!`1T}+%8C&O_S?M)9yztR=pdn4bA=$sqM3!pUXBRO`pF3f@OXk^eEXI zfoMD>Yrjiui*BTRp~xiq##za za2&gko1{_0$()7}RXigLjA{(6k+e_etWq5FqcyGQ>G@K(<6iS0bbO0ljl1`RW6MMDBU$ zX@EP#QKMSc&0d;<>lzm^$Aiwi>4G|#T)y=(4p}MrL=HTA0#v5P-{}w?U9M`4Ce-83 zcGncA{)}cRwDbmPB2x#bv7xol-ppjP16$sI+v8@wzXUG@B;xPFY<;)eJ}oB*DQbXG z(9d78le)jc2E3Vtjvo+%(pgi#LD4@ZBVb_Ss~WCGrp&!=k)kOI6kC^?SqvUtxWU<@ z40X%&ZWFA}Wk*Kr*$O_fgfG58N3*B|8UeBhqv!0US){x7Y9X*Gk!eXqlZH;mVr*+gJJ6A60 zkPn?mL{*yaR@iAq&m9)qH9hoMWT}jdDmHH`Y`^R;|0gKO;*r(V*@$(HwQ(?>e`RbS zH*C--ipa+X4}B)V@!JvkSSm|MN(9s>+w&mLbSJ^<*BfG_R4X5h`kH04KIZ;3@wfb;s6MN|4Q6n0YO}x>8!zk9jn+U1>iG@yD zE2<99PAun6$H6NGlV0P;@9R+I&@d^ggE=d)>+b1Kk9^2IO|mLeF?jHeb~fY5IqRk$ zF8oY9`D1ibDksk5-D_DW{G7{O{s`U@cI!fK|6+oQ znaqjoqd}9X5Ri1Kv#be;SvvS$^GcBaBgM%Gj9VrrwtR{&&j!dr<5CthoJNP?X+uXx z4vrXqhc{I{ml+VBni(kw7N zy=wGbdjHt5D;^~3Uuw&&N}e{uvev}6a}1#HrdrO?*{&DMcS{PM)Ln2uN3vv1L_3`% z*#Fa;td*IGxD*@y(8&DZ&D(ifDUF0{8~t^ze=D?E`GL|xJv!5+=zBtBcO?@|9cVKt ziSzW%3Yd5jxgR!orFj{#KV78-&q!hKBY%H_+b+BeH>3`wag1NSo9tAjx7q(zrO61p zKN2wtpG=?dpA$nn6L$2QBY_3?ia7i)Ri!%)sEU*KU=fK1*9U2aLO0XosTN>6?Ub{i z!SG|AJPNDXZrJH)E@x`@rGe6oy4myVdgs@XdiokWd|1$NT=9{qS``r>l*`?p>8o(P z!!U=TjB9Kti3E-4^W6WT`IC{*lABRqXQ@wXJjYhBdTFJcOU1;fY2W6H{sN)`SDi1c zx<&PV$RwkT)0a1{VRx6dL;cwjyIHx@gWOZHbH`pOiMja~4zk8szDiKUT4_eu#k08) z?o3g^sS&+STd2h%=K`j7TQO#cDIJf)8C9j?Qqn=6ZmAnEQ{`s^Ig_AVJ!AY`qb4f~ zE_UaI_eG#ApAGp|Gif{Wf-gXjCS_(kO|4yK^6W(QE+<$W;FXU?(tHEm5KCl*+N??e74sdjC(Ne(fF~#LZv(@pbr!fj=Pt zY@d{z`GwVJ%q(vy%Rp6`-7O1&qWB*+Qw?&4iB2LUEu_jGDgss@8T;PK4@@N!RY*NcNq%}m8NSc;ct^!k-8X!IB)W?O=l9nz$Gxl?;`6tZEGr?V zcty@+bD#z)n{k^f8ZL);%Gr}*Ediu(I$S*Kcy2F$dXxXwp%uERrm{?Z$jp_KJPmZ*m$#S;|Qg({Go?3Fs!6&6jfV?yJFYhHr^aj1T4Ov=#xP zT-19m8iRFPYySN%XJvj~0lWOb>*oPW$Je+w*>NbEPoz;XWrOXk%F9J+UojJ@ zgx!^ZjWoBn^DX`W7KGjAG8DV*8lb&Q11zjR;2o2O?XuZiw2NId;(ps<#02zEn;X6m zfaDzLeUf0Yz2T*g!8@QGlXA}L9Dp?8#gRl|jMRsfb&-)Num`6z2%X)((zro;M|N`b zlZ+J&woWHax;Wtwy8m2?`Tg!QVS4}5MA3O+p+q8ceYC|l)@@B< zrfGC?k_rXMZ1NNG3o?!-u>po@R1D2xWOQf(#@(fw`;CQ7?m^hI()%-p0g$o&ur83X>1CG<7rJw& z@4FF+1dQ%hQ&&rEjMPSFCd#->Yhb1?gwkE2xjN4AI4f0edeiGCDDHavLzRxY&QTz( zMn<{H8A*#v%#^*K^#jR~7^TE5dFYZct{@MGMH9ZW&s%ukJ&<%BsNwA#N^`az2QRw6 z1cu*@>4)G`)mHSrc!ZRe$#3iH7caPl#5$&V^>xX$KaavUPRvKX2IB|-aypD$c>8u9 zb=4FYcsO3wMpv!a9(K{+04(~pU;xX`E+8(1U}Rz=4#`94Gv>PcL#JM+ z|5o@brOG0K3Dnoei#q#LgtQ*g!)NXE40_0>baGv~AT@AtZ0QyI#1rH~tf65Q8}q=2HbmJG+diXCmwSey0`` z5(0O-snKdH)NHW~?0R{=+91_>8^y~5w6G%s`)@mJ=BzB01PtKYZ&4RCZTKf)EodD) zhDZJ`1NoG8z}jwknR*c)x(e%d-MgX?_BYyIB$jllwXiV|OS#^h+wAG9|IV;$0<*d+ z*mZ)6iu=24#eHWyqqupY41PC7n^6Ca->APp6a!5vjLnSJF3Naeh6h^Hbs{wnlL@i9 zd}b${pm??AN1Um?h^9RUS~$vTy@7N(RTsAn+4oC(U}4Q2oJ6&h3P87~*A@TBv05ob zqf<~!bk{X4@pp@Kqm~3iAuilw_Tg3EI#F{Iy8ToHN-WyWKhrCk{b%K?5UE%=GEOps zXZpob1h>WI2zVIM`!kDOo79X3MNs7QhCTd`jJLlxRNgWAF3)i~3q2C{TRK5fROI+V zutQu~Svi<;lYrf`qPt)Fd}%B~#T52XWUr!HL{u9ChBsdAy;y`xYge3Vz1L!aY=Avy zSeD&(Q@vgsVC(`wTnc@C&X^iaC;DG-fJFrQD@tffuWulUVI5N3T=R0;+r`#BI|1Li zAOarC740ITHrpPI5xKk8NVkEy(v?b*%D!43a;r`9G^ZTADne+^j$cn*8aHlrRlFDr zYtKBbHJocd3|_wM=P3$kD+hvCI6=dq+l^t9LDMR`fHT{JU4tzk8ZQss(S}mcTHU9i zgZQ#!mcLx|Ixvf+Xr!!K_3q$>MMnDi`FaF+dFRdmM%U$<(Dj3GXlUr`RohOmJi>D} z94zdw={Bns06E7QDfZ0|C%_sE54QsjpdXQ6TJCT0=*m}7zz0Z<|Av2LHD=xRz#+BY zes;w3NNEggiOG&&@tpx5#~<{>G$^!LK5Svl~Xb*A|{6$>J(zeW#0({;c8ZDcZ7MV%1Z0> zWRDMwnQ?d>DWok1#B?j*G#I{%WZ2ASfo5`fg_6i*09S){dS<4tvajhpKD#Z>a;;9* zuhZ|jP)B>FoK5lXj4p8ml7tv2K;j<3wvw2!=r<>pOQP{mJF2}zZ$U;9oOSAoy+o5b zUpq=DE^~K0P9BU3JX)lREo>APnsMxXXN(rIKnvLK|0G!yet?9sV}#WhwVCby+Fo#o zDN6|xl<%2s4}TR0Z=27QZDeIsSdiy!FSW}at3pwu2&@I8Z^no*j0GdZD6$6O7*YkJ zo1T|I@Jrmk5Q-vPz9*9@)KnBlblSVoGbV0kZZngg=pA0BvJxA@0IAl`kPM$6X{Yip zNRG~4u1Le1r3DHTRFTxu`&YkS%dB<8)F~T#38%&D$i*=CO!58fS&Zg93W=JV-?e>0 zJZ^SCreDGmSazp>?H?ECjd^F^Tq3)9vFfF|h;UHR1PA_RCxdLZI7?05ey5>ce5bp3 za*8V7ge1Am6qzPOLd8VL&vh=$-yFEj?1u?8HH3MW;R}aUYL$nXpR9r5FaHjP7_J;x z&i>ZxDXvH92>}U=!DLe}QSlfn$>16uP_5POhy<>CVm*CP1nbF0rPEfo8%LL=X6M=4 z>~Jz`nV(+P2t%~uT%HEEmvhB^JJa!S9tobqHSZ?8m!_R_rzB?4XmmO< zC28T;W$GerzR7VgcsPv#Wxse0fcKWa7ZwZmG3Mt9^g$+JJwEi6Y%i&YIMbhnuDm}< za+%E1((iBexaFaq5oPwW8<#Fn(uv6A{lQhKQuQ$@cd)Xun#_@^BInGn*O0iszk@W= zIcCj?; z>TV>pTG-)Cy&!4xZ_!f*oaREeHKh>`#@!u%31z~d zcgC_?%?ju^TQ`8c>Zv~jaz(z^pS*CtaDcKaF>U>Drl*j*CQ(Vl)d1EsS2Hw+Jx+h2 z#pm2eg8D$H>bW0VrBm_meX^3FyJvDRXvr*x+c#0Aa&5YHx4;Xwd?W%wpkrLGcNFHW zNjzw0z1Kpe3fHeDKsMlR*G;dIWOG>=Ip8ERo^=SX&lV#Xec=+M+Y!vTmZ|^Bv8Z=$ z6dOxrWjtM#UPW8bunR}Ac|GBZnha*&Y!5)RR1WK?7Bz#qEn`7$&z9~oq6}Z0X{P#; zOOr*dI#_!-hJ*IKF70e)P^(i{z$sN$XYQ6Wa9^^d*t<1WIPI`HV)z2%I5kxmhxPq< z)_LC?NU2(pFLkbXg!LT8wIz)V!r-pe=?lPS|FRE5chrV|^~qZNjLG`Od>LMOwHcqu z9F?;qXWl?fE70}(a>3zoXJB?b(j_DS%SGB<+MZ+PDw>*IuQYwxUr7IB2>(VQW{gc- zM&#;#5XQ#9%sw3ZMn1NVm=MVhIn zsu|CDo5vF6y^C-=r1x93Pzf93r1p5%@G^IKBh{Q^VN^aT=(RAIeZ!8!Qfvea`9yWtyOZn7XhCz6VV%xlS;-#7uk zUTzlhCb?f@yxHoy8Re5tPhN{p>eG90MdyUUFn0R+FH3=jG*f1<7FSNH@x)Yl72%}v zU8>MM1GHKlGb_Qq8VKE9KQ)4Nj$WtiQ&(Y zUB5)8d`1U?`Pxy5VKawC;*78e+=)$GBUfL0!&B%iY(>U+h>d6@`$;#M4$!Z-NhO#k zLB03EVn6mlTcz7{c6;kt#cbS82%}N@uJj(*H`Oo-y>q6f^`g(q>2xnsQt-4n87zlP zDmQla?At#z!}gC%6Z3H0866p!lq+gj`eo`3hWaaIherU`rsq-S#m#KgS30B7Y>^mZ zy~|3w!vO<;W_Q>&>We^*gpU?9QT1}bc%;DFrBChJ%ZCdvyB{SpVtU&Ck*1y8Q!eG8 zocrVxi&O>MF3J8IG^P_wENj)^S*g+&qjLR$`g<)Rkj?S!?iRU)t42hR_u)j$%FT_` zbD`zp5mzXKycjbY=tCrpT1#}y$j@S@i7Uw`i1k(&=|e<~LQfSpB%x{{2HQ8(7UYfv zTE0WkLtRnU-H4WwY98P3lQ9;DGZ4V=Jjk-^9RN@!>wP|4zsx35X-By5&eD(=EJ3bS zU=D`*yb1(`*oDPL4DZyq>(5s}*HWE2CGx1suS=Le-f||Vf9*enTeK|qk;dVHRAI#X zIXNlDO9bS8g73;Dk

r8J_;@CyP|?OjL}4!vtMjwcN^r8>7EEEWI`Y&mwm5ox7!d zYSc^vNl(Cwp(bPp0PtwY@b#eBA=R3ntb?V7*bPN5=#_mfdoxmQ3$l8JzbWBoy`I9< z9UQPV+bjeuDr0x&h;0tI9xs=F^GMl_uDL%)9WR{}4<2uaz@SNT2@}*D+Dj+=W;Wej zZ7@n_FaYuWyc4_JXp{4cxjfVc0ZuNY;vxaL{ONW%B-!NJ4XPaCHr$=#TdHJ+L}qSc z+s5e4mik`Ht?PA#f58_qP>ZwWc+=$5i10<13ytGgfBWZhQTbsf#`Cw6T8)|JLWMon zZWC$Ql3px|c${TSP2&x`6)Er(^ zNw!6#LiYYSjsgqV38ctrH42k*$+k+ zt=)2Y|2hv)>pZgk)fEpr?5}NH=xyHC!MM`+tCV}==y!K3sb4$SFqJ8bvkKJMjd#U( zz^kpL102*fWT|lcCs$U~hEezOsjoKL%63D@)B&(y&4lmWAVdb2bLAtg9OpP|C-i`@ zHW1_)4My{ObC8*0fWm>H+mk<$z zAFoW-#rf^=*-90Li$#mgVu_(Vi@~Otur9KT_WJeAf6Nq`L|dZ6 zCGT?awzvS$rcMSgrnAI-ku~j%LLy#|`$OyNR2F(LM|R-W*Q%8kkj=4f&pC_@6|k!v z(dt41W0%=-vl1Ho&u~iIJDWH^`xi?F^q8Gk;GNS+@1|~I&V~X1tp38Y{^KLLBHITJ z%h|MLt3$-CN@`9CuEW0xB^@)S#xS~(^M($0h0W^PqD!Yy>Wa~vr@zIZPJm3hiG0|Z zpu7rY4Q7UwnvG??cd^obsnHwC0f}Jy-SC%cp3j%SdV6~(NB;+&tYLWo7Q5<|Kn{8% z-3OoVRLcM3%)jg3Wh%A z6uK=`OgeLlg-@c9k79Lg3-U!}DCC!(uXPlX4S$I<@&F?&KXbk@#H}`>B|Ng*Fj96B z=e^2ececctKY8(j55dI5j^saKI~-3980zTrkJ4tcmhR?aD0Asfzi9V(qOESM{jLYk zDL0kD+JF3wFD&{8q|R5ZR(U{wAp0Q++dr(UYv99LJb;Y;7rM0X|0C-y!{UmTZBZNo z!Gb%%CAbC;?$SWx?(XhRAV3K2?(XjH?g1KicYmF|-~HY_=k@Piv*(&pJ*sL{4WvkH zhTf)4-?H>!x3k;@Y+7N^r+_NoXUsf7kDG$5u_Z>tsw6a;)AL}Ky4D=|BFFHkh@n=C zuA-tDM zOgxmW5Cxy{UNEZfzEsCUak>&EpCla46H~);)^XP5hnI`ZTVCESX6;NSuP;x(pnlFn z*woPAPU1Z1n>5E`F${Ke*nSy`CPJDdI@`^Uj6Rq6;c>1!okxM;c%Qd_eYqtfo5qRE z$jDey_*(^M6gBUw{Q>UVI{8?jhiaJNP4!RarW)Y`zoERNhdxyj{?!Fl7xB3*zWLa+ zE%d`yU+9gE2KWRdO#iw;4bf|~Rh-b(AYeq9fP==<%`R<(*VSQ&)n_FGTT9^;VrLEF zb7capNs|Rtf#8OS|?c2sVA{mNw5h?Z0OxIVw$TUjJcCIi~f8Wu4JZ(V{luqDy9BQ;@ID0K!Lw4=d zcaZq}-omi&+ph6sgL7{$JTh8x@aM0`%{O9!aBq{B8bWpYrud*Wm#0hxzx=gGAxpf;cHRDHmNGarG*>B4+)`Cjheq&MGz9#oo#NH9Rv$=U zz6AU?HTo&+`&LYQTZY4r`gm(f`;75l{4_2bn-v|?s}-V+_moWR@_wFI47B1pz;d#r z6w&c)=fIDp{8%ax65)v3-a0dfEFjy8+Vk@;dNrn#Pf$&z!V#%Lra+K=YWVfnlfc2K z6J?mwSGc$=itveHj|JXu-?UTWnyfeaNy}zQ+IdrfGf`{L6a!7a6$GAO(zxsfT~dj7 z+|CKP_1JOl;f-Kh!G4?6sd1XbCm4PNQFqZ~d>@vjFNdIoy%2>W&UKLfMY6=F0>9-2 z8k&WnNUy#De!*TSau%0E>C?v-<7Zft?dV#Uh&+w1QcIx2z83-7O}IC-GHu)2q;f=l zP}M7iTK+|>hMl$WF{`o#ombh#CY%5PTrDjOToasniYa9)PYUzYDg@!ztd)xosM6Wv zdYTyvU*K4q95BL>?1^KFuK_8ccveWUb;3NyjuX#&8MRY6 z&^}QW3W%Vr>&lyjKE3P;xkkd-3EQEbP9j4elXhNw1+bHir4|lEmJKHAwTDA^ek_&# zvRhXC8J&YL!8RhO6|seoJX`8_V;o0X2CM?Z(*p{Zi&-VTx<@@n7dD|S?*%bh#1@t$ zOtpLuQy;M1pn2aFRGNi29c~mTc+S76o#2Iu1_=BW^+eygo+uK`@wKrrrN2Q@T9+h3 zTG?J-S+6nbkvi3MM_k*_>`uv8Vt$Tc1SOo5)0{~x3{*t^po3VQ=Th5_qx4a>zHf*i ziaorwG%?+dZ3&N{RyL<2s5}?BxVGu0jps?Uj0l3HRvKzRBr_!6vQ(243y`m=IW10q zp@&6DgZ)d&c9w4_78j8vOCbTO6hdE@5uc@9DU5-TfVBg(Q{6w36tx$;?@~V?JXJWC z`5(pIUYA*6GJfLKJoCjRh`KLWSmSG}xv#$6VS3;oxN7f&!tZ)~DKQRz5svMw^ZOjr- zqRXIkauGt8d*8h7Rg-b&Zt$|?yKj@s?a?in7fTy7KN_NOSkv5 z5ry`;Z1xji%?73hehGbFmDj=briMz#rY~U422cZ}H+=VoB3_N-M$=T=<`DB3;DG0{ z^uJ-JBcPPAYUm|@$mPx>?mTOGp+`tQg5YevzYW^{^}r23$$`|U`!i8Cv2FodLr3c@ z==-Yj)3omFOwC^zb>w2tMkzOr*qo~A#B(AW%XA%PW=-qB44`@3^s!-D%`+0)&C5WN z@f-rjZ6x#K_i{vJf;kcr(r`pQWVR`wKkwyhva%~_Wu>5KY$JWn6_<#aRiiu4 zhG;h~>0b5==j&M-t-oH*ic|Fq5TdgHq$YoRPD^R^sX6w$kA#B4LNS-vLZ^5ooo0gI zTEo{NA}m6ZJX)@1%)T$+{?SpoAaE#8IZ@>q5&Hb|;igu>m~m{^n*gu!A02JP?WC;E zfU;N#Ck3V0eaSrQ)eOKEVQNZ>fuvO7{2m_^*K6ew@7qrOC)|%d>gOq(&6okD3z6rW z+Bg=d%mp15TMs{OoCXOM(a)w`UFcRt0En`0G*reYw*$vZsxqfl9hWyYa5f1E)c0&I z_4P$G8K(7gIw|*O(_`yMPX>`-^;h`iY~7jCWBf^pSLS>4ckY&WsH|Z9jTBXcBGuEV z`d*@>3l=DA0DGmBR@Mb9#KqkJesRzL=>-6387Ih-W}C$iDJlV}dJJJTQgqM$6rk{k zVNWk6-$wgBBCEygxPS!X4k)mDqK@O7iM>Qc_1(f3QNgUOQ7hc}W_8m5y~`#yrM7cD z#?)2(NcQSOM|tvzqJPlHcJC|q?V0d$Gk4DDG>UzNR%ZOZH<;1DKYr%SXr-~qX2HS$ zlNxJLqxSQQIY^U&A!&>QA3b?yFjCvnd9$jI({@o7(y6E`t{~mHvyGm%QNEeNP`1fi#H&IU*_wS-SP8{4O^)mquRFJyeT@iz|#*gI-+&?}0)y!Y+hR z-Q;jO2gI%}wcjRdcrckkx4g`?dH5R6Dl1_-J_7@eWZN?xX8L|UX{sEIxRbfdN+3x5 z+Lagg-hOJF?vEulN8Hwo%JaL0BPob}YU@NEiQ|P;Wpts7OKt&&=> z;;0jE7(Vg6WtqEg@Gs&SA3@w^Ir&EEM%t@+#&nk<{Bqh_HhY0K89)BXU+1HO&YbiC zZ7SlFB4BllvQSy`ymzhH8_YbdkW|#VzuX7p)>nu$>-VGRQ?0YB4sb z8y;_&_bH%sXJXlG-5RQ@jeYb{Xe69DXC_6Dt*z~)cWr8%3boeRr*AfQUl;E_LIEl% zIl^6uGz%pGmh~GS&wZ7}TN8KycU{&P=JZ*DzrGq~PxuuViSyrEt@z}l{rA7O1 zR;0xjpG2N^eAz>(5$EBeX1>dN`6DW(D-s;7XrVc%1H zZjNu8_x-kJXSAw1zsIRzUO9_D#Ng8oyk&jjMaTM*CG|6l$G%>DZ3x4U=2c*D1sRT8w>oNw4}bm5mJS>&XQgqW_9 zI1Vo~9i-`nnie=RbVqkYV?t#u+TAeC|dLNYXMqd7O~_C_60zz7>g`b`{1Yhe0pSJi_ve<*=& zFDGsUuBhdFv6VjI-UqiK1@59sHu6Q-e_(05{7r(L18x;Snda^_H23{?+b97I$;EJK=uAr6`G<>&~R_))9*^mf> z^SN3p*~1lo|8o<~)LU)IUvshe$-RXu8z&To)r!rwE?1U}En;nm12^;&{71IF6U*b> zuz0=wT!lYwtJ8z`L*a)oA0>?%7Qe~BV54eDYgWbI+qpLW1d1||} zi{&O&LC|*mGhM@V-~5NNwDYEImC>ujX7*;dt#oXqa)+*EljIvc!t?_kl{N9_3x=ec z(-(esOyVGgw22=nT+Vd^Rn7c;MP7cZm_d1WrE-Qcj4>|J$YS4@1Ysvk^PpXjiZXN`9-9BM}(0ut7Xvitnzl_xTIG>YOnA>g*t-?6B-9ti~`T5zmpV zsJ(rfHh-oik`fF^Lq|oIT#NyWZFJ*Cq`wc1C^r+}{oF$(*^cD$nsL*M5U)rf_WzhM z!h|1yQ#+4m(aZN(g|mqovf7n;CVb+}D#Dg}$e61FZ~+%7=} zj?9^^u@-}4oqBHC;mO6^+V8yhRQImTHIn^bviLF4E`?S@3a+GI46zY9@S=k4l|_lG zL-a<_;;-jZJ{2g5J~NV2s=~fWPw7awLPKXMcR#w-(?9h`r-=$oTd<*TlbUG@R8-xR z5p7C7guV9h1kGDg6`e##g%4b8$Xwc1EU9WzcJAA4a=7O?s!8uS#LRkN0{3^Nlu8nW zo?__&?la|v)m8xo(pqkN6rn(?Pzt0V6}!>ypSpV|hBGTcnB!FFc6Kk=I-~WZ^suQp ze+=tku(>?pb>{}N?JFFso$EtBHrVW~bcvv2UJdGf5~B;Ex_`br)I9c5%7SY=JEW7O z*W?^k8_|;gmcl+)=~S)0ufI@i6sTGEA_w27plW+xoEjDSBPDa8&+khFgcaDAdCJM^{XSF zJEPw1Lf2$*qHtY`M7Kb<%eUh?MZmuMlIds=Mf$mj{F3Gv{d~PE59N5t79qMc39$8% ztu386O{@9(Qs;VuxV-i~yLfj~?vqCA33u)NhYf!4D`VsFMn3{ZzaXU0!tKu&IrQn1Z5cnOKu1mhQ{Wc8!qC7kDy(wFfi_%?gfB zn(S9BEc;n*$o@o$`8m*AcTjIhH8pB;wxBI|ui^B*ctPN4wv3jMpeHO$hRvjr$avM* z$VsEyuHJe+5*-P)W6CFzU~jPJsEUHg)H2x7?=3`zJ#xUbPKBp_vEx@EyXAe+f#cDr zM|zRhyWKYTBm85I_7UPA0R~EaymF(-toJ1n6k=NZBx6NOl+KD|-aWrecx~^(hW0VwxWJ@b@G9+%$R?L;%x=7LT3lm0@_}e`dtlJ!LiH2{VY>m;RxiOW#H++Y8vi;U6qSj~N$Zz7w zZ~FikH@^w(2^*o>+2lG2dT3%2wRgtdSh*)MZFmt3Y9fcylLMV!MRMN_Y1U`lumpPB zkzRftFbw}G(u9Sf>r^T_Q-dM#9(UUY?~_3ibX+03_Oa{$UQx8 zueWQ5ad)xZ>1vy&t1l>^lz&R^hToCMGsq|$TszX9Wh3yScUPIKIL7mo6c}P8&@?{2 zK5l@Zl2dr|X5>-sZ_LJ*vx*6|9P?e&=6=MhQc+`232k)Xb{)b&!FE;mbs*5KnunZI zc#Q<76ZH=!$jvosiO+wNo&O7BbWN7b40;4+bBM`qy6&J=hHVU~KF5z<ymi2v;gf_t!05F_R+5`Qc`c z5&<%_5Ki+R!Ml$w3JN#)l0q6LFdx<7)w46DVVThUk=mfXq(xvAdku@2%`DgWH_|)U zW0&pC;>{CNf_&Xl2Bo0fr%5LgQ`|Qd_Y;^XrlP`rzR?y#7J~etGe)&aIV`&N0fac8 zlfL0cBvpIFg4|t>nlDiNvAl}^5!f?lQf@qD{c?W>POz*XWv$ei1wltOfGKt>3$^qx z0IF`&A=?3&T>Bg{ZhPk{L{r6zKel3wd%XET1cZQtPswo>&D1Hs)>7B9%~}?R?MxJC zTRo?dLa@XaPRrs=kyr^1YOhuW8Ztb+YY-ziUv3fi@_ddrVE6inFtKt?Ll(ruUyW2_ zEK1!@MV{7s8d7iLKLo()E?fpZoyX*yZ&_4l;fh27%@Q-*_hSIQ_8W*;HxkhPJx23^ z4<6QYgG%Ar{QxDao$jNKg+hcH@AF}L*L82W(64qW z(t*6RD+MecaR*07Nhokof=nHR`cAFmO$~F z-{Ei7TWMe%;UIYdl^%O7R~T_uIjUa8(N3d`(W2{#z~+^v)Au}hcTAF~Gh;H}4<+Vz zzLw9Zxxz<}Xv70zJEqGv1@;pC0;~}Mbxcpx>~M^3#G$`G<#74}C<)VNveoexCRgd( zKm_h$XJe>+XzsF*ri>MTkvKP_BYzG4w4ise=`(1arwQVknv|G%#zLO^Ey>~u^aKdTM$*RW7JO8cRNp;Qn4F6p5nSnNx zTp!H$Yx**f(0zD_do9(e&%HH5p`oFXYnzc;O2y3$b1v})1ZYoExm4`a$f5CSD z2b}5xr|PU%YWG5>2BQdATu;@FNaAj%h7m52-l#9Ue^^v^&cT;3*D^}G1q)SDbO*F? zzX1ti#P#Eje6d#JO0*$=mCs1fg7(t+hld!xaP`{7ecVA?xA^+UAM>hv`eFp;_1e>b z>LWPMNqp6=w#-*GR6DJ?rC}|1?)TF-@-(VbVmUNRyJXT)tZol(=As`8cg9ces%hi1;txEEdCH9{iQ7J(i$S4dstrYY>-h1?S&Y%h83CAQajN1| z(}n%Bw#-KvCMd(N{YWV4bSg%Ts}jKi6>t0=RyV+k)R8(zy^BpP!FvX+1|-s@d?gW| z)C!`u`@=O^i!h@>dr#FmLjBRKT(Y;{e<~zIMf0EHzQB}VKnV*WAVBU=c9(S$Hjjs3 zo|sZvmbEW+3_G{y=h1^>sfDxNSoI?@zYp!xz3j!F^rmtTx6?(uV4uwEF78LX4i@f- zX}3Zd|8}L=bO8*5a>*oH1g#IL;`wk0;BRTPw9YQtT%ZW5&KL4C{xaTfjEvQ9w+kaX z4e`#|-zHHqvvBnhP@CpVjK`>Sgzy*C#{DTmNcTaLjdRCNUM#2GsMMrXh~jTTb%lcc zVEr1BI<~CSwg8MIfi16?Df0eK`HZH)nO+!v0r)K8Pc3%5u;2slsB)%8+k$7aGCK<{ z6h5I6BO@a=+4rp|k$5*~p{ptxqVtP7wqCbK4Kzte_v&B7q#(QA^%@$K*-@9M-o2Ws zO@fK_W00ph1RdrjX+auP=rT9GpN-CO)vXIBj{saHn8Fo!17tGq!7`|;J$I@2v z=yf_K0L}(;9S0D_KO_O4{hEB=JmYDV;rKmoyN5{pe)aBVp@~Dnnog#dc<1~0_-yU( z7s3sBHrLS4{GG|ysLQ9m-bilJ|52A8%6MvYxpq;bN)MJ^B*NzhHaw~MS|OIT`Mpxv7c8QXgbnzHFHDYlKS-sd zdsm*Do-BwiJ1_V-=jL#vF)5RxUzfrTe~B3N2^{D=O**rdoB5GPP6KEx z15`(@v`shsq(f{e&=~cLT>0>_NYa~jT|xMR5w%j}Y9w2+Sjr&sZeL&D^P5hN`DUIm z-OnD`X{tQe-hn2FG`rD4a>x!-cT78>P4F6YZAR!ermgs`q!b+&m_p0H__ZbyG1Wj?fig5`{? z*E*5Tq`D+a+~dEc02*c%3W_CT@YvwMDUV*aO`oER>bN)z-^VTZ`4VOL3?7%>g)+6f z1IKNYspiX}Y07}WGW!`}*Xz#Ilp$)td^{qZ?PoJOWOse(>jvAPHY;%^1I@<1>jDJG zui3}}`SDtu`(i54VrQ9!v*B{#%BG-L2PI36G@oj6+Ub>sU3Nn_f8bCjWIcpM@<9o4BsoyOsvF$o-uflz6#4X3AMRA9IeYa|UOK1I#RXed zSV%$te#Ob%?17jtn_WtfYq8*VE-OAmTg)G)DT3`_rttx8Eh&U>s99b^%w4 zn}Xn06piM>tK$cxGpU%SnR=y|m4|}q0ODS?$(lUC-lF#QT2*w`7`LdB)%nWaO{6Cf z7EQEec_>G$CAoM)w>mGOqyu7@2lJtC~YBDA> zc#SSWJ+zr|(qLLnaQ7I(FZ`?hG5N6;ZDIce)B6Hn$-;GXhnV@qpwya@2N9R@wJxb2 zlj;F`!|$k)HNK+KuI}R^o=Op4De>z`q&)K9?o^gNIr4jwbBT`D43E zIr82jCpC#>w2G~PB^***zR&7x=Q-hmV9VfZ%8j-izGjk)_((7rMwyK3F(@nsZE- z`2-G))mCOGx%H5V&RJd^cs&@Ficf8h^$}GLS<^n6P*4#G27JZro&F4(4UR>3e>49BIpj(Q!gL`lOWJfM3b%sd`O>ua5GU^x*H z(R@wKhon+0qiQMU^TS1qNEk{7NaAmYmm4No7kJ110fVpl>QLpsLuVqsRgH$yizPLA z%Su#8$1BS%Az5r z^Rzv$EBcap!W`ic!i^eqib$JUdS3o@xRmzkA}d|@$mM=>H40r+oz3% zG&?T*=DRs4Iz^?d9@-@FdVSr(Ax7as6t_M!lrKwYr{njY!>%=q=$+bS~GS;l~NQPNbP z_DUGnFHFsbDAR)b5tcJSFGgY7-tzXr8Yr3AN{=zxJoOYX9{kJrz&A#e@--|GKXzn`ttW zr$}Kb2e!&mm44@t#qMwO7QEZ_!Dz*vl78{%Mf*WqN^|W!M5vB-I8b@8dwdXp++rWa z+TwD^$_V}Cv2O^6S1RDSO2mtu9(Wr9s)Vza7R955yjRWKXvHcW&p_q8_;9@N9lx0W z5x22OuZg*!t*wGzo>C-lgqh-oGtVqpK^4Som;-Ch(JXre01dA^oWpOQwjdR&%v`4E zr)Oj+wgHg|1s(nXJ1>eyPOkSxvz3B8FK_L`lzpkm3vcVKz${Th^;0lxSMTuT;0}BM z7Z#}Qo?q<@l?fTSy1FV*4rijFf$w$NC;QZVMS$gZI(CVO{Ws=@ta8SqAN58EFH8OY}cKOb3A{gi!2$j~-&zEeT zmQ`pwz0+UQv88Q+)mxnHnw))sVls-6o&F7o#KQub3|j0;0csog0^DVxi6&>4h_?wG z@YOc+#=ko2pzgq-D%H?>W*)9Xl!eLuN2vsBXaWz zKIh!3-IyEh^>=vfMmUAB@*a-6u#qw@Xf4OT)`i~9xZP=Dxm))Jh$QbXur8eJi9RD- z<|7<sagQ@^Nud0Qf4z#^EbCSk#ztn`7P*P z5!syfAfY=J=R7h6u*;kdwl_chE?wumA*s>vv7*rct|ByC%zn0^n;wG? z2}X3(6jU@AyY8#kVH2?ni7{C#MUoTwr;eighjm?7Wt4p zSlmj5ChKM*m1Hhbdijp`v1#Syu*KH}iHVmT-*^(!1!Gul zU(^zT+y%Iy{y{+<5y?J}hYrCZ5}@fVBXh;B=zqisa9%44%-}P?p*`6`N0%(rTOx_mv1o5Ap_?6CGdW5DAG$#y&<_c$*cFc*4KPAtr=-X`uf6psF5E9@m&l=Hxc=^Stl+BPux|onbJ#r6TOjX z92VfJ^Q?;Twx>w-ve{5sES!(F&n9Duz%FvlhP;Bm&BNy7Rh*c}orJ-oL93<1YmH** zu~YLfl&LcPS_~@(rYn3dEjNn{k27Nz$)&24AZ1(MXIIEW`nFCfC3-X@ zPBcq~EZ9h;?CIl{PnUXb0H~w{_C0Amg8aeR_~WHAxw>VqnHnFh2{@hQ0yJq%rf4>^ z$z1U}y3~fe5RgYcpI2j9q^V$snCaS?QmKf~g6y4=!rU+OnabhuH<(22)?cBDj=>;PMNP5l?HTuBQVcHMYbovZCN>DNH zHEnA^Et;ApuQVcu+OGccij85u_!T3qe0QoE`W;`6YCY0>>d(uPk$1HVuRsojsxCuX z+;>OrXrc#kD*(*SuusUFH?Nx|s?+frxGe?^tBcuQWShecrz5(hG=26{wb22w3sYLb z#c~6D)FE$Z#oYZ&zEGs8oWA&jEm*Q{!Xm3`Q>v`UW|(VjauPTKZmFJ!KY!dnF#QX- zS5Z+>?J?#$U#dX_OOyMyc*bi1)r?Xu^}|HjR8`?4rqOn-#5+XCd^_=F@By2Y&1IuX zt*KEOsloBilburLThVK@dYvtKsahG7+UVwlQp3r7<)BbybVs!EvtzkGP`C# z*|I_do#Wzl`uJMr3r;ucNR(o7rz5s=c7w?xoaNo6XC=Ps2g7jl)X@xzKk8pgCdtwk zqo=vwASrBa@Us(eq(!S0;vn8*?cD#WIDPR(VXRn<$vN1M+x`m`gW-GymFmqkzT8Up zHnIhSvfdI2S1E?Z;|S9-EBP&q@SU6E3SOs_-6O_wogzdkzR~F;<@|fY}J!iEcHPHtcelPvYH*#hZ^MPC7MSqVpqJ~; za>=6Cr&Pwkz_8$30?5=COFf}iEzicZ*kBT;KTX$r%A)+pfr8zx^_#`kGTC!;R#~e1 zG9fVG-GN1W5gqUP>p_E)ezyGrnA;4<|In%lHD0C_^Bk$gI$SIW0^~oXf=L5C3GaS4 zzH6KnG+uGkkNBDX<{S0sg>k%C59??l3~Qw=!H*t~I|-RAiT9w^(=;DNzq4XBaPXzn6nk#| z2YKh=!3+|bHz)9}8sNk=Z)^3a0{hMTEWHDv1;1kT3SSpm7uvGK=jkgI_^2*CL>URK z3bgRQeDb6q1B$=<6B1gQHLJ@FPQ*oD`}{H?su27<9udT6>1ebVR6fi;iT`13Ngl6M zrt=&iPeIJBk~s=xU&JC6yWXzONlhUwsv&UHASNTFpY=F27*h=K2miygLTcF;a~-b@-P%t)f!SZtIvmt7MLL;3H9*Lo=<3|=U$ym2+EPYyGQhJ1N8+o8&B4_ZwISLD5 zK%KUYQyHjLYR`%K{!zS-y}3aZvbUE6BowX<-5L(>Wl>#hzY4AyNWZV#4%|DLwGP* z_9t?T=;2)(b6sP1Hbxz2X7RFxuYoXfc(MhCF*G=rkCsk3m9ytow({G)HsY)k6`B-e zn>!#xrq5(-#^H=-?<)?UAueNAj*h0xLiQ^fl(?*rY+KahmgG{fkT`<&T}O!3fvw5z zqS^)qi4g)*p&BPS4nlx4y8ef`yy~9UeS3svYGvA-g9Fy}6R$l8;d~vON2$Ly7~Xz) zz`l0bh$Ob^6j@$aW3Foe)DXgDy^sB#2>$n8SX}MI+k~5XyZP7j8hIW^N>p-0+wM7SpjC_*hL(%B~jxYh{ zj!`Yd*eFRWeg@xZXWqsV27;gO6n{Dr)%mf)r^k_j11)th#$wMJ#Euj&zcPh{waL66 zbcebyT>0mg=qC6Qc2TC|<2Iz>mALbt14@77~dPz8H%0ed!mXF9CCPi#aMoaQ;#PFp8t4*-l(am1b;r z9t&^aGi?kTAQ}|q)II53)K+@;Q-CZ+bv3g@l%;C5)q{ZZ`7-0&H2_0jM!Gdk z%ORa-FG!O^`JO~BAH;X?z5;m?7)`TL%ql;n4NrhWt%5g8Y?qmlm1qlW%zmqy zQI9-`M!5|)wM!Sdz!G~Qeykv`iP`PcbRo1L>O0)WGB)u-g!yVA0uEFt>2D@I0e0JY z|5+8A{_drhz?cS_!uZX4I5D=3dK2C~#=CB?OFDh{0k^YUC3BVhP293$2_qG&{ptrXJ8z12&m$iSR@gf7|19~&Y6T&75Z}es=7vTrER&ccv2y08&_UX<= z^Q=6*8C7CQPi1>-ks%sf57<5U1B%pQKx-F2Qz%1|!~XG-1qPO1C`T9;d9xeir%k&i zXy~W1e%%c|Bjb7r=FxdsXGlTbq#&=<&&6_RGIa#wKmLBAFt239WC5LC>LY*t@FLiQ zsyz-S4HTcQ<8wy|yIvka9Eik=weAkuxR0LaxcR??5pW?PmGYxNUnOyZg`ADQp?njJ zB)4KB<)Z;W);QD)=Vc~L`+H}5=$(8azD2khvgtXKL7k`5J;`a9cGP#NNW*&i_eYn( zQ$H}fS9W+8X8T~m8@AQ{8W2Mj~lq9 z_O7%e3CQKZi$}nMf+J(To3~g_O)E<Q%@oS3h-(PM*K zgkG~;)`?be98y=rGS^YrEm_NSLOW^d{6zhFf{~)1I#8}fLiQ}&(4;|YMCND6{3l2e zj7OtI?f(9Lki)i70SxtZBBm)YIu3{PgOh_psdJKws_@tj>V==$M^>*m&r0^DdYIsLTQMs`K=u(d0dc1s}audp@-eiE(-k#bw3edXQxFcxF1=qn=7ee4_CYXDc z=$`nf&|g_3dYuT9a!&Dtg0Ew#DpTi7T`RpiRDC zH=`Gmu+$C*meudInrCCV8Xu+hv?U!Mb)8D99%yLMT|+hlJ`sqM1s6CIO6z6pv^d9# zz6b$?3PO=xSKo;vK9f#;LCE>JyGdi{Wbe#QA?-Bz&H(}$@X>C6?CZZu_Fyr{P3TMO zZMYz|?VbimU4#gskpDKrIwHJJ&u{yl3{iD^o^!Ysrj{jg=#%kLml8tTzEKPb%&jA* zzWF(kRO2}d*+0l>uV}QZF#Z%i#Z8u)rs*|D@pM;Cg{9 z%0K@kSoh%&6O)$h9rR@s=Q}U+w?}J&Ns?RWFp1)gQcO>uRm}3`f6s&C+W~(iKmc=^ zjg<}@u3oZBnK=+=H8YcRO}$I#_6u z6l@D8-Q{P;2t`Rx-$lN?fRgs9(P_qRWe&UM|+l59_HL3BIejNKYdDgUP}E zrZ9`TZPB(TT%a|$yDN>1)zk*^Kx7g9+$Jt;z2;!$s=J_s653N5QpOkl7ZmpiX5?^8 z@PnV_g)l9G$gu)EqPlC4acZs}$USdti2dd|RaFq_k*xY8LKT=cy98E)$A+NiZ8+8v zepD%>7CZAFC6F)u_ou;2YA;BKn8D9iU1o;LPJ5in#*+c>g?D-RRkK_>N+t*n9kW@Vr3>JlL+reVm$mk2K@ftFH)ppqJq1hkHQ@6_rCi))13n^9ORVpTrBbwRf1mo zm_05LJ3O8)M~DmAPb(6#lE9{-iN=Kbv3)A9nc+ijp#-2ixWd9DHr|#^U zHEH)z8Pr>EH7L>sq^iqEg_&KZ-V%s=t8-#4rI&yYCvV0PCfj27{5Q{g`bn`#`MdLn zI#*xDDnEb;ywl)|_dTt<6FRKg?&Iqlsr2jy>X5>5jLDEY!tMEtY84-WLRCIBc%sI^ z;5Ej}p?cW;1a(#Oso9YXLWb&8_%@H5!_-NJO~vv!nwW$mkmXU3+7Io)F4S-~dr#rn zBBDpI5li`e*WXz0zdqRi>p3FehJ(k0gQ7KbM1`Du@^)T_wSK-S_EiLz3z*LqA!>du zudHHAB+_NsY0M-Kk2Nkg}135QDG6WQ5F zm@!b{&pR!1mj3U1)l)0xS4S2`Ra?b%bP(0s4n@Rkfj<*#H8qW)4GjtVXXej}qRrs- zUJ(|;JhJX#jKaqVXj=-bF&+J(E$E}>5{WhY1xtH+uLF(-xabZQ&Odc}zXzYpX`N8I zk98BUTXm+?Fnp6VQuEJP{wFO5e*J$N2uDR4Q6CTx(VQ*@DiV-E!^SP)u`w_SWp#9Y;s3}~@^LQP4V>w6V>y18KKMU-@gL_nSjhI@p|bT%WldE367KPZ z{o9c+Fqa5%IU5*OYtCEl3Qqppid+cxx7TRdUx*`!?ZIiHRzxL=A2!+4LlhYOk2wi< zL%@i}azcor8@$5w1`%&<8~AB+pTZvkY)a)H2-jd-Xv9?HX_BJXdpCC)$-uS<1=i+r z@WDm}u`+$y?I`bmzT~hRc(h451?9nOr~siZ#eWspA5H;G={tzJKRNIJB>xU?P)6Ol zOuZ>BGqJ?!OY5pvqn{nza68KSUjs$`8z@SFBPQl2mcj>8z~zby5h_$K7BYr1Mzb32 zFIMD8!!Z)-OpOFiQ|$m>1NF-%;ANsr6Dod=ubT9CVbgVR+~R+YNeq=MX@=@%p$ZM< zFmt7UbKvx1x2@#<%d%&55o+%^NoYXawz`^ALPaGWj=_rj8m3@NlkJYwFmGEaI~f|z z_auZYb8?lP3hPOksSzC&JK2fp_5|Z{Sz!035Ci5%5LsJw~&;O zk{Vb30pBZJpd1ebxZY#o$&!J8=47srxhejmk{0T}w1EF_%D)F-b|?5E17w^+$-&Kr^?%Lo zKgZBG6?}nG#A%>vQ@bbX9=2p4`vYHHeEZVjM(aZ9={Oz2>dJh8ZbSNKXIlF~HhvjG z-zp?=T-|!JFEsOn9N>dSaDM#nF~Lb1n%U4T8bGaocgq`>{nl?mvOpK#$wE`A;=kk2 zCdZgT6?v-Iw?b)D+)a0Wf~NuCCJ3dFC{&B!J9&MS_>sAahEwuCMLW4|-5Q{6if;*)veQUcK=%~)MMy3*BaJ^HpJk%smTLLVQOo4FXnE|%^5 z|8F|8F4T7|Bq{i%{-Kzx7SGvvyeUG0XRrekhsjPNsvEQD9 zx@fm-XdcTn>?J#8-d9*r`tBer(7#bHBpm!xKsDi~D%tqDk%8q4F0~zD-V_qqthzzQ z;7NUl_5V}WRX|m_bZtQp1QiaTAl*oVbO;DYNJ%JNlG5ENAe|B-jkI(l=|Q@cZVqsc zba(xO-h036{aNo~0c)L?nLT?yJ7(tD9dF-{SIy(W7I9jdX2j@uD#e}>SrXk}`Ez~% zp+AbGDrU)zM{}#Ynvd&!NYbSK%-(AyYjMZ8KQ)s5lLUc;9)l8PYbKj(kD22rI1k0| zY?0I*msp}x@5P}}V|I^`v8NZ)J=otdt5EeYFQh`?9Q!_wUshct&N60(ap2?9@`3Xb za}@{9(Nx~k7#&mZ5Y|Tg5n}Y?K}pD{^=P;4P+Jup4fAhE`A6#(siR!`zVUV( zbn8q^PC}v3?T||K%6s`KDI1JuQHhwO9e}N@{IyYbQDi9%{g6hrZQ`!5WJ)!3Xz@#| zf?(zIa2W0PBf@`s zN&OjrO7fCjI6Co^4J08_@e)DMe^ppPXgXejBUtdD%aO5C)0nJd(_4O#JrRcg2=3#I za0tu}uahu*R`{o(VmtkDE|u9$VZV)92h&My1WEb9fow-ndyK##;(2geA?j-2>Mv z6qH9Pwf^+b=)Q#%U~r>0{q{wre0u?6Uc5~^F<$FAaN4{{sIupNT%8Ra3oX)|gLcq( zo(tETL1Q(`N`e>6_z^1asQ(<-E-e7EJ-Gdt#qj!7Z}(mtF47ln)2|cn&cR0LFWdWA zWzO`rgcz$u>$zo|6z*+esr6RW#(6cVDfG?u$4)DOe=bEQ<28;mDrhX)3f&2YHqi*x zZs8Ybz$#}V4Ev|E6pTvA9IRMDpwb#o*=qLWj++OmNMU&^1 z@gw>{6BQjp(zwJr`VbfX4C%Ro($apSW*rC?=|Tm+AezjvZXODl3VufdZ#;L$>chV7ls}Te%! zapK_K4^9&*Au zIrJr7;0+PAlJN&5Ugw=CX9>r!!!|w7#eiwz>x45To<6;#hf%G$z-vQ^2lYOF8CyhhJMXGP%Q9NG10R12 zMh)bSyza{e4~k(^ZT^9etoCeWT<@{+K*@%Nn0FjhlxZgA>rxoPb9=^JZ01FY zy{m&;u23)Ya`THx^zN7cV9hVPCO^W)W+p!p?2!%k2WRiRn_R}RK$WG8RnHIO?##UX z8g+r2Ys>d;L1oLO;iQ`^xAccp1+YbPrbqEqih9oOjud#vlSJ-o{?`(F0q*eIpWB_! zfLLXr9&yX+czPtVt!?IZT+)|M;sK%s{U&uams&cL3tEY12`8^xx4z(!6=$cg|C}1N zv8x)8AuufbbEqQdf|4K*MffbmiCyja^2!)@A6fb5Q6MC3~qt*^q4f~O0eZP`ONAe^X5jO{UnEPJ|)8m368?n??A3`aF zlZAf+#!l+7VSlt|ux~j%wT|rA!M7tvYLi38Gvqt$ zY?xDyc7>bQztX<=QZgr5bj>2@sQ#J9ti@c4d8y~9ynZS9zq59Y2BAyccK%%BgThzo zd{JsjiYIAPvF|ESx}S??&XtqxzYgi{qc3)G^a9j`k2EA`3HN;rCI3CH>xzWQ^~Tkm zh-Aj-{adA=KIOif+M(_z0hcYgqIQ;B9_FJes`%(U8-P~z}^_bXu zp_kyUpV^k+tljI2LWf+1Xhe8=Dre zJ+^akG-t3jT0}ovVY?`C4!SgqSDE9tF%LOqUYy(;&QrVzXz2Z`stmbYQ^Sctl|ckE z9vN&Y86o3xH&Z-!(78m7D*LPM@f95$GDCwvASJQR80Hy3$tv^QElUT7O0P6$7ss=gjMD?t zB~eJm0O9v$F#lImx;J#Z^FU3u1Np+<9nySC4}xPC^~<ZLAPcFpa9+^;KZ)0m~D?7L#L&I|tkdcuw z-s~;R@3`vEtXVw|s6Nr}-D{7bkr}KoQK%yHT zcf6ad5psI4w)nZENeLsTqJjeh@6mNPfuGW)F>7%6 zI~r_aHc~K4Um9F>q#a!}(?}aRWMoNT z%>0yyQIZIkwUfdBLC>ch#U`B{sv087BAsws`Ztoo=we({gduRCQsH}h3Y5Fy~nn8E#^pThA<)6NRZBOk?371#4XVd zaS@cip7cE2^q=^dd@kv93aRUWq0yKUkCl~gFh#)GX2eCuc(lluP*D) zD#q3?$>ih`?*IP(zRj`M5Y{K--c6rd+Zu?a*|a;`=w6hk1`~mPe;Isc=hpY+RE>}V z<{ySI3|p!EA>XqysCYJ7sBQqQ16T4RY;1SS69xEwJieZfRGf$g<{PMeXXtGSf`RM= z9m2rFQt!d^r&fT|rdYGaO8qd<9%C(@NUYXZ+qUh#li0aHZvc#9IvLZ<-$X8nyU(^F z*GCE%%DRNwpqFFQ^(?@H_Y!%DMYTj{CY(fI)GlP9#wz2F`BZS&Y2r?&2x$w z0&0G@?oI=Y^d4^A>`USaq;;Kz?a&4$5hKJGpQP@7&z7Ovlt2B*u;B0ao~q)*mtl*45(?Bm(OT&eM;&LJgyhm$Y!- z_StFjO0u=vY}O$($|{605cd*3Ver+>26=~}oeK(*W1Vm9y3>cf)P!LBHnaLxKKQ=0 zHji|-jYiGHW(U?5!7Q2f#57+V66Ll_cqu*_{_2t=pJFDOdaKZ&Gl9?3rge3!B#nr}Sk^=A zHB&>bbvvnGpDkiSr%=0o^xIz8Lk<{}s1UVl8bFnP8z+>W@l~PC#n}p9|uIj9g$$hDr~tk%tdZcj)Dms{L{*W8b*@VlX)_1GNP z{~-~Y!eh_Jx7wf6Z0QAWv^I(RddxVEO(?12v3yo5%Pe}@w?*MacbAxVu<;lcy1;4q z?Ao&VkXTp0Po5rb5P9yj;YZ_FN9&ri?JCGo>GHP11?}OzotQEL@I6CHRu!r%JZ?fE z50@p>^s1eVg=p_p!V}_*PR!L#)q=`HKQyd}^Y;TkLH~q^^91{)*4$6-n{{-%FUg7q z%u5=%F;%bdMo;x~@e8A`#3{EZYPg$X3@gpYihlxzt4M&PCI-n*+`%Eqmy7~JdM!Sk zp-Mza`1_;HBvQK_p}U=|TiC8!)=Q0>(O5sqo6eP|Oc$U5(apBwi8_N42Ww-I1W8!- zZvm4g@(O91&JhFQ_F^@Whm#f|Z9z?_83X_4Lvf~$Jd4RjIy(`c_(yLEm zG0{HKb#5)8JLp_aa93ey&#S!uADHVD^_ipg%4evrvGo}$zeN>=9w8hR%(P2Be6QBidOnhnzy7(B#eNP-dm?1{heCw0;-djwT(&~XH zN6F!#Wo}!JOQB|JSLjM)nN~cUTO;AvE#8L7ej@GI--CGwukgkXIZUkL^{p=7*zcdN zl}weXTy5+5Cdrplh`k%{0TyPEQF*y?b`K*gBO-%}CLC7CHU>OhnDU9r_ zv9oe}$tG-@0vf_D8p0-8uI^q6AoDO)nCV2s#TmfCqNk3O04v+#_HJ*lY`u_Xdz;c7 zyneIk+OlP`09&MY0yhbmx#Tx$C9X>Y!Y<$ju#{OP@3lHue99ODf#@)03n}U zR!TpAY;VA8D*vEtjT_XgV>ufjR?^;@ZDclKC_xl7{)O7Vu^W6}3KW^de6wqaT`_yp zBB0%8Ni0V@lJtozCp=aXSA^1vUTWbE3ZbVx@u^4CLF&|}`;?akqXx@bAhXm!i(Zb>z-dwVi?uK?{c!3reIQ9KI zj#l=I1g=koVyEF!XhO0xu2}XFo-|Wkez$f9#eA^}^!n3;=Zp*udB1UD&KU-yG2?;6g zD}B2J5)XUN`VIwjzcsu@x-CU!-4;uL6-RZ)#V0rc6>l> z^uU0lkjX?@+xCkz&%=pg5E0RaK&sHCpw)hgs4*e4{sw>{edm?YN9Nf#3`#Ixi5s|& z`%XYe$8G&sG%@?bHm3>xcXU~3%1%%My>ff|V(8mChL;87M){P|BhqO#7NnL9qhY>H z>W|-cPgS;kP9cydX-}>-^74-!D^&j>I;c+gcFiD+2uW^ENO-DfJC0$8NjdsG+j_$X z)+pn>thaRbnMype+fs{Mxj4L74?c348)IRhyB@i&aeKuNKFV9Ti>Qz~SP*?$lDl_} z!2f>c$!3XUP~Rl}R{+-V#bhP@yYMM$@>s8g5Fn7_K1Et4MQ$rzt{I;wwkYm zgmYJkudVx0B?@&G=7wahZ|Fat5?Mu2^Yu4kHR(@&6QHUr%yASCVp;oV=}wlL*bXWv z;_01`s3;aYvN~EOWJ>a1&kMZUr7%h0#_W>$dz9fdmrS1>x3|`7kX(Caoe zT$qEzQ&9Dl?Cmpkmq6(-V(#@$8yaJkZ5rn&^Q52)S%mvnzZ zs~g>qoPf4g?)bA`0r#aoY3OZ#d4kZ?Jv-WR)=FA_4uWV4*>S)C$TL=DKDM5_@(Wz3 zX}~Jsh2Q&Y9$+>i3v@om7ptF3reCURFB=b}ZZw_1i7+?3PFHf}q^KAm13_yKm^Er~ z<#{Pm_kECVPDct~{=B|5Y`zC##(Lm4J2LG72yA8qlG=Hm?%M)B5PJ~#+XZQYE-HB;-*`0wCaX(qp5LGr;g{ zAt)I^3~Gk<5!yUE8WXy$KDMv5K%Xq*UIO>I3^6o;b{8x%p>>d{ni!A?I2Do%tfc|5 z)`7T?znuXWMAW(t_mBI54#1OX)NXrhT%Sn>{t2PTMj?VI``K;Mb4^}Pd;rT8x^VW;vravdwyE*1^I zumZ`I`em8*(dLX((SY#PbVH3x7Vudc+uy6-{D6O8N(+#Z2tpH6p<2Zv=8ZBE401u? zhv6^C)bgD@U{ceAeGw1Fu>uQ~k(8wg{Q*S%kPLC^(gs-~*mK(-lH70vZJdg>f^q34 ztLlU{ppJP;{Y~2?AZ^*4|LXUkfYh#NZ8(1s{bd5Mi7YzbD=+tK#5pJ9zg#hBR)wA` zaeS~bH6{oR4(tl1O(seb^8B)lmFDnWx)>zy#WD#j4~)a{c}w1*@eVNn?{z%td9s`U zk84`VNh)7Q$c+@dWZpktdauBp;dym&Brr))yrWX0QPqudrASA+p6)GL?6+g%!)7PW zHwtP@dqK*);g`UR=>$f>CztFLQUxctEXD^nrt5yN-y=mP??v<`8n})Ln$ADHF`EAL z=2(et^Z1#yzyZj3$&1jXq;f|(^1J?L8!cqG>3M4TO4&@Y_0QuN)a6ACsXlfE=Ae%O zP}RCPJy_%p#bNbQyYz60g(~?J{)Ykr>B2y#-$;vO%)B`%GXu!`H^4_9bL+4_q7& zIxAcxxaj-9-a1mK&LPw30Mbw9b^iJef#d-}DDk!stM(U8o#N2920`{=Yn0z_@61+P zCfz5cI;H2+u$%}gD{Qw&3pZeWOM1RIc)!q?K zgiyOQJ3roe)xbza)!NW9Q}0}3WA=@8VKhvD&YBa}2&yGkfaxrLKo(L8@}asOmipdz zPfd?7SsV09biGcDrf}j(7_6vZU7>ISgLFz~V1t%k{_i+={M|MttC+>lKSc_a+hUWl zUZamSGRB7d)_`gS_~q|dp6W%7m3G31gkB|8Q1!I0nYIhnEPEZ``lbt$l-DM`s>8fb zN!>*!Uyp>rsUqyb{n9QniJv;I%W< zs0M)RAhaG*Hg<`S0hes`JwhrT zL6^=IEX)jqpg6Dv&kAByKnk%=fh3w{^sSRjva;fkOU9O6LJ;on3aTGxhugj$Yc;cO zJ*OjNAYe$8+)vImrukd@eyO4K?fuP}DZ$kxL8@5D6_rF->A5NCy{OP| z$YjKzq(w#3!A&edJ<>O%$fcy*CyVILyM;zTfmdWiMEO01HT(WmZ~99?<`u}(iC2V? z0R7|tWcim+0m@&g7&@PN)qec{F-uDsjnBJFy0uklSu)MiRd5jH-=PlpnfwAhJ!NR{ zDica!bfG>g^2^)*&zgRlRTKwO2qd22Wq1C#TE9o7>i>HSsFhJ~Uj?oD`__{2KyH99 N>1Xod#iDv|{|~$JJ{kZ3 literal 0 HcmV?d00001 diff --git a/sm_cnn/tutorial.ipynb b/sm_cnn/tutorial.ipynb new file mode 100644 index 0000000..488cfc4 --- /dev/null +++ b/sm_cnn/tutorial.ipynb @@ -0,0 +1,714 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# SM CNN Model PyTorch Walkthrough" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This purpose of this notebook is to explain how to use PyTorch to implement the SM CNN Model for new PyTorch users. Here are the recommended prerequisites before reading this walkthrough:\n", + "\n", + "* Have knowledge of Convolutional Neural Networks. If not these are helpful slides: https://cs.uwaterloo.ca/~mli/Deep-Learning-2017-Lecture5CNN.ppt.\n", + "* Read the SM Model paper: http://dl.acm.org/citation.cfm?id=2767738\n", + "\n", + "The following is a slightly modified version of the SM CNN architecture that will be implemented in this tutorial. It does not have the bilinear similarity modeling component present in the original model by Severyn and MoschiŠtti. The following paper found removing this component actually improved answer selection effectiveness:\n", + "\n", + "Jinfeng Rao, Hua He, and Jimmy Lin. Experiments with Convolutional Neural Network Models for Answer Selection. *Proceedings of the 40th Annual International ACM SIGIR Conference on Research and Development in Information Retrieval (SIGIR 2017)*, August 2017, Tokyo, Japan." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "![caption](files/nn-architecture.png)" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": { + "collapsed": false + }, + "outputs": [], + "source": [ + "import torch\n", + "import torch.nn as nn\n", + "import torch.nn.functional as F" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In the block below we define the model, with detailed explanations in comments. This model is slightly different from the model in model.py to keep the tutorial straightforward (e.g. ignore GPU code)." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "class QAModel(nn.Module):\n", + " \"\"\"\n", + " All PyTorch models should subclass nn.Module, the base class for neural network modules.\n", + " \"\"\"\n", + "\n", + " def __init__(self, input_n_dim, filter_width, conv_filters=100,\n", + " no_ext_feats=False, ext_feats_size=4, n_classes=2):\n", + " \"\"\"\n", + " :param input_n_dim: the dimension of each word vector\n", + " :param filter_width: the width of each convolution filter\n", + " :param conv_filters: the number of convolution filters\n", + " :param no_ext_feats: no additional external features\n", + " :param ext_feats_size: number of external features to use\n", + " :param n_classes: number of label classes\n", + " \"\"\"\n", + " super(QAModel, self).__init__()\n", + "\n", + " self.no_ext_feats = no_ext_feats\n", + "\n", + " # self.conv_channels specify the dimension of the output of the convolution,\n", + " # i.e. the number of convolution feature maps\n", + " self.conv_channels = conv_filters\n", + " # the elements in the hidden layer consist of equal number of inputs from the query and document (hence the 2*)\n", + " # and optionally the additional features (ext_feats_size)\n", + " n_hidden = 2*self.conv_channels + (0 if no_ext_feats else ext_feats_size)\n", + "\n", + " # define the convolution for the question/query - 1D convolution followed by tanh nonlinear activation\n", + " # modules (nn.Conv1d and nn.Tanh) will be added in the order presented to the nn.Sequential container\n", + " self.conv_q = nn.Sequential(\n", + " # the first parameter specifies the input dimension, the second parameter specifies the output dimension\n", + " nn.Conv1d(input_n_dim, self.conv_channels, filter_width, padding=filter_width-1),\n", + " # tanh activation is used to allow the network to learn non-linear decision boundaries\n", + " nn.Tanh()\n", + " )\n", + "\n", + " # define the convolution for the answer/document\n", + " self.conv_a = nn.Sequential(\n", + " nn.Conv1d(input_n_dim, self.conv_channels, filter_width, padding=filter_width-1),\n", + " nn.Tanh()\n", + " )\n", + "\n", + " # combining the features from the question, answer, and external features if any into a single vector\n", + " # note PyTorch nn classes follow a similar signature - the first parameter specifies the input dimension,\n", + " # the second parameter specifies the output dimension\n", + " # nn.Linear applies a linear transformation: Ax + b, where A and b are learned parameters.\n", + " self.combined_feature_vector = nn.Linear(2*self.conv_channels + \\\n", + " (0 if no_ext_feats else ext_feats_size), n_hidden)\n", + "\n", + " # defining other layers used in the network, note they are not yet linked with each other yet\n", + " # tanh is a non-linear activation function\n", + " self.combined_features_activation = nn.Tanh()\n", + " # dropout is used to prevent overfitting and only used during training\n", + " # elements are randomly zeroed with probability 0.5 and all elements are scaled by a factor of 1/0.5 = 2\n", + " self.dropout = nn.Dropout(0.5)\n", + " # hidden layer is used to capture additional interactions between the components of the intermediate representation\n", + " self.hidden = nn.Linear(n_hidden, n_classes)\n", + " # softmax computes probability distributions\n", + " self.logsoftmax = nn.LogSoftmax()\n", + "\n", + "\n", + " def forward(self, question, answer, ext_feats):\n", + " \"\"\"\n", + " Defines the forward pass of the network. When the model is called, e.g. model(*args) the args\n", + " are actually passed to the forward method.\n", + " The question and answer tensors are 3-dimensional. The first dimension specifies the sentence - it\n", + " can be larger than 1 since multiple sentences can be batched together in one forward pass.\n", + " The second and third dimensions specify the dimension of the word vector and the number of tokens respectively.\n", + " \n", + " :param question: the sentence matrices of questions (queries). Note the plural form - this is explained above.\n", + " :param answer: the sentence matrices of answers (documents). Note the plural form - this is explained above.\n", + " :param ext_feats: the external features for the question-answer pairs.\n", + " :returns: the log-likelihood of the question-answer pairs belonging in each class.\n", + " \"\"\"\n", + " # feed the question sentence matrices through the conv_q layers.\n", + " # IMPORTANT: the second dimension of the question MUST match the the first argument\n", + " # the Conv1d instance created (input_n_dim). The first dimension of the question specifies\n", + " # the batch size (number of questions).\n", + " q = self.conv_q.forward(question)\n", + " # max pool using q.size()[2] as the window size, which is the length of each convolution feature map\n", + " q = F.max_pool1d(q, q.size()[2])\n", + " # reshape max pooled elements into a vector of length equal to the number of feature maps\n", + " # the max pooling takes one value (the max) out of each convolution feature map\n", + " q = q.view(-1, self.conv_channels)\n", + "\n", + " # feed the answer sentence matrices through the conv_a layers, similar to the previous part for the question.\n", + " a = self.conv_a.forward(answer)\n", + " a = F.max_pool1d(a, a.size()[2])\n", + " a = a.view(-1, self.conv_channels)\n", + "\n", + " # concatenate the outputs of the conv_q, conv_a layers together\n", + " # with optionally the ext_feats along the first dimension\n", + " x = None\n", + " if self.no_ext_feats:\n", + " x = torch.cat([q, a], 1)\n", + " else:\n", + " x = torch.cat([q, a, ext_feats], 1)\n", + "\n", + " # feed the concatenated feature vector through the rest of the network (starting with join layer in figure)\n", + " x = self.combined_feature_vector.forward(x)\n", + " x = self.combined_features_activation.forward(x)\n", + " x = self.dropout(x)\n", + " x = self.hidden(x)\n", + " x = self.logsoftmax(x)\n", + "\n", + " return x\n", + " \n", + " @staticmethod\n", + " def load(model_fname):\n", + " return torch.load(model_fname)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We now load a pre-trained model with one input and see what the model actually does. For this, you'll need to clone the `data` and `models` projects in https://github.com/castorini." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The cell below contains some bootstrapping code to prepare the data, load the model, etc.. It is not important to understand it just to see how the SM CNN model itself works." + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "WARNING - WARNING: expecting a .gz file. Is the ../../data/word2vec/aquaint+wiki.txt.gz.ndim=50.bin in the correct format?\n", + "/Users/michael/anaconda/lib/python3.6/site-packages/torch/serialization.py:284: SourceChangeWarning: source code of class 'model.QAModel' has changed. you can retrieve the original source code by accessing the object's source attribute or set `torch.nn.Module.dump_patches = True` and use the patch tool to revert the changes.\n", + " warnings.warn(msg, SourceChangeWarning)\n" + ] + } + ], + "source": [ + "import os\n", + "import sys\n", + "\n", + "import numpy as np\n", + "\n", + "from train import Trainer\n", + "import utils\n", + "\n", + "torch.manual_seed(1234)\n", + "np.random.seed(1234)\n", + "\n", + "# cache word embeddings\n", + "word_vectors_file = '../../data/word2vec/aquaint+wiki.txt.gz.ndim=50.bin'\n", + "cache_file = os.path.splitext(word_vectors_file)[0] + '.cache'\n", + "utils.cache_word_embeddings(word_vectors_file, cache_file)\n", + "\n", + "vocab_size, vec_dim = utils.load_embedding_dimensions(cache_file)\n", + "\n", + "# loading a pre-trained model\n", + "trained_model = QAModel.load('../../models/sm_model/sm_model.TrecQA.TRAIN-ALL.2017-04-02.castor')\n", + "evaluator = Trainer(trained_model, 0.001, 0.0, False, vec_dim)\n", + "\n", + "evaluator.load_input_data('../../data/TrecQA', cache_file, None, None, 'raw-dev')\n", + "\n", + "questions, sentences, labels, maxlen_q, maxlen_s, ext_feats = evaluator.data_splits['raw-dev']\n", + "word_vectors = evaluator.embeddings\n", + "pair_idx = 100 # particular question/answer pair we are interested in\n", + "batch_inputs, batch_labels = evaluator.get_tensorized_inputs(\n", + " questions[pair_idx:pair_idx + 1],\n", + " sentences[pair_idx:pair_idx + 1],\n", + " labels[pair_idx:pair_idx + 1],\n", + " ext_feats[pair_idx:pair_idx + 1],\n", + " word_vectors, vec_dim\n", + ")\n", + "\n", + "xq, xa, x_ext_feats = batch_inputs[0]" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "collapsed": true + }, + "source": [ + "The question we want to compute similarity for and its sentence matrix dimension is shown below. The first dimension is the batch size, which is one in this case. Hence, the first index can be thought of as an index into the particular single sentence matrix. For each sentence matrix, each column represents the word vector for the corresponding word/token in the sentence (5 in total)." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "where was durst born ?\n", + "torch.Size([1, 50, 5])\n" + ] + } + ], + "source": [ + "print(questions[pair_idx])\n", + "print(xq.size())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The answer we want to compute similarity for and its sentence matrix is:" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "born in jacksonville , fla . , durst grew up in gastonia , n.c . , where his love of hip-hop music and break dancing made him an outcast .\n", + "torch.Size([1, 50, 30])\n" + ] + } + ], + "source": [ + "print(sentences[pair_idx])\n", + "print(xa.size())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We'll not use any external features for this example, so `x_ext_feats` is a vector of zeros." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Variable containing:\n", + " 0 0 0 0\n", + "[torch.FloatTensor of size 1x4]" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x_ext_feats" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Now let us step through the `forward` method of the model. Normally we'll just call `trained_model(xq, xa, x_ext_feats)` but to illustrate the steps we'll copy the lines here again and see what happens underneath the hood." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "First, we want to compute convolutional feature maps for the question. We just call `forward` to make a forward pass. We get 100 convolutional feature maps of length 9 each. We have 5 tokens with a padding of 4 on each side, for a total width of 5+2*4 = 13. Our convolution filter width is 5. Hence, we have 13 - 5 + 1 = 9 total positions for the \"sliding window\"." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "torch.Size([1, 100, 9])" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "q = trained_model.conv_q.forward(xq)\n", + "q.size()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Then, we want to max-pool the convolutional feature maps. We take max element out of every convolutional feature map of length 9, getting back 100 elements." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "q.size()[2]: 9\n" + ] + }, + { + "data": { + "text/plain": [ + "torch.Size([1, 100, 1])" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "print('q.size()[2]:', q.size()[2])\n", + "# max pool using q.size()[2] as the window size, which is the length of each convolution feature map\n", + "q = F.max_pool1d(q, q.size()[2])\n", + "q.size()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we reshape `q` into a 1 x 100 vector. Using -1 automatically determines the dimension for that index." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "torch.Size([1, 100])" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "q = q.view(-1, trained_model.conv_channels)\n", + "q.size()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Similarly, we want to compute the max-pooled convolutional feature maps for the answer. This is a vector of length 100." + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "torch.Size([1, 100])" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "a = trained_model.conv_a.forward(xa)\n", + "a = F.max_pool1d(a, a.size()[2])\n", + "a = a.view(-1, trained_model.conv_channels)\n", + "a.size()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we join the max-pooled results together with the external features. Note the pre-trained model was trained with external features so we must run the code path with external features, but we can use 0 as the inputs since this is only for demonstration purposes." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "torch.Size([1, 204])" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x = torch.cat([q, a, x_ext_feats], 1)\n", + "x.size()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we forward pass the features through the join layer, getting 201 inputs into the hidden layer." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "torch.Size([1, 201])" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x = trained_model.combined_feature_vector.forward(x)\n", + "x.size()" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "torch.Size([1, 201])" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x = trained_model.combined_features_activation.forward(x)\n", + "x.size()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Note the activation doesn't change the dimensions. After activation we pass it through the Dropout layer, although this doesn't do anything since are not training the model." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "First 10 elements before Dropout [-0.12813647 0.01474741 -0.12794048 -0.13291343 -0.24393715 -0.00718142\n", + " -0.08802623 -0.08587593 0.23123664 0.02877411]\n", + "First 10 elements after Dropout [-0.12813647 0.01474741 -0.12794048 -0.13291343 -0.24393715 -0.00718142\n", + " -0.08802623 -0.08587593 0.23123664 0.02877411]\n" + ] + }, + { + "data": { + "text/plain": [ + "torch.Size([1, 201])" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "print('First 10 elements before Dropout', x[0, :10].data.numpy())\n", + "x = trained_model.dropout(x)\n", + "print('First 10 elements after Dropout', x[0, :10].data.numpy())\n", + "x.size()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we pass the elements through the hidden layer, outputing just 2 elements." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "torch.Size([1, 2])" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x = trained_model.hidden(x)\n", + "x.size()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Finally, we find the log-probabilities." + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Variable containing:\n", + "-0.0051 -5.2729\n", + "[torch.FloatTensor of size 1x2]" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "x = trained_model.logsoftmax(x)\n", + "x" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Get the actual probabilities by using `exp`." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "metadata": { + "collapsed": false + }, + "outputs": [ + { + "data": { + "text/plain": [ + "Variable containing:\n", + " 0.9949 0.0051\n", + "[torch.FloatTensor of size 1x2]" + ] + }, + "execution_count": 17, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "torch.exp(x)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Hence, the probability of label 0 is 0.9949 while the probability of label 1 is 0.0051." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.0" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +}