From 44118c3b7e33b081689371bf1999f33c3c1a8496 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Tue, 5 May 2026 01:21:20 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 05 01:21:20. --- .../20260505/20260505012002-Binary.backup | Bin 0 -> 269577 bytes .../20260505/20260505012002-Config.rsc | 4501 +++++++++++++++++ .../20260505/20260505012002-Diff-Config.rsc | 32 + 3 files changed, 4533 insertions(+) create mode 100644 MikroMaster/20260505/20260505012002-Binary.backup create mode 100644 MikroMaster/20260505/20260505012002-Config.rsc create mode 100644 MikroMaster/history/20260505/20260505012002-Diff-Config.rsc diff --git a/MikroMaster/20260505/20260505012002-Binary.backup b/MikroMaster/20260505/20260505012002-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..902bad43c20b7c5c163d57566cae6a13c17b0cf0 GIT binary patch literal 269577 zcmV+aKLEh*sF8CC9RvVYLu6Pk@oZN=?!b~2YArwj000O80004Z`T(2&Lm%iIR;7O> zCXpiWHdL|12eXo|}PdtreN(G?j!g_r$=4SNwM5uJqSpjFPMc*owe>R^#AHJ$% zwaicDM=kXquSU_%2U2zqf*w2@B4cVt20a~3SEjt^?8Ti-I~f~ALBm0+6IMs)`3*Y` zEMh=#%skNiLaS+m{*)D8iVuKB0LD#5R99=EC4+`3!=N$hycuj(FK%-T`c1+8AjDmc zd*8n$!B(o%%RMGuEVen5@fgucF?CHPECS#4WL!n+AUnA=_v*- zTViNGP;GHFIqS)+A6P|%bx#Fi>YcvgxQO}G*s=K+OJ8rB{b8rpW z3(^DfN`Q9qffJUgH`p&E<^e-!_~L3To7r_TgZ8k8_42D~;9Q{0!tnDLAe zL~Kh{#_>1IF~E*;BOj%T4ZxDC;ik$_L6QMA)!~$X>aD@~fP&5?cQq~gnf81R7m)j` zUCF(31g^i{^^jN&WAWu$U)tQ`?v034 z8^CX#v+Dy=OA-eZXNkagJ<5ISv2Rx}aJoy|vJT6s0aXHEVVS6G1WMws#QL;&+-Wi0 z8gd+P-_@y$UXGc$1sAd9&$Mtz)PXE{eIss-QM!z7*~MowY(~R{1x!r#URIk!TMqZx%^~$0NlTH=Q|C*9%`IimUb~MP+A5U=2%3smXnt zL;2~4K+2%CuI#NiC&+K_Z5XHeg<7%z zmM%JV4=_!r*q99SR#uH5LDcWTAX!Y7JKXe;+Z%ijy^#{=F@=nV` z&h5t3HoXST`BuS|yX>Id-E7Rj@n1=M^VC^Oc(0HzO&?q;&>!ES zsV<+XJuARZVa)G({Le=guX;_H14}|qfTgTG%3SzthZJUXf0;We)1%taM))qjyimo= zzulpz&AKpLpJ{h0iLtK*ciL_FO;)EFn-{4eKhawX4={)s0OqM=#jHfURmEx9@BPkl zWIcFFT^5>;D|T83$T%2z&dhro1|Tcg1_&`(K@*ouCk{;ZHHBBZit&lVed@>wOchS? zFnfKf)ll;z60}V|9?kDi7bVGC)iTP@kyfZnh^e8RG7;b9Zp%~PcNJNi|J~AfXGj5f z-%^K;f-cR33;N=FTnkC?YDjLqda>~2wzVHAf{g5z_~r)ImJ(SY?7T<=J5$q)L2L;p z>U$MMKOtwp2m1Wud!;?nZF0np13^tV>_Ks@WJGK*+}JO5aweG?bXQ931Du>LuvfKi z70j-2lq-oDh4mLO>YG4^4mPBYxi^Oioji=H>_p9k`+n~sT=DT;l4o*Ax-r3Gn3BR7 zR}acWAu?h!iIu0UDxw&bsksx%GLj=K$?k=PhM6!sS$gEFi%Dh*2r+Qf+(oUl8gnjv zIJwtiTTP)sPCD0sSBkQ;>H@LDRiVaMez+h^1!9w7bUau<{Sfwf_7FIFsAqN7GYmT( z49@Q|t)23)jZW7^A9cf`AN%aDTQs6B#{p%uFdaYQ26Q6>muF8J>%O#q*eKh(NjP5r zNRz3$9K^xo?gmaUXr_%LR?X+AFLBI>U|x#Br_&eRT$1CvJg={iXJS@!iPT`|U0aBN zXp$YQqvJ-CqSBy(m9Q~A<7Xenv}$O_>nMoaHb9-izGJ)fHM)wkLJ9AXoXwLVa-(Iv zWxLefi~iT<`uwrCekTMbc$dh|3sT9doI=hIkN}^cvG{@G3Qqu}HpQP^Jyk;C6xm7e z9hz+zYOYp~Ux_HZ$DUUPWq}3ag3bbBi0fRBVoUV>$zp3YF73fYu68u`HJ&&R z!3{A_WL*5MnVCQjYH+9%-FMoAxywY1*rE;&-F@PAJGt}1!GJ7X&M&82YI0?5>t#k3 zLj3{sMMirE?5*Kc7Z&rN zQ1$%+D<&lci?PPd{U;|~>Ga2Gn!clSh@ZyXg2v-??`r=^eg>&@`PhSO$doN zG6M0C2#`0qUCK7b%;RR=+k2DiVY{T5^P zB~mWH^FhEC695n~PNKi44)|;^7pqI1{GTuyF=>(dfud@7UQ94fJl~_rT0eOd4S=3Y zi1yNYqV&K#O7^HdD*s2^t%%^gX((=c*d!o>!!SU}ZoAl5+BD1YW=SeQG&NH+PMULG z7Ref!j;AJ~h+m5h^<&||MhJBZgR0R7;13nwJM7xmx94&CWgv6=5>hatN(hNw)#-2d4DT8U>0hD`M%Vk1OtS`-sk)(hg5xlrQ1(=qJ|I-QC1e|FbLwQ4o~0Y$h6vksiSKdGhfTXlsv-bqo4 zlXw?*87)m|>S-knXv8UZK1fE5FSTY^u>s7FKlL(V-_PoA0~f@4)WvH_gfb%A7J_bv zu3x>coJ2=ZbIgMtePG*JLBin|t3|LwjtranS1sao5eWCi_lMk;kH%Ik3RKYyJ&=#! z#z~D226=lz==_xzB&kze{q5FqM=T;tLT)nBkV1DEyiVT#0zv>MGXquyyNd#h@v^!e z|9Oay^(<)R7v&3(=7c`yG$Tx3&+LxXlv!`lV&?)(^=t-mz!nz&qm6Qv7EtiESgGs9 z^@)q)OoVqRU$!Cvu!Kb&#X>r#&XNeQX{p+et@wulu4|KYXwk8L45UZ67fUd8xJuqr zJ*zg~bs!%9fm7G?d)fm1Zs=vPx|I74qqMk5Qdr`^v z-vtcJE8`_;fDM-JfId8XeqZ*`f|ZEEeoV9D*S1?CU_a_{&Y$kFxH^y6jlA~OZeX!t z-j~^@`@Jx@B%cxQ9CUW@BJV1NAPkLAz7TBk;rnD@F&E{LL+VRFw;_Buf$2#?mFTx$ zNKa0yelfPGm#F(b8Dp%5`}^|R{ki|Law?d0`AMokZ2EpBA9zo|epiS79|KD!Df{>> z&6O*;>_8j2U^FA@F*#)#xG6rYHlo%1l=}4qF#Cizt`~^_7u+vyuV^e4E-}93Kf8olFJflY8H9p<(i*fIxKxGd&mt z)EYUn*-z$GnjALQ{G$6S6zyf7xcCFjvW^khnBapihC09o4zOBJHXuu)i_40 z_nZ*K<&-eZejHLgL3ziWPj`b7(K9#Pr8!4NZ>_t0)tu_~f1WUM5wl2n`Q!c7<`*!j)>V zBZX(I7YyIf0P4vB5W-jc2f|zlSs{3m&erZNB0K|6IbSqyOBKXQ-M|TrsD8_})$X+4 zAXbKqabE;u8VlNpr@qobX^3{B`HRy41W!#%b{CeQpbhAeD+$XOx>PVxbjnuaGJ_Q= zGwCu@3cPZ*I*z?(cadBSnz$5eyVsY-4*A;Epvg{eTtZPFL^+fDk!>=G`W2bzk@yjw z;>~i&xA0DO7~`S&W6yHz`>|U#QNQrAQ?vYyPNAJ`VxNT0Rhu{&8P>7P&l@7_*AsRW z+Z(e)?l5_5`u>SuOx&56vRd`Q;i!w2?i0@OP?K;N=C0ML2}w(Ve>e6a=+^HZUur!B z^*c?A1Xfh1vI(6yZ;UopMx}6n)50uW=+Q9@zLRG*ZJ5^+j8{UZ{K$~fOhN_ECQX$E zN5?AX<9FN=J3gkLixY0sFCYd?@wdsZLjLa`FSOceNx$O50kTB$bte5Aw90vW&~uQtfw?_P+0+lp+8R?K-dX3?}knn;_ZTgr? zhQGj*hZVWVtQ7=nSU|62EK~O!SMZxzolB=auiPsb4kWL{^&cmAIyY*F+xD|8*B3=s ztCTr{ENBb{>u?7(9OpIokoTF~&M50Apl_e?O*Q1Uf`vq3mrmeu=Y|na`BO~^o*_Kl zB=|%%sR;%!y5YR4dMJM@pJI}tY0($RDK|DJGs@G{*EX5=;qFT|zV^D8hsX%?pfy{3 z1n-HxXa1lrEc@QPC@T3%=)66*h*s)%yYy0!0%b+xl!U{v4|E9WTfuR!^HJMAEZV?E6+{{u(a%#^bZ0X&r2XD;7}7AqzgGkxQX zI*dP3I5Bi-pSvat*T-~DgHJoa(Vx#iaV|=SW=S>#CFumXhuAgaV!Z%uL>P=i#Acua zxrgpnLxKO_hq931U#Y&GP#AHvcO^s7etBM|$frz~62l1HQZSkB)au8;Tklad0Sde#w?3~U!upf$z zm@})D_eA<0=2&XEzaP+1vU|7u{p5K45U9raV@LrY$qSBS-Q1~oa2|8A3?*@&rpxda zI-n@s0Y9&#N_jcKk+C9m+#yrNnYf#ek*h=U%A{CyBaZxtccSl<$%}1t!%)tJP|ea! z7FX2-wFfgfQ@;K|LlJ-u0(zgQO32zCuL4`}#)eBdsZv&;#>@nbg(9@3j1<#j#^Kbc zZQ;uYYtYXkjEWzroq<;qqo+^;zMw;WIG{|BiPv=+EV>P>5E7HpD)EMIA{ovkW?Iqg zn6S7hR`Cki8luAOB8gvIoVCUugsTi44C8gh^enF4TOxTR<^CMa0^)>d0J~pxK{A}5 zCTpf}t)W6VK@pKTQYtn{=A#gHO#$$FewmrOSt+!V1EwTC*~v4uQcl^s2yL=XAQ z5`(-2S(I!V99UiZESL`ES<$aX>;PL|D|*CYoHwyx>33XlJGv4>!;5xu!lSC;o#=+# zn!P>p!*;vwVx(KhePssf1Q|LB+T4r=2Cz#(bgnGws_^u_TAtNpS-V(3+oql+q309BmNtYv%h90Ocu+SeRcH1`kOB-NhsjyNrpdX6Xf6xhryIsB0c zp_Yi3(PG7Xh&3Y?r`F)*m9Q^WmKnNV>!jx`0~qA9?Z(E9iO}ln^b4wB!m2plueP!B z(aD;4gsYiv+MFR@Ur2Z>f_fEZsGnzFHfg?KmQ^lgln5GroDm(&yi*qT547N{Gsni+7TO`&v`txtN zmlKlPNV7K|t`y_UHT2cN>aJWO%oS?; zvy?=6&x)kK_ESeAauxo01WHQYkWk@|PY|Y$ue-g|#LEEUPgPdmQ%Zo$#FxMnjSDK_ zqRaFTxp(9(eHoV4tHfX3b`bi1yaCPCD{G6z97tL5;p}maP_PN*_LQC^n=H6b%{ef3 zib%`(tvi!+J@bC(L@}P+0KH4pk@)r>P#VjaAyT91w!+17>c7#C3)fP7AqilWcR7rS zVx;qZYG*Sf@@S@)fMuyWzBFG$Qf4S*P}_}Cp*b`2jYIsw2>~bXwuxf$S=+>%GxS1c zj3CM|`$0*9&acfXUQjU{m#9K-49qaq>M$NU4vm~_Hc}EwlY0B`t1FMnQ;Hn*7go~F zo&Roe{44^$D|YvKMO0S=C=mdce3Rr0F&vImN8Jp*%TN&ohp3b=*CwjXg4YM!{cD=Hm`B=)(wSc`P*2VOkktfXBi2+3bHDZk1w)*tJy}-IDa#(=GOx9+KSLxVqUp37{f>~I4 zdl}0qkKep2bS3J3BkZBsHjLZm^1^8E`k3?Hfjz-g3uWRU9q2)DD$at;c zuK>o9S|KisQPuqz4$dttO&k4X_JYYg^JkrGWo)07^0RpK;~oj-u1a)`2RN>~9Lirr{yKCI`Z&#pwp-w7U3oz= z`f^K|2u|m5Vff`F<@hSG4Hl=GESp4=q=VBwvY$sTXDufXC98R9 z0A(Pg$z*q7op(l7R_!;dZX!bzxRMWjnFdB@sf<1N4b26$+aIq`-$-$r|3Vk|YB^dK z(db+MK>pbwDv}qLT7<%rLap^7J-c&USzcF~dEzFW1xL38NXX$)0;7QwAuUY+aB)1x z91>8DJ1pq-Ovy!CL>vZFm0F6;{wFwKevK2veBT;F@_>TL6 zc(etZcuTwJGFtUab;9l*VJ?2stD6?7Fq78csU0BnYrF$!WG>047sUztkvSkGk1D~= zgMgXB=B(xP}M z@3*s%zhk`?7W-4dByuig#L>~@6$KJp^x z5t*;NER=cymk4jtrA@ZfH{O|J_6-=E|6`0L10bh9w8u6`ggNnGvq$>!Fx&C-u8b9G zT)L%{JF2W_P?Q=l2X*Z9;M`3!ng-vG|JUX&i}qG&F~Ie)lNzy0o8~1e~oV}aT8{b4Q-7((5+PCgP10xmoCxh_wt47 zLRRwla2-0%hVRs=n4RvchUJ;y4Rr?gZ0}$w^8tF}b@<&kU~q62sYhE);bk|{2ob(T zTo4UMMW7K}^obPzT}f5~?$VU*?~6<5zbqsPH=JfZDhghK!n|L$mH#wOknL_R-j8CS zs#3mijGtMq@JVftU98!$iSNp?<+eOgZS;s}M;N3LB{)T?y45aKzG}@W8Nz);U|)qb%64k_ zls^&Ak=%WcSx1%<)P4e%uOrC!b5xSSQl(`SdXUJWp=W8#5RUnNp5?22z6@y5$~MFR z;=}=hngHCBb#m}twTgDSwfL0;8)?u#Rzjtd;b=t7m^2&qkQ8X=3T4vB@&+xB1!%ul z)Sg5v>L;#3UZK!6`7$zC3LhLk zR^QecS2sNv7e7{{>lRX5`-7-X@k|R&(Ld>;VN6ZF{b|s;LGLw2zArT^-^3GcOoT^G z(N;@j^In{yRwNn?KtuTJ^3z^n0IW8C(wr03?RHS!a1SJqnRsNo*@HzhFpx$A*6%m? z)x@OTMxszTxtKJvuj?Dw{R^;`Q#-0lwj2@!G(}{`U31t@qYJjhXlkaT z!0?rp8a~=wF0i3>%f$_lZcIHUb)@NbOQTl(U(VHMEKL2f#h@J@hgV$2qRG_uVMH`- zJe>}_dA`}kSC9~0M}c@M7wT1Met&<~%EsFBjmh5Wi|cm!NPnt=n8smQJXsS7h+@%7 zPizxbYwnv3tCcD5dHL4e@`2bt;ygz5XPpA0&IX@{3NTk>w9oT^)I(qw(fHY*mMlGK z#wVM>P#Oeq`Rh)3u=RGw#PTZFzN(lHp+jyL6(hU8r*pd8ft%taMi4uYZQE(JHUjqi zgkVKr`YT}VJ5=1@5@GB+Cox+Rk7^*tBe7&6NZi^WH2%7yHQI?s52Jw9ce4Gj@p`p$ z9^y|%aY~YWphq1u(Ye-4YSbngMekly`Yb zI){-dsRR9Sv7n7vpBblZU$kaP(Q8Bmnu&=nM||OzhYDfeRz-Xu8@+lrZ6YFab)u;= z;dkmu-$`;OXm8eHFp~mhQT87lhjjbaCs#)FT4hf7ix|wg5*BtBb_p@S;=W|VesRlk znq!oilwzN9j=OmhDVS32{xp!|YYh#+FrP z4MK4ye^L!}{^%pXNmMsVX9)AMKG}`hHhs#24NCi+5O9b8AmnpL*%-kB8p?n_&A%W% ze)w6Lc?26XrBBxTo=Djo3|W>e`XZmr zcm^fAgK$lY!LH0QxS@@XI*K&CP#Y5N@POT#1Q2eZ>QM{nBoY0h*#UEld%9lVFc64F zxO46-883)76KL!&MtXPBywH4jMi(VW>{44e<{uY}66E*- zTzF;c*|jP!96Pgxcu@^rWUPFP`f7P+y;(YuKFzfMLq{NfR0PMjI%W;5+V>6D(1ha+ z7)@akx&Izz%Saer$m30L)B*j5Fp~L`j+cFf`lu}Ur3C$gu4W8jCe3v{&U937edjJD z*63ryi!bSU>JhAG@743E<<$dsFJa^wB)cY?A`gzZmg~VZ!6{sP6n+_vVS)a^wB_MENiwd z0IrWNyUxcg(`KG6CFYSu1DUH!WLpZc_8~ObN#r$2u1EwxRs3dO#e^!xb?s2vWdNSK zVsXR4r?ojCx@_onT>_71ez{$NI~oMO4=aW-zSyOD-<>y*)dKX-6cJ`X&fdbAi#7H_ zFmH6$%IY!pSl>!_c8<2b>L$;D(~4AwTgbjVJ#63pj8f|9g6s_C*UvRY?SjLhW6WWQ zK@X$vKE|YgPb8+wi}hjNwhKRS?-L6^pZ659?4GA;h!4t5X#;*J)XM5_#}m1Sn^)Sl z;78-XpTpo#4YoyZxT#AJ>-qp$-k1WxIXg8-V9>sZJM*kZTm;eDUNPL!|PtjRvSLuB7teZMx14vQnNY zLHBrY{s}L`IjtrQt$1NlHEM8yp5;ZZipa~S!o2)ZWf5ti?hx3i5S9? zWW2HHILuZ`CqW>wdw+4<$L>TYQ08k+``Pl01PiOijY=OLLdHb0+K_^P>hbN@GDwVT zLD`bYq2O68Gkwtsf&GWepzFuBwlB^FVh!1-Lf~XK_@~;Hz3%1qj)VrU@OhD z*YE+cQb*$<9REsrmp@VY6XzL!fx47&QwvDuz5c`&ZBQVv{v^|F8GCjSAi^}{p#lFY zHd9YVwI|>com+bIlkat5v6fNn!T!IY-jogtY~u0qjoSHNWiTMdcP*v&r!@S-p(CJX zkz34}ayN+Kc~kUgDF)ng;ez)*zAGB|7C$)C2jwTt_lVi$BB-6Xx}kZq&69;GfGwR_ z%2bBNascTmjagxb8SVMoOgV6Xarw(U^>_P z@aU7F&u(mKP{NH_b-E#W6a7~IsO6)?L0S*9*){l zJn0udnOH6}Ut_H6u;VfL>|xo?dt!%moeG+^x7~%7^*z3ZdUkm{fbApb9D(YJ2D%-D z7=;L>+ln14z7Mnddu#8U$NxCj(Vd<0cKUc}L#n_T-Bw!my`N-ySoYFzwTlnTQV$&5 zw}?5-b$7B}VVZxhZ=gZ9>F5JBnb`jJQVmQZAWkyl*I7HuAlgIbgmkE#TYK!au*azM z<3mCO>_BKTa1rjJc_Csp?~QvXUhH$nM?)?g(ou9vjaO;|-34DpC{oT+<7kSxO!zLcj;y59!atX0 z>BsNOs@kzdy4Cu-Vv|;K{apPR@8#ye$EAd{L>hdcklh}TP ze5`}}lNjkUNM^ReH@#V$8hEA7;P<@HY9$Rco(mH!IQm0J7fM-Yn+RPA7$>q5HjPL2 z@b-FYG{`s!l?9)hHVo&3`uv6#R+{cGugGBuqfSJnsyQ zduM38MvLqcgp%lAjtd!r>@C(0H_rB%xUHED9Swq8Z-n#C z1IZW&2FvoQ(%aEOLybn(laj$O*&XMS$6?Vnmm9=^2V5fByBaMXUokF^ekqi9^%(j% zf)Y=3%SA&2R%KMB1a`YfVcVv;3qzG?Ju@>gxSkp=g3~zUYyxlbpDP{z?z58Q^pF?U zbowPkG|g;=l8h(7!HzjAC%J;#Z}nb2ir>J9_VXn51hj>ON}m>>7K38jXQep>7BF1s?D+n08>dG_+c&t(LZo}6mW8 zZp=hIj4`Ae1t#_KZwhyoAEZL_3)Ng)>gmEQ!+Q~PGl7^RNmX@dKd71rBsE%`y~XI%F*eg^U={iz&gY8R&!f!3t~jpA(eX0I zqa}Re| z5}d;wFHf`**%1QoND8eP(@^UF_0x^w<&MR3A&>iv7y^kg@8}zATsj%LOla*jBNGB& zvlE}6hc#(Ll4lc|1k#ncgy2Hq*Bd%*Ht&!6qLsdnxmz9Puw_BuJLCJ{Uin_UV>)?8 zrK1FUJj&~vY>sR>oBcJd0M&U%XI0|fkXBlSQzdB)T1z@rG*2jwOX0N%7XQc3rRZV0 zGzDW~x>4fGk_||@Z@O^qrRB}8Gu>PvW#iFf8_Kf21oe)fQGn40=+;SU%@y-5AH6hu zRUe(Ipemmc#vmelc)7F_etknt|Mod;(Oob*aaSC2d$aWeTzOB%AT0_b!SlL>+rl^o zd>00il3`@)25bh!J}JxFmZxnT;taK5pV>T!ACD*U6Jfl#RRqpRX7={u|1Rbmu)!!!NqEE#3o8S zsMy;h{}2H{+M@lp&c2HZ?ALiX9E>-QLmJcpzkIjuwuqPV=1zr2QYvlOYRx(GVs|Em zq#fZsR54*7BOO;7Nww4q7WM0Yw+H>Y?tIA|GdIT%?H_Y(rlU8QKxz* zG(6!oYzw97eQgX8 zA0XQ3eHb+DE1+lRa~nhvhvC6msTtI;V~*+F9Q$laWpXbX^}}B<`)3QQOED%JQNL5$ zmKI2DM&D-w;c|VN;*g$2zUTNXN|e- zg2Q{Lmo0WaR^S9MbLnbWiTjh`9{|s*$lOWg3(|}EWtBC#*@NR+>Dkraw;_=Jd(hHl zciLexeGbwRJ^N6963q+MPP@G0+IavMnaS4z@orq&xn_lx_$II<`;G&wwk$Hukw7Fmnw=T zVcucYzjCdQj#pJpF7%J4{Jb%Nr~qQIM&O{Lt&=gP5$D-~dRNReA}a|LsyH5vWc)dn zcs`67RrF(Cll)wL=Cut;yOp8$`EU=Lt4t0V54IqDr0W7lr!=_1J$IzzulzFsbN&s9 zQPc7wzI0RgNT`G@Dq_F(TLVsKnNr`krep&Mo}47aMvIN5{{E4OX7TuBw7>i1O_{Q_ zL{0yLF#Q5t$pnAIo==Y25fy?=#U3ag*ciT5%#w!>>S%Mv>~xr`?TGPi7s5GR99htcwMZH{6U#7QSjDHa_QK{KC`XgF#y(&TNt8$fS4-3Ulwv}EnrDXq7S`; z6JvTVDR;C~qr#2s-@DA6E{vJ^!5wWbP4Rz?#LmXGO^r>GJ>)}GaxkY}N@N*c$>8@! z5KX25v68tRi)GfT_8ossn{|aKs#WM#I)GQ6D-3QWucqJ%Y%H3^E9Y69u*2k-OX$aj zd>yGQ1ihdI4Ho|k*Fvh;2gWWqG=9?}|nlEZUk8s>i*f^^XmT!ORj zNG)R!b83S6Hq0Zc$D+-fd4cx!Z(1@_SS|D2_aeeK)Pp$wj?0gL6Pk1UYIKSI#um;0 z>GNdtoRS{QU5I$zX9B1KF7a^xggC0Z-fAjCRS!2N^bA+BP;r%|X1jQ(t1UarCewa6 zYMMw_1CE9sFVU;$jk$>#yAvw$*!6J*|0(9oddhWZOmf!JNELzl0cJtZVxKIK9IeKv zx$&fZ?DTN83;WJ(tNWw|UG-QMxV{XF4RNKzySu}jR7C{?8=!J5!6=?5Ypm5b3B)Z$ zVS>B)`&>`FYRwetKc-vn;*W~hdd;{SpvRAEwDSm7bBq1D0EZsG3Q$9J8-Wh#s704| z%`(Kce}#mo%UjXcdKjE5!c3woKR$GV&5pMlXuM2z4Uat>=e5%+hD8q|smBFkp|SqG zE!y?R)pUR?EnF-y9WNUgzke_sj3!EkW;;3=&khA}BKlEzH1);{?W0c*slWTO!!*^( zp9YSnR-Trw6&#tsjyFZDhdKFj^S$VDw`J6SbF^HYqWXW5>c=BDCrnXn;d2Y%Wc9t? z9RUJy+h%STca2CFAq_PS7NK2+&Eu|v^91gAp$ibf&b4p=sB?0U;LOUPM6D?eG zYny^B>>o%NsSo>(T{)TX*)1+mDZ9 zT(c-#?12ALH`nCoK^O3ur~9tdKPTa{HUywe4>R{zQo1$re&U^K6gFnWiq!#cz&}tV ztT69kyV=Bf`mnB4CYXvR*o(dAsUf&qk=-?;^|&n_BJ_ zKV_XelEVv?zpw3MY@I@1nWZkU{CbWwhf?Jt=L)jKC6J|LZL_MUw>)o9_xr{f6{%K2 zxAKlU2a-g7Md_4kU&202+@l6iR&*1(X1nJ&jVIoSH&hy?q%uGnuFFukd>(dDPr|4W zCF>WL&52Qb0w5lzGP@VHL1)r=48C`bNLI9f8YcB4d)3FwwybcePMjkl zgT~hgV2cdchysr>wk~Q)1k*6!nbhpZ1;`0j6~>?-LxT+qLEmLiPE5(S*r#g9Qf(uwYXWAMVWK_G#;@! zU|S+2by1ID^p}>u>mw_1oi1$!PSr#hxPjuN4z_P_F%Lix&Q>E&Pu7H=7(g%+J@%-l zf}2&ZH97rBoqb3ocbeeP2*!Fo^AM-YHXIF&`s+Kzie7`F-_jo+EqG|$-0_p2ElDl< zvcCZ|SCo}HzgMCx^x?$?mNC@abdaNLS0Ft~y(@QMKb%0b=y% z#&IYZv|?>VxJP*XcV~+<3=+3$!v(0~oo{TK8FwzW`wjM-S$%(JC1vcqCs=QDc=1$g z|mc{*KrPGARu*W5%bE7_ftZs9m?MbblrFQt6c@vS^-?UZI@DuU^Z( z&PZ*tEXUkrgSeV$D{sc)9&(9GkW#wua0BOMHm-(CbR&+_k4!WqlE^*Zmf>B`vs2)mRfwimS@Vc87K!CX0sSbCNf~C6z)Dm z2pQ_f4^>0!1BKc-tXG&wOH{>vijA#3G3&U(2`QQ~@ld}TbPB=k$W+DFd3s4S$-QPY zit|tBJ5RAa0t7uhY@MCzJm`UGF}1YODrIXWc$6AT{A)mV>T;NM`glUvScafsQ3mGY zzw5zKbh#Zj*b44c-CGSaEpoeF7`B~KaqB)xnOj{(~oH?`nM`VAu z;9e5IGZ?m##>ub=>^33TlYceL)=par_3YWqM%W8~*Ko(&YT3_|v zAcJl?%z8cyM6EJ_VC={tflE7-CE!NAn_rdv(XC=ub+N~~x9h0+A6-&e09@Cii7*7q ziNzgZZ{yQ0@jVg1tCwnJ zxNEFW2BJ4;IVHX~fK@`C)Txug(DgZOK^HNAHTllDANe`$!}QKf8Qb2EoR<33x92tI zg>+}5$Mh6nxL&9{>hp~uBfsdg2fBB*Y9=a^nqJVH^$A~zOC<-UO+z z4^EOVfJEQiWjyJn0;;EXk;rVOF}TF|Rr$FB5YNjI1i~(phgMx3Ul}*f!Thzm6chs? z6pOJ#!-ZmroFkhj;mMfTg0a88YOy8`rv00kSnB3sV%@92BtmjC3DH>IJn_yDDXz%* zt)j6L&}%Rf3kRb`CyoU{Sp7rUzT5;p<-UA!z8^xRyTT>^c8|@6h)Hn`xpb12-T+l{ z8STfPdQnoQ9*+Zo7)996!XKB#3Of*x^cQUkXGy|EJ)ch~;wx5!TD8Id^jut_?J z*^mB_MalN)C%P)*r3ys5rW?t_QKF;uA#4tw}od}RqgBMDdaMhn}z^MuMT6@X5* zZZANO5d&^EjhfPxCV~Kx+UkFHB^FR~L3kDZ63uf`0R<&yHvbtQ3U=A16}9(&1thYp zV~o$0U+0ODGF)L*2YN`y2P&82@!ScV)Oaf*!>yPib?p5w%jix(dH4B4UgR5(M~!yS zsiS6^Ia@P081=ZKa9FM9_Ti3VX3pB~SY404;JMQ^25v9Sn5v$_-IS0i`rv`Oc#r{4z6)V(20-y{%NX?60$+)Jo_Mpd5$hd5%k41>b9fK*S}`tdplG zFHxiU8b!Y|WF{3dr1cLRJfIa3G&%svb~huObb|c2U6MD*8AI+leF~cg<}!3#i!QJ; z!4A^3YsvRHDqc063tJAmc?(XTe_O%&Pa}d!G3D?6_6O-xKUX0;H_AaciF~&VUDNbQ zGBJ)k%v(xWU=4pWD;$UHb=*F?)$+mNkyCU{-G@3$3Ls?fma7$HKO=;U*Md98k+NH= zFVOV)()ChvclE~Ex070i^)HV0XRD{tHpklvhM`cz^q73P_umvN2v-PEqCokiKViD~ zf@6JaDOb4&rm4+}i~E-zTe+IS$==3WEDR~dX7I_PYfh%6H{n4!wenG%ywd3{R)$P>!Zc0fwmWKo+GK1gD5z1{Wx}Ya5gtkis%sY1~?%u+^L= zLhHCv&6n1o?q9W?D=x867FFj~k19zJL>FKbC}qad&f!`;SIu(#vId64Q9%v;`dRG4 z$%r^^##W{Y^pAEG8?G-QCcv$&%|J=zbyyb*_a=?8#I2_Dl)!8!87(}E>~D&(NMF8X zEEuLl%-lf(L8ppH5_mw4*qNcTMpY{d!73?Q_42b86eU@YUz$ZPn5*`L@CgTn2CpAc zfOBQB?jk1!^;g%frL2-GGi$t4@DJ)AJXxBwW-7!PEubEhFi_rsrD_+{OImwM>?I@N zWGQBtu?xAn*D>zpIb|W-8<#<-1>|BAS{2W&!A89s0`0xJ-=~gX;Bp08oaSrf>uBSP zy6;L1z$DwLLye@UE$fC&6dGx19s7|N|?s2U-fo#j$_7$CBPEvGMY&L zQmFE@rlv-(9^0+Gmtc1}qmg=S622z=un^Pk|qj}vq-#Jo;t8e5djJDnY4f9-Zr=Vk)D02EVL+qUI|B4CY!$rNo1 zFwsEZK@FWi@JLSB++m0c13T@p92j?=u3JD*T>kQtuq!ev`t^Y=$!h|q`+AQB07I3 z5O>#ru#nCDl#JhsbajJ=sbGEZ?0KemcuQLFHiIc@w(Rg+bwu3DNvNR$CV_5CaE7|8 zS2oT$Zb>dbuF+gu2YAEG-Y-Ah!eT|@W56v9G^nzBClEWqukkRQTGNwf zdbYbX2QT}ZSEQ$`oV|;t>)m#PC=BI0M_*J_m)qiydD;1JIc1rXu8E(wy2F*i?lcRt zc_5Z`ar4;f-30*uKLEgwa1+*Hq@ne~9AZcM?323&9x`e7=fLV)>i(85YNhp|uZnZB zA>6NhV+GCsQgx>10e|N+yl_?+%8jsjptM^=SR3t(0XGkSkY=>fz>H0LAMRjm`~!s# z7pvz^nqA5Yy%kI*!tMXCxTqgl?z0a<%CH?+QBDMr+l0z4{-yk*KG~CJC1Ff=6H0Pz z--OxgpB?q}CG36fYC}L|?l=R1uakrh9)!ZXPnwGz*y%^0XpZ<--&ScqhNhMm>Nh2*>#Jgx zW@ZO2ihO*4)_Yo)S$f!-;JiHMG1&a1~tXS0$K*PHUOFwU|DjQvw-$(K5s>EQ)E-O24Cov@l$a6PO5> zpl&F_^mscPd(&nC1zFaq3b{jYS1ZOL(dXnbqif>Ro?x7AHbOi1z^H{#Bo@)wQ-r+}*_R!G{*zI)vtC?Km0s1d5I|yDd zt@S>PsvMTpD1=ToC;WD|bk@O0V74v>M*k1EGuW8fCFE6gofiTG%E*2t#8pq35QSoA`wbrm6N-Q?sJ zI8`TK7~$+z(Zr(1SQF(lN)V3xQpJ4*H!zTgip=hYFqSeK2ZTP!Zf=j8`U&_?IvyI` z(WUVs6Cn?SPm?Ipv@L?Xy8bWK3ec5@We~~J?K8abCvX4*3Zt$U-}*~s~X1A?wgNI%xdlLU}OH51# zE=MK@8Ue_d>spNcqHHepjY3F}G}tT$*PPzEZQOL`bEjgg&(P7z_MM9Nrg-&l)F~P< z4)rg7IIVQ^_us*v9si$3{yM^wqc())%nH(iu~B{W!eqme$YaT(C6OW0wYFNYrdeOKi!uY zO{E22=Y>q4yJL54FEtyD@v^gZtsYLKaPG^ zqIL}o`o6G^GUmRXaUw55Dmc_ZKx= z=qxaEc}hC5&ZEkuI)cC{j80W_Kk5Q$VD;5QGA4)r{ae?H^9OSVvTN8nOJTqpn38-w08;zuwR80wB^pn1II`I zW|kBK9WHMJJd+32zrraD(Ftt9Z0a-vxW&MPi#Z!$ppQXS{)oxLauufKoC&@F+lnj~ ztDTjH{uIPHD*n<(4d}8ImiEZrBvX0`l$|X8g*>p$R1>6aCE&_?;`Vh?7-}6#|FZ=C1j%=fAO6ecPye; z8i}N1ZYFfJ>f>r^8ViWw;o%RmmY<{!pE;1G>LGF_o3Q53hX(QM6h1w0X#RWosD22fg6R}%npAMS?Ozk|Py}^GtLD`RM=whTT@YU5%b6Fa5gt2RjP3Qbin}H2FAOt{Tb!S0 zXjC5ebPOm`dUTPwV1J?#FSJ#(s6w%rtcVLW;ZW&1pUg=7ulwfk!NSpjvo+z-^J+An zQC*F`kNtL)<@(_??_>|+O=(UEqz{Ou?(DDsNa|qZE(KkD$-0LPYONdiW&2Yq8?YNU zT@4?#c434X^5p{3$xP0W0d+{1qt_RV0{EeGsdgop=W;(jeGdpyxZX$uLr@8@h z+VM^1?Q7S~$`pLe+^RIZ@RDil($0GNKdcp-u-Gl8Ti1?TIK`yq#zL7v&iKOn{6Yug zQiwCNQnEX19RHsLbu%Kj9Rwt)A`|p4nitcPwjo~m-PZB6f}9QkBy!E9MAwE$v1=@WOu6@;zVdBV zHC^8IXSzKe@Ij1y|CpnUsCHy&;cA)z@T&o{9kZM5&1$nv8RIR3Rv%(KjavQ`pxrdr z>O@QcpbOsL6$#Y~c4$K5{wY~1uyAf~q8+mphDmFISSzJWAe$Go%?R4053k;9WHJN@ z635#!)+L%{-7g>O25PCVpAk{{IdPa#U54N0L0Sh_N1CK$kkk;4S@O6jD z>d5{?PAh@%(3s&>pUXb5NVF9lL8(}o?{1UO0Nc_PCE%MC=})#g{SWeqT|=$dNsGFR zR>sjEi3|9?Xv57oex%2psi@}n+!%O=XChHF3?T|ttuyW2N_lS^7FK2%iN+>ATQ|Eq zA{E&K8;|-NqJ_CY)_cU_BTm&L@{<5gH@RJ#X^D1lMtH9-;5VwDg;`9!7K?eW7S~vr zwzbtTL}hXY-_f#oM1P1T{}x}33FBC`OJ7kt;QYv`!R!RGCz

3W8#dErA#5To=%|5s0aS(s+Cbri0%j-h}bhBLx44U2td;e zrq6az=0bqbr~#yO+u}@(RzQb)U2({Cuah%a?h#TYXV1Olc@C5z1>oB!mK_h%ns9~rlm7Np_x%B!qSCkr@zT(m~3AzW`KS6 zkh(w7Is_#oSE7&p|DohX8g|0(_qB`3$jp&{B&|EbirDf6JVo^;UX$`+vTvg8S6IBA zG>z}{LMf26>u>XpUzBUvYPO5mRs#YBX*dyHptL> z1=KL_lInBOOu)m5Ag_p>z`^$kNY^Z6$0{5 zM-R59tD<LIk?U3-DiC$d14Bxri`LDr3#PR6K8L^sWv&M!NzK>g)A; zE|e=ir{0`NX!+vR8)*kUuNGz8|In3eai^h0vzW`7(=%35p^5>{gq`dxQ`<}q_`it zI;MtMHp`g$U$P}T%@cnZLVe}ULI`*42Y1|tcx~AXq|vF*qXe;hDmMG9U{2!e;kWcJ z@w+$~Fjx4^{?Rlh=`gJt&9)h7d%fVV2<7X*#sNIao6&jxve!6q-%~uEp=nuG@#@Cb zqKIv7CY=2VuSNkRBE(-S^-b&s0X6$qLlKlmgSPD1)7X-j2HVCt7gulm;7=FM*zelQ zv#3%o6b{d71vb7fxzVOUnILy+c-uzGw(mkRgaS4NaLhlX=9203AclT2FCMS!He_vU zo8I8YZW*w9L>jJJ3hX4^#gewGyjc4Ks7c?|u)tKu9~D7Hn?v-K5JEu!-?}Mg8GU|W zV5HIX4kiP7JhXTfX82tM`r%cII(X_`XE)!7gT8oIqG|o-lvpr4UNb}P{eWw- zXhI~XCru+7>#>@yd$SeVl^g3QXPR*mSp{x%**VMH2KmL8qY9>SRksu)EoQnTZAqtz z^7ze~?V5r6B!NS53!<76Zd3OKg1GR@!zJ?5-gtX#N zTNNL@JEYCAw0sr)^@^ecmQUU6&#co0ji7By1!FP*L^lz%ELA{Ho^7@5IEbop{j_X5 zin2l(V?(d+zyVqcq;H&VSpsmzH5F&zv#y+W7ZDV;2h*}iY&t!x((le0DMWiHL}(A> zIR3I8Vd6;k0lFz9GD7ifQqcH({8^ck+hQEEGg z)2wL8N-iE(dTEM%2;K4|?``f(Pr2rX^gYz8b&cr}H0lZfzjP6^kdfvi=x zC+oJ8Fe9BPJ8M1x0AEy9CDlX&@oh$Wq^pz8~wVFZ_joPK}rZQ{x( zsKv|46OOxzV)EZDfvKEN7Q(#nvkbN-`Y8cG_W}x_UCVIK8>^+iy$j}`N0Z6QuFszw z@`s8#zYJbdblui)E|amYu%^ANs^J|DfoIHLT|aMa&nPZolKo@?M$%z1Vkv8@fRJ)! zI@}|G1_2q!r}mf?F0ojZDP=?cF#gi_Ej){&FVNE?8j6YK6j0H2fd>FOzf`=MoO$u2z_UQ}UFVzNOr4w))vqqrqj z0_)4LJJL|0#z_vLoWrkOzqopez}JF@$x<=1A;V;VLyhZeLpee7@CqhCny{4!Uh}OXrh|ucQL&8tk z+1M5Cu#OMi*|*>*Bh0FK5&DvCTGFIK`jsy>`?aND$qz_**G!jb& z#%Neg2&K&T+_?BSev3~s_rqj5Y|u*51OaJ`sGT{uFzqlzRo_Hm385s2)m*1~BUC_? z%EqfDE~22M76hAa8~Epnb7G_o4uRR;H?R~@D4CgBFgmm>Dd!)KV>u_lvX7}AFtc-{ z3&@vUSxwI&ncHq7uPmm>u?$B4q|E||M>p*B z#2O0l#rJ}0^hzy=Ad)2PMyUQy7N?)aoGbOAaTDZ$f}l7L_xgN*pMkLq{iU6?LCuu5_Qd zDhifRI;2%BYyH1Jo3oukj3@}KO~wKx@1bwE&MRa%>cAa?xx z80k$#sR%1m^o(qx^}E|K!+f(Pq>xM-Pem?)CwZg;CI`=|U#Q%+PsK-hLUGQ1r*C(R8u0^vEM;=$HePMrSe8Q5ksfop67umbuor>#7W|-}t`@PkC0J zQHOinyka9o6T<8{hyE*IGc}tVNm;630nln@vwE6*AbW-d6kVfx!HXQNlMLWW*wq%7 z-uT;-lVP?6nk3*OL83C^!X`P&$>@Y}gD8vtHpR^fkW{Ri9~+>vepgD=vOxWbnzL;H zV{6S)4GLd~l+sN|kA$iA${HlzT9!}atEfIMjKEjh3UZ+8HtFdD?O?>7CX5I|P>DZ^ zYw!5QpgN377UN7m==qPF-XBt)a(F=fpQG!ElbKr;2W?u2Q0g~(T6pKL@V^xeIMKWH zrx22m{3<(I*9-+^dvVy)6-xmC@_WX#vvIeRaHLT-r05uSwq~(8>w-ynTAS{Amg}q< zO+iUvjDbya!f{Cn)-|}8)@FEY4FxaCh<&I z45v6FWnoI(Fd0*Vm!q1oMbZP2*haOu@P1oP43+UH>GB5h| zWcwati_b1(G8+h7H^<&wLlzAl%J%zg^IOE4%@VE((pV}j)?irg{oECK^bN${2^V3p z#VKE1ZZ@y`U}Ep2QJkKcleVlGwf?m(h>P+}fgqDi)&1zW`SqH>*>xu^$E8X8&otJX z*)rn18R*_}e)@C5z8%5(Bvm(UA@CisEMtbj&Ib_G)E)21(h{#d@~RH?C*7LqT^jl- zo%7aad+n*sEWvS0k=mpBi zJ};{$1L}h+VB?AN@zh0qkMyQg!1BHrum8!UFTCKrEHfKh&<3P+Vw?pKIK~w--3eEh zb^IjCry2ga%EeGgwPClyhR${<;>H+}zI4DOPA*8k{RmkR+P7RJWe_phGZuYZsi1O?gu#2u%GsGNrrC(|T7cU11Mka% z&G{6WQn2r|le1bW>*Z`z%8}fzw6|kIQF22%zq4%Wg4I2B-RqrWa+={$#_VOFQng=j z4UaH(es*7*u)TaOHsr&=Nq6Pf*mQ8^PG50u@<~!cE~|0k17<>-jNtLrTC&%!>~9HE zLO#Ar?1zHn+Py#(W1s8ve2O+f^B2R}$dww*Lc`J<#oBw#mznRLRtJP4asx{_=k8y& zthXqP2Zb8W3^t53=`bxiC!w8$iRolq@&md(RT^K#p^9p3g5^(DEMl`cv+k?`YBRacQ z^X-{ZFDxCJ!})m~6}6y!$Ud@JYrnr1u_|dgNRI(DriFm+IWF_S{?QJtYtdiecT@DHAR)kPB8{$SoU7cGbA#vv#mhePb!nX;Ymo-*}2MvBs z5sKcWznVLq>>v9^097*8kBOfz(h~AN$hYG}*Y0KbDeH?n!G_8S{YVjKgFM<&&f1AW zMehlKf*^%$BftPT9-{<<9i980opNAmnH2(8CzvFFg6c5soo_KhwLe^ifyROF1{BEV2n<6?f#XPir^?PoK;>$-b+MEK zZD74T@n~D!uIbPN{r#q-MDw4ODpmdOG8KqITcC1I-#ZS-cs#Qlw^gtr0u{4JkfYbi zrMZVF;V6>!DL(K+2|cI=iOn!gw{=a`1tZvFWu>#2Gn9`2c}df0&^OBViF=d}Y4?WE ziH1Z`B8ua@zREvuKXk(f!T>TtVVz51-07cUd}xatCfJ%I_5(m>Gf`KpbbBvh$0_PS ziSIFsAu?T;D%hP*3bq0J%@%AX_=&d6nO>ohjHI!MRj=KPo}rfbIp+(~M?)i*t3SUi zl749@b@0NL9$%H6z`l9c_%+85A-%Q0cA|6vQ%8ws7RgC)&sb`^M zfbe65aUtT5hU8^a;o&cEst;(Tbh)Ge>l8=M9%m^f^Nt#U?T<_f?ud;Z5Y!1>IM8B+ zEeuPln~I%6UYu}5Ujm1c;Z8Tis0yBKsHT+(TFeX6Qz7awjJR4;r~V1# zDw;PYc`i;JY(KoEtKHXD-Gzol^gxzic|xiL>P)1syKB+dua%4a|W_W01lO4&M~k>EX+5|}OxEh)LkUD8H0Jr^M~Wu@=irMq1Dk1I>%AH(Lv*+cs~orEB>KFMp!<=mu3>0al=JsgB`_~( zL_cG+A&nlBefjG;tapw?v;I7X3F_WD6QaYG&nz35 zWI7QGdSge1bV!i<^Y>wtcgw~C8;T^ep>*&Q=pRK({aI*V7>z|w$bP?N+{gZ+FTtM$ zM`VGK)Uh}EF-Kgo$}r3ECCh^sRN#EF8DX;`r~BlN`cFt^2QQ%%f{NT7|JL{91>27@ zH^OU^eu1k4ObScVYgC9f1kf(4@| zobm7?1GvgJjL}pSO*xrt`WSHp^S!aQAN-tc~4~aXcm4un4->p zUy$1&Ri$cD$=h6PJXf{(EULHq0p1(Jdfp7ySFEGBo8E;oWAcY_PgWdq^zyw*2bq|i zqF&DZ1NNtr?zs?$)LQHnHp)}f$oGDoi5J^sQr#Ae4i-n*9#ROmGF08%rD!e$xSD@&^!3D5-7iC%J(GTt@3f> z*|k74={!~R@)cGiV8XHoTp<8yJ(GWrIE*!uXVN1p=6RC}msI6th!5(8-^8$&Lexc< z;G3{Zfwr8nkC;8LD@Vu};vUGWAse@bDo1a)r5<19ymx%S)Sp1^iCl=ISM|pr{mq*! zgTw2b8<8mg;ELVr!<*&|(;dy8?E9j`mnU~8-x6EjH*)%YcpnDlH%qb{SB_+uzY8)N zsr#rtQ;Ni9CnDp$hVi@fE|tB2;4m0_*I|1D-6z`=MxK$A7`9+_g`B;0_h&?SMz8=cZZ!!pw<1rz%A&~ zdUVWnM5I*8bQO6(+Hb_?e^jfp^#?dA5W=+H?6{mdCMN3p*p^4R21@Ncp<_@ADO=s{ z#gEdzO2_w1nW&|`;om*|hjLYZiho?WqBN82clkESd7Gi-68Ni0xoT)PT%u%TzxS^e zOF|`8J^(g&rAK9t6d|>3w8MBXOXVJvoCVu@R52F9{7YoYRlX+dfjCJ*Zx3$xouV^? z&Twwr70Jk)^Z{>Dlt$FM@LdHHDZ}@G@7QtFJ=AcrV-)*6MycC6$cm_h=jpSF6SZ*+ z-#;rrUz2CEs(*Y&mw)Gxz2XXw4>Y-&iY4CAYMigl!*S^N~={uzFjX z8}?G`ddViMTg(uh3_w}{$lLPPbC&BTk437`cDVg9!>_Hmz=Q)XR=jBsslk{S<*pTXi(vV=4aLUGu$;5RDvR&5SNEHr1(jJuS3pl0}M7stgnb%UG%*zHU zC9CjSXqE7)ioH_ZGO|nxp*23gZ2hi1G@DGa={WgzR>lNGk7seF;g4v2SSYaoN-PkF z$oxIdvcestBy)!lm=g8>vias6Hlm{Bu&{ZwQP~Xs%<5cHFdQU;2(iL(UXKIY3{Xpk zBy(#*de!Qto5_^z@LlCrf z*FynRuk%wAfSc(P*F@a~_Hj>e_^p0@3F)3M576uRx#QeXa7H5Cg5QAJd;r5x_`%6E zAmBPHLud!k1Jgyicg;&)Yj}hOu?lSiT-j5f1T`Nwchy|k>n{`as*Nws-d7BdpjG1q z=j_id6J%p(h`v7R@W3BWJ9=cd0nfv?yjU`HJVZ))MXNzTbZoe^5}yD&i!4|43!&ze zv594228pX;@yvW*%>9N;oA}uQ!arzM;ac_vg|c$C9=4z%>^on!2RIPo9}fUi?s_*R z!vQYdy9^BSM|U2(@y6#Zogb>EQSJMrDnU|4M8sXCXOl^vEj~oAQbVP}N|7X9Gs#05 zhb6#c*Akd)zA^CRxb6aGIZHPdx0+fAeBZZQ?vC5H$)#AKz^aXl6k9(VpTq* zUf{i0Ee14D6;)0(8LXRfoaxWpoiUhPNZvMd3n&tGkt#GzB3R|JM|I^@er~3&ga2pD zcbQHyL|;@NT?ipXE;j^Ee^G@+B0&c*p2G9(1Fcud)Ej%E^rszz3M%erEE~lb9w2|F zO>hs+IOJ87Ade!W_Jiva_%58V{Z`9@09P3;T{unFSKd&x)C=oQ^>!`^f|5}+|F9$C||FD zID|!Ye!CO+16JsA?fPw&V{TY)NFwmE&;RfBpL(~PEWeF(nFqoa2W>w|8E-HTChun1 z_Burs=zN#TZxfXZ`cQu&-3#5jwE4}fhtzrM3v%v6#6b5OG=$$|O?c0Ws>3D#1(E}N zv_2GU$d)k-*vo=_$DKLz3iLjn<3#oKyu$K_+m=dY;}v|wO|pkIGbrOz%Ois4u`Tw*EvGt*S-?V{Dv$V*WYvh_yzp9lcZM z7*K|+-g%O0Mvgt?{5XdM)r|^-FvKG&!y%~68c1;zBsP~9aVCY|6Q*n#!K=UE$&h3R zsTjNhZvnkLn&wjwtT42dG6+tf0A;w=eOjxR-pT%wFJnZL`IEv$8 z4`my7lc-qZhWxW`RN)n-$|rxYI{w?zr789U@3HkAgaXW0!B_F$w#~==Ldx9J4U;A+42q<2xSe3|jokkO{-e+USRUWr)p;>17RiZELLzx)BGOq+_V~n){n7;gkn-^Y*GKP&;@nfsA#R17% zUMmox)``08^Jvg8J55ujJQgTp>~{^A_MN`!ambC!y>q_;{Xko4jn_hjhvNwb{p4*B zT<(t)XB+fxT>vX+7>~GPT#7rj!wNw?da6Q;e&9%-58=l%agSsws=%@yGoo;b85)A= z@qiP-G}bK^LW`_+HjdVrA)D~CKJa%Y%sBj zT!CIAs?c=!@{Zv5mcgH>nx;e(QsmMtr#~rB;k;3X>zrKG$Zs({2FqEEH!5+Cp=zn3 ziKQ$vQ~hCjaf#_Bh_$BbY@8LO@OxosylL~|I%DX247zTt=T=%HfqMD?t#+>47q)V{0#{xoxFt2nff6uJryc|!7c$hj+h_y0TX2iqOdpm?l)Gt z@scQ?3P3K>1Vz(+?uAzdvo6k_+rl^EADT{Ja~Kt{-$?M%|3{BP#xD#Iq|I8Yn^i6O zgp!k_`DxM(A$e#RygV5!A zrmaX(y*lJ*C*`U+5+dq0ye16JR?x2MdUAe2Zo&AN=>s`gzA#rs@=oDSr|0-Ve{m?r zx>-g+F&sP{#Sk|m1a7Ki&ndD&Juu1jHjZ)!y7a6^Tv84^3??UQDb`i}FxwRkwfOT<9rBM-OY~QrBI094VteoU1Y)s^&YI*A@BY}tQc$s=8pE{AWmUn!Z z*{H4sz=Mpm$bj$J@S=hbLX1^ZqPFa3!sPU52eO!^P~Y8@Yih)PpL@4PVhChRhzJuM zMnX!jWpZSUODTiv&!^XiS*$EtDJYRdqS~6lRFVVMUcphp&mKIKyE8~+&o7NIs3(fI zu2@e>^hsDDX7j`24217&n**M8HB*7pYqVzGrHAZaTL*(rJgusxgg-|WokNA}RL>5H017-5Lq^hqfE?71huazNjL8W?X~6)lg;RSb_4}9BMXRP#KmfL0f_y_BmcFcGDMf03?xD+bW$L^BMw+m_TKvHLxH}`C2esmbmKD(Ml1wtp`o*#db3q9Oxo`2kn%BCWLvH(rv1ggbh?0F$a zeQnCVt|wK@8jKyg>YpxfvnQzq#A_~diMsPNinGLL0d7wXFRi+Z#sEq2utpfgxiMJICH zF0j|eoAwUsIZSOpD0DMFS^Fj-A^qlcR%V@@s^zhgl(Wor0#iS_?QBTuO*cVTEJPGR zFc5CZ!kp(k8mh+2dT3eaRM0JGi6lt~jk}%sj&jwqSj;r>FeHJV0B-g@nM`IIFS`b9 zmWjIRW-G)Dh$E!GvM^tq%cPl}->TcbE5l*c5JGLQfs(UstZga3>@T@)d+WP|7dU?> zr)wyY*nFXdLzd0pD<%;CXzwSj&=0AK<4oZT;He6QwNLia44#tB7~Dl4#R6h49|c#a zX(%-)(Dw+wYxj;g#GiOgUOTQx2>ZVTupz==g%~60DyUHNMm#EGG6i*|yh$KXGz`dQ zb8YP-JeA6{dB(rHTc1b5iVr;My3M;UIu*Y+L^V2!26Ay}4#njRUmi=IVMOnW-Um}3 zghP=>Z_gLX!gweCHr6Upj9wb#P}#5^-Iph^vw2K^s-_mV7n9GJ@9-Pu^K@3_?ey0` zwIC0(%DKU#JY3kC>M5~Fw)~YRDwo#JG^7JtLT<6k(P`P#JTzE_sSfG`wOEeIOlM{S zC(SIL{M@;n)u8#R!fZT*ha^_wm``1n z!zN=(Nv~3QcsHd;5kdNmWWTeY_Ko)n{xy3|8| ziJ-|Z=pfhYKLr0PQ#8Nl3qgxU@wC zVPOK%aa~78sCLb9cGjm3&Q`TT#SdHvK3_K{*F2T}|5ZJeZ?;J&6z`b9a3gCo>(r>` z)9ZIxU1n-eY)_rDl1JVL%yj3_1`;d~0IT_d+kd`zsBfq~K}C{cd>9y31y9>-u+T9{ zF;4q$&a7^KnGUgsvPLuGHfs3QDSr8MzZq5AOew9jufM&jfn^FNLn&^i%Te$~Bq4nN ztJn%8yulWTAz0y80Khe zf(1a+F2L(3Y*lH}28~rt{D!V%Df)1Gjb_5#Pdk@~9r@-)- zgfp+R!bm-z@r1Dhqf?-&FmFYw7Vm=D*!U&rpz5mjz-^co1ng9`4n=$ zC}8n{6IXwTp$Q;tpLcX4?9So=MnW7k%aoO~!n{j)P056))Hs0a-l4Jwu zo;B!o`H-I^f%8*Z6JiOkFi8>CqkeI6qYbJ)+5dfg8tob>E4N2FxFt95V}kiZ)-j1# z*)Q@m{;Vyq#@>Kwl=v#OVx1U`hbOHGxyZY4>k~CV5J&;>NpADU4V3YvP!bjvsAhz4 znBKBmwq*B%X3ico)iY8A!jc)gpIKJ>u2I>PaVU96hQs`E$yU^p(khxGQt^#z+l9BId}b*A=U;>L5aoMLlWI3XN2XZ5 z7Uzn4QwEPgDp5-jSi3d*wpG>&Vohb1!*pyimWPZGJJIQO>RH-4%nI0MKh0OrDXA$t z@UccVM3&x5V%<)SMe*<*onK0*$mz1(p!rSCk0xH#(fpe>Xtptd;BSQiD&4~bePhPU zr|iW^qK&E=GEN^5c{KZs%-oJkcgkp1fP;E{XWBr+S6TLa$`c_GI&V)<3(vu*L8=OY z4OLomHICA}zh+4a-qQDh%scM;WYv#1@MHm|^X4q`FWQ7dvZC zAmB&J3}`!?099decwyb557ZcA(a*kV3Afem6D8bP7O4kytvn75qkCQe&Iz~vu&NLtK?KWW&Xqu8q-PvjrpKQ} zIs#3txVj8IvXP^_b{ad*S0Zqw^!VU@(0&3W+PGB2b@c_^8p(CUT7{YQ|4FLrt6;I@ z*T}$a{MO=bnGl8P(x$yIaQUT|y)xpB%Ogx>l2F;$nfd#H&vYo?6#`6Xmj5^s9-0_M zX~XdPSMhK3G~^S7phI%gJ;Reirz$6d`jW$T!ly5zGeFOHL2k>7SBPv3-obC>NDQb2 zsIz~JEZ*XeQTFXJXTROPap68RF6piwc@s5FGRyH!MxBJKQT;*&_tFh%n2Z#myTmywNfZ^5Ks-6OuO}=U!%2Fx{$Du7{klg{qQ8=>jP%!NEG0o0!@;n1i zp40yW!(YJ+B%*$75)8Aer@@vPK$_-E(d*~?hkW_&RF9R5u2$;IYp8cutiPxATj(*D zz6Bxr(D*+;?Vu8d@}~6*bL^uA0n&?)YlHnQ5DP|Crq-(1aoi@~|LMZ%B%ZKq^Q>>r zT0W|;lEIp5qcrc8B9S3NsDBcO!lQZBDBQZIX7dX2Xg1bor#@;e`iLF&3;Fybu_&pz z|F>+*0nNXjQMh>a13SK;*E*=hi^vM@&$pF}Owl;zk}nqaYFs-?Z!zFa`~=vlR%fIa z;eg$Pf8OM?=5E-8Ai)gdtm0F!wy?jD#wN2}A~L=Gdx4o1RL^DPViQm*kF!96W#I&s zt0@f0Wt=>QT8)gZYq2iBJ>A$BbCTRSAHey+00OInT7oXp#MRnsSN)LewzDCXXS!j=GTd{*e}Kw8+6+Luz$W)NK=Z z${z?jB`C;PuR()lx z{ggUojZRzPsZ7MUTC&=VYphDQw@}dTg_}njWVdy;)wM{eRXs zH^9;)dBTjPhEjiVLXT_h6hnx(?K6hk!KeSoRitDkOWru6Nh%2!z1b%Iiu&;i)_&PE}N{WAKTNB zlwDRgb=lw;x4pwjWA`i?y6vfJ z;C=%|ine(NrW&7tLi>vm6j8lEgk9+cn| zA81N9E;`rn58;fSCl$r`XwHS}aq`gO@Q`ogA*jP0=2GTRjGC0g_2)P#P=}J?lI^Vi z^c?b6zC305Ka$3|9YAQd-}eIbB_QY?qDehTe?TNI8WzWW`uG-Tf9Pt@`c2QQ&=pR{BwG zp_4-jPZ$=P*04`R=R@k`1f^N62Cgoz3vr#ZchQDYuk#x~RRgR?B&J3%v^0LWX?%Fc z{!g~+K3a#DDeqRzY_K%b=j?yrZ#*%`3W!BGt=um{U^~i*9i0`^Yh~&s7eXMt92gCP zdNoyq48xWW%AN_^4Y6N-KqAUC=Uy_cpcy4PHZj@$nB8YyC#?|!Z0$c*&W2w5Svkhf zPBj#=$rZ19TznIDPDBwi>(AD9Rk4Yk)hl#&0e_8J8HmsjR0N=4Y*TUh)9yX z)U$cV+=)^UFr(vg%04ZO^x-wIwsHg&wvQ05v9XSI5@63!CXjz0p`jb)Jf?DXSydB? z6_vL?RQhYV@c?TbzbB&Ou&lOZRSA*4c`Kn}dHWROwjzlED_`#V^W|C{PNIYLCJ&uY zzjhiwPc6L?sl|Q~$sSbeA6a~;Pz>?0F0RO;R+e@0QGXq*!r-2piX0neb2Nhp4qmla zbow+wIBLT?PK$y^ekb3lVR^jrow*&Q3Sl`9>?QWOk_A%_I;qlYqv0sc81W*I;$2sL1NtSACuu~y~UHR6Ags6acU)JBz9?A%rw5iA8T~#8H z09x~5HzHF=R-EYGS|hWL(*JI&caq{ftPpm6-8NmULjV{`a0g>ZGaKhw9Td zOs|<|C60G>+@wJkg0bH4soU%4VDub|k#kdeld(M$$MuY%60c^D*gY6pB9OTwyQo=J ziA)%nLXr-D0d*ZH%qiIA<_D*Wfh>>#m`@Y3X?G~P7*KDr+3{GaPWKdhn{8W#DB$4` zWEqmz71R)z*u0!?fXY#ww-U6b*|;7M70AxBw=v#TrMZH1r=9iQX8!&{%Lo9QUT;G5 z0jp&g3E`oC6v$^;OfQ{jqIzZ5FmkexF^{+aErWS&kom$g8ZEY|&73qGAhvL}5eQzj zzf|YeB!mDFj7`u_&ny~!ZWtb!n1+6`!jOp}cP!3mkkbB-|I7G}uAj^Dm+Wbte>5Q9 zMoxB(#tR?9Sl;hv;8ZfK3JYOQ>hk+@fX<7r>@m1z4^O0DMlI zmkZDhZB5?zuhzb=rPp*O28m6{-*eZ|BxfH&3Hdi2dhRz`tNHESMjLLUDPGTr_o{{&PXE#c`OG-$4jQUhMPY3X!7?sm^*VY84V!p~laiXg&MvJ#FA zj*Ul;K7$HLULflfqb?fY^rY8&d3U7N{!XycwYa-sWOz7Dx+M~nGHSC&b_kBUl}Yht zt4zZkUF3`8;OwrF&0RyLsK#gQTw(%NbNk-+#~6_$o!{INp4Vi)xr-+1jyHfqjHF(V=w5>L&g=dz9$ph zY__nAUkVI@o-^pEtcd|WePr;;r-%3wAV~8e!t}?oJZGr(ZXK(}5W}%&6Hch{k+MUC zhK&`>FeWuRj+7aE9PQJfqCi2*?Ptv3g{I>Juyqq8kUd}Z;-$@(I%5lYT>3XVY-~0o z&t&;D72ALkw0F%?L(dV|%c|uJLRehu191?C!C95>>&Q)V)0;el*8@Ez@Na6D9B&bb z;&2tu)u3#H3?Rv{?BkAW$`ftU$u{m zb4nyBzhwwAf?~lsnyf}T=rFElDt^xkY=}9Pd2G^fJT9fz^^aBYSW&yDkP})JdcJpPG=YawB+p=~?ZrHOV9?MZLze9Dk2&RvnkYFQxGqn_rjX zV$-H>vyn{C=!%|TsG}{k(t0fpD>t|b{7jZqq@hl$vb+tt5Bmq0yDnW3wcC^xC5$J{ zo!u#xK{+`;Q6+E|6AHml=^RZ+&x}XB`pfYW^Dqv8+KH-st_$ss%4?$Oe5v1gO3{{O zYS#VwwFCpfipN`|e+~ve;qkihWF1K)-8>gjuO~Ko7)`#QAf%1C1cL7cMaS|d?0+Y? z5870laaLk+g1m-jWw>;JPclY`w7^8m(Bx1q!fj=f9SftHcIH->?T=B^$=np0dBE^Q z)T&Q~+NN_EbIi-eK!tsghN#toCTPRWtot6=4vw|EOMii`+5{*ScT zDlzE@mJl}nHA!4Y^@`mDQf}Q%di!BV$i>`7|H{{xlSf8ETPW|>YqAIIUl|Wvt%fOQ zkPsFdRBW9rmes=Ea7B9!9!^-X2K8C1o9qdU1|kJWW>jt&m$-chYZjC+1#UxoEiX>w zWeTQr1064RvG#;_MQ|;#4GD{SO_9wY$(rLZ*dav5)7$3E!*fHkeUnOI&1PJZ%p*$# z$6w7OWl+Mt<{-FT5j_5krh4uVF64`mC$LId>cQy^<6>FCn`U~B9jnf$K^M$E94Obd zOuBQGC^Qc1nY1Q>LoJ*A#2^tC%!1QH@;G&OB>j5IyAYwGh|bsqfWx7kX%7Wu^VcZ} z7%o|6UKDExb;)A;6b;mYfWF(MwaK%nw-Aa7>DDtm+R~{;g4&ZquH%BSNGpmTGNdG! zcqC`LO5Ai6Pgo-SEU9B*+rJt4S8d0Ir*O9&H`aaP+KM(eMy7P8arsm;$N?9BO*(7_ zT9*rTPs(@B(Kd>A>qU}n+4<l3HCfhF9jeEB#U;lD#)cW+Ss2R6C$*2K^X<#VYWL z0;@$dH9|n-O{Y(5oxDnx&!)y-h5?G#b8J7G+pIz+5ajtrp^whEo|vDKd&A7Sjf#M8 zsR}i7dY_Mvv_d_FkJz~`KJMAGsLwP1Hl|ugc4%&YN z(aD=?B#E_HmT*Bi%cQ+mqM{NodqfzTKHS3966AR-_U7ai3iC`ZAGU(P2TWb_{WWj` zbKAp~eX%)H-Ci?BIX@Lv1s1C!iq9{~tng0STPXzray5}{5%4-y1R<-8VQ~ji6n-Dy zH4!;QJl#lG?qD``97TlZy2232$sTi@JKQ)3OIDnq33=(JZ_TVPAoDx7dJmPaoz)l8 z4`OOC^*sfnoYrEHEIw4;zAnFMR8vP@#Q4%0mo)vyZBOAn)4@%p9ovinJWDQTCf5T- zj|LB*$+XlLkmEilc7;3oJ9=^m9^U3EYESKHw;xg-PfYYN^FB@cu__h_CEkXgK;sjm z*@Zm`W+4LKQi-!?!n3g&%E+ zs=5$;PkN>DA|!+w<_D;;`7SxMIDxHtfKol%)F<3?zI$Mbz7+A#Bii}d)hmCxv?vCuyOz{{&RsY7tb|oo>N9@GMP7W17u!G zwne)kgTnVR5PJSdq77&`Cy~EWdOShUiHx;L>J88T~GlIK5?Hg&ajI0TLEbOyk_%)dagz8`))_Gocv<^}U zw>)!!e={7%N~9ZCO*(-8fPR&ZX=oS#Dh3k)&JdXy)a8ZZyJ36}qFN+N+uP03Kxq*a zg1E~#`XrQKHNQ^K%;8G$lBrRI_9IWLg^sA@RdTW{A@VC;W%{yFhux`xd!aiS?Ri}-p|iaK$&djh9pD9z4RCan9`LMd0Fu=oy(ofMCw<%rs3io+Y6GY% z3Soz)SemhN**g~h=QRUMzElzbaCu6qKy{=}XuUA|ku)n*}TmlH;N z+eIz?hz@&eAp@0VfP_Rex3o{gU#V5)g!#8WwM!^2`ESrcnoN8un4+J|#-494bPTwR z0JHU(n5ERZVhtxhI(&LvK_vX4>R5^dex3>YV%|5tV)x8115fNd=gs!?{*5?C{E;Y- z$PwVtlZ)RW5P?eJktc}?6(_? zuV`S%a1h6q%#|la>ABWk%26Ipzbb8W_GvHjv6}ggOz0%^bq*}Q6 z>95GAu&w!J@Li5vgC>XmN|CSHT*e~2J5N+4P7!UV~n|ydJFcL)8 zM)_fuptbKQc3|5<8=7kNB6(id8=R>>3RC`3qJbzqIH( zEzhpi9$XUZX+l#>#Y!Oz{Uub@06G-4`z+a~wM?3RwfHFkUSMlpq;5@QpRTv3!UaP#lU87!uH>w_>; z4Q_dZ_MLo?TkE5KjRVVXCOyV3mv++(fpf_+2AsC)M<#x+ajFGEK#jVTWJ%*?pkq*# zI~-@RB+cNF0%=|}Cy}BxQ3yT6!FW$tYCjrMxePF7VjJMFU$?2r4igt| zX+74+jzdSC%j@r>DKbCw-AUJUPDj|Yh$G{N`Fc_na6M~78!!NM!WT@ys^fC{+YmqC z_UJ%b#}vHLQp^_vkLhkUQdw&Wtf4yyW+6^sWf0Q{_oD8jg!uwxtLZA*LIx&2k*yzu z5?x^*6t0~S}yN5|!9fc^f|} z?ZoI_SM*=zS+@1`HdvfFhU{-gFU9^YNe&9qNd((t5nhX=@3M3+=2Npb z*f*+au?CtBNvJ+sKa434N`VY}Oy85Zybnz|%+x+}n|^EltU7}oSm%8x*lH$e1&IVF z!r(-O0kp^4Ygd^aKUy8rs$|x%41Ga&{}V6}5&X;CYig;c0mvpJCoHR3Nsk3*UVyu<(xebfw9V|MiIvhPEJ-iqRwUFk!Slqr?gNc*+zj2|N}!TMQpa1K$yfl_a&hol;z0i(?y0#|Q>V3b5{AzQq|T zo?3RDP#pSd*6TvB3yR6sVA*a4ZLX~R5xh;IhOl^;BvNceJTC+4vmZH>lYeVFLTX)_ z!rA3f>wZ3fhl9`7cTbq|AtNkt24u?;-)7dmhK7a?a+^W9e+5RZRVgF8ySbC*$~c~m zzU-fWUWwHzE>SQ6&f4Vg4%kYnnYq5e>_a>Q3Zm9Au-V_Xc&dBkV~T+{i^(vGzZ*|a zaWN?VZzYOHowW%ud^dKIiZ6k1gVMJ&#-}0sq(w1lnK=%?(Cu5tvq}xJhu;Zv zVUI~)*NV*z(*gG(ly~bTDhU-#300&U=HR#9PIIp=5it> z!ef5NaEKX>G*Vx@DJror{Z}WP)ThpI?@b>u^#6-SH{2Sc3Q>d|;htV0xo{UZXwY;X zOucBnHU`sP;p%u8q_NBs`*R>M8JN}(Mx2arZ4BxShCS=XW9jmPmS#AIFzRxAaPYFg zg&j)nX~KV*UXWZH29SKiNnbhw!^I?ltmA@ciCQ0#t*NX@xThUf2KCGclfi5$#u*(S zdazbKkRtItp3qJWRO+0JpMKU-rb%eG#{k>$QVWS4bLPdx>0<4jCrtP`=UZkqtC8Oe zi=xdR!9SJc9c*wmau4z7Z{tVKYWYW5}uN4l%PVN^0{a_15vfE%K zcqokP*mR(9h4zCiuZ30mtAV;pO(Xh+QR4)qGUQGJl|`XffWA>x>B6n@Ma{bVcQY@L zt`C1nSZIIM-g+pHA4Zmoh$Y!!{AVWIHU#dPJ7Yk9)kA*WFIsu1%@f6ElFLwi=QZ0v zXRFG&k|!MDshzrdRDb=(AJ?@soGmWY$}FF|Cl*}XFBc!z9|&FcX7u!x9^V}bevmzz zu~;-n;4L2Q(bO!X*m|^GEUV%|jvid$gswqyP=zN$2P1hi`dI%dM-Y}C!=8wdrb*i8 zhOonRWM-JV#t2*LZ5+R^?DX&$ipx1j3pX`0{x9M3PfJkL?flU6aKA;va2Aou>Sb$o zS6$qP7oY4m#q*j}5Cr;u?$C3e0kJ0NpKQfF333zk8V9qaG(= z8TLNykY=i(^+v>u^RJe<*2Z9TsyUm2=*=Ut*p$MHsrQYnH!kR>9SEG8zOrpu-WCLi z_o2p?8t!*;&eCEZDiB6=v7HjHzyx;T{4-qTXjD(oHM?0N&}w0Y&^V67IczyjNCujT zS;rQ*bW&-SIY({0gs2E2zNY>gg2I{rp&)S6AnCowh1Rmv<~|6A?07-QVsA}mFH`k% z5ZqPEd_>JhSBB*X1E8gAU|$C!uCc_WbUGNs(ASf&oopmdMAT8i(PrucWk`jB};JtMx7xNQgqb-1`Hbd5WXk&RbTWIS(m70s(JRG zqmj;ss1{pi`%auhI5DT#e_aAI{2*D&&A?FUx2=ucQH4e z6 zaNz}L_wLB`b<+Y-qMo z>Y+iaAkKBiaZW%IgsMD%=Ty?>Med6oz2Hrt&QkBZVOuv$Wb=vO9xcilBIc|??rvDc zsp1|~#K6CGTjn`zQas&e4-8IyqQ~dwGA3!s-Tyo9hP>lm1X`zXz}+Z&4-zfraRfE3 z@4+C_Xhy^_t+|Ib*UOHn2*j{zt&(K&3D=>~e!C9Tx^7_E349Sk38*eggEpgsYX{I^ ziU|igSd!-lvG&(~t!hnvAeLlL94nuK7Lr#r2urWT8bk4(S3T!i>*vc;%A4)_K#X?R zGqiG~iOu=!%TCs{Peld$bz5yKup}W+V*-c8I?<=)v$ABL>=20uFWqnyy4*1U_<8_ zn!4`TkD=>@bo;=}Sd@BYDZA8?)kcF#*1UAs;q;A-s{=~$VOvCs2L32qvXUytQYdI+P`&1dVd@NtJ>!tXA=3|_rEiN zZH5UO@#gxT$NuQ%WoD*1WANHT;M^?2!B6ZClls%7N$Y4|7)_N5{e=QHjUq#q?5?JJ z$-WkB$R*D3_V9vBKPA6VgB{zYMhfywh5qkv1-QAEcw!ZiLSayi-e7ZeGsehRICmG8 zvLKiucK;Qz4CD8lnVy;$2NsK3OB1)DlB(I{n4XTC-8qGw1;RQQ+m=_# zhemf`Q;8esy9SaYzS8SB?6|pQ;%XTJVM{Ho%T?mr@q<{h%2rE}y1vAo6h@Ijt9=>i zc0tT)PP>@pZ7WFCH>-B(6$GVIbnVoIPF#Y39djD4J|>&1QNyh2Cc9ZM^STSBDA6v(egGv6fD$L!rtr8&XxNT6pY~n9e~{j7*F|tDit#@s#K=~R!O}6zN-#G&p`r{Z znd%=7K$D|xF(sxxuT=+93FxW;LD&!H<^ZxatGTuHrbogX;Yoyx7s(PS!X(mK6@z{g z_#PwRrKA%Mt`uKMTxq1KQNg&`Q3z4Z_MV5jQicsS(_75P2Y6jVxjxjN;MlwUc>qM# z^T(}G1c>bG+Aux)26r4{UR zp>|2qn#B2J7y@Be)GvH%4*m3mBmL1KUO}wt8Q<1rT&5weuQ1RiY|WTD$EUyyti^?+ zL3EIKW%SKv4D>E==uO14hsOoJGKBgCVak7E!$yM1Zgtpnqx9W{19}ssgDv3cX$|l$ zpU8XSUZ(+(8hs5}xL?z(t*SC*mS%Yl{XBNTxVCbxjrBdIt%#fPkAIYIufq#J416%z z5ecEeA#!MNp_B{s3p!iwK==D!n|h3F6W*KBP> zBzOZK&b0kw7pGGWLDXYYpHy2J9g6 zEIAreUf5Nz=A%K6It1(vn<;@EEA`26eH8VxfL%APd$3)2LYU|#!vA|n)jei`sL;B3 zG@Q%L=?mHoWAPYT-n%}<$B9+$0vb-E%DM&G8+cI{+K~9u=je5V+cVOdYC)k=l$n2b zbw5xVPYI)p2#FS_iK7M+H)by%m1l`EE9RaRzV~6@Qf;iMQNy|&zfVR%Vue&-Tw)$ z4A)^LZIuB;^NbjTK*_BTY89fbsDP-F?Kc8JwO|3HX$@*AmHSw?_m1BFBFAfBA&(6~ ztu^HF^M3E`Xq>MBi@FNJqCpx13P3SHL#z%<`)50?BgqxMc;)>Eq6&fx!sETyPD_*3 zQtAfj@Z&K-)R1-ZLERR(6q~kNKC(dC{xr8b1}Nlg0tS0*fo{z8;+_?A3Lt78m^#n4 z1*k`U)KXDhOm?Pl^J!J*mw2D?6?u(1O;P_mbNs%+mTS~FkT^D{I5(ZIO={iyyCs4} z76N}J)~m|23%9EZhx4yc>?Q`5FVm>G8^*asJP$t~t>od~}a1 z@%PNImGQl>+y8s1&<3ub!b2iOK3XcwE?Y7`#JB&@c6A&*Q}X6y!ow&Bncg!CK5f$IcY;BSqxH|0 zqb^fOKHLu}Q_N`SD;P(PkPan6v9ZsAOWJHUzs9u39a?ZouyMuj`E2T}x|sB}VY*gm zCj-k`_%0Y|k_Y5i?j@7q9*-!eb!xv_Xi3_&?lri?>|C7%DSV1p+ik&#Dp{i9`?qT~ z!|Qj;9h&bZBZ!sb^Q)$KmBs}AR(}#&ZB-orf}0VNYt|jx<}spVYSftN=KG~7-=JI7 zVW_%rck;t->;Hn$GnJ@XSDIZ(zE%YZ&pqvftBA1!O7|3a2Zh5OoZ0CaQ2?h??fq|~ zhmd3^N$C9|vQB9LUbW?d+Y}xq-Ms8160GWQ;9_o8uQHAMAtfa`0CCBB6&iWCjUk6K zF>d|NISoTjpQ2#m(%w^ZCttgm+Yo520QlI#f?CdFoD0mA+&bZNz(-b@a-Wxd$~6KD zB<*$q?P6vgYqU9#(&cS6Z~Ii13u@u#e)`%=tVAKHMjcqG{uxYbPgZjVHfFrm)Ru@rL>At20_}Q&8Zx{3V>Y7G^99Y4ba_ik%#vMgUUV4MYwK$p$dp|2>fKG zEXX=LuxU!&6&noAe=R1@KJs=`?um;bY5y+wE;AAX2gT+;VA0LSSXHX=Mcwt01iKXb zxVj6J?l@mVTor7CAfpyn5#j^WJQp5ocVa;B(Idl-cCiJzsj#K;5)k47OJ~PABjUrU zEE33`QKfEdh`B0!W4|<5g<|W>to}euP7(TypeJ>X@C-5n(Hn2y(u1QKodA?Jtb(rCv zl3Sl^Gj-K0){FBG;g?T-flpGS?$~7GON;Cm@w(}@&WokvWF6W%@811d&b^$d`XgJN zpUn3e#eDRG8IgpoAxWC7PB0r6=or7K-qhl(S*|PP4jV|tXdYzP+rzR^DDvUJNi?Tc zOqP3CvTz8P1rqu2=Jw~CD}NTflI>o)u9jexqQTG_LP+wDuS>$dsFXUg1tQZ8UZ$5Y zpesUr>4GFwZ*-kjxR!J>n%D3e+78`Q`fl<9DP%AWTyk7YKI*s^N!IpcFjy-}R8Fc8 z{&3eZKBoc#*gLNp60?k!c5rQd;(|o+9@A}y8<>2y~%=mrAonV4G56>OdN?6 zfSq&stGiwt(3=4a22(7vjEq6Wax&yT(|CmvjK6;N+n_V3s-SkU`f@S68?Sg3+pY3*Tck(st$ktgW+nTGcT|g z&ZugTWs9~OK`AnQzI`mk?O1Y1vTqYK&|>uW@M@}5 zUU$pf3uoVK?gOk@3w&j>gjb^}@W{PqM7s^YEZyIy7tQsKaykmpi6ZLASZRpvjWjlJ zV*o<2@oaAOHva70@p7p7bN`LzOjU-%eY+@WnzP*L?yH&Y-ry|^L8AVq#o4M!0HEE2L`Mr0FpEiC?3MpL}aPIqa7xkXhs z4e|(y2B!GBJREWB0h0)4d)C}unHmLolqo5^hfQaJQ$RrwxODc5o$dAW!JKznMvUL| z#6Q&izGPo1bG&Py>hPi0-t^{{EyfSx_iErr)pEM|;>(@*vM{iZYFNUvtJXBhi=HOr zoxZ;$m#80PT79<@$TL3#k27r!K1d&PSdau;$^5|@#@?T=?pZoTMLpWS6Wxy1<+@>EZ zuz1$Wt!kBchA<4T5*NoVU15C-VQtUBk5%vb_N`W&r24bxq_b}uY=BXz7|sjx;y1iG zVL6%5s2xpV9#Gem>x0|a&uEs5JEQX?lNQzMaTuWeS*D6=RRz7!7ruA~cm^R?u`RT` zcX9n~FSXS|UWNUeGYE0xSm{;;ysO`E@jh`5x+ zd3Moc=G+rssGCPY6a44{cI>`ZcJ-89=ytBwa66FxLC?K0pa?P6dz>^^adIzSzHfCG zA|~*G6F)b#8#d!wR9J-BH36X9&aish_X=)NeHkU)dGL%MDbqAr1tXsvK@-Ch49;%a z;K;Bz>f6AHpJdSkO;b6|xIGF#kv95^B=>fpV|fW8^ZJZ?9M(dKnFXpB1!+{-fxqvm z{1I;WKlh51h*+o`v&mj7ziSe$w&dp4$|+%|%ahdZXmoW@`y3# ze`nXQvk?7~Parshok71FDoSO+!D~~7h5K|wzr$}7p1io{5vpGc;eykr=b%r@$$B%a zfb7WL!&^gi#{Si z>V;051lKD$8WT-4S*7&*qyj$JL*cVQ5ngB0FFNR8l6yztq3t@utA z-bmG7tL4ivGAIMw48@y>(B^&nu0ibXhKFw}7Knc)M#@T+2AIMFR&mw(?5hJVCAqu2 zV`fb0p$>?+>f#yQ(Qv-yA>gWKx_lfe%(@yTF{O&2-B+JwuP*Iu{o;UAW-n+=Rz6L^ z=Tn1hQ5BOF(MEOp3={86xGNve{fhLXWmDpTTw8*)@;1xS5-Vi7(RxQlB>+yrBtCw< z7_oN@ngxoXmR!5J#CM^V1K~}EqmnEV!~I!#x$viTccg-*4h}5-HA*t=VY7RUzS-D? zzGrh&*4Gf!xk2nL>IbxeImi2X;x=V_`w3VfA}pSNx@~)2^ZsSAx2+b*-AsdF3Iv>f zST=apA z3eEJ%x0+SVXPr)=F(km4uw)1Fb z?x}W=q3(+5Rs&mg)Lb<4d7|jtEWbzHE{yr3#gk{UMs2l$s;s=OG{Q$C05)4Oy#sK9 z=2w|f{67+SU=`ZDIQ9b5)X%CRiI`LtDCzHYVTfW_22RAljnaeom$ft&Z4h!6qHK@< zE`TqP<52`jyeTnhfGP|e*ApD$PL4h~*(O4uGn&D+>>sbyk6Br(k@6r?(lsp zo9pZ=1I}PjH}%-&b9S`FY>*;!8Eu*1(eQ0=mq}jy-xcs=FXx3PEsa^_P-Lx)dNKo{ zc17NyLEiY@ref)^{na}4zrq3)M@{yak9L+hfN@KVbiq9Ww>oh4CBlu`YiOOGm^wak z+1n~4*36|7eU>YV8uFi}Glv3qTV!AJ8ntT_HX=CF)c`qdA5IwqWW;k9kk05@%t-{~ zJTfEkCuAR`a%RBREc(MlvHg&1{$0ebG&p)M#XHmxf-fEj$o=5zAn+whWVs3LbuBKm z?(M3{gnnpZzeLJ_PA?I25?PGtx{>l5%%2pzVi{Ri`p0>(SS}m|5hjUsgVnpR1$_Hm zxcWu>Ts{t~XC~k7Lh}vA%M2_80^sy=vwE?9Wn)kQ$Yz6LmwYGN~a} z6J_eqvuQ_mhawnGNyM#}&A%)4Vkn?vK%wp8a$CEmVGZ_(ZiFdd2pc;Ou2r(VTC;Gm zIL|Y=5frd4Wv>hTEm`h-irgd`+G0rZ^1cmSe^1WvMg&;}X`&A~pCODE=%`S~*`HuJ zP2Gv(loKF+$G-z|YPZ1#MzeVm^YXX7Oa8>f#~?a+rs`U!4Cwi2oMd>nA~t1WZ<-<5 z20JSYp1nn_yCovu65xTX*f@%s?Bl*-b8w6I^+I+&a7?LEv@zEoLpF;#bA;cIP|U@J zKJxqlBxS?MczSEG5D6&X0Nguz#8mDb$m-A$Q^%AxjjV-L!s^Jg*H?_=0g#&FSg!h0 z4BqBtD?eVvapHv{W{jwW$a02HYfz@eZM z+04f>QnVXbK>zs}NZCvNXA?LF?x%F@?)Q`gKO0-0g0KAa+~&@~oL$5}LZKmcHvru> zTRE03S?w^6KcBPkfe$Iia{l&7U{cc`a+r>D1G zxqX9XB^&&?YoUkiqEpOSYFl%aAWWV@@yrMe$YDVKqL+&tM5y41ss(-WNK#A8VD-OL za;e%SUO~c@>og4=wFV3WDV|}7l`aGuNve@D5Z$gnmU`4 zvLWsL-cm902Bht4ZwP+AClQn+!K9URYe~eojY_}fFQUv@oPxTb0zvPDZ^YQ=hiky~ zPA+V|R5mudd*^eq@||W!?m>fILqDA_g+jC1lt6y?^X0!(Ujkd;VAbuz<(oNyUv9wD z_+q#=DUy(y=|TgNH%3d1VRl=ryEbmLo6~Ig}!(uyBxn^;{#N>Bq~1tEAMR5 z2jq)&lfEO?a;X}=o;JjY?an zi)4!2wYYvSWx}h1@~n{8>2s7i6-u??YC-`2KLEfuw5soQK^17w)@5mgN8#}?9WoKhqZ#@pON zdMvkR&6!W|59cy3k`CHbP}rnaxb(U)#EA}L6@Y(~+3>G;EWWrEYK7>8{z3G2%zS*# zweW~jObT$hH`L-wv)|zNNh2?%UZ_v3I01y~F_la`1W1!&+7bEyRQ1IzEU7}mh1&gx zUi+aLi7(4*3c6ID55!1a4|i(xOt?0rejNj;UJF!Y82W*=QyVSmmI^OFQ`1AWiDats z%QLNBjQjFkbVZLmW-qX}sUu@m==m^+b4(b7)^M$?RKH*Y#oV?+MEsF5T-~2dd%8tX z$)1Qq3z2{k7RfWR9awVS=rPGC)XUcrfZ}b>MPzfpJIE=}xG>VM(IB7$q+0Us$2Dh- zGkc51p+8B3TXQSDgID+X7N3?}y>;cBE9XR$j_kqJmP|Nsr%+B4>|DtihwsgPux9H> z6V>fa#1r9yca2X*Z%-~b(iMZz2u{Ez%1QIkRVk0If|(~ubOv^b`Eyn+t%W&^U3c7P z-VRgpxl&+3L{}XpWxR=q_wLl_GoC~_q=rVj`N|1qIt1i~bq|D>5W&t~xS<>tf&N(W zLH!(-hZ+F?|7eo0&2dBb?#Vd(;2dq>32Ex|WB0SO$c~IPML*`{;uGPQR8O zqidAQwPFJIIsPfZf{=NA%HfiKEgBN7HLSuYc#RZrJH6LSH8=deha^zFbZcbnv%Ga~ zDFLJLNNb)K^ALFeE{L+vrvD~jJE9|A4@6{u9#xo&x8hx{&*b2f~0v6|)l$%?UcNLkSS=u6@7 zOH8r%=B5NViqajNW_S1W2OABFCd6Ew+#UCtMhCG2?gA3^3G&^_#?d%yx-t%^4&VyH zpbHw&p+5!m1>tLrcw*RIUarGDk^Elzv?dg}pYm)t6LQT!F8+%dGKglIhKjaOTCcs+ z+Czb((sO@DOK|YXjxyciAS8Zx6dPq+>=@lDj=K&eDnV_gz?!~e(GVsXLX<=8vH5v8 z^(!LV{N2AC_emh(MGk4jL6M1q`6#iaC56!cxW0kf8&Z;f0GAmxN@F}%9jIB&k02;B z#6Hxvt(>i&;ccclvCqDI2KDp-=hU(s1`&X{C=7=_aza85fLNGsH&24zsjTu^NafTY<;9Ctd z1?#m=fYYPaLiPFAOixKh8CC~bOXl-N@k6c;(*ayYN$zGc7-EHLj)<@|%|wP$67(v=FbWB4`Qz7V1G`S;~jBytc~)?{ll{-ADD#&5a!*bB{L1u$Onn}+R4Bh>y=h8!`t!e{`3*d!KW3IeB6`%z5Z z3lxW~6@Tb@%P4QQQFhqx(J3b~J2Cclh0Kx1dyi#6wjRd{?apz~nh%R+7ymTrUvFoK{DuVh@9+a;0e7HPe)GZ@9B+m)fz{Do&apOAD*Uxn@;;&(z7x8 za!3ftTLe$8Y{ydO(f{jkdC6=tgLqq<*VsZ)dW#oNa4~a=&dLw5=pn^$w4!E(_b(DZHm!mTp~I$0bX{iz=Y?yUTyXtluqB&#u8vE zD&h#_e9Uy3Gra6ng{(Y?i49Q`RU5S!-U&i$t|m%>{wL*jOv5@)r!x^o3YQ$O|I?z^ z7OTd+xinv?4CWk&VGK__TG1^KpXS`hOtx^(yiru>$Duh?Uze-O%o#MPx^3S1KI`<{ z!78gDDNR>qwcvOACdq0tX04)vqHyv-!aHBpu~+J21Azs-qJZ$htic=>U2iC?m%2si zHa>RRDA{RgT=RW3d3~Yc@WnCM*B#GITVSaeiL+U`3{X<{7yyZ%3o-s>Nt`P|W^z2$ zhLfE__sd5g|6scccoftgcd%o9+|ZJ`ADRE;p99&F^Ky>~jvf$(XZ2ZFtn&+nlzU07 zHwPz*ua4Qc^(VI)24Breab~J;P-nsAqZXhWG5DTpVr-K97I%;ZSQtTVNQ-?pbOmf% z&1!=`7q45iEqMbVq%Kw$oKy$Ilw$+CY{T;wx(0R!@C(n8g1KSOHV+=_qqLA27Q+Lj z@y{Xx{7$Va-py&;Gb9B>_eLai-;@VbzLOmeKwMJ=9UW{D=`#as-vWQi@+aW3skxA> z3zy}=GHl)3wVYy16mWk8QTuKQQ<_b{=o}kxF}n@DL!dLxl>;>!4NIGpS~@&|7Vcd- z_L&vH#mY=o4+^kMWIU_CX-c)Oydw=2+po=QgGp=dUjAQQ5YO7?W8b@(Cv!5mO2sd( zpj)V4;X8QahP!8$GrE__auryE+S+pSJ4ZOmRaQ=fH2y5Cr5S+0-CL5FC9zS7)fFPO zB;vBIu|^E$fvsw)&9;m;B5`nQSY?Xjst>jYt>eR&&#eVpA>)gB|9hh5QN69KnVyGo zIH_Tzwj2-j8Rj6X4d7SzrH{ik^ST5mk=pQt%2@O008-u!ZL(+ z3@bpY=zECS4pNzV2x#lwR(-Yoqv(i{%|7q!G!(VaCIGOw^RuO-VJfKw!b}1x=$I!( z^#cSX6mbA14JG_msi#x&C#_p^7yl>?Xil=o0c}5Q`HA%aYR|LYv@YZG?)LP!ldri} zA6kVGHE=aN0Al6P0NW`En{dlmI6M?H%pt!e2ICnRwT8{C_x-Svv9weBbe)_6|8QJx zWZg?ax#xR5CQsX#t8nj@;QT{%?F84Mlp?xQ`a3L>NL*rPAZjU_F>Ko%-=fbf9kE8H zJQN_}3PKD&XHM;DnO6V!#@EgTYL`)9)Bl&ndDQ$QCE>;Sv>*bC)=7D@UMHzatl@!Z zI}LuJCJ$4IMaCnRbe>5+*8u*z=Ff+=@m0Bw_Aiz7XQQ{swm5+l7Q$O&c6v&AXe=Ao zIkZ4w{$<%8i3dKK=?v}CVW{ZhJ}16U1{lAoU~It=jQAzjse^`nd`qxy`w4BopS!ez zJ^Lf`jSH*!&$qVqZa!1(hC$sZa#@ z*{xlKTomF(2bZjE#j)U}{*!=N(O`*_6a?HJpd!6%R?W<3=IwaWX~%yh%b1mxUK|+YMMi|o-xSHnA5$Gg(g}{oZSq~ zoO}LRFehPZ8R1z0=P?#eV3BW?6Sfsyiu#^}eGDqf6D^%A7`L1$wdykx6yI~${>jL` zWKOWW{={K0SDye|FGN6vNqxbN%wbdkj0mYqI{mp9j>83sEks~Jb>i##REz>hTFqPy zU)wRcpsz;N31~kT(6|0tC z-B<$~`L3s5-_Ju#=;g!oTS$+8-Ns>1)x}o)vtU{eb||Q3uaZ&~590h?4BA5j6F|ZS z9L{@VZxP?YP!|($FV}YN-p0a%M{Bx#@^$)f=me3~Y=+YJz8F08ep2bJ*crdpJZDJ> zHJ1$mInD>BtQS}A>K;XNE?8r3+O}%10@^Y zJX&l2=9?OR58&Jcf@DtmUP=E{xQyC%5$|Wc3)IyjOMQNjJKyg7nx3R1*RkWQe#_w6 zSnZnk+3`U(eVqL@YEue%6T!K91!xfCKZJ_%b~`y4K`goJS`T84Xq0&ZbM)Dv%?Nb7 zhH#ZM!vGW)?Jr4Q<#L2y4+h0U7p7K`q|zq)m6&(z6;rR-R(Dx+yUku6k{>#!dFJ(3 zER7IxZ*?1wOglgH3C{kkQz~7<&&pIhnDG@iP$Ig=_uJ7Uc!YeXYnK}NGG-FH-e5?+ zM2J4HSODiNsA;I*vx`1EMZ9>c%r7?>U7v1={NZ*8#xm$AK_URN|NKKoj+$-Y0AXqF ze*D#lI5c22U(gS{VHri;Q&o6pJ?vV$Li}BQoR8|%jH)icr|R$r7U)9pclK3-5r}4v zZq@mBOfIR{$&uQ_W2HpG=jLi&SqtHKNFVm)2|bK(E+GoSb3SO(m6Xm8H_eijNa#2{ z9LZ2JuwwQbrZ(Rn3mRArP+B@))oxz?Zo2^Z1|Lh5jFPYn{9H}a^3_%hP7@EHjoTwi zF+Ci6mLIgZWZ+sh5pTj73JN6gYsMvFaY5%svQ$>JFN}zQ>p$Z9%+xT@yol%*d(&1c zWnL`3UsfmyUU%3@(X=6)+t!gS3fwoqkS`dQ9HgY<7B`K1sF=owH+v1=hj7?ipKB}; zQ8Uh{D^4b?koR2jyM*sWbGQV%9-uS9l<{bNENMy6>VO?NnbMeu`jtFO@z#*r<@4fD zMmo9lwc%Pk_d&-Lm?lg-BB?vN7J{NXrI{0Wlqam{2IaT01PFmZcJ;f17Kko7GXkKt;cE(gvG@A;HzN(RC$dULYoTuGCr z9AjVnXd28RvZh(yQnF9ySE^G<-PRGprc~dQ5t=yiry+f9Nep7;#yC9D@rS0<#GK5Y z|G?F?4NvU+(-F@49SIfr)_k7zZN4aJ)}#{P!pgJNJ!wvGr*F*MGW1uousn39I!+I& zfAeq6h;t0=mR9_u0#s%tq5fb*P{1;o%e&klahnXGrJdwyaW7qY!A`h$UAj#mBs|I+ zJtDV0Pzay$p$sTZ3EMn_ho*+MxV)LsL|Ue>LV@`>%cTK-EH1H_bQ(o6OvZeq*0W9v zDrk1yo2jE}6&y^!Pq`t;6*HmEP@7TuN8U(BKFdY4=ibAkNsD%6mfUPY~#MLuogI= z?T*I+%=?2Ev*c&l0@29%R(!zyx*IrDUI)Z)cX{CfUZH*eCG6hTckB{rdYvMJ!>*&( zx^pDrD)^MxjSS%p!#H|y z<7e0?b<*n#o(+A6ubZAfFgTu36!6b2u?z@dN+c~8%dpV1`&6 z6RPNn{~^9ir0Z@DJE~fC&ag87%XgP&c-u9(M* z9LJM6{jcG#S6zxs{f|^^OUm)k9vd)H#=Z(QZ=OM?X^bkx@!b|vMV*kRD%{WQZ;u>3z1qgjWdU0)oSPfJ|q>OHOX zFJTh6qdwZy9D7Dld{co2gB~dT`%>~n7?)9fc*o8WHuj*lf33sxl27DmsaM9kD*h8X zd6=`{#G};J;NH`g6ifZre2-ChKmzMhxfpm_5^`fj%^05RsVCerQjA%M1}=>(7^1>lB&SQ)(kFTUHm_+* z*O~bhN1emnKX&j?;KZp}M4V3!1bj0ks)C8xlgln%6;NT7&;t$3EqlvQrkt|@5!})j zNlTjF;Q><2(V&qcQ7yvGHl{SN8aV+Xsm43{Dq4MiDwm*YjK|#`bLPTgZPT*A3G-Oh z36!7;Xi)12#jV73I0@!d1Ed9ub0U>GVWQP}bWfS0J&w$vqH;snyRVWPcS-$3S9epk z9hx=P8*Fd&j&jaP{Mn*haHixnMG0eoBivgK=iZxnaEFiJS-?IUxouv0;&ugeE+3|g_^Q_U?`{b$| zHo$Bpm6YYV@ZeZCL%k^dx9AEb&s4F{^PCmeNv+8QiiL71D^PyLM!mD2wlEEV7#3;( zu%b8A#t36p$T0}stKzl5v`n~;*6Y%REFph_kAa}2y#waTe8~=hqh#pZ!vG(!AKg$8 zeTFGd?!!Wh^F&r_QxTIuj_L$V%Z7!Lrzsug%l+?VBeh3JhyU}G5X5wOU|d=zIAm!T zwE~=NwPB5#QYf#e=IqJp_6WmF4UbG3h2!1zxC;R0gUahEStm<*f`~Xtb?Kj`p!-)n zT<6m6A^Sou8JX0`J_Kwz#HPJR!*%`$k05pXE8Cvt(pXug9p`7 z=g@6#xP^McJY(-uZ_2w*EFoRUS)6*dq^k36MSs(NwlOk;Z*{eNvD@S`C&E)(3nJt9 z=5i>lSyS!L=M6g!2bOH$HG=eD%%oHTEy!@)Cz~0X{38|lTM4IVK@O%+7P463J#E^`y{&b)%|;^0Be5`_3_|`{LQK%HzKy2WB6}rzM6Zq^ zjvhQJ8wiYSj@antxp7>W<#K62s!GbQ2;z2_5Be3Wj8?TLtiIw z*fP}?YVplstgSbiDdq7vEPlrfstci_!2^f~L+W`#1<;JkxzsBm!mFEQZ~JwRf2Boi z8diIJ1~hv;LE1WMdjcRh1v{7IS_$*Z)`_b2SVhCEW|bb=tw65Cb|c9{m=t@| z%+u1@N$S6-&9ZrmYvoKj-k~;@%z1iJqUOqo z!6!;8>v^|~rvl!4On*3-Dj;X>u}HJlu?DS`w@4qA%#Z5>Tb?o%y}c9F z6?p60*t#WlHUp=Ld_cCT?rWAB(>PXWL3@X13K403U&CQte;m$IH>gr#XHiuH`oLbl zJW{~Rx<@!l+bX>7KHnt;+z$~kAM(+zeq~}Yg>YhTg2khL-R_?*1iZf8p8d5Zk$!(G zq3quNu$e=b$_)h~gL@$&Hx4+{bqUp=pg*7=7(>Hq2zH#xuLSv zY8D)F4byV9(z-L8;Y;s$Q-o6*XnMZgYOe>MwM@oQ>>2!;c)1O%?WK0`RfK~?CEaY#0~%x{+S*Ve z$MhtJZSzRG+7(hXtYNSssJQlWGSKt_c61bVx<_i5P$9i{U_rI$i9kmvCIxt|kZ|$O zl*##s(h=Js%-62hwm=kMHh$rW|MQ4{TEp;wgfg@nfn%qXf#5o9`-KU@KIY7a`u52T zMnRg*P-V%n=Cj}v)@^<1AtcgWkkdJ;eazvE4sbnA1vS~xr5CZXb=s*B0q48W*MqYk zD&ZZkFrqPxt7*~DtiV^_a`&ldJlw$~fLH>P{ND|4;=!GlQki<+^N8cm2pd9097*8U z$7E+VW?NRGnhM(*(2zsj47^iN?;(skC?93~RFeou?&UGQK@4Vy#|<3c0eMcFJ}Nf>ReX$jSk=ppd}o^3B>AvuJ7JA!Pi=RQemsKg+TiQbSn;19t0 zNS~^i1|OnF)_G;4y_WBf@9gX^cD=Jy>!zQw-%=aNc%f<3^-wq1Q5(Bh{1nC4ssw+P z5If+7FqY{$uyE-FX!q_pAo)c}M>OIGcVY1W@NsgdH|wKLS*ov-4p^zX(M#dWc~98} z?F~x5&hkU?wC+e**o_KqXw=MxovhoulF&76fHcVW;Wa~`a zoHIb$yVb%g&y|m8%odf8nz|bHkLdU5ykhUI!f>E79bo>kOmEvlP`mT!IWeIQyJiOsNYS|3L_he!a|Z4bQ~O zS-+UX8Swn~cZt+AyM$#lkoz9oflj~7u$j?1S}J$ERrV1hw*DO;5Z}I+O=O&{`lV%X zE(DA#dNU>K-#phc)*#jKeM`tp_DcjG)1LO)(%rE!HL^f6smgH?Oaiq5FGL&Z2QAd} zpQWd1wHr469NRhRre;sgi$b-i(OG?O3$ZuKjX8r2P&eAB?SEep-2%Jr>?uL{GgwyL z`%IM~$T1p6^i3=FV)MzK7v5njhq;=OGK{PlG{@nggzX zP(OU)M3?M)8oqXWEI!PbaFblQ=NRL(%hyaIj-^(0!hekT~0yw8nQY5Cj9t(aG3hy9-$zy`i5oL}l~*pEeP=eKX5!iG3KhdTWvqMVpE=V#CMPjY9QL4}Nt(9ES*ZKXSi!hS8(yw= z=QGnTbsAn)#;d&jUCT3)X3zf%v^}T2dR zOKq)#8Zb5;ka;#yxk0Vqn-JhxR;XMHsyECbWmB~Fcr``eufWPKEYw;)x8TZJfmUqx zv~`^Uk#HLc%PRj@xc{?xEX#BWOCR3+>oZBOW3D{a0dGX{gO}Yb{xk710`k4p=WTVfD4=vz6%D#eD(4{rR>=OV354ac zu2e&phSGo^YapNcH$!w)An2jjt6i33;v)wIYzd-HdScGT&Cd~?r9qveU6IbDmvhOp zd^%HC+u8US)L*>@kt98v@f-SoFc2_TWQ^rB8M;F@oIBGp89?P>-S_y5?NfrrCK=L| zpqEVzGkORG&sdK$fq2bPy_T-)3xrLGMfRop6x5hr2W3*>Wmnitwv{X5i9uuobgYQ6 z2LpsTcO@VALVX1OxZH50rZ~2sHs7Z>uS#G|!Ta_3-9mf_BCNuxyUdSwHZ=Zq{~!8^ zt|6?WE8wd-paW!lbvOr0A1YD zTJlKU?}iG_`c_R>@Gz#~6y(;H#4KH!<9Z?ld+jS^?U_k}%MsoG+o)AAenBwNRlpCw zjWDPC{whD_w(&3CPpVQFN1BtBdA~9%$$MTDAeA#R>e6M&XE(A*$6pcGqAVrCCf5q1 zXpKHDIK`T1cNP8yN8$%^gfO+)UE{DOzh){ab$1Ed^P=voVmJTPBRwZWw8uZV>YdRq zd;9Kf49V+*i9T^v{F~r5;mbHtcq{!dMRih`j2)>zlIlJ8PiG0Y&DY`=XdQf06s9sK zAbKg6o6ezyc(w&G8tO(Zc&N3s>$R;5662UF2tJ}qeS>0xY@dk8Rsj*dIgxW00BreF z)ELpc5VO)v>;e0ARn%$qcc!4Qjuu(wc_0G2(wuN|FRSEmb3Hyw!e+}k%=TyjEJgK) zDZ!b&LVvEbTFKeM%&LGn0f!$MM{|kz>qtv+c-=dh`j`U+18RuWEq=>E^cE;d zuMcKs^wEAOG6;K5RQC#+S?M;mwRf0TP;|Pf0C^1DosbCI7D>@y45yb{d39x~0=sX8 zSj;(WeML2~6b=bDl3>&(_dp|33LV1!?kQiJrUJNgwd^KG835f`VH=tGuh)4>!ycrM zth$(#82+xsi$nqh#&%(=e4CUB(6SqLjV#kJasGZEh$aqV4NL!gM(2|g{FINn01 z)*5R<8C{kMM18_cZ5Y(QT;l3c0X;l2g)~Tl{UwyqAyaQ%-JppbN|fLeHaf{hc1Ll_ zikbO!ABg?s_X+pY+;H?m0jZLKCB~#r2$abOv@vo=U{N6VZ$Mx5yt~8(kPEy{Y)`;b zGLt6K&YVv)`c#BoNt@1i1KB_-2~@tWNurf#R#KL|(YES|cEo7&y&6nDaThSpTO`>g#?sM(g8xh^0k1fr|$?Xs~(CZ%vpd@M1%}5-E4t z72f4F`hPJnI~15-rB@t(v*!Z1V6Pg zd%(h>*Wb@TTXE+MCkHbJ!{BUVSAp9R@;baoqdg|+9?5pt(K?8LGB zS%skg2gry7I{2X#Zz{rBo`u}vf)%-sz$#L9XZR7IGgDp4>nz-O%qM$9h+3zcDvBB7oF= zGih$l<%4F%zgi$Wvmcd&`b$RB1YeVb~GhCp2bPj?n6HYRY!66bjUfs(sV5a{kyPj`|^V|S^^_bEt{rJX6%oA ztlY;kxrVHfZADIFbC;Dj*Ux1(wk3oexS7M{j*qYm9v@!LeCo6BRwKR^g<3waFyMPr zD*tRytUd0eZpnpMMjt`{9Li4@P*ONOkj9(PfL*NTI`MJW)}$aV3&~g=rD!DYG=p6ROYferJTV^#FX}PNy_2dBT6MJZaBi557>%ohGDTm5 zh{eArY7QFsoC!QI;OS+^pH}4=d@Tuhv36#El?(fynKCdi=u87J7Gq5h$|!h(2=aqs zZz!5tu&)JcX}C(jqN_WXp@~a!3TO5|8OwDNID~ab|t5_9&UGaz9gh9R7kops86G z0HSsyVRymZ_6XQvr{C@)nv8ig1q;*|Z?8D*@z&^Qh{rH(3Sgmpl>~KiEt7T{5hO~f zC}h(VL?3Y>@f6h4Pn1 zrv3|Fr_mj@J$UXJEaciHm_6_SUgo(NF1Pr2XgF4s9p$(Gd-i^JU5Rqfhi47xNNTX; zb`3#$p2W~P?Pvj274hPuDOcoFVC>v1?i7(67N*DT`Tf;3Hi9xxRx#CNC|vJn1-eN0#7Bx}ZqWk;*Ix3e`{htpfdtv=fgXwTHzQppVz~ zB;8f4tEhEhgpCU4ALdW_!QXZjr$^JPJ*$xPvK}5^1FVrNk(c*D2TuezTwf#$I}YHJ zY{LQIJ|)&zx6GLU^C_uBzWl7L42yMbp9svYz4b2UZpraXHp+-OyLV7f$L$#nL5f%z z?#6`ELN|=)b{m-lm4JN(AoNro!Nn<==# zB~ISd(q#x5d++R7rv(s_s!ZuL2^C?XhCy?qBxrqK*#R4_d;pwYA*ntng*gsxt%?HX z{8j*(C|FTzchPiAvswdDUdLf@4blN7z|6 zxiBVVe7Vm*2s0)K+I1WH9|UuyOFE*vZ#2Yj{XU4V*vU+?0kH0WPP?kY*h2a|Ak}&H z-@3rh%_g$n;!9FQR-8^r3LP$!fOk92vXN;Q0R4-dG@@hOFRz;r_{^_Kk*VTkTDHOD zb+&KW&>ua4rs7*9PD%y|qI$Rk6hRMi$&(Lb{pw1W9m@CCdFfi8(cv;59oKmNM;`(0 z;26ahcJxdFR+dCW?&hv%-0)V9*M}kfQgdS9n1MoW z7nU=-bTs*JVBawk{?vs>t{sc!0YX^vjw@H((NzhSnZit#$ydxo3LV5%532#EEVvO* z=v!Vni5|J$0;ji&WghKtyY)8M;xyP}ThZppe07gZZ$PLuFNO(=k<5q@ z?b&Kh)<Fr+;_D}>v69)gbbnH!gH zLmaHvm24w9_55F8K#QA^fu{!9?dzy{=fS;;bK#{&7!ggwdjFwPW3U&X=uUOu* zh6}8AFqvNl6q!WBzb#XAWo3#Avp1Uu*fZa3w5Fj?BB)KTp1L?J)a!ie9PFwyJ@fK0 z@>kJ)rUM`th^uyd_-wYz*7v2rk$Y>|2%+0Ajsf|By6f37dtUnM?Mtjt413ONQ{!PV zL?qJo>f!FZn%LdJDHQOGa~b_lWlVbaWxp5gEB`zneVCV#UmdW#TP4ZLltO;t=JX!p z-nsNvj&z4KWo*LyjTm+kW04!uXVmI-9aD5&t0cpM8#LWDGoO#rxg2b+MEf~0qHMzW zD5oyBiNCK_2>QSl3Aq-A5<>g(V98S15!7j1!FCts%+s(Rpo9Cv8EONeJTj~y1&Q0} zoy=AILQzd4422g{?HBE!Z8CPD(PXULJCY>QOAgqkqpp>)=_q_JwLKJkF@Zl(#zNbqBQWVSF&hq5;f)^P#VLEg_LBtg&Vs25?rB8AoJ)sZsF6UD%hk zAM(NPB%au9vcrt1-T|he8YWLH3-YTaA%nCQUyAZh0z(0G51>L?>uV>v(v(Ba7U6dg za(psoq3qnca@+ybW^~s|W#&l0Vv?NF7mxbcf@q2x$EA*dt;hyTXEx-9h*0DXGV*;7 zP%G-46mO-xIdvQDy=rnJ)3*ptK3m)LJ23FDG7)o)=$H~Ioo^$JZHD4_?}GT+X|IkL zW=YB9T~%<3M>Z;v3Mz0nT=nXyemka#;77nNOZl!1p$I=nMKxCpgj6GImj)qP-t~o9 zNhY?bfk9`gWb~#+ud6urVNL;6*)x670FU^PSpk*#xGQs=%2cM3%$X$DuDQ(LV*9}2 zb`TqK9%sF%v5V!Ak4=ePr~1DvPw!VFW|%L~o@m4S1w6TJBA;OUVxddEDXOly}`wNn)j1O}cFk}lSwy~4HbFN@5P~28MIM})CGEhKxOVY0MtP=_3 zW;f`Ko{C=my$kb1f%mmaZ|WM2w0owe9dNy0AeoE&9w45A+>L&&FtxG;%+cq#;4DVD z>xg+L?OhKz2cU>)*6T@G%;V2&(2D6mR0~~6Couxcg~0MJ|3 z-SYN{SvU&|9~c}Op*nA30aHCBaP)x7d5;3&=v1gT$Q%K)&1@GjhrbJ2ymqLTSb-}Q zH)U-U%Ua8wmpX-)WL+puWehsMeB20d)@S4DJ#lJT=kZuE2 zpf7{I^hQX9sUh&kTx=D3XPgPK#AtUsc1YeEB+S+Jef3vNVX&HOP!S7guv-NLtdFVT z2<#-0hkMczE~8FdHU99eEAVUbOoc54>#-ldM{&g#?k+$Wct!G0=tc4y-LjTiw*Ei2 zAs!oxqAaR9;$8uiDoORF&p>wRko#9=$;HqfxtLkJGk$47fmiFTg7k{_eHX|V1a&LF z48r^@zK}6JI6Ei|J)Bpwh6u7|4oQnh^X`SAM{oBirA34QSiW>cc7HWP3P9# z1bkkW!bgc5Hw0jUXJcY(81lrPW+;0KTu2NAu&F5gCTBJVfyrHoOAq)sK)anF=Uo zxqtOv><-`y0DSh9)!dxO+c=2xxXbg|*>2~!zOg3ewxy|!7*qr0o@&)3pQWs$>*V$_ ze!tsi&8u#?vK4`6=}cgx&}?$o?c#J+3_1@ZC2_MV?gHhMop~6Hk)CK=aHDeiGui?s z&>>(P5f+UR7Ch^bEX?oeZ5*no_Jh=|BTw4buDl;1cXZZl6T^Uu)6vA2K7J)dtC{3o znK9yI>E@Ms`r=nW0B{u!mou<=m>Fqqzfx*ue8$N7kYr~nD%i+X))0->AAUTy3Y^Ej zp_4X~iRHaSVQa{nT2hik`y!gy@pEiA9WOp+@wiCMM~&#l;6X04*+o&H2=5Dp6oeTZ zAn7!pe2o-~YE7*3L!bdgsyg(umA;W)F`gUa0hy~#pj}TbJ2w0_O1hCbjf2%paVM`#MZ+) z+kPDF;Uzt1I;-Bbm7E8w8AQ&D1ieBqq=yA3~}z3t;jdg#;GKf}k**#Xe~ znVy_nuJ2l$<}ak>G?M#hUMb}^m3v<0CpVB9Xu5DAAD{v$hHbZn+Z=MwDMcf#_M`e} zGV*`gmFS9kLhp+I&03~0u!q}!y4Q`4SjHPcJ*HoZh6Jf+r>$F;b3nw;TDn`|M{}h~ zq4{R7qPMu8Dh#8vM`v5s#(0vp9IORJ+kZ49mxW87V7`5|Ih+?j!Clf+ax#`$||F7UnU{o{fvE#ozZya;)7<|uAM<#y|&$4v+S0=sp0kpTE66||0d0Zr9eFnfK-(Gv+ z8%jBVpsT0V2>kZVdM&JGT>EHAxsE~+q?_{s^dry(U4qM4p0q;0h>A6Y2He)s zAe2Y>;O|7mA_SQpuUA(N8SvNYeS%y-5c%Z{Nd=G=NWz-&nP+|t>J0}JNW2>p_ObB~g;mthFShc9(5Nvx9GGAzAUwAQcN z_CokAeug(j0Dk4pcsE&Scg*vsdKIilN2U=R=^ONNX>a_bZ;mqyt6A|o>B)Vfe>WI^ zCPVn=KgcxHPqPPWbZn}G5-V;uMr?PRQhV8xwIk?7KBMfMT=N8qNvK^7A!p&X5$Kn2 zK0P#L$J@eq30NLbZY|Y|XQzSfopijXN!?;jt^f*fdeVqRf{^FMKZiV7Ilwp)66R2t z*CIfj9p7&K7L5hqGn31bw9jzK+*jM0Fp%>xWJ<6ex3BJ<<}w4`cn=vVJr!}pTM|2O({GKP--KU z6~9|aEBNw^?WlNiB!Ri?_~8ZK*z}&*y8;;5gcVkt+6jWF39$D$IK4NxZFT&`XZra1rtK>fdkQArL%n77Vp_Z8X_ z&*eC*^wPFQEfmP$3wY5Y9!UlqiT5ai|3ghY|DDrd!l=Sq%V1?bq;NeDy=i%KdDo6} zZ))mk9(J-xi* z!?WN=2`j7#4s!1ix6T_y7(Kx1ppMuAx%f&nVc@*{37g-Ss7a~wjy~&++3cuwfG)yVN#c`cM&&hx79+BbdW2+Q_Mmiq= z{!-NQAc+Tlq8Eae3YJj)f1}S6&64>~-EKp9&S17Fbs#+jGo_dTu3aHg8DU^`{(i{s zFFs!ERuExEqWmxw?x8_u;23&99edZ0RGAQR+fuDyyfXmzv$q z-iJiBiaQT&<)rolHQv(WQ}90XP-YcA#Pdr2#l-OT>PypT(~_@XaU|>!v0?wGq?B-7 z^GDqP64BCf$eRZzJUlIS&+dN|8kIzpyg+J2&(f-d`bsd2UeYSbYNz=%u7nn&B%nL^ zfAJaD1S6G7*)$_#{JhMgslT{47PCn~nenO|7(!kp<>IA`5^uN}ls{x`J>HiJv%jJb zS{f(p%QsKei2b26_mT8~^+}bG_s~?u>x8@8lh|(z$6%T~{-}4_G1bpyYIox8|C99a zES-#51{F*Hdm-g^wgh50-Gsr-)ewvBZgl``hDP`ehMry?)Wmvy{t+qUx(0_roug_^ zJfL*dDtHG18e==_mn; zniR({fmL$U8K^(G7?O9(S!U!}W5PJOoGq940sMOJp~CxWD;4KdF)a?yO|V2)u$Po_ zTim%>=|(SeHFhND-bqhCKa<}&=qT9z|EZV>asiWxFfltRaxN{%TFCoe*ppijpV+3n z$`f0>N6-N%H85x}`tBrDN(6(gGKp4pY52$bIYk!tnR@J;d-b5pMwDgbXR_RHn%?!l zO$n=waqWeMf1#F1rjdkilLdBDfR2Us602aGDE}WmIv&_Hwg3tiKDq;nPk&Ipr62Na zewx3NF{a$5v--hvgkE(|{UUT5ihGYqrmCXOSm97*XYcXvD(G-^3vV+z{)u159{7UZ zblDTDttllPYZJNizs`t})kQg*RKECCne7JHijWi54$yU?R6TXow1PB$9smpG{v}Ck zWZ~IK?6#kR2SekS#<^(nOReu2cQpeKzjsOOn6OS?$}TADLL*-9w}3d= zHXgjMT#@}=RLu4Gpq&Flb13P~EP zxOJHrL;DI`RM7GJwX6af`t>ta zo8zhPDEM>p*90swfX>{b@YL$ADlZtAB|(gOdEAkG@}t4qU@9l%J?+K0XQa4~iSK5B z?4hpQ>fX%OJ z==I~2`FYdoM$lhlVJjcS_m2WX&Dr*aa0+#@SBl3=cx5AFJ1C!#EenakSs*wkosNmO z+=t%ExK3WU&oQ+DA`sM8xg^bRJqI36k}FMwj$f0AucHCbgX6@3nCGT-#g&}=T@Psl zY!Kk*^=(6Ef%gRyE!LT1t@GhyMc*QInK%n|aR(LO#~w6TdXCH~6z=9ziF>vnl? zDCPU2h&sFDhr2CG&v*4CMdkj|!gDuuT&g=1=uf_0ft+9@ln3B5uO68TidNRAbaXe#>B7-dvv=^iWL+P@L zye)AZSlx^D6;6s|JWykXzV2IgpPFY;ZSmXrqH0Ta@eCKTGKh+AhDN?YH4t15Qrhqe zc}HllG8TKu^B3~EX?#q94j$URK}lO!el2xKO#6lkSv0hq(ES72!6n90Tm3^vBo5NS zCN>**Wrd)YiM+Ree`(?w-SjQN-or~PWdQSCcU57Z{LZ@nM40&nAOe&?{Ub1vS5V&r zwmFc7lAT=3wf!)TX&D`f%=j(ZSDfqzWB2I}tM6nQoyYR!hajXAS0&ZvkXKKl9d#uq zixdYHW^-(Rw3OM!%6-od4uclV!7Wno0;|^$U_Q0;QQV2eMWEpk$yGbU&SqTjoF7G8 z0Yw&n01|>51agYJLX;D&9lbBmJv6`^F}lK$nhvAS2XuR~+FaeaCj?2dPUlF=rt?=k zH;=H}{Bc5Tp?JOXhaum;whuof#l33xsqncU)m|JK&*8?1xhT_K%u~^YLPyp9XdXF8 zFG+z)C~@z*u%0DN7@URj6%RHm8!lk{b|@kakoiHUIru9E7g8336ng~k*FV_1GPpwK zbGWPg+vF7IcDJD!e0R+x#(1bTcZ}U|z9t^qQ$BtcicYi`9oh>(DuNPH3ZdU97!61r z3+1B)7}&e>xP2rh6uOt8@D_2NThy#z&)L*Yr6FHR9x~J2YY4m(VE(uso`7rCm+@hZ z8l7;!N_#Zj|8L2mdIVuP^v(xU;NoN%w{@@J#OaVW3Amo98Hy8mQ$n@ z)a$(~1_l981vAUVq|$>NgQnY2x~E?GJ){XJ)^mq#dr%tWnDS_r>d|WZ`%5(Z;yP zeuKr1Bu!DQas0r`P@qirm>75SdjlIJA$!~reom0~rg;;^ry*Yy5y4gyI5!yOT z4@|hoGH7Pzk?}Z+Svhwo7hYdiR;@jlTAnsG}0{giEeDx(EN<&DLeq zaHOA}`rC~(c>Ws^3n5C08O`h{|F^jXq%q5Q`r9DR>&cz(v@A5lsdO3*QO3jrd_Jr~ zszNoW^Ka$yHwHpo5gD}+dLN>?Y~qqZ4=+}T z-pPYsngx5N-gZt64Q1J!?Cc@RO}Oe3{iIMdR`g@lEL|<@joO!L*T>ujZi#v1g{+J8 zZLIcmILc>dxXeM|cjvhfW2LVhoT6obyS(JBa`{YA5x4F@DG?rh5NiVYOr<@?kT<%% zh)#2QZ@%(VUF3y)da+e+gAN8B;HZxqXjfD3e-mi zHm{I9BPd%xS7%rji62T80tv8D?Kn~DW?S5yAx)n8}vi!Z+v5fmXB&+Ixyf* z+f34d;skD-dd^!(B|s9XI#ic?#t?ZnxY&XPAaQh>%XgvZn@3)~?mP6!wi@1yOPyLX zGV1w>W*GmpuEEkF!)$AiqtDYQE*FPR3#g68s6~?alA@<~@Ir0=wTbZtV*(|zFPV7DVmNHP$QLX~(i5H+`rI+Q zOWJ@ULf-pR28x*0T#2dmX>^x%IV!bVOsO2jJ9kXW*8MY!(J=x?$&S==L@zA6=cKtH zL6vneyp{p3)-DhZRIa3;^$IpMr|Ad*a&FYhf z+UPVekbbqI5U`7?8z3szsVA1!MrKgt6cZnS{f-O(C%&x_Rm+h{JtWh10-Qnr*)edO z)i6cd`etsnHr0_lV&g%6!j{|WEcgdaF- zRv6h9t+be<_xl-8L$@7eCO*m{N>3U`1ZWysa4>R8ai<{vel=xJVaImY@KNI??-t_J zs%JWuH~Vc()MU>e`kqgZ9dZu@d&eBr?B>lX}zbvtn zd9@D&ML7+il1vlq)D{RX;)BTZnyk7E%1rr%Hfo3Mf4SchTZPO1o-#hO+|K=GVNY4;xiP!P`*DAo z(lxZ$TJOOlL-Hdd*x_{*o|TW#jN{5=3x%riz=ad%f|MSBzgrkAsq@SyaJyKV_=J7_ zY-!NbhahpgCn|yvuREe*bL}EEw{_PCH+4QW-Cit*^K1C|-yg{&xI^7Rj_xc~Q5KR< z^0P%vPG+hA!Pv#x*pioKWR`OywcDoqBnD7#kA)>OhRvv~TNpYOcfwVCCYK`yI3U=S zUxe#)?sTZx+gatZLi?2sSSf6j{!tORA4sC4R`6_)>Ir9(!)pR2iNioG_3u3p62|-`JsW&*~Z#^q&_JwE$~>y4uNwU4upNb^NbQh142O{E@-FqMvUIEb z?H9ZbeLNAhb64sD^{I8J=wsv8FrD|0)=%0u=xKpN*IGFD>?=!9P5hIhQ1wl6lijZK zoS?vnE-zR(#PDK_@yKvg;I({9PvMl}jZ`kJ-?xU+D2kxRXkKd$QlhP|=15v9*-OqM z9g1qTjVOw{3LyCvd*qbR($cmr;ddeftVG`{j2^s6p#it1rgwaRxCw!YHReCeb@L&T zcryz+=G@!c{vb7zX zV2%56=f9dv2v7R}9?aa+`3Q)kAOg#$PkNi=Qlh$%wpwWJhv8?E@)$ZKQRg>?e%KO@ZZ%>jN6q}Y~9dw1l>-}P4C0#Rl zqE60lU90Y|4Da!Y&OuXL$kkpvm>kw=lw`!**xXHP^!Uz+hpj^uo*S)z-7|?HrR3XT zO_QEW4iw#bs!nOt@VaAnHu5KfENk-8fcxKZ(=)$bArO(Teu9xDZqg$Iu24jrhHd?Z zAY0mm8u{brgFa*c0$LG`+UVh5wm{%5DZt=r{D-|{)x1a9q^dfykG!vjREJ@>v*x>O z*Z{byE0lsXQ=_6Nv|J<$+7uY_K$Hivo*?99=(d~>XNLi)ru2v#s`JI+mMBmECjX$T zw#OZEWi^GV?`bOrMqBgzWkSt-cUo9oWt&A5yH@5qHWwV2PgmMnrD_f*%LcXybNL6s zaP!$CE7j+kTZK`J{%C#X3o5$MR{Ey9SDLN69%@4fdCf`o+w2^5CACV)ooMiq`JqSDJ&p=eIjE4y$}tZ+v~Q+9+lq<;|Q!_6zklQtq#v`wM|*a_fTqI3U|5AMj8R9+9bpvbD+OiSV15f;xViY0e2qLcqwPxVoBFo?@`2lWpbmzrP@hRc6NN`^ zFOH!yKZSGb1rl0*1Np3E>6|H@1XX;(jqoWtP)d6GoiF8UidWXOaxkcVuK8qEytRKG zIkR%czX>xoNwZ7be_ETZy9jiNvQ*PG{kN+rc1+)gXX$0hCFN$OD41Q| zs;SL9r>*`E8}5awixQ6cy6h zIqnY|8}r+fJ~NKS<+N%KzlS#tx!V~SIq>7$?vg;&W6rOFI$ux3H2TjwDlo=dShoOy zR$mKl&aMvZ-nh|Q#*wyE>=#>+9Y}=b=#bHkJv;;6rG*=R^v#bF!ZN zTl(SpGOgDm;C2e3ho%x~PvTAGbTY-&bsAk(hQ|YkrqWkLzu&D_9ra>!6|2U7W2Fn@ zyIh7dZX$j4f4CXex7EMy@YdwzE>lZD!HIuCDUr5i!KE1!#A~gp`8U1)1eMD7b?8mR zDEOauh2h#)1(751?uJ70<$;;(FY~pRWrLZ-!5j6N=Les0e{76z5)d9fOQR`lghdH{ zk5ZyA3r?%{!7P+QVE>6!TJmAIgpn-Iw8b8;dO}x_SvrV1LevRa&E&Mozi`-}6nR8; zposd^;JJ~RiK*EI7A3&g5fW51%53fg$q@3v74!Ss{z*jC-k{{xSzY0!&RkP7T=CvJ z3q6UAN~ZnSCJ%OaEM31S{MvG7u5~?=0(jtdLpt)T=?dZq?EDf$@wAd|a~Z=AY-xzu z+*I*-t08yKnMzl#=?n9tX>ZHNl+I_tD|&Z)uGlIW#!%gH@HJ_0j!P|+w_j~x=qC1N zb`$o+lA6TQYfjsIh?7%Y_ypE7<+5fTX&eez&=#9#j3xq!}>Qt&aMW4FrVR`xeC!k$BD&_Sr` zg23rG6@zTSo?p^bZV^`GV~@DCaML=};G{p$345+gY|(lirFpLU@zxkg)}Q&yp6+6bnt7B#2CDKeCc) zGp9NFh`g*Wfu^rF!wv2z#GGG%c_Sn~1ZU^m)$g?wHZwjY>6>+fcj#;`Q(@pBv0DRC zI`Cu2mE)te58r`IZeMgJ8*m^mqP`joDSVE9lfj7N$bZB_;!%gAbYu}p^UhrF54O*# zKJX??gcPyLmguiQ>zPZIjtq(4^y55q*7!VSy!Sb7R8Z93m1t0*yi`^E@8_MPbO8iv zWI1#*6~wbQFN-Hs+`ay9s%bjT_Nk;Bwd8M$<3P=(V!nM*N;&~DB2%4SGnxg!hI6F% zw>P2LDe7C!P^s!_s0v34ekW*vRA`a-dD9o2kGP>e9p=vr1%W`M8Q` zY`AW`dM0+gH^$k;R4s{5;i{MOz?4$Da-r&s4CU zXJ%I3Y2uZL+Td@ptCFi+HSRmFb?~o8k%9Q_b3C=ymigHJB)i&;sw^)81AY}<#MZ(v z;?f;K85}C=@+kYzj2lodOC?KtYp#Z)Q}Q^k{8ZU-?JZnKx+=}(ES;F3uw#ns)hk!N zigdr_9WQlHkT-$w@)bARVl!PYo7AaX+Yhx)YN#|6qQZ_6md6m6!8+d9wlpn>e!BOw zYi^@<1+01uf1k{@MQVl5{PGJusbHMUm@u))X1PT=2r;*dL;eddcAjw!tZp8B6{y?^ z{QCHVX7Beqh9mtG_A9s^@>`sUn{_=Aq@G%B_G2}RCrH*81EY+Vj%PFsyq%3`S@xgR z15yYiCAeiNXX!6NdneU$md|=Bu%Y;ys~|86l2gRmX13eVnI%kdROC{P4qEz~L3p9f zmpsCSd3CvxI z(mFJD415DRt19g(3VH6H&OIjEFzu*mp(0?VDN0F_Zy>4@C34q-1`k@XIdu$t5unq@bRS5O-@yZi+W?`1@b} zhhZ93u<@5s{rDV8bdtu{5a3C0r3j=w!t*Kf`qy)>3FQvM=xYAH@-i&+D2N%Ycq#)5 zQ}b{H_qxy9yHY#3j#q=T?cgxvv_+eoEP$rD0Wn;zYWy<)I8ttomOBycsFzOJR%G!x zkUaqGlN@5ta)Z)QWPw^$H$b82n@24LhInYQb(a6>E9GoTczn2fR$i!QRhod_EHM25 zG>bcIMwU!PJ##7}=r&l^Egbfx>XUw0&qyuHzMo;!C-Al>Smt9T!aMy@egc zN^nuimT~`Mk?gdzW*o9f#g+Id3af)IUlT_67~1bBD6X1T3Qa^*dsC2c$!v?sQ%h|V zEOZ@aV3>0-8GPQHI;Nt{4K@cHys|RPeiLD0c35 zlc1idQj)chi3tXEuwP0BCFcoQlBP~e{K62RPl9;%Wq;muv`K$w%Wr?oNyGvxg5TWG zp;ak&%840>Ss;5H>dC5hUoVag2`!B_RE_D@u|ZM0R}{azjFo-8WFP7$OPgcLCTY9oi1a2#9e^opIjkV9Th%BqY3Y06G z18ARf?^%T-g40dg=N;YFcN0AxnQ@U7TM}@X$qbSBxEtH*Ls6Id$eH=vhH_h-^cpHw zffWVOX+GIh^d^Q{6_6Yu_H>wEM?lgb*GiQW)yHi+dC|V=P`97lc~Z-~n>70_rC!3} z$`yPqOepnM-3e)*jaX0i(o|pmr4Z2L(-~+4J?e|;Mkp!WvYW!3c=7tq0AtW3Js$EV z?RFwzLLW$A*@2Ki=qX=D;rJY0x|4BXcvUz+nRuc>G#sH-z>_Z)k)Dtj<4zG$4xo;8 zpfP$MWVA&TRDpG>dF$7~`&-nxM{s))3jr3IVkV&*qV^;e)yL8lLbZO>Eso>QHcfXZ zkgqxAWQF*)=$RF2>uFCUXaMOUli~V#`)DLcY=&9Qji)HvurDUtpE$|ZpI+#wX!-to zwh`Y!APQ6jS_<+^@fbs!&|FozRvgGtzW zMvqP)e<+jlLX>;_fHXG6Z;7-x6O^5OOElc)T%;?;xpd-TEd?rI4*v`Eu-7&Jub@wz zNzvc}#Gv|G3ePk7+ojxaG)_9Fz}JFmk77lPh|mZ~BN^Fsxs>+c7q6%k9*cnFkRY+KmRR5ztk^uh#rYx1>p(X04l##rF!uv^M70&=;8 zDRV0Amtk%RT;CTC=%3M;D_a*q8c^zZ{ye|q!7%C543e`NuikBX(4~6(_Ga$N^pZsI z&BTS8YDJv%4(HRqU1617{D|b4Lp&fw8EOxgWPEdW+W|RdE?HUg2)vcQ%`^H+ZS)09 zI)o{x#C-!lCo}Pp)vHD^kjq;$R_GtQ+Dq zxiCmby)jQK7qJ=yX%&p2&wNi5l`s*++Z?%?kCMh^?(3{Zm~!&2zuKutE02d6siNX%ChRelBNkfuDPw5t;`?Cgzn4^2x)z|U3FMm6b;L^gd^OcmT_Ph@ zfa&fqCbkl$h7pQ3F%#>LaJ4nEIf1v>E<0%6()-ajItVb+oz7kauqumETL;9`v$CM* z6dirZhVazUs4kL1f#3lmT`yP&sHZ{04#kh1siMZ@g}0$=f^YHHG8;z^m~;(nvBdCF zUHbktC?K}T3Qki~=R-PRq-&l>5f%O7-Cnr6PFoE|pHB1XYa>mC`||U=Ds?pYMf?tK z3-ca=@?FGVHB0srzr$T=GzL6>S1MAU7__*EVBNjox;EI#1m#QP zF^&I@SIhoOtE-cp$WK7p^HuSjB=Fr#PNpY*Rz^3B=vd8u=_A~pnDM~a7xZp;u5KAc zq&B}x$h4d)vnbyHfWe&$>Tjyh14M6I&Ay`y;!;B{TBWhCHF{Whn!cif;FT^ z=|OvH&wg{dWW`zQSj!V#oLyL7ZCf*!J*ECj^sOXsVul{y!Iiyq;xBD|peQGLEnYBB z)GStJ$ND9!2xu&ZP2&RB(nQ;zps$Tkx>h)r2(GHiivAv9lUio+SDjE!Ed%D?R}H$G z&dnQ{DoSEK zzF!OQ`54~H3AV87X~CN2rrBbI`Wzq;BFzY^lYcw0&9^DMxr5#%bsT*mWi=YvxlG)X3h|&nJ+|y-A)q4bkS+^aHuJrKpv=B#sAk4#n zSvn9a%fH6SCm&w71)6J*V#IUlK_L}`3%sBR3Mw1PX0G|ne*d<4SdDV@;cYIG)AP47Gk~?aQjMlo)f?+_#=yRmt=z5V_32bwDBUP3 z&kSZ*V?$?1vo?NKslv|@PvU;QZU_no?Rjea7*_{u@sp%wUy^iSWx5F~ptDmpa)r(u z^+w%OO&>BzHO$lq-U^fyuz!jIm51a}5x$Mj;2Z)9B@ithOHZ&IfQBanICy zWNrJ)1&sP1HK9Wc7mmKVfX`bM{7Ftv_thWHG!v=UHPbZ-+YaSAq^~9`cgw(|oM=bz zkCT)*qf?Mf0fHyvb|aZ^fp=Veh~yMINP*9>3{C-9@f9RV#x$4+Tf~#Li7a$rSlxR} z(vBu~r#qOhDnSyuE*W z0?9qHs}!W`WH13Co!?_9YH&k@YijoyW9I@0W4Uz^DN3PY)M??_eZe28eLMciui-qkPS(fTTj=3~UEr7Y?H4LHkS~N;mba1o3&z&0ssq%-Lojwr$rXOtm)* z7tg&`hpD%C;-opZDw_?+#*F%BrHDRjIII!ab>Z%Qj?Xid?(1`gRy&e&cQS>kJg}_q zg=gz)urJ7N@-K!nrc}0<0#6*vQduZ= zlHd^Qm8*t_d!sl?#b3*0laK(@=i@-fxewL< zeYnBV5|np&zKSPpzn^fQ0T80+g{wL3sSi>G@H=zb&6Q60dB(}Q^jvMTe9?sxCjIHy z!dCNshbP^hlav!H#X?8uQCf!mGC@N}$~O&a2E>ME6{dHW_@6c}sAoeI-#IXA)~^xP z;@1jy>Gn5)AX<5}^QBTXp<%UwvDIKseI@iuXAe?@J!eeZ%@qriV zd=kUcDWGqME8ynhP&GgWx6CJst~iR0kF>x8kH5+dSx!=NZ#AbNM}EbX-MT z4i_KHx7*w=j`Ssa-pHu6f1_d0Ci0Vr1u)N4A2n*WtrFUBV9K!qQ(H*YvKSI|{gh;! zidP0GR%E+uY!5O8lg8!rSqL7V+5C5UwB0-1v4o!pyhEq6JDEP8xJzDE9`vD z(EK0Hr#|jDbQ{lFogG{h4$Y`I1WH+&hjTs3504C6RDlZw&!4%^JA`er935k?PyWqD zJQTU|~3Z|Pg6n4a@Nfz}8fW)vb zlG1enR6Ix{MNuFwZICTum^--Kn`_VA%n5SSqC{a&tkr!_rz}N*`s8UK{l(w~J`rPn z5~nss7^U%)MG*N-`J&VV4Yaq~71_CdB-$MaI3&93>B2g6y;G7B?AIdFBzxE+aA=FR4du%Hx! zI5uC%=`{3mD0*QBM}UA~<$G@}>G{6Y^j3X5dK54%qTSfj<8Rfoin#4)^vd$f=Qir(qN$~tz>Jvxrj$mpH(`kydDEKFD?B5d z>SShELAuOBZnyt2QEWw(k6*vkP4C@>;wh%aqJZ=<)G4{C!kUnJP~BMHuq4UwOZ(%% z+52ERipDBKr)QOpT;3#nE4Q!WxwFoPrDlvm5#nnFZwx5fUQ}CcD7Lm_i;X9P$hJSy z53rhXR(ZO=UJ}xKJQ9AInv8N6s9;P+AMa>8i;_ zkSp)<*@@pdPX?yVMtkL%#$-3BQE<}z3Q+ihSB3{%jzzW+k5_DCIJCh0c#%xdpaPXP zJ3}(i`93(Zpe&+>kLogdhjIK6VU(N|?kk5&d(A1tDD^RCG6aJ9HD>Aj3cgk7FWuZQ zipIeyBt7(do|>;p@DGQcIFMYbfV+@$Tvd|yFJE?m*LbtyW|$(j0-)<>AKLTdv)iZ0 zH$7&7h#xR3!Q?`IF2|G7q3M_Ct+DRLPUNB=Pb9oQ1@&ELnqbmoZhDj*nUVe$%I z4JFRX-LK*Y&59bVhcXqiq4{Dq5FQ$}sG4R~439h=u52|=*1$nSIdK;&Hl*IpxffNf zr7BBnN3Xi#uW!~8^}IgzDm3?I&ok9=p`tX=FaJ_c25bA-cCu-jw7x73Kl5eP0| zPnudJUeSqy;wnc{?}Ft_WXtWNZbewPOOt0aQ1+6=%{6VD0e#lpFTW4y;a(0R$Auwj40)69y zROg6933<|ch?u4g4KGQUp=x(Ws|#1iwjyJ~!ALgI5)PtKHY0=%;ZYyPj%p?dt2XFEUd!@kn+72OxS# zy-$j&1jB=_+UV#mSf5cHAmxpJ|4?Rp-UIJ0V2b}V`tbksm)E`iVog`}@bc0;BEs`Z zx6^c4Z{w2RfSG-n?Irv2C#_TEJV#Lu@PRB@3cG2x;Cg}fi_IYQ5#H$}8K6p#9^jGyqw7e16{Si`fBwmH( zc4|ilJ$C^OEpq;$iSiD1Z}x-yjRX;KcFz)VvKAgqWRv0u`3Hk@ds|tiwo8(-li$tS zg4Hkd+x775yaXZK%3dm8%Mo$_5E>T-c~5-YKD$TtuLYy$hZP}xVMJKD^vY0_BBJA7 z7r^8mMv_N^QF<>Il`#RxyVndoOEIp{SbjEffLxiJSY6Dpfh=|FNi&c;RH``?X)nVq zI#cS*2GUsKkj=`cETWah16$3j<(7FqPI-J@TAtYC6+FF>1$kEM<0v8MCD8x$n!YVP1=hxU4gyGc;@!>2_Hlhu& zZRvkz>*;*2fB?1ikmPe^xlhzBx;!mib#}eq|5*Bw6JBHw16)4BDj(r&h?NXE{?0ib z(z{c+;6?RrfnZOODQkE0k&HY(N{y)DwtyJE#5!YEx z=i+_r5=@LE_~%YWIgw7 z)k7O#f}x*H`nBZ$n*lJORFR#h0ZjV|e}AWM0rpeXUhShc_kvu{(S&A94sA&xRkI-zQn|62Tmh_9c zCf11ysYf%n%-kTT5g(%EM5n^lf}I*+mHS_lslHhl{WM=1uc3>*(mUX<&DHN>etf}t z7=%FmuVHb>d>4~(tKV9gkjs~i!fW<+!`HR?c)xIdNule#C=;6d2~-40$K8BOxNk}n zRUOT^N7+>m6YPfy*O@D;o(eSx ziS1bQ%$NR$Kul_uG7>V^L?h5eyIH}(o^lG)7-v)WMu9ltEcm9B5FUqf8@@Kw0`op% zyM1Z4AvKogR=wfH=vJM;R|yg4BqDM^GD1YN8#QUi zJm_#hJJuQJmTi$xsW}M%@t*Mo?iAT6E(8ibw6zaFUR_V3O{( zhO^a+hG9lMC}z*yIe~*N+5V8#TU;KrBqNe+e$R!uou{dM$)i$}7DiXcu*C{3u|v$%{pfy$pG%r7%AeIjZ!Q-1NJaRyNj=2wqj4N#& zI1|ugTF0~;%WvQ?nUAX2Iaq;7Jk6z+a>DHZD$LL3Z;(R#ZUCnyI2Zd7jfZ_McQ$ z->n!mGTRs~yb3{W03s)S=URbb8NBFH+(AVlDolwD0X$}<-US{&tv&Pusyoz8xKZmg z{6Zl5t|XrJZ%1A5G+rpPF5L!Ba~$zhvC&|Iw==~PSunj*0ow~|Hae;ewtDf5#2uY9U3o??U&ZL@_0SOt z!NXJaoYk-~cwp+E82eDlfE{PL+s|x8_|0UTV5aTM6V;M)PA^ofyj8=gS`H9rC^ki4 z6&6=DAknKd{9oPq!qA*s67E$X+|OB&Rp}2+cIaCCEPPCaAe@AiL7B=T!mnkO4^Qv{ zg!b}DuBs@QHyq{}W;CGF+htScWKhLdL{(WSY<0EJ7>gT=St$XdF_^lfHqjJx9la{d zoy5&A&Tfg2S+=1^zX51lpk2&Ap&-Crg-}8TlP@Sxrj0#nFgx9io)6GELC-C?{0#0< zkoE>Ymcb3+@C9mZVrYkoOQnL^lZ;V^mlW?r?g92{n;R10i`Atjl7OgFwud0hyF4t_eFs4`ixK6bOV01^UfgLZrL_6GFFIJpGo1vHR4qt)#oq?vr1;5YOo^UJRG>P^H*f@|AUdM^g)Z|hNQfRUL7yk29+}D?~21rHNZ}=u-oE@1wgm! z-u0kUNg$WG0(9pk!RA--Zsr)0yo+q#B;sWBFB-XdJHG3ig`!n!HMS&1;s_X?P#-+P zfh|q0IgeS1(ZXx+ZImcM(-3WUlO-1}jewqPuv$2J&ir@W#Eq}jGmIg31!bgt`*y@B zedqcgLB%q_i;-gEq<;{IeQz=WKLQI^9$bCOBEVt_PaQ-Ne&sTnsxQAUQzr@=gv#`y z_+4ovuh`SDaH;lb>(jBz2O+|Dp7|yLKii7@sYRUd2hikKtW!@vh(Nnf*~Tq%uxhOP zAOekya6pT0NJZ;hB%!A)X|0F5`f0ki93>Hd?)blpLMSNct5UM_R1yPOSbml$XbH!h z$ut($dE}&AMm#g()hl83N)O`?+d2H4{;1`=4&UT(8ku>39msZ$S{b7^%Vzn`4$e)- zL$irca9)1NIe0uk;itjT2#tDrej`1L;^P-py7~Zs+UPb2NaG-$c1nk%uG#r#u)_`( zlF5;SVsRFy)(ovCnj~Xa^6!&Ek%|jN6-k$Yq7k^GC8EI*V@DjK(C^6x6Gc;M5%r*Z z44+0Kr7Cwbk`0Cc|J%jOq1~@^Tg`FEZh4I04>E#B2W|=Y`$pqFP4iiWjUi=cgbmd{ z)B97_D_gx9aEflouY%>u+FeM7Q9D$yG{M!?>I-`CA*2gHbv&7bkP~@?mJ?zpo$E#D#chx_7H_c6 z*T{K!N(KCyc?D}nK|Vx%4sE(rcv=O7foAv{tr;t8ahn6iv7bBbCd(ASfC(@3Y<96P z4^Mo`KYoZGSGhb2xMf@C)j?_B6cgd-rmR$A&su`oEdTCq=NfAfSX(?1i;U55vQoq7 zBN~jYb{~YzYY|UVB~a6Z-f%!ZEQIG9j+`A-9zQ2nh_sJfiXuCUvt>TLX#W6b33nv4 zB1V@h`#X0=HZYFa3;=rPjBF>tfyxLQwvxg*uDj9*SaO6qDq&vS6zi6Q)eP zEHu;6trE>jRfBMgfn;~G#_r~jLv%ze4CjJG=2Yf!WZrC^T*!5Jg8-C!$b*G(|A$s` zfVRs^0N~&2W;d459{)g&ptF)b^E+GcqexNEtF<^sS_+`U5l;axKQe`LJOjjxA~P){ zy9}KT$fZ>WaAbR3v{+nl+@%6 zSNk^uJ4&y0j-!ctoew`01s5y@>F@;^-OoJG9r8x7%&3Z-8T<}tsWwHq@iXtvAk`yg znmzOIsI*>Z&t`f(4?-PSZhR>q!*5U>t=!ZGMYYfB_6WW;RO`Lkq5)S+jShRas6oj+ zvj?`^8AIVmSq*=5(ew^!S!2<0n*QmZLZhIl&H;Xu(%w{OqRxXV4k>OaU?E74LmZ{8 z`>S%coOD6V(V-O50#*F}5(&Ii)^r`+KB7LvFGtj`_$T%d&XB}UZGdNH|v5&p53l4^g zm4;?2wEmdKYOUkc=$E*oxF1WPPye$=VHcKr-?^USMt<8}FsY(hCuMfK9R%JJ%b3j7 z&3y(W5~V#?mjk8IDRuln`>Pv&#dM53XT6n#-2? zX_0cZmM8B=uqeCaLF--bb%kkcV^c$|jELf3)SP-zMH7s*!z4jzBtSVhFi9c>;JdM% zJ&a!N=c)dVdR1gLU3a-gYX1F$AS@EER~Yqubs~~nR6S{eN{seaaB18n&qhkCK~}p= z)shj{oGPTj{r6(eb8m5u43wpyQh5+Kl7*2CT)95J^o>$oM3RswqWi}h<6&I z=#gQJ=JThnqy1!6S>9_y`;gBiT*}j6X1r&=xC>08f=qD_$@*ry$|T9`TwQY zUhJz}&Ian&)7O(4=(-qIY@;Mz*T<|#Q`{QH=^GU$wo`*IG+LxWSk) z%QA;d|D;-Q)c{I^6DT`||FFe$FoyVAxV2n>SKhF6NHj!d5!X_rxcBGxm_QjY&>?Sl z{<{^x34pynUAWF(gN-Pp4lBi>vmc*k+wUJM6@X?1-|%k?#IAGAXu5uOkNUVIMvRfR z-v)Dbze|*-o1bM?T;9yNsU*O!pk23$T%vC6^n^17b1~btIxuieu^z-if^#MRKn0q6 zGj~4QqLwR~%gnlHW|6TXhjrt)englooK?Erv1^u^^QtKOy3`9ASqW2ehS$^smcXvS z5^(vxK_dyIJm-*WlHnjyIb#a>B1~;yZ47vSJi-`Q`6uNFT_oHMCmR-wU_IHYS;pf| zZwe|DWiOzF7MST1_hZ$(bkj&N-vSWs=m(rUPKLt`Gdu4r!Aulw?)#tBUdX|SQ=#G& z=qWc77R24%7*JVg`fu}lt`XDz;?r&MOZ8%UCxy@C-0$Kd365Nm~PV2QfKv@6P zT-etHd@mDriZ@ttjW$1`4O{R`EYe$puot=nVE#H|&1F2m?vhO>&Vhw7Y#eNxm3##XI_dOV4C7D(&*+unzkwm`cCDC9a}K#tXdbcY7^CS+p-slS%=^XUwI%uxOT6 zpRt|nS^{!3b`j`Lh#h7mVa`$PI9+YbmUC=7(6J>_=(!*u6ib^2eT$sj=o3&N3OMHN z3j!-!+6iq#PO&#peKQ(RNf*q%=Ror!|I+*4R;zIbGl0a9Ns;^HnQEo&YEJjhj+71L zG@0=13#Bjc3D-fJV2ZXWDOtw|lzg*D-tis?Bp_+^n0r-e`P703?wZAE#}fkcVC&LU zR>*m@WTVbdhy|fmdbpSh4m{)nIgk`f$E-QT7-4^8y|`=^S?9cAQDU>OgTm>$cm(~e zb5bB~N2*WLnX6C(T5wKtvxnaVl`SGS^`|o5y)E>tCn9sSi;Z6h3&g~{q=Ct7F`@3c zyjUysxTtx_ES$2b8&lb#N7c_0}+V#DAE(VP?j zIOM;<|0=m0>0DE&vdoqYcz{T!VcZKc2`$pmJax?zzJQ(Z+Ln2lwhbKLTjj0@X`FC= z8&+juw-IIA+f@+d-&fAom)YvE0sP{WqH_{&%X^RchPA{ui* zCQD}Fnb*)_ji^IJC=*89vmfe&3FzmmDI$thQI`5k+cPu$q7U){iRX2PP0K1IIg_lH zh*51JJJc0~D#qRNEkTi0z3OFSgnYZWRH;EwYIB`CV$s^Ck>N!MqD&&P)qPiZQDD8` ztO_VS1?B`#n4qshKLR_e_+0_Am_e>uun~}uYR={#Lh?-%Un(YTl(f>oA*2wt+@$tIiB}d<_3;47Np(Y-(uYlrJ z${}SWi105w&P^7>>fo=X(%GL~V7cpQ6zjfiF>zLfdhKV=z8kRo$0efpcJVj zoO}bR9MmZ#R?6I+BCxX#*QMtCBA1FLvLr$p^u@g>d5sLea*sX2c7IFrNgePw0QPsx z_;D0dgMbBwEWp2gY77mH{(IPIPP3+ru#DZ#_v)eTmdvEfCyAb9Rr^^VOqcx-!hf{W zgeSsK{o5;84KxHVwRd+s7?TCyv92_nV_SuQoYXdRMrf{>O$FdN>QN`KNu>}AUA8eR4`Do!{!g_+I-7^+w(RZex*?@|Ja!4q-S`)>|-u*~F}Xrn#f zlm#GQ6;iU&Hd|bwij?KvcC7GZ@4DuD&GoaTL_`Ug`H^O$OZEFM+O?4boKVzt&VC)A)*SdUWS>O8dm)Zi^DmiHREdj&HxoFHrbe z_!#Ym_Dr>HHEm$RX&Xwn_5 zjs#qLJ2eoKW;EO|e12@X+NsWRGA-Ihvog$2ga}O^vhRrg?Z~By@b|3gSQM{EubrY> zj;`gCy37{$$Eyw$2~ggVUHtPkHztegQ!dda%chrOnjxtNq=gtlN<(a}>Qh|^v*7vK z>nRO#&V;Fz-q#PqKpwW#*>6(wVN)-{DTTX65y+j{elajn^gw{^7&V(kJ>Fo{f5gjS zYSwn4o1RNil(Uu`ZDOu1)f)g2hpB0)iC>?@GodUyb@_f%-@@GtfedlmZT8795G=N% zAWX@R;qX;@y!GbyW4rELF7BL-{X}Ou)$1=b4d12MMC+*`QR_Y0EBlv@T=D3*`(Wuz z>-EhgP5~OW(tI+%e^A%;$Ey1`tG#n3(DqJa;-yM>A*OtqqIFO>Y3^Hr|Ek{0{iRk- zA-C)S5~a4xeMQxXt||Urqxl`rA;jUmWuSWb!kS;8a$DCdkgwM5{{eGOOwMwUZr=%c zWKS$boYC^S!IiJ7PL^?w~C4-H%cYhWSyty57AJjy2iCaE|BGm3TEQBNld9r_f9 zleT?!nTWUm7nZ4grAa)HKJ( z$A+lJ`D2zDI`Bx^`YjhfKj1VCR1;IaGgC749S({bQI<|Y;h>#Xy)xP5MbLY-I23nr zZxv&DiK?wE`X-Uoak<6XNTASg>cA0y(4~^&pnUZDq@3@8t!1>VYb zUhx+6wAdr(6z;)LFYV}d{E}Z|0aHRQ9w0x3-@SL9S0}*m`pdabYN!Aa;Sy_@aSsv2 z=W-Jc4F$4WcuhhR{FfUZ)A{R!n&qr?cu3c5v%)$Q-ofxmd$_i#d{;jXYQZi|lU3Do zoHS;>)`A?7ut7cpX_rY1i`S3(ysZOw8wTzbPxz9E=2feqHZ+(O@WpWs-fE8aII=0x zHLr60b~`}RWSfWCc((RbFb$g5sv;ae;Yu7$#wCY?tWg#)MtNV<*Q8&Ncr6OM&!E8a}uxxltvHYd2|936~;(2!usriYo&}4~1u0 za0(pX!I?Wi{ev_~p1ttR5=^6(G$Y)~VlIi-ZYP1dPZCgKX)tXk>0yTj6?I!bYk%>j z9O`cdT&AEGsn!2f3n?Y!3L%OR0Lk#S(PZ4)S2Hs?oa&c>tPj0FWKYdEqa)mwfNmEF zL~!nd&rczWG$7GgyWs}eeMQB+hol?q#?&rOo@1-frNOh$(NyR~Z<~cEE>r7;M=zwz@kx{j-;0t@bBU8JKZ9W~E~UUmr>%ZMYvZFN7}+54hp=VzT#{uJ zBF{S+%(p6Cnkv!4R3&5b2Km z{=I*w%4FLL*FaMEw?Wvx^0Q+n)2aGWc+|Im%M1~SHNMG4NAhRy=RJDV=*49Er(d|Z zOKMlOw z1+jEk@S4QBTaYXR|2s~MQMXaUyxHL>-hFTbbV>DFkgR%F`*;=%sb;cK|E6)kqoKrA zK8u8VMRBQ|^_^=Hm*Rm(B;Y3Ii5WhKvWtPVE!}(BbN9xyEJV~56l1^-G{nF%Phw{M-LxKv!)ipr=K? zpMJDZGJnXeWV)&eG=pvG(6d3384hW-w<$&dAn7(9_%V84sk~W(w5R%oYKeTM{Vy*S zRrMhCYmjZYgO6)#oa=iXbp8sS)RKDn#vyr!Y=_va*Ce#X2n#HZ#d529*Hs)|yp$Tv zJCdK$kAf~s7(1a%Se;*K(`DvV2`1$H4ovoPfff4PP^*?%F3kO>JQ>j@82WQL#{vr! z!*tNBAkv^pBk+% zp|-lA{3_-nvu%!#Gf(xVxBn_x+`f{;X7B_-^P*eDmtiW8-6BtqXM&We^YBsJ61yo! zC?IUkncmbzo^f~{@i7IVJL=wWkrst;W0aKLNkw$3%cq-!K?-q9RDp+~d)e!slkB`b|mM(!=FquR`uTNXS3AzBBs&IjMqIbppZ#F9;ZBY z3&zfa9A>CG1Rj0AUjF85zKUmbdhXMFqEj8O2ONLuc1ymrOM9h#K;YPqR)vtSOMQqu z2)r_o;3nNSd*`ByX5y9ymt4$ly!VO$aqXXAa-frkWW^oE-XlV+9WoH1<_<(dm z+TeUHl69x`ZPU>3nn6@2?R@#1ex4c29bKFpi1Tr97DI5WwM{A*#yyb<#7A|XYS#$F z2QOA)YUT$cOU@`!~DCgrg@S*pOvkgt$5F(%zJ$W;x3yg{hd-@<;6)bAW@{8Yx z4YPy6VI(_(i#IiybEk1AqQJeDQ1#3K%^KM7fPoDqtj0#Y!dy~VBa2(;`(Cd$gjT9o z;I3Z3?;@5v(9qDpv}@D;f9M&(NgahjDRbjv#WNNR{02S((-HPw8f~ZO56$zh`bgdI zat6c~>_xiz)j(+EWOo(+3HCmvHVy=BuSS@-;&)3~jqY8Mv%*yI!XPzmwcfD?Fl*&~ zQcM4eKj#OQ9!-f(T_ZAuC91Xbqlye1?`jR27p9fPzDREDa+MJSzInVKh6(^2@8|c) zTA4e9k^$|aSDit}D?=ft%Vo{DpxXk4*`}BTPuWl(VCg%2P?FvFNyXi|Mdil))&qNC z+z3Mk+iL<}4Y@F0(wI5cQ=UX1KlsxVi9QQjvQeIJ6#9kv72q9xsPd^C!uJaGYW}O6 z`<;vh;e6iUv7IZ-$TxL?N)x)ubFAW&ek5_wlO7#ce4vhCBwLQ3p^-4Ef5lN*#;`x45v%VVIUkl@~?wgA3`G%jUVCI&JMJ{w7v5Dmnm6Zy{UB*5mp|HlJhUs zKPG(tuiA(MSM&$ySdxl_zgI}07ScIFpOx4`)ARbCaZN}+tcYuQaJolk2SjUCgvtxg zkx;OBr0oMxKAc>VkH9hG!Ge5=|ItsPB(dh@5n~8OBm!@0y;zy9HsZhd(f*zm z5b9`>GmOz76ef!c;`G3BpjJCiROz!$T)I^@m1QHA8iQtpL3gWj~=5I08Y z*k{G$24KC`q)$w5=AcVC8$5hn80;d7Eu~yEzRtCZQwoURB9?^DK;Y5|G453@EYv`^ zbAW1;Wee<_>!_ePaFn}gD`u{3j$aOMudyav!@Y9_ zS#e8w*%2I&Q>JtLa4yEXvOYtVKoiw&AfD1rTd))~|908{s6firWZgSK{uE@o-Wx09?dAfK=7B9`H#VO#~R!tEM= zXo621w+CKhY8F@bh2SDN0tqIgN01uFRY(;w-odxJ>nrmB8x^LXCljwc9xES#Ip6?m zourV;Nq~vCP|;+0Jsmzz^=0jrDe+Zd|C5;G#N{N+oVUvr9Glfrh)~>0G6*=;oSErF!FB1z@d%~{vK|D&YTaoenspcH9}1}dw%LQm!9e^v z)A9zEfr6NS?Dd7NPIf!xeRmN~q|2+oGIm1*{+A4Vfq&ePu|=5oqZA6gi^mG}e*=Zn zDwDB&^+tQLdt#Vb2TRDj6)w#@4js@Gp{*5`zcDi~3LPM+jJ%j{X>8k^14Q3~FCw{fdws!BEGUkgh=ujht1lHw=0-M2xZ8 z=D(<#K?65Z^iwC$0;@Np$Bf`YV)t9p@L@IdFj#$M*&h+1>pG~rSMtbwRV@er?t;qR z^EW;Yovnm$caF?rAbf`(jHtr21yr3K4=8P3sty;8EY7CZr#_A}`b|o=Wme4!)~3N+ zMMzAD7fer)r#u>!4|pzf=K)a1?l@KtiG)rYmsYNUlkIvj->LdrVA)W{NxyW9)Hg zp18fF*oEu)*@9x<*!`VH*4O~R%YJ=QRY-H>UE$8p+j75D*49+N9gFneo30BX(CobWM%kJ=8NL_-meq#%0~F`(`j zk$p?Yy+pO&tL_ORmV%JsK^e63Z$#5Oo2<1haQ(nm=#%K<;+`F*)^t?kB+HKpEjthI?aDYbD zcVApKYc}V}vDNY&b=Q_ltU>JiJ+jbwE&HSuWQFx0g&+s!5k4GC18dqK*i){`gI^~G zLWfuhhTGskpYMt>JY2sbB%y9kMK;dS1Zb7=E_gRQa=hRVfQ0yWi`?^!0vtS|wqn$( zx7md(^sH^#lmfu%EMerSUwL2kXDcj?<`-Czib}X%F~02-MKQxN?Muk>bI(PNFNTkT zGQyXH(ig34wgb_iHuLT>ILqT!v}aormLC{>t(1sUyVrV&WkNT zdB-j5-CUc$H{W0vsPKm^iFEJB9V0III&6to7c+(DtSyKEa(mJL~h{g93I;6_8X8@H&8X)xC@Q5 zXc=Te0d!$>)%Crua=~rigF*7%q{F|$Dy>t~VG*ccNk(LKfvCYq<)0Q=c-+tTnD~ET z%8Mx2!pZW#EnzDxWtaYrJ_t{->^RIhva_H8zCy%1{rysif*p?@ty1n%Ets6WiB6G! zI17YgcOC)~{71>{#uEI6Xoz|(w+qL&V?qZ=lC9bG=2YqB*vUct-mi)< z1;MERVySnuP%7P9&Sw4AQ&$1C6+0(M{oBLXb1?s}DOp(rXPCF$gTQI<>6#fY$CV!pA&uhSBs5 zs#|XcXV;Tm#AvoJ!hnLAm!X}OLR2mPWrhaF3Kv)QP6N=1EAI7R*dhd7z6N5fn}vMq zLfPtm5&NbB6DLZ9n9l?$iK{Hvh*I`uB4LXihu@1uqUM|i6%Q||oX%wAG*4;9Z4nT% z_IPxTo0{bsSWZ0kQVRekuN623#F0LCrDyH75MI(d4oHDk>}GZ~8G$@w5wWFTY{s}B zS01882o5?RGFs>an`A#~ZA)eviuyn!FUuM%I-#>!(8{i{~KFNQ&l? z6V@0;=q`bJ27eZ(1)zI?*zt7LH-QK-ZDefhS(gjNnHx9s@jbZSjrhUPyf^x)t+4MJ zVGjCt7EwRxl$-5Y)Q`{AOIiX_pm9nMff471=IK~V=90ilD;u^~DH$Qh`(My9v9iG_ zx9E%cG(iYm0!b;V4bJz^h+gfS8P2NpqOP%*+#HXpqSZbI7T2@t(Vha&XNZxYC1QAu zQ#CHV`Og)=0#3^ELj+mvZ0Qdm(4Fe%&qla$!_K0rnW>mTj&XNp=B}z5Ud*Z%lg55D z%_+rTz*Lewqt`k_V6=r;%bxkt_Y!=2r3mw)8s;QrE~oyRd=;?WS%@ZO@C{+1CUGqP z#v5E##7tjwTJbSC>Y1i%4e_TIe8sP{aE^#kfLu^{`&dq(E7gPafRzR~GJaXqe0W$# zryDoQ%6Ym;N5c|DJ0OxPfOH-Bug+!cpKpF?g*MytNK%IYLr$_tj7=(>{2-`?26aPE zgZv?+(&`-=QqS}LA_ZP2w-%1FZ4@IIM%ZVxH5u!7Ibw-&pGxm0Up-ucp00A5aYGsF zVzY!9^06MlPvqZ}5S=q5sWjD2HROb!cOU?SE2JD3DFTjUL&7G7RgOPICh4C2pr!(M z0|9FKfso%QNxB2;R#Wej#-TX+aT3;j6l24_RN=cFzCs`=;2Lq-5)+m>MpRPg715?l z)%5oXwHeiWY^F4eZ%4BZUoWsUn| z>91M05+F1Y7Q2ZotWbi?zh(W*rj6C0<^-dF+(l=wBm(-gu>} zJ1wK7!k+C&RB-|*StG`9r>e-YfJMH1P$p*^DEP?+_GlmA+US5pyJf0^-7@2MtQItYTJSb9kR;Ox~wOm#-j)oG6I}LcVX`OR$cH88V5l0RYQ z)l~oF+21D6>Zr%4LoT~DlB#mIQyn&I`}X(CEBYo=CmfGpPrPtZPsu^!I$TqDnzbnys9vZ69+_tVepz+*h8(?I}h3bqdnF!DwTEP*GU1o**8P{c}j)Fu`^3`{s#B17SB0<*<6&oLQWh zEM0By)R(5$X;!OA?7f6xXhWkXv6eeMGr?r4$u|o3n=NTU8ZV`e5~6vQrfZlad)k(W zi2@KeoM(>S98R+!n=&E#ruEo&^QN}1%beaPd|@hLEfnt0OXg}k23cUNiXMeLWBWrc%$|`aei{yR`@15TAqwcM#Ll~qY&K_|-GQ+Qqcy66?nLdPvCf`s z{%ORRedaz$i9JJnFcWSZqlAX`C-i^4hrv|1$HqT85B-SizIv$6*ViX|BgTRpe*DUu zd|&kd+~Zn9&nN082>^Fw5Zx0(SzJ;dDqS6P3r6@^iqFuQrq3#ij)m3T!@!f4!4E~% zNshWW<00F z7_68i$UNko?8O<3;t9~0;}@4DsbRw};UQRxd=)13KCYQh9^oZQ+|^iJDCCXP!&wGXEx|D%gJtLrv3UBg^Z> z_aF?a7XtOtfmk{N)Kjg}oDu&t1IC%S;m;l~NWU{;uC{3_%T2Q9>uS8fokmfnp4pN= zvl4ZzjrDnhrFn7vj5W5_z`ULXI3e;1vqyx;-yB{3FHS$D-oO9kD;B=NlnP>a-oH9ag@)NK%$ZVqIM|mXSHbxYbCR2uBJ?Rj*S<5NpZ!S5IO3r z2s`^gd)5*1vF(2B06YPPJW*E!cg$lnw>0$g2xwyNSB5l1IZjFZToo*;SIQF5$AHZ7 zB$6}iLgZ?jBQo+~SFM zsfdJb+8Uby40BCJpY>US4MzjiJHpI+e;h92 zD1h_qQ0(bEXFF9I%RdF}V;~5SNaj^7=KP=ML(NG#OXCQ+&ESIeVn&ORefV*S@Pzsr zi;I)<5i;WDSEzT;9YN2{N^B#RVtU^^NM%$1OuqF#qjouli_pIg`n91hmKasowRxqE z+#LgWTvOctcX;4^jq8cbHUiY%E0p`IADo97wD-7N)`^!mi=_)-p0aov^{$@8G<<9i zDJB?!mb_jrC1S&`YmaT#3Y%e--^7KXQI|HRBgO}CX-wb%30~6onozdZETJYPelz7b z(_4EmapxM(5S%FLq=I;XE{-Yx+dR6Op1=?~H?$qr13 zi5Na!5uk@}AfYc%?SlnBG)mB;;SSDV|5mP|omPc!srnXqAzAVJI|t~I=wW-QLvkD- zYh>#V(%)|#eV4joM#jq{+uKb`WHbQJQVqO&2j8BP50RxccU~Se0IiFUsTOI-A-@jy zIN7)!kiWP8v_UelE2Pjk#@MWOPGOtB5H&|+od??xE;onO9w*H!JwG>kb&grO%rGG# ziveE-!iR0VhSa)90O_fyi}T8ir}4Gc`fxDMt-=W@XEkWPPgFf=Kjn8g%(YoAI$MF> zS^ScVogWV!Nls~v7hwNVK{?deYs?6j@X0e1oAW>|rM@_JMxPoCo-1{{rUyGj3mMoe zDiCC1Dl&uCKQTF|&PlZhGh?po2b_-;vS~*j-ZV+N!?Wb6wRcwDHbMv~5UaDH637*C ziq{7#Ar_ghz@eW~gMk+{S8P1q@O!vU?fPGj#S#-=1!Smd*&o+p%t<}*3Mp;-%AkpL z2=W+(sQgCE4* zl=h=LAx;v-c{?~$)gC|`%rAHcPCXTiR<#$d(?59qx#%wFRR0{b%Wj}ZKq>cEsE>NC zpeX$ziTm0+ySE{AOb7Z%@+4HjlUL5YO;gObGQ~2;EztDq?O&O==WAu zp3$=(boX>V?u)AT!bU?pbR>lh`g_Pu=Eb2BRu!<1=%%6!Y-V5(9%aBPLWDz|mImww zp|tvwT~UB=9~pM$(=acY8;=m9!zHPfes9o}wI>KTc#-@5K~-WAqB9+cUaiKQfgQSh zolB6>V>%4HPy}6pC5VccO@lvA;Ct}a`ar}=Gt1n~(^NXENr5R5#Z$`r`snzP{Cxf| zz;2}3;6n$u??|^b4ozj2!uJe_m(Fs0}$RrMM6Mb zz-JndBvz1f$s?qtKOe+@Fuj6C<>T;xt>0vcjEu7_fqX>8OvHwR*)w))Nhay=%5EG% z>TJok?8Cx4l=NXCt}^CZ@$l7aJ?R86VCq?4H%2O2v}9wLd5`T5#)IG{udHH;lEmaIfbXT z>bK-25QW2;?GU4Gp=)(Xm@ASx|7n=ac~7-mPXc}E-=93}uS{|t&;Ed|dhA5-Jh97B z-7FC4*F$mfOh=o+(*#XBnyUZ$78LJst2Ve*ytqYtRos-5dGV`nff9` z11xC|ihQFy>{bZ{@`cg2h@5Iy3izDd{@`pifS~byAnkcK@YT?Dv@U(MnIh z`k6R>u?VBDp;@bGS8>XWoL0 zObM<8J>lY)xqkCH&a7&GW~vF*l5RyV0x!xvDgR#zXVfKa1T{m}b2@m=Sd#u*;-vZX zJ@ER^GVlB-asS@+EuL`F@cfG8G*UL`f?LJT1aZ6N?WhBZ;9r_3{*by==)oj`E#;IG z>}T;W^K6(!*#v%!LJw&R-2#GJ2QffdqKM6>FQH=IH1m#YLVPYF0W$@Hpo^Sy%*u3b|;FTFnapDX;>TilI>yH#!Z97Zeju6 zwfZ}MywH&VB>zcXY}GGG9AcXuwPm{`w=@G@0_NB3;FD7FD)^xk{!z8K&!-DeY_2;m zqEl^T7fur=_K2D06`AeN4Ow^2z)=Fz7;0pe;R8}oI2slyq%2}OwBxhVb<)b% zUH)eyrKoQ?mgYl5PMQ)=4Pao~lz13thrDC|aewSRTszadss>LN0vBQu?Gh zv%GH+BtS@qo_11`{k@LE5r=RRRfw~92`0w;V)o6Q9zhaN=LHbt6;lMbGwl>zJ^B1~ zIc>U&(=|g4=dj|qQ_hAXT{MrXxrwmNmgCfK?McvP6xD7^`P;vP67T=$zye;ZOgYS9 zU7nfgmLy`1@~1w`%2*xJk3tlVF`NSw!x+zZvQ45IdIM=!*nKwSR>s*(ko(;Wm4??V zc-%`@n?Cjc;6GBGl5X@F4bW-$;*WxgroMfSyl#)VM;KQ|C7cI(twKjyAoboKlGgcm z6nDy)8%%S%?%Ai0v^h%JfCsfIL|V9g!A-X{S15u~ca~r20vB^BW%eW$nw~(4PGb82 zF0q5AC@hmQ(0n^NyW=F2KJEj@-!4e+F9_hgCh`E^KUAH_CHkKnc3*D(eCDL@Y zy&^a#=SG;V@Dv){Sge^vl>8RoX0J^lFhya>MEe#bMw+d0`ZyFnu8r^i#V7fH5hg zbp}Z5>%*6|$-MUy$8#I8mLCGaz%i{l76&%k9r9>Q8JLr`Qg)1}>45wco2HL-){SO8%AKPF5NJC`Pl(%KSiyIj1~Cerq9lm!SPS&Pc5bm@in#n&lE34 z_citJEKs8p86DoOO^R_^RQl@mL7F`_QWA0L<7T;^@MX_FYP6q83_gWvBsJwKJUqq$~L~kPuF<%_MXyy)T6+9xL*;HTI1aYVi{43ZLO1mS#TEm#r|8_>2haG**!xT@iA`E_@$Gq@v`mvY?}!3$F!yNev{tGzTb z>_pJ~x1mlTdXMca@&iIWBw|V#$0}Hc%@H0lxtR3jXLU_H)waS-!>JV%y3s$xn9vFn z`Osh%L0b*({RaI&9+Mh*Seti?%FmM}oZFKuoNL7?RnG;nAGvkPp}r8Ioaao>cgTCD z-+Hn9BKy3>?gvR*hb(wu^6`!Jr)r{Zb#~H@dfu8+421Bn*nfBOyKc;q6qTE-G%-DH z&G4M=D`oEiRuyjC;R(aQKct(A#g1}K-`#@JtUykT_Ty(^*YAGUo==gY)k;7xgBk%M z+SKz^F%w^z1Ho9csq2{+e7YAI<63$GgRV42~v!GnG~D=L0bvrzu3*^ii(knFrJV1^L6tqRwZ0(NB3&!4f0u?D1q=fZ{w9j#Va` zkpy(!-QnQ@;gydsJ_Z*06Lva*`al^tR~GM4mb;VMMT1@!OfWRn`w+h?roC!1ifvp9 zj3(7|nO-ad_uBYB7CE51Gd{*V*2LTuyzIr9y`8=WS1w>I0;*EG(pxU5X&>*kh+N#!9?ozTZ9pf}H< z-oo;KrV>zU|IKyRh&xNjNa*$)d)VUjj9(?bf2CrMeuBfvEd0P#?JCE;XS9z9X2NGj z%*CSqD<~Zc-8i79sUdsZ9PbOjV~U>q6XTYbK@y#(jJeP%nx*3nyb2UTbPiJ>StHLj zP7p!{2C~knHx@d&Txq>m=gMYXwP|>xT7?M|d0ZVPn38YaKz5cc;DtZmU}UXJqltKX z5OOkxe1_q^xOd>OenE~X$0@P@Ch-Ao;#;>K4BZ4Wn97{j)YulS!@)J{JGuoa<4+LK z_mcqg#`(#c3bP!kqw@!Im(WXO(_Hn;Q$5=)XtL$^@!ujKIKBfQv`T}0MOD(pZYIqY zwgCS>0Kj)!Pa8*E-o;$NLTMbhk@kAEnY$I2pKuLl8O`2_h$p5dVFV4V>zRhWm2op+ ziE_qoOB8DB^^v#hOlx7lRR7k3vX#!$}b4 zF(#}V4epJ0gR!aMA9Qeu=a+DoGnJZr)A?-jL$k>$UddL5uck^{?1$t_f(~O7p)ZRt zKWRi;M^wJi-jO8V^p*r(AqK6bgSza)HicBdXzm@8E4#;X_EwcoB&nPdBZ!Xqr&!A8 z_YW`|`YVfrXgG20;*Z#@RtDorhy==`?^d#)I^7NQ9_O!(BY$<&1!}aAm?a#mc6sRu zi8|+PDRqSsut$WKt4^Qz24~A|l<4D^ugDC6%_}vrLb>^RhM3|wSDCG-wbMDT;lii0 z8^aMiYM<8v*WFXI{jPC62z7lIV4G0N!GUsPW~?>`#P<-2l@RwoQWs7?ek-L)0?JD{ z4;Qv1ckKB2RHvmA&sSru4tf~9e8--e;)Kq137)BDghdIM)SB~6zg21WdPSax=@zIJ z+byVhrR`66B_}wzS>Ec0^|f)IR8g66AY?j0Jq$$Ae~$P=+stxVu?9MIY0ptgj&y4v zhPIG(KTtsO*qg9M^9d5X5aQa727}q=rcvtc9H|@&@fsNq`sF3Yr%VsJT2N`~&n_%= zyj8UBNNw{2UI59F9|e*EL*G#%RGqf&G8KWnM4)gJZ^Xd+STNX@hK1c+ym{iybO|C# z%wBRB@rk?=oNDZqsaN|RXIrtl8v$E0&UH65N~umvMGf)+2LK=&4R-&Q2q5%Ht*lZ6 zKU5BC;A&RG&}y}X^SIMM(ISu`Psn1>Gz1W=ubY30QVcw6ZLZQ=5Gvh@ zmZROr!eCq|r7USpBpueY4l_5YGt*%+Rucw)GH`*KFdbPW8v#oA_#BRFhfC*saIJy8XdB;QYNoV+A%qpgZKzb0k zQUy5o8o$Bq`MF#t;z{~;;*#$dVXeL*LoL+K;)$9KWzD~6W7cCny=mllji7{6KHC!E z`jDgsxhfVvu)$rbHCynHj}%S})0O$@)Ms~4@7Q^*T$Ij;Fh{oxDlOakmMnYGF0NDA z3kpTK`n7JsqCz7cKi0s$*q<6{oz0AdTQt}wZ~~6lJQ~OtpJVI2oTgB;aClgTZS>4( ziC+ZbU~B36G#Y0zsi(D9nQMY-M%Zrm8Ow~B4$1V4@qT2dz+~Ce!I@YYI?rf+ zOjbZLTBC>se2QCUPgjvjI9~HErf6V|s~wv4YH+$%<sXMOo@Le-xAcBxuJ0> z3y5dTC^Yv{H9f2PIj#ZwS0I+eqNEJf)&k)9u=jk$q}qy^G986iw$0k%HXW_^b~Jkk zGSF9!3LyklI28?M^@HMcc_<0(P$28gmc@w1VxcK6%Ct=HSD6f-XI?#Y&$#3WVyhig zq7pm0`ur?_gMbZ883l57KRlYCmkGpq=UyZ=Y{=7ZGBKhEEin8m^Yofpk9s}(8^RK# zd1ey!{b=61zV~1z^<1xdMq_U>fpBXz3m7_W;XIqu@C+#s$v9DIX^SGnQ87~;0yfYQ zG*x*f(>`5)dHk=|1Yn@k`1RB2Fnp(A#wIX#RO^63IWMngaI9IvOupWamxxT@_@Jl3 zP?DxXTDIr5o0|KP1cv7}NjSUf5E%V zv)I{yg9M|Q;7bjqVz|rT$MB8D0h~DYz4&K<{or%}qQQbI5d5-6!pvwGq&-a(3l?P0 z%{5fcQfHSf#x(99m0#+Wfjy#*!<{%B^T9tKH|ojruTO=4xoQH6-7ACM8*)syxNSPu| z`a=Q8fujIa(yPePFckmuT#kSmxl9B6d{~kX#ouNRQQXo1C}R*eKfQ9OcoXFZA&H`D za!LFK-%k8#<`!bx^vcznwQOrP97;lOKre?YRH_w?G6cpeLZf*st+xY+e+r|v%e$!@ zAX%TU}hu@Q*$mG=F z$E(M?89cTVsfT1;fftbQ1k3!3RTkPjto6^U=oU3mU%b7-;^}J0Bs+Ysp=W64Q-cLk zJMA9FsB>~eoWT#`8GqM|ub#t8%ib4xy>2*0Cml@U>6 z&#$`LQCL1|u9O5g!n z?~I}M5Af420DOTe|B2;ynVo!07AeFD7Aka|x8l~BConU^q+FT6#g_`s@X!g8o00dIU536J$kq4}5IxkCVx9Kh6Oz&VS$4b)7aHx`$%f29?%cJfv8 z*MR-xVkux!2p5A`Ta&E#uO{qs5CcW!*T_1Q_0tJb3VNhX7dFM+(Le=tFWJV6`@%R5 zGUe)NBk@yLj#{4}>o^c>OO=36@BY6Ikby`I-7>8&xBWZ#1aY7kf21;l%OxUQO&nHj zo_tT%5WZn-8gIB!i}2}Zx5q<#FaRPyN4bBjN=Gq*X4*N!LtUu432ds>JZ{lYJo$kEY%BcCKY%UAj< zFGq7@J=f=!q00p8?E&1cnTS9|gLqtEL?_iEM}sqYd$~zDHT_JbE*`B=VjDU&wuEpy z)?9-tDN}&FNIbzyT7Vt5cM_A6<-l+az}b;+~~ifV_6S=;=QRs6&Uk0Up9&tz9^zMKKfpj2mqV{GK?rk#L9Z(|*DCw*0Oh zAm?DFd4fE`*0h9Fw9xSxs-h@&b@m;zPXUQ5MO=h`x5r-n0B)i~U39XTusfE|i>|Fz0!&P@E`Am+p-J)Yom9^DV>F6IHSAPGf+ zkmij9FUo+XK}BGp3%1F3t;-pF0a#q^Aj_uf8FX=7v^ASwlhV4eFy6DIW`pb~sj%?y zKv!es{};&s`BHbzEzw_Du0+AFcg{Jp7Z!=0Rx~|%2jchKUk&sadbJ*IC!rpdxyLy4 zjfeNrMpD8I6Hgds9yuIa^Z%6GUh(or&f?;b0B0aBaB!UU{!^)p|0Y_;Y#{JSPv%=0 z)96XxfFfFUx6{l!2vRIQOo=j9%i~gO>s$jSd+^%yw@>AJV*TRy4*`H2tD-7&hF@`Pz`pD?!3|RgYO;2}$)(Wk z>BgH1(#3%=iv@$@i-67x%)%BHm$!orw^vd^9VMs8vSJ>t@}2h(sDb>k)^qif$aS-& z+UsPv#vCtcTeM6_Iy{5ylLb#>yu!WPjB0fMzyEl~D~SQAai z>Sk4HEdJXo14q1|271Vk9~x&xG;a+Focnn5f?zYbL@mU{JJi-*p@#rU5i`0L%vjDN8n52G8=`zcnhw|6?GQ z2>>szkTLdBDvmo(LhZywn#gfITzl*EbhU#UA?G4b3)h$_5Iy#1hnG<+gy?%7g}Rgu zEb_!L05?K7=Nbg1NJhq~@PYOLw3#+4WD;GUw>W|0ACFN_y)Yzw3)MT5VvP%RtHnd_dULkJ0E(A3@>>(g#-$Bis!A9#uQ-17vb5oW@lss zC_o6fgl+2#z~whD$Rqxg5*p?fFr{J{PnaO^J@kM?(2VKYKLNMLbc+H*dsw_yo4;t3SHii=0lzlX2=En;G+&O8%*b)5!;hUpJ;Ep{F3o3gO=@&H*Aq!yK)Rw53QK)YS4u zY1N<=DRwvmUw)~`d6XV<6+z1Xb5Xz!6aYo;SA1>+b5m|vmfGF&YKrTuTrbJe%uuxVxXhA^fM9VYaa9m{kS+mJbzq+M5>uf_m?W;z5)e_sEO>cSeI*LD*jz zl6xo<0sxlBz~Ne}&$)t9>XylmRp1Qq7k|4lXrR*}fjDohO*+C4Q1d%c6ayR}ZBOcF zY;gJL;_NF^XI$i^cR;tQHJ*#KSQyy`TEkOICEJ*rV>RBse?f0Y_)6%e9v!jFfnq7} z&zAPe`#AMJOlyRHZqgp+7%HP5V3VR3BKJUm(d`=|JZ>`)6fU#k=a`s?bgoloDbN_D z5i@oX1B$o&a;D~fT%WhWs)#6La;+xAa|bq_Yri7*X>RV|ywe|;JRoUd(qys(pdWgm z!XJA~y~fWR_T9EbkOzIz*qg<&N*-4-zc%wvC%8-5E3riU=~$i&jg~I{?tGzYtU1j1 z@c{z9Vj_*&pfsqX@Ih(@GbhKtHxP0Ke*Eurb%BcYm>wqFet2QCa=jDaqQCFvo1JnC z$i;K$CQ)I-6CKjgcplUM&mUu)!{PYAP{Ry+Bn-UYN6rI6HB5kzrY>(C?~W>1_OjFC zM?OFJdD9yT&yrp*tWDABYxc<|JyNm@{(@Onh9N#3ceXairZhMUZZ|H;f&pauQ>tT6 z7L;hQ6IZ$2a6@9G`|Cb*PI|=4$Ez!Po3bS2S=m|9G=ym*z3f)hLa+A;Sw883hoVwQ zedC+?XFS&)#;|#(a>tU^q z)xw`J5*UBB^&s3n*vEo&fyZRV8y(OX~dwJJ6yN|uC zl7jG%j<7iLuB3MpWS85en|&+%giW0cwgso^uV#Gm*SN@WgW|ECWh>NDwyqW5Vwb>h z5;B}qcEH>jBhu0%^7Qq0xDWbbdDj~9qG+b)Zwet;%=Xu*K8M?~X5T;s;Vps0Q6lI! zuuc0YjsG@3+>Q$>_@vWSEZetw4p8ihL13i7vWvs0;U>jlAEh2Ma=)4#(*xtzw{d<< zCzf^W0*RnK*V<||)q>bkZQmENB}|X^FHz7n@8vtlv8bOCN4&qq0YE>st5}p85+)Sj zwo8#bJ)w?id5R~FQR3%BL$8IK1_!ssKo-_~?chCOmWnS|J%$6auxwl|8;$aNJRgq_ zm%|@p3BmSJQ{T^;tuN<=rRAkEJ4AU1gY9_1c{|0h^$+7&U}?2)MIM^=4YNq1MNj~L zvl>nwTy0ygru^9Ht{R!0G)Xl|^V1sqSFS~vcA4D<;F!a7SnW_A}N1)U#&j40?2{|qa})A$|yn^*735Z)!Ml9K9r zF?BN)A|4oSMU%NkM@+uA;;+?ct4f^9sdM8i2r)h)$R3`{0A))Q0*Biatnn8P6aFD=;Q5CAjN165@qKSqHOg_UJD zn@Jy8-16Lej8_IfyslUEm^!*d%N~RH7WXqu9O;L>QvfzCD9!i=Bs$GSolUpr^)Gfw z#<{tJ^yIL~*-F6tcFFattOxXV;IM6S68pB7FIpEuR9LS|GVny%<>b~?z;fSViWDCT zVRs=T@c3_`QK@$G)2VOW%CY}$1sXJOGIux!!Nvp@%TFgJ9Ln!Pj zwZFH9#7KIJh7$VC_AB4*(~u)S6!;Sdsz7YJQ~oG3hx=k=XpO4tBS_}Xp4(vD$d66v|7;P!JX%?mNLQ4IaM5}cPkpJ?8^fO&y%xwGecS{blooI}1@A>@K}7Ursq(#+Z_A5Ek?qKW8Zz-qzdIFmge=|p&~fjiB@gU2@I;M3BoPwiF8ukXIm$(>U!Wau1s7alR$T9nyzYC+X z1N7Jd_(_|GBuF3R!CBjfn)Z)*Vyq9*NwLOgzq{ee3@X_t!{YCtH@S)pqHpad+W)Vb zyn_vc(`fjSy>iMFxy%_>1zR3xamCOtH#Y|ISzyH1zxL}6W^~@ zF#z)puiIi;2=S0)<%}qr0C&y)mENH~`3>r(a#udQiYo?$qAO&keQoxVInTxCB<4Lp zZ&*3KDkp_vTqAy^ArUD%YKiWNS{J3QAOqi;dr*vS5I>97jSlr)HlF?>W7K1pG-I=r zc1I&*Lo7D-D`mO&>Wy7;!QKDv0Iy(BXgS9%oz+r&0&0q9>P0IC;Ku09c0|H7vN1`n zEgnq)Xeti{*zO?iB}{Zm#PQ5?9<8_IU8bqcGp9|!OFojh3!CQw1nF~4S_G+C+GKMr zD-5pUW)L@*0q+mXe;?7#f0(S>bEv(=$(Px1YCl88gIRX)*I8?2N- zDeBgv_9#K)z2QM+Q6yx#?8%6w)o045Ic$CeW?E*|+Undb24^sRI1|B@6JY-tQSyK2 z@xtLW(WTGLjg{3JR?Q#rhmXz6|2EA;-7b>{WdpUrS`~DMwCM-@Mi%(pp=~t0C{cuy zd;l_td1YVM*o|!q)}uNeB4;&y6%Er0C1`A}fBP{Y^%st&GFr|0HVeWkG|=>OnmGmv z@onJRRN1aInG`4ezfTwNN+F!*B1V$rB#Ko@(G)Ne0V-w>osEeJd90WSbT2TE^A?#J zh$S9YO9{weB%QHC9-tj4vgnw0&jv49joSG`)*NKOx;dh7cL%6u06^ETOOso~9u2@w zLCS4_;%o~h$E<9u9ZnD4a3_aXkyUU>wlWhui6g? zc1)uGv8n;9=2MD(YK!rOb2`ss zI=B%&v5>_40CmJxCVINZ;>Fo#&SZ1OfX?TyTBBRMH9OCsWp^|4>0g>!F(y#wL zSjNg4P7}{|o!cl_O6Q&FYky`hip)i+U@9OQ029ZFvMB>%Y8;|PTj3qF9Vv{#*=gLh)P{|KKQSE zS1^1iV)9a%{%N^B3(;x2owwlaOA7N!f*kmt_-QUMY5U5I5UHb6Y)E;+A^j1EcLMz2 z=NAhZLDzSmVXA(y7=j!ltNsYu}x*yAtj!y@0o3yJK z-2)7GV+FQQ48!?J$`d|#1yrxn08$g!`A-UG&f#~#x*f`yqj4--4L9rnp8ZF zL|AfQwIMDMB%UJqwI4hB7VlJ#X~QFe?>p<3;vR!7rU#gt`XA@SlL55&Gr^od$=i3L zRRvpSwV_r4rHCQJV(4kya;f*(0>lk-s=)r0D;|N|?UtEfc1_{Jq+jl03ucyh5+dt0 z#P9@a@*Pa6maI?`m9lRjeb;_?REXFDd97kw_2!VAb%WK2-Qtb*X0S0WOM+`!35gu% zIan2ak?$5V>Y_pR7H)~1nk2q+*!#ACH|^mgS~Ne;7tXT@V2iqa=YU~89?YAZYs~zS zI%?i)Bq)#XAU5O9P3?d5A>;2v;kYuH*mi)-T7XOh@E7lHHs#M#`O@~9{M;}Xv5F1v zo0F5c>*Sv%&kvEF3EOM-!mtNr7<5!$>;AR%?y&SwaC`ns{>ta&4jCI}+Ehp0*K5UB zHBRmJZtJC0>b`#F63@T(XRGJtigm1={B;g-a(p2H!~>8nWggLQcws2eY%GEDYUDW) zXS`Mps}h2?46Q%u=lG-)>agPOQmYgIaaI%wn&fEjtD#~@uD`Cs{6iEGeA`rs+5_?21hQnl$fuMI)BJaI#5?2odc*1%f-S z?w!pyA^S@7cua5D+w2imi!oOX1=nUIQ8jZ-m_aYpLmq%#ohY(bbZ@7m^ zdZA_2amY)=oX9yRfzxa;e2#(oVlnBpUS?W6Hh_n=Lb>pr#u-rkbq@`YL@! zO;&*x=fUPFuJKjUTM)y0;k?u>hKlSQOZX996_Km4s;A0Y)t$$kb6aQ_6k5n$r#0NJ zVo`~agEDfO%L^T!1R%=i)#6$=;%t&P8KkcVsoIeG-oL~P(Yie_qX!~GY|E$n^Mdw} zTcKEDs&9eOu0r0nIDJ^G*`hsCekU+rCCdUTW*a2$N!wisjn036DK{ULP*YC1eoIA5 zlw!W3lr715x!O#q$yP*nOPoANg7QLW5rb`XM=NbWN|`ylL7+4gpH22n;F0~{d^d7OiTR>XR9Zy| zV-T|$G_E1Gh!r}&`^uXW@Y}Nc7Z{VZv20MlWT?}W&M5Qt>*Yik|6NjI;UUk}l!AH3 zXfQ&qtg}_{Rc`BYwX}ipD0swfWTp#{s3{8Y)%4n>nN(9T<&?s;)Ii>9Y*Su1!o}OS*S&WR6Xdd@?cRd6h^$QJ-vk9%AsX;Saz7w8!ihBMA$3Ad_hf>4qh~#_(S-5aa>q$@jR(<}3!D8&H}Jm7 zRzY;uI=cXOqC&1(K0(Eof@?+b^Sbx(s6g+L#iQRe=nKoh1oTlY>EzK&sQY`;B_6m~ z)4w24{f@$T8J)yJqVL%+ic1g45UZlX?|bOv55zJ_q4qD1Uk6di39<ft9^Rtx{l9 zna`aN_y2kp*wg?|l)s5YKRS=>5SQ&#gOAd1ukvX>7q8*W)uf7-QP@v(IB)tX(3dQ# z(r*gx17yRXvf8Rk0Atlxe~sCU=^-wf%q2A<(D2M%0{DFW2(T)RYxn|~oK^1eS=^<3 zQj*Vb37TcaWc-h41XOoPoU_AuG`YHTLhso@Cht4_=#T_S_8dW`b`VX zyVb_JesL1Njj}VpFnJIGVx81==JBs4Ib4alN)rWT9;lK9{DId}1--;`_NcP9#>CP1 z<1uN4QZeq&TBC%_>bW!*i9?}?`@Qn2=Ln6ZQl-Sg{M6fS4k*gdG*4E?1zKl{i;SoG zbRKM(IE^6qrX_G**z-$%Y#pron{g3Z1l`#HJL=kI;;>mCvFO_e2b@#pfB!hK>O)F2 zU8oo~r@x7luXD`2-g)=$VpUv#y1^j`ydv@RGI{N>su{!0^jYu%8g6KkE2U20*%IayjEDM$$1)p5a)+`2e`p@a z$2$zLdMp$H!P`wGXN|XUwspNj8s(q_jPv~6qHvG!FR|BLa+P1WHE(-^V9+6>(>KP-lu}2ab&L*%jJ%>}#5M!>d?^nut=iwicVo z#=N~W>>1s6fx+*u1j#YLgTsRGd^U$9{4FpEPH-9ezb$w@zJ~-{b5_VYit?{2F;;_Q zfuRX~3u)#xI73Hd(B!$)O{`Hlu458FFLetnk|H3aG6QVO$=i=1;>9$gj@7eUdg$o< zrZK1;L(+93J-mu6oss{b{#Y!s@a?bOjTTN_pl`?^*^$Z{=gCK!_UQ?1o9O(95&J(T za;1XFr)YTs45b@uqruQpwi4ov0a!#J5xE!IDhQ}QfzWWMd3n{ZVHbW{^mc>JLtcT7 zw3}-C-{d9)k0~jf+Q3v_o$Jd6ZgTFFuyr0M%=@^Gd#1XdNhHjsPhy}-pvU2|Q;dJq z^A8;2!M_R)7fUQCVa}3AeGCy0%}5{vB@_>w73Cn_fwEgC;zI&*+8tbPxxSrcgQA56 zbgF;%UAV_CoU(o-iKH!z*P7~k*{&eY6Fqx0ES8X6*kcfZA5ZX&ys`KiMW{~}Xg@5? zNUse=!#Fc9p5;#`RZ-INKm!RdQePCSc~s)SY%9ArMB!XEP5pUGc<6VXQ(=ug3jvB3 zwrp00v<5ecZwRGuzCB>Hmi~c*#caJfYPL-Df>c$?A}I93QjgbVq}U;jlcm>gSp>8C&so^X@P)n zPf6o4E$kbc4Fh@BQCNjyO z3S}cMYl%juO{(pirJGTl`6B3jXMM zNp7L|QAP+4GTn5Mbv9DKNw9eS`gp^|1C`E|m)g5>ZlM$eo{=@jYH{Df8f7oqS&5q4 zdc4s277am9D03oyxrzw0RgtOStR7UyMnGf$D%;U=>AB>P1skI2{$558@O9sB$JjO_ zrSl26og7lu_Epd|)`evL4LS(&s2j8exyl8*qUGl`phIO(GeLS;zVidbM-1tDg zIh*z;2^(sdSAC=+5pzCsIQHpqrsKzL_40*Ds|$D`E?oIIcru2jL2dFSGs-T0x0o`d zqfLf;qKsBw(6~9m=m0t3wVLQ?7JcOf9B{CjWkzuB^}$FY%cIdr0A~MXFjQ>GM^}aY z2ptK8RdA=F-&Is7p1T`zTrTR%-lQSGcjr(1@)xG23`&e64XBUeIGe|OUYp* z@@m(zz{T^mKgG@m!Yj3|z6%=-bhun-I6^ z^E)f;5s4UoV z6L~oehP+*@PMitvs0d}D4S((G)sY=RmBs6Drz>ptR~C&3e_@+Z4;II%E~NSQ9AL3b z42lFz&f9%hg6p=d=s#7yNPs_^FD0kvEvEtMc-J$Rj`FhHLWTXz6v!te>sDfb+ka7? z!b(h!U+8l%Yg;t#tMWQERC<2;H=g!dVg5+XSlnoPO6&SG6DRe74ABrpGLowI2m56Z z$S<_GV=d)u3o)_Gqv5S4Y{Ypq4BluMR&#+(ty$uAbSsRe$-d2Hq)A79;{FFANhmYyB0p{ zxnq3RldepZSw?EBU)HK7Fll(CgqdqYsk7mm*8c%%`MR%)ge<|yMAF#8XwuF6HD5`u zGbtM=-aqADf~CCg%5Ic@D2%9`Fqc8rDVtX+$LGO*MNxMBym=*)r^u%>qr|=2B1f|r z@o75+VJxmFch*17nd8NNKrPKfMbJ)A4Zbdh$Xv}%H);I$+nyq_(YIn;vKnlwr#w1qPpe`lJbQ&#i=QBH1Db-4 z>Zg-nCMo*1=(+H{AuH50F}gyD%-j4$^f0%vo)-U1+!D5Y)eAbhMDb-UV{DE`vW^P{ zRrg|}RULcGQ?qXR(Vm&a3$TQ-iMo|&LD7j}-g(?i-AGv|fGB-ywYhb0PD8P{*&~T6 zd6hOQ`qYTQIfqg#-JV{Qh7z6~<;Xj=CA91iQe_g?TbD3VuTfiJ6(xPzqZB^C zyhK8qsn`VUdQ-;{y)O2*ybiyTRBN&W=|U2e47?-{9+V=!}llyVsl;siJ!1UNGc166=|Z?`LuCCv6?4&9{41 z#C24V;eJaH{N<-8{SMIngPjNd7uUF=?g6$uvOD;ee1H3illUBO`0??GWo)*{yY8yI zJxf%PkF+dMo>UJ@C|E-19j95#b#J!R-BshR$Ih|#sSxmFpXH>aU#zWj{4o36L za>MT`{^mzE?8)>QidrQ~^`%48t5q21NVVfqKmSszpUflQcyH;LaWQ{Q?XQ4yXC)@&QEYvKD7b=Nf=5a)ZDjqS$86%@63FA_FO{c_s}j1h^Wuv3bT?gv zb_}w57bs^T*$-E#Lm1ZsuR^pZ5<&LWshvE%J!2OcVJobN@8Qw2?(tJOxysm7P+!Dt zFxEjF&jS^5%Ep}9;cd3MAt*y6^Kjy8wz>Pol7<*B%%H05{SW1BsoFIC0#?y-oO#V$ zN%Fi{))o|t%oN?4@@Ae-r@hGbfU)!kfEJn%a+vd<7`PugnK*tuK@jP)-WmJRIuIUe z17w-XQL|fE=5kGBZ|69y7-ndn(Ku+r!xT&74Q1O#49znYe><%uxplp5DuOEBUGvH% zj#wKunQzho>XDj`~{WJoApFp zxpe5V%G}nhHGg^j3`qYwqwi7(e6^9@d7Yj1P&Wp_&>OcfD1vG)H;msiab9Z-g~Kyt z9Ra1BjuXsKiRUaNRkXa|ggd8PMleuL3@(IqctYJM6`}94gX(}sEdey% z_w_t@vD45fog9d=c|J>_DEQNqo^GfVEoR66LqsvJk*UwRqW77v&&UfG6LvJ13>OeL zu)^TH$8kwY^Ms}omW4sPp3Hb<)lLAhw&oS6)EIGDVg2%8^7&6}@QYks_d-k>aRWtS z!7-hVm(kob>e{NP{xGjR5n8B}j#(sqVjI+>cTXFl*LraagvG=EAn$~O4x!#5f)Qj_ z>HP(R#&AT`{OEiChQB8A9gpEMNzCk`&+c%)>`rnok5SDbNj-KMRyucYNr7*p;_)q! z>}S7-=RrY_GOZ)~Nn2_PBN>K(qM%(U`IQ?+MBuc3fQWa%>XH6@%v(tu0S=NZ6GQV6 z76m}YszK~uWQAt=i_2?fj5;xRHT{hY&gl*)nw$rR&jL4PIcgW2WIcz`BXqkJQuif(8e{JaV9!B`xbzKUdJv|zXq^mU>*tHX7H3Lx%HAF)> zGnkkb&B#c&?P-e zOsr;Kvavql5=Qa2i+y1%Bd%{V4G!*gegsX8+a9CrmEX^(ztwPwD=vtYBM6vM`hl=$tx2>{Gs$Nn8;!qy}7YVF`CXMPKCrLijEsd^HYW-}ZLOP4rq| z?gXlI{V!K_fw8s!F^0m0Uk#W7n16pjFbJNRAL_uE0%AQJa14DE=!tJVyn^MR=foZW zk$ng+)vmrez;xa=0?9+3H^@uqgh6_*9CRE8yW6`qt{kn*@iI-~$=t~rTf6}53^7Pn zhn+T>h^p@c5@FZX8AEF{rjgJ33e-6GCY;bzn?U5DPCyiCA%i@D`)=UKyJ7HZT7=nX zLDqaM5dmuT2Hqqv{zbnqByiZ@;bc6;-GS6X2_0teW+e=R(&_FTIZaZFuLzF0q@^$7 z-Ck`}LT?_`85@#mH=wjI+C0x54F_4Z!}S<|$*Dm!p-G4J*HogrfZKtW$#}wwwt@TF z#3tC+oHXWzBl|Kv8jzxM;dZcg&5^yT3SOy1CQ@KYB*~@vx1ot!?UY$sy-D|G=NzBF z{eaPRUO-xOUQ-T4{u|9T7%Mf4-%KOY)?HMKtH>pBv;8J-~IKXR+S-ygQp( zt(OGGX{0!lWBA=+7HsaA%wo+4{KXh;;%cA3WKl!}zC)aqk099UPHuLW|dJp#$xm#cE`bQyUyf(h+LN-Mc7xuu%U8Zt7 zEEq*rsNinHWj5qyd_N99sX0RKCz>SbV$FW51#(VrvLcn|7oEMkxFS(j6bT&MRPDSU z74jiV&EQR>s{_1Nx*Q;arbR;i=)bB16v)2&~!u{Er*xai_U}8lD5xdQFto z1Co)-fe>xnYKb2m)Ueg@Hh`V=(c=T`;%vZjFOdB9B`+ec0mvhH@#`^Z<^KO1nPE3{ zNEBCv%7o-ER3*7C{RfeiuyO~!S#ln-Ifk_b^hUAV?62-(Q%uEFRVd#{vUtDG`geHx z7Ox6L>|`x58wa)|&V4~|dFGg!OOF`fa9495T1f#H$y(+=^1#@3&YEy!b32??m9;47PsYm_|0EMeL=N?WL7Lpk$%EE1fQ3<+% zO7^jY+t^J{3yOLRXrC3}>S)J2n3XcbO{td8SL}SCCd|)!h_Tq~A1nWnHZ1!vJ*CRK zRc2fs%<+nRz>sZCGPAT+?whB;d0JuURLx^wMt;2;~iAhr|ZH0oM(tX->H`v}3mzKu)E^|s| zJQjvAaqOYA%@Rv)KstoWERgT_faH3*vZUy5rFp`( zXob3MWeCmBD`AUr)Q4^XHW8ZDk)Gi()0nUcBV>1AgyaZ&dUG!{Toh#rQ2kJL)c5h@=8C{dm?vVtQ zzi-q7SmxGA?;m%)OgKqj^y%c^@!~M(S6GX?(MYKW0wex zx;!9>we9P7ek>gRji60d+|nS!Ev52vY#c3#(c;U4P=22Lj)6d`*zn4E$+w7?lIlH~ zczaWp_SKL0w!kpcxN%0>pcEvu|iusk;X1%J!zSeA}@sYunx*6rLCmzOVHvAVAe1F zYZ;*&Uh)8fyt)hyGT7Ca1vu*E-4#A@Uo zEcb+Vakw&JkX~nL{nUgb{qoS#>#N-_klL=sIxflAaOPKXzMORAna{M|5U;tRZrMHw zfy8O}uU1F-paQ#@u$6HZr0M8;Tu#COZN*u9;`$0ujbUFl=^ZQEH`sP=TOt z%U_iC>#*_>-z!2#N6&_QuFP|G%@58s1@7R-~_$PfXh+j3;y zUQNV90=siz?q3+fyEn!(hy~H+u@yw&+jDSrHM{|}rF-k=1C&$0KRs5MWR&B*)AoN=G>xE`6mS<$oXx)N@n;FqlcvrHEro|Lp(aF zXARyL*c~F6ikc);7y8hGpo6}L#dbRdc3)eeS$vSg3&BCoaIX}*DQQXhoy6d_apUdi z%w#dQt1Wbh?pc=-eiC6QfIj9~Q|dlIM|)P~{ULd@eCUTnqjIWvSyClc9SH144PL+E zeRIZo@mxWD5X~5IrcAf{W7t+zzCu5x?8Zy4iMFlPbbs4;D+R0MRX;!7A;-nu-wz(c zXVIQ@^Y6l2m z2yF(pPMWh!J#v#rt~MZmUj@Bk*Wa0w_XA- zQ@P2NX5aIZq$%c>`~wgt?DKEXDE(upK#^I7#uJlm@Y8cF5lyKCfLDz%CDeb7urWFq z%Gk(|&kd-H6Ni&IYQ#s_f@H-S##eKVA#aiV{d;tR<-5f+|MzO3m+Ll(<+Z`Wl9o9- zM%7dnlXI@l=o>rumln-c-H|DlUDDf|$3RsKAgx8cXS0zO90Z>%B`~WG^cR_%;pzgy z`#A_tNg{&XpVjCh83HRxb7Us5eKNdl0#{y|q2cBL3IUh*)9ZJ5#gNbaaJ*B<h za~*q0f(Z6UK1C~4-L$xx4;XW^?;pLy(~I6b^Vy}Q+pSP57kpHNVnY$?x&34LTuwr5 zty0keVjNb}X?zxLlf&1`I@6OklID_wX1(tuWz2sE5X9Sdi$5r@X|+!OGy9F%9MRG=TJ9-ec`#gszdg=CsCo|CSY}2P$d1 z;DrVUazjB8JLwX$YXjkA;Q^5XXnPRtxL zgg8L(M%UZn82hPz?A2#63>HZU>4^?zKW5`hRjeWbj5MW&l*)s#+1yHNNV)l0z~=9zf%F6p!x=L(B5$NZca9zrnbYp@I8L3u0|C)2{? z*rBiO`RGjQ5o!{It{3}EQCx_A!qn((&JdskE{G6b*dkd)yetA5Lmbj4MtvgDN~8_H#mtO_)*XOOM9{&*h;=3* z(+u6VZJQvQ>%^ zSvTfezbYW4f4jfRiG>xxrdEFE*sptjxJ1X_%HZ&$n+%IRAAHAEwW1wKb!65;$R21l zr>bOav%(t_=tw$xF}zKXQFNNv9K>CfTsX#RkM#R|%un6@!tn)lHbgy1lTi$8w2StU zLNaS4roWFnS9=-i-@t{$^M#B)P|_Dd#puiJ zwre|!Ad=!9?SX32GaO77g=RI$y;;O2iBSkPyB;{dicd$ikK-spLc)@E4zxKoeQe!+ zNwusf1L;weg$RI<<>z#KSY$MwX(LU1NtL`(VDmvk>4FdBQ)id|L{3FNY2p~gc>JY4 zB>t_c#OrfHT|0n7yWmCJ5EON1)fQw;YU&2+lvs}>|I;io(apJtbN6}9p>ly`NpqJx zo@Av_w=niCFNCzDB3o{Qq7|p(;;WFgzcdxuQ2T9PQ?sSjk!9!brN+halP)0N(r`|p z#M7$E|IS1V?-@r8ldX=M?A+$SQY66L{Fwvd+i;Z^xS&P2bE|iF*YWls@Zs6!L)_ZS zBbm&}_2+`VE$kPVAD6V7gLN=K@L^2N!vB!Shp zH>>fFn5j}xG6n?SO2u^g6MzNd*qq;6st;{?#zsFVf&^}cN6$NJJ|uE1MpFUBnueyE zbdx=g1`iIWzk^!uihIi;WCVt(9nkw=f%w3GcsjQA6*#VuIH`(bW=YrLq?zf2C_>UN zHfi(axZ-)BCJO{xfET6Ybu&g`&bh4w>z+MsV5N`r0#2OUTpRcT5YY3J2>1ayYf5M< z$bR>~4N?S{@AevM4o0x_KL|mPwgFa7ETZq@SBQ!>hvRIJEgL6H`VUMNZ_z#Tv{ma4 zA-b~iE5S}+Z%kH_fHMP%;BS=9^ZwvXrY!O|9&{Cq$9Io;JW`Apxt375vxV-gkS4;w zE(jy_l>kt$g4_AvlAg^d?gP*#dq_pkR;@5NQw;+B%qLwD!5_hP*Aj6AKiM7H(~3Mw zjFef1RK_FtVwIrZD8{Dj47Pxvzuq7l`D9v*1W@c&+=uyKP)Ks`twv&?q5su-Q)}HE zyKTCqhvGX8UuvFSj*4PesFp|u%J>sCaZb->%RZt!2%`}+QQpD$%Ch;@+I(aJ5J7Bc z1c$|)<7hsg5=L9x8DYy`wD|~Jyi+?$-ZuD}^6rr!nVNoJ%e$M(xJ&Jx1IoV`7)=ai&hI zkStYxHYPYV&Rvt=@pJylPrOL{os$5Ix}tF5sXNrJ5A+@0zZc^ej+!g%P|=3og%(b? zeCZ1-J;W~?+Z7h6#jD75*-xt64L+fQFCI8F^$_Nfv$h4z1YIJG-AjnS7 z*v7}6BJVY8OWAbQvfu1>USo637ovhKmp~}D&1{*ExSNq<&UEreXrR|;~6NDtR(k|w4`eExSO&uzZHu50DxppCIV*H-X+ zbL%@t7ry^6sXWA#DwKS?)kbCi&-OvXXnS8WHJUhIFyGq`R{gGQvxmsb8>eC=;*3h) z=qvgAkH$qyx*XMd&s9jWKOvKRg5#cJsKO=dNvbQ8$NS|OXz((b)b)eQYFgs_U7Mn( zQNbw<*^zKnl^g9x{Nl09FNmmVIsS6!+T-#skhL#8T*s(V&bY<6x-+0IxT}FV=VXcm zQ^QxbeqxZ#S-ivyfTrTTQMe=fhJw^O=?5Yk0o1nmv3|JW$Wo`k*U-Z1q@Va}xV$x2 z^L5Qq$3Hvt{6CS`V7$$jytK$rH?iR9ev6a<;3F>`9{N_lXZW3T zzrw-GPpyc|qEVyYN+s9KNj~e1_pE)r%GdkJ6okC|LhUpDFM8Gu?>~~7E?=hS4*X>V zUejI5SIoB4A)LlCFaxL8g~7$XHwc*hs{P(yX`~Ky?vyw}ahI=v zg+Bnc3|*C;I^4uWfK_d&?zSTAdHYzHMExSAnkqr^zA!$cBRaM389ADGNm&C+SlsV= z$ZxPMQK$){FAo|_Z*L=ee5=~%10)wX1QcKy0Ia`l{Z6#^6?OT#c%P)GTV7VL(LqJm zAcU07yS&D=W7$&CHzRR1RosZA|Nk^KzJ2N`+b-FGg+w=6)T-B;YV>T?3gMx<;{Pa) zwMsT{gM?`#5|BQN&spoO!M5H=SSz(5xH3l6|Ak`v6;6w@&E_)9o~p2dz%RiEKdy4y z{=8~d^3uNH0M;np+3JNY4*R>N=+GvlP6>&F}n|n`gAs%x<^rSAR&3u1tkGSz1s=fwX<{mG_oZ zE(4IufwYy#Bm;%grAZ#6C15k`i+%%bhnE#*d-kn_ZnlgAbPcBsdO~-*Z!wBU)n!+B z>@1%|UI⪼=n+&_E<^O_N+)Eg&*q3Qt4$!OE?K2cL!u7mF)s>6da+}l}Lq;Y3u!% z@-CeWIt3l7f}VL=-d}H^T6|KBS8kv@IiJZ-GFjidNbKIeWn0Np`g1Rm*+t9qCHkRy zY=ENW-hTmc^@RNvSzeCfwOmI+mAJSbK^{pI{@kiz?Y%twgKDv|1qGFv@tdb>M!C!N zUxLwnyPdebGRef6l~j5-TAM_M>4^F3Wwo&ZH_fIN*6*8a9R_&JL*cYbYB_}e0!O7#pD*$ zu?T3{!r<}>F#}sqT+mxcD!nPeIIUyvcK*G{eF86@3%+dJw>aK)+r5J-!Km=u%-xy} zY}dz~`{3jD+%MVFDjxzU*4#w5A6l#l7^M^PuS71^Y|p@y-~5&nvOX0Y6rzR2b07*H?+NWTEGpCH5bpfFKm zK^@9iRDlsa<=3O~&4i&GJd*QKDtJh2m;?pzi!+RzjSVp;eOb=d!FtfS{eQdz4B<}d zaqZXqXUy%88i@~j$4w6lrVox&OB_I0%$oKdN6H`W;*UJLNz;!a@RTkQewhy6;Xp3& zF#)Ogn>IBwDDKBbM6vh9h^iGmMr&KE?k^89`LyNI!cp$)c|i&S2n)qLlCV$d4Qfro zdi*>7Q9G=@=W48n^QH!x8+YLTrkcb8$$+WOdOO@RCOvT{57CFh2>F_<85G#?o@Ske zp#Hn>tcP^L1E$bg<=N`Oh+)z8mU$8cu5GYOqMvn!S^u>qci2z`dyOTwW%IJR(XPJi z1Rq9U&3<;;<19ulrN{DRgL%gOd41Bif$R|rs$bZg7lH!X>Q#?WbzgjSDtTROpF2HI6DFh2&}TX?w@Uy;~3JC3qqjbKPZP7&LHfYa#)yLPihY*sbR)wvpW@ zlr^;>S)Cx0(`?1=rcDGG-84j4hnFi>NY5)SH?Wa`wS84ej79G!o~t(`leZ`XXYBNCrPovdiF2G&qK5%Q*FniDT=~MZ=HqOqUI#o= zTbN{&_V9&I24(X1mplG!f*k)gw2+drMA)MLayiZ8cpD7>xEmmfZfgD_SZ{6lrV8B%P8uoG%XA_v9Q2O+f6^m2sWDuPxK7bmKpZkZx7SVQw4DMu)n-@ zT6YerdwV2q@b&=>AYZd_5sHE1QupZKtk--IHo{sMv0WXpb$v@`0ij-3(n)pYjQve0+M`K13%+(V(!`zduVTF~CE!Nsi@GYX7VzYFCo>y~9 zgSKq+c0zIkW7${Q>Say(7Jh2M?WFCa(^X)70EZqMu@9umwk@%mI>&Dby%gN!o53NP z^XD$;FGcVOMI4OpL&`CObMob(F!tLcuBGQIys_gzS8uYXU+?sFcw}5v<8XWJ}#q4Npf>kGqry3oFOTV;Mr?e zVYV(?{H@2;TG80r-AFJ_JW5ODZN?ePZmo!*|CP|Fng9YPXb(hfF@va^Ph+iV-bSnn zSFL6blm!-c$+WxE^IH(594tAO4#NnsAO~N5zZHtWIB0Yx38NmD-(5miEEILMmP$$3 zr12KV1%_7$DEt`9Z++6!r6&I)UBR4(VXBN5%n+w{H$;_?2r!!df`a^0k8FLIAp))J z6^~EQp6^y~3)=y^g@JuAoux<>_9U~rIWQl6Cb39zV};*#*W}wZTtUWcNgo-~ zG%)G1;!+!3plmu@LUdYsTfCZ$VDwjIKMFU}7l&dPUwR$afF`N{pVlTqn+TS^8)UkN zpOeeU=14NH`8>J4u4(Ww2eS4)o;NOF7sWUI4qkT~O%_DATuRUvO*h0eF@h`YG35fJ zji;X@s5%HIr|g+HFzy$2vDt-4vvsUkCJ#2_=$F|D>mug8P4V`>g5B4r;n9GIZ*)&9 zR!7Sq%{^U+VQN(**sce)EV>>7rkiIZFK1MIG4IqdsPTn9)mD~y<>rztMpF?|VNuH` z@<98I8&=Tb?Qw=7i;@k*7;MnN1g0TM;!$jBkv25vI`TqII!46qk8{mpA~Rg?@Ky+M zl~~EDOX1k&h9j5;BpLRiix)TMzD(^C+RTkI4fX2ntu0Bj0Pb3 zG>Q(o%;%p&(tOaO1hcz(9$B7aHv|sQZ(CG4KjNkkC9sp`uQ0-^8|8PUB=~eQ)|azf zTxFzqwQHbBU8wsB_jXYdG2Azm>fiW@^17fTIf1q8Y9RtZVV%IyIIiV{gzg*P7B}8DcT|1+doC%JxjE{r782ub%dyx zAU`o4Q+)k&(k$b7)GevM2KF>2k90o*Eam`z;4{IH;PD7@WYq|$EwT!CeAPE z094hX&tvTjZ4X44XPXgYhY>2MtJty-6jY3JBcdL|Lom<#lh`gAuA4kH#=;w0yK%3d z`>)LOsW(S0i%P>J!(dJ}j+sHVXD_1DOWDXy(ASt3VaNtt=12MN0I4xYghcaCpnyY<3^2#rcm!vhU{uQ98WC>T zHwVv`-r3w|i)+`L;;hjj9S@KUIggt5@lX9G*^p{ax&hmAPK}?nf%32{^ojTf+^deu zH(2wJh>mv2!cGuE!jC6?&yB6de90I7mwD+bvB+kvH9foHGi*fFq#g3GR}&pvCiOZw0WbONA5Q$@Ps=lmUuY zZx`}C0KKnasW*}7kvNrU#KRb=xr}~WJb6ECGpNGYqDI1FN`MJ~B>3D%6c-t4Kiio3EdK57HkdC&$)r zkPT*>#XG6+(_VaRCR|YDI%gNuc3_Or(%kzBxLRju_0cE!gL=+ggb>00e-)@_n{gVI zr9hCNZUkL>YTjXBeHqYg22@>DmCM0+QcLBc`C80C(Xs{(Bi`(dr^GdL&`tGYyo@P^ zvmAseK~e=Q^{lu-vZ5OgQOcFHUDfM{viX+8?)$Suoc$KgIjK?(Q~&}m@#GAXmjR?k zMaUbrs`d(}nb)jy-;nXcx4s*QqVnc_fz&9#hLOLMRWP|+u`lc3;T(EY^jHKni+W8H zA5`SEH6f<16+A|BIMnvhAek26hmsa8+HbO*fYedbd(c(<=LlI^i=6TTCg-Q_up-u8 z0E%uDvx}l!GGXir^cwYou7MesWc-~lL?;S{H17Y;N>x{I3oQQC$vW}f?eC9fQ4HlL zoUDC5Klu@Z*TZd|c=;2F6HUR8e7TV~p3UcHf*-n=hvhvg@8~Eo)h%Rn`v$)vcA-5x z5}uqKF5U5(((;R2HtdHso^0gWZ=V~^KuABLOhE^u8gbG4+!a&!NdysJxlCk~)+vWO zAfJ;z!qJz%-~&06IA#%IMw9}|I|^5rH&^2h%iliBL!~2CXfg;rv&mc^*liQut?Qsw zp(#*AeEf3LMdR^Bi~LtFrZ+v<@S0V;d=rz?(6^AJmYR-uL5}PQCVC^cybsC!@|n@< zvzL8xG!LzVw`h|713++qh&64GDNP}V?*3)cm=Lerm>y#LR#5&c508vds2a`}D<=x@ zUCqL-eeVD?#kiq#Lr175W}uyrb@y0$0IB3AZG5F~ueIltaovwfT4;t|EP65MDHBJ5 z>uSQxd_da&k6_v(#|5|+Zk*#4M-cJ-_Uj4YM9q^oAq*Q5Mcv2pLh3mXE8IEHp;_B6 z)+qnO2Ls~8ueX!qH!XlleYkC`df`PFc~y|6WDcRFsQYd@dJzhCJ^rFp-Fppg5MpW5 zdn=6gD7eIp9t1CW9F8+vtd7n3JuMs@$1WgiDuxqCt0|SQV%VNYG<#`ce1^1P5W3Y| zA3qBOD-5n2z@&C;^&mY-|4q6b&$%Bq;>oS;WvmeDcPDXpv-a4PPt);f@Iz(^C=o8) zAdsHYAsH~aPC$Utk4iMNX1<3=Gv6!KyVDR#$2D!r;6Q;{{;NjQL|M0if$&HJ;2&CX zT%Oe?Y%AlT{5{o{6BgQi-8}wz^Jn~mr!#>K9bNX`#9jWThKF(005Zkgdokb@r` zQrp=oQ(aF(7#^pfv1Q4Z?#gSoH~2!ayVt5-OBJ#M@5eY&cj{OFsiDtJOZ}0CP@AZ_ zucW^lUb0@`Vw)@qcy_@mm~)0^%ln=5QX$x3BRGaURFydV0sKZ$inS^s@?d@^yM_>mc^|$qEFI=X4@g$(SArEL|K&ac&@z z2K1z9kPB_2H=J70P?%+iYoXbrJ#+cU4P-s4KPe2KC!7{Sqlb+U(jg1Af^ab}(vPhN z(S`L~dyQCPj04VPibL0aHlnuF;E<9GjM%V!Bkps{?DEp9sHbM& zI4!Kv?bnUdcnBthA;oFn;NYIO47?0=^V(XgvT86uZ4=;aYr?HDr~cMi9E&FP%Y;imM>}k;jp_LC6)HG<3GFC+gB{3oQpwDM)pAWoi?<4gM)!{5fMR z4;U(UQ3aR9l)=R8xsS!E6q7! zvrTF6lC{IlP7AMk9d+F&(WQyr$WtXnfu4FH>jD*dU@W2%_xVYVw^z};bE7V&igm1{~KiJX5Eg%DKkpT!%tW%#!lIqd~wbMe!?B{X4g&q?zk>eHX%Eqiw495I?7-e z;&jro_y`~6S}mux7{Ml^K=v1x7vy;mX~gvdpteaAsALz8qFiIYP|wa!5xNP=cO|(I zC!*`*HsUjQS5G5EjMn1o`@R`PlPnIhk}a$#v29UP4N%c1;Rdwx3U^bwCFgZ-ZiUQE zW8SQKM~*M=xuMkH*eR$s<a2#1EO!3>}CGuLOJkwO2XDJm%j}O%htu-6$1`@J}X05Dm4A}gJ2r34w8LSK? zvG6rBh8{qMyws+2Ju#I)%9AjY&RO<5c)-OOWzfqcyZGa1O6oGC`miQ#JE>z(CS5=S zZ8t8fCXBa&4;6i6bsex}$L1CCBga}0>diy7lVKep5)(`3fa8R2qkLdfJevzxI>5!G z<0pIGYQ^UcBIRnsegZ?%@jE73faNaZ!ec?T)JDM^$CgM9IKLSdi6U_=fnQ-{YhMc< z1glySFyZv$L&$_KxedG^f0UM54R8CSPaOv}5a82YwONgV&o zBGXhjj_#BeRl}B8BEw4|cw$Zk_WE6Zo=z}q?hjW6VDe%g;TefyK*(>hBCJ}eWjUhq z&{D7;9rANd=&TW@9~C@+0obeHjNIjyz0E?UuEg)1B>g|A%awq--{yw<*$Y_F<)ojO z8eO&wBps>>CLCaf$p>jy3H;X-DiidY-7~2X_6xUfJx57J5}3v(9lTIHk4f!lyLi|1%6nTeG$R2)Cm6=3r`Y9YL0WcqJv4Mayn1){cPiQ>3?DKN6dpD9y*QlEVXV?<90WLO5d)Vax~;7c{@ z=ww<^5*5AsJ>`2EOa{>04$<71c%V;NRs?@m&qt3tB-vetsG;(ONDx-z@E~%@G)!;# zu_jsCVb;h`Vy!Lquhr>Tri}Wv6|YBMnXmN>6s!dtk`j z?Dn8pCmZdy1wl*dr&NV1T_GCkf#ts+Sl6Vvhnmu;N&ghEi2_Lj^hops1TYXc=53e0 zhGCsE7!3GB5A{eo=ntrDrV7@HTX`i;MYR(+K6(laa51m4_sXdbY`gfMAgHP~j0gPy^XY#JJbj{FafDaf--XJo=2&T0K{(5He^Y9FH>C{*O1?}^g1`qA8LqJlSZTq9S@y#>^`w*!+``&8L zIC*s@Fy)JEcooY}ly;Tv*SciBG3Qxx^Iyel!(@uzeu7f^Zj1J-9sh03&KHLv8deQ9 zu0JWqmfY;EAzfY{7sH28u``EkMMm-QvP*}`MA2k?P4P(l6(jkY{H-M3nI|T2o%h3n zTr6ov=YEQX7}U#8Sf2x`NkL=&GCEzVzTN3fe3SvTEYsdqmHuVFZzckyYG^^r251x* z3%}b1@nE8?gcawtPOFBN(3;>ZUO!S{YGGdDBD-j#qRrri!?ZR3$waS`W5=LtJxAZq2uY8%H4!)35UKd`f26)Eay5@Xj1Q0?Rihn&!C}h zP_8D#eGPG}^%iI-pPzp*!_TBV@teJ2WgylBcwNyXpLOGP6YnzQ*;lt|x!3YFMr0sf z+kyFxwqG2D*(z4sgbL%bKK|XfTSa6iBlkITR-+eWU`L$g!yw;q`U#+DA5~Tga!=w| zq2b5tlkH#G7j$|_rH$Q}x8&6v6w~G!s?pA{!YjuJ{lEjlhN`TR1A+&**h%f|U=UFX zYlEo7SD-}RKUgY*==jm{1S<{|Ysc+%eT7*O8BF!`+aG0f^khd=Jo4My2=anus(Xw< z#}_~AX1)28(%xDUbwTDgPOd=1cJtW#UVs6AZvZSL_sST1jov7;1(B@2xj*q;729-N zA7+50KcrF-_qp-QLNp{>9{T8+j)dHz)*QOavpF-XOM_X|uHAj-i9dj?a)%&1bO)lP znc9_Ee&M751SXir7lv1aeJI=Q%&w!pXlCKSV26g9hJCd+Eu zR$b&sa#g%17R0W?Kg-b|)%q0>0C(tac7MrRhx!p`CyCDHfF0fHcQ#Y1e?l`OAP!=$Xw07^+>Lhg$i?s_`2Ba&EOIlmfs zJw|Bq@@CMB=lWrJ3O1@4@VpfN{6zG8YkD6a&SZ_u@F*Z>;i4h%n6TgBtgt?Zy4$T| z7&aVDQkrWM7K_aP7<<&t{&5p!X(yh6j##Ssi~20Xoo|Y?8JgcVCl{-<#1x`a5ER z>NrwUDnY;=@wgK=KE*~Ya5t<3@qXFj_kNw+jrBxUvQrudO@=?oga%lh(cd+-)HU=;Gb z4Y`4kMIa=?W*B04D3AgL+yBxkPQ?0RHWU)k3tJ{ta%&aukDw~x1QOtoJ2o`gjP@}? z0K0WjVs$C*X<)N=&3lL4a5^!#EaEVx%y&CXSUu(F3&DKE^_ZMumV>Bu9^88g1%|>6 zG7%qTp#`rUyXB@LfMphpIF2^!v-A2DMwhxl_aSfy`JE;dM}1iB<_mS{XyhcZ#4Q+V z-@i~jf<$pc9}&7N@1b9tq9Vc@11B$`ZLBn0r@pZ|B)`K^t){WWJa9l6%D?H&`2x~t z$xeeiUluObqaQG2$nk5tHSV2E$}6h9JFY0I{v~Ne#+VK!tsV%hTi3uY4wUiU15(l<}&MpH&#K|+Awq4e5y{tlF~XY<-ziF=R_hwAxC9lj3KZD@V4$C{93HO+XU$Bc_N-eGK$ zMST+lwJf`;x2TaV93~uT6YsNNx-P?VEOh}oO(-(%hL?PK^nWw@kZ!ug$XK921Dl*7 zS!7j=`T zbX>BcQsba|6EJP$1?+dL2~UR@;6T{hnEWzYu9swJy7AFVFvWIo9*OBRdA}+Z^rD&{ z{jALcGP0~zSzwU7Nxx`Di7JBI>aK|bu80z8HJhUC(p|FfBUJ>CE&*j#18aV-PmGkF zb5Sail0y2iCOvlC?#5=S7nI2DP?pG9tGIzeIfw$$ryP|r4USa#<6I}|rZcrm)q59Z3CMiKyhU{61tg(LIWtwZ;qclVUrndFpq9M)j6G~ zKQ<@r9+<_!H&JwlK9XUPu?XNC46iW;MKVSTI+|5uZEuyvPxy&F%oZC-`9-$vv1dKzfma*HHYQuj%qR4Vp{$BdqWFG+^pVX>Hjm*wd9oTsB7Ex8gGZN5vDdUz1? zNmO5Pdh5q|7Nb9OKn29584D&=Qr7aZ(daq_G=UeHQzMZ^#;-x`B(rpIkk-%gWrdvj z@*xBtb4J1*#?zgh>Ys;;I(V5P0S$@FF}Z21ZZ6ZMVKQ3~X1x`=>3W+fR4{&)#mHoq z5p=T?H?H#HW28FP>^8>k7Qy4NXwU#89HT&)VY+671GcPd>|oIz7BEtp$eAe;gJu^^ z2=otmQ{6D|WFb_F<=pmu4MVR<^6~xZ>7`WXd71GT^B2IW*$bY3K}ZuJkNv$07RD8e8`l2t7jAw|VfBLW0Tf~5hq zDBK5f1##!4o!~#w=QBg-Jm=jlA5__}>HazR)c!l|-mqb}YQbD6Y?fucxS9g`c*}Og zi3gh(ia$2q1xpwGPQu^F7as8|hj;Fp72=win*7%Z&iQlIni-W_PuY6(O80>G?q zL9;cgdzOYMfV+OUr&|zp1*Im=t)UT0 zYmnzm<3`itg!cgc_+?Li$E@Mxx+jN0A?!HKZ7lLgEb4IMov;;DGigc9fbZUHG{vx% zH6g;pQe4ba#e{DB^Qe7C+;Uw^bG6+1UmvQM6p7KWcPpgL5G;qq8+oTqB(mD!vdN0C zSt4SQ3Kk!yvH*d|latRHrNvU0pWUg91xE39Ka+?k!<)5R{zQT~W&MTHIy%dR+y6Fz zvL;OW!`OUHBdVT>6?>t9`VpwE#fc+M35nYj;NqN=FzVx`Wp8j$?^_Qv=qRln-5R3) zS;Ms;{ImZ3AFRu#9X?XAiK;~e|BhKpj$FI4b3M5(j@6~2$UBuRaa-z)^4#a)v}F0g zGxA%B1n@0?biY*P3dJFYD%7MPj=TH}f4#VDv8TuRu9K$J0$vwrASjR_{nuTGEraKy zrgxoT^hQATmeoob&!I-cf`x#=#oxuPwE$Jf1xI%ZLVmlo*vajbJhAcP3-tPx?;7pl8m@q|@-i}aXnq^g)cU_QeP;>k{ zUgviFQH9KypEpe~K%c(#pz<%0BB}il!q0Y$W+wNzROrJvv5d7QXSBj%7;K@!oL^At zX)uHA;zVZgwk(c7XKySQ3p<0oa)7v)RU83Fjz3za77xjE*?v$)S4_8{Au|-p zJ(w`RX@EJRZS_^u4h;ccOZ!XfDYL;7Q*k51gO2jWMohnx)ghFjM|~2DMrqd2Ox1>r+47R$A}URaK=Q&H{C<8>JoB23t*qH z0%q57oi=&8KQAQRzpz$zPp=_IVFBthrD^jY|M|2aSgX7m+_YmUJwc(A-gKEe-xZ+W zB@&buc=%lpo9JB@o+IA7UbvvK%vhyD5t~n-a|h!SI$l6spGxx3;tXdA_TC$Av%caJ zZ?iZL1J7{O5n_~y|Edc4w{87JT&r^Wi3?)NO%5RCTen zEnNR6nVA~yA994`HYD0ELQ~wbxJ?_x(jWsiG>CGBS_nob1!E|JPO0Z~CQdEt3GqFB zXLcAXJ?;P{ethv;?)hLUOqGRozgLI!n_KT@j-$ODhLG49YLswM$`TssQP#9;T3+D7 z;%&rOQ@Mk8KvR;OJ0V`$@4Pz&BiPbNq;NBU`mULKwFgIK-R9_HZ(lm;ET`a{tqtZe zmsu^=9E8%|m(KazBuG5X`>r!fxI^iUdc75L)y;FGaCzxcecmqdd#oNPrucrCEyofr z&oU{Jfu5<)r%G_WR|m^1G^ucHlZZE%E0op05Ac8 z-)txuj5nFo(Jt_1rAuHt832E3sQdK?7e0wiyjY&=j5DyQH=W z1Z)^zRMASBpypjGXwh2et0Ke9Q-$+F;8Suy?<0;mOA89j;o~m8_MB+s*I{EMl%(8v zT_jh!ozSaohp<{T=O>0wBqAr1aFgS-a=HIPdK%l0B+E*-s;~ZMN?J<*9p4VpOG^ zN=0zIs7G$$6saMx(A2}y|6prrEY2~*ThO$1ge;%(^C_@wEq&S^m=A*Qy#G!Jewj2R zY_M@t{do<+ubmD1LJ}YR21njR4yT}hVA=D2r|cT#SvoPtnkx!*jnjqc9MiDTd&GOM z`;p^ZyHsoY3jR4e&gugy#O{T3{)$6=>yJBu}Y=T;haJruXwkjGFX_OkH< z;*5W=765wS=*LqqMnM263ljitWIPqRVV-J2izF`>Hwd6p)5*B_jeebZC`2CXMA21+b`6@_08`4&MI;=Np}=I`UkH%r9u)k^=W!(c-od#vcIX1W-* z@m__Ed^L?WE^wSZnjO7SuE;cl%y+zQDLNWl4HmVtqq{APJjEn;ydzh~Kp;SkcAM}TVK~VdKfh+gmN*!|NMHJ;X2b%Qwjuq^Jvc~U)v+$8Fvj!1 zeAXDld@rhA42$-A^=mhRKAt(X+l`W!4(XzlY)N8R;kF+6=b@kP`NCiwh2@0V;%Q-Z zCgREyfA5W;Z~V4+uX-JG46*h8JZ4^IUD!BvC}-MY+&i7Sol18dQs(ixuQBO-Wws|8 z$9*VsLRN~wd4b_>rF$RETRU@%OcB+PbG#0l4#MQjXcJ8-haE7n5OmPF0`Q9sab{}n zit^vR6@W@;jQ1a`3>c0&U#gvft8dnGi>|`9l;Nb8bz%Ep7uLbI`y zr|$8Z0=t8dJ%36{q+0kR&dS)AhH=~EfNC6QVb(mgq`HPKCYelcyxmDw3 z<;jnb7I7L^lA)cf9?H-wm{<3Cl@sGj0=xQ7_ywHEU7>QkAL!>1Z6M7M4?AWRj3srv zC0u620FSi#vgsWQQ6u-k$@ky2SQ$ zS&}$^>GEdVd_3V}T#`?sISyG0W5Mp!jvHd5gf8><-kAd+j&zt~o)!m|dqcX8o^du5K%(iGXaN5|0Kj%#LG**VitF@1Q-GHBfh@O^V0z~LS~0QQ8taPO zIk$IeKM%+B;d+xIxAc&!ONaW!Hh-enZ^OM_sx@mSP;F}Z(2+neHT&B~NKhyl34>rM zv1QLG{eeCR`_a6sb#dVrMhLJJCIhM}taVJ(q*XhVz(#VXL*(JG?`hBPSwKb>emMeX#%GyL1J4`aR8 zLTa8blM~HMLyZ0^t5${}ZpWXkQMG7ri!1zK^xtV-!{!K393F>&AvSzF1Q%6DA7mQk zWWbk~;faowEh#4khN`#8>*`Qv~|#$%_9@M)dmtQarT+9^%$qax`CPYKfzUD=VxFgl%tY zF;(eypp7z#%&${xK0$xxoBidjQ_fSXh&L{59D%yu*(0iCS6tP3SRpl#55Oi!JAaTY z%r@ov6Z8`cNjU&?x;xT9Y;Ug3c*Y-_SqqOf%V4xfq$DARRN?3mYMQa-8U2j2XP5cw zTz`?q=udA>8u%ux*Y!>^zdqeZobiX^X10-Af}<7$Z5yWxr^NL{Vk0 z5T7sskJ@vPcHdhC4Pm)1XqayKz6e(2-%eR%vz#%b)hF7mZHi^0R+Ipr=m~GXvBE`Zb=!*oPceZyeszKza>Cwy ztF%-gZ?Vg1UO@;ab|&*rEd}5zr+}Z(u7^fnx?s+Gd|Ot^zCF| zhZwOp{r~pGmoY$+3#0;cp0f^b_&Ktd2P56aVXW5lrpK*!lSV)S;qtjP{k~Qj{;H$z zQLt?c>oWNCNmBsYEDxkk)gEpUGclS$sJ%>ohy5NPfsf*F<=&~QQ>LHDzU+%~66Hp>z|4TUcSf--7fgl=lq5L6bP8%_yqoHV&sx?nNI1VCi)Nn13-mq?hmk7QZo;2~yZwrR;xO3;DsbjBOXGQr~c58CZcaWDP3EFNghcfxTv*$1FR#KkRjTImhq8TM)9 zZhm&90a?t;ag4Qv(up+kL+^51=*w%qo(sKE_3RI)l~0F^7K^KqGbO41tY(xuQ}-9d zPyE~=tQR@gAfg5$OPl3!izF(#Qo*ch%GTDAnZe1QeKI_1O1+=F9jtFCB=*4GUJ{V z(@xd5BUc!i@nU9Ryk8YOeP6r`etjh>?X!ml81>`Z3buwHaVZ`@eJtyVP;GiM8Keqv z&jUcz3bco*`BZiBq*_A4?bBV))3q|Mo0X9a6@MaQc`B+=okL|PSSninwraKFLGg!C zae2jNgjc__%b+iJu*~8VCH4U0$hGYJh_VXAT*NI(C!=)0DX)MjK=>J5P5bGD`P%0$ zk2h?ZoJu&Fy34^U)3(9~tHPK|KSS%R;u9Vfw{)$C6ku{9+oLQ+Um+dN#JPb_^%j4Y z0^IAFImHvOn=7pj z?r|z}56{IUp1q{H9zjU^Ld{(}{b}TLA=e$y_oCk=fXuXc&Rkg|mpv|P8@lA!oIk*6 zBT6rjkw&2#d5>~2TG)QO276ot;;e#I)$7WhOR@DbL|k17Bt5g0Rg1=i+NSF*U^slL z+SOrKBP@n8`J>oS*sq$w1FzI=xsAEnPot;g=2K9T`d3qQQr|0dTro3PM9*}7V7W6b zkztFQc^?6iDhJN@Z<)1mUP68uF2_$cHFR>vOvR=_&((lM2`$kM4{5kpK1*{ z+R|6lb;fEZW3e2)*x82IO{nqk)z|%H4=N#iW9{tgcxKf%SZsE9PNb)Kd7%kVraH0$Wh+Qv7kw_)QmnEwWL>!i7?y1t;k8Z|-I zePT-F&ZmL7omen;iP`_%^Pdz;L<{k!=@%p}f2r^2Jqj@)m|y4sQ$op$pL6v=WKHSl z325htWD*;+;s9&Lsqcc7N+G1j0oUGDDgM(foZoBzh%Uv(sRi?a?TPClJ)!0i>p~GHNXaMvHU|JRdE~PSA%&^pstJ`)zMDP8Uq+ZpHkaYRQpU>++%4z z>2PdI2PlZqj^K%PW^h8cJQrzVcS<)0KLJl`E0MA-r*Ig~W?{>g!7z+fc~>&0!Iv#A zB_6OOfV$m#$3QTg1~%Zj!=(sRgYxMg`J+CyEm^Bz2TXgEx9 z8wM5`3`kRChp;xYTN6Vm=zDo`gpm7N5-WX6M>R772P4h$2S`8GFsO+-z(dI2e`Imp zHfj;hOJ7o&{LCgl18rkkY0)s5#gzwLwp95D=3A^i zQdX=F+;Ht4OK!LVsH_|WOEUPqPYB_r+Tob=mfSP26tprd!?H`^>-QYYMC?tmITfQ| zMhzDd!#5ea&eN26N%0r^o7Ww$*(Lo?8_HF3d5|Za9mep%1l%DDv_z`i0n!XBD5C~> zS~$<{BqL_L*!~i`5W28<*7USGwNzJFW;BCjg930kc9~+g(z=N%sKHYlK867lf!s9` z0Jof&WZJXZD@>IpH`VCk7s*gqT^ubp*@Cwi`sZiHd#V?Jh%H6yN>q|MY9@2s9N9b)MJoR~IgrLT{WE#5&mo+4}lt z!{04Gp3^5XJbfMmmoqgLo>5fG&Y5-$CCXhOk?*sO1cwPUkvdDvn_8_S4dK1yQ!q=r zu=zF0P(8{(2?YVAYsNFQ%Xo0V{*IEr`i%GKyB&EDehg{wnfKG;$m9*?Y25pM<{ar) z7YnUNsE_W14C)|&3V(0w9NM{cwtdhI6b@^?w@8!SVYq?H%Y$uZkiA z8{wb&r!}3#hwJE)?IextcU7`~@WACTVk*zYDvWZ2FiA_ZRcTT=vKa+zm^ zE$t6T@N0AR60$-@E!yf!**C-1C4OSPL6~gYbXD207NQEey7O01`rx1O1hdhhZ>S=} zj%vR!VN|_v(5jlUsz)~)ArIv`MDy+@>zRqC$6gaF)!uke4V}OGE`dMF5U7S5ZRby{ z=|PLU!~(DqoD9j>4i7cY&<<`$h&!a zp-bzQ)Xsz6yChtS3p0tb`X>u%i!SQG3>Ff`7au~goKknWYuY^Vl~pe99STYBwb!`B zg=HDT{u9VrKxv&@+nW}AM^Qqb%>RwXy~Tq#M36*6d%K4es&w98s2~m=?9|cG)lNIW&kQ4ds8$NQ58O|plZO_bW{&Zna~#Gv ztL!}AS^2UC10BKz5=s~)!cV)M!fg?O-baQoR`y{4>juRnwN3pBhFWk_CTlEO^RfAL z?Z2rsMh&G7Q(}dM_Zsh)HQz^7rp;${#M>(n8S#owFE3{>@)2$DW+#CU!+p>Z@;j45 zJCdVQzCY(ZZX(H`f!I=8NNG^yWm2ipOf(Wf339dJqACB@OLB>jUe|5N7wL3M!K z3c9g?tPj5&?965jf%vc}odmop>f{Jq$`~N1dhbca4XGy@jW|XI%yHV7{FgfBJHB{$$&{uJ=xiE?%3J0uqTi`nH@O^?~LOqRxaA=Dye5_CIg>j^0S1sq(Q_$n9b8KaZD&9W}bLH zA`pTsAb!=wi0_qRsPFx!wkoZwU;2QlTNS2u@b2<#{0EJk$AlSb)p4$2e1+gBr=d^xB6sYGMa&?L0ZTAYk^Nn;U8APT;(D6s zn4(aN9@Jjd|CS+MUXCF{&jjL*^08Q7vbNW9E?tCl{6&p#A9J7qdv(OzIm3z6ZJA643hrm#+}s^8nvAVe@fy1rJY^Q_%nB4#>FN6F%lXti5au+9{i zHLiAPBbKgru_fsa8KN>{e}IsXH_dq8u7^s-<`M0A!Hr_@>bSP5+lfWwIlu@t4yrI; zu1dUo(W?>kZ4pHWtwZ9+Ad6ha#qCXtj+a(1;M>DM7fHDmsHH1wzYiM_6tjb!)RIK%LQT;8MyI}n$|{Eod2$Pgbbnstb=%$g{gAo2qs zkoh@3SGb3wabQD$;nbD@ZHqvnC(M`AfP6HFtkP_>Ei8+RBZjoQT0Bx6|B7t37BpqE zr3YePmjDe+)iabug#(~}OObLG=^PCy#o*ozAlXS{kmrji1sS}>EsShf^jRL}D{FL_ zffF>b8e|Mg5G2V zn2iMC_|c<)f6LKa1>X5rH@eots0@@&|4Xi26&>_Z`whYgM zp%@JSuUeikrrXFVU5r1!D3eraRENI2Pn25Vd};M_I&|rmvLU&5SBmb)V$rdes};A_ zn)ivBM$F-E{TTM#yrmyO3j5pcgL@>l*v>Ek?N#MVoFYLU9x22M;18mYY%vT>B7e5U zPXg*0$>Uj*uPZS+pVE~q=$juc2!C73hDmPlZf!a{Vk;%Ll-NAz%tE5oIStwe);I&G z_82MxZ?8-}DD7-<9`@daI@=~$mSg=zN+_ESG#ez$o6U{O1zr3?w~#J3z+8%Fp7ITr zo-1^PIc=`H;ML`Wu6miga>xjVwr|J;N(!5yE)eBFbN}ZB27NDdDA1 zCu<*95x#P|pIq3vq9hJcP$LOItovgJv{io*;b@k-B1G=i{LwP{Kp%plY@C# zO091)Rp4WL@q{q~UM5LPO0ynn-%nL5pbS*wdkCQQZOpeg7`F4&XRM}FsraH%Ic6-W zz4cvwVz}i!hkPcl&nT4YxH0t(N`X!F`vrSHk#9Oi;iYYg8BlVq^5~RNnUekprnt*4 z126L2`rgkgW|NC6R!j?_1Yo_7!D1psxA=m>{CNmJKG^~Y zw5T74E(|EwrTWiI#OAihzZD8&!*3!Ym|wM4Z!Y7nARYUoc$hg^vu|~cUvTT{*`Mi3 zv3C>VR-Jpjni-NW2B1-mcMm#&p<}{IJ9EGoQ&X0cj}#)OHzO;=>Dufl6szE8d)Pj^ zkA0(WVrYQ3`nr*jI2e{t#KMY80OZUO+SfQgwB?CQmub4BX$AO_*zSyxpwZW^HbGt4 zC{?&hCs}cLSBiqncnfE~cwk_}`!VutqIHW3e>BjJC=Wr5QXm^jsgJgkmDyEkZo+Px zeP8Tx<;*?YoKOYJO&R2)FzI&D>tS;vFu*buGw+&r+1c@&u0nno#Y%R#W~hbZ$}c`_ z+PO&Bj-gNneYl^gq>2b0rHxK2K1LUT@ucdzM_{|_Mjz<^Vl4Zfaf4*tRvKpPJ2%T= zQStno+cS$tp0xELH;$%nV4Q)CVDKXcqByb+9djZ#<43@wfp1jAxr_pwU#^SBvbTyQ z7)!BoD(7ezpP1Myt}okTK8%Uo6PG}pND&;4*`c=_`%LVo=L{}fM3DSi!RAc`-ARmX z8nHy}n@Nf_T3f5hj;88;uB3;?-#%=;s?V}6v0RgcF3g$oYu@3#!)R#!Y+R8A{=kXu zFK>@booXkaUpVBwJ^CpB&%Vb2&5PF}1ZH~ss+vbK5u{|!fM=edxcq8 zH|q!K{mm=Gu48@yO(!3MIb@1K&q#12k(tJb$lR3g#~3ZEjOt?djrPN5b-0 z$s$xA8^)+%sn@de(6L6eHVOaJm>0?R65f2%FY00x1!H4=`mpWecXHFE84%a4`-3Pf zFjkQQ#q@DG=$0;UGb?0`mM4a8@x)E`sD`=bWhIlN zzv&`(EIAH(h#HmKWN+_^VQt}PpE!su5&HS{#g4du!t4n?Ut~epd5jj^mgVI$r&1B_ zxFl5pMo|T)I=NC1=|vVNJ@9jjyCE6n;i=&3Zc_sH>aJ0&fspCac=fl5dDEu9wlvaiTDiB|mkF}bW7Bn>2j=Kyo%vu-nz zRJQR0v#Z_I!k`B!KvjiBB_8HWU=biudHyIlxRnh6BQtmlJZq-g&zE3!zS+!{3kpp} zBvNCR>%;&WA+wfb0m!B6P{2>6{DDjl7hPfj?gx~I5-uaxp z4fCy(j;K}@0U{3zT)@lG^Iy_^K9Op3m%mc0G(G)~`k4q)M{GrLJ>ABKb)_YFN22eM zZ)PGl`&e*}I#F`3m~rOE>u-UvyLC`bRVVVV9YeApsFfZrUv7(Hm2Ge}u06^m#=S`} zA|PbNAd0Dl6&#{VV~KTj@!?BBoflrr6}L9 z&vRm+y~S6L5&yZ3%9rUp3U1V7&r*vF{01r@ELq&S2f3O0)%uQmE^y4~wZmF_&u@0) z#^}!dO{K~K?8V?o#T9pmLd9;SWqmzc#On$Q=Td!o7k$ygLT*2JM%~-@zH@Bu&)<2w ze(jy>I^C625gCpneR%3H-@{LH5w+yvBZ4(OJ&Um8sUXpif%*L6Kgzs&h03Uh@H*DR z$ShXbPPWSg!~M@h7g0W-wX7rkEONMtKDC&8{p!>?yz!wOJ{7%+aUy93*1GmvVItY zxwq?uWhqriCh{aZ@p?@TCbCrpuK*@mQ4UfidNaHIL$yFCdL#Fpg(GPrBwn&y|D?6Z z1c}f>k>n%pHPJ1)9iga3t8r}Vp2B~7PN!Q=4UFZ8wYEK%n(0PdO4pOat9-)}o0$bq zc|vLYHEvJ{XqzgBJ#umz*(u!NGR*+5NOmB8yrY_~>EWVSagbH~r6oCz!URA!BTi)B z)&Nd$O^1o+rg^*k;kIl&C~^UQxfJ>SI-o@UY!PM|oEh#(e?93cu|TCy2~r}guE>bI80xKr@)|FWXXZNoZQ3xqK zRwaL{gRY&SKDKo7C~;mU^0em;g7TSacgCoqaNGjTcsbmO}PvIO(=$+)HVW!=?5G)ZW`8d?#g^R z;&m%(To^0H3tChq##Ul5?TT=MC|HKQQZOuQUIuz?{ihFC5NMM}kto0qQ^8OOVO+@r zX4|R2WU=&(-P~4cN3hp+J`>r|g1nD83sL$C1#n@w=c0x>B2CP?A4izxV47Ehsi%A^ z4w-wY*|OfE)7h`UPL4i1_pLMx8eT#lfd66`NF#onZ269&Uh~-iuC*v($Ih%0lurD7 zb*!MEiQrF1v82Wml&&X%7GQ>K8n13YZpZogu;WHht{PY1O$~`#$(`viAIYC&9ANxw z_9RuP=j-SK6e9%xWng4wAuNl5)f5=thO!rr=*e4a+vw^bi!LkHnNn zRw44HOilUduKNEBo$od}bYUJxupJc$sw;Nlq0i1iJkZoHlJ&&4w@W^|GRLgM6-Z9B zQ(aW&=rNW&(onqn`SOdD^Th#fI*8@%1dJtIq>n^_Y52IgMZ-Zh`rF%S3(!*G33v{c z$GlCBrfNLa*B>)*f5kA5rpvHvTt!AxH>+g-^F2Ltr{g`^|^P_a=1fin8n>$r;K5col==wE~ z6+JmHFGHKR3TV^(RTYEz=E*% zV)T|87oQ!$Nbw|r7Yni=Ofe7{#SL2|P7s#iq}NFFobE0q>$M!|`%VCLaTcc;%y>l1 zUeOS~gm=+L-7rNij=OZf<#Icw*3{(rqDC*d}bLZwEDdCwq6jR8x^4W51S}#redm z;s$XW6&swJy}yfv?B6G=vHyne@G?NcL4_PTAfkCbr_rR;tN6R5xFMYKn0GPa9HLh( zRxW9#m2i5n?IW{5yS-FvZ~oV1jx@(mVMvBqJoAj)pt`{M$sBzwZX>zH1wx`~E0{M3 zXFUi~GP=)rZQ6*7iL)M;N#0#gBMk7eUi6E)p>4eI~V`b|2MZwH`c z)K`Cyke!0ReySw+6R6Em-0x+ys6)Ae`7y$=_TioHA^`wX+Mcs`f) zlXVZ%#5-xMMuqwr2)~cd<|;Jri(&oGxSS@8ixllsM&*%TKJUI~ z`2I{ZDT4d`-IhGimQIsd2gE&TONy5Li$qP~IM`uVX_+xWs_~sENI-?#0KDOXp+(a) z9YNjM#>D?dL&~){08SG>Tbl5qF6NxAHLmSmMW*)8&n3>;Rp^>!2TY)5B#PD>htK-$ zC!Y}X)|AW01@F<>j(t%cH-sTk0o#5YA1P=ocv!$Rnp zcv-TeviAtdy{X9OTB@xqH;~1JI*6~Ln19_?dpZ?yR3r9+?)*=;eKAqK7fa~&JU?{n z!Mm}9I(o#w_nV`3=Lz`?Yxt*VGk{7$)JHXVKx$F#F0Z&5!)gqng3pEIKW&2m&4^Oz zNpfmjn{ICSt-ZrD>joci!U?rUtZe@WpPq?G1CX0sL0@|aWTNFvZvc1c21hc$HIWaf zS)3dR#)r*`&Cw%BIb#QjSX&RV5;-;w4I(LDs40X~Pfr{B1bkG}Q*Wy`w@U;F?L-zE z=t82A4uVl{P$kz_yMyjD)S&BGI8M*CO=_M4_sy4g>*9UUaV2I2Tz-FDW0&$}Ub=&& zA3acfgRXo!#PK{O4@OpjE$#qS7uCn}s(UPc@;c^(9vHQVnp(=WGH-2&pe2tVRI1aj zp})1SEFtRV4>b-L=d?2|G}KfQ-AC&@bJnA_1}h5=e&d;{1n@K<5M!1@vd-{Zk2iXH z)zRsY7b4I1)iu*n*{A|+w#Mqf}Tr-e0u_y6o#VDRv)w&j1 zd9^XlJYKX`lL>@kPbJCC{@eZu?|CW9D;)SDNQ9DtIk2%vjaJ+FO*iF8L(Q6D;b|Aj$=F)AfkAKtCR^KQ|@29|HVUdWQ@OF0pErogY?OX7y*gN7;c;TJMv= z#Q3aCX+haIiUJbd$hzNm>a0g)H};UP_`*U^>5X@D`O2pn{iJ1rO&qppzU)evYV(B)#%x)1Vs>{(hB2|fLSNz^P?R>A^@6;_k&3n-J{DiQgIsBaO z@h&79trZ@u6`u9bM9MCmD~fh=@@YY>OKO$z-4m*>E0s$>C_Z8M^v7CMhqK|ZKuA8b zsToem^@1tj%tDyuZekjP-{@j4(}E+o`zlV#>Ye~rogRH>sRt&b-u}A%?m^0JCa?DB z=s;gOgJ<>C{mu17L@D;z6ZGNv9rO6&>HAddz2_)D4I)T!Mb}x&+o&-JXy7i^-X%30 zV}g9z&Fe)5$qU@Ek=@LgJh?iS&>CSVnp4`e$+;HWU9y1*5611d#yS2)^4F{+zFnR} zC(NM19S?pjXuMwFN&YRSxPZ|yt?KH!000mGPpuyRXhqua5rJ=5@4SN{AGJCwD)`#p zTLET`y|AKX=%5035uR7bFq+WUmqIi4*1gMmk&U%fPA_jTf?AG^)W41)MO_`6#NUs# zBbh-_^m}~eGWW6YMCQ8sp0O4JTVD9V^Bp50)Rs&?9U5Vw_v{;b%SsWAZ8|F~IpP+J zbtVs*hYbpBl@*wOBl;hA0;cw6c=}P&KOFR68IcnrFOhwQ5YITgS=*J9@bW$M={g)I zWaKC?QX_wJWu7J1Z|yuuMHF)WS(yXUnYh)-)kr>&8BbtC9W!%MMh zqL;h1FzZrt=}W~JO*f=lkOmlk>IMSNC$VNxFxc+sgPdH_O5pckR6{zy?Ntbl0Z2fW zI48sE5n+kVV-0HVrW^BkzZBz(y0!C-ou2pcdxo)Ffj(#6eV)zmFS+e3R^Nf@R(}Q-JD}0vM5VN}=shl0e5A<<|Nhv@f#7MK_)1M$}dZj>;Gt+|_Jw zz1(8HOJj@t@x7Mlw9ZxP)7JOHAU3QBBYe5Ra2i)(JWvIT0o?E2?3h+mF)dQc6Yr)v zv%1%`4tg!R9TyO*ZUY~f<-n=dN6Fn0vU$C+?nLewY#UjgRjnL1OOA97e6q6YDbPxu zOYMRTt)xMyeZ?t7WaLQvD_LV*L9>zbhDtZ})E3!H@nq-1-0&>(qR4Vny{B&!VrraD z#!8loL;|@jVhX+7$gWizWY+^fOx0iCa1=SZ(ruI4(p17Mwg4><&C0HLGynHh_R*gy zAOgyhceN+?+JEh&yj?%hmAH}U{X51hObjOTlpwj^quo^%yY$Y54C5^kPJnd_s*UeX z+G6pRqsi>4O@;MQs403FwWy)$x=;w^WZeYK>!_!w1mbb$#?)r=nivr z_ls#e-$BZp(m}(aUl|p}d1!<(V1-Erh26As++(L?8kEh6}k{{+zii91<2a!W=3dYpU=-cR%k4wd{cOupuHT&4d>}>{AYF@`f!AWg>w0hop?3<}xb+fUYDFvhZ z4tF@CdS?dxngO|B^j!lfoLhUTWT=DLI~tt(pz{e_k-P$|I?*S^Y?GG%9q55Pp^8XVfV^xNQx!3;Dn8z!wm-z#ygN8aVclYGP194|JCo$G_y zj|(77^I@&bdH=n|*{E-H2E-_l@cM*RvqjLU!s(;?vxDfL++dUFti)I@EaYRXHHG+r z207>Ac5ZSKT7+tL;wGJ;kw%-$5H6n;>Zobs0kRF3fDixO7D{`4;nOH~dbjpF&ts;5+C)rEQ z5*H%4gGRwz*JHcHip_XLp(v8ziUGRbZ5;=k&Q-#mp2?$<{LZtB)J`84&=k*r#km}1 z$qRu_vh%=xjD%ad#|J9>(h)5!=2`)0BuulpThibnyf`R&1p8=9R92^uOqnr7TfQ!P z*I?2_XDGq%95k37SiJj-TRvqUwnnQjq@b6OCf!mEJkw`6I%X4VMme?%fS5f%jsIvl zYkB(@{5i$SJtO4QbcI>cq4_}hXl?Jg>K_YrMmIM*B7oZ6svz)D;EFy*BE`67mv2NI z;ra`8br9eHM1E!$mItwEh#)rk&h#_EW<=~0fxsN*sQ)b(8nzQ?lyE8FZdgAzNDbsG zl^^q%a`1!ip{@1LXy2hhH7ld4-4C+SnnMT=i@hBrx*T#CnX z1I{BQ(t?lQRq_MS`P{p=E6z>&A)Cl8c@`fHeJ@83+}T!T=xQyF20jdUAqHU4`c^F(p>F-KFq=(qxgn*(LQL z$)Df0_%mkba<_7nlL3Q1KRC-V;Qre*5HU6iF{x8ww<(s`Qk5=LqQE7~>zT-93)EU6X_r0ahyLGv7PC8WGi=9X3{~fm zP1|MtKh85OLNJeEuNBPW7@Q@=JDd0lQOtA$7j4Rztt=8rq~02;06cRS#U`0 z|9QLt?0?&H#`kv1n5S;$11NR!@YTJLG+-OSYNyeA&WDt11Ff^DQZN&=TDPdXZ3BNn3mut8pR>e?V{66Eih>HStjKIW#0-lby&;=;&r+@8^7z7nOl^IeN zupVqJbMN^>r);_Z*NF=MS>KhG{6?pDmkLLI@P|WDXZg3CS{X_L#tC&W<5l zaD=#VrxK!hPwJ}-S*yHsgp!X9c3ATaFdjmek#QO|4t|vwoHpQXrFKes}50Lp(Gi|E*JS1?^lSnZ?RwWty^fQMi%GTFY zZ6K%FiR{nmo$wSQ2;lh2_YCtvdh!s>F9Hf=4#XCe)u3F+tnQZ{UpiOgLQq_!;q!*Q za!vRZR)m09`0>>SOO$|(IaDOZo)$_pf~pH#mrY%3O@4DOf&NJlKHgf90s8yGaom{x2P2VGG9vBZn7gO=F1uu-a8)^_^&EFw)xz)4;C;ur%@j92 z&n1*u=?mJ2{U?NJ3LsUzr1WihsZs!UHJ`X~dtA${ejHQVASEBN)yr*nm7A*g_R9%I z@j6V4CLzDEm1yobM!^{G$HOe|BOT-Ut)0kHalNA|7D+Vy2U`j$Hg)+=IG+9{j*+<* zn+Pl=(h`MK0SHu68=wPh{21k{G?xSa)a}sWiF@SZli=dRGRtN-X~nt1aqb4D@Od_{ zfYtw*PZr?VCElFnPb*{@QR;#$U~Yc{uv>FpL7(y~`|!G~FO~4gz9mud=Q>_yd5JS{ zT?>5Q`-TFSZ0WT;+{#?E1bayTJM@%YduElm@7hv}O!{=imy_GXRKylfoC^Bv_pwcX zY%WCBko1H7j~lOy&V-fJ1nUovtNOBl3<10qnqYSW&4EDk?}LP%(( z;^Ov3i>GkUoig_*$)EtaE19iKX_4_GP9xUiTWh=KUTtGeVKvy zH{azy&LtJRpPy0z>-Y2GmrmJ3Ku{zv5EIDQY;L6(BH;xJQIhrDd9v$sxdBq$n?o04t@z3G*f4HJzD57o~f$BqxQDayv1Ovf-Jbsxpx_A!8Gi}E8O#?fq@YFr>=kv=uA3v&s&{>I zrqj^kM+y%-i-Z2v7y=iCDtX27lv-vN7sxAX_`{%B}}{6y6uhL3y|l@QcsA z6$i|jS9e9uON_NG=WDQ26fwg%u3W>OZC!05FEyz&Y9mq3R|rFHrsxxVpf^Dk-AhiW zb++hqkan9x4VM_iv{(i~s?7T5x+Jk8>oe;GAYy&E#~sPX{Ll0y5Q7Mok5tfS*9b3e z3ti0u^kNoRgR!&$b*7NipM^3K0U+jvD5`{FLwh;P1LBXT%Lf6}J;; z#%*n&KV7h|Lny_rWhBx`!G%e?^4c3=kK)9hE}^%vH9_&@;%#(%U1i69tG(B#-&Hd}jf ze43I;R!S`*nkS(A2+Y0`ZhQS}VjSRnPdXEEma%3y9z~n|W(~9(weIt@nXZrO*=TB4Sd;(%5Il_*KkgVT*L91t`ZhXQGUzxOu zkL`T@2MDV`XrPe3JRKR9C{)5(SIpi?o>t{p%iSL8G|8Fr=l7g?>Gy2h1H*vcUuhev z_J$i0Dv9zGq`Mu^H{C#SzS$1Vs3briNZ*lQ;DY(R0`p8_xGzgpsrV@VGDKV% z^ekQ%4&W0v|II&UL`Iqz1PwBV#Hbj@eOVXJNG5AQ%SVPDA$Vv2Fx%>ucEAOq$qgL2 zikWaI<~7tx4jdIN1`ai%iIp^+PXY8;2g>&BjGSEJC8go}0CLLxQC;^Dq!aLH7T7_^ zCH%1rFfRJu|FMI(-f`MLc1S46S0jj$f{JExU!ym5#@y4TYdnGCQaD)p#v9M_Wr{xY z{eQPjcJNq6YhkzbB+jv2rJxyW0_8y!gCL2LVC~y#pXn?|UeMH{SyQT_R?IR5<8j9h z0ceb>wqZ_PEU(7;sVNi;O7W+oFg3}ur{6CR)S23%8+4u8Zg>-D`Kq6;6_!FUiYW@p zUni819Z!L2Sc-}8TbvG760vGO*%!x(_a{+uKXawc7ks7? zzM3^Qo6x)5tHX-t0CTcbQnDE`!UCs@JtibvB6yV&i=)8MXjVAv6#ig9Mn&X+65*}? zpXWT;WBjFKhR}{cC8*c6G(0pse7z1b@Uf2-tsfm(pSXBsM?5`pA)!6Ha$F6 zgvB9M$GGhr1G(h(%-8K28#Tk&^MM4dqZbTTF;WZy-IbBH|2vr0e1y{005bvu2KuU% zWKied-*rDrTlz-Mf`QnQD$Gfi9c&s{53n{r+}PAdM%A%&?kP2Hb`$8CRzlves3#k}idLST70*LIO^;mq@MrJuYJmp?)B7s_w2We~9dXuDQS5hmHpu{R}O z!~|%Z380w0)#WkMyuSx=DRdc+JB>?Q}%0KWq@DR zRtuj*V~4@usSL}tJtMSUJa}l}b(@~b&88Bh>?F~1z6C~BT|MfRKRbsV@6q7T)4wEh zG#6ShIq|lCLawW>@FTrld?Y8No|@|CCN+KekzEVmBjXY5D}rtH7|FKAs?&~Ai+Z$Y z3~vT(-Kbah;I*?^D=f+Wzwvp9!1^qw0NQV}k*n)Xr;HE3x|4fFpH3*Xa`&;ASBwa@ zTJ4yy$oxI~rzv6@eQV$lR7=$%9n&EOct9f4>aH-`jvke?^!brQa+O_cV3d{EQ> zy_sx90bYQ5)&YG}_?bvvCbH1G%FN7opxyG70^E;mwXF-5=82m=z5KM%gshE!oM+wz zq{V-kvSU>-Z!Y|*RsM&Ikjw64-Jvh8EgdRQIWcK0Zo723Q@lSB!&rW@WwGW#Wu?q? z*jxNof##C04nhaWHkic$G*p)Og(Llpn&+7~Hvi`v8Q4q-N`woYKN|MUFO<$Md+ajw z;?x$zBdTC3&pZ_}4`)P_JOUhX%__U3_7%L6!ZokZvuyJn`Xgy5>p8|cFywD0Q z_D18vf#J6!IGCzV3O9&P*lnEM1bYf`U~C4l)&sy zUiO=Jaak0sP3+&zX1aK;tZ~e7CE>M93+v+WtJEfSlnL3WWYfEEiT? zxTn(&={i74gMcy_8O ze50?XP&?X4zEOZehG5TBL|c)WllwA1bQ`r;P_Z?nBASF4cTjDxW_7C%oeRiBq@1ma zsbuebxvN&%e{O`=WUsPQnBH3p5WvV=^FvxFW<&xTi$A##XQf|VK8q3(#InuiX?ff6 z-k=;P0F zj2+Q($NHGvh-u(0&c`d%^sb@Y=L8hNhBz%LK)j+-+j56|KO8(6b_dkKjitwyZ8$`2 z+L7`ubA2v})GA?W9}$6v|1uL*v+5LbUPm7(Adl_$2sfx(fFUA#?E3SHxISCi`j)`A z6%hilX%I^H8l+{Q&@sTnmP0035*V(x-t$OEVI9m(i*N|X`eN8!FW z#5dI%*^xa*N9iF)bN0UzVW595Fu~dq>3jp91k@dl6xoPLzhBL2^YJ_;WL}A39ZW z#$HzYICyO-5@N^%3rqM(2Hk&5zzBypnJv+~*)Zk(_Df+1rEY53YpqoeFZ_(QfMc$3cEayBEmcwp2=bbXG%7Y1Vnwb27e>84j3e z0S)DXH!fnncxok{K=B)Qmw7++Ei_`_iL&TwA#fIs)~HX?bo|VR^ICo?g3B(wo{}P~ z%*rKmBiDZ@56u(41QF~Mbt}<5rC+-FQsb^npd~-KZ{b8|#0rqmZF6^3?({NsX(P-(nd#mJv<`g9|yAY?l?UBs!@<=d`ifXSML}PA>=R)BFyvI zXfby6_O?8>ZjIQv`s#3kV3CKa zf7klQN-uqasHMZSF5Fra6)tkbp<*W>!+k!=iKLH4jGKLJA_Y%dD%-Gh*c@UT*ZENO z84Y{jFZG>2@2U2i6<~+u@h7{6Y5h@S_Z-9fz#2Q28_9s;(w+9Q z(xHN+QrLm`JXOF+=t!s1j|mV!(Koehkup%eY^ASusE1DiPa|d~Vag|AuhbDjL}jz; z-83`~>M3>E%)_99I+?qgrL!5|PWYDAn+w0&om3yNJ_%W-YX14A3+~iL3ib)urHIgi z*aRYO^}k+K{z8Tkk}kTck3Y?Qw|c7ZoAFWXT9VdK0Re8YIg_A7FJdJlPd3)?lh37I zQ}*SLy6V4e4M~Sqs&QMF+cu-3S4eqh{sfdp3(~~`WN86*qws%$a^cKG?NJRPeKuUN zf>}y%n|a4W>dPq9_|~mPL*DE;YZss;J=IiV{oyDkX+1vetFipH!t^B{Y&#QOR|TZg zCRzY+X({D#&^Iha16WM3r8$7tmS$O+)1KajKmmSAQe_$% z{|LnqmGC^hg~bdi1&aOVV<=ql-A=osEO6Rs6nM@n!vin!hHMugS!z>E3wo6Y8i8P> zq32(GsLybVer#ci7~$dN;vf#!6tlY2U4OwGVJwS!e17 zkg8f~%4(b;@^JETBfsR_j}6ZULoV%7Q8dlS9P24LxJKp(e5wOnw3My6y?JCKz#8i%v|DD6X6S3}o*6pJ_zHZq`ggu~#ux(G2M0tH zR`^ti%drvMX7e;ZBL4FAZB5WPvl)G1HvrfCIR8UNQ_5XU=d4l{zc^^o|8Vzu*ko_Z z^Vx#?_EN*er(mWpQPHJiU=<{^j*L8%Hy${}Dyb7TjgzWdi7#k;!cK{~mUp8HQUIS6 z`t3PJoDIqk+d~`vs^;rUlI3+oF*k;JK`nt{&)X5phYJ%XvU^{*`;q2No1KX0!Qd;x z)%mGO!(Cfr0%Hi&lXJF%|Z!o(|yI{@Fvi1I@ReyB}eUgK}|Ke7^>RulW}KMrJbv{ zkhRFakB?97%mq2>1n9iW_K?#q2uMdS zyRqviBouwjF3*9U5<;sEh*H*kMFID-lcf5t-q;4 zC|6|b_t+OX%1`Jp6b7Ph#t}kVsU=NL)vebq0aF&%ON{%ae332!xMj?iiteW=#oKk6 zS_73-opXFtlnXFr$zj%KWDNOP9PrYT{n?t$1*c1T2ecGi8sB^RmKlb9`BwRb_-9&^ z&7{dKftpw_5o-lXh(|6iY?a!V`r2`F-_C&)MBhf?UHoFw%dIvo${1D`TTO(5Fnxlk zk0f1&yQoy`G?F8y!3)>5z7Y0nR+oI<6c7{45W5D85^egY+P4(w4E$D!{-yRlr{^?@ zKWHY^)Eo1~;A*-GPqoBIsLzBg2j0@b+m=IcQ9(_VR4!E5JjmcygJUn;xWuPSko$V4 zHf9{DmvLN1hC9_`|KrKV3qVd{t1ajQ){{!$5Hqn-;w}caFLKAwGoe)eMT7I3va9DnOe+V$F)H$m??4h&gHfp?g4h+Tv& zoXwdJik&HpI(~^Ux49k490-abwE<3f`qfuR>rR*W+NBzO#}Lg)914bE%}-}I?n#8y z)TeK;pf{`^1!9FM*HZ!JJxg4BqraTwR9Mbs_uq-qVUI8-_^@yrx2byMi=1Ud>wSeZ-V>D(1+0BaCwoI?!o@vm zowZnEn}W3C=6^^#JqvXdrL>DVAWp!RTM0f)^Lt86?2aLRg0J>AHQlImEAr109m!mF z*k9WbMs2_!`HzLT!$nyC`HO7BPKI4y1{-z=bxpM4iGRy!9`{VcV6=4n{Ep4*k1yc3E+AE<}` zki%0<5=e&k>nzH?FRy%b`ra(U^7iji4vA&JxUI}SFPFm1r_|KKtdk#Zr<(L=|0Hdr zW&{slt%7dul@EUmH@0BT^K8u%uzzUV zy${q`2-zUR4QQ5FIV|WP7Im0}F6D&-xfYvscVhr<4xD-hEz^3WvCfk}aua?;BDk;u zT9is9^X=xc>53y!}SGZCfA0aQ!BatpYkf+6!Gk{u0f^UxQ6UDSIwR!xJ{xu^aW6wfJL- z#pl+SM;O_0eWXgbl*UOYc$2wi6BtS`Z`avYug@7lUpzhxX&1;+;t&VJH|6+x_;=6~ zHI;vZ;=O-7bUXwxkWHUoY|9YY1^VKL*~)3NPOHQ{8BsLJM8@X82#0}_;VkSrw~)WL z4j1+S;%1+)Hj{pwJuD*>VaR!N90f!|=h>A7y;NRp)fq%w!kPo~PEh9=(n*N~{haS|azU!Y;Dx&o}ES)Ks^N^Pp5qc+FGW)uy(q&rHC zGy;GXf#5Eux;N9yS6)ssjIwMEc-%Du0@(PEa$mH**Bl@$QoA=YK5F+WRxMsr+)(uv zB;>je%f?e{!Bb`WnZ?hu@ZK&{r~XjAYqNuC?8p5+`}L6Gvj#@iE{_PFjez7B|P@81`-{t#pm$8eo6cZzD^eP$egNDv`pB!+Qzj zE+6?ozlb;`x}KqvG<0&;{2|+G!KiKssxFOrl5Ap(3Wvq6wJ_Gqpk=em;`3+NX>QZ0 zXcz~ClwX*gk#uC%pY9M5AIn`trQ4LkG)KsvrUjx0S~O6!b?g1`rC zAB<+=Q6z4`^c~)CXVotLnLU)x)#>61ehx7f0Wk0g-&(DQeD>NSAfessP}6esOeEgV5GNjt$y$nc)Z&SL-50vUxBXp?6;M1W93EL7V7w*aJ#{;MLS>-XAX1< zEf(jAJ*Vm*L8wc**c55qII=ep*8j*SQp(rf($Tctej4p#zhjP2DHPhSp#6TDPc7OR z8N(_{J;ois{0dKpVQjO?DY;nf{~20TR^VQ@mlE-f(PZ0O!hO{InaW;AUM}-$FfOw* zV^)sv=t0@+jtULO+greW2yRQ@m0W_%JI2{ZJO!zF5J~O-e4YdLnFJFB*5EAKtDlcL zh&zt0>s~z6dVv$1(*ss4d4w+@j54|P6 zFEL6{V5CVn9NXI-xWoA=d)nw)52>q3`mm29lmL-JxX=SJ5lcUZWtp?0=^o(TQ=`bmdNSQff=J~Yv8M90Ev;YZ zQtdt%3{+Bd7duF zv1Auq;&B{m!?o?O^;ti^@Z}Z%cl&VIH??F`=nt>Oa+9qqn>Ur(m52?f>#)a_OV?WclqZ6w!TP6f4-Eo5;N;=8Ae$I`f$bb zKn{!$KC9g<1qU;xZf${F6TJP61?G63>(QhjKUN_Kcc9G2&;Ys}bB-F{yVGk>J zxggx8(L`OSPOmnkd&qYH90L69WWFns3j^aLipBnCP*zpp^V@B4-kg`1P#Z1Vo(GRw zX^`7A*CiP<54aNeVyp0d`Q6lJP$ElpBg^Gh>N+2_UH6`_=~L_OTy9x`AgF-Te|hg< zr#v(NaO!tWKnRmwfwNcYO*nLGX~Bd2)It=y9wQ~wEX`cbkle7BSRLV2wf$p>7)Rec zg1Rbra$ghZ4-@CMk!$5YMOKg52Ih%uwi$ezVO1$O&RCBp4NSw^Kk%3uSlruAaeJFS zHHF^sU|x#pmT-|=aMK!N&oT#ycI4(}V-IA4v7fID@5?|BRw1O*)8|I!zA9^!9j@_t z;T}GTrDtFV+b$p+5KPmM04is)Lsy2p>qrQZ1&15cL@*K;3M#e8-qihMb0YbEBH9`s zc?v3V>xsC70mTPOUO4$)Cjano`xbAJsj?VK9XF2oD~Sxih4qpDkV*E(LZx^RzfD?5d=D zpIO1M_^Z&B@?h)?dSr9NtkxGFfq}8b)jFgzv=fJvuY}tb0;OLUCI~J%1&zoyk zblaPQyyn^H-$pUiJG~O`gI+!!fGyPY^J?AFZDUNCs7Z>q_)|;qh|L;wkKb~KGnG7`R z+s{WNI?Ljys8;4S5UQ_h5X?bKs<~1A&+=0wn?^8j)iobyCZC2(ghlc7x2G>9XLR$h z+mpemAGhglFwn~}y15H{&7zO;)zkAnFtJ})Q8A=n6P z9s+Q@{S40h*+!2GdIy7tYkG%-g_6D|F@HOrIUmYTOX0+ZLR;6)OM6obIIa^gv&hz#!<4Mw1_ip$?=FEjwO% zTTI3b17w9ie70iY&)~qsD6P6X&jslbW}Y>to9~bd{rp!)JRrNT1&vO{JU|9^8?m&` z)NNYsMmzraM%dx)u0KqQNn*YA?P1$GD@pD+*cJAW6F;{2d$We|U{&%vF>c8gqSZ=e z6;SN`Y(>~yAn=o2r!i7y4AGyaw~nj zdjk2blo8Kq#3Yy+aTM;#@(#U>{*E!SzqlthyMR`9%d8(R81gc;JA@Jg@oBj17fZU0 z7q-Tr`MqU9vW_+XJdY25C3NNN2Nlx8fD~OV^=rtKfiXMLavWRXQgNqY>!p2vLa6DG z1wed+3s|cePP*qg^H3f`fAH)cEm-{GS1zCO2HJ|_%jr8ew=Q#?O2byDk!o!`=COjA zag8wOx{u)am=-%t(^S_0H|)ReXUSI{#aO0oRuJ3wm<)g$lOfR+G!1sK2i5@+3#@-w z0Qx+96Es7iRk!l6NyW!?>Cp0hzCn-h> zg6jfJ2BL>&x1th+)w%wK>%M_17TGYZA7Ta&s_e-W?jhU)n(=gFuJ&_24Ar4bf$uYW zt$%5HcF;1|Ir5ruC8**HmS=u+;%OZJAQ0|}yq)n#q*^1wJxTHZX&wD1mSEYBcLsp= z;`*zT0r>X~@+jz}Nqa(ql4x}WYe;S_gK*aBV6gWMiw|OW5h!$HLVy?~E?-xDYyUD? zVb?tAGXiMGI4XifdQ3nFpTydQ z!}F@1ncw*?N-9?Jlk(*JYW8vuoW&6cMBNBtj87~Z|T;SbK{J(D?z}kBaS$3W)=wuhyg|Ik)!?PeRW>zJ~h`9TDjJq$t@lLVt>OYKhv_s;3 z6*TN)Q5BcK+l`$4eMD4G z?-<=hCR{3s=tmLzr;F)JZ#uU#vqU$l4o>HmS+t#)18-lcHd4G_7s8s)ZvuS+sA$6m zJioh}>%GrtxMXFb$kr=l4sgs)Y=89_9xUpL`Tcht8hGiYLW7HYuCkp?0`0TkU6l$g z-?j#>jS(wn@AVTX8QDR=Huw~D*;A>2ylL0;CLGm7TTgh(NLyKu8Pn38yK}X&WW7~% zO!6f;38MHcc}q1%=@=yCFfzc&0)P)Zl9V3ao@{u_B$e@xy&3Z5y!!?NB2R<5j%-=r z7FrS0-gr7HzaVN3*)8beSCYipd~v#JU~CAWNcF%X$5*(GP@H>p>hmd<^A`ck#$nQSgi;tWadKH>U%L58X4{qT{jbuNlTRi>GgVSs7;h$_7{7 zqp!xIu@gJnK*0d0&4zHnAc=JO<@fcdE0OVvZrVZ7Gw3k03%!&hmhsHqk*EC%zGatu^4lZ?= z%)4Ci807e<^dK}|@nw6O4532&AS!G266d@zcx}wmoRa|{ok_fzgf8}ML}TtZ5To`p zTJCQhZJ3CQ+1)!B!r3}E-dM_c?1y{()KD=6<-rz+99LS8wjF+I4%{&0HP(&8#>@uF z^}y^d_(48#4Kmv-bH zx*4x1WcX?@&;|M>->xd0jv}Fjuoce61P1VwKv^ReP{~;u*XurdP4^2DtJHYhkV+z7 zZ4=@JSuFie*etIH7rVY%F^w?~k@M%Gt1z$jd=X_-UrSl81u4d(SAAhM(idD{|bV>Q?o4e zWm&<^Z6owbK}Jw4qX?(D<@|WoEl$NFBQRXnCt-V|?tG-hByb@tnF;b3gC$jD$EoyF z%mGzo2#L(8jhC*uJYXy@y!h(HV&2=XF4yhOt*N%9ZBBj5z~fYpdTw8M1iN|WLuoM3 zfqt4E&_;DbTq0djivANGdFcc>cxiey6tDA*$NQ!e&@B#&*lNjmLAp!%A^JlCH;4~0 zyHfDqkF&-vZYlgIL$vGSxJ~TcTds+!%rDfHWawtLJ>K|Eixw!F(V=wEthJH#(D)~v zjGsDdJ6MG}U!@f}C+w&^$mLu{*FE%IFs&CbA=d<^FV1ZXz35_`HEtRM$rAqC!Zu8W-LPvM}zq&V*yI4;t*E7i@;eaQk8?|62gp$7xv?P;N!W@K1NkG z(yxhmE1DmO2k$dRzVQ0l~+Uf z*u&lP-8OM)B~JwIUcc7zH$Xh(Nc==PG1=or<_wO`uFwqaEmf-H6w^J`BR6jx#T;{| zHYvW-=*|N`#gq^<7<#it$l*XtU^E#{n!C+o23Pg4>P*OJQ4$t>rh^^zt1qrC#nteb z4U(vUtxXq&o4i{)>PE!v(L>yv3iqyV!$AA>7o^W5KzLR>XT7VEV^-gO*IYy9td}@= z{IfE8jU^e;fHwfOX~JR>C2?lj*3*Co4XztdFGBXH@L*69Sjf6LhT;onSY032!tu|J zcOI^fgk3G9F)+B!Zxxbl<+QOjH)^R!@LDz|8--G@rBa9N@@zJx9S}RqF#puy<}pa( z+_&v(RJLPhWkmVC>P9(U8uuW3Ep>2FuPgD;Zu+d0_74h3p9+Tlbd(>bA~B1nM;r?l zizS1x($cYIqPZal$R6uy&l=pLz(RYkmuHUm;u(W$@`AY$f#Iu_O?V+pqQ)u_^$JbB z#vJG2GnpQQ;~65|h(kAy7rA@Zpn?qPX#yBllFDq++c)IisibRUk<~GdMLGsx}95)gzBo=k}e=;leLfLVcaN(8B@y z{%z0r7zrwV0(4*llO^VFYP0&@3U!)w?SQBcbZKiB+^wUSG8Ti}R%v(sS`HE<9gX|o z6{$IydQ<(N;T+ZiaDRTrx_1t2MbTkS%rZlKzDW*a=}IS3MQDFcv$e+^aTg}B>ELWI zc|?eO7)g?yfE_PIfFlLa6^P|g(xQH?J7(*2!=~1ZQ@qSMF}-oAv<+Tyk}OmMnhauqzN#_`q#m4gaw{!1 za*NJ}$`zhYQn>=upIsi|$0@ipt7)>#n!u7Bq`d}5hz7Q#61}b;lkHgo0dHxle85AW zM3H2z-sL{la%H#nAC&XlvA*{#X^X|awmm%@>Qcyn534$?IGF$Npaks1%-KR`UnfwW`=Hn*k$-rr^d{U&j4wrZtD&X|Sa-M6S|(F+5gWq{ zcNJDl3hGV4g@1N}2l63TcvmRXfUC}6J{IEFNMb;iflHgW5A^UYm z@J{g#r6379Tf79A1?0Pry_p+oHZ5JO&CeAAl-#|*+63yTr=|lK>Q1&fTxx-$W6KpY z7B$cqpm$uUMB=Rl-U-tfrxJko!!+)r@>Y9lfqXh2^7IrhA)-6~%%4$w=Dq0Z;9pZ{ zS{e4tZp?uF9AywxAGfRV|Iwbxp&d04avfT1MK?zmd=9nLPdXG!wyiRAx#HPegd&G z`Gq1u_Y2`^pFOIuY;eCdoVW<0IH4CGYq#x#PbU&Cc!2xMeNp*vJk|NxMqsDPLByN{tQ=C@9~sxGl&-pWGZ+&91UQzZe2GSXR;kCtSD|l(=U^U~iDphtvN(P6uTY zhAlD96;uuoQ47 zkh1a!8&5S6=@N0RgrKngzjjiHBs^Ety!1T&$5Bge0gG1-{v+3orh3{ZQU7!)iZL57 z4z$~ZBgg$yWQYnAA6+j$AU%M^kUMd~*cyjG8U1amOz0hcBdY#(?N_U`c(Qix-k)DF zgAz!Y!Yty~yRU?F-^pRk!O%@NS!^;>&nSXJrA4s$u@rU* zwN6>>LWb6~)NX)gLR4|WXM4->{!l$2B(QZfE;a(_qS}dqW;I5fq6j|mbmfzt(Jh5* z85S7MiDqU<1c(FWh`=L9A$`@xMst(D*OR$0LFgL#H!R-SWM_eCo$bx#0RERl#ZbW5 zgc;C?;oR?DFu;?t5RuUn#^D@qS>#R3{*Dn0*qIX=3CuDP8t3_RY6l4M`Orqj-t%iy1T~j zFub9Y*lvb#n9VPA=m=gs3Q^ueNfo^jjzfWta&jWH4uUtaMdr8;n$kLJsvRHX3Jh{Mdc5NWSb`!LNtBA+{R&d(iFad)c+QG*B=fdYARWJr+E2p7?Rbt zO?YjDO;afz3zk%A%_?@)7tckpAP==}b_DZ5p&IpQKoaiT;f@XPRet0k_*HTsV~$XZ z-YzWka4%(YHdYCtw5Wi%dCo>_%`}mHp(?sDxu`jkTcP3z4mN9#DE`pQ0AJtBQ8kXx zkI&U@0~%-r|8sCLF?5BwuUH4TO&QdMUAz@aVSxazP9JE6?1uK#b^?QKrB5+i)`Gd8 zp}66gF@ZjY9>+;G3B;hH@c5WpNi{c)(~R6{E}p`E{5{Nl9Xz0_B{wk5pnQ9xZN#%% zYS5ocdC|2IY~uS<{)Jxes2gc-*n~Ch*8K(z3|=kjY}Iv$m~?zd5Agu{NBL~?_Py*& zCENPqxo*+0oqYdi&d5#(OC?c?Rk5NF)Idj?U!(1^$1*6xeYo*-wi&G5z?h4k{3oV- z+y%W1TP=A<-2+u}->bTNjelbLvNNR^EKfrUof6sJjfH>vR}6BNJW<}i_I0Mboog=b z4_N0MjPMlPTM;$EVq!n=PmVe?e)K=;^%iba-myU~NCF9xevtWN#iwK;0~Vs2dL2=; z>DXEaRglP`8W)$*WW?olI|--{6TM}fehY+!#DCg{ZvX7rx*SsppeDdmncsO%k~rG` zSQ2gPRI|ae;Ss43rtzZlD^qC5?l>hVISe2LpcXeKZN^y9dv{Z1=C?k7QOIabxY{v7 zlzDjbo(BA#fhyq+!X($x!U`9;uvjbb!*gbJI<#yzP4;czFSkc|JC}r~)t~(tsGLe) z(wL>6)}D)`euXwXHTW^aJ&Hu>u-eVZ9tgev`jOQHr;kGXr$< zLCYG@i9BWSc6l!PO_k7xe-%vf-km`3`qs!%=w%w(NAassi?JmHh!81CTM@l?i~6Qs z8@1Wxf)W*rQXxdXt<;ICLXq!T9wjTKU~deU#JBewbtee$6misiDcd;Od>2bI&oW5@ z6q1F%(;+2Swz?qf$ik%oY=P9+GCs{zQV*Zq1GSftedwJA$c+Q&L1Ux0DW2TVmJ7Uko6bU z(qX%hj;0J<1ZzwJ&gUhj(Q*-lX*i^xj9(Durlsd>8uPJal^GEpy!5%LudN|ocT3a&jJ zWktjaSw zYsl>fa!T9-{ax~yd@C4AsIuMgYcBNO8pRZ zb?%$T5OKpL{ee0|JPeltp(H9c}e6hBI&8 z=N(%#y3GpP3F`$5KU{)H`B3)|Nwo%#;DB$lnRj@?(bL zQ5*)I>$)3=1jJql-^%Owe!2&LDuuKFV>@`AAMjZX&|kvdaC^Gzo`DhkN)dY!g(D&X zkAA83_Glw4lMs#M7lDv3l4bXe>@tfDn zxOkK?Cgs;c-2t83pOW+JjR_8nISU1zY)lUa8R(RWymIhD+IjOihp8p2p~G(lnXDuc z%}%1i7$xvUR$r5lmjlB^dIk6n)+x03fV(R}+nC>$ytXE-AFXo=Vj2GrQ4N9E$!kBxEd~7`=GZ34Az2rnA88X(P;>r z@jw(>_*8mx`$7FPJ~Zdow)`soe5H{Gzam0>;!tDMCW@v8N_xpz2I6AO*3e&TaY_0= zMv10yTjoot+FEKAlM#GB>dp|Jd-$g!{G$OtmydJYs(OsCDuNze@O18_3 zbiOcak;Qi!*NX~xG{Y+os7u&MI_%|4YZ)|lyBAF`C^iakg=@-lZ3Nz@oEzdBLL2y+ zbPru$SYr-g_pG1^@UWdxCZVOAm-Y}HX`QO|lop8g3QBxX_iq&EdvDFQeY0Vi`B5#GWffIul^0H-_ReJJ$Iq;#JdMO0H)qo5WczdtODQUv|{q8y0PRPLP*pDI&R@>&ytpXbLS~hmCoSMfF zj>zF^iPp-yyk3Y0sQyq5$`p;23?|U7*V)xGnnI4(B;}r_JA6N`g*;5$A+rm@ix=l6 zpk#VGxuo6HJrJ0FLOeY|gwd&Kqxj&mmcD_nj}{L5ECFa7gyDN4(6hJo8@mR=Ic?Y@ zP^PHw3n(8N0OvepCKEs$WR}^Z8)G`GJguxB=5e%_fl0iem4Ws=4e~~q!zsh52__#F z{oil3%sI;pG{^a zg3G4b&3k_RR6?%go13uhYx&f{PLBwG(QFNM0;UAu$)emI-dSQ8El3*??=vIY}z=s&0lx8RpuCiQDk`AgWg z4#s4%)Plg$Y+KT0mt7HeeesbR$itn5IJZ+5G7lr61d7$ny)3s0Yi3&*_iCSLKHOwm z`k%2*45CELpfp`y!JRjs*PezjXRWa}4J^)8Ol4;|q#@!Jkf$B^&@KZwdsg?t8-Q`j z=)tM$7H}QnDUdlEA#UYLQHr6H;mRg|%(8WDmnA3?baSCls+zV$Q(r%LvZfB$-Zk0# z!~hd&rQ>|DC#j*tl4IwQ@B!}9edcG@pi1y<6kC@$oH}Ioc%yMfV({6^(*#yPM({m_ zOS7IGD7DPq-u7ze{xVC2@a|lEjwcTaqJ*~Qsm<>mNn}?Pk3U5HU>+s9Y|b5AJz)b# zN7oUw6v8S_yjaUKcigf>Yn6DVXrErXG!1uX+-N4Jr8IFR9cYJqZVq_XuxyFwj8o2=)%6BPLCD1Mx4p4=j9oBAhNG zvOeIl&SpL^>f%B3R{<#3@Hnl8?4wXt*O3174dMUZWd$mHVtn`VEk-xUcxS$dvD*!E=FQY80& zXQkF~f(~95S&IhCO+k)s?6(Xu$Vbt8k2I$R?kZiY7l+JL@yO&@*g4k#oZh3r?=a(h zsLuuNMqtte@YT@-22-!##q}x?qNlJ>$i1qy297>%i?=b3H2BnM)X=tdM~fI>pvd0t zhOZl&;`1gioCw>`#(_^G|8B&(hXDUS0Kih(keFwL^-!pcfRmyO zZbxUEDF$F-yNxbp(>7f zBi(p*1bs=sHa|A8e6*u?IT@`kYm?YJ$Y7X3cz3IMDEB+bhFT=fk92qva`Mxrb&0qz zYb*~V9$V$LK3yLutFO(@l9sJUe0>`K$`6$}jAWCdEx%5rbCMuy+V$9t-$;L)WchkF znwngX+FZSX85F&|3DFo=9_i(}y`mN9dO6SXlDQ+eu`{Yo50L_|*t5EQ8~<7wN7zp< zqKK>Nt)iq~A^Lff;!Ee|X*4#^)Ub2IS&-!6Uue|%fOJ~jO5J04=>dbpcg4?g!0>$K zn>4K7)sUc_FwAfr^m=O7d2Acd0Gt%uIG_{ujVyUI(6(BADLE;LhN&LK0x>q0-^=Wk z>{yUw>+!Fh?Gp~(%!ANo)UlDS**{=3srOVchu)~G6Hzk=Xt7)-wnMWzlQUK|kwMB46nW_FMPe)Yx zAK*0{y2mp1q7E$)FKcF%5${C>6F{9$?j|8(nC3bKT;`*J&|YEjc zsLBtrW4dYa9Fl~(KD7PS4IvF%?R*IX{x}sqT{Je&fK^4QUS%YV2(LpgX!Z;ij`kgM z8x#%#Y3#zDjMAN;w!Tni$uUQ%AqyH-Cf5j!^shzIcr|+JZwLS@(7PEtB-K*hMSQ$N z0-O=H>?#|KDpi~#dMe|Ch#5$R`plK0X$z4!>j2-v_3}F!>YB^0$-W5|62P>xa3tv&Xv|Dq5ZQ1Y7ki)+P}q7p5`oG_FL)!~ z2!J!K&>)cFehD%~wBb`(P4&jFOrl%xvH#Iu#n_bpN66DnS~w6Q5i8-!_r6I4K5el7 z+RSYKZ9VQ@tVMY~#G?F3{XEd+)B0Gg*4vTQ4J1~1x{0_DRptz(^^j@(kUC z+>g?jI0Q6Nk$k%Ro6I&t{FQ}P^Qo|>m|(&CSAVAaDA%5)6yN?|gqb%2cVecs8wU=p z#T$<$ zRfFL>Eb4H^aT24J*v^8DZ!iegm)6g6$`u0G^=D0mA&ih_`Z+bUU_-3ebl}Slf;r67 z<}sX-8LT+2-zaboN#BTH9bJ~TKYXdP?5C8A>raZAGhK8=kn0%y*KyQm>lWv3^ox?p zrSM`*gCx>mgd`=0Y=%$^ww?FHx>Uv=`+i7praMPAz_IiYiET@5K_& zT=C^5oYh!S=iyyha(h5thGloW9z)@c#r5zOJd8TF^&kysB*p9)@0DoGzBT9gUy|1w z1gJv)PDev?n2i+oNao)TEMzjhYEcgF2yIw#OPd;43l;_Yy`q3V zaNX<47!gp7!4U4-#Lws)r4YQ^>!wav8jMo`*9wwDs3cFepNsfBq#!*!6VJ-uq~|*c zVQ}j%^a1r3Tt_Jw3?Dfgu~*Mu@Dn3K)I=Y~jBd<}8Xdi7TSbY5&T+pMRC-QV8xW?r z{fx}XXUuppp?8HbjyW-)9u102Wn_fPa_QHkQ!QgplyP~gr%zwYZ^R1}kPBLRv9W*l4Mw`w7JuYrca1j8?3eEjBXen*6krr{T9BwMLQc%%I$ zw_}9Sybv>w2nks)DIqiZpB{w!QqRua39geoi}(~6CX}qV8g&-GGj637ZQ2}~mMcgN zx#7~D;)P+iS2wVYih^J5U)S#LXMlD15Bqo-$P--}C^KhXqq=fNK*X^q& zf*!=7=c~nr+#T%??kq6Hf`)Wlh;AyeCfC%WjUKN@8O#oAJL}Px&c12)m6FE|8&j-C z@P_VkgTy#|m7^!9o=ot(*O^@jbBk<6o0TM6oa=7U~m^kxcJd;}&g9fC+{|4sU|&1IYLp3wrle&Cul zl9Q?a{~PagBXwwhouQaZv4~uGeEcSa&|cvzm}9?FOb4(-VhPZs?UR+F zZY43j7KP9~h4!^uYlwIdwrZk-LlVz#9@_T3!Vw4SpF6R-Lt+v;raV;>A5YxtUx3+6 z_G(6>9!z*6e^{qT3P03iZwdeC{5+L~Z=@{i(S$W4ic;7M(+~x%)GkV_-I+pNiNk67 zavM#|WzrLIMTGU6-0(L^xGj3FX|OBvKyf}S#H_qv3gz*au~g-nQi$Mt%~LH589ZsA zHPDTI)*U}-ofW(ub=;(pA;NSBOLRjyt8ankPEH+A_PE%gk~Xtp z;3kcusz=a0Qhp8$;z$?Yz$Eul^Fg!lB_GoiGOxHK4azPcW&3tZU$Z%<(mp-wJ;Sd_h=E`{|4nN!4D|#dFy(9*}C7#vWvM3bzip z2=dxKa4f5QpOIOguhbfH#vr%gMw=J+Z6$OY4#?_pJzV}ylb6}N!99nGnvAg!!K=F}?Bn-3u5g1V6CD{u*#F* zDBq;nayIIl!@ytXa&+8;JiPye@2syO@nW{eY3+LzLd`P_(}JRHo=pLuWNF;0H@r%G zdH{{7T8_4vhJTKS$>Aan9mjrza7V8WN*$twe_{9<0t~)tM1g1uU1Oe!f@0FWy2EfT z80v3<3!8;bs#spCKw?NO0~EJcnnq28o+Z%Kx`G`;XZj#*y>+rwXg8Ns9M=8 zD<%=V@eK^`GLW^at|W9>gZOPxt#LIKj%o6(hIk30sdcnJKfMwAG#f?IgthbU-~0!Z z=+o%G;=Nq?nQY&Z4*3Ea(_>OQ5-HUYI?-vrjMxg?U9#cB0|LTq{^nr(b~fOo2em}X zw^OS%;c8QYaXK}*w8??3vlsJ9AU$3hJaR~J6zAu^3X!Q+-zWx>QZ(S!=X<4ry6Sgd z6yPvTgCK+b{!B2?xiu%{i-~HxtuWIZ%$`u)Iw(n#^h}kMj=$xHl0Z6ok?a_uLSrrO zR}}C`u7<7gQ1d&Eo|MC{Y*i*+qHKJsVeIfv(fdgvz^rQ)UxJ~f;t*Q}dQrvC7w>$` zKpIE;VWYHQ5wH~JpTy1hD5njjM13o1TKqbEJ7B6H#wK!IiPSIqf^OB_ z)Py&ExbGW*Ks`k&WPX=hSt{!vjOFJR5Y*Q=;~j>!|8*Lmcdi4F_1^vl3@B;)d~}hV zVzDq%Y*XsEYOD9mR>z6+0f)8+b(!V}7y8>|yx@734hokd8w$uZmf>l#tnN+^t-#b_ z#i-I8@ov{6@l@{S6+#s6;$j>mTK#d2DX0vM!3gq(gt_!`0%(`sI)+8+M(j8q4t@(k>Yy0?wBbd!h5b^!2iL!K3qbD)MNRQaV3GTdo~` zFk5NW`wPDb>NvfkHgf~rs+pwi%F4S2T$`oN_nrNlcE4uF=h8*#r>}GV^aMz( zHOdnhP9}tADcubXFWY}LP_!nca2$fnQObc{LnDG8s%nAGEl~4Bq8^>}NLqVhCIn*9 zAr>fh>cO0HQu=sIf?@8OrWHFhWIOsrWX0h8Zky=-W=#eG`4a6t(K< zoPQ8gStnwoAwjk8fOO?aT%f`pV#oxb)0_6fWDsA&)~ppDOpSL?EE?Ma$XQ7Ot|ryvU97N+3LU)!E_)g!>fZ}GeZ&d zJ!&hs>yS6=g{a6A+^*cZ#wtJgjg92}j6~Rfb^&JXL>gughU9RXIA(5bp*IP9x;b@x znHr<(@AuzeA?Vfsu~xf_ySv``$DW(>+4gf8gH~?$?;kDVD-PFr4QST-ZLc~uEv>?w z)X>obIhZ2rga0WfG%UWYlIZ;-=heqO$)tYq?kq{BL562>$R^v~r3iQ2H^0|aYJxyF zMmq=ni_mquX<0@r&{{Q*(530=pW&bO=yvE$=v(aKIAKJVU=LxT+wu75|8`uWIb zlMQLX15}1alE5&vss>TpPa4M(eFCGwUivssAZN08TsY;9!T_WWKoOaHg7nTIVvkHmiF7_HTVp?RYg*S}aSZdlZF!;gX4m)aC&TT{Kx8 zyY^uClJ7MaY{@Gp(1B-QGfH1S(sle}Y0D3f7<8=8bdNUX)=>K>@jmsW6k2*nE>)yw z7j$4|B)5u0Uxw-}Iv%3LA|#zd&)EcjfoxuQx?47dL?(~w3W&SP+0w13`0mQlnh+_? z3s}Pq@8&TS>1Q4WNRY8OItlmgnRouPk+bE36+KZzE8}6doDqMD{az3OfE8`-86NRD z-+fv9a*Vb5Xy~`QIS>gzFV!2#=)yqKXh`pjqPIeMEuNa0B{G3U!woL`6mgS z@I_7EhiDxbSF0f_E58>j^Vig8jGoRUNcq3Ew#7shL7ux63PY5x-GcQxI#h3{{5!7^ zNDg^+XDPG;+t3J$W^;`aH5j-0|e~r}lk_N%ogt%(e za08&SLI!n*EW&bs0fyUw{kbAC>82tR)I_?*_9Z*H8C2?LK&E#?e*hMSNP(+X#&aOC zwHs+#@@7ATgtO&TNCV^ktVYYpaKkL;M(39%1=XLzmIEA)f`jG_O76pD$;24WO}?=( zm}+F^ zKm&n`_mpLR&~Y0F9xovc#)8K)+yjYF1?FAt@Livu9;@?miLO~VIu^`k_UYVK=a@#D zSxtP#pw2c%8^sqkuD;V1D8|k~-b{I;S=-}xE&z`RMo<2BV#Ct-Q#VpaZ1G$aQCc0` zvqM(1O-le?JsWP+z-zkS0YA<9`u_cM_AT)Ti39zegjV)lc7&oyXXd7Des8+|tkPAcKOptv zC}E%JA05np57X5G9sjFV44QpOP2sivD%iM)6L`f?B8ZQp_0kh%exS0X3zmM=-`*SW z3BI+E&ug1*wtW3K&gn-S;5ymlL`dvdF(cJROoe*I2g`_Fmy(jDJ+z67)tQ*BUaJPc zdx;b#f(q#MqULHJX_5@Zfr{dC?K=dZ@_hG}rk2huBrg`~3z2ttM;y^3b_?yOo$YBo z6a4-*^%7)E0U!P?4$(Fn=^_Ss3h0jvktG)r?Jy}UVU22$`~S~i-Q|sh%|yERRr~L# z8#vjzcKb(+?pjfv;7Y`a%z&zypKjfN+qxVep}R_p85E==gkioQJ>x7&f9y2n+PSUn zS+Q{<0uctve9)PI+ z-%>21{}9uAFbLghyap|QxkeN!yL_Fx4z)!QyxK2oyT$4lw3QYG1Hl)F+j)k{ zV&Q~*&@9(FnHjefL7;fcNM|E4_K1e1qNG064QgGuo#V!%{ht76F@_8HC$hr^ZVf)Z zmLLH^u0-L>GYlSE>gR<{@i{&?SbY=jz2kx!s~PcDo>1ZfHitb)DDDgkBPCjj{j+aJ z-fx5ycV^$ez-526A=&@#^SNQ!=LBV=(!1iOVjp5moddlVN5ZbuP!g1_$MTa1CuV{e4DXIK9?*Ft>>IUEfDApxbf4~@;5U(Q6x@yw^perV2R z@3mZMTO5xa12Cu@T+I({zBSZL46}oc0us$zJcQ)^+e&BLTCpaKX+yh75rae)~O0YFaTU6{#p%8 z@X@V>ouvKn?Qfx?a>~xLCd>TF%wl9b^bP7LNcfPnpkIbo*3+UH_-ulNg^L5y zeUB&VAWnl*4vn+ZTFXjkcIL4 zV7o2nc}JBl7&Om2nZw6Uo}9Wr{GM_jyig@ciZZC&NsX5Vu2tQ#IcXq(6+*W7n^ri# z6XU5#dA)H;wqF7~k$rSS0Af#+l`o$2{IWrUzP-^1t4I=#MSnd}YP4j7@?TEpUkW#g zgC-UP7o|Y&50Vl#!r`dPY)+)UGgN7liQlU_u{6Vi^HxATxR7hg`r}8dXe(wOmm(ed z7oTp3JehtOWmMAXtq*)}o}t_+l1~vO%eiLo=IdLPE@F6nsv+dVSfKvl+RM5vMA_~QkSpvm@d)S`KKnJncbB*_J zBp^A2%u~~&PpzOa&L3pv(VVQdEsb$kd6l!Ut^C=itPBPcgO6WYq&eQbg}X0}dwt1} zd>Y=NxLBdep8W0ZTTov^Nn}mQ3*zeMuTWO-Mlf`-!`Vn@cUek+hYMgk+B!nf&;#vE#CfrTX#Lrcp5V)lmLdQr{+Nem_QI@NJMkco5syLVQFQK6JGA_wZ^D1%s{$ zc)!>09G}?rSyueUpwaM>02BruNeG)`^=@PJ=MiAwzKmPH?Q+|#^naSCfSbVtDS~ed zaT!Hq2gKI(jMr;#E{it@N@WkRUJs(IP9IJD%k;eFO;je>PLjRX%`B7@veoGwTE>hg zuf*iy8TbMnhPA-ldKLI%j^3^(T@Fu;@5a~&j6Ydxf}Y#?w9>o-D~7ndCcs)(n`4bN za1NT~^MEwM1nHa7lBl?Ri5T^Qy@V7{sH`)byu~;mIdmbpp%GXuOj=qgL&G_w>G7UM zfmnh}44{k9>NjQn%H{nuqt6ut;G>Z!3d$gjYGkR{*TfY~FWaw5KQC@WAvagpJ-kD( z*9ygJ8xUJ40;G9{@vWh!htD?oyCK>Rzkvi@Q|2RWWK{$db9Wu@vu95rVVcQIm6wQD zfYX6u^JV09x4Uyiu_B;VD7E@G zdNP9$^t%01L>kB(u`9X%tBszd2p?bwy~Nz|gCV`)5r0Zi4d0@Xd*GBEQo!kH zNxJJ!onDgYONGB*E*Wrf*@s$djd?OE-c$tvmh~D*?Q-dKSWy6_yaurSW=bsYpI7>4 zl<>!6&++)!R|o~qxKo56I^F}F2Nd%oIIQR9A`PQWTeFm_=Z{WKL!UCsVLjz3Ke>aH z2MoB&5$jt9=NhXBdUK~v%16v$6=#*^YnCJrvA--UX3wn+>Y*7pyg>FFN@t)awy-z` zt0fD9AS(PFB!scU)&;?!b`{}wbf!PuB2oVut90*^Gw27_vUX)0Jic3Q3o=d}Bf#pm zSy>s{To)}QCn1$Ix*A+!a*6?7Uehg;)q3yOUSZ0buh8l>9v_?Qg-z+iw`b|vWBu>3 z*TnZcHjdwoT>iPtaIojrIkc!mP>qlfaq!lepY1Jlvsiya)jzx#EpWcfhKOxHYQ(p# z*$cQ;TFQ!Qf{P?lywUk{CWa9BF{9dv6t>$(-M+q+$jp|O@;*UUXPu;gd`g!4&SPbS z+!c86R^JW*)naspYb;@3>ES6Nm%VmYAmP1QzP3H~$bg#OMOfdp-^!&5ce8&7t*=`$ZWbzu_#moxzn!WEM+yB0G!i^mvKe@vlXY!_xV0 ziUs>#?Y5~ugZB|=QTfy~XfUQ!UPd?W`h$t@lhDG|AN6WQ4Ilh*RJ8>B^-56o1rxOh z>KnQ*3s6qPO(i|CxM-+IB&}162UkWnV1^}Z7}r-x!gb`MUeTMe5}oU7(}I)mEA@bh z{JP5?{_ltt^C89c%@G%IAh0&hZ!rIJH`P&Q@ z;$Bp%VpRHORhkXW?!@c%w6?p(!S+zVDa|E$|IEi@>J+GEj#{BNg$eROp5S2o?y)uh zO^sArG->)Jn1xYTD8e4jqK65~L|n9|`Qm`UsEEGULA1Ugj&I{xn*&4=fBeI1(Rw}d zLcjugOaiDF2IR`f68&-jp)-2k<1+6QosVW;LNQKod;fV(XAZ!Fu{HJig> z|Mx0qVQRHQA-|c_G5?(_?>f>Bk@@QKXCGS*rB$|r+zBv2?&kVn>H)x8=&_~#+e)* zC;C%uwWu9Eqww0`qZ5RQ<+Cl$@54A*Ee-n59d!!;K7GP`ER5H_^bk6OZ})X)G^M+z zAJDh>QR=;Xda@N?^vf1nsZRScRXBsi@xj|RoS`G&e%zvqts2B#igOf|2Ti+i>0Ff! zXkn&dWo(fVSRtf%0H+ttJEe__$2`xiT>%c2ypSKXZKjr)W2yL|pT z*5Vjt|085Alvqv;VPAllNi{ zjF;<5@_t5DuWXGRO!g77dDmr;sehh0OWl3+P}BO9xE6722SX&ftT^r9UQC`f<-J?_ue8d7 z8*<>3T7E`)|Jm!FF}%ka2c4@EhhH9(QsQmXpskuI8h3W;^x1zI=NMz97N26S(@+*r zy8!vfciiI;)*eRYsy+D+FchFg}sdzrrn534T@rPgGrdfOK-nKqyLx%To=B@4nrR*|WBV!@VI!-%Y#yH*~%qe1#8C zL~m1Jf!Il)X#~m8wdfkJ+tz{tFfJoka*W~+mrS3N*WUBXSYvNLR(vw%Yw!~%mn@?W z(AiYr|4$8MDhK36I*7XJ#S4Q-kPS1Lo%_!n989AcBPmok2%Z4HpSr8dHS@5SnuYa& z`MF%fS^tUHuP}~xt&MOPh-E#LqU->o4{1|P*rYY<>7jPv=!O26rP)BB+M|^d&uM3Q zdmtbacR48PunG|Op@!zk?6Bc)nP&anwU1r%zZnhiVoo0s3be0!b#xlXjIOm_Njlk1 zwb-cTZ%u=nl@MPi7&_dT7Q}<-HXjzV)M$^Wy#-A}T5Uu$ zh_`1VENWcoIYGVz1%Ke z)64=dth4@2{)?;CNSbxD+6H<`#q2B@uNR`{~U~v|QEj*N`u)#1gvI@uQlw->PfKH_*y+z}#Qsd}5 zoF%)_i4)dATmP|+Ato$>gzha{a zIx4i^yotc)%79#nkqIfijU{URRXfZh5nslx5|-o;g|rW6#Lt0-bB4p}ieuHfByIxJ zx_pvXcXYz-_n(Ue$TF9Z+b}6!ta*EH&XwPUpe})KhksT1S9>cic9oV~y|C-(!EDGF z$YptU0q-ZmE+$JjYADQX4%>=M$hLUoEnUwc`@3DuaCNGu*YB`7tlVMqt6}gx>=XXi|*chF!l1wCMyB+GH zW{0aYO*CsO$vukE{b1jzNrE$BqlC4Ss{n27$&qC5LRT=1k_llw8_ zo~puCuP1XAAEw>ypq7&2>Bloq#uK`CdFQjUzib^=DaeP)jwb6TKKC-^hz4EM4uG_6 z(I@5qFyk~;B9%gFWONWNf@H=A#C)a2Um;}i)62~A;@g?32|Z~p zb}Fp5B^-<}+rGXxZLgz>yck33tmQSbl!Yc*o$y$aJXrh`%>oJtPOJ9o2AlG+*9Fpmt6dvg7%HgyGD?2Z8#-H&bmk{z&GXUq`wj!9x))kAczF{qD1n& zNz@V$b{?cu1;;bOi$lHA)*;K#zx`Du(HE)~*DXK@u=J(-jJxKIU~g&$oizcp8C~o8 ztOau#@^ff%GIqV&Ko>)q{ZIYtAQG$wl0oS4?7&CGF}~ zmD3%fFy<5ux2;ga&Ys6B67BXW)qn%afgn_WW^hR9mkDmexZR`qmoVz_8l^9UNgIcP zYs2bONvjiaec*P{@7%+!oC*67@nhr*{_J0^L7Zrus{FwGz13iB^Hr2*5(-!DmjPb_-OpB-k zs?-GZx~XY$;#p%=A18_@w8eP zwkYY^ILC7E)zKh@k>h5=@@S8k|H*mV&KFh&8=E4BM9OtgF&6L$ANUU|LfM;Kx6%dh zLub(PegCAqWAUq3ycs4Dtkb~ydkV5l%1l-n2_f?+tMqP3*P<9p-!GTCpKYDRimUJX zx~b#TaiM_zO~r)P6wsmdSog*Rf4?zskf4fX0#7QRia~+Wi&L%wynoB{s{gM)OUKfc zoNGDhPDcYvPH5VPQ+%%VDPbe_Kq<};@nT;Zw5-6tQWCR^yt5tJ6@h-pB00Z0*A9Q9 z;2V~Bpd*v?Q0w91RZOxme9u=wGas<*iaPhomRbERfWVK6za{9F*KU1Y*mQi#7*tn8 z!4Rls?&1e5iIiFBIa(Afg78#Ia63pTB>@jA+bSxqe<7K#&5?j!!#!G_AaJprmQT2> zdl~diyBCug8Kr6kWjRo*Lbn>ODER9}Sf?78CHWFtp(nsd1?VRnEb`A#MS*$E%QJe@ z?_!kmx&R2DhYlmt_RGM84a+9BT={%|4G(inC{qq4cptCT94e`VZoB9cOIGr%iHXlr zJVpF-e=z+7*=ZM=z%Vq{@dvP7I|jYlCxHA}@z}Z_Zt3=K%6W#LDh%JZW*5!r>*cG+ z5wi6gkYY15EpPe29nMc#mSCA%T1NFZkL@^zwwt73cFuQ2Nv*wauD++rjOEpn9ue~# zSQ@k#WVozTMp#91zOS8UtOhW6a0F`AuGXvFF}b644Jr}jb^PN*5U(dBcNOjvFow=F zj3hiJGvQyjftrqi87OEIO!8&%YNVuhSmg>IDw;b5>#e*nz>+6`KiS;P>rs0o&f-!r zQ7OotzESllK?5s-lLs^$0&p|t*v_ZU{y&K0UXre74}Kc zSLb6suwM^7PDoDc{a3r+(knQ_38Y*L0$}C2@`noQ>eY1eeoQYUvNA zmF+tl&?fYJF}Fhu7S}uYbK$AAqMPF^4C69$@v~RUNVomipN5H3Sk-ZMH_42sUz@t`akL zL7cu_6{y5lqp5XM4v=)}Mto;aOXRN7H7W?DSjcoTDdlq970E9GBzyvbB?K>&i&2q7y zW6q&2DBmhm(BOGlDEsAVkg@&9WZi^{Zk+1Ff0TM=alBW#?^R5}n|pcGjPu=rUvs2D z`{KGAZd5@;BEWC<(T7$45)XTQr1$N4Mmm?Ow)=_80VvT6219RlubIfMpz(VAW6qp| zufAV-Rs_M>EnoVQ7Pgr*EWsg&=j3u(^hn`MitAW&(1a7x`TZ33tf6gt#h0Nt(vCw03tw7AY zVo^$%Yqlq5(SGvTYAXQu`E#Qtk+rLNR9L&eXB*gzO>JV>bGeM)=KHWtrsOdq?GU28StsBThjT7`yr@C>hy{y0+5{=-gVd>|foC$qNW0yOASp6I-(~K!Sou5K z3!j}N!9da=f3a!)uU#nb*B>bTd;4Gn;=lTy8H;l)#`O!LAj8G=8t}eyoeYmgGtN(# z*DPW0g(COEIQY2^374%vI~_F!PVi@|{ z3ee+flclpz4ntZMaDxkOO_Ougb%T^&=7re;hG}E?sUBMSm&hBk^zm{Q&JVC(NgL%$ zr|$&sP=V75^X!3e#zh?I!^k9ST2Baxx1CciFeX(b|0UYZA56AibGAo*JnVtCPHltC z?#L=MYXO=50yR%>V4_AY_)8kgW8IYBE)H5Y_#Bb|ue1NviC!d@&^uc{}im z7vmMs`F(!k^6~)cvi_O_Ss~FT7iAQN(n>bjP#Gng2n<&85A1a|VzT=`D~=$K|2vcn zk`>^mlJoKk8(Gd}A=ut&#;{{oGflFyyEI>?;#FX`pWw9^7Q{Z%M7i_;pBm|hSOiKh z#5<1>+WUz_wrEe)N<7C}E+l=OS5GMhcPH;$yuc!Qk%df! z^5PiZPubg0p@alxbP`>qTL!g+su=8B5g&KF%t&h5PJ$qaaNdM#yk?oOTDX@EWcp#P#QT|oL zeR7xaDj!6sZKs6^{-{~$o#XVv>M~kmyS^2y8aG!I(2#I{$#;U#kJee-N_N>1`?^|3DGs&JW!g2Qn~RB6w4;&F!jfn z0VQ#c0 zU${ofbC&(;6&fVo%?^g^2pRECz)S?(#h19z1M(%*%@|Q`5jdWtDGJSzH-x#k7f|_> zPCZ*%XyeJBI(Rr=!aU?{YydIsFD}_xb>94RG{lOWQX}Z+Yn^bJr5<#W->9}SYuN2_z$NLcOH}7iS1eemI zTf8JD+YtZsDW2kKy>gc3hqM5gpYrn=Zo(pqKgg<+yWsoUXEu8ZSlk6ze*mn|~w3lMX z`HM@(-)$)^XOZ<<6u15|+sSAdkXT)p^!wby>eJ#N`H6s|kztwCRPnUeac zAsvh=Dxq>JaABN+HO@Mhq}++m58IT5tnquHh5R?{h0Qf6fgIWZs9 zfwY-#G(x&+g)!OhdAcZDn)X6N(+_|4bqSt!+7u6~>L%Kx{m8oGwgMy=Tc-?i39Sou zeH|t)%|W7&uUiHjq%bqMRFrl8h>Fj#QF(D4Cch%^btx*rsuy zK!R1}wJS9IJ&EMfLiVuG8B{?-FZCeafm`+|*&nf6fv>V~8n*Lq)@{5)iud!tdy_s@ zG{!=%@Azu7798J|(?d}jpCtO|NKa_6ZDv$ly}zR=xCdi0d#Ep`xZ{m7zR@z9fy2s< zgSI}q3Vl7z-B(zBHNCZ<0M89t1s>21`tG@CYU4Newx@sF2Z6l|c3MVaK1G5B31fxwsS&AyMC67;B@&WR%YtZQcjXYZ5 zZ|UV8(_7;{<_Agk)h$274f3r{loxuNV@O(J%f50?0E8Xo-7bHl1Km3!YL75jFJtBQ zae}~;UQXKK6o{=3S3Gqd#$VfaC`12QLT9CVK)nFTfieMAfX zzOH(gnXpnP{KM1m`;5p<`99CrgbB4Gt2~G!Y=J;U#qV^5(VB!i$EXqo822S{n|2Uc zzIUIsF7wywEpFgVh3}2eK8{}-Cb>a5wbVoAub(A>QMWdHbW_tmRD+Ws=3+4p<}5Pl zRciiCq=FgfI!O?<%~}AXYJ3sV&PSY~p`mSn(xa$|k?WEF8t!=W1Xe+3E`aeqpm%yS0yzRYJ`OuR5kMG_wUA6Z#Sm{7f2Fy`K{n?cSv#IZk>SC=b{0{*f8mGo51_O%b~U8qvhFhL^hBQrbOTT+PvA79+eY!b zzkLdfokNo#yfNk$6}M4`dgRBYOq)#3n-Tpfzl7&jFBY@?tI=AX%cNGa5-n+=!C3#G z@>Y#)Vk272fol)lV+Nb7jn63$qXye&c}zFt6t*%vT6A+8Ceb8C2}oy9^tWKBI9sG; zL-+Dbz5?=1?!&g~Uq1QSCx^ax8}JmO6*wKQ^Mk5u`?w}F=OL4ABK|tO*e~4?PQ#R} z6`KBmsR;S>F5}wOG)b{uh@}$KeT&ZAMNKkCf8aRmS%^Z{eu%)}mE$mmdQPU4I_0GV zVnx1&7Nw+^zbE}>8!W+N13}E8=iC;Oy|dqEPiKpDCsxa0{$Y#klua5XSuAasLJn!W ztGk#W@j4r_3+G3ijs(*QovM!C2;HyjR0^U9Wy%th$>Rqvv%QO@TE(+T%2ZR#k8d%_2{x!n83wG8SZss90-i)D>*TRa@QLpKf=8u_Yau|Y2 z&H^-9Xus@&_v^7otVVV{Q8aaGE3JEPRLGA{X( zOBy5|qx3Kk)+HfY)$tnEPe~&)NUlSi=LI(FvOCr}rYVv=B31KA+hwvik*8Upfv4OX zK{paXa$fuMeL7l;z7-s~&TzDhjMvv^e&e2C>JH!c6dyibTzbNQRR97&{l85pw*i*g z+#b9KX1bep+fb>%i95Kjyq9=S`+r zqN;&5ar@Y{3#LA}`x_In>(k1gw|m5x<^2t3>b}}2sUh1{SSMY2knNAQe46U-%pZ0X zbcF2;)6N*FLjqNGih^!Ky<%RN<8Wm&=o$ux(6V6mdfHW@F)xD9D1Y(-^66R*O*^Ls z3>@d*L1>7ubPaufKe;aH&@g{H8D{__UQoA&QfMep*%w?RcQ&N((bB7XUbG?@9S!{3yeN#gC{C3u=u?n(X>vRI?JB}vUSR3+CH(VlvpXadBe|L~7%_Eg+U z?TyNC&W79!{iwT#i`w@R*EO;JKkG|~A@D^Sj#4!oi<5Q#HP&?b30+z7GbPT35916v5Dju6X{`hd^+S zA{88%IpWJeCVj51UGw$oKpYrcG znL7u`)T(koF-0bvkQl^z(l9*HWSVME@O&SoUq~$BfsYHo!_W>ip4jS3(9!FYx|8lq zKbU`0#B)H;;XV$=u3gZwcQF+hAqU^F+*5jlc+t~I#IW-AC{9OBWQn>F9i!JxTrNQX zLyGLE9__7LR1a$pTNo*!6%E~8=$A81Vlq?ciuCMVGZUZlz(>!LA(AyoG*<3=jRed# zh!30vxh&e7q)8N?HGXg zU=>d?Nr~7iG1M!uhILlws|q`H^+9Ly@76_*xA!7T33=#RMF1XR1QcWX_Qtz?iVqzO zUQ25LJEAgO7aVS>^FQz8CvjqJpTiSj$btWonz`_m>KCDcRbqXB!=g6OAls$G{LJ*3 zU3sg-OJxr-1b^FrK`!MCs9^5#aU_MDT)M18Q5sQ(w86Z=!ZPNWB|9O^uf{Swa9jY$*vgiBB`cyE;b!1i#ftQ6>78i?C5H2Q@QuyFn9=VD93Ikme~E% z!<%mp+ysyt9Q(ob(d_-B_Q&V^Id-CsZoTDUW^!F9_WUt%08wN1^$u~`_(-PEjcZ+n zK>2b6AP2}gQbWb&`;F;;6uKjN%s-w%%lZlb!;gQNkM(h-f0imkdkt@))0YJaGh{_? z1pQw|Om#NyQ1Xrm1c)zt#ux?5#0E%nSal0U9rlz|OlrnQuJ!K>xXkh(=hN_2Pi<_L zQ2nKf`XPd*d!;{nVHW9nEb*@Kn%ny-n-IJ=)ajp^z*il8Aa&20+?qRTouN1^6;#T{p zl4Yk{XFKJ;K4JT}hW8nIU7S@W7XQmzeBxLwl`_eOnTH;K!UQc?HygA|1yRKMIxHL* z4zwUjWRSA&Aqp9HE~v+VwqBB-(7wUiwDU-zxGq;z;tY^~2^-usaq z^-8P|cdrXeMd_7;dM!%F_T9jRqD)kJP4Q3P+U_7zr4R5rn z*MfPms3;Cg&#;FZs~?SH5j{`HoZdg!>Shvo>%keaw5e^924Y-LR3!SoD$A86CE)KE zxdL^zuNrz(lHIjUc(R*#4I_F1Gm;`L9tMy%?auls^fw&x__+c`a8ke4M1$ZX`DP~O zP*))I$)JE{?x@`paf<2o-sBsc8;l*=ojVZa&57tp!EMg*X>sQj;QLL%w#dWtq$n9? zHmUDa5T{*R2RTz;rb&emY)uve><#$?(nmWit1H+Hh6Mq}i&eJ5XyiQ85WpZ}!b^Cq5YLJ%!x#$^7vJFL>6ich4ORIwy{Klf{J9e!Vtxq12K z3q_1~t`~)wyfBPHwvXyG!q(&3qwYSqUiX%g5=c!wkP!b4HALoxls#VAnv=4eGIM!@ zlE|@S5_M1N77?S8D-J*SwYimGQbNpn=_d@&Jcpgv6a)!F@O)BtQ zGP#5tD;=j@5COsh@AN!$oO8PBt@n2oUZ^hzA2U}kaPdvu1XCm@3!JP?i^+7}nR$Ww za4XhE_ zR!cLBfvfhVNN_)Vk+eGIHs}YKtk@;c0jr83l1h7&!4Kqhm!IqA3B_K5BfKnX;but? zBD#8*wDeWPOQxP+H#;?DVsc`QTyo)pkIgeN>$ZP0If&5uZW0!dk&vmwYdYUQ8%!Nq zILC5lJ)!=K6y_4LW(zt?tc(IA>164Q9^|Fft;)FXhni2#HyLa$b|QBv#6B$V;J(2k zWOl*zV&ynLwYwdHfb6e)(!DqYWoD5bEHJ&`SmMX=Lt@^EQq70f3*k4murY1biv?^`vq3u3tB=1MkS-A^LF^0l+z9oWXmage0Ig zc8;qdko%ZMOr^tsx0+Ih+Jp@Gf@r3_Y;s`@(;d!@Jq*r#)c&j{T+g$+2bJ%V5^{Y{ zcqFJ&x9FFUsw0%1B9JkBl5Re;BGLjJlyyD2_H%-A01bNk4CjfFtRLS;S?lt@!ZZw- z`SAFRg^fsteb@Rv*|Y2f+#!LVVG^`~L0v>OoRe-F(6#4pLI=~0O<6^WFZ>H?G0Dddojo;7-1}I1 zRv3D^)$W{Lvcl0oA201lnJqTx9;)M7ftn8lKV{$IP zS|~qAS^awOZmnQ+pV7RnReo{zo>2-S8CG#J*)F&{hmFp4uJib4Frp#dE{5T=&X*P5l z#E8=Q$|h?HoGNMqFS$Frml3%#{7c<`mKwO0B zowW*I_cK3N^34;Y;JT^1tZ%AngBO<%mK&C; zBaJ81cS0D4!641>*&0z;O*l+@-BKbuiP@E<1>&RkfsBC*4qH&k`K2m0|Mv31#<7Y` zs8twT=H(?hpQ~jgs5C7WznbS(qwPQTNiK9?L8aU}G3E*`R<)8L^YW&?82NjM93UO7 z7YfTMqjm*~8c7T=zQ-{@*Ix?-8^xea)Cw}Yxu`plngk}I{o_Js#%t7=O@AWr*Ksau zAjl``G@W<_5iB$c{6ejBTqu1hlgY8KaoP1^i-&>$YZ=$o3#)Z6^2@(T_RHu0!)$OXp60H> zn}R+4qpRZcC8IUeOR2|S$&o%S^QKt8SrSi!;w$)C-#F)tW#V7zx9LdQoL)MmH5!Ov zp@|03&+F5Du9O|$QiG6w#|&U!Y4*SL!8b6)8o_Nx{kr1qFhH1$5uCZ2=hsjkf}<%#8#K!hYD8L7-hJ9T z5<>6AqIh6m;m#ix9CXn*#(gF&nhc9xoRqj@VyYTs)uXC245JM4J#VBEn5Vk@64#Y_ zkaUO0_X?-!J<|JAGEQA z6x`(o%DS+G8s~(MD!(H!4)jCU$Gyt44SB~KMxzY54`7%l?Gq3d-NHP4V|{LMGk70{)ZueQ3{D?JJI!jG zWQ%;i!fvaXoo=B#8_8~L3DQ3`>&o-HJZSsuHG?k7nv_vg1a;8Lft75=!a%t!ZjhZ! zjJ#3^hl@u`vax4j!3RDHSO08nZ8Nv(6+gHb@JT7NUz|}{XbLG;;UzeH!nhuk>nqV^ zA-AYy?M90eR1ndLKMTa=B{g7gIiG@ZiDM;wTpBMoH_WTeYo7{|jTOO77O?g*SwV0e zhNsraarQK7q_XGB-eM?>?cpCOLpe(4zK>X@8nadc&j=4!Oy?zN-ioL?JNs7vsxsEu z_$Q>zH6XN!GtvUy8YpRD34`63d^B7i#1+Y1{#|@x-h(91oo(I9*jMoQ(D8!6h6oL( zP^WrqeM}^M)*{5$%GGlvgSzzV7LDtqnB!pgJ0agPJk;&0aCeWU^cEtYls6Wo0djB@ z9foO7IL)9U&`PKDthZd(cM4s562_0b)pWfPxK$)joS4ZT{`)Gz4-rwy)p z^NyJQa*}E?QT;pgJ43-2(-uujEkoj(8)=#BTSixbo(Z)r(&JO!u z4rOpvoc+$!QyK#b<7Hera~6sEN*Odp(I<90(iV@Bh#{Iqunju$6hvmvo3)`~Mhk z7){9D)>Ig@6EQr((|lwttqRD%2*4)41WC@4P#Kaqm7q@y!CGw?J_TkkePzDZ^m0Z? zYZb3ce5tWeNg?eAn2WT4abX|Zjw^a(4rqjpSAr@Dz=SeTh*F#A(URM+(Q%~1!3$yl zqRN@X!oAv>zWSW!U&jxpQP|0nW6m!G&d9cE9}x%<F%%NHO3v9S3$cZ%Gy@_QXc%3A- zPW>!4Vu>NXNj>uAOZHp2i|g6eok4uaUOClMy>_kBC|nI7Et}$JPqY~ZwEf}B6cT*X z=ATU)oq?3h@V2zX^#f&h-Jt(mLv3Uj(cCFxTlFU+s*SSZ%vL!)?v;e^;Ql(y*V{13tuBwC||Q*imyK|Ezm;`SJW{KIotRz;*S}J zD&VOPBV14$BM*Pp*vx{N`(TArdz!-$ExjBs?BHjaE=b5iq0l4@I}Q7+rT{mRdP9_r zCsBWEUP`aARpTcy*|b6Zxh{q}naE_RXQt_gPCedkr}E@tw(eRxTJeKXGjYAK6nsSh z9qZ7_m~T<3*G9jO3LWT%*0A{%aE>+Au?1hdm--WUVBkTF4I}&5t}cM7FV7s$sL2=X z`b&c>wjiSu?w^gw9N$Gde8_fy!TfmhSx-A_1i~Wdy*)eS;YH%h%%f=Y37a<7kANS4 z;q}GsMyyfS$lZVZZCb`kNPSD$2y9^KZU;%j^xqWoS!Sts<|ol3aW>ALerewbCA*+9 z8Dp1u#(CYa{r*W@{QI_P(JJS>1+_UkzLAmy_oYjWhMLDh6tseLenz`=8cFdkn5=^n zvC2uT-PKYRd(Q@15lzF%gHuR47ts;gOws!7;;uzg;~g+s)Q6POdh$1VQnCMhY~i)M zl^&I6kHUF`mGM2l7i^DZV7=-N|2J3JTRMA>hV5UQyZE%;OIhi*H^&ddQowdIqSvC= zRm*v9!S=M`ijb7=?hD22_^6h${@mpeRrpyr9AI=-&*g-86($ zh_MW*82XVL*ftZMXLpPTtTUnfT^Y}inQ&Z_GV%)Fhm){X0NVra#X^~f%)ch1#*;(n zr%Q6RiWX#^Ufa3Dz5mB{e?|Wti?agqJZ185&|5jki_GrdC1veiQF~*k?gj<4ELyDY zRzcMam)JHTuQKBMzYtDh70#Qoc0&7e|3(YD0wh_!vZ5Fr-DHI|ey>i%gy-%j-4vgS zcG-TfQ4D7%Yd+3Y!U9!*UK*-12@SF8e-|g)9R0)+YANQIjnQ3|#s>7@qWKc5ntR=E z9305mc6!Jm9+Tgfd%YDRM2Zck00VuXb+D92w%PRAmQF8sM`LZ-4c{5Z&`s?U+9Kx}u5$TL(wZhM`9(NRuI$UeFCS}&u7g>b zdyFO&mVU(g5|_?X zT;b{I9d*-yVms-qa=7a^RtEUVr}Gb)JyBpSrW$xRh#pl0kERi(h=`tCX(m$XzxcWR z=4CIt_OJq%tKK zr4G}Pth zGtWq2=yZ*bJZ87o2TV5v0M|XdoWthX@HFISEyhd2r8|Fr1jm1#sb+*35_TYz!)WD#O}P0F832w6XpB2pcZ(@f$AUrad@*#o|O74doayT58thL%6mj|d**;QLoHtnO(Q zpjJQWMM9c(reR9WJ|MV*jol!oTQ`BrGJ*FiQFgZM0W_%osK=LlovCmUGm`^28(An* z!5@%Acgu8 zseijuS&dpOx%W_G;d3enK@BfXzW~I9e3ls$vJNUdf@hDlp*fe5?3q`!K{8 zq(6M?eMg5|UQI&=Bn<>Cg-!zh9`}MLu%iWIpIP!xD1|y4mvbIjF>0|D>-(@O+k7du z9lr=T8|QB&NP@(S;k#=8o#ezhJLHO3Qv3F4@%gMsN=k?^sT}MKZ#;_7e-0VlLMN&X zww%m11ZV>b^A{96vU15xn?qKLMoG(gh8)@|`)(-`YJcylU98iPwn>LANux)Z#zr9h zi(I*sV%9%gW#?vtK3OZUt_@E1T0n;n*F)`h$kHum*{pA(JWq7|N_zGO)r!+&Yi0(m zN1BV4G}&@3{u3euwHcjED>X^c-!5Ow_^jD}7H7NB0@#z3^Q3YU7UG(yzNbfY17BJG zq)|^20;KCh)89){oRiPb9e)7og3ezG>4JmLIj&b*XyD#0_Q^UtEW9gx|3RdUh&n6N z%mo&^kRmpgdPw%6CJzhsDdbEm8LIK=CJ;HeD6`!HZ#V<{AQvGS|z^q(IWbGk5={jHLk$#QGl zgk=rfhlY8j*C2nt072Ec~2{5Y$TA_ngA?C2BK*6=!&q{S%k7mRpGbFbA)T)z zHrWHy7peSpHnV(hI)=4(uXvz_-^9@(Cp$t1gf!b!rZaobaR5wKUx~PsI^`R+%ERi3*h-OOlp!QD#E-| zt^p2l_N(QMBC(K*6bNb}*m~Yb12GO{QYg`iS0=Uw+m{`m0vrZ4lIzP1KpB56t)bUI zr{FGbxevW!gGO1XK8%Jw_}rBzLH(#6EvtZ+VV*V?(b*TSc7LarKShx0sK=!WL<&JY zjMAE+wXZLdg%Fy9Ln4slrWdORBV}vN>@Q#p18aLSMLDOw+-v+PTdHf?N{p_ZIvSS! zF}AeDbk1Hs%d3F6I!hVo3^`iH%eYju$?@Z^mm?wmn^zCBdPsv}5`Gc8>rL{+8DFO{ zF?gDbA)~p-JLX~mC)ucjx9f*0TWQ}Q5YTTg6Tg6Kio_`7t8!B4?yfgeR4%59{N5YD zS7MUTc*OcM5m6*kHtD8})t<(EA7u+1+DuFe<8>F}O<@^6J)>j^XUK57$3afN`bAcn zEf(o<4+AQ0VgBj%O_B{ST8?hg(TfqxFVFpZWa1rzr!DoqA&y&5A$LR(P=}j>)ZAQW zuY~U+?qmbn98JWx2U|}}3?y54MdC&x)KDVhmKPlXD1|E=Hdte$ILQ!mh}lK$@7uQ6 z(qCe1qka|EAqMnpkNlo<&vcSW-1JoJAfhlbWsZU^^CqSF8ZO(~`Sc|UM%B-m8}@GE zYr%MA_crOt9MulZA~Ok`P2%9}z##J~2hn0JB9BFw!8=`!1Ai5MH2JhO_iw2)H}vUl z4EJYyC>e`lT|OA(4`+cMpWn?)Zs9o#9A%pwxO$8+kTy!hECQOo#Nq|HTOs+y05`6K zm&}^3Yx zKM_>v|s`#?w_28F#W}GOD93KjC6%FDnJ^ZO*TfL!?gZZCi$FEQ50^dw=X4`btMW z879tn8QxnxRul#=Nx!^`I%6?+0ws2n%n*67p+1VSNZ{7ZZT5Bx{G-iA4or=;sak)z z3`HU+S^bxeE6>TTUgiJVG>JgmKgwZk2@ZLYnp4%?W!!1<9eD$-ae9OXJVd||bYnoA z9M#*6h_0`OKpksBOSUbW**

is&BLwtSZW{oW_aa3mu%Hk@?Z;CnikxH3O>z^sB` zLk!3#-VDk<684z-lwUzsu3sTP$m7J>E*fwfRq9&Ko%$Qaq@LCTZ&s0eUbk7;ecYo! zB3uv>$zT|HtGTr>u*yhL+9dY}iWm+5TFHnhqFJLVB1y(fptfx;uVft?**|7l=?CuiD=|SD~ z@x;c8sdCs#n8} zyKEE&`gCLUMQGUQHjASNGNtQ}1QhfUrsE$64;C(btfZwbDyfHvkK!sWf+;_6-N- znw(HIDWm1Qr#A5bp$8z+P-ulMa#f&bVt06#y@16>B2!0WHbmSIO@g@e8mi$-)tmZ& z#cGNQms@1t6(Ty5HQ?heoD^6rbp3q()0+^E4$(icqgHQ6Xo(3MRrJD=hmsmEwl*E`CkV8A)$xTdDHvo zcYW{J?gf3|jo1gSMvFkFrK0DC)kRD~Z}oouEQBHBgeGSp3GB@irB! zYvce9h?Y2TM0yDb;2O!PO;7zM`5KH2j31|h^Zu^(;6$reDjs#d{gT0JK&oEx@CufJ zwp8%e2bcwIy~x*Oo(juEQd2 zFD3S56l@Ku#U(v@d>WhgTP--Vkp<`Mfs64_pELz&6_|<9XV}%ZN859(hxO{l>h_a5 zGM7#?+-q$CA?#?niA8BvIwkKKVx3ZQ;8`12f%GC>%nod#agic)5kEV_EfH;K<;VRq z>jT0Ql;{ya>d@}*p%42og3Siw9@!54dlnYm@%$&cWNqTCy|bAdeyunW72v@^xl*DQ zIB5?b#>>P;+o1%>kGi#a9sfvjyC97Mn+VsbrRMLxGjw?7fyDsqD|uwY%KcZv;d*-% zl4DsrCc)bUu!_{P(L@F-ZfN_ zszy~aor=DFZYY8E^^pa|cSa8f-+4yR_2W?_#+X{E&nqqeIHN)`A}^$V5PmZ!8N|{I za!ikTLH>Tkl!!7#o zNf_3PaIVvhoqosm-N0=`gNdhXw3q?6LM{h-$`HXP9DCts0-~D0Z(6Uff^XG}i%urs zh|nm*-Zt2J<98%pcVR-4-J%Gw0ZcWX7n0*#Swh)^w&b^wmr35fSx)~v?^7O&hKvY> zL2A-(mvCCG9Vb><8cHGf_p-g3YDXe>QtwY1K0=g-KYrDrjZMKEfqgfpS7)z?Fl(cZ zV*W^Ew;{En@dEQTIVBH@`gzKde4$x!puIRRfXFVcxz(OF6TclBL!ePMdkxd| zdV%mM!(-mpjywuY2{urxa3*Cnwa*IgWgWHCKTg@MAy%e~3!A;+F~T?i04Q#qZ3SBG9Bg>~yC2I?d> zP?tEZmBKtk*xZ?glxLuqi+N`G2FsBthPVVwbBDnjcoo>kgI^* zJ530qW3zTovZ??O+)AhspE2muYoka~Szd?uE^R<{THQvB_ZiOn^u*kVQ(=kelMkXO z^BJqJ*IDXwx=o|(B=K^QWjYpn<^;SwJ)qAKn!S>!vZP?M@!#{7RSUEAo*7`#moW8s z3S9LBfcUt#V{JlrU96w`2wa|jjf)k;P#?p-q3*W?6V@tbsEU@D-xjQ-T(B0qEZAy@9t_{IEpWWj9|CeHpTZ8Kr^e4S2iQzyC zW8Nf~LE}L|DvcOkAOWNy%X$u~pu?+%?BiN%;v;yrZV%sWA=l(!gAA-~G67PUQ2 zLh@P8K{+Z$cszMni*1jeQG*(>!eh6auSzW3omrxw1V**RzbckZ+-|J;wHKsdg3b@g zZa>R6Fe{5Y!^s}%lj1B%!u^_eLvcxAgUe1UktElvf-QaTN;{}uQvGdrfHV6hCWt(9Cva_t^b+|~+m!nI=E8jP^i(3K|SbZ`h)+- z#A{*h8vhp4p+7Cpj-#6paAD`)1El&*g4i1m3jD5C5nIcNGo;8GZ0YitO^8^Vh z%*{}F!*+y(=@vdNovbkpH4zl@Qg9NaM3OCjp)m1~hm?qjoEhCodGEuUQTE$6-E#i_ z6$ECffz!jPZcY4~ifItYbU*u8iaj!x?YVNyq)&Py*poV8D(1SG$afETC!(X$&t&8f z+&}DMRymjGYx=yT7q4}OT{wlMwOn5&A}q_uYi~T2?b6nc^cY*o+|CR4Sel+NvNic? z&@=UsnS~P`X+_JlX}?^zX2V6`I-c0pn1d?%A`n0JGnnUa9o1fUKkQsNg;oregUpWU z68TZUsuhZ43d^M@J!)$`;VFZjSG^!V9YPEPD*z<1Q4Y5^q|Iq&&E~9Bm0V~WX*iQpwjN`)Pb9`3!!FQC)*pd!bVA;Hf{afYYB9G%h$+M= zFH&Z64yHr46>W{-NdB|4|6RNup0Aj+d9(MA92&mkNn1mbJNX+U`p0P$K+^W8Hvt*- z&lKp`*u0?H+V4Rplg(9Ui(MkSrKC3V;z~TP%BFLqM|$&NFGNKuZUC+q7!m~f@Sv7u^SANXMp`E_ZD!Ke{^*)IThu&3}_m%YWlde9H z-Sr;7^kSgYqEzib>#}`;yT6r7};myT#VJ~8Gn!0ZE z?}l_;laiXJhrPN588N+UP3Pz4)j0qQV@3FzI+HTKW)_VGTHsRj70}9u<>Qt$OCf|-gT~1iCxZN+l zLWJaYDE;X=DKUL+Xh$blGa#7>B)cC7jB=POzN`q)@ zYjC?W*!INa7HfjymfKr4X*(c=G(2w5a5cML|5#XD*$9z~j@Z##}Xorcnb(Uy^! zsGoM7F-B}FME>3)WxQB8jtiE==5^onw>9K?VMFKV(`KZLWcPi65lYCm;X745g)Vqw zB-UkgVuPWoW*1P01Od+rr)&}dARW|zdGBU@CqxzDSyb?ss9enbM_b4e8xKN>rm>m^ z7_I%*|Jh{57j`n%PYppAUWF#ut&AmQ`-;Vqyk->J)+uRgHL{^q@Mm34Yx@CLWZLjF zcBlH?b9+D+t%3wTfo~A{-syCK%?5HV%~^Cq(uBLz!k4{S(dVQrpr3e|(1_ZK9#Czs zteX{Pos{5>mb*iPun-Do$BXpow*-?qpn%UhNE{;q$j0I(GA(X1AyflszyP}qqZt(q z|7_Rjl$Y7zxnjFeZaen_UuQr3C#KUz@384qti>5|jx?~0_0yJfYbXFUz}Rix86~@9 zp^n7^@aCRz+8@Lnt=kG@@_V0ogvN)a^a6dCXEfuI+4a2KV|Sx5&L_b?yQr2W^q0HT z(YCG|W+BI_72fo;Yod&+*@Z&u#KuNjMFM;}!2BYJ^A-Gt1&1k1gZflU5AvV@?5sN; zqq>AUC)k5uD#TgnTcs!|O0TQtRH#CM8V%Qa#m;gjYd8n#M=|8y%_Rfs!b6(A)gh5z z`ZSk8r<~iIFxhdZ#QO|H3Ff)e?}hK;13g)cvbkz5VKDG@2_2U)F^jX148E1_Dr;O2 z20%cO8oolI>)_o0S)McB&a%^m8ZwyE?jjzmkv@M(C@w-8Vy!fl6?nisNHbHSgGQaM zT-AU(d<>ZA`oD2&`#~1+8_Ll{o~seLIOxbZ&!Uu|8LVy^n_fPYO;416a9baDy-HJs z-&s=mOL8d`?t{oL&!d&lI%ZRP`6`rP^+u4?G_EwV$U7se`FKAYKAqxrgvbFm#@%io zZ%J1LTb+IFQMwb|43Qhf#gDoEzE zPL*+#E{ERZY|piY&pyK6WW{M`O%+IBhSK~{Y3CQP4OcH|GU$N%`2}Jf2M>l^dk^W5 z{YHWmfqMk>S!arj^oaByfGFVA$b~+U6CmPs{B-xA^1%=g`xr#8>y&mxtWnrtdsUC+ zZRo3^g8nD`J(*F?DJ`n?Kh{h4VM${`1=~fVx>+b1DrN6`aeA|7)F3C3W&hwW`P>QzPn3r*TSxwziRp*?OcHI-VyQfxIK7L zE-w9es5CA!GsCFp{?JnTOn)^tCsevn1C7~}<4L|FO*cfrA`_D#=f1&|yNX0NQ!z*j zLK&fHyTMkatqepRH%^6i{A`Q`5ucsAxGJln3t<1FR_wM;~*2;jh?lN1QuXhX=O6QEq>6Q;2RA4QS9 zT*Q-^Y6(G6e3aLdz+7KG$br}q3Y{X|92mKQJiDK*BDrW2a(^F(y$khYYQlijrygN~i?hnjOy8-My+-S?IUOO8 ze-cafJ*eGU`b7r+Xd;@M?W@z^x_qpw1pQ*jP-j@yg~b|Xn@MJ?UmOab{U~XGKuWoj zJy2!TgODR~vtiA#_7JHLwV48lUS zs+0gW=fmL1c>$dMDo{VO>qjL7ynX3}DAw%D5h+%aBs-yfr$uPQi{%-qDlG>KPYHbC z@fT2g{V>ulvuf^Ah1&QKTwQmFzaq4P3N7Uy*FHNni#MfCw92mOYAMG=^#lwjTUV9Y z>YqHR2>?;uy;x*rW?z#+84`VTb(HD8I=gYZgP38M4C#URiGOFHbfM^Hs8CLe zDU9@1{nAzmGHAuZ%!MHeejL(0xmyc@cR26@?}id|V1eZH(sF$^Om7t7 zi=f!`q6i6O8C;F**2%f4BHdxL@`>^wK}QOm2%5s)#mrG6zJGLhqwub9&4chRajp$W zCmjRIqJ9=oFEw2giAl6%=`X9?pM~BY*}=|B$zi#Kpx-H@;o{@ai*L8!7p;9iISJ&GL>^H;V@)&}g&hLej{HH@jG`YgX<%;0<2yE1pO0wA%P=?4&5ef$PnHfg zewu61-*2X-4#Tu#ohspKEBAOwYxI^n-}X8yD#5&czUlZ1cs4>0MGqDCxwUtdvw{}E zUI~F6*y4PONA^>k_=f`*8dZGflgGK(1f12-%g>Zu-6E9PZtH!|`%y&Mbtli*I?7P0 z%6Lkf`NwTSBz(%!9Jup#^Rc}b@XQdDFcT2>1YbC$D;JS?5070!1A$$MNw>GaXykUE zB>ol@9mo5sWeh>%;MEwSQh5hM$X*6Q63tZAPjk=0E1dL{o75-dtA9V$>Iw4nHL+PW z7DRr`9fUjhmDCc>=Go=}1BToM!lT|O5#9OD#7)2bP@9(+71@l=3WzS&B5^y*jsr#f z9}(|^wZ~L+D)^sFl8Tc4zBY=p$~qG050YYCjgWpWe=T&bQh0Xkbm8I5%GQC5Nz5(a z)4A`AFq+ejWnUI!#m?lC;%&s}2H6lDXY>p9=*jl982Sb$(cKHDdChZZeJ9WkwmedU z=pZjtY*0=MIcfp$bI4`%o%gmc+SWe_YTA~G80uM9=|ahchgPe|(C!Zq;Q?ctp^Dqr z0vWZRoNaf`fo=g7{eREiwUD$O`46p=v#i-_K_-PTJDbn8V|QZCYv&EijK0D6U$w+t zi#wz(A16&5bc~I}e!tr&<`sLg4b3N1E5FD1r870=a3%HEGijS~O8LJR{fkfX$P?#= zJWC$N-u7%z)!X5t0CP;8-)VgG#blZ%%Ek_|+1XW-^j()H?Z_Cz+SMQk`6=MU6!PzW zy1tN23vaeiCif|xxQ7&Wuh0F+L9L8!6Evhl_$Y-=l40M1O6dB$Q=dY-=oX-B}gJ@Zkv62HFyhc(a*Fd!LK!i<%24r?EenX1sL=B3%>1y%uV~h9avL&UPk?(tQ zTO7uDEv>Ri@?N}0b=dHeNHZCSK{4m_0Rcx4Zt5~$#a+(7CBv?(2iGZ{mZi#t47i8RyB@t^{f4WrjB)-?ai`AZAI>T&4=c=%F>q`x(nHhykaL zW}#$O>eBIMwQAnhbtE58k+kA=c!PNbbfArD35!Q~7!nIA>+q&-iS2f`)X{cSI-1uM z+|QSDl!~5$&1^{oOQ999bPJ>;z%gU;zYc(*NkQjw@o!N+dT&ICLiT0?CmY}3@>|uViecJ3p<>Zljn`2fOh(&J6Ya=Ag9}|$+F}x)YQ-<+A3H46g${>F3;ZMRO z0RKM#z;7Sl**6c5`-LXu7A`Eu(xAvp*Kz-6J6B5k{9FTNZH^`WvI>NUV2-K-dSx~my09JDgcpS6PE;+j^WreH%QBzygaux*^37Jonx9k`kku9QW>4^` zfz=)vi1?)yu6q&v2K}moWw)-|&jrK8!59A4wJJ?c-Q9n-S*y|q8|JEmcu(wJD)Wb^ zUP=`+;4rA>nj}-9WEp%?C1aI7Vkenl+5rP#+hRb3m_bgs?<*YuVuRowTIzepA5EwO z=n^QT=&h()Y|>}3Cx+BLw=Je-lUbFL8@#hj)uy*vFsNfY8M;9;9!K`ud|v4pi76Vj zkB)`bN32dPt;K}SDn$GhN?j=dU;s9zIM6>e6K$;8X+uni66LhrJ|Esb?TN$V2pTnQeHDaI+a}*qgA}hEJx>8h3k^x- z@`8{%D{R7jQ}F`m%v7uKY8_X{)BwD-J~+6hixGATdvxvOZWIq!lr=LoC5N=5P~;8I z%?&J{=CrOfw0)kL^$tg$^a@M5%)Mxmz?CiAdyJOrT06csQ-JYU9>Yqw9ZJ`AUWfnQbcL95~)*-#Ts$mL1!)fAJPV((TxI}7K0FXhWqdl_4wm#S)8RZ zO?r(jF}XSQ(oCTmedFwMn{0ubEm#>EdCn+~6$zZz9VwDtnu07UK|3HO+dI%>mw1ta z0yh`s)tEb_nUA^SEpc3&3zrS7#BpyZC^(7;neZ}?zCvsSB+HkI+p0u2eaUt=BdOT_ zVOoeIuwGa~qEQ4j;^I-;x=YO3`!ba8=1Jm6lBhd3IHxydWZbM^7BSH#(H(W$E2(Gd z{Hbaj4;yCPU)%cZ_P$8Dxq?!@duFi_PqzY&k}X34Zq(&$X9LNafD~eF0GiP*%A0Tx*EvEhom|)ZvS-y zo2YuxMZ(BC@`DK?C*n%RBQ-#h2-z7(O22q8^;zRsBMo4)kr=p-?d|3x{V zVz^xvTMxtbR}c=pUm>O=Jaa^G5v`4+8PbAs&ubf-0U>GDZ%Qj9)7jC#HXQ%R zSaTNf@8*Us8zvcps#?EzkJs7j@mc~rcVNv-8ck&9D#cGdU8P=xCwCd#tpJw=<-hw} zHE^LnV?W=Di{;$Um&bc|Wf6^> z{XAR3DlcXu&`cnQhXkVNmdN5Yb~q@~J88zKfOQ2Ze;kSrHk$8-EEa(jqHA;wfkqK!p0$5>N?K|8jzhD8HPK9UMhEgLw&Z+jR?r7w%Gle+0lkbq06* z^mFY2+Ba3IVhCtyh6-jhYG&fVbsT$XE#x^u%d-^{Uc5kes~w(J#W6OOnGqO|9}iv< z?=YV{=`EcgH#*oU&d8zguD>#SLHqn=qJp&`}Veg6N*!T9d1F3=4~;SGJk=<*ZPEq97;yi25^*969Rp%n|K}0v1*8#EaMGf(mI}We?NabAEj18V(YTYrk+ABrT&i1c%uB%XT+U0RSiy0b8Hui`APkyTQfIEFN*x3bDo73d z?Gkw#ztL|N|1S<{)rFw6%8H1YmT=9&Yhqi!z`)GnSDa+n$`ecaI@kVz{HGJ3A=Lx> zXCiTWOAbH!&&`cdb1(%*CqMudd^Dj$A;etbyw}l>B*>=2^Bm$qXCN61YuYnXDv4kdHzl$Rn$G zU{wXwwzVT_Le;FIZH86r&orjRyLqf94i`u;K=fmu<$BLW(=NQl6&U_K44q5$nOGtU z8kmHaAS;SIi0wi}%}}N!8jJ~5GvZ?&p4~!S$WM6q1q&?9vO!`)r0pLJ4b4hR0JkRw z)+_~w`bbWf1v|4k$MU6!p*vl~44s*0@&$h3Fy>5J%N$<2MJn7-LH9w@_*{{qTlh11 zsh-G>prl!2ak4m85vm$G^32RgI7~W4C1-57(RdiP1cwJHMEaD#x#M)L*n>s75nd(G z4TUB8VRl_&Y@)MMK(e%@Hh)V|7YCyPwP72Rgy&mwK2z~wdwsu~SH_AvH>}X~$EP+{hVVyYG{HC~?YNs~OZQddXTAx){ej9< zN@Y^I5iphpa#-wyH5)zpN!ak+kL@5yQ4guvljWj^mlK@@Q4%;@U8L=L4WoMB8fF?j zb4#Aq_4)ZfExYa|V{U6|h)SyU$m}pg5p~%fMT#wzEfwsK-!>xdSx3~Sg0z>*-HiCW zGV&-G@QXDT$M;`$EKc5XrpghWdxlkGi=v zEcW{tac?jRka)0iV*)`!(v+xMg3&Q*oySt|dE`;y7qg;==ZuFxA$nFJyxwiE#uJa>CoxU(Q;ELDvx>@s< zp$$}4ChP-e!q1AjXF&@;@K%x+gzfJH7&jApXi5cuVFF6yn^dFrIW`aVI#O4{)b*og zZ2H-qLJQv2z1g^%Nz}~B!lDFQH~dgZVJ>b7d8HNfeonq6Pj(P>Xec~t(g5R!)lGI z3!mfK88Z~jzMHultC{&-7C6_>Z6BSEnDc{vtyC`+OLIq5K-t2`jFJaGIyZxPzP%H> zgJ9EpLIcu8Zly|hxb}iV{lkQTxv~9s5H0I{n5iJY=NcqBh?uB*tlrAN%O!&Ig%GOUQ6ic|Hh$)J7lRX0AEfH zm@NI9Q`KP1-1Q@`0DDn!LD}sbO*Uu&%)_>88MNw^O1vXYV-jic<9POu?PnF$%GtWl ze9Ju9x-O2OMpjNzQ`i!^L$xpT|L{9ij^r_y;e$L)=}k~D^Kx}aXp2ew#nqgM#Fd&k!7SxTnuGVY~2Hy<0mTQY<(t z|BeMDt{;P<;3w76n=p>Ch1LizcE~NXh-2}2DG{@c8Jp&o50mqS#+EEIK$lpcH-?%m z>HH{U{eOEaaO`Q(5fkulG7m;~;B^fMH%n!`^_MN|_hiOpyW4}M96e(+bky$^0GwJ< zEX$6&5H~X>k^fUU$J0lIlpBk7UIs`B{$xp75#KfpQT>2C6t> z!a*DFL10bKU@$n5)JSkoH0&pxfPnv%zNQ7rc?OW^-scM^=NuznZT=sKh4EK!EP?qQ z6V}!CSfg|6Gk{XVmva)^^aLlQ7?WpX)#igGq-)ppiy#joKrhC@TQz z64$oZ+{u;|3&fGui2^#8vwm4;0quf23{wQ+J!KO7%8=Q|>kMiKbTxTv)D9*uZ`Lq8 z!*Ra@vCB&7r+f!H+c^n3i+)i$GAfNQxdM6*tNkLO7sy7T6-BAw3saYzhDCFyQokzH z&KvF0_qHRon*>Ch05R4xm!KyEA5|S_t*0h4p5wEgLv}a%V{OWx;*Oy~-uUj&caH{g zQMr{?^UX}J?D6Ok>hmJ2?mPdN?&P3%D#5#M^`D2o3PN8FIbYj1Mv09F&;v^Nkw89& z40Nc{oKU^j7-j*w$7{xGvIPLttjJZcy#X`IV=BJuIT_k-<2&B@(jSft6yozFJFjU$ zZE)Fxg@0I45TOSRir+@d&-F}PL&+~D)n=wWDs!X0$m*t+Qy97rEkzTqQ-5y;qfzYjsF<$>cmg ztYCezdhap{!KO2lkh(cqzjt2eeK)z&MHe_I`si|rrk|kL45-qIemH*vuvkO!nK?U8 zaFex@>9XO}MoJ!e=PT$-p+`3(QogXoW z{+6;2bLYw54H5~kAC0JaX(F2w7^UHC7t6*B%3HJj2Kvgw>b%e5P?L>lLUWIRPgjDl z{_Wpc2P)3*C?~4L-EM#g$;0{G`rAv74hbRR4%@#S_dYjL%;8|E0iTwBd4%?I)swqp zJCcaQ6#)GaVJO|1qAwAg`9n@98Bui^HIx7Ta^?$?tNxqu?wP?3`2XrM3KPECiX>=w zNLic*#rA3W8A$8{RUqd}c7JsNdk(up6EIc%lUhM8!1IfUO_AlD2m|t}2yj@l3OMIeUqqbdH2)a-079uQ@wC6iG?R!h#NN`vNc7Ef~b7vK#9p5I3=CQxOw+E z=(tAdU@-%*s^$KfNC(2L4wb%{Krbx5GM|J`Rl7raqYkAlYGtN#j!}o%j#`gl)k!m0 zar{SJfPmQtS19JN6qi{zRawIl6Io0!=^h7pzF`Bf?hu;>R!qm+!a%vn2C?I*PE_tl z1|6RYe2X*a#3Xn0xZKlHXpu#(eUD;anSjXSTav&Xm&%WVzPW92W4ceK4*IdE%IBh*?%*h?>CGb@0p#cCd+3L z#-Ir<&1R^~WI)1dSIA_FeFJ&D+MuVNWwNB_h%gJNNyKM_U{3lv%*fLe+rA?M1OEBR3E@G`Q>_9@FMmRSjg15xCtw zZUb4giBSkI93Cr6#rv%;CUp3Tdp-|L!h1Z4^*D4Y*=7o@WV5uXViSqZ#&-YI1Vp@< zrBL2?RBlf}PQ*^%OQfVeQ&ar+mRjYPlII;HW3Az|;lN6wKWG8F544ATqXlStCaYCiKv}go# zRmTZiLOU`cg|k+)fMY0uj=^H5-Of@ECNSCaI{P)F1b4AEi9Mj3yB5^um4VtX*mk;9 z3`?YXcTd;_^lpQzuSsZ8!x`2Bs+-^j$(>9CPvjal*^ka9Xsh$a|2cXuo(7!W1|_|2 z)V1GyGfA!To~kP9s|;@WYZ0I{%bSxQKe2glg|=oDOD)2)9roBWvj2EODvYXaI8aXQ zD!N9^WR{*;mM6T%zK_`Vp4f%AcyH^lPwjVCY_~!^KrLXDGs}`t4)``;h%!EH6Ehi5 z*8JSH1yyAS43*qG>+Yk8zU$v&(rg^DJNaW)$h*I86pk+5hQ*8}wK@3;;V0t{W(D&W z34@{-1wD-?=Cm-V?0$SGTyJQvv~9A*O<~t#z9C0A>Y3tePg4m1h;$$(fQ)Q3%ZfO< zVr=y~^vF1P18s)AchdlfPdzw3QT7t{8uX@IuEgOi)>%eHjfs#u;BQX+x_rJhhE!-{ zyFgf&KG&lui|~7G{R#;EbXUY&@zo9AzdIE;O+Hvtx4<|x>zEHW2|*?JntF$kgrwv z*i=q6GCR@e-C;N_+$_&SSP0B<^VI(2!RFst<{BjK6OV)@2&3t7UdepbEvGgKl^L-B z={~FFrHY1Z#Q{M>2T{Stl`hdnBr1{OP=HQ@{)kQ9$-u;dmda<4(Y_MD(;$gN1+faO zn#yfGWe>?}$bWmcT`tYa;Iz;#OWmOs8!G#-u5>*!yLj&Ojt*iT=RbvY>Zn8{Zp;XB zOkXX8)a+oQ=l(U`*8;?Kh*E|Sot9jYzhwoUxNM53TLTUdMQ9hVFDEXbFw5O|c4Gk& zfuSZ^<7o{E(084w7tK_bLmodBP*aM|h1jHbf5D@mFdHn|*3_m)s|(43OmOJ?pmDJ#qe4uqbJ5#bEb`=eEyQnA$l&@##abN>+>zQ7AFqP7bj@Dg@Ym73`O zi79Hd7KBx#rT+I5;r+ajCCT@L>2M&u_dspa&pxGZpd|F!uP*7j#zcZqp%T2)U@T0i z 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 T?$PsVLQ{FJs|=_qBV(kIJ4b@(?Y100 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\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n#\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.10.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.10.pub\";\ + \n#\ + \n#root.mnuc.backuper\ + \n\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\ + \n#:local Script AM-GlobalConfig;\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n:global MkDir;\ + \n\ + \n:local FetchFile Binary.backup\ + \n:local localDir \"\";\ + \n\ + \n#\$MkDir \$localDir;\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);" +add comment="Example add WU servers to AddrList" dont-require-permissions=no \ + name=WU-add-to-list owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# Syed Jahanzaib / aacable@hotmail.com\r\ + \n# List name\r\ + \n:local LISTNAME \"windowsupdateslist\"\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"update.microsoft.com\"\r\ + \n:local TARGET2 \"download.windowsupdate.com\"\r\ + \n:local TARGET3 \"download.microsoft.com\"\r\ + \n:local TARGET4 \"windowsupdate.com\"\r\ + \n:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n:local TARGET6 \"wustat.windows.com\"\r\ + \n:local TARGET7 \"stats.microsoft.com\"\r\ + \n:local TARGET8 \"mp.microsoft.com\"\r\ + \n:local TARGET9 \"ws.microsoft.com\"\r\ + \n:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n \r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n \r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4|\$TARGET5|\$TARGET6|\$TARGET7|\$TARGET8|\$TARGET9|\$TARGET10|\$T\ + ARGET11|\$TARGET12|\$TARGET13|\$TARGET14)\" && \$type ~ \"^(A|CNAME)\\\$\"\ + \_] do={\r\ + \n \r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n \r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Add Hosts DNS names to NoWG addres list" \ + dont-require-permissions=no name=Add2vdsina owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# \r\ + \n# List name\r\ + \n:local LISTNAME \"NoWG\"\r\ + \n#\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"comp-lenta.ru\"\r\ + \n:local TARGET2 \"ok.ru\"\r\ + \n:local TARGET3 \"vk.com\"\r\ + \n#:local TARGET4 \"smtp.mail.me.com\"\r\ + \n#:local TARGET4 \"windowsupdate.com\"\r\ + \n#:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n#:local TARGET6 \"wustat.windows.com\"\r\ + \n#:local TARGET7 \"stats.microsoft.com\"\r\ + \n#:local TARGET8 \"mp.microsoft.com\"\r\ + \n#:local TARGET9 \"ws.microsoft.com\"\r\ + \n#:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n#:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n#:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n\r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n\r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4)\" && \$type ~ \"^(A|CNAME)\\\$\" ] do={\r\ + \n\r\ + \n:log info (\"start entry: \$c \$sitednsname \$Buffer\");\r\ + \n\r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n:log info (\"1: \$Buffer\"); \r\ + \n\r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n\r\ + \n:log info (\"2: \$Buffer\"); \r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$i \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Flush DNS Cache" dont-require-permissions=no name=\ + DNS_Flush_Cache owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\ + "/ip dns cache flush" +add comment="Certificates CloudFlare, Quad9 " dont-require-permissions=no \ + name=Update-Certificates owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_CloudFlare\r\ + \n#/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalR\ + ootCA.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\ + \"\";\r\ + \n#/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobal\ + G2TLSRSASHA2562020CA1-1.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalG2TLSRSASHA2562020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n# Quad9\r\ + \n#/tool/fetch mode=https url=\"https://cacerts.digicert.com/DigiCertGloba\ + lG3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n#/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n\r\ + \n:global GlobalScriptsUrl;\r\ + \n#google\r\ + \n:local CertName \"DigiCert-Global-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-CA\" [ find where common-na\ + me=\"DigiCert Global Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-CA\" [ find where commo\ + n-name=\"DigiCert Assured ID Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G2\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G3\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G2 TLS RSA SHA256 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G3 TLS ECC SHA384 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G2\" [ find where common-na\ + me=\"DigiCert Global Root G2\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G3\" [ find where common-na\ + me=\"DigiCert Global Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-ECC-P384-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-ECC-P384-Root-G5\" [ find where com\ + mon-name=\"DigiCert TLS ECC P384 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-RSA4096-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-RSA4096-Root-G5\" [ find where comm\ + on-name=\"DigiCert TLS RSA4096 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Trusted-Root-G4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Trusted-Root-G4\" [ find where common-n\ + ame=\"DigiCert Trusted Root G4\" ];\r\ + \n\r\ + \n:set CertName \"GTS-Root-R4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"GTS-Root-R4\" [ find where common-name=\"GTS Roo\ + t R4\" ];\r\ + \n\r\ + \n:set CertName \"Go-Daddy-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Go-Daddy-Root-Certificate-Authority-G2\" [ find \ + where common-name=\"Go Daddy Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"ISRG-Root-X1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"ISRG-Root-X1\" [ find where common-name=\"ISRG R\ + oot X1\" ];\r\ + \n\r\ + \n:set CertName \"Root-YE.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Root-YE\" [ find where common-name=\"Root YE\" ]\ + ;\r\ + \n\r\ + \n:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Starfield-Root-Certificate-Authority-G2\" [ find\ + \_where common-name=\"Starfield Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"USERTrust-RSA-Certification-Authority.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"USERTrust-RSA-Certification-Authority\" [ find w\ + here common-name=\"USERTrust RSA Certification Authority\" ];\r\ + \n\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-RX.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#internet\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"ISRG-Root-X2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n\r\ + \n\r\ + \n#/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 do\ + h-max-server-connections=20 use-doh-server=https://security.cloudflare-dns\ + .com/dns-query verify-doh-cert=yes;\r\ + \n#/ip/dns/static remove [find where address=1.1.1.1];\r\ + \n#/ip/dns/static add address=1.1.1.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 1\";\r\ + \n#/ip/dns/ static remove [find where address=1.0.0.1];\r\ + \n#/ip/dns/static add address=1.0.0.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 2\"\r\ + \n#/ip dns static add address=2606:4700:4700::1111 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip dns static add address=2606:4700:4700::1001 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip/dns set servers=\"1.0.0.1, 8.8.4.4\";\r\ + \n#/ip/dns set servers=\"\";" +add dont-require-permissions=no name=script1 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="/\ + tool/netwatch/add comment=\"doh-fallback, doh-url=https://security.cloudfl\ + are-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Clou\ + dFlare-doh IPv4 1\" host=1.1.1.1;\r\ + \n/tool/netwatch/add comment=\"doh, doh-url=https://security.cloudflare-dn\ + s.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=CloudFlare\ + -doh IPv4 2\" host=1.0.0.1;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 1\" host=8.8.8.8;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 2\" host=8.8.4.4;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 1\" host=9.9.9.9;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 2\" host=149.112.112.112;\r\ + \n\r\ + \n/tool/netwatch/add comment=\"dns, notify, name=ns1.unet.ws\" host=91.192\ + .189.2;" +add dont-require-permissions=no name=script2 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \r\ + \n\r\ + \n:global InspectVar;\r\ + \n#:global RouterBoard;\r\ + \n#:do {:set RouterBoard [[ :parse \"/system/routerboard/get\" ]]} on-erro\ + r={}\r\ + \n#:global Resources;\r\ + \n#:do {:set Resources [[ :parse \"/system/resource/get\" ]]} on-error={}\ + \r\ + \n\r\ + \n#:global Updates;\r\ + \n#:do {:set Updates [[ :parse \"/system/package/update/get\" ]]} on-error\ + ={}\r\ + \n\r\ + \n#:global PkgUpdStatus \"undefined\";\r\ + \n#:local Update [/system/package/update/get];\r\ + \n#:retry command={:set PkgUpdStatus (\$Update->\"status\")} delay=200ms m\ + ax=5 on-error={};\r\ + \n\r\ + \n#:log warning [\$InspectVar \$RouterBoard];\r\ + \n#:put [\$InspectVar \$RouterBoard];\r\ + \n\r\ + \n#:retry command={/system/package/update check-for-updates without-paging\ + \_as-value} delay=300ms max=5 on-error={};\r\ + \n\r\ + \n#:global arrDeviceInfo ({});\r\ + \n#:local arrDeviceInfo ({\"section\":{\"key\":\"\"; \"value\":\"\";};});\ + \r\ + \n#:set (\$arrDeviceInfo->\"RouterBoard\") [[ :parse \"/system/routerboard\ + /get\" ]];\r\ + \n#:retry command={:set (\$arrDeviceInfo->\"Updates\") [[ :parse \"/system\ + /package/update/get\" ]]} delay=500ms max=5 on-error={:log error (\"Error\ + \")};\r\ + \n# [:toarray {\"section\"={\"key\"=\"\"; \"value\"=\"\";} }];\r\ + \n# [:toarray \"\"];\r\ + \n:local arrDeviceInfo ({});\r\ + \n\r\ + \n:set (\$arrDeviceInfo->\"devUpdates\") {\"channel\"; \"stable\";};\r\ + \n#:do {:set (arrDeviceInfo->\"Updates\") [[ :parse \"/system/package/upda\ + te/get\" ]]} on-error={:log error (\$error)}\r\ + \n\$InspectVar \$arrDeviceInfo;\r\ + \n" +add comment="Script for setup routeros script system" \ + dont-require-permissions=no name=AM-setup owner=AM-setup policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-setup\r\ + \n# Script comment: Script for setup routeros script system\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# :local ScriptName [ :jobname ];\r\ + \n# Additional commands:\r\ + \n#\r\ + \n# For scripts:\r\ + \n#:global NewScript \"script_name\"; \r\ + \n#:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n#/system/script/add name=\$NewScript owner=\$NewScript source=([/tool/fe\ + tch check-certificate=yes-without-crl (\$GlobalScriptsUrl . \$ScriptAdd . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n#:global NewScript (a);\r\ + \n#:global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n#\r\ + \n# For run from terminal:\r\ + \n#/system/script/add name=AM-setup owner=AM-Setup source=([/tool/fetch ch\ + eck-certificate=yes-without-crl \"https://ros.vados.ru/AM-setup.rsc\" outp\ + ut=user as-value ]->\"data\");\r\ + \n#\r\ + \n\r\ + \n:global ScriptUpdatesCRLF \"LF\";\r\ + \n#:if (\$ScriptUpdatesCRLF != false) do={\r\ + \n# :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vad\ + os\" ] do={\r\ + \n# if (\$ScriptUpdatesCRLF = true) do={\r\ + \n# /system/script/set source=[ :tocrlf [ get \$Script source ] ] \$S\ + cript;\r\ + \n# } else={\r\ + \n# /system/script/set source=[ :tolf [ get \$Script source ] ] \$Scr\ + ipt;\r\ + \n# }\r\ + \n# }\r\ + \n#}\r\ + \n\r\ + \n# /import verbose=no \$ScriptName\r\ + \n:global SetupScript [ :jobname ];\r\ + \n:global RemoveMe;\r\ + \n:global RunOnce;\r\ + \n:global InitSetup true;\r\ + \n:global tmpfs false;\r\ + \n\r\ + \n{\r\ + \n :local RmMe [:tobool \$1];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SetupScript;\r\ + \n :global RemoveMe;\r\ + \n :global InitSetup;\r\ + \n :global tmpfs;\r\ + \n \r\ + \n :local CertCommonName \"Root YE\";\r\ + \n :local CertFileName \"Root-YE.pem\";\r\ + \n :local CertFingerprint \"e14ffcad5b0025731006caa43a121a22d8e9700f4fb9c\ + f852f02a708aa5d5666\";\r\ + \n\r\ + \n :if (\$SetupScript = false) do={\r\ + \n :global SetupScript \"AM-setup\";\r\ + \n }\r\ + \n :if (\$RemoveMe != false) do={\r\ + \n :set RemoveMe true;\r\ + \n }\r\ + \n\r\ + \n :log warning (\"\\n\\\$GlobalScriptsUrl = \" . \$GlobalScriptsUrl);\r\ + \n \r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] != 1) do={\r\ + \n :error \"Something is wrong with your certificates!\";\r\ + \n } else={\r\ + \n :if (!(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" ||\ + \_\\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CertComm\ + onName ] ] > 0)) do={\r\ + \n :put \"Importing certificate...\";\r\ + \n /tool/fetch (\$GlobalScriptsUrl . \"certs/ipall/\" . \$CertFileN\ + ame) dst-path=\$CertFileName as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n :delay 1s;\r\ + \n };\r\ + \n };\r\ + \n\r\ + \n:local MkTmpfs do={\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\"Try to removing directory 'tmpfs'.\");\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/remove tmpfs;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n# \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource/g\ + et total-memory ] / 3);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get tmpfs;\r\ + \n :return true;\r\ + \n } delay=222ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\"Creating disk of type tmpfs failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n}\r\ + \n:if (\$tmpfs = true) do={\r\ + \n :put \"Tmpfs variable is true. Checking for tmpfs/scripts directory...\ + \";\r\ + \n :if ([/file find name=\"tmpfs/scripts\"] != \"\") do={\r\ + \n :log info (\$0 . \"Directory tmpfs/scripts exsist.\");\r\ + \n :return \$true;\r\ + \n } else={\r\ + \n :log warning (\$0 . \"Directory tmpfs/scripts does't exsist.\");\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :log error (\$0 . \"Directory tmpfs is not created!\");\r\ + \n :return false;\r\ + \n } else={\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=/tmpfs/scripts;\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get /tmpfs/scripts;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\$0 . \"Making directory 'scripts' failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n# [ /file/get \$FileName ]\r\ + \n }\r\ + \n# :log error (\$0 . \"Directory tmpfs/scripts does not exsist. Remove\ + \_global variable tmpfs!\");\r\ + \n# :global tmpfs (a);\r\ + \n# return false;\r\ + \n }\r\ + \n}\r\ + \n :put \"Renaming AM-GlobalConfig, if exists...\";\r\ + \n :local ConfOldName (\"AM-GlobalConfig-\" . [ /system/clock/get date ] \ + . [ /system/clock/get time ] . \".rsc\");\r\ + \n /system/script/set name=\$ConfOldName [ find where name=\"AM-GlobalCon\ + fig\" ];\r\ + \n :foreach Script in={ \"AM-GlobalConfig\"; \"AM-GlobalFunc\" } do={\r\ + \n :put \"Installing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\r\ + \n /system/script/add name=\$Script owner=\$Script source=([ /tool/fetc\ + h check-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n \r\ + \n /system/script run \$Script;\r\ + \n :delay 2s;\r\ + \n };\r\ + \n\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] > 0) do={\r\ + \n :put \"Renaming certificate by its common-name...\";\r\ + \n :global CertificateNameByCN;\r\ + \n \$CertificateNameByCN \$CertFingerprint;\r\ + \n };\r\ + \n\r\ + \n :if (\$RemoveMe = true) do={\r\ + \n :put \"Add Scheduler for remove this script...\";\r\ + \n :local OnEvent (\":delay 30s;\\n\" . \"/system/script/remove [ find \ + where name=\\\"\$SetupScript\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \"/system/scheduler/remove [ find where name=\\\ + \"_RemoveSetup\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \":global RemoveMe (a);\\n\");\r\ + \n :local Comment \"_RemoveSetup tmp scheduler for remove setup script.\ + \";\r\ + \n /system/scheduler/add name=\"_RemoveSetup\" comment=\$Comment start-\ + time=startup interval=30s on-event=\$OnEvent;\r\ + \n :log warning (\$0 . \"\\nI've done everything, and now I'm tired..\ + . I'm leaving.\\nThere will be an error below, this is normal.\");\r\ + \n }\r\ + \n :delay 1;\r\ + \n :put \"Loading configuration and functions...\";\r\ + \n :do { \r\ + \n :global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n :put \"Normal removing temporary global environment variables.\";\ + \r\ + \n :global SetupScript (a);\r\ + \n :global InitSetup (a);\r\ + \n :global RemoveMe (a);\r\ + \n } on-error={\r\ + \n :local ErrorMsg \"Loading configuration and functions error!\";\r\ + \n :log error (\$0 . \$ErrorMsg . :error);\r\ + \n :error \$ErrorMsg;\r\ + \n }\r\ + \n}\r\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=AM-GlobalConfig policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GlobalConfig\r\ + \n# Script comment: Global Config Script\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# Warning: Dont touch this line!\r\ + \n:global Identity [ /system identity get name ];\r\ + \n:global GlobalConfReady false;\r\ + \n#\r\ + \n#\r\ + \n# Global Url For Amster scripts to fetch\r\ + \n# most be defined in AM-Init-Script or AM-setup scripts\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global ScriptsUrlSuffix \"\";\r\ + \n:global CheckSumsVerify true;\r\ + \n\r\ + \n:global ScriptUpdatesCRLF true;\r\ + \n:global CommentsInScripts true;\r\ + \n\r\ + \n# Debug output:\r\ + \n:global PrintDebug true; #false;\r\ + \n\r\ + \n# Debug output for specific script:\r\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\r\ + \n\r\ + \n# Debug logs\r\ + \n# Other actions (disk, email, remote or support) can be used as well.\r\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\r\ + \n#/system/logging/add topics=script,debug action=memory;\r\ + \n\r\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\r\ + \n:global Domain \"WORKGROUP\";\r\ + \n\r\ + \n:global EmailGeneralTo \"vados@vados.ru\";\r\ + \n#:global EmailGeneralCc \"\";\r\ + \n\r\ + \n# \$ScriptInstallUpdate mod/notification-telegram\r\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\r\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\r\ + \n# Use this to send notifications to a specific topic in group.\r\ + \n#:global TelegramThreadId \"30\";\r\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\r\ + \n# or user names. Groups allow to chat with devices simultaneously.\r\ + \n:global TelegramChatIdsTrusted {\r\ + \n \"454403445\"\r\ + \n \"-1003631309063\"\r\ + \n \"-5124482807\"\r\ + \n \"1087968824\";\r\ + \n};\r\ + \n# \"-5294757340\";\r\ + \n\r\ + \n:global TelegramChatGroups \"(all)\";\r\ + \n#:global TelegramChatGroups \"(all|home|office)\";\r\ + \n\r\ + \n:global NotificationFunctions {\r\ + \n \"email\"\r\ + \n \"telegram\";\r\ + \n};\r\ + \n# Toggle this to disable symbols in notifications.\r\ + \n:global NotificationsWithSymbols true;\r\ + \n:global TerminalColorOutput true;\r\ + \n\r\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\r\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\r\ + \n\r\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\r\ + \n:global updateChannel \"stable\";\r\ + \n\r\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\" . \$Identity . \"/\ + \");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass {\r\ + \n \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass {\r\ + \n \"\";\r\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\r\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n\r\ + \n# Script BackupAndUpdate mode, possible values: backup,\r\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \r\ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\r\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\r\ + \n# osnotify - Set `forceBackup` to always create backups on every run\r\ + \n:global DevInfoIncludeIP true;\r\ + \n:global BackupAndUpdateMode \"osnotify\"\r\ + \n\r\ + \n:global forceBackup true;\r\ + \n:global BackupPassword \"Peskar55\";\r\ + \n\r\ + \n# SFTP Backup Variables\r\ + \n:global BackupRandomDelay 0;\r\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\r\ + \n:global BackupUploadUser \$Identity;\r\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\r\ + \n\r\ + \n:global BackupSendBinary true;\r\ + \n:global BackupSendExport true;\r\ + \n:global BackupSendGlobalConfig true;\r\ + \n:global BackupSendScripts true;\r\ + \n\r\ + \n# Remove local file after uploading if no errors\r\ + \n:global BackupRmLocal true;\r\ + \n\r\ + \n# Local Backups Root Directory \r\ + \n:global BackupLocalRoot \"tmpfs\";\r\ + \n\r\ + \n# Encrypt Backup\r\ + \n:global BackupEncrypt true;\r\ + \n\r\ + \n# Sensitive information in Backups\r\ + \n:global BackupSens true;\r\ + \n\r\ + \n# User Export\r\ + \n:global BackupUser true;\r\ + \n\r\ + \n# License Export (not for CHR, will silently skip)\r\ + \n:global BackupLicense false;\r\ + \n\r\ + \n# SSH Keys\r\ + \n:global BackupSshKeys true;\r\ + \n\r\ + \n# Certificate Export\r\ + \n:global BackupCerts true;\r\ + \n\r\ + \n# Certificate Password\r\ + \n:global BackupCertsPasswd \"\";\r\ + \n\r\ + \n# User-Manager Export\r\ + \n:global BackupUserMan false;\r\ + \n\r\ + \n# The Dude Export\r\ + \n:global BackupDude false;\r\ + \n\r\ + \n# User Files to export, comma-separated string or array of strings\r\ + \n# User Files are not removed on backup\r\ + \n# Any directory paths will be removed (/ -> _) on remote file\r\ + \n# Nonpresent files are silently skipped\r\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\r\ + \n\r\ + \n# load functions and any custom scripts\r\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\r\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\r\ + \n#\r\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \r\ + \n# :onerror Err {\r\ + \n# /system/script/run \$Script;\r\ + \n# } do={\r\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\r\ + \n# }\r\ + \n#}\r\ + \n#:log info \"\\ndevMode = \$devMode\";\r\ + \n#:log info \"\\ndevRunning = \$devRunning\";\r\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalConfReady true;\r\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\r\ + \n" +add comment="Global functions" dont-require-permissions=no name=AM-GlobalFunc \ + owner=AM-GlobalFunc policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GglobalFunc\r\ + \n# Script comment: Global functions\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n:local ExitOK false;\r\ + \n:local ScriptName [ :jobname ];\r\ + \n#:global checkRunJob \$SriptName;\r\ + \n#:global fixCRLF;\r\ + \n#:if (\$fixCRLF != false) do={\r\ + \n#:foreach fixScript in=([ /system/script/find where name~\"*\" ]) do={/s\ + ystem/script/set source=[ :tocrlf [ get \$fixScript source ] ] \$fixScript\ + }\r\ + \n#:if (\$fixCRLF != \"LF\") do={ /system/script/set source=[ :tocrlf [ g\ + et \$fixScript source ] ] \$fixScript};};\r\ + \n#}\r\ + \n:global GlobalFuncReady false;\r\ + \n\r\ + \n# Git commit id & info, expected configuration version\r\ + \n:global CommitId \"main/614/a7992fc8\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 01:00:03 05.05.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 140;\r\ + \n\r\ + \n:global SumsDirAndFileName \"tmp/checksums.json\";\r\ + \n\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global IdentityShort [:pick \$Identity 0 18];\r\ + \n\r\ + \n:global devBoardName [/system/resource/get board-name];\r\ + \n:global devMode [/system/device-mode/get mode];\r\ + \n:global devCurArch [/system/resource/get architecture-name];\r\ + \n:global devCurVersion [/system/resource/get version];\r\ + \n\r\ + \n# Variables defined in AM-GlobalConfig.rsc\r\ + \n:global TerminalColorOutput;\r\ + \n:global CommentsInScripts;\r\ + \n:global DetectIpAddrDefault;\r\ + \n:global DetectIpAddrFallback;\r\ + \n:global updateChannel;\r\ + \n:global Domain;\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n\r\ + \n# Single functions, without nested functions.\r\ + \n:global MiniDateTimeStamp;\r\ + \n:global MicroDateTimeStamp;\r\ + \n\r\ + \n# Include globals \$PrintDebug and \$PrintDebugOverride\r\ + \n:global LogPrint;\r\ + \n\r\ + \n# DeviceInfo and Updates\r\ + \n:global IsCheckUpdates;\r\ + \n:global WaitCheckUpdates;\r\ + \n:global GetPubIp;\r\ + \n\r\ + \n:global GetArrDeviceInfo;\r\ + \n:global WaitArrDeviceInfo;\r\ + \n\r\ + \n:global devModel;\r\ + \n:global devRunningMode;\r\ + \n\r\ + \n:global devRbRevision;\r\ + \n:global devRbSerialNumber;\r\ + \n:global devRbVerAvail;\r\ + \n\r\ + \n:global runningChannelVersion;\r\ + \n:global runningChannel;\r\ + \n:global runningVersion;\r\ + \n\r\ + \n:global devBuildTime;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n:global currentUpdateChannel;\r\ + \n\r\ + \n:global ScriptInstallUpdate;\r\ + \n\r\ + \n:global DeviceInfo;\r\ + \n\r\ + \n:global OldMode;\r\ + \n\r\ + \n:global ParseKeyValueStore;\r\ + \n:global RandomDelay;\r\ + \n:global GetRandomNumber;\r\ + \n:global EscapeForRegEx;\r\ + \n:global CharacterMultiply;\r\ + \n:global CharacterReplace;\r\ + \n:global CleanFilePath;\r\ + \n:global CleanName;\r\ + \n\r\ + \n:global CommitBrief;\r\ + \n\r\ + \n:global EitherOr;\r\ + \n:global FormatLine;\r\ + \n:global GetRandom20CharAlNum;\r\ + \n:global GetRandom20CharHex;\r\ + \n:global GetRandomNumber;\r\ + \n:global Grep;\r\ + \n:global IfThenElse;\r\ + \n:global MAX;\r\ + \n:global MIN;\r\ + \n:global HumanReadableNum;\r\ + \n\r\ + \n:global IsFullyConnected;\r\ + \n:global IsDNSResolving;\r\ + \n:global IsTimeSync;\r\ + \n:global IsTimeSyncCached;\r\ + \n:global IsTimeSyncResetNtp;\r\ + \n\r\ + \n:global WaitDNSResolving;\r\ + \n:global WaitFullyConnected;\r\ + \n:global WaitTimeSync;\r\ + \n:global MkDir;\r\ + \n:global RmDir;\r\ + \n:global RmFile;\r\ + \n:global FileGet;\r\ + \n:global Unix2Dos;\r\ + \n:global UrlEncode;\r\ + \n:global WaitForFile;\r\ + \n:global ScriptLock;\r\ + \n:global SendTelegram;\r\ + \n:global NotificationFunctions;\r\ + \n:global SendNotification;\r\ + \n:global SendNotification2;\r\ + \n:global SymbolForNotification;\r\ + \n:global SymbolByUnicodeName;\r\ + \n:global ValidateSyntax;\r\ + \n:global CheckSumsVerify;\r\ + \n:global GlobalConfChanges;\r\ + \n:global GlobalConfMigration;\r\ + \n:global VersionToNum;\r\ + \n:global RequiredRouterOS;\r\ + \n:global ExitError;\r\ + \n:global ExitOnError;\r\ + \n\r\ + \n:global FetchHugeFiles;\r\ + \n:global FetchUserAgentStr;\r\ + \n:global FileExists;\r\ + \n:global CertificateAvailable;\r\ + \n:global CertificateDownload;\r\ + \n:global CertificateNameByCN;\r\ + \n:global CharacterMultiply;\r\ + \n\r\ + \n:global InspectVar;\r\ + \n:global InspectVarRet;\r\ + \n:global ParseCustom;\r\ + \n\r\ + \n:set IsCheckUpdates do={\r\ + \n :local isInfo [:tobool \$1];\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :log info (\$0 . \" \\\$isInfo = \" . \$isInfo); \r\ + \n :local CurrentChannel [ /system/package/update/get channel ];\r\ + \n :if ([ :len \$updateChannel ] > 0 && \$CurrentChannel != \$updateChann\ + el) do={\r\ + \n :retry command={/system/package/update set channel=\$updateChannel} \ + \_delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" Set updates channel to: \$updateChannel\");\r\ + \n }\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n :log info (\$0 . \" Update Channel: \" . \$Channel . \".\");\r\ + \n :local StatusPkg \"undefined\";\r\ + \n :log info (\$0 . \" Checking for updates...\");\r\ + \n :retry command={:set \$StatusPkg ([/system/package/update/check-for-up\ + dates without-paging as-value]->\"status\")} \\\r\ + \n delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" \\\$StatusPkg = \" . \$StatusPkg);\r\ + \n :if (\$StatusPkg = \"New version is available\") do={ :set PkgUpdStatu\ + s true; } else={ :set PkgUpdStatus false; }\r\ + \n :set ROsVerAvail [ :tostr [ /system/package/update/get latest-version \ + ] ];\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :retry command={:set (\$arrDeviceInfo->\"devUpdates\") [ /system/pac\ + kage/update/get ]} delay=500ms max=5 on-error={:log error (\"Error\")};\r\ + \n :return true;\r\ + \n } else={\r\ + \n :return \$PkgUpdStatus;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set WaitCheckUpdates do={\r\ + \n :global IsCheckUpdates;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n :while ((\$Status = \"\" || \$Status = \"finding out latest version...\ + \") && \$WaitCount < 60) do={\r\ + \n :delay 1s;\r\ + \n :set WaitCount (\$WaitCount + 1);\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n }\r\ + \n :set Update [ /system/package/update/get ];\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n :if ((\$Update->\"status\") = \"New version is available\") do={\r\ + \n :set PkgUpdStatus true;\r\ + \n } else={\r\ + \n :set PkgUpdStatus false;\r\ + \n }\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :set (\$arrDeviceInfo->\"devUpdates\") \$Update;\r\ + \n :if (\$Status = \"\" || \$Status = \"finding out latest version...\") \ + do={\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set WaitArrDeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :while ([ \$GetArrDeviceInfo ] = false) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetArrDeviceInfo do={\r\ + \n :global LogPrint;\r\ + \n :global arrDeviceInfo;\r\ + \n :global devBoardName;\r\ + \n :global devModel;\r\ + \n :global devRunning;\r\ + \n :global devCurArch;\r\ + \n :global devRbRevision;\r\ + \n :global devRbSerialNumber;\r\ + \n :global devBuildTime;\r\ + \n :global runningChannelVersion;\r\ + \n :global runningChannel;\r\ + \n :global runningVersion;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n\r\ + \n :local DeviceInfo;\r\ + \n :local Resource [/system/resource/get];\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local VersionString [ :tostr (\$Resource->\"version\") ];\r\ + \n :local ChannelStart [ :find \$VersionString \" (\" ];\r\ + \n :local RouterBoard;\r\ + \n :local IsRouterBoard false;\r\ + \n :local RunningMode \"\";\r\ + \n\r\ + \n :set devCurArch [ :tostr (\$Resource->\"architecture-name\") ];\r\ + \n :set devBuildTime [ :tostr (\$Resource->\"build-time\") ];\r\ + \n :set runningChannelVersion \$VersionString;\r\ + \n :set runningVersion \$VersionString;\r\ + \n :set runningChannel \"\";\r\ + \n\r\ + \n :if ([ :typeof \$ChannelStart ] = \"num\" && \$ChannelStart >= 0) do=\ + {\r\ + \n :set runningVersion [ :pick \$VersionString 0 \$ChannelStart ];\r\ + \n :local ChannelRest [ :pick \$VersionString (\$ChannelStart + 2) [ :\ + len \$VersionString ] ];\r\ + \n :local ChannelEnd [ :find \$ChannelRest \")\" ];\r\ + \n :if ([ :typeof \$ChannelEnd ] = \"num\" && \$ChannelEnd >= 0) do={\ + \r\ + \n :set runningChannel [ :pick \$ChannelRest 0 \$ChannelEnd ];\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([:pick \$devBoardName 0 3] != \"CHR\" or [:pick \$devBoardName 0\ + \_3] != \"x86\") do={\r\ + \n :do {\r\ + \n :set RouterBoard [[ :parse \"/system/routerboard/get\" ]];\r\ + \n# :set RouterBoard [ /system/routerboard/get ];\r\ + \n :if ((\$RouterBoard->\"routerboard\") = true) do={\r\ + \n :set IsRouterBoard true;\r\ + \n }\r\ + \n } on-error={}\r\ + \n }\r\ + \n\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get mode ];\r\ + \n } on-error={\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get running ];\r\ + \n } on-error={\r\ + \n :set RunningMode \"\";\r\ + \n }\r\ + \n }\r\ + \n :set devRunning \$RunningMode;\r\ + \n\r\ + \n :if (\$IsRouterBoard = true) do={\r\ + \n :set devModel [ :tostr (\$RouterBoard->\"model\") ];\r\ + \n :set devRbRevision [ :tostr (\$RouterBoard->\"revision\") ];\r\ + \n :set devRbSerialNumber [ :tostr (\$RouterBoard->\"serial-number\") \ + ];\r\ + \n } else={\r\ + \n :set devModel \$devBoardName;\r\ + \n :set devRbRevision \"\";\r\ + \n :set devRbSerialNumber \"\";\r\ + \n }\r\ + \n\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n\r\ + \n :set (\$DeviceInfo->\"board-name\") \$devBoardName;\r\ + \n :set (\$DeviceInfo->\"architecture-name\") \$devCurArch;\r\ + \n :set (\$DeviceInfo->\"model\") \$devModel;\r\ + \n :set (\$DeviceInfo->\"revision\") \$devRbRevision;\r\ + \n :set (\$DeviceInfo->\"serial-number\") \$devRbSerialNumber;\r\ + \n :set (\$DeviceInfo->\"running-mode\") \$devRunning;\r\ + \n :set (\$DeviceInfo->\"build-time\") \$devBuildTime;\r\ + \n :set (\$DeviceInfo->\"running-channel-version\") \$runningChannelVers\ + ion;\r\ + \n :set (\$DeviceInfo->\"running-version\") \$runningVersion;\r\ + \n :set (\$DeviceInfo->\"running-channel\") \$runningChannel;\r\ + \n :set (\$DeviceInfo->\"routerboard\") \$IsRouterBoard;\r\ + \n :set (\$DeviceInfo->\"current-firmware\") [ :tostr (\$RouterBoard->\"\ + current-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"upgrade-firmware\") [ :tostr (\$RouterBoard->\"\ + upgrade-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"package-channel\") \$currentUpdateChannel;\r\ + \n :set (\$DeviceInfo->\"installed-version\") [ :tostr (\$Update->\"inst\ + alled-version\") ];\r\ + \n :set (\$DeviceInfo->\"latest-version\") \$ROsVerAvail;\r\ + \n :set (\$DeviceInfo->\"update-status\") [ :tostr (\$Update->\"status\"\ + ) ];\r\ + \n\r\ + \n :set arrDeviceInfo \$DeviceInfo;\r\ + \n :return \$DeviceInfo;\r\ + \n}\r\ + \n\r\ + \n:set DeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global IfThenElse;\r\ + \n :global FormatLine;\r\ + \n :global CommitBrief;\r\ + \n\r\ + \n :local License [/system/license/get];\r\ + \n :local Snmp [ /snmp/get ];\r\ + \n :local Info [ \$GetArrDeviceInfo ];\r\ + \n\r\ + \n :if ([ :typeof \$Info ] != \"array\") do={\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Hostname\" \$Identity ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"location\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Location\" (\$Snmp->\"location\") ] . \"\\n\") ]\ + \_. \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"contact\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Contact\" (\$Snmp->\"contact\") ] . \"\\n\") ] .\ + \_\\\r\ + \n \"Hardware:\\n\" . \\\r\ + \n [ \$FormatLine \" Board\" (\$Info->\"board-name\") ] . \"\\n\" . \ + \\\r\ + \n [ \$FormatLine \" Arch\" (\$Info->\"architecture-name\") ] . \"\\\ + n\" . \\\r\ + \n [ \$FormatLine \" Model\" (\$Info->\"model\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"revision\") ] > 0) \\\r\ + \n (\" \" . (\$Info->\"revision\")) ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"serial-number\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Serial\" (\$Info->\"serial-number\") ] . \"\ + \\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"nlevel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"nlevel\ + \")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS:\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"level\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"level\ + \")) ] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \" Channel\" (\$Info->\"package-channel\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" Installed\" (\$Info->\"installed-version\") ] .\ + \_\"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"running-channel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Running\" ((\$Info->\"running-version\") . \ + \" (\" . (\$Info->\"running-channel\") . \")\") ] . \"\\n\") \\\r\ + \n ([ \$FormatLine \" Running\" (\$Info->\"running-version\") ] . \ + \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"latest-version\") ] > 0 && \\\r\ + \n (\$Info->\"installed-version\") != (\$Info->\"latest-version\"))\ + \_\\\r\ + \n ([ \$FormatLine \" Available\" (\$Info->\"latest-version\") ] .\ + \_\"\\n\") ] . \\\r\ + \n [ \$IfThenElse ((\$Info->\"routerboard\") = true && \\\r\ + \n (\$Info->\"current-firmware\") != (\$Info->\"upgrade-firmware\")\ + ) \\\r\ + \n ([ \$FormatLine \" Firmware\" ((\$Info->\"current-firmware\") .\ + \_\" -> \" . (\$Info->\"upgrade-firmware\")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS-Scripts:\\n\" . \\\r\ + \n [ \$FormatLine \" Commit\" [ \$CommitBrief ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \" Version\" \$GlobalConfVersion ]);\r\ + \n}\r\ + \n\r\ + \n:if ([ :typeof \$NotificationFunctions ] != \"array\") do={:set Notifica\ + tionFunctions ({})}\r\ + \n\r\ + \n:set GetRandom20CharAlNum do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndstr length=[ \$EitherOr [ :tonum \$1 ] 20 ] from=\"ABCDE\ + FGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\" ];\r\ + \n}\r\ + \n\r\ + \n:set GetRandom20CharHex do={:global EitherOr; :return [ :rndstr length=[\ + \_\$EitherOr [ :tonum \$1 ] 20 ] from=\"0123456789abcdef\" ]; }\r\ + \n:set GetRandomNumber do={:global EitherOr; :return [ :rndnum from=0 to=[\ + \_\$EitherOr [ :tonum \$1 ] 4294967295 ] ]; }\r\ + \n\r\ + \n:global checkRunJob;\r\ + \n:set checkRunJob do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLock; \r\ + \n :if ([ \$ScriptLock \$Script ] = false) do={:return false}\r\ + \n :foreach Job in=[ /system/script/job/find where script=\$Script ] do={\ + :set Job [ /system/script/job/get \$Job ];\r\ + \n :while ([ :typeof (\$Job->\"parent\") ] = \"id\") do={:set Job [ /sy\ + stem/script/job/get [ find where .id=(\$Job->\"parent\") ] ]}\r\ + \n :if ((\$Job->\"type\") = \"login\") do={:return true};}; :return fa\ + lse; \r\ + \n}\r\ + \n\r\ + \n:set InspectVar do={\r\ + \n :global InspectVarRet;\r\ + \n :put [ :tocrlf [ \$InspectVarRet \$1 ] ];\r\ + \n}\r\ + \n\r\ + \n:set CommitBrief do={\r\ + \n :global CommitId;\r\ + \n :global CommitInfo;\r\ + \n :if (\$CommitId = \"unknown\") do={\r\ + \n :return \"unknown\";\r\ + \n }\r\ + \n :return (\$CommitInfo . \"/\" . [ :pick \$CommitId 0 8 ]);\r\ + \n}\r\ + \n\r\ + \n:set InspectVarRet do={\r\ + \n :local Input \$1;\r\ + \n :local Level (0 + [ :tonum \$2 ]);\r\ + \n :global CharacterReplace;\r\ + \n :global IfThenElse;\r\ + \n :global InspectVarRet;\r\ + \n :local IndentReturn do={\r\ + \n :local Prefix [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Level [ :tonum \$3 ];\r\ + \n :global CharacterMultiply;\r\ + \n :return ([ \$CharacterMultiply \" \" (\$Level * 2) ] . \"-\" . \$Pre\ + fix . \"-> \" . \$Value);\r\ + \n }\r\ + \n :local TypeOf [ :typeof \$Input ];\r\ + \n :local Len [ :len \$Input ];\r\ + \n :local Return [ \$IndentReturn \"type\" \$TypeOf \$Level ];\r\ + \n :if (\$TypeOf = \"array\") do={\r\ + \n :foreach Key,Value in=\$Input do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"key\" \$Key (\$Level + 1) ] . \"\\n\" . \\\r\ + \n [ \$InspectVarRet \$Value (\$Level + 2) ]);\r\ + \n }\r\ + \n } else={\r\ + \n :if (\$TypeOf = \"str\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"len\" \$Len \$Level ]);\r\ + \n :if ([ :typeof [ :find \$Input (\"\\r\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\r\") \"\" ];\r\ + \n }\r\ + \n :if ([ :typeof [ :find \$Input (\"\\n\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\n\") \" \" ];\r\ + \n }\r\ + \n }\r\ + \n :if (\$TypeOf != \"nothing\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"value\" [ \$IfThenElse ([ :len \$Input ] > 80)\ + \_\\\r\ + \n ([ :pick \$Input 0 77 ] . \"...\") \$Input ] \$Level ]);\r\ + \n }\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set GetPubIp do={\r\ + \n :global DetectIpAddrDefault;\r\ + \n :global DetectIpAddrFallback;\r\ + \n\r\ + \n :local PubIpAddr false;\r\ + \n :local Url \$DetectIpAddrDefault;\r\ + \n :local JobName [ :jobname ];\r\ + \n\r\ + \n :do {\r\ + \n :log debug (\$0 . \" Trying to detect public IP using default serv\ + ice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=50ms max=5 on-error={:log error (\$JobName . \" Failed to \ + detect public IP using default service: \" . \$Url . \".\")}\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed to detect public IP using default serv\ + ice: \" . \$Url . \".\");\r\ + \n :set Url \$DetectIpAddrFallBack;\r\ + \n :log debug (\$0 . \" Trying to detect public IP using fallback ser\ + vice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=200ms max=5 on-error={:log error (\$JobName . \" Failed to\ + \_detect public IP using fallback service: \" . \$Url . \".\")}\r\ + \n };\r\ + \n :local IpLen ([ :len \$PubIpAddr ] -1);\r\ + \n :if (\$PubIpAddr = false) do={:set PubIpAddr \"not-detected\"} else=\ + {:set PubIpAddr [:pick \$PubIpAddr 0 \$IpLen]}\r\ + \n :return \$PubIpAddr;\r\ + \n}\r\ + \n\r\ + \n:set FormatLine do={\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Indent [ :tonum \$3 ];\r\ + \n :local Spaces;\r\ + \n :local Return \"\";\r\ + \n :global CharacterMultiply;\r\ + \n :global EitherOr;\r\ + \n :set Indent [ \$EitherOr \$Indent 16 ];\r\ + \n :local Spaces [ \$CharacterMultiply \" \" \$Indent ];\r\ + \n :if ([ :len \$Key ] > 0) do={ :set Return (\$Key . \":\")}\r\ + \n :if ([ :len \$Key ] > (\$Indent - 2)) do={:set Return (\$Return . \"\\\ + n\" . [ :pick \$Spaces 0 \$Indent ] . \$Value);\r\ + \n } else={:set Return (\$Return . [ :pick \$Spaces 0 (\$Indent - [ :len \ + \$Return ]) ] . \$Value)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ParseCustom do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Start [:find [ \$Str ] [:tostr \$2]];\r\ + \n :local End [ :tostr \$3 ];\r\ + \n :local Num [ :tonum \$4 ];\r\ + \n :local Return;\r\ + \n :if ([:len \$Num] = 0) do={:set Num \"0\"}\r\ + \n :local rest [:pick \$Str (\$Start+\$Num) [:len \$Str]]; \r\ + \n :if ([:len \$End ] = 0) do={:set Return [:pick \$Str \$Num \$Start]} e\ + lse={\r\ + \n :set End [:find \$rest \$End];\r\ + \n :set Return [:pick \$rest 0 \$End];\r\ + \n }\r\ + \n:return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set LogPrint do={\r\ + \n :local Severity [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Message [ :tostr \$3 ];\r\ + \n :global PrintDebug;\r\ + \n :global PrintDebugOverride;\r\ + \n :global EitherOr;\r\ + \n :local Debug [ \$EitherOr (\$PrintDebugOverride->\$Name) \$PrintDebug \ + ];\r\ + \n :local PrintSeverity do={\r\ + \n :global TerminalColorOutput;\r\ + \n :if (\$TerminalColorOutput != true) do={:return \$1}\r\ + \n :local Color { debug=96; info=97; warning=93; error=91 };\r\ + \n :return (\"\\1B[\" . \$Color->\$1 . \"m\" . \$1 . \"\\1B[0m\");\r\ + \n}\r\ + \n :local Log ([ \$EitherOr \$Name \"\" ] . \": \" . \$Message);\ + \r\ + \n :if (\$Severity ~ (\"^(custom|debug|error|info)\\\$\")) do={\r\ + \n :if (\$Severity = \"debug\") do={:log debug \$Log}\r\ + \n :if (\$Severity = \"error\") do={:log error \$Log}\r\ + \n :if (\$Severity = \"info\" ) do={:log info \$Log}\r\ + \n } else={:log warning \$Log; :set Severity \"warning\"}\r\ + \n :if (\$Severity != \"debug\" || \$Debug = true) do={:put ([ \$PrintSev\ + erity \$Severity ] . \": \" . \$Message)}\r\ + \n}\r\ + \n\r\ + \n:set CertificateAvailable do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :local UseFor [ :tostr \$2 ];\r\ + \n\r\ + \n :global CertificateDownload;\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :if ([ :len \$UseFor ] = 0) do={\r\ + \n :log warning (\$0 . \"The intended use is undefined!\");\r\ + \n :set UseFor \"undefined\";\r\ + \n }\r\ + \n :if ([ /system/resource/get free-hdd-space ] < 8388608 && \\\r\ + \n [ /certificate/settings/get crl-download ] = true && \\\r\ + \n [ /certificate/settings/get crl-store ] = \"system\") do={\r\ + \n :log warning (\$0 . \"This system has low free flash space but \" . \ + \\\r\ + \n \"is configured to download certificate CRLs to system!\");\r\ + \n }\r\ + \n :if ([ :len \$CommonName ] = 0) do={\r\ + \n :log warning (\$0 . \"No CommonName given!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \\\ + \r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \$UseFor || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CommonName\ + \_] ] > 0) do={\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n :log info (\$0 . \"Certificate with CommonName '\" . \$CommonName . \ + \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n :log info (\$0 . \"There are \" . \$CertCount . \" Certificates with\ + \_CommonName '\" . \$CommonName . \"'. Should be ok.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :local CertVal [ /certificate/get [ find where common-name=\$CommonNam\ + e ] ];\r\ + \n :while ((\$CertVal->\"akid\") != \"\" && (\$CertVal->\"akid\") != (\$C\ + ertVal->\"skid\")) do={\r\ + \n :if ([ :len [ /certificate/find where skid=(\$CertVal->\"akid\") ] ]\ + \_= 0) do={\r\ + \n :local IssuerCN ([ \$ParseKeyValueStore (\$CertVal->\"issuer\") ]-\ + >\"CN\");\r\ + \n :log info (\$0 . \"Certificate chain for '\" . \$CommonName . \"' \ + is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\"akid\ + \") ] ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateDownload do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :global ScriptUpdatesBaseUrl;\r\ + \n :global ScriptUpdatesUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :log info (\$0 . \"Downloading and importing certificate with \" . \\\ + \r\ + \n \"CommonName '\" . \$CommonName . \"'.\");\r\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\r\ + \n :do {\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-header\ + -field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n (\$ScriptUpdatesBaseUrl . \"certs/\" . \$FileName . \$ScriptUpdate\ + sUrlSuffix) \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n } on-error={\r\ + \n :log warning (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \\\r\ + \n \"' from repository! Trying fallback to mkcert.org...\");\r\ + \n :do {\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0 && \\\r\ + \n !(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" \ + || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \ + \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\ + \r\ + \n [ :len [ /certificate/builtin/find where common-name=\"ISRG\ + \_Root X1\" ] ] > 0)) do={\r\ + \n :log error (\$0 . \" Required certificate is not available.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-head\ + er-field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n url=\"https://mkcert.org/generate/\" http-data=[ :serialize to=jso\ + n ({ \$CommonName }) ] \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n :if ([ /file/get \$FileName size ] = 0) do={\r\ + \n \$RmFile \$FileName;\r\ + \n :error false;\r\ + \n }\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n :log warning (\$0 . \" Certificate with CommonName '\" . \$CommonNam\ + e . \"' still unavailable!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateNameByCN do={\r\ + \n :local Match [ :tostr \$1 ];\r\ + \n :global CleanName;\r\ + \n :local Cert ([ /certificate/find where (common-name=\$Match or fingerp\ + rint=\$Match or name=\$Match) ]->0);\r\ + \n :if ([ :len \$Cert ] = 0) do={\r\ + \n :log warning (\$0 .\" No matching certificate found.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CommonName [ /certificate/get \$Cert common-name ];\r\ + \n /certificate/set \$Cert name=[ \$CleanName \$CommonName ];\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FileExists do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local Type [ :tostr \$2 ];\r\ + \n :global FileGet;\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={ :return false; }\r\ + \n :if ([ :len (\$FileVal->\"size\") ] = 0) do={ :return false; }\r\ + \n :if ([ :len \$Type ] = 0 || \$FileVal->\"type\" = \$Type) do={ :return\ + \_true; }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set Grep do={\r\ + \n :local Input ([ :tostr \$1 ] . \"\\n\");\r\ + \n :local Pattern [ :tostr \$2 ];\r\ + \n :if ([ :typeof [ :find \$Input \$Pattern ] ] = \"nil\") do={:return []\ + }\r\ + \n :do {\r\ + \n :local Line [ :pick \$Input 0 [ :find \$Input \"\\n\" ] ];\r\ + \n :if ([ :typeof [ :find \$Line \$Pattern ] ] = \"num\") do={:return \ + \$Line}\r\ + \n :set Input [ :pick \$Input ([ :find \$Input \"\\n\" ] + 1) [ :len \$\ + Input ] ];\r\ + \n } while=([ :len \$Input ] > 0);\r\ + \n :return [];\r\ + \n}\r\ + \n\r\ + \n:set HumanReadableNum do={\r\ + \n :local Input [ :tonum \$1 ];\r\ + \n :local Base [ :tonum \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global IfThenElse;\r\ + \n :local Prefix \"kMGTPE\";\r\ + \n :local Pow 1;\r\ + \n :set Base [ \$EitherOr \$Base 1024 ];\r\ + \n :local Bin [ \$IfThenElse (\$Base = 1024) \"i\" \"\" ];\r\ + \n :if (\$Input < \$Base) do={:return \$Input}\r\ + \n :for I from=0 to=[ :len \$Prefix ] do={\r\ + \n :set Pow (\$Pow * \$Base);\r\ + \n :if (\$Input / \$Base < \$Pow) do={\r\ + \n :set Prefix [ :pick \$Prefix \$I ];\r\ + \n :local Tmp1 (\$Input * 100 / \$Pow);\r\ + \n :local Tmp2 (\$Tmp1 / 100);\r\ + \n :if (\$Tmp2 >= 100) do={:return (\$Tmp2 . \$Prefix . \$Bin)}\r\ + \n :return (\$Tmp2 . \".\" . \\\r\ + \n [ :pick \$Tmp1 [ :len \$Tmp2 ] ([ :len \$Tmp1 ] - [ :len \$Tmp\ + 2 ] + 1) ] . \\\r\ + \n \$Prefix . \$Bin);\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set CleanFilePath do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CharacterReplace;\r\ + \n :while (\$Path ~ \"//\") do={ :set \$Path [ \$CharacterReplace \$Path \ + \"//\" \"/\" ]; }\r\ + \n :if ([ :pick \$Path 0 ] = \"/\") do={ :set Path [ :pick \$Path 1 [ :le\ + n \$Path ] ]; }\r\ + \n :if ([ :pick \$Path ([ :len \$Path ] - 1) ] = \"/\") do={ :set Path [ \ + :pick \$Path 0 ([ :len \$Path ] - 1) ]; }\r\ + \n :return \$Path;\r\ + \n}\r\ + \n\r\ + \n:set CleanName do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :typeof [ find \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr\ + stuvwxyz0123456789\" \$Char ] ] = \"nil\") do={\r\ + \n :do {:if ([ :len \$Return ] = 0) do={:error true};\r\ + \n :if ([ :pick \$Return ([ :len \$Return ] - 1) ] = \"-\") do={:er\ + ror true}; :set Char \"-\"} on-error={:set Char \"\"}; \r\ + \n };\r\ + \n :set Return (\$Return . \$Char)};\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set RandomDelay do={\r\ + \n :local Time [ :tonum \$1 ];\r\ + \n :local Unit [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global GetRandomNumber;\r\ + \n :global MAX;\r\ + \n :if (\$Time = 0) do={:return false}\r\ + \n :delay ([ \$MAX 10 [ \$GetRandomNumber ([ :tonsec [ :totime (\$Time . \ + [ \$EitherOr \$Unit \"s\" ]) ] ] / 1000000) ] ] . \"ms\");\r\ + \n}\r\ + \n\r\ + \n:set EscapeForRegEx do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"^.[]\\\$()|*+\?{}\\\\\");\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :find \$Chars \$Char ]) do={:set Char (\"\\\\\" . \$Char)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :if (\$ExitOK = \"false\") do={\r\ + \n :log error (\$Name [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\\\$\") \ + \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set ExitOnError do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :local Error [ :tostr \$2 ];\r\ + \n :global IfThenElse;\r\ + \n :log error (\$Name . \" \" . [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\ + \\\$\") \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with erro\ + r\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \$E\ + rror) \".\" ]);\r\ + \n}\r\ + \n\r\ + \n:set MiniDateTimeStamp do={\r\ + \n :local mikro [ :tobool \$1 ];\r\ + \n /system/clock;\r\ + \n :local vdate [get date];\r\ + \n :local vtime [get time];\r\ + \n :local vdoff [:toarray \"0,4,5,7,8,10\"];\r\ + \n :local MM [:pick \$vdate (\$vdoff->2) (\$vdoff->3)];\r\ + \n :local M [:tonum \$MM];\r\ + \n :if (\$vdate ~ \".../../....\") do={\r\ + \n :set vdoff [:toarray \"7,11,1,3,4,6\"];\r\ + \n :set M ([:find \"xxanebarprayunulugepctovecANEBARPRAYUNULUGE\ + PCTOVEC\" [:pick \$vdate (\$vdoff->2) (\$vdoff->3)] -1] / 2);\r\ + \n :if (\$M>12) do={:set M (\$M - 12)}\r\ + \n :set MM [:pick (100 + \$M) 1 3];\r\ + \n }\r\ + \n :local yyyy [:pick \$vdate (\$vdoff->0) (\$vdoff->1)];\r\ + \n :local dd [:pick \$vdate (\$vdoff->4) (\$vdoff->5)];\r\ + \n :local HH [:pick \$vtime 0 2];\r\ + \n :local mm [:pick \$vtime 3 5];\r\ + \n :local ss [:pick \$vtime 6 8];\r\ + \n :local Return;\r\ + \n :if (\$mikro = true) do={\r\ + \n :set Return ([:pick \$yyyy 2 4] . [:pick \$dd 0 1] . [:pick \$HH 0\ + \_1] . [:pick \$mm 3 4] . [:pick \$ss 6 7]);\r\ + \n } else={\r\ + \n :set Return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\ + \r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set WaitForFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local WaitTime [ :totime \$2 ];\r\ + \n :global CleanFilePath;\r\ + \n :global EitherOr;\r\ + \n :global MAX;\r\ + \n :set FileName [ \$CleanFilePath \$FileName ];\r\ + \n :local Delay ([ \$MAX [ \$EitherOr \$WaitTime 2s ] 100ms ] / 9);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } delay=\$Delay max=10;\r\ + \n } on-error={ }\r\ + \n :while ([ :len [ /file/find where name=\$FileName ] ] > 0) do={\r\ + \n :do {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } on-error={ }\r\ + \n :delay \$Delay;\r\ + \n :set Delay (\$Delay * 3 / 2);\r\ + \n }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set FileGet do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global WaitForFile;\r\ + \n :if ([ \$WaitForFile \$FileName 0s ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileVal false;\r\ + \n :do {\r\ + \n :set FileVal [ /file/get \$FileName ];\r\ + \n } on-error={ }\r\ + \n :return \$FileVal;\r\ + \n}\r\ + \n\r\ + \n:set RmDir do={\r\ + \n :local DirName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n };\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\r\ + \n :log error (\$0 . \" Directory '\" . \$DirName . \"' is not a direct\ + ory.\");\r\ + \n :return false;\r\ + \n };\r\ + \n :onerror Err {\r\ + \n /file/remove \$DirName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing directory '\" . \$DirName . \"' failed\ + : \" . \$Err);\r\ + \n :return false;\r\ + \n };\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set RmFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n :log error (\$0 . \" File '\" . \$FileName . \"' is not a file.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing file '\" . \$FileName . \"' failed: \"\ + \_. \$Err); :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MkDir do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CleanFilePath;\r\ + \n :global FileGet;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :local MkTmpfs do={\r\ + \n :global WaitForFile;\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\$0 . \" The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\$0 . \" Creating disk of type tmpfs.\");\r\ + \n \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource\ + /get total-memory ] / 3);\r\ + \n \$WaitForFile \"tmpfs\";\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Creating disk of type tmpfs failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :set Path [ \$CleanFilePath \$Path ];\r\ + \n :if (\$Path = \"\") do={\r\ + \n :return true;\r\ + \n }\r\ + \n :log debug (\$0 . \" Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n :log debug (\$0 . \" ... which already exists.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :pick \$Path 0 5 ] = \"tmpfs\") do={\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=\$Path;\r\ + \n \$WaitForFile \$Path;\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Making directory '\" . \$Path . \"' failed: \ + \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MAX do={:if (\$1 > \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n:set MIN do={:if (\$1 < \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set CharacterReplace do={\r\ + \n :local String [ :tostr \$1 ];\r\ + \n :local ReplaceFrom [ :tostr \$2 ];\r\ + \n :local ReplaceWith [ :tostr \$3 ];\r\ + \n :local Return \"\";\r\ + \n :if (\$ReplaceFrom = \"\") do={:return \$String}\r\ + \n :while ([ :typeof [ :find \$String \$ReplaceFrom ] ] != \"nil\") do={\ + \r\ + \n :local Pos [ :find \$String \$ReplaceFrom ];\r\ + \n :set Return (\$Return . [ :pick \$String 0 \$Pos ] . \$ReplaceWith);\ + \r\ + \n :set String [ :pick \$String (\$Pos + [ :len \$ReplaceFrom ]) [ :len\ + \_\$String ] ];\r\ + \n }\r\ + \n :return (\$Return . \$String);\r\ + \n}\r\ + \n\r\ + \n:set IfThenElse do={\r\ + \n :if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] = true) do={:return \ + \$2};\r\ + \n :return \$3;\r\ + \n}\r\ + \n\r\ + \n:set EitherOr do={\r\ + \n :global IfThenElse;\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:return [ \$IfThenElse (\$1 != 0) \ + \$1 \$2 ]}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:return [ \$IfThenElse (\$1 > 0s)\ + \_\$1 \$2 ]}\r\ + \n# this works for boolean values, literal ones with parentheses\r\ + \n :return [ \$IfThenElse ([ :len [ :tostr \$1 ] ] > 0) \$1 \$2 ];\r\ + \n}\r\ + \n\r\ + \n:set ParseKeyValueStore do={\r\ + \n :local Source \$1;\r\ + \n :if ([ :pick \$Source 0 1 ] = \"{\") do={\r\ + \n :do {\r\ + \n :return [ :deserialize from=json \$Source ];\r\ + \n } on-error={ }\r\ + \n } \r\ + \n :if ([ :typeof \$Source ] != \"array\") do={:set Source [ :tostr \$1 ]\ + }\r\ + \n :local Result ({});\r\ + \n :foreach KeyValue in=[ :toarray \$Source ] do={\r\ + \n :if ([ :find \$KeyValue \"=\" ]) do={\r\ + \n :local Key [ :pick \$KeyValue 0 [ :find \$KeyValue \"=\" ] ];\r\ + \n :local Value [ :pick \$KeyValue ([ :find \$KeyValue \"=\" ] + 1) [\ + \_:len \$KeyValue ] ];\r\ + \n :if (\$Value=\"true\") do={:set Value true}\r\ + \n :if (\$Value=\"false\") do={:set Value false}\r\ + \n :set (\$Result->\$Key) \$Value;\r\ + \n } else={:set (\$Result->\$KeyValue) true}\r\ + \n }\r\ + \n :return \$Result;\r\ + \n}\r\ + \n:set RequiredRouterOS do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :local Required [ :tostr \$2 ];\r\ + \n :local Warn [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :global VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n :log error (\$0 . \" No valid RouterOS version: \" . \$Required);\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$VersionToNum \$Required ] > [ \$VersionToNum [ /system/packag\ + e/update/get installed-version ] ]) do={\r\ + \n :if (\$Warn = \"true\") do={\r\ + \n :log warning (\$0 . \" This \" . [ \$IfThenElse ([ :pick \$Caller \ + 0 ] = (\"\\\$\")) \"function\" \"script\" ] . \\\r\ + \n \" '\" . \$Caller . \"' (at least specific functionality) requir\ + es RouterOS \" . \$Required . \". Please update!\");\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set ValidateSyntax do={\r\ + \n :local Code [ :tostr \$1 ];\r\ + \n :global LogPrint;\r\ + \n :onerror Err {\r\ + \n [ :parse (\":local Validate do={\\n\" . \$Code . \"\\n}\") ];\r\ + \n } do={\r\ + \n \$LogPrint debug \$0 (\"Valdation failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set VersionToNum do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Multi 0x1000000;\r\ + \n :local Return 0;\r\ + \n :global CharacterReplace;\r\ + \n :set Input [ \$CharacterReplace \$Input \".\" \",\" ];\r\ + \n :foreach I in={ \"zero\"; \"alpha\"; \"beta\"; \"rc\" } do={\r\ + \n :set Input [ \$CharacterReplace \$Input \$I (\",\" . \$I . \",\") ];\ + \r\ + \n }\r\ + \n :foreach Value in=([ :toarray \$Input ], 0) do={\r\ + \n :local Num [ :tonum \$Value ];\r\ + \n :if (\$Multi = 0x100) do={\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={\r\ + \n :set Return (\$Return + 0xff00);\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n } else={\r\ + \n :if (\$Value = \"zero\") do={ }\r\ + \n :if (\$Value = \"alpha\") do={ :set Return (\$Return + 0x3f00); \ + }\r\ + \n :if (\$Value = \"beta\") do={ :set Return (\$Return + 0x5f00); }\ + \r\ + \n :if (\$Value = \"rc\") do={ :set Return (\$Return + 0x7f00); }\r\ + \n }\r\ + \n }\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={ :set Return (\$Return + (\$Va\ + lue * \$Multi)); }\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ScriptLock do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local WaitMax [ :totime \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global ScriptLockOrder;\r\ + \n :if ([ :typeof \$ScriptLockOrder ] = \"nothing\") do={\r\ + \n :set ScriptLockOrder ({});\r\ + \n }\r\ + \n :if ([ :typeof (\$ScriptLockOrder->\$Script) ] = \"nothing\") do={\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :local JobCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :return [ :len [ /system/script/job/find where script=\$Script ] ];\ + \r\ + \n }\r\ + \n :local TicketCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :local Count 0;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:set Count (\$Count \ + + 1)}\r\ + \n }\r\ + \n :return \$Count;\r\ + \n }\r\ + \n :local IsFirstTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Check [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if (\$Ticket = \$Check) do={:return true}\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\" && \$Ticket != \$Check) d\ + o={:return false}\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :local AddTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Add [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :while (true) do={\r\ + \n :local Pos [ :len (\$ScriptLockOrder->\$Script) ];\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Pos) \$Add;\r\ + \n :delay 10ms;\r\ + \n :if ((\$ScriptLockOrder->\$Script->\$Pos) = \$Add) do={:return tru\ + e}\r\ + \n }\r\ + \n }\r\ + \n :local RemoveTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Remove [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Id,Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :while ((\$ScriptLockOrder->\$Script->\$Id) = \$Remove) do={\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Id);\r\ + \n :delay 10ms;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :local CleanupTickets do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:return false}\r\ + \n }\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :if ([ :typeof \$WaitMax ] = \"nil\" ) do={:set WaitMax 0s}\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\r\ + \n :log error (\$0 . \" A script named '\" . \$Script . \"' does not ex\ + ist!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$JobCount \$Script ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"No script '\" . \$Script . \"' is running!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$TicketCount \$Script ] >= [ \$JobCount \$Script ]) do={\r\ + \n :log error (\$0 . \" More tickets than running scripts '\" . \$Scrip\ + t . \"', resetting!\");\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n /system/script/job/remove [ find where script=\$Script ];\r\ + \n }\r\ + \n :local MyTicket [ \$GetRandom20CharAlNum 6 ];\r\ + \n \$AddTicket \$Script \$MyTicket;\r\ + \n :local WaitInterval (\$WaitMax / 20);\r\ + \n :local WaitTime \$WaitMax;\r\ + \n :while (\$WaitTime > 0 && \\\r\ + \n ([ \$IsFirstTicket \$Script \$MyTicket ] = false || \\\r\ + \n [ \$TicketCount \$Script ] < [ \$JobCount \$Script ])) do={\r\ + \n :set WaitTime (\$WaitTime - \$WaitInterval);\r\ + \n :delay \$WaitInterval;\r\ + \n }\r\ + \n :if ([ \$IsFirstTicket \$Script \$MyTicket ] = true && \\\r\ + \n [ \$TicketCount \$Script ] = [ \$JobCount \$Script ]) do={\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$CleanupTickets \$Script;\r\ + \n :return true;\r\ + \n }\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$LogPrint debug \$0 (\"Script '\" . \$Script . \"' started more than \ + once\" . \\\r\ + \n [ \$IfThenElse (\$WaitTime < \$WaitMax) \" and timed out waiting for\ + \_lock\" \"\" ] . \"...\");\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set SendNotification do={ :onerror Err {\r\ + \n :global SendNotification2;\r\ + \n \$SendNotification2 ({ origin=\$0; subject=\$1; message=\$2; link=\$3;\ + \_silent=\$4 });\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n\r\ + \n:set SendNotification2 do={\r\ + \n :local Notification \$1;\r\ + \n :global NotificationFunctions;\r\ + \n :foreach FunctionName,Discard in=\$NotificationFunctions do={\r\ + \n (\$NotificationFunctions->\$FunctionName) (\"\\\$NotificationFunctio\ + ns->\\\"\" . \$FunctionName . \"\\\"\") \$Notification;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\r\ + \n :global SymbolsExtra;\r\ + \n :local Symbols ({\r\ + \n \"abacus\"=\"\\F0\\9F\\A7\\AE\";\r\ + \n \"alarm-clock\"=\"\\E2\\8F\\B0\";\r\ + \n \"arrow-down\"=\"\\E2\\AC\\87\";\r\ + \n \"arrow-up\"=\"\\E2\\AC\\86\";\r\ + \n \"calendar\"=\"\\F0\\9F\\93\\85\";\r\ + \n \"card-file-box\"=\"\\F0\\9F\\97\\83\";\r\ + \n \"chart-decreasing\"=\"\\F0\\9F\\93\\89\";\r\ + \n \"chart-increasing\"=\"\\F0\\9F\\93\\88\";\r\ + \n \"cloud\"=\"\\E2\\98\\81\";\r\ + \n \"cross-mark\"=\"\\E2\\9D\\8C\";\r\ + \n \"earth\"=\"\\F0\\9F\\8C\\8D\";\r\ + \n \"fire\"=\"\\F0\\9F\\94\\A5\";\r\ + \n \"floppy-disk\"=\"\\F0\\9F\\92\\BE\";\r\ + \n \"gear\"=\"\\E2\\9A\\99\";\r\ + \n \"heart\"=\"\\E2\\99\\A5\";\r\ + \n \"high-voltage-sign\"=\"\\E2\\9A\\A1\";\r\ + \n \"incoming-envelope\"=\"\\F0\\9F\\93\\A8\";\r\ + \n \"information\"=\"\\E2\\84\\B9\";\r\ + \n \"large-orange-circle\"=\"\\F0\\9F\\9F\\A0\";\r\ + \n \"large-red-circle\"=\"\\F0\\9F\\94\\B4\";\r\ + \n \"link\"=\"\\F0\\9F\\94\\97\";\r\ + \n \"lock-with-ink-pen\"=\"\\F0\\9F\\94\\8F\";\r\ + \n \"memo\"=\"\\F0\\9F\\93\\9D\";\r\ + \n \"mobile-phone\"=\"\\F0\\9F\\93\\B1\";\r\ + \n \"pushpin\"=\"\\F0\\9F\\93\\8C\";\r\ + \n \"scissors\"=\"\\E2\\9C\\82\";\r\ + \n \"scroll\"=\"\\F0\\9F\\93\\9C\";\r\ + \n \"smiley-partying-face\"=\"\\F0\\9F\\A5\\B3\";\r\ + \n \"smiley-smiling-face\"=\"\\E2\\98\\BA\";\r\ + \n \"smiley-winking-face-with-tongue\"=\"\\F0\\9F\\98\\9C\";\r\ + \n \"sparkles\"=\"\\E2\\9C\\A8\";\r\ + \n \"speech-balloon\"=\"\\F0\\9F\\92\\AC\";\r\ + \n \"star\"=\"\\E2\\AD\\90\";\r\ + \n \"warning-sign\"=\"\\E2\\9A\\A0\";\r\ + \n \"white-heavy-check-mark\"=\"\\E2\\9C\\85\"\r\ + \n }, \$SymbolsExtra);\r\ + \n :local Magic [ :pick [ /system/clock/get date ] 4 10 ];\r\ + \n :local Special {\r\ + \n \"information-04-01\"=\"\\F0\\9F\\9A\\BB\";\r\ + \n \"large-orange-circle-04-01\"=\"\\F0\\9F\\8D\\8A\";\r\ + \n \"large-orange-circle-10-31\"=\"\\F0\\9F\\8E\\83\";\r\ + \n \"large-red-circle-04-01\"=\"\\F0\\9F\\8D\\92\" };\r\ + \n :if ([ :len (\$Symbols->\$Name) ] = 0) do={\r\ + \n :log warning (\$0 . \"No symbol available for name '\" . \$Name . \"\ + '!\");\r\ + \n :return \"\";\r\ + \n }\r\ + \n :return ([ \$EitherOr (\$Special->(\$Name . \$Magic)) (\$Symbols->\$Na\ + me) ] . \"\\EF\\B8\\8F\");\r\ + \n}\r\ + \n\r\ + \n:set SymbolForNotification do={\r\ + \n :global NotificationsWithSymbols;\r\ + \n :global SymbolByUnicodeName;\r\ + \n :global IfThenElse;\r\ + \n :if (\$NotificationsWithSymbols != true) do={:return [ \$IfThenElse ([\ + \_:len \$2 ] > 0) ([ :tostr \$2 ] . \" \") \"\" ]}\r\ + \n :local Return \"\";\r\ + \n :foreach Symbol in=[ :toarray \$1 ] do={:set Return (\$Return . [ \$Sy\ + mbolByUnicodeName \$Symbol ])}\r\ + \n :return (\$Return . \" \");\r\ + \n}\r\ + \n\r\ + \n:set Unix2Dos do={:return [ :tocrlf [ :tostr \$1 ] ]}\r\ + \n:set UrlEncode do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"\\n\\r !\\\"#\\\$%&'()*+,:;<=>\?@[\\\\]^`{|}~\");\r\ + \n :local Subs { \"%0A\"; \"%0D\"; \"%20\"; \"%21\"; \"%22\"; \"%23\"; \"\ + %24\"; \"%25\"; \"%26\"; \"%27\";\r\ + \n \"%28\"; \"%29\"; \"%2A\"; \"%2B\"; \"%2C\"; \"%3A\"; \"%3B\"; \ + \"%3C\"; \"%3D\"; \"%3E\"; \"%3F\";\r\ + \n \"%40\"; \"%5B\"; \"%5C\"; \"%5D\"; \"%5E\"; \"%60\"; \"%7B\"; \ + \"%7C\"; \"%7D\"; \"%7E\" };\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :local Replace [ :find \$Chars \$Char ];\r\ + \n :if ([ :typeof \$Replace ] = \"num\") do={:set Char (\$Subs->\$Repla\ + ce)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsFullyConnected do={\r\ + \n :global IsDNSResolving;\r\ + \n :global IsTimeSync;\r\ + \n :if ([ \$IsDNSResolving ] = false) do={:return false};\r\ + \n :if ([ \$IsTimeSync ] = false) do={:return false};\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsTimeSync do={\r\ + \n :global IsTimeSyncCached;\r\ + \n :global IsTimeSyncResetNtp;\r\ + \n :if (\$IsTimeSyncCached = true) do={:return true}\r\ + \n :if ([ /system/ntp/client/get enabled ] = true) do={\r\ + \n :if ([ /system/ntp/client/get status ] = \"synchronized\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :local Uptime [ /system/resource/get uptime ];\r\ + \n :if ([ :typeof \$IsTimeSyncResetNtp ] = \"nothing\") do={\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n }\r\ + \n :if (\$Uptime - \$IsTimeSyncResetNtp < 3m) do={:return false}\r\ + \n :log warning \"\$0 The ntp client is configured, but did not sync.\"\ + ;\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n /system/ntp/client/set enabled=no;\r\ + \n :delay 20ms;\r\ + \n /system/ntp/client/set enabled=yes;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ /system/license/get ]->\"level\" = \"free\" || \\\r\ + \n [ /system/resource/get ]->\"board-name\" = \"x86\") do={\r\ + \n :log debug \"\$0 No ntp client configured, relying on RTC for CHR fr\ + ee license and x86.\";\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ /ip/cloud/get update-time ] = true) do={\r\ + \n :if ([ :typeof [ /ip/cloud/get public-address ] ] = \"ip\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :log debug \"\$0 No time source configured! Returning gracefully...\";\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n# read parts of a large file\r\ + \n# Description of parameters:\r\ + \n# \$1 - script name for logging and user agent\r\ + \n# \$2 - url to fetch from\r\ + \n# \$3 - check-certificate value for /tool/fetch (true/false)\r\ + \n# \$4 - mode value for /tool/fetch (optional, e.g. \"keep-broken\", \"ht\ + tps-only\", \"http-only\"\r\ + \n# \"no-redirects\", \"background\", \"background-and-keep-broken\",\ + \_\"background-and-https-only\",\r\ + \n# \"background-and-http-only\", \"background-and-no-redirects\", \"\ + background-and-keep-broken-and-https-only\", \"background-and-keep-broken-\ + and-http-only\",\r\ + \n# \"background-and-keep-broken-and-no-redirects\")\r\ + \n# \$5 - fetch method for /tool/fetch (optional, e.g. \"get\", \"head\", \ + \"post\", \"put\", \"patch\", \"delete\")\r\ + \n#:set FetchLargeFiles do={\r\ + \n# :local RunName [:tostr \$1];\r\ + \n# :local fetchUrl [:tostr \$2];\r\ + \n# :local fetchFile [:tostr \$3];\r\ + \n# :local CheckCert [:tostr \$4];\r\ + \n# :local fetchMode [:tostr \$5];\r\ + \n# :local fetchMethod [:tostr \$6];\r\ + \n# :local tmpName;\r\ + \n# :global CleanName;\r\ + \n# :global FetchUserAgentStr;\r\ + \n# :global GetRandom20CharAlNum;\r\ + \n# :global IfThenElse;\r\ + \n# :global LogPrint;\r\ + \n# :global MkDir;\r\ + \n# :global RmDir;\r\ + \n# :global RmFile;\r\ + \n# :global WaitForFile;\r\ + \n#\r\ + \n# :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-\ + without-crl\" ];\r\ + \n#\r\ + \n# :set tmpName (\$CleanName \"tmp-\" . [ \$GetRandom20CharAlNum 6 ]);\r\ + \n# :local DirName (\"tmpfs/\" . \$tmpName);\r\ + \n# :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n# :log error (\$RunName . \" Failed creating directory: \" . \$DirNam\ + e . \"!\");\r\ + \n# :return false;\r\ + \n# }\r\ + \n#\r\ + \n# :local FileName (\$DirName . \"/\" . [ \$CleanName \$fetchFile ] . \"\ + -\" . [ \$GetRandom20CharAlNum 5 ]);\r\ + \n# :local Url (\$fetchUrl . \$fetchFile);\r\ + \n# :onerror Err {\r\ + \n# /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName\ + \_\\\r\ + \n# http-header-field=({ [ \$FetchUserAgentStr \$RunName ] }) as-valu\ + e;\r\ + \n# } do={\r\ + \n# :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n# \$RmFile \$FileName;\r\ + \n# }\r\ + \n# :log error (\$RunName . \" Failed downloading from '\" . \$Url . \"\ + ' - \" . \$Err);\r\ + \n# \$RmDir \$DirName;\r\ + \n# :return false;\r\ + \n# }\r\ + \n#\r\ + \n# :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n# :log error (\$RunName . \" The file downloaded from '\" . \$Url . \ + \"' did not show up.\");\r\ + \n# :return false;\r\ + \n# }\r\ + \n# \r\ + \n# :local FileSize [ /file/get \$FileName size ];\r\ + \n# :local Return \"\";\r\ + \n# :local VarSize 0;\r\ + \n# :while (\$VarSize != \$FileSize) do={\r\ + \n# :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=3\ + 2768 file=\$FileName as-value ]->\"data\"));\r\ + \n# :set FileSize [ /file/get \$FileName size ];\r\ + \n# :set VarSize [ :len \$Return ];\r\ + \n# :if (\$VarSize > \$FileSize) do={\r\ + \n# :delay 100ms;\r\ + \n# }\r\ + \n# }\r\ + \n## \$RmFile \$FileName;\r\ + \n# \$RmDir \$DirName;\r\ + \n# :return \$Return;\r\ + \n#}\r\ + \n\r\ + \n:set FetchHugeFiles do={\r\ + \n :local ScriptName [ :tostr \$1 ];\r\ + \n :local Url [ :tostr \$2 ];\r\ + \n :local CheckCert [ :tostr \$3 ];\r\ + \n\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-w\ + ithout-crl\" ];\r\ + \n\r\ + \n :local DirName (\"tmpfs/\" . [ \$CleanName \$ScriptName ]);\r\ + \n :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n \$LogPrint error \$0 (\"Failed creating directory!\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName \ + \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue;\r\ + \n } do={\r\ + \n :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n \$RmFile \$FileName;\r\ + \n }\r\ + \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$Url . \" - \"\ + \_. \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$Url . \" did\ + \_not show up.\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileSize [ /file/get \$FileName size ];\r\ + \n :local Return \"\";\r\ + \n :local VarSize 0;\r\ + \n :while (\$VarSize != \$FileSize) do={\r\ + \n :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=32\ + 768 file=\$FileName as-value ]->\"data\"));\r\ + \n :set FileSize [ /file/get \$FileName size ];\r\ + \n :set VarSize [ :len \$Return ];\r\ + \n :if (\$VarSize > \$FileSize) do={\r\ + \n :delay 100ms;\r\ + \n }\r\ + \n }\r\ + \n \$RmDir \$DirName;\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global CommitBrief;\r\ + \n :global IfThenElse;\r\ + \n :local Resource [ /system/resource/get ];\r\ + \n :return (\"User-Agent: Mikrotik/\" . \$Resource->\"version\" . \" \" .\ + \_\$Resource->\"architecture-name\" . \\\r\ + \n \" \" . \$Caller . \"/Fetch (\" . \$GlobalScriptsUrl . \"; \" . [ \$\ + CommitBrief ] . \")\");\r\ + \n}\r\ + \n\r\ + \n:set ScriptInstallUpdate do={ :onerror Err {\r\ + \n :local Scripts [ :toarray \$1 ];\r\ + \n :local NewComment [ :tostr \$2 ];\r\ + \n :global InitSetup;\r\ + \n\r\ + \n :global CommitId;\r\ + \n :global ScriptUpdatesCRLF;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global CertificateAvailable;\r\ + \n :global CheckSumsVerify;\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SumsDirAndFileName;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global EitherOr;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global Grep;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global RequiredRouterOS;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global ValidateSyntax;\r\ + \n :global CommentsInScripts;\r\ + \n\r\ + \n :if ([ \$CertificateAvailable \"Root YE\" \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, trying wit\ + hout.\");\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=\$Scripts do={\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \r\ + \n \$LogPrint info \$0 (\"Adding new script: \" . \$Script);\r\ + \n /system/script/add name=\$Script owner=\$Script source=\"#!rsc by \ + Vados\\n\" comment=\$NewComment;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local CommitIdBefore \$CommitId;\r\ + \n :local GlobalConfVersionBefore \$GlobalConfVersion;\r\ + \n :local ReloadGlobal false;\r\ + \n :local DeviceMode [ /system/device-mode/get ];\r\ + \n\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSums ({});\r\ + \n :do {\r\ + \n :local Url (\$GlobalScriptsUrl . \$SumsDirAndFileName . \$GlobalScr\ + iptsUrlSuffix);\r\ + \n \$LogPrint debug \$0 (\"Fetching checksums from url: \" . \$Url);\ + \r\ + \n :set CheckSums [ :deserialize from=json ([ /tool/fetch check-certi\ + ficate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url output\ + =user as-value ]->\"data\") ];\r\ + \n } on-error={ \$LogPrint warning \$0 (\"Err = \" . \$Err); }\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vado\ + s\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :local ScriptInfo [ \$ParseKeyValueStore (\$ScriptVal->\"comment\") \ + ];\r\ + \n :local SourceNew;\r\ + \n\r\ + \n :foreach Scheduler in=[ /system/scheduler/find where on-event~(\"\\\ + \\b\" . \$ScriptVal->\"name\" . \"\\\\b\") ] do={\r\ + \n :local SchedulerVal [ /system/scheduler/get \$Scheduler ];\r\ + \n :if (\$ScriptVal->\"policy\" != \$SchedulerVal->\"policy\") do={\r\ + \n \$LogPrint warning \$0 (\"Policies differ for script '\" . \$Scr\ + iptVal->\"name\" . \"' and its scheduler '\" . \$SchedulerVal->\"name\" . \ + \"'!\");\r\ + \n }\r\ + \n }\r\ + \n :do {\r\ + \n :if (\$ScriptInfo->\"ignore\" = true) do={\r\ + \n \$LogPrint debug \$0 (\"Ignoring script '\" . \$ScriptVal->\"nam\ + e\" . \"', as requested.\");\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSum (\$CheckSums->(\$ScriptVal->\"name\"));\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Scri\ + ptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :convert transform=md5 to=hex [ :tolf (\$ScriptVal->\"sou\ + rce\") ] ] = \$CheckSum) do={\r\ + \n \$LogPrint debug \$0 (\"Checksum for script '\" . \$ScriptVal-\ + >\"name\" . \"' matches, ignoring.\");\r\ + \n :error true;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len (\$ScriptInfo->\"certificate\") ] > 0) do={\r\ + \n :if ([ \$CertificateAvailable (\$ScriptInfo->\"certificate\") \"\ + fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, tryi\ + ng without.\");\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n :local BaseUrl [ \$EitherOr (\$ScriptInfo->\"base-url\") \$Globa\ + lScriptsUrl ];\r\ + \n :local UrlSuffix [ \$EitherOr (\$ScriptInfo->\"url-suffix\") \$G\ + lobalScriptsUrlSuffix ];\r\ + \n :local Url (\$BaseUrl . \$ScriptVal->\"name\" . \".rsc\" . \$Url\ + Suffix);\r\ + \n \$LogPrint warning \$0 (\"Fetching script '\" . (\$ScriptVal->\"\ + name\") . \"' from url: \" . \$Url);\r\ + \n :local Result [ /tool/fetch check-certificate=yes-without-crl \\\ + \r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url outp\ + ut=user as-value ];\r\ + \n :if (\$Result->\"status\" = \"finished\") do={\r\ + \n :set SourceNew [ :tolf (\$Result->\"data\") ];\r\ + \n } \r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching script '\" . \$ScriptV\ + al->\"name\" . \"': \" . \$Err);\r\ + \n :if (\$Err != \"Fetch failed with status 404\") do={\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$ScriptVal->\"source\" = \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Removing dummy. Typo on installation\ + \?\");\r\ + \n /system/script/remove \$Script;\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Sc\ + riptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :len \$CheckSum ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Added the script manually\? Skip u\ + pdates with 'ignore=true' in comment.\");\r\ + \n }\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$SourceNew ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"No update for script '\" . (\$ScriptVal-\ + >\"name\") . \"'.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local SourceCRLF [ :tocrlf \$SourceNew ];\r\ + \n :if (\$InitSetup != true && ((\$ScriptVal->\"name\") != \"AM-Globa\ + lConfig\" || (\$ScriptVal->\"name\") != \"AM-GlobalFunc\")) do={\r\ + \n :if (\$SourceNew = (\$ScriptVal->\"source\") || \$SourceCRLF = (\ + \$ScriptVal->\"source\")) do={\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\") \ + . \"' source did not change. End of lines set to CRLF.\");\r\ + \n if (\$ScriptUpdatesCRLF = false) do={\r\ + \n :put [ :tolf \$SourceNew ];\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\"\ + ) . \"' source update end of lines to LF.\");\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([ :pick \$SourceNew 0 14 ] != \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Looks like new script '\" . \$ScriptVa\ + l->\"name\" . \"' is not valid (missing shebang = '\$shebang') Ignoring!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if (\$CommentsInScripts = true) do={\r\ + \n :local CommentLine [ \$Grep \$SourceNew (\"\\23 Script comment:\ + \_\") ];\r\ + \n :if ([ :len \$CommentLine ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"The search in new script '\" . (\$Scr\ + iptVal->\"name\") . \"' for comment in script body, is not found result Ig\ + noring!\");\r\ + \n :error false;\r\ + \n } else={\r\ + \n :if ([ :len (\$ScriptVal->\"comment\")] = 0 || [ :len (\$Scri\ + ptVal->\"comment\")] != [ :pick \$CommentLine ([ :find \$CommentLine \":\"\ + ] + 2) [ :len \$CommentLine] ]) do={\r\ + \n \$LogPrint debug \$0 (\"Exsiting comment for script '\" . (\ + \$ScriptVal->\"name\") . \"' is '\" . (\$ScriptVal->\"comment\") . \"'.\")\ + ;\r\ + \n :set (\$ScriptVal->\"comment\") [ :pick \$CommentLine ([ :f\ + ind \$CommentLine \":\"] + 2) [ :len \$CommentLine] ];\r\ + \n \$LogPrint debug \$0 (\"New comment (\" . (\$ScriptVal->\"c\ + omment\") . \") for script '\" . (\$ScriptVal->\"name\") . \"' has been ad\ + ded!\");\r\ + \n } else={\r\ + \n \$LogPrint debug \$0 (\"Comment for script '\" . (\$ScriptV\ + al->\"name\") . \"' did not change.\");\r\ + \n :error false;\r\ + \n }\r\ + \n } \r\ + \n }\r\ + \n\r\ + \n :local RequiredROS ([ \$ParseKeyValueStore [ \$Grep \$SourceNew (\ + \"\\23 requires RouterOS, \") ] ]->version);\r\ + \n :if ([ \$RequiredRouterOS \$0 [ \$EitherOr \$RequiredROS \"0.0\" ]\ + \_false ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires RouterOS \" . \\\r\ + \n \$RequiredROS . \", which is not met by your installation. I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :local RequiredDM [ \$ParseKeyValueStore [ \$Grep \$SourceNew (\"\ + \\23 requires device-mode, \") ] ];\r\ + \n :local MissingDM ({});\r\ + \n :foreach Feature,Value in=\$RequiredDM do={\r\ + \n :if ([ :typeof (\$DeviceMode->\$Feature) ] = \"bool\" && (\$Devi\ + ceMode->\$Feature) = false) do={\r\ + \n :set MissingDM (\$MissingDM, \$Feature);\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len \$MissingDM ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires disabled \" . \\\r\ + \n \"device-mode features (\" . [ :tostr \$MissingDM ] . \"). I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ValidateSyntax \$SourceNew ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Syntax validation for script '\" . (\$\ + ScriptVal->\"name\") . \"' failed! Ignoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n \r\ + \n :log info (\"Updating script: \" . (\$ScriptVal->\"name\") . \" Sc\ + ript comment: \" . (\$ScriptVal->\"comment\"));\r\ + \n\r\ + \n /system/script/set owner=(\$ScriptVal->\"name\") comment=(\$Script\ + Val->\"comment\") \\\r\ + \n source=[ \$IfThenElse (\$ScriptUpdatesCRLF = true) \$SourceCRL\ + F \$SourceNew ] \$Script;\r\ + \n :if (\$ScriptVal->\"name\" = \"AM-GlobalConfig\" || \\\r\ + \n \$ScriptVal->\"name\" = \"AM-GlobalFunc\" || \\\r\ + \n \$ScriptVal->\"name\" ~ (\"^(AM-GlobalFunc\\\\.d|mod)/.\")) d\ + o={\r\ + \n :set ReloadGlobal true;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n :if (\$ReloadGlobal = true) do={\r\ + \n \$LogPrint info \$0 (\"Reloading global configuration and functions.\ + \");\r\ + \n :onerror Err {\r\ + \n :global InitSetup (a);\r\ + \n /system/script {run AM-GlobalConfig; run AM-GlobalFunc;};\r\ + \n } do={\$LogPrint error \$0 (\"Reloading global configuration and fun\ + ctions failed! \" . \$Err)}\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore > \$GlobalConfVersion) do={\r\ + \n \$LogPrint warning \$0 (\"The configuration version decreased from \ + \" . \\\r\ + \n \$GlobalConfVersionBefore . \" to \" . \$GlobalConfVersion . \\\r\ + \n \". Installed an older version\?\");\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore < \$GlobalConfVersion) do={\r\ + \n :global GlobalConfChanges;\r\ + \n :global GlobalConfMigration;\r\ + \n :local ChangeLogCode;\r\ + \n :if ([ :len \$ChangeLogCode ] > 0) do={\r\ + \n :if ([ \$ValidateSyntax \$ChangeLogCode ] = true) do={\r\ + \n :onerror Err {\r\ + \n [ :parse \$ChangeLogCode ];\r\ + \n } do={\$LogPrint warning \$0 (\"The changelog failed to run: \" \ + . \$Err)}\r\ + \n } else={\$LogPrint warning \$0 (\"The changelog failed syntax vali\ + dation!\")}\r\ + \n }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Migration (\$GlobalConfMigration->[ :tostr \$I ]);\r\ + \n :do {\r\ + \n :if ([ :typeof \$Migration ] != \"str\") do={\r\ + \n \$LogPrint debug \$0 (\"Migration code for change \" . \$I .\ + \_\" is not available.\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$ValidateSyntax \$Migration ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Migration code for change \" . \$I\ + \_. \" failed syntax validation!\");\r\ + \n :error false}\r\ + \n \$LogPrint info \$0 (\"Applying migration for change \" . \$I \ + . \": \" . \$Migration);\r\ + \n :onerror Err {\r\ + \n [ :parse \$Migration ];\r\ + \n } do={\$LogPrint warning \$0 (\"Migration code for change \" .\ + \_\$I . \" failed to run: \" . \$Err)}\r\ + \n } on-error={ }\r\ + \n }\r\ + \n }\r\ + \n :local NotificationMessage (\"The configuration version on \" . \$Id\ + entity . \" increased \" . \\\r\ + \n \"to \" . \$GlobalConfVersion . \", current configuration may nee\ + d modification. \" . \\\r\ + \n \"Please review and update global-config-overlay, then re-run glo\ + bal-config.\");\r\ + \n \$LogPrint info \$0 (\$NotificationMessage);\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nChanges:\ + \");\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Change (\$GlobalConfChanges->[ :tostr \$I ]);\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n \" . \\\ + \r\ + \n [ \$SymbolForNotification \"pushpin\" \"*\" ] . \$Change);\r\ + \n \$LogPrint info \$0 (\"Change \" . \$I . \": \" . \$Change);\r\ + \n }\r\ + \n } else={:set NotificationMessage (\$NotificationMessage . \"\\n\\nNe\ + ws and changes are not available.\")}\r\ + \n\r\ + \n :set GlobalConfChanges;\r\ + \n :set GlobalConfMigration;\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n\r\ + \n# load modules\r\ + \n:foreach Script in=[ /system/script/find where name ~ \"^(global-functio\ + ns\\\\.d|mod)/.\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :if ([ \$ValidateSyntax (\$ScriptVal->\"source\") ] = true) do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' f\ + ailed to run: \" . \$Err);\r\ + \n }\r\ + \n } else={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' fai\ + led syntax validation, skipping.\");\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# Add and fix global scheduler\r\ + \n:put \"Add or/and fix Global scheduler...\";\r\ + \n:local OnEvent \"/system/script { run AM-GlobalConfig; run AM-GlobalFunc\ + ; }\";\r\ + \n:local Comment \"Every Day Set Global Environment Variables\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-SetGlobalEnv\" ] ] \ + = 0) do={\r\ + \n /system/scheduler/add name=\"AM-SetGlobalEnv\" comment=\$Comment on-ev\ + ent=\$OnEvent start-time=startup;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" comment ] != \$Comment)\ + \_do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" comment=\$Comment;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" on-event ] != \$OnEvent\ + ) do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" on-event=\$OnEvent;\r\ + \n}\r\ + \n# Add Update Script scheduler\r\ + \n:put \"Add or/and fix Update Script scheduler\";\r\ + \n:set OnEvent \":global ScriptInstallUpdate; \\\$ScriptInstallUpdate;\";\ + \r\ + \n:set Comment \"Every Day Check For Update Scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-ScriptInstallUpdate\ + \" ] ] = 0) do={\r\ + \n/system/scheduler/add name=\"AM-ScriptInstallUpdate\" comment=\$Comment \ + start-time=startup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady;\r\ + \n :retry { :if (\$GlobalConfReady != true) do={ :error (\"Global configs\ + \_not ready.\"); }; } delay=100ms max=5;\r\ + \n\r\ + \n:log warning (\"This script \$ScriptName Loaded \" . \\\r\ + \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ + \") ] . \\\r\ + \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ + \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\r\ + \n # signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\r\ + \n\r\ + \n:log info (\$0 . \"Global configs ready!\");\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n}\r\ + \n" +add comment="download, import and update firewall address-lists" \ + dont-require-permissions=no name=AM-FwAddrLists owner=AM-FwAddrLists \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-FwAddrLists\r\ + \n# Script comment: download, import and update firewall address-lists\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# https://ros.vados.ru/doc/fw-addr-lists.md\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :local ListsDirName (\"fw-addr-lists.d/\" . [ /system identity get nam\ + e ] . \"/\");\r\ + \n :local ListsUrl (\$GlobalScriptsUrl . \$ListsDirName);\r\ + \n :local ListsIndex \"index.lst\";\r\ + \n :local AddrListsTimeOut 1d;\r\ + \n :local CheckCerts false;\r\ + \n\r\ + \n :global CertificateAvailable;\r\ + \n :global EitherOr;\r\ + \n :global FetchHugeFiles;\r\ + \n :global HumanReadableNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global NetMask4;\r\ + \n :global NetMask6;\r\ + \n :global ScriptLock;\r\ + \n \r\ + \n :local FindDelim do={\r\ + \n :local ValidChars \"0123456789.:/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi\ + jklmnopqrstuvwxyz-\";\r\ + \n :for I from=0 to=[ :len \$1 ] do={\r\ + \n :if ([ :typeof [ :find \$ValidChars [ :pick (\$1 . \" \") \$I ] ] \ + ] != \"num\") do={\r\ + \n :return \$I;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local GetBranch do={\r\ + \n :global EitherOr;\r\ + \n :return [ :pick [ :convert transform=md5 to=hex [ :pick \$1 0 [ \$Ei\ + therOr [ :find \$1 \"/\" ] [ :len \$1 ] ] ] ] 0 2 ];\r\ + \n }\r\ + \n \r\ + \n :if ([ \$ScriptLock \$ScriptName ] = false) do={\r\ + \n :set ExitOK true;\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local ListComment (\"managed by \" . \$ScriptName);\r\ + \n :local Url (\$ListsUrl . \$ListsIndex);\r\ + \n :local tmpIndex false;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$tmpIndex = false) do={\r\ + \n :set tmpIndex [ :tolf [ \$FetchHugeFiles \$ScriptName \$Url \$Chec\ + kCerts ] ];\r\ + \n :if (\$tmpIndex = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list \ + index, \" . \$I . \". try from: \" . \$Url);\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :if (\$tmpIndex = false) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list inde\ + x from: \" . \$Url);\r\ + \n :set tmpIndex \"\";\r\ + \n }\r\ + \n :local ReadFile (\"tmpfs/\" .\$tmpIndex);\r\ + \n :local filebody [/file/get \$ReadFile contents];\r\ + \n:foreach fwList in=[:deserialize \$ReadFile delimiter=\"\\n\" from=dsv o\ + ptions=dsv.plain] do={\r\ + \n :log error \$fwList;\r\ + \n}\r\ + \n\r\ + \n\r\ + \n :foreach List in=[ :deserialize \$tmpIndex delimiter=\"\\n\" from=dsv \ + options=dsv.plain ] do={\r\ + \n :set List (\$List->0);\r\ + \n :local ListName;\r\ + \n :local Delim [ \$FindDelim \$List ];\r\ + \n :if (\$Delim = 0) do={ :set List \"\"; };\r\ + \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ + \_. \$List);\r\ + \n :if ([ :len \$List ] = 0) do={\r\ + \n :log error (\$ScriptName . \" Failed parsing address-list index en\ + try: \" . \$List);\r\ + \n } else={\r\ + \n :set ListName [ :pick \$List 0 \$Delim ];\r\ + \n }\r\ + \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ + \_. \$ListName . \" - Ok.\");\r\ + \n :local ListUrl (\$ListsUrl . \$ListName);\r\ + \n :local CntAdd 0;\r\ + \n :local CntRenew 0;\r\ + \n :local CntRemove 0;\r\ + \n :local IPv4Addresses ({});\r\ + \n :local IPv6Addresses ({});\r\ + \n :local Failure false;\r\ + \n :local Data false;\r\ + \n :local TimeOut \$AddrListTimeOut;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data [ :tolf [ \$FetchHugeFiles \$ScriptName \$ListUrl \$Ch\ + eckCerts ] ];\r\ + \n :if (\$Data = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\ + \" . \$ListName . \"', \" . \$I . \". try from: \" . \$ListUrl);\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data \"\";\r\ + \n :set Failure true;\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\" . \ + \$ListName . \"' from: \" . \$ListUrl);\r\ + \n } else={\r\ + \n :log debug (\$ScriptName . \" Downloaded \" . [ \$HumanReadableNum\ + \_[ :len \$Data ] 1024 ] . \"B for list '\" . \$ListName . \"' from: \" . \ + \$ListUrl);\r\ + \n }\r\ + \n\r\ + \n :foreach Line in=[ :deserialize \$Data delimiter=\"\\n\" from=dsv op\ + tions=dsv.plain ] do={\r\ + \n :set Line (\$Line->0);\r\ + \n :local Address;\r\ + \n :if ([ :pick \$Line 0 1 ] = \"{\" && [ :pick \$Line ([ :len \$Line\ + \_] - 1) ] = \"}\") do={\r\ + \n :do {\r\ + \n :set Address [ :tostr ([ :deserialize from=json \$Line ]->\"ci\ + dr\") ];\r\ + \n } on-error={ }\r\ + \n } else={\r\ + \n :set Address ([ :pick \$Line 0 [ \$FindDelim \$Line ] ] . (\$L\ + ist->\"cidr\"));\r\ + \n }\r\ + \n :do {\r\ + \n :local Branch;\r\ + \n :if (\$Address ~ \"^[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}\\\\\ + .[0-9]{1,3}(/[0-9]{1,2})\?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 32;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address ]\ + \_];\r\ + \n :set Address [ :tostr (([ :toip \$Net ] & [ \$NetMask4 \$CID\ + R ]) . [ \$IfThenElse (\$CIDR < 32) (\"/\" . \$CIDR) ]) ];\r\ + \n }\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[0-9a-zA-Z]*:[0-9a-zA-Z:\\\\.]+(/[0-9]{1,3})\ + \?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 128;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip6 [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address ]\ + \_];\r\ + \n }\r\ + \n :set Address (([ :toip6 \$Net ] & [ \$NetMask6 \$CIDR ]) . \"/\ + \" . \$CIDR);\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[\\\\.a-zA-Z0-9-]+\\\\.[a-zA-Z]{2,}\\\$\") d\ + o={\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n \r\ + \n\r\ + \n :foreach Entry in=[ /ip/firewall/address-list/find where \\\r\ + \n list=\$ListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ip/firewall/address-list/get \$Entry address ];\ + \r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log warning (\$ScriptName . \" Renewing IPv4 address \" . \$Add\ + ress . \\\r\ + \n \" in list '\" . \$ListName . \"' with \" . \$TimeOut . \".\ + \");\r\ + \n /ip/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log warning (\$ScriptName . \" Removing IPv4 address \" . \$A\ + ddress . \\\r\ + \n \" from list '\" . \$ListName . \".\");\r\ + \n /ip/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach Entry in=[ /ipv6/firewall/address-list/find where \\\r\ + \n list=\$ListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ipv6/firewall/address-list/get \$Entry address ]\ + ;\r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log warning (\$ScriptName . \" Renewing IPv6 address \" . \$Add\ + ress . \\\r\ + \n \" in list '\" . \$ListName . \"' with \" . \$TimeOut . \".\ + \");\r\ + \n /ipv6/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log warning (\$ScriptName . \" Removing IPv6 address \" . \$A\ + ddress . \\\r\ + \n \" from list '\" . \$ListName . \".\");\r\ + \n /ipv6/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv4Addresses do={\r\ + \n :log warning (\$ScriptName . \" Handling branch: \" . \$BranchName\ + );\r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log warning (\$ScriptName . \" Adding IPv4 address \" . \$Addre\ + ss . \\\r\ + \n \" to list '\" . \$ListName . \"' with \" . \$Timeout . \".\ + \");\r\ + \n :onerror Err {\r\ + \n /ip/firewall/address-list/add list=\$ListName comment=\$ListCo\ + mment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv4 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$ListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv6Addresses do={\r\ + \n :log warning (\$ScriptName . \" Handling branch: \" . \$BranchName\ + );\r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log warning (\$ScriptName . \" Adding IPv6 address \" . \$Addre\ + ss . \\\r\ + \n \" to list '\" . \$ListName . \"' with \" . \$Timeout . \".\ + \");\r\ + \n :onerror Err {\r\ + \n /ipv6/firewall/address-list/add list=\$ListName comment=\$List\ + Comment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv6 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$ListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :log info (\$ScriptName . \" list: \" . \$ListName . \\\r\ + \n \" (\" . [ \$HumanReadableNum (\$CntAdd + \$CntRenew) 1000 ] . \ + \")\" . \\\r\ + \n \" -- added: \" . [ \$HumanReadableNum \$CntAdd 1000 ] . \\\r\ + \n \" - renewed: \" . [ \$HumanReadableNum \$CntRenew 1000 ] . \\\r\ + \n \" - removed: \" . [ \$HumanReadableNum \$CntRemove 1000 ]);\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ + \n}\r\ + \n" +add comment=\ + "Lookup IP addresses for RKN list and add them to firewall address-list" \ + dont-require-permissions=no name=AM-RKN-dnsLookup owner=AM-RKN-dnsLookup \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-RKN-dnsLookup\r\ + \n# Script comment: Lookup IP addresses for RKN list and add them to firew\ + all address-list\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# Script description: This script is intended to be run periodically, e.\ + g. once a day, to update the IP addresses in the firewall address-list bas\ + ed on the RKN list.\r\ + \n# It resolves the domain names in the RKN list and a\ + dds the corresponding IP addresses to the specified firewall address-list.\ + \r\ + \n# The script also handles CNAME records by following\ + \_them until it finds A records.\r\ + \n# Usage:\r\ + \n# /system/script { run AM-RKN-dnsLookup; }\r\ + \n:local ScriptName [ :jobname ];\r\ + \n\r\ + \n:global dnsLookupReady false;\r\ + \n:if ([:typeof \$dnsLookupReady] != \"boolean\") do={ :set dnsLookupReady\ + \_true; }\r\ + \nwhile (!\$dnsLookupReady) do={ :nothing; }\r\ + \n:set dnsLookupReady false;\r\ + \n\r\ + \n:local arrRKN {\r\ + \n \"telegra.ph\"\r\ + \n \"grani.ru\"\r\ + \n \"xhamster.com\"\r\ + \n \"kasparov.ru\"\r\ + \n \"lostfilm.tv\"\r\ + \n \"rutracker.org\"\r\ + \n \"lurkmore.to\"\r\ + \n \"dou.ua\"\r\ + \n \"youporn.com\"\r\ + \n \"pornolab.net\"\r\ + \n \"crimerussia.com\"\r\ + \n \"telegram.org\"\r\ + \n \"api.telegram.org\"\r\ + \n \"telegram.me\"\r\ + \n \"t.me\";}\r\ + \n\r\ + \n:local ListRKN \"FuckRKN\";\r\ + \n:local ListComment (\"ListRKN managed by \" . \$ScriptName);\r\ + \n:foreach aListItem in=[/ip/firewall/address-list find list=\$ListRKN] do\ + ={\r\ + \n /ip firewall address-list remove \$aListItem;\r\ + \n}\r\ + \n:foreach aItem in=\$arrRKN do={\r\ + \n :do {\r\ + \n :resolve \$aItem;\r\ + \n } on-error={\r\ + \n :log error \"dns resolve failure [ ip - resolve ip ]\";\r\ + \n }\r\ + \n :foreach dnsRecord in=[/ip dns cache all find where (name=\$aItem)] \ + do={\r\ + \n :if ([/ip dns cache all get \$dnsRecord type]=\"A\") do={\r\ + \n :local newAddress [/ip dns cache all get \$dnsRecord data];\ + \r\ + \n :do {\r\ + \n /ip firewall address-list add list=\$ListRKN address=\$n\ + ewAddress comment=\$aItem;\r\ + \n } on-error={\r\ + \n :log error \"error when adding ip to list: \$newAddress\ + \";\r\ + \n }\r\ + \n }\r\ + \n :if ([/ip dns cache all get \$dnsRecord type]=\"CNAME\") do={\r\ + \n :local cname;\r\ + \n :local nextCname;\r\ + \n :set cname [/ip dns cache all find where (name=\$aItem && ty\ + pe=\"CNAME\")];\r\ + \n :set nextCname [/ip dns cache all find where (name=[/ip dns \ + cache all get \$cname data] && type=\"CNAME\")];\r\ + \n :while (\$nextCname != \"\") do={\r\ + \n :set cname \$nextCname;\r\ + \n :set nextCname [/ip dns cache all find where (name=[/ip \ + dns cache all get \$cname data] && type=\"CNAME\")];\r\ + \n }\r\ + \n :foreach aRecord in=[/ip dns cache all find where (name=[/ip\ + \_dns cache all get \$cname data] && type=\"A\")] do={\r\ + \n :do {\r\ + \n /ip firewall address-list add list=\$ListRKN address\ + =[/ip dns cache all get \$aRecord data] comment=\$aItem;\r\ + \n } on-error={\r\ + \n :log error \"error when adding ip to list: \$newAddr\ + ess\";\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n :log error (\$ScriptName . \"System Scheduler for script: \" . \$Scri\ + ptName . \" is NOT SET! Fix It Now!\");\r\ + \n /system/scheduler/add name=\$ScriptName on-event=\"/system/script { \ + run \$ScriptName; }\" comment=\"Update RKN DNS Looup\" interval=00:20:00 p\ + olicy=\"ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon\"\ + \_start-time=startup;\r\ + \n }\r\ + \n:set dnsLookupReady true;\r\ + \ndelay 5s; \r\ + \n:global dnsLookupReady (a);\r\ + \n" +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +/interface bridge +add admin-mac=48:8F:5A:8E:1A:BC auto-mac=no mlag-peer-port="ether1 - Unet" \ + name=Bridge-LAN port-cost-mode=short +/interface wireless +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(18dBm), SSID: vados, local forwarding +set [ find default-name=wlan1 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 2ghz-b/g/n basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps basic-rates-b=\ + 1Mbps,2Mbps,5.5Mbps,11Mbps channel-width=20/40mhz-XX country=belarus \ + disabled=no frequency=auto hw-protection-mode=rts-cts mode=ap-bridge \ + rate-set=configured skip-dfs-channels=10min-cac ssid=vados \ + wds-default-bridge=Bridge-LAN wds-mode=dynamic-mesh wireless-protocol=\ + 802.11 wmm-support=enabled wps-mode=disabled +# managed by CAPsMAN +# channel: 5260/20-Ceee/ac/DP(18dBm), SSID: vados5g, local forwarding +set [ find default-name=wlan2 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 5ghz-a/n/ac basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps channel-width=\ + 20/40/80mhz-XXXX country=belarus disabled=no frequency=auto \ + hw-protection-mode=rts-cts mode=ap-bridge rate-set=configured \ + skip-dfs-channels=10min-cac ssid=vados5g wds-default-bridge=Bridge-LAN \ + wds-mode=dynamic-mesh wireless-protocol=802.11 wmm-support=enabled \ + wps-mode=disabled +/interface wireless nstreme +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(18dBm), SSID: vados, local forwarding +set wlan1 enable-nstreme=yes +# managed by CAPsMAN +# channel: 5260/20-Ceee/ac/DP(18dBm), SSID: vados5g, local forwarding +set wlan2 enable-nstreme=yes +/caps-man manager +set enabled=yes +/caps-man provisioning +add action=create-dynamic-enabled hw-supported-modes=gn master-configuration=\ + cfg-2ghz name-format=prefix-identity name-prefix=2ghz +add action=create-dynamic-enabled hw-supported-modes=ac master-configuration=\ + cfg-5ghz-ac name-format=prefix-identity name-prefix=5ghz-ac +add action=create-dynamic-enabled hw-supported-modes=an master-configuration=\ + cfg-5ghz-an name-format=prefix-identity name-prefix=5ghz-an +/certificate settings +set builtin-trust-store="ipsec,wpa-eap,capsman,fetch,sstp,ovpn,radius,userman,\ + openflow,tr069,dot1x,dns,www,api,reverse-proxy" crl-store=system +/interface bridge port +add bridge=Bridge-LAN disabled=yes interface="ether1 - Unet" +add bridge=Bridge-LAN interface=ether2 +add bridge=Bridge-LAN interface=ether3 +add bridge=Bridge-LAN interface=ether4 +add bridge=Bridge-LAN interface=ether5 +add bridge=Bridge-LAN interface=wlan2 +add bridge=Bridge-LAN interface=wlan1 +/ip firewall connection tracking +set udp-timeout=10s +/ip neighbor discovery-settings +set discover-interface-list=LAN +/ip settings +set max-neighbor-entries=8192 secure-redirects=no +/ipv6 settings +set allow-fast-path=no disable-ipv6=yes disable-link-local-address=yes \ + forward=no max-neighbor-entries=8192 +/interface detect-internet +set detect-interface-list=WAN internet-interface-list=WAN lan-interface-list=\ + LAN wan-interface-list=WAN +/interface l2tp-server server +set authentication=mschap2 use-ipsec=yes +/interface list member +add interface="ether1 - Unet" list=WAN +add interface=Bridge-LAN list=LAN +/interface ovpn-server server +add auth=sha1,md5 mac-address=FE:82:A5:78:8E:84 name=ovpn-server1 +/interface wifi configuration +add channel=2G-AX datapath=xs-DataPath disabled=no mode=ap name=2G-AX \ + security=sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=2G-N datapath=xs-DataPath disabled=no mode=ap name=2G-N security=\ + sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=5G-AC datapath=xs-DataPath disabled=no mode=ap name=5G-AC \ + security=sec5G security.authentication-types="" .ft=yes .ft-over-ds=yes \ + ssid=vados +add channel=2G-G datapath=xs-DataPath disabled=no mode=ap name=2G-G security=\ + sec2g security.authentication-types="" .ft=yes .ft-over-ds=yes ssid=vados +/interface wifi datapath +add bridge=Bridge-LAN disabled=no interface-list=all name=xs-DataPath +/interface wireguard peers +add allowed-address=10.8.0.2/32,0.0.0.0/0 client-allowed-address=0.0.0.0/0 \ + endpoint-address=89.110.101.17 endpoint-port=29185 interface=WG name=\ + MikroVados persistent-keepalive=10s public-key=\ + "64Y25EUZQQt8EIeAJYD8qWt+te8qvGEepnswdBgmzlY=" +/interface wireless cap +# +set bridge=Bridge-LAN caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-51B25E507D07 certificate=\ + CAP-488F5A8E1ABC discovery-interfaces=ether2 enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/ip address +add address=10.30.30.81/24 interface=Bridge-LAN network=10.30.30.0 +add address=10.8.0.2/24 interface=WG network=10.8.0.0 +/ip dhcp-client +add add-default-route=special-classless default-route-distance=2 \ + default-route-tables=main interface="ether1 - Unet" name=client1 \ + use-peer-dns=no +/ip dhcp-server +add add-arp=yes address-pool=dhcp always-broadcast=yes bootp-support=none \ + dhcp-option-set=domain-search-set interface=Bridge-LAN lease-time=10m \ + name=masterDHCP server-address=10.30.30.81 +/ip dhcp-server config +set accounting=no +/ip dhcp-server lease +add address=10.30.30.101 client-id=1:48:8f:5a:8e:ee:a8 mac-address=\ + 48:8F:5A:8E:EE:A8 server=masterDHCP +add address=10.30.30.107 client-id=1:f0:de:f1:91:d:1e mac-address=\ + F0:DE:F1:91:0D:1E server=masterDHCP +add address=10.30.30.83 client-id=1:0:80:77:ec:43:86 mac-address=\ + 00:80:77:EC:43:86 server=masterDHCP +add address=10.30.30.70 dhcp-option=domain-search-list,HostName \ + dhcp-option-set=HP1505n mac-address=00:1E:0B:1A:88:8D server=masterDHCP +add address=10.30.30.50 client-id=1:4:7c:16:36:f5:37 mac-address=\ + 04:7C:16:36:F5:37 server=masterDHCP +add address=10.30.30.71 client-id=1:10:2d:41:2c:20:c2 mac-address=\ + 10:2D:41:2C:20:C2 server=masterDHCP +add address=10.30.30.61 client-id=1:10:8:c1:81:59:5f mac-address=\ + 10:08:C1:81:59:5F server=masterDHCP +add address=10.30.30.72 client-id=1:10:38:1f:d2:5f:13 mac-address=\ + 10:38:1F:D2:5F:13 server=masterDHCP +add address=10.30.30.99 client-id=1:10:b1:df:e9:d0:d5 mac-address=\ + 10:B1:DF:E9:D0:D5 server=masterDHCP +add address=10.30.30.111 client-id=1:fe:2:52:be:3f:16 mac-address=\ + FE:02:52:BE:3F:16 server=masterDHCP +add address=10.30.30.92 client-id=1:d4:6d:6d:fd:e5:49 mac-address=\ + D4:6D:6D:FD:E5:49 server=masterDHCP +add address=10.30.30.93 client-id=1:7e:8b:1e:cb:b8:cb mac-address=\ + CC:42:10:12:46:94 server=masterDHCP +add address=10.30.30.94 client-id=1:50:cc:f8:85:96:a mac-address=\ + 50:CC:F8:85:96:0A server=masterDHCP +add address=10.30.30.82 client-id=1:e4:18:6b:58:34:ab mac-address=\ + E4:18:6B:58:34:AB server=masterDHCP +add address=10.30.30.75 client-id=1:0:27:15:41:97:a9 mac-address=\ + 00:27:15:41:97:A9 server=masterDHCP +add address=10.30.30.77 dhcp-option=HostName dhcp-option-set=StartLife1 \ + mac-address=C4:82:E1:03:49:10 server=masterDHCP +add address=10.30.30.73 client-id=1:10:38:1f:82:81:f2 mac-address=\ + 10:38:1F:82:81:F2 server=masterDHCP +add address=10.30.30.95 client-id=1:88:ae:dd:60:39:54 dhcp-option=HostName \ + dhcp-option-set=VADOS-NUC mac-address=88:AE:DD:60:39:54 server=masterDHCP +add address=10.30.30.98 client-id=1:c8:5b:76:d8:cc:bf dhcp-option=HostName \ + dhcp-option-set=VADOS-LEN mac-address=C8:5B:76:D8:CC:BF server=masterDHCP +add address=10.30.30.96 client-id=iPhone mac-address=4A:91:ED:0E:1F:39 \ + server=masterDHCP +add address=10.30.30.74 client-id=MiTV dhcp-option=HostName dhcp-option-set=\ + MiTV mac-address=20:72:A9:D3:34:36 server=masterDHCP +add address=10.30.30.30 dhcp-option=HostName dhcp-option-set=miller \ + mac-address=F0:75:5D:1E:5F:71 server=masterDHCP +add address=10.30.30.100 client-id=iVados dhcp-option=HostName \ + dhcp-option-set="=\"Client ID\"" mac-address=DE:4D:72:F3:1A:9F server=\ + masterDHCP +/ip dhcp-server network +add address=10.30.30.0/24 caps-manager=10.30.30.10 dhcp-option=\ + domain-search-list dhcp-option-set=domain-search-set dns-server=\ + 10.30.30.81 domain=WORKGROUP gateway=10.30.30.81 netmask=24 ntp-server=\ + 10.30.30.81,10.30.30.10 wins-server=10.30.30.95,10.30.30.98 +/ip dns +set allow-remote-requests=yes cache-max-ttl=1d doh-max-concurrent-queries=100 \ + doh-max-server-connections=20 servers=8.8.8.8,8.8.4.4 verify-doh-cert=yes +/ip dns static +add address=10.30.30.33 name=ros.vados.ru type=A +add address=10.30.30.95 name=vados-nuc type=A +add address=10.30.30.33 name=amster-nuc type=A +add address=10.30.30.33 comment=AMSTER name=amster.vados.ru type=A +add address=10.30.30.33 name=amster type=A +add address=10.30.30.33 name=amster-reg type=A +add address=10.30.30.33 name=mng.vados.ru type=A +add address=10.30.30.33 name=mgr.vados.ru type=A +add address=10.30.30.33 name=prt.vados.ru type=A +add address=10.30.30.33 name=reg.vados.ru type=A +add address=10.30.30.33 match-subdomain=yes name=mikrots.vados.ru type=A +add address=10.30.30.33 name=oxidized.vados.ru type=A +add address=8.8.4.4 comment="Google-dns IPv4 2" name=dns.google type=A +add address=8.8.8.8 comment="Google-dns IPv4 1" name=dns.google type=A +add address=10.30.30.30 comment=MILLER name=miller.vados.ru type=A +add address=10.30.30.30 name=MILLER-LEN type=A +add address=10.30.30.30 name=miller type=A +add address=1.0.0.1 comment="CloudFlare-doh IPv4 2" name=\ + security.cloudflare-dns.com type=A +add address=1.1.1.1 comment="CloudFlare-doh IPv4 1" name=\ + security.cloudflare-dns.com type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" name=dns.quad9.net \ + type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +add address=10.30.30.81 comment=LocalNet name=MikroVados type=A +add address=10.30.30.10 name=MikroNUC type=A +add address=10.30.30.86 name=MikroYellow type=A +add address=10.30.30.85 name=MikroMic type=A +add address=10.30.30.95 name=VADOS-NUC type=A +add address=10.30.30.98 name=VADOS-LEN type=A +add address=10.30.30.20 name=garage type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +/ip firewall address-list +add address=91.215.120.206 list=TRUSTED +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=10.30.30.100-255 list=KIDS +add address=8.8.4.0/24 list=YouTube +add address=8.8.8.0/24 list=YouTube +add address=8.34.208.0/20 list=YouTube +add address=8.35.192.0/20 list=YouTube +add address=23.236.48.0/20 list=YouTube +add address=23.251.128.0/19 list=YouTube +add address=34.0.0.0/15 list=YouTube +add address=34.2.0.0/16 list=YouTube +add address=34.3.0.0/23 list=YouTube +add address=34.3.3.0/24 list=YouTube +add address=34.3.4.0/24 list=YouTube +add address=34.3.8.0/21 list=YouTube +add address=34.3.16.0/20 list=YouTube +add address=34.3.32.0/19 list=YouTube +add address=34.3.64.0/18 list=YouTube +add address=34.4.0.0/14 list=YouTube +add address=34.8.0.0/13 list=YouTube +add address=34.16.0.0/12 list=YouTube +add address=34.32.0.0/11 list=YouTube +add address=34.64.0.0/10 list=YouTube +add address=34.128.0.0/10 list=YouTube +add address=35.184.0.0/13 list=YouTube +add address=35.192.0.0/14 list=YouTube +add address=35.196.0.0/15 list=YouTube +add address=35.198.0.0/16 list=YouTube +add address=35.199.0.0/17 list=YouTube +add address=35.199.128.0/18 list=YouTube +add address=35.200.0.0/13 list=YouTube +add address=35.208.0.0/12 list=YouTube +add address=35.224.0.0/12 list=YouTube +add address=35.240.0.0/13 list=YouTube +add address=57.140.192.0/18 list=YouTube +add address=64.15.112.0/20 list=YouTube +add address=64.233.160.0/19 list=YouTube +add address=66.22.228.0/23 list=YouTube +add address=66.102.0.0/20 list=YouTube +add address=66.249.64.0/19 list=YouTube +add address=70.32.128.0/19 list=YouTube +add address=72.14.192.0/18 list=YouTube +add address=74.125.0.0/16 list=YouTube +add address=104.154.0.0/15 list=YouTube +add address=104.196.0.0/14 list=YouTube +add address=104.237.160.0/19 list=YouTube +add address=107.167.160.0/19 list=YouTube +add address=107.178.192.0/18 list=YouTube +add address=108.59.80.0/20 list=YouTube +add address=108.170.192.0/18 list=YouTube +add address=108.177.0.0/17 list=YouTube +add address=130.211.0.0/16 list=YouTube +add address=136.22.160.0/20 list=YouTube +add address=136.22.176.0/21 list=YouTube +add address=136.22.184.0/23 list=YouTube +add address=136.22.186.0/24 list=YouTube +add address=142.250.0.0/15 list=YouTube +add address=146.148.0.0/17 list=YouTube +add address=152.65.208.0/22 list=YouTube +add address=152.65.214.0/23 list=YouTube +add address=152.65.218.0/23 list=YouTube +add address=152.65.222.0/23 list=YouTube +add address=152.65.224.0/19 list=YouTube +add address=162.120.128.0/17 list=YouTube +add address=162.216.148.0/22 list=YouTube +add address=162.222.176.0/21 list=YouTube +add address=172.110.32.0/21 list=YouTube +add address=172.217.0.0/16 list=YouTube +add address=172.253.0.0/16 list=YouTube +add address=173.194.0.0/16 list=YouTube +add address=173.255.112.0/20 list=YouTube +add address=192.158.28.0/22 list=YouTube +add address=192.178.0.0/15 list=YouTube +add address=193.186.4.0/24 list=YouTube +add address=199.36.154.0/23 list=YouTube +add address=199.36.156.0/24 list=YouTube +add address=199.192.112.0/22 list=YouTube +add address=199.223.232.0/21 list=YouTube +add address=207.223.160.0/20 list=YouTube +add address=208.65.152.0/22 list=YouTube +add address=208.68.108.0/22 list=YouTube +add address=208.81.188.0/22 list=YouTube +add address=208.117.224.0/19 list=YouTube +add address=209.85.128.0/17 list=YouTube +add address=216.58.192.0/19 list=YouTube +add address=216.73.80.0/20 list=YouTube +add address=216.239.32.0/19 list=YouTube +add address=2ip.ru list=Test +add address=157.240.247.174 list=Instagram +add address=46.53.178.107 list=Instagram +add address=179.60.195.174 list=Instagram +add address=157.240.205.174 list=Instagram +add address=31.13.24.0/21 list=Instagram +add address=31.13.64.0/18 list=Instagram +add address=45.64.40.0/22 list=Instagram +add address=66.220.144.0/20 list=Instagram +add address=69.63.176.0/20 list=Instagram +add address=69.171.224.0/19 list=Instagram +add address=74.119.76.0/22 list=Instagram +add address=103.4.96.0/22 list=Instagram +add address=129.134.0.0/16 list=Instagram +add address=157.240.0.0/16 list=Instagram +add address=173.252.64.0/18 list=Instagram +add address=179.60.192.0/22 list=Instagram +add address=185.60.216.0/22 list=Instagram +add address=204.15.20.0/22 list=Instagram +add address=157.240.200.63 list=Instagram +add address=185.60.219.63 list=Instagram +add address=129.134.31.12 list=Instagram +add address=66.81.203.132 list=Instagram +add address=185.89.218.12 list=Instagram +add address=31.13.66.63 list=Instagram +add address=84.15.65.162 list=Instagram +add address=68.66.224.28 list=Instagram +add address=157.240.253.63 list=Instagram +add address=83.174.11.224 list=Instagram +add address=157.240.9.52 list=Instagram +add address=157.240.252.174 list=Instagram +add address=157.240.195.63 list=Instagram +add address=31.13.71.52 list=Instagram +add address=57.144.110.192 list=Instagram +add address=157.240.252.17 list=Instagram +add address=84.15.66.97 list=Instagram +add address=217.168.6.33 list=Instagram +add address=31.13.83.52 list=Instagram +add address=157.240.241.63 list=Instagram +add address=129.134.30.12 list=Instagram +add address=185.89.219.12 list=Instagram +add address=157.240.252.10 list=Instagram +add address=157.240.201.63 list=Instagram +add address=66.81.203.197 list=Instagram +add address=179.60.195.52 list=Instagram +add address=66.81.203.7 list=Instagram +add address=216.40.34.41 list=Instagram +add address=157.240.202.63 list=Instagram +add address=157.240.229.63 list=Instagram +add address=157.240.252.63 list=Instagram +add address=31.13.72.53 list=Instagram +add address=124.108.16.224 list=Instagram +add address=157.240.205.63 list=Instagram +add address=92.46.37.96 list=Instagram +add address=157.240.247.63 list=Instagram +add address=157.240.234.63 list=Instagram +add address=157.240.235.63 list=Instagram +add address=87.245.208.97 list=Instagram +add address=216.58.192.0/19 list=Instagram +add address=209.85.128.0/17 list=Instagram +add address=198.105.240.0/20 list=Instagram +add address=173.194.0.0/16 list=Instagram +add address=172.217.0.0/16 list=Instagram +add address=142.250.0.0/15 list=Instagram +add address=108.177.0.0/17 list=Instagram +add address=87.245.197.140 list=Instagram +add address=74.125.0.0/16 list=Instagram +add address=64.233.160.0/19 list=Instagram +add address=157.240.0.1 list=Instagram +add address=157.240.238.63 list=Instagram +add address=157.240.238.174 list=Instagram +add address=157.240.0.63 list=Instagram +add address=157.240.224.63 list=Instagram +add address=157.240.224.174 list=Instagram +add address=157.240.251.36 list=Instagram +add address=157.240.253.12 list=Instagram +add address=157.240.253.35 list=Instagram +add address=157.240.238.13 list=Instagram +add address=157.240.238.56 list=Instagram +add address=157.240.238.175 list=Instagram +add address=57.144.112.141 list=Instagram +add address=157.240.251.60 list=Instagram +add address=157.240.251.128 list=Instagram +add address=157.240.238.5 list=Instagram +add address=157.240.253.13 list=Instagram +add address=157.240.253.5 list=Instagram +add address=157.240.238.2 list=Instagram +add address=157.240.238.37 list=Instagram +add address=157.240.251.5 list=Instagram +add address=157.240.251.34 list=Instagram +add address=57.144.112.1 list=Instagram +add address=157.240.238.54 list=Instagram +add address=129.134.26.123 list=Instagram +add address=157.240.252.3 list=Instagram +add address=31.13.84.4 list=Instagram +add address=157.240.224.12 list=Instagram +add address=157.240.238.4 list=Instagram +add address=157.240.0.13 list=Instagram +add address=3.33.139.32 list=Instagram +add address=157.240.0.35 list=Instagram +add address=157.240.238.14 list=Instagram +add address=157.240.238.60 list=Instagram +add address=57.144.112.145 list=Instagram +add address=157.240.251.35 list=Instagram +add address=151.101.84.159 list=Twitter +add address=pbs.twimg.com list=Twitter +add address=89.110.101.17 comment=VDSIna list=TRUSTED +add address=10.8.0.0/24 comment="WG VDSIna" list=TRUSTED +add address=ikus.pesc.ru comment=ikus.pesc.ru list=NoVdsina +add address=love.ru comment=love.ru list=NoVdsina +add address=gosuslugi.ru comment=gosuslugi.ru list=NoVdsina +add address=pochta.ru comment=pochta.ru list=NoVdsina +add address=vdsina.com list=NoVdsina +add address=vdsina.ru list=NoVdsina +add address=youla.ru list=NoVdsina +add address=kupiprodai.ru list=NoVdsina +add address=myip.ru list=Test +add address=geoip.co list=NoVdsina +add address=x.com list=Twitter +add address=facebook.com list=facebook +add address=fbcd.net list=facebook +add address=comp-lenta.ru list=NoVdsina +add address=128.85.102.70 comment=update.microsoft.com list=\ + windowsupdateslist +add address=wu-b-net.trafficmanager.net. comment=\ + ctldl.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=ctldl.windowsupdate.com.delivery.microsoft.com. comment=\ + ctldl.windowsupdate.com list=windowsupdateslist +add address=redir.update.msft.com.trafficmanager.net. comment=\ + update.microsoft.com list=windowsupdateslist +add address=geo.prod.do.dsp.trafficmanager.net. comment=\ + geo.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=13.74.139.29 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12437.d.akamaiedge.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=displaycatalog-rp.md.mp.microsoft.com.akadns.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=rp-consumer-prod-displaycatalog-geomap.trafficmanager.net. \ + comment=displaycatalog-rp.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=sls.update.microsoft.com. comment=slscr.update.microsoft.com \ + list=windowsupdateslist +add address=glb.sls.prod.dcat.dsp.trafficmanager.net. comment=\ + sls.update.microsoft.com list=windowsupdateslist +add address=fe3.delivery.mp.microsoft.com. comment=\ + fe3cr.delivery.mp.microsoft.com list=windowsupdateslist +add address=glb.cws.prod.dcat.dsp.trafficmanager.net. comment=\ + fe3.delivery.mp.microsoft.com list=windowsupdateslist +add address=fe2cr.update.msft.com.trafficmanager.net. comment=\ + fe2cr.update.microsoft.com list=windowsupdateslist +add address=download.windowsupdate.com.delivery.microsoft.com. comment=\ + download.windowsupdate.com list=windowsupdateslist +add address=wu-f-net.trafficmanager.net. comment=\ + download.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=tsfe.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=edge.ds-c7110-microsoft.global.dns.qwilted-cds.cqloud.com. \ + comment=9.au.download.windowsupdate.com list=windowsupdateslist +add address=52.158.227.125 comment=array812.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dspw65.akamai.net. comment=\ + download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.151.58.88 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net. \ + comment=licensing.mp.microsoft.com list=windowsupdateslist +add address=licensing-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-nlu-net.trafficmanager.net. comment=\ + star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.b.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-tlu-net.trafficmanager.net. comment=\ + star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=storeedgefd.xbetservices.akadns.net. comment=\ + storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net. \ + comment=storeedgefd.dsx.mp.microsoft.com.edgekey.net list=\ + windowsupdateslist +add address=e16646.dscg.akamaiedge.net. comment=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net list=\ + windowsupdateslist +add address=40.69.76.189 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=bg.microsoft.map.fastly.net. comment=\ + 3.au.download.windowsupdate.com list=windowsupdateslist +add list=windowsupdateslist +add address=40.69.75.33 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sf.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=cdp-f-ssl-tlu-net.trafficmanager.net. comment=\ + star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a2033.dscd.akamai.net. comment=\ + star.sb.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.138.242 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-nlu-net.trafficmanager.net. comment=\ + dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=1D.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-b-tlu-net.trafficmanager.net. comment=\ + 1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a122.dscg3.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=windowsupdateslist +add address=geover.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e10370.d.akamaiedge.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=52.232.182.21 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.95 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=a1683.dscd.akamai.net. comment=\ + dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net. \ + comment=collections.mp.microsoft.com list=windowsupdateslist +add address=a1847.dscd.akamai.net. comment=\ + wildcard.f.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.142.6 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=au.download.windowsupdate.com.edgesuite.net. comment=\ + 2.au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dscg3.akamai.net. comment=\ + au.download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.156.123.84 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.78.254 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=4.au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + 4.au.download.windowsupdate.com list=windowsupdateslist +add address=cl-glcb907925.gcdn.co. comment=\ + 4.au.download.windowsupdate.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.111 comment=array510.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.69.70.43 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com. \ + comment=tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=ts-frontend.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=40.69.75.248 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.74.84 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=sds.trafficmanager.net. comment=software-download.microsoft.com \ + list=windowsupdateslist +add address=40.69.74.80 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.175.242.182 comment=array804.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=dlc-shim.trafficmanager.net. comment=download.microsoft.com list=\ + windowsupdateslist +add address=e12671.dscd.akamaiedge.net. comment=\ + download.microsoft.com.edgekey.net list=windowsupdateslist +add address=20.187.55.34 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.231 comment=array513.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.222.13 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12358.d.akamaiedge.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-tlu-net.trafficmanager.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a1856.dspw65.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=52.167.164.252 comment=array506.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=13.74.137.54 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv501.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv501.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=collections-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=52.167.160.173 comment=array509.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.77.148 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.200.126 comment=array507.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.167.59 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.172 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=82.202.162.184 comment=comp-lenta.ru list=NoWG +add address=smtp.mail.me.com.akadns.net. comment=smtp.mail.me.com list=NoWG +add address=17.57.155.37 comment=smtp.mail.me.com.akadns.net list=NoWG +add address=smtp.mail.me.com comment=smtp.mail.me.com list=NoVdsina +add address=40.70.76.5 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.186.119 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.177.176.186 comment=array520.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.76.27 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.160.43 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.110 comment=array817.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.142.8 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.138.254 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.96 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.215 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.143.200 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.111 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.112 comment=array819.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.137.53 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.98 comment=array805.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.96 comment=array803.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.104 comment=array811.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.101 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.99 comment=array806.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.17 comment=array802.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.97 comment=array804.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.103 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.16 comment=array801.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.177 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.164.84 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.105 comment=array812.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.107 comment=array814.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.232.161.82 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.108 comment=array815.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.161.91 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.102 comment=array809.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.109 comment=array816.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.106 comment=array813.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.117 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.107 comment=array612.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.108 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.105 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.113 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.116 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.98 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.114 comment=array619.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.111 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.97 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.106 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.110 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.119 comment=array624.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.135 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.97 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.99 comment=array604.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.61 comment=array504.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.131 comment=array510.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.132 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.96 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.104 comment=array609.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.138 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.60 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.139 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.118 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.113 comment=array820.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.103 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.100 comment=array807.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.129 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.134 comment=array513.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.62 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.137 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.101 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.96 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.130 comment=array509.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.112 comment=array617.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.100 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.115 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.136 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=purchase.md.mp.microsoft.com.akadns.net. comment=\ + purchase.mp.microsoft.com list=windowsupdateslist +add address=e110219.a.akamaiedge.net. comment=\ + purchase.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=72.153.5.140 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.141 list=windowsupdateslist +add address=72.153.5.63 comment=array506.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.128 comment=array507.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.102 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=storesdk.xbetservices.akadns.net. comment=\ + storesdk.dsx.mp.microsoft.com list=windowsupdateslist +add address=e16646.g.akamaiedge.net. comment=\ + storesdk.dsx.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=software-download.microsoft.com.delivery.microsoft.com. comment=\ + software-download.microsoft.com list=windowsupdateslist +add address=download.prss.microsoft.com.akamaized.net. comment=\ + software-download.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.109 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.133 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=213.180.192.0/19 comment=YandexDisk list=NoVdsina +add address=87.250.250.50 comment=YandexDisk list=NoVdsina +add address=consumer-prod-bcfd-v7-afd.trafficmanager.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=purchase-europeeap.md.mp.microsoft.com.akadns.net. comment=\ + purchase.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=ne-az-conspurchase-mp.trafficmanager.net. comment=\ + purchase-europeeap.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=storeedgefd.dsx.mp.microsoft.com.edgekey.net. comment=\ + cdn.storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=star.f.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=a1996.dscd.akamai.net. comment=\ + wildcard.f.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=cp801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=glb.tas02.sls-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas02.sls.update.microsoft.com list=windowsupdateslist +add address=cp601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=star.sb.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sb.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.sf.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-ssl-nlu-net.trafficmanager.net. comment=\ + star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=tm-pifd-prod-gbl-weight.trafficmanager.net. comment=\ + paymentinstruments.mp.microsoft.com list=windowsupdateslist +add address=10.30.30.33 comment=NUC disabled=yes list=NoWG +add address=10.30.30.10 comment=MikroNUC list=NoWG +add address=89.110.101.17 comment=!!!VDSINA!!!! list=NoWG +add address=89.110.101.17 list=VPN-Server +add address=80.85.244.9 list=TRUSTED +add address=8.8.8.8 list=TRUSTED +add address=8.8.4.4 list=TRUSTED +add address=disc801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + disc801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=89.110.101.17 comment="!!!VDSina Server!!!" disabled=yes list=\ + NoVdsina +add address=149.154.164.13 comment=telegra.ph list=FuckRKN +add address=194.85.61.76 comment=grani.ru list=FuckRKN +add address=109.70.26.37 comment=grani.ru list=FuckRKN +add address=104.16.3.81 comment=xhamster.com list=FuckRKN +add address=104.16.4.81 comment=xhamster.com list=FuckRKN +add address=188.114.96.1 comment=lostfilm.tv list=FuckRKN +add address=188.114.97.1 comment=lostfilm.tv list=FuckRKN +add address=172.67.182.196 comment=rutracker.org list=FuckRKN +add address=104.21.32.39 comment=rutracker.org list=FuckRKN +add address=104.247.81.99 comment=lurkmore.to list=FuckRKN +add address=8.6.112.6 comment=dou.ua list=FuckRKN +add address=8.47.69.6 comment=dou.ua list=FuckRKN +add address=66.254.114.79 comment=youporn.com list=FuckRKN +add address=185.110.92.40 comment=pornolab.net list=FuckRKN +add address=185.110.92.41 comment=pornolab.net list=FuckRKN +add address=172.67.172.95 comment=crimerussia.com list=FuckRKN +add address=104.21.71.238 comment=crimerussia.com list=FuckRKN +add address=149.154.167.99 comment=telegram.org list=FuckRKN +add address=149.154.166.110 comment=api.telegram.org list=FuckRKN +/ip firewall filter +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=12h chain=input comment="block honeypot DNS" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input connection-state=new dst-port=53 \ + in-interface="ether1 - Unet" protocol=tcp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment=\ + "block honeypot ssh rdp winbox" connection-state=new dst-port=\ + 22,8291,2222 in-interface="ether1 - Unet" protocol=tcp src-address-list=\ + !TRUSTED +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot asterisk" \ + connection-state=new dst-port=5060 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=5d chain=input comment="block honeypot NTP" \ + connection-state=new dst-port=123 in-interface="ether1 - Unet" protocol=\ + udp src-address=!10.30.30.0/24 +add action=accept chain=input comment=\ + "accept NTP clients on local area network" dst-port=123 in-interface=\ + Bridge-LAN in-interface-list=LAN protocol=udp +add action=accept chain=input comment="accept WireGuard" dst-port=13231 \ + in-interface="ether1 - Unet" protocol=udp src-address-list=VPN-Server +add action=accept chain=input disabled=yes dst-port=443 in-interface=\ + "ether1 - Unet" protocol=tcp +add action=accept chain=output disabled=yes protocol=tcp src-port=443 +add action=fasttrack-connection chain=forward comment=\ + "FastTrack for non-VPN connections" connection-mark=!VPN_No_FastTrack \ + connection-state=established,related,new disabled=yes +add action=fasttrack-connection chain=forward comment="defconf: fasttrack" \ + connection-state=established,related,new disabled=yes routing-mark=\ + !To-VPN +add action=accept chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid +add action=accept chain=input comment="defconf: accept ICMP" disabled=yes \ + protocol=icmp +add action=accept chain=input comment=\ + "defconf: accept to local loopback (for CAPsMAN)" disabled=yes \ + dst-address=127.0.0.1 +add action=accept chain=output disabled=yes src-address=127.0.0.1 +add action=accept chain=forward comment="defconf: accept in ipsec policy" \ + ipsec-policy=in,ipsec +add action=accept chain=forward comment="defconf: accept out ipsec policy" \ + ipsec-policy=out,ipsec +add action=accept chain=forward comment=\ + "defconf: accept established,related, untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid +add action=drop chain=forward comment=\ + "defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat \ + connection-state=new in-interface="ether1 - Unet" +add action=accept chain=input connection-state=established disabled=yes +add action=accept chain=input connection-state=related disabled=yes +add action=drop chain=input disabled=yes in-interface-list=!LAN +add action=drop chain=forward comment=\ + "Filter Rule to block FB address LIST : )" disabled=yes dst-address-list=\ + facebook +add action=drop chain=forward comment=\ + "Filter Rule to block YOUTUBE address LIST : )" disabled=yes \ + dst-address-list=YouTube +/ip firewall mangle +add action=mark-connection chain=prerouting comment=\ + "Mark VPN connections to exclude from FastTrack" in-interface=WG \ + log-prefix=Mark-VPN-FT new-connection-mark=VPN_No_FastTrack +add action=mark-routing chain=prerouting comment="Test sites" disabled=yes \ + dst-address=!10.30.30.0/24 dst-address-list=Test new-routing-mark=To-VPN \ + passthrough=no src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment=Instagram dst-address=\ + !10.30.30.0/24 dst-address-list=Instagram new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=Twitter dst-address=\ + !10.30.30.0/24 dst-address-list=Twitter new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=YouTube dst-address=\ + !10.30.30.0/24 dst-address-list=YouTube new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=facebook dst-address=\ + !10.30.30.0/24 dst-address-list=facebook new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment="VDSIna for All sites" \ + dst-address=!10.30.30.0/24 dst-address-list=!NoVdsina log-prefix=VPN-all \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +add action=change-mss chain=forward comment="MSS on WG" new-mss=1380 \ + out-interface=WG protocol=tcp tcp-flags=syn tcp-mss=1381-65535 +add action=mark-routing chain=prerouting comment="VPN Network" dst-address=\ + 10.8.0.0/24 dst-address-list=!NoVdsina log=yes log-prefix=VPN-Net \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +/ip firewall nat +add action=redirect chain=dstnat comment=\ + "FORCE DNS TO LOCAL MIKROTIK DNS SERVER" dst-port=53 protocol=tcp \ + src-address=10.30.30.0/24 to-ports=53 +add action=redirect chain=dstnat dst-port=53 protocol=udp src-address=\ + 10.30.30.0/24 to-ports=53 +add action=masquerade chain=srcnat comment=WG dst-address-list=!NoVdsina \ + in-interface=Bridge-LAN log-prefix=WG-nat out-interface=WG routing-mark=\ + To-VPN +add action=masquerade chain=srcnat comment="masquerade Default" ipsec-policy=\ + out,none out-interface="ether1 - Unet" routing-mark=!To-VPN +add action=dst-nat chain=dstnat comment=npm dst-port=81 in-interface=\ + "ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 to-ports=81 +add action=dst-nat chain=dstnat comment=amster.vados.ruhttps disabled=yes \ + dst-port=443 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=443 +add action=dst-nat chain=dstnat comment="amster.vados.ru For Certbot HTTP" \ + dst-port=80 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat dst-port=80 in-interface="ether1 - Unet" \ + protocol=tcp to-addresses=10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat comment="Yandex.DNS Family" disabled=yes \ + dst-port=53 in-interface=Bridge-LAN protocol=udp src-address-list=KIDS \ + time=6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +add action=dst-nat chain=dstnat disabled=yes dst-port=53 in-interface=\ + Bridge-LAN protocol=tcp src-address-list=KIDS time=\ + 6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +/ip firewall raw +add action=drop chain=prerouting comment="Drop Honeypot Hackers" \ + in-interface="ether1 - Unet" src-address-list="Honeypot Hacker" +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + extras.getpagespeed.com content=extras.getpagespeed.com disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=linux.duke.edu \ + content=linux.duke.edu disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=vk.com \ + content=vk.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=ok.ru content=\ + ok.ru +add action=add-dst-to-address-list address-list=Instagram \ + address-list-timeout=none-dynamic chain=prerouting comment=Instagram \ + content=instagram.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting comment=Twitter content=twimg.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=x.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=twitter.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting comment=YouTube content=youtube.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleapis.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ggpht.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=youtu.be +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ytimg.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googlevideo.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=gstatic.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleusercontent.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=nhacmp3youtube.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=rutube.ru \ + content=rutube.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=me.com \ + content=me.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=icloud.com \ + content=icloud.com +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting comment=facebook \ + content=fbcd.net +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting content=facebook.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=comp-lenta.ru \ + content=comp-lenta.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + smtp.mail.me.com content=smtp.mail.me.com log=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=gov.ru \ + content=gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + r78.fssp.gov.ru content=r78.fssp.gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=api.db-ip.com \ + content=api.db-ip.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + api.telegram.org content=api.telegram.org +/ip firewall service-port +set ftp disabled=yes +set tftp disabled=yes +set irc disabled=no +set sip disabled=yes +set pptp disabled=yes +set rtsp disabled=no +/ip hotspot user profile +set [ find default=yes ] address-pool=dhcp +/ip hotspot walled-garden +add server=*1 +add server=*1 +/ip ipsec settings +set accounting=no +/ip ipsec policy +set 0 disabled=yes dst-address=0.0.0.0/0 src-address=0.0.0.0/0 +/ip ipsec profile +set [ find default=yes ] dpd-interval=2m dpd-maximum-failures=5 +/ip proxy +set cache-administrator="" max-cache-size=none port=80,443 src-address=\ + 0.0.0.0 +/ip route +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=WG routing-table=\ + To-VPN scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set reverse-proxy disabled=yes +set ssh address=10.30.30.0/24 port=2222 +set winbox address=10.30.30.0/24 +set api address=10.30.30.0/24 disabled=yes +set api-ssl address=10.30.30.0/24 disabled=yes +set www-ssl port=18443 +set www address=10.30.30.0/24 disabled=yes port=18880 +/ip service webserver +set graphs-plain=no rest-plain=no webfig-plain=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ip upnp interfaces +add interface=Bridge-LAN type=internal +add interface="ether1 - Unet" type=external +/snmp community +set [ find default=yes ] addresses=10.30.30.0/24 read-access=no security=\ + private +/system clock +set time-zone-autodetect=no time-zone-name=Europe/Moscow +/system clock manual +set time-zone=+03:00 +/system identity +set name=MikroMaster +/system logging +add action=email disabled=yes regex="* added|changed|removed *" topics=\ + system,info +/system ntp client +set enabled=yes +/system ntp server +set enabled=yes manycast=yes multicast=yes use-local-clock=yes +/system ntp client servers +add address=0.ru.pool.ntp.org +add address=1.ru.pool.ntp.org +add address=2.ru.pool.ntp.org +add address=3.ru.pool.ntp.org +add address=time.google.com disabled=yes +/system scheduler +add comment="Scheduler for Update Certificates CloudFlare Quad9" disabled=yes \ + interval=1w name="Update Certificates CloudFlare Quad9" on-event=\ + "/system/script { run Update-Certificates; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2025-11-28 start-time=05:45:40 +add comment="Every Day Set Global Environment Variables" name=AM-SetGlobalEnv \ + on-event="/system/script { run AM-GlobalConfig; run AM-GlobalFunc; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Update Scripts" interval=1d name=\ + AM-ScriptInstallUpdate on-event=\ + ":global ScriptInstallUpdate; \$ScriptInstallUpdate;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Update RKN DNS Looup" interval=20m name=AM-RKN-dnsLookup \ + on-event="/system/script { run AM-RKN-dnsLookup; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +/system watchdog +set watchdog-timer=no +/tool e-mail +set certificate-verification=no from=MikroVados port=587 \ + server=smtp.mail.me.com tls=starttls user=vadossio@icloud.com +/tool mac-server +set allowed-interface-list=LAN +/tool mac-server mac-winbox +set allowed-interface-list=LAN +/tool netwatch +add comment="doh, doh-url=https://security.cloudflare-dns.com/dns-query, notif\ + y, name=CloudFlare-doh IPv4 1" disabled=yes down-script="" host=1.1.1.1 \ + http-codes="" test-script="" type=simple up-script="" +add check-certificate=no comment="doh-fallback, doh-url=https://security.cloud\ + flare-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Cl\ + oudFlare-doh IPv4" disabled=yes down-script="" host=1.0.0.1 http-codes="" \ + port=443 test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=Google-DNS IPv4" disabled=yes \ + down-script="" host=8.8.8.8 http-codes="" test-script="" type=simple \ + up-script="" +add comment="doh-fallback, doh-url=https://dns.google/dns-query, doh-cert=GTS \ + Root R1, notify, name=Google-DOH IPv4" disabled=yes down-script="" host=\ + 8.8.4.4 http-codes="" test-script="" type=simple up-script="" +add comment="dns, notify, name=Cuad9-DOH IPv4" disabled=yes down-script="" \ + host=9.9.9.9 http-codes="" test-script="" type=simple up-script="" +add comment="doh-fallback, doh-url=https://dns.quad9.net/dns-query, name=Cuad9\ + -DOH IPv4" disabled=yes down-script="" host=149.112.112.112 http-codes="" \ + test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=ns1.unet.ws" disabled=yes \ + down-script="" host=91.192.189.2 http-codes="" test-script="" type=simple \ + up-script="" +/tool sniffer +set filter-interface=Bridge-LAN filter-src-ip-address=10.30.30.50/32 +/user aaa +set accounting=no diff --git a/MikroMaster/history/20260505/20260505012002-Diff-Config.rsc b/MikroMaster/history/20260505/20260505012002-Diff-Config.rsc new file mode 100644 index 0000000..dbf5944 --- /dev/null +++ b/MikroMaster/history/20260505/20260505012002-Diff-Config.rsc @@ -0,0 +1,32 @@ +937c937 +< \n:global CommitId \"main/614/a7992fc8\";\r\ +--- +> \n:global CommitId \"main/612/a9497a83\";\r\ +940c940 +< r: root, in 01:00:03 05.05.2026.\";\r\ +--- +> r: root, in 00:40:03 05.05.2026.\";\r\ +1801c1801 +< \n :local mikro [ :tobool \$1 ];\r\ +--- +> \n :local Mikro [ :tobol \$1 ]\r\ +1821,1823c1821,1823 +< \n :if (\$mikro = true) do={\r\ +< \n :set Return ([:pick \$yyyy 2 4] . [:pick \$dd 0 1] . [:pick \$HH 0\ +< \_1] . [:pick \$mm 3 4] . [:pick \$ss 6 7]);\r\ +--- +> \n :if (\$mikro = True) do={\r\ +> \n :set Return ([:pick \$yyyy 3 4] . [:pick \$dd 1 2] . [:pick \$HH 1\ +> \_2] . [:pick \$mm 4 5] . [:pick \$ss 7 8]);\r\ +4167d4166 +< add address=104.16.3.81 comment=xhamster.com list=FuckRKN +4168a4168 +> add address=104.16.3.81 comment=xhamster.com list=FuckRKN +4171d4170 +< add address=172.67.182.196 comment=rutracker.org list=FuckRKN +4172a4172 +> add address=172.67.182.196 comment=rutracker.org list=FuckRKN +4179d4178 +< add address=172.67.172.95 comment=crimerussia.com list=FuckRKN +4180a4180 +> add address=172.67.172.95 comment=crimerussia.com list=FuckRKN -- 2.52.0