From 55cc0f3307c703746a782e4bf69a141fa903c8e7 Mon Sep 17 00:00:00 2001 From: Peter Molnar Date: Wed, 15 Aug 2018 11:02:59 +0100 Subject: [PATCH] - webmention sending is back (only for RE: for now) via Telegraph - removed the abomination experiment (aka microdata) - added svg source icomoon for the possibility to extend later - rsync moved into nasg.py itself, so the ordering of render - sync - webmentions is ok --- .gitignore | 2 +- assets/icomoon-2018-08-13.zip | Bin 0 -> 185738 bytes nasg.py | 398 ++++++++++++++++++++++------------ requirements.txt | 13 -- run | 2 +- settings.py | 54 ++--- sync | 6 - templates/Category.j2.html | 16 +- templates/WebImage.j2.html | 2 +- templates/Webhook.j2.php | 18 +- templates/base.j2.html | 67 +++--- 11 files changed, 331 insertions(+), 247 deletions(-) create mode 100644 assets/icomoon-2018-08-13.zip delete mode 100755 sync diff --git a/.gitignore b/.gitignore index 1c81da7..e4470d5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,5 +1,5 @@ __pycache__ _scratch keys.py -nasg.proj .idea +.venv diff --git a/assets/icomoon-2018-08-13.zip b/assets/icomoon-2018-08-13.zip new file mode 100644 index 0000000000000000000000000000000000000000..492fbaab37535cbc303af71381556a9e8e62dfd5 GIT binary patch literal 185738 zcmd44%W|YimfzQAq-jw!T{hB6CJW{)*j*|h<9;btl~Eds!?u~ETI?20G8t(?1|k!f z3II6>B(kz-v(QFcnMtppN6=aipjXgNPom%NfBXvskVsTyC8`VEm4WZ#pI?rj`#J9Z zhrj*@|L}|7_`kn-`yameH~+=)v)+I3o8S2FAMxy8ua1s;FII;>+XJ*~Q_>)!F*X-uiTNwL6NdlcTF!LpkjI>7vI-SC@Hy*+$C%PtVt< z=NaCn_uF@;S10MqH*Ytq?|Q)DY;}J1yRU%MoA>o%bNzbzqW9Z0v<2hl{n^Wlb?h%2d>J)hXuJ`Kl;w)co=>Kxn4R+i40QD;dyuNr>V`R*|fBB~ufAdc^y>DJ#9KZjr zcXjmou=iiRy2_Njc`r1sPEI$@$yXWX^60#PELf|S*X#FhPBuX1`&F7}%4va5zy9Kj zZx}>xxjx!#zJ2DjA8g)ST%Epp|Li-*-TMKEeE;VtLo75;&^p4Vo~Pm=w&zLo%s!lynJ7MzRY+EIUWL1=5VuG^-c;>X?l5bbpE6H*ep(xd4-Y|KIc$|K(xt_vgKrmly9q zZfO9_KfXBsCs*52U03bUZcoAY&D-UPRBlCJd64SO#ri#?UPJol$D7^-#PKix^rt^C z;=g;l+Az@3YM^rBTIjP`-il0??2q;%9Fe!b@?88DT4RxzW+Z%eM{DyV`pvtIO5by_2h} zH=D1YKYtDXc>D5jd2#mquUGGn&R}Pfij#OlEvILhyf2H*(p%>D;{40rOZb}5l^O5Q zN<&|te);?Ql(*-g1iiUp0KWy0*QZCl7qD_T{rTJ8|M$QC@7$dqK^T9yy!cy~IgE&! zFIQKWr>pD6Ata8*>+QrBU;N>gAo+Ly=>Prh|M|av^Be#DM+lPJ-Tn7p^m@-)FaPxZ z&Fb0Ly=U7J&%W}l^>29oKXKFR`GNn-W1e>RJb80;b#ha%6?-um414|M!Ein}oc8($ z-VR6o!*Q;-+vKk2^PPVO+ozU07!GHL^L&z99{u=YHl7_$rla0$wBX(HV9-Atj(da2 z;b<_Uxx>M92U!FZH%d4DkA*=Tq$8&mjTI2#;}rU&!I;dDGY7*G0#(>{Oahtv7! zU_g_jNpEsE>`x9xqr>57b}&1f@;jOzjwZA*JX|bh2a`iONa2Nj;meerGswgKxNliH zwHVWdt|Ox<9b!xq05V=oX}dR>(y5-63{yvXKAQC$#$eVP3>o35=Rg?vyuUc?_eZ_S zg1=*6+g|7MgVE%0J|Fe0{a`ZUyGcGj7|@de-JOqx$%sKx^T7b9^yf?qb&ed&oUadr z8?9$#X|x6@U;r95Z?>-(bebxlEeG?d6)>LRY}Omor6JYL5BoD9Ih*#T3+83yER7k# z>~J>Z`#`EEi03_LiSADZhmLeG2Dl7-LYs323gj5v!6Mbt#lt!CHRyu~!-L6UVDeROG5y_5g}vV2Z)@DG{B-l;?fME@NBC01tE2U1wbS)}1`QEl#a?OCUd+}qyk%hO}(>9?1E-?jDZ!%^;zagPypjavZT@puhS96%ays`2cazf+0-Bp0LMWbGSx9r%4X zn~e_UQWC^BogI#+&`xpIDsyr$8jKF7*F%VK)*qYM6S9?#%Psr01Ug_5gb8i5bebsJ8ZIbEh< zJ7B{jxZ@3`Z|9#`{Sc{cBw3@bUDAPQfa6!a+2GfqoZ}UW05;v_)&0YH4C1+WjE_M( z;||+_dq+Dv1KN4}sN_@h_jAc-(1&ius0CLXA>mu97z*lfh-*$ z9VYzcBQyuTR$wAU59gBwiUAm^u<6V5A-BUxA04ApM%)~DKtAA*d(IW z`yq0tzkpcL0VeZ7Z#qcDJe|<`fDZaGV?qxeo&gEq?CliVp21vTLnt5vIyGc86oCz(3rxndA74!7ebh1JEsUT)8mbS{%?YzW zANr^*Hal1xOcCsTbU1oFfsN1$bO+!zL=EGnzhFAS0s6u$*cIS09s*N9ycnv_4d#gR z!QmW6IT@l%0UgJ#QpM*3SO?Q-Pf-0(dtgwL{tPuW6E$FtM*z)lGF33ZVS#(z1F%Ec z?-)g<2eTV51_uJ0Ce-&%*Dz${hs15|a9L`IFqghuS()SwHt z!Cy5orbeY0O|TGz34$sbYAgnU^?X?JgHQX;EgIfH-5T^8&rb&2pa)JTKm=TwFuvh% zu{>Z7(Uq7k#NGj;h1vuj+S;}cbdYy|3VH)e_#@^}Bc+$IGCpI4i!9ivyKx#CMaCoq&Il)3;ZiTPRg%T6k z2*iMr(*xs1@-$faV)8h81N`<1@IX}n#=qrJNGdA0s2B8;erzYeh*PE6!23x z{RGmW2h-_bO+RCV!&^qP>2iBZsXnqEb9xFx#O)C+VWc#m_3mCl2(i=5kPaZnB7~5M z-R%HbK7e2L4{Nnfu&E|+YFP*=*xdlE#R$vvd1a@j((b&K$Cv$)&r#~2g&2-aQ6H7*;WfQYOWA&1O zzNy(D!*phbIF>LxxA$tM158VpJ$|Jj(rBjG07j}i-Ms<{yrA8$LOv)mX#Kx)du_W2nfvXhPc#RI1KIi%d+^sW2Z``py*j&pD34(Z-aEd> zVClmh#@(^>Hkh3^kIK@=pT*KanK-L)Evq7+U4;>XOC#ut>*6FsIR2FP08ZNIjfZGY z+^0lcU&|k)n;~o+-4(Wuw5T!|3aCx(TCXU)qgsS|wr$y-|9*TiMw_vEdbjN3_SJ4` zj%92d-l(?O4^19!uVedgfxl<_WHCG$EQZ(o({*0`eXI)aN6k;9vcV7{o6Nq#CG_i% z+3Smo*Xxym$cwjEoBPM~802>UKp%tNb{(0wsA`AWIy$^N&gMD6Y4eGG%gJX^9QYip z)}_Mi2Za?^L|Y6<rmjU_385a%ln7&7?gMK_#T7swjO@S=cfqo z_8@;Y*-bx->?SCb3$T8Ul8fRCnyCq^CL@aCk~dCh7_IK`OW@OzT-3iLxaf{(^6|tG z^usV|cj%)N)LbYVeV>bXO;vbN?V{PzrhY&KV;^r6njA_YMtynK>IRpQE=j2q2UpxB z1_qFu`Wf(c;2qR0xR{}-YS$n}TMdjw#{d;#w?wCpdqHoM4nNHoybY+oG>>CK`->}e zY(DExX$wtsuA2;x64AQtz2ndmDEGnjgJFeNOm}K`JJ45$1F#=|$OLwT3NRt?iB|@f zV|g03cfb*Ms}XS`v6BO=6I@L+1}DQ2)^1VGs}#N0r-;%$8VwwacbGxAJU2jv5$UCx zVoxj>1;OO9ez0tS4O)%fsqti~M;Prx*BQnY@)kwLs5xp!Ov>(_nhoGOH|6riS_RBl zC7=aBZMI%_|Kp1VDhOdrv=cm0BLhqZ%$twa2q+v7PL1aY?9ssE$GB+ReLeeF@#YFT z>oBh9u%1T@#&$!TYC}*ao0hJE#RYmV0>^oQb)oW zW0|VJ9c;#7Y*^+Ey;{hWALAqN%5jij{ z=_}GspX>yGFv{atcPnNhk}ke)JbQC}?J^T)b_R;I;bdqqo4(^f>xFkHE1R(XAXvRg&EMHIroCHT;Gs$QOJD7oNg;cbRxr}|J!3dO$Y<63K6QafE>4_`h!jbKAMv0Btz_+wI&yd9neh!hseDZCSlMCOsJoz~)Pt21jwU9RMc4N1ygs_<;S{m70K*V}2W4>YEVf=8d zYaZT19G<916y^i#L`9ezCZ_roa6PJ#7cMiG|Ld3f!P^fj=s}0b)&Obg1jXIgg`}xNLZb|8w-xv(bRhN&8hKc zhD!I*`1Eu#Ak<~@EU@58KTbX9?vBr)0XaW2{*cHyY)?L~W*aq3wi}f#A&JVS=srqn z1%2@wO%<8soZjV{@5tTF^``55r7M{E;S@2?1N7XQQ~R$6*J-O{(C#Ki)doW}4jsTC ztW@sRr$LJ)IvBQ;6WKGuZlVv!!`+Z*49X)Wgi)^&t~L`*-f#(zu$(H=$RtF7R55c0 zqA}B0)vT07It03mO}kF4K%zB#1wa5EQ&h79d)XvpKv=f5@u<2no;M~qWpaY0sKp!( z=RE>HnGc{L-~$820Q_qFHC2Uh{)rHs6JZLHX^@jFkOXT7!~Ezjs6?zT`H!gu`7z-u z)d4+PT&5pdbj^&KVs8l9mVuR%yMxFoTGrLhANsRI@2LF^U=vAr8E!1FP~HrvZ~HB)VPh&oX% z(O_v8bxYPsK}Yo;;1Z%V5-MKz_0k~Hxoap$)Lj z9F;wyCCDDVEBRCCG$f}G-&@*21Ksq4{>ZTC-_(pW?&ko?{s~@vHO#Rlc)3)DuqSz` z!4`>~#^%#U(p*M_B8Gzj>PvrkTXXqy=?(8l<=C*S=9e>EJ~GBfuv}(461)pJY{#?n z?v_>40Q<8g_~Nr9c#@+`x#|zcM9v^f9H6dTX&w~>JZT;>egfz%^S~TWGOX8O*pbNl+G&_rvjMxJC%L?gDE=zYL5Y`33UB#E~g@AzK4}r8!g0 zogkud^(_ZdmF5+e2{H>gjnI}ojZC>C_zqi|k2kuA%;3`70TXI>Lp~<^14U$xRHa8$ zVZ;PxE;BX%AP(O!=VH;wTk~4$Nt_w@uW)A2=rXJ`3P1!^jjPLgq&o(4%(Ad|aYyPS z*6B8=wQrPFgB=%&6ukIXifKEpKKE(oev*S*;sqRp;LBtVWNxXIAx>A%VzU zMDCzDIL71%kJmT3oM=NbNz&LV%*}vWDtG3@B|O;OnPJ_MK`&)(o8h8bs{(0BsZj@m z3e5eq2l0hwc6?$nGhnJz-JHOM)QwCckQ$jsf)df9rb<@;HQuf(qjq%xfTiqIJy9l` z?bCeU%+C;KBtaZ7-Q^*rl*>hQC_^U)m8~onK!FIkqA7WsJ1mtW5Ij3TzJs$R%BLL{hN+)apU&n7Fc5{C7LI5IL!a+QTr8LgjX+*AKaK zJ;YijUbfQ;S#)XFXdn{wx)=`m<~Zn=7*V?Mr3aVyv4m2xFah0_0W(}@-K_%E7$VUD z%r`g)(G(QX?QL_!T@Q_?^+)79!_V=_!!UJE5_iS@79!H9?vv;Y@vGmqJN}T4so;pK zUe;jfr{21D%1_!IMWPCL%LPT_3~0PQMd_#&p>N#0rT)~QKuBvpz8Dc3W7);-#dk18alsuGLIOTGe_<$e5SQvqnt^tI^~3 zZL1nvY&d^3E{4#9jm>|hQ;c8`5Eo6|kX^$KECbde9`Y4yq~HipAIkL*ZH5&O(65>w zsmXk6FndfmfVAOdJZr`Z2>z-T8c|kR$A`AP#kXOg6}vc20$36(MbiNFJ|EyjP@S1T z1LhMOctLd_R}r;~*dGP;M@>k|#+bi-jSgY>fy%IsVTxf{+6`(@@=QHfeW{*;d>SVZ z>QHyx3%@dp}z^qfikG21jN^+bea@Q z`NoDv2EAD$qq?SQGzO-NVTP&yunlvHMjq#)W4^hmzGR%#f;j@u%s5rV8K(emh4vg zP3vdqK!=EWr;{f|U*%TRa)p3mj3!`d<=OdJ^lP*Y4nTwM)}XJ-2;d)0aFKE-#^0uLxa|dV7Ibfni+K|gywsHw$`a=0>YH;kxhdq84bhq z6o?75Lh)vnBn~8=qCfZWkTKO_SQbRG+eUoK=ukiiM3o4=afu1_{4n_ za8q3CKVfa}NtiHJ^0jh$20?3<>n$;52g^Sa2Tj#L)6}6Nbf=>eMUx`iL@_EhxdDQ9 zp`{vWuUq|!sK-ZvtHOn>1H44=28bV?g@l85V%j7~hhX6ujKDNO%fb&xN;+XcW;qz> zfyn}@M_SN0aT5fyW=FpctzNx7d%6Av6N2v@-y@Le?pns5BGcPr{P{Hcd5ak#AAN)b zPIYEQUAvJUuA#Mn|5QFuWFaN-)Fk&Ycp6zI2@(22OI4B}6mglBF59W8l2WIoqF-V8 zs~sU}r%(rBI9~fc0CG1$AJ(ev{)u-dtS@8J~H zgXx#lXfp*xR6WqOby*iF6GtnFqEijpt1DDnodp2KrFaO=04T!_1P+CzsA{!|PcSf} z_-M1`@>k0P19AgzN5LgM6}`T~Aod9CXh{L-K5ibHg3F`c0xol^L^9NE{p0$EOSBl5 zCS1WAdaJV=q}{!jjLZ$Dlh7mfL3FZ4ik)KiDN0$#*KX%O{sQ?W%x$1-T8)P?56F2=%y4288CyL$DVk227J%OHB;9Q zd`UH=CAHnkVxGvEpk<4)jsgB+fWbXbASJhCBbm6}bsMAT`;cTYQ?VCAy~ZOJ=4>tu z^ue(S`J*G@Ji)mKT^P$0ELd)S;Px@PO$aY~7}b;}-4YH$rvVIT?Qm)_0t@RgE{FX|JSmw?XrgqYKf-INq6ZwQI*uM< zc$)t#!#4z+HS-I-*C?FG4%#rk3dTnnn4pphzCfqy2CiY46!1}m*=5G`I-vPt#%oHJ zCaK>*d(^CT!>$NTx7CR6L&QNEDOSoOqSwjn62g|o_bQ!;2IAxHZfib>3n6ImlQ7ky zNWz`S0(1VWXRxT`$D@wBgaHi2>SPLG-gKn91qjBm2z<-w%_>qdVc>W76Bw~V6k9z3 zLv#RUepq6kF-EB{)TgsVh=9tZ7J+0c+K`2l!t@VVX989*@6oM4g&A&hILs@)l@K}9 zbvq^RV>tem@;Xh`1 zm{LipFqRNo6ea`8!7-q2t+)e7AUkeJ75GK0yX!sNp0#}l zm^j;jw(hQKRyEt;H`=w^XZTQ4I@UxhPt9(*hBQ#EV@k6x2jetJlYydFwm)Y)TPVODq&Qb<~TPBtTn%#n;BTL zxm1ItaVQ|1NnkW#tYQU>)kgJ1YDbV=QKRXK2oeww01;%fBP>`zb9XDMn(YjOZdJ`~ zXw{vz-mm%t53Nc{?{6g-1OiTwYtkT6OvGbIfT!#``XLyB90@25x7D3>j?!`WBWTD6 z{PlcvoeK`6BwnBftTseCX)@-`2j;J~0k>9zU1`>QDBfv{6g6g&fEU3LcJA%0BCv&o z2@*H(+pj53Py;|_X9ma$naZF59VUPtb#2(PAQHa;7<#`8@}dettezEA8As~V*aV8N9fO2(8gP1`=vuDAc3_4VqC_Hl5Bv+Iy@<78k zf(OZY&O#K16H^7jPLxPi1QQ6e)I(3d10X^!H8i21bE`g+F}YVCpCz?cUqB-Q$Yd5T zc4)^WU3$zP*Z(z^BTMY?U6zPNCHcXvou)baVlbisdBLrpz`igvGUtr}fF~;o}deAY7c~Hbu<&+IiaTc|#UdZl;AGR%_IX)GCej zQQg2;jFy@;wtZ48HU^?kXfDeOZFVRiLK+^T6-@xjx^n~5$@31KWaMt0$sY`l5;TQR ze8IaBHVNelH34XVy%+bW{0Vs+Cf@&1XB3%PWBs2^A zN{YGd5~c`oG*_~joiI`N z|BB=f{5w9~L?Cp};(EaW*`;`6=S_|@`Yvu_C*83a=p;W9xM)I#Ok2Tpvyp-wDvm`@ zuz?L}plRSi6fxAC_yzF;qPEv@mR4z%DfR%XMv z%8$a{b{}}mUpGkrZ49SU-uQdTYFl=)bjQg_;us*Z>S}l}&ApxoK-p!Jn?xy{-!_S2 ztm;t<$bH+i#O_b=6L^x@&W#pDr}1dhX0SM8$9YP`0Atu4Gg^PPmPcwc5yVpp+8E`2 zv8&5=Z*Z_4RFPJuRdZVg(kY$9tw=SjA3|v1B#|5<LCPIKK`jZ>k!F(*PGv}vrkGU^JNDMvYq|k09sHu5x-4-{ zp}L?`>#m!Ng1TMjOTj2^U~V1GsIby*z}2_dUoscIMVOG?t(%3mTUFjTdYepdD)}WfI31y9E~gNS*TFA}y1}vsYi?Z8JuL3mwa= zF%(3a(hkO8Edd?yAl$0p8`MHhl;F~^W_w&YW65c%kO`;0K+26K=(P?&nwP*b`X=Vd z#O9@Zk@QPFV@=7jU)xz00$NcOQ|cI47=>w&%sKrdk7%p*w$Lps0^jO2&_@TNi(!k_ z)yME_bY6tvIMEG+XqI%y%P}FS8&=(jzz+>Y)w_l^u}L~ruwhTS-bvL=m}|T>p?MQS zGI&?jF{_%#CCFs?-epj0yN$n)aZaGCu*K@b?e-eAGsTw{``o==j|m01%;zWFJpZHB#7k0spg6q)1$^n zBcuq7OM_Dmgu$!rdjPY&5Jk?O8t zKns+VxYJ27aTPV=)pw8iggJrR8+DkG>MTM`sZbyTXm*S|q{AbWB^k|_xHAp0z67-c z`?=O*!N(0Uz%}dyMP|e63eXx}0Gzt=VRCdgen>SrO*HtiFiZ=s3bAGqVet4d9cckrz<-JZv`7a=-76P#jU@5do;{8!)xbgn9o~l zp+WC5Tc#T=50gi|4je}+R8FCm=5*8Uz25x?ilv;-{I0vtb$eEMhiqr1d;}A-5=vZz zs*@PWCAXWKTWB$l{Hs4vbIVH~-`x6UY>lO@VeCApertNHj8OD(#uq6*sTv ziJP11n0yM}`JR8(0vjvnb%7nA91smNn*y?Tmt?Q`x7oSJUdS{5q9dkUu6@39?{_}0 zHt?L`>%a|z#f7&I9;xt#f585xo4Vm@`(F$kCJlbWf7`;|ET+FYq25Q8oLj?5lD9YQ zd40jUsvGhk1hhQ8TyhNQgW`Emf{8P$x=-&p$>(Q~^p@)AM;$}e)z5>DqSq^qz1w+y zi=ua)dswDNIxSep_i;ksCL(MJeVZfpXoN1F5!7dylNiqT9 z$w%?)07b>cZ6?hVRn*SLJ*Kx*KHXO)sD!yw3OY|p zsimpWboa#=QF|zt#Ts~B(ezB#M-Q4!*F!C)s7tOVfKN{O)HM}g>B$H$!f3igk0Yq2 zLlz*HhH9iyeyu4?-%!-xk$q)9))j5 z!#)Iqrj)m%k`1v_-8_SBVQ}=)_n}s%X>`=du0goxP&>JA#aUnslxHl}afJd3H6+fuXI2hn z9t4VT6DWF#jD-|Xy1M`cH95{i2ZGcg!y`b{;)Ci(>W+kS@Wt!72Xc6y2R4b?uDUQW zH)b*fIMkhEXqa)vw`54>t`Ki_wBmtEwz{#^(wIph+j}xd=w3E=WM)vEfviqRM(fH0 zqmZc3gzD6qfz6X-JV)+h_4e}Ny##+%v9;~tj)>Yrbk)`wyOMURqwdFXK5q>jz6#L8 z<)c%W&6Ff$I0UF|W)Mi8WHyf^YIpfFnO~|m*vb9A(U2)rmO65+Q{Vhp z*5$$$=p|ekowE3sQ75jc!xIBgZ&D*14yMKyJ2+$M15PeDw>C4( zvu?~H{P6`IM}W&Z2uEl06V+Etb+!{F5;2>?fGk;GHIV^~B04auP49*oxP`LHt+(_f zw}2<57-*HYenw))s5PB&O_uqNHc{93li@Df9QfevPW8fQ8XCV{$BL)4Y%AmK{?bao zf#4DxF6HQ}z{9-22_Q!O06JIWYxVZ~b<_`yOLp1o%*#i$hVN6d&yG&-s69Eae0fLj z-qaD}J9>s1?&{rUy-JGN4U^#cea}`OHncjw=9K$4x9i+oEKh%8>x4fWTO4kcZ3gu* z-q&ek8Q;g%ts8T^Q@6I(|Bkx#dCX6xVn&E?I-Fl44iUPr2N16_9R17jt8h31Pdbq* z--fRUz7smd!{my6g|4AINU?34MYsdfbm@c{y&yIYc9zMbr?^c{mF-%7l30GZdb56i z8`0LQS9fqc`u;(lw|Trxea)Hl=R?1(LjC~y-B^vYt$dX<+hM~s@Xtld&s(;qJVSrH z#w)T$IYuzCe7FAL6UF%up`gef_frT(+f5=A6PTe-5}{sRTzr3abou?RWe?adPhY4WFKU)s7gAn(1{G+_>2Dv659-J-9pSP^cC7;>Kpg+O7^3c_pOUaUXldS=< zDzQT*a|AtBpx(Rgz6zr*rF6L@u}Ij=*yz2c1!-8OV!`!dYM>op)lE$AXr@QqS8=#$ zD-K?xPoX4KZBG(UH#pG_UcKcs_gfPB^5|-H`-uf_KY4X@jbr3)xekAR6%^l<$92H^ z?#AXF&$}~}eXzUa?!8vae%Sq)YjueFYO|<*yJka`nDxD!RcExBKPH2tVrFOZF+zQe z1u+1}+h3G#W5sb{@Ta>oT!ys9RCXs`_6WqXW{VH({QO#cz4CXFR)7Q&E@HGbr9R)5yalj(6$5HKg71HFcp8;-2lAf59#VnJNxj5 zQh+{#KYZTO680`2=!?;8JQ-tM8y%CEWFVGEx&L0d=lx3=*MHP&Eo(mA7Sc2C$$eI| zC5uXUl0wO5VJEIWhHxlGx^-Ke{C5I1xdDOfM89IaP z6hKpVaLDp|Vo&P@EDEc_w_c$9rIUP`;XX;py1rO`e_LQ~R!cp4H<%T*{q*_+S-U!4 zUcP^GwL1P)gy@Gva^D`icZRnQk(7q_8AS4V=_6w^rEzVuqz5;W4ykelikZd{Tm_B4 z7^{~YI?$1oprn|LSd8KyBv0L`%`NnQvFN~0`i8VZbQsL;Xq!J+G|5acn`4X|jC-EC z>ULuuh1NLfA-M1AB~C@lj+beORgP)4{y-*OvpBq~S=VVX4i~>?IHrW%M8o|%Azp2oge->JbR{W`%53`Ixfx3lrwT_w2tdTwF zq~VTbEZvMYB>8Dv33RjN#EhA)-naRvZley>AljVWH$qgHTO;IP8*#vm6#cV5@SLyk z@}#BetIb@1drlhxDQ9N5saYdL<*d~^(7a}?kiRCap~vpj0sU^y8nQ42nX_AenBg{} zhN}gH4i@#YyK9iKYaMkIZFYA>E4rmE5_&ODm#*dke_2Bau`ZGZm0hSqtR!lNTHD;> zEX(aDiI-jOzSU4}`-y%59m}l?Zwr>?$q^ef?)K){+sivv-rLL5+a-?9mjt^XL+ac# zyamGNsA;=~U8knq8S_38=z+Y6{mi(}-N6y-1EmJ5!-HFJ6Bu~XegXN*ULhOUC{tef zw2T^lPyD35;Lcn+-|^8kD~r^ie3!>OtN$>iV3}xheoAbINGY7tP$|J_?J;O$cumzh z*{=CUwXup-30x+W;Fp@{In}hDca`xTM&6vB2 zoZv7tF2B9|3^VZVv-^?r*Nu@ZFWCk4>R@?vd3>9m&MwYZcihTsi+r{^zvEe6EicZ_ zR+q~s67Jw-3EN5bWKP-agN>EY`YH@JFf5H=jst`Q%<|8?x|g zPNuxlMZ(7XBEQ6QG&RFahcsgaFQvDTQyyzRLCUOyXDt*S7XRjT%qUi|_$gK7uN%XY z&mkp3t9VlI68NJ_ligKFXTZWjsJqxOD-L<(+WBmD@2gy3Goiw;Jt_Gaa)hychEbpy zwd*|5QpASD`)=-UYtwb~Cc7Z8N#dOl7NRkH_pQniC*_!Vf#ykdWIS`lKQf$C;M2Sq zTO8a<4h*JWKzP1dVQJl9yl#3nZM^m1DMcN3U78;YI^Hq#O?7-%Ht<6Fe)6`=>F+h(yF6puEM9iu;uj9%e2d_+;AI;Z1B)>fcl6PCzU?a22L*CZk~uZ*!7X^fpGWfY8l^WBi!dX$yg3eRvAVj zc`sP{__xU3NVXxaCqmg|3gSq|*n=;Vp+@|Or55CUY&_u&mpEDq*)^DWdD_aL#j%Qn z@8G4xmhge&i_=@pY7KV{Sde{Eccj>v_03WVv*+O6sA8~J90pv?32b7x!Hes4z43gn z{CC18Mg-*ROCISibDLzY_>zRjWaYTd(UpRP_1$ZL6>Ycr0V5|tWn|2NM7!y5y2Qhb z(D4V84Wp8b08BuwJ*qZ^ABr+za4{j;nu{@qXz6RW4kBzWN}citTX4>w`X&{)6kW=6 zV=)F{mJrKBvYFHr=OQUH>?O*eSo4wuBA(TIFZ5yt9PMpBtgrmd)`3`j3-UC}#52{W zf9-y)(K)RVwUmTIw9WeOgqPRA>8_RU?odcmCdYhJ235T&y_O0}uid0Jgl*G@Pb{6n zx;uHg+uBBbx7w}`?rRgg`m?tQm;8m>+)A2ViG9Crej}C4W_sxE-b#N7HQ;njm}2$A z9o_sDk8djj#}~`DAL{Vy)6JbP- zWF45Z+8FiM4NW!k7c~={?;cuzi{PjlY^N;b1Caz&x*bm@$aXm zdyD=8G{SCiXQ$_P7ebH`xVgAXCCjrrO0_ob(fRQKew#<3fzQY9-351@SLul3gIO=M zL$>>%c&Wml5!x7h-g)RqOATFc^doMij~cpua=%;Y$dqB*Yxn49{otTRb9YA0j5PhphOesx1rI`6bB2FV+RWL@0@4k!|lUYVwRc zoY~CO@+!r0yRH;pm|Wh(6Yz(Lk2Mz=q_AKW3ob85rE&tuEJjsdCGXSWrviTZwM5jcu4P|&N7V{BE@JVw2Mi2Z@i@ukcY}0;- zh2DJpOL)~z&(L-6xY6F6F0V*|xcl_v;_Bkgv)7kLZ%$5^kCG{SGtS3Wkhe~3P^eQN z-Z+{a?AnJ>ez^SjQ+;utcOtPKw|1IOHiGv)i`UsthD-j{ns>M5tJ4|U-&*pX$8q7^ ze3V;C6?5YP=9?Ao_zALReTb6+0?;eRzp&bE0UR7W-YMq&ClSWI$o~r{#4d)pJi_w3 zx4}QR=)Nz*f7`@V3c5e|$yhf{(K{Aa5~F1aOdWqXeUD$m+R4g_Kl_7zzz-NDFe zX%C%-z*_}=y(rBBpJH?aBd1L}u(Yz)x~g;)<+s{GHbfYwu}}Jb^9emGqZp<9qvP7# z9gN29$9uN9GZ;i2Jb~1m@C1FJ_rT|qtNdthvE=E1dwI+V#*r%RN$6rr{aLbNIeA34 z{@?_j#L$$NH^^71*2Nk!=~6qugve6#&Y)V84Yb`| zS8ENU17V>+u(3egFyvM{#xMaF6kJ2H_hi|T0vmwe`IEA~%^+JtL{$Un2A121#KhL9 zZh__A`81|n_1;2(Cn*NLC!8@8NYonD__ zz3;^S)`4BSuKYk^{Z=>JZp5<9v)@_JIsCj8oh%Q}{sx@hDfeNqH))P+c+mbD3}vbF zWMC>a@e$%!3wDYi9`BO7{B6SJ7t{V!6k}j_%HO@ZU2S)CTP0+#PC~z^i&)^W@1_mr zntP%w2;~K9y;T)0z`rL+3d=jG(%1@Dr+34>o8`&s_$_|NCqX3l{(*Y#7v(1MH7ZKyb4oU!YSCSv)5jf4`Q%>5 zQc)jzd@!^v@N5K`#s~A;@PZD^&uQoDqA|7_}R(R+p@H!6Wo_ui|>oHYXSF{%ZaH&56&hF5j-o zZq4(*WDB%=9{+c5PnX~S_oT~w@Im)x_~ENR{+qwLQ`IYM`9IL5ZC_d!PZj5p*$3Ns ze|EOIIyyeOI@&2rajWd@G*tP(T(nuDQ-yWaVCCoI3+yg4FolzrhooUzr}OETNO?!7u%Z&nd3tqaeBv3rm8 z&G~C;xtR+(MRL+#u8%gGKd#oR^Xv_aF0Y^ZxAR z#roiQ^=fmtxqkf(|9VH4r$+}Tr^m;u^KYNo%Cp|)>iv54?Xx!*Dv}rHU-yn)50s(tSEpC&)pxDXH_z+#i*Mc>U7hp@nXSKl_7{WI z@od`PLcphA_pXmFe|vzT0LpM4S}XIrXFZyIf&NF}tOt7^c&Cg1sV4lKxXvlctazV!me zhSNMpcyUc$RRaK<&2w2Jfan^j#7eaiT*`)-xTv8z6DM-R6X)G^C z%r-A;W`2D3-8augZ4m!?5z0LjbG*7fJ!0?3%d3Zp=BC{Jbi)}K%kk{vbTfo*s!XFB z@P&ga!8?v?C2Si28Ju`i^R59@kSORdhxpRNkLacrman#r$P+eOJz z{nnRGIeX+~(wiBdQ~!XV-98Y1w_@$nPe8lM+z;v5%a^0!4UhhSLydrRmFXZ2J>wp9 zE6Ih-X3W~kASx^cvIDX8A+kTDzntUAlgZSfb4-m~D|pQ*1}y7jjU%K-_)#47*p!L; zzX=#X=QSy-CfDPg_AE*)WXfO|aLsY9l;P|PA)7L?3mW0106St03)fIW9-_r48<2U1 zJbh(ZA1IPmI2e`dK4bs_h1$X?ipdN;ImwYwgfVbE1;^;Z$QfqeXMV>l;m)-3yT~D* zp3xJgO35iF3sS~|7GSte^1_T%cWa}J>jik50WCQ7Ll%PT%_uh4EZ75H00z?{o&jEX zNFLwiWaR9h%+VigoyThrK%BtNZH)(6!U@iKgbT>ak_V?_&Y_>&hmCq7DxeVciHcJ< zlSc>WDh?C<5R`Ms9AReXfv&TGH5BNA>nwq#jGay;unCHB#upF#V#c8w0KkdMu5&ql zyun-mA#ZqJ4LMtZGKcEWKnbmJ<~+=-NXN6K3i4jjb-w2S7Df?xdAd#Z@Pas5qzg|@ zk1`vc_$=uL8zFR)hcipTMk$s#0ay$-L{7diHB82w8A)v?Oa}Bw4ggYh1nSSnv&h-7 zMh_=pARb!-DB5gr?I9bCJviY4WS$hMa1Nbs9YkdcJ2=dz~XK2 zgJr7y&>YSn3x&}js<9r- z$T^yfTK&2oqRBCOC?9cxZgB*cLYo{6Swz>NR$oVLdBCX302n+53Q5b#?doaB#O z%Tqivj-Vr4O3ozTu4|Y^96Azz7y)<%SJI2alkQsbWtL4k3&`q)C8~=H~_S$4D1=C_7BR6 zk74QR474=B&CJk(v3Q@rK+z5E&TsJ(ITE@Fd>eRhowu~fXhTf2+^$gv!Ux^0z4O`x+oDjUD=NY_RH%=K0YhOF5F@fWpu#_t$dtoPZD+d z?Fi3+os%q3+0aldq962{K{`H*(_al#|$k)1N zX+5q%(Pb7K6po(2!GiU|F}{*Q7KKCU1QFzBPA^nSn;Ckn3xaZaTv~=^qr(lhO4E$&%aN&-!>T z1@+Y$ch%*?aIZ2SfqH*BI$nMp>YRo27i_3OnFe)|+<^q3^L#(XszSq&_WrVGXD)d; z(UkX*L<+yG%e>y?2?;xv^_Mca){g6QD6*44U4BcC#}vHAY}8}$7LT^bho*lZlVdi8)qW0u*lOh*Gi z3~YpL&tV;~1-U4_jt@eeB$psPGb9g=2E$q`E+cp-sFvcjyo^F1`Mjpqq=GPKK*%+W z9K%G`sZ^i9O}v5+ViQ<3;+tPjP?Lj6CJT5MzY{o|?94{_OmWx@@2JnHNm}lT%pund zMb(49{jh&bKdxsq?Y`2!_nIz=DLg~+N|z`lbqya^8RA(fIiAVJkfN!fRoq-_rrXt+ z;b?@`jK@L=qyoi}fV{V7aRo%}_Zl$F=J+(whO8@k`Pgl<1r?HG7Tpr%k@G|sIjvIr z1i7MP3z@BC_gY~<4UQx_^bn^2+5k+SDKjkMH4Fq}70&^lnjy!!sS(<&#tXmEHrZXv z$Bwu^%CGf?K7EpF;zeA?r4;qJxj#gTxI!4TJ_&|P{nU&@$O#}^<&+8ZMU+*JBjw4Q zCk$88o>7Dmm}){lMF8hWap~M;`P>&mci-6FM1$vWw(^q&&1)mb*aLg$yvZ& z9Ex~`g>P>;+JPrd4$p;x-YKr5T=U#(b|SZ;h{zEEY=MS-^RpZCd6F}jo(pc>CNgYEQRE$r^7N4rjS4Z^5dLF?0irL*8$I& z34SG3W`o}$xSHAEn!TI-GJut)7JQcpw}o=L#cLJ!A#aLV0CvjaLP=i>D+}(?@#D6E zb{#*P;_ypC9Q`P#7d@sYSpKww&I+}vsx+O|vx1c^WzWIboD7w{urG;?N{i&&ma42& z-|DbsUV<~T-~;Y9-jiL!7dl92Xg1r=q_`psLCWw?7!_Tq`x*Igc{Eu)z{uw?@+#99 zxyM-m8fYKRL7&+HGou*=SqITBCm9*XVXJ_T*$fuT47@c<1Il3=*~KlRY1dQ!dHs>O zgBi|~Xzfwiv{|M%r-eEXlJcS-Goh%}y_9b}Y@gW|1cSrGR^|L-xvC437h;tu##}3| z%l!nX#Lm*wOpXWJ;8Z-qe1(w8sT(7Nb3z1UT-yDZrkpJYY&}xbbHrf>PDQywMu=3e zC3?035e!U`tuEF`CJcJ6;q-X!@cqNJ@g>l+@WdECo;DzHOT^>wHE??uMj!Y4zQYH( zIpWy32la}s)JHIKay*(&Kd$I;-sN8mQ>I~LRM!cThrQYbgEE2s12LDgg9`i#RW7IS zSYFktlJN6U>`Fi297P74Ph&^1*_t1hPbs`FauC@oSLS#{ON(Xtg1EHiavq~p`q)zZ zo5w*GH`6qyIYjQbV7_7LA|ePbMTc{6I^JR%h^vUJV$tanUO*m%d-a1E#kgw3+KbGl zZF0B_*Zqv3A`^p%;EJCN%JEV)mNFDaV^9$niA~xLwQOt-OoY8hC{JV3;_MXA>ES4P znTOo^K`Y)aJr~)^0*-Pb<$4q@!E>u`eZ|KnJVZJ|R;gYUF<{i}S3pq0OEnP{8(9jX zfLC)akvkLlcR!LK?=X>N+-m-6GbJJte6nUdYW%v6U180oCkFGI0)r@^sXSHbfTnI} zmQT=qxWN#oNA>)^W*C7cF64+Jf#Un`CB@8tu*RT^J6F?c_pI(m$c|}2>A22hg z2|0_ZEbqfEq$q{r5dz8JoG2q$*TqfyD#1AB9Ue*s5Y+9IS`l=@hwF)cPEJIj2ZF;! z_155E%yqgU{?bvn10z?Lcl!z+Kw6BUzo%elyR0`XH-3CyqaV97+jNcTp?&Ek3DT7d(jLiJBkN; z5ot7=&-tRvXy}HrmT;GOXg*X!odP-hjcY(XnJ z_B3tt?u_4^cW77<5Tnp(jJP56K?9St%2adRO(big0U!l6Ul^4q)YC~=m0U__#jug7 zaLHT)S-*F=2c=jy%eA%rM;V zOb2#Bn+_rta#`!0z%fO)cI|wKmHgSxNajA=d10m@+Cl6L4ow=~ao~PYnAN&r~lAGom#0xWaj;o z2t9ha@p{ybu$XcJ5D=7QR$vLz+_?rwpj1?9!Bf}3dtz3>Y{m|d$OY@fZ%YeEIyUrz zAB+bInov#Iu90AX58%c_!%5xS>tup3b#w3vgpF&4OFKQgM))iSKfX{#DeMUPh#oU_ zdMX%&N$TjRYkz0xRhVk^gbFQ_Ur1QJD35|piHUoFVP0>X{r0Hps~0n)ax;nf28@hy zJ7g-j&hSwK2>hs2us)G-I-sp2-ilylH<8(KZ8-xUVt3+{<@Vwgo!S;VNp;4X zrbcY?N)~Di(_#+L+S07mIh05Zg5dQot+sMe0$8tnV=_Kq4qaRxlkUmBdJl^7cU`gj zQJ3_C$>QY$sB0EX73xq|raNNBnQ#Ug{7GolBqs0-fO&;NCsTy(6QUXeLy#mfp9zr~ z@-7E6%u)>@kA8`Wj|v$-(Ii+{O0?I=YB2=pg#(lckszyXG0zR|edtKIS-1G>A(m^bktN=WI^j}<#HHPHok_LDmzoP;>kNColD~fFA4~WzCN?o&=lDczz=RI+s>HmV>hN;6S8qkH`mp? z9(;x*r;NefFQKjKT0@FD+K=Y4C|^}<#(0hS$nD!`30DTAh@y>a6=H-RGg1r($R64z z4u{CcYs0M6HHuIRsv4$XVjzSHy7DG!R&$EQS~Y>kX3_%NyLHz}IH6$ej39QQ*E|WM z0PmFfj8Fp$SEeoT4I(&V%VS*VxF1`vD^k~yrMyYoZeP#1V!(oE;4ATh(tC2FQl;{p z3cGXw>cu5|DnsSkN@+ycnpZ04+W3TFOe z=2z6epV)6{z_XZV8Q&xo<-*S&Z^fp*O8kiWvXu%d>F=1Ezx<*}{joJR$ zG?4@`2ZL*2iL)D(Qj(ZMuFzMvIX*T`Y^PDga& z^gfYb283ccU6XT&z>EuV4b*mGaX+WJ)AisNRQLj(0PTnF$9*X!? znLE?j@{y4PXqQ-G@Yg~%+-M?Mf?JRXBY^i}(}ULdB(;i5Be$1fp^6E5pR-fznxqhF z<5^|}6AqZ7WD2m5t3$7>pmDMckoOW1Q9EdUdo8n;GcCeo%bjLbH&?Uxr?O)r^dm1D zM=RdFo=3&y2{Tx2aw6odYk8%t3aupz?QmX3P5zv{@De9WI_{`g z2f*VHblAV!VM5$oyXz!XQg{(@A1)Y$NXSI#IWzpP8sU=Osv;%(BdLW()6}x`BPQ415h{MbZY7 zDFh94(j@|VlnONB7X!NaKr!J6s}@;k@KDpf1}W6(e#9NHrZsP)LWcy+&=PGK^Ee1Y z$W|a^UZ$1)9@$Kgs{sSR!cCct_;9D$Hwmp6w27)cMTvpymd#tfnRuIh?x+3|)1}PF zLy>cBWy}I_OnAC{d|Yy$1+Pq!Q&Yj=U`wl?+TeguEA?X|)zOt`1>dP>nP{*RsS}IS zAH1<#>y2_=Z?2mQAV?5P$&^B>0Yp?EobmiaF(qY3jJpQ#V} zvHBSd38Yj=SjDh(#w0LI;=!mrsVbSFuH!?pr@_{!qm?M!kKJwhA>f9j(3$kj4uJ{t z%ItETphg@V2C0#d@xWqVi@*>veNI+`Af=63z5$=$I$X)ryc)ZFQ-mQS!Y7a=IoTf2 zlWSBVd4XyP<`B{k1+}gX^_OFcB-1pKXj8fSl@c(U06%~V_eek%7Nj4h;<1fVIf!N- zgX(nocMl6N3fxafv(?Mv{sVDN)@704oC z)M?o02tNRrSNzROkwFF;|dXz_-efPhIPe1|j-MAFQ-g6X4;KX}vt3<_L({ z^4`i)Bv@yelAJ-^M#&UGYtSo zJi$dGh!B;PiXK(+ZYAXF^Z}uqesW1I5*=UUNuPO+pyk>g26~jiqrr34+qA-S9Z~@e z*X0`?L<_Hyqll+*zN%bgWAwHdF_GVC#JT<#+D$Stu*z7%WJ27Ik+0li#wm18sDkTp ztjLPjO+EApnc`pyP=>Ufemm`QlL8RTAna$5dZZ=?6XZxUwP>e0U2hAlMyYJq^3z~k zQvuTlYwHGJ>)=sjIIU{~)yFjr;RbvgEiw(yf&heX`79h9vyj<|TeZz;U}$zAbvd3% zdf)m{>aAV^;sdeQ@SNJ4os#9c4ezKXz!lpFxRTcoRnXJIr%DA^&%TYvL1X<(&j z*R%|3-Iy^TP|ALdW7l`zN3BZ_*v&A#i92#Z0x6TncIUQOloJiLNLfZBRoL@lPPFC+ z!Pn|1vWhar%#ca3>k}l{;wK-FPy%AqkP6;*ESrn-*k*78=IpwgiUE{U7LD2ulI~>69M|Oo37ymmro!IJp(qY9 zDmPpxhe=Qrz~!CSu*yQTkV}O+)X~NKM0kqTfTs?ME{Sk~a|QI(q&jq*lIEdihNgwx z8Wm8yZWCD?HpSt~e#8-BLQsE%S!WK+@yAI$A~@`62a(8!~oMh3sMG-0^zjlcq%3eTK{L5JU;559Sj%7Gh#h>t+#h zm=`VboJA+}s?bv7l8UqPpmf`a)GY48O>NXlce!3$*pEd?h2!JM7y{v5#}ya?R)y>2 zYZB`7l^#U6{pM^`EMlYM}~oE(!z z(4n5fv7)5H*fLZl1GQHPeIA!%X$D0eI56yCAQ=`Hl1lPIY&U$8;W!KYU1-0^d7PC~ zw{#`sdjp*EkVfwqMQAXb5ScQ+*6T5Kpp98la1P=tG@Cra(rcn{)Rduk30MTI>by`d zXaSV~GwiM&)x07u1zOE_W;aS(FsL9@sYq20ekr)q`;IPy==omnDPXd~MWz{gv8PR` zQ3bJ-Q@#tF!L@XF=Y%a4< zamw~$oM2|@Cj3&U)Lmi5cRTP)(2MsGQ;v|=rLAU!_3{-E#NGp4gs%Z8ZXCMqbd zQG7D>W!elQiX|>#Ab~OtuEAKY3!ylB$LFQqhjr9*=UVNT;x&tH!ehi0@}!m^k2=&A zNm2>v8de))udZiV>mED;vW!>`vmJLBca2-vg=~pr!HGdBBFg)j-anlER9dGc?ik;? zj^l)j0)dYKmIO<6djgK!i4K*7z<4+V6?6bVL&xHa5bmhFXbZw184g_N6~w$i3Jd(G zPh7?5BpUtanIb6RbZs5 z99hnsSsv{CxXD$IEB{Ydc+TH;#b5rP09}$Cr&1BaV{*V-)|K$Nv0iY+e@+?`>0L_H z)1BZK)4dyzV4oCO_D=lEJG{2L{@WKI3VlcC5(f^9GZ<-NH#4%za@FIy7q=eR$yJr8 zr#4QYL+(FU?$I&PN%8I#|IDMnmT!06U#F*@TCVPL@s{T4Xl)SAJJQXgpo(+BZTqA4eiC zVE2Rm2|LW19b%xB>8bcEO!rKZJv%!6i4<8&+=pUxP$@w4nE6I!7DogTBQl^{^2e*(U$;_r z-D1417rVclvXrVU0z0Z#)Z2GrDUpe)_;vM9TG{<2XR61^72>4W2xF=3m2f|B zJvONYF~JNFmg1(uA-QJG`NR(!jFp7LO2cmX2r&ma5b_0hFyQ2+W1xgmQ`hx2ziB?kO?4sye%r7E8G)+SVxWfGVA99FnxJ2jlhR0M6J$$r?CEKvOdG1)`IO!;@P}!#)n!4ZBM{ z3|C9s(+@ZlnLd4wUxocdTSuW*GjrcC^Fwki_v1QcfV0T~rjoQJrKpO$fl~rXbQa7m z1W&FZ{n{SQ=dBF#g75Z&^wrVpyFkVxw!71uCGH!Sn;{F%`20A!vk5}Eg`2>2dNFGt zI8YWBYks9A(>C(Ey{-ixu=mw#MWN&*Q^L zvSIc{4e#-gQLQ?KLWr~dfE|FZm(j4*dL(eEOnU92E=9@89X-es|I#zhv-HZR+dIGV z$?iO4xt~@F8sgz(&A$WwnO9T`XMPL2`9W4=iF;5dn8TJ3 zOfQ6q{9ybZ(ttd7ClCKmva)j0;~Y@c0b}0u*gK*=6OTGzCGpY;kt`wKl09H|=TB(E zKCfjD{My$FA@j?%hu`IiZRjo3N4WE<9^+Nu+p33-vYCvZCO+;pDy-?Wa6@!S-YDF= z-?o5&gaIft*iZ7n#%e337Tw?MPsn+UFvK>ok2jUqb!&o=Wety1qT5w*giFEx6N9 z>tk*^h}Ye%5qvObKLrnUtAL!}S|aRzc>y_31bHA%%cNJwLOxS)$P(=z>ky;~Wweh3YZb7X>jSL*m?I0i7k8c0g{hJUTBch~5M zlM|}rPliOfDq&-m@b8a^O$=xx98Q0ZJQsIUY7XS%w*X}ID!Bc z2z0Q)QE;q^#H#alz*))T*y*T?gzj&Ggb?RG7qHjCG^YVj)ne&P1$&1efAQ zcIz9g4BqL`tmQsIBF-6KX0a2!A;}Jj4Nt{EP}lxu4=L;naEi7VRGI~0VBa`MXo{nU z)TiM3xfD08mX)wY1)!X2H69;$P~GGY&I?LT_ms^i7o02cAmUi!KE%NT2GWx@kmP?l zsbzo_f(kzxuInLwL?22xy~Q;>13E0sgEDeCU7Mc2r-F9wG13qA)Drjg6eNogM>=Xm zbJGvQjB$UJQ-%3$s}SZ&P6EvS;;sV!6MW@$NF<9nCb(*0qf8TMR*teH;c%@hX;urz z%{8Ey^F^wPUvTMLZ zW7j7@kC?%2iZ^X&(m)c*@-q*~Ec7%)QJ@1eHtq%8`z$i^j~!@R9#=v|Y#r6ul&$YF zxiCii!Z_ItfL_$@s})Ui^h5cpBl4ZWKznURTQX-jD2%h<(iP%uy+{rD1YqdmCw_jA zzf^@yUrlH2jKC1w-9MHgOs<90u8`YWF7_!5JzMpp0-8yqm9OU=mQq1DmHOl)kuep; z*33?$8~a&(u&4zdXc~b3N==KXPRE~P&>vSSy2G;{BU9aDSY5t}TB!Pz7vc zLcNp`50%0>Q4;q9&v2q3SBJdm!|r>ofw^V|+7H%_UX=QYL&aBl;KTf*e%Y!B{ksYOAcCc^%&+}N2rZyhLj^%}@ z15hMTsnq-y|L;uS_cWWXQV^@S3I{i+Kq}vDOvMhw07ozrT=t{qGeQ4*e&Zn!3_OdFf9`9VY>Zqui z{xyeGfZ8Ry8*XkSxMTrNFFM&=S;$M}E}QrAQ;&1y;}q%&bbsrqpZM?ow$MGL38oI; z0@dOy?xFSPdQatRd(Pb*gs18qgzrk-gY$TTvZ^d*bk;D|vac<;zQGdK=Wve41&2a_lnpHn$N2ltA9;)1(7 zajDAc-vrgQGbgpy9V}q`rue%$jvxuQ)v51vge8v1HpP{b$x0XG`kbG+Hn>Jn@WFEVe9c^lNT-b@S6cufq6Vs4Q=*z8>ri ztBbr$qI(>c{$W+lUhV(x@5gFmqFZOu7bdqGi8IBQ?f0XDvFePb15El;qp5GZw$qzd z*trZK0-~yd+_M{KY~f%ByPc*X_S|i%zWc2zQp$&&^IWmpc;w6y#;w7L_-kU44siG}eW-qm=o!9m-aB^JT zJUeov|#c#9i1*-_={nPk2XZyH`Cczu+D14AzPkGeR-L#x>d@4kUo!x|_Prufc%s ziA;nt`E{+l-_Rv*5Q@?Vu?W6jnUIYqwepL5BxsTWm&)Z2_p279q7q<@&`(OUS zfBNtK_MiObH~#z2I6Ullb#`&E`r&GId49A$;Df`HtF!et|M>V~dBy(IJ?}VTsQa@z zI{q#PmbG)Ye!skU!RcwegC1ww^|;$fRP!XcZ#=WE$Kg1ao7L5~&)#0WI+$~6*Uc*r zxc&B-tK#2WcwUjZ%Ich=Ig{*Lk0@HM4s!EV@ARCb%j_l@SgUUbT}1|edY3DX`pOw+ zo0HXwnoc-Y@7re?AIo`H8=!J_akykVnAZM7pQWN!_?zb^8TL0XFOJ^}3+`5zy`|^G zeajJZ%K_J`qsvzu+Q;kT)9dct*~z+V?9F#u00FGOTAg$9Dxx0CO*MR)Z^CMSje)kRkZLTga&R>7`uQ(cQiOZ_pe%<>M2gvmtXz#a2 zYf5mm8|R=syK_X`v)n^L_8l-UFtj5DbiynhNr4bD3N>EP4@GQBrf z9dv>YCxS5`J-a^Zon4*xUIE%?-~AQm<@G!ek5lQWc~G_HlbxDhdwgT>)uuxV-}}Ga z>DadZ=4FQjRj7V*a9-;IQ*eIJojmv5H$bVEbLze>thxiwzqnKUIpvuu$?qG^N<8ld zmeZWS>+P1N6a{X^ls*?2yS_E3Zf}3#QQw>jhUD05;J3cmXY4m0JiXz!qrCPU`nL2w z!|qN1dulV@4#(MZ$lKEU47mzFy;<(g7}*!acgpWG?5_CJ8+bbiWY4+YmfmO3-T5I; z4ZZ8EjXg))72apSDf{%MxZ84mU){t}a|+#O(SNFsB8x}&1ZFF{ z4=`)R>Hfg1q3pu3bI3gAV0Ttj?n^7TKiOyKJ6}AGICxA5bZa;F9sW-Fea7Aue|iJY zdc!^Oyp`Q&z_m#6so{AoTibKAUEzI(+ZMY$wefBjuI-D~yC3W`?rr&}huB$3x93#1 zvippGV7UcDkUY;(CJ7wsmy%3PqlH#e$fkv*@J zy4%@#|L6bqkN%JUi_AR#eL;5KO&!m_{KsGPzU=+8<;9!#m#42!u6lpDz54C)cRlw0 zotb}UHXey%DZ3^&?3~P{Uhi+}>bUpz+|;!fzyDLOy|m!Y|Ngi#<*(AvDn4+yyf}OQ z*Q@tOXVh#;lPP1Vo?NiaDam0y5*W!n<=OKuo`3nb8)9cyy_c64@5mSXx_5Q?c2#d) zuPM|FiezahhgjefJE?HpnUw6_BD?Y;?NkdFt7l83cw25E-_??L~y@ z?&_(6>Lpz@Ju~2F2#|oUAS5D25Rn9p#swswBrFPIlte(5@DfZASu|o)T)Ey|4F5qAIxK&)+@WE?q6$BTSaOzt+v9i2y)xr~wKXduS z#?ce!m+{g&eCCF=wTC=(;fgC3R?e=STwl0p<^00gf| zW^C)}-n8nK=T%`^M_&<+C?zEUcc~Qu5^T@w32T`Q+7B zLGN}##hUyV^YK%vn!{B4kj;kt%o~d1irHpiw40r}oO5ZNnG&~b78W))oH<)lbhYj+ z%jU|U_cq9&VevY+3q&(Rc~?3mNThY0$Izu=+ES&p-iyL{o)(%Sm+ z%n0|a4Ki0Wod(D zdHjZr<@L(7qn=yl^!`?1RokJB^EdA@7IU-^J$iC=9l_-cEBWx8mfOmjxjK*6?1kkm z)ZtcQQd^!V?D=Jo>Xx0L-nvw7Sy%@1=fJE*k?puL zXH`Aw3D;g%NO0}hldGpzp{)B`VfOnAn&w?QH+QbSsQ%flJ1r@1u>u21?bud50<&X;y%B!F7HP8n zmIL|Ij#{3wvW!1J*nau;3LBU8wqu9~CjmTO?{f#Swc;rwy?%M)2^sBS%&XfWBa8*- z($+QQYiT_tj^YQuarVU7wFO0wspK)QB1+;gA`RDO~2F0&h*n$Az`EvkTxfg-v zW_DN7)($&-JKglHqD}lvT0jw#MVfwvu`RrZ?HDBIpA&U>^r}6 z6AyRxZ%;&1w6W5L}tuJpjK7D&)n=ENoq{Fr2OOdb-9g0AH z_MFNGO3U=qH$C}r97BQ>!cEVdP3;RgK8_yX2_MhVEZn%XzHt32Izi6akgd*(s2%1A z6Z(u&$A%FZ6UjCa0Wo%8C<6VIQ$-niFSQ~w44>deWs{+QL1VC2p( zJLane8Hm0!H`I1Umua)2A8pM#ouWoGd+e!4ojtR>W4*bUo_j7R0pP)ooxoa@9h2YbTS7b-O*M>$SuB zvumttkVFM=og-23E8u)~?ZWb=!e%Y)zwJT~6v#>#5)71kx>X)alvzNpWa7`9Ttlhe z(Rb@>AlK+#O-%tq3xnun)CdfA)Ub7FZvAUIIm++fbnYY??>|J{JiLBxc`hq#7WTB* z+-bDS62U0cPqnI}uEeK>L8?ORM$jyn?4Z^)Ye$g<9?_~5kH7A4LoMJ#o5!(`LJvLQ z5L_w6Ts?CLveo*}KFw55?rHUh54pw;J!G$*S;b88+1@q9Z%t>m&VzOPZ|B@O1*UA`< z){v-L3(PLrj;^BNoqx$oPs$qOQ~(Nea3^k>3x~$II*WsnzrA8&_+5*k!@)TnSdWjfd=Pd%w%&n)Bz+o^LH- zU+j`8bX~Se0J8_a2CZ95-(EStxN+{nd)7D3p4-7acjFxJDg>63VR?{aYzVO4p;54@Dm%@2NC=*L2qC`rVA~s z=2lf5jWKc#_Ud(NmIcpQz!J*z91X|c zN7v7-t!~VlQTvH>$=q$`I}A&oQ|X?1OV#nzLz37-bIA8ja-v8g%A8-DOYfB>n$O)i z^{qBSG+CTc#>p=*_!L67GGqIu_G`AhausfQas2GY#@W;LZYNF%%b6w`;y&9(OTycC z_isD58^A&5ZK%4y)d9<=&u!d17Zb=&FDQc8O2#Fyo~^EBwk2E-Scck5BvgYg$4Y#& z?@ujjs9fFHtx8vl-PlFZnrRR%YOfaOHXzuhnj6z|f9Ja)F-}hA*Y|UX*CTI!?8(Cs zCU=9NXxkuA+sMwDGt*AI^R1n0m*%Y%L)&t*^5>Q%y+t~9Rn1vTdv|RHRC@scv{*+W zKY0Vx?*?@Tm9ov&=T3_a!!B7ir5)JRoaJRU{|P9wYaY3n=3ss?+fB!H%;TD=*`r%o z+HjZd+;Z4KFivG%C0v8!dG_m8vC!<=TdM`ut*o%LRZ)7*p5-jdd|k74tfj>BcTddM z{u3g{f?OBRD~=uuD(~5iTOM*bTI_rTwb}Vd>X#P&(yNP_HZ9=4O&d}v1I^!u9oZhe zu&C{|#rI`SwNU%7@Ji!f+u}u9v)~LGf|OLTJD6tL+0;(9X?=poUZJuKhM|)v_P>-`#20|o7FcjXmn~@ z+hOC}Yin0C9K^J#X6khk!DPl;2!8{FWNr?7)>ei3Voo}ZhYosR~f+a0tHAKC?)Q)HM+ z>>1YM&q9AnTc=VKmbJ#`OTw#GfzUnz6mYPODm+ zInFUOpv~22qAxMx*syQ@IK@qRM@}uBUR}HS*uwhKne`(W;a0PUlux=y9b4!wpSC1E zd&@^khvePSf$!MPK8pk20|tZq>CV{o=e2q8?$jwNy5%zNY5-GmC(d%&9#&L4a)#YN3LIO}jCuLO(lO5a-msqXbNbd+ zb<1T(k5{)lBF8y+p97yQp^h;i2|C>rfNHER<7-Hj+aX-= z-7?o((EwhGmuJwRsV#Lh;8{JxvRsX2eBP|jAVD=Wt(!|Xmrsjm?U*(phb&-SEqwO^ z41vK;ojh(ON9&0A_TdfB-SkjETjM(t+euKeK`Y1serg(7%oR%rpBp^Dwmdu32Xs2= z?$Nc?>kCDi{Nv7pW=eCL8M(!I`7~>n?rkhl>`e6_wFaB=^4LQ9HJc4r zTQ1Suk*{7SV{VFcv|CqF_Z0t=f%^_SbGz?Fh+96eEpCZ(dD%b;lhSlKH?PX5)VyUx zUaV*bW=n8)>nuVYY0EV4EyY!g+e;N#Pj9SUzHpTFx#K$|#9A$Vd`_OWk(q2u$;P#i zGfg?mGjl%|C2V5l^pk za+q&pYra&rndt^@Elp!=nrz}O{r1C?v-9GZo3ERQC4ugqJ++v!4dM<&T#7c|3M<-0 z00!q{dxyla0e6aqrxn3z8OlD06&*UYUMQL_gJoL277wXN|U3I9g1U>Y$v@(U^>Y0rBxF>#{qIRAOdQ(DOe|iP%vznW78wsFZ z9a}hY!+8v~8&}KEtp^_!j8R+P-f|hf`>;>68CeT#xG4R>NVnC!??@flB-P)R? z+h*A+gFWzH{p@r8?MpAY#2+Uyg4h3lGcp${Ptn=Cj0=>b|Nrx^dZIEBmTL z?OygVwEf!2erSu*ormHCDkT(i7upSGteWMdMAWW2YjV{gVlEt7xasuT8LnR5=`Xej z!}p9zljT?p(epCSIF>Pt=DzI4OKX*gv_aSQ{@*=sMQ<`~yB6IgcGaN=beB(#hMhw# z1Zv@-a~?iY3#WVeLX+nqhZYQk+s5PIPI04g40(>ZIekbRwEXA(bJ9di<7RU{`ky<& ziOOgUH@Ioy^%7&58`2Z$Ai?eu%hDV~%NlaEI03l%>bZEC8Xw{F)G4RjYv?40%BaG*SkU?DYL?qr{stk_yp& zsGTf{gid%%Dou&5Z5ia4b`$q|nCRt(z2s8)UPe?O5|PCaX5^>FvEfXQE^-OG5k!g8 zVFYO^B1w=|f^esw6Z_UnBh}^frjjFj+b29h`=zZKFmOkEiW)$c7{Cc_K_?RuA%jjd z)kFYs*z_a-=%#x$f)UX{M&$6Gc)Cr$sD_ZV3A0K!2!B_x00Ueu@o&H^xQHymGd(bP zpfBue0FqPadV56F8xk3!n?R|H z+Vz0AN>x@QhV?^dj*Suu&nJ~>`N>IO0Uv$;*amDIczt(Sk>6Ei)C~y9zIQ4h8 z#J=4wAMY&^7O|nxJ1A5SNLQW~(yZr6pLpH< zNrE8~>yN&JsE`zvok6Mv6S2#Ab|EcNC5KL62&q=^n#jupcqdu~OK;H#haCbSu!0gN z5x{7IAWh&w;&B3#iqRZ;F`n3-u`nTIMGKNga*^mJyzeHo>m>1(CkaAP5sJD)!!=dp z-ELZ$3~ZN3(6lnnY73<(BD0wAzl_AL4P7Zi!$A{NHw!WZvtN-}Gv|{;Q75tk1FDre z?3%OR6BoKeCwVe5_F>A^ga>JfA zL2C&S+B1koXEXw!gM_c?i`m_f+WumNeWpdg?g$M{Qe>2*ph$RW@y^Mk19X)b90}IA zNaRQgE>;X=105|AGQ*rcCw=ov!3U`%!D6~Sdj?Dml;VJfM$00GG;58-uz|S%g5U7H z8gjk^<=)8YE~Z83HR`vKVJ)2zr3&(<=sM*S-f?086q}+|tLl+|5t?lGyO|B(L%kyi zDTu{FC!lBIcJ_mfu2|*-U@=_MEZNM%fEba4S6N&ELs*a38U+UUjG^F(CDaXR>@x!l zgb0~}qL~fSi+SG*PV}-!7Hg>xC(f@9qBBmcr*TLFabtLss3g6C$--F=biyg3=Z2j7251$v5no zBXLeUSv2F2%>l6yg*1;zzaO{|Bxwvr0@7ipqR%Bu7RT7xP_ST5f(-#ce_{uF1H0x^ z91BS3gbT+}510&kEBos9?UlinNr(T9CXiVo+wr>7VP0sOoJ64+7If0dLFz9GVeDY1 zHe(8Z9Hb{rA6S@tEonj=04wYQAhq4ZD$VLNL^5EoNDR^Q;L9v7QzYuqy5HWtMo?U6j^!z;R_BS95PXV7d}y7|NL_I}uA* zjpQ7%0w6e)?h{Ua)TF5!N`M`hIPZzK$JAAtS`A6>ED>OrWJVWNjc?uLs!1GBS6 zoW7EX$DzaBv9rq};lrToq?;BTpdassVe|c><={J5n}Cax;QrXP>bnwj9i}n^Ep;br z@S>2u#l%UZ&x{NiM5GgvQY2&(=ys*^l{Oi9785NuX=#rm7a^6$hM+mz6iQRDWt5#B z%{AycA?OmEKzt2HT+CvD?WBSP=JkygMT#7TT1+C0PKe4W3lIc}TunqJMOFQoc?ib-uihP}noHrFmf>50k7!FYF3X`oP=JhRFi zXq%-a0?Qsp3oJC!>|OBeK^KQfkLowFB=1fD0rDzFkzchYzd;D#OMN_3*O8IIQ%9+w zg78g(hK4n#0cOkwk|tu5uZYU$F9c9x&-UOf`Ll`OcPk5X1;-W2k{SX^cP6!6iEctj z>`DLH$Px4CU#BzdojkES)Q3Vnc^as9G8jO|`f+dyG$Z1*8&17R@{y>1&cdkcB86U7 zGC9}tW)T=u%qMx0R*&oSrIWr)<(0};`QQLK!+F?jUFz1hKGS>_rM0;Dn&w?|WUc0# zKk8LI)4csoqcyEfvO2J@`KSOFdrn6a*JA!`ES);Fhe2bM*)UJL27nmY2-zM(Iv@*D zQFNJ6N@f<+mBxg2CG1+0Gct?CjOoD$x7~x8!8H%C@zdIrS zsD7kJG|i$$Wv(={DyHxb&MTQkD5*4bTw#cJCFJx6()n>DHKdBov}(FtjT(+bXw6tG z98T}g!t zhlzwES6VRxfRlMNWT{bs5?_{8$zv#biq8-=o)|Oinpn_uGhIesQqSm=7HQ6Igz7QU zVWn-1vQ&)%Pia-i4q^xWMs0LD6yp;*mt_|012LG7=+w*yc`zN2hne8%Vr4dXE`qC> z4bsEl_9TFn08ETi?1bAw8Qo&FiusT)MJxb2c`>1+uZ5Kb_sIA$+pu;W;H2=egA_F^ zqZboLPhzrBW@WW1sx-jNW)@E@4VL#HeZwTI^H;-63LkY#~2xsk3UtE7A?qG)V6lBd*j!N|&DxEhHZzpO( zt=7?&c+_8HUtkOl6J2#}5UPrWVMOpy0*Je|v}>@IBkKbyQKICu#W4|M`wAhvLVaZ+ zl~FfJNH65ROxm58C%S#?g#=vh(wC`|u_ZWtQnx5R&U%Lx=ZD^#uF|y6I3q}r3_J+gV1wF1MdB9@w zG#DAtHGyX}ixp3x|E#L+D13pZQ03DQ8q23>^oZ1?d(kUnor|7jsvAA38;GDE0>`4z z;e(A4vKz_};;Ai&Le^ZyV}wf50V2Q0F_6W~G-N3-DU$v{B#U6_BrFIjMTe0g=xPxx zJ8b?U(diTBQC@_4b%Gg1xa5N5wHu|W_A-`EMqq4mx)&B)`zPHpyi|=P3^~Y7P!SV} zO$Ii7gix9T6Cv+m%EPF%7&~KrvWLCMWxW*Z1qMOfBw-e*EZ`_3Qa7|BRHD=ESbfu1 zY;3ODXt2Gq-^3^;1cu0PJOztMB@qQ1NeZlhPh*nsoq_bb6HbtCsK^p-C4cP{#UjGX zTpU=`c=nP&aF3Rc_AVf%dc_O)OrXPN1Dc}MO%|uS1ziL_L{Yj`76b){ zsNBWJ7eg6h%xR1qs2U2et`8ca#zEv_NrNyNL7$OCQAVL1Ny4lZAqAo^APqSW@j}*x zPb*ij%jjIhJkh4eC4yiWps2Q6Ygf&MJ6L@sksSFdt6y{@K{=L3A5Q2dfn8<2u-72P zHVHv>=g@sUCV)Kbf12*G_$ zjYmq3p<}r5tw^!Dth~Om9-u-ppj`A!MXgsDwsnM((@`mEF_E_^-HPk7PL*GaP zYUD@uUfBtuPE1N6Gi*Y`?#7Ym2g7v$9i_{~Z3?T=1QKAUB|NgzS}#4Qt;Q|pjrXGc z^cl;4^QPy%T_X#Imbk1!lCoK?{tlYBN>MzhOFhsLmmDhpi797^GFE znshsnV|F=v&bR6dBOH~Q2dR=u39TqL5*3onHITJ@Ph$aH_O;?NIzcF}k8z0b2t@>d zGdmOs+%ZEZqffY!Uo#y^j-`&g%5;oS+_y~!dOOt#^RJE4npl=R>UI*K|fQ z_o2=cb~%6=n-T&Knn4SLWNzm~tQ$nFbq5NV*i({G!yH*>v9A>mAsO(n)`9?|1_fFi z2zVO7!8Jo}TSVT|suI4;+XlEb@d7aNAZAuq7Q6-Eh`|gp!hqW<6t|v0cNpy&0zt{F zwr;lZlAI`iIFxjvWDiKIWq~34grwwb8cDLuv92(eAqpC;U3yYic5e1Z4)K1g7>|1r z#5UJ_sgk{u(ec6VQe{^coXXUSm2yO8-e1|FM=p229_)I6)1$}_GwIT1W2T2GgvdlEidTRJAPP7= z5-K=1NgAjmO-kZ?Mb&n^e#@b&U7r0YQ`sY~Mr0!XXK7kbJ_8Jr!wv=nSPFD~WUX0K zcuN33sHJ2(V~TDNTi7@pwDyT-)788de1;^YjKbY1rmg5&Ly9=siR3aVTUB(%SdA%! zn~Xk%Js{lSqLDT)Kjp0&+B94sHJ4YN{d1fgbA)olu(#6qY|SH48dYK&sh zR(0U9nY1vmx0RN|2?c9s1knpk^CpA>yp!iMLKQ4bnYKh3Sa3wWMI2!0xP{HwW~p>| zDPPj|A~V6bqQHV^;4AwDCHLeHg(`*bRM@%$OhC2;Y|>cjLi02+(%W7H%q}B?P{(@+sQ%zxDUn$1r3eoF!#MU7l!4iy+26R@I>k%LG-`&w2T z1E)T6Fw11Yn;;!9jUq%E3p~~tO~+W!RfMR4bqB(sSRgL4kf3(38Ph%biiYA45&960 zWyqQEN#iIA7H@ir`bW8n@;R=e`_e)-D$4Gjq^t7Gr(3-tb}4RM-_510t4~>FYUtJ^ zE0%o%#)>_WL8)nmv~=88HjTJC>R&)CTU>;Lf=%77&VBegpe@AIGG@85Mq_K$K>>@a zh0Aj8Ml|ypSxs*#2t%~~GF6a<5BK^5SSLpB6&FmGt=RtJ;)<)M+vCHeFhh>y<}I^X ztXC-!%Lq>l#zK2F1B0R1{h& zLCQjo0R~?MYKQXD68>}c!X!qPblg#mf_GWaA^&4^WEMARY!up=QphS}HN7^*0LD<~*e{&LQ0Z)^B867`lv*B%@=xzs(ixCaf@ z?W>zit?b9X1KPCeZA9oSK|QoYYR23T!mxcS5Q3${a(@qRW|OM{27rZ{G8?hs4t2Id z8{h?=j3kE$F;LyodCN8vYqRey>XSWP^7IfIDs5%V0&vXsblLbw^0)q<)T*&Zg9y)H zOH)6!K>;IHYR87FBP-Dgw$mYMi3&SAbz*V)Q;zalqnuY!q0)^BAV?5RNtZ&Z0Yp?E zoEgL%tL$n~X$qS)HkBRUKD>th^^t@rM=|9=3oD;NkU&bAgo}Q$WX3o!3}V5+o0s?H z%uwmrknCNs75`_zTBfP!-MSwFZk7~`AbKA#VP2VC7IZc>V&HI-8sR$@SoCWVn1xKA zfhExSyoEGcK7O*Z$3ACQ zudT||E+i*WqR}Z4a)1cpBbE!;sM)b^y?)=$lEAK>`}&iM57Z zJZfeG-zu|wDy=;lh;`yVSZ=90z=Jnwy)2*l2#B82-ttmpv(7xlIfJmhENw&wvbbJL z++Zt|bZv;1^Gx|0bc0C4hLjd%W)yUKJkfHirvY`u5?o6J7NW3HyGP}`TMqdeeLyIu zA74_lM8+3+(r4boXi3|{K#x3FGK)i1${@XO`cdMoRs!}1qOV~&wKq;zle0{> zp&iu(xMCa5y@H1GYP#^LT!9pwm}AiZtFf|dRDM+3NX)heci_nu3eOQzLam}8xnI-m zLJ82GHwCA~AfW@6yVGh-z%Xm2hQPrcF)^zXfC|F~(6zFuEZqt|waawcWc;I}GS`Uc zTm&84X<%$$>p(?Rbs*=O7G*P!q{m3Wj3*)?M+NMC{89pL29?#3-jl+E#))QpKFh!x z3SO96PGAGLdJAYeM7k(RQI(9ovX7E6ZeS&7*R*u&+?abnpp@LNAHBXUAF(by7?+<1 z1cwn!a3E#!`nZmZ!C5(xP-`hmXj~QcyoeL6Ss?gY{e)MMr-&ImDSCZ238wf-0USy| zj2cqG+m5A^HXP9y!QH}DH_)<6)m*uwlxJO0(0)|w5*fR30i^w||EdxV~5 zRG+gpwWw-Y0^jN=Uu)s@Q;*9sOVkMr8LZ8KhDa8|h77v}Q9DN{jco zMJ#ShVH!8GEKjv}nk=Ova4H7oo3_cQbS{4J!0h#`eil&$V<0iUQAQI4W)f9NXoFY14YMkVCv^kpdh#;eDZ{$|ZSn@}Okf zuvBp7*=~coYo)ndt1a_t)@Xh5_vIT*uy|FBrZz|g~idEp*C9BCv+!64-AZz!;v6r3?M>bu`G3wJ9=Rn3@3|B zo?qwnm^#p=T=B3y*Bl3SN_G)AYRVA2crAlfoOiVqw1A3TEpk_{YF=TN)==}E*^ST^ z3@Qk*oXJu7R4hba8)?^N5IyC!o&qK-oMf6=FQh?G`xG&-j)ZWc(MEe+_YB9dJP!~6 zmWTx8^@M5~aIMtnvd+p7);N-ekHQ|w=>ic8y6ZNVS*U%==0iW0)RIj~oGfuym`z*A z5VGk-B^h&3>PA}4=PJB~T~x8E2(Kf%Ekhdx08IngfT&Wl@}k3~`I3e^APEZz!z2D} zJw?|d2P{z_GhOyVvd}kFrKF5FYB%{?F;mn+>F3Eb^2Dufh8{P^|H@M?Lr8y%P-Gq> zj!3T35k^$ZAX}rX2+_M3dyT8G$?@{OM1m3?2H>KGNg+MSvMI{A+q4tOc=f1}ew^fQF9679rdbd65?AHhAbp4-3+YB3TOjtSu7Jy;y$~7j0uE z%w|h8;q1mlL>KI0uJapwkF%HpMG$&%5XL^}WD~yQAKjdcEF`99WyjH2t6#sULVqyn z^2Nhj^lZqYCWVkW!CvCZwL$D)Bt)1|k8!cXEogGs6%_)T3+4nFoUUasFKW&psYSbs zPpYKX1qy#f-T{atdqp5f0Y+b%%<1LPU+AwV zwLr@MbcOf)Zc_Z_e>UjiOG9QD@5+2~M$7|U7d zy67Z(H^q;B6tx%RU+s_6Q*X^ze?Qr{#TYOCe$CUY1(&(YTOS;oIvio zos|KiEHu-NR;H)+XHkd2y3%P#Lu2^6OhBrwY)$0g8cu$6fGwXjy4l6Wij_OUwQlU5 zAnbyL2p_}`Lnkgp;4FS#lo6MWUeXgblaplyPnf|l(wti;?n@70(YkTy3aOF??O+6y zXVFVl01oL#uBrZpEg4%9}b2RjBm;DCd(qkW@C$6ZsZTG-ji&hko9ydYi0OGcHEepvXj3JU#uBR%W00OfB?R++}8;BWfVG@qjs) zA9(iTdD_9FmU;J&+73yYIj4vP8yL$8+2Rx4jXy%v!7++Bc+kCY1SaIi?2a{>SU4)i z3E$%}4J*b`Q{M!aS#~>Og(zL9T;a>xKhv5dx*miCo(koN#VV~+p{PW);iW2sqI9O=Q-?M*m7!U_Y*NjO}%+ey-qgN7x_$;$Gj<=7C>OZhw&W^1^N7Qc50r&0cM6nPc9#xJC^Avci(4^}e9B7iBEWu58K0 zoPij@GbivWp61nUBhP8N4tzkWhut+?jmVrQ3uBs>5_PiJH_5rsSxc2wedV3j7+>LW zY#4DiTpYKwhn|wF?#BsrXdYk(;9JOO#&#V-P$H97yNF8>vho)_$QystvtbPE5xc0n z`O8v%pPh#s_ftzjLOeQHg z?G&$L4?OK_Z6Wg{jR0KG}5N1Gbc{dgv&Z$yhY|93FD`` zl;@Bf@9LK7BR=b9)|WZO&!Q>(&|F z3a|nw&+4c3kxpM1IuN_*m&nlqoMyJn*~Q?YY!#66tRuqSmlu%pMvw>Mw2XUYy(cZi z3-_GHS*UNH(&-4Q@8%VAghtG|{8eAtQO#gw;pPskY-SpS59&jMP)!QDGuS;lPrFmd z(`U~-`|RH9I9cW_WDjO8AkNmtVm5UcRWX|>>$$+57Tv5ZpCLG8j^>AR2(Afvw66d| zlfh~(9HFGpiuINczHEQsgjC}}1}cb83T@bOIZ2oraBxJn1w|u~s>*qVEL58;{-!F& z(S`WcK$6QZ{4{y}>w-Gv3f1u|Ln2@0urYJ^``NHf6lgqTsZOnB<_~6b`ek44#-|9< zvG>%NW4D>fv5`;&0W1*cU;{_N&0&!*cxo)lkaw9Iq-<4Lbci~BF6E&8x*gZO|4RGR z(gYI6&NxK4^qp95-b%~TRQdAG5kwbC1Ia6PgR>x{+wn z5U5mRB3eNKpU`zA2^Fai1X3gd5W^21qXu{@jRxreYwdw9nijg(?D0(H4VB zvmgxQ8v_YVX$J8DRW~VaS}iAGYZZWUiq%+rph5LVeqp>I=Ww6AdFAZsi`bjYF%NOD zfPwV54aE7MPO2H8h3HMUxK=N*Bl^;XvoN_p&wvgG^H>>44%c+g-=}~^EUb(4)Ex7A z3X(;M!yPrOxseY;j4^+eQHA+!P9cotoNO@r#9Rgbqig4LmPihB3^3I~MwuqitPEvw z!Xd3GX;cTtRUgRad|~Le1W6yBzADmC7q@s->hxn$E1(5AP)?~MZ=@Sdwp0YwvmF;j z8Mkx>5$Qu6+dct$*bHV1CAjKE(obvCN~vE>{AGOuIfnzG?PZlU(de~ z9ty&#)Hf^H8M8T?uy@%_$oF;oS$~?<40|*U!2h0_7Ezs!zl%ZdE>tX?-&iHE#@@WE z$uwtevotV&taL$GejVvbPnl4Y65>U3!Z_wzzj4Gv>mM| z^@u^mPkG_X{7{wTR@*-xI7T@;x4RGXnS}p3vvd)YYm;ftFkKcg_QZ!NVh}Vy+}b~v zR*~CPfZCf&%SQ#NzyPFx0+6x~xiS)ZBh!*923CZGmbr7B3+6C%sSM%kV+xm)1A7BRo~lAbgu^4$foa zsUwV9_;QA^j+O0i7ZZ*x@I_u72;QFT6yIP9i z63jcTV^mRpN@76wh7`E=a_y7$GwY18C3Wtjz`Hx)gmy#qHTJv-V( znwj=)h5m7wSwrr&3~qnL=k~pbw_UM zO_&?rU=wEml&hzs;nU`$DPEbey--=cR(%VQH?%JNGTGf5#tnR1RnA`B|L$|Q+L-93 zGwBPH+m6JUqGa>jbud<)(X@a`e`+*UwrxATX)-&P0YpGlRp5KJIfN-3>|i_eX=gQf zspQT8xB+GjpoL9MQYNN_U0YW>?o`z@(oWWvx@sr|hnb*BR1MuunX6fthBGieC zTj-Nz4lz+L_Lw}bG@bHG#s3RestH0IlK~xHREZc5*-Rw|w1B58_lu#ftl-8+MytO& zw4tz#k4!^ru@Xpqu@cZI-}RMQudI!;%)Z2?69iW~zjP5cl00*uqw0n(FW=PHNIL0u zC-9khz){fGHopkI=I=`8@9CrJ$d^rN}gB)Fb6A}*{G-zb77Nv zyWCQC!fis^T=A^zg4?7sCI$hjhhT<|>u!fQkPQUS-BdbHHv`%?5)ty`=~;Qp)jNht zt|ndO=>POp6{*jG0+t`eJy32J-QkKRl9n;J9(LJfSFR9-n4p*me0SBM1i)-V5xTE= za`i&{?exkTZw#w@<++Dl_sx%9cx(d79a(tv@)_`BgAjAaZ(g`^X<_C3GEvA3{k4AV ziYtiIb^7etGe=j?Ua^Fq;=?F)Eq`Bm#gccEdoej}_^W!-v@p|d+nohEus~GErW5H1 z(QTWa8#vQ2msSC9b^I1g8@pCc?^Q;i|`4n3^m4NgOsnPFQe z3vTJKectxx-|{dw!$Uzr=8tqsmi-KNvj9*zVB>9qIPEsp>F527vkmri(8k!rLD_AL z)6e@EV;e8!ppCJOAF(Ue&SconINR(84`Z9C4!h0f^z(j3*+zdjXtP<75_TJ6`*lAf zYyv7Av;np^gzt*3Ga2?X%r^VML)Z4^>0L)UlVLw2ZL=S|kv3Pz?uNC~&-)o=d)4eg z!`t@8$6aT0Cc}Ql*=9d@vpKyXaMz*E=Gf0zr}+=wU^nXCvE5L2`guRYtjq^*jLl_S zyNz-Bc|T)pFYP*L%d@%IXjhco{Jx)2POnKiXv6eQn%(BHzU^mtxwz(_4J~K>b{kvs zaX*8rlY#pm-He(!S4;lFboB1<;!67BHtl(Vc@f!09oZT`_ew$9@Jn&42K4H3xxqo6P3peuh}bg$~+O z<~Y!9qia6yXLNOF=%9@*`(e9{uKBp1(bc(@12;MkjqEzQ`na#r4;l z>wd=9xZEGK0mdPHxA8R}_cOe5TR&){i`VpSqia6yXLRLTeb7c1PwU-A*L>X1=*l1a zppCBeINfc4o8R{{#;I%SK^tc4ak|?uH^1*^m{Zr(gEq`^7~O4zr49wVSdzU$#~{Ork_ z>Z)>K`TY9o*)vxi!aw!U!cC{w&a9WK4xTzU-gx8D z8+%93p1=Nz#ZITAXUd_48&^+mtdO0suPe)|*RO0;`oik+jgLHg(^ZE&F|+L``_yS= z-fiFA<&&c!w|zIEE8<|>xEBv`G9Kd!Hk`R2igaBM#Yg|+GSg=B@ z)?F_-AQsFwowky=^E}eYB?{It6g%tL+&^sJPvJnYXj}(B9mdRWAPlX zceiIm^&u|ip2;FVHI6->o$J>;5{=`rS7J~RN&L;ZRfM|_O_3| zW&5SA8Zh8=mZF}B=Td|C>e9*hc;9>DDtA}lgjtbZ zn>es_uFO)I-P~^BMB}qs5#MuTYxO7}z3_>TH8Wd%Ms<|ix)fjWU;p^iue|hS< zvlKVImk!oy-0asj@60BS1?TWi^hdQIajo_iOacx}a&KXdlrN6CN*es=aHfl2Tzx7-p?K95_c@_X;G z_Pk%a?IoA^bC+f+%R%d4O=IgcHjk!`jvwzWa>`Ab%Jm0Bg8vdi+)z~jtmCq0aYOKP zFlERkxCUj)&1{KCHW<1N@y*qNHU~|){DM1na2SSIaGe?JBG*9HQB@$$GBVBCPmV+b z?7Ai+6mFcWF+GmVC5c77l1BnpF79^38Ya2&f~#`Dw>l(J(bwzpgKk=xH0V(+8ko`c|CQ?MncE)SIB)mCR94Pm=`y2OU zmobsJD3J@v>k4tMHKP{coXa&T;(booPV_e!|= zvu5nUiCz}TVl9qSF>FbBC7=LnB>t-Gqv$ z!yhnLvi3PSWnt5~dYZnOF?Ye$UDRQQbz%ZsP%l4*2at~QlK20WCNRFC!aviR> z;48l5)TR&axC&f2r!od30qL+)2LO{Li-UVvGtqR-TldUC-TjI|pSx*|b0UsehHFPi z_Y-VlP}kjhZo^1DeiRvrIZQf%)0%7AI?M}A!?igGP|>S7c1qKT<98j9lCw$pF@%qS_N+Hn8zRG_Rf$PM(V33PPYR zQ5z2V%b?MfhTeL`KYuNTUWl-eJKp)GO+)OY`n>CMX|l+avu=rrL;yK>elC#Us+pXi zP;Pgb^Bl6Ypk$Qhno3%zw6_U(tp&HT)lCE7M5Pfby>7_qPr#>f*w`YcFCa*vqeN>= z4Edt?r5q5|3M@0s1%0E0OGIokEeOCw-Vx6k^r?6~1OlXYhU#PuWl@bK0=_Gm-(hmE zDNkel!Q?_y+e@dZwL-QQp{grUyD$X64%y3B+GMm@wnlBQGy;y-PE&1NAwOg(!KRT% z3$~1s0L{~NU^HA9nhPPUb}_3EewGSy>4I;;58LxzkX0D;dTPUd^U2r22~rcDKFi@|$0WeD2TP8o{ph);?GZ zyzSL4^7)C$$-#I=VP-vK&AKvV=tOf2u)G!(b_gXm+JJBK8?l;qCjc#Z75w<3>X_f? zp-de0@l0JuMxMCmwp%{e$<0ad+u7nBs9*z0bIizB9Od*EvN#tO^x%d0^9w7ixy19< z8cDD|Y*)Kh{^D2e^z%%oKP|;B*Ytxmp{=|8Jc><--rmU*HJzP6i8&$QflyPnGcdB3 z`!q>D8v7%!Bw|qbT>Zm*k#jw73|Gk?KDn?hX_atdJ7;#O%X0Z#wJH)AVAu)XY+ZWX zwm#E*$cR--2b$&$>o;w_`J-OVG;hDtXyHqfOu>t>=2!gs&3F1^6f%GA+?u+cb@RF9 zgEi01p@I3+ymabRYvy7qSU+$u!^lD*Whj6nmMM%im1LQEeK5o=QerRh2`eUHg?=`z zxJ4$&dc}xCnPUcvXPJhlq5S2jr4>O~;kV42!mCvyBJr&F6{AE~@|Gz`>;PgfWtZMk zOvxbXR>gL$pcv{eFlfY5hN7g$Z!bP3E2pT{xxI#!@PSPlbP)x4hY&)SjXPRtSegPS z?@EyL=4yr%Y1j~%)3nALdNhi0#&}vPn+hrwTWgZCyd{J;Sk_Zfhhu|F%I-N2`lQbmHTN)D{ zda*($MoFz08WmNIz{x5pj<{lIR@4_4zHjm*x&Z01 z-=KLoVAZB5A>Q*un%ltaIBio|g4u9O6Ox}=yYJ0Y*Enhw$a~%p$Ww`;qy>WuIJ{`5 zU;%iQSZ0R30_6<`V(%ii5I_d#6P<%uA+)0;(1pW9BAis3&xYHftq~W$(|TDfqBTS` zMVYpPx!$tVTvsg?G~G;>(Mjzfv8MSDnWhw%F{G57%)X74$Y!(*1TpZz;9g7zs=3pl zSeY9lSRuha5QF)M-Gccb59S&2)ID8}h}q!D?UsD=mQZFRxNRIzy20PZkI#hLLYZP? z%ZyQ(FHM~I#Ph`dmA)2MWeoP?=A+owlIsQWDyoy|%u6k3GzjNK1RN9whpco*+pd`3DFi&{Km7N9 zx_+BWF7c<8>)K;Y2a7$ly_zrAEuL5!EH@m2zyM+fM5RJR_C-1XM5J}W6bZgU+F+i6P&NufCt6mm@X?m5 zT6S;7m`8LD^S~N$k0G)cb+{rABuktzO-UeAv>*mZ8o`o2fbQIrkjv$Hg~fn%RhIwQ z@Oq*CweR5-^D;zizg#oar9H*kTmewlr(SNCFMHx7W;N|@wmRV=9c?J2A^aFi*&u?5 zW4;mS61%8`kPpF7_?lR6>=5*suxvWEtHF&!8KFesIGOzAu2g< zixY(3HU{N{OD8AUwd+yHn$^9jnJ7HGwkCeYF?PmeSb<@~-v*Ijg4x`)ZeQhegr?)k zmI6hY^{S*;LDh`egjUi>P!2v$gEitrhAQJguXuNm#jAd(uJ$Hk10y;hwP3}xuO)Oj z$WCw^a~H{QS!!9gIZzzF9_H^Ii;&;C={Y?l_@I@gSYj!dofiRgfLoEBE6QD^>n2gs zR^Rm1YYk&x6`*CQjDa&2MVJkfV7=TA%EB0WGohD^%5wO`rOHr!;LZ~1gyZC!F|-ut zU;|1`#fri+<-Ax&d2-LN3oVQ^qEYA@Y{Pm}d8%?Vfx00E6shPHSS?xas!YGq%sI@WT2sL7c@cJ}(wQ_E5iH4sAI_yZHLtCBKZUd*l z81|3IOZ8>6$*rxTWyuS5AARg+ja>;{NkLh8ghr@w5cyl0BaCu+yc?|$JMWN>P@vc= z5QPD0sC%d)GBxsm!Uj{ua}tYCn?-SpeIu#7Nhr1Z*6u1Z0pua#pXnYOt`S7&hr$VvMIl5am#CuGl9fy`!h!gZ zWP~2<4n?MkA_=UuDcVs=8P2?1z2>mZyB&)65( zYa?$cd2XE_gw|IOa4)kl_lPM({>7t!-7@OLIvDbWYX$tdg8U8)H$MPWqx?IQwNjIYyUiRcjOJ6G52XH0r2jNPx z;(o9}Eqy7|=7_7HGArbXs*w4~!@zzL^UNw;?S7IBzHtxU-{>i~&+$SksZ@SgK3bOvecJx@|hp zYntg`S4-+`y+oC8K4>~==R>UImzd5k6j_=qsy|73#Kx6SfELjLfxY;nIGu6K1d=5x z@M`!R$*7TziF?g*$2TLTw z_@EJk<=|kHzv6a+f`Z{&F)5_0j3aDDONwh#lO;cs2Kb-h} zpK6c1%z=EOAEjrK_LAFSwj_sj87H3{xcld3QvkQNG;4JZCEN%HjQW-yH2EU5EM83R z`1~_p^4Z_PwbP%wx1L64&!0SZetCWUV6BK7+iuNY5;)!rCdZp4A(Kd?0P!I)6Tp1H zuPY(=+oTL~2C6`(pgf>Gx;My&#STPdlhAwoN9g@3gqSiCPdbi+L?m>UgWaV}m`1h` z^O%)TtWu@oIG`C4w1gJpje#eaMiQ0!qTpqxgLRUJ5UloXCSB%&?6<%dig%hZo-Rfa zqkz+Hk4gr}jrAsJQj*Nq*tMp=l_;ztfnfVlD&zN1jmY%;&yu&wdn;VDIr4DvO2Wp(3Uv&Ve!$j4O(~A&sEMZ1UR$W}QD20#!m%Ve8_8ennr1?^yE1NRuu- z>_s5%GBOxIJRR`~5XafZ0N;^PSRMu=?hKsGPGghJ{Kwo;o-CcX9hAgw7(tn{5^>#7 z34G{Q1Pe^b&%Tz~XW-OF4rbZh*|ov&;26OSq(Fj9vmOx}@Hkc>bYN0weLxUzSxAsa z*q3QT8>6W?#OA(I2A2t+H1679@k~Hp{wRlSKF4AEBHGyJKl0aa{XF}*{o#vk<8rJN;lui3&=~Se|%d_?N8>HTRSoUP*pzpxIz-r~0^1H2z*X z*n!XPaPle=KXQ(PqjqQt<0~IL_AHc*b)KPqSN49S$w&Q{wa@)Bj#~b-Xi~T994s_x zZ~WP!v^QrR;BLtH=))>$Gxw=OexRS|VZaZLg2jf#iYZ&0N9jevD2zeo2ka7YtI~K` zQ5)}q6DZQmXyVUn280L+`10SYtz4udUU%60g_2FvvLNODNmxf2ORZ`%HH!5S$5{J< zJxF@GJ#8e;dt^PT+i(mqs6;am&Mtc!dvVVpFOC}QN=!{MwKC-0Z1DbixY+-v<;<2yhfm%a? z6U7!*0As2yu`NulKqFSq#MPmI%uk?IEiwiv2JtNF*a{3)=2sD&&mVX%~~UF9v2P8~IRM$;Cu2KhMC#sn`WK^B5uLV}tzd2(#9|q$ZfjND!wsruv4jx73pmjCT zDqPc$Nu+FK?le3K0^p@Uv2X^Ib9G$1*34;Os24AFISGUGzUfCP1KMiXRf^V(z1`l- zFr)h<sWK+l}LEnf1yjhH_<_ z!3~JBC;DpVs7&r?0Jak+KOIF$2Uf$ZlR6uT%oK=;M4q9gD`gDL%3%^@1yFgRDr^f) zYq``0S*6`mszH$nJatfX$r6Dx!nPkEx-B{m@n%BIP@6}~k7y}gHxpSDHrb)e7Rp{? zS%vhkbYSMMMODj^&Q(WwUkk6FdR&&|q*M^wPGu9ZA(Dl#A%prN(1!`fzx1mT`|)C- z(&BwOEbzIQYB^74d1~vR$x?y>r($5fX`74+>f#rOX0K=Uvxq7f1BvmCvR_6W{^9Bm zH3VKbyV=9cx#RVZpmPalcAw$$Tr|!f-v+^a+!%yd!?Ybl+$xy_JDw>@9K;4K!BO+% z=uyecVW~Mb$|eLb!5%v5YddFN&6*A0Vqf@T@TLrdS-^^hEc)=*Qm|`A`Z->WQp;D4 zh0^KD*^VonC>~a%Pc{KOV;9!PPatMSiaZuBhmsWh@r6MUkH=H9pkov-9IKU7%&`<} zJ?4~(UFhQ&eoHbaPr7N`K?WTXmnGGBgl7F@Gltz|_o?&;!el%&z88)H0wl|8vFxRh zJ9=Rn3@3|Bo?j<{nL5y>98lQ-s5ur!nS=-&HDw510=B|8m5Wk1K2QlTL+++R0Iy(| z0#XddB6v-L?qz5hw9USYo$h)byjA>#(g?GANEL27l>HUUAMW+LhWuhANmo4OE%$2 zrV@9B*|dcWAzPY!51T4V-AJqXT!pu=iz-$XCH{OjMkS+J*E&ka7+jT_l@}c@UrQS9 zfFvv=46wLyLfbOARKXGzz1n5Zn;LU3RHdYh98YM8NZ`WMkrN{Y&r0JxIzx|}gT*nN zHkf07i%?`9BaRdSD=aH!kPY?di9ots8bg1Ic~w;nB`M)y04{3A71EO|`$C-RRTY!i z>1GqG$oegw%h+=$U2hlZhtBSWS&bjJU5*gbl2PeT#vJsUA-qaI5WkQJu$Y1fwPH)j zdD#~dTV#4s%8TBGj8s=^v?XK~btqm^8cbO@LSburX)-RqyKpRAPH2mIra-8}4TY

KtTjlIN^tU_35Yz; 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 D$*C|Z literal 0 HcmV?d00001 diff --git a/nasg.py b/nasg.py index c7f7b0e..4dd5bf7 100644 --- a/nasg.py +++ b/nasg.py @@ -41,6 +41,8 @@ MarkdownImage = namedtuple( ['match', 'alt', 'fname', 'title', 'css'] ) +REPLY_TYPES = ['webmention', 'in-reply-to', 'reply'] + J2 = jinja2.Environment( loader=jinja2.FileSystemLoader(searchpath=settings.paths.get('tmpl')), lstrip_blocks=True, @@ -78,6 +80,58 @@ class cached_property(object): setattr(inst, self.name, result) return result +class Webmention(object): + def __init__(self, source, target, stime): + self.source = source + self.target = target + self.stime = stime + + @property + def fpath(self): + return os.path.join( + settings.paths.get('webmentions'), + '%s => %s.txt' % ( + url2slug(self.source, 100), + url2slug(self.target, 100) + ) + ) + + @property + def exists(self): + if not os.path.isfile(self.fpath): + return False + elif os.path.getmtime(self.fpath) > self.stime: + return True + else: + return False + + async def save(self, content): + d = os.path.dirname(self.fpath) + if not os.path.isdir(d): + os.makedirs(d) + with open(self.fpath, 'wt') as f: + f.write(content) + + async def send(self): + if self.exists: + return + telegraph_url = 'https://telegraph.p3k.io/webmention' + telegraph_params = { + 'token': '%s' % (keys.telegraph.get('token')), + 'source': '%s' % (self.source), + 'target': '%s' % (self.target) + } + r = requests.post(telegraph_url, data=telegraph_params) + settings.logger.info( + "sent webmention to telegraph from %s to %s", + self.source, + self.target + ) + if r.status_code not in [200, 201, 202]: + settings.logger.error('sending failed: %s %s', r.status_code, r.text) + else: + await self.save(r.text) + class MarkdownDoc(object): @cached_property @@ -95,12 +149,19 @@ class MarkdownDoc(object): def content(self): return self._parsed[1] + @property + def has_mainimg(self): + if hasattr(self, 'images') and len(self.images) == 1: + return True + else: + return False + @cached_property def html_content(self): c = "%s" % (self.content) if hasattr(self, 'images') and len(self.images): for match, img in self.images.items(): - c = c.replace(match, str(img)) + c = c.replace(match, img.mkstring(self.has_mainimg)) # return MD.reset().convert(c) c = Pandoc(c) c = RE_PRECODE.sub('

', c)
@@ -337,8 +398,6 @@ class Singular(MarkdownDoc):
     @property
     def syndicate(self):
         urls = self.meta.get('syndicate', [])
-        if "https://brid.gy/publish/twitter" not in urls:
-            urls.append("https://brid.gy/publish/twitter")
         if self.is_photo:
             urls.append("https://brid.gy/publish/flickr")
         return urls
@@ -375,6 +434,14 @@ class Singular(MarkdownDoc):
             return True
         return False
 
+    @property
+    def to_ping(self):
+        urls = []
+        if self.is_reply:
+            w = Webmention(self.url, self.is_reply, self.mtime)
+            urls.append(w)
+        return urls
+
     @property
     def licence(self):
         if self.category in settings.licence:
@@ -404,15 +471,16 @@ class Singular(MarkdownDoc):
     def replies(self):
         r = OrderedDict()
         for mtime, c in self.comments.items():
-            if c.type in ['webmention', 'in-reply-to']:
-                r[mtime] = c.tmplvars
+            if c.type not in REPLY_TYPES:
+                continue
+            r[mtime] = c.tmplvars
         return r
 
     @property
     def reactions(self):
         r = OrderedDict()
         for mtime, c in self.comments.items():
-            if c.type in ['webmention', 'in-reply-to']:
+            if c.type in REPLY_TYPES:
                 continue
             t = "%s" % (c.type)
             if t not in r:
@@ -450,7 +518,10 @@ class Singular(MarkdownDoc):
             'has_code': self.has_code,
         }
         if (self.enclosure):
-            v.update({'enclosure': self.enclosure})
+            v.update({
+                'enclosure': self.enclosure,
+                'has_mainimg': self.has_mainimg
+            })
         return v
 
     @property
@@ -488,6 +559,14 @@ class Singular(MarkdownDoc):
             self.content,
         ])
 
+    #async def update(self):
+        #fm = frontmatter.loads('')
+        #fm.metadata = self.meta
+        #fm.content = self.content
+        #with open(fpath, 'wt') as f:
+            #settings.logger.info("updating %s", fpath)
+            #f.write(frontmatter.dumps(fm))
+
     async def copyfiles(self):
         copystatics( os.path.dirname(self.fpath))
 
@@ -501,7 +580,6 @@ class Singular(MarkdownDoc):
             'meta': settings.meta,
             'licence': settings.licence,
             'tips': settings.tips,
-            'labels': settings.labels
         })
         if not os.path.isdir(self.renderdir):
             settings.logger.info("creating directory: %s", self.renderdir)
@@ -530,7 +608,7 @@ class WebImage(object):
                 self.Resized(self, max(self.width, self.height))
             ))
 
-    def __str__(self):
+    def mkstring(self, is_mainimg=False):
         if len(self.mdimg.css):
             return self.mdimg.match
         tmpl = J2.get_template("%s.j2.html" % (self.__class__.__name__))
@@ -543,6 +621,7 @@ class WebImage(object):
             'caption': self.caption,
             'exif': self.exif,
             'is_photo': self.is_photo,
+            'is_mainimg': is_mainimg
         })
 
     @cached_property
@@ -847,18 +926,143 @@ class AsyncWorker(object):
     def run(self):
         self._loop.run_until_complete(asyncio.wait(self._tasks))
 
-
-class IndexPHP(object):
-    def __init__(self):
-        self.gone = {}
-        self.redirect = {}
+class PHPFile(object):
+    @property
+    def exists(self):
+        if settings.args.get('force'):
+            return False
+        if not os.path.exists(self.renderfile):
+            return False
+        if self.mtime > os.path.getmtime(self.renderfile):
+            return False
+        return True
 
     @property
     def mtime(self):
-        r = 0
-        if os.path.exists(self.renderfile):
-            r = os.path.getmtime(self.renderfile)
-        return r
+        return os.path.getmtime(
+            os.path.join(
+                settings.paths.get('tmpl'),
+                self.templatefile
+            )
+        )
+
+    @property
+    def renderfile(self):
+        raise ValueError('Not implemented')
+
+    @property
+    def templatefile(self):
+        raise ValueError('Not implemented')
+
+    async def render(self):
+        if self.exists:
+            return
+        await self._render()
+
+
+class Search(PHPFile):
+    def __init__(self):
+        self.fpath = os.path.join(
+            settings.paths.get('build'),
+            'search.sqlite'
+        )
+        self.db = sqlite3.connect(self.fpath)
+        self.db.execute('PRAGMA auto_vacuum = INCREMENTAL;')
+        self.db.execute('PRAGMA journal_mode = MEMORY;')
+        self.db.execute('PRAGMA temp_store = MEMORY;')
+        self.db.execute('PRAGMA locking_mode = NORMAL;')
+        self.db.execute('PRAGMA synchronous = FULL;')
+        self.db.execute('PRAGMA encoding = "UTF-8";')
+        self.db.execute('''
+            CREATE VIRTUAL TABLE IF NOT EXISTS data USING fts4(
+                url,
+                mtime,
+                name,
+                title,
+                category,
+                content,
+                notindexed=category,
+                notindexed=url,
+                notindexed=mtime,
+                tokenize=porter
+            )'''
+        )
+
+    def __exit__(self):
+        self.db.commit()
+        self.db.execute('PRAGMA auto_vacuum;')
+        self.db.close()
+
+    def check(self, name):
+        ret = 0
+        maybe = self.db.execute('''
+            SELECT
+                mtime
+            FROM
+                data
+            WHERE
+                name = ?
+        ''', (name,)).fetchone()
+        if maybe:
+            ret = int(maybe[0])
+        return ret
+
+    def append(self, url, mtime, name, title, category, content):
+        mtime = int(mtime)
+        check = self.check(name)
+        if (check and check < mtime):
+            self.db.execute('''
+            DELETE
+            FROM
+                data
+            WHERE
+                name=?''', (name,))
+            check = False
+        if not check:
+            self.db.execute('''
+                INSERT INTO
+                    data
+                    (url, mtime, name, title, category, content)
+                VALUES
+                    (?,?,?,?,?,?);
+            ''', (
+                url,
+                mtime,
+                name,
+                title,
+                category,
+                content
+            ))
+
+    @property
+    def renderfile(self):
+        return os.path.join(
+            settings.paths.get('build'),
+            'search.php'
+        )
+
+    @property
+    def templatefile(self):
+        return 'Search.j2.php'
+
+    async def _render(self):
+        r = J2.get_template(self.templatefile).render({
+            'post': {},
+            'site': settings.site,
+            'author': settings.author,
+            'meta': settings.meta,
+            'licence': settings.licence,
+            'tips': settings.tips,
+        })
+        with open(self.renderfile, 'wt') as f:
+            settings.logger.info("rendering to %s", self.renderfile)
+            f.write(r)
+
+
+class IndexPHP(PHPFile):
+    def __init__(self):
+        self.gone = {}
+        self.redirect = {}
 
     def add_gone(self, uri):
         self.gone[uri] = True
@@ -878,8 +1082,12 @@ class IndexPHP(object):
             'index.php'
         )
 
-    async def render(self):
-        r = J2.get_template('Index.j2.php').render({
+    @property
+    def templatefile(self):
+        return 'Index.j2.php'
+
+    async def _render(self):
+        r = J2.get_template(self.templatefile).render({
             'post': {},
             'site': settings.site,
             'gones': self.gone,
@@ -890,7 +1098,7 @@ class IndexPHP(object):
             f.write(r)
 
 
-class WebhookPHP(object):
+class WebhookPHP(PHPFile):
     @property
     def renderfile(self):
         return os.path.join(
@@ -898,8 +1106,12 @@ class WebhookPHP(object):
             'webhook.php'
         )
 
-    async def render(self):
-        r = J2.get_template('Webhook.j2.php').render({
+    @property
+    def templatefile(self):
+        return 'Webhook.j2.php'
+
+    async def _render(self):
+        r = J2.get_template(self.templatefile).render({
             'author': settings.author,
             'callback_secret': keys.webmentionio.get('callback_secret'),
         })
@@ -1084,7 +1296,6 @@ class Category(dict):
             'meta': settings.meta,
             'licence': settings.licence,
             'tips': settings.tips,
-            'labels': settings.labels,
             'category': self.tmplvars,
             'pages': {
                 'current': pagenum,
@@ -1119,103 +1330,6 @@ class Category(dict):
         await self.render_feed()
 
 
-class Search(object):
-    def __init__(self):
-        self.changed = False
-        self.fpath = os.path.join(
-            settings.paths.get('build'),
-            'search.sqlite'
-        )
-        self.db = sqlite3.connect(self.fpath)
-        self.db.execute('PRAGMA auto_vacuum = INCREMENTAL;')
-        self.db.execute('PRAGMA journal_mode = MEMORY;')
-        self.db.execute('PRAGMA temp_store = MEMORY;')
-        self.db.execute('PRAGMA locking_mode = NORMAL;')
-        self.db.execute('PRAGMA synchronous = FULL;')
-        self.db.execute('PRAGMA encoding = "UTF-8";')
-        self.db.execute('''
-            CREATE VIRTUAL TABLE IF NOT EXISTS data USING fts4(
-                url,
-                mtime,
-                name,
-                title,
-                category,
-                content,
-                notindexed=category,
-                notindexed=url,
-                notindexed=mtime,
-                tokenize=porter
-            )'''
-        )
-
-    def __exit__(self):
-        if (self.changed):
-            self.db.commit()
-            self.db.execute('PRAGMA auto_vacuum;')
-            self.db.close()
-
-    def exists(self, name):
-        ret = 0
-        maybe = self.db.execute('''
-            SELECT
-                mtime
-            FROM
-                data
-            WHERE
-                name = ?
-        ''', (name,)).fetchone()
-        if maybe:
-            ret = int(maybe[0])
-        return ret
-
-    def append(self, url, mtime, name, title, category, content):
-        mtime = int(mtime)
-        exists = self.exists(name)
-        if (exists and exists < mtime):
-            self.db.execute('''
-            DELETE
-            FROM
-                data
-            WHERE
-                name=?''', (name,))
-            exists = False
-        if not exists:
-            self.db.execute('''
-                INSERT INTO
-                    data
-                    (url, mtime, name, title, category, content)
-                VALUES
-                    (?,?,?,?,?,?);
-            ''', (
-                url,
-                mtime,
-                name,
-                title,
-                category,
-                content
-            ))
-            self.changed = True
-
-    async def render(self):
-        target = os.path.join(
-            settings.paths.get('build'),
-            'search.php'
-        )
-        if os.path.exists(target):
-            return
-        r = J2.get_template('Search.j2.php').render({
-            'post': {},
-            'site': settings.site,
-            'author': settings.author,
-            'meta': settings.meta,
-            'licence': settings.licence,
-            'tips': settings.tips,
-            'labels': settings.labels
-        })
-        with open(target, 'wt') as f:
-            settings.logger.info("rendering to %s", target)
-            f.write(r)
-
 class Sitemap(dict):
     @property
     def mtime(self):
@@ -1280,11 +1394,7 @@ def mkcomment(webmention):
         fdir,
         "%d-%s.md" % (
             dt.timestamp,
-            slugify(
-                re.sub(r"^https?://(?:www)?", "", webmention.get('source')),
-                only_ascii=True,
-                lower=True
-            )[:200]
+            url2slug(webmention.get('source'))
         )
     )
 
@@ -1336,6 +1446,14 @@ def makecomments():
         pass
 
 
+def url2slug(url, limit=200):
+    return slugify(
+        re.sub(r"^https?://(?:www)?", "", url),
+        only_ascii=True,
+        lower=True
+    )[:limit]
+
+
 def make():
     start = int(round(time.time() * 1000))
     last = 0
@@ -1344,8 +1462,9 @@ def make():
 
     content = settings.paths.get('content')
     worker = AsyncWorker()
-    rules = IndexPHP()
+    webmentions = AsyncWorker()
 
+    rules = IndexPHP()
     for e in glob.glob(os.path.join(content, '*', '*.ptr')):
         post = Gone(e)
         if post.mtime > last:
@@ -1356,16 +1475,11 @@ def make():
         if post.mtime > last:
             last = post.mtime
         rules.add_redirect(post.source, post.target)
-
-    if rules.mtime < last or settings.args.get('force'):
-        worker.add(rules.render())
+    worker.add(rules.render())
 
     webhook = WebhookPHP()
     worker.add(webhook.render())
 
-    if rules.mtime < last or settings.args.get('force'):
-        worker.add(rules.render())
-
     sitemap = Sitemap()
     search = Search()
     categories = {}
@@ -1375,6 +1489,9 @@ def make():
         post = Singular(e)
         for i in post.images.values():
             worker.add(i.downsize())
+        for i in post.to_ping:
+            webmentions.add(i.send())
+
         worker.add(post.render())
         worker.add(post.copyfiles())
         if post.is_future:
@@ -1400,11 +1517,10 @@ def make():
 
     search.__exit__()
     worker.add(search.render())
+    worker.add(sitemap.render())
     for category in categories.values():
         worker.add(category.render())
 
-    worker.add(sitemap.render())
-
     worker.run()
     settings.logger.info('worker finished')
 
@@ -1427,7 +1543,17 @@ def make():
 
     end = int(round(time.time() * 1000))
     settings.logger.info('process took %d ms' % (end - start))
-
+    settings.logger.info('starting syncing')
+    os.system(
+        "rsync -avuhH --delete-after %s/ %s/" % (
+            settings.paths.get('build'),
+            settings.syncserver
+        )
+    )
+    settings.logger.info('syncing finished')
+    settings.logger.info('sending webmentions')
+    webmentions.run()
+    settings.logger.info('sending webmentions finished')
 
 if __name__ == '__main__':
     make()
diff --git a/requirements.txt b/requirements.txt
index 2ba1fb5..a59b465 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,23 +1,10 @@
 arrow==0.12.1
 bleach==2.1.3
-certifi==2018.4.16
-chardet==3.0.4
 emoji==0.5.0
 feedgen==0.7.0
-html5lib==1.0.1
-idna==2.7
 Jinja2==2.10
 langdetect==1.0.7
-lxml==4.2.4
-MarkupSafe==1.0
-pkg-resources==0.0.0
-python-dateutil==2.7.3
 python-frontmatter==0.4.2
-PyYAML==3.13
 requests==2.19.1
-six==1.11.0
 unicode-slugify==0.1.3
-Unidecode==1.0.22
-urllib3==1.23
 Wand==0.4.4
-webencodings==0.5.1
diff --git a/run b/run
index 3d2b4db..6176617 100755
--- a/run
+++ b/run
@@ -3,5 +3,5 @@
 set -euo pipefail
 IFS=$'\n\t'
 
-source ./.venv/bin/activate
+#source ./.venv/bin/activate
 python3 nasg.py "$@"
diff --git a/settings.py b/settings.py
index 9aa6a6b..ff7bd30 100644
--- a/settings.py
+++ b/settings.py
@@ -4,6 +4,7 @@ import argparse
 import logging
 
 base = os.path.abspath(os.path.expanduser('~/Projects/petermolnar.net'))
+syncserver = 'liveserver:/web/petermolnar.net/web'
 
 site = {
     'title': 'Peter Molnar',
@@ -16,10 +17,6 @@ site = {
         'journal'
     ],
     'licence': 'by-nc-nd',
-    'piwik': {
-        'domain': 'stats.petermolnar.net',
-        'id': 1
-    }
 }
 
 categorydisplay = {
@@ -33,25 +30,12 @@ licence = {
     'journal': 'by-nc',
 }
 
-labels = {
-    'tiptext': {
-        'photo':
-            "Did you like this photo?
" - "Leave a tip! If you're interested in prints, please get in touch.", - 'article': - "Did you find this article useful?
" - "Support me, so I can write more like this.
" - "If you want my help for your project, get in touch.", - 'journal': - "Did you like this entry?
" - "Encourage me to write more of them.", - } -} - meta = { 'webmention': 'https://webmention.io/petermolnar.net/webmention', 'pingback': 'https://webmention.io/petermolnar.net/xmlrpc', - 'hub': 'https://petermolnar.superfeedr.com/' + 'hub': 'https://petermolnar.superfeedr.com/', + 'authorization_endpoint': 'https://indieauth.com/auth', + 'token_endpoint': 'https://tokens.indieauth.com/token', } author = { @@ -61,14 +45,18 @@ author = { 'avatar': 'https://petermolnar.net/molnar_peter_avatar.jpg', 'gpg': 'https://petermolnar.net/pgp.asc', 'cv': 'https://petermolnar.net/about.html', - 'xmpp': 'mail@petermolnar.net', - 'flickr': 'petermolnareu', - 'github': 'petermolnar', - 'twitter': 'petermolnar' + 'contact': { + 'xmpp': 'xmpp:mail@petermolnar.net', + 'tumblr': 'https://petermolnarnet.tumblr.com/', + 'wordpress': 'https://petermolnareu.wordpress.com/', + 'flickr': 'https://flickr.com/people/petermolnareu', + 'github': 'https://github.com/petermolnar', + } } paths = { 'content': os.path.join(base, 'content'), + 'webmentions': os.path.join(base, 'content', 'webmentions'), 'tmpl': os.path.join(base, 'nasg', 'templates'), 'watermark': os.path.join(base, 'nasg', 'templates', 'watermark.png'), 'build': os.path.join(base, 'www'), @@ -85,20 +73,10 @@ photo = { }, } -tips = [ - { - 'name': 'paypal', - 'label': 'PayPal', - 'value': '£3', - 'url': 'https://paypal.me/petermolnar/3GBP', - }, - { - 'name': 'monzo', - 'label': 'Monzo (UK)', - 'value': '£3', - 'url': 'https://monzo.me/petermolnar/3', - }, -] +tips = { + 'paypal': 'https://paypal.me/petermolnar/3GBP', + 'monzo': 'https://monzo.me/petermolnar/3', +} dateformat = { 'iso': 'YYYY-MM-DDTHH:mm:ssZZ', diff --git a/sync b/sync deleted file mode 100755 index 3da4833..0000000 --- a/sync +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env bash - -set -euo pipefail -IFS=$'\n\t' - -rsync -avuhH --delete-after ../www/ liveserver:/web/petermolnar.net/web/ diff --git a/templates/Category.j2.html b/templates/Category.j2.html index a6ca6b0..f9a0bb5 100644 --- a/templates/Category.j2.html +++ b/templates/Category.j2.html @@ -19,26 +19,26 @@ {% endif %} {% set _ = year.append(post.year)%} -
+
{% if category.display == 'flat' %} -

+

{% else %} -

+

{% endif %} {% if post.is_reply %} - + RE: {{ post.is_reply }} {% else %} - - {{ post.title }} + + {{ post.title }} {% endif %} {% if category.display == 'flat' %} @@ -49,7 +49,7 @@

{% if post.summary %} -
+
{{ post.html_summary }}

@@ -58,7 +58,7 @@

{% else %} -
+
{{ post.html_content }}
{% endif %} diff --git a/templates/WebImage.j2.html b/templates/WebImage.j2.html index 345d907..989e9e6 100644 --- a/templates/WebImage.j2.html +++ b/templates/WebImage.j2.html @@ -2,7 +2,7 @@ {% if href != src %}
{% endif %} - + {% if href != src %} {% endif %} diff --git a/templates/Webhook.j2.php b/templates/Webhook.j2.php index d12fbb2..7427cd1 100644 --- a/templates/Webhook.j2.php +++ b/templates/Webhook.j2.php @@ -13,5 +13,21 @@ if(! isset($payload['secret']) || $payload['secret'] != '{{ callback_secret }}' die('Bad Request'); } -mail("{{ author.email }}", "[webmention] {$payload['source']}", $raw); +$msg = sprintf(' +Type: %s +Source: %s +Target: %s +From: %s + +%s +', +$payload['post']['wm-property'], +$payload['source'], +$payload['target'], +$payload['post']['author']['name'], +$payload['post']['content']['text'] +); + + +mail("{{ author.email }}", "[webmention] {$payload['source']}", $msg); header('HTTP/1.1 202 Accepted'); diff --git a/templates/base.j2.html b/templates/base.j2.html index 7936f5a..815cbe4 100644 --- a/templates/base.j2.html +++ b/templates/base.j2.html @@ -36,7 +36,7 @@ } - + {% macro activemenu(name) %}{% if (post is defined and post.category == name ) or ( category is defined and category.name == name ) %}active{% endif %}{% endmacro %} @@ -103,9 +103,9 @@ {% block content %}
-
+
-

+

{% if post.is_reply %} @@ -128,35 +128,32 @@ {% if post.review %}
-
+
Review summary of: {{ post.review.title }}

By - at + + {{ author.name }} at

- - - {{ post.review.rating }} + + {{ post.review.rating }} out of - 5 + 5

-

{{ post.review.summary }}

+

{{ post.review.summary }}


{% endif %} {% if post.summary %} -
+
{{ post.html_summary }}
{% endif %} -
+
{{ post.html_content }}
@@ -167,35 +164,27 @@
Author
-

Photo of {{ author.name }} + /> - + >{{ author.name }} + <>

Entry URL
- {% if not post.has_mainimg %} - - {% endif %} - + {{ post.url }}
@@ -203,7 +192,7 @@
License
{% if post.licence == 'by' %} - CC BY 4.0 + CC BY 4.0
  • you can share it
  • you can republish it
  • @@ -212,7 +201,7 @@
  • you always need to make a link back here
{% elif post.licence.text == 'by-nc' %} - CC BY-NC 4.0 + CC BY-NC 4.0
  • you can share it
  • you can republish it
  • @@ -222,7 +211,7 @@
For commercial use, please contact me. {% else %} - CC BY-NC-ND 4.0 + CC BY-NC-ND 4.0