From e06e4b13cb71a589266f3a2fadabfc8a916413e0 Mon Sep 17 00:00:00 2001 From: vados-dev Date: Sun, 3 May 2026 16:40:21 +0300 Subject: [PATCH] Backup for MikroMaster created successfully at May 03 16:40:21. --- .../20260503/20260503164001-Binary.backup | Bin 0 -> 215206 bytes .../20260503/20260503164001-Config.rsc | 4090 +++++++++++++++++ .../20260503/20260503164001-Diff-Config.rsc | 29 + MikroYellow/tmp/Config.rsc | 0 4 files changed, 4119 insertions(+) create mode 100644 MikroMaster/20260503/20260503164001-Binary.backup create mode 100644 MikroMaster/20260503/20260503164001-Config.rsc create mode 100644 MikroMaster/history/20260503/20260503164001-Diff-Config.rsc create mode 100644 MikroYellow/tmp/Config.rsc diff --git a/MikroMaster/20260503/20260503164001-Binary.backup b/MikroMaster/20260503/20260503164001-Binary.backup new file mode 100644 index 0000000000000000000000000000000000000000..bbe08a208647e0dd3959c4a28afb9673d66ea08b GIT binary patch literal 215206 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%0DtQG4Kx7| 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�S?lUip134BQp}qKzW$&0#^Fi~ip1 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
P}KhgtL-;u)K(I2^GHu4bp^2}t=t4V zeRmZpDD~-xpt8vL%c$*YhG=aCMxR=%2_%U>Uo!L{dW9+6xtZ|??p@T%lD;l zy?a;%wTP_xo+)_QH8xb+9KWQ`Pr>&slEGnIi|2v6vdRv)RxJ3i6-F3=F&T{eP<~W% z@mP+x&#QcX$RPl`HE{3vTHX_>DNiQOK1)q~%i<6-izOoj3~RMA+(HNLu0{0&Wc(lWR$ZK>WkFpAzm;dnIt(*tJ~>OooSB;dp~(AJmHlF z43KJUl=4yP>S4@6zWW7rLWLS%-LL8ZJ@HlDn+gRH40zDla2Sf7aOhDG+0bbpzqng` z4E37O?iHkv2PTVNahP3*t}#fkHHE@Mfzp5(g}z&)wAu38 zK^BmL#ZG4uKoxTh-sH|xr4I^dZBZ`@;#(6zN7ELqm@IpR$Pm98zAIgWZmz&!;;hKW z0lc#|$3cFO2C5S49Y#y7cy#On;*Vs4a%J^kS6dIDLrxdIPjYc zwFas!`%{X0D4MMP_<-q=L+BC95OGh|7a`5OTva=tbNlFAw5sfLG(jIPYMb~u{g*<# ztM9_dKTutWe=;kcOZdpCzNYcu1`w^JIQhZnch|Yg5-ExG`vqh1CkOI+i}x*R-C{?U zKz4-H_Q@xy>*aixoElx`4jyhXlkM<@gHCqPO!oXR-i*{=csP_ooRMrcx@QV1QnbL6 z@ad|kr}?iZft3}DZPNF1n|99&r{=8%ZP+4u6rHiol)hD-FK@kIh$3rD4siF!i zT4+yn#TWi&+3BG^`GwC!ft*^TFy#RWCl(%URkZ-NZCY3hD9?7rc~j#SLjN~qqhU;1 z%o!vKa4WV_w@e|%on0p1rs;aylk#eI-f*1Au3CnkR6Ev1iaDf0rWa>e$I3i7z1YfU zA^(OL{j=TjLx|k=RRDMDzM$tdfoN51H3P32&0n?iNKqsz6gId%v*)6hwKr^Zp}U4_ zftVuwj`F&4S)AjLPUL!l)@B&Dw_p?AYY;wXgKGlmBJ~y0LO?u?p0xIUIXF;DTL005 zr$FCeDWv|>r^}(XN20B#(=MMyMnk>?5+np+wLj0Ft&m=eePz=Xj=|r>7SE@#F?{GsV;6 zeNEV3p9kp#v=lZ<{<`Gl4dGpbe+4xt3kVC0aOzUqqn6&;@*iGU2(kUp4Z<3%l7cGd zbuOp4A&nmLBb9zykqC@wEAdMLuGn!N_uCUDtS6Hm8RhFMLgstN61h@vOChq2?P3M; z-mnt)0`55|vzN=S@@-L{+4Y$PR8LH~YpSFqA?&^uL;d5raX#fsn+eaQY`8{#TMfge zvQhKxd&Zt&-Xwo4-ubb!y#Ry*ladrE%D|neIUXFv5YvmY*kHL z&I`0v#mShLk`u#1ml?#s!9|Zp%Np?G8TEfru2=O2?s2j+?z! z7W4fR44Q)gTKTS4=VVX6cd*%q;xR_>=6~@LpmiDdPsPmdfdQ%lIU8zM&3d!dEtF2U zgM0*z_%ccsuG)6(hgCT7(_e{x|JC8>_FxsLD<*aIHT3+X9xI`&5L3OAc6J2Oc zOX^LT5LfV!H11Dre=fY_Re#F79~U0Q8Y*3i!~Q3}PT1n@Qe4Yx^=)HF| zs_*D%gqo4ENr>+bDQL*QS|MdzmAYB@PL3Bm6e4Bzxno5(?z^syGAd62j|qD*Nx4(? z*i7Lf7-%sVDF>W)o6{YfzJ$xwALX(8sLLY*U){{OwZT)0mZu9NOiVd)cXqhpRLaP6f>WA?VqS?`2|buMMmz~XCBB&JYxFbE^TgG2@{`~w!j(DpOchn%Uva}H_d1pbV%YHnEb~4jX^?AB9S=Ct{ z{xHJj;g*$)K<|x>()np!7UbS-NCv=~aBNtL-9((7Vln?VHzrzSTUp=vHC5f1k%BhI zSbYcOt1YRT<-W}4fZXbhQAfc$-CA`T9f0L2hl@pT{VS{^H@em@Y)P$EH}DDo<<;*L{^pOHXY(txBEZDc$By?l zGLv6$(Yt!-W?3EmMGXXjiZe$VzCtf8U~-EM0P6#{70}>@!NOXl;ltqDEi}6h)8?!* zb;P0^{OZ@s(GJGFn~xfMGr0WR4_VMNVGF`+S9JLFze&mC zVRs)I?F3F1v%O9^fpQnp%g8hKv#=e@ZRbGO@GgEb!ryIfb+ay47S8o$>-I{R(PT&e9PBiK#DPtd_$P}$o-!SCRJ7LT=tt)+7oow?R%VwozA(0$+>vYgK=UN>Usi#!H z9$D|ij<(LwnvTR2E2J-xdeUd`(1ow$&12M2X7#O0H@1HtJdz0B#d)3ApfJLfXC3LP zhMz^4{|Vo*2+5;&!jK(SA(|&+_U`AQWsTa@pC!)bHTHombHl^Q5PL(3%LS^qcQU-zUe!S zQEs467a#v?YTQ-UJ(O2@g=}f$A1&_hFmYSYDn5O}&a{wJri9&=a(ZUAKzU~jARhZF zyD2otTK4KFxibzU0O016(RT5nb0I>+K3&VLOOJABR$?(jB*ZU#Ywc+w{*v7RpOG}s ziw1)wYieLyYbr4%n+^A097_5A6S7+_tfjq}G6q-<+zvD4P#!`dMg zBdK%4pF-yeWU@1`Rd&rl(X&bN_mN>9`5Qb1l$dbVJFknqwW*Z* z9=;JSP}eH$ICYG-C_r*UG#1)c8cYjGUDxyZlU|tAxBXJRBF22`#FBkdf}UygIThs>DT_djdAFf+v$`l5K+5S@=cI# z8v7NbRT;Tx4@dS#2D@l2lA3XK5zHq#r_$Qwf1O{ylF}irD7{pS^{O`cd0xb$UyKQh_eKeaA>7SXaKqF0;p6WFmW;%i zF_nZrM>6{G-V!gtVYk8*; zsq3(3M3~ZnMMN#Wo(~eCTf>UV*Lvh-Ago`6B+m**|0#M(qQUW@=}F-6lk)<$;|>W@ zsd(o`RoZFsSh5P<$}kv1k^$kUxaH)IzR@sQ!upKd(-Q;sT$JC8a!Y7qypmYBl!r#I zc3zYhCp0TkEXG(pej++7@zuNjxvmNrli4$Rw2uU-+VudfjI12BNX*|s@APy}6jz4R zwEC@Z^l0C5`i{Jvo@(4YHWejh(s$oKTBNA{8f3{4 z1`4AWM-#Bvkv2Ym-t}vAKof!V*2;wF`tN2vpN{GkC?-SHhjH(l8=YqkkIDe7@&v~Z z$}Ni#?yQYnnImY_Z7d%t`^lb-vxo9T^Zp{_V;l|g^W3`ys#tAbGU$an( zXiWhW0SU3dT05#{nE5{E+=i$ORlqC z)`tbq%Oh=>M>(*8U==*h5188v;w^C$^S1${<8H?80$Fy9+Kx>~)L9R{0H^a|`T|}E z%*GAxCfRb8LnwQld9*UJN+Q)*r|8bcdwgOQzI>IWyc`d49lq+DH}nx_l0FUSqkN5m ztV-a3O%9c<%l6g9Bn@UoEw{=+npTouTr!oy&nG%fKgbuy1l|@(_-9FprRM>)E zx18Kxo?g#F@l+p*mAy?Q?dWG0+#s44=8Dg{)E};+CHXFw5lQm`>X|Gx5e8F(QK8;7 zrmcKi-YWk{+z*d|cg70+`D)k0^tcoTXn8BOY&#}^UE#dsL1XY2$y~Zk44hU8HdJ>+ z&UrsD4rsAClaN2NM$8d>-MBa&*9&%Nx|@&!k)*i1%tqIL;`kG=tCDxkWBxV$Q#dR; ziEq8HiFwS*EGC=`KPv8&fnKca+wCSL{Eli!U$3bc%}LQY(DiWJ!utce6&x|SKB!#8 zn_#{}3CJve(Y;K)VC9R>!LfeKtUV5WYK3TQvmMHc$eU${=y$X{-`%f=b_C=-)JgU% zbgxe% z#TZnmvrs01duJbC48sUzlw0x%#vnHXlXlj1lZMFCQ!KR{{68r91_^e9({p>g<4E5(svA!T}(l=>uUhjzNd;bEsq1 z4-^8Fm(inZpRswprX_Q#JL%0TL|+2}Lt8QbZC-dh8RhicU!b}jVdRrdyHyq6DsZU1 zq3hw?b&8a=?n11T%x)>LUwGN&b??XpY`pvVc%T<489D(?sqK6P6YFJXx+iOVKl~s> z^oi>GHtro5few)Z2-2Vun5+bw=+&$taF^mPV zFG+=hHf*uT8Of^t6pVVr0BC|9GthYuJ?a?gK%TbYXq+}q8^FxGV(-|(D<~2fl^^KG zX-aB#I|2Yh@i2Qn*u)#Pub(iF^dEe0rpgtw37y)7-qOB8`fL|zX1*l&A-*Rn-lTjO zIm^#ob*tIVr|DDc?na@H3m#wF4oC?O%Xse^EX}x^Up48BM&$I5#&pAwxBs^slY3CPN zq=Q;XM{6IWgtfBFlPN8Yl{3T0!{j>lWE2juMA{e^^Bi;tKmZU4gMQ&<7%2(sEJFA zChz361?oJ>17s$k?$eJwiOiA7t&;u0GG>Kl*d*NrE1h1!WA4mZ!(=q4smR7jj{y3LY*Kq^m6SDpj z#j+wTS};+7*l>uh20Y~HGzh8*(Qmpw*ahCgM~t9HR(~chgi`q z7e^lNO5m*o(rQ=`N;JHQAnA(v4k*9wB36ZHF`|;-2$TD|Z7t9CvoF+ik%oaho8_2B_cs# z>8b5uOr3)e1Oojq>8|H^YC#ssyM;^uu&E5`q&RjxSVIXDx`)=J<`_Bn0jCf|AI?P> z3x{k(Q{vp&3V0)T9atvQ3=}|zTRJBf!Tn^VzLp>&s&@7uUzdD`*-&~8 z50fsH$|uQPIszHo$YCMgYm?U0IagHHz~@>i3&ZGjlw|>Ty89keM1ssjM61oJi9T4X zr}H9s1fY_Hi|e({zFS)(Pa|83!4!#avCdw+>Lwty)^QRW3tpS&;(oy)RvTNY*C9K@ zU2&L7b$1=M0TncXSVtY_r&Q5CugGUQCos|_5IMSmPHZJ>hDN`+(9^hRJ;6j4TfLks z`dSTyqs)>ro->!e5xLn;lp6>t<-)=$6yXSMQ59u^dWwt>3v$YpA(G?#mxv(5yfrfZ zW72o|F=_(7uR*~q&66juyBaTevSj%emi^2e2KX9oj!{qkcJba$DIfSHAI zLrgBCAW>2gA&^D)Gs?ck7jhnT2=wpSfl~_&+*pLf zE4Tbd((V53ik%iPSN4Wa@p(MEpNQ>0<6(&|6t#nJ$pa!UsljNgPa5`D)bWTc6_(*{ zq&gYneecu^o@Qqo4G{3P;e)CkqDjc)scI*&mg%(MQ*Qi|Lh~;V)ed`Cu^QwMsORDd zsUfzvE)CV@=Y7PkGzfIoUi)%B;#zp0%CAC3p7lk;-uq`HNH5xdPAtzaG$HUj0%*`4 zQ+^ROP}%?^T7%?9tcgx0Sia62=uA*bvUN}Tep-w)esC~UY;&^c5*sl?1agEBxWm5l zxo_m2G|W`z26)LehB!VgERq-D#s=(U*b5>P9b(MHKRPqQCz~WoQ2)Db+2ULt4Z#L_ z#v8n9_wR=8c4@!m_rl+NwPemerZzhZ^$$5XWcTumzsk*v01eH~PG|{g&#hyS8_?1ukYV=q0&(?OQAg@T|Bp3E zJ1wPCzQ8+-GiW1oU)KInkS4trGlo2a47xrA1E+W3KK5dFoDfvLctBnif?Q&;dLCg? zFc#Xo;!;xib%~Jx?$H(1Y|R1JOuT`e!IOL58eU9*8))kc>xbqAeW6O5EPR#NpJyYs zj zF#l41NwSpatJeThk*3njKGNY_?FeYn2k$yO!kgA%TI`L$PRl3kORW}NgxcrqZPKM= z?_u(CyOLeH3Z?fHj990OPgK4_1cpv61@PZWxZpIX5G$jn+VgVz_6ufiPdcp1?oW&2 z7}XMxL4JWBik$ljCa*pdM%IUN@RoIC^5??d6wBe7J-vNyyeR%%yM|LP_X=4P*T(J7 z__oNFerri%9*-2waNN@#_Q%}p9GMUe*lE3rBbjf5x7xL76Jy%iowS_+nmba#_}5Gm zne<4)U1cMy7T6{Amije7iZhHsB~%<716ki-C#>uw47|)VL;sch?!)+@q6B283s}M( zIJ^gm&pJ?2tjhomE%TPyi(K;z7+v%W_M~|#-fDCa%+KZy)!E))6Sg=G2Z={tt4eu{ zSqyuas_jH&E~q#KXT`^^{_-R0>rL`|N;)L6N7(2^pg+IP{;@WYD+B3O8{nlE5e2CH zO(A}8D$@`mSG3KlnAuy%$C*vxfg%6tQvTU4UhIj$VeYAM>j^(-*|J8OjmrV^l3l%&T#?Ef_=Wz7Qt*x6z{_PGd8F?R|P1J&$kpG0*iMRL z0E$bRBsi0BO&P2@v!P3ZVn<&l z7Ch!SlvvtRo7GPmhGAiM*{Yb)X=Z=*x%Uu2$v0%Z`S<4_>t)pEK;cl*~pWCA*30!mq=0(=g;VT8Y-vbw^S#0D~TKIyusSCV};UI6z6J>vDr@k~Ff zUMmlqb_})=*K~PEUpY7jGVVP|&MdV=a?^KKVaN*Z9}n_@*K@Y&yESDnX-+F3Iz--x znhu@H?$>goIP&WBk?lyqQbuET{!r%62?Q8-4}LV5b@sJ*zQ?UH%={nNuM73Zv!hnw z8H<2x$k{XSl%d1?=t(uayYcEb;k&Gs${jZtzv@gwBH~7ZtvU5ZWunIP&9_esT^^jd z6Jvw_5wtlJSTpza*zbwPTy0PP(@Oo08~0T>MR#H?KqusLub@mzT(3N-!LaHu5K5!T zk4ctSV-Evf8Y0@IJQopDFLr}rqxtjw=_%G|CSv#1sIdZ~GM-2Ka<* z0i*>bHq1sqVxL0tDCf@u^mirT(3Q_GOLkF+Vlk0^QCFHumf16OgvMq) zdK!}w$>jtk`W@L-U@NM;jh!c|!Ib+8L9Q>4fAb(h}(wAdwX@>hj4HxIl=vC$iI* zJ*Z`wP2Hq;@uff3yaFx@QRq4xj0I5P|I@tN5HT%g#RDEH0-rD}mwzE`SNGh+)-Tt{ zmXWtpYhl01jhcZSql`qPWXAa4$nfIHUW2$mct23iqY z=PhrWulxnyWH32c>{Mi-eBZ3u<4P-GiAJ2Yqh$`RPobZOAW@#;2O=B_VnWb2_hj27 zV6rF+-XSd{1NB!S(FeUyb`n!r|Gq~`C$dKQEl(#)idFdzN#fdus@IN9N+x5C>z392 zMXPgKSE~YSlJO?$00XrUQFz&|j!a6}4>ea&j8kJO%3E#(Z%qwXL0*g7m+4Z~{N_hN zcejYRyYZa|4eKBZ@QCjK;>qf_qYtzSeab%=7CLR;i|-}U2)x>n`di22NFAJqCOnK>;JCU5{>_c2&&tNiy=eQ@hA(jlbW|PkqY*jbvVv&C;W8-v@76i`< zy+p-az?E#g)qVtL6!_s7c zRVuzskJ!_eWR|{tIlo^Ghu($o*O=B_|2`t_QY{NMl~{%oRe)dFTlJ8x0e}^GC@XCO zCe?(`qHidFi)Tj>lu1r)QmgxL>QzvNNCdCbs#=FXq^+~5F3qlK%cYn{tWirU+mhHQ zgzg)CHmov7vI^TGZKNAjyotgheM<(JggT7)be?RL{$kWoF17BZBJ1w&jH*0A&FTLu z9pvn;=qPMl-MmaBDgI#BsgjYp zc=WZcC866SG)s8=F~AKF`kg9!EB5w3OLa6<%r59RM*Fp$~goRl|6NuAn+*R|mk1O}#$1X1~ zLI&n(g0Xn?wKGH1<;ehA4gq)m`eaV=AG&`|5G;GuS4#<~LV$D{oKlxz;bb{-^9ZgQvM#O3mwy%#tW>zN!5+?PS;=WkN`D0en>M*K3j z`^8S#b9+9%{>?Ygp(t~!#egXs#9NMm$9IRM?)Nopu0|$RB{r=pJs`W_1h|uLIr_$|ECrF*u(0`&IZK;n zQ`bX#j_^)^)`R+70~1!>^j-G{vLDL!Apo+^WAv1$b#$qwhEg{Wca}+P_nBLWI#BfT zvtN%XBY*Nl_2AT}vP>?ZHajydy3F0G*7p^q+&3 z-Ofj6CYNI0j)8rYI#>zOf~I@;QWlUGk7n`84|XS&8UvW@^BP3tZpJdDLW|*dFYwE` zmM`gl@s?-U`jovk|Bcw1!lk*kQq2w$#A3_pXEVaL1*kE$F4$K4%g>uE3SQG$NUGaP zCC6dp7fTA=!mqyKsaUkoRvAn9{Wg=n0*rVSpp=?yr4)5BO?MO};-5{GdKhfR4P{`h z->+h1wwhwM-8f6~)^^pm^CPx`hBNZ5>5t1_N3-^i0tqJ1PZRPU20w}Fv{@w}DtJ!5 z0^d?7#tay)DzT=U-apYyuV8XXj8M@C>fP0cLU=M)f_|s7cgg?v82lz3c^X1B8 zm3v9%oYR_7fT37{Q?Q@z_}vU$hi^a!$v#~?>V$3tBk$2vqj=g-lY{U}wK6asl@%h8*pR2*Ub@OI-_H)P{kYJY6h>zR zca!e)#(sI!jk*7|?z8N$RGw>w9J2T!>ie~XLh;(dDDqWF1Mc~RcN=r}6f3gqvw z5dbSS2a<_BigFTpLGN1O&oqH_>^A1eYt-%9k}4be7{k_vuxq8K%sm)4+yQhh|vYH zVRh`nt0Lo!q)c7j2PVpFaOQ04RFzmNNRd$hm=BghO!b1t~5;=c;fULYa{VdF=pKs<|6o zDE6$sM(ZM!th!iFDT2P{P@#4fpr@m+@vh;%Href7(iBH{egT)#N~AmiBQ>;u1ULXf z-RJx5yNr3v2I$WBjbs8|n{{@un|Zs}`V1Ej(6DdEBQ<%swO6==q-0$)j1XOdH*!*1 zLLLY%^oSV&qk}aZ$SSefV#{o#fFuUQAgUdul=LUeJ1#YQR;| z{2H5|^i|eTQaVab)$oo8EhwfdY)tJpWf-TGAxvC9xR9)Shm@YLruG_J>5^6iJa3}Q z3(u9IGfii4(YC*H4&jNygrQ~d;=bi`G>*!J)&1E+v^>hsZB!QV*s-1<)6nu6*;?G^Gw_!750 zbN`9iW-_>1Mg()#`TKoh?&$kDM3dEXly!D|f|LRy$_cC+Tb4gqBFrzqt=Mibb-g-B zD6l}}thf{n3eZd3OY%+G7w9xk)AnqOOAS-OfpyCNvlez<8RHR^@`rxEZwuZ&nZr1^ z8j4wV&D21mSpqg^y0Ep8#5ztwvMNI{6#b-fDvB`1QUr`r<=>k&AF;IV%lXOo?8c*e zL+vpVFmlLI+y;9Fs9-W7Xm3oZgY0tPfqsJtSAuxgsq6IPEJtAc3x+$azNY;zDQSQ` zvz-IgCL4Auo38?rJ4D>21^OcMdS5?I&cv4?4ktX5-*E9l$xak>04YUa)}7*O z0DZaK2?MgHE~58%sy`Yo;BsXP@2~`id)E!99-9ci1~~5O1`Pxk&Skku3F+zCBkNqyHD=0zbkcWkk@nx?JnQ?@mrE7jh^qV( zu~D!ox3Yx$8AKu**xJEF=lXk1Vx{j9eY~aJ=(DQ`VFf%BDG;wG3?zQX)RTxw6MH!% z!e!r|i^aEtQ8W|&R@p5m#jar}neKZO2tQ`S_@oOC7m!ImDNG8TzBZVS1-8%*vVYd? zKKF{6e+!mZi1$6$2Of?p+7`63^BuJf&+IqfuF8lSq;U5|5-4pRFL7?jOIBTqkSJ)U^#kh9dV+^UllTa%n7l*!1zi z1`6NypC>$Gg*CUAv?D?-<~s}g?)IDT-6;ius7huSsi#Mg#kpA-A%}U)3%2DMVKq8x z`j*-&YLlX{FI1iRz|7EU^`OGR{6;q zP=?f9MguNM$WC`itcv|@x%0*E%HV)8=0EDpXs8;>E@C?h589lKtdlAmy1 ziitEf_o)=}bxuBd?sEkSczK9QOqZp7HQgVQjXYR0_~>1*9$~kq8LAah4&Pm!5a1#e z1N6`V1&io_bAkpxU$n@!e6t<=;IiHg1P;W2-8<7J5Uk4QImK!v$IRVXPEYgE6Aj;O zHc#Pe1tRm$eW--{Dl{Mqitqn55u=5;c;x%sGOe>L&tsN=wiX)#(w+V;m2inYTzcb& z@s0k?%Dv^&qZGVwZ6u+D(jSbEVE-n66S`h%QoN`#FJ+F=*owG}v6ozfsN8_oX?UM= zQ44fYXoE*Wo6S|6hw8^&$0_b>9Ek_M1&(zEkGPH8K zBmH>%>(|*TOFYe0076oxM!?&8?o>|cZqOSFGtO^N@7Ho7wk`2Vas#ir$W zyjkO~jcxAj8xMcLkuPRe9WLt#fLb3=z;h-ZLU61r^3TY&r@+BIT zjIVN}zg)jD?P<97$|AMHJ--~5JUg5Z85HT68))Qrz}~$Xea3oj6NF779N|q1>^}(M zpM^xvW{MDSmbcTUwS~L-&L<0OC=_cH5;$=h{gV7_&Yv5q+|Ln)<~c-`n|2Rq3yqpF zwhJH%71YC?S087)R~QXwxN;_!pH^42#dY5lw);;as3V|qu0CA=|33i0+2k3b4Qyaq ztPM~ER%pdS?7q&*+BnIhXh*1sN|H@mPDsOpVl>_jY;?}6@RKx#cV&XiW|F(o0^i$T z&dDz^LDSIhw2% z2>$_OjLK=F@RLklNY}Xv`FK3}qTec5yl3z{j}({{9Uca^SHnR;cdk*=!C=WGn3Mxd6Q{I2!@@e z;so0F7&S}lI>9OSd2*-XUb$+CEe=mml!4E_wFCC@g)s6PQB^1aD-4b!<|4f;PIsFBKb&IjqPj|KR;%eg(NRKe>+#kChsvx`o{QAIOpW;#esRj0 zh$*4Z-;fHQAeSF#*7-4-uLgw|yRC2~E<_C;Yg$0-L&hWF4$7|$y`~d2mTF5>;s5#U zh=eysDL)EGuVU`7BoRQ}JR5(l7iJR)}gvf7%XKs3IcU z?nN>TsJ1YddjtAvES%zvP{9key~MhW6qkP+USIE-r7utUh}A%h>5WvFIN_H4A%<)c z($GQ+*4%h3bcF>MWAX8DxBidb3N+CCc?&wSp{0WJjUh?0r}yTaxtF6f``Xr*m$E{TQliS0`p*wmfUQd-sJQPVN`0IM0Kq!-6eUMd333yk zH6|~_CR1So9dt%aAoO+EK&0I84+7V9-D#D$uIGE(tpU{o%~GukYTPhN&&?*UWz5uf za6KhdT3`yG-%vh6#25Q%2R7JKG>MxP7t-jMRa<7Y0nLJ=5~GDX?tklv7{?+oO;ckO zIjH=)X>CJgEq{ccUvte!R|r`rf6a%rwL#Y9qaMa-JsE5kk2_xK?*BgBy0JVEi{Xti zGWH5LH%pIBox}=-|fcxd;~VEk^01L?p04W^^8f zjL^#}yyjDaB~BvZXd$KGWccE-Y|aMRfoijQ-nEat`Y&~4=kE;nwW5PLe=hi2Cn$}8 zeZdV-lbQ1pNhV}Fi5LQf_jw*(h4++p#A~nneW7lb*NoaGMiAD-`2w)1{P1fZfl!N{ zIT*AhY}*W=<2WNtIIrZgw9Q&frK)_|ZLFZnrCB!@p+TN@GV<&(FxV@VD8h~YarDO4`h@B^&YD=S207B87&NunPK%NQOovErn}BN$6$AX_`s(J?PV zVhX~RnQJ+>IS7&;Xd|>x&m@=~nNiqh4?IFWjOSVmebmI&9mzVbg&*u9jAjUUMekOt zl?ToG^QpbEyxEbj9%nLx<95Gb4(jDhA_--#eg&HjAaR7-?usVDro%HApj*<70Ui<%l8_fyFh-z$Ja-f4+AK zTwHm8zSK^~x7_a}{=7{TOa!Xw8C zr#4jPmc*v=7Dtsx#`1Mss+3xlg;=RFhNRNn{C3Uua+e@?${8%&h~?nDsTVL72C91d zG`DF&qGNMSrc*f?C)5{E6+#GEuzd028S%z(SI@k&r$^d79L%cmZLBGh`sCco<&h7X zJjT0O1P9Y4*Exp+Qw)x71T$~XSiLS5XYHD`vL`oVN|du)GB$61hu)KjKn;_UFOjR^ z&)BMPZSM4*G`)+}V6ww1V4;j)WVZLBnm2)hXoXdk4=q!z@vVo@ zd?#a6MnmXmk67WzwgYh+pWWHm|OU_3_E(687N~QsQoW$sh_i}TY|ZTCCrN6 ztnZ4QD^}$F%ZJ{@*oZoVf^Oq}VP5bKk2)+nok(qD&vB<}^6hl_<{Gw;zHfu(0`qj+ zf@pF_)IsBb!$+e&6an5sjeI7>6P*_mG&{z`&dT3S^7zF)(>hh$C{?LNk%y|}T;f1u zJa_eujP&?_mJ78%_4I@9A?1lGea6gTp~YB1{0ANBXlZ02r7kEvvVja|O5+%Z=yfi8 ziae`jd#>3RzsG{#NkdEhTr#GC7}e2Sq;)8qEH>+Z$7`w|k?Fpns)pJ7t{EDSuJ+UZ zaA~i`1-Ze17o0vQsP*@c1BIZ==Hq_MV)bdla!mD{AM&^|)FOBA^@;q1`4S+T*7l_u zQn`bPJ*-}-(ewQh!gmvY&ND!4+)N`Z;+kDpMdZ`IGy=>HevDN_JFiS;SNoC_zMXU? zG!cI7B1pcXg|q_S9m;=cczQ5?=uClKsc)d|ikF*mqkn(8(PplM;?fG<_cmcx_mb zS63U!Xj!%{x}Ly>1}oEZmNnno$zzG4q1u|f1-9nwn1|$*^XojYO5A#U6YAt17=h}l zmZ_w?uO&o%(O9G)w(>mrh!TD3)6-Ty-xp(h@;5|xSJkO%H( z#CQAe%{mnQ{{Jp+V=A`zL$l|1qR#^J*LZ6HT)X6!Zal-f%b4|6QU2>~xs+=wEGotC zX6`Q|X@+nG(t6qA>m_i8!22_>(KL8+R&#<)!Nt*(0>kPnksf>=_+gO$6qBIkC#l44 z!h~TyRK9;j5*o=N2Npc7YjFXyx3$CGav*s;MsnxGIwgP>>lVge&mHD#omA+_@?B6V~_<{MVaNZQAE?ew$_ z%L2q3D5olsi&Vp98XNYj)3(g6c(v7r^}@9IDYml};kh9u!0b5DS8tG#<81zbV{0Ei zhr@$eqN{J3>o2@DR2ovrOjOzSIiCIHuM;r&D0tiO%ZlD1neh=}s^6;#)8d8fH;&2u z?}1dKEhKs!+m^V?LR-OUd*3HFnM{=u*vaw>*ErKuu7o31MV46p#|9hg3vHz19Z*Yn z`ts_Prd0mM7P~%W`CyeAs{9@|h?nIGZ*EYZh`n&}ZNA0NR;zpa=!kbp0#k9X1(5D0 zkmqiZ0Ga1>)l{kpEmQ=TLvxj3NU@D`F6_#5Xd3Y>9K!tTPu@g{Fqs#yVo7zR8n@;q z%NDX4sipqT@iuL_Ov9?8AAz?@^L`5Vn9gCR2X3aO(KuQ1lh%;da(&ySYm&ES#psyL z`HjB9pzv-K8A1dnfjyR)!=#dbwH#i0yem+&6|xU>%PioP)?4!(==l=~Mcd~aW2S}M zdk$TTm8^dZ_YFKm-ZRy+hqVDfg_Q{5_37;>tH&RuRo+l!+|4?8lEf?5-yLz|;6rR% zS(>toGaxw$X$BRl4S%_HK@1OoUb=YMRuJUU%^x?}dV?c6vn{T=E>)aOZgsx+056*I zw?$R(c=Jmm%bMz-Ygdr7QD*D~F}PrI^q#}DRemEG-3iDTMT<$uk!?_QF3M)dvC;XA z8WgHWK5eZOm~M1Df&}L}b9Sx^f;JRvZoH!>Ve5Dm-Tv_1PJ4pk%|!C{c>Fi{Ig@d< zpWUEmM<+kTs4~01|H;pF(!7ya{;cQn)mil1jL|W=dEkbYakPq5S2!CPCQFG#d^u4D zzHfKIKa-MUkg_jq@POy#PHr8o{EybFzsg(?WS`B6P|PKqubepU1J1wN+Q<$Vzz2`& zIfahk79(GNRf^l+k~=>AJx~1m7!pQ3Y2Q+OLrE?PPJT$()_8E)&46eL1w2V3x8~Ks zz}(gnroAW2XK+g5B$meKWD7d3&IM~g=i^ZIFToj{R>hHron2HcNV)r~Vt&dFUk7V| zl~7M8D;i`@_TA6t^@;wrEj5=P+&AnpinK8}dFy@rtEJI=ZAewS$445AEU#fR2`k!2 z3tIZk`OZ4As~hcN%i4D!FQt%Nm2%!>xVvssgd>ZBo=ngA>8j!M|72G!bhk4Ro-5RE ziSW!e$TbP440J(JJ8iBpK$~_DtkL94+k~wLQq?AAJ@@I#k&plnGA{~F10*?(UoBaS z83yC|4_eV%A*sNHarfr(+o=?^S%g${Sx=Ei&odnVv|ydOYN1k$fluMjC3L2!iR^QX zutz3Hh#BgonsAVNIvzG^9*M!1n@LzB)yr(4=cwP6YN_#dTGidjUo4gYn2gKPKUuFW z8w-obpfa#8HE>m9TV`E7M2H+IMPcm4s;?rWRaL3qzg1V*dPF$YMKs<5FWxB;1%-c8 z95QsA1Q5@%shHrvbk zwWQN<&tT?Y`$~r?p@2G)Hw3Gd&3sq z_*9gN&eD8Z%)_u%x{p8Jc!*3UcMiFr#>sk0uRU|QM2UamvC{USI9i>VAhhnW29}Pm zeOu;`ArUZ6d(l~2Utz{4_s^Drc3uq?^W5^n6{U4~6$-_#1_~+NT2qIZOS&nRL*t%d zt+>a~P41s51_%25x`a0GTGm78qa2=a4}JtSpy)G1ceI7EYRq|dQ?1bI^NFe`j>9e* z?uCPEgvk8o>(_v}>n;_c_p5h#Z3w0N))XLfie3GgQ?Zm4x0)WsvLK{us=1&zeZ|at z!aa~fWXFx|b8-H=UVix?Y(Pf?jm>jSBsnq5&xaCX=`VLbb^!tH#2g;jH0JEiBu6gfxxGX{w z-uAKM8yS3M$2m)h8vM0hDB8XW1@2|5T%S)$mwc$PoYT{{sWz=?mAR4J6F#J*2)Ocpsu}VsU44L5^co zA}l2G#fx+*TB!Ns8x^b5Gf%1(j{HvO@4ABa_!-9_s)TBN|ANnE%8>T?F1R{R5*Uf( zr$spdy=`*MNRRb2_(Q`w*o2Ze<{wG&B~%Jc#D+5`qSx6LEX@)ynAKTq>h5>SLa2b{LQxABEJ_U)rh8!gRYxl_WaxK|Gf)HY7`4Cl6 za(?a@ksKlJ^6_x)4cd8Fdf=W+*P!r~io4$91WTOCnc>yX%py&}#>48s-8Dn)(|rV` zmh&bTqo6sOIKXOIXav)UWxy(7)5VSVj_AYJS()}pr4AS#>9f zZcRiII`1y4bcdPHQh%;lQKyHmkOl-?x0$KzInqz|%mmcB4;haHUF*<%n?rwyDdhH> zo3S3)T_6;3SGm128SN{ zBfugKLO+Os^g(YC3J}xCY%U#unURVr48POJ`-`V)ZI`X(JH9UCAyPE^@Bm{+z~L`-Rtn=gj^4 zI*@JG_Qx}|f8zOQ)?bh-IFEU%Dg-uQe-eGE9-@G-)@Q;$wx9K~2=(h}$L2YFA$Z`U z)5Ymf64a)E>5axpF%>I0=?xf<2gAq`kf6c!XH3sB%L7L!kIWm(3Kt2aby*m#r$l>=aD3RX1)@H=* zEsm%ziF}hpT26??Vii^gE)S9^{TRncyvi+gdV9TQu|uDGtq-Q`L5OXe!V;)?5w_r#K)pzu*>bpybMqs3T~sqO27Xl;zHUJU4F| zRV*NdX-0*Z!8fxG1L)+I$ajlvU`P9kRPwQ!{VF9k2bSJx(YT%dB6yr`EvBn-l;>}7 z0262kd$W$wi)yJO5-!mP$aZZAhT1VIqoe9H&EoxZNy`jtG8a1q7WhSrD}0TC3OH)= z5+z20>}e!H8$2o!UHCFix@z$^l#$TueElT-S~fv(qAqOWlIqCJrJo|^sMQszS-%We zOZxx$2?UDTnu?oA(L#R}b#MquTgGu93_}|@o1Pu0;1a4Y__%O@%tn#(^{KXy77M) zY{X=Xxr2a7ksiLC93!MK5SHT8^e z!8@~~C&4vk)TTl=sAcaPo+o>b$x3bla2b&cn6*92K&)OfcsMrQp&uyMf;FrN@?-=7 z?z{^Pt$R*7X%r|qNt3TbAAM%QrXNTJA9CC%3bZ)+#W(0tLY;gA{&oi>O3R|4)|b-QC#eVlwgEhZIxw@Rx)09MwR3it1WoWU3B_-ns3(gvOBTRp40m~8;NrggCt%cJH4Lg*5RO9(@3sdr1 z*Qpm~MaH%*V?ru^Qln7Hzk6J!W+(Id3Mi&hsf#?y0`k#3S?& z!V&|&Vtp^|RX&ABA^@t!P3d2R(2DKgm5laEWv2bR1K;sfi=6A17FQGm`MeM4)=UM& zlZ8d;ka}a}+GKk*Go!q+Ek;l;$gvgWZ9D;RR6FhUin#9n=y3r7b~1a_-n>u84%rME zS4`7OPh#u9{ol@_P2206z(#i{H^7ll(~PKk9UeJ&VtmlX053@3{9Lds-F{amHWQC7 z4)9vFtKm3nj0uz4-?BBZ7H6Fj_wpLUQmj(=hZ5nvP_OGMCQ4>PR@Z1P(e|KNO1-I` zQ9p29Y64HvSYVNd7r%q*ZRe82&ANDKOXjicsX$JnN^2~T4j+5H7Kh_1vnybJJ+7nU zcB(EbltRL<($ToAERqrV=^BUJUu8AFUo{iznuUXvXh24CGk9W)r6UDo1Tsats1gh| zEEK$Y0&31AZj^yeo+hN_9k|zvSY{!{x*1&JTF^Ik947}^f(AHutcUrV**ci?)GY) zj|o-SZ;o$9H2bcXx5Zj**d)Y+DH()5$fM1oYF|I7nFpQ*+g}lAYQCQ)Y>m_$wQH^lH`x!FOX8&pG5t6W;qWC)!is zJ3gp%t5Xlj^x^W?$fo^STHkC@zfyMl97e)}#S(e3Ng>sV_yVWN9Ckn7TrtG@eLJ4u zHU+3ZAjcS1-0Q5O`!^T3=k=lszZEa~^g)xy>>2`!5uT*6bo-;GZCLh_@rWrO z$oHGnMmUtUwQ^Rtn5PuS7+bUS)VBHb$>Nq`hnK{&yl|6JBG`doC|1Lc*y)*9IUSsp zd`Fkj4jd*>cM0^Dc9P4yD82>GlBxO@Q%smBO6CPW$%J1nsmD;tz6&r- zB2_L~s6>WtEI7V%^Yd<|?ihSb^O7)7U1+-P!CibOipI-9wB!T%o^(hF=9DX7f%YA8 zJH4{ZqAJEYvy2C_BJPu>yTWjnP264j=pEjpjlR1u-qQRUzk5M{eBIt!)Zlw_VmocM z0@$rJMzC9k)O8(LA1Pe;_y``_U}_qAiDxtY0*KO;R9#T~Qttywcbr_=J|rxf&8ySw zW^Jfc;hH`OV9&5=r#^>pYzrQCmPQmLjtNflXQOz8U*fZhE3sbH7Ikb0In0Vj_l%!i zwaQTUcJ%Kc75MD>4j|s=Dj@|B2i;Et>0&_jQe*)? zQpnh2jvO1sTk#^OIg*RcA=usu^QIuUc%H#03+O#ivp$mx#qj1ELBi_)=T?Ls1R%)~ z+AkFDayBduZKQFhW+*-10Nns({U;)NW96bu;<);TqSCF1PZA%3)F{}9_pYb2^3{t* ziP=8jXzP_gG}v_bK%&b{2qyhDIc567FtLq$FfvwPlfDQWnkcsQtW$;_w5m={Chus< zg$GR<&`^6a;yZQ>a~6P>?arV z0YuY&^o>!MvKQGJcG%RF zn7C|_Q6AM{nw(i{-MIp>2drdx)p1^G@r2TLg+?#2XZRQwB2&`LTXo}0o~m1lQ2J-? zlSG~>`99?5wIEFF%n)Pq>g?f7z|IOKYaX@FU(5Zsotyj7I-|Z?PbO0jDtfHpYpBLD;&vb0$(BY&`rfag2PzGL zQla$&yU0gD8CrK)`RODc?%sD#`D0~oo$myC6CMHUPde^jsJ88%LkGFB2A8Zstr1T> zZ85fhuuM@=eyWW^u|K1Y`h3{)4~7g$J6zY~iLC5|P#LRb4N)>e-ri-n=96RVFAOEgID9i>@cALl%^3k1@L8mBafGLg%<`(! zrC2+UI)hznrFT&0I2i+(s=sf^C92gJyX4NBtu&)@=4Q-Z^OD@#DmumW$9p3X-4Ft0 zdXk8Q?2mz|ZiVHr5bq6_8f@_3YBwDa(-k(;h5rHAgYz?s z9pWvxNh04d^Z8g?D;N&%@mOr|J0tSPneLMu0J55|jL~%Z*Jvan3N7U>Q^aTLGgQyB zQ%9(A07(Y*z!c&UN@Va!B$hxlE;Os?WOmw!Fpv=H-iU8vL7<#3F87QxyGBIF4)4q| zxiJ^q9!ft8;f4JfV~YG6-96PmQBV)&Spe`?w;=~RpMFq{_+MyEu{Mm<36{sTWcARLVa7cv(Y^q09eu>u3icxRfn+@i(0Tv|oPR4yF+RlAvb7g_RPIAaHyxHAQ*e&p4A!?*bCk`Cd ze$w_yctUAYc)zyCE9kf(fXC&vuru=A6khGLiveh^|N6eCib)gOw#Pw3oeZTI*Bngu z(pE*h%&lGueTLrI5d;ioCHhDd;;~}SoKIO5p>rQ4q=FXH$(VVU8FP^(8`QWyk5;B3 z@pr95ms8Xc%-Z5pF?L)cbzjsqgsV$sxhM*4+S3_K_Ntd%_fQ_p7U}5mc5@5U=uZDE zg&L+V9g#8(m5c@-P{z@{Jf*!V7>X*Z%Ms{C@$al&1_IM2nl#)bd8C>T;Av|A11PEO zs){Z*6Zw)F8YJhU)@i8q{`EMib-pYD@b0Hd0{^Z!`12SMn!`>esje!*_Z0O;JajGE zV(XVNgWXss^cGrph>D9T__(_%>GbS@CmKFAQazZ6h+9`Mb6+RdR~*E!L_$b2!{X!h z4Inm~M_xcD^h#HJ`_>J&(16ywUXOUJg3y;U`4!NVdE<~JmT zDR92dX*=1y^CBfchpFUFnGkl>sJr`;?+YJ$@e&pa?xi8t1`_q8$$^*x_8QIlYWas$ z;EJq}7$7&QSU9lqcK=oT>GN$N75k6uf92)NcqHC|euWQ#G*fYF0R-fHnSF@A5MGU=A~WMjb#*UrN_KIL@Oz9 ze6Rk!?+od({CcO1*IxiD64U6?uf-y0$O6gdFbPC=AHt=>Ka?lk{PpW4DDh#rLK!@1 z6JyRg>nHt!`gqqY$xsKS(#Nz=`b!jMLSLho7EqFR?p?{2??yq0VsVo)PtNMn%k@Yd zg^j-Nqo$I%TKo7#MIb(&fyA#2sL?fS25GE)%g?5$v@3nIZA>afvRZ@ml^F=5pO@Bv z=4C|;`WBuZfNFxJC~3JMQ~}im?AuJTZo63x^~9eM+oi=eod?{fwNc%Z^P@u0iH^^q ztVei%WIc(64{O}ho4SH4M-MRNctXg7esXwAv;1z&VhRXVAq6)%-T@&^f0S0bf znzytrgY9-rjpZ0FLIR~>#ev-PyPO@^G)WM7xW?8&Uou05p8=zHn9T1C!{t7`vgTM# zYmx)K^(Wrc7dpgWH((aphL~oGZh<~XaCbE6j7Vj8H>R%&H<7(9wPsA!+=_+!G)!UG ziPF~oMN@ST%Yiz#%3BW=2zC)0J+1)kpoug{_*_1e*Bt+n9JGc%HHr44jzS0L8v(fw z=W+Q=_4+%WHly?xVy{M8ZlHE&Qnw?6li6VwUWNL5H=ylsk6fYP!Mx+T+&KpuPs_A% z7cs;aP-%@6W^#SLJ5XMP3~J4&5)bm3CRtXBX~qvY{y2uXH!$IPS{ZIbumZ^V!k}E^ z{XA|Iz)PIJ|MZ@`W2XKN#k4~eiyI%P6$9!<*_Kz@E1Q*y!;^F>#QC+B9L(285=#U_AyXrvsXtnfOhNuF1fZ=--O-f zrB6P!P3K6m)em&&U}(BIEsSWZZiJN(C=^dg059Qj3No{zkmW+amSByy>IVeka`npt zwHjbr4*ElGZoA;a3IO5o5Q-P#Rjnxe2lbwk zh;%UV#Z(+>Vu-i_@zN%~YsXB&SaGzyApMzGnE!Jr$QXsClj=D3Ud^(q#Aslb^H2t~{hLM*adH^iROTvcY z8gHL*jy}@z~TDt%yTVOreY#H(Av-aKlKG7sBhp+tEoz8p) zycWcuYjdCCaukLAFuh+PMj<=FNf7|v`w!OH%?QtDi(N2sK=76=@$q|x#7^rczjo)? zMaa$2`6=F-Aoz>z=#mpqjXC6Qc9E)6K-AHzvDL^U4Kqg;dBE%fXxrsKlUB}A)(Rma zW#e`LRV31C<#<^Q<&+-vvi<|ir@mHehi?NR9rYH1JyxaQl=0Q?wMPFzS-kbb31O6&20C5?{H*@of+0c6!O#ss|$@sH%7hw<*uv_NYvE*QWvA=Bf&W$M&bE4m7br-w9#4jVF4Cz#Z*;A8JT<=6LejSFbB<3`)~(Ux8C81=@!F0D{QMJp)|KBu@%PTE)2g)q$0B_s{%Td;S?10Vtv$$$77c+XdTaO zJp7KO=-U*O)!EMH%J`sK!*S9K>UfmG!kBkbihQFXJQB?Z$AGb*e@JER#ZCzcNN&Xy z;OfE?Imvv!R($HI;cYCTAjDJ#@uNq0v;UezJK#snfFMfAfwX98~3(L1HERnpA?Xw_JYn$N_D$|=)Vnxzdo9A6qYZdJUKYQyX15Tm5Umz-eVQgT~V5)In2zcMkAL%kgE} zctgW{G3NQ>!6(aB(9KOLEyg6C5Kz6x|M&#GrUqku?qL@!j^PorzZ#GO`i}Z@iw1H6 zJ*-u@A!@i16G>t!L3F89_P4ms;-~&@zQJ-OLy)kcPZgK=wE3B0YQ?&_(j}>&9k$%W z1=c<==tJ^NbYA9QZ5rr?+p2Lb@%{zF#msU%iDOMAi<%sA;xt63KJV9vS_639ozjPz z6bYGyz#u!z0eWTiW+{N#&4lMcwJIn9$o00s)*gf$A=lAA2jpL)WwkI;N*auK*Q;P5 z@UcWgjqpU&uB~QU3Uo^{g-{F3m!EI`#+l~)zg^~InY?4J&r4d#Ri+|W&l8bxLLboL zTz#?(EDVkMDqB@jnl&(9QEH$28g9wyG^X_ufa#{P-|#MjAcQWsjy7bEag9T8LqJ^4 zHR*?@h`c}@d3m{TguhY}HG0#y-6DKgb(a@0~v3>DuTOB;TP%9CxM`WMYF zoU2GBH;3S|J9e2CvFd}KqiEy3wC-QhJ(UF9-95H3zeB1`4U(wQl#a1rawWnEZ=%;r zpJ&;`!iRhw+vGT24LdK9VEg3e*Li5@KVnfRS>egJ$GdR_;vc3~v())Snq(TVazw>-aO~({jzgWOx{>DKP_;b;b!V&D zV(a!l6pjSZdeC=IA^-l_YA~xcM!W0>P9i=fW~aV^@!YUj7;fs)d^TL-+5dn18J0zA z>Oq1}N-9&=x=o=0A^isl3RY%0bngd3$<|+R26ffFH56T;fVePuy1^4h5kr8lR&aLK?xO^GX!{_#SSIk^Fyz{TcXo|hj@ruHo}WC$%c!w5DrKe zCd@tCY_0WDHPvWKVnI2iqnaud;>MwEhRTvj_PT76gre0JyL0xj7W^MFB_DW_<&Qk2 zTf@<>X>0Us#`4E6Xeppn>8#>Ha~E#jrA<&mR5#IvM4b^-M@swMH|_Djni+-)em5bw4<7xkE?-H54Q~q zhvVbyB7Aw<_B}8AGL19dh)3x&fiQh#;dD1x4mjhKq?(qQLZu=bneo&y@xiN!cFWgf zTpZH|x|N^M9cHWWtzboAvr~TSmf7cJ%>{~E3=LySA1m?A zKUX)db{brGB1q291=a3*5fQ}m`GjjsFQ4qmvk>Lkn0^3jv!BWRV&h6Ow$K~SB}2Q} zKDbnUq(dQ7rBY$0y5*<(&n8*uZZ$Peg1xLA#>9SjtgWj2LGHESMta_aVu8o1Q{4So zdR}zE_i=e#^{r|hS=2y85l)ZS%bK*xyPsq)8%st#5($vDP;uY9xiv_EZwuMJw>Y?| zJ+1F1?HPGg3cnXjL|#4AQ0GLc|_w zluOg1m*sVxyq8(S0`2eom3FxPyX9Zzp>z{!A5i!iNv-K0!E>52YU*eV>%{!MJxW4}7}v&(pQRiN9^=GUeEh+Z)&FD?ymu4?2U z6@RC+mR)Nr8 z1IjCGykO%Vp0sQPs}sPnHb~ZoQ}$fYP@1+ORvNxc@#)z!3K@2-YAsdpHFBp{p9+>X zM9u@gGK-6uM3P~t8;OmaDy*Mi%-DV<7ld#gmQ7_0+V?=5W&0A?H3!YS3lOeNy0Gwh zxENjV)viUdC(czwmpqPE_bk0mn5NSf$XW=ESJ;=?NwOzO_oX8wxB7kf(^a&S%|mu% zuPSja6cybz7<$(UOfzv&yTYHV(iQebdh|Q}^h}_Yd~xHb@Wqd2<)TeZP40%2|uDE1XwI{Y%32Z29GAGJKXtMJ)vK9!F(PCxx~1 z`Gz<^Fm1Rfs$f0tNhy#yEQZrpx3j-|@58_e%Qy_RM1gWu>`hDL%>85ue*uG*s{V*~qyUbuQNZ~_1 zO_P|1S6azU8Bp7homyLzGH;$>bL)Ab_}%7gJp(z-0!0YI_d0t+WxQ)XdHV6onigV~ z7Ia34YP9nR7cj|gHHvF$e%`V?%olx0b}@VL$m^y!KV_HJ6Yn7u=Gf`odmVKOa81k~ zgG8JAAMhWsJU>@1??Oa;tW5gfE=NL=#okyy&~fQ2f@Cxm-JMz@VFj*ec{=Xro}mT` z;N5qjB}O0os&n=mI5qoGBt#m3@3OlVUFO`oP$?fRgj81zvXuWA+w3H!8_LJYDt)H* zfhnb$;2tf*+(11rdPbRLG167EVd}Rmi3(j?`~R3Xl9EW|bkEVxH|Xh%QY!#7+!Gwd zbD)mH7W8#(h!U0hm+EgNk?qFH34SkEwkhV{{k?CDj50DC#5Qmj5OZ}3L-2aFsF+>I zZ50c+PmS0Pkv*kJfEnW#9pWmS?P+TcAl1jtF8%DE9rF^%eMIBZ9j?630{8j!CLs9| z|8SCI6g2vmT{dfdkm{AKI6^%{k)5Vs1mF~a>FVz4PnH(8S{x|JoJID zE~FtQ=Aq!oUj)ooZGU0lkue4V4Ofs*cU6GBlbg-oAX@+1YC}{?Mxl;o)Nx+f^%E5u zs2GMU9VXD65>cuJ3scs@2P(a6eL}}X*`&7Sw^cjoxQQU68F(os2g?f31j^O8M3*Fk2sqWBSC?DWiTS5rx@! zYGMX}+ds$>I{{rvD}Tuy{ynW>vP`Ls&LWP1CZAY)18z!%V1ykhV;#ZEpB*&3N( zJ>yV&Sri;t!WZjRn|ZkuQD~RnV>WG926egp6)VGo(KWLcOb%JEhY%F7oxwyi&Hc~{ znULsL3;o(UQwyhdMuKJs zZ7*Xg{c7e!4O**^vTafb--xsk!xs61ZZbc?(<5Tmxy0>TucPfV&_9r^UN*^iviB0k zsIw*pWFL+w!N`QMe|&mZM4gHT{8I`5Xrlz;GVMiU_{RV~<2s@^Kdq z5G>Y2oN2LA_)n#GXR@z@&L2LqYjwdWjWZnXql9^>83;JpaYM#&XVYeQt7}V!-mGDG zJmw{jec>*nL0;~NrN(FUr3Qh{#^v&~=`fU~4!sP{eQ{L_>!Qeq9XHmecz98u>@Oni z$f1xYEYq)b!K^^$Z_7BfU$Ho2qq584n7?M7?+o6D1TgksbFS|~8oUU~0prpxOjuWP z6Me#bKoSrIL(%#WdQmL6>0*5h2Pqsw)T|F4FL8e%vK|4wmQ`$cQ%HBa0aRcX5`_ zD+HW%Vfr|PJ0j%;qMh61FU}2InPc|Cpd>Dh)1yP%RJ7PoP74eu|HXEEX_ptEkRRak znP6k=iJ6*APTWarmKD)OG1kmWElHX#k>B1~g_J99hiX2Xlme<^6GYKZfq! z5Y;i$32?7#eU zXo@s>9~ZGnN)!;`8gKiE;HP%6tJSPckbqO^IIB*-|gf|QT)|s^s3}0K>T^! zN0pdRn7%@4UcnhzeD5?4&b4r(Uj!bq-eu(>f4~0IkEl+KuFlqkp3L#fh|EeD33|jy zQqs!Uwc$uCWv@NL5Q}onY)2v=VNS1x?Im`-+}kjmtX{-4+#-xuw-&hMlrAFx|33i0 zXRgIxlzLY(ot2^D+jx7>QYh4ACpZm{{nNcu8WLO@&XJB6vW4N;>|eqvxTCRXJxWX3 zrF@v^IIBuYP0&_VTjemE?) zvfFo18%-F(goM=?N;q_P2ZOrF%~k10y-VVrWF#A2M06^9U|%o(k82C}gEw+^!Gm<6aBO5kOVZx(%xS z{&r?5)XLznrtg0DW~tr>e@b8<=t1%X9>lI@(I>Yox$Qr4LGg_o?tli_G?uf$<)(L; z?ON+Q7e_Lwt83`c}FQ&*&MFk zADa>&)=xj5?DN#zh-HUH=Qo?R^K^3T2pxOZWPj5+Hz1hD#*EkBr_3^4ZRauy;@J;9 zS~XlAb@)H(`wu0;8K9s?@v;XB(7g{C=g;}Q#Q)Wo_~3s{Wo>|y)M~_4aX?9r2?UALP`!a73aU-$`n|BbWB`4peb9+V9M|VUm`>uAC z5}Pi3G4TU6ZHIWe&DN%y8EZSLDsWDU}Xd8F+&?XS~%JJlVkujaUm?(f) zeJ^{x+k#uH>^`q_iW5i{)kd63b~q@4!%vq2!rxxaE^%j?`TB$63N1;8UMVNZlueA^ zD#Pm*;n@F1;~E-D9o6(KC)x^nwZq_TaA@V9)>Q2Eg8?WbU#Zc7H-q=_o@*-Pf*XWL zN|4Y?uvgK$Ab8dfCj9{ps1~qh&bd(G&s(=7@~=SZAH@NZ0a8uD4+2l%d5Gs25%)Z7 zXN@z4FjI5w2OhyJ_DL&1590rE>6?9yCT^IUFyqsEIkJSDKo2z5h*m;vRW`OsZ{?Ed!(8Z|8Mvwb-(n*x2y=0a== zQ}fRB1%b1e_8RP2gM8(P&{^M%gWXg-ul~S-{Hb%Z0dv%ibo&>+FKt&SGhk*XTnyznC?!;Dgff(X2 zn_vX?avI4LwNV7&J~vd%_}{Fj^oLR#xrdzhcF9GMN4TLq0)7m6N|$lRdX_HFv^}u% z=JlNcO}Y6h8a%iR2aJ^~(HPbAj+A0CT_|jjgUS5KFEdztvWu2Z4`v&sOx9B{ekdNY zG!L6HRUga&rX;fNS+=N`aN54TE@WLJeNfVj17x!Zqzt|4fgrf6o~PljtP>Fm>pyJV zUv4OBLvRCUCQCniC(kgm7A3)a*ocDEm@1)Mv|K|A>t!#Zv@I>T$HL|X&wQ4okq)l% z0VCTG9rw--1R#IFcms-Y*jrSuSDf0VUVu6qJDo zee_(vmhro=fg zN1s9q3N?ezwJHg3t8mTc(M-lEbVtw>@SiTTEg-n zm)qG1$3SH11lLbPB$GPP_+7s!XeA9agxU#x1c$U;B46EsD7Vrq(kf(Mm!pI`p2cFS z>Ocdh45N*@8jTG*e3dH0AEIF1@qwMfAQCC4;v48vC6Mzm(nhKpWYn~6N>@Br;@0TI zP#4Aa56f(fj+APO`d`wmA#r(IjfQB#TlzVt0XW0Id);q+T6dHnFFvh;9pp-BLrW#6 zU|&1MbO@3!ZCL`#I1Keco%BVWIGdqu-fY%o!T*{_oXlbnuQwpx<$r0>@IUj16M_2Pi=0l3Ue~wW7c7n=93yXE&&6kLFZ!Z9eb$;?H?3xJ2s-$|v zB0&&smBmr?^mB#8J|FSIt}stVAhq0ZWF-Ujc+{iFCd5*#fHEul5YwO6g9LenlBSl| zCCnCBo%5wm2=vO(`5m?=E$S7NP2L=zhW~~NxAuY|VEHp5eSpeqMLJw9M8%Jd2(a85 zAwcewn?k?9BWG{BqEuQOD^;IZs4<_B9o;UZhB=5`SPQdlEU9x(!? z44Sg67YER;+9)Cw6b+f7{;lPi=bWfWLR;5|*t4R{S{EhvvCATHI05!0s3^HM58|l2r{PL=4!~eMm$0OE=Y-P21p%o zki#UhHt!)j<~t!qnoUjOBMl5PDg24`4fS|0xqct7dStJzgt7g4v^WYw9%lp!Qecp+ zX|wF-tP%BVj4YPLZ!fc-k*oU%{{N76Dhb1+=6A5oclwA3p5kE(*z19&vqvqO`gb)j z#W>ix!hAxwMr`eL+*zxmj}7nWuhc|4do4NUQo$D-6GRB@S);;91ano_)M`0TcYRmG zC9-2-V1gQ49VpkvnlFvvL$!4X<;|`xy=>u|xfyn1YoX>Y8Ur|GBz^}0QB4eMD7l*S z+(J#Hs12q+9$)2z@J1++zk&f7$Or`XkwN$m1l$W^+Qw{Lx%BJf-J>Oq=?g(0%9*iQ zVOz5XJSG~Q3dg4|ol0BQ=svlDv4$GAfMvC%K1D1Pv{STu0hx!6sEeR2Y3<1`1g_vEO*z0H5A6-jdEu?^n@71SXqYO!5KE zBkadB--tSedjvS)pcF}YI-mmi?R-^(OT$a$Y@R~Ic-Lal_#esARC&r+pul5<-^8FZ zoCo{gHvgyyq*1=9#D4`P`pl--ZGK=fEXd)X%CN>NN1R51$V6(U_YWhq{CxeZO~LqVK5N8?(V%4{TQ_U*a* zs7xnO7bp%mHtqwM4Q!0?Uf0sX&HS7KCJv3K-KR_5RxAGA17g&4v6YbFY$c*Y@w?PU zi8^b`O|JB!av5S<0QC*c<=)|!KQdKr6HVfQo>eY-X{E5;r!u&o&7f2S*eku(rP|R4 z0sC;YcV0?WRX`4zQ-*qjRw%?sM=|5ps72&k<+hF6FhNb&x0r{WY8uZZ$BSV_SyRDh zn}_1eo!SG6%YlaK8yAU~(#qL+&3vIyy@1lVD4Y`YcGkjA3`cV&#Ko#ymbkzH9}WQs zEJChV89Al1rXZov*p&#$i$xZI*>tpwHYTY8`cW#G4UKFc&X=ERfW=%-9rA;eWx9sFgHk*6ua$t~$Q zO~5>P@U3v|z?*9NQ&~=6sou4%rK)iuIn5sYidSTz)~?wej9JE=>A*-%x)J;F%N^cV z{k;`P$=MnI20Y|!3W3=!U=D_TKhazNK1y|xhblxAzzIsGi6vdj^odN_F}-Fqi{LC# zgKK?~7ff6LbpXVgT4si>drz3%^5^%C~0J6`4aJLL+G~=dQ zC;jrYv!SL?Q_n9J@6QZaLMXu|CcUO)HC5x5ts5}u42sBg125Q?seZO+XUgGK2}@fM^B3lVJs3eXhyBq5FtN3aX$qy5+Hit~a40Cf%-@*O(po-%IG%){FPKP>RXlK)8JR)VD;8oWh zD}RIoHl=#lQF5=C#Yl&ilib5y0Ri5SuTZhTN4e641@_N4KyJ>}JOzbyq8vEV99j7w z?g2k&Hzji!5i@DTa!H65{!wysU5{pZAOzwfX)&l9t$mhKr*^M`@Q*NLo+{$y0Tvc4pFFjG)?PBA?uO&PSN!qXgxl?Gm ztWWr7&y}qgOdNJQDN3;$z+Rg&gKL0ADn}PLuc_FABIoAW$Lo~Ct%oXM@n=~mw9tQ^ z)Yaj@r}2{j#dM>?=8#ORxN4L#7K1@@NmQRBe zkO-$_zT74IVYoihE{UNINbK(0a4%7Difzsuw1K5ym;kb_CDXm89Zt3wyX5u?ihWM_ z)5?wsuP1CHaFmKLxJL`sRfd^{^lw1R{IZP8!KQpJkpDhc12Osi4wzU88YOr`U>gt& zm)^c}f!^b0TcQ=A!LkM}9m$OR%QG6$_-Hy**2QKyaZ^6y9lzU0H@&bRD8d|deC$N; z3?~L+kd-QNINzwP&6S*h?4_`WF0P`(IT#}pOL7d@PMb{pnJ~eJSd(14<3T5Hy4?U) zWH_*B*JF}i9svJIb@u4;PKf7zFZ_VxMXu--G4hc>QU%%&{(0t?2oIl{Wr;;A{J9UFat`Qe2}+CEpK(cp{Z8|{SnBE9lAIO-rktN643u6`kjyMpk8; z7?_x~*vJ<4Kmr{VW_1*fMO)@JW8uOCcmCKsJg@c;SxCwX=@8!cx z$LHTLTvQ!7ftkHSD=ZvqI#T%a1xyC%u zJ#X3;KNqVbfA!ll1!s~3p7Ry{2XHPffNY^esbz0cgh|Lm(nx^@Z&-Co^q*aq<4&LH za731I(g({LEir^2=*k81yLR<4xq*3x)oepCfp%o}Hr#1h>)u>L6E!F!|C!xb1t`q4 zuSwVk9-JhFIL#bV_m1jpOAGS$cy5L5!btP55TXJoQELCmEF!(5(-I%@@~}7n!MVKa zJA8Dc1P=`}z>j&uBXTSTRg^qy-Z%AL21xi!P^&&kbQJJkJ zP3ybc8kTRX4|xMRXhnx!cWfDfX#0w)K-Kbj;Ll#uN8YpTL3F)8M3=343Cr*Jxx_Qu{}i z?Y&5qKKi#^dPIvp$dA=!lB3!SPPx3ud*>)T%qWJw!X#Kn3{{gC1=kFJs8-Cv*`KU6 zjtFq{(yTY>x)coOyYo+xUiOdK5bWCrY`r-OtYh?TzEQeU8rD_Uke8~a@!$FEO&lb@ z6fNgPh7{do%(7Y?1aYCcWODOy4~mFwj?ZA%3wJqh2tFPkbqleN_3Lk@^&~HJ^X6Rxt-)Jj=*>#(eO@SUW;p7 zuZZJk!V)5gv3`NEWJum*u!9~!^NkJ1lZQzzpN?F)00{pef7dw=j(lqcH=V+Rr&3qi zn8;zC;^D)2?hG>e$`5HTj$!fXBlpDNuT`FXCI<|L`69UFN`bSIL%mTiQ;@ zA}9ZT$rTntmk)U2w7Y-W$C;Cr8iTl-r#8xGoz9@+&ok$fd$1h6JOXb1B1g_}THiwC zs8v+Cr*<@(AvsiGkWPcvo+EtqF7-usw?OP_!0Fz?-Y=OM15)pc#*EX35db%nJ6?v3 zOl`G0HAEDd3wx7S9|(TEz*j{EV(cLJuP2bxrJTdUA7@i({$cfy9#X_0kcm|#H}wCI zm>w10O*|It2bP)7rO2U#yJcs&_{H~f1wY3 zS?SW?wlQ3o9f?AOLNRWHRM6anmi7i)fTa^%27o}M;cSvy^e@k3NzlE|Hs=J4WR{@j zZw`DgCLjnpFOs@s(P~I^^M}*GpKH!gv%5dUFby5=J!>Tkw4;)QY5I#h6*e+LL(v}! z={qKP!^T8H3Tzxj61{&M47+)@f){vqEKP)?XF(E#Nk=lz^~=+6s3zg^$zS+LSrBdR z-@Y;4+f#q{cVe;G{qv*0|ENrm6QvOF4%L4pX*w~%DtI~+iMDZf?h0~SKcBTWc`*0c z)@fOBx9W745ia{A3xQf93#x^Lk8GND+xAz@{?8&mX(<=ZZrv6Wd5DX6dGx7dh4tJ? z8Yc2Vnac0;5#4Re&6p7)Slq@IdaasITue6=6-R}9+o0#QtBEtdUf`FUV4N<24lZ^xRcc&u(yV%kv_WSKcIGw(cBMLPPw)j3+Z zB{X5(3z{&H6w;hQ6S~;bf6N{BDBJwvTJ(c#rNCG5mg-rJ+av@d9Sq`SRG0e>vv_sT zV&v8b-b3ur71lePI__+p9gOM!&~Y5_-amb%qX0jC+qjA+8<_zHWH~JEr)XmeEc4Cb z*J&Z-$F%RZF1Ie;LU5Or&oel9>O6Tx4He~Nw>A!rEPGNY^;kr^oRvkrTl(YTYQVm1 zo98M2emdLWPkT4n#u1x2y!cz+Lo!F89jDjY6Ke?XhI&Hgw<&*b{-kAr#SKufn1aut zYxS(~y!tGj`YRoVw50Rz{WPO5a{1!Yemcynx@3P{ zX5~s;C{zsm5k6nh5K;HGZNC*@F3quAnI}5pp?|b{t2dPdvfs`M`I1q;Uu+3lGM>a! zDQyg*D%tl58^AW#G|cBaTHwmR<>r`9f2N?H1|taOJBl_MrL}&VIqk26!be8eENKz* z)c!^t`W#TwbBs-(cbvF<9kX)RE)eR&l;82Qxz|>n>4Wl}16AAnedG%%#FLaoBA2GW zB*dRx-&L~H%sQO`vx-FR6)gMkDqQCBx3gzsWG>N^0-`+{@o_2#TPvzFKO(w85fGJ= zeGL~eq9hU%Q5Vn-;rzz*SK1eglx+X+^ZK@9NhjLT##-f`>0tXhh)Rtsi(0KU+~{v1 ztOBbvRra3%7oA2IT&=5%wrZxZ$TlF=wil=YC7mSSl=PC<$w>!$tZy^vir*pEPv6bDZRLt387Njk65 zYGUZhdjp`CM^QM>K)`AsQeK>ll7&fs4V>qe8eGt~Lb7IV-p+7uz>YX=;ho18=BkP@ zY65U2oAO$`w+WOl!i};g8{V> zr)UnWRisK!M_`r~4cKS}FjhIY4H^utO1$375s#$3dzps_*DUZZI3sg!kHdLJ2hXi4 zixgNOd^Zcuv}js#C)0_v>+1r&WBE3GDC31-Si6@TjSzjYrs_8^8Fi+N_?u7nyyCta91&XP>v!^6-Uj?U5UIu|1KY| z7(?)c*x)#h6d>#`1er zR2y|S&L+6536F*oKvs794hFN9u)}j}t@XEG(_#Ju2> zN+7T^-8MP9D$!bfFu^-bi^f;=6F5wRhsvn?Cw=G-*QoQnCSKPnw0M%5AqHI>3wI#F z8)2+;*v9MKQk=`Mf4i0*bbBz;DF*wa(4+HqdP1In=|x#rHbWk+ySQ7*nd|&w9^^5Kpe?dCFDfcTCp{^& zNTbnb{=aea_tzre58^eK)$EyBnkHc>X!Ok)Kecso=i-r~u`lNH_s;&hU>(XN*(Uof z4J|$-3mT#0 z1xydcMB`EG3Hw95<+2XUrcIX(@4L8ESdKW1-wl~kVF<;Y^0jT!(IXaqh}{v{>6$BZ zHu~2}>CQf$f0b>q5J{tKodZXT4-bdwEPhf{aAA*6O@$TEpf$Q8!=98sLfc=gsq)~F zRXc=7iCGRgo4%b1kdg}bae7|hju7{Q0v`2Q@DLMq2r3^n^aC*ie%i?2JE2_0DfEk> zqj}f~OCIRhga$CvR#(#FJtM~ry_>42R0C)4OxcZ2RS5As5<`mGR&8SO_BP}(!dQatpeMC^;^|0 z`d_**dFl6o7a#+ve+x=^%nL^kg*x1ZYkJhA&<0LJ7bn zAX`ArJ}E9P?ic$svQ4*|srn=%=``?4O>p=Jo?i|!-%!@c)yiPwd`~AxO>~G=#5z3| z*~?eNp(C}Z_cn{AoEwsA=jo(D{0$wJz%(z9Id3rITy}9AJD=bSS8#s;2+NCIpL(Z( zz-X6jv^rOtDveTTt96ASuL4*ZCqB(fbH-AeoX94vnRHrv$w2s4o%qcalYe&#dN&R!8 zrEI>Z@L-$LbP?$4WmyO2=#duIRB)N@=+J|f{DEI?FPvZ}yzp`RVOt8nw~G;`BYJn( z1UtM2NRZj(?s;LKm!w_oAG#W26?fGscsW=}lg;mxElWLp^s{=BZFmLOj}`wVevXxB zC7(XmngmsW60M9XV7<0h6T+|$Fy;YuF0Sr6$BK_7RX!U}P{g-09bsniJZz;SI7@ZH zEkoQJ;-dxw`|?o(|pa^$$LF=+f~J+&IB1zBkP8dBrK`3=op zFrd^~#olI)8&S;_FujIV4(IgDu&+^2+>&^D_}=lGUUm9_?YqiQ*gge7o3YPT976|3 zmZ%IN^(?q}r3S_l*r$2Ty77B!N9K1^icyA6s0R8&n+|+0T&jw}Zu^j&qKWm!e! zuB7sM54QM-$x6)LFhI3zlg(84hbh)G(VlNSt(N>i10sdl^*TU+^sxgb|5II(=2n^! zgioh>|JEL=Ua$86tZ&L5kSCvO)oX{j-K$-uY25HAyA&NZ-OrDFK}TCliihLKu9TTe z(Ry!=YI*+UUFH$K`@vaM`J|~?sOeh_R6MFRs)CcINQjLEfr}{dPj%4Fq0#5b8z-Mh zhYqlPG_Up#9ke{;B)s16@cRtSPx2(73VwaL=cv$wJGF-pp2=>pkYc4vMi>2Dn}Si z2C9%BrPkq>!c)#quZ&61X((_BD!{&I6lpbnWBCUAklpPE@(~)qJ45Vt~ z*R2lG4FfBh8$Gdl9) zC)OOf9h^G$>CIG75z2;Fm;XX`uA*_P5?mB0`%_&6DR)^UlVo@9lY@To(Hi#QsR)4g zd^1Ug40S%8fzM(AQ;K^<4JLO&O}o-!?2)dYJblHmQKMRb_Rp1c1oFpMLG$^`&)tY_ z(fsFEF3c2;)I$&%3nhH}yW)uI%Ll*{+ftwYD(T|j$l~Xy_s8wkLhI|HdR}Z?=aA29 z*;6SZoAA4r^H4beWktjO4rn&q+^n?zI(SR;H=)6a2HB`I7?qGWvv7}$#tVVs&6Xj6 zk$3Xm-W@c)iNA7*CEKKApHOvG{dGB#W;Vy*n|+ZQ5qmI+40Yhy69#dF46+fH_Kx-v z-Va07A?nG@-7}Mo0h%b>_bmD?g=}d3jSvG4ia4P|3a0rF9VP_3PtpVPm>ldM`h}{HWm^~-RH4KXzCn=0*Q_Q1g0eafZ{)VbhB|tPss0$L z&w%C-*ajDKv8>3u2>SR=Ip};uIZtZ~eDzbJ>sTPf17T^hNWGg~0toT;_+XKx(t@9nW8mj?nN8Q9>N6H`ZmngA|};9PL6Xb~H;Aa(9-z`iO2H zmzSB$&p5>+jtLl_>H7DsSrjxMaDDNSf(N(f9`Np#4REghQ+gFt*n-)8Q4xZ9I^(~~ zsipjF7wxnsLFFmAuD2fpSE}W79yRR-l@`n_!jIDwC5=%;W*KCI)1D$5Wl*kV_vM0O zh=C-{sx8}=2zcUw)_Up;-^;y{mQPpzSU$O=21oLAYFNUJ^mKidW98 zkFPZ)lhlO%#TKIa7gx&u^6(9T2$=KrB(rr7ZwvuLSj(8m_R1|GuDx`1ym}E`gYpU0 z`LJ0oJ^yELsKBPg=6fAgHwQmi<#QnsmMC`Ik69--xj%bFeJ% z6?YwdX&F=8PurZoA-30SrTosd%o`R?*s~gaV1x&X9-X%I^!lXp`uv_IF4wY#dXalR zK4eGgX^)PTWVm=nj-_+5*iIsy=hJq&&8#!#e@yqx|CykNZsU#4IZ9VUQTa-sS81=K zijcjBNaK|TCF{{*4N&A@0km$HJ<}=@4jI9>DkX-($knv&P$&lLr$a+uU?V20vi?AW zyHk7ExWY@-_&t~>`O5A;IZFdhAlzNDIlnv*oZ2;VjF_UrPH$`tg=kG*Y*MtfvNltD zpqD-{Hr9EoA}G+fCzzEu38Waf&2rx*YEd6j>}w(`BrRz$LHpNUu^zEt)Qe|WXjEHEP-c=@W7;Rm@V63DDp&pT5sev`p+*LT;p^o%!~2=0>&7Zq z&;Y)RCw>)Uyd^|0Pd^H5rVun3iD;vnP8Ai{yy|n};|H99aC?}A7=nuM<6*2e3<`70 z*U+88kr;UXM^kfer$7*Up*zkjtJS_5`vXWJ3Qy%`{F1zudQR}f zBq-a%URy;H%!QuNHEC;RlEvV5&SAiVJ@>2V4y1BUsa^V^e8$-sU=`w1Bu{Jhpm?rP z-U0pQViC{U5yggIUE;jQu2FqMReUh#e_&B#&GptX&?cL#txtzC)a6qi9=K-?eA2jM zbqS5fpRng7D+4p2Feo+Bo|K`)Z0nRnX1LJM63$a#wKC%C9+2$~NSf?$f1VvvdTC%Z zm+<(gRcF{cY^67csC%*q9mkYkXG^kgYpv2H@|l8Gc}@hBy06v5OIkqt4Ik#rR^vx> z5V{tPF?zj4qETJ{fvN~IWa41aI?{tw&4=gd)II+ zMI9S;!4N`1sDYmnaGPY6!Gt%Y`UpIwiamh)`z)4SBI0X41Z_aWO@*G+QaI;z>0QpsSgR==Q98?Ped7=ID3qek0vzR4J5qL6dsLCl=qh-QiNtpdBucE@}MAs zsYg5ni~h*5;VC2tm>`$fpmbf>3xcTw&%VU(ZIWg4SMA9`*mo0KK;!ErPl$AA;s#)h zNX4T9qt{u%6f~O-V*1i{&U+?(@pdh%B7jAlL<47& zJ(L$~0Aa@Ya~~{OMz@i+iak-Z3`HLJf;FeBL;_zPzWfH#**Mb%dCjOfEpMG;pH#j%1jWHh~lt@N2J`63-w*5iY{-Ey()1+xNy@v za$<&#&%_P0^>7WTaT6tJfd=N*7k9nKY}_7rEPt>O0$?4V+vreSB7C4G_R8Y(W7(PR z!qb7XBjcnQVx@Fs(w}_#NuUV${3CpA7%T5-IPMOmWKnLfe+kU1UWYO*rgCrz$hJWg z&AdNcs%2+ki#$EgOXdriGKlCGK9MCtUz)@U_iRyxW91MDtVh9%tyU5oKMC=Jmog!< zcDkJNPLHy1ci=Yl9Yg@OA-l1DJ=2O!t1T*BpK?>5_1CrFB&R| zDF4<*TU^Y&yxCZM>2Y^yKHgkokPyPZn!*o4D7)qCF8}aL#a{4+3}NChp-(vQSYQ)ii1or1w+w> zUdtr_oFJ*t`VXssPFBto1?wH%dH}=p>;ldNHSEOWeCoBnFPJH2OCt^Po(jxH0X*-< zj8t_@JD=W=KOr4qfyFk0nZ|dB7{O^=E}>nIshz+?8J-DYSfo$MhjphPZX#VFHLX2E zd6Xub9bcXhB!t~Qk@r0Z&Dott>)7!Y;S=5riQ4oE^a016w;Bvt2Owmu>gI~dsq;o9 zWmvb`p{2yLfszRZ$q0KeTQ10+0T~T3dVSx5p2JQ+7luZ>5M&GJ!i#qp89m^@AG4q7+D{L@mu0Af&WL{Pi(GGTCNe3j$4_@g}&1btIY zw_z4j=~`y6h2M6ZY|*VpPHJ}uh&^75Y)pIPgl&KqXs`F)Wj>NkI6+h9fEB+x?V5ZD zQ76hJ3JC~SDLdwK6IR&d(dI{mt_=bAw+j7*<*iHqR_=6MK*na!OX=`Nl=B& zrgPvzdN3;)?i{isSEWzCl(*w~!6qL(q3_?!jgh~mWLtK+kunFS#ri5}WA)KreJY=# z9pkCS1V>^SDTcL@*_;xS?w>yUqU9w7YYj)i&x;Dk&B0P`$L+qjY_Wpn?B{_&J9tLgkHh5%R1I5JmcZHQ zfg|Z>vNe*ts0HBrC~)+qBNA|Li8H<7Dk=%sZM+`D6!RUIGh>VoH@xH zLHMw5h80PzN_ew?=t7%LHI8wPqjH-x;(}#~k7RBMV;xPw`*h>~pcN15Gmxo-E^>*V z=lm)nwXfXmaATtBiI{ADUCuuylLmCf(nTb^1d~3RcO=%FOOvQ~LfvG{pvqzQCF=rS z1Yn&s*K;>0UhuQWSTv@@E#s;_CI?p2K9y(e4e*}0gv|h)MiF-9pj5-duabuXP~Som%>|I? zBF_<#$}I=PizgkZ2M6S}shcc9tt;b~MESd&Br1HgGE}_uU$!Y^Vf2-X2Mu~F7$x%>j60~wd}QF;X=g-M(LeM7UoK?2cdN}>S-dIL zUt8dwHB~w(=<)oa*94arESVtS#<}ni8E)VFCmnC>+$}qzC^jr2z`(PTb5YIINkSlq z#6!yv34Doomm2e;ZybdEFi$+kxMNJsxHJsf07+95O$2rQ8aHS%+0{xgkoJuep^KIT zF)qq+DP%?DOkVQEk#M!pLtyg@&ROMnu$FG73D;ZxWiB@O!dq8*4||S4D)Dx!^JVT> z8Rj@mquLL72C=B=vrU>R_=p^O5*?w*w;x%xhim{3{lNitI5lfbGq zGKzmCG1xVCP>Pix&%kf^C!pWJX#+rlX<<(2q;NUEU-oMtanQ=w-zW%1_634V`!SI{?$5mZqt|#;TC?{^ZiLi9V-S}HSJ4CX{mA3VDmmwEz zU)YJU;9<}9RryHW2^q=yb;0up+!?aDGFNSt@Rw6(f2XO328r4r)k(fw<&fpB4U}3T zTOpTWNUzyv1yd%DF1ycg$%X;YBwtLow9oMrVZu;E(gB)eWKst*UKTf*@tWX;6iqSg zWmSNE9DFBhok~i@Lh8T&O;(E@KBB#d%Q%?{;th|+Gw1{SMd`qwUFX_w9TaGDg%I)C zwzMW`V5j=sp6rp|3};?aXcR{B4+b%+GuOoBwNwr)BT0yi>1fYv+g%3(d@H+bz9c|yCIF}QL$g%ohC&WOni4G#?!66?p?TVYfK!N?zywR*4U z+b*iLr#(e*(~Y@)QbMTW$oy3D7c%C{{q`tz%>6(uDuwqvz5N>9{W!Bm-nhSMy4>b< z&Kr*p7)JpZqx;Ugrzo_2(Pw^UW~TCRzW3>fc$-mS<`}i|B`P!d=puM!`JRWG94v5M z9rgv3VNoE1*$1QcnU){)#i?!IH_O9PRqBc-c(7Gqjdm{~pMJ<279M8aeem|>#az(7 zZcA#w_xfltC_?eE&A)dcz+(<&;i>ZP!NXMUih@Xw%t!2*D3?%!r2@b)MRc|~{CH7_ zpZ5@;&3L^jg^8KNo3x4o^_fo4v8(UfJ*OolGnJJN*!`q_ebc4f4$0}mg!q^#%Q;Pa z#^IBto?%@{-8#LhC?~o;2U==5TCbUqw7XeE-(v zIL;c|yyz;Tbj5tA;1=bgV~~l2fF}{G>|#S9b$RgWrkb^ev zoH3O*5*%snF(Bob7^3%<$jTRB^Nda6@CNZcBJsss^nRGIC@)tT^%8H1&}=amWnx8! zfVRX;B6$vUtVhs4ABkT(34QX`Bn-i8)yhjroBX3f2FLqpb*pXp?Rg|dqjx0p{PeOI z8X&9~;T;&`q_@92%dP9+UaQa&N|+U2Vaco%{e5Nid5$0+wJZ< z!&r+cj>Md-Pd!_@1pbkr<3g68fT*5tPI79ATQ!K!{7opxvE}1e$X+gMLD;U`Jw7OpMH?`RCJEID+d0Lc8x_6YGP%g%?Ev$U%$4qKsfA715c4FL*>~4xm z&$geKjbxE5f}B~&3xx%?2f(bH10gRjLUlJE%4iZBZSOQDX}%Jm+e)A@>CUU5tgphv{H9I!& z686x*k&^y7c@`WxxKI8UNzIEwAn0UF>sk_h@K!_@jC{+C6kXWi%u!x3`e)*0cjr~; z=seHR>K?<03_WL_TCa)Q!tE6lpmplL&!Ia02kb|Ap0m05aJE1Uo?gRpsM1TH%iy?M zNx6Go!i%CJD4# z0a#ZA!Jh?q0;=g?&gG%8h+d7-6I46PvD)-H&Yys{eU3Dr0-E{Z?Mu1dZPm!t|DjO> z!@pbr|33i0FSq%aIy_${H$Ky&$Yf9lG({azpAOBQ%7zA7VhuBh4-0CGrb(|;)nw6X z>tj^SX=M1kI>_6%K$go~wAfyuS()?Zv%p z1#b{L$vS*7=79huA-A%x9pgUTl;5~jD;ER1fW4PS`Ii&V+6TldW9B^- zh)@#^QgRc=TMaz}dBir0eR34nS-@H#!$GckcY{BgKiw`0HqrF58vX9{`ysMncDIzN zJlYyw_-5P5#g==1<$mT@SX8@_;s>!Lr8T%xl}lq>+@ z9y7&C_YvBf#-{Ljlf}=h5FSyG-dRewV{@WjkYBma$WDS6&ES;V{$y@O1JkJ4xm#1KBhz{`JcmS5ihD|>CzT0i!CKl2T=eB&1;wSt-h)AmD zo3|dJqpI95EDm-VtEq!rHr!*b>>R%9Z~IkI=a3(3$8HiIgPd|}C_dH3es{zZk>Yw4 z3N^=DDtP@5V{BcQl8aV7uptQ-IZ~dNuIb-e;I1TAyw_AQJ7cKd8d|37&9(AHxUz{O zKM%$lVVWhLUHWL;ycwSX_#-C3iZnbAnz-5?ut0oDW}jgX#(gCvU#xqmdY^6-%nb@; zc6PO~#}$EJ!mY_(k4JIyZ_Wt?)9U_`jEv5-`O!k`?=idru|mm%p=+Jq0{goK-HcbKMb6RMZR;W0fa*BlFt{hNE5`j2;{zMysKj}6Tkx~ zNK&}Fg@Jl{V8I^klM?QYcu|m4Y-~J9Aj#FALP7Zx61vX@{aJF~GGPnnwOX5m9q!_M zshFPg>K6fv;=8ST6YP&MMdNpSF%HIV*OmA0g?R+w|8QAyMraA__%>vzYOyShpMM#| zfZX+eK!770!a1?Mal@i4D@n`Sh^S9#`JusBeix|LzG>!77I4W$Wy-*LVbGM#OL<;+ zCYs!z3rywLh%6`o-~s1$e-l`I)V*iU{;k2;Dvr#0H>o$AnN`BL;CVdkTd(hv@fovP zNM=`34kIy$2{R1gZZZK7MWGSV=?(rdPue?2uKQoDv^T#a0pR`Ov5ukkVUA#01{dIr z(E*IX_2F?0S^5@)6-$+NY?vg+3Cr?d6ojsG`KoQf32QoGiDWT*Cm zAJhedGGwVvtsr!(O!ys!-qI-HfZ`LKPg@-zK7RfuL&As$VJ;F@Cq%C3MYvxY0(U3v z!k|P0UX{-+PZ*B*rs>J{NX#W6&xBzzo<@ipLg4583x^5nQ|Yj z)e#m$KgGRUP|Te3Hl}KhRN~>1oiJ0}cGRtjiq6h6ml^Ng9KX!%x81`s?$x+=jdcFj zjq>Frs({^@eQWia`yz1^Gmka|j73j`bzQ&96g4qYz`J({%VG>MQ?L7!rQx;|5m7y2 z@@GrDAu&*&U)92AXldCf^ieLDF~d)0{OYNE{vV;q4{e`6KgD?wS4!EadtA2@G^&N0 zRIMdKG_K53=mE^Tfh~SF8YW0kQZSLi4x9|xvN6l0mH1&DiJdoEa=~at>S0bhOx>J&FM*I0SaRSw7a-$ z!sBvG(m5ngV!@V4CLAkVE^k)88L36GC56O93GwCF2hqdac>*68F#bMVPKnor_g^r# zX=7_PugW9&0;P)OLOQqzK9354?=Se(%WVgj(C178F4@4+P7_*G%ut|`9mM36pp^R2*fTqz$L1@;Zg8qD@ zMOcWgq1{3)&F#k&Ayy}P7}Ce71#mKh%!+OB`ELV)H9*&NuTYF$Ea|bYhR05pr3qej zhFt0jA_`%{1HeQl_%N?2CR}o;;cASEVA}`RSjPVAN+|F$3cj!?yckO~N4OX|m zKHa*TdyO;n-)3_b zQ}{57>V03l9mkY6*71RYo&&s%o$d#%oHpMw9Z<=*Vs!Gr?u^>MsGTTSIrBYwdz^Qe5HmJZ z4uCqN?;!Zhy=j9)o2i93?cG&W#MW`A-_L{0b&^^2{I-s}h$%1L353b3T+}xf{9nvD zd#-VOGV)Hxu*3-Fy#9(~xx-<*2*9Bd94)(w|IfULN`~}3*!RS2jn|pwLzK~8k=Cq= zmLO=8Y+SmoABpAg>Fd5OV!x(z&e~>UNfxmO%X-H7Di*Fy{kY!5dBY0+Iim&Q11<}}bquLlS&cF_&lM-9KpIhXT+OB{Lfjb`vPQ3hu zkE(@OnRqk-fHd8_8o{B$(1uyVzG~PGgAU%TFLgB#Mr&KWrdAz$`+Mri+l??wNWVIC z?g-nno)#B`lo7S`p$-k)M>6_lu+-jJ*l+U}OGE|dV1|MfK>X5C{ezgX=ev16Elbe9 zd8|n)(V>#tUDK*Bfr&fLRdauttc*-tIx;}A-`NJlIam^Z0N9xkp|ys~+nz@u>-(;! z53Fu%xgrcktMir{(IsGQ7ar6O>0wZEOvEPDaUUn0o@`&1e5vNnQW{QZi! z0ksmZ1;S0}NXjN61)MhmMJ47NmC-%E0nXGZ0Exo?-AU};9{$1U(N}Md&|qUEBv)KO z@uPor>)F)h%wO2gk%as}hh;v6c8%}9kEe_W^&i6Q(oX^!RLRsm72?*b?!Om-NKPB& zduVMjBJLM9qv#vh19(DEJpUkMt`V(zO8EOi0=MAl6C(8>@)9}LGX!(gEJ~?3^R&sZ zM;2+Tl}7uU0{l<4ZOjeXj#M7+$N6E3g@RttXuIz6$%;0;0xMh7y#xe?{a`jN(lOwlAX zc3{aSp{mP`jqkp&agGknTF_oH{d#c3(f9N@R}W_j!-iVkFUID_1HAeq-*LU3=&I59 zuOYKIn>EBIauxn%p%8P^TGup+*BiQzp$@dlH^X&+G#*gCv|-W)m;zRtOyFnN4>MMJ z{4{BXv~#NKAm$66$R!uJn2U7&H=SpN8k^=2m^cmA^|0~LTp@X|Oo(N&iz5!k-Gg&y=P8P`&OZQyG~$?Iz7 z;qj@>L27P9l5UxK_B%fajB2k&d8B9ub*BqQ?5FA?g^sc5=yq0EkOg1Vi9i6ByZ$il zn){TIscy+rNKKjzi;`Wv$g9mq&Qz*E){!Oo45oK!ukTF6h$DJt2 z@$(9qNFh~FN+9wOAIz8qDHs6l7TPH^C~r&_Pc=Vn#nb~u z0=j2vywd7&JtS6aD`7_6ohaaBPnP#N9K7*3`J4_#GYXE$}MOtKfWWNpk&bFV5R_ zsTDF6K5^Qa-AtqUEY46rV*!=Zc}9AZ&QeoNLPVZFxwJN}XhRWziyt%{6w=+rF|@)B zy*=I-3$#6t ziG#j&5TXqzZvD*ymr+`KU%s}0cgJ~_cCR1~OGIKA@0kIdp-dc?Cs=HIp_@Hb?;yHf zUP2mhp6~tUpfHplsYuI4!!@L?1n>pnCiYU&v5E)d;G1XjkQ{DD+DNs~y(&`kD}E z);J@)whJo!jRg+;F(v34HQh+tJ<)!n93p5nqFaPB_1pkuTr)dy)3X>0I!|y%Oothq zbp@@tZrESuw~bx~-l3X_JSV&tb;@USz5A!y_p+GQad5vgDltn=R)JK^eIM4&xQy;@xKa|z= zE$iHkly2pP;zg6jSk6-1w1JBSEPrU>nF#WUx#XuE3BD8qsg5F6q3&y1FXZjWS$nzYy~bxCs7~r>MmV1Y4o&p8X==)o&SSZKBYnUhWXtQhq~%BLOH{<% zXn)6;sX%6$*z=)?R^|JjigDYss;rrE0c^PR4D*z*skIGB94t4UXe8!6;+m#`e`R2D z2pKU{)_yZ8h0}#(-?v=eK_L7%Azs| zrZr%$_*(L0!Feer$7Hf8f2^YY~#>EOyhocCy?#e)iZk6GP73L3HAj=|r_ zI({{Oze}iIifTC2BB^0_v$%|8KzVRo<|HruM<=;NT;@8w>4WfeQ_z03?Kk>`tUh!)qLUTflP zT3E1jg>}Ddtd)s$3r=D{lUvm_qSPHD_Zq>J42D+I8<^-*g{L-T>^IK}4$A5If)$<4 zXl`-melN#Im#+~8Yh%fp405mBcu}iB*(QBOb0z6du&we!BJYeC^_if6yNUI-6DfQd zg+qF=NC`EuME76lst6`qy{ppC*axSo^1Y;2xhm8+C#OFNkOK2sJ4t4LH4BWKblLX6 zY)^{IJy9YvgC*2QSNqjUq!E~bgTQ444x2wv`02WRL+?Tg6rh(p1V@i30}lhFh`%&C z*lc-qkJcJb$49(y*T4d)uAu3VZh>9(afAORg^)>gQ^;;3S^5g$%`Hd3vjc_UHGCWB#-WzHYyMv z(!a_N5ykGw3aS(_*;uqZIv(QUL^oNYCz+I7I*05W)h~;z#n^n0@FQ5j2)BF$CH`=6 zY2$^bYS#%vIT2VC3*fNZA)nYecLrE7ho+)yo28hOI~5xiJZkmjyR}g8{n6h(&-4eD=Ay z=2kVQ(~kaS1%Qz6(H1$GA`KjX@AmreY1{Wf%16|N4N=FiG%;exr#VpIC5vqez zDv+)~C}P@)RP$kA1m}i4Q;S=`EkOa+W?l+kw)oXH(5ohON!8<;5ZA~+Ft>FFfzr$F( zcnsd14I*E?>+hTEc{Xebp z3k4l|LHQuDzz1?vTu^&hN0w3@!;Ff9OJr9@8q%UrW01+K5!qVDv9FHQb?guDUh>B^ zPh`2d?eeM3S87OVAy`EHb9(eC)LKh7ZzYO7`F|tISJB%s?w{YrFe^z~oHi&*7+!K2 zBEQ)2V^&ajVA_Z1U>|4&fK{O5gjJG1eMD0`BR7JD*|j{i)9`_!2#(x*R%LXiy7!Ol_TyTUpnQMCJ8oT zKpIo_68IKVb5MEGF>LGF++r(Fx|6&x`V1Q|yvT)aEC;4ut+S~7Qrb`6k#uAc#UgMs zY|zTh^ZN6kjQ}q#TJ3!5qbgHH0l#<-r?y#msrUwP{pn2O0OHb~aG<;20w;fxu2lzxMzpdQPR8lO#z~=|3k&)(e>A{JTh2lEH zRrcRWhn{b`YHJDiTN zv|ylgH1=vR7rD&u3e9%a;MtiyP_E$OJh)oryy#)xU)X2OOquUtScq$+u^>X*94Ufv zp0h7M$R4-G%p0fzXT=TRDC{qI^l0x!B#&yA!p1&IpisZ*CG!x95K81ZqYi370*+Ms zYdo{69t4Ew7grLH(N0ttiJzWLTY5>Tz4HoY)J6DVQ1s~KlgB19*R&;^zVz?jG>|xA z8tjzjJ;P_-WIg#1Kj-o=2Y@MTKPEwJy=+KEk>?zye>_r)rMoZOF93i;kz{8qW?8P= zmM!gpd(Na}bo?khiDS12Bvfiz~@Hafcf-wkn?}RcRePOV}$2GP96{e30LkR zb)lWV4bC_tuh(HPjv8~i?ok^8kdlhnk~0Mn7U1iH;zqrl++Xb>BHsM;RtZ+{;8S(8 zqVK-Woq2#k$U^`mz8u1{9L)&_RT_Js>lsNV|bJ|2QzW4Y5{pHwJ4M)^HQ^`8qq;+*lOH(+0XdL0A zg6W8ULbQL(haCx%ogRks+n*T>Uu}ko1#t}zAQQf^3dotW3XFfjOWAl1uMI0G-qhtA zQ%Tl&(Dwg6X!*_>jk7g$dC5Bb11jzXnLpd4bczzjn{`H2CJCQJF8-fn`x!~rlbpXu7Df$_>ACcW~Ma>J=maW$9?zFP7mCfnPnIcxcoo`FVjf8^mTNP`??u0 z$^3qBH83U)!kJw~zk5vN9A+dHZ{>jGy#4j&JWtuQ{wJ)^&&?dwYc@;BUs#8x=;0A}%1TJBdwvfgko z-+6<5-jsNuoxC2-O7G}IY$GzY=FGJOsmVgem4zU!nHxTKiU?zx{~MZTmWmdq6FiJC zbK@nmnr5+4jEO68Qt8GnRuOQw^i|p97!J14Fs3uKmTV(bg<8KtjayMAtd&Vkop6p# zWknp#GvW$%v`)T%Kf*A!fBnCJ;v(UOC9HPVthamR#(w zhr7na@&feXUUu6jEEv=OCjdePj@>h}9N)h{SYA!}G}TeKO1JXyew2k_d*-DFgZ6V( z(aS~#_PN{b4zIXIrN*UJxzr~urn@aMF()XZ86JVn4`Mw~_8)Qy6{EPZ=?N@ZY9nq1 zQYWypL7x>@qKN?fmQ$%#{gvN$VbViFDjflcY@uBh?=>a?xI7hjx3Sss>D48$N#5s* zZw>5)sq>K#{RJe|fius(0Ur3!UBzndF!`8}b!ZOj&5D#vlXNos<%%)&@mOPjp*%zq zY#%!uk8R@bWm$-{p#Vr)nkt~TQ&xS!93KqaWtP;uBBxG}e3#Z_2h@laomJqxM$lyLeih{xj|um5&}!L#z>}XujH$ zUu(y9OpK-IuCMdYdJ{khoh7XRU9-++G)lmSjxJkT(8Q;Xua*--jvpu4d9*vDwnquO z$-z4UD7k&jbsFlQM*|dMX5$JzD0NQx{j=?e(gQI9J*&?(Cb)ji3V|X<7HXYK6v%+| zyB9fAsxctvIV13zTR!+QzygELd2c^&<$iAsQWFP@=;w@4s8R)~4=Vz{4q<)@MnsAa zg$R0ZfC5{8nZh)_BAOuw_cT66fU1gT3bpo+(SLds#HnyZEfw^7FCl`mThU}JF;P=F zReu4Nhda#_J-?l*oQGf*u}cboYCYCf;C?cNbRx;-X$SDI?RnhgB!NjX`w&%jJ2CWH<0z)=Q5%fQou zb>8j_Q=qX6ob<=lu!%+UGYy|W$@Lem{2p%@1MLYzcm#~`G%@<6G{ZAZbJKTCkPc)Z z%90SCy+e6Zd3vA?znvoulEsgXHLk=ijTRWw;P%T+k&Hh8b4h!1?Pt+i0b#;*d-9zuB!Mvj0Cg=>5=h{gvNJpQ`Fx zwpO|a9rq9zj{-f*Js`X5qajnj@%}UZ)j!aRxLTcepUKbdKF%0ECzU9;6S=tOa($d< z`FFrvj1!Eh%nge)2v$*Qn;f$eJvUS-{^RN*V-jT#S}t#E!6*l;-akihY7rP$`3AoA z!U=`u6fZ4#if3>H-Z%dSm0fdY*jZ~Sqv=ylO)4yWk|!(b!)0JFQsl0jVJ-PfP*lak zyHG8Phn9ZBSfXHxTYb#E?0->g7p7~tWqY-`lGkLSUct0DIl|sl0T=hgK@MKWG0|gD zUqHLm#%;eYLZqrJZ)S#pdye&nt5>La3z7{7lKD4KPr^6ooOv*;vu<*nNBdCD)p-GR zOtXDVuSCH9mB?JgLyj*cI2~VtO7rE1wVnrf!~D5*IF_>%a>*Y9F3|!WG8+wHta-LI zV8d3e%`kiovFe2>UegOF4It2~6rTp0G=aM{I9gfCzVQ*WVEpCP@C=nnr=QnLj12Cz zKF`OSU@2!M4?v#4A54HN=QnU9IdF{Pd|x3ZnPcmZ8f8H}nz2G-N)kM{K~A0CX+g}> zT#-7ZHU6iC4!R4|NoZ$tNNxU(`{|s@rv%!==kI>`1Rf5E`(=PZZ)@GS@`z zG-=V&Fj11&dm5D#26SLP#LPGT*&p(Kw+T+fUmqQG?-ev>K82t%I7}Zz@4d17u3vqp zuzW+yXMr&ZjCNbbqq^JF)}L3ib0+oHY;pRR_Q7yIN>G{hML2^Tfk8XSGF zGhehz;z;8+vL@!csDQ~6a66cvYp%*Nhv1Gu?A{pqDXSyS`Hd_nM6)~#CsdQmdO;_s zRbYz9W;qIKT)W}g=HkKGF6tH~O!f(l*OK;$BA^}%^3J&$y-zetyiKb;NMrPXeaU#V znFG*o@86}S_0I=arZj}Jp4JjcAmlG)-|z|5uspfw73I=fS)SqgQL8y2{5^X2w%djH z>S-~o5$oiNmQLbY*;s?XM_Hn`^KHwb05LW(>^$qP?9GDti!=y9^drp z4zBuc_OFtb)Pi=tHl?NW?IXCa9AU#>G9@O_5T(Y?ITRL<`zISm-Iu`3I(PPzx529p zA=s*sb5kkuwJw{@&B zqcq${-xpd|xaR+zXNImTZuKo9YJ(a{Vr5%-^~N{@>b)v%iWOR;=Yjct3ZU40s}+Q^?% z*G&5Yvqjcp!;)rpDMOQ#c=UHyj{+LyNBCAK(OH0Ws=Z@^nzNZp>c*iU=je0Dlx>cz z-^aS_r2OIuG&hI=x)>RexeYJH4Hv#C!<HF?FF<&A%K6FEk=tX>x&ZL z6RUR#`HB_x@oV%iB{f_7;lKVKEB zH}p;u-h2dOk9JHNKfdy?SPQF)MRAp%e@+C^$nwJARa{eY*|^7-_ZC z-P<|b(T|ch`OtU#lQ=E6mAgivBF3FI^FubvKnv$>8@L0Gb>>J&5_6VoEW%+;AK7Bg z^3FA3V}mk#(;gp$Ig+9F1mdJ!;3bgi$m@6?dp)%`Wc4%8N!EhMD`Vc|R~sM);GQO9 z){eFGpIGwh{bcL;iTE~F3_%KKt$Bq3nSkY;0zwx()eHuj$U3g znZ>rY&S}19uyfFhby{l*r-pG{`@z`WgvGKkyuA0Oi(GqSB{KD+bt*S@VhA@?N-47G z6#0xd-K8*cd8*By;JM>bo>Zhh*(p!m2`R`=J8LuxrtOVPG*e3ut`;ft_+7j!r6C0< zz3PG~E0p)~Fl2RdCupA|V|pSk8d2}J@giZaDgp?Sq<6Bc-VKjAk^rkoj5wZZHA;kF zg8X#wre097nEJ5;76z~@Z!K(3$GBH0= zm2T@fV=XCrYUQO1Jpk^lOTFn4I|mod!dj}g-;`$F`_M(~2Vf+5Z|0Q!t1S*Hh-u0m z3l4)A%qDMK;#y3gKIX{g1R}^XAKe_D^XfO~0`z{QS6&G^W>qgdwtFX-Aw>$Eo=O#z z7TmB&;83GKM6^q9R^XTKS%ykNJ%D9<>I$>B2>2{0MS0;3X{Yfd?@EJ+%QxF~rZ@Wt zAhnT+wrldsrg5|V7sR?w5D;HJtpmSkSq8Krr$A}0NgDC-H`NO)-?SG!4$R6Xr489~ z<9^q3ne-1HB@p__zGd*>RcPxJ54dMGhL-Z-di1pZ*N3*5mt{NqJ=jIXag%*^kgwxs za%>H!K8wv`fXr}Z3~+dHXxj()iwBdQ*h@coEg!U6)pvqM>?-j#tL(gIlQ}`r$3%X% zPq*^Qdo79KWLnX8xKz0Y&mwruafWUFVbvLS2^7!GBcSs@_W3$-vEi&m0q6qnw!inI>{wv_YceCo#i#n*C9yS^Gbg)o^3q~^ zQ|>S#2}@PuYqV$xHesOJEBjGi|0WQZh?Wx_1{fwd`uDhtx7Y9X zxx)BQc2K9lPa%7>o67HFANUJnxvq1Uf~b3li!kdN8+W^YvSQjHn76+pwrW`z+qusodJsgqJvTjAdIr~?6oNI7M*rMiv4j-T|Gi>CZQg@ zln|51dldD4wGXQzMukv9&;O7$e4I;PffKLJ;D#oeQXq_Iyqn;l{}7>I*eotsPg0}C9>qPf+U*YI>HO6u|C*xH_XtxEOa7hE>Z`j z+_%(DoYm$X9;R}tcc27o0{F})Lve3ayrMwP(RamLQmbRAKg*?Micg9&ot9;HT#kNQ z5_#QJVGo#H!OvI{ycxo&A%pSTQivatc}%0lJf%p%Z~`;GM91$d=P+(1od?0)XAL}> z`NKz2;W7232r>)!G94L0zMmMfkwsG+!?z7X93MFGfd)IQ&PSrn#^jNvv&IwcZ0L_@ zWBS*_*CyKZ0?)%2;4Pq6UJ2;S>n+Rovfb)_ z?%9WGqBO5c0JG)t5=OSilAf2ZtR5`*6JF65BM5?|{HTV#I9l96s@lTSr97$;*2C-a ze!hw+*47At!nxug6T~q^uv9ZN98camWtTK>WsA&@g}*C5wnH+5ed+SXbGxPn{urkK`@Kif;sEn9rBI_9+(M6|>i?acHd)Zt>c|uqAu^q!s-6sc3GQ1Z+!?;ylN6A_&B|%d{R`U%xY>W)7#DNF*IZB zhJWQ~?8yYfTQTow6?RW)56;Pr7@v9-^FnI@)5lJ^5_iVtu_Ig5zt7PCm_-Cp6ZUfmXWJA1=S1Ro}$jvcgzYFX}6fcd}heDgm{ z!NX+^uV=p`t5E$Ag!$i1CQGLn$u&C+c%%6e--xd@?O99ARQKS>MV}{omK3o^so~A#tmVPrCyp& zXhYyCCZ9Aobr3jduvuvK$c=j}&;yOQR?qOnIP{Jzcx-Pj92;?UL zjIL&qJx%$pT3%OEuRdwf(=bXQC%NMzic7(P?HEzllvRn@t7&2cOi`&SrMSRGihEeF zj~m&yOzgWJ$2i)VZ`kzhNLMJ+>)W!Po$^bW!({|#Y?>}k`4cM|OlV>=L6dxaG5SLC zV!GxN2~cjy+`eET>vbm7AA#a$oGTX~jWob;PFUCP8VoK5=V5?VS#gn1ou&XK&Y?y(fSytq-;alm&IM;QT~zoOK|}7dZv{NsYItKqHw()A?gQ|12Q&55;pb-GG=ZPNX{mg$+!ODUOKyNmCoB1 z!_rnEBc$Qf@`3}o zcv;k`X!c*R@Y6`di?9Yad`EZHJ(CEC#~NZ7>BN~fyB;qeAE5nJp*~XRIW}nT4Gx_d zoS1&(Zc5hj%P76TG;a>RaCRJelcqUXN<5t+HId7$kNE*CS?DuRUjRw4s!!crH+-nS zN;=F~gc`esGsuW-IxEebL1$T45L9ja2_Dcd6>cZ|3(cTGeSqQ3a=F!f|_V*ZJ#5@_(nO3$Pf_aOg57$DBgVz8c(;|SlME_@l|ypCpd|Jl1>fb;e+wCv)^+%SdDKw}2BNBW=sw_0eA}vAZAs^^God>H00Ef@D$D7bV_Jy(9gJ6sj=sW>edfkoOCq&USpEGUFgHXp+ zoI0e$@Z{gj$RU{aLKzDaJrAzsdg{Cwx8FGz?81if@WBAKtY$2X{75q-iNALwKl$pA zzSO9gOxF>AzI*xqp#V=)QOO0dXY6+Yk&SO+V4v!oTEx9Oa&-Cc<9|S=l9^ZcZ}R^N z-g@{DSjRvaTa8f6qsSgUE^c&8gPYwf z?@K;wf&Y2Ge(fkKIsSjkY+!e;UO4Wvfuok+$*W|NC}1dUI(?i%M`tKI}5qPaa3TrRF$B$pph~ z5Tyz6G>pN}8Rs&orH~7^AaYBKqbw$5`ik3HPdJA@idi#r=)XL;5M|j6r>=q~`iT(`}WY|EG_OFL)3D3&$HPDw)* zuL#ei3PGGVx{=4~K_?>orQ+TFg)t1;XREXxNOX`h;}l!JXIJWym4|c2=A_>wc)+g2 zs_^XK$b(P9r;CX0D|EMp$O2@d0+vp^M1!#a|CtXQ3WCmtKDHIlhpj5tAwJtW%zZu> zd)slo(Ndw>69W7ths$J62}d=tCqN$i>rA?=9>U?DXrBev?iu8i_MSb5M^J_j%6@Q?>q!Oxqi;Tep%V1@6 zqB`vEf|;}NGd<{edd|QM8!MyTqjEEPt_r~!$;NV3;%kAclg0`AWCyzlczsUH3Tty3 z4_oYZaPV9R7@@YzaEm?Gnw-{p#$_ajeeaL+scNaBuoqIBFDGLI`(_S$IVr}ST0+i? z!p#b!UK;26RJ_o1@<34ku4t_T#*WL#TDd7|F1o(}mr8_NIMfjlOq@hBufkRBIUDLa znjlD(osKe}Qf-rTD^c6}OIMOdV$^ESy*=6lBU>liFcdmww_OQTpoV9~EzqO>q1!xA z)|IcGHFjSO3eLZK6T-qAtP<7V0ek$*FZI+G;H4%tJDvbc?c=%i%c@OmavC4H1A|us z^JN}#UjusXRT1V!pX7&7gq&QdFL4*KLi|r8ad&LF@XV9<_cbLrAC_&hQJwD9ZB!&0 zpj2;+`LRhpadtRBW8`8C@@}kz+W`3JfI}rkrL^t*)&pAKO1w@dB}>+l#$$s1XR&k_ z6N$q3`pkjxHx@6qe5J#`jDa;7C&r}WeK;-;9e zn~I(74i33J6T2_#e~*C>_|OAmoiB8ac*0wmT*%ayJ5GdmuMY2bq`3j00xA?9l)Txr zZ4bM?w}94e)^}6@7~(=TULtpvF)jjmI2yLx-sN0m8UxWFI67_bn7DBOqQB|0WZ>9P zTfLioGw%UI2bntOr(btm0Xp(sQL>D8Jd{HjX4jxp>v27E4!MeRj5`8mXa`ANi%0rB z1{O;tf?_xl$(81b=YI`o-|09|iD9k9ACmW z@od2>xAKY73Q-O1Ml5w)6-x}^V_H`@#*KKH6VW*dXXq{P+p@P5!TPA33$ib32u=B$ z3QDKgSZtDRxF==vEcb!P=qoWuj?|nDmQ}{Mhr;qo@_iW$SQ4;V4~=WCh%*YjUM|$D zXa->DIHiqK)w>;=jLEN_^81nf>?l3`#|KO5^6FYyaKZ9i@Cb9cl+fnOYH&d+4oT6A zk#4_|Z(NZA=ll3k8^4~ZDAd^1jtqj%J6-PmhB=PfurYO=HH+fik&2)bf!QO$Bb8is zxh{<-|D@GUnk&Zvst8s0agT!17(b$~ea%VL&lyKBw0iF$IXQV@0^-Hp)Iu-a7I-g1 zYJdic1?ZfiwK#hJEubY^Ih?wFfQACAORCvNL4V(zvM2R z_FJRj8#=HZnZ2WSYR*bpT)F-rZRQn0u zM5dGUEB0ggj%5gbai?TxY9+ylKbm!kXr~d9C2sQk9tw5PQJ4u*3o0D&1hBC9#>{Tn z9jXSMah>Yjqy3fKx2Y|y44v?>`SwSM@kh@r07Uz4mD6ond29cj_aE}ubL&>nzNZ?3T~V@*k?8&A#q)LrHs&qY6@u9qp)AH_ zDpK>F8SrPf)PlPsRdAXO)53z>dzIbU5DDDD_)dRQU;*-{wZ)R6^CIpNg8NO+vHZXJ zK)hm|LlmvT%(2a-&qf2Of=u6>ZQ2=65^-2JJB&bZjh3;-<%Mj`#iWRy=!;#B`l?u@ zh-(npLnXpoRZN`_+@ofo4`byJoSF(r4rQk1kM35TD9s7KiXZm ze;hUP++u7gOwG(fE<+$juN!mcNbW9aB64{06;{wb%mPr_9IPLE^2 zn}*PO2J_3ouS&qrkh`#+5qVY50}qTh@^o*e)Eb`}&kzOIL{!|)pZ8{K=xUq^2>RT~ z`1`WoQ8GpMy%Ebu7rG6}8G~D)pzxY0GyWyvZZ-APr`n*&FEl;#$x_DDndhR(rOtNUyr?)X^_5hCXZKs173iL zS{^B)ATbIsQM$w4wl>0JvQe6?Dw7cL(H`RqsO+KikZ6rgW9BIfj{3<5)*N6VTZA*l zwA^ILQLaEEB>10=mL3mzjM5}WS#?{!H<_ zgG|}dv6cx0<9c7zBe?W3U{6IO_H+E^7Ar;m9nI{te`>n!ovj>>@`X8KM5k4+QX5}N zCfl*d8Jl`5vfxloKd72V$1_YKAU4)}(nr%0*L`O6Ak?5vWG|MxM?80KUNtYA2T^{9 ziCg#)uKWCyO%jeKn)1Wq`=_R&86{LuHk9CvRjIQq_IXdIGIInf0oj}d=U`ayhD#H%t-UP+I zNTa%O;at-IQaT*OVmK6=V0pW=(8Wno$?fLVo@IwuL3MuWQt!Lr$A#2!B7qWSJAxvH z{b#FBVEn3sih4K~G1pmutOb)3ClNJEvAMcc7(!0HMO8ab_Msfn(hr^3yLEPI8SR*7 zqK+z%AK)U%W!(Con7IxSp^zvaK4GlL0HM$E$H(Tm-fJ!5V~fhS+zq1#h=(?P>q6>N zBGp7y2{dD~7vMoF+ez~T7{C$~%G@`_@?5K?0EEa-b?yfP0$FEdX~A(Adh>#-sL3#^ zRxT2992$edueCPlETz~HdY7}lN!(lhNd%z{3h-)3T=ihSNMOj6?-8&rwOVG0^)pn& zp)zxC`YqdrCTE>2WTBwQzmSKBJ@#Q);I&dHCH7)w0~b{tnL~@!m%&xWXPi$V4$s!2 zPP=3A%9B5V2n7s!JV@q!&}fbQ+iQNn31`8iTr^unSh@+BYF>0^dfr4p71u>E|3qVv zakZkV>p%XoBR;`tJi73*JP$igUfL8XCl0pJslJ}itQMN+@hU0eQ8k|Zo1J@*y>R=w zQ%MwNLJKwdCfyL?%l+W9Vxn0eHL);9MU);3j8Xzg^8ghJL zj6M_r3I6t*xx5Z^X>ND9e`?J3fsza5VG97P;M}zlZuWsYNU=;FQrVe*F0F$FX|t-Zmv4qqjqEdIW9if}pSDLm7K<=qK|3&C^+ueeib zoG8;eaB>=n9?>ipQ6z6ExH+|9W2t3uYKR80yoqLLJ{`Fm2Zn0o-`xlfEh=td0L1!_ z{o30%Z>o}>#76*vDxW>2KrPhYmyQ#$VP6\"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 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/\");\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/DigiCertGlobalRo\ + otCA.crt.pem;\r\ + \n/certificate/import file-name=DigiCertGlobalRootCA.crt.pem passphrase=\"\ + \";\r\ + \n/tool/ fetch mode=https url=https://cacerts.digicert.com/DigiCertGlobalG\ + 2TLSRSASHA2562020CA1-1.crt.pem;\r\ + \n/certificate/import file-name=DigiCertGlobalG2TLSRSASHA2562020CA1-1.crt.\ + pem passphrase=\"\";\r\ + \n# Quad9\r\ + \n/tool/fetch mode=https url=\"https://cacerts.digicert.com/DigiCertGlobal\ + G3TLSECCSHA3842020CA1-1.crt.pem\"\r\ + \n/certificate/import file-name=DigiCertGlobalG3TLSECCSHA3842020CA1-1.crt.\ + pem passphrase=\"\";\r\ + \n\r\ + \n#:global AmScriptsUrl;\r\ + \n#google\r\ + \n#:local CertName \"GTS-Root-R1.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-R4.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"GTS-Root-RX.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#internet\r\ + \n#:set CertName \"ISRG-Root-X1.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"ISRG-Root-X2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n#:set CertName \"Starfield-Root-Certificate-Authority-G2.pem\";\r\ + \n#/tool/fetch mode=https url=(\$AmScriptsUrl . \"certs/\" . \$CertName);\ + \r\ + \n#/certificate/import file-name=\$CertName passphrase=\"\";\r\ + \n\r\ + \n#/ip/dns/set allow-remote-requests=yes doh-max-concurrent-queries=100 do\ + h-max-server-connections=20 use-doh-server=https://security.cloudflare-dns\ + .com/dns-query verify-doh-cert=yes;\r\ + \n#/ip/dns/static remove [find where address=1.1.1.1];\r\ + \n#/ip/dns/static add address=1.1.1.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 1\";\r\ + \n#/ip/dns/ static remove [find where address=1.0.0.1];\r\ + \n#/ip/dns/static add address=1.0.0.1 name=security.cloudflare-dns.com com\ + ment=\"cloudflare-dns IPv4 2\"\r\ + \n#/ip dns static add address=2606:4700:4700::1111 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip dns static add address=2606:4700:4700::1001 name=security.cloudflar\ + e-dns.com type=AAAA\r\ + \n#/ip/dns set servers=\"1.0.0.1, 8.8.4.4\";\r\ + \n#/ip/dns set servers=\"\";" +add dont-require-permissions=no name=script1 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="/\ + tool/netwatch/add comment=\"doh-fallback, doh-url=https://security.cloudfl\ + are-dns.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=Clou\ + dFlare-doh IPv4 1\" host=1.1.1.1;\r\ + \n/tool/netwatch/add comment=\"doh, doh-url=https://security.cloudflare-dn\ + s.com/dns-query, doh-cert=DigiCert Global Root CA, notify, name=CloudFlare\ + -doh IPv4 2\" host=1.0.0.1;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 1\" host=8.8.8.8;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.google/dns-query, doh-cert=DigiCert Global Root G2, notify, name=Goog\ + le-doh IPv4 2\" host=8.8.4.4;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 1\" host=9.9.9.9;\r\ + \n/tool/netwatch/add comment=\"doh-fallback, dns-fallback, doh-url=https:/\ + /dns.quad9.net/dns-query, doh-cert=DigiCert Global Root G3, notify, name=C\ + uad9-doh IPv4 2\" host=149.112.112.112;\r\ + \n\r\ + \n/tool/netwatch/add comment=\"dns, notify, name=ns1.unet.ws\" host=91.192\ + .189.2;" +add dont-require-permissions=no name=script2 owner=vados policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#\ + \r\ + \n\r\ + \n:global InspectVar;\r\ + \n#:global RouterBoard;\r\ + \n#:do {:set RouterBoard [[ :parse \"/system/routerboard/get\" ]]} on-erro\ + r={}\r\ + \n#:global Resources;\r\ + \n#:do {:set Resources [[ :parse \"/system/resource/get\" ]]} on-error={}\ + \r\ + \n\r\ + \n#:global Updates;\r\ + \n#:do {:set Updates [[ :parse \"/system/package/update/get\" ]]} on-error\ + ={}\r\ + \n\r\ + \n#:global PkgUpdStatus \"undefined\";\r\ + \n#:local Update [/system/package/update/get];\r\ + \n#:retry command={:set PkgUpdStatus (\$Update->\"status\")} delay=200ms m\ + ax=5 on-error={};\r\ + \n\r\ + \n#:log warning [\$InspectVar \$RouterBoard];\r\ + \n#:put [\$InspectVar \$RouterBoard];\r\ + \n\r\ + \n#:retry command={/system/package/update check-for-updates without-paging\ + \_as-value} delay=300ms max=5 on-error={};\r\ + \n\r\ + \n#:global arrDeviceInfo ({});\r\ + \n#:local arrDeviceInfo ({\"section\":{\"key\":\"\"; \"value\":\"\";};});\ + \r\ + \n#:set (\$arrDeviceInfo->\"RouterBoard\") [[ :parse \"/system/routerboard\ + /get\" ]];\r\ + \n#:retry command={:set (\$arrDeviceInfo->\"Updates\") [[ :parse \"/system\ + /package/update/get\" ]]} delay=500ms max=5 on-error={:log error (\"Error\ + \")};\r\ + \n# [:toarray {\"section\"={\"key\"=\"\"; \"value\"=\"\";} }];\r\ + \n# [:toarray \"\"];\r\ + \n:local arrDeviceInfo ({});\r\ + \n\r\ + \n:set (\$arrDeviceInfo->\"devUpdates\") {\"channel\"; \"stable\";};\r\ + \n#:do {:set (arrDeviceInfo->\"Updates\") [[ :parse \"/system/package/upda\ + te/get\" ]]} on-error={:log error (\$error)}\r\ + \n\$InspectVar \$arrDeviceInfo;\r\ + \n" +/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: 5200/20-eCee/ac/P(21dBm), 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: 5200/20-eCee/ac/P(21dBm), 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,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 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 +/ip firewall filter +add action=accept chain=input protocol=icmp +add action=accept chain=input connection-state=established +add action=accept chain=input connection-state=related +add action=drop chain=input in-interface-list=!LAN +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=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=accept chain=input connection-state=established disabled=yes +add action=accept chain=input connection-state=related disabled=yes +add action=drop chain=input disabled=yes in-interface-list=!LAN +add action=drop chain=forward comment=\ + "Filter Rule to block FB address LIST : )" disabled=yes dst-address-list=\ + facebook +add action=drop chain=forward comment=\ + "Filter Rule to block YOUTUBE address LIST : )" disabled=yes \ + dst-address-list=YouTube +add action=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=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=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-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" \ + disabled=yes 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=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 +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=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=masquerade chain=srcnat out-interface-list=WAN +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=dst-nat chain=dstnat comment="Yandex.DNS Family" disabled=yes \ + dst-port=53 in-interface=Bridge-LAN protocol=udp src-address-list=KIDS \ + time=6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +add action=dst-nat chain=dstnat disabled=yes dst-port=53 in-interface=\ + Bridge-LAN protocol=tcp src-address-list=KIDS time=\ + 6h-15m,sun,mon,tue,wed,thu,fri,sat to-addresses=77.88.8.3 +add action=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=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=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 +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=yes dst-address=0.0.0.0/0 gateway=10.30.30.81 +add disabled=yes distance=2 dst-address=0.0.0.0/0 gateway=146.120.64.209 \ + routing-table=main scope=30 target-scope=10 +add disabled=no distance=2 dst-address=0.0.0.0/0 gateway=146.120.64.209 \ + routing-table=main scope=30 target-scope=10 +/ip service +set ftp disabled=yes +set telnet disabled=yes +set 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 acme-plain=no crl-plain=no graphs-plain=no graphs-secure=no index-plain=\ + no index-secure=no rest-plain=no rest-secure=no scep-plain=no \ + webfig-plain=no webfig-secure=no +/ip ssh +set forwarding-enabled=both publickey-authentication-options=verify-required \ + strong-crypto=yes +/ip upnp +set enabled=yes +/ip upnp interfaces +add interface=Bridge-LAN type=internal +add interface="ether1 - Unet" type=external +/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" interval=2d5m name=WU-script-run-schedule \ + on-event=WU-add-to-list policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2014-02-11 start-time=00:00:00 +add comment="Backup Every Week" disabled=yes interval=1w name=BackupEveryWeek \ + on-event=BackupAndUpdate policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2025-07-07 start-time=03:41:27 +add comment="DoH Cache Flush" interval=1d name="DNS Cache Flush" on-event=\ + DNS_Flush_Cache policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2019-12-06 start-time=05:30:00 +add comment="Create mkdir function on startup" name=\ + create_mkdir_function_on_startup on-event=\ + "/system script run create_mkdir_function;" policy=read,write,policy,test \ + start-time=startup +add comment="Scheduler for Update Certificates CloudFlare Quad9" interval=1w \ + name="Update Certificates CloudFlare Quad9" on-event=\ + "/system/script { run Update-Certificates; }" policy=\ + ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \ + start-date=2025-11-28 start-time=05:45:40 +add comment="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/20260503/20260503164001-Diff-Config.rsc b/MikroMaster/history/20260503/20260503164001-Diff-Config.rsc new file mode 100644 index 0000000..8ec8261 --- /dev/null +++ b/MikroMaster/history/20260503/20260503164001-Diff-Config.rsc @@ -0,0 +1,29 @@ +2884a2885 +> # ipv6 neighbor configuration has changed, please restart the device in order to apply the new settings +2886a2888 +> # ipv6 neighbor configuration has changed, please restart the device in order to apply the new settings +2888a2891 +> # ipv6 neighbor configuration has changed, please restart the device in order to apply the new settings +2890a2894 +> # ipv6 neighbor configuration has changed, please restart the device in order to apply the new settings +2915,2919d2918 +< /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=" +2928d2926 +< add address=10.8.0.2/24 interface=WG network=10.8.0.0 +2930,2932c2928 +< add add-default-route=special-classless default-route-distance=2 \ +< default-route-tables=main interface="ether1 - Unet" name=client1 \ +< use-peer-dns=no +--- +> add interface="ether1 - Unet" name=client1 +3755,3757c3751,3752 +< disabled=yes 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 +--- +> 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 diff --git a/MikroYellow/tmp/Config.rsc b/MikroYellow/tmp/Config.rsc new file mode 100644 index 0000000..e69de29 -- 2.52.0