From f5d556318f1ff47ea5ba6fd436b161a57a190b89 Mon Sep 17 00:00:00 2001 From: Matthieu Boileau <matthieu.boileau@math.unistra.fr> Date: Tue, 21 Nov 2017 03:30:06 +0100 Subject: [PATCH] Mixed updates --- .gitlab-ci.yml | 2 + README.md | 4 +- pipeline.png | Bin 0 -> 46923 bytes tp-gitlab-ci.ipynb | 189 ++++++++++++++++++++++++++++++++++++++++++++- 4 files changed, 191 insertions(+), 4 deletions(-) create mode 100644 pipeline.png diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index dc33713..11c68d4 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -3,6 +3,8 @@ pages: - pages, docker image: boileaum/debian-jupyter script: + - pip3 --no-cache-dir install bash_kernel + - python -m bash_kernel.install - mkdir public - ./make_slides.sh artifacts: diff --git a/README.md b/README.md index c9adb36..70657cd 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@ # TP GitLab CI -## Execution du notebook jupyter +Le contenu de cette session pratique est publié sur cette [page](https://boileau.pages.math.unistra.fr/tp-gitlab-ci/). + +### Execution du notebook jupyter - [Installer Anaconda](https://www.anaconda.com/download) pour disposer de `jupyter-notebook` - Ajouter le support du noyau bash : diff --git a/pipeline.png b/pipeline.png new file mode 100644 index 0000000000000000000000000000000000000000..f1588d7a54c3efea874c59762d85ba94a5be8705 GIT binary patch literal 46923 zcmeFXbyQXD)&~lRQWA=Qbc;wS-5}jaH%Qk8WYY}_(p}QsCEXy3boXWho9>QH!(I5E z_ndRTIDg(T?ie3~SggICm~;N-Z^pBNKPX6Iq7$JbARu5$ONl8XAUv)@KtR+-eFEJ1 zz_?|OfbbOGQdIPVw5TY>2e6%)CCC&3K`J<214UD%7e8G`85NBQ2a!ID>wSphRx33r z$e%{|^|R-nLrAq$KQR?*3adIk7VD@*sKOW9W&GSK^g&5WivWXDbs^Wcyu$0i6E=70 zu%60xpX9M`@&rNLT3tZ_zZhAVQ%Dg9Z*fpgO3o<e3gOu%0-i9U3BJy^6+A*h^vtj` zpF|ffM5_G?tq|keoeLj4Q!I_1CkVm*+yT@k=Axd+2)b!$)IE=UN6^lmIGlhxT~UqH z5NS{mo)N6D)2kD#yr55~sSFN2_M5>)V2%I%JQp#OVtsJHyr6>{-6&$p6Dtzip0;y; z*AX9O`5H&DZz%myB^9C3c-+Bq?k$s9pQ{``gAIwSLo_NRk#3;ZXz*Sram7d0Il%&i z<uy~d_4&tZ`=L+sR%{#oLGSRES8n1CQG?Vd+J3A^?f$;7ZF>Dy-At$l|LO<Fqo)WT zei&YU6)t`JPBe~ihxS(;qhBY%Y|c_kOXf>Lg=Yi7F~22GF141js<;`(8{Zo@gfN_j zl2uEuU81~y%77`L97Tr9vKH*Tdb0eJQr)*f=Nlm@)rps8)IP4D88wc0Fb}cF4X4^7 zIc;snM0J3%o1r==!Gu{8<D0p@yIkf3f$SnWu1Gicr-n9fWvrKh{gLtZzdky-N%ne% zI#f}a!Zq=@7${_#hGyOydY^tfnB>>|IOg<&%=G(bYEy^S{@&2AXz(v39CS}#mXAo! zK=dE6dJtO5JJ#P{$nq{@YYHQbArNTxu^W>e#XJ-Al=y;lNGGOCL2`bQ5C(oPIN?J$ zEt8Qzp~jlba@2#YNIBHSVec}BhaI4(I0Le$n{yk8EaK*57>(SNeM)nMJJ{v+opOh9 z2HE%A&XMx_#?ReO-3wzL&rnHMnN3Q5syT|&=lj0ghhopg%{WptUSIg};QIUNzZ^73 z(Ca&gEOkZI3hakBzrTy(8~VZFM=SW)Y&pQ=$J}lf+~aGuy)A6&xcjoRw0&4IU*oOD z_ryvmLLWB46?Gwrqf6Ux?(f)_qtA7MNxO!O3o1ir>`MvXR;p-XOa-UmtQ^U>QWg1E zLb7S*SPe-QzJ)urp81|_kguEdt`k%wzK!H#QM`F~G0>aDvY3~*@ve2zcEI$>5kx)q zTiq0A1VYfc^VZbSS4v3rv#vb5ra4Z8RM||{y_5)3gddd!2qQ4Bal)3bYi(G*xbvWB z3WH)?yKY~EdzKeV8d-?<d{2Gp2fFdO5i}OjZiL?kA-tn_Ht?At9jl6Rqwyo9=97^3 z^qMG~el{ObW-zTf5I>=^e_2^%=SE@vV*BaQ+!v=&Y<*wKL#!|gR1pyiRMJsl$7j@? zNR{HLI4+&oXyVyXVl;%(q8CA^T0xAGGSRFi#8ntYqTb>Wlm*eDQrKXWEzu`Y(>-)A zM2iaF6o(V##46EEU|_yC9!atwN)E-(6yGFr#Ly1kmrNNM-!wgaG8@_^9Qe++*Z8R% zc6Dd!TXIGu*`Lbq5bIttbo5nPl_FXP99$Ajg<=|!+fylYCpFNP4hr+*o3Aup7<qEE zVOIQ3ImEglS_s5mGC*VhjNkEjQ3REW24@V_0qwUx_^19)rJq_C^QX8A&w|CCjQVe) zw)cw}J+Vi$=dkCijGmF$r4)RH6)Q!98S}U|{Kb2t=wqqhxn;SxxhlCOx!z+aRs33s zAXzvaUG(Lu2$;u>{F3JK%_X6mn1b|>)Q~u{NCY*Pfo<6wS)+O*1Nat9{lYW^?RWTd z(cVnP98ebfhau&Cm4%-E{+)ile#O|0UY2+mmCuK}&z>1KlEvtgsoSDy@9~tTKUf#q zOz=%`u@en`TbGv2UK^bn*|spZz_uiRv5BsZ{vMqqfEFDOT^?NnPybCHJrTV-{g5)_ z2SyG4Qde>N57G*~n!S?2c{Q3vB3s|anDPuwo2tUW{@}V}t2M7ag7}P*DAh2v8&&Q% z;%}POh6?%fjU68~VW-I(D8NL8WDhiGi<1kV6qyw!6q9|}QzlhbQA)|iFW^)x6WR0E zW_e`%lI`<Lt+3iK(Xf;-Mcf)XSNTN+O^z(XpOa_@lXS%%#SW9Q6U38tg+5~+tu8E0 ztV*XXrd%_Ft&^=4##2kQ^4!!NK4ou<O$YA=)8b;wx0D1}C0UDGGL6iZO%`#KmgSIU zrscG%U5CLlu|&I7=tRwPhNROF^_t3?nH61f_UY$^zFEn!nBhBMRDa>gEyyD%q#J|g zP3LiC+hvoN7!<+^?|=9jEt*7GeIL!7|Jd_k`t87{EW_3%J!&3mx*W%xL5Yp<1>%&K z-NY4dZ8^Pdvu&T7D1TJ81H<CXwhfc5wQbzz!z|WK5-jWHOQ9qj^<0Wv6>r;({It0> z4;kxpPUWcN!0DYCssdXHw3B1~tgxzus^JhrJS#PeNzfU%YH2mMcZV(`<7RSpfw$j1 z@=SmjFXdy3NQ!#OblrL#2#OBfac1Z9X{L2%a<0hNlv`3LN(MvIZOP5rf40rvg?`ET z@*}Im@W<%LJ4of&Q9^97O76H-0mcxrx!nfsP<NV86L-UEBMJDje{zgt+$m${r0A7O zqsqCQ*KYnn7Z|!WwKL?X=nUIh*vZ=HI4*>{u39ek9?k7s4)hN&{IYJJmbJ6C^E+2M zI2U9V4E3D#d<R2-J%=$1;k9eF+jwK&p52b$?A!(-?LNXsu6g_%Nfc=sWdVH*%Lrxi zG3H~wCoJgus99gd0znvVFRaMkpxR)H{`&lj(|;bD3w<MyOVT$eGYIn;HkCY;1GP_z zL@GW{nbGX{>y*L(rH!1e(dwLY@%GT82rXg<mMM1i7f`Z-mt554%==y~cAi?Ec0X7B z#nBRRIdI*AnWS@b8**Eve~sVf+a)gu{qmML3QJ*=HycWEvrkwrE!CnkV;C|U6ik(q zicnlgyh+0AC^o|^K+aRme_H7^lLBGkPEQR_MJy+-54&cZWU6I6b4%8l{aWMa7<qbp z`aT`oj`%=L;$v4t*m=^kB#xvUts|{)$m;IuuCXVc_p5f}h@n(B2X`<dIK;u-K@ZHe zhJ_}A>=6+3DgQgIA|9CouXuiThM3po{w3Ze`Fhu&0KcLenUDU4=gDQsx)8%5%Y`Xo zn{R8TSJuK$Q;chTH>TOzms+V+4PL<=G1;`YvX2s`m~$BWb>SXaPKH`b(6ys}ozR-l z1bl%z`o)4PqX47#M`d{B49=yU8prC+WmP)0PLtEm6?*fOcgBv#hD#tNEVrPOlY|V( z>D=-y?Vay+R;2c%KJ$ZTWINXVasB9hWOk^~k(%hnN|P0+d^MLIV}^2@F`H?%g~LI@ z2osYIW_>yI%1!60ju>wNFFam5zT^$eZUfY=y{0w!UDQKzD?*XajnD1?eP&YCMpv&b zrGd}qd|bfZW9WYQRCZo}ur<%4ed5sC-8#pLZ<}Oi8*aI$qZ2t5x{U%Ko`HG&I2V@v zV*0CGLc)0K{ihF(hmi)cKCN!AS3g`E7W~4L42w`D%Ohv96iHs^!sIC6I<KRtJ0-yo zoLbnPbwA}QfmucDkXCSKIUDUs_w{DS<`keSVAikIV5TeZ-8OhRU$?TMnU}lB?QHTA zgW*4U?j6jBJko@mI`)1Zg)$RF>VcakJRwV9l>)DgQP`f3(CpgCq~q@+8QFRV7wh4P z^jHmn^7OWKkG;9G%$-C#f7oUtp~nfljIiF_&cRlwJ=SSsa{i{7`aEHQZjQw*^EC4& zYwFjw&$rv0%IU0gu?#zdjhs!%bFymkc2_FT<Hq()`aR1_ws~`>VVewc@<Z~?JL4<z zTNbc>*i-!bq8sxy+3`flyW^V@hu4OM_wkF9n>&+s><beuX~%V5+~A9)=3N)+16e@} z&%)cy)1#Y$3&mlHb?;YR3&+2AWp}2dD$XUVB_$m+krGy4`*wWI&qq3JdV-)$#n0#X zNLVRqp_S&d)IsQT<U8Dig<+ay1mSQxgi2XN)By9iH#1=r`9JkNPa}?y3)ALZV}svL z4yhA`qT9Xo$Ii*It3jlwMLHCJ%gbBk<#^gpCI!bruxT9Q%g_uu^lTrO3u|KbnS3PF zBZR0xZ$pIG_zDv!6wp3NX*nPu;L|?*AWAFK90D~&x}~b7qo%wZud$sCv!RKdktwsQ z%_rb#1O$FpUf|Nk)X|W_)dpni!0ReN_2&s*;QHY<3l+tmM;xsMs5Iq2P>9-rO({5- z*_q!`38GU_Q1F9I%y^Z>B>piR_)mb!!qM>)FAIx{iwm<08?znQoaG%44-d;*Ru)!P zCg2Gs2RB<sLsuqS2kO5j`FkEQQwL+P<tIl=J6no}c@2&1oE!zHs2&#j=ht8RG<CK7 z*Gjey{}2lhkmcbMmUql=S^haUFqHq{F7F3RS5uItn5B)Wtpl)z;5&8>ZvH<5{@X|Y zTJqn9YW-^{8^_y!ANg;e{9`0P%Yy{}CedH&`g0f1mmoSn%RhB5h<?4ii4T~A#8OOA z75IzvU>o480{D6TkH5gRmH#B>O$!2oFoLw$dsSD&-Bz?z)ybsud$Bl)nrD0X&%ZGe zQJX|h-PE!@8+q^f>v=sH-LlMcs*@%huI%WBrxlxvn+;DA&&A(aCI)p;Ci~Ocjo5d{ z5y4(cu}3MreJ4-#nTob-KIATALmgJ^V8^7_zgMm^3EL?s(s3FVIG;P9-*Fo{5ZvG) z-`d{3`Y=O*fQTxLfP~|Vfc)Pt-_agE^WXgje>(X2fBN_zgCY?`I1P~h_gQd)I1v4J zHC?d7zx;<;{6TGx{^wo%xr<|sgbJzLCnG}n5Bo)hc%uAwDgHSt#S}75mGQg)JJ$aq z@57TgRhL-*t3q&mg-g*WOuCyqEJ*$bef_->g~<u&|ESQv9`Mt|74C^}Iv?Tw4@wj6 zS?BvtwyAvO8%4UapJo5|qW{CDeWM0l{x{n`3^S5PpyZpH7hU-eN<*MbIrtA|L+wmP z5OFST4(xjWA663Kg#8Dz{U1R7i-P|TApZr-{~t0)>kX+?ON$KIU8Gu-I6Uqhu0m9A zV1$%GB{d~6mz{KLh4o8%>TQ(#1%j69YFW<KS?08Px;S0M4uV{Y|3(R!Ur`-FlSh~E zed6NSu4mM_aZ7HP&z965{H-%Wcn}Q|T$W-Y`!mte;iSC8F76rTStEv+y$RGR$?+6Y zHCeP1LN3J6?em6S-KEtvgGBIlePZ-$HGXdhTX*gPK@+Z;K!AQE_zwkqm`AQ_Yf`E^ zU_2w+Hd!r@kV1>plWnEg_}ei*<RGJywPR0aR%EsAc$L}-$SX8Ed4-(vobyw%VQrfZ zQaEuq|6zhm93+lcCN8~RD%goBTm;}9b+fQkhe4OMQ|TOcQ(-dvZ+jsGh41)Vp)Z|V zZ=y&9_js>opk1jh?TpESeLgye)~aVOJl~^>JWzu0+4D_pmI6}m<lI2Z-wQHd7~QP` z!U%PD-C8yE&ADlt#?Gd(O-GXQJIMahA4NHG2uV9Rw^n)EX6hp22CALS%JRvY^>l^I zr0e^Vh<Twv#b~6TSisYMFL4TaD6dD^uoK<dnPPT35_@o6(rBVn3L|R4v(MO&j5?em z1?VK5%n5>Jd?Sj}sfv_H{*Zrhv@bejqa-SgEFaGU*Ld}=0Kd0z1{I?ByyiAX)uLTU zU&Ny_h#vbd+S(*Q{>j<$J;m0dQQO-Svf9&qfC>pXDtPg*2bt%>J^T4Wm&x6$+tLbm z+d=Mm);sQQH;vBW7yB_+!{PD21k)4xbDn4B6w_tv<P-g2{UA2KD(b40S1(+8MXzwK zn<hke8_@Rb?^s7T|B4F2v}kd!OmsrKb#J~iCf6C{hD-KDyr7GJFy|&75(l$MWDH+= zg8`PTbvKn>(~sqo{?%iL3Jfusem{a9T<lb`OO<)gR{VGbQZ<3g*}ivwrY$5z3bxV7 zV~C^nSoGZkAMhB&iu;@%IK=6mujmL6Z=39me0h|YRX_dhFy+IDwJQ$4I@#SBQx(kj zvqC=3-vGy>#;IG%SxxBPkN)+Q7jrf#%4t~e4S|8P$HzVT=t^GE-2^G~AW9RyIY<D& zZ8$0q+uexhleyU!OgbDq6$#DW5>KBzr7BvZeonl0R4^@@i0SY29rkf_A_I(fWD@yG zUyG?kf9}n4Jn?JeyQSBJOLFxK7dvZJ-a0M^*d&ya@-JhXB;Fx8E>G50?N+W;!A<qV z-CUxZvab6LabNW)1@6;5;+TeKJzJfP*m8+8`{M<|891oeuO`0=me7kSf34h*_$IFl zKUu5Vz6_6fnY}h?5<YYAfso5mW=wyrEL)cIcAwDA^YV>W>%x#mO3B6nS24ZK!Q9DN z$LZ|GbkVJRkEppGRezfChOSQ_NpXS8erfD2HX${p_}mv2%;vu%^XVHu#x}`_Q&YVP z#>8LuTgSrI;EnJ5G2z1k%>C;8)WbG&G-unfG<DPc-hpB9y#{G9PP%q@1k@&p8z&Z? z^L61>R}i)1i{i<uBaTsDUcCe39#o#wMSIqx%}Q1)v3&UALd({p$er6V?<1a3KGh8R zEWv3DLWfP{B<{PnmY>+s&iQ>{<@XmMrpE&nXP%}x{&C~ptj=R5N#IjMWkq4%$Pf)w zVG1+ktFkC2KCZq?gDY)b$xXjxx@$kj^xZ>|a7=Ti7(DZc-p#ff2I4@13RHz|X1SjI zn8`AYUPyhDsAB;k$`H^6wu`Ig_&EoY(PJMI$^hnk0Ba;NI=P(L2&7SstQF3mR8KSf zJO(A5Ce*fFtgAsueIC!LwMwR(cf(VwjVH%!<I6knS)^Tb?>u(=FXvhMmooyA1X}5% ztv%pH1iQa8mBP1vMxK$M-n@%06@gFHvL1vH9$S!Q7){iatPO>-Ie-XgOcJ+FzI|-D zxjI=p{%w6yH9RS?HS_vh&pTo6W@4&kW4K}6kjGpZKEYs}I1o!X&7Zt+qXc%^Nn=e4 zU_N=f450l3J<_du&rnd0;Ifq)ysKASQg(yO`4ZECQUtyYRfw%V=%s#Ya=A`nV(#}- z@{heo9{JsHGHmqnarHWNlhI+X5x&hIo{TeKU|-V^y}}(0h&JE+*>f4_;C=ZnnH8kO zI^P?5-n%rOmZat#Jz_oe-nQ_m9pyhVze40cQbOb?n|CI=*JcuAMd+o#bJKnsJs~J& zK|3+4<WOsYwJUz@-^Dw0y_caUp(Ea*#BFYYrQGLl@5|b@8EaJNdYp>bKMiFuHYZ`9 zG_M}*M8?aax7_j6mqig8fYD4FQOW;siZK!giwVmZ;=#)l`V~7;G_Cs`$+ebHJFJ%t zC5ikDu|nzT9=bt2AhmTaXG3FRIj6C4jwb!dEfuDYEfwd%cd-$PqoO;xx50rXYWPbC zl+f3ee>t5!@-ehj*Qu;cmb_ts&~uUZvXsH3&o4Y?rb)uK$xP|Tg3M;eQ5Wq-|8%)l ze7X0GX5;dhU9TYudtXALdjCAZpzLt^n6fc*n*o6f5p9)I?ZEZE*BFm3b&5K&>EYKe z9HcX!(sHl0(^9=BUDm!ov%F4k!}0jr{Ztc#^A9SeR6@fDQ}fh#bFRQ?N_#^pZNlby zY3a#M@loP{iuU}D?7yTsKmu50rr|Tk&4DHh0uk+5i7!1Se}Vfa94Ekcm90{Zf{`F? z=0Gw65?Ew1yXerj+#+FB8iTe^>HI`EMH~o=i9`q^0x4xXYm#e+mM0|Kn5-*R2Yqp( zlA#vGQKsj*w4rlSHfc_Gr9-^ut(lz;p(a1I>iIUT(I=%hdR*v=49*mq`Q0H-h#9gb zRs1)*lT{f8?-%739{i~AsUHzR6^0+LOnJkGI?r9^Vr*Bsm|6S!O&9a{TiC(s&Gr^i z$(iLI#IGO^6D+<Hxppz}g4`?H9jXQH73e_Z7pa5swfq&7mmX|VdS()w-<Exb)~&Fm z^@e-+n`0fW{XE6AK%Gbgks*h3?{Pm?V!y^k?M@}0`v6C;jz({;^hQDFp%PJ=qYniy zef2!{z5BCJfh#Gu2cCb(Y7&I~I9rTk`P~P(Oc&6(Vzk5;=u}ttu(V}2<;u|flC)z@ zM{zY!KF`(_`@G%K)#wqBCiB>Tex&={G|mNNP&b^TA6ahW)KFbFsp-Y-6Dp9ZXoKc< znvKSKP&9$E9CAjSsLyQB%*wQu;kbg{xEka;PE)U#Mic7!&S&PSR^@5xe&LD#T*2rZ z7oW)GYX5#>iB9TH$+x!6u$5Kkf`OxHp;sDmhiG}w-w*kQpUgAio+*;?(7RhXLfnuk zbmAo4<xl#?1&>Z8hxv8aZ>J6xsHm!%PlHdEI_QSF4RRz*lxKoAW6e3F$}4*()!Xs@ z(kKElE81$kR??a{r+|GLiOZ2_k!a)YusRc0FFhBWHQd*#61DJq6cg);``{KgB`Ilq z@tm{ck*S^i+K<4c)FfkeB6>-7jYa-HwtlD{KWHHt!l-$!U4`hVnpGS`0?qZcQi${C zsTi2aQmpQZt=UbxV`@gc-tSa{uQpgkgMY1+UmR6~Zwg}8j>Gr*&)u3*tlGlbO|?GQ z#}29T4J8$==SyK=K#bem(&oVXN_7*)pZeEXY}|EUk#6Mb@o47M9>_>q7rdD%UVFu} zCc?I*yf)+auoFt4_?}<<rAW=dY~oTnotjm^^9*FXc2{5<trVej-p;0zq3pMqogRSP z&R_AD-}%WQEp?b2E?JwoMW2P5_gGFBm_O#&T$a{Qw1_H?C|5o5b9!XDqmsCjEwR;+ z$KYCFlSavAD?h!I#tjNfJ&lYt-R+RCf+13ybdH2kY8QLs{yGt0cSf(m_(v%zT#D*% z<LVbqoF6?QG%2+mheP6B$OIl!tMBpu>NhsIbwTq5rEi;ISV59;XAMc@$VlGB*^Bo! z$b%6*gU-`MFW8^v)Xqbr;7Z|Yc9ec6agLFzLaG4d0F9~~O4Km?BA3o7-{rMMLFn|u zg0QG)@=1O}ZpF-5w!|03cII0@)|QoGG{g+~33K9xGc=y-zM49U<n&cEdBvDvTv?62 zKk!<h`>-NX$Bcf~&leji!lNjNn=;i~b$u^ys~^LO^Y!Yvmz9U|xe7D{1EROHcJoV7 zcB8QGtWy=LXQAV9ztf5LS3>TN=8qC9fB{+R$rCx4$Ez}hTJh{{R?}KU|KbRbSsCUN zZF4#{L6grM`~16}PnYlD-y+C&%!5Wu<I}9mGXnX9ufCc(o&tCAx>?-2)2n>z8L)Bd z9~+fF^^!4~&zu{#hSrK|EHAe|K{GFB*|9HjKad>`RCm|uQoyd(rTw%v3<oJrN=Y(S zM=8On9o-M6c8?bx#DLf;Y`^WDtlvUXJLeWPH=mWe2o(H<;G~f-Jafk0Fyw*hzx&DM zi0n`94UBNbneh;D{-qUa@;k{`*=0P>t;X&S4mlnnS0P`UA*8M6ca99hEQA2UNUnK4 z{oCRh&rzYD^z=Uvgpn0kX7KH7(;VHj5_Xtt2*Fe3u*{(Yu7!FR@~Jr(5<{E%Z&_h8 zf}W)#49K48o!UG;Kf@fqYa_-Z2Y>|L2OLV;HR`T2VGWw~D^G_JlgBzlNc}{&#?}fk zzqgoqeB3!U9^5me5U5Cr;D?U0IW6Km&Cs-cAT%gz?2<p|@3RSb0ydu{W=~k@liZQI ze7iV-f28f-gk9fiwL}TPm-$vdiw178FMOKczg8gR_N>`0829=Gozj@@PllC6Z>TdR z#xqQrMXK^%pbu`jw&V^ox6Lo@9RH=I2X4Yag&tNOA6D4e<AW47mjiH-iiByb{XaF3 zrP+AtfGK+%jiMRP3##jgg#=`Xn#Nte{<hK(!y;$+y`kkan3dekHxp4gJ`_!FEYb60 zo;cTj6-SHjp1qN$woCo(S+IxM^pt#+*`D_0yu)x$A6-KK)!@F8kAa(D3IC)ey7d!q zCoTBiEijmSYw@NUsp1Q<=|sWYW7<cOZjS(yWDcX9+EMb=Sba~qr@s*ulF8}bcggO) zNk^A-YVIm84cZMOflz6%j1~-&pI4-M>v<(gB*2m)7>8+_3Wh&o|J8-Vd4)rU3}-Y6 zJP}X-i_tfq@CC~QRl)T}Kz78>P#%2P{$bk5ziDL?@|7-KhX!}3NnnJVD}>jLB9*%N zz3t^1Iw2qXC+$ePpGLKObu7>gNTc++*A}-M`(%g`IBkfP@6FqOIfAjF>KWth2}V9W zG`u<=w~SP;@K~63|K&N(Q1txUJuE#&l>pG6Dojlxvnv3kN1>D<93c~E!!uv4w$JCF zyl7d#t)#z1?w+=qs~A|}oQ`F!rlYYH(zby@)#WJ~-SWZv7YTm<7bHiKeLknpbGr)F zg3IV`%Uvs9lpsr!foDHE+*5VT2>wz)RIIRfO8j2Uchd2^_|-~-=1>;e;ca)PTK*cN zT2SJ9)<TESr~I3aJo72r$x&*u3DO=KX%o@~j#H5dvHAHb5j4XKZ>C9krN@3%rTgzH zfxA_R0wziI;>+eepZx7PB&aWzJxmA*c0g-*ygCpsM>71Zyft38{i+;RTkyC;zv*QK zSI`7zj0?<DBUwRErOTV2{-yuUr*63EH9x7fY1cD0nlv0Sul$V(bM%@|u@af&1VO?s z(C<e@lBQ<{d^YkDTf0P5D|gb<SZJ&01OWbM!mkuqzNhgDQGY0ZU+xVOH%rFvU%Fic zL!xj9RnN;?_`XXIr3y|Zp%GZT{gc_B@;szCPBNou*!>L>w^=SDw(j=vb6#tM5znN_ zNIW3Fz_R_`y<BK|o>n3jM@5gEOkq9(dhm*h*gclAxc=c*W@G!}xU55~Ub}C<y52Gh z+qoO1lepMlC6#HcJ=^HHh4JW1Y=-pfOtHjP*I-(*#e>`%(pL*^{t;AqBq`bl`@GlH zNk7S>KW$k3K?uG-AC6Pf-;QF2oG!0`FHid)adP2F=Y44!cl?l;u0q4Qauv9iiZ)-T z$<nkneco%ov9PNv$bX0-X&4-4)hJRfxbxa_qC@X?#C=28`EOnh!uI>=8Cgzn5c{j3 zxy@IQclu^H(Q(5EzHgrLB#D&tDeDRTSAGqGuQh>CJv6QMZ9|?tBd#WoI7atnZ^H4t zH><c+Hd()`Jjr@r6m_S&1nPRt8Y)-Z$rz1mH=g$qR`p0T7@fyY5j3r~6$SPWrnEMn z-4UJ*>Z}e`ce!ssQGzuzde@jX_;?zK*|$9cB)sT`wY+X=cswdg$ikvabSe^hGi33l zK-w(W25!l7`!$r)1E(h8e-xE@fHu(*rN=$C!V$8Iz7cFTQ;4swGCQJq`H8f{a#jEh z67%l1@H;1k2|-t|@}GQQ@p+G3^<2!pcO8BE!jT~nT`h!^(J3RZktw5LCwCtru2*$a z^=s`I&o;bHNTy4{DvpUk{jr!WAM5&Zpy_B$&4^7Mrw6I}>=WPNzO9UYUJeE=U!T9V zS%~8&;uSd%I7PK|)GWolmhYp2xg84{T#gNEyzoAwm$>{*(;ihOVxPcHx6u3elAkKl zI$~E=gr`b{V7PK+8zUt_pSfGFkw0hk8+BL6jZJ*1levQqy?Ixo%NQr-6d&)4(hX9J zkxk$z6A`@a)O)MQ6r(f%K6!nF4YW6~kvQl~gdEqGz-cGQl@tR+maUs`S(Aa0k6Yy$ ziTz7Vi6}x(TdbpEhluE~=aV9moiW2P%fIZQDFp5-^-Nhi*=W<6le&0Q#4wE@dpX>= zZS-{M*eS-p@4>=d7Wk7_pUOP|)8(!UZ@PDy+2gfA^uDq2T7<y@RbV4ry`V|oyVEj; zhp}II-j6r_!f#R4h+*<9WOm1=&$i-=GmmVVC-UD^5P)iOMb_v)UY<xE|EpjSqlWEm z&MaR{)Y^0gZ6b^FhWld$>Gn~S9fs2m_qPJQPcLWBwpPg@o<RWE(#`}#&AkdLqHH7D zxz>Y}s^CSA*I#T#uA4z32?z-HpmV3Nxk{sGlJ$j5GR};xlx?=Wip6x?x%R~&y46$B zBnW=)Pd*@Yj3HYo^yqs>OE?R}W0&05RKCw?jYwQk6nr1S`}$i_pFp$qj&|c^Guvv` zcWyyYnC_8XeNS9g36jw{ZJA<^bjFF#E|bizCI`E>Sn@i=Tm1y&g7P&W;8;#{ZayX= z{CGq@vENBnWZmqcnlxx*=q8_~PxRTcrhoRaRH9`5d62rpL6Fx!Vm2od5ndjrqkiAl zCpPMJY;(g+oMj2kceh}z(>S}6xg6uw)RLiu3V9iY45vufYd+knt4fcxb!&W6a!pd8 zQOSL;1HMU|liK~r6s)1%-->Y%C8<$*Mil~@Gh=Er0h02ug5Vykv1QV~I%pJF$c`-} zFWYyBG!(apG_<IFe;Hfb_$25;oHY_qu3_aZy6QZZ+&9fOA2ODIhPKhhVh^6ubC!)v zq$lQmnE+qnm|pUukwRg-irsKZ9-VHu#yxZrtg30yv)m23Im-c`Go6^YaU(&SdzF9^ z6k|1P1$?2ao-cax5q4q+z7#0&WE`^oA}6>bayeDgTb03L%`N$-SNFm4q4#@EHdJnt zlIxYiT>3Us!Q@kGn8oI`!C85PKL|2Kdv^9H&)PhV{i*541rGs*!9O1U0o|{>Qyo&} z)a+Q?sv1h~barM{fnJ}4R$C8z8^NcB$Y)<;TAlyv$Wizm@^c-o-UPApm->pO8W}&k z#*}OT!FcOnR}nqJI;Bcp>B_T{@o&8-mda4p-Q<67zewit9JkiVRjCc&tsp%c<8Bdz z<QGyX0bYpU7X%#5Nj{C+{<}x?P(=NgBQy$appqFq&izM^^}jy=)Y(DbfD^4w;iCU^ zN|;RxoW3zBTK$I;&HvlZ|7qvHpbr2SfXV;E&i{GVe<P;<zw*uqOTaF+;Dzvl&%M`y z-NsOwkq;aaNbddZDiois_M!j#I`W64;PJDgduNC#0pZ(^zUTEj<;@|t5OWYtP%;9X z)hc@ec&X!*6A`99%K)#cw^R{AzWR!ACk6Yo{suTdbVNRs%r+)0FM^>$($dn77d#H6 zH8c|GbOYZXJ`{z*9Jp@{Jr;lXRY7f=rS<gmIAG{D6>kxDO#}FR`$Z9uT4fMCASJFv zBuLTEevk)0rNsmG^^V3@NZGw$q9)2F`>gq(Z6|md-)7GaZqkWN9%{rs+8qh1Da5=l z3N}dibBtk6u{iv)GU$cRt6+iDY6vY{CvlI<b|mxtf}I}8tRnHUJc0+|!CjUUu%RX7 z?}-7`*)+(@5(qvtwgMs^Ky*?@Ta1j8Dc?A;Qtt8INOS4DliNMw!Y%hw>V`ue;?%@* zM28!_4Olyu$A|js{bmoJJM$KiA9TL0r_zV$fQAT=X8P~O#^=mA05OX47qZKMwO#<) zktxtr5pkB345a(0)0u69Z!h3__)+mko!6f*ckAaXZV3gwxR$T+f`Yn&(PrT(Jx>sK zY5#gBV;Ld^Tq2{YMgS^bn{hA&4uS-cU$zrW6L3(PTw@iI``KI?p3fL#EB;`{Ldko` zxhL=uuf66fjRQ5)-$NNipgun|bX@x8Ux*-hXra>f0p04`Xasnb5S;g1mmcYYI-Y9S z323A=;Qk=rY78va?%`az+N+1b^T(lO+I>;Ldr7#6%^ThY$jB5U!>Hfh55PSve{$;V z;r`H{@+Nl(1mt7~bUOMe7a!Gx+E*wh96jR!TRnggV|qL9bFBhE?J7)uP4Y?PtR|=` z>$m!Acn{FPLgEZ?xQ6c;(SHNk>yX{8A*hLx8?#s!vNhs8G%!#<vRpsqAlRk@w0I>g z>5u}9$px-i?bY+5Y?K1(DEw^_PMj)Q;m4i31JD)RKM5l$?%QYAW%Uc_HxbF1gX$i@ z)@r8<=AHq&cLA=wx|10uIT3H7XZH>E0j}HB161(7O^wz>XG4o-$>X4PWB&I@mT2%# zEI8f4gXv$${Yc-ph1Lx+v;!D+W77eB#n3qeq*wPL2crOc@&q=zGEPvF+l0CpsjA^K zsts6a0oZ8FtqO-oUD>iFRo&X;tkbmKZ!u7R@Zdw;pE-;6EfzL8xh9ZX4dcD89^M@u zql1`P3d@<)30-5>2;pYzxqK%%f|Oeu)#;5No9ZOLDoH7GNBhW9Qh#8<gG>>X0l23S zd4vds0<hHb1aZw{AU%o!a1zHJT2b=GAH?>V6LX=B(aFiF>U_Z?k#_DyWH8%<L}Ic( z$ojNGX!;2(jKDl8!H_RcFprg);;US9ZtL1E*HgwIkgeM~?WR|qyI}WR@P-i!Lw7pE zgSUzT-pZ$2goo5Bjo_2ZwWZ7jbfD25P?VW|n_NjyrAKWcGAMYx8+)s8@#4YCcsOsD zX7iCDCCy1MZG60IYSG5<Ep4J_>a<Mi(1y%}_gqHr<Pfk!7vX$751ujOyu)I0AI`OK zIBPmBKEUj++0qB-caps3$pc>j$mRD=#RQH905^N#Ru1$APM-kgT*%bcPpibQlCP<x zKX^4qVU##Mnu>{ts+!<SD6F&Dg_mwqseNrzEoAVWxi0?IC!Klt2Fqt_r*E%qF}Sto ze}me-*@!gdeR@M@BmHhV599`5W$kDM^vB`8CmwBKXe0R<0W|SKHtZM>OBcB8tTkuf zD-L<ni(L8+loLEt_dO>M*V4iw$PmNw`9sosgS`7bb?y9I+zdD9!AV)Hc&(ymo?zqe zwHkM09Ux}b4s?S1J@n-IqRVvZ-7O^;QR;&spd)}*!hFa_MS#VH0IKvBBnc4azySpQ zs-GPWEG`Hr{BpB%MH3VN3e{y_>duF7adJM#dl`9vQ3hl&Arv38tJcoz3oSz%$}1|) zvvWfWvsbg>#K}@L%F}hKlnLP6s6pf-CY?IhEm=9#`X1Z5i|0S|yXx&M2myn>1Qs<+ zef`*v8z6;Xhl7XL9)R~wE~o=O6niFVqC@b1+98G6yfT8maQj1JlVU%RL7`!FWpRa@ zulG4_*dbIM@*~V9)h}MZGJ~2Sc~;WPpf^4-?E@rZ%%J1|NGP7xx3!efryR@gHQ+X4 z@1uDinySwMA!%-x%Srhtq5g?nFwgN&sv7#e00|s?7iip9pe7jMLuO2dc>m(%<7>s} zTyhymXN0OMLK)S@f!L!r!bot>ANs1^Aw*hnSuf1TJstpz#*s4MFeCkdNn4+O+ol|m zd|(t*_C(<P#61A;n2L{klQPD1CQuceP~;j^30#Fgg^(%+BHQN#gIVykjy4T$<qB&~ zr?-auKwbPQ(|K(f-v_A(Tii9K!Pt4ptkJp2F@wnkg<aFybBet{;d?;3-FC0xv}v*j zuGvx9M@71QSjq|RSn3b*k%<Xr`1KW&LCT~^VYh||I6&k;Du2eF<(lCI57tAj79VIi z>LN}b(J%aFb6)FqVpgf49M-v^6WSW4XfW~|Fb6jfaF$(_h>+}G`3gPXSje*Z7cj0h zfi-Y7<t&OiRc{LJ>m<^zc8J{Et_@6#mn*7@sFR4N4%(gp9pm<^$X-N`+cc7+(N}~8 zKA?vb*b@mq*k(%%9WUti<mzgYV<y3@ld9Td_T~k3f_5jedtKiH_qAbLAOc7s0+3=k z$Bltx53v37Zv8BIU>B5tdeO6946{}~tCD|R888aEYGOK^A%I?!@5XiC-Gt3m-)$Us z*XuKF$Dr(=*(bf*e#ryJH8!2rd-B4GIRJ=8vs8;LPYt)k<X%R2Fk5<jwD<}g3wzOo zkjr#qu_ax~Z%v>IzYhHiK!~Vu3P5b*<s0%Bo&&JdSte-#)SMq)1DY3+{#~sL0+gY~ zs63K=`vj9{qNHX40--;@I|pAbktg;ixWr;)2C#60BfU&>B@Cfc<)e^2K7DM0qXjN3 zqT<hRjkSqKcY(WtnatLNg8m4|R*AmkWgr&|?4{)x+-ADvS28KwHae8mA3@uN;`5r@ z1tQrE9!-MXvJY5KBQ*!kbmOT3tdn?@KlNLn@D&;(RxQE>B99H=P_6O}=R1)BQ8pOC zt+#Nf@+SK^`1{Sdj!(3mkVkAjHsnR&dbOw!{Wx|il@FJzfh8Hd@yEM+dFVR98VhMf z|7QZSUYxq~5^_qI(2dAtSU#B{Q1)J-AclhKZbr$yFAU!seVQx0khq~HzYMBpey<q4 z%K5SKl-^^%v7ny9Zf?Ios0PIYLhhdA;V-=R42bFa8DPoV6acFC`#$?*NRu)E(QA7! z&+KcWLcDFu79zU557**Z@9WEs_lL?~1O!uK$J=?D$tWE0s=ci-&W2;(c_fvBe3+d~ zMtuFi5K4o@Sh&!eGeSN98hg)OPX@VulU&Zb!1UmN#}>DY8tr#P_Px?@UTY%q(BgsX z5&}G*Cj720|Fq<EKk4_}BY2g|_2*dzMPMVxUcwjvPb{OoFzyenXtf)9y-sE|NnX?t zWit+C5(-~SAms#UR-AfvUmx`SZf}$K-U=GR_Y-Kp1XWIh>x4kpu>+RPqPvr@2zC3L zE0#2dFD`rYFX->iT!BOKt8`zx7wF+;``7sR&f@1qj+EHAOi1%!>x0^9eYIGLytmJf zSOWgZ&9MmZ=N?IyWs9*^fDbAUwn{=NM|^<5FcBf7Y)|O{<TeYcXOyB}UB@SL?qF6M zf#f|!k;CyY+uH-x$#D*(>nhRwf(6M+hryGwvEpa5cg~-FnXmfgtoQjw?k@XuG5{zR zMZWos?Xgo|!lI;QMR(1_Y*MM$UYhs0%ENqz58!|{<H2}9Bbz`HQkgjFl~PEL^^gyY zVALQ2dQ1T9xOYK~M^LrbZ*pnML<G&Q%2`;yT}J`KWEonl0(UuQLVwl;Z7s|&E<>}c z>)WT7)P!!?Vp~<ITkV;)0ldGF{Na;qP0#rin_R!~tC;KBw7!QtBX4s-At<z~4)`Tj z|C<SN6#)?Kfu;j35VMGoW@L9w*<mzR!MK1Aa-Ti10hkt@63~&(os@V0NQb?2<n<4c zw$vq7q1%%;mqR{GQeK`1Lb^(h%)1l4kM}kAciHY7^owhl5H91}trc2XTnehGDfRej z@dvy0gc{1{w)+Iz*|PRVwVz;>CpICPY7kgHE~>+vs8b_T%RQGcji>$ShB){V?#y1N z*A4!72@QHi?QRn-E;Qy2)CK9^_6*pdCD-gws%nTkkV#dY6K=GKn2S7L7$dTB*<m>G z8aBT^A?<flyxkQR@xp`l9jPe`ia)(g<94BggF`imo}3VTPqe?wAFC62$O>eNtJXYI zXdi8>u@!=JSj)?aK8W}bOuo?=sOYo6C7<Ab2m{BGZ{C=sd@{nwJNx?b6d=HO-1`I5 zv9k`3h5NV!nNH=9)8A(F5{#2UHqF?DvG*5!?R|G=)Km?Q1^lkc)dL0<YM2>J!#74v z6OtdSi_{$3PBYmvxM6%=rvag+M_dw#+G?j8PNlJy2I;SMYSu?Lte|&15;mcCwndfL zXqppM;w(`3Xr#BQGlX{b^u3vhMyVzxOY3ROjJGQ>4>*^^apXO?^O>Yc(5!O=Y5i}y z(0Rd&#YdM=*xh=XnbJDGO}h1oxLxy5y2pM}$;%8$DWI^T9H1)EKL29Ly7y{0S!$;O zUsfdp8}$To=h+?7GD^g>fAyxC%vHk7yUlgDw~X5PP9f|X(}VtVYuFJ%Tz<S5;MO!C zFAwDn-lPS7`KcK-H8u;C!A#c3rD~Y-+HLXf-tzb?EdU;mKj6W&+?6#QA7|pSj)P9$ zpIBX146?YY-K`WvOvF){i)(pBIt^MjtK6-`)3t(E1bHR)1&tIUH%@gkRT4aNwAKYH zXt9&1ZG^ZRvn6^-XE=(Y=85Pibucd&ITjTeif3xeHX`!H!q6JNjJ2LG@Kq(uiVEO< z&+ufuY#vql{fdg*Z8e(Ja*U>8^AR>bMTtfQd_ggtzp-Gvn(SOdcz<gtTRc%qwJvx* zA;iDz97xz@jprbvTZ2YKg>2ts(l~0CB&&1Rw1<;>mJMqAHqlWbjW#|lH=oDci(H1m zUh$AOCW<U7JzWK_TiU-TE{hu*vtZm0ePF$NaBG<4a@d!ZOhW%)wFRJo8+2Z)0H_as z6CHvE!N09{+EHg2-tHEJS4!Q(AQP41uWojs`e_LS9&7Jl1Ri_+gU2R{6Pz<UlBez6 zk&S8+Pno$gO4&Y==83>XQ6W6n6YmzE@;WFl3!@?5)DXQgN_>8qx)<}x2<8m68CzIL z-}|&M%*YF!9i5t5k7qM%R;7f_8X7rMh6>)DRrs7uaajQAFaH~X1I+VZUuOEB^R+sB z5gY*>ky-RnI-D)p$x37UFbFO7JvbLbv`%>1*C@S4tl#>tAjT{V=cKEBqd*22oM2ut zxgPd~_DS;l3qghhjR2j_Yi&B9oZMZ~27Cy3^HvO|W7oR27Rp9R)3*nkzLUZ)_ZTQS z-a%1_J|N{6=-b99-!brkz7e`vVXe4<WY|PwVDT0$I#d&cP5Vxgl5{CBIzM&YolR(U zxU4}(ZP?=4MNDOK)!a`|?7aI)(6*R|epF#7a(>`*?{RN4H4XL$>9|fmO|=ooldnXH zPN1^~%FYl^3Hd4Foo;d?7TI0T+DAo2wY*Ut66AOI8LA?=$B)WA>x5vH&l@LaEXylI z#GGMH%y8C0B9A1q4t*yevo4CcbLi?og{Y00vsX_8nM>~IRE&`FJIdyq98u@p8A^}c z%0N2*+@pm0`jcO2;ENpd-n#Po))2D$?J`y%Vd*ca>8ysjv@lEF-tZsndZA#(7eut` zIn&Etg#5q6R9`+19)F|w!(gu=Drika$K!n7#XM*{;eK}PtBEYsP=z;<Q7gti!lxAw zwB(nMk<D~n0J(z=oMP-AlbpZ7&b(#SN~O#@qLs1I+{H=^P7vI~9IZc?x_<Qr72-8r zHq*~;y=$8M*ke*2z@yC7Fd+)HiH3B>=z#u1OF%+L_D<?Ipu_hIZK|SySn;pLqYQ5H z<lAm{<@N12u&-0+uCX<8J(#mwWuf~~PS87=GTidrcc#6B_dJTTob8)>ml5``=p2a~ zAJZDD=BQTF6(X$@k!H~JW{-j%g6k@x{Fvv=9j$!UkVR^~rR8-6C**L}xrn%sN8+4} zKBt?#_b%LN84K$q^mp3W-RC;{`6r{=?C%u|o)R{-hY2!jDRyyGdyN1uOSfCb3bh<J zF@GwZo?^X@xF}`!v9Fmh*J=IvZjlE%)hN!{(xlg^GhVJBvCqZIP(8#%oNIGNWC@$v zB0V7C78AVwZDu*kqEY;^6&AiX)~J$OZl4=QQoJ`m#cb`J<J3~*MI*Ypic4qKEGrnw zgLpk(C8V=Bax9hD3|S6KQ0|;p;8}ZNX>02&)YsJhu>;BNaxIZ9BA&s-4%RlWlUm%S zufa3juA72sR%ZiU51zm5TjR|b#&}3KQ{y$1_X5tL3!|^thQBfBv|#I)EGe4F<d_S9 z?-$IQl_{v2<sD2)2BmM@(rQ{WIprNbK{;1(tz6n0+9y2VG&)RM!!nihMI;bH760n% z$6F<N=lp!9B^*_TDG&!GAH$%qn;Q#Dve;h+AFkUCV`ru2;kOM7I`}#%7bj2L^lZ|0 zRr66yDzo^S_p<N_S&e)w2jBw?AlPJNW!2y|wF#3QX5ScRh2qp*$4P+6!57nQrJPt! zsMa^$iYU_HcH?kkHXx}vJxBPbm(b_kyOR-+dHoc#Wc=ZSs^6-@S?Vn@)e=WSJUy8t zZzmI>=tQzRB-Ni7QDXt4m_hX-AOT(g$E+Y0R8DT2Sq=AN3)w+IY=6@|ORY1}KC^#G zuyy2Urq}n;CZ*tuW3k|(<<orZo7O9AEl>P|8~-cLV(T6R7{MvD!q{c}wV+Rp97(Ko zSOx@1FjxqP;*R8#f1DJG90jyh6dB8;^z_ONlG#s1&da^;P{0R16^9`PP|vy=&+Q-) zMW({k;2Bwcw?2kzNLI$K(m-96bA%0y|F8tS)luMaop-zPR5LP_WmvbmeeST#vdYA( zZnmrcbH)P2icoa8jmQ)~<kcSOBh%A{qbeV)GOJ%J7<p?yA4A?Gjuy<l<|1p>%TMQ> z=1Z4lRA~9Gx}M5Qmz2XUD=%L#kVwpuo;>Ypr<uRk!0y3U+80}48PC(r{@D6Jx@Uie z!l8YRN><rCjZxNzO;X}XYLGu;>zQtnLw)_aL$Qg~MwC|7>NOkNrBi7%kWeu1)GTgd z5cKU{(XyTt=M{~gs%TZ4Ri32JTTw2ue0@3jsNwrdub*giuF*3BM~4K?1M20vlu)iu z2`+pvql5(Y&V0JPI;ic!qh65BQndw;u!gS8T#A&iXSj=|$4bcl$sA-<2kmgjAC(tX zUG!>=Id`ZwcHrv`%_N)LQP=lQJOaN|qaV%Rq^RVlgqHJ3+Cat$nH0P;_u9@Sl8A^J zY+S_%8e87D4P96#^n5mkW2YZTwCqF^Ym`R^XH^<xvM6Z1wr0i@%+;v}`N=gq8h+Q` z&{MxI@1A!zht+Cslk;e-Gs_BA9V(Cu>ZD)(c4UbUyB-lpj3NzaUtv$t1FCvCAI$HG zmiW7BTmTlHUsd?pXYIt&+_gxgPa)J^b&ay>KN_#HNh8+i+r?$>6Ko^nP{D`s>w9yX zHo4{uhoLNbhv!{Bxr4xyT`ltlc-~3!ow}CWd(T!_^)&^-znVHY?PieW)z8(au9I<$ zwbp#=`c!W9lt*HVb>|hS4|#mA-8^=FZ%qm)Zh;14a##zzJU~;hKP#C5eG_`mlgofy zK9FMdz`6UCf5pmc1~P17PC4g!r)l<i*7KqJNv5is$@^ogMh)uxl=E9q5=XwGi#X_h z{GpPAb`QZ}W-WECcPKn7!6hxjk(ZrI;9oEwz8twFa_%o$;S9uO_GWOlRJ)XWsT8c@ zFGlcj4UXPY$(!o@z8Kg*;_V}(@}4I0!5GWwb)wU&jeLV@Gzf9Rpa%8n$EFWM0(fyg z92#)NV07;e1-GjyK(77tedXLE9SqYow;=?cj3`q4%D@uD>n%pYEu(Ev;^S_G_<)K_ zo8Gfxi9=~T`LDd)Y1Vuhyv?W(tgzx)uiLZfR+LZS;o+tm0d=q+ZYS$``!KN;hKd%} zGr{SIJUqAUq5?2!0yqHF?_;qgE|<CB0-Li;dN>w=w76A2efgHc8a*x*b5(d0Xc7IU zbPylfHGdMYn+`H^|B+W`){qbDwI(1k?dXeV6{Oje;o;09q0}L0N%aAR@_(xzl$K$7 zqdx5Pds|*M&$2IdwS)d7Z*R89PfIq9g(-R+cOxICUbp1YAbp2le!uN{8iVOnqSxEB zD&?K#P05Ih)MEOEao1%}EqBw4S?ulF4HS%~gAkmmoI{s6+3F0M2h8FA7t9&T^ej{< zC%@8<YwA(0EjbZ&<~aKKg>`>|AI{?Be6GMr*-Qe<Y@UVF5%f%)fQ5n-IDU0O+DGi2 zx4+yxgBU)$Ho>dh@E6;Kcc0A?F;0z7<(g`@FKs?@|GblE!q=`8up5sGfsCl`nO{(E zm6y=^<Qj?8i63h%pQYo!kTqrj9ZYm@^xZ>ao+{n-YLw%JCPx_czcSKktuG4lstJKK z)(Kgl$KZO~7r8XtsM3{3?HN=mnZX=WYDf~;vG+>I<1GDNTZOah=R|jT+lQli9Ol}y z3gP{p&yBV$Q!q)E;JtM#Vkd_RxYnM0Rg5RL%b*>kc0`!16;HQK%XkKfr!=us7Uie4 z2{LsJWo+=uXZO+7$#yEegdiok*<4ANY*M&|V_D7H^v9l<F1uM$wjA|9z|cIVDuZ9b zTeD3{-rm#g7N<JetLaV$Y^)A)E;Okt?8vkEUp;KAaf8$3JEtW0z4pYC)}DSh*N46_ z5CYe1#^-qr4x0{Xos45Y!%AYX5weiRK1{PN*f&=V9cXuLVlP6C*({D7<$at|c7@sk zpS7-X*iax8^lYG8OmIN4v9USMA-{dCCZ0tv?*6>WeBc`;3aR6V;sqm@-Md{u`OLcO zf!a$9^WCa`=7oV|-L;DrPaqmn5nAzvGTCj<O^Kz*jR(;xz9IFlVsx`ec<R=!!cY?1 z)n%)r<SRcwavGMv<1&<3!5MxE`q@P1^Ljk3aJfqbzo$>O8-++OL7rZ;$NTC{t!ZTL z@8u%iX3ME}gRIIbp&&P>aK?*;fgh#imqL?)u%aa0J=S*1Vw$q=vxBhBN9G$@E?*H! z*?!O3Iz2X@HYa4l$k1XOoS%V`XH<Oo(A`$@vF)&>qOWJk$`l4l%zz2feT4n`;>OiC ziz0B<31PjSuwNJ`R)A>0VJvR%>OtI8e9wKl?GP#u0rA+e{*^iU-!XjDZ7^`LDnI;k zF-pLk@Ei6rt*vm#KRL(R$2EFtp`iHDTruwtf^*p`>S5&DXBATTl+FAwVe9$h8o5;N z5<aICJ@MMlC}zD4k5n04CC6j7LEBnG+(IO4sqm7|&maLoGlbJqgkxnIX^c6<lRle0 zr{wDv{||9*85iaE#0^U*3Q{5<T}p@2uo5DO(%m6SvrC7vq=<+}N(f6S-LSw?E+I;H z!?J{QEFiHoJlEpye?Oo5#q;`kgWz@TnRDjMnVB;)-&w8MP7N)~lPPAV?Tkc{mF|5G zMAKQ|wQIbJxLyEa#85j0>(u}Y;?aF=Y+)J@RH-L&>SQVS8UvvW1fp!;{5D^+e2I>) zzV@pAHF!IaA1Qxv<}JK$fBwQDmfMK;-1!vBB&@6(Xk>jL7qH&3k7p;8^bv?k6{oI9 z=5^<XY5bkpGL%zD)U0cf(OYZ;aaZXocfYeK5e`r^&rI)=D~n%iw}`)EVmEW}xktK( zrOKyECv6I3mmJvj#&`%JkM$`uDj=ARI1Ap+H-_&ki#+9#*mqd&_w4GoabS~XrEwY! zesaoIX|qJ0>va3At7`EmSC?InrvE)=d7&c}X?EZJ8k*-DZx@DNxg8oqF74`jew09U z2HB)PUOYKuopPhsfsn}gi&H|AW!b!MEL&9LElhLo1;X`mw^pvf6-;bX=v^(JWn5A* zot@gGI++fF2d%MErU#Tq8<v+-d`+fq>{d<P-Wk{ia8rMscugv%@<0{{9>;z@kO)ka zt@WGI09i*(g?$kLe_Zn3?Bu*bB(sonkbHe;5jL{L`5>TLzAdf#;j!}(zq-?-VO6Jj zf2~q=9{mn7Gehe!b3U78E4oA@=Ccp7(*cdA&oq8$PnD*A{WIbX9O21xEeZQ9s-Z&i z-!4Y8{^^HzcDc+<^9k1Mn5FAr;e0V0i!&Z#uhug{D0L0cDJ(s4YZ7mfdE1_Ir3&>f zW#(>EUFpRH%Tl_+c@!u>dW|}we$G}nmD>O*licK&Lc{zMMb7xk3{!`6f!QAeJR#rG z6Mf9`TddVJ9vTlPsAeDhs)9I;2O$e+PZqXwotaoC68j>hon@>vOsvUBCMi#E#Jzr; zW`xvgORLLlaC>seiZRR~SpO+fXXkhyTdZ{-p}&0cAd>!Oji{(;51+?|X!2VBDp@bL zswGNg`Q8eO4Uqyw*W$KR##t)pmPdc+t92kK0#VOC-=pMd>X-4W-#l~8tGT(bp4hNA z24Tl~s-IeE4<l@-a=WQ3N-QipW;|-pOPAIB@Mx9kcM9HPsR?K?qJZpHZ5`>~Z<j93 zv!1>_KV}xuPSG7SJPD>pjr^fF5tnquluko$J@d}{^$L`z-A*65<KC~n-4OEpu%HsO zQ<e8)awy|XwS7v=^`seYOiH5l^I^4Qk597d)xB=?DWdHL8$4dZmZ5(~_SYGojccHH zvet&&Av%mM_2v3`_r1m)h|(af93G;9_PfcoDDT55_63^?S?==REfa+q&AIBZAFz)n zK77vB#7NC1v*{_zB24%R)DVT$X}TW86tg4WcOJJ`8E(>7oi{mTcfUx-P2A@75P=BD z0HMyK-QisZgN*6I(I+l1c|FQ8Tk@h5)R4ig1zTTo4`rvj!}VNW#69{5=#Tf0vs*kc zZ-&UYh!(b1(&drQuCMF8o=(f0lQG>$PtS3d(y>!QulIa%FB<Sa^u=QXwHmr*4Wd<c zk3i0kumpsDrxXX<26OC>-srCSpDeu^uui!a48Ns#e(9xt%26t$(_CBbk5Mt+vt!C3 zzsEzBCz`{|UnDk6)Zbe`)UOL*==>y@z77{{hz5bD)X~8fY?pc9SypS%isM7W2$r6u zs+OsS{i(X$eerWw*UFwo_yg*ZL~N1X+(j>b!Laef7JrEuySLVBt-vL^G<{}b{+*P} z;M*ReF>F#Q<R@ZlP8;0jV(+f!WwYEROzDTEu+5=n^8;)C+{hm|-S1vfWuvcwc8{f} zP{GNMqg_;h=sL}PYdfj}^G6_*TgYl+=MAy5Nh{UH2b?M7GhQ)|FQX6N<5DQp@Q`6o z5#Gt%kRFaNA!-cGc^uz_Rc^=)T<6K%PzX(5BT-JcuKI}~n1%w5mVUPOPL=!ttr>CJ z7E-+!GMc|>9e-lq>w&BV^?NDMZqSb-jgn5^BBbE~%aWwx=r?B{7_7gsxaCH?<R4|6 z3$Qjk@*6*@nJ#==N5;Tzj&OuGkly1)jq}GBpef%3pZb&v%vW(ZGi@3&;a!HYJpH;U zouNGHWt|`{xxQ@<L8)S_4{IbvWB8W&=E!`_9*G%+Ic0?C+H@m$9uQA%dD*S?6ekxX z8@D7nk<oC~oA^g?iCzELwDnZM|D79JHuwuZKjhLY?WTFW!&<y`m*C-iS%XnFXn=I$ zkeNo`BrD|a8al+y$2*x%qk;YHQQs!g6sW^)XjCb<&_IyvCM!4BkZWH$|0Z?$cDR-l zVS4I7PN>30ad0^<hKa6id~Uq(Gp59Q$jfHm>N%19Fr9XQn*L<t6H0_gmN}Xw`@C>a z_;e^_>4Vd7L7VOR1avHRlEozg3K`rlXsUnyVRJ;!{Tl>;mcw@l18sc<xKu4o@27g- z*CTatdLQHxn00~v#E`DAJuDO!WB!U9Yv34L#*fsx*vHQPFgS=eS(LMQt26v*I@yhg zQ?CXRpq=<*S8wcfolcDP-K~q}=#C4$^LFds@eCf+d~+T?nW@QT!dk&jqEL!2=sjsK zyl~q<yl~h1HKtmJ=$3DMi!{1n_JWx36jfCB+**}K+A}51ji^t|Wy6IulEZ}xy&V^0 z$V;v8<U>Sf@uNm5a;Dod7&4aL<C!$XmPNzuzxP+FCAA*mYip?c;%asz?oT>*e8y}w zY^P(i<|<ufGA{P>2-+k37c`{UtDjfw`_}l4=)QGASvXoM?wh7E@8{bW4ax<iue@|= zz)muWUgyYvx3c(lWhy@I{pOsPIhzzpA3dpE>4gkmyYQt-eEK-S_kP+8M}n*xtv>kl zx98hs9rYIoHG#J(6b8&EFMYSZcvsIA^GeVcbDeH24|&_kF73*}(J<37YIww7{b^~l zKrYn55&sJyx^cl->pcn-7ipCc`tnsj2h;%NG5gTB%G{>M0(4+o?`lW@tC;;9C}A&U z>Ga0$i9UH)s)R#R*YN-<?E%EeHdpa*M|+$mEP4sL-ACh5hB+ZT?pra!#T8#1W^6>q znB4Ep$w$tZ@c*gex=4C_=qv2;*CWLwJ3yjWD%P(1fvp`VXW}`yh~r!AM3|!@0un2T zy?1ZXca-STjnqi9txsxLj6#NV%srv^pw1(CzZBLwLg|kVc793OzMp)2h=0f;SSY0- zmf@f~R`zV5Ijq0u*n()UfA!@I483T9s>@4VanE$TsaR+93&{2fG+mx=d(50tDl@VP z2na|;pAs>@nZq+i`c_{Wl-B+sp0vyG*V&Fh^Y~P>_w{MGuvwa_{Q)BIdx9>fSi_EM zGdEs@5RqdqK0%-*iR~7N6P1+bG<ifarSeS9y1x_<PP$z*fVOdL6{tCM-uHa-a)lYz zq^27hX`fVAe>2-=ZU6lJ{+}K+CHf#G<17Mw+$pw=rSEOPxHzP<&pRF4oQ?NIs%9U* zubVNwG{NTHlWP^&u;@RZE<rUIt!BLH`k;ZSaj8gJD=o|UoiOC1e_;VsbxpLsSr{G$ z!Ws>or43u_0*a6bZIr?=)=oC$yyAcq7bB2VUW_0da$G$U-Ue@^j(fJ(0RezgncG5t zjJTP`$!}(eTnznA*=jYO8{(O>Kpoe%qm9W|i>vy%JYs6cz5U-Y^L>*a1>)i_e9Q%o zIjB_ycH0<SKHlO43JCTXzlhH4Vg-+YOZ_HrspqZp`I#{EW7`f|Tu$+*;Vvaga2k8U zvUt0<6@q${A!+7(bn0>ybRvs~b|5#2f60W;XuO_&@_HuqyRXKIs&w;Xw^APj=w_7? zXNp(sEtica9i(Rc4tA&g%N--#^&+NgpL$ESKJ|8{>|Jiqy9!KZ52u5Y1YQXAack`R zl(YA)<Y-%a{NNVuoq4NX)WbN;ody!fdb3qh8j$@NycxCYU50KwUnz~{aJ&Dq?p!^! zn(He85gC6`I0+4ZOp;}QloJzBj}&KIDSF=9!Kk}Y-w&T1#9ivw%el8Agc>Ce8spPS zO9d<FM8xfTB$igs4`-8lVG_`gE`?B!*LEQW4bL>cBS_VNiks+n--lG|`W>Z-pvJFU zl&%gv(6}QBqN{Qjj^0?-2!90*@$Qc_+l`VIM=s?i2>YnPMAg-%jz+4??CAG8ePlU2 zp2?<}l&@Q>4lb!t&17PcIr67lpH|hSYatls>G}}k@yiaZx?6XB$XL+jU`R>d(zbO2 zbH)Q8^D{jAUT4$hWOE9I3%CQ-UkpUcQ)<QHa@`j_EKiF2lnPzs+F5vleH0r%*1m>z zu0-22py7C@G*yQ=M>o>yS#2ttSZy-5eokhe^MdkTnB?ZSRq)e&w9i;n38N`T)!+2o z(6m#@iW-F8%jxdW{2X782ecnWQ;l;yXI`2$!ByaGjs6P*xd0VxRPX8O>9b1(4O7B! z;mR$OL*2Rn41vYpG8RdtMxUMicN)E1wn@CNP@$IxKz_efPH=C^6$n#yOOT&AKEZTa zbWp>+63{k$V#2)2FYM-$O{;p{OP#=@^8DwKf<H&jTUi9tJRZ{LKixAtx7FyA9?~{j z>kw>+0=z+`!YO$1^Hj&^ZK4K@=hVQPE_~y+Yj1Ad-1K$NT3)o6O#1@TPui+&tKPKV zxkLH`#f)8eI@c>PyZ?UT+taW_rbnr&9fEql#Gf1i$L$Lii@lqvt0AS70)y#pt4>z5 z<ebZzntZ|K?Chv%-a=xf#G6H#e>-Cp-?T?Dr89L%e69Xi1e7z1=zz4rrhMkifJ~4} zdS~VlRUVhdAZ{Jsh${6bOH>7}v?A)LM<NLbj#+*5YYjA=_=CeohxGyy0tt1>OTG^i zq2E->s6jyfKBDvHW}AyZ3`(|ACwC41MN2%}+H_ir@V8WyuR(KT*!OC51L9ndm<sJf zl<LfsLp&KgB9e0gn!m9ps{|MU1-7NBZcp`5q#fb{S98g1yHZcJ7rfc;M}jy4D%^O! zX|nGsZGPLkW4`HDTC=SCNV=KP&BHng!?1d;=HjiBdiG2=wf6PSLw1I|u&6xL0JlV8 z`XjgZ#G6Tutj0RRgH+GD-z7xY_`S}DU+X^Ga1HHKL#kVXRt>X>%XK|~l;V)N$yIJ< zQ<0qwt0+tSgc~i!E(E!Z@bh{r%>EZwd?I(;RlPO;<8%@z2UG+%OlZr=X-@h4*fKx- zTQ<YXaX2C2!m!KYN&1zz0*wzrcue~x)e)k=E1eqVONMy_T(7?=+0NAI*!oL>mG;%_ zUOF8R-iV{~dYt8TKW~q)ESdReY9-h#8J6gH*ULw*rqnG})V-w=>0_Fn7*1vPzysVs zVlVljFY=H39%SlRV0?WpK*iN{woxssMF_(gBjRqVxn-XuCiG?!nR6kMWpnvW(HiQn z(|S3vop_#HE^XZr1K$!&it!(KLKJ>$=y>-v>?6{Ckp1miPLdAf;oxx>Uzr+G$jc5_ zupwXB*l4jSG`>tSBR<z-C^&w+wL((>G26Q}rES)Zv=zg=2C{tu?PT$lJI=lXRCn`3 zO58CX<z|!OznOl}uvrt8!n(|vz|~0AV)Oh6L7`RI7@2L`uDpA)Ca?3xI#b50YD<qR zmZ!qeE8)e%O7VH-r&Y_HW5Q3XdwgZ$m+FJ<1(}L(&?Kpi=7MgSSNWP9ejhy<>)m4t zk4c*^il5uA#n{Nn1H#irnS)dtH!+8bFN;uuP+<NDgm^~##pb-2sUJ|15I-PMDimkc z8c`s0Pd&}WuW5fMw~Cvw-WKo}pA&SPXPU9ZInl$3kftNaiz#Cso<1i1#Q_OpAWN1M zu5Q!|<9G84-k{oC<rte&Ri|uZmM%wya@T6VlcM+G{C+hhJmi<-ArlY@arrM2LLork zpBsfMm2s%2+*Ch1KHg1Yf+17VC6`ZyU%Aq-iMM;1J!&wcgzC1_B=1yO^TzJd`c~a& zAXr)?tum`rTxPBeoO2#K2bZcf^nA~WL!D(HI!82*<YuMC{j9=M->#bp^|p<u(soVj zrs&FTd4Fga_%1`4cKM~jdOe^tGa=?dQaY;##42w~fYo}#Zp(AdnyJJ@xt`QpNOM+N z*A|V;ZTOHGT)EJ~RVnSi+F2(pi7m4)n~K_N^Ah5uzJq1TW1B`GO!GQ>8it3HmSu-H z1&Aae9(k|V^iu@QxJeFf)#@t1#sx{D4h)};)rwO8S~-1J>w$6qehm$>kz*zVv)T^x zLJFPgNbWD*fnziT^xGFZzbuhh9x2EVh~uGlt%NKarz39r6r=(bSnkbuM71mlRW1%n z{0CvxEx#7bP(WTg;e@m%bxa%V9cW7nC-p43(8+4bvNwIO(QJ|UT(10K-157TP<oh| z?wC15Q~Z(4>Mi1t7K1vhlwPSB?9bH2K#=Gh?fdA^QqV~}LykVJjVHu-CBv|*=e5wf z#bXsr+B1`y^gH`Jo3iLh-3$LP-4BF$XPl~H<`ablEh%TZ^_C$aZggV0iDxepH@7c7 z=SP~qY11=)`KlJO72@d65FS%<pg6y6v^OD)GjeLatrodX(U<ABCTwRbAr~q4vdKE1 zaRp?|12V{^6iGq_-!Bxg>En>rU@BecAzD_c%&6B9VluMVp3U&X+({OBU|%`@SXepN zaw#m^;hV({>Ga)9Y5b%*@-sz~dJnDB_hV<zQQsC87R7Z9N|SRQd@<E%QXv@0bqF$X zj1S1}>uU6JY<9WjczeNS9?p>c_Wj1>$11rx`P}rH@>56p%$jF*U+v5o*cupK^fm!$ z_J-QTtBMKE_<PS)`ChFleV;Bp$N0PVvjlGGA4g|M>!`&D+Mc!|<T@$L@56trI>bsr zd_LV;K%_~n8`agWjl4>U%_#<HX|OmycF*lGcvP>w5Qhrz40$GzbKSP{;kEjX))&3P zvn-5-TIiFa-z}l!pt04$j$vH_(}tlVm)?Z6%ghh(b8=~lbRl{V>WQDPDwdX0hEt<9 z5kGbN)A)3iNn=aXP)kWZeF-@Q;_ts#oTm_IPhzdIQvKGz$!~&Y)>I+8txmMLq-o3z zZj(A`DI<^$#yqwx2yakLx~PWpb8}1DK)+|Sfu4k95|B^hsoDa<mp=<m(zFPLibtH} zR?SQ^?v)Mh^8_@cIoU~)2hdp*#RWCVzZ1K7&2nmFEXA;QYf_NWGF2Q8eF2APXWy;x zRhLI3q(M$smE}?-gu8}5P3+%?QW!fox^BPglRGAaM2x{#_b%>Mhax>28Gmnn`2JyJ zsAJP9x3Jni{%^Y|7ww9EY%Le;t4A}neS}lSQw2mKUw3XiueDu6DcR>03*V~SgAR>A zRgcc{%rdz!#<s0H4sjhG==#{6NHLXhqLUo1s1wGXQ*0(V>%D8n^toZJ{|7mP&2mCz zj>ER^ny*LNSw<0!q_{y=#Z&UstUK@r#DVQiJQf5%UdMqE=^!+07(ScsPXta(YTBtp zDeN)uf9<4kwJu@?YB3+|>r*Z$j3Xu!glTov^81DR=-M|{jl6=k3&^y}q?@}g{X-rf z{m3FPdSJz7D%Z91;?n`C@EP9$tA_Tx@1KjII-3xFq+P(vRF<fzz7@j<1~px^A}-~L zP}4Sozx?!1yF>SE)~%%P%nk|iu^fMUd}OUcoHRZDtOH9oe!>T6(y;$DsU<gogXWw% z#V7Yu6v(ARQGM<21ySc>XQ<%GJsXB;CFYGAo1B`AmGboKU8+hiV-3k2t#{5=s&jaY z`=&1){E6v=4Yt(n<A;Z!UM;oFnN=%K8uSN`hjfyC|D;-Xk=1C}%_=U*nL$Ii-q?Nm zZQ`m5>q(ImdAjdixZ@4$8~wNvNT&4IhgPN7{JU=Y$_LHPH*&hPUs9I%IhRT|Q>!8L z1ri(G!$S}TF;xTEY?5c$j$84FOA%As8JfgR-RnA_c|1g|cF_9cMRR>=eG<^9LUXi{ z_#-jPlj!uVc3QZ=`Xr6_8G1W_i_f5Vb*-w|4OEkple76_A|Qv8)s(qHfxS<CM|>W| ztcXp_2NS%c>TZQilB%kXTHa`$=-!dY+&OIdXnOhh5YM?^+^sb_*NL7NCX=m=ZW_vW zmT;da8>;R%?oP1Movs(TkzHy@(G!vkPO&&7a_n|q?@WwLx=ueTIum#=wO%NYYyX<0 z@>EG)SqgV0^WXEh$3JTg8kC5NsM1;r19NsZia|+TJwkcR)X*?=OMn5xw%(sauRZXo z68m4Dv#vL!6wMZ#Zu_Cg+d<JS45nIL;5UePtHksY#!H?XHRCQYpmI%Noc596rr$UH z6ixMr+GGWUMbqn$o^$tz>=g?;gu^~hrOlZ%sq>y_2>A8jO}`L`lPBBCT7hSFa>?@m zVUzJOdl?tMhlM7(vDHSr@ZyWOFNMVoL&iR9n-#68+9$c<$x=49tgC_>2bIN@3D`9X zc%^XBAo*YAIHvz9Z=SA|`GIx!v!YfToO{pR4^J}Q%8WhU^l%5NE@L;5vL}b1FH^Z7 zFw6Z?agTks-Lyw}imo=1M?=4Ft(e5r&^pLyk3EKKEt^$8eCnF+JCA=nBhlugoO)dd zqfz7VSUcmZ1zjrq3ojCq#{Xm2%y{nE8&r$7uFb_#rOo<RjBp+goflJwOIo44kN5iU ze1l6&1irQ<`nt|RHt83rqhlcIh6B<&YI?5Nc9Vrc#wM{x*2T9ip53R~RzevOn2t12 zoEV`Rdgae5^W3KeTb&}j2=Z8T=q93{pwC${qbAZA<c4s?q4>UQJ9voo*RH&@R{TZ8 zJFiZCr<?~aE?N1+sPQ)iw7&X*YT|QKnCzxDC3LYP`}u3BG66_Ow@}mc@Y?R0X5bW6 z#kmLc@wXuSi&ys&FHtvA>ck^D9)-PZ4#Kk_jx$^Oel)EUIiWWO25>XyHcz-WZ4fT< zY#D1WF|iDz8nUYsoiBfRYKm9*C--sg(n#FSYj!W&&h73<x0_N)vewn>u<%{e>-8zX zcjNy3L1wPcpC8>QAjF@*a50`L|2{s@bG>fQ20JdMBeOGrl1m9N&s&qr^&<IGx9O<h z@iGeJWVM^kPtf5BK|@VP`i~9+wJBwoWR{X1on9cf)sk}gNj>(!EBkWweD2-LpD2>J z&zPF#f8+wy7Qa<TM-8#U*BgI=u-B$eW)wAjD#Q8_xz7UM-o(s61uzTIcPC-LKa&V} z<>Zc<)XtPzt;w_&NHvs|ENtY|^d?C8gt6#ECnk^kY1%T0m?Re3K5QSpz3k{4l^7JW zIs0U?v8C^Q@ejlHV+otsQKZ`i|0u~j^6!|bwSCsQGu{J8sZJBu!ArCD(WYbuGd&$+ zf%DnD%7+8o2Tx6`v2`L}w5Kk5y_<6V>w6|GzJ32u!UkyN>Xm3cy$*y>ywWx7{gn9K zORYahG9kHY<P`RRAg|+)EZssyUnyg+tO=69a`C8cb1S_8BdE#j0h@5zhNQ(!#8LDP zv!kd`HqTq17i?R}^MXJ*d;XxDym!)S8sJ!gaA`VWqke6NAA^=7<zE?e^1QnZnBJ3* z<?lyfP71#?M3m%luwhX9W-i0n+mQH^;#jxeqQ&L#a0rIi!qGSl&sf6s<H*MTN<Cg^ znrgum`^!P4GGwA3d{Fl!QfK=I5{ag&!;D_=*CZ)f!t5b|y}i9We;Y=e-uGAHt;}9v zCAJslTf?C2UbUYuXS{Cg-kJ$GcDICRfyv3?5F{OCI>tBQ<TjKJ@9jCW*Oa0_HI%Mt zR%znbO%wJ6I8PdCB)!N~R1vb`?GFLli!xHrN{=?WOn$%Uo_T703OgypBRdE=ZM2F# z0#WDDW!wM+fy(ndY}VgOh!1@VU_A;rTG<hi5^BFVX}xox`DYso(eeG|dGtRfKQ`F@ z)&I%m9UU1qLOw|M*>RYmbx?nv3f?4ylF(vt>~=EM<9hDwbs*iht^K)UCh@x*M$i9c zk=(O~{_?a%WkHu(o()ppG;t;I>2f;SY$#eT;^a1qE{Sv6K!+~?#6fp`#0l1)n5fAV z>pRN;0_vnx1R)I^`UjBLcHM&<<myN}A^;o{fKL<o>W{n2<M%~(nE;ohWtzsfr{;LL za`S@Z?Y+dZQibTr%!%4C+ILk|oZ4lTTK2FLI3pG=<lrFy6r}S4S>{FjE`JB1to4Rh z8;?Lp2nzAplU+QdMDF9!@7=<&-6M|CDUT`!{43-G1c<Ux!!dyms1(({-opV3)Wl9} z#11>ZA9RMYV0@80wqZ(}fz19tdYC=n=82@h6xr}E*4q<JTE8bbSygg-KusX*i10~3 zc_5~M8WUQ58;5Tvz9L+|rq-MjEq)Ds9y$4dEIwdfzF^hDVH6W8ll;#i!jzyN0Emo| zhl|wIa+YA6?=z5U#v!qQ=6zwnuegcP!Xfo(GLx8+jy7_=`x&Ljg@#QRVI!AH$XMH7 z>RhjAPj+{NI=*u>ay6`ew+0|R0Ib6`E3Qaps3W>f(AxX6<rsSf#;4&9OfJa149&vc zSf1n@T?us41@KOrHcOi}mj23To>W^0Cn4tE+ck24Uf9o@S+-!)0s-*?$M!3<MZ^bV zK{4nn7wt)81!Q}Q&93ak=k3<PK2RlcZLvn~QWF=1?5?+l5iiaL&bJqYGL^tvtNK7~ z{>tk<8(D;XHfTI908yAjv6HcG(x`ljfv;{lPV?7KvKK>a)iehuyaNr!zQYfvoXR?A z*977-)GcS~y_}x8K{H<xteBtySm#vbG%cYc45;3B2e!J=c&sV>ed*`|IKgiMBN~FX zU<a@^sxJ#@0IZEZPLnJ|>zQ>RTngp%e^5~7jJRO?$bGt~`_T`g!Ds#Q)R#vE97`z6 zBQCmc5#%(Lko5`n*~|0jB{_?VrJ!Nd-wZ~fJ=kU5?W5;jpG?+3RzQ!e)$nGROXHe= zk<%ZCYK=63WoEwxm+$_XZ>ylM47c3mlwa2}ZxBHrniMf$;Reve(|7U^D(<$iUkQqj z4k@^xld#7at6Dd=@v?^u;I&4hi3*8M!$#+`*seo70UVHzOY5_MP$L%Tz4{fJuOE1y zMga@j{;^Q94$<6(LI+DvElk)hPyC8D&vrtZYru=lr@j%w%rd(Vk2eQ2Z54I7W;SAQ zpqDeafAxh77Y^8z>hklzCQL19nCwVp&I8xcuv)b_(iZUqHP<pKMv|44)oS{+U?AT; z;+;62lwfQ>$a|Bbfyk%m;5SP}lC#VIk(BCvJvU61aWzfahI93W{3LSx;zzXHPzE#u z8U{3$2I`w<8a+&zN!U>I*7)J-wA;P;;LEm4Ae*$<M;pi<eGYuV)Md!rcdGz8DAQ0H zy>-K<i8_S24;?E_=((I6^oO5&fAlhM+X^7Uk#}}}zif~(Jsa3nGi<db(CntNHDzP} zaVaX{tWc4WH)!Kr*MMoUFL9peHo+Kgk>FPYm~Ug#bEkkOk~z=Km_5g7){bUKFP{6I zen<r1$#sBETC~*_P=3W>jY{hLzCmmZ=I5;qgsza{U}0UFmsKhjfj*|%qhz!GEK*xv z78dvW)#9SpWf=e{Vc;zz#kli;Nlz1){+&a=N$mZp8!U+%zR@z+on7<85$MIAdj_)3 zu`6TZJ|-U1zp&{OG*CvUG5@13K<3@p0DPyaX8bIfT=jd)FOl=$^V^7vr$FKK<-V8? zaj*$czNdqhp=V%2Jv<@PW*ZFFejOOl&0=$G86e<<xTpaS|7N4w#>5D0H!hjyx(!&+ zr<J_wZ<bk%X(O=Nojpg2iZN1nQRM>?n*R!)^S0?!B-$I*OI4|^7P+u26n_K&uik2R zhh}^1W|*|INqCFrUhEqj8kH!AS_z?NY*~QMaRNHialK>{a&TSkkef%zjQ-q?<^P%? zQih(74VCfT7Js1Js`Y-Ug4Thzgg_X8sf-BXqkw&dIK=&-Nd}<4;&Trv8?;)`TTXk+ zy%y_vCnvsiqV`%YZ2Uztu6l^2bA+Byb-k64Q?*^4(9IECS;)a*1?fcz%XzP@<K$-n z#Dy}BIR{ccw}VY^Fe0Q39YFfwNyLZE#?!4=n*Tuhfc_f4XOcn*GryCRI+;iXMIj&- z(y<Ck;DxQSPmG5=t&`v33tw+M=-L*>3ag}y0BUvr0YJ@iC<<$01$82if_Nt(;Rl+4 zwm7ext#i6Lf)8YH);E7o0Pu=O_CLdyKqZQwfd6=A0$_`Og$B_*JteIa<v{!ffT)_J zuP_x#6c{!uHW7=nJ+Q0e$}fSR(_8K6v$c{7yK3fyNaQ{=1?X6iNsq&ESBwu8u%3@m zMPk0JHkAPsYqsk={-d~oqxfMU<Gb~#xY%Ps%E&S1E1+#C#SU#uIb6IIh-tF<3lgH5 zU*Qn+gSrUn`tq!V>YL80<5s4rx}V;VZeFzO<Qk3CHBA20tp+~@l>EP=%YkF>e#-HU zG0QF6!HLkvj6VHVO;`YaFoJ{rQLMTETD~x^{WXs@Lu1Ws0E)^I?AsVVDfxVKFXwv> za2Vr)ltf`qs^~arn85GK1r#P|Vdoz>?}U$3s}EG?7bu8Bd4U>})9t41@E!lrWre9R z-DFoi?`hrd`<`;4jO`XQ3gN=QIH>>^7N$XKh{;yBz_w(6#|_)BF0D840P+8M2y_t0 z_XhT1bTFiX8cv#_G-muhO+B<G@B9j-S{NxW$vZXVaa0G(3Xr$MucDh}0(pNlA4lkX zZ$VS13W%wQK{#hj^<tVveSIk}Wh;_oZ&?7yQb(YM_j6!>D6N4wOUoGgWk?W!EBwXP zg2URCTtRF+a4_=tN3ZQI??eAI^~;|A%HS3NfN-oap+VtAGzG7Q-Oqa!ZE;|7Dl^qd z{wdTtLQXF9<LK+y4w@GbFWO3D#mZ5ecMYUkSv05!2UQ-MUgxhA+s=uzDBHu4UBK=y z%`DBZ4m9B!2TaZaE*RzHg>3--Ymtl_WwLl@lo^CTqgMH9Ae9^LLf!^+WB`j-qjQ&G z+KN3<+qB_0{S`|2FvMPa7`yJw`52XPs}yTTphy+#AB-Y&I%NV7o!AEZK+aDMKWj(r zn!Y3|WE<h3`VN%94W&8k1qOd57$4bI`tmEkEpY+#<+jxpIsSPB&`-eP9FrHhV`@Xb zP{ecab=KJengMtn+ak-vz<g$bgv1(XEYyMrtAId%bh@n`Q@&d77;%Tc>M1v_O9(kW z=W|oSYPz=ad*=LjRL$zOh$lI>=6*YK#xwz41uSN|9ce2tGp$mOG3h6&zPy_@6|(_X z3K0i*S0)b~&&)sg9l!7d>1!Gc9CCl<ZeYVUflYyX6#UB5XR~IwC-Q+)V<M^jJ0Ya2 zAzb30D5M45>I7isK)(`GyFhI6x$%7j1W-KhiqDU=QHe=I0YsQe9SLCRu5hQ6o6fP_ zqx9hzk%v*<np?IC-cqU4^?w?pk)NUDgR;Qc)B_ZsPG^Eox*K^O#t{rw>!s%_^X@CX zav`o<4gkZeGr284dUNtaXCptSE$q1!a2XU2O$YqIE2I6AN5ijWT+xlH!bxe9G>^7o zt)Hf1#!`IKCUDJR3y1v$>=RgsWZsS(DKMJVl-&Pv;i34=eH;{yOMwwkp{!bx!53T6 zN7;oc9asj;vb~7a&s@alr=vf!99K<z0Ub-q3zlCOA~TM7D=6UJvo$=s`E7+6x;fv3 zktmz!4j3Mt<_1g^3E@cylAjPpn(DJT5zA{55%6?<d18$kI9kYe2`T`C0~CNpC=-MF zJk}@yBMW1ZkK&jaMR3IZ`_iC^x*xbMS`?fwL$qO&ui6HN5{$Clc}Sjq*oZ_ysn*fc z3+Fa1?cnnuWY4qEeq3{jMXmu$pk)DZXI8i(d--#(K-iMrO^&X8HDGOa&*B080K)-T zanA1!hF+N&YRxHc`LP*BjbN%u|B9dPzsCx>sZRScg8_jnzI7B5wzF-+6Y;d|<XHm) zEe-tiRMdXcM$FI2fdd$a2>-m-g68M+P|R@wQ^{iz85)I1;YmP~S!eyU!)=8yVCAia z|H>6OvZ0!8ZM=l4SbZ22kN8o^vsiu4W_4ENikHM}FPoypnQAL5hxwd;R`*&I9Ly>= z*j18T*d8K*^MB-WiUFG6%zDd6kO5*YpV>6k&0PK_Z1&AU<cMUq>;%v?q$t2@RbdMz zjKo>0!wDS`U<=WJ<oa$kU9tep_bzkucNDK(lP$s3lVZ>$Zy4?TxBoUlCgW^W8=oVn zBECf23MY7>CYd=rB#C#Mjq*iACV5@_Jry?+E@FXu>91R;<OF#-koToXHRj)bc5s!f zOS|D#D|zd8&<m4%g<H9|+)8689z+Qk!>v0lQ1Je<XTIZ=yQNh{X~>?w!zE*^IB2hL z<)D(`d^zn>4di#U<5m<S{`fJNh@83Vb$iq?R8L>urn<V?Kv(y*uiDdVc!YmgUH4bD zL7uBIYas3D(Ok_8=SsVNY!lVO%got#K+^uckN)ZGz(9;2^C8ihMccXMwbSTp_;=<G zg&P8ikVs@_Q`!El^YnF}gb(tK_-BXD8{hdc;}P;c3A$wNgxt;3*NMS+o8x_O=HTGi zdH@r1N@TI$u#lj~zsaig0)NJ*ZY}qk>0xQ_*GH}7<<zg*3m)9L#c=Q5^R3+~hvDLi zibuz(L|OP}7P~@tz-&32w{5mKW`>7fw?}7uJ<XogJue-ixTy*dyQLa;z#1g4M|iXy zTM(_MbYn7#<K8;q<$~(ve9lAD$|}3QR0m>T&*2_?WP9LOsV7^M@|k9Y`%Jm8KFPr+ z(gsXzUk!#?Kq+mdOKcUA~|pod%Pbd5?8G&zq~I&a|x2x%Ja+{7dNE&$BpXrX=E z;V8HG5%SulOx#SUA*DR4FK+$wZN=Y1Hd$e|D?Iyy(XU-|y<O>;IfAa?Yf}%jNQRC{ zOB$M+GmWBeR?nWz%ZO<N2<0ue<x$`u)n^vVvKnXU%g$|FyR>sn%DWQQqyU?6Z0#6n z=M;b99rIj-ULVLnNK|T<)p2mPBuBRN|GkGtNWq;D1Ts}Tl!hwG`PHxW+(GB-zuoQF z2|MiMtZV$aZBzP+AK11W8erefDCZ7E{dC8^!f-Q((W-I;$*)}pxb`#h34h4uPdB(N zA%*<4V0X$n@@;pzTPMNSfX$+?!3)sLdhEN;1W*H>cHLp^C@ubL?E?IPN7zPq)CvnE zzR3!#^X8&Z^R~mqhhkvEt{(oRWbGhpkFCCX7@vGC@J-TW&;ZlbFwcp1p!A(qS;PN6 zs+WE3iMJ9NA1D+@vzcY)i~%=1z@0#V{N5Ema3okMqJS4Aql&NN9%l9c<QsZ!yx+Pa zp{NryJN%rCA??}KM>E;4--PqI8%^?DP3K}~c@{SUFw8N@4m72S&FLSBYr(FBH{q>r z)&f@#Z8!n)HsY+FL|63V@XykpxlgQ${`)93k9>@IY-^VW8*Vx~VG@@&uGUJ?VF?gF zBQ+-Y_ukF-9P%+tQ5;TBaC6}n!MoTIti<~Ux*`#K7uboo)@ON?S2M_ej`wc!6QhAQ zF^*!8+>c|4tF;EnUjW3HT{`Ihk&tI)1YUGyG$z5(kWap~6XugldJ}y`;$!x;ro322 zap}mbManA?Q&<}=mcw<gD4xytHsJ;bCId*=p=jXKv4144;m_Zsunt@3Fu8izr3R4i z2FtIKU6Htd{YWNqv3$_s-$!|Mf>;~a!xGXIaEqEFcex<FVmxb16F~f!0e<7(dlWa7 zgIGa~%46?vbJ4QJKbtqVB~b9WBEilBNXh-MNDbWC0G`I;6HZb~6>r|fQ3PaU&*f_O zfDStV@!r`Ov413j<RyU@=Oy7ZI2ysiRDh5QGf>or;0B?10Z0jl6xfsgYLUU8?gB#E zVPyjxFJLg7h!R|};r}NQ1zqAvd2fDYlJOmBiv0ZftFtfW=<h<O>4m8kaL$9|-{24D zs*Cu*Wc}-L`mjk~Uq9K|H!=|haJBAj#ebrA^R5QKepf^>9d41C@9|}1WCAAE>jx$# zR>K&!qz>1v-wA)uB<22#j74^nXnZZ{k3R4sYYILw!mc;PM#QeKYJGj(eoK)OT0)R? zBIBh_bZZ}~f-?tKd{SWpWSiIv5q`BVuE8@i7J=Aul-ARy1R{SK+iIbqV_{@WKxQ(O zrj(~#Yc9+9GqL}4&$C{8PZ4G`d>Xf*ORRH!_Xa09w$$!0r4CO%I4M;<WHQv%T?iac zczW4gLhe4YUEp+bF}}@1`X5;e?oi-N^NdV#;v_)6<vJFFN)pa`)AH_m0ITT^sj@u* zV8=w!cd@m(b5o(x{|p%K3wbN=ow+oW1XDgt28syuD06eUzzb?@Y`h<uN+W3Y)vu4> z-?{*1eFbFa_lT|Ol@usZt!{50s#@2Q_Q52g>3m+_Yi(@}2r5bTc1&?IH#OZLn)siQ z%ru^oW>A_9_btw)YbUNcNP8|Kw?Eqy7#OEux6+d#CkI%mf06~v{1KpUA_{sDSIqpx z`A|}FmFTW>h{sA_<hdG%cA}PUqL3V9*T*Q=?5%OdEw{S^hYNs_U6aOhOnJLWw)1<i z6;s(aCFMF71YN(h7#SUXkg@l_{h{E_1sL_HdXnafQG<k{ts39nJEd6VJp@Imw^YBo znWj;e8^;FMx<!ezvq8<b@UBm-H40IK+bcR1tPoDpN1b4=ycQYULtvBdngRkf@dr$P zB~aY>#1JW_sWam>Vs_79ku+gTOH0k0+VO$GU_!w7@n?p7BOoBSPzv#KL)9{$WvLm) zUs4bI{NpjNCNR`)TfEGbYS<yvyR56Jk@)?+qGIsw^ItjF?S>ql)vv$j>&d-RoN9uZ zvy@B}ULtV|-nP+XLD>EMY<V$J(H&46`%kL>w(b93t~O3C>`Ixd#2J%FWO@At)qZjS z2)mj3hqQU`Xb&=&8J+@P8E|J{6Wpt2F#Ma$%T|?<j5tcJ^2L%qAPz=PIJ!&!r%FZu zg`Xw<YM&Oja8{?_xzE=A++>w&QOq*yVH3nVMTLcGYzW6!!#GuwPqNCI_EVoJd)Oz< z*;ienm)T(0Sb{j&YuG2#nK<J>=BwsWF^0EiOq_ZZ_*u_a_xrCzRb2ZQ|9>Yd^A13b z&+6_Z5pG?<RrukGKgqq&umo9{8eW7(h+)32xj6)=knG^Ab#uOwi<~<HPoxsC14{R( zIah}7+HSDdNasr>L`bYRRF{?Y@1wqJnb{rdxqp?pDCP`3Jb`?>;wo-=Ie>i@On8h^ z!buJHr=WFceX{RVrY*OVw?$6%%a0|QABLOwAnzwx2>(3DoHKbK<H-Uh&hql8ETMkR zr{_H`H*ko=x4S-fVlkqQcXUKyHv5IQF8kCBhHr6D6xRyw_4QfOTja1bw|n;irzmiO z6pu3u@h4!0D?ysWFQhJ+^eE-2$}cMN(B%7L@huXc=(@!F3F=4Ln}qlk)LQbzaWpM+ z#v=I#=v){{vB!0t<`S=sWx<(zFYdb;ARp(xU<64eb@s+J2U#0ccXZM#emP0WukI92 zL@LBMVE><liJ$5@b4&o0ki5K}S|5Q)5Ytz=h~hTc5nq}jk04sm+Ccs>a0CO#JSW&H z$SxcZhXVszyYHHbyQxQ(b=<RSYR2WX3M>8Y+8U~SiN*>{{Bf^XoRi(dIa@em(uEWB zv$prlR~&!O|FE$yPlL-)UguV?`DfL<$&IS*a)Jz%hp$)wwe#cpUEYnLEL(M_w(7o= zLH@N@qW)oy*a{Q^-}L;M_3+)JLcfHrB)y^E@2Pj3)Xa2iHS2i)-}Cu@vy~e^Wj?R` zr`YueDRqxWbw|*?D*k1<i`32eJio?xcCS{cf=^sdom!}FW8iu3R60PsmdulPpf7i= zm?d=5k$6u3;(nKUaHH+(jTtc}y@82=t0m#2Qip`XI?0!CLiS3vXcO*-)!Fvf(Ht00 z5?h>{oSc<E$*Zyhg$!Wi4uLI~=efS`U%dU$hcv|fh<TXb+9&vFf}=_K%O?hQb+!F# zbNRAgRNuzwL_Mj8L}x^nRQhonCun>c|BqbeT|gb@XxYK8q(_NXYhcdyye^W@RqI6* zw|MWX5jFYVxZwcY?1J-e*3$PBV#>B(hE6QGKMQX(q_!<G`{-zC2UWiwx+{IEd>V@Z zZ@DuFVJfj46J}|<b54){Ie@@!sXPEo8t+>~#Fa_&4E|dU&!U&Cjbl&Ysd@AFPqFQ7 z8YUPiJ0Qajgzwl8?_P~s2-eW`NG~Wg(GpKpl2%q*Lb02F`_IB1!zq1&Mo1Z|E7AyY zEVvp_5Lm~O@SS~v|Kwiq8ksZqr)oKKR?APie_3Xb!vVWp8c^rC2dBMreAwL`dx(); zeHCJ`uNXAimvTtoa1>AN9qW^Y6DAFLn{+*m`>3D^|I&%WmS%ICXK<dfd6mzKkFGHX z3fy|DEEXe#ZK6hm{deqsQvpXkUCi`K<#H1Q{}t&Q$>C18=k`EH6lO;IhW{DJ7yPU7 z{0|4VU(>%oede+uRs1dX$E7Wc)CzIKZk1el;hKp12|o#N6R^2eO9CoP{rGO)9TqNQ zVJcEd{iA5{8G<%wB$P!z{l3ZrsiB0s;p=p&3+*v0|6_nLz<>m?^i9$$b8{cRCE|X) zl6j<od4AC}tie7<qrI%4fXCj4JnH^tpB-~mncR8i0pq%6LrJbwL~$o9v}6p^+qcC$ z1@o?JOF6d4JZEme7W+(Y(v3PK%_|X7<eTA1m>NU#LtKefvIg#|@TD4bFZ16^JI<=K z{q7$7YoR@w%jsRi-~9Ix2KD~)zzy_D#&}hMQwneUg1qvLI}}*W!zt6GEi5fFe&?yy zd;}eUP{Y%EYilB>mT-oPbAvL!j&7bJDW8iq#K~qiMyxub`0d{f-5C$fdhFSh1^tW@ zEWP$J`{ij*eGWFKCSb^7C4m`Gy7G?+J+EmWWKpNsQr$>`eIl8s-dV3F{L*{hXG!<F zR=wlPm(4;4cSQ5DpKFD*|Bq`LII$6>-~V@svBxJOV|;kMwM86?1?%o;mG+Ld3GRb8 zq3I}Rrlx7fuxDgkJO*OON!hddZjle;o!8rCwDSGiMaU<xTNzvcqW4j^tj~PdCPDX1 ztY0MHk7(85`}_M}9F{b`*6-r^B#`9qS_$t)8hGCgB+5E+36uTjdgB~Vz@;{Zb6y#y zkGJ*@4^gok$~wL!!W>KYs#f>CN0am~MLEhTAV;fgr#*qw&T=>3_oW1*2hZGw{bezo z7qrF5jqY6N_{>`9Lg1xbY0XsO&&20$s0CmrJ_*e!puu(`v`t}?kVle5k6|I<DZ!;v z!$7KluUnXxczLwx<?wY$vDfMUuR<>ZT%5Y7+vop;y0*FEb^F;=CNcNB5=J}QhT$gt zi)@O@HsvUmN~gfumVn7qwYXQ+5(K9nw51xd<O?md%qT}wB;8agvSQxLdmJP_@!4S* ztqPb``Rli8BUotG8;ZW_rL+`p{{agkHWCHe;reT~ubi;83gA)fKko#0x|etX%~8tn zwCPHoKCx%gIi#!=Yk?;2%I0g>*O^_@v5Hymb`(e0+JvE<Pku9DBkfpr4Nc`L$1*}o z=!Qe>Q~s7rP7)}8I3FzwK-&Zq#43Ozyx4&|H{moG9Gb0~$j@W0tT4S>RMzMyeIzwm z3_eHL8z2Indb)MH+n<oqF)}_b;6(g%>SYxA<)SLJDdB&0T?CY37jUyKO|7ujyqa7t zcg*wqY9b?TVUs6W7FON`m$inM@U-ia)bF-`9JyfEG9W4e`+YU&uO0%Mi(!?1nNySF z=SR7VL-p4dbIKevWLNO;Zz@{Kd!19;()x-c5Lr5Or2^*lBc8VEY$-4YbHINOo1}tp zNHUlcDXUK2E#~{hY^kBhhUnYn@w!xTXhr<H$;z`z0}?ez$LIU$N<Yfuox7Elzwt|^ zgy;k=((>Nzv`w0Jm<zob0w^O8^s*_SkBo((gt}CRotH=FbM74uUa{}u&}Y^DdqYA~ z@cNwJ6QU?!z4#=n4SJPHqd@nZ_yJV|?jHfG-@-NlRFRkr^K42=%I4W#e+_^iIm+I4 z@qf0hxdb&QdhD}3gK^QQ>=8pf*7f-2Q_!uy_Oorh`zW_@!zX8i$f^A>;(vN9NS+h8 zS*r>Eh{8>q0)%({E^%eM<ux6O!f<IIeiV1sQWo><Ta1RLq1;a}%gNu_iGJ+k`LbPq zJF`CtcaM#}7G-#vW6UipTrRxBnx>WV%wC!bI%n*QObW)_)0nU-J3B6(axCgg6|-rO zP6QlPM!?)Sf2AGJ=PtSiZI2q<j_j<@rZ|pM6|C@SIz?Z6_d$Cl$(*caUF>xWHh|&L zdH$A_O{3ABWP<DL$drVVW}}?vpU|E`-uCt#Bhi1=X}$G;rr9zUAO5!{tv;NVc`Utu zb<fJYkMDfLvp#ZsY%In3cVSwID-!T@W@ifW(o;%RbptR<^UTmwAD11uvib>B*-_kD z<5zVrxZzv>fpgLAK)D}(#7#{Y6l5lU?Tw91JCZxu2~NK>_o*^*(A*Tt<wYrE?&Fsh ze^A&g=<(C2AtH`;X*&1b*xJ%K#J(?c@J5^r0u7Oc@?Js<pCC@YJp{obWE*$8_%04e z0cY(K4Sf*}c4wzNP&G_vo$k-t$uFn>bY+mdIIxUK?uy%2j>#sW-nf1+0zde#I$*7@ zp^0T+>LP2Nk5op5^eOJxo`zYXAuu0*6i{v4*ElVE+BRwhd=HS9|KB82%!a1ioY3W8 z4^vE8-=+LmMsMxQS4kz#ja}Z3!5&kX*wa!({b!QB8~8Wh^HA_NeIszSVmyLz|B~JQ zv3I7!=FD=}Q|{tuVas9a)bAbmT#!4{09FkCM5eedO;rE&)r8&1=h;Vf-7jj?n#_3< za!zJ&9@*91jr9|-25m;Mlh0SD;x1mop4Qj2tt#+1-gW%?HBpR$Xm8<g!91_ich>vG z;_iOGW=<|;ZO_A$H*zm_WNM6uQ<bbrWb+O@$uZSFe%n+Rb~K|sH5q2dn&N1XQH&wO zUt8;@aJtF2bh}oBx!joq!Mx$|y`PuB5*0SxiC=y?j5Zle#(3I*s?PiR`o736Ad)m= zO1x_6R;I9uE#+j2_1ms#y}BQB-Hn9D1$2jvxPPVR=lbOK?@Hs?el_d=+t&eKze~og zrQyT&eB2?FfSA}*H=n8Pwqgm?)pdZJYq>vTJ4w_H)qQwzD&#dudKpmEl(PK0tOhje z{kpN}@!H--eIvNx#In4^#Zu0pGj1cm?~51axVkAy$a3ES+CFp{FmwX<WqV}bf9c!| zuI(N(t7-8)Bd?xXb}6ZNruwG8uw<<#x48TBec$?$hS}5UVkN|;sEbBT&4qc>DxAv_ zi<nPHGsl+Fm=3;iAB<BBtihbEX+RqTn+uWf<?z;nvHcHAV}330VuZ}mAHj{2(LM3G z-bKA4ivjCyAtS5qA#k@P>rtRZ=hw98D6E?&YDTun>i2t;tb?5L9qbtu2r@2$PEWZo zbm=yDvmsf;Q~Q9KBgQ~}*0i2SQlDwr4<^``AIIL}-77Y3<l*75lT#Hf0hzMy2VhDs zwwD;JH++eu2aF93S7tS)nkPt3Fu15htFr*Zvth7P=(u!8A<DW*op^wY7}dH;weg?s z2h1uiOmo`?aTT7`qQob@@7aaWm`yL{=_xHN+_h`sSv0tH2YuId<&HbwHSL$*;Ox9Y zcMMKp?OWxbjJF+@=(go((+xV>uxiIZ8R801;3?JR-?}}`4AGu3_{ry~jP!G6)5A9M zlW33gre9R1CC5`RuA>Qe)X6XuqU8Q+F%vUAXoGI81RpE$L5x-U;>)2xBS0q2w?%th zU#3s#DvM;NV&Pi|5KDy^EuoyKJ<8ds1}hNYwH0rpoKajJ1#+oKBpDjV)BG`QQ{(3y ziQY3xiS`u|vuGR>FSCSn$DM1MJC75<HVeIAx|V9PrVcfJMXd&Dbem-}YUqB*Wkctb zkPCxAcih?LL<q^a(Mr-(n^dIb#}zkPSK6nyH?B<|Jv>2f`<Ka4L51yntlB-h0gg8W znLNnltpA$R^(p_y#{jCuSctAs2`s?H6Zenc+}EvlzZS-eW*H7jv?`n1U84V|OM%!9 zaEFih)+7GUyHsf&WlgiEF*5=cQ<$NQf4r$+`5aa~({#2bHx<%!n%q<mLedTQM)Z+7 zjRvq{6u>n@`syx-z>|>bt+f}2=Fp6)jez~Pmj`?r&?591R3f!XO<ZV^-dgVLn0m~+ z$<!ml>*9NBVy|mIGU%|?A|{PZZ%l{h3Bo71Gm6g?lWvG!5t*$C_%<wVR>AKTd?9G+ z)tORZyjb9pBWwB^6)<S4-Wjlteh-<gos#uBEFDoAer$R=ib0$Rw6OZ`o~xPn(xVzH zdtvh$Pg#-8Gf3!pc{Px9*{&bprF0)wmv|tNJ@DrI<e+mUnK{3>Lo-0w_n`n<`1r<T z%B_-JcH(?mfiAPe7cG0~GSIV-l;0=4uH&xHYi57^A5Tuv7>EIPWhu{Ixdtk{nXFH3 zlsz-HewtW$YE-U^GPuA=J}uRk;M};2N@d;1-bSyrXT!y74^3P-y<PolplnzW@*zkU zI>h&6cV@e6Z?>;!B;4>$R$hP6@uLYFL*$`u*0-IwqLRHv@gliGVW!csiB;SC<h~-M zLiA~F7?-!95~fh6mk95l(nwb5Q<WIx^q8}m6D_iZuj0`v^|Yi@a-Aa!d0;>S?WbrO zk->G7F$f&Nmr~NnCor_vkcQ}lIiRIfwp>aUK;~oaQ{l!~^BQv-C&cILgDY>Av@X0$ z#GJ5IHJa$A31<uoM6)l>d9t=wT2M}VIm<3gV)%sW@MvT7vgE9i%*hftM32;w2r2VL zU68n-I)nUkyu2ZBn@;t-$^Hi=|4(~o{txxqH}J?D>ygtY37s~I=uRkm5=E%&gpjcg zAri@Uv|1`zGFeingcxR+F}8}N!C=NL#*%F?jL3*F<GF@%p8I}Y_doEwj-Sl;#rIm~ zbA7JQ^8Q>Ga-68<eDDvI5?zuz73Gsw9W{O~O4_y`iKD2TDB}#@z7ZWQKQmEOx+FM| z1`c$*ZZ--EWijk&OiBqkZR=B|Pux$&x^81RQMZDy)w<^uiaFg4MpK>z1xzLlbDixu zOb`4svu*Z*y<+Mnyv};?^_3N{d`x8QS)!{x>??lF$X)^fjfq+OBJsn8+2KCs`_CSr zE?$SR6(hdYdzCMC3!49B_*7Tp>J<_N+bNf6^aK8vv{kifiHbe96)1pdT=(~zDH z!vD2S*dne06%@t5CHeb?N=EphO0-JME#aErFm5$R_D28t6oDF%4|QF#LeaFb8g}*_ z7~u_a*l$8TfH;@=#J=5uDB7mSfQ%{ch*~*Jth`0AtBZA=4Wcf8!V(#?tTLP!*Qdzo z8ts*7>yr6oSREWsbB8NCdBB@vCn^xwVyb#n?nm`R$oS#Dgqft_gqZ;(HZiLUN@ZG_ zee2#XMzOs)>r7o59C<A|BNp?o7+dEX`MdiaM+Dw7J*En4U(9o!y@sTV&P5kul;fa( z-LVfn)OBm-?_E)xXJj1_`M#R-%FPovHfdg%GFfomQ3G2b@tzh$8_YLNA6<GRoF2tl z;p8UnlKZC8_`_>5O*q~9E|#Lmes168GafsB^ORq44}=`-*@j&4<77H#hMO{GV;MzX zO0A{{sA;r{)5ED^T|A7s5>jZJ@xDkevf+@g_?L$^)ky;h3>F*1m_R)4%CKBwEz^pM zLxxBRBduC~V@+vK7E&z2k<|OvIXfeEKI5B)O>XI9FlEAv@S4;8(8E&5)Jr|2xDSX0 zyE(R&QBD?uC|ey+nb=y-S=ihj8r}-q;aEa*oSrBfxwsHK<&;dC(0EpJ`@;k3+r`f; ze7j4hs}rj7<%#1*meg0|0%AasH(5}K9Z}S4g`ioWE-7=sxw-zDs>ThK{%BS#$ZD)B zh!18!LHO@&<MP5ULWU;#l~6*X_+QG)qdAlr{3&|~dE8*)GO&{(=TB56WLpsXIu|_) zI%<$_nq(vT^(>G-J}^C{uUJ&2U9QJ;PS1Z1RI<o%2S*3mP_0o(zmZ`s^U50*(^BFF z@MgbLY)YTC;J9DB0!HV>14b*OI2r+=Rgzaw?2|0|<HJ4INd%^YYipXiz0>U}pOz0> zoF7I`**)ZN&4}}LnVcYv7rucjdackKBQ_2-4~{Q=w7A&FQCd(v-b!OH-`m{_i;EC2 zf?T>P&04UjUW8(D{HyQzc&Afq@p8Ycz}#IRKhPRzMc=Y!Q@Qh_GcurocbpuCJ7GB$ zlHv>&>ZrZ<Bc2OkYcs4UpLj2JqC}?-`AsskJGS~ZX(<8zDAI`bn$<CaqUXOxb;L2Y zg_hdtMcja)mGhmI0^g(1Z|A>!X_*TxO=A@{`FNLNyWpIg4R&;$6792BO%o+cDu~xn zcC8p2@=@C-5q>dG$O8?V%zltWN24Ynb6l=K97C9;y0uGK>mz*I9to)TA5NEgAPwVT zThk`L-cG6fHhE*p*F}qLeBh=_e`|HxcKk;b?_Z|+27XJ)-Ji12GC78;W^e8QKL7<F z)uf@EWqRq<ScI{P(vRTMiZiq?6~eHfm80?G76|{Qg3WF~Wta6caGz{iC*6`u<evXk zV*gu>v+(1Hng<3+#9Hw*(ZH;;*eEVn-Ir72^8JJPp&|TA4U9(e*U&o>if`^tUTU|w z6@;KMVC|<z+WV)91BU2Jol4n*`6GSthnX^%cOGeMsr%lyr)Ppr3;%VatQp*oK^jWd z%f^p=eV~FQ5{U^+jK(y2QaR!~-k4^I0arA@1{>pB#;SEQK7W*z-nlb~Cf52ha0292 z02l-tcWD0{X|DiCPK@=CoPjCeBB}P4%OO~-;AMZ%+LsBmMb<pAhTePDHp?tSCso2x zdYZz1=`=<dw84C>Kv8gY*W*^gKCeic&@(;iCn4m9^4-47iCLd>n2a0CvM-gX(}yEM z&>nXLrxyFQy|v_~%BS?EEAGh6iN@};MRsCHLj`3IbaYo}p}w46Bz~dBflSp!H(vXO z7p5kJJBDV$Wim%@-FDM-Ee%5$2v}`CD_KVn8wMwQj#S#h)nVmh*%8W9nm#^0Z;Oj@ zz@6@_Wjc2+(9JYx!`VyunYwdN+xO*Ij5L5!1~bnubhigvQpNC<n^_F<P!Fn2{&<dw z+~TT#w(2N&1C^Mnp2yg<>am^XMU~hw523Txww@x!!Tlqp(@RMlPU-Zl-jC-96;yj| zV2F+4Q-v?tK6i_MkNV}QEx6L8^}M3OSrO$E7ESR6!cGXWFs!+N=V??Q8mC^f*YX_^ zCX<dN>6E@1OKI;5Wv9<TeXfVAR%-R0o2ox86DJvQ=@!QZv(Ro^mF#gNhc^S69_e;U zoxI>!!A04*v33-Na<840;b*K0A(L;DCYnK^zCVpdYcX>Q#;Fl|d!OCZO%(*$!2+gd zs+v8BZ#P-fb04?8y)bZi(`t&1H{$5}Zm_Zo{hQ_2q96)Y^#cRBGMd*Ep6Dx($ex1E z<qO)!HTQn&T`Z)clxaI|Ml?2$H!^M-_`w)5{p`O&HYGZfX74boahan^neR5G)Jlmt zsjT|f2TTLcEs=-$!FuSMrERKkY(<yZ<4q}yN6gZ)Yv~cYmI+V{9c||B=vCHMBJNl) zv}Lbwz;7(O4jarTOuc)iMKYtD5P<%?Y--|6nx5(+aCP@P_d;>D$mHVSysN#`rqWPK zF6v4Mts1#}4wVRWnpb8}*{3qI;5+ph(Y2^+aINblgr1(Uk;ex=>8>o#nZ<lJoG;tv z76mi`0vzn3P8N)Bo9rpI(9M~Mi;3aW0?A7Pfv|`=HyId%ioJf=bUni?k%8WDlGQ!+ zW8azzgh-wjI(qEbmEh4YW#AZ)cr@0!pKTi9?Uh{DCg=2RzoWyXiP^c@r(hQdxXYQn znvCUOG=50`K4OsU(DhDoiOaR47d>rH_N(0Hee`96yyn!49{(fOFa7ONWc5qId8~>X z`%h_N9lE7uyF}!xg!1~#wF6+d;?YCaDs`jVsc3&|ld$ZtKumG<tmTW76~wBNE~GQ! zT#ou&BYj)Tk??9*Utp<PGQ5U7N4IgD$HR@&7h;Evr!nD5N()Pi!lgM{M*ZcYJrv~O zqGInRQt*nh>!yArg@Q~V^s$r+s)L8#ltIdSEn*qF6_Vv8IvO;9?{EL;rpncfgP(|_ z)^CQud60;?HZ7I?9X8R$;UsXWTdtm}Hi<A<TG!X6Ir(<L)H3`n&xOm=Re0If&0_ZF zEQ_~a4-GGX{cVRxNCGRaD&ZJ=HFpni2*`dB11p<-4AFSl@`wf_Cx@HOoCS8;zaX8} z74mGCcj3%Ej~3gq{h3Sm5ALvK(@)q^JZ&z)O*J}Iv_SD^-!LxBycW|*y!HI!PV7o? zP2LHq4gGU`%sq(~)$y^C`rW=jB;DmKURxLUq*ah^hcGL`RnE(XO$Z_fS!GgG?yMq~ zOoAJEy0hD{kM}CpJl@N7=ky0TB5H9CeZvr1UoE2-Nl^C-{8zOkI_i0sX2}lG25kP8 zx^GaAx*ptT;+QRolIZLA(R*Hf2A&nlglSOU-#W1c>lxa*Q42=s#5dbB<xe6v4&B-u z10Xl@G!4VaH`kfB0xFHNFXz)T%kX6AjHU83o9Gfp^me1Oe-tkO?1BYOg!lnJKJvuU zZ|VE^xcXRK!RqX8e6&auZLj(RR89O$BDn1V2v153RAY5n=N-(|KXdYK>~09iq|*c! z$cIW_Hsjs*a(xh3x_d^Xkn?a^c+)vHejEJlbIrPo0wqzHX=j)%?7L`SReBBkvR&4@ zmRLqajTBkNU9}v=?S>O{T&w&4vYmD>F0P(89N0y=IxuKL{a%kl26_A7=2G6%>y2YK zVaxX<hk2ZCvN*zIE%nTnfyr$cY1WaIi&gy8=A#EZn~*t@(!vv|!6Ef}O95>@4R`x| z?E{Ba{w0+rTJB`VSXnAvDZe8d?p2<gUsKwSL?TC>B&o$#s<qaF+Hk2ck(zBcC-sL7 zV^EG7zfxPkBzp>!nksc>l?2+r@9}3YIUcZl+=EN5?Q}LKYo!^fJ?|8y2bZkto4!d+ zJWU&0kK*9eT30%BBOBEI^zRo<W7d77=tU*Z@9W8Q*z+=?`GD`@2j~i|Y2i8vIe$1N zXtyvGS@Mx0*HO4}{%y*n$x80nJy__R3yO*?G{03hvLx=v{xbj?=5ssJ?IbfVY2oI` z_Q@(OvmLkEOsF$07WR|OoQ!*sU*ldRZ&qPe;H2y5sRuw2!DhS5A4gzBmR>1xw5!Q@ zz<#>WRyUufnDez=vF_!2w7;kWME%1lFk^&d8=3JI<=e-lY&<;+!L4fcj*f6OwM1t_ zYqe5q_2KHVY&c_xMd_&}ZYraB%5(I$i&j0bf5SyhM0@&ZzA%d6CP=9+Z{GJbZ7AfI zy~o3wg~}1ZZfpFRfXM+MK&l($Ma>F28yfb$zZL02D~hCpbQ2=rl1{4i$nsMaZctGq zXIyZ(9hY^28hR-ZGhVwJr&X!<{N9-Jy)>WFZex=<<%*2sZ%{|`TMwFga`xf--F0Mr zu^JB|>M;R+UfrVzU+0|P*x`NyGxV?XA&GtQU&}e~G@2=x4rh!0X#3QKMSB8~9;rJC z^Xxg5W^mbnPv&OCJOLlBo|4+1arN|;8ZwPGb*C5IV^&$M#&&pK=?|(JTV^6+3B%uQ z-uZogyx(;Bp=OsztSi?r2E+*G*1e%<{Wl<c^G2|JE$*qH#YeCud};DCch4~yt6RC4 zPMcw(4(OrF7Ke!8O&?pv;=?)?sW~KciHf{!BwOxn<#l!JiB+UVB9br5EbnTygy5h_ z{!pVgWE9;oWQa?(#dGgO=KAGL&C0HAAt2lJnrCommNO)O8XO7|7qSQ+A4ob{rxuWJ zQ@NpI8Vp~HMCTtDe3h?c=;(gn&W%J}@l~nP?3HnYffoev#gjx3)()o->59+2)2g9x z#Sb<aS+9A(7SG6W>CXkRkuJBj^uTI3^kEzrskoieYMvun|Fyuey&z>Os)qQMA^EtJ zHDRrXUT7Is-k$g6%)4iI)xWb%+YqHr%l7bTr!S9z3zRA^@ho-M{OnGD^-y)s<|+@h zEsp)v^@uT#eiJJHn|s`PNni4JYF$*Fp0p#PTonJC_$G4m%9I>qEW+ZF!g<N)n!(?r z{6N47=bPf>tk2Dt=kCAZYFx}X+^1Q06JJ>DUtnvP3EJIuZ~*FIF(+;_jxj|bUXYH7 zI;y@6fquDyD65QeutAiM;oxKG@%O*#c6t61<lJ5$$E`3!`l>~@fnQ4C+WlMVfCu;y zW}}k4ORh{hiffHo(a<xu=YoWYo5r(+W@Lpr%5vC6cDhVOhpWQE^-rI%@0ZJ}?bOU% zX@s780DYBOuBv@<LyRzlhZl$v+p=}2+m-B&43>{9L6zA9jS=yz6arqkhm-H}%fZk; z0iee8p;sO9YhCLU+NB-VaSe?&w+`^~I)g9_Q;8fR-(fsRhE+ZqYQAVgIp+B&>OvEc zs*i11QA=kLuLYCEs3{y3(k8UryuTi5`Z@Msj_p-WwWuvM=UIsN=Sg0lK5r9hgJ$bR z)e?wClS&DLgRYYxG&||!sajM6vL-5!{ELS~nE%V~`8S4=N8Rv020M~Rh)+bVO!#2E zKl^iOok#zzZ-0P<{Jx=yiDr{Hv9Lcw3vARPZ+mZNxjbVVhc5M69zEPN3B>U^zp@x{ zdi?91H>xu61?A>%=8DtIgqTowiyU3-fZ(nd1IBVc^KBbqjsQ7%-+jetZH~6u>AQ9S zpiGYcpx7ZJYUI@%piW?{EJ-eoB|FjXoni`AsnFBr>|qZ~_Q49nlEEM(T=)o!Jqxzh z)~Rx{X%SdI+`gWMQv`Ijs%Mf5GrSxhEQ#u#y#T+VORoL4%7?6)`98qnxR|_wYP^=> zFy^yW)Pj>^PLzaqew3TML6N;VuIJ~;R3$Q<b_LCRdN{v}!i*{@gJu)jzc*&v2QwO* z5L4wn%h|<V$9+3P%E3!N7}uxLGEM{+$U%KagHEVtE#}qAo(S4E8D#EHJW*NJ8fZBF z(|H!MiUkXBf5IO2>T;A&<jX?q9zX6S5^Yslc_}W}?spL_0DagC3v6_YC!=?`RpY)8 z&-uw5vAUZD8z|vW5T3~{ORq~x+JM_rK70AkU&0QwHkeTa%I)mhlg~!_h4iA(BISL^ z%MG#R<B~Ewq~O37q1)s`s(A?0&-qYft!;>_aq5;9^$$cYYkvNz@~0wBhDJc&6@eN6 zU;mWeBM>lQ2XnvuvG!h*!?{v%BIZeQdf5cXCli_rlJ}<q5CD5=DLp##LnS@W>f$@S zaE3`7JuoDsGV0+GxT<sS7&sYsG^(H%n&BJewZ1O)1BTbOQK5X(>XWjqSN9uL%%Nx8 ztG{?9j9h*PAnPOh`L6SwiL~>~=<ex}#CG2m7ZVo~`=R=VknE?zc;%rM=O`Iw_2T8- z_WG4|mJGrJOm-Yr{K-?#@IZx`_mWxJr67Svj*Dk*bL1II<&qr<PzXiyy&)oVn^1d} zmIiy<aM{b+Qz1A$6f70;8hDjHiJ8_V5{@2cwl+!@wcCdz#sAEW0cMW}>(-z2NMC&d zptSH3w8B&Kc(A1J_Ou~TU`71FKjeA3Nc#@dNYP51y&;R=D}L<MsZ#}0fOJw13kWE6 z*?GFM!g^=?dT?p?c{?!OjZ5XBYtt>FoO|BL70LfJGjpe7)m7I9R0|K>jxi8=b>%Vi zY|)iFz9LU~FdEd)BHz2Ik_hqvpXr$<N4*bJ60=OHsDPY0WyrKh*?Vzn@VIE}YRrn4 z84Cod_@ve|h@91_-*!0Hk{aSuYXECx+?VwU6_2qKQn*Td>rE4c$9mGN%+G2-T0|Z> z)fd-0^v7wwD`cLgZM`oT7g%i3pOQJ1<r`hxj+StwS|8jzANRio6UG~iGy<|VnEQJq z#1PidD}a#wvRUcAwlvUL2EqytiDEtw%FuiICDiK;ml`UeVTv2tD-Z5wPEO9X-ji?} zd(%9-E;3xOY5q-Y11Wc9)z?SsNnbz+gnY&{O7py1i4Z=}TSSQ21`Vo1>3G3Yl27K- z;)nJc8orKdZ|8Mh^%PJloKmlLhHi`P>FH7367eSErua|mSt273_<CChf9zOW0V9WU z&l|fU8)env$(r$N#K%KSw8=At4>pzxB@$XW=d~APXN1>=$dd(Oi7Ru=HDf$RWLpQM ztM@eS+99k@_2ybD`eg)wc_q-%;vy52jSb8TPCIzp>d)bUyDMWEomB`P{|sIL=nZta zNJR(*YXFqnmC(=&bg~c#IojzX-i1IPH2S3~UWnF76+LB?5nZw#;_;9NdA86~26tB9 zAt7X|FKKF-F{S*Zz@hA~qk}sU>Htp?<GVf+u)Hv0r7UhQwTA&&?}08aFs!=$J3wc7 zauzG1kc(G31)=%?*H|3@h)}8RR$1WkNN|z#cg}I(0|P3QSrY4;g>6(~C?v>6u0@u> z<;`GiH+#G!Tda+xNnk6qXtc=usV#t1O@34VMJn^kd4dIhe77^(pK;BM&*aF*K~S=D z_ve&c04q6(au@Hi_7a25=QE1o@aM&ZH;lW`-4p9|Iftb3;QW5Jx`ymRDU!&$kX0~k zZBm~U0)=}cNff(E=IG~o@i&||mW;n<CVAX4qu8DT@bd3*vhg~ZWv>>lt^VK0zFg)J z+O?*8;+^B6!=L`>O7M;B$!8}83o<`@>w!ACU&2`50wzlyJ|nXB1n{AecJaC*H)B;R z-9;Odz$Bd(reA(0-Z4J#tYnM+-{FM2ylRkZP4~0cmg9LVKAcy#k`WC+>DW=I_HUl* z+biAu#K2eZ32^D#@z^%m3s;NbZAy5vQvBN2%9D>gP}CuV3w+V@t3&I8w7R)O>-zx% z$X&IYp|IZNfBy>!GazqXNz&ML@bK@Kum0w?7qkF>4mJL@Z~s~(yykiG;RP%k<KSMp z+J9?78ni$XQ`1^AIRCwQUM~$TK{P#c$f)$cwLs#@5%d-L!kP&DM+aBy1OU3TOCx-( zfaL$S@WBYQpneLMw66R9W4iD_ktdB-;eG#G3p|vgOv)#8>wk>?*T=g&zWrEpBDh!V z|2EH4wq-nJi#v~a@gFV!`lx>l?A<R;_<vuk1NrsdpOXwe-c1B8_}$KwS;eFOe!l+O zKcWD>JWw+7k0|`36?n_%A5q|`hJUoeKcet+Gx`4^3Ii(}TdNEbiK*YQ8^F)m)8>XH I2A5<12O_xYkN^Mx literal 0 HcmV?d00001 diff --git a/tp-gitlab-ci.ipynb b/tp-gitlab-ci.ipynb index 51fe741..5a720fa 100644 --- a/tp-gitlab-ci.ipynb +++ b/tp-gitlab-ci.ipynb @@ -735,16 +735,199 @@ "source": [ "### Provoquez des erreurs\n", "\n", - "Modifier les fichiers\n", + "Modifier les fichiers pour provoquer des erreurs.\n", + "Notez que le test n'est pas exécuté si le build échoue." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, + "source": [ + "## Exo3 : Docker pour gérer les dépendances\n", "\n", + "À `helloworld`, on ajoute un programme en python `rosenbrock.py` qui calcule la [fonction de Rosenbrock](https://fr.wikipedia.org/wiki/Fonction_de_Rosenbrock). Ce programme nécessite [`pythran`](http://pythran.readthedocs.io/), un traducteur de python vers C++ qui permet d'accélérer le code python.\n", + "Cet exercice a pour but d'illustrer la gestion des dépendances de compilation avec les conteneurs Docker dans une chaîne GitLab CI.\n", "\n", - "- de build : notez que le test n'est pas exécuté\n", - "- de test : le\n" + "Pour le reproduire, il est nécessaire de :\n", + "1. créer un compte sur [DockerHub](https://hub.docker.com/)\n", + "2. y créer un dépôt vierge intitulé `rosen`\n", + "3. que Docker soit installé sur la machine qui héberge le runner (c'est le cas pour le runner partagé de ce TP)." ] }, { "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "Dans votre clone local, basculez sur `exo3`" + ] + }, + { + "cell_type": "code", + "execution_count": 68, "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "No local changes to save\n", + "Already on 'exo3'\n", + "Your branch is up-to-date with 'origin/exo3'.\n" + ] + } + ], + "source": [ + "cd $TPDIR\n", + "git stash # si vous avez des modifications non enregistrées dans exo2\n", + "git checkout exo3" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Entête et étape préliminaire du fichier `.gitlab-ci.yml`\n", + "\n", + "```yaml\n", + "stages:\n", + " - build\n", + " - test\n", + " - release\n", + "\n", + "variables:\n", + " CONTAINER_TEST_IMAGE: boileaum/rosen:$CI_COMMIT_REF_NAME\n", + " CONTAINER_RELEASE_IMAGE: boileaum/rosen:latest\n", + "\n", + "before_script:\n", + " - echo $DOCKERHUB_PASSWD | docker login -u boileaum --password-stdin\n", + "[...]\n", + "```\n", + "\n", + "Pour faire marcher l'exercice :\n", + "1. Remplacez `boileaum` par votre `username` sur DockerHub.\n", + "2. Sur GitLab dans `Settings > CI / CD > Secret variables`, créez une variable `DOCKERHUB_PASSWD` qui contient le mot de passe de votre compte DockerHub." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Etape de `build` :\n", + "\n", + "```yaml\n", + "[...]\n", + "b:docker:\n", + " stage: build\n", + " tags:\n", + " - shell, docker\n", + " script:\n", + " - docker build --pull -t $CONTAINER_TEST_IMAGE -f ./docker/Dockerfile-rosen .\n", + " - docker push $CONTAINER_TEST_IMAGE\n", + "[...]\n", + "```\n", + "\n", + "- on construit l'image de test à partir du fichier `./docker/Dockerfile-rosen`\n", + "- on pousse cette image sur DockerHub\n", + "\n", + "> **Note :** l'image `Dockerfile-rosen` est basée sur l'image construite avec `./docker/Dockerfile-pythran` et qui contient les dépendances." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Etapes de `test`\n", + "\n", + "```yaml\n", + "[...]\n", + "t:helloworld:\n", + " stage: test\n", + " tags:\n", + " - shell, docker\n", + " script:\n", + " - docker pull $CONTAINER_TEST_IMAGE\n", + " - docker run $CONTAINER_TEST_IMAGE /bin/bash -c 'python test_helloworld.py'\n", + "[...]\n", + "```\n", + "\n", + "- on tire l'image de test\n", + "- on lance les tests unitaires" + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Etape de livraison\n", + "\n", + "```yaml\n", + "\n", + "[...]\n", + "r:docker:\n", + " stage: release\n", + " tags:\n", + " - shell, docker\n", + " script:\n", + " - docker pull $CONTAINER_TEST_IMAGE\n", + " - docker tag $CONTAINER_TEST_IMAGE $CONTAINER_RELEASE_IMAGE\n", + " - docker push $CONTAINER_RELEASE_IMAGE\n", + " only:\n", + " - exo3\n", + "[...]\n", + "```\n", + "\n", + "On ne fait que tirer l'image de test validée, la renommer, la pousser vers DockerHub." + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "subslide" + } + }, + "source": [ + "### Pipeline complet\n", + "\n", + "\n", + "\n", + "\n", + "Comme le montre ce schéma, l'exécution de différents jobs d'une même étape peut être réalisée en parallèle par différents runners.\n", + "\n", + "Plus d'information " + ] + }, + { + "cell_type": "markdown", + "metadata": { + "slideshow": { + "slide_type": "slide" + } + }, "source": [ "## Récupérer un artifact" ] -- GitLab