From 6099f60da635e94d21c87aa1f92cdd63b5186af7 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Fri, 26 Jun 2026 15:42:02 +0300 Subject: [PATCH] Backup for MikroGig created successfully at Jun 26 15:42:02. --- .../20260626/20260626154148-Binary.backup | Bin 0 -> 166945 bytes MikroGig/20260626/20260626154148-Config.rsc | 2705 +++++++++++++++++ .../20260626/20260626154148-Diff-Config.rsc | 14 + 3 files changed, 2719 insertions(+) create mode 100644 MikroGig/20260626/20260626154148-Binary.backup create mode 100644 MikroGig/20260626/20260626154148-Config.rsc create mode 100644 MikroGig/history/20260626/20260626154148-Diff-Config.rsc diff --git a/MikroGig/20260626/20260626154148-Binary.backup b/MikroGig/20260626/20260626154148-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..f9b81d51a40ef2d89885300d69e03af975024901 GIT binary patch literal 166945 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

u!nmZM1gMe#0BT^Dq;zz@I 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%0A; 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%0D09C6 z2>PD@`2yr9#L7R*?MF+EF1!((V-Zi~?*?YD>DlSqK>=GUwR^DZKZ4yBOM$K|$ZrL& z&JU5XIgVY>gYl=piPctbF=<-WxtnYWnM9roYj8}^jq%uMce067`Am}xY7WHG2ACr) zhfpUsjUj?FYB`>$>*&A&8v}6!GQwl*;iuJtf4rpC`mG4MO-b%ojyXl*jMnvKU-)NN zYl+`)Os~uUwO7zd%&0oU(*}2&I;2qzJy_KLaV{+1%SP6u`p*)d-70wV;4@SZ{sf-RW-US z475^Zt^lbjqggT=%5PUkHu{`C@)Vu;E3XP4&6i6j#tq)6ZLtE^S399w~!Roa$u>apy2{TpX9Bc0ri6?9VqfsgZ*&eYH6G!j3}QHQ{L z1*dGzyRWgMT}Wb9mL-u99w2H7ntK(02_%rwuk`yUoks`x%}sUMP+f4qWlU$LclG7v zqfbAT!V9n(ZspJ=23j9+sA~?&wMB7-Acaz=*>UpRJfS)syEH1`$aj^;t*cC?d>o=D zqiV*~34?FoHy`Gl?66S#0X6ABU0VLB{M5?5eO1uF5brL&QK1Uo(IV!4U{BfaRVikk zKzc~sLyyAE9H?Cxo(~|ge-p`0Z@~>#FVj;$eYTfr^W=fUJqzs8Xca^F3;_5i*lmS>M2r(4vPB9XL&rfl6~kOesga}2;1jK z2&Ran@lqX0p(wH-S225b2CH=!NErnM#hjwN%>_Tc9%RGruGwOy#tpfue#tLPD>&{{ zy8Hgfpgdt5BWkW^%Yg>y}EWF`)!Bz0zo-YZz?JHC)hSw-X7Rz)@qZn3d( zVL9xiexz*j?^TOboc1IZ8-Bjx?fQM&>Npr}{&S#2)Q~0o1wvP%c=a+Im z837-}`3XtU3khqGlMQTP_>HP#D_NLDwh<8 zI`)ND_*m1pIsXCLwf23euq_e^t@ap(i!n9lAqZiY_pdI?3z3gT_`aUn!Y!$^kal$j9Z z{%NH3JpnA##HT}UjIV7`o-!z~HpMD$*V@fHBbJNfW>gqA$@$Qoj@_nM$CeLx1SUjQ zUU1$gB1^D`o!5A6XWKY)5&PHy74r)AmE$OS@+;FS-3zyBFD#e_mO_Rx)(v4U(_Yig z%Li3Vj&bMG-Js1vMHDCIsHP#G;0Ei4M+;|LAa%X>DXOZ;H)i020FPSfI8AtX<)eFW zuNI3SdA0@%GZS`0Y(0-GL-V$Q^2=0V-GY5gCB`nfG~`SL2x;;yyiLICVaVbt#JENW zCKPKry=PnBHw<`I&&x^NC5A|8scioH&Blp}cguf1Ickc+peSaad#RR2?N*^$2$_zZ z4h6h@9=goVTGdu>AIu0jhb_`IvY30g%hs567WR7RIJ*|N!c(OGxtZ^q6SiHf@*p7fg8)K)t^#AUujm zmarTEZqZ#t9mfrT!Y1W0_|q@3#GlPAR)bGYhW)0BeTt#V^4#&FwS}gBOC$A>8A}<% z*pRMnE<8=_VE01^in649&9@Eh6&u(|p8q@RWE$C?#o!;m0C*oojYFMkyvR6vTa+;Q z8+X6{yy`-Q2)j(}Gqc`yZ&xaf+;xLs{Iag?_{M+uXEkf3*HqhVk_y)BivgPVk4ar* z9#5YYqIIw6_U%WsuJj;gNV~j7%B=~-_Je-ibDnb_5b(0^B~VaKyxZ!JgMf+ASNdTDQ#g&8&k!XN zZZ22*j(e=GO~n5O$<9m+31t>YS0)@}2O)0h>FNWKojG#>;K}a{1TM2;?FGvfd?#9lr&3U;z^*TOa{GFm4hiYtE2opUE^< z(bc>y6K4r%cl!iWITYh0-HIlSTu~LWh`0h?YpYL3T-%T zCeXHHM>n9-m{W%bGQ;1iGv9=TOittvD(B99bexn9vWv`{>;LFTaHL%xwWmMS)V6$l zR4jPaMgJ-Z44dT~Wf>26+U3ss;ko{SjtgQ6S9G4_*sndNe1c0S4xZ%{&dk$Q)VmO} z*$`(sw zrN`1UjT@Kc+%eR+U?A$!Q}SQpo?!-LGdwf2#!d|*Fq)zh95NZwdp{t>M2G0?+Rk`F zY=EKrQ~2lu!*N??L8=bF#N$P$uCj5LU72T_?YQrK+dU zV=CN};?z7Wtlu+GEXxE6SRiXuNEgr0!u1$LMcB6JUzLr^krc644YinZW1{a2k*A zClzUv`{*1Br_Ar3;m8JOnk-!A2%tkBRN9d7>a; zN=G|suwYXTlMMkCi0750km@;F&s3r-;tCG3jW1ViW826`Oad_FXq_1Bb&B?Cp}bEv z4woUlTmTk9oVRDuqS*`7#zM}>)IwVBu!#PS4Q_-6u!!L^OMh=*K+#0truppYdS(=_FqZ9hhcsZ-^4^!9B@fnM^FkX9J8e^Y^6k zRR6i<-O!Oo7%v3Tz4P2^swrM(t0{>4WwIOr(dvxROUg}!s#JoTL_Swx{dZNlp8)HS zoYlIwjvgKk`T5;okQ_nTHIRkl z7R`C%ak51-rSwVX(0^R`Gy>NFKPTyrHQnnMzGNVxphgEIY%_B>oVKVK`G780Y@>>J zqKqZLj7>uv3^h`1Y=eA8XHI=*L?HTm z6aCl_id+n}pG+KXJ|N}eC)O5?H}2!0kF zm-ALgddh137b{cWyjK+&#p?U9O%~(0*!|jNr*zlUHMRsNM4DCic`RQ}c)CO#GoKA? z$7jC6EcZE(y0?SG79z;N3%Wk{!A9vxfv#I}YP#+vRvd!9ThSqUyN5+)wkIs&BJqKa zwbPxhboav0#Tt8P<}kKoSGvDARp_GiUM2JnW>OAUs>ssUpI%7mb^c!t)RL z3hCcTpO_k!TnXB&9DAoLEtdF62~$k|aHp1;!V3y&_QU<5mTq%+gv|#M-Yy<(AvPqg z`qEO zKUB=;s?327qN}6=bQLCP$Q!3c>4O5gZya&m|EP%a=<|ek)HER~MV2sS5H=Nda!I^zV^YtW;vVup!Wg=ilSn9C-in`@ z0mRvK3KGYcTFgJP>pE?rRA)4MRv5aSJQx;)DxJ!_l6Z6wIMv$oc5 zsQvjw#+#Dfu1LmTO#Y$at31$LoIHZ`zI*P(yL9V<1%={jmbW0Y*?A1~>+aR2wjN7dd@O_eLB52O}QKLN%KKmIUjV9JGm z6v!h9zlcZUK?|e=RNR0udSJhewP*nao}LVdS8<$m^wULF%E~vbP2SLMMn$eWv8PY7 z#TGA9URLZKvL01TrdW*iKleASMmuH^ayY49Nj)Q()ZDKo(Q3+$7~%uhzl;OU)h)l7 z(!E$Q2Jt+to(GxCOP->TI?YC6@=>9TZcc?PX;H-S52C^59{1EyE1coXh&vt64mSIAkb1f6Osl`Z5%#6}|nF2O%IUr8$M^f^H!&7^OSq@0rTzzs^Swf*R7GSsiHgv9~U$>qK$ z_+wWmNS8|hj*-rA0#Iu5zt*FEys0I2pze8YG#G$EBq2RqeG~Qil@t*K5K6@G)h%tu zNRg;A5J1ZfUZK4NpW&CE&p3JU&T_XtehqbCpgGGGhN%Whwlc5oVx;c9) zB!9|6kN%V6*kc=#p<~ko!vQbrP4kBw70=WkCwmiE;SVpmuM#sx!dB1tdKu38(JeAN zd#>&)S}5L%B(}$x-9-8`uzS3n0xucVzZDLtE{>R0KVhwPC2MIr3zJxBm^6Z=U@Y`& z7sTA`mV!vMIaAsO8n0O9<#yBhQG?*B+%;dHvM1Tx$t1NrwfGhakm8b1CbK!QG+A!5 zW9%Ik5kbTn`wogvuf1e){vqzODdj-Fx#dW!{{mtxL+T+D>91=14jz<+^1SK+H{od| z1d;BoiyNk7;riy|`A-D17|~f@L9z%dNXdy1zQ#0dr(2(x^T&Yq08`y-`@X!C(oY{UNTcRd61)gBt7KJ7}q z{S&ts4S`>fe|0ihzK@OHFF?j=2~Dx8L%lmNb`XnPA*_eF9!h2Dsn-@SKpHuf?Vs5C z0kXcW%)E@%Ue+E4wEFu0AxPc?xt?w)NtWSU*>!tsDRcn;KLEgh0t}ZYL%Q>x4(QO> zA(@y{_yOh!D_?PMvzjS=_BX&#HD2shU@B!2J~sf)(ShOWE4!~B7adu4lO6vl7r4k5 zKM06hp7sXwk)>WHSu~utVcP@UtbE)gY$YF(zR0zjdJZxT^|mAl-K6HQB&NIkSK&M7 zC_>%e4lR8dCi4Vgq#|K+iE`;!7gWHc;52~oo1H4Db{o0x#SOmDC#;g?*)5B<)p7+# zbRC|y+b_{1<-w=O_g3HX7uy6mk%>l%h0TEPnp;H!s6Id>41YVT5&i7B=#_k16K#EI zOZ=(47+>U`Jm$^Dac`^D?Sx^y+cZr~#{#z=)W^k1wYLq+4&!0T5S9$g`zi2v#uHwO z!aHWV!taYQLMI=En7Kk|IVs-$Dx1fMTlo zR;)My;U>kxAG%hHaN6)HF8%rQ@9-;nnzr+V7z&*VJU=K~OAjbh;O4I3)wb49j?P~f zUFA6#;$;9`oN#J2U$N&jm-w@-`D|jLcKJ{Nm6oJr*~qNsmIO*QqV*E$*aki`wxX=E zi>2f(pL@0UZa;$xk#02zxQ!j1G+h6^?D2>bz|jz_iHIlu_FC(Hc>k?o^HLpgp+|nD`zn z7R@+JfCRb;K)0?%r05}m?O2zC@#CE|NJdxUt5cB?0H2UIbx8Eynn8Lp;$*`_zoO5M zqnD~Bik{PTxC#zCo!N0*NrMg4KcLrj^K?`X-1ARJ7$?M|Q-+Bgs~fycW*(D(eFNnm z#&t$sRy%|VP=uh;nXFDgd%#!Nl+u&YT>LsheT2B_ARSKXM@DzzRIDkHvsx>5t-Iha zXF>ld1n;gmQa{2{W@0vV>TYuo(|i#Lb~?yQ~i>8$N^&yihfm!3l+gs;>|Th(85rhZjqa zT}_YbHPIISH&+t^J55?x5RIQ0L_# zWg)|ysQKU`-awo6kbOw84=l##ndlHvU49%ONIp!A6}}ivbG5uLXtf`j2xK+u~n4q7h`3v1xJNsctE}104So&3Dvk2dFx+s?fSZt9>P?^ zBj|@82Nkn5yi3Pddo>+d9Si7xgd_L|mhIi@tL-PYz-T{uYY(mPhjed7W~(hbyTd{5 ztPDWQj`=orBKO2Nl!6`5Ktc5v;#{C74lI0fb$#~0c5hoH!4zi;$XmvSJMis=NVCKU z83X4v7_bFb)^;$S>IV(b2#?9?Dz|lVunjh-_~#(qoV=NCF`O^|${G+$l{fy$39(~W zM3cTGf$*hNg6k1R8vCF8M`76e5{Obd-=V-lqio9f4@u2yGTcwQH@wd5+oCqLHbz-ry9LE}jQl0NfEz4JQMGd4 z_`kgd=HUhMhHlvk>xu$f!oGJtFACtG`GhJ~V?JjaNmF?^!j9zoeRx8sALbWFUHf{h=J< zj0JoGcHWESJ5oM+*lx1Vt?W-E8Pn|0)+xAI{IoC?sdp;sDehylVsxb(>WjRV?8XUh zmK&dX$?49-ZCbF`puX`1@gM=Y_~_$KFQo~#<4i&w8&yPcj;&H`W0C$l9n(%sL=^AM(B2&wN68x&o(Rwm&S0ImwWXuehj= zqE`F%8E}Q8mfku!zgyiCFK=FU)_bfAXs&P`D1u+a9B;UqZ`M9hzUC(#0VC)LUw-M# zd4w`aDq#Rfw@^mHdK5x)L2k1ogdtguwaXPqd}jtZ-{vJLc~C}Z?EsTw*?;mo-(+b%{3~S(7r~E%|aL6!}TU zfpEISS>uz9=^Qi$&H`6n$*!yFhB_k3$6Z_%G>5+0=qSl_Do`b&(ny&36LSc{fs_h$d_mgQf6kC8 z86{WsP)yAV)dqFn8vi|6Hd3tS4%}+k%h!t7g!*zMfuY^jU)(*|I3vnF{yvYC@EN1p z0c9BuxWeP@Pc?)?>(EK8mTvdJzT>C>w;Un|aI^y|{wydE4R8o^({!U9Q7#l^+Wpa*3E(Ttd z)Evv6C@O8QCR-3M_-7hD013NYdMRw#0`A$D)bki7ki?z(!=-+Z$?;Gppc&mE839B) zNw)84-*HW7hY4=QCL0DKa-6zGXy=@Q-sccCWD#)3Dqt5@y>0myq8vil*9fC=RkBOa zK-4%c;W6~NLRNnh~7}G0P`@6c78)>zF52yfnYIhkf}X&fPaNt zVcIecZ?A}sG{bx{Q;Mcni)5h@$Qm@HjMNOpiT9c9t9SVPbJk?>6Lqff;APJq|Ff>J zZwtcg_^wg;d>Q_iy$f=fk>NIpRX8%3lek=0(8l15wzKRK--_=_|5Ax^Fn+?bCqmpi z);0=CgLI9W3{eXFZH($S1DpD`>Rlt?a?jtQ-U7;o!R;ka__c;(J?9aQtiV?^Nn2i* zZrKq`%bEl$8F?we)CIL}26ho~Sdm+eU}fx^=d}EtCE;-c75TH@83PNWY{s4;d=Y+5 zVZG~wkBQ%r7iN)A&I6kS@e!m6%UXXJh>{9JN8(B;g>$(F?{4?n=kJ4Xi~&VJ+G}|w zywhV7tJsD-O>cGO8K{$tn}ML*WTE$9C>X%4J-cuXw_KIO`XlmH#xuBW z5ELAcGK8i_gUNo_?dTBjGNs)-d$A=vkk+gE!Fj{=Dg|bqTvVCNp2!$R$57YNL{tvTm*jM3nrias!kmY& zpWf>I(@TL@qXe{)Bja>}0-JZy5FZt@`oTm;DF_F9#omoxDGAcnRt59FVWQ=0w}VALd)Y-gn(RQnn+a+b+ls#%b;mn>R>K~bM~B^aQU!a z=xHhJxa0u7U{5@#^I6NX*lhgf_~X!HN@U1hULt^z04j+-Fq_eDe^nqLpO1RAcF<9N zWmHn<#7=8@WNA?|P^%UBv_pkXcn&l=s!@2RyLLET@-)wuJLt{QN4S@vGAzJo6)nKv zWEHwa;>{kAf27$>hS|^rZ+M!9TsJXm)?;}E|BO^NJ~-KAJ9*oAr$FJ@DATf1i%<54 z`*FeY^#J0n;`d0U*e{G>1i{{lnWGk0t8ffP&kesP*9V9C?RRV=c$0`?`tua%G|L{W z_F#Ul*eEI=;$@SI`*->kdMT7u)+YkRei>3l4lO-N@&~gw+WcIN1?!l?MmVOxG4|NB zF9V*}44+LVmY(&g08keSnf1$GB`t++C4EbdwRz8VF(!T}dR0LGNl9vfVOaHv_yPyZ zMldN%!+6{bkjRG@>2)`4MrJ-cOzYuet-|iE^uAa1qwrh}cCyUctd4msSLHq=r^I`8 zc#?gWAefe|OiDo_ux~fK2Dpa|kJ9Xuk9uC)Z7*8FvR5C~M}dx^#YlB^=H>km zb|bVxEEZW2)5@54K>e}ePLvs~>Lf4V*yr4hfv#a0=RI6A`D@TiAir4}4RI*e&<#Y-omfrgKhz61g zXy4-ppcI(lc?PQeBLOZSa!4C`v7^5vLvuG;z*m27q z@&`3x4@ zFDMeRZfCx-ZG4@Q>YJ#5dRKdZVra~J2PaHu6K7#eOAzc~))u=MZsp^?iC?De)dIWu z3=YHhz0||XI$s0n)LvnP$XINPl`kn+x5+6LQRu`{ zC;Inr?oeKgKsj-L3tH(Fj$i}!A0qxA{q^AHZy>S4^9rD~&BEsXfGD=?4))Lc8%AXG zrO(pRWTEd^^mQ>1TsAyhn$zfDM@_}1#BU;t>m83*r?;LW&6jLii?^8}4aZY1zutsb zfbuDcX419S@WVm58^o|Eg59$Il=$^>B1j zt~F$@>l|sLt4NEoCpexe42RN@*ANn6mOF$({7TUruD*3QR&ierX+-H_M76J-{85F_ z*Th1Kv3iyv6K`Y6T)p>QWw$d2@?6cAJe%Jv<>Xj=X5c~cubS2pEjPw+h zzWhJ>I@T_&o?1%naleDpAi)le89|wpCtAM(8DU=_!cb#+o>SNIzC4ub*52scyJn5? z)V*1Uf+RKS{w{q?ipvcVq`2)D<;0t4)J@na$iLmh!`LoiI@AJfL21Lt7*Pqnb0iO^ z5(OKPaQUQ6A5>!RA^4xGNo}`r*+=a&-cmXCWJ}0-DVVKT;p)!?oEOAMUljZpFPaIh z?e6&8=cbnAuSry1<-s^xux~aKuE9*W2=#-$--}C+)bW8Hr|uFx`hJ`zrbg?SUc>q0Pmr6;a?xKoWte!rd3by0t6V{#>r^;cLF8}E4Qdm*XC^3}mw z(!2y~0XGlnj<6Jc0yg4;zP5}z34`*Ob|K4|fl1PXY;-xg`}QjO3CJy!5Rv>4W9H!_ zN~*5}2)<%^A&6%}Hx>H@rw4Nc6|mHT+8eJO>*ZuzQS{qStlEK#3f7E@lE3ZW@+gGS zkf#6w*fCQ6%`(Abp8bo0MAQ2PUq!>(UF1XU2UaKn?6^u0e55c%g z2JxhQa)!#?FMUBLwqHqDu{~SUOG}{HMMZk+7__nfp(tmwf@IySN)FF8w6uS_LgWly zLxp+i^r3Gh>)w9puY76)E*CZFn}P0y+|*`S43S&3=PUXlJwBUc_askGCEoINJU)-x zT)`e$Mc|e{hctc}V^1CGGhDj$04f%2F-KbyMP0NzgCy;yy*&;7Jk}m{#9`I_4fRKo zJY$|liP=r*$NwX1Bj7$WANqu>yc(h?=Fr9aLb(0p8@Ho$dz<(s($yjqRSe*vz`af# z5;}^2a4(*~C-CI`O#}pfx2w3^)VlUff33T(+1IdAM+1r4VjS+C+9h+#ixCz*f|-SN z2LQ-+^B2a3g41ESFJKllk)wXtuCL)ZE2Z7t$tW91K^o0)(UC&fVJRq6ia6#0hp7a7 z7R{Ff?}Rfn=|Q&$f{Tha%!>9%%2&=A)34XOV@)MmO1>$9l|ANb=TeNA#|vZM74GKF zadDx)$Cc|AX@kiU@BS`C`}D{=%=zleWhhkUSB%`_k#0W)pIbq(Hmcq%ztN0OTZ@tiEZ+Vi!Sq z4f<2iVV#*i| zN{YUe34TsHc#H96lx>y{s&(DNYnx*$hX46Pi=bZYLrID&PRD_YbH%6tc6ll#GVVGk zi7ZLeHQKFTi8M2nb>6b$G6{f7YN_A!)>TPB#IBI|eJU*%ufRm<`=Nc5cmucRdD^wV zhVg1?(FXl9C)2r%$G9z47aRy~+J-z|d;htJ|NoF?ul`q`HNq`JTl@7STLVpig#Yo~ z*|NbNbi?RIHVY~80kGt&u$C-PiT7&P_vJ&qJ$KT&4l3oAg4GC2_NXrfufU;isJuhf z-H<|WvX-!nB5j!Mwe=R6dZLY=gjv|K(Exfrt4_1T*8u0nlUoQ;>^J|a&yTr2LNZ<|iK7qLt)A)S`rWH`zmkb3QY-Jb#;wyJ`xTT zO1=5=ez|DSj9pK0CP`m(|9ZV@rJV}yr3dqj@e5kHGRdmHX4u}p$(xFplTqV4*@d*MnUjLP-JmE0w6D*+NQYCu z_sD>tpja*5zHN`sflW%ZO4_3slrYU3#}(k4V*!U7S2IxxD8YyI4gek9oO75V!`*6<3ZRSm?OczD168GT)?5wZYr`$bK2hRbg$id?upAGL~y> zuRs-0F8^aYmM<>CWN8}sCR4=o+83jJL;a%2*m=S1 z>Z`G5kIFAhGVw2}^T=>I)m8~ZB&&gDXgY2~v_rq+yrFexXmq1ZIIQ`dqi3@v*>c6< zTNFDduP7fyKUn*bxd1DGH0s%hTIhXKQN^)oy{5uQ{m`58C7diTUdv#Z-mcxC0G)f^ z7R4-ne_8iMr;5#8po#~d@PuFzH<#$=vpTpGwQS*LZpE8kCE_BFrev@PyvAtM9=kWw zbdf#FGAz%#B(_S7H6PTt6A!S)?Y%AcbR#Ui2%okBAyAZcWt&!V^PZD2Ey>r?r64(7 z{)sc}S+&}1MCt`;M_fHPC9vSlwBy{yHogih;~V(ZgHZ4YulNp zoR8<~-FPg~@!}k*+~jd(ja)c)h=NrIQpVVoZ%ed&v3O5mLDXMgx?(KpOV?ldp-`!S_r)9V zPz9p`4I}!KgGrInbGNhgqDhoDNd!tiDIczRJb>Z8?(DwHj(~x(1)QBjXMi0H62VYh z%VDd{EWq5ikCzwhqP1Jy8p0=J+(SPWfFF|6jYKjSvz z)h9pjl!peMQL_mK^RuB?#=pimXE-iZe0h@<9F5Ez*$4ikUVjx3^WeL$r}z{kP9s*X zVyit*yI=gD5$s4do|!64?44NwPb#;wgJHqUD+sUpDoz~IVLF4B9&c^Yv_uOZZ~l2f zqXv|T{n_*?3^|v}Lwx%j*2eRbo_H76GqG*>6q|l;Ms%et|Iy|wYMV}nDsj5!*0usq zftuYL=G7&}_>FWHSY@OXIxT>mO}Rj%dcT%r4BXgPvWp`DBf-8(CAs1v@<`bKs4`5< zmC*XAOWU$0#Dk~x5YoC|IOoox6vX(Iv-Uj}<9sP4L5V8^Wzr@zpnty)n=S52rmNi@ zM;fWLG9az>AN3K0S|de4G9v^g0Wfa&bvE7w1t{{X7pe5+g{U#H-yhhbdp zaWo(5$V!y6z_0?NL2k^9-Lgl5KO7zwJ1U6$ zLvQ8uL`I2sN5k3^b}Hr^m#?ge$G*jo#2H;kk+Ve+@^m52A5L+&vHBz2@m%tx)GC2~ zu+-^&*=m7yz)FP(_E&~nKBkrY3_FOHUvu~?74|(;8+c~%acVV))?6kos$0DOiYRdS zI|$9bV)UeVvQ%arp8_opIcFW51#a4S61COE)9-orW~+j2ydaTtMg(D~J+IrI`N$#z zQ@FnlhRX{NkrHcGrT~1I@tT9uN)pge)2y=`E1t(?WviZjiJ=ybm*-!wE$Ko*Ox+ZV z7+cWGPY=1{Y1cvjA|$k0`1ibH<2?z$gd})_j)p6W5AS&##^G6UI+bjPX*RtT(J0lb z=w7L#QqchdY%fEIWLE!^_Lt!xaI9&jPa&AJb zKYUqGe!nQnQrKHJ^1*g#J`E2;bKuqI5lho0oe)Ud;O%h^q`Hf{k(GFy(w|Y^hJn*?+3SSMghZkk5A4Seq((o8u5VA zzg2@Dh_4LLnw$33C8YmT=Se1mbB!m#gPz7FN}UbzgVj@e%! zroiRF^O?y_{{q7GIVxLom z3HwFuR7MGaqc$nYh|XuVL;T5u{nk6e+({J$1G5QEvzQ3~2p%cM_lU=AF^SS8GIS$? zML!I5$`Hlzck3Ik^%R?>G>Y3pRqTIW}mpgv7q}UB*jomz>#$XTh1RVYRWr~-nJS{Lb z|BtdFbOF%hKQjyMtsY%b_A|$(`eW`GiE{gq+5oBBB(5q+HFEB(#VEdR;kHVmW?2L%JWwI^A_P)Ik_LB|F022TboAA=+AeA4W z@2BLc{rdLZ%`xuyF)mYqaW2(iWlGum6g?WFeguyGSc-TSBS~@x&;K><4H540!SVUF zy1k}~s;_*CYIL?C$vPSEso>^>&qr4GQZPFzSmm%$+a9-wIxzM@Uw&%c#~SbX90z0`}bD!S%1+ zhJ`xavkmUez8rh*jH*Qt&!oiz|E%5=E!aCnW-=KGP!%`=IsE#}H7@qW5}H{EwfkEk z*{{=FJC#$S!dlYVVWdy_cN}W5s*lD+8lPf`2rWt5Ahu{s78eu!)n9Mp<)y}5@X!Zr z85>b(Q3syGvmU&1AqE1Z(aqvEMO~MvcB#IZP#CoKlYTsvY`ON|J#H!az*=UtGH}ns z?=||CQ39^dfzvIEb}*t3$jCz0t%nRrc3p$hi}&_VX0Exao^cd+%*{oFU7kbB0?%=! zA)>^oY($J9;XbpQHn3NTVG}`uCj!;E{ymuvpTv(#A!gj z+*!{^|MzhG2@!eGN+STeY~J4{MeJ~a0!j83=>^*4D4R$Gp-S1*DxO@?+Nuu45@)C0AcMtS{3VxoS++iG(YUp< zeH{kz*GubN4Rsb~~^n_P_m%(>o{N?ZgW=dNPHkkYdR0X{+0$-QiGz!Bwta~?xxd|0Xmky#`j-mQ}I zMqO2@9M7eK>F-n`tFiz2L&ooxd=Ww76{V-hws&+C;W)n!>+Ya#0h~Ef^@Jd^aog8)Q>_Eeg zIeXb1=7!&5+9DNL@dzRe58S*&!yyaJk5FYJ!4fNYsorSdR+!xBDiuBvz=lH&IAnbge%IL=kiGl<#J!e6$uG{% zDH#%_Wl|La8_-G*vwMyeqO{e_t*N8y^ENSV#QB4T(!g*!Yu(kd+1vNjL3R4xDH_aH zTk+}Q{w`4f%lrRSo!b8RO(N}dXm~T~f~*>e+NJ^LY$YCdmJ!0qMGt|cgjo08hY;3k zH9hc$K8|TpJ8F}|ultpPUfpujBE7*!P`V8Hs*b6dL`MB*R}T0}vw*R_QG#_Pilc7S zG)97L%Na+kodmZ_o0lT6c?$S++(6omhChOXbye2s@_~JnPz|*vCdwGdeV8H}$`xI9 z2%m}hH@t5wcsxc(!R(-q5^ zQ_()=9Wr*nnS*viZWi1hgjpvVZF0yh>}qNhPn_0yTdYPi-PBPn9ySl76MQ@aoXW&K zlk!9*_9i7%-;{sNw4Kol{OQ>_8$eDNhS;ubO83o9NwRv4gI=tWtbsa5@vHiv*05?7 z@UI05jEfNf?A~M3*i%~+Z8sjLiERtEq=K3xe~cFvdzziHF}}&Z zo6+08Ht!l3L%gv;{8eFoTezHl=sg=B=6SZ6f;xqqQY3Cb0J+>&o7pD@pp863oB<#4{Hm$@d(dC5a9bwfSevKmWh5?(*% z4l)(Q=V9MBf!s^K?+TpqAJa!|MUBv_4`Fhwkzwx-N-gJQ3=gM-o1sNq8q9Cg$W z;zJZgSx%^B1aO4T9{4D|)vtzgD`vQuHgch>1SGZUUwUZP$7~q<5b}%Rbrx9IX0k-( zd#Vbnei0cl`%xzo#mZGHqd04{vr~3aq?S|JYth=aEkg4hKau{diG@!5SmL8MIzW$) z2rG?e5u=MZ(@G~Rz(uL%K4r$m(hbl?*U)nnNzyvfW@5*Xx8|fzx<*6~#Fy)mW=n!R zHq|+qJ_wYV?|NRc=NE4Mt5_7l@e&NdU&t8lELzD_xB~THB$;WgVokWQMm?)B@%!J# z!EAYX=fBs^2Q4PEm{P_tOE8Wvwe)&Q{w!i9Hw7W_MXy&$uTq-w32;hEz-ooT4c3kJ{ePB8B=reH(u zq%0K@6&0;BYw!`awYl;~k7HsT5hFy?#|B{*5X_bENuSy0L}5On1zIMLenQ%tQv8cRI{N6JG~?=b?+>IsR}dK$BVVpQ(6 zA5E6cjdMk%99guRV%jjPB>CXFGVbLV#`ldtJy_bh3BJh&h!H!*3$MSu*lt5oEKXz* z$u=FwJ$@BwO}_Pzk{ZAd+&)VPNczJ%S+w~ZLWjsl_d*1yA-vaMyo^z`Mpcu=eKhMI z;gum}^S8Mw|8~Qh(t~1phUUJ!Qgil|tpR$gQjsWjcDG=F3I;;%fywnAM^uxqhCndEbOP7 z*JZkDrs!*JBLv77nq@3+19N`B?)YFaQ6d-aF2X|VE{jjQucITja#7*zRM_vMZ5_&Q zXq|WUL}XLpNZ{FEb*2m;QuqR+r?+R-bupG?20A$urj$a}E2Uxp>d%=Sn|OX2Ux)P* ztqQ;M{3YG+vFbzIftwX20pm`k_7J!Y*?ZL<)g*-tUCKjNp3R;bgav*CCp>$>bdk1> zo}3@8X;lLrs9pA$gqwTMOU_6hniaPZ4rj+zx|7B{Bd8z1DYsR@G@z9Q^_K$;8Rxpo zb!B1H>q9g>Z&duRCxzj9{LSMrM&JQ3f;APUtW(1CUX)*qOg|NZy!J;=ky>BZtEFBJ zOB5Wl$1qoQC}z6Qi>omp^hoxTz14_2$Hf_r@u|^cOy;GX`r|&PQzFREC+m2;x-UHb z8Z06IQF?T2)*FW`kZUVY1>g{;km^JKGLbwf@yd<*=+6D* z#?~qqCts_H$KGYpnU!mnkqTTxGgAr;dMl#{^7m0YN`3%hZ>0=+q(;R~?U2i%pwL5l zy%l0Xmkjv43_mZs-c#Qce2*(jB+JY}BjVOr-yU?!MU`Yq1*bhs#uPpX;m;Z1alC!$ zWz-;OwKA{mJIm`a!?49h$I8aBQAcq`L;Cvswnu6DlTXH)+{ybR>EO6@s;mc6`6F>K z=UCCn)OWL8_nT*Yk@!!UJOfB%v9+{82?q@GoW8eXW2W6OjVvc_=!0>gs`#tN6=H8; z9OMbGL{C2#8hOAPH{KNfd&V+T;N#+lxf11QPD5T#N9uo_JgQqDN3mTIo!U%hZ+7}j%fo}3 zI}m~1NJ829plU0^xlEsAPD16EJZo=8bh9S!QRHMIR?+W60};Tn6-;hWt+|Y`3Fmtk z;OAibi6GjUQj8XeDd3=F?~J~DcEMiES{Ny~mp{wd%2D;!<4<+ZN-0f?H)Sf{jU{tG zd(-h{S&xQ#hS+x+23S}IX#d#7ixVy8W|D73CzlTk-#f8X=04@J>#3=E(5v6WwI@*W zHH{+e>FZM3YD7HXE-iRH<6CyId2XRL2?dC9&$%*XP66>y!_1|;$b_1Tui<}DP|Blf zD#fkT*Ks#m{2e<8m{2l@9k9Vb>quCq{>kp=|7jur938WRLq z#}T`&&=uPL2_pLWbFt5cf0;~uFvtH`sK5c6&G$`-T7hTozA?tVlW2v;V6Zsjg<8zX z@fS!{658>T!x`OY!G};=QJE8~^&`K%3Jw&6C$qHV7%kIC>H*S3(;P(m3$|0X9}K`~ zvYKwx5lny`Ue9*^)XBdP=!&Lpvt#(89J(yFDiOHRV^5uN6L`$~3Ej z)H?VjyKw{Che@oe{{kKjCfXxZ8`KUa#1O|wwYCv(P)Kg3#q9agc#LDy?JUp>_H8Ur zbwfl;%Q^C}JC*{_*#kg($qB_?36ew;7w4V`oWH3VdoT`R@2MsQ!z>i2KVKF##(y_1 z#^Eq02!-XhMD`K~8iDi564yJY`JV6nXs*dBbVpGyIDO)mq=H$cM`F5NNza+2NT^J_ z1G<&*=SS%IfkMQpFLB@b<*-S#2AD2o`~=N!@!+pq{u~R)>T^+USt>JNkq+Y*8j40B zCg|-y&R|=cU2Z0B_S1+6Ua_sFbsR^$8IQ~YPo_@?aSf3peVCl zhMp8Hl}O+n2u-n-RggpqjO9=+znyXbrr3hFY6mPsZO~}QJ#6JKL|{2YM|cGW6xG5> zk!YYAQqzfOtr?q7<+*EChPT|ZAx_3PNK2G!RlolO_PV+-aT+4 z2m{PwIwU@Gbmm!Egg_C0HoUI;@&ADE*Mu$lky%_WbE_-{ z=Sg0XWji4Smi<*hoA8)t(jWkD^Ln^RVSh17Fst`2*nEyAylE{hp?Pf;T$_xRKR*d+ z%jiPt5gSl6z*E3R_F<+)Mnu-fmBir*%>4j-imdwk3XRZ>tIlr1Hv|$?LfVJhLc%GL8tz+{IP#ovmXsPppiGj;DS}{Xi{#QAgB}Rl)imLj1eECE zovEjYCgIAPqrauTqf@?3;|P1@gvtI#xC1mQDhH@ZO_aB>C_r+ivy@UJUO(D2kQj81 zA%%m)W?pP0n|ht++SX}L=vRYa*gE0*E9F157;4c4B$cWo1T;u(xfOt5TtX9D zAY7==nmz^`6xEo`xHp^lG5~|r`be+xh}nN$L@aDgH>2^p1G|B0l)ch2SA1(66POlT z;K3@)ecWLg1jvYvcS4 zVMJm_-pk!I8vOvoZJByTOCk`3{>s}fg z+eA%;dG`*-f1x2RpA%Wm-}Cd+#>!-WFLxUR?swl>PFS@Qp2xxnmf)L?`)(J?teJXy z;;xHI3)`?D3^X?+rh3kL^Qmjw&-l^Wa`CBjaKuClx)WL2PV^AAV`Oa0!NoPgm07oz zE)eQDM=&BP+#LcD+^Oj+Crk@vJ^F|Ib~#CE{ki%e5L^A;59XA3bW2=SGwT&KKi}X5 zNUt>$5vuIbS;f0ijeynXMHMU@I`Pm5D;;`+w_M-{`o�+hJ8jugez$?@0IYptfE7 zs?4?UcsMGlXSOAxfOo*CN}W-=X2%~QDW;C_@ba|9T!#n@OaUJ!ryHzHXL53{!)7o` zGA^NxP&L0TO=B_LLG-LjPAi_u8;r~I04Q389Lgyj)}~MnT3mt;n8J{#H7nwzqB08N z_f`3wPifv%n4Q^Ea^^gua9xqbMXd?HQ+43|HKDE|{imd>p7Fqj#T!nw60(|x^S$yL zYN4BnM9;Q!as%!z=|ySZo#3Zt#}M0gQk%DhyT9v@xBfa7!}gJGs)&0J1upHZ)tr>@ zzW`Sky6s!r*J(D)So+i)uAD5LT;@q6jnIzr@v%2j2SP0i>5;!h4;jJnSHnYDBe&;n z5o~+9EMl9}`D2JcA=rUtxfGrX?SF=k$3qBaM(I9g^7rC}nfybY`q0)v5=M7#Enc@T zRupRQ`AZO4uihUTHZNvvxzF($pZ3HtTzU-Oi(rjBpe*SKsB~Uy47A2jhzu&eVZkODqv4(q!{GgNnr`oFskgTruiNvv6lsG8Mo1dUO8)0Spl-R$G5mgDA9jn+mCl=&ge6~c7!=h$URyd5S-Xte(ATz z7KW|8uog4R9clqs2_c(n+Oo9cu_GE_9IED#0$Qc91GY50v(-#nskn3U-X!yG`FvQf z)@gS6YA9@B#eBCc*-4Iqqwy7rj{>rfz&Zi`rnk3ezlyJ4=<`U6T^A-i?a{>6fzy}T zQ19rXL~GbJWu3T|U!!o0F({pxMmDOKLKAxk5nU=exHjncVp=}_d|j~rZBCOH`#_Dgh?3dQ zF*?dQ0y;TxD%SiH@u9$MLC0gQy@Fcuq_N#BCwHL?P+nV)UeLrZyxCAdMG+)%M&W8f z#V%oeUt$W37VKvn*ZM6I`^Adl!kD$(j^IY$X?HjYog*jskeH+9Sks=l^VJq0!+IX2 zj%E3zVPVK>zv=etN@C6h|I9a%{3ry7hSqQU!IP%lFdb8`pIt&s)+hk~KLEhlRlJ7r znjj(i{A=2SEF7!dICMDGU5)5qXkE|UwQ}akx_3M7PjyG{+^RULmD+mH>VI$L+y`I* zY9pwub;~#DM%B)7+b)gM?U3aJ2xMQZR0m$~lX~WYE;w!V$fFkT-r=s@avfxG%m5$2 zS#NLv1$C~(g4q_6e@}@Wop4wb{7d4?2;E6WfqJ;woWAAFy(DqeZ2@2plc}nb2p8Xvxm*}>QZdm zmND~NA8-j#sS5f;REI`rW3GJOel3ISmq0tH7T^xy6+I^Vf6{cZV$Yv`;(qOkTntLK zHEs)h_6>OMxbCWJ-_(P}pcEZ9{L>mmW&xyS{e^Pg=XrOu1gIQ3Ty>bwK8pp7AkkT{ zL#?hvqM}CV;ewQLmz(^#+h7EX%EBSPdNI|5ok?hzWGgxhU{4xf_OxlHrwT`&y(M>e z!b#u%?{!}Tr0kboxz{cu$=z?|K-Kc>5@k!L*PxfN^9G3(!FNZduprGTzxeLHkad56 zp_$*GppV7HyOWt)+VAg+8gI_Ccs7L9&&hL0CN|_#6(z!12b9BTS5f8_aJJ#e_=A{s zN2DPKevsC8{o9-bnYL8@8JLCs`2wBoz+zRfqVL#u^u%IAnFlxY!d^?(=1`>rl|5vU zcwTTbsn_Aa;%A$3=OCZ7H_!75y2Zo)id-Wvf}(t(eQxT6_WJXT1ZoFRd_@J8<8|rb zrAfM2*cdfXa`T?|BB=$?&qdT$j_GUsfi*@*XIH0kGYznQRY*{xb=P7}lWKkU@q~hY zv7ok+LV>Mzgrbtd{dQ8{cP1N4m+H}LjH|V|s)#OErD|9QWVYOX`~^|+oCj;YlU|I}K14Wd z4+dvEyo6Vqxyg8I$LrEkYa)xLly{!axYc&J7MbkiMUPeeL+OOvpk3?$qGQpUsX#euBclP&N-8+J5 zQL1$lXv)V6ezyPNMQT;9a^WE3$5xSw(Ors;KK?Ii zyE46nV!Kl@*`%x4G)Ms}r+V^-L1;0^a{Zv5b$z%h3W=~u#Tj}w zoqF_-v!d_~3gd~asF%e-8argP5>}CS9&}JCqqXiZE(&FQk#-6&KH_{5O@)}w+t6b* zCBt}Z!(fj7?$sU4mjEV9GydB}+Rs9{k}n!uK)^t^ zW2*>&QPv35H@%qoZ!b-J06^|xRa)as5>7=8&(hj>47^@r5J2^SAOn#Ou~{SeQs31s zz_kcMS02~?nb|4W>kBEd&vnI5*h{xB-cj&|5D5K)n-?tNiuaPOv!kOAf~CT1t5%xgtyhpf(}>!sF7AY06fRiM zQv;&ak{l-4_0VlPbX)9HA(GFZQik5=Ra+8fT62o}@1f11Maed#_-f&9VGQko9Ohab zjQ(PUwxVt5TV@(Cv;r%Ct%eVdI_-eRZ2;N6$BQr61O)I+DR~YW@shN^ckZC+3F6;b zr*>coheB4F$7n3OK&$6p;}`Yhe9CBQ&~|19FMil-Y--HRraukiq{Br4%{1zot~?5XW?@HTh|1+tjD_SbE|IR?Pi%9>i&1u$VYX~CDNO) z%u_N07HxQ_N)&wBy>lrOjG&08L{i0Y^$)%yQCeQ|+&bqI--r0T+9m{NMh9Gub0{CU zI&rXc?cgmpRbrB+d*`wP=GkXyc*!M!1YZfA!NSg1bXZx_fhq#B0I(98o!ricYW1og z@Me(tPge`yIaswB#xIh=iVx95ShMfco4_9DMm^wNIfVA2)h5Q==3S8lkKH zYC=n_h^KzQ^ON~@6%&yos%jT`!_}MSJ(@fHG@^b3s!3~`{ot`^g|EF~& z4uk4TQg!(B54o1|U&o>BNBb0^XTa`Zb$i@Na$S_K$qZBve+I{U&n8_EKc=Q%7N3Tc zAi8GBTbLGKq#lqMCq1K4@ zK$o)dqE4(R^tfm#<~ ze3Kq!tmNf`-8KXk0irn(?qI(O88C3^Pa+=8apHHEr_gSV+a=yR z3t+85C`_u8q{JsG5^*kz=C--4qg92v>>bJf0aa_}E#pc^8yfgkjg0(!Tt#751MAs% z-$M$U=O3-qV)i4b*SzHmr|- zlC@8py)qE^Wa?l|7>=@(Z$+Ep`s-TJh+(MnTX`NP_F@`_W%2DSkS1ym@aJb+v_Up@%ZeO zo+ND;wa(A%pyZUhU{x~wcq%rgg%J%+XL({&brF~K+jEeCmAv2;%LdoK_ z-n~#Sqa1XK&9ra?^ySEo+m+-Ownx{=+Rg${W9X7P+-eE6d>2-0WvJ5?d5W56A_gEJ z1jM4purA3zRlvJFxkFEwaC;Dx%2A8InkrQ@qJePVRWy`(gv@tmg*XCUS5G2^o==R@ zO__I=Ht0|0cIEqLPvZ`&PrA5d4-8flJbJii2S!s;>} zyg>)y%m=x8vgv~Y^)q}w%2Asir{Ev0u^>e&yG}+X$U6j8lD&!EFS&H96f zXB!d)Z$o5;`A zk)Y(YqW#u+&_FZ}u@0r)FhZD^sf;&+y`HpGk3jAp&gVlqGOMj&Kl3=r-xvtSEB8)x zmi8)3Y`qA)TYH`DWQZ1I61JyaznZO;nt{sQJU85+w+rs#ezs}7Y<#A#YKo6$#VA8$ zea%ecCK4Q!B>rbsla9m<<8s>ZJUyHqot=l7RNzdKSK#T+PRRJff+$RLN{7bQBy5Ez zy(9eMzp<`iI*bcSaNs*1>VKkbA2%6^X^U$6YLtIYAOp}E7UJT-T1qfUnSEk1rC{Bd zhgWqzd)Akft5XCuwL@=m+GB%eC56xOTFznN0Chr}4}=bZd%)XvAq-WLYU5IoV#??VGB`xdn|=b~jBzI@S0pw$RJ?+51G^>pI;_A+UXnMtIJ_ z%Tc)X3d>wjJe2r=3Q!XgxgJ~&&zdC=3+J}aju5?EDv_X)EVPtLM;Z2h&Lc}6*Exr= zfuX=7O-YMQ-s%flm(~xO0`B-Q))?3oh*N}kqF37I6fI4BkB5^0B{Zjj9TrAFG)Z(K zFrLDtTZr&aY8}$DdP>OOk7hahN8U|M&TO)STIrp0fkjBoP%4oDsTID&tbraSPXxf+ zw+Uh5#e#aji{6b;ZBAS)GP(Grsp&rD=&9^;Q#Eox)k|o9*J(5SkS*2%n-R5|s>Da# zQL6#q3b!w=u#!@b1ubxJYFxVgVviFcX*NAj=?x7FM`HsDT&!|wT(TM_@nW+coz)D$ zk_#jGs)A3c-O||_rZhc8SsDsAW`nD&Vp{R@`r4i1zZ%Av)Msl`^~*Vn)M0Cb>}O9EU%i*7`37P;}I~IAXyLUI{54e zLf_8Kcjb=JtCivUATeFJ&AOdg81%0tX*URnO>kh6nlf_Gu7gg&@~$dZ<1DPQwNe@> z-WDx0Zlv6V(RKZlhsi9@Dxa#F+~B&FB>57Do*g4?yJn`0e6~>SRLM_z!M&$2d%p9! z+*`SXqE8xHRoCzKe`U1L0g=lC$M}W}4!iY$gMN&=$R*fP88()g;3{@q1Wkm1#Bpp$ z7Yb}w5Ky}BOH<>S`%1kX9Ld}RuhnDFTUT*+;vn+Z`KJvQl)R;B`I>J3o|PF``7voa z{VsL~-!yVgQW)Nc*BB^_-%yGqC~JqG8F$jEt{FIH;MD@ZU5Eder%Q~DIEBmb@}wh# zzoAeDU+Zo*uQ$-9OWLN@{Z2T%Flt2NxHrmJRF(Y{M=AAgQY_e<$(m8>R3+10c<<=# z@Pv-0kpltw;$#max+TL)ZhbHT3wS_fj+r zi8$V|iPKm_h70{gc=S*7$MwKuDTFAYlj83SB&u%`6Ym)5+<_B~Iwbp6iywQRbv!c*%#wWtXqQ2Pbvyf zp-Jktg1jN!uHl;)QUBs~1KrSeiW(r1wY{ec7s-9LTu}cAivk4o@4AgJFuso|A)ssQ z+Rq$A*&F@2@WC*(q>c1-!WF!;AXPrFeQdhc90s;%hnkJ<&`^x0)Tmm^DE}>zrj5;_ zhPslm57c0^`FDxP2Dg>zyO>=*Ku)Z1vK2WJ@Gt6K0I`YMx!wTP(f(6F48o9_BSl_6 z?MK3nsE}IR0qqe9GwTmxHuJwO?HiDx+ik=;YDiNCwx+p6E{5j@3iK3E@nW1N?ShoPW{B<<5V|i~Mqnk!9GywHVa~^WJfVPVj{98L!f+Rm@(46)(J>)R$hv$3zLG) zX7&dV`l}r2LdJK%`i7D&q$TU=eFOEvG-Xo2#m&4icn3MB_m4!Jl%}oBYqcBJuiS4| zmsxK|LPnS3C>;Di?e8=3-?5v(muB&2oD zt02cm(hFsKKdeWnx76hB>7St_x=;Nd*zXXo7Yik{gQ-CK=dmWl!8M`ry(a?dPhm@N*{NCB3TffoUgI}HOe3MxCI zHJ0@GucXP~o*&hKsSY#EQBzreifa&K1NWA(n!agdiBri7gH<(M1~iM7I3*m`&GGMh zQzIEa$u;Dyu^Y!IBoTE7P7Q~9qOTVH?|f5CrMwzE!akXrl12-5TX)3I4YL*TnWd&; zYpW3HKIyUZY>6+9jKLBhJ^b=JW5pEwK=aEscWpcy`ziLy`=wFiCmpkuw3X6-89$6;&)X5XR)0bYUO6zA*%fV zOcS9Zy_5|Cc2*_|t~Mw1idXG2`q*q&8|uVNt83|CK>}N98}-(B$?9&nvV&y2YixG+ zh1}w`KHoWSy4|GX^W{)f`Lk!|)!f+w9L3SVEYF^)30BMDyCQG}I|rBl%}0NKiL z_yk+&EnvsQQ;E1`U*)rvs(N+tscawz=1^Vc;m}JqP;zU;j8=FUA2NP05 z%htvQLZ9Og9JCbFTZJQk7|Zk7!Lc~{N8U;&D?>*)s7rP$r zJL9itu`TEHiaZ>c-OSxe0MGWj-cx#>o$Agc(Zf)~`Q4hY-A8DH%)Km^ruAcyii8$4 zvi%mOKr0$=-V{1Kf{%s|k4~#S0&CH`G_u8L6NX6=E3Qv^LD!W24AZ%Co#8iDGg=*Q zUdMHgsm&y+Ek#*0iOn`Dl$ru@sDo~a7@3a00h8>sxj5B# zryOg$WR)B~AfIa}myDthFfSYV6&%Ry=nl2KqZ=IW_5xLSu-JE*}UJp;CuLi1!-=nwvDF2s7Dgu}vShv`F8%oDUftoRCE5bB8*Mj48UC3MkEq!E|bk z?A;hrqj8VLI)Xo?gZp-hOP4)rTGk##`T znnVVBI7_WV8tzFYAe$@H>KGMmt4W-UpwM;6WJ~Zc0|PHu$z~uGjcs|b5!oK&9>DdX z=D7l9uW{TmOh>NUuKMMM;b?jnE~hBmFUx8jO+Cj1#Mjj3`ROfPtr14}un4~eDwL*V z8qLZuwXXw0O${_tjZ%RBSZR_x{4ntou zA>k9ULL;t^s9Y8Gn!?d5?yU-fmWLfa&z>y-lH80FLYi@E0u=W$dy{pK%LzU6FEz9? z1OP(d+hm<#5(<<{T)cX+VnkW_IKA>GX3|z5EL$D2VCuL#3mXmLsxSs1g&s2=nwAFR zn5&R_3=R0S5G9}cUy2V12Cgd+u@S}6fVrun@9T;V+C@t~^hkjoV-2ARL0>w}fF+te zMarCoP}NwH82|XaQYEl8grD{jX-C6Nuo~Z!xRYC@)jkgbNL^nrQ`K|np{==ZSbaBw zZR4a=9QqOpDgrK>(}`H6LcwqYz^(3U{WAdy%&3vM>0-Yyc)1+dR89>w5g1(Vjq zdK~Z`_`~E+O=sPgd6M6Y4Adp35Ni~Q7$7+YM_^OJa8IQ1yS!=WLeZ&VWLkNXz!Rpa z-3p1u-2WK^dLg!_W_!GEode$gmk8Px)j`tdW_O7P5eD58TwxQ^;qw>=Y*NqTgFAIt z{f6pEe!q>pyrKf<>dFAeGru_o+SMF)(vnG!^>pA??YaB8s0Ep1rE=IUxl6>8{$mlu zgQ8Ql?w~OpAG|xaESLbpXb{==#)vRL6>tW~JQdnGsU5I&N^&6{`3U||m88|Ckb%42 zh`Dw{WWlVj|7%DA*UFzt+xmr_@}fVO#_0lPV?itd{vM59ApSU_qx+@nW@!b!tUEMnN-w3yLgGy`-&=_!;kLJ0zfvI(wP8Y}>7X}88F;e2V%Kde-W@|$u;m_{ z#N0G+lVp(6Ir#k$;^bNKGk{t-O}jzld(Enj=zBZ@5U&Rn_7F)Mj#3xw7y02Ieexw>DmE zkVdXmP+n(R!$j!`7qD~>X?#6Cj$bek{J8SEcS+!Y*-NkPb`FyUv6pIJF-$}WOxnl+ zzTV!&M=q`IdCr_cKol2}TRI`TCqMnd)XGOD48Ir<0Ahe+9_TFU_4zVXNd#8*6La-Z6x zbAgo9=>$D=3tfhk-yN}E68<7aCcArUBCz^4ty#wRPF?F>W~bi`%Lu?YJVp5BY0?d9 zuM*_Fw^`eP2-8mKL8eh`Z~I^bsaWqScKX518c4%X1;~i2au8qBgWmh>Eu{21QZOFc zm-p{>`bAWL2Im!LNo)~+7~uVnrK>29HCtgSFH(Q*IM~+G|3p5@ocgn5QYgMbP%u3~ z{Qrx9d9Ctl9!SKP$SOpc$p;(bzZ?q$9e~Yn#t>5IU=jY^eVO{BzMLxQ)dK ziX|quIxG)0Ut0C9g~KIm@=!d2_S2MRD~1kn)k2hHayVno#qGK_I!D@)7lY8KUQ8M| z3=|Y9#G!dq1I7*cnIid+%3+Ay4daLxPvk}qPnaN{e2&c0H434$Qsv^7+re(^N}-;U zy!3Acfscy{#g(Pf8Q02}7?vC$F`RaYOVxzOH0P55KQJ;3LXHqsu~q=0@~`l(sOC4T zsco%p+CWUlm!q_I1Jkb@Y}yc)l7PFSkztSq_a2H}3igbw?j;u~yL;uv8#^gf4>#($0$@yv#=6h-6M{Wmsm2@ zx$#i2H*u8v4r$NEtb67`UicuWy0bFl`G}xlz+l>66_@n-hMjX!vk2dU|^#aHFF5j1t^Q0d)xmj0gajt=PA)Luf0ygvuIVJ8(D|!tkuK zp}Ex@kkHeCkzswR;EB*p$uX43#9;|f%&)_~*BD7|bS-7AR%y6->`9}wfl#hd8|P%P z3@NCr)Nw7r3#}i;Gnvc7t8P_2UjnK!en=om!ezy;>1Y_~S+4myyZsA0kEPA9(%}@A zm-SfcU4?E3DcYb@lQ3t&v?brmBA^x=7AD7nLd{!HHEC?3N;m}9fQM{gHp-5w>gyKd zys|`*(%|5A4$|7tAXw)#gBv#J9V{{PF8ybpN4nL5RJkp)HXC4+5P?FWK_MSI8+F5^ zJLdH0L7~yN7`d4uL-+7LX$=^C;K?-%@CyV@n7~nI$#5KC22ctL)~Fj3sPfAtU1G+ zlxTDP#_4K8jT`fSej)fVMGPJjJaiG0%p&jMC`}z;4CaHq4>u~=&;61G8D9lLR>uWp z-06}cC14=L9zS1sXsUok(@SBc31INP7lNCCZb&;V#i*(GNOGW7jO*&6sprIZkzbx1 zNMrSsi!Ww>aU%C8v)yRUz`f<;)tUI{5e#7eMpmR`37^qndBVKMQoz`b^LAt@LfO&( z7!a%}=F5^=T2E^PjMe-t@}x{|{uWVcjNsbrTYsB%Lm z>%vdvW8n6K3JRNB`;5t2l$UA%_A zTACFTcPeGwJBx(*>owTj>@;GN3b|hHS zx-gE*cg~}fyf!whknH{805-&??lWIv{31GAM3u3Bb8D;6{=)?egKnP&=6f~oh-}ux zGVe2uzfHXE?k+BfSi~g0dyX;6R)t8chI+Ty6RheCe0;N3pE5Z4$$b{IS@Q5xo|ulO zqKF;}6r|V_p^h`-w?~+Rm?xa&Ov6iSCM`jBH$a)5Mle3429m~f+CBk+;jKJ`{rk9h zyxObhPj#fsDvAd6q%vTm%a+1=FuwSmKH@p{vV8mXC2G3zuLv@TD93-r+gZ)Ok)OGX^-#oY* zg--9f0lzR}Fp560d)$^*oUP=3Y3`!C5w~G)4BOXi6r~Xn5Y~M&cz#?yFSs!y=2*kG zj80jF+!{1$M(*dvgc07D2u)#drLv-{XzDf!RNXV8s3Re06rph9OPuBvB0EYlo%VDu z%8Ij`8hnORQJ^@#oFGuM(qNvmyeWTdy}lAVxt z8EG4n&4cvy^}RKW#H{xGGPl&M7mG}+ zRqBbep~3&Q#S4i>^Q<~*j$WzZbN)bVY&qU7c8sGBL5$jsvt)a6ya#r~h324}&fRBu zP8(_)!~GV?QR#=yGd#+(N{ft5|N8YtGJN&vzc+pXe>mEACt9ep(y_x^VwoDs$LcU7>(zC#L`7dx^{H@l;6(fasE*FJB+Bsjo9a@OOO zTUT#^4>rNx+5&fv4em9IMD$n zq3Fb_t)luu$Z~)sj_)<0Nm-nma+%uIWo)Q2C#JkoLXyY^RsmnlDME3<6I(@65C`Y2 z+T19kIAt4j%2+(Zks&oFi@BO$G=>-E{7B~w>(hfeajb4;U63D|_dMa3vqe8~ixuj5 zH~q&lO4{i)eUEzkINg1-YrztOc7f_>T!Xw|J~|$%m-{VWqL{@&M=VHvU`(}NX^VU{ z#Z_We*2r$AtW`ap@btg#Rm<0xi97*F^mwPWe|@<^M3D_*;iq#WP_QgW@F#((F&#ur zg}_5@DEXmlJ0|?^uAj~26yPulJ?A<%5 zZ;XGa2y1NY0GJ)}zG}0kN z8Rh@NXRsyDgX4r303mJwJboVoD3xVAEF$1u!1^#=sad*g`yehKE$BG5) z^J)RH-x}25Ami@N3IzUFGt~i@0s^0q{YLmfq|qGOlhOGjVPNQn$*>7kiwW-Iny_u; zF&C*4edUpjR^HgJ(^15OXZ!okZuEpS-U|rc*rOA6YHn@T2AvYJX^TdM@f3-nc$}d5 znG}xwR6(laHbdZA6~vEm&;{$^PiBs7KuD=2W)MUQ@TM`E_GUlC9;v6uikI)aU{;ft z!W=u$`Oww&P(j-+BY%>Qce_}J5V)?w|jFoFYS!rfuiMK zwtK3PMNnt+81_tXke8l-*%!FHqsHpLKV>^s-u=O+P~=7pv=8D&NWX!23mkGo70C5v z1NZhM)*W+{=47zbW{{k^bS&@##yYy5>*df!$ZeN2&=>0Dl{iYC1QXA*9rR?Jw1p=$konyMcF`Pc?T|%C5C`ak!b8=>4>&Q{l*1#C&`($KvOs7I zXl?{|NqE*d_u;1(qJDOlvayU7sF_W)Hy!5#yF_EVQ|L{&urEj(j=UwqEnJ)0m>*c- zc!n&lWlu;Sw03CBOD=;I5sVSKTogJVPg5fNGxQ8n{-ewXB_g&+X}FGzzOhEwu-w!S z7^;VOaW_~Nc~I)jx8@ANmYE0!)0zIkTJnF5b4Vz`>f8$gnHM{gTL;!QpfI=mcxlX& z!-zu#6Cr$vy^2T;Ya8a?2LX#jo>}2UMO^E;rqt5j5U5L3PYN*^mA&m9zR`1k_YO5; zlpl2a&M)o*5}u!EnJH<4*%46uWKL6{S)jCTj?=+C^#D1w(|w18Kr*{#zQ*h=W&UEn z`?vP|O&W!PArVaBpwO~Udf$J7HwG~ktxDe8)?{~Td8f*cg6JYC48BYmI&%>0 zMNR8Op;enZH|uuLTTe|*6=SaMjMw70i{?UHiPDy znjuOoExHxM$phUM`z7DYz?~1?vcTiFW4On3t+(-TT4-(G4g>d8*b!SuK;#jg+ML4q zX&3%Sh7Kuayd}Y}?1L~Z)V6KH0{xywY6`YRFKC#sxM@v z+COF(Van&D#NIRS_nJf_Ug94ee0I!`%Ahh^pK~)+%mzT{oY#XSD~lKjtXO1RdcRzj zM~0g%903=Z2Ay44r6@pm%N1*d*lGBDUdi<(BF%=yuj^AmaK0zjKn6*265Xu;N^IOdB{{Bw9-e zy(S{rS4l_29q`r*dfDITu3}t|u^0q4SnY4HizB-=H1k@bN6#(Ton8eQm{D1tEewT7 zSimsVoA}GL)$3c=;`)hPDgeF~k1!wvPP9kHJLU6W`!WZHin-D_*s?kHj9HppI2~`!ruWdEEad8MjSV5k3HvkTwYa@G*&|qdZ zcIu238;RlUT4@xn!Zs5qxi=L(Uy!g|anmA4Jj(S0<9vB2s^_;vYMV5pcF~HEd=4#e z)$Ii!S=k;708gyJqy(2lGzT0c5vs?f(+o1pEL4d(IzM-D&0XolF=E}ndDcy%-(}ci zbPGRpg!;+S#J1C=lplZHBaVPPVbLwN*|#OV?3%X`4&6^Z$Y#>FcL#dmE&5#NjdB1q zvlw}5BUvSRs5TlfXhD2gUNV@o%>#ZeLKDL(YoLub>L9`IB_g^(_#hb zvwYJKdAZ@`5QE#Hv0`Gt?|bR8;ON1@Kw#{^*(NM5TlLR0lNUZciGk>9xR5tx^ncF4 zn|RBqc2he_a^RbCIv6;wJuauy#+v?SP2Ih_u{Dj)ltNj<;(b=sgpBHNE+VnHU` z|E`_lEp&-)CR0YT>tNGcY~> z6mlL=-SXpI@z}-p8%Q=FJ<_5{x&NBNd&ajGO&531dEF(^4LAOyc~L$ZO&^s$G!anN-x_)1ZU2hhr9Y2_t z(K+WnRCLoavj2R4)pdI-2Bwd4hSKc2SZnL#?&4uD$CRJh7j9s(8fzddPML!bopFD2 zcx`JoL9`L!n%gu<%HN^=Wu)`3C#;jm4w!&OiHzHArF*Y;N%We-Q41i3g1P@MGe5^G zN1@-bn^)1E#I*cfq`q&{&%bnie)|GVsO&0C>HohM{_1$E(>zyJ0!>Y_1?te7Xmp)| zsuPx(4vo8sE!!2_2oKt^q2JB}#GQjAx8>$96*)}I`B4S$E7kOaq61~S=g};Eqm{#l zn*;+66UZxHxluU7yU3=f$?}z7;0LSUV&c~hxz`=25dK5k*KQ-95-A1IHD zJ>DtRIYacO=e7P^*RG>osx5^SNe>-(8U7EKvjwx{{^EWuJes1rd{zZnM|-g4YhV^H z3ajdcSKceeTr!p*cHH5^j`~RR&AAFJe4M?LC!@Bjo5>D5$AVjEF^3*u(|(Fo)J0y& zMCR&}mZ0FvHzmMgGTnlHbHN8!%#(6){@r52VLW3JIo&tvoFqdfoW9FWZ=iS9K0I=d z->=$snW@xrx->7n8Ip2U__2!g?5R+%IDsDI3F-11X)ekpGs*@3?#;nLM zs7E@+?vU)eZJr-cm}syyQY!0lFBUCB>*drPI|Uf3xhHa2cR#)qM#L+2C5Q?QluPNo zl5ejeQ)LD72uXTi5@L8E7h@Q!9lju~e1@v^JRlwmuF4;w z6bW(4EOMt++@=`~>+&5XjFf;g%{H0PJvwgQU%P5ben;4qc*KA3qfQT7X7M}&*Jg5v zI_`|E596niC}Kfuv$QP2JQsN0RY$U_2*Mto6SSO{D(z_)erBeu2)+Z76aUukTV-Te zhY8CDxXYd;|Bc%6t|sePlrohr_b4fNtv(QmaHUudpfPl~lS(Sydh4zIFI{B@eL?uq zDn~ARd(AdObqWAwII!7J+NxL)hNM5$WV$UrA#9sq$3a#%$kzB#!IwQhwo%^J4M=e7 z+LOxwJsu*As9+^rr>q3B!#@qIog|P*vvgJ^=K@w?nq;M=QYB8ZL~N@FIV&)a?=C}& z;`Xmcqv%=iU2A`^I5N;3rIkshP)RQ>=JYdmqs5LE-Fe@~-q0>qzzz+uti}L{Di@!F zqvb*FguyBdVGdiTZ0kWyd2r7|M5vj{Z7;3nzs#Nn%PhO!r7y08=EyDkIK&6tVlmtA zEUzclBUCIgm?*hekT+g9Npij;hFW>ojh1!g+372&K<6M6VqarOw|oW_qqdfzd|@Pr zFtD*!f7E=HshT_5{C*vscS90stu(O)Rprc(7*WxD#8}_Vc0S9hbD~Jo3(XWmU3vWU z)Ej%QAEOU+Wq=&1{C3Ol{k(mUYZd8!siBgx?E`}1b@l1*(pQbQM0?x zywqlg8-))09QXUVr1+7^<517-{M=(qnQmu^v@!ZS(y)|C05fQJ1wsV7Tu9ehgX-E!%_*Nb2IAnip_jfvWMsJitN^jABasaZy<3hK# z{4ANnjJI*AaX4DI4pWlp>8hcUL@#VM;_Q5y81kK~g?}iZ6Zk=9Lu)vL7t&4Me5(l7 zcGFWzOjW4KYCa#1xgMTzHlohPE57-OejIJ3tvgwnG6bB`KyjTBK_MT?uy zTWiv6yPacU@gvv$vw00mCE&GnlsbwJnk8*A{ge!xQXEURiH}R4tTp+M;r@|UlTWIN zfmu`$46TVvgJ9!ROTq~vToUS3K)pWnf+-!yAJeD;pTBM#4FC`c3=j9}>kz6?1(}p* z3|94_X#EHMy$45|}qsumm9#75W29Vef517l(IW@QoPJ`++@lu^O}>F5e> zzIw}Np4 z{0&2^XjUeE|6Cn(K7K^(BY`>0=eGOO>0MLIU08SyFWx=MUy4!wKYWd8Z9gG!`xDuI zN#kSVQ3jwPwAZf%iqPYiFc}GB=iEac>dO8RC(nmdOyoDo!JN5Y zSn)5&jqn_85h8UoUH^Bo3uA9ZMcE8^Gh=dbNmk6eqxds(sk696hyR3uWqygxZVori zO6+zI;#lpo#L_x58EAI~M1Do19w}%NtiGR}jp!k1pn#<`O+mr$ zCxN{u>-Em0lZfTMbkChMczUOctLPO9&^;%!mVCPF z@o%>XIo;YC^*hkiaex{{j-lW_CYVk8w+UBmap)`s7~z&31_av{RnnooJ=0;P)6@WR z(-dmXsV;a&N{N4TE<%9!LQ-zvTblhs$3iwQ^-m`yG?&K+JTlv85H#*#fB)R^Ewj54 zMf7E-gSv$yfEx*hoe_~rswld=!jZ1$9|7lV*Il$U;;RW>_Y$Od*5!ig+O$R(Sllj+ zCfA*|WW2bTIV(#J!0^0oCDW?HR@#O#r=zc2Rz(=2dVnNSYcN2w1J6B*VD?`iL?Q{& zwZ%R8#LUp;2U%w|YfGGpwk22}sW?!qTO1xC_qOnatj0borT4qqruJso-?}o$Ms@}Y zqgC!}oFlL{fWbH5o2>=}m%i#Pt`Qo>05FK{4%Z=)f@85Mo;`Nt9|+E?^?AgH-L!#! zz;9k(`@&|Ys=ZQ&F}-)Ih~EvG+uCXej{ZxFryu$_98DDLdqnK1HA&%w9AG&#y$fe6 zIkXIcTprYK5sSEZ>IfTtPRNHvk^Tz`U#-U(lf240`f9h7DR2 zbT50Wjay4rbW1Wh8K;ND`S(hJ1&4C_b1zGoZF7%E=1ICQ$@>|Q*95X>uoNZ%AI|{) zKLEguGb^y86KPl(*@-G9c~$$6P(lnwG9*L9QJ@M1(yR`_+l-L_>o%WQsIh#-3Q?T1 z>^u;np6&EEs*b1=(a!_m?MgY_QG_G0F&@ew?gPz4%-+B#5FHI5@(%?La+oO1tm0%k zXMTVN@WUb_9WH0Wc64c$K?v6Teu_-}`P$tpEBUF< z^ARBo4pfVo+@Us;WoZi)Bt~j8Mr{e=)8Zkfe|B74V}=I5h&hCf%OFm%2NZ*CLgz@K z{fU!oZZEB^&)C(u6f7f(6Myi>F>OZ;(qf;1+9bHBWrG`s*;Qs%Gi#-~SaX4zz}T3q z_cc2679SUPT+oMpf@JP|b6InB7o69|!Z6l8&9(B@*bf8SW>8rTOZN|I`?y33sN6jg zRS`w6wYpVfsrbN~P5`*X@Q020uI7C5t+SrXTE~9${4(mBwP<}LYLx)?yjl#YWXeEk zEZ%RS5+2zEQ`U36mS{hpkxK}?89scH4+|7vD3?You)+iI+nfK)Vf0|4`@XURN%H{0 zk<9))-1t$svj{J0oo>paToSf&LF-ycp=>A773wX-84VwdP`H6W#;R`)x#ZD)Ewz78 zm~D4l$Es;}D1eT`P&v0yUj@0{S1gEo=D5VdP6{TmDEw_VCi0pKRBvlN5=)}vmLs1< zo0jl;fnF1Q`lv^B7JdQgOjRkvFsBH&kpt#M4~1Bvtm&qk8b3@~Jd2Lh4RZI3fSeSp3=sx&WPoY6_o$*ac0M-$G$#bAdzQylGKEeUah(T z!?8j-?e%0-SQ7P$%t7LuuYx~#ywB6%$sOqfXb}+yW(#Nt|o2 z``S9J7d<=~5U{mL3-v0#(K?rUPh2CXCrx!2Ff`IG4w40>WC{$HIX=XoH7N6&P9!%- zRvhvFD=>p@f;{9@V1_7FTL;gf=(U0?MHUp6X(AEOWf#8kmOfrFm7`W9CO|VGbtt7KZbJ@ zlv2gM3mfs;M|73>Qej38a2Wn~fYAEd;G|BXVkUF@aHOQfd;fKmx=ZVJ_ZVXD9{NMT zngL05{MDER`h#`~+I_MGMyIyA3L_yO!yWsPgg&!q9oe%LBN0F4TKS6C;5K+%EC$L> z|MHUwUDR63kaa(kkw+C8hR#=><=mIRByfomQwl?clWskMbo_}o-T1r&j)5G%gt}1; zhT0?$iyZ|7X;TW#Ka<48k|d0>yNH0Kh()L#cp83b=mz;l@&C$WMW}N_4=)$M`bjyf z$jedsCVf&eTjElLj3XS7UkTx_Kr=9U4VQxo+Q%$jH<~%i=>M=XRnkWX^QvWtF6H6C zlv5Iagc~Z$FnUw+asW?R27;C74xBgqZ^a9G4bCHZ2g3f{UKYvc>-FnD-%S3+9n)R=a3WHzP% zGr0?nTvZPaM^B&q@kmgI!Aje#?CK*)kbof~qeQgra!Gu9fHzG`n5Xt;BkM48B_&fa zi4=N9mC-D(dNkX!+^ge5@9x5Eql^^e(pv$dQ-_iZdQfK6E`Cz1Eu&}9RDTriTI6?1 zaJjp7Y+Yj}bzDj|3pl1Lg2L;1V}+Pa#cqCDzu+{GV!DJ<~MSnd;w@sf{e;qw{ z^G^FFj(XsRP7)ur_shs^sO}wXX#3^f7u;2hmLGPvFk;s8M-Q*xD*3Z!+xAF_ReMzk zoE^*#;=sQKQ9Y;7mRmvz*r>GQ6r7XR7haD32HS)kJ39H2^a23K-HS`e0adQ|+rl=mj)zTRB!PVNpFF&t2I{OC9HJ}|RY zzfxhi3sTS3Ce1sX%^b!*P9)vM+EqT#)2wHCC81(2)rD0|#OdSlFOOUc`K+XYd(X%k zd3ogn?mlMS5$p;xbsUvL*gsLco2BZrrxP13GBO5Hx%8B)a`;Va4z=LPxG{1REOPc# z)YH0aOV={rAxe2qL5;_t&(~$r(?hT#w<+nj_H0#w%;=--U(D{^VA{mV37A};h)$JE zk2$1@{TyaMS3MJPXJ{p7W4p>7jfolNV!l6UT9osPd7@hr@ zMzo~n{0v%; z3ZSPBT_CI)*IgEgS{WsdVP@7rmR1GNP?Xv*e2>e>zvuuDN9FWELWVnjrv2Ethfoot z=?L|ZJe?{tlX1x~b=|AS^E4W1l2W_a-7fG3^Sm*cb6wJRD7@T34PqE6al~mn997e@ zC)R-BOIAc0vMXDZc1w3gt`=*PW4yu0+Kbi`>G=hKBB_cM&#@K+otdnFM9&jB3FAv$(hfw}lU%N^^Wz|?F+UE3u|Nn9p z_Kz3b>-j6sNhrP!9LbtR&ioZP4Zoh`wA;R-bK-MTE8Ij1ZEJii519MkfEEX%rzpd; zYPBxzRWjo-G*c+iw{}J>yY?C=prZoMRc-imV$pB_zL;|=UPke*@I-qlZLlbL&8R-@ zm3QmXYh_xd>;Iz3BYI9>B*^bWRV<{Z#P_tGJ`)ITdr6M}CcM-l=Fg#f{f1@yeAZbz zamSIQWzvv2ED=!MS=X^mK^xN2(L^}?a299;r~feN#5!OX8l*dD_eJ?xw<7osi9%2I zi7~HHR7r964vMFRDOx1hb>1c?&v+*wxbgJ9{@-5VxP)n|OOI=70s_nL2O07>B0wLt zDDPegYMch}`1(nfE5PVIyCQNq6*Co`sB-b3`0BGJE9&`E>K+Z?qJu3>O)<*Nayz^q z7GF+wFgrtY7US$$1N*B~NPmIIg2q^gYR`@#zm1{9Oe%mjA@5%k45swh8wWNo7xra6 z)5qXkf6}XvQz~a@6%=J~6mrdoR+EXWq?G53>7mQliiy-9ROabJxcRAz7A<_yZxC$V zg4PV{zz?+nUNMA+Q92|bUsSId*H1-PNQ83}NA5}-Dlhazu>Uj z`dWDf!PgCrT)G;HS}15YpBV(^DtzdXf=13I+kDc798W>OR6S*(tuk(6$8j>f)7@_I z!5d^Q`jM8Ej41nMlcGo2MUVc;ts0NLzTI>)IR_1D=f9T481=sZ|3=F?NaHCydIQ({ zO9n5!3{dcVk#y|w^l@EoCx->P*u0Jnv2cBNf3Nsy{}50Ccm`PEtF^bt<456Mo}yHm zjk?nk@tR_baAD>pi8hxO*~2YZo{U!bYY?do)Loh^?K5-zy-J2Je&uL|-HuDeQR;IZ zyvdE)V{hNK#oB_^L`zj2H^?Gnp-$-tl}8tj&ycp^QdwgaC=7Da$7+WG&1ES;6xSBu z3Qd~mIrix^6fzKhk1i>@)G)HYjizI6apo?!h7`XZvfz0c{4=k*Plt)l(7Tw1#bsB^ z8bZ9{8ejltzw<9F_6tt)fgvEaH{hzu{PLrL-M`~(qZ=k4ZjcX+CWibBpHBJ#AetW1 z=(`F_=;P%(e=>0Q~#S9>GI~!52`Y%)H5NH3F3q7|^8ls;sj+ z4UuXJjjE*R&*BP)(8KMc-C7wNbXnE~q?NB}ggB)*<@^9%A>_7m_kPavd#8Gg7Rrx3 zQZtCXPR6kf5lB%2*ImZ(nONh>)smj@SDfpI9TC}Xs`!E5uVlQF7aQ z{pIfCvo~exR}PF;E^HF53^DqKStzk!lG!s8k}0#brM6IBaA8_Nz&q}>8eAB=Zux14 zL--o&=c}h$mt{TDm6*@ihRcSBrLR^~bn89W@p(zU!zlt@q)S{DxqX1wd2D< zroODiW9Ly?V$zoY4m$bHBc_mdA+Cx`n9w^b2s%51{_=Ecr3rb zd1M<5p^?rYP8&F(n6p?tO5l3=n!Zj@5D~%%&6u{e%|}~SUAFQlUk zW$s?tF&gan{F#_G*ftI6GGy7SMzuvU_`cqayb|6-4JPD;->|>(PFw-J+OpPNGnY&I z_3Y@NdOg6cCxatBqD+rJXW&J1!$U=FizK~s>JfjUB|GP4zK=Q^$HJ7d9Uo)otWp-h z{wQg3AvSNol7U8Twq!7!jDxYx;J4>MfeEsu6{%M_aO~q{>X#Ngqvzf5&LPYqmFUS6 zHe5e#{-*zgEbnJ}4?%8v>tbLw0^K~(RE*MAiSu%h@ zBZD*iP4mxZH3-E^hOYW3i~<#PVOAE+$Q_OPC6^@@@oc^rakVR2ROfwU-`(94>xZq2 zm~u0N4S%30)Mu*UOh5A(_Un|u;ca+1lmIe=aoty1SgI;pOpj^cM6*$R*ASN=16k$Q z!=VFXMt01C9QVR)kiOA9Lh1c%`Vo_hFc%k$AR&x_vv22D-JcDEJ*aUbsL+(0@)fm( zNQwAosgu0DNiPnAy_33ON-&|7i0pcbbG_pX6x`&P(MKtWL2`f1)l`wSWuvjPX$CWK z3RoF-0#Kqz4tsE!Wn?cl@}FLbKAdZe9nG6u`|VjgSjj-h{NulvHNVCMI?B&r?!mP> zWKLcFOU|U$7v+xnE;*8gMz%S#qY+TI2nQF1HxLnKf2bxp$lnqy-yvZ5lWRqWH=7bq z5~sDToJ9x{Jc<1&v3isY zuYZUP1;hg-vaHi~V<@q16qiYcN^`!26wT>cP#<>O>=(ehH)D-O6LrGg?+Lm%Y3}+( zBu=QC&!gK#dzWyXiOQS@(manbnw|WtVDie;L)(*pO#aRi3`tn`ow2jgnE}TgcTWXv zvdD&@Ylx2ttF0eH$_N5%%#1#n8jXy&k@?n&{hPbw`s4MxMcwq6U(xenAmKtN3@X`v zZjGI&&sJsz2Ey!y3kayy%juONqhQnE)4YR9SyIn|xwf9WJX>&nLY&hEE2zP)v_708 zb;+2|+b02SVr6l;`ul3T>p4zNdTw#Mvc{4*22K9dUoJPS1#~SFss(7P*2G3UG}d2w z^~5)x()NEQRl;7OI}F8OeG?glX_b&Id9`jZ8Js{8jZMIxO>xFFk2rZ8)r7r15c{&2 z_Ng2L)(Io2)VYNX3$jY7DN!6E8?UX}XLKx^6Y&dts5NV#;wpb*FmM1PHYxBuNPpg{ zaw46%=&r?nLVT)lDgi5erT#3()YFQM<^dS9gPK=6A<(@FHL-$DbeOJ#QcTe)6xA3g z#D_0p#=ETnwqj%R^1mEF5zWo0WHzn1jt>MsrlBnJ}<G-q~=+nD2l6nl&Be$0&&^ z?cjxsPqf~AN!&hdU{>w(_nW>&nlqo5RN_Ym#T6WTYXhbdvt@5h;H7L8+d{u=YUA&g zJZ9pEm<8KC?O zqzzJJ0d*o(Pj!9Na2}S`Y4(g!e|5lAvN>osrC>5gZK7FqcP#`Tv4tJx;9a3uvOQn8 zuh4sL(Aj4Biy|U8tk5uPB63S-0o{m5D293|`K6I{t58!*XQ0k(~m||K_3>n|A+2h+Igh2#{ zbdN7YjnaHk|F-ZHEB;#yv_R@IozgIAy_Ne7?%>ST^syx&xYE2(K#I@f;=N>M*vwtR z!y``F1`n|$qaa%ZwmazX#g-~T1XfQyo1%5DJBN8QUrnXy_iW zQmFH}U6C!bs&7Yh6rxafoH!$rc7!1b!=4l9B7V#GUCkL!=r5H@LWQR`UW`3Qm0pNMT<01InvaeQx{bNLd=JfS9+P8jHo%k_g zu_n^-78*LUF<#YZ<`5fgpcs9*M71GXk`mUZTA(1B33Vho4S&oA&sq`N0C$7@_sx4r zDNv!$=KHF*w_FLTz29pE`~&MMx<#~3Q>J+Gdwssg)2M9wNj5=!{zg_3NH#M-7^|c_ zEm^~35_8Q&`k4#cqkx#z+i8n_28T@zyid%k5uso6)13gn>4Uxvv`c8y({6-V1|JyXaXJWYAfRXZ~YP z1E*mp4J}RmZf`i3n6pb&H{A5U2eg4#jKSQgEn+RPb20?&29~yM%^*Lf#D9>*21*jY zqU`~bRfcCvWUDar?z90gMC?6UyUAlp|6o`^C0Yu#PZ6QvrW`590Le4VjKC34STRgdncY6OZrq_oom*%klft86wkp5JXv2@+VbWja_x zC!g8 zd>@Q$huZQW7OS4e&3)sU(TGN<^?rC}?aoN-v;W4{`yU0RE{>Gwl$?6|zR|dhUwJXHm#bqgg-N6_A#Nuan29Er*Lxqttw!u`(mYmAkZN~Ccz zu{k`sfNqhMfOv~z3-We?yV&O5S4@A)|IX8^tnWf%`t(;4M)ia{s>PLe!mLBxAZpTZ zR499ojc(>>L|q@7{oRPN#0F0fZinLZ)I3V*JTac=s`^ffvEbw3VwBPo^%d~anT(8j zKUlvemiv(?2om}v&)z!q@W_Zh1for>@Ce^xK~n$Xdr{*TL1_`Ryn-X?<*k-+E(0WJ zLZoJ}5i5s5y5(vSrsB9K$_yTWA`n}zYrW_A9P`Ra71sVX&%Adtr~Aoe^Fsw9gNPjq zbBJe@1(o{9@Ny8JIKYTX1u@ZG`|oqmw`X|RRC*&bwRtt&{WE&vC46^Dq(n;jO!tC~(FrpR06YxLXz#EF-t! zRE)HlKgh@ZH8$5#&MEj1JbgN06g&@P(I%RH2G_xWOBKBfAHPG&r*}9U90|z_d;8L7c$0kJJ{2ZhzjY29q*1esog_^xEh zF=~?-OCMn~iB}S9*QEZ>c+Qwi#kMhg)yRPzcRyCW$H78~8hmquE~yi0Is2#MxZrx4 zF*+&&+O~p@zpcB+1Dp2+hpP)4-nn-VqDZhO(gbMkrK&4(=8Bt}P@3*fAB!y0JG;AU zysmBX{ywt)f?K+HS1+WcDN%E(j#euhb>A=HLt;lptSHUstVWxvWv@^({tXhD<=3bq#?&GNWH3v`=Az|%$Olrs&uX{7O^a%vR&^a0=;@5!`M zz%Kq(G0X7;XBOB-qi8dv6%vM*dQ5vj>%hHHXW5IGZC|akf>O@O6=iF&H7LKMm zpOX*oH8 zUsZhYh2*SfEO!)Adcw9ed3wG5qZ0NK>+DnO$s8>Sgf5}qtJx|=aFgrb-jYW}Yl2C+ z2|PThk_lSqNS}CCXB1Uxf=JyC6dCH-#btsA^k5tV?YG`vpKNuT>@>~)g6{l0mdVr# zRi`$(|NDZxljy5628HXHZq!A@{SB=xP~)-AzsgPVbJb3I(F3wCBw^o@yt|F$(vh-A zM8<3w-m3loSMpGZjIe<9A8GHSE9XGU4XK&;2Mz+WYB7xEOz5f*7iJC%&s8ZIev9OA zT4GfohjXT?%t|jJ!^J%AB57rI%~*3{=W%W{{bsj_os83cRELQYcX!^@lRq@4e~ax$zJXNRB2^XQR29)* zoK>NaAlK%B<{VI`N91WM;FU-n@m6%`{*&O-8C7r}Dc8I5cn- zL5-~^J|SzjcXP|$@xCPlWO?VoNFt2!6tth{reToy>x#CpU$7vVukE=OO+TWX?8L#$ z$tY`o$!}Lpm!~2~qq@@Un9-TA>mi*J=%WA;K_!->@&lw5Zhy^Dw?FAPou2O#aQ3wr zJ6AkH#v`htjG~(&=7Xw0!na)~Kg$6ceB!YS9!bWsz2p`qLI<)zB zXgRAWd&Rx67cpHHR4dcA*FGkzp69t`D3T32w$0UR>a>CPfL-pBoy*u8;c$I#A>MS@$#cXSl5&E3m3xUNJKbG~7sB4GwxgnH%KJT|5)v%5)<|>G6NA{Jd&6Xz{ z@MNp^)SVa>=)EP8D`%s6?RVI2o+f9;0)Qfv6vx|0afIh{#q8$gW~wM^EGeVyyWyw> zJ3`3o-lj^^GD%pIyY-hw4Wn3WfP6uI>1jbjWlsNGU~Jqp;k#InaO#{(Ao+gm%7gR0 z8b;Nee7m(9aXH)jya0Z4i%kE@q7GsUQpojcZgK~%DxHap{4jZ#_3Hyen&&5I8+_5Z zV;r5Xc$~>eEMc?LZrZ@W<#|Xhmvk-vEDWe1@%Q1o?6&isjmBapF-Y!+3@e6G+@B2U zg~(Ta^pQ7w(uV*c65bJeZ47{V>HS-R+$Aa{uBQFd*<25OZOdndEMtKO>1ku}9Ennm zRM)T*rl8))bhcPdOF3!*ahbuk$HvMu-a1EAK(?lmBs`Es+a+b(4fo7fr%8%(Y`(Px zKHANXpouo4`_`l^nqYc}4M=jsgG|JCMPX@_iYnZ@wGj6`3f*pYlo2^&FKvlJo8BTu zf{({ZMeOP-bA=NzX4-r8b!EX|@=2RqEU$U?h#{x`bFcbL986O^hk$g<#gd_dmAUY}BziQ~xxnV%?F9 zS|?tH>oJJ6ex~IQHfVN?UqqV72G96lvqsHtvj1n8?JYzvI5&FJhw{?Y7h9H z!FleIOPp#{T(=4;f+}iGWb&E&+Mg0?D7(e+Zv!&4N@TxhX!9w;l5TT~Morr?{f>3f z9OgFb!A7aU9)CB4@4jt!P3R;&!lVWd7 zH?mYdkp^U z^thz-7)_Ld5A`o?K2qkB{0ljP4b*JbQPJ5mw)HpL46iawr4C zV)UL!INs+KY2UcHnz@9#s2tR7gIzo9F$NlmvV?j<>Co-Z`tVy`y8Ii^wz$kzS~30% zD;O^2vd<`9k<_y0(g2z6{_&uCkUqg~VQ*tRCi1DAjSY*FX)!nr73je!lwO=0VB~S?o!LU zIP*X9S4)L7Hoo}S3Nk1%BnS)ue%b!|xuJ2V5WaGLAGkf63C4WTVPRSs0<5`z^h#PH z!&9Sgor~)mLrAa(sU{xr>IGGXSqxA%omXi>`~bK1<|~67eR#Tr?Pb?Gnb77E3o3)} zF2Z>qz|X=O$@j)K_mYSvEjmHnYaANVqD88;Z%>?z`$G>Ah8UKYqDeq#RXIq+l72el zYL4j{-iijuN=-mQwCTsInk_zlqtkr5<43ePsk@hogDR=H(Kzg*_n_Bmb{JD4vCPY& ze%uEs`~DWNQcYR~U7C=O3e)>r0t3A1#sg`ZS=13@2cXI{m*x81n6o!*4) z-h+6V?G8RQCWMg97vPC)t`U9<^AI@g*wpl2fi2UElkP%Sh%hPj{MN~eidp#AN0~46 zn)CC>qXL6()mju-uY9*2u{1&AxNsIn{76(H=)4o?P-XJl>4)KL+whZ3D{2vfng437 z#Qcutc7Y%PB9e4~bwLUkC`H@Polynpo`s{5IBsJ9`18^#ZF6=uI6lO<#m8Vde#Yei zua>m?o!(3ghp~(EFY0(f1t0bgv5DaGsUzeO{SX93xcUR5W(8h(^5jea3>?bc=QmjK zb!>JbK7=!I*sn>g9*vEe)0fa4^h!N~-~dk*M)DzUw5U^480@L-?NdYlU?cWpRQ$)j zG_8sI%mWXkKGJ<~El3Fi$!v~$gp>d~PRVwkitb3IQ^TgaP-3OxgRgj-Temw;B2C=j zIdXpL{tj+{D&ibUewi?1i=nXDf4{)zn0hLndbB%+L zd`1DC_nmcZAPQg_{GzwlVj=d+ur-I$lL?^v6Y%(%GDiPtB#u{L9`v^FzP>ICfC7Jp zGMaGFibq0R<{8NEdkXx3`@k@>!8h#F#%`-YdH@vfkHkK|bwv8ISQM1-Uc`2U%jCy60^R^H{L zcdP*tPbF7Szi1X<*fH&tgPDes`|L&I-o)j(Q6c3j2w!W*IxlePq%D*Mb&WyCKlM^} zg6MjFM&Ks#tGDdpG%40nH}bUcZdM>FcK{hP_L?Nh0T$w=zlVk^DDl__D9A>45JI0meg=CZkSUvQe_ZbbkydX1Y=l4N&a}Kn;;IvRMnA{IXX`k;4 zj0lrD(t+94&q@6`OD}wdM0n1YEXlpo!H{E>oelI$j+F9rpBx}@)av=;Zr7T^SOaPs zpRKF*ZpW|>g&`XAsLQtR_fARQE~r_BcrL64#0DSQdGYh)lhWy&VQ0k66puOAwz%4O zzX8ru8^y3Et*2e18sU$FK1EYq%ly#}=OiJvDk#ng!WB!W0Mu-;de&6X8m;_dO*fiWO$%M_D&_j#>^2H~1%9@` z>9r6eXEnLYKTH|K_Nj^)5{3t4PC_{&?Og$O1x`|%QfmPSThD>kblV#oq0BsmUMB3$Y3&m&-CvH!Z1+qY^*}D#}Wt%wS z5V1C2348f<%WuWSyH}E6LG%z&JGs#LxH?95kU#*`V}XKr4jTv!BQQ-5q&Qarv@hnQ zqP?h!37xXirLJl5(t2^Q)M6)0QGqi`c&Xjseib?AVd4#t$S9%jO#P`;X z|Ho5+)z}mg49d)jo0A?|3<;{S(cRUtNlGV~jdn+v`&WWq=Vk%ragXrR<2qv#z`Y@S zDZK%XbQ%^0ubaW#7}=Ah=QnOr2&#lU?VXA$oaS`C@(Q*rw0U@Gye0pi!e+Ni>_%Rq zj8Zz6D?7T}?oL-Q71Uveys!k>41JIEv3Mp;)+Bj)k}|cue<};NA7)tJ+h_Vf9OOMD zt5((1WB%0n7Yn4b1HiXo!k5nHO0TS9Ocvgs8wjU>(!rO_5Z;$}X?+U+kS?sXfAa-| zWT3}#?7YyJxc=UyG1p29;~kw!(C)%_RR?OLYoR#1u?M1h(p#metBjdmB0sv`W>ilb z+}RW0n{N$roay2S6D=(XTj|RvuBVnN%dUU&nFUOt1xz90=q#aV6Q0)7(Dc<{=5VHGL$XkD%i?F@ho;CsY`tXYUqQu;yfZ zB>DhKzEnr7lg+DFLk&%-MfHNLc-P`#r6}Zmr~tT(5OknZ{;8rWgBigGoOsue7jc)W z+C*e;(~02Fr*hNP!z&?(9wkwibUf?KP{*;z2qKo^IOq4c+X!8KZ*`&dcr$sKNEdY$ z_m@@QrDw_qgw){9952+=xbhbz9))cf-Mwr7=5z&{ zMjcbp|2i;p`bujPbP|1a1Y2)a;4~+o3QTI0VkLr6s7^ z9rQ)`>*Q~naYopYfd7m(l1z>Q8o!()WZ$*#2EB#kTAXk2J&wm0smg?k+uw8Wt-{Il}cSJ>Vrn=>`K6>#P+i)rWU)!pDt393b}g# z18CB)UQIuCMvJykhARE7!urF%@^ocz|Gj|98h}^FMb>!}qtAlz?N{G8M>4ULT3P=U z4O1W-raZm5l2D%1l5}R$IvA~~qUNp`z22H?TBllbE&3|OBI=R<218v>Sk3sP%8!I$ zY?BeH)q3u2fsH?2ptpalZwpeHfeI;~5*cuKF|h-u`GK z>_fXU%#EOs19A*pORn6*$jMag;?%lm27atK6G>~b{v07Pc(!`v%aYyP#FD!Afvw_d z13IO{2OM#Outa?W(?2)4MY~``v-W`97bc!ZK>=d2NW1|zu@_rV{Y_(`c2hJF} zz6y_3J$4-ThETdTV()3?Wg8YG-us@htdDmek3^BLze`@DUfu$Mf1teT=93Fc1w7kAE)e5-pZ}(VM9xZ+Bloju|X@3K~a+or!(W;b?_6@`q1)2(;Nq?&ZL028_Eg? zkT?iI=e|%lrAL0!f(j9uNp^9)S2Pn*P0pMp3xmi0krtjGjAk*iOlR8yQCV7WxUa*4 zN?x*yzLh#AIGHm~YPb#^wcc9{dSjqn61RjAQM!oq2Sq{!{w)|pP1Nb;LJk& zFJ199MP8bN^!RV=2Hfaf6nq5SH}#Hei35k1K5VDcTynL}Jg?Ry(Ypqx}f%jT*730ZsJ? zn;?gW=Q@c1^Rm0hz=v%*z7sObHB{C((85pz&)MuIA^ZFb(^mWws2)%*Ptfjlx4D;sSh{@Cw_A1%l1_=B_=Vkmw+k@kdQH#x z*%R^Jgc$&9I0EXKCN;XE8!M9*dVV($Z>=_L%{m&I9Li+Ddl3cm8x_EXs#~*hKnqV* zE7*dprpLC+f=;wtELO}pxxHdnQpWunPS_(cBkhNWYnIcu`E%giL=r;T9QT+h-R4ib zlSH5<8PWqXXvWa~K8sGHR5}Z}t3%tbtIeurM4=EO`frQaP{gnH#=MRLzhMsU?tQZX zDlqfV2{O*7t=Fv9-;nKchiYyDc2a^+Gbatn&c%L~0a%l&RCT_3`sSR&6A+j!{Ky>a zht0BFmCLmEqV5rQnr##iv_KVVS!)|#<`FCsL;>XMVulZc4Al&PDUvEPKxfN^l`nA6 zEF9jn4nC^}^cavEI{p=IB=GRk++%o`E*vKg3|r7f?sqtcjSk>dq$oyk?_p?Gb;9L% z3o@lHj>9OoaC#7}C)I}TqC01dU-ka%+NBBgu&?_0Iz)y$qy+lKQjeaV8unLMbFJ^_ z(qYsxHb4kI@lVt~0ZPwwG%c643}6V3!aU5eUAh;x%>4F5$HEP}Sp3YPBvnK(SPm){ zT@Z-p1M{IVA&?lT3H?|YR4z{0+am3+V{YWSMc&mSNCyeKZ^7GSkUb;u#_w7OP%OSl zC4-E1tFE^z4rQPbqGb;W?_^(xc(5rPu6JGO^{qtENh#?_8(4x>^{}A<9 z@g!hlX@cNW5gPzRh za*v1KVJvl$YegU{A3LwrJyA!>e>%GBNEYW0TX5D~k*nGg&i=0!JL83J!OZ%cE@6+S zSXt?sSDc$l|NS-YJ#^t%9`hj+1QSv_?N8b$PJL?tpP>+#DvH<1g~(v?xtuF$id4AV zoRdzi>t2^+KH8k7>!)IHT#F{taSj&e86qO&?kx^m2M6)g_QIk~Up#$}8opvgpmY{U%^2F!=-#uDjy_z4uIOo%8|G?rx zoP{tiHf?|}M6{#SjsX*0&L_z#O2@EA7D%3k%T^q8x2HX%y8}XyuUa2OwEkiJU^sJ(e z2~u+E(I=#^bDsAD5rpkWrN!D`{ybvo?ATT}nSz;y-4|~u<%zRRDz=NhOE=2;6qPTm zm&MJVf#jHdBy5)^^wW4hqV2EBkJHxI=Gj7D#Bcr^<{2wa$n!uPWp4kh3bFGJ6o^nz zr})&p?J`X_3No{)zf2!wSBCA$&UlU@)oK&dM`W@`*pkzRJiEKU0J>DMfbb?4*oMvp zL=UhtlV0kIr?67Pt-vA^$z~N#zN5)lflQGMxPb7ktl;>uyJWu7; zN+3Zm4K&Ln?6PcY=VMIVx2`+=6rz(_zajZJr*C*lm;Orq*3PQI+Q&R{nT)*Kq!%4? z{A+_6v5IX*oVxWk4F(D+%ziyv95NvgU=oQZb~ZNno?gSta%i`$b@AbY(0ysM*DTxh zs5LDKc-tb@TZhP*z60HF2CMTxWjkJq8d$BHUH*Y`qnf3NFVtR-J1qyc;cM5tkS9k5 zqg{0B9Nsi`_J25?Q+EORLD^EXJPN{9(C9Lg@=(A?L+HHhyJGRMBEVLgEO22p-=70? z8cB2in0r1~#^dhc!h2{4w1LISoFGOSZr`Wv5m_%AXzG>=Pfm=&GWi^60H){`WdkV_ z`2tGL&%#2g21y4dKS7C=-8rH;dIkzz2Iqr*=G^ZG-n=! zGM6F^PEQoOs(Z%&@^EH7YagfulTR{!2vfl|@532|WmEy(=Kq?gsu{Hx%mQJ$MR21;+aB zV9E!pzbk{AAtk2gz?B+dkiXg7Eil)_;?B1YQv#|eWOFIrXmC=K%(oIQfC*jQ{^yXI&Q5E!Fpq-tt? z{|!^#g_3)|OKB%gF6`050PlZBGfibiF1;WQ&)!Td?%6qjfLhb|qcsbKBw0vxeVnk? z%B;Bw0KNeKKLEh@;_CUw{IvaQVC+&5wGFHDMw|VOuCf?KX@*v^k=v%g`lt&e0%;nj zanSw({;3%$mtdv%z7@WGACuKT&%1J4Fr(?aB$4(}Ko6gkIKKLgVA?@y>-Sf4*sBy& zEAGkt_L$X0`%~x^Yh~v3mX1q2b%L7D?XdV&`l{9NXo-hgG5jIAq=8I(P$43SDBcVe z>t9zKuItjOc9I(@8t}OKb}fsJoCW2Iv6fKV7%JK{x^v$yq`297&s;^3e=yl6kuTy* zdc zev$lWT*T8Xy&mj`N9EwQON}JPfz<<>wA&EPO?8+M_D5VV zy;H^#MBe(8?+yNqing86UrJ6!vL@KBklurvszzUz@yw`Dh#vEyUD^Q2*ccUq0_N0Q z6X~)%OHxZc<$C+cOCsIbg2fl2(1nxbb6_{ShMse+OJ_|Kkpr%T>!{!=F^B zZmpq95=P1H3$PTETEzoDYd094z_K zNj`MirOwmV3zeCF|%-rY?NtMgC2F)nUy5sgZk2AQL5nsfv}9wIL*OkbQl7 z^u(n6yKc$3hHf_Q2uWP#_$5?>`mQsR0BXP*gDy6h{{S6%A!$W7!*ZS3?HUgX{F$}?B1`qrN2`)gg-9dI@>Hb7|3+zS^@ zr)DcidDgQlb1Mpe*U#uy__ZhP9y7thx;QqfHkP3%45KAyNbnbIqEClu75Aa+h(G=B zC}L@-&L^RR1%VN6-+vp%+A8}geJFeu=L7EKC5j%@@R0QGm3Jc}I91!oIgK?>0Ap#d zd6W5_L>p9?xB^)(rBDua9aS4_aIS(_7IZ`8+4d$g{Q3~9v!WSZBqmB)w*IAy}8JbznkqHzpgFQLDB<6ft1bJgti8t>54|m?PMeVu@6jKN;vCMO>oSM|@MJpTGy#$U6 z(Ocsr*&Tu@2nKRc0AVw_Z$YNpm$DV8Y%DU;|3v2+!8*g!+Y(Y7T4p$l{Zk8D<^#WymD0`H z$*`_A=Df|4mypi(rtMpguk>x9ee5T(VB?`mwNX1Pe57`Hc`SNyZ$NTa?{5RXSwLfj zK}s3brabmuHb;TaEwjskb|G}-mk&SXfKyOr3*v134NA)4n(O^8px4&Q zk2MPvggdlrHj=}Ohx9C*mpr``-%?L7U&(=Sc}%1bvj$Vb9Qb>SlX2VsSLM;t=>!CC zRk3_m=D=I$X=+tKG=rB{NJy`sXbq(IiUyEqpkz`SyHXl7qC7Eyf95J0#8izq$n+{` zP?>y^v@FW`E(wo9Q!x#}b!E@M#8~4_+DXbKVSa~$e~cIkvqKYQ9W@$_haA5Pnf;TD z-;0!x{AAi>Btd2$eO9HVf%Ut9lx%rPMHN)E_&?VWlW%VVGPjTdLqEY0(AYr=nd{#D92W)s>t z$U}r76;3T2U1P|b;%85+wd*^vrX5b4iz3;41Kd9w&?r&>YJ-x%!ua>OI45MFDBOat z;QI`agVvW2g#a|572X0QXnpsy3(eQEe+ZmRNfA1WcE!1gX)m1(XgiFC!dGAty*wa9 z$f@!fQXA_g$jfUrqV^<;cL;dFgc-Scls=#O2?$HXk)Uk=1WfuJ{TgJ@c0v{CNsdDP zErtbdII#Q-Tsg+8)VzLjpo~6Qk8%gR@O;W@2`@f?%JNs+bPJsTlaHqjKI$72`h6-g zpN6nY9>`sUse}!-0pXg@Rq8nz?Ed=AqQBZvu~ewoI&`xHUN@|#Z8h--NSrSwft|O6a`Lc zMdJHaCs*8bFicQZ|6DxXn;R!p$*9|HS`C!Q5ym0`n?#2g0hU@)ch`a0WVl62;qsxp zQm`UO|D{azt4~lUiZ>{@?q^a7T5}Sbl_y6fdoj88Rs`%fGi+7`r}?X@IM((^AH7YlAECh4Q6M}04Wz4O%`Cwvk?_H`Tquh&CAgnM_jJM z^a2{WjIX#_ruKGb-LnRVS7PW1joBCuYkk0pSrnKrM$(pCWZpxb{QZRP6QjfYl?+JN zZ>JrgCuQc%rogVbni-X9I#W%_uOHL}wo4mDhRTu)zpX+S@EE_($r4tV^$ex8(#t?P zQc6QuaxdXB!`up3o-PzNFN6u?h-UJ)jKJBuA^FNmb=6{osUVT4-Ve^+iluXP6wLB? zBM+saIo)?VLu~tpNm#nmxL40!y}+hBY7#26-05rDeq8ZOw0WOf&=Nc|SEjjR|9qJ< zJIEc$R94Dcdp-+X2lyIzgD%Wb*S>mfCP-^-df^?PJYlaGB-SuCyYDoN;jNlR3^wi9 zDi4ehU}eE}C_q}eO+pkXqKThW1`j@}V3UnPf7a>-`pSBPPl){5(1Rzp0Ybj+SwxJn zHnA7!?;uam?hI}C+%59ryEVU^ytZA_ZjkY3jDpEW$zs4bCK=upanT3Eb4C58 zleHUcaW?ee_2JO%?lTIkhTBng+5*X3KG|bWJ zLz`f)1!w31n%sh7Tn1JdGVm?$8e11|pg^4z6(PY46MyQfB(;!q;Sc?HNzUE1+XVHR z`*tVDdqX0L2WwlZjI(30;O@H~5qvCfAKN*r2wI??fxviV(afR=<64+dzaSqqh#0t} zWk5m5vTr|Bu_~8N+xMsXhau^w9-YF~cG+P{bJ^#t$hx*5V=kBJbc!2gwnrqSQe+kz z3V&TcK4`FH?rus0Mn#4H0;h5t2zakxu&Zwu5sRHbxjUIHL~ka=Re(e*HTD@azdVHJ zh`jqII9(C-KfN;-qhlEqC_Ub#{fzNLr_)r_J*SlH=?&t=CO=iRvI3v%DUXHl;FD$r z1N}7O6nNu)m@~PWfp8VD+xnE8ZyaYe_T7{S>N*10lVlhg+wbhVUAMO+g?KqwP@D2d zMB)bf+dAF#kCkb(H-uYj>2$fc${q%WSXOTHpV9ysx}?#qE4g|kL!VTv^eJt!290yY z*Rgyn`KrBF2bWJC-Hzr|qi4g>kkrhu=%#~)9F*#b z(G=E>>(#>IC4UA(NxOPU>Vn!(M^B^?rJvM>h*s+YSN!&$k{bB9 zwh>tDhLi>grTOq*Ny?xrDN0m}e5DZN_ccH5K3uphx<<^ebWdm#;|Svi)_v+m5@9g zXHdug9p^O{2)d;_y+*Fu+7|FrF8uKJ1gK2=8dOdMn;}FPRi7EUUK6_b@!ebSqm?kT z?FE{SHX}&X?~7JDOU?Tvy~4nj?WXU3Co6y&TpE%@3jMcaLDOCu3;P0a3S(_U~fM@BjRO z!vA7@-|t4?ajU^dR95hpcTEa50QSWNWIQ#_mkHum@4q5p=H}hPQ!ZgAQ|`~c$&}Qm zo16YD1a0ShyJFHeZq;;+JH7u1$c}}-aY>yH(YzDLcERbq+y(DRiVW99yO8}b)$d9( zHDb^?`r|x;*mbDjycV3+kr;bPk2?SP*6F3>1!~UFia^n$q(}tl3a1`!1LeKsGrtT_MTMdUBolk|(mAP4$*+Zk zx{!ms#T&+8$ryEl$N%@3&dN6NSd6RQfiCJcBI4p6|}rM`3wOCq*fSE$wtFEofTRHBlq@z zzQty%b?f%P=-0dB>LZH97>#-niN@u>*6uARu>Xk2i*L9eD@o5+d(vl}bwNpK#yp$L z)IkcpChe;}(NTHF=>KF|M_#z+y_$s^6dS)-!1)w1J6s;S?+LN@aU=(M@4l!Tc_a2; zI4_Mm7|n1KK`7UUMo_6JX?fD+I>2n@FEE)#QIauMb<*Z+oSaZhxJ><~XMa>uOKN!4 z%lnjo&M@g~6)0F-)4-~Nh?;MT!HYG8WG`0kHBSuE#jr}clwCs-@r;lUKndBh#c-06 z5>4ooKrh_{fU!6%z(}=}(mpQ*{R~(M?myLz8nI8V4+k`W1n&cx0aPQ&xt7 z*>_mMW3IHLgirK-fwnyMoiw>%%f66VrBKN?USS$&f)c*Zumo;HckmW0WJ*{m?oYXI z4n(rE+nEY^$pVVk=HnVTN1@Hj)}y#ok&oKf?Rgc*$q|vdx&5cYdr8Mz*8Y6E1vU4h zkYn2XVKB`2Q}A!<&URh$RtpD<2K5w_q`!KLla9xszRLzUOjfGzRCxOXw_+ zw^0R%63e}dgV3GE`)P!np)LCP#c;?yy8RlQB$EFoL%msLa zoSq-am*$}r=mQnKTI^=xVR!U%nqSRQ8J8y^jQ^`wh$ipUrl4yvUsWXxqzx^aJ%Z}w zk!aesMAFfZqp8wRTjw0>pKau5G86kBBOmk63VkZa%K+H?rw+HxGD_^aa`!ih4p!iW zp^T%O+q@56mj2k*{B;5G=RIdF>YtCQ7$^6&s2c{rInI~`m+UKPBmeVsMq3-Dj7!VNo@Vm<$Prrb7{n$#1me+u3$Jm;74G zO{*S(eK}JA(GgMeHD1j?=$nS#iO)GI6LQ1x~5CayOu@JY)*x-r__^OYpk=Joh2FfI0TG_J9csgwtDPUjgJ?pVRM4 z>;wECgUtLW^vGB|l*2w#pfY=@FQ*1YsY`1CE-G`-XgH=#+~oj95^Vgy6Knc)kqq3b z9(o-6(Cz};*oDtKgVWd^L(oe^c6wa_Hf-GuNzi=}Vi6SL@*v!DNtunjpP7j_mP0Zc zpGn_;+n;I4l{u}F!PcltXVii*k^}uYTq#W>tmvrsc!0=;w90ny^CEw`N7{U}>tqA?^n-Pd~idN-be&r6~d!>d8GEw&Y$)ghP}$knHK zBs0CpE}u&anDtn?JI|+@r(4hi84DJqaY^9n$P!RD8Y3QD!rUl9mX|#9-EsZV+(|B+ zXl0?N+mfCY*^q96|F+@8vgxxdyX}E0CEk|<3)Rq7bB$eerDTl>u4EH!=hl%h9UHR+ z9@KEH2nZa+>Y}QU6qJWXN?8>FR!i;zVy)yYRVSuST^F;VPHv!nx5wqN4*Xs#fA#Ne*IKX>I zg4K4F1d_LqZe1+KpI`C4I!nZN!v2gWSyG6kCpX|nGt-W)u}&wAE7sytu2I04@T_qS zoE8Kt6WE*Gi_kzD#037Un>8{V;qv6U)m*I9MdoYvT_3b;)Y{ z2(*?+_wQ)6Yx$*ha9uFr|BzrbhQEDMPCT7%=tglK9!JiZ;=>=9$6mnVU@HFiAEeRY zu?00M)rf_^cJ=~OLgxGmo+}TJ2+(rH%PlK=1u-i>K3=pc+ zN;2`Q`;jmEzZL)7cbJ;~cJ$@8WzQCy<|`BA2Id7Wa%;p(daDwb^@zH3v=s1-$gT!b z7ik0!`ue8F?7KOqV3Do?ZK-9kqg9@TakR@B=J5E4MgVuW>n1qBFobYF)g^hI>kt7p zAl~+SC+rdCi815*^Sj;2saUSK-C4_#RhB<`D&_6!F@%!R`o)7AEN9I+0j)!$n&#PJ ziGS5mu8S1_E?r56dDkWBzy`kdLCF=Hqt6NM-xx(M4m_G`bunIh&USXHCA~4;12z z?{0VIKCugm-UL*_#(*e0A%b+d_mh*~o8N$~l2SAts0_Je@BC%n?)-Hqvgh|Q2sD?Y z+B+dsRhxdSx-QcC);EH8m*fjdd-S|hngbj#lTtj8FOPQ4dIc(nDRZWxXlfX8{xrM2 zg$dtL06KHMe=z)c8*(ZIqC^T*L;beB-bI6BKK(uE;!#?Ygd}Ga(5)ZxN#1qSHgg;CePf&u5g2(Xc|2!iaX;flXJ$G!7Be7 z0QMHBhqD!6#aTwdwIkJzRDJtJZ5!kAOndW6W9R-);}Z9Y7Pz}vl!X>K)9U?}p#}l) zrdm1+y58-n8-{Wnk}U&s?`Pp0os`BeL`uC1(G?ECKIwTdIpBziXe{{JZwCG% z<5M63ABpv6B6Nsna7UOlRag6taNP1=JcfS_)4y;39A*qdOuaqqYAflb(H<H9}j zt3T$SD*BboPxqVu^e}w+oj6zhTLa{bJV?&V1r%Sb+HQ!_ABkuI#|$o*!$N;OF>TGu zEIHI)`W>FYe_u_QmATd`bnlTY(B8M~rpJ0=^u1#$f_dhUCchEL2kVWzize-UrAbg> zKI8|MO`f|byZB#|(E1fIrr&5&RUA9;iKDU2BBOt<^@Gx53xh}u-6U1oSdR5nY)#Sg zho?t%bpuwx76JT{I@cc*rWPZgYl#7(9T-0U!<2GoL(#;Ot+$M<&w}iK{g$QSKO@l% z4`+)xgZ~?bHeudY=X8G%6g;4CdvnT18`?KsCPPYci|WP9tRW}c5Cgq4M&?)H2lq33 zE5o7Y5x+E62M`InEzwO07IKa-m@PTUlXq$jZ8B{X2QJfogd}vr<~_UI3T`}Z<)kap zTvU5Xa>CXgJs3R!PS#yRoBb{govT*mz8D;v32+vz`{t_W@IO}(7(WSYSjcy$zL5q$ zCnls-?T~^(Om5nVaaV9}bd(0VqjDpWU>%5$k>(d3_zOU~uV$1gp1Hmlo=WhlwT7i6 zU1p?@og1&89e0bNHtf%d9D2Q57M{}wrFOmvycm%#fFXW{_F9ym8;yiPaibvPu8@!z zZxUQ%pSx-Nl)YW43}wFkG@$QjZ3RZv%ClLJt6ms85IEZAxJT;qmVg|4_I9kl&3@W%du)X{PUsz^B53`NpZz2oY4>FU95Lsi-Te7Aj(JpQc32Ud6@T z>7&-%zw;vrT*LO!0#(|-!U%Tsa9dOznWXam4t#9;+(gwc97HFMq*=T4&o za9=KYy>jI^i@X&YfR}`Kjt>0*6Kltt%b*{WXP-pCO!U`d3H|_CoyQ+S6W}-~7+!w5 zmq2i+)RYpf^ir1X16XqZ2wZxD_#zUP1fuLAx-NTRzQsR{#?u1gW_DSsINSOoPnSk= zFp5$~`# z)9FiyRMMFJ7->0KD4cgZt%o%L5BQ6EhPG%loG;8LUH{}1H6j(PDUWf2=f^aj;ONKi z-}gh~)Q140pCi{%( zeYOmFZKzl~J#+1yL7SA(=YPX~Dfjqh4np-LR~RsGaw%XoqtM={=UsO5z7b#Ys%SeE z?l?PoBM5qzhRJH-`gRGEkLOB9n*3`#vFb8hmKtV*Cxjq##zR6O2-!B0+CjG)p?;#m zw-)T9a1q-;+liSLjpYcNbmA!zo!c?brRpb%bna%@9PnGo6Wzh=v|M#z(S>p5nG}VU z0Jf@6$v8FUnonxZ7$;^)TXG*Sgl&MSu$T$xiTqOici^02e`K~LBAJsjrpLKCk{=+7 zIpXYL!4G7bMPJ11r~%Bth-egUtLbHmjAV4+6!!+SNj3v7=zZ17kuB$JV#D#1YS)i{ zv!Np8QTMxI4eon-IH=JR`9HF*o$K&2WO8H=<8j4CkTKT>ra`;lB1R6WTC(zXk_nvk zB7i$9UCcHoEqsRvw*J~JhmD_}4pA}UJjGG`R3m`Oj+5c|_wS7dj&wQ<(n z-5c{)v0_j{rAN?H+h-v5t@4{Z_o=#gzHC{Bj2!sMp;0+U2d`LH-cRIqyg)b(pan0A58L#(Uc-az8jFJUk zi9(PWSIqetvzl>7cg5%lxeGrjOgpjtZdo4`ymZ5Mfzj4&)%9C8D%rdxYr0?4ewO|O zUe&DFiu^$v*7)m-XL$n0j^81JN3LdYoHt^yySI7bNu^xZ>LU?nYRls-2mqyZ7 zBZW!fg4Mk$q_)HhxQBz zvO%};@*4D7f1SnejE!)?h%v6MXdi<_`;?Ds`#fvWQeOZ==Y=qF0+I4GVRj(CKX!Q# zZc&WXWX>&X)S7KG+OBA_ygKr-R8o1u)ZS>amD+b82uNFuIq{G^M0KF#GkvrWwRtl} z=oR_4iVUdntX$ksV(=Uv+E3B^Z%Snw2Id>oG)KYK06Mo2eWeELKtkb0&tC&Gi8)cH z`!RBXSQ+;If)F0BnvIUh!Zkukz0vgvJ@NJpf&0?MC~Ev=wP%5}B`O269k8=SUkPtp zjXFLl{4biu4}#cUz8~Q49}$ELC_V_6!_lQ3`M&qwA%qijaU+EX4=NacH;PX{AVM3P z0se={R`-}&U!A|!Faq7Kr4w%P;3PefCs`=hjN!yhHwog|jYN64j#7Dv+CjjX#(A@_sKNroesJ4PP_I7qoJ4>3L^u^8chF`E8oa7(4m=q?& zkv&oYB1XBBCx#?-6YGK>u40M^Cpq0mlh#yFJB{GAGPA?MwRhBL%HHK=crJl<^YtCWBC3 zWxlQ7jnd5HyUAALtcyF6!jbn>CV7a3=XM>Z-)gSc-w)^w$iUVuTI&_$6h81wzm6Dk9pHGJS zcjvYTYbO@%$=f^9@%y)vovi-mdRN;IzPff@sPHfl>ONXf=%qG{bc1dgp+1!%mExj%?N1c1Q$IU)C+~ zT_ZO$7q;nJk7o|0-&*7G8|FXH4gP<5C2Si)l5&0>sQl9WvCU4XP47f-2(j5cB}G!A z-_4*aNU&Tcx3=%=^ z;T+oE7A!nIZy0U2(B&)X8IGed7_LiB6|GFBgCVBgVih`E_C1qeP*=%LEeg~nr;*^N zF&_DU#K~0SD|&UslXm0s+a7g@F%p-uNWbHUxqkp_qbDzf%?}6jX+tA%C_d?5!qA3_ zXVT&V=fj7NMayxm5sN^vVh^E~W1$2Jha)op^Mm#3mqjk#fHjzf=w&K2?G{ac#+sz5 z%gfXU9%ktqniHw3h~=$2?V`3eUPDldwGIZoHExM8-LOyqR8!Dxo~U%dkIRNUa4(9s zPei0~Hd_kPY>R#@`OPRvt&zF~eRDWIS9GFNN^9geL`F|`>`^hlmKiTzM~Y4BqH&E3 zzC`@UlH57QcXr3$-!h$}f#`2BXwc!baMv!#T=kc(B5Y*F6;F7++s@vajBC6mOpC^y zrVDL8nopf=hC&Cr>q?WdK)*Hv(~Xen0oZ$PVvkq4>w)}dWqgdPnblbI|CIu6?D`&DrGl!wX8GapT8om|$Wi_` zZsieu>#$RKu? zUV=cp*S$vY)xgK12=R!1r$k0fOWsNK{<2dF&4@trv0STic#cmad!Rv{pY>Va9qe#h z7mPV$$4spn8mCs8f3q*h98aG=n6Kz?_LN|s7aek|(eFOTC?2L!Py;T+DnlDJR4?~6 z0VQRp$i8ZeB(O1(-OKxSz~20F9$oXB1?Xdcz{NweIpD4xQVwY^;a!io}&2X*qO z|44^rhodnt1kVnU+s_cdM;$exN@R!DW3%0X>~{wvly>x4YV6xhRJh7nX&+@GC&;@FS!DZ!Uf@Gb#> z`Fmr2X{Fo_eRon{S+hDf8Y|;=peZP#u6xLp$AZnR@OJgaju8e_V8^JV@+I2iy`}>etMk4L&vI2D9}{u63CPyS8uax*EaH5NRoUjHHH%~Hh+GRm10QY9$*_Zf=ha)XGX$o*`*hH@}!GQB(PE-ZANw=viSsh zBR!*FYoGPu!@Ukw1@5*Hh{cg33gNkzt<(=JP1A84yDdM^?L=t(XnxP5Slf8Cq|bv5 zGj}dY&W(k&bM-VEhMr?qXFuCF?MIIa4pg7B7IlV7AZBL(J&fdSKU+RV$g9!3cG!?P z3K$n_A2l6y{0bT3Tkv%?%Kx=L1x7glyw&e|-lLI5WsN>GAWF!3-el0{5C}Tl5B)A{(8i*A6YOW2NzGgSjg&Zi5R6@J$7l=)-g}uxq zwv?m?gHr-@_{AJ{4fZ}d?GI2=(uM&q0jl-gf3YGX!% z&x<4R7Al%`E`g{!>6WoKkR8swTuI5W>R}MJ1E6|FZHdd%v=W*urheC?w=%EVb&J&s zf{fV`4q@t5w!0(du6dtWPOvU{z4LP%q5^~~Z;@Xb9DiE9)*J{+*&e7EzI$Yod^Vm! zGn8V(!P}RL*Tl!r3XHj*IyB$3Y<038V8O#BnJzp)AiKhLA1UlaW9E8V-Hl222Ou)2Q;)Occm1xH9z(!s?Wm`PAehgB$mMMNCcYiX4C(4WDS~q_CdNYF? zKe=}s&!9E|I|SYyuM|_61cBdeYCTGKrOkTj z?1op%>fnr9&VcO+zEgwYn--|07QSya$Y#CNu380%7|ei4Xa`Cte5q$q~{$C zq5Ir&uY|?&1hrTp`_^k8WJ=zsFEK#Eh3*MQ!CR!3IqTrMZ$%RRF3MR9Ye?XO3Hi*e zfCU__cNk~K9ORE$0&hB@gT?N8u?3n~ap%200=!!ZFA)x;nS7v4aEl$Jn;!9FCOJNu ztA?T{;~-d+TQ@gZw@lFO0Z&myF?$&`vx7sJItAA+O{7Odiasg8Y3;75J(iXOEp}d1 z5v<&(4W%H)s<=Dp?5>BOD#LPPo@yCPPk|YMFi*V|XB9WhDGq=MX;0Oh?Rtf?6r#>_ z(w=>J-no_+X(wGdF8_x^|0~K3V36G-dk_9qs7Y4D+mnM{-FYwQ&s}y^b@@TaKK?s) zbJ%$>l&poHlJlh(cbP2iLff7L{3LXD?eO>x@8T;Y(|mCva@2$pBY_<6IL@t_v+!A7 zdo*KS#Z23Y1eaBiZdnH}vf9VRR1Vioog%4LWPs;ErLYR}!bSQqml%Wt{v4JnO@Uw?S~{~@*}h(({L)02U!wch67 zaog`7*)A5x^8H;H``vFTgXBwOy4yeUuxA6v(>?{3Uujce3A&6wVd5$m?+3 z@H9stt@S|eT;nv{K9kyo=BncRKC`O}0~+Ei2@TgFi|B5DFb_+}x)aKTmJ`O?-It(z zUMFbrl{n>YD5`p18ZS{3fww7hQ_AV#SE!6T+KaE@{N&Rls}U5TwuZvGxV2;R0B^W- z%r~IpB`j0_Z`NHP`9Jy=-sc&kk?x(tWW}$TG`uz87pDqz=(%Pt@$inRQra+ZhiYn& zY|yw*tkl6=iQ-5ST@&7Qr?340xpJYJ_+Qj-)fGfh{gd{VpNeF*X-6+<)j=$0mnV1z zus&iSrob9R6ONiU+r)4LY%yUcRjs_C2v-7y9ippm`u?!o3(FwsK)nYfO2?-C51D^W z`1K1OAFIw<5jT|rMm+W=0pIzvrOCgCO4Pr5w%RU~%pGlDC8Wt9Xusz_2hr$J#=ssM zwmajQxlN28^{K?dIvZV4ukAn+M)OOPvY&0HHIHc(Arp*R*DOQNuN@o^CeqD%gt8q5 zJx=g+F@UmgpQ+gwyH^e#pAAkpZ;ymnuv-(5dY5Q%N_70!CjG`YW832SOofwBduK_n zxxH5vBgV%+2;%d@!D0TvffGSG5|3PnBTmy#yhUI`H``Um!IIUE@O67|M$~u!nD~Wc z$s1d3PGUUy)K@g(TC-b@JQfHkVoT~vrK8Cfm3{2~kr{YzkRIqA0%GK;CDEEhzc$_^ zG#y6XY$U>!Bd3*L?LSb3#so$=mP?x%^~Z z0<1yqY4wo{F*pdIefu=0kAfD?-{MA!D_?D-$RcR*F+O&cJ=eu{LA(fn~!EdlX|6;Lji@dxYNTd z6!sdL%XT6t>@^oY!c+(_l`*jiZVncM(|Q>NvdtxlzF5KkdYuW2>sD(O97!yDsTw%E zQ4_CTI8KE8N|T4gyxq`XlTH5=o|#w1c$0gccO;8VkVO$xJgeZbF}H+==B;omAmsl5 z2=1!=U{)Cv{*>j351<&ixRPlfQpKWEsZ2pm-5eSLF&nzr=DZb=8dzxW;s35EcDfI- zirSi$j<%Cj6Nzd4GYSmWR(jw>?RvK2SR@RU(FIcc2;GZt7|=?dFvIGAlSo3^TWFQy zedf-Lf(khsG`pxP>7xfULzNhpj73%{a^$ZFyG4Nu?ckTnU=0qcGN4v7yuU$)mhAiS z@K<&tA1APA=f6*4-GulDd~Z?nuwK=G8wS(!QS^D^B1LXU@UJK(FkvR#UDrDKUhNj2 z#TBBk{6(gfp%s;#Gt(wh@Bb6RCh2GvpAC*9XOh3YnENXn)iDH}f9pDRhp{E@+)Ts9 z9O92)hYZViycbG#CWgUH#`EvHb>!SnId(z4R=q~YP(258$3(7zqop~)ln#F|n z+>4tbj&C;?w<{QJw)tXv!y#eTar8e_L}woYZh;bZ@6`%Xe^fF#q(r5f4eW#+s%jh_ zEDA=T<>59=7LVKIE5F-Z7VqHxC9l$al7GC?`;K+W;YIr=OCW!$)X`ReX#nfS@Wn&hUUW zz!#O#E##VtMyBU$Fqg_sG0nSvUP`vr}jsZ-aU8Av-6hHj+80P}h!V(o0 zUp^7uXF(94_Im9UXh_uV6Rt6Qg$?a}oa+gf!{D_d@K(}jGS%q>DHqZdaI>hjFrQjL zR0Xc}QSEkiR7hhfSO0EtcZZw?@X>CWzlce>#K@?Bvh!!}SJ=a8dhTCjZ9&-ui`!9k)w!<}Yl^m%3L1Sw=$PJ2I?AljT zi#7n@!x!|=nQ|MxBk$F_HN@`99PapSVlvmsE5eD;PsO_5fQSRKmFU|n;P*hoU$Sle z+g@UL9J5&YxlcpEEw5=(g; zq}LzOLX-rRXHucXT}Xx5k_7Z%m#0>@k%(uhXLj??#@xqH7(lS{C{!?S#L~SnV|hn zY8h7`t~d&*nq;H7BfvzB>-S+wh;c?kBdN*Tnr)(k3WV<3!n*m8m)JZ1I{ zn4@iEt^Uf(_0IW?5xxk(k+J~r)Q{<wT|Ze*|5T~~cE zl0Tk6zma!mnkIbW9IU%kBR$?Q(=(Xpz~@gJOQIM0`Lb0jH=Z&*B8#O_mN#7YDNSYJ zKXrS99G}qQxh^5v(l$+0lFa}>$7H*K9p0U&*s{`RA=$l%+JD4l;XCvE=T%dS3PMCV zA!>MB5}r&@!+#;7)o@dRc7~|Oi_y2DtLviVy_69{=hw>sfT~PV~V?PB{%^3YUiw&)?!Qem!FhY3|eS;u;yx)^K4H+ zC8L!tL9%I$VzUEf{AQW*fvsB2?v9z*1 zB}<3P1i~nH5|i@MG{OaIdWb+h`b}b5fcvsdK^mlBugaS*q6dz}s{YAE>LxEA(B-au zwW+9|hc|ihr7&^ou_s2YYpN;@K3W@G$Xx`PxNaTz4)QMxBLC*h>`yt~i}=k{_xU>@ zz<{y?QV45Ci2lT8L%Sa_>?mP8U|_ZI>E}h% zNxRC9Cn~3nhSsDtUfTsAKo`b!JEjbud)L!;(gzd$m3+eOVe9>JH_-bNX_<7T#uT-I^qrKUsMMNwFK9mjPQ=0)h!Wk1TSSTTi!-R2t|7g+D*fwOKR~r#`b3 zzDg(2u!Pn&O|lc6B!?$*ay8G@*em_eCB0XaJAge**BxcAzvIxFAFyZ`&pm z+G_L$KQ!5jq%SX4-11%z5e(4iztVnd3-CC3)Ie+XOzxjZ5GdVh74X_uUqU2u}9%tN`2#x5C|ogy*863N@mQy<)vE}oY@aVq>z7cL zl$A^H@y2r6IZ}*aVGg8ZP^1W(k$?rQ=o3@{yD(S*_FFjOJ-`7#f*3S({A3(cZuV)i zj2fE~sZ?@E4LV0#;#q8Xu2Aa^7fGpKVguwrYnWp_C(%YdVY{dYKC^L@Cf0E;Im}8X zw`iG1*-2R7v7Kox(n3|5rR(0|@3?iL2{CT?d|N!|@!E}q417+Q#lKDCh&YII6sAOP z&UyMvcbIAE_>oTaJWy2V)PZ&5VoSve&}R?+*_3`}{8v{8>*rAM)?p>B9gC7o(ZYJ- zdG!)S&jr};FxE09aVc~>5wE1h{t_=;!RpRHkI+0q({N`o<^kd*s3A>?rL+7J+~XCX zfAV}y(Ct`Mg@wAu6HWv6EUq$JornuzW3w;>zH0OvxLpqUNCPXucv{?bDN>&EdR+Zk zFgWmwEQ^wjDq!3aZRGskBlnC~M4%ppRHqtET&o)y^Jn3-xR8-HcW7eK+Wj~XF22tZ zd}bm%=(;WYDR10)Tg~YVbhgpNj<8+07%YL17kHFBy3!j6cm^j5N~Utw8%njp&Ukv( z&&5Q)^5{2IxxkesnuALj49nyKsxKbRitvqL`3n8~wS3IsT#& zEW6c@2Q|j}Pu03K)qhk4PmVk@z;z>Ha-iu|zaJ1AA_+qrrqmvH3RK<=>)*LA0!|zW zjD4K$^jEzwWfEB+RCmP$D=AoPUWdjC$mZ|5xR@A3R_Fp&R>`2kIAx6{LR9H`-sPPt zJq#0zJ4={bP;5lbaynHS@rr(%N$a)B3gx5rBcJbU@EEs~{H=OJK}N~F*Z6`4{ZA51 z?`NCKV`Z+}o>29jsh~|ndYKhAJlrbOQ|5OD_qk%Uj=1okdKog$X%-hqh|!xFfv=>A z^~Ny!ozJ6aSyauHVvS*)n_!<3d!iuWb6 z+~-(kC%B3CEU6%2Wj{j?&=@K3nFJWGD=u9uYcBMITon{==&hWl{(6gxDM#dfC+{=5 z{ss5Z`g;yQ_P?Q?m0&q?FE0peUm(iLOF4<;hrBF~Dchy|S~0x_K_4F2X;(i9E{+GX zU!jt?zk>Ad;dV7YSa^~`cAm_(TF2@}>7cF01gv}%cD6Vt)Q zo2YLyCrFuE3_Fk=VEvskUFD|rNEKHO*NXA%3@hIJWOxzaYIWI3mmBp*sbP3t`rU}Y@Eo@ z*&iIfhUlOsuSk`-;`Mc5OU`D6`)@N+-OOj$Dx5UR;qvkC<@qxhu43^^sBd zcd5BxusPHPtH5-DC>59=C*|fIm0vZ8Sb+V{XYUYzu6ye8>)3u_=#AXMYZqj1Vq$Z_hTy$Gg{zqId*_Fp-=ZsXz zs$;K28W1u*sXh-mwAcw2zR>-8!iYIoE9|d$?gMV&$!K!0@;bUYBx(RLi;T`OLcOo>%he0 zf#2v$%66lKw(~mSoG(g_@L9VJnUL2P1kiI6fLJXt4{mE!rj7f%w0|A`>h6pyb@xqG z@EV^AZv(BRPi$ovTi>rGPilW3r_BT_hday#!t)k@X)h%)AB4i;AwB$`4zJj7nOTTV zfvs|QODQBE7e&{^5MdTGJnunltbcpS%qFm}M2J;b%c5aZm=Q6aDL{*nUDOl z+TSJ&5?nJE(!(xoYvGL;ugdE8$^P2nc5|zyMMBx>_~cir$A!LQK$+Dn)yH*ee(Ff) z8LD_LwQ@A0^tXy9x|i1_mD*?Q*_X2W#?D+HJ^!HHF%u76K}ufS{G03hYSkt%bgc}t zZ}!ARKrX5YhA>UfQ8*J=>MXoX)r4=^_qO5%UG>jo3ssC&gKFK|Xu-u|7;n5yARl%U ze!W10X;)rChhPRyE>h{M^*?+2!x#`N7niADGMaXz>;DB;*+95Ir#JIT_Z>B_xx#>5 ze$_B;LzvR>MWjmNFMVTtj>9)9;?-PW3)$rWlVlb@Llkkmm)k%p#zraU4Hc(aP+(ADZC?4(&nz!c9#-@8s5+R)*Cx#7!T5}JP)L+Q z4Yi(g#%PkFGwxr z)kHsU9$u^OsP*NYqC7-2c(@@9+`#IK%^$bRJ(}+yAS5~OCFf3V?U$buIr$675U=eT zt3t|Im>h!2v*mZOlvf<5-V9ch?k)y)p};~~)XuRbN~F(1GftSO$G^~Z^oQ+{KaTIig?apl;e*VnBlCD`CsoMJrtuEfrXQ8T znw7-T-FTmY#dp=X@22SHw!U!-Jj-y->7b%KSMl9%@v~g8g-kn@-6Jnh7X|Zi(nPDg zBc|Zu8W#*IRkdAEOTS3V;c{0g4mF{)wV{HY1EOV3O(eFS>T5YXLvStGxY0W7U>lHqdndqgcLYF zrzZyG6TvP*E1#btl$h#nCoA@;vI5$!jCSv-*?C4R5|Q&xAeSJk*vo!YdH9Av^eRoD zE)fYy`>IQA2D5C3R(l2(@So%78M_?h9)bjiGKGEoFjjpe;C_M)(|jL`)gc}bQ%N}R zT>I|(EiM_C$yoMwgj}Yzdx3uP+BssVZsd~ zx{Y?=SVBxjL4trc=}-`22$Z2AzKn-=f7`>rHWoJ|m8Mi`08?u+$4`G+kMFviLdRgSHWJ|2S$_KKbQc?D^RD zoJ@uk_Zsw2Evt)}qeG{HyU$k}3gwFfC?R!y>AxG&t-8QgtA;{A$)>NO-fcANAB7++ zm8S6T=ar=&^WK&dUZ;BucFKV{e~1}m?~|6z^uLKqBz5iAhaa!2M50bWS~<`loUe%| z9tdhas9y&3C@|^-2G~}^#!{NKqa@;GHev8@dZCSj*u^%yua)g!{}&5efW(ub+5EA! zjnNX?C~^mDy1sv^gu{=+z*rX!l#Z(tG)x(lxm6{0#pq_Jd$YhlCl?5khvK~KA-y%y zLo5VIcsT3)!+@$E2DG*YSNo(-5jQtkwW1JA6$HqRIL7nTREa?ZW{;cCNa`~`lHr3F zZuMq}dcNvf*DRU9a|N=%mpNq}5k%#v#&!Tc7(sI`q24=)&e37|IVdulzw07usE5+F z1bX-W6(nbqLT*l#(}3*Ba$q9N+TPM|z0Pgb;TZ3HDdhyDJ7D(BhSY0~6}HgoR%@O) z8|>psccdwuL5!VlorWsdHD7UR!^-=^4oY|7Y@1w_}{F%{MgCJ{@OFNN%q5fVs3H^Ilxgf-!TXx&9?NmR#_OHSru6CbR>WaQqM zR~(mWnhOu0EN?09VS*Qo+W>L{C$3$bH!j_<|)B#XFjg&1RN zqG|dvY*zN$l)Q-CrP?*=#6aIvt^Rs8J80cWo9OLcc^o4$6_-NypmCm6CUUa^M&@s` zqkbUD;PVJ}JMi$M;Ba6dU$U{t0=dl4PQ`!?M_r5cR!a}N`{5L}G@wbF52eUfm+|cJ zzhF$h%?>7pi{0A79uvyxj*=(o zXTZ3M@(WAJ%oLOeBs?i{bfUA^^_l074%$& zowH~VagLN12uC&@16NKV3nC51`6GT`Nl9Q6HpAg4xvo7uJ|dUZf6)_<;{*R61kGEe zt{-P-MXJI6HPgQ|EJ$1ShvRX{=+_%!$cidm(2ul$n^B1(%~d}#13uGm|37u7&=WIN zmcAK>PiLEbV^pbNE>(dim`(>i`H@beKsz-?H}!{Z?THTp6+Y2o>g6?>6a)Ipb6}b@AxCb{ zJFDIW(^U@^&V-!+DHPT;^*+r1ydiW5849R`5sCtiflYz4faOr+x?lht>(Xf&bv57) zJe*w@mT_li_eYN<*&tCR!7Azr%2CMWl~syu-oyjiradA5{?lM-7 z7Dimm0eBK!PH1@y(Q;=)(WSc4P$Il~=`qzBFZ?Oz`+ct_QeD|9Dsq>Y<>$bUOShtC zAD#tI#P+i%Oz@Ud=kq}nk8H1!=%SShq1CqkvT*F_eOWEUWom7G5k}0*<+3-uAbVb! z&gKC4aviWIRNYa0_2Pb}5+71kqK^ZE$QaGnh(3j^XQd-_y~Fc`vj`DJK`qg6M(4Ff z2#gST!7?+>{W!Y7xRDpLx;VHXk)ahxWF2+8v^L6bIlSr<{0ASi(B`_H;Vy{j#fbHV zxftAbBQyq2Y)xK+sw(^n%y{Q8(2i0`V)EN6`<9?T#CQoNne6F7-Y@6{&nKi z{S=fquckAxCl>iVdu|Jo8iNmI&dKa5g%r<#nD%5?_9MFHqy;6>Gzab9RsLc?KEs#?By~U|@=@Af1#Fx2k9F;L)isuw#%jHI9HHeL z6SCD$2E&hh)1b%Nx~+1)zM5sfdW%eDTBLq%uF|Wz^9Ovpg4Z^EW7-X! zSt+N(Qq>RCMEbD?6FEj;^QM04FF=25=)UKd4G5o~fnNVhKTCOjhAX4xDVAx;?4Q#4mt2l?82 z4COZt%av`S2bpTnoC$QcIM>3yEK4n05<`0*QB`Dbt-ic~KhNl%v2LcNe4LCtrC&MI z#9>R_r&o#?OFLabxw2zNl}Z*#*>6PBlo7(&R!=xCH$3>+>5mG0?@^N4zzDuB7qnsL|Qu(y|p|FG5P1wBBbzG(`MrKBfxC=Xk-r<^% zot2;;%hdN=L3WOa7z_#Ua>|ig!;wq%P3E->BL^|Pn+S{>0t~B&wPPFu^HwNeP0yYo zjp~`EjR!1Wh;7af{ipIt;c-02*T7e0*vXqN%I!_^$>8?!!{gU-t zqM1@rRUX(Ou4uzZj>`4JmKofO5SVsQRO*7epVb2)SCx(Pd68vgd-kA4+_?hkI8d*v zIJ2oECP1WB_G^d@B<#QKcbKNt4Tz-VZs*f-kPqEQ2)o}Cddhy%4!PbSZqb3vtE?^7 zh5v~M&3%BH3|?YnTFbe2;$L%`ujVmy;2c@FoSHCpn_a$n+Z#r&f6=9}-RyT78}t_t zN+krq^w<_FYTssI{OJ-$715$Yime!$RS^{#1RU=d{_KsYmXi8j!vIbu&7sGUIArvc zfX-ceKUrx>c2nGZipk<0gA`NW_Oq5ZE~}_rm0=Kiwr{?G^~!DVUe9eDzLCscAcE5R z9pIp2qvouIGZmDG;j>AvG2fGP{C03LBQ;?fAJE_wyNmNs9z~w24r#sa=!cbv1B17! zi2T=wt3dT_;>8-qkZrghK4x6&+4h2YglxL14KmW92R&lXnVgQNICv zXbW(I-#6(K=d(fE;tDQN3S;f^*1FY={zG);TPSK883;bapm`n@dqI$~LQP%iKx!ja z84hV8wcR-bRjI}cKu~(+2usj@!&}&iGc7DgqAu9IJ_DtvK|%!hz>X)T>Aq7s^g6${ zWj*??D5z>{yK0Dw_ zZ;nJe+-`43C{mu!zzgA^x5AtJ>Mpoy#$(aKqdFUzNwg3KpnPzrsyn4_M_)GJQ;rW+ zWaeL5Dr^RwRBb7FZSp%A< zuuRV#BqqYmH^R(bV2`?lKCWp86+S>vyay+Rr1j;2(5}ptLhrw`5%~TGJu>a{lC_tL zl<(43zms!}9qrZXw9VW`XYhlvDCky>hk+|q<#pza5=72`!&LP=SG?oMT82cZXJ0>s zVDO??4yFAa^EyR74z}3OV?gtSj8wDQ_VUlO1}KG(mePkK;W0!DU5I5aSM!cSt1W=@ z$8;$B*$uQ7fTeW;5$2)-kY{Eox?h;!owN85PabH)hWi^@k%BQ8#U=_4Wv+l(IS|nA z2uKp` z2?|fDh*L=Blq5M5`ZG2r*bH;v=$#sr_F&4Ecs6}!VcQO1TJIU2!EH=LOpxDUr#^m>-?xmvaZrszOg z@zND|=XQXazY39)b_q=c{)X%w#8!!QCNvs8FUsKhmqmuT9Iq{AN_|_gS+LM6q zHBej)W5{Q@>i4YM)T3W3X2|76!|s_GZEU>};4i=E_dZK#QS+Rp;+?)|tRa}!?y0dN zfuoV`c)24>B^sUxOE>C8f)9b1fS3RK;syR4t6Yx29MR|n6^D@c)`|il;k^R|A>GoG zMYH&*&{TfAoN#A?4WkO!5auVm2M!1xz_KwZb76UpGCv)TiRrN6p$&~3=CIcWwyMQo z+Na0&_wLCRS(T*hq9*(P2ZMRQBemBmRc%fTxLo`2imkbUF=IN^90bUA1c4|j`?LFE zWeXqQcwwZN(bRs;8Dl6ucKR^jt0#)@h2F)AGG=9WY;=L5F&6;msq`u_amzWCiLh^% z*5?d9;A{A3)qpRuuNN+XoN1YyS_rgcwRLA$0HqGa#?jPh4&-2lh^9ci!anX#{Lr<( zS*`VdgMG#>rTEK_& z&2Qk0gRcoU1QuAxu)7CdhyBvGVT2%c5V;i56m!^3Z?1K}I90NptD!Vl$BIuzgtKer zF_UgL9X?^=*a7_rJ0B`0YT_h&&%P|fv^ck^k!v|{8k3~&702~R{4z|qETt+XhWGeo zsW%u}DX57(v=X#x**bRkorxR=*xcm}hs<49+UZrW_F6F%pHGWOny2!+gyY9sN(ZWG zRA|;k`7U#sfhf!!rMO-3TuGCHcN(Zc?Jj&jYQe8RjfHzS z?yxfEX-I~x`$MM=s;Ypl_mN3HvuQsuebdFC>z~#-CGoHh5h}bzGn7=6{y}6rIGv#n z-C8e|eWX&fSTd&>fs@Eq6)cv`_!^AxCl#_dOhy)P=4qrfU2Vj-Y#W?K&wbw?`!Yl;@9KRn}L1(YE(CqgHGo`A!dX+H3JB_S~e% zi?iyXzWBdGc%7?jz2qKoRw4h=ZWY9hV%7;|O}oT`qVf1a;GhY-&FjgOe#$Tg-jW*g z*u{7()+dO^$go#zk)o8{{W^}9cixW?STK&(*SJ*VBy1$k;UDGYgw9wE$#E0pQnCjo zbu*gw&gJxw5fMG@9vC@at6Nl4LB6@=g^wzww!84;6^%_u4Hx&D@VlsW_2;jn`lt@V zXVUGFSe6+=U+s)fUKK0JUv*&ur^doj4)~EV$fdX5_G+g&U~XOjr7E0e3y{D9E{YP1 z-=yIC?lt06+CjSaMcu{ogcAg&yMI7D)J}PSOv?3yfiZmzO@7Vo);-093=Z9PgnPSx zYAsnY&;GV0>jWfHdL?qHT|Tv zPh1>S$SFRyjFxw`)GQTrW%{NR^*PhW}ojyt@UVc1yqR+Y7lr`DRBrFi*e5vmEP5DRV zX;vrs4aoJDBZa9BZAzsqNPsl$WphjzheW-t(4oNr7Z$O1;gVnJfgc33cqQ56ghG+s>5 zxv%bvbO)P!#w#XJqw_dl!TCJZp_V2MwaM2N4CM$%yhdMFSbt!iI2g=Un#6dIT2sIN zy#bNrbX2LA3_zc_+9`Ubk#KL&pGfYel@wBOX*CblphAm|mU@_Wp7W|Hu_9egO-7 za8?uSkShCgm1`*^uU9^)h=wXe0UrQvIl5wz;s=-&dVlq-jJ;twJC}?7X62j0ZiKtXD=;*Z|)%`YQ%`Dr5?>lZJ04O3-Ep2VbY)d4jWMHZJYYFw0m|b;`%-A zz<52iZ!HZYP=^LTBb`x$2fH!gDPfIN@jZ{I7_s7g&nM)$DA@?I6?Qcd1<+nOh$rvv z{UZOf(OxooD$9w3>nEBJqwiv;0_4#>>QmW(%&h9NY;0;OuRXH?_uzPaPse+0q-MVJ zu$1bK1Nv`Sa+(Yxg`4Oo0D1q|bl4^B9#dhrY6z*omzy*T2zl*d!=KN6!h~Wd`57;v zRr@ngx}_irvW-H9wMl8rxMx%+6x;Khdh)76juj(a4rr3y9SoL59_F!^w>1gDrn3-K zvg{K*b&{pAt#=DvC0KjxiYLFZG!uo{y?1;p&ST-b-QcC)-LG{&PAw)FL!l1@eW=O2IfuN_^h?jS3Ff+6%5CGv}rcB zOuOaXF$glyR`GlzywoKyl>M(v^SlaTt!iHb_$g%YU1tT4VP!TT$>$3bV8)~9wZ(t= zy331wf9EC_^Yrm=z_FMO)z>T;V1C27fXfTyEM>xY^xXRePU!Q_v_!1< zTLqRpy13{^+}c;0wS+gv-m;hF3Xj(SWs?7)E|L~#njJhPjKLJaLEi?P<0-t)uzq>0 zQljjvOOGeEd#HtMOWCmgpxX2<_Z)y5jGUJs*G)!K|D3@hH3GwyB_N#Cwt(7Q^@DpJ zb|8HKemNga49kEzJwmWjZ zD>c@}lp);PMu87_0$- zC#vT^PWYZE>C;J^Us{H&X*hIohx-4kr;8XXGsE8BK*+w5>ErZg8I+o#lu>8PCPg*u zD53{>$e{imKskHh{no}_(vXi12tIFy0Bb!e$&NTi>0(*vo#fx1A@Gj#ONt27gA*4D*+(VT%^|qf*@k+MUDJ zCTR`rgZ@T8tmp%dVU|g5FNP2N4i$cSrtU;8*=f;koI&HFMz{|gh8|O%cg%-|t70{x zQwY!78Qvc6uA2FCW0&2$v@y=8av-mL5L_HDO*H+8(^^KCailXuc~%jY!59A}-F_Dq zKV5>Y|2^+!RBO>B){VX5Y>eH7(b>Qxll+Toq!K^qnei7(dOCFoBE0@-a;}~uziZ;V z>$OB}dl>-Pk>?c4v>ZP|-nZBqLI=+RNAI)JsGu#Q{3`&!Md4e1M!^pGyGT zOJdKs+(pu88Nl#EO1RDAcr8^Q2Su>zGT=GMf3H@k{{3!ET*T);%a(c0}HS`LsYV`07Nyb?mzGlV%p>91Ru~yR#M-mmUen%=E8-Zh$sAY`K{& zz`S3k#|6BT5Q5kNaBmtc5m0)0!N4y`tO#K%2*4RnAt6K}j2bdsd+f$5RK7vHyN01x zq*qNfBIIjS3m+}SQAsls3^heY$bch);w0J)A&#T8Pk#!U^Db?;1Mo=g)7EF7pX2JR zl@&jdQoC$2q$)r6>iu^nh^MBLVq?K%zu47>p|N_WblJ4`pxi?sOXr;bIa(|d#q;+1 z>yvsvI1&#YMDbB9<3md({KDxmakuA0W>8AEpF0L5ZkH4>&B;6^L#7JqHU6KMG;X{e z_wFHLS|1}=>^oLFV@V%u>FEWU|NoYdrsuH_9+8id*j`0ea%07n&HJuE8@K{+NaeE( z@nxV3BM^ORZF~YD^;q*1enLd_OSZRb08vjH*^`>K-r+Z2bbImqvFq0yLzqhSPVczD z&?WeP=>V{>Lh$V2_pZw!!!| z9e1|0*ho*!{PnFi+6|#n8G~|NP<;T{I630NF3mDWKX<2z)PIG7gJcO zLyrc71yY$w2Ql`Dy&6lve*)0_J02r`g7FbuA!iswAnqFVJvR?tGZ1O4VQdY5*AeFBg$Y<*>p`38wdRuhnIRX_5y|E(bNIGyYEX} z;WTc^W-V&>5emn1;L>qF1(*>Hhc^c*X*yXyT@jra356dJsw2u6Cad0D%0@Pvgx%U| zi>08o9)89*2;~sXlg)=#(}PB61ft%OTS&73A8-%XPZX0^=q?_xFXpA%Zh&IyE4q4z zHh;b}xeNs&Tmg+Fc3kbSqrjsyeA)!|ZDS54>|uHks{w-27+NY2?eS|!0x5yh|7K{O zPYG71PkbzApv+I!l#gFeQ*6PF9(IoIF)9U9B7TGP>R^Y@i_NQbUeb^dC~sOdqzK$w z%3cLX#~PW3))Cd-0K6keM%;^MSL9j07e~(gebz(j4t*2ZYn}Y*X-QRm<5&->k(6=r zwc*p%v*IF=(=G}w{>Qm89(U&Sp_Ikk==9d<^~&O9%3gW8yKx%j*^l7h2~{KZnOTex zr~?=YX(LFE03_96{|K{GkvKkAMQE?qpsU-h zL+4IKed2N4Y18f5)!d+>{%N{U_TCZl9g-A^8I~Gwa8NcS*zmI4qns#SpH^F|F;wl* zhY=w3Mx-jS=|M@30aXi+h7Husps>l3G%}gi@K#6g?`Lesfw+cs=gBy|w}-8En!{;% zA$uZIG|2Cbz8bIfd}FfgF-PiNA46t^X4`M@v{uy7VoSI4JY39^OXxW{hQ*U z60KD*u5>M0hu^1Sz4Z4nvy{EhVKjCEF|(Z5O?c-HEd9@}crT-U-m20T#(l>v4~H(p z>BU)!6<+y!zEnX-v!OwNp@m#%?Ie1SWc|fqjABwkN4my@%!#D0{?k8Mr@$oz^At-h z7>oqBgxD#ws`gjZD|i3w#Q~seH&)RX0IknEc*{$*O=L!MkLGkvIgE9=aEE6B7|>+- zZEBXTY;EF*y?NaubvDt(LEaS=T=bDTZdhOX_Wu+8SsUuS*&h~~>?9Q>%;MV~$uN9G1waEJc3z&=(k zPA$8b!jg8B^)FXJpE3!!L>1t;t!EQB?5hgeDU+OKMVLwVJ& z7c;@MT!WGyQ0Co*oh^UUM@B|W@2@l{snt*q1~u4)OPB)3L;D7t^P&zhX}nd2c42M- zDl99P9E=TpO9?SCcg!zjQ^BfmG@e8nJVsyCy9q#sxlF-8h?=n?rqav)$GKT9uGpJ+ zPwEsQ+dT zLh^pxR;#t!H5ioKeb~wpEJCmLkOS-oatL)|veR5Odu$gpKaJcI7ML4JPQO&|V z!{B!=kR;<9Y-8#_p5e;;A^8pA12I3R1(b~D7*uL7mGouZj|P76cPj&nrlvFXa77Ra zTyAV&^&u#S_iHj(x%V<Jx;@&rJG;<;+l|jP>%z#_r8>RU!%zhh|bi;9wkODzkfr8E8a}NjY z1bd?wiajsLSuco{hDy1U)~fw8ASQk>^j2Wwa`$I2vUe~E6$WC$-afeeLxXLK6R=p6 z(tkga^JZ6Hel1t{dC?6rg<+_Bp8H6ZPk+S^Yc%+GUQqIfflpA^zL21TTdT8zS4dYr z`($|kZ^zPTu3Z&{H5b?{>6QGuK;clqrs|i=3bz*OM=9TRU(c#wxYR#oi8DA}8Sc5$ zxB^+tt=Y}>omMoV;OhYM=~4+5T#F?KksAj^Gtjb9%5X$zK?M@CQ_sG`IS{q0H#p~x zFI+rQ^?v^L2mi}woD!0XkJq&H>A^0s*2D;uoN2X~C#?b%_9nPzO5nCo{v@kD2igr(QN++xzIUYTuwz1utj|Lb4J(eDBsU4vE$oEd};#Twbwapq+ zs}qfu!3;+E^{KOOW0sRNmAnoJUoo4E`20IT=f)yOMlkR8^enPIw|5JM<~N8;Ap-Ui z^2i8RV%}VrikBj!%(ZM&%$Q#G*o!E1f85R?0y^2>p`?g8xwKxze6`gmi2I>T7BA*+ zY6+x4xf{Zl!gT=XduutAbNjf-J4HqB(3LLlhC~)T2FDHFu|+tO+T19c0BSJ1XDEbC z#&Leznl=n-3`Ow7GI(&?D%OZ1$nP5nsf`~%xDfW)`Y^351_8gQZx+G_*yJvt=blv! zi=j%Q$~-_G3^=@9B!d!7N&vIT!?hu_mlIRUSDaDtD|#XdCdfcXrui2FHMqbrF|J=t zg}R_g*SDaKlkTb~F8tZE3;g&4?sVYLRvuAifkX$svH8q8$sPc;SPF!p}hl#k+%{YKS}cJi2#D+V7cQBy1)+``(mPKvW-8inMJ z(^=HE#Ls6#@2;@@=bIb%It*b86G-MUIa?81b~LpWSPKLY!>gIClM0w=Tb`JrBTLE~ zdPimvQt>D$k0PY#-4T;Y_1!bLQ#?CT7$`DwCGx}@@;>N`Mo8xgBu%pst7CKM=(uoe!K}z!pHM8}4oMX#0PglsW1w1EbXJgIwwNEfWLGr!;%~laDWl+AVda+U8?3)bbz6FQ9}^vNMg>77a*8rpAet6%>nO2kXw z9@{c$IDT&pGnGxdPx-_rn}GKg+JX*)x2?hoHL93{2>6X)p!}X7urG8&g%ZqcHQPBH zG_}-A{^rvHOU9Q?)MeLG60DKI!%pMVdrAF@_MA0h0`O54Q|#V(3pD4!oP%LlpdqjB;=s zL?J5e(vwa>^k97NgH31V3EOJgP&Ih? zdqu8}3Qs*))BKnOXryOMJvyoKM_do`XSc)@PeuR25DLk`;~ri(A>Kk*!+R5Ns~~In zX|_XQLJ5sTF0V3~N-a$HR~n9)fCAlmk1s!f?{35A58UYNmn2wTVmjCB{%s5-`j9yZ z)e+R8@mguu@%$WF-?x4Aj_@*msS88;ps{4xVC0hTxPN#v2Sw*xn0{Foc@g=_s3znV zL$X~2npr%6+~7*#`WdwDQH{UFfXXx}k)*%+3cu_I;JM6Fli7sNtH#^<*YD~av(2ml zp3J8;A2?Wwsu|o_0QF)-{ZuQqe-P9z)Vv`~*__;^4wA5*N9pUh z+S(|6sYVEFjS`J@9f;bs@u$q73}uu;3zL@KFW>MAHh}s~;QG$QWl(WVAzgix=M=Mn zR}Jduao;yAB#m8)hXmOSvFYkBH04rnK}`J(d#fuf>WA2I+At-korThuuiEnJJ}WoQ z9v<=@Ds=l=Kmcq;Yg*3?gPc}!J9^ej3JnwwCHYPj_=F2z~~bB#(dPGlo9UI7p9L>!NB8g ze=&6^qXtexcU>#{U|U&DLx+D7_k{=fzo(6p9o=41ZTZvwpQtYN5$o~LaIFE%a1#zB z|6DZBPo$1BCi7f5N2A_~Cs>KY}H03Ja^?k;smZQG-X zkh7CL7LON+@=oV1$NNk1aUz8SaE_0J&HZ@33r$?ycRcT-sbdoZiN@EYVd-0+PbKH`NsiNU7Jg2dEfn|IA5Y#w{Gv|Dy{ zIXT3wN#okJuaDL;dK2c&=^>az2zaGX^7&4?d=$}sJ2EiWUJMUxiPf0HD`s+F3Hvo{oNt^ay zQ9ORss+h5bo5!c!#RcO(de<4>FIK@wH{G92z}qj0KL~9b$NWe%Ho_8G0Yi{11m@DV zG_m;`fpsfzcfzIb#{pV86w*2~)y?~c|Ft4MI_13GmRiD%rU}t+jK$u!b(E8aOWqxD zJGB&oqx&&RpE5DCP34v_rd=qSdXzq67Ai>Wau{E<+beG<&G7y|on%zOW%J#u;2qWe zHEAxy3fAJ0Ms;^vfT5hb{x-*o2nhmIwzj)6@%mLjUVD_%P|Esk16hB*B^R&oBAFYQ zL0$LJkuBhAWGY-eD5i_IhSs)d1MB4IwK}sq_z;NTcdon~D(2HOwvY>v5dPh?rjGoi z(I1|%-K&hHq{SnY`CX^syqSjqSELn6QUZ~(?kEW)!tW@PN)NrHLI znYxFg|B6YkZdl-F89R!%E!%>1CVIV2%?_=}hMvT^|3byg61zwL2W(WB?3Z2gZuX`8 zT2gxxxg>1wiz(?R3>-Tovc^qM6V)Pvr-J$_d!qoTY5~okmS|ACLtC7Ce%+#3ycgo+ zajD3oDs5VvrvqBd-bTV_LKWp`CYb$#(_&FaF$#6-#+5pPe=y-EakxN$lR|O@BCn2U znsv8zHi{>V|ArfMD1WD@4a(1t7_5CYmxA*(=pyz?2a1aZ>a6q&Ru-!Vh-*@^PRUW& z`eqWaPNOHYv6dv+=g4=i{=-dU@q_b3lfa>#4lsIH5hrDbsmxtNYm&H=Vm1uHtKvHC zQihBDYTh#xEf60R`diNR#qXp(prJoPESFv?F^~M3!i#t=j39w$TI_i3|Bd8JF-?bO@Lm!5X4E6WyCt*{wx8w`ai0zO;8#xD`i;T6bvC%b?J&QX3Q zxek|&w%U9_Lj7o>m)hl7d0C$g%D}3g*=l%aLj~)Y{m8Xd4w+3~AbnwuY4COD&`>I* zvwkPvVbPuO&u%NF_2zmj9tro-9N5N^(lQ&sS=j737SS7#@C4A89nTa4<;R5fpfdJ& zu0f{9t@;|w!%T!$e?aiQwfim>)f?`{f!ef&X}Nwv%n%+{Znd^IBh3Q_Gxp|-fi=+W z)@O*FfW3*r=tj&R1pkgC+;rrTjnRkDl)CI_(&s7u^~>-db2*dx zrsmZsJkjEFet4V$_G7b>yQkuD!|EVcVQU4ISknZ>LBIkk3R?tW^4NOTikk1l48y2^ z1OUpl(U+P9^UC{c5{xXw1^HR4VZA!DsuYpRQ^7H4?G{;9!?T?NNhE`S%#A28BYA`~+z6o{mXLoHmL-7H+!Z zPRBx>!a`us>eZW576uO)=wJF&geeir(LrjhQ+E0tBG}SL7H840qR64S5)rPiumd@^fZsSM z##|t7?D~3;M<%XIgKV|qnDr(}aVzCVUQrz9?PsH7-HXJQkBf}dVkzTm1L~an-t6lJ z)vbaqCDi*^iJ%rSZtkGyFk-4o7O|JEz+YxTkpN&b;-GvElD(-&S-iQufkjg=K_dYCS)0Qwr#g`G2EIND%Zh@3^#QfBU_h6 zqM2`5(MI|7jH8{ex<7*3@h!{l10i-yO)V7#_eON zT&TPK^T9x}(L8>JAp%64@R+2(|2rw|W3ni3u=^hvd;DfX)>bU28p;lhHo^?;QN3pz z@7~{8xA7^eN5nxBE2Ft&B<%pbKF>s;_Vq$)~rq@VER<}#=Fe(i() z#DwLk)0%6m-^Sz0G>soGX`AAtd@#}%iQzcij*kJBKUq}Y=Ja%ZTu3FaVfAAJA5l(( zIuOa6N)M?zHw{A|I>3j^d+H`%<*E_GZ>-mT0RKM#z#AYrLZA<#Xr`hn8|P+Y6H_ko zBS3WU5EjZB!zFh1G`GO&D(Bo9Qy(&N^Z}q)B~&j-J5<*X4dL}Rb5kWI2Nu;`vazT7 zB0Hfqk_CaH6~DnSGXYt>V)>m8GDqvMW!5Ui%F>#_F?_qAq`BR1#qb23D`F?5+Qtk# zauT%kpQUZCOtpBf1jAR$J=C96X2AXbkbZatNN&gu_9M+Q{c!lv7%nDf%=%tY5?T6Y z@9DBFcrkcG0D~d?SnOG#Wn{jbLI&JO#Echy#wE-uR=MbG>us?#(8Jc58z#{n&AEDl zySwDLVuJ>@9!=n>>1mCGX*;J)Btit_fv;e8G3x>~xaErk`BHdRioI)O@TPKN_+K{( zf~zcEC)*DManA7Zp#nXX&{~eXz(@UC5frRZdHW%~`GGz@tD`e{6U^p?z~U~twFZzzY6k+BDxzMuJ1 zR&g1z(l+hHRIoywo&S@$(B+JM+%3m-8w+@{|83(AD>|}&okjE*5BDvl^HxQQzh8pZ zW2j&1`S|h+fk8rTy{3tjfUsLo(T5oTZBU%8>3zv9MIoekevn-=>9%qMz zu56W6VPM4qVY1Ws6?HW6xZGS`ue?ZCOeqZ2AFH_m9AJj|Ouz_yR^?InM@D{Km@8VYC&0b_PoNrX!EPO6XtpXA3=fa|*!u`VP zpms&wnpz^|Eu97l8bGh5;{)K2Z58hWRHcVnwK5%I1F8+rOIv!?5jZ8xVr_{T?`CK3 z^g;^~a(inb5u|y$uZPkWU}P%m{bDYPV~{_VX_DyD>zh2Kw$5zMXsEO+8=EVu1Hdt@xUwpDWA5gq zlT8`#$>^UP(cEMKL>FmDXU@p?J51Dgp?J;~WFpLT!;O_`yLK*v$F~*sUvXRT{NH|f z8r#6J#->1 zD9060F$t4n;gE+o7$O1tJ6mpoYnAtRPgI7SC=>|?lU%x1RU_Y5@J7nS(2mAal14El z(Z9-eghr0@wHjox`-?N&@!yW(Z6cluP!qEXP*EY@K8IxVOrQ0#n%Xm%T7HyL{)UlO zHUNML(DN!BSi*)2_uJ|Br8}dOh5S8!p?IgO;L)UXxGi9)J74xS^;+bWXrZFs{x$C?<_xE`yK^*2(zsbk$*L*UJW+3zROQK^rN1WaWO|LkepvCofZNa+=%6 z%p{o9GgmCQy3not6#ZkCaP<3gBu|~u*8$r*{;sL({VV;X!8t+j-)|~1KXPmO-$uI}Ck4sS2w=NFx8Ya8 zuY2)K1V60k$SU1JDRi30G<+M1BNMaMB-y}VNgf}38m(kfcAcQ$aeP7@fxt zGn$YU>x5_-v?$wCa9{f@%0z-O3S(cED+&%PTo%j@-xk*^4-kW6ZQ=q1DoaR3NJMr$7N;2oEs{n z;Sb??zkL(q0*x_rDNa!dWbUUwT`rwOcFybMrHGxXrV`K-bEI5Ms5xhlwqigOYb202 zTW!2nY*~Oz)V$zRCkt182gz)9=ld>|CDdh_5SPiWj%C`}&SQbU`(dZ7iPx_<^cuu2 zDfSti>NYjI8DXfBB{v%#<6+iEWaaLqWO`JicTZBrs^szE1yHBv^!eSV@geV!j0nA+ z?zxl;#!#}i2Ijg%+7_d&voZ|x@H3bA`Okq!+C5olj-RqSFTS^EAOv@VS<&0XyC2y2}@Q4F^D01#X1menR)!lE6-b{2Xkm=|FMN1pQigBvLmp=>==X z$uLi+H-(tL8<2#xIF}2DcQT(FLOHB4DSh6blGd4|2ugP8B^O4%)H39nrKY^G3Ll3< zy;US`w^>>rB~2I=epAamhBD4~jr??@H-znSWvEEPnM*Ze>B)XJIa-LG#7Fp`iN-}Ljteo43H#G z`MrHj$MdN!s}xLam2)Hv=7OgVQ0yD7OI`4m{?L^_5Z%hfJ@4%OGg+CMTUF0qD{wKO zyIdaMD1LccHz2iv$A7n4^g$b=D`1MYae>Osg#@Vg4K$U&?8Ct&k$ewv2JelC4OVzl zxX=uIA9Peg&!Fmsm6{P)PL2oli2XcA2Xk5kkz*ZaKT%HO-eHII#F><5lO|dAqE+zpOw3>r4$WA$$u|&a>&p z8t^01YZCnd1lB0L*A|yRNzoE>c3*XjN-y-3)1z>lvWu3m1|f%^0|vRX7_=)Qcs2Le zn%lM%Qp>B7rWJ@kUt&v1`i}%=&97I>R2Ykeq0z|Jp1daPu+$E?v@vHBR~j^$hEq8g zXc7P#eLrLWQyLL09n8QwhH(}Q+#ecjx#l-26O@I%rzmb+2$kNJh_4(F{L=^+ z58!!`MA&}i&yP7?{?&O5Zo(yE*YQ^#1JQcYCP=eQgw*AqJQU|D5ubVFuV&u|r@j|zI~(Ca zNFt#OYl1Rkrcc?Rv~B?_52yP~+Aq_hIj+{w>XZ?2Tm2pbb14rrY@s!|G@=t#|>__3_ zg;0xwSlM3uZ&z*er8hzp7HRoSy9$?7-5%hOHUszdj5^)nyJO}9MJdL~Zo!J-atL6p zN45;0jV2b@Og+G;LKm~2g)2fyhNzY$BmxG-&ta9S+UbYz`pBjFr~_1iXitZp=aiJ` zC|T9f=P&G`j7$?9`%?J~h<)#83<_g}<)+-L9589~;xQrtz`G-EtzQTkeb>J|ZNTwX z1Ho#nXz7U%{z<-(J03kK!S6TH?5zkh`JC}=ncfe%e)&thNkfl0{2I;~VQj~HG|Nej zm0?EjhLLfwpD9Ee9^rmwyT6x-Ogsb2=v$c1GJNXJJ(W*=#*`b|39BN+d)fRBP)q*_wpx#tL zqKB4Lt=|$Dorz(!YPnM!j}`KdC9DjPz=T@%ph3a%220&OtrOF7?M6M{b3Ro8&sbaY ziQDrAD!S|;Wl~}rRA5n>ua$J3X=sG=MOp1v&n|ftwCbb)AKKN=<|q@UdxWF-N=k-x z@PG!H&WkmdLLXE*<*f?ENZe}8Q;1n(3_ad#D$MdVF7W!2$1|fHL(V#jC*BSlfae$& zAf6I<5YSl09bm;7iavN8JlR8a5^``aW{?Mhy3NM6fSlqq zW=t%ISMx4mALVRFts=#`xJ<6iqmE<3C-s;%UnlMXtU|p#!?s`1_yNoZ+!jV6Ik-Rf zs9mb!DDZlcZ*O*LGABV&cp#jSTG(=fu3eNe^yXEj*RJ$tO1p(~q=L7Jz+7qtGF<-m z2WcZdVBT5Vo_A@7*l;KzX}0w-)aP4fR2vgZHxNAA=Mj4lpef&0tG^$gkt%daZOTn&TiK#9fSrSnVn-Zfs!+6} zzD$pa=KZmi-q2pe>vQJSd8@j86bI-)@;7V(=lkBhma%HWMqP|Pm+@zq z)Xv0R81MAVlaD8B!0ScqmZ_Us5KjC3h{~E~&HvE38f1b$OcGpT6v*cjMgeKu7xubO zqxx7HsZ2d4?~BzQ83+sioa0)XY7`0nV_4Cma%an8czAjPph#p)S4*JdQXzgLp%!45 z!IPHJZ|ivV%6*_>8xFtck#ymVSnSSXld6MA^_5uR5iWf!Za(mKmm_t#N59ZOHH0<1 zdJQSc#}^g&^YsU){|}fk%uXB5CpW*t!*aCJEk0zB3ph3rjY2ieJMt%#nv%G3m50sgQbnqaDPhly1Z?1o-qASv?rPLei- zae~3>r|_h(Gx?jCyhxwFwdZeeB{0Nc!t0Ex(|q=VKR5;qHW*xG3gOa<+9`+<5p5H! z?Z`qj+9|RGxoUlH8VKvwO6%6NdjYNhpRMz=W;Q&8Jq(B|FVBm$&$(3)FUvHQI6;S|X(w2Du(I3foZ^3G?MoDXn_b-&zjhA_S2rKhX=CR#h zwQs2T7079~pgcH57_n|VM+TAKJ4Gx*F3hN{_Zsf3X_viT8oIbOeVR%ns{;|HKBI>-EMfUVN6PY3Bb~b-rJT_#N1H*#*fLzmqdH=VU@;=ZT zN0Z@N5&W+AV z_1%~6&tEZ^oKq(w0{#zWkH7~Vk_$JfNMPU&x4erSS}Q_W^p3v2JQ7(vgEHKv;SgMw zMt3z9%t~Y-Nl3M%bH03i#1N8LVTYea+2Wof{+7r);+O(-Fl8aGJAw4Axt-s|8-$*^ z_p=geUECdyW2%fDHC3fVY#ZIY7r1b>tJBnJV3u({pf75{lu>T)DOt~8mmjjSHA__3 z?^`VGL8+eyrUwM?=+syEwkB(#^`DIUcb|n-KZ!|Xu0=@0lg~aCy$2~WB6F-sgugJWE9nHLIQ1=tPiSi>rdJH~Pc0yT_}+hFP}&lpONBJZr8yFYl9 zQ+)2rT3#mVDY3}JkhT2hWsKv%ao1--wkL{|ysty&D4WmRo&MR-y}}}kawct8ym+^D z-NaiEC)XzQx>5|cag2KhG69TwA`GsT|BzDonbF;og~VxC0&3^kQ*v_NXP50=cI?2& zRcWa-vM#%$M02a_84ESpdm)4T_8%AA9ouT@#tWK#61dlef8>l-)*CbJKS{&mp~0gp zX2-$&GJoXUhOl>_dS|3y6Nj3JN+MZ}OcCLTxl8o$U?R25H6KQ3O0ZHn_%cZ@^V#3zwHV4E?;@4}%+bYTw_0$6O;+1Nl-1cX=HqsUu79ovNb z+MD1Y8y<#a{5%Th>fW9p4W7&|7ldnr`A(Z_b~N^)V!9mP&A#}T*xV|%`o6n-{{1q| zwm#nC-0cDnXPf>1m37%l+L%bFBzBB?VTk|o>czgDmzh@Fw}MDO>%0YSF0-}v6_#$@ znH~xn(N&pf2Y!!vn&D3LLst4$M>PVQ2NfK*u0*acK1JpCf?++)D*1&B=O*OIQrN~+ z5d^z-wtuy1%l(6zSvIOOPLJcr*}W%KxI4fRku>UV=`lzQwI^v+@r0fvW+S8dl9n&e8M5!nxDlz z1Jjy1Io2pE-S%`N0+FH{=uQk9X^H2jWS;%KpA0pg>W1O14q{$ujYsq)9mOR{y##|s z6oiG8=k&QvO#p6=0Q8RJ$hb9kR}Z~x3*Ogtha6G}-6)?}pe@?WtDkO0{{{V8IM0$$ zBibG4Q&aG2d^vnrxDeWdRSS!mu8J5sGA~D3nw5Ei_eYcBfF;ZdwCM}LE#?zlBhxSx zu6D{<5iSVsv$9qDaY)RE@tvN#W9kHQRNKn7 zz$$C;#<^F@h8iu5Q4|0W2z5NSi=@IbUH*>gIkd9ulzh;|L zT(s(^PUYDR36fyjcY{EyFkX9=WQ(g}-w>+}NALllsktVzxcU@Besz{wmLe5ct7!`S z%kQ3pDz^d87adhAJ#8I7yq;!eFY+PRil)VQX9;u=uUV2c5O%76=XZFebRITalE9 zEZ_qh}ufT@s0YGh=GdxK(n10DAEu;h4Qm7#^z(vpbK;sz34b-G%@KNV$KRvgk zAxFGLHG)mLQW&t87{}Vl0NM7k4|7kkTRQ$m@xvJm3gQDn2GFgtJk`t}R7RQRYdAUT z8LpS=ef+PiDc+T5{Xmg>HcfLJbo6wlm{7g*hgVB8TSjkRKYC?f&7*>#@3z0{ROQ4~7Q zqtyqYNy(NJd2P0A4(_syVi7JH5CSH$)7N)DzN3mHCr+z@-e>?K;Z`SnRyxa%j!vv6 zx_C@BG4h=3GBgZFnCDUSkZJU^0|+l!+c)c$+jcU)o3BV{&cFw?R$q6ua?J1k5OE}4kopxnAo)F-5VzFA4iYNvZ?!&x0k=Dq{6ibV zWZfvtr2jza(56d&idS?e=jB}Wo6C+4Ulm+-Kww}K$IlVqJYTOV>K%b{a8c_I7O#tc zY}hE(3F|1)k}B;MNriA+iR{0IS}qA{IX5WYzN?$f$fY=lXkN4NqnBQ^YY_L06%El4 zUoWpsy#&-K0-raaj~0)@A8j>^nXcQtO9nh=0oeoPi5zqRkaLdZx&sb&)&_=vxG|db z%s^uZv3#ZvFyq8-Bkc8$k6j$X?7jFQRl9!l`Xe;;(+~-i;#95% zKG%=ktKUu88j+KhBfXjtlQ0i0_bk8u?BF>ykFp~Un#;|o%?XFQ3KZO#SebZ)OMXO9 zpzL_ut@OCX@zdAh4JDsPkJ(&@5_TL8T24u03T~g$Z;1o+`ibmtI^$Vkq4jOP=pkHLe<0x$9Xr<9(Ej-IpLcz@1QAJbyLvNSheh6*&^LlK=3o3C9#lzV|3! zbM>tvjd6RuvIWZH|A}20-^c<2sDYGeU^K08&Ka}lZ*fL0ZB0VoOwj9O?uE|fY4oM` zoDH7pmowNe!Oe9TOle6yD?YB+Mu@44+|W0qd_Ah0>5qLMZQv@jXPOyfWn6eRu`>Nf zk!b~}du_2t@3^o=QYFt?wH#*><;T+(c5T`i=)^&z5V}^aUcEN<5~RW@S|Fj#FqOD&t9>Wvw!ZsrGN&=%~rf`ui^Hd$FL>-Y3S7oPPb|(IfKgyoA=ds(^nl~LerEh zp^xiGh}>FQ>UiFZo*m!kHUFoIt6PP&qPGqbC<&+skd9PqNb1j^2aZ^{e521Qpu>ub z)S<@-GIer;BUA zdiXpQNql|m3V@Y-G~?gnvG>O8df~Z`SE3xkLSqAybNc2hkGQ^r5YJZhf4@c=wy0^b z#+!#qwJQeCV%OeP0yw-H7&VXe3O7%hmCJd_6%sam%bu89@%$ht5tQ@lsE;eik?Wta3<6*Wba#A=l_Ip z85pkEPotSfpb$OF+ z&xvecYu(prdEr?bp+xxi3(sH7!bc8P*836C1KUJC*1IHdDa3VrorrW{M-+zr4Otdd z`%$FUzqpTs6x#*fVq|@S{#+Bew1%`g=!QKQTTuOESyqRiGs|_{ikkUPk`ey zqGog1kBPtN{jV5W%<;=kApg@CY17sf)ayBM_XWf(2%E|`aTFDwdBHq!mO`&nLdmw} z5@w89tK(%BaXdz!xb*O4FmVNlv3ks?b+R&ntt4T*kKNL!(Yxh8MWq@qn6rE z3?2%UE@i(c&bua2Yj)SliLeDzA7Ro3c7`8M@Jt>4BAIstPvptiW!S9-ISQcTjq6FY z&S(|jE*%xg)5f@dCSpmDrAa{v$7i&p5jQ3 z(Uthe?kl9YT;dq&gb|xIV2Hgvo3h-De7sjKD5T5ayKA^HAgsHZ;Ir@;NkPCQ6bPf{ zo7<{~g)4$It3Y~jxyw&W zWT?6*02`qu#W}Qol^K0=d0mVOXCpip31ys=(~4tHA{qTN2uy=&ihs*b5bR&4@Rlef zjVToT*^Wg1Nmq~R6f}nKBuv^<)Q$+nj=-ihGBPY0U*lGm1?Cw5#yCz__V9zgdmv6N zoF1s$2#aO+B=!RSN^YFaQC_^UBM?Z1Frd*v=KyVa6h2d&U;(-D$HNiP7;g-K9E=q2{4{vj zbPB!1!gmVoWO!J|DF#2;7^?9$e5oYAH(gggW?oAf73-X4Mb_o+x?YB6;xyKY1f%e* z4z-8Ci^-@mVl7HQ&oX5A>HsgPn)q~2#uOO@~|$ zkVMIwe3JNxlXC&oI&{!TD6#0fLsj4gDY6OlC2=WCZyDs-uZm%HEZsY}X~`Fk2p;&O zGJra5eNn8bItiTt80xl~>ayw|j!`bUG~mp#ImPn7q08!V2CSA3pbMK^m>>|4KBxcP zQunV5@Fua0ermq80-&?dJQIN7_eNmwFt)_e?DJ90Q~p93pYk*tu$?VP$9=*j;r z`Ad*SOM5=me2usH+uKqWdJSO-^v!4?ZuOvt@Y#YnCZ5Y~;DfDSo*QrEGiv-TyA-LQ zftG^c^Hnmr?5GM%yHyObkGGq1CpE&d>UW?l#7C$pW%{ZzZP73Jj6N@&F4^%;A;lcJ zUT6~sSZD0!K>KXI38gF4%KA-zKeN^XS;tkB(t}CT{fypw)sCk+%n~nJwcuIZ7c_VC z97bZiGdvu~uhrYaCX5Lp8vCMJU>ttof9R+sQ@;^en@AgVEV7<=;*hLZKU2QN3qQb* zh+$`7{GrihpT%*HM)P#Y6FqS_h@)j5tzH?2uJMArO>qCIX3xmi_6FS{wO6cTZ14>p zSK_TMFUUxu$zHXhfu%zV@T?~kB|Qr-9m<}g8MuKPn1oONSsdT-b{GUGaZhI{T07(v zLTA0dTeS+1Ba;qDitWj`g^4HRX(Y;jJnUKF+H4~%({6k)puMLB!%5qXU zaLYs{Te`g|JR-5d;#O@-Y-CDm=ckPL-ZLb0u?EyO%xHB<-OU7}EkX-Pcg6z_DZIOG z)A~OS^|)ixpoa>ZY8!x95Bxwd3W_Ys&oDghF@u#AR|SuMpA2B z7#+R3D=KER$}9{;dy3o1&mY&SYOI?iruDEEY8txBJW>e~=jAp8Amv2q<2+M+9F+>T zF++c6DoPYY13JLors)1&G`Z$qzhwX|j+2!pK|MS(v#f@1v-8o#V3Zfg$q2wkR|^+! z{&@+hF(#UUjJ}GWMZg$^a1-^1i~7E#I;^_364ddw&*;`3&BWCv(cx98o1ApsbA$#$+} z^9!umDmYxWor$Qt&kOJ{C|B!3d0-=;j9&fGYPl`zg?Mm#?kAHeWF*B;u&1OU@$5@d z$TuQ=H9I|3`&_;bA<`CzARBj|MWY3IK4RVm1FWI|KDw|X0%V-+Zsv^` zR46r<(&+WDR0EeD8L}dYGoHBsmtxeMZ`ZI=Gp81( z-APW)t;!1n*#JW#kp4Md$km0Cr+9lwIsOqfRH0+z`f|OU>s9M%+#5SFuO}939}|t2 z%3#J?Xr4MxgTcO<+XX%QOWY`qS$f7$E=I}umD@+S(DPBBQ;FRNJpG>%kUTFso*z(U ztm{-FfhJ|;{@VKdKQx=d``@==p{!7c!jK7D*F}ZjovWhW^&v!)W&Q^5g-)s{oH{t< zpV~2JKbcwI6w5=vWIjLTA|0m>0zGTIGV@+HPeXsZcoLyKqbk}mi`rkQCQm`2?^EI+KHp}Ak8D?}{<`|CAIH1^w=-VtqI z*r}0}MN$0NZ!0k6$p$%bJD`-+No%gIqi=roJiHk7Ws1y?heq%5i?r2Ff4DG?1!{@9 z_sO&M7UMf$kiu7~6GLO7s&_VbbE2mxvikIZA44e0EP0^SN2l=M>{2@hT#}9|mot#| zP}2~RCnBWUNUJJ||J-bkf_b_NRC#rOR8O*QPcdzYKR*K_`NA9tv2>IIjO*V_BQ(Pa zomOhqnKuL5T4ix-{l-5?5ia>$yPoTJ<3|4N(e!7P8cBAd7%K*1N6YDRK8YM_t3?zi#GQUQmLZAxxTvG0({B2ecaQEQKfAxh|$a$ zgjGC0)E0Z+&tb7d5VpTKfR_z>%n+)v2CC7RBJExx`5O6lsy0ds0#w|*o=3ld?}t_Z z99OEmV*|!q?^Icr7LdeeF`YBNrRkzj@Fv|4E9sg3Aa?wGpvaH@%){;BUX;9MKQB`n zU-?l&(*`$Nd`Fu?1Jc0r)3UMm!5m2DsQqLGSHm_Ay zyB(5BlUv>5KaA{BvXTJD7_sC!%+0W+Eh@BNI zyf6~NqYxq+BujG^iWQxsCfGRv50Ht1GH(Eq8{olVvmEcmjmbLwW|m%69~h<$Yi}WY z6G?*OJ0>vsasCrnA4CK;O>WdiTO!a(7wTjV&gvv)j(R*BuyZcZPU^M^IAPnqet+Pp zg$RrLO5_TknS&u(eL%+Q<0HMxSF$#>lEEzc`|FI=kTIRH*gmh%&s=q1R2k632h%8H zMW4||*}R%7Mor4mo1K)NhBf1MyyhZfUoK#LZ2eM3F|u0+)`f1nO@S3JyM|sN8!=Zm zvYA=Td9>IBQKu$L`{=NaYgz=0En17YSk9*epR7_pV8m8ZjmOYcn^JVotxaON{gDgN zP5GsV@YHoRitVibxolm2<1KsN5MXA+K`s1iakIlOUJ5@NM|u;^&yP^`>#i!0J>L<# zx3{)6*yWae&+4NFPLGUFm&%sa+q_Q}3)bMylgUaNVWpvZ+akt}&!!R|p!RF}2_k4&%MXkWbQX3*e4Vt%#6JAGmdmxasKD1< z^Wtyer0x37q%6?o#$(7twxK4!yn^a-`I$wcp2+d=c7-V14m5WaTnYea%N|gcY+Ke2 zWeVR?NCEnS-o^xpSWYSet1Z;wn5E2LMWqx`z(@9e)SXLzb_sNWcjba1rr? zatKOElA6>5M$W+^T0?Sx(|pa4P=R8m_KfE(DGvYM&m#{H-&?|!YSwMba=I12m@Q-+ zY)xzZk%eXjX3!NK4KCOgAe7!P1-XN5px!GYL>5n?(>=fY2zxW}>lWWqK;2wliHWi- zf8hOL41fn$#Q~R*spszNt;4?Wtc^5%<;6Kj8>ArfeeWP>sLUzRQaBZ--+o7fQIw>q zva3h(%t}o>yEfEH>q4+|S(JbGNu&+@q&=zpTf*3>v*iD;3s{O{tZ_By(E!(+IJ~eW znV5&bPPxk-I$*(fl-=1eV|z#lqx=2aRn~fc3&fI`IbQrYXM!G?+uPBQY7A)zO{Y&R z;fb7!S2NrBjh9)1fs5a1P@d{)jwu5(14Df$wU5wEtAbRO+n|d)YN{GK1mQ4@Qi-lm zY~$nz#=5p}(0vO!fP8ttBCAqR^49~AwA`|GW3@m<@(xXOioY7@N^u2pbV#?84bH_( z*cbV784LH&h(-r~B(MkPt)Zj5$=*XsQF#k+d{5vJWYi;Qkd~|#nzb+SV{su6Ggc*h z`aw%!H)#YFkBYX>TkUvm_#lYLMd19n=!f#0{jKsr)-gf=Bv4-kO9RgMF)c~$T7RjG z;$TuwhhV-4-%}l9!S|JdB^<#|n@AfEV(S6E%rd)|#|gH{EiEsD*y^|HH`7ur-J`MI zaPb2xU$f`n99|>|fN}o>ruTj1`2u@kLgw~8K+Ly<)jlGuBVMKYDEtTQh^`2$bEjz~Dt6ZNTvY%jK9tGN=eSQ|1B_8=?wl(clC|aiY4b!5P`y zetmN!)-LqI3l|3*p+S~ijf5b;@hkyMNiqW-t*E(x?SyKaIAMCfRWTs?j6M*Jf2f#L zORs&vy`7@w3;@cl&+cEMh$)MtoJ0TLd|k=OeY0PE=^SQKUZIM76t;n|WylE8~{_l#*t zc?#0KsMsDL5@qk9M0V5>ZT6toK$Ju)Ms-i%aTI^B88KI?mI_sE?=b*8v z|K}Fd2@*cJqZBX3K`F|K#<}PA-rAg0kJ1o+_O7T3R%VaAs20xLE*&-J&^sa^w(JQ; zpjI#POMzB}FOGEWQRFj z^o}u1xVCyh&-p|Dj0n9zc?cyh;LE`?y(vmS&#zg+E_Scc_Lxzvc6AjLR8>ccYu|wS81>=$N=b`g<2%U!rXE!#vLMzp zwFzoJba1qFt|?FSJO1FSbflCJ_=;`mTjAg6s4FpVxuH5|Hqe!ampo`WU-bST0i40Bp&D<9AF(NK$`Prc880D9Rycf%StX{5T~9d!S(?pwSnWf{Ci;qkD2ug}W? z8rmQdV*o1h&bSCp~p974XDrzHO);jMNS2N=rc|fuGhmRez5CIaT}=_1u$MT zvC(F&g#rXKs6Y?!rVGXb^|j(@cu#Dr*V8fQGTHzNY5sa-u2b_jZ0mK62vzA>wY}oG z?%9%P>rwx+HUs5saZVg|!#fRoQ;0{*Ep{(TnTuJM{?upQMi9$1r601iferVtgPD%- zxvK(d!^NROZJL#eSk4m)fU>U+ASQt&pyV`fXtML@pGW&=X0x%N5Q*8!~Q-$};0 zrusQ$X3Rcp$|zoK0!s@fGKy(&p!v}z(aYNb1RW&;ceR z`)m`G*o@LN{$9Oz$>Nu=K&w+2QhQF{#-8E|rWQJh82v9>@U^O9uC=iE@Py;_P<0&@ zE~$`E@kDpCtbe@pSya*L3dvCX(^vh^Rv3=Vc!p}mz1ZLux{yg;H$wX|%cd7{Ph2Z+ zB5qmctdsF@kIr8Ga}Z0@gD{uvExks?#!-RF2s;{71iDcZ%9V{zxkw=g%tSTX11f z)6Tz!Ur5qZqN&Vy2NW4JEf)E!(ECkR9gA}9&QI)GNx zu1^+m_|~O4IgN|)As_cW=KpmdkP*19{rV=0w~G)(ial<>-a#=;vm0uUav;PLT3jP8 zhXwsAi7^ZngaC=p+sNq42&KVea5abIAw-7QT0$;fYhI`0EW6=6w1an(23Vs%W`H6S z*@`JHJEiTeBqS=9bldIwQe~iBU9nC9jBp1yzQDk+s7%Og2736g%KQ@YQ?{%|+}jo{ zJWlocnQI9c)sYu%%93p>J58+M5|tmluQ!ab!ih;Q1OL;c+O-Ej=K!L@j4B71~xv=VivKFjthh01}ZQwiG&bd_(B6W-tTIv zUI51|xIY%-?n%uWc66SBB06)%LMZG7lGBOFjJY-DE) z-V(hu#GK|_Ure`Rk66{Ggi?A=SglAsgdw0#V&1WYDKnC?<1y1qTUB^JP(V`NoE%`W zRC&n8UcWRTL(~dcrSlI1tJf3CE0FT&mZ6Oq`=SW$!^L+b@}t=XeELS#)d^tl^lZTY zvQHt<2Ynd{nJrpX@8!(fkxqucIBfdY-;Z3fa$pmG-4=#dtj!;h*Y-5|{W#oPfXq=s zT1mRY&p@d&k}L1Gs|qijC~V%^@`X>gBfsP2KIc4;4uk_ZZ{A}O3M2H+4W zxtzLtxH{x$A0oK>maVZ5-sHq2oz?^Re@$ka;H$d$t>y9ey??rGzXY+Q!vED-k{TON zc6VGUW8uTJ+>%`WVHESZGAfQ7utdY-=B3FLyDTIQi4n=tpc97^>nn)dR7v;_8HbU9 z!~Yaoj%NVFk~m5FIZaE?%SR`*yDrf5hY{7@+t@ikKyfi4MNCb5|COjmlE`nfSwUX6 zj}UL!`6u2bu-13X!Ea%$krOP5F32ZARwESlh3{{cA3BC#*d56_0w&P-AN9 zrG6P;K&R9pm}P`!%R0d0l2=^|5k`)Q-n>lnC9!XTIRPF?1=L@uG!>_pjmhrWt#t9V zz34#r#(=pPfdQF7{srH-)mZv{@co(lD2kP5r3qm6hfN~9RyfMpA@#F~qM$M6uqWLJD2^hhGsm^jRna$#n9V>BJwsf} zvAX^#Yg0_N$v9Egmk3#9Q+qjo+91k-Ptuf6F@UK=YVDqY{FvOEcJ1Km-lIPtL=vEE z7kVb#oVmt%Tj>l!ZRz|NV(5*C_}a zYBz<+q&VD(nV#eCMnPSV`Gx|+tX*_zUvW@k`eK!m@Fcw+4cR2MQZvz3U6n~*?hK1$ zN&JtGd*Mis$t!{Ma*#Tz9XKs{6{R6*WFp@eON8H^Sgc0u>b3%Ik9Qz8 z?_y6d@j~p!vW&ESJNkwrX_jCqmON6Z3Y%)~68Y#rDsXnW3TboLUO(6WNr5LJveqkQ z0m=+C0Eg6TjNNsR)bgxx_<*z*E>6V6sdGz?8^8#_n!k_v;Z+%;8fxIKKQ6iwkvuE%iZ?k|Q0a;4h>;tu$+N*{3(XS5T~nxN zugeLaC3MCuM84S;GN}>SQQ^I*A@xfAmblIRMot{1`IAjivZ-<@>;zmpV~nzGdWb)B(d7+s z;6fgvNpNo_;JSRWMss+boU@ifH;3iWR1Y8p6l?tb4huHTZoqp)w(w%v2`i%pAUBluWE za_iy|f=6{D%+SdWl@z@JrTHAY|IuS?l1h8Tk76h*r)-EOrZGJ8pydy*4lp<8BnDPy zIuCY3pIrNrr{+h}Wyf(e`;OF`O&i@(6CC#Dag(V_>_w=m0VNFD^Ri5f@nc$dL0kPF zD$VLi23V)?81q7bWwr>zV?V(MhT|f$^kVqP!CFN`^KbA;QS&wkW$o7RC4Uq z)&D=`@0W*{8b@JNj*IrNaso zLOvXfp;_P)G0-&~>4vDruNpTKd{@1OkJSI*k zPnhMO=U(Q!b6HM;?)`=Lhs!4yxS}4`LW6}7#-67K2xdJVt8aSU<014pmp_??ewO}k z_+k9b-eK<`!1YfFOG(yEmrm#6%pbAWDc46pA0v5q;s?x1`=db$E`C6vh#Bs2Bz&N| zC(X2==~X(yCG!)N2#+;dpEbHfngJqL66fkS2k8Kavm3N_S;tC;QFG#h1l*Ir`uG#z zm+5LHpt?jZs^EPh@Kwj5(F``VUe{?vP!;yoS#nj7F4E44h_~TYjvOWwGqsoAx@mG` zym>NS=&6=VtF!n6i}cvH{}8B_9#aPy?q$v?geo^W>f{Gp4E|--r~@37St#q)LWP!u}vrf9fngm0j7Je5635Xh9bt z0UNCa?qlHJ^1*gxrhxSmuhWD>f7i5{lqi3#I-I11+&LV2{Rc%WeI%h=A*R)R z0_LMb3vsuN@0O#TWb&8&b?m92c_uF`8nEgH{8A0o+7Od17Xb5YCGg50cW~9`oWcw39 zO?pig1I()+c7VnRDINkpD^sNltp%5;Jd(1tu(I{Yy=YTzmtc({x<0}3$yufVM6mmt z)=WGw;-nMt8MI&d_8x)+@SPWYCU<2;>NyHYjVi)oYFpyGENNdINjEA|D5S~eu|}7W zh```uMP^YB)eTpkwnn`kF6;#8w(8B%tVu}H7`=Yz=1uqaX!1pmNbPfs=x7B;E^r*` zQyFTXdXBX&7fZU{pg7>=%N_=W3&y>gD5)hn6$}ytlPB z5LSz$Fpg=A^6iMx7sxXPB*6QMumB=7!4&yZkjLS7;y^U^^^XHmKoEL&mUHcl0*MT4 zULwv7u~lrrPDlaiKIAZNDHX0t`Beq!y|~V^MgYs-R)E%G=j%QTQoIf_xkhMR z$BhJ&-3fSSRg^g$Nno*bmI;F}DtWix{3#U(bn=Ojw7I%8fu*3}@DwKb3AOZ}>VL-5 zi)1*L7f%=w(Fy2HkS|^Nu$h&&&N1WDldgzVY}#!Ltx3_|17s}mA@}+p$Gf6*^dmjB zfcdeO!>dKoDB~Fu2b7394EaDgp<3?861m{+!8+5@AyWpfq_b-s5;RCdTjd}zQwM~R$*XpxCzIC{Q3B8iQF3WLoG2+AVg zJX0ZrPHOc~V47id4)PMc#p#c7!=tXbjUW7~=cU%}|IJ?9F7p-nq9DtpOO+IpbPWbT zH$y$lJ`Fw*YOc&mib=L-BHbq^&&=CA5fCrUbJGNS_?w#Fs#@CIzi%;)KmsoJE1_(N z1hacuW|HL{txGs8NeEuDn7~!KQ5SYTfclJusPGq}OKP%HL@nnmvb`^WBZG9tzNT?@ z7&@7>ID>s`FSch&xsHYEswy<-0Ar6NsbyP<%KB($X?uQGIxK@H%CBb=6wHnq!|Rwq zKR=%B_)NpXMtNl}MoI&R$03g>m6GyXP11{r0)vER0)wYH93ff`Tmx_t}$c{!-fAb*xTm4Hg@V9L}`!ev6`1G#FDI0u`r91~*b@59w^#J@bcVUY0R0SvPh_x` zLpAfqyRyq&FV9KtuW;T+55Yft1uB_i(1I27K;vM9Q4bR3%UnNB8NhT z&#J{3X(qVK%qvY0StgE1Lg>mz~>GnZVBMi(Mo|?g`3?Y1&z%Iv%zDzub=9%If zM#Iy~aU0m9;_)y!zK`cYB<-7HypMQcIX3N_ty6Jm~jY}rPuRgmUA&B}aj)#6mjDDED-c1AyLe8Ot2q2>Hy z>k|;#LhHarYS-9dz5#io7=pGITe1l|gcc8VU32LFIV)(}^%8`}Z*j;b z02FJ26S_=bYt1~uQpl!5F*FlSXg;{x86Gj9kX6ndAk#@p7lkr3o#r17{^tpB6Z%Au z+N_+n)_o?90d4;XkR$AKhx^({2VT>4blaUwc0I}>SPqCtVJY%Aj4BV4EJ2l^@tZs) zb2*zZ9RnZQwi$+U#)_vO>MPZSO~dCt>;!QK&hiU4Q)w7*f3$oNUxkytN74l)8u hMQuSXCRJa2VjV@3yg&vC-?4+f*2kRYxc<^\"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 Identity [/system/identity/get name];\r\ + \n:global SetupScript [ :jobname ];\r\ + \n:global RemoveMe true;\r\ + \n:global RunOnce (a);\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 UrlSuffix \$Identity;\r\ + \n :local UrlDir \"certs/\";\r\ + \n :local CertUrl (\$GlobalScriptsUrl . \$UrlDir . \$UrlSuffix .\"/\"); \ + \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\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 (\$CertUrl . \$CertFileName) dst-path=\$CertFileName\ + \_as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n /certificate/set name=\"Root-YE\" [ find where common-name=\"Roo\ + t YE\" ];\r\ + \n :delay 1s;\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 };\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 :local Script \"mod/AM-Certs-By-Ident\";\r\ + \n \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/fetch \ + check-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".\ + rsc\") output=user as-value ]->\"data\");\r\ + \n /system/script run \$Script;\r\ + \n :global tmpAddCerts;\r\ + \n :while ([ \$tmpAddCerts ] = true) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n :delay 1s;\r\ + \n :put \"Removing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\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 (a);\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 (a); #{\r\ + \n# \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass (a); # {\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/700/f14f095d\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 13:30:03 22.06.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 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: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={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nNews and\ + \_changes are not available.\");\r\ + \n\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={ :set GlobalConfChanges; \ + } else={ :global GlobalConfChanges (a); }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={ :set GlobalConfMigrati\ + on; } else={ :global GlobalConfMigration (a); }\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 custom Certificates By Routers Identity " \ + dont-require-permissions=no name=mod/AM-Certs-By-Ident owner=\ + mod/AM-Certs-By-Ident policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-Certs-By-Ident\r\ + \n# Script comment: Download custom Certificates By Routers Identity \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#\r\ + \n# 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:global tmpAddCerts true; \r\ + \n\r\ + \n:global GlobalScriptsUrl;\r\ + \n:local UrlSuffix [/system/identity/get name];\r\ + \n:local UrlDir \"certs/\";\r\ + \n:local CertUrl (\$GlobalScriptsUrl . \$UrlDir . \$UrlSuffix .\"/\");\r\ + \n\r\ + \n:log error \$CertUrl;\r\ + \n\r\ + \n:local CertName \"DigiCert-Global-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$CertUrl . \$CertName);\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=(\$CertUrl . \$CertName);\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=(\$CertUrl . \$CertName);\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=(\$CertUrl . \$CertName);\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=(\$CertUrl . \$CertName);\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=(\$CertUrl . \$CertName);\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=(\$CertUrl . \$CertName);\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=(\$CertUrl . \$CertName);\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=(\$CertUrl . \$CertName);\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=(\$CertUrl . \$CertName);\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=(\$CertUrl . \$CertName);\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=(\$CertUrl . \$CertName);\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=(\$CertUrl . \$CertName);\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=(\$CertUrl . \$CertName);\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=(\$CertUrl . \$CertName);\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=(\$CertUrl . \$CertName);\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=(\$CertUrl . \$CertName);\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:global tmpAddCerts (a);\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=fetchCustom owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \r\ + \n:global GlobalScriptsUrl;\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@10\ + .30.30.86.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.86.pub\";\ + \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" +/certificate settings +set builtin-trust-store=fetch crl-store=system +/container +# download/extract error: check registry failed: SSL: ssl: no trusted CA certificate found (6) +add hostname=amnezia interface=docker-awg-veth layer-dir="" logging=yes \ + mountlists=awg_conf name=awg-mikrotik-arm:latest remote-image=\ + awg-mikrotik-arm:latest root-dir=/usb1/docker/awg start-on-boot=yes +/container config +set memory-high=2048.0KiB registry-url=https://reg.vados.ru:5000/v2/ tmpdir=\ + /tmp username=amster-dev +/container mounts +add dst=/etc/amnezia/amneziawg list=awg_conf src=/wg +/disk settings +set auto-media-interface=lo +/interface bridge port +add bridge=Bridge-LAN interface=ether1 +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 neighbor discovery-settings +set discover-interface-list=Internet +/ipv6 settings +set allow-fast-path=no disable-ipv6=yes disable-link-local-address=yes \ + forward=no +/interface detect-internet +set detect-interface-list=WAN internet-interface-list=Internet \ + lan-interface-list=LAN wan-interface-list=WAN +/interface list member +add interface=Bridge-LAN list=WAN +add interface=ether2 list=LAN +add interface=ether3 list=LAN +add interface=ether4 list=LAN +add interface=ether5 list=LAN +add interface=wlan2 list=LAN +add interface=wlan1 list=LAN +/interface wireless cap +# +set bridge=Bridge-LAN caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-51B25E507D07 certificate=\ + CAP-18FD746E5814 discovery-interfaces=Bridge-LAN enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/ip address +add address=10.30.30.86/24 interface=Bridge-LAN network=10.30.30.0 +add address=172.18.20.1/30 interface=docker-awg-veth network=172.18.20.0 +/ip dns +set servers=10.30.30.81 +/ip firewall mangle +# docker-awg-veth not ready +add action=change-mss chain=forward new-mss=1360 out-interface=\ + docker-awg-veth protocol=tcp tcp-flags=syn tcp-mss=1420-65535 +/ip firewall nat +# docker-awg-veth not ready +add action=masquerade chain=srcnat out-interface=docker-awg-veth +/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 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 check-gateway=ping disabled=no distance=1 dst-address=0.0.0.0/0 gateway=\ + 10.30.30.81 routing-table=main scope=30 target-scope=10 +add distance=1 dst-address=0.0.0.0/0 gateway=172.18.20.2 routing-table=To-VPN +/ip service +set ftp disabled=yes +set telnet 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 forced-ip=109.107.177.79 interface=*A type=external +add interface=lo type=internal +add interface=wlan2 type=internal +add interface=wlan1 type=internal +/ipv6 nd +set [ find default=yes ] advertise-dns=yes +/system clock +set time-zone-name=Europe/Amsterdam +/system clock manual +set time-zone=+03:00 +/system identity +set name=MikroGig +/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=10.30.30.81 +add address=10.30.30.10 +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="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 +/tool e-mail +set certificate-verification=no from=MikroVados port=587 \ + server=smtp.mail.me.com tls=starttls user=vadossio@icloud.com diff --git a/MikroGig/history/20260626/20260626154148-Diff-Config.rsc b/MikroGig/history/20260626/20260626154148-Diff-Config.rsc new file mode 100644 index 0000000..c7e7278 --- /dev/null +++ b/MikroGig/history/20260626/20260626154148-Diff-Config.rsc @@ -0,0 +1,14 @@ +2572c2572 +< # download/extract error: check registry failed: SSL: ssl: no trusted CA certificate found (6) +--- +> # download/extract error: check registry failed: unsupported registry api version: +2575c2575,2576 +< awg-mikrotik-arm:latest root-dir=/usb1/docker/awg start-on-boot=yes +--- +> reg.vados.ru/awg-mikrotik-arm:latest root-dir=/usb1/docker/awg \ +> start-on-boot=yes +2577,2578c2578 +< set memory-high=2048.0KiB registry-url=https://reg.vados.ru:5000/v2/ tmpdir=\ +< /tmp username=amster-dev +--- +> set registry-url=https://reg.vados.ru/ tmpdir=/tmp username=amster-dev -- 2.52.0