From df1ba44e9b2aa78378434441f1bcee0617765ae3 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Tue, 5 May 2026 01:41:30 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 05 01:41:30. --- .../20260505/20260505014001-Binary.backup | Bin 0 -> 269577 bytes .../20260505/20260505014001-Config.rsc | 4501 +++++++++++++++++ .../20260505/20260505014001-Diff-Config.rsc | 12 + 3 files changed, 4513 insertions(+) create mode 100644 MikroMaster/20260505/20260505014001-Binary.backup create mode 100644 MikroMaster/20260505/20260505014001-Config.rsc create mode 100644 MikroMaster/history/20260505/20260505014001-Diff-Config.rsc diff --git a/MikroMaster/20260505/20260505014001-Binary.backup b/MikroMaster/20260505/20260505014001-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..3b39f2d1e2015c9b9a39f8a78b1e1b46aba1fbc9 GIT binary patch literal 269577 zcmV+aKLEh*sF8CC9RvUhW*o47;f2L%4W>K@m@A?H000O80004Z`T(2&Lm%iAo|6bX z1mTGK6EuH*s$47TMzw5sHbL*DsrmKIm*$cJ`e8eA={)4`{{q?iZL)4w7}BaN|6J&x z;KZD+&70(DEX%EywmV9&f;FUueM;=L| z7HEVCM<*bIrYS7YQx$&66Bp**?xsOf*7*-5Zhg|2)wgH{E^pBhqes}uL<(K@&hFN3 zAo|0Dqe7rytwR!wGM^!F>cb!Afeyfnb&_ z&G%Td_a*!bIXI?1E)k9uAtYI*>;(N(4aVN#8IGu3^>Z2@SEZ9K!GG-zJv(eRoSoG`U&tze=icx zX}1n{6)kr@&D)-;kzQu4ac}^!SUf0)BfyPxS;8lsdpPUaHMkUO zrlZx4=SnCdC3h6kKvxSi7^FuK2}u+6OIMyaN6(6lVdb-uIcf}s`D|p5KQDiG2}f9H zxvgd(uZteSZT>lr7mtfF&R56AWP_&Bh<--55sCF+mqtdJ?1AXH$ZkUgTfD&^PpIeU z*ROQ22rq4bP`le?SUIP(o=>@Q*56<1Grc0(%);bU-+be?6x}PX^#?cqWfXiB@`d>4 z%@=Y}l4D@CVfrL2=?S|@w57nnW_z0AyeM?tU>0@Tw(?ZN|{Cj1#SiDiiri;R%v`@gBaPzd# zvkdD3G8Pz6dD4u}zXmsNq~a!!0L2^Rf(vl@V(mwDOiWR)0;d8LX#rC-1wy`jhQx^t zldkeh7}v_wZwhrF1%!IG*YUOel8Pg`AY(e?gtH<-1CYI>o32RVZ@z^)F3QA$Q!zp!X@bWw%S#rwL<@#8K;P@G%6z9wv&%I*13%Y~Tu83==bl^PQZF zd?r%x6qZt>KTc4lJeju&B|ykz-IU!e5!_z?%B9P=eu^hlmI}7J4mjr&q?r+5#gAB* z8H*UBklPKy=gC&db6QH+l40$HfdMPb-QBLP)fXgZ3w*(qopb<*IO{HHvr;M#zv z<7P(DfN)ETf}MH+V$pUum`#a*b9WYSX&rQQ-5J!0QI1MSpS2ftu;(1NxK+7wZ(LQb z$^7O3zIi_`*qTy8qEe3Jg^p?X3`FeL!95jT}<94bV(!2JdH?y{uH@L_t64yZ#tfp*sXBOIwD))lTB)Y8rz zmRT`$#MaJ3I+)l?C)0VKt5NO9*4o}KDuJ8ADOYZt2!yu@bU_q z6VL)N5irjOlSIfrIY-#;lfu$qN>Vhy^fflSEs->c&*OpJWQ*;adIx;>bkyL}Sv7Lq zxj|s}Y!oiqoSpzgOp~suwksN?3L$V&sY^Z`m(GGa7+DL1?kd}d&__pk0}+IrE{xiR z`45=!9lw0%6TpfB^M{>tv~AD<-9ppwh^nPdhh)0@G(HE&WTy|A6u9v`lvtc4BCIqY z=H>%gMf-IiX2;vpv#ktZlNqCEeH&-;7n#}-iN$?$`!1p;9d(9#`nI#2p@0lXO?F|U zGz7M7`{BzDnsnqdCcLTAuqmRt(bN1NI}FaF1}U0r|8tvO`A5g)^c~8h)THn*2QK<+ z=`}x#&m2@R(Gh9PO0r*R;c=(z(loE20=SxMziAKl(V1PT1&I&*-tHXe9~?Qf ziC{W>rO~RsKSa7=yOiloy7n*=e!i8+OAQIsvr~4w22Mm46}qni)gAo2Sj=IH+!*o^ z=$uCBsTd@jGZi{@{V||QMe}kAMpi*aT5lFaC7fc*8+cs$y3?LdJ#;@*Hvz}=1GG&7 zO3}2%)rFKOIrm>OEFNnGrN3vq2|@F&Z&EVgLVJRCuFc!!IAG>FdAI5R_@cw02Y5?^ zm$cnOr2&Iw>lYrAq0iWVlwbb;ea0a2r(z`=FKo9G#L5Blj7-Iuub#?n#iRn4!jCG2 zg{4sjlH>(y*oX{O{`h(2Qi||1UUu?EI>F8q=k+EGKfjL6;_R!ywAW7)l=>l*ouqe? zPxJ>X;)31?IKlqkXp`N;4JII#fJ?-}<-aJ!R{8*u*;UaD#l-R5{UJ(QW8LkHtpcW0pWP=hgM!X|6Zn z+1r2F;mj0tlf5%-m1l7e9I1+?x7m4N2KaiClU%pe_rYk03hs!kAJ2i4-~I zwO-%#zyt4^K3Zygvxie1G#~_~YlCetEh z;Xrd&aI_Ar4CbOVAy^Rk8mJ6b`8j`Dp3Ib^f9_SphK?gS$Hd{o0=nC1eF6VXP6Y}gp(>TzLm~lFR~%nV zN?6?U7i~vRA5<}w*R|FdusIib=2H!RH3flV&*^AhQpiqR`mZ3;SW7~~YQ|0`3suv( zW{N6xdx=MoXf0qhvH`AAXAQ;Cax1FKm&jThxlB1+_(sO{T1eC+Vxwrx>860=%=Y;{ z*8SsFdF{*8T5}h&gKq`u(v%T0o)zFfrx7-1lpbiXdCZ9&asRA!INU)@RRTD1b(EfBVRnz<1 zQvz4ero3yvxv(d&?iDzQx(*h98*o7;MYnNo*(oUf2#JUMh1WmBoU%z+TC}^8H2SL$ zY@`tL-tBhTm0gZM_nE#`{MFKgP!W})0MdJzE3~8pMv*Hr35N0tI$fThZr{8fazZ*S zh}LOQ``{~f2bJmgG1#lJ;O@!u-^KO5_=yC~w)V=Np5kB=THB)#_s#mH_8Xg0Fv6V` zcPb6Vw0zbEcRQB`Y3spFBuMi2&MNX&22?ECUW}r=VDO=$4`bo&haCK@09I8euV_t+ zQMhNB=lzIZNV6B4qZib-=43;|zT+{n z4N$P}hFO9qX;;867`q+=X6SyY5mIcy^~6*ZORbG}sZEVgOxTqP3SNM&;m;*haM#MQ z#QnkRX6yXfP3)BwPsk}AY7+(0>b#NG*uP8LG1UghzK@G)x1+t=ZyziEP|Q$f#L=A% zIFfVG$O*x>YZJ9q+$cQaj#hZw-hlhdW-MRM)D-}iW*_E3f}-pQzZHTKo8w0a5W*ms zRool8MrL@Ejvwo^l)4lV8l$ZBGVsQvd&mwYY`i__>%w<~Z7!U4ca3~0-N8yJ=D2=A zyt3AAX)@8(Wm-dTG^M9FKEz8;>?TanbEaR3A_cO;X&9hBt!Rf*^Z2mX(kuy`sK+01 z2a0LsMSG+{-;jC*9pCQ7{G( zM~k{2!~zC*-AP0PJce0>ReD;S{HN85RQMaB4lPBoSr4j3HEbU!-P&vTn;C#H;|`DF zBM^Pns&G@>nKG9FPf6-sE5jdPMj_u^AS(OZIjRkV8iGs)NDlYPv_^qQgrAq3;OmdN z*%B!U4VDh@>ws`wpVO5b)jsVRK4%JRct_!cyKi6-nkNjeU{yARVV92)hY*dh7NgR3 zus66DEWtIXE?5;5=`U%~cs=uf67!qV z4~M#fq3(K=MC1l3-0Eo))#u+Pxlsh(I{VoExiI&sjbt0wx=Ygqn~?cEi}u#9lqNvv z6Gw@Fh#nw-&xO#w0g@&wCyo#aWQVOPZ#egY9T!~m_G#pkJ+?X``wMkWkL?|0K7BMw zn5X&|Di;9ec>tgc-}A)E1wH&NsO=n6PtGEoA~G(zz^MbN1SWzrYp6Cp^-^c6+G+Nd z+iLaDWjl%pu)>3G-gMwYc&LeN(4+AL(@h-^2LCQV^t|!qp$61{16hU*z)Jyup}Mb%n+%zFL;?4$Wgmf7M(@(xSh4&E;(QX$}W2WmKNhY>-m9)l}! zWK6CffVHx}`m1t<)q8YOA<2;SdUJtRs{=bhcpyr(EQ-6n#zKfMgXn!g#I0 zAo+tARnh?BWVxXd0r}ZiH`j7^8X_kR$3>Y+<(g1`#8Cz(w2} zSW>Lxf3xZ^83{ktlzPR=*0C;{-`8xzGY^lPJ?1N&uiL39xcPspuo;B1Kpwdv7x}GU zG-bQ(ERjE4){t|9JvckALA(lja7!igl-lT8=7utOqn~3+a1XcY|;qTMu zPMWpYw0kF61qx0GE_cMN8IcigE3K_s=|L{d+xpzx2lG^P6S*~kU=4jv>|~PFRFjp` zk{U%jzhQWtxRFAw%$*taCgNiWp~viF1-U)`*K(9?uW&XX#1ig1GbdtQv^8yiOBKhB zKujnlsXMs)EfD-e6Z9_QP~cxK>$2Y~!t<6Gr5ugh)?c;MY$|H{a~k&SJrDnV5PME*ud=Z7DO72#(g|^wB$yOR$e|zsV%r7>6`{C*KhS$v zJS&HKw_62;q!+wy$i{0js}Qb-fz$la%5^q)J^cBgcQ`hQzn5D30In*OQzmi3DOy7` ze@eE^_y#9Z2q!N;Y$pTC|AbD17%CX|0&jki*+L-5WS* zQ{HKeZyb;Xo(xuRr}FvBFeZgzNBVR2ZH& z-hKDSC66W^=W(qukF+_M{X;@QRxHR1vN#)rxru8!+W6PDgykYVi-I9}#CQ}eGV45c zV_Yu94Gjrwu?*bYQJ7?+%6V1lrr;--EIj366Sy3zY_fV%ok|EnC58_8J;kJ0&v&*{ z)>C^YwOwG?DE7s~?*HtQ-m(Mx3+BTt;f?u7sf3dGqE0r_@jzjPV2q8qKyi|Fr6LWd zqd6$JWn<2xOrf>aO2w>R#STP_Z6`PANH_UBV+i;KmXuCXzNNc*G5au4X;iy`NeVxx z1PH!U7JBC}J8cA@Ah3ABb@-rY7y zU(WAu4RXCA&X5fe`YUA<0I?icj5VCGIhE~S9nw^N2x1c`Des3Ae1Ua>D-C3D4UyxP z#wOXO$zCfp(O$wXs754>GlnlQoG8V%m7-jS@g`yT7$P-Md5$#^s^ib%D&N+SQhxnR zUY?I}J}z=DytS{P)_=GjJVHg90NQq#iPP~+jBI3{fI_V=AdGlZAdu(pB6C`_>HFPs zaC!>Nmps>-oXA*TEH`8`&KXGdzFaV|Tgn2^oq=NCrQX%^`d=<2FS4G*!;=T+JX(cZ zQ&$K69C!mS$?_usFMi=vHGqsNM>&=_p!%RNnPym(B=Lbq100ms#Q!)MZudE9DsH-<;telzTCkO6#y7{5YQ6=5(thgaX`De+f2jWQ8>Jz~w6gHs925qk zv-voPB0bBgywzzcuE_!9ERS31QbU3Mu-+F=0YH#5MM26qT0w#zpej9Gn{>JPFsOPF zn%Z;5%OhY%z6HD7R&UnQ7=YGPnOc@vJHou%lPNwZo9lr?ZSq=qaLU9ew2qtev)*bzeM7`#0i6ghRz zl7k89b%}zI)|(OKGV*bF;8*_ehrbModXgm|;{xn?RP{jY%SAC5LX!k=!aphFZIis% zotla8GD5K?%fw`x^l|G8mHckqIDKv1Dl0n?3hMXa%hNn12rX`%PVKgz`{Plv7($7c zSSR4A0>*L_&}0*}>wqUG3}HB7n_Z9Q$NgnRrV${s{zo~;dNEr=qkS2X4H3UrhMc+` zyUz`*&;&RZs2Rmo)e~a^DCd;2GLjWa8#hfzgL6T$Lw4K2(c_JmObzC#`bQqb4yx{e z&CvniPHB{(s>4U$*mtvXzx9fxVvHsH^sUL*@kwkQXZzb(u2rZx&i58Q2F=idnOfCz4&m>lsO8arxCI4#QXwA3YnJ zXUREJVMNRdr<|sy zW>SKIDe!mUuVu^vcj)9;%PGEpuX|iwhe&!}Xio*r7#axI-x+BH@u8Vc&|m>ZOl?IK zt@X@0rATr$hU4}(%b3rXuBnj&7lcO47nOqM5}|?q&e(oF{T!~Bv=;d8|E>sICB2o@ zB8-8sq_ZW83{%VqDE3{`LFxxg>aPTnJ=8+Fiz-C z{N((TyjJlY{qGx6=vK@Qk@#c+E-#Sj+ajS8u*l8a%RYRvVqj?ile^C%M*?`8+3)MQ zC-MS!z256c{e`Gh%DJPp9VitnJn}q|o2a3m7{24MNdL(am5&pi^X$V@UJ8c|6b5iW zg@dYl8pw+Ojas7M9jQ}=W*JB|2r)mc-8F~bDnE9AM8b&yl6c&$3ife^_&M8sjI)mG zTSe3H&cd9}<*$eAYh&9UZjsrDRuAovIcB67PHbKa0^14|iEgVW#;uwM{i8UZ@SXpa zhjtLnSNzCRU4BWhaf%nEO3T7l{@#FO)qdN56R71!n}cs z7N9kfON4NVfPQcE^%Ro)$Ben$DgjTW171cNMBIszTDK3I3I5dRyVVAJf<_A#@){Zr zWEK0??va&h+IQb@U@hbZ%Xu<=iQPuIl?_f2J)^J*gzMXpWu(<1Exmsz%;hsu=Z=!W zj45^%+Lf&1rb@ATo?0sg=o!zYL+g#L%>IX$XBGDFX6gB^IT1k%guSUP$?33)e+wMN zNx~4^w$m)*9K?N1`^LZS|U=cYdQsC5n`9y$tECId!Xe$dFOPD*05`OVxtVa(! z?OW?ZGu_?<^hR`c`F1>#!<8V9yB_!h>flC(D$5yKycEH%H&Eww&r% zB2u4V2b4m-ZtV0Y_NLf8(AeE^$!vszf9dEcTivCko9 zVDb7F_|a4Jp4uoN`iF+tR9jU~wd89I*g6x?pZA(xSEI*oic1d~LI~s2GHvdC&yaA% zdP!;qXuT}WRDO_c&Tff^ka&7=7@{TTn{d_GPoY+X*+&{r8_vI$=Jc*K^6}T`Zcl7O zcdDVNlpA(48>6azYyUndVqN>|@SH^$J*lngoZJ3t;+oW^ySObvHogbfi*Ru@BS@%a zt)niP6|azbGJclOvm$PuP>i};5M~(R?u`CM<9c)0t8njgLgI)~$#34tQ}=-k_`xa; z#mj@SHNBzBWS!k)P1C3uRIa_-{_>YrWWzpl+UZAvUA?zlBXZi(! z2E8mE$XwNr1!9%H&j!R`{Z|^Qs0FN%dh+iy^*u+_coG&TOOHq|%0=mx9>nBiJ{vsyNA-Wj}^(T$zFpg(C@+MXDbL49|Iw6kX? zDr#CPZPEqTsw@6o26V8*m9$3S(>=`&g~i{cWFI1bBVQQphONJmK>o>e+J!Lpy|U&O z`I~9r*@I~`XclfiXc`Z^*FE%zeLI@QBl#(*}&D)?pl~-j(!I?wZCGad4y1g6D*}MYh9e0%Y%l{lY z-JWz}!WhYuLn3cQevuVEU3i`Kr&t(@juu03OQN#TSzTtx4_j4 zk+9SY+^7b@FqS~rjPY;Ej3$2QuSVG;f!0x${6T;SWkmAnR8JwkQ!cnOerGtxGl?Fr zGMIA!*i9U2AcaoCHyo<$cy}#ih!{E#e3||;tJBVcs+)2cQX%D>jq-%N{7l3~iufr{ z*`Z>T^epj&W%<>@Uk;XA#L=GMgc5_AL${O5s9MO4T_V^kXZ1P%6oSV{x&^88^Hxvw z1?3%&;sx=G&QKT1RJ}vr`eQ^H63i?zc|ONLHcp<(km4#!M!H#pTgjUwZZ|?%^+|n# z6(zwiYLJM;T}wcWn^(Upd-n|tKoyq1jgVC#yvr^rSX8Ni(mih7qkz)YidMdS zH|VC2P@ZYXVXtu~%~_(Kf&BG{NzGVo_*C4B#^qd{-f?3}`Jz|e1WSQ%xCfEXp(p{m zobJ%?*s8CQ{CfWNarNB5?^?0$5d6N2@{Q7T51z3JGvFO;CG6k&4Wmu=KsAQuS~oYmD9cjFdNj^d<0Ce#~i zlsU9}5FfQ6w!XL+_uC-Canw48ouSDz)B+{N<3sXul(4)W9fu`IwEfGVmdhPD5#DBs zLG#$;KS^D;W;Rk?aXh2Lf1@cG6=~H@6#ph_?1>QrBx!yb>}yZ8GS|%olX+A!{4uC+ z@=)wPGSeZ)WX$LdmErp$yumpT!|#k~XTKFO%a8tRa(miI)mf?dycsuc-4!w*+rq~L zHBd=0Mj)r}Cd^vMq&n!K5yL9nrXeR|t|r8EEPtz*_UWnBcoB)@L)&Xv@4WeHVBSAw zCr4-Gsr_Jck2WBa-s^^$k{G6VE6}n@JfMvedoe}%0M2YY=hi@&2}=>~$p2p43mizQ z8>O4q4iSJ5e!JZEpg&`APzzg9i*Q#R-}n^{GPmt}l!{&h&T#HA4;&TuwZujgvU zB+Vw$#OJG)joa)o!Wq|S*Y#S79SRt-+6RD`mc4#*^v~B#kHmIU+P`xwcKZl^JMl_o z|H=i++N|BWD0?-r;Ix(vP*EhCEu%rNMrDK+4B2}F-f4Z=ogq}DaOEab{Wy#!$>SsN zM7)kEekZNN2@di%^j_~3&4{>L?(T~Ppl&Xb#RkCLZ?Iaro79=DL|=0}GPF2HdMgC? zvjBIG+-iC150y%LG3hVMJa13Y>|@iq_~t&ZBLN#5DuU$v9!74-;aQ4F1+eP=5A;Xa zk{|Qp)oDFt_(zTq+EGe`mwZ8Hqc7KPK9Y(R}$h(4N8}pz{R7Y27L*$Gcc#Fuw zHX-&ERXlWYdoZfMG0|PA{B8}9@YNfkov9p8;WP~K2jAb+Q@I_o;!(=KP!i&Zfdouo zl=b|n{;JP`(2ERQbi|!yLNW7i!M~Zh=(!01B*C*Jn9$wo0H|PSTH%^kktg8%($BIv%!MCa=bK)c6TV zgaxFD(#CCb!gN49DPS0CRR(Q{xTp+OcPfyI-tg!L+Z`OZVRv;4&=M21s%uso(O8@0(sK?x zDYWj$oJBIiwfde^ZYLtq)IGSY#c)sKYe&j9I$`JInrtGv5?y5G;tL*tK>pu_;++(^ zr#y(;8-nTghWM*QjvNbOt?zUMbcVH-4Y#;i*4K<2K~#!G++&(QUxs@Y5OIt0T$pOM<`47A$p(NPDKHSJ(aW>7GK`E6>$Kfp=bDddl{)Ktr$e z*e;J$dwUR3s6GGGo`hw!HK5*br495tS(tCm&*DK$InZo7R)V~C32Y`@8(ip+z7yF1PN1ld2b^L3swq_K7J&AJMWj<%;?N?kq5GZoCDn`|z(?b2?efAfGu%;qO&eDqI16&=TZV zBgNCjqq)abmuj7eiFxa$?dke2H6EPxwNQkx|8=)w(XHy^oc5Nw_QECl6F~E0#J4oD zX{f}Yh$pF@;TBs(J!tMA^uQkTX42$+jQe-auY~7wwhr~ltrm&-0kjxgg3=iH(3BY_ zgPXQecYl%T>WC7`b(b)#+wVhggUNq79Cp_8Oj``)e_X_9r81{N^8~o^Pq;HsOgYYAd%7qj6X1|0wYO;isu&=I zR4?tQ%|w$6&ouhOhJE28)jQ8VV#P_8U~U5-{3Dcp&y7BfCv+i`@~3%7Ftt%)MJ;m^ zhP`IGd~XkeTPE)pa}EhZQWA8ZIy#Jz=VGgApY8G$;Z0Kg@^9oF+?F+B|hjZ z5n5DT#&~R16ie~{b8Rz_8B1QNe0owmo$>hZ@k;Fif>XXc1%PV+{y=3`J|1fIyU8A^ z7|c=tyzY7=xC0>HjXB|;w3Z|ixK$eC&E`(h3uI=QxRHZnOp~lxpbUYh%2`-A>N^HM zt9-=(S?JCH*v~e}`SU0&GppI;wXANpglOLWkby{RjEbrDHM6_I5|MzrkflHb*ve3fLd6xNOXcc1jQ80y~NTTBL$>xwuKIT{uOe??Dp+nITJxBeDx}YLSCM`v6k&xOrL`g`Whl0R2oXj{^)xl2Z*ZU^?sRX`W01s{>DF`g!vRs*4fyC} z!A{L9&*-&U!%*&*@)b)a3?C&N;D0us5;`uqO%ODaedUdxzMfZlEO@uL*mIVA_7q+1(%fvM#0TN~Q5EdZK0 zB(x|T=Ut{<)r=I|zqM&`w50vZc0U_7GbR9l%mED^u2I-S)wy@yLeW-6#0W+b^| z+$xw$ip;z4e0#@4$%D5}J#0B3K4D664cGgXCTaJQ7FyLK_B5kO1g&m*bls7cTFqa} z$Y6lQg*}6t0PFgoFEklA(oBk@xb($@hmPNw*`#sn?S=DH9hrI3}J22(nqrE{(<53NienN#J> zXTNnp{7pJD9r!~Ug~7bZjid;miigMUp}My45Ya$JRbAlk+$r<7@}@k;P{4Qmf{ku- z-G8edY80C)!j$)!!>3u9!+YkHrAlrnv_Yt)WhW_p+e}8N@)9P|Qf4JROf(powetVuI7QFj8^f`#sX>n{J(yf?3E12&t-fO}; z)rcz!`gDk;Uc7uUJG*-8^oA)~89EmW72bs_l^!w>!C`BELh+vPC)M=BU0LJvWXRmaxToE zdPO9d<0l_gQ?zC0`?~DKY#t9ZO~7VyL2^28{f{li#GNC3-6KYiz>Df;S0o;@D@LzM`a(_3%fp?D z%{>_#n-e|@AFW}kMF_;hV;^#jI9D+;6?<@J^k4j{Yrx~?YgQbI_$gyTsrvJx1Fbgs zgE^Loc_L7h<2b+Lo=^1I6!K20-pqCrRxy!wNr7%_L8JBbB7VG0+dK!ud;$Md)9iY5 zT)FhcOm5wIQ|$c222F#Q$rFfz1`H+N8cee1KOR`lRs)J-@))jUy41}^ShAI~^X-a{K3WsE9^+NWXe7 zrNOro`?mp=%s)U$)P@`ZD27;A$K;d_uuxo+kgLcbMl16vGDq!3uOp}Mrpv%ZC8JLI8u7iLuZw8^3-hRf zP#RrkQEZ8Iasdc1RM6K~_Bg9*#|05;3|HMgY2z9~L1I{PJ22CQ1TMs$8&%9lU=FN~ za_IdW@)+B-L04s@enMgd@B}=_ME%8BarVhHgU#6;D!%NAq7+Zf1+@wG0KALs$iR+Z z>FrLNyDd-v4TNxm#QdXQfn84Xv9Q(4>|t056>H%y4AS593p|6;Z-;!pp^JA3m9}78 zzJ63fuaQ&TKaER-%136X7rv;jN(x>}Cn98uahbg`AVjHKkm#N|!^-mGHsAMI@Z>4# z*@gW0=Lo+jjmIo_M~@SkIG`R-p)kb zG88?QD$nWAPGy&y^okiGmjQXmOBR_(y?D8Y)f6*s<_~yZsoWzM>BH6-VKsec5#A_! zmA3VbC$GB{u|bi+K|uv=_7t>@QYbuZ&_tUhti-V7S3?Qlwjo@U<68Mf`a&TzO8Gr? z1>I*`ag-AzEmH*6R|`>_nDCUaHI7-59cw#y&P3nk78&U36KiV_JWG%yy$;P~Oo{TOUEzWN%jq!>8dg_nYLeS7yUSKhVDQ27tr_yCibz8&GSCQ3(JbZ zEY=OSF1^(+lPa)hf2hy?n5DV`RGR29lC(M@a#w!opPaTWqibRbg#7Q@UjTn7YS+>b zw%cw%ZEN}6S<1xC0&vN-CQGLpxV2J- z)w#SyIQxK;Q#U*NCrJlZYF;r<#B|0TL&lArV~z$>F7!$8xAfD9HcZ>#6DG!ahyO?z zW#Qou?<&V-*E~i9=7(ZFyMV`f6hG+xI}Nn_PB2Jp<=68J_43ue9sze0d5@ZP6%B#z z^?PgSDLcxG-0&x)XQD1P3fbzOg{sjR2D%m_F=f>VF?F*Qx=}#e@s&GW**o$%Q%r&q zX@4blQ&n*uCy>hBJrtUazVI-t+z}+e%>+=WJ6w~h4e^>UhI{n^N=V7g8<=uGu-`|A z)o#?Y0QEeslVOI?=VZ?UoXP9-LW&N}KARX57?w3?A3WZSdZd= z-W=d}t$^&=NIZ5!f~enO77?%J`mS!r6=-M`a{aPW4+nqrv};gAJkH08!%QmK$#b># zayszexPAZ3a)|VEeZ0}nTst%%Kx7SST93uOF2$-(SqsLCOp(G8>{J^GPE*^$lX^|tW z$tE7HF0J=jPTUg+cLp_+Evg{L!C6z5c@k+qxaiAW#FH=8eV!f1n;NX9Q!Jt71|7ug zDY6JlJ#)Td_d>K99j$(>JA5T{STnRdCIniiwmB&>O>>Z`CGS$6!J@}Um-wdRJSyJ8 zyM=cu*Idz3&+ntEV#z7l_+0GgMyzR^=3va&9+IkoEr}aOWp&_Pu+6Ztqba}|xPzDA##w&70q=2st)3h~es;p!Q7y4S%|Cd@q>hrE~ ze?wg;*gR|c4^mLx#RXP9?r?uka4L-5)-!|NKMdtla;rjiONRZuQ5&B0^o$OFUr5QB zd8a%P-dGZ&dMoYtZPVv61oEtZK@jaQQPZ!iVG)v4finb`bzvw_FxG+UZ87}PjrLW( zq&J;CT>r)#bj*h?%Mbo(5S1L`+430}d8FrvU47!XS~)Fh231v&%&-k`q7=-Y6+jvL z-=+n%hEb5@#nxYR6LU|DrZjem{@8!qvM7mw?^euwwDw(iBwd-XV&nFd@71Ti;`t9q zel??Yh0%@A(B8~e+Ik99xq{P?M8iCMQ8r;dF1Nk*OS9#D_qbW&m)B_3!j_gTx*0`X z{ymh&CKkYA!^yF38n*ei>=8^Kv-y_zDVRh4b006A~tDs$Rd%qEtN$PF9LD9_E*GcKMHO07vPL(IoP zoM!P~e8^+8(Gz3c_qqOql{pbTDD6azT_Aw@9VkI zVjk-1IzN|0LPi7~&og?7{r2a~DSf&3obRcscP+)}g`6IpI$r-b>k!ugT%RPxPP6TQ zLb@f<92^Tdsd4UWETU=Khbh&Vs8fqD&^VBLo}B+vm9F#st)bA#$^8Xy?dfeK=DBU_ zI}sR1mdm}g7|TeZ_5ns4=`m`%N2nMZ*R zJ?_VGsau6Z4wZpl0@rytsWtPiKKg`QS;hNA-{td^DQW6@`#Q)S#8r5?k0AG}KJ=b9 zXdFra8%m}y9HlS`2t#YYMTSl65_Fx}=+A=7el@+BM7@)Af1wFa##n3hZJURK9h=(B zafCAYpkZAX&chPeMR_d6S~1l^Ia|&H!Sd5iExV`tQ~>ILog0gQY2)O?Ri^BzWg@GN zAn6C)Ru4`JK^l-p&&nL*ZhWf`Rkq|b>qSVk*acx?O;*w+Gp1QGl{t@kyx8tuJwN(@5RRCGIQB zZqVdBaH@4Qee4p(lLxC(wiF8JTz5q^2v6w`oKbxEG+m@4L)0l2Ic4o)IxZ4`8TSd zMx2wVmABy<=(x1mwT%mZ0X=2%V-_p&=dPG-WXA`fS;ShDfW^OHe!->~llVRJ<8y{K z9~&1lUON-8utwh@T-OPWAt-)?v;Qcj6qA$~E5GqX=JU%OKBC`y)~h$$b}nVlMiyrB zy}}^coJ(!Aqd&h-t7@ChexgT#=x02WqyZ?R5yXayC@`Bge^{eZuDSz&pF2#4s7>z%c#6{W#9+(TlDA0}~J?m{~_B7hf^w@duPi^x5UXkHZu zJP7~oT1y3jmqPLgE(U^% zd2|#~-n(^}80TXf8@hTIGrg#$$7zU)gW>Fm2)TN#~XPttU1m z+&jd;-jP2o^Y|4}6bC&!TqfwJ8?czfiMIfg0kZSn9Y?P3;asf@eNdc?rKfOX2WqZz zQ)UY$36)R>A~~wf?!LGcj)Qs0aE@TwPx@0(ts3h@CY~L=4?YanH4AE7sJxUqlhhSN z9E`rSx>TOi38V zX7eG~fDI0G2m6&cYr$T!7;_zH7__;%lFaj!w`KyOVu;JPB$1Jjd95D-Xy1IdmaP8# z*h<``mnF}!-M}Xj7jyzA7dek84I^*@#+0^^S)KHmgf(+q*CqA?#HkWTe~5TPTlvgh4eA|Ed%eyi$AoKF{K|cK$mW z;AEeKRbY)FLPBWRG@7KTMDy)O@%`6gdZifILJ{@Y%a^*E+PQyBb8?DlA&RLiI8Y`X zB%Elqg{ewIX4PWuwLr=rP9X-l`o0n8EtbcU6`-eGh*8m}^oV5BJA@Je$e()7L<`e_ zFJCmS9WS|1DKIgQ>tP2aDrU|Czgq~$qMNk;TN&p5Dkjy@o0Tp(>d^Oe7atfCNa9zxub-2#q#) zjY+fh6#PU1I6b`={7f~&HkvnTw)r^4$#fc)*HHYN=zL>R@mLZ{0LI3pOBs#aRBx=7 zUG(s|fkH^$wyWnH%)48(X&rltlEDLJ6(11d-2|u_VRqPlvK{>Nl-P8Nz za}HJR=8dF(DDSHsyywoi!B79^|4c`*pxj9FX3E^?XJP~r#Co(F6TA=(MDxwKJjyg$ zFDtdK?(!k-JGYdt0ypF*^y`rSBa51YDrpB@q~vPoxy*ALV^A}o&bWq8S!c#;Dg-Q5 z6K87Ju4=@_SLZrE>w(MO`@Ir)wI}>V-mHlx8?v%7kTtWJbU)v^zVGiB4dF-YCE@rA z#p#Jty=`G@3bg*^8SiME?)SVT9Q$zalZ9bRRtU=_i$W#U>4wRFE{T@V9FG|xU@dgb zQ7AtQnj|T>bt*0U(H;8O21>nbT*u~(vrKP7AKesr97*T4rPJcR0L_QRxGAGI69jXfyK~o z&hl()>N<%1K~by5Dju<`v@k~0f8QDnkCdd5KxW76kuz6=L`$-!$iE1BY{8Rv*k92` z_D*-%hqv))ukApO9IefNBpgqAAO4V#=oYKBykj|I8i^(U4BR6S%E&_4GJZR9{ep3Nb4fzjA$;p`7u|2aWUt7rf|HV8@{WvyGLq ztA*jZ2UX*#l9xTr&FLBso2C%LgztfrHdpbFpm z0`S;dPhcEZsn_r`%&khHe1)7ycR~&OP&j9fA^cGIUw_Fg9^|vnrtHp54-2}KzR4B1 zjLA-5=h--Ks0+R5C;fu2U(75ry#M!rvcRxF_ov7*?~>SbhBmpiX`>wRnGw5`CinR+~o`$ z)+im7k+~ZDX5ltVzGS{C$g5onycK$X#M!1y1D)#-`tbj$HGoTYG`e`H%VNVl1Q&cPtKB|ZYD5F@Jq0I*;8B1s()p3@aJ_J&2m(HiA`+2Y&B6geEd5wX zD0zHjt{fWAqdiblm zqABb+qdKjQPL1cBj?FH!X@+A909w-o)fcgA9mV+9^F)?5yydY)pBU}ZQ_pQ>s0ThU za=FHUa?w-r`c-LDX!fAvg~84hAd(?t$?oYt+qH-itmv}JGQizJ6liP?aL038lT=FYL`CKPspivJStUcv-6ni}J5F8UF4?2dg{{T%J=6Q+ zGO!|;IDSesR+=XIu-$9Fmp8GZD1-4DD`HfTd8-r!7wltS1QC4M6HHFEAFPFve`oUw zgYV_3s7`+zumY!b-X8znT+fSnj8M$Te^!moZxII5+q+W*13rSN3SpFTv`486|IyN_ zIj!WC)}Uy7cGI8LI`C;=JQpjuYCt_vPImT;iRuf>!fO^^PnWk*funx-Kr|rs>WD2W5tR*5Hxh^y7Y8o9n2#xY>yp~UW}tVRnTn7$QG_%bs(hRbrT#*f zSsEAYM(UvSgR>gU)KhO%RO`Z!Oml!emcE2qkayqLW2+mge=?h2HK=;pu4)nZ=D@sW z<&<1XsVY?xCBL;l#!p%u)cAHxK8rV5e*3y!a*XFTnupibTn--fgXkl8s$XR7&29Mj2Jy(Q_gUN z^gRsv?p!UUhj4xz(2sMKvefM}ZPbibw&0>KIJCMPGupp(+j*JDwSu4s*v8@f(4IA& zE)0e6hft+vRxi-uRZcCtt+8zh(Jl0A9$iZfsi>>2^|`=ONGlhtl$Jt|OL-l3LL|^| z-=Tu`4h2AWygA!}6PLSEcuWmcg*XjLpvbi0Lgz-i|E3*pzG21oH*y<)Ae?fRW6d$p zD+BAP!^1t``$0Z5PD>943=#IXMU%N~Jr#Q;E6eRHLb$ESVprNNI3O3b9>IJZSB=Ov zqNFZknY^zf`ZZ~Kk`M$3zIVkMlbvx(6dl`CD@nV98HMO6ECeGy|1>{S)Hfn>n^$0Z z6VXI6rQA4Akg2I77k|5&w0^;au~9XyvX7`STogjC>r1}j<;oqjPEkv#v!2rp?_{0 zd^}+IIM0)$Gzf$teNBKj%|lYVIyACdkzFiIhtSLc{I?+m&l*dGJ*`^iKgb0|$^Gq( z%q~NWrnL*%rQ3fXVEqRu!4L2Sqj&5r9uWS?hXbKpy-5^7z2VAEoghFHbEDvh)?4Fh z>trUliHv82XIYSU++F+G1*w2-k<;X!big;>6dF?3DdW523@_-fJKIKz~2YYC%ZHj)z;V+$*0_6m= zSnzg(=5Sjm4}%7sz%vhRt-k<>@`405Kf@K)i(q(+O4=XU$FrKNNRR{TfSA?>X6o_# zS2Y(8VgCQuq&lbN1PMucOob-RKRDyZ9#tT#>HGTj{@t5naHa<3iR_R^>7M!i%%Kpr zSj%$F1FZHXJe;iw&B1Lq{O!PTU5;!jzbyuVji262lvz|tZ8*mOLJDgzef{aq=UEWn zO%DxpJs8Fl?Uv>5^UC9cWYNuNOd&<^d`am|TmB?v?t!9gk)NmJCO5|Jpq*Sb z{uAs0%n+m^vB=)-P#y~0*46o5ZA5RdP)8Y)^%5(5Tn8rtt57^s@8v}odp8XV&1&cf zzhiCbEZaSVzR1z>v+kfM2Rv-+3Q+Se4(~ z;bq;?{Ec;?j1M_$<~#5c!yBK0qSzXHgqzkO@P|2nEvFk2(rDt}iXvdG9^3Wj4hP3S z)hT;}Xc+vU&v&h|Ot3%CrZJ9{pYLqSzZ>;UTMY8!Aq<7I%7#B$@7RyN^GSb*_~j+) z8E}oA(W0{5P$_SJXZ9!Zc4(vgjVlSNEeN;MsRah~&?r_6V#heGw`2p5y1))Kxa00v zMk`fN&oxFIpk{miE6bdT$S7|$3TI*W#73bs`R~*WHR#|73x=>MvK!!!XWSqDzK`05 z+%)KJIMyZaiL(vGj4_DmG4wMV1{s7FmKwg#G^Nb2v3+D5#R;cywuJ^5I-zy}mpOw^ zq`U?p;t=JgQzGgDmw30rr@Eaoj}@}E0xg~W+YG(}NZ3UzXxGniR5sWpEmiuk_{R`V z@PaMivL9nl!()~!JlD4wz=4Po*__$SQ`w-NBDi#FKH%R>eGh3crlEeE#mJQQya^%EwOF1l6$cw|WMjLG=>9U)qcBA}1zK3UGF6 zN7Bv0iBYRE-Gtk=6v5u!AwQrn(!pC>Mo`4(^1@Esw$cZ?oL>rkr*@F@dpn@IXl0 z;j2dhv^yyv7PGXhK)%Ny7fuopfm|z&`6pj-m~e&#U|+{F;o!Tr>tcWofY&xARbiS; zCg?LYAI&D~Ld_#ZVAvuc%YEEN1)&w#DVgm`PHjft96gH(b~tjnBA}Wvu2C|ZF4Tse zrYXFnj!12xW%`Jg(aaQBqmHN<7gvZ=p05!qK#bA$@c+3)ntz2i@er6Z{8Gt|erKGM z4!P>`&=7)y1&EGjJl+51qV}Np!&cElkB`;}?lf zfx%veD%j0Pdv5^W8|&pF=Ha7ea&-}D1NMV8GO3HoELnS~vI&i-{%S~zIhYgyo%RN? zRzuZ9-NTlc`bXBEZN!3eT;^7EOMZ*9X1^l6Zjz^Nn*g3M|{nXa3%QGO( z2jM92(5@HE^4$m(fOK#1(6c{3Bgk5IH?9x7!OaO8WqHRQC(uSO^OLR;pU-FsDphHj zQhzInux#vEX^Fqw+*CVa$wR2)G5>!^FS01tn%C_^a(S;ee9!TyC!ukB{YTF{149Bj%{ZaW6Nc-*hh& zh1p?7ufQ_P;wi{P5EzC9-FJJ?(mgA;li?+tK#F< z6-Q^>x}(M(=q9w-_iyUx+9t9HFS1l9IavAB%g<0EGlyCASXxNT^FH+)Tz}f3D`TcV zf3ZyIJO-Sl|9q-rU)TF%T|!7-q~pBf_b`FDCHzS}^_!t-!BIeqw+iMbN4X~oB31jN zUPlfLYg}~S@}HK-PY8Y4j*nAmyy&AavL%$V|LOL7!kPjyU|#j57Xgd;DSZT=!0+_Z zZD3#KI8iX75+y2|GMc}1IBt*Vh^aK_m7bhVJhu(#Z;4tuFW9TJ#;A^ zLJigJn2^K$-{^9xM*qWXzY3SXcWP^&2Ea_6K!F%bkDB`F#5=xR-=~(NAwJ0Nh7)9iui~oh>3G4RGgKAzqh0hnZH=dIwL34ACdeccxsl9;DWXArjt* z`>zhB*W9{RsoV+{HTn3Cck*0gxWUbcu4V{14jQq5AEt@u;C-W59eCT@Yj-wvIlC=@ z-~@#Nj>&AAEvlD`(N-fO(vE6))gNleM}b?CU@%FpryDwlk3rr!>$}}# zlyuRyTsd%D@B(5MBS)I(t%4{;Z!5C)WstU(^1VSoY?r0Y~2-Qw1_XhdGoP}4Km4$kh$13>_^~5ojN$$tv@d0n|ZujJ4$#Can+hN zxcj2QfwWYgf&}^FiiqWTrx~~Lzqz)M$Ql{5F+)nP^xGOW(~gRqqM(tb3p5%EQ3bcE zdEIvY?mfT*X}96_h!OG(gF(0UcsG;hw<3dM8aHjIC`lB~1qm*@|Ht1Dq_Eiue#Z)t zo^p!Nwdua%Z{bSZ$DIB1tKw92Oo-5BD9f0V#E#Eod%oKl7wbzrF1xmAeZ3a<}27}Y(rIaza>VHeOGjuLcU+6$F&TW(``zJzvxOelbQnlNGFMi0#1=u2V>owssC%4B8?6HFMg}9pb|JmE`7q zU$qVF@8S1fNAzhA(PEFpTzpA~i1f=#*hRlu5Vj@U1|Ek% zZ53a=cV=pu<8Aun1;BXigP2n--+-$}IIHI!YW0GB2H3MuT7;3zpUhE%Ys*yTK){VC zXxQW0Qf z%Eyc`L9Fz{wFAWV9|S%z1o0Rx5vQ~Uwef#KFF%>njO3aSciO@)R64tVu)P4ouLYiB zLt21NJ~UK(RZYi58E49aa+AiIy<6}EMVno(LD8rG*;*GlOHf)eho1!Ubh;tN^sXNu zfJ;(MIkz5*xbzR2s$#*WyFXUWBRA5RX6izC7r7*n5S_40B+?J>t@T&RHG3mdqh zia~eBwP469*=y)Dk;z`Zaj`~#&XSLj@^pbATNuxq`Tdq@ zC8e{uueVP%?Drcms}gKp++Igk=dNFDiJO+GdZRS*IV6wT(w&<>KB=p5vM*By&y%~F zuFrF_JV?O2i5sfAd%PigAF{HE!eKP5HK)^WD}O-#oF54;>L9kRqbXBrRU#|Mm<9~` z!8I)fDuS>}nFV1hCypz<02^ed3{#Ghk_WnYB#MIhg|EVham8xT=_N0-iJ#*&73KOZ z4i9f)INW`NCXwY>a5@3A0X(Wb5zPQuuTf zX+?ki+(lM{ybZ<2!P_Y%{}+_^)>CoVfreM2Q?h*l4Cmvv>a3Pkya#QIY{7Xm;R71v zE!pMU{;H#_KzP~`m8JB)tBt1vLZ6%d7KKYLt%_AT3ag8rQsh9-Z!bgDUb z6=zNmQo^p~TUYtc&wXC2>6zL5$$M3SQzkl3Esg|*26e5tgUyh~~%i75vPFss7dNI?o zAm&YhD|_TV?%WKbWk!_(MHLnuyPL;cxCe`&Y5!*FvRMu~wVv_Dg{v{2C%SF0mhfD9 zM(38>alU!0zev8U;i><)2*DC3#6MEnILn zZ*4sAk~LJz+B>ZSq}8{DwI9y6Z$=Rg5REOc1`x4REEPF6ZJ+#jWxe3F?_qlIt^sIi zo25c7Nd;UezIG|N_+iJCPQ?RvUyar`;M^+$ZQ0`!1FJ5gD8xSKtY`k>$1;NR8a0RG`#}H4{!d zoY%XUgHy5Vg_5{_KVGryuu4L2=d;_aum|R@q_VojkCv^00f}Oaj;YGe-%pfJlEr9A z8ZcsY?m;kyed5ErEOnId7Gc=Zoy9V(6l@70uBA?fLM-@3GLODV_5i&$+=l4h(LZta z8rd8)QV^Uh)n1;Yoc|e~hFzcagzy4Pt?%Kr+Gk%wx{qX3`q97y4NXJ>5;!}*_A0$A zfrNyt#IfST&;1aCPRO|vcPWC76f9fqo@NQmCw)l(JzC4PK(<`$}S{)w$S_edY`0u zW+rzYcqN@d1W1B^!{=Ze`?yI)AkLqO@27c45_8kDp3M|T9kf~tiFhFc4~JGfKj0kCp6M# z2yxV62@nhlWefh@lG5%zcYu@QN~KQ%FB@Lo-%ZhcJy37RmrSCj!wKU4dJ(4da7t_` z5zWM~PQrbK{GzBJ z%Ohksr*4d{KB?&NB=0cd0I_Y8PDD}1G1gkJ!dWiIpiW0$Jmb3=X>)i94)2EK^0)+* zk=H;7$TYy_aP+daC~`1I={f6F0d^=Tu7ZQa?7+mrH@o&tPy;7)xK6F$Wk&41iE_Sf zjI|&@W%1aBLDD)?;H=iIDW~`?`$>~Oe*x~fp4Q)u0K5D5fczX|-^hb7%evkhZIb75_7hJIxvEO++kAtXB@3q=&EmuMgbL-K&X-Lh zgTCWy28*xCg6JV=#5AS_+zL0;^O*`Sh5@_iaC69i-DEj5HYs%N*QxKk1O#b69Xt?XQUbY=CPzfg#B)V=hgEbvcV=Hwz!_Mgkm3} zJ4J#&-4`w8VTD0@PSf%v0s(?#Wjg-`Zq!m8uTV?;!u_r!frWN>j|pum4^I44SYk3x z4$x3Ko(~hgMhs^V>PV#Be+kyk&ruK~H(Y=)5?+*>V>MC)hSD}m`fMpJLbTX`*3=1| zGSuIjh-;VkL!$1@GNoZx# zcO?2gd{B^uel0$(ijMY!7eNIO&^Y_;KfCryRU(&r%QO}j>)&^H|EO9rCnr6(@TU3k!JFOd1r%-Yv2O$1^TEq-!->kge+ zDvc6?-EcYt(0e?KPa9^D!8?bPz*xP+B(zX%w%sS{yMMi~nJpnOE7r6EgJg!OzX$Vqa2Aju&UsY9Q!i~NOwc;CCO{O;Q z2bQC2O0ZY12w3UxmBdNp@A~rR^V;J&4k>P^q#xFK+W6cBK=+A86L76oO{}cvNV|gw zHbuT+P{f^aY(JiW6i_5%*jyMPkFfowZbJg47UU?hrPpj7V3ZjL6O~x;cUvhx1o0AW z9_$>GInCxAM)`%cF@ei)E)=}J#_y(TQD?&DazkgNnyyR230J6G!PvC-YBPt_5*9Z{ zFpJn4Kt(l4B>W?ne3v||98yL(p6mh&XZDiS@o2i=`laZ3?N)!- zteOcU2!Tl2kA_w|ExIWzsEJVDz1}K#-arIO4XBss`55OZII#~aQ@kB0KJ!AZLz@JmyVbu11X~8 zZg5YFgjGoL4;+q)mTEUQ8wt1rcPL6(kD;=m(ImErP9wd5YwotX7(m}EoMwp?z_f<7 z#pAXJigD8a(#mrJ|2EW?lkg7hHTOFMXOM-n&X ztzKt%R^j?Wolf^w25)4;w&HS_zaM->!|%c*(*mYy#&y)qrL5@x9WOz_TvI(sc?yO!!j+Fyj7cVvO14tPgV zlgbd!gqVoUuGRFDj-3Vfek~;*z1^RUnHf!(yCe&C|A|m$+2|xZ=8lx=Y*ca7M;knv z2=&&&yq9l)uanGt*HIA>xAc)INu6|mJ96Jz-I+KeCuY1QQUso1G4_$5oLRaFZ!?k4 z&xi4?rPeecNJ$Ke1EbI5+K0)$g%-T2gkN1>UOWN(DVU!4FsGm-BVz%u`t`btHQY?R#LHcz#FX z%mM#GHoM>*|Fuy9r^<=4LSCwepun~=KF}{|B`n)Q*TU^%xw#&M8nqiu-XGo2`$7zA zL~s|mr~c~TV#o&_+EOqQ4L_&}#z#oJr;-y{Vz-~hlwDX+eX#$sD>h_IsSm%rW$Ib) z(~{t=_xi6YdeSOW+8w-NqmYsF=Twkm0)C~&9L2Jty&G4%RXU5N4HcNIlodf;2ZD$; zdRy{ZW*~Cb_>dJc8$CirCRY&kR|s*2$)q1)L<*-{7ACo7 zsb+>iB;4@YI-=Frn<7W-tt*~u-~x7$F7_^UEJ?3X#6Tv^_C)Ki5957Bc%KEF0)R6AWIBuwC_!Y+ zA9>fhsvJ#E)x0b4XnJ)J`;qmrOi|=r9SDNaM_z+h#uF2n{Iw^n6{(T&J1Q)JW+vSt zoEPrlQH_OBhiOq4*X7Nbh>oKD+u*p#E9gS@y!!Y&!r6nZHY8KS^s=oIuq6kgE_;2) z1t;vV+VsW_D#ctepRqq(fCX$M+W0z@6l$W-2UyZR0|lGT2iGeMVyWg=$VZ*YJ>O6O z$Oq$6V!$$duyPJFQ7T9?iyd7>-40EN{J>7;Lc_=VY&f20S<$R4@U9A2s`LS)4w;6u zHFg>z2RClE7D$Tp-HD27nLL8g6Q-DocQNqk$kP`6H}tw!TYug747o(DP410TkGr0bm#|W4X18Rz|Mr6Ve@7 zrUjDhI`u=2d+C8ufqQg@CmJ&ip@wWx zvOir}TGJ^M$&j0|w(oI7(=r@*^2kO2BIbD6(OsU_T39GjwDc$7x!wgRTKiP)_=W^G z=<-{zx&*7ru!t_h6m+Y*IF~VQxvVn2Wsq7xErBu^LJXxFpTBKhnI7Dc|2{r@4!lFS z&v_H+->Ol8UJ>pJmT$IJu|&T+K4th}hKOe^ zBiBS`DQ9Kv(q0Y{butSIZedI!Kf>!5B<5H^&_9YT2eDA2AW5O|hMo;r3v zoF7qe9N^yEN!W`rNbp_I#O1AFXX6m9D=j_0n0R)WSbCv^}ZyEurz`ub<)2~NpG%6@4E~z-73oCxb6kTGsII= z`KhK?MJVP+f^(hXkS}8{Kh51S7L0a1=G-KKs#~U;F!q8!n@4}IEH8L9YZf`&-6TGD-4S{Xn`+wG z@^RNAVZkD~HeG0B7A_eiVTjHC?}N!*ha#J~pr}D*s#g8bxFoq4v5vYVEpe|1p}A9U z0S20_wK_A#P+QF#a+brEu_?t)t1qEB&LSTi_6Tx%YDDqZ-Xd=qq^0VbFdkYEAL0TK z1e06Pj{lAb#DO<>?!3gN5R_n&H~6*Xx&Jv4H6usUi)OS*d&8P23@pxnwoPTz8vyVA zl8GoTY$c2M(055Bg80fbu?l-soC`XlH_mNTkcl6Rh1FE*r?Q3AhWL?@rk2p6 zBZb&v`zsc*luaymYac#xJKAH$-c{okFuqDd zWch8a6ca?JRkNM|q?klgcbfVrE&`{C^g<~VY^PqmNJ;XSKEkvh|f63jyo^WZCJrWrynEyk=%PCP;YK z^#n^@vorI{a))(8|C!N80iC8W)ZEJ5GE2|iydSD|FiBcfEf;NcRTDRV*h!V?ewp+ahw;&B{)7Jv)t6QTrM(&;Vi1jq*-b@9nrySE@9|Zo zT|o#@R-@%??G+|5t(c4~8|`^>6j%`t9m^>Uf;dTq>NSTPQwPB|2&c|*fUfUocOJdPLafnnJwWmv2X>~ySfMz$2 z7XCd#)Q~~ob)EoGE<`+-AgCUuwbIbadI3>|0mA?neQYGD6T>_{Y_Iju)yGXTS@}+L z@{FO$a7~q6Cr)=InC01_VkgVSyFHu}UbN+# zG`pgP$Jef+)khETKZIp}AR*C&7b^k|>5fl@8*f&+!*rzj?|#$A&QLxBJ7$;;r$z&8)5W2ALBMcHz`fO!1 zgk`+J7#)75zia@Yih*jU?O&J0?EIFC&DHTUA>DY+^9|ZvUbYL>3*I1exU4d^D7MfqbEdroeq*OHh_^M+7b#yp*xkwL8}V?I6Al_UM|@!3FV zCgnEI8V9l&T*4HU>ACR?0pjs7X(u0@4^EB#dl}@jCYzEjCkAt>S5?LBN21P)nLecj z-UA*HNTZ8m@QF`Uvx$JfB%KI z(@C1=4i%6MO}aFy83i24~tfQ>(T*tlG9+B$sdL(*?1$H|WZ`G-6-9@MrN-(U9Npb-%HIjkiy7 zJ@?wKP;7?_qbns~+QcuV(A9Dv*e`~>-c-E3b%1BEo!KVn)xh*fXzl%$U081OC>x%X z_jy-1Ah!=L;bL<_S8eVdnJw1O`*%>o6D!gQ*Xp z#R^*~>b7)t`dLLi`0eULS8-SyG8ub^8AOM~EoHW}X3UlldM3C4mB-TsdqsUKL3KJ| z{>V;N4Ye`GpIHkJJsi~^b~n*HcUvcjmKyz9R5z5QZ*s2TQhr`BQ3pB3^4nEf-LMG9 z&2Gx0Grf&1W+4C7MnA8c;9o-|2vp=UjzN?QoREy@bcD{W`*rs)O-XyK+DM%61)4z>#+F7 z)x+b8RlbE8RsOAHTgZ@fxEnSc}8%*cZx$%~tc@M0P@ zaNYTxuzqKs52*LwvVHBqyC?L%@V}9n@7qw?V?HX?mj*W)A^$rWa^Er?$@5TDU+Y(L zA!IC{GsL)c7mH)A-Tb;(R?9}aRzTH2@HYi}Emi>#4%x4o@P|YTw?CU_@KjA{>I!q2 z=|2JF`PrDi4Lk5cJB_{g<#i5LEAHe=t;V6W1M#Z7el>4*WF4`~HEgYF>rlaCk2I55 zHe=(rxHJ0Yt02IV0R^5ZRRpO zaM)cWjv9**l?VFq&Z(lTrh#4pF^}fgiRxmm@$a2QxQ*#;&^7snc&tzh@JA~}lz#(| z9;VmVTK1w=THekqonO61Wlf;{U@LxTt2`WXaG?O=Hm8zsBdgvwx6E8Ymx z5JDH(!O%|}jRzlpI9r%%T?q`~Ac&KJQ_2`%54s89=s#q3P{zX>y7AofqR6a^ZOY9U zEIdkGX0kl&aP1@(l`I7=gqVwhz*TiKh`B?3yC*B44p`Jf)#2@Y;x7za$-KWK4!L4ipD?$XG4RcF$qikYy7M<| z1GXCbQ}N)k++Xro-%^GE`?*&;hg~d{HY}hvo{AF5wQbjZ!XVhSc+qh!30tOP2&C`y z#(KLLOZ45&1;OidN88^=wdcPHvoFLmp2_ z4k7EUcyyW+;b}O~ZO=EODo*pSr$FiY19*Rvlso zCEvb&3N@DV#7Tt^6O{N{0jxw^4LZ)6eWg-tf)YaI2u7xQu8y?6zSYSXxbe*9pxWg` zI4g1{8R5!pr+1XJ*KI*-TTu;}%&_)Mb5_C>???%q;ak2Ez^Zr+qb+CU5ORZ}(V$49 zI}J#_GJ)p1vsi9eD)4NnY zT%o4O8&24x!CeZhXEO(_{oNxMH`U)| zzzIUo#8aCfM?32XnHjEvB7}uI8PDM1TMy^r2w8tSR<#E|V|9j?`Yv)5j|5|sSh1l^ew1t5$6axtEUyG-Cg6Zpe z2RLJ?B4kb9p5^4f+e~7*pFIbMy3(nCE64-MOVuoHr;f%{O?8*dTF*aByClv_e-5s@ zRC|UlxbkR@xhyJZMBdE?;g?`!JED&%bFI=PPMF~-hg_rtUlVtPX+732zEa>+I;@$xPsxcNTrJi#h|nesx|`v zFFnhA*OQeX(dl=QW}WsjfeFEe%TA|ost>Ql_?c>!9{yJ`bBh>bbhPDY-!(!@p*&?1 zbc*Ct#Z<0RA-JU>)3|bPM=S!yx@vWtGjvH1yo>b+S9O*4bm5ElXPdEWEpR2CMyEGB zSWH9>Y<*M-$iLQc)odZ|X{s{camIyMRRvOg7N$=LItBE!so1>7b^aJgpMnd!T zc!~+@>|RW&tbEJL)GL;!D)2UsZG@rXai?qi3~-NBsw$M_pMQ9^PBv|T@4y}BGk-b4 zdfzg3T}+mk?AETf#b}gIm*Agoak$=MmJR$wh+J%b7EmL9CbbrCbz?w$IM59x!S?}@ zF7C_FvZ<_!rc0n+epWHaonkL8>b~#{x=O}{wa$f1n%(r8WiUJsFKk9^2{?^Gw77EL z@~mZ^n}vVJq`Hfax=~azu>;bw_17Wmt0{yVm$*#b{bC91Ns@1`G{-@K>NGBzciF!4 z6&#w_D{>PKYX~dRxAz{grP2WZKLEgqazE?U3b7h9v$y5A4d&&|WoKk5gDazs5C$ez z^F`#gif&sE{#^%8Szs zE*LF7>W`IrbW})$!cn}@CPCY~Pao8Wii);kErlnRXBir}nqC}7y>3u=m!a`7vCG_4 zB)BSnQJLrjALFD_o(9GA`m1e(&abp2anmobZ$(S|I|?zBxV_1Qxr_FAIIpj}C2OgY zhToYSb-fnnidsZ5)U%k_wKaJf&){utn(F|QKR48%PBBxL(v*5%<>1)tjNDe}gUUVY zi0$!*knR6LY6ZyYm)uz5W?v~m@t|llv7APv4Ey!4GnNVD*mYqOrmz0SX-M<_WKLW& zH3{{8NNe0EFIo27(0YqluxwS7!e6cLPVy{n?)@66|59krNV}Mp4L$3eICa{!o1%~7 z**w__HO!2YQ&uz@PzdvqO3?Pqa%Hv+901J3_oYKlZaTyTE;zCOHl0@e4 zsFg&$5hD9+dG)wRl7w7B5vq3d`$Dxm%k`#%2nsz~Fqx zT5WUX!NVh%SOwuWbuM;mb+Pw_o#e{>46`UfWWm_(XW5Rvd=~0l5!kNcl~GS5ga?Zo zv%}=fL(gy1ahB@VZF--WSy98Az?aI+2FPg%cjy>F%i?ZGfbGklb0Zt`+mYb^YYp?{iq|JOoEWL8z(wBLK}fN+n697dP#Lw(4a**dIG&{L8@dwVIGw9L<_f?F^oN z(P&@)n7L6xi51POfm5dBOhX0*7rq{JJ$Y9P% z>pQ7^N-21qNa+}wXdu8Sh_<=D zd1hf`e!dywJf~H1Ipi{6(g8UJD2X~XO`9b|e{EGDP`(WA+z=^aN{EJKI47Mkj&M+; z@5c^(v0>LR%L%`Rc3jAjZncPm5gbB<14rV;yIsJ|d1C#8y88)KU360lj_~n+LaF1I zos=r=u;r;+YeLb9TZI+?B7dL$PZT4BQr(TVlz4nZWSEAg!n=J35Tf9$;2K5cgd%|x ziBmU^;Cm$o~9D*$K}Lb8*8tdZvTZXHuH^n z#blDO(Rs2gl|~Ag)i_z4{l~v9?~5%m4r|3ML|g~3lDWBS#>|f&a*YDlQMn*2la-qz zZ~W}t-;9q= znlmx|&X?D27RFQt<5-|i7u-kBEJbm!0sBMR;KT3$lDfV^5Qf*5OXH9}DAvs!B!r$E z%Jk|3+#B95pZOmQu1`+Ury z%xp8h%_AsNd(dB4s>KE^o_%5>ljR*{Qq#Hp)KT+uCyk7(Q010Fxl40mgggOpbNE}F<8Z=$VDpDjRrW;jrO}R8CIi+80wZ= z>3{F9`cSO$oi)>4f);kh?vqM;o;$e6!MuXQSyd_r{-x}uo_{^oyu7auH}vRpggWy= zZ{Tpqtyt|K>^xa^XQ%l z3QlZp(8i8{hC|y59J6C#TF!vpys!=gj>}_JQUa<4!GN^xr{^hA`5CfG7*cnB4P83n zdL--ZNrQTHwoP-GGy0d~<1r}(2V2&Bk@XG2p z&p};gOrsW_G#$OiodxBLh?~9REX$&llY8&3E}LaI^;!(?TJp- zjEn(|OCmTP;luyM_yl`!rArN~Zv;w=s%*+x(-Fz5qh|dHZA!tguCFciDSNHj!5GNh zG?20{YiMhFmn4HyJC-hhL=qA~I~&vw$~Pjj*|70wJcu~c%ZL}q=X@JujnwNYi#8!j z%WK~RG>d|fIgfCE`Nbfoi0MYU_S;_P?)fyrH!#7}T(t*2K^A5nO;%v&e`T=WV+1j;XO-I)g--76_QaM(uo7 z_*e}`1=r9=t_jzlnGz0p;V4t~(S=~jDvP;+Gbn4qa#B}DDu71{zTb2LiUB}L%V9c4 zW(mn}QiLRM*B4{DLEhnj)0gJbanF>GX{=urBfQ~i-Y-!&%|mZ@_T)+0Lt+^Hws&G> zq1BD4jFWa;_Cw-iSbz=`Uxu7;n5)qW`rkQ()9B3W$`}*3F7mXA?CahJ(tiM6{mo3m zs3(_T&a#-TiwhC;`~r1C4X@-qgs!>SElm+K zW)ENMIbZ&+H7~Y_FG+PoF@v*vwKqTxOs_Jt50kiHfv!PR67 zuV5L5ht)vm$vM)npL?|lgyd=xW&|DE2?VQvC5l-Jy(;}5x?FR0k>>>P_gSFLTSZvG zu)y#&J)u4v7i@W)02wiI9)e)%Jg4yh_f<>R(wYnSu~dtPkh%iB=&gZ7qblQf=U{&s zoUH{ceSOl2?F2h+szJ_?Uf&~s_^BvnHn#o|VAzIo6k~HCqQgX!L|&139)gncZaRRa zYy%*PruFkd_$NQcE$yy_#@nEa7KPObft^u=Myi)7y2xhlM{3myhrWVC)|A6pKVX9= zQ!{+l9m5OH1hE%E-^ox9x{+CZBJshU6_)Fv+18^#s);NTEVBGc7;EXGX-k4iOTOK^ zc7qvwGCb&i6jDq!hBBfAcNUnprLaoKj-5T@DhS8f|J7Xd>~qqI%G znRR;%_}>XLh7}x)Dc>>vaXV>J=U9D*UsW$vO)>G7yyZ05nyc?CDv7)k6$JK3?$Hh+ z95McLa%lG47N4Uu)c0_xYpiGTCg)oS&^`0Ja;`#dw85rii`3GWIlK6;KA!T8c`i0& zwKJIaIqNtNB|PRJBm(1meQt~!PUSL}kghB3NkAX6J~-R{bnpwKnOvvK2-%7LQ;CT- z-&CwQz8a-Y;@Zhs`I?WfMdgwZ* z8a=^uMkE&(u>LsT-{q5}eV~sr9i@bc*82>{O6(h62BZ~vqdqETzhFSxfg&C`cI3+# z<`c7!C`ydAxmn@>wG+g5;bkZ{=V%jnzbH05qXOcT$V(daOM9~xXPQX^w*ZZP4!>2K zhBkwZA#0oMhB~}Td~oGp{rHnMhta(MikOL%9HvTHAI@hw8MwD~xt>%^H2V997T_w& z{Y{)|sOD|TXrVQt%*<&L4Cw6hgt)3ZJdN-GZ$;3QV;#DMSZ-b9_%_T!+G@(_ z{jsI`&CwyW)qE{58l+xa_Tj9PvQa08 zLX1W^)bqj{Sgyfv>kF<^n$Vwxs3jZUV{XBz7Cfkm`R4^SRR`Udy?Zq#cRCd#B~WLO zl9jiU3W-JCX;2o$5hhi@iWgxuuq@s!Aaxbwk9iS-APUDD)!kL4vy~4gBy&M;IQ)^8 zOY;mb&vi%`me0||0BC0HFt}LwFeGZr-Qf3)bxwgq;#dhffcDVJT$7uqAS~aMYdtC9 zw2mh%x5`2*4&6CWJtjjRvIisiUF-gAu%B=4OOPQh{`c_TEYbqWhZ? zvxjDY$#k$9d9!Je5U9eWDwUchUX9f|vKBRY<&ff^03DvQ*3PzolRstWJ~~OC6(e-o z;h38GxEH_z@aOYY@TGIt25iJ*qFEm<0Um>h)iTIKd$j}chZU8D}&ToNc| z^NI1;>ITo_0u@CjL>g}*aqiofO)^`~XQaY{pI71gzAd^H4%ntJ#YNlO0o0n8bSX87 z!^R+fTl@M#EmZtwVq?6Ti3)~$4d(@O29sz7{OVW{vV!_$=fa{whh{anFWxZr$tsGX zvAD=yRYrx(V72V6I@c*xoS7RGgt7#|2Sjli0EL!vk-p%KR|P6$EEo?UJ9JmBflfE8 z-qXDEx(BMBOvy@>{(T`)^$N6HD_xbEgd^cki$b@i?#gpCJ^57!pIP5UA|11pW5crP z`XhF^#W9Bk|4r8y#ozmkUCr#vbTTv_;g02R5S2Z$a!mX7YU@G4_54bM^-!*P73`s}(0oD0GI90XC|lP!Sfy%6Ns{5)#@ zYH@;AX$eKTUZgAPH{Q$qLv$9r7(x50A5r!Vr4J;$ZY|CnDN1FdgP|L>n=uk%# zH0R>2+Bp+|V_4Af4NLn5cPZmUJdn{htYEhMyO{xnQgiVKz?eocb?#%eSx#41_)q91?BLWb2i|1Rg zUwhFnD`lY~P#)NM7Q7359W9F7#t*rZC5Oiek6tdFIB$JaYgw=PAihSl@gq?soW z-wkLSK*oSHIJ93GbvCbE)9NeOD&Rcn$9IegrS-*5ErOK>xVG4>_3W35F3=#O9utN1Eik3znDRri5;fQD_{qmLh11V<$;afs} zs_*vlISsSGfyuw!fhRDqyIzdGMPxsoH@kw>0h#zGrd&kT1HgT3tw z7Iz>9;w-$%St7MYG!BVxMjRnFYHD6b7TW4{5dQ8n=XR-G=Ae!;vIE^+n!^!~IbH2a zQo6O0Tu1y_3+)u@taIoeD1pvUfPoxx&ky|!5t3&D6rtu(;);(e%ANp0)l2dWm<4XJ z-3j$kZ%VmqI5iOM=6=O*t=ck}0TwB=i2TzF^3ZxZfpRZau z^-;6c*kc(2bJlMghE3|F{y>38)78Xo|6aP0q0PNr1R?;qQKKXa`4s%0RS_8{ty7Q5 zcbI{{mmh4XOp#--2hv@U-x3x_MUf&msT${=;9+C{Dcpf8wMOjrG$d1VVUr&%T*{|? zbzVXoORniGG0nYA^jN5-`7^gqq9If7RA!WyLjCGZD^o)K#|#*GFKs{QPhBbPQxCBv zL*YI`v7-{#z7yFZI*H!8*R>6A5SHCSHw;%fh=`~gj<~UCxR02VR1p0Xa+Fh=Cs|Aq zA$Nx6?^r-Hl-Rz`UV}iFSzJZbSmb-%gXa)Zm}t&yx(jNrKee~JKtlL6-YyY)5x=?8 znVzjMAUhso`U@-lObv%bL$sBh4=tnpX;(i{yHm4>`&ah3xkhZv92I2+h@XtzQ5RDc z(D1*X-U+ZMKPaW>trcogx{v|*!56HM%ZRmU(>z3sto+vPFpH0?=ifp=CgrVg?=^}b z10Py-Xy}hDsMsF7HixO!;PHu&$P0WgL%m3D*omwFYH>1kF$rgee|`$S%4{~Ap`w^H zD7QVpy2{kXR32eo!=jc=r;!DcdB19D!v>`mG_YddxPD1GCIAjCl1NoQ~ zlQNpl3WgNO2m}^O2v8nX5zs!f;$OOX!l%m~PzBfIBYr=i#&ZIl3iSH2JBMvjNouQ1 zD*wxRO>1AA$K^Dut=g^pzVnr+eb#w($gRuhSK<=`9m8)3t|L^$r!`$Iv?17({mQ#d zEHBPm--??7PIVDSSL$>-MglOzui-#$y-Foa(?Xm{h_3j0j|*K#tf7@{5fGeztAFD! zC-*|5vcsp#1={^?Vbf4MTy|(h(FO&n!5DTmx*2LwsTcPqt}0`XWtzO2RY05ISS%(s z&METjGik4ppKVf-MnI4`;GP7yyku`sfvvoY877J7ZkaW2*(p-&nvhxEDp~o{Sg$!z z1vF(c!o*Z6M_Ok7t^7bjuFY)Yl?DO{IacpDX#-|dTT`74r~o4P-4Tka(xd89>C8l$ zTjHujB~8;f*-h%iX@IE^LOLv~7g)9h}#5A8aXvDx2cjY`VkhBf zSb&?C`La&(G4_kgzd0u(BUdbF(%Yp53$(Qqc=c8ZP*nIg7*Jg_Njh#zOkdb%PArW= zK!eQu@-5~oHi^_0M?^FZyCxcFet^naA$W*GBI%Y6i6RU{Hq0&rfz+t{NS^IoUcTHR z@@amwhZj820_@FX{~A|2Izxw}ps6f36)<`$ng&5ESnLK}+kZ9*r#(jSZXMVo>}N@O z7ja?#RoR0eVdLZ@N}m{P97C^pGAFZM;IeYvlH_X4-*_!(rP}f;f6?RdURpUeJ$$oS zvV09TP=K11%1AWxx#Zw{^wx0swFk}nEeba-rQWKasZC>-PG}qvJb!}_*!zd(S3s#P zkAG4S74jnfp1)>geN26Ykj}<)$6xvzV8XR|D`tk$0Z~ngf0s_K@#{r2Nse?jYx1qa zdoeAKzlgB{b$SME4qdG`Zc&J}z^w*l-Fw{ZN7=NtmlOCnRgltE&HRui!%k_Mx zOKx7d6S=^R!ri0$Z4PGEjwM)*zI3(31VwYpIe9=JtPU*T>`CY%Vms!tTN<25DXXJx zYmb|ifEqL-P_^>BjLqecxrY+Yh<#DE4s2f^yD*#u-_yQhpVM@B#?hrK7)a`0Ve5dL zwcHnAh*>OvdCwDYz*q+>{ZtC-2iPqu6I~-T+S2B9o}iErrAN z?~&iF?}MwiBQ`_4jDCHHwILK7(pA0K8Y13rHm0CAiN zt@g5oG$KNESU>@cxGdcLlnfU+ulP|A%9I{g0|2nwtm)4dD@7rMKl$qUSwTYz-CdU& zhyj35GvGRhp?biheX+N7P*tc(Q%iRe>3B}GCWzF$E)#%j#P^62I~Io0d!sKz^(+uG zAwM@o=PFxrTQ8i1sVRpQUUja@s-E^o9!UmI*#k3A4OBs(%B6ezl-k4w)kQD`GT9Fh z>LJ#y@78~FxQNGkec6nu)xoVz$!QSftokv>()${`NewsVxLjnSp|sGnx0pD^?=K5-;`6J)P z!*;SO>n5Xc#zxezA3YU~n|h~GE5#e`*6~+>5Ib0U!DP=3a&QL~OS+@=1K#jZakN8p zm4q{^yT0#By|K9Mf52E_2AEUmow1BnG!AyPzl7*WQ;89Mb#k=1gW4mh4O0R#t_CRM z!$~fg#QF_JKdB|tcQ;)gAl=2wp@NUgVr`5d@zBLe;yk)5n?5E^2mvxeK%TCn#bv-7 z=QyLrj*?uPCl2jqs+!i2wL}-ZWcc}u(;3aQ+IgqB1A-XauFW=@rTWAA=Dy1F?P8gH zSO)im;E-n+8X0~FT=N7W9&cw=nr-3t`T%43P+s;{D(BC`o@^9(QICUZIe`T77FFl_7QQU)$Hae4XEI|ZbA4<*j$AKvai#uc!O%DW6!R z%OOL-X^ixPj!l%u1Tm83=N#DZn3wBP?1y2}8%dw1bt=j2PUwCA*0ZPXftX@!vIvit zn84HhiKtVs(}o<{=!}S8QOvx5SK=neM2d7poKB#&pN$CpEOPw7A~D2@T251MIKf`L zO5D6{$c$l1l4-ryOji7BwZ{}M8JF=OL6xGe1kuB1YB}{5@IOE`mg6(%YWs5f;LJ0{ zP3g?iIR)KqKWIirRoadr)Md*}@oMl!FdDd4X?6L!t@gHd!}`6|HD<5~*=PTL9lXHD zi+H1tvGHP8y+=O1sv;#EwZhA$9o-e0qid->*HlTM0E$tY5CEt0RyP^V;vBR)Vb3VC z+>rBeHlEL{>SBWF*5>E@1<9O#<8%?3Ix`e`*4z|QOC%G$VOsEn2W_Es2NOX@&(X_k zH5dRRSJzs88E0~eMHv!Y47LPbX8rt9*ETeL8nhm+)!+BsPx}?Y(d0cuPR)Khh1^Kl zXvLAv>&l0s^Z0}!vqGz8Fjv96_p#eoQ3MyF4UM zie@Wf+qXK^)t}ch_0`$jcYh61sUbI-eL8=qqwp@@ zZ)CVZ#T;3Z4gF0tE-w7N#f=PeK)om7?Ww`wdSTo2x`mT?jVDj>6yGG@frWDxmE^Yz zxV^~7zBsi|9985qG%ulBqt@s$ca7I%%z4dR%q~+i+m*N5fyxHHMuRaC-p`)#PNgQb zF^U%?Ywk+8Sm+g+4R~nxVTj1y+mR+?6&yBPi6KfmLgF2+(Svh$YJNhv=hidWY3oB>Jrmoe_JLQa zY?34|r5p@;Px!J(nqjqwoBG);35GLG%}G_9Rj_ow6Mt7YAQ#xqzcy-PX}Rb) z%VR~bf0m@=6EiwvLz(#G9(V}SR#^K^@xl7OXZ`UeEq9_%FF9$^n}d972_|^(p_nud z0i~jcfi)da{tMliN!hgZi^Iz9(k2yF(2SAuVtX6y z6!a;qNr59!d*xxRRM=wabWtHAgZ-d5s&IPct}S!mA6SUnoRFK6Sq7vRHV7!t)P5o} zH_5)=k5Qj$;2e2#vi`*4%22kS^?$!c)l?#mu>s*TEcTA*;a*UBfkLHjQN-iZJMQb> zA^#7XceDJEu7O7g6pUv?g{tS;dxK+xE%oC|4pX45$pS7ghL6W`i;;FfEnl}Z>!{b) z+1Gbs*kF-%_i*%6mYUG16OxJ^wLhS|^(PR%ZU0GP*979V7e-iajBu)KBM%r97BSyW z#^)Ln*d+BUP+z#jb57uiAN2m}T9@Z1M!)UPO_-iV8F887d4!fZ?{s^?Uci*Wxw)T- z)-Ru9v?Wa8BP3_`&C*%>tGLc6hN`~cL$ki(oNgGGF*IVXG97|%-QLi(1u=t=3yJ<% zJsdw;9EfsY)gFRzJ*d%sF%W3;lld1tt^M4SJx;54%h%qE<(fW+&R;HQfAwp}?X5#I zD9-DZQc5Q*4KJJaOvW!G(7uQSa!5Lwp6DwplF=NDBNxP9+yWORC-at9$U$*YRFmt;CIj4nL8};m#;OwKiko< zlweVqTdot73cwsPq&%6(X*W!wkwdDlEqkbb_0_8lBDaH%f3P$tu>9})uWl`iV6@4r2b$Pk)GSGiLJk= zIO7-Wln97du(*THO40kvtH&{2kH}M%#v1U9oJ+SD{6(v7_Qed_Y(s)AABGC0TzaiR z5omj}>9DbQmrYSOPi7kv1Mc-3=faoj(uFfifep?zQyGy~A-v_G*U&zVbipS;f=4>9 z8kJXCp5JVWNX+YHZID0bWx`~m%t-nkpbxUX!iaP4cL6e{V$NNlWqv^U1+{8&w9PeJ zxHhHCL%?z3CSgfDRd5J{G}`zNq22w*CfQKYk8B_rry)-DSj&|Jv)_rB+`}-#1!jB< z&aDrBb)vUXTExW#t`6Yr1cGWJq^P*ocjLm+^lf|S$eB8AxI(NVgrgM0+!3@;Zn)o6 zpGmRgojqgqa~>By`HeD#_8JT1^ntJdvEe>jfg~Sz^{B`L^5~bv5Nh%6(k)FzivO%& zp1%i(qi0Ikcqxb7v;IIU^v8hNeP|UDY|gntRULu6Zd$>S9J%{3993&8AqZe?%gTx< zDy^J$a*k4i*?dLPVtyRvA#^e*zu!l6ck3(lKcHLTnS*4{q)-Ky+*QGd%hZ<9oO-Vv zNWA->f%_#vNfE^k%=A5x5jW>t3$jlb8#18_0l=&jwWWMnGQj0a52Qv_+^#DscSG4d zuz9GH*6&H;=V2_20a&*dS37g z7iwgfIV({ZhGDv2yJSovP{d;M0N`_KJNmpY&Ng~v>6#JLL&913{PNo0(ObH$71z3( z$d4C$z{l1aH9am{8E1wYGpaJZ1+Dqh4kE)cwuL2A@M!g2KTvV;!x>c!jur7yNL63;^F2nCz8krtRA&rgJS z_1m!z3{F$oi#%>%`_a8{qVe0wuF;aE=$G!YI4) z$3MaUHwp9H;kcms}9)f1nfZ zsn!zRV;hYrLgx%8_4h+*wP1;ry>%KSqlmStkHJDxUxSZd+daV?TG^D`fN9%D`<$8% z=)^pc=3We;bGfYK!DZxlJLsH$YsEv@LFIG6v~lI) zn}gZ1O&L<};!DVcqOV3p#J>KO4uR;$cLxe;Z|0LQjg65f%21-g4T>i&CjnRgl?}0) zWvrGF9Y|Tj)3Q_vlbB`ErqBv5eKSG0>_OP|qxF$)WrcVN6p68IIb$#P=$c46z~9#P z=}4kOOJST=s=>`>JB_0NN6^L}2teEA8dIc*ol}<-e(ITI2W#oHYla)vH}*d<*{3;d zVDMah(;hZr$=et|J5lMb5#5ftNK$sdA^t}*F>F8%@(7B2Xm8(Kj8Eak7Ok#8nEAui(Hq@gw-!su~NSg>$gf8R2*UN}_jBxcAKEE5%2e5L6 zUzbX53jj69T7x#Uo4Ilj6e22D|4@*E{OW>v0T+kyLqIEXLF*yPDpuPGa94bqUBG^8 zCOHnq9Zw*1BZt?2$39d~S;WGo;jET|dF{PoycZP^;gOB;tq?H6j!$faz)bbHD&i7Y zL0TknOwxw@WeE9y-KnNN_06Oe@9v!4yLbBbK)` z5bditk0pTn>c=5V1=+v=zfrA^q?6V;XcRxzyYZ+8iFDjVb|dSj`|1E2pu~1#`5dp; zjo-F+?S|J}-tm<~>SxB2CR=M%!VK)k*a}3(jku^qDhQnmT z#!k~wmdKAtlV)6lwT4@6ok^D&hXB;DPP*b3JfAjM>e;b;0-%;QYbdwuoylO6>(wd&1UmN>T9QNh>*7@|S_jx?N3iv)@Uxohk{9Bb70w&oF9EcL?^wzvGO7>tX zr#vjGjelu_6XXO79Ayvj)DZX&Jt>7Vt1P)J?jTmz`j^fd5@v;d!_x|tuIt4{(Z+y!u zr`OfXFU=*%PkSnl+Mf`+=Fc;wK%^b>!YMHHEYwl&6^hY1-%r`DR$F15AAk1QMq!jH zJd2U>fE8W|VYrF;)erjh_G?#;WK$_AJzD6-TKq>^2R-+2mI&l_@3F+V(VA6>3FV$9 z_lQau8_cpj!fCs8(Obbfu8(7|_}qfU&5m^ZN=um(kDU>$@rg*Q_bCCxDOD&*4PJ#j z(ymrjE@dUc8y7pe8nq}Bh zowZY#tmXl0op1{~$P>L!ielF$&VNEEedT{?)s>Lvqh%l2ni6Op+pSyi0Azv2Kku*z zmjM*K!-~Pxl2qJRF=h1q^`hPP7Np*-F|o16AuT2Lsom`B7&U?qJ8BshExj7bDk=Lx zzzVf1*Q2>6l<<5rHS|@05skEY3{t2xS-QvLq1q_L%Jpe5)-ddl4=vZ_dEBi6f6uxv zoLPEI0r!K#aWOdO;mbC1d-bE}e(06B#0<*%%@gw#QpY$D#*Jxk@>Bc9&elpsAiqC> zTtFQEeP3W_KNXVE4si_0s?x(mvS(5Y&8DrCrHq0JHf9yYGV*gP$Or9o z-&!!CU4Pi%lmxB}Qj8X#I@V(tCXYb`4?n|G#ge*;(OZ?-R{##x(8 z_nblUHjVH=u2u@~;Z-$Sn~wc178x?C4bu*L2s`@)lB2gBx)PJt3cCROwf!}wR$lb| zAvVENcT9=Kh)C!hqra&TWsE9>zI*;*F5o5adKMC9;_+m-@F4L8J=1huTX=QaKz$OL zpmD%!)Rm0B0!PO5{(?{Ui*o~*?1f{pU(!Wsw}$19 zeg(4>{UyK8=8;wk&0XM$iu>CK?M{TgLWh(}h9G9@dtQGZLbrCb%(Ty8 zq1d*%Y9kkDJGfFbrud>&-d_oU30B{~lPI2`G0yDNAlqxc>!xhbvx5=R)WJ!ti2*EY z2(&_RhB4D=;yK8D&*VI$-zoJLqMQ@!@3-sy=X}!~0El7DkA^ zJgP-0ZX{+ay!*kN`Uo9D$WB-a!*s$Y5wte0rp$^w;*y7bu-{fbfJwvc5)qEC>AEcM z$eVQ4ZPU*;o};$Q%YYL~>__^^26RGFosHNDn`Et60~z2jxbG-S|LL5>JZOtd4)8x& zdP4j`zGWD)vqDXK`#_`9_PR(Bxg8d)ZpKy}7_CxT0@j|3J9Q(A$f{s-0}V!Vn@b@! z9#jjL_-r_*T2;)rN!OoH8zMD&X8umXae-~6IJDG10smZ$rBjt&CYtp;(DJN40D&0LAaM3k!s`PXMc1U9vIRvnV+J?)b6uTFPmnWU+)f6Ub7)T;DS^Z>X#s z@?_-=D$-rijM9b;JN8=L)vd>99MYpI56H#?6f#em6Aa}6YP)N9!@PKg#ldB`f%2?w zzcoS^ENFJ~8V+Q-Mr&F%_kr@K{>YqV(+X-|d7HM0X$Puyip3sKe)F(Mp9quKo(MtX z{7;d!FRb#N+sFq`t`xpZAze-wj=-SBQ-2j0w7S=7wV#8a8nIDnj@^jvAKlU55knLQbWca{?&*bu>bwq? zuM=qXIMgwXYH~CgJnlFQ? zCXwt+vH;2Y6t>NqA(oQ~k&r;hc+*|#QYAAg(uT8ijb`n1&|?@g%&D@w@NG6|2S zp%`fEkBnVg`M+Hzsfm{6Ifq&&T|UcvD5q}{#q=T88x?~gjl3_bt20NIvuL&vHnGfQ zv*jd{p2q=-`zoC$h=yvOkX8Q_7(fET*Lfvd+Gg56Osv3mud}aB+#mPtV2VN*coib^ zk`o2$V-v!^mCh4^^VgqeOKE1ar}9u|0I%Cc3alk1VTI3JuDcK5li?UnG^(b%BM$IW z)Gq7%;InqbJDLO4v9FvYZM~`pxZgf=`^mvmns8pAm1#e_0&R~ctcnSib9yq|8h4$Y z+#brb@lkrPqSN<(qwS;6`y#6pRNX!Q+M!>cW}a$p8SS#Uw`Z@DYtAU$9qQUIM71*K zqtaD?F?l$RY3h1>QgB9Cy3N4#dG&**-VmFQYK^cHzFiUQ3(FA`S`@a9{p;% zC(wkpP3ns~XJOubM=`Y8a{2yysfd(GrKU!6pz(wuLa^_RwpxW@(CQRg9trn2MTSoW zE6{bzXZT1stkwPUfT@2pZfTFl*BM~6;G&SE2nB!&`NA_==P2U??ctICISBfJ5N7*P$^(1VQKa$Vk@>pmx zlT%4y$LsFwB5#aTu^y48=i`E4@u++xFPJ%M>KLVgeo!GwIo=g-VFyAINmE<>ij3)dk|^228?N^749KsCaq^7Ttp1M@I6nJS6|`N51fXVn4Wd@Rr;!@mY-r$|bo zxXQdoh(MtDAw#%z)<<<=KKk}WFN#EbkQ10a; zB2&kYR3MeoK^fIG!(7sDK>^F5>d%>$0Q`=Q5{GwyB6k!GLR?L z#HY@mIn&n4bD8s95`olds9d zp_lN;8D&39T(L;rK%ytmw+|WaITXytys@-OXB_-wz@+2T#Iq5I&vJy;NPp|4Ig?i? zCxzSj?y|0xh6^#hY;h+$jKXQXUd{N2>F2i>Sd$KJD1+q1vM-eR7&x<0#ih0pEvK>- z$;+nyIjs^d+AH7jv@w{mW-4Q{axF$KSw+Y#WxTkWJ9lN|L`fUTa|mY!Gocm|=gwWD zP0KB`8hx&&;f^MK!wB;t2lCxFE!up{PlLBo2Uh|MMu@L45(eufNvgiesX2AXe<|fe z!CqCH`#F`3VNPxIgfBd}OP|1)Ot#~m%!`$dsN}L)o*tZmev(z6xVNg{q~HMmKLEhwkM68O$L~d5E)ij|kMd3VBs$_2 zqg11^qD<6D)@;9(HcL~m{}rqVV+`Q~%s`MV8ab(6L(JUxFrQo0S0O0y9I{lGE~S9c zN}bsnX-q}oS8Awsg`_$A0!J3{jh=AhYsAIrjU*I-kjvPgcwzM{EGU>v=W0ujrh58I z1dkib987F)`(85BhIoG?Hfitu{1;4vds~9K39=`5YjAlZQ=S*NlZETY)rceUI`r3h z{7+w1d3f>#k}cb}FmzT+d`@uteNmrkl|Qjw|f7j;l7CU{B}sC4M)LxRxo~p}cs^iK))g2^*<8YD2SZmlB&?Z<;UJ2-=dDRQ|m# z<}e>1eWAM4&nQNoW(=(Wmh@e>jLdz%6@~2qgbV^$8?5?stL*t_VY@D2R6YsdCx~}n z%jK6aTPEAED0gs{H)fcp*dXRxs{5%TpD}#aVkWM{7y2Ij<`Af0PbH^NOFB+ZQ(&$v z45AY|R&2QXs&uN|;?MVFW?gVorixHX3sEQ^O_Py7;^~*uss43@ubg}HI zNw`iWcE8rkWCBd55ScP#=_|=&gl)gC)!r|B6NKbCy-ksyTTu3-% zYmY~wFN9bS$)vbN*9Eb3Znf+Ckg@1b&uBwq1DNl&7!72Wc3VRqjR>@qu+)WN&c&ky|EV9N{%%&D#tB z2#xFg`1qghX#w$H+%bf2m(j%;S{I!w=!GdRXC{ZyViAVYLI67a^K@MnKm3O=su7TMj5tEaCbhb z>SXEPftUHq5#5s$Lt7DmqVwN?MF5|FajxJvq&ND#S7y3uX4giBn5Jh z-C_wJ&Q1zV0LWEUvzf=KUm>Rku<1V5n0}PrKXXVV+^?dd>o@WP_)lgw2^^MQ&6Ir7 z(lgt*nm#D!1-iP4KRG$$H^Om`KN;EJvDjZe3ozGURmr2^{l?6`<3LUKS^=Ca$LeUz zEWFNQNNmkGy2N`26g#9@E1?DWkEv$+DWK2+K*o*$RBN28vqm*tMrq4F{f%+O_ZJtT zN!zKtbC=a4p~KmoTcI9Oh;H2X?=4AouZte3@DYuyv|zzso)Lm`=N(Fl&?!ZI^}7|H?t;H(H9g0J7Z-(iE)zdZmXm2fl-)Vz-KmDDTCvvIZBP}W0)W=l z|2=Rku7c~}9Y}Q!N@(Dh>M*S1_+G<8!t^P_Q41-@raz)U`r)@9T~IsiM$#mSAG~*! zC#0UhWBbkFU6GQ{?#xY?)y|X@mZ4qVNd9#PK<7UUOF2mZzTWW9?*Co`S#5FW?6Z>S zb>SaCI{@@&BS%*)-@`hGcCe+-oWA9JKXeDBhiPn?N(M&>La<*DtgTGx#2Za(o}8z5 z=~J?2b>f0@<>Y#O237?qNB3Q^-LjKQE+HwfcSGL-zcS#Jq3F(GMH?^`o+3UYrD|N` z8~tx|?+Q&+^8(r|fhDX``s09-;OtEr3DI_HfGeAV8encd3E%+7XThkGC5%${4DbDT z--NC!xO*S~NBnbW1vpmVudg%$oNsx34!Me(k&{gtyPK3O*b8J`I|BPmhFpzei^ytb zZ`~oswnrl`R*%mC_9MD=zOMu$-bIq+A3EQNxxv>Yx z{xO*H?)h(xt3JXhrdSuU%)d@@!Gbyxu`UYn_l0TA%S4BcS(YHBu4``@5AG@M`?_Z+ z+3Rd2or;y9W65K?Vn#kP4l=v6LN$-t95F3e*Xq7j}zq^B%MX1D-xu%@T2uBN% zQ->(zkadGe?+r~Mh9}OgM?b*A9woiOh94X%=pL)oU>qn!nIu?j9vM_^BkBS`a1dA1 zI9*fx_>Z-HhcRqx?*)YNDw%M&XRV36Qi7&o8fBv;hU{7UAT6^rwgoJT)pS z=*qwS%I#jmWD-#=Q7UUBlTPwT7kjhSlU^_4bKSD;noNs%%wlAgveOOlJ^jQ*g70i z{PvN$yO#En@Pbs(W!%x|{psdS8U)+jgiW^JeMH1JU^_MRia}uJuP&pyJ$G}nC%x>D z9B21nnxw{ga~utqcRNd^>-Nl&UnvsEyV(ckqSglQi1~&h_&pHG2mPQE4rV-g#lzaV zM5E8#LazQ_p@_eSz=oiF_xUTRtGSb`+L$=!zn($Xhnc>ZLmyLowDT$Z9KAM=0#ba; zI+;u$Gl(>BxkQP`+@d@SzHLl4x@j{PmPJ4ZoCifrgH8vh`#3b+U#6z!`YszZmjhww z7!Vhe`RGNauJZiNZjlmX3l{JOV$g~6vxZ41?MNE(&v~p44EVw|bSuRG6352Xl@j=LZiPb@

LQw?t9_kM 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

btghIiIdsn=D9xSc013(cc>^1|IP%yLNdF#_k&g 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\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n#\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.10.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.10.pub\";\ + \n#\ + \n#root.mnuc.backuper\ + \n\ + \n#/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@1\ + 0.30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\ + \n#:local Script AM-GlobalConfig;\ + \n#/system/script/add name=\$Script owner=\$Script source=([ /tool/fetch c\ + heck-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \".r\ + sc\") output=user as-value ]->\"data\");\ + \n#/usb1/mikro_bak_rsa.pub\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n:global MkDir;\ + \n\ + \n:local FetchFile Binary.backup\ + \n:local localDir \"\";\ + \n\ + \n#\$MkDir \$localDir;\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);" +add comment="Example add WU servers to AddrList" dont-require-permissions=no \ + name=WU-add-to-list owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# Syed Jahanzaib / aacable@hotmail.com\r\ + \n# List name\r\ + \n:local LISTNAME \"windowsupdateslist\"\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"update.microsoft.com\"\r\ + \n:local TARGET2 \"download.windowsupdate.com\"\r\ + \n:local TARGET3 \"download.microsoft.com\"\r\ + \n:local TARGET4 \"windowsupdate.com\"\r\ + \n:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n:local TARGET6 \"wustat.windows.com\"\r\ + \n:local TARGET7 \"stats.microsoft.com\"\r\ + \n:local TARGET8 \"mp.microsoft.com\"\r\ + \n:local TARGET9 \"ws.microsoft.com\"\r\ + \n:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n \r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n \r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4|\$TARGET5|\$TARGET6|\$TARGET7|\$TARGET8|\$TARGET9|\$TARGET10|\$T\ + ARGET11|\$TARGET12|\$TARGET13|\$TARGET14)\" && \$type ~ \"^(A|CNAME)\\\$\"\ + \_] do={\r\ + \n \r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n \r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Add Hosts DNS names to NoWG addres list" \ + dont-require-permissions=no name=Add2vdsina owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_Script to add target web sites DNS IP addresses into address list\r\ + \n# Tested with Mikrotik 6.4x\r\ + \n# \r\ + \n# List name\r\ + \n:local LISTNAME \"NoWG\"\r\ + \n#\r\ + \n# Web site names which will be added in address list\r\ + \n:local TARGET1 \"comp-lenta.ru\"\r\ + \n:local TARGET2 \"ok.ru\"\r\ + \n:local TARGET3 \"vk.com\"\r\ + \n#:local TARGET4 \"smtp.mail.me.com\"\r\ + \n#:local TARGET4 \"windowsupdate.com\"\r\ + \n#:local TARGET5 \"ntservicepack.microsoft.com\"\r\ + \n#:local TARGET6 \"wustat.windows.com\"\r\ + \n#:local TARGET7 \"stats.microsoft.com\"\r\ + \n#:local TARGET8 \"mp.microsoft.com\"\r\ + \n#:local TARGET9 \"ws.microsoft.com\"\r\ + \n#:local TARGET10 \"sls.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET11 \"vortex.data.microsoft.com\"\r\ + \n#:local TARGET12 \"vortex-win.data.microsoft.com\"\r\ + \n#:local TARGET13 \"fe2.update.microsoft.com.akadns.net\"\r\ + \n#:local TARGET14 \"statsfe2.update.microsoft.com.akadns.net\"\r\ + \n \r\ + \n# 1st time runner, check if address list is not created previously and a\ + dd entries in it for 1st time usage\r\ + \n:if ( [/ip firewall address-list find where list=\$LISTNAME] = \"\") do=\ + {\r\ + \n:log warning \"No address list for \$TARGET1 found ! creating and adding\ + \_resolved entry for 1st time usage ... zaib\"\r\ + \n\r\ + \n:local FirstAddr [resolve \$TARGET1];\r\ + \n\r\ + \n/ip firewall address-list add address=\$FirstAddr list=\$LISTNAME commen\ + t=\$TARGET1;\r\ + \n\r\ + \n} else={\r\ + \n:log warning \"Previous List for \$LISTNAME found ! moving forward and c\ + hecking if DNS entries can be added in it ...\"\r\ + \n}\r\ + \n\r\ + \n# Check DNS entries and collect matching names\r\ + \n:foreach i in=[/ip dns cache find name~\"(\$TARGET1|\$TARGET2|\$TARGET3|\ + \$TARGET4)\" && \$type ~ \"^(A|CNAME)\\\$\" ] do={\r\ + \n\r\ + \n:log info (\"start entry: \$c \$sitednsname \$Buffer\");\r\ + \n\r\ + \n# Get IP Address from the names and hold it in temporary buffer\r\ + \n:local Buffer [/ip dns cache get \$i data];\r\ + \ndelay delay-time=10ms\r\ + \n:log info (\"1: \$Buffer\"); \r\ + \n\r\ + \n# Check if entry is already not exists, then OK, otherwise ignore duplic\ + ation\r\ + \n:if ( [/ip firewall address-list find where address=\$Buffer] = \"\") do\ + ={\r\ + \n\r\ + \n:log info (\"2: \$Buffer\"); \r\ + \n \r\ + \n# Fetch DNS names for the entries\r\ + \n:local sitednsname [/ip dns cache get \$i name] ;\r\ + \n \r\ + \n# Print name in LOG window\r\ + \n:log info (\"added entry: \$i \$sitednsname \$Buffer\");\r\ + \n \r\ + \n# Add IP addresses and there names to the address list\r\ + \n/ip firewall address-list add address=\$Buffer list=\$LISTNAME comment=\ + \$sitednsname;\r\ + \n}\r\ + \n}" +add comment="Flush DNS Cache" dont-require-permissions=no name=\ + DNS_Flush_Cache owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\ + "/ip dns cache flush" +add comment="Certificates CloudFlare, Quad9 " dont-require-permissions=no \ + name=Update-Certificates owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \_CloudFlare\r\ + \n#/tool/fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalR\ + ootCA.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\ + \"\";\r\ + \n#/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobal\ + G2TLSRSASHA2562020CA1-1.crt.pem;\r\ + \n#/certificate/import file-name=DigiCertGlobalG2TLSRSASHA2562020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n# Quad9\r\ + \n#/tool/fetch mode=https url=\"https://cacerts.digicert.com/DigiCertGloba\ + lG3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n#/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt\ + .pem passphrase=\"\";\r\ + \n\r\ + \n:global GlobalScriptsUrl;\r\ + \n#google\r\ + \n:local CertName \"DigiCert-Global-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-CA\" [ find where common-na\ + me=\"DigiCert Global Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-CA.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-CA\" [ find where commo\ + n-name=\"DigiCert Assured ID Root CA\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G2\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Assured-ID-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Assured-ID-Root-G3\" [ find where commo\ + n-name=\"DigiCert Assured ID Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G2-TLS-RSA-SHA256-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G2 TLS RSA SHA256 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-G3-TLS-ECC-SHA384-2020-CA1\" [ f\ + ind where common-name=\"DigiCert Global G3 TLS ECC SHA384 2020 CA1\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G2\" [ find where common-na\ + me=\"DigiCert Global Root G2\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Global-Root-G3.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Global-Root-G3\" [ find where common-na\ + me=\"DigiCert Global Root G3\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-ECC-P384-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-ECC-P384-Root-G5\" [ find where com\ + mon-name=\"DigiCert TLS ECC P384 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-TLS-RSA4096-Root-G5.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-TLS-RSA4096-Root-G5\" [ find where comm\ + on-name=\"DigiCert TLS RSA4096 Root G5\" ];\r\ + \n\r\ + \n:set CertName \"DigiCert-Trusted-Root-G4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"DigiCert-Trusted-Root-G4\" [ find where common-n\ + ame=\"DigiCert Trusted Root G4\" ];\r\ + \n\r\ + \n:set CertName \"GTS-Root-R4.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"GTS-Root-R4\" [ find where common-name=\"GTS Roo\ + t R4\" ];\r\ + \n\r\ + \n:set CertName \"Go-Daddy-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Go-Daddy-Root-Certificate-Authority-G2\" [ find \ + where common-name=\"Go Daddy Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"ISRG-Root-X1.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"ISRG-Root-X1\" [ find where common-name=\"ISRG R\ + oot X1\" ];\r\ + \n\r\ + \n:set CertName \"Root-YE.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Root-YE\" [ find where common-name=\"Root YE\" ]\ + ;\r\ + \n\r\ + \n:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"Starfield-Root-Certificate-Authority-G2\" [ find\ + \_where common-name=\"Starfield Root Certificate Authority - G2\" ];\r\ + \n\r\ + \n:set CertName \"USERTrust-RSA-Certification-Authority.pem\";\r\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"certs/Master/\" . \$C\ + ertName);\r\ + \n/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n/certificate/set name=\"USERTrust-RSA-Certification-Authority\" [ find w\ + here common-name=\"USERTrust RSA Certification Authority\" ];\r\ + \n\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-RX.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#internet\r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"ISRG-Root-X2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n\r\ + \n\r\ + \n#/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 do\ + h-max-server-connections=20 use-doh-server=https://security.cloudflare-dns\ + .com/dns-query verify-doh-cert=yes;\r\ + \n#/ip/dns/static remove [find where address=1.1.1.1];\r\ + \n#/ip/dns/static add address=1.1.1.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 1\";\r\ + \n#/ip/dns/ static remove [find where address=1.0.0.1];\r\ + \n#/ip/dns/static add address=1.0.0.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 2\"\r\ + \n#/ip dns static add address=2606:4700:4700::1111 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip dns static add address=2606:4700:4700::1001 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip/dns set servers=\"1.0.0.1, 8.8.4.4\";\r\ + \n#/ip/dns set servers=\"\";" +add dont-require-permissions=no name=script1 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="/\ + tool/netwatch/add comment=\"doh-fallback, doh-url=https://security.cloudfl\ + are-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Clou\ + dFlare-doh IPv4 1\" host=1.1.1.1;\r\ + \n/tool/netwatch/add comment=\"doh, doh-url=https://security.cloudflare-dn\ + s.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=CloudFlare\ + -doh IPv4 2\" host=1.0.0.1;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 1\" host=8.8.8.8;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 2\" host=8.8.4.4;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 1\" host=9.9.9.9;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 2\" host=149.112.112.112;\r\ + \n\r\ + \n/tool/netwatch/add comment=\"dns, notify, name=ns1.unet.ws\" host=91.192\ + .189.2;" +add dont-require-permissions=no name=script2 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \r\ + \n\r\ + \n:global InspectVar;\r\ + \n#:global RouterBoard;\r\ + \n#:do {:set RouterBoard [[ :parse \"/system/routerboard/get\" ]]} on-erro\ + r={}\r\ + \n#:global Resources;\r\ + \n#:do {:set Resources [[ :parse \"/system/resource/get\" ]]} on-error={}\ + \r\ + \n\r\ + \n#:global Updates;\r\ + \n#:do {:set Updates [[ :parse \"/system/package/update/get\" ]]} on-error\ + ={}\r\ + \n\r\ + \n#:global PkgUpdStatus \"undefined\";\r\ + \n#:local Update [/system/package/update/get];\r\ + \n#:retry command={:set PkgUpdStatus (\$Update->\"status\")} delay=200ms m\ + ax=5 on-error={};\r\ + \n\r\ + \n#:log warning [\$InspectVar \$RouterBoard];\r\ + \n#:put [\$InspectVar \$RouterBoard];\r\ + \n\r\ + \n#:retry command={/system/package/update check-for-updates without-paging\ + \_as-value} delay=300ms max=5 on-error={};\r\ + \n\r\ + \n#:global arrDeviceInfo ({});\r\ + \n#:local arrDeviceInfo ({\"section\":{\"key\":\"\"; \"value\":\"\";};});\ + \r\ + \n#:set (\$arrDeviceInfo->\"RouterBoard\") [[ :parse \"/system/routerboard\ + /get\" ]];\r\ + \n#:retry command={:set (\$arrDeviceInfo->\"Updates\") [[ :parse \"/system\ + /package/update/get\" ]]} delay=500ms max=5 on-error={:log error (\"Error\ + \")};\r\ + \n# [:toarray {\"section\"={\"key\"=\"\"; \"value\"=\"\";} }];\r\ + \n# [:toarray \"\"];\r\ + \n:local arrDeviceInfo ({});\r\ + \n\r\ + \n:set (\$arrDeviceInfo->\"devUpdates\") {\"channel\"; \"stable\";};\r\ + \n#:do {:set (arrDeviceInfo->\"Updates\") [[ :parse \"/system/package/upda\ + te/get\" ]]} on-error={:log error (\$error)}\r\ + \n\$InspectVar \$arrDeviceInfo;\r\ + \n" +add comment="Script for setup routeros script system" \ + dont-require-permissions=no name=AM-setup owner=AM-setup policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-setup\r\ + \n# Script comment: Script for setup routeros script system\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# :local ScriptName [ :jobname ];\r\ + \n# Additional commands:\r\ + \n#\r\ + \n# For scripts:\r\ + \n#:global NewScript \"script_name\"; \r\ + \n#:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n#/system/script/add name=\$NewScript owner=\$NewScript source=([/tool/fe\ + tch check-certificate=yes-without-crl (\$GlobalScriptsUrl . \$ScriptAdd . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n#:global NewScript (a);\r\ + \n#:global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n#\r\ + \n# For run from terminal:\r\ + \n#/system/script/add name=AM-setup owner=AM-Setup source=([/tool/fetch ch\ + eck-certificate=yes-without-crl \"https://ros.vados.ru/AM-setup.rsc\" outp\ + ut=user as-value ]->\"data\");\r\ + \n#\r\ + \n\r\ + \n:global ScriptUpdatesCRLF \"LF\";\r\ + \n#:if (\$ScriptUpdatesCRLF != false) do={\r\ + \n# :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vad\ + os\" ] do={\r\ + \n# if (\$ScriptUpdatesCRLF = true) do={\r\ + \n# /system/script/set source=[ :tocrlf [ get \$Script source ] ] \$S\ + cript;\r\ + \n# } else={\r\ + \n# /system/script/set source=[ :tolf [ get \$Script source ] ] \$Scr\ + ipt;\r\ + \n# }\r\ + \n# }\r\ + \n#}\r\ + \n\r\ + \n# /import verbose=no \$ScriptName\r\ + \n:global SetupScript [ :jobname ];\r\ + \n:global RemoveMe;\r\ + \n:global RunOnce;\r\ + \n:global InitSetup true;\r\ + \n:global tmpfs false;\r\ + \n\r\ + \n{\r\ + \n :local RmMe [:tobool \$1];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SetupScript;\r\ + \n :global RemoveMe;\r\ + \n :global InitSetup;\r\ + \n :global tmpfs;\r\ + \n \r\ + \n :local CertCommonName \"Root YE\";\r\ + \n :local CertFileName \"Root-YE.pem\";\r\ + \n :local CertFingerprint \"e14ffcad5b0025731006caa43a121a22d8e9700f4fb9c\ + f852f02a708aa5d5666\";\r\ + \n\r\ + \n :if (\$SetupScript = false) do={\r\ + \n :global SetupScript \"AM-setup\";\r\ + \n }\r\ + \n :if (\$RemoveMe != false) do={\r\ + \n :set RemoveMe true;\r\ + \n }\r\ + \n\r\ + \n :log warning (\"\\n\\\$GlobalScriptsUrl = \" . \$GlobalScriptsUrl);\r\ + \n \r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] != 1) do={\r\ + \n :error \"Something is wrong with your certificates!\";\r\ + \n } else={\r\ + \n :if (!(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" ||\ + \_\\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CertComm\ + onName ] ] > 0)) do={\r\ + \n :put \"Importing certificate...\";\r\ + \n /tool/fetch (\$GlobalScriptsUrl . \"certs/ipall/\" . \$CertFileN\ + ame) dst-path=\$CertFileName as-value;\r\ + \n :delay 1s;\r\ + \n /certificate/import file-name=\$CertFileName passphrase=\"\";\r\ + \n :delay 1s;\r\ + \n };\r\ + \n };\r\ + \n\r\ + \n:local MkTmpfs do={\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\"The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\"Try to removing directory 'tmpfs'.\");\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/remove tmpfs;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n# \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource/g\ + et total-memory ] / 3);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get tmpfs;\r\ + \n :return true;\r\ + \n } delay=222ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\"Creating disk of type tmpfs failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n}\r\ + \n:if (\$tmpfs = true) do={\r\ + \n :put \"Tmpfs variable is true. Checking for tmpfs/scripts directory...\ + \";\r\ + \n :if ([/file find name=\"tmpfs/scripts\"] != \"\") do={\r\ + \n :log info (\$0 . \"Directory tmpfs/scripts exsist.\");\r\ + \n :return \$true;\r\ + \n } else={\r\ + \n :log warning (\$0 . \"Directory tmpfs/scripts does't exsist.\");\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :log error (\$0 . \"Directory tmpfs is not created!\");\r\ + \n :return false;\r\ + \n } else={\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=/tmpfs/scripts;\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get /tmpfs/scripts;\r\ + \n :return true;\r\ + \n } delay=100ms max=10;\r\ + \n } on-error={ }\r\ + \n } do={\r\ + \n :log warning (\$0 . \"Making directory 'scripts' failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n# :return true;\r\ + \n# [ /file/get \$FileName ]\r\ + \n }\r\ + \n# :log error (\$0 . \"Directory tmpfs/scripts does not exsist. Remove\ + \_global variable tmpfs!\");\r\ + \n# :global tmpfs (a);\r\ + \n# return false;\r\ + \n }\r\ + \n}\r\ + \n :put \"Renaming AM-GlobalConfig, if exists...\";\r\ + \n :local ConfOldName (\"AM-GlobalConfig-\" . [ /system/clock/get date ] \ + . [ /system/clock/get time ] . \".rsc\");\r\ + \n /system/script/set name=\$ConfOldName [ find where name=\"AM-GlobalCon\ + fig\" ];\r\ + \n :foreach Script in={ \"AM-GlobalConfig\"; \"AM-GlobalFunc\" } do={\r\ + \n :put \"Installing \$Script...\";\r\ + \n /system/script/remove [ find where name=\$Script ];\r\ + \n /system/script/add name=\$Script owner=\$Script source=([ /tool/fetc\ + h check-certificate=yes-without-crl url=(\$GlobalScriptsUrl . \$Script . \ + \".rsc\") output=user as-value ]->\"data\");\r\ + \n \r\ + \n /system/script run \$Script;\r\ + \n :delay 2s;\r\ + \n };\r\ + \n\r\ + \n :if ([ :len [ /certificate/find where fingerprint=\$CertFingerprint ] \ + ] > 0) do={\r\ + \n :put \"Renaming certificate by its common-name...\";\r\ + \n :global CertificateNameByCN;\r\ + \n \$CertificateNameByCN \$CertFingerprint;\r\ + \n };\r\ + \n\r\ + \n :if (\$RemoveMe = true) do={\r\ + \n :put \"Add Scheduler for remove this script...\";\r\ + \n :local OnEvent (\":delay 30s;\\n\" . \"/system/script/remove [ find \ + where name=\\\"\$SetupScript\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \"/system/scheduler/remove [ find where name=\\\ + \"_RemoveSetup\\\" ];\\n\" . \\\r\ + \n \":delay 2s;\\n\" . \":global RemoveMe (a);\\n\");\r\ + \n :local Comment \"_RemoveSetup tmp scheduler for remove setup script.\ + \";\r\ + \n /system/scheduler/add name=\"_RemoveSetup\" comment=\$Comment start-\ + time=startup interval=30s on-event=\$OnEvent;\r\ + \n :log warning (\$0 . \"\\nI've done everything, and now I'm tired..\ + . I'm leaving.\\nThere will be an error below, this is normal.\");\r\ + \n }\r\ + \n :delay 1;\r\ + \n :put \"Loading configuration and functions...\";\r\ + \n :do { \r\ + \n :global ScriptInstallUpdate; \$ScriptInstallUpdate;\r\ + \n :put \"Normal removing temporary global environment variables.\";\ + \r\ + \n :global SetupScript (a);\r\ + \n :global InitSetup (a);\r\ + \n :global RemoveMe (a);\r\ + \n } on-error={\r\ + \n :local ErrorMsg \"Loading configuration and functions error!\";\r\ + \n :log error (\$0 . \$ErrorMsg . :error);\r\ + \n :error \$ErrorMsg;\r\ + \n }\r\ + \n}\r\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=AM-GlobalConfig policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GlobalConfig\r\ + \n# Script comment: Global Config Script\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# Warning: Dont touch this line!\r\ + \n:global Identity [ /system identity get name ];\r\ + \n:global GlobalConfReady false;\r\ + \n#\r\ + \n#\r\ + \n# Global Url For Amster scripts to fetch\r\ + \n# most be defined in AM-Init-Script or AM-setup scripts\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global ScriptsUrlSuffix \"\";\r\ + \n:global CheckSumsVerify true;\r\ + \n\r\ + \n:global ScriptUpdatesCRLF true;\r\ + \n:global CommentsInScripts true;\r\ + \n\r\ + \n# Debug output:\r\ + \n:global PrintDebug true; #false;\r\ + \n\r\ + \n# Debug output for specific script:\r\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\r\ + \n\r\ + \n# Debug logs\r\ + \n# Other actions (disk, email, remote or support) can be used as well.\r\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\r\ + \n#/system/logging/add topics=script,debug action=memory;\r\ + \n\r\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\r\ + \n:global Domain \"WORKGROUP\";\r\ + \n\r\ + \n:global EmailGeneralTo \"vados@vados.ru\";\r\ + \n#:global EmailGeneralCc \"\";\r\ + \n\r\ + \n# \$ScriptInstallUpdate mod/notification-telegram\r\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\r\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\r\ + \n# Use this to send notifications to a specific topic in group.\r\ + \n#:global TelegramThreadId \"30\";\r\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\r\ + \n# or user names. Groups allow to chat with devices simultaneously.\r\ + \n:global TelegramChatIdsTrusted {\r\ + \n \"454403445\"\r\ + \n \"-1003631309063\"\r\ + \n \"-5124482807\"\r\ + \n \"1087968824\";\r\ + \n};\r\ + \n# \"-5294757340\";\r\ + \n\r\ + \n:global TelegramChatGroups \"(all)\";\r\ + \n#:global TelegramChatGroups \"(all|home|office)\";\r\ + \n\r\ + \n:global NotificationFunctions {\r\ + \n \"email\"\r\ + \n \"telegram\";\r\ + \n};\r\ + \n# Toggle this to disable symbols in notifications.\r\ + \n:global NotificationsWithSymbols true;\r\ + \n:global TerminalColorOutput true;\r\ + \n\r\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\r\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\r\ + \n\r\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\r\ + \n:global updateChannel \"stable\";\r\ + \n\r\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\" . \$Identity . \"/\ + \");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass {\r\ + \n \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass {\r\ + \n \"\";\r\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\r\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\r\ + \n};\r\ + \n\r\ + \n# Script BackupAndUpdate mode, possible values: backup,\r\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \r\ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\r\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\r\ + \n# osnotify - Set `forceBackup` to always create backups on every run\r\ + \n:global DevInfoIncludeIP true;\r\ + \n:global BackupAndUpdateMode \"osnotify\"\r\ + \n\r\ + \n:global forceBackup true;\r\ + \n:global BackupPassword \"Peskar55\";\r\ + \n\r\ + \n# SFTP Backup Variables\r\ + \n:global BackupRandomDelay 0;\r\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\r\ + \n:global BackupUploadUser \$Identity;\r\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\r\ + \n\r\ + \n:global BackupSendBinary true;\r\ + \n:global BackupSendExport true;\r\ + \n:global BackupSendGlobalConfig true;\r\ + \n:global BackupSendScripts true;\r\ + \n\r\ + \n# Remove local file after uploading if no errors\r\ + \n:global BackupRmLocal true;\r\ + \n\r\ + \n# Local Backups Root Directory \r\ + \n:global BackupLocalRoot \"tmpfs\";\r\ + \n\r\ + \n# Encrypt Backup\r\ + \n:global BackupEncrypt true;\r\ + \n\r\ + \n# Sensitive information in Backups\r\ + \n:global BackupSens true;\r\ + \n\r\ + \n# User Export\r\ + \n:global BackupUser true;\r\ + \n\r\ + \n# License Export (not for CHR, will silently skip)\r\ + \n:global BackupLicense false;\r\ + \n\r\ + \n# SSH Keys\r\ + \n:global BackupSshKeys true;\r\ + \n\r\ + \n# Certificate Export\r\ + \n:global BackupCerts true;\r\ + \n\r\ + \n# Certificate Password\r\ + \n:global BackupCertsPasswd \"\";\r\ + \n\r\ + \n# User-Manager Export\r\ + \n:global BackupUserMan false;\r\ + \n\r\ + \n# The Dude Export\r\ + \n:global BackupDude false;\r\ + \n\r\ + \n# User Files to export, comma-separated string or array of strings\r\ + \n# User Files are not removed on backup\r\ + \n# Any directory paths will be removed (/ -> _) on remote file\r\ + \n# Nonpresent files are silently skipped\r\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\r\ + \n\r\ + \n# load functions and any custom scripts\r\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\r\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\r\ + \n#\r\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \r\ + \n# :onerror Err {\r\ + \n# /system/script/run \$Script;\r\ + \n# } do={\r\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\r\ + \n# }\r\ + \n#}\r\ + \n#:log info \"\\ndevMode = \$devMode\";\r\ + \n#:log info \"\\ndevRunning = \$devRunning\";\r\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalConfReady true;\r\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\r\ + \n" +add comment="Global functions" dont-require-permissions=no name=AM-GlobalFunc \ + owner=AM-GlobalFunc policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GglobalFunc\r\ + \n# Script comment: Global functions\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n:local ExitOK false;\r\ + \n:local ScriptName [ :jobname ];\r\ + \n#:global checkRunJob \$SriptName;\r\ + \n#:global fixCRLF;\r\ + \n#:if (\$fixCRLF != false) do={\r\ + \n#:foreach fixScript in=([ /system/script/find where name~\"*\" ]) do={/s\ + ystem/script/set source=[ :tocrlf [ get \$fixScript source ] ] \$fixScript\ + }\r\ + \n#:if (\$fixCRLF != \"LF\") do={ /system/script/set source=[ :tocrlf [ g\ + et \$fixScript source ] ] \$fixScript};};\r\ + \n#}\r\ + \n:global GlobalFuncReady false;\r\ + \n\r\ + \n# Git commit id & info, expected configuration version\r\ + \n:global CommitId \"main/614/a7992fc8\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 01:00:03 05.05.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 140;\r\ + \n\r\ + \n:global SumsDirAndFileName \"tmp/checksums.json\";\r\ + \n\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global IdentityShort [:pick \$Identity 0 18];\r\ + \n\r\ + \n:global devBoardName [/system/resource/get board-name];\r\ + \n:global devMode [/system/device-mode/get mode];\r\ + \n:global devCurArch [/system/resource/get architecture-name];\r\ + \n:global devCurVersion [/system/resource/get version];\r\ + \n\r\ + \n# Variables defined in AM-GlobalConfig.rsc\r\ + \n:global TerminalColorOutput;\r\ + \n:global CommentsInScripts;\r\ + \n:global DetectIpAddrDefault;\r\ + \n:global DetectIpAddrFallback;\r\ + \n:global updateChannel;\r\ + \n:global Domain;\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n\r\ + \n# Single functions, without nested functions.\r\ + \n:global MiniDateTimeStamp;\r\ + \n:global MicroDateTimeStamp;\r\ + \n\r\ + \n# Include globals \$PrintDebug and \$PrintDebugOverride\r\ + \n:global LogPrint;\r\ + \n\r\ + \n# DeviceInfo and Updates\r\ + \n:global IsCheckUpdates;\r\ + \n:global WaitCheckUpdates;\r\ + \n:global GetPubIp;\r\ + \n\r\ + \n:global GetArrDeviceInfo;\r\ + \n:global WaitArrDeviceInfo;\r\ + \n\r\ + \n:global devModel;\r\ + \n:global devRunningMode;\r\ + \n\r\ + \n:global devRbRevision;\r\ + \n:global devRbSerialNumber;\r\ + \n:global devRbVerAvail;\r\ + \n\r\ + \n:global runningChannelVersion;\r\ + \n:global runningChannel;\r\ + \n:global runningVersion;\r\ + \n\r\ + \n:global devBuildTime;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n:global currentUpdateChannel;\r\ + \n\r\ + \n:global ScriptInstallUpdate;\r\ + \n\r\ + \n:global DeviceInfo;\r\ + \n\r\ + \n:global OldMode;\r\ + \n\r\ + \n:global ParseKeyValueStore;\r\ + \n:global RandomDelay;\r\ + \n:global GetRandomNumber;\r\ + \n:global EscapeForRegEx;\r\ + \n:global CharacterMultiply;\r\ + \n:global CharacterReplace;\r\ + \n:global CleanFilePath;\r\ + \n:global CleanName;\r\ + \n\r\ + \n:global CommitBrief;\r\ + \n\r\ + \n:global EitherOr;\r\ + \n:global FormatLine;\r\ + \n:global GetRandom20CharAlNum;\r\ + \n:global GetRandom20CharHex;\r\ + \n:global GetRandomNumber;\r\ + \n:global Grep;\r\ + \n:global IfThenElse;\r\ + \n:global MAX;\r\ + \n:global MIN;\r\ + \n:global HumanReadableNum;\r\ + \n\r\ + \n:global IsFullyConnected;\r\ + \n:global IsDNSResolving;\r\ + \n:global IsTimeSync;\r\ + \n:global IsTimeSyncCached;\r\ + \n:global IsTimeSyncResetNtp;\r\ + \n\r\ + \n:global WaitDNSResolving;\r\ + \n:global WaitFullyConnected;\r\ + \n:global WaitTimeSync;\r\ + \n:global MkDir;\r\ + \n:global RmDir;\r\ + \n:global RmFile;\r\ + \n:global FileGet;\r\ + \n:global Unix2Dos;\r\ + \n:global UrlEncode;\r\ + \n:global WaitForFile;\r\ + \n:global ScriptLock;\r\ + \n:global SendTelegram;\r\ + \n:global NotificationFunctions;\r\ + \n:global SendNotification;\r\ + \n:global SendNotification2;\r\ + \n:global SymbolForNotification;\r\ + \n:global SymbolByUnicodeName;\r\ + \n:global ValidateSyntax;\r\ + \n:global CheckSumsVerify;\r\ + \n:global GlobalConfChanges;\r\ + \n:global GlobalConfMigration;\r\ + \n:global VersionToNum;\r\ + \n:global RequiredRouterOS;\r\ + \n:global ExitError;\r\ + \n:global ExitOnError;\r\ + \n\r\ + \n:global FetchHugeFiles;\r\ + \n:global FetchUserAgentStr;\r\ + \n:global FileExists;\r\ + \n:global CertificateAvailable;\r\ + \n:global CertificateDownload;\r\ + \n:global CertificateNameByCN;\r\ + \n:global CharacterMultiply;\r\ + \n\r\ + \n:global InspectVar;\r\ + \n:global InspectVarRet;\r\ + \n:global ParseCustom;\r\ + \n\r\ + \n:set IsCheckUpdates do={\r\ + \n :local isInfo [:tobool \$1];\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :log info (\$0 . \" \\\$isInfo = \" . \$isInfo); \r\ + \n :local CurrentChannel [ /system/package/update/get channel ];\r\ + \n :if ([ :len \$updateChannel ] > 0 && \$CurrentChannel != \$updateChann\ + el) do={\r\ + \n :retry command={/system/package/update set channel=\$updateChannel} \ + \_delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" Set updates channel to: \$updateChannel\");\r\ + \n }\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n :log info (\$0 . \" Update Channel: \" . \$Channel . \".\");\r\ + \n :local StatusPkg \"undefined\";\r\ + \n :log info (\$0 . \" Checking for updates...\");\r\ + \n :retry command={:set \$StatusPkg ([/system/package/update/check-for-up\ + dates without-paging as-value]->\"status\")} \\\r\ + \n delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" \\\$StatusPkg = \" . \$StatusPkg);\r\ + \n :if (\$StatusPkg = \"New version is available\") do={ :set PkgUpdStatu\ + s true; } else={ :set PkgUpdStatus false; }\r\ + \n :set ROsVerAvail [ :tostr [ /system/package/update/get latest-version \ + ] ];\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :retry command={:set (\$arrDeviceInfo->\"devUpdates\") [ /system/pac\ + kage/update/get ]} delay=500ms max=5 on-error={:log error (\"Error\")};\r\ + \n :return true;\r\ + \n } else={\r\ + \n :return \$PkgUpdStatus;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set WaitCheckUpdates do={\r\ + \n :global IsCheckUpdates;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n :while ((\$Status = \"\" || \$Status = \"finding out latest version...\ + \") && \$WaitCount < 60) do={\r\ + \n :delay 1s;\r\ + \n :set WaitCount (\$WaitCount + 1);\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n }\r\ + \n :set Update [ /system/package/update/get ];\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n :if ((\$Update->\"status\") = \"New version is available\") do={\r\ + \n :set PkgUpdStatus true;\r\ + \n } else={\r\ + \n :set PkgUpdStatus false;\r\ + \n }\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :set (\$arrDeviceInfo->\"devUpdates\") \$Update;\r\ + \n :if (\$Status = \"\" || \$Status = \"finding out latest version...\") \ + do={\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set WaitArrDeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :while ([ \$GetArrDeviceInfo ] = false) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetArrDeviceInfo do={\r\ + \n :global LogPrint;\r\ + \n :global arrDeviceInfo;\r\ + \n :global devBoardName;\r\ + \n :global devModel;\r\ + \n :global devRunning;\r\ + \n :global devCurArch;\r\ + \n :global devRbRevision;\r\ + \n :global devRbSerialNumber;\r\ + \n :global devBuildTime;\r\ + \n :global runningChannelVersion;\r\ + \n :global runningChannel;\r\ + \n :global runningVersion;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n\r\ + \n :local DeviceInfo;\r\ + \n :local Resource [/system/resource/get];\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local VersionString [ :tostr (\$Resource->\"version\") ];\r\ + \n :local ChannelStart [ :find \$VersionString \" (\" ];\r\ + \n :local RouterBoard;\r\ + \n :local IsRouterBoard false;\r\ + \n :local RunningMode \"\";\r\ + \n\r\ + \n :set devCurArch [ :tostr (\$Resource->\"architecture-name\") ];\r\ + \n :set devBuildTime [ :tostr (\$Resource->\"build-time\") ];\r\ + \n :set runningChannelVersion \$VersionString;\r\ + \n :set runningVersion \$VersionString;\r\ + \n :set runningChannel \"\";\r\ + \n\r\ + \n :if ([ :typeof \$ChannelStart ] = \"num\" && \$ChannelStart >= 0) do=\ + {\r\ + \n :set runningVersion [ :pick \$VersionString 0 \$ChannelStart ];\r\ + \n :local ChannelRest [ :pick \$VersionString (\$ChannelStart + 2) [ :\ + len \$VersionString ] ];\r\ + \n :local ChannelEnd [ :find \$ChannelRest \")\" ];\r\ + \n :if ([ :typeof \$ChannelEnd ] = \"num\" && \$ChannelEnd >= 0) do={\ + \r\ + \n :set runningChannel [ :pick \$ChannelRest 0 \$ChannelEnd ];\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([:pick \$devBoardName 0 3] != \"CHR\" or [:pick \$devBoardName 0\ + \_3] != \"x86\") do={\r\ + \n :do {\r\ + \n :set RouterBoard [[ :parse \"/system/routerboard/get\" ]];\r\ + \n# :set RouterBoard [ /system/routerboard/get ];\r\ + \n :if ((\$RouterBoard->\"routerboard\") = true) do={\r\ + \n :set IsRouterBoard true;\r\ + \n }\r\ + \n } on-error={}\r\ + \n }\r\ + \n\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get mode ];\r\ + \n } on-error={\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get running ];\r\ + \n } on-error={\r\ + \n :set RunningMode \"\";\r\ + \n }\r\ + \n }\r\ + \n :set devRunning \$RunningMode;\r\ + \n\r\ + \n :if (\$IsRouterBoard = true) do={\r\ + \n :set devModel [ :tostr (\$RouterBoard->\"model\") ];\r\ + \n :set devRbRevision [ :tostr (\$RouterBoard->\"revision\") ];\r\ + \n :set devRbSerialNumber [ :tostr (\$RouterBoard->\"serial-number\") \ + ];\r\ + \n } else={\r\ + \n :set devModel \$devBoardName;\r\ + \n :set devRbRevision \"\";\r\ + \n :set devRbSerialNumber \"\";\r\ + \n }\r\ + \n\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n\r\ + \n :set (\$DeviceInfo->\"board-name\") \$devBoardName;\r\ + \n :set (\$DeviceInfo->\"architecture-name\") \$devCurArch;\r\ + \n :set (\$DeviceInfo->\"model\") \$devModel;\r\ + \n :set (\$DeviceInfo->\"revision\") \$devRbRevision;\r\ + \n :set (\$DeviceInfo->\"serial-number\") \$devRbSerialNumber;\r\ + \n :set (\$DeviceInfo->\"running-mode\") \$devRunning;\r\ + \n :set (\$DeviceInfo->\"build-time\") \$devBuildTime;\r\ + \n :set (\$DeviceInfo->\"running-channel-version\") \$runningChannelVers\ + ion;\r\ + \n :set (\$DeviceInfo->\"running-version\") \$runningVersion;\r\ + \n :set (\$DeviceInfo->\"running-channel\") \$runningChannel;\r\ + \n :set (\$DeviceInfo->\"routerboard\") \$IsRouterBoard;\r\ + \n :set (\$DeviceInfo->\"current-firmware\") [ :tostr (\$RouterBoard->\"\ + current-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"upgrade-firmware\") [ :tostr (\$RouterBoard->\"\ + upgrade-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"package-channel\") \$currentUpdateChannel;\r\ + \n :set (\$DeviceInfo->\"installed-version\") [ :tostr (\$Update->\"inst\ + alled-version\") ];\r\ + \n :set (\$DeviceInfo->\"latest-version\") \$ROsVerAvail;\r\ + \n :set (\$DeviceInfo->\"update-status\") [ :tostr (\$Update->\"status\"\ + ) ];\r\ + \n\r\ + \n :set arrDeviceInfo \$DeviceInfo;\r\ + \n :return \$DeviceInfo;\r\ + \n}\r\ + \n\r\ + \n:set DeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global IfThenElse;\r\ + \n :global FormatLine;\r\ + \n :global CommitBrief;\r\ + \n\r\ + \n :local License [/system/license/get];\r\ + \n :local Snmp [ /snmp/get ];\r\ + \n :local Info [ \$GetArrDeviceInfo ];\r\ + \n\r\ + \n :if ([ :typeof \$Info ] != \"array\") do={\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Hostname\" \$Identity ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"location\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Location\" (\$Snmp->\"location\") ] . \"\\n\") ]\ + \_. \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"contact\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Contact\" (\$Snmp->\"contact\") ] . \"\\n\") ] .\ + \_\\\r\ + \n \"Hardware:\\n\" . \\\r\ + \n [ \$FormatLine \" Board\" (\$Info->\"board-name\") ] . \"\\n\" . \ + \\\r\ + \n [ \$FormatLine \" Arch\" (\$Info->\"architecture-name\") ] . \"\\\ + n\" . \\\r\ + \n [ \$FormatLine \" Model\" (\$Info->\"model\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"revision\") ] > 0) \\\r\ + \n (\" \" . (\$Info->\"revision\")) ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"serial-number\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Serial\" (\$Info->\"serial-number\") ] . \"\ + \\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"nlevel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"nlevel\ + \")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS:\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"level\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"level\ + \")) ] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \" Channel\" (\$Info->\"package-channel\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" Installed\" (\$Info->\"installed-version\") ] .\ + \_\"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"running-channel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Running\" ((\$Info->\"running-version\") . \ + \" (\" . (\$Info->\"running-channel\") . \")\") ] . \"\\n\") \\\r\ + \n ([ \$FormatLine \" Running\" (\$Info->\"running-version\") ] . \ + \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"latest-version\") ] > 0 && \\\r\ + \n (\$Info->\"installed-version\") != (\$Info->\"latest-version\"))\ + \_\\\r\ + \n ([ \$FormatLine \" Available\" (\$Info->\"latest-version\") ] .\ + \_\"\\n\") ] . \\\r\ + \n [ \$IfThenElse ((\$Info->\"routerboard\") = true && \\\r\ + \n (\$Info->\"current-firmware\") != (\$Info->\"upgrade-firmware\")\ + ) \\\r\ + \n ([ \$FormatLine \" Firmware\" ((\$Info->\"current-firmware\") .\ + \_\" -> \" . (\$Info->\"upgrade-firmware\")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS-Scripts:\\n\" . \\\r\ + \n [ \$FormatLine \" Commit\" [ \$CommitBrief ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \" Version\" \$GlobalConfVersion ]);\r\ + \n}\r\ + \n\r\ + \n:if ([ :typeof \$NotificationFunctions ] != \"array\") do={:set Notifica\ + tionFunctions ({})}\r\ + \n\r\ + \n:set GetRandom20CharAlNum do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndstr length=[ \$EitherOr [ :tonum \$1 ] 20 ] from=\"ABCDE\ + FGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\" ];\r\ + \n}\r\ + \n\r\ + \n:set GetRandom20CharHex do={:global EitherOr; :return [ :rndstr length=[\ + \_\$EitherOr [ :tonum \$1 ] 20 ] from=\"0123456789abcdef\" ]; }\r\ + \n:set GetRandomNumber do={:global EitherOr; :return [ :rndnum from=0 to=[\ + \_\$EitherOr [ :tonum \$1 ] 4294967295 ] ]; }\r\ + \n\r\ + \n:global checkRunJob;\r\ + \n:set checkRunJob do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLock; \r\ + \n :if ([ \$ScriptLock \$Script ] = false) do={:return false}\r\ + \n :foreach Job in=[ /system/script/job/find where script=\$Script ] do={\ + :set Job [ /system/script/job/get \$Job ];\r\ + \n :while ([ :typeof (\$Job->\"parent\") ] = \"id\") do={:set Job [ /sy\ + stem/script/job/get [ find where .id=(\$Job->\"parent\") ] ]}\r\ + \n :if ((\$Job->\"type\") = \"login\") do={:return true};}; :return fa\ + lse; \r\ + \n}\r\ + \n\r\ + \n:set InspectVar do={\r\ + \n :global InspectVarRet;\r\ + \n :put [ :tocrlf [ \$InspectVarRet \$1 ] ];\r\ + \n}\r\ + \n\r\ + \n:set CommitBrief do={\r\ + \n :global CommitId;\r\ + \n :global CommitInfo;\r\ + \n :if (\$CommitId = \"unknown\") do={\r\ + \n :return \"unknown\";\r\ + \n }\r\ + \n :return (\$CommitInfo . \"/\" . [ :pick \$CommitId 0 8 ]);\r\ + \n}\r\ + \n\r\ + \n:set InspectVarRet do={\r\ + \n :local Input \$1;\r\ + \n :local Level (0 + [ :tonum \$2 ]);\r\ + \n :global CharacterReplace;\r\ + \n :global IfThenElse;\r\ + \n :global InspectVarRet;\r\ + \n :local IndentReturn do={\r\ + \n :local Prefix [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Level [ :tonum \$3 ];\r\ + \n :global CharacterMultiply;\r\ + \n :return ([ \$CharacterMultiply \" \" (\$Level * 2) ] . \"-\" . \$Pre\ + fix . \"-> \" . \$Value);\r\ + \n }\r\ + \n :local TypeOf [ :typeof \$Input ];\r\ + \n :local Len [ :len \$Input ];\r\ + \n :local Return [ \$IndentReturn \"type\" \$TypeOf \$Level ];\r\ + \n :if (\$TypeOf = \"array\") do={\r\ + \n :foreach Key,Value in=\$Input do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"key\" \$Key (\$Level + 1) ] . \"\\n\" . \\\r\ + \n [ \$InspectVarRet \$Value (\$Level + 2) ]);\r\ + \n }\r\ + \n } else={\r\ + \n :if (\$TypeOf = \"str\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"len\" \$Len \$Level ]);\r\ + \n :if ([ :typeof [ :find \$Input (\"\\r\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\r\") \"\" ];\r\ + \n }\r\ + \n :if ([ :typeof [ :find \$Input (\"\\n\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\n\") \" \" ];\r\ + \n }\r\ + \n }\r\ + \n :if (\$TypeOf != \"nothing\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"value\" [ \$IfThenElse ([ :len \$Input ] > 80)\ + \_\\\r\ + \n ([ :pick \$Input 0 77 ] . \"...\") \$Input ] \$Level ]);\r\ + \n }\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set GetPubIp do={\r\ + \n :global DetectIpAddrDefault;\r\ + \n :global DetectIpAddrFallback;\r\ + \n\r\ + \n :local PubIpAddr false;\r\ + \n :local Url \$DetectIpAddrDefault;\r\ + \n :local JobName [ :jobname ];\r\ + \n\r\ + \n :do {\r\ + \n :log debug (\$0 . \" Trying to detect public IP using default serv\ + ice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=50ms max=5 on-error={:log error (\$JobName . \" Failed to \ + detect public IP using default service: \" . \$Url . \".\")}\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed to detect public IP using default serv\ + ice: \" . \$Url . \".\");\r\ + \n :set Url \$DetectIpAddrFallBack;\r\ + \n :log debug (\$0 . \" Trying to detect public IP using fallback ser\ + vice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=200ms max=5 on-error={:log error (\$JobName . \" Failed to\ + \_detect public IP using fallback service: \" . \$Url . \".\")}\r\ + \n };\r\ + \n :local IpLen ([ :len \$PubIpAddr ] -1);\r\ + \n :if (\$PubIpAddr = false) do={:set PubIpAddr \"not-detected\"} else=\ + {:set PubIpAddr [:pick \$PubIpAddr 0 \$IpLen]}\r\ + \n :return \$PubIpAddr;\r\ + \n}\r\ + \n\r\ + \n:set FormatLine do={\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Indent [ :tonum \$3 ];\r\ + \n :local Spaces;\r\ + \n :local Return \"\";\r\ + \n :global CharacterMultiply;\r\ + \n :global EitherOr;\r\ + \n :set Indent [ \$EitherOr \$Indent 16 ];\r\ + \n :local Spaces [ \$CharacterMultiply \" \" \$Indent ];\r\ + \n :if ([ :len \$Key ] > 0) do={ :set Return (\$Key . \":\")}\r\ + \n :if ([ :len \$Key ] > (\$Indent - 2)) do={:set Return (\$Return . \"\\\ + n\" . [ :pick \$Spaces 0 \$Indent ] . \$Value);\r\ + \n } else={:set Return (\$Return . [ :pick \$Spaces 0 (\$Indent - [ :len \ + \$Return ]) ] . \$Value)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ParseCustom do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Start [:find [ \$Str ] [:tostr \$2]];\r\ + \n :local End [ :tostr \$3 ];\r\ + \n :local Num [ :tonum \$4 ];\r\ + \n :local Return;\r\ + \n :if ([:len \$Num] = 0) do={:set Num \"0\"}\r\ + \n :local rest [:pick \$Str (\$Start+\$Num) [:len \$Str]]; \r\ + \n :if ([:len \$End ] = 0) do={:set Return [:pick \$Str \$Num \$Start]} e\ + lse={\r\ + \n :set End [:find \$rest \$End];\r\ + \n :set Return [:pick \$rest 0 \$End];\r\ + \n }\r\ + \n:return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set LogPrint do={\r\ + \n :local Severity [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Message [ :tostr \$3 ];\r\ + \n :global PrintDebug;\r\ + \n :global PrintDebugOverride;\r\ + \n :global EitherOr;\r\ + \n :local Debug [ \$EitherOr (\$PrintDebugOverride->\$Name) \$PrintDebug \ + ];\r\ + \n :local PrintSeverity do={\r\ + \n :global TerminalColorOutput;\r\ + \n :if (\$TerminalColorOutput != true) do={:return \$1}\r\ + \n :local Color { debug=96; info=97; warning=93; error=91 };\r\ + \n :return (\"\\1B[\" . \$Color->\$1 . \"m\" . \$1 . \"\\1B[0m\");\r\ + \n}\r\ + \n :local Log ([ \$EitherOr \$Name \"\" ] . \": \" . \$Message);\ + \r\ + \n :if (\$Severity ~ (\"^(custom|debug|error|info)\\\$\")) do={\r\ + \n :if (\$Severity = \"debug\") do={:log debug \$Log}\r\ + \n :if (\$Severity = \"error\") do={:log error \$Log}\r\ + \n :if (\$Severity = \"info\" ) do={:log info \$Log}\r\ + \n } else={:log warning \$Log; :set Severity \"warning\"}\r\ + \n :if (\$Severity != \"debug\" || \$Debug = true) do={:put ([ \$PrintSev\ + erity \$Severity ] . \": \" . \$Message)}\r\ + \n}\r\ + \n\r\ + \n:set CertificateAvailable do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :local UseFor [ :tostr \$2 ];\r\ + \n\r\ + \n :global CertificateDownload;\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :if ([ :len \$UseFor ] = 0) do={\r\ + \n :log warning (\$0 . \"The intended use is undefined!\");\r\ + \n :set UseFor \"undefined\";\r\ + \n }\r\ + \n :if ([ /system/resource/get free-hdd-space ] < 8388608 && \\\r\ + \n [ /certificate/settings/get crl-download ] = true && \\\r\ + \n [ /certificate/settings/get crl-store ] = \"system\") do={\r\ + \n :log warning (\$0 . \"This system has low free flash space but \" . \ + \\\r\ + \n \"is configured to download certificate CRLs to system!\");\r\ + \n }\r\ + \n :if ([ :len \$CommonName ] = 0) do={\r\ + \n :log warning (\$0 . \"No CommonName given!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \\\ + \r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \$UseFor || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CommonName\ + \_] ] > 0) do={\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n :log info (\$0 . \"Certificate with CommonName '\" . \$CommonName . \ + \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n :log info (\$0 . \"There are \" . \$CertCount . \" Certificates with\ + \_CommonName '\" . \$CommonName . \"'. Should be ok.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :local CertVal [ /certificate/get [ find where common-name=\$CommonNam\ + e ] ];\r\ + \n :while ((\$CertVal->\"akid\") != \"\" && (\$CertVal->\"akid\") != (\$C\ + ertVal->\"skid\")) do={\r\ + \n :if ([ :len [ /certificate/find where skid=(\$CertVal->\"akid\") ] ]\ + \_= 0) do={\r\ + \n :local IssuerCN ([ \$ParseKeyValueStore (\$CertVal->\"issuer\") ]-\ + >\"CN\");\r\ + \n :log info (\$0 . \"Certificate chain for '\" . \$CommonName . \"' \ + is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\"akid\ + \") ] ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateDownload do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :global ScriptUpdatesBaseUrl;\r\ + \n :global ScriptUpdatesUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :log info (\$0 . \"Downloading and importing certificate with \" . \\\ + \r\ + \n \"CommonName '\" . \$CommonName . \"'.\");\r\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\r\ + \n :do {\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-header\ + -field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n (\$ScriptUpdatesBaseUrl . \"certs/\" . \$FileName . \$ScriptUpdate\ + sUrlSuffix) \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n } on-error={\r\ + \n :log warning (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \\\r\ + \n \"' from repository! Trying fallback to mkcert.org...\");\r\ + \n :do {\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0 && \\\r\ + \n !(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" \ + || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \ + \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\ + \r\ + \n [ :len [ /certificate/builtin/find where common-name=\"ISRG\ + \_Root X1\" ] ] > 0)) do={\r\ + \n :log error (\$0 . \" Required certificate is not available.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-head\ + er-field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n url=\"https://mkcert.org/generate/\" http-data=[ :serialize to=jso\ + n ({ \$CommonName }) ] \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n :if ([ /file/get \$FileName size ] = 0) do={\r\ + \n \$RmFile \$FileName;\r\ + \n :error false;\r\ + \n }\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n :log warning (\$0 . \" Certificate with CommonName '\" . \$CommonNam\ + e . \"' still unavailable!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateNameByCN do={\r\ + \n :local Match [ :tostr \$1 ];\r\ + \n :global CleanName;\r\ + \n :local Cert ([ /certificate/find where (common-name=\$Match or fingerp\ + rint=\$Match or name=\$Match) ]->0);\r\ + \n :if ([ :len \$Cert ] = 0) do={\r\ + \n :log warning (\$0 .\" No matching certificate found.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CommonName [ /certificate/get \$Cert common-name ];\r\ + \n /certificate/set \$Cert name=[ \$CleanName \$CommonName ];\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FileExists do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local Type [ :tostr \$2 ];\r\ + \n :global FileGet;\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={ :return false; }\r\ + \n :if ([ :len (\$FileVal->\"size\") ] = 0) do={ :return false; }\r\ + \n :if ([ :len \$Type ] = 0 || \$FileVal->\"type\" = \$Type) do={ :return\ + \_true; }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set Grep do={\r\ + \n :local Input ([ :tostr \$1 ] . \"\\n\");\r\ + \n :local Pattern [ :tostr \$2 ];\r\ + \n :if ([ :typeof [ :find \$Input \$Pattern ] ] = \"nil\") do={:return []\ + }\r\ + \n :do {\r\ + \n :local Line [ :pick \$Input 0 [ :find \$Input \"\\n\" ] ];\r\ + \n :if ([ :typeof [ :find \$Line \$Pattern ] ] = \"num\") do={:return \ + \$Line}\r\ + \n :set Input [ :pick \$Input ([ :find \$Input \"\\n\" ] + 1) [ :len \$\ + Input ] ];\r\ + \n } while=([ :len \$Input ] > 0);\r\ + \n :return [];\r\ + \n}\r\ + \n\r\ + \n:set HumanReadableNum do={\r\ + \n :local Input [ :tonum \$1 ];\r\ + \n :local Base [ :tonum \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global IfThenElse;\r\ + \n :local Prefix \"kMGTPE\";\r\ + \n :local Pow 1;\r\ + \n :set Base [ \$EitherOr \$Base 1024 ];\r\ + \n :local Bin [ \$IfThenElse (\$Base = 1024) \"i\" \"\" ];\r\ + \n :if (\$Input < \$Base) do={:return \$Input}\r\ + \n :for I from=0 to=[ :len \$Prefix ] do={\r\ + \n :set Pow (\$Pow * \$Base);\r\ + \n :if (\$Input / \$Base < \$Pow) do={\r\ + \n :set Prefix [ :pick \$Prefix \$I ];\r\ + \n :local Tmp1 (\$Input * 100 / \$Pow);\r\ + \n :local Tmp2 (\$Tmp1 / 100);\r\ + \n :if (\$Tmp2 >= 100) do={:return (\$Tmp2 . \$Prefix . \$Bin)}\r\ + \n :return (\$Tmp2 . \".\" . \\\r\ + \n [ :pick \$Tmp1 [ :len \$Tmp2 ] ([ :len \$Tmp1 ] - [ :len \$Tmp\ + 2 ] + 1) ] . \\\r\ + \n \$Prefix . \$Bin);\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set CleanFilePath do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CharacterReplace;\r\ + \n :while (\$Path ~ \"//\") do={ :set \$Path [ \$CharacterReplace \$Path \ + \"//\" \"/\" ]; }\r\ + \n :if ([ :pick \$Path 0 ] = \"/\") do={ :set Path [ :pick \$Path 1 [ :le\ + n \$Path ] ]; }\r\ + \n :if ([ :pick \$Path ([ :len \$Path ] - 1) ] = \"/\") do={ :set Path [ \ + :pick \$Path 0 ([ :len \$Path ] - 1) ]; }\r\ + \n :return \$Path;\r\ + \n}\r\ + \n\r\ + \n:set CleanName do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :typeof [ find \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr\ + stuvwxyz0123456789\" \$Char ] ] = \"nil\") do={\r\ + \n :do {:if ([ :len \$Return ] = 0) do={:error true};\r\ + \n :if ([ :pick \$Return ([ :len \$Return ] - 1) ] = \"-\") do={:er\ + ror true}; :set Char \"-\"} on-error={:set Char \"\"}; \r\ + \n };\r\ + \n :set Return (\$Return . \$Char)};\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set RandomDelay do={\r\ + \n :local Time [ :tonum \$1 ];\r\ + \n :local Unit [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global GetRandomNumber;\r\ + \n :global MAX;\r\ + \n :if (\$Time = 0) do={:return false}\r\ + \n :delay ([ \$MAX 10 [ \$GetRandomNumber ([ :tonsec [ :totime (\$Time . \ + [ \$EitherOr \$Unit \"s\" ]) ] ] / 1000000) ] ] . \"ms\");\r\ + \n}\r\ + \n\r\ + \n:set EscapeForRegEx do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"^.[]\\\$()|*+\?{}\\\\\");\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :find \$Chars \$Char ]) do={:set Char (\"\\\\\" . \$Char)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :if (\$ExitOK = \"false\") do={\r\ + \n :log error (\$Name [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\\\$\") \ + \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set ExitOnError do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :local Error [ :tostr \$2 ];\r\ + \n :global IfThenElse;\r\ + \n :log error (\$Name . \" \" . [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\ + \\\$\") \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with erro\ + r\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \$E\ + rror) \".\" ]);\r\ + \n}\r\ + \n\r\ + \n:set MiniDateTimeStamp do={\r\ + \n :local mikro [ :tobool \$1 ];\r\ + \n /system/clock;\r\ + \n :local vdate [get date];\r\ + \n :local vtime [get time];\r\ + \n :local vdoff [:toarray \"0,4,5,7,8,10\"];\r\ + \n :local MM [:pick \$vdate (\$vdoff->2) (\$vdoff->3)];\r\ + \n :local M [:tonum \$MM];\r\ + \n :if (\$vdate ~ \".../../....\") do={\r\ + \n :set vdoff [:toarray \"7,11,1,3,4,6\"];\r\ + \n :set M ([:find \"xxanebarprayunulugepctovecANEBARPRAYUNULUGE\ + PCTOVEC\" [:pick \$vdate (\$vdoff->2) (\$vdoff->3)] -1] / 2);\r\ + \n :if (\$M>12) do={:set M (\$M - 12)}\r\ + \n :set MM [:pick (100 + \$M) 1 3];\r\ + \n }\r\ + \n :local yyyy [:pick \$vdate (\$vdoff->0) (\$vdoff->1)];\r\ + \n :local dd [:pick \$vdate (\$vdoff->4) (\$vdoff->5)];\r\ + \n :local HH [:pick \$vtime 0 2];\r\ + \n :local mm [:pick \$vtime 3 5];\r\ + \n :local ss [:pick \$vtime 6 8];\r\ + \n :local Return;\r\ + \n :if (\$mikro = true) do={\r\ + \n :set Return ([:pick \$yyyy 2 4] . [:pick \$dd 0 1] . [:pick \$HH 0\ + \_1] . [:pick \$mm 3 4] . [:pick \$ss 6 7]);\r\ + \n } else={\r\ + \n :set Return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\ + \r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set WaitForFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local WaitTime [ :totime \$2 ];\r\ + \n :global CleanFilePath;\r\ + \n :global EitherOr;\r\ + \n :global MAX;\r\ + \n :set FileName [ \$CleanFilePath \$FileName ];\r\ + \n :local Delay ([ \$MAX [ \$EitherOr \$WaitTime 2s ] 100ms ] / 9);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } delay=\$Delay max=10;\r\ + \n } on-error={ }\r\ + \n :while ([ :len [ /file/find where name=\$FileName ] ] > 0) do={\r\ + \n :do {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } on-error={ }\r\ + \n :delay \$Delay;\r\ + \n :set Delay (\$Delay * 3 / 2);\r\ + \n }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set FileGet do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global WaitForFile;\r\ + \n :if ([ \$WaitForFile \$FileName 0s ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileVal false;\r\ + \n :do {\r\ + \n :set FileVal [ /file/get \$FileName ];\r\ + \n } on-error={ }\r\ + \n :return \$FileVal;\r\ + \n}\r\ + \n\r\ + \n:set RmDir do={\r\ + \n :local DirName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n };\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\r\ + \n :log error (\$0 . \" Directory '\" . \$DirName . \"' is not a direct\ + ory.\");\r\ + \n :return false;\r\ + \n };\r\ + \n :onerror Err {\r\ + \n /file/remove \$DirName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing directory '\" . \$DirName . \"' failed\ + : \" . \$Err);\r\ + \n :return false;\r\ + \n };\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set RmFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n :log error (\$0 . \" File '\" . \$FileName . \"' is not a file.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing file '\" . \$FileName . \"' failed: \"\ + \_. \$Err); :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MkDir do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CleanFilePath;\r\ + \n :global FileGet;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :local MkTmpfs do={\r\ + \n :global WaitForFile;\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\$0 . \" The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\$0 . \" Creating disk of type tmpfs.\");\r\ + \n \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource\ + /get total-memory ] / 3);\r\ + \n \$WaitForFile \"tmpfs\";\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Creating disk of type tmpfs failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :set Path [ \$CleanFilePath \$Path ];\r\ + \n :if (\$Path = \"\") do={\r\ + \n :return true;\r\ + \n }\r\ + \n :log debug (\$0 . \" Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n :log debug (\$0 . \" ... which already exists.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :pick \$Path 0 5 ] = \"tmpfs\") do={\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=\$Path;\r\ + \n \$WaitForFile \$Path;\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Making directory '\" . \$Path . \"' failed: \ + \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MAX do={:if (\$1 > \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n:set MIN do={:if (\$1 < \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set CharacterReplace do={\r\ + \n :local String [ :tostr \$1 ];\r\ + \n :local ReplaceFrom [ :tostr \$2 ];\r\ + \n :local ReplaceWith [ :tostr \$3 ];\r\ + \n :local Return \"\";\r\ + \n :if (\$ReplaceFrom = \"\") do={:return \$String}\r\ + \n :while ([ :typeof [ :find \$String \$ReplaceFrom ] ] != \"nil\") do={\ + \r\ + \n :local Pos [ :find \$String \$ReplaceFrom ];\r\ + \n :set Return (\$Return . [ :pick \$String 0 \$Pos ] . \$ReplaceWith);\ + \r\ + \n :set String [ :pick \$String (\$Pos + [ :len \$ReplaceFrom ]) [ :len\ + \_\$String ] ];\r\ + \n }\r\ + \n :return (\$Return . \$String);\r\ + \n}\r\ + \n\r\ + \n:set IfThenElse do={\r\ + \n :if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] = true) do={:return \ + \$2};\r\ + \n :return \$3;\r\ + \n}\r\ + \n\r\ + \n:set EitherOr do={\r\ + \n :global IfThenElse;\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:return [ \$IfThenElse (\$1 != 0) \ + \$1 \$2 ]}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:return [ \$IfThenElse (\$1 > 0s)\ + \_\$1 \$2 ]}\r\ + \n# this works for boolean values, literal ones with parentheses\r\ + \n :return [ \$IfThenElse ([ :len [ :tostr \$1 ] ] > 0) \$1 \$2 ];\r\ + \n}\r\ + \n\r\ + \n:set ParseKeyValueStore do={\r\ + \n :local Source \$1;\r\ + \n :if ([ :pick \$Source 0 1 ] = \"{\") do={\r\ + \n :do {\r\ + \n :return [ :deserialize from=json \$Source ];\r\ + \n } on-error={ }\r\ + \n } \r\ + \n :if ([ :typeof \$Source ] != \"array\") do={:set Source [ :tostr \$1 ]\ + }\r\ + \n :local Result ({});\r\ + \n :foreach KeyValue in=[ :toarray \$Source ] do={\r\ + \n :if ([ :find \$KeyValue \"=\" ]) do={\r\ + \n :local Key [ :pick \$KeyValue 0 [ :find \$KeyValue \"=\" ] ];\r\ + \n :local Value [ :pick \$KeyValue ([ :find \$KeyValue \"=\" ] + 1) [\ + \_:len \$KeyValue ] ];\r\ + \n :if (\$Value=\"true\") do={:set Value true}\r\ + \n :if (\$Value=\"false\") do={:set Value false}\r\ + \n :set (\$Result->\$Key) \$Value;\r\ + \n } else={:set (\$Result->\$KeyValue) true}\r\ + \n }\r\ + \n :return \$Result;\r\ + \n}\r\ + \n:set RequiredRouterOS do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :local Required [ :tostr \$2 ];\r\ + \n :local Warn [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :global VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n :log error (\$0 . \" No valid RouterOS version: \" . \$Required);\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$VersionToNum \$Required ] > [ \$VersionToNum [ /system/packag\ + e/update/get installed-version ] ]) do={\r\ + \n :if (\$Warn = \"true\") do={\r\ + \n :log warning (\$0 . \" This \" . [ \$IfThenElse ([ :pick \$Caller \ + 0 ] = (\"\\\$\")) \"function\" \"script\" ] . \\\r\ + \n \" '\" . \$Caller . \"' (at least specific functionality) requir\ + es RouterOS \" . \$Required . \". Please update!\");\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set ValidateSyntax do={\r\ + \n :local Code [ :tostr \$1 ];\r\ + \n :global LogPrint;\r\ + \n :onerror Err {\r\ + \n [ :parse (\":local Validate do={\\n\" . \$Code . \"\\n}\") ];\r\ + \n } do={\r\ + \n \$LogPrint debug \$0 (\"Valdation failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set VersionToNum do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Multi 0x1000000;\r\ + \n :local Return 0;\r\ + \n :global CharacterReplace;\r\ + \n :set Input [ \$CharacterReplace \$Input \".\" \",\" ];\r\ + \n :foreach I in={ \"zero\"; \"alpha\"; \"beta\"; \"rc\" } do={\r\ + \n :set Input [ \$CharacterReplace \$Input \$I (\",\" . \$I . \",\") ];\ + \r\ + \n }\r\ + \n :foreach Value in=([ :toarray \$Input ], 0) do={\r\ + \n :local Num [ :tonum \$Value ];\r\ + \n :if (\$Multi = 0x100) do={\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={\r\ + \n :set Return (\$Return + 0xff00);\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n } else={\r\ + \n :if (\$Value = \"zero\") do={ }\r\ + \n :if (\$Value = \"alpha\") do={ :set Return (\$Return + 0x3f00); \ + }\r\ + \n :if (\$Value = \"beta\") do={ :set Return (\$Return + 0x5f00); }\ + \r\ + \n :if (\$Value = \"rc\") do={ :set Return (\$Return + 0x7f00); }\r\ + \n }\r\ + \n }\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={ :set Return (\$Return + (\$Va\ + lue * \$Multi)); }\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ScriptLock do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local WaitMax [ :totime \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global ScriptLockOrder;\r\ + \n :if ([ :typeof \$ScriptLockOrder ] = \"nothing\") do={\r\ + \n :set ScriptLockOrder ({});\r\ + \n }\r\ + \n :if ([ :typeof (\$ScriptLockOrder->\$Script) ] = \"nothing\") do={\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :local JobCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :return [ :len [ /system/script/job/find where script=\$Script ] ];\ + \r\ + \n }\r\ + \n :local TicketCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :local Count 0;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:set Count (\$Count \ + + 1)}\r\ + \n }\r\ + \n :return \$Count;\r\ + \n }\r\ + \n :local IsFirstTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Check [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if (\$Ticket = \$Check) do={:return true}\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\" && \$Ticket != \$Check) d\ + o={:return false}\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :local AddTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Add [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :while (true) do={\r\ + \n :local Pos [ :len (\$ScriptLockOrder->\$Script) ];\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Pos) \$Add;\r\ + \n :delay 10ms;\r\ + \n :if ((\$ScriptLockOrder->\$Script->\$Pos) = \$Add) do={:return tru\ + e}\r\ + \n }\r\ + \n }\r\ + \n :local RemoveTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Remove [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Id,Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :while ((\$ScriptLockOrder->\$Script->\$Id) = \$Remove) do={\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Id);\r\ + \n :delay 10ms;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :local CleanupTickets do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:return false}\r\ + \n }\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :if ([ :typeof \$WaitMax ] = \"nil\" ) do={:set WaitMax 0s}\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\r\ + \n :log error (\$0 . \" A script named '\" . \$Script . \"' does not ex\ + ist!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$JobCount \$Script ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"No script '\" . \$Script . \"' is running!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$TicketCount \$Script ] >= [ \$JobCount \$Script ]) do={\r\ + \n :log error (\$0 . \" More tickets than running scripts '\" . \$Scrip\ + t . \"', resetting!\");\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n /system/script/job/remove [ find where script=\$Script ];\r\ + \n }\r\ + \n :local MyTicket [ \$GetRandom20CharAlNum 6 ];\r\ + \n \$AddTicket \$Script \$MyTicket;\r\ + \n :local WaitInterval (\$WaitMax / 20);\r\ + \n :local WaitTime \$WaitMax;\r\ + \n :while (\$WaitTime > 0 && \\\r\ + \n ([ \$IsFirstTicket \$Script \$MyTicket ] = false || \\\r\ + \n [ \$TicketCount \$Script ] < [ \$JobCount \$Script ])) do={\r\ + \n :set WaitTime (\$WaitTime - \$WaitInterval);\r\ + \n :delay \$WaitInterval;\r\ + \n }\r\ + \n :if ([ \$IsFirstTicket \$Script \$MyTicket ] = true && \\\r\ + \n [ \$TicketCount \$Script ] = [ \$JobCount \$Script ]) do={\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$CleanupTickets \$Script;\r\ + \n :return true;\r\ + \n }\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$LogPrint debug \$0 (\"Script '\" . \$Script . \"' started more than \ + once\" . \\\r\ + \n [ \$IfThenElse (\$WaitTime < \$WaitMax) \" and timed out waiting for\ + \_lock\" \"\" ] . \"...\");\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set SendNotification do={ :onerror Err {\r\ + \n :global SendNotification2;\r\ + \n \$SendNotification2 ({ origin=\$0; subject=\$1; message=\$2; link=\$3;\ + \_silent=\$4 });\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n\r\ + \n:set SendNotification2 do={\r\ + \n :local Notification \$1;\r\ + \n :global NotificationFunctions;\r\ + \n :foreach FunctionName,Discard in=\$NotificationFunctions do={\r\ + \n (\$NotificationFunctions->\$FunctionName) (\"\\\$NotificationFunctio\ + ns->\\\"\" . \$FunctionName . \"\\\"\") \$Notification;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\r\ + \n :global SymbolsExtra;\r\ + \n :local Symbols ({\r\ + \n \"abacus\"=\"\\F0\\9F\\A7\\AE\";\r\ + \n \"alarm-clock\"=\"\\E2\\8F\\B0\";\r\ + \n \"arrow-down\"=\"\\E2\\AC\\87\";\r\ + \n \"arrow-up\"=\"\\E2\\AC\\86\";\r\ + \n \"calendar\"=\"\\F0\\9F\\93\\85\";\r\ + \n \"card-file-box\"=\"\\F0\\9F\\97\\83\";\r\ + \n \"chart-decreasing\"=\"\\F0\\9F\\93\\89\";\r\ + \n \"chart-increasing\"=\"\\F0\\9F\\93\\88\";\r\ + \n \"cloud\"=\"\\E2\\98\\81\";\r\ + \n \"cross-mark\"=\"\\E2\\9D\\8C\";\r\ + \n \"earth\"=\"\\F0\\9F\\8C\\8D\";\r\ + \n \"fire\"=\"\\F0\\9F\\94\\A5\";\r\ + \n \"floppy-disk\"=\"\\F0\\9F\\92\\BE\";\r\ + \n \"gear\"=\"\\E2\\9A\\99\";\r\ + \n \"heart\"=\"\\E2\\99\\A5\";\r\ + \n \"high-voltage-sign\"=\"\\E2\\9A\\A1\";\r\ + \n \"incoming-envelope\"=\"\\F0\\9F\\93\\A8\";\r\ + \n \"information\"=\"\\E2\\84\\B9\";\r\ + \n \"large-orange-circle\"=\"\\F0\\9F\\9F\\A0\";\r\ + \n \"large-red-circle\"=\"\\F0\\9F\\94\\B4\";\r\ + \n \"link\"=\"\\F0\\9F\\94\\97\";\r\ + \n \"lock-with-ink-pen\"=\"\\F0\\9F\\94\\8F\";\r\ + \n \"memo\"=\"\\F0\\9F\\93\\9D\";\r\ + \n \"mobile-phone\"=\"\\F0\\9F\\93\\B1\";\r\ + \n \"pushpin\"=\"\\F0\\9F\\93\\8C\";\r\ + \n \"scissors\"=\"\\E2\\9C\\82\";\r\ + \n \"scroll\"=\"\\F0\\9F\\93\\9C\";\r\ + \n \"smiley-partying-face\"=\"\\F0\\9F\\A5\\B3\";\r\ + \n \"smiley-smiling-face\"=\"\\E2\\98\\BA\";\r\ + \n \"smiley-winking-face-with-tongue\"=\"\\F0\\9F\\98\\9C\";\r\ + \n \"sparkles\"=\"\\E2\\9C\\A8\";\r\ + \n \"speech-balloon\"=\"\\F0\\9F\\92\\AC\";\r\ + \n \"star\"=\"\\E2\\AD\\90\";\r\ + \n \"warning-sign\"=\"\\E2\\9A\\A0\";\r\ + \n \"white-heavy-check-mark\"=\"\\E2\\9C\\85\"\r\ + \n }, \$SymbolsExtra);\r\ + \n :local Magic [ :pick [ /system/clock/get date ] 4 10 ];\r\ + \n :local Special {\r\ + \n \"information-04-01\"=\"\\F0\\9F\\9A\\BB\";\r\ + \n \"large-orange-circle-04-01\"=\"\\F0\\9F\\8D\\8A\";\r\ + \n \"large-orange-circle-10-31\"=\"\\F0\\9F\\8E\\83\";\r\ + \n \"large-red-circle-04-01\"=\"\\F0\\9F\\8D\\92\" };\r\ + \n :if ([ :len (\$Symbols->\$Name) ] = 0) do={\r\ + \n :log warning (\$0 . \"No symbol available for name '\" . \$Name . \"\ + '!\");\r\ + \n :return \"\";\r\ + \n }\r\ + \n :return ([ \$EitherOr (\$Special->(\$Name . \$Magic)) (\$Symbols->\$Na\ + me) ] . \"\\EF\\B8\\8F\");\r\ + \n}\r\ + \n\r\ + \n:set SymbolForNotification do={\r\ + \n :global NotificationsWithSymbols;\r\ + \n :global SymbolByUnicodeName;\r\ + \n :global IfThenElse;\r\ + \n :if (\$NotificationsWithSymbols != true) do={:return [ \$IfThenElse ([\ + \_:len \$2 ] > 0) ([ :tostr \$2 ] . \" \") \"\" ]}\r\ + \n :local Return \"\";\r\ + \n :foreach Symbol in=[ :toarray \$1 ] do={:set Return (\$Return . [ \$Sy\ + mbolByUnicodeName \$Symbol ])}\r\ + \n :return (\$Return . \" \");\r\ + \n}\r\ + \n\r\ + \n:set Unix2Dos do={:return [ :tocrlf [ :tostr \$1 ] ]}\r\ + \n:set UrlEncode do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"\\n\\r !\\\"#\\\$%&'()*+,:;<=>\?@[\\\\]^`{|}~\");\r\ + \n :local Subs { \"%0A\"; \"%0D\"; \"%20\"; \"%21\"; \"%22\"; \"%23\"; \"\ + %24\"; \"%25\"; \"%26\"; \"%27\";\r\ + \n \"%28\"; \"%29\"; \"%2A\"; \"%2B\"; \"%2C\"; \"%3A\"; \"%3B\"; \ + \"%3C\"; \"%3D\"; \"%3E\"; \"%3F\";\r\ + \n \"%40\"; \"%5B\"; \"%5C\"; \"%5D\"; \"%5E\"; \"%60\"; \"%7B\"; \ + \"%7C\"; \"%7D\"; \"%7E\" };\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :local Replace [ :find \$Chars \$Char ];\r\ + \n :if ([ :typeof \$Replace ] = \"num\") do={:set Char (\$Subs->\$Repla\ + ce)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsFullyConnected do={\r\ + \n :global IsDNSResolving;\r\ + \n :global IsTimeSync;\r\ + \n :if ([ \$IsDNSResolving ] = false) do={:return false};\r\ + \n :if ([ \$IsTimeSync ] = false) do={:return false};\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsTimeSync do={\r\ + \n :global IsTimeSyncCached;\r\ + \n :global IsTimeSyncResetNtp;\r\ + \n :if (\$IsTimeSyncCached = true) do={:return true}\r\ + \n :if ([ /system/ntp/client/get enabled ] = true) do={\r\ + \n :if ([ /system/ntp/client/get status ] = \"synchronized\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :local Uptime [ /system/resource/get uptime ];\r\ + \n :if ([ :typeof \$IsTimeSyncResetNtp ] = \"nothing\") do={\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n }\r\ + \n :if (\$Uptime - \$IsTimeSyncResetNtp < 3m) do={:return false}\r\ + \n :log warning \"\$0 The ntp client is configured, but did not sync.\"\ + ;\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n /system/ntp/client/set enabled=no;\r\ + \n :delay 20ms;\r\ + \n /system/ntp/client/set enabled=yes;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ /system/license/get ]->\"level\" = \"free\" || \\\r\ + \n [ /system/resource/get ]->\"board-name\" = \"x86\") do={\r\ + \n :log debug \"\$0 No ntp client configured, relying on RTC for CHR fr\ + ee license and x86.\";\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ /ip/cloud/get update-time ] = true) do={\r\ + \n :if ([ :typeof [ /ip/cloud/get public-address ] ] = \"ip\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :log debug \"\$0 No time source configured! Returning gracefully...\";\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n# read parts of a large file\r\ + \n# Description of parameters:\r\ + \n# \$1 - script name for logging and user agent\r\ + \n# \$2 - url to fetch from\r\ + \n# \$3 - check-certificate value for /tool/fetch (true/false)\r\ + \n# \$4 - mode value for /tool/fetch (optional, e.g. \"keep-broken\", \"ht\ + tps-only\", \"http-only\"\r\ + \n# \"no-redirects\", \"background\", \"background-and-keep-broken\",\ + \_\"background-and-https-only\",\r\ + \n# \"background-and-http-only\", \"background-and-no-redirects\", \"\ + background-and-keep-broken-and-https-only\", \"background-and-keep-broken-\ + and-http-only\",\r\ + \n# \"background-and-keep-broken-and-no-redirects\")\r\ + \n# \$5 - fetch method for /tool/fetch (optional, e.g. \"get\", \"head\", \ + \"post\", \"put\", \"patch\", \"delete\")\r\ + \n#:set FetchLargeFiles do={\r\ + \n# :local RunName [:tostr \$1];\r\ + \n# :local fetchUrl [:tostr \$2];\r\ + \n# :local fetchFile [:tostr \$3];\r\ + \n# :local CheckCert [:tostr \$4];\r\ + \n# :local fetchMode [:tostr \$5];\r\ + \n# :local fetchMethod [:tostr \$6];\r\ + \n# :local tmpName;\r\ + \n# :global CleanName;\r\ + \n# :global FetchUserAgentStr;\r\ + \n# :global GetRandom20CharAlNum;\r\ + \n# :global IfThenElse;\r\ + \n# :global LogPrint;\r\ + \n# :global MkDir;\r\ + \n# :global RmDir;\r\ + \n# :global RmFile;\r\ + \n# :global WaitForFile;\r\ + \n#\r\ + \n# :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-\ + without-crl\" ];\r\ + \n#\r\ + \n# :set tmpName (\$CleanName \"tmp-\" . [ \$GetRandom20CharAlNum 6 ]);\r\ + \n# :local DirName (\"tmpfs/\" . \$tmpName);\r\ + \n# :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n# :log error (\$RunName . \" Failed creating directory: \" . \$DirNam\ + e . \"!\");\r\ + \n# :return false;\r\ + \n# }\r\ + \n#\r\ + \n# :local FileName (\$DirName . \"/\" . [ \$CleanName \$fetchFile ] . \"\ + -\" . [ \$GetRandom20CharAlNum 5 ]);\r\ + \n# :local Url (\$fetchUrl . \$fetchFile);\r\ + \n# :onerror Err {\r\ + \n# /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName\ + \_\\\r\ + \n# http-header-field=({ [ \$FetchUserAgentStr \$RunName ] }) as-valu\ + e;\r\ + \n# } do={\r\ + \n# :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n# \$RmFile \$FileName;\r\ + \n# }\r\ + \n# :log error (\$RunName . \" Failed downloading from '\" . \$Url . \"\ + ' - \" . \$Err);\r\ + \n# \$RmDir \$DirName;\r\ + \n# :return false;\r\ + \n# }\r\ + \n#\r\ + \n# :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n# :log error (\$RunName . \" The file downloaded from '\" . \$Url . \ + \"' did not show up.\");\r\ + \n# :return false;\r\ + \n# }\r\ + \n# \r\ + \n# :local FileSize [ /file/get \$FileName size ];\r\ + \n# :local Return \"\";\r\ + \n# :local VarSize 0;\r\ + \n# :while (\$VarSize != \$FileSize) do={\r\ + \n# :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=3\ + 2768 file=\$FileName as-value ]->\"data\"));\r\ + \n# :set FileSize [ /file/get \$FileName size ];\r\ + \n# :set VarSize [ :len \$Return ];\r\ + \n# :if (\$VarSize > \$FileSize) do={\r\ + \n# :delay 100ms;\r\ + \n# }\r\ + \n# }\r\ + \n## \$RmFile \$FileName;\r\ + \n# \$RmDir \$DirName;\r\ + \n# :return \$Return;\r\ + \n#}\r\ + \n\r\ + \n:set FetchHugeFiles do={\r\ + \n :local ScriptName [ :tostr \$1 ];\r\ + \n :local Url [ :tostr \$2 ];\r\ + \n :local CheckCert [ :tostr \$3 ];\r\ + \n\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-w\ + ithout-crl\" ];\r\ + \n\r\ + \n :local DirName (\"tmpfs/\" . [ \$CleanName \$ScriptName ]);\r\ + \n :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n \$LogPrint error \$0 (\"Failed creating directory!\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName \ + \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue;\r\ + \n } do={\r\ + \n :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n \$RmFile \$FileName;\r\ + \n }\r\ + \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$Url . \" - \"\ + \_. \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$Url . \" did\ + \_not show up.\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileSize [ /file/get \$FileName size ];\r\ + \n :local Return \"\";\r\ + \n :local VarSize 0;\r\ + \n :while (\$VarSize != \$FileSize) do={\r\ + \n :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=32\ + 768 file=\$FileName as-value ]->\"data\"));\r\ + \n :set FileSize [ /file/get \$FileName size ];\r\ + \n :set VarSize [ :len \$Return ];\r\ + \n :if (\$VarSize > \$FileSize) do={\r\ + \n :delay 100ms;\r\ + \n }\r\ + \n }\r\ + \n \$RmDir \$DirName;\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global CommitBrief;\r\ + \n :global IfThenElse;\r\ + \n :local Resource [ /system/resource/get ];\r\ + \n :return (\"User-Agent: Mikrotik/\" . \$Resource->\"version\" . \" \" .\ + \_\$Resource->\"architecture-name\" . \\\r\ + \n \" \" . \$Caller . \"/Fetch (\" . \$GlobalScriptsUrl . \"; \" . [ \$\ + CommitBrief ] . \")\");\r\ + \n}\r\ + \n\r\ + \n:set ScriptInstallUpdate do={ :onerror Err {\r\ + \n :local Scripts [ :toarray \$1 ];\r\ + \n :local NewComment [ :tostr \$2 ];\r\ + \n :global InitSetup;\r\ + \n\r\ + \n :global CommitId;\r\ + \n :global ScriptUpdatesCRLF;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global CertificateAvailable;\r\ + \n :global CheckSumsVerify;\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SumsDirAndFileName;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global EitherOr;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global Grep;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global RequiredRouterOS;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global ValidateSyntax;\r\ + \n :global CommentsInScripts;\r\ + \n\r\ + \n :if ([ \$CertificateAvailable \"Root YE\" \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, trying wit\ + hout.\");\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=\$Scripts do={\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \r\ + \n \$LogPrint info \$0 (\"Adding new script: \" . \$Script);\r\ + \n /system/script/add name=\$Script owner=\$Script source=\"#!rsc by \ + Vados\\n\" comment=\$NewComment;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local CommitIdBefore \$CommitId;\r\ + \n :local GlobalConfVersionBefore \$GlobalConfVersion;\r\ + \n :local ReloadGlobal false;\r\ + \n :local DeviceMode [ /system/device-mode/get ];\r\ + \n\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSums ({});\r\ + \n :do {\r\ + \n :local Url (\$GlobalScriptsUrl . \$SumsDirAndFileName . \$GlobalScr\ + iptsUrlSuffix);\r\ + \n \$LogPrint debug \$0 (\"Fetching checksums from url: \" . \$Url);\ + \r\ + \n :set CheckSums [ :deserialize from=json ([ /tool/fetch check-certi\ + ficate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url output\ + =user as-value ]->\"data\") ];\r\ + \n } on-error={ \$LogPrint warning \$0 (\"Err = \" . \$Err); }\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vado\ + s\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :local ScriptInfo [ \$ParseKeyValueStore (\$ScriptVal->\"comment\") \ + ];\r\ + \n :local SourceNew;\r\ + \n\r\ + \n :foreach Scheduler in=[ /system/scheduler/find where on-event~(\"\\\ + \\b\" . \$ScriptVal->\"name\" . \"\\\\b\") ] do={\r\ + \n :local SchedulerVal [ /system/scheduler/get \$Scheduler ];\r\ + \n :if (\$ScriptVal->\"policy\" != \$SchedulerVal->\"policy\") do={\r\ + \n \$LogPrint warning \$0 (\"Policies differ for script '\" . \$Scr\ + iptVal->\"name\" . \"' and its scheduler '\" . \$SchedulerVal->\"name\" . \ + \"'!\");\r\ + \n }\r\ + \n }\r\ + \n :do {\r\ + \n :if (\$ScriptInfo->\"ignore\" = true) do={\r\ + \n \$LogPrint debug \$0 (\"Ignoring script '\" . \$ScriptVal->\"nam\ + e\" . \"', as requested.\");\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSum (\$CheckSums->(\$ScriptVal->\"name\"));\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Scri\ + ptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :convert transform=md5 to=hex [ :tolf (\$ScriptVal->\"sou\ + rce\") ] ] = \$CheckSum) do={\r\ + \n \$LogPrint debug \$0 (\"Checksum for script '\" . \$ScriptVal-\ + >\"name\" . \"' matches, ignoring.\");\r\ + \n :error true;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len (\$ScriptInfo->\"certificate\") ] > 0) do={\r\ + \n :if ([ \$CertificateAvailable (\$ScriptInfo->\"certificate\") \"\ + fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, tryi\ + ng without.\");\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n :local BaseUrl [ \$EitherOr (\$ScriptInfo->\"base-url\") \$Globa\ + lScriptsUrl ];\r\ + \n :local UrlSuffix [ \$EitherOr (\$ScriptInfo->\"url-suffix\") \$G\ + lobalScriptsUrlSuffix ];\r\ + \n :local Url (\$BaseUrl . \$ScriptVal->\"name\" . \".rsc\" . \$Url\ + Suffix);\r\ + \n \$LogPrint warning \$0 (\"Fetching script '\" . (\$ScriptVal->\"\ + name\") . \"' from url: \" . \$Url);\r\ + \n :local Result [ /tool/fetch check-certificate=yes-without-crl \\\ + \r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url outp\ + ut=user as-value ];\r\ + \n :if (\$Result->\"status\" = \"finished\") do={\r\ + \n :set SourceNew [ :tolf (\$Result->\"data\") ];\r\ + \n } \r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching script '\" . \$ScriptV\ + al->\"name\" . \"': \" . \$Err);\r\ + \n :if (\$Err != \"Fetch failed with status 404\") do={\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$ScriptVal->\"source\" = \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Removing dummy. Typo on installation\ + \?\");\r\ + \n /system/script/remove \$Script;\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Sc\ + riptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :len \$CheckSum ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Added the script manually\? Skip u\ + pdates with 'ignore=true' in comment.\");\r\ + \n }\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$SourceNew ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"No update for script '\" . (\$ScriptVal-\ + >\"name\") . \"'.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local SourceCRLF [ :tocrlf \$SourceNew ];\r\ + \n :if (\$InitSetup != true && ((\$ScriptVal->\"name\") != \"AM-Globa\ + lConfig\" || (\$ScriptVal->\"name\") != \"AM-GlobalFunc\")) do={\r\ + \n :if (\$SourceNew = (\$ScriptVal->\"source\") || \$SourceCRLF = (\ + \$ScriptVal->\"source\")) do={\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\") \ + . \"' source did not change. End of lines set to CRLF.\");\r\ + \n if (\$ScriptUpdatesCRLF = false) do={\r\ + \n :put [ :tolf \$SourceNew ];\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\"\ + ) . \"' source update end of lines to LF.\");\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([ :pick \$SourceNew 0 14 ] != \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Looks like new script '\" . \$ScriptVa\ + l->\"name\" . \"' is not valid (missing shebang = '\$shebang') Ignoring!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if (\$CommentsInScripts = true) do={\r\ + \n :local CommentLine [ \$Grep \$SourceNew (\"\\23 Script comment:\ + \_\") ];\r\ + \n :if ([ :len \$CommentLine ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"The search in new script '\" . (\$Scr\ + iptVal->\"name\") . \"' for comment in script body, is not found result Ig\ + noring!\");\r\ + \n :error false;\r\ + \n } else={\r\ + \n :if ([ :len (\$ScriptVal->\"comment\")] = 0 || [ :len (\$Scri\ + ptVal->\"comment\")] != [ :pick \$CommentLine ([ :find \$CommentLine \":\"\ + ] + 2) [ :len \$CommentLine] ]) do={\r\ + \n \$LogPrint debug \$0 (\"Exsiting comment for script '\" . (\ + \$ScriptVal->\"name\") . \"' is '\" . (\$ScriptVal->\"comment\") . \"'.\")\ + ;\r\ + \n :set (\$ScriptVal->\"comment\") [ :pick \$CommentLine ([ :f\ + ind \$CommentLine \":\"] + 2) [ :len \$CommentLine] ];\r\ + \n \$LogPrint debug \$0 (\"New comment (\" . (\$ScriptVal->\"c\ + omment\") . \") for script '\" . (\$ScriptVal->\"name\") . \"' has been ad\ + ded!\");\r\ + \n } else={\r\ + \n \$LogPrint debug \$0 (\"Comment for script '\" . (\$ScriptV\ + al->\"name\") . \"' did not change.\");\r\ + \n :error false;\r\ + \n }\r\ + \n } \r\ + \n }\r\ + \n\r\ + \n :local RequiredROS ([ \$ParseKeyValueStore [ \$Grep \$SourceNew (\ + \"\\23 requires RouterOS, \") ] ]->version);\r\ + \n :if ([ \$RequiredRouterOS \$0 [ \$EitherOr \$RequiredROS \"0.0\" ]\ + \_false ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires RouterOS \" . \\\r\ + \n \$RequiredROS . \", which is not met by your installation. I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :local RequiredDM [ \$ParseKeyValueStore [ \$Grep \$SourceNew (\"\ + \\23 requires device-mode, \") ] ];\r\ + \n :local MissingDM ({});\r\ + \n :foreach Feature,Value in=\$RequiredDM do={\r\ + \n :if ([ :typeof (\$DeviceMode->\$Feature) ] = \"bool\" && (\$Devi\ + ceMode->\$Feature) = false) do={\r\ + \n :set MissingDM (\$MissingDM, \$Feature);\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len \$MissingDM ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires disabled \" . \\\r\ + \n \"device-mode features (\" . [ :tostr \$MissingDM ] . \"). I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ValidateSyntax \$SourceNew ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Syntax validation for script '\" . (\$\ + ScriptVal->\"name\") . \"' failed! Ignoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n \r\ + \n :log info (\"Updating script: \" . (\$ScriptVal->\"name\") . \" Sc\ + ript comment: \" . (\$ScriptVal->\"comment\"));\r\ + \n\r\ + \n /system/script/set owner=(\$ScriptVal->\"name\") comment=(\$Script\ + Val->\"comment\") \\\r\ + \n source=[ \$IfThenElse (\$ScriptUpdatesCRLF = true) \$SourceCRL\ + F \$SourceNew ] \$Script;\r\ + \n :if (\$ScriptVal->\"name\" = \"AM-GlobalConfig\" || \\\r\ + \n \$ScriptVal->\"name\" = \"AM-GlobalFunc\" || \\\r\ + \n \$ScriptVal->\"name\" ~ (\"^(AM-GlobalFunc\\\\.d|mod)/.\")) d\ + o={\r\ + \n :set ReloadGlobal true;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n :if (\$ReloadGlobal = true) do={\r\ + \n \$LogPrint info \$0 (\"Reloading global configuration and functions.\ + \");\r\ + \n :onerror Err {\r\ + \n :global InitSetup (a);\r\ + \n /system/script {run AM-GlobalConfig; run AM-GlobalFunc;};\r\ + \n } do={\$LogPrint error \$0 (\"Reloading global configuration and fun\ + ctions failed! \" . \$Err)}\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore > \$GlobalConfVersion) do={\r\ + \n \$LogPrint warning \$0 (\"The configuration version decreased from \ + \" . \\\r\ + \n \$GlobalConfVersionBefore . \" to \" . \$GlobalConfVersion . \\\r\ + \n \". Installed an older version\?\");\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore < \$GlobalConfVersion) do={\r\ + \n :global GlobalConfChanges;\r\ + \n :global GlobalConfMigration;\r\ + \n :local ChangeLogCode;\r\ + \n :if ([ :len \$ChangeLogCode ] > 0) do={\r\ + \n :if ([ \$ValidateSyntax \$ChangeLogCode ] = true) do={\r\ + \n :onerror Err {\r\ + \n [ :parse \$ChangeLogCode ];\r\ + \n } do={\$LogPrint warning \$0 (\"The changelog failed to run: \" \ + . \$Err)}\r\ + \n } else={\$LogPrint warning \$0 (\"The changelog failed syntax vali\ + dation!\")}\r\ + \n }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Migration (\$GlobalConfMigration->[ :tostr \$I ]);\r\ + \n :do {\r\ + \n :if ([ :typeof \$Migration ] != \"str\") do={\r\ + \n \$LogPrint debug \$0 (\"Migration code for change \" . \$I .\ + \_\" is not available.\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$ValidateSyntax \$Migration ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Migration code for change \" . \$I\ + \_. \" failed syntax validation!\");\r\ + \n :error false}\r\ + \n \$LogPrint info \$0 (\"Applying migration for change \" . \$I \ + . \": \" . \$Migration);\r\ + \n :onerror Err {\r\ + \n [ :parse \$Migration ];\r\ + \n } do={\$LogPrint warning \$0 (\"Migration code for change \" .\ + \_\$I . \" failed to run: \" . \$Err)}\r\ + \n } on-error={ }\r\ + \n }\r\ + \n }\r\ + \n :local NotificationMessage (\"The configuration version on \" . \$Id\ + entity . \" increased \" . \\\r\ + \n \"to \" . \$GlobalConfVersion . \", current configuration may nee\ + d modification. \" . \\\r\ + \n \"Please review and update global-config-overlay, then re-run glo\ + bal-config.\");\r\ + \n \$LogPrint info \$0 (\$NotificationMessage);\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nChanges:\ + \");\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Change (\$GlobalConfChanges->[ :tostr \$I ]);\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n \" . \\\ + \r\ + \n [ \$SymbolForNotification \"pushpin\" \"*\" ] . \$Change);\r\ + \n \$LogPrint info \$0 (\"Change \" . \$I . \": \" . \$Change);\r\ + \n }\r\ + \n } else={:set NotificationMessage (\$NotificationMessage . \"\\n\\nNe\ + ws and changes are not available.\")}\r\ + \n\r\ + \n :set GlobalConfChanges;\r\ + \n :set GlobalConfMigration;\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n\r\ + \n# load modules\r\ + \n:foreach Script in=[ /system/script/find where name ~ \"^(global-functio\ + ns\\\\.d|mod)/.\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :if ([ \$ValidateSyntax (\$ScriptVal->\"source\") ] = true) do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' f\ + ailed to run: \" . \$Err);\r\ + \n }\r\ + \n } else={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' fai\ + led syntax validation, skipping.\");\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# Add and fix global scheduler\r\ + \n:put \"Add or/and fix Global scheduler...\";\r\ + \n:local OnEvent \"/system/script { run AM-GlobalConfig; run AM-GlobalFunc\ + ; }\";\r\ + \n:local Comment \"Every Day Set Global Environment Variables\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-SetGlobalEnv\" ] ] \ + = 0) do={\r\ + \n /system/scheduler/add name=\"AM-SetGlobalEnv\" comment=\$Comment on-ev\ + ent=\$OnEvent start-time=startup;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" comment ] != \$Comment)\ + \_do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" comment=\$Comment;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" on-event ] != \$OnEvent\ + ) do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" on-event=\$OnEvent;\r\ + \n}\r\ + \n# Add Update Script scheduler\r\ + \n:put \"Add or/and fix Update Script scheduler\";\r\ + \n:set OnEvent \":global ScriptInstallUpdate; \\\$ScriptInstallUpdate;\";\ + \r\ + \n:set Comment \"Every Day Check For Update Scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-ScriptInstallUpdate\ + \" ] ] = 0) do={\r\ + \n/system/scheduler/add name=\"AM-ScriptInstallUpdate\" comment=\$Comment \ + start-time=startup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady;\r\ + \n :retry { :if (\$GlobalConfReady != true) do={ :error (\"Global configs\ + \_not ready.\"); }; } delay=100ms max=5;\r\ + \n\r\ + \n:log warning (\"This script \$ScriptName Loaded \" . \\\r\ + \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ + \") ] . \\\r\ + \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ + \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\r\ + \n # signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\r\ + \n\r\ + \n:log info (\$0 . \"Global configs ready!\");\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n}\r\ + \n" +add comment="download, import and update firewall address-lists" \ + dont-require-permissions=no name=AM-FwAddrLists owner=AM-FwAddrLists \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-FwAddrLists\r\ + \n# Script comment: download, import and update firewall address-lists\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# https://ros.vados.ru/doc/fw-addr-lists.md\r\ + \n:local ExitOK false;\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady; :global GlobalFuncReady;\r\ + \n :retry { :if (\$GlobalConfReady != true || \$GlobalFuncReady != true) \ + \\\r\ + \n do={ :error (\"Global config and/or functions not ready.\"); }; } \ + delay=500ms max=50;\r\ + \n :local ScriptName [ :jobname ];\r\ + \n\r\ + \n :global GlobalScriptsUrl;\r\ + \n :local ListsDirName (\"fw-addr-lists.d/\" . [ /system identity get nam\ + e ] . \"/\");\r\ + \n :local ListsUrl (\$GlobalScriptsUrl . \$ListsDirName);\r\ + \n :local ListsIndex \"index.lst\";\r\ + \n :local AddrListsTimeOut 1d;\r\ + \n :local CheckCerts false;\r\ + \n\r\ + \n :global CertificateAvailable;\r\ + \n :global EitherOr;\r\ + \n :global FetchHugeFiles;\r\ + \n :global HumanReadableNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global NetMask4;\r\ + \n :global NetMask6;\r\ + \n :global ScriptLock;\r\ + \n \r\ + \n :local FindDelim do={\r\ + \n :local ValidChars \"0123456789.:/ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghi\ + jklmnopqrstuvwxyz-\";\r\ + \n :for I from=0 to=[ :len \$1 ] do={\r\ + \n :if ([ :typeof [ :find \$ValidChars [ :pick (\$1 . \" \") \$I ] ] \ + ] != \"num\") do={\r\ + \n :return \$I;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local GetBranch do={\r\ + \n :global EitherOr;\r\ + \n :return [ :pick [ :convert transform=md5 to=hex [ :pick \$1 0 [ \$Ei\ + therOr [ :find \$1 \"/\" ] [ :len \$1 ] ] ] ] 0 2 ];\r\ + \n }\r\ + \n \r\ + \n :if ([ \$ScriptLock \$ScriptName ] = false) do={\r\ + \n :set ExitOK true;\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local ListComment (\"managed by \" . \$ScriptName);\r\ + \n :local Url (\$ListsUrl . \$ListsIndex);\r\ + \n :local tmpIndex false;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$tmpIndex = false) do={\r\ + \n :set tmpIndex [ :tolf [ \$FetchHugeFiles \$ScriptName \$Url \$Chec\ + kCerts ] ];\r\ + \n :if (\$tmpIndex = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list \ + index, \" . \$I . \". try from: \" . \$Url);\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :if (\$tmpIndex = false) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading address-list inde\ + x from: \" . \$Url);\r\ + \n :set tmpIndex \"\";\r\ + \n }\r\ + \n :local ReadFile (\"tmpfs/\" .\$tmpIndex);\r\ + \n :local filebody [/file/get \$ReadFile contents];\r\ + \n:foreach fwList in=[:deserialize \$ReadFile delimiter=\"\\n\" from=dsv o\ + ptions=dsv.plain] do={\r\ + \n :log error \$fwList;\r\ + \n}\r\ + \n\r\ + \n\r\ + \n :foreach List in=[ :deserialize \$tmpIndex delimiter=\"\\n\" from=dsv \ + options=dsv.plain ] do={\r\ + \n :set List (\$List->0);\r\ + \n :local ListName;\r\ + \n :local Delim [ \$FindDelim \$List ];\r\ + \n :if (\$Delim = 0) do={ :set List \"\"; };\r\ + \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ + \_. \$List);\r\ + \n :if ([ :len \$List ] = 0) do={\r\ + \n :log error (\$ScriptName . \" Failed parsing address-list index en\ + try: \" . \$List);\r\ + \n } else={\r\ + \n :set ListName [ :pick \$List 0 \$Delim ];\r\ + \n }\r\ + \n :log warning (\$ScriptName . \" Parsing address-list index entry: \"\ + \_. \$ListName . \" - Ok.\");\r\ + \n :local ListUrl (\$ListsUrl . \$ListName);\r\ + \n :local CntAdd 0;\r\ + \n :local CntRenew 0;\r\ + \n :local CntRemove 0;\r\ + \n :local IPv4Addresses ({});\r\ + \n :local IPv6Addresses ({});\r\ + \n :local Failure false;\r\ + \n :local Data false;\r\ + \n :local TimeOut \$AddrListTimeOut;\r\ + \n\r\ + \n :for I from=1 to=5 do={\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data [ :tolf [ \$FetchHugeFiles \$ScriptName \$ListUrl \$Ch\ + eckCerts ] ];\r\ + \n :if (\$Data = false && \$I < 5) do={\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\ + \" . \$ListName . \"', \" . \$I . \". try from: \" . \$ListUrl);\r\ + \n :delay ((\$I * \$I) . \"s\");\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if (\$Data = false) do={\r\ + \n :set Data \"\";\r\ + \n :set Failure true;\r\ + \n :log warning (\$ScriptName . \" Failed downloading for list '\" . \ + \$ListName . \"' from: \" . \$ListUrl);\r\ + \n } else={\r\ + \n :log debug (\$ScriptName . \" Downloaded \" . [ \$HumanReadableNum\ + \_[ :len \$Data ] 1024 ] . \"B for list '\" . \$ListName . \"' from: \" . \ + \$ListUrl);\r\ + \n }\r\ + \n\r\ + \n :foreach Line in=[ :deserialize \$Data delimiter=\"\\n\" from=dsv op\ + tions=dsv.plain ] do={\r\ + \n :set Line (\$Line->0);\r\ + \n :local Address;\r\ + \n :if ([ :pick \$Line 0 1 ] = \"{\" && [ :pick \$Line ([ :len \$Line\ + \_] - 1) ] = \"}\") do={\r\ + \n :do {\r\ + \n :set Address [ :tostr ([ :deserialize from=json \$Line ]->\"ci\ + dr\") ];\r\ + \n } on-error={ }\r\ + \n } else={\r\ + \n :set Address ([ :pick \$Line 0 [ \$FindDelim \$Line ] ] . (\$L\ + ist->\"cidr\"));\r\ + \n }\r\ + \n :do {\r\ + \n :local Branch;\r\ + \n :if (\$Address ~ \"^[0-9]{1,3}\\\\.[0-9]{1,3}\\\\.[0-9]{1,3}\\\\\ + .[0-9]{1,3}(/[0-9]{1,2})\?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 32;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address ]\ + \_];\r\ + \n :set Address [ :tostr (([ :toip \$Net ] & [ \$NetMask4 \$CID\ + R ]) . [ \$IfThenElse (\$CIDR < 32) (\"/\" . \$CIDR) ]) ];\r\ + \n }\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[0-9a-zA-Z]*:[0-9a-zA-Z:\\\\.]+(/[0-9]{1,3})\ + \?\\\$\") do={\r\ + \n :local Net \$Address;\r\ + \n :local CIDR 128;\r\ + \n :local Slash [ :find \$Address \"/\" ];\r\ + \n :if ([ :typeof \$Slash ] = \"num\") do={\r\ + \n :set Net [ :toip6 [ :pick \$Address 0 \$Slash ] ]\r\ + \n :set CIDR [ :pick \$Address (\$Slash + 1) [ :len \$Address ]\ + \_];\r\ + \n }\r\ + \n :set Address (([ :toip6 \$Net ] & [ \$NetMask6 \$CIDR ]) . \"/\ + \" . \$CIDR);\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n :if (\$Address ~ \"^[\\\\.a-zA-Z0-9-]+\\\\.[a-zA-Z]{2,}\\\$\") d\ + o={\r\ + \n :set Branch [ \$GetBranch \$Address ];\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address) \$TimeOut;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n \r\ + \n\r\ + \n :foreach Entry in=[ /ip/firewall/address-list/find where \\\r\ + \n list=\$ListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ip/firewall/address-list/get \$Entry address ];\ + \r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log warning (\$ScriptName . \" Renewing IPv4 address \" . \$Add\ + ress . \\\r\ + \n \" in list '\" . \$ListName . \"' with \" . \$TimeOut . \".\ + \");\r\ + \n /ip/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv4Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log warning (\$ScriptName . \" Removing IPv4 address \" . \$A\ + ddress . \\\r\ + \n \" from list '\" . \$ListName . \".\");\r\ + \n /ip/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach Entry in=[ /ipv6/firewall/address-list/find where \\\r\ + \n list=\$ListName comment=\$ListComment ] do={\r\ + \n :local Address [ /ipv6/firewall/address-list/get \$Entry address ]\ + ;\r\ + \n :local Branch [ \$GetBranch \$Address ];\r\ + \n :local TimeOut (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :if ([ :typeof \$TimeOut ] = \"time\") do={\r\ + \n :log warning (\$ScriptName . \" Renewing IPv6 address \" . \$Add\ + ress . \\\r\ + \n \" in list '\" . \$ListName . \"' with \" . \$TimeOut . \".\ + \");\r\ + \n /ipv6/firewall/address-list/set \$Entry timeout=\$TimeOut;\r\ + \n :set (\$IPv6Addresses->\$Branch->\$Address);\r\ + \n :set CntRenew (\$CntRenew + 1);\r\ + \n } else={\r\ + \n :if (\$Failure = false) do={\r\ + \n :log warning (\$ScriptName . \" Removing IPv6 address \" . \$A\ + ddress . \\\r\ + \n \" from list '\" . \$ListName . \".\");\r\ + \n /ipv6/firewall/address-list/remove \$Entry;\r\ + \n :set CntRemove (\$CntRemove + 1);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv4Addresses do={\r\ + \n :log warning (\$ScriptName . \" Handling branch: \" . \$BranchName\ + );\r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log warning (\$ScriptName . \" Adding IPv4 address \" . \$Addre\ + ss . \\\r\ + \n \" to list '\" . \$ListName . \"' with \" . \$Timeout . \".\ + \");\r\ + \n :onerror Err {\r\ + \n /ip/firewall/address-list/add list=\$ListName comment=\$ListCo\ + mment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv4 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$ListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :foreach BranchName,Branch in=\$IPv6Addresses do={\r\ + \n :log warning (\$ScriptName . \" Handling branch: \" . \$BranchName\ + );\r\ + \n :foreach Address,Timeout in=\$Branch do={\r\ + \n :log warning (\$ScriptName . \" Adding IPv6 address \" . \$Addre\ + ss . \\\r\ + \n \" to list '\" . \$ListName . \"' with \" . \$Timeout . \".\ + \");\r\ + \n :onerror Err {\r\ + \n /ipv6/firewall/address-list/add list=\$ListName comment=\$List\ + Comment \\\r\ + \n address=\$Address timeout=\$Timeout;\r\ + \n :set CntAdd (\$CntAdd + 1);\r\ + \n } do={\r\ + \n :log warning (\$ScriptName . \" Failed to add IPv6 address \" \ + . \$Address . \\\r\ + \n \" to list '\" . \$ListName . \"': \" . \$Err);\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :log info (\$ScriptName . \" list: \" . \$ListName . \\\r\ + \n \" (\" . [ \$HumanReadableNum (\$CntAdd + \$CntRenew) 1000 ] . \ + \")\" . \\\r\ + \n \" -- added: \" . [ \$HumanReadableNum \$CntAdd 1000 ] . \\\r\ + \n \" - renewed: \" . [ \$HumanReadableNum \$CntRenew 1000 ] . \\\r\ + \n \" - removed: \" . [ \$HumanReadableNum \$CntRemove 1000 ]);\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitError; \$ExitError \$ExitOK [ :jobname ] \$Err;\r\ + \n}\r\ + \n" +add comment=\ + "Lookup IP addresses for RKN list and add them to firewall address-list" \ + dont-require-permissions=no name=AM-RKN-dnsLookup owner=AM-RKN-dnsLookup \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + source="#!rsc by Vados\r\ + \n# RouterOS script: AM-RKN-dnsLookup\r\ + \n# Script comment: Lookup IP addresses for RKN list and add them to firew\ + all address-list\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch\r\ + \n#\r\ + \n# Script description: This script is intended to be run periodically, e.\ + g. once a day, to update the IP addresses in the firewall address-list bas\ + ed on the RKN list.\r\ + \n# It resolves the domain names in the RKN list and a\ + dds the corresponding IP addresses to the specified firewall address-list.\ + \r\ + \n# The script also handles CNAME records by following\ + \_them until it finds A records.\r\ + \n# Usage:\r\ + \n# /system/script { run AM-RKN-dnsLookup; }\r\ + \n:local ScriptName [ :jobname ];\r\ + \n\r\ + \n:global dnsLookupReady false;\r\ + \n:if ([:typeof \$dnsLookupReady] != \"boolean\") do={ :set dnsLookupReady\ + \_true; }\r\ + \nwhile (!\$dnsLookupReady) do={ :nothing; }\r\ + \n:set dnsLookupReady false;\r\ + \n\r\ + \n:local arrRKN {\r\ + \n \"telegra.ph\"\r\ + \n \"grani.ru\"\r\ + \n \"xhamster.com\"\r\ + \n \"kasparov.ru\"\r\ + \n \"lostfilm.tv\"\r\ + \n \"rutracker.org\"\r\ + \n \"lurkmore.to\"\r\ + \n \"dou.ua\"\r\ + \n \"youporn.com\"\r\ + \n \"pornolab.net\"\r\ + \n \"crimerussia.com\"\r\ + \n \"telegram.org\"\r\ + \n \"api.telegram.org\"\r\ + \n \"telegram.me\"\r\ + \n \"t.me\";}\r\ + \n\r\ + \n:local ListRKN \"FuckRKN\";\r\ + \n:local ListComment (\"ListRKN managed by \" . \$ScriptName);\r\ + \n:foreach aListItem in=[/ip/firewall/address-list find list=\$ListRKN] do\ + ={\r\ + \n /ip firewall address-list remove \$aListItem;\r\ + \n}\r\ + \n:foreach aItem in=\$arrRKN do={\r\ + \n :do {\r\ + \n :resolve \$aItem;\r\ + \n } on-error={\r\ + \n :log error \"dns resolve failure [ ip - resolve ip ]\";\r\ + \n }\r\ + \n :foreach dnsRecord in=[/ip dns cache all find where (name=\$aItem)] \ + do={\r\ + \n :if ([/ip dns cache all get \$dnsRecord type]=\"A\") do={\r\ + \n :local newAddress [/ip dns cache all get \$dnsRecord data];\ + \r\ + \n :do {\r\ + \n /ip firewall address-list add list=\$ListRKN address=\$n\ + ewAddress comment=\$aItem;\r\ + \n } on-error={\r\ + \n :log error \"error when adding ip to list: \$newAddress\ + \";\r\ + \n }\r\ + \n }\r\ + \n :if ([/ip dns cache all get \$dnsRecord type]=\"CNAME\") do={\r\ + \n :local cname;\r\ + \n :local nextCname;\r\ + \n :set cname [/ip dns cache all find where (name=\$aItem && ty\ + pe=\"CNAME\")];\r\ + \n :set nextCname [/ip dns cache all find where (name=[/ip dns \ + cache all get \$cname data] && type=\"CNAME\")];\r\ + \n :while (\$nextCname != \"\") do={\r\ + \n :set cname \$nextCname;\r\ + \n :set nextCname [/ip dns cache all find where (name=[/ip \ + dns cache all get \$cname data] && type=\"CNAME\")];\r\ + \n }\r\ + \n :foreach aRecord in=[/ip dns cache all find where (name=[/ip\ + \_dns cache all get \$cname data] && type=\"A\")] do={\r\ + \n :do {\r\ + \n /ip firewall address-list add list=\$ListRKN address\ + =[/ip dns cache all get \$aRecord data] comment=\$aItem;\r\ + \n } on-error={\r\ + \n :log error \"error when adding ip to list: \$newAddr\ + ess\";\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:if ([ :len [ /system/scheduler/find where name=\$ScriptName ] ] = 0) do\ + ={\r\ + \n :log error (\$ScriptName . \"System Scheduler for script: \" . \$Scri\ + ptName . \" is NOT SET! Fix It Now!\");\r\ + \n /system/scheduler/add name=\$ScriptName on-event=\"/system/script { \ + run \$ScriptName; }\" comment=\"Update RKN DNS Looup\" interval=00:20:00 p\ + olicy=\"ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon\"\ + \_start-time=startup;\r\ + \n }\r\ + \n:set dnsLookupReady true;\r\ + \ndelay 5s; \r\ + \n:global dnsLookupReady (a);\r\ + \n" +/user group +add name=backup policy="telnet,ssh,ftp,read,write,policy,test,sniff,sensitive,\ + !local,!reboot,!winbox,!password,!web,!api,!romon,!rest-api" +/interface bridge +add admin-mac=48:8F:5A:8E:1A:BC auto-mac=no mlag-peer-port="ether1 - Unet" \ + name=Bridge-LAN port-cost-mode=short +/interface wireless +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(18dBm), SSID: vados, local forwarding +set [ find default-name=wlan1 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 2ghz-b/g/n basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps basic-rates-b=\ + 1Mbps,2Mbps,5.5Mbps,11Mbps channel-width=20/40mhz-XX country=belarus \ + disabled=no frequency=auto hw-protection-mode=rts-cts mode=ap-bridge \ + rate-set=configured skip-dfs-channels=10min-cac ssid=vados \ + wds-default-bridge=Bridge-LAN wds-mode=dynamic-mesh wireless-protocol=\ + 802.11 wmm-support=enabled wps-mode=disabled +# managed by CAPsMAN +# channel: 5260/20-Ceee/ac/DP(18dBm), SSID: vados5g, local forwarding +set [ find default-name=wlan2 ] ampdu-priorities=0,1,2,3,4,5,6,7 band=\ + 5ghz-a/n/ac basic-rates-a/g=\ + 6Mbps,9Mbps,12Mbps,18Mbps,24Mbps,36Mbps,48Mbps,54Mbps channel-width=\ + 20/40/80mhz-XXXX country=belarus disabled=no frequency=auto \ + hw-protection-mode=rts-cts mode=ap-bridge rate-set=configured \ + skip-dfs-channels=10min-cac ssid=vados5g wds-default-bridge=Bridge-LAN \ + wds-mode=dynamic-mesh wireless-protocol=802.11 wmm-support=enabled \ + wps-mode=disabled +/interface wireless nstreme +# managed by CAPsMAN +# channel: 2422/20-Ce/gn(18dBm), SSID: vados, local forwarding +set wlan1 enable-nstreme=yes +# managed by CAPsMAN +# channel: 5260/20-Ceee/ac/DP(18dBm), SSID: vados5g, local forwarding +set wlan2 enable-nstreme=yes +/caps-man manager +set enabled=yes +/caps-man provisioning +add action=create-dynamic-enabled hw-supported-modes=gn master-configuration=\ + cfg-2ghz name-format=prefix-identity name-prefix=2ghz +add action=create-dynamic-enabled hw-supported-modes=ac master-configuration=\ + cfg-5ghz-ac name-format=prefix-identity name-prefix=5ghz-ac +add action=create-dynamic-enabled hw-supported-modes=an master-configuration=\ + cfg-5ghz-an name-format=prefix-identity name-prefix=5ghz-an +/certificate settings +set builtin-trust-store="ipsec,wpa-eap,capsman,fetch,sstp,ovpn,radius,userman,\ + openflow,tr069,dot1x,dns,www,api,reverse-proxy" crl-store=system +/interface bridge port +add bridge=Bridge-LAN disabled=yes interface="ether1 - Unet" +add bridge=Bridge-LAN interface=ether2 +add bridge=Bridge-LAN interface=ether3 +add bridge=Bridge-LAN interface=ether4 +add bridge=Bridge-LAN interface=ether5 +add bridge=Bridge-LAN interface=wlan2 +add bridge=Bridge-LAN interface=wlan1 +/ip firewall connection tracking +set udp-timeout=10s +/ip neighbor discovery-settings +set discover-interface-list=LAN +/ip settings +set max-neighbor-entries=8192 secure-redirects=no +/ipv6 settings +set allow-fast-path=no disable-ipv6=yes disable-link-local-address=yes \ + forward=no max-neighbor-entries=8192 +/interface detect-internet +set detect-interface-list=WAN internet-interface-list=WAN lan-interface-list=\ + LAN wan-interface-list=WAN +/interface l2tp-server server +set authentication=mschap2 use-ipsec=yes +/interface list member +add interface="ether1 - Unet" list=WAN +add interface=Bridge-LAN list=LAN +/interface ovpn-server server +add auth=sha1,md5 mac-address=FE:82:A5:78:8E:84 name=ovpn-server1 +/interface wifi configuration +add channel=2G-AX datapath=xs-DataPath disabled=no mode=ap name=2G-AX \ + security=sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=2G-N datapath=xs-DataPath disabled=no mode=ap name=2G-N security=\ + sec2g security.ft=yes .ft-over-ds=yes ssid=vados +add channel=5G-AC datapath=xs-DataPath disabled=no mode=ap name=5G-AC \ + security=sec5G security.authentication-types="" .ft=yes .ft-over-ds=yes \ + ssid=vados +add channel=2G-G datapath=xs-DataPath disabled=no mode=ap name=2G-G security=\ + sec2g security.authentication-types="" .ft=yes .ft-over-ds=yes ssid=vados +/interface wifi datapath +add bridge=Bridge-LAN disabled=no interface-list=all name=xs-DataPath +/interface wireguard peers +add allowed-address=10.8.0.2/32,0.0.0.0/0 client-allowed-address=0.0.0.0/0 \ + endpoint-address=89.110.101.17 endpoint-port=29185 interface=WG name=\ + MikroVados persistent-keepalive=10s public-key=\ + "64Y25EUZQQt8EIeAJYD8qWt+te8qvGEepnswdBgmzlY=" +/interface wireless cap +# +set bridge=Bridge-LAN caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-51B25E507D07 certificate=\ + CAP-488F5A8E1ABC discovery-interfaces=ether2 enabled=yes interfaces=\ + wlan1,wlan2 lock-to-caps-man=yes +/ip address +add address=10.30.30.81/24 interface=Bridge-LAN network=10.30.30.0 +add address=10.8.0.2/24 interface=WG network=10.8.0.0 +/ip dhcp-client +add add-default-route=special-classless default-route-distance=2 \ + default-route-tables=main interface="ether1 - Unet" name=client1 \ + use-peer-dns=no +/ip dhcp-server +add add-arp=yes address-pool=dhcp always-broadcast=yes bootp-support=none \ + dhcp-option-set=domain-search-set interface=Bridge-LAN lease-time=10m \ + name=masterDHCP server-address=10.30.30.81 +/ip dhcp-server config +set accounting=no +/ip dhcp-server lease +add address=10.30.30.101 client-id=1:48:8f:5a:8e:ee:a8 mac-address=\ + 48:8F:5A:8E:EE:A8 server=masterDHCP +add address=10.30.30.107 client-id=1:f0:de:f1:91:d:1e mac-address=\ + F0:DE:F1:91:0D:1E server=masterDHCP +add address=10.30.30.83 client-id=1:0:80:77:ec:43:86 mac-address=\ + 00:80:77:EC:43:86 server=masterDHCP +add address=10.30.30.70 dhcp-option=domain-search-list,HostName \ + dhcp-option-set=HP1505n mac-address=00:1E:0B:1A:88:8D server=masterDHCP +add address=10.30.30.50 client-id=1:4:7c:16:36:f5:37 mac-address=\ + 04:7C:16:36:F5:37 server=masterDHCP +add address=10.30.30.71 client-id=1:10:2d:41:2c:20:c2 mac-address=\ + 10:2D:41:2C:20:C2 server=masterDHCP +add address=10.30.30.61 client-id=1:10:8:c1:81:59:5f mac-address=\ + 10:08:C1:81:59:5F server=masterDHCP +add address=10.30.30.72 client-id=1:10:38:1f:d2:5f:13 mac-address=\ + 10:38:1F:D2:5F:13 server=masterDHCP +add address=10.30.30.99 client-id=1:10:b1:df:e9:d0:d5 mac-address=\ + 10:B1:DF:E9:D0:D5 server=masterDHCP +add address=10.30.30.111 client-id=1:fe:2:52:be:3f:16 mac-address=\ + FE:02:52:BE:3F:16 server=masterDHCP +add address=10.30.30.92 client-id=1:d4:6d:6d:fd:e5:49 mac-address=\ + D4:6D:6D:FD:E5:49 server=masterDHCP +add address=10.30.30.93 client-id=1:7e:8b:1e:cb:b8:cb mac-address=\ + CC:42:10:12:46:94 server=masterDHCP +add address=10.30.30.94 client-id=1:50:cc:f8:85:96:a mac-address=\ + 50:CC:F8:85:96:0A server=masterDHCP +add address=10.30.30.82 client-id=1:e4:18:6b:58:34:ab mac-address=\ + E4:18:6B:58:34:AB server=masterDHCP +add address=10.30.30.75 client-id=1:0:27:15:41:97:a9 mac-address=\ + 00:27:15:41:97:A9 server=masterDHCP +add address=10.30.30.77 dhcp-option=HostName dhcp-option-set=StartLife1 \ + mac-address=C4:82:E1:03:49:10 server=masterDHCP +add address=10.30.30.73 client-id=1:10:38:1f:82:81:f2 mac-address=\ + 10:38:1F:82:81:F2 server=masterDHCP +add address=10.30.30.95 client-id=1:88:ae:dd:60:39:54 dhcp-option=HostName \ + dhcp-option-set=VADOS-NUC mac-address=88:AE:DD:60:39:54 server=masterDHCP +add address=10.30.30.98 client-id=1:c8:5b:76:d8:cc:bf dhcp-option=HostName \ + dhcp-option-set=VADOS-LEN mac-address=C8:5B:76:D8:CC:BF server=masterDHCP +add address=10.30.30.96 client-id=iPhone mac-address=4A:91:ED:0E:1F:39 \ + server=masterDHCP +add address=10.30.30.74 client-id=MiTV dhcp-option=HostName dhcp-option-set=\ + MiTV mac-address=20:72:A9:D3:34:36 server=masterDHCP +add address=10.30.30.30 dhcp-option=HostName dhcp-option-set=miller \ + mac-address=F0:75:5D:1E:5F:71 server=masterDHCP +add address=10.30.30.100 client-id=iVados dhcp-option=HostName \ + dhcp-option-set="=\"Client ID\"" mac-address=DE:4D:72:F3:1A:9F server=\ + masterDHCP +/ip dhcp-server network +add address=10.30.30.0/24 caps-manager=10.30.30.10 dhcp-option=\ + domain-search-list dhcp-option-set=domain-search-set dns-server=\ + 10.30.30.81 domain=WORKGROUP gateway=10.30.30.81 netmask=24 ntp-server=\ + 10.30.30.81,10.30.30.10 wins-server=10.30.30.95,10.30.30.98 +/ip dns +set allow-remote-requests=yes cache-max-ttl=1d doh-max-concurrent-queries=100 \ + doh-max-server-connections=20 servers=8.8.8.8,8.8.4.4 verify-doh-cert=yes +/ip dns static +add address=10.30.30.33 name=ros.vados.ru type=A +add address=10.30.30.95 name=vados-nuc type=A +add address=10.30.30.33 name=amster-nuc type=A +add address=10.30.30.33 comment=AMSTER name=amster.vados.ru type=A +add address=10.30.30.33 name=amster type=A +add address=10.30.30.33 name=amster-reg type=A +add address=10.30.30.33 name=mng.vados.ru type=A +add address=10.30.30.33 name=mgr.vados.ru type=A +add address=10.30.30.33 name=prt.vados.ru type=A +add address=10.30.30.33 name=reg.vados.ru type=A +add address=10.30.30.33 match-subdomain=yes name=mikrots.vados.ru type=A +add address=10.30.30.33 name=oxidized.vados.ru type=A +add address=8.8.4.4 comment="Google-dns IPv4 2" name=dns.google type=A +add address=8.8.8.8 comment="Google-dns IPv4 1" name=dns.google type=A +add address=10.30.30.30 comment=MILLER name=miller.vados.ru type=A +add address=10.30.30.30 name=MILLER-LEN type=A +add address=10.30.30.30 name=miller type=A +add address=1.0.0.1 comment="CloudFlare-doh IPv4 2" name=\ + security.cloudflare-dns.com type=A +add address=1.1.1.1 comment="CloudFlare-doh IPv4 1" name=\ + security.cloudflare-dns.com type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" name=dns.quad9.net \ + type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +add address=10.30.30.81 comment=LocalNet name=MikroVados type=A +add address=10.30.30.10 name=MikroNUC type=A +add address=10.30.30.86 name=MikroYellow type=A +add address=10.30.30.85 name=MikroMic type=A +add address=10.30.30.95 name=VADOS-NUC type=A +add address=10.30.30.98 name=VADOS-LEN type=A +add address=10.30.30.20 name=garage type=A +add address=9.9.9.9 comment="Cuad9-dns IPv4 1" disabled=yes name=\ + dns.quad9.net type=A +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +/ip firewall address-list +add address=91.215.120.206 list=TRUSTED +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=10.30.30.100-255 list=KIDS +add address=8.8.4.0/24 list=YouTube +add address=8.8.8.0/24 list=YouTube +add address=8.34.208.0/20 list=YouTube +add address=8.35.192.0/20 list=YouTube +add address=23.236.48.0/20 list=YouTube +add address=23.251.128.0/19 list=YouTube +add address=34.0.0.0/15 list=YouTube +add address=34.2.0.0/16 list=YouTube +add address=34.3.0.0/23 list=YouTube +add address=34.3.3.0/24 list=YouTube +add address=34.3.4.0/24 list=YouTube +add address=34.3.8.0/21 list=YouTube +add address=34.3.16.0/20 list=YouTube +add address=34.3.32.0/19 list=YouTube +add address=34.3.64.0/18 list=YouTube +add address=34.4.0.0/14 list=YouTube +add address=34.8.0.0/13 list=YouTube +add address=34.16.0.0/12 list=YouTube +add address=34.32.0.0/11 list=YouTube +add address=34.64.0.0/10 list=YouTube +add address=34.128.0.0/10 list=YouTube +add address=35.184.0.0/13 list=YouTube +add address=35.192.0.0/14 list=YouTube +add address=35.196.0.0/15 list=YouTube +add address=35.198.0.0/16 list=YouTube +add address=35.199.0.0/17 list=YouTube +add address=35.199.128.0/18 list=YouTube +add address=35.200.0.0/13 list=YouTube +add address=35.208.0.0/12 list=YouTube +add address=35.224.0.0/12 list=YouTube +add address=35.240.0.0/13 list=YouTube +add address=57.140.192.0/18 list=YouTube +add address=64.15.112.0/20 list=YouTube +add address=64.233.160.0/19 list=YouTube +add address=66.22.228.0/23 list=YouTube +add address=66.102.0.0/20 list=YouTube +add address=66.249.64.0/19 list=YouTube +add address=70.32.128.0/19 list=YouTube +add address=72.14.192.0/18 list=YouTube +add address=74.125.0.0/16 list=YouTube +add address=104.154.0.0/15 list=YouTube +add address=104.196.0.0/14 list=YouTube +add address=104.237.160.0/19 list=YouTube +add address=107.167.160.0/19 list=YouTube +add address=107.178.192.0/18 list=YouTube +add address=108.59.80.0/20 list=YouTube +add address=108.170.192.0/18 list=YouTube +add address=108.177.0.0/17 list=YouTube +add address=130.211.0.0/16 list=YouTube +add address=136.22.160.0/20 list=YouTube +add address=136.22.176.0/21 list=YouTube +add address=136.22.184.0/23 list=YouTube +add address=136.22.186.0/24 list=YouTube +add address=142.250.0.0/15 list=YouTube +add address=146.148.0.0/17 list=YouTube +add address=152.65.208.0/22 list=YouTube +add address=152.65.214.0/23 list=YouTube +add address=152.65.218.0/23 list=YouTube +add address=152.65.222.0/23 list=YouTube +add address=152.65.224.0/19 list=YouTube +add address=162.120.128.0/17 list=YouTube +add address=162.216.148.0/22 list=YouTube +add address=162.222.176.0/21 list=YouTube +add address=172.110.32.0/21 list=YouTube +add address=172.217.0.0/16 list=YouTube +add address=172.253.0.0/16 list=YouTube +add address=173.194.0.0/16 list=YouTube +add address=173.255.112.0/20 list=YouTube +add address=192.158.28.0/22 list=YouTube +add address=192.178.0.0/15 list=YouTube +add address=193.186.4.0/24 list=YouTube +add address=199.36.154.0/23 list=YouTube +add address=199.36.156.0/24 list=YouTube +add address=199.192.112.0/22 list=YouTube +add address=199.223.232.0/21 list=YouTube +add address=207.223.160.0/20 list=YouTube +add address=208.65.152.0/22 list=YouTube +add address=208.68.108.0/22 list=YouTube +add address=208.81.188.0/22 list=YouTube +add address=208.117.224.0/19 list=YouTube +add address=209.85.128.0/17 list=YouTube +add address=216.58.192.0/19 list=YouTube +add address=216.73.80.0/20 list=YouTube +add address=216.239.32.0/19 list=YouTube +add address=2ip.ru list=Test +add address=157.240.247.174 list=Instagram +add address=46.53.178.107 list=Instagram +add address=179.60.195.174 list=Instagram +add address=157.240.205.174 list=Instagram +add address=31.13.24.0/21 list=Instagram +add address=31.13.64.0/18 list=Instagram +add address=45.64.40.0/22 list=Instagram +add address=66.220.144.0/20 list=Instagram +add address=69.63.176.0/20 list=Instagram +add address=69.171.224.0/19 list=Instagram +add address=74.119.76.0/22 list=Instagram +add address=103.4.96.0/22 list=Instagram +add address=129.134.0.0/16 list=Instagram +add address=157.240.0.0/16 list=Instagram +add address=173.252.64.0/18 list=Instagram +add address=179.60.192.0/22 list=Instagram +add address=185.60.216.0/22 list=Instagram +add address=204.15.20.0/22 list=Instagram +add address=157.240.200.63 list=Instagram +add address=185.60.219.63 list=Instagram +add address=129.134.31.12 list=Instagram +add address=66.81.203.132 list=Instagram +add address=185.89.218.12 list=Instagram +add address=31.13.66.63 list=Instagram +add address=84.15.65.162 list=Instagram +add address=68.66.224.28 list=Instagram +add address=157.240.253.63 list=Instagram +add address=83.174.11.224 list=Instagram +add address=157.240.9.52 list=Instagram +add address=157.240.252.174 list=Instagram +add address=157.240.195.63 list=Instagram +add address=31.13.71.52 list=Instagram +add address=57.144.110.192 list=Instagram +add address=157.240.252.17 list=Instagram +add address=84.15.66.97 list=Instagram +add address=217.168.6.33 list=Instagram +add address=31.13.83.52 list=Instagram +add address=157.240.241.63 list=Instagram +add address=129.134.30.12 list=Instagram +add address=185.89.219.12 list=Instagram +add address=157.240.252.10 list=Instagram +add address=157.240.201.63 list=Instagram +add address=66.81.203.197 list=Instagram +add address=179.60.195.52 list=Instagram +add address=66.81.203.7 list=Instagram +add address=216.40.34.41 list=Instagram +add address=157.240.202.63 list=Instagram +add address=157.240.229.63 list=Instagram +add address=157.240.252.63 list=Instagram +add address=31.13.72.53 list=Instagram +add address=124.108.16.224 list=Instagram +add address=157.240.205.63 list=Instagram +add address=92.46.37.96 list=Instagram +add address=157.240.247.63 list=Instagram +add address=157.240.234.63 list=Instagram +add address=157.240.235.63 list=Instagram +add address=87.245.208.97 list=Instagram +add address=216.58.192.0/19 list=Instagram +add address=209.85.128.0/17 list=Instagram +add address=198.105.240.0/20 list=Instagram +add address=173.194.0.0/16 list=Instagram +add address=172.217.0.0/16 list=Instagram +add address=142.250.0.0/15 list=Instagram +add address=108.177.0.0/17 list=Instagram +add address=87.245.197.140 list=Instagram +add address=74.125.0.0/16 list=Instagram +add address=64.233.160.0/19 list=Instagram +add address=157.240.0.1 list=Instagram +add address=157.240.238.63 list=Instagram +add address=157.240.238.174 list=Instagram +add address=157.240.0.63 list=Instagram +add address=157.240.224.63 list=Instagram +add address=157.240.224.174 list=Instagram +add address=157.240.251.36 list=Instagram +add address=157.240.253.12 list=Instagram +add address=157.240.253.35 list=Instagram +add address=157.240.238.13 list=Instagram +add address=157.240.238.56 list=Instagram +add address=157.240.238.175 list=Instagram +add address=57.144.112.141 list=Instagram +add address=157.240.251.60 list=Instagram +add address=157.240.251.128 list=Instagram +add address=157.240.238.5 list=Instagram +add address=157.240.253.13 list=Instagram +add address=157.240.253.5 list=Instagram +add address=157.240.238.2 list=Instagram +add address=157.240.238.37 list=Instagram +add address=157.240.251.5 list=Instagram +add address=157.240.251.34 list=Instagram +add address=57.144.112.1 list=Instagram +add address=157.240.238.54 list=Instagram +add address=129.134.26.123 list=Instagram +add address=157.240.252.3 list=Instagram +add address=31.13.84.4 list=Instagram +add address=157.240.224.12 list=Instagram +add address=157.240.238.4 list=Instagram +add address=157.240.0.13 list=Instagram +add address=3.33.139.32 list=Instagram +add address=157.240.0.35 list=Instagram +add address=157.240.238.14 list=Instagram +add address=157.240.238.60 list=Instagram +add address=57.144.112.145 list=Instagram +add address=157.240.251.35 list=Instagram +add address=151.101.84.159 list=Twitter +add address=pbs.twimg.com list=Twitter +add address=89.110.101.17 comment=VDSIna list=TRUSTED +add address=10.8.0.0/24 comment="WG VDSIna" list=TRUSTED +add address=ikus.pesc.ru comment=ikus.pesc.ru list=NoVdsina +add address=love.ru comment=love.ru list=NoVdsina +add address=gosuslugi.ru comment=gosuslugi.ru list=NoVdsina +add address=pochta.ru comment=pochta.ru list=NoVdsina +add address=vdsina.com list=NoVdsina +add address=vdsina.ru list=NoVdsina +add address=youla.ru list=NoVdsina +add address=kupiprodai.ru list=NoVdsina +add address=myip.ru list=Test +add address=geoip.co list=NoVdsina +add address=x.com list=Twitter +add address=facebook.com list=facebook +add address=fbcd.net list=facebook +add address=comp-lenta.ru list=NoVdsina +add address=128.85.102.70 comment=update.microsoft.com list=\ + windowsupdateslist +add address=wu-b-net.trafficmanager.net. comment=\ + ctldl.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=ctldl.windowsupdate.com.delivery.microsoft.com. comment=\ + ctldl.windowsupdate.com list=windowsupdateslist +add address=redir.update.msft.com.trafficmanager.net. comment=\ + update.microsoft.com list=windowsupdateslist +add address=geo.prod.do.dsp.trafficmanager.net. comment=\ + geo.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=13.74.139.29 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12437.d.akamaiedge.net. comment=\ + kv801.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=displaycatalog-rp.md.mp.microsoft.com.akadns.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=rp-consumer-prod-displaycatalog-geomap.trafficmanager.net. \ + comment=displaycatalog-rp.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=sls.update.microsoft.com. comment=slscr.update.microsoft.com \ + list=windowsupdateslist +add address=glb.sls.prod.dcat.dsp.trafficmanager.net. comment=\ + sls.update.microsoft.com list=windowsupdateslist +add address=fe3.delivery.mp.microsoft.com. comment=\ + fe3cr.delivery.mp.microsoft.com list=windowsupdateslist +add address=glb.cws.prod.dcat.dsp.trafficmanager.net. comment=\ + fe3.delivery.mp.microsoft.com list=windowsupdateslist +add address=fe2cr.update.msft.com.trafficmanager.net. comment=\ + fe2cr.update.microsoft.com list=windowsupdateslist +add address=download.windowsupdate.com.delivery.microsoft.com. comment=\ + download.windowsupdate.com list=windowsupdateslist +add address=wu-f-net.trafficmanager.net. comment=\ + download.windowsupdate.com.delivery.microsoft.com list=windowsupdateslist +add address=tsfe.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=edge.ds-c7110-microsoft.global.dns.qwilted-cds.cqloud.com. \ + comment=9.au.download.windowsupdate.com list=windowsupdateslist +add address=52.158.227.125 comment=array812.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dspw65.akamai.net. comment=\ + download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.151.58.88 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net. \ + comment=licensing.mp.microsoft.com list=windowsupdateslist +add address=licensing-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-licensing-aks2aks.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-nlu-net.trafficmanager.net. comment=\ + star.f.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.b.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-tlu-net.trafficmanager.net. comment=\ + star.b.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=storeedgefd.xbetservices.akadns.net. comment=\ + storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net. \ + comment=storeedgefd.dsx.mp.microsoft.com.edgekey.net list=\ + windowsupdateslist +add address=e16646.dscg.akamaiedge.net. comment=\ + storeedgefd.dsx.mp.microsoft.com.edgekey.net.globalredir.akadns.net list=\ + windowsupdateslist +add address=40.69.76.189 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=bg.microsoft.map.fastly.net. comment=\ + 3.au.download.windowsupdate.com list=windowsupdateslist +add list=windowsupdateslist +add address=40.69.75.33 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sf.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=cdp-f-ssl-tlu-net.trafficmanager.net. comment=\ + star.sf.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a2033.dscd.akamai.net. comment=\ + star.sb.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.138.242 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-nlu-net.trafficmanager.net. comment=\ + dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=1D.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-b-tlu-net.trafficmanager.net. comment=\ + 1d.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a122.dscg3.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=windowsupdateslist +add address=geover.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e10370.d.akamaiedge.net. comment=\ + geover.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=52.232.182.21 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.95 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=a1683.dscd.akamai.net. comment=\ + dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net. \ + comment=collections.mp.microsoft.com list=windowsupdateslist +add address=a1847.dscd.akamai.net. comment=\ + wildcard.f.tlu.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=13.74.142.6 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=au.download.windowsupdate.com.edgesuite.net. comment=\ + 2.au.download.windowsupdate.com list=windowsupdateslist +add address=a767.dscg3.akamai.net. comment=\ + au.download.windowsupdate.com.edgesuite.net list=windowsupdateslist +add address=52.156.123.84 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.78.254 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=4.au.download.windowsupdate.com.delivery.microsoft.com. comment=\ + 4.au.download.windowsupdate.com list=windowsupdateslist +add address=cl-glcb907925.gcdn.co. comment=\ + 4.au.download.windowsupdate.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.111 comment=array510.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.69.70.43 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com. \ + comment=tsfe.trafficshaping.dsp.mp.microsoft.com list=windowsupdateslist +add address=ts-frontend.trafficmanager.net. comment=\ + tsfe.trafficshaping.dsp.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=40.69.75.248 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.74.84 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=sds.trafficmanager.net. comment=software-download.microsoft.com \ + list=windowsupdateslist +add address=40.69.74.80 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.175.242.182 comment=array804.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=dlc-shim.trafficmanager.net. comment=download.microsoft.com list=\ + windowsupdateslist +add address=e12671.dscd.akamaiedge.net. comment=\ + download.microsoft.com.edgekey.net list=windowsupdateslist +add address=20.187.55.34 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.231 comment=array513.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.222.13 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=e12358.d.akamaiedge.net. comment=\ + kv601.prod.do.dsp.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. comment=\ + tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=dcat-f-tlu-net.trafficmanager.net. comment=\ + tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=a1856.dspw65.akamai.net. comment=\ + tlu.dl.delivery.mp.microsoft.com-c.edgesuite.net list=windowsupdateslist +add address=52.167.164.252 comment=array506.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=13.74.137.54 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=kv501.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + kv501.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=collections-prod-frontdoor-geomap.trafficmanager.net. comment=\ + consumer-collections-aks2eap.md.mp.microsoft.com.akadns.net list=\ + windowsupdateslist +add address=52.167.160.173 comment=array509.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.77.148 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.200.126 comment=array507.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=52.167.167.59 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.172 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=82.202.162.184 comment=comp-lenta.ru list=NoWG +add address=smtp.mail.me.com.akadns.net. comment=smtp.mail.me.com list=NoWG +add address=17.57.155.37 comment=smtp.mail.me.com.akadns.net list=NoWG +add address=smtp.mail.me.com comment=smtp.mail.me.com list=NoVdsina +add address=40.70.76.5 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.186.119 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.177.176.186 comment=array520.prod.do.dsp.mp.microsoft.com \ + list=windowsupdateslist +add address=40.70.76.27 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.160.43 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.110 comment=array817.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.142.8 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.138.254 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.167.96 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.69.76.215 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.143.200 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.111 comment=array818.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.112 comment=array819.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=13.74.137.53 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.98 comment=array805.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.96 comment=array803.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.104 comment=array811.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.101 comment=array808.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.99 comment=array806.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.17 comment=array802.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.97 comment=array804.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.103 comment=array810.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.16 comment=array801.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=40.70.77.177 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.164.84 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.105 comment=array812.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.107 comment=array814.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.232.161.82 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.108 comment=array815.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=52.167.161.91 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.102 comment=array809.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.109 comment=array816.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.106 comment=array813.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.117 comment=array622.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.107 comment=array612.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.108 comment=array613.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.105 comment=array610.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.113 comment=array618.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.116 comment=array621.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.98 comment=array603.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.114 comment=array619.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.111 comment=array616.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.97 comment=array602.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.106 comment=array611.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.110 comment=array615.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.119 comment=array624.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.135 comment=array514.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.97 comment=array503.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.99 comment=array604.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.61 comment=array504.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.131 comment=array510.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.132 comment=array511.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.96 comment=array601.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.104 comment=array609.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.138 comment=array517.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.60 comment=array501.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.139 comment=array518.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.118 comment=array623.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.113 comment=array820.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.103 comment=array608.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.154.7.100 comment=array807.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.129 comment=array508.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.134 comment=array513.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.62 comment=array505.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.137 comment=array516.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.101 comment=array606.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.96 comment=array502.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.130 comment=array509.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.112 comment=array617.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.100 comment=array605.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.115 comment=array620.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.136 comment=array515.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=purchase.md.mp.microsoft.com.akadns.net. comment=\ + purchase.mp.microsoft.com list=windowsupdateslist +add address=e110219.a.akamaiedge.net. comment=\ + purchase.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=72.153.5.140 comment=array519.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.141 list=windowsupdateslist +add address=72.153.5.63 comment=array506.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.128 comment=array507.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.102 comment=array607.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=storesdk.xbetservices.akadns.net. comment=\ + storesdk.dsx.mp.microsoft.com list=windowsupdateslist +add address=e16646.g.akamaiedge.net. comment=\ + storesdk.dsx.mp.microsoft.com.edgekey.net list=windowsupdateslist +add address=software-download.microsoft.com.delivery.microsoft.com. comment=\ + software-download.microsoft.com list=windowsupdateslist +add address=download.prss.microsoft.com.akamaized.net. comment=\ + software-download.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=72.145.35.109 comment=array614.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=72.153.5.133 comment=array512.prod.do.dsp.mp.microsoft.com list=\ + windowsupdateslist +add address=213.180.192.0/19 comment=YandexDisk list=NoVdsina +add address=87.250.250.50 comment=YandexDisk list=NoVdsina +add address=consumer-prod-bcfd-v7-afd.trafficmanager.net. comment=\ + displaycatalog.mp.microsoft.com list=windowsupdateslist +add address=purchase-europeeap.md.mp.microsoft.com.akadns.net. comment=\ + purchase.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=ne-az-conspurchase-mp.trafficmanager.net. comment=\ + purchase-europeeap.md.mp.microsoft.com.akadns.net list=windowsupdateslist +add address=storeedgefd.dsx.mp.microsoft.com.edgekey.net. comment=\ + cdn.storeedgefd.dsx.mp.microsoft.com list=windowsupdateslist +add address=star.f.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.f.tlu.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=a1996.dscd.akamai.net. comment=\ + wildcard.f.dl.delivery.mp.microsoft.com.edgesuite.net list=\ + windowsupdateslist +add address=cp801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=glb.tas02.sls-prod.dcat.dsp.mp.microsoft.com. comment=\ + tas02.sls.update.microsoft.com list=windowsupdateslist +add address=cp601.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + cp601.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=star.sb.tlu.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedgeextensions.sb.tlu.dl.delivery.mp.microsoft.com list=\ + windowsupdateslist +add address=star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com. \ + comment=msedge.sf.dl.delivery.mp.microsoft.com list=windowsupdateslist +add address=cdp-f-ssl-nlu-net.trafficmanager.net. comment=\ + star.sf.dl.delivery.mp.microsoft.com.delivery.microsoft.com list=\ + windowsupdateslist +add address=tm-pifd-prod-gbl-weight.trafficmanager.net. comment=\ + paymentinstruments.mp.microsoft.com list=windowsupdateslist +add address=10.30.30.33 comment=NUC disabled=yes list=NoWG +add address=10.30.30.10 comment=MikroNUC list=NoWG +add address=89.110.101.17 comment=!!!VDSINA!!!! list=NoWG +add address=89.110.101.17 list=VPN-Server +add address=80.85.244.9 list=TRUSTED +add address=8.8.8.8 list=TRUSTED +add address=8.8.4.4 list=TRUSTED +add address=disc801.prod.do.dsp.mp.microsoft.com.edgekey.net. comment=\ + disc801.prod.do.dsp.mp.microsoft.com list=windowsupdateslist +add address=185.71.70.78 disabled=yes list=TRUSTED +add address=176.53.203.171 disabled=yes list=TRUSTED +add address=176.53.203.170 disabled=yes list=TRUSTED +add address=176.53.202.194 disabled=yes list=TRUSTED +add address=89.110.101.17 comment="!!!VDSina Server!!!" disabled=yes list=\ + NoVdsina +add address=149.154.164.13 comment=telegra.ph list=FuckRKN +add address=109.70.26.37 comment=grani.ru list=FuckRKN +add address=194.85.61.76 comment=grani.ru list=FuckRKN +add address=104.16.4.81 comment=xhamster.com list=FuckRKN +add address=104.16.3.81 comment=xhamster.com list=FuckRKN +add address=188.114.96.1 comment=lostfilm.tv list=FuckRKN +add address=188.114.97.1 comment=lostfilm.tv list=FuckRKN +add address=172.67.182.196 comment=rutracker.org list=FuckRKN +add address=104.21.32.39 comment=rutracker.org list=FuckRKN +add address=104.247.81.99 comment=lurkmore.to list=FuckRKN +add address=8.6.112.6 comment=dou.ua list=FuckRKN +add address=8.47.69.6 comment=dou.ua list=FuckRKN +add address=66.254.114.79 comment=youporn.com list=FuckRKN +add address=185.110.92.40 comment=pornolab.net list=FuckRKN +add address=185.110.92.41 comment=pornolab.net list=FuckRKN +add address=104.21.71.238 comment=crimerussia.com list=FuckRKN +add address=172.67.172.95 comment=crimerussia.com list=FuckRKN +add address=149.154.167.99 comment=telegram.org list=FuckRKN +add address=149.154.166.110 comment=api.telegram.org list=FuckRKN +/ip firewall filter +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=12h chain=input comment="block honeypot DNS" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input connection-state=new dst-port=53 \ + in-interface="ether1 - Unet" protocol=tcp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment=\ + "block honeypot ssh rdp winbox" connection-state=new dst-port=\ + 22,8291,2222 in-interface="ether1 - Unet" protocol=tcp src-address-list=\ + !TRUSTED +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot asterisk" \ + connection-state=new dst-port=5060 in-interface="ether1 - Unet" protocol=\ + udp +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=5d chain=input comment="block honeypot NTP" \ + connection-state=new dst-port=123 in-interface="ether1 - Unet" protocol=\ + udp src-address=!10.30.30.0/24 +add action=accept chain=input comment=\ + "accept NTP clients on local area network" dst-port=123 in-interface=\ + Bridge-LAN in-interface-list=LAN protocol=udp +add action=accept chain=input comment="accept WireGuard" dst-port=13231 \ + in-interface="ether1 - Unet" protocol=udp src-address-list=VPN-Server +add action=accept chain=input disabled=yes dst-port=443 in-interface=\ + "ether1 - Unet" protocol=tcp +add action=accept chain=output disabled=yes protocol=tcp src-port=443 +add action=fasttrack-connection chain=forward comment=\ + "FastTrack for non-VPN connections" connection-mark=!VPN_No_FastTrack \ + connection-state=established,related,new disabled=yes +add action=fasttrack-connection chain=forward comment="defconf: fasttrack" \ + connection-state=established,related,new disabled=yes routing-mark=\ + !To-VPN +add action=accept chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid +add action=accept chain=input comment="defconf: accept ICMP" disabled=yes \ + protocol=icmp +add action=accept chain=input comment=\ + "defconf: accept to local loopback (for CAPsMAN)" disabled=yes \ + dst-address=127.0.0.1 +add action=accept chain=output disabled=yes src-address=127.0.0.1 +add action=accept chain=forward comment="defconf: accept in ipsec policy" \ + ipsec-policy=in,ipsec +add action=accept chain=forward comment="defconf: accept out ipsec policy" \ + ipsec-policy=out,ipsec +add action=accept chain=forward comment=\ + "defconf: accept established,related, untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid +add action=drop chain=forward comment=\ + "defconf: drop all from WAN not DSTNATed" connection-nat-state=!dstnat \ + connection-state=new in-interface="ether1 - Unet" +add action=accept chain=input connection-state=established disabled=yes +add action=accept chain=input connection-state=related disabled=yes +add action=drop chain=input disabled=yes in-interface-list=!LAN +add action=drop chain=forward comment=\ + "Filter Rule to block FB address LIST : )" disabled=yes dst-address-list=\ + facebook +add action=drop chain=forward comment=\ + "Filter Rule to block YOUTUBE address LIST : )" disabled=yes \ + dst-address-list=YouTube +/ip firewall mangle +add action=mark-connection chain=prerouting comment=\ + "Mark VPN connections to exclude from FastTrack" in-interface=WG \ + log-prefix=Mark-VPN-FT new-connection-mark=VPN_No_FastTrack +add action=mark-routing chain=prerouting comment="Test sites" disabled=yes \ + dst-address=!10.30.30.0/24 dst-address-list=Test new-routing-mark=To-VPN \ + passthrough=no src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment=Instagram dst-address=\ + !10.30.30.0/24 dst-address-list=Instagram new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=Twitter dst-address=\ + !10.30.30.0/24 dst-address-list=Twitter new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=YouTube dst-address=\ + !10.30.30.0/24 dst-address-list=YouTube new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment=facebook dst-address=\ + !10.30.30.0/24 dst-address-list=facebook new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 src-address-list=!NoWG +add action=mark-routing chain=prerouting comment="VDSIna for All sites" \ + dst-address=!10.30.30.0/24 dst-address-list=!NoVdsina log-prefix=VPN-all \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +add action=change-mss chain=forward comment="MSS on WG" new-mss=1380 \ + out-interface=WG protocol=tcp tcp-flags=syn tcp-mss=1381-65535 +add action=mark-routing chain=prerouting comment="VPN Network" dst-address=\ + 10.8.0.0/24 dst-address-list=!NoVdsina log=yes log-prefix=VPN-Net \ + new-routing-mark=To-VPN src-address=10.30.30.0/24 src-address-list=!NoWG +/ip firewall nat +add action=redirect chain=dstnat comment=\ + "FORCE DNS TO LOCAL MIKROTIK DNS SERVER" dst-port=53 protocol=tcp \ + src-address=10.30.30.0/24 to-ports=53 +add action=redirect chain=dstnat dst-port=53 protocol=udp src-address=\ + 10.30.30.0/24 to-ports=53 +add action=masquerade chain=srcnat comment=WG dst-address-list=!NoVdsina \ + in-interface=Bridge-LAN log-prefix=WG-nat out-interface=WG routing-mark=\ + To-VPN +add action=masquerade chain=srcnat comment="masquerade Default" ipsec-policy=\ + out,none out-interface="ether1 - Unet" routing-mark=!To-VPN +add action=dst-nat chain=dstnat comment=npm dst-port=81 in-interface=\ + "ether1 - Unet" protocol=tcp to-addresses=10.30.30.33 to-ports=81 +add action=dst-nat chain=dstnat comment=amster.vados.ruhttps disabled=yes \ + dst-port=443 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=443 +add action=dst-nat chain=dstnat comment="amster.vados.ru For Certbot HTTP" \ + dst-port=80 in-interface="ether1 - Unet" protocol=tcp to-addresses=\ + 10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat dst-port=80 in-interface="ether1 - Unet" \ + protocol=tcp to-addresses=10.30.30.33 to-ports=80 +add action=dst-nat chain=dstnat comment="Yandex.DNS Family" disabled=yes \ + dst-port=53 in-interface=Bridge-LAN protocol=udp src-address-list=KIDS \ + time=6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +add action=dst-nat chain=dstnat disabled=yes dst-port=53 in-interface=\ + Bridge-LAN protocol=tcp src-address-list=KIDS time=\ + 6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +/ip firewall raw +add action=drop chain=prerouting comment="Drop Honeypot Hackers" \ + in-interface="ether1 - Unet" src-address-list="Honeypot Hacker" +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + extras.getpagespeed.com content=extras.getpagespeed.com disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=linux.duke.edu \ + content=linux.duke.edu disabled=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=vk.com \ + content=vk.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=ok.ru content=\ + ok.ru +add action=add-dst-to-address-list address-list=Instagram \ + address-list-timeout=none-dynamic chain=prerouting comment=Instagram \ + content=instagram.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting comment=Twitter content=twimg.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=x.com +add action=add-dst-to-address-list address-list=Twitter address-list-timeout=\ + none-dynamic chain=prerouting content=twitter.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting comment=YouTube content=youtube.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleapis.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ggpht.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=youtu.be +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=ytimg.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googlevideo.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=gstatic.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=googleusercontent.com +add action=add-dst-to-address-list address-list=YouTube address-list-timeout=\ + none-dynamic chain=prerouting content=nhacmp3youtube.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=rutube.ru \ + content=rutube.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=me.com \ + content=me.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=icloud.com \ + content=icloud.com +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting comment=facebook \ + content=fbcd.net +add action=add-dst-to-address-list address-list=facebook \ + address-list-timeout=none-dynamic chain=prerouting content=facebook.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=comp-lenta.ru \ + content=comp-lenta.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + smtp.mail.me.com content=smtp.mail.me.com log=yes +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=gov.ru \ + content=gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + r78.fssp.gov.ru content=r78.fssp.gov.ru +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=api.db-ip.com \ + content=api.db-ip.com +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-dynamic chain=prerouting comment=\ + api.telegram.org content=api.telegram.org +/ip firewall service-port +set ftp disabled=yes +set tftp disabled=yes +set irc disabled=no +set sip disabled=yes +set pptp disabled=yes +set rtsp disabled=no +/ip hotspot user profile +set [ find default=yes ] address-pool=dhcp +/ip hotspot walled-garden +add server=*1 +add server=*1 +/ip ipsec settings +set accounting=no +/ip ipsec policy +set 0 disabled=yes dst-address=0.0.0.0/0 src-address=0.0.0.0/0 +/ip ipsec profile +set [ find default=yes ] dpd-interval=2m dpd-maximum-failures=5 +/ip proxy +set cache-administrator="" max-cache-size=none port=80,443 src-address=\ + 0.0.0.0 +/ip route +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=3 dst-address=192.168.0.0/24 gateway=l2tp-vpn +add disabled=no distance=4 dst-address=192.168.5.0/24 gateway=l2tp-vpn +add disabled=no distance=1 dst-address=0.0.0.0/0 gateway=WG routing-table=\ + To-VPN scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set reverse-proxy disabled=yes +set ssh address=10.30.30.0/24 port=2222 +set winbox address=10.30.30.0/24 +set api address=10.30.30.0/24 disabled=yes +set api-ssl address=10.30.30.0/24 disabled=yes +set www-ssl port=18443 +set www address=10.30.30.0/24 disabled=yes port=18880 +/ip service webserver +set graphs-plain=no rest-plain=no webfig-plain=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ip upnp interfaces +add interface=Bridge-LAN type=internal +add interface="ether1 - Unet" type=external +/snmp community +set [ find default=yes ] addresses=10.30.30.0/24 read-access=no security=\ + private +/system clock +set time-zone-autodetect=no time-zone-name=Europe/Moscow +/system clock manual +set time-zone=+03:00 +/system identity +set name=MikroMaster +/system logging +add action=email disabled=yes regex="* added|changed|removed *" topics=\ + system,info +/system ntp client +set enabled=yes +/system ntp server +set enabled=yes manycast=yes multicast=yes use-local-clock=yes +/system ntp client servers +add address=0.ru.pool.ntp.org +add address=1.ru.pool.ntp.org +add address=2.ru.pool.ntp.org +add address=3.ru.pool.ntp.org +add address=time.google.com disabled=yes +/system scheduler +add comment="Scheduler for Update Certificates CloudFlare Quad9" disabled=yes \ + interval=1w name="Update Certificates CloudFlare Quad9" on-event=\ + "/system/script { run Update-Certificates; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2025-11-28 start-time=05:45:40 +add comment="Every Day Set Global Environment Variables" name=AM-SetGlobalEnv \ + on-event="/system/script { run AM-GlobalConfig; run AM-GlobalFunc; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Update Scripts" interval=1d name=\ + AM-ScriptInstallUpdate on-event=\ + ":global ScriptInstallUpdate; \$ScriptInstallUpdate;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Update RKN DNS Looup" interval=20m name=AM-RKN-dnsLookup \ + on-event="/system/script { run AM-RKN-dnsLookup; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +/system watchdog +set watchdog-timer=no +/tool e-mail +set certificate-verification=no from=MikroVados port=587 \ + server=smtp.mail.me.com tls=starttls user=vadossio@icloud.com +/tool mac-server +set allowed-interface-list=LAN +/tool mac-server mac-winbox +set allowed-interface-list=LAN +/tool netwatch +add comment="doh, doh-url=https://security.cloudflare-dns.com/dns-query, notif\ + y, name=CloudFlare-doh IPv4 1" disabled=yes down-script="" host=1.1.1.1 \ + http-codes="" test-script="" type=simple up-script="" +add check-certificate=no comment="doh-fallback, doh-url=https://security.cloud\ + flare-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Cl\ + oudFlare-doh IPv4" disabled=yes down-script="" host=1.0.0.1 http-codes="" \ + port=443 test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=Google-DNS IPv4" disabled=yes \ + down-script="" host=8.8.8.8 http-codes="" test-script="" type=simple \ + up-script="" +add comment="doh-fallback, doh-url=https://dns.google/dns-query, doh-cert=GTS \ + Root R1, notify, name=Google-DOH IPv4" disabled=yes down-script="" host=\ + 8.8.4.4 http-codes="" test-script="" type=simple up-script="" +add comment="dns, notify, name=Cuad9-DOH IPv4" disabled=yes down-script="" \ + host=9.9.9.9 http-codes="" test-script="" type=simple up-script="" +add comment="doh-fallback, doh-url=https://dns.quad9.net/dns-query, name=Cuad9\ + -DOH IPv4" disabled=yes down-script="" host=149.112.112.112 http-codes="" \ + test-script="" type=simple up-script="" +add comment="dns-fallback, notify, name=ns1.unet.ws" disabled=yes \ + down-script="" host=91.192.189.2 http-codes="" test-script="" type=simple \ + up-script="" +/tool sniffer +set filter-interface=Bridge-LAN filter-src-ip-address=10.30.30.50/32 +/user aaa +set accounting=no diff --git a/MikroMaster/history/20260505/20260505014001-Diff-Config.rsc b/MikroMaster/history/20260505/20260505014001-Diff-Config.rsc new file mode 100644 index 0000000..22c5223 --- /dev/null +++ b/MikroMaster/history/20260505/20260505014001-Diff-Config.rsc @@ -0,0 +1,12 @@ +4165d4164 +< add address=109.70.26.37 comment=grani.ru list=FuckRKN +4167c4166 +< add address=104.16.4.81 comment=xhamster.com list=FuckRKN +--- +> add address=109.70.26.37 comment=grani.ru list=FuckRKN +4168a4168 +> add address=104.16.4.81 comment=xhamster.com list=FuckRKN +4179d4178 +< add address=104.21.71.238 comment=crimerussia.com list=FuckRKN +4180a4180 +> add address=104.21.71.238 comment=crimerussia.com list=FuckRKN -- 2.52.0