From 3f36cfa79ccdab2767b8ba7ea824d3f11273cc9d Mon Sep 17 00:00:00 2001 From: vados-dev Date: Mon, 4 May 2026 06:20:27 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 04 06:20:27. --- .../20260504/20260504062001-Binary.backup | Bin 0 -> 266961 bytes .../20260504/20260504062001-Config.rsc | 4408 +++++++++++++++++ .../20260504/20260504062001-Diff-Config.rsc | 5 + 3 files changed, 4413 insertions(+) create mode 100644 MikroMaster/20260504/20260504062001-Binary.backup create mode 100644 MikroMaster/20260504/20260504062001-Config.rsc create mode 100644 MikroMaster/history/20260504/20260504062001-Diff-Config.rsc diff --git a/MikroMaster/20260504/20260504062001-Binary.backup b/MikroMaster/20260504/20260504062001-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..ffe84e0b85e51036f1daf88e4e266c0b4663a6ac GIT binary patch literal 266961 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%0ACiom zPRHoy#k7(ZU!^klzQ#a5F=Y+$Eb@nY}@xRcg~MAA*AUxoh_%rEz_YMbl=wk?YT zF~R=n(lC4C7}eVB*~RZTuJfR2_T)OvD-Iduk3SMQJS5tgOlAPyScsFTyJ(R9by$L- zvKzIUjc_~nSy^d7zSIocv=dJ99+n;SfH#~Zrgvj{gx9eJen-M;=5uk34UOjc_68Z{riK$c;?z0fvmdqY1^{w zIAwS31^0od;8$@bRW&}XD^_kfQDg2K7&2NAckUm5`)U8SO$+2;2|pRLN`PK`O%Ub7 z`!7e9XxLb9=W{5Kr$r)89a?Y@c__ye9njShGA-@zTwubCO^{2fHDA}bdcs<`p+4%&D5D&{cnz8Q3_s2y!oVA2EeVD_jmc`|?|pW@Xy&eYow>A9w7AvMS2iL&Kj zsgP7U&rU2j&&Sv{yvwRiW5r}KkKbnqd5)7*hY!5l<8SWdhqPZNnmw&S4$IQ`tEL(t z_^8TBtBT4#X)Yq~&d(QQfoA^0OQQ%jTzPFQGZ-Xyx$OquMw*B}XIG|C@wowi7Pj4# zu;`(vZ~>C+DqW%?pr8&#WZK7C*dYWJX-YcjI*P2}jE*K`fvL8h-9QqEI)+vi6z152 z`FGgt?WBP5g<@;0`c^W(=Ob}~lV2lS{(1Ow-}m*t<|S&#ceS`9ct=C*i%27$dkfBs zC_&Au%f^(|=pY1$ytEwvTMPDJFWCF<($7)}H-lMph%u;EIa)yrmoyUyiE-qqDC8~Q zQUOfUjZ%0tYNrk(y=k`sAR^(I{CGdM*{NKLllSA%5$v{At#rXR?wY+FX?uCo@#x9K zG_~axaKXK4r6kmqaGXlVLh+c~rZ!DS#7XEk3skXcpB^%&xnF{1p^`gMD3AjK_|5*4 zuy}x;+X%s<{CpZ=!e*do@FFqR;ZH-bKnZIhdj=z#pCm&YyS6{Blv|{zsLDc_{$(^K zkB_Cx1)7*3s!oounsb3aJ|dlqn8M*eX6Lq9Z=`B)PbKATmAuiMNNW#hb5Xa<%FF-D zU+8PqXqRCcb$3soZZ|Z7g!dCC=kp*_0xJnSsfhhM8dCcx@{lKrOHXqO(DehLazWZ*Dm}$A6rIs>W$~wE>xyV>X-!@=1g-+LcYo`MQV$^ zyaWXa@uKAKs*~0Vis=9f5d_5O7w;&sQ0Lrs_-Z$UYLzI3Y?iqmRxsRjXnlDgbEh46 zh~K}Lf(&od2I?Q*y@=N9=VttUrBBTu3)()z6GxG!T)Mduvl2Ykjn=?!2ON+6+w;&} z_e%cTrlLQZ>jTl@E>RZ0oNI^CwXS~BwLqo5sr`d>(4FZXN2kQzAgqo;r?x&0DLAYdQr?YGWysSiGYh3LPF}cHz58r${TW(&U{he)&^#K8G*9`rmT@=qXrGHr4gpfrl;>M zb->F)(sX~um!%%AUqGZ%u_^-%3JDCH-cpAU(N23&Nb$p4qHV{~mo8J@e&7Hl`RQ)I zn=LNsBSj$Qdh0LZbGat{hV|3X4w0IPw*E*P09gj$GTXh9A9iYm_MnVW3Ec=-Q2jKj zrgu>>paAM9bqgWwmpJm_q;x^!j1LS)t@q4FFQz4-qF5?X2S!sp2(g$!VRxsjV51^> zjA?)WJ_{YyKFfB<-;UGCRGx`K&9Dh^p0sPszIV0`9qpf68dkLiRO{3_Ki==Fy5#S0 z=zuA{$(9~SKYQZq$QqXLg(1HT2JuuF93N9~+D{wJjx5X5{3PKdsPsU1xrQ7CSt2ms z(zwcus(vxD0y!xKyX+11#@2uU0BpGp@aC2OBe4Cx@q8Vg3|6;3>OFnViGzx~Y zeT|Do;gW3}k)h>|$N9-)|skvWC z(F#KZbv3~_6EGWVj@twbb68t)z znf$`c<%YJxOBPH7CUj z*7TS0#!L?Uh_ac+(*bnVIB~k3MSojD;jeF!xmzMe%EEsaOm3iYwU|)lzTUqC6sLw4 z3T(Q;5niu+)4gL9cCkAjLB+k#lf0$Kb*aJM|9E^4eh15D+|K#L!}`3Y53OgCkQq2R z2zTIf=>yf=3!T+0v3Z5613Bv6HjM#VK}Opa>%)BOG2YC_2)FO}8UNR8M*~<2JDo98 zjD9E~b0b*~Z-NjOme2rZ2Oz@sJ7!8bM5@T_-H^q_Yx*hm_^!jHVr!02(+r{^H8WpO zZ^?zP{8Wb+ml@_cQW=b|ODo)XB~0%}?vE{Z)X*|>JwETrt5h>}TbCZvwLip#N3*;n zMuG=;C(A$PDNHQXlyKrM$_uhD;GZXZY6*cILM0?=!Qve&y9oROg`s%MQr&lBvX4Z- zO0~6h-S@8egUA6}gG6PViO;fvyiX_t)H$Dy^Iuxe9lPlWiu6+Z>uI;)>iVjNhD#m; z_ii8jpv*Oemewo)q0G%Z=cOduZDsD~0Xj?fUMo!nG}7s%D|NACzT3sOcJv0w zm%`Yl^p%+pDR%(4%N>l1b*=+ZfIrbkuAC%aPN~8-k$^QV8WAKQm+L*9IrT<+8$-2! zC2bSVQ4PzO8bE#Unib#9kzZbMdc*NC1+6LXekrPp4%3%>(UN*Rz%pWL!yla?=7Gg6Mi+YWBir)G-Ro6t0_s7qAT;9VM@Hq>aO24}x;% zTmhB=4u?l26Ww~ zrD4*zOSsZ~8vAL=M#<4kmS3sD;-43y)KM~y6#q&DrPpPV8b(mIN4o8IzsN>AF$yGL8~h|9gRFu=UmXlFiJvIqITKSUwhtLE9e=-`}eiI9Q+&ZteRgU!*9IMgw;^B8uAi-)lyc zht8-n#-$ueGWqt}f93P130<AuW#D9Zrt8M*J$@g|P>dO_LGd)d--^ ze{_UXnk{I@P$su<`27OP^;;JXbzJ{;)FOjwi=M!1>^Xnx({pZO;9)_@^7Rj8pXlcn z48}VYwY>3Bz&&5_q?^Gbi&Zs-+}fz4-hsS9P3oYx%MZb^NeFTtBk&X+4uN#q zKRqc%oUB*TG03tYPa=!q3}Fa4^Uu9&UjTvJfz!`AAKrL_7XOQ!VB>F_aWXpGH0!vl zD;g$YhqYWCKUwy^fe|4%B|k8fnvm5t%bKMuS*9DI;BDiCPAqJcuA{DGpH93GihD9d z6UMH!b?}LEA#~k<1FjGDL$Q7n*GudxGb$W|crV0I!I-z7R5A&D^zpJq?^NVklZ}PV zv!UUnxt1noWz-P3gaBv1%izHg78130dRNZtYx=;?$-dcnw;24{AsgeIunIACH0+Ed z1Z?FjOZKBYP@(3wx9o4+97;rK>5{$|*P2-j7!ufdwsu8ejbNe{5)Qt<$!QiCyc;z+S*RVtA*b!C%50gSS0Bf})kmHCSVH*(QnDbEl?Aau+{ehBrrKtcvR3g|`AWY!9?y2624dUza=Bv-1pIE-dd?#AguKK0qP>Qf?_#6Dz~M~=4V+lXsbR=t!UElgAr#7@y2uQTTh z;1lB_)fV~)5^T5ynO2VNqlcI{Z{|{H9pI*kc-kVRjic~_b!O}TKfB?zGTSpx?8Qs2 z38#AjGCYPh#sC@4sdo8^c;Gd8*_W3ZF0C?_+4aq4RIj>!?M_KH5P7}4k0%;T&90U# z?67Ufw$Q1jIu)q@M-hRw{4e2dEgI31oIvO{b<}2k%`yxW`(wp5 zK)D!py7R2JT8I{TuT$-S(?Cdb^ATD$iv8u%af)Xqb_7J*-v7D{ap+w4ADwSUy_y(7TnPEzWqrwd@?r>IRTD;qzcnxK`-pOr!qCX4FgWD5a(Hk@EQlp~;`#ch`xuf zB@l7i$8$pq+Gk^6DBPYS05_vdq~6h)0(wU#LqWPf%jvFIs!g=E$+47zh6aV*qdwAY zf&JvI>VKDvJYZ_aH0Gc7(%yjzo67K?O#)ZXa!e$Uart{niRPlNHSRu-AdoX`teiRI zd^tCDof*0p8GUt&Ixd9731B(hMI!unP6lpj-tiZPTq*rSCR3OALPW0rv=uPPk zYYhj)PXTizs##i_O(kvoL4y$t`raY-br-}Frwq&C`yJjrgvPm>r~}j~NJT?dIqCYV zDb`Ce8z~E}Q5N0>1@%Q>TJ4>;Y(UUoSpe^6BE5-uIcBqM7_P~XAm&m?|b(KluJSPRo1IE?^d8ngZrQQljh3>2c` zv$vlMnu|Q1&{)|c><1Zq|HpXJ;0T^~&PEP|MF?L-d*`_@`L1K{>y+{`Xaz74tpZm;;0V^QAOK zV3$-wwJhDp5M7zo<0?p1f;Z$0GO_hHhrs997|5VgIXJ#xZ#}T)T44tm-FN(pd{!|w za()hNzcHZ!9$y70FA~&3psh8GO1ZiiqAp^F6Fdcj-t9?NBKhaCAHnqWn^|2< zO+0-xy`3#WSSLoLi?_#dHaxLQw0#r;zIz}pEAG~+#M<36)`b{8o%cYVHoSZXr4xq) zZ=i1e=0M8AP_lTH6yLXijf}aUw{>QS3>(QmLeF_GUPn_Z?)E%Kt&TWUxri#(b7O}& zjl1=o{92Bg=ungLrW^4CMHo^Ea;p4Q0C-6mpBAh}zytg{{7IwV}^uYh3&xN-00 zF>)~2=)&thL^1tIth1$~ZQ8acv`vP)0W5yRlGr7ud$q@vU&C^sE?{TrM$B4crm=$Of2#0$zm8k3D;=? zyKUb7Wb$4YiU2ZHbmnaH3=JsknRr7olCS>-&pdjc-~9@#jjL)`-l{E8x;tZ=Rj~=k z`k@6hSXa3dAoykkv*^v>k-D`G9@1RQm!KG8ia8?dwy1@+N zm=lA1f4-D6UJw8r4}W*@12a9gUHC#bc5R!aKeDgt5XqHVjqNstA80`C;M^uiZMM;- zphG6(69KtN!{0h)Do=f%XvM7_T3EA%8Z8z^eM_8K1_7(-kW3q;_{)*T6HTf3#EA(^ zL<}nHHGFzm+&rkZuAE6l>0z}cYN@N%2ZR)hs2v6=~8H;n{M z*!df5SjS28%gJ58({0Fw9K5V35quDCC{4)14<_AibhUi(#oAcFUF5QotcWxMn(}$U zrxI@6O=Gc^?z?XZsb`6NHyZ7-bI*|PCo##Eg&3p!OXc#hi04l$#zI8jwBjey%ijr@ zVhynnlU!w~-Wjwj60GRML%1P|aTay~r4mQTLfSgpsPjw{)?ywz`*M%REIeMjAV}wS>|QB+>%bpr=DD0WCkm?_VMgE-g7iH#T?mycAx8BE#CeNh{jrfi ze+sASJpLl|Ad7~Htaz*$2|gi$W&2i8vdI4nUUy=_cT{>Av4MA0ee-q=Xm&_pMFGor zUvnMYkePMVoe6r3?~0 zc~yA&MZ;7-T;yoSI2k~9hv=o{}4j45{iMyDYB2fb&_D;Pf65P)_*C*EOC>t@ovVZC2Q*{B9PYUFJ31*$3)^To0;)R&EiIma?4dod5_6%P-^_AIundtV ztHA)jt<a2;&&qe~}#x=L1B4XK#=Rhq^!rndCjXuVN+d+fjs@7g-!a zaKe}qDvx^yNX~D9sIsMQMPWc#&4TMiYKyK0QUk|Vz*k;GMMObn3@OhvhzBQcbuh59 z6)Q`N$Z(`TFge(9NGV|nfB3(4+DgI@TBm?dz^Ew##`8D90=z4V9eO;nB}L026W^Im zV!DekP9j@&nufZ|;yUty;Tu}hRUWN)R@RVH%B1KbBgk%K`TbSq<|Q}bg&>VIy-GMv zz*3F&ZGG*Hr}sRpp!3L2_@*z%^-+%Os?s*0p>ga;_8WYNmkY;nU`P$p_p{INdGwD! zH0RvV&p(r`?C+s{LLMuCMgJl7qWawDw=fudFNC*ihq5HG3U30ZX(exo#Pr3zuX>JvXhVNV4i>*uuk{hCV*ITJqH1@?i0j z15jf!PmlPvCHxOo zy5V>7K~ct}2o(EN0<8cv9$D-Ucg=x_Mx*($Ilg&jN08YW-P!B#8He}(Ks_IW+YA%* zE4M8kV@<63$yBbE=RDb+0b6#p4yLhZ?f6(#6<0%>w}x~>Hr&G*#<*l>9MkeW>~0dlynvkXS+mdaH?4uyb^=8=vgtW2duGZMmVf#M&X9QBo1 z@tt#fRq$u}0N-r5AN-Sm zl^iNM#Nk_mR|b~VGsuB03;VV>F~U=`=k%z#U>b*eLNB0g^1}HAw4O;q{H76~5w^Mw zsA|C1_nO5TWqxKcJ3$69PCmi{$n~FIHek233ytFV? zr22pt*)%8B``&&N@ztv1ax@2u$~8RSpqL-VUj43$*hUPCESN6W*7n;~z)sokF{9=) zq?mY$7@io}nU8@AbuD}ZNa1>Cg5w3f@hgr)!7}<-l^Ufo95ePQjGWCXUr2cL z?}su|sqo9?&&EGszQSEz6)z!Z)0TT~-Noa<`*V!>}@^+nP@amh^JT_kJp#SZhEFWi=Q zHQ8oX8z^+rX~d%h=l2E3NRBkrZ%AK<(`)DwcL>&jF0CE$%8kn;{+~KaIZXG$nHr!i z(gxI(uBXi%L*cIAg3f@lxO?%O6kFeocX<>+Q!wUyrfk)d>|mbs1;y54Xth_E9S3Ks z#Nb82=ffathV_%H(~-59=Ses=`s({iCH6{4@l#mP+<&k2o1p|C+Bv|heZ z$@q1O%X$$yaZ70R`-Om%xG>*4V{!h^HZkchMNEn0n>i>W0!$k?mOKS{F2T6-c6*Xh zs1xq_XDAyAnTmMQX-Bd(&0rILLWY%>`*llUVzYU#a)8NW~}Lu~~@e#iE%pHi5awW1Z6SkgjMw88D4AO9)>TT5l)I9@QKy4q&y2B#${v z;OPKq9Mt{L%0MCqq8S@mJJS+MkNGv}f8BCL64a5_YGg*4!OIewmX7Xu9HsHl7coM4 zK8Hxa@KInHwp^qnU@JDPuEr)a14OOxH}}H7Dz-(SP;~Wvw|xZ2#5?jJ{J?_+kH}Hn5gXnl z+^_%AQ%21R0VdntpW+3GZekw`ruL?3JVjj6$3SZ+EYs{uR^1+DxxgzF%;{?VBZo5i zpAQVKeWpc%MH3=iF++MdRLhS%E-yr|Ek6>nm#y$mq_)p|?qOvhh&Qk4Fp%{lKiIeq zO@@E!xNZOFx7CPT07h_^fUDN4jFi~QL`%nS4Eo0=pZC=aBu`_L#4gR?Y|miOd#<~M z$(NhGGd9?Er~KgO$@zc9HkFYQ=pj`Ux@#%sjk_s#u>&9$0DD6baKY-403C7Iy7@w^_(`hhK*mawTMR-@d^MWCHC@xyks)ET0 z&RAy%(a=dDXIm(IS+U>DIxjaI+wd zaXQDW7FvL+C`j8l8uk-MY_E>{LhEdP$k>1CB-&JYfJ2Ia^979vr%SOsce82LspCYFXLlOn;k!L{*n`_InkqXB!N=D{(`1JrZ zv?2cbG$+D8;l$u|6JTeiq+p$;)UlwQke<)${36um^G3jo{cEcI`ZFZs;y-X%f*xz%JHE zK1vNj=Vt!xeE3Gth^J>wsIqzeZNab{iLVm1EdAbn?|qpYA4)bA<2LEfUoIv`!C-jC zr^W;uuJPiBVXrDhUzxMa{ll`T#afZCZ`KEwn5|S0<#WUKr}Hcr{hOr%eWhPz{cpJ) zr~3Soml);kdm^R*$_~ha{>AoZIXX=^ozRZrvzRkm0MhZfb~bd`QAi%eHr!WteHQS6 z*z=F~Z}SG){RT!{?HI=%f(92kdxUwD(;6>m6X)CzkT~b+*USj6er*#9FZ_b}I{^!D z-WcqL31#{vQp&^AYodrmfdx?6vl8_>8M-Jk931N~5yQy_#tUY$2-mnyB*74#r;fGD zv`EJsnw|tYe75(|+U(S92m=&s(JU0#DGWamvMl>97QAT>cytP+LXXu-*#o1r%MCch zKNu<$t53Z!Xzpql?0h}bv!9{;VAjUK@)3ocHfL^@Soiprzia1XAgZBa>WGFSQ^)-k z64d~d*Z}M%D|wrtG+4;|{J1!vyAF%z3j^I(YpK$Q->Gek@GRG?+4@_#|K;rZ_U({t z@WwPRwMy$7aEGCu*CAqf>`JNYbgQsBWY$^+w#)~x>}_blYir+BxEJaUbbDk#(=VRLKm)CjAQ`7sm@<5uY3UXD||7!LuNa z{oDLuCyrxZX~}+Vw9Dd00aIM2ym&wcBoVbNe*UKZ_)Bp!F?5K=Bdg?yz7%mSe}m^9 zA81y!GgW8wY8E>hQ9OtB#79HCP>BkO5rbwPgxrl&%n<%W!M7C_q@V=U_~%MXqc%%7K2R$ex%htoM0Cl0Eq zOD~llFbXuKauR8t9T?Ti`jngp6sEagobV9ibYca)uv8a*$peE2n%LzR{#-wjYfae| z$sZeU;D(RcSw9#I`!n};t0?tBcX?Y+xAy#3aptX^rUe(Fj1i{zMzwruJvHyqia&74 zbyOFlA~BWl;=WM_u8}Dy{Tgy6$oX}PvUM&MO~-?!taW;La|AX-UAmKDKSGFZg8WZf zAMO;v7r9Jv@Z4l!Z6}w%sM)q27BL+I1JQpD%NxWMfcHlZMN0^#>nlK0EabhNkhjh( zNHkbO4L)&|Tt;wISPVH=7(>%53I(5DwdHK<9A;4nJ^~n>3cZt2nPmW|HrGtYfdT*J zT$0R}sKx)ZviGqd#ZQcxn^fUN+ez37l3U>J+aJ1~$K0Zk2F$-Z-vehQwDw~;p-8aV z8X+>SKCP{Ksn=A?nOf7XceK_<;LxHhj7ZrRHWxNQQREs%bS(ksnxd07x zf^4Zc%|qeZS%TCws^pPbtIk6)90=PDMOilm(0NxhMB;Wa`NKKmyK!BWv!dwPj))Os z0<90b@&mo!fUnvsFsb8nO5EdUm*8cp)!|hwZ^Oo0uW;}F?n@N42i67EmdWpROdT&-irwMm9ji91n{v!&fF z4MM3gyk-J_H9g6WntXdYL`EYJ;1jci^GZ4WIon~PjQZ|dE0buzPI$91@lFvBA6!9e zU-7pori>KWdRDc&jEffKLF>UNJBkxLrXMV)AYb}Ugl`Xph0AEql@D9_?vvvc!ph?8 zOUi^oA^3BEQK1fFL%Pvt%QOM5IM<_1;jQ-Uxm#`V?FtB9hd*QFW}F%e{SpcwQSL4~?po*)8RIiV#aVkHE=b=~i^e$x@WZ`fpc{g563hMf^hXZgsroCWdV z8@eL~OsXSf`{Q)X5oQQ1~a&?c_K zWj`8i4&`VRc{A;68=ttglk-i(k`ZyW-70Mzi8}AKE4-TsH`iDN#3>#qZg=0Mv#5Pk z`V}yQb#ujxGgV)XizKo3cc&aVPJX!Zcsw3%wK{nkC#)mBo~zq#Oa6a~Lb!*m+dE&b zSvfnlu)IV;C58NZ9nz|CB`g`UZFLKD=K(abjL~BM(epw<6i$!(&VTq-X2vOTe#mq< z#*fPX*3J*hE_z`(AvgUfOzuORt)1ipT>=e*_|fkuBK`fkhh$p0uexPrgx4At69yF^ z6~fvV- zF^&>5c=hj8eCuj$E^XOF(_!k~yzJv)QO|@t?v4ktbrL#>y7R{B>O}@N36xheQc{sM zv?g1i#jX%|As26uF@M&_Pw{eST9PqT4Sf(76rfyJG0=)l$9iBv8yxBLUebR74$w;i z{A2i5c>1$iprsk$GElon93a{VsXMduxX4{hsG?!47CkOIN93}K8Hr90NebKS`a?p_ zEG4t8c?HDF@JbqgKwTGOxLEPHSnAhI4>65Jct?+y9|{H_(Va=n#-F4Ex_Joh|K;Dt zYLbJSxn*gevUrwpiTDAZ1QvlgAu7bBn$V0gv7pix@cii(T++mrKG-n^9nCWoBgzyOhWiB$CmfDay)62PVnghz7I(;sF8 znCgdw6a__MxbaV$GmxxQ85iK7O zfyPm1(h#%Yj!0!Fdb4|cRN&wSZ9xG_WFs>&$e*(~C;hey5;cD?W>;S5eG&UobN zK%x>N$mlKs7Fr4%-D57nwqw!t61C9sznjE@9FyQC7Kn<7<)$)l-KXL41d8*mN8Mu! z{9Wp>*KNvBNZ*bc&??i54Bb(i@@)L2szJ2vu%CUwucMLLnDbO zBq+ime~=fxQvL|SJ(;JejoWelCo@2US(I*mnekJxE1mt3wG5jy06wj4z`ved~wVdwrE`rAmwu} z$Ds!|l+Y*XgQ0ASV*!{-#O35?1O9{#*XnXos`Iv?Qlx@_pi84YkOK`84?qLGgZmuq z<+?qffSP%ZM-xq)ZefGZFA-^OzXIXVw5VMBPk|7p&5N!uYxrCw&EL_rS z4dusy{uA=!?8=NG4-TEA&b26OLv{$Y^u^BJFgck7KckmAx;hu(n*17T%g6w77;{bx zO1$_#uK9=)Y!1fb2yMid&uZTF2+y_U8v83*kojmL^)iAvR$0G5>|9job`FIj*0aY0 zpD58ABOl6)m%k@o<>5KW=)0Xtedx>h0hkCy5BLl5(SW0*R+uiFj*q!U^$kZ{Nr?;a zq7$SeR5O2v4Ur_Sw0tbol1CvfN?=|q&bNor68IVBfk|IVBi?{tx0@87V-MjfuQ+y> zLD69H$|2$?{3N>>9pLq05GGk+2bHGA-1{T63NID^8gI<3R%pEAg-_<2l8|80AoUIo zMvxsaJh?@)eFn+LY7M`dJD8gOG!Q-I@yiO(d<_-G>otElikwEXT68oxkM? zqs{3*kXCSiL8v~TjiB~Y@e|)W8#I)B1v%6$7o8Y!W1Bc$`n4F}0{t+Zjh>5ku#8># zw8w1{_hp=dIfd{X!aS?Dk+G<(66uvxye$V;yU+??^fu_7sm668y*=oZgH_K!(Q{^N7OODI`(%Nx|xcqMveI!%1mL@tkwcNW+;Vl5N*9GHS z9NC=0>A91%d`;P zoa1_+@OzGLXsCtnMD{PKtHX!|(h1DFcf8uE3Linw<)l=cCI|x+kW@{s!bcLsJGb=~ zLhUQ758N*r65d{+0cRy9Cb=X> zV6XiuPTpqsDy(#5qXmUnZik2h{}zl6hXx@Q@&E=qs`25*z_oEFP+rKv0=Mx+{;)J7 z1t+_7p!a0x`d8v@2ME-$dcQb6_UT7vt1wR#U5Ffg8sXHhiWUoE!{;0zipR0#2nF6cj&<*9 zFK;(q`NTWM_p;A(pA82z;=%5}eD8v2CnZ@%u(7$uk+-&BU^S_BeAXPUO6sS6$q76v zX!YP_9+vYU{xdT9#ot#5Dt>g~8sI26AaQ^JjLv&9zCgVfQVGl}8|;d1kQ7#8vi{*2 zA9?o{rTrI_X5SR(_~e3DxtJ+9?Aa;^S1VcADRZgvG#o_*ePDS{2!yNRQePMLLT+by zkcfqIR+*et+{jAET<|qkq41!N9eJ$;cty9daOIKMIFrLAz8Ag=sceI(FLg=#gVP9$ zH0TM;Rt$yo8^2G29#AVuvZP;_&H^XsD!KAerMjp6j!(IDtkE*ql3#Hm`q=q~ zx|Cisl}bbbKj}bjASE=FyY(b#Kt$|++1T#qDjppB*Rr;w*cq|GUaByDk_)wTZ9u_y)YhY(V8nYXw!v8+EuoJw>RDgp|*sYT6b?*q#vTH=7TptOBr9Jn>?Uv909 zT0TjUdyJUWdXXa*+mX`&dhrXxcGIT8j2jg17m$)utm`t={ikIDB%UN zV;Q)dWP}bAnqsfeqFHuD9L$umwOo8cD5yL@(81y2{}m4JvOL7K;r-X%UX~_iB9y=d zax=^nm=w_*>dva?;l8PeulJ z)#%irplU{d6@>@xmiWQ#Jm&t`+2exs8yb?XGwrrAR(n#_OfU`iPr6&=N7#H-cP+Ps z2KiNAnPqzX?ovGRYQw*#XQ!UDx-$ck@J*D>guaGZ(73>_6qC z1t1X-TkB%YK43xtCIrWNjwmP85+zS`a{>AJOME3t8u_8DYW0e0fd?d1#OV zR>16+3rkI@->Ie;`pvrv#D^s3p54up=gX)_qzWk&gm2YrU=vv)afcgb8x!@mziojukwG2m7ijkn;ns1A8cFsV|r z9BlxAA0jGnE0{lueoz^PBj1(fd3{#pj#vL&yat~>%=Uw=HcLE&{d1|M8b0dHcE#tQ zwpjPiW3oq&5D~5tmTjN{#Oo4py*{^7Zdj?_oZ&YC>tf5FC&}J`H@Z~x=lfn>Elwva z7f4dTTYK6$sOTV#+vY9HUQJ;mSotdL&V`~}9T-7{&~bhK?_qvBtd|LAv*MW{k1faK z{3IGd<3i?=ixuC;i0*JaX`n&-b*#;vQ5P36Z6%sgwUyv?>KSO;#65lx_fTc5y#=RS zqLS{PT7`9?ZlS?#AT<=347%D^le$XK_dt*$KMjx%l@&s8`AUuUKEN1Xv`lzy&5Mb& z4AxGAi)v$+oN>lqZa0HnX?ZT{S7JVFD*?@J&oxYFq3Gp938G0`*6YXKV#Ljui~3@1 zBsshw511On2Kon?P6#WBI)u~Eh_4HfK1-)#%LevWThS%7aZ=;M*eJWnJ*EU9mA8EY zeyhv-J2LfSA*5z$U!V)We)nNX>kj(X_(F`rYQIlbc*dUeLq?1I58k1TpSLZiq-%O~ zSSPp$Be$zdJgl_WkjdqVgl8(M=fVJU%L#rNA6H=hOxOYaY>rdc3FsfDUS{WFM8a8& zmhkX!GOnhL0_@SvoM*n`G+jKvQ0%Q43FKlw>xjGlj_N8YEK19_SntE#CvI~b_pLEv z>|$#TGkCAy zQ9d8$Tx9N4VhoA#Dy_Fzza>-PZAZlwNFNShm&OP&c4=-ji^O;-JJ3|30S8i)xT>c!A*_Eqf+|mU zFLX}xCd@8t2i#m`X+p{ilWx`NNh_}3e>-$NF7|Oemz8_gX0%{F%@#DavHdNT3UV7$ ztb1TN>JwpAc=Z_JAQ&SBr*v`rmG-5+(V>Pre9L1Z_#(|(8MptM@-k08YW$t6AZc1RJt&73yxU8lM-@Mz zOGDu5CIF1pgVtt)02iJMP0{`-VH{j6?Y+^ckjk7`$vOKCyAkq9zx6p*PSKDu2SP-T zOEPu@k8J}Hf1D{iW+A6Su%s`L5Yl=wEtDtbL`2>kYbuR)b5L=_xgW$9P$|NEtI4Kr zFcWzn)Er#7z`b8ueHRWqg40ea zZMW`s#0A;jZu>~GEM`p$QbB+k4_&x?T?kASiVUQ`9Zkk;BArRiT1-&SGK{0-iJbu1 z>avtBz&FNTCPaks1Rj*>MRkxMZC>3Y4yXyRiTE9Gi9#w82pBt})5h3z+O~yXXeCf@ z)o1!~FU*3+=rZ(;Og6@gx~49qeXuc1t4MacElEJJ z1iI|!S8Epk=X`A@HFx8tKFYmFS)JaY>bb$($kBt$Usm?h1O`4F35o~;PapF=q~1m< z;JL#1o2YUZmJMz>q3^u&IOE$i4{&eWvNMINNH4u;d(7# zI{p$}of5RQJ8B}+RPW>90{zwWA*Bj8zt+B-!1i6W>uQ@<5SX}T(h(zbab=PHGrDhR zTWpqU6x*Ew9W;w|56In|u9L?ThB@c4*8F(+XkQWgd?X9UW*NP@svFoxjKzq<7jgTf z6Io|vAkOshjSC*_(}PVmWM(vLZ6P={g0j{#y@4xfi4t5VXw2f)8X~lzGRJ zn1C(att#k4tRF2E{xP!jn{e$N2^fH)=adx+Qx`j=hgcRWTNt%g0Uf_Q*kb}O!-lQ0j29m(%}UQ0n}6tNr{1*!k3G`5=pqWSMA5T}h#*pO9GX}+bVuRA2A}F0-Bwx(L*_sYmvh>nBlV-(cm z4E|Af4N(3>=^t`IW8jaf`9GDI_VgDNKZCC~Hn~*uiRizH^SN!i-KD*p`cmG`DbuSJ zH^E(I*wvjsA0mp>%91EC24OZdGwwtH3%LA6_GBBJ%jn2Shz`J-BkqLVQYzeCzTYoadc$yJ z%AAd+J;-nF8Pg#p{<|wi=32vQ zw&+Tlh;EFyVypZyPl%QXf+AY2)x=Ka7kV~D&j@k0Nq9jQ*)&t2*8Fk~Hqwv#xhtGR zn<}n)l~9o(Jc8aR!4ZC_^`!{Tl7N>(d~6s+{qtEbh7Gbm{ zeZ`693f1P$WCk#A-a))iNs2;Nvh&jjV^hRE)h#caRnlz(i@{~Hp2+@4Ri^E#1s94D=xO{Z-x-V3@s-R_TNP3>IgSnfX zw53IsAXJL9_aEfNPRdm$a^ijE#hjVao49tNmq1KLM5ar{4w`tFkWlwJucmNN$cIDP zzZ>5RoD*@@Sw7VzT zhj@7pE4#<4kz{baE>P2=zV;#@W_ZyUs1ae-qPZ6(uIO3vKBV^Wb1(`?!Tsx9w-WFjXVwYVtGF@i`IC zsp%V1rLxlt_|R~^LaISQ5_5zTKBTBq-y8Po^1PD@jvh8(R(1^WxEpt?Q1$wg1^*sU0!>&n+3GRcC z7=#368)pC_Hu zzS+9K|FOwW;{S_-I2V;bq!Y-<7f73}BnLUMjo&YhblI=H_LgBqK~`}P=bJ3ZQZ5!b zSzsxAoZ}|r%CB2`#b%({hmRgXK z(R@l$RB3!WXvz&KqiXOW|ET*B8S64Sti&WpeP`LJJ?thmy&au=2R^??ir0q`Mm6Yj z!w4>VNiz6gN-snpNIb=e+BCn%1b0p-R7M@GjNDj#_K;mqFA(=tL(a9wZd<{1T6cm>9Cs3S=LcPJtTd zoX@|v3fag9<9LtK31U=3*;>pR&K{jtHZ6mDsnMdUV0{7DIJ3k^%*rsvyNgk4pc_Lh zg#RaqGZQ1+YcyoWCaj!76_OVR2arQT7++Wc-?v4Z;=vSZ5My3m%q@%)b;%VX&b4UQ z&b#WGOO(nGVF~R-W4Po5xH~RAS`!MQv2pTD_xjh8ra$fz z*Ypy2sk>x}E$n122~L`xkMK`WbC9(@=n{!>;CFC&R1}GC=W1am2j;(Z5@nH0ky<)# zK&(>&Et%XN5mRY2et9X|g*P*BBx5JKrb7~(5MJ#|EA`WlKuCY8200#}(3Tz@lOe~P zpS1TrVjHpzX;-v&WLmVCM_A<0#vNeFIRzU>M%67bBMgJsR+{m*I30c~k4*zKq;jv% zU*$(#56pv~@B}M1siV2cLB<0*D_!QP%9;AZ%mF~;&Cie)@F`8AoyXEzpXbh|KXu&Q zedcZ(Z=MERrz`^R36W&LL>;YyuoOsd;&?=0@(InF?CjY;ewFM*e83c+H*6b7=4Hpd zCxh=v*pDUiC2SP3>9PaPS>vS<2Q{$04sn5r`9B2DAWO}MV&p#0We5mKe;lB8TpOmkCc)dT z5XJ0kA1oTdT*bL2pI)RYO+)@hg~8)UyBe8!_zOdi(diPSK`~z+WEu}_R)pv-C7^a6 z)3uU7!48RxpPJ-K2n-j@p_+~V?9NuloCjsY=Vip0{h>%IuQnAt8muMNEU<=e)aL1D zTTF?sjThM`dFhfEA1~nVJr<%cz*jWG$OQWfv}otuahfo_?NOt@MOa4~i5~#*<;$Icd>7VGf4Ghl~bB?B=Z36`6`@?<}hw`fxR zU4V$&#`nMe^AyaW#^i8piGDaELeBp!2W@j$)P;yVPBfV_4ONWP#8G}|(}8VMN?2t{ z%E;R#XMUxsix91F3v4$oXYEKMkMu|iYUqev@ zJhGlW;oQyXj?}__#DXIFJpB>-aTL==9{6n|ept`D!*;)Yl^oJ+Y6q6BE`^!*h$o50D-39=jCU2nTRB^KcQAXodQ|~qReNpK#2Hdy;t+Ib7Vurgf=P3u%^jhvA!MHOBvDS)^a1m z8JXJDPXZ!NQ|NU-C)z~GKliFBw=Go2;WQdsyjm>0465S0|?9ln1N$Rc7~WlWV# z3%~BQR57g$?rSwBEmmL99p+JbzTNLhiwwS^tiAVKxy9-_gM}o(ETV+5Skd2RKm#?5 z8Hew!Y|Y4oNS=1Zy#{lF-*Mkt?e9J>_Y*ecMRW7--QqfQydr~#%w^xNH4HFQrAiaI z2L&U5E41(lhgb1wz-#XUzw?E)mh2uN_iA3BO5t1bg@hz|{OI-p4DzJ3<^>V5<{A+@Ks(9Fts1 zL8~&uixJhVazGmGZDrW#+KM1X}*@|r9zFmt9tMzE^7~_;@(>6>xOq;z{I4J##3SWuw zKlnA@NNM;;x);Rj$ETp1(%3g{z9ci;i>}SF(jsJ(UnE14F7g;Kn$>NU{YF-#-85SV zz=M_~r<=Y5ryLk1ggHJmf|_eS`Yk*6k@mL7n=DLU{O;<0XLnfGG8(xX{V!8h(0_uT z8&b2~-Uc!-6^Tj(rLXN4xff6Iw>)UP7a(bis||aZv@m?#ol6qB1e&|ovZA`#MM*GU zFsbO3?Tc9c>Ue;DGLI5K;&PoStL+yQW9^+Q^(E(2uL@EKD0L)jGQrM|%N$fNm*%7s z+T1-CQ3?^v{Ie2`r~Ih;o*(jZawCl~7q-i!_O+}(=_w>xQE+*AU+!|2p;ysnZCu~h zM-eGLafm(5Ff6TC69HYMjIek|?z$Twhr)zwXww)!^8hen zPa?-!O#y|vwN+F{uIo_7KsJGo>_%(|fBzX3bxi5sH;?9S9<&*|}_BIJ!-4l={Rgqio>b zZ8WUEhokfyH*?G`{@wf8$88lIFfYCjcCmo3&MDuiXntrX&DZP@4!J4tACFKBU?XfkEd-%Wgc9l+dHb+%_0nS5*MbIq@05sodeLJ@qz zu163Fw&;ckSh)E8wr<)K_^|eE=)9(ebX7Th)jqE&o*Hf%6F{-xiFNRwV{qjSAzjGx zZQ0c?JpTZcZ4k6+V4*stSsx#`Z5%ZE2{VHQbH;sDz~n-t^7WF}eh(1HPp}g33N8AeBerIz!uU>2B&COH=(i5Aecn5J$!32RY}P}splQ~ z5bQk)=xI|6X;R-MvjJxh`jG)N3K)?e4{Ra@I-8CT@{4(0wUzb?UJ4l~q1&~`FN9ug z{QpAyRC-|1&@xsW4%S2Z8F@q>ZEapcv#G0i)(cvi;@rl*2Mgcq?x>e9u8Dx^#2-;5 z-QfNPEpQOWPCY00&uz*UtWhcYf6@DrFp{JdTE#oVZ{N!#Wo6!~N|YhV=uf|2#bOHU z$lWBPiVd?)yu>bHTEjD6gA)7G9@kFlcx*4qqC=K?2KloahyPLZzq{NIBP#>5g=zF^#e_h z8Y$2R$$mb8(W^Mlgxq1B>8mfgh5O7x3_rd7Tk-U6C z795?nr#4HZMV4+J71qk0aBizyRxBnw0QqxRvnQ!jGw^sg3f_-X47xxpAV#C0EU#3f z1ydi;p19r(j{pEE{A98f|NO%SWUY~cDPL<5)@ls|Pfk`JRJuQ*236pe$9s;m&Z?gU zE=f~l{1aG_4Ev&Hb#l%CVVK4NDujc$=KUDwx@QaIjz2)5&$-%6%aSIdZP2~PKOyYxe*vI&7{5;A3JIR1S_XsG&iqCfnXzE~^=l1O zUz|BYC@29QLI7c4I05yT+1vx8Vy3Givq))!tHi6d(->9Bi&)0lZU}fUdMXjEp2ay5 zt5F&Cdf@NE-m0bAn`>I!X{=*Guh#AmSgP`E5B3Zb9FL(76*`cS=bdO%ETn3>^Hmhb z)YVj`rEO=^8NOcVa%PE%$oI=bn+S1zPM6zMUGY#XOXC@5pgFEX(2G;#Oo-}r>sK6% zz0J8IEE@{iSxhII2Rf&AIh6wsgf#}+NHrzCDNN{kAI1)1@%2k*WlmsEc*H4w(RvTc zzwwJfSozKM=q|KjfL}$NKrkAQ{QMS3Y8kTkKk5J2pO~MV0I?(RE3AB%s(Qg15`0y7!Fd-=ov5R3NJo=~Kisj{Yi(ZxroarSTM!W57`) zGlYJ+Z~rf~C3ymUM!|}g2c9U7qF`t<`-!{6EnJu_^XW|QyW1H0N}67bpwDGY;?mR5 z!0Wi4fJyDUQ|Y%J)fB!+RS%)dX9ap~+rK|#Z9KWRTdtE|)NA`ueD4oZ6ccO@9w?wD zuqOv9tV+8X?~kiXMs%SSdwOY#tqQy*3$7)lG}BMB24Y)oc!#>Gm8Fe2zwleiUM`|& zt9g;58KwYF3o(0WXE?0x?5}L*DQm9`?ABNmJJ9A;UI5d09_;V{|33i0dhHD-4jN$o z0U=W6)zL2wCzhTR->tv4VzksW<*d$&_2Fn=TQbrE)ij@|!bXj-)T^`4ivRLdsg&>@ zJ59H5N#*6xrW8hsI><^SKR;AimQCFmt3uH|;OIiW&K6wmB5+M+qF^o{(5@wudSSf; zgV2c_4y_14>0Xm1%~-gkrv}#@uL+Ap+-se5L~I)Ci>Wf51_HPCHra`nJLNvG=SVkC z7Tj}cb&(XT$i(x%_DM1ncQm@G;Jm%&J8J)RM?6aPpUpWeN0M`W#})Trrc8aY^^!hu zexUzD>z-wQ(1vGmxFyafwQ zezXKdeaSQN^;KUjzw$0dkx5|)xe?*V@mXTc#klkpDkdKQ;{*ktTI_yW>- zDtg&Ym!QCiDalz3kOakDvGIk+%Gb5anmo`IdC1H8+L?Af*MftvE2x%F$rNM`daBG- zaH-S|#mskRhz}EI-9;#}`RE+8e*@8l^zM=iNX;vZh)@daG=vIQcG!CBb5og| z5%WiAn64{Bl}(z$C}5>esv)!?GLlqG4^B7fT_TTRQO<%B2$wuikd_k!3@PyxW$pTm zsDx8{u&=ok^^V7+h;-j;{DJ50y^#;`rnsf5&ZgoSs` z$l#8AV1wc)Q^GHm{J&FE>ISq3sWmt=ON3MvgL1j+K2#7hguzd${(r!9GNI@~0uQi2 z$h9Z~tPpxmm5KRo^=dHtnimk&wF1$u=PAb zsFk5n%Yqv6Q9>h`F!^i)*Hx(hPtu^4dE>q}Sj zBpai9v&UYslYoDOs5pxi{&Zo8IeU~N+IR~;cngPsQWlFqJam0QA+ctiQO${J-Y#Ns zIkA3+>6X*-d(+0KURW9_dHoM*u?XJ{7W@jDwZw|mGEau=4_Y7A6jmQ@+;m5^1Y3c?1VY zzWN$|rrP1-RFA>@ZE!}Dhbn6;$Tw%34G+-YVMLy|7*+R6Q90qsl`dA6k;074^K5Nk zHupfSCB2-YSUV5J@YeSVT%FaOrQwG&JkpdU@n1B~^rTX#qUUaPb=ZQOdGY${gfZ8k zG+Gr0e@^qA{OAThV$aHe9|00DkN1*>^7%~-@o&dg-_J<#jP9v}4L%011W zLU6*SZ4|_}I8-WAIuek}+z&#s9}-WB&B6_lzE|(HcJhp-UAK|^YVuNlb|otvWpq>l zQv=cyR2WIDM%&V!mI*t4wAVI0jF#grZrf-8R?!7V=|X(r(;Wl*v_qWU3Rhu+Ek#oQ zqzAUq!pMeW5YMm=I!{|#f|%*%hKWx?*{TuigHZ8unyUBib&6{$v}bXO5XhN!*9gvh zFM#Q)O2|c2?D~rAIONMb6>RZnOPOnLEN_TA%QlnJ|KQAMqGw%6-H;oXE9ce@PSo;O zE#>dic;&}m7!22CW0rl(ZDNXoOp~0VA~FedmrgXsrZJ=Ea1~)x9zkA~hdZYt`(!KG z;GoCPBK&p(JzkvEIBrNZSHz33N0%{a&qYyzREYBS+I6uqO)$PX1fgqk{g;@u%)`LU z#>8D?RgHLTzto`P^}V*7ERc9UF}wQFydl$wY`pv1PZtvN09*{9>hVGQsM2X{)a5;! zb7=55QedDe8Diclwh@S+KCptUm#i3|!|D0w z0WMdFIc}h1TKqu;3H2)7!?XUwKkk!9{QmAHU)yss$VsnInSJ$9Fl!lBoVhSJCh@#P zWG?K&y(tkRbpmw`qa3@}t@f?g+IW-)=j7%%jV~RtK5aY0Y?f>JaL;uRH3N^*I)jZE zDbHN-;6vh3Nxr$eXdi+&uWzdjRrj%r5>9&A({8Uh$->sMM4~5fH5(7=-qRmgIQ*0eOAV{TC9J78M_hqNqGYM{_~^hbeGaLgI)y5 zx}Z%G8|qT-LdcmaX|d^MxPp>aS*|rOP2Z`KH2Ne9GkE9wjNt9cc>UIDN;=GypYigd zLUqZ)Jx-TUL)*0~ruAkZ{9QEAMDCUeTF5ZJsn`|j}i}?NGC`Fd%nG5XgHQY!%P^gxP4>ab0Y3hBF zqpVCcTdiE2DUpa@N_oVAnlmlk+L$Lds>(PYgz`()AS-9>8Nq&n7#*dOY>MK<+YPJJ zfbJL1auw(HfWu(4YexrHrFocWZa$YD*r7*>(<&}R zTf7t&1!?A@&O8(v>(&G6ac;n@cw;GIR7rqkUtAnLyW`LbT?`j2j?`=t8b-Rg`)l`A zGKJ@BM0!g^GIb3;9}3DSvK;_$q!g;X)27iX$^tSFnk!EmcQZdXRn!~ec1Z!oB$YLi zckM1lMl9XDhjE;pHqT7WzS$~1zv*UH{+2UZ2SGjTw^4E5_vvu|&z-j;^*I>D%}5~> zF_=|0TXcMf|&edRiq8j#F6FoVbu`6ZbHdUmm zEv)+pni1xHgtXzMy{l>pU7P^D2c?~yFOfu7Pao%x(7jb-E%2(_ziX$rR)h5{Z^=2n zzF8T_MP(A`R*Wsy7u<1AX~Oo0_BIM)arkyaUUqq4BFCn2rQaDfJWnpD4eOWnGLB6o zLx8qQ+F+j^M?wtqh6*#D^1w*dmf%RYq=DqwEn8OI`+hZ+qgFFk9wiQXjJeGjU3s!Z zhaqSw!LrK+Tn^x{TA)%GIsoE*UWKW!QZh@vPt@{YWql`3ozh^S)on4i{EI27d~qI3 zOnq;v->H-#=P@Hj_(EkAIsRn*>TktvcQGy%qrk`sS@GIZSmxlShs5TKjwyTyt6*Q5 z9@3CK;CS_dI|bi1;Pq4Kb#D4qg*HB17*LcY>}WADE!m2t0M1tQ=dnfMji4!?G{N7qpdMtoUiVbo*+eFp zesPSlrf`ViC{6G zPEMl6Y)>CqH=$Vk+L55*7Ie-x42z>fjEZU#=W{Q(new;AUKDJFD#qLRIa6=_5>!p5 zlD9XJ;@kwdUz2S{4`|hY=AOaa_LIF`U{g6UL%7-1tZeylM>7;dpt#nK&%^Zyn+}s! z5sBZvy+@1l3et;@S8%B+6nyx5`qM#2&aDejr0j#hkB=4skX2n$fuI_IrUYx|UER-c zH5%#%wKTrN$zuebq&!IJmxzywXwV7Br$$~;%Nm(<#P6CZ^2m}syqS@Sp9wnb0v+%E zR%L(z5~6*UApho{8{#tZ(?tzb9$|k%WcorZQ`N3!5Wf;$Ic?Wnh(}p1C+8KhUT~6* z1d*Q`JbtR(Y?{rKA!e!P&VC0V%^X7CJ1s%8V`#TiG(!ORWuq!|XCsY@sa6LnW%_qZ z?4*xwiHI;oBt|N;&A;?KT^c+KwHRS?$W3Q_KACjT){TNIkP|n+44c=0V#;?56<>e; zjzk_*I!~e0dS&MMqeQPb{O6`95DtaW{E91$M92hZ(K?vHXKA*Npe>K)&lE+@kce>&iZBeq{!AWJn_^5i$^&Fw)X&E)j?Crxv_PfX))vZb%I!`2f~Hz4p%c zMBACJ4*^L;dPRIjQ?LX86^x_m_lyG`W>)syZTnW7;gOu)^~#Hf4rl0$j_SCvpvrj| zNKjCOcG-j;PkLsPR5GB;V(pmnr8*?sG*@;iW6~La$36wbcde*JHHHnZ&;fid zPboK`$dJuyf9B;NMV*)7lFWF3UPVB5&$G2*VUUAkRX;f0H-$Z(8NyRw#T6Tpn=@98 z1u(5pTsh}B`5qBzcMD;qQ5a7iG1nOS9>F$_K`i-$>um6w$)E}ndrgQ$CLu4D5V{i~ zmVD~L@5^8RFdn{O9 zMQAX_33rZ)5@p5l9pc0~fa#I%GY}~-v}rnQZ~`H=IyHg3PJ1qhaK3c=MzkvCK>ZS+LyT>P8o8o2|E*YBm9qpV7R z0aT4HsAcI(C_OdoY_r#ltfBEjtO+9O6bdnP7n49jlFx57Qga0$U#!s}l{zE0-k^R^ zGlO%eFR)ysgg-B{)VpX8_Zf2Wvcn*>WUTngkIBFC7S#gAMo{5GIB~|Jax@T@d-;|& zVri56hvput1C^DmzLnN`bOx~W_=0|Bg!x>i@~&*2&y?=%4Ikmq;b3!IfTZZcy1GHC zZcVzOM~M{XC!Q8PkL2x#n9CPvCpg6iOM=6UZp3D6!RganmhwtE8P135u z`qD@jxU!M9HqkTgxemU&S&qhTWCeprOp(!+`E`074PSb2b&tOmvN05U_+MvEaXT)R z>v_iVHER!Bm}OE^(2IKd0cdx|So2r;9m5z_JD_H@e{d_cQ~9xH z@m^^C|Y3^tthc!NFl;C^J78)=a?gYhAXxsd>q-B?qgug(urWNv@Ru&kl;f2(_3jw8ojHv63$eB%LM>wsM`sQ6uYN@qC9OQM5 z-8)%`-=kn&LGk&yI1t3@lmB^yL*Rk$aSt?19u!r$^D*ciTbiV~O%aVQ_WcnJf`ioSkZDT*$#%tc6T;u+8s)r(srlMC^ z?WMki)*zks5gMbH?F7Cu>)!IW!+cd*mzm(<-0L!+G|T;@Tuz@3lxH7Lw36!9@f(Y@ z%}dCrZ@=ccnrRkB5f{G&{^#42^&l;TWi%kyb^U{ivPkJ$LKF4Z%b*1k{Um#Bz>{?n z>C)N6v;f7?qpq5Kdx^BH!2q@=S;3|TV-PgJ9dOTu1pSwmZ-cx=Oyg!0Z9ajL8IU>D zCB>>n=sNeDchd_pSwnze?+F#G*qbT8*5ei)=$#&+w0jFVb8BHgOT$d)z{;h-wTUnQ zso)O0^7#+ZZKY!6vN0D-2yQFjSH^D-geug8Kb>)5!TOmAD|?LgyX&Jz@30SP>V?!M z&3WiZ5u8Lc0lME>f&`1<5|cxB{rLKg+;$3d?Lx{l#C6wEmR-hr)i^X7+cime#@+q- zM)==#dIePy*9n7mWqkVKP@nr2o%{+RtqGe1+msT{#t?kmeKB;V2D$s30bkm<{>#Bq z?|sKttbuHU9{+X-2K8Q27&P)Q+oo7FOH&-#koN?MAY)GbAxrFu%WWjs%(NA;EEf*h z%O;jUSIpH{*?IQsk{5b$%91GHQtFPprH}5Tbz7#uZb{RIQhoM{B|MJ!1OcrwME!-U zaN%%eFuk*uINXP;#?q4G?(**W z>J08Rk<_Y&h+TU37^Y=`ABr17YIubjy2MH586}F{a4A`UITN7scRhArm9pi|z9@-B z*hqqGUiDwgEwg3sI(xMZrp#VxOAlJ8w{zSH3Xz#j+d=`q6nCG|Ck=SCE(J6qkU+^p zJ5W#Ay1ZD34dY~vIi^=up{4qDrEW9gtx<}7t*b0%#t?F>~7PhQ{& zRLu_-&LJK7NxThv8%7|SzRip4N5LkzbHA^1OdV-KT)r6z^zw1$o3s1^tM%ZikrHMQy%zrpN$Umg|Ax8ny=2KS4>MV<{CGL^^2 zJj@jijMxK$e?DGQ3t&GL!86lrYD@6r;_nAZvRRW9_Ry@oBTzgBr7r{B-!;wDs1M3> z?JzWNS#cb3IN8m$tyI1y{}yxaR2=lw$WGVWC**nG5sQPpVm$=pZpbu+^UA--4I8GP zJsz&K7LL#DT7KPXL&IL>;&rVIr^O>|ykxU?#U!PbC~LTqC@>GpE`ZcSMkU0sO%Fvb zOkLxT@B>Ok7xH3!L1jOSmYfygMunWfLi}Ch)CYySfHx$qODOPZcdtJAR=lA9Al@ht zqnB2k9w+L8?DTs_bD89pKU?m>C|7ZD6yiW#HUHj zHQM7)ZR|3w$#=WT&C*k;`!Tq7*7?GAlB6)U17}&KB;fSLDsqCfrdC!$qN(*ce7BO0 zgvHQM*0Ou)98d%e7rvi?&YNcj(ZR=vY1R#z@V&?H?#>p(%Kyzbx{&#^sS`!yw-rOM zl&(Gd=R}O@9Onojj3=*1%*$ts?}>bci#M^Mh>jZzoAmurf8{+PyGD>ok==h-LE;!$Ga(k?S!*vP>nO9e zg6Svoq4iuL`G{1NBN(Of9E|F$G6SbS&;pbmS45Uv{i;vApcw8SB|RpvyJE z8z~qH$YL(h%CGbyoV9__7F#j!BK=W*qQFlVGTSZ;8T~@2`k$-057(!ycVV}D@q&9D z1`pMTxl<@f?8;U#MY7hc=u91 z*yQ6I1`y=`&&3!~eyHB8=}#Q#Ry}hrWMEoWoe&K#WXJj$qBg;3W66zY-V+>v)F@=< z*2J-Og-u!a^1p5m`NFNeChTu}hMxk&&;lZLLf6y{;^)uO@ut0HU+YL>7)<)8&nD z{V$Z~Gh~4OkRHtFQD*t}4-0%x*4Zmo)hr#6ncU`*DD~$8TqKv!=@YrSKo(e$93bfy z)#PuH?`DNw#%aG}UJKa0b!w5&iL|H}whv#^17*(D+^Fw3l=;$r5KnUyiVr|ExO+fX zC6)_pBB$9U%8L0Av^u*BLBsh!Tze1w>9Wx71T;2DO{r<2_jW+yTgJ4YHjTK|iE@7M zrL!27dDCCZeO(Us`qw*w2+b7>XIDHZ4o4fW4`JR7p=8{&10;12{Bv7uNUrqXx{Re$ z%F_EYq3N`C8{aG4%|0y`@7&58tWuakGkvzH)Q>q$t(6mrc6?y@BqS}Ig~hoZ2l-AD;`V{~(nG;=5C*=)f7wVy55FElSkT^8H(|7_qRMV%&LCg@Vlim~l z<_TFY`{@>$Q&T~6o&;$adOR7lAGc_=F8)H9Y%aNjgmgs#rL-yzr_* zT#xbmO0=0yaS12i6oBYXjAlB+Q9!x!!NFu3+JEL7S^8A2_HSO43e@buv9(?q8>Ysial4| zEAe#J+de{4X&XQ}oVa86CH+7Wn2y1-7haFnYaFZOXP&C|b^0Ozl<#%F{@|#g?9JLC zRikk%HkNH=*}sx-33)-?FggXRXx6vl%+iPn#-%Dcx7ff}y;CFzN%6A|^&z<{VyLho z<^O*PvUQ~`pAR6p7)u=fnrJ;*U^xG01EJh%Hgl?{;y4nDk zhjJATW}??(kgw>E@U%5jrAwBK$k(Dng_F~7Y3#`W4zg`_Us~SJizLqn5;ALaB+Y>& zcQ>od5}RTE5GiN4UGluLO=Te1lh{B9-+qEz;2CQG^L7jfOL~+<8tJ>gS&e#0(aM#* zVu>Fv^gSX)R_*{xAB|B={lS~aY*p=pm)v-=q)3_bboTg98O3Zsy;AtRLelD!G3;y| z5C)Of_E$$FiG?Wv1Q|$bvg4hysDClgt+AG-4x@R>k*@07`Q0`=h`!P&0)LTQThH;vcY7-(2RD@g|V)AsQ8E_kkxx*!RbZi z!o-;Bu{fqVGoxImX5|_Mr)Hq2j*j-x0J{#~IR>#r3ttSqX&*H-;Q|)40C&^3Y?hKi zh?g^zq)YK1WslY#PH8aucioT&hIzdL8f5(mEwWmtLJvTmx#0qYSRynu8`hJll&tK< zILtU)ix>ZGj-L!CS|q>nEU(gP8Few-SRLDL=D9|>`N3!S2l?2rbYXswXuzMT2M7x^ zIzT%K7l~WB#&Z0w@iG8bhYRcdr^w`;EIj9Ho_FqE))cupN6Y4o*vKwZy43rGi;uSS z^o)jBq!h){gdeLHX)F&!ZBD8(Qx$}8fsimFJjUr6;n~DZU)?(^KCCV2z23eBLOl9s z;L|{#B8-JkE_+c-y|D>&*a4~GJTyUdgreryNdYvH3lN$z#ZVA(()*{3_%e1lGB!}B zZlOU8YcLRs?Nmgzc!iWe@yViG`~55Xr(q(cgAf4^y1-W1AnqgO2(?R!i6S(hKFxmm zYzIK(ylEjDky?DzQ#ts4^QSCI1QiIXe#P^zUHjG25j% z4xp5X^uv(-XK;VLZfDogqc{V0XYbKl*A*==K9dtmTM>6$5U24Q4 zdqPg+0X%}XG@oX8JsOlA;U!wSD<`}ct_)ah?zY^SA^@kwI1B;UubW<01g~Ck@3vGr z&cop3ZY5;wQcu){zJ8?Qc5b!x!XY%G;67&7Z!$wuZJd9g7kxSfyODo(Kj-;q9cQ_@ z|6tJb7CLw;%G_`xw6yOU_ReM8l8ZOe23C7KGts?b!TV$#LgC<+}@S>r0fo>%wZY#X5sq<-;4R zV?Zj}nZFsqX@ph*Lk^%#_2t3L*qaN9-3MDs13m zQn z)0pxM0Gbw($#QrCpX|;=7yhgx@|}kDe(`SR7QonwS1}is9z1@Ds(>=&YI4|ZtSgpW z(ACd1e5LsVX1iGiX%gBHg#A0!%S36Yf|`fRIU)%r8G&_nc_&oF-zF_9W597!0>M^t zT0%>O4JN>96)4J2s# zO$&MY<(SQji4@8wMKF^b{Fp3z9kL*>Rc8M~Z~NmXB!7yaPe2NBgK>|nc?MO5J#JmPs0a{`jG<;KjVpaKdTp z9TfZ&mo@Q#+A#i3=rU=OuRSw*@Am?D(^RJ(z#D*@pS9$#zzfF_`w-wy@+o`p$IrKK z=#5(f;d<)GT8}+%wk3wkJo!i$W<0rY|Dq9YF!7*j9^I3k(dD~3?fyQ@bMb+$unW8P z4fXl9Sb|rn4oj*ZX>t*p*m7QRWjrmzDM%TESI&akFfep&R5$n|xquSNJT2HWlynYr zqs7RO7G3+?!y`E(`)&F8K4 zKw#uD(W@KK6xT76kJ5J!O^3oi!2H+Tgo#+9yTkk!lds&6#AL|_)uCrLBll~Y`vt~J zqXaW3u?App)bcuX_wtfvPE_Ulj}_(=RIZ6HARR})3h!2*O(66D*DG7M+q$~NDe`-h z5B$Zg>^a=E%cRemWks_U-5l8sSUaVsy%NI7Fsgkv+gzV1)0@y!ILE6p$fs)k_B`-* z&_*x4OWnW5MTcsOY8aeAfC6upbxWxY;A@7x`o*qdnv3Q9pcYRwB4a%&LFLZPH%oK| zJ}$4SV&e}z7@tD_>*TG*)Z25c3 zC&AN2%Oe&tQsLJmnMeXf8TN-C=w>4k(JpL=`LuaM&>sA_U}ok6NvK1RTmGVM6PvGD zUAyM56xG7kg#G}8e@9HD)?}hKDl&(yGPgS?CFqj)5N~H2JdiEefFXwwBf*z;azp8h zlu;+uZA6URVt9KPB6RFZ@2-4)X?wD1%?JKc>ARHua(!ma<;((8*~On96f3L3QPZ+! zHdzmz-3-FkKUfd*FNb=u)C?!`6czoRcXPJ#Inwzhm8^SmBpRU_IrK!~Yrty6P< zU>rH;>tvDKsRy5lBla&I6Q&2D7!9OAGRW$B4n#B4m2JI8G|>qy-7YSwE|l5P;!_;P zcWo6WWOI0!P70SIfWPp;tkK z)j@0Deo*e7^RB3cV%wkKfy>~*-tzzLBOUr>kYQ=I-0fcqVG>g1-b@V7fBQQggJ^i? zC?N}j1T>qYQ15fwf-uW1Ig%l<1M6i?CIV6gMP<(`(cUZp=Qb!t(pnB{3QPeZtV-F< zjZ?{1et~A9QY@xvW8tu6ICeBm&~Ud^>W7@tRgLkpq2fSd0H_o@ml3-Q7TNGWG~<;3 z9%O*mAF!f+-u^@_ycePP+&FXxxUuO--l7%GYY}*BeRw+y45Kj1+&cACvL*@_`0DFm zU`Izw=Mc8-*Xww454|&WSs|pJM^nuAm%@Iexyc7oNNGM~U%)UqY#k=qG=>#9$ozn? zd~ucGWdquUinb8K$Q5@b7T6JMIU=o_t4TL*clcX5Dm4(ozfvPDA6;CfWa6b20?-*j z$Bn8-p7H3G-@?0?<>i6ZqPxh;{Z&IR(D9}@&i?fl2#JihD)e>p5cd0fZ&hY>8SZb zWffpQGrY+4@jQw!PDEi{N*$cVef>%{z1EP2=bm|&ERjwqQ5-x6OKuYEcyyp0_XmxX zO~_}3sPP$8v}KF=w$%;CLhtZl(m|fU2CtO`wESz#y>JmG;*|%ZsB&sRGp>Us3NhV$nP|IEDZo;RFJ|t`MV4083!uzVs)^2Fk6b`=hPY-c6$go zqJ#{^C!}+;NwIuqfCTpNAz*Afvji#RoL8k0Sg~FCi4Xqt9T>K4-!HE35(4F;yphtnakUd_WD=Jo9jRfmhvbA4{k(Eu-6Ybk2OqU)wqT}I*6mNd)2|f~DoJ%hN zz)7U$5m&kRPRdJ(oVN+IcUe*IH1ZmQMpZ~N<9R(ruO56;`)QoD6w=}4s3`8)5d4ch zZ-n~=sg>MpQxrJ6#pOIVF9+KI4?Rnf8B02g=MEkkeKr)M!sbCfCsW1tVa;QxKv+y! z_0i}QSwG6mYG*t)eAGem%Y@tJQ@q+R-g@{n%j2${ET)?;KI3AZBmfFUO_qu`8ruB@ z&%&b2%B;9yx7D=_R{LT{(@+-!PSt+qRF&@Da9T^bO|-`WvSnG|-3*8y%-Tl!=(QP~ zp{~OrE$l^(3l1QC`|=K1em7B{8LRx>-r)DasMVNC+$l+J=Jk!-eM$kF7`TFVK9!bm z(n}si2aJ^g!f`ZQ2KYMadH4zySYPA{4Ay2?r26dcw+Zlz>mci3b1ZB#Jet>C>m&NN zyo!s>{|4L!y?q1v6KZNRjsO4>NE>fAAs?M3loci$GLqPMgE?%%F-XClvfx;0Sivni z54!k}#!X83?`l-V@2cF6T4&~;T+w~hPsJgrtr_AX_#IOxV^&YElh{AI)s$Y-R$V~U z)z%*>_O$t(b~Y&vU9}ri3DkCRw-y?yC;+udjjJ={3>ejy;nnxU(Ua6A!~PgG4V;B| zb)OpQddUZLresR>= zTd;-jyJ@iEHCp|z&nDkvxP&UzNW5`uLc$H1d}Ee(Y!3SH|CyKdw$E^{0H_J@GpRFZ zWD|G<^mhoAG1w{LF_BLR53D+WVhQW$jQ_x|E|Jx-&9{%&(;@8{k#pj+HnBO54vS){ z++Yr}8oiWc&s*U2a?2M6E-uHN}-_XHJ!S$?k{QKtWj47}2B9tifmSD*skZ`a5K z>QHluRqCj{b?*$y3vOM~5ZMH-_PmSbFHBBCS{5q6zvFxk%xxu)ecD*L8jVu9Y%iH_ z$s3?`dHtx0OQBSILA>OP*{+J~MS;oLB{$<|{*IS81NX%@3b5+Cl@p1u!Im zp7MXLFZ?~D_r!bvdlBS(8R0EWq6X#!)-`MW%px7iCwM58{J5HwOqEa{C0E6$ zsdN370=Qya!SGrDlMlR9BTQl5D zH*gQ=3uCjGJew}o8rfquzqO|858GN(Br7!GC`}1W{x2rX%V~VzO680gDDVI#C-;pZq7y3ym17b*vRN&6uCU_81}>idA^ce`q_hp|^_ zza^Sf`4d+tHe?+YU&q8cP&LljZ*&ivCm^WVV@AHNzD||qL+kZBT{oAfc%SVcBN}x=1vb>s8)&_QkW8UdM{w0|hGDr_=ApkGrQe|eo@#;dmDqI`98Tx+hTo^M>wtq`>F#9NZCjh9f+YhjM$iS~HE&8DG%oUh zkP({I+;|Z*Itmz`O-3Ow3+w`$var5H-ON?RM@k;6++H6>yUsOQXI3}85y793iC#Ng zJgy;e4~;&rPO9Y>5yj+%OSE8cJgf^8H)%X1#v`ixtRCn=DIw8*UVs-{bh+sCzYjNB zjR=Hk0bnz`#uaZ_tvmHwDGF-eF&)S)g??QW*jk)ezLM}bobPQTZeiMF!jFY5$JYzQ zTwU^K;iJG!VOJ@~7V3*uqZ+#(q+hor9qe!*0pW~N+P-l&fz{w^k;eoM@b#4IAv2IO zQu;GDgvRvAOA0?yFQGWCU(xRm{gL$;0q?~E&+^NdnbK>rMonj}VEGnD<8UKM zr7!L`j>K7XypDa|E6Ix+1yd@MSIcj4^Vzsc~CpAUD!RMN7z~L|4uPDO65g9;Mk6~?MEhNuciuDzt9n=Q=L|=z-87o;;6c4fF{@+} zh67VV%=vfOt-=8O^#Dh@0n7o&X|zT<0)~9Z-$Ki{JDonyUe0 z0@K89KqB-+uC7n-;@DYH&57Mhrw4~2rh*mPodS0Z#lI1QK+_L@8ngr*A1)5$XQ%Z2 z$T`|jj&hWR7b}l=U7%rU`mP}N3GEc{Be8~VCpSY-sR3|1+o6f+-AC9L!A8jqxNeIPY3?rP$x5G$6sa3GMtTPTBUnke^%v z$C&qyi?v>3Pu?2j++KZTB9>gfA}G)2`E>9(Bu5#@<~;SSGSM+o5V-Ht21)RV*G~u4 zhc!`ib#>|>w*2c#&mg6c>^ZElE)C^0O{;3#EB4(^Uc6J}i%@1=P63!b=C=FHGpAKJ7JRdpbtyS1j z^&boCQ<}q=?W(UK7k)RSdA(@b14e(XOc|&T?=B7(u;g0IEm>liVTvmD{b`1`Y|H4= z%W(5}gODF)hk7a_v5@hO{y}m=o*0x>{Atx5i zRF)vEbPi1qmOJ)4=Z{7(@-8p(d28>x2waxQd>u|q-9MGalwBz5WFA|3RL0?8m}G(E>#%nld>d}2LP(4vcu|6=G&f}py1^or>D9y z4`es({u}?ICvMt}@a+U75KmM)o_-B3-66|9h_uK5q|=tmlgLz*yQ;nwBH2hLR4E&& zTDLL9e`WACbPd!-7)|lj*i(x56?($?e{TCG*KNrbw@fu$zvsG}BaUaaDN2-=G%5rZ zP{Z8I`lX4sZ2cHyTm5Fs+Csv&$VJ&@EpBRUz)9#f-gQCnRWM|YHgVRwDK7VIYfkAB z6D6e|J&SL8siVk?Ys)Ug7Vc$L(=>`8x-Uz@6T~C2nbVJ4k$JV)7B8JC&4)pND09Zw zU?o0vdskm_!#o@VpY9Nj+AXm?D2zt#%a-AEn_%RY?qfO^eemKks<^=lcq@nr|7$=u zD-o=-g=sA80u5|9bQSfQ)4gflZbv18eaJ-g+j|V~suQW~j zA>OQ;AP2x~UGpnte}W^8S-_zgBVHFZNZvlj%bPkQAEKZT5gb`bR|BU@- zstS~(kn*TmiKAG~L&}p+>*d>!S~&s0qawTKNLr?m%JyC(7mAX=j@CgvF;fBAqC{P@ zHrE&pU4{nEK=KWm>GU@1EeVSRAu5X1`^=~DWVS8kXzA^XC`~JpP!jL`Xv6Ng zHRZSUdAW9akh&TzG@PR~y!d%u_p5S4pT0ZkT7VWRR^&&K2W8!fg8$wXyFA%w2s zuT$+oI{(2aW&2V@@1U4!8}!}+Tj6fT!1El-mJU{hf0vCjKken}CEO#Z13}%~h42%! z&(JHP72QLPT+^%iSDx09!v9J`2wX0-j;W#N2SqusQuW0g=oTecEuDH{r^j}6o>lU8 zy)i^_I}l%%wrX>8JkvB{TsoUvO!!U{awyy0o$n)c5#k-{fp0O&EB=&<(A_WW^uL|r zP05V$(9RwE%B+p>1rP$w_eytQ`cGDiGp_wuW6Zf6siz^9{f`8S`iX%CUd?>TFsiA% z>i))ffozc2Ag(&2yW{!q|1t+#5uvkTqr`!q1=cHCBDRG>TlL@y*rEr#u1b}Kw)mCn z?0PRHo}aib+IBb#qpEkcU%cP!JZ*ACB<-$@21}}feq`Zzlwbb>8eyVS9y;r15`f!F zDOX33ht46n6=A2$zfyB959%5sz#qYJn1Mbm_`(`R!wrOwnKfjPo)Iltw_tjj!Ef;= zB{jYJNBGswBT925DZ5b3EXTp80xvyY!vnEiP`*Xicw9dm6tRq4M!iy%TO$o=&98)a zx*>fS<<>!e@%MNlubxEFil86CPY#Nm$GWuHJ%GsNr1m7>Yt~a@e3|`mXnW7mP9e>ohfZ= z%0sN74fc15I@(Tjz#(Yh)_{E3jr=@R;x3}6Q~+_f1!-@Z`RBE^THfnzpRzw)160N{ zOpXkmK=cdvHFEKm9h&kWxhfx+h}RnWjRSMC>y&Cki3B8Dn_eahaDw;C?e(e@Fye}G)Wc+f6 zn6TCIvm}FaH$ug!6}iLQF6I*ZZAa2MDuxrwrfTRJReVgHDE%QJz0L2uM)}3 zk%+|^=p+s zqEfp`U`{3>xPP*U+es%+D2(~Lh!pl{F5M^KlO^k3&BW5a{Jew+Yu6GWIpi>Encq+) z=eF`LPg;acC-3GBDjnfKX3vDyGb^XT$D*E@pM9aMr0ON>9nBkkpW#kiPkK*QMsK$= zzjmVVx7cg9YvI(`0f(~SL8Oz)?vn0Rr^zHiqqhf|aFSq~02E3`Do->zO1b%I6y0l@ z{y8D3#8dTEIKEZK(nrm3fmJGt^kcVR*O@iXZ}mRTt&lW#@beO!Nu9!fW=Vr_VF|i|EN>y36%ak-p_fOkP z^Oc@q{;ZhyIm-Alpb|wpgwcb_PCoO0RwvF>+k-BAzx{63M1kFu5Smz9H93QwZ1H67OC?>@TJ$neN!D z&_k<+i3OS7`>UvPw_Vj0URn&kMDpy$zQP|6{CX`W7gI6hdSqxgUfwLjufc=twR5Z~ zuZq51geD9JvOxK;HzBQ)s%134Dxr23OfC*KFQC-Q&eu&JIGPCLY-&rQaXSf-<@Xb2 zXYA}u8j0%h^`vhUGf1I*Z-5b9+;SPbUsy`>{XZM!a@AYt8Yu(MAbG z3^?ul{51-*^T&m%1uXL2-R7xDbMM^imE;nBsQv~5)9!Jpb6Xa10&$Sx;eW%{aKZ9T zpt{Myvw0k`OMXbpr*J%*?00rWlFqd^|S3qp=SB zSAdO{S;Kk`tRRj=b9*}@pm4w|dw?iDcmauTe5OYub+aNz@1+M4yOfh;lu5Rz5jy+b z$YK0m7Oj)Fb)5t#nUl*d(BHQSu_nS3*RWoo-8L*l zx}ra=w+#VS0LbVV2hFFK0l`tU6MWhlzbxHiFY&{cW{>aut8#Cwdl~cc3pEgdaC#f{(3ugOx$Dc zrE3KfICx>i8m3A(t}^zmM2t5n#1Mqgd(^`Rgjlr$@2i1#0*J=Dm-V{$42{v626h~+ z+cdn`Jbj1EMLX)pbjXOBP;t1vSCGi}0VEQ%G4G`P#>8wwYqNhhE5hBUF(?#du(BNH z0=-DtMhI#o0RM2*h3QL=QysXe+S44AQyJjKR;F7=SSZXsLMaC-x&Xt)F-f;F?8&_X zcJA*Y$2Lq^H_}G2LK!4avy-hA|0Ed}64Z0j1>ytrbA93)fPTR3QYIyj)5MUmD~FG z*G>&YL<{UA_R4}MKfxjzz(&M4-B|Arc7?ilKtyLza*{f#EQD*<4ac7(owHcyNAUWA zQ44eFV5wal1y`aQ=EV7*R5ELVDyy?g$Q_||a=%3o^v8@PyvKuYY9incT%e~RqnT1% z(-7MHQ0$?c7%RzD{3^u)8IBcmm2{(MH5zvk{HfBe9EtA8^y%Yn;i3E3IicEe)Vh(r z7vzvGVLqK0aKJ`yj~~t4sDOM(5lOmJPElYNW*0Ic$w&AI60wYXatD(LDWnCsUv)la zRAJR`;V8$kZA3VxAYBR|V8?}ieAO}5wL`b94XXljIMmhfMt{IIB$?ijvYO^i=U!9g zmEEs(AsX&FLYz7CsFpLkz_Hcf^b52m1KjT!b7CCKtjNPMsh9si)Xv9p&WoDpSF!)0 zyH6DFp!tgZ99I1d3!E-#GQv(Ct*2ws1{L%L>z<=oqz_(5(7mCb-W=LY40a72A~7Be zyeD`}sHfm~V9id91kEsqBLK4_V`Z&-et1nYtqy%b)&II*YsiTS8Ngcoz};P#kZ({9 z%yDHab(ND3S4wE7Qk4Ms7p{P|0}ie87;>r`Q!8Z$6_hMSSw*7yvBiypH5WgX=(nI; zey5Za(ea1uG3Xr%tZIpUABgE8^hWT!<3ywZwK`)GSPUE>|NM0sY*R@uVy3fKoog5y z$3TEyx1=2H@6pE7a#Bvipn(sdS1doKA)rP}*D8YO&W%Lg8^sf!s9=q+W4?dP-*Sic zu&0E}rJuqPv5Gnc2~prTf5_r**ycXXlGVqe)&VX)VaBs@$r8eKH z-3MJuC*oDkp)ln{-QOps$T)o8U1d;*YVVkm#ez?{A_E>{*={*F?qi1go_?S=Bx<65 z7x>xDx;sFNB5?)+ssibJse5KT#e@LuV;1-4L_FVQ8(iYQIjXHpZz0r!+;_5k-2EEx zxSMaacP;BjG5)n++f7nY9NJtzy$C&d5sgUB7(65v8&wN@i^JMqW1UTtj~RSpW`1?{NkSwW_{Su2X)^?G|+!{q%(m6{#?yi#pb%L6>Z zBfPuOezYr3V<&HB+3e_CPSZlnt|9>c^0%C*V6DCw_QMAB?=+U|h4Ku42OrD#O82<8 zwRv6+_L;t%d!*&ObD+(7-5N@uUI2q>wPK+7T5UzuGHT(xbI-txug8VQ$lFHxkEM9+ ztNw%RJ6ty1N(Wdf+Gy{A&etTf+lF9ddDlcCKJrsGtHA>Hr`AF@{MO2Ch_}AHLNEbf z+3sTkTDxawdRTiRKW4Hv32AmSn2jE)+>wisr)IfYP1qv zOrxYcx8#ppMNQO2pj;A{ZM?_<6}_?9ub%AnGIiGa?3qT-Tn>MKTZZj|ce zjD=vqWgJpyh1DNPg;Xhu8o>i)X6UnVdY1u-yF$BQuU4WoW!`Lq<8Iv^6$!hW%3J~U zL*w1dVe)ROdcLaox_p}bDW*!aZC-30fIL^huJpRDcsQ5i0nI`d=)*YAFo zL~NW>-ADreK!f%iegP%qJpsfzMVC5!?HL4+)1e))JnyNLR87jpgQEgvI?Y84utk_z z(2jP>T32p5IT!|7T3D8m=v*HFKqJZNZ5++=hip59G4%u|pUX-ldaHoW-v}zY9g#K@ zNKgRzC)*CpB=E!@$m@D`Xr9*2{}{tA@sX%yjBPy5an0jO{=LJmxuskyjmzjGCj1#y z@ReWm6bNODFj)!=Hq5N0^!8mqyj0bmeIOQWOzdblcMaUMd`JBE6vC<|L4uGoY;?s5>1 zosc;j${RnaN}DoI0o#L;Tc&X)Pcpd#WKWA}-xtNdzNWwt&Ogc$vK;2rvry+kmXu>p zXK!d~J9|N0mE*|o3)A_l2^LE=fy$h~1lulY9_e!jJpJ9&=mYt|ZE+2A^EH^3L?sHa zFcR@dG%NK+c0Zx5-|8+JL213$9wj^4ri9~e+fyPAuxH6iqfjoU7ed!=7db`=zn4Yp z(INh7-2q^M%ZPG1%}mt&xNDXe^V0$&kz+Axz)0F@<8Nu<5J_&&#K`d*CY#_+YY+bh zIf@q|TqQ5t$|X*y@ff!{`+lIZrBD_2allk~1d>6I%~F>=9?MWj;O|PUHN){3$0az# zT3QqL@Q#=D1t>GbaZ!Z>O+%eD!@ZCFTKr8gA3L_wAuc;@b|%3VOnID%b+W%D<8$Ed zi=Lr63bHOmTr-BR>bjo-C1da%jgqoj7)g#Sq?f1$iA2lv!7^B!39Mp0=$Z`b)q+o5 zxf9ASrpw7e+(2Oyf7KaJK7h6+uo7f1#6NY$iiPBrW(ho z+t>^aI<+LA%n=b}Re!1dXa*=<<&<+*KP=Vic_W-0ZYK#QJrq7+pIFOgngq=xsxbE! zmBm*aL(@}kzGXT*gg8wDva3g(|9h~iUVHVBzHSTzN_go47Up`Bi_$KqICwx%bcDE? zOTLeg(RkS@UKGQ{)2SD!RJHBLRVe=>O5>Qw6CGP-;2hY?2HQ|oi%O`<=!Oh=M7=5& z{Gm339tx*cJM-voPwL(jDH`M!cKN#Z4;gnm3*Oi$mwY236I^5jE-ldJ+iA=2R>6{B zIMr-~e&kY^a>;1`5$xX4s!clU$Ol>p6fW8-SgrS+8OTh>1di(5&mxkGcz%!Dvhjk5-K57Y?zpP$VjxmmrjNQcL1*hIREGA;;8C=0?^H^CRg&>Up-C$ZfIdA4}WcT9U78r}| zPblqvn#rt!+6;|&YEA$7O8+pcpe?4B2>8YPvDNVBMr$Okt)H1u^|mjeKR z==^Dgk&ps!J0+>J35@9y%8?@T`K1U?N)F7nNCvkkG%<8=2g@-Is^w zaelhF3Co^ajdpF0C#o1k$tKLa*Ah+?UtBYazn# z2^0c5N1earFuV8XY(!_)ZrYcbm-7JwWwNpPT)#;YIS)=z0y?I7hmya?AA6z;nM`J# zP?Aqzh-pOjjPjC>a&6tko;2mh!VXmj$A_66Jdv@U4w1t8LpAH~`TSP3R=9L7_>n(i zRD7jw(l=shjlT@}8KazN;KcjoM!bu zK%H3Z47%s&o@C*z!=ZKZnarcFr*lW>aJnI#+~@k|0<2>;Vw zcro{Rcn@W3YCT#N4c@fdABG6Bray7iwzq;im#RZx!j9L(wX5~Eg(t>Cv$qKp2wf+z zaM5jt(UzB{an$+yf{_?QT*@gWCun=&I~>dJRtJcILES4afzQR@-IG~EqN3|7Fvnbk zFaPr|9SFl4#XKW_PJ(zx!xwM0IBhIL4`}?Jcf$*;qUu=${fO9*X`_^egR`dpsg1+i zo_ujUSJ-Cu!IsnLg60UclQAO{Z*GEFhci<)dqeoom6WFU6RZF&EGZTb*+5c7S9bU% zoSWxyxyo^?CF%zOt(1@&+^dlb${;WVLPR}?ne*Ugc{9stuCJiM|2h{6+v6FW6g8S} zp>8vrdg!9)>R;I8%e7_OX2kE6jN=hNMP|UB3uHtye`xzpwo-0Xy~PZ^^V8S<6AB4# z41Qsmz>Zgp|9f>f%<5RPD^lGps!9sg4>2?bl;dWu_n!3q%7Lk%G?Wy`uRb5}(ra{B zCN8yocy?^b5O@QGi|k!M2?#Jk;upTPE%_i&?FDRDh!>Vjb2g`wf<&W=f^ zgdr($M?f~e`iV8qe8s93g~w$c<)%)y5vDM!gu4UK)-k*NRdVl6&_((VU(+WS ztIZ=|7R?Q;w=^fy^$leL(743xy4UO^GqiA_58ikwL&E(A=S-D=n4fM@+oQOTM*c`BtSBli6dd@33WD%eAlL7HP71u}sx3jpfGd1>!bMpWHI ze)cl1)p9#Wj%$j%)8v)AGrBeRBJ&-L=qHX6Zsr%oEEPxNUG&#U9k?;ZQ6A>U_*@`G zZ9VsBUzFNxQt+)Q&un~fX=#`q9=TyIB-2GlZv@6@f3UTHV3pfca^_J`MnVi+-TQa< zlb;1y#rJceR)}>JzPrhgkWalfFZ1qnQvN?F%Z6{g{CWxWM^8Qdypm%b@^qZ8`G94S zsg{A9uWl1wm{gHWhQ2BY%G}~ikJZ09$vLUv%X4rT$Dxy}cwOZFfvwd+R?rQiASOzfP!}-{qy}>->kj>irwtB zrhQ{J9LvX>mH3~PQv1;iTEb$7U6<@wgUHbz9F7)a`>Pk`Clw8s-2irrmc}%g6@pr{ z^XP&7oUck?kFRH1B{p>-o#P=+EXlyOUX!6cmCj2SHG$q9>7A|gr>Q~=eE~%aks5(i zSRKxD0)YR%JxFKSBrZD4aC<{**X6i1AnMS~_JO?%FxhT>^#o9U`q~b+>6Q%vcG4*tkpF0dQ3aHE z614=7$KOb-MdZ!b=oxRvJrKd0{o1gEgT8;MhDouO8IPxYqfz3*1}O@1lbE@TIjbrX znj3%Uiu!mDW2~ne{w}r{WXDN@Qtr6@EB%6|i?NQzGXC_LDqw zcpK-hxadT-g>73RA@5WPK6XrLGHM~~%1ahhQ8zT8Io8z@(oo~<>CeuRW;-`-OWs01 zZ%(}wv%UY7u@&!06R{sNov->WP6!xkE7k?bKD zjK}(H+{rBzrUUKWn%>5O^{yJvWQCE4bFDcq?%>A*m9p|wafQ&JXF_^#)h7eOvF$E+ z{5Mvw@S5U{Cht4M&!crmTMyUI0dYUq)qi&bh|4RrTgWSlUR!oym&1K-IY1zPEnQ&k zg7msx4o|dG3$#&XIhIh)%nB%T#M#T!nyP@c>BV8dv7quHBR@~p5TkV#1e`-S>cA+0 zx^TQfq`1(EXMhuN>*aHssEsf!P{MX{s17L@b717!S0Ky#<+JqUt9l1I8VI;l@U7r! z-D*s?b}-?p$1wXW<4rHYLGr3*68w^2IMG0Cet(G&I~;woK>}ri^9aEuV%IuF;C&VM z!jC1C!O1wU??>|>g92wR7Fn-6HsfA?$x$O*adE478=W8aVif6LE2y2F%U#-9ytXr6_Gl!je>V>zWxO+! z*zeJ#=Hsro(x4o;G~H#%{qv_E}uoBz4Lbj@|yt#Wu5sA%U^uoeDBB%xI26 z;}yDGIh9jy)h#V~rOdt?-1?v6PtSOA&1KjEK1@N}CoZL742B0oT%;93eX?6LvjvZ2An-AV9?^%Fn>yCnaL2F<(~MS^)U9p?90*cP zx?x~@7qMkMX<4?TR{euOemXNQltQP{U(n%K_#b%QylVGC<`RHK)3Vtkb(giWMEM%d zl$4&#fTFFxD@0nqL0gT-jV0fShwg|C+0R2PC5;Vo2-L1? zF{EB&E&!Ljx_+s?76R>XYEigmpT7*2HgOdzDg|~Ry`X$S;os@{?gn}()afI_^F*ul>DctVUjFP=Y-l_HqNyJ5 zoNSFEYRGvyqlSH^wirhiXpfgR0GzCS*{(%&Rg#OFz2+eC@kg+Lsn5Z3N+#on_km;r z`LV5B!z$>EpYk(E>$f^J!+Ld_%ks-THsHXEE(w~FLb>v#EYyC8-O5tdjKNqXL;hF; zdiw&UxS7-GyRM8G$$+Lq0wDk>?|4T%tqcKDSDWV5SLQn4mp*Y%U;FIeh()G%X-hw> z#m(}*W6C13x$T@er(9Fe9VV>K6Z86ay=+6^xpmIMi}G^3C;O+`&B8ceRX`X1qw$J` zm2Z}9+UMooEWO~VIs&S@Srt>E-H?nh9p9X~CJ`OZQ{-%~HlT~AM5?^s6X65CvU)6| zXl#kI6n4Vc)Pq%OHy=+HJltn#rNBkjPpa+cVCVeI0buFz|i zjB%GwJhT}&q50C8B+Y9;?oi=76crV>evD#*qQ;H@tZt!5l@gL z*QcX33i6UZA7MuAs~jYTjC2AZ_x+9Nhi=ieUlF*{c zhDKK0J%LI&=u8dXI^q+Ey`fup+IRDtK=AeI2>o9c2iNBs0v(7`+8x4=qllg4F(NM* zx=2P+Pr^#9!2)m~z?C8z-G83Yf_f4;*4!))W%9Hoh|!s!>zHN~GyZN_i6i^^u>-Ir zBiqa5P4^hjs*MKkKQ_ydsT8n9R_&IPVr<7*b0^|F*Dg7W4zZ_z3RLO)EA{RF?=72) zFNQF7)i)0e+yvQ!I{Ude^4}P_RMHEqvCXq`O?03|$_F{~d*cwf)Wsn~BNl>Xf_MB( z&=r!kLL^4L3V*%Jl&W?TY z!`+J9CW$Q+UewXZ0V+iE$Rd;zR@4n%Js(k=FIcEOh9rG%-#H^*>p3UkJ|*9_+N!4C zsu%&ML7_Io@$F=Ou@FqzhPVH_N1tmp?`S0I8RQm5jEatBB5Bq;XvdgCiLIs}_8k0M zW5u2pogw)%6NC_ms8R%`i~2&U&A-N(3~q4@VQeJjg4)9zZvA&)IuxD1;QhM^nP62P^2<6vIjGNCOROrNI=S;hG1EXI=yJzcG)c%knW3 zFz75&6?pQwv|#Y`O9%vz2)+@zIOb$#6~1KYGoP@8^D-1jS|hB{E;iCbrv>LTlWs6k zZ6^JO3?v;751bZNahlSE$mA5kJM9-Q=k@&JH?y_08X)CFOdsy-lsJM6`<)Sa_*j3; z-iej0YrC@C41U<2PJNqg=HqoAHq4R-a+o-3J0qoFU0}LC7mYcVt-i|M6=5C_!zWrZ0Iyu*4DjZ2Od58O zUUdkMUgH~#3{_B%_s7q& zs*!jya$m4*a_z1-tGCn_A8;kPU(c&S3+3bVlVSDD!rnhME?}Xx#HQM>knsvFeE@in zZ)gXYRM}_Md`a%M6^f>YeYeZev+Zg>GaG|*Q{ln8zA$>>%x}$6bZ-=9 z02?S9arXZ88?rMXIqihR#z*$y^-~6vav>~AiC=>f9bjsy;bY;Vg8X_`N5KPgfqtGK zO2jyoYWJ^;kzIgYq!Y2p*u=M^05-RqE!*o1K$7&I~Jx+|}4fR@o@g;KUIa8}xL zVqHJopu)(BL~=zDL|we?PQ18`cE^YMLA*HI8pwD}b=5v%G~Z;};3+_;i)JP6c6s*S zKm@J>1CyeMKG+9<@}%!}@S4d8NOvX`Uri}`LAuB|&03crDthMSR@8u!_?8{lR4&2hVC2>6py+h*Qre{5+YNaXzfct$26gdjG3u zv)^~x-JVR*_$BJs;I2?O53B6R-{fK*DQ(C=U5uzm_1Nc%X43Q*)FV~xrke}xWL+5$Ux)}!u>5G|jo9^?;1#Y!#!M~RG}_A3 zOWK#i@3jT_=o86XJ4F5%r_vQr zh1u$d6!3;eL! z$`xDR1ZsFaXRsgOM{VpP5g|Ay#rPsth}9vHPEtNCl!N>kLoGWc4|xiQ%!6dFycI#x z9T$TtHeC(QJ=f6Nz%^QOh#aYXl-5IN!z!~XCKe?rLZ4^4S{L}jI)IEs!7`i6)Rlnj z&qO%oCnywz9;heG!Pe}nkM=O?BD4q6wp@DBgde`SoUmg5ooE;BaBStuSccM0gOT@H zvf=AAoB;LgG^Agcg8Z^$9FMJl|MfE8Tg-E|sOJV~WfXMp2)|2U7tLoeX)^@O#)h)n z9s4krd)5bpV@7?{e$v}8QBO1ksBYI#aRaDjU%XmK{+aE%B3XjU9RMDS)iwE*euggc zPB`D|>bS0MrYB>MfFSo(dMEGTcdlf{DP5{wxhM6GckG>lCTs!UO3lNrpED++GGXU3 zy!59#r9KSPz|It&2A}TuvPUbAQPZBGY4y^85O8JLirI|)F}bq7X#7qU3shOx|B%{e zTJkGI5mYcmE<>y^kcbfJ0%oO*5COWDaI{xOuhW`_a@8j&z z8EUM)^hR) z33BL*>s-eG&W9?5rd4{!Z$q@{Akfcz#9VHg5uTnX%CQU6<0)4ZmMOdbyq1kUscX7# zUWCp@Wh`my>XcfkPYg*_70)rDBNlil4XU@X#Gc?XHHbTYO{#L6ZbqLdwDALJ7Y63A zD+1PhIKl~6kSXmtG+N=bp?P~Q?Q;o3__~N!DIK;a)o;(MCJ>DHns%Z88_<)X zt`MNF*YIOvIk?|SjC9~_sDpV3;rh1$w%(P`pu7T)J88G!EXap)r&NH85565_r0Gq( zc{#vk5qfAc9akABm`jn4pkw9tzUoXr9xr-Sr&&~VEPzjxf1rJSVtSY5e+M9AK+Gx# z_SWlntbGHh4lY=F#o0{nFBn2??NU)AZsP$RC{Y@w{4;MrAYtZJH`SI0=43B*{%$Q5 zLvbSung#kw;&oC#`O@jfW!yJ*y(Sr}AF!D83htrJBXaSZ;j8|~$p|$EaTe%^A3_0s zY{q2}&|vremj-Rx@j}Y7T*k)eVUbpAfFN5-(ci7)@t|u+87fdW^_azb4otv|yG*%| z5EVlG7C}PG85>)HE*h?6lmv23xI2yi>#ezQK9LDh%}Xk{4al0-FzH4o`>GDR3$vse@8<<$L>ycY#&-y3!;1D$}MlaFo@ zB8NK{J9O3$;RNED&#E@rhG!C#^ML`;?Jkfesn$b=qAcpyKNI#J!P}{Cl9j$Hxu??bASSo(AYc_*87C*ZycyCM7gu=gr_`$!x#C zW-k}#hqwsG(ODg>2pGvtgeB2IrM8qfT{n@LkQc$(P41RfPoY3C1x>W>U+30FX6bI& z!DZmXNtOL!et1wBh99jPI(Op>2d0dIkR-GmZPwhm34q-e&`))S5AHR?Adan)L{hO#oZU)N1%DMH3hog`Q2IU>y=;fr(xq#~up%4)@yk@9U3M8kX zF3s2#VvrOEkAhnBSA~tX@=n~0#o6E6X%X*ViqqA#zcEy^<6ZO#Nd@lM2q~;qH9TVt z6?u|I{^(W{W=39GNa=V9PZ4B=&=Ap$dzKQ^uZ8|1mI^zu&u{ka)xdq15-Zt_lBmJf?4M zo!o8yY7LG(nSY+gc-XM`-)_%%aV0ak!_cU6Cnk9WX`$nUUk}s8w>EAbL(tG#^axz> zn)Md!nbP92n@HAv=!$~DA;wbD4wLg*q|Bzy!u8_=?E7h-zKJ!xZQejMc4euBq%rw< zB91$3Qq={2+g`mT8F7eC-eOcC!jfFn@LL(8t%BCPRkL(9^3{}i4z?9|$jDpHYm$P( z)zUQ5Ld7$iJ2v5#tBZVD*~vrDI}kcCStrJPX6eI0qc{=M1FhF%nTG}Xn16;Irxlv#Ml#OjF9O;X~wU0D)H$`Al?jFo>z^{|{@Jy(O9QXLtP zWuWiyu4GxZA%E1fxK)dVC+5U0!B+7WuNEV$ux}vqcGz24lG>-Rf}t$A0(s9!!_%s0v9X|64|g#s7^#Zh7tpcTZ(CuaRNYP}8&h}QhU0l7&}<`ex2r#F z3l5E%?Os|$ON+@k=DBP}_tf7bmU(KVe|K(24;DrbSL$Ys#A5p;yev%VELGv_Ro2P8 z+gZfv2zSfnD`K82L}8dwW%}E3x*t>xl7$}x6P0lSw&$E9`8R$1qf8((wJ!)|1n%@N zr`w(@7AR|&qG$H-0Ja8#K>DBfO??$kBsAlNc&@KCS_CCOglCgUq7u2ozefkU3$>9j zAPI{x*+Som-IWKl4V4CNW&N$oBIf}FC{0+!n1`}7;U6GbaMm(Mk899WRFRJWLU>AR zgyJX5)kv0Y$vzw|Pz^f`d}J8EMPdHg zJoV`e{DLO0R9oB(_~l&S6~lZjW4for?|;Rysj2Gm_W8o+S7vO#Ym03TeQ>utU;Zk- z_tiJF0?G>I0(1bLZ`Ls5N&*e#IQTT-bCbVIukWs7G(3*yFhc|veF(go0xJCo)i|Hp zInQBsmtGH@=eC1SdqSii0|q^YTxOltK)4U{4^T5GO?~&`?0P&~i)}o8$21H?*2`Aau(7|C_Z71RCZGN={R&Orw>zPV( z?vrVyg&WPkH3-7?j+xnqWSs7zr$Z>#gQI4)?~Q)%9286}dbb;QE15ag(7sbr+fU7n zcG9ds+r?Kht+%{YeI3zP$12{^v}l&?R=mGrHl^nb<1ExK zr=9gJW|?xjZxmGue2&!0FR4`<-SAM>J^Ei9RANL7+Yj~<(<%TeRp1(RJ`8kDJe6%rb}k7}6r0M#5Ry!ex50HC6wteSvh;-p5lgV|6_TKUi(wfycQCum0o zBUL(msl7%_eb*HBIzFMD_-6E4s*KUQ)5V0UFcrp(!!B}3)41u+&XYc_j}J#=Y#mqE zA~kFd6&yuIX(~Zqdy%GOh#A?xL974+78d^b?m8_mZTL4TGA||WH0j(927^sLi>Wzt2&JNK8ZG0uv=1?_E{5%E~QnsnaB6sKe-4A!j86qxPfUI9aCaM+M ziDxo@k-29`qM4Iw0463HpoUlU$k)qg@|wrlq*5>Ez6~Y|EZY7+!#&mV7*k3c?$7!L zzba@X+K4F;WzQ+~iZ^bRA0z;iKtzW8<&)U_omLBbv|0(hxGBCYK22`m99Ir?3EFYe zp|rXYi&z_@3TW3!Rn@)ZXogi=dt3`r1P9CH;E+F;V&Yliwi_x&A?EPYv?&_TS&hO` z2hl~&x5lormpCs^h6IxwnxbcC)k_)cIB4MBHdNU@ERBBe*YXF%dAY?)Ydob>hHwOX zS50Ki0cvP|2flZ_K&bt#AR z0)=;jPlY1z875)-?2=_+U!eCPYK-K>w-h|*qKF(E^Kt2> zd5yd4G(WAX17FvhEt{r#t6BTPyh44kP8>4O=i7pxZPw8 zvNf}i{&uvy7i?NEHuc#GkUKL59U|Ffb6jy9u&7$Xz+i7=HjH1K;DXNgC7T0c^zFag zA!9CXoFI=$uwxO!HJ3)?_iqJDPCqV@zZ1#tPQFHh!kO1OL`m+yt%zHH$)Sj>z^0!& zpJe-5H8=2s8qq0S)W!dDCKYTuNA@z(JFAPnE@$rSfm4dBO56qUNP8&y_e=>OR0%qY z6y#Ha*~TO;rvtb*!U$=)Q?6k3e|!cy&PNe zO)-n+n%%ep(?T#ZDBwGVzC6-}j$MP;a|t->e@Fzu*))NzTup#`utc!g(xVFif7qtu zj_r*jzkqNc+QgD)^TigM5Ev$K6xQQAGcu;tFCL)LjlZhtWB?1=N5N1OkTsq2V)j?7 z>iSQ!{>UBXE+PwG20!Bsx`!b2%@ZX(NI5q<>VSm;*ocC_1R$0m+ag<=L@g=VWTDgT z#1I0q6J`?0_a%0*lQs~iBzxR!$b4vEHR2&e-K12fwivz< z4%0pfufE4TD41pRBCZQ20}A7QIL+f(KI0jl+hHG>(2y!1z|W_cfKO6w?>)_h6FJH2 z?s~b9n-}hW@b3`)e~gcJqbtHUI!CDFE6m!ve%j;AE6!#;5L$s~5Ch2;i#Pu1IRMCu z;v6$KmTYH#!t|yERDrAOJ)PVkXYDgoGqh+rE7yF)jr(GF5=-HHnqoutuLrvoVl3nj zDD!NbO4346+aFO5u`tu^5;-m-&2U!xE40q6q~mnCI|lwhz@>Dvf60o5ZrmQ~m)U5_ zBulfAltJ-uS60ltR-9ERsqYolWS&*p310 zX|b*0#mgGVFQF&g>sLCdNs8o6Gf+R<6}p50Xtv+X;ju)STwb-AZK zeTageIsK~r3Ts6VJd*~}__udKGb7pi2OsbqlMW;+@Yr2rX0R+8yI;D}p?x>vtRM!r zdN#xNCB#EDsxdnD($Q%_WNS8C#%D?NF)3<}N}aTY7odx6YgL*1Ps41yDy?1EUPz5H z%7ZWiGG(`ca2&-a|H*#xU++gG_$WX8a>6M9ALTRg(_?IJFsFPOWuHM=Q9PXyV#k;? zyhm;Q-(4&@pSh7}%Q&Q;OCankxA+DknKx5x+_0mcmORd4ocw%}$_M@JaUPAnNB+#p zrBS0-5wPm>NBzC>n-Kd{2broD;z=A(YGc~J-oR#*ic;i1V?fAk9M(XhsM=97Opw=Y z1ayRu1v|@#7q#(SWetG9L-6(-90Sg!J;8M?VB&-i?q~qo9t2+5?54%>t=N!qJj_jN zlWil5mlH5`=-epoMGH2=raM?d2?a5uRmtj`cMXb==@P%WC&~zxYqPqq_cua>HU&<` z8}yG-nlQHqjoU+ccqoXJ=(?PVs$H0(jsiVAGMC7W(!Uo=jkf*$r+UjFzj^J-vC!zN z%zK|o?ko{_cBad8YVWY^wu7b<&Q$riLT-U7ukV&)b~Y{7bWqk(7i!C@`tqSbqC!GI zjgP75M8SBt{#P3ovWENUpM}!6*`%c?m?HW^u%5u(knKB8q|F6SkdaaoiZf0P;BEP0 zv;tFGC9B|oJ&oQel6a0Enz}VeY*q4~Tbyi%i?{cqm()+Tp`dGDL>VG#cILClo;;C) zydyj^NHDT33b@LXdb+HW^@MMWI{I7ooIhqvUCk9R{R_MybpCwG08(6=jCHCG5++uc zlCX(Lh9H%M@hr(0MZ<>vzN%cFg+g2>Na3qn4eUs@gM#8_y*MwBn~Jv#>hIpq64ChP*UW%b$d<sg<|33i08zp!Sjim#I^sJjSiIROuu^)*4cVi5-sYR;<;|j_(`1-nD>cZOuU1e-( zsAg}_K6TSY)P8DB1>{&ddQn|vn=_6WUGqy`F(h@Zhv$)sUgp0Z$xz5AW>Ch#vm%+8 zVYwHn`ZiOK#UA}rk4`1wGmVfJcEWwEX=t(ClF|--e3%{qA`P^#$$_agP3-zBoxTBJ z1l38(!MZvz`^%&d^(bSKB*o;cq8@L8qMVPUylY(MFM;gJ%Hcv5n>3G$DTtdc?Ps?( zpj41-dKY4178+t#!o=)7Ky-_QOHm65Y(JNVjet6fJEB5)&d29FG;UCIarB{q+4B5V zT|-tskc%Pgd0!&&HGXMLzt>3tM1>Ioj5GG6cf%KDj43pw(yuWAE&X)6#Q;rAo&x+) z<6&jVT((ch+i9$O(g%FD&iuN!GdfbM!u*9ot@F~AKALDSYgr>t?{-MtAq(`vDabjR+ zIp0KXQ_UWdW7AE4Rvl&?w^{?_nU|PVhQcTjzrKfh*N%xF8V0`cyOO~o7f!3Js_NI; zv2wj5gi+S9)vA^!;vh?!r&!cmEOQ$D9AYay*CG4S97f8dYV>-G{BU}Fkc&SlY!jBy zbVK(gqbIw@&R}$uK{Vcb|sNZmF(VETn zLi4uwFBEr?>`DK*BfX>a=;BQvu5DYP-RSzga#_zMoMZ}$y&6Uni=GY2VYAE zxiAEV0zBi%$AGv<2m;1^C#G`}4Vj{jE+}bC=`8Hhj4vS7QKZdAa}N(>hHH(Z7V!#Z z$5UW_QY>BZuzI$%srrlc&JK`qg=vYy<&+P9aoNQaSDRHuv zlSES4m{I!?*ubWgYc(G1_!w?r!`~-#JStJOlsyDOXPQ<<5+@7lIe7|EAle;9Vf42a zlsHKDX_J)Lr=!@&y-Qo&RBTO{uhisRK89axc}+vL8b29I1 zC`&qQ0}j~ZhE5^#ZF_wiE=fn3_DL<>d;IQSN1Q8UoWVhEtTB>u#hOZd-F|zji9$4n z0_qFOJ|OUFJ3V9XNd%qBriHy@IjzEpP*+kL^{r2;YQp2mPpul+P&cM!7jCHWrs-Ra z17hAe3MZ>S^4%)z=POb&@jD&dvVZgiD{ zeU&;yHS^viU29y^<)Z9bY3d^MLC`x~JXwMJ>s=1oS}1NPXL_ZNPyV8q>IW?;c|AlS zC6dF*IF^-g|3dgTAH>72C`E$6r<3i`rQ~kPtmqYcnwtDxa4pWIe%CyhHt_NH|M1|9 zt67SDa%O*#ja;jPCZdcsqwn6_hQ;1Wgaho8l;ORDEKQi&`9NZBiF;3p@IIw z!NsXF{^kkuT9w)STPV?1&Xc}8JNCp7s%~X?)i8tUqwUBUD`@64<6XcV#`1Ca0O$)rzP^&R-D%YxA5O9*M;IUGt*|HMN)G3kD!leD=B8XrcT z3^}^XAH+7(kIamU*jOD`4Bq_pfRlo3Bxyv5!0PFcUiKZlF-u17=Ib86W4zQ-b(#XA zhU>4ZADX?v%+X}hZdX6==>1fJdx9H`h*cwvsefhJWE-TCxE{uu>;M#e65||7cpebv z9sKT@XBhQaN)d1CPvuYkVP^PtM~y95(n_rrQz|tZPWn2DG%P!|e53h^{x;WG{eU|b zi)Xw2JR%tm?17y&V0pRu3u3*#D&;r5*lUWg1ohrOxDqHJ*hFEW@V8mfZFF@2_nG2) zKckZbbTlyCP>YiUJ-45#g!G*CLyd1W`Ic`KAGUlj<`+(ExAkNd3Bne7*N}2w1_kbi zwF1xqAJiXaxw4NHnb9ZuBp^18*W*_vR_efKC=1q{cux|2f5-S5rRbgWIX z0rh45M;rlmPf<$8@Bs|DwG0F2l$dLxG;-}OSRy5zj8tsUOvXcPIujJq`2+eO zjo_vm%!no=D`9i#8a{_s1QIc1DPP9VmK@mCcQx_<^@3pusmt&ES}EVTb?bh)7MsbS zb$&pXeS#G%E;#F@^y@k4&P|0gWzcU21AG60Z!(p!r%8^G)nn20ZlbhZlff$}7A;#3 z*8xn8pQTOtm=Xk;&j8~SE}^}43uzZEN=25u_*d4tc70*KC7|pnG$kpx`Ay1Pksh8P zBOU1-Zq63+*@Z{glMlsH2Owtp^(Cd&)-RNyd2T*0D6!l}5=Mgp0Jw}V=YQv#1sZY* z1VkgA?y9#ITsfOf(-`|&9AJQT%E)a{aOM)>+hGHf4D`0W58-Xjsy*B(=RSwjIDp(| ziWqhf=lhbs0?qDXpJ=$Jx8nND+b3td1aleD&Q~a9XL`48tf3_GDJtJJTyzM{*jdL= zIw`-ys{*7%ngF0bRL>7rGSfkpx%kKd_r#vJCGnzBgZlvyV)L5j7)XDITC8CBBj8qs z^F`ogPWQ<>54^urFBa}3p*Mn8MC|GaBW{APMM00b|SMTyCL@nq*Bld8;_yDV%i#6kw~J_ zdKf~ot|=WlkWw0|`dXbtt=LN#*fFOt(VDm-Z8Uw`SvcrR3MIZj!u(f2Z{_6ArDkMb zgV)x+%j{mqH^t2k-jj6cMPjaQ?zc?!MCT(<{FpZCk4J-y> zbS7Xi8)WwkBcag)RVFkb;?xkseM6{J(YNegsu$GA5TOIB?{aXglbnI4{Nb|MjJn!( zRJ4u7gf4P9ThcZ0|9#BLGAekzP$AG1v2J+3w2M;}7UFkAU`Klcks-ICGjNL>6XKt$ zndKuGre7D9O8KTXqusZ_R>BHgUI_c) zC60>IOUlA@G&a;f*9%aXvCtZ#Bx>`3SrjVXq8bn`FCwAeFm0W@hNMnx3^PZzAe?gY z_Q|HfTJP?|Oea%cph;EaRcxAGU5L;t9ub_neBrVfWrE~_n*T2i7@s?DZ9FSyDRd{z zU5W#_td%N-nc3brtI~Aq&D}q0P@5(~;McXf18U*YT!7IwT1sWH9gV7M!ho4tm1S!> z;@yRx$xpo`6{j-8X~%{4AHJ~Mgp@6Qm|eKoi*_c%*OrAjkH)cyCg92VKGN^y3?A~G zB=Yu+UO2q_zMOU=>* zYKePEovi=I!M7|GqE$y$Z;)jbh-Lpy>Lj9E;)gzJJi?4XjC%Po!-U0?1V`8YSfaiF zYg`Kguxm%_LDpgN+)QM17iAGzlB&PcyJm4QMhd9kiwan+!YD_VHEoCU1b8!Q&>b7C zcC8za+KbJd$nzEvF>Q2dT`vUD(sMt})!@ehZH;}Bu1L|q)hJUS%rl?Hi<;pw-07}? z(LLJYln|6OE_(TtsMXH5p?z*}RJe!%lEKygfyuYir}fAy4J0_=2; z$f=F(p71=+9R-sd02VIk5%r|PVV{1xwbA3qe^Z>yrPqg(7H~A932;?-#4!Ct9vCQXh8~1<^I2 z!$4)|X7SB~;{`6;!(48ZTLGr~Fma}o0ulq}!|Yoz_^M$}^2sRm&D_dmI0(VilymHs zf73@uxsw(LEGh%fEBwp{Rl7U`9TwIh*!QA&`lCKsn~5T_!QFbq8P&X4_KY6S_>nnt z(mD4uz+&CTJ{+j8|DDE|TAYGrnhzz=Y(>Z58rjHY?kDq;*O*c(4O9trSw$nE29UZO zoxm;VspUw%aq&cG_Y|d^T6CD9A(vKILg$6gS^;Qs32Jdu)P>$m6f%^pr!D@NYFNHe zVmxpb*a&5iy!moP%IROsA&$YmCUC>RtnvnDmh<4w^nTK`#4F<-HZ5D zjl!Yf)#;w-yP8?Go0s>Lf;oX&B7P9is_c~5?~IHuVF3+nfp23QF>zyUW~`gW9kGS$ z^%UOR8u(~}r6em&S=a?%J1x^noRnv8Fr!GJv45qa{J?^uJxAlI9G2QFISu(5B|4u` z)YAW6-pc76lfnCtflaQaTHqrbkVCe$lGHc+tS`*xjL9NNGW~(&kC1gEeEn`|TAtMI z5~O2~nzJ}>6@5*3I&c69zt989+s(1=F6A0uw?)97o_T`iD9Fia|J%auB|S4pB3b za;_cNVM=M)J=ZB3IF*yxq>R21U*7YRAsP$M(wlYWr$HKZbzEvIfe1=ps9}%!9Sgvj zph6yt^w0Rk%}B!5@Bv`4TWG-D(7#`pu_i$1;CEI_@Ura9u!Y+=C7L=G{X938U5 z++#}`)lHXmT1wW63RIjweGV3~K@0l7Q0sPNn9Z5d91LE|>=;CW{m{@|*7&P55yiH@_?-|==QpC3qAyu)rQxcF!*jZ9WH@KQ0 z@@nX==9d%3Er12Q{V~7=WP6)i0`f&Xk#d15-13tNU8ZKsZml^Vbse{=(W|Y{)2Od~ zFvu)+CWW(JvN4A%W+g_tBJ&|~D;Po1 zX1R$@VJrLC6G|pt@!*f3Zi>tc9ggTMT0D2K_vrE?c>E96_8P?Uwc$vNNBG#vLi~Rq zfi1(RHy84mO}6Pq0}H2vgLiFTNL~?@J-ER@-gIV=% zd*K<3oXsHubDFH0Lmhbo(!B1UKJ==!`}Qq3L!jUVcFgW*Ec7B@rXoBeqWxFeRc}}F zCr!Lxxp+Jz(Nc7FPDK8GyDIcXHFK3kyDongXT6W9tx9d_U1ddH!JApCyvN$ zun9F$qGL@r`ej?MF7KsmYi#2}E5kcmW^T)0Yu^rEmyI=1$N)C2Uxn0S>)LJ%TuBtE z;482yU7Ad9QBiu@WHF{^&fTVdep#Q-0D`DYIboOiL3x>z4J zeT~%(tZs9=nO(7&j4{DWtm)DKWX5S`SikhKN5bY>VUlGz*h3hq9{j(ovZY+30o~mf z2mvOI=jxOH`TRk&b68&&yQEGCumeT^g^pTB#C~%aDWG}IsYh!u#rS{4>_)WK+(^c0 zf_xZJU>w+VrI5*^g48y%oDDzG21I{d9>ll8B|Mr15CXO$z`h*0(UwXOG%|W&(VzA3 zA6G^udJ*JC^ir4prFjb)iAEpU<}~;(@x4h*gY$*1u@MC*jKE_Bsan7hcjc(hNo@JH zKxXqhy(GgLM#*;P6)K=+IqhUwRDn?9p88b7d9a24nB0t^wrqrE<8_0DEgg+`gL%+s|9ROl!fmU5qPcWlE+ z0WY&cVvMa~O(A68k!w96qi1t;?B{tTaPt9hycK78)eJ)1j8w7UVqj?VB+FHm|xR9H%NSt16?Xd(Njb$0s2^UvlyAH^HUwz7M`~9jy*7AoITx~xq z?u#J|5OKyE6#fWJ8~0XX@fBWZ;=BT8{7>k0CsL0om0XaUZFdJ`Yp9w())Ha9Yilxd z-}~obXgSzk_znyWP7^fY_zU}7m$$>755hesVj2ARS0_1W`qrZ+Ps;WoS7?!$ z$YwvA%^)eg_FxN&oMI+VB~+nj%T4wGIO zPm_PX3KdC;Ouxnw-c~`uV(pxuF9UrJjsQncDV8i&pYTLBLv%mfuk@oPtH-XIfoa1_ zWGlqhQT_MGvH>69?r0ey_4HGzL|%(^%$8vJ#uV%p>;QkNq#p0%pOme8F*6qW3rmj3 z-RtZ$Ql*%|@gbFA6%)AO)ZvC>=n1>ntOJLTa7mK_bGu5VJ&>SF#G^ za81us;kE919JVBNQ5UjltB)T5sbvw|{DteL?2syco&Dxh-hh2Y_)>yx+m%3l&u4^4 zBMz|nLDp^dy4>!5n|pFUF%_XfOQ|rxvm#~z?5kRJTK#B6k>v{_>evqaB1HaeW6MPC zFw$b&5eCn+_>Z{1avvCorK`Phn{}+2fpwnLQYtJ^$Vi~Uy;fQ4vC*L;@(O*ISq_cx z;{#+wtl5+#c0s34`Eb16A*1%E!P3O$%?aw+(*l&E!u8ZC`2JEiE(}97SplK;&umD% z6mXcYgJ*6e>i50b%VCKo;Y-k0Kv6@|c-$-#^&Dw zY?{z~++WJ+Kin2OAg4U;)#!%8R8PCsSBZBh@2~9c_q_E)y>Ru3nEn0wF%BF3-pfj= z`7ykte~FFgjLFa!4a)(~J=y6_>gCfi85$ko<{Xdz=A1|D79eH5GA|E0t$Kd|L?3g;bdVKVtkfvF4j`#hqrK2>$=hfPP9-b@w zfKuSU`&!ST6l;>-`FvO(QAqXfBR_4>k^KM<2t6OK1cl2^+YzR!@aGPdGC8Zu+f{SAMfE8XkiL-H{>cXJ@T zvM2A%mpEJIk$-KeP*mj=m<)8>=?B=;EiYA%qeCGACz9HCT*8G;Jgs-gciM)WW=3z$Yzx zlYW7+Zn;R0zc&4irk2j9*4P&LoD>nAZnCSQVn2SK{nK&cQ8U5 zprpv(E^b9O2k(sTy3a`(%*p&6F0_n>U77Jrg^eo~I;T*GfL+w=G`gHAξR+tGDC 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

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