From 5f824ea5a871d0de7bcd950ac395c984b741f65f Mon Sep 17 00:00:00 2001 From: vados-dev Date: Fri, 25 Sep 2026 19:40:06 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at Sep 25 19:40:06. --- .../20260925/20260925194001-Binary.backup | Bin 0 -> 243756 bytes .../20260925/20260925194001-Config.rsc | 4337 +++++++++++++++++ .../20260925/20260925194001-Diff-Config.rsc | 4 + 3 files changed, 4341 insertions(+) create mode 100644 MikroMaster/20260925/20260925194001-Binary.backup create mode 100644 MikroMaster/20260925/20260925194001-Config.rsc create mode 100644 MikroMaster/history/20260925/20260925194001-Diff-Config.rsc diff --git a/MikroMaster/20260925/20260925194001-Binary.backup b/MikroMaster/20260925/20260925194001-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..f5c485786021b5de24e20677c0993be7be3eace8 GIT binary patch literal 243756 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

Q9JF>7v7UqL-*3rc8lpH;R=+7V&)WByU9`mQf| z91uM0kEesxXYepU56(twGB@f}`#2N-Tx@>XTVtqOu&MS(uMt~dJ#sTMl46s~0$q?r zpni;=j#-7fNI){n)=#q%ItmbzmRNwT{iF*-0G*Z5)>!1v@?p5 zezH#ai4#2PA?CHWtk5!bBTvNt>r62aedXjh)sp_Zkkl=%Q5&K4tj%S);@M0A4ler7 zC5d9frxr8I?}rM*ib@nLvQ^(M*5rj1C?R1*A*db^HnVaG=|;Yf<(oTvSceed z^*_h`li&~peuTC`j-#e8Rq{5i-m8K&OUSO|k(m+!x^gMzbe6cVIvFNIQeq=*|1rg` zhMV2$JU1v8cy)7*!}-Zs0;v@g|0cw%dAWH=i)O{2)&8ktu-DUla_N)&7`6~6-u76_ zz1dOthwN4J%p%%J?Ehv;FkM7GMk33B!FA6vM+Z_sx;!F9og5*V`7>qx-ntT(R{?UYOA zyjcruI1xy({dens36?diRJ=*(rkilnf$AWgKS5Zt#g2WN4rd)5takp;D`;2`57L&4$wNndbw=}m_+x^LT(W}@!isA}p&!!un;`AmX0BDUHd@=_XQe08hDpF2C5yvA z_wqwr3E=ibWrx^QfmQdI>Q}pX>U+;4kkYX&?CD=6PC7%l(;hk+KE&WP4b?oCvoVi- zlv%F8ZoNP&MGhVd5#;mlj~7Wasw>yU2)~Zii(bPQ+@nU6|G3XFQ=(#tfTldWXk-l2 z3>NuTDN5E!Q}96ms;2-w{kQFx*kpPQxkC`cuS2lOE(L(%pWKJ?fnZ)G3|i&&*}Wo zC;u&=u^Kb(7VJ{JX*DgUG399i8oKYP^1VbB*j>ZG@|RViV-Ikf3caHh5OS(1e}?3M zL-)<|d{JFo?IM0OI!%mbBN?YXeKGEk=pxCeGsIe!>V}#ZZC}z$@Mp9yBV%~w95Xx) zabR5mKzG;a4uzKLI4q>~W#5zKtLftO@?U;!aHp@J1j+!sn({v}JzaBmGu{@uX3hpX z;rE;tGi+yWZNQ^kM@~C%FZb)njvP+xRpulbJqHkIy4md>rw^za&K9(YO%{T0Yna*Z8E zfFCV+`G;6s={vW>Rjmc8o*9<1vYA&x;zEzhAw#jc@2CmquzZtb8Mrol+s@^QBSeke zp*c~(wXtJpH;fze_wwPaV1s9A>>7MIO-d=pUI=$dwvW#xH-##i;^DUcYnE^F6fJ!? zA2%<6PNZ3RLuRy3??CYH7ww=y00|fJEI$MlQ`1n0Zv?VO-F?8T+a&F=sI#W~T^7;g z*fsp78Onq&T9QcGm=K4e=mu-S$4>pax9v%^b;#_s93dQh8(-Ec?o?u z3WzI$hJc^pDXtQGeSRT79o#OImGAfQmb@>`t3vjEkf7=rv znw4l(2&%2SB=XUVu@3?K)yc)2@ZKU7>EPG>zwfV^Jkkw5hTNs##5Slcq$3l(5bei|Qmoo!u^P%vak4r6VFq~gDpR;VU7)1qcyr#QMjU1w zt89eTPh*i?S0A?@O=}#d-?e**jV1>9#TRR612V6gp!oqXBl?9JTH88&eg2F zZnECKqjQ{f;Rl1My!Z`HU18}TeSt? zHSRLNHgx?$NyU!}LOThWFVF!C6GzvG3~}L*L|IoLnSBf%>H!ywu7@(c44N>&>@(vz zquF|r$Jk3Xow~7;*|M{{nVeKFm#JkW3n2Hjn?x6M>TZbuYI+8#L*>kpGzo0`Q+uWl zo(n*(B1YWn1QiC0B*d#8QK8xQeJoeOJqty*LtdEgXGbfv}w} z!spm3_JjuUNMLvLx@eiRM1siadnj!qvQTJd9S}0^V!JwQ0u2HJ;VO zULJFUg+p6zV0$nJq}!^@;HFLCW6iEz^W;Q@%_s3FFxc62o+f5L{JlH3>Ap9MDz$g~ zVG9Cs`JA$W<;Yq1p52EGrn2N)KgT$OR!RoAZWX8MaisY_O^9@}uJqdj*& zl2dt8DC~!5i{Tx`eGUEGI5^I<&QnLh%lWe_*6#@6C*KWDm?|q+&Md@__w-@Kro-#q{BhO&CAM+*?aiqN--U@=tXwX(uzsU=hdb*Phh*QMW|>J;VWG@ zanjDhE_?W#yn4k1*SspvCoQxC+JLzMM!gt>m599ThOo;#NGbj?kCMl#A7PS)6X2z+;lbCZO!1PR zia;~v^1AGl##>2QN!DJBwgt7II7Bq5?Itn?7^~61K5O+iS2PYqEsD+h5N613c3|A^ z%JDok?i}h4QjPQF>vpZg+@bG&Q8Ln%gIhtq^!=~gqm6!3$N_~%AG))5U=#DHk|_Z@ORuqg?huNOzQi zzhR#`*q7KKA5zz{J1-GpP^|}aFIVXl*6LG8U<-5OIum=4I#X99#pw+jQRp8aji1`_ z-`1E+4W#Wxc0^ENyfbNLS2{wb2rGU(1&(L0_`j`kM|+1K3#U65+?C+OWMR1Mb?;Tb zM=P^3O#V9Gv#$5=@=!tf+MJ)kZnCWbrOrC2Go6T6O!c}>t)THNm2hC_sI%z$>MDpH zf>qMQfJ7m@jUk92JHt&%11)?s{tUFhsblZrfQ_IH-li+YpOS`SPTLj_(UN`)2eeBW zw5xWsBa8+3kbJY81%>b$XuJ6mK~e#cPv86hy_=i@J7y{4QzkIq2mW4CXwdcjN|01C zS~$%pIdxlFWc2n)$D0=rtXonzqZ7R2!#{iW!X#p+13sQ;j~Mwax+fmbOIj+#PtkF4 z(>!tPL&O2!9(RMCOS>OouM$4|o5(GXR^A@d(gw+j*Ix`_EV?UJKE*&tigi%}NZb7s zPBQoh;$H!C=;8b1f$js5u%U*I85nT&N*}KR{4i3<`<{ki?Z=2@0Vm47X0yJW-**aG zz`tfXK&$awTqhUA6J}&&R~vVgiO#3rG54i2zar)UFq;QI?c2@SUG!9YP?=W8anl+% zh5~;k*tqB1`#k|P?P6|FR1FExD4Z69P-jfKV~0I^sO3HU<+dk@l^yGY;?#NwEy$P{ zjg3?fB>`M*YBRVNH2dLvs;%NN%GU)lJwZbMAZbnr|y zB&bG@aSY>;-ER6UJCMNK&2)V9N=IUgQ%pMk?gK#J?dKd0I%j#6Pjg;aKaS8-5q`$j z|4KWSTSf43|8C6d@M&prz?C~ipt4J>#aH3@H#461Aa1rwWQgjLowc0jZ1C+1eik1@ zko_VTq_lk98c<{IMxpooHb2=R|9)ktqD&V-s^3>7x`M*5$+tz(g%W#%>rVS;;ONGjudGV6Dsiua5B?dK4Hd?;7St{+}Xy0)AC#=pO z>v$-+^}WW-Yyr0;YQ~VZbq7sJ)z&+=`KCB<>f>}R`7)hlOA&n$#epHH5jv??)@ttZ zF0*II2aEg_;@3(Cd^wWR%AoKJxBUva!8OAPGVYY0sDZ4bucnD_ix1ywL3uKcTs#<8 zKQ0hz9=HyX54MCPp7dYGcq%f$U@jK=2ON93tZHX=pLL@3m}3g6REHnMY`H&OGeT<* z9$}Qy(6PuvY7NCxCJ8Za{BCBC z>?y^RhG@J6flEef7O%OrZCR&v6c|A4=1U^Voo$IP(epX7@Zqf{6mWJJvv%pcH}g4; zj6%_YbU=D?ZzwU z7$}J%Ojhm@KYsCQOa(vXSNtOA!bqN2EnaakMqr+-=2WT=kYRn!fkA7c8=Nw~%=BRy z{m?HUuNDKb#5KR)EWemi?mu&MKC)sf#C*gdTe;DaxBzzzefoLqE+R z!#2R}zFMxb0i)g!FwS=?&{9X)GU62@_?KMGO6B2)*7M(C{o>kmj+d%VFO1aX^}y?_ zle+3B+Roh`+s8bk4>Ku5$}wRt;wp%Zq^j=qt-Djvb2gtX^51A-ERm64SW8DER=a%;_#e}7{?Q*_; zk2DLi($IlLgpTPD=4JCV4Izk|I$e*Ov)}rYV+-0%RqL003d5-ttGO_c`wLN54CdbI zh7sW%Hdp-%l>A+c%z;`&jto6rrDBKsAK{=!k4`5gGo6I|_TA(hsj2aAxg?hKhJP?z zwXe>Ap~KIc)ronN+;vEp(A-ulU9|8*ei{cn1;WbM9VApz$Cjn1-`j~<+#IGfzDlog zQjUwJlw3RO3BVW*K$kh}$hd#S&?*@fb)EF9XqJr78`0Sj8#ybROTE@}W;etR7A$BG zvne?LFR=fp7-J&=Cm>=x^NRm2(Bv3E!<&~_pV;;E-d1H(3>TUgeFf(#*Dq&LCL) z$x{A5!Vml%ZY)ZXkTs@o+(i4o4}Xwr=?dIF^9uSQQ=BRQ$>!b=h}A0-Y) zNUtxqZwk=1W9VH<;&asIWA{*;{1>o1zVdFll1F9w8$5LHr;8WHcwgId5zPsVRow7k zb%wco&tOxdcCO~Ls(T2GYBWC={=u?7@)WAUW-ZUmb~zx%2QynHX7q15vOC^dOL0gg z-DQU8I}hQQy5xI<3~8TM+PtKnrS_b6SQCq*wZYZ@*9@Y5W_i0S@53g!%~1&rP!q2f z`3nbLp}{BFG~z}=H?QhWK~hq*Dy|%7wB(M9>#yeL3Eo_(1slFaOa3b=o-oUY>FC0( zEp|mgNjbnN;_CB8TRMoNbYivcf_YSNOS+gbP=gFi1Ddt|4h+Fe6ucEUHxKQo$919l z_Y%DkK~0bsV7QgCaHLmfVMrF90eF-=@Fv4{d8YaHe&>zwvhY&_pF~!am>@emqxnpS z%GYvFh@?V+ZF2%YlX>+9{C+rgg+luKem@;xS#@hqfjE%iXRm>p^PksQlY7lb&0DRz z#Rr&q?AylmFV7$5k+Fz)A)Oh!ojGp!JKs6zrf6+KJiI@FV6qVKJC4dy^oCtRMf8 z!lFY*ZW;*TD|ecg3R-8H|91RNc6WMau$$J`ft#sioe{&&#Hp_*owXpwjCy}-bfL)8 zP9e^K&(J<9w6g0(!C~-6YDcgkh7CIe^90&&>kEljP;h}gB?Ml zx9JNPs7aYrSD2{YL>qk>6cNT_w<&ix8tw&+&f)WeS-eQtm)UKpL-|TdPqJKJWXMC?%ZqGZ#*&itq34ov36% zhD1o{4o6l~U;Y(nEi6y+((|x>IdoQRby<1ik46{CSRo?wd7;*4LRaqR1C;-$Hx0%M zyD`#WQ%ysUK<`bT2n2{GwBkTR387ouyzYwhuX924XP{1pzXt&WQaa6+TXU7c_IttI`)D0qmLs;Uq@)K@Y$JDhdQ@) zPjU1|n>rK+Zd;zqK{^T7KOw(2+``V6{!{P}*AZ6qw^iH?L+`*@WF>9>_rr?9ioM9U zZmgeIHY%v++3}@K$?yYcN*<&*syP4M-pBr*SsYRqyQHy}H0v*wts83nZ~x*k|C9;e zahFrYyELwTxxg5XIy$@l*+jUgb~KlD9DqpsbP_YLjiC^nV0pCX4WuqTF))ju>!g;A z;qLL|)<%CxP3(TM@6Xk-*pU^D=a+}(3=J1WZVs`|aht$dk-*yP;59jv9vH7*alMWT z@c>QdP+#`TNM(3zOBKQNQQZh=v?B`)sk&iLl%MlKmchs%=AeGJYYis-QmAT*!}vBb z=GH(RB7#RJOUn!AJK7c4ngshQD9G9k(8lKTmb5-H@+PnLsi4K(ZWqdbm7*h(k3MrK zIHCinXtSIM=o8wNWHz*7*PwuZDGkfmvw~qg?TDjWrLuX5Qef_a{DmNJ=I%+_|_p1d%KO}v@Tde=5VK3 zGp<|-+gr{{mztk+^Li>9Z-JI^2hm*H{G!`diY>x>y}zaPqUE-d3mM3>DU&sYc3Qb6 zWpFug!41Q_=JXo#s|os~^d=O4#MYL}{zHr(A-oayVqc!(y*AdRApo}MAr5qkV3@pj zwHp+>Guk2{h7x;&s)}_aEx~$X;g<4k^H<)(sz^3%9TUKF^f%87c72<6KH&GK5YDBd z4@vb_OKZCkPcqAW#&q;roAHHYd#uh!6W7?X=UKm>-kL2 z!(_m3R(*7;_{M+=?SB>`6#4nz6a%3F^%}0`=SUVXW8KRI-_4>Qo>hlF()7r~>n#t9 z2lCI9ANMjxf58cz10#`};gpkbdT;)e4=hot9NKZ~0yK)?{K^X!Gn3}J+ zikQWUdvnL_&(5o|^=TmZv+r47`(c`#59IK;R_ay6Jqd@`^QM~PBgvvy1@&_A!=?^w zGR2D(Sb@r6Pqd)Ih$@Dy&XA^nn}z{P4LkwW$vL?RZ=V~qxDe91ii*>#y@rI&vaw?M z-TRp%5>qBp&7;_^<&91DtrVmBr!~(~Faf%uDewhd4^OX<5x*UiNMwiaRTbT!BapL? z+%}jSB%YP6T#0Zg&}KD$U&#=juDE?`ysB~^C$-A90}>yiF{jp}?%(C{77W{*q=$(h z5+&X6#;FDL&;NOzLSEgs6|05gBMj}n^+#v{A|mOZhB50tnqYL((3JqsIZ6f_Ru@_z zsMbQ4DM+sn`76|TpuCMgb?xn<$mkpK_b;7(8VOM6hdlk1-c=Y>=SN@mhuzj*`vZdH zm$G2ORY~gx=9XehZSH}}^)BN47nL1}rjkh7B_MNuu*_e&&zIKlMar{_ssN#LLyV11 ztflcVFA9Op+R}CCWEP>r_NCFlisORbm~~yBUF|r-eY?90+#&GPsU3=Qq97K#fi7p) zwBsJ~8PB;HrYeupCpn+S2K%4q-U~>wOt2Rit1o}QC2KEl z&T@N^pGxqyXisa~D%@F8C+hOXyKk{-pJIVfoXnp-D%vrYlQt06T>$<UT~n{9Z3rm8s{R!psKC;W|{xOX);)jv&@7F z+Mr+9L=6jzl$vp)_+Q(`MU#{&ld`@z@5)exG%4yejp|z>cuvMvzXdfIvf{UT#mQe; zUq_>A|1p1LMU1f3CZO%}@dE5yxh%LTJsggm&8?+A0{0H9cydYqf*p<5LdqF=c<91K zd;*y%LZU{T>x10mQmos)Z$U(m+faCt^&}$kkq#=j24m0ps8HFai5e2sn+W7zgV%t= zmLE9?gLy*Z%T(4E#@Um)PKw3I7--p5lo8-$BJXVBzEk@b6Op9PAnXmvjbfNGUfjG?J1fPeZEYw z+gJarM~+JN@Kmh~)s89$)J7YwGlT3bTP99T^#jg=pVSgXiX&ERv3#k4pI9dw#`SHv zqKv%o*(hK;$54FqVGCA7bbr!h9I8E>enn>K9<|C3p?~Ln%nn+vG~JrIzgSY+Tl9`z z6~Hqmp5sacRdBOpS%kytRCQ4*Zg#<9Y+53G&98jUt`}M2O`fWcXNVr%Jc-9S?X@pwPxl{Ozm>+rEm8bR)w-jNU?;3WGgInF&4eco=&s-B(mSIouwf|i+1WIh!e>xudT?k!Wa;z zK&8^$9Hd!=pII|JXXW^P<)TD+4;<>G8YrC7G{3h8<^vn^W|T*1MF)kuJi{LWcCNreGn{ z;GuVLKznbp>8kcHEc4o*?0tkTrh7<66~bL_a+n@6e=mTg7D8BMYJf&{vDmzc=_c--E)hq zfnLvX4{h~>`zUoupkpslTNpg(1f^?)P{ZvO2Sg2o@4CKtQ}yAE|7g~Ir68q{)N zW|r-WW4jXi1PE}>P1bWBzy<_@SeK80K`%+(vzLD*5po?H1A8ZP&I!q^xmI;DJ>4~F zCZemAK<#Cyas1~2S7)P;c_mH&wA}ATqGHPP)K{T}u7#(cG)1b$#lhl)M#FCZG=HvW z%OiQW@$YiDbXR?}6kBt{YT@yd!%J@6-Lz?@IvKHy!6c~=1qo*3N9E6Dq|woxM{3<4 z`!wO-m`6R8%V2QS0h4}CU2D_YjTSM^L+?U2n{Bq)jodB9h$wEfFR)4-kO0Ep6CJ0( z$J7x|pI?@sw>GTUxZdGX<*U$94qF@wnuL|PY3~$Qi&QvO@1A!g&hna(l*TQZS~C<> zfT)kn#80B<8vHW(Q$<_YlWAwF$3K^HKoBW-NVAp++p?J78rzsGD+!-V!uMs>W$vS~ z$`4G}p4$r2;!!t6ck+E2m1_L)Gp;`7>CDVVZ&<;EyP@0^k!rWsQUk*kvH3g34yaj> zJlS!dX}`gAG%W_hxF%LqUIRUPmp!61?Vm@l;-SsXZyRIi9jzjpM@QeF0D{`_{M(lq z1>pt=E^na=7F3>VB%~{Xq7wh{`lgZUyM{aHt>vA>YY2clnvXbY5#-&(HP%v+WvHj1 zQg535zbl2@I)cRt#$}`h4F8^08N`&jrBZlsT#W+kZ7{ojnUi}srrP{b>zc~u2NIb7 z{pII;PSw9_i-;m zwCeDR?Qsg3w#CB9Rw!-drq7(phyM?Sha)W4qA@1!aVG$d{Z@aOV`*P|m3(n@GSSzX z?Lqd<-!CMzf*UP^Raom>15AR@u5UFNy2O;5`rUyJlh=T(PYin4!v8V6-^97X$B2en zy2%VI$98^TPP9UG(Pr7|dw+74vXthqp?f z*Zf*K3UiB$sK7o!;cS5UGjGffC+T~&W)Tw4$kl&5I--6%hfbs?H2SZ$@;sOd zL5On7=QR#Q!XH^l6vw(22z1@UE*;!Et!Tj(DifhPf1(Tq+vz>i6k3Pf*YwftQ)mfF zNrIqGES&{NX~#@H@xM@J;DSt1HPT6zM_vrCo_{lXh43C_{0(E36vD~~JER|3yIC-1 zoki7MQ|#q`g3;(+`XfYy5&ViKoatN!JGWw7E&vTE=a2whXuF$SqT=>ZX!ZrR^uXO) zHh?M)Ul3OT!Y@OS2YLDy&V4Vx}clhUu!`TD>f zudKK@(KlCf(XgZPMIqn8XMDT*Gg7N;5RfKrpl)rZfpe&9_>t-;2Gw}KsY(|CD20+L zlU}d9aF(rlfrN3(arr8C|t-y!Hvy4@7-`etl8Pn)A=3b^nr$N*nnLJkK0$1?V z4$dM*6tQ*lK<)HSQ0HCt96?NapDw%ZOmXE#)&Hk9tzjP7{4faVT0@$By6PQcHkJ6R z^gNJg3tzGRf`Q|cUvssd(=wC;;{ax+JV6U!39AG)h~T~t^hgqn-wX5Q|2J+1YicR~ zWI^I=%(CvJW2K)4JkRyq0mv)V@d|GK*Zf$T+Y=HaQ<&0V42-LiUP+@>-+KDu=URp+ zv`Gk0gsFkdz~&7`_<-4tYWi-DpA^FK_cT9M#D|8)E~*B+0``J5zUAxK6`T2sQL6LV zqxV2`DwVSwvi(ApYy6BT>!}6!ih2d#;4@LVva#F=@MYG&=5+?v?dA|7 z4347~eL4^I)GI1%`SfE-BsI3`=(K9M)q7R@(iq^F#GaSx+RqI2t#yD3GXE_mQQgn5`t$@gP z!St(aPZrUhnnl#-TjkWMMpaV5VYV&e%~m{vsHvA|s0}M{&{#2uYNhfrInHw|=1nzT z#~)y7-9`INu)O?M1df$k&2E{Ar=^DWx{b7EldyFJ6@@NaGb2ZpB(b)|l)uh{TDN-~ zY_iTX}x z5VTsuJrrQG+T%Q8?j!%th70))YAgV z_)b{M5^Z!Y%CO^eOmoAI=^zsT0BUC8-AZGc3u&3`qr<=Z0xEOGX}K$*@t6gY?Rww$ zgf~fu&TDMIz8O$OH|X^?Qb*5;ZW;@-j6i`b5m!LsoqJ!Gb4#VL6Yf9{l>Q!Wgdcap zmne@9A#u`uov$1*<#hT!LUCm|xmRTX`7FiRaAl#%{XfJ^5CYW?5YNHUe#u#<`ys~S zy>QHEQ;9c9hfa|baqcw0stn_N#qq-O(co79$?XiN z7|hs$-eOS5YC_TA3`XM*VP*o25qShF5ywQ{31x!Vzu%=zI|qSD58HvtbP^M}T(Rco zA)%$lr9c!C|MA|CH#}HkFUfAvz>xIsqRxbl8s0)50@*u5<7k>Ljr%^^Bf;rHrz?gW zSL@%oUpG-g?N`rdhh;dXZLwo@B>DUJ@%VG3Cf@<*n_AsW%CF72xmVeD&y)2qZ6;(x z2XPeJC>$}|ClY%*kaQ8Lh@nl9B4%`_s+AV`DBzrLP&?Cuh-fjk-A*>4$2{3< zV-Bs&jU>Me$eJEU1BD=)82zm7n5;V+0VjZ=F9b?Djmu`gb>J#f`NL=*vwh)o0FG-A z6Tg$f1o?(U8Fy)|8{nXt?LP=GYYUxJ@pyqfLi&6EoZxfSLzPIWs!eI7hXk{nc*%t{ zLGrmTUMo|M*DtZ-4J)R1Sr(sM8iMcZ{TruxLSV_@%!7pg(YoPbsK5vx+?=-*M?e^R-|$Z zLIQ^ajo#`!)qGGk1Y8a1$ZPCVVOvn)bMMv&po##pW#K>rX1KYY*V_ZsU&n!_E=$y- zEtm3?X?Dt0FVOX7%m%4${Rf4qGZEQHK>3`0Q3t{{Jtm)DrtXl; zE&{6J2hu9!{KPi8*TsomYpl!%m|Lrd3uSpW-95%bDhlyPuwu#JUc;sh<&GWtO^&nj z@ubfDk`Lj#ZoMUsf1o8LE7;uhSaQ1`TWE#{=V|)hQYWY{o^k(dY;-xJEweGi5Zqlx7JRkgKi#=Tc^ zljHM}=Lh6Y@0SKPaA*>tiQNnZQJuZH=n8#5%JZ}1L`y;7tCKqo$;n~O?O{_X$xQ8( zIWibnwZFT+iS0VItIXE=<1b6gJFJhKqvtF0BAHL|>8O^a^q4xGDz_l;Q zJMFE3q-@*g@8AamE@`VE|GZ2g&NsVM8wNC3cw6;)-f`>!I?3bA;v;aAE?~(yTb?_x z%YFLws2J9E-WagpHvn~B>!q#fAW?*yAQu8HCKp}zkoOU>$o^)FbS_k%szz5pV9(1& zm>>dIn}dU>)ZAG*_ku*Q{O^6yG%_yU!8-TIA|^0r%0Lb!@&)DC*<>eZ=!B}Uor?N+ z)@qfPA#YrB_fw(OEz{F0*GN`}u<3*Xr1^dR>(V4x(>+tzdVx^07*J;9{44)r4Uzvu z3PGz;uBtLWB5vv?3$uzAq12Q2uAbfw5GUi=@h-9FgT3>UJ02xaOU1O4VY>eoV(4|dNsV_(fm_9tqBgdj^{eka5(=!qzD;q zQ9@p)vm=rjDmns&phKzEIi!+4{xtj(Cg(+y!kuJNqO+3*ySmWSs2Sbfol~oG@_{=B z`5>vH-ZK3<{W*veHB<+HIDQ86AAzjzJ-3eA&{%aso#FV4o*?NLe%HXK(SFjzmA^Yw zicg{UMC4Qw2|^9dHE&D-K2_S2GNQ$`Yga0EJwDcxiQ)5)3hP&=jJ@QJOlq_Y*m>Cn zacQD}VF|9787o>1s zbk3sQ@z`VEkQcfQtoQKP&X#A~OdzSRMWLpQ zJ~l&?fIKg6ZK9`PRRn(*T0NDjx8h_l;v+4D*@rs4TLP!}agxdHbav3BRekAs7j~7} zqO)g#Cg7L01x`k`-yiIcP>dZacgHiCNT_Gn2~GPbRgM7*PR=Jwna%OdJe`N>PZWVg z&F{{8AFeh`&H!FP=+{=15;&g>UOKXj_Y_pjRi0!Ix00HduqLIMuYuK3JZ~3gJPrED z>w)(l?nhoB4ws9bH#$?S;M?&Egxus=2`;2fP2+!f{U^f;P%m0bAJQgXxRf@^6fB14 zw9VTwY2w*sO|J@&{mHdvee`2$gA8V3xJ9Pvp<;W~XO$h!nYgbKB(0pe34uVA4y(4b z#cLD5bd6J&efw=_Z^A?5c5ixeO8V?QxVPv-Jmr_SAtKoyvRqG0NYp7ce~i1ucm_h` zpYh+B>XD))Wau6gHCPh2mO)2A8xv+`b_*cCDh}l?IYB*HoHp<+q&y1fgg$6uj9O~$ zNnW*ef1aNgETsiyuH0bcviBZNrG~!XvU07z)O^C=ygsmpm0^f+KG?iDCvLK_`=uv> zNEo^O54fz0r^1$Vz}F`8kat+Ws=ycSzTztN%lsZe*wWQylJ>A_&^!dWS4*X#S3S3W z9BkvO;9>)p2#d?NlG!%d>;Fd`^q@{2nz_UX@be7C0zoAwYzuD3XF8&mA5s6(^rIrI zId*{Uc5z~9qMT1b1G}-fypPWVVsJSEAT^8lj0S>U{>E0 zaZsTy3aA&*zGRG01z$ZB+3-@26dULC*23uno~on3Q8}Qp0g*Qo1)ezaj8m}}Flf(b z>jpcr@uPccv0_xt%XkJxW2|FgiIYctSOZcjN&^y*&sN%Dhb8Er=#mykHvG&s4$)y4 zL-gKx(a&zg;-1(PTxesfa#t>2s(0mOx1=(*Tb|7-MU{`_nz~>gq{$A zay9&x>-sr=Z?b2~$^M2-R@yGn5z)T7iDo%qQUHULpz?QT)HWRP{3_mh7i`Gr&**0} z);9t?V}?fi@_?`T44$}mm&ZKV$`taE!t^j9r@gq3Lg}7Y_NPpTwu-q$VRs3s8$TvN zUJ7Svk-UJ;RI(1b%%f7^^HhJ9*GjpHrUaVf=N@fu_$JZ$@X46n`)4qt?~Z_tps@A> z&)AFsWjXygJ?H)0XhGyp3+VHj;PlWfcu99HLJir39w5Vy$99OHzCf;g=34oBse~!l zJ(cIMv@okSK2zHu%)=Hz33v}@Z;gpF z>F}A=r-YgLWg-Cl@F~|svui!;`DX}~7LfjXCR7J*aQN=mqyl9eAOD-fbM*ls~B#YCaA7(9BX2xUNi z#C~{LpRHuz)RU>tL+4vg4!IuMUv+aOsLcjNIrhahHTjkg;{$U#K(+_$~062{^ zRolC-Q1i{s<-wd3drwkxcrsw0FTpU$*LEtv%jbB+4^anfkyqzp7G-Vy_NUxvxVTOD~Ky zCNEkv@&+7l!q3!&J?cgNdxzmWSd}_UUdLNU{HY>bp#`~h?H022G zL2i;kpP-?nq>%$J%mBCl_*~Kj#Hk2+C%)iUq+t zx3>6t3Y?1C*wtL2-nlX<6^A1F%B9CH(!m+womSYFMFTTp-L=~t?s}nU^c%}Iq)Pm5 zZ5x`$E)w_zo{~OW`61|;FrnNRw6+JE-v}u`zBGxlNS+p|!&p*#03);BQ?<&P5@kN3 zEH0luLlO?t$47PEf*Kl3-8K^`$>~vl4!v$d>$=?P_QN9hg(HTwUH$i)Cvq`GVlx$Q zQN;+aSMpP@@gz+i*V?~O2jlCy6p6K7LfGQUP6E{4Vw(*oZlW{QbzG2?MZJdv@V}K2>N;hkf%k=DT{S?(5q)I(yk}n84r`pI-Fg{q;1c z-p2g**ubrbn}7Zof7K7veei&$P_6&E2Q4*_H9q0eG${bh%8JlKY^_Kc$rPY;cP&SW zZ!3U?uA1>%RVBN;bchlfQ|>Xi1XaX%xNJKEt-)!(I`vqzDq!cXwFXbi zpns`)%)jGJm=$}HYCY*al(p@4VTbyLMTMSH%&`-xwAta_69wu8a^p9?rT^ty$reW5 zu6QQLTH`^|JE~V5nJ_@E^ z(J%x1O*xK2FxGsPB~;*eRV3mlg!f=?bK=R=G0je2#GN$~=oth<;tbtulTtO_ zXHpKfPFkTyCBErd4?<*4MqR&`6|*TNn{wV63Sl-?6Ar-L)y=Moj80FgZ*BG`9xo5r zIGP4n2}0lCysU4WhPrBWi(6iDQHj*zTzJrwxu^}OB3UOqK)0&GaO_4wPt|>y5Z2}L zKo&nH?{}UwDb&C$xEj38U?`I?6nL`)e;EEv5~^0db!0FocGgM@pLTqsd18!Ys}^k3 z@Ep0d$4W+dhIlviGB`W8#K5pp<#7a~6uvMk^@F%x5Sot|gpFWH{(|GUKM{A-$W+5a2P69Zi{W^$$xl zg!kH?M8#NRTGV$XI`xm{0eJZ;gkSDLL`uU4qKz=QnpyWLHuDuE;a%4C&Ya+g8YPH^ zItddR7`rq~!QfS?Aq=Vhj-8FA#P}D1=3=8Hyyvp@Wo;P$>mL~7Dr>Oo(OYErGxg%V zeI7S=TkP_kibrazeI9$cv7i!miwUbQEXR!HUu$0fez)<_c~S!zY-)lHh>Fbr+nQZbY^_*S`D~h5A##9wF#UjUBx&6N((NXUYQB7Syb4c&%@^%!dyBcf zC))FCJxjh9(5S3Q3$`1V`-I^6?9Jw+ONMidX~6llE^(}8BerWc?<@M@pb!c{epE{m z!O8OUt)R&cp-+o{`qqjBA+*rb2Qmt$E!xCc(T|wKUt^3O^(Bkdu1TN+WdU<$M4y*u zfM!_&2z_wVA5z+xRTx>#t*z-Bd<7tbUE}`}qu3$#!Qvr+ceaaGVeNZJBGxM$8%vT3 z08?#nm7EjP`PY}@tLl!E@DoX>EZu=VJl9@J0@nIPrK`_xS}qBw-Ik5bxNxUJo;fhC zyattoNU~!$CVl^b;S}NxD^p;b7yx&=N0^NbQzKF?b?DB5DP3>f=&(P#ora!II%DTv zm;M^3;%!d~;NS}Xw15F0kdXOhkKz8zhTGGA*M^wE&wSvgeLlx!Xf%-rOw$>X3Qn&P zzZ|njapU#HRVrS#2WXOgy32<5uAf+xzG8tc7f-*OhZ&3tz&6vHRYz!47@q5@pw(3I4s6M2DgJn6^dcJ9yTs>U`%27q;k1Z=(&effiq2UFK_aAW(%;uimeg*6C2 z5)z!qY?ZqoMQGP9u|g>CH}%g)E|2|F+i^sG#r<6Od31W7+(yGlB|g*ld4ubL+{#h` z=Bu%PWO@R6jCNTe3*iakZ6{<;+eGX zLq>|sB^kNedfksxY4y0p9)D)oxYuxj|1-wYA5#~i9N%zJqh<&&+zmyn(WD#vr*9!> zp;6&_PeyV#R44qYI(|xBqwRJIj9Zg&K?SZ{n5X07XNirTy??ulKWk3WCa%a2Z0fO) zaLi`2&NyU#t0!i}H=PjtevhJ8$O8l>I6S?)qX1)%Y;NqQPKiGXIhp3{LeAiNRfYh4=)(#y?5lK4JZNumd-ETBc%^@5uJz3pj_=SoqC;_7 zKj}tk+z|P9ufvKl1jfW)b~CG$3>glu8&MR~3-b>jkYY%KT+)l=bw-c12v3mu%q3^) z>YR3aSZg@Et^EiludcqX<5?ws&#QYNp^`|Yz_c5z`FO*TcY85+V7P=NCVOoWPwUk> zO4rcLw#pPYN_ay+(uVnxw`HbL$h;wZHh2&UpwmdPo^fFAnp;T(?|3uD!Pqs|Tn1<( zGoO}y)HurHNx|$YZ_iI4WG(?nk^6Gl8vbkM&Wu+5KX0eRJQ_vr`2+g~@?-M(?O_y| z#q50l*(yPdiYv?l9jd|oluX?~c0CliVEBe@HUu69YzPYkO3`!&Zg3pq5KBUY(Ryv~ zVEXp89^}}TSAZ&jyfy@xoDe*L4HiR9?`=(u5S~B~*d+Q%M9DbqV%ybEo1g5+m6BRVmG@#e-jy)=2{VpId^KShtk;5qCGN01paGtr0=@S@q z4R-QsM^qJY%CRXgk(Ypx3mst1bL(UUle>mE2h7=L@OcbK%T7frz-cgq#q&XBlgvJL z3@b!An9A{I4a>uL+QjtYvt)=N10K@y#T4|~3TXgh`Ob_?Qmn4mMU^&>7h;%!c(&fe z`JS>$?EL_BtsaD~!K40D>(p`EjEQk}{0`Ya%kONYO-}rIYUz=9GGKC;O8ZF(M8MDW_p{Zp>k~Ttb5<@)h$-+i0W}*VB)7@K?C(03 zQ)kCLA*m@NhB;qV^{amR51J|dn+oZ?(Y^b&{9rx=P*#$H>1FG_R8bE_4bKM}zd{Tm z%(>EZ%_?L8eSvb$JpyM*v_gq(XgfJ;khe<%9e{zM1Z@PT82K<&dTdyhI5hxwqwA5g zwm<<%_$yY*)8i%|DpBpS1z*MyaT|xA;YQ$y-WyF| zY&574lktC3Rp*%$K48x3ENI<%hTY!DF5mzM>u3!Ji9l|NQSq~W`%UOfS)*PJZw?l* zkoj^@m&hbuHzf}fSC(bkxxr~-vVM499;nN z7g-95x7XJcbX54&=loNFRH$NCNvr9`DlSgKJ2|p$#4;F^Y!cDvetU1uKa6JyjBpe`6K4c7mRYF|}F@#VzDuJ5{E zmtD91VK0y) zl@;;CeVZN=Wkap`a?3R-kUTtUCu_kDi*5R=ONUEkosWbTd*cuIizX_*x|1TxRaAYS zYOY0!)|IZX@yRlps|yqLX9VFgS8kbTDO09c zE!w<`>CWW+pZu3f1zXF@OiSGto7xi@YfA(mJM8bnhN;d$0g+UY`bDJRc*QasI}hG& ze zRaf!Pw^MsQ-&pU7HaRZu_}{hNqMnQBkX>3=MA*PGl7Pxf?{3Je@yBmQJyT9%TEJtH zXK7-d*vYBbRt5^S4dB~M8;)V<5V>xa_#29`+ch_3Kq040k~mgi1~#E9@?}QuPIrqj z>dGe!yN6*KLwml6N(-m?SGk;SY(EoO9rAtYXFpF|6#!~=hcIW_lcM_oa8^_2N}0>V zdnFR8$=U)wD($M9C|RE(C7NY?U;0eS4(1Y_SW} zH5mx`eB$Q3!IcCvdvFscr?0GPNMEQ6ys4sQd#C#~ANOGq(yB66niQz(0d^3Xi7wQl z-e12Xa3}I#n5n&k_88BPn0t|5*6ULB@Vg;$<%xv9T^7USx={iOzmjqU*xcYaFsa`Qu(!V0x1nWt zAFiGYiAP%Eem~dzFQ5>T{h6tEzznYA&SrQ_9X`2Pq_)2l~#tV zv^PeH%raw5gN_g9?9Vc}4Ei`6`$bg0+U&g9oB+O7ho2-{QYS7|b=QM{?8pK)p}X?< z^!U)2$RHyJD1C30@)dD-qx4g${<7r_wO5||(A9%ay3jn{GAx~Hthym4Tia}a^XsC$ znu!{ei$&T!+6Lk&u_vzQ+RV$sV5V|3Zd2x0#$;yaQe^$fik=H{t_{9!p$Y>;r!|5C2T#I=_$;zD#dTRC=2faII4LrM zt$Oe#v2uC*7oe!;DN)}26-rk@emNt>O@cCF;%pA#nWfPW&J30V#Wy4hPDThC9S&?0 z!A)0a+DLOuE2Nf-aEZsjI^&C%@6`ha%qr@wiYUBmB=-wV^DO!uGCQd1Z@vMQU$~GL5n2MN59y5@I3f8vAlKud$9FQk$D4 zV(lz2()ktF(2|rKq8agRGjh$o9#ynNX}V-T21G6HV@KngfQ>Unk36xy&AROpp)=TU z=ckF=+RVS$B5tgJ<~wZd(#pG{EgOv@^Hg5LtQ-m@!0IO`8sM;Zu4ZVR(jVzyu;tZ( zL_z@AFM+6Q*N*1L{wN={fkX3xCl*iUq?JjQnHbt?>au){beN0z2^=KQBbpg7G~;H2 z`e!|lxH?9@UlZe~ccwXBf+EN1D@p<#V{!*e_?;)w%~&Wmq;72RM0~ZnBX6gx?q`T# zw~i&z4p)Fq$3Z2S_`!#C%#3Bb~F=rT;iHD0lM#2 zIy*`q)nS@;s>E38e+d2a2lWG>Rh~TRR^Bafn$~|q*pv=a;9*frV45uJnWhz9# zGBE-MU@k*gPAhc4+Gwp7dO|9Jfm>nAuF#W`6rSf+nVvUx>ZK(L7KQUxw*uqtl4Hd# z`l4A8@_)O3HdXDsqJMqJJ)jii9O5f>(%77RT6xwwnp z-jD>hkXzr&&M0aTSDt~W*v(=icJ%iMbg<<2Dneld4*}hcm?_OUD0A#zG>;JGcOkXz zR@$NFHoqcn0wLnzwK;;Y0-(UK9pWTg8q1$!ASDXvds5jZzx?}mQO^pW?q+m`WW-V8KgJ9AlHT( zLYDyc2T+Cp(Hm#H$$8lz38=Z;O>}eAjncpXx=~Ts2HcRl9uLvkP)}(Q_t`^Xr_~Tg zQ9P&|RoU`+$o*sE@-kcrs{bmDLgt$-;V9zEWK4q7{`LB<(`O1+MLl0VF_YWd$WShL zccRpNxcxM_nIcpp<}_QUWU zy;}JmoSYX>Mr^AN%ewch-t{CR;Uvoh`xvFm$$xS%40hu|X9N1Jgw?a}DavV&4TL8n za(#2~&+si7%O+1c6b_y%%e8x}caKZ*THFm{Dgkv!eqSGM#u5;9WCq#Rlg%?El<8>E z5YHFi4$t{xC?Y5x{+=np_0|qibRsX-?iYc(vVnr=6Fb_=-#2GLRI31eR=+2i+G~z2 z8Pw+J#~XB$2KKn4Em(mFN~C$5{3kVf@R3+gp?yn};Sx*9Iff&nWpqN)AWJ)S-DC=k zsfnid+3j=mhr#rBX=$p60Hc8Lb*+-sNq&ASV}U#h9e~f+Jj;Av=^}e6BbGe8Z5~$$ z{ihV~a81^9sE;ryQ>55#|zZyP;QnA%kANfqo=Ch3MI;df;jM-b`DZg+r{JvHbw-vV0Mq&#( z``*B*gbYSJZwcDMui%<&k%NpMOi1#nkss4PQVcXs8ko#T$#8b+-u0TuX))YrR zQ~<|TqNBeRkXH{wWaF#Um^F+Lv&2JimuIIy3ggW=QmP7u-&hHm9e zkLdbi+cs;ko~Ptj1Iuc;SA{OIR1E3kh}PtvS{-HBFs|!$POMlK##RBqY#@^R7+vVZ zol&a#y=}-!$+9X84+kzQo|U}C-Lw-Q+#e4h+ex9-u5|#$%jwMN36f&>o|Rf89vO_P zk`Qd(9u}kDK7ki_{Eb=50)1Tp(H|M((BUd1v6s#<-EJ*#0a>vai4}Rzs)wDaus})K z+&v}dNSE=qeaE0kk_5nWhY`V|ik3F)qffh|(WfZTfHqXYq^J%e@$F9AuMg^fP7JX` z6N-Wt)c}cWHO!A31;yqamo5z6ZAi#D1SQ`r;vqfLZ%G;g_^{hUF$5T)o1*B^-&N@}>u6NmmnFoPO9vOYV@@QTLDS`F!IvV(A<9Y{- z#*Z3eU^d>85k53UeEX03r8dyIj3 zq^Yww2FEtbldCaRno|Z_g~9H?oS1dh-R91|jTgGQxG@72n>Y$U*a}ig`ZOY8e)fs>`CJ?(OVz zxHJ|Cl<7nKN*|2pi%3-M95k*$Xw&2Cel=I_C4Um4f{GLS6uZW_V?^jFdet4{DE~ap zFd+O15GN`=jp<*z$riW@sYcGtf2H`v%E`s5oK&N%QCJHT3-bcZBZ*JAS$A(S2I+a! z(7C6_VgA9B7{f0&O*GCvZ(F5hiGr(?MpA3} zR%rM%sOTouWmogBYc~HmGrBfu#%0caR*Hk z5jn9=n$nkVvR-c4pVEDL;Q+mKRNifXtL6Pyni|rPf%xLfV*HMJh2!qdF>;S#tgC9A z6(Io+g4IB~(so&njvknIXIRnkQQF(*wgN2(zcc0*#dxBs?z9J!UB%OvbZYKgn#a&x zBTTA!s62CXbu-ZAT?j`=A6&0s;~sk)G$$^rGY;AW1#%p=)(88@o_<^ zl(dl%)=K0OblN=f)Wuipvc``VDVt)Dhc*-id{@0!ebu+BQK^^9D-cJnTH0KV-txJV zb6?GVlTS`FxZ4r1IRHvvca~-lAND(*?8e7KKH9HYWghffb_^VlM0}RFfu<~6M?w3# zeHGWCNKQ=~x`>xJCt6vpypDJk97(iEVdQSOtWkN?aPbdB(YidIdW=f2t(Za6Al zZw!; z^(KQsjj#G&5c%pj9<}?@9I;7+?UcFVEL=ECqwCAl4b>!Y+oI(a+wJO$OVt`P`)2Lr zLRRuaNB_}i8XwOU8w@-Du@(CJlCeGN*V#(QjDReS#Pf0Fu8D<%Zt2}z{nve3ix(jZ zJA3Ml5=M}9aUDsC-fIScZ1MIMDny_o#w3bTD6fW0<(Un;m}a>k zZY;&~O_3GKe@4o9ZoyJN1Y7x^s@lRAq;EbKcd>;>Pp|NL5ZVA&KeZb+>f&n}FnY)z zH|4AQu3Lh&Ai#oy(~2eOE1J z9k&+{Uv|yqK}$|_MH*HwVzLzvm6Qp`c@EZPoTFkU!)emd)Y3+f6X0JVeI z3vI2y7Ov!40Ce;rI7V^BYWGW_tN*Etnm>31xlItQo(hznGh0o@uSGzqQculSIfPv1 zefy#AZ_;8$y4*$|09keC*zd4^S3oJ1#e;nNOnoY}9J})2UEPR^bchKKK(9&-HbymX z9BuU~>UM=emdq}|pOfs+0}BSO5ykxyiNG<5NcR8d{+gu0dwu1c(~bDslyilkUWqv7 zp5w2z@9kCr_3)aU#}~TV>5zzacm9{+K{lQ4u|*mK^Rqnn@+nZ%;Mqi0F1%UfbwoiZ zqyM{Nw~3##Rs_9{4Cc<*K=D$m9na+7Q?A-U2P1;9c-`pF%y(o)Bi_`_Or1W+-Z5^O z+k$}Ix!^8cJ@EJ?dVOU{hjho+PutQF+wz6 zRGHd=K?nr-NCToNX7*W3e2Lxn5`*MNJH@nWsxdQ$Ca?UKI~^EbCL>QOT>}JpMCn=r zA=qCYO6YS#i%cGc3tUu(0SHXgv_M~a#p1n?_He_ zA%I%!a^7Uq%T%n53QRCgSde?Z_u%*pa4tw%1Yke2(R!UVF{rw+=F_mSIV-7U=XHsn z@Hx!j5~)qkMrLzgD-%M~ffGXv_W?BRhb6bWNbRqWT@zP!&Aq^+bI|t-o|D)kn?ZZy zMVSo#a<@^TU6Bqpk2Y0G?-Z?-bgR|eKj=S3o4q|%=_%n~wk8!5O7+cKSNg)NmV zZLRe{MyN4N!D$BF*-zcv*)WMlv?2x)OWNntn0F>==AfmrRNaQ>M~(wjNFYjABaE-Yy*vo1sXr=|%i{;Cu(WifB)dbQTKHfyzr zA9R#<#^HZr>ux$if-qyI%<<`vkP$K4-&rczl#ina&AY!f^+U&Tn3r%nRW zN`f^&J^4juZ~5F0>iqHQ)7GbBwoDEh0;?{r{Cr$X=(LSFJop<9N3AY|&M`=S`{=%P z^43X;&9K|oC18lgJAYdl5pGwnYIs`JiN(1mwG|t4dPU|*5!46uw zqdkz1RpP-2e1-5gdFAHt4G!WCvhT33P1^euKT(uC$7Yh!XS8rex%gK8Ka^c_ahTnrLuzC@!vb{e~Gp zU*-S{IhsPs4yXfpdxXO$;!fHP%Mi_wj#2=e@-?T3cUTC1$wD~_1Y|MyD?8Bt*@8YTwl%bAwA{be&X*3FE7 zIV}~OHrk6r8d7Jto~x|OpR6|dxK`A3xeZ+dx6oWNZ`R6?)BR9B6d|W3&9ZQfJX}DP z0yWRRu`1fxUd6W!NVz(*rup_DY1mjnmQc9mqG*Bt51W^ArDt<23x$YboEY*~`OCt-eX26%H9^~Klo9ny zIcHWU*Bt-#3bM|^lDb6m2F5)}ln3kA|8^fPYc!FLNinI>B^zeCsVogsgbHD}Iy*UABLaB>_vHch4h7e^F)q-e(+md&Z%>UR()3o%Kt6GGAFm z6Fikv>17<@<2~{f5s)hfi+H)?>N)Fx>m-qD=gbH}ry6Fgg`n6O%fy}#?vBvQ!Zjl!|r0xMSDUgA0?h5z;X(X@fK3u3_A~rv3%^R<`dnu z23sKkCyUi>2?AM0junl5B?Nh4g7e3ZhEQ)tM`ali^ST;7H)H=KO3Bxa8A!pyGM1FwA+RVbK8?G6L4&j?C);|YQ@4Tc2y$Xt zU5E5z6bIP$nk053MBgs1{S|~xE35_3-UHL56Lt8z@I(1$BncMNPg23E)jp#F*(%#} zAyCyHDk75drdS5mC`nT3!X8p%1tl)@a_5J8u|$WJK!X(IHrxrm?ObfImT3R&Xtl2V z5O9!D;OhBXgc_8F*eDMNT6B0(b zY;@qq+jDJw+;m&)kqNA~4Zl09jbE|fj-?_>#WmvUmizH~X9=6|u6}1i`n{s?K#s-~ zD;ZeLDjUf9)hm`zRH|b>uD-nOVAEsvU2UH_#Oi=oW>K%$p{sc&-Jgb}b8zgPw#(FN zx2bI}0D1#dS>sEHqq;;AeDfS>W@?5KlebN%FoQimMK&7oMfd6W)C=pA(dfL7f^0>U ziI}Lg36Uq&;4=WWE|&+~q?N6Am>AH5L6le4*PQphtbs#QY=(u0mJ4}^GHZha{Y+az zv-Rr328LSQMZW5Jo~n{-RD~?L^5xfAev-SMQ9*A-<*663P`adKew#?{D3atm7JK9K zJovUJX7s3Z`T=zJ9JHQucCe+Ro-Q$mH8@=D#V&P3jALi+eK;%L1T4F>mWw$YDFiFL z$w0Ux@fkcDq$v?G@!PSBPQ*NMT%)~}U`Y>>N%G_cx?39ivvs*n+Mxfv4}M$L z2^zgWc4wD(up8g?Rw93)3sI`h@XakwRMn1`G_@YP_xYwZ*S z8r+2Ya$%5dJ>^UbtCZ^$6|zvp%NR~Eo@S*?EUPXRBgRe-$AyFq!fX6yc+13cpu3&s z&kuadAc?Z{pt2iTc2yP`F^G#dgu8E}GCxtILON1icpLDZ;bYz0*REz->mrIwf&0Ku zw8t5(v(#c>ie?8(f;{bT1$Q`7%OF&;I-H?(K=;k5ewHJ^9{jCLO69&8w})p zG4lm0P1n`x9@=NOPp@!2zrvK$mq*RBw&8Qbju`^0(;+wX1~&}MmsC{)=ugxaLjb)n z>d$^vQ9?Dm?V87RoBu`R_y30VD~kPP3LHOrD2<8IdQBs}Npt?I&ut1>Nwcpc zFkF9VP}EYOaI5H*=oe6*SD5hZlcpkC z=|KY^C$p0zjgK+fF`SAOU*OF$Q=D<@eLy{*_6>`5jr7Q3SC4uNBQj+($9Xo)u#C~3 zGFyV5SXQWQ%=1R`^bz}Lc1s@x*-VY1nP!Js8xC1%R^~*SAiEy&@?Rr5>f!4wxa?C| zS8F!@l7r#qCnw)qh#k5j3hNpUMnF>8!F!#iqK*9*YeV^131Q_Uu(o`mnd$jHy4kd&9fO+DlYRl=`nwT|-K$MCVosue#Pi z(_YO%4JA~mlvo&KY|5uw*q&4Hx6r+B02=Vin?MG$SvM7PpT`P5_c=Ge&hp!5ukv38 zvDD-pBnF2PKRG0|I@U+7C^PTLeb@RRl-xv=pCdI@!fP>i zO&oG|*y2NxNA7g8Xr736T_NL^)vL>bV+4S0-tkb~2w}SJX}ZV>2~2qf9IAJtAsWj5 zKoyRQD11LxUmF#vukUOWZaB||iC6A1rPD*7B{bxF?;ZLKwNHGNQS)>LAkO%_WY+|H zS5!gUj9vJZK-B^(^z)RYZjkcn5}LBx$rK*98%>DL#SWv{WeBB@hRO?_qWEU9IJWu7 z@3F;oot0&RxYapa;pY?j>C-rJ)BcO-4ZZJ~Rp)4Wduq(y(iia>J1xt6ol%=z4QIN=ev+4w51K`%)q_F7WgQi>__f5L zt8F;#Zh{rp81?D)eYuKy3Sr}*2X~+0k<{t9bHR|#o(*%nMgCHxvbwfV+Wo#K?v;H} zLl8;P%zH_BCXqnY=(o5_fF@bKey|euq#{c=cmjcw!QZeIRS+qK6XAQ_!6=Ax-*5t) z;l%M1qY+ix-u*(co@%igu>?)b@qG<3#Dv#^iKqjtX4It0Ug1aj(&)itshQiIK`5y)adJL49u__r*mdK=Sap5v)KMz|_ zH*4&pBaOIW8kEQyvN4c3CKohHIDeB-&&A_F1{O=b3h>|9qu@Ie$ua4O zLl*q!qS@g1n#Zu`%IuO!Ooa^(VSrTCf)~ioFCog_L5Nw{C{YJ-bo{^Zncw0t{ zI$U>UBuqzT5`L>2?-31Dx5IJByD-3=_6@Uj0rj%XYoD|n9GTEiFeN99{Wx_NE%5{? z>3wh?`*r7D-P~WZsOh`d2Qv7MwF~mA1HQa8!gDoGHEdfpO`Ls?-$pOGR?1s&O8g&C z%t&x1o)qKxA&cBDWdd_TQ7unX^GI}h$-oVWw9zAyEw5BNqtQ!6^W?}!kM}%a8h;WW$B`B$mK^^$?PYW3`pe| zGnl7cF{@xwAg9hpTi})6`F0e>$G?OG_cyV+x37dhEt?xPh~*_XX#TwwkftX5i!uO{ zd?u6#fNB_F?7JnEF0Yt}gS;(Crt0t}y)8T1?>nEJQZ*HM9z)TdmuU zN3k>0W)<72i-~`@7@%D|;|4M>vw6#+L-Z_?4h))!Yrx&z_nYo>D+2t@KMeF`_B-b? zPj*@zW#p(SuhZvW#z_H{zbj3EWo#G61OBU9&@NnUfE0SX>tWfXNzE-}gYXcl)|%kr za$3Q{U%J>6vq*|V;MEAeYTK3dpNlyNcU~F*c84g*5>~adf3mJD*?*)FI5|d-pT9jB&93PjUl*T_ z*n3}vCy(vgQ_wj0F8$Hr}$goHVbFA zg#gT==+gI~31!<8go)m{7PHB2vlA)HX=D_pmtluSk)#K3o5Qoe3MZU3e`cf%J)1EA zbkJzDB1wc=6pEcZw)3^C-^Z5(M&I9b1LOiHj6?9lEan5A!7TSWBSK2ez%PP|LrimfX3Q{>#48z4zIap36KSn?HAWeF{-nl{Sg(4UI@J7Ni0gu2mdSczOB?j~za zKJS9sIcYbWkjHo6r;TvXFzzkYI4BhNX9xN7e=p>1xlxd$?PxhUX$YC#KRFAiB>hC{ z$LCvE{Qe+{Huy%>%)D(4)fVKa(@e?8f7PGO{Hey>g}Axn1&*I-a*Hwo#2b0nuM!nD zO{7<_jWc|IvjsYA#GT0M+UUid)A^F8XNvM z-nR_hAg>;ITd_MDFKOe2G43CW#t0j+#Zf0@0V?+WoFu;R>?ltp`|wP`Ta)lL()N8> zf@u62L|G4kHgj|7BN-Hef8NIB zoC!EVlw?@_+}fn^{b%V^R_YG9ph%DhwAFo z)XQlxn$zX(NX8CmBgYJU*t;j=(A)g@ie97+H4s1OaYkLMKO)3}37%`uMRb}Yg5{0E zI{^FipSG(QT%m8M>C!%Aj5PAJ-3+wD({3r)tDo0gR6bM-m*Z`|ZAzAdn2is4o#d(4 zpnrZ0&jbSdPUT6*#UriaOh>sTJgvT4aGNMFSg`cA!A*^Cn zoXOx?AxS5>j;Ucy`8(B31TzWx_>T3%I;|D6@+`BeGL}D1-%@OEPm98^2$bmNdTH;9 zbB1OG0NYeD8Y6#Gg_~q00dt+=iTrm^LvoX`3eFR-CrHy;Ai~+Riy+Fx)Qimr#o@cY#(Z=TX37*yd1D5H6JsAtqQ?nr5Rt)^SJt+%bi4=z7slfh z)IKe~+3iw>pcT12Adh18svGsN)Z-s5Px8PY)S{7|PYmg;7?LB9-kDYQf?y=fiW5Zd z{VzEvpj7X^k!l(Xu2|mx335$O0(0-JGYmh}(7hu<9#!?=3SozULC5G@y;XW>e-gVM zvn0AQCozubQuC6e66Bbm`=Q0(-C>8&yW}oxIRYeB6tMoXupZ5SVAB=k7IpVwHG7Sa zx9aUoF4Vk={^`6fKgzX5? zoE~X>>Bba%!YjLVh{x77LyTR1vMijetK73K2v~qTUX15J7E`VQ!+eUoqw1Ij$y-d6 z4BPphC@ybU-vgUoyzd|1MY1^&4~wi>&WGonaWp1k zJLy}BJ2tAxnT{|-6|5Amw`z@D9`0;VS#he#%=UyJ@LA$UM#X!>ZB5X-X0l|jw_ptU zZv+8gYL$v@lp(j(sG__X-64O8ebU>Gn957k*v>6^ZEBo|C4}%!_k=7nFu;#Zi$6?( zZfo#Igws~CfnNejoUC@-qJP!8{sZ2Z=98fT5<#o|>80z8AJ%t)NOBYQI+rTI9^!~#TDq5;e3GGWfiMWXp)ce4s33zJ&8 zMEEeNMzNp+*|L5$iJsSagbkHDN6HJ807-Q{Ht`NRwe2yGd5$lct%46rnu?M6JTCtY zkB~s4p#6dq8oP&yckn$33nU*<`8Xl@^@k~qMSp{fwfa)y5?)}uhRO;)Bb@sa*!xWD zrUQ%eLN>B#mBqT)J>j6318^ZV?e^maxBvZT?%0+9KV0I%fEicY? zgg$#v`47nY`^5E?XA1~OHc#35IlRS-i2g*i+Wxwj<4Rg6EU~_MNC|+L_iQF>Y<8fn zd$DBiWwSXsy{yEt*>~wTjFkWNjD;aT-53JHcUkbz_)ejH9of>jTvP=wQxCx;xjk71 zx*3$aC`}dZte74+pzIoWANGK8yPmLAMmyeXO$sl%H^#B?;;WgGaOx#v3>^T(h!g6b ze(BcT=fcikXWEit;?UgT6Xx;})>AU+V>L2cgE#CoAml7t#7zAis{S|MkBi+j4`AoK zhaoH(y4U-{*y;c|B^$dIv+6G?{5X%Nzo`JGR3RQTfGr#SS)+SERNJn4fvmLjFF=0< zSf=68%ISk#uoCDh9`?Xxsbz!Q(Pix3=WmOSbm$Obm@8v-b&L|65^Q%3nn#owFnc0| z2L_qB4d{1#NAA3!Mj!{>9}mC(V6pX_~wFZBYkFYytEc`Gj}l+oV!V7Zox1<%u? z39d(vF=tiNfTU^9+#IqQr!aA?SZmvXuwXb>s0EwgnT{6>-fy7JyCKXV)>A!l*Krvz z>`Z4mRfD2;Qsl< z`kr&1rGxZBkN_W5`x929Rs^{H3ZkKusxhp^xYLHUaM11e$G{uL4~lTlAM@OoF|M*C zW%@N}E=&Q|Zag+!MY~$Fmnnf39j`DhWL@f2NRuHOS$3FDCLyh_x-6xIP&@KCr3TcJ zD?nYP4f!#jOH-=PDWf6UQs&Y}x{aW7$dGKLFOKRA)dmk-9|o@3NEO8F9B8z!ir=BJy@vV(2_Lv2Gm9?`SBYeUtOb3k}W6t<{@A&p<=6B67_;b5LYTz!cVAHV!M5L6v?>@6Oqh~MRZ-SbI%zY2xn7L&I|$8{guJ${_N{ zHY5&>ng-W@8_PVa4!>TNwyCIK?z45@-Yxv2zpQ;umdBYL?er< zEoFeEW3q2#dcSME@kJ4&g}jH0V+Y6VYs0ho(ES*bagU*;%J{u6+z$p*nJ64P8{cfs zH+7vrYum${K`EI}UIW-1bpU6V9ZJ|VjFK*6O&QW2gS>ZQP^fcoj0+bU;Pz(J&TeJ$cA&*KEA?B4<*hTt~{&BUb z;gl@BglXw%om=E98R#*&n9^uUb^Y!uILwdJu_e1I-QPe`{1*9}!bjCr<-d5;s`!nL zj&n@;7lXREt{g!B=Eyy3tvB(s<~)vT1@f46VOEY8{ghB-x_J1W$0D(mVzFq^p@3N? zbfEJ^h_p-aIi2_5@7y72f@*CeT;;&L{X#zrkhXogvFE*fZxf{V zb07znv}_5`s3Lk^%J5}9Et4!H&ecn3i$MDw{P_CQg&PC@nTNe$>GYB2JHTlOis z{+_bKzYVZcsX-GE1sY`a25+sJ*_~M)W?KU=o6nd1%l6$x7j8a)s^;@X1d(YQ3UBEd zoBU}G-KCp%fgY6Ne1lgPn(ER6zMoDH`d(@R9j9xYK=*$c^=%~z{@p0$@fCw9U+PK| z3b$3+4?Zi9#6%-n`T<5Pw`dXQG<%yJuB%EPdg92@LW5vFE)8qUD!sTx5N8gXR+2dz zF>y5M*@{J8ZI_5d1<-j-%A{xE%-sEF93eQ0m>(a~@%8VWR2u)<&*QoHhd>yesGUOQ z>-T0Bexi|^mYL0D&qBf-U&}d|HY9t=iwG|q-PKP%vL6j_&7CL~+1zn1QK_rAM!`2+ zSG7@cl3&;I6KINoCjq_F!As;u+>7WnKx2aIoNB3vmc^v1RV1VIjc+S8{mJlBoBk?` zoWR(b`((9-!X!{owEq1-3?2Uwd&eZeZSsk6(Z$srWJTf83rLuA(Z3N}1q2a9*Z@KW zRP#$14Y4dC7p06mr<+z{@VX4enS70m(3ts=JdFf9^ap5GCH~4F^BBjjAx-p{c9%=# zQ$?NC__&M!AT(DfK8hf1*ywV}BZU76kEG{fuW_`C(W*(XlmqatTtN^|K{MmC87Gb} z*2{R-%|Oy7)p#>MIhOGKI?S-kjG6157KdLJ@`~jnFa%n_Ovls~z{MOcH`^7>2FV?E zsil=!_qlE-{!J)(w#4B`Ez#G^Mg3l@l;jWjI?Md%ujl=idx0i7O5cGA$J!$@W4E7R2`gIOyAZu9c?zeEq?T0DK%KoTZa=tN+wwR+2vqooo zBN1o$iDt5Mht!ADl|&&!k3%^zN=@tH_rtU46*e3M0yh)%r-Q(-+8=LZ>~p(9dloH0 zPaMzI?j+gNyh7Izs)5J+jY7hj9YZp3!j8hp5@gVRlebgfG?PC9P=i%~u`f<@(4?}( z_HQhX2V zIih!c?dA>$C=R3fbz}e=x7|9v~j2BrUhXxD!hm=-3V5^-sd-mb`joJvF!TrdSNt-CiM(n zPYL=$r|wacd>SA}|6_DGL2O=Pq*hXH&ajmNs-KG_vXkFrc`!7yKA9~9MVRixb7}lof*(j$qp1E0Qr)juyEA1SJ(~bSZab4pDIM=FScY>U=B}*wu#JO z=;j3IkKfc&o<^~mv~+Q2vOrplewk=HbXyL zjG6y5Xrb1`%$i~Ul<9qxFG61^aKdZq$b~Fi#u1V(``p|;RA9@@PrEa_K?(%mq?tpk zN&x>q0KmN;HXdj^?;*bTo@J(u3D!;cq@SBplb`u_Rzz?+Kwg0?GqWUX@P1BLj36T*fcXf%p24ocJ?eN2?eVHac2fRm;V zi5CIQe59IJPd>#&{-pu*7*q`3w6;GI2GT}j0ix%>X#U21+Tv^kpxhtG5XfAZYb*;I z8?#<_hlHosJZAqwU?ONz?%Y|0_MdiU*}b0QJ*!k0+5g?9f^wl=^86Yd&+IQ`W7rTL z&eVL;EZ^oFCjF&v^xj{1-9;tGcl{wwKPSNo#L+UHWW$lfqR&PWvi85YxftG}S+0LD(R1#hg6>9e(N-+141%3uP0-s%5SmCn^C_>h;f00wx*3bbz+t zCcrlV*TTU)(BK2dg@uOx6Zb3&J=RppI7xmNMBJ=W(olOU+qd2A98|)eEC*oPaljjc zaFry*mu$&>?}bmc$;Ha{;U#c+^qzEB?h#5x)$dp58{3Vw>G|=Vrz;7c17k}atZ<&j zWg#tgpD|t>mL<-g;s&!!9{>Y;$9PgN<5Zk^p_M&pMC@I3JezNVHOf4YXcR517L!WA zM`3nSm_VnAl6B+yi7DC0NgKjJ7-{?d&j5#nTMqf>@vLW+C<_K2mDn37dS!pRczn-s z1r(?SbG0?#>11Eme6ywzKuq9Mt5Nj_?oy8cW%XGlEU@ld+?5N!tVyTEV@3^rX$F26 z0lh?zXeW=?F4&ZZrJ+4t4RzH^vuDZBV<+C_hnNm~?*Ic_05QY)Vx<2gAyE{3 z`G7jKeEXbw6SB|hz(R=CS&qoi;Nwh&q7fe|sTrc3@oEN0=h`}>A)KgErA9%O5a?Dr z2Jp&PXEEM%P^<}E87^}XzB18tu@3o$<5G2%x1+&HHsMvfd^e|AVvk`jTu82@doGTI zwJ@KodWNYi35q$W#Ip$$E8uxvK!qsfw0?nWzRENOCjM>A{Vv$|W|*RBhhGd#W}Q}Y z3+fvs4nm9nZvbv2Qau~SU3e{D&8+XQuWlCN?{*Lact~DY5SG#UoG0!)!#9P(;Q}Pf z?)>-~xbLMuZf7gpn3F*TgQ}E2Ii%T89t9D|D+>hkKL_husRJ5!xTjbJy|3Bb)aOgo z(G#C3L>t|geFfaRY~z{Qmm!4E+rd_wn35@sN?@f~3vBr6)2 z$E>II)Wb>O!BfbIV4#s8pg(`z4kOxExbGgkiVZIDQ7HFzs(b&uP+6eN+?eCG;o<-r z+Rf3Q`(wRFpJo8yRJzSW%AfqL>umpU>U`MW&{b|)q%GffMU8+p-LRr=pHf=UcRx#j zUpGg&T+^>4!cGj{?%hZHxNQFW!n|pT{r4bMI_Xl@Q0RiKz!mSd>W{y5i){UYqY=)s z;})s~r?C;bd1$-;y+9PH(89y#Oyl*0k&;?YAZXb5T*+z<8iB*SQ!NyDPA1ic9BgS- zBxqwb8}pWUwX-Jga6+UgIFIYE3$c1z##Wv+0^HhOl8|ChAW}`AbdMx#7Ohr6s;bfb zU{9R0v)DPHezn&w?>+64r!6SegMS0(zOx^wBE-bJaOq%VyC_xNUAaB7>y`BS=_cJG zA5=MADiYOD;`bYOJ?#>wLK*f#*LK{9@wZTMY@AZa&aBrzG07nu@1Jl(=2*~_sSORpH8tDc z?BLyBboe?WivfZxj_3Sgj+CgUz?pu$Ij7`>#G)cZTPIvbWi*nihxNxLa_V5^LaSs= zJV8NgkyugxQ|Y6+2zfUO=vHwt&5W8*&$BP1Pt;$x0>G{oB5U7msk1~DP%`^rwHLHg z>PLk=nwr)})o^t|k>S#hNtJ@0`qdw9jZAbZ7-Qp*8?N?rq2FhcM*nfipHJLUGS_pE zYdV+lb12J6Z3AJ4M*U%>>1&T0)TshF75=SDJ8cp0abi(ZW>vxxfZJ4iA96@rb=^Rl zY6P;qc}=F{%)y@%WA%y|q{I&YJj&`;3+51|ITkt+*Crd(8^5TTGfXV?X4QcwvzZ+W z#r0>=U;Ey+ksg+h2gmq8&*y8|vbHP{?(_-o!0GHoYD)%nbmsmdaAHg4duPymVfvcF ziTKW(T)8{=gb3B1k83vv6zHO6#IwEdwHgBKu25KJt*FCxb#S(WBI>DI91=8R(5ul^f`-wu=JEY z`ITYm1-Y$t1e00{E2fm2VVDCg|^%y>o$@|I{&LV?B@964gmZ zPh=q+qm<@M0hbUZC%7tp(63YjBqR>7BTKJpx{-eBPl9-&ttduj=G)MI^5L{xGIrDU zEtYhWV6gSWGh4~;ty~l*7pEEZxq9|Zkal)gF#Hg?ijRx#jwC?vY<{+uKkOIUZEx-^ zK^--T|2YbcqB3eEAWRmE!vRI%wedPs|6$K$R8Su?>(u{_UPp-CCqWQI zyh2xfS`L%ZHYYC_=F`4uZGMmsD_d@SH5Np0p2@-WA>vT=2!uWuZj(FQ^*(vCsYf9>yIZzLhYNL)|P6Xh)sexm= z*{StzBTqv>?P))F!Y$?dbx8U|5$saz^7_Ft-j>~%B+ot~e0(&TI$SGUs(L^&uCtd( z{OLpY{3$M;6NVJ#-qr=(7^vWtn#%}kn55YXXL_ z_P`H>B=J-D2wVJI8Y(9#b{5r%1Wse}gpB*Xko(D0>%xfi7QL&o4vOdO0vJ!{MwTKv zAv=;HOrfydhAixz{wO_*9+IA(hpC^=Qn1!c-y>x}(oQ2;z*Fs~AiAM7xIcd;2d!V& zapCak^qN4G*EHHsZGN`)j2Y1-?`RCjpK8mzPyd|q!@#}^CrxJa51PQ3>+&`apIH#4 zmJ#1U+327YD;CTwiXaY;AQqb8x`C#v&Q^; zUQ|wC?Gnm`cu`SdLqPkV5m&(7K#wV+Y!5dp%NQP9yw!ff6Dj5LQl4QkBdXt1c+t!LdMW@bg-=(6uRo3rpd$mydo~*_@;2Sv1D5kZ8*|L=*vh z@|iFPW>QimNNrGbSuwaLPB%H~ABga!n6xsyo_^N_xiz#q!ewM;K+V@^tNs6T|j{Xsy-(vw!vFLH=d>O*LDf8vZk= z4kTU;bM=c7w~ty>-~MqNMRGokOMzW2m2%KC*sWBmUV1w*7LL-+ZOo9=6%4G{8K?X0 z#c5Hc*LO9<-#q}PrYhn0PQ58<646Yk@_Rq*x4BtN;#TG2(K?nkq;f=oNtdge8FSak zP`y<}+?POOI3?o}fRiLVbL9y7D<{$B`Q)x^@{k@~{2HKv$WkuFvfH{aROlX3vHCt` zmof>R8GxfST{45#RR)hO2NT4IB_AN&BlWA`S;=+!M;n2hVWX5cya|kd7pO(*t15(= zlTRSA8Bjwhr65|Aav9B|=eG4}bqj!Eb9b+?&*b5S@s{k+XOmxvq$)BN?tV)@IcdXoZz zA^A_QOBX(%&6f#I=y?nW361a_IVXW{cAMkov#`M z&+z{5EX_dn)1&$u+i00L@Ugn-wBqwJq_*x;hS`xK)rb9H@fOq$_P%P}ZSofTqIp1s#Qag?g_SE%OYw*B9p42?ub|_`^A&@-1o*yCLlmL1CV~ zpXXuFCxEE>UoJssAodxRL_6!fl|ur2CzOwaivS@mZLL5;ZNvsWc{!AbJjy4R)Jn(T z7%+bp0Uhz^$Xxo9GzdDD_I=SdO^e*pZ`(BwC->Qp#NN4?A>KBW?}vAR+&Zevps5AP z3A2hm+>#yCT|jUuA}BQlGQ+Ag9M`QuHFck7+&|TEq~558bQOenz6SRJc~*Pz(V}R= zy6DlYOm9wzw+tOd285yf@1u?Bo5F@eeYC zW(SbuPs)2*t{~P#Iyn15g*K`?cyBNNb*^FX2Uy1E-@_)DEWLcL{T7)4fcc zN2^Q6==_yCed-pjc98I1h8e~p5$zp=_9M(h*s*(fO$rc;A- z2J>vU3DbjD1+NyuU00Y^5`0{@Sn);>&{{cM>ydkxb-8&ra@|~v+4$Tg5Pgbl`ouB+ zI4Q!H4paN7ziI%ncHxl37M2)u4oDGwMgMELav7Q>#?+xi@yC9rkUd0^R*qHsuf>fn z2F?NNtnty7@=cchoTT8k&5V2T8&W8m4W>7owpBr7IG$? zu}eR&txB1#~@a*q7k*gM|4_-Y~benOq zG$;z=%H6UNRxcj~&cSjU*d5 zj5;~I*4R}oo+ew8dhOjI5P-O`7Z6%PCK>&XrcneUZVxq`L~{!{hA66uD6gNlgiNo) z%h=KCq4Ks=X|+F+Y`gd^e{qic9qG1F11tP#FlXl9vb_CjU*5t&Iy|SMyErxO{pK|m zYonHhtkhv9^7PcsrJ;$0X?~CxyJ;o#&ZmPeSQU87i{TsJa|q;^BL+LiN=Xon5M(@1 z?lhs{;YNUU8lDzsK6W=7@&&p2`F#iy=Uws$@^C$`~-#N9@6Q$GH?3NH{V#l zdrnLbcc~81dP7_L9fx+B!MqY`^&C6BiXVSr?+vFPU_|K3wa{W=8L;GPO8O!MfRzw4 zhX|@}4%GdgCwgPwm_*}a1Iqr>^JM$h%O{1PZ@X1;Gt+;O3z>}26@61MU7*9|DZV!n zgQ<%GjvxDhUS2#1@j@10P8IftHU+G;=yUw3nKX{~U%2k)9|B6~VGZ=0r1D45?H0vX zDL1S8!EWuxt#9rTaOnQ`2oAYI8LtPJ_E1 z@|1TGt$j<(;4&X^o6%kpR7soTvCP0sS^*;&MPL(C8~SjUfcQol)d8u4)T0H9;;`(b zcCu0cu;RjMiRofKW2E%JRcZ~UF@YEPT!{SJ!ErhlAij@0+T8r4S*bp1sB|eS*TuoaDRjxxLkSR&Frp+Dp zKYIvbMYY71AOFF^FtXMk0kY5chwXZU>E$>Y${(?_7Ha?|Lc>V5zYf>$@O&SkEPDOW z1-^`-$3D81OWm0c6X|6R;ThR zL~n`RAwq&i{E+muvLBl$>KQg;HK62dRmjUfaNSqkEckd~>&aq$cdD*VyW|fI!~9A3 z-ae39R2y0ejGT%asxxU4k)0HVdhQM z`V`ial3d*$+sHLmCjgrZq*w4wPiAF2VHgRFx^Ni+Gkc8M-gw-;@q91wgVMiKypM-HxMwyqFofv0_F^ zgzl@=KazM0_ry^-n)%JeWS#8BR01HhYtPgqSK}o+)+%p2%j5sfcWl(5y1~6N=!Hso zH+z2F{gQjXeRUokPBwYh5C%H_iwNV?MXm_wuNOgO7dIXX9*}R6>6^+W@|RZsT<3RB zIqmCeT1JIcz!`+aJ@2Vs9O$V5!iH#DBEG7JX#PD@*%zm+YP%e^z;ETW5~`QP)ERqy=D)VnABY&}%#>p}75~A1Rg;zlxN_q| zP^0Y{A^zPj$jmHh^1`q_%<8lX_&AtqTr(k`A;gY61T(qsfQP2_S~{MppFiR^*j%|` zrl#CEY7$*REowcGwiVmGk5tm{YA$t#6kQ^rzWF$@LwaAOm0}5NZIJwyG1ha$fUXU5_S=PI>L_PXELBz=i zVg)C~H7_mL9AZ3Efg$VYNR#EVT`!&Vkh+pP69TFC+^fbG<*;lH9-u}x@2%b)x0})Fe|;{5p^&fuq10-B4m#4{C@yav=i$(wlWyK1Y&J2k z>=GacwMu!|$U-=ZG1FB>E7l#hL@oSMssxABi^t|8I2|_d58mykfFkKMI(V;Jg;SlUby~1@xJ2jPYg+DZE?iy8gME9+oC_M;v!?27pddf>_!M!*igh9kLg~3Qt^ zXp0lkF#fzXx&B}9L=_|G&>b448}Ex8$}l%>r5d#8`>R9XE%2nGHridD8YhBI`8m7h zoYmq(0?_@$49}Oqeq^6iJI+E{`{87qDT<#jY{j>_#n7Sp#Ghe?lNc{ZE5oZI&!(y(t^fJ0{ z1S?x7;@KEAtpkit9&Vo)k+RS6Ql0jB{y-Mv;wpuNPZgjFh$_uo;WcYOidlV)aF40Y z$)~M}>w%;Gx$Gm^i6Rk8<0V8)+s2|&6ouTfja5=ssuVRYNziu|_rmx+)m~nrf!1xL z;vuxvR1Gfx6Tk8Yx9+kx^?9M+IS?`hgYAsj|Q~w$62IOG_K}f zohGus4HTP8NOMwj(8#CI?Lf^Z z&b+45!2+%Wj%yM(RP2bERqohWkSstKR$u`H?n7!pa;F@z$JO7z3-VcO&xSzhE++6u zt^J|nXHiV*Ep=lq!!>JCf%5mwr^`SF`u{7n8ao;gmPqE1K~IwN?_6gFQb_lFgju3@ zKht_w>CX(ZjCY_}+=G0*zg~#0F18ngVkuN@;VQu@T-o*NJ11k`WG0MsXCLzhPrggc z%{V|GTHFI&1MS|3s^#Km*7*KPpk}(olX*d=A%VM=ISR@4Z~0)cHl1EL45W#r2etXl zkXgVHm)PLf?1vj5u%@v<=FS=fVrW{3Ty)j(apd#|+IsrS{ZTHPc$uoVrRb4!+)Isk zEsR5dxemQDN2nhQh7W|BwIcE8U090vW^Ta9t?u4gDua;)PYsl``WH@GSdwT%>N(&H zU{}ULXozlCkSGqTlcv>Hq?tMQl641kO74+l_l7(#pM)b|ro)g$*QYB?SWy-#Vgn__ z-zpqu1w75+K&{_+Gs!lf@lHL7O1U9&C_Jl%1_4Wuqf zxS*yf?6VYyY!0Z>OkoN3EvZ?f{Nfz}(!@d9c5dU5SGEDTk!p9B@$*b+G*PI8ic&ZS zez;mI-Ib)tINOD70>;(6t0Eh%19jtp;A*Zs4btW^~pT@)SlwM{5 zC5uv9I9~j`XWDiw)CIgJmN+xzNLSfpTd~D0QRAR$T^}W_PY;%TLR@8~l65#4K?s5c zOlh{6H?l)X!=<;FYWkFZ!A9|nT7SZ94pnLcIuePqb!eyZUp`+>wh)!hL#!U=j zh;AX%8ge_-`Bb5VrX}VKMp#1le8~N|qh|jkXOSl%QrDGz>pQgmc0^0wWQ1dmoea8i8Tc=SXC64CP z1C;q6l*3p+3~IT*#lR_&TWu%wtNQ{$33d_HMnx}Oi;%UGRM%QaoRXvIADpqrVu9Ey zPyFMW5H0*cOzzyMX8>bei~QjlOv?D2;N;2?U>F}9cT!HJYXq!z?|rLL>r%wz<94kM z4z3P-hi7s`Ja!2pO!U5+&`VGSln-tFm-KdU8~8@&qlv)d*d)Y7U&4sCt}oJk4sqYV z^jM&K)pmYk%_?Zrw2RLwDbIim39(UD8YS@k0KmwB%1c8)(uzBvo6gn}6y(voxFAV# zaZbM-TP_W36U@e|c+;GMQ4Ym=_?NcOHe!r6S)^{+;I));3}MZcT|52!*IoM9pz#{H zSrBGEhz_P|%%V!oe7U{}B)lXtJAUHQp2Y2=5iHDT`{l;$6zQfeMT#B@bn!5-aJMyj z{$T6u^t=qW&2CFN)41p^A_+wK&7DV{-m$uWNB&kp7Ir{7J#mnAy7ZVVy*DfiYRvK~ zGf^=B_-I-SU^8eLokZ=#U+O89YP^|3tZdKN!i*a(+XYuylg0w}c1gQc`ogrx=6Haj zYIu>yC$5kH6)2aNn_>&5)ral&BJakKw zkm7AjJn4d*k2Nqdv;z&KVs9Eo+~jocgSL>oLX@%LA1*zsk!X#Z;&!#W=M7Jl1e(0) zw3|#|Y(2878W2ve`v#ZjH)#$l=+XmgQAg z%{9>Ie0}q4lc7me{P_(7)0;2>tB%A9l!k&Dfq$tNLEmj%vWZW5S6-7b-^HC@rXmHI z1%cgz9B^n%>jkiM5nh5qP6*@HpLm6Ol`V+$H+pU6Ma;|Ay-LmCtj;5STaIvrkZ2To zg$8qne;B=#+jyykV)BNZdkuL#0ME!ELG|J2DgU0xF%Y8KLN3Dd)=$$W8jGq8U{DCY zq;k#i{Zme;U?y8;vu>YN203@+RMFt&Ge8F{LY6VRx*+O#lP=MC_!Z`GSYtX0P=p=z zEV!kEQde$j@0G%fv&ckzfTPVZ@!anFEp#%5|`dK9owevZ*QybMtK?kAd z4C}%s<(6g4tLFVopnPjsj{913`j&ta%^ zVbydpeKAXp_s>#-b{2!wrWno?h7QUeS-Z__JLR+&BWJF}RDZ1i6HPlW6sikdv5<5{ zOBEb8T(DvRq~P^j4BbV%VFBGOE9`#U`3J{-r#lgA8ehtQ^X0X94Bvr-qwFC#jk8ij zXN15MWAGShw^7#X*XTPv7y;@*HCV`t_WMuFO{^h#?@eRp>RNZejKYMY^mPt5S%#ne zp?0mWZbi5an7yca*uqQ_c#>Em4YthQ1QLqRUYDM6jA?TR243{SR+S zhilxXNG5jWmnz)W>A@9CulIw>voy56RgEEdQwlx7ZCDc(ScgdK-a==tx@F6@lkPzy zTabIZs0txR&DwPRzxF=ed%gvYOki0tYk@^%HL1 zwMO^~ZV|3#D`x63O2dss=C|>DuY+mM;Jy5UQnI74IH?e{bQUC)))>y5u?nw72j^qe za~)_?hPW{IMhE)@XV4v2sas8I^D~c8q%Gnc_Lpk93RV#}&%6P>&h*QO!mMvif){ zi|7cx(-uXKppxfBs`h?xXk`GJjt`nfTAoT#u1Su&)qydD3|?Ftk&WkGx!&Oj9!`Dc zrQcrsmLQ_d1rTmF1-5p|X5!sn?>aXy3Q{f5AxEk;u~Bqwdh=aXqE%x7VwtrFnz7I1 zJujlui21yvE0**F;DsN#djEV&OiaT}I>Cy=j8fc3+loL;>OnTxhqfkG2g|n(T)?*( zSwkHt8~TYmhBB<(CnGCUX|Rmg+_1|1c9E_C1-D@((T#DwfmR>USSm|`1b6U0oe&)b z`nA`h5=v~eKm|D43veRblcSNcBftXl?+wX`AB~y^r+X10t5d3e#p~xwm-+GCp(47l zDR{)5h>H_au$-$+C8aI(1bM3w^yBRg-XgEQV4O2)!{5B<2PiU1z*h@en-CO=YLAA5 z4vUDx{S)o%O>9CRjDStNEs&Cvo;)c!aMj7FRNOlJozIdP`V_!?|CuHhFQX%3DFlZr zKCon0y$U0YJ3Bv9=iaMPRKBQA_?B22#$q2%tSZqwar6`ezgXp4yl53!F{!o6MTLh? z(CrqFy~h_LZ=iE!C$3QO^BLc_j*FDp49via2}skb|FtrMsY7sysjJAyO!vlBb=^YB zV`DxK5;z}D>~e=r98%ba>}xgqSeNR=-K3^7&8&)}1-ydiRA@Xv?Ra#s(_kxX1D zeybi_;eTISv2d$wwYn@5b~)5bPUTKnIO%ygj0!-1yvwT>vGdq^cD_hi*E}@)e zD97;fWrTsxhVZOARMSicIGpi-q#q=#53R_DKcM`Y^MF=i!4D?$GAyh8>R@O+Vk=Yl zjLR^s2#IhO%Z%N1mn^>~(Hao#5-HXN!ZRPNrNG#4&kkY~pN8W_r1795#`RL{F|Lvr5?nVE=QSJ()&s-mSeh|K2*V zf-lh4i^QU(7GH^(@lDEt_bd5@I*$>cuF=gn0&I69|9FPeF&feoD7`udgwu`mg-m8$ z{TpUrDv9QY9ERwK8zGUx@sn3A|A22YP%aIrc=C5TPIXF89kP4hdiD;FE@O2nZOiuik^8rGdurA%jNf0)1c#39qC^)Ni9 z3f`*_a(VIviABu?Dte6>+=(gx^4qVm0dFo&Upc%088CQ6j6Zf6NUE(sdL$z)a%+p? z*s%rxZ4#{(suxW@-g>73$Zp9!tlV4sEdEJ}%%CY23i@x3_mOS3-c4A!_(k*-daiC< z*b=9b{-qsaiATY?VNxG3|0{MAQfp>rsqa;M#1waQ12C*oP5=Mk z{Ro!=YdCFySnGM?mfTigQ4K1xvW&K`8kHvD@-XYJc%a%N89Ke~D&a~_m|*xPbpolA z+f47y`YqAal~kGutY_A$OL^?H2n51-Px2$(JjRO%?46keMSb0DVo7@{t2t05BSF)RNN=q zhq^uXlDG6rcc=eMo*#sk1snJvwTIeRxBt%P$#P7x z0l`ueE~zN~y6=5FGWZ@stREw|RO3M367H4z$!O*rYId z>U_hD9xnczJ*KEXjm5X6{qd5p)-nzck8Re=0=Pa_grb}QbpVw*Uk73Mrnx$;CniQ+ zHfh`*`^}je;VQng;g0oLxwmm?8~00G%j#o>3wOyFA3dUaj94sPPdsdw_XCPGgxGOU zX(dp1;P1_^uApv+9O6C09xcW0bXP>AO&!xto_fntCeL9q261+Y0%qNn)G#E*ipl>0 zrOpp22kjDbuKtH-PHSMu0S{GhGlIz_#u0tqc%kLP6O{gQ!2zmOY6+81$U6uod zX!mE~?Oo6zpEM}wbY1m(gdzI8PNhadW7AUkaXN+&;Foqjc^+l`&M#pEvoY*kyPrx? z9Cq8qooz6h-oz-ij97TWe{$m#&ocMCSzWlN1Q7gsVtyBvC4Ubm8NSQAlcOy*BFrzD zGCALVv)M`_!V26OHfk=l$FLHotf_%5mafS4%61+hspCuixdNWeCS=rUG>K1*B#B72}BZz|soQ%ehV6-r{dnZPP|A?t@{0aXq+p|I?785u>H zjO>AzuzL!oh7 zz`TFp-=Hp?#4NkF_fUMFB($uwmDNhM|7d~0YxUBI3@d?b+%e@H7}+BOx2ia8&lc#~ zmg+nv$|+4@wfcW3&5GH(kyp!*OP0}cUDy{K!-mrQVt#YpCwwqwB+qA}F>i~_HV{%9 zTed0jLw5zZnCG}QMJd<_rogP3%NADvMeqG5qo(clKSSOfukxTZTR1?ew5LB>gijj0 z15nRj^)BP2He;^majyFE!xPW%fQuZO%8>EAe4+Qe(lbDoifkqNx~7wun-6 z@;6I$L^5vxWN9wMi@Ef+7_~O-JpJNKO%nsvtqEYY@2ak9UOv1`R-3$>1i~miF_)Nf zH#LiU+D`LQ3^dxCnS}KfPt|50KkcB6woMMHSX^u$Z=7~C_B+6|eM#LO%yX9o7#MeJ zS1QJ~WLY1n|Df7RUbep*oG74;*hvLP$_e%g2taDM zaUYE!oGOaFT1(Vs&Kk8fR0v)5@$&b%4|a?ewpgRV&GDh85xVe>7>B3ZZYNP|t0JYE zYPJLCi3=HaiL+m9X%9^R8bG6d@3IWYR~-GF_b`-0h+DUDN<`6f0NL$fg_-wO=D&zNhNO|FMF3VQY-s;3fvTw7GODj~QV;mp_=Xo7tIVD7i;_SFF<2!J zYrk~nduLlgL3%>h3A)S&3a%!oMG`%JtUs93J=yMDd%Zcf@sAwVLH56f^K*nwIc#^R zFY5%KFM7Ge{=uetSH*SU)!6^MjICU#`bb5l)mSIFJ}Au>W45Zw(w^kt!V zEYGhBrFIOJizH2%j5rJ^RKLiE3*sRDQMdojG-IlLtFadAQ46JG z-5(^|Nf|CcvEP`m@DprwOd<&iM$5hW5*@<*?@L+JC5dh+#=JHk^Q5Wu^nQ9L=TqAX zrSgS*8^eas9~R(v9+Mgv&U5kEPbda*F$je!9Frr7K6xAuXL0sWvNA;bC_w-NKk0zf zspQD?#_*HTes)s&-Q2^R(}BlxZv&64@^R#ew64e`EGT|=L{1MSx5w+(lUU^qs9o`$ zL!^w&sMBuFx`?5w$d2a=XBVkg9bnT+&8rF+8TuD_!(f=5@KQ-q-T;F@qsF(Zrtg~+ zD}OJ9q=1Q-r))G0^#YBRlnX6&LY%yypxyxqe|wHG=34oc^Qx(YRqD4)A~5XqfraO; z{mlb!B7)wAzAFxyr;#CaA4Q?XJLl-diNs*p54-4K3mvz-=)lzalFTkr=*DA4B^vog zy#pvW=U?Cl#SjFQ|2Sj}PXsh179->beWv8Lb1~kel7LAdChbQS!Y#7)39xyY7I>f(H^Ea^_sRix~+=>*fzHsLdo z)5Uzx^O)CV-=G^VwPsMR`F^cAe#D+nDVh8f@%N zIEH-60~H?L`jY@>+LVG;=DtN1TZ~J<%h?c0=2ki@L2etxdUH?5(!W#Yg}ZmooN4IB z4aez`8I+WB1OGbsvvxN*z8lDtu2c5`yH|`fXPK?Zub`#%MDk}438-AC|8H^Z`j}=) zRU8mzqvQH$F%|~s{}8EvX;o}~QA!ZPCB(#y4sJxojfi5A+8sDm8HG3nF}m1RIU7@` z*7bNy$=#ubliyF=qmLYDyyIE+Q&qKO6+yrPIk$JtlyLjgLb+@uWVP9QL_XrS*vGa| zt=*v{fVtRs>FE?lV+~XRsxt4<=e$S97dsk7dm);wxLQZpB%YskBG; zGUF}x)uSpC%ZZhoOGgLxD>Cxy#))+z|2VGHvrqKPP7vdgc#?V`2PYv8V|cRPfM1U;`v z^qaj8;qF-xG<{;MEO-e3J(qEKENa1+>69CCs2#lk%2)y|Jt|tXF9Ry1r_+E zF+%gTS>?{pAKZid`~0=R6*w6bFc2B|MP}5&Lig``b-8o`znmHP5rB{ktlmXBy!*+c z#CbgWZ(voIg6|665^Hnu%c~rz%}t(++U1F*`&=uV264g&dyv;&*6)92CbuYaqb@8m zm>yPk)kRz&tC4R0M%zgw!Zx#iU#!+iPlS&bbu9E;>-yLgK{cShz07~^+&pQcGC-Iy zYV<;~I_^7v-o$FEPaC17IN*NYskqd&-Av^K4}(e~FZ_vvFxDbFUD}z1{w0{h>^zC_ zN7T`wl(R4<4tlruEmS9<G0o(E<=tF&jS9yJ9S9fI5hBF8WIA zAXuZmG+WpUp+?qZY_TuGw26BtBAOj!c3Uf`hH@j{2!S0F665%qPokSTDhtgXzzIigyQNL@QofBLJ)B;!6^Iecsk=LSYI@ z>M<~4T9)5*f;EtD^RM_&U=_w_(U+E<9Y%6Z-JIf@rT{*wC-A8 z^NviplxVu-t86i&SP^VjQQ#+Rh>37X8qNcLh|aIuiqDAi;0gH{{~*r1))@i)C66z+ z?$}S+G~{lbGHsgXya&zj_MK!=td&*|yXFXX%oa7z+{c%EM4NhgfRjLo6XojF7kmb8 zp+fCE6Kpj;N9IUu)tw)(oJ*JOIb&!OdZ`<@Cib&kT#5CDl*yFUJ}H%RiAb z+-*-s7$Hse+~*C1u<>(EK?wm6uOi)2aDa*xf)IYKR71;r&+r-dy~eNi*iL@Kh;Gz1 zuH76;ubt}>@QbGBZFU;#Gws$d-Nt=F^V{Vp36as{QW%#Iq9ruwi6+kV*%DdJ6S0m} zGVsD)P#To1I);zfP!Iv{XKzGZy0)O_b@^qzD~!xUAa8OXU5J3G&_(vSMn`Xk*lmSaAA zTD|#<+L6z3j_l2fDf%R0R;c1+G{)H7u0Df(IiM~MtIh*1Nhv}mr?A^?ZEg9nQbf+WDLq>rvn`<2MIfOqbxbWqA0hSPj#lkj0^3`EAbHWm9 znM~#P?bR`Dwi`Fb!1Q*pBq1CY(pf=WDa zrLuvIPm?17AC+;nzcG=-y4y)!iZfy!g;8J-shHR+k;6!a6Xg4Xo=g zat3M4<4c~lrgy?v)sl5~X_Tgf%TeC!;t*=q60qi^;*n>VKrV*3g~U$3v$8KuX8n^F5XXulU3EC|N|Urr1W~%Gt=WI805e!H^W zLlWMTrbu#*T23bR)$2ucMOqDlS;3iXGlwULgYAi;^Tvb8|<~A$gov%V?E?B$q}Y0To&E1Y^v&aq{PB>o`S$jb(!A(&42;CKVIvn*$0%IH4T zo)3O>O9)heoXCE&+iqikH1qVuAmMt30(1I06D=g$=Ny4SG!~Z(tRJBigWE2AW%>A4Q4LS((c<+l3ckn zoRmuBNldB413{~tv$evQY5Xxgan)bOIo$^sv%O z5Vl9|mlOO#Tmd^c_iax2o_k^~Hi(~oT5FiLY@d4Zf%`%sGyHC)|5%K=YgDI#jeET* z*Uc*V5H1)VX~pP$U`AcvEPM(5d2eOpLZ4^z;RpodP|a9lG|4k6u~H-d1PB7Nd8AqB z46z}`Put46K|>*T)gV;4(4{bnj=EpWy*rRogvrReCRJKPr8nWhNTl~7xk+uA4}p{L z8A5t>i3Y?Hrg#r~gA)_PLL@jA6HTIu>H?epWeD)45FX@v0LG<7< z-HFF;oGe+uyX3$Z004%or)La~e4;;>jgP)9kFVw&#j?5ZKZwj_Am|mgVVf3jeb|Cg z37x2**VYzYL}sz72pc&$ZGcm6$+})?#58Q|;TtqgzT$;~pld0!>QDKB{+JHh{`(2& zBc%CSN(fJk?dU`esUktRoeW`hdKP4m*%!lAw@fJBxAy}s)M>?_Aa+}V70+^~HeC{r zwt5rz+yo=VyUt-5+SkSniLeiJGahHgHJ?|85t%s6{s_3Qn~ddzZaVJBU`AySC9YC4 z#p*<8p6FSk_{af-TKkl56MR3Wf7Ri&KZ?iA&86Srp5y<`hMCGYYA_2KmZhvoenhce zsvXQsV*w29@M=L`Xzx5?9Rlh|cpMiY`!&K9cb~+?@TkIkqj0@+9ciThez;>Dog3xiDnL*Wj@b( zJr3}70zVt1uH2L|nx;SctwK~#p$_+_w$k$NG-TJwGUF$_=9PFHl_D4ebU7va1m+Io z<8|~Md8Mi!w2nZlcDhFvs^eX3%-mV`4IMsvI{ONx?+MQFo6dcjSuDXk!VWVq{|x)c zm?X}=Rm&|j%``0!x>5A?W|Fhb`|J(sK0V*v!m~>{Ve{APS8%;Yel~*<_3L_?z@<-@ zlXU4%?yt-PBWCj&cdt)K@6#xwMt``2woMBe_IweS0E??zOykvi#jxb^lL7J~Rii6_ zrPjw0IOB`3VgSr+Y^GL-FdA?Z^M&{mBqKsQUB@s9 zdM0o??4Z_%q|UyVR2Hq2`vV(YDkje{rZ<7z2J#Rucf!lp@BN{R65T6nNXpP?Alu3) zL^*4^AeDu|(`=)eyd?gJR@}27zh`JvRL0-1%Mc3}S2%gmmQWO3L@s| z(LZsW_B)S)~gBJ8m|4=0O8wyzI92xcE+b_q_idimG^~7)@O%Z)tb<~lC zh{Mo1J*C85GA8P*bE(0mFbEC)n+eL>v0AS}TYY3l<7={+U-dTlI#2%DX&lfvB}x)> z@+UJ6@&(wA!elcfG@9oo^kBp(eGwW&=la|{GI!=K!&*G{QVlgHLj)|FyQ!GlxYUV5 z-LLUF@RtxHzE7zOKRrBFm?K zzi5Q4sqLO_08{B!{nR{7%9CrYHYKJ2n4*klZkcswls4&>r%Gx~>z|2&_W8=|p6V4G zU_j>|N+~UQ5v56faBIuGeS{mb(w7EbkZ={whPo?m75cew3rrv*c50&^3RjQ_b}Bm! zgUUmj@h5h2wQU1m=*Dve6hVnUnL%)W$5RtVrGqE;odYBOQI4oY47i%epx+h_Kn5HH zM82Z50Ac^#cWX2&jNheXnc}aA?*`|$6%tunA&kZR#e{(E3o&5x&!y z!YgfeX_TdTPl}+TUi~z9;UR9ANKDm+6}ud1O+t^2 zqe5nin#*L9&$G;i$?47^Mv)@;?zb>9reY;g&#{j9;|)LUP$K#k(Ev4?YhdBD%)9jq z?nvS45@#^=Rns-2p*NwG!x!e%{57D$VY@VacTvEDmz4s*n0Em~Z*K3lSTzRoc!`xd z8Se{0Lhp`!@jwqKJnfhdRgZ`^f>EHJA2g9Y08DaAv8PboUS<2yMD#F0zueX(?uQQg zhZ3fD;2W6&r>D5jM$MqYBY|i&MEK79_YR#p#NerMZ04ekbtdn~YWvleT@)d-{Pcu|YW_FJgk!#L?3@iH=T7qEc z(+ZyFuFAha@?HcnIxqqtq6ZF5f36qm&oaP*^<|I>6=cHsOfKv_@`BSF=(&*E81nFw zV0|;u&G#Sk*JcgMJH$2c|Tce-=jx5OeZZQXm5($r>XbN;}8 zaVy(}AeF-?NJ{sAGw?E0^?P=CYNlu@kT8CZiK(+gx8M3pUUsq75P-<(dmigqFv-TT zWG6h$a=Lfx*Z#^CZZ41E@ck7*fcn_K`e^InoM}HA^MaPP17C_$Z6*uoVhSXd`s%ehjUM zeP4EUt@?A3S36rRNgiRFR6^b!jM^Zof1@1i^&# z8CFobk4LF!ye>SvT3@}Fz(i@~h&FK+%$<42E<>`&|AtV@*>i2+R&&s7^+@=}>Yde* z4HQ?3GRWGcft`m38vzb=Wyq{06KJRUK=5(WYq=KnEBO~C_o`IkdN?yOjRnB~RzjE0 zVlZ67{N4{CU*P2b4$3p^DlVC5jBKXGV2Tw7W$XoOM^5X7Py^Vrx(u7&t&u|bk17b} z-cgT^``jl{!|p6wgARIg0JTwO;rRvC_cY&kRcb5)5Q0USGA46rb-#}G82$VL?Zv}| zU4#c_snWvBd~Rseu@D;yrJwtDov)rkX5%2HrZmw6Gc>!&-H`H^9GsDF@|W1^ndUQG z%g6Tw&=e}FoKqK9BOf%)6^~?sU{yM4Wu=gs#ChQl*RhMCyD1ulxrq38dPA~rQEy#t zq&Nxl2wq*f^qR;`XLajQ5b}!sx!xKD-PWq;fU0Ui>~)?32X_bAUh8c>&bf70FU560 z(V0rpe5%|-rM|hhHj(1q$ak9~qwY%;Uo!+a?XN`iENjbuiO#Y=EPoecXzn!e8R1#}4^4ncY^b(t zcQscDkvr`&_skym`Qvng6~2&5zJWDuX_ISV@;Z%__Ow~}JRlU+1Ie#b27>vBIpQV} zw&2_DlYutg`0rDpUt|InaTl@(DxEe4kIbL$ z#+XAli@;Z>GUcT6{&*I?2u-ge&Su)O*e!3J= ze4_@8fdSjZjKQ@u@0GT}w}Gj{AP{-PfE=}0*zAcb&vuCgi1`s#+?N&Qv7uM+VtLNN^9-1FN^-CuI zcR8L;3a^v`t|obsfo}=xXu{Iwcuv0WHP6~?%!;z>>r|I@qmlhH@OBLaQ{;*qI!ujh!h2Ox zVRITT{Nw-PhL|PH>k}pbq)60XAw{c1>DMLmDIYT?cwouan-^IJ)MPf{FB0Ay^l4Oq zp5J}K=c=2#+dtA$HSkk#h;+8RFZ@8|OT8F5F&PQnyK2rTwwkbl7$b^t(92C@U{a`E z!MJ<|WdSD8;-05jzJvv~{2D{2Xex9`xlxmc>o6Ft-8Xy>;~urY+ASXp`!T7|E);(x z2-R$2r5i7_FfJj<1blLR9?uWks(bam=dojUn7;``s)|snKEA;N_{=wbPVz64L@{;jHY<}Q`ReqQFRX%_hleHeTeu5bS zkAINrMlc2$H)IbNRqLX zK=yk7DUjro#Xnlv(#>M~=B*|@klY(4SaJ!buDQ!F%pjSIA-2O_NLDsxUIM;FM|Fit z)l%#?8%oV!|DrC}#dRbE?|I$nhOmb_E~*pu{9R#Oj#3kDv{P%l7&5!V=Sym+NDoev zB7e8o29KaLz!eIgiB)LQV_)z>N z${rX;*XJ?8D(rRk!1F9-OwB3$e;{K;N?|Jru1!a8`DI8BQ|oF87ZlRc?HHryk_mtr zs4i+$9MWEB?91ZS5~co8n$Hg&Wjv5^@|huFt0haE0A)_?$TW}$u0IuduIiHd;qPVT zHg8Xwfl8|jFfrPs6!F()<_wg}+DP5p+F!hx7z zX*9vDp)NE2T9z=5HaoyR@<5xQ(zJNyOBP^c%pi?|AA~N&RSF`7L5#-RrWPb*u<`!f z8GaSm*9r-h&yz0Z#_3txt%i(dLjIqE?rHg{?RT5b7FR6tXGv$tNqv?1L+9$!LejC0 z7VYMKC?hsAz~<5?nFxi-}DOS5wAc^~z;RAd6Wc}o7?hp*&K;@vq=;vil-6eL&_JbR; zf}^3YYuxg=PuHrbC|<|JmXS0lncG<61SNNiqw%w`*rM>2tF$i0#EU17>&6TjS6bu) zx(O#P{71&nWdc!E+#oRR4><8*OheaW9o{!-hM&h*D~(0LdveV=aw2bsh-7S0>r$v8qcH~qpU_`!z65<2y2zZYRCVEK(kP1q#?L*#^B2P2|e6F^|diGO7{r! zkHCELuFcbX73=thlfY?}378W-Sz)L*K~a&i)l}%J4*VdF#CdC*{yh6#>XD>*;8P6M zG4}|(;@vll`-g&NcTxQLYkst|FhGg#M8B?p1-W!Nrq#>VcKdE}1N{^lW-@lOrJH72 zPZ+0w{Y3?N?()vISEx<%Wh=u@FB171OI_-f!8UC8mOluQRk94^SP6Z4Es{1n-zfMq z_wf|vyn)3w5?93Oy&kh%bXW!7wv+h9ASN^H44-GHiRheA3V`k#hYSD>&Q`kKU7= z*{Hhg4T`v(=6&=xFuR@2n`2g+hGI{U8>JsEkj)%}9o~IJx4~=Qe^&sq`(U2?r6@8R zhnc~`2>rgSPJvvI1kEkm=bKIkxf!u2!o%4UL;XboawjK&2nk?U0+zSl>C%dK?#C=9 zu|_*X1cgN1K3RIl@d&;fN1|roVXK_nRv=W^*xYnArh3lM0 zCRr!$c6*=9VRekJFKj5TaY~7S*JA_$J)(HSoO1i+moubGhwWRqoepG2KpMKvzRj6U zODd9ASrA76g5iYQh#Pl~DS8Q!bhNI*YI=IOu;vp-Hljx*J69 z*$URgU}+l*W>zy_fH@D1Qw9*Lgw1NVbkRj&lPj}l5|L&}tR|Zo(a7#<>38wZVmJpd z*bz>^kahTC_Wn3G4O_OX<6V>7K?2J>&)+2QN|Naqw_1l$Aej_bN@PTNh4dqTnc7G}wGg)6#v0>vKoCdXuy*ysc;N2*%SOu6D@@V1t(Dr*(_ny^U4we+(9w5O_I z`HZWze2_Ow*begqlsK@`%4F+s>@=+}M9d^@Vecg}G`xPr(&GC3I><5O#2?04c<1u7 zVsK#9=x7a>>VPnxy3vCv+0t7wZH(r>#8;XZioLM?>XFAS&ZKpp#AV0`Ad2jr86){f@n8mnok*eHY3_tmku$*WR@4mUs3v5b zj(!oGwAVO}N6Xy+I&_{w@c|y7a{s)9U5td?NK{!v^0dT%uUb&1KhJFFN3bozYcN}! z=bs9&2@kX1bqGpRLH@xHCu{ zGy($(KC>-XLuJoRhd@2$Fg1fRo_a{tHtvc`GsspgOqh9FtWH!(c4szVIXpb)E( z-`AsU9tsPcMQsEK%>nM_Y6A$vHX|jT=L4^I*+E7w2bEvg!e+xL9S)&$Z~;wDmuiu2 z@hNJB>n8t`=IZ`}^QHQ(Wu&zIK1gCr@|$WIJ(`wbV5b! z{8eYSYmEg_L0UA*4IK0idu&&uRyah#V04pZQxRDAS4_r?4|uLQjgVsU3zIc|J4aFL z8QLzO)6(LwKQS^@ZV$u5gLj*Yt-LLR*1hpboSwzzI?q9*BK;`eTvgrvHKrmvDT~W6 zN@5=@m0r^PoW`OCSP;LSztw>=b(}|#{v1y2m}I+L&Ih8m@a#wxfc0u@L05cdSB zt{X9Owp@wW^MUYwd5VT67UG4ZicuOO+}hCF$&QbfL_6!QjNc@F+|>l|9}3+{2}$nt zTBXrKxA;XSfCyFD14%rG@kqsCuw~uLC-4H*>&X zQLzY{(q`D3AESKTHHmgeGN#nuIiF7_<|3eJivkGbmRuM*H(MDm% zlQdA@{bXb{JgjTIN$NI=@L`lV(P;`TjR%-wCmIk3%{NUerRR5=NFUs@*>dgdg0i9Q zMHp8I`!x7s`WIbS)%8LPj0^03pxopX(Uwr?`%{ho+=PVYBEq=`xjznLg>Z}6c)^;D zye^k?f3RTy9SMX560GsrLWQ%R4aPzW^#BK-?qEcFlw^K9|CGD$-23MxMg5tOG7w^3 z?ecn|2EU}SG4P9vklG@@$po&Rlh9JcJZwnarNJON`~{}4Z{exX1NR$Erbz^UfJuJ1 z(fc3_jyR_&1Hu2CL5}8A(nB8g2JT7kxiKqCkT>MW6zlt}8p zTjI>l&s4M0cS3D;XX0PK!;i+V66kmuv@BkR8E(-Y9WmVXgq-_^PAz)S8R$sixK7mn zzGmr$H~Fuj>MOS(Y_x?OV&D5Nf4Ygb*NZ({_R9%tne_KV&y_+kqhxoPF%Ch^@4a6L zbaD$#LF6*@FOVv?7DEF6lk-DAvoc`!bLpYLfZ*S|?BVO+U?u0s6!cfv7@o*C`NyH6 z3F)^SOK*b04L{q!cPY^=v^S$C?h-7@Y;6_q#COPtZ?viwVu5z@_7a?P5z9Xfr787y zq-lC$bPOGGzZcp7YK2qaBZzX`ee$lN+AN&hBIHWtof5*fIBT(FTOc?`FUu8mHm<=9 zIre`Zv-6q&ZG}P|FHC0+I*gxiyAWENN1p$Csc&{@2=v!)$ro=QK%VSy%Egcm_lt)6 zCM>H9=rb#YCfm?t@DRFe_> z7Cineqvi+-kXhdU6#L%cQnRQMFZ)TT3d*`^)&kG|k3Wu!^^%q47=$5`Cu{Y;_4NFO zR#NL_4rV-ZL5DI16PMZE;-cwZHC2-p=(rYi*+wl^umD462G=N@;PmnO!WB#5V1sf( zE~pvo)PG6J>og(liVMYWe1Mb4Z!x47AAO$%uFh82^M!TAaPoR)jlGWwx_vgfcG>eI1xgdv>#kISeUnA{Q|u)KT8)^K-P zL9i+1V?j-TI>!kL_biw-f)j0^IX;%KQQc-2Wc$85Gde2r`s~X8a=MCoJ@uqFbyI>cY#@kHppk+Yz8sL_wCG1(d?Ro2gCS8pR?{a4 z7v&0;I*WR;o7Lo+`eC%WY@vBQgiwo{mixehHmiSWpX5~DyaK$jVIiUFDztxyRzB?zfIk)vVY3CyP}CUQ%1f?oedJlV? zYLi}6kW732sByYUL@kHE70+U`1QDFw2(G)#Vv2%nd0isPXcYs3b8c|8f70#qyMOJFPJQnsahV^@)lrjn5!|XpWH)p;M{PpaKA=>w2Bv4 z84L09`RIps3&Zb9&{7@YCK3~3;K&cp`8QZpqP*?3ze#+WuZ7yc}CP4@6;yF4O)46R;U5K zZA?N~obzD>67Eg~_S@A3W{DzqRjEpSpP}Pk{8`%Z7idu>3OuzP6DLT1Q8a{Muz^|E z@J+6jLM(k)Wg`Xt7H|A;Y~XIx@Aklo#reN97_)UHP7!r)u^d`%l!&Jk+c4WiAwN|7 zABeQOp?cSBy>JJ|{}$~MF?ZiwS(9h?(mAMgjrDKI3r}cAd;o&$Rnx=#0#cX?vP$aKuAxS z*`q{6PK!gTrRg9ylyV*SSw;OPpOYo8AozMHG7Kng7f=O6_i%X#^ORCj1RiK5u;Usx zquebY0O;!0zp@lNiUt)1UaoOO&o;_EEayI6=`Dc{41eY!mP*s#iH59QPF1_sV!pR* zjM2`fW`pX4zIN_bD={v|)SW1@6_PSs!_d#HiIchq@qNkB3pg*E!77hj+WpJ;TZR>i zIbIdR-aVngO8r8GmI|1jYNRsg=h%kgQJDFye>*g$?0JwML}-j5kE3%Ukm=y$DEB5y^*V+_7S=N+NPEfpNmhD94en3=DSP zPVnCvxoglFohoZJ+$Av6-&9npRtY;edy19b2jXk*qns6ppbz#=u~&C@Ei@C0ex4QC z@=)ZMy`x;JK9G4s#*hJ^XM1tq_UQVqdWs|*Y%kw)myUyBi4$;xTh^H%LDOU404HXb zs!5dQBUMy$=c=q2jQv(gRg+TF^KbqA+iRY;D;E|oVzcAY3W6@kZa z_)kzwUp+sIjIBQ$n$Q17G>VJTy^TSnvhtTM>pXcIJ-gj8Ig+ZEm@Kr5MYkGw!Fr{T zKLy_UGjjCO=`?hbSi@%@qnhFFF|LaIXa(2^+ zE}B;Cbv!_oG3tQe3q=BfZzZ~L{Mm`G zxkZtmd&MSjWTYB)i!7yu!kYd5J8v8guL=ckySWp8uMmMZ{>8DPM$F{YRVb=R$3&(o z$uKW@0RQj(2-j-0K9&fUkWvL#m)gO{GRXT-a8|K{ujC>V^cA$eZ@4ExAM-3P`P z@MtxaW7rQA=+y`nu?Bim;IV3hDp+J-`_D6DN{pGz#<)2&^~LO)0K|%D!iICE;#!47 z0TM>ubNU=dtkms}V-DHT)~6X}&Y>PUM8c4Q2*5~;*_b~mozQ6^^8R0HZJ{1C0m~t+7sbRMv_!M4NlX5wv+)U@vqI;ZO5(WaDxM+zini_#@eiW69(~isqP`*4bxFQ z8=d)6^HzdC-DfjU{r^iH^uxQ2UO5h6ERx_3KB8EpuGcP*vbZGSf0P&9mZ{P=9EebO z8;0ziB^QP%XMat)*eUTl-WGjF8w>fE9_+fjW5T;yTP=OO#-_1nTN@+-O3 zHm^JOnSbW+jBW>N9UKTN%Q?dV%v+z^^WN<$u|}pw{e(tb%N)5Ds5SXbsG(}4K(G8x zXbO89tsPhAF9w))2_%&IcA_ZjeU!nCuLP?mc1g4jbiDC-EOTILOJbAFo3Ik)@!M_q zDKhLidB{t>e=K;_&)@)!cX*=#r#hmFF@xj3 zSw%E>G3OKUKdHpqk9FgI1!GWfcAbpMBpc;qnxf>H@`bH;{Ef%~xcJI2d7WZq@Rt7gZ5CFy@Hn zEAA}mJej1=D=>(oW9gZQX@?YL;9=1dkVexAA;ZQf6g50_oh4Z?w80l^{**3dHz92) zR(YxR3T?c;1E@ms>GVwV;w(aV7)2r{CPsX7f9l~hyM_N#1YY6hmrDno|l zB%ch^BXI0cze}(_Rexn%=Sk43dCFQ-0qNr##Lq^PU}NsG#GWtber-Ru^V+nd0y{sn zVd^Jts})AbSnzSImqXKwfq{Tc!!Fq>%yzI&CnD$}KXA_I|3Ew=kXF6w9=b17)k*NS z5+V5guj~-n`VG94+aA&g=CjHYY8JTBm_AGh1wX+|ytzQwP=^k=5`neB%#z9jj(uWy z|3z9mwBNrlx_;s?t!1_ta-PUsy2Bz-LGIJz43F9QHN(ZWfF*5i!Z7jA)IL?nlOrM> z>C^UbKMLgt^XS+_kUBr$i4ZQUSEb3%Cp&S_DCd>LqM67zK@skI`Y$fwXFK-eRhfJj z6#A|Il}$fj(cb9l5hp%a)U9=8Ur0bMcUMW2`v!=6{xdqeDFFA^ShpX2Z&ojQfE5?O zN$!M;6Zyhh_DrQ`DTrk~Gd;B>iJihrTZ(w_Ggj&rCG4*wCyir+js4{FmX zT;{O;H;-yMO_;+ekQmmKNCupIpy(@(X7p1Nf;u9s6gM8yw-YuJxh&6%W#pf}aQ%5`et zVpi7;$nmMBPC%H7{atampCmyW4q3ikD}?|G@>%O;hZT`(p=SU1s(iPR?aKVh?`S#K zs9Jfw*5?-626kpOA!VjAmK}G(jU9^0&5a~i@#+Ls=#}1v3B%k^+qI_dl1oBVh}+Q! z@Ruws{)8E2oEnrk4(+(KcPN}AQ0~Nt^S-zz%oB-4Kr+#Gg8}!c#yE;YBp&Bo{n_h- zp(8Wuq~9eCOGR)G8i)?&xFMbPh|nosA!n1>IxmEva`==DCR#~9mrCH47^aMJNLQks zf?TW=G1~-2@=WVn;J

8;ohlMQG1(t?NfMYn_k1MI9$zS@L=yiSA;Ntaa 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

;*_f%=|SAC^@l#f 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 -dqpfY(YJ_1-Z!;OvWdJmVUL2Q4f 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\"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/17176/0d89ed8d\";\r\ + \n:global CommitTAG \"unknown\";\r\ + \n:global CommitInfo \"Autocommit in repo: ros.vados.ru, generated by owne\ + r: root, in 02:20:04 14.09.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 +/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 +/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/20260925/20260925194001-Diff-Config.rsc b/MikroMaster/history/20260925/20260925194001-Diff-Config.rsc new file mode 100644 index 0000000..c2bfb4d --- /dev/null +++ b/MikroMaster/history/20260925/20260925194001-Diff-Config.rsc @@ -0,0 +1,4 @@ +14c14 +< # channel: 5260/20-Ceee/ac/DP(17dBm), SSID: vados5g, local forwarding +--- +> # channel: 5200/20-eCee/ac/P(20dBm), SSID: vados5g, local forwarding -- 2.52.0