From 03e6fb6b22ed8ae5b43188f1662c5a72491a4588 Mon Sep 17 00:00:00 2001 From: Magnus Persson Date: Mon, 17 Jan 2022 20:13:48 +0100 Subject: [PATCH] Full ssl implementation (buggy) --- bin/device.min.htm | 2 +- data/certs.ar | Bin 0 -> 178564 bytes html/device.htm | 9 +++++ html/device.min.htm | 2 +- html/upload.htm | 8 ++++ html/upload.min.htm | 2 +- script/create_cert.py | 85 ++++++++++++++++++++++++++++++++++++++++++ src/config.hpp | 5 +++ src/main.cpp | 10 +++++ src/pushtarget.cpp | 43 ++++++++++++++++++--- src/resources.cpp | 9 ++--- src/webserver.cpp | 8 +++- src/webserver.hpp | 9 ++--- src/wifi.cpp | 26 +++++++++++++ src/wifi.hpp | 15 +++++++- test/device.json | 1 + test/upload.json | 1 + 17 files changed, 212 insertions(+), 23 deletions(-) create mode 100644 data/certs.ar create mode 100644 script/create_cert.py diff --git a/bin/device.min.htm b/bin/device.min.htm index af7f532..b98864f 100644 --- a/bin/device.min.htm +++ b/bin/device.min.htm @@ -1 +1 @@ -Beer Gravity Monitor

Current version:
Loading...
Host name:
Loading...
Device ID:
Loading...

(C) Copyright 2021-22 Magnus Persson
\ No newline at end of file +Beer Gravity Monitor

Current version:
Loading...
Host name:
Loading...
Device ID:
Loading...
Certificates:
Loading...

(C) Copyright 2021-22 Magnus Persson
\ No newline at end of file diff --git a/data/certs.ar b/data/certs.ar new file mode 100644 index 0000000000000000000000000000000000000000..d2cee3e6f5752006e130a7e5fff3f6afbd82ecd5 GIT binary patch literal 178564 zcmeEu1z22LmM-ot!J%*oQn*8K4G`Sj-8E8c7D#Xj7CaE#-Gjb@~nUVIj>cMVufo~H)JjuyrM8YdGIfRT%% zqlv9Ez`)qp(ZtCKVBidJb8}-fGO#gmG_`QFF<>;ZvtjzVmzEg=h<0}nXiRt^E*4HU zRu(Q!W&$AI-8KYF3?UJK$lpE)P+}BfWTpjD-|d9N1c;a$*ch5PIsxoV0U~xbpyL~v z02J-)oB<2~79fxdNQ{FF`ppGoW@cgGW(R8GAhU7-Iaz;e{_ne>00^>&4+R_=3^D)$ z6$}^vfdCNz0S;CM)@RT8*iTcM$J#yCJKGnZDnO~nV;^0VP_5Pg1`0QhZS!YOXUm}JdGQYR}=jDK`$xnmeAk32>{~Q zNv+<)P1!RVp9MxMjiZ!Dg@r8zhr^6EN1-exW)cLUOeY~UA{r>bC?2Hwx^DNO4iO^{ zCIa~h+r`k-i^oUTCssB)z+v6SpRGdrhDqi=HFv4sXiAgAb2wp% zY9KPko!i4nmlCB{d&><2w$E5d!ZGHZ!lx~GS7Wvj?pjxLcw|?x_QFzr%d%>36Q)>o zv~BI@Wj>2FxKl&Pa+*@#3QZCF`8wU7=cf=YeU4CSfu7SxwOYZS5nNgz?V)Wu*n&+_ zBmftE#^*&j(Y~UntV0Rg`v_21vMjXg33rod_ag5NM7cGGishR3N!)6$|9JdC?2C<^ z@(L>q3*zESox+ZUjVdj5&ldhHQ63|WFNl z*!w*+pW<;w*S5EnlpT9eBvpbVR+MSS9r>|bYV#)?WC%*nwUos&PN^i}*y^VmS=Sl$ zl=^Gqvd>2~w(!YwlGXcc4W_w~=J9j+UrJ6h^FLk+JsGNQ_L)~`#|V8-o`lBya;DU7 zkBb%86&(T+91J`=0NffF0B#P%0NDu zc`!i!yEXud1IPwsfq?@32?nGC(!jtyh5_LoECl!?LUU(ldmbhxdpm0jBac5|*+Yv2 z!6e8c!NH<1%E;J1W^?Z|&TUk0xIdR{5%d;|*4>z{z`J_HmtLi1nr6B7sa_{!9kpbT z9CeP8N4H--x2>9?m|{d7b}nnsB2b@o9Ss??kbLOnN`zNl8owi^BkM_#cc&2v-0=;# zFU8z#m6?$o!s(|Hu-!!#lMJIiWh9T1gPe}%Xn^%$$FX!+_$6VrXZ(_x{jh{ zKaBatmfLxDzV{l{Q2Kf4=!x=qcukUO@S^}8)_0m@aAyGxn~d`kNmbQi+0eXGUm3-o z@NRzfUFY2z-lm#l&jEJu6sx7Zcg+QOeJ7TNHU!V3anX;DMz$4r$|-^zjh%u^Ht;Ml zgBG7pFN}p%3)mIPB$0rc4cU2mQ2dQ$f65m34{LvzzW(LOWOhY&F6jy(X8bNn z^EcYUJvJq+(Pc}_K$sd9h<3$NvXQTqq{8^qPxfhhwh@rD7l#`9B}X|C`Y{l~Jj(eY zeJx~;*#O?}*)}6&j86ov-;B{8|l%UE)fKfb7K>yoi(s(?o@4!;C$=U&sEG zo8-_BK4$(G_?U&|0Utwk00SUPe(*6k*dGQM(EIOcm>Nh48owa6B>n?i3IRlja63BVlc4Xkh&}mIZaVC)aycWd(Ax z0+~6O*_gTRSe5fZ^S}G_0>A+eZ`eIYf+K@C5*!X902~}F%RXx;UAR;Wr)$!C5bMR2 zd{1UAW?9%ongA3+^ecVUiz*hTkf)jYaL2Xqav4%gQsblFQsXt#W1;M~1vRE>`%PaZ zDAK?~eCuEe4EKz8`>_2amD2HDwIEBvWo_-1W8eyV@OPDqY!VbZMw(fRj45HX&hu)~ zk3%B9Gfm4`e3mNi2yTUwn|Lg>OgGws1iKXp+r1^87Gg_rs4AzcJ1(0h>ny4<;-LkU zVJ0xURv$cIhYo7XcIcl*H?|h&<(qj!9b&`T7e|kKLyfRr%GMwvUgGz(heH_%?D+#Aj6uo)Q8a62uS+p!*^FONJ1<149xh zE+7aFGgvZ!L5x2~i;<%>qtV}w7N!SnN08&i2Xx^@AkAgU*G)!SC=G3>HXtcM9lGpz-QY@`rDD@}PY;UVrq(_-lQ&?v4w9 zQU)pl6<`oS=ne($AIyjV4h|Fo3O;~)*59t!-svB&*xuFINVe0#WD&!RS1a622`xg&M?!qATgC! zEzvD0IZ$0vd}-^no}m*rWw+)hxj0eH#fkm7L2B@3;xprqK8hbK7b=`Y4o72;>Irm$ zN%7dKR}K$TBU5&>oCDAYyjfT!W0hrRzk0L-)3+k(RH`RJv^y**_$x=DA)j@^?)76i zI`i8)e#WJFEuG=E0{>V{RHC@n%ojWiS~I34v+eeL4aF=+LdsRgB?|w9Dsuk^3bOnQ zD9FXZeWyu&suC%XDq;RjmGlgZZj5=8fBwUb2KpEOJske`sFI%`42ennPhj&GnuL{^ z?V%>QZ~kw)oIg_}t>08fmwA$1#i}r8Zrf_`UU3THzEzai!bznKiD0*eVPTXoJd%R? z;4R8g;n3f#3GXyE^-}cqjT+@QU5*I*VQmKyqN(XU?U74@W}fQ4lI(ubeB@G6Y{7a@ zt!S6Y91N~dys%ookwq3e)s#2mA!vy2osFZN^^Z;mapm79gj8E7dcujJd@~rfgeKU2s zL#tJ>ca-V+gbojK`Pj$svF_B=Hk+ZL56_mD&OdQ+l#b`Std<3e=)^=LS;Efo5+#t0 z7q_v`WM@#`I##<9&Dm_wo6;)=4v9s7CR|xzCHe}hq?}z8z?;O$^mR7Fcw=?8x%A5T zB@thK56oQPt<|~}K3_-Hd*RDh@B(^pid}~7U!Wa6v>PvB7d z=JZ7&=7>Stn?}i2wn(AZGO{xk7`FMjRu|7v z2&E`Is3*mX>}WL$kTwo_Deze8t^3Fk2~W5Sxde>lH=) zh=bzxM$D5{PcM$%{8gJoWI{53>vrGCSU_|j`)~^fm#QPPmIOl)PL9#DEd=lq-))z) zzD$w>UyO?SWn*8nadNujI&PhWb<+HWW`1FO=Op_wb87`1slnSz6rELii3xum4X|n_ zD}}!S5zgpS4GB+6 zp3mkn6W3I9`MjjM$g!-RHUbXs#c)=dGI>Lvt<}mT#Im|J7TpqbPdxN;5a2sV$nU_#5L|7fVHMsGLwIg;805j!5rF3n zANssf*)^neuI;FQ!FGmuJf<`;V~^6(DIrvghY>S`_(N-SEE~ZRb?qx+JK@{44bEf* zB8IH*5W9Wq>O2lj=1WCwWrQ>&SzpOb1pPNl6Gtb3gP6$j*gb(w`H~FhKytT9aTyPr z)7LvZzWV6y#~aC|W6G`0e#3~u>1{ulnDrM-42lK*GCs)0$^1JLLpOr-NcImVhEqd8 zj~8xV>VHVYh@kMG)dL=uQf5X0B7rOy3Kj|asfD$HE%Q(Hfq;ZBWaMmMZQ%q8=h=e- zdQ3o8R(39S79ckVC-ZMKibVWdCm|PSb5J*2uD^GJzKgcz7)uW3r=!%E1iR81m+lp|wAXy>@a-Lrw@4Fmh$m};#$ zBQLBZW!vAS`)O+NH236_3Hnj9YN6DIA?d(!!u45?cuJ6ovUl|NGe*qP?bLdkBI_AE zBU2$*5?@;4A7VF5nkmET*2?S;C0GDbU1cPb_~%QIKy77nN5iBij(!;3lvhZ>yNL@X z<}*3X#-(@>gtn$EP{89#A@5Jxv4je79uq48XuSD?GHPBw+wK_{u%x8yF*}noatNEu zSkol1^U`LI68$h9U)bPGI)43C1sd#yiGO7l_uv`dE$(IKf#xfXMTlar=pi{Qc@42s zBwZT4@^wM6!NIa*yUV~)H_f+p#j$~DyG^aqk9q&t>td=Ab`h z!=!gt4=j^R;J_ezzI9eXHpjn0BQP{hwV8jL@hKKo4H;{-8Tzs=ef8U`#m+UKxKpJL zKQ;v#^?eKl2OMC-s=HCsab-#JZsH{2)Oipuq!eq&OME)1B^ax)XZj#bqDc0|CJ?1Vp{#y8DP7G!POLp8}Hn zAU|B-BR{NPe&UbR@gQUmvdQ~c6rz`7aI1cvlx&FlDpAN8ma$~sq&fnMJSO`$cA_sk zFwEWl0+wU5y!b4;QT*s5jK>k5j2OvH%gtKsYFaV5^^3CDC}Ug{=kilaP=Z4h9V{R5 z;Ss$!PogzxITlQs+CS0^CUx+8+BeUYEZBH44}3ZpG-`r|hdUe(QSsPO*t|HSSx$2r z_k&e}|Il?(i!Qe006KPkE3J0bddQgoM`^9$HL>BGy*nDAq}Fs(4p)QOj*5V;+P5!| zPh|abM&yn1;f3L`uD}XE`Z>unwmz9c_mbT7glHYzq5-E;cW!HSBD0Bkd(G|LNVjwv zutXoPCr9!o_Tq*+qK==F3No{S+Gi<8pKzGN39BJl=bs)a~!6(oVmk|%Et6P)YUT4 zJ|?%L3=8#gO};roq)|d{dE6wMX-nxtrgqTVMXo*{tR7`-Rd-!QD>FStr>5j|mwjeg ze$=n7gLPmjiGBMKwx%K+H9}iK{5}5%@C5lv4P^-dHZOM@)fh&nO;Z~80V1pq8Ieqk zb&L^*SYiDe)z2@jQ;~8P;(lO1+h50iE>_MT(0`vBf)oO!7ifQAKPHTI`e5RR*9hE; z`|e>Pt8pA!y?>+u?guoWqQr~}+J7INf)TPY@U*jK#slKqZGgl?`?29i#zsU4z_B!F4p1r!^!kynVP@w1*#!P44jlmgkC_wjyUYnVD02c14p!;z=g{juw&YMI;ius2 zZ96#;;(DBDex^>U|J^wdoT(UsA!sy1#8a*^XNaQ#yd``_vKtnML-u$#guF{&i}R!! z?_A2fd~TxNm5azAE$1eHBX>nwby;lT`*qc$3+L&SWOi<*i*kShjJ4;GUuE9+vTX^x zNChs~uUWy|>gNq(h2JI3fN{IA?z(oN+0R;mL8h5vrVYwl*`MBgm;8D=ybfgWW^lG= zp9rBiOKaD#ZFCC8Ib;#1sS~-VB`WHzI!vcPVURg<(AKrM-Fyqt#}!tpz-2dc$zVv( z(M7Dh;5Kj8jhYfnJ}&qK;0y3;_mdUirJ#y{Dz#4PE<*kRQNq9{|A;|<4>3UxFf0(a z|0UaY6H;s}Bb-J`S0$Pp0^A>l1LWP!O*rJ#6pG5k?{Ixa1K=P>DP5&$EIN-ZmCOP9 z5?oP)%T#q|#-G+4c-nU>#q`6`EG1A5lIMJ%BOQJI623$($%W@5qGhPNtEdF7iFLS8 z1g~#W-*I)m!UQxu=Q^ZJ$%a7&gzd@Uen;hwR_)h|SZ%j7%v@i^lDCKFF}!oHw6%IQ z6}9xsu+C)mvMI@F5H)>(z?mdSRaQ}4uekHV?^9c4O;8hg(l+N^&xGg z9ZPeEy&KTdf~*O`>NQx;x7wpx4(fkcAp2jpKxS692XPQ+kOe|Mu)vWx_MmhG)RiFj zb1kaIFwTd!90}xz{fEtj+o zfx*)+<`ngK=^s#{$vKbQpPDDD=(;JAS_?I-aH=vtHj*dxa)WcD*QZqb?NiAl!BT*x zO~~6RwmL<8k*M+y*3k7e?zNjk%RGD-N`|-6hh8o0(1jRmOGn1ehV=YkQkpb3ETWCU zvnJFK4!qOSXC%`DXQV1o@~GRT0SoC?Q(~iy`+C7UeDvHw(}Hu`jw)Lo*(Ecx&&wMK zKVQwsv%3zWp1YG+ay%2KHqhEg8{E%Q@qSJjX2(?3F&N1B_!{{cn)Rg~K@)*bM=5Ut zICJzZqS|p%Wxd+QyFFyr;r-p?&q4X~wi{Izncpl{5gA+-Z%Q5 zMh~Y9;T}iZPQQ@PGfI@rz0}r8%chYv*ap)#EEbrl0VJ&v+;!m#qf zGc&l69a|qe!4U?34O-K_DDJoD#Lm<=vs-2VAp|N%+Lr|$L#snbUbC(!mdOMznJWIl z9PWLfq5{826!+};tS038mgXSmCN;1kT~mcoj%)4zM#)S|5C_6jW1SFRw?Iz+^Q}wf|JMds^k9pI#{GiXYIN!yO7MN{NtkUAIx}; z@v#kwYtvi!D`?BiGBFO-(eRWYfdqBn?S&9YL8>S z58TVj)qd?pn{VD~Rr+M4plWkqKU{_@1uuz!M!7CDYOmMDUx4_~n4$}}Ozu`94fd4X zBxe*s_4WkE*m|#kj8ZD5<{KE!w7QSZZU;g6@UR{!TG#iZ1_%Ud*p7qouF?5Rczx?1 z2+Z-<5txmQ<$(_bUITIzw0`%2#+>6hOa*xnlcv_wTp}RHDlyha7$+`z zIwp&3NSyq6c@wO-pR?w6$OT3C;g}nWsdN%#%uJ!Z~(Ulqmq*Pl8&@b8}bA?T^Q z|Nhh`+8WVhX+>5Xyu9eU@!L=yoHXQr{He43`<^-*&=pi&^|z-E{n#H0j11Bc3~J-O=?K`mQF9XY9|eTyitTd6)#;g1JRRX))#(G=Pv zNTBR><3WX)zLxjfwa=Zj}i0tdHcHnnSa9H zOCz-VTqqPACajR71xOkhFk=GI@3avtCW4ZYowKu(v4OP-GbNDxhk_zhay9^!(3w~p z1C&jS%x&$g?aVApoag~kwnmK1yg=?Bx{BrZZb~MOt`0Knv1aKEt zvvag?_5kIjB<}q_AUEhAs66oQb)VB`W?=>WXXj?;*8HD*>VKx}#*ld0>AuS?p0wb_ z>qUepRgehw4W z=Uc=RO(JQzL6JASYpUa5_I--GUf!iVYfa4G#ZEu!4`OOSJof8nllWFY7iD4tF-ZR= zFK=z`C9c$SQ@Ly&o5Jc{HpT{I$U4?<5?d8k;gnO!pZ$l$#989(gXbVnq(olUSUWWu zZyE>{_k2t1D_`ip>{r1&P?q*D&j-@JI}SKY^!K*~;rBQMa+VwM*#-HaU04#lA7I`FIBB!~aNB!Lh^ zy8dhzzWLO!ZO}pp`5@+;$lxN|d#F?r+OZGky4_=K&AZWdEY62-0+^Zuggr~>Y60F) zn>Rzn7M8|qL3$p-r_{J#9a%YZ^>smFTz#i3L(}c(8UFg zubaJSsTvCn3^{3P80b#Xf{c6Y^G8Z*Y3)5W`KFC1)342If!p?%E@8Dc`ev2H-Sr!j z1$Gdx%#fc_sX0souG*v(!YgPRe)tvKe;qG4x!4}~6_7|EhB^L$7ogI;zbjn1tGE?- z02m6g59(r7Y%M%Zob3Qg_KW~efE}Y9<8OtukeKiyAUk)l`57e#vH&@lL7{Rs4pwfE zS+j6HX#S^<|7W)MxuT76RQ~w@XUK=ud8AdI99NCRKW-| zf8WkGS!^4gs2L^4_LUWR+lfG}2b`V~M zG|1ED3cuE^xq1lzD>6sS#D58%(k^Zk5K=={v3pY_uHiGtPCr&Nt#c;Hiltn$HD&jC zAY}XIRKJKpm3QTS)C(Oz`2&38PW$FI@HqPAvnd)-v&m@qidFIeAAA&fPycC|_+Qb@Go z7xfuZnMUADaP<7?jwJ$53}!Mf7CEL-ir{cCwa1F=vnBA7mpb^o6=P0lIirV7w#Fx# zs!;`9D6-C|j1IhK-4e$ZcG!pLx-W=Ro-3AKLrh~7Xqe&7G}+H4S6J-$eGYvhX^Fz# zOKXZv8cV;fPnY~s`pJ=17{xZsBYLMh?q&W}4f{XIQE@Ooj8j6GfNW{&hb^JGM^bD1 zV<-Z0p@tY{8=Q_GIuk(WzqcyV`zSl8ehyd2$;rgX4j^jaYyeR5aB?=Wxl2-kYR-SA zr4TWRf3vN>QR!V$>ThKFAh`LnqnHQ-E6C)3W~{h?tf1f~Ckq=p8^{*fSRXY1o6hQ= zIEd{u5$|xdEL&`iIgOSFw%_rb^=HYvvtm27?dwS)M3 zDL^=ksWXKu&r#@E(|EIlH&YXup3FZ~j{PpWAb&cDkSYv$tGMmY_j(j;+o(a&&NACE z0yx~}Xxg^D*f;JYJcKHthARZ{#0|z)2d-6LKn`M+aA4x?yS22-H}TXuU(2qYG$|8w2D_oZajkt$t$+ zE@mJouL_zx!peEa7~FS`;LqlN`}zGD<1AfzXFE20-0#5(KCuFqTd;is+h9Yj<9nvX z@Lsd)nclk`mOO*t8e7z$5gU4uQu!{`G0ptA(2JvY=3mHzG^hvRshf&z9bXUv9lyfj-z|4Vj$<$Z6j^*y6OJ51g;IGLgFPiDv>s6qt(Xzv-=MV#ohIZ$W zI6Z{4$STW|gtYVQ=f4cO^^uQ)&0DK7Em$BUPZfP2^;ejJ$t}2j%Q;kZv-tibkwGjl zY(*G;!Wn|;EOat)qlx;9M0f+TIHB7hRt{l(4s&}7jWZX?gp}Rtw4OI>pFE@ zw(0Cb>7kHTZ-VLzC;R0f{1IlM2BsDUOifoixpg^z6hSRWvJ8wCQ+0IdKFIbeIy#0p zoOy2LCdpA(>eM6#n7p2C?vZyh=}Cyx5bU%SPu{M5Ur$j9!4n^^Wjpct%$+pFb@1#= zp8kjJ|EiwxpV&S#8~0Cl?@k>;kAM_n!%v1H9UqdGr$p^x;k+u+#R%Vc2n5J?V$tv4 zhy)ZsvL9NJ;GZG^Xa*G-E-DL1-rh|a19Gu)vvX+PZD8Ygu;G8gY5rMaq4~S}`RbS- zl5uJfL7cIfAQ=y_3%K{*rMB7Yo_=ks!Z)k+!Ycro>3e2U5RkH zKJ2d_3fAg}LDO%1!CtFtHYc&2D0z^RiG5S@+AxA!MV|XneT7l#ZS7xz#F|WHZir7A zf)Qa&7hlc^^M-j)uK#b42r|+8#DYUE%ID>c4}x4{p_=Uw2A8rOSU3!??Z# ze&4}oCpV*@6pt@=T&6NlNldlc5v5%uc#-VsZGG*6FwqW=?&uj9S$$n`;nr z9*+h~2c#^l?{=u$Gw)~cIhprC4JfdyX|R4F;x-T#jgy(C<^G6YY?0M*cEPkaakQs{ z>KfS`O1!jYD*1H_UQ0#iA>NWUL@)iMoiyxJ5Bu~Jm&5jaJi9buv;>#cx3Bb@b~-R7 z!ak2BXsgCScI>*ru-^_Y?+RiX?9NOxyxbosO|8U*7yA^Q>4pVzsFQeEFd5qYm!epOcok|zJ8t`5W%cdvU!XazAs!B0jY{-B{y*W<@2 z3v;%mB454pM@I1cdqViHlr1Fpp&w99#-l&*!ToI7-^B}P#t#c9;>r3`y!@>R{O>%s zKg0iFhKR;mj!hfRH|cUQ`OwR>kd&VZ1J0f&rVGIg>|{5z&cM^RJ^x1QBV)o8lm7+W z3X%pldomTejc!ux;LY4O-XTAT*MnTBoB7)A=s9iOFSRL0M=RGT2ho+|-?6t6yAtk! zDW!9N#mc28qkQk^coqJBMF5T%i;fd9gs->!xcg&fX;WJZt(nT=Rf&f7O|u$(c~tnv z9nPBPi6PZvkV*X5$oxD71!DVe&Qbh*_{a1kJ>gZzVDHRmX(qu>@StjlT3l}& zwcB6zj`#_EgD%J(3yhLSJen6w#v9=b6+HA(Bz%3kaK;B4{~9Gr!yl2df{5Q{NlxW7hFLCsbRs!YAZNAi{HcR zmss7~q9*HRYhOHDZto`_gL%ICY;=H)x%E`M5wYZo9}Sw0SNaX*?&~js!G3g2@UM$_ zF!k2iJQUi{@V<}I5Pund2Bdvo8f7+4f?!n9QP?TWY=jfLXVJ%W@fyp!T?99DYM7xmQe-;Yjsd%e>O$@)Ti ziiRclIot{~jIF2#_o&;JD5`_bN_|+KmV1~FbFW9Ke|ph`NEjCJkiU1M4LTuy9PP9wYOa{3G6yp1m@ zG^HV}t++bZAw`nT)au{UTEuW2LmoC>23WxYh80PYj3K-dOlP#8YN8GWzRlpn5`pRM zov9Pzn6?x(3oa{L5<|zffU9hI#2rszhaom>rUPHlgFSsQlBb7hK=R>baaBnPbS&Hp zVi%lI2i_P3a*d1~zBkILu3#OX>bPd^@&8w~b^iqaxwwC(i+2`o zU5uz)M^f)K3d_BGA>dWXFSnCU-W-2qrM^p)g2vt8Wx_umEi3uv&pP#+YUXg zLglJnH2z9Cm^ZVPq@9@A0XKKOIz2Y7DTdTu`>`5puL}JZ1-ts>WTvxuOEZ68m8_7@ zM7a~YpgAaQ;6JKIVtBSmTVz_Zj%?fgy@1F@vfkei$(~C|nFmy&4-B1B^`ocMjKmQr74$ zk}Q6=K#IMiovDcvsChU0`fdg{2MY%)8<69EK@-rNL2ghyjvX}X;VwGI$^isb%>Hct zJHGPIysO?gtBB3>%Y!WTd0*M-`A>=y-Zg055W4S0=-TBiD|-obXp-E~@hvpe%Blgv z%db#ZziH(`Ml+qDFB?v9FD z-UAs96pD8rJ_Wj67bqN8taUPtFldB(BFM#AC_)r*By3+@V7)-%B)fM3b%VkwRvC#IeSuUWgs*Q{W-o`0+u; zLSwwaNVXTKoz0S1AGn`>NfWAxj3Y9Ni0{&_!O%s&n2pA0H9___Rs zeHgZ0)=Npl<C=?>*wP)=|}@ za8@y?GO7J}eppX2OwHTw_{mXRdhfXN*(?(g`Kzp zk5t=B2NVKS`3;m_xtcl^l-e#lpN3qI1+0=~50OOa0FlHN6P2=+qJlTA`3yuADESDa@l%GJeD|U5I z7Xn5fDLnmbEM*1L+(As_RT?5GpNuy2SN!yZi0NjsG{=Dwguec4vt%0Q_T&kCJ}C9P zfYg#MFS}d6xQ+90%VyjtqFX8aC`HZ~CO!zA09V9kYmd6r&bhwl4ijn@!pMvdAetkX=PjJ!=`52KgUbOCs-a_bkN z=M<%F-rdVeNxg@|>@Gd@@8J|s;SXs39Vo`j#ms)kDfbTI&*s15EB`;I{C`gQtDN$W zi&*{9!F^b_^h@6PU&AqfOu2y;lEU%M_+B;J(Xmw`Ls6Xx@oqLZM7k1HMdq>EYu**+ z*_(EjgEcMVI1U!v?OYbOi6zmRR&+YQdVWjW=gFfbSD(hSSB+_(4=->L2Ry!|HYvM& zgx${Q5V%r(dyym2Y|PSlN*S0%Eqnqf|A>i(K7fYZARI+EBDxSqwZ$xnaZNYf12gDM zTqrXZO!M7?En0w4bp13^K9XIK@;&!gBf2OnfL^;IhFm;7U2$ssoaAA)>CDHG7jN@S z^V29%HxOChm>_6=no`D?E&C*gLPDjB{PlhK_L#r@+=x5{^pUmPiL8`q`0(urBBhYz z&9lHx;W9s{!66@GspZ3OS=$w|t#m|dRTU;#?M(*>$3^zAMpbpwys{Th$beetdHc{P zoe+?c?}CzF&d$tkX1V$~d7q>}wTp$X)f2u-+njJ2cC46l5nU7ZUR1O4{+igt|AJ=I zFDAT0)}+nezmDrlgt_t*l1-wr_>v5!k9ZbGf>6)2eiT1z8oeT?iM(gICHS^Jw&q+1 zApJ#et=Zhm;qC^AtfYii(?lYTy!IOg{zMM}qu59Xl9o>?d^ zhn#X>mKyk5?HFhgMhT9)6&Tq;LEZ;TJu3ZH0CTs-lpIKq{8ItLjCJqjf!3Hpyz3|; z1W+`v@MQkI^5AZ(k_l*yNE6VTqpOMIZ`1$o0~L2AsBCvNsI2$PN^yfY=)NQs)CBtf z&p6FLxr8uE*epya&b5Vz6iweko*6O16gAbebx zM&u*LqK^u@;im4BZrN=hS3}h%8-6Rh$5u&VGFk6_Qc~zpzbCIwlso4Ph|kMDw9o5CQ<-SoYSH%FacsJZH+RCYJ=NIVm)i6U6OZFiaZ z_AypmjT(vSC+_seHp@o>r|iblNQ9YzGE6cui}Vz!HZf1Os>vf*dhNtU3qrk!2Z=AV zL|zRH6rfu6BI(wrNkr~X)gU0Mo8Yk4lP|mBdG|>(MtjLKp}AFrGnuCt_RlMvZ@Kw;iuH;gRAO|f=jA|ex7Sl+SkSgeH%;6@|C zPBhgr2q)+70_c65C|QUQjSz7B!ES3@bwN<^q?fdD%%Y-Xf#0MNg;1EpSPWf}f{jwXO$f{@QZ@xfwTK7cGOcKsNNzgG( zOz^X1xCQU{+$T;_4ACjFTACHe*C9vDZ_|S%yTmBe*vtKagO3icNGMn?_p=O($8408 z?+-n6H`n`N1Sdsr$l54dFQzvp0j}hAa4x-e8|MSL^vm6UoOk&Tlfxg-#eF?4h%V%a z>%%%T5(I5OS+rVeODPujJ=SsOY8z7yOpn$)%^pm005aZdd_Z{)3cdY~vtS+OTbO6v>%mmLIa-#FNTX++^wZFA=lJ|L z*Kt2R4?TRPAkd7yhz(i5;mrzeEr~r55|s$m(Z33N+;kkZgSoi*>QiJkD{339ET-Hv zwyJ}ZV}QbG66^D^;LJNUvVJF1&y;Im#=`7_jkz(TaI$Rw78=CjJeh z{34A5`=jAQryI)0uo4tT)ZOQ&Q&v|P%&Ks$O2TC+L##emF#F7+kXQ%mn}?Rjh3J(p zS~~DQz;0@M%?@GTOL1l4dkRDL8GB_mZ8CCtZls-i1;>AoOJd76#72YQTe>h-sn1|R zxv9xCXIXj?|0Ye%+!(X^qX4bVMm!e?C;VPXeA1XGgov2Hd~aTI-00AZ@ZukFtzXSw z_-A~<%K4BlG(dbI^dqhX4)I5#kbA%ha`MbXK!P7pXDneC4|@a9Qolk<4BT9-%p9z& zETGjxel8@4g!9{O5$n57EPsdiAb1B=M1qtD@II;dunGLH{=Pqh?ujnlvo_c-ZkHmY z$HylY%eyS#Guc5T%NocHYc4Mow>Ak4uq7LbV0&MemVb>)-Tb5<9TY(0l%fiAD`UKm zM8_#ry)uaOeD^@Q(FtgBG{*Fz#%F2mB<-F4_tAsYXy>qH!nk5Bzm4i+=HTpSS6x1t zb`eT$U*g+TSfd4SnOwe<1WEP1EmMZEo`k^+*ScMx!qaG_Xz+LNh!RyWr-;?7dyjrV zD`b!@)JM)S)^@<6fF|dA92B!1I2zF;^FbS24wnBbR#+@T&Zg5P;`M-_zF(d_GB&kHmwJ}9h>dFo zBken8UH$Yu>%761PRm9DD$4|s3?HK=xZ)f5!*846lQ2(=iqMyDK5?dDDGDAh_8%I= z3}2gBO(>RrFn{+%Btwl|$$ekx+&~!CxO2iTS(XdgsMxTK<5iXu0`duIvvbkYO-D$n znJzsdL!++i**Dv)yC*hPwm|c_?s2Me7hSI^SU^IiD@)x|Yx%#FDD3fbn>UOOI1x`d zYB-bqG*_2h!u?l*LrQw2Ck^F1irn_TJp^@aP301b19@A@#OQ3}ukv^jZ z_UZ?fiN7P-;n6COofBOWg3D^#CK|t%uNjvZ!b0p_?XC85^ARG^ebH6(nmevsFwS4d zPCsgK{re@E!<6@Xe(?`gfn`yIsF4_!WqZ5Co~01dVK|RnZ;F*eDd^<|Ybx{QUKhNH zzohN-(q^ddGp(sD(8753vKrpU(B1x~&{DsK2*m^Gx_6Vp&+${d;Gx?)5i*3Xts11j z0D3V$ftt9h2sW#c^COL`-=5o&2DF)TKdnko zH#O{+j?(>fK@C;mf$f~w-%3NMY&i zp>C=xGYpGo@&TG_9avJeBF6xQM0q-{aZ}Ri#hAxrl%Xsc(;OH7_`%6c{NaF(aAtNryI>v+&8Nq#uTp|80-bsI@`mR_Gu80T@x~21*=r@ zU|!VE#2^9FpU+v3ONa{ z1Ase$xJ1XL+PC(YU|SU@te!ICD(BGQG8W}0?`b%+vD%+GJ+(qSV1u2(;hy+P<7IV{ ze#F=&k3)xc)Ze?lb#3*IF)5uPz!vI@B6th~f6$fB)wexiqCBg;dO+t{b4LE#>-^PF zipl=hY}Sk9Oj8*6r1dIq>=560;31Vf2|=`9^c+E%G?#1)z~n|#-?ZlW-pBdp* zL6d;SHZ%0WHOdngghx?k(fxpI=t;fjw>~o^1Ea~QNjU_E;r7K2ULl^po9NTG*J41` z&Qarcrbn&1aVekL_dY$hdd1`6`(A30e=#&Y11R&dJ|&jIBhuTdP|O_l@zB9EVV^}^ zuau!p_mGj{tUjuGQDkNlbgpUEAc1RTpmBvPw_+=>VgI!ZM0w3$E8&x<8@OGu+dZ$` zW|BksPFWtoXZ7i?ATt<%T!f;kb{k=tY*$KhoMYgEAOgq<$M~`wOIq5f|J|6O& zBcxCIuQX~+Q_|<;t2j`woOUA~Hd&s>6j#E2)Jvb~?+zCduUMREo1s)u|&7qE4 zN*EUA7Y@Sc{S_F_uX(Fc$y|}zRs`ZfBEotC;Gh*9bxgd^!kjXblr>3cMX;zpzC^7K z@xtegttHaWuTEK`wNTScj`0)$5HcWSSNrNF$&U z2?;6b?rxBjl2nk8?(R+z5D*pq1?b-Fz4h#K&ikJ8f7kbMT`H6HJj}t zgeVnAu(!%iP5Ehdy7SoCV92}N#YoCSz$7;4g78^b;6~tNB+^%9I{j@d1H2qQ;im&! z`YM*6jzcIx&HW{EShjm1qN`C^QTcXi|%W1|qR6?xT91#MUQvRe0gjRtJ`*Du&h z%+n8AbQ0}F5bKcG=2sAOnz9t*`n<9BP#JS$M0;eO%ry5VE2)byDh#!-S)B4>4npPA zA@iO2zK(0^XlgTY8x3^7mVAWgk8rf;w%>CsD}%S_M}6@|bN1kH^P%px=x{oLVv%{N z$lCA=%e9L~P4lu-#>a}Sn1*uqhBC1Co|_=h~SoVK#oNuD`kM23nO7cv1)nLGaBN!uK@>f|>T<%BR5Ij1{j~@{$ z$;+$!sK@};3<2XJ9Kaa;P2CX74WHx3@PGEp|Bk;=&(i4KLm?GWJNJqTzeGK1dxUh% z`1M%q_IO#Kfq3p(v9_y)f-9 z3NEeC%mvwLeJysV<@l5i+s{|mkS-g{q^9K^Er@sLS8x_}#Dmq#K^@Ua&H=W%>Nmq_ zzEUOY)u7rBBK49xt6t6plk7#o_&qxTT}8@hrHbteeyW6V z>KG1Ysq>t2TAB|S5k_+6%BB#Y+I8zgqGRAn4|`#YMZieuhqAh65(fv-u6wSdb%6p@ zmG_YTvd94ff~Q5bHk#(h#~hTD-K)qrwOGbd^N(D@KOWD!?w#hB!&2ucBx^o;22NHB z1;GznWzDSLKTG|n_v0HS2w`CRdf~jV>0=Un>LAlgH^nS>vViL@-V*UhD;8Nnk{sO% z1Ipn8>{xd8nm|DB77nu$kAy99ru6tZ;aF^-u}Y$mgTjRB&?Rv!SWapOS*#qEs!Nu= zyUhRz(GVkjGwxb2(}f0}FKka@fm64Br&hmuM78rbd@$HK4LgTei*qKy$zaa5pz0PZ z_s=Ekt-%xv1`o*yYMG!R*k9pAwPZOxQ3$bV##loREdN-_*PR91pDQu4JZHQWQ#(}Q zAZ-8Qb4LIVdWm;Ts=9LQrTyDzB&N@)W;#0woVt27j&i}6W{VjvD2BwXsuuCWAY8I% zhn1Rgk|HXP^@RLyVw=oAtEBpc-7&GS-P6d26bGJF8Sm^478QiGPOgicp8fv&d=uOh z{G;i84^P6O!wZWlsoa{GI>P{>~XU+DpXADd-C6QNsK*C|3WWQS=tP-QXiQ3p~%aYZZPGfm6DX>U(1( z8sE4$gaEAyyLHIL!P5-%79?9E95`}b(GysDR$3r$xr7nfpDQ&gn;<_B+K3#296Ovx zz?*4!;YMn=Bv06OFjG;b5nA zGxd*Fq~*OWR z2Yu|Vwn{UzW0u>ek2ZvTnfV2or1K++8Gi1@`qb!rx!>d+EK66%HyX%Q=|rSMgGJKb z2aM4?`UfY|Kf=)cT$mpTy=m7})-vYapbV^Qr+$WtE%=|zUo*0N52uVI62$g}GT@ff~WIAig^(kl6 zmxhrV2dLgBo4)Vd58w;jkI~`N&UKKUlE=Q1mJbO}+20sGF`5B7TUzq~ot77M7>nc|~Jo(Ftk@)q5DJNsACvsps zCC^WYbA`EFw5%1bQqnL8O)x?+TXOwGH6_(7N7Jf|m^TcTl}V8b;Ustayorid4WFH% zh$f5O(`1NW4%?ikd45!$!tTwf4iJ(Hi=L+L|R_q zszM_z6RND_(Q(MISo4J9&5jQ5VK!s#ISo%Q*#pbc2ib)mPxiAWM20Yj92g%MC2l8w z{uZ03@=Qi)T&a{naw%${L9dm6G5ftN@i@hH0JU;`RWQ-@O(9I zI#x-%BB-gN;8Ab~59ZZfb6H!u1e2%lH7<`=7Y+e*U;4$$I*s=1eAsDO9ns=^mij3( zK04?qm}o>=)CB1=+jZcC*2YIxdT=aiiazRQU-@7*!Zntt)Nr2SgX_+xMWg&OCxt!Y zs_RGklV$8~uVEygBBO81jxxG^>+;4lI@RliPQs%n_+0T2NAOpDK zxhCNs8E+2xDk?t zvt{n11IO?sR~(7AfXt%{v^%m#x6S66T5BlzYnI*26=u|okE8O>&hP~)I5SWc+#S)- z1~#qJ>4F`20KQPsq`Mj~XK@)w--b7a1udI4JCf;<7#ls4_>{$i!yDHlA^1SxweHoG z8drADkZuO9u^7rMc62@Dv$7Y-FdS&D5-PN>~^0D5SXZtp3>9h(2FBJG!GexKP4SqVh*q&qZ6!R%=<5!bG0 zNCeSchZ=28zmM!U=UUx+$gZM(PvKqI+}YO5+|>Z6Q)LZQ)BtMH*fG!%%QzV`Fx@m( zyYaOVNK6!@CI2i;^#?VL8-xd*bAe1}z>O5uE#3M4@IOBP-y!`91@d9|Tri8X*}zL8 zFK#)T^f5+^6CX-X|vVQZ2M%bp4FPx=;-{YRwhL|f;Uq)hd6n8(Xk zAeO?{K_*?bcy9`2Y)I`%LYa;eokC#IC~x0)1|bCAHn2eNUT6-E1QiuR$}DE^8h=cv4_ zfw~(K1Bt$VY%;j}CTCXfAhQp}(I;z29>$@-&5%EO-711E2H;QRnVy=mJbc8tMmwH} z)QG+3E(TYAA*r0(P6!XsA-;>cb3s9v(LjShFaa0=^uVM&u%{{{EfP2w9?+zqp&-p@ zz(GJDFhncgcEhQ89%{KE#DB(7ep5g&jq)c0ymjAUYy6cpK>6Y&8$bHK{_H|bR{K!j zY1}fIRo5Csc_#C?po$z?#FC~fKf(=dTYTm*K01xAduk>ejadN&Ka_=TRo%pO_sh5e8oM(ROBTdMZOZa#jNW5M)= z?J^65o_Wc`po5t=QE3M)YnE&kMoXnQGp{#yq;?fTkqu%ASLtzA0dZ_GI!JZU6}ZnL z#iJCZ8Dtlpua3eg!C|L-#j8{R+W^fq;vkU`=}c8jMn!T=gNjsPD5TOA;R;ft=V*B@ z61RdNO_$aY^PJV754j;#N?7TNmD{UfhkD+nxCd~7@#I+-A-jYVsi1a{-!{&Z7lI)o zTi%bgiW(o}Fi~$~!FE6%TWU3+^_=Jf4t8ZiRA2{tzTEX5q(v zlEYfxss@n#1IGD?pPx(d(x!c*frFLZ^}Rq%yN#m!tOD&8@jgP$m`J*{TlRXa=U%JmX2i*xrN z#bJ@QB~G3D^}hR-o|lj@mj@;LIr-59zEGUT?bDanc&SW6eRJtY_r?sEvG7!Z>S7I*#=0I=~WU_sw z7a(kub9ui)myN&U@Y`FDhry-t8x`WtomSp=57C#b{BoiIv*tlWN3>^&~Gp9;HQAyfvKY#TulT`s_?&VM&1?-9G59v0FDTg6OCJ1#K+Es)ImfQpm%2q)XS`1)%wPA4A#hGtRQ@T^^w*+0AkHf& z9y!n3L#$nwIFCQc>C1>LDjutF?p7J%CV)sLE$c*G{lFqsK=uF$QGA-C+pdDuN8Z

s&4lM@ztK$cjWIa5LWHOV|6|GzmF%SRKZ))BIP7ERQG3+>875K0m)y zdKZ2Xjj_j#h&`Fsz*|4AvC2SkJ|#E$LICf%}u%d6CP5A_H=SxrI6T7I0Wwa7;YrW4U-QG zR1Q1CM6{S6!c5tEqS%Y!doBl8XE+2VgRZq@O5(nvXjL;Q$2Qs^T-v@C&u?3ygbY}( zY_HgYNiIUrrFr15X(FYTUP_Z+>nQ7XbNO*Qz6rpUHV@vWl7GLY*Qsee{; z_)DbbxR2Co06z%6??`<}%eyyDvWQV+SO#&j&tp%|r#DybF&L-BNaeotqS#4S|i2 z9shhU6B~f#?n*i}6EhQM;+wK9M_}LNy9V%1H_>$lTN5WnAn(@z*d^YYn97J604!$w z?KY{K7oIo+pHCFn^U2A;=`VBqcyJTPAFV~e(V>7UdxFBkx95c$!Y~Ijuo={yiY<`H z3>-3lSF!zn@?H769A6D-xBP0NP<*hszrfi8>=S=Saze$Eq|lC-hHHT+Nc$lDUXbG2 zI1^k_OzgM9)}|sUh!A{ScKOmCB}Vn3BIz?m(E+B*RLHM|)@&orF&@TR97ZGM>LFF_ zndUgiqoD_yc<{~1L!TDH>d$fuC3jc*)L_LEbbn^8je9+l|?Y|PQ$?A9^Qo@lh z+LriCbL692PU?a0Nropi=bG4Yd8S5->wD& zP~$!PC(Z3oFmYQ7o+Y8>2YMze(ZHq3miEj;Ie9|!y6VZJelFNJ-O1Sxt)N;uV}#S+ zyyOS61eaN3+xk`m(>P+H)ClJHs3A8xGrHN9LJ2@_cB(~*V~##+7ePU?3g5vDJsa?BrQE(Kb~93=hH|jjP1#x z*5_be?*=4mQB-zv>+-155Ak1>|mE`0+gymQrA%1yJ9> zBOE%Zl!3j0?VkePKg7Df>v?}qN`j-K-_=Vf|7gH1EC`fjy9tc|YbAgv&C15kdJ`I9 zzCZjA&ir?9^3Am*pCAhIQJ+jI%L`2m(Y&oFtdS-4Q4*9q>~BkDlSGBOAX+& zagV?0ICzHf>w%g%VJ57B@dVA4_kl*dJu&TiE_w>q#a(MyU2&P#mbW?n43Kn!SQi^v zJU-2ST=_NhJzX{?OFYwTJO1&ZVRE1mf7?PVjen6#BRWz2pq$Y2NYX6^yyJM-YRFm< zIoE9Bmf~YMI4^~lpCA!M<;9+SqvBKk0x?ZLW%57@|8nS2B~uEUZO;p+F_7rvI2aR| zDpn{EkC4@)Zg7pEiOKCk=98YZPW?_C8la}vC#DRo_{7lo3faH$Lf zt*wWB1s2j8nDrN-O`LSmY1N+XM+;jkrws4}tlHL(rM`p(E9k`&v>lX^)|%8jf1QEc z@N&ZgKU9JHK?`E@QxygHMxhGTEF9mLCdnUK*VEcMpO*?&tJuv`3>>(vMj(X4N-h{Z z)wD+4Z^@8f$lV>Nb;dO)#svGqCc(jhTG88LsD8As7Y1H&45Z(r|O zn6t2d$Md9XnGAZwbyxpbx!MHi7gXq}VYuOf4m@7AAJ zajC_Frd6aA;_xB(WJ1I@FrF;)=|b}i>j%#`o|1OKw`=JNcP`JZymt52H=$CkYyieYi(>` z5A<)1EgVdYfTAAm494_MH=???Uaqhl@Am~l!3?-j>jC~FEC~FI1^DM?q0q_STyS$e z@CP?bi%ytVM3n!=-T2<8!NJ7E4(NaY!{We(sZM}LSzK8hfown8(>qxIVLl@VYsT;M z>p1|Y(*tg8EP6K+F#uos(^|iU6C@3!$LmfKWFkYXB(-T6crR0=>uZ8-w2QIrk7zQ( zpMHM&{IZ*C8wIA4jaF|6Y;-KG2cGZ{Ql*?D76R7GI`XYk^94a%D-);y{Rug7eSj*R zcF!j#DHPlnx!nhBlduwFNbRq=iYmpxD(AX_HQu&So>25g#&~7#cDxs9qs(`TNn3N;OLv;-lMR~w`pUxkMV2tM zzFXqXOswZyvF20`rQCy19`xd;%F>c4sE~B6^Wvp6i$V2>t zb1K;-H{+y&Xb2m3m(|?W9Ef?*GC1l34h5J@St;{4wi@M;IHN*hwTeYWw|yGk6A1|g zKDZ?@)fW$KI#6U0qm_iGgO+vV*lS7N>v0J{=xKTP=XTK+3lPq*2TV$w#1OKI5tF~k zQ;d+p`=G#Yp@Zuq+R+Ufsn|=l?NI)zSq;_)t&gCpf;tMWSG6B`>=oXDIGd)_L7F23 z$#6*v0(vdTdrIq0D}*@B__$exl#kc>w5CjXy_{J~4~QCI8BPkf&6G;xiI&Cqrt>=9 zYrbQ8wk?s88E0{YyD;tO>H9umG2){ zdo0a_F@5OM%qzk(c}#5q9EQeK)DiN`bh zK@2pDV2pTu5zw;g9e{kQ!dug6?{Gk^J=4yrMfZvQ95H6#Fyc{b8K`r>pm(NhTfP3H zw3GJ_R&~v%bJG(y1oTJQNv?)pHDJ#=<@$^-RVIOz*;!f9QII=in;cSTZfr7d9WRwi zUYM z$|1DP#95&y+M(rMB^N{VWA5vlvmd}bt^d>(dtl1sAJ+ARHAoJ7x8g-~IDwjAIVp!O z$MJ)i5qd;M3&p}#(}GZLnwD<7suhf*R_+IlLt0gqSFftXh;zOWKC=H1o8%Sdm~i~= z!*lzW)RbQdA@~Tgrjh%U{0%)1Uns{%6|3j$8bD5emhF6aY5Vfv^OWMbRsIj;AqOH4 z@jpVIvA9qfLv$KkhW-kNP%rkW6oPrPzar1VcjTD>_>Ka6gR*=BvV465eg1c_M^x?K z1t763ku0G=fqx5tOkDmU2C*JI)#S;G3;uwI>I}_TbH#H>s7SdNbVj|n{BgXC9Cqi; zkShKwz|0`t6_jEDW*+^AYUws&DhkPw0(Mu{ZQ~`SD%5UAj{&ZXw=ctD^wKij`uV7=?^{$sbRK~y*?-)ZaW^>Ud z<%V6yd;>ViZYI`8I+fa63}X3N#ltT!h>IOa$-e!%?Q+%uJVllMEaq`@hVu3MBLw{j zdLWRh(En(v0u1h&IM_Q_INqs1+_osYf3$)}!212-yOWo&$;~}KnxTOs5U9}KkV}BE z5n^#`J3|BOJE`JZuj#Iz8L*87P`w@)BVoEtECQ=0Zgh>lM}q%Pc*wuQxe~oue7$YQ z=#5$J)0|E5jT3WKeaHu3c{QmTCxoFDtS`SJzMYZ4J+z4ICH_iM0*!l6sa(SE0lDK z)R1{`iSH;GPNK!?)-xptL4I*5B+UKv_Un$vJL}>n^1FR*&H5GHi>EVvt==s8wsHPP ztd}IEyAcjq{CSH2tq*~+mhoD`B1I^e1RJ30?~*=lLQzGR5WlNerc@NJ2C|$Uue2k( z%(RDl`kpx0XV_igMa<~2byeH3dbUc)uWE8lO{cqMWCrqq>*Br;$(iW>J(BVl>4RVM z<%Z{Hn~Z?-`G8fwJLfJlS)C!i&Il9?Ag;(Y8;7_+m?o( z4w#!A#$_ns`S^w9naldXOI&%#hY{%6wr}q+;Ahnr|94=(Z4?IZ9RrwenpXhH1^=gE z0Pq0$H+|__oMVp+N$tqXmpxp{yjo_+CmQO%4jc(B@3{r5>87TrJdi~QJsTUcKUJ!o zj)hng3w$CdMSDa;rwTqP(Xq_Md2p=F!!Obt%WF_7H-OlBMEvkEl86rkUQqs20tS23 zu;kNh=P!6xj#U?f#jte8$`c(JA`OB0XD?{EW^-9oW-cA@&Pg!|f}^c`OgB0#pH-5d zECq@Nf5Y{04k99|!iRGt*J?Cbrc>$BA2Y?~U+Gt2af}AzF7SEk!j(gmP{&zb+Y{^b zAfxfshJHGu+Q{;ru9gg%J%Y6eaVhHbDel>5ni9v>W!+n*M^fV$$uGO{KI!OPLN|CK z5>5IOevje&6CGynS3cB&pSwIV@UuiK!BO4=Cy8sj8hrmV3{d0!5I4~>>sbA`wLI!& z(!<0n(5gx$kOtXxd=e*o@AgAo3mS?F?a2qTqwc*YiPX!1L5mO?$R9Pvjh{;=S5QC@ z_KFoJF8WpD+h?YoRXkx@cnX7tcbaVjk}$bh2xKcNN@z0+Y$gX zTZ7wR2e4HkFv7tG45;1|UEOpp{B8Je{?@;1DKL%jAKxdQLtN{}n+6}d($=&{m- z=$R(hJSxEW<`_W+p##u*hViotvN`jB6t910G5FnETz}s9QK4Y<10_HMFN8orA%NYt zL7@M%{%$w>=ir1fPtJrYR&ot8_DCQ~?=}CfI3kAx^ak zuZQUBuZO<{37}4(k~K-RlN9Gs(SO6dsFb5U1!$3cMU7@{75wltJ<<6(F}^+FG2?EN z*i_T{48u*FljUFGgtN2U>uL<81_|$Y+u8@!4`-1_kIiz~}15p_4 z>Y19pNo*wts<{ZcjLksJWYp90Nk7eY*B(qfnGB!6Lv*-hQu9K{X_d@XkU<4WWEl>`#J>HIx zGQIVCK6hLmtu>RXu!2_S#gY$uRG;vZnD<&!o#-i45fU z@a94tXO@=0?H>R*EAhAfbTyT=LO7swHDaHOAg)I@u{+WK_-P~cxb5X&| z0dCPM^G$Y{)F}0Rvc@2ox1F#b69Z|eWLKTqXFJ2@mR7T|H3rEwoS0^Pz5#4z=2t9N zzUuvm%KRc8{Ab|$J^O?cq_%A9dPvU3Bj=bxG`X_s?oIm#@wlH}AaVn@#1OoI8)_E> z@LLcd)9Ejo+26@mt_-(1CE&)&VCukVa4X;FWa7vOu(^xx}qR>cck#|AJLL@;i!0+Hu+Ccjb?y}`Hm@`M| zIV%-a^f3gSJlmQ+CFtcaYS?E~%fkxZ4u!EuJr;MKz#>P{s4(I>2S;qOR%nwAw;06N zpzV8M1g33efv%u&h-sTUT;W6oiebqJT&^pxQZEV2)a@)SBZ_Hd)ZIPQNrwjXjKspV zHMj#Wn8giq%@A>-=f4zKeUdP6B-4lhD{L0oJ(W!VsPg!;e#I{?$U(HJGu_If`*d$J7$9)GnMDM6q)9)xE#`Q7#&}fZ=!#@gmK|=YWZ^As zj?hiW@z6g%tQ%|{V?YwL(y``SR}{D1sP)04!~N*i9ATXoAX26jBKC^{$QPcN=Q)Es zQ@ZG3zSua}BP}0YQMkuVxZXT0Q>UX)xz3rD4>jP@E$5XAYq|45f5u-2X4-yMefsMT zDiB~GAdUC8qZ{}0{&plO`kVWS4l86}?POtN=U~Ew4nPH(0kHfZPT1Yh#NjsHbWgJM zw+o4XfBAMtx^+?k!0rpoOq@Xa`b}>Y=9^{=%r{Xc;P5{>_usj)xe!gHrAfT%+msF| zweI88t1H{_&#Efdv?6G!Q;e6gbq*?FA#LWU7zPb<46j}V&!X*d?vbRo3(|rrJq>mp zBLLRaGzQmN!frWkqY4y`^uIR@r{9Q#FHjgQQs|)C{ZvX36q=GiP;Az~k1%omSqYu- zE&hbP{ZV8)+Iy(Jl$DwHEFP|t7yFGL%|(PH&_~retoq7tpPT!fspWZd*fkpFYE_Mg!Ay*~Ylin!0M&6BHGG%@u@+1;% z=w#}aF7Ev;+dyusL?ARqz4gJce0#3r&zeeT~R491<6y1J!AIP|G|j zKFY~3eC0dOY)M#q$TRVE%l83p2f5I$5m)h@-TsWt{0qC~`XSzNcXq4?o*gsqd`c9A zt>q2uX|b!w4gIh9N5E9~AK!0)$vu}+Rrxns4myH}g_*^TlSnLSYxKi!1ZwEq(2b3O zFWqcfH(L?Y@BL1HyF<{?5hy}zOe`sK-@62`-}XDbVGrN7N&=36VdL8`&HvV8{GDaL zM8X_g7k;K)6?9Us|M>}8e)&9QTyV+h;3r}(s>k{W7tdykG2@vHcxtPt0zyOQGvN^Y zu{|QA%0jo?m9?1yXwHz6nAu(W7Z-Snaz0poAvsnuSjr@xB3iAQxxz6XMbpyz{1}I= zS$rUy{j-(NcqJ#_8~lzimYHcroGU8innM4{4qK6S1GWULD~+@lE;dsibEFYzui+hL zGxUceqS(6JRD+1Khc;~BdL%uWl31)scY=nQHFI90`=K6iVW%f^J7jNO=FLoCGdY(( z_aZIl2NerEqjK-5nq61N?(`-=s(ckwpjOjTop?}EcvSzch(8`{_&Pgb4@M8i^}8m| zjl%99eX78JbYvCX%c(ex>GNZvSA0=eNRobH(}Vm6C+nvd{Ba%L+I?>{Y|k>`@-LwR-W> zp43ya+31CU)=6q*f0C%uk(5P(Jrv-(%5{@mp*P!sQxmHaKZ3ntAbg*b<4>| zA}a)TXe=KN&tfebkB?|#`uH@DfgxG3V%xfyeSQzU;5;p7}cg z@6PTMfOhZw-R|LI3AiV@%y!Ml+BzyyPNnbL{moJGzhU>{x5*-4jENJNECMFH@9h3& z0NluLhySg|_&d9w*`i`p;%9e|431?zxv(T;QhAp7Qbn*78SYX znQaSo?ls5h_SCAUrPuKWC%po84@O#Jo5q4^n$p`GG}WFw;vYX5fxDvmkb5|jTme27 zsb7B_lU>yk5<&zR=qO+?WGTl2a~09t@`d9m6k%|0;D>0|&I($=uTYE_*r&U^xUxCo z_AGg^ZWhnIE?#l3&Hd5!y@AUur$@f*@tGO=6VU^i62{ z2_yH1_Oj zdl&9y1^C+>tm(?V1|>O46;k$Cfp58cs?hD(r-u$t;aDfMWWGVC<-DE&bY42FCQ#r)k=y~43KA8?*rhVU}yp*26-XC!T&q9^n-!>|FcQ6 z0Lwg3prCL6?_i+78gE|+5K?eM5D46@<}wkJgMkMA$6vy$)Qd&vAu*3Xz+a;{W!4%h z>6v;HZOr3~y2JN(DZ{0Q>wwJ^Yb=6kp2gE3g>y=UN_I7OfpbFZsm^-C+OGQO4vP{a zYq+3HW|1G!FR~w7Q*-71i$>Bn+)})f1gV%U%aP;nJ{bOhWqQq#ZHTrj>Y;o>9reyb;SZ5970t0xmD<1(i z42`&xSL<>grLtZU&Z5LT(TzqgT*$MH>1Uq&L}J>_xSL>PX(AdE5BlnM75-M{ z`CoX1zuQw*AFZG|EEeUB<*Jt`C*}i?Hmw8mPfA#_ral z&R}jkKD-=*7aA|E7i6AA82@nLJJA&Wn7#uJd+pc1=u3hxDzK@I$TXQA<*wr6cO+Kxj;Q{@m;C7kKk+5|(l|;a(9z&77evzJ zl`2n{${{|vyTjy?<9wB-4QQutoanwfeM9uPufZnG!)Ystx)il`%|0u8KqfdjHZ0nH zwG^44HMaQLXkr~&e=N5xT?_W(M8ul%X@t=wf8pFK(tijJZ6giXmWg0vUXfr+s*9rC7;(|R@9I`rDO(Un3S(2h@@yE4DCB<@-J ziW~+KuutCt-zM6o&{%x3mjsITvM0DJiB&Hgj;Cv9B0k<`@$L-yGcM$>?461AJ`X7Z zXzwoH?H!!^<7OdhaaI$Ran%FZ%Z)$#lK*LA`zQR!|H32uoxL}446x2Wwd$=lk9sNP zd@c5x1P&(r6Rt|{m*BaR@?-9hXdaKvQYbvDp)&eyU08CF*M=$HletCS%PP*qkYx(> zX-0U~fcaS>+^Q+U#cxx~eR2LA<@-d!atlxCMq3#28P|&&UUH8o=hac{q*{UK$LL?n zlSty6n?;oxK&3?1LeIL3@&NkJimDU3uC!nR^(Z<4(K=D&f` z?4J+UX-0MCh=IW?=F$;_5kkT$TY)T!P#~H8x+(2l6^lRh^Sh|fzqmchk*W~m#BZ+I zZX#b^HliIsVMqQUL~$F+1_cGtH=~NPLy|DsV_MiX!{!%{Z9ll}BC^r|fisv9p^m7x22q@bH<__XyQy}ZcqLg+SqyW|JoV@VFu}*P8Xl0b7CJkdz{iH3uXps> zUcp{m5LF#lu066GsxuxPn-QNP)A_h6B01X*y-M)ORWMDDJPNVu)Cq>@#Gn(-hhO{{`NMWb~-D)$xQy2d|lRcd;wAc{u*; zsDBv#wSktRn0E$!=3#^p0`@+%{imS-1_A%HZGJ(UM=!_nFf`cR(!qrfQP8a&7R!SR zv#n}{2hHZmuE7a%SNZ-`-?3&+BJXqdyXkUv!G2UD3q$H=>8|^q7PvX^91q3>^0N8Z znjcMSgr2Jd4mQ#8G?+as_+is#aJa(rLZidL*I>nv|OmHrfg_=);z?%-A!13#%TM+ z`r~2;zHs|>%W8cG+)ZA7Uw>d_+LV^?0;!Sk?#Ja~6t4GolN;~R`hV&@erLskqm%yT zJxW-ZnG@fJC4qXFCbu$|z+~HR65#hDkv9_H_lE!Fr}?`*rmKI$ar4V~(*`{~bHUPv zFMsalbXYg;(TkknX$NWBx^-vWl<60{o&)9CSR1 z5)TIKgOM?9#~*ykpI-12pOOF%Dsg@)Et4nM6beS2WR67qg2t?*4Tsr907d;x=!wS+ zs!0UfWyV+0+Kd?)Ch3OgZDG2I8n?l@HD&iFlN%&)ptGt$Ddfgyp{D(dX&eJZtW_4N zWIY*fq_p1)Ho&*Hs!uls`Og+5FOJpz=r zQhn!VxTFzGy-c)LPj(~D7Lh!kbxK;e&O{5uov_t*6!nH47qn>AV+o7tW*RUpWRY=V zrn%GC_LMqN`WemA*szSR`Ur*1d!Zk`8Pz`DC22HAOXEpv%lP_CJJo1lU%Z6kp;;Ek z35cJU%2e^i4g-3w>o$?p9SZ!6)AkD#U}F6t=YN9&kWs+;8n++2P%6H9Mg$4-Di?H1 zp{uj@eH1_dqJZK56a`3bKVk@Qbe!K%;5PdR%uC$T*~MA!C@=pYIQidrhQFh}v~5N? znlCo3>qzkcNC6fs`)>;=7bDZ=@IY`i6?rA9~e>75AN&A^~7F~7^Jf9L3ZixYvDET^$rb`u?px_d6*u$ z_DB?&s;g(JJdQx1t(PwZ%%~l{f2y@qMFf}DyFKpJsDaHM%gnnaX$X*hFM{}v z$a9kFYSj8BpW}%zdpbe=k}4w{k$5~8L+`U^m0z}v3s^=%pjTSzH-+eh4c3|j|rlpX>Fh=>@mH2?|?-LyW}b3%x|<$ zqSr~RXk}Mb8u&u~?WCw)I`P+R!guYFIaS_pl*ymgEf|v?(0`gKu70qA|8IHK`%`Ov zqfc~_#N3fAmMAq=E!P8uI2Whzokee zH}<+|BOvIlZ(>lZ!Lv*1h!`!uOiREq#V14Lb>FeEnpC+M<#{74Q2s#SlhW6yM@>n| z7FOMF3X9D19?qwKepn88-gssv%gq<5!9}Vpve%;n{{BG0!^@Ba?pcqc=|~o&zTS5J ztHO$+a~rlaPtDND9M0quw-=|fqr~uw5Qkx@;=T@u?HJ4-{y*;CGOWsWTN|c3q@}wA z>F(~7l92B1?v{`S>F#c%k?xd`k}d(IBm~|G>e9!h+x6^s?ft#$^9RRqO>X8r@97xl zHLfwvaSl3FnzDB`N6PD_30Bc^7V+W6u1QrasICx4B(I>6^|eJv^hziedaS*6ZD#<_mNc><=lbNE^jNIoOvQU8eZ z(3{;Lu!q$n<>JBR$I*#()tfqq69GV5a#-uwajBS@uTmc(Pg3cazkD!?SsyBa9RXZN9;dKf_uN9g*?5Y0J5)YP z`Qk&Kcg8ecbu%KOf&*pIE{fCoQkV~6DdYoDq|zX6$Z?0}(PKl;`%}fQxQoBTb2@rJ z2gBXJ`>5^=5Y;Vx#d8t{ha+6t324SoHKqe&$1i_0x4U|iPwZa-{o8~?6jTKl3mriJ zksd(E*4Em}_P!(kn+^ml3i>~OeUIJ*G6wceR<>sJ0QSKhu>=%_>mL_Hp1-{iiswmwiTDzcA64 zNNQJj4ibIM?Zj_8(eBc$lI2~JQwHB_pK##bp|F++k54XZu2P`Vb63|vY!uXsNui2R z^F~+LVK)@fw5|13V);Iqvzo!3L+pI~YU2wVZy%)7z6F-PrV(+!pdp7bVLgb-#x@-i zYQygBoIfu_cu%*=F2Mt^6tQoi%wrU7CW5Bb<+9lwR{ktV>?#IbL&iA zJ{XN=0yVGqV0AO0#B!nJENcW$H1XB*dgRT_sbN(lqfV=USpgY}R#hccu(;v~R_`|W z51;Wl^y#1aIM1vypAqm^%#llKzgGf30KxLJ8(O zS&)%`yN?|iEk^7po`FW~^lhw`!p}0D_w_8aH9M6`j5;lG6QR5_O;@9mi6sZ|;u}(> zUXFetv2Cvx7BUTkwx%e38a>7J6OP^jnFJD^W~j-yw!< zvw!!J4Nb}Uz!pdYGy7zM@!f69xFS0x;yr5o4OZEmd;JDA^nKGlv*Ou5`n^Iai=dWv~~bxt8ruWVL^YWTkvarm+prRc9{F+wpE;PO=Ua6E<%$eq|bZ4U-J# z0^dOL0!t7F$ZvYANIYw5ep8pNQ4Uqm;)4EM8GVioBx-cee6fjLCUJ$%NciK_hw#qj zn0Rz&yAQRBxH7$F7nRWIp&x zQq5|yWWzo#*Mr9;^~$u=(9H~|;K}@qLvRjE+o+U;RDn6sC+A{@USOLNG73W9O<@-pUn6kHGE!FD<6Xw<( zS`n*h&HHo<9m1=(fvG`dOsX?!dCIrV@g9% zW#_mo7X<0dk;+G9(c`T>-L<0V**kR0yc!s>%`FE=L`qEd5toxX^KPxgH~5m5%NEpJ z@QU8nAA(`MM|+I38gQ-W9K${zRp zqVtY|U@fkgn?dTBI-*e~dSNdHdv~>J;!% z8sP>d<9a2hCl1q3E4J!3v6mPli$xLS4puJSSbbJo_f=9Yr!TxmjlaQZ1IQqJElAwO z8ejnGHz)`Q5>TkRgR;M304&gGIh)u>WzLUZ^9CU17sH^kO9Y7Ihuh2 zgw;Tvx!!6NKakN~owC^PkhVvcq?J89SLTe#OT42oPuWtc)Q7DYrgyfTx7*8#tdUKL z2QoL0&sj5rs4VJ(1}0JNM?T*DG`M5&tSCSG;alS(3nclKHUqQtc*k+>dvyBA-0zX4 z*f4yiy0JH@Zc}Lt{9`(OxLVO%kq8;0&38(w=@l;l?@(%4nwT2*xu z!5Y=+!-G@#bJ}tK9OoUZxHR zxUO9yz@~U)cR!_#3>&%28i3qJ1t{9}-m-iOeEfb)Q}z}q-4#(4WAMpFCZ?%1a%z-g1=!y)lSToT!M(Vp+1_g!_PV7J-A1f zzrmUVAj=PP*}*UY$N~)VK*xGeJWT7QFy&T7-khAe>rdbG|Lef=cOrrRcwqT^5Bn!z zDTjf7{f2tp=+)zmSn|c()^`=s5!E`%T+{BIC&N5}gIU3=E3-K!-L zZ{izktx($@jF6+Gfr}>7yQ0kE&rO1`hL%!`et6*nkq=J?xA%z)kpOqWR^%WTq))xG zU)e;e`(a0v8|)htpycMmPB9)4ZGwPDZzAi4Lox@)D2eC_{;j60V zPv(9PEKFo*TJA~0QhAH(+-3?>w&$Jwg+Q}~bIXEuDYOmgFf7~7ctLR(I z2aTXRez}~pnM1!ki32OLU`xPTb^y+m!^jKEUSjQRCz(jKO!r!`qJUE=^9G$_SfIt; z(tDmxv8~aFtim~|6+f0O*UGemVE;JZ!Y-C>YCh4kxa8W~K zX)9DjA*{f|*il>dl}f>P6r=T9YUU_r;?=in58a=KGCnI|oXNj<%c0c&^ua~Zp<3Oj zq~!9WFZu4j!Q7)~Wcyn7y3co;0FXugOMV0zD7qndz9OVU@5e9tE-~`thj>Ln@>|0U zBnphcT`I)RT*p!8+lw$LFhVAFCPoB0GQ5Cv%NFIKVf3ZEURyWdfmjsf77C z%nBgnA~hlnN|-%6!4#t$KPUwUgwCafHQd*0o>w|apWnQ_v0^wqaRpk#Z_xjs3;|rP z$J^9|?t0=N@(`YUIX%wqWQFvtIrrpaZ)+15XPpb^Mr(ui_lHLT$kkBZ@IZLMjBj-`&0~=Vn>*D(RFYmUS)#g5m z^XpVVg0sVgtrCeG7vLD-vy3af?TIb5Oz?lIl|XqqdHbKe*_KKZfbJO$}Z>ox(I5zn~Ko1->o>#n|!o6_mkLSrrTXUL#v0+(vTR zUbx|6;^_2q{xh)X5K2l5GY*_B2M-V%gyZ(DmO;$LRPCzQhT3(NU z_I-pwL(hyuz^S{6sWL1Yd1oHaz{`jR*CecaZC3e*FVR+rS?^j>fX8A`4*D7vqk zr&J?wV`Nn^Ay0c&6^J*DyHfDAW})LRue0JK*^uXHjIu}i$`-#QX(W`$A8jk;OwHRb2hIbw)${AS*7WKpBPtAa`twmo8Ike zT%>xU*{DWWu@U-{UPVk+(#6gbnow=z;?Jkr%7+g$Lc6d87W~xp5e93Ur)4|bxh%s` zEUw)4=*AYL%e&vyxD?`}oqP ztKJI%ZH&~Ug(#J3AN)*2v}C{i!xZQ0`-6D(NE8`7Wsbdy!}z9nVx-0+!9aWcxIPMp zWnAXQ306Ng1vVDWQS+S(Gla1#ux(kV83SPFKsZ+(LfwyEdNy$V=|b}bKx>kQu%YcwOl}Lc7_7-kW!G&u}|3p5uFwx!iLw}_M@I8%$GQj2+7<;1BdjqVI{~d zhkO*DDUH&rP-G2Bx)d;X@F>v^H!Ui>9vfXBn`1kOWN%1d?BvYAenIMAuv^&xZH~X{ zbfjncMt8eMYF_|Sn|?uRST)HOwJX^W^-F_)BD(#kI?Av3kD+WRSO$*)txy&Qwg7H{ zg_WfVK(5xr(&&q#F(w_xmqhggQ7KsgeyK02#&;sMcgbhKPlkVVK>=Wz4$vj_<**0n zar`&m?oS9^Mx$JcjdOSw7m?wFO*N?(;V&(mg_y1`T&(IQ&vfxVG{m`k(X70sYdJ<3 zuPurVwhRG%i{I{izG=Kc{@tJ-ryZN6QwXA}9@%jIqY=fchShd=(GhKT-YUDJcFekv z=pbhJNQ$g=G%!7$#_|Jq&7r(dxhl3#{CWc;wM>{7P|(C94|6~;|oQ^uiu=zAG6_ZVF?63H)%gD8taC2Q}dJ&YnF&tvP60H?3F zUalTK=8$`pVZrN33s$RDPYC%rVSjw&5t1kR0kC4;GC`F@M07=aWv%Z(-tlc$2zZ0a z7u9$c3C#%V9A}xKKNru*&Y=nc>2f|X4(V8TWvR5nj>mQq51;CXu#Fg1SX;mdAdpyi zNj@1xMkR`80$IM4wZ1-O23xJ^K1Jd!N@>Drxm|M2w>P_QV?%Yc{SdJRsIT{o}?%9`G|r@02(zMoei!*qpD36?~x12dar zCh_d^%qyrrfx-pD4NloA1U74n9KSSu{jp8(!kWNofR*1x>4{#rI&ylqaaV9^$q`*~ zeKvi9QE3DQqIs{~K1r-upI_2g600~^aV2`6xw!b_;>@wI=p%j!7edl`y_vd{d`|(B zD-OLc2z^Jc_!|hlK!ZQ7!|JkL{N_zHvW+pfsc{O?U&s}|yx<3N#XZ9hFu^D4g8+yz z-$AEwyCUuKd)>~?w2%yXiXy)kIm+?K4+51N6Kp3G>D)^(-{2ZsU7-rhh9ex;j_0m{ z2xu;Bi#&y72BCY`Y%kFv_~>>XYpkN&yz_dn`qaw;ltxuK_3>lou&QZ64C-i@!DriH zh?3TVW4^ZqLv1;+?X5vAA!{*iJrT+1spJODuH6E@<{FS=g&o1#LOU-5(6!DZ27n)o zkak{ZV`p?HbWTzS(`U8Ny&oHENB-EszP53CJ}t4xG<;>%A-e_?s=ONgiK0rt$(Got zmlp}GstXjnwF$`$rmeto>-MSOXtGg;H)I{|K&izpKa%HT`0=*2Hs9p#`_!^YdAg-FZax4^{&Ku(!%H?6>+g>Fo!xELi+S%wc9Tj zI&#V!Rj-zBd9VF**Hce;RP-Q4a!ciPYySpw24qiPdcoG2Mfc3ovgu+11u!3?d1!un+LONT;(DP zVR@udfX3MK$ytJ1z|G9_=99?o_}+`dU}N>|jyW68YyHDpBhlceq_jMNkS$jQ8@>f4 zxsxV>!}P)8{tD6UmF(E;e!z5HM}?PTpe?qn+RFGW?k((5rxx&SZZpyMr}$s+m4A!i zEc8EUw?aq)a)gXu5FEW5fc@yWL#H;`};{FY`qwmS5DbUgRT zLO538$BGVJ>9&AbIRc^t0w(4r-RUM4fRUSKmR9CgrY7cqTq1#^0fCr_tA&C6{feKa zJB@~(jE>|!X$XgV_YOvYHvo*DxKkWA)3I~0vLui;ur)JqHTgF82NVwf+jV!nwqKOV z|7lPspo0#e(*!6>vNN&WHNxL50Yf|Qm;ad$^{1_9^^`XTTplk#S5eay_Vgj7UzumQ z`=_Z8vs^tv_E(ahI(zh=bH~ysdOu-jhm@3D41jbD8fv4BlN$2K=WZ57d})0i7Jz5} zBH99*Z#)sc$-%O(&@8FlpT2xRaBz=`X*(jp3^@4>f&^5NdbE9j;G}n1X0Uo$^{(b1 zdXke+U*?&j@yJp{0#&0r9|)X2Mtg0{@XALN!x1=_!|^DJVyz71Cv9C)_U+~5|w zLi@|KFh$)^vWib0;qL1_X@&wyzM@-IPs0sALAukhY|7#A&I^)sw*`v2RJ-7OQaeF; zZ+_0Zs)`?XAi(pgw16Q%JVE3}l0HIhu+&}@ewD*%Fuh!61q|u$Mo=Gx^vw6u3H?T&W9oYZj~c0U9_VrS5^tXCT?j)B0g*)xa=? zwJ@R>w}(-Dk6vVoaL~WpK>9q?B(5Ct`PGSeqYD{2`n!cQ#xQ#M@8Eee$|s8^ zJP+kFHsz_5qR}uE2I~zG45iL59Hb(*kga=#zi&m~%d<3V^Ht(wDT*!{m*kIbhGZtT zWfcE;r@{xgA3!SWAsxCm>M#G|=YsGrwjyv=juYv6;ZHuyUr5eZ-KT*gp}g?+Zk#g#ds7Q z6rKoglhzo~T4uoswI*(j!)gK1VNN9!hzjWWYrQj$V3?7WUGxsyg@z=3%R z6WW~af?i4?&2d;A6zo#?f)i0EwyGholt1&jc&}h!0 z1O#c71D!PgDb%2q0)L7ao2W74_)Krals(~8CwQdm?MQrZB^u>3;^HywOk~-m6O3Vo zjsCVi!P0A*7az-4PhMUk;}gub=feebN1kv#jwh?6Zj~zDtDFewpLa$<#Dh+?hyY3l zdE0S`@9GNOC9xU&C?WlM=ryaB7RLyiYM^Af4Q$Qqk+p0(1Ik)OzRJeiw}ONIOh*)5 zyA~&p4m->o-(Gn(1#nF$yq0dYSrHz;CN_dcakv^aFd|AVtAHMdzQtu~yCF_sonXJ@ zhKGQyndi(dw$i|@^W3iXW!i_(Ah|zHF#m#W|GT{iFjDhNf%^;Fo(jOWul%wX!MNGf z`6@RcyQdWV$lU&mdzxjgJzow0p~FGdUw4o9LrSR_SJRQqLlmC``keWBJ@?kDbcSxM*U78Z2U3Yn zjsW#kg$<^FUjB=%{eoHlTU%rQu}=#`24HKGUu})+46@MJ8sTl|Uph?b%zlV^#ASYM zYov6<_mK|@&No|AG|)4?3wDf54D1M`Oe{?74fOwHd|$ge{ww4AU;Qw@u}0!txQ55b zrxeGPRg0@2$lht}TH?~_{iIB)_V1e@aJJfQ%eTvDSNIi!Pzxlgw%vU<)lF*`svSl` zA;toU+eF^HK;#8GnZb$nJj>O4eX8|>MmF;yCI}S+jIX{2dd&Dw*698W#2;m9C?wfu z1OtbL5-&wePvGxaqX`h5A)wEr^;l;VaJ9Av{o%isWTT0ba^$N~Hiscm>{*UHj2 zKG33voF!0T?iz`e`=XE&fImrXRQg;fvAw^)=?E;~)_1Nw7cL*F#Ca9wwr2p{c^*G3 zTHt$xuH;1GiTofAj5_-+3TOTW!~1vE$j0`UE@3+WBT)To9tEgu6sWOll;K>k>gPaQ z`3H;qd+7Ila@$w*yH9xo65s&j`!e(RzcRl6sr&w^!Zf;9`08UK_|Pl`p~SHrlf1w3 zgVPLIYUH&`lqB-8(F+$Wdo5fS_Rs3))-T>gKl!vydZFkyhdbG)7Qn07TL*c-(>{_^ zUZO1Uh@I4Wx~ijW@yfq$ohZyLPw6Ip^ofhmyrn!srkkVcmyvho2uThSi!;S_@{Fz^=bS{GR*$j?p)n@2v42fwDhQ6KK_l z3UGZ`BwhPwulPAy0|o|qEunmgM(9S7wX=bHb^f@EJ)U2RlbpKC{2`imPf59`DlHl8 z8cW3?=Z#>3I71>bn))&lpAeAiZcE3Kpsd4y?Qj*-^a(;s^yq+X zh%;4QSM~Sg>gl^ z)GdA@weoR!pw$mv;L8s33l{J1d=@Y~?T2UuG#22q?q7Eh`qOn?IP<6b)3ZOjtkDlH z`+vEK{1-m_b#D28<-`ALALLI?9V6MaV;FLfs{V#4W(*szb1SVupV3Rt*|=ty#>QbL znV?6SvboM!JLD5#k}|W}v17~ZaMEpzvSh9*L}m;VewRDJI$zi5o6! z2kYT-s$#SxMy{gj(4t|%>(gE9+x<}_&e#zd2J}f{zDG{gr}OFRMO9 z@K-Q6>rBIIbzWxiMdNBmVUwz5XSUh}HM!(aG!C$sKB5&=!i$1O zn0;fK6F-i^MeQuN%@I9;p}fJ2#fQTaPQA~*Ebz{c-+noJ_;sMRnDLqktRhh8x}ymp zyo(GIlqTxyq00Kw8F%ZD-XHpXzdQBSA$(w3#o8hO?g%lwcs_q{qQd%bIkoETQP^pa zhYfdjI=1@w+w;j3GnSU*LY=)ObZUFB)gX?9VIwcgR@zdJ%2c>= z%c_)5LJjzKuIYWKPuQVn56tpw@^H~|Uw#7inGNtbme;TeUTPe|_x6;y--my}vHhJ- zvoU?8*nVN=O96bE>5ET8IXOX)lNDCF|LoC1KX^1?6aIGEfP>{XG&HfbxF^GX@d+WzbDY&4gX-LXQE@FyPpJb$DXJEx}^K}+~rTcc!n)&1WA>Nb_zi> zh!0$~W+x0GBu?EVPKr7`(pg_jE!)G-5UX;DoUe|s8i9`&h?!qh`}ma>e8}ta0A?44 z$4xl8tVfmV65IpBHd;FZt+CsEOBY09`aK)PJyaH@;2$pEz>X$ue2~itJ{o)VN_c;b4+Ck+{sS!iDixV&vXn|$2?0-|uq*g+OR@=CnTHI4 zUKg_?2P8;8>vgZ_!S+W-TsyR*gq+$wSC=_~A}TM9n-MbEY(pRBa-l{=JRCX(gVar~ z7)?1D*ENnQ%OR|*iwV{;l1IfVphOh#;tpQ*6mK2cUaT!3xX}MDCbSb zL)=J=YbH61jriw$$)D08fDQI($q5+3a69}h%=J_wx)x=Nn{nb(@rfE-R%tJC4-trG zf<1vWJa$!N9L@%4o(U|g*f3g1%xH3ksrTJXP zJ1MPlM8JBr&;x?hgFN%b>U}jH$=fwaB`hFL<{HkqnP+s@J}A$RUPDmr8+ED`A=Wfl z#m{Jy{r&MCA8Du3$qe}itWuBSrQNU;GdeK~%`(ShakFf@0(L3UOjDE4xz9};WiD!O zPNr>|k|K%ClInx)gW&MAUZp+0ELNaeXmaF!^nGq#GYAs9nik?fR}r};q%9j#0m>-1_@Sk7koD19xZWGBdr;l$b)<%YMotNfS;kS&hTt&9Ne0cDCaALm*J5F? zmVAm@dHjh2htPywUl%sGftqe~$^m~k{rncwt}5XhVAmP_27UJ7{{8ZONl>x;j6`7X z1%qssG6PjHSzpOMgO4h>8>%!gyymmxryI~U=88Zt@6e=!94zXe#;Yw_OaNt^B#X6n zvgS0hymJo8jxZD4mwLToW^BdY1{n0FaCn-`8!{v zXZ(>x4i3;#1Eu-8FIt45id5#o9Q^2ucb&)l|H{7jErx|d`Eg&Avo)|Vaj^K&5$OT4 z`*#_*ua0=X{CC{qPZg9dYrjE@$=3DnCTTW!V6 zu~?fLkG_!44p27&%XmOy^^C%|BSB?Wj1r}8r8P==IRH-KVG7N7=Ry zA)W9Fr;DEIjaIV)GDb?G3ZzMuyH{ODB%hg;Lv%^5BT($WDce^9-IKk07e0=UOL-Ktte`hl(t$9l^jgllyrtYf2Lg z0i*PW|HDR=?WK?}qrmp#r=OI=ba@*EDpKGyJZTKbG!$fks+>JD;S(Q+H{ia=>Z-Wb z9;3^7(Fdkm*tO5R%G@cG$8{z<)_{K+@7)w+)Aa@9p$=j;B1Zyq* zgPU0C8{j#kxfZNfwr!sT41eNDsZJjT8<}=ehYpWIPr1Z7;?;czjqFNiFs$Dr6Pk zd3G9qU^Cd5S$y9kZ>H$XN$`MPd5{(vV(WSH-_nM}+?s2>wy z11id&vdl^4l&Y^H+*l(rn&y?+&|Vlz9>;*KpzJM%c+(3wF|U~YMq*! z2EOYew_j&dm;v{~W?Ji^tsa2pVojadY7qH&ow;fQLMNaaBse9%+&Br%pf(chsluJ2 zC17?6`MCCjZ_I_NRhjn*M-2=z|g?f0H7cA?Nkit9lL7{1913Q2>$xskLjrH-WwE!BSD|El- zc-*O@Gq3{el97o4V5kgVm&|udI-mc%NBYw#p)RgYP~fu1;*piua;y})3iv^%3lcwI z{O|jlB;bflHj2-m9*7vyNaJBuV#)N3x5oun^xx8lGJ?+6`?>KD_-pQ0DO2R1zk9`J z!`eM4ijeTgxSc3Y7j0g2?sSam)>pE>lxIn5KGIu`7dpfr2%wb9{c!l|`jKi9aU2G< za2md)po;~Z#>*SA{BB}V4b5xIExejDW8v{YKlQAT@X9qx?;BE^;L_ISh>|Dql11|2 z>nQY?+cMJW^Ci`$Z<^T^Z3bLjy&@MqaJ}bznpDYNBi(GqtbX!dH@ISAMWFPymM&)t zq)GEqDNn;F+rt^8Ak?bEncd0)Bf6M;JNs41$fttNr}WPWvO8nKeEeju<1bO_i` z%B(c>985HHpdet8KY82zp(JLCu3`q1;L+HH-gXomI6%6&T04*$1I6Y9=>%I{NHI>}a%&Wyxyql?3?_HJDd z0wnU~yg%e?NW{`;fhTf3;eR(=qc;jH*qGwC5TVU^tX5OwR`wP)lFi}J2iI`olZrJ< zb=zl(avRbBb(9-CFSQ!3FB$m1!Chlz`AS{;!WXyzWb3@YAR0VSUZ@Kt5a6HOSk%Q| zHbtMde+}0t=*Yg{8oq*o0m0AMW^Q1lWBwR0?$^Q&&>r#)0l&Z)J;PsN3{X@v{7r)^ zBOU!0fP3_>036_rguj;O815#z&@(eI-ye$@0b(0>OXj;J-GBZQ{w5UgN9iAHwBUDJ z1q>5Y(lP|WA~{iiZX&wY@Y>_!5lDA>#+mw?PzcOGS%n7{kR;@p8Ru_AF?FOo24cu} z?cols;-PQ!-djIoDK&B`>rZu865`0xlgB?@)14|5h2$9`xDN$>&gA_QiT8V&zFuz& zYcYHWDo@ET=bfn>zX6hf_>Z>sRg_xCWp+bAbQz~iArYg_3ddum4JmdUG}vK1{CQ4@ zlgN^V&LPO@RqgW7jm+&$;buMvoqFO-04qeT8`Sk4d8kC}#mZ&=3o@u}_h@4ayICu; z5<-xM#CkG*byDrJF)^$Ih?p0@6 z|EGP1j{RTu831yB@fpg0(PzHs-U6PO70|rJ%D~M0Ev0w21o#XfrRVdX{(ygq6B_;N zZ0FP9%vKY3=z#MbcNrSu__6xm>c~8`9lbg8b!oHHfq=;+pRLxK6qdoUot9xZvJFA} zg^3Aj91aSmDGl;LXMMdObZj#Vrqtg3=^kym`+?ueanqez6>kU9oy|Q6K zbY#6>yo)n`=}OTpfR${nv`tB=&y$&=DaW_sR_C6oHD z4ZZFX?hZ?Eg)n=BlwJs9DaL6vKZS%T@F@ba?NmW4h35o=defvthCxc#X}5lRqlu{* zGqfy4eyiTIR-uxSXv1REnhWc4HQA`n?<738Tvtl^-P00%CS=g_y6{*%k{p}w=lH+j z-=?-?u48zI9$TCy@>AyF>5<5W#Xq^m{l@K*jvLMMv{v{($u;$Qp;TV#gD*onFJ}?<=DNBxs`uV zf~E*O`x(6Qd8U`WUy}IDf{a^;m{q9o+1*Km&ia|>G0lWR;>r!a=A2mhGnDZ8 zTRleUNg$BsuJdsSs92Y$A!tjK)z{ZuvfD+g8JsS|ZDxWDi*xo5UVS<-o@yEkdQ&7B z^2q8DSZ!5aZ-(opSnd>?&@n(Yg2Z4eQ}BYr3VSqjva@&wJfL!%(Ko! z%ufylTjt5} zFnD5m%C%K+lu{nrGKnxXrD++IX38y$JN^v&WCx~1JMrpy&FxF-QFq)OkRq@oyoQBf zOVVm{!%tk1$0{Aww5JwFR|A>nl&K=2)uv~gMv$%4Mlg@?)v9<@x+Vz;^$eawVOJ); zaPi#S3kRB0E84Z&&hZ5ijlWTUp{SF+M=MEJ5lZY}>rTkkclObK3db!QTb_kq{LUpnOPO(5$r=`zUYI`9)$g3qqj72jp8{rijiPC2W z!#$8SC?-mYo;503#*DYwfw{;D*WOfbQ3ckbTX>G1X&Twn-~@|OGHIJHtgkz|_KcAfMGg~0Hj3(Bc|leyIM>4H9@zkJ%|02^%Tj7OLsvHwCVts;}d60zA z)~UsNZ`Kb_F)byG9Y5elukY4IPwL1&fGy3R)9Te)z|YnQ%k)gHPn%S>GSq~OC)kIz zzcQ2wMMB&05%;vJn3D4%n$a=LpnmG_v&~Wl73+@5{IMjhVE;dP?^y9u4 z*lfy#rt&e9Q3E1xpVxCM_)$aQhejwY-j?8hiG+W}yaY^({$&R%AS(PJ5`F}Tgpt2S z!fbj==RexmeO9dI9}Eu^*st3JjirJ8x1J|hRMwx5ih^yVW-Tt@gj1+fwro2nx0u+!K7?=P7 zFQ5hLE;9xQhXG5byBT7DP3J%JvHleGmP$(&A_rFOW)nc7q3b`Qk{oY?m5_e1@9mgt zRPW5!ZYR)Z+&-^BwW!(P_>ws$6f4yog#!U!y&i9Lg9H_?(x))oqhZKQ67(Yo+(L0K z9|@3`eQahb6lHZV>}ilws?zX!r{|2ResKV5V4QjagPaw2U!x)1+UJ%A@ear5;+WU% z1uf6Bjc9w)n{6<)8y@da_eVM!y2Y-RJ5L)ZJmZ>9sT!pOy`asJtC|uU0cTJOxvtWe zLRfzZ=`ioL{0d4*JAjVz!c8p4Byf$H7ccOct1DW|AXb?a#>iPtf}vYL(V~#*w^RXP>`<%BH`_B!NbM zW&M*I+(*5f$q~xQbXy9E?yfHR(g`z|agkRL_ydgYB6<<=h9sAK*o5Q*o3?gGvN!aJ z*L`qO#tJ>&z9=s*>q_4~kD_l8&{50j5tHPgbx~_LXFqol!PS|xA#ys z4}aK0r8($I5itxVej_3l3`c+L%-frvcagGIwjm8rkjc z$Bbkke;@V!iZA**qydPBd`BAaU;xrse?b~359oxO52Cw&5lgx|cmJrIEhqzMRlGm> z!oX3AD)GyR5(voxeh3ObQ4|*u7vxtICg4|66q9`-uBb{NC`&^vr6@%6EyoUEo{0(p z_}%w(w7bg)o-h+Uk(E`vukHXMPX-nME-=zFf3NNUx^bA<)&5sL!=FONxoq?gefIWF z$%l;aoDiN$pKG-v90QRBJd_Q2f_?XG^$^lR7n!I*TO`#+jhOI7S_i#%iN z$;zieQfc%>%Swr`s7RE6Iof+}ttaEsRj=NX^{n!UAB3v3kR$uO3(R{hj$;bFr7DxZ7Z*mv z?y~Y2Dq^TPs)7F#Y6o#)XK9kKP<7P|^>7d6s@#JzjX~cR7!O%I5;lXADx{g9PpDt1 z89u7ONKV6ZOqDRC=U?W%>V`PPuJgnaVfm!5$GOJ-ka)|;0ric8N;GRrt0^{_+z|^I zL}a%$u)c+(;Y!rJC1ksfH%%1{ZJ2fbI44(i)VgI|7pL`+d2|Bwu&Bqw_T#2B#Ocs7 z$T~H|5m-3U{0*Ll7LVR!<_w(#4t@uWA*y(%N700Mb8(IYM#iJ?Ez8sR(56YNLv}Vf zv>wRb^$K(%nv#l%h(`UneMbZxzVB0!mS2NhVR4S{6C@oP=tn<*f3&(}{qdoZZH>env2Pvozoa1}7 zqDNe(?!gu@h&oOfk?gm)GcqJR>IDxpgvaneMZ=!jyT(sC(@Zd_$0E&vsgB~+VkrrI zuTsFXLhy$fDN%};#0o9tQa)2swgtEi>gf`XdC=zd4 zZMk0L^Jd`X;5!0G*T%fTQ}-p^+{(~{C11l384fypUhlzD@zx>ld*p(P)=z@W7>P=F>XjtG!zKrY3K(haMHpQ-HEj;JK$+6 z4Qm~iC)SjgiF$VRR45U(tOz#7B!iMvB6pB#F~krO-5E{A2K)V~sQ+;qJ*(>*FOt&r z=IiSrOTTTnf_i>)$i)_}zy#WfdmR52NBB25&c^bWUL7q!)j{+Nj>Cf8Wi5aSpDI9Q z{bXr$Qs0`sU{Nr>4B@+PQ2gF^^MvtROBq0)>iZSnUIhK|#XHajih>N(yqZBk-AHRZ9j{E2=-Qmq=IRY4AMxhX#0w+ zJSm3r5w$j7)F0nFrOrn5<%XjwOPHxc4Se9z#EIhV6b7{-K4Gd$i?4YZZ@m1RJdQ0L zVuq)G5Fk!zw^Y%$Lx$jo)^n&HIsv9VAf88YX2N+k*hdkyks6|-!dhaFx?ul~fqnhN;Z;)L3>AK@D*6JvGE2QnYKe! zy3=hG>R}my_~%kSG_i3Iz!(wDhJ?dXr+WP)*EX#Vl*44*D|qvFiYDlVpl>aA{9@WaS8i!;1xopXkzKg+ z#ri81^P^Hs{dHY(SXecsd=fg9Ru((Cn zrxaMUxJ$!8to#xCLKZU$6bYWkMqqeoGa>OclS@+MIa1hmc8(_)iLdcp5!N0=hUuxQG13V-5P=eZw{ph4Nhy}R3pqe2Btf=hxisN7mah8a|HZe);SCey ze#`kD`bKE}m4x%F>!ei=W-8d&}4+Bx*&8m6SWZ< zyPPY|&;bPw(VTr6*J6k8_Cy6xtCrp3BfW6V`8p;aKXI-+8oZ!7HjHGwNB>_jVSi&? zcPHi_qIf?*6mRy$x)6jnn?U^-I|B^FHgARHfAr-$KJ1@20G7XLSxf-i`eIo30~dZ= z{+sXir}#V$a@%ge@Zvq{fE(8*c&Lvx!m!l7HDWz`>Re@h4gArJs5w?%JCBBXDuT_r z>zzNKZkmf*x*w;6NjrJZ8TC$6kInICXCF`sQ)rTx+Az(-= z{mO+x`UzGDmUlg-4}xb`NVC2aA&#K&3^!Luca`Cr$fSCDi0;-^3kHZhyo*$qUtULaIo-{|e>7oDRi% zGNi?ISk?2yJrjBy`O#-sCHm5{Sq@B(Y1u61VXGNS z75jP#2}}Kl!#W%km6*Dvs`J%=db_L!<|5&vcd0CyR*E4XZIvx)g1hAfgwSFSvb)*h zlVxPoU`3B1Sj3&^nr&D&^4=3dIegyKLFaXPGZ&TM4`V(BB5mJ}x_`}n<#(isnh90` zyK{38v0@2Z1y!wM2yI#k!C?@u+Wvw0y8kUjI2KZnwGT`|k^^oUM<6&*+PwEP>BRzg z8o8>JBfI+UMQ-M-AL97!G9A)Iz$l~G>41ekDz)oV*-1$#@$NW%EIkAl?$he9fv2S@ z0>Unq2tk+{ij@X+ZDGj^C_C_04Kxczmi?hfwf?9fK$zBkE>Q_lQ&{9}tauENv#5Gp z6jJ41Ho$+LC-w_ z$FJj_45zh&Wki{5YK-|WEtF=-Zi@nvEH4Yy3%G*ZK|;nY>(T8twb~V5zOirZ7+yt+ zDkXl%y|`j46kijk+3xlt(HUJ3MOmdftD3XcX@SqSBzrHJnWqwpFmtO*kky5uwRS6o zTB=!)GVul7WC`KBHQdWtNJd9RAfiXFqzP!Ojo)r4eD>3rOg*|4f)g@4npkTQ0m8BX zX(W9Xo=Gpis3?LXJ)anVh=l{Dk%xBZ{Lba(**s5?l+tw)TA|fS-qo@--A?C$fXM#q z81Uzp9(r!PV>UkSK-(|N5S*DhNw3Ob(h1BKIZ+~z!&dpR#9Zw%oJ@M_G`xKK@NS-B zQ&1I{mugzHga04)-U2L+Y+D<~JxK5b3m&v_C%6Q6cXx*X2?X~*aCf)h4uRkj2=4Aq zLU8*Vm^s7DO=iyAd(Qdp^ZXZ{>h4`tT~*z^_PgI&>)mS&xmIrjMOQ4>UXBL zM}0E~(hft+CW&jV5c8H$CRKBAup%mc+pcKZF8cW<{QK`a#dok~&G+S~gX0!8zu9sR z$aggw?PMZ}3*HRZ0*Ii+LyUdcWcJmg2gub?K_acRC1aOjF^-BS)$N|( ze;|&6c$EuYzvrymo-f%8eCcbz@84k&?}+u%1T zXces>YJS;mA%w`qBST?lr%`z|{32qOUO`pKQ~{B$iITW>bZ^+>F;UTGgPOG`HkPTm zUp+Sjxy{GG#^H>-AXU3Fk?$G8k94#@!En}J)63q^@^b((c#YpNcyuw<*2sqde(U;G zdZ2;e6QuhkAt4+p@&m45=}2v-LkCoQ-Ajj{f1&quPXXBXnuW&?cK&7KopY8INaul0 zm|Hl%CG$X*K+pP1^WS&kzvA^%h-+~n{Ta(rfo>OHgS<%0wnXs1Qk2w2p+Gbq=nXCz z84lpg4m=g1+zSbK2Nce}H7MBZq<-96fFo`VoyG+R_>3MRbvio|ERBw{FTK}Bb8@*U z`|bUk1&dK8z&lNTyKlUkqo&Jc0qlxwtX5E*{w8V^674ziHRb_*31^%=t5*R>k2%9% zMUTzcTSf@z42EcjrD0gtgV2r{_V zDX4TBpWuA~tej<7zblJvJ18~AVWdTm$3CxVY+dIF?r-#~n3%)Pn168nQG-SPS{yY<&n zj$cAP?$o6>F}9P_SH8Y9Po$!3giV(FXr`HuB2u*qlTqHor6Vyc1Y6GCn!2o~@bp{V zei7Rue=Tdq8f_pc$9}4`;#mjW73=3Vcx#!+m{^GUR;|cU^lmiX#5N5Fee_2+3V53`D z)Cl}^D(q`X(WXcj^~ET_hw{ukTSF)bA>VT)PG;7+dRmc7XT@|;eeC#}YmT=Mx>!&4 zqnzA#%FWKJsuNEwpCMkXX^(OUoOb-ow^rx`-E#>3aJXZJ3QLzF-Oou)7VdlPkMzqw z>9xR+`91NvSNp*OdHwtQUi%njsJ@QDa-?C6*tq?XH*V|(|3fkf5c;Qk?yvKaP*MNb zPX!t8t6TxO`&}=+@2J3)zcv45=lKbVPed#osNP7Hb#h=l&l1WhqQ|DMfX*Z9iL6H$ zf}_TG8h+_xsi#p7zxQ8B z{JebFZo+<0Bv=HdXIxWxGSxBs`{0z9Xr;&c4fVz{s0iRE=t17vwLv$s@79AGaKHeZ zXDB1VlFcnTpU}ng3vl7-v^a2w)~@ZMX{VxxuVJ9e83P(1Q%>-F_kyhNZRtnK z(Vy579RtgQswj}EKo-yUn=RFj6JaIuXu%~>f0-vS8hqG$Z<+kR!klFPL*{gQp1)%6 zg@yL?8|4P8b-VnexY+@Z1nZvrmu2GW%?`Iv!72r?r73J0F*+ewt|;Kjk_@4mX)faC zRlfs3+(y!5A114zHgZ+sD(`@&1?F>@mv&Pn_ZmrX#3AiwS0-z91WyKTBE3gsA?4cV>-wS}QaxL?In zWtYAeaOXl&60g)xDMgkcyn8i{D@@A`F8PvWNQnq~xzNr$b`3B_dtZ(=F^Z_?n=OCiN}BkP8D!#5tfPc-)BF17kg% z-(}`_5`++)li767cktS$N*uq(m=Oxrdag&OVuLVY^{I;f&BdCAT(%qfWxc~|jh)kD zOq`ugGwj|&*8@uEtVwfcc}MdkoNPF(_X{;8G|qB$uHxf zpP6}tPPeI?&k;65BrfNxF-L50HM*oF!8?}1cP3p8#O6YMI;F@+^GdBIvCRTo{@F11 zr=1^My}-`HFSoBGdo*&1Ia>4vGLGsG9pz4t@%q)yF&I_7np-%f2HQ;21a3MXgT&c> zCIyFp30~o(V1^`T&IGYcnLJK}WZS-LgpW4q7Ocp^QGMs8@ld@folT!}F-q=1+|??6 z18r`f(zavUvut5G1qtJikePeqqy@TD{48Qi9hIwPUfArN!_yMUFfNCC1Khe7g&W#^ zgPm#WUV?3ceTSH4Xx$KC+(X3K&YO7s>FX^j=qb2MV)5K5jxf|_6Lm^xQ(jxw!3vvS zB=h>5=t>1pT+~ashtUMlv2=-1hk7OY)xBDnzadv5`did2Dy9U?MH{jS>r+`u6zjTv z)V9a2Q7jBE#Gv0TGFG^bts7>X``)e7is*YR=B>T=$hDGQ+4;Q!l?Q*hJ-$mmNiyzu zT2Sq0J{pKjLobN{rYiGXW?&-WSA<{q8U}gj!qS=`26~Kkj}G1rYj=B55JG-|=8*k} zkep9>R=b+&f{6!qtsxDeG;mGbu&>_yq@XH=xMSYVSR{-J?fVPaCo4m}XstRX z150OE?R5+(Xc-V1wKgY}krT%ZEvhYyL9Y{LBiPqb)2($?K*v9mZO zuFqy7Ir19@@_$RYK;U}?qhJbse zAhDnM@f$61e2PjFK?bd1YSpq8|IRr$Wdc~k zK@q~-eZirR8d7vaY({=Z%_++Eqq}aBPhKFgw3giJw7pg4b2U^7*rND$+D|8r9BG0= z`TT3d*OVnz^w!uyz_Pxymt1eO^m~>1baZkjqb!%BQZ3zuA7hQ}gLhv9p2s(OqUR|% ziJ?fTESR<093o7}k9rt$qt>F+_yuwbkTL5LTb@!u+5&VM`Q8(?C6VMz%EzN+&=tLP zM##}KkIg7l5@x_Rh+h0M#58qgbCQ-#Qpu|^&#gT%c$|{;t)>q(KlH53a?y)AVwT(I z$?Qg{Iw@$csL$o)(1^Q_uCM)B?+z1TIszb+qriDv@!L7y;qDo}U;xkaqOEZIE!iu@ z3d*VUU58JW1^u#NV#jj_qM`93BmUSHf@^)jwX^!#+F(4VwF3>x+gv`i9dN^m(1xL% zSZqW>i=22Fw9-1^@LZJUUo(VRmEIRT3hhXefEXf`RbS1zqM*j005w_9d$Y(~T}shD zSsKz<8`R$yl*SD&@>x2Hv26lIWx|Z~d(+VfAts1YcX0v)fFT9`VqP)5+fv?fsx(HI zOa%!gknpK~^o!iD)xv&C#3q~ z?Tz}kZ}EjxFbiW_2aj1jq_UBBg$nvG65$8*v*W;g1dN1=t|Zp~TZ|wz0-fA)FBGPX zsUum}**>Qfk<#@K9q5h`2*RBXsu${de1RCRx>1q|fJf+^BQ{{UC`jHl{Jw>NZ4yv} zT?$aFm^?md>L`xs6+A`>W(Vktx1^{v3-Q4~3F~9NT8M&%8VgP@%$s~M?5Zer+2%(+ zUqy*Q)SQB^wmc@FNhn1G5zK^9=?v|wP8+jy45ObtGo2f_oayTHXz+OiIYEV7hM1(* zT+6Wo(Ir0TD=BNbSG4I&@-`5KU2PVv$L~w8Kko@xdK~k#b5nqRED$dRfAI)q1!;(Q znb1EWMN61VMsxv|#SQZrony6;jR?6I$vE;xijE3KJ2$-~K0<#+AJR%E3N#@tE6l7~ z%r>97N__mD%a^42_Gwst8n}FHF0&0&fQ!=F$8uA)ywK&ZQU=CVjVa`zX&9=o((Lp! zxU>Q&eAystbg?(oX-I3C+KL0t<7JZLCFhn1N<^Lg_*tdm7TBW6i0;;*HZPRPQygY> z7TBxVs`g?=m}D-3M76s(4U1#;LP%AV>R%nWNCRL?wDVIWXS%uZ*k^Pj7)sdX?X9Tj z1P9Gf=uM3skGYObQ8kHU*SB!v2VQwXYoACU4|~K5h9rMTn0edDUlwJY*^0OUCyf44 zo?!-beKZ@-Zo;MPBW=;L0w8%Fk+)$13n)DCq-a>!?(QD%#uR%c`+Sjd*PVd2;K5#1fvpat>F!e8% zys-g+uoZ!Tj=sJ#fv~NWgY_@dm+1hs_r5yve{8-lF-iY3P32wi9hjvHn5&Bg_;??C zdC>gNT!bem!NU&^dY9Pd5%9|ag#q&f1qGQ)8sAdF5=~Rv9@i4_-D;Y>S=l$j`EFob zu4I#{=~Ta)Ai8P&mP-*!55{WhTi=%#?qKqS^2ifq9wW^TTw?B>POaRp3Z8&h5}47N zQkJ&+yS3Hhm9$IZFHpTqh% zT&s>3T26TY#f{az{q&~NBrMe1ekfFNz;Nkfe?MM5h8D$#$M}AdLphY9xUJfb*Bmf)~^ycAD47Be% z$05DgVObCN`^(22Y0$y%oKhK}(A2~5uufpIx!|zR{NAEinyf@)0&W=J>)EpI_2GbK z;6{>X(jB|B$&Vke(kX+d_x0;eM+(|ieiZB`t{n9QD38|@)=pPX8VIbPT@y|~R z;(9Dec~2JN`NL$QebK4vzG8I3C`RTG57Qn!Z|XYdGx;Dqc$X+prSo5 z%Ba(K;oi1v+XP!)yI!ATEMXe9B}uF7C|8D$#jidN-B=kXZ$*_i3B6FW+X?tVIlRBF z`G}^FZ5?|*l}xRewvO$j2Q7uelA6;0w7#3z*aO{dJBDdh~e;-O~!TgjH$|A zGB3mvb*1V>9=O+edQ%{}srwv!YZW#cWY1P>E<_}U&};ffhaiT8T_GkG%)uyF)x%{t z+7+zlV8Q*vvqI2waNOG(ue)Aflu*iLhU=QhkU;7@5%376%HxkFnlEJch(~G1&1}o3(L}tM1RmXDI;goau(W2AF0-r z3u?54F8kY_f^))di_)o^2$e4g|3;$zi`e>)GNIpms_gMT(8xyQRr|+{ki3=zEs;}5 za}Pn_PP7Pw_qb^d=h3qm6(ew+uWlSrbPm*M1n;B_{3=ee6B{NrX}?UX?hV)n+f}gg zO+mVzf;rS&WtEN>ACJ$W_R1l<1quzuoLAFOq7;Ocki9+INKxHnNhw&FH!t_WOyZg( zmU4d2G^Pcy{no1>9*nvY`TImzCxji(t}RJwUdm2#f$`%wrH;_Y?68@Q0#{JzEG-Eu z^clOX8x#76RBmXOU|T7lZ=j7arwPMYsa-+_<-eLNYcce=aJj-Q_qc1Ztu8s#wL4-l z^iv(siWi-fuJ=pjwk5ojhiZ3!GYW&WgmdkNSyQNaJc3ci4~rmioMToI=WWpA;=i;c z(4>B{g>!U&*Y`J6dvpNChuKe%fGBYCBNVu05yrmjO*J{Fc`J zmyZ66IvXDK`ER@Z4JyIFc0U>L7iMwS{10BqU-5}*`mXCun`{W5A_Nru`F@H0E^sWr z7ik3-oY^S{t!Yyu6PA>6VHd=i+};Pt8(KT7WCBOz*)Lq@7AOw7KFHA~_dtS1;Ds9E zu;oact5(@TkQi<|xv#5qyo@73liw!oJaoq%1z3lEC=sH#DcXL%JD!pc;g>OT7LdiL zHO>FtlX=pRv$Uqx^D2>@8@Y>PAIiYcB>@|Y>&8Zg6F{TY#N}jHrU7N%N~9Q1=|dWh zlLJ=1^5W447-!EKX0ENoVW#p1lb)l#q>U^65X`p>mYOd$;=1wtDw3Wwk6NNK5oyjR zXmRb2oj88l;;w)72#3$e3}WJRY|1L=n?NdP!5yDy2Y7sXz$ZRxRS)*h;`@GAQz)Dn zNB)GE=f4i{2>*po1Ohz#-lF|zpEUDK)BoI0`%jSy$fOtkNrT-_6w(S!4i8nP5u2RPI&pH#q5hRaXUfrD(ilHr(6SP^kS!c_L(7mxBR(nAD1}K zgvSS`WG|Qc^v)wj%y*M0Jl`*=C?wF`b96OmNQOb+37+5@pJCQ~Zw%TcSDBT-2*UL0 zDl_P$cFD?bkn^>eRm$u+CE$fOKKOoN-=wJF;(T<5>$6N9)pTSN#@`o$9}fcO_k2@< zP#J`1Yxyz%b2VX@*!@yipO_G)cuGQv$H^pj~RK7Cx1g_$j0^yoZM>&W`TIp{v$lO zV-=yl2b6!3Rs22N0e^@)|6_*nzwV0vifuIRwt!zAhhBn}TB)UoOeQ%mrB{RNC}On= zSB>{@G0_C@pQM>2%mqHVLM2G75Otz|u6R|u6Ff_JZaYJ!6SH@$>b+x$T^m3(bh%{ zYZ(AebE+jARq-4(8Jjnv72^WS58N|9H_p)0y?#HipoMa3mM^M47#BI1zO1JP>sYC% zyC`Ol8$Cig0t2D)B^D8JZSJyl2S4oVe~WFrMxe*fnFP4Ey)n+v%}whsfL0^>5!*mf zIVX_a>fsP=cWxY7 z+S`xczH^@FHsDtJ6`H#0@?%ft$1gFEFB`V7$ic!Ij~R3ZxOm;8!y_>8RX1Q+wyP}IXJy$BT;^c^q#BsmK9 z=lbKnb4C>aDiky@?^Qn+7$_9X-3xF~XmCCdh?)-P;ZSoD#1tAfY#i{+;`miIXjqIM zz0z9W(?F#brGCD1yR;Jnz8kz2kTOd<#GB4%t5})&lQu7MM{4_nasO_FLcYYcNU&y! z$Nd7%@}h~Mn=`|E^x@YHE)2{U4MspHWp7)n{o(6cVk!otv{tJohoz4FeiLY06PAdI zjwd}B0cn!F9?u+$w)8;P#BP#jF-vSiMyR-W9wVjs{zX&*>D~S4kJM*BwT*{at3Vfl zw&8bg8z>a4nK;pK5OaKG9v(^65h z2f$0#+MdOPouesHgYWEd4qNu*nmab6&((twkmdT2F(oK=WPB4IsZlwZ&a^Afvp4imo;JtF!R{9u(+#FH zF)=kH@(kz-ew9XMgWd z6@Dav%&;t3iki`dWiGaJ2^%(_r2m|R2s*7|h>J#hVPFW>ul}>hfyAdzF8+b_bptBc zV;@3Gpi7eJzIwJa&(maEm}4VWPPmai5d`Ndan6h+FG6xBUCo8Lj^5xjj+EQ;V)v&+ zkA^K{rfYUWg^_?!6%XIeeI4lc7O2 z?gM@0^Kuf33XwD0#UA~WHBaP_jigV3{^zWQftPw`pl7eHT-BY<9sSOC=1UQsqm(Kd zN%zM<2e&cc>fgavwzmf=6bu(`y%&4lhn-1JB1!SpK;R2le}2Dc#a7B|uM!^Db^d}J z^Ni3p0Uqb#SvRBaTKmNoDksX{2@W_m@A6Py$sv{GjB-3G4NM20qburj+Ol%x9-Dtp z_;{`9e1iTGSr1Ldc1~jqBck!SF~dH);SO{l={)MVlEEvoIZaVCkaQ6D_}phzd8JV$ zS+$QaP^LP~ML2mD+#acZR^%LvfvoKn+hr3=Yi_vz8K2k!(( zEEjuMu}drq7G%_KtmgMFlRu43uY8~+wRu7*Lgqs&Ye=vZPB(aI8e2!$`=*6`!V?av<2Y-sS<=tYIqfW4IWhmNa!q@EVWSj}kCy?S zg{wcn8kk#&ICsFTa){?y>;NI-07pBa_d+{j;A;*46(-{T1nwvDc$U*;emR$i=N<}Z zx^OCagphRHo@0B{N{kH*QNx%|H^|b1TqQ}LxTxw^4HmL|y-Gb~-LXADaY*WAlnq&P zG{fwe_bniMCrasH=z;t!dyD&fG0Dwq^tt|Ek{3O?)^I1Zu!hiGFK{jorUe1>y8bPd zNJ*_JFXvQLgxmcHnb$mXcHwH5pi@I!U0!n93@w4D;nPFUK3(DKM*tDjd0Pojpz{1x z?d^zmy>b)8z*0_|6Mk!2AL1j^`}(>DBv zbI7eAGr1H|RiDOQgqb-`n_mYve6wakn2Ez?ni=mB(i>&ADOS3u_OzI}$K@ZX27ivr zKT!=LTMFm3iwPq<+F|$-P>b_@@elU)uR~0rCWY=H7XKeK{~t8}uY%@3C0+k4G_yv- z?QvB^<7w?DCBieLP%iXb4ZVZI=e5szo$o!e`VDW5MV3AheozPZBY8`ez;h-Cr`WRB zla2O;fyT>ubg<7swe6OLU(4l&y(HTg8&8Q?_hjymH%9PW9~eQ#u+l<|Q$NPHd9%Oo zO6#`8JQiaOkG?mqu4u}TwJgetQ1j*@#3!>64ixUge&M}D za(t4hn?l2=Stca)eF7@otM_$zeV3|<5guO8V_v>iwXI9j^Y2 zoxosgLJN1h4(_C$wCFLTkLdzdyQOdeFW>WoW9>&nbi;bFL=mbW9wHU{p94R455(P^j6@&I4d;L;l^HdBNyy70_;+r7<{S^yl(A& z8eRCs{;>>1fcZwAeOf(cdF7QT(reBgFDwFn$fc`rE0Eng3UC0(vqZ*Km3^^Gs1Qs?%X2j_`v6_TAGM#3R`>i9(mz@ucI+q z?R*iac^rNlA#TdGtx9l2j zyq17uX{i5Yc?e{3kZ8nwi`o}U%>x<$jpyZgLj@+B$f|!rdxF_qNlyj%!PNJ#8Uy_k zb@8GNH$%<1@tRNEU0+a>iuP6nT>}(O0`YZay&so<;)z)f#20>_ZLd0XTB=8mTvHBP zqv*twP8#dnaXnA6$Gw{BKB9vpBgXk6cxutwe&UmH+F1+2X4;Z_y#l8r)SjtiU${R& zBEC@yUL@YTGB#uM!mdS0XO>*i0kzog-8zB{EV6^YctgmUE9VHI2tLKkwpqPEX)l8f zz0ilEmtTW7?AZ&~pAg!;9Ri$?@O2V$a6B%Grs-&Pgw7|ZW)fA}3>V#S#IU6^qKtM6 z%;=0%B>ZS9<_7w#jEH`IC0@WnMNQ)fBo!y2<5f&Z*iAxLe#HkA88*$y3!|b@HIyX! z_@|Adb!u7Ny(A`b3S{aFJ zDN=Dg(@VzLS?FY#c$0_^t?bvCmiRsWvz<+8DU)R4@H3dPD5m~%Tx&Lpwq?mrBojv| zV~I5q%v?(tJYgH>NrbjyldGOydvOlw>a;-Y_Aj(|ccG#xtmo<#1-pV?I{_B^jT0bG zAMZKSrSb|gk;BxzDCd~hm6`=EcQUkJ?#vY$Rz?JHN*9iRp_sz z1?hRqv#@AisD0%3HmR6d|Gh?uG1gX~PPbETOj~zn)}?~j;emUt0T-F^mp-#|xunJS zPr5apL|f4N?Sd0@f%U64O>SM4Nwm>Eo!4?XIt}XBqhlwLQ7{V8r+3{+t5NnR}N^NqG}$qSABr;3d+&!VZ}1~rpd!Gz6gzaJBk)TElm zQ#!$%x0RBIkt)M*F1h88b6M5V`NKhOlU1gP?xhOKyRMNL#1TBp&1ks5imsQnLfG|^ z5#Ll5do zf^sgxh_aKs3yHhZHHPckd&ihrf26hjIWGSRWA0EbUngh>#J@0>{buzCd;3>0=Kq7{ z|AXfL<neY^UqwJ$R3z#pb-uGbUUf&w@3Giuv9XTqLgpH&ls`;JsxA z!dA9Ro_R}NF+RB_4F9h~teS1caX7KE5y9)myH8E+Tp)QQ+zmL!l)v_S32QIk#N;Jv zJ7FnQy1_&Yd^zSc0!P<@J@arr+L6ml=?(=AvTJj4obgIOLJ)nD>o^ylpnqCU)lN1H z-3;?KGd6q~G#V@)Y%i3feb54q0buv4R!Sb@BRq6krutfMx4L&I(gL~@l^dzsRGZjz z4u%tS$!CWRTfVU^`48 zIOA{J(yT7Tx_FobEEc8`)vyWOmzl~(RTqhpSoKk0>uE&^(0j~g#6xVpEfHSQLmoo8 zTDnS9_2&BiFqZqM@>;XhZAN;-0|6`_lL)?FxOgR`;(35be_BBxRFOsA;S0ou<6$`X z%r1>d0RAnPTB4>E1!nZ17m>fA#hUMuH9f5?;d8GJ5(1(S(AE z_T7AgcS_x8Z}M!Cu)GB!coi%uw@BUV!$6nCueF zf$Z-Ft6IL2)}>Mx`*;itf2DZb2ozRaH9Y+0!A(E_hQP@&$BP6}Xs+@ZVHhYMy}P!o z%rKMjgklL2QidN*77o*XetoJ&qfq~GHvA+LVTNuo9r%{Z7(>HVehgHv+0J>|CN$Pv z(Ed`)Cnye^jo_iAZr-ci+SyU#@+#HqC{zI>wR@QNWBiZwl|Qwlhc%PI5P+8S%e?Gc zuUMyfo*gky01~*uYzXedkMw`W^gl4BKOHjuSz~&umid~fIVy{4rYXRRs5WEP07O>v zePLIUt-Yrl{F^+UMq};v#Tt2z7G_M6iIzs7F(osF+xw8n91-v6%Mwdx;ZJY$c02Cu zcv>F$V99ONEXP03j~@0S>dti4DenW@(6~dTAF1?yYD<5HO3lXmdQTEZ9fowD zn*TrGTV?ziDjnL}Lho+Ey@# z`?n|gy%itZw!aZ&&KRAztmJMtJ&42&e)!G*ib@+iH(qn#-&2ZlU2TOP02wYXG|=G^o7*+^uiDE~bw{YannQ%m|?7Pwm##sgI93W}`SsOO-V zNH1%Nd-#$5RjBm;OJn*|RQgL}y04pPDlKad(`G%BEN%a6BgExdt5mcl`XC{b4)r+< z%O18x(R5kg8)(KOZEUJa#z`vzFaWqsXJXph z$N?e^o4#))5@XkKU6FYXKpoYsZ}D$vd02l<+kCI|0{~rZSocf`41D9^UF)rM_+bcM zM2zmYqKP6_mPTg4g+SWM&i>b2px~&Ozgz#0JcD;3cmM-1CG%~%c3`%^+oVAEO-3eq zdSF`Sf7yxtN?2ET!&gjv*R8L-KPO{c9??hS4iR*MBuC|VYr8R`;V zYTwGS1K$S0``tU#NCCuv$9FSxfU|NSU;t3SC!i$w4>bon{$LJw^K}q~MmdX@{3bO$ zg1};VVS>dQrl$AEo_emE3hrP8N%^E6mRUEdM%VRNTI>l0S*}yiM3-YTY*(b@ma*)` z=EhXfR2h+tWQ$(mL>M?G^U=-_n#W6hQ$=ShwHc?B*|5NgZJwm~p62N~+Rd9z1ZvN! z5QJ1qW0Xz+!7`NyKaBZoAvDIB(aKu{jDX?k8lynUd+YCSHNE*iJs&cEjJBc^QivRu z>@8h?5N#!x5_s5SE_IH=j*c$W`WfF#jhgrIuCx&^D%Z1u$iRHb*Da+NIb)S%v@r#i z3%E;zI8^uoOP5XW(-JSnp3B+!rpQh3BWjH4dD`HQ?q8c34%!gn3t=QJ;fd~fJ10MsBZ$&ULsIa#^ zjX(_e@asD0hwJ{kJ@x)x1~?HA*js@elku)fIsJp?fBu60DnwB3KfcwEL?GF;HU@67 zr*ip8Y5uu!ninFsai_6zB969L06#+Q2zuFGi=@M5WzPQUCR5x>AI`d%RtN)tfI)6D zyMB}#_1z}EpJkH(pFJ0>r#PP1kAfe?)hQh54{9Tp2Z+`L(n1b-3zEMMHI{z->Jq+EuJ=B83+y3CIW}`s5FUxT<>Q)?UT_PCZqPW2F-%cFKYz1 zyNvN3Jwg+Dyga0@8^{;iP|*Pcb9$94uAk@#+DMyc&VV%Wg1m;)1eDL$&7`Fps%Odq_fKlO$#dWIFd+*YNEUo?VV7wv9 zFEpn8I>r<3u9uJ_!3z2Wqu3GKzy-VMQ3B4zjF?R0Kh_E4gC(!a4VXbjyC=yI~1k%)oQu zk}lALT1T&ZQ6MPJuHHXne-Vi zXpD{0dRToVwFbWgT0=02s*@^Z2#>sK}5CT3qvX?cnxz5rA4zj*?wm-tcPmAdL#K@{BPJjqZf$iZwhn zfiyuTebgXGZ2j=n3H>+G;trPu;U>%e-V9rIY7>p#t_?x9k#oKl6mchw@C(x$Wr5Xg zkK_-jaYapepoYDyxSaF+_}?WgE9x+XF5g`Fc{rOsVn8~lJw>a1TdpCIAG3J2g4KRH z${I|{dG(EaX-`$upK9Kj>s@jfXCv=R_F1*#_=^4)Bmj5%H|gM!UuIm=Walg+La<1$ z6bc(d6NUyptou^+;=@{HSmk+-*nN~pvwtc{r2VZAG2cBiQJf^V%#efiW-=0RZ0p@* ztbmNvVMm2w5&?Z(D!5ypu3%a+RrwN(gv@8Wy4qI&Bf$JEB{$F=H|nM!-Z3YLjI*`L zkpeEax90*1hVg1-<5QE6qd)2k!g`U%xUwJ>U~bQz;3blLKjhNH8^Sp&r>;6-QSaz| zCRuV4CyeFOLRqI!47K$Ix@@N4i)XY$|B&=`-1-1*%DUsA4#mZ@db%(9DZ-g$ggqGS z(n@V={6_5ty5ORq+x(Lgr^!VFrFw{h-&0ko5~$m=n~QRVzmtixKB9Rl$|3uG!{3Wi zo_ypRlWYaOm#&FE!u!OOm@RvZD|{5F_=I~cHS6C{LjpyJza)OURYO7#13V$?@5cie z&DQE{e)r6UhhxAk3*-A0;=vJMdHMMjWqCza>F9n<%ZLCiEhc)qn(h$*{!Sr@0CCrZ z2f*Gop-{mDOtJ7LLMJgAkVTl)5A@2z zRMm-D#xurxVQp%^g4%kQyqT7G`}uO%s{3@R3ej^&&?on)aW2=!cLDRpv`@X@O~Kr# zAl~yYMVglh;Wjo|aWDp@#( zy;`lT;FxF-4$;hb#lO!3WDBdjwC#*3eKmw4#f^Mx8-y6u{5MXf2zkRR{5D7eA~R~ z%TfHppgtDw>NyUHm^-gI7Sc$dMGCqD>~CN~-+pY4HaOhd5i@Q~@^7Up=lQxZaLiht zxH9NIvZ|c$`h4UNF~Q;eN}VhXw%g#*XI1RWI;i6d*<7(Wh}qM#iXiC>N!@@0KjL#Q zz81gpQR?Rusx~hArsHJVdXJ|2MUO)8!vg3rPwn_?hEyYbb;cGQ;I^C%9sQ+jwjoHy z;8a~AR%^vDd5}u0YLDimW){i|IZ&*%yw}ERmxJPPFuwLLjMWliz(X90BtbaY+1E?SJt5}|AA&XEr zR^0MfW$p{cd(rq`$C8I*#}D7(32JxCs0koEK}~_T=Z3&V7YYKn;x>zcGH@aM^^(BA zfGspUPf%nKUJwTmdk`xSTM!cveGnbsLI7M0fRFsZM_b@F6A(k-q6gfj2YfyRu>@|D z1-5oUT>i1IIj~ItJQhFjUlI6<9QfJ@_@^7G%+m0CB*}RFPC6Ux6RI?Vq+CEqw!9p#7Nt;Z6t&fO&fwl-tVZ z9tgKq#`B9={sF7+l(;c;U@7ZY{6-=IXe-bCcE!mJzl1VPN$6C+jFG6E4qJevLF{n; z@-4;$sS!eWvT3^V`BcJWabDc$Fef15C?qZS5-LRCdk;p`Yla!!pj?(yvI$t~r~6%K zWCVHo0yi{c4*BL1+C12z{PKEJOMP{Qt5O0kYLliOlsu#EXP{)tR9(9w?_a;j1{r93 zZim7==Znpqw1*w|bhKpm9akbn^P>qa!)4A#jiZt3OG`OSPa!~#U#Ny`@i%G(;O4cI z^u;YnfWS?4lc}wvhN-U{F{CS4%q+l4(3X;_kvV|Cw&^-OhtWz_DXelUN|6T;g16w= z=wF|)!bM}vf}s@>^+Ms`Wxfe{G)Km}Q8a~KT|zWVnL9j1;>a}va$M8-PuH%q~B#E1-yE2 zb0{cBhjNEn5O4@ELXr~l)Ux~%bclBeI3VB=Ao&e!4eaQ!02sHNKnDRy5m;eMj#`GE z6<8_@!1$7m3P5qY1ss8h7g!(y$S??gJqUrEpsb>(fRwDD9Pp*Ef~?d%od9NZ29lXu z{=fjF6O6!w4*zKWKfJP^gvgHTl;pa43g($#%063(8S*kpJ}{8^qUqNuT&nU-NjL!n zEJ6U&WSXzDw2U1Ku|gxb+)yKp@r;>Dbox-}vRuGK0M+nny#49}vqV3*1hmb-2UEzQ zbbeJhSu0R*$#+3_A+o=`0r@R60%$Gm{znvF?Qc?Fcr6R;@Yjbde_w36NEO%|UV`_bhNXl9ozdqn&9(jQ z4)r2v#7E8}pzw^PI0cVY;lrhZ?AHPR7elS2iXK4RCG0hXiYm zE^`!@K#t}JKTmW=ikojDViLpyQ@^gvO^73z(mVtzD2`SrXofrR+syOZaZEuWU(yb> zx8yRCY8Yk>fjv9Js)jm}jI+uu5SQ5)kj83v>SBYX5)G%1%dN-6bS_bCU(0AyF%V|* z(#+dnf{&|T`ApD}@Dhrx()g0FZcibYQgZ9CbosI>E`F5n+(rUszz@&V=FQn~#b%a` zhwCRv;pnVmN1qJx(9O4&9&%Y0S~VhPpU#-GX+&>oqCW*gmnZluUv59enWMH|iU|j# z1uQoxTvo$HaPQ0Fqu_QWtWtbXoH8r<2}M0^1UFT>(Rj3sD z<~wxcxCdCYMh3L#sLL0nv#0BFLJs*Q&V0SbHZVXjGn+~O_YbX#Je@_d>98wSzQTd{ z+vH>#UIZT?y3G~igM^OmsjG(WegG$3DW}+d=BlNn@L=QF6ANUfqsNA%1VmWx&lQ#--*}V^u4aq9kLXUyl8e1 zd~JYmTE;R^h%^vlb%uQsx`X%4I{BcdX21Hzk;PH%*wX*-gDyQ`#3OdocW8zP)N=Mp z26&@ovqT;oS%ySpMzEoaPWk+w4P;<;Wt6Yi*v@)|y))6jI@V|IWpcD>?Uyk`15?*@ z8#G}pW@OHsW1S5*peC@nFxCz8UYyehQdCp=!kc)pHhm7HfwwLSAr0TdI|8MIn;eTt zuw2N+#$kUJgn-9W1in6N=yp^~@CbY(`pi>sgl!=eL}NU5?MD zgDhe|Y&-;yH?EtYNrY1WcK@mLYbhK{2>yh#F%BZE&8>HX5<($gIaW-2>Mn??6VBs6 zpQ|dXQZJv4SRj%XwOBGX(4Qheo*QILbFg?3ZjQ~^GF)kVBWQHwB$^^WIeWUTqCYyL zW$Q+8`8l96%t%7l<%MJsZY$fh%Xe~&dER4@w~*sVGR}p_1tUA)hHIuJb#&o;Jf=6;c>Xe$nSos?Mqv?4{%zMU#jtrQ+}I|8YIImC2|~8Rer}f*nXsB{27M- zG;1gXNNjY-A8ZVu`~bKm#p&<>IJaB@4gnpQ8%D>T07#k%Bn^O%<~o-829|Ws0c7`F zg5ZbS2?P~?4GrD-C4i0yAhH7sNdY54z`zjwFHHbFtLne;%zp*>%bjikXT)OcLkwO_ zR3MHnK48A-C3iX7M&11DWn7o zOaSSA!4N)j>RG!xhKUEb@GhQlh;5og8EHqIxt7J)hrv?RcX>sJnkEjUSlqmn&)oNd zG@zl9_}iYtQC?DT`}T5rv7dE6nre?*YIw!V;JEmaR%10YRvH0)b^(b0tj1r;vR!fp z=^EVvmC5+a>loe-=ft9`$FB_|IZR&i#>Q~xlT3$()0DU(XnoboV>wH3FcBvwC7Bxi z_SjlbVR_z8ljZ1{dDuH9)$U=U?cwI8SA~4!%7$4&7S>?n$Y)~mmm0n={RZ57fK?|| zD+y#mX#Is_*qR6Gn)yI^;zXXoo8=5$MFTauLP??v@Y$(^lB{1^H~|gTp;QiiU)qCZ zIJhEV^htHz)V3Ogq9s22l7EG13m)2-5WJ=-mt32)?^(atuw=`t_AGK3=n)>Ahh@`P zC(4hl;*iu$%g{)pHPMoNPm0 ze|2r8Y#P|Mx~uqs9DJVE`aV@S1u+g*N0}PEAn!w6M-L00n-V42JDht6~d*aJ>fmWoZ11$!5o)kkN-^g?%NGOmXSH7=cyZW9|CZeD*DqH4yaXiXO@gZ)-96J zM%0s1q(_uIJ$%=M%ac*d9LnwaNa%j_DpGfgibTl#T# z???D!y#A%M&uu!t`v4&W5Up>kEVDAw-y-%ccryS4`nOrd|E=f#E6i@9PnSoszMxW9 z**0&>l-cm1DDQj8_^m|i5U~@7OAgN;#(2VttLRg5pQjNtnV+!@dx}Fep%7%rZc(RN zGR0itC3{Cy&Jm^&);g^y41)T=S|8)?s|)GU88iBW^y@0ll^xZX&KG#rFo4vV_HqlW zFP^q21w$UjDxR3tufny@`{rJFZ-=llgu&Sooip{3+RzQ!l7~;K5m^{kT0rw{XEXGN zPd6W%>%IEiBgs{{Dx2`NiDOM(yTlL=wgCECJ^+Pp@PxQd`_+@!lWvqNj25OR@(%m_ z!>h%T{p+r+9g;dSVg>PnVrlrijUsaBHu~_s<*PJJ{h3c&o_nWP_QDW3@)Hu{V?vBr zCU#u9QyMA=^us~m*@#h0FVvSM96Z)>H>!V@sz zlR5qsevTh|Lqo5QAM)W6c8p?L!n6Z&zb`cMHuM8%q?mo;=v-p}%y4&{2iNr!MDPVJWs^}yMHt)P1xy*kmGizdY|YR^#CK?LX0ashiC@CG62IrAcyL1!0* zZ|7@DI?C1FF3@A99jf9%m`CSECOtzR$KOyFv799pEuivKq}eKsnQt6S z)8d^>yMK6`db=oL#cKkv3lV7+9xhMk>$k$RY&V$lUDxi6rL1{f=TENDGW3+7z(27nXJ@ z!IFYaGg}kSF^T``JipP1euKw~Q(XGd!a4;CMXMK!_RcbfH!6<#H1Bl!4Xsmk2ihbt z_`H@49Iq=q!V*&iM!oo!e~K@XM~9G%3d9q3Nrg#`>`=$?j8=T9=^m^45E2{Rm|VX= zEmeW$QQ;DE)YdT?^?DR0^=dYQ1=O=RJU)JfGr2R){od}~PJBF!c=z|-f_AaiQt0)7 zkH!0Hf#Rij=8GI=>nm=qt;3LQS@7pR9#2ik0U8gS{W~S`-*Pr9@XGzyL*J7cAZMq3 zSAL*^O|J4wzY-0?Fwv=f`?lJG_XhPB$N}_z;&5eIU~^`cZ$3AjfQgZ{ff1pso+B^{ z4(!(obiaRT?kr+yWZ-CTV{K;VWc0^mH*k1lWhZN8dnX6SKRMqV0A^qWke!9?A*900 z{L}J(;}QOe(YuDmZ(1Of7U2mwCqw8Ur3B9W{k+dLGSbrxwjJiaKo!Xm)Lz07aD=B2 zj(S5)>@m*++*GVykqgYCX>Oj1}M**`G~yc zD0|&U3L%pc%`3}q{nBEH(xhjQcG+oiw&U;TQ1ySGmZYK>d(0=dnTb6AC z^0tnw_ix297FDMQWiwYAOXny3v9JTj;u5F(bBy3l*e}7#7r&T{^zog&q!GhTwt+;r z9mVrwxS<>bQBRDK_5s0V3QV9M5ajQnw@nK!+aH|tNlJ1ocr!PzQ9X9 z%crx*zYKVCcsd`XF;UUeyy$BUJ+G^Ow})&!X9{}ik5j~(twlU-*z<8A+iOOu$?t>0 zg>f5{=(-yf8LL|qfow8fbrd`z?$eW&|=Q()emK*{UqEVp+&h&RhYqxM|*>0h1npA&Y!{fS@0HosAK6hm6S zSw!z^tLY*90wq=%6iYfD(bx;Zmw2W~9%9$$c)QzgIInepuhY~vw)QerjK?_OXG zsGzL(c)fkMcTtBc%WKls{T#>2N{pfyLS1jlxsB+>D71Njq0(VuM4AuZ+Yab?ql(Q` z#*{AQ*mt;(x`eMi3?2)OnPcmjyIDocQAUbEcA%JQZd zGL4MYc=Q40z+Es+OA~IQCtj9n_$&0ZoHr&^$PrfEY|`6uyLY%-jvDF*@S!7N1WvKo z5NNN&<%@RJC_ymRSaEwV+76i}1(4niaxZ>j5(14urp6y@)EQ#L3X2LSbeSf4C%6!R zkxFW{U8`dEqSCWw+)ko#L@^hFZ-FQCZ3R<0EI>DMK20aCutj%E-^bb4A3l5#AS$s6 z|DmvASI_QXi%7rdT-(qx10&pom0aWu#-r^EGVD=hgtAaLL{kpm!79u9OUGp!W`WT* z2O~AY%TyD0V^b1YAEOrJWGIbeql$(evA4I;u3-WWbQLND3tX@4tpmnK^`sF7oz+%p z1BuXC5q3e-c4v0q1ted$!w)iUuer?m3x}nvP_&1sj|0g72jmF7%%3{tTU_OLivPdk ze1<>9`rUIrgaMHArM_`KDCn;Q@B86rhFAO}Hv^4|Bxa=VZUpqUrECoJj4aI;oLRmnHffhi0e-AiR5-C041z_7OM>AtH3q1!n8*4%tBYO)YceDGCe7GnBto~@c!39BLjEgvMs@v1z}IsUb}w;HwmRlOVles zZcvGSfk;cv?)Y)*c1{*$O$MC^tao|&2C3}jbf2>PAQw_UhEKq#f@)W!>Wfe!Ci=}l z*p|FP9M+}r1sW@^_oyuz#59{5x#u%*`#aJ6!iDi~V<$&_nBR!HA`*baimrVAbh#(@ z(FvV0{;Tk6?} z1-?1V2cjaB_s`V498?W`0^DQQVH%N#GN{N`KwMhIdszy7Gu9hu`d%Pbevo3**=d}F zd&b;y>Ok4GPlo>5`;pR1^@vd^ijN&N9|=z`*VZ^c4!(|?k(KMRcv63Ezg=d`R7a{* zvV0+3ly-ZJ&{Wdl63I?F`RO| zLhK|_9>U9`SVUfB#LAgI*@a^UM%5j|%bmJ33}Zq2lNaMv3_>@#kx!1Sh)d#(FUqcw z9$AyozIXx+QyqRS-=2{WG4kdXBux`7r43B@tfMo7=vg*W*4j6Y`dux_-*6PLCg{N{ z{pOc~0jEWRu6)lnGnmfKtmv!Zf4~wB*+lj_{8KH-&r)PD#h)BfaU)AhBWp7QLIDFk zLnABTKY(FiLPaA7BR!x}hfu;A$VrY)_ui@lp^yLrIe_$mTHx`;1r#NO1PFyJ&5W!a z2}Oi}iDw%dN8o!183Djy@b?4DfC)ba4h9AQ6VrXs0C3n7Bd~tpe#xZyCn@s($^-pP zZW$W0EIuJ_R2#|foQnSntgnxUH9rT!yu&IUG(;Cg*-|^3+8UKJBpx1@EQnPy6ssO{ ziEF!1o}mAuR-1$m`urMT1yA!m)k{$5J1ZLI0}6`7=8j9XAmG_}BwcgNH2(Lw3re%VSvKmR4cztyHlGl+=F6>he6xm06gO3{XRsBf0U zSqOtyKKc65&p}v$<~9}&$^-2~=pH}(!BbE=FaUiYou(xX-faAGdS#=wqUVZsviOI!~prr*`3{0%Z0m|1@AuTTuMp0B!4rBl5sIw&jb>T`X-?SQ5gjQ-JDu4K0SuzUmiJAbW{Wq zP#OL#eH%VX*{to$#3MN}+dE7F1MC{cF#ZeZ5;cay9t>xbl-fo5<1vfw(N_U6cGgIA z2A>F&au*d*2Vwjvec`*6oP?_oO_VT4y9h$0GU7;TDVyJJ%ih|2K*y6nO#$FdHdAkib`cH3m4oYB|I1q26@=S#MB9qKuU~u?{*iFQC z`t}m-P?ku}?77Fzg`~;OqpL$diAbsNFhIHstj0G9wLj^86Uc)VVQ71zRXUV0PU#dZ z6>nmme=)Y$932!YL|Me9b*58Erl}<898Eovu4+lGJffXq^ieBJT$kPRx*Kl98NvXJ ziOTED-(>5mN9dLsX@ZR2C6}>-WXCYAt%lu>LHJm#A=_9W>pIn=`Ms#QQ=4XX__n!l zM?*qgJL4l-4@VY<>i(X)ipTbtU$%NXNAjq4Jf<|ZJu|D#`C-fu^AhIAKpKxitXU63 zs?&}XkGnkE0HNHlW|u^{Mk}eyjy+X@i3v32aZ&R594G{>V#mI&<4&yUUYdl7tBU2x z89kn<#wT|(BcEFmq3~z}7kF8f5|JT~RsPY@a4%uh1l z+o6_`1s}!rTNxPNm@3gSp=eIKgHML_Q7IV4A=X2vR6D#|?r+_Up7*C|^^ZJtdviC6 zAXuPIV7B9X2AOv!YPxIb+PA#3wYkL5{b7>E&wwILrx4paWOIx9h-PvWGJS!zh0S;Z zBDPsL16=^d;MdHJF5HqAZ4_4m+vH+UhK!Riferr==5k=~{zD zdDy6OB=W_xI965s*J+FDj_*2c(Cqi-Suz@wokY6wd$B24ILnQWi;{*bwEEb?8Ms~y zE+pKpYE6x5oH{qb4aoT;zvmyt)BQxXA+GKMFJjh;Wd}jBx<*1E+1tUJe3p>JE>4<- zUWqfk8i1+w#f~M#)PsKzQyZQnZ6f|Gxma|kytM5U4U1$ud~fZn8Orn}6+Gl~*hHs- z1@HFTX?M(zfH8I{g32V@wn0yaL+f`8dAW&rrESBOPbFK)iA_$RRDEG%BHyflLo(6K zF+Y-#l_xGE$m^bPzuSS?E1=K~6ZNdyNnMn?+_FIL2^kTZ-ymOrP_?!ZML$xd-PVS8 z=py!ICmiU5HyfcT;R?`Y!cx37Lt}bi`rlPW{SDItHD^EjAj&`=Wd1wTn>eOLxXf^w z&l8<~)mUvC{@HQ?EPpyO{h!c034rLE4}$aE2T_(*`mY@jpwscQ0|FGzYyK}k&EI$* z?2qoMG7~*;^Tbh=l~)q>xz@OEp7kMk+1#r~UE#ERz~t{LGyVpX49v_wP3D8l1$rOh-!aM2AB%e+ zbkY+U`~K80l->K+qx}CUEdOHZfB3}!78WMEj%I@KkaejC-zHsMEImtV!Sa~gNdyM0pV+l3X3^{@$Q%qt=!O8 zW4@c=9O{`=#1TWE_+dz~B)wL8OW(h)Ir}~W?##`Q99_WdQ7m5$76o;=pci7Y#mgdDJ!E*HS(gL{Yujq zF0P4J!9m1rb708a(3Nyg*tN^pcYHw%&>ESZEyB%bia=vC!Cc7H7J%iOopx$Kh8P8^ zmP-vRFL8U(V)uT!Cdko~oT5T4bCJfzOpQTOpMg^DPP{1QBYc@3nD6o>{|0yUvvnL3 zmA`xd?1o&>g}jI>i0`hJ=^9zYpog}?DH;ubE4D74yS*MBfdOqu@o=_C^rIV#)*5*# z&D%n8Owp-m{#Vhk0nbbsE_U}3#_@W*k}*|O$&KhDM7l}#hJTvJ{$KbVu;Rq|y1B1l znRa5ey47|_Wm-@^|Aj<;<9F~zix*q#qmvqYz)yyUg{DpK%R(Q#9z}cpOuof5AvzcB zaj~ft3=0Q8%-ksq4RfA{Mt}rmqGK;KzL?eVFs?k=S~?HE65siY1ZU)K(Y#SYDfv?t zF3eLEa{(MNC{ymYFpu!r_1 zBeO@q^v2u8%3J<019AFs)Cgwx8u=aB0c6_92wV54#~fEBMgTl#>{RQMc_dy$ELWKK zMPT+sQs->WO-}Cu!8HvgtDGP^8(ZSa!qJlpV!gg}pAh_LCU3E$dhG zc3)NZrK^h1x!oo>qqpWns=ljXzG)RZ?WirhnFNHGejX_AGkE9RTFQ>O@=SZAoRdgl zcPy;tgqjIjIryr!8r7po2|^z@CBPpNi(y! zdJ?0|ucds$px007ZcQ&zkMl+t*tOA%HxofRK5FI_a1?(Ec)_hu$T=IQ72YQI$Zli4 zPZJ%LW3PVS%N8^HP!yq~@suoZyS0D$*2#bRp(>b-PBWni+VSwQMH(*h@{;lxGy`1yMfW$xU0{-va<&Q|oL!boMQ{lc{ zD+_QgJsU7E0vxS)Zx8?gR$zhOx8?u0ewn{ET>4nq?JuRpb@u`CZ*gSv(x&B*Wtug zJALKhF8JCUR#nr}46fJ*hQ!jlL-hA<&aXM5A19?+A~?Tf5>Uj~Z`ToT+pZG{W0R?V zM$mUR$7C2opFO)&U!FQGS(#**|?UKqP<|j+(@tqHLAgzv{UIrcM-d zAO8c2;OT(!OZo?&nt_#>k(m*|#{M^ZfC0evQw1sn1JKXG`qv)#iDU0ePkrP6ybb;{ zsONvsKtq6|vi&=I=RP+04e{U748SY{fR%xXnS61RbN^GOphyX1 zjV}L7mi$boFFJEm= zi%%lua#9MjG(dkb#Zwt#S2zqOVF;}7@ALZPQn8Qik@n=WCXHPlDPPkq#;1aYC#GW;LZwgz)`4OwG6d8?Q`l#y(0+K+U_fJ$V-y{af+g0Gp{Z-%ZSAnnhSO2^r9$KIf9JmRrcv$mQ zhX=6p&&hN2Tu$lwbB_UqAaw`Mkw0lfznFmd_UNg!u+BHu~!y% zoSg(OI-;bI1d)EN16!#BqHchu%AEI;)? zfr0}v&iDE@pw<29Klnb7>zn^)#`zyIy#J>Z^e3YWq#lN!jPAqo|2x0PKONvYFN*kZ zLT|XaA#`}6Su0~W-MEc453D#qC9rGjM_$MfE7eDXtf5j-CM{2Bmp1g95;_o8^#rv_eVk;}ef}!FtY!s8JVP3?X`4r5DgaQ@}J^q<96+$v6 zn%0+r0i|YC8PE{6I8q$JW}=zMoP=kbvyAh++lRz#Il?YD;A#)?SK&^)2?&>#A2E$A)F|&Hm-WkLSwuS}_*(5U8BAYn?L|Vq)iXf0 zxp8L#Z7?H(u*j)l#G&r~D%qarb-=Tbrwx;*G&i%higKU0mQ+1PiK+JXyBG zR&22@!&eDqqbginhe7DcT6mAUL4p(|KsG>DAL|+SaAI`c3((!P<%_V;MbadmS8u!z zW{(sUylBaK%{26uOU)aoSRX^U%eOEFw9+rwPfp`uh^>nm6Y`xVbXP=zy5}Le8=fIx z2G5pkb0Dip8fx%A{lBWAIMF%XM&z&zTuK6g!>_PYrnOqRfUgCbgW zEuw-^lw(x-8X9TGVu64T%6=~>1ZACe{y8N5`XTr@8Pk?e=a6956K1&oB5?fo?vWk3 zNpEjoi<6H1C_AQk+KC;BGTbj){Xtae^wvsQsu)>al=)bH8iQ5m(X&a*-r$y6I?-c> z3(pyXAg)DfK%sD-8Bz1KML;LsJB9RM4$7FmxZsAo*kC=QbRZ&|v6|`qkVdbP= zt15wglKX<7yCWm0vh9iU^yxSb=b+1RL-dj9`%BHcE85exzB3V=VRmFHwwG=>wQDez zfkClfLlekdeWOg)L>-kQXA#U+B~N7>!GWOJk2gtNuj(#oGbi4jh+7q=(0?bjdN{L6 zX@PC)O`;d;AqUP#iXcKlolq-k-X;lmo)XnjirsB;V#EC5%E2J~0Hd-nSCr~v7iG`B z_TYlrJ6y3nEI|2^o_9^9aKX50cIEj@O}GZLMsA6mMz`|*r_IUG7)-D{=zB8%?v6R;8;cn9HEAYm-OAPCn zfHPc*-W#&PY20Ylg6B4z5Y0obp>UB%^f|?H**GXX7?1dojzp!Wi#;B7z@Ax=FM&n% zchyn%f7Gf*$Tj1_2FRA1wHZ6+FB5Qo(mf@~5?U`X=^6AwMaEw;&w;R=vm*K^ zg(Pw|(yrg5A!x2TDw!7#6#?b(=ZTWTPw38I>&qXD3Gub`0uA|#q7xCyls;(U1)GB; z8tK=z+L#xd(FpD{mc4nJ-rD@lmi#+Pc&0ywQ9h_Db%C}-{CkuR7F5s&1O!xsxL3Fi z1Ox=^7rX%^f3hqpN`Ev}fklOp02VDhC?o%sn?}X|*Y^m8Y^r+97=s!BD7js_AJQy1m-1yCSyzXZrtUzHtgQlqz@H# zHML3^vcU(hnp^hd7y%(tPoAm0Q|kNzmKZUsPu)gBpdazEtASEV!j(H#H-zXWd5*QW zGkbzY8N`Ie+Mx|h{V;cNqcWS!y?>cC4-4b$w*H`;kN?a{6XJH5xu0agkr+pZ2^B@> z9VqD+z#^DV#`2_COYJUB)>{dQnG7wklb7ox(d+thavc?6h>lMR$LvGQ-9aS=Yen69 zo>a{x;X`X&IXw+DT8vg5zAnkrO?#JisaP2XRJcS@6T=cabDcA-^nsk1T}ovy%Qkz* zas)u13)_0%L2GVQm5yN!9Ok$3iRzO>Wcx&rg=qd!pKgE! zO2Lh$mz4eVN~$1K`}K!41dbp{N6$%(;7&eScx}Z~o^wUNqn(`6TM1@tiW7klPSnra zOJ9@mo;M9_;~zK5>$WqDJ8T@ZX6`e=IkplKzB92rd<5>U;`2gOHlg4YpLgZU49p6X zA+^CYPy}yf!*%;e)$txJEzaOxaY{|Gt{)C9 zS62X!+RFs|*G>)NfFa#S{?X%+%11KB?K+O&{5hWky*mk9UPEnn6kzHo#_#tnlBQc- z747G6GLLF_%GU)0>)(pJr`K9g&-CHgyqdm4Ma$pk ziIWs`oal1Va2SdbZB=1ExY~|k+(}f2AX;MY8f>=eW8yT2HRH?d-La1fHwYqbvEoih zk6)IMF3xVG!g$=~yExJmkA?$=d>lCUmgdC8jr#ql?nMfoPnY6j~;)~YX@}Yi7 zUyEmOCkiW$)StY`3ucogWH0i3=1Gxo4fJ33F_~C!Bm4K1Efo%7L`ED!v)N@Fm)r=P zb%gDKu<5{T$od>yRcW(B<>5%KEU?pZFO(2OV^2!H{yb)DIr#Zh?E zqS;uOm>yyT-zfUq67V1XxPM~lH$-tax#AVuVivI1}9 zU7Q2R-jw(oM{zSDE3L;8UOL;M`&Z!!WgGJqgVL!&*ldl1j?I1 zDkZ7;t4mk7q&jKS*0WOgusQJ$AJvSmldwQ%ysqt2w3>(RkE+u;^goe%Pn*|UHV{vk z%Rr%~uDKq8lTwn70DlY=RuFN(CeocKxikuk+y)G=68dV;rr21Ci|h4Ee^eT)P;3^? zD51CTw?A<5nS)}&(dnHt=#d#JHD(wZTjC8yW?gB_bwALRuO8^nS6ybSC}BqBAl>FL zUQco_MoD_DVI0I;c2wEV3x(uy_*jZ9Q`pL5pfKF-bh0jnb?^|qhk8ljNmZh>JWo}; zh9{&K?bAt+Hc*r7XCC?5$LB;x(Fn2g#li~4gI>{yA;2o^8(E}Or6cD}Wx zUZmu{fW_Am#0^uWSHZ!}qN{t4v3XI<{VLMz4QNMQP+BMw9DAJd_Rc~&4{5U!+5Th+ zM{zg5v~o#x?d4l}A{kG_r%W6r~L@-$@=-MdU-5&?PNORzoab9>68Nr5SC#HVJ~K6;4g?F}Q{ z5-5s;t(=1sbnK8zEVl$U4L+txJTjU6{6-%fJkP>rVdME`_=v5r$EZlKW&>-U9JpE+ zsgDtlzenA-Cw-w)^an zFBC%G^qMySdd=CptkYN6Fm@pIrL|DR_6urj)K%Y0oV-9Wg<-Hew7QTLyPgXC+^x=! zm5Wz!DJ8_VV5%uMvfF9sxKxWid#bFAO^-XBXr~+h3!<7=U;3u3zMmKL;PnGb|4ye4)YJX8hYQo6 zy3$$zSz75EOFstjLmsL8z`v#;Y_R;+z%T4C5gNHa)AaXZe^^wY(9_Y#-rC6Vo{F99 z%^cl+Xh6m6ZJcZw(1GLBAJ`jSLP=5V8&#`+^QBpUJ!XLwr2yuKd^Xe1OTd5p1OJJt z%eF}zPSMy-Qq!r`C~$*Y7wSKnXwo;!7B-<_FTe*uxBm|rptvJ{SeQ)O_A zhGNl1@L`7`^{Mw56L*vN*`nLWnuf0^M^96vI$j3ZnMoQOTSj?v+qRWa5<#7;w{QBC zuS!MLCws?%XN-#_dM1k#D{Zrv%fZ_C(~U`}h5Ix_IXF4019s*nZe6z4Vq^E@7` zs9p9G!=+wo1Xzl%=ku%Rf)hle>&;E_C{#_sU4#;2w}^n;+Zr~scY>z`tx z7oMc*D=KuAQ%~#DkncGs_ZSl_3}=+B7)fcI{RWLhMK7A31ZaoOJ*(g znH$hP<;DiG!IvRSq0+Pg+SN~p?%deH8m&n24)mW!bE(ZrP6S1E( zcScaPN)lcxWl%U#YWk`Lml~&^t;_<<`_KVcXc^0Goyfj};ga`n>!@W#rX)wn1~=^c zADQRHuc2q1=kE8>JkPuST1o*%*E;R-cFoQs8e<&#nW&N{8?<2f_`8JHlgV{d%kkJg z;^opD(8Ggbxr*`BO%2y&ADEQ9Ht=MuCbO#E3)*b*le1{&P}D<5Y(+3dZxLr)%fEKB z6rHR^uSu}>PK8h4Y*3`-o6=gje$*LoM^cy*I#+7Gf=N|XD5R$~4lD(Va6YEpj&S<; zgvpXe>DpsJ;Q7~u>`^`Tm4t>;oiMg(r%9&v-W=$S6i1SDIid}8NkyQ-7TYfpfP)1EQv+(QKUmajpQjayR__urha-N z^iga6`CTNwTJ{isnzugD+!7}Fw}{8@^!k6p)hx`wMBc;Ky+;j(1Juf8efOvZKBSG= z?|d%s>7cRvL?8U;K_dTQ+I$#2ci-U+08B1Fl=?rUnK>BPfW<<0fCv3%0pnUT3~heZPWN4tNc`i_$Q`JU=TsQDxsBc3 zjLYE5_T9|E43zZ zm}Gyj$mQC!!kwD?DZ%~c@mWH$47dR7d*cp^ifVQrOA|6Rv(^K~&gf{Q9S!LiumPCg zO#fr&`>Q`|Eg$3y>;N`kGh#MIR_2E~52l}%e;N+)fAm3rgC`?-$?|Zw1j%AxDP>Of z(4B^=fXgjeoZwr$p-1x$)mly`Bd=xsPTMZ@$O0{=0=4XIKitmi*M3wAYpD`e*B69& zfAvBOdFzh}Pd}6cNgPA1Gu7ee)g>!sBo!W> zS@Q%Ve@%A&ioYM?6!7nOQcGJ@J$k?PsX;>CBGs(RX0OYObX_eTl|NN+oa=-itC{RQ zEmV4)2W!R|>4bp=2oO)7#(UCLQ>X^B=J-`%%F)*?H+^0kp=vVT7$CJ>S9qLSt2AWR&aQH3DtxYpz zgvc-U5g_!FYx$3V>F+ZRz)=ytLF#+$(4XMM4ER=p_#IC7%m2)W{F4jWqT;DH-hc<8 z51CnRS#Mh_upj(m2dgJRg^+X_EidXQpamjlRfc^|`S0QLJNnjh=7= z&8CbTxXPLo?WV^KD4*cpj#yjz1XH4c(?pP@^cwotnU|u{Fdbzq(CBev^VzDTmVqd~ z7=dWKW4(Iaj!~|Emmn?Vt%BByUGu@Jv%=Xp-h!$!&L!{}1d=|Ufz!Fg)__)u?H;cQ z!ncvpLA zxbq1cwilsrpS*8ktEREUk0_d)hicn1`k-0vb`_SSV9AIiS7)c)88Gf5e}Mpz8pjIi z&<~}aKhCvq1tE&6^0H4@tU-YTn{JzV)onmS681%N{s95FiMa+fsebIN5|%MHxjto( zOs>V}uM@IOleMdn;+h~>Fh`KH!!cFoyPr7ZzSuwrrKp_oLZY>_)o9etL^1{BL@O58 zfW_-x!b_W8ex7`SaABubN4ie=*+{2i>@)WhI8CAMyr3PD^i@dc1!h5%m?;j&a%lm- z`Qv=?v6|Eqrs9+Q_HNm;(==y;O|Tv!sg8I)c|#iIjW>tflp|_CT*x0AUs>PQ;K(UJ zNIh~4gRrWn6ubFL=s$1#Kj+6EVzQJ?uOte}4v%cR))Nmiiby9d(wXlzu?@d)S}0Z{ zyJBZZ&%K=6!(~%k7L>ZSbnYjC<3K@A%XmzC<7T+9ynME}tk#!T?QAQbdsh!@JDJIR zn`HEHbYu31M4TQdpe#Wy}OZW&a)a2SIvq9BBh7!K6`sM&gC)l z$dM2WuRdme*({eB@32I{8Kf+}e3ZA!hSp!zV0?h>w|;nWRDfYtKVPKBopHu6unr>H zN$*%yHSPPkkSxAAq(YhnnhLDn70pVFnqT$P0F`c*33%pkcypz_$vcMOdFBmLa9vUl zyQKAY9O~zef*+*1H6B3+w{~~E*h-jPS)fRqih^7_OO@@%lNW`CzsZpu!O6j zQuNkl@wuXklm201rsp*KE$PRh%v9u&um<*L&$?^#!C15KpW}|KCZtgo-zJqSuAB%c zUKi2XCuESX6+3ucU=tgAaFrNUGJ;B>^YUcN!Bewj_sp80umFaf=`d=N(`DpjX}Oq% zR#FfVa*Y$4KHy49(@=$l`O4X07cFXgcs%L`L15!w^Yl=DP9ON(`OA4hC9axk2e9Nc zyCQ-~qKV+;!lt9AZjeoIqQ}E&|98svzhmWpjmLb5$sPe&dG@;p2~t_Fi6Q>HZDrsr zY#M9R>sLl*|A~=-Er!t^#s&d9|G`OUipa`~5Gv6L&@rF_9zPg&cvuN{BWqhDIs+T4 zdm07`67S13nSiz6_bT;!ZQ{d%jS)!0|NT4v6ZiIwyZ0mEmlgzVV;GrNb>fIH+QrY_ zA!`j*Y~{IuMum3uAFJ4%yR^E*o!IBn2+yRyN=4($+9HXDg;kC0o*|1{nH685<(-4I zU(88HpYzQQKJ~CBa|u;1o7#o17I1g4wwiZ$75MZh1jRd;&iJu`rSdg*ntgjS-Pg|g zMFi(H>`7)7I>>HDBuvQ5&6zWtkpjl~8OZ2G}aK#+;W)U3*;2-SGlu-cFs|gxz{g z3Syar(Xm<4QYW&Wfg;K&V~}J5m31GH!&?$l*8ilT&plX`1{)OLvK6%qxwMYtj6Ei6N^0)t?T00?x}#>_FB%pjSW2HF&<7+3 zifn{8a0EtHf(rUa%`<>g5ulhfvjaDxSu*vtF=P+dvai6gYiaCi)M=JH;O4QBc9)(K zK)FDHSN0tw-?TT%!39y=eQ4ZSo6GAGGecRPKm39fw(ns(4K}qOj7dQQK_cz4F8&g` zhbv_QssGC911P^{gj-wKh}1|iMo0X5ne5J`lO!-VtqcFS3ym<>1E= zuBXQ~?7eY&UA}6iAk~*cif$YgV(f|KelIuo{Q~ek0r*w|kqK(I z19n<4GIJ+X22RyrArxh0BvfK&5CRC?-v|btQ^46!57?N;64+Y7&;#412gdc5ABNyf4Sp7TZA7L1rOHQo;{!~m*(o>xC zOvJMWK2pK8G#+)S=hmwMJ6gKr75MvoLC|5OnX0SoS1Y|*5jc+eo+o%Hh+WB)hHEuMdxG6~HYtfy`5ki{i9NJsdgEs_^ zcb|R62M{F>u#LTYYU#VzYDKn*yDmtWE>>CUuVG8WGF8FKTsy>d!B}{(<{Ek(Awo0v zy1|8|FGwcQM^p?mHHfh&z3 z+)J(aZUMs?wul;?EOgOS472MZ?gF`VsHx0|#vT$ShKZx1U2bXi@&@@yT2L+GRx=#_ zw%aU+kifd8wfSDK9nV|8xlS!bmhvRdvL=>T;sOHkMHbPdYGl*(JcdqKbvi6x%*EH(k=VI6n zZ#6V)l6%c8g~&iz40KgO!8x5~nj~kHzkXiwnV}tHpL|9Om*mB3Ie$YI^8TA2|2v)h z-&hRxKazOgrUcpp;|`kN{dnG&I?#J69~dX=*WNq_-KAYvpIZL~a{z^(tcJWa0|kKW z+x{Yuvez@WanU1`aM#xZ#(&*`i96tCG`s)SgC+UipB@|@Nl8;cR6>zZQBF=7*bv~` z+)$@Iw4OW{FM6I)+rTc+T2(<+2>uQh12LMR7v<~?yl3h50MD3I2Wp_zOpZM zHPJrzX#{JLOv6E{?dt3>0bg9edCgN(xdeh=$Sn3YW%mvat%WsU4uP=kN^779gRqQ4 z_cOiIo2|sxm%O*$GBz^w2O$XNSBpnH)`WSPD77-Sjlu~%NG~^gq0$3L@Oco~);U~&FKB4tIe*Hb@`$FWmT6~_D^97JXjmuzT9lAHEV^vvDV@!p3uSwF zD)4xZPb`AZKKPRBHrIw)31s;zN2573;w~QUmu&m!0Y9F{eqkTpW>8f;-82YFbHh3~ ze+$nN-Su)`4(V(VWj2@hZRQPO{Bt=n`p3lnvQE%QZK-3mc%P6V?)r73vZWi!MpmMc zhRR{z>v+`5f0)p_nna(U&Inde-pyOv?F-B#C1ksf9EN8OSmE}qc99jz3wa)7lEt%G ztF8BjcmA%PqB|S9ysp1Lf(qpzalaFg+ehVoeIi4Qlgz}NNq1HR$2Xy~G7^xniq-l2 z^9#mQU;OT9m2ErKx>`xIKFo4}p z+f-bI;rsjuX!u8hPKJ86Mh=b)f6NhtN02cyu(xqAG9Y{i=R5(R-|uKWctqeF32_x# zMkZj_17;4kKUzbB!=oF~D!H4PSlj$7BM+44vppQn*?|7weUoS4m_gt+29_%PSpGlp zNE*Pb6f{+k_%IJpSN`bXAK;+S;DR6!2@5b6I`V{cAaqHJU}J!_j~t8eU!wKOib z78oAz_dAXE-{22eYxGm~ED&gZV8`F^2LsaSEd(Je#)tLGJ_q>v{kH-5qlwJFfcYE1 z0XP^4fRzF;z&~oxIRYpQCTY>3J0)|gcVpk0${j5rvOJx0Gru< zU;e-2A^*t~eY%J`F({i0nkiToydH^J$|t)>&NHwrOD*qb;`g#ju+Bmh{=9;k7AL5f z(&7~8NK=T27yAaYKAfg-gW4XgLdH{ugbYr=L|1`}~M#-IYsh zyS#{u{A?2*nB;c~-@joJRshS-`7RBhCHwe2T48+5QxUurRwcOuuf_n{x%ZPb0|yxW zL?%Fa?;k@7P|?3JgpDzgUzLGP=%elETJBfFt~EVBcD`TW^uUCIH@_+k@j9SDiRq=^j07i`KymGh^=*um6<4%Tpj;01|B52tg z3uO$#uhey0((p3*at;rtB8J~-8~+BG!2VQ>KQgh9g}^vk^mk<9k0-)BpQ)`8v&AoN zeIZiwv#EmzmNoqc!1<%|!XIM~9sdh(GO_@5=|6!J0064g|F<6FpCWYqTCH(R;gs<) z7_jjzV)`ASC&{cIMWg%j_Fc_w#9~Y@$W7##@Urr+mp6oR0>IQjbzY0}`zawex4q{w zjeg@tyK!nXI%tJ87=P(eDj8RXxFjWn7YzLhHQLADkc9){X5*7(%^L#wICdj>?I)s* zZvyLZ>z-^+iKNX`lU4S=vz08@&0VaS-MitMRI_j9>+P#vlCroUwghj7Y>9tA%bJG862(+JqC|R4C<5YfO#uf763Z+e zhFeLMadR?(T)ZmpC@R!W(oyF{$usb?p9%Zt=Jija)=2TaTkG5m(#ur@G`bVY*&wki z4KTr@Qb$dtv{3cZR^fU{DfEktiIdyw1n*9YY>FGDRVYR`X=P&?si9<;0!Lq4#Jw{k zN;+j)-oI3c6p-&@mUE6Syx}H5)*LmA61`Dn(+`tVgMf_Qh8%S0f6V z?fWn`t*}12L%aS2dbw;wmhkku8-(E z6GXXXU6P|R=|b%K#hMB_PlHt#Y%WTNS)lbt!y~2S6-g(;w0NZTsRi&O4a{w^&}uc! zxHm;JPpF?rY&Z{es3vo=Red$1iHV6_`6!*k<}8zyabbmzH-5EueJX;7YBh4Mu|Y&` zPaSlk_7<>DBD3J7`ZlNLg4r#!WBC|N?>zqo=`HRPxN?D6&ld8WTRP6M*tjYOJd&^q zEyB>UdJ|)}GtQp;1g1NsSG}TDk7Ih0Uqtmy88Z+HAP3XJPjyrxeb6L)nQ6fi=T2OeR*nE~TQgZ8d%eA8@b{b`lGEVICc8B2{ggQ>P#G zi7(up>lxBkctelp0o$$PYOfrV{Yo5%RSQZ*E4-|&Cyq@-4P&f>FoxCk>G^WJPgH^q zd+uq;5-cD%c18xoPG5vvic>H^>xEIh39};YYYdCx!WoYoL20}9@cq30>-h)upnzuz zIc{gRX88ibNI{h}F+Dsx~9=j$~&3S;L+UCKvf;7_k-=dzwImdJSp8r4Z^S!@g zI2;@H&E7b!HLtnWHP>A8$6fT4<$V0sXH(J=2!FwVzx6yNR>GPBhAt>@@B$OpP;{?15#q|>x4 zKnM44!#IEk@GM`+2yjLo(4p$T_$t4`{F;e_DD~>+fv|-L5o*%9B@xkf7y>p^F8Znz zV!4XxVs$jU_M0DENK|R{3o$T8>DfLY&pl`IU+gj2B-K<2a$MaIPNqe_;EF8o@5@|C z8zPj;1Y-gW$bzlS&}npZt)K5A_XPLxKlY8n6s<~Id!%PPLh7djTGI!H*Wx47s6KO6 zjAoK>`da>!L2a}3Glkcq3AxDF%1G7un+RL-OMqZ?KlFnhYnwiUafY~)kRwddP@u1~sD#Raw_Y|uBzUf;+YmkTBEPJEPy%*O$QYc4=<v5}CG>KYq+g&X6E;TNmn<9HHb{yRykog(t z2%V}ms$Jn+Q;Y=p7Jt#zd`$@PEhKaKsl9`ZLml)1PtzUFonw4Jc8ORY%1#g{XkVR- za+?8Lxq(>cBrTZErkyYRtb`!d@72QJ+2L4Pz~Y;C&ziT7*+D_0=*cR!w8Z|zE}{OK z(ESAA>H0k@Q#j?J=EugU_p?9=;S7cQ&BK;@3lIuI36;XTxt#lFWhP`RCt`iGm9;$9 z;KJ~a=U~yi*4S%miD+PwQP9iH;2ELK3w3RF=32IUl-2H41+EElhLn!$^@*E7a zIm^8s$^eH%U|9rfM56w{K9=O%_9o}7ns)ujzOP;`!Cr_+6&0=LB~DGsCj1$W!-1dg z!kd{#ds!<;an3In;AP_S2%iVPYDU=CloVrXWGBE6;#FLR!)|pMA>w<+A9A@yS!ITc z+Yr5k;!e1p_;#R+SFh@Evtw-LxcSM`ueSi3cHbEn49^IV#GZgWeUlS#R`*~&h)UkE(4 zxkLE>KvM}6nzR1Sf4E1 z>Y5UW8Q4+(@JWV)raO4CwY5d_!PQKv;=lHK*gviJyCaxFk6m2!{A3Opkn}cWXvo}zbxY6y;37V#$1D~t zzVUia98Gg+?@B{1rbFW84R@@4fNN2w&9dcnq4S1aRcAa}zjJxr-205?iB$z5X}gUK ze#o;9--r&?@P^@|T>b2=_|Z$q3PF1`ViQY0U4ZBQWGX%d?pw1mX%&qKHTFCNz;LUZ z$IwBFPjjE31wqcawoC&djY~^5n(mv482^LR`Y(ZBIQ{DCW?QQ3Db8n@AwfiODK>L6))s8iRTTSch+TYca^P}2f!nC{gFz}JDOGW5MZpfo^l`Boi$T?idx zHGHh!sSED7Jd+-7*UJ>4vA%S9AOknIgTG{}|Em)d;w@??S7N_Q;{%ZMj2M;J@ zf4${*NV!)bxI+deAQS*UdMDWaUg-uFyT6ge|HeD~DyBa+xxWUOcTa~sg=-QVS|W>G zSUA6UG|oY9TM0qaWF4}WRzsx4^+IC^=GGe?Cs9Tkn>28KQd7fZ8H^dHt>Q83Hk{@PKN#+nQ zvjn+HScpC8N5nx)M!6Tj<-_TAJC~ntc^( z(R^P*zb&$R3y8pRq4&VO*@YK?D7Ph#>I z@)Xjj&E(MlwWjt!3HiAD+bV-d(ia@mBrgV(5x2;J)QK4Dsm(zI_u*N<>axfI!gF-a_vi?GUigv$V0**ZZN>07t?9 zcF*@8OmIIN6#~v|;JJenV383>G?)PNce4FEf#26lRz_OY|6MQpE8H27ssu^mWST!8 z6)`bI62ae|ep=CeM(0Jr7bBjCMNEh$u&~;TE2E%R61Bm6`_y!E;&Th-e4fnH_XZu> z>RMpE$3r$Q>~)8d`p}8*vP`hrK^tvz-k)^LziY}0u1?Ud1I@^skeGnvj4VE@g0|Kx zwK~8xbwBBFOd+v#`3N7f{DEmXAs8|NZbyI?rvEL-?5Rz9Y(b3wNLWvewk?8#LC73V zm2O6wM-&R+;0@XAhudcg0g>rTQV+_=6+DYLr)P#mN z;HYXku~O{1gu2;H5Q|V}IgV_T^C1^O=ImZxoH1&tfT3WzHeE`T5t#EeY5|-L>D9Xu zM$f2NWo<7*3gVuq+kAk2Tqw!0>P4Fdo^#oDLlK}b<2xx0UbEtxnZs0o%m%uQDK^D# zRLOZRXXjff7%3PFQtSDwW_cB9Wj5mzc{pgS4muaeDsDED7iNaItV0`ero}p5!>Vcv zlUx^IH~3VsnbbV zbcALDK4y1fKBtc7ua3njX2KGS5waot10MUWZpuw2^#+6MzT8^E618ZgF{Rg2jw&{8 z4aeE@7Vi1aqn;75mq}N1C3E|n-2iP!Ms_tak@KIU9=HncqW-z~rGG_&SA=^?S6Lb9 zy8xG`bfFe?gx1P&ZY9j9rCgs*6Ia|$tm6|P3i#|^X0D28bJ>PSL@%9Nch;aklzWLk zmElhV#_C1EQHmB%2)H4S00|jg9=Oo#y*@({WY2iX8;N130J|V)&Co{8=cy?MsK zbMU?IQBO#z2wyS-U-(?0^=Sqb+vh)=ga7wpjPFOt1Ba6W`$Ab6SiVhZqWgBq$ntec z(|`GO{^nd}te{wE(o>{AYAM-nr{2;I?hbtA@DC(8X_zQBw{l*VCXMl|W3`+y>m6&As~-mFF& z`IB?;pHwb?-#vx>QHxePQX{n3-uDOYju(eiNgMnmj(*p6{WupV?J-uHoBUMqsTV#Z zq+{MG1V?wWPc~Xo!duk#afPRE{*yLwRdW#vt(Pb(?!sGoz;p3g1_Cria&;P*=zOs{Ysc(XakUBAuP*>frLlu||%lVfeZTd8zE(;oiKN~QfXGQqW8K~v5>#nwwg%0=wxH~wtta_cjBvU zPVfX-&@sl;qM3cUJ_C-4A~4Vyl5zGtFu~F++|@H%Wry06hY<+X`@@45=RmIp28)RWJt{T;i%*C*Hu@<rg!gfrpEx2Qt($WF{c&QY@?#o6AT*AA zMs+;#HnbydjE45;Kw$EV4AIEMJ;DMJbm+WhZF1T^yJEkS4_)QKqiaZX5-)-Y*f>P+ z>HSm?W(Q#G`HXEZO|9Mb7dyq>x-+SJW1I$TGr}Y#NG>%$LbTZ6bb076#%x(2FwLwr*3DOuFbl`;FY;%qGN4Gk_ zK0(NL0mIE7VSfSF=EcUTx7?abCD|;|IZe?`ggMexWCP~SUBH&XMifUo53So_k6N!q zPNinFgr0BUO)PV~B{xl*0uCKcD5? zCfwFMItuRB(w85#);l`S$@HRUqPO19dig@K*oSa|K_qlTr6}dlL6zwc<*0NCrbnC7 z>~txmr16y~xh3^(mD9Tj`i@G6i{pK>6wru^)QFR0n_;1u4*ZXd1agP+ql?-;IbbVK zSQh-~s5EUOWHop@hd9NS&#`>*CNrc5c`kWSJDR8ZR5NuAz&x8F+1Q1Ww?Rn7j{{^{ z^N2k#AC$rE1e3ne8`l=yQcqi`EHwnL#Gg0UFg7wS)MVRsHE!x*_mfOTtFJWFbx ze&1)dX;%M*LRYiu**+ELj;j7rzS{G*!U#{>7L^|WG(PKJM9~j0E2|Nzrem$A_e}B(fE6< z0UYJgU(oojUjumNKugB}Jd9=rxSrS-84 z_hVB_%vxADs_RXzJ=pF_q|Ldvf*5BS*I6^SsUoV$>-6g+v8UV(YEN;U8Q)GB-V_>0 z2b+^?J>7e+)zK5x6v`C&#p7%i8KpDX(V@Mh7R{{9C3r$nxLilsPE&k0j2;0NW8};~*W7|^GD))C2>R?aBS(htfVyJli z-%nOX@YR~394ySAbe;urkJ=x=X*Ha^jrEjhz-xs&_2gij%8H09EQX`#tz3b%hG19e`QPmJ}x$u*v&gj+-v2{ zXoKO4mZW;uR2Mg?p3N@G?WvCeXC!ku&h&dg|aEY{3NF7NLfmY*ROG zY5{$kmxJ1K!Ss&f{B(>kIuNhXk)~70gf7_$SI@Ta)V|kK%K%=*e?3UPSL(QLD39%{ z( z4N5Jq#9D&}lE!cyMZl+%>EufrDLg{8keuHaI4kLf}g`htIJLo)`pkpM1_j zuO8IRypW(atnj`5z<=c^?X~V&)rSCQBX{QT-~o?NEd1q?H))hY$PE#`mcHwYPo$Nn zbP@5=6U^2MC$9-#p2j#`oKcbb8z=%CbC_S!%OWY4aBGJhnw0Nhx{Ipl_J?LDPUg}y zDdG>awy#{m=Ak`vlW^AUHjCru7_;mU#ehAF7*oo?lF6ou{S#q&+|l_&PpHFBd5F8 zn(Q!))R5}1VEe?S32gjp*Lwg zECaM_%AnOr`wIu|a=o{@MtaBQv~V+41~Mv^Ma3%|BQ9ZP?0{O0Sk2^~Ju)5Wl}If0 zu>->S1`J;BIBPFC+WfQ=H=S0S<;*C&!5~sq7?zQt_XwWoRWGyI{KZ3qvL^-O4xb^_ zH^~#Vfl3?mr5;u6nV)UX9ITe_Ek=gRQ^GxIC&lWNMS|3y^hWypmi8U>H(vfTCH3Fo z{@?R*ekBGHHLt)V#>1hyr|fFEr2F>d_jiJ?wWEK9Ez|vxm$NXk-j#)bT|ZxG`nSt} z@kzhh58jkKsQ|^CQwrb~+&V8^*&?=HNgUNSAbe3!N+z>rfrCCl0FD zEXnm%(iC=B@hv`@$7IaoM+57qz7Xw;OqJ+qL92bU@eD)L^cduVSGj%rV^xz9Fg7CR zhyJViGj4C(Oe@%)1@w;8vMlRcOIh&}AnTzi{)8K_KagPpKMe8mmL##!6@QZJF5-WW)4t*8(vX%IT zD2hW06goXSg0y@$NB^1?3sf#9=?`gU}#_N8QH9 zb+3$Qt$7Xod z@lDetGL8eNA@mXtT*nrg#aR~Chm69~6*5`Hr(i+PP)W{PdBIvqd%MGzELhy+sMdDk zD`RwxJkA-976ZDp7+<%!8slomppR@Vz?E`AAPMLzOS6;;AF9-#A95f>fOT6@gBEk3 z-SbNR4|w^`Crby_R;_IjweD=kMjLeNq)yI117oM04?Y-;bD)MfL5>2GKtvl9Rk-m58k=7pqzt} z;GjSZL=RFH7e?Ih)&9(3ljHc2wW%Z%lUk8ZhL==N;; z0GWs`Hu>#|nlW(vD?A@hqS}cHR=|Qn0J99-OLf@CnY`CMDFKLWhcCfM8mTWxK3~oJrx3u%-ArAenJmw8z%bvThDc`D9 z{H%t31%k>0KQv<2se{FQQp73Yp2{4eW8iqh7@;(m223=|+bL8%ACWOwL&8}^UbCf*-#}&?zei1+busHPQE98vx{Umou*e-=gl=!Mnh4Ms*6Dxpf z!*4lt+Yj2L+>D_QZ(H~&`^z1J&M+rqp9PPQJ6`^?euBTlXC~Hryc{Y8;0@vTgO_*T zUts?lFQ@-50{BYAfn(Lb8P@|(@V;IGyIFwkEB^|Gp$DE&5Z(U;K<|{;h#C3bIideZn&lI9$463uuPQu=P43g~M&RqLaW={8VT8 zjZ6wgqbyJ<#4Kv&J)G9naHKq&LS>~-@~?XPzNpPSo6!if;K<~fx%6I}KUA-Pq_+%W z8X7^7yloYQXAsZnAZ(U~P}nMOOt}LQ7E+eZXF|S1C?6 zkzDUd&u$!QS(oce+1~vj3r8*AoJ~pxf*oa03_#Q-cJPv|?gx|C(IS#n#iD+lnM8mq zm>nY`+nfM+1w!SnWwtcR`TpgIr4P1+W}bB$aC%Yc$st&`m1FSRk)-}Xl^M%c;m=^# z-kBT8Y|U^(dIZz0qo|wSym-Ds)LT`hCpFdJCd`#*4FA6Im35zO9XET*6S0}w=Ud-+ zInZqmSk;dFD>L_6{z|tAAiO>RyruwNU& zUOqfPVVu3KK7pkHft?YsVt7x$K%i@BVQXh>XK$x(OQ5Z*t8WEV%;|o=RiEH5xhwr2 zJ}hks^eAv5pt<+OuM%u&8*N=XpiYlK&Q9A--(26qjv7Gq+e?9>6MmOkI668~TiaVY zd@W-d-U+(z^cK2Sw)YQO?`I!}Z756Ld|a2iG=_AsjOw#>17IV6$Uc5{!@rk(&;zrN zKV#3`<|b8~{!IL$?a=bnK%tPBVfPcoOov)cna_ujkrl$rFIu_m8d`E>8A&J5M3kRe z({0w0Nla+VBb>=*eUSsnavW7z-nSOLy4uz7X@cq=bu>jZC!rB@Hp_hw+rR3YRvZwF zSBM^}W`OYl{V3RTZ2qjmq2r1Lr2u|`*Z8T$7mh7Yvf1MteuOkt1r@kS1XM!b^zA#4vHTW{ANf;k`-_FZg1E9QE<@ zNzzQ7My^C{Dp-jvNbd|W_{RBXEIS>L=m8>vmgroSYHyR41SjYGLs1ghQ@iU1$@M%u zFpF{oPyY6jabo5djef3AUsG?mX9v$GEVq(bQfU;p_}{?Ji(Q2slYX?Y;f6Xm{X|v;au<`V1g&?Q|tc-NWQ9x?Zp#84T zahVS5u$j_|_*f*|LwjI%9HlUIdqQxf*k{`V3;P@B%XG4lIEzo_~bM(aM0x!|gS=_hyR>ti_ z-|E2H!p@6SDvg!F`lVQNEMyL}(R~4BCE&wh9F?mq-|dPr_U1ybCKr6O@Hr4>hp!G& zFzD5>ickxVB`6_M{dN8rc|Q^>Og{?KaB^|+b33P}VB8G17X-#`^7_yZaGy3V@V$c`^6|>7n<6`@pB@RbGT^Nu7n#( zt!;CNYk3+gu{;J<3sul)2&rRdS|b%(-n8i(|xvPWFFt5bn)jFG0i&tQCqI8X^1Pa_EG-zWdsaOV!78MHqrRzLDrkeJV8q!nz; zdSKJ^LR)7e`x1`1oTH}lf+EEO>^Q40FRIqrn%p?tc3C!JX0nBCt=7Rr(UWjdV||k? zb&cyJ!?=eMwhU8fj=;)IHj_)mwY{OQ7wx%rzs;0Y(OB(1?#EXY`$Kz1x+B#DL1@~E z?yusj`rbNR4mJSL2Q#(1?NHWC_cGBwgWsS8>wO$=AKUP~6d6U5a5C5`xIPM{eQbqV zJhxzoBJPEz-BkM_($N~rORI5TIlDR;?lhc8fvimo)SNv5VFE8n*N|pp7op#vDOxJ0 zc;{+Yw@8Uw|H*L0tMC!%+d2nSi-k3^?ZTJUa`iRb8wBTLc`e$4{r(}oU(OHGjgp8S zdyys~K}1@&LE+D(kJl^auEtY&_@pd`JWZwxql?}LG$LK1qcs*<2&Px2!G0uqwSf-{p9raO47-ao_iVy; z&z!nH#DE?bjvKLly^qMs#bAQ#HhoA`(rA1{UzH=QFpBt)bYr^)jw;uW@!hpbZ`$ZP zE>#MKdQRV=a{URF$Vf$d!gj~hbLVBPl<{H+%p=z=&8ToWQ6h>n;ip^@uZq+>2A~pD zw5FByV?y~yPd(hpJlsk=j~|HFa3x#ICqRf@E1$<7-DMv?>w)+id}aZ9mfh1Kssgz= z@3-s&*pPj%$L4GDA$_l~DJo6--KGf^1yN3bPfCK|Zg|#LN$HOPT5u?j<$eqS_&Pt! z-r`4p!?!7}cc%XUdH^du001lnF|dAZQ@DTmKk&p~iGeCBZ#>4$%lFV-m9pW@9fD}Y zTJ=wYStZMXei2c zW?hCwmJb7;6Voad0)L?p&py3D^hV5@#i=OnwQ*&j`)5KUsCd*^|1oW*CUY{yRHfav zHpOeY;j9l~Z;9WB=6#udQWW>mish(=tty2*j+8I+O_PXDi`wg790i5@Q$LY2r2}W~%YWk~5 z4XkUJHpSjbd&2wG@MmiuLLsYJ=yq||U?JS7qj zt8C}|hopylQJ^Ii)cr=hB)n#2m26z^HfMx8(FQipA0WP#773cCjeF6z$y~s$q8}Gc z*H@Xw#ipa&B~q;O&^nv0fTlapf$upAiXmr){1c>s1Gd8t7qcRYjX5{DJd7Pn0or{5 zJ&R08MDZ%0%S0~~(QPe?BuvcIe+=jN=Dy|#jLa85i_EVyN#l=^`2;}x zO+0~nFER<_oPcJ9=D@5-3TVeI&rkh-8m8Zl@mK+jbiltrLEl}N-oN~xe*CXub_9)8 zwp_Ndp-aWPQ$x0djZfcGtmiPcX_hH&Dn~CQPji127WZ^9j#I4UL}QzwC9M5;bH;s9;SQ(P5B$M@;(Jpg@>~KDsMO zaR+Z1)&&%Fwa6({M0UE>m-%5qy`-Mi#=h`77L9!K34JmwgLN^w&I+HLJNW9krmhc% z4<&Yj>F|Pz3Hy~L`g{CqQKT(NZ*;aIGI+Uz;z^P+Q*h~aDh~8{eg-mZ`^(=6#qZK0 zSigKneaLv%=U!)sanD!|V7EDjf88u_FKmA(_QcsT`HSiW%6p>Rd*NVt7xg~l?y8tU zHw3;g=@*Sjbq;^fH6vi-ZT*mKY|t{d>J4$@2}#-j#!X1h(A%-u!O$z~D{zW-GY$F| zdNum&ftHvKFOTOkgz>Ss!=knhE--fANv=XXQkYu%IDg3n>AHfa*`3=ICuPKTyh#nq zS5vB_u4Cj{dz~5Nn_i^T@)X9OVc!I_F^NKv;|7FznAq$MF2m$@V&o_O zmIzv#NfEFUu(c!nE!PjR3i-F&LFWlVw~VS_1rP&4YW~&~kbo5@=Klcxfti^bV2&`3n?=8G50s?2D-R}ef_6XAd)(P}~_2qsQ^DWO) zjx3fxJNV;D2=Irs2=@9wrLIP;X~K~Yyd3jOz8}-=bCGiz%0G ze$OGP&aM*><-weqCR7n42#1aJU5#xpM6Ib%X-p|nNzm2xvh3Z~COdha*6XWBbv;t5 zM}b<99$K}KqF+u9-nMqu+r6rxax)zq`yx0`)4gQU(ZK-z%q@0a_3gu4*o1b-;6iws zFY0W=X3PpO{tI%?&6M}9Y6|r&AWm@RIF?k=x>G+Ks0afH^})@yHwkUGlfd6BF&C$! zVTNBcfDPq7%SS?aHn9dxT1XV9brzv%H<6Jj*L;|7w3K1-_PtqoCSq#qmeD80!;-_* zrz~tRUe%_4?^~#LxUp+1bXSgbo_SB0fbd8ku==FMY%;~hTih{)|DZDfXg+-J1OWmM zh&Yhn5C=)piz>)le+dq3mx~chaP1EVR$nQ-m)Fk`2<4v;2<0ybgn|rA0HpY(?jz6- zb3T;EKfd=H2>r#r0w@v!9tGbuBz_eM-Fff*hC}}w-tkv(H1a$+*k&~n=TxR0M;;=6 zJioPlJxGJy|FSV)2w|0m8!C1`gF-r?WS0GnQkk8M^}8M3NC}>s{N8DkSC0IRDh6@V znpG3etoVm#m}7X2IRKs3m9qPU5^ts(SY2^bGf7eoebD0z&|UeG(9~*67$R>bbVxA; z6S=qA&krJ$wu+n)f@f_2CI*vBf|*uxMjvh=gaaKHsy8nU&3QJPSexlS=ztxR=W$vv zC$G?~jAxJrch@QK1uPSDWsi}tng|twOuVVge{zGsor~8nF4GQ|HB-d0ryxxNsV^AC zAVn2g+&w{vH5S$nscrqhR%k5<>rpd=#E@iiws27+>FIYk3Ilir--9DK<+b2$aWv+v z=lOtq!WJPWRmIz1!;#20IN}972XLixq_e$Z`3tCghof%`>vu!~uB%@*DssiACY|7H zzGtm{S%PPSDKhT=kV?1(EQ$~KZ3tW)xVwPjm4i#BxL zV=ve?8Uh-g;K(^)fu@7*g$4&x`d$z!T0!xhPbtFz(YN$%iW?-aNb9CqSQaTw=N}FB za0_9GXS{`qg_)YY;pPzJSyWz8MC4#^$BknAz#?0;+q+E-kc?)mBEc7XX*_cX#xfWq z8?|rsL?xNPuygl3SV{ZnwSybCZ>U1;##+(j!7&z)a$ZK@mPT!@;Z7LFX+S(|f%D11 z@TmtpO7EgagRDom?16MxofZwfV!+7kCM0hG9_BsndD)_@%~Hg^0;>Ow&-^DH2!H51 z0t*D@A&B461z)JNKnKK1T3#G9HAy#t@(&#dUVi^$(DD>O@io5zMBzv)>37jmJo@AF3UyR`opi9S)NlW@!>3kNmC z1L6_43`@d+2MV#vITi{N2ft+h@#4}ki1HX*ON=QPofy3s#`;L~h+MkrCIHuh+l+<= zMnx@K4URrxrGqo@+~nC_#W>XFpXL(TTjyd4V>P9ueC82ajP4Y6Oc;0ib;$muLxC1# z4_wW;sP-kSO>My9ZM7gO4D3bvx*K#iwtq8bo^3N}zZQJTP(s?UIwD}X1(o(Q7y$Js zibEuq-Z?^0s8ZJrB}uZ@5|i0e?q;4~i7}CBvp2WzKXXwgRzkl3VP&pnMcA z=7FTxoMvTHtL@PzhKP~NxmpIHy?cus*K_oW3-*Fb{XA-&!TAHK>8IpMzjSYBhf?c^ z_uJP97s+N9i)G$NsP5-2ojEj89tj@RSB88x&F~;ofm^1}#&^QwaZwB1*H$gArt?0& zCYj+g)u~gs{@mVVRulZ?VQAvVBs1fLvzNjEfyv@!1P%eME4o-2vL?fhe(D<2&w@QY z1nK4Y`U}F)4Ox=;hdzSLzFQlEUc!8ak~Wk{>doRf(r`A9j~yd^%tRCC#}K zE@CidTHRLOD4qF!7iYT}2=iMIF z6>lV2$q=rA-tBThlYi zwLPpxIx-5L5f%syktah5IJA0Wl2uKXR1HY4n;wb3vIcDCETX?!n!bHLe>uV%;E_qs zMy>vs2iZ$^2-Dj1>2^*~Ev-76iO^DqlgbnUcIlx>e1T1qlIWONN+Z%$nK;kd4j!i_ zc}ntNYo*LguF#tAz0Qc=OBRi#?qHl3IR_lRVa2;F@!KEh=q7#*J@@j5A5MR;2a|%n zwIwo*W)%`Vs31||$pdR`^26y*!obe2%Q6s-3F0|WsEQOb%BI|rUvE-3q*5o^ls9AX zn`tvr^956<=zDXRDQ*hv`N~x%)qgztF&Hlu-H6naYe(DWdui@TwZy4o?qnBeR zz;4Jrd)@d32Gbs1KhI@=xEA{@xnBp)?Z{J|y(|})$aupLRM2-uP$s&B_TZiYK^9)! zeuw#4RG*HrNsxqm`rjReIw_Y!C4IuC{E!0rKH6;uT(p0Gb|W8@>sT?N?{Sz2XX6@7 z{gRZ(Yfg0U=YxYP-Ro>SkEo3~%wo!~3-DY#UbQ@aNGEuCi4tz_As#FysCxs#@Z74s zqyEi&j@1f8B~R0)XXIzSWanif@cd*8%ZK_>X8!(~Uo6tk?X#1fZ^%`UrHIzIITD86 z`X4Sdh3sK0){4N59$En4upde~>>ytqZz@)}wf309MulXLwAJ9Xut`Q|ytgoedmH3> zLGY#X54}IV8|tOXk?|mGXO#1U64gj6Zp3+E_cec_|5;}Q z(9iE@UJOi(-)*42x#ouh84lX_eL+1qp-VNoYs^}4;a#BTAn6|&PQX2e1N3Y8J^=|D z1y)kukw8=*Xrh2>4D&Nkf_^AL%SN>D}Mh^9W*Cb#nR>&tY4Jc{MSN^)}YQPQ+nuiLqN(H}ThC^B0~2 zU^0Az4n6lV4ul6!vSnEpbeO$>7g;YoC7Kls*-706??SJB7oE4VHRvr&=k~{P31BDY zCZ)Deh^(lXB&OBL6#taPu}_1!ax=*XMd8nTof(2&0VZsMqxne^ecCgl8cHUZ-+0c? z6yJZdo`G%m_nj*jfIO%B`+5ewHV0f~_RHkqH0eEL1gH87&-w4JlYgQRz|mnqs`I~Q zN&nNU{)+8*KGMfvde|`wT{%*ugy69Aj%-}KSlUN>rGP*JhDr}+ZYVHqkTZY#WVn6q zV7z?Fg_#`rsn85-cM}^{)r*{Fx0Fm>-WrF)eDf_fe!ln9BQ}W=@t|7u z#Hv~X&VCOfh7xynBLh(WPoR>5a!K@Br_n8P%n`PHU+6mI_GSxi>?DnQOhdGy7CL+2 z7nkWu2BX+zUd9*(?{X^Mz>gRs;vjx`LTXBHerh3fVavDX{xI91oWhmPS63mh6QMmy z9)N{XH15WnyQRTq2GqXsyni&4F9NqX?HL3Ur4v?dF#IIooo`(^cNQz+2e8zwN8&NA zUrZtMHPL+r>kL;mP*MifyvM~Wchqhd)@+N2*{MKU85QhcM5aZQu{~Zht;@WA_=VIB zR|2D{Z<~*Fq?PBz^L&2(ql8aN{;AUVO7eMJ*LJ!z<&m>;eAwbu`%i>aE+8I9 zO^^zTN_$l-w7jgnGDKVMQ}TU`s5`Z((=hcyf%>z0H#s!K6V|$iPxBAO<8U8vBgh`_ z?9q55{_KE8&Z$+k;Hl`ayyx<;Yv=r%{QsrRI(w2P%0x#K_~KyG1_!f zz-ng!-1T1GrkDaH6oI+IOA4&r7XWoJ5@dy2l0*wl%BQ<<5@{Z%pe)g-F?2^;$$pbgm` zXPM_<6CNDGRN9IFIbsKhIM4fg2>H0qjd%vSv2mj_9|(kWv1a1LXGu# zJUD729Cq*0Z68CwiFg^i^7;hNz*~=(Sn5uqTGX$fmxwb{KI`kz>3yhi%B0r6^yCR> z)jaltWJeJ0k-5oj&WVdg?m@pPOOJf2#d@&QJrmTXizipQmdGrjrW><+9<-;>~P=gLh$wv+XJ zcX*&kl(jJt6ew|o(z}25Is5+Z@U>bj`bWM)0C@bBq`;zJ+{rxj?*t%!7_acXiys^X z>DwJY45YprM*&+yfzu&b8R+gNLw>9J(y}rFeJWM|)o1;xdRxj!JzZp`U<_rwhGIlg zDK$MvD0Ft9#S$0@zS;a4IH4Y9PW@PQ<5YkWY>QU=Jq5k^P>(AtvpZq~UHmd$TxodE zTpvs9ms#v9nH{6<5sNHWlF<_0-dJf}>ZKd|oA}%pBGfUftn_+ekF#Dxj2UuNe7NDM zSIC74vw?gZJkRgv%{wB}hNrbZit#LF>mEeNDor&M%?_57NPCjzX! zkM+-^jtdTC=Mv&MvtMDuGtys(WkW!r;nI5U6=0gab$LHCbWTq&dE9J5Pvr%1S*AXb zoVlWox0=suujw-3xW_8r&d>}mc#UB4?2UW@s@s`J3*k@Lf6>NLk*Li)YFAKo%t)5E-0G932${?vXCST?cr-iRZ)ITNu>+>A$;K>gCmaTq_5-6 zaCS)q;V~*@vuCp-BZryCEkBV#vq@s%v*jwQV+=cS2Y<{RCnZiHMN~Gv5^}E?2@Q^F zrH}%Wc?UzW;Rhk>V5il~ReaTARH$j^bEF8ZIYM?&(*dJw6ae3$F;-6wvMJ{yp~L_ruho z(X)$rJ@&WAFjYqW9Q*hC0D-yAuVerFbTDv~hkrnaZUwd2sP8_UjtY7IM8Ba)i6n@S0n~@_D%GqIW2;C&I?S@xb@Y5e#va-a{4l_a5Io zEH!u{3=s>bk=cOW0WCEuc!sKe*sBSeV16Ai_$sg6l9ty@mdj}13l_s-qd%siCu!%% zT$|x`Oqz;^HEveExc<@q;p56lSfdD248 z05ih3-{Kw~^7P@W8Ido7jMNPk_hbI6tjz0A+2HrtfY9*JB4%dB7M8}g_f#o-MnH9^ zq2+I`weXmCe85rLL7zYvXj5%$VQBk|K*U0q8o2Az+*LQ=$$!7)yS3y$6*#_*45X)J zr3ZS;0YT$#WZ;j>|4py@t8B1dLxx<8gZcHS_fRul^Sk-F!eLmhWsSAD0+@OwFs^l7 z?ZrbxZ{3p2(<0kZ*H4vjrO+TSDjx4BCh>;$v}HH)A$ld=HX0k-3h8u~ppgjg;ph zK%T{Z;j46y$Flp7Z2JMTg{OzX>BEuETfX{AvNEE9b57YFfKX*0SDneqrwuPFP2ONB z((D_yw*(fAXXs(?;Pb0+%p8!Gm7N5+TT>*Vi;sdBhe)!IR-!~M^#`VqK z;9-Dv!;x_#dy_#15{1FnurohFtY6j$MlhB(KJSh#1B7>^!++&pA*viN~7_ z?`MY6S>Sg3BiqvwM(KTIc8(|mWqxsWu<`aE8@Dl#956?gArvHqeb}W7!cX4GcnKrh zm^DJB$!;NISBUs8UdMq?epMW7-z@Kcn>2%wy^R@L$?-_8_ZQjh@4@i&RcteO!v)vc zdHyD?kGCS@%m~l_ay)#*h#us6fRf5IC;RoPi9_xKS^c>Zlu%59l(CO0RJ_LY#Km8; z)le-Z`4##Fs26NBf>ijQ`;dZ9ZsIL|_C zX?F$0D{U|bKctjMbBh6y@{%-zRPs*gO+!yrwaUn{wQxCxneW0a*ZXEJ`I;{Mp=`_* zjT}$I8j4uw2|dBxwjmPUybb~V&^%(_3Er>AGPa5VTchDj)d zc8K!$Z*t-lx9p{+A&&(cN*EKAeiG_ntImp*Upq-qAdET9NnJiI_OJ|hP>`X-l)O9m zqKK#<13C;%xfA5v|^H*;vz1LWU5l2UFfbvNEbEIF|0aXc$HIfXPOZJN7S1jS5tlG+h zYgBi}VbB!vBMG&~8X5(aWCi-rgX{(|c@I&(yCpCMs$!TRW{hFQuueNfdIdQ>oH)Ah z!2)k{@ZD-d*6xUd!?Lv?Mxn<8Bm9}l_!pi5AiQ~`{|C_rFha;5o&nxc4@!_qTR7_u6`!bi;`SYEXY$IjhAv8mr1Z?y3J0SEn@ohgZXig{cr+gYf8v zeKEi^CfTJcZ1D^MU7M^4%ssczJjH_L1%Mg!f32r|fE&d70RiBkppXzikCZwE!VqO~ zHXo$-U5ccU(rc?G!)>I(pKJRV#X0c4({xz==>Qr=u zW(A5EjuV84o&q!v{EgLzbM3Dt!=W~{S!|LQ-5BB*pHSMqLlk;)c zTM$5XJP6qj`-FNEl4_k!S?F&r!TV^hfZE`HlYO#svHiE~lY@=*v3=ez|0DPOi%gBx zJiH4#6te_)g;=`kF)}KH^j9Qi(gNS02|p?*9ts?u(bPaf|3*sa*bgyGJusOFWg1|w zFF1UXNDDJzA|hY!-*S_i9_!vkRYVJWWJBwZP?bzX*qly_O`fC$bD8A*)5fb>5*$9> z#qtJg$hsI(eqblNJuvREL4cY8F&Tp}aRMi#ilO-CoeGp=^EfVjQA`9yX%`(=5H5_$ z$|fv0f19u)iFPNSSro5c(Z}i73c_SY4pR-M`>Dhz!EP%K_Rf@KP~tX%`6B4fvjeFe ziGbK==!A<^D?_Fe@313Bb#-ew@b@ldKQ0 z_NKDrrc#ewV)M!$bMpt~=Hs!+fMfEHNvE)===as;?v4gF_7Aa@ho1d*Hq2y9B=_J7 zgNm#16mSh70|x|N02lwE2fwH0%zz-xcL*l?e%If#awawaoo8m|WM%`*Jq5^7*dG+- z?0_!tfXQQjnC<-U+T`Cw0n*3_-k{gDtn^0}Q8sYFTAVh>zoKIx#@7~IA=dFFb-vT} zt&?snE+?#5g}_+P)S5GMw$kyBrOpn;oy&qxvvEbD(%3Yq@{>;U$X)Gb_VuT&kLncS zMGhSs$`9qxFPvfuw3)LVLqq{%P1RE{(EPl48UK0*pSSJf=oc$`Ht%&w1H7111JPl- zJn538D!KWc5;jjqu2;gtd`ZYY`vb*MjiEz>th{sloRQa_0-uakyM0m>XKS9cE%Fk3}%%}U7+#e#@$ zy54zD846sT^wLkAZj?=NP`sPU`#-=AwI9%{#+yfcM(mi=C$`(i z3F1COqj_kPzLp!GCnl6j_sCuwrOZXj#0!J3iZB*tZbGn*BP-0*c8G0h^~J+ou=GbH zZrfcbZWQ`b6IoKdd6a=O#&41S=@nJM8ei?_8sw}|Z=vm_ohLr|vpn@B(I;%_J(Eal z5Vz35NW7nVWWO9xdW*bu_704Iepd%d-uB>4f2QU972dFN0;byjhBx4VYERG~)t*QS z)d=T3HflIdV=vo@`b<$j}f}UTv(#5 zIBu|ctIMka3wRutQuA70eT}t|8(?3l*k2_3dagqg9X#|D zn&3c#g%$bK&A7^ya1)6g6ZZt6+PaXY!085>kbnhS8F^=}mX5)d;YGo+uVonY#}mki zuQl(HcGjJQ5?i4@2(I10Ce@N3c^A)osLcJAl5rOAl?LlJ>H86K+^{~Gd*k%j1`)v| zIKoJ!*S}#kN5)5j;w3PY&WEs^nQj)*t3YWOa}_@>WzgY5AXa0gXRrl<@t(Q|7;jH$ zwhiZL7M>X*kxSDAz)C=XH#v4z zX5Ye&<%=w&pK^ll^?cFvh+lZhYx0%g%x z6FirIE#qPh?XN`okIj2S|MaLl)ZuePrw)st8&h*;QqWCbSD;(aS>fPZ=rvqI%0AmW zeK*itG2Fu7x!8GDMc>I=nQIS@Y?({008DMau?4rbr|G>Y)!Ics6L5wh;}}1X&)i%( zf0Ipksv`t~dLxeqF<6Thr-F%%f^$qb181Rm?%@6<$tNB*<{(Zbrp@k!?CTq6<6DP} zufmWo-p6n9Wvphha67%GnX(vgkEdYvS?^~$zCm+$LqS0OvV@V;A!FucuN*R1)q2V$ zM;FK43IA5dYIl8WDlB@MuH!Xsdp*^26ijE^8=srlvF8+3xYy0ruh(<<(YtsV%s@2a zbC14?5Yjc8pShHe)}Mbv_Idl6tf+kADvz(^N@uYs??|+;efs0pCTa?%7lZ)IVSl4Y zn`^$0n! ztCUo^-y0L6ns;5au2`jdb(`Zt^vagdc9~(4;L{#nQimtzyT3`W$}51+ z_Z>{EE&dS2KIL+Wc|I!EyXAS{mY5eyT7iHA>eoIwcF5rMTAWnt8{M{wXHq8(`sa7i zRi3BTFQM6opGIk*2VIj~vfyU--vFB;7%evq@tZ{QGy9*5mCCYBWp4xVpjcQ~c!RB+o4pd5GO%|NsB_;NnBHj&garmpmc z5*)tkb^wLxlU+12EmZd8WQV^PT1J@YJkws?%Z*P*T7gpn)8+073)+0Av*lM!R(?Gk zR1F~L5h`?9RhUjOW1IzOd}+x*aMa*hIZ{&9di@(iqm(8w?3j(}159(mTFqz;AKxM- zF~3Yo8@Al9U!y!jdIkJ32F37W*l@j{cxq=Rk|`GshqxYzIseMLK2*xr$`EDwe4!8~ zcGbSs)S?*$Em9VM)-f|%dgWlD#&$S)aJ^85BmMi$w~Mv*Y$8sh9N_UEw&6#i$Fz#Kn7_`4D~2@q}iQM(OAN1dgGaR{FL zD6jy+oH_>Hge`w^$#{6jc@894rVo0SZ5^-s`*GJt# zkU>Q9fa!Pn5FbtwLJdyNiOmOrdiwXC0I7s7-V&|=H3=JPFWO_UEEA?r4);P1KoJ^X zKq~S3XhSM*uyaMNyw9CufR}E-X3(_Pgg9*f{Gw`b44S&Yh{@nlcvEXocWZe(p!EGK zdSj)AImgV@ZH2$mI>P&-Dk&JCuZ=(2Pv7xJgaXXkfPkV2l^o#*0|fy!2Vyb-hYn>td3GZyf`*Ka%;y)*) zqLA&=f1XH@S;J1yGJV1K0dM4roUa%s0A1@81=0GGNyNM7uPz~14Kt#&r5|kipHc%e zKbmq3z7Jp)6W^Hylv)Gzd$uP9QVsV_~26>CF~=0XzlY>j`}Zkji-QVdHNQX@Nu~o z8ph;t>+ZRY>Hs~9HKh}P%r5|^K()}R49B#_;-0Tl9HOVjyot^Sr=^Fc0}={t3eh4;@bzD9(ifJ$_j zqPmv3`LL0N1ihar&5FaxC8qOpZ!~V2{aF0Py;gN7c$}rjy`mu2U}*$Ox%?pP27NOF zemfV(ZA3P<2@Rd!Fe{V`0>~6)^O>urawkYyJ`%0Ds8@`~2&=Sfsa606Zhge;7?78) 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 ID:

Loading...
+
+
Certificates:
+
Loading...
+

@@ -103,6 +107,11 @@ $("#app-ver").text(cfg["app-ver"] + " (html 0.6.0)"); $("#mdns").text(cfg["mdns"]); $("#id").text(cfg["id"]); + + if( cfg["certs"] ) + $("#certs").text("CA Store installed."); + else + $("#certs").text("CA Store NOT installed."); }) .fail(function () { showError('Unable to get data from the device.'); diff --git a/html/device.min.htm b/html/device.min.htm index af7f532..b98864f 100644 --- a/html/device.min.htm +++ b/html/device.min.htm @@ -1 +1 @@ -Beer Gravity Monitor

Current version:
Loading...
Host name:
Loading...
Device ID:
Loading...

(C) Copyright 2021-22 Magnus Persson
\ No newline at end of file +Beer Gravity Monitor

Current version:
Loading...
Host name:
Loading...
Device ID:
Loading...
Certificates:
Loading...

(C) Copyright 2021-22 Magnus Persson
\ No newline at end of file diff --git a/html/upload.htm b/html/upload.htm index ed73a73..65246ed 100644 --- a/html/upload.htm +++ b/html/upload.htm @@ -82,6 +82,10 @@
about.min.htm
Checking...
+
+
certs.ar
+
Checking...
+
@@ -137,6 +141,10 @@ function getUpload() { else $("#about").text("File is missing."); + if( cfg["certs"] ) + $("#certs").text("Completed."); + else + $("#certs").text("File is missing (optional)."); }) .fail(function () { diff --git a/html/upload.min.htm b/html/upload.min.htm index 1ee94dd..91db69c 100644 --- a/html/upload.min.htm +++ b/html/upload.min.htm @@ -1 +1 @@ -Beer Gravity Monitor

The listed files below needs to be uploaded to the FileSystem in order for the GUI to work. You can also flash the LittleFS filesystem but in that case you will loose your device settings. An OTA upgrade will automatically download the files if they are found in the same location as the firmware.bin. This page is a fallback option.

Once all the files are confirmed, please reboot the device for normal operation.
index.min.htm
Checking...
device.min.htm
Checking...
config.min.htm
Checking...
calibration.min.htm
Checking...
about.min.htm
Checking...

(C) Copyright 2021-22 Magnus Persson
\ No newline at end of file +Beer Gravity Monitor

The listed files below needs to be uploaded to the FileSystem in order for the GUI to work. You can also flash the LittleFS filesystem but in that case you will loose your device settings. An OTA upgrade will automatically download the files if they are found in the same location as the firmware.bin. This page is a fallback option.

Once all the files are confirmed, please reboot the device for normal operation.
index.min.htm
Checking...
device.min.htm
Checking...
config.min.htm
Checking...
calibration.min.htm
Checking...
about.min.htm
Checking...
certs.ar
Checking...

(C) Copyright 2021-22 Magnus Persson
\ No newline at end of file diff --git a/script/create_cert.py b/script/create_cert.py new file mode 100644 index 0000000..3cd52f2 --- /dev/null +++ b/script/create_cert.py @@ -0,0 +1,85 @@ +#!/usr/bin/env python3 + +# This script pulls the list of Mozilla trusted certificate authorities +# from the web at the "mozurl" below, parses the file to grab the PEM +# for each cert, and then generates DER files in a new ./data directory +# Upload these to an on-chip filesystem and use the CertManager to parse +# and use them for your outgoing SSL connections. +# +# Script by Earle F. Philhower, III. Released to the public domain. +from __future__ import print_function +import csv +import os +import sys +from shutil import which + +# Change the path to the installed files. +arCmd = "C:\\Users\\magnu\\.platformio\\packages\\toolchain-xtensa\\bin\\xtensa-lx106-elf-ar.exe" +opensslCmd = "C:\\Program Files\\Git\\usr\\bin\\openssl.exe" + +from subprocess import Popen, PIPE, call +try: + from urllib.request import urlopen +except Exception: + from urllib2 import urlopen +try: + from StringIO import StringIO +except Exception: + from io import StringIO + +# check if ar and openssl are available +#if which('ar') is None and not os.path.isfile('./ar') and not os.path.isfile('./ar.exe'): +# raise Exception("You need the program 'ar' from xtensa-lx106-elf found here: (esp8266-arduino-core)/hardware/esp8266com/esp8266/tools/xtensa-lx106-elf/xtensa-lx106-elf/bin/ar") +#if which('openssl') is None and not os.path.isfile('./openssl') and not os.path.isfile('./openssl.exe'): +# raise Exception("You need to have openssl in PATH, installable from https://www.openssl.org/") + +# Mozilla's URL for the CSV file with included PEM certs +mozurl = "https://ccadb-public.secure.force.com/mozilla/IncludedCACertificateReportPEMCSV" + +# Load the names[] and pems[] array from the URL +names = [] +pems = [] +response = urlopen(mozurl) +csvData = response.read() +if sys.version_info[0] > 2: + csvData = csvData.decode('utf-8') +csvFile = StringIO(csvData) +csvReader = csv.reader(csvFile) +for row in csvReader: + names.append(row[0]+":"+row[1]+":"+row[2]) + for item in row: + if item.startswith("'-----BEGIN CERTIFICATE-----"): + pems.append(item) +del names[0] # Remove headers +del pems[0] # Remove headers + +# Try and make ./data, skip if present +try: + os.mkdir("../data") +except Exception: + pass + +derFiles = [] +idx = 0 +# Process the text PEM using openssl into DER files +for i in range(0, len(pems)): + certName = "../data/ca_%03d.der" % (idx); + thisPem = pems[i].replace("'", "") + print(names[i] + " -> " + certName) + ssl = Popen([opensslCmd,'x509','-inform','PEM','-outform','DER','-out', certName], shell = False, stdin = PIPE) + pipe = ssl.stdin + pipe.write(thisPem.encode('utf-8')) + pipe.close() + ssl.wait() + if os.path.exists(certName): + derFiles.append(certName) + idx = idx + 1 + +if os.path.exists("../data/certs.ar"): + os.unlink("../data/certs.ar"); + +arCmd = [arCmd, 'q', '../data/certs.ar'] + derFiles; +call( arCmd ) + +for der in derFiles: + os.unlink(der) \ No newline at end of file diff --git a/src/config.hpp b/src/config.hpp index 9b85505..6b07b74 100644 --- a/src/config.hpp +++ b/src/config.hpp @@ -89,6 +89,7 @@ SOFTWARE. #define CFG_PARAM_BATTERY "battery" #define CFG_PARAM_SLEEP_MODE "sleep-mode" #define CFG_PARAM_RSSI "rssi" +#define CFG_PARAM_CERTS "certs" // Used for holding sensordata or sensoroffsets struct RawGyroData { @@ -179,6 +180,7 @@ class Config { saveNeeded = true; } bool isOtaActive() { return otaURL.length() ? true : false; } + bool isOtaSecure() { return otaURL.startsWith("https://"); } const char* getWifiSSID() { return wifiSSID.c_str(); } void setWifiSSID(String s) { @@ -208,12 +210,14 @@ class Config { saveNeeded = true; } bool isHttpActive() { return httpPushUrl.length() ? true : false; } + bool isHttpSecure() { return httpPushUrl.startsWith("https://"); } const char* getHttpPushUrl2() { return httpPushUrl2.c_str(); } void setHttpPushUrl2(String s) { httpPushUrl2 = s; saveNeeded = true; } bool isHttpActive2() { return httpPushUrl2.length() ? true : false; } + bool isHttpSecure2() { return httpPushUrl2.startsWith("https://"); } // InfluxDB2 const char* getInfluxDb2PushUrl() { return influxDb2Url.c_str(); } @@ -240,6 +244,7 @@ class Config { // MQTT bool isMqttActive() { return mqttUrl.length() ? true : false; } + bool isMqttSecure() { return mqttUrl.endsWith(":8883"); } const char* getMqttUrl() { return mqttUrl.c_str(); } void setMqttUrl(String s) { mqttUrl = s; diff --git a/src/main.cpp b/src/main.cpp index 1872ae9..621333d 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -180,6 +180,16 @@ void setup() { break; } + // Check if we need SSL for any of the push targets + if (myConfig.isHttpSecure() || myConfig.isHttpSecure2() || myConfig.isMqttSecure()) { + LOG_PERF_START("main-cert-store"); + myWifi.initCertstore(); + LOG_PERF_STOP("main-cert-store"); + LOG_PERF_START("main-cert-ntp"); + myWifi.initNTP(); + LOG_PERF_STOP("main-cert-ntp"); + } + LOG_PERF_STOP("main-setup"); Log.notice(F("Main: Setup completed." CR)); stableGyroMillis = millis(); // Dont include time for wifi connection diff --git a/src/pushtarget.cpp b/src/pushtarget.cpp index f57abc5..108a4c0 100644 --- a/src/pushtarget.cpp +++ b/src/pushtarget.cpp @@ -21,11 +21,11 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ +#include #include - #include #include -#include +#include PushTarget myPushTarget; @@ -243,10 +243,24 @@ void PushTarget::sendHttp(String serverPath, float angle, float gravity, createIspindleFormat(doc, angle, gravity, corrGravity, temp, runTime); WiFiClient client; + WiFiClientSecure clientSecure; HTTPClient http; - // Your Domain name with URL path or IP address with path - http.begin(client, serverPath); + if (serverPath.startsWith("https://")) { + /*if (myWifi.getCertCount() > 0) { + // Allow secure channel, with CA validation + clientSecure.setCertStore(myWifi.getCertStore()); + Log.notice(F("PUSH: SSL enabled using certificate store." CR)); + } else*/ { + // Allow secure channel, but without certificate validation + clientSecure.setInsecure(); + Log.notice(F("PUSH: SSL enabled without validation." CR)); + } + http.begin(clientSecure, serverPath); + } else { + http.begin(client, serverPath); + } + String json; serializeJson(doc, json); #if LOG_LEVEL == 6 && !defined(PUSH_DISABLE_LOGGING) @@ -283,9 +297,26 @@ void PushTarget::sendMqtt(float angle, float gravity, float corrGravity, createIspindleFormat(doc, angle, gravity, corrGravity, temp, runTime); WiFiClient client; - MQTTClient mqtt(512); // Maximum message size + WiFiClientSecure clientSecure; + MQTTClient mqtt(512); // Maximum message size + + if (myConfig.isMqttSecure()) { + if (myWifi.getCertCount() > 0) { + // Allow secure channel, with CA validation + clientSecure.setCertStore(myWifi.getCertStore()); + Log.notice(F("PUSH: SSL enabled using certificate store." CR)); + } else { + // Allow secure channel, but without certificate validation + clientSecure.setInsecure(); + Log.notice(F("PUSH: SSL enabled without validation." CR)); + } + String url = myConfig.getMqttUrl(); + url.replace(":8883", ""); + mqtt.begin(url.c_str(), 8883, clientSecure); + } else { + mqtt.begin(myConfig.getMqttUrl(), client); + } - mqtt.begin(myConfig.getMqttUrl(), client); mqtt.connect(myConfig.getMDNS(), myConfig.getMqttUser(), myConfig.getMqttPass()); diff --git a/src/resources.cpp b/src/resources.cpp index f4b93e7..841cd5e 100644 --- a/src/resources.cpp +++ b/src/resources.cpp @@ -32,12 +32,9 @@ INCBIN(DeviceHtm, "data/device.min.htm"); INCBIN(ConfigHtm, "data/config.min.htm"); INCBIN(CalibrationHtm, "data/calibration.min.htm"); INCBIN(AboutHtm, "data/about.min.htm"); - -#else - -// Minium web interface for uploading htm files -INCBIN(UploadHtm, "data/upload.min.htm"); - #endif +// Minium web interface for uploading htm files, also used to upload certificate store. +INCBIN(UploadHtm, "data/upload.min.htm"); + // EOF diff --git a/src/webserver.cpp b/src/webserver.cpp index dd60bb6..4ec5d50 100644 --- a/src/webserver.cpp +++ b/src/webserver.cpp @@ -49,6 +49,7 @@ void WebServer::webHandleDevice() { doc[CFG_PARAM_APP_NAME] = CFG_APPNAME; doc[CFG_PARAM_APP_VER] = CFG_APPVER; doc[CFG_PARAM_MDNS] = myConfig.getMDNS(); + doc[CFG_PARAM_CERTS] = checkHtmlFile(CA_CERTS); #if LOG_LEVEL == 6 serializeJson(doc, Serial); Serial.print(CR); @@ -108,6 +109,7 @@ void WebServer::webHandleUpload() { doc["config"] = myWebServer.checkHtmlFile(WebServer::HTML_CONFIG); doc["calibration"] = myWebServer.checkHtmlFile(WebServer::HTML_CALIBRATION); doc["about"] = myWebServer.checkHtmlFile(WebServer::HTML_ABOUT); + doc["certs"] = myWebServer.checkHtmlFile(WebServer::CA_CERTS); #if LOG_LEVEL == 6 && !defined(WEB_DISABLE_LOGGING) serializeJson(doc, Serial); @@ -134,7 +136,8 @@ void WebServer::webHandleUploadFile() { f.equalsIgnoreCase("device.min.htm") || f.equalsIgnoreCase("calibration.min.htm") || f.equalsIgnoreCase("config.min.htm") || - f.equalsIgnoreCase("about.min.htm")) { + f.equalsIgnoreCase("about.min.htm") || + f.equalsIgnoreCase("certs.ar")) { validFilename = true; } @@ -587,6 +590,8 @@ const char* WebServer::getHtmlFileName(HtmlFile item) { return "calibration.min.htm"; case HTML_ABOUT: return "about.min.htm"; + case CA_CERTS: + return "certs.ar"; } return ""; @@ -636,6 +641,7 @@ bool WebServer::setupWebServer() { server->on("/calibration.htm", std::bind(&WebServer::webReturnCalibrationHtm, this)); server->on("/about.htm", std::bind(&WebServer::webReturnAboutHtm, this)); + server->on("/upload.htm", std::bind(&WebServer::webReturnUploadHtm, this)); #else // Show files in the filessytem at startup diff --git a/src/webserver.hpp b/src/webserver.hpp index 9051d23..8646e93 100644 --- a/src/webserver.hpp +++ b/src/webserver.hpp @@ -37,9 +37,8 @@ INCBIN_EXTERN(DeviceHtm); INCBIN_EXTERN(ConfigHtm); INCBIN_EXTERN(CalibrationHtm); INCBIN_EXTERN(AboutHtm); -#else -INCBIN_EXTERN(UploadHtm); #endif +INCBIN_EXTERN(UploadHtm); // classes class WebServer { @@ -86,12 +85,11 @@ class WebServer { void webReturnAboutHtm() { server->send_P(200, "text/html", (const char*)gAboutHtmData, gAboutHtmSize); } -#else +#endif void webReturnUploadHtm() { server->send_P(200, "text/html", (const char*)gUploadHtmData, gUploadHtmSize); } -#endif public: enum HtmlFile { @@ -99,7 +97,8 @@ class WebServer { HTML_DEVICE = 1, HTML_CONFIG = 2, HTML_ABOUT = 3, - HTML_CALIBRATION = 4 + HTML_CALIBRATION = 4, + CA_CERTS = 5 }; bool setupWebServer(); diff --git a/src/wifi.cpp b/src/wifi.cpp index e040735..068bc47 100644 --- a/src/wifi.cpp +++ b/src/wifi.cpp @@ -33,6 +33,7 @@ SOFTWARE. #include #include #include +#warning "Implement SSL for OTA" // Settings for DRD #define ESP_DRD_USE_LITTLEFS true @@ -70,6 +71,31 @@ const char *userPWD = USER_SSID_PWD; const int PIN_LED = 2; +// +// Initialize the certificate store +// +void WifiConnection::initCertstore() { + _certCount = _certStore.initCertStore(LittleFS, "/certs.idx", "/certs.ar"); + Log.notice(F("WIFI: Number of CA certs read: %d." CR), _certCount); +} + +// Set time via NTP, as required for x.509 validation +void WifiConnection::initNTP() { + configTime(3 * 3600, 0, "pool.ntp.org", "time.nist.gov"); + + Log.notice(F("WIFI: Waiting for NTP time sync." CR)); + time_t now = time(nullptr); + while (now < 8 * 3600 * 2) { + delay(500); + Serial.print("."); + now = time(nullptr); + } + Serial.println(); + struct tm timeinfo; + gmtime_r(&now, &timeinfo); + Log.notice(F("WIFI: Current time %s." CR), asctime(&timeinfo)); +} + // // Constructor // diff --git a/src/wifi.hpp b/src/wifi.hpp index 4854ffb..a92d06f 100644 --- a/src/wifi.hpp +++ b/src/wifi.hpp @@ -26,18 +26,23 @@ SOFTWARE. // Include #include +#include // classes class WifiConnection { private: + // SSL + BearSSL::CertStore _certStore; + int _certCount = 0; + // WIFI + void connectAsync(); + bool waitForConnection(int maxTime = 20); // OTA bool newFirmware = false; bool parseFirmwareVersionString(int (&num)[3], const char *version); void downloadFile(const char *fname); - void connectAsync(); - bool waitForConnection(int maxTime = 20); public: // WIFI @@ -53,6 +58,12 @@ class WifiConnection { void startPortal(); void loop(); + // SSL + void initCertstore(); + BearSSL::CertStore* getCertStore() { return &_certStore; } + int getCertCount() { return _certCount; } + void initNTP(); + // OTA bool updateFirmware(); bool checkFirmwareVersion(); diff --git a/test/device.json b/test/device.json index ea87d67..45cedae 100644 --- a/test/device.json +++ b/test/device.json @@ -2,5 +2,6 @@ "app-name": "GravityMon ", "app-ver": "0.0.0", "id": "7376ef", + "certs": true, "mdns": "gravmon" } \ No newline at end of file diff --git a/test/upload.json b/test/upload.json index 10d8f2b..be03ce0 100644 --- a/test/upload.json +++ b/test/upload.json @@ -3,5 +3,6 @@ "device": false, "config": false, "calibration": false, + "certs": false, "about": true } \ No newline at end of file