From f94038c5e74bdd44a739ae37e52d98155facc2e4 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Wed, 7 Oct 2026 10:20:06 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at Oct 07 10:20:06. --- .../20261007/20261007102001-Binary.backup | Bin 0 -> 243756 bytes .../20261007/20261007102001-Config.rsc | 4340 +++++++++++++++++ .../20261007/20261007102001-Diff-Config.rsc | 8 + 3 files changed, 4348 insertions(+) create mode 100644 MikroMaster/20261007/20261007102001-Binary.backup create mode 100644 MikroMaster/20261007/20261007102001-Config.rsc create mode 100644 MikroMaster/history/20261007/20261007102001-Diff-Config.rsc diff --git a/MikroMaster/20261007/20261007102001-Binary.backup b/MikroMaster/20261007/20261007102001-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..cd3af988da45eb09887002b8423c777b08e2d5dd GIT binary patch literal 243756 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 )z}aPMA|@%>Bf|``HJD zoE`fFF<(&Kk>FwID=-LVPf-}uSegd0V+3srD8iV~jlkJhpg=@@|mkohC` zgpYgprRRkY3xfh;tFh|W52zr~I|XPAAbVWsX}m6LF%CA7s&IUF|JuwU6|B??v5dQsaC+$K5~JJh8^sP*|x zM%!j>q_&5hD zL%x3~+)Z3n#kdl3z}HPN=T7+rO;vg(5EQS{pohyAYQhu2k}3(~#VjCvu~nXsiz(mp zJ&Ai4o)kzB>efa1`OxDC!?B9Z?CU3n;&8mC9+l7JNzMsuD8Of_)~|Pf8lzSr?Lp;t zBzbA4_?@uT;6kJnTxIq<#e_J&w6|K!xxKf{|Mt!pAi*MDd+EifkcD3EUEltqNRZ2s zDIA(ClwftKH5Z56V241U{+b*|h7V*HbYbqK(a`b1<9;Su_Asa$gKR4%^VTHRDRazZ z6`MEN*Y$gBK@Cclqy0Vt5UT}Au0LVPp0IQ}K#ADM15HeBma%icqhRl6dpv3=Ks6$0 z9NKV2a|@|)w5J(t7_|*d(lL}|!rHwW?~)w_hLk|kq06rh<@HiIfF(JCA1$_soj61| zQa>&Pm$usOaFQa&5a~L7zi>)kyMExr>c%A5|5NHb0bq0KgQ{0rWB-^oUFWIEY;hA_ z^KkOim{!gL)PxxNgXV|xL@qyZPn*+Vs)S|y(DYi)r%ETsikYg;Zz|y}0=ENKn~`kV zvj&_In#xBR)ukAzxP~Nndp}s{321FTa`>}vGfabXQ|G59tj3HDiXGz(W%Im}Ate_- zVpH^U?ntKv^31em@Eov^oASV$IZuEQnb6z}+FylxM20gKTPhukyg_{W1{cZ*VS6M3 zrF{cR(}gm8^FEVSn|s2hGYBEKiM7cRSe|VvwbgF!gsC-dA=>y1BmZ9nnB$41Tsidc z30oZE!?nz(ef#3EVPU-*Dp8Xu-v__K1zO#GHpy&nv5l)q3Ac1>IU+2zHQBklBHgp1 z8W8at=HHz=S6Ur+b^5!;r`$&O0^em0>$;o`9p+mKLZ0^$dL(%X*T0I-6BhA)zp4RD z;~7!Zr~7RfMqa@}Bs}t!?!%8`&=kiqKH<&%!y&UQ?EQWj%W@~_S}e=22D{SSI$kPz zAT{U*QDbE5ABqMJ-zMjCegLf~)#vXBAirIIe(N4#|3AWH4rCahK(k_YfDr=HN(V^- z_kI9un$G6&R7U^g!tGR`=DI)-k1gJ^V<>Tmm{!m8M8Nay#qFqEK z6ukHkg9IW=r>)7#l-K;A3n2SuRL-7x*lp+VGk(YVme+!)$sTRNb^pHEKFAeo;j@-vjOmY(1IWZ~9S6538`NX3+t)*ID`_i6b!HQs0Olx%Skgx_EhC@oPpm4gp{nGt zw&>Rf_Z_9|{5+a1%E5N-Jc;Ydo{T7_=dbBo%4F^wL!&=|qlHXK-o{__n{-?s-LwR0 zkpK-}qT+(j|1i^(KJtvs-~Hxpp%{B;9z8}2g9wE%WNno+<*c)HN(Rp!M^4VDQ!^N4BNUSR}ndY(!QgaL7%fuE>jZ(oPFyBLK|`Y!0k})c@>3Y zZUkye<|}}rSZ-FsCn0eVgaWYa(ilJda!jFXVzbSYU$%)B&2O$Eyc%;gAX}h!sHkPb zLGk$#LTkPZA>GaTpdF78!4mA3cup*8xD1{{BS5N z0S&G!S95t@F55dzq>b!C2GOB5J-M?l7C}YqWML>Y)2JLi8~AEQ_2b6>*xk7D7&+4& zhQ0DaAi)(FsdL3fj~A_5G=^S!@w{4#&)E7;>{a&XV|ijXmp2;W+3RAYH!{g1M(-JE zFQ%Y5ivPdQIaJ_KxdYnwNxJKR5wafE!UnU>IgkN7r0radnJcEqmY=$p`DoYQ!)W8gqo=7#cF9^Q9MnVb{9IT2K$D) z5rr=0?U;-i9p~atUEPx0(}x+dEztXA|3Gq;N0^x3)Pu1g@n>3NY`~y(&|8X%C*^(1 z$L5R|ddO3f`bGzD!E&NEBH7(uH=+wc$rz#G@;SGc4jjot&6KHv>PymoA%`L2mFaM4 zl=}d~S|nVxHf9!>kUMC-o=I9J--2+AB$;iAk-Vl0Gl&{f$gq!3eG8z)u$okj`afj; zlv!E}f^0dbz0a@&Wl&9^#QS*45SxQ@(z&cUWMxM@hYEX6$(3JgBE&F0BW|8!e%%W^ z##U!4e?`I`{DfpaHhxLl!`fQ!Cwt-rY3kh8=Sr$~zq*#;3cArw!9gd`fNs5)f<(}- zKBd&)c|R_Vo;~XUYA+UJgTh^iB6J}?GG8uD;jF*bzz;Q||F&+ZhAT+T1C!hSE3QvM zdwWDqX9VZ3H+OXX>hhwFMg9?MC4CLe4I&qjF+6Le3{PkPi5HONboa<;b*?jciW{1i zj8bsIY>F%e41$prcD`?(B${1ZnZ*MYgCcb-XTN_KalSrHP5TL0Ad#?Zu9yf7{_4uK zF)48qU9A8oL6jo)jXd67aT-z?3GI4sOt`>sqpL*M4x3d`PAtkptOK> zo8kL|v9hp?wq($zY52pGBRs4;v8Bbbv1+tI#^;~Rc|HSA&Kt5)Dic;q?eJ_O;3PL1 z!Rs|Ne!J??L+Dl59eOo(UiggCX>woj0p&5qNUd2S1Zz;;5E3ZX)I{JDu=G=i;p&(0 z7>%fP94`BDK_Xw7Xo8CiSmaH=fV?5af3M2V;yN&9@_=2%B@8j_3=ld%q-F|9v{o{h z;hh!#c*mDG=)us@0_{6KzqSVig0r|rk!}->H*lvBk*Yx04M;k^=_^p0m506Xeh$4;LYYC-tJxMcO!Yg~%h2PuOE&rCDc3522tSclu@maH?h!RUBQ_ zVzuYq2Sjl%(*!jCe8Mkbc1~NkYD(8#v<&?x5fjC36C9!8>+t1;A3bPZA`^mT@1~4$r--pGBLe?(Gm(xHDhZF zwg>3*yduSd<1E6tlMhb_)yO1L-!Jp*#eE(Y#%iX3@Rd`V$xN*qOfYwj{D{94Coc}u zlhi$wk61qUzX5=|GT^0;C931r(QqZD&Kc+7p_V4q+_r3>?rU?8sIvC8w<%VPJ4$yI zbyCM6M-`ycvm?#|5ojdIUI!3^3OOb#1sH4{M!v?=)DVNIe8pjl&$Bg^QZcPlzsSQ) zkwxJwPWlGdW;G!k7u2A(g0;bAQx7J3cUJH`nm})07zrBR1}LzbDAkAhK0dW1$$qCt zfoM(KI7b|#9_@z7}d{(#1g?IxmAC7K#TQQ3Pa!lSOA2s9snVu*E+>CYWZz0+=jt?<-DKkI`qoo$! zK+=~qI-t^P!o@Zx^tLx+y+Qdh7-cM`{jM?s6u?#wdkXT1^CMg-6EM%3oO;f$(Mbns zUd$U2TK=%G#<;OT)1LZY1#c^u8D_0%DIvG_y(z4D3bG5BBiPdrmHKL@n#~#cDdhHN zmo$ZVmH3oOc9_{(NHQ2s0N1bFK|~pntiw}TR)ALSfTitold&aZ^$kCFeP4iMd3-21r{AC*5#5o?L7Xu{ zg)t5PiKdzX{objrBAOL94r{1ZTxjO_8Cpxmp zt(~@Voc;S6ka`+!LJ|ibDz>Hfu-Y~K59Z>fiA4-kjIoKgFn`KmIdE`{4WN z7ns5*k-Nqa{0B_MSVq?Db{4pLbr(?3{gb@d8~p(c(WcY7b@PH5Yx6@#4d5smzY}$>05ysn%9a^wu~D* z1(PK5<$7UHOgPqu`bbD@4$E>Djf~~gb-gm7+ns3-fo)2iBNuKqhlkFDpqsqGImU=z znYX>o9-4Ao`G=On(}>3R?&D#RraQn&S6979Vlj3wJ!m;rzlgsdGu{!KK4_%H55Q~G zRu*fOTnD8^8AKC>^U8w+qb&nOl_aT*#=z*^Uy)yADEvzry2|1xWrVzrOM+#;4zlU1 z0d`XY@)F;;;(q2>zpRfpY z1y9F=*&y}spH+sq9HP>dw-_qg0=$+VVs-3!chH~}7-l0`hXPfDHMMXz5?}W1~*_(!j zoPAs#x3*%sc7JBFzLE&&Oehh^;K0h3bad+VGb6tjKHib+pZ(tnjEAGFnS$eJ&_QoPq=BZ*qGSo4I|kM%QMVi6;C}pR+Z~#2BQB<%M?3A_ zW3&6n?y%m{PdnN#?34jnkzQVk`qw{ZS`){(GtEW_<1;Fd zmG-NV?Nxbg`Cms#_`rmmMbu--fE8?R6-lfiek?Sy+cqX9uO{WO9tt>k-CQMGajs9BJHYQ5lP77_SKYB34hFbkvqA;vI~e)!WTeNS$?F@cb#Yta z+`x6k@qk)+j?C|a%kaV=#a+SEXI!Q4e4D)gO3-Dfe^Xh$?s~apdhPw}m`!%xx35wf z)E#L^hdmuFT8MeBcWq9Ji0Vov)q%y*dvaw^SaNcft%*IAG5eGph`93EaFUIXS*DVd z8~O^BR2Xpy!#WpIO;Njjey38+^1(0>&6PH;H3!qF7W|)(07vvg>&&wtr z>v90s_pJn5x#~_~yGF zADXh+xV_3V=EwZ%KUV8L2)H>BHP|ukjDl-vG{Nr>yMI<4|6+_Of|!aN;@wQcKNm6@ zGH>^r*=|`_%iXcqrR$GP1Y569-nR<;EI*LSgxo*)j;fN}{YT3e=c9#u!;(^mZE1GY z#Xvmz#pQkhirz%=`C&p4jQgx#P~NG-V8oz&6`KB&LDU;G6Vs1YcyZqplFd=AivJZ+ z^}d{}X&n!%ZEBMtJ8+N$GZ$}BMm>7CZF(S=CS}GB8_EU}^Upw`J_e$y`FC4KPE&GL z{q+$cWWZbEWZYd-KkypTb9%YZt?V7cJ~LL0O}IJ+pxOeE#GJz1=if}{g|44NS9Mbz z24#THb`64ISOu*9bqM}vgS8jA?DLr^bJ;u#X|%@AN$ALv|GQ!#H$`FGtvQWAUd`TL ztV17C7quE-9*|4nj2>*4;B!hh7BE)J%aCu61U z7Ll{(>ax^M^f9rpYr1OA_DYeCo-Y0U^!5i}3mk^j`4&|eMXEmkZ!R2tBJ(tb z$|kar9{m!>ZEyC-%`_nPnEuBDD7h6CE|?T_eU<-hlRd|D{ z87^tQt9zCmnj;RGdS*hK6QeH4fLq9Tu_JyR=lo!+>MVTcvgQFS6_O`^|MiB?KDRT^ zGsLkL^_+NScY9YGDq2#>ueLNWPC;Sbve67bI>1R#=$x&Owoy5@y3GXaa@l%Uc5Uqv zTy-X@pBPUL?yUG6)%%a5= zVwC7PK&a6i{c4+h&oct{m~D9w*~jZ40cn^UF}mZ(D?}2+lhOgU!+PlS42P4W9psEs zQn@xU;~a(+hmbb^SN*tBH*0H<)P4Gw^DUhD-kdg(Es^;tOa004H8y9`~`!C#- zQo!)vw(98Of7z+HRfx%L0YKZ`ka~y?nIi{~f`ae|OP^r`)%(fX2@%|()Z=cHLMQ$Ym`)CINDZr;W;PEpwyv3lM1#h#ilC^N0e2u{>mg+FaNf><(H0zy7-)UU`}EH^CJ(SYb3 z(`XF~!LvJ%S(@2nSo=uM)nkiVJ<(QPx9L$5r3z-gjS%@>+ybyL;{OJl#s>(H4lAnO zy!b^Y)$ySn&T@s#K={OBpff zvxaGR z2hm;AYiUW4NfHfJgpCbtvxrh168=5_qjSq*ldeJ=6Tt}Rl4x;fxvq@VLg(e*D`*zX z_lnM(nBtp1*=7?50t-)HQO;UHlR{3CZ<%eN|5uX$2o%)1aw`|0S&dV7@^MCUBM}uZ~UDaP+yg>YUf@7yZ1ryLXSXZL=E7;2&Yt zJjFc@871^s6bkp_SVhNY|KeNCBwUbWd$@p&CF4jhS%!BWHi};xX8G4x81?M(3|eVg zlT6B@hYk^r5Zz~zDSd=Fvsk#mmfK!+-fBbdPk81=pt?`bK_1a19^fkeW?_p)`B<=a zc$qw)+0M`9Q!s*1h(TQ@writrB(Yg{D@|=@c(R(8zl?U4O3B2fQJN%X%~;(R%zQ0p zkirmbrgj}L>hx2s!QhTdm%Ka#&e{*>YQ$bU=~jPq3ZDY8owSY z#{Z`oQw8tS-e~lWgtk>WR1H6#%{Q%6Xk8I(@FDTr$1Y3h)53t<5|Ds~NTpIorJ22w z%j$|4b_KLpk zg)bL5qV?^snO;2XF@=(8Be1}A!#1$k+=W-MYrdS$<1Pa!#`Gf!It zN@wznJ8Jg!sMk=XWUctECr8OT-XFe`(okR+!+VaB$%75dWf}=uwPr++p2kzQlq2@2 zgQzLOC#{cJSHa`Y>;aW=vFGuxscZb0%faPqVJNX8R-=);T22tnMbm6k%S7~9;Pu)d*MBB=Yy4e_D+gFIm!+$GJMxy_ zs*|Zm#JOp~skuxB&O^)20eHMwD=&-N*X5pRU@#O)sG4?Q`?P!FN@i7*y3c6Wj7O4yM6l9e%t*u< z_-$8i#}C4#5Z#@W85=@%bu_Mrdw#J`fQwupoF9|W=)JQay(Sdah`PtO?5uCN#I_*< zeRI$+E<0h&S;({CgEp2YOEzmWV%Ikou-E5|bzj_JaElXV%i@46$2*FOtMUg`<74lEq8e735bf%OBOj{tPAbKZ zG(Lj_@a@yp^@T&YNcv)yL%ulT3I>MqxG${9DXPY~t8E~kPFtjoq zC{&q#L?@Wa;Rx)Z@Dc&xffwz2HIDn#gA0Nha~>!Qf&prKn)#e~q6PVQ=gg7^6Emdc zzX;hYapZDP|0N#0!P2F;LEc8IV%~JHue75LD%_YgSVmD1G`k~W^)X*MkY6!J0PqJq zp`Fp5VAk7K+p}OhgdBnPNG6mOAR|n&Pa;l^qn$>@>QU#LgLxpnUS#iTfQp;lP^@xM zbrtl`yv(Eckv|jzz!{g00eS=&?4WrB{`B|?0f{WjPZG9dh|Y5b(sNHu&FQjg0dZBL z-mjFBcn#KsP-t|~C~Ug4*K1x4EqH9VfR=-zE*)&~tAX$pij4?VQZfoigg-hNj}8=^8+-9a^_mv z5m`3a#$46WfpZ!d2sg5s-gxWUzJ{@C9;0dOt~?I$a)q&ZNLEawz254w+}Q(>8K6q4 zPEO7rip&&a>Is4NLE*NB3D>b3qQ1FrrJr{g&h0Z|fe>0*y>KhW0?gQnrP#Ta#H zJqyiypg*v)?m4_WxG+?*8k30@A-G#USrP~Gf`6DVi``amdZYaZx5V{`@IjKyzym7k zQUWW>;&C)NCTu&0RPhQB4-SwtCNxDY=XTyhH9s)6##&0Rg?0Tw6XHUFSt?*;n(B4+ zSIJW@=IjK(w0<#tSO*>sm0Zhz18L9EGcubv52HZ8^nmA9y34s{444V9_?rgJUEwhs zGm~}1xGOO3JXDdAH6z)PGU4ZH+cV+SRVy6|F$9d(aRgdikoeuZ>1dvDdwn1!6n*0Bw8Ten$DxNXU1j`kBX~5I=326!@x;o@d8cwP0 zciC4}SM7FH4;`7`4Ey>P#Xr;aPPiF~fpW(Dre+R(3Oc^Bmn+y-I(@Sh%v)J1SEfC% z{)2Ow?J#}5OWPE!(o~T!`oPku0Po8+QWuw#{!)L$8nZ_8Z#a&CNt4!1#a7YaxgDP< z=bdb#>w=c47m_%p%`SWc8QVjFt((N5DPlf_~8GV9dJ?FxtO)-ZNfATUE1_#00r&ZGDW@6}Mw ztMGQXxz5k43IAlbKoPWJHIV;%YwVa%HPoIbx|phx1n%jDd96v^MB+ecm;rn8W+&!2 zt|Ue~Wt%;+oR8!v$A#SjF~y3_mxnUo`3WYu-}xJs1vsg4DK@78$b9*jQr`qx>;{WG{$Tg*`x1ZVeuMxj8(<#Mv66+!4wJ_|+{(Fx0h$Av&+7+12SI`E3T z8L%^n6h2PrNdvXh!#_CLatNGJ2f^Lx!Dcutc15aXU~Bj)uSY~+c-|$4fT_fsGVhtD zXf_cMxM(X=M?3p_>-;8gSw+*Ny zQJg%dKhCFrvWhb`9F@R1;(Y&jSvtNuL~VV!Uw?&In!?o{DwAI?IDK! z2h192(nHC?$c!XAF=OsZwTMV=!}*Dv&)qe8SXXcx zyPdAj^|Qam$$X;!wDH^|(Rq)RVd)vJ{@gpdZ<aHu2ZTtS+eeA+Zh zW#yJP4rq1drVu$fH%znA-o}>{dddp%zTtoLGx^wMB_uVg5(xWWrnTvJjD%0J%j|2-UCPI8-Fy#&Q41v6K&v{Pa=QhsOL9i@%qz68)gvE(Be2qJ)t#iey?4}5UlryFo41N!y}GCYTb zMU01*BLulpfe9aho#(=$E27-Td00%KSMUfut@eo-MdZ!{Te~%YW7Mu>6kTD9R={?q z^Vsjvo;(YtU1sKd_yW~By=0+ zst*HblK#_y1gNgq8_w7`u7B#qn7rXJ zmL@Yoeq4AHCg}Js1saWe#XNWP=(-0(RU@3uZb{dwThl>+7rCwWTq?YNUJbtKWsIoD zW5gsFj7L(CE!x{oLSeqN*%TQIJtT($zI)4_n=;VDZ}W(F6pl=9;E=t$6vijn{Q~vF zp}gdC2%P#s5K3~JjHm4Z6TOaVN9%(H*LK)DsmI46SFl_bEEAwt>@}UQ z;XLGD_WcNfRLX&GI~j9iE;J#`%Ha1xE4$Ghab-|LwAW7|e1LK&`3V}={Y*3(?30l< z8&l6g&4I*EqSN?A8uj27DoHOevA9k(kt5ZAW;FojCfKgT|MpljzA(tEP**+Pstr#D zj=CQ#0kNSfaZl=>`=T2tY?MS+Wf(w8{@?m`teOdS zF034@=mM-nvAE2$1!nb#&IiTu|Enh3y-41Md>qhb+sH~1AO}n1a>k0i(a+drDYoq6 z{&}AKVYxprTVOtA$qPvGc0=7 zMxRv3+XP9axLeIIm>Q?2hstujeJp+50wjpCDk6&117Dr!joKQv`ocu=qWr5MkyimJ zJLItN*8`d%{}9*p(KIEpLpm7mSjbmUT>m;<0 zRZelHjdz;)$aj;?CJe8-kq%cGe@wycF`UsDaic$9#ER#;B1+=B1)$P(*X}#d8mk** z`KdiJ@gj+H!58v})7w^OV%ZSp+&=o+g@3CQ_=X?arUcH@tz&aBiierQrDwJos}Io5 zpDo%D^X|oITRS}?KR1C;Yf`|!+4;shDdm(@;9#~~0?3M3znHCu`-~InmunF@*K?Tu zigrkj&Csm1y!Fmj(6_PJ8L743{Ny_*s*@LEa#bI@e!%kC>WtqXF6h|`y#Y|>W&&L~ zavAT58jHAwyDyjr?@aJfkWH6owBPpXPCS~@ROySnfYpyiABAV07*C_yMvS$Pl`6?| zI;k#G>9xuiw6F&XWA(VMd3Ceu7yE<1L%1k%1I^VZrCogu0Im3*e?e0GV&pE2RfQ0= zEhurX!xgw!c|8i~Y-jxqcWTxLlC4|FJp1-7rl{#zqkaGyuA-I6s`MtJW|1IzR2Jpm z=^YfW?mnYn+C!ev!e2^r6jz@bdi;weu;bO1{9i(Bz3rc8-7EI9CswE(P|M*~(hZnjK$3sK>89gX z*^ZljYXatnSRu_aW2Tp4z-res>H%e?LZh!PWBJ1^Qn+3w=UR_}z-VC+XTHtnI{=7&}3^O=vW4^5y>oRK3O^EPU8- z58JvPD%7^$`NLfpP%9k-QJ7c(ti}3+fUsv0qiG2Fu!+c!3KNbtSBDw*QUN+h4&LRd!OiPcEA~8JOaFnOZ4+b@FVkvL`~|d ziSk4+L(3EiCfvOD_%&)WTja6~Zy`hiMX3BF9pAigY60XqKSyvsL(5F|uFGE3?~e=w zhGYbk_vD_A!CSz~{DUjuHHTCIK~k04wvlLb6c%;x;r{s8^B&U${CXujY7j9gxy)NGlWh;NKkX3$HXj<>zS<(_IGO9)6l}XB&C^Hju^I5MP{DC@N#vAX=a9%{ejKv^Qeq;2!cC)Ovn>PTab`aO8aQ& zXDNq7GvJ}1W=EA-Q&TCt@SU9}`e-)i60d)=7l5*JM-l4ZxRB!nrL=vWz;J0{SQ_WJ$;7(MV-2S}uLPDWwcNkRW z`D61RG*)&ec+x9FwKn4Mg~#kpV!Nr3ix8ZgbaBekv2?f8;*MOTOsk`c;=C(9Ko9Ug zypVFi>MjL>x>>!&?t-b-b1jbA5m8@n(1*rvn zg`4DWzJ&z--3$6lp@0DxJTEX$zK8;Urx1gze{RzoZR*8)a;px?$V3QOR**&tHpwAC zBk{8o;vCJIvYOK@ZDl~5?M%|1t|SNKbhdBsAJs2ZPXR}3c6J7A&Rs0GRb**ONN1SB zJ(!nS`v3qRm<=8pQZWcw|3WwBp;S$1kr zc#aGM7-C&N<%=}mIQU+DHu;Ub6vI%E<^8^AJ}XPzuH1C4!SXONdLWO%#u>(k9!H|> zVP8%!HP^mVsR6*nUP=F_0E67$rGT<|;v7ZF8vl4h>Dn{*i69}Os+#rGvsi!HQ&O9* zXWy89SyjrCU&QbDp>hAmew9UIAsi%@nQ}A@frC60IdT>{h<7WxVe><%H@1rg{=6;4 zBbc|H!=r(ptCIN&QHI}1yzPote$(yxPEbQ2B@QCoNTavgQA1VD)?Qno@*F2{)C#F1}Mg zs&y-?i4Z_(ja)CFs}9O#GVX!4G3j8TeDMyq{D)=1Am7PIle$wXl<+Hd8g*OCx$N0p@|I>tW z-(JLK8B!89`fhj}9wO<>5M>MALx-erDgF#|UZO84(>(6dE+PTHFTkX8izZ-G|8E^) z08woH8H6zK>m@0QoBu;)f9-8_G<}azBo_zk>Y#4#Cn$=w_fv2rm{b85N?s8t0qs-% zkNulzmV3hdle_@`N+9$1nfJf*V9J;j6dlQVE&g7Sdxxn(mHXKghc=GDF0OwVGBhSC z+tn}k@aN0XSY%i%{Xp_3Qv}H7@?4a(3u7yZ_XzSTViU5Eg0w{vOu(*g*@uvhBtZTJ zIrCOt<5N#MHRY3zK*)nRf2P2hn^jF#F)6Z`+VRhkl>8`?AFZ?&3k(YnYyRSkOEs~- z;7Zv2&hxOJwhB{Dw!jFg+R^U?r<-!o9aoofMX`0Moi$sLJaaMh2DwX8hv#pvSPv%2 z3cdeGn#-9ML-}C_>Febui3(0rP$g{gcCbCUx4jFUqrw`ha8o(e@}^ePvPI%)^*267 zQ#NM4EzI|F%N-#5hSv`fX%Xd=g|GAmrN-e~UZ+NOS=1-u9q{Xq5`bXQgae2t*AWLM zeRd|nJjz)%-LNOY5xxVVDP*UiMy>O+(KxTwa-p`A|616fed*!ZN-A z>iCzfAnM%Jl;xGc`lGYU~B_*QirWx%uMB*j-iafeEdi3U=?mr;A{w+u5CF~Vk z4E(PdlcKGvvAhBlmf!L<>Hc$R|tOq>na++)7Ps$5*^x*tmgvG`rL!WZZdiY+VRFptk%`Aa*agG{G zo)*Q65zDX3F(b2qB>l4z$y=E%KT!o;CUb4fI4AW8TJD0+Ww`bPyj1R~Mua3kjde+*A6fIK5BgixQrAk>BLT zJQSRY*rMu>5v(*maSs9vnjp>&?OL9SOCJKTS>I#q{T2idwgLfDO4e3`>tKXtw7)b) zWs$%yC=G~`xHs3O>O>c`$8b`)v0PY zhrI6b<8mOEl6mjd`5lhE`xrM8nt5HKk{8n1UElXm*iEuLhO*uK_6EBFG{8eE07wk1 zsq~e*+2nU3pSN~L0PrKxZw&ja^=uVuR#=DJX_qmnO8}AMjYKGqz;8Pece?VN1S)!7 zx3&&y?^``zuzY_Ml$ugwBwn1GXBS5(by1F^ED0|r)(W0q!t3+%PeKZV07A5J9yC}& z1ja0@9e>GQG%S;D6ljAGe7f`GG9wAQU?SXO?+*6`5fUPdb1ZYz-bJb{wuUjv=F6CH zoIrgN7942kYOGkS7Occt3RFMWO^l-;MWIL$XM*KGso8PmW5>=!(0_rQ8#)9cC}rtR z#%~Fw98U{D1IuWxgGVKBp+ng&+onu^ltvhVSV84Fy#n2_RZ?*jLT_{Bjg8Xx07psV zAd$OW$0C`ujv@_D5$D=q7Q>s(rnRPke<}7U)G(v@_!Qf5lyIUmT%KU1v6Gb`)0urh z;PpNZ1z9D&@^>!QmB>qT3Anmak&wT3>evs`!^^Y+ChbGL)s@xQArqXdP-2tS&H(|1 z5k{J_4BIdOQnb4YvI;oSfGtdrU9}~iN6rlIKIO!)AB6Ykjg|ehpj-H8w;$72FJb!& zp(-BdCV76(afJ0hbQ6WrD}<{xzn(95uI&5L1EC9Es)!TXyX2hSDAlG$?m>Wgy8~47 zuQ&89fL*W{n8o%y{4S{1F?4uQ=NowZX^`IuSQH+E2fvX0RiI}Dk+}%wyfA)2jOxI% zRswu4kv}I$(5F}=k9|)~&~S$xEA@Pv1ZcY;vF6m1N>iIi96~qiUx;eyN$e#heRK0P zmv4TYamkeGX{`%W@<;9(fBRJi^GX}5Vf&kuKwlX(2e6vUV1`T{cGHuzY&1I1$L4-E z(^4V}R_zW^YP2|1^8gd9jedjrA%2mr8&5%c7~9S6+#|{5fqz&HZYBB@R1#W&Tn1Y= zQVCQI|2oi%jiq_JbChqf6E-05=Pu0R3_`oGMT5Qv%B&d zj-Zq6{t;ljKbqe_t4Tpo;5t%-PItw*Hjsmwc&sQXvJQWs*TL85-b7VsDr6vBbimjz zRLsPJu`GrKeQTlD+axr@h-LD$Z)&TvXH}--0x|mjxb-L2NaCw6Lczhc1a+d@-z8H3 znK-(}r84?Z$TJEiC{Q$KM&__*A9(>xp6qE}!caP7$T`&?+2>r$nT&)mur+N$uf^By z$U3&Ez~dyVQJalj#+7i}o+8N|c1cDDvQ7%6wM@Sg-^Qnm88?suPL0>8&3ajry>!r4 z8*QGk=yZAbPki8;=y5uFihAzzdM{nKzRS@nJ5Wz@6(=JqE z{l?#?2)*_IB6Lzz2uUy6st!?tp8|y6<{04Lfj%sB8lV9Iep^BWthFy;XP`LiadKdj zH4W+al*c+m9q66o(_mC4?t!E{IFIA-2;_jf|L)4( z`MCMs=thZmsw$yy~VG!lT7f6NVXxVMp+5kAy25bfLeeQ z72p#M`54R>9CYlc#?@0xe&8W{irz05=8E+55~J_a(+yq|kt`DgsqcfC`eP zGf-7SzAp6)sBD7y`<89&zuQr@;$#ij6?>2aTu5zrsezb*8bNqOL`=j-lh+A;h!`zR zm{eTWj9kpkKb?=^oICj=h66MkPW8KTOelVfrQlTnQdXHj*XHRXIaj- z)r=UhX_1p@-$urhu+m6?Wu7Ogi@PK7nH0G&qix8Vj0*dFv{;=_q*V=lG6@9md-cYo z&sYJ95nH(*zfi)~oqM2!ys!h!FS<%*gjKB1qWi{KTw5c~mlzI=SZ|qQErs^*QTOOW5 zsqV=HI1R&nF4qiu*gee&t@4)?Y>RQAG|&kMku;6Y!x}o0G-v>8y$&j$w#)g(XKkb3 zjwlEh8`28EyrA={&S!by*rTxgD&R_4968$`Euw*tZhoTyN{5BY?HeVcAef4#Il^20 z8Zl#_2|QIkLOH>Xd&k<;s$7Nd;>rstd_=$}f%RE}eyEg>wucurt4yK7G%7$wUX%%& zz#L+ZJ-R9H6J3qx<@bsmA#0zUd^8R6;Ac@&@Gt>q1E#^Ip>8~U(}$6Gkdo*MFtRzM zs?=FjrJM~B02RjStHup~XcL&PW5j@wJ6bDhNWZT7X6yX{-o9mA0F+g<;h8u(>_wzt z!sOBt^WPRonI!0E7bPjON~yK0*TSc@!s<%a(53|AIc@2o3DZh;E;rmuZXEi2pt90kcG{y7=$^A|2raOOGRrb(^uL2A zKhGp>3Zc=)8u{)Ko%j?26d>#bhseR-QL4T}^ll4C9h(_Ux|2;Z6f9`~6o!E4w_-yNxupcLg~h7BRe_(p@nB@ z)q7vp$n1cx>)%nb<&^1F5f!G@(ISh;Wlgyk6TlRU5tDDp9DSc=l!;k68gHQ>9*@F-y=ZdcH*TYGO~G ziXIdV#J+`GLZ3E#sCDw4CT!d80Z6FCB1pQ*X0rZz!DBu8KBxyZhd zqk}eb0R;5Lq-+8ulHQn{{`4OI%f=5THOp;Wz!d8(w`rUPmn*P+AVLHoo_SZh3D*r- zu8R(gkk*%*o?Q|TC>)j)olr0wLNN3uOGuEC3R5qoiUHq{WNa^@!LEo%_~VHK=Y^%m?%5WPHq`SMEAcuN-%QKlXGb(N4Jh2Q|`rr{HR0g-}_8S zn4nWMy?XKH{|(N`TJf1dR#`A44@3#(k8U>5_oS_1NVKu~lWxD^k2dHdZSb1;wG~ zpRT7v4*h}(=8b;_1Z~?zA&q<`Zs~wBrxUQ5>e~iJ?EB<)@X+d$eomB;DuT(7vy# zMA~;#stu$#Ede>wfuB0bLc|(@EW=c7{eI(oTYC8zX~pA*Y9IV;U{)W7S+g8el>DlP z{ZDZL2}1bT=q0y4YNGq$&!%64d!e<$W5-gkcP8X`G5I_J2Qqe5G^>-Lqgy6&CTdUr z{_^>DK6wIyHPI6<2)$l}NV~V8cVC1}LHsw(Ca^4p;?kt9JP5wp@II-JUB2HGtLoEm z?u|XgOfOYw=x}#lt+v^ymL+Az@q0R}BhU)xCbh8AzhZVCJorn5MWuyLs*|pXWL^ZM z;m3N5AzU&j3EC(NLZrVzoR`nDaB;+zjxDcN=G6`sL`sIw(B^2;eJf|{`XjkEYvam4 z5pXHeE5H$k1cpt zS-KvCkE|v9I*q`Z&eq67lr5`#ojfNl8XrZ!Ya2tu{|C!cfQ%BfWiqfx9l?qPsK-xX zy6$t-zBcxz)HiLHa4Eb#K@DR#nYU0lV?8Hja%I0F{Qt$XhzWJ_)JDrXS z-ZTpEkP6?y4dt;-y!@fdHosV`?U3|I2~KuZDXQD;1x|UGM7mmTrqfgb|IxXbM_5OI zf3F!GFWe34f!UA_XLemh7mnot?NWz89o+&pWq4oZQn7Vt<< z8T2rnYJ4l@)QjfU-7AFbrUh<}NIuwbOJ!@!jz;O1cl6pXJl3aUDE5`7<2!fHgo z0awy0W)i+e+q#NuSIjIU;O>C$!0#$yH-Fl3enFhW28x32NfAljUE@zDhJbu3GPLZJ zhz(~UlC%;b^%E_y?GI%>q7qm%82U*!p`+4UDKq8Lc>bfdxhQuz)%URuzxo|m36rsd zHZ64wm{7H?{uivl#7@@`%36teiN{`(e(M@Vy3qRgd{sLNgl|5j*<+Tq)oVHo&OURA zIy5JQ3*z%$RXr3PxPycAX_8QVFTfW)D2o{1>KaP6aEQKqVXx&k3=yx0Av%4dOKPgf z&*?JaqfGU8W5GVf1=r;1eB#|?N)6fGh@JNA_tl{|*}zd-NC>@v3`!w-eh^Viss$u@ zW)2v*+G>T`l#9;_^`%eE{qO}#V;spzq#KBqm5U?<+;P*!AZjNXb#kVtPUN`T=M8xh zqYue3ljf)|Y)HqkJoW>-DxEj)Aj!oLC=1JSzUD&T+27a58#I6T!q+w{M>tOK(2q(W zR79?4bSpv>p?gSp9P+q_osq^_uuhW+B~PwC#cpo(acQ6Gjj7Fwy{LmzqeAifZd-XM z@$(xPd9k{Nfb#kd5ulqxwv@;nk!@c(db(RpTu`^5q!`BOF zF8P>%CkqHl{?Bn$A(&Kd#241kx>>*4QZ-UByU(w|UwsId4R3)xO#c9(3_6H`i{&uB zN&y^ExlLDV3lIc0j+*s{^@c0bL?f!L$EWkF^;=ce%)G+#5NbGIFgOQ1XL?XpU#9xl zElLTbPGSsOEkg~U$~Uea^{yYm>n*R`YkM1aTEC9-vm5>L^HgCwFAhU#`AjSOrUbrR z$Jwi9j<^LN?xGL>ba(!6RFJWKF=5dLC}$>*uc>IMGIy|j7}6n%YBBIR zKxR-oSFfVZOrNcRP-;v(RWi#z0+yeZgIT%jO4&zH%M%|7tSJfVyhu5CmKURZ(NyHx zQ1yv2-2XEuG$uMlAQ#Jj(Z)32pZ@%c)XFWvIq>o3rb#X7v*Nu(vJiMR;jr45#l|TEtEqzu~7W!A!_*t70 z_C+UDyxtG^(WuS+x^cCigFQxh5FfhZbd>nI!yV@Jks%ChL%cyo=WUP^X?1%-I(y2R z0?`+x7s7NI~gC(WveWK8G-P`1>se0{$J(5 zpd;jd@z?DOYZ?*bru52JuGw@PPPxyxWJ7pMJEu*z;-_6-RM`#sWXi+O>1$Vt$L6&T z$pDr93dPc`a9s6|-=5%h@Lj=kguZ31^nLX3-OlO;XE8(uVxRa@a^emyENzgX9Wq4i zS0MOO2p}&zlY4};6$?j{OHtwI_g3V7{gn)rPm=7`yhQs2t+lw6JAA>777qWPqTRd3 zDbJ6v9nZ7^FS~7`-$*)RD^DK1mp7nPU&v)~pg#axU53j*PZI_(u>VzO3ssx;XAid- zEWq{GtkZfXKpHEX7DwE_PC8XN@;l1C=;@gIO6OzYBCq~nT~NdU2E}2~?k2Bhnv`oV zC(bE#nL4|_HzUgtp%KpKJ%e0d`fN5rZ+?k%9V2b&>meaKDP zN%cW$&Q;B@h0GE>nv#llH_n|&w#9Q9z15d*)7O-;@k8AI?_bz0K;!S@5BPA7EknF1 zZu;c^QcjWSFnTI1feug`ge$Jkez*Q+H>pdK8@HK0lI8a*BLrT$ggp59Tr@4>T&A>= z{`Cg@vt@W<9?>TrGL#2G9H_SDy3cI!jG-1@%jEkUY4yv8FQ)VnBapH0OYl#c`(JOZ zxE7vPb+5crp2bRWB_#~zBSTNZOQVrbgi*Nn0Y@A%IKC2JQL8g{*x!c;5%zZW&s-Wo zwP26Gn1_NSX>cbv6Ip9vhCD1LYcxApwBgB~N?#f&0h_;Ka-`5U=$y_qocja1xgf6W z46F-cOD5Btbk7Jfwpf0^q_AobDU;-AKaD)DW1lh`4e+m^H%MS*x+kUE}J-M@hh zS+S@2Q-LOjG`P~3W|HCa-l8FT8jQgLSlO?qmdqfHsb@vVM@J4Kd=cU6+;V@CC|7B~BI3Qaq4+A}=-oO%{>$#_YOhVcdnNafD#1U$$R ze?p5QsaVWWf5*k5c;x|#SZ-Gox(IPMXnng92rc$klz<@L98z8D8Qpz)vYr1Vvw`@w z17d`}EIku0mVuqZRVXGzam=q0jK@@{2|%^#^pRaZ6!=V}FCkiZYMO%&)Z;_R`#mE` zyO|Z^xNxa2O=HqYN#7?MToX^?g&M%UQziQUMnd1fyzvh7$7^?4jmU^Y;3~e+tbdxl z1YJ&}xYL4Tj&;{rz+vZm*MMW`7`p_WORcOj+hW$;aMr_~c^c3xIDWpAA>_JeYb*U^ z7-3gmO+y{lbacu|n12SG>8dN8nJ%->E!Yp$BL9^>-aX0Rlt8wbzZ1-i(g^) zpPE10x@QB7tTKoN+iL54Yf$cEpZdb9Dr+d2?l~(+0pRv-*C##LR0 z*nk;3oT<(=tr4BiN&`>6v4SARKN7`9q>%f0{t$JYskxr$=+rmop7$v!Kwcl~&C9{s zJeB4HS-op|P5bNgbDA@n$>K#TpC;<<#`{E0^TEt~!}G$jCc|0D3x3v1_1q(l;T zaJ=|fpGDSqLkJqEbI*R>UqI9a-O3$W!b1~!WldWt{Rc;CH5el`3qK`74hb&Jx04ZG z4SX6=%l@Eu#p!eDwJMY_gVL$5{0i&Y=Y{sfm3AS7IBTF~6VV;H9_KJOU@_1)IfIJG znUPEiM((*M!=iSkqXLxd7JQuwlY8@LiFj^cw%HZ(`*^&ty|cdTSWRBeh9{$b*!pKS^(^PlSTMB7*yW~F&DHEPj7*rxldDn zG9Z3IZs{`zC8omY28J~dFl3K6r8Yp!3h6zxW!e#@JC(E4o=IFjwcgN_^Pl>aL?x`R zSaMu$ly{vkpNh=|E0GId13KiuZ^%hYC$VM$|2}lhI6Qr);WkDE|AuvE6QiC>HFLlm z#-tqkU`WRU|7aVxN*tEV3wLz*>tKmZpQ=2hAr1MLkLqnK;E*2`ACt(DM+!!1jHPxB zQ5^urnsdG76Yec?{L=?`p9Tr{9Q65$6bdTU#ytuOV5{c#C9e%w>J#S%cR5BoBv&5Y zfg<}iyK06CRThprp1+hUUbytQVun*-kW+Q&p}5RVln`^$=MD;sLxBNi40vn*IHlN5 zoI9gHb~0Zl!w2%1{r;Yk4K08x{yV9yZ}s-dQ}t&CS%YcaC!6T!+i(Au6xgMe-57Db zrpqiE0)!~HK=%CqSNCZrcb|f)h2hu~Q030>)`bi{PJFddOP4d$_;cNE4jBDU*XJR` zXUiR5(hwcwA|^(9fiQ#85>I$@%DtUmrOPqriiEfC6++ut`Tg*t?F37|#M#A34#8Xv zI<_i>+fgkKvT_(jzmZJtq`=H5hMa0p7dR zua|9+zLwf<)URr&;L6a;l;4Wr8^HyFA=tv-o^r+{P!a%+Q~C@pmVx~s>^f$P5k9DR z&aS5~&Az7WD!LYNbl_yKqX6Za^Oh!~bgvC#aB~v|On!Va1fqe-?0uioauzvzyd1l{ z|MJtI#O#2&_lafk1c@nu%hce@4CvASinfdJR#S_=ryxow=TW>v*qhNY-`LLrprecP=4~eAX@dpoAe3_3$CE|mO}gI6x`^5x5w&Ob*YDnHv}DAw@+n)g zt=3|#5s7pU%LGDiSD zQ&d*J62@(IWZ$_H5`+MJ@_WfEheRDnX(!;&HlKY*0dN*)plO&IX-fs>wmAavZBE<4A$IzKYmY8q|lz){uzqQHBKo318ZV)i@nj~SLR#51Q3 z0l`=t*ut*>vKUO)50Yyl51Q($(8?Toexh$x;vfeQy6iYz)YK4>7%6x`UreQC$4X(( z(ps4eD%j~ZKryc)^mA3US@b5;^V0dC4keWf&0bKS1vTZRAxd2EKX`h3H$OHK!kvjW zteG6+_tkOG6zNR5m+=8oKFARJosSJqgsI5g=nC0pBeKXBQ!f{XVPtu{(5p;{SEi@j zT&+uV4Ag5vFw=?Fka1cy0bqt91~?nDH{?gIoI5*_$LGoy41-BB<0ubcCIThe#{2;4 z=}zu~g|r=G*6AZ*DHofcbK^LV4%b;@<#^8lE#hDxsoBm$^~3+0$fOVcrHOxOe4boL zTh%J2XN0~?hFS#%wxQ*Js?66XE8FA3Vw2k!n>q~JlWUPLC0nAm45f50R^ncO!rr+< z@Nc{)vU>N$*^WmAxU1JaQ(v`N@}L2N#4(u8z>|2uhdr5_fmbvtJ@WLR>6)~cTDc7uH!+P^mG5h9*f!V}FTO8l>$FkfBX9JVna9{+e>^Ph zzXQ3TKojJ^4skSsBx!Swa(a*maioh5fvl*g1gmw+z~bNKGkyzn6Bn-L1wHdDQTdcg z=G6JUT~#3zWIV{JU7QDjZhFX%vV=R-SIzKRBX=c>RK^WrSTjQi8c6Lg<_(it)2Enp#0H zNMvHQu*K%BlH~3aFe!-h+|+$T%tz6XT7Z0n6dR)bJj9SZkxwizF}GY}M|fRq1thW9 z;bl8%%NNusX#O#eA^Ij<0k**d|1<~&#lHHit83HbPQW9duR;vws4p%ajGi!3mU!sk z@n8(bcW1f3^_f4cao;B-2)nIQp26#K3?eiX^y@35(nR>X;w3TZl~^ONm&=hNec8ze zaHjQHDXnrlNuel2Avyl~-|AXJ<92o|K=GvU`(svFa2}Ke7t5MVLEElnJy8YCti{iqbpd?=P zh&gJ|ooFRjH~WE%nR7oxOZzx<^yfwwhE9spRiw}8ZC@(S?=y)wTk?gO{b5RJgv%my zXdwe;UzCeIVM8DYdqijBt*OR@#LNT+aZzh&1aU+cQ9e6 zn=GU;ihZLIjf)39agdjR*g~?uO8Z@GxZrJrsmtDLA^W*5+kI(}Yt{<{F`Q zZ1VE`7MqCt2Lu4hO!5;|xWbAA3K=ad*WHy`|IWHIz(pxw`vly+xTwZUVw)xI=)xSO zX0DZr<%Cm5hrjIB5ev(cG_H!y3UJ*@ftl#vwXogts%|#-B)^M*|0AQL%`*$ONBPY&YS2@OmlB^T-AZ|xGKh1eH*uHw0B(4xP%jbkRS*0| zw9*t^6c@xTS=Qv_rEa60iyms>jF(+ZI#yjz5knCOri|bh>jz^gFVc37JHFqxTI&^6uoXpUF?5Tkk52d1dQBEW_Rco^h zpuslV93KmEn~iA*-7cI|8Gn$>lHjpJ-we*ZzgrU%AaI}VUw zbkQ2RZbC>3S$Is6P`;DE@t~byDU4>}DCfN}7ksbIY&LHzVWJ6IA7xnaHaNIC|5`0z zar&Wdtn~Tfy$CRPhN~MPmD86%vF?cZSCm{6E9zY42fhZ(Fb!BkK}(57qIIB>ayg|< z6Y5&;HH4qK*i5Y3DULp6yNo@1=KPHieT3JbS(3DIt4p(LtcBbc%Qe$4wBU;@fr2ES z0$tz&hE~KqquVF@dWPNNTs`KR)7B(DG;@8FcBXx0)JV<~HdLcYI#{)+%F7DO;IN~Adr=c4Y?6r!PA@zw2Lf#TMrWn-*{ywGQ~TOmFC z%XYp1d*9jHB#6>CHRHG7{JnTazKYYnwoCt1XG6nHdZ?3A^NHEdl zDdzKAT!wIu1L9Pm@{={DG~Mnru5x>Du)=_l2EKAky@-&8^owL)9*8cBjJTh>XJv4{}Sj z{#XPq zOaMHNN!`Ic+e}Quxp95`I1&xWUMpY2iYd1y)un)n(9p}r3i?IGzwde$rNcwaj>E5e zvc@*He|BEsi{^+QJ!y@c2i)x|o244~z-oOx&7!kX!|7SO2Sybi!Hczo50wcbvNe;w$i8zk(zYPJWD2C_Al#52om}M zQ7g2bJ!bq589`I6I}QHV(TB_=eB2PDWN@#i-=hCf+YXM{$2%jJli}lqyUZQ$iT|xN z2Hu`;MX+Kpvmtn8;eh3MhiNGM#E9FsCTMP%on6pl_b|t+-GD}_sdc}-epBM!eYfeB z`4lnU3)JhX=G``)xj@QjMQd&%L*jww2nX5->*<$i=EY;>uFABUd*@wdKqb07 zwe(#mKT83hq^{Z3`5yh5@uLlzo5YbHGp9OyS-S6KJ;jM%ErfJ-BVkWJEqU_|M=W)iqsJlX0}YvAryg4n1B-E_7=f#% zX1cOr#tZm1{DUkFtpF}ID^1Klk8?8Eoe!66VtHL@)x9DmQP--v2@Swdun$kC`ej3` zNe!Nh89*hASdNzru0-$OhnBh-uL$3-?C^Yg{cnuCSB95@aa3VfdKd5L-6tc8SmHJc z*eBlMxlhnlN@fXexYU_&v(w}sQ<2|^6kSx)jl$uMDt?_Km>7KN#O=BNv-pH-;M0w{ zuTnYft(QrlrnFp6I*hMnZIxVR>iC7H)?(&Oqb?nf;$RXweU^choQgQNwH7CP|A%FYo9; zTweB%!$B-t;bAqWwUkKC&O!Ax$+cOMsP}ZD8n~0da@eRJfG^M&?WOAnFuL$>;y;6M{_nVGj-r^^L$6xA$EX*c14@F9e9! zgD^oZSD@7$%oaNB=DQAk0GC)5n_5yh9rtcutw`d!(B??jMx!K{4BDf+ECK| zjzD~ z1A8KH1Zc|d9q_J}2t?x-2!AI;)oBd-^f`*yZh4(3R9K!mkLQ~%tooOwX}wujnzV6kQ-Mi2~DC8 zSQHqtf`hORB@~oy30?m9J(u$sR4;vLT7-)CR4=-*u$t6A>=_sQsoJ+>Z?CHcZpsSS z0jQWIXvNVz*PCMAve8Q6WH@ncBVq!;0pL(28hT>)SA{|(5nNVUp1XxsawU@Uwu1M0*F zUbO`Fk%YISCmGiNEaElxBQC=ld@iW0LaYj#_xt}8mUCED_QI2ExxtYjOjEeDSR0Y6 z*M)W&m}00B)bfWC+z}Nw_f|6Rzfs4*qT0#eR1usY?oIk!s!==m2j(3{9aCI;y(f0v zcQ=J&d@ED~U%MjEB{9mi-4g$eznR31K_|EgfGxh>*U$(<>h=58<(TrFJz@r2X(IOh zdMCR2VHh*aeM}Sh7S_v&-Z$WJuV1>k*AxS9*$oAoYqKJdk9NB`NTUbz^axTU5}7>o z##jos{Tsd3@8n5kbBn=f)N{Dqk3*=)otx=3G5)Exkq#D}!LLH|f)Y`l{=lgM?~l!2)CjJj87NpkoR$aXFlu> z+=HPLSF9kMuRwrv|L$lp+$xW*3*~~e8@D$XW~F|K6WdFKM^XH>86yb0Ui`EDt&k{% zB_$@MzbHir0X5KjSoi?92kdUgOOV}0&Ee(3t$k{KoUh$On5~uL;TTT}oz1ftEt)gP zpG^RCB`PX0wz+}lZxqPS)!2$EDe2M$bFGjpKfDtx(kz#?z(&ZH^NaYWS{&go)H(&J z0h*5+|4Bo%JKks);cV4QS7=;Q@b1Z1ue^@t@$BV4a=6>M0Z{?%aNnd3>+pIxgPQ53 z8MBxlyfCl!v`qQeb~bRwaQYCjBF$&6VIKrce(QyKUZYmE=Cr1#;N@+c8f14S-feJa z-qX|M48yRT1M3wPEbl3c8)6hc=`W;4MK;NIsHh*gyc3U^)9*cch(ex*$BO*yU<+EK z+dM}m-7rt*ZMwujuS^B^9&eiF)HWRev(Yk>v&(x%0_QFIX}O^Vb(&DOVt%lzf;7eVteySFHT z{mbYh%_EBy+dp9AHS9l%NhXTF1iEv za#-YcK&o1W%hkUmKKgI&^)W}g#hO5#%1hEBL3i&t&Q%Xx^i%e-u*B-OtG%?}`m3p0 z#Sp6rqvB^GR_X)3FUz~~?7XZF! z^+V_!p9kXfv>^M_hy(-LghC2emn)}Zlv7*n%0p>*G`7`9MUn`CsuEu3SZOa)i=eP} z)WcsS1+>kUEhj*`N_vd>Zxp#G^_en-tq_Lv2sRsV`I>JO>%`V(RIIN&e_c0kcE+GZ zaUtrwJX2%Y52%M=2^&9_U0^HFAH10j)8d07Yv3?yAgRW>DgggK0Ki;K`1y42n?=*x z{Fu3j1Y!N(LfONuqK%jf>r0P8hpxE^9T@{0=_6??m0Fhtgh&RGtJB9}x=9Rx%74*? zPuLDfQ&uKpjvx4sFrnV}VWGRIh3q_F;IBU_7GOH{QOm%X0;ri05G9D)O*_4UlNC$n zS~kK;NBbmx@|z@~xckNp?36h4uuKr+yeJkWfB3jK1~wRCUCMpU#LQC?XQ2IJehrgZ znf~i~!o^V~a8|<%Dmpny7YQZVV~2jujSkqwIYbes#xUY-E|`$-xvKcp6icOy;)KY! zGc*M^R)Z_BE@Tl2K@E;ntt)+ux0`oOf}5`-5(oFHWv%$|bV--40v_FYh7XGqhx}is@v(7vZT5;#M^Y#M z$=|tS-?H$E?`(PNV?5266Z<7SZ@Hb{7VbUC=^VJTLWGkZy+sbzicj^I#r9iZZD)w) zel?}{X2iRfz~DfC?Cuyr86%?|5_VswdMEtN#i^|WXri#Z=+qM`0Xua|@NN@1XLwFP z-m#XK$~t*IOQi=LbgR;kYCsmW2|LD*ED6lG!Oq(I`$<B$=8JA)*KEED*!i?ZYf4X#tE~sjZ1Ty-KfiB+gmmf5tRveU)D%1J7VlRa>5*2w&M+GJM z5&QI#={APyl+ta<0&(nNIJiF#C6NM`&$2NT<_A+i)j@yXX4|L^jnPO=d)-|($P4sG zdYLaOPS^n;s#bds@^4BvW#2dimO{(jl{%!#r}9d_OY5FOv*t@trW$oM@FY57VU96~ z_cD8I@30HZOwC(hJu4Knc)yNw;HCD@LLXVKG9*tK6)bY&z(#*?vII z>k06Y+5WOPFWHq1I;ezHb4nS@g;YPP zpgrP_N#>on7`9yz;qrZvD4=B`(G#2fE}GJk^1smlyoNxw$}61wGVJk=J?IVgfIh3y!cu$6&_wvqV9g0{!xNE1 zi^}%t(O&Wj|Kk2*Eg8m+j3ej9MwTCK2HM})5g1fJG2kctC5f&zif+Ly*i3etA~nX| z1$trVmSc)Q<|*t+{G_D z{fhbI>BcbcT|%v7+s7}NfYJF5WG_Vcd>#q&ZBU%)dc%>D_&GW;01MoYCKJ<_mti@e zMn#Polg#}Kn!aw|K@(fNtK;BKq{~hR1HCWuoBL<#H};f5sFiaYaNNHLp^@GUp9au1 zlrP`qWc%)?FTx@1W*!9wjzhLXmRO>OA+m;R@%8&4{A}4u6e})qz%-fsgZE@;ZT+_- zto_NYEy3M7YT4cGMtgjndB75-wmO{Jbr3F#(CKnbFs`@>mJd|Ew5endL|)1mu)FyLHd&Q7&Q5FA9t?| zL_U4lzURNbmnoIEQ{tPm5{K&tgL0=j<*;vkPxq=t27V=P6BNwY#xNmfQF;97S z+i2wu51_Q=sr)zV%=3qIfZCDCDs_x#261*9<0`nN7KU?lU!_!Aaw#vE5}G=GKM%%0 zxKUWF1hiTGg)sxXWBnC&<87`KIMtQ_Avyg_ywVd zP4(Abu-NbfP?Vl?{GVXiK(1YP{VjdpzY?l5;dtdI4!*z<`nyY#p7tRv_Icj9=GU={ zykM^Ezuk$uNT^d1nNUIELc;q5ILk(~0mRk@ZdC-H5(4ijRhO}ks@wnm+|2L)PWl0}zwm!BupC8f)FA8`A4=}v;p+n9g1F&OAEr^D z1|F^u%EoMdMHr6k?$oj}+PBC1TSp>wgwOi>FvI+wTKGzrF{^mL_{9Yf{IM#6VqRSMCWZrYL2o_b8xdC7#u@m>uNM#CDj0anhon90T;SS z(nl#>(;0k5kw>akOsNm`FGC{NF-6FxPM|*|=q{(cb2B$T?>+LV!>&s-F-L1rh|k(M zq4)?44Ke0y>N}vC5W0Fa@<&~1*LEnhWl9`x-`bnt)F>#Ep3P|uxcoN2Y?|c1t-PxD z(*nE^4QlW}c?iAZ9<5}@{zvR!9*pA+H-s>9Q+ZPXM?n~492~!utr8nS)hSuW)x5=c z4&eCO2M#^}FPcA*ONwrH6<2Nb0O0EjQ}l@hbam9 z?_GiF48tSfbX?N4YMf@QI!6cCeE+U?5=#zeDHJ*M^SIZ*>)a=3oxhdpg8FrSUb*Ta zE!Y1qjde$C0I!K4mU|g{k7F_eO$%=8C(jls;@O@^j6-kllKnlV|u>P zA}Qb=f+97QKPs5&@$Y~DF3yb9uu?FiKEHXZutx}U+nrHfu$-3QYP;(%ZgJ<=?&d5F z_}Fc=5`X|!X<$~CTbd5w79qB>*n6zZ?c!_$2rbzJA@AyB!LZ~mu8>4x4tU zVF5WbDV`hKJlHk{kCpZRf5-9Y7$UnR?^B`Xy&#zFl9*-``4Oy8f6lMblMJT=Ms!4s zp)#i+aUg5#1Ju?uiYu-3>GW+qq~Iy6tYff*ug9H$pIDeEBz+F8XCkV$*s^NZY7Dd7 zAF1a0QUO6N?!CBr4}tIMWaFc9j@@Jv2@uucl}^PQg1ZWWrKP`bFc+5P zWV>HV&C&F=xmxQs)uX9N2GNA~3QOJC*!@aCi;$zCg}<-K>vvydXJ42g)DKl$hngxk zQ`Am*)+A9f(l&GSbTn&U&tc=Hul}B#tpX1OaIuCkFf@m_)KJe)^%x`y!7Fyd!I%&! z#^8~})g^l>WjzWJiV-EX`brH7$NOi$DOkgFN&&ARNQ_bE!v6^OWfDzC7Cf^DCrnIA zID``q4oEcV0}bu{AbW|J@alfpe9+HnSoIR9@?rk87?0j{+?7xsp%-)d^P5j8#Rd4n#g!c&P7xN>=izhssRg%mMLG*QPea|Yq&(*D6 zZ6-YH`g!n%QM6YQ$-NrNCuR94ZFKA88*a1R?}=a6QQ1>@Lrx1N#FZ zRE`(H^?y75#n{kMY_H?GUZ&7VI-Uy-Ui1e3&J$FJ=M3fS zvN~@laF!sQ8E$yjNj9kl85#>Y zxNLW@d9Q@-`kpD~YHzP(n(y@Y>m77$#3YcQm$Z;?Ig>hoZ-RGZkWfO(b^$p{ ze934O-9gI$8vv`OOHAFP!OVSK5Zf~PM9NQGEEIIn&k2&42=s4o==p`4ioN{IQ$6=- zTEdN&?z^c`Hde6>tC_Fh4|?{t#5$CrzfqVxg@rX<6XSSe^2T?zMdB)ghTq1MrCB$# zO$MUdqv@tXWeSIT$W>J$ec{M3dbBMLVk{$ZWW;rG5m7_1eagt#A|XXhyf;bO)N`=m z5+=GsJU&AH&U43P{e1 zol>t~;z_&qhYhX{Q?Df9Q0J&0)JYN1PZSqz3^)#4xz6$e^`s5n?Z4}=D>H5Mh-)04 zXWwwjX@UrY^}c6TS?$#0T;{)r&_(bIl)#Paz(0U2S5&PC-(Y%5_h~clq@KCpmgfP^M~2fuP55V=*kmpVeS_Rn2%@pIO7^?QP3nenyY@T4TjtS zfC7rTCz8}%caKm|9HBUpX6W1MLwmQ4O+|^3%5Igg?r*YXSA6K=#nTTr#L-VDv(cxF ztvu`B1c0hODAx@UZCyy16;h<;Q(WZo20E8Jy)BETXnAa@o1ae_Lj$`q- zqx5DD9e)JC-5{a*bCo*CFRjv4c?hM%wcf8n8{79!ra>U@o%HwR;SSrf;Z#V8gCCBs z{AOBsKpWqK19>QUY3_RN-e@`@z8RHsmV<<`!uN~-i_|0sloeLO)Mc)_Iwpt6T?L}( z$-=zb1(Ad6c08bCoJHEGM3UQY1@wNAM>A1@$94(%ptPRXnynU6EZoM(0wU%QWL`Td zymu)_@89WSi;(b+hiVS^*5gs+{|{F`U6Zu)fRCvHV*RAIJ;9g8_-n-L+>2>2`Q)&V z0Mc8ZfEIGPtKMAnGfbE3HL9}$?5kQ*Z4XvdP&8TQ5bKM$y&NWG!Fg-LjeAX}?DCvW z$oBHAgJ8>;J9avVF-^B?#GTyqgc^uM$JELbuNLPvtydBmj$mv(j^8)QO z+-H~(v^^^3$7mjZCTl|m0yp>qF)mSUrNqQZt@}=&$q}#0ZNAals-G7fS#z!0=|u-J zVb2Pt`s6HY$~~6(EgzIzdY;TvHc0$nTG(wFnKz-ALSc&1Cx&af>xj-La@jd8qZQ{ImXW zvtT|b3K$@*4q6mbU6I`g0!S$PM|tS>B6VouxGdg8goP5v^ zikGW;7dOVIO;F+=N@L+|71O)YKB+kw+&dQsZ^-zg1;F~HX*_Hy6{!{;#Il;W{SFbq zxjbh@v7fK`(M3*0ZReZHq8nz3<%;z4P#H8L3CoLznej>^jk?L!0xcoH`K z8N8f8f{fNI0xUFiVK^R(86(IONnc4U)>$>)etJ4s^!O^Lne$M=0s^%?Ekn>vZA{{N z0bpLU^A@yPh}9pe2|Z035lOuZ0K4o0`8F4;?$~taHC5uvL<~UQ!GW%KU?C4|eg~UG zj#yGIs~4LG5F2}9(<8SK&frfdgd~h%!b21)?*tHTtQqLhS7W0O;Vba8j^8K0y3zl93}hOEoLy+H7S{UEP@82d5Ku%$ zL;o=4rs8wxc}b-Ydf!{I6|G5}GIsyLV?XCtjP5q+T#Y=Wl5+OztK?8G?uwZ(2czr) zTEWoTl;asxevLtcW+Dr5GV?6uHK?mrUVVyJrlE0(raW;bH|o zRZsVTAZaq^+yWAul@PJT0n^O|oE+TU$S=dal@T%CLKdu8>NP2=QfCPYj6fs_7nB3c zC(1dGZCz@W$gh{5jMnloZc)x#_a-Y(16>@ui-9$>&8OM4GUPJA3V4XBUF~onwt=vA zZqn6pC0em^Y8e-0i8Z?vIV}5!hvt>OHty7uUJHowI2D2OAV7a^@+39~lO-U#g#Imk z-{OJ34YVMuT?GAN1iTv3m5Md+bBMM<-A~PM{4!)ULrL}i&V+S(Z1E9Ui^8QhgKPNlMx1X9Qvpvj+~>5rSX2nDS#85 zy>o9yBOa>^Cf@>lkpzrz8wCyhFkYR_+!xZt>1+buO2_whRjp<{cU)_lUelIpw~=&d z=fXNuWu6aSiNt_c5B17*7oDtZ8YgDx35G_*+v~5L2M?4r28jA>i0XU^mpyVm0P4Dk zD)g@{Tatq+X~b2!m!}~;(A2|202wa@6FNcapfN2a5EG@EcD;-4_5I+GT$<&YglMg< z0uN~i@K14@OBjx6k88iFzW4xG20c4bP};N8jj`E$_;#zhmk4rU5iUF5c5LiC@%&6` z3C1rOR`lDqQg*SjQ=B8&*M8Hg2?fi+ED1O4L}3IYTCN9dgMTnsNg%~K!~Ye;hphal z<9Mx>?(~V@>2z(JphD+OGq82R=~K!?eL}oIjUdO{B;>XtA(66TnCLoz9YHn;cF2Fa z8cjEfk>Z&zA(*LT)d{xwjFRKuhs^k=A8Iaej1m%Q!Q*irR8G?|W!c>h2*?7WlB+n- z1!m9?eZ%T$=Egrlwz9}%57+#P*24Z*gnWH9924)0_yhM&`D7|C!GSEu@9KLSGoERdjTU@kU-7j~)tVi}&_vQrlt zyX)5TT*#!~TWQ~l{L$p~h=VYo_CWH#FMF&b%FM~zFEx^OYVtoLvJZlPaK>keQtoi8 z#G?>l*;iT}@*`=kLqtLa?ec)C9US(z5{9K+XbZOo!2qf!^udRv?pv-Qil1_5S*>AP zRr*<50|y7}JKx|u8Ao45D@E|Z2K}meDVD_V4AgBi{2rG{^K3uZ3@Eq~`tk-;I1_(R z7eK$uNrSQj1^TpY-0;lOi6gGMOtX{8^rQp_mlW6?w&el0F!GafB4hB-oT`P%u;|ec zXMV8jVCWfpJs=RS%EO01FDPUb-Of1 z8in^~KOt?Jsv)Bknr{{ujpUd8j_5-kR4}Oz#MU7++py)t|CsT8JwzL0}9Su5vo29NLZ(Z&NAThME)hDfOE<^&&`4aVZ5~hrUZMQ0gnMT^v zf^r7-$?e|tA(P-ZfPoUSJn3k$OunN;yhT!kCllDA$c^D#M{vgN1B3cKJ;45`IdhNXqqRKkt`XNl@Bdb{A$t-Vu#(IRC7}W z37I~(BK01rul;v>;+e>Lxc{Kz8z3tFA+Cvm1SsJCeI-?+FD9mVB!(LKMJlvS#;(p? z5$tL_Jh23m>Y}X?8e?zK^Z|c^f(D(_P6r2@CUb98wLy6GLyctLMb7$F93aPyYVwS(OC#%U85{e9E<|av% z^(w5(i8dTUy3w5J%?q!?wx-qn0>9_3^U8c;pWLYW8-QUDPMXVW%U6mxrjR zf2fXL`c?Y;Pr0yBvC@UYb-PCbgMdS=!V7IlR6C9@<j%_@n*t4w;LRiBKWFz^sQa<3*$$b$Fj4?7=XtWugt*456D0bhT~YSjt|N>d!T z)`<7jaZ;5@faSJpibejht2DRlwF3{~#!R2GOMuap(y@v?W1qgC=Z8K&rW&{NLF@ zCLQ|rHY*ZjS+=yrZGu%%aF}FHIq+1>jRn}rb2ZL_>_2qGO=CCr-V0p;HvS*bpb*rR<`}g2;N2pCNvY+i=v^8i*xuHA6m2XQTj9f4oNXjs0Ks*(;l=Zuz0d8dzdJ zgHXSgTm5kN!Nb{vZ6>nIT!@qxuYfYzWj1!It69NU3Q;UVPlmq;H$t+SD;%3Y}A zL=UgG9nsP%TGJZ$^G#u3rEcB41rDAfJgzwCo{W-As18%$>V8>&WuB^On2V+UyXPQg zQ%8LB7k(@+J0YAVD~ELZ#3#iWqg8v3wtxLael;qafH4v|eEGh@xh&xEU|5!QFK)u5 z3(JMgYUq~2!yGtl(%XYYWz3hB8}J#deCyI0s=ASlCdVHP(DaZhp3a=KcO#AYUk&u0 z5Kw{Ur&ss?#kZV*ov=I3&I`Bzc0AmgZY>w= zzRpGqe@=vzVsIjoh!1#5H$AkAlG%C-5YEzioi*u^0rZ`JVFn! zoJHS6SO!X4J9TUu0Zne;FFjMcREnZ`M#b!KE?EsAUv`b>}k%MiyR8?Hd6r zAMJ8ZfJdG0YX7-`G#PRVp}Y=Z5MABHxFs;oE3Pu8m7C$xDW99em(#JV(kTF4GkL|P zX2uw-EVgbu*GLYX5YiDMX#uqP*j=q61UST=ufKmFFbe1&(r9cm*zQcl8bf{W{#$wn z(~_<4^MAyyPr-8f z;NKRsa8rC_U~di*d;Uq%4jbqzhnUPj$Mq?G+4|}(a-_Y+vPN{%!)YH-@?!lWR2inQ z5EWUZFSM$$7AHH`6^8`c!V<1a7v46o^ors_#S--?`(~0VZ=Yc)Eik(Yk}+uXLB{gPrh}oC{(Zzpf(<^CteHi2KkWj~8}}UGI*L;C$rg3u;Q)m+ zae28({hn~YY#|Z6Wr2SW!f4$?KQ(_1Rj5jF~PvGtK4l)(G8&W%H zJ?KKTW6y1di?Ys8AhhgQB@-GakOLI>upY@yE)zI}_uM2YQkUXAQakGVtU3^`-&-GN}+H819U^eV#|j>ZdT+~%IX-cr~s?JJT(ia&-u*TRN1m4;Z}4K ztyzH(h&4?X)w2mBb%i1>(E|f*jz^~XYcCXJi@lWE?Y}oG-`0KswrA(B^W=`=B624l zrSFocgLYO}7Cqh$jssmd;oRsFb%js6{?@Y`_|PAWFEc|&BQQ5YQN!l>eFA+Wt)_3( z=6;BRtjBH;gnJxElFg9^y2KJZYv!aLCk#LQ+B!!bIAK3DB4U(Z5{#EmdBFxbg0AV4 zFdOAaZ2yEx=TT|&!-rs#RxmDx&OU%KGbGtlv2hEaO3BnDwX{eO$kG?+SX0gtLF(`lZTOL5;AN{TT1?-fnC-N6&S zt*xmmC`dByl3Lk|+RhzFJ0pM{MVux^`6MAq878*5J27*z9Dx7?sWe-AH#B5rs!2aFS#`EilZ_OpB@UzyoNH=QFg*yGhCSb+$FGW(MM=>>l$uT9{Gim=eUSL2K` zDKoLZe*8fibBT!`jMin!G#ccNEdgxl*dzBcQ){c5fZ2jlikn=|SnIjMYPGp$JJ20K zYWU$>K;h9LBeu`JoOeIhTE--iqfYr>e#Gyt`rvP6A*HGUW!@KQCD#96nUi7_KAl#x z4z_j<;T-HRP5LGUC0}4mk|2+zjR#DtTkN9*&aUltuz3zg;IBqgnrSM65?)9Lbi~kl zIrYsT&?c{hmsj>b5gXaal9x6i5UKg-qw0WI%w5w<)12RTtpAK@8SXgJ4B~bHTETHX z@1>k^`((J+XK2rf$VJw&ZPaZ-4Mo?-0yeYahcQ=18; zO}`S7k~wt_@qQ|1+NQ^S&=x3H-ySd#ZqsyTPG}`pJ*4+e(yMC(UR`>DJo;!MW4$Zs z{CaxeSps4yH3Z+iR1<0D;}lTMDCOJ=OVx6dmItoUhf}YzzLo?#u^ZiZE$^SQMP~=MW1JxeWFRr%LjkJH-rPgb|Tx~an(C{f5-|fg^ zu^Fh*y~pP7FyB%(b#>#)??T*qo}vSrn%VcH`;{yl_K~joUM+Q6IgYpzO@^caIwsCX0pvc^2+>?%d_Wz>ny=Z;w=r-A(LBu*2s8S{s${|O zsr0}W9i_;k{2OLaa;RX{7*xeRfED*Wzl$wQY3l=&u;i*cZ}W9gJ@``)`rTvr}V zTciaGKrxNlNQekLpwCrnO>P)VQ@Jf#vf?V$D8F$FPX;knaJr-zDR%|*5D2K8fOnl( zCQ?knA5E8U&ku(V(l&(OH>GB3JR5!}5(EVON;it1{v3CUP+{-%QN{^Tl(X(sn*sg4 z@?C~NnJaNn8MbVh{>XPa->3pr#Tfm&?5-7ti=yVyc>=)tcT{Zs*SKmsg_U8*h(7P5 z0iVLfS?kksZD0Iu{js2?G1lz^ZDp5`Bj!LCT=63BqKjKwf0eVZBIz++ulk8L8vGe4 zXlsRLlIq}gf;Ai7rE>%`$iHlBBcaoD@z!rFV}X~diixok3Ps^!JrVzJm8b2ZcrP$8 zCjiFzp=?NU)d^A8=TK8062R6P!TnraeLrHgIbb|;eMZ(lg=qxdGc1jP*N*3+pJQPo z0bGj!XS=KLQ?H`QLCT@%^ei2*hVb<^{QcQI-1QxL1It8bSU(VKKotSp5R_LKfs=xj zgD7dwA(gZZ1Y5VX&?Hg=w^0n_tL}gJ^+`y7v6E}Ev(MFPeztmexFc_7|7CYJ*Yx9E zVIMXitN&#-7I609C);=Pg2FSr%$i>KuXe=?_SZzF80#jC&&tv7Lo^<&QuvMoZk22X zwvK2)87Y6I_EBa^U{ZEK@&a-(3|Coc#vFMz?1ko)+4lR##562Z?U!fo7+J#UXZP}L zKB?to)Zv{XA3Ep;|3YNq1nB9k-!q(L^mv1D1g{qog+aVcNDOALz~3J*KV(;34$y$w z)6Oss_5k6zQB7nE;==Efhn+ao;ilV+C_fgI&L$UH2$pkr8WqB4YVd!d68kf`f+Ui7 z4e-IRnq&Ec0d~lq2WF0u8clo#*KD0D5DqaPi=oM0)+%X%5s1voZ~6pQR`VsQb>XFs zYI=l#E~L-OFZ*tO(Z{!uDzT7$Zv`cgXa>QTvl~<>ePVWZ!Mt<~4jM9Sz196G$d|}< zVTkX?;f80-C%@PAP`~Xkg`-qReBIVfH6mEVLRf*Bd6^0O`~o;yrCTh~qXRjUb*RB( z1YZ+?+VRh2k>Cx&4H36vBnT$i0SPMBQ4WTl`_+j{*~J`{*eY%V5=#Jt*w`a3kq@3h9yZvO{ zSx%nfsS@pXr(^)Cg@wV+#NjBT@QfqDChIAh+>y%Ut~XkVK{*=jJ#8MWS$CY#?pLU$ zw-^cvGaao6W7Eumq1rti-oM(IF`{x92Kd*`&SK|ks@m$@O$Ea<1hw+lA5q7)4sm}S zQ!XPwrY~U2(q62xyRv|14m26i+mrNrU88sh_9cWu_!;}Cd)#zm2;wz0%@54{I&l8> zJ=MB}>90;0jMMJr=g3$5gFyUaazzZYrk!z=M2$Fo?;VG_%%4Z7F-debo*naa zy3*}$-$S7iUz||YkTb%wEmhlNSX(7rHf(epn*fZ3D-uPF$^@b#n(sv0O>?vF!JB(B7x@Sc#uB#dY!AsPdd?y#guAoS_=XM*_IpQ+Txs&C0s1w)0T(zV~T?=55v0uB-2!IKm)Q7w4kJOISjg$r=$9WAc<)o^gSlr&Uy`tJwa-@jP|Z% zrXc7;=JG?0SQPpyy`ig}H7wNTiikk34sW$kUoY}Z7WE}lUL3Ad+ps3Hjr3Ih>$#3^ z${0!Bq!X;nK^6>h0t?pgd^4mAud=<;D?ZB(_M@0ybOEYoYijRKM!l6HFE98B4hb5A zJMQl*^*adoUJ{(<29oSsDHT{`Q%^-9*WR3#fHH)1RPA;zidlrz^8zOC9@xM73ices zj$EW*unK*;CF2cBO-nWh0y+|Gv_(x=$RvS;Z?W*#={rs{IaW7-`aIZq!O@nykwlT3 zzEZ=L4Zb(HGSmAi0_56UgLUVP*@0D^Isgxl1rOp+y<=oey~Ay8U+5Dx+L)oE8LhW# z;^*1A>NA}U<`HAtS~;45{Lu}mb7rLxwnFyU*`PUynjRe-Ko$Yj-f>keYd}z^NKAQX zTT0bHrj_Y&z-$Ba@D?waaSmw{;vxuW%^&XL_yAibFK|s-GIhYLzKCf*c}ByeE9o_A zSwQn^30Rnx-e#0-q*R3ig`_g)>Mn;v=#*QUtOy`%6}cB4x7u2vR-+Yycx|=SB{5wZ zn1Mf|nHMBb@$At33~~R4E2Ss)-qlh9ok#-3RI6xZ>&0Eh+6u;?pzo@p=+WYB&%T9K z^;$jjg<0^mi0%I#*$iU3r)DN=RP+9juIwXAA@~vEJ83ZXTF2dnxdTU()tf;iK#H97X^Dv1#!(Wlh zp&+#hO2q3va3mWYp_n!shvEjIw{|9c#DjD>;1rCk+W=W?TGwRPHw(=O4{Y+RCPAHL zS-B?(9neY-!J@&@9yNhK>>jC|$6>&(n!ZmtJQvQX0rnsDyz!t@ep0&80Tp#2^YD-_ zaLkP%>?rLkb8}~1CoF|C?ALEI6J~x%uuRn?)VF4X?4S`Br*6J82GB!*T2uQd>ZU

dyguk8>=hyb4XR{9dxKVqU}@05wM;^ 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�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 If+=THRc9ve@c;k- literal 0 HcmV?d00001 diff --git a/MikroMaster/20261007/20261007102001-Config.rsc b/MikroMaster/20261007/20261007102001-Config.rsc new file mode 100644 index 0000000..14ed1bd --- /dev/null +++ b/MikroMaster/20261007/20261007102001-Config.rsc @@ -0,0 +1,4340 @@ +# 2026-10-07 10:20:03 by RouterOS 7.23.3 +# software id = 2961-C4ZZ +# +# model = RBD52G-5HacD2HnD +# serial number = HCX084RAVFA +/interface bridge +add name=Bridge-Lan +/interface wireless +# managed by CAPsMAN +# channel: 2442/20-Ce/gn(17dBm), SSID: vados, local forwarding +set [ find default-name=wlan1 ] disabled=no mode=ap-bridge ssid=vados \ + wireless-protocol=802.11 +# managed by CAPsMAN +# channel: 5260/20-Ceee/ac/DP(17dBm), SSID: vados5g, local forwarding +set [ find default-name=wlan2 ] disabled=no mode=ap-bridge ssid=vados5g \ + wireless-protocol=802.11 +/interface ethernet +set [ find default-name=ether1 ] mac-address=48:8F:5A:8E:1A:BC name=\ + "ether1 - Unet" +/interface veth +add address=172.19.14.102/30 container-mac-address=30:C8:D7:A4:6C:D6 dhcp=no \ + gateway=172.19.14.101 gateway6="" mac-address=30:C8:D7:A4:6C:D5 name=\ + veth-awg3vds +/interface wireguard +add disabled=yes listen-port=41430 mtu=1320 name=wg-awg3vds +add disabled=yes listen-port=32252 mtu=1420 name=wg1 +/interface list +add comment=defconf name=WAN +add comment=defconf name=LAN +add exclude=LAN include=WAN name=Internet +/interface wireless security-profiles +set [ find default=yes ] supplicant-identity=MikroTik +/ip dhcp-server option +add code=12 name=HostName +add code=119 force=yes name=domain-search-list value="0x03'WORKGROUP'0x00" +/ip dhcp-server option sets +add name=HP1505n options=HostName +add name=StartLife1 options=HostName +add name=amsterDev options=HostName +add name=MiTV options=HostName +add name=miller options=HostName +add name=amster options=HostName +add name=garage options=HostName +add name=domain-search-set options=domain-search-list +add name=VADOS-LEN options=HostName +add name=VADOS-NUC options=HostName +add name=MikroNUC options=HostName +add name=master options=HostName +add name=MikroYellow options=HostName +add name="=\"Client ID\"" options=HostName +/ip dns forwarders +add disabled=yes dns-servers=1.1.1.1,1.0.0.1 name=blsp.at verify-doh-cert=no +add comment=Kra disabled=yes dns-servers=1.0.0.1,1.1.1.1 name=slon2.to \ + verify-doh-cert=no +add disabled=yes dns-servers=1.1.1.1,1.0.0.1 name=slon3.at verify-doh-cert=no +add disabled=yes dns-servers=1.0.0.1,1.1.1.1 name=slon3.cc verify-doh-cert=no +add disabled=yes dns-servers=1.1.1.1,1.0.0.1 name=bs2web.at verify-doh-cert=\ + no +add disabled=yes dns-servers=1.1.1.1,1.0.0.1 name=bs2best.at verify-doh-cert=\ + no +add disabled=yes dns-servers=1.0.0.1,1.1.1.1 name=psrms.is verify-doh-cert=no +/ip pool +add name=dhcp ranges=10.30.30.150-10.30.30.200 +/ip dhcp-server +add address-pool=dhcp bootp-support=dynamic dhcp-option-set=domain-search-set \ + interface=Bridge-Lan name=masterDHCP server-address=10.30.30.81 +/ip smb users +set [ find default=yes ] disabled=yes +add disabled=yes name=vados +/routing table +add disabled=no fib name=To-VPN +/system script +add dont-require-permissions=no name=fetchCustom owner=admin policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@10\ + .30.30.10.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.10.pub\";\ + \n\ + \n\ + \n#\ + \n\ + \n#root.mnuc.backuper\ + \n\ + \n\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@10\ + .30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\ + \n\ + \n\ + \n#:local Script AM-GlobalConfig;\ + \n\ + \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\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n\ + \n:global MkDir;\ + \n\ + \n\ + \n:local FetchFile Manager@id_rsa.pub\ + \n:local localDir \"/\";\ + \n\ + \n\ + \n\ + \n\$MkDir \$localDir;\ + \n\ + \n\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig-2026-09-1211:58:18.rsc owner=AM-GlobalConfig policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GlobalConfig\r\ + \n# Script comment: Global Config Script\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# Warning: Dont touch this line!\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global GlobalConfReady false;\r\ + \n#\r\ + \n#\r\ + \n# Global Url For Amster scripts to fetch\r\ + \n# most be defined in AM-Init-Script or AM-setup scripts\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global ScriptsUrlSuffix (a);\r\ + \n:global CheckSumsVerify true;\r\ + \n\r\ + \n:global ScriptUpdatesCRLF true;\r\ + \n:global CommentsInScripts true;\r\ + \n\r\ + \n# Debug output:\r\ + \n:global PrintDebug true; #false;\r\ + \n\r\ + \n# Debug output for specific script:\r\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\r\ + \n\r\ + \n# Debug logs\r\ + \n# Other actions (disk, email, remote or support) can be used as well.\r\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\r\ + \n#/system/logging/add topics=script,debug action=memory;\r\ + \n\r\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\r\ + \n:global Domain \"WORKGROUP\";\r\ + \n\r\ + \n:global EmailGeneralTo \"vados@vados.ru\";\r\ + \n#:global EmailGeneralCc \"\";\r\ + \n\r\ + \n# \$ScriptInstallUpdate mod/notification-telegram\r\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\r\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\r\ + \n# Use this to send notifications to a specific topic in group.\r\ + \n#:global TelegramThreadId \"30\";\r\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\r\ + \n# or user names. Groups allow to chat with devices simultaneously.\r\ + \n:global TelegramChatIdsTrusted {\r\ + \n \"454403445\"\r\ + \n \"-1003631309063\"\r\ + \n \"-5124482807\"\r\ + \n \"1087968824\";\r\ + \n};\r\ + \n# \"-5294757340\";\r\ + \n\r\ + \n:global TelegramChatGroups \"(all)\";\r\ + \n#:global TelegramChatGroups \"(all|home|office)\";\r\ + \n\r\ + \n:global NotificationFunctions {\r\ + \n \"email\"\r\ + \n \"telegram\";\r\ + \n};\r\ + \n# Toggle this to disable symbols in notifications.\r\ + \n:global NotificationsWithSymbols true;\r\ + \n:global TerminalColorOutput true;\r\ + \n\r\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\r\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\r\ + \n\r\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\r\ + \n:global updateChannel \"stable\";\r\ + \n\r\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\" . \$Identity . \"/\ + \");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass (a); #{\r\ + \n# \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass (a); # {\r\ + \n# \"\";\r\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\r\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n\r\ + \n# Script BackupAndUpdate mode, possible values: backup,\r\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \r\ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\r\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\r\ + \n# osnotify - Set `forceBackup` to always create backups on every run\r\ + \n:global DevInfoIncludeIP true;\r\ + \n:global BackupAndUpdateMode \"osnotify\"\r\ + \n\r\ + \n:global forceBackup true;\r\ + \n:global BackupPassword \"Peskar55\";\r\ + \n\r\ + \n# SFTP Backup Variables\r\ + \n:global BackupRandomDelay 0;\r\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\r\ + \n:global BackupUploadUser \$Identity;\r\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\r\ + \n\r\ + \n:global BackupSendBinary true;\r\ + \n:global BackupSendExport true;\r\ + \n:global BackupSendGlobalConfig true;\r\ + \n:global BackupSendScripts true;\r\ + \n\r\ + \n# Remove local file after uploading if no errors\r\ + \n:global BackupRmLocal true;\r\ + \n\r\ + \n# Local Backups Root Directory \r\ + \n:global BackupLocalRoot \"tmpfs\";\r\ + \n\r\ + \n# Encrypt Backup\r\ + \n:global BackupEncrypt true;\r\ + \n\r\ + \n# Sensitive information in Backups\r\ + \n:global BackupSens true;\r\ + \n\r\ + \n# User Export\r\ + \n:global BackupUser true;\r\ + \n\r\ + \n# License Export (not for CHR, will silently skip)\r\ + \n:global BackupLicense false;\r\ + \n\r\ + \n# SSH Keys\r\ + \n:global BackupSshKeys true;\r\ + \n\r\ + \n# Certificate Export\r\ + \n:global BackupCerts true;\r\ + \n\r\ + \n# Certificate Password\r\ + \n:global BackupCertsPasswd \"\";\r\ + \n\r\ + \n# User-Manager Export\r\ + \n:global BackupUserMan false;\r\ + \n\r\ + \n# The Dude Export\r\ + \n:global BackupDude false;\r\ + \n\r\ + \n# User Files to export, comma-separated string or array of strings\r\ + \n# User Files are not removed on backup\r\ + \n# Any directory paths will be removed (/ -> _) on remote file\r\ + \n# Nonpresent files are silently skipped\r\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\r\ + \n\r\ + \n# load functions and any custom scripts\r\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\r\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\r\ + \n#\r\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \r\ + \n# :onerror Err {\r\ + \n# /system/script/run \$Script;\r\ + \n# } do={\r\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\r\ + \n# }\r\ + \n#}\r\ + \n#:log info \"\\ndevMode = \$devMode\";\r\ + \n#:log info \"\\ndevRunning = \$devRunning\";\r\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalConfReady true;\r\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\r\ + \n" +add dont-require-permissions=no name=AM-Fetch-Generator owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \n:local srcFile \"AM-Awg-Generator.rsc\";\ + \n:local dstFile \$srcFile;\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \"/\$srcFile\") dst-pat\ + h=\"/\$dstFile\";\ + \n\ + \nexit 0\ + \n#\ + \n\ + \n#root.mnuc.backuper\ + \n\ + \n\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \".bak/mikro_bak_rsa@10\ + .30.30.81.pub\") dst-path=\"/mikro_bak_rsa@10.30.30.81.pub\";\ + \n\ + \n\ + \n#:local Script AM-GlobalConfig;\ + \n\ + \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\ + \n#/usb1/mikro_bak_rsa.pub\ + \n\ + \n\ + \n#:local FetchFile AM-DOHCert.rsc\ + \n\ + \n\ + \n\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/tmp/\";\ + \n\ + \n:global MkDir;\ + \n\ + \n\ + \n:local FetchFile Manager@id_rsa.pub\ + \n:local localDir \"/\";\ + \n\ + \n\ + \n\ + \n\$MkDir \$localDir;\ + \n\ + \n\ + \n\ + \n/tool/fetch mode=https url=(\$GlobalScriptsUrl . \$FetchFile) dst-path=(\ + \$localDir . \$FetchFile);\ + \n" +add comment=awg2vds dont-require-permissions=no name=awg2vds-uninstall owner=\ + vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \n :put \"Uninstallimg AmneziaWG...\"\ + \n :log info \"Uninstallimg AmneziaWG...\"\ + \n :local prevDNS \"\"\ + \n :do { :set prevDNS [/container/envs/get [find where list=\"awg2vds-env\ + \" key=\"AWG_PREV_DNS\"] value] } on-error={}\ + \n :local prevTmpdir \"\"\ + \n :do { :set prevTmpdir [/container/envs/get [find where list=\"awg2vds-\ + env\" key=\"AWG_PREV_TMPDIR\"] value] } on-error={}\ + \n /ip/route/remove [find where comment=awg2vds-tunnel]\ + \n /ip/route/remove [find where comment=awg2vds-dns]\ + \n /container/stop [find where interface=veth-awg2vds]\ + \n :delay 7s\ + \n /container/remove [find where interface=veth-awg2vds]\ + \n /container/envs/remove [find where list=\"awg2vds-env\"]\ + \n :if (\$prevDNS != \"\") do={\ + \n :do { /ip/dns/set servers=\"\$prevDNS\" } on-error={}\ + \n :put (\"DNS restored to: \$prevDNS\")\ + \n }\ + \n /container/config set tmpdir=\$prevTmpdir\ + \n :put (\"Container tmpdir restored to: \$prevTmpdir\")\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg2vds\"]\ + \n /ip/firewall/nat/remove [find where src-address=\"172.20.200.68/30\"]\ + \n /ip/address/remove [find where address=\"172.20.200.69/30\"]\ + \n /interface/veth/remove [find where name=\"veth-awg2vds\"]\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awg2vds\"\ + ]\ + \n /ip/address/remove [find where interface=\"wg-awg2vds\"]\ + \n /interface/wireguard/remove [find where name=\"wg-awg2vds\"]\ + \n :do { /file/remove [find where name~\"awg2vds.+tar\"] } on-error={}\ + \n :do { /file/remove [find where name=\"usb1/awg2vds\"] } on-error={}\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges_timeout.rsc\"] } \ + on-error={}\ + \n :do { /file/remove [find where name~\"usb1/pull\"] } on-error={}\ + \n :put \"Uninstall AmneziaWG Proxy complete!\"\ + \n :log info \"Uninstall AmneziaWG Proxy complete!\"\ + \n /system/script/remove [find where name=awg2vds-uninstall]\ + \n" +add comment="Global Config Script" dont-require-permissions=no name=\ + AM-GlobalConfig owner=AM-GlobalConfig policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GlobalConfig\r\ + \n# Script comment: Global Config Script\r\ + \n# Copyright (c) 2007-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# Warning: Dont touch this line!\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global GlobalConfReady false;\r\ + \n#\r\ + \n#\r\ + \n# Global Url For Amster scripts to fetch\r\ + \n# most be defined in AM-Init-Script or AM-setup scripts\r\ + \n:global GlobalScriptsUrl \"https://ros.vados.ru/\";\r\ + \n:global ScriptsUrlSuffix (a);\r\ + \n:global CheckSumsVerify true;\r\ + \n\r\ + \n:global ScriptUpdatesCRLF true;\r\ + \n:global CommentsInScripts true;\r\ + \n\r\ + \n# Debug output:\r\ + \n:global PrintDebug true; #false;\r\ + \n\r\ + \n# Debug output for specific script:\r\ + \n#:set (\$PrintDebugOverride->\"AM-GlobalFunc\") true;\r\ + \n\r\ + \n# Debug logs\r\ + \n# Other actions (disk, email, remote or support) can be used as well.\r\ + \n# I do not recommend using echo - use debug output instead (https://rsc.\ + eworm.de/main/DEBUG.html#debug-output).\r\ + \n#/system/logging/add topics=script,debug action=memory;\r\ + \n\r\ + \n:global MikrotikUpgradeUrl \"https://upgrade.mikrotik.com/routeros\";\r\ + \n:global Domain \"WORKGROUP\";\r\ + \n\r\ + \n:global EmailGeneralTo \"vados@vados.ru\";\r\ + \n#:global EmailGeneralCc \"\";\r\ + \n\r\ + \n# \$ScriptInstallUpdate mod/notification-telegram\r\ + \n:global TelegramTokenId \"8390868324:AAG3_d1hfVR2M6pGAgDK6ZvhOe4J97nyopw\ + \";\r\ + \n:global TelegramChatId \"-1003631309063\"; #\"454403445\";\r\ + \n# Use this to send notifications to a specific topic in group.\r\ + \n#:global TelegramThreadId \"30\";\r\ + \n# Using telegram-chat you have to define trusted chat ids (not group ids\ + !)\r\ + \n# or user names. Groups allow to chat with devices simultaneously.\r\ + \n:global TelegramChatIdsTrusted {\r\ + \n \"454403445\"\r\ + \n \"-1003631309063\"\r\ + \n \"-5124482807\"\r\ + \n \"1087968824\";\r\ + \n};\r\ + \n# \"-5294757340\";\r\ + \n\r\ + \n:global TelegramChatGroups \"(all)\";\r\ + \n#:global TelegramChatGroups \"(all|home|office)\";\r\ + \n\r\ + \n:global NotificationFunctions {\r\ + \n \"email\"\r\ + \n \"telegram\";\r\ + \n};\r\ + \n# Toggle this to disable symbols in notifications.\r\ + \n:global NotificationsWithSymbols true;\r\ + \n:global TerminalColorOutput true;\r\ + \n\r\ + \n:global DetectIpAddrDefault \"https://ipv4.mikrotik.ovh/\";\r\ + \n:global DetectIpAddrFallback \"https://api.ipify.org/\";\r\ + \n\r\ + \n## Update channel. Possible values: stable, long-term, testing, developm\ + ent\r\ + \n:global updateChannel \"stable\";\r\ + \n\r\ + \n:global CertRenewUrl (\$GlobalScriptsUrl . \"certs/\" . \$Identity . \"/\ + \");\r\ + \n:global CertRenewTime 2w;\r\ + \n:global CertRenewPass (a); #{\r\ + \n# \"\";\r\ + \n# \"v3ry-s3cr3t\";\r\ + \n# \"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n:global CertWarnTime 1w;\r\ + \n:global CertIssuedExportPass (a); # {\r\ + \n# \"\";\r\ + \n# \"cert1-cn\"=\"v3ry-s3cr3t\";\r\ + \n# \"cert2-cn\"=\"4n0th3r-s3cr3t\";\r\ + \n#};\r\ + \n\r\ + \n# Script BackupAndUpdate mode, possible values: backup,\r\ + \n# updateOnce - Update once as \"osnotify\" and back \"osnotify\" mode (i\ + n terminal run :set OSUpdateMode updateOnce; \$OSUpdateMode;). \r\ + \n# osupdate - Update if available and creates backups before/after update\ + \_(ignores `forceBackup`)\r\ + \n# Set `forceBackup` to true to always create backups, even\ + \_without updates\r\ + \n# osnotify - Set `forceBackup` to always create backups on every run\r\ + \n:global DevInfoIncludeIP true;\r\ + \n:global BackupAndUpdateMode \"osnotify\"\r\ + \n\r\ + \n:global forceBackup true;\r\ + \n:global BackupPassword \"Peskar55\";\r\ + \n\r\ + \n# SFTP Backup Variables\r\ + \n:global BackupRandomDelay 0;\r\ + \n:global BackupUploadUrl \"sftp://amster.vados.ru/upload/\";\r\ + \n:global BackupUploadUser \$Identity;\r\ + \n:global BackupUploadPass \"root.mnuc.backuper\";\r\ + \n\r\ + \n:global BackupSendBinary true;\r\ + \n:global BackupSendExport true;\r\ + \n:global BackupSendGlobalConfig true;\r\ + \n:global BackupSendScripts true;\r\ + \n\r\ + \n# Remove local file after uploading if no errors\r\ + \n:global BackupRmLocal true;\r\ + \n\r\ + \n# Local Backups Root Directory \r\ + \n:global BackupLocalRoot \"tmpfs\";\r\ + \n\r\ + \n# Encrypt Backup\r\ + \n:global BackupEncrypt true;\r\ + \n\r\ + \n# Sensitive information in Backups\r\ + \n:global BackupSens true;\r\ + \n\r\ + \n# User Export\r\ + \n:global BackupUser true;\r\ + \n\r\ + \n# License Export (not for CHR, will silently skip)\r\ + \n:global BackupLicense false;\r\ + \n\r\ + \n# SSH Keys\r\ + \n:global BackupSshKeys true;\r\ + \n\r\ + \n# Certificate Export\r\ + \n:global BackupCerts true;\r\ + \n\r\ + \n# Certificate Password\r\ + \n:global BackupCertsPasswd \"\";\r\ + \n\r\ + \n# User-Manager Export\r\ + \n:global BackupUserMan false;\r\ + \n\r\ + \n# The Dude Export\r\ + \n:global BackupDude false;\r\ + \n\r\ + \n# User Files to export, comma-separated string or array of strings\r\ + \n# User Files are not removed on backup\r\ + \n# Any directory paths will be removed (/ -> _) on remote file\r\ + \n# Nonpresent files are silently skipped\r\ + \n:global BackupUserList \"autosupout.rif,autosupout.old.rif\";\r\ + \n\r\ + \n# load functions and any custom scripts\r\ + \n# [ /system/script/find where name=\"global-config-ov\ + erlay\" ], \\\r\ + \n# [ /system/script/find where name~\"^global-config-o\ + verlay\\\\.d/.\" ]\r\ + \n#\r\ + \n#:foreach Script in=([ /system/script/find where name=\"Amster-TGglobalV\ + ars\" ], [ /system/script/find where name=\"Amster-TGglobalFunc\" ]) do={\ + \r\ + \n# :onerror Err {\r\ + \n# /system/script/run \$Script;\r\ + \n# } do={\r\ + \n# :log error (\"Loading configuration from configs and functions\"\ + \_. [ /system/script/get \$Script name ] . \" failed: \" . \$Err);\r\ + \n# }\r\ + \n#}\r\ + \n#:log info \"\\ndevMode = \$devMode\";\r\ + \n#:log info \"\\ndevRunning = \$devRunning\";\r\ + \n:foreach Script in=[ /system/script/find where source~\"^#!rsc by Vados \ + GlobalRUN\\r\?\\n\" ] do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n :log error (\"Run script \" . [ /system/script/get \$Script name \ + ] . \" width marker \\\" GlobalRUN\\\" failed: \" . \$Err);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# signal we are ready\r\ + \n:set GlobalConfReady true;\r\ + \n:while (\$GlobalConfReady != true) do={:delay 500ms};\r\ + \n" +add comment="Global functions" dont-require-permissions=no name=AM-GlobalFunc \ + owner=AM-GlobalFunc policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-GglobalFunc\r\ + \n# Script comment: Global functions\r\ + \n# Copyright (c) 2005-2026 Vados \r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n:local ExitOK false;\r\ + \n:local ScriptName [ :jobname ];\r\ + \n#:global checkRunJob \$SriptName;\r\ + \n#:global fixCRLF;\r\ + \n#:if (\$fixCRLF != false) do={\r\ + \n#:foreach fixScript in=([ /system/script/find where name~\"*\" ]) do={/s\ + ystem/script/set source=[ :tocrlf [ get \$fixScript source ] ] \$fixScript\ + }\r\ + \n#:if (\$fixCRLF != \"LF\") do={ /system/script/set source=[ :tocrlf [ g\ + et \$fixScript source ] ] \$fixScript};};\r\ + \n#}\r\ + \n:global GlobalFuncReady false;\r\ + \n\r\ + \n# Git commit id & info, expected configuration version\r\ + \n:global CommitId \"main/23892/25da9dda\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 10:10:04 07.10.2026.\";\r\ + \n\r\ + \n# The variables are received right here.\r\ + \n:global GlobalConfVersion 140;\r\ + \n\r\ + \n:global SumsDirAndFileName \"tmp/checksums.json\";\r\ + \n\r\ + \n:global Identity [/system/identity/get name];\r\ + \n:global IdentityShort [:pick \$Identity 0 18];\r\ + \n\r\ + \n:global devBoardName [/system/resource/get board-name];\r\ + \n:global devMode [/system/device-mode/get mode];\r\ + \n:global devCurArch [/system/resource/get architecture-name];\r\ + \n:global devCurVersion [/system/resource/get version];\r\ + \n\r\ + \n# Variables defined in AM-GlobalConfig.rsc\r\ + \n:global TerminalColorOutput;\r\ + \n:global CommentsInScripts;\r\ + \n:global DetectIpAddrDefault;\r\ + \n:global DetectIpAddrFallback;\r\ + \n:global updateChannel;\r\ + \n:global Domain;\r\ + \n:global EmailGeneralTo;\r\ + \n:global BackupAndUpdateMode;\r\ + \n\r\ + \n# Single functions, without nested functions.\r\ + \n:global MiniDateTimeStamp;\r\ + \n:global MicroDateTimeStamp;\r\ + \n\r\ + \n# Include globals \$PrintDebug and \$PrintDebugOverride\r\ + \n:global LogPrint;\r\ + \n\r\ + \n# DeviceInfo and Updates\r\ + \n:global IsCheckUpdates;\r\ + \n:global WaitCheckUpdates;\r\ + \n:global GetPubIp;\r\ + \n\r\ + \n:global GetArrDeviceInfo;\r\ + \n:global WaitArrDeviceInfo;\r\ + \n\r\ + \n:global devModel;\r\ + \n:global devRunningMode;\r\ + \n\r\ + \n:global devRbRevision;\r\ + \n:global devRbSerialNumber;\r\ + \n:global devRbVerAvail;\r\ + \n\r\ + \n:global runningChannelVersion;\r\ + \n:global runningChannel;\r\ + \n:global runningVersion;\r\ + \n\r\ + \n:global devBuildTime;\r\ + \n:global ROsVerAvail;\r\ + \n:global PkgUpdStatus;\r\ + \n:global currentUpdateChannel;\r\ + \n\r\ + \n:global ScriptInstallUpdate;\r\ + \n\r\ + \n:global DeviceInfo;\r\ + \n\r\ + \n:global OldMode;\r\ + \n\r\ + \n:global ParseKeyValueStore;\r\ + \n:global RandomDelay;\r\ + \n:global GetRandomNumber;\r\ + \n:global EscapeForRegEx;\r\ + \n:global CharacterMultiply;\r\ + \n:global CharacterReplace;\r\ + \n:global CleanFilePath;\r\ + \n:global CleanName;\r\ + \n\r\ + \n:global CommitBrief;\r\ + \n\r\ + \n:global EitherOr;\r\ + \n:global FormatLine;\r\ + \n:global GetRandom20CharAlNum;\r\ + \n:global GetRandom20CharHex;\r\ + \n:global GetRandomNumber;\r\ + \n:global Grep;\r\ + \n:global IfThenElse;\r\ + \n:global MAX;\r\ + \n:global MIN;\r\ + \n:global HumanReadableNum;\r\ + \n\r\ + \n:global IsFullyConnected;\r\ + \n:global IsDNSResolving;\r\ + \n:global IsTimeSync;\r\ + \n:global IsTimeSyncCached;\r\ + \n:global IsTimeSyncResetNtp;\r\ + \n\r\ + \n:global MkDir;\r\ + \n:global RmDir;\r\ + \n:global RmFile;\r\ + \n:global FileGet;\r\ + \n:global Unix2Dos;\r\ + \n:global UrlEncode;\r\ + \n:global WaitForFile;\r\ + \n:global ScriptLock;\r\ + \n:global SendTelegram;\r\ + \n:global NotificationFunctions;\r\ + \n:global SendNotification;\r\ + \n:global SendNotification2;\r\ + \n:global SymbolForNotification;\r\ + \n:global SymbolByUnicodeName;\r\ + \n:global ValidateSyntax;\r\ + \n:global CheckSumsVerify;\r\ + \n:global GlobalConfChanges;\r\ + \n:global GlobalConfMigration;\r\ + \n:global VersionToNum;\r\ + \n:global RequiredRouterOS;\r\ + \n:global ExitError;\r\ + \n:global ExitOnError;\r\ + \n\r\ + \n:global FetchHugeFiles;\r\ + \n:global FetchUserAgentStr;\r\ + \n:global FileExists;\r\ + \n:global CertificateAvailable;\r\ + \n:global CertificateDownload;\r\ + \n:global CertificateNameByCN;\r\ + \n:global CharacterMultiply;\r\ + \n\r\ + \n:global InspectVar;\r\ + \n:global InspectVarRet;\r\ + \n:global ParseCustom;\r\ + \n\r\ + \n:set IsCheckUpdates do={\r\ + \n :local isInfo [:tobool \$1];\r\ + \n :global updateChannel;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :log info (\$0 . \" \\\$isInfo = \" . \$isInfo); \r\ + \n :local CurrentChannel [ /system/package/update/get channel ];\r\ + \n :if ([ :len \$updateChannel ] > 0 && \$CurrentChannel != \$updateChann\ + el) do={\r\ + \n :retry command={/system/package/update set channel=\$updateChannel} \ + \_delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" Set updates channel to: \$updateChannel\");\r\ + \n }\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local Channel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set currentUpdateChannel \$Channel;\r\ + \n :log info (\$0 . \" Update Channel: \" . \$Channel . \".\");\r\ + \n :local StatusPkg \"undefined\";\r\ + \n :log info (\$0 . \" Checking for updates...\");\r\ + \n :retry command={:set \$StatusPkg ([/system/package/update/check-for-up\ + dates without-paging as-value]->\"status\")} \\\r\ + \n delay=300ms max=5 on-error={};\r\ + \n :log info (\$0 . \" \\\$StatusPkg = \" . \$StatusPkg);\r\ + \n :if (\$StatusPkg = \"New version is available\") do={ :set PkgUpdStatu\ + s true; } else={ :set PkgUpdStatus false; }\r\ + \n :set ROsVerAvail [ :tostr [ /system/package/update/get latest-version \ + ] ];\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if (\$isInfo != false || \$PkgUpdStatus = true) do={\r\ + \n :log info (\$0 . \" \\\$PkgUpdStatus = \" . \$PkgUpdStatus);\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :retry command={:set (\$arrDeviceInfo->\"devUpdates\") [ /system/pac\ + kage/update/get ]} delay=500ms max=5 on-error={:log error (\"Error\")};\r\ + \n :return true;\r\ + \n } else={\r\ + \n :return \$PkgUpdStatus;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set WaitCheckUpdates do={\r\ + \n :global IsCheckUpdates;\r\ + \n :global PkgUpdStatus;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n :global arrDeviceInfo;\r\ + \n :local Status \"\";\r\ + \n :local Update;\r\ + \n :local WaitCount 0;\r\ + \n :if ([ \$IsCheckUpdates true ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n :while ((\$Status = \"\" || \$Status = \"finding out latest version...\ + \") && \$WaitCount < 60) do={\r\ + \n :delay 1s;\r\ + \n :set WaitCount (\$WaitCount + 1);\r\ + \n :set Status [ :tostr [ /system/package/update/get status ] ];\r\ + \n }\r\ + \n :set Update [ /system/package/update/get ];\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n :if ((\$Update->\"status\") = \"New version is available\") do={\r\ + \n :set PkgUpdStatus true;\r\ + \n } else={\r\ + \n :set PkgUpdStatus false;\r\ + \n }\r\ + \n :if ([ :typeof \$arrDeviceInfo ] != \"array\") do={\r\ + \n :set arrDeviceInfo [:toarray \$arrDeviceInfo];\r\ + \n }\r\ + \n :set (\$arrDeviceInfo->\"devUpdates\") \$Update;\r\ + \n :if (\$Status = \"\" || \$Status = \"finding out latest version...\") \ + do={\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set WaitArrDeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :while ([ \$GetArrDeviceInfo ] = false) do={\r\ + \n :delay 1s;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set GetArrDeviceInfo do={\r\ + \n :global LogPrint;\r\ + \n :global arrDeviceInfo;\r\ + \n :global devBoardName;\r\ + \n :global devModel;\r\ + \n :global devRunning;\r\ + \n :global devCurArch;\r\ + \n :global devRbRevision;\r\ + \n :global devRbSerialNumber;\r\ + \n :global devBuildTime;\r\ + \n :global runningChannelVersion;\r\ + \n :global runningChannel;\r\ + \n :global runningVersion;\r\ + \n :global currentUpdateChannel;\r\ + \n :global ROsVerAvail;\r\ + \n\r\ + \n :local DeviceInfo;\r\ + \n :local Resource [/system/resource/get];\r\ + \n :local Update [ /system/package/update/get ];\r\ + \n :local VersionString [ :tostr (\$Resource->\"version\") ];\r\ + \n :local ChannelStart [ :find \$VersionString \" (\" ];\r\ + \n :local RouterBoard;\r\ + \n :local IsRouterBoard false;\r\ + \n :local RunningMode \"\";\r\ + \n\r\ + \n :set devCurArch [ :tostr (\$Resource->\"architecture-name\") ];\r\ + \n :set devBuildTime [ :tostr (\$Resource->\"build-time\") ];\r\ + \n :set runningChannelVersion \$VersionString;\r\ + \n :set runningVersion \$VersionString;\r\ + \n :set runningChannel \"\";\r\ + \n\r\ + \n :if ([ :typeof \$ChannelStart ] = \"num\" && \$ChannelStart >= 0) do=\ + {\r\ + \n :set runningVersion [ :pick \$VersionString 0 \$ChannelStart ];\r\ + \n :local ChannelRest [ :pick \$VersionString (\$ChannelStart + 2) [ :\ + len \$VersionString ] ];\r\ + \n :local ChannelEnd [ :find \$ChannelRest \")\" ];\r\ + \n :if ([ :typeof \$ChannelEnd ] = \"num\" && \$ChannelEnd >= 0) do={\ + \r\ + \n :set runningChannel [ :pick \$ChannelRest 0 \$ChannelEnd ];\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([:pick \$devBoardName 0 3] != \"CHR\" or [:pick \$devBoardName 0\ + \_3] != \"x86\") do={\r\ + \n :do {\r\ + \n :set RouterBoard [[ :parse \"/system/routerboard/get\" ]];\r\ + \n# :set RouterBoard [ /system/routerboard/get ];\r\ + \n :if ((\$RouterBoard->\"routerboard\") = true) do={\r\ + \n :set IsRouterBoard true;\r\ + \n }\r\ + \n } on-error={}\r\ + \n }\r\ + \n\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get mode ];\r\ + \n } on-error={\r\ + \n :do {\r\ + \n :set RunningMode [ /system/device-mode/get running ];\r\ + \n } on-error={\r\ + \n :set RunningMode \"\";\r\ + \n }\r\ + \n }\r\ + \n :set devRunning \$RunningMode;\r\ + \n\r\ + \n :if (\$IsRouterBoard = true) do={\r\ + \n :set devModel [ :tostr (\$RouterBoard->\"model\") ];\r\ + \n :set devRbRevision [ :tostr (\$RouterBoard->\"revision\") ];\r\ + \n :set devRbSerialNumber [ :tostr (\$RouterBoard->\"serial-number\") \ + ];\r\ + \n } else={\r\ + \n :set devModel \$devBoardName;\r\ + \n :set devRbRevision \"\";\r\ + \n :set devRbSerialNumber \"\";\r\ + \n }\r\ + \n\r\ + \n :set currentUpdateChannel [ :tostr (\$Update->\"channel\") ];\r\ + \n :set ROsVerAvail [ :tostr (\$Update->\"latest-version\") ];\r\ + \n\r\ + \n :set (\$DeviceInfo->\"board-name\") \$devBoardName;\r\ + \n :set (\$DeviceInfo->\"architecture-name\") \$devCurArch;\r\ + \n :set (\$DeviceInfo->\"model\") \$devModel;\r\ + \n :set (\$DeviceInfo->\"revision\") \$devRbRevision;\r\ + \n :set (\$DeviceInfo->\"serial-number\") \$devRbSerialNumber;\r\ + \n :set (\$DeviceInfo->\"running-mode\") \$devRunning;\r\ + \n :set (\$DeviceInfo->\"build-time\") \$devBuildTime;\r\ + \n :set (\$DeviceInfo->\"running-channel-version\") \$runningChannelVers\ + ion;\r\ + \n :set (\$DeviceInfo->\"running-version\") \$runningVersion;\r\ + \n :set (\$DeviceInfo->\"running-channel\") \$runningChannel;\r\ + \n :set (\$DeviceInfo->\"routerboard\") \$IsRouterBoard;\r\ + \n :set (\$DeviceInfo->\"current-firmware\") [ :tostr (\$RouterBoard->\"\ + current-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"upgrade-firmware\") [ :tostr (\$RouterBoard->\"\ + upgrade-firmware\") ];\r\ + \n :set (\$DeviceInfo->\"package-channel\") \$currentUpdateChannel;\r\ + \n :set (\$DeviceInfo->\"installed-version\") [ :tostr (\$Update->\"inst\ + alled-version\") ];\r\ + \n :set (\$DeviceInfo->\"latest-version\") \$ROsVerAvail;\r\ + \n :set (\$DeviceInfo->\"update-status\") [ :tostr (\$Update->\"status\"\ + ) ];\r\ + \n\r\ + \n :set arrDeviceInfo \$DeviceInfo;\r\ + \n :return \$DeviceInfo;\r\ + \n}\r\ + \n\r\ + \n:set DeviceInfo do={\r\ + \n :global GetArrDeviceInfo;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global IfThenElse;\r\ + \n :global FormatLine;\r\ + \n :global CommitBrief;\r\ + \n\r\ + \n :local License [/system/license/get];\r\ + \n :local Snmp [ /snmp/get ];\r\ + \n :local Info [ \$GetArrDeviceInfo ];\r\ + \n\r\ + \n :if ([ :typeof \$Info ] != \"array\") do={\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :return ( \\\r\ + \n [ \$FormatLine \"Hostname\" \$Identity ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"location\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Location\" (\$Snmp->\"location\") ] . \"\\n\") ]\ + \_. \\\r\ + \n [ \$IfThenElse ([ :len (\$Snmp->\"contact\") ] > 0) \\\r\ + \n ([ \$FormatLine \"Contact\" (\$Snmp->\"contact\") ] . \"\\n\") ] .\ + \_\\\r\ + \n \"Hardware:\\n\" . \\\r\ + \n [ \$FormatLine \" Board\" (\$Info->\"board-name\") ] . \"\\n\" . \ + \\\r\ + \n [ \$FormatLine \" Arch\" (\$Info->\"architecture-name\") ] . \"\\\ + n\" . \\\r\ + \n [ \$FormatLine \" Model\" (\$Info->\"model\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"revision\") ] > 0) \\\r\ + \n (\" \" . (\$Info->\"revision\")) ] . \"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"serial-number\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Serial\" (\$Info->\"serial-number\") ] . \"\ + \\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"nlevel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"nlevel\ + \")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS:\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$License->\"level\") ] > 0) \\\r\ + \n ([ \$FormatLine \" License\" (\"level \" . (\$License->\"level\ + \")) ] . \"\\n\") ] . \\\r\ + \n [ \$FormatLine \" Channel\" (\$Info->\"package-channel\") ] . \"\ + \\n\" . \\\r\ + \n [ \$FormatLine \" Installed\" (\$Info->\"installed-version\") ] .\ + \_\"\\n\" . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"running-channel\") ] > 0) \\\r\ + \n ([ \$FormatLine \" Running\" ((\$Info->\"running-version\") . \ + \" (\" . (\$Info->\"running-channel\") . \")\") ] . \"\\n\") \\\r\ + \n ([ \$FormatLine \" Running\" (\$Info->\"running-version\") ] . \ + \"\\n\") ] . \\\r\ + \n [ \$IfThenElse ([ :len (\$Info->\"latest-version\") ] > 0 && \\\r\ + \n (\$Info->\"installed-version\") != (\$Info->\"latest-version\"))\ + \_\\\r\ + \n ([ \$FormatLine \" Available\" (\$Info->\"latest-version\") ] .\ + \_\"\\n\") ] . \\\r\ + \n [ \$IfThenElse ((\$Info->\"routerboard\") = true && \\\r\ + \n (\$Info->\"current-firmware\") != (\$Info->\"upgrade-firmware\")\ + ) \\\r\ + \n ([ \$FormatLine \" Firmware\" ((\$Info->\"current-firmware\") .\ + \_\" -> \" . (\$Info->\"upgrade-firmware\")) ] . \"\\n\") ] . \\\r\ + \n \"RouterOS-Scripts:\\n\" . \\\r\ + \n [ \$FormatLine \" Commit\" [ \$CommitBrief ] ] . \"\\n\" . \\\r\ + \n [ \$FormatLine \" Version\" \$GlobalConfVersion ]);\r\ + \n}\r\ + \n\r\ + \n:if ([ :typeof \$NotificationFunctions ] != \"array\") do={:set Notifica\ + tionFunctions ({})}\r\ + \n\r\ + \n:set GetRandom20CharAlNum do={\r\ + \n :global EitherOr;\r\ + \n :return [ :rndstr length=[ \$EitherOr [ :tonum \$1 ] 20 ] from=\"ABCDE\ + FGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789\" ];\r\ + \n}\r\ + \n\r\ + \n:set GetRandom20CharHex do={:global EitherOr; :return [ :rndstr length=[\ + \_\$EitherOr [ :tonum \$1 ] 20 ] from=\"0123456789abcdef\" ]; }\r\ + \n:set GetRandomNumber do={:global EitherOr; :return [ :rndnum from=0 to=[\ + \_\$EitherOr [ :tonum \$1 ] 4294967295 ] ]; }\r\ + \n\r\ + \n:global checkRunJob;\r\ + \n:set checkRunJob do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLock; \r\ + \n :if ([ \$ScriptLock \$Script ] = false) do={:return false}\r\ + \n :foreach Job in=[ /system/script/job/find where script=\$Script ] do={\ + :set Job [ /system/script/job/get \$Job ];\r\ + \n :while ([ :typeof (\$Job->\"parent\") ] = \"id\") do={:set Job [ /sy\ + stem/script/job/get [ find where .id=(\$Job->\"parent\") ] ]}\r\ + \n :if ((\$Job->\"type\") = \"login\") do={:return true};}; :return fa\ + lse; \r\ + \n}\r\ + \n\r\ + \n:set InspectVar do={\r\ + \n :global InspectVarRet;\r\ + \n :put [ :tocrlf [ \$InspectVarRet \$1 ] ];\r\ + \n}\r\ + \n\r\ + \n:set CommitBrief do={\r\ + \n :global CommitId;\r\ + \n :global CommitInfo;\r\ + \n :if (\$CommitId = \"unknown\") do={\r\ + \n :return \"unknown\";\r\ + \n }\r\ + \n :return (\$CommitInfo . \"/\" . [ :pick \$CommitId 0 8 ]);\r\ + \n}\r\ + \n\r\ + \n:set InspectVarRet do={\r\ + \n :local Input \$1;\r\ + \n :local Level (0 + [ :tonum \$2 ]);\r\ + \n :global CharacterReplace;\r\ + \n :global IfThenElse;\r\ + \n :global InspectVarRet;\r\ + \n :local IndentReturn do={\r\ + \n :local Prefix [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Level [ :tonum \$3 ];\r\ + \n :global CharacterMultiply;\r\ + \n :return ([ \$CharacterMultiply \" \" (\$Level * 2) ] . \"-\" . \$Pre\ + fix . \"-> \" . \$Value);\r\ + \n }\r\ + \n :local TypeOf [ :typeof \$Input ];\r\ + \n :local Len [ :len \$Input ];\r\ + \n :local Return [ \$IndentReturn \"type\" \$TypeOf \$Level ];\r\ + \n :if (\$TypeOf = \"array\") do={\r\ + \n :foreach Key,Value in=\$Input do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"key\" \$Key (\$Level + 1) ] . \"\\n\" . \\\r\ + \n [ \$InspectVarRet \$Value (\$Level + 2) ]);\r\ + \n }\r\ + \n } else={\r\ + \n :if (\$TypeOf = \"str\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"len\" \$Len \$Level ]);\r\ + \n :if ([ :typeof [ :find \$Input (\"\\r\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\r\") \"\" ];\r\ + \n }\r\ + \n :if ([ :typeof [ :find \$Input (\"\\n\") ] ] = \"num\") do={\r\ + \n :set Input [ \$CharacterReplace \$Input (\"\\n\") \" \" ];\r\ + \n }\r\ + \n }\r\ + \n :if (\$TypeOf != \"nothing\") do={\r\ + \n :set \$Return (\$Return . \"\\n\" . \\\r\ + \n [ \$IndentReturn \"value\" [ \$IfThenElse ([ :len \$Input ] > 80)\ + \_\\\r\ + \n ([ :pick \$Input 0 77 ] . \"...\") \$Input ] \$Level ]);\r\ + \n }\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set GetPubIp do={\r\ + \n :global DetectIpAddrDefault;\r\ + \n :global DetectIpAddrFallback;\r\ + \n\r\ + \n :local PubIpAddr false;\r\ + \n :local Url \$DetectIpAddrDefault;\r\ + \n :local JobName [ :jobname ];\r\ + \n\r\ + \n :do {\r\ + \n :log debug (\$0 . \" Trying to detect public IP using default serv\ + ice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=50ms max=5 on-error={:log error (\$JobName . \" Failed to \ + detect public IP using default service: \" . \$Url . \".\")}\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed to detect public IP using default serv\ + ice: \" . \$Url . \".\");\r\ + \n :set Url \$DetectIpAddrFallBack;\r\ + \n :log debug (\$0 . \" Trying to detect public IP using fallback ser\ + vice: \" . \$Url . \"...\");\r\ + \n :retry command={:set PubIpAddr ([ /tool/fetch http-method=\"get\"\ + \_check-certificate=yes-without-crl \$Url output=user as-value ]->\"data\"\ + )} \\\r\ + \n delay=200ms max=5 on-error={:log error (\$JobName . \" Failed to\ + \_detect public IP using fallback service: \" . \$Url . \".\")}\r\ + \n };\r\ + \n :local IpLen ([ :len \$PubIpAddr ] -1);\r\ + \n :if (\$PubIpAddr = false) do={:set PubIpAddr \"not-detected\"} else=\ + {:set PubIpAddr [:pick \$PubIpAddr 0 \$IpLen]}\r\ + \n :return \$PubIpAddr;\r\ + \n}\r\ + \n\r\ + \n:set FormatLine do={\r\ + \n :local Key [ :tostr \$1 ];\r\ + \n :local Value [ :tostr \$2 ];\r\ + \n :local Indent [ :tonum \$3 ];\r\ + \n :local Spaces;\r\ + \n :local Return \"\";\r\ + \n :global CharacterMultiply;\r\ + \n :global EitherOr;\r\ + \n :set Indent [ \$EitherOr \$Indent 16 ];\r\ + \n :local Spaces [ \$CharacterMultiply \" \" \$Indent ];\r\ + \n :if ([ :len \$Key ] > 0) do={ :set Return (\$Key . \":\")}\r\ + \n :if ([ :len \$Key ] > (\$Indent - 2)) do={:set Return (\$Return . \"\\\ + n\" . [ :pick \$Spaces 0 \$Indent ] . \$Value);\r\ + \n } else={:set Return (\$Return . [ :pick \$Spaces 0 (\$Indent - [ :len \ + \$Return ]) ] . \$Value)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ParseCustom do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Start [:find [ \$Str ] [:tostr \$2]];\r\ + \n :local End [ :tostr \$3 ];\r\ + \n :local Num [ :tonum \$4 ];\r\ + \n :local Return;\r\ + \n :if ([:len \$Num] = 0) do={:set Num \"0\"}\r\ + \n :local rest [:pick \$Str (\$Start+\$Num) [:len \$Str]]; \r\ + \n :if ([:len \$End ] = 0) do={:set Return [:pick \$Str \$Num \$Start]} e\ + lse={\r\ + \n :set End [:find \$rest \$End];\r\ + \n :set Return [:pick \$rest 0 \$End];\r\ + \n }\r\ + \n:return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set LogPrint do={\r\ + \n :local Severity [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Message [ :tostr \$3 ];\r\ + \n :global PrintDebug;\r\ + \n :global PrintDebugOverride;\r\ + \n :global EitherOr;\r\ + \n :local Debug [ \$EitherOr (\$PrintDebugOverride->\$Name) \$PrintDebug \ + ];\r\ + \n :local PrintSeverity do={\r\ + \n :global TerminalColorOutput;\r\ + \n :if (\$TerminalColorOutput != true) do={:return \$1}\r\ + \n :local Color { debug=96; info=97; warning=93; error=91 };\r\ + \n :return (\"\\1B[\" . \$Color->\$1 . \"m\" . \$1 . \"\\1B[0m\");\r\ + \n}\r\ + \n :local Log ([ \$EitherOr \$Name \"\" ] . \": \" . \$Message);\ + \r\ + \n :if (\$Severity ~ (\"^(custom|debug|error|info)\\\$\")) do={\r\ + \n :if (\$Severity = \"debug\") do={:log debug \$Log}\r\ + \n :if (\$Severity = \"error\") do={:log error \$Log}\r\ + \n :if (\$Severity = \"info\" ) do={:log info \$Log}\r\ + \n } else={:log warning \$Log; :set Severity \"warning\"}\r\ + \n :if (\$Severity != \"debug\" || \$Debug = true) do={:put ([ \$PrintSev\ + erity \$Severity ] . \": \" . \$Message)}\r\ + \n}\r\ + \n\r\ + \n:set CertificateAvailable do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :local UseFor [ :tostr \$2 ];\r\ + \n\r\ + \n :global CertificateDownload;\r\ + \n :global ParseKeyValueStore;\r\ + \n\r\ + \n :if ([ :len \$UseFor ] = 0) do={\r\ + \n :log warning (\$0 . \"The intended use is undefined!\");\r\ + \n :set UseFor \"undefined\";\r\ + \n }\r\ + \n :if ([ /system/resource/get free-hdd-space ] < 8388608 && \\\r\ + \n [ /certificate/settings/get crl-download ] = true && \\\r\ + \n [ /certificate/settings/get crl-store ] = \"system\") do={\r\ + \n :log warning (\$0 . \"This system has low free flash space but \" . \ + \\\r\ + \n \"is configured to download certificate CRLs to system!\");\r\ + \n }\r\ + \n :if ([ :len \$CommonName ] = 0) do={\r\ + \n :log warning (\$0 . \"No CommonName given!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if (((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" || \\\ + \r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \$UseFor || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\r\ + \n [ :len [ /certificate/builtin/find where common-name=\$CommonName\ + \_] ] > 0) do={\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n :log info (\$0 . \"Certificate with CommonName '\" . \$CommonName . \ + \"' not available.\");\r\ + \n :if ([ \$CertificateDownload \$CommonName ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] > 1\ + ) do={\r\ + \n :log info (\$0 . \"There are \" . \$CertCount . \" Certificates with\ + \_CommonName '\" . \$CommonName . \"'. Should be ok.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :local CertVal [ /certificate/get [ find where common-name=\$CommonNam\ + e ] ];\r\ + \n :while ((\$CertVal->\"akid\") != \"\" && (\$CertVal->\"akid\") != (\$C\ + ertVal->\"skid\")) do={\r\ + \n :if ([ :len [ /certificate/find where skid=(\$CertVal->\"akid\") ] ]\ + \_= 0) do={\r\ + \n :local IssuerCN ([ \$ParseKeyValueStore (\$CertVal->\"issuer\") ]-\ + >\"CN\");\r\ + \n :log info (\$0 . \"Certificate chain for '\" . \$CommonName . \"' \ + is incomplete, missing '\" . \$IssuerCN . \"'.\");\r\ + \n :if ([ \$CertificateDownload \$IssuerCN ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :set CertVal [ /certificate/get [ find where skid=(\$CertVal->\"akid\ + \") ] ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateDownload do={\r\ + \n :local CommonName [ :tostr \$1 ];\r\ + \n :global ScriptUpdatesBaseUrl;\r\ + \n :global ScriptUpdatesUrlSuffix;\r\ + \n :global CertificateNameByCN;\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :log info (\$0 . \"Downloading and importing certificate with \" . \\\ + \r\ + \n \"CommonName '\" . \$CommonName . \"'.\");\r\ + \n :local FileName ([ \$CleanName \$CommonName ] . \".pem\");\r\ + \n :do {\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-header\ + -field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n (\$ScriptUpdatesBaseUrl . \"certs/\" . \$FileName . \$ScriptUpdate\ + sUrlSuffix) \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n } on-error={\r\ + \n :log warning (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \\\r\ + \n \"' from repository! Trying fallback to mkcert.org...\");\r\ + \n :do {\r\ + \n :local CertSettings [ /certificate/settings/get ];\r\ + \n :if ([ :len [ /certificate/find where common-name=\"ISRG Root X1\"\ + \_] ] = 0 && \\\r\ + \n !(((\$CertSettings->\"builtin-trust-anchors\") = \"trusted\" \ + || \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") ~ \"fetch\" || \ + \\\r\ + \n (\$CertSettings->\"builtin-trust-store\") = \"all\") && \\\ + \r\ + \n [ :len [ /certificate/builtin/find where common-name=\"ISRG\ + \_Root X1\" ] ] > 0)) do={\r\ + \n :log error (\$0 . \" Required certificate is not available.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n /tool/fetch check-certificate=yes-without-crl mode=https http-head\ + er-field=({ [ \$FetchUserAgentStr \$0 ] }) \\\r\ + \n url=\"https://mkcert.org/generate/\" http-data=[ :serialize to=jso\ + n ({ \$CommonName }) ] \\\r\ + \n dst-path=\$FileName as-value;\r\ + \n \$WaitForFile \$FileName;\r\ + \n :if ([ /file/get \$FileName size ] = 0) do={\r\ + \n \$RmFile \$FileName;\r\ + \n :error false;\r\ + \n }\r\ + \n } on-error={\r\ + \n :log error (\$0 . \" Failed downloading certificate with CommonNam\ + e '\" . \$CommonName . \"'!\");\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n /certificate/import file-name=\$FileName passphrase=\"\" as-value;\r\ + \n :delay 1s;\r\ + \n \$RmFile \$FileName;\r\ + \n :if ([ :len [ /certificate/find where common-name=\$CommonName ] ] = 0\ + ) do={\r\ + \n /certificate/remove [ find where name~(\"^\" . \$FileName . \"_[0-9]\ + +\\\$\") ];\r\ + \n :log warning (\$0 . \" Certificate with CommonName '\" . \$CommonNam\ + e . \"' still unavailable!\");\r\ + \n :return false;\r\ + \n }\r\ + \n :foreach Cert in=[ /certificate/find where name~(\"^\" . \$FileName . \ + \"_[0-9]+\\\$\") ] do={\r\ + \n \$CertificateNameByCN [ /certificate/get \$Cert common-name ];\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CertificateNameByCN do={\r\ + \n :local Match [ :tostr \$1 ];\r\ + \n :global CleanName;\r\ + \n :local Cert ([ /certificate/find where (common-name=\$Match or fingerp\ + rint=\$Match or name=\$Match) ]->0);\r\ + \n :if ([ :len \$Cert ] = 0) do={\r\ + \n :log warning (\$0 .\" No matching certificate found.\");\r\ + \n :return false;\r\ + \n }\r\ + \n :local CommonName [ /certificate/get \$Cert common-name ];\r\ + \n /certificate/set \$Cert name=[ \$CleanName \$CommonName ];\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FileExists do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local Type [ :tostr \$2 ];\r\ + \n :global FileGet;\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={ :return false; }\r\ + \n :if ([ :len (\$FileVal->\"size\") ] = 0) do={ :return false; }\r\ + \n :if ([ :len \$Type ] = 0 || \$FileVal->\"type\" = \$Type) do={ :return\ + \_true; }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set Grep do={\r\ + \n :local Input ([ :tostr \$1 ] . \"\\n\");\r\ + \n :local Pattern [ :tostr \$2 ];\r\ + \n :if ([ :typeof [ :find \$Input \$Pattern ] ] = \"nil\") do={:return []\ + }\r\ + \n :do {\r\ + \n :local Line [ :pick \$Input 0 [ :find \$Input \"\\n\" ] ];\r\ + \n :if ([ :typeof [ :find \$Line \$Pattern ] ] = \"num\") do={:return \ + \$Line}\r\ + \n :set Input [ :pick \$Input ([ :find \$Input \"\\n\" ] + 1) [ :len \$\ + Input ] ];\r\ + \n } while=([ :len \$Input ] > 0);\r\ + \n :return [];\r\ + \n}\r\ + \n\r\ + \n:set HumanReadableNum do={\r\ + \n :local Input [ :tonum \$1 ];\r\ + \n :local Base [ :tonum \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global IfThenElse;\r\ + \n :local Prefix \"kMGTPE\";\r\ + \n :local Pow 1;\r\ + \n :set Base [ \$EitherOr \$Base 1024 ];\r\ + \n :local Bin [ \$IfThenElse (\$Base = 1024) \"i\" \"\" ];\r\ + \n :if (\$Input < \$Base) do={:return \$Input}\r\ + \n :for I from=0 to=[ :len \$Prefix ] do={\r\ + \n :set Pow (\$Pow * \$Base);\r\ + \n :if (\$Input / \$Base < \$Pow) do={\r\ + \n :set Prefix [ :pick \$Prefix \$I ];\r\ + \n :local Tmp1 (\$Input * 100 / \$Pow);\r\ + \n :local Tmp2 (\$Tmp1 / 100);\r\ + \n :if (\$Tmp2 >= 100) do={:return (\$Tmp2 . \$Prefix . \$Bin)}\r\ + \n :return (\$Tmp2 . \".\" . \\\r\ + \n [ :pick \$Tmp1 [ :len \$Tmp2 ] ([ :len \$Tmp1 ] - [ :len \$Tmp\ + 2 ] + 1) ] . \\\r\ + \n \$Prefix . \$Bin);\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set CleanFilePath do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CharacterReplace;\r\ + \n :while (\$Path ~ \"//\") do={ :set \$Path [ \$CharacterReplace \$Path \ + \"//\" \"/\" ]; }\r\ + \n :if ([ :pick \$Path 0 ] = \"/\") do={ :set Path [ :pick \$Path 1 [ :le\ + n \$Path ] ]; }\r\ + \n :if ([ :pick \$Path ([ :len \$Path ] - 1) ] = \"/\") do={ :set Path [ \ + :pick \$Path 0 ([ :len \$Path ] - 1) ]; }\r\ + \n :return \$Path;\r\ + \n}\r\ + \n\r\ + \n:set CleanName do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Return \"\";\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :typeof [ find \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr\ + stuvwxyz0123456789\" \$Char ] ] = \"nil\") do={\r\ + \n :do {:if ([ :len \$Return ] = 0) do={:error true};\r\ + \n :if ([ :pick \$Return ([ :len \$Return ] - 1) ] = \"-\") do={:er\ + ror true}; :set Char \"-\"} on-error={:set Char \"\"}; \r\ + \n };\r\ + \n :set Return (\$Return . \$Char)};\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set RandomDelay do={\r\ + \n :local Time [ :tonum \$1 ];\r\ + \n :local Unit [ :tostr \$2 ];\r\ + \n :global EitherOr;\r\ + \n :global GetRandomNumber;\r\ + \n :global MAX;\r\ + \n :if (\$Time = 0) do={:return false}\r\ + \n :delay ([ \$MAX 10 [ \$GetRandomNumber ([ :tonsec [ :totime (\$Time . \ + [ \$EitherOr \$Unit \"s\" ]) ] ] / 1000000) ] ] . \"ms\");\r\ + \n}\r\ + \n\r\ + \n:set EscapeForRegEx do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"^.[]\\\$()|*+\?{}\\\\\");\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :if ([ :find \$Chars \$Char ]) do={:set Char (\"\\\\\" . \$Char)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ExitError do={\r\ + \n :local ExitOK [ :tostr \$1 ];\r\ + \n :local Name [ :tostr \$2 ];\r\ + \n :local Error [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :if (\$ExitOK = \"false\") do={\r\ + \n :log error (\$Name [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\\\$\") \ + \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with er\ + ror\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \ + \$Error) \".\" ]);\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set ExitOnError do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :local Error [ :tostr \$2 ];\r\ + \n :global IfThenElse;\r\ + \n :log error (\$Name . \" \" . [ \$IfThenElse ([ :pick \$Name 0 1 ] = \"\ + \\\$\") \\\r\ + \n \"Function\" \"Script\" ] . \" '\" . \$Name . \"' exited with erro\ + r\" . \\\r\ + \n [ \$IfThenElse (!(\$Error ~ \"^(|true|false)\\\$\")) (\": \" . \$E\ + rror) \".\" ]);\r\ + \n}\r\ + \n\r\ + \n:set MiniDateTimeStamp do={\r\ + \n :local mikro [ :tobool \$1 ];\r\ + \n /system/clock;\r\ + \n :local vdate [get date];\r\ + \n :local vtime [get time];\r\ + \n :local vdoff [:toarray \"0,4,5,7,8,10\"];\r\ + \n :local MM [:pick \$vdate (\$vdoff->2) (\$vdoff->3)];\r\ + \n :local M [:tonum \$MM];\r\ + \n :if (\$vdate ~ \".../../....\") do={\r\ + \n :set vdoff [:toarray \"7,11,1,3,4,6\"];\r\ + \n :set M ([:find \"xxanebarprayunulugepctovecANEBARPRAYUNULUGE\ + PCTOVEC\" [:pick \$vdate (\$vdoff->2) (\$vdoff->3)] -1] / 2);\r\ + \n :if (\$M>12) do={:set M (\$M - 12)}\r\ + \n :set MM [:pick (100 + \$M) 1 3];\r\ + \n }\r\ + \n :local yyyy [:pick \$vdate (\$vdoff->0) (\$vdoff->1)];\r\ + \n :local dd [:pick \$vdate (\$vdoff->4) (\$vdoff->5)];\r\ + \n :local HH [:pick \$vtime 0 2];\r\ + \n :local mm [:pick \$vtime 3 5];\r\ + \n :local ss [:pick \$vtime 6 8];\r\ + \n :local Return;\r\ + \n :if (\$mikro = true) do={\r\ + \n :set Return ([:pick \$yyyy 2 4] . [:pick \$dd 0 1] . [:pick \$HH 0\ + \_1] . [:pick \$mm 3 4] . [:pick \$ss 6 7]);\r\ + \n } else={\r\ + \n :set Return ([\$yyyy] . [\$MM] . [\$dd] . [\$HH] . [\$mm] . [\$ss]);\ + \r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set WaitForFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :local WaitTime [ :totime \$2 ];\r\ + \n :global CleanFilePath;\r\ + \n :global EitherOr;\r\ + \n :global MAX;\r\ + \n :set FileName [ \$CleanFilePath \$FileName ];\r\ + \n :local Delay ([ \$MAX [ \$EitherOr \$WaitTime 2s ] 100ms ] / 9);\r\ + \n :do {\r\ + \n :retry {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } delay=\$Delay max=10;\r\ + \n } on-error={ }\r\ + \n :while ([ :len [ /file/find where name=\$FileName ] ] > 0) do={\r\ + \n :do {\r\ + \n /file/get \$FileName;\r\ + \n :return true;\r\ + \n } on-error={ }\r\ + \n :delay \$Delay;\r\ + \n :set Delay (\$Delay * 3 / 2);\r\ + \n }\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set FileGet do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global WaitForFile;\r\ + \n :if ([ \$WaitForFile \$FileName 0s ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n :local FileVal false;\r\ + \n :do {\r\ + \n :set FileVal [ /file/get \$FileName ];\r\ + \n } on-error={ }\r\ + \n :return \$FileVal;\r\ + \n}\r\ + \n\r\ + \n:set RmDir do={\r\ + \n :local DirName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing directory: \". \$DirName);\r\ + \n :local DirVal [ \$FileGet \$DirName ];\r\ + \n :if (\$DirVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n };\r\ + \n :if (\$DirVal->\"type\" != \"directory\") do={\r\ + \n :log error (\$0 . \" Directory '\" . \$DirName . \"' is not a direct\ + ory.\");\r\ + \n :return false;\r\ + \n };\r\ + \n :onerror Err {\r\ + \n /file/remove \$DirName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing directory '\" . \$DirName . \"' failed\ + : \" . \$Err);\r\ + \n :return false;\r\ + \n };\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set RmFile do={\r\ + \n :local FileName [ :tostr \$1 ];\r\ + \n :global FileGet;\r\ + \n :log debug (\$0 . \" Removing file: \". \$FileName);\r\ + \n :local FileVal [ \$FileGet \$FileName ];\r\ + \n :if (\$FileVal = false) do={\r\ + \n :log debug (\$0 . \" ... which does not exist.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if (\$FileVal->\"type\" = \"directory\" || \$FileVal->\"type\" = \"di\ + sk\") do={\r\ + \n :log error (\$0 . \" File '\" . \$FileName . \"' is not a file.\");\ + \r\ + \n :return false;\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/remove \$FileName;\r\ + \n } do={\r\ + \n :log error (\$0 . \" Removing file '\" . \$FileName . \"' failed: \"\ + \_. \$Err); :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MkDir do={\r\ + \n :local Path [ :tostr \$1 ];\r\ + \n :global CleanFilePath;\r\ + \n :global FileGet;\r\ + \n :global RmDir;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :local MkTmpfs do={\r\ + \n :global WaitForFile;\r\ + \n :local TmpFs [ /disk/find where slot=tmpfs type=tmpfs ];\r\ + \n :if ([ :len \$TmpFs ] = 1) do={\r\ + \n :if ([ /disk/get \$TmpFs disabled ] = true) do={\r\ + \n :log info (\$0 . \" The tmpfs is disabled, enabling.\");\r\ + \n /disk/enable \$TmpFs;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :log info (\$0 . \" Creating disk of type tmpfs.\");\r\ + \n \$RmDir \"tmpfs\";\r\ + \n :onerror Err {\r\ + \n /disk/add slot=tmpfs type=tmpfs tmpfs-max-size=([ /system/resource\ + /get total-memory ] / 3);\r\ + \n \$WaitForFile \"tmpfs\";\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Creating disk of type tmpfs failed: \" . \$\ + Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n }\r\ + \n :set Path [ \$CleanFilePath \$Path ];\r\ + \n :if (\$Path = \"\") do={\r\ + \n :return true;\r\ + \n }\r\ + \n :log debug (\$0 . \" Making directory: \" . \$Path);\r\ + \n :local PathVal [ \$FileGet \$Path ];\r\ + \n :if (\$PathVal->\"type\" = \"directory\") do={\r\ + \n :log debug (\$0 . \" ... which already exists.\");\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ :pick \$Path 0 5 ] = \"tmpfs\") do={\r\ + \n :if ([ \$MkTmpfs ] = false) do={\r\ + \n :return false;\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n /file/add type=\"directory\" name=\$Path;\r\ + \n \$WaitForFile \$Path;\r\ + \n } do={\r\ + \n :log warning (\$0 . \" Making directory '\" . \$Path . \"' failed: \ + \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set MAX do={:if (\$1 > \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n:set MIN do={:if (\$1 < \$2) do={:return \$1}\r\ + \n :return \$2;\r\ + \n}\r\ + \n\r\ + \n:set CharacterMultiply do={\r\ + \n :local Str [ :tostr \$1 ];\r\ + \n :local Num [ :tonum \$2 ];\r\ + \n :if (\$Num = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :for I from=1 to=\$Num do={:set Return (\$Return . \$Str)}\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set CharacterReplace do={\r\ + \n :local String [ :tostr \$1 ];\r\ + \n :local ReplaceFrom [ :tostr \$2 ];\r\ + \n :local ReplaceWith [ :tostr \$3 ];\r\ + \n :local Return \"\";\r\ + \n :if (\$ReplaceFrom = \"\") do={:return \$String}\r\ + \n :while ([ :typeof [ :find \$String \$ReplaceFrom ] ] != \"nil\") do={\ + \r\ + \n :local Pos [ :find \$String \$ReplaceFrom ];\r\ + \n :set Return (\$Return . [ :pick \$String 0 \$Pos ] . \$ReplaceWith);\ + \r\ + \n :set String [ :pick \$String (\$Pos + [ :len \$ReplaceFrom ]) [ :len\ + \_\$String ] ];\r\ + \n }\r\ + \n :return (\$Return . \$String);\r\ + \n}\r\ + \n\r\ + \n:set IfThenElse do={\r\ + \n :if ([ :tostr \$1 ] = \"true\" || [ :tobool \$1 ] = true) do={:return \ + \$2};\r\ + \n :return \$3;\r\ + \n}\r\ + \n\r\ + \n:set EitherOr do={\r\ + \n :global IfThenElse;\r\ + \n :if ([ :typeof \$1 ] = \"num\") do={:return [ \$IfThenElse (\$1 != 0) \ + \$1 \$2 ]}\r\ + \n :if ([ :typeof \$1 ] = \"time\") do={:return [ \$IfThenElse (\$1 > 0s)\ + \_\$1 \$2 ]}\r\ + \n# this works for boolean values, literal ones with parentheses\r\ + \n :return [ \$IfThenElse ([ :len [ :tostr \$1 ] ] > 0) \$1 \$2 ];\r\ + \n}\r\ + \n\r\ + \n:set ParseKeyValueStore do={\r\ + \n :local Source \$1;\r\ + \n :if ([ :pick \$Source 0 1 ] = \"{\") do={\r\ + \n :do {\r\ + \n :return [ :deserialize from=json \$Source ];\r\ + \n } on-error={ }\r\ + \n } \r\ + \n :if ([ :typeof \$Source ] != \"array\") do={:set Source [ :tostr \$1 ]\ + }\r\ + \n :local Result ({});\r\ + \n :foreach KeyValue in=[ :toarray \$Source ] do={\r\ + \n :if ([ :find \$KeyValue \"=\" ]) do={\r\ + \n :local Key [ :pick \$KeyValue 0 [ :find \$KeyValue \"=\" ] ];\r\ + \n :local Value [ :pick \$KeyValue ([ :find \$KeyValue \"=\" ] + 1) [\ + \_:len \$KeyValue ] ];\r\ + \n :if (\$Value=\"true\") do={:set Value true}\r\ + \n :if (\$Value=\"false\") do={:set Value false}\r\ + \n :set (\$Result->\$Key) \$Value;\r\ + \n } else={:set (\$Result->\$KeyValue) true}\r\ + \n }\r\ + \n :return \$Result;\r\ + \n}\r\ + \n:set RequiredRouterOS do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :local Required [ :tostr \$2 ];\r\ + \n :local Warn [ :tostr \$3 ];\r\ + \n :global IfThenElse;\r\ + \n :global VersionToNum;\r\ + \n :if (!(\$Required ~ \"^\\\\d+\\\\.\\\\d+((alpha|beta|rc|\\\\.)\\\\d+|)\ + \\\$\")) do={\r\ + \n :log error (\$0 . \" No valid RouterOS version: \" . \$Required);\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ \$VersionToNum \$Required ] > [ \$VersionToNum [ /system/packag\ + e/update/get installed-version ] ]) do={\r\ + \n :if (\$Warn = \"true\") do={\r\ + \n :log warning (\$0 . \" This \" . [ \$IfThenElse ([ :pick \$Caller \ + 0 ] = (\"\\\$\")) \"function\" \"script\" ] . \\\r\ + \n \" '\" . \$Caller . \"' (at least specific functionality) requir\ + es RouterOS \" . \$Required . \". Please update!\");\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set ValidateSyntax do={\r\ + \n :local Code [ :tostr \$1 ];\r\ + \n :global LogPrint;\r\ + \n :onerror Err {\r\ + \n [ :parse (\":local Validate do={\\n\" . \$Code . \"\\n}\") ];\r\ + \n } do={\r\ + \n \$LogPrint debug \$0 (\"Valdation failed: \" . \$Err);\r\ + \n :return false;\r\ + \n }\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set VersionToNum do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :local Multi 0x1000000;\r\ + \n :local Return 0;\r\ + \n :global CharacterReplace;\r\ + \n :set Input [ \$CharacterReplace \$Input \".\" \",\" ];\r\ + \n :foreach I in={ \"zero\"; \"alpha\"; \"beta\"; \"rc\" } do={\r\ + \n :set Input [ \$CharacterReplace \$Input \$I (\",\" . \$I . \",\") ];\ + \r\ + \n }\r\ + \n :foreach Value in=([ :toarray \$Input ], 0) do={\r\ + \n :local Num [ :tonum \$Value ];\r\ + \n :if (\$Multi = 0x100) do={\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={\r\ + \n :set Return (\$Return + 0xff00);\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n } else={\r\ + \n :if (\$Value = \"zero\") do={ }\r\ + \n :if (\$Value = \"alpha\") do={ :set Return (\$Return + 0x3f00); \ + }\r\ + \n :if (\$Value = \"beta\") do={ :set Return (\$Return + 0x5f00); }\ + \r\ + \n :if (\$Value = \"rc\") do={ :set Return (\$Return + 0x7f00); }\r\ + \n }\r\ + \n }\r\ + \n :if ([ :typeof \$Num ] = \"num\") do={ :set Return (\$Return + (\$Va\ + lue * \$Multi)); }\r\ + \n :set Multi (\$Multi / 0x100);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set ScriptLock do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local WaitMax [ :totime \$2 ];\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global ScriptLockOrder;\r\ + \n :if ([ :typeof \$ScriptLockOrder ] = \"nothing\") do={\r\ + \n :set ScriptLockOrder ({});\r\ + \n }\r\ + \n :if ([ :typeof (\$ScriptLockOrder->\$Script) ] = \"nothing\") do={\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :local JobCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :return [ :len [ /system/script/job/find where script=\$Script ] ];\ + \r\ + \n }\r\ + \n :local TicketCount do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :local Count 0;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:set Count (\$Count \ + + 1)}\r\ + \n }\r\ + \n :return \$Count;\r\ + \n }\r\ + \n :local IsFirstTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Check [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if (\$Ticket = \$Check) do={:return true}\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\" && \$Ticket != \$Check) d\ + o={:return false}\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :local AddTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Add [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :while (true) do={\r\ + \n :local Pos [ :len (\$ScriptLockOrder->\$Script) ];\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Pos) \$Add;\r\ + \n :delay 10ms;\r\ + \n :if ((\$ScriptLockOrder->\$Script->\$Pos) = \$Add) do={:return tru\ + e}\r\ + \n }\r\ + \n }\r\ + \n :local RemoveTicket do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :local Remove [ :tostr \$2 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Id,Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :while ((\$ScriptLockOrder->\$Script->\$Id) = \$Remove) do={\r\ + \n :set (\$ScriptLockOrder->\$Script->\$Id);\r\ + \n :delay 10ms;\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n :local CleanupTickets do={\r\ + \n :local Script [ :tostr \$1 ];\r\ + \n :global ScriptLockOrder;\r\ + \n :foreach Ticket in=(\$ScriptLockOrder->\$Script) do={\r\ + \n :if ([ :typeof \$Ticket ] != \"nothing\") do={:return false}\r\ + \n }\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n }\r\ + \n :if ([ :typeof \$WaitMax ] = \"nil\" ) do={:set WaitMax 0s}\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\r\ + \n :log error (\$0 . \" A script named '\" . \$Script . \"' does not ex\ + ist!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$JobCount \$Script ] = 0) do={\r\ + \n \$LogPrint error \$0 (\"No script '\" . \$Script . \"' is running!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$TicketCount \$Script ] >= [ \$JobCount \$Script ]) do={\r\ + \n :log error (\$0 . \" More tickets than running scripts '\" . \$Scrip\ + t . \"', resetting!\");\r\ + \n :set (\$ScriptLockOrder->\$Script) ({});\r\ + \n /system/script/job/remove [ find where script=\$Script ];\r\ + \n }\r\ + \n :local MyTicket [ \$GetRandom20CharAlNum 6 ];\r\ + \n \$AddTicket \$Script \$MyTicket;\r\ + \n :local WaitInterval (\$WaitMax / 20);\r\ + \n :local WaitTime \$WaitMax;\r\ + \n :while (\$WaitTime > 0 && \\\r\ + \n ([ \$IsFirstTicket \$Script \$MyTicket ] = false || \\\r\ + \n [ \$TicketCount \$Script ] < [ \$JobCount \$Script ])) do={\r\ + \n :set WaitTime (\$WaitTime - \$WaitInterval);\r\ + \n :delay \$WaitInterval;\r\ + \n }\r\ + \n :if ([ \$IsFirstTicket \$Script \$MyTicket ] = true && \\\r\ + \n [ \$TicketCount \$Script ] = [ \$JobCount \$Script ]) do={\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$CleanupTickets \$Script;\r\ + \n :return true;\r\ + \n }\r\ + \n \$RemoveTicket \$Script \$MyTicket;\r\ + \n \$LogPrint debug \$0 (\"Script '\" . \$Script . \"' started more than \ + once\" . \\\r\ + \n [ \$IfThenElse (\$WaitTime < \$WaitMax) \" and timed out waiting for\ + \_lock\" \"\" ] . \"...\");\r\ + \n :return false;\r\ + \n}\r\ + \n\r\ + \n:set SendNotification do={ :onerror Err {\r\ + \n :global SendNotification2;\r\ + \n \$SendNotification2 ({ origin=\$0; subject=\$1; message=\$2; link=\$3;\ + \_silent=\$4 });\r\ + \n} do={:global ExitOnError; \$ExitOnError \$0 \$Err}\r\ + \n}\r\ + \n\r\ + \n:set SendNotification2 do={\r\ + \n :local Notification \$1;\r\ + \n :global NotificationFunctions;\r\ + \n :foreach FunctionName,Discard in=\$NotificationFunctions do={\r\ + \n (\$NotificationFunctions->\$FunctionName) (\"\\\$NotificationFunctio\ + ns->\\\"\" . \$FunctionName . \"\\\"\") \$Notification;\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n:set SymbolByUnicodeName do={\r\ + \n :local Name [ :tostr \$1 ];\r\ + \n :global EitherOr;\r\ + \n :global SymbolsExtra;\r\ + \n :local Symbols ({\r\ + \n \"abacus\"=\"\\F0\\9F\\A7\\AE\";\r\ + \n \"alarm-clock\"=\"\\E2\\8F\\B0\";\r\ + \n \"arrow-down\"=\"\\E2\\AC\\87\";\r\ + \n \"arrow-up\"=\"\\E2\\AC\\86\";\r\ + \n \"calendar\"=\"\\F0\\9F\\93\\85\";\r\ + \n \"card-file-box\"=\"\\F0\\9F\\97\\83\";\r\ + \n \"chart-decreasing\"=\"\\F0\\9F\\93\\89\";\r\ + \n \"chart-increasing\"=\"\\F0\\9F\\93\\88\";\r\ + \n \"cloud\"=\"\\E2\\98\\81\";\r\ + \n \"cross-mark\"=\"\\E2\\9D\\8C\";\r\ + \n \"earth\"=\"\\F0\\9F\\8C\\8D\";\r\ + \n \"fire\"=\"\\F0\\9F\\94\\A5\";\r\ + \n \"floppy-disk\"=\"\\F0\\9F\\92\\BE\";\r\ + \n \"gear\"=\"\\E2\\9A\\99\";\r\ + \n \"heart\"=\"\\E2\\99\\A5\";\r\ + \n \"high-voltage-sign\"=\"\\E2\\9A\\A1\";\r\ + \n \"incoming-envelope\"=\"\\F0\\9F\\93\\A8\";\r\ + \n \"information\"=\"\\E2\\84\\B9\";\r\ + \n \"large-orange-circle\"=\"\\F0\\9F\\9F\\A0\";\r\ + \n \"large-red-circle\"=\"\\F0\\9F\\94\\B4\";\r\ + \n \"link\"=\"\\F0\\9F\\94\\97\";\r\ + \n \"lock-with-ink-pen\"=\"\\F0\\9F\\94\\8F\";\r\ + \n \"memo\"=\"\\F0\\9F\\93\\9D\";\r\ + \n \"mobile-phone\"=\"\\F0\\9F\\93\\B1\";\r\ + \n \"pushpin\"=\"\\F0\\9F\\93\\8C\";\r\ + \n \"scissors\"=\"\\E2\\9C\\82\";\r\ + \n \"scroll\"=\"\\F0\\9F\\93\\9C\";\r\ + \n \"smiley-partying-face\"=\"\\F0\\9F\\A5\\B3\";\r\ + \n \"smiley-smiling-face\"=\"\\E2\\98\\BA\";\r\ + \n \"smiley-winking-face-with-tongue\"=\"\\F0\\9F\\98\\9C\";\r\ + \n \"sparkles\"=\"\\E2\\9C\\A8\";\r\ + \n \"speech-balloon\"=\"\\F0\\9F\\92\\AC\";\r\ + \n \"star\"=\"\\E2\\AD\\90\";\r\ + \n \"warning-sign\"=\"\\E2\\9A\\A0\";\r\ + \n \"white-heavy-check-mark\"=\"\\E2\\9C\\85\"\r\ + \n }, \$SymbolsExtra);\r\ + \n :local Magic [ :pick [ /system/clock/get date ] 4 10 ];\r\ + \n :local Special {\r\ + \n \"information-04-01\"=\"\\F0\\9F\\9A\\BB\";\r\ + \n \"large-orange-circle-04-01\"=\"\\F0\\9F\\8D\\8A\";\r\ + \n \"large-orange-circle-10-31\"=\"\\F0\\9F\\8E\\83\";\r\ + \n \"large-red-circle-04-01\"=\"\\F0\\9F\\8D\\92\" };\r\ + \n :if ([ :len (\$Symbols->\$Name) ] = 0) do={\r\ + \n :log warning (\$0 . \"No symbol available for name '\" . \$Name . \"\ + '!\");\r\ + \n :return \"\";\r\ + \n }\r\ + \n :return ([ \$EitherOr (\$Special->(\$Name . \$Magic)) (\$Symbols->\$Na\ + me) ] . \"\\EF\\B8\\8F\");\r\ + \n}\r\ + \n\r\ + \n:set SymbolForNotification do={\r\ + \n :global NotificationsWithSymbols;\r\ + \n :global SymbolByUnicodeName;\r\ + \n :global IfThenElse;\r\ + \n :if (\$NotificationsWithSymbols != true) do={:return [ \$IfThenElse ([\ + \_:len \$2 ] > 0) ([ :tostr \$2 ] . \" \") \"\" ]}\r\ + \n :local Return \"\";\r\ + \n :foreach Symbol in=[ :toarray \$1 ] do={:set Return (\$Return . [ \$Sy\ + mbolByUnicodeName \$Symbol ])}\r\ + \n :return (\$Return . \" \");\r\ + \n}\r\ + \n\r\ + \n:set Unix2Dos do={:return [ :tocrlf [ :tostr \$1 ] ]}\r\ + \n:set UrlEncode do={\r\ + \n :local Input [ :tostr \$1 ];\r\ + \n :if ([ :len \$Input ] = 0) do={:return \"\"}\r\ + \n :local Return \"\";\r\ + \n :local Chars (\"\\n\\r !\\\"#\\\$%&'()*+,:;<=>\?@[\\\\]^`{|}~\");\r\ + \n :local Subs { \"%0A\"; \"%0D\"; \"%20\"; \"%21\"; \"%22\"; \"%23\"; \"\ + %24\"; \"%25\"; \"%26\"; \"%27\";\r\ + \n \"%28\"; \"%29\"; \"%2A\"; \"%2B\"; \"%2C\"; \"%3A\"; \"%3B\"; \ + \"%3C\"; \"%3D\"; \"%3E\"; \"%3F\";\r\ + \n \"%40\"; \"%5B\"; \"%5C\"; \"%5D\"; \"%5E\"; \"%60\"; \"%7B\"; \ + \"%7C\"; \"%7D\"; \"%7E\" };\r\ + \n :for I from=0 to=([ :len \$Input ] - 1) do={\r\ + \n :local Char [ :pick \$Input \$I ];\r\ + \n :local Replace [ :find \$Chars \$Char ];\r\ + \n :if ([ :typeof \$Replace ] = \"num\") do={:set Char (\$Subs->\$Repla\ + ce)}\r\ + \n :set Return (\$Return . \$Char);\r\ + \n }\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set IsDNSResolving do={\r\ + \n :do {:resolve \"api.telegram.org\"} on-error={:return false}\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsFullyConnected do={\r\ + \n :global IsDNSResolving;\r\ + \n :global IsTimeSync;\r\ + \n :if ([ \$IsDNSResolving ] = false) do={:return false};\r\ + \n :if ([ \$IsTimeSync ] = false) do={:return false};\r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set IsTimeSync do={\r\ + \n :global IsTimeSyncCached;\r\ + \n :global IsTimeSyncResetNtp;\r\ + \n :if (\$IsTimeSyncCached = true) do={:return true}\r\ + \n :if ([ /system/ntp/client/get enabled ] = true) do={\r\ + \n :if ([ /system/ntp/client/get status ] = \"synchronized\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :local Uptime [ /system/resource/get uptime ];\r\ + \n :if ([ :typeof \$IsTimeSyncResetNtp ] = \"nothing\") do={\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n }\r\ + \n :if (\$Uptime - \$IsTimeSyncResetNtp < 3m) do={:return false}\r\ + \n :log warning \"\$0 The ntp client is configured, but did not sync.\"\ + ;\r\ + \n :set IsTimeSyncResetNtp \$Uptime;\r\ + \n /system/ntp/client/set enabled=no;\r\ + \n :delay 20ms;\r\ + \n /system/ntp/client/set enabled=yes;\r\ + \n :return false;\r\ + \n }\r\ + \n :if ([ /system/license/get ]->\"level\" = \"free\" || \\\r\ + \n [ /system/resource/get ]->\"board-name\" = \"x86\") do={\r\ + \n :log debug \"\$0 No ntp client configured, relying on RTC for CHR fr\ + ee license and x86.\";\r\ + \n :return true;\r\ + \n }\r\ + \n :if ([ /ip/cloud/get update-time ] = true) do={\r\ + \n :if ([ :typeof [ /ip/cloud/get public-address ] ] = \"ip\") do={\r\ + \n :set IsTimeSyncCached true;\r\ + \n :return true;\r\ + \n }\r\ + \n :return false;\r\ + \n }\r\ + \n :log debug \"\$0 No time source configured! Returning gracefully...\";\ + \r\ + \n :return true;\r\ + \n}\r\ + \n\r\ + \n:set FetchHugeFiles do={\r\ + \n :local ScriptName [ :tostr \$1 ];\r\ + \n :local Url [ :tostr \$2 ];\r\ + \n :local CheckCert [ :tostr \$3 ];\r\ + \n\r\ + \n :global CleanName;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global GetRandom20CharAlNum;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global MkDir;\r\ + \n :global RmDir;\r\ + \n :global RmFile;\r\ + \n :global WaitForFile;\r\ + \n\r\ + \n :set CheckCert [ \$IfThenElse (\$CheckCert = \"false\") \"no\" \"yes-w\ + ithout-crl\" ];\r\ + \n\r\ + \n :local DirName (\"tmpfs/\" . [ \$CleanName \$ScriptName ]);\r\ + \n :if ([ \$MkDir \$DirName ] = false) do={\r\ + \n \$LogPrint error \$0 (\"Failed creating directory!\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileName (\$DirName . \"/\" . [ \$CleanName \$0 ] . \"-\" . [ \ + \$GetRandom20CharAlNum ]);\r\ + \n :onerror Err {\r\ + \n /tool/fetch check-certificate=\$CheckCert \$Url dst-path=\$FileName \ + \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$ScriptName ] }) as-va\ + lue;\r\ + \n } do={\r\ + \n :if ([ \$WaitForFile \$FileName 500ms ] = true) do={\r\ + \n \$RmFile \$FileName;\r\ + \n }\r\ + \n \$LogPrint debug \$0 (\"Failed downloading from \" . \$Url . \" - \"\ + \_. \$Err);\r\ + \n \$RmDir \$DirName;\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$WaitForFile \$FileName 5s ] = false) do={\r\ + \n \$LogPrint debug \$0 (\"The file downloaded from \" . \$Url . \" did\ + \_not show up.\");\r\ + \n :return false;\r\ + \n }\r\ + \n\r\ + \n :local FileSize [ /file/get \$FileName size ];\r\ + \n :local Return \"\";\r\ + \n :local VarSize 0;\r\ + \n :while (\$VarSize != \$FileSize) do={\r\ + \n :set Return (\$Return . ([ /file/read offset=\$VarSize chunk-size=32\ + 768 file=\$FileName as-value ]->\"data\"));\r\ + \n :set FileSize [ /file/get \$FileName size ];\r\ + \n :set VarSize [ :len \$Return ];\r\ + \n :if (\$VarSize > \$FileSize) do={\r\ + \n :delay 100ms;\r\ + \n }\r\ + \n }\r\ + \n \$RmDir \$DirName;\r\ + \n :return \$Return;\r\ + \n}\r\ + \n\r\ + \n:set FetchUserAgentStr do={\r\ + \n :local Caller [ :tostr \$1 ];\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global CommitBrief;\r\ + \n :global IfThenElse;\r\ + \n :local Resource [ /system/resource/get ];\r\ + \n :return (\"User-Agent: Mikrotik/\" . \$Resource->\"version\" . \" \" .\ + \_\$Resource->\"architecture-name\" . \\\r\ + \n \" \" . \$Caller . \"/Fetch (\" . \$GlobalScriptsUrl . \"; \" . [ \$\ + CommitBrief ] . \")\");\r\ + \n}\r\ + \n\r\ + \n:set ScriptInstallUpdate do={ :onerror Err {\r\ + \n :local Scripts [ :toarray \$1 ];\r\ + \n :local NewComment [ :tostr \$2 ];\r\ + \n :global InitSetup;\r\ + \n\r\ + \n :global CommitId;\r\ + \n :global ScriptUpdatesCRLF;\r\ + \n :global GlobalConfVersion;\r\ + \n :global Identity;\r\ + \n :global CertificateAvailable;\r\ + \n :global CheckSumsVerify;\r\ + \n :global GlobalScriptsUrl;\r\ + \n :global SumsDirAndFileName;\r\ + \n :global GlobalScriptsUrlSuffix;\r\ + \n :global EitherOr;\r\ + \n :global FetchUserAgentStr;\r\ + \n :global Grep;\r\ + \n :global IfThenElse;\r\ + \n :global LogPrint;\r\ + \n :global ParseKeyValueStore;\r\ + \n :global RequiredRouterOS;\r\ + \n :global SendNotification2;\r\ + \n :global SymbolForNotification;\r\ + \n :global ValidateSyntax;\r\ + \n :global CommentsInScripts;\r\ + \n\r\ + \n :if ([ \$CertificateAvailable \"Root YE\" \"fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, trying wit\ + hout.\");\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=\$Scripts do={\r\ + \n :if ([ :len [ /system/script/find where name=\$Script ] ] = 0) do={\ + \r\ + \n \$LogPrint info \$0 (\"Adding new script: \" . \$Script);\r\ + \n /system/script/add name=\$Script owner=\$Script source=\"#!rsc by \ + Vados\\n\" comment=\$NewComment;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :local CommitIdBefore \$CommitId;\r\ + \n :local GlobalConfVersionBefore \$GlobalConfVersion;\r\ + \n :local ReloadGlobal false;\r\ + \n :local DeviceMode [ /system/device-mode/get ];\r\ + \n\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSums ({});\r\ + \n :do {\r\ + \n :local Url (\$GlobalScriptsUrl . \$SumsDirAndFileName . \$GlobalScr\ + iptsUrlSuffix);\r\ + \n \$LogPrint debug \$0 (\"Fetching checksums from url: \" . \$Url);\ + \r\ + \n :set CheckSums [ :deserialize from=json ([ /tool/fetch check-certi\ + ficate=yes-without-crl \\\r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url output\ + =user as-value ]->\"data\") ];\r\ + \n } on-error={ \$LogPrint warning \$0 (\"Err = \" . \$Err); }\r\ + \n }\r\ + \n\r\ + \n :foreach Script in=[ /system/script/find where source~\"^#!rsc by Vado\ + s\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :local ScriptInfo [ \$ParseKeyValueStore (\$ScriptVal->\"comment\") \ + ];\r\ + \n :local SourceNew;\r\ + \n\r\ + \n :foreach Scheduler in=[ /system/scheduler/find where on-event~(\"\\\ + \\b\" . \$ScriptVal->\"name\" . \"\\\\b\") ] do={\r\ + \n :local SchedulerVal [ /system/scheduler/get \$Scheduler ];\r\ + \n :if (\$ScriptVal->\"policy\" != \$SchedulerVal->\"policy\") do={\r\ + \n \$LogPrint warning \$0 (\"Policies differ for script '\" . \$Scr\ + iptVal->\"name\" . \"' and its scheduler '\" . \$SchedulerVal->\"name\" . \ + \"'!\");\r\ + \n }\r\ + \n }\r\ + \n :do {\r\ + \n :if (\$ScriptInfo->\"ignore\" = true) do={\r\ + \n \$LogPrint debug \$0 (\"Ignoring script '\" . \$ScriptVal->\"nam\ + e\" . \"', as requested.\");\r\ + \n :error true;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :local CheckSum (\$CheckSums->(\$ScriptVal->\"name\"));\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Scri\ + ptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :convert transform=md5 to=hex [ :tolf (\$ScriptVal->\"sou\ + rce\") ] ] = \$CheckSum) do={\r\ + \n \$LogPrint debug \$0 (\"Checksum for script '\" . \$ScriptVal-\ + >\"name\" . \"' matches, ignoring.\");\r\ + \n :error true;\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len (\$ScriptInfo->\"certificate\") ] > 0) do={\r\ + \n :if ([ \$CertificateAvailable (\$ScriptInfo->\"certificate\") \"\ + fetch\" ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Downloading certificate failed, tryi\ + ng without.\");\r\ + \n }\r\ + \n }\r\ + \n :onerror Err {\r\ + \n :local BaseUrl [ \$EitherOr (\$ScriptInfo->\"base-url\") \$Globa\ + lScriptsUrl ];\r\ + \n :local UrlSuffix [ \$EitherOr (\$ScriptInfo->\"url-suffix\") \$G\ + lobalScriptsUrlSuffix ];\r\ + \n :local Url (\$BaseUrl . \$ScriptVal->\"name\" . \".rsc\" . \$Url\ + Suffix);\r\ + \n \$LogPrint warning \$0 (\"Fetching script '\" . (\$ScriptVal->\"\ + name\") . \"' from url: \" . \$Url);\r\ + \n :local Result [ /tool/fetch check-certificate=yes-without-crl \\\ + \r\ + \n http-header-field=({ [ \$FetchUserAgentStr \$0 ] }) \$Url outp\ + ut=user as-value ];\r\ + \n :if (\$Result->\"status\" = \"finished\") do={\r\ + \n :set SourceNew [ :tolf (\$Result->\"data\") ];\r\ + \n } \r\ + \n } do={\r\ + \n \$LogPrint warning \$0 (\"Failed fetching script '\" . \$ScriptV\ + al->\"name\" . \"': \" . \$Err);\r\ + \n :if (\$Err != \"Fetch failed with status 404\") do={\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$ScriptVal->\"source\" = \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Removing dummy. Typo on installation\ + \?\");\r\ + \n /system/script/remove \$Script;\r\ + \n :error false;\r\ + \n }\r\ + \n :if (\$CheckSumsVerify = true) do={\r\ + \n :if ([ :len (\$ScriptInfo->\"base-url\") ] = 0 && [ :len (\$Sc\ + riptInfo->\"url-suffix\") ] = 0 && \\\r\ + \n [ :len \$CheckSum ] = 0) do={\r\ + \n \$LogPrint warning \$0 (\"Added the script manually\? Skip u\ + pdates with 'ignore=true' in comment.\");\r\ + \n }\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$SourceNew ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"No update for script '\" . (\$ScriptVal-\ + >\"name\") . \"'.\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :local SourceCRLF [ :tocrlf \$SourceNew ];\r\ + \n :if (\$InitSetup != true && ((\$ScriptVal->\"name\") != \"AM-Globa\ + lConfig\" || (\$ScriptVal->\"name\") != \"AM-GlobalFunc\")) do={\r\ + \n :if (\$SourceNew = (\$ScriptVal->\"source\") || \$SourceCRLF = (\ + \$ScriptVal->\"source\")) do={\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\") \ + . \"' source did not change. End of lines set to CRLF.\");\r\ + \n if (\$ScriptUpdatesCRLF = false) do={\r\ + \n :put [ :tolf \$SourceNew ];\r\ + \n \$LogPrint debug \$0 (\"Script '\" . (\$ScriptVal->\"name\"\ + ) . \"' source update end of lines to LF.\");\r\ + \n }\r\ + \n :error false;\r\ + \n }\r\ + \n }\r\ + \n\r\ + \n :if ([ :pick \$SourceNew 0 14 ] != \"#!rsc by Vados\") do={\r\ + \n \$LogPrint warning \$0 (\"Looks like new script '\" . \$ScriptVa\ + l->\"name\" . \"' is not valid (missing shebang = '\$shebang') Ignoring!\"\ + );\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if (\$CommentsInScripts = true) do={\r\ + \n :local CommentLine [ \$Grep \$SourceNew (\"\\23 Script comment:\ + \_\") ];\r\ + \n :if ([ :len \$CommentLine ] = 0) do={\r\ + \n \$LogPrint debug \$0 (\"The search in new script '\" . (\$Scr\ + iptVal->\"name\") . \"' for comment in script body, is not found result Ig\ + noring!\");\r\ + \n :error false;\r\ + \n } else={\r\ + \n :if ([ :len (\$ScriptVal->\"comment\")] = 0 || [ :len (\$Scri\ + ptVal->\"comment\")] != [ :pick \$CommentLine ([ :find \$CommentLine \":\"\ + ] + 2) [ :len \$CommentLine] ]) do={\r\ + \n \$LogPrint debug \$0 (\"Exsiting comment for script '\" . (\ + \$ScriptVal->\"name\") . \"' is '\" . (\$ScriptVal->\"comment\") . \"'.\")\ + ;\r\ + \n :set (\$ScriptVal->\"comment\") [ :pick \$CommentLine ([ :f\ + ind \$CommentLine \":\"] + 2) [ :len \$CommentLine] ];\r\ + \n \$LogPrint debug \$0 (\"New comment (\" . (\$ScriptVal->\"c\ + omment\") . \") for script '\" . (\$ScriptVal->\"name\") . \"' has been ad\ + ded!\");\r\ + \n } else={\r\ + \n \$LogPrint debug \$0 (\"Comment for script '\" . (\$ScriptV\ + al->\"name\") . \"' did not change.\");\r\ + \n :error false;\r\ + \n }\r\ + \n } \r\ + \n }\r\ + \n\r\ + \n :local RequiredROS ([ \$ParseKeyValueStore [ \$Grep \$SourceNew (\ + \"\\23 requires RouterOS, \") ] ]->version);\r\ + \n :if ([ \$RequiredRouterOS \$0 [ \$EitherOr \$RequiredROS \"0.0\" ]\ + \_false ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires RouterOS \" . \\\r\ + \n \$RequiredROS . \", which is not met by your installation. I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n :local RequiredDM [ \$ParseKeyValueStore [ \$Grep \$SourceNew (\"\ + \\23 requires device-mode, \") ] ];\r\ + \n :local MissingDM ({});\r\ + \n :foreach Feature,Value in=\$RequiredDM do={\r\ + \n :if ([ :typeof (\$DeviceMode->\$Feature) ] = \"bool\" && (\$Devi\ + ceMode->\$Feature) = false) do={\r\ + \n :set MissingDM (\$MissingDM, \$Feature);\r\ + \n }\r\ + \n }\r\ + \n :if ([ :len \$MissingDM ] > 0) do={\r\ + \n \$LogPrint warning \$0 (\"The script '\" . (\$ScriptVal->\"name\ + \") . \"' requires disabled \" . \\\r\ + \n \"device-mode features (\" . [ :tostr \$MissingDM ] . \"). I\ + gnoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n\r\ + \n :if ([ \$ValidateSyntax \$SourceNew ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Syntax validation for script '\" . (\$\ + ScriptVal->\"name\") . \"' failed! Ignoring!\");\r\ + \n :error false;\r\ + \n }\r\ + \n \r\ + \n :log info (\"Updating script: \" . (\$ScriptVal->\"name\") . \" Sc\ + ript comment: \" . (\$ScriptVal->\"comment\"));\r\ + \n\r\ + \n /system/script/set owner=(\$ScriptVal->\"name\") comment=(\$Script\ + Val->\"comment\") \\\r\ + \n source=[ \$IfThenElse (\$ScriptUpdatesCRLF = true) \$SourceCRL\ + F \$SourceNew ] \$Script;\r\ + \n :if (\$ScriptVal->\"name\" = \"AM-GlobalConfig\" || \\\r\ + \n \$ScriptVal->\"name\" = \"AM-GlobalFunc\" || \\\r\ + \n \$ScriptVal->\"name\" ~ (\"^(AM-GlobalFunc\\\\.d|mod)/.\")) d\ + o={\r\ + \n :set ReloadGlobal true;\r\ + \n }\r\ + \n } on-error={ }\r\ + \n }\r\ + \n :if (\$ReloadGlobal = true) do={\r\ + \n \$LogPrint info \$0 (\"Reloading global configuration and functions.\ + \");\r\ + \n :onerror Err {\r\ + \n :global InitSetup (a);\r\ + \n /system/script {run AM-GlobalConfig; run AM-GlobalFunc;};\r\ + \n } do={\$LogPrint error \$0 (\"Reloading global configuration and fun\ + ctions failed! \" . \$Err)}\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore > \$GlobalConfVersion) do={\r\ + \n \$LogPrint warning \$0 (\"The configuration version decreased from \ + \" . \\\r\ + \n \$GlobalConfVersionBefore . \" to \" . \$GlobalConfVersion . \\\r\ + \n \". Installed an older version\?\");\r\ + \n }\r\ + \n :if (\$GlobalConfVersionBefore < \$GlobalConfVersion) do={\r\ + \n :global GlobalConfChanges;\r\ + \n :global GlobalConfMigration;\r\ + \n :local ChangeLogCode;\r\ + \n :if ([ :len \$ChangeLogCode ] > 0) do={\r\ + \n :if ([ \$ValidateSyntax \$ChangeLogCode ] = true) do={\r\ + \n :onerror Err {\r\ + \n [ :parse \$ChangeLogCode ];\r\ + \n } do={\$LogPrint warning \$0 (\"The changelog failed to run: \" \ + . \$Err)}\r\ + \n } else={\$LogPrint warning \$0 (\"The changelog failed syntax vali\ + dation!\")}\r\ + \n }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Migration (\$GlobalConfMigration->[ :tostr \$I ]);\r\ + \n :do {\r\ + \n :if ([ :typeof \$Migration ] != \"str\") do={\r\ + \n \$LogPrint debug \$0 (\"Migration code for change \" . \$I .\ + \_\" is not available.\");\r\ + \n :error false;\r\ + \n }\r\ + \n :if ([ \$ValidateSyntax \$Migration ] = false) do={\r\ + \n \$LogPrint warning \$0 (\"Migration code for change \" . \$I\ + \_. \" failed syntax validation!\");\r\ + \n :error false}\r\ + \n \$LogPrint info \$0 (\"Applying migration for change \" . \$I \ + . \": \" . \$Migration);\r\ + \n :onerror Err {\r\ + \n [ :parse \$Migration ];\r\ + \n } do={\$LogPrint warning \$0 (\"Migration code for change \" .\ + \_\$I . \" failed to run: \" . \$Err)}\r\ + \n } on-error={ }\r\ + \n }\r\ + \n }\r\ + \n :local NotificationMessage (\"The configuration version on \" . \$Id\ + entity . \" increased \" . \\\r\ + \n \"to \" . \$GlobalConfVersion . \", current configuration may nee\ + d modification. \" . \\\r\ + \n \"Please review and update global-config-overlay, then re-run glo\ + bal-config.\");\r\ + \n \$LogPrint info \$0 (\$NotificationMessage);\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nChanges:\ + \");\r\ + \n :for I from=(\$GlobalConfVersionBefore + 1) to=\$GlobalConfVersion\ + \_do={\r\ + \n :local Change (\$GlobalConfChanges->[ :tostr \$I ]);\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n \" . \\\ + \r\ + \n [ \$SymbolForNotification \"pushpin\" \"*\" ] . \$Change);\r\ + \n \$LogPrint info \$0 (\"Change \" . \$I . \": \" . \$Change);\r\ + \n }\r\ + \n } else={\r\ + \n :set NotificationMessage (\$NotificationMessage . \"\\n\\nNews and\ + \_changes are not available.\");\r\ + \n\r\ + \n }\r\ + \n\r\ + \n :if ([ :len \$GlobalConfChanges ] > 0) do={ :set GlobalConfChanges; \ + } else={ :global GlobalConfChanges (a); }\r\ + \n :if ([ :len \$GlobalConfMigration ] > 0) do={ :set GlobalConfMigrati\ + on; } else={ :global GlobalConfMigration (a); }\r\ + \n }\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n} }\r\ + \n\r\ + \n# load modules\r\ + \n:foreach Script in=[ /system/script/find where name ~ \"^(global-functio\ + ns\\\\.d|mod)/.\" ] do={\r\ + \n :local ScriptVal [ /system/script/get \$Script ];\r\ + \n :if ([ \$ValidateSyntax (\$ScriptVal->\"source\") ] = true) do={\r\ + \n :onerror Err {\r\ + \n /system/script/run \$Script;\r\ + \n } do={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' f\ + ailed to run: \" . \$Err);\r\ + \n }\r\ + \n } else={\r\ + \n \$LogPrint error \$0 (\"Module '\" . \$ScriptVal->\"name\" . \"' fai\ + led syntax validation, skipping.\");\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# Add and fix global scheduler\r\ + \n:put \"Add or/and fix Global scheduler...\";\r\ + \n:local OnEvent \"/system/script { run AM-GlobalConfig; run AM-GlobalFunc\ + ; }\";\r\ + \n:local Comment \"Every Day Set Global Environment Variables\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-SetGlobalEnv\" ] ] \ + = 0) do={\r\ + \n /system/scheduler/add name=\"AM-SetGlobalEnv\" comment=\$Comment on-ev\ + ent=\$OnEvent start-time=startup;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" comment ] != \$Comment)\ + \_do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" comment=\$Comment;\r\ + \n}\r\ + \n:if ([ /system/scheduler/get \"AM-SetGlobalEnv\" on-event ] != \$OnEvent\ + ) do={\r\ + \n /system/scheduler/set \"AM-SetGlobalEnv\" on-event=\$OnEvent;\r\ + \n}\r\ + \n# Add Update Script scheduler\r\ + \n:put \"Add or/and fix Update Script scheduler\";\r\ + \n:set OnEvent \":global ScriptInstallUpdate; \\\$ScriptInstallUpdate;\";\ + \r\ + \n:set Comment \"Every Day Check For Update Scripts\";\r\ + \n:if ([ :len [ /system/scheduler/find where name=\"AM-ScriptInstallUpdate\ + \" ] ] = 0) do={\r\ + \n/system/scheduler/add name=\"AM-ScriptInstallUpdate\" comment=\$Comment \ + start-time=startup interval=1d on-event=\$OnEvent;\r\ + \n}\r\ + \n\r\ + \n:onerror Err {\r\ + \n :global GlobalConfReady;\r\ + \n :retry { :if (\$GlobalConfReady != true) do={ :error (\"Global configs\ + \_not ready.\"); }; } delay=100ms max=5;\r\ + \n\r\ + \n:log warning (\"This script \$ScriptName Loaded \" . \\\r\ + \n [ \$IfThenElse (\$CommitId != \"unknown\") ([ \$CommitBrief ] . \" \ + \") ] . \\\r\ + \n \"on \" . \$devBoardName . \"\\nRouterOS: \" . \$devCurVersion . \"\ + \\nArchitecture: \" . \$devCurArch . \"\\nIdentity: \" . \$Identity);\r\ + \n # signal we are ready\r\ + \n:set GlobalFuncReady true;\r\ + \n:set ExitOK true;\r\ + \n\r\ + \n:log info (\$0 . \"Global configs ready!\");\r\ + \n} do={\r\ + \n :global ExitOnError; \$ExitOnError \$0 \$Err;\r\ + \n}\r\ + \n" +add comment="awg3vds installer" dont-require-permissions=no name=\ + AM-awg3vdsInstall owner=AM-awg3vdsInstall policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + !rsc by Vados\r\ + \n# RouterOS script: AM-awg3vdsInstall\r\ + \n# Script comment: awg3vds installer\r\ + \n#\r\ + \n#\r\ + \n# requires RouterOS, version=7.19\r\ + \n# requires device-mode, fetch, scheduler\r\ + \n# ============================================================\r\ + \n# AWG Proxy -- MikroTik RouterOS (protocol: v3)\r\ + \n# 2026-09-12 08:41:48\r\ + \n# ============================================================\r\ + \n# 0. Check prerequisites\r\ + \n:if ([:len [/system/package/find where name=\"container\" disabled=no]] \ + = 0) do={\r\ + \n :put \"Container package is not installed or disabled. Install it and \ + reboot.\"\r\ + \n :error \"Usage: /system/device-mode/update container=yes\"\r\ + \n}\r\ + \n\r\ + \n# Check storage device\r\ + \n{\r\ + \n :local targetDisk \"usb1\"\r\ + \n :local diskFree 0\r\ + \n :do { :set diskFree [/disk/get [find where mount-point=\$targetDisk] f\ + ree] } on-error={}\r\ + \n :if (\$diskFree = 0) do={\r\ + \n :local baseDisk \$targetDisk\r\ + \n :local dashPos [:find \$targetDisk \"-part\"]\r\ + \n :if ([:typeof \$dashPos] != \"nil\") do={ :set baseDisk [:pick \$tar\ + getDisk 0 \$dashPos] }\r\ + \n :if ([:len [/disk/find where slot=\$baseDisk]] > 0) do={\r\ + \n :put (\"Device \$baseDisk found but \$targetDisk is not available.\ + \")\r\ + \n :put \"Format \$baseDisk as ext4\? ALL DATA WILL BE ERASED!\"\r\ + \n :put \"Press 'y' to confirm, any other key to cancel:\"\r\ + \n :local key [/terminal/inkey timeout=30]\r\ + \n :if (\$key = 121 || \$key = 89) do={\r\ + \n :put \"Formatting \$baseDisk as ext4...\"\r\ + \n /disk/format-drive \$baseDisk file-system=ext4 label=\$baseDisk\ + \r\ + \n :delay 3s\r\ + \n :do { :set diskFree [/disk/get [find where mount-point=\$targetD\ + isk] free] } on-error={}\r\ + \n :if (\$diskFree = 0) do={\r\ + \n :put (\"ERROR: \$targetDisk not found after formatting.\")\r\ + \n :put \"Check mount point: /disk/print\"\r\ + \n :error (\"Mount point \$targetDisk not found after formatting\ + \")\r\ + \n }\r\ + \n :put (\"Formatted OK. Free: \" . (\$diskFree / 1048576) . \" MB\ + \")\r\ + \n } else={\r\ + \n :error \"Formatting cancelled\"\r\ + \n }\r\ + \n } else={\r\ + \n :put (\"ERROR: Storage device \$targetDisk not found.\")\r\ + \n :put \"Check available disks: /disk/print\"\r\ + \n :error (\"Storage not found: \" . \$targetDisk)\r\ + \n }\r\ + \n } else={\r\ + \n :put (\"Storage OK: \$targetDisk (\" . (\$diskFree / 1048576) . \" M\ + B free)\")\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# 1. Uninstall and update scripts\r\ + \n/system/script/add name=awg3vds-uninstall comment=awg3vds source={\r\ + \n :put \"Uninstallimg AmneziaWG...\"\r\ + \n :log info \"Uninstallimg AmneziaWG...\"\r\ + \n :local prevDNS \"\"\r\ + \n :do { :set prevDNS [/container/envs/get [find where list=\"awg3vds-env\ + \" key=\"AWG_PREV_DNS\"] value] } on-error={}\r\ + \n :local prevTmpdir \"\"\r\ + \n :do { :set prevTmpdir [/container/envs/get [find where list=\"awg3vds-\ + env\" key=\"AWG_PREV_TMPDIR\"] value] } on-error={}\r\ + \n /ip/route/remove [find where comment=awg3vds-tunnel]\r\ + \n /ip/route/remove [find where comment=awg3vds-dns]\r\ + \n :do { /system/scheduler/remove [find where comment~\"awg3vds\"] } on-e\ + rror={}\r\ + \n :do { /system/script/remove [find where comment~\"awg3vds\" and name!=\ + \"awg3vds-uninstall\"] } on-error={}\r\ + \n /container/stop [find where interface=veth-awg3vds]\r\ + \n :delay 7s\r\ + \n /container/remove [find where interface=veth-awg3vds]\r\ + \n /container/envs/remove [find where list=\"awg3vds-env\"]\r\ + \n :if (\$prevDNS != \"\") do={\r\ + \n :do { /ip/dns/set servers=\"\$prevDNS\" } on-error={}\r\ + \n :put (\"DNS restored to: \$prevDNS\")\r\ + \n }\r\ + \n /container/config set tmpdir=\$prevTmpdir\r\ + \n :put (\"Container tmpdir restored to: \$prevTmpdir\")\r\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg3vds\"]\r\ + \n /ip/firewall/nat/remove [find where src-address=\"172.19.14.100/30\"]\ + \r\ + \n /ip/address/remove [find where address=\"172.19.14.101/30\"]\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-v6-nat] } \ + on-error={}\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-dstnat6] }\ + \_on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-v6-out]\ + \_} on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-awg-in6\ + ] } on-error={}\r\ + \n :do { /ipv6/nd/remove [find where interface=veth-awg3vds] } on-error={\ + }\r\ + \n :do { /ipv6/nd/prefix/remove [find where interface=veth-awg3vds] } on-\ + error={}\r\ + \n :do { /ipv6/address/remove [find where comment=awg3vds-v6] } on-error=\ + {}\r\ + \n /interface/veth/remove [find where name=\"veth-awg3vds\"]\r\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awg3vds\"\ + ]\r\ + \n /ip/address/remove [find where interface=\"wg-awg3vds\"]\r\ + \n /interface/wireguard/remove [find where name=\"wg-awg3vds\"]\r\ + \n :do { /file/remove [find where name~\"awg3vds.+tar\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/awg3vds\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges_timeout.rsc\"] } \ + on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges.rsc\"] } on-error\ + ={}\r\ + \n :do { /file/remove [find where name~\"usb1/pull\"] } on-error={}\r\ + \n :put \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n :log info \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n# /system/script/remove [find where name=awg3vds-uninstall]\r\ + \n}\r\ + \n/system/script/add name=awg3vds-update comment=awg3vds source={\r\ + \n :local cids [/container/find where interface=veth-awg3vds and !stopped\ + ]\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds and start-on-boot=yes] }\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds] }\r\ + \n :if ([:len \$cids] = 0) do={\r\ + \n :put \"Container awg3vds not found\"\r\ + \n :log warning \"awg3vds-update: container not found\"\r\ + \n } else={\r\ + \n :local cid [:pick \$cids ([:len \$cids] - 1)]\r\ + \n :local img [/container/get \$cid remote-image]\r\ + \n :local ver [/system/resource/get version]\r\ + \n :local dotPos [:find \$ver \".\"]\r\ + \n :local rest [:pick \$ver (\$dotPos + 1) [:len \$ver]]\r\ + \n :local endPos [:find \$rest \".\"]\r\ + \n :if ([:typeof \$endPos] = \"nil\") do={ :set endPos [:find \$rest \"\ + \_\"] }\r\ + \n :local minor [:tonum [:pick \$rest 0 \$endPos]]\r\ + \n :local wantRunning true\r\ + \n :do { :if ([/container/get \$cid start-on-boot] != true) do={ :set w\ + antRunning false } } on-error={}\r\ + \n :local healthy true\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={ :set healthy f\ + alse }\r\ + \n :if (\$wantRunning) do={\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n }\r\ + \n :if (!\$healthy && \$wantRunning && [:len [/container/get \$cid imag\ + e-id]] > 0) do={\r\ + \n :put \"Container is down - trying to start it\"\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set healthy true\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n :if (\$healthy) do={\r\ + \n :put \"Container is back up\"\r\ + \n :log info \"awg3vds: container restarted by the update script\"\ + \r\ + \n }\r\ + \n }\r\ + \n :if (\$img = \"\" && \$minor >= 22 && !\$healthy) do={\r\ + \n :local imgTag \"latest\"\r\ + \n :local rbModel \"\"\r\ + \n :do { :set rbModel [[:parse \":return [/system/routerboard/get mod\ + el]\"]] } on-error={}\r\ + \n :local bName [/system/resource/get board-name]\r\ + \n :if (\$rbModel~\"E50UG\" || \$rbModel~\"E60iUGS\" || \$bName~\"E50\ + UG\" || \$bName~\"E60iUGS\" || \$bName~\"^hEX\") do={\r\ + \n :set imgTag \"latest-armv5\"\r\ + \n }\r\ + \n :set img (\"ghcr.io/timbrs/awg-proxy:\" . \$imgTag)\r\ + \n :put (\"Container is down and was installed from a file - pointing\ + \_it at \" . \$img)\r\ + \n :log warning \"awg3vds-update: broken file install, switching to t\ + he registry\"\r\ + \n :do { /container/set \$cid remote-image=\$img } on-error={}\r\ + \n }\r\ + \n :if (\$img = \"\") do={\r\ + \n :put \"Installed from a local image file - /container/repull only \ + updates registry installs.\"\r\ + \n :put \"Reinstall with the configurator on RouterOS 7.22+ to switch\ + \_to one-command updates.\"\r\ + \n } else={\r\ + \n :if (\$minor < 22) do={\r\ + \n :put (\"/container/repull needs RouterOS 7.22+, this router runs\ + \_\" . \$ver)\r\ + \n :if (!\$healthy) do={ :log error (\"awg3vds-update: container is\ + \_down, and \" . \$ver . \" has no /container/repull\") }\r\ + \n } else={\r\ + \n :local rootDir [/container/get \$cid root-dir]\r\ + \n :if ([:pick \$rootDir 0 1] = \"/\") do={ :set rootDir [:pick \$r\ + ootDir 1 [:len \$rootDir]] }\r\ + \n :local rootDirOrig \$rootDir\r\ + \n :local slashPos [:find \$rootDir \"/\"]\r\ + \n :local disk \$rootDir\r\ + \n :if ([:typeof \$slashPos] != \"nil\") do={ :set disk [:pick \$ro\ + otDir 0 \$slashPos] }\r\ + \n :local verPath \"awg-update-check.json\"\r\ + \n :if (\$disk != \"disk1\") do={\r\ + \n :do { /file/make-directory (\$disk . \"/pull\") } on-error={}\ + \r\ + \n /container/config set tmpdir=(\$disk . \"/pull\")\r\ + \n :set verPath (\$disk . \"/pull/awg-update-check.json\")\r\ + \n }\r\ + \n :local newVer \"\"\r\ + \n :do {\r\ + \n /tool/fetch url=\"https://api.github.com/repos/timbrs/amneziaw\ + g-mikrotik-c/releases/latest\" dst-path=\$verPath http-max-redirect-count=\ + 10\r\ + \n :local relJson [/file/get [find where name=\$verPath] contents\ + ]\r\ + \n :local tagPos [:find \$relJson \"\\\"tag_name\\\":\\\"\"]\r\ + \n :if ([:typeof \$tagPos] != \"nil\") do={\r\ + \n :local tagRest [:pick \$relJson (\$tagPos + 12) [:len \$relJ\ + son]]\r\ + \n :set newVer [:pick \$tagRest 0 [:find \$tagRest \"\\\"\"]]\r\ + \n }\r\ + \n :do { /file/remove [find where name=\$verPath] } on-error={}\r\ + \n } on-error={ :put \"Could not read the published version\" }\r\ + \n :local curVer \"\"\r\ + \n :do { :set curVer [/container/envs/get [find where list=\"awg3vd\ + s-env\" key=\"AWG_IMAGE_VER\"] value] } on-error={}\r\ + \n :local doPull true\r\ + \n :if (\$healthy) do={\r\ + \n :if (\$newVer = \"\") do={\r\ + \n :set doPull false\r\ + \n :put \"Published version unknown - leaving the healthy conta\ + iner alone\"\r\ + \n }\r\ + \n :if (\$newVer != \"\" && \$newVer = \$curVer) do={\r\ + \n :set doPull false\r\ + \n :put (\"Already on \" . \$curVer . \" - nothing to pull, tun\ + nel untouched\")\r\ + \n }\r\ + \n }\r\ + \n :if (\$doPull) do={\r\ + \n :if (!\$healthy) do={\r\ + \n :put \"Container is not healthy - pulling the image again\"\ + \r\ + \n :log warning \"awg3vds-update: container unhealthy, forcing \ + a pull\"\r\ + \n }\r\ + \n :put (\"Updating \" . \$img . \" ...\")\r\ + \n :log info \"awg3vds: repull started\"\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :do { [:parse \"/container/set \$cid ignore-remote-image-chang\ + e=yes\"] } on-error={}\r\ + \n /container/repull \$cid\r\ + \n :local waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$waited\ + \_< 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={\r\ + \n :put \"Pull failed - retrying once in 15s\"\r\ + \n :delay 15s\r\ + \n /container/repull \$cid\r\ + \n :set waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$wait\ + ed < 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n }\r\ + \n :local backUp false\r\ + \n :if ([:len [/container/get \$cid image-id]] > 0) do={\r\ + \n :set backUp true\r\ + \n :if (\$wantRunning) do={\r\ + \n :delay 3s\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set backUp false\r\ + \n :do { :if ([/container/get \$cid stopped] != true) do={ :s\ + et backUp true } } on-error={}\r\ + \n }\r\ + \n }\r\ + \n :if (!\$backUp) do={\r\ + \n :put \"Container did not come back up - rebuilding it from t\ + he registry\"\r\ + \n :log warning \"awg3vds-update: container did not come back, \ + rebuilding\"\r\ + \n :do { /container/stop \$cid } on-error={}\r\ + \n :delay 5s\r\ + \n :do { /container/remove \$cid } on-error={}\r\ + \n :delay 3s\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.bac\ + kup\")] } on-error={}\r\ + \n :do { /container/add remote-image=\$img interface=veth-awg3v\ + ds envlist=awg3vds-env hostname=awg3vds root-dir=\$rootDirOrig logging=no \ + start-on-boot=yes comment=awg3vds } on-error={}\r\ + \n :set waited 0\r\ + \n :local newCids [/container/find where interface=veth-awg3vds\ + \_and start-on-boot=yes]\r\ + \n :if ([:len \$newCids] = 0) do={ :set newCids [/container/fin\ + d where interface=veth-awg3vds] }\r\ + \n :while ([:len \$newCids] > 0 && [:len [/container/get [:pick\ + \_\$newCids ([:len \$newCids] - 1)] image-id]] = 0 && \$waited < 180) do={\ + \r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len \$newCids] > 0 && [:len [/container/get [:pick \$\ + newCids ([:len \$newCids] - 1)] image-id]] > 0) do={\r\ + \n :do { /container/set [:pick \$newCids ([:len \$newCids] - \ + 1)] shm-size=4M } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] ignore-remote-image-change=yes\"] } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] restart-policy=on-failure restart-interval=30s restart-max-count=\ + 10\"] } on-error={}\r\ + \n :do { /container/start [:pick \$newCids ([:len \$newCids] \ + - 1)] } on-error={}\r\ + \n :delay 8s\r\ + \n :do { :if ([/container/get [:pick \$newCids ([:len \$newCi\ + ds] - 1)] stopped] != true) do={ :set backUp true } } on-error={}\r\ + \n }\r\ + \n :if (\$backUp) do={\r\ + \n :put \"Container rebuilt\"\r\ + \n :log info \"awg3vds: container rebuilt after update\"\r\ + \n } else={\r\ + \n :put \"Rebuild failed - the tunnel is down. Netwatch keeps\ + \_the router online meanwhile.\"\r\ + \n :put \"This script runs again on the next schedule and wil\ + l retry.\"\r\ + \n :log error \"awg3vds-update: rebuild failed, tunnel is dow\ + n\"\r\ + \n }\r\ + \n }\r\ + \n :if (\$backUp && \$newVer != \"\") do={\r\ + \n :do { /container/envs/remove [find where list=\"awg3vds-env\ + \" key=\"AWG_IMAGE_VER\"] } on-error={}\r\ + \n :do { /container/envs/add list=awg3vds-env key=AWG_IMAGE_VER\ + \_value=\$newVer } on-error={}\r\ + \n }\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :if (\$backUp) do={\r\ + \n :put (\"Update done: \" . \$img)\r\ + \n :log info \"awg3vds: update done\"\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n}\r\ + \n# Daily update check. Skipped if scheduler is not allowed by device-mode\ + \r\ + \n{\r\ + \n :local schedOk true\r\ + \n :do { :set schedOk [/system/device-mode/get scheduler] } on-error={}\r\ + \n :if (\$schedOk) do={\r\ + \n /system/scheduler/add name=awg3vds-update on-event=\"/system/script/\ + run awg3vds-update\" start-time=04:30:00 interval=1d comment=awg3vds\r\ + \n } else={\r\ + \n :put \"WARNING: scheduler not allowed by device-mode, no daily updat\ + e check.\"\r\ + \n :put \"Update by hand: /system/script/run awg3vds-update\"\r\ + \n :put \"To allow it: /system/device-mode/update scheduler=yes\"\r\ + \n }\r\ + \n}\r\ + \n\r\ + \n# 2. Network infrastructure\r\ + \n/interface/veth/add name=veth-awg3vds address=172.19.14.102/30 gateway=1\ + 72.19.14.101\r\ + \n/ip/address/add address=172.19.14.101/30 interface=veth-awg3vds\r\ + \n/ip/firewall/nat/add chain=srcnat action=masquerade src-address=172.19.1\ + 4.100/30\r\ + \n\r\ + \n# 3. WireGuard interface (MikroTik derives the public key automatically)\ + \r\ + \n/interface/wireguard/add name=wg-awg3vds private-key=\"AEU+diR7SCIEOtwOW\ + SWR3pEpkw6v0Qro2LRF0SnPpnw=\" listen-port=41430 mtu=1320 disabled=yes\r\ + \n/interface/wireguard/peers/add interface=wg-awg3vds public-key=\"MMWjD/T\ + PNpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=\" preshared-key=\"r9B13bB7gUTqde6zgB\ + DfffFIUN6puP2gOWdK5zVS3nw=\" endpoint-address=172.19.14.102 endpoint-port=\ + 51820 allowed-address=10.31.31.0/24,0.0.0.0/0 persistent-keepalive=14\r\ + \n/ip/address/add address=10.31.31.2/24 interface=wg-awg3vds\r\ + \n\r\ + \n# 4. Container environment variables\r\ + \n/container/envs/add list=awg3vds-env key=AWG_LISTEN value=\":51820\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_REMOTE value=\"89.110.101.1\ + 7:31031\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_JC value=\"5\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_JMIN value=\"510\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_JMAX value=\"952\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S1 value=\"138\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S2 value=\"105\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H1 value=\"457615290-457646\ + 150\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H2 value=\"1307355386-13073\ + 63580\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H3 value=\"2441734303-24417\ + 81787\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_H4 value=\"3719180788-37191\ + 95844\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_SERVER_PUB value=\"MMWjD/TP\ + NpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_CLIENT_PUB value=[/interfac\ + e/wireguard/get [find name=wg-awg3vds] public-key]\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S3 value=\"51\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_S4 value=\"22\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I1 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I2 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I3 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I4 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_I5 value=\"\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_HEADER_PROTECTION_KEY value\ + =\"FkGxbrW6ds3YPWNl48OWFEccrLC4tF94z9MnoKUZUsM=\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_CONTENT_PADDING value=\"54-\ + 119\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_REKEY_AFTER value=\"102-130\ + \"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_REKEY_TIMEOUT value=\"6-8\"\ + \r\ + \n/container/envs/add list=awg3vds-env key=AWG_REJECT_AFTER value=\"174-19\ + 5\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_KEEPALIVE_TIMEOUT value=\"1\ + 4-21\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_MAX_HANDSHAKE_ATTEMPTS valu\ + e=\"12-14\"\r\ + \n/container/envs/add list=awg3vds-env key=AWG_NO_DF value=\"1\"\r\ + \n# Perf: give each forwarding thread its own core (4+ core routers)\r\ + \n{ :if ([/system/resource/get cpu-count] >= 4) do={ /container/envs/add l\ + ist=awg3vds-env key=AWG_CPU_C2S value=\"1\"; /container/envs/add list=awg3\ + vds-env key=AWG_CPU_S2C value=\"2\" } }\r\ + \n# NOTE on MTU: the value above assumes this tunnel is the last hop.\r\ + \n# If the server forwards your traffic into another tunnel, subtract\r\ + \n# that tunnel's overhead too, or every packet leaves in two fragments.\ + \r\ + \n\r\ + \n# 5. DNS\r\ + \n{ :local rawDNS [/ip/dns/get servers]; :local prevDNS \"\"; :foreach s i\ + n=[:toarray \$rawDNS] do={ :if ([:len \$prevDNS] > 0) do={ :set prevDNS \"\ + \$prevDNS,\$s\" } else={ :set prevDNS \$s } }; /container/envs/add list=aw\ + g3vds-env key=AWG_PREV_DNS value=\"\$prevDNS\" }\r\ + \n# NOTE: replaces existing DNS configuration\r\ + \n/ip/dns/set servers=89.110.101.17,8.8.4.4\r\ + \n# DNS 89.110.101.17 \D0\B8\D0\B4\D1\91\D1\82 \D0\BE\D0\B1\D1\89\D0\B8\D0\ + \BC \D0\BC\D0\B0\D1\80\D1\88\D1\80\D1\83\D1\82\D0\BE\D0\BC (\D0\B2 \D0\B0\ + \D0\BA\D1\82\D0\B8\D0\B2\D0\BD\D1\8B\D0\B9 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\ + \D0\BB\D1\8C / default),\r\ + \n# \D0\B1\D0\B5\D0\B7 \D0\BF\D1\80\D0\B8\D0\B2\D1\8F\D0\B7\D0\BA\D0\B8 \ + \D0\BA wg-awg3vds: \D0\B8\D0\BD\D0\B0\D1\87\D0\B5 \D0\BF\D0\B0\D0\B4\D0\B5\ + \D0\BD\D0\B8\D0\B5 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\D0\BB\D1\8F \D1\83\D0\BD\ + \D0\BE\D1\81\D0\B8\D1\82 \D1\81 \D1\81\D0\BE\D0\B1\D0\BE\D0\B9 \D1\80\D0\ + \B5\D0\B7\D0\BE\D0\BB\D0\B2.\r\ + \n# DNS 8.8.4.4 \D0\B8\D0\B4\D1\91\D1\82 \D0\BE\D0\B1\D1\89\D0\B8\D0\BC \ + \D0\BC\D0\B0\D1\80\D1\88\D1\80\D1\83\D1\82\D0\BE\D0\BC (\D0\B2 \D0\B0\D0\ + \BA\D1\82\D0\B8\D0\B2\D0\BD\D1\8B\D0\B9 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\D0\ + \BB\D1\8C / default),\r\ + \n# \D0\B1\D0\B5\D0\B7 \D0\BF\D1\80\D0\B8\D0\B2\D1\8F\D0\B7\D0\BA\D0\B8 \ + \D0\BA wg-awg3vds: \D0\B8\D0\BD\D0\B0\D1\87\D0\B5 \D0\BF\D0\B0\D0\B4\D0\B5\ + \D0\BD\D0\B8\D0\B5 \D1\82\D1\83\D0\BD\D0\BD\D0\B5\D0\BB\D1\8F \D1\83\D0\BD\ + \D0\BE\D1\81\D0\B8\D1\82 \D1\81 \D1\81\D0\BE\D0\B1\D0\BE\D0\B9 \D1\80\D0\ + \B5\D0\B7\D0\BE\D0\BB\D0\B2.\r\ + \n\r\ + \n# 6. Download, create and start container\r\ + \n:local prevTmpdir [/container/config/get tmpdir]\r\ + \n/container/envs/add list=awg3vds-env key=AWG_PREV_TMPDIR value=\$prevTmp\ + dir\r\ + \n/container/config set tmpdir=usb1/pull memory-high=200M\r\ + \n{\r\ + \n :local arch [/system/resource/get architecture-name]\r\ + \n :local ver [/system/resource/get version]\r\ + \n :local dotPos [:find \$ver \".\"]\r\ + \n :local rest [:pick \$ver (\$dotPos + 1) [:len \$ver]]\r\ + \n :local endPos [:find \$rest \".\"]\r\ + \n :if ([:typeof \$endPos] = \"nil\") do={ :set endPos [:find \$rest \" \ + \"] }\r\ + \n :local minor [:tonum [:pick \$rest 0 \$endPos]]\r\ + \n :local suffix \"\"\r\ + \n :if (\$minor <= 20) do={ :set suffix \"-7.20-Docker\" }\r\ + \n :local file \"\"\r\ + \n :local imgTag \"latest\"\r\ + \n :if (\$arch = \"arm64\") do={ :set file (\"awg-proxy-arm64\" . \$suffi\ + x . \".tar.gz\") }\r\ + \n :if (\$arch = \"arm\") do={\r\ + \n :set file (\"awg-proxy-arm\" . \$suffix . \".tar.gz\")\r\ + \n :local rbModel \"\"\r\ + \n :do { :set rbModel [[:parse \":return [/system/routerboard/get model\ + ]\"]] } on-error={}\r\ + \n :local bName [/system/resource/get board-name]\r\ + \n :if (\$rbModel~\"E50UG\" || \$rbModel~\"E60iUGS\" || \$bName~\"E50UG\ + \" || \$bName~\"E60iUGS\" || \$bName~\"^hEX\") do={\r\ + \n :set file (\"awg-proxy-armv5\" . \$suffix . \".tar.gz\")\r\ + \n :set imgTag \"latest-armv5\"\r\ + \n }\r\ + \n }\r\ + \n :if (\$arch ~ \"x86\") do={ :set file (\"awg-proxy-amd64\" . \$suffix \ + . \".tar.gz\") }\r\ + \n :if (\$file = \"\") do={ :error \"Unsupported architecture: \$arch\" }\ + \r\ + \n :local url \"https://github.com/timbrs/amneziawg-mikrotik-c/releases/l\ + atest/download/\$file\"\r\ + \n :local filePath (\"usb1/pull/\" . \$file)\r\ + \n :local altPath (\"usb1/\" . \$file)\r\ + \n :local rootDir \"usb1/awg3vds\"\r\ + \n :do { /file/make-directory usb1/pull } on-error={}\r\ + \n :if ([:len [/file/find where name=\$filePath]] = 0 && [:len [/file/fin\ + d where name=\$altPath]] > 0) do={\r\ + \n :set filePath \$altPath\r\ + \n }\r\ + \n :local added false\r\ + \n :local fetched false\r\ + \n :if ([:len [/file/find where name=\$filePath]] > 0) do={\r\ + \n :put (\"Using image already on the router: \" . \$filePath)\r\ + \n /container/add file=\$filePath interface=veth-awg3vds envlist=awg3vd\ + s-env hostname=awg3vds root-dir=\$rootDir logging=no start-on-boot=yes com\ + ment=awg3vds\r\ + \n :set added true\r\ + \n }\r\ + \n :if (!\$added && \$minor >= 22) do={\r\ + \n :local img (\"ghcr.io/timbrs/awg-proxy:\" . \$imgTag)\r\ + \n :put (\"Pulling \" . \$img)\r\ + \n /container/add remote-image=\$img interface=veth-awg3vds envlist=awg\ + 3vds-env hostname=awg3vds root-dir=\$rootDir logging=no start-on-boot=yes \ + comment=awg3vds\r\ + \n :local cids [/container/find where interface=veth-awg3vds]\r\ + \n :local waited 0\r\ + \n :while ([:len \$cids] > 0 && [:len [/container/get [:pick \$cids 0] \ + image-id]] = 0 && \$waited < 120) do={\r\ + \n :delay 2s\r\ + \n :set waited (\$waited + 2)\r\ + \n }\r\ + \n :if ([:len \$cids] > 0 && [:len [/container/get [:pick \$cids 0] ima\ + ge-id]] > 0) do={\r\ + \n :set added true\r\ + \n :put (\"Pulled from registry in \" . \$waited . \"s\")\r\ + \n :do {\r\ + \n :local verPath (\$filePath . \".rel\")\r\ + \n /tool/fetch url=\"https://api.github.com/repos/timbrs/amneziawg-\ + mikrotik-c/releases/latest\" dst-path=\$verPath http-max-redirect-count=10\ + \r\ + \n :local relJson [/file/get [find where name=\$verPath] contents]\ + \r\ + \n :local tagPos [:find \$relJson \"\\\"tag_name\\\":\\\"\"]\r\ + \n :local tagRest [:pick \$relJson (\$tagPos + 12) [:len \$relJson]\ + ]\r\ + \n /container/envs/add list=awg3vds-env key=AWG_IMAGE_VER value=[:p\ + ick \$tagRest 0 [:find \$tagRest \"\\\"\"]]\r\ + \n /file/remove [find where name=\$verPath]\r\ + \n } on-error={}\r\ + \n } else={\r\ + \n :put \"Registry unavailable, falling back to the release archive\"\ + \r\ + \n :do { /container/remove \$cids } on-error={}\r\ + \n :delay 2s\r\ + \n }\r\ + \n }\r\ + \n :if (!\$added) do={\r\ + \n :local freeStorage 0\r\ + \n :do { :set freeStorage [/disk/get [find where mount-point=\"usb1\"] \ + free] } on-error={}\r\ + \n :if (\$freeStorage < 262144) do={\r\ + \n :put (\"WARNING: Low disk space (\" . (\$freeStorage / 1024) . \"K\ + B free). Need at least 256KB.\")\r\ + \n :put \"See: https://github.com/timbrs/amneziawg-mikrotik-c#insuffi\ + cient-disk-space\"\r\ + \n :error \"Insufficient disk space\"\r\ + \n }\r\ + \n :put (\"Fetching: \$url -> \" . \$filePath)\r\ + \n /tool/fetch url=\$url dst-path=\$filePath http-max-redirect-count=10\ + \r\ + \n /container/add file=\$filePath interface=veth-awg3vds envlist=awg3vd\ + s-env hostname=awg3vds root-dir=\$rootDir logging=no start-on-boot=yes com\ + ment=awg3vds\r\ + \n :set fetched true\r\ + \n }\r\ + \n :if (\$minor > 20) do={ [:parse \"/container/set [find where interface\ + =veth-awg3vds] shm-size=4M\"] }\r\ + \n :do { [:parse \"/container/set [find where interface=veth-awg3vds] ign\ + ore-remote-image-change=yes\"] } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-awg3vds] res\ + tart-policy=on-failure restart-interval=30s restart-max-count=10\"] } on-e\ + rror={}\r\ + \n :if (\$fetched) do={ /file/remove \$filePath }\r\ + \n :local freeMem [/system/resource/get free-memory]\r\ + \n :if (\$freeMem < 16777216) do={\r\ + \n :put (\"WARNING: Low memory (\" . (\$freeMem / 1048576) . \"MB free)\ + . 16MB+ recommended.\")\r\ + \n }\r\ + \n /container/start [find where interface=veth-awg3vds]\r\ + \n :do { /file/remove [find where name=\"console-dump.txt\"] } on-error={\ + }\r\ + \n :put \"Waiting for container to start...\"\r\ + \n :delay 5s\r\ + \n /interface/wireguard/enable wg-awg3vds\r\ + \n :put \"WireGuard interface enabled\"\r\ + \n :put \"Installation complete!\"\r\ + \n :put \"Ping test: 89.110.101.17 via AmneziaWG tunnel. repeat 10 times\ + \"\r\ + \n /ping 89.110.101.17 count=10 interval=1\r\ + \n :put \"\"\r\ + \n :put \"======= NEXT STEPS =======\"\r\ + \n :put \"\"\r\ + \n :put \"Route specific traffic through the AmneziaWG tunnel:\"\r\ + \n :put \"\"\r\ + \n :put \" Route a single host:\"\r\ + \n :put \" /ip/route/add dst-address=8.8.8.8/32 gateway=wg-awg3vds com\ + ment=awg3vds-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Route a subnet:\"\r\ + \n :put \" /ip/route/add dst-address=100.0.0.0/8 gateway=wg-awg3vds co\ + mment=awg3vds-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Remove a route:\"\r\ + \n :put \" /ip/route/remove [find where comment=awg3vds-tunnel dst-add\ + ress=8.8.8.8/32]\"\r\ + \n :put \"\"\r\ + \n :put \" Show all tunnel routes:\"\r\ + \n :put \" /ip/route/print where comment=awg3vds-tunnel\"\r\ + \n :put \"\"\r\ + \n :put \" Update the container:\"\r\ + \n :put \" /system/script/run awg3vds-update\"\r\ + \n :put \"\"\r\ + \n :put \" Uninstall:\"\r\ + \n :put \" /system/script/run awg3vds-uninstall\"\r\ + \n :put \"=========================\"\r\ + \n}\r\ + \n\r\ + \n# 7. Verification\r\ + \n# /container/print\r\ + \n# /interface/wireguard/print\r\ + \n# /interface/wireguard/peers/print\r\ + \n" +add comment=awg3vds dont-require-permissions=no name=awg3vds-uninstall owner=\ + vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \r\ + \n :put \"Uninstallimg AmneziaWG...\"\r\ + \n :log info \"Uninstallimg AmneziaWG...\"\r\ + \n :local prevDNS \"\"\r\ + \n :do { :set prevDNS [/container/envs/get [find where list=\"awg3vds-env\ + \" key=\"AWG_PREV_DNS\"] value] } on-error={}\r\ + \n :local prevTmpdir \"\"\r\ + \n :do { :set prevTmpdir [/container/envs/get [find where list=\"awg3vds-\ + env\" key=\"AWG_PREV_TMPDIR\"] value] } on-error={}\r\ + \n /ip/route/remove [find where comment=awg3vds-tunnel]\r\ + \n /ip/route/remove [find where comment=awg3vds-dns]\r\ + \n :do { /system/scheduler/remove [find where comment~\"awg3vds\"] } on-e\ + rror={}\r\ + \n :do { /system/script/remove [find where comment~\"awg3vds\" and name!=\ + \"awg3vds-uninstall\"] } on-error={}\r\ + \n /container/stop [find where interface=veth-awg3vds]\r\ + \n :delay 7s\r\ + \n /container/remove [find where interface=veth-awg3vds]\r\ + \n /container/envs/remove [find where list=\"awg3vds-env\"]\r\ + \n :if (\$prevDNS != \"\") do={\r\ + \n :do { /ip/dns/set servers=\"\$prevDNS\" } on-error={}\r\ + \n :put (\"DNS restored to: \$prevDNS\")\r\ + \n }\r\ + \n /container/config set tmpdir=\$prevTmpdir\r\ + \n :put (\"Container tmpdir restored to: \$prevTmpdir\")\r\ + \n /ip/firewall/nat/remove [find where out-interface=\"wg-awg3vds\"]\r\ + \n /ip/firewall/nat/remove [find where src-address=\"172.19.14.100/30\"]\ + \r\ + \n /ip/address/remove [find where address=\"172.19.14.101/30\"]\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-v6-nat] } \ + on-error={}\r\ + \n :do { /ipv6/firewall/nat/remove [find where comment=awg3vds-dstnat6] }\ + \_on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-v6-out]\ + \_} on-error={}\r\ + \n :do { /ipv6/firewall/filter/remove [find where comment=awg3vds-awg-in6\ + ] } on-error={}\r\ + \n :do { /ipv6/nd/remove [find where interface=veth-awg3vds] } on-error={\ + }\r\ + \n :do { /ipv6/nd/prefix/remove [find where interface=veth-awg3vds] } on-\ + error={}\r\ + \n :do { /ipv6/address/remove [find where comment=awg3vds-v6] } on-error=\ + {}\r\ + \n /interface/veth/remove [find where name=\"veth-awg3vds\"]\r\ + \n /interface/wireguard/peers/remove [find where interface=\"wg-awg3vds\"\ + ]\r\ + \n /ip/address/remove [find where interface=\"wg-awg3vds\"]\r\ + \n /interface/wireguard/remove [find where name=\"wg-awg3vds\"]\r\ + \n :do { /file/remove [find where name~\"awg3vds.+tar\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/awg3vds\"] } on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges_timeout.rsc\"] } \ + on-error={}\r\ + \n :do { /file/remove [find where name=\"usb1/ru_ranges.rsc\"] } on-error\ + ={}\r\ + \n :do { /file/remove [find where name~\"usb1/pull\"] } on-error={}\r\ + \n :put \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n :log info \"Uninstall AmneziaWG Proxy complete!\"\r\ + \n# /system/script/remove [find where name=awg3vds-uninstall]\r\ + \n" +add comment=awg3vds dont-require-permissions=no name=awg3vds-update owner=\ + vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="\ + \r\ + \n :local cids [/container/find where interface=veth-awg3vds and !stopped\ + ]\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds and start-on-boot=yes] }\r\ + \n :if ([:len \$cids] = 0) do={ :set cids [/container/find where interfac\ + e=veth-awg3vds] }\r\ + \n :if ([:len \$cids] = 0) do={\r\ + \n :put \"Container awg3vds not found\"\r\ + \n :log warning \"awg3vds-update: container not found\"\r\ + \n } else={\r\ + \n :local cid [:pick \$cids ([:len \$cids] - 1)]\r\ + \n :local img [/container/get \$cid remote-image]\r\ + \n :local ver [/system/resource/get version]\r\ + \n :local dotPos [:find \$ver \".\"]\r\ + \n :local rest [:pick \$ver (\$dotPos + 1) [:len \$ver]]\r\ + \n :local endPos [:find \$rest \".\"]\r\ + \n :if ([:typeof \$endPos] = \"nil\") do={ :set endPos [:find \$rest \"\ + \_\"] }\r\ + \n :local minor [:tonum [:pick \$rest 0 \$endPos]]\r\ + \n :local wantRunning true\r\ + \n :do { :if ([/container/get \$cid start-on-boot] != true) do={ :set w\ + antRunning false } } on-error={}\r\ + \n :local healthy true\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={ :set healthy f\ + alse }\r\ + \n :if (\$wantRunning) do={\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n }\r\ + \n :if (!\$healthy && \$wantRunning && [:len [/container/get \$cid imag\ + e-id]] > 0) do={\r\ + \n :put \"Container is down - trying to start it\"\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set healthy true\r\ + \n :do { :if ([/container/get \$cid stopped] = true) do={ :set health\ + y false } } on-error={}\r\ + \n :if (\$healthy) do={\r\ + \n :put \"Container is back up\"\r\ + \n :log info \"awg3vds: container restarted by the update script\"\ + \r\ + \n }\r\ + \n }\r\ + \n :if (\$img = \"\" && \$minor >= 22 && !\$healthy) do={\r\ + \n :local imgTag \"latest\"\r\ + \n :local rbModel \"\"\r\ + \n :do { :set rbModel [[:parse \":return [/system/routerboard/get mod\ + el]\"]] } on-error={}\r\ + \n :local bName [/system/resource/get board-name]\r\ + \n :if (\$rbModel~\"E50UG\" || \$rbModel~\"E60iUGS\" || \$bName~\"E50\ + UG\" || \$bName~\"E60iUGS\" || \$bName~\"^hEX\") do={\r\ + \n :set imgTag \"latest-armv5\"\r\ + \n }\r\ + \n :set img (\"ghcr.io/timbrs/awg-proxy:\" . \$imgTag)\r\ + \n :put (\"Container is down and was installed from a file - pointing\ + \_it at \" . \$img)\r\ + \n :log warning \"awg3vds-update: broken file install, switching to t\ + he registry\"\r\ + \n :do { /container/set \$cid remote-image=\$img } on-error={}\r\ + \n }\r\ + \n :if (\$img = \"\") do={\r\ + \n :put \"Installed from a local image file - /container/repull only \ + updates registry installs.\"\r\ + \n :put \"Reinstall with the configurator on RouterOS 7.22+ to switch\ + \_to one-command updates.\"\r\ + \n } else={\r\ + \n :if (\$minor < 22) do={\r\ + \n :put (\"/container/repull needs RouterOS 7.22+, this router runs\ + \_\" . \$ver)\r\ + \n :if (!\$healthy) do={ :log error (\"awg3vds-update: container is\ + \_down, and \" . \$ver . \" has no /container/repull\") }\r\ + \n } else={\r\ + \n :local rootDir [/container/get \$cid root-dir]\r\ + \n :if ([:pick \$rootDir 0 1] = \"/\") do={ :set rootDir [:pick \$r\ + ootDir 1 [:len \$rootDir]] }\r\ + \n :local rootDirOrig \$rootDir\r\ + \n :local slashPos [:find \$rootDir \"/\"]\r\ + \n :local disk \$rootDir\r\ + \n :if ([:typeof \$slashPos] != \"nil\") do={ :set disk [:pick \$ro\ + otDir 0 \$slashPos] }\r\ + \n :local verPath \"awg-update-check.json\"\r\ + \n :if (\$disk != \"disk1\") do={\r\ + \n :do { /file/make-directory (\$disk . \"/pull\") } on-error={}\ + \r\ + \n /container/config set tmpdir=(\$disk . \"/pull\")\r\ + \n :set verPath (\$disk . \"/pull/awg-update-check.json\")\r\ + \n }\r\ + \n :local newVer \"\"\r\ + \n :do {\r\ + \n /tool/fetch url=\"https://api.github.com/repos/timbrs/amneziaw\ + g-mikrotik-c/releases/latest\" dst-path=\$verPath http-max-redirect-count=\ + 10\r\ + \n :local relJson [/file/get [find where name=\$verPath] contents\ + ]\r\ + \n :local tagPos [:find \$relJson \"\\\"tag_name\\\":\\\"\"]\r\ + \n :if ([:typeof \$tagPos] != \"nil\") do={\r\ + \n :local tagRest [:pick \$relJson (\$tagPos + 12) [:len \$relJ\ + son]]\r\ + \n :set newVer [:pick \$tagRest 0 [:find \$tagRest \"\\\"\"]]\r\ + \n }\r\ + \n :do { /file/remove [find where name=\$verPath] } on-error={}\r\ + \n } on-error={ :put \"Could not read the published version\" }\r\ + \n :local curVer \"\"\r\ + \n :do { :set curVer [/container/envs/get [find where list=\"awg3vd\ + s-env\" key=\"AWG_IMAGE_VER\"] value] } on-error={}\r\ + \n :local doPull true\r\ + \n :if (\$healthy) do={\r\ + \n :if (\$newVer = \"\") do={\r\ + \n :set doPull false\r\ + \n :put \"Published version unknown - leaving the healthy conta\ + iner alone\"\r\ + \n }\r\ + \n :if (\$newVer != \"\" && \$newVer = \$curVer) do={\r\ + \n :set doPull false\r\ + \n :put (\"Already on \" . \$curVer . \" - nothing to pull, tun\ + nel untouched\")\r\ + \n }\r\ + \n }\r\ + \n :if (\$doPull) do={\r\ + \n :if (!\$healthy) do={\r\ + \n :put \"Container is not healthy - pulling the image again\"\ + \r\ + \n :log warning \"awg3vds-update: container unhealthy, forcing \ + a pull\"\r\ + \n }\r\ + \n :put (\"Updating \" . \$img . \" ...\")\r\ + \n :log info \"awg3vds: repull started\"\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :do { [:parse \"/container/set \$cid ignore-remote-image-chang\ + e=yes\"] } on-error={}\r\ + \n /container/repull \$cid\r\ + \n :local waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$waited\ + \_< 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len [/container/get \$cid image-id]] = 0) do={\r\ + \n :put \"Pull failed - retrying once in 15s\"\r\ + \n :delay 15s\r\ + \n /container/repull \$cid\r\ + \n :set waited 0\r\ + \n :while ([:len [/container/get \$cid image-id]] = 0 && \$wait\ + ed < 180) do={\r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n }\r\ + \n :local backUp false\r\ + \n :if ([:len [/container/get \$cid image-id]] > 0) do={\r\ + \n :set backUp true\r\ + \n :if (\$wantRunning) do={\r\ + \n :delay 3s\r\ + \n :do { /container/start \$cid } on-error={}\r\ + \n :delay 8s\r\ + \n :set backUp false\r\ + \n :do { :if ([/container/get \$cid stopped] != true) do={ :s\ + et backUp true } } on-error={}\r\ + \n }\r\ + \n }\r\ + \n :if (!\$backUp) do={\r\ + \n :put \"Container did not come back up - rebuilding it from t\ + he registry\"\r\ + \n :log warning \"awg3vds-update: container did not come back, \ + rebuilding\"\r\ + \n :do { /container/stop \$cid } on-error={}\r\ + \n :delay 5s\r\ + \n :do { /container/remove \$cid } on-error={}\r\ + \n :delay 3s\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.bac\ + kup\")] } on-error={}\r\ + \n :do { /container/add remote-image=\$img interface=veth-awg3v\ + ds envlist=awg3vds-env hostname=awg3vds root-dir=\$rootDirOrig logging=no \ + start-on-boot=yes comment=awg3vds } on-error={}\r\ + \n :set waited 0\r\ + \n :local newCids [/container/find where interface=veth-awg3vds\ + \_and start-on-boot=yes]\r\ + \n :if ([:len \$newCids] = 0) do={ :set newCids [/container/fin\ + d where interface=veth-awg3vds] }\r\ + \n :while ([:len \$newCids] > 0 && [:len [/container/get [:pick\ + \_\$newCids ([:len \$newCids] - 1)] image-id]] = 0 && \$waited < 180) do={\ + \r\ + \n :delay 3s\r\ + \n :set waited (\$waited + 3)\r\ + \n }\r\ + \n :if ([:len \$newCids] > 0 && [:len [/container/get [:pick \$\ + newCids ([:len \$newCids] - 1)] image-id]] > 0) do={\r\ + \n :do { /container/set [:pick \$newCids ([:len \$newCids] - \ + 1)] shm-size=4M } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] ignore-remote-image-change=yes\"] } on-error={}\r\ + \n :do { [:parse \"/container/set [find where interface=veth-\ + awg3vds] restart-policy=on-failure restart-interval=30s restart-max-count=\ + 10\"] } on-error={}\r\ + \n :do { /container/start [:pick \$newCids ([:len \$newCids] \ + - 1)] } on-error={}\r\ + \n :delay 8s\r\ + \n :do { :if ([/container/get [:pick \$newCids ([:len \$newCi\ + ds] - 1)] stopped] != true) do={ :set backUp true } } on-error={}\r\ + \n }\r\ + \n :if (\$backUp) do={\r\ + \n :put \"Container rebuilt\"\r\ + \n :log info \"awg3vds: container rebuilt after update\"\r\ + \n } else={\r\ + \n :put \"Rebuild failed - the tunnel is down. Netwatch keeps\ + \_the router online meanwhile.\"\r\ + \n :put \"This script runs again on the next schedule and wil\ + l retry.\"\r\ + \n :log error \"awg3vds-update: rebuild failed, tunnel is dow\ + n\"\r\ + \n }\r\ + \n }\r\ + \n :if (\$backUp && \$newVer != \"\") do={\r\ + \n :do { /container/envs/remove [find where list=\"awg3vds-env\ + \" key=\"AWG_IMAGE_VER\"] } on-error={}\r\ + \n :do { /container/envs/add list=awg3vds-env key=AWG_IMAGE_VER\ + \_value=\$newVer } on-error={}\r\ + \n }\r\ + \n :do { /file/remove [find where name~(\$disk . \"/awg3vds.backu\ + p\")] } on-error={}\r\ + \n :if (\$backUp) do={\r\ + \n :put (\"Update done: \" . \$img)\r\ + \n :log info \"awg3vds: update done\"\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\r\ + \n }\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" +add name=manager policy="local,ssh,ftp,read,write,policy,api,rest-api,!telnet,\ + !reboot,!test,!winbox,!password,!web,!sniff,!sensitive,!romon" +/certificate settings +set builtin-trust-store=\ + capsman,fetch,email,netwatch,container,dns,www,api,reverse-proxy,logging +/container +add comment=awg3vds envlists=awg3vds-env file=usb1/pull/awg-proxy-arm.tar.gz \ + hostname=awg3vds ignore-remote-image-change=yes interface=veth-awg3vds \ + layer-dir="" name=awg-proxy-arm restart-interval=30s restart-max-count=10 \ + restart-policy=on-failure root-dir=/usb1/awg3vds shm-size=4096.0KiB \ + start-on-boot=yes +/container config +set memory-high=200.0MiB tmpdir=/usb1/pull +/container envs +add key=AWG_CLIENT_PUB list=awg3vds-env value=\ + "LnLYVichmfWj/lDZqn2tk7pj2XII/1tnyZaOjf40Tl8=" +add key=AWG_CONTENT_PADDING list=awg3vds-env value=54-119 +add key=AWG_CPU_C2S list=awg3vds-env value=1 +add key=AWG_CPU_S2C list=awg3vds-env value=2 +add key=AWG_H1 list=awg3vds-env value=457615290-457646150 +add key=AWG_H2 list=awg3vds-env value=1307355386-1307363580 +add key=AWG_H3 list=awg3vds-env value=2441734303-2441781787 +add key=AWG_H4 list=awg3vds-env value=3719180788-3719195844 +add key=AWG_HEADER_PROTECTION_KEY list=awg3vds-env value=\ + "FkGxbrW6ds3YPWNl48OWFEccrLC4tF94z9MnoKUZUsM=" +add key=AWG_I1 list=awg3vds-env value=\ + "" +add key=AWG_I2 list=awg3vds-env value=\ + "" +add key=AWG_I3 list=awg3vds-env value="" +add key=AWG_I4 list=awg3vds-env value="" +add key=AWG_I5 list=awg3vds-env value=\ + "" +add key=AWG_JC list=awg3vds-env value=5 +add key=AWG_JMAX list=awg3vds-env value=952 +add key=AWG_JMIN list=awg3vds-env value=510 +add key=AWG_KEEPALIVE_TIMEOUT list=awg3vds-env value=14-21 +add key=AWG_LISTEN list=awg3vds-env value=:51820 +add key=AWG_MAX_HANDSHAKE_ATTEMPTS list=awg3vds-env value=12-14 +add key=AWG_NO_DF list=awg3vds-env value=1 +add key=AWG_PREV_DNS list=awg3vds-env value=10.30.30.33,8.8.4.4 +add key=AWG_PREV_TMPDIR list=awg3vds-env value=/usb1/pull +add key=AWG_REJECT_AFTER list=awg3vds-env value=174-195 +add key=AWG_REKEY_AFTER list=awg3vds-env value=102-130 +add key=AWG_REKEY_TIMEOUT list=awg3vds-env value=6-8 +add key=AWG_REMOTE list=awg3vds-env value=89.110.101.17:31031 +add key=AWG_S1 list=awg3vds-env value=138 +add key=AWG_S2 list=awg3vds-env value=105 +add key=AWG_S3 list=awg3vds-env value=51 +add key=AWG_S4 list=awg3vds-env value=22 +add key=AWG_SERVER_PUB list=awg3vds-env value=\ + "MMWjD/TPNpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=" +/disk settings +set auto-media-interface=Bridge-Lan +/ip smb +set domain=WORKGROUP enabled=no interfaces=lo +/interface bridge port +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=wlan1 +add bridge=Bridge-Lan interface=wlan2 +/interface bridge settings +set allow-fast-path=no use-ip-firewall=yes +/ip neighbor discovery-settings +set discover-interface-list=LAN +/ip settings +set accept-redirects=yes allow-fast-path=no +/ipv6 settings +set accept-router-advertisements-on=none allow-fast-path=no disable-ipv6=yes \ + disable-link-local-address=yes +/interface detect-internet +set detect-interface-list=WAN internet-interface-list=Internet \ + lan-interface-list=LAN wan-interface-list=WAN +/interface list member +add interface="ether1 - Unet" list=WAN +add interface=Bridge-Lan list=LAN +add interface=wg-awg3vds list=WAN +/interface wireguard peers +add allowed-address=10.31.31.0/24,0.0.0.0/0 disabled=yes endpoint-address=\ + 172.19.14.102 endpoint-port=51820 interface=wg-awg3vds name=peer1 \ + persistent-keepalive=14s public-key=\ + "MMWjD/TPNpupCvhXLCAw0xHXV4N6jgtQkg9Pl6pcQhU=" +/interface wireless cap +# +set bridge=Bridge-Lan caps-man-addresses=10.30.30.10 \ + caps-man-certificate-common-names=CAPsMAN-2C900E832E04 certificate=\ + CAP-18FD746E5814 discovery-interfaces=Bridge-Lan 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=172.19.14.101/30 interface=veth-awg3vds network=172.19.14.100 +add address=10.31.31.2/24 interface=wg-awg3vds network=10.31.31.0 +/ip cloud +set ddns-enabled=yes +/ip dhcp-client +add add-default-route=special-classless default-route-distance=2 \ + default-route-tables=main:2 dhcp-options=clientid,clientid_duid \ + interface="ether1 - Unet" name=client1 use-peer-dns=no use-peer-ntp=no +/ip dhcp-server config +set accounting=no +/ip dhcp-server lease +add address=10.30.30.101 client-id=1:48:8f:5a:8e:ee:a8 mac-address=\ + 48:8F:5A:8E:EE:A8 server=masterDHCP +add address=10.30.30.107 client-id=1:f0:de:f1:91:d:1e mac-address=\ + F0:DE:F1:91:0D:1E server=masterDHCP +add address=10.30.30.83 client-id=1:0:80:77:ec:43:86 mac-address=\ + 00:80:77:EC:43:86 server=masterDHCP +add address=10.30.30.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.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 +/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 servers=10.30.30.33,8.8.4.4 +/ip dns static +add address=10.30.30.81 comment=defconf name=router.lan type=A +add address=10.30.30.81 comment=defconf name=master type=A +add address=10.30.30.33 comment=amster name=amster.vados.ru type=A +add address=8.8.8.8 name=dns.google type=A +add address=8.8.4.4 name=dns.google type=A +add address=1.0.0.1 comment="CloudFlare-doh IPv4 2" disabled=yes name=\ + security.cloudflare-dns.com type=A +add address=1.1.1.1 comment="CloudFlare-doh IPv4 1" disabled=yes name=\ + security.cloudflare-dns.com type=A +add address=149.112.112.112 comment="Cuad9-dns IPv4 2" disabled=yes name=\ + dns.quad9.net 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 +add address=91.192.189.2 comment=Unet-DNS disabled=yes name=ns1.unet.ws type=\ + A +add address=10.30.30.33 name=prt.vados.ru type=A +/ip firewall address-list +add address=10.0.0.0/8 list=RFC1918 +add address=172.16.0.0/12 list=RFC1918 +add address=192.168.0.0/16 list=RFC1918 +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=8.8.4.4 disabled=yes list=to_vpn +add address=10.30.30.98 comment=vados-len list=Local2Vpn +add address=89.110.101.17 list=VDS +add address=109.107.177.79 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=2ip.ru list=Test +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 comment=vdsina.com list=NoVdsina +add address=vdsina.ru comment=vdsina.ru list=NoVdsina +add address=youla.ru comment=youla.ru list=NoVdsina +add address=kupiprodai.ru comment=kupiprodai.ru list=NoVdsina +add address=myip.ru list=Test +add address=geoip.co comment=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 comment=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 disabled=yes list=NoWG +add address=89.110.101.17 comment=!!!VDSINA!!!! disabled=yes list=NoWG +add address=wg.vados.ru comment=VDSina-vpn list=Trusted-VPN +add address=80.85.244.9 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=vdsina.vados.ru comment="!!!VDSina Server!!!" list=NoVdsina +add address=dns.quad9.net comment=Quad9-dns disabled=yes list=Trusted-DNS +add address=dns.google comment=Google-dns list=Trusted-DNS +add address=security.cloudflare-dns.com comment=CloudFlare-dns list=\ + Trusted-DNS +add address=time.google.com comment=Google-time list=Trusted-NTP +add address=0.ru.pool.ntp.org comment=ru.pool.ntp.org disabled=yes list=\ + Trusted-NTP +add address=1.ru.pool.ntp.org disabled=yes list=Trusted-NTP +add address=2.ru.pool.ntp.org comment=2.ru.pool.ntp.org disabled=yes list=\ + Trusted-NTP +add address=3.ru.pool.ntp.org comment=3.ru.pool.ntp.org disabled=yes list=\ + Trusted-NTP +add address=cp.vdsina.com comment=VDSina-vpn list=Trusted-VPN +add address=vdsina.ru comment=VDSina-vpn list=Trusted-VPN +add address=ns.vados.ru comment=VDSina-vpn list=Trusted-VPN +add address=vdsina.com comment=VDSina-vpn list=Trusted-VPN +add address=cp.vdsina.ru comment=VDSina-vpn list=Trusted-VPN +add address=ns1.vdsina.ru comment=VDSina-vpn list=Trusted-VPN +add address=ghcr.io comment=GitHub list=Trusted-VPN +add address=github.com comment=GitHub list=Trusted-VPN +add address=149.154.164.13 comment=telegra.ph list=FuckRKN +add address=194.85.61.76 comment=grani.ru list=FuckRKN +add address=109.70.26.37 comment=grani.ru list=FuckRKN +add address=104.16.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.47.69.6 comment=dou.ua list=FuckRKN +add address=8.6.112.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 +add address=myip.ru comment="!!! Check IP (MYIP.RU) !!!" disabled=yes list=\ + NoVdsina +add address=ipinfo.io comment="!!! Check IP (IPINFO.IO) !!!" list=NoVdsina +add address=cian.ru comment=cian.ru list=NoVdsina +add address=hh.ru comment=hh.ru list=NoVdsina +add address=trudvsem.ru comment=trudvsem.ru list=NoVdsina +add address=esia.gosuslugi.ru comment=esia.gosuslugi.ru list=NoVdsina +add address=spb.hh.ru comment=spb.hh.ru list=NoVdsina +/ip firewall filter +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=12h chain=input comment="block honeypot DNS UDP" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + udp src-address-list=!VDS +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot DNS TCP" \ + connection-state=new dst-port=53 in-interface="ether1 - Unet" protocol=\ + tcp src-address-list=!VDS +add action=add-src-to-address-list address-list="Honeypot Hacker" \ + address-list-timeout=4w2d chain=input comment="block honeypot NTP" \ + connection-state=new dst-port=123 in-interface="ether1 - Unet" protocol=\ + udp +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=4w2d chain=input comment=\ + "block honeypot ssh rdp winbox" connection-state=new dst-port=22,8291 \ + in-interface-list=WAN protocol=tcp src-address-list=!TRUSTED +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" protocol=icmp +add action=accept chain=input comment=\ + "defconf: accept to local loopback (for CAPsMAN)" disabled=yes \ + dst-address=127.0.0.1 in-interface=lo src-address=127.0.0.1 +add action=drop chain=input comment="defconf: drop all not coming from LAN" \ + in-interface-list=!LAN +add action=accept chain=forward comment="defconf: accept in ipsec policy" \ + disabled=yes ipsec-policy=in,ipsec +add action=accept chain=forward comment="defconf: accept out ipsec policy" \ + disabled=yes 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 \ + in-interface-list=WAN +/ip firewall mangle +add action=accept chain=prerouting dst-address-list=RFC1918 \ + in-interface-list=!WAN +add action=mark-connection chain=prerouting comment="NO VPN" \ + dst-address-list=NoVdsina in-interface-list=!WAN new-connection-mark=\ + To-ISP src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment=All2vpn connection-mark=\ + !To-ISP dst-address=!89.110.101.17 dst-address-list=!NoVdsina \ + 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" connection-mark=\ + !To-ISP in-interface-list=!WAN new-mss=1380 protocol=tcp tcp-flags=syn \ + tcp-mss=1381-65535 +add action=mark-routing chain=prerouting connection-mark=to-vpn-conn \ + disabled=yes new-routing-mark=To-VPN routing-mark=To-VPN src-address=\ + 10.30.30.0/24 +add action=mark-connection chain=prerouting comment=\ + "Mark VPN connections to exclude from FastTrack" in-interface=\ + veth-awg3vds log-prefix=Mark-VPN-FT new-connection-mark=VPN_No_FastTrack +add action=accept chain=prerouting comment="SSH To ME" disabled=yes \ + dst-address=10.30.30.81 dst-port=2222 in-interface-list=!WAN protocol=tcp \ + src-address=10.30.30.0/24 +add action=mark-routing chain=prerouting comment="VPN Network" disabled=yes \ + dst-address=10.8.0.0/24 log-prefix=VPN-Net new-routing-mark=To-VPN \ + src-address=10.30.30.0/24 +/ip firewall nat +add action=masquerade chain=srcnat comment="Default NAT" ipsec-policy=\ + out,none out-interface="ether1 - Unet" src-address=10.30.30.0/24 +add action=masquerade chain=srcnat comment="NAT for VPN" routing-mark=To-VPN +add action=dst-nat chain=dstnat comment="dst-nat for acme" 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="dst-nat for amster HTTPS" 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="dst-nat for amster ssh" disabled=yes \ + dst-port=22 protocol=tcp src-address-list=VDS to-addresses=10.30.30.33 \ + to-ports=22 +add action=dst-nat chain=dstnat comment="dst-nat for amster DNS (TCP)" \ + dst-port=53 in-interface="ether1 - Unet" protocol=tcp src-address-list=\ + VDS to-addresses=10.30.30.33 to-ports=53 +add action=dst-nat chain=dstnat comment="dst-nat for amster DNS (UDP)" \ + dst-port=53 in-interface="ether1 - Unet" protocol=udp src-address-list=\ + VDS to-addresses=10.30.30.33 to-ports=53 +add action=masquerade chain=srcnat disabled=yes src-address=172.20.200.68/30 +add action=masquerade chain=srcnat src-address=172.19.14.100/30 +/ip firewall raw +add action=add-dst-to-address-list address-list=NoVdsina \ + address-list-timeout=none-static chain=prerouting content=spb.hh.ru +add action=drop chain=prerouting src-address-list="Honeypot Hacker" +/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 route +add disabled=yes distance=1 dst-address=0.0.0.0/0 gateway=wg-awg3vds@main \ + routing-table=To-VPN scope=30 target-scope=10 +add check-gateway=ping disabled=no distance=1 dst-address=192.168.0.0/24 \ + gateway=10.30.30.85 routing-table=main scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set www disabled=yes port=188 +set reverse-proxy disabled=yes +set ssh port=2222 +set www-ssl port=4433 +set api disabled=yes +set api-ssl disabled=yes +/ip service webserver +set acme-plain=no crl-plain=no graphs-plain=no graphs-secure=no index-plain=\ + no index-secure=no rest-plain=no rest-secure=no scep-plain=no \ + webfig-plain=no webfig-secure=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ip upnp interfaces +add interface="ether1 - Unet" type=external +add interface=Bridge-Lan type=internal +/ipv6 firewall filter +add action=accept chain=input comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked disabled=yes +add action=drop chain=input comment="defconf: drop invalid" connection-state=\ + invalid disabled=yes +add action=accept chain=input comment="defconf: accept ICMPv6" disabled=yes \ + protocol=icmpv6 +add action=accept chain=input comment="defconf: accept UDP traceroute" \ + disabled=yes dst-port=33434-33534 protocol=udp +add action=accept chain=input comment=\ + "defconf: accept DHCPv6-Client prefix delegation." disabled=yes dst-port=\ + 546 protocol=udp src-address=fe80::/10 +add action=accept chain=input comment="defconf: accept IKE" disabled=yes \ + dst-port=500,4500 protocol=udp +add action=accept chain=input comment="defconf: accept ipsec AH" disabled=yes \ + protocol=ipsec-ah +add action=accept chain=input comment="defconf: accept ipsec ESP" disabled=\ + yes protocol=ipsec-esp +add action=accept chain=input comment=\ + "defconf: accept all that matches ipsec policy" disabled=yes \ + ipsec-policy=in,ipsec +add action=drop chain=input comment=\ + "defconf: drop everything else not coming from LAN" disabled=yes \ + in-interface-list=!LAN +add action=fasttrack-connection chain=forward comment="defconf: fasttrack6" \ + connection-state=established,related +add action=accept chain=forward comment=\ + "defconf: accept established,related,untracked" connection-state=\ + established,related,untracked +add action=drop chain=forward comment="defconf: drop invalid" \ + connection-state=invalid +add action=drop chain=forward comment=\ + "defconf: drop packets with bad src ipv6" src-address-list=bad_ipv6 +add action=drop chain=forward comment=\ + "defconf: drop packets with bad dst ipv6" dst-address-list=bad_ipv6 +add action=drop chain=forward comment="defconf: rfc4890 drop hop-limit=1" \ + hop-limit=equal:1 protocol=icmpv6 +add action=accept chain=forward comment="defconf: accept ICMPv6" protocol=\ + icmpv6 +add action=accept chain=forward comment="defconf: accept HIP" protocol=139 +add action=accept chain=forward comment="defconf: accept IKE" dst-port=\ + 500,4500 protocol=udp +add action=accept chain=forward comment="defconf: accept ipsec AH" protocol=\ + ipsec-ah +add action=accept chain=forward comment="defconf: accept ipsec ESP" protocol=\ + ipsec-esp +add action=accept chain=forward comment=\ + "defconf: accept all that matches ipsec policy" ipsec-policy=in,ipsec +add action=drop chain=forward comment=\ + "defconf: drop everything else not coming from LAN" in-interface-list=\ + !LAN +/system clock +set time-zone-autodetect=no time-zone-name=Europe/Moscow +/system identity +set name=MikroMaster +/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=time.google.com +/system scheduler +add comment="Every Day Set Global Environment Variables" name=AM-SetGlobalEnv \ + on-event="/system/script { run AM-GlobalConfig; run AM-GlobalFunc; }" \ + policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment="Every Day Check For Update Scripts" interval=1d name=\ + AM-ScriptInstallUpdate on-event=\ + ":global ScriptInstallUpdate; \$ScriptInstallUpdate;" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-time=startup +add comment=awg3vds interval=1d name=awg3vds-update on-event=\ + "/system/script/run awg3vds-update" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2026-09-12 start-time=04:30:00 +/tool e-mail +set certificate-verification=no from=MikroVados port=587 \ + server=smtp.mail.me.com tls=starttls user=vadossio@icloud.com +/tool netwatch +add comment="doh-fallback, doh-url=https://security.cloudflare-dns.com/dns-que\ + ry, doh-cert=DigiCert Global Root CA, notify, name=CloudFlare-doh IPv4 1" \ + disabled=yes host=1.1.1.1 type=simple +add comment="doh, doh-url=https://security.cloudflare-dns.com/dns-query, doh-c\ + ert=DigiCert Global Root CA, notify, name=CloudFlare-doh IPv4 2" \ + disabled=yes host=1.0.0.1 type=simple +add comment="doh-fallback, dns-fallback, doh-url=https://dns.google/dns-query,\ + \_doh-cert=DigiCert Global Root G2, notify, name=Google-doh IPv4 1" \ + disabled=yes host=8.8.8.8 type=simple +add comment="doh-fallback, dns-fallback, doh-url=https://dns.google/dns-query,\ + \_doh-cert=DigiCert Global Root G2, notify, name=Google-doh IPv4 2" \ + disabled=yes host=8.8.4.4 type=simple +add comment="doh-fallback, dns-fallback, doh-url=https://dns.quad9.net/dns-que\ + ry, doh-cert=DigiCert Global Root G3, notify, name=Cuad9-doh IPv4 1" \ + disabled=yes host=9.9.9.9 type=simple +add comment="doh-fallback, dns-fallback, doh-url=https://dns.quad9.net/dns-que\ + ry, doh-cert=DigiCert Global Root G3, notify, name=Cuad9-doh IPv4 2" \ + disabled=yes host=149.112.112.112 type=simple +add comment="dns, notify, name=ns1.unet.ws" disabled=yes host=91.192.189.2 \ + type=simple +/user aaa +set accounting=no diff --git a/MikroMaster/history/20261007/20261007102001-Diff-Config.rsc b/MikroMaster/history/20261007/20261007102001-Diff-Config.rsc new file mode 100644 index 0000000..cf70bd2 --- /dev/null +++ b/MikroMaster/history/20261007/20261007102001-Diff-Config.rsc @@ -0,0 +1,8 @@ +607c607 +< \n:global CommitId \"main/23892/25da9dda\";\r\ +--- +> \n:global CommitId \"main/23604/f287921b\";\r\ +610c610 +< r: root, in 10:10:04 07.10.2026.\";\r\ +--- +> r: root, in 10:10:03 06.10.2026.\";\r\ -- 2.52.0