From eb07d8f8b11eeaeadb7ccc87525874cfe00fa7fc Mon Sep 17 00:00:00 2001 From: vados-dev Date: Thu, 30 Apr 2026 22:00:10 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at Apr 30 22:00:10. --- .../20260430/20260430220003-Binary.backup | Bin 0 -> 352350 bytes .../20260430/20260430220003-Config.rsc | 5545 +++++++++++++++++ .../20260430/20260430220003-Diff-Config.rsc | 45 + 3 files changed, 5590 insertions(+) create mode 100644 MikroMaster/20260430/20260430220003-Binary.backup create mode 100644 MikroMaster/20260430/20260430220003-Config.rsc create mode 100644 MikroMaster/history/20260430/20260430220003-Diff-Config.rsc diff --git a/MikroMaster/20260430/20260430220003-Binary.backup b/MikroMaster/20260430/20260430220003-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..9756d8187c140297608a09f5dd2d455f5ecf0c8b GIT binary patch literal 352350 zcmV+aKLEh*sF8DCUYyAn%gKb9TxY0`3^=u#|U8W90e9%z3~6P%CzKrpn#%MLG2f+gI2|U zs!rj~q4*6grVl=2f$9~PS?gFGXzwA?pT1(d3J_;E2M^G_Ajs-Jle`(e7XH#btu5p* zQZlz=dMZlRCELd{KD)AW5P&_7fzm!JC*v72NuLxnfdT9iHH&yc{;fcqx|y1dp6keT zh|kp~n!S|VsOa4s4PPyTC8lB?L?DD_l8msIyDCsk3={_$UxOPOd=dLoK|DCCfAsy@ zjlzh>o+6d=NUtr!*hqlMIc6AY~KgY?c zus`43fNc+8{H{~pZP}B~E8h~gAV+B&wOCj;zekFBc{@B+F3yYB{#C%{MW(GRlfc~D zO=gd1YDnsnqsjkD5EczX}Gy|y2Bn9C7Kn`iSWSozUbQg zyqx5oN6#z1Heg;pu~6@*d;oDev(s#5fS8D3{qcmn7u#CE*vhE;LA}Fde)pO zXHK0RT<=xWSPagv$BO!~mdnAnn0t*%Gda5R=g7n2i8FB`LHPvUH-K2P7AXvR{zD0X8jgfS!QIv?m5pbn7>tR+F)t=Qi|g0 z<^IO0E^0;ZBr`#;aKz^1J)`sz$-`l@%)KfXsszw@gooSy4zZT_0q1?RCj+C>ny=@& z-Eem6H`$~N;w+Bh_yMKm>sNylaW%=JP||x_mMk@v9u>x%RXx(T6%kE+1^}|9O$_QA>z)&Cm^+D* zN|sKNHzv&OCKC?C4dT6fGAL1g|ByjtlHneAY)POmD+p}BY+mA&&a!n^)Ykz*0{zlN-RkKxod*WD}Hx|SnX38f9+JMLR4R<*`=A<@Gk+Oc zyOtH5sXVnM$U^YmCBK_QF&Kx8USRMJPv|?l29AMEV&7i#a z{V}i=fRrkEcD8n?bGVIkf6#BI0C*f}}JbBtk>8EjzR?FvrABL!4 z>967HsiUkpzN$`oxW6!HHNGYsKdDG}Xm2*%RSu~i;AI~^ z`3i2W!SDhDLUqrs$+#==4^f!koGRhvXSrzKqCR@BpyA{HsagijDrGOajOX0h?PwK;YS?~28QsZk*HL=TbrfWA-%m$v|8+H zok*yGEcFezNu4`}>gJXtm!D)r^3s=DV*Cw}Gzt|*w>+0fE|+)`ank(liK|6==&^eZ z^rgGvn_o_zZo*8s8h&-w>$qCPyR~*A)Gt#6GJ|b|QfRu<8v*@A{SrlqyeeN;kuZ@q z3E?a0UnV7WF4s150#fpB$mHc1`7h-o^0B+tvUE#)0`$s^cn$SxNVmC zmizxv4}84H=7o6(&Cln}Z}Loj13?+7v7g=5sFIZWfqeUHXND!sO&k1~3)U zj{8HM3#gMcJ6i!YDaU;cAUp|kIcsyzyo1GOXy8mS5}Jn_28Hl;f!PtH8pa`s zyJlQNQ9F?9q)jP8B-9*1zHjREldRI%hHUsvK(mb{nvmd{Nk0SGvjj?dHpr$Nf!g*5pZo%8)1g6oeJCn2_!7BhQyPmYJ>c*J&g%}&l=H?SDK%(geGbjQN z^rje&SeUjE^QZ0^U2tDY#$u`4jpfrJsh=Y2##b4xrW3Nd;AGeX1N0uw_L5Mq zu+8aHtfGohAO927m$);&Qc~Jl~w3y{8fAouQ8EKNFC>*!4Tb;rtM+eHcqF8Y7K z{BvL+vM_Kw)Ya=vPrpwzvE4FxvbU;FTBX9mn}d-RHXA zg~n%93?F4AFi<3P1f1ESQ@q=ub7v3MgYAC|T9R|oB`%pc<=C!wfi51;_8z_OM8Sus zR}EGF-0V_`vbaKo&V9Qfnm>a5HDRX-7i!M2Gxz=1!ZDwE6#L%1zc2I|5tRZOvX3Jx z9LS{|^=imj(qOLr7&Jg!_*vZ@FeoC!Jm!IOZO@+@-4xs^cDOIHP_$&syY+Uds3*Gg zytpDq=KSB<4SlrIS;>vnW%oUNV_`;gCR)1DSD1akRgu=aRSm z`_$Tu0!8Iwnk$vkCKW+GaR3u?x>iUF`ah~RhUug_#aY;fqjw2x-e@UU34EQLEaY8F z$fte@v(5D~4N>F`s^&u^>o+Ux5!ECM)XZ(|apuxSJbZc4K%mkMFS({uY>htp544*@ zI?S-F6zhp7)@J4h8^tKTv4QXJ-Qx#-FXO~efu_M;MIGAho!OvmnZ$DD0PG&_I@?=T zkIzu4r&LlP+q~rPxu>>8svjl`4b8kG!-#Gy1n_ih$t z{Scg9j$-G_p6_KbLwbg%m;Sg~p+IfQccJ>b9iN)2UA>vW5s6~p!7N%Ma=QzXv4r=2 zMm88cQc&T&Te<3KfZrtV8Cn!y1FnM99zKP1+|Geb05f-qh>(7E`|BMRksLZxwR156 zgDv6ijpxgs$-2;?HJMx8ZYwZFM6*zs9VrG~Bh!FM4u<>;?gos90?5b0c^xs_9??Ps%>lznts_@>tjjE}V_^2xH+X|F;c2i9VG_ zYk?zNoMI@$;tLiq1b3Rt(v8c+w9Ig2F!^g`m=N0)$v#%;g5cExFCm`y3pqmC|D7s| zciUOBu1$nALv5+=7-dXGijZ_Q*hS-5%@T*&^=qLxln3EAy5XByt7fIErZpGW5~IQ1I0kz!F#9*1Z}#@70x z%I$Mh)BX$NxVL(Ntbvdlpf@g_Jm*f31rd=>z%?a*Xa%uLM&z2HSMwW zqT}@;%Er8{1DuZ{(Z9g=hj+?4lQv>-!HpKBZ4?T;I_hLgl7EuyY6@Vx0J$=5#P{vM zl4kLNYE;?m?Oz*?A(w*^x#p~lsYhgMqzk)mq5nsK0@FFTF|5&5~t@rF(F`$+5^1Uhu6qWJ?YWK2$(XWwVr# zf7AYIy(0C|VeLrZ8dH?MfQORH)EySVBX7 zkO_34po8FgTLg;3{2u5>lbXssOMA5@l$K7-cg<6M_9wPS1wI7$ke&YQzR)6;lm1D_ zX#@MNh`_ho_&25n!+J*8B9#W{(n2SSLpMr)jt8FjOOU274F zF9y{7y9u_Bf4BOtpe_9dXwN?AmO$qbb4P;H8r!k})E;Ci80XPadvjUoKwKHnd9ps~ z&@qCWap?^AcDH9;gHMf522I^I^E_fc@^L-!uTYB9BBzpXK@;ycw{zE|yNrQ_OjC1a zyHeX*FyH7gA{d(MJl5$ufo@Q-e)U!bPXt%k@iV?Usg@bVqDv{PnmE<9U+SQVX@0KL z+sV+)u+&AWNhCMTvA4phSAf!wtp6RK0LH$CA`i-JR1fX#smzLH^q-{){YLXp-@CkC zQ6p#1>D~5T&i)vyOg}S-57*c{dDrPB$RbQ|s+&=BTxXlG+8#rD!k?{I?`nqb!${2E z>9euXpUmpaQ1(lJB)oK&s+}-bfjYTHo+`nW3ZNz?gLDz{3+{6_u4XM#Lzv+7#FL4m zqVj~+8YjQgNxYXIb|^uX?`*0`RkAE9nrH7MtPaq09qS5SiM*0XBw#1z3&q?z9;UtU zNDobdpt6pqF)h61Ag&qO7FV|0#q8M|=(in=L5u%0p3q|qS>*s}6r{G*WRbu{RY z-7V}h4;94wzmD$NJsz(V{ehTU_pJ%?4?HKhUBR}{+)`<>9$8#-P#c+^|F03s6>iiC z2fxZqlKA)haKRs6EvDXcg&bwPkgogkth|(9c7$LL%1skqkc{3s?-GiezLubmZscrd z@SOA8`2l&dAHNi50Z!hW9htrZo5bJwlt$%dU30M_T{DlEC=mnS5k*Mn{dzWeuYo?nT9W}&n5 z??D5AgI)`2>MhB%J(pm)XcuX$is*^Gm!r+QV+#;V(XKDLbMm{1Aw`bw zo)`*q8W7+8g?^q{qfxdkATO zV@fsU^(iz^jA)S!uw0-8-G+zY3?2Q?+saebi;;6>YeeiPC(s#Ou zjDqZ9V{q-uuwZ;GH2)prOSWtD7s?NMOwkGmLzIdMfibphyP0In%D2KlvXp;|g}RcK zw#cSS^hY)vqcn#oI>lDi&i4+nCd%gbT(Kf*bWpLg>(^r6waGqxqD_)eMpv#*J5iI# z9XJ=*;^4o=Y~|?04Z9*l=t1CLltHqccmgg<5WHnojD6PDe#zXcm0JLkZ?)-iCGR_- zJn(+diJF=dSJhm3Yap+TXpeK-W85$gB_5vsBLC@8@FNC1fjbv5a_oAh59bg z*IS7pE|$Rlx%gzYCS~rPDw~4erGa_B$fgpxlQYneG%X=Ed@S+{?opoXyof#hTbq;B zD1P>K`0Dj@j|Q}Vg0kMk7+9NO&UG98RW%_ey{_dyo2@_op|cR$iY$6-minWA8Kw&N zuf`cQd@X%8l`QctWbCZkKO0-Guk181Y;G_E+QYH?5h=3tDgW=AsY^9)WfJ6bLvw(% zTW1(N z$Ncx0qvA?TrvAaA=yn*ug~Lxtsg%8#K^C8Zq~ypEl;D{UYUFN#8h4D=(`kly2)?Cm zW!idT7+K|tYi97$y%@Z)W42W;K=>aBjJ&Y|sT@v%Wit@uW)rOq%C>k0P~XvJ0>Usy zgyYIw0NMJL40OoiqM)<8@$=2Ey=r7=MyV|u+BFo}k`D+13dr<6m>ZZ!+JxOJn20#r zGYo=iY-cz|s-`J82h^q^C)*8lF(eY+C+zJfV<><{f;f<)k(+_)zPQ(VJ8l zXiccP9Kk$yHmMPVHp#?Pa>xq)BGK+}n2tGqVi{{Z) zr7jawdt;I#BO)-0VF;5+weF(IeS&OOx{@*R z{R(_7{yN*g1TPEh>6V{(xWQqmb!E%GcBHk!gm}~c;!&p~ZJ~8_b+G{WIb9R$;8^zL z__m$w`Fy`ofU({;b|yBMX!}xJSxWPRdwB@5jZXi3WZKL$(zeUgi9{#*>!>YpGX+4F^?9>hGFW%YbO6^*=0&7s z^qoVe*(RjHYs1f35pk!>Kql%pzQBM}MP+6tv7`zvKD%n<$2c^qm&ShrD0r|>RF1zE z10k`O$&+`kdUW}!w;Kzuy~si;y4}y}^q@P-bAJfi7Ol&5Lr2gauq|;=Iuo8dvd(=l zNoQzq{7CTD^OijTqY-pAX17lu*Le_^o}~4-{WHE?6WTIeLESctbsSu^f2+pP8u|+u z{-3xfaqD$wc90{emY5bV<4bJ-M8sFNn3$>|n{*jmfZ(iPJVA~QlLPBER{asJ1{S4Q z^zU2T!5=67vz1{Gp#JC%6Ok zBk`jHN^n9@#|}6pk0v|JQcd3&fzAH?_hN%&6_5StWrI=F6AoHBB7 zq(9P{esIhKYvhUp@lvbW(B{|wIU1Z}N6Q4~YI)z1_(7NAU&S)oN%W-4YZcJThwdya zrp~dMv#o!X2~NBL^C4!@8H1MCMf{eFpH5n+Ic|z{?~AzfGZ$TG+;E zzpbTWwY`A&-yRkk+#e_e)o`DI9bGd!j|^p#Nxy*r>yce6sw~H ziM4;AwEH7~{NjWZ2C86>Y3G0#`x~AZ;TfL`(NlZFj@$;pcc>$@1xzIv_3Vwv1Ucl)gwh);c$I!8bY6|SP2#CqqY zo}v^aa=+;ta8*G&rGL#nVDZhNg#Tcb=%$WG(foP^enl??rYb;hZ+CHR`D=?U%RC5_vtX0)0YLvSD!C<;) zE3&XD>S>`6!;FGeE80ar1WXfgAlP9fa4$!PZ>*LHjz+;^pZtJta%uX0Q1qO2=o6~FXIO#jWDZ(3p-LD&`*KLe{ws?kc#K$ zs1B_jmMPS8)i>!zM|TYLO@GfOP_Ulz;db5>6YnHQ@?trUJNLulSU>txWnJ1HjW+iT z9+s2iTB319hQD(x2ea0VIB$B8_+RB}@5XqQ3?k|BsSl~S3dy5hd^)OCig;a9t-uq7 z&h)5Yj;S1tHL(d*mDMO?`V!45wM0E*bu#_1U(;4fJ}A>Vw)R1l{|#Y#kL9U+#J~zg zhKX911d(h#fADYHBg0+#&*VChcZ~HIj3g z9X3cmltT90$beyRBt(qX`=vW2M2jQfoMqV%pH92=v3ZE^fwkV(E)o72iW8@wlXspl z%#7(|HDa=syrI3lJzarG;l|VQ$D`VyVzh1!EYqicBflP=VmhC3D%x8@UfzbwG6%uT zhqJNbQSe^lV@O1@aeK16hjjQZ;yB^?zzia6uWm;}fp5krHt5Qr4B0byF#IB6}?W{jqCPfelF= zu~d!TjY`7fU$6yNkvxDG`44r0G51W8`y@m!M!_E2$U?(Y-z%hOut5JV?z}lhiYtff z@sE+xZt9IZlV((W8@@PD*V4n@18G8-=|Pt!Xa~c~G-VRZ56%Bxnqaw*$#X;Ig|;CV z0VkEACX^tEf**T@AKMBz=N7yzuC`@o|6^{)Cz8Vx1ztGYtobW-a zy9v5CBOaKta6$APu<{u*j5~fNm!dMDA|FlW1UKD%hF7I;Tp9B|vdFz~;)=JJK@3o}o{&R~5(QZmF7J zOBGo&aRe|qtpG0mV>R7)UoIqp7G&~)T(l7LYd;HhS?QgAHcde@6l{HemQS`Ueip(4 zRgiH7q*qCKoV}3W*lkRZlu5i3fLF3+oQBxs-Mn(CnbALyU@I)5p~#QO%0P1p)x4_8 zor*eZ1P|E_VdtnU8E-Zaj5N2#tUU|PV1Y5fG4gEh&Tn8qVk3owv+z8R6s+lsqFdjf zP36G(K$*XDrn+LVC!aiBDFuS)aATs!QG02X?R)37)UKeWi0MDyv0o$=ad3NGpw2fEQuX4kgYI@P8xKecI2B)fYaE9M*=Yp4*@@}4DxW}C6?XrSwU>BD$ zr?8WnBdNK>aPLHYi*ADviKzrOcNh?&LB>?kYI2zu25lUuQ+l66H&#k#CNzMzFhoc6 zR(+7ND@3(py6og}_vi-Q`uHW?EgqHg9YN~Hk>-hkLYnd+A;f#AXm z$ztSOHUz2w*+#5}hGHQ4;)z1wzn18yuK>&M*A*!UFwS;b)%x6eV6~6q^aqN&QZ`6k zCiZi9?{)^3>sPWlY3Q-S3~NZi{H{@>>n0)L^KxT@Sid`9@>Yzjmiu+eqKH#miwdN~ z-{+Y;24(g{&4D}cjD>-NlT5#K1vW$etse*%nr94^EqH(l!S(B1+feMcNPB~>nZL6I zf3z8{^j9&H%(KxDe!(Ks~b&V*7ugidK^WK^3}f;u?iNf1je5Z%b|DvW`_dE+e>6$nheeW$>v$QE6* z)uvn-^r_C4!m`nNH9)^Z-n8D+b^U5JI?t(g?k}NwMT@ig(0NL}N?`kDDi%=w_t?JF zB*LL6<_M(`X}bxIEe0OgwK8KI1Rcffvp={Yaw)$3GD~Hted2Jby4{keYUaH@J&^Lh^XGsC|K^jla2PurZnOP(S7O!CMj1KQom7CcsS$z?6pgq@sh z8y}$KR$gqmD}bwN9IO~NS})XNg`SJZw7XlmczE|Nn1!BLgUseW3iJx!t{P+eJRwKo zG774rOht&0(gCguO3#I1(2nZcghp}6{KgGrl;frE8cki zqA#)7m58D$t%#ebn_^ryqfM`*6~TAk=RX5)r-J#U`hfqEdn7|G-bNN(tVl~PDG{yt z2CJLsDE<1UBnE+IQA=HLZj(2$L) zZ?uc3w3SmA=(U_aKKjiSy@TG+uL=&CSRW2mbUu zYo3q49sLX+GYZ4}#kBPF_O5K5zo&12-}p7m_ixTDpkqxD=&R6pPjmo8{-Hu5VsDRb z6=m(($I;(Y7`JuAWmn?zMoM}s9qTclVx9~J3Uqelw@XQza=MEjc!Hjub?caGJV+m3 zH>l7ksm-XU5L#Sm?@I))I&a}Dii)`NZ{HBliSWY5kG*Jo}dB1u=-ezTId+Z%Qu?a44(!R_SpZ12X5O~CGFCk-yIoO30Nia~Qv4;1dL?mt;~bFy-__ z)%ncfqmMcWP!^sUn7WI;8?Mk%a!^?^43}+2hr`%PY6x+%&FsaY|?^N?@uoN@NzX{a<)OW|T@S?cgIiDLP=<49{- z#L4rdgZK%ieYzU(9G#yq9K1Bs0b_^v8X)4?*-iNfX?htku`m}+M90vv!%AK{LH143 zf&SqT>deTY%1cRbb+^_mv%_(l%(m1F?pOI#6d9{Y5ytE_McZID{HgqTgZ0Os$|C)2 zOTIBe<_(kT#ji%(MY5+=M+6!CmvoQl6zsC5�F~#p9=^rDyBTICz3s)advu&V)Ay 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

YW6gfCdg#4?n*x6|KLr8CaG8?QCn) zj0H9o&VI$Fp3A&a z%oH1VVjyv;6Fvag(dK0fJ8FU|fl)$aRCqy`kMD{RM0J!9WgAxmgi9r^oZ43e=f&Fx z%&&)nQuagGQziL6MacHXMr)H6tJxMoGP@kS;;#rPv2;)-UP#F<60>>4O9qD_KH1AO zVlW?ZNJ0MvW6OH;U4ZL<0YMS~E^3Dzo&D|Kwp=PGCe!mt3kz0YT3pNdPEMeNW=Wqi z_L*Te3?%oQu2S?M$G)()wvQ$D0|4n)>v$+3+v-c%?1&L&Rax8JK3Va9wVB=T{Tyjw z*HptE&fp%qY66j8AG_dyEa6q-j`bD!()_V>il`m^inf0%vOOFTUyEf*ORP^GQKn>F zCD!9RFJ>L~bBhs@({aXbO=vM&P9%YEmp(U@5K}NN^<txIXiTbd}4hw?*Qzk zL0+cQPI*3naP!$;WOIwt?IZjKcG1Qx%kcC?v#+zJL@L&hxiZ>6`aCZpOz7$P0$}v7_Zo48+Hdoj>H{>$&`Lo_!o-ZA)>y%vmlOQ#mJeqvhVz zP;|m-GDj;?Mbya_%d3ZiKWc6_D(9h$N=c(MS#%E`Xv*gB2Y~}D>n2dK7@78A5o1Mz z;y>oQD2eE-EmlaStsje#XWz(+8gVOhOnMss!G{WsW(S80kfo^0pdUScDr@6q=fjvF z8Jzi&Y7;6?FM2L%&3CNK=|fOsKq@$1zXcF1_U73&o}9%`Hb{|m!*+2%XXSrhHaegV zT@F~KG}qFBZv`edFzJ%mb}SV1vXwU`3=OlM+1ec1jE09Bj)RHpN>B=1Z>E-TZq{Gtmg$r${Kx z9b^@VnQtG-@FsW$DOdk8?vH>;d2sw6Ne!nIbhmf1SL2dnccag&O{nJT{90UN%yJRk z_JcD}TFd7vMQY&kRjr+wfC^ok5LhB%Y4kKM<^v1Z6l<2IrZeIKz#_OW{88IyJd1^m zq8}`#6?YQwvJ`=!6+Uw+mu7@%kpX5#y*>V>j=%Y4T0&0`j+T?%-T|LuXYg5fTH&*K!CvXD+!<7>?H^@&N@u}Wvt;^rCP$0w6W!?xX(6Dm4+*3AT{6aY zii_HJsi6rFkW*GDCALeH-YXgy2hwCst)tlb2}cy}s!GbAgvzIj%`2)YNJ2CpULZpP zE3aSdO#id2hKap3H?b-2cZk8IJVvpR%^7Z4H&}>yj!@UzLgwIb5%PAl(0JTQw=$-k zE%Cb+rv{9-fcd{t;2FyuP5TEcGl{w2c6OQ*&jr!cQ(vj! zrbsND5h4v;RK|=ZnrDX5^=CJ6Y@ITsdp&jA)!WiN@LGxLM(7{CB9tF7HxG%fqh7f|)( zEt?VPG*l?v)DH3;T0#%aRI_Y0*|gLUD{;pv*MG)HbIPeOH|FFFijc8nw5Jc};9eWF zuPk*U0SOJSDLxPPC6yr--Ps^`f34etYS%r;fPLbkvowd zqa4?mai_@-^8g{iFj9l6in%dxK-+U~{5)~K4#O758t7~CDUI>;dGv2kvv&g<*zAA* zhS_7-omu2>(~GnlPtmWa&O9>SIH?wtv>`$N{Eu3o1HIs zs3v#VXR7uf@rZNkUbs+)ZX*o?okGe~ZdA20jDM?d+t=(lG}Su;{LLs>q$q!MPV-cs zl8E!RW~kD6RPRQyg#ULoSPW$H1a(>JUQ4hxbe%hx`r@qs;pofBZ>bGMp)-<=T{;gL zv<>KoXY|H$EG+*m%yZFvB(60*oOiw}u}m$$1>naW){NV${?DdF7u6y~pw12S7jR*$ z0uj8`uv$BFK3{_y$18T-Rr>Ro5L4!A#Z_Voh#P2)qmtN!%JUUZQXaHg{IdOVSwnnT1VTnxPA$2 zp0jK@rW51{gUCJjZzzbo@7H>{R7YMt3~2M2KB5Fqx*e*VBSe^n9{)vxP-ol0WL%qA zwDiG`C7$ALX8q7S8R$(ze%l!-4ZYpp%5&EV(fUQ zvs+sLbO{t@!~!fO6oFo^zS>bjnFVlzH+y<{r2DQmd~Pj8_2DvP5_mKLacQYF`$f4n zp=U;@L4XAq^i88#`x_dXFdYeXF$2+R*%(yP-!0i@y@(zK6nBRbs3gyTmR}YfVODC9 zg+@n3IE8R)-JNJBSi?FkCY#z<)pPh|m;Y(BB4jLX)8>2*s+vk!PdJo1cOmESF?6Hh z2+$%)JqpO0UhNAFJ4&&olnhrut2(SC!=!0i|7A)G1VXu9`#17 zn?P3^bFOT(8sYTF@y6oT(I^}ng`yOKWqwvN)}(EV+2+fRE=!WMBzL{fe=9{CD}1AI^Y>U__7v2*4(#mjm*{sP8mWuZ z8Le7A8>d^G4sg+#9r}oux@;c0&lz}-QqkmHvOJm=;Y`{1=G3!PW#-n{&r=%?P6Hmxv$mn=Hb>b_};Lmf~}r? zQR765wRY53hY-oupdanTSTy)>B(qfO$a)5m`1C-40bTFHG@M2y*Cj!HSarx#FzU6S zTLEZx*PU=2@3>5vS-?Tv$Q{jQHtazJNf|xH?g92``gcaE@pW7DkGXK=7NMfcfY#Nu z{>jL!Wq?`)+Bn9kwkn zED!w66FeBQj9HE6lVqG8_aEf4!;Sqq#%zC!ZL55F*bgn`Qz4v#Wo-SB5O=%abNC5Q zQ-nH4cpQx{D@O{SoOaYj-PZ;K2eyldG;hPQgSka2ZleoB-W~siG*fY(a!&D9DmDNl ziffO;yk;wLq)#){LG2E{WA$oioJNNKt6AR>=02KipEyvb3Dut8Z$F<_G5IddexTJ6 zf^C`}!ZVV0Ntt~p1;l2UC}HM&`>K%X6>6Y6*NDM@;P8gS1+8H$_Ix zKmtC-tIl3MrAQCP|4&I#0a#ok2$W8`H(;C+{yB}5$%%tmp2FGp?Zb z2UDd?1AY;4;JK6`d*m!9$0uQur$uhukn7Wb`NF%oJ{J<7K#LB}M=DAqq$P%*lec&0 z_R5U+_%j2;5e0M-zcZWDubFlz+lwPLA6H%l@=jiWO&q8+4*A&&FjkBzp7Z!;( z8@n`zc~k`PS-ly6UXO>JC**X~fj}`GUCl&MmWj9+3H32JhH#?rG!h@c>Aex+iDzLn z+ACBmkEM^(-KpdJccgA10FW51UL@-y_b0mG6D?9+6u|O->Jw)CDGlA;GEXA@gduvB z4|7%6jReGK(_B{kW{PyFd`oVUrqbQZ&4?auLCYCaU?8u}Tb?$ekzW1_ko66m?^{D@ zWCuL_plE=BGJpT{TqR!|mx-l_^-wjr)%T~&3Vvf>u~%}IV76ZMqoX@>Aat@)6wAOw zHGVZWMz`p83?>L(?{xxIlBYBlD9|!ItJ@d}lqbJM#HSp%>IaP3n1JBfOMz0lynh@1 z(|f?t71;e4k5x*nIXiaqq(?$`-pQKDQK3N8d*DV-#ESS}^h#8haBuAjbSDD)W{w!r z#}kJdZn2`rQQG{OR_-d||7*DL%{{JpaM=MI1VbFw{|(WlQ4yKi{FjG-vKn(wYo@M* zGHV^uF?I!%xd>XPBz}6L_VKpveu$JRDX_9C4$JDWTD;|o1bJ>+C?CsL360zK?{@6z z^M`WckohGnv=)2+V99+q(Vs=k(iV&f`2)CSw&*OGZzT-$wi@0cTbmr{2ZN4oamVACYUvYZM2q>>Z zjkR_FYn)Sx?@fLF2(74AR08`o(_@Rxb_xh8jMJ9sXN2e!^`t9GuPKi=UBW9Y`YDT^byz+e;7m1F$kiMzhiWU>w6fL)3UMpCa54DC0n@ z>#CQ?U5|~O0W6z_5q|J3g?4|QT&-_o&oA7R5S?gBxq4!tc)FYl&dttvMn0(`RmAwY zaABs6-zItC{{Z9*`Ap^|@DhgP=Y*;rCE@c#CTWv{Zn5yX^+2nMp*nqPS3zv}aE8Y2 zxzYeae;X!;>iiBm5>+4}l$;=^jX?wg7ye%D&IHAa=MVn!JQQs4ij1^s#zokC#We4n z>4<5)ikbn@f)9WRbdfEt6O#qi-I5kHgaNv*hdY_rBz02RRK$JjXj(_=fmKXq(F?Kp zl}kF&1KNl(`VNg`iA@C}zh#>F<-TX55~;zN5ahykl%5jySrE_70xw+CeOs!Et>*y9 z#}X&@GQN|@$Mb}^33xYAKtc}B@XBsS#8j98vZ`CXhQhoR>c&-)bKb_q zFI=#j6pCntO7A_UCq+qQJi=K8%%UpWKYIIoW@YXsmI(VnQnHvtwV&jAt?PS$GG?l^ zZASD19c7=|;D6-(1 zRbvQ4fa?G5GtCAZHsjz@3(AA*y1ZQLw1_`5a8B}kBpee(BClHgMES)8i8o_OJe41= z4w82h$(v)%Kb+LZigrh}x@-ghvYxIgUcf4>@1q_W$goT&jyiu)-wzFD$_4`Myg z5omzs6Mqf~c4^>61Bp{AIn+;_?_s2p2fA}kX(Y?Z$d zQnUtTSVqnXd_H(AMl$O?2F>$~XLiK0wT$)ZZpCZI`dKAs@<+ua?hTrO8S-J>nW>Rk zYOOA!P)Y4V{4$bH38)LC!fcLszXuf~h4hs1WtP$TQbzyEil$rELp-w*+qsUI07>RG z46T|F5+pND7^W0|`K|GAC>v|tP=!d22vThG;kxYg{kacwnD^(Yo3Eh z3Gr_2>x-rh$nftTB`<57)7Hu7 z&6o9dk)Lz?O1~K9V0s`-@JXC4SL;*1%){ILa(Uhefw(Rg+cr6=z!kkSH0e~LkOtYB#ufh>x%j&Evry$Xbj~M{( z>iOz#ILHr0{9+B!;7bSC7LQ+wrG$_maTkMCm)?ZFqox!stplhwN}x?4{NDV zhb!?&Ci|WJSaxM!9mYt=^anYD@xc*qPJ5)91zkx0CDh*#QwalMm8Pg$1{u$z!KGUz z_GRe*8%wsarzM7Ud3l7?V!t*10{d-{sD72c##OXvb5oQFbLOW(p=o@{NrViC>)kts zZIWL@^U)xdVX{XpEQ!#y%6F?Ux3L%xvd^oQbJmPf8xKnXgQ(;F>4!5_CrFjf0yj;C zYBmFEqJ~LaD^4oM37JofuQ;6U?c!W0x2n&Sp7tCA%P z>Q*qj@A`%V1j~T0oPpIBZFg6_TSu3HT>xv~J!wqfroAPZdnDzG0nRsUH{X_@>hwFN zlztYf+xFM%L3A*@SbI0gLAIX4W^`MQ^cU=Z!kB8-Uivypy_R@;%^Z_YH8jk{#Bg|L z9Ss)^hP7gW3K_@Vr>4BIcRGEe0f9LwI60D=NUA~nna`0tPkHoD1TaqA789hU2L`=A zrkTeimqSYZ^l$WZl_?eCvjsa3@(x4dhHtZEXk!`7&Stx%OL_TNZI6i3fL$avn1vvf z;r}3ug$&ev%HH8?iQbiy+kT#5c4EicszOxK-wg;d2Ff}a7^3cPn0z{d***vqYJ+L{ z&ez3m+l;DgHr9FapVY)J^hRf>=4-*P=0V- zysQr^ZhEh!!Se1u-`JM87yCayR| zp0g@v@-3m_YF6j<#2_5{2nq;g(GbIP>^M4ZB;F44)#)N&8|s41hx7LB!kc(Jsu_63 zAKXk?2|Ek%yvwOvT*NRbFFHplh}E#WQe^glGB+Ws`WTTXwxVK&h1`cj2>~7v(8`Az zdprmL=cztiYknZ(fD?lta1W+M*O&tJ#KE=q4KJCyHR8z$i#r7f8BcwCY-7*SWlo!b z@)yic_;41$w+uvzK~={tm;vn7-uT!z&Z#aue9YF{u08m=ZAi_%I5CM3Ixa z0cWUI%DN}~Fg(A=(X?UOKfb7`52S1--1H5O+aYLoOL5s;w)R3AdG^b|uj!hcI5iIq zL{nP3Qa^cbgW=)p2?RO`$qz+kt(bp_K^jJ>hABUG9xnfk*k9HTX|kO#ht&3zurzJxq=# zqj6gM4X15Jbm<#OwGwNu(v^{ldxo?8&MfNa&flaxX-9`GTq7A+r`@HUU}ljbk1)db z7!*?6<$zh%s5rXi7J$nmV?ebhf-iaBIu>OW2r1o)59T74vJX!29+0{{>b{srKfd|7 z4-#uUv-_Zkv(=#k-KaCUk;(+bK*d9@o!Qv9OdX9%OH&AH36JdA9zL5~95E1Y=@8zx z%>e-P>SG}W(PiBUF`DzddF1vqT<{L5=N|P4KQ_``T~kypFk&~aE-aVd_$U-4qRW+) z9M6FzbDE2jYQCU#r5BvLcdaMjaRHqkyxj6^nt~p7;oSyBz^R+35@>jC#Ae5Mqz3rk=2})KZiYbIHKN_>(K;C*CgtVzSvPo;-1GR>=~8e3s!@Zp}b!?W`VQckz@tg zr!;TzA~D$bfXO8`KhHsU2iB6u)35zwg)Zg(M8>T#7TL4w-QcMS8q{6#(4TQ2VN; zhIJb2_F!MEY8|K5^*x7l`RH+z=;nfGKDtas%=!u0qilXWue?k5sJP%+z+e!ZN$ZCW zZnOq`=;MFJ>4;i4a1z^%NVV?XE*1S)f2%@el813*22T^IPNSF7Qnl|gV7k*R_MLpv z;hT;7*wQ&-d+3_w3k2&ugK`r{$Oj&z|EdwhxC7;RaS0-9kfXOa zxHT;*ETpFs3oY6L&GxOk7DkA=P*5%`$9!|gYl^w69Uw2(O|=jdZw&$^x4W$3x?<$@ zp>(T~{nd*_Xvrvshf8JgyeP1-=q-cO0bBeEmU_yS;_=BPimbs|p6wzpsDs>69Kaj3 z2iHey0T*bx1UH{slyIu2ZYS=|U;3DV{S3)o=})9>Y4>{Lwqg0JqluAo#Ch z9LR+|PEGJKi@Y@6jK>YbIUpg#DuukGKE53+ynFD7RbjsvN-!Tl2@fI_2bl#HRjVk# zJ@QCtt|e*K*fp3lPGB&iL=uKb@%y}c7h9dmz_C??iwHaF?1~e|yWfpF=}r#vYC)mJ zzRFq*e=vTBxN)}=`$`$L>3_Qr5(;{3rMD(rCSEWP)qWlNtodlM7wBRWDkcEA)THb_ z8f{t-UQQzbTB9kQg!Tk(SQBQlx1s(&)DHBdU1;*|Fvi`YA-h4sWigkG{m;ZEmSRj^cR;o;n6 zs2_mN3`cWzeG(8jBy&N;S-Y?R#jE_)BD~nM%e)0nTn+=SAA2AzvT9?O=>3S~c*3{u zQtsNf_ZS&~5RAI8*V-qJ#(HQalntj#%|+dNw+U%O>>d#K6s+JYo$D&sqm|CleJI6c zMxQCW(X_#qxFw7=yQJ^72lKfY(2iJP9i~bPH2V`z*1Op9O-|r-Ny!G8lhDYU+=BqE zCrP0tU8eeZ$cwtPq=}(6L8Oq87e2~5R$C>CkSZ5yUs?Ps<+w|LfZ_Y)WI=Lg!zq?m zY=Mu$54e=YKaitHno}?h;KhLeBXDGX);-`WP&_g7k3Y_e=lr*IR8CmK;{JTkPq2E` z{)F}8)1^8k3*cGbQ3A3v3*Ru=Z5o{_U2ucgEo71FW>v{|eTZmjzQ1zi{Cd##Bb0@A zsRX`V7_c^MrF4lH));Q}n6aSdEg5;~Zt6@*vEtvJD-X`iw~U$EbeBl*i=l`(ewNBs zI0t=F@s#=ojC>|EZrkQH6dW^WM#c_HTl0=-ZR&c1X+}*=GnPd(LN8FSRei6LMM2SF z-JQ6^(6Vmxw#PHGQp>@p(z!YIG+n4dpRWu9_L2WVr=Et%!YFGKtj3Uw5lCzQrz__$}0oHE(-_$=}4Y)AS+Sv#r1g*F2_L*?eEoq|c)d#$xf`S|0W z!4@=VPyX|im>GA%;x5-q;cx`t@Wu7?`)3iHX^nnB&+SoUEzGQfho;kt^q5)gp%KeVZ4b4!CnrhbNsx z!5KnQ*GibDyOFr=`7!S*9PJO`couQv=E^oOqVny(jI44ND71-O!2;R5S5oKpX(>t> zGiAz(a>i;94A{f;+d6tnpi!za?#e4Gm_jv@w>9&!l#o$FL*FVHEY0pPNBHw9 zNW~? z-!k4WLr?%=FxV1?fT2<03ARJym1%mO5SEm!!eaf4Y$KjeRq`kES zFnYF_Yv1-CHWh%Y1@^UcM+nHE=wjSMJBze?A)L?<>gW?z^2G39Sd64rHRS7?8*kZF z#0Wh~!H80d6=)EMW~sRu2%F2jnW@m{&H~)12}TPEf9wV$K`p2oE*Vd_VALIorHlus zOWcS9aqzEa<2bvI;qhQYhU2JQYEufSfGEr#t^jIbV>~Y-BoR2BYL9DK893v3ZvNZ8 zW+C3}hHJoLn231QbTkE(+KBr3g{oA@@}1mf+mw| z&fRZ9f=pN8g!GfTTIoa_XeBt3BkBDQj@Q9CiSDVlQx2K9dTJb3IZF>0=#BV$mH}H> zzv#%D(w-A$^{Ro9;S)q#1!dPRaD}L;Fd>s^M|28=0F%COAya*G&vq^4XSdBFv7CH- z5~nsQ)bXP1TN8}QHVHmKALl&}&*t7xNvoLq?z7ooGh!`-mxr?Koxn0N2T!i>dC`*& z8KL8nZ$`_ME+jw$T->Q;i!mE1J6gmnuiVqeA@qA63*Y?ETHn}=CVjZ*D}=zevo)aQ zJ=Hd&e`vMAVjk>mfKERosDZw$*4zD?NO%r)Bd~d%gK?`dQHutD!zvC}$TX!LzSm`H zc{s0-^IUENp|Gg_Wv(VUV{C)*$c;4w^v62hZD*vTfNTX121q4mXjptBKMRwrJM~~m zw+n-C#2K$Q)UVv-cWy_i40<>kX03x8u;&uMnAa6FaZm#pr+?_7c~<2*1^w{FctJG7 zS`m)(px;9@btbOShQi|!#_16v3CtdCd0qbn@-8-Hzh5NNWLZd^IVr{YZ`+3#293|Ak?qnBf+|l8J;DQ=S(`zF`h1YUXk@P&DTzT7P0%HUm zJg`%Bq~JEKi30*tt`u0Se)|!}tLD@KJuX$rboU@Hgo;#uje((w6y)^eS*>)QJ%B7&Hf zmz+~O`o8q(PXO#u3kjMAXQ9M9)>Od4w2yC$@SnYp_DyQFjT1PVw_{fBP0sBI`qE(a z2XZT~JH8ADiD&-d=`bnr=@f8U*hWjvGtebR6I|@XfSuE{ z-d9?q1ff6D@s@b1Mq^N;d{gBv<6HDEsOx9yS|=45tjV|DO}1%mO@!!q6pBQVrq|9rxhW1{ z9~MQ@5tEAUx20hnV0^V>EOWq65<64TG2b*AXA!}sJvE!IKHD5{HMLGK85KQ9P`fKY zx}k5$#oP38kS|<8Z9#qSzNfzM$#f^spdYLZxM~g_5z|-~+I$5dG8V!02UJ_G7->96 zFi)Of46yOQeQ5!-y#O2`m>YRv9v(<9WDcw+$L|TUXUi#LENmx9r*pKb=T^ z*=4PPjSnltJ5(!4U@E}9$w+Cc;k)#`)<%e@|LN3aj^izfHq8Mq!Mc(^@J7aIAvvc4 zgEbLWMKy4OZZ)`mVM|o|Re+=ONjkqpNvjDRwE?~AJtZfDR^!BKB_|8m?4lM!jmr%K zY0lnx9Jl55Fd9(m3!Z}1zr)U;r5UruPL1Z@ir72u@J+~Xht=0s3%HTov_ z&4quoW3wbj>2oz`tYvf6PEizwva4QOr69YPRZIVC+@w|Upiziz8Fy&@ua#}Lamm)nKR(ejLn$DW-(R)715CY+H zRcO+oQ)BK*w%Z!LbQE;}@nqT<-*8`M??j(#&r~#%_j*2~`(7Bo&tPcB%%#D!pGf@e ziIY<)3!&i(wjX44J_fvFi526C`&V+EIwF5cD7Ni7EKIw}VMBBKEu74Z^>Q$GRj&w1m29Mgwvwnm1O`dX&8O4Ya532 zWf;t1<;X>ymS%nvrxd*heG=v$@hSe>*-<#zrQRmmUWfxjPPg?!45Jy69Zf7tw{sLW zVpFyJWFNlx+xI&RJ^nIm4de)@-#CaEQo_*H8#gOB- zcNS?1-2^``oh#P_?%LVf2tETt>GSsbiodeEdfY!}Tz=AFl##6OBa#P(V7YVI%y(kG zLyH%G?-zeq^8*lur`?CEBzWk`2q5ErF}gRK{6ImWAd5#VQe?c|hEhKpA4WbroOz1b z_$^F7y165@8>4osr7zbYyoAx~Bv zuAba!I2uM>lS=k(tIs(p)RGyX3E7-ab*S~A%X>D}@YBOggC{-c^S#@i`}QH8ilwdd z>y;X)Y(EFwL(w|exMI*s72mE+hy*AL47M2t58jq#L@Gi#GAsyDmI@LDD}wqYr=N3G z`8zg-aY<$_ALvwrf3mG`rtkwCX2!J)dF9|%FXID|!?Fe81JCE-j!(eU-Nod}z`D^Y z!1Q{0M~7|;K|(DaQY2JLe>>Xf(Sd_PlY*(yO>ipDNlO_*9;Y}9=@{J8LAhy`M`Wqa zx4&|I5M~l6@-&6K7m4gU!6YykZE9Z>`9b}Zr8x|r9;me7um>_Y^`DBu!(b)+p{NOq zE~_xCh0Q=o_2cm(qk6jo#@;(#H|xbfxE>5D_7>4iP-q>qtUNC_jsA|j`V?~r$YM-4~9Wy%icZK!Rzv+bK~ng z{8R`#2`*juT){PJ^4qxn{a_Hucp$B9`+8%RLAv%i(o_R(3+osmFcvckxnRR~I*8pz z1iz~?UKu1myHN;~M7k*!J@6(`KeM1~i z&TERefg`XtaS7goME?p%8z;$`&nmtK8loCt3ifl3_{FZ#9*@g0U*I7BSmK|0(X1Dbr-+bZ_sD4>wPK84iW)qgr>H=+s_mkk?os102x}H;G?c};nrBg9G&u_mO<$&D!nhC>1 z3vi$K2Qwc&k){V$6rC1*-?O+!A&3k9gOc0LP5IqHMEN#&^sgRs{5Bp}1Hb6PyKq2r zS}JYfq7JQ3C_FUubaZ^V%_gpj?BYnKXp1%*mh?I{_Ww4&JjiZn+G$w*hV#hhLrJIK zgETapiZGqDN^`GAqvui|+n54cJ;PleM5r?h%o^(3Jfxx{p@a`HH7Voe$-bkrM@17I zvNrn*%ZDL}eB0bGzb*K>DeT>61&k)_dSh(HxiY~t_}Gk22k@+o|oJyqFuM|$HI*Ok}rb)GNwJ%NAJmd}9s}?7j7S(9~;Lv*_P<`NtCGn*h zthCY!xam-;pmw-eN@2|ESCdh|?;t&A))5GKZ4kK@u)bL8u}jF3V`$h@K=?x)X_F$J{P#RdZZKV zb46N|fKDkDSf+S_GCa3a$4cwMFwiOiU8&sH8%d^RNlqpLtS~!6Pe*v0i2opAcQ{#j zBAW-zSE-bG;~?A?!lO;l)?ER>9LWhyD;j$iW)io5kmfLaX;kQ{hC;Sm?rcfh zjw=1-(Ba%oYHp`v05pV;lMo?UBdsrER)~hlMH%U(!xcS=;;bh&Pzk=^%hg*Jsb8=| zP>rc{*=*qP2mMIbFld=tnQp9GRAa$5awXy_yFN9}Zj^~XBdMs~(3T*ldzj~;KVI() z*hn@dV;xW64AzRj0l0f4GH zU@m+&mo{GQ$}JQu*0HxdoDhpO70}IE@Glf|mMfRm+Yazp85D<|RjIh$g!d zVc|{(BA4{WA5)bUKRq^GYxHV3e0>7Bhc$CF+zOvAYB%O zCaq4<(B7n?{1Fq%bXmA$h=uB`ovx=cAz)|KvibJx$PtA?l|#^y{+tBiB#^JgUiXgI z)|<{!7$n|C76BHe%-XUwKunO|JIDMrZf<9%&Oed^^S{vw+kJs_samvJ{YscVjAwwO ziENq{1QnU*md`at0EVl1I?4Ybpjl`EAzC1MRK&wAuBEs`RocF1*5u6*Y2M$*5TwG| zo>Mhta5HW#i{|bUw4qN2gjMmcrpyqYVo~wii}g6fHk-VQc(*HJmVolA2-3($A(3Ei zAczsYl6YJq`is-{MeZ>Wcla-GY-~8k|nE9}$$Nxh^)NL#*r$mhInK=g<_%i*=s$ErpFy z`*0o+i(F)Ipu>S%Z)xT&nn$kLqels}$JWGUPNq!RdY_UI&!p=cK1UTP&F736@8wxa z@AYzGBzDcB4!6bwP(d)iD4(R@#gZiK^rfJbGv&cI;M(Q}TCV%jW{J2qX}mx3Hz_e$ zej|qsuoa|hNfpbT0#mlJ!H92TRe)+L#^Z9}m5DTWa1_;4<$jRX%287Yu(l&A^#A}c zcuP6KlCl;_ysr$EEkoYBqkaFo4zxUvx#)6ZBIuFety!TuV7?F)T*80A(Hhs~mT~nk z%2n8xN2AJnM&7_I&sEx@gqIBPA!0auiZfSR8n>EBkjUef$W&L5bK(Z^t%PFs z#lQ4tQ+jcc)jz@|^_Xk>Ny+4!Tak=8UV{Ugd-3=*2E$1-J|b@MvI<%vQaAia!)2gA z6Oe!d;)e@X3}V0;OsN!19Y@X-(-&uUcCSB1YUxl->WtZ?BP+s{ouHgdqBU2;tY_J# zcKxah`vvRTe}eER9WB-|wZY1R&Z6Eml;y|+N+59o3?%XxIW4v%MKC1|o~KY%Ca%gc zR(Hq-$RGCfyV~`q(88&G2$QNd$FYyxs;HBHwy%U?u>GKFt%;=pqBhMQotFnjWpzrL zGU{*}5P;LVP{&7OvM$*KFm}XDQI{12--lKZLbJt%$5@77r6xW<^L_@vL<#7%WNJ{0-s*Qgr>{amlw!@FA1Vql z^<|Z2qgkI46bMA)aOlxBM+GVceX~;R)Zw}&xM*m!2Inh_ttXE^XgV{~FwEny>i+kz z{nSY~ZM7nuKrGh^p~XvyH-j3S?jF9Dqw-Q`(6*vWv&6W>iI;EF$CQQ_3?NHOqr8Qm zBN=IYPWH4QAYFUsYP6(=a=ta?mNAfL9_ILnXre@pv;uR34qdn>7E z#Pq6WpJ7+|h(b+7SK)EjW+7F!=oIMtt@ea6n-VwKk|Wh(`_cK>SJ5;8rC(24tQH^~ zX0bYk@!>JLPr%z$Uv!S~;Qpuo%$mSWNUEzsx-5Q|rsmCxZ?kXUmX4px%C}jtx*9@t zj;)1p4RsG`|JQS{Mrm=p#`aH{^tFiKs#M~^vW#Bs5+m1ae>-{bxDHzg)rnqeV1;Qh!RTe7q^`8EH6Wt(81OW~SMSwnBLfs-xNU zWSg&tJ2XLqtIqLLKMAzFR+Ugsy3KE_#iakB6-O%-bZwKhNE4l;z8~4g{3X|E&`cj= ziPj0`YIc?f$bp3pM#haF^Sim&xiI?mh-vr&)P~|LyIB32ZG=dGHcXQN5Vg3`#3w>Tlp+ z(wwMdY27K_qt4?YKbisx%r?Rm;1@B?qRiH8{*u@jR`-JI4gC)Ok11!IrkD0-_0Qu` zPHL}GklI4vDfprwB>!q9(F9R%sph~Uivz4{8LkSd&GNY(HQ*LpH-~}GYrNf08dUG$ zWbM0d%!{Y_Wzj67rC;KhO<8Q!9leSHGy3drgl3<8c-hecL(YAFNY_jUBHKW{0nUyhs zDJ9){3BOo+ZaS9fQI*HzC-3T183ci=S{XEuT=UkMs&fw#)6*5Y&(*UkV|fJ-fB@IFZU~?iQxj#KJpkbovyqf5f_X=e%t~zc<}K8bMEK%#I&4a z?~}7EAUyI24v>B|Xr=5}`3Z7oIi^E-k9|+uUN4ddHOdC&^OdfY310g2gARbi)-4v8 zZ|o?7nMS;z@wc}lCO?%8ee?~LqVJ~9Urj|tG#TtN@KhB59qz)bt=u6w2`4aMl4Q8l z-L4gq#F^XGSEh9DuOeti?f$m0;~SV(UkOn(Nthx9TKuf?IDUNMwCsGpX;c=Hdqi*u z{f$(Z-#jtH5kVfSk}YN7B>|ETWw#_NU>R0R@+;<=vn4@A9D}qN*s|J7L5kt)wmd9M zP2+?Ib&sp{tR>9ofaahdKHloY($oJ}N9h9$gwI8UVbcSZKV?)>(2J|GDgMk?&*$pD#d;GXEMFW~dR7a1&oaO~bAdwc6z~%3-R?neXj|-N_0ldMj zQQ0xojhVpl$}@?G9qYU{DO1FDa=#oro9Jluy*56lxw$-H#vK+C{vE98$Oaca5QU2O zz#Bpy>W2x^L#G>09@2_T+&3QIqV;c?KiK(I4o1_z*~}j0wGTJ$HK+2)D*?Iq|249OUPbIPNNWz+ z6zzFO=$IyOvXq)tDt5YDpNaWY$?a+$>*bc{e1K?Ml#~0)M58r zW9*=q+8&C5*X0`@El(%i{&6v=M#wP9=6@^~%^;)z1_cMIbxco9b9rKgk? zZoK}Bmr^shjBdn1q=4y1rwB{vgU@Z*J2BkKCT9$^VJ~z4F$uj}jiv@~uW{l)5m?bt zdwIsn_roT!hgeiABB4A5SyJpHOv^JuS}<*v>x*+;)TJLdJ^=woq_ybz{QFL84$dLl z{vJpGd0LPh;AEJC)z7<`ipnE*!cU+cAVJ=W2mg2MX^MDMhoKDS>ND!CvPo~smNNX4 zsMBk}dnJ=jWO(w7HX6nbp1ggKiTri)vl;~DXC@YtOJ(btfK<1;lR z*EURJV#ngsW9*AXRxTi23z2ch>1sCpE(>L3JP^?97$f7NpNu^>h{UV9lSIRQDt&;;>_Cj{Y#Ya=|O#Nm-*gM*V#gW|v%>%mWgl`ONN$ z&O01;W@%JkY%KtuXz!F7!B|Im3iw~RTYvIx0D^Ujv|L&w(cQ4vRV(0YYj-?JwR|jp zgLcr7I-4kGEaV|Gwom+;*a!EVyjE@8K3Y0UoMe@v$@nxEU=T9oVw3-gI4M>+`)oLt zm@BNOk?f- zvJPZ-?*dvTw44VN z>d)vzvvwsjvKhWRV0zuPZ$&O)Kl=2=z$U{Z_XypziPvUt>+Hx-q{?(6h0FqloOf=2 zIs-huxns$gqnp#ZpqpPaT{gOViLNOF$85#EP5Xxcq9ah3sh+DXY9CD=8=vwCu*`c7 z8GP$Q<(9F{ENdEJ)7^rJI~58FUs4jXO6nfJ&tQzjlHIWLMCzOA`(hW2j$BC$F0$S} z${8Ou2Ilj-&?bGJATIs^0!Mf#hpYB`YHR5O+A!Cfg&BDi=rsc2{#u97co-#(a>gR|*CHz1K(5SQG-D`6}ztyaW z5yPz#&jSs4swdTd`cjp+MSYy523dE}g1Ec3qV@e!n3h;CP1TiDmzQf3@~~W-^0=uV zXz0oqoksR;4Sko9NQ2MqWHv(wZ5aC}lGx|Yp^;pq8fH};Q$k~hINBWDss|Ro>CI z_hHG8Q%XMh%Ayi)}Z$l-$Qam8pGkYpvfPQflX(|ZbLPUoBK(F-$ z6rXv2eiwAYEHD^oxoofO^&t?(6J3Kz_eLtPhnk=Oe7T@6u=bD7XajRGY)xtjsFz;Y z;nbpw*2)CmjE5eejiw2$`m|b=E~tDoXq~4y z`BZfnTd$DkYmlq7jv0#GEe$YlXrCy+fJNPj426}P%WI$(S{gcIFRv=pX+hLUwSE!f z3`fBA?=T-M&%HHwe*mkR1&@T4cJO-c79M>XUXefDo1DMK3+4X`V%%I0s7)9TQ25Sl zRFUtDIFW(zYWx56o`Ny|j!sW`UMFjPM!UWtq>pjpVyw=L z&aoT(bhc*~mCU-$-W;VK1wt^8Ka!l@%kb|-gaE`@(`!Pll|MDVpD1A&JadNUeXw2+ zVe!4gtx3FXT5Z6%A}-#e=&xqa+&T4PdOKL9t*mTfM1aKIFxh)ukDBm;DG>5o9E9_Q z?0M_Y+D|_7QJE2$rhdNp=|FxvX@OdBz$xCbgbQ09#3OY^gqt1kTpF@#4jx^EWL-o!4BenCA zL#+Dq1w*yNeA~!_7*Zo^tn$3nsV?cVuvwE&;b7F?>Q}7?Gg+ibZS5*`i}IDzr+tBM zx1zv}_K<_x`3_;4!svNITS#^c5j?bkkaP}QP@C@YrCg+@gUZ&ot2A z@;MH0O@_I5`KriX9ShM==v`VAY!<}^G~zkvg>AZ>#{u+x^ zp)WWRHVchA>vh*gKHe8q{AgeJxtrs-@5qCqNhNtvnT6wreUle} z^WIQx*>h!lS#eOwj{kifH%Y| zf$zcaQ1b)$kRqV!)#TT#ixB663Ls`Je*X_}oi&b~gdFZ(>AXYN;gBL6))s`^gP!b~ zc2NKy2d}gp1DFQvP^xFrU?IVLY+=D5)|yhUa8bqH_2>$fdDc~??5K2addPhFA5CA^ zT^T1_KmS@sCfAP;kNTopy0S;Ud)cWw)&5XygW%gFny1vsQ5Ot3(`>4f=Y70Ss(XkS zp?a88#+*{+-Iqv_p5{(6f%|HqS<#~+b)+s}+4+T?k5ZeCbKG1qUF-C>8^x{G{ZRBi=}+Gu`-_g17Z3N< zj;)m76$I#j82X0x654;EP`kQB@pZrrCnj9e#jH!tO4)DQC^=R$4N&QrToL+WKkg)> zy+dS2^UX^v+kpzMdgs=S0)4>xlwsU;-spCjJfrwZ6lGH=V`E9t7`;I6cY|Pu1!bE)Q^O-A22UFJC~@MkFYzxbrH^4v`gnkW1SlUbn7!=>c)AtyUTI0d9Oict zV3lVGPlT6;$Y~o{YVlbW!WEI#dOSZvO#CHZ?+JC~QRJRlWwIdq+pHawd?;916j~(I z>OLo27~DE7HLiHfMWrD`7ck!l5Q|I8`qW??Kd?bFASu%7d7;+-qU{1=Sg5hJ1G>MC zh>Gw||FDl`Vd>`o(IFy_NbKYOLV23?pju-wqQuA6l0om`6ODD=h$qt>wB*5Sy$2g< zu&3jJNQ1G_w>fAjMQy4DP!SIQDk>A%c!hmK2vfcn53?r{y}wYbShUQUL+UGAKGM8< zHj$-WCmC9Q3z(|bmk3d;l{LKoYUaxE7D4_4EqnMqEj|-xUq2>pdHQOBqQ^lqZRYrm zfW^NA0@u$0kj_fP8}yMuUmyVCJ+S|GwJ%{J`I5F>0Q||K#+E;mDAKBqR1TplN(QaT zLNxhQqL1>Y5I%BLOb*rATwN`AEyS|x46Xzb$@&OwM;&*;DNEOj&j(BU;YqK z=$OT#`t;dqDW3XhWP1(N_3Y@Rg(x`UR}x!sQ0RduKKUH!>!1BJlCvlU7)xQNL=!B7 zG!K;5@a7MuuHR{Pd5GaJg?+TMeAkS}08uoS|Lp4`kN!AVU(EA;7Bt=0T44zcKl5fk0?J}er#i$=B>#3W&z_-+tI@Da~ zdimst6wSCcU1urN-`Fm=kmD-5j6f=w+0m~VE^cJH-bHIYf>J23{b;w)8|Sh7&#~k1 zu`y;0)^FT3*dF%)t62-pBl4;Uem2DU-Qv;yypOO_frBx_c@IB+b563!+?vK!d&9r# zS~H6I>3iCcKzIK^#}oV1n*66QLU{}(eW`!J^tG4q2u7u=$DO@ip2s`gWO)qh1`@s`|Y-6NYQ9r#bxd`p!(_Y|3+-cI_4D#-u zigr*jxNDJSTmwDYnz;lr(H2YPzK+?isXfOoRF%1$^$7Oy`H6G^trrfL2cVr z9bI}L#sGRiY2fRAij33wkZY(rchin>act%;sN7P5!Nz1n+k?u0-?B#Dk+>or4I9~* z_m-f+P=JjVJ;v9R;D%j1o-` zP}wy$4&&AvMoS2hfkFnUsp7T#tQ{?nv{agkNWS_9oOuOLdpX`t>QPoR%`FgzR|Z~R zUur4K=?0d~jXg_i{h^6)RBtN7%k@y0$1mI?<#JjC2Dt<#!|vROMtzKW<{uQ4$1|e3 z@Nds$Dpm z7%1R8+0k!1i*}GG3_>%_meSnN!n)k$ssK+=4?(89pV|zO=EW4L)3MxmE-XA2D9j;H zNnJDU@~wWyoSV?sRjT2fy7(!H;)WC^j06q_9~2rfRYcdi@A-+jDS&#y3psjTcfrt5E_lShI)^{2z4O8Z`-f!C?w-M{-{Q%sJ>q226z8yTKJ6C8}+8xjQiZ- z!}1sXZ@7cA*41yI9$r&_RrE@siMQAet8cp5mwtQIjtFvjGqS>pXHFA^ZRbc4E%Qd; z8ZoV5IJm7Y7!RzfhHGAALg~Kn^2_Jj|62x2Oc9@sUW`&B*Q=x)s)0doj0`()y5~ui z{ux3xu%BtqYA4jD1^9Fpb3N>{2Tu}1f;PCyqY1ri$zo|?u~}Ac}B$dOsX+3g^ZL2We6t^`<09Z<$qi^$5}K%FYO;kidf0}U*N@~OED#I zo;Fd^Pr~$AwZFu0)H1_uK?a%flAFI9XjHv-&w2PXD!*Zk@J-+sUk^ ze2SQr6bdyHPqY&X!B_kF=3zpO98I}_*8$AQ@e-s#6%u8CGem-3R9a>8;r_RjP9PR( zu0{f8LPfwQjgqwrRftr5j64O)MdJIJp%o)!=K&r7{TNjKMf#0W2s`<%BP~VL>Uv>& zvv6JTE>k(=<7oqZ+#ICsU~_YmBsr+Thkz4u!CYK~ya0gL6~;-Cu@{)=;g4R8J!sIv zeEb&PG8Z#4)p3OLF?n%b4h+R!`fjO?y-jZ)M0ORV#I& zV?thyq8gMy!yyBQoI>RZTxFbyKM;A74( zR*s|}4P8l>p4)#Ei6RVHkIDP4J_=Xjx)I*oo+W19rQbL1(4I%5a!a>6lz(#>%*@Z# z_;plBW~fk-JTA84w9D6GFu#zjXe<~_i`0o=pP+?dYK&0sNtL$-2=phQT-)al5^U@B zANme3b!e2`dw}1XDJ7QUY}V@+t@0T3O$QJ7O*|=n7DV2DHQ0@br~2yjR%udafLym@ z*t5}PQb%9SQzTv+!7PA-9^o*B4p>y!(b+1!s+HBLXN4$;_b0=>G8|~s@6Ol2Q+5q! zMNLegpGID2#KDw~OyQrqMY_K8` zdt;_sd3QI@-8nY!=Pt?AE^8-+*=zkB_GHjN%SCq)4~#0_%u>E(enFIw{VZS2FB+$pJu zanLCL93zg$CpCN^+d-G@=Wdz19g;N4fLG)^- zid6>eg$<+FtS9R*Bx{|x9@V=>v66kPD}z0D|W%(Rzg+=UMoqS=EOF*A_D?ROOyGhZ7n z#lkOA7Xo9TH{4wNPpd+{QO~&S$p))4LHqfCo&P%(_u9T0>mp?W>17z8wpdS)+cU*T zaAWdb)4EH2c@hFQzz-pXvKyu_>7tB6OKD-h+@S@dF6o}7T1lzqTKBNTbux4RXaH}@oSh6SI$ zr4z|~WvHricgk=!9X5xXuA`F3xDG%moZ_5$bLMMNQM-jM9$CE5U5x#gv-Y*_?|6RQ+F4^ zS;R2&jvI@(Z?Va+sE+(8Bb$b@IXS}8Hi|SLy%bvFxqF?<4ev@8K2I1EP7&?5Qt={( zgZ%T=FmZA%2rD4x!m$REd7=K{`nl`7?*H1wwueKjPHggefzC{Zr75|b17l9rS(01! zM(<}Ow{$gud~NOrzRd)acl4g$RV|1gYXLnyMIW5{s>~Wsi2DLC9nmE*d|K}(@P>+E zg_`3{K!jGp);j0mv@3Mv&DLLsQme+Df!%`3Jd zkEnA<^pc4{?<$tm+p&agb$u?fmLykN(lK4ag8wAGP>^rQHLmhgKpJ-BT`MHykDwo5 zw;xQBLKGTW(a@w3sGT|e$fBOOC532oJGB=GLo^Di=w%0JUf@THw`86tXO_eH;7Vt! z2W)k#42EdnUkV=ei${)*r#^wydnu$z##h99T5amo>6bs;kSng?zMe%(ut5EMa&V5L zpz$c&PG7Z8T5+DAMuxXRb=%qnlZa^`GViXzF|MpsfZUJ$+3JWenQ5+s3+0wv``!K+ zRX89>=o92fN$$>^jiyiPb*yE}i&uHBfbskhmJ{jtiTo(wX)4 zqjUvxnNd?qFzBnevPhfiO0KImU+$P1t_#EUe0{Ss=M!|>fBYtQHIKOun}2^y+-KZE z89SsacO|hRHqJA7`jXWSfsr(QUw3XVSiNHQZ>83_;j6a;yj-8pA-x`3E7yWb@oer7 z`*FX)KU|k-1V{f+vg}F-j$fQhcLUSJGX_6pPJkzhu;|U+_{h{lZwFR@Zuchi;OGNi zcOLKrtKOM?l|bqUC7tjel%K6K= zAug5{i%mC^={1%QFCcUT!H=HS;$T4$klC-j{$tKu+@Q@Cx|7r!Y6Zo3H4si!2y?W|UXB1+v+7 z9`QMLl$0r<-)654>+gyrkBeK{2+&~s&b82fVxBe+=ac5S9$G0({96*Wh`6)ZoCu^R zpP=oMYnBEybYi7k8!woeHaqK>u?WIYg9?cck|EdrMD+CENvQ;M%2E*IV@X8`ZJQpK zzx7OX?s6E;eX1YL=10NMAq|mQPwwA2+@r?*&$_+l@+UE^LV~c7W2BPF0t}?{izq4& zhhsR=Xtgdx#Yk3&;S#7R9bU@@#P#@4sV_+?M#=sV81*qr3TRlPXJzBux0^P{sfVn_ zAsDZ}^yPl_@e}t!K=d5YG=g4N%;`PC=}VWx%2E({0#8 zW}+gj*ugIr1+E5<4I9Q}{-1(vb)f#LDaCI5MU3$oi4^Ya)lP(T98Pow>l{T6d96Lb z3vhpsxNT5w_NPK8~>!A*n-k;4y9wZi@W;av)qk!$-FI@6D%UuA}3x zZ-@B%74^z4nBugDwr7Hc1=MS7S3JswELDF+= zlcCu-Lu6Gk|9`ES_)-D2-81|I%hyG{oX4yWk3FXWdE-WTQqVPDG6$T&^huIOlrHPH5nFEeu+*2^RSoB{lL zR&)WS^t0q(&)Oy>r6o=SevC%_8y$1bpVwIPhxo7V5CV9ElQlp@TbaQ{P4oXI0M@mp zO{&_WBtCGC?v%@SrQk&I{=UBWeg-B62SzH$&A_V&3fjyXGQJYBUh0qkvB;izw73(?ln!hcK_sP?;ntAv-DW^LmJ_*XwBL{4AX^xl|2isGGP1hCM4Jw2hV zBz*)^PmZAfWnZsgj_`ot2XJ?bNXcN#~rw<_dB73ZvewEyyaKUf{6@qpbE6b+QuyC&&J4jN3e#A4OM zU7t|GqY{g4d9z&5t$)g)a?OxnSoX*54WBzx*eHH`8%(2R}xHp}MuZm4z4*b0{)Y`cl( zHB+jCKxiG)OBD#%e#hwbjx%fScF@Awu@sNa@(*LN=6@#;Jc@;Q2y)Nu4U!EHE0DC8 zEIr`?)PQ1}7w&TNpod7sabWLEsT{KZNJW-_TAth5ub68xqcnuo#cZM zm;aFYWic>WZ?)8y4j4tzDgjL})dJ&mCGGe~vpTuXkDP(w+dMT4J*Sfa>?mCo;fWi* zpQ~DFqP%vXXJoM!B&0g}ZsSo|@uq@(RIf@US<02nD0RRl2O z12hK9F=6UGI_I-UHJ6bs8sTV)24Rcf>3m^UXIMV`1EZhM$B+SE%A@nkvX4MIG4`V5 z7be*GA$LV3HnNE$pCu_JOi|5*TpeqpLssh`PNVv(4PO}2jpT~`h-F{S41wl6x z$JGVG^1+;FY74{9VAUMREPb~p>Vaoyy(bS98YVl@?imYkEmY<~aF2oTDM68!4qLNK z@5V=y<<~i;^m;SrzK(HIiu0!E8bnpg46WNu1zXZn$K3)jBzS}C+?xRc2ht4NkQ=~E zJNe=o(EHY-P=Dxr;x!jLr;{OI8wLBH&=%+fmzWN`L9@R&_Y`6gYNHXf{001MFXgNT zcJ2hlu&%EwkULG`{4sR^xNI!l9PZ@yNYt!u!5CDi7@1O*f;&P6LO?TU0Fa2T8+DsY z3_H#sCzwDTJeMC(s;IL6)+K>%+k zPk9zYzl%(r>d*rtFMyJ1JhSmsn`g}Nv0ADj+;RImwQGy%gm&otq)LHQ8`tG`3@^|| zwh0UPYmZMzV}jQGQmfC0)=jczmidunDxyNhQ%t`U>BuQ zwEmvduzPu;aLn;=K>lNKvk-*-X~}tIap}p<_|0gx+}CuIkLxE`DgAN~D3<|5sdyNP zEA;7oImruzSn9pl$DKHM_@}+d0*{i2xb?olc-X1rcpCX;kQ#Xr$Kro^3zzj1MrMHB zD|Kh^3|YME%thU@lK?6sfAohohHK21?|r%>j^5I#S~A-{U6WoDr%or^^2?6v|JhFZ z!_xD=JwwXl^O#Ngg)5{2t&vAq>h0#GunPJ+>x#0S!3($4-ad}wv8r;G)-3d zA~*rILHH4#JmW6E&@afB&mE3_(-H6*5K|LyzJ&XTX4&U{saQ~jezoo8!f*|-N1%`` z^dTW_+0{{&Dh>Nu&(mg;(wP_!zvnvBgi!|v)4r^t1Ke9vI&(g-GCOy|-r|%of8oo{Iz}Q%~%?5(F6(5T# zq-2zhuGDgAwAB$N0f?M13&(|z-Vfc2T3b&0T+nV7=GB4c#&Ezif|ubgXyC@!rx-i3 zf!tiw#P@$JQ;zCLu&qg@xF4gXfai?GBdh);lhwSdQf8*$RbRGevo*An;aGmGY=;@| zRoR8QnEHX>{2Pug{$bKK&JtJ6Fs=6EdytPoE_F-3 zcl`GA?2rb+@w&gSi7KFl5DVHj7D3lunrj|@KlYQ^@B~iC!^ZWE{oT8B@^g0EuhK@5 zszWD5mW2Yyx7&=rTP*NRwY0s43I>1<`}CJV7ZgJcYk=}oPr12R2oiEjzh4LsrS|(7 zW<>GY*ib9e=azOeXBk0v#G@R`u&B;|cunvdpK}G1U+58vSOs@~o+JHnzB?~gM z5!$-535fWh&-(960w>;(7s;yQ49DSDe%!@nMjg2*m99b(knouCNx-Q3R0v(@SrA)m*ok62S+ zBwU1Oht$j;Ny4$N_7mi8|0W5zY?NL@g$gh8B+KmCBodpTLn(BlO0CQAr9k=Rlj%Wu_W>ubzH(%sew1qqJ!6jnS1QK(XEarR2GQp+3)3D!=u8Iu{dOF0`BI=ZK z__zHnOF%>WJyF+Sco@TmHzz@{TYwrbLF*#8DrOu6jLv+OK%Jyfv4kG!3R2-1PHh^b%fr|WZMdignA~b43S8+mgiaIAXjRCc+`CX%P z)<-;YafJx1aa*qT}q}ad8Yn#boV}t5Xl`71RE5aEssLSlYFZ1s``iLhN=)B1qr_(q8@;& zOET6BxUG)_TX!=v9G2B7uWj5rC$oO0KE@hSXmS*FqOD6H$lyAj5WmvhT;8x$@h6cR z24g-HRJ&HJQu2THvpFWl+Z|;1%cT~ty?9@*!a%j?e0W|B{oFH7^(0Tf1y}{jK7cD| zPihgdNL~9}v7s1Is}up@9uevF3X47#^nIhnP@5QUKO;{!)dLVhDcY%GniVk83Nb>S z$R|=~$kOH(XHxB}o8RuGV$Z6aUDYzgk@Yi3cz1H;K{6n%e$9`Rg z2G_sgQzgK;u9+<|E6h?kx%jRjKGb|aZimj}WH3*Z2eI^8WV6w$becvq7X4G!D*WAV z^N~FMuqM7`f8n>G3l&QcN~jDl@rQgz@J21=-C{#+iY2H?yJayx{Wj^d1}PXy4l&>A zmQSC}h9zwNQJuHXI|iKPu$5qAiq7G8ZkT+v?Dnxu%B99`W)!g6eJ3mE|aw0Al{)D70rdZm*V<< zwEv&+p{c|c!K|k0?$G^z` zhCgfI5?b>ixBi2GCHH5^>;FPpWxxl>l?|xtF}dT}GLW#cs<=BG8j!Y>aw9m`azJ-w z$Z&BzRh@pJn5kyRP<)ym*OlA+?Wj;@Fu7X955Cw4p;|J7>IR$P;}fsETZ3kH;(@qF z5-mXGX!+dC>^E=I{(OAyt?}MZimv+rxKuM^!jmKOjtUpW@<#mocNe$?IQq2@gOT`+ zFyMdrqHCAeMZdpCZBB9@xQuU5u*`wY;||(HB}klw2P;N_!j!FCoxGR6Ns792?YgqfK`}Dwl7=naP5pA3;RfLL}!i**S1z50)4V1h=EMiWCUyAYed5~)$RyJIhQ)P3si{f zTo$htmXx?m(3mc7YF)XIUOh=_d@XM8Q;RC6GraMkP%S9cI~YdQ%K|_%^~C$$b-Mx`Fn71&^2aG;$)fXboQ zm-*#b=mRKCc`vfIn`g`Pk6Gb@ZZ!%wq5InDDA>b1D2L8Q*1eIEQoBwhl+NhU;7LUB zn$n-%(DF;jhg)$JtZSdlu0lE?FMDm2&7Gc{Y5i$9(J>s!_gTgxas{u5nF6WzBg)4e z`eXs;lIB*gBIUBw9)hYI%A-{l6=0qc3fORRs97pWSL*cyqrpWJoajMCnF0S(W-C6k zMq&4n=DADEh9_ZC^6jZq8r&7giH6AUIt{^x6|$QvID!*B(({~7ORxnkhf%2I$Q!|^ z35eUq&jYxW!T_*Prpud5f{PACJ2f)>y$}T zh`|hvaIp0FDgoIx>NV>%#W7c`XsKF%LYmlIv*bBco@*BVyW@5P<@@BOc_|LBW6sPV zzgR=)^~;|)diq2*$gf$b^CprPS-vHN#5K zordqrT}SE5js)w%>_nzkWwg#rdxdnw-nC{_1)wp=u4@xSZ{x5tJ80_oHBqT2mTE3N1^zIV>Y{Dv=)4e%R8|NAvD2|g7q|QPWNIq%yV7@z5Qu96!$*y&YwOa2y zN;$rbgi}N0p%4A8t${c;$jcn*llxwL-xEWBM%_-T}4tu_e?5C5{zUsS6O5_ z1nlkk^mbKtYb<;gsiZe_y{{I`8-;Q^GPjE2dcHTqL}|)rMM&ZW&lY-}3xk_!0uo7P z8Miq2-tU&#EGsjh((}Crg$4o1rSn%H{4AH@IoMoXgQgjunV648QfW~hxG2MZM#MJB z`>1Tq1FP+*=GBz_BIP9Uxs{AI{@*ZG@djKYZGNaW$vTxL>UtMR@h7d z*-;@W>#(MvkN8tkQk5G#w(;RX*9zJd2{t2glDlH4iw{lhHT3EhG@rj}IT;{BBGTtrg)~}FV-m(ym=>^!cOvU_5^LBC}fr5kF4SbEbQ$aIoK_{#tpSY;9*xLtUj6TyI|dvoa&Bm+41@B9YF?JH>7>qUPYD1>J%r7Hp=uV9Tz9 zj#Eiel`fQDg;!T_6}SxoW*qgk^{vTblFAAEhpXl8>>A<0x435F7qbe?Z)wvPTVSPx ziv%XV^)9mNtMY`lYce{2xLTr$ld_RH|9Ey_=(B{}>}Vp(8MLv2-2s6UEx+w?k;ggC z>;3tML)#5jHqT}&r`sQ=H|O5B)bW9bGHwxd&>+nwD!30BG~g0YWriCb{=AO;>!y}(j>ImIbxy6&|;$5^}o zO)j858$k7ypFS+=ybz3|tZPl__QIh5w7sN8ytSEdSrjOpi0Lc+U_K7;1a}ad7GFEb zKBN`q6yX1we4WPFWJZgDpY~F{H*@+=#?HFRil{myeu3C7nqfAq|1CR0>+obSr0l5O zVgn{*eIn?S>W>odvAVRc3MK3qZv#ow$L%WC&_tDoQ=d*n$e8O!mjPx!Af-?hq&Beq z_wkxCQ7IOUfezY~vJ8Utfr&f8;n#`j^Ae1{b&a`wun>G44zzpE0AHr{%|GF0t2RDc zWBL2ch*eWpi?q~=lD;H3S4v4f`K1l*Hq)R7JaB=4?{VYNp@JJju~J~#mB6b0&dKWW z8j{N@s+-8cl%~;%u|b*bF1NVO^CaMh7F%(6`ll0v9cN|S9Vj#(ZS(}8L(H1g76`+g z_+fTu?`XWSAccT_Ri?`yEf3|#U57i5N1^kf(3Zwv91*vYI?f)iabS<&*;5{O$!fu- z%F>;0x662X>)U(;)hS*YQIYBsRJB_J>+uKjhn9HCEpTn1RQ+f(`{by;dg4-a$R zD_!~OTI)a5DRQMGA%sRV>Irwi8IA0y~b z-Ex~6!dP)K957Z!i99BGEI=fvU5ow7_`PHsUdxiX9E3cxE@VXdRk;puQ2HiN9E+(X zj(1Ls>*vKk(Hc%np3sZdgsvACGR&<4=;hWerYDyrF@tu18{?7VP7zLYIcO5r;T<9J z2>K~ts{hXc$_|aHVFq6mE3k4gcasrDQbmM?y|4iB3s1`9A3_tDVtCt4Td&#dAkx6O zBAjG)SW6_h$mMV!23MR>n#i|=pOq2zI>0pLTh zxa85T-|sJUr`g<*F(ExX*JHSoV>+}bcnZwyR=`G-Mr9*0IrjcLNrtHy8y8@V1|xpX zl7CY4ses+5z+d3kqt^2O+ztFRIp$j$V~2#o7+}*{Jls0~Fpi!Ev^emJjlN8yM8F|{ z(;-e2$oqFIWBMVqe2RXVd`Wp9Ko;q%E}@o==WF$jzKq%_MT92c!SiIEDi znB;JGwk4SRL5T?zlbw@V2Y9hWm7nnO9kq!5*6R&t#kj2uy+q5rk1Cg@KwG)w2g@7usr@5Isdxy$9o;7* zhj2OUU^QaDEghYv)%CsTw!vV&C~LBnForB(oN9~UdB=zZK~SOY9T3m~hOH_vo{Oom zb?h_b@j9c910=sCs?*r|r5do$F#|Ym+T40=I8&j;WSxouK5QwQE)QJqSH*R7ycd5I z-@a=(2o1?cn|8OW$=Pdm3P*i1w)+Xa*8(LL`uSS=UF)0VWy#zGDw!-m`iyE@h#RM-;MXK#LIDVQBH@}A$)6p6a*{o`*Y zne%!rC9D#|(j@bNFR+KuGBVC-r{c8I8EXTBknYHhYP6<`{U{|SrGHA)Ty+#NgbQtE z%YyyN(2E&;tn$Mx5g}uXKYot;pq`;&NJ+;lg%#g8TSR^MA&uO1!_#Z)Ki>VE0*|nS zH@1vBT?$D5-m%;tVy~T}OH}pMj}z+PrU=?B^+JAXrf%4`6I))72msgal5N4uA8kCM z_8d-_)pt@>b8$RAq0z7CFAuXPmn97yo$MJjjQF)H`^Z`)KggO89TEa0m)k0kPnjNf zfli)I3jPy++ml){6Bcc@+%?O(x*Qti0&$z~zpW;!O3sOXD{%Io%W&^hVI+#Sj6I0- z`a6Jl=ZQUV_FY)WxDo&0znDapgkQP~UWM=LIy%^8@R9|kgGdKsAAJVEALY>{lgZ)} zsX)5;yVg~pqum+B`qGPxNPPus{2SuRZK=QT#vKjJ@F;%8Ah)I@l}-5T6A=N2a0f=b z?`y|0tD@N!7(|8pHU(i*-HwBWQSK_CKA(%>0>x^V)8-e|-6LcW1MuI|83tkxw!X-< z7tey8fXnF3F^d%o#!MR3#=CtAb3FMAu|j^qEht^-w50+yxDXFp+EJ~|9+gxvrD8sZ z$a>9Cpp5FK4mUj}FHWXX1szLj7~&1I*5>{7{-{D(?9|kM*O*ol9H$BW$}PQfVIC}E zTGK0()*6s8QuSWwu9vbShoy1IKd@w=)1@}TmzP9G-k*k>_R|==2`2)@_^CN?7Ag3v z%@v6+{MqZ{jj2MnLQ))@G!VqUVbp-PaOhzl2=|)feW@p~WS%^@-l+}NC!u!a^sLg zM0D&m!?dBcr@R!zDG-itSsGi=wLe6NY@Yso0H{O~B0E_jX_(r+s1kr^EKZegII-iS zW3b;9n2ty#>W~H(5=4bj;N&vP5&)ro5-x(r%X&*(^daU9F?sVf+WkQn{}_4WU+}q{ zf@ur#k@w8Juum(jgc}=W!FBeDGKqOj{_@Z|CU4v(1=VYD}xP>%vQUS12s#9pmxxC znIXKS=_pswhhF+8p;_zw{bOHvXc#ANI#q>{d=XHfnPr@g=|&sobtR9Cc~*FTjZQAf z)rE?xmIJ313wz-59HB{;QH@e@^*O>jE=}G}MM8jVaeVAkUPYHQQEl-of@N5Pr=D$UQ)Ft89OrIT+hTWww%tK zaWwRHbr)+oyy;ExLX6^SRk=3})B?mHQ;?u&^#2n3?LZp75*Jf7N*LiIwZ8^)WqHcZcJgG{?w-kTLo8q`A1 z@<4{j(mPm^#W)Pj)uBx%T5y!?yN9?Fx|BnB80V@UGtwx{2dFLALj84TC=3%saJPr% z8r8ShX`v8W(gM#m z*T6;IFTvPDL#_q|vz?S(3fE3dS?YIYt)%#yYV&+X20yutMb$p(q1F>pi5DizNSt6m zM`Wp@-7Ol=99`^XX1&GVAEAYQb*b}yQ8L-jZynmyA2CE}vsPhX(6IT_WYIc4R`#aXb$a$wihz zhyR$@0cmmK;3c3;lIT!Hba1lsJTzCTPZL}F zsfb_IU^B)zVcuDkz1I&SLoLGTdS7W#^2(Q2J!HosO_!xe3U;b=%B`C{#r@)XqtC0? z3&B1+Jj2Yc$*gAxd>;lZBSW@b85Iaawp<@HE*eAV*T%h5SS2dkucsQ{<9?7JB=Z_M zMksjZk|8@$A4#6`n7>WNb;6Q9o|4d`%Y#`}m6LsvMh+xKqRSJVp1)1Qn)+|Vp4yY5 zWg{iNoZFodm~m%FEG7~N2gj@gBqp^xnWM)jA@4dd-7D{THWeAZ?d+S9-8C6~Q6kFjk_Fjl-4&#$ z%yVvE>5;hHN*L2eXK3AEYSvNBLB!)?JJEny8^F3d9SNwu&^C;{Wf){l^YLm=9N!7t^8IP~*3+Fb@dn7(X1H<`{OgOX zavOnSJsWOf_iFil+`EQeWEg3sA6axObW2?{J^(KVm*mUlC59n?9(Q9%< zUvqKYnBKVCNxmi_AVxqq3+Q{CK^yg~h~`JIquL1iRgE0e;81p0X~z0d!;UU{XyuCk z-I{VO=%tH-hRtnVKA&kQOoOGP5c)8qY0xJuS) z=zwC)C6jH{j>RafE=Wbfku#(|ff^JWen&)Ca#+2gv_yj-%mRD@4B;6*6uF~S&Qrc^ zzMnyfuBTfjVI;+BunT{XVua_BmJk!U3;i!?N24%gpAgk7a|d#q;-MVhEdv`vl+M;I z>L>+TReJHA`t!D@70iFk@FIKd@7zc)-8-pqh+eTR*-9~2tN!2Mr%9=);1?njN7amK zJg%)&y$`P4e{p~HXC6??rftT8Xt?=dTx!CtOnJLA%>wWb2}`e8150*a&fV>K+ACtVdWZNwliHG>}7i#k4n@i4|j^ zzqi5km^&!kg^#!2w)Qa+8zT_RywR>}5*){Gi@+31c{?*M%iLL*5R!$TBYiZeN6j5WA+^ucs!slyt^R-N7 zp>bdn{9=qxvHYAm^fXWJ;cSwCyL5nA*l5Ib@vXbPbtbosZnAd$m`S#3-Qnm{;n04P z^0s7@UZ`sMEMt&Cma1gJH?9{GGH&N51Tfc2B=ZWss`IJ zU%=t9&}`fr^JI4#F8(91)i8X8^?>_%L5>3yD!TvinEy-94m+|uZ%DuCja zj}g=$Qa6~Tp#HDUhXcDU#<~qJj+Yl%j1O+N(8dBp00zZq;v&3?)jdP-C{mKJLvs~?`cnU8ByWh*-v~M|Fa)ul@I}ylst_NA zi2<;m_?!HB1AA~iqi<-@vA|Q*cwLPANl)!OE5#8vbkaOguvX=b(6Sg7+f-LaJBAF# zm;PpC{^NGpx^9+J{&`&VJa;rg&4~~lr5q_K+LCdQY{%{C5$6H>NvG##pG`a=k>nrjlN$;{?dnz z;UL+AZFfa6Q((RbNy?-k`@)(gBf4?!CP-m~d+ES}c|~KO9dwWHbj=OgK_LTSJnIi- zT1|1TI^=f9$KD{%hzdL1B%F#whBjCI{DK5_BX{WqOt8{Sa;zPTTlken@<$xLjmCR5xy4zKt;QzRE+D`Iqzvz;0DJHT!|0=H#EjjG>_5l^T0(HWqZXK(gPC z7P4^nsRv-_E`Jlg=2K@H0LUkPQUROQ<&95Mv(CzA*WH;5IsEu(Zj*nq=qZZa!VjTq za3PgGO-@pn0`X-1#oEr7h_n+bfvbwyev9iKTP$K8atCF%c=#DERZz&-;x1i+soXFmLmu+y5ho+fZAy#!181~lKJNq@B}^|3Dw4Cbb+?^J>$Z%FvVJtt zDx-9OcKG3@>;rZ7HPx_F(d1CYhM%;%R>re(P@=_mPRtMAVnLBZo@#W`#aW+?k_*M8 z!9PfnK?BGSq4^me>L@VnfRMF1?S?72-B$2OMpiFH{;2Ycb&uXRJ!&~=5?MoB*2#=- z)BY=}6fr8#`-yc( zqnBCgH+FW{%o7D4Y~N@?rJYywLC6rg%Hd42&>$in1Awr82hz@};7Si|oHi~D2k5fn zIjNGL@LBaLE4S~6wx>rm<$qz>taC{nRENZ?IHH*Kbhx!3Qtl{jZt{}s$sx;q38qAx z+=`k&;<0rfExPuN4i@ZW(2+YSz8dcPaBU=s2t|$F5t#L#OCq^= zwE9)F5B@$0jojCdHM?m4H}ks1nORaNl~=w`162%cFq^f7)%1EV$+P`AD>NCjWtLAS zgFW^BI?PN%j9RhGUg^0a_7$(aOK$)Qz=Unn!?PMgbC;TP1HCl^Gs@4`)ttF@{xkdR zSZ3W@_y~1&1obkHbiVxFO=$mySUkVh+aY3PDr|NVWVHhlgpX~xoYg|FZ*_q?X_3BK z(G^TP1=GXWH&PY7NkJh9%>`SlFFnsFPuWa>f1RW2>#MNLRO6@WbdNOt@n*kbJ9#<< zN9SA2vD)urq!X6Sxck^~fkRK4F_|;D2oEG^;B~8M_|Q*C%DB>ItZ^i@0Jd3No!5X~ zXitNR0sAu|(ZOkVV?11GTBLcbQ2kQpPy6>8k5p&{{ww&F zeXfg^Q9*2Qoo6kF!zc!fnab=*X4@Y)@oMJ%vjef5`gmR|nRik(Y*fZF#hkXJP8|>~ zmvp#KMXEZo`~SFDh>i#BF*@jy#da-8kyxKjVs2a_STXRhd<(DVbQ%WmrD>y)EO#8h zC6i^AF}8SV7}&UuTE@`6Dpre3~_S&jsK_}b6BG1e?=29WE7U1XS__pAntRe9G5D7au)D##A0llM)N`h#PFt0 zjn1e9vj3Tp-d?`m4ctod#9U^+|GT;0>VU2IT}SqXInxa36>ajfV!3dCfN>P%m0_7f zliG1Y98H8Ty( zK3!uFvdc3}J2vJRp8Sp?=FekRIsxm3W$1-KLdc= zzEF;F`a)TiUD(tCFmZR!KhHsQV+?IaufHQlqMH{p=qj(THyfw<^{Y^&zwsVXGQ}Xv zT|nmxolV#Ko39Df-;2fZlOrg9*&Ml4n1JnU)>$aYT1^z-sHO?9PR zqiKo=l6PyBqit13XoVUhC4lvq*#yohJZn%+{e;Y(1l6Q&1MI5zwdPvSy-4ULR1Gu_2|QAc1JNO$p?%b6A;Tn9M@} zNxgGnXI9aV+CdcyuZfi_YbjVy*}B$1aG|{KGZhW$cz;!dTPdO^1GX?-><73-L<;9d zVbA`7ktYU+ySib(frFs*x|v6|iaG9u_8sp*;xoJsLguBs_@umakFF$U%)p?<31}eZ z&iNufP%bMP99*t-*7b7K#tgB0X+6u0CgUQ}`Rq*u5uCSH4eLweF5~R^Px!2Gk4Hl& zQ_1JWzrqb^+8q=Q1^Z6-7;Y31xRmiZS!z1M3yeti=?R`LJ(eq0osDimHP8+p?IpeU zlxtvlaH7U( zazxB(-~BUt^CN0)^`xrqH*1uORTJB~|9GLIM^cwQ^iur8KrzV+R`K~7W{?w|Te4Yj znn_yQyLXxvC$8i(;;h?+>qG;_!AUXcdwKH*&Gn3+-77RSf8%Jm?TRT;!-_Z`1x8l> zv1n70P5PILMT9P66+`!5vcNzHh4HhVaYuaECpy5QnYXmt*$~#Pa;Vx~DUiA+sF8g8 z7>9U>&TAN&!bjsauEiv?`t>Xb|5h}Dp#1xT>u&FyH}1BpV-75)!)P~Hr0 z{7`&UUjAtII8AU9&0hB@=qG^Zpb^S_j;vAzyKjKaJK>Yn{fe;AWy5xx(5~G_##y%xv(Q1E zt2ku?Z+0#CXAGyXjuYWaB*F;D)p!I4GeKj|I}b;X0$`^Jtum0$J8apfW7?8X8B6W-$jHpJBlQ%PqmyEVmBDiI+XNYL)2=T0nBD}!}{@=&=0!Zg`Am@MgB4%sG>gDz0ZlDJrarX>_&5Mx1f@M@OlmRA&shl@64xDRS4fJzRJ<2s0yuPIQNf&PDj*A1eUDg*4(n-kA{CXR9{ZgKD*C)vZUhm&=M!St7e_W>A#KL38a)X|l-I0=9oKhAsa)zMuW3Z<)#Ymsqqzsp=0vpne>}{Ku%se+< zPDxK8%Fa06aXS+yc7p~*|@;{eMyOVbNjdSftA)z=j^f@ z(;Oi5pdA=0GC{F8kT?kOzy9J~x8G)~W1}s&T&d@PMea03CLAxmpN4RJ`p(7jVh~xN z{Q{`^M_`&*nIsW1k2c9rE~;)t@2U<(3+C#08mBeF?Dw+cx4A*quO=(@&YTNFiqk^e z{dHN$XdO?lqC$oUp%^IOe^UJ&u|rDQdaZ6IvI~xx8hE7@U(%$sxJSqT?zf0eY>bwL*=mCkzpc;o`7?}9M^Iqea zAH__4eS%$Pzz#c&RY3~vlc>FBB$ZuLpf0SwVz`>uX?>0zAzVj~_j$p`$WCMN`y~5J zQ-rR_RXo=q+>QBm6=6T&BCN?qokHITsfQse>$Wcs&Q;z`WTS`IW7FV$c$7TTvoVH6hgd>Eh8nr(0Nne`+Tx(ozO{cBvvCpPMv1s#-

K1dWP?{cka*1SM%ACguEv~kJmBGuF95P_&GWZrCNG0m2 z$Xwt|yh9~joa*7E@qh<1Ns?QiOqcnSL1-E8^SV_f`&ic)a0gS`mi}G!_y{lfO>}I~ z30sU*wOj#iSmDF!-0TYR3CqSnD(M8bz^Y zOJ`c7qH96L11O&ddkS@iAg0gpB$hgbNN6Ajw$(j@ zG{uqbn0gX=)kF4!Lgw~=6-9W0j@*N9v>^koq1hiLm^m}%n;EFl!t0|?&LVo_{mfA# zYhhH#w|pvYqRR(|{5u;v*f|IIQOnDaGmBV{7tC(|8kz86VwWeU$$a9E@p&CY;Q_Ms ztZmn2AP*Qax*oR)UC+Y{iEZ2nQlzJGFfX$9Y(pk=?iX1F%y?OxqUuI^8 znuM270YL$%lTv>@b@Q^H+gvfAhDJV%4-XUpSJ~f4>hJxrPN+028a9yJ*ri}*YovBS zXBtDc#N4~?NTk_@*#!W{JVbB38RsQ@f5KFcB>|a51TI(CG|bfe0Z;y?s7@Y~L?2Om z2j)^8>S6r zI)*k?!x}JpZ1oo8VhAL4u zZzn@oDTVlY6RIruf8z)6xb3NKL3;SolnSzh<=VhK5(Nb%p;d;#vysj?(Bmli9 zfZ8pKpt!3>ZvtdS_A)9}!~SM2&WU#~b+}?5N08q#V~?wEz07Q%|9!R)poC9Sys341 zp{Ao*GNnOm_;U}+$JD8%e=)}}#xfT_E$VG9QIDy#c0ma|QwBckiI+?OXFYs8G~e$H z{0^)!wt(%_IxQ>C5q|^UD?A016JY50pJ_NCUNp_=V-0US@V%Ca?5|>)Ozs+@`d(Ir z0AD%QIhcrjz>}q72Ae4WCaRA*mv7I~>mT+$0!t0BrMtBGEWczHq*n})TdXE1t0&$I zSj$89s;}1{Tk7V5wt3wQ3IQ=1TP{HtY^yxXlvYGF&lS&-%m?@eVM)iYi8rg34E z59~Zc+vduL2IEl5r;s^~U2GpkY<<2&jw#aKr(%HRsg2%7VA;VwcK+*E+~}(6hT*7^&_WkVJqXGBL_oMSmPK`{z2L}&!Wuw0(6TdHM=48ztC2H#CMQ^SsBd8qTmbb6LbbL(R zQW8Wa9PiIBIrh`RBeQ2-t8zn5>Wt^|P>@dc#nJA+2dMpr-hNo@FYr#Itf57H@^@@B z=t{Tab$MhkR!Jp>#0EqrprdSXFQnER%(z>#%JIj-}1uY6p};;s-vMu}&UJwq$h zclGCu)tWT=59m`(8#@EUSe&-uBQoA8T)H=@vXYj*uHBTi=ESY1_(yS^;>@#ylc{-W z|Mo7VjSQbvL+NT#ix~;6P1HUob9j{tK9q^N^N6nP_E(Ev;-IH@Lta_l4ZiV?AAd8T z%zg5h3AvofERJ=Vm&~-k365Xzr+G;gM+>xse|i$@N@S;&A{Qf_^0UsvL-$+3-BJLTnA=$$)iGvj98cvI{*J%0`HpGYVb z{7{S?VZ}1r(#S^Xpse&Pf?csjPp-Lw{4ol6$4(&H^v9U~q4$(&d8n z^1}%Q*m>Z3xWZ?wLAij)mACJsGPuGE9vX@v3v(D@dv=L|ABR7*Hh z!&%GYN7C@iBTLR!GswSkA(~CCfBN&u$@tM=2*ahvCF)L zxj@j2SPq|k8$G5|E5hs5*=bx+P8A|pqh$|jBX3wIo4}A^zmqWNoL$-TJscz0+wDLD zfU?)To1RDt(cP}cq?7$^=~ki4SBrm=DREAaY|4gSwChO;bAdf%f%V`0|CkR#S*pHn z)PfKq4g}uOOSF8Q)!tupcVGrcT_AGZx-)DIbf=g*c->?3++foh+!)*dY7B}qew3;( zn*K{>ml=PAq7c`~m$6n)-yh;wav}?EBM^~m3@H@1*kpasIS@W?Zp;qDQ3^E#?x*r& zVlq^{%gZkdskcB7$Msk@E%SsG<-tZ14XwrJADn$*|3wU+2|^TK*I-Sfy7JMDJMrVr zs9)RmNenMnIC2dfXmJ{EkPI(h(&!*fV*w8vDvi!}&~-raF@cjxCK)1Y47y74FSxaD z?gj$eT^vSXn^9ra(OTMG<30n7r9_wum=7yPnl-Gss@p~7(5u&}+h-%kX-$D<2L-=b z6{gx$p8vtAxZk^Pqki4DmX!g4n+J;RF)EcuF<#xb0Az$J1f#8cds0#Wf3S(qw>}ht zXLIM8-S>KPw)4Ix8&n@!20DZWqj08#dU9tA7ZyVXmVcVRv=YuX)xS;(l1aTI;u+NF z3HjI4`?*Ap0YAXdlMQ0bf@u+Q#L%L9L3Ib~ThE#5WYno+!=IL@7Wn(<5*7olvV1M;fEWl4O(nz&WNGLYNk$};(zDeoOzhQC6w7?5HW&N< z)JwLZ_A<4>?x}J)XHw%g@BxQhs%wOx7Xw8QOo6$!=$yR2NVg9dLOEdoI`@<%scaYe z^PD_zg13Q-IO_3+!)WkB^1hcbwDevo!<=37KhsMWgy8`hlf(Mp7YQ1?m>uj`*| z;?*ccqz#7_YUUWTJ+XumO3kh4XnL0z%Fj8@{KQU{hh=t1hHF&cL)w5V0XQRw$=p0k^mf z9d>L;(`G+ zd4|6imm`94uhh-tY_VeV4#-e*5S6>ul>NBGmcQKum{vuxZ|!U4vX+f9wmZ5l5uu4{ z;Ns6yl@00~T5CVtmO`cwQ}_B5>npxbCZ__z%%}j!YM!Q6FUgkjJR#U|&l?5jFtENQ*+m4h#%q>pul5>3M(vdtdX{Yw^+8|6RO;nf;52-e; z|KlQw38p%cV<d)PvB!7rSv)XqVQapF)E0rbU>J}^ZT2GcdcV=z$JPIR!N)P1Pt2EESfZnm zLr$2({cH7iaDvjt8>;e1Jz=3{oy*6O-L3O1DSJ%i2?DsQ(L3i=^ZXM9%<3SXmcG&* zfvb4EVE1#q*)SW{0B}c52b-TVoLYip$os+R`0g~xir;a7=B%NPOfH2r240@$+vx*Y z?J1|48LI+bpiUhRj6OQ7v7(SeN4+wWGu+R?(~*uU3i<%c&a3-937jWs*idcsGfDU5f^@*lkTy#yq4nqWTs~`4O+Pov!0H15K_@BqCg783R0XoRiFtRNQ3(X18 zZiYL=OvZ{NSn{ozeDapZ*@=+h`XyjF3J)UUmGpJ6U`XEM9%q{Pt@-F?!)B-0B-@9E zHlcsJI*=fL4NKz6pLC+a4WzH6P&&EF;}nCw`dSBeuj#26ZjKkT%T+)Ry*cYB2Op?^mB|#M%_QVW}O;tCf9ZS0&QTqGg;PzHv!;bb`dtB18>F*p1>EV%Jaq8@%Q)d28E>;l zP&5(#hvn`MdJx#D-b@%T+nbduW|ZUIN#BC7~P)sH1BG1s3z*Ra>U8H!X!ZT{h=c(T0x@i^t4q&gm(Fw0x3px%Y{fyw~4Nk zT@2X}5_`Quy+gSiMZSLF4iyCq3GO;0gE7yDrOuuyn@#Rm;s1TTZ#fCODRnNH12dL_ z^2M{}rk0E6rfDou!mX}`XHR{Ct|oSJw}9;+VwsFY(I5M3N;seF zGTarJ55X=T_u-zzIpF2UQM>dvdbeZYhesw%5@;*ivc^RQib-TzH>GNn7PuR*Mn$eH z->lC8GmX~69#I#m$z&-97?om$#NIS}hVeZfF)&elpkvO^VqeD%7}eh*Cte_xA`zu& zFuWXbJa99hto-Th@q3cZ?W9J{SUy@LUIx2*DO}}XXI1q_M@j>p9~~?5T}*u$rM&*A z)}+ERP*v}Ioxi3|?C}w}tG^K#ho(fZS`!Payu_6_S4>}R>me$O8po1fkv}AciwryE zOK`BvW;6&;{p;+!m?=xVuHnc5MwsHiH+-qT%20N8oa1%uejmUi;+*5;R|E9xc-Ud) zFMiC=fnZX>>%(@{jZjPBQ2|@(cW8(J6@Org;qq!zU>bk;R>O&FphWq~IMXle%uk;L z1~>{<)_;lz;}we!w`l>=TK0}z5-c7~eXV40c}wkbD*~VI4A1et8y{!kCc`}soPl?h z@^VLDIC1k=N*&=ebhj6j?M)bGwE|viHdjt_1K8I>?vKoGh&fWz97?tCgN`_esZAJT z7RL{Bhmn%sJ2nCqPUwp)S0yEic1n2lmWm3zd0#uvK&V{PyUj*tF9t#O0enNlH+i8n zl&_3>^?$GI@Z&`!K%la~!#Cf<`Mw=H*&#{8$BN@W?KGo)OY;d%IY6NiY+h(vS^Jbk z_cq(LYIHY)A0?1HkOe^5ym}f+AtjW8jXlGvCv5$3HWmEvI~)Dl|Ck1k{;ID z;*EqOmZ5OuV+r zveS=i^jlC8MI+cJ7)(=@{UMt4AE|(vtc_L{-k<4Wch;QQ4Quw65_xhs>f^Js^NN4p*k?{j$}^?d)cI*rYBm%Hi6BlP^w3sqJ`9s1YZB z{cGkE%ECd9Ri#m1zEpUI`ZpMpcok)bXEEXrt%FQbDR^DXY6~V;v@wZ_h{?GoAxx;j zgrfmwxU=77v;E?tLTx945RKYyFTB-$&g>V912^FhdzX)*0m8;e`xMWKWh&a-@!K@f z^+)$Jk|Dz%>mSuwN0`2pKQG8Uuf#!#L3xj!B6Jd`QBJVQi?roaaWm4;XqNq*wAx3Z zUI*55E;&q>tI)kJsVqCyt5>}*fcKKV6e4sWdhO|xELE~c9Mz6Z;8>sao2d2CoAt3g z4xP6?jqfSLyZOqVys*UGr~IQN5g7_bu}eeJgKi1Fdsr92eqckEAOufn&y(THaAJnd zGMdfcwGYz>67mJ$_H|LQN8mXY`~DM$wX*EX9jki=s8wl+eO%nFREeLU&9~#a)i`W4 zQw@G+2P=0^v{HZ4wq5VZFfk{>@`lNDGb7Ja>&h|bPET>sEdmZkT_>SE@^V^80qAiW z5)A<+Ns&Q}m2TBFkQYV%v%&<_8Pjsn9@|!-*L=D+m=vvw1% z&?T0BOH_D#+lLwTF&5UjAZ2p^i%f&``|=4CCj7WH4j=0Qwt9H`o!Af`ed)zLioh}Z!Q6kt zLZVuV98&Y#j7EIEPecK;Jl`52JqOHIJiOh)X&>k3(!i!rkO$DmfTb!aRAeo}6H9GE zjgRRe4t$op&KmM%Ixog!$F4&$_j>W%d-`PCH*3lVAh>3Mp-No$`*tYqMpI5DNa{qJ z7>*EITAA;2jJFBm8WwG3=Cdc=`i;$(wZD@P(9{%FoC1TPkbvTz2Pi0Cgg#E?04Z7? zZb&;s)~PiE4uzt%;_>vbzXzo36izGBn>;H0CuOJ)Fmf<#)KeBy9xo}q>^mNcnIJn^ zw$oO_w0trfu|BnYxs1bFa~_n!L0upxB^lsgo~o>Adxd4Tyr^2+e81BdZt*c@5863$ zN-&h!kxjco+5)q<*|5^+H!bv1e59#{^7u1(tKOa8lb=$DjKIE!Bn%S~>T%%Ax?9Ou7(*8ht*l(fQm}L}<~|rR^(~QpBF3!zscbpVxuqrs0ZUBi zu$M}jp~s*lcUD0(kCaa@iW?`bhZVw%qkh8r?oX%9b-y1D0Rr}X43MjfrP7)zZx;S6 zlm$wqT>@kcUTmf3R;~o_0dPkri9P=Jkb8w zM!wpwAlQ?JAqjev%w*O?Lc*^@iSdw9(W#pXylmZH2#{WMcTNl(m01~nW5|DQ^(AqB z?m1wQmuRi4!GJ4OqFXw6D2t4clWLRwCA!8OP{@WFGBZ(SZhu(qiyQW4ZNfPr>R1pu4$)Vyp8oN1TxBJ3ASjZrU$N}i9$da=y~G9-$a71^X%HdWxoso^HI|*8<>OW= z-`E;gcw^UAu9fWkuMYl>;R=dUhI>J`mS}{s>(3BU%xhraNjf4-0*}sc&F^yWE~dUT zBnW(v3DOMlOY=EaQVz+Xi$3I`X)A5xBL{Ej%)O16u@;A%UeL|){MJo&rs7wzY^U*T zX>{pTSPuY1(3o7OOt|JSZ>1GGX*h=V_|{16Fn@fTj)-|+|IUL>04ph|gMcOf%;yf>I{A!h4dXLoc+* zy1GpYd?jV|Pv%Je?ze4tsaJu79%;S_XUL4(ZB@Aqei#sq1y9pTjxTT2VZu|&UFZ~Z zsapLZv=)gG);!bqoi+ug4f`^ZQTL1&N;LF5=+E*8#)M@=JKO zk&}d282NIX$P_{kF$!q}u(sI-@WcT5Q*#7KP@?a+VWEGE19yIFQ{z^>Mtxq>p$^Q# z?(@4YriFZ6iv|=g9usQHKnJHYYrZQr)H-S7ulV0l$TM}`F@w7 zQY3EaJxEhKZH+*c-xS%)QeZvixZ%p(n0GVYy+Uz}HD?UIBFEYI{K&lxfJI2|#R9-l zJ=D(cD?~_KkAP8^tLpqN#BxN)?>=A=Ort)&pvlH1#>B4dim9_28$aT)9XL|R5u?WV z!%(2a>$UGD$7&J;WmogiU&W$7069a}7R7%=qVvWFZ6m3S3)xLCe>RAiORvtmvQ!6J z;I*PTNOc^V#uy3g_OoE$p&n(u-Q5vm7SmK43(Y{#Ihuzr8(*fg8q{;K$Ry+fK%=XW z?H*Y)AQp&iYZSag>4w9n+0r6cgd6bRr(S~6aB|*iKruz`bjK#PcFHME(%rRqN{ScfUHe|VLZcS_<( z=*dRklD-3Lnkn~Pcd4uqkP#Y!j$qsm!PBm~#Z4VrkN)%wd)JLL?fA$5oTGgj;ULzS z2YB6LHV5~}VEnz~uX=agn()kSM1FEaaOM*A)vkq|O$L+%!_Z}lqpUPT-K`}ba7w5< zz`T{Pdc~n)0c1Fubi>%Y(t{_!+3NNUc9Y7^h65?7?yAsSVz_QeqH1y$%cYLRh8988 z9DdQT0yUtFunte~4hsUVk;!ri$iM2;xGq%I`1A)iZSwvAlAuL#8{_RJ;-2mFF&6q3 zGM9O3!NfHNqa%<@ASXt*5v=vuI(AEq4QxyX^=75pNt|e`f0v2N4j+r~VMxMI676H_ z=sTmX+*GE>^Jy#pRen`=`xjh)*}MyCZ{PBlWWX{ydv7jTL9%Sl>pd(bAh{K~-iefegy<#LBZlrg^L^1GqsckY9YgOInfN zCww_5NN1I)oiX<1I$-wXq+M(klDYsy8sqySbvN87T2=~+moZ@CQ94v!*eCgI-^Xc0 z;K!%NetT3w>vPBAqBaYt@^n{d5NqKOFz_Vb{C z4wVjLgVR%o$7NsB&t%(BL??Qmnb!G$uy35<^^T%zy%gp~P(4xmnVXfW?d%eSNSgl;L=&d$NBKZEttI+vs)GIFBPQ9?TXynubdfRa_sTtL(UAr^+_?m zYi5Z_vs8JavS-O-)tHX>P&8Qf+s?`v2DfJT?6AIWWIgpDSU@70~-8 zXRlWGVF0=joWqzc4^FAk;M(7-BR60_b1`LujQ0RKM#zy;GZ`897L^L#@AJIS8I3b9SbLvSu(#S=AkoivI?F#6tB*XaGDTPyBM zaBA}bLsa3$O6sYh-alt|EZRRokJ^t;pYBwpJS6$F0m(zZPGaE+ep)7BPN?8JMj~aj z0D$!9>Jy`qw+qE4PIwWSUtdfv=(@7oWPW@I22@s|{5nC(&d(rx$0HNpL}y+RMai=q zkOYW}q)I_k@4GizTX(7_<4|vcPVLEI`(nygQ)s`l@lpKazbXK^kNV_46*yQVTEJtB2cgW47KD_VR<)uWY-F`RIgf% zilgRlWe0&pgWW2_PG?q=lAhpimWw+7Cv&=Ufyv@XxRW5Evn~M983J+nMs7NR81L1% z0LDtL0$TrUN)tJcY7zRF#pKk}X3ZsoIuo-Y5CA>AHQJjhCHnDK%fq7M@xK+dlX;f`CBLuUexr;%yp6-6cI%5a?hZw;>fckYtx0ISKSkOj=@8X8fSYHpg zSDYu$Q69HoMFO?Os=sD5M^vNY_}^a#F7$&`%rUaTTI-xXn^=kohWD*i$owq|+Rv8j zmmy?h6pT_E!3V|l6f6-$mx7jC<67B~DyOr&UYsT{l7!w>R6pKQ z7@&~_&yzU#GVxmrnSQn1ws~>#CPu!|aP(;}q<0kc>Iqw3p>=-wv1n$DvEb2Y<|`5e zroH{bbrS+q^r!`5Rp@SVv?@8LjxRdhK*id0u_RIU&HLg-A|5x8TR*$|tV5XHh3jU0 z@Hi;){=N}MU?Wl)9s5YBf3DzI6n|a1x#!$ljm2-@u;Ln~U|kNA<>uc%8X<2LY-H@{ zNcxu77G@RCM-!rg`efg51nSnqBd2PT0a}FE-fee7j)xaipnImk!D(++Y*MoWOE&;G z?|gyzs9w2|*wRx_&jik21^a#|kMmw8^AFsMU+?YS`U}`VK~!c^^eF~ai-Dut+#Pa) zS;m^-Ah#N90Mwczd-{I$7OusGoBGspZtu=@9Fr+RY{56u5Klg4@R)EtkVA&=WCf+t zm#0sO>znw2^!5ttYr#ds!gSa!e{Fqt$^@xY@0v_@u^4`A6Spx=a>Oi+_WGE+^Z|)hA4MjYsi-Ui-MBiz z2;DPYv`*0}94)ka!y}C|AHcFv=9?p?OY~&iq;{1gi92Q=yiHMcpg4*VE%~DQIZ6{h zTtR<03{QZ0BGy&LN}sAW1VN-)+a}Fs^;0)-ZQgzq@S3%(?@Ua9K&{tH!ih~CN?Df&13VT zY-%0`)5r^t$!#2BH!t;s7ok3Y2ps<0R9c*yT(fExRETJeOqjKWsVcTNcq zY?9J{NFUy;K}Y@yfKad)XXbI!%P*sh&hnM8D-k!`YH)ddBME`Q!~@Bp?iqpmOUTqQ z5mg$P8S~XU=#JtK!jk<|QQJ+(W=h6P&0#HW)qbcq_26gj60)L9OnO7bCd9ZZ@@fxQ zWmQ`D8xe#=6@INMY<%*?)P3&r``80pu77D@Uw+^AEDbFBdPaq1naIaNA+ay zG4ULt#3+RrPs(gjsW-E5`Vvd)t8gUDyzL>)CjU@eH=OiK*Sp;)yf7BQ^80Z#i)BK_ zMsL)M9sW$IKD8mM^3Ol4`X}Di^*OlukL2+DM!FAv{1vEFA&KE4tH5r|6@sbqJ;0!Q z2IQ27I8CLe97~XEKNNg=Ibf7@>M+#RX^O4E09UcZSYj&Pts!GNshI$u>zo zf+qJK8bULk{K*lUl^3WkS{J!O1&5n@zZ-3wfJ1gygVLN`|FT%uhqk0!glyLtSoCNh z-0vbTW5^}{K3(Gx9zO0~n|Dqz7hg2zJ2LcHmAd;s>VAch+c^o;Yv<#`Wn& zH5@`({L7cWHIL1U-!|0;f`|Cv(5H!dr15gd`)+93HoFnRQ~3LuPw7WgD=j08m3^ zsj*1Lp@)y>`OJdYEzSxNb@XO{=iAgK&waR4Pyl~T{mkbzalbTKStz40zSv%YzZJ2S zgp)z?rH9=QKmu_=h*0{U5@oQ*0ZO-9m{(b>pl(b;n=S!{|B6enBSpl%(R~i?kot^) za%4u(<-vHnN{-;{c!Z}i?lLdnoa<1idUO$=EIq?QpE>~by2!1Nwc?Gczk}Za8rqY@ z)fMMdqXP)Z4y2d5mQNFe0Fd-W1EFq5nl-u8h{2%f<{8BY4IsK@9!558I+U69ae^x! ze8m?7ShtRmt#aI#bGDoVaI2=SdtXbG$!7I%kpSegX3)O5Dx_WdcBjlZv2ysL|4q~# ze!I7;B%Om{750J55*R(Jb!ruNu0*GqDkuE>QB!lf%C{;Y3y8r*J2My3al>nQPpFE; z=3Fym2}{gMN2CN|hXSMNJ2MhMKWC}{@VnXSAdMfONk5?1)Cn!B z(k8aFLK#PhD6>Iq= z(eBgN@eJEZW*6NXlQu$WzYl3vh67Vn-UU?m+~>;D_a&W%05?CtMW)OrmrMb7LYht_ zm9isX75tZoiswC;jX2|y1=!QET`SYYf_1wb7z*5GNPG){TVg4oH?r{2E}SV_Mve$q zuP;iHRGzE&#z2H$Ea6k$`d=EJ%VhZ@pquu4hS4OUCDIY$>fDq}Fy8s2RZ$qimK)?R zsG5Ro$k(U?{{2nYoS$)}p4bXL3~j8yuivAuOrwEwon?^qQQRI^(1MK_1cx=GO+QTt z;?FgT)>Bkv)CqOD$3)#BultI>O)30uvB@q0Y;1O--6S)5}KD-r(>1YvLXWO*X|AW6OkcCK$Lm-XvPk?G>cmpQhZ73vO{y-WG zajFx?%<0PhLW+ig@(J4EoR24L$|&$YfnqO?-6`FG)OZ6%6_O;B)OT%Zu^Yb1A13z~ zI99t=#ZW$8wtjmUU*KbbPq=HI74XVI{QYR1sfuRCWKKSt^O*H5wo9z)LwGaugEjX~ zGSi;!iLogAQ_V75L8rwt3jWTaB^Ae~6yzSlw3v20R5JcKkU!^EsY$-#WO!tZPKYXZ zZ!$cJsF=3q0P3!+;2z-~IfYRA5hDrGQ2pW@Hk63SH)r=6D4!d)RzuSaucS&w{{5dFd~0om_-ybGY?A23s`TXLWw^~D8Ug6fZ|-Z-$HQ6 zZFA(;%$#L&JAej4IU&s8p~rWBg^!LyZg}RND33yqvDUxbtY?CBqt>Ah8;D^7D#~P0 zA!5<0+Ya&Fk7KT}p}gp!ygP2-3<@JH8RmHD*R)(SU9SVUsBGB_PH+rTTd+Bw7fG|+ zKxLznL9Bt&892Dc#z2Ks*186cOV=gjxsgg@!}JfzisDG;$?SK|u|xNHpAt${zX<<3 z5R6d;&paX)Yi+Q*n*LyLGEP&GSYHn+tVQ#~YR+QA0XjTjCVh;#rin+@9BuMW&B|T{N-UbU^IMT|emXAa>@;2AnbkH*fcE@yv^trEWePYe@8aW` zT?!jr%4D_8JKBchsQz{iKGBe+vU7U78==z5KHMcJ1xIzp?`_+S5tI=y`zy53d@B1v z$-KmD_v`MDObF4td=M-~gM+aTfX3@!L6fBc2V+<27vQ}wR++WHKoR}n5%piP256MO z;l?LWCMeiSo<}kuxBWUyKL#IfQEjERoC;$q5tkrSKRTX(k^}>t=5!WmUGUUOEG3>I zSA{SwA@OD?^zA>oQ3)%v;g+>3=QF|0U7?@iDss6;Z2z|zey_2N6y>f;#I-?(?V6JL zYUj{-l$~-fhQqVUM&4!6N9cT;e9yy3)yZo4&lru~KsXJ0vKv+k(cN)r^$HQh8CRo3 zRaSo*0SyKzoSgwQcOp0VY{l8>i%BWu2sD#dR+k)_vuSKMNeMn=o5MerfTr67^SaV5 z6>7+AQ=`9!<}uPs1HN$vjM!neqp%p9?6W-~sB&YmS3={~?-R8Bfft-H)x60cFZ2U@ zA61wOO#C23w>EwY63Jh=p3% z&k>#iuvpcgugt&;z<&rM9i6AK?O}Gx68zJYC!V`ccN)f2K=^fyC8^XM1y+R%4BhR= zNrA8c5>|HJTYYtmD8Xmg|L4I_%Yzgzrzlzs1D+Tq>+v6qTV(Gq}iW;%&8s zH-Fl=MU@8PaLJ&y&qA9>oOVz9FeC|_i^EJyFWfE@q9Mye8OI^0T z_$Rya@9jobdgg8R@MN~zonX*WqFnysp!i-&1%U3tNkw;Xt3Dk*0C3=fDJ_x@$}Qp5 zqnAmjx3tEx2>ca9Z__wXoei_i?=zpHykTx}GOdp35|dUMKs+_Hm|^st(Yz)Qr2POJ z(FyJwket*xF-jdVsMb-0E7MdZ%Lwx%;~tCW)fXnd*EJBD^AA4sZx@`L{Owj_YD z^*CaVH)8NSuXZDUFvX}v>WeUy!#03LGVN@5JWhdI$-$W#jhOP&48}A#ER2L{cSuEQ zXv0+B`h=iJD7lF8Kn!lC>LOgc1D3d!XQODW0JqvB=o+r29jd{ruV0Es;w``9T-#Y+ zRadnXkeRZ|!usa#n#W(SWAG-VLM6~R&&qm~9Kt$becH)yjMV!C^96y2LT8T;A-hon zCs+49)cyO}^1F7+Z=Ekxi4Mfz5ilj_t-{z+nuCDNwCyeT{o+V2bdGgQo`eE|plhA( zU;_*~%mx~-yK~TrWWINBZQ4hD9pzhXf|`ucq%1QwJGzaSz-XP;#Fqa!$R#c~eMTtRdj1w@<77HLj&K;R(o$|m%Op1(PzyS(`+uFP>1Mk>1!~Z5# z?BO+s5#KBv)|AD7U5hxv{Rjxy(-}{##vv9bM2#kkJEB5BzUQKHKIvmcH;XGXB7J!V zFS`bsdp3`|SZu8R?~>#zhML1eQagtVwSp#kF-0_sh;@jq?k;}4AHIGwK1kWk!c-Xs z3*9fL)w^?kF#jls6A*lH>>AARJBSXz;tA-77G4;s%5N@EfA~7391Lba13xrgaFiLR z+ecYUDyWh2u7pS@<@%d7Vt8QeUd};V*#_rt|)(z=ZMe`A6 zl&TJ`E8Fu9dfnetd7&@JU`j`PK50S%%)x{3YKk;ebU~l4)J1EA9Z?&Wr};jn*MqTi&CA7k zrr|koyV<}T_Cr`f=LKJSUSCO(=_{jq_x&m{%Jal((HUHT7nj+qBw63D2VFSI&USgN z|JG@{u0Kq=6Ux5kuPx7d?tW#qlPA;_mKg(|kb;JtICH&*^AT5@3#!o1Ad^7af1v~q z@!b1^tEOORa+{}YQ~HVuQ%b?$EtdKsZCsJ%NxoCbwrUF3DCrwK=bej2fp&{B3>P3W zXzFaE#pe_m8U}7jX7$ki!N`v}jyVwH81_%9okdV?FF^)?fDh%Gmxj%m9)oKq^cj|{Wh{mZ7jpSyD z>BZ&1{S$G4IW&1eb8J?`%NNn$5M_X$1@g~s7G2Yb9}KGNOoPf2JkNCmz%LmW9&8?I z*HEnxez}=}l~D{^%cExZD%wF#sIifA_b8drET2VtAv#Gj2sM{A} zO9F&`eurKl@}eQ@;jiJeUvP62+daCGX-M0E{5{!f)h+u5_tANxq;lxTEQ9gwdW?wO zbup|Jt)A7zHxEbvwRVTBPc2Ei&P}EbFrVo=Yy*#$<>9x`L;BrOLz!DniC z>$c@3>{a1G#b2~IXgKvng*Fm{ZyL4KwgmU2fs7PGYVM5(6U9AWBHvqL=kBB>ntM)a z0Rm71NJ;zw53v?s|v z(grf9faNf3>J^Evr7`$$wgevY**`yMX>goX@4$g1k@OXWgTEaV_1Rx!1IUaW6{n7g z;0HNIgwSz~6NJ@R3Ouo@>HC%7{u@1+U1WeV5MkFjb?Jfi{Ntc`9n>D)BpT@}%9Gi8 z`-yNNW12qCj(d-H+hxLoX`j{s^%t&Ouh$)>8>#1uFEj0OOKlAU(0~xzEWiE61O2uM z8+bkT&F;otw6yxHFc!}$V{Q;s*T_Z#{t>zqs9)&M**du#J4nf)oBc-Dg zY?zdMdu7w?AEHYR;&Ke)xpfPi1|Qr{IzG2%Xq2fdIL&FMy?C+b>^5@>{G|$txhp`R z&rjN(_(tJxO zZe{`a^(`_dw(2z@tXh|DKu9n@?b3cASDT@%{vWmdp6@$<2~@OozlEFZkBY`1YoYmT z2F|OfnK|5Id;E>{9Lo6wqM9yqQQ_M>EPR_G>?0#6rPed|n7UI~wid2W<6{9o$G|ms zln=x-k+#k&V}^KSHLA-KDOxNe$&fv66I3Q?@yW$WrVyg;t0Pet=FMUdQAnp*qcL0f zr_rjGX>e*TiR#i}KQLZLbG1KG=HXh7zRkU;6b>jZ@fDjz=Xqa5b>sW^d&=d~wdkF` zEAP|5jsBNNn7cBQc-?6myIUjzxXikNP1n1wLD!DxPc@_w-8DbMVgSXs5<8IH=nBRKs_fll!2&sA zY=FAP9XR=4@9p+=g!y$sqO`PWmoiW4OG@ATqhA;o#=oBG2A4RL@&$%r1t9BANXn)? zE9T-dZ`VIGNo=ux(nq$=E-x_{j@l8={_3m^9eiFTbaT+Bd?Z+Rp6p7GH z=eu7rZUC<`$@J=&jwRnnz-xiF8`hJ_EBh4E#d1T|i4Am`&pVxukh8qD$QP(A^`R*z_Tms~^w7R4~+gY>PZ&xjbSr?*^x~#Y?db3p!@HuM3 z4Z7rli5_^oP(WCn1vV>lOQH655U^&1CYZiKg;%JlVvSUwTy*Qa2iNcH?*o{Df3}^q zk9}Z$Z9tEL)6FvfkwReXVkZd-Q>?N5<*}zq+stoU+hswr!ogTPwN1Q-z@kxTcHt%^ zt>;ss>A`AXII-Xvi7gsmrmP>D?daMmXQ+Lh_1f6k^iOtu(`V;j18w8 zEKh-k6b}N&`jJf6N}1=ZXwr54{~QC(=;N*Yrf4{;;U3lD?0W1$83ss7m#%B=UUt6k z=+DRbnM5NrDd`Rgj&vrP;rWBXZe*ywfiEd$jTfHkB@RvObMozPQT_+osbOt~c~SUC(?G zbezRAf=(=P9*L8G$0M}4Pi;h$-gM%WqP7nod!PsqfA$TOThE1LklN> zdIN_(_2RA|0?e`5pWr;`BqY>;lXPPqpRdjWZn3O=gw{e|P|GSGD#xAlDStOh_b z{4kT(2MQvnrkb`%u;b~k-%M2t1&^-vq&h129|P-*85CG*MCi5Ic?wF*20cVJw4114Ts6w=t%SUq=J<@9!mt=IZVadn*FHaD-wu&0>IyeWO3&)hx1xjmN zGMQC6VXOqgLk?9fpVYpgd45E*56B6U3K;7*^;!d@!3vLu&!;5^lp z>+(gu@#|qt-A8=OhU^49*NxE3Y97sHC2O6}_BSa1O20D1f#Bg})@qrjR=%Ce*&Vi< zWK>@gXcU7!etA*1`vv^yyTJ3wiBS5;v;wIb2DeI9&QrwZrL|!LbD~)<7l^g`)5%Zj zFkh_P(}Hiq68T!SC7U?43920qY){&Ev~c)b6KXJA+G3#&xtV&6iD_H!>TEO;kWv_J zk{TqDDNaE8;!(ig75N6YR{rz0Q^@*VPd-Ea&JXW2t1S#3KS^leB~17hMSYzZB&FVt0#k<$x51B4082#l!>$ z(!sB-)ubXnS6#;iEc@Gg!KV8@rKH7humnb@=+h3gv4pB4<2)CxCS33F0y` z2I_Na4mNWZ@x#ADbc<77A4&`6sEx8(IGm>Yqz&(v%#`5*tzk2xf6pI^!%?q3!hI)) z(@52bun&Hr>*fGei>mHAI?=?{tJY#VpvZq7fNRXBT<`8*nkyLJkefV+R4Ii_C-EmF zf<8^o3R1Rh773xuI4D3~Vi&ms{z9AUsli*-SazRe&A+c?MWUChkkMKCBF@80a5VJt zwjgrdE*Dn+UrAP=_tb59;U4R>?{FqUe9{XrcyJa= zjfS3Bga+FT1TrqgGq~_P<9j_huoNqCWX*~cK}|e&G2#trnGW#vHHv1alc4z6L8Kvl zFG*}}L6Ah!UbG=k|DkaOZN{-4g&W+=mYCf(woki>bEUuA%678$2&s$;eWUQB&JjGX zO5!eE;&s;5w{P#3ULlw+We{d~gTW6_Nb0d2&%PgL9OAXh2kIaS9$oL=5>@XYs zyzxh|N$BlDhVoBc^C98qwXK|0Xi*>Mdx>GVcFt6;pNo=u|2(XhM#9kcHFL7Yau<{0Hgt zO~k`F>paa)m=p@7ehzn`oDjQ)Gy7>DSc7mVzkp+ObwNuvr(tJ~I>#DJ$W*;^(0a8^ zGFSa<+v4%l1fvbK;0*50A}UKU_2QZnel;8b_@i>4Igwrfx7#B6&m0%*09q( zl;ZJ`2OKYNdEVw{OL2t-hp02uF6AIda`cm)H6nUuY(GK-a1)99K}@BKNhF1axE&sJ zj0R^}@XdivnO>R_6giM#UE^~sinlDfa8^K5pSR@F$HPziDa-pA#X9zP1NNc^lCLh8 zAJ;(g5%P2gR}Jx&@bGNlja(Lq<@evKTMg=FQkno{OI#LMLv*G1j_jjD-a19vL^@Hv zM9zf9%O$X1Fr7-t)<*$#lE%5!NIZwN4UwqKl#(S?Cz`lExW&N#RhiVlMQm&yIau+D zqO*%iJJ68Dizu;X40rK5p|Pp?gUQpIdrcbj*_M$dC3hx`iL? zl&wMO-Mvf-xFZ|DM?7sRjt!|xn=35f4>ds>@e2p7s+ZO2ppFq;Z_of?{y{oHMGH$Y zd&vP=BF+GrHbb2~hqUBQ#Dx}S4qBPRO!3p5DS|l7e_-s%OaE>RO`162lE6XuyZzEl z8WHaDZQ?0aIlN+pH@JxwQ809vvIPxgbn8y|4!e9U#|4l9^qdg$6fW3Rb-1DHm<6+& zjx~J8ZF8b1@iF~Be_5UgG=ByY6oMxD?BswK)~;C$nyNBid9VQlMp;HK{`#BXy1y<` zh*L(7S0ZJ+>ihHvzsr0C$=S@>ahVglU+capAGca;dx2=ktW)lf$7i6JNJVs*_YG?b z<@&7V{eu3`Mc|#Ni4FgtyWUzX3f82Id>n%7s3};?4bNF&ZN%D)SGSI*jza-77k!yD zmz&^M;t5Y-CVjGP*{$N(n)JWi+=X-)O{q?u{ndzDy|eAcJ(@8WS}HYPezP5o({N6N zbXvb)UV4rCVnGB`dpZ9GZok5eG=iC-?xUWB77JOP!JPB5^=RPNj}~X)2Ac`sCHQ;@ zR}x+_HF=9d>{UXkHg?p^*T~dghh|jrUepVY<`R*F2w3kXU`Skae?6vku%J*Aq7n>p7rWw@cbno#eY9?}((UKpnu{>ih=3iCMQ!zMK}Hg2 zh%I5ChFw6iBZr8E>W>ux~~V)zgwTF!csOld>v{u^C;Bu8S0wlJ`CXRWR_47`8m{4kt zp_v4+52*jZo{LlRuJ~q9&XmU;yttjXXWejR;DMB#ajeGRPzBgmBk=WX#Q@#AYYD|c z0*^kO`RZBBZ;1lIdk_^yKbEbQ1yaB{qKJo|D&x9TLmY9YSy1|0AEWiGL*2yyo@cSkp+1BDV)tA z+XRctdyl0hl`&jet&038|BIIc;+W>jgiJw?P-vzqSn=7sD8NRhcanFyF-fvYJL}rZ zs}x(E8rdt$Z^5KU!sw0k5Q+`3zD-nSiQ_b@*+j;{Nc9$SR@&DP>Zbr$xFsq&0VSbb zPB5D9MJRn-$H%eRz~oEg!}aKrYhNs}0_OF9D#{d?#!9`+HU#NGg)Q@Klq=G? z+Kk#~3w5VOQkc-Xm1CS5(fFo@R? zvyZkQZae_E^k=>^I`G`4RFfNMK0^Z(C^mgD*=fb8&XB$L09BOlcA6wQAWtJ|XYfmtlK*_W$1nT${s~s&F zcgR7b;Xfr3Meb-yspD7I8qy7Av1w;OyR$l(GUTc)aFSKB9`4V|6R^2`3r zTI8Mml>+}G_wGAw+MS5=e{?kY6=vYw!Z@kkz2mNn_FUp@SW6Br?=#|SNP^}d$@<~k zHp4pw%S?JrgY!S*CqV>8pD5T}wtEsVx#VAW_vJyn0eHaefde>F1C68jy>8uv0K+Ju z>M1yQa!Y3l2I;Bv6=`lzQ9fodB6%fDtAa_rbok-)VTP#wm0s>l-@(W>zK)!-kfpc< z@+46cl_mk{{i$VIx(JGIzimgSO1{Bl71r>nW(73fd#?+;t^k*pd|lC@h5q}uN__Md zB3w>c0cv$&`fb}7OL=z{64OTM2#<-b?~b&G?16TH&zgnKe=dD9u1L-*XxF$n^u;f* z-a(@OqPb1~N8vFV3sRiyN*dB9MB6z=((%t6VgvyEx(`RBeH%oqso2(LBNbn7ST0s4 zPY9zA2%GHo(iu)fMx*zWoFv))EPCfphUe-v;VjLGkF%wG#XWm-sMpUJZZT=`CdC|u zh-&+OcH-O4p|7>v$;>x@>4|`hH+56aKD9Ts(;z$)N>raa9BNd$GiMBc&#v|;aE~7A z)&k91{2K;??kgY>vFeqWnpB$((Iebq{7B4IFq{12Bpky&cn1|Z1?_W29;Bl!Z zE0e(V%iXsP9UI@qk^e==wUP#EG+l=C_8vEd^cEJLNK?n&lN5aC2?9MV2CH$30Sh%Y zLeA-R>CIU6SUI5M4BLlGSb*95Io;Ce=ebe5WDsqsS~@pJP#<4k87)C6CQwhX|Bf{a z_~{3fFzeLpX@7@f%xKsa64=(58+jpRKV|GcAGZcmFWrSL@ri3vwKXJnepJm|F;xrQe z7RD+^nhZ~wxJ`u)LY-AnNfR3N-mglU3`mgmThoM8>^FN|cF|quX>4lNV})CgZ^mj5 zvkgc}Gh^5Co_zT*f7oW^@a(Ni{(7z7?Kkl@MufdDJUZ`jE9Qj;Awm#)kB#b&mE*Lx z#k2`Agh4j&dT%!*#++Z1f@%@#noZ_t&JmiO%r3)hBAd#JwU=mwlMX=)W~>n}190WcE4BZ# zf&>G>y^FZ8gV{6}w55HRO0@k^iBF)3LmOdYw9*Sbd^lLayAtO4UyfpIw$7yIu>DV( zA;IHukkM6|6n@1myYeZc+ak2aix>X<;{u}t7=65(>zv#Vw3$iNdNU}?8Pi1>M4vaI z`aSH0u1BX)S!A(01GdujkDtXcPL9n;gaMxvb-A*3xLFdgtg$g;fB2YsJ_SE#S8bTuDt_9sQvI zJ$!x9UAT%bi^11%nh8?KwW{1BFF3n?7jl@#&Ge8iQTQ>7%%N{zs0dk(xmW7MfIg-g z&JAEeT!P@J$MS@RT2T6UyK=eEFe`8#-$gh}8ElQl6jS}QU{!*?X^Lv`rEMc4;A`** zjsRE;8X(3+bwz$7-x(h5dXFgQ7(d#t2#n6&;ym5>Ryk62J%O(#W50)Ox7>5KSIW>I z4DVh9_mNodo1hoR|%y8h+UVO~fF`N5UN?7^|UinmB z__jgP^p0WWC_ov@Wnf9u2WDw?jX~WkuIG_$MoT5my|j7za#ju8d-WD zw?~Saag$%$;PX1Ju+5s$;mDLRqOvP0bWUa@KElMUETRq{-YB<7kOEc50LOu%fOZ;I z+`bCQ3h%i)X5*8NmRB#6&Mko~b3Wq#YhCAXS!dM85R_z7nlD7fTIk@Vz;et0wa{o-} zRXC{Kfm#}5l{jPac=Bn(NfImV!q;94tQefnW=Rdk*(DD}s*+pP*Hx<*lRe{}StHFj zfqdWeXqp}qgA@WTa=pfwVqlFUXVuUtw&-2>4O?VVyKe(O`XzV@aGc0A-xcR z3hC%de$EzBp_bGgqX$ z3Ls)5+`I~{Ruv!&*VQndsam*}qDiOTVv_!UzhpntD&;OulT_ zd=!3GPc#aLqa0Q`LX$6MT%J;+CSFu4330Rl15l~T5pT&31mlqqS6A1kuEXtAPs_|4xK z0&PMgQN*eqX;^>fJSyV*Ja(f62uCj)I~`a6DdZYN^4bRpDstox7J};YzyzKT+Tv6K zSZwl}{3lu~8{`ut0FGNSA2sPx&$3Nbm_)^>02o!T3n_H?>rZ|+`@_p}3&`;r0>V0_ zE7-fDh_+}vgh*=+_G`~;UkuRQ_LMFiSA)=4$3#rWhW)S^t)Zd8m~Q9~cK_c8|AQBgS_*U0q+&9MWDHPSAof%j+Dmb7Hzk4M^r3jg!rAFk{ zKUlo9eL3{P5{KN!J-))3;u^|Wcw8K2jDWD1+(j}Wd6ILrXTr-QP`zif2j;W&N`uMu z;vUOZUSP~YhAlwcb365s`esoI^mlVJ5aW4VyuRzqx5BN~q zKxtjHrzotg=-u1x=Zx@S(GvR9$O>DmIFPY>2@|D?cgLtTh#& z&_nKEIa?Ew#F7Q~M82yy#1&ZW6al=wO&_|%XuLIYNQ27CNMg$7l5IUXK*+{?qZysh zhdhD84V3?^%)__e;M(aQfN?^(>H)6aL47agOd{)dUPV#hGQoA>t7gTx5loDqM8*nY^SHcQDGX;i1C@g9vodd5_}y|X7I zTrFK2rYUfa-8%)^D&7z!9>Y#B+gh3CXRo8cp0GXNHdD!mx!d6{OM1Uh`pMB_{m~M{ z@N=Qv^G*av2dKI#SjL<#WUh58=#Ag4!| zKN!1#3hj6fWqp32E~3{-(F7~~MT&Htsd)t-GG%Xg71ncz`w@!e@Vp17!=z_h6vp~S z?R$OX{i~L;-8q;9pc#0Ybu^_9T)+>AXzOG9FU%hj)r_Y-CdPTE%#s%ifr!46);i3D6=+_D?-EmPKYgw>fC)PEZ4l~ z`#a-C-U}4e*4LjtwMh5BDWu^US`THy-@{e9V2=7U#7lqg3JWs=__d-0gMaJ0GS8h< z$`jo==my9C&D*{R)6G(Dc>HBO^h%}?#8x76e_*iF5F@jU*v@O%Bq)k*2c0R}TZA*| z5gisgDuPkItp<>O$!9IP;vp=WT?AA*`n5^AW1w93dNFy5XM91jzsCE%7XGNPiGWzF zdToEiNWr->@~#$?VjLtpO08J`r&g~1UFGlozUK1=i%6r<#Q7#kitM-68=VliC+-;2 z487+E5rWx7O+i-(VKU~9D14tC!(Ykuxa3M+4&1+p^2_68k2x1a=IzMCLBp3ld(-mr?KuS8-3$s3kaiuYX4;x)y zjXsae+k~Qv#sbw}Y%yH*ySaWklDot)(T|sY_Cg50r1XQYxY??AadDt+DFkyEm>pjh z{$y~VjX?RH29>IJ_j|U!C`$+wp$O_sxQsK8>x4xf#EwsClQqq`Wj^ncl>c#n)K@Zi ziiMWHr*|Gw@BbQxz_xLK&Z(4GTssTUZLR+3yX`HRXtv@;JUhGXFvQMovo5YZSpZDp zD67sI356B0N@#Y_*hdnE6f(5xuCv_whLHfSlPZiaD}*^T+n`iZaIuLDD`hLZP0I^_Dp3&D1Z!x%#8vC}%7CT~*%;*QZPxqF5d8uJw0Jwk4|$ zHHRwZE}u(s3ogp>UK3@laRlNR(b2mO%x$Np-*-RP8UQN{X@^wnhVpb;4iM7~N49ps ziFzpYKayBS%CA}~0RKM#z_tl+U2bBau9$V>u~8RWl_MZ~u>Rrdyn=!lh)Qz_r*aX5 zvzomtGu{$NnkNCNt1#8$*9mA;;V-`97Cpu)zlR*`iD>V5Q}U{TbNnafeSGEKh+MF1 zU?6c%+Q$j&4(d%Cw+$PgJg|vQ*Un`-B8gScr}i$kDm(Kj0(?GzN8*_sO+EScx(yHT zF$jQc*DkvgEQvD(hZ3cvq$FGS<5$sP4~92j$iE&7@+dw{d26-RytZE%q8k^F&)0IVV2I4ZzluV$> z6ub68FmxDs-L%m`Ww7NB9RI`GtQIBl(S@ZK3xt24!ZcZO3wcn*6L~9R3c<5_2^D1l z>o%J!b)TVP$@b{Ts~sao}TKt(I`!UKaTg0060A zbu3956nV#WDtR0aAXd)%NSI$wL}5HJEM_`^lRLj3*0O@p$@_}jXN9pQV{POe5?<{1 z`%kuO|AN{XLu%M0wWyI^dUf0(i#`tE{(N(qtOjEQLWl-ys@gP}rixo;*wb4aRA=|j zJ$oR7^Y9->juq*dLWwH52&6MCCEs8CPV@_BSuYGRAuT2p$(6y@28nPx`0-9K$$vyg z@ZS8uKBSBaN*3Z4kL&2HF(bRC^*sEndsWcS*KiULu~`$50Q`ld93&tN%(3<_$KIi6 zO1FmHgDM~@P# z(oLoXIBR+BAypT12r4Vu!K8(+m4>y26QWxq0;5sP#B31yx2a$kgA?Tq_o|HJYcSz8 zTj%)nw2+9UHCdr%W;GzRAlXE9dh3WG;Qq{)IjQqM@yyk2dVTDDt{gHn%$C+)WNnKn zQQ&^$_zLhI6b`jWC=8qn#lWi_k#zv1>s^%w57(-(D?Ez2&T@;P+-c!AKA9*9f|YIw z2r0&zQozM=u8N@LD)1LHVZ8^WFstM!Lk(*5e}~o*uM$#MNLAGNO%$)^AO&PhMV}A* zT^^2oe3&&wb=5%bCAyAd$3rUm-z2=v8ICJ&*iHXyjc$!VhSAISAs2&jw34r_=o=0f z*)Tc`er@FJT|9K9h^7bI=0bD#gPr+4_xGXNHz@J$kEK1>C%R$%su)sA&yOxGA!-FF zYl_%RYffEyW4-(jjP>3*S$#{aP%0!9*aL zGl9nlVexmSDO`8S7igr9bsf!5&g%X9QdtFrVjN?|b-slkS5Y~mFsY@MO!X66&p{gG z!NcUQQTnrPA8+K@o6YUJ%9zs7Zgk2)Ms+Xa$*r1rc~-~%u9PL03acTKnzQS6q^LI4 znaridb!?db!5(jj>JXMnQ&l?ws68?F?$=x<=PtAVx{SZ}G5ar}$T-(=g7}BKs=o@t z8Q>GZhx43Dn;+(0G|Gp%K_~oZ%yhYy_7x)SNg=)uB?zNr9rBATU$KUkmzW~T!W3(` zOLzR}l)oLjVezCkT+ufSfI^VUyLkgrjqQeEOdit|fFaftUTBN=5^^AxfUFw zt8Gq67Plt=_}&SNn2yviYV^jB{pjEdKNc)__B-mI(9q0*2kDUxedxax@-mG;HMA?i zlNG&%2BJ<%P(`6%C45j!M%m0g9~#ELN%nBezi;WDA*|tMJ?s)&XfWk6N1k1Mi{@KssqqOyq=0*aZ3WHd zl@*_D_?hBl&}5cY3i#9P#UJd|`IQ120{IBH-EoZ97zm4S6~y%n9OdKgO18`ErdR_Z zAMNlRg)#Yd3?Y08?Z8{CgmMne(J05CYb;5HleL%EblTf0JpKwH5gaJvYJcda!HxBPV=jq1_xWK;dIVlkW;u-2D@?G- zftVEl;f5Rjqc|vxrgbXhIf&awCr?ZT|EWW9ARMR#7wxeEp-$bBlH|kK?vZ6~S2lq_|@`xX+Cc?}B zxxwkx0k@jb@%UyxV zOb5=XB1hHY`Kc<1Tms#J^l3~K7lpc38Y&UyPj*5ygC;z>Z=>6_S-`|`ALnsmoEBEUoFs(7`Bd-w{K)qd_>gU&0Dw;*T_-c%#w0>jHD-X$i9qUo zc6&;C1egafjYY$$$L15DUYg!~3<^LmA+DgJl={%TcqvX!0^{t4FIW!#lkASU3+G_J z4(6Q54W?WnWqS>kAys*CkE@-k<9q_kKSTwd6$~a9BujdsGa+5+E*^!$;%Xsh9yV3r zR`3=%d>K1?s-gD!o%?zmM`U8e20F=5SaAmnRYf8& z<*rkkn2~J*Rc^6BzJp z#vHO z19V?F8{_Rdc=G)A;Ys-hm3^KljvMQubgJ4*2qFlM;;Wq@9(i2P6kb;s`ym~r+4u^6 zD(dLS^V4c?jC=(2juCWhKD@A)Gvcvll>!uM`p{8G`yc{ojmwa3yc>%hbOrqjwI*Rk zlw8^2zBA<|2sYI#usgK2%n>NzaY?=Wnfu6sSllMrfNHNZ1rpDrAsJ=Y*^9nUW{7Li zT@Z>u;o6(|41Cg?wx_xIi*T3yT-mVLJ=+8pS*T?E{`5I}Ng)3prv_lZ_T^3pUhxhA zPaEjmvjqzFav2S@4TeoMwj>|)`U0ewiU+-iWsvdU(9&_x@0xECd5&@ zEFzL|(5y35#H)$KN7eV-b@@XLdAykVFAQl3X_w19Pc*kw(zK4+0Wq+De|PH4BkkkX zylm1yCZ~k~0q!cMYNg`|;HOXoquOuLh_$1k_ALyaL7c>Lu?NK=2I<{DX~I3IEzi=; z$h2_%md6PD*(iz!2J$9}V*Dv& zrn4s^z|&V85o*Eo$BV;>(0lvxh_Zb|tz$8m_0LrMt#v|fdne<6n*9z(?LH42cLc<9 z303mjXGl@cujU(j9!=)gf8F~3;sVwLJUAK7=eDsf_Br+U*Hp6&j9a3RZL)@sHfSH& zE~(x}SH#X$9#4Uty}xo6+%&EJ3h|5k9Qz}6i=^vSy8cXC(FIqPt;#iGNl-1#avIwkp3BLr=wnBpG;_x-3Lw(P|nnSZ>u zR>rOgCHu0`j3hT>_VmXxak$|AkvIHn82{3cnjWkyJLCOIl1-V$$MW2Vp?lH;B#P&=*m*%{kATazc8hEs(EifphD#2lv@KcR)`+x9S zh$GMgc&Bo+o7GsJ*5!-T#}CH5SODn%Mky$(_Y7&zH;^TRj5D5k{$_lp`;7M`Q4Idr zcBt*=a0c~R=IWeT^z9y>t6l2uEcS%4NiY7Hjc4c1J;jn)%V%?t(l3{XWr6%IO$h&Q zK}4i@n65MHp)`}YSxYP&mo*OwNXCdymR5+8^INLw4>|#!JZNTXF+Jg^9Nt$WyO0b| zfjc`Gs;b1d&nzMc0ArY7=}ey+iMZ!&Oxt*v4jesj2 zKb+}_>(+eEXiLJAf8M83whf0(mIwn)PFR*|*ChqMM7wzfTwT zJPpxR&hP}3x9ZWWY}s*MKuQ#>nzT7FB2hgWr88LUhA_VV*WunOc1-*KVj&hIV5*|s zzuo#)%`_7uk=@nCoZ~urak25CKDQrW-F&KPhS1n&?Bl*~LQ2OPy2wK+Lc<=L|Z9%Px<)M+wp;MOd zXrW4KzX^Nnz5v5NcEe?sV+iWqvXzZmR-EK7tn+=)!%oSswZ&I|gv+LK{RJ^sn~0v^ zM25aPvFA~V$;KM!7E_oB5;=AlAAJ%iYa_m;)#o~`7!-cdEN!WWU~!Fv$N?`PW_=It zLV;JpOEDCMUDk6yvwXg7I^#NDbMy%E6{AKi26g?ts$2i%7~OHB{$$ znYp+&VAiU#qsTVgC|Qdp&V()>*F5NpNPoxEaiHMsb=w7Hy7Z9`(p(}NdgnRUILe7K z{I>g#m%&b~TIKAh5N%S}lzb!+lER@jged*f3-3q}*-VO_)~(cfLZ2lw{apoc%RqvU z3=6*9&|Kfsp~Y-I@!CNE*Fj8=2T5fTOQD0Br?9Bj{a&KMf80wJJW9B(1 z8Zbhm2fEqf#e<%Mi4iw5t7l~9=B@LA?*atiaYsa-xr-x4hgRgTBsRdd0QPS9vSM{RYjtp4wCTII0@ur@t*f1lGxSWK6r6daCKKph_dHJ_PWp}9?7q} z0^v;N+~MzfHkFdxLXqm;DxnE>v&=s{roCVKc?X1#*nY`)eZ`yKk3cthoMslvv0|zH z)W|-x2wU&?F}G2kt{OklW9ILcj5RE+Eggp~U05CBlQr~z*v*sC$d-Vc1&!AX|I z40V;ZQ;e@z4lNt+)kBsjp$qVR>FE&j)Ph!CU(`KFo)+)Zk93bD$3fbrVCuXG^GbO{ z2Z>1MGDXYha4z|-h59#-h>2vIqh2+`UF3%&Lzp$!=ao-SU1)G_+2S8-p$NdDP+Jnc zhI6PzFT&t0oa4m<2$nu01c`pJ>n+=3oDUxP#=SOAbsbZn4y~Qkl)y7T_C}8Bnd_FL zpVY&_f$S)rVA@)<(Ax~w`ci}W{;3K4-6{-Dr;{#RPM<>9Kwj5j*A3MoRkk{&(siT zymgIWcsv(I=*!o6+;fgDHPPt%AeFJ-)^}t*bWaGixM{^08Otd zR?*ZuGcv)ObparSoe{)`&{Hcw*Q`Lq8RkX;jP&e}0g9GnD&pdWr!%ct#+4=WRm$-0 z@~z8-Ep_37Jzw6YRO)1uf68z<`qNgTys*sX-WrwLs4|98Jy>)0_5(}s#jT=!kOP>>?4>xxQH z&+}f#vtAKGS&hxZ3x@rd;Q*s-sp`vKP*f7YsmBLWq?$Lrbt}qc%{1Mqggcw$MM(>33;_q9jTzFbk6rB4;@~=le)RlQ7MY!e^ z_1elKlz979QRAKP2VQ=oNvMyh1%?MZgwf~qVu>OGCSP-n!_wa72?C|$2m3RHp|*;o zz~mFuMjk{yy8rJ^WwLXt0vIb82+_>P8h_$Wi`piU;r%*aAn2c~!^Jtk#8E6CIIN0S zVf@VDm>JY9<$yX#JSr!q2u$VEvoy4+^-#r zHuN-+bc9W(Yg5>-s*XsBsZ@7uL`V*aXd|3ilW4qcAjX(>r}o6WIUW|!8AN+qUqANE zq-)dJdhlWLU)yBi#t6+*rW{F%lfya}3v}Z_Sf{iufNIVp(iqcSXJ<800nSzxJP!Oh z&@@%UzIAHWmWC&@ya?8-@LcIuMfzKA%GR$pGE^>Iop?4&Z@-7chC^<|q`k*tXZV87 z_p-|5LNMf7c`0JR@1$kfPh*MLP!VVsMvr>DWYYiy&hXWvcmQKV@k^?>FP# zsi_jo_Ykml&2}Ft1PEiHFmwAqj?7g=lhPUgkaLKLrM*zt9er<+nCusCn*auV3{Xc` zMzHf{Nm6^HtM_H4?Xq|Ia2;SZz|Eh0Whl%8UecBZYXqx^&OCY zUjoVlF4cT&{@`umz4y@NQ0kVk@fF`HtZn@m#P7LuHZ~9~UWG--7m6(P1-26HBi$8*JMy!Zoji(NRaDV_=a&>AYb(zVJvKRxNm?Nqt zFja00*(!%{-xF0&ICPB{ zLWJh+@zn3Bj+3pfG4>)+!g)}7{FgHERS{?Q_!ZK(R1zvQpdW2n@m zG(pNKe5WpvD7I(EJR6Cgy!_6=g^p=)HU=nH_9Os<7hs^Ovc;ctt=++wJNXRf?SC zV*uP#`>iB8x+m+t+V3sLKRjY12ItoHJeNMAEo#dFy6)S3=~D}Lwqd>e{h;5(VY8UY zA3cz5li<2321BPY@j0_9Ubfk^xbP*n>$+fFjt%^9g-dbfl<=u?kqNikr$>d!&ht=8 zgf;$2?uqDLY8H`tR)D_wZ?Vl}5~guP^TE4^_O}q_?Df~`jM>hfn()h5nA7SL>)Hl$ z%ZqGjVp|YfV40Xge;J7j3FRBA5phD26};od!&4FwLmM>xrkER4)!e}hoQB5??9Kht z=CDjoSQ(J^ZA-wP4*ai-Q*<%4!&8$TuQVzFA1qVW-jg<>Kd7DEjNQQl{^&x+?Lvsa?t;QDwuLDT*jgW8ke{TI?HUq$>GHS1o zKhD&QfOreTN(kPLJ1xMV%i2-9{dr|b^tnp;>m9#3gC?AD&@4MkYU^4-8NaY%iK@H) zG`{0bXRWFz?8O%~nRaD)@(nFic794SfMUzancmjDz-D@AFoVwR7c`*Mex$Rof`5H8 z4qWo)?3}5cxxiN_U5SE5SaZn@bk+-=v8@K2;Y~%JIbpvTHgE;4QitRv>L^oYoNgN( zfKcot^rpUyzkXJ>fWnL<9STJt-v|nHV0@xVkobIR9~8Y#BOOl{Uv1#{5BJVVywJq* z@&qB{#J2!k=wsJ{Z&WsG)7lHTY)tBFr0u#@uSB$VtKMSSR6|;pfuC z`|?c=inpmJW1&>&W+rB;+O3yn$L>POTs-{IR6nJUM1CF+>SFbodhKo?@z9w%>o_dD zKD&^{UL6=i7$q=*_*BB!iQ)C3M?VC%%D^s>e((f~_$`#|zwSvZCU(=6|A=$mvq#4V z9x2$V7`P|mUrAnh+~LI5?D)FL;}O13PG@p~CPf4cWv&q=)Y}qG*lyUFa;N>-$L$a+eg^^)_LDJSj%5ZIWH?bgh z=XesPu=PGa*UtH-u-wlC(ec#;Z#tBPo|n5VL?R&ERX5sZHD?*xv$xJpv~1)IxjO+L zKG4R;(wxlwuK#r@xcteJqP-!O%kMc3_dFzoY4`=M3cI+S=w!%jd=5k4cG6LPFvf)Q z5#(M$g9*D;{i*rVsa!@xGy90=ny8XoRGeUKNd6j9^b}954x*yVljbW4Cp4x>}(QHGc?e9siF|JgcF64z?-WyX7jL3tg~%UAX;AAgdN zxd*~L-*FwXo24*(L}pdhIyYzpgVXq%J4VIO1;a#K0^yu{GU+2RXe-g;XNMZ)yv&R0 zi=C%nG<0KS5P@5B5j6y6pt_NF`|P!o|Ajf3d*)W6Z}MZ-YCU#aCh2S5KqAZovQJ{)}#3GvcO91ODWw9X6m6hRA#Rc z^n@JNV`&yK;A{KrNJ1{wcW2cA?AI;v_?r*{$W&a#m$L!E4gj)@>rI>$3`X}j83nhs z4Ym7OJy+?E=MUj>FoY*q(!ra)6<^FE;jnNLmp1nID>wFQdKB{oNh~cvHPGEuO>uOy z7G}H_`S5@|mFL)%_1{At`oYF|99}}J>*s|2%NlnRFx~@qRClXNY1*v<1~Mxuq39lD zo@uCV_fE|A_nmme2dK=uL_XKrm%4HliK}YJ3YgVPy;oQ!-c-5Crg*1??EzCg{}E!A_r6Bx12;CLR-l(CT3xm}~}GlO!TD@O(b($40q-*lqj`ZEuVBI=CT=(-tCC zVn)VfmvXKWOLj=a_6035>rN7)Z0^oWVqGV6eI8u+nh|aetj#ySIzParoL>$uU1u9V zl+5!l@|SVnr~l2QI!8to4iV< zufl@oDZ%2@)f_yT9s2?n;Rj!UTQ^EaaRkrj5J_}vt;%*WW9R9D;t>8^gw<$-df{h` zO1Jrw97)$xr?@nF;}!v-4#;8vgG66wHO>;0JkD#sWYuC2H7|LQ)MJ}4i_#-JJ-dVNykQYSwN zCV*Ar1FK*eMw2?Yd42$Av|Zzr1%^=|(o`2k3{2gSwuWtpqf#M0oK z5stL|vg#2Mc`!^boJwDI#9gP&pw_U&<4K19&IokPSO{|*2<;yojg!J+^F7@&itFPt zlIu9G*N^6Ht>ZgKFZ^K$byixX%LA-FOOuP1I0Os?7RCaKyQLSr-*YvJoZPpZ(`Mg0 z!}S}Q`4wA~SmD80{wrBBmW7G8+S=_qNy;fd(Wy&WNivsykq08YG#=-3elf9to0p`FUt(FFCmnzc@z<()5+GU0mCGiz4|tFUV|k zcA9|O)07^Y)+Cua3@CqufUp)}r-o~y!_7dfblK4DR`?s+QGSO?FsvRU>E~OHyQ?F7 zkuk=US&{Ld;~OV=EK$?5wr@Ibyel6M%t|?(0G;+6lcKHMw^CmTqM>=Vn}>0-4jxO8 z0W?||2rdg|HFX`0&zb&81rfvf>z;Vx_ClvvyU9>-!qhyUwDmF&jP(=#BXLov2uQ7g zdNbsF%a`;);I4CM$xY=NuSYHbU4cGc=^dUK+*|q5&$4mXa?G6XvORq`Os}iuLCUhA z<>x|4_g=p`u{Ro@d8Zz(nVGIK{cz-Tg|gh6@^C{fZdKsWs?&}t>b~u=&MX4G-F8Yi z4~ec@v?E&T%H_R~^J^&->RHj)`_X}4cL%r#;BaQ!857eAt|s~{kl9|;f1HF2!B{mO zy{KktKbT6SwM7y>pK#d>Y5qIQSUn|7oFrTOI0Ww2#$tfZN?B~E zpKyVnudD{I zB4{bbvMr_ejmoYv$;C89kRFPcy0Tp%Jd%nkOJPSqN|UFcL623d;b*OoNNRd1W?p`< zt`NrTMWW=}#S7oEjkk73jwKG{F81X?+*X;>$QaPc2z*OBAqBfd8{}n49KwDpOmn-13qZ4{@^9Z9v zf|D$3a=1lrmMW6!r zW@&20Q&rpx;pCjf`EW;%+pMV2t|#9{CtfJ!#|G2(Mka0}cSs z4Mlf+78>czwfQb;zSL)GjsnwKoSE4y-LiF2_WV~fy?&2n3wRTqN6Q3gU8g_0`Mu0@ zLw4YaFQv+?JWJAHRU%O=v4u_wZGc_KnvfK94{z-M-2sf}`(73>Xnr$6eLxA6r=a(E zByLw@M4-8WXs?G{LUtxjR9a)^4wSv^nu}|Wz&&B3rAl@h;tlLY_Nfc%w&^wy!GG>N z>rcE1x6)F$D4>$t^Fe>6yXYG~twhw1(H+)27>Q0BL&m|7L`T{G3wR8CWU53meOMSt zwOga(H)qUh@m;yHsVaY}B%YyuE2LDkcj!jkbH$iZi=zFptNtKbm)M+YTRWO)Tm3v0qDxj-O5c6g;A^jKtridtoc6N87||y-^P=?dfD!ggppW{N^DR&o4U*UKP7L;fsrsMZ}3}vI%iC9Sk{xGe6H^ArI zMH#M5zp78f@P77re-+0l2Hn>xb}ifj$xk<=FgCu70iDvnYP1&@)M;>HcH@_ zXgu9;Lnje17e+K7M^%3B`K1m5d|PIm^|a0c8o+#8Rd`>aFD-qWgrX?8WVZJXoQ4~c zq+Q3m4LGXRqqK4gWrll>!a{8p3SXqL^W%p20Jt@URGW`Ga7sV=&}w`5n8^2b!E7`< z4_n2TJe%TNbd`Vi(M&OLl2p&*$Cq~)yOthH2MJemWK{6i$IoLvOfebC8yp((YEJFL zKOJ=}#8(X)tRy$uhByp*3zY5)^?WcgaZOQMwEO97ULcYSDw<-Ut`l zjoFiZ@^!ufD^imd>M4pd#W*nhM_54ZF^e>+5UV?DoYrTHmXAhex9E2SGQ+Cas~xDm ztEWAnI#P-;Ypfa7zrL5NQ>rb2gjP)9ndng8WD)vdgWNrk z%rfGDyZh$_I8KtV+neXGZ|~o)?IA?Fkoa|`_2_2mBxCY>CsP^!VOA?x@Aqb$e;bV_ z-9QmEwWU@YLa5VwshqAK$FA?tM{#{t}CwVL`S!# zCU|bYqAb~z>z7i0zyj+Tw-8|Od*)`torKRUU%$Wlll^ z$sdX*tUg@*J$Zf`Z$(jShu7ssVCM?+!^F}jwbFOrURya&wwgGk|CiBn11vD8(Q>Ls zx&66mg(TH>MB3?)21oOYm~dqV8R)mv*EYG*(%4P=UV`5%wgGeAmLL!v^i*7+TPg#1 zJh#yGjy{CCVy=fig3;)QF<4XCS*_KenRNail#RE|V~pQPI_}*xNQhIsQZI(DbG=(Aq|FDP7M<;bUl4&&6oyhh}a5~g_F1L1M{&8pg$1a zi4&uhuH#C^YTyn;LvHSgC0oLA&#zAs_3k9qJ*L@qmADbF6Eo!Ha{` zBBU#T)R)Vh&msb)AI&4r2AZ&PJ>(;7UF8~48q6Pyetx;=WeDeX?c%U*Wm z$N#8^Bg?h0ZEneD+IoKh*2&8>vIV<-#~z{YRvD-qs0j+A%R+%!`Q|GZHxBw5I2`>G$Gd#b1|loZ4thiy z2Eqe6k1>g$pEss<_%cTojgn)n-vgcOrr3D+jB>W8S*4;DC~v4_n2qK^+JHGJM)3vk zEwO+@hyl449dgI6nhyqRs-579pVS>zm$K7I>9VgqWBQGM-*MKP=+15}T3BxJII910e2q0iW8%svIGee-#R$w0Cu9T^9?N8Rlm>F5#C5TmeXYN zcoUlC`u@8#WDOZfT;L2`re@|;Bo%K)utlcITh=hE^Zg^5AL^kqr* zrUyyT?@1+9O)5Pgd(~krX@N8f>n$hg8Yv)JTZ9EeH(}C$h-aA)r>yD^fo=U&|3P?x zYZ`hP=eLR}w~o<&^47}WzewF`+?F(w)59eZNbhw-S3B?LhS$I<-4}9!7k{eGiIz7( zZ?!)5S?$4;)b4l8A@CT<6IJpz)PjRPpgQZQ(vnJ(`nqF~Y)|!X%8`xVf(F^7)HQwe zhh2q<#5+p(wP_@%$<~o0T3mq3!;zT&f(PYYRZ`=NPqCnsjQs}$Oc=FEs`0w&$EsG9 z$a7@zK*1pMgP^?|h1z=tw3{m?!`dKWb^91oz6hCn9PCkmb3k5{T9hIo#IOx`@RzgU z^*oNh<&3V#InyK2xhf}uu^24q>f}Dw-{2R>J(|q4zOZ|l-_f;Ysj;J)l@!OlkV>f6 zu+R`8VY`enp_{zTKr$w9C3zzMYEa<{rUi!D=KlG=Li?9Wm1lvj>I2-<#5y@R70 z06%{!gl!Btwe_1?>@Rp?DwfTP)@U9fijuqL3#-y905-(1^(N*F3qi+dqC*I={3sj1 zHx`dN#l4Q8&GaTWBcHp2;W9KQ;?>7d?oNpf3z*sTXlLkH6CR#gC;Um=(lOp`Jsy}qh(}abb*x-HL?w#qeJKI9mv1ko zI~uC)ma74w9M`E`IJZpkct0KIasv`jnsVRC9Sef*2QUhhOHNKJ0K@TdhHVG-YM7f8 zAp<8s;F1AVL%&FFO0PSZY0n^k*2Jh?KS1kcfsMl!y~QUyrpXiQpq6DADin^-1kkh; zbv70M05`@}v9gt4H7rAO9qYSi_ex2seH(!nMc&`2T*V%PrPC}jpIqyV2=K|W`5=W) z{XV)tPmGGqWP32V;0p#wIl&_+MOs1)THj;VIX|Tak`Fc|eU^V9$x*qO^CVJOFl$`}F)J zB#k(t1A=H1M8)3^w(3H|b-vZ!A!9C`T`4Acapku=&!XL4F@mBTkB~#cc&H_Yq1>1y z@`zQ-#-KG{!1aZB+CnN-b?M(6h)#t3f_KdL)P4wScBS6S1!)9#w>qLb04ych9z% zktD>z=z#qm4aaXGmEN0=0+ldZ5?f&IdKk4zr=1fCvv^EEZYloex7uK)^XkGhnn~7$ znOkWbQOevWS|XqQ+!TMu8#=TVj>P_`uUrh#P^Q{DLpkIty;S8$nEIFz6vy{ry)9wW z)^fzqv!PHxcte2B)KO$i*r%mrP%OJYc|>;%C!b$M_C#+Rl-+S~XWZu^+LpKxJAGT^ zpL0#dUut$Lf6dCUCYR1h-K1B6iv+L1Yi?}ZzC^g_qT6~5{6Dfh1O&L1uf|v!=42|2 z!?C5+1Lq{|G*BC!^5kQ^)XM#reKCbJ=V23{AXX?C2?TVB6^nOv-*8-bz&(f{4IwAU z)^Wg*LA{;ssI?=t2V)(@4#*i~ui&6mJPdiO8P~J80^8?z=4z zX1I&d9>bh|4@3mHUBz$sJgbpCR3OrP(+@Ry9OBdP=}c5yazba$K;fr(@U1iZGS5kc zl1!>1GyR*p$TwUKE|2qzbr_U8klIN>5m{9ris!Ook1S4lI#cIuYyZu zl(gWd`jJ{idM|!uYCS%M%&9Upn2?1UB#CF~C7&V0DHGaS04fn>T^XjxvRHpmmo!*EAi((lL5QC5N(%30#XcdaV!q059iw$)1zA0CAfj?T-Y#i!FI4q)R@(Sn;?n``?_}lXDgH44&Jx2k_p$pq_^1Q%NcKM}0IAt4J%e-x zNROfd`jF@)g7?whB-gqsZoP{-ABUKobN^;#>7h<7Y$yhK*B$&EVv*7AU;;5iZFDAo zZEGj^_zPh2y;xhUGYmQ-94!<|DJpQQfh2vNI>>@s;ej|JCYgxiy_N8m$vn)@&cc-i z$;@f&wM$D~d%D&|~xTryP7?l0^TkDk#^R`@D`c zq3gA`PG*kmbi<=RV7{{l=d&Ux569H<($f=1?l#zU&V{(-{%${rca_gB1t(Ru}&Es(c9;|&@Z9G}%aicG1y&dc% zm!T$ja9pQvy)b}D=BbvYlD%>MC;wp-_(bjdRzySXf0_Y|e5x?hbDYQ!1@q!?!oGZY z1zEHw>%_`83_tZ72csFVKtE}_Nh6GD-nG;PooOmLagW_n81?y`#O74Y$5;P`k5;{B zj6Exhmdfz2539RZZZ>tZ@A`de$6BTwF%GT2g_G}vHd$1DWG<;3jJ5Kp=F~UVr(Y=Y z9`b0I85%fVY>g;2$&}b~m-kL(sSR8c(aZ-JX!0$l#t(O%J)rmND>$dwR=U85H##$; zC_2^pExV*I9_U`&YotKl(QJkJMbo^@Zx)=%HSy;WQ~v%JE?c z_#CGiFj(rLQUp@>7WaURexV7#GH~NC8rDIcS~|ztGTbWZ(V#Xl?uck}T0^%IwL8@n zcSrF|0EIe=xxEz@WQcI$NdI1{RlBl(mq}Squ+0iq?dip;g8-pTOzjpEUd5k=Rvpi? zN!60N4~TSKH+UNO@S)TI@3yCAe@xkfTw)9Ppx9*@r2YBx5p%`sEek{kXs@Q&Fb^6b zX45yo8cK1&U6W`IM@NFF9PZ;r)T^zL+XYdRMKL@_%|b#0F~caQDc(G9=aOW=&w3QL zJ_ufD&KQ#d;~au5$V**TC$+n5hb79>429kjk7>QuH2Tv-5(P%HF+RA0QiLjhQMHY+ zm1(s<%8_#rz>BU-za2sXZAB&U8+Z>&c3rKtN}@$g6IhAQ>K$&b!AcWg^<#U6DR9yX z$^k-h!zDtMBQ)Ulb@tPj{>h7X*IxXJk6~qIt(R9)a=c>H)Jmi%PnrFMtZ_Y|aHCiM zKFm=v_Mkuan~nhd?|-de9$+_9#1j z6BvrKpJNfl+e(m_LLl)d9VOBl)Z+^#s`Ih$GV0?do-K$uoJW^%4TPrMn8hm3!?na8 zvDT$D3|-CBg@0nmeS(EKlfYmPWcDYMiWG-S#i{#~mevw+{!#4*cR0p$vlv-xBKv$_ zXn^@^lo|)Z=L@4D_L0=Y4*cZZ(0`K3)VW|S?WS9<+>>;Td4hQJvVI59H)+vRa|lGL z-_$QmGTZ^^E!?ppq-w28ejD=^&2r)`UvG%b6$mYea?KK~M3LRb97HAtV_*lRBM5~zZudOjL+2u)V!*mmSu!L(0Ihb{VaxsRK%$hp&&u$wM8cLDMV3@7p&b z7f1g_iBedvW%+1=4Alg8uHmy~r%YUtH&9097-H0Mi`pQd|FbOWo*Q~g=2qZ`0Vr)K zs27yG#*Yyn;RE&)S8HEcP_$j%z*sLl``EV#cGB-WlJ+B)&e zOYkEYgr~qjmPNkYl|quE!ocOj1&qlBM*lWgAK~Gsn0FrYp$}^yM@SEFi@zO`mi|-m zT9b45cMrM;LX)x1(aPkz3b5PC=yfum+ABF4x+?)-OgKooccVn;3g8L8g{i6V-; z#@bpjqHu#qy>_s&#_krhDrD@ zbK{IDAbnJ1d@%eHQ&+gm(1W=-Y|{}eFSYNH5~8_nKolUQ zNnFZSqRiajdXo#Z@hyVZ5db|`FZu8c81n5F6U{?38qH8Z0*&FZBSNbMT0bVbss_6D zEKd05P5Ra_se=BZCDswCT=WU7LRpFY)kA4h^tEz*c|k2rdTNFkY|#kazunegyPsP% z#)>%&;KVG6%VS^I9$P5g9_~9S>2~S0wPxx~^R#593E|P@AMdg$HvJ2N@OZ!Ht*w;* zR{g?vfE)tgh)SK`ac`VWT{rIq_@+$oPDvjO7>K>MNt74nOx zq@mP~X7-BZ+IZ@#dZV9-mg70~1mJlS>6Mt=jCVe~xb`9?-c&|*5>2v;>}`i`KksBi zIiEWv1KtVwD?*ylG+cC|r9L~~b#Z+NJ&5FprDpW`i)(Q@Z}P=QsQn`@0Nf_a0TnN# zPh+z}hD(+xJ3|~XO5DwrEw#!;Q4i^7{sgsi2QvxZWxuH9Ai`SL7ezK0Ez2T-K1zKS z@W-LqA=$T$B4%b8E_7*80(wF4py8e%S~^JtutC1(=-Bs-)U{ySr`&|X{JGs#umuEMD!5FJ=^nfVZFMHRU{C~Ix!_LL z4k(uV^4{cc!o*SE1wCS%Ee2=Ucu%dLVPRDZYP~~$C9&=;R`*}B;+C|Hm!Ob~Su|3yPDu#~N`GG3ta|d`5nfJSY zO9@>}PsbyciI5D(^wpWYgZJ29?|){HH$=vIc)Wu6x*Ri-JLLfd9(I@Pxq7I(GSxIrXRSw5!8{7$%fLfvRS^S& zYYbJtUw7w*K0P-d#v##NY1RoF~@`t2?basMuZDyzm zL|(be0?owM4wG?Gl~~qI&pKZ!qj}n(j593HOj$>7wl?SIHPnXc#3`JF-Bm63Jc;7! zMEqhaHBbsnK%*1d3C947bum2la=S%5$cniwhA5+1r*c1)3kDIIt^({o9+a{9+c5Dw zMContc&}We9SS)J1SMnY#VY|J7#1kCaQ%w3`0lcW`&LjYS?JU{bWL`6l*w&20Z?{o25@&CFz=u9buh6n?>ssMJQV<-U{5TulS61B<6*? zeld@H@&KoKf*Tu>=2-H9*Q5R9Z^tIrRBZh2luhOV&AR~Xz`5?aWO)h`hBp`NgyndL zY`oT9QB~W-o6^M1QK_Q+jx!Ygn&-h^)SKP&amQA>cCb2mUEYA;sTbYcW)QZRIWC3B z_8*+0XeI?f8LdqEMzQZk>ShkZ8V*k|OSm`~$W}glm9hMH5Rj|7B5md5B<%h5fd$?u zIHXm_py7pFsgdTHqLNrA*TA3Lq);z%Xy;0fre2yF@dz0)S97Ay~9`Qxs-7 zhCGBERCxGdgYskjkO*Ici>&Xeu#vN-*SA zBA)F-$*(Wd$k~oGMrn|eX78A&ISn}bIX(zSdkA3dBspRni`eAAjpp9`IA{6-j4ru8 zIS@bg1m6?&6*}tkx74f&1c}9h-DBvh+@+`Qe1m)0@dQ5<$L>qNsc0+S&ZWmS7BgN# zzyP|)AS(S>Eo!hlMy_j#h;=Q*QeE{#l+%#(B}yBjU5LN(a$iWPYn2vYJ_XNt=oxty zuIlUPV!-&L;{t2g?R#e$VpdAfBjY#MxX6z=wW)$;HAP2ng-q$CR|YWF?nb*VkcO>q z$&j7YWfRpMbz#;2flQ5mDZan;Em#Jlz_F#M)Ubq&9JvP14E2h^7X}j?=(`8|&1MV7 ziR7lTY%e3j$-J#Uq*du(E}38C@{<9>FGd^}Cl$ITW=$-kcig#M)~7=zET_U#02eqY z1hgsfc)7D>*$a`y0HU1p_sYIfPXW-jLCND?n`~-OzzBw1hS~w$1}5EtgEpOv)(m~E zBkdRtE2|}Q#z6zS`KAkCk~6mf!OzMiyeyh4|Jhy{Iky43R5!B1v?*xYv$9ijGB+2) zL6p{wix}$7^vOLJY(+Kp;1^-2tjg?vPz)xsqrT+b{;RYGDYjQ?NUJQgUEP`JOH*oo z+{m#xlOS?~6G)8t1&8A$1o*Bbbb(Gfu`GXZI)5>ox8;$?UxsISXK;-X6 zr%NpK5fK<0MoYxzAQ3+OL5VH;2A$2sosf)v8Jb2r5eb7%t^D3U@{5O;Y4+QSt?X-aGr>BMOb0;-#;8n zVU=pZ8v?n={1ak|`1RK=^wO5GT|9gJGl^0Bu(w{VpP@rx*O5WGnjVj~gk_WgN~?xf zH279)cL==1%CA@5Wo1VuZ{_nFEWOhxi4KGhNM|JccT#}^rLgGHF_m;W`p9yjako67 zQ_v3`xFk#r-R**|w~7BNP&PJ|S25HoQ9n3m=Fgg;Q~4!xOZqY3Oe`FnNc)vhCFm0Y zFS84oj8%1@z`5*$2h_g!AI-5CCDqe_H=N=pUH12_?Y|J%Z|IkQpWjyx&LO&vpU`al z^)RA-9ttt;6cRzB6|ZN6zJGW$tef8-YKvW~1yl#s7!vy~+Q)cyxswRUX+c3Hjx7PPy@e~1c zZ|nGueYlZk)gmo9bFPhA(e=x5bCCrI83rHWn-|e8o4Xmr`+C z9|7CzpZ#-Q@`g(3J45KNGKz1Zyg#fpi8VbMK;a+Zbj#T z+741)WPM{4abZ~)UIXOn+E|wc$I}mk<9HBUQ%m2iHr4X2+@ekR+?)M$^M#VlW?KWU z^D?NfRILYyCmy^b(@A@))ap>0aqX&}BW=RN5HkMw zjtSsuI}bb`u`utMw|9Yp6@iL;q*tqRzkZij>!R3}R&~ZkhUkSQUD0`T$~D$jCChZ_ z{$8mSd;Mmj#TMO@JhR`mB_?Nc0f{48mjeq(0Dcv|k_i;AHYSi2N?W|>GTfrmf%H7F zdGQi+%$MTE^3qN_c&l0ITSvAh()B$D72!9yX1|a`k;1CaRM7t)XL4RQh05BXhKQQ3@moLCU+$QiazMa zyS95J7*TzV9)#x#*4h<{W}P|{upLM*+yWX5K4jhI{IrVjRW)!KRzrGaoM{~*l$jD} z&dJVsFED}Mjz|`jm3|@ zSqt4XWsXNmL+sB^J9?M7_DW8(gz`?1RU6k_8AnQ@|6Eb=5egWcMx4{l_$0$n=k5%q z7l9~Lq4xQXWc1JK9hY;G&iv2KQoKgQWmL2&*h>u$1?>m;!5j2m@0v(|9TmG07f?Bb z({W$*o>~3XtxGU96%5#~YdHc16dYJ=Q47KEk z&8hnjEtZ7T`Fp%0XRSciL+%zaU?+N*s*DKuM~>On>(1Er3k0Pt5(}_!;7QG16UrC+ zp}DKqQ=!%&8CT_JVw9vs=mX-sb7jf%me%mbOYXIMtZQJeb-^iiYvD{HB3l42RENlQ z1~nUO5>3cAv&sX4CIw zp-4NNzbCAeY*=D;2Vw!+o`z;QjIsN$;vqSPF=vQ1cz@)H7BKISgphS#9vE^(8UcKi zb65QEDlP;;90)dZQ)y-?y5FCvWwua*+p8cO-NRg(X#__*7O|QF6nCMJ_zTf@^%^lB z4r}m2$>(}DUGKVCI_^V9GF)(913f4|!)7*0`PrSbQXmFeur8^{7UQ7C_lyUTP4<4S zl32_29WEGCHEa)|&PW{Ik^#+8zuVMAk9mf?v2a;sSM%N|c#E0IqhPzJ` zGS2J)(xsEtG*+JQPV9unRZ^j^bR}Ji36Q&FgXbj^j`iwmD{fWGj5;v^sZoogq_;8F zPoACMBN`|sc4iv$g=F-e0}oIOSUxC8$<8-$U_zQpsLU4IXUK3l8-f($%=p^f1uf0i z<>U(aXzAjy_^M&nRZ$2#qk}}3o2gD|dRp8w(BD;fYdLcq*w6b3<&VZ3e&qkU<~xR$ zx$?*5Aee$`REt>+fH`B;d%)h`vm0|R{YxxnfmT}|R~-!YDDJlp?vJZUIiPI?}Ky$oyIy+aTXDKe+}K)-dnU995CdI^U`PBLY6;*iUo2 zx6O$oE^^-$NDYm*>o6$Nu+(y_HaWjbg2X=@3lWzjg=huv+S{ks^XFky6e+vVQk_;; z*#9H=f4>>b7*`Cm1?c3tX+|#l0h7#gV@4S^mP<6CB}xwXLk9Ghzgja>unUJJOimgh zf;a8?K%4G@okMiNA3p6fb0@Q$GP|y}=7M@(scja71t#@1_sWw%^Tj_EHuqguWTmnY zlxM&r7?mbyK!Wj=Jr7i+QpTqhE;(sv(^>Ic6LYosjRSTV@qD*p2G7zj590x21P8s< zh1l`!`=LZi)OMIj`>(gOWNOP5)2`zk#wTr>nuhZ9A`muO=GXQU1XSEa6(bi70vk~> zhKK-t(@p&Y*aJ_=ewp6-^=-;57;nZt3CxXKQX3-=`B#Kf{e50gef`r6`IR z6(Y)f#aBB#sC>(LZu)sJTh{KyLt%5*bPud|H0EWWbm4@!6>i1Lzt~?OE}x$ZR5KT!KM; zkJMI<)SwQbmV&omRA`d834iI;t=*l@!73A8!zJ3FH++9DhS?Ec^> zDhqPtgZ(MNjT;ew`(XlE&M7>vNpsC`IjL~luBU%|c9K+1)r-+qoy=)*nf;U5z$Q+W z=5`6NjIgQBdg5mEhVytf{j!Mc9b~|F|9AunthcWxJ(hUBD0v}r+qOHj--yY~1(X5C zSN=9{-*T$U4Hzap$5T49$QzCpF|EUKeF4p+tz~5jlF0E!OA{tfx5x~OB9{<%B>IUa z?CV??7DE%A^b5p@XFo)~5^qwm=Zh41;T}Jsv^mBD?j*?x#X5o!zBGXQU4E6>HNn>Q zo_ephGVZD?5GK^PS$uh8n-@io136_Lp{dqIFYAHT42ed^Kb3k}G=UsoVBP!GmXvA4+)s0b#T`kIEM$Ijk3b#Zn3T>D+}wVu#B0p5hdQr?ZW&EIyJ zRwfQ#gR$!9ey3V`XcDM@DgY&Hn?@_?HVGjU+Jk9*jIYyQBb}BGk`@Sp1aDE_-%iZ4^7kW;^*$h(hM<3u)!ajD3AH* zhNB|8GRm07j~jhH?LyxbJ5`SR&uYOou#u=7P&Dl$a+cgdKNBHx_hUYOKW#85_`!HJ z7H2|SG6B)}Xxy_pB@0PTPgh1}WY$;LH2nG&HVa1bOo(0U%9~vy-C>v1uHh@V#(PmA z3qtP@jzIO)2O;M)@R;p;NvH7NnS7cC?RPy5C`E!E0|aKX5aWATs~GHsTja^Vwm|uBMQOf z+pOIxVaRqw+o-Oqbx~UYNU=162s^Qm=QIL?B93?^T({yDFC+QS@${Q^up#Du7z~|i z@gM?dT!v%Zh!pF|O(Q{WH$UYSy}f-!EsrE1FbE@eY={QBL})u2><|Go2#-)8#oVph$M<_JSye%tHO0T> zvzML|r|sRq3v68*W>~&oB^B#U8-srOBeGdmR-`FAVmQe@i;;xzqFMQez=I9Be*Jmv zTPro9KxK58lQ&z>*_cOjHQ15VVq&1+2j3%J;EskK@p>a+U4sL?AO{fc30)zD7;S_h z+S^3+HOr3ttHMbD1Lt5CAs1_232*ANeF`=@)>t0uC%U`osI-s&J)QbRt0Gwjgs1vAUDP128~`aR?ad)v$o5$P?X5l~8)3AA_GhV`Y^14_{{B2HTViY#s5(5;e3N`LHu#;UTjU;kxf16l6K<{S(cWo$I z!&cu%DV7Gs093ql@;bufUd*mDc&?R$j)gpK_26MaRnlA5BK00XDcO0>*nLg%+xkeP zdUDfKG`1-pJBt8jf7ontC`OW-XL7i}@13p%$(mB|*Pe3bM@SO<0Qt1mjg-$jh#3F? literal 0 HcmV?d00001 diff --git a/MikroMaster/20260430/20260430220003-Config.rsc b/MikroMaster/20260430/20260430220003-Config.rsc new file mode 100644 index 0000000..974ea86 --- /dev/null +++ b/MikroMaster/20260430/20260430220003-Config.rsc @@ -0,0 +1,5545 @@ +# 2026-04-30 22:00:03 by RouterOS 7.22 +# software id = 2961-C4ZZ +# +# model = RBD52G-5HacD2HnD +# serial number = HCX084RAVFA +/interface bridge +add admin-mac=48:8F:5A:60:A1:0B auto-mac=no name=Bridge-LAN port-cost-mode=\ + short +/interface ethernet +set [ find default-name=ether1 ] comment="WAN - Unet" mac-address=\ + F6:BE:9D:85:53:F5 name="ether1 - Unet" +set [ find default-name=ether3 ] comment=LEN +set [ find default-name=ether4 ] comment=NUC +/interface l2tp-server +add comment=Server disabled=yes name=l2tp-in1 user=vados +/interface l2tp-client +add comment="Starless 2 MikroSPb" connect-to=176.53.203.171 name=l2tp-EoIP \ + user=vados +add allow=mschap2 allow-fast-path=yes comment=Starless connect-to=\ + vpn.starless.ru max-mru=1280 name=l2tp-vpn use-ipsec=yes use-peer-dns=yes \ + user=vados +/interface wireless +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(17dBm), SSID: vados, local forwarding +set [ find default-name=wlan1 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 2ghz-b/g/n basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps basic-rates-b=\ + 1Mbps,2Mbps,5.5Mbps,11Mbps channel-width=20/40mhz-XX country=belarus \ + disabled=no frequency=auto hw-protection-mode=rts-cts mode=ap-bridge \ + rate-set=configured skip-dfs-channels=10min-cac ssid=vados \ + station-roaming=enabled wds-default-bridge=Bridge-LAN wds-mode=\ + dynamic-mesh wireless-protocol=802.11 wmm-support=enabled wps-mode=\ + disabled +# managed by CAPsMAN +# channel: 5260/20-Ceee/ac/DP(17dBm), SSID: vados5g, local forwarding +set [ find default-name=wlan2 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 5ghz-a/n/ac basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps channel-width=\ + 20/40/80mhz-XXXX country=belarus disabled=no frequency=auto \ + hw-protection-mode=rts-cts mode=ap-bridge rate-set=configured \ + skip-dfs-channels=10min-cac ssid=vados5g station-roaming=enabled \ + wds-default-bridge=Bridge-LAN wds-mode=dynamic-mesh wireless-protocol=\ + 802.11 wmm-support=enabled wps-mode=disabled +/interface wireguard +add listen-port=13231 mtu=1280 name=WG +/interface wireless nstreme +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(17dBm), SSID: vados, local forwarding +set wlan1 enable-nstreme=yes +# managed by CAPsMAN +# channel: 5260/20-Ceee/ac/DP(17dBm), SSID: vados5g, local forwarding +set wlan2 enable-nstreme=yes +/caps-man security +add authentication-types=wpa-psk,wpa2-psk encryption=aes-ccm \ + group-encryption=aes-ccm name=security +/caps-man configuration +add channel.band=2ghz-b/g/n .control-channel-width=20mhz .extension-channel=\ + XX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-2ghz security=security ssid=vados +add channel.band=5ghz-a/n/ac .control-channel-width=20mhz .extension-channel=\ + XXXX country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-ac security=security ssid=vados5g +add channel.band=5ghz-a/n .control-channel-width=20mhz .extension-channel=XX \ + country=belarus datapath.client-to-client-forwarding=yes \ + .local-forwarding=yes name=cfg-5ghz-an security=security ssid=vados5g +/disk +add media-interface=lo slot=tmpfs tmpfs-max-size=44739242 type=tmpfs +/interface list +add comment=defconf name=WAN +add comment=defconf name=LAN +/interface lte apn +set [ find default=yes ] ip-type=ipv4 use-network-apn=no +/interface wifi channel +add band=5ghz-ax disabled=no frequency=5180,5200,5220,5240 name=5G-AX +add band=5ghz-ac disabled=no frequency=5180,5200,5220,5240 name=5G-AC +add band=2ghz-n disabled=no frequency=2422,2442,2462 name=2G-N +add band=2ghz-ax disabled=no frequency=2422,2442,2462 name=2G-AX +add band=2ghz-g disabled=no frequency=2422,2442,2462 name=2G-G +add band=5ghz-n disabled=no frequency=5180,5200,5220,5240 name=5G-AN +/interface wifi datapath +add bridge=Bridge-LAN disabled=no interface-list=all name=xs-DataPath +/interface wifi security +add authentication-types=wpa2-psk,wpa3-psk disabled=no group-encryption=ccmp \ + group-key-update=1h management-protection=allowed name=sec2g +add authentication-types=wpa3-psk disable-pmkid=yes disabled=no \ + group-encryption=ccmp group-key-update=5m management-encryption=cmac \ + management-protection=required name=sec5G +/interface wifi configuration +add channel=2G-AX datapath=xs-DataPath disabled=no mode=ap name=2G-AX \ + security=sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=2G-N datapath=xs-DataPath disabled=no mode=ap name=2G-N security=\ + sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=5G-AX disabled=no mode=ap name=5G-AX security=sec5G security.ft=\ + yes .ft-over-ds=yes ssid=vados +add channel=5G-AC datapath=xs-DataPath disabled=no mode=ap name=5G-AC \ + security=sec5G security.authentication-types="" .ft=yes .ft-over-ds=yes \ + ssid=vados +add channel=2G-G datapath=xs-DataPath disabled=no mode=ap name=2G-G security=\ + sec2g security.authentication-types="" .ft=yes .ft-over-ds=yes ssid=vados +add channel=5G-AN disabled=no mode=ap name=5G-AN security=sec5G ssid=vados +/interface wireless security-profiles +set [ find default=yes ] authentication-types=wpa-psk,wpa2-psk mode=\ + dynamic-keys supplicant-identity=MikroTik +/ip dhcp-server option +add code=12 name=HostName +add code=119 force=yes name=domain-search-list value="0x03'WORKGROUP'0x00" +/ip dhcp-server option sets +add name=HP1505n options=HostName +add name=StartLife1 options=HostName +add name=amsterDev options=HostName +add name=MiTV options=HostName +add name=miller options=HostName +add name=amster options=HostName +add name=garage options=HostName +add name=domain-search-set options=domain-search-list +add name=VADOS-LEN options=HostName +add name=VADOS-NUC options=HostName +add name=MikroNUC options=HostName +add name=master options=HostName +add name=MikroYellow options=HostName +add name="=\"Client ID\"" options=HostName +add name=mVados options=HostName +/ip dns forwarders +add dns-servers=1.1.1.1,1.0.0.1 name=blsp.at verify-doh-cert=no +add comment=Kra dns-servers=1.0.0.1,1.1.1.1 name=slon2.to verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=slon3.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=slon3.cc verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2web.at verify-doh-cert=no +add dns-servers=1.1.1.1,1.0.0.1 name=bs2best.at verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=psrms.is verify-doh-cert=no +add dns-servers=1.0.0.1,1.1.1.1 name=m.blsp.at verify-doh-cert=no +/ip ipsec proposal +set [ find default=yes ] disabled=yes +/ip pool +add name=dhcp ranges=10.30.30.150-10.30.30.200 +/ip dhcp-server +add add-arp=yes address-pool=dhcp dhcp-option-set=domain-search-set \ + dynamic-lease-identifiers=client-mac,client-id,opt-82 interface=\ + Bridge-LAN lease-time=10m name=masterDHCP server-address=10.30.30.81 \ + use-reconfigure=yes +/ip hotspot user profile +set [ find default=yes ] address-pool=dhcp +/ip smb users +set [ find default=yes ] disabled=yes +add disabled=yes name=vados +/ppp profile +set *FFFFFFFE use-upnp=no +/routing bgp template +set default disabled=no output.network=bgp-networks +/routing table +add disabled=no fib name=To-VPN +/snmp community +set [ find default=yes ] addresses=10.30.30.0/24 read-access=no security=\ + private +/system logging action +add email-start-tls=yes email-to=vados@vados.ru name=email target=email +/system script +add comment="Example add WU servers to AddrList" dont-require-permissions=no \ + name=WU-add-to-list owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# Syed Jahanzaib / aacable@hotmail.com\r\ + \n# List name\r\ + \n:local LISTNAME \"windowsupdateslist\"\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"update.microsoft.com\"\r\ + \n:local TARGET2 \"download.windowsupdate.com\"\r\ + \n:local TARGET3 \"download.microsoft.com\"\r\ + \n:local TARGET4 \"windowsupdate.com\"\r\ + \n:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n:local TARGET6 \"wustat.windows.com\"\r\ + \n:local TARGET7 \"stats.microsoft.com\"\r\ + \n:local TARGET8 \"mp.microsoft.com\"\r\ + \n:local TARGET9 \"ws.microsoft.com\"\r\ + \n:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n \r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n \r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4|\$TARGET5|\$TARGET6|\$TARGET7|\$TARGET8|\$TARGET9|\$TARGET10|\$T\ + ARGET11|\$TARGET12|\$TARGET13|\$TARGET14)\" && \$type ~ \"^(A|CNAME)\\\$\"\ + \_] do={\r\ + \n \r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n \r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Add Hosts DNS names to NoWG addres list" \ + dont-require-permissions=no name=Add2vdsina owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# \r\ + \n# List name\r\ + \n:local LISTNAME \"NoWG\"\r\ + \n#\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"comp-lenta.ru\"\r\ + \n:local TARGET2 \"ok.ru\"\r\ + \n:local TARGET3 \"vk.com\"\r\ + \n#:local TARGET4 \"smtp.mail.me.com\"\r\ + \n#:local TARGET4 \"windowsupdate.com\"\r\ + \n#:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n#:local TARGET6 \"wustat.windows.com\"\r\ + \n#:local TARGET7 \"stats.microsoft.com\"\r\ + \n#:local TARGET8 \"mp.microsoft.com\"\r\ + \n#:local TARGET9 \"ws.microsoft.com\"\r\ + \n#:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n#:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n#:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n\r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n\r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4)\" && \$type ~ \"^(A|CNAME)\\\$\" ] do={\r\ + \n\r\ + \n:log info (\"start entry: \$c \$sitednsname \$Buffer\");\r\ + \n\r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n:log info (\"1: \$Buffer\"); \r\ + \n\r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n\r\ + \n:log info (\"2: \$Buffer\"); \r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$i \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Flush DNS Cache" dont-require-permissions=no name=\ + DNS_Flush_Cache owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\ + "/ip dns cache flush" +add dont-require-permissions=no name=create_mkdir_function owner=vados \ + policy=read,write source="# Written by Phillip Stromberg in 2019\r\ + \n# Distributed under the MIT license\r\ + \n# \r\ + \n# \r\ + \n# this creates a function called \$mkdir\r\ + \n# from the command line you will be able to just type \"\$mkdir some/new\ + /folder\"\r\ + \n# and all the folders that need to be created will be\r\ + \n# if the folder already existed, it is ignored\r\ + \n\r\ + \n:log info \"Creating \\\$mkdir function...\"\r\ + \n\r\ + \n:global mkdir do={\r\ + \n # \$1 refers to the input variable the user passed in to us\r\ + \n :local newFolder \$1;\r\ + \n\r\ + \n # we'll use this variable to report error messages that may arise\r\ + \n :local errorMsg;\r\ + \n\r\ + \n # if the user put a slash on the end of the new folder name, remove \ + it\r\ + \n # i.e. \"some/test/\" becomes \"some/test\"\r\ + \n :while (([:pick \$newFolder ([:len \$newFolder] - 1)]) = \"/\") do={\ + \r\ + \n :set newFolder [:pick \$newFolder 0 ([:len \$newFolder] - 1)]\r\ + \n }\r\ + \n\r\ + \n # if the user put a slash at the beginning of the new folder name, r\ + emove it\r\ + \n # i.e. \"/some/test\" becomes \"some/test\"\r\ + \n :while ([:pick \$newFolder 0] = \"/\") do={\r\ + \n :set newFolder [:pick \$newFolder 1 [:len \$newFolder]]\r\ + \n }\r\ + \n\r\ + \n :if ([/file find name=\$newFolder] != \"\") do={\r\ + \n :set errorMsg \"'\$newFolder' already exists.\";\r\ + \n :log debug \"mkdir: \$errorMsg\";\r\ + \n :return \$newFolder;\r\ + \n }\r\ + \n\r\ + \n # the name of the temp file to create\r\ + \n :local tempfile \"mkdir_temp_file.txt\";\r\ + \n\r\ + \n # port 0 is unlikely to be open to HTTP requests...\r\ + \n :local fakeURL \"http://127.0.0.1:0/should-not-exist.txt\";\r\ + \n\r\ + \n :local fullTempPath (\$newFolder . \"/\" . \$tempfile);\r\ + \n\r\ + \n # this is where the folder creation happens\r\ + \n # `as-value` prevents status messages from printing\r\ + \n # wrapping in a `:do {...} on-error` prevents error messages from pr\ + inting.\r\ + \n :do {\r\ + \n /tool fetch dst-path=\"\$fullTempPath\" url=\"\$fakeURL\" durati\ + on=0.001s as-value;\r\ + \n } on-error={}\r\ + \n\r\ + \n # this waits for the temporary dir to show up so there isn't a race \ + \r\ + \n # condition where you call mkdir and then try to do something before\ + \_the \r\ + \n # folder is actually created\r\ + \n :local count 0;\r\ + \n :while ([/file find name=\"\$newFolder\"] = \"\") do={\r\ + \n :if (\$count >= 50) do={\r\ + \n # after 50 * 0.1s delays, it's been 5 seconds, which should \ + be long enough\r\ + \n :set errorMsg \"New folder could not be created at \$newFold\ + er\";\r\ + \n :log error \"mkdir: \$errorMsg\"\r\ + \n :error \$errorMsg\r\ + \n }\r\ + \n :delay 0.1s;\r\ + \n :set count (\$count + 1);\r\ + \n }\r\ + \n\r\ + \n :return \$newFolder;\r\ + \n}\r\ + \n\r\ + \n:log info \"Created function \\\$mkdir\"\r\ + \n" +add comment="Certificates CloudFlare, Quad9 " dont-require-permissions=no \ + name=CustomUpdate-Certificates owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_CloudFlare\r\ + \n/tool/fetch mode=https url=https://developers.cloudflare.com/ssl/static/\ + origin_ca_ecc_root.pem;\r\ + \n/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalRo\ + otCA.crt.pem;\r\ + \n/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\"\ + \";\r\ + \n/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalG\ + 2TLSRSASHA2562020CA1-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/DigiCertGlobal\ + G3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt.\ + pem passphrase=\"\";\r\ + \n\r\ + \n#:global AmScriptsUrl;\r\ + \n#google\r\ + \n#:local CertName \"GTS-Root-R1.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-R4.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \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#:set CertName \"ISRG-Root-X1.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \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#:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n\r\ + \n#/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 do\ + h-max-server-connections=20 use-doh-server=https://security.cloudflare-dns\ + .com/dns-query verify-doh-cert=yes;\r\ + \n#/ip/dns/static remove [find where address=1.1.1.1];\r\ + \n#/ip/dns/static add address=1.1.1.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 1\";\r\ + \n#/ip/dns/static remove [find where address=1.0.0.1];\r\ + \n#/ip/dns/static add address=1.0.0.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 2\"\r\ + \n#/ip dns static add address=2606:4700:4700::1111 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip dns static add address=2606:4700:4700::1001 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip/dns set servers=\"1.0.0.1, 8.8.4.4\";\r\ + \n#/ip/dns set servers=\"\";" +add dont-require-permissions=no name=script1 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="/\ + tool/netwatch/add comment=\"doh-fallback, doh-url=https://security.cloudfl\ + are-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Clou\ + dFlare-doh IPv4 1\" host=1.1.1.1;\r\ + \n/tool/netwatch/add comment=\"doh, doh-url=https://security.cloudflare-dn\ + s.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=CloudFlare\ + -doh IPv4 2\" host=1.0.0.1;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 1\" host=8.8.8.8;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 2\" host=8.8.4.4;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 1\" host=9.9.9.9;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 2\" host=149.112.112.112;\r\ + \n\r\ + \n/tool/netwatch/add comment=\"dns, notify, name=ns1.unet.ws\" host=91.192\ + .189.2;" +add dont-require-permissions=no name=script2 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \r\ + \n\r\ + \n:global InspectVar;\r\ + \n#:global RouterBoard;\r\ + \n#:do {:set RouterBoard [[ :parse \"/system/routerboard/get\" ]]} on-erro\ + r={}\r\ + \n#:global Resources;\r\ + \n#:do {:set Resources [[ :parse \"/system/resource/get\" ]]} on-error={}\ + \r\ + \n\r\ + \n#:global Updates;\r\ + \n#:do {:set Updates [[ :parse \"/system/package/update/get\" ]]} on-error\ + ={}\r\ + \n\r\ + \n#:global PkgUpdStatus \"undefined\";\r\ + \n#:local Update [/system/package/update/get];\r\ + \n#:retry command={:set PkgUpdStatus (\$Update->\"status\")} delay=200ms m\ + ax=5 on-error={};\r\ + \n\r\ + \n#:log warning [\$InspectVar \$RouterBoard];\r\ + \n#:put [\$InspectVar \$RouterBoard];\r\ + \n\r\ + \n#:retry command={/system/package/update check-for-updates without-paging\ + \_as-value} delay=300ms max=5 on-error={};\r\ + \n\r\ + \n#:global arrDeviceInfo ({});\r\ + \n#:local arrDeviceInfo ({\"section\":{\"key\":\"\"; \"value\":\"\";};});\ + \r\ + \n#:set (\$arrDeviceInfo->\"RouterBoard\") [[ :parse \"/system/routerboard\ + /get\" ]];\r\ + \n#:retry command={:set (\$arrDeviceInfo->\"Updates\") [[ :parse \"/system\ + /package/update/get\" ]]} delay=500ms max=5 on-error={:log error (\"Error\ + \")};\r\ + \n# [:toarray {\"section\"={\"key\"=\"\"; \"value\"=\"\";} }];\r\ + \n# [:toarray \"\"];\r\ + \n:local arrDeviceInfo ({});\r\ + \n\r\ + \n:set (\$arrDeviceInfo->\"devUpdates\") {\"channel\"; \"stable\";};\r\ + \n#:do {:set (arrDeviceInfo->\"Updates\") [[ :parse \"/system/package/upda\ + te/get\" ]]} on-error={:log error (\$error)}\r\ + \n\$InspectVar \$arrDeviceInfo;\r\ + \n" +add comment="Script for setup routeros script system" \ + dont-require-permissions=no name=AM-setup owner=AM-setup policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-setup\r\ + \n# Script comment: Script for setup routeros script system\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# :local ScriptName [ :jobname ];\r\ + \n# Additional commands:\r\ + \n#\r\ + \n# For scripts:\r\ + \n#:global NewScript \"script_name\"; \r\ + \n#:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n#/system/script/add name=\$NewScript owner=\$NewScript source=([/tool/fe\ + tch check-certificate=yes-without-crl (\$GlobalScriptsUrl . \$ScriptAdd . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n#:global NewScript (a);\r\ + \n#:global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n#\r\ + \n# For run from terminal:\r\ + \n#/system/script/add name=AM-setup owner=AM-Setup source=([/tool/fetch ch\ + eck-certificate=yes-without-crl \"https://ros.vados.ru/AM-setup.rsc\" outp\ + ut=user as-value ]->\"data\");\r\ + \n#\r\ + \n\r\ + \n:global ScriptUpdatesCRLF \"LF\";\r\ + \n#:if (\$ScriptUpdatesCRLF != false) do={\r\ + \n# :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vad\ + os\" ] do={\r\ + \n# if (\$ScriptUpdatesCRLF = true) do={\r\ + \n# /system/script/set source=[ :tocrlf [ get \$Script source ] ] \$S\ + cript;\r\ + \n# } else={\r\ + \n# /system/script/set source=[ :tolf [ get \$Script source ] ] \$Scr\ + ipt;\r\ + \n# }\r\ + \n# }\r\ + \n#}\r\ + \n\r\ + \n# /import verbose=no \$ScriptName\r\ + \n:global SetupScript [ :jobname ];\r\ + \n:global RemoveMe;\r\ + \n:global RunOnce;\r\ + \n:global InitSetup true;\r\ + \n:global tmpfs true;\r\ + \n\r\ + \n{\r\ + \n :local RmMe [:tobool \$1];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SetupScript;\r\ + \n :global RemoveMe;\r\ + \n :global InitSetup;\r\ + \n :global tmpfs;\r\ + \n \r\ + \n :local CertCommonName \"Root YE\";\r\ + \n :local CertFileName \"Root-YE.pem\";\r\ + \n :local CertFingerprint \"e14ffcad5b0025731006caa43a121a22d8e9700f4fb9c\ + f852f02a708aa5d5666\";\r\ + \n\r\ + \n :if (\$SetupScript = false) do={\r\ + \n :global SetupScript \"AM-setup\";\r\ + \n }\r\ + \n :if (\$RemoveMe != false) do={\r\ + \n :set RemoveMe true;\r\ + \n }\r\ + \n\r\ + \n :log warning (\"\\n\\\$GlobalScriptsUrl = \" . \$GlobalScriptsUrl);\r\ + \n \r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (!(((\$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 \r\ + \n /tool/fetch (\$GlobalScriptsUrl . \"certs/\" . \$CertFileName) dst-p\ + ath=\$CertFileName as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint \ + ] ] != 1) do={\r\ + \n :error \"Something is wrong with your certificates!\";\r\ + \n };\r\ + \n :delay 1s;\r\ + \n };\r\ + \n\r\ + \n:local MkTmpfs do={\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\"Try to removing directory 'tmpfs'.\");\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/remove tmpfs;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n# \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource/g\ + et total-memory ] / 3);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get tmpfs;\r\ + \n :return true;\r\ + \n } delay=222ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\"Creating disk of type tmpfs failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n}\r\ + \n:if (\$tmpfs = true) do={\r\ + \n :put \"Tmpfs variable is true. Checking for tmpfs/scripts directory...\ + \";\r\ + \n :if ([/file find name=\"tmpfs/scripts\"] != \"\") do={\r\ + \n :log info (\$0 . \"Directory tmpfs/scripts exsist.\");\r\ + \n :return \$true;\r\ + \n } else={\r\ + \n :log warning (\$0 . \"Directory tmpfs/scripts does't exsist.\");\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :log error (\$0 . \"Directory tmpfs is not created!\");\r\ + \n :return false;\r\ + \n } else={\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=/tmpfs/scripts;\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get /tmpfs/scripts;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\$0 . \"Making directory 'scripts' failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n# [ /file/get \$FileName ]\r\ + \n }\r\ + \n# :log error (\$0 . \"Directory tmpfs/scripts does not exsist. Remove\ + \_global variable tmpfs!\");\r\ + \n# :global tmpfs (a);\r\ + \n# return false;\r\ + \n }\r\ + \n}\r\ + \n :put \"Renaming AM-GlobalConfig, if exists...\";\r\ + \n :local ConfOldName (\"AM-GlobalConfig-\" . [ /system/clock/get date ] \ + . [ /system/clock/get time ] . \".rsc\");\r\ + \n /system/script/set name=\$ConfOldName [ find where name=\"AM-GlobalCon\ + fig\" ];\r\ + \n :foreach Script in={ \"AM-GlobalConfig\"; \"AM-GlobalFunc\" } do={\r\ + \n :put \"Installing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\r\ + \n /system/script/add name=\$Script owner=\$Script source=([ /tool/fetc\ + h check-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n \r\ + \n /system/script run \$Script;\r\ + \n :delay 2s;\r\ + \n };\r\ + \n\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] > 0) do={\r\ + \n :put \"Renaming certificate by its common-name...\";\r\ + \n :global CertificateNameByCN;\r\ + \n \$CertificateNameByCN \$CertFingerprint;\r\ + \n };\r\ + \n\r\ + \n :if (\$RemoveMe = true) do={\r\ + \n :put \"Add Scheduler for remove this script...\";\r\ + \n :local OnEvent (\":delay 30s;\\n\" . \"/system/script/remove [ find \ + where name=\\\"\$SetupScript\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \"/system/scheduler/remove [ find where name=\\\ + \"_RemoveSetup\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \":global RemoveMe (a);\\n\");\r\ + \n :local Comment \"_RemoveSetup tmp scheduler for remove setup script.\ + \";\r\ + \n /system/scheduler/add name=\"_RemoveSetup\" comment=\$Comment start-\ + time=startup interval=30s on-event=\$OnEvent;\r\ + \n :log warning (\$0 . \"\\nI've done everything, and now I'm tired..\ + . I'm leaving.\\nThere will be an error below, this is normal.\");\r\ + \n }\r\ + \n :delay 1;\r\ + \n :put \"Loading configuration and functions...\";\r\ + \n :do { \r\ + \n :global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n :put \"Normal removing temporary global environment variables.\";\ + \r\ + \n :global SetupScript (a);\r\ + \n :global InitSetup (a);\r\ + \n :global RemoveMe (a);\r\ + \n } on-error={\r\ + \n :local ErrorMsg \"Loading configuration and functions error!\";\r\ + \n :log error (\$0 . \$ErrorMsg . :error);\r\ + \n :error \$ErrorMsg;\r\ + \n }\r\ + \n}\r\ + \n" +add dont-require-permissions=no name=fetchCustom owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \r\ + \n#root.mnuc.backuper\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\r\ + \n#:local Script AM-GlobalConfig;\r\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\r\ + \n#/usb1/mikro_bak_rsa.pub\r\ + \n:local FetchFile AM-DOHCert.rsc\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \"[usb1]/scripts/\" . \$FetchFile);\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/308/f5b1bfb4\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 21:50:02 30.04.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 138;\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 GlobalEnvRemove;\r\ + \n:global MiniDateTimeStamp;\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 ExitError;\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 Grep;\r\ + \n:global IfThenElse;\r\ + \n:global MAX;\r\ + \n:global MIN;\r\ + \n:global HumanReadableNum;\r\ + \n\r\ + \n:global IsFullyConnected;\r\ + \n:global IsDNSResolving;\r\ + \n:global IsTimeSync;\r\ + \n:global IsTimeSyncCached;\r\ + \n:global IsTimeSyncResetNtp;\r\ + \n\r\ + \n:global WaitDNSResolving;\r\ + \n:global WaitFullyConnected;\r\ + \n:global WaitTimeSync;\r\ + \n:global MkDir;\r\ + \n:global RmDir;\r\ + \n:global RmFile;\r\ + \n:global FileGet;\r\ + \n:global Unix2Dos;\r\ + \n:global UrlEncode;\r\ + \n:global WaitForFile;\r\ + \n:global ScriptLock;\r\ + \n:global SendTelegram;\r\ + \n:global NotificationFunctions;\r\ + \n:global SendNotification;\r\ + \n:global SendNotification2;\r\ + \n:global SymbolForNotification;\r\ + \n:global SymbolByUnicodeName;\r\ + \n:global ValidateSyntax;\r\ + \n:global CheckSumsVerify;\r\ + \n:global GlobalConfChanges;\r\ + \n:global GlobalConfMigration;\r\ + \n:global VersionToNum;\r\ + \n:global RequiredRouterOS;\r\ + \n:global FetchLargeFiles;\r\ + \n:global FetchUserAgentStr;\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 LogPrint;\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n \$LogPrint debug \$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 \$LogPrint debug \$0 (\"Set updates channel to: \$updateChannel\");\ + \r\ + \n }\r\ + \n\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n \$LogPrint debug \$0 (\"Update Channel: \" . \$Channel . \".\");\r\ + \n\r\ + \n\r\ + \n :local StatusPkg \"undefined\";\r\ + \n \$LogPrint debug \$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 \$LogPrint debug \$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 \$LogPrint debug \$0 (\"\\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n \$LogPrint debug \$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\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\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\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\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\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: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: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# !!! The function is not ready !!!\r\ + \n:global FetchHttpInfo do={\r\ + \n :local Mac [ :tostr \$1 ];\r\ + \n :global CertificateAvailable;\r\ + \n :global IsMacLocallyAdministered;\r\ + \n :global LogPrint;\r\ + \n :local Url \"https://api.macvendors.com/\";\r\ + \n :if ([ \$IsMacLocallyAdministered \$Mac ] = true) do={:return \"locall\ + y administered\";}\r\ + \n :do {\r\ + \n :if ([ \$CertificateAvailable \"GTS Root R4\" \"fetch\" ] = false) d\ + o={\r\ + \n \$LogPrint warning \$0 (\"Downloading required certificate failed.\ + \");\r\ + \n :error false;\r\ + \n }\r\ + \n :local Vendor ([ /tool/fetch \r\ + \n (\$Url . [ :pick \$Mac 0 8 ]) output=user as-value ]->\"data\");\r\ + \n :return \$Vendor;\r\ + \n } on-error={\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=yes-without-crl (\$Url) output=none \ + as-value;\r\ + \n \$LogPrint debug \$0 (\"The mac vendor is not known in database.\"\ + );\r\ + \n } do={ \$LogPrint warning \$0 (\"Failed getting mac vendor: \" . \$E\ + rr); }\r\ + \n :return \"unknown vendor\";\r\ + \n }\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 :global CertificateDownload;\r\ + \n :global EitherOr;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :set UseFor [ \$EitherOr \$UseFor \"undefined\" ];\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 \$LogPrint 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 \$LogPrint 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 \$LogPrint info \$0 (\"Certificate with CommonName '\" . \$CommonNam\ + e . \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={:return fal\ + se}\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n \$LogPrint 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 \$LogPrint info \$0 (\"Certificate chain for '\" . \$CommonName . \ + \"' is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={:return fal\ + se}\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 GlobalScriptsUrl;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global LogPrint;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n \r\ + \n \$LogPrint info \$0 (\"Downloading and importing certificate with Comm\ + onName '\" . \$CommonName . \"'.\");\r\ + \n \r\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\r\ + \n :do {\r\ + \n /tool/fetch check-certificate=yes-without-crl http-header-field=({ [\ + \_\$FetchUserAgentStr \$0 ] }) \\\r\ + \n (\$GlobalScriptsUrl . \"certs/\" . \$FileName . \$GlobalScriptsUrl\ + Suffix) dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n } on-error={\r\ + \n \$LogPrint warning \$0 (\"Failed downloading certificate with Common\ + Name '\" . \$CommonName . \\\r\ + \n \"' from repository! Trying fallback to mkcert.org...\");\r\ + \n :do {\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"Required certificate is not available.\"\ + );\r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl http-header-field=({\ + \_[ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n \"https://mkcert.org/generate/\" http-data=[ :serialize to=json \ + ({ \$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 \$LogPrint warning \$0 (\"Failed downloading certificate with Comm\ + onName '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n \$LogPrint warning \$0 (\"Certificate with CommonName '\" . \$Common\ + Name . \"' 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 :global LogPrint;\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 \$LogPrint 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 FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\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 (https://amster.vados.ru/; main/3419/3ee\ + 19780)\");\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 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 GetRandomNumber do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndnum from=0 to=[ \$EitherOr [ :tonum \$1 ] 4294967295 ] ]\ + \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 MiniDateTimeStamp do={\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 :return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\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={:return false}\r\ + \n :local FileVal false;\r\ + \n :do {: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 :global LogPrint;\r\ + \n \$LogPrint debug \$0 (\"Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\$LogPrint debug \$0 (\"... which does not \ + exist.\"); :return true};\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\$LogPrint error \$0 (\"\ + Directory '\" . \$DirName . \"' is not a directory.\"); :return false};\r\ + \n :onerror Err {/file/remove \$DirName} do={\$LogPrint error \$0 (\"Remo\ + ving directory '\" . \$DirName . \"' failed: \" . \$Err); :return false};\ + \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 :global LogPrint;\r\ + \n \$LogPrint debug \$0 (\"Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\$LogPrint debug \$0 (\"... which does not\ + \_exist.\"); :return true}\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n \$LogPrint error \$0 (\"File '\" . \$FileName . \"' is not a file.\"\ + ); :return false}\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\$LogPrint error \$0 (\"Removing file '\" . \$FileName . \"' fai\ + led: \" . \$Err); :return false}\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 :global LogPrint;\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 \$LogPrint info \$0 (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n \$LogPrint 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 \$LogPrint 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 \$LogPrint debug \$0 (\"Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n \$LogPrint 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 \$LogPrint 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 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 [ :len\ + \_\$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 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 LogPrint;\r\ + \n :global VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n \$LogPrint 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 \$LogPrint warning \$0 (\"This \" . [ \$IfThenElse ([ :pick \$Call\ + er 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: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: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 LogPrint;\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 \$LogPrint error \$0 (\"A script named '\" . \$Script . \"' does not\ + \_exist!\");\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 \$LogPrint error \$0 (\"More tickets than running scripts '\" . \$Sc\ + ript . \"', 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: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: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:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\r\ + \n :global LogPrint;\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 \$LogPrint 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: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: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: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:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\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:set IsTimeSync do={\r\ + \n :global IsTimeSyncCached;\r\ + \n :global IsTimeSyncResetNtp;\r\ + \n :if (\$IsTimeSyncCached = true) do={:return true}\r\ + \n :if ([ /system/ntp/client/get enabled ] = true) do={\r\ + \n :if ([ /system/ntp/client/get status ] = \"synchronized\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :local Uptime [ /system/resource/get uptime ];\r\ + \n :if ([ :typeof \$IsTimeSyncResetNtp ] = \"nothing\") do={\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n }\r\ + \n :if (\$Uptime - \$IsTimeSyncResetNtp < 3m) do={:return false}\r\ + \n :log warning \"\$0 The ntp client is configured, but did not sync.\"\ + ;\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n /system/ntp/client/set enabled=no;\r\ + \n :delay 20ms;\r\ + \n /system/ntp/client/set enabled=yes;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ /system/license/get ]->\"level\" = \"free\" || \\\r\ + \n [ /system/resource/get ]->\"board-name\" = \"x86\") do={\r\ + \n :log debug \"\$0 No ntp client configured, relying on RTC for CHR fr\ + ee license and x86.\";\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ /ip/cloud/get update-time ] = true) do={\r\ + \n :if ([ :typeof [ /ip/cloud/get public-address ] ] = \"ip\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :log debug \"\$0 No time source configured! Returning gracefully...\";\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n# read parts of a large file\r\ + \n:set FetchLargeFiles do={\r\ + \n :local ScriptName [:tostr \$1];\r\ + \n :local fetchUrl [:tostr \$2];\r\ + \n :local CheckCert [:tostr \$3];\r\ + \n :local fetchMode [:tostr \$4];\r\ + \n :local fetchMethod [:tostr \$5];\r\ + \n :local FetchString \"undefined\";\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 #:set fetchMode [ \$IfThenElse (\$fetchMode != \"false\") [:tostr (\"m\ + ode=\" . \$fetchMode)] ];\r\ + \n #:set fetchMethod [\$IfThenElse (\$fetchMethod != \"false\") [:tostr (\ + \"http-method=\\\"\" . \$fetchMethod . \"\\\"\") ]];\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 :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n #/tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName h\ + ttp-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-value;\r\ + \n #:log warning (\"\\\$fUrl =\" . \$2 . ({[ \$fMode ]}));\r\ + \n :onerror Err {\r\ + \n :set FetchString (\"/tool/fetch \" . \\\r\ + \n [\$IfThenElse ([\$fetchMethod] != \"false\") (\"http-method=\\\"\"\ + \_. \$fetchMethod . \"\\\" \")] . \\\r\ + \n \"check-certificate=\" . \$CheckCert . \" url=(\\\"\" . \$fetchUrl\ + \_. \"\\\") \" . \\\r\ + \n [\$IfThenElse ([\$fetchMode] != \"false\") (\"mode=\" . \$fetchMod\ + e . \" \")] . \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue);\r\ + \n :log warning (\"\\\$FetchSring = \" . \$FetchString);\r\ + \n :put [\$FetchString];\r\ + \n #:put [/tool/fetch \$fetchMode check-certificate=\$CheckCert url=(\$\ + fetchUrl) dst-path=(\$FileName) http-header-field=({ [ \$FetchUserAgentStr\ + \_\$ScriptName ] }) as-value];\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 \" . \$fetchUrl . \"\ + \_- \" . \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$fetchUrl . \ + \" did not show up.\");\r\ + \n :return false;\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 ScriptInstallUpdate do={ :onerror Err {\r\ + \n :local Scripts [ :toarray \$1 ];\r\ + \n :local NewComment [ :tostr \$2 ];\r\ + \n :global InitSetup;\r\ + \n\r\ + \n :global CommitId;\r\ + \n :global ScriptUpdatesCRLF;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global CertificateAvailable;\r\ + \n :global CheckSumsVerify;\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SumsDirAndFileName;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global EitherOr;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global Grep;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global RequiredRouterOS;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global ValidateSyntax;\r\ + \n :global CommentsInScripts;\r\ + \n\r\ + \n :if ([ \$CertificateAvailable \"Root YE\" \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, trying wit\ + hout.\");\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=\$Scripts do={\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \r\ + \n \$LogPrint info \$0 (\"Adding new script: \" . \$Script);\r\ + \n /system/script/add name=\$Script owner=\$Script source=\"#!rsc by \ + Vados\\n\" comment=\$NewComment;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local CommitIdBefore \$CommitId;\r\ + \n :local GlobalConfVersionBefore \$GlobalConfVersion;\r\ + \n :local ReloadGlobal false;\r\ + \n :local DeviceMode [ /system/device-mode/get ];\r\ + \n\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSums ({});\r\ + \n :do {\r\ + \n :local Url (\$GlobalScriptsUrl . \$SumsDirAndFileName . \$GlobalScr\ + iptsUrlSuffix);\r\ + \n \$LogPrint debug \$0 (\"Fetching checksums from url: \" . \$Url);\ + \r\ + \n :set CheckSums [ :deserialize from=json ([ /tool/fetch check-certi\ + ficate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url output\ + =user as-value ]->\"data\") ];\r\ + \n } on-error={ \$LogPrint warning \$0 (\"Err = \" . \$Err); }\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vado\ + s\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :local ScriptInfo [ \$ParseKeyValueStore (\$ScriptVal->\"comment\") \ + ];\r\ + \n :local SourceNew;\r\ + \n\r\ + \n :foreach Scheduler in=[ /system/scheduler/find where on-event~(\"\\\ + \\b\" . \$ScriptVal->\"name\" . \"\\\\b\") ] do={\r\ + \n :local SchedulerVal [ /system/scheduler/get \$Scheduler ];\r\ + \n :if (\$ScriptVal->\"policy\" != \$SchedulerVal->\"policy\") do={\r\ + \n \$LogPrint warning \$0 (\"Policies differ for script '\" . \$Scr\ + iptVal->\"name\" . \"' and its scheduler '\" . \$SchedulerVal->\"name\" . \ + \"'!\");\r\ + \n }\r\ + \n }\r\ + \n :do {\r\ + \n :if (\$ScriptInfo->\"ignore\" = true) do={\r\ + \n \$LogPrint debug \$0 (\"Ignoring script '\" . \$ScriptVal->\"nam\ + e\" . \"', as requested.\");\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSum (\$CheckSums->(\$ScriptVal->\"name\"));\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Scri\ + ptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :convert transform=md5 to=hex [ :tolf (\$ScriptVal->\"sou\ + rce\") ] ] = \$CheckSum) do={\r\ + \n \$LogPrint debug \$0 (\"Checksum for script '\" . \$ScriptVal-\ + >\"name\" . \"' matches, ignoring.\");\r\ + \n :error true;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len (\$ScriptInfo->\"certificate\") ] > 0) do={\r\ + \n :if ([ \$CertificateAvailable (\$ScriptInfo->\"certificate\") \"\ + fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, tryi\ + ng without.\");\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n :local BaseUrl [ \$EitherOr (\$ScriptInfo->\"base-url\") \$Globa\ + lScriptsUrl ];\r\ + \n :local UrlSuffix [ \$EitherOr (\$ScriptInfo->\"url-suffix\") \$G\ + lobalScriptsUrlSuffix ];\r\ + \n :local Url (\$BaseUrl . \$ScriptVal->\"name\" . \".rsc\" . \$Url\ + Suffix);\r\ + \n \$LogPrint warning \$0 (\"Fetching script '\" . (\$ScriptVal->\"\ + name\") . \"' from url: \" . \$Url);\r\ + \n :local Result [ /tool/fetch check-certificate=yes-without-crl \\\ + \r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url outp\ + ut=user as-value ];\r\ + \n :if (\$Result->\"status\" = \"finished\") do={\r\ + \n :set SourceNew [ :tolf (\$Result->\"data\") ];\r\ + \n } \r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching script '\" . \$ScriptV\ + al->\"name\" . \"': \" . \$Err);\r\ + \n :if (\$Err != \"Fetch failed with status 404\") do={\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$ScriptVal->\"source\" = \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Removing dummy. Typo on installation\ + \?\");\r\ + \n /system/script/remove \$Script;\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Sc\ + riptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :len \$CheckSum ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Added the script manually\? Skip u\ + pdates with 'ignore=true' in comment.\");\r\ + \n }\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$SourceNew ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"No update for script '\" . (\$ScriptVal-\ + >\"name\") . \"'.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local SourceCRLF [ :tocrlf \$SourceNew ];\r\ + \n :if (\$InitSetup != true && ((\$ScriptVal->\"name\") != \"AM-Globa\ + lConfig\" || (\$ScriptVal->\"name\") != \"AM-GlobalFunc\")) do={\r\ + \n :if (\$SourceNew = (\$ScriptVal->\"source\") || \$SourceCRLF = (\ + \$ScriptVal->\"source\")) do={\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\") \ + . \"' source did not change. End of lines set to CRLF.\");\r\ + \n if (\$ScriptUpdatesCRLF = false) do={\r\ + \n :put [ :tolf \$SourceNew ];\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\"\ + ) . \"' source update end of lines to LF.\");\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([ :pick \$SourceNew 0 14 ] != \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Looks like new script '\" . \$ScriptVa\ + l->\"name\" . \"' is not valid (missing shebang = '\$shebang') Ignoring!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if (\$CommentsInScripts = true) do={\r\ + \n :local CommentLine [ \$Grep \$SourceNew (\"\\23 Script comment:\ + \_\") ];\r\ + \n :if ([ :len \$CommentLine ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"The search in new script '\" . (\$Scr\ + iptVal->\"name\") . \"' for comment in script body, is not found result Ig\ + noring!\");\r\ + \n :error false;\r\ + \n } else={\r\ + \n :if ([ :len (\$ScriptVal->\"comment\")] = 0 || [ :len (\$Scri\ + ptVal->\"comment\")] != [ :pick \$CommentLine ([ :find \$CommentLine \":\"\ + ] + 2) [ :len \$CommentLine] ]) do={\r\ + \n \$LogPrint debug \$0 (\"Exsiting comment for script '\" . (\ + \$ScriptVal->\"name\") . \"' is '\" . (\$ScriptVal->\"comment\") . \"'.\")\ + ;\r\ + \n :set (\$ScriptVal->\"comment\") [ :pick \$CommentLine ([ :f\ + ind \$CommentLine \":\"] + 2) [ :len \$CommentLine] ];\r\ + \n \$LogPrint debug \$0 (\"New comment (\" . (\$ScriptVal->\"c\ + omment\") . \") for script '\" . (\$ScriptVal->\"name\") . \"' has been ad\ + ded!\");\r\ + \n } else={\r\ + \n \$LogPrint debug \$0 (\"Comment for script '\" . (\$ScriptV\ + al->\"name\") . \"' did not change.\");\r\ + \n :error false;\r\ + \n }\r\ + \n } \r\ + \n }\r\ + \n\r\ + \n :local RequiredROS ([ \$ParseKeyValueStore [ \$Grep \$SourceNew (\ + \"\\23 requires RouterOS, \") ] ]->version);\r\ + \n :if ([ \$RequiredRouterOS \$0 [ \$EitherOr \$RequiredROS \"0.0\" ]\ + \_false ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires RouterOS \" . \\\r\ + \n \$RequiredROS . \", which is not met by your installation. I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :local RequiredDM [ \$ParseKeyValueStore [ \$Grep \$SourceNew (\"\ + \\23 requires device-mode, \") ] ];\r\ + \n :local MissingDM ({});\r\ + \n :foreach Feature,Value in=\$RequiredDM do={\r\ + \n :if ([ :typeof (\$DeviceMode->\$Feature) ] = \"bool\" && (\$Devi\ + ceMode->\$Feature) = false) do={\r\ + \n :set MissingDM (\$MissingDM, \$Feature);\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len \$MissingDM ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires disabled \" . \\\r\ + \n \"device-mode features (\" . [ :tostr \$MissingDM ] . \"). I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ValidateSyntax \$SourceNew ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Syntax validation for script '\" . (\$\ + ScriptVal->\"name\") . \"' failed! Ignoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n \r\ + \n :log info (\"Updating script: \" . (\$ScriptVal->\"name\") . \" Sc\ + ript comment: \" . (\$ScriptVal->\"comment\"));\r\ + \n\r\ + \n /system/script/set owner=(\$ScriptVal->\"name\") comment=(\$Script\ + Val->\"comment\") \\\r\ + \n source=[ \$IfThenElse (\$ScriptUpdatesCRLF = true) \$SourceCRL\ + F \$SourceNew ] \$Script;\r\ + \n :if (\$ScriptVal->\"name\" = \"AM-GlobalConfig\" || \\\r\ + \n \$ScriptVal->\"name\" = \"AM-GlobalFunc\" || \\\r\ + \n \$ScriptVal->\"name\" ~ (\"^(AM-GlobalFunc\\\\.d|mod)/.\")) d\ + o={\r\ + \n :set ReloadGlobal true;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n :if (\$ReloadGlobal = true) do={\r\ + \n \$LogPrint info \$0 (\"Reloading global configuration and functions.\ + \");\r\ + \n :onerror Err {\r\ + \n :global InitSetup (a);\r\ + \n /system/script {run AM-GlobalConfig; run AM-GlobalFunc;};\r\ + \n } do={\$LogPrint error \$0 (\"Reloading global configuration and fun\ + ctions failed! \" . \$Err)}\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore > \$GlobalConfVersion) do={\r\ + \n \$LogPrint warning \$0 (\"The configuration version decreased from \ + \" . \\\r\ + \n \$GlobalConfVersionBefore . \" to \" . \$GlobalConfVersion . \\\r\ + \n \". Installed an older version\?\");\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore < \$GlobalConfVersion) do={\r\ + \n :global GlobalConfChanges;\r\ + \n :global GlobalConfMigration;\r\ + \n :local ChangeLogCode;\r\ + \n :if ([ :len \$ChangeLogCode ] > 0) do={\r\ + \n :if ([ \$ValidateSyntax \$ChangeLogCode ] = true) do={\r\ + \n :onerror Err {\r\ + \n [ :parse \$ChangeLogCode ];\r\ + \n } do={\$LogPrint warning \$0 (\"The changelog failed to run: \" \ + . \$Err)}\r\ + \n } else={\$LogPrint warning \$0 (\"The changelog failed syntax vali\ + dation!\")}\r\ + \n }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Migration (\$GlobalConfMigration->[ :tostr \$I ]);\r\ + \n :do {\r\ + \n :if ([ :typeof \$Migration ] != \"str\") do={\r\ + \n \$LogPrint debug \$0 (\"Migration code for change \" . \$I .\ + \_\" is not available.\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$ValidateSyntax \$Migration ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Migration code for change \" . \$I\ + \_. \" failed syntax validation!\");\r\ + \n :error false}\r\ + \n \$LogPrint info \$0 (\"Applying migration for change \" . \$I \ + . \": \" . \$Migration);\r\ + \n :onerror Err {\r\ + \n [ :parse \$Migration ];\r\ + \n } do={\$LogPrint warning \$0 (\"Migration code for change \" .\ + \_\$I . \" failed to run: \" . \$Err)}\r\ + \n } on-error={ }\r\ + \n }\r\ + \n }\r\ + \n :local NotificationMessage (\"The configuration version on \" . \$Id\ + entity . \" increased \" . \\\r\ + \n \"to \" . \$GlobalConfVersion . \", current configuration may nee\ + d modification. \" . \\\r\ + \n \"Please review and update global-config-overlay, then re-run glo\ + bal-config.\");\r\ + \n \$LogPrint info \$0 (\$NotificationMessage);\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nChanges:\ + \");\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Change (\$GlobalConfChanges->[ :tostr \$I ]);\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n \" . \\\ + \r\ + \n [ \$SymbolForNotification \"pushpin\" \"*\" ] . \$Change);\r\ + \n \$LogPrint info \$0 (\"Change \" . \$I . \": \" . \$Change);\r\ + \n }\r\ + \n } else={:set NotificationMessage (\$NotificationMessage . \"\\n\\nNe\ + ws and changes are not available.\")}\r\ + \n\r\ + \n :set GlobalConfChanges;\r\ + \n :set GlobalConfMigration;\r\ + \n }\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n\r\ + \n# Global Environment clear. Use: \"\$GlobalEnvRemove True;\".\r\ + \n:set GlobalEnvRemove do={\r\ + \n :local doRmEnv [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :local ScriptsUrl;\r\ + \n :global LogPrint;\r\ + \n :if (\$doRmEnv != \"True\") do={\r\ + \n \$LogPrint error \"GlobalEnvRemove\" (\"This script is needed \\\"T\ + rue\\\" for confirm to remove global environment variables!\");\r\ + \n :return [];\r\ + \n :error true; \r\ + \n } else={\r\ + \n :set ScriptsUrl \$GlobalScriptsUrl;\r\ + \n :delay 5;\r\ + \n :foreach var in=[/system/script/environment print as-value] do={/sy\ + stem/script/environment remove (\$var->\".id\")}\r\ + \n :delay 5;\r\ + \n :global GlobalScriptsUrl \$ScriptsUrl;\r\ + \n \$LogPrint warning \"GlobalEnvRemove\" (\"Done!\");\r\ + \n :return [];\r\ + \n :error false;\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 \"Setup Global Environment for scripts\";\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#:local Resource [ /system/resource/get ];\r\ + \n#:log info (\$ScriptName . \" Loaded on \" . \$Resource->\"board-name\" \ + . \" with RouterOS \" . \$Resource->\"version\" . \" and Architecture \" .\ + \".\");\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# signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\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} do={:global ExitOnError; \$ExitOnError \$0 \$Err;}\r\ + \n\r\ + \n#} do={:global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err}\r\ + \n# log the successful load of the script, or an error if it failed\r\ + \n#:if ([\$GlobalFuncReady] = true && [\$GlobalConfReady] = true) do={\r\ + \n" +add comment="Import ssh keys for public key authentication" \ + dont-require-permissions=no name=AM-SshKeysImport owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-SshKeysImport\r\ + \n# Script comment: Import ssh keys for public key authentication\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n#\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global configs or functions not ready.\"); }; } del\ + ay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n:global SSHKeysImport;\r\ + \n:global SSHKeysImportFile;\r\ + \n\r\ + \n# import single key passed as string\r\ + \n:set SSHKeysImport do={ :onerror Err {\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local User [ :tostr \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n :if ([ :len \$Key ] = 0 || [ :len \$User ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Missing argument(s), please pass key and u\ + ser!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ :len [ /user/find where name=\$User ] ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"User '\" . \$User . \"' does not exist.\")\ + ;\r\ + \n :return false;\r\ + \n }\r\ + \n :local KeyVal ([ :deserialize \$Key delimiter=\" \" from=dsv options=d\ + sv.plain ]->0);\r\ + \n :if (!(\$KeyVal->0 = \"ssh-ed25519\" || \$KeyVal->0 = \"ssh-rsa\")) do\ + ={\r\ + \n \$LogPrint warning \$0 (\"SSH key of type '\" . \$KeyVal->0 . \"' is\ + \_not supported.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local FingerPrintMD5 [ :convert from=base64 transform=md5 to=hex (\$K\ + eyVal->1) ];\r\ + \n :local RegEx (\"\\\\bmd5=\" . \$FingerPrintMD5 . \"\\\\b\");\r\ + \n :if ([ :len [ /user/ssh-keys/find where user=\$User \\\r\ + \n (key-owner~\$RegEx or info~\$RegEx) ] ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The ssh public key (MD5:\" . \$FingerPrint\ + MD5 . \\\r\ + \n \") is already available for user '\" . \$User . \"'.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$MkDir \"tmpfs/ssh-keys-import\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Creating directory 'tmpfs/ssh-keys-import'\ + \_failed!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileName (\"tmpfs/ssh-keys-import/key-\" . [ \$GetRandom20CharA\ + lNum 6 ] . \".pub\");\r\ + \n /file/add name=\$FileName contents=(\$Key . \", md5=\" . \$FingerPrint\ + MD5);\r\ + \n \$WaitForFile \$FileName;\r\ + \n :onerror Err {\r\ + \n /user/ssh-keys/import public-key-file=\$FileName user=\$User;\r\ + \n \$LogPrint info \$0 (\"Imported ssh public key (\" . \$KeyVal->2 . \ + \", \" . \$KeyVal->0 . \", \" . \\\r\ + \n \"MD5:\" . \$FingerPrintMD5 . \") for user '\" . \$User . \"'.\");\ + \r\ + \n \$RmDir \"tmpfs/ssh-keys-import\";\r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed importing key: \" . \$Err);\r\ + \n \$RmDir \"tmpfs/ssh-keys-import\";\r\ + \n :return false;\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n\r\ + \n# import keys from a file\r\ + \n:set SSHKeysImportFile do={ :onerror Err {\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local User [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global FileExists;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global SSHKeysImport;\r\ + \n :if ([ :len \$FileName ] = 0 || [ :len \$User ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Missing argument(s), please pass file name\ + \_and user!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$FileExists \$FileName ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"File '\" . \$FileName . \"' does not exist\ + .\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local Keys [ :tolf [ /file/get \$FileName contents ] ];\r\ + \n :foreach KeyVal in=[ :deserialize \$Keys delimiter=\" \" from=dsv opti\ + ons=dsv.plain ] do={\r\ + \n :local Continue false;\r\ + \n :if (\$KeyVal->0 = \"ssh-ed25519\" || \$KeyVal->0 = \"ssh-rsa\") do=\ + {\r\ + \n :if ([ \$SSHKeysImport (\$KeyVal->0 . \" \" . \$KeyVal->1 . \" \" \ + . \$KeyVal->2) \$User ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Failed importing key for user '\" . \$\ + User . \"'.\");\r\ + \n }\r\ + \n :set Continue true;\r\ + \n }\r\ + \n :if (\$Continue = false && \$KeyVal->0 = \"#\") do={\r\ + \n :set User [ \$EitherOr ([ \$ParseKeyValueStore (\$KeyVal->1) ]->\"\ + user\") \$User ];\r\ + \n :set Continue true;\r\ + \n }\r\ + \n :if (\$Continue = false && [ :len (\$KeyVal->0) ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"SSH key of type '\" . \$KeyVal->0 . \"' \ + is not supported.\");\r\ + \n }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n} do={:global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err}\r\ + \n" +add comment="Enable or disable ip addresses based on bridge port state" \ + dont-require-permissions=no name=mod/AM-IPbridge owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: mod/AM-IPbridge\r\ + \n# Script comment: Enable or disable ip addresses based on bridge port st\ + ate\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# Add this Script scheduler\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n:log warning (\"SystemScheduler for script: \" . \$ScriptName . \" is NO\ + T SET! Fix It Now!\");\r\ + \n:local OnEvent \"/system/script/run \$ScriptName;\";\r\ + \n:local Comment \"Every Day Check For Fake Bridges\";\r\ + \n/system/scheduler/add name=\$ScriptName comment=\$Comment start-time=sta\ + rtup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n:foreach Bridge in=[ /interface/bridge/find ] do={\r\ + \n :local BrName [ /interface/bridge/get \$Bridge name ];\r\ + \n :if ([ :len [ /interface/bridge/port/find where bridge=\$BrName ] ] > \ + 0) do={\r\ + \n :if ([ :len [ /interface/bridge/port/find where bridge=\$BrName and \ + inactive=no ] ] = 0) do={\r\ + \n /ip/address/disable [ find where !dynamic interface=\$BrName ];\r\ + \n } else={\r\ + \n /ip/address/enable [ find where !dynamic interface=\$BrName ];\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n" +add comment="Check for certificates validity" dont-require-permissions=no \ + name=AM-CheckCerts owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-CheckCerts\r\ + \n# Script comment: Check for certificates validity\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 ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n :global CertRenewTime;\r\ + \n :global CertRenewUrl;\r\ + \n :global CertWarnTime;\r\ + \n :global Identity;\r\ + \n\r\ + \n :global CertificateAvailable;\r\ + \n :global EscapeForRegEx;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global ScriptLock;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global UrlEncode;\r\ + \n# :global WaitFullyConnected;\r\ + \n\r\ + \n# Add this Script scheduler\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n:log warning (\"System Scheduler for script: \" . \$ScriptName . \" is N\ + OT SET! Fix It Now!\");\r\ + \n:local OnEvent \"/system/script/run \$ScriptName;\";\r\ + \n:local Comment \"Every Day Check For Renew Certificates\";\r\ + \n/system/scheduler/add name=\$ScriptName comment=\$Comment start-time=sta\ + rtup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n\r\ + \n :local CheckCertificatesDownloadImport do={\r\ + \n :local ScriptName [ :tostr \$1 ];\r\ + \n :local CertName [ :tostr \$2 ];\r\ + \n :local FetchName [ :tostr \$3 ];\r\ + \n\r\ + \n :global CertRenewUrl;\r\ + \n :global CertRenewPass;\r\ + \n\r\ + \n :global CertificateNameByCN;\r\ + \n :global EscapeForRegEx;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global LogPrint;\r\ + \n :global RmFile;\r\ + \n :global UrlEncode;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :foreach Type in={ \"p12\"; \"pem\" } do={\r\ + \n :local CertFileName ([ \$UrlEncode \$FetchName ] . \".\" . \$Type)\ + ;\r\ + \n \$LogPrint debug \$ScriptName (\"Trying type '\" . \$Type . \"' fo\ + r '\" . \$CertName . \\\r\ + \n \"' (file '\" . \$CertFileName . \"')...\");\r\ + \n\r\ + \n :do {\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] \ + }) \\\r\ + \n (\$CertRenewUrl . \$CertFileName) dst-path=\$CertFileName \ + as-value;\r\ + \n } do={\r\ + \n :if (!(\$Err ~ \"[Ss]tatus 404\")) do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching certificate: \" . \ + \$Err);\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n \$WaitForFile \$CertFileName; \r\ + \n\r\ + \n :local DecryptionFailed true;\r\ + \n :foreach I,PassPhrase in=\$CertRenewPass do={\r\ + \n :do {\r\ + \n \$LogPrint debug \$ScriptName (\"Trying \" . \$I . \". passp\ + hrase... \");\r\ + \n :local Result [ /certificate/import file-name=\$CertFileName\ + \_passphrase=\$PassPhrase as-value ];\r\ + \n :if (\$Result->\"decryption-failures\" = 0) do={\r\ + \n \$LogPrint debug \$ScriptName (\"Success!\");\r\ + \n :set DecryptionFailed false;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n \$RmFile \$CertFileName;\r\ + \n\r\ + \n :if (\$DecryptionFailed = true) do={\r\ + \n \$LogPrint warning \$ScriptName (\"Decryption failed for certi\ + ficate file '\" . \$CertFileName . \"'.\");\r\ + \n }\r\ + \n\r\ + \n :foreach CertInChain in=[ /certificate/find where common-name!=\ + \$CertName !private-key \\\r\ + \n name~(\"^\" . [ \$EscapeForRegEx \$CertFileName ] . \"_[0-9]\ + +\\\$\") \\\r\ + \n !(subject-alt-name~(\"(^|\\\\W)(DNS|IP):\" . [ \$EscapeForRe\ + gEx \$CertName ] . \"(\\\\W|\\\$)\")) \\\r\ + \n !(common-name=[]) ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$CertInChain common-\ + name ];\r\ + \n }\r\ + \n\r\ + \n :return true;\r\ + \n } on-error={\r\ + \n \$LogPrint debug \$ScriptName (\"Could not download certificate \ + file '\" . \$CertFileName . \"'.\");\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FormatInfo do={\r\ + \n :local Cert \$1;\r\ + \n\r\ + \n :global FormatLine;\r\ + \n :global FormatMultiLines;\r\ + \n :global IfThenElse;\r\ + \n\r\ + \n :local FormatExpire do={\r\ + \n :global CharacterReplace;\r\ + \n :return [ \$CharacterReplace [ \$CharacterReplace [ :tostr \$1 ] \ + \"w\" \"w \" ] \"d\" \"d \" ];\r\ + \n }\r\ + \n\r\ + \n :local FormatCertChain do={\r\ + \n :local Cert \$1;\r\ + \n\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n\r\ + \n :if ([ :typeof (\$CertVal->\"issuer\") ] = \"nothing\") do={\r\ + \n :return \"self-signed\";\r\ + \n }\r\ + \n\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=5 do={\r\ + \n :set Return (\$Return . [ \$ParseKeyValueStore (\$CertVal->\"iss\ + uer\") ]->\"CN\");\r\ + \n :if ([ :len [ /certificate/builtin/find where skid=(\$CertVal->\ + \"akid\") ] ] > 0) do={\r\ + \n :return \$Return;\r\ + \n }\r\ + \n :do {\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\ + \"akid\") ] ];\r\ + \n } on-error={\r\ + \n :return (\$Return . \" (possibly incomplete!)\");\r\ + \n }\r\ + \n :if ((\$CertVal->\"akid\") = \"\" || (\$CertVal->\"akid\") = (\$\ + CertVal->\"skid\")) do={\r\ + \n :return \$Return;\r\ + \n }\r\ + \n :set Return (\$Return . \" -> \");\r\ + \n }\r\ + \n :return (\$Return . \"...\");\r\ + \n }\r\ + \n\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Name\" (\$CertVal->\"name\") ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$CertVal->\"common-name\") ] > 0) ([ \$Fo\ + rmatLine \"CommonName\" (\$CertVal->\"common-name\") ] . \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$CertVal->\"subject-alt-name\") ] > 0) ([\ + \_\$FormatMultiLines \"SubjectAltNames\" (\$CertVal->\"subject-alt-name\")\ + \_] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \"Private key\" [ \$IfThenElse ((\$CertVal->\"priva\ + te-key\") = true) \"available\" \"missing\" ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \"Fingerprint\" (\$CertVal->\"fingerprint\") ] . \"\ + \\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$CertVal->\"ca\") ] > 0) [ \$FormatLine \ + \"Issuer\" (\$CertVal->\"ca\") ] [ \$FormatLine \"Issuer chain\" [ \$Forma\ + tCertChain \$Cert ] ] ] . \"\\n\" . \\\r\ + \n \"Validity:\\n\" . \\\r\ + \n [ \$FormatLine \" days\" (\$CertVal->\"days-valid\") ] . \"\\n\ + \" . \\\r\ + \n [ \$FormatLine \" from\" (\$CertVal->\"invalid-before\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" to\" (\$CertVal->\"invalid-after\") ] . \"\\n\ + \" . \\\r\ + \n [ \$FormatLine \" time left\" [ \$IfThenElse ((\$CertVal->\"exp\ + ired\") = true) \"expired\" [ \$FormatExpire (\$CertVal->\"expires-after\"\ + ) ] ] ]);\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ScriptLock \$ScriptName ] = false) do={\r\ + \n :set ExitOK true;\r\ + \n :error false;\r\ + \n }\r\ + \n# \$WaitFullyConnected;\r\ + \n\r\ + \n :foreach Cert in=[ /certificate/find where !revoked !ca !scep-url expi\ + res-after<\$CertRenewTime ] do={\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n :local LastName;\r\ + \n :local FetchName;\r\ + \n\r\ + \n :do {\r\ + \n :if ([ :len \$CertRenewUrl ] = 0) do={\r\ + \n \$LogPrint info \$ScriptName (\"No CertRenewUrl given.\");\r\ + \n :error false;\r\ + \n }\r\ + \n \$LogPrint info \$ScriptName (\"Attempting to renew certificate '\ + \" . (\$CertVal->\"name\") . \"'.\");\r\ + \n\r\ + \n :local ImportSuccess false;\r\ + \n :if ([ :len (\$CertVal->\"common-name\") ] > 0) do={\r\ + \n :set LastName (\$CertVal->\"common-name\");\r\ + \n :set FetchName \$LastName;\r\ + \n :set ImportSuccess [ \$CheckCertificatesDownloadImport \$ScriptN\ + ame \$LastName \$FetchName ];\r\ + \n }\r\ + \n :foreach SAN in=(\$CertVal->\"subject-alt-name\") do={\r\ + \n :if (\$ImportSuccess = false) do={\r\ + \n :set LastName [ :pick \$SAN ([ :find \$SAN \":\" ] + 1) [ :len\ + \_\$SAN ] ];\r\ + \n :set FetchName \$LastName;\r\ + \n :set ImportSuccess [ \$CheckCertificatesDownloadImport \$Scrip\ + tName \$LastName \$FetchName ];\r\ + \n :if (\$ImportSuccess = false && [ :pick \$LastName 0 2 ] = \"*\ + .\") do={\r\ + \n :set FetchName (\"star.\" . [ :pick \$LastName 2 [ :len \$La\ + stName ] ]);\r\ + \n :set ImportSuccess [ \$CheckCertificatesDownloadImport \$Scr\ + iptName \$LastName \$FetchName ];\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :if (\$ImportSuccess = false) do={ :error false; }\r\ + \n\r\ + \n :if ([ :len (\$CertVal->\"fingerprint\") ] > 0 && \$CertVal->\"fin\ + gerprint\" != [ /certificate/get \$Cert fingerprint ]) do={\r\ + \n \$LogPrint debug \$ScriptName (\"Certificate '\" . \$CertVal->\"\ + name\" . \"' was updated in place.\");\r\ + \n :set CertVal [ /certificate/get \$Cert ];\r\ + \n } else={\r\ + \n \$LogPrint debug \$ScriptName (\"Certificate '\" . \$CertVal->\"\ + name\" . \"' was not updated, but replaced.\");\r\ + \n\r\ + \n :local CertNew [ /certificate/find where name~(\"^\" . [ \$Escap\ + eForRegEx [ \$UrlEncode \$FetchName ] ] . \"\\\\.(p12|pem)_[0-9]+\\\$\") \ + \\\r\ + \n (common-name=(\$CertVal->\"common-name\") or subject-alt-name~\ + (\"(^|\\\\W)(DNS|IP):\" . [ \$EscapeForRegEx \$LastName ] . \"(\\\\W|\\\$)\ + \")) \\\r\ + \n fingerprint!=[ :tostr (\$CertVal->\"fingerprint\") ] ];\r\ + \n :local CertNewVal [ /certificate/get \$CertNew ];\r\ + \n\r\ + \n :if ((\$CertVal->\"expires-after\") > (\$CertNewVal->\"expires-a\ + fter\")) do={\r\ + \n /certificate/remove \$CertNew;\r\ + \n \$LogPrint warning \$ScriptName (\"Old certificate is newer th\ + an the new one. Aborting renew.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ((\$CertVal->\"private-key\") = true && (\$CertVal->\"privat\ + e-key\") != (\$CertNewVal->\"private-key\")) do={\r\ + \n /certificate/remove \$CertNew;\r\ + \n \$LogPrint warning \$ScriptName (\"Old certificate '\" . (\$Ce\ + rtVal->\"name\") . \"' has a private key, new certificate does not. Aborti\ + ng renew.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$CertificateAvailable ([ \$ParseKeyValueStore (\$CertNew\ + Val->\"issuer\") ]->\"CN\") \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$ScriptName (\"The certificate chain is no\ + t available!\");\r\ + \n }\r\ + \n\r\ + \n /ip/service/set certificate=(\$CertNewVal->\"name\") [ find wher\ + e certificate=(\$CertVal->\"name\") ];\r\ + \n\r\ + \n /ip/ipsec/identity/set certificate=(\$CertNewVal->\"name\") [ fi\ + nd where certificate=(\$CertVal->\"name\") ];\r\ + \n /ip/ipsec/identity/set remote-certificate=(\$CertNewVal->\"name\ + \") [ find where remote-certificate=(\$CertVal->\"name\") ];\r\ + \n\r\ + \n /ip/hotspot/profile/set ssl-certificate=(\$CertNewVal->\"name\")\ + \_[ find where ssl-certificate=(\$CertVal->\"name\") ];\r\ + \n\r\ + \n /certificate/remove \$Cert;\r\ + \n /certificate/set \$CertNew name=(\$CertVal->\"name\");\r\ + \n :set Cert \$CertNew;\r\ + \n :set CertVal [ /certificate/get \$CertNew ];\r\ + \n }\r\ + \n\r\ + \n \$SendNotification2 ({ origin=\$ScriptName; silent=true; \\\r\ + \n subject=([ \$SymbolForNotification \"lock-with-ink-pen\" ] . \"C\ + ertificate renewed: \" . (\$CertVal->\"name\")); \\\r\ + \n message=(\"A certificate on \" . \$Identity . \" has been renewe\ + d.\\n\\n\" . [ \$FormatInfo \$Cert ]) });\r\ + \n \$LogPrint info \$ScriptName (\"The certificate '\" . (\$CertVal->\ + \"name\") . \"' has been renewed.\");\r\ + \n } on-error={\r\ + \n \$LogPrint debug \$ScriptName (\"Could not renew certificate '\" .\ + \_(\$CertVal->\"name\") . \"'.\");\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach Cert in=[ /certificate/find where !revoked !scep-url !(expire\ + s-after=[]) \\\r\ + \n expires-after<\$CertWarnTime !(fingerprint=[]) ] do\ + ={\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n\r\ + \n :if ([ :len [ /certificate/scep-server/find where ca-cert=(\$CertVal\ + ->\"ca\") ] ] > 0) do={\r\ + \n \$LogPrint debug \$ScriptName (\"Certificate '\" . (\$CertVal->\"n\ + ame\") . \"' is handled by SCEP, skipping.\");\r\ + \n } else={\r\ + \n :local State [ \$IfThenElse ((\$CertVal->\"expired\") = true) \"ex\ + pired\" \"is about to expire\" ];\r\ + \n\r\ + \n \$SendNotification2 ({ origin=\$ScriptName; \\\r\ + \n subject=([ \$SymbolForNotification \"lock-with-ink-pen,warning-s\ + ign\" ] . \"Certificate warning: \" . (\$CertVal->\"name\")); \\\r\ + \n message=(\"A certificate on \" . \$Identity . \" \" . \$State . \ + \".\\n\\n\" . [ \$FormatInfo \$Cert ]) });\r\ + \n \$LogPrint info \$ScriptName (\"The certificate '\" . (\$CertVal->\ + \"name\") . \"' \" . \$State . \\\r\ + \n \", it is invalid after \" . (\$CertVal->\"invalid-after\") . \ + \".\");\r\ + \n }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ + \n}\r\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\ + \n# RouterOS script: AM-GlobalConfig\ + \n# Script comment: Global Config Script\ + \n# Copyright (c) 2007-2026 Vados \ + \n#\ + \n#\ + \n# Warning: Dont touch this line!\ + \n:global GlobalConfReady false;\ + \n#\ + \n#\ + \n# Global Url For Amster scripts to fetch\ + \n# most be defined in AM-Init-Script or AM-setup scripts\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\ + \n:global ScriptsUrlSuffix \"\";\ + \n:global CheckSumsVerify true;\ + \n\ + \n:global ScriptUpdatesCRLF true;\ + \n:global CommentsInScripts true;\ + \n\ + \n# Debug output:\ + \n:global PrintDebug true; #false;\ + \n\ + \n# Debug output for specific script:\ + \n:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\ + \n\ + \n# Debug logs\ + \n# Other actions (disk, email, remote or support) can be used as well.\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\ + \n#/system/logging/add topics=script,debug action=memory;\ + \n\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\ + \n:global Domain \"WORKGROUP\";\ + \n\ + \n:global EmailGeneralTo \"vados@vados.ru\";\ + \n#:global EmailGeneralCc \"\";\ + \n\ + \n# \$ScriptInstallUpdate mod/notification-telegram\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\ + \n# Use this to send notifications to a specific topic in group.\ + \n#:global TelegramThreadId \"30\";\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\ + \n# or user names. Groups allow to chat with devices simultaneously.\ + \n:global TelegramChatIdsTrusted {\ + \n \"454403445\"\ + \n \"-1003631309063\"\ + \n \"-5124482807\"\ + \n \"1087968824\";\ + \n};\ + \n# \"-5294757340\";\ + \n\ + \n:global TelegramChatGroups \"(all)\";\ + \n#:global TelegramChatGroups \"(all|home|office)\";\ + \n\ + \n:global NotificationFunctions {\ + \n \"email\"\ + \n \"telegram\";\ + \n};\ + \n# Toggle this to disable symbols in notifications.\ + \n:global NotificationsWithSymbols true;\ + \n:global TerminalColorOutput true;\ + \n\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\ + \n\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\ + \n:global updateChannel \"stable\";\ + \n\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\");\ + \n:global CertRenewTime 2w;\ + \n:global CertRenewPass {\ + \n \"\";\ + \n# \"v3ry-s3cr3t\";\ + \n# \"4n0th3r-s3cr3t\";\ + \n};\ + \n:global CertWarnTime 1w;\ + \n:global CertIssuedExportPass {\ + \n \"\";\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\ + \n};\ + \n\ + \n# Script BackupAndUpdate mode, possible values: backup,\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\ + \n# osnotify - Set `forceBackup` to always create backups on every run\ + \n:global DevInfoIncludeIP true;\ + \n:global BackupAndUpdateMode \"osnotify\"\ + \n\ + \n:global forceBackup true;\ + \n:global BackupPassword \"Peskar55\";\ + \n\ + \n# SFTP Backup Variables\ + \n:global BackupRandomDelay 0;\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\ + \n:global BackupUploadUser \$Identity;\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\ + \n\ + \n:global BackupSendBinary true;\ + \n:global BackupSendExport true;\ + \n:global BackupSendGlobalConfig true;\ + \n:global BackupSendScripts true;\ + \n\ + \n# Remove local file after uploading if no errors\ + \n:global BackupRmLocal true;\ + \n\ + \n# Local Backups Root Directory \ + \n:global BackupLocalRoot \"tmpfs\";\ + \n\ + \n# Encrypt Backup\ + \n:global BackupEncrypt true;\ + \n\ + \n# Sensitive information in Backups\ + \n:global BackupSens true;\ + \n\ + \n# User Export\ + \n:global BackupUser true;\ + \n\ + \n# License Export (not for CHR, will silently skip)\ + \n:global BackupLicense false;\ + \n\ + \n# SSH Keys\ + \n:global BackupSshKeys true;\ + \n\ + \n# Certificate Export\ + \n:global BackupCerts true;\ + \n\ + \n# Certificate Password\ + \n:global BackupCertsPasswd \"\";\ + \n\ + \n# User-Manager Export\ + \n:global BackupUserMan false;\ + \n\ + \n# The Dude Export\ + \n:global BackupDude false;\ + \n\ + \n# User Files to export, comma-separated string or array of strings\ + \n# User Files are not removed on backup\ + \n# Any directory paths will be removed (/ -> _) on remote file\ + \n# Nonpresent files are silently skipped\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\ + \n\ + \n# load functions and any custom scripts\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\ + \n#\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \n# :onerror Err {\ + \n# /system/script/run \$Script;\ + \n# } do={\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\ + \n# }\ + \n#}\ + \n#:log info \"\\ndevMode = \$devMode\";\ + \n#:log info \"\\ndevRunning = \$devRunning\";\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\ + \n :onerror Err {\ + \n /system/script/run \$Script;\ + \n } do={\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\ + \n }\ + \n}\ + \n\ + \n# signal we are ready\ + \n:set GlobalConfReady true;\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\ + \n" +add comment="Renew locally issued certificates" dont-require-permissions=no \ + name=AM-CertsRenew owner=AM-CertsRenew policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-CertsRenew\r\ + \n# Script comment: Renew locally issued certificates\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n#\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n :global CertIssuedExportPass;\r\ + \n\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global ScriptLock;\r\ + \n\r\ + \n# Add this Script scheduler\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n:log warning (\"System Scheduler for script: \" . \$ScriptName . \" is N\ + OT SET! Fix It Now!\");\r\ + \n:local OnEvent \"/system/script/run \$ScriptName;\";\r\ + \n:local Comment \"Every Day Check For Update Local Issued Certificates.\"\ + ;\r\ + \n#/system/scheduler/add name=\$ScriptName comment=\$Comment start-time=st\ + artup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n :if ([ \$ScriptLock \$ScriptName ] = false) do={\r\ + \n :set ExitOK true;\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :foreach Cert in=[ /certificate/find where issued expires-after<3w ] d\ + o={\r\ + \n :local CertVal [ /certificate/get \$Cert ];\r\ + \n /certificate/issued-revoke \$Cert;\r\ + \n /certificate/set name=(\$CertVal->\"name\" . \"-revoked-\" . [ /syst\ + em/clock/get date ]) \$Cert;\r\ + \n /certificate/add name=(\$CertVal->\"name\") common-name=(\$CertVal->\ + \"common-name\") \\\r\ + \n key-usage=(\$CertVal->\"key-usage\") subject-alt-name=(\$CertVal\ + ->\"subject-alt-name\");\r\ + \n /certificate/sign (\$CertVal->\"name\") ca=(\$CertVal->\"ca\");\r\ + \n :if ([ :typeof (\$CertIssuedExportPass->(\$CertVal->\"common-name\")\ + ) ] = \"str\") do={\r\ + \n :if ([ \$MkDir \"cert-issued\" ] = true) do={\r\ + \n /certificate/export-certificate (\$CertVal->\"name\") type=pkcs1\ + 2 \\\r\ + \n file-name=(\"cert-issued/\" . \$CertVal->\"common-name\") \\\ + \r\ + \n export-passphrase=(\$CertIssuedExportPass->(\$CertVal->\"com\ + mon-name\"));\r\ + \n \$LogPrint info \$ScriptName (\"Issued a new certificate for '\"\ + \_. \$CertVal->\"common-name\" . \\\r\ + \n \"', exported to 'cert-issued/\" . \$CertVal->\"common-name\" \ + . \".p12'.\");\r\ + \n } else={\r\ + \n \$LogPrint warning \$ScriptName (\"Failed creating directory, no\ + t exporting certificate.\");\r\ + \n }\r\ + \n } else={\r\ + \n \$LogPrint info \$ScriptName (\"Issued a new certificate for '\" .\ + \_\$CertVal->\"common-name\" . \"'.\");\r\ + \n }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ + \n}\r\ + \n" +add comment="Update and Backup send notification to EMail" \ + dont-require-permissions=no name=AM-Backup-UpdateEmail owner=\ + AM-Backup-UpdateEmail policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-Backup-UpdateEmail\r\ + \n# Script comment: Update and Backup send notification to EMail\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n# requires RouterOS, version>=6.43.7\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# Updated: 15/04/2025\r\ + \n# Website: https://github.com/beeyev\r\ + \n# Notification e-mail (Make sure you have configured Email settings in T\ + ools -> Email)\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n:local IfThenElse do={:if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] \ + = true) do={:return \$2}; :return \$3;}\r\ + \n:local EitherOr do={\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:if ((\$1 != 0) = true) do={:retur\ + n \$1} else={:return \$2};}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:if ((\$1 > 0s) = true) do={:retu\ + rn \$1} else={:return \$2};}\r\ + \n :if ([ :len [ :tostr \$1 ] ] > 0) do={:return \$1} else={:return \$2};\ + \r\ + \n}\r\ + \n:local ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :if (\$ExitOK = \"false\") do={:log error (\$Name [ \$IfThenElse ([ :p\ + ick \$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:global LogPrint;\r\ + \n:global EditSchedulers;\r\ + \n:global DevInfoIncludeIP;\r\ + \n\r\ + \n:local SchedInterval \"7d\";\r\ + \n:local SchedStartTime \"03:41:27\";\r\ + \n:local SchedComment \"Every 7 Day Check For Update and Backup send notif\ + ication to EMail.\";\r\ + \n\r\ + \n# Function to add or edit schedulers for scripts, to ensure they are set\ + \_up correctly\r\ + \n# How to use:\r\ + \n# Call this function with the following parameters:\r\ + \n# 1. \$1 - Scheduler name (usually same as script name) [*]\r\ + \n# 2. \$2 - Interval (e.g. \"1d\" (default is \"1d\")) [**]\r\ + \n# 3. \$3 - Start Time (e.g. \"00:00:00\", default is current time) [**]\ + \r\ + \n# 4. \$4 - Comment (optional, default: \"Scheduler for script: \")\ + \_[**]\r\ + \n# 5. \$5 - On Event command (e.g. \"/system/script { run ; }\" (de\ + fault is \"/system/script { run \$SchedName; }\")) [**]\r\ + \n# 6. \$6 - Policy (e.g. \"ftp,reboot,read,write,policy,test,password,sni\ + ff,sensitive,romon\" (default is the same)) [**]\r\ + \n# 7. \$7 - Start Date (e.g. \"jan/01/1970\", default is current date) [*\ + *]\r\ + \n# Notes:\r\ + \n# * - Scheduler name is required, and is used to identify the scheduler\ + \_to create or edit. It is usually the same as the script name (\$ScriptNa\ + me).\r\ + \n# ** - If optional parameters are not provided, default values will be u\ + sed.\r\ + \n# This allows for quick setup with minimal parameters, while still \ + providing flexibility for customization.\r\ + \n# Example usage:\r\ + \n# :if ([ \$EditSchedulers \"my-script\" ] = false) do={:set ExitOK false\ + ; :error true;}\r\ + \n# :if ([ \$EditSchedulers \"my-script\" \"1d\" \"03:41:27\" \"My custom \ + scheduler comment\" false false \"jan/01/1970\" ] = false) do={:set ExitOK\ + \_false; :error true;}\r\ + \n\r\ + \n:set EditSchedulers do={\r\ + \n :local SchedName [ :tostr \$1 ];\r\ + \n :if ([ :len \$SchedName ] = 0) do={ :return false; }\r\ + \n :local Interval [ :tostr \$2 ];\r\ + \n :if ([ :len \$Interval ] = 0) do={ :set Interval \"1d\"; }\r\ + \n :local StartTime [ :tostr \$3 ];\r\ + \n :if ([ :len \$StartTime ] = 0) do={ :set StartTime [/system/clock/get \ + time]; }\r\ + \n :local Comment [ :tostr \$4 ];\r\ + \n :if ([ :len \$Comment ] = 0) do={ :set Comment \"Scheduler for script:\ + \_\$SchedName\"; }\r\ + \n :local OnEvent [ :tostr \$5 ];\r\ + \n :if ([ :len \$OnEvent ] = 0) do={ :set OnEvent \"/system/script { run \ + \$SchedName; }\"; }\r\ + \n :local Policy [ :tostr \$6 ];\r\ + \n :if ([ :len \$Policy ] = 0) do={ :set Policy \"ftp,reboot,read,write,p\ + olicy,test,password,sniff,sensitive,romon\"; }\r\ + \n :local StartDate [ :tostr \$7 ];\r\ + \n :if ([ :len \$StartDate ] = 0) do={ :set StartDate [/system/clock/get \ + date]; }\r\ + \n\r\ + \n :onerror Err {\r\ + \n # Check if scheduler exists, if not - create it\r\ + \n :if ([ :len [ /system/scheduler/find where name=\$SchedName ] ] = 0)\ + \_do={\r\ + \n :log warning (\$SchedName . \"System Scheduler for script: \" . \$\ + SchedName . \" is NOT SET! Fix It Now!\");\r\ + \n /system/scheduler/add comment=\$Comment interval=\$Interval name=\ + \$SchedName on-event=\$OnEvent policy=\$Policy start-date=\$StartDate star\ + t-time=\$StartTime;\r\ + \n }\r\ + \n # Check if scheduler parameters are correct, if not - fix them\r\ + \n :if ([ /system/scheduler/get \$SchedName comment ] != \$Comment) do=\ + {\r\ + \n /system/scheduler/set \$SchedName comment=\$Comment;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName interval ] != \$Interval) d\ + o={\r\ + \n /system/scheduler/set \$SchedName interval=\$Interval;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName on-event ] != \$OnEvent) do\ + ={\r\ + \n /system/scheduler/set \$SchedName on-event=\$OnEvent;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName policy ] != \$Policy) do={\ + \r\ + \n /system/scheduler/set \$SchedName policy=\$Policy;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName start-date ] != \$StartDate\ + ) do={\r\ + \n /system/scheduler/set \$SchedName start-date=\$StartDate;\r\ + \n }\r\ + \n :if ([ /system/scheduler/get \$SchedName start-time ] != \$StartTime\ + ) do={\r\ + \n /system/scheduler/set \$SchedName start-time=\$StartTime;\r\ + \n }\r\ + \n } do={:log error (\$SchedName . \"Failed to add/modify scheduler for '\ + \" . \$SchedName . \"' failed: \" . \$Err); :return false};\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:if ([ \$EditSchedulers \$ScriptName \$SchedInterval \$SchedStartTime \$\ + SchedComment ] = false) do={\r\ + \n :log error (\$ScriptName . \"Failed to add/modify scheduler for \" . \ + \$ScriptName . \"!\");\r\ + \n :set ExitOK true;\r\ + \n :error true;\r\ + \n}\r\ + \n\r\ + \n# Local Function CheckOSUpdateMode\r\ + \n:local CheckOSUpdateMode;\r\ + \n:set CheckOSUpdateMode do={\r\ + \n :local NewMode [ :tostr \$1 ];\r\ + \n :if ([ :len \$NewMode ] = 0) do={\r\ + \n :log error (\$0 . \"/nFunction /\$CheckOSUpdateMode received empty v\ + alue!\");\r\ + \n :return false;\r\ + \n :error true;\r\ + \n }\r\ + \n\r\ + \n :global BackupAndUpdateMode;\r\ + \n :global OldMode [ :tostr \$BackupAndUpdateMode ];\r\ + \n :if (\$NewMode != \$BackupAndUpdateMode && \$NewMode = \"updateOnce\")\ + \_do={\r\ + \n :set BackupAndUpdateMode [ :tostr \$NewMode ];\r\ + \n :log info (\$0 . \"/nOk. /\$BackupAndUpdateMode set to: '\" . \$NewM\ + ode . \"'.\\nYou're a good boy! ))\\nI'm launching the update in 5 seconds\ + .\");\r\ + \n :delay 5;\r\ + \n /system/script { run \$ScriptName; };\r\ + \n } else={\r\ + \n :log warning (\$0 . \"/nFunction /\$CheckOSUpdateMode received value: \ + '\" . \$NewMode . \"', but is may be only \\\"updateOnce\\\"!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n :error false;\r\ + \n}\r\ + \n\r\ + \n# :if ([ :len [ /system/scheduler/find where name=\"running-from-backup\ + -partition\" ] ] > 0) do={\r\ + \n# \$LogPrint warning \$ScriptName (\"Running from backup partition, r\ + efusing to act.\");\r\ + \n# :set ExitOK true;\r\ + \n# :error false;\r\ + \n# }\r\ + \n\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n:global forceBackup;\r\ + \n:global BackupPassword;\r\ + \n:global BackupSens;\r\ + \n:global updateChannel;\r\ + \n\r\ + \n:global DevInfoIncludeIP;\r\ + \n\r\ + \n# Installs patch updates only (BackupAndUpdateMode = \"osupdate\").\r\ + \n# Works for `stable` and `long-term` channels.\r\ + \n# Updates only if MAJOR.MINOR match (e.g. 6.43.2 > 6.43.6 allowed, 6.44.\ + 1 skipped).\r\ + \n# Sends info if a newer (non-patch) version is found.\r\ + \n:local installOnlyPatchUpdates false\r\ + \n:local scriptVersion \"26.02.12\"\r\ + \n\r\ + \n#Script messages prefix\r\ + \n:local SMP \"BkpAndUpdate:\";\r\ + \n\r\ + \n:local exitErrorMessage \"\$SMP script stopped due to an error. Please c\ + heck logs for more details.\";\r\ + \n:log info \"\\n\\n\$SMP Script \\\"Mikrotik RouterOS automatic backup & \ + update\\\" v.\$scriptVersion started.\";\r\ + \n:log info \"\$SMP Script Mode: `\$BackupAndUpdateMode`, Update channel: \ + `\$updateChannel`, Force backup: `\$forceBackup`, Install only patch updat\ + es: `\$installOnlyPatchUpdates`\";\r\ + \n\r\ + \n## vv FUNCTIONS vv ##\r\ + \n:global WaitCheckUpdates; \$WaitCheckUpdates;\r\ + \n:global MiniDateTimeStamp;\r\ + \n:local MDTSFix [\$MiniDateTimeStamp];\r\ + \n:global Identity;\r\ + \n:global IdentityShort;\r\ + \n:global devBoardName;\r\ + \n:global runningVersion;\r\ + \n:global runningChannel;\r\ + \n:global devModel;\r\ + \n:global devRbSerialNumber;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n\r\ + \n# Checks if two RouterOS version strings differ only by the patch versio\ + n\r\ + \n# :put [\$FuncIsPatchUpdateOnly \"6.2.1\" \"6.2.4\"] # Output: true\r\ + \n# :put [\$FuncIsPatchUpdateOnly \"6.2.1\" \"6.3.1\"] # Output: false\r\ + \n:local FuncIsPatchUpdateOnly do={\r\ + \n :local ver1 \$1;\r\ + \n :local ver2 \$2;\r\ + \n # Extract the major and minor components from a version\r\ + \n :local extractMajorMinor do={\r\ + \n :local ver \$1;\r\ + \n :local dot1 [:find \$ver \".\"];\r\ + \n :if (\$dot1 = -1) do={:return \$ver}\r\ + \n :local major [:pick \$ver 0 \$dot1];\r\ + \n :local rest [:pick \$ver (\$dot1 + 1) [:len \$ver]];\r\ + \n :local dot2 [:find \$rest \".\"];\r\ + \n :local minor \$rest;\r\ + \n :if (\$dot2 >= 0) do={:set minor [:pick \$rest 0 \$dot2]}\r\ + \n :return (\$major . \".\" . \$minor);\r\ + \n }\r\ + \n\r\ + \n# Compare the major and minor components of both version strings\r\ + \n:if ([\$extractMajorMinor \$ver1] = [\$extractMajorMinor \$ver2]) do={:r\ + eturn true}\r\ + \n :return false;\r\ + \n}\r\ + \n# Creates backups and returns array of names\r\ + \n# Possible arguments:\r\ + \n# \$1 - file name, without extension\r\ + \n# \$2 - password (optional)\r\ + \n# \$3 - sensitive data in config (optional, default: false)\r\ + \n# Example:\r\ + \n#:put [\$FuncCreateBackups \$backupName]\r\ + \n:local FuncCreateBackups do={\r\ + \n :local backupName [ :tostr \$1 ];\r\ + \n :local BackPass \$2;\r\ + \n :local BackSens \$3;\r\ + \n\r\ + \n #Script messages prefix\r\ + \n :local SMP \"BkpAndUpdate:\";\r\ + \n :local exitErrorMessage \"\$SMP script stopped due to an error. Please\ + \_check logs for more details.\";\r\ + \n :log info (\"\$SMP global function `FuncCreateBackups` started, input:\ + \_`\$backupName`\");\r\ + \n\r\ + \n # validate required parameter: backupName\r\ + \n :if ([:typeof \$backupName] != \"str\" or [:len \$backupName] = 0) do=\ + {\r\ + \n :log error \"\$SMP parameter 'backupName' is required and must be a \ + non-empty string\";\r\ + \n# :log warning \"\$SMP parameter '\\\$backupName' is required and mus\ + t be a non-empty string.\\nI set '\\\$backupName' to 'default-backup'\";\r\ + \n# :set \$backupName \"default-backup\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n\r\ + \n :local backupFileSys \"\$backupName.backup\";\r\ + \n :local backupFileConfig \"\$backupName.rsc\";\r\ + \n :local backupNames {\$backupFileSys;\$backupFileConfig};\r\ + \n\r\ + \n ## Perform system backup\r\ + \n :if ([:len \$BackPass] = 0) do={\r\ + \n :log info (\"\$SMP starting backup without password, backup name: `\ + \$backupName`\");\r\ + \n /system backup save dont-encrypt=yes name=\$backupName;\r\ + \n } else={\r\ + \n :log info (\"\$SMP starting backup with password, backup name: `\$ba\ + ckupName`\");\r\ + \n /system backup save password=\$BackPass name=\$backupName;\r\ + \n }\r\ + \n :log info (\"\$SMP system backup created: `\$backupFileSys`\");\r\ + \n ## Export config file\r\ + \n :if (\$BackSens = true) do={\r\ + \n :log info (\"\$SMP starting export config with sensitive data, backu\ + p name: `\$backupName`\");\r\ + \n # Since RouterOS v7 it needs to be explicitly set that we want to ex\ + port sensitive data\r\ + \n :if ([:pick [/system resource get version] 0 1] < 7) do={\r\ + \n :execute \"/export compact terse file=\$backupName\";\r\ + \n } else={\r\ + \n :execute \"/export compact show-sensitive terse file=\$backupName\ + \";\r\ + \n }\r\ + \n } else={\r\ + \n :log info (\"\$SMP starting export config without sensitive data, ba\ + ckup name: `\$backupName`\");\r\ + \n /export compact hide-sensitive terse file=\$backupName;\r\ + \n }\r\ + \n :log info (\"\$SMP Config export complete: `\$backupFileConfig`\");\r\ + \n :log info (\"\$SMP Waiting a little to ensure backup files are written\ + \");\r\ + \n :delay 20;\r\ + \n :if ([:len [/file find name=\$backupFileSys]] > 0) do={\r\ + \n :log info (\"\$SMP system backup file successfully saved to the file\ + \_system: `\$backupFileSys`\");\r\ + \n } else={\r\ + \n :log error (\"\$SMP system backup was not created, file does not exi\ + st: `\$backupFileSys`\");\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n :if ([:len [/file find name=\$backupFileConfig]] > 0) do={\r\ + \n :log info (\"\$SMP config backup file successfully saved to the file\ + \_system: `\$backupFileConfig`\");\r\ + \n } else={\r\ + \n :log error (\"\$SMP config backup was not created, file does not exi\ + st: `\$backupFileConfig`\");\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n :log info (\"\$SMP global function `FuncCreateBackups` finished. Creat\ + ed backups, system: `\$backupFileSys`, config: `\$backupFileConfig`\")\r\ + \n :return \$backupNames;\r\ + \n}\r\ + \n# Sends an email\r\ + \n# Parameters:\r\ + \n# \$1 - to (email address)\r\ + \n# \$2 - subject\r\ + \n# \$3 - body\r\ + \n# \$4 - file attachments (optional; pass \"\" if not needed)\r\ + \n#\r\ + \n# Example:\r\ + \n# \$FuncSendEmailSafe \"admin@domain.com\" \"Backup Done\" \"Backup comp\ + lete.\" \"backup1.backup\"\r\ + \n:local FuncSendEmailSafe do={\r\ + \n :global EmailGeneralTo;\r\ + \n :local emailSubject \$2;\r\ + \n :local emailBody \$3;\r\ + \n :local emailAttachments \$4;\r\ + \n :local SMP \"Bkp&Upd:\";\r\ + \n :local exitErrorMessage \"\$SMP script stopped due to an error. Please\ + \_check logs for more details.\";\r\ + \n :log info \"\$SMP Attempting to send email to `\$EmailGeneralTo`\";\r\ + \n # SAFETY: wait for any previously queued email to finish\r\ + \n :local waitTimeoutPre 60;\r\ + \n :local waitCounterPre 0;\r\ + \n :while (([/tool e-mail get last-status] = \"resolving-dns\" or [/tool \ + e-mail get last-status] = \"in-progress\")) do={\r\ + \n :if (\$waitCounterPre >= \$waitTimeoutPre) do={\r\ + \n :log error \"\$SMP Email send aborted: previous send did not compl\ + ete after \$waitTimeoutPre seconds\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n :log info \"\$SMP Waiting for previous email to finish (status: \$[/\ + tool e-mail get last-status])...\";\r\ + \n :delay 1; \r\ + \n :set waitCounterPre (\$waitCounterPre + 1);\r\ + \n }\r\ + \n # Send the email\r\ + \n :do {\r\ + \n /tool e-mail send to=\$EmailGeneralTo subject=\$emailSubject body=\$\ + emailBody file=\$emailAttachments;\r\ + \n } on-error={\r\ + \n :log error \"\$SMP Email send command failed to execute. Check logs \ + and verify email settings.\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n # Wait for send status to change from \"in-progress\" / \"resolving-dn\ + s\"\r\ + \n :local waitTimeout 60;\r\ + \n :local waitCounter 0;\r\ + \n :local emailStatus \"\";\r\ + \n :log info \"\$SMP Waiting for email to be sent, timeout in `\$waitTime\ + out` seconds...\";\r\ + \n :while (\$waitCounter < \$waitTimeout) do={\r\ + \n :set emailStatus [/tool e-mail get last-status];\r\ + \n :if (\$emailStatus != \"in-progress\" and \$emailStatus != \"resolvi\ + ng-dns\") do={\r\ + \n :log info \"\$SMP Email send status received: \$emailStatus\";\r\ + \n # exit loop\r\ + \n :set waitCounter \$waitTimeout;\r\ + \n } else={:delay 1; :set waitCounter (\$waitCounter + 1)}\r\ + \n }\r\ + \n # Final decision based on last status\r\ + \n :if (\$emailStatus = \"succeeded\") do={\r\ + \n :log info \"\$SMP Email successfully sent to `\$EmailGeneralTo`\";\ + \r\ + \n } else={\r\ + \n :log error \"\$SMP Email failed to send. Status: `\$emailStatus`. Ch\ + eck logs for more details and verify email settings.\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n}\r\ + \n# Global variable to track current update step\r\ + \n# They need to be initialized here first to be available in the script\r\ + \n:global buGlobalVarTargetOsVersion;\r\ + \n:global buGlobalVarScriptStep;\r\ + \n:local scriptStep \$buGlobalVarScriptStep;\r\ + \n:do {\r\ + \n /system/script/environment remove buGlobalVarScriptStep;\r\ + \n} on-error={}\r\ + \n:if ([:len \$scriptStep] = 0) do={\r\ + \n :set scriptStep 1;\r\ + \n}\r\ + \n## ^^ FUNCTIONS ^^ ##\r\ + \n#\r\ + \n# Initial validation\r\ + \n## Check email settings\r\ + \n:if ([:len \$EmailGeneralTo] < 3) do={\r\ + \n :log error (\"\$SMP Parameter `\\\$EmailGeneralTo` is not set, or cont\ + ains invalid value. Script stopped.\");\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n# Values will be defined later in the script\r\ + \n:local emailServer \"\";\r\ + \n:local emailFromAddress [/tool e-mail get from];\r\ + \n:log info \"\$SMP Validating email settings...\";\r\ + \n:do {\r\ + \n :set emailServer [/tool e-mail get server];\r\ + \n} on-error={\r\ + \n # This is a workaround for the RouterOS v7.12 and older versions\r\ + \n :set emailServer [/tool e-mail get address];\r\ + \n}\r\ + \n:if (\$emailServer = \"0.0.0.0\") do={\r\ + \n :log error (\"\$SMP Email server address is not correct: `\$emailServe\ + r`, check `Tools -> Email`. Script stopped.\");\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n:if ([:len \$emailFromAddress] < 3) do={\r\ + \n :log error (\"\$SMP Email configuration FROM address is not correct: `\ + \$emailFromAddress`, check `Tools -> Email`. Script stopped.\");\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n# Script mode validation\r\ + \n:if (\$BackupAndUpdateMode != \"backup\" and \$BackupAndUpdateMode != \"\ + osupdate\" and \$BackupAndUpdateMode != \"updateOnce\" and \$BackupAndUpda\ + teMode != \"osnotify\") do={\r\ + \n :log error (\"\$SMP Script parameter `\\\$BackupAndUpdateMode` is not \ + set, or contains invalid value: `\$BackupAndUpdateMode`. Script stopped.\"\ + );\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n# Update channel validation\r\ + \n:if (\$updateChannel != \"stable\" and \$updateChannel != \"long-term\" \ + and \$updateChannel != \"testing\" and \$updateChannel != \"development\")\ + \_do={\r\ + \n :log error (\"\$SMP Script parameter `\\\$updateChannel` is not set, o\ + r contains invalid value: `\$updateChannel`. Script stopped.\");\r\ + \n :error \$exitErrorMessage;\r\ + \n}\r\ + \n# Verify if script is set to install patch updates and if the update cha\ + nnel is valid\r\ + \n:if ((\$BackupAndUpdateMode = \"osupdate\" or \$BackupAndUpdateMode = \"\ + updateOnce\") and \$installOnlyPatchUpdates = true) do={\r\ + \n :if (\$updateChannel != \"stable\" and \$updateChannel != \"long-term\ + \") do={\r\ + \n :log error (\"\$SMP Patch-only updates enabled, but update channel `\ + \$updateChannel` is invalid. Only `stable` and `long-term` are supported. \ + Script stopped\");\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n \r\ + \n :if (\$runningChannel != \"stable\" and \$runningChannel != \"long-ter\ + m\") do={\r\ + \n :log error (\"\$SMP Script is set to install only patch updates, but\ + \_the installed RouterOS version is not from `stable` or `long-term` chann\ + el: `\$runningChannel`. Script stopped\");\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n}\r\ + \n#\r\ + \n\r\ + \n:local rawTime [/system clock get time];\r\ + \n:local rawDate [/system clock get date];\r\ + \n\r\ + \n:local deviceOsVerAndChannelRunning [/system/resource/get version];\r\ + \n\r\ + \n:local backupNameTemplate (\"backup_v\" . \$runningVersion . \"_\" .\ + \_\$runningChannel . \"_\" . \$MDTSFix);\r\ + \n:local backupNameBeforeUpdate (\$backupNameTemplate . \"_before_update\"\ + );\r\ + \n:local backupNameAfterUpdate (\$backupNameTemplate . \"_after_update\")\ + ;\r\ + \n\r\ + \n## Email body template\r\ + \n:local mailSubjectPrefix \"\$SMP Device - `\$IdentityShort`\";\r\ + \n:local mailBodyCopyright \"Mikrotik RouterOS automatic backup & update \ + (ver. \$scriptVersion) \\nhttps://github.com/beeyev/Mikrotik-RouterOS-auto\ + matic-backup-and-update\";\r\ + \n:local changelogUrl \"Check RouterOS changelog: https://mikrotik.com\ + /download/changelogs/\";\r\ + \n:local mailBodyDeviceInfo \"\";\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"Device information:\")\ + ;\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\n-------------------\ + --\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nName: \$Identity\")\ + ;\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nModel: \$devModel\"\ + );\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nBoard: \$devBoardNa\ + me\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nSerial number: \$de\ + vRbSerialNumber\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nRouterOS version: v\ + \$deviceOsVerAndChannelRunning\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nBuild time: \$[/sys\ + tem/resource/get build-time]\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nRouterboard FW Avai\ + lable: \$ROsVerAvail\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nDevice date-time: \ + \$rawDate \$rawTime (\$[/system/clock/get time-zone-name ])\");\r\ + \n:set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nUptime: \$[/system/\ + resource/get uptime]\");\r\ + \n## IP address detection\r\ + \n:if ([ \$DevInfoIncludeIP ] = true) do={\r\ + \n :global GetPubIp;\r\ + \n :local PublicIpAddress [ \$GetPubIp ];\r\ + \n :set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nPublic IP address\ + : \$PublicIpAddress\");\r\ + \n :log info \"\$SMP Public IP address detected: \$PublicIpAddress\";\r\ + \n} \r\ + \n\r\ + \n:local mailAttachments [:toarray \"\"];\r\ + \n:if (\$scriptStep = 1 or \$scriptStep = 3) do={\r\ + \n :if (\$scriptStep = 3) do={\r\ + \n :log info (\"\$SMP Waiting for one minute before continuing to the f\ + inal step.\");\r\ + \n :delay 1m;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n## STEP 1: Create backups, check for new RouterOS, and send email\r\ + \n## Steps 2\C3\A23 run only if auto-update is enabled and a new version i\ + s available\r\ + \n:if (\$scriptStep = 1) do={\r\ + \n :global BackupPassword;\r\ + \n :global BackupSens;\r\ + \n :local isNewOsUpdateAvailable false;\r\ + \n :local isLatestOsAlreadyInstalled true;\r\ + \n :local isOsNeedsToBeUpdated false;\r\ + \n :local isUpdateCheckSucceeded false;\r\ + \n :local isEmailNeedsToBeSent false;\r\ + \n :local mailSubjectPartAction \"\";\r\ + \n :local mailPtBodyAction \"\";\r\ + \n :local mailPtSubjectBackup \"\";\r\ + \n :local mailPtBodyBackup \"\";\r\ + \n # Checking for new version\r\ + \n :if (\$BackupAndUpdateMode = \"osupdate\" or \$BackupAndUpdateMode = \ + \"osnotify\" or \$BackupAndUpdateMode = \"updateOnce\") do={\r\ + \n :log info (\"\$SMP Setting update channel to `\$updateChannel`\");\r\ + \n /system/package/update/set channel=\$updateChannel;\r\ + \n :log info (\"\$SMP Checking for new RouterOS version. Current instal\ + led version is: `\$runningVersion`\");\r\ + \n \$LogPrint debug \$ScriptName (\"Checking for updates...\");\r\ + \n \r\ + \n# /system/package/update/check-for-updates without-paging as-value;\ + \r\ + \n# /system/package/update check-for-updates;\r\ + \n :delay 5s;\r\ + \n :set PkgUpdStatus [ /system/package/update/get status ];\r\ + \n :if (\$PkgUpdStatus = \"New version is available\") do={\r\ + \n :set ROsVerAvail [/system/package/update/get latest-version];\r\ + \n }\r\ + \n\r\ + \n :if (\$PkgUpdStatus = \"New version is available\") do={\r\ + \n :log info (\"\$SMP New RouterOS version is available: `\$ROsVerAva\ + il`\");\r\ + \n :set isNewOsUpdateAvailable true;\r\ + \n :set isLatestOsAlreadyInstalled false;\r\ + \n :set isUpdateCheckSucceeded true;\r\ + \n :set isEmailNeedsToBeSent true;\r\ + \n :set mailSubjectPartAction \"New RouterOS available\";\r\ + \n :set mailPtBodyAction \"New RouterOS version is available, curren\ + t version: v\$runningVersion, new version: v\$ROsVerAvail. \\n\$changelogU\ + rl\";\r\ + \n } else={\r\ + \n :if (\$PkgUpdStatus = \"System is already up to date\") do={\r\ + \n :log info (\"\$SMP No new RouterOS version is available, the lat\ + est version is already installed: `v\$runningVersion`\");\r\ + \n :set isUpdateCheckSucceeded true;\r\ + \n :set mailSubjectPartAction \"No os update available\";\r\ + \n :set mailPtBodyAction \"No new RouterOS version is available, t\ + he latest version is already installed: `v\$runningVersion`\";\r\ + \n } else={\r\ + \n :log error (\"\$SMP Failed to check for new RouterOS version. Pa\ + ckage check status: `\$PkgUpdStatus`\");\r\ + \n :set isEmailNeedsToBeSent true;\r\ + \n :set mailSubjectPartAction \"Error unable to check new os versio\ + n\";\r\ + \n :set mailPtBodyAction \"An error occurred while checking for a \ + new RouterOS version.\\nStatus returned: `\$PkgUpdStatus`\\n\\nPlease revi\ + ew the logs on the device for more details and verify internet connectivit\ + y.\";\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n # Checking if the script needs to install new os version\r\ + \n :if ((\$BackupAndUpdateMode = \"osupdate\" or \$BackupAndUpdateMode = \ + \"updateOnce\") and \$isNewOsUpdateAvailable = true) do={\r\ + \n :if (\$installOnlyPatchUpdates = true) do={\r\ + \n :if ([\$FuncIsPatchUpdateOnly \$runningVersion \$ROsVerAvail] = tr\ + ue) do={\r\ + \n :log info \"\$SMP New RouterOS version is available, and it is a\ + \_patch update. Current version: v\$runningVersion, new version: v\$ROsVer\ + Avail\";\r\ + \n :set isOsNeedsToBeUpdated true;\r\ + \n } else={\r\ + \n :log info \"\$SMP The script will not install this update, becau\ + se it is not a patch update. Current version: v\$runningVersion, new versi\ + on: v\$ROsVerAvail\";\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nThis update wil\ + l not be installed, because the script is set to install only patch update\ + s.\");\r\ + \n }\r\ + \n } else={\r\ + \n :set isOsNeedsToBeUpdated true;\r\ + \n }\r\ + \n }\r\ + \n # Checking If the script needs to create a backup\r\ + \n :if (\$forceBackup = true or \$BackupAndUpdateMode = \"backup\" or \$i\ + sOsNeedsToBeUpdated = true) do={\r\ + \n :log info (\"\$SMP Starting backup process.\");\r\ + \n :set isEmailNeedsToBeSent true;\r\ + \n :local backupName \$backupNameTemplate;\r\ + \n # This means it's the first step where we create a backup before the\ + \_update process\r\ + \n :if (\$isOsNeedsToBeUpdated = true) do={\r\ + \n :set backupName \$backupNameBeforeUpdate;\r\ + \n #Email body if the purpose of the script is to update the device\r\ + \n :set mailSubjectPartAction \"Update preparation\";\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nThe update proces\ + s for device '\$Identity' is scheduled to upgrade RouterOS from version v.\ + \$runningVersion to version v.\$ROsVerAvail (Update channel: \$updateChann\ + el)\");\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nPlease note: The \ + update will proceed only after a successful backup.\");\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nA final report wi\ + th detailed information will be sent once the update process is completed.\ + \");\r\ + \n :set mailPtBodyAction (\$mailPtBodyAction . \"\\nIf you do not rec\ + eive a second email within the next 10 minutes, there may be an issue. Ple\ + ase check your device logs for further information.\");\r\ + \n }\r\ + \n :do {\r\ + \n :set mailAttachments [\$FuncCreateBackups \$backupName \$BackupPas\ + sword \$BackupSens];\r\ + \n :set mailPtSubjectBackup \"Backup created\";\r\ + \n :set mailPtBodyBackup \"System backups have been successfully crea\ + ted and attached to this email.\";\r\ + \n } on-error={\r\ + \n :set isOsNeedsToBeUpdated false;\r\ + \n :set mailPtSubjectBackup \"Backup failed\";\r\ + \n :set mailPtBodyBackup \"The script failed to create backups. Pleas\ + e check device logs for more details.\";\r\ + \n :log warning \"\$SMP Backup creation failed. Update process will b\ + e canceled if automatic update is enabled\";\r\ + \n }\r\ + \n }\r\ + \n :if (\$isEmailNeedsToBeSent = true) do={\r\ + \n :log info \"\$SMP Preparing to send email...\";\r\ + \n :local mailStep1Subject \$mailSubjectPrefix;\r\ + \n :local mailStep1Body \"\";\r\ + \n # subject\r\ + \n :if (\$mailSubjectPartAction != \"\") do={:set mailStep1Subject (\$\ + mailStep1Subject . \" - \" . \$mailSubjectPartAction)}\r\ + \n :if (\$mailPtSubjectBackup != \"\") do={:set mailStep1Subject (\$ma\ + ilStep1Subject . \" - \" . \$mailPtSubjectBackup)}\r\ + \n # body\r\ + \n :if (\$mailPtBodyAction != \"\") do={:set mailStep1Body (\$mailStep1\ + Body . \$mailPtBodyAction . \"\\n\\n\")}\r\ + \n :if (\$mailPtBodyBackup != \"\") do={:set mailStep1Body (\$mailStep1\ + Body . \$mailPtBodyBackup . \"\\n\\n\")}\r\ + \n :set mailStep1Body (\$mailStep1Body . \$mailBodyDeviceInfo . \"\\n\\\ + n\" . \$mailBodyCopyright);\r\ + \n # Send email with backups\r\ + \n :do {\$FuncSendEmailSafe \$EmailGeneralTo \$mailStep1Subject \$mailS\ + tep1Body \$mailAttachments} on-error={\r\ + \n :set isOsNeedsToBeUpdated false;\r\ + \n :log error \"\$SMP The script will not proceed with the update pro\ + cess, because the email was not sent.\";\r\ + \n }\r\ + \n }\r\ + \n :if ([:len \$mailAttachments] > 0) do={\r\ + \n :log info \"\$SMP Cleaning up backup files from the file system...\"\ + ;\r\ + \n /file remove \$mailAttachments;\r\ + \n :delay 2s;\r\ + \n }\r\ + \n :if (\$isOsNeedsToBeUpdated = true) do={\r\ + \n :global OldMode;\r\ + \n :log info \"\$SMP everything is ready to install new RouterOS, going\ + \_to start the update process and reboot the device.\";\r\ + \n :do {\r\ + \n :local nextStep 2;\r\ + \n :if (\$isCloudHostedRouter = true) do={\r\ + \n :log info \"\$SMP The device is a cloud hosted router, the secon\ + d step updating the Routerboard firmware will be skipped.\";\r\ + \n :set nextStep 3;\r\ + \n }\r\ + \n :local scheduledCommand (\":delay 5s; /system/scheduler remove BKP\ + UPD-NEXT-BOOT-TASK; \\\r\ + \n :global buGlobalVarScriptStep \$nextStep; :global buGlobalVarTarg\ + etOsVersion \\\"\$ROsVerAvail\\\"; \\\r\ + \n :delay 10s; /system/script { run \$ScriptName; }\");\r\ + \n /system/scheduler add name=BKPUPD-NEXT-BOOT-TASK on-event=\$schedu\ + ledCommand start-time=startup interval=0;\r\ + \n /system/package/update install;\r\ + \n } on-error={\r\ + \n # Failed to install new os version, remove the task and variables\ + \r\ + \n :do {\r\ + \n /system/scheduler remove BKPUPD-NEXT-BOOT-TASK;\r\ + \n :set BackupAndUpdateMode \$OldMode;\r\ + \n :delay 2;\r\ + \n :do {\r\ + \n :global buGlobalVarTargetOsVersion (a);\r\ + \n } on-error={\r\ + \n :set \$mailSubjectPrefix (\$mailSubjectPrefix . \"ERROR Remove\ + \_global variable \\\$buGlobalVarTargetOsVersion failed!\");\r\ + \n }\r\ + \n# :if ([ :len \$OldMode ] > 0) do={\r\ + \n# :do {\r\ + \n# :global OldMode (a);\r\ + \n# } on-error={\r\ + \n# :set \$mailSubjectPrefix (\$mailSubjectPrefix . \" ERROR Re\ + move global variable \\\$OldMode failed!\");\r\ + \n# }\r\ + \n# }\r\ + \n } on-error={\r\ + \n :log error \"\$SMP Failed to install new RouterOS version. Pleas\ + e check device logs for more details. \\\r\ + \n \\nAnd Failed to remove task and variables! Check it!\";\r\ + \n :set \$mailSubjectPrefix (\$mailSubjectPrefix . \" ERROR Remove \ + task and global variables!\");\r\ + \n }\r\ + \n :log error \"\$SMP Failed to install new RouterOS version. Please \ + check device logs for more details.\";\r\ + \n :local mailUpdateErrorSubject (\$mailSubjectPrefix . \" - Update f\ + ailed\");\r\ + \n :local mailUpdateErrorBody \"The script was unable to install new \ + RouterOS version. Please check device logs for more details.\";\r\ + \n # Send email with error\r\ + \n \$FuncSendEmailSafe \$EmailGeneralTo \$mailUpdateErrorSubject \$ma\ + ilUpdateErrorBody \"\";\r\ + \n :error \$exitErrorMessage;\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n## STEP 2: (Post-reboot) Upgrade RouterBOARD firmware\r\ + \n## Runs only if auto-update is enabled and a new RouterOS version was fo\ + und\r\ + \n:if (\$scriptStep = 2) do={\r\ + \n :log info \"\$SMP The script is in the second step, updating Routerboa\ + rd firmware.\";\r\ + \n :log info \"\$SMP Upgrading routerboard firmware from v.\$deviceRbCurr\ + entFw to v.\$deviceRbUpgradeFw\";\r\ + \n /system routerboard upgrade;\r\ + \n :delay 2;\r\ + \n :log info \"\$SMP routerboard upgrade process was completed, going to \ + reboot in a moment!\";\r\ + \n ## Set task to send final report on the next boot\r\ + \n /system scheduler add name=BKPUPD-NEXT-BOOT-TASK on-event=\":delay 2; \ + :global buGlobalVarScriptStep 3; \\\r\ + \n :global buGlobalVarTargetOsVersion \\\"\$buGlobalVarTargetOsVersion\\\ + \"; :delay 10s; /system/script { run \$ScriptName; }; \\ \r\ + \n :delay 5s; /system/scheduler remove BKPUPD-NEXT-BOOT-TASK;\" start-ti\ + me=startup interval=0;\r\ + \n :delay 2;\r\ + \n /system reboot;\r\ + \n}\r\ + \n\r\ + \n## STEP 3: Final report (after second reboot, with delay).\r\ + \n## Runs only if auto-update is enabled and a new RouterOS version was fo\ + und.\r\ + \n:if (\$scriptStep = 3) do={\r\ + \n :log info (\"\$SMP The script is in the third step, sending final repo\ + rt.\");\r\ + \n :local targetOsVersion \$buGlobalVarTargetOsVersion;\r\ + \n :do {\r\ + \n# /system/script/environment remove [find name=\"buGlobalVarTargetOsV\ + ersion\"];\r\ + \n :global buGlobalVarTargetOsVersion (a);\r\ + \n } on-error={\r\ + \n :set \$mailSubjectPrefix (\$mailSubjectPrefix . \" ERROR Remove glob\ + al variable \\\$buGlobalVarTargetOsVersion failed!\");\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$OldMode ] != 0) do={\r\ + \n :do {\r\ + \n# /system/script/environment remove [find name=\"OldMode\"];\r\ + \n :global OldMode (a);\r\ + \n } on-error={\r\ + \n :set \$mailSubjectPrefix (\$mailSubjectPrefix . \" ERROR! Remove\ + \_global variable \\\$OldMode failed!\");\r\ + \n }\r\ + \n }\r\ + \n :if ([:len \$targetOsVersion] = 0) do={\r\ + \n :log warning \"\$SMP Something is wrong, the script was unable to ge\ + t the target updated OS version from the global variable.\";\r\ + \n }\r\ + \n :local mailStep3Subject \$mailSubjectPrefix;\r\ + \n :local mailStep3Body \"\";\r\ + \n :if (\$targetOsVersion = \$runningVersion) do={\r\ + \n :log info \"\$SMP Successfully verified new RouterOS version: target\ + : `\$targetOsVersion`, current: `\$runningVersion`\";\r\ + \n :set mailStep3Subject (\$mailStep3Subject . \" - Update completed - \ + Backup created\");\r\ + \n :set mailStep3Body (\$mailStep3Body . \"RouterOS and routerboard upg\ + rade process was completed\");\r\ + \n :set mailStep3Body (\$mailStep3Body . \"\\nNew RouterOS version: v.\ + \$targetOsVersion, routerboard firmware: v.\$deviceRbCurrentFw\");\r\ + \n :set mailStep3Body (\$mailStep3Body . \"\\n\$changelogUrl\\nBackups \ + of the upgraded system are in the attachment of this email.\\n\\n\$mailBod\ + yDeviceInfo\\n\\n\$mailBodyCopyright\");\r\ + \n :set mailAttachments [\$FuncCreateBackups \$backupNameAfterUpdate \$\ + BackupPassword \$BackupSens];\r\ + \n } else={\r\ + \n :log error \"\$SMP Failed to verify new RouterOS version: target: `\ + \$targetOsVersion`, current: `\$runningVersion`\";\r\ + \n :set mailStep3Subject (\$mailStep3Subject . \" - Update failed\");\r\ + \n :set mailStep3Body (\$mailStep3Body . \"The script was unable to ver\ + ify that the new RouterOS version was installed, target version: `\$target\ + OsVersion`, current version: `\$runningVersion`\\nCheck device logs for mo\ + re details.\\n\\n\$mailBodyDeviceInfo\\n\\n\$mailBodyCopyright\");\r\ + \n }\r\ + \n \$FuncSendEmailSafe \$EmailGeneralTo \$mailStep3Subject \$mailStep3Bod\ + y \$mailAttachments;\r\ + \n :if ([:len \$mailAttachments] > 0) do={\r\ + \n :log info \"\$SMP Cleaning up backup files from the file system...\"\ + ;\r\ + \n /file remove \$mailAttachments;\r\ + \n :delay 2;\r\ + \n }\r\ + \n :log info (\"\$SMP Final report email sent successfully, and the scrip\ + t has finished.\");\r\ + \n}\r\ + \n:log info (\"\$SMP the script has finished, script step: `\$scriptStep` \ + \\n\\n\");\r\ + \n\r\ + \n} do={:global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err}\r\ + \n" +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +/caps-man provisioning +add action=create-dynamic-enabled hw-supported-modes=gn master-configuration=\ + cfg-2ghz name-format=prefix-identity name-prefix=2ghz +add action=create-dynamic-enabled hw-supported-modes=ac master-configuration=\ + cfg-5ghz-ac name-format=prefix-identity name-prefix=5ghz-ac +add action=create-dynamic-enabled hw-supported-modes=an master-configuration=\ + cfg-5ghz-an name-format=prefix-identity name-prefix=5ghz-an +/certificate settings +set builtin-trust-store=fetch +/disk settings +set auto-media-interface=lo default-mount-point-template=usb1 +/ip smb +set comment=MikroVados domain=WORKGROUP enabled=yes interfaces=Bridge-LAN +/interface bridge port +add bridge=Bridge-LAN ingress-filtering=no interface=ether2 \ + internal-path-cost=10 path-cost=10 +add bridge=Bridge-LAN comment=LEN ingress-filtering=no interface=ether3 \ + internal-path-cost=10 path-cost=10 +add bridge=Bridge-LAN comment=NUC ingress-filtering=no interface=ether4 \ + internal-path-cost=10 path-cost=10 +add bridge=Bridge-LAN ingress-filtering=no interface=ether5 \ + internal-path-cost=10 path-cost=10 +/ip firewall connection tracking +set udp-timeout=10s +/ip neighbor discovery-settings +set discover-interface-list=LAN +/ip settings +set max-neighbor-entries=8192 secure-redirects=no +/ipv6 settings +set disable-ipv6=yes max-neighbor-entries=8192 +/interface detect-internet +set detect-interface-list=WAN internet-interface-list=WAN lan-interface-list=\ + LAN wan-interface-list=WAN +/interface l2tp-server server +set authentication=mschap2 use-ipsec=yes +/interface list member +add comment=WAN interface="ether1 - Unet" list=WAN +add interface=Bridge-LAN list=LAN +/interface ovpn-server server +add auth=sha1,md5 mac-address=FE:82:A5:78:8E:84 name=ovpn-server1 +/interface wifi cap +set caps-man-addresses=10.30.30.10 certificate=request discovery-interfaces=\ + wlan1,wlan2 lock-to-caps-man=no slaves-static=no +/interface wifi capsman +set package-path="" require-peer-certificate=no upgrade-policy=none +/interface wifi provisioning +add action=create-dynamic-enabled disabled=no master-configuration=2G-N \ + name-format=2G-%I slave-configurations=2G-G supported-bands=\ + 2ghz-n,2ghz-g,2ghz-g +add action=create-dynamic-enabled disabled=no master-configuration=5G-AC \ + name-format=5G-%I supported-bands=5ghz-ac,5ghz-ac +/interface wireguard peers +add allowed-address=10.8.0.2/32,0.0.0.0/0 client-allowed-address=0.0.0.0/0 \ + endpoint-address=89.110.101.17 endpoint-port=29185 interface=WG name=\ + MikroVados persistent-keepalive=10s public-key=\ + "64Y25EUZQQt8EIeAJYD8qWt+te8qvGEepnswdBgmzlY=" +/interface wireless cap +# +set bridge=Bridge-LAN caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-51B25E507D07 certificate=\ + CAP-18FD746E5814 discovery-interfaces=Bridge-LAN enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/interface wireless sniffer +set file-name=24g +/ip address +add address=10.30.30.81/24 interface=Bridge-LAN network=10.30.30.0 +add address=10.8.0.2/24 interface=WG network=10.8.0.0 +/ip dhcp-client +add add-default-route=special-classless default-route-distance=2 \ + default-route-tables=main interface="ether1 - Unet" name="ether1 - Unet" \ + use-peer-dns=no +/ip dhcp-server config +set accounting=no +/ip dhcp-server lease +add address=10.30.30.101 client-id=1:48:8f:5a:8e:ee:a8 mac-address=\ + 48:8F:5A:8E:EE:A8 server=masterDHCP +add address=10.30.30.107 client-id=1:f0:de:f1:91:d:1e mac-address=\ + F0:DE:F1:91:0D:1E server=masterDHCP +add address=10.30.30.83 client-id=1:0:80:77:ec:43:86 mac-address=\ + 00:80:77:EC:43:86 server=masterDHCP +add address=10.30.30.70 dhcp-option=domain-search-list,HostName \ + dhcp-option-set=HP1505n mac-address=00:1E:0B:1A:88:8D server=masterDHCP +add address=10.30.30.50 client-id=1:4:7c:16:36:f5:37 mac-address=\ + 04:7C:16:36:F5:37 server=masterDHCP +add address=10.30.30.71 client-id=1:10:2d:41:2c:20:c2 mac-address=\ + 10:2D:41:2C:20:C2 server=masterDHCP +add address=10.30.30.61 client-id=1:10:8:c1:81:59:5f mac-address=\ + 10:08:C1:81:59:5F server=masterDHCP +add address=10.30.30.72 client-id=1:10:38:1f:d2:5f:13 mac-address=\ + 10:38:1F:D2:5F:13 server=masterDHCP +add address=10.30.30.99 client-id=1:10:b1:df:e9:d0:d5 mac-address=\ + 10:B1:DF:E9:D0:D5 server=masterDHCP +add address=10.30.30.111 client-id=1:fe:2:52:be:3f:16 mac-address=\ + FE:02:52:BE:3F:16 server=masterDHCP +add address=10.30.30.93 client-id=1:7e:8b:1e:cb:b8:cb mac-address=\ + CC:42:10:12:46:94 server=masterDHCP +add address=10.30.30.94 client-id=1:50:cc:f8:85:96:a mac-address=\ + 50:CC:F8:85:96:0A server=masterDHCP +add address=10.30.30.82 client-id=1:e4:18:6b:58:34:ab mac-address=\ + E4:18:6B:58:34:AB server=masterDHCP +add address=10.30.30.77 dhcp-option=HostName dhcp-option-set=StartLife1 \ + mac-address=C4:82:E1:03:49:10 server=masterDHCP +add address=10.30.30.73 client-id=1:10:38:1f:82:81:f2 mac-address=\ + 10:38:1F:82:81:F2 server=masterDHCP +add address=10.30.30.95 client-id=1:88:ae:dd:60:39:54 dhcp-option=HostName \ + dhcp-option-set=VADOS-NUC mac-address=88:AE:DD:60:39:54 server=masterDHCP +add address=10.30.30.98 client-id=1:c8:5b:76:d8:cc:bf dhcp-option=HostName \ + dhcp-option-set=VADOS-LEN mac-address=C8:5B:76:D8:CC:BF server=masterDHCP +add address=10.30.30.96 client-id=iPhone mac-address=4A:91:ED:0E:1F:39 \ + server=masterDHCP +add address=10.30.30.74 client-id=1:20:72:a9:d3:34:36 dhcp-option=HostName \ + dhcp-option-set=MiTV mac-address=20:72:A9:D3:34:36 server=masterDHCP \ + use-src-mac=yes +add address=10.30.30.30 dhcp-option=HostName dhcp-option-set=miller \ + mac-address=F0:75:5D:1E:5F:71 server=masterDHCP +add address=10.30.30.100 client-id=iVados dhcp-option=HostName \ + dhcp-option-set="=\"Client ID\"" mac-address=DE:4D:72:F3:1A:9F server=\ + masterDHCP +add address=10.30.30.86 dhcp-option=HostName dhcp-option-set=MikroYellow \ + mac-address=48:8F:5A:8E:1A:C2 server=masterDHCP +/ip dhcp-server network +add address=10.30.30.0/24 caps-manager=10.30.30.10 dhcp-option=\ + domain-search-list dhcp-option-set=domain-search-set dns-server=\ + 10.30.30.81 domain=WORKGROUP gateway=10.30.30.81 netmask=24 ntp-server=\ + 10.30.30.81,10.30.30.10 wins-server=10.30.30.95,10.30.30.98 +/ip dns +set allow-remote-requests=yes cache-max-ttl=1d doh-max-concurrent-queries=100 \ + doh-max-server-connections=20 servers=8.8.8.8,8.8.4.4 verify-doh-cert=yes +/ip dns static +add address=10.30.30.33 name=amster-nuc type=A +add address=10.30.30.33 comment=AMSTER name=amster.vados.ru type=A +add address=10.30.30.33 name=amster type=A +add address=10.30.30.33 name=amster-reg type=A +add address=10.30.30.33 name=mng.vados.ru type=A +add address=10.30.30.33 name=mgr.vados.ru type=A +add address=10.30.30.33 name=prt.vados.ru type=A +add address=10.30.30.33 name=git.vados.ru type=A +add address=10.30.30.33 name=reg.vados.ru type=A +add address=10.30.30.33 match-subdomain=yes name=ros.vados.ru type=A +add address=10.30.30.33 match-subdomain=yes name=mikrots.vados.ru type=A +add address=10.30.30.33 name=oxidized.vados.ru type=A +add address=8.8.4.4 comment="Google-dns IPv4 2" name=dns.google type=A +add address=8.8.8.8 comment="Google-dns IPv4 1" name=dns.google type=A +add address=10.30.30.30 comment=MILLER name=miller.vados.ru type=A +add address=10.30.30.30 name=MILLER-LEN type=A +add address=10.30.30.30 name=miller type=A +add address=1.1.1.1 comment="CloudFlare-doh IPv4 1" name=\ + security.cloudflare-dns.com type=A +add address=1.0.0.1 comment="CloudFlare-doh IPv4 2" name=\ + security.cloudflare-dns.com type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" disabled=yes name=\ + dns.quad9.net type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +add address=10.30.30.81 comment=LocalNet name=MikroVados type=A +add address=10.30.30.10 name=MikroNUC type=A +add address=10.30.30.86 name=MikroYellow type=A +add address=10.30.30.85 name=MikroMic type=A +add address=10.30.30.95 name=VADOS-NUC type=A +add address=10.30.30.98 name=VADOS-LEN type=A +add address=10.30.30.20 name=garage type=A +add address=2606:4700:4700::1111 disabled=yes name=\ + security.cloudflare-dns.com type=AAAA +add address=2606:4700:4700::1001 disabled=yes name=\ + security.cloudflare-dns.com type=AAAA +/ip firewall address-list +add address=91.215.120.206 list=TRUSTED +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=10.30.30.100-255 list=KIDS +add address=8.8.4.0/24 list=YouTube +add address=8.8.8.0/24 list=YouTube +add address=8.34.208.0/20 list=YouTube +add address=8.35.192.0/20 list=YouTube +add address=23.236.48.0/20 list=YouTube +add address=23.251.128.0/19 list=YouTube +add address=34.0.0.0/15 list=YouTube +add address=34.2.0.0/16 list=YouTube +add address=34.3.0.0/23 list=YouTube +add address=34.3.3.0/24 list=YouTube +add address=34.3.4.0/24 list=YouTube +add address=34.3.8.0/21 list=YouTube +add address=34.3.16.0/20 list=YouTube +add address=34.3.32.0/19 list=YouTube +add address=34.3.64.0/18 list=YouTube +add address=34.4.0.0/14 list=YouTube +add address=34.8.0.0/13 list=YouTube +add address=34.16.0.0/12 list=YouTube +add address=34.32.0.0/11 list=YouTube +add address=34.64.0.0/10 list=YouTube +add address=34.128.0.0/10 list=YouTube +add address=35.184.0.0/13 list=YouTube +add address=35.192.0.0/14 list=YouTube +add address=35.196.0.0/15 list=YouTube +add address=35.198.0.0/16 list=YouTube +add address=35.199.0.0/17 list=YouTube +add address=35.199.128.0/18 list=YouTube +add address=35.200.0.0/13 list=YouTube +add address=35.208.0.0/12 list=YouTube +add address=35.224.0.0/12 list=YouTube +add address=35.240.0.0/13 list=YouTube +add address=57.140.192.0/18 list=YouTube +add address=64.15.112.0/20 list=YouTube +add address=64.233.160.0/19 list=YouTube +add address=66.22.228.0/23 list=YouTube +add address=66.102.0.0/20 list=YouTube +add address=66.249.64.0/19 list=YouTube +add address=70.32.128.0/19 list=YouTube +add address=72.14.192.0/18 list=YouTube +add address=74.125.0.0/16 list=YouTube +add address=104.154.0.0/15 list=YouTube +add address=104.196.0.0/14 list=YouTube +add address=104.237.160.0/19 list=YouTube +add address=107.167.160.0/19 list=YouTube +add address=107.178.192.0/18 list=YouTube +add address=108.59.80.0/20 list=YouTube +add address=108.170.192.0/18 list=YouTube +add address=108.177.0.0/17 list=YouTube +add address=130.211.0.0/16 list=YouTube +add address=136.22.160.0/20 list=YouTube +add address=136.22.176.0/21 list=YouTube +add address=136.22.184.0/23 list=YouTube +add address=136.22.186.0/24 list=YouTube +add address=142.250.0.0/15 list=YouTube +add address=146.148.0.0/17 list=YouTube +add address=152.65.208.0/22 list=YouTube +add address=152.65.214.0/23 list=YouTube +add address=152.65.218.0/23 list=YouTube +add address=152.65.222.0/23 list=YouTube +add address=152.65.224.0/19 list=YouTube +add address=162.120.128.0/17 list=YouTube +add address=162.216.148.0/22 list=YouTube +add address=162.222.176.0/21 list=YouTube +add address=172.110.32.0/21 list=YouTube +add address=172.217.0.0/16 list=YouTube +add address=172.253.0.0/16 list=YouTube +add address=173.194.0.0/16 list=YouTube +add address=173.255.112.0/20 list=YouTube +add address=192.158.28.0/22 list=YouTube +add address=192.178.0.0/15 list=YouTube +add address=193.186.4.0/24 list=YouTube +add address=199.36.154.0/23 list=YouTube +add address=199.36.156.0/24 list=YouTube +add address=199.192.112.0/22 list=YouTube +add address=199.223.232.0/21 list=YouTube +add address=207.223.160.0/20 list=YouTube +add address=208.65.152.0/22 list=YouTube +add address=208.68.108.0/22 list=YouTube +add address=208.81.188.0/22 list=YouTube +add address=208.117.224.0/19 list=YouTube +add address=209.85.128.0/17 list=YouTube +add address=216.58.192.0/19 list=YouTube +add address=216.73.80.0/20 list=YouTube +add address=216.239.32.0/19 list=YouTube +add address=2ip.ru list=Test +add address=157.240.247.174 list=Instagram +add address=46.53.178.107 list=Instagram +add address=179.60.195.174 list=Instagram +add address=157.240.205.174 list=Instagram +add address=31.13.24.0/21 list=Instagram +add address=31.13.64.0/18 list=Instagram +add address=45.64.40.0/22 list=Instagram +add address=66.220.144.0/20 list=Instagram +add address=69.63.176.0/20 list=Instagram +add address=69.171.224.0/19 list=Instagram +add address=74.119.76.0/22 list=Instagram +add address=103.4.96.0/22 list=Instagram +add address=129.134.0.0/16 list=Instagram +add address=157.240.0.0/16 list=Instagram +add address=173.252.64.0/18 list=Instagram +add address=179.60.192.0/22 list=Instagram +add address=185.60.216.0/22 list=Instagram +add address=204.15.20.0/22 list=Instagram +add address=157.240.200.63 list=Instagram +add address=185.60.219.63 list=Instagram +add address=129.134.31.12 list=Instagram +add address=66.81.203.132 list=Instagram +add address=185.89.218.12 list=Instagram +add address=31.13.66.63 list=Instagram +add address=84.15.65.162 list=Instagram +add address=68.66.224.28 list=Instagram +add address=157.240.253.63 list=Instagram +add address=83.174.11.224 list=Instagram +add address=157.240.9.52 list=Instagram +add address=157.240.252.174 list=Instagram +add address=157.240.195.63 list=Instagram +add address=31.13.71.52 list=Instagram +add address=57.144.110.192 list=Instagram +add address=157.240.252.17 list=Instagram +add address=84.15.66.97 list=Instagram +add address=217.168.6.33 list=Instagram +add address=31.13.83.52 list=Instagram +add address=157.240.241.63 list=Instagram +add address=129.134.30.12 list=Instagram +add address=185.89.219.12 list=Instagram +add address=157.240.252.10 list=Instagram +add address=157.240.201.63 list=Instagram +add address=66.81.203.197 list=Instagram +add address=179.60.195.52 list=Instagram +add address=66.81.203.7 list=Instagram +add address=216.40.34.41 list=Instagram +add address=157.240.202.63 list=Instagram +add address=157.240.229.63 list=Instagram +add address=157.240.252.63 list=Instagram +add address=31.13.72.53 list=Instagram +add address=124.108.16.224 list=Instagram +add address=157.240.205.63 list=Instagram +add address=92.46.37.96 list=Instagram +add address=157.240.247.63 list=Instagram +add address=157.240.234.63 list=Instagram +add address=157.240.235.63 list=Instagram +add address=87.245.208.97 list=Instagram +add address=216.58.192.0/19 list=Instagram +add address=209.85.128.0/17 list=Instagram +add address=198.105.240.0/20 list=Instagram +add address=173.194.0.0/16 list=Instagram +add address=172.217.0.0/16 list=Instagram +add address=142.250.0.0/15 list=Instagram +add address=108.177.0.0/17 list=Instagram +add address=87.245.197.140 list=Instagram +add address=74.125.0.0/16 list=Instagram +add address=64.233.160.0/19 list=Instagram +add address=157.240.0.1 list=Instagram +add address=157.240.238.63 list=Instagram +add address=157.240.238.174 list=Instagram +add address=157.240.0.63 list=Instagram +add address=157.240.224.63 list=Instagram +add address=157.240.224.174 list=Instagram +add address=157.240.251.36 list=Instagram +add address=157.240.253.12 list=Instagram +add address=157.240.253.35 list=Instagram +add address=157.240.238.13 list=Instagram +add address=157.240.238.56 list=Instagram +add address=157.240.238.175 list=Instagram +add address=57.144.112.141 list=Instagram +add address=157.240.251.60 list=Instagram +add address=157.240.251.128 list=Instagram +add address=157.240.238.5 list=Instagram +add address=157.240.253.13 list=Instagram +add address=157.240.253.5 list=Instagram +add address=157.240.238.2 list=Instagram +add address=157.240.238.37 list=Instagram +add address=157.240.251.5 list=Instagram +add address=157.240.251.34 list=Instagram +add address=57.144.112.1 list=Instagram +add address=157.240.238.54 list=Instagram +add address=129.134.26.123 list=Instagram +add address=157.240.252.3 list=Instagram +add address=31.13.84.4 list=Instagram +add address=157.240.224.12 list=Instagram +add address=157.240.238.4 list=Instagram +add address=157.240.0.13 list=Instagram +add address=3.33.139.32 list=Instagram +add address=157.240.0.35 list=Instagram +add address=157.240.238.14 list=Instagram +add address=157.240.238.60 list=Instagram +add address=57.144.112.145 list=Instagram +add address=157.240.251.35 list=Instagram +add address=151.101.84.159 list=Twitter +add address=pbs.twimg.com list=Twitter +add address=89.110.101.17 comment=VDSIna list=TRUSTED +add address=10.8.0.0/24 comment="WG VDSIna" list=TRUSTED +add address=ikus.pesc.ru comment=ikus.pesc.ru list=NoVdsina +add address=love.ru comment=love.ru list=NoVdsina +add address=gosuslugi.ru comment=gosuslugi.ru list=NoVdsina +add address=pochta.ru comment=pochta.ru list=NoVdsina +add address=vdsina.com list=NoVdsina +add address=vdsina.ru list=NoVdsina +add address=youla.ru list=NoVdsina +add address=kupiprodai.ru list=NoVdsina +add address=myip.ru list=Test +add address=geoip.co list=NoVdsina +add address=x.com list=Twitter +add address=facebook.com list=facebook +add address=fbcd.net list=facebook +add address=comp-lenta.ru list=NoVdsina +add address=128.85.102.70 comment=update.microsoft.com list=\ + windowsupdateslist +add address=wu-b-net.trafficmanager.net. comment=\ + ctldl.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=ctldl.windowsupdate.com.delivery.microsoft.com. comment=\ + ctldl.windowsupdate.com list=windowsupdateslist +add address=redir.update.msft.com.trafficmanager.net. comment=\ + update.microsoft.com list=windowsupdateslist +add address=geo.prod.do.dsp.trafficmanager.net. comment=\ + geo.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=13.74.139.29 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12437.d.akamaiedge.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=displaycatalog-rp.md.mp.microsoft.com.akadns.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=rp-consumer-prod-displaycatalog-geomap.trafficmanager.net. \ + comment=displaycatalog-rp.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=sls.update.microsoft.com. comment=slscr.update.microsoft.com \ + list=windowsupdateslist +add address=glb.sls.prod.dcat.dsp.trafficmanager.net. comment=\ + sls.update.microsoft.com list=windowsupdateslist +add address=fe3.delivery.mp.microsoft.com. comment=\ + fe3cr.delivery.mp.microsoft.com list=windowsupdateslist +add address=glb.cws.prod.dcat.dsp.trafficmanager.net. comment=\ + fe3.delivery.mp.microsoft.com list=windowsupdateslist +add address=fe2cr.update.msft.com.trafficmanager.net. comment=\ + fe2cr.update.microsoft.com list=windowsupdateslist +add address=download.windowsupdate.com.delivery.microsoft.com. comment=\ + download.windowsupdate.com list=windowsupdateslist +add address=wu-f-net.trafficmanager.net. comment=\ + download.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=tsfe.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=edge.ds-c7110-microsoft.global.dns.qwilted-cds.cqloud.com. \ + comment=9.au.download.windowsupdate.com list=windowsupdateslist +add address=52.158.227.125 comment=array812.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dspw65.akamai.net. comment=\ + download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.151.58.88 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net. \ + comment=licensing.mp.microsoft.com list=windowsupdateslist +add address=licensing-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-nlu-net.trafficmanager.net. comment=\ + star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.b.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-tlu-net.trafficmanager.net. comment=\ + star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=storeedgefd.xbetservices.akadns.net. comment=\ + storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net. \ + comment=storeedgefd.dsx.mp.microsoft.com.edgekey.net list=\ + windowsupdateslist +add address=e16646.dscg.akamaiedge.net. comment=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net list=\ + windowsupdateslist +add address=40.69.76.189 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=bg.microsoft.map.fastly.net. comment=\ + 3.au.download.windowsupdate.com list=windowsupdateslist +add list=windowsupdateslist +add address=40.69.75.33 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sf.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=cdp-f-ssl-tlu-net.trafficmanager.net. comment=\ + star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a2033.dscd.akamai.net. comment=\ + star.sb.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.138.242 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-nlu-net.trafficmanager.net. comment=\ + dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=1D.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-b-tlu-net.trafficmanager.net. comment=\ + 1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a122.dscg3.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=windowsupdateslist +add address=geover.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e10370.d.akamaiedge.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=52.232.182.21 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.95 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=a1683.dscd.akamai.net. comment=\ + dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net. \ + comment=collections.mp.microsoft.com list=windowsupdateslist +add address=a1847.dscd.akamai.net. comment=\ + wildcard.f.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.142.6 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=au.download.windowsupdate.com.edgesuite.net. comment=\ + 2.au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dscg3.akamai.net. comment=\ + au.download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.156.123.84 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.78.254 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=4.au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + 4.au.download.windowsupdate.com list=windowsupdateslist +add address=cl-glcb907925.gcdn.co. comment=\ + 4.au.download.windowsupdate.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.111 comment=array510.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.69.70.43 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com. \ + comment=tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=ts-frontend.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=40.69.75.248 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.74.84 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=sds.trafficmanager.net. comment=software-download.microsoft.com \ + list=windowsupdateslist +add address=40.69.74.80 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.175.242.182 comment=array804.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=dlc-shim.trafficmanager.net. comment=download.microsoft.com list=\ + windowsupdateslist +add address=e12671.dscd.akamaiedge.net. comment=\ + download.microsoft.com.edgekey.net list=windowsupdateslist +add address=20.187.55.34 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.231 comment=array513.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.222.13 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12358.d.akamaiedge.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-tlu-net.trafficmanager.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a1856.dspw65.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=52.167.164.252 comment=array506.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=13.74.137.54 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv501.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv501.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=collections-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=52.167.160.173 comment=array509.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.77.148 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.200.126 comment=array507.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.167.59 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.172 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=82.202.162.184 comment=comp-lenta.ru list=NoWG +add address=smtp.mail.me.com.akadns.net. comment=smtp.mail.me.com list=NoWG +add address=17.57.155.37 comment=smtp.mail.me.com.akadns.net list=NoWG +add address=smtp.mail.me.com comment=smtp.mail.me.com list=NoVdsina +add address=40.70.76.5 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.186.119 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.177.176.186 comment=array520.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.76.27 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.160.43 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.110 comment=array817.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.142.8 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.138.254 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.96 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.215 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.143.200 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.111 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.112 comment=array819.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.137.53 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.98 comment=array805.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.96 comment=array803.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.104 comment=array811.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.101 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.99 comment=array806.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.17 comment=array802.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.97 comment=array804.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.103 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.16 comment=array801.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.177 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.164.84 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.105 comment=array812.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.107 comment=array814.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.232.161.82 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.108 comment=array815.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.161.91 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.102 comment=array809.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.109 comment=array816.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.106 comment=array813.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.117 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.107 comment=array612.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.108 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.105 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.113 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.116 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.98 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.114 comment=array619.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.111 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.97 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.106 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.110 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.119 comment=array624.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.135 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.97 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.99 comment=array604.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.61 comment=array504.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.131 comment=array510.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.132 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.96 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.104 comment=array609.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.138 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.60 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.139 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.118 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.113 comment=array820.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.103 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.100 comment=array807.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.129 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.134 comment=array513.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.62 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.137 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.101 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.96 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.130 comment=array509.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.112 comment=array617.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.100 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.115 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.136 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=purchase.md.mp.microsoft.com.akadns.net. comment=\ + purchase.mp.microsoft.com list=windowsupdateslist +add address=e110219.a.akamaiedge.net. comment=\ + purchase.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=72.153.5.140 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.141 list=windowsupdateslist +add address=72.153.5.63 comment=array506.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.128 comment=array507.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.102 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=storesdk.xbetservices.akadns.net. comment=\ + storesdk.dsx.mp.microsoft.com list=windowsupdateslist +add address=e16646.g.akamaiedge.net. comment=\ + storesdk.dsx.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=software-download.microsoft.com.delivery.microsoft.com. comment=\ + software-download.microsoft.com list=windowsupdateslist +add address=download.prss.microsoft.com.akamaized.net. comment=\ + software-download.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.109 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.133 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=213.180.192.0/19 comment=YandexDisk list=NoVdsina +add address=87.250.250.50 comment=YandexDisk list=NoVdsina +add address=consumer-prod-bcfd-v7-afd.trafficmanager.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=purchase-europeeap.md.mp.microsoft.com.akadns.net. comment=\ + purchase.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=ne-az-conspurchase-mp.trafficmanager.net. comment=\ + purchase-europeeap.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=storeedgefd.dsx.mp.microsoft.com.edgekey.net. comment=\ + cdn.storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=star.f.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=a1996.dscd.akamai.net. comment=\ + wildcard.f.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=cp801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=glb.tas02.sls-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas02.sls.update.microsoft.com list=windowsupdateslist +add address=cp601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=star.sb.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sb.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.sf.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-ssl-nlu-net.trafficmanager.net. comment=\ + star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=tm-pifd-prod-gbl-weight.trafficmanager.net. comment=\ + paymentinstruments.mp.microsoft.com list=windowsupdateslist +add address=10.30.30.33 comment=amster-nuc disabled=yes list=NoWG +add address=10.30.30.11 comment=MikroNUC list=NoWG +add address=89.110.101.17 comment=!!!VDSINA!!!! list=NoWG +add address=89.110.101.17 list=VPN-Server +add address=80.85.244.9 list=TRUSTED +add address=8.8.8.8 list=TRUSTED +add address=8.8.4.4 list=TRUSTED +add address=disc801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + disc801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=10.30.30.95 comment=NUC list=NoWG +add address=glb.tas02.cws-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas02.cws.update.microsoft.com list=windowsupdateslist +add address=glb.cwsapp.prod.dcat.dsp.trafficmanager.net. comment=\ + glb.tas01.cwsapp-prod.dcat.dsp.mp.microsoft.com list=windowsupdateslist +add address=glb.tas01.cwsapp-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas01.cwsapp.update.microsoft.com list=windowsupdateslist +add address=disc601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + disc601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +/ip firewall filter +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=12h chain=input comment="block honeypot DNS" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input connection-state=new dst-port=53 \ + in-interface="ether1 - Unet" protocol=tcp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment=\ + "block honeypot ssh rdp winbox" connection-state=new dst-port=\ + 22,8291,2222 in-interface="ether1 - Unet" protocol=tcp src-address-list=\ + !TRUSTED +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot asterisk" \ + connection-state=new dst-port=5060 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=5d chain=input comment="block honeypot NTP" \ + connection-state=new dst-port=123 in-interface="ether1 - Unet" protocol=\ + udp src-address=!10.30.30.0/24 +add action=accept chain=input comment=\ + "accept NTP clients on local area network" dst-port=123 in-interface=\ + Bridge-LAN in-interface-list=LAN protocol=udp +add action=accept chain=input comment="accept WireGuard" dst-port=13231 \ + in-interface="ether1 - Unet" protocol=udp src-address-list=VPN-Server +add action=accept chain=input disabled=yes dst-port=443 in-interface=\ + "ether1 - Unet" protocol=tcp +add action=accept chain=output disabled=yes protocol=tcp src-port=443 +add action=fasttrack-connection chain=forward comment=\ + "FastTrack for non-VPN connections" connection-mark=!VPN_No_FastTrack \ + connection-state=established,related,new disabled=yes +add action=fasttrack-connection chain=forward comment="defconf: fasttrack" \ + connection-state=established,related,new disabled=yes routing-mark=\ + !To-VPN +add action=accept chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid +add action=accept chain=input comment="defconf: accept ICMP" disabled=yes \ + protocol=icmp +add action=accept chain=input comment=\ + "defconf: accept to local loopback (for CAPsMAN)" disabled=yes \ + dst-address=127.0.0.1 +add action=accept chain=output disabled=yes src-address=127.0.0.1 +add action=accept chain=forward comment="defconf: accept in ipsec policy" \ + ipsec-policy=in,ipsec +add action=accept chain=forward comment="defconf: accept out ipsec policy" \ + ipsec-policy=out,ipsec +add action=accept chain=forward comment=\ + "defconf: accept established,related, untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid disabled=yes +add action=drop chain=forward comment=\ + "defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat \ + connection-state=new in-interface="ether1 - Unet" +add action=accept chain=input connection-state=established disabled=yes +add action=accept chain=input connection-state=related disabled=yes +add action=drop chain=input disabled=yes in-interface-list=!LAN +add action=drop chain=forward comment=\ + "Filter Rule to block FB address LIST : )" disabled=yes dst-address-list=\ + facebook +add action=drop chain=forward comment=\ + "Filter Rule to block YOUTUBE address LIST : )" disabled=yes \ + dst-address-list=YouTube +add action=fasttrack-connection chain=forward comment=\ + "FastTrack main traffic" connection-state=established,related disabled=\ + yes +/ip firewall mangle +add action=mark-connection chain=prerouting comment=\ + "Mark VPN connections to exclude from FastTrack" in-interface=WG \ + log-prefix=Mark-VPN-FT new-connection-mark=VPN_No_FastTrack +add action=mark-routing chain=prerouting comment="Test sites" disabled=yes \ + dst-address=!10.30.30.0/24 dst-address-list=Test new-routing-mark=To-VPN \ + passthrough=no src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment=Instagram dst-address=\ + !10.30.30.0/24 dst-address-list=Instagram new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=Twitter dst-address=\ + !10.30.30.0/24 dst-address-list=Twitter new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=YouTube dst-address=\ + !10.30.30.0/24 dst-address-list=YouTube new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=facebook dst-address=\ + !10.30.30.0/24 dst-address-list=facebook new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment="VDSIna for All sites" \ + dst-address=!10.30.30.0/24 dst-address-list=!NoVdsina log-prefix=VPN-all \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +add action=change-mss chain=forward comment="MSS on WG" new-mss=1380 \ + out-interface=WG protocol=tcp tcp-flags=syn tcp-mss=1381-65535 +add action=mark-routing chain=prerouting comment="VPN Network" dst-address=\ + 10.8.0.0/24 dst-address-list=!NoVdsina log=yes log-prefix=VPN-Net \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +/ip firewall nat +add action=redirect chain=dstnat comment=\ + "FORCE DNS TO LOCAL MIKROTIK DNS SERVER" dst-port=53 protocol=tcp \ + src-address=10.30.30.0/24 to-ports=53 +add action=redirect chain=dstnat dst-port=53 protocol=udp src-address=\ + 10.30.30.0/24 to-ports=53 +add action=masquerade chain=srcnat comment="masquerade Default" ipsec-policy=\ + out,none out-interface="ether1 - Unet" routing-mark=!To-VPN +add action=masquerade chain=srcnat comment=WG dst-address-list=!NoVdsina \ + in-interface=Bridge-LAN log-prefix=WG-nat out-interface=WG routing-mark=\ + To-VPN +add action=dst-nat chain=dstnat comment=npm disabled=yes dst-port=81 \ + in-interface="ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 \ + to-ports=81 +add action=dst-nat chain=dstnat comment=amster.vados.ruhttps disabled=yes \ + dst-port=443 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=443 +add action=dst-nat chain=dstnat comment="amster.vados.ru For Certbot HTTP" \ + disabled=yes dst-port=80 in-interface="ether1 - Unet" protocol=tcp \ + to-addresses=10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat disabled=yes dst-port=80 in-interface=\ + "ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat comment="Yandex.DNS Family" disabled=yes \ + dst-port=53 in-interface=Bridge-LAN protocol=udp src-address-list=KIDS \ + time=6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +add action=dst-nat chain=dstnat disabled=yes dst-port=53 in-interface=\ + Bridge-LAN protocol=tcp src-address-list=KIDS time=\ + 6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +add action=dst-nat chain=dstnat dst-address=146.120.64.211 dst-port=32000 \ + in-interface="ether1 - Unet" protocol=tcp to-addresses=10.30.30.95 \ + to-ports=32000 +add action=dst-nat chain=dstnat dst-address=146.120.64.211 dst-port=32000 \ + in-interface="ether1 - Unet" protocol=udp to-addresses=10.30.30.95 \ + to-ports=32000 +add action=dst-nat chain=dstnat dst-port=32000 protocol=tcp routing-mark=\ + To-VPN to-addresses=10.30.30.95 to-ports=32000 +add action=dst-nat chain=dstnat dst-port=32000 protocol=udp routing-mark=\ + To-VPN to-addresses=10.30.30.95 to-ports=32000 +/ip firewall raw +add action=drop chain=prerouting comment="Drop Honeypot Hackers" \ + in-interface="ether1 - Unet" src-address-list="Honeypot Hacker" +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + extras.getpagespeed.com content=extras.getpagespeed.com disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=linux.duke.edu \ + content=linux.duke.edu disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=vk.com \ + content=vk.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=ok.ru content=\ + ok.ru +add action=add-dst-to-address-list address-list=Instagram \ + address-list-timeout=none-dynamic chain=prerouting comment=Instagram \ + content=instagram.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting comment=Twitter content=twimg.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=x.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=twitter.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting comment=YouTube content=youtube.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleapis.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ggpht.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=youtu.be +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ytimg.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googlevideo.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=gstatic.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleusercontent.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=nhacmp3youtube.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=rutube.ru \ + content=rutube.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=me.com \ + content=me.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=icloud.com \ + content=icloud.com +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting comment=facebook \ + content=fbcd.net +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting content=facebook.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=comp-lenta.ru \ + content=comp-lenta.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + smtp.mail.me.com content=smtp.mail.me.com log=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=gov.ru \ + content=gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + r78.fssp.gov.ru content=r78.fssp.gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=api.db-ip.com \ + content=api.db-ip.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + api.telegram.org content=api.telegram.org +/ip firewall service-port +set ftp disabled=yes +set tftp disabled=yes +set irc disabled=no +set sip disabled=yes +set pptp disabled=yes +set rtsp disabled=no +/ip hotspot walled-garden +add server=*1 +/ip ipsec settings +set accounting=no +/ip ipsec policy +set 0 disabled=yes dst-address=0.0.0.0/0 src-address=0.0.0.0/0 +/ip ipsec profile +set [ find default=yes ] dpd-interval=2m dpd-maximum-failures=5 +/ip proxy +set cache-administrator="" max-cache-size=none port=80,443 src-address=\ + 0.0.0.0 +/ip route +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=WG routing-table=\ + To-VPN scope=30 target-scope=10 +add disabled=yes distance=2 dst-address=0.0.0.0/0 gateway=146.120.64.209 \ + routing-table=main scope=30 target-scope=10 +/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 +set www-ssl port=18443 +set www address=10.30.30.0/24 disabled=yes port=18880 +/ip service webserver +set acme-plain=no crl-plain=no graphs-plain=no graphs-secure=no index-plain=\ + no index-secure=no rest-plain=no rest-secure=no scep-plain=no \ + webfig-plain=no webfig-secure=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ip upnp interfaces +add interface=Bridge-LAN type=internal +add interface="ether1 - Unet" type=external +/ipv6 firewall address-list +add address=::/128 comment="defconf: unspecified address" list=bad_ipv6 +add address=::1/128 comment="defconf: lo" list=bad_ipv6 +add address=fec0::/10 comment="defconf: site-local" list=bad_ipv6 +add address=::ffff:0.0.0.0/96 comment="defconf: ipv4-mapped" list=bad_ipv6 +add address=::/96 comment="defconf: ipv4 compat" list=bad_ipv6 +add address=100::/64 comment="defconf: discard only " list=bad_ipv6 +add address=2001:db8::/32 comment="defconf: documentation" list=bad_ipv6 +add address=2001:10::/28 comment="defconf: ORCHID" list=bad_ipv6 +add address=3ffe::/16 comment="defconf: 6bone" list=bad_ipv6 +/ipv6 firewall filter +add action=add-src-to-address-list address-list=bad_ipv6 \ + address-list-timeout=none-dynamic chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked in-interface=WG in-interface-list=WAN \ + src-address-list="" +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid +add action=accept chain=input comment="defconf: accept ICMPv6" protocol=\ + icmpv6 +add action=accept chain=input comment="defconf: accept UDP traceroute" \ + dst-port=33434-33534 protocol=udp +add action=accept chain=input comment=\ + "defconf: accept DHCPv6-Client prefix delegation." dst-port=546 protocol=\ + udp src-address=fe80::/10 +add action=accept chain=input comment="defconf: accept IKE" dst-port=500,4500 \ + protocol=udp +add action=accept chain=input comment="defconf: accept ipsec AH" protocol=\ + ipsec-ah +add action=accept chain=input comment="defconf: accept ipsec ESP" protocol=\ + ipsec-esp +add action=accept chain=input comment=\ + "defconf: accept all that matches ipsec policy" ipsec-policy=in,ipsec +add action=drop chain=input comment=\ + "defconf: drop everything else not coming from LAN" in-interface-list=\ + !LAN +add action=accept chain=forward comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid +add action=drop chain=forward comment=\ + "defconf: drop packets with bad src ipv6" src-address-list=bad_ipv6 +add action=drop chain=forward comment=\ + "defconf: drop packets with bad dst ipv6" dst-address-list=bad_ipv6 +add action=drop chain=forward comment="defconf: rfc4890 drop hop-limit=1" \ + hop-limit=equal:1 protocol=icmpv6 +add action=accept chain=forward comment="defconf: accept ICMPv6" protocol=\ + icmpv6 +add action=accept chain=forward comment="defconf: accept HIP" protocol=139 +add action=accept chain=forward comment="defconf: accept IKE" dst-port=\ + 500,4500 protocol=udp +add action=accept chain=forward comment="defconf: accept ipsec AH" protocol=\ + ipsec-ah +add action=accept chain=forward comment="defconf: accept ipsec ESP" protocol=\ + ipsec-esp +add action=accept chain=forward comment=\ + "defconf: accept all that matches ipsec policy" ipsec-policy=in,ipsec +add action=drop chain=forward comment=\ + "defconf: drop everything else not coming from LAN" in-interface-list=\ + !LAN +/ipv6 nd +set [ find default=yes ] advertise-dns=yes +/ppp secret +add local-address=192.168.60.1 name=vados remote-address=192.168.60.2 \ + service=l2tp +/routing bfd configuration +add disabled=no +/snmp +set contact=@AmsterNL enabled=yes engine-id-suffix=MikroMaster location=NL \ + src-address=10.30.30.81 trap-interfaces=Bridge-LAN,WG trap-target=\ + 10.30.30.10 +/system clock +set time-zone-autodetect=no time-zone-name=Europe/Moscow +/system clock manual +set time-zone=+03:00 +/system identity +set name=MikroMaster +/system logging +add action=email disabled=yes regex="* added|changed|removed *" topics=\ + system,info +/system ntp client +set enabled=yes +/system ntp server +set enabled=yes manycast=yes multicast=yes use-local-clock=yes +/system ntp client servers +add address=0.ru.pool.ntp.org +add address=1.ru.pool.ntp.org +add address=2.ru.pool.ntp.org +add address=3.ru.pool.ntp.org +add address=time.google.com disabled=yes +/system scheduler +add comment="Windows Update script" interval=2d5m name=WU-script-run-schedule \ + on-event=WU-add-to-list policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2014-02-11 start-time=00:00:00 +add comment="Backup Every Week" disabled=yes interval=1w name=BackupEveryWeek \ + on-event=BackupAndUpdate policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2025-07-07 start-time=03:41:27 +add comment="DoH Cache Flush" interval=1d name="DNS Cache Flush" on-event=\ + DNS_Flush_Cache policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2019-12-06 start-time=05:30:00 +add comment="Create mkdir function on startup" name=\ + create_mkdir_function_on_startup on-event=\ + "/system script run create_mkdir_function;" policy=read,write,policy,test \ + start-time=startup +add comment="Scheduler for Update Certificates CloudFlare Quad9" interval=1w \ + name="Update Certificates CloudFlare Quad9" on-event=\ + "/system/script { run Update-Certificates; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2025-11-28 start-time=05:45:40 +add comment="Setup Global Environment for scripts" name=AM-SetGlobalEnv \ + on-event="/system/script { run AM-GlobalConfig; run AM-GlobalFunc; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Update Scripts" interval=1d name=\ + AM-ScriptInstallUpdate on-event=\ + ":global ScriptInstallUpdate; \$ScriptInstallUpdate;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Fake Bridges" interval=1d name=\ + mod/AM-IPbridge on-event="/system/script/run mod/AM-IPbridge;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Renew Certificates" interval=1d name=\ + AM-CheckCerts on-event="/system/script/run AM-CheckCerts;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Auto-update Cloudflare Root CA for DoH" interval=2w name=\ + AM-DOHCert on-event="/import AM-DOHCert.rsc" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2026-04-15 start-time=03:00:00 +add comment=\ + "Every 7 Day Check For Update and Backup send notification to EMail." \ + interval=1w name=AM-Backup-UpdateEmail on-event=\ + "/system/script { run AM-Backup-UpdateEmail; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2026-04-30 start-time=03:41:27 +/system watchdog +set watchdog-timer=no +/tool e-mail +set certificate-verification=no from=MikroVados port=587 \ + server=smtp.mail.me.com tls=starttls user=vadossio@icloud.com +/tool mac-server +set allowed-interface-list=LAN +/tool mac-server mac-winbox +set allowed-interface-list=LAN +/tool netwatch +add comment="doh, doh-url=https://security.cloudflare-dns.com/dns-query, notif\ + y, name=CloudFlare-doh IPv4 1" disabled=yes down-script="" host=1.1.1.1 \ + http-codes="" test-script="" type=simple up-script="" +add check-certificate=no comment="doh-fallback, doh-url=https://security.cloud\ + flare-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Cl\ + oudFlare-doh IPv4" disabled=yes down-script="" host=1.0.0.1 http-codes="" \ + port=443 test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=Google-DNS IPv4" disabled=yes \ + down-script="" host=8.8.8.8 http-codes="" test-script="" type=simple \ + up-script="" +add comment="doh-fallback, doh-url=https://dns.google/dns-query, doh-cert=GTS \ + Root R1, notify, name=Google-DOH IPv4" disabled=yes down-script="" host=\ + 8.8.4.4 http-codes="" test-script="" type=simple up-script="" +add comment="dns, notify, name=Cuad9-DOH IPv4" disabled=yes down-script="" \ + host=9.9.9.9 http-codes="" test-script="" type=simple up-script="" +add comment="doh-fallback, doh-url=https://dns.quad9.net/dns-query, name=Cuad9\ + -DOH IPv4" disabled=yes down-script="" host=149.112.112.112 http-codes="" \ + test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=ns1.unet.ws" disabled=yes \ + down-script="" host=91.192.189.2 http-codes="" test-script="" type=simple \ + up-script="" +/tool sniffer +set filter-interface=Bridge-LAN filter-src-ip-address=10.30.30.50/32 +/user aaa +set accounting=no diff --git a/MikroMaster/history/20260430/20260430220003-Diff-Config.rsc b/MikroMaster/history/20260430/20260430220003-Diff-Config.rsc new file mode 100644 index 0000000..4d15157 --- /dev/null +++ b/MikroMaster/history/20260430/20260430220003-Diff-Config.rsc @@ -0,0 +1,45 @@ +766c766 +< \n:global CommitId \"main/308/f5b1bfb4\";\r\ +--- +> \n:global CommitId \"main/293/c17fc8f9\";\r\ +769c769 +< r: root, in 21:50:02 30.04.2026.\";\r\ +--- +> r: root, in 16:15:02 30.04.2026.\";\r\ +1301d1300 +< \n :local IpLen ([ :len \$PubIpAddr ] -1);\r\ +1303,1304c1302,1304 +< {:set PubIpAddr [:pick \$PubIpAddr 0 \$IpLen]}\r\ +< \n :return \$PubIpAddr;\r\ +--- +> {:set PubIpAddr [ :pick \$PubIpAddr 0 15]}\r\ +> \n :local Return [:put [ \$PubIpAddr ]];\r\ +> \n :return \$Return;\r\ +3502d3501 +< \n:global DevInfoIncludeIP;\r\ +3990,3997d3988 +< \n## IP address detection\r\ +< \n:if ([ \$DevInfoIncludeIP ] = true) do={\r\ +< \n :global GetPubIp;\r\ +< \n :local PublicIpAddress [ \$GetPubIp ];\r\ +< \n :set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nPublic IP address\ +< : \$PublicIpAddress\");\r\ +< \n :log info \"\$SMP Public IP address detected: \$PublicIpAddress\";\r\ +< \n} \r\ +4005a3997,4006 +> \n## IP address detection\r\ +> \n :global DevInfoIncludeIP;\r\ +> \n :if ([\$DevInfoIncludeIP] = true) do={\r\ +> \n :global GetPubIp;\r\ +> \n :local PublicIpAddress \$GetPubIp;\r\ +> \n :set mailBodyDeviceInfo (\$mailBodyDeviceInfo . \"\\nPublic IP addre\ +> ss: \" . \$PublicIpAddress . \".\");\r\ +> \n :log info (\"\$SMP Public IP address detected: \" . \$PublicIpAddres\ +> s);\r\ +> \n } \r\ +4191a4193,4194 +> \n# /system/script/environment remove [find name=\"buGlobalVarTar\ +> getOsVersion\"];\r\ +4198a4202,4203 +> \n# #/system/script/environment remove [find name=\"OldMode\"];\ +> \r\ -- 2.52.0