#kbC5?)di;V@=dz2KriTM7m
zJ3wjyVqmSEKBdt+w`}=^Z%#};FJ_@i!LZ_FxJmD^+~)bs*YSK4uN2Gk>%=NqPdzB`
zfo!7~Pd2=n)C9bmu&pfBrlwP~dCtjbfK_6F4elu#81r4tmmv)^28>=bDAp&3#$39vp27nbfz{M<(3P`crNRv(YqTql*s5*k*u&p@A
zy?StLk$T+UpHjM2%(EE5faHQYtf*CG<1Zx>lPfS3V@!+c9f()d0E*klzcDmIBvv3R
zAxEYBM<4#TuYZE%u~_|icnOCFtfk(UFsab2XpLrNm!$FaZL`@@+E4&=TY}s9Q#gvp
z0;+*Zv8x^!mQb
zP+H+}@M%`U0UA5ul3Q#`H1t^5V!wHAS6RfAg#>f_bYe2jo+(M0!a4k(7OOr850hfL
z@hEznj7z)84bGkNy)k;y1`|&+CKaNPBHhl~gz3=rKSUSYanp-bX9Iw1fRT1)1nV_$niOPF1^@
z?jUSOQZFwm;|$cvGtZZtBIG*^&F|TUnJK3}6W-q1s!Ai@Rw*
zzS6?!K)^D&Yqcpc4FJMTwD#A~8ZFp0`+i=ol|P@c+(g4lsVK2DDvHMi(d_o?%F-8k
zNg|e4*kDAN#>jrGU{Ax4z!n5{2Hv|fg78O|-FDkQ>|43A^Weq}>mOLT^2qxMKWZnX
z8}|}&L@$mRwjN6q06{|xcm&fFJ5ooTERtPLugWYhn0sBadfjSr+R9b;eB?`C{bQ2n
z2>S8}-NKqFDJDE8mibp_5)K`QwOjzp2CX{HDkSB$-EQYxSI=r<5*lD~n`UIsFMZNU
zueq-~c7g&dLX`7Z;3hC&lb{F&+-E*d(w2CI)I@e!v=R;x#h^
z(}E_qkbq_DTjo41jQ5EQ4OplLIE_o}>t!wjr`EZ$N)D+8syy3|-IM}NM!9Qf754R8
zzWpvz%-c&zv7Ag(uN;o`yH`!F{fnbFzvw#=d!aN9L-?*$Yu1yK!|=|J-SDkXki5ik
zLaIAhx$Mg12ii%|eUHd)0~R@y0gDiS8}7jI3RdY=Rp34
z&PlL>(l3JQM)2VEVK`#rkPZYamtom}RePNT8wgmwdf~&EO>SHD`c6NVwT`a(u#(Ny
zfA7))ti*FXE?}9A0$Oz*t@i>#vnmfp*Rs2qccTE)eZG9lx8K=G(>aT+xV78~@s}&E
z`nxKK(>C)A@Fb+VfL~SD9Gh*~HQjB-HB$2P;?}7h&DB*^^xl0Qd$w~6YBMb}hfr-I
zW`B#^Y&6@M)iCNmeZliCB>sjERb$v?I_`L{`b^b5mDKDjcD7GF3@jz(dRikb;W8Wx
zu3c@PprD3P84yZHxhW;9Ffk+Nz0hWEm!5LM6%TdBPU`DUzEHe4(NTXwmuf+?Ffaud
zn|ttbkYj~e$WP2fLF3|9!mD9jZoxW#{vj`!k%PJ?`(LM6d@e7EGb&KiT4B+g=>-9p
z2FJ(*tvL^(U`R+0Lu9h}lCneHiovc6>2OodNKVs%4j;stLeC%^l_4^hW#W0w9jh%rSzK=PP_+2{ZGn9Ub`bJfb1K$M!6YaRo7Y1
znotNn)Ok3tb0`_UzFGErilHe=bWbzAFAM^H>wn(yI^vHUuL7(pup%{pWiuwbvvf?V
z8>!lsP8Gwl^*8^_bOdSwyjL(
zBgq1rgf5fw#anR?BNGnGN};cq7Zr5)F6fxINL_f{<3Xe^W>ARpAx{J
zDB0hkI-*^W9#o}G$JFqG;(uBzik+M}*DJ_9H_WKlf(^L&R77|aMl*Ok1?<3qK@&E~
z1ucM{U2eGQdzjbju|O$LZs}>!fCDrLDM53d#{%dJ?7fB)Tv4bS@G>d9BDGp@Wipi|AEc0#ds5ft%<#AeX62vc2sm)gxq
zscBiZya2(Q_+1mfwPZm@kV>{)*X-4P|0p50d(1)ixnV+0*%he)Ea8}RO$B(j4H#eO
z8-H0{dy;$k!T}nT@AWE8tF*7zop|iKwu|5xhCs#9r0U6UPM9DGRbdM__?QlYr1K0g
zX_v!_HC0VwZd@Ij;gVq;nIyYOeJd`rxNK%rlh9>MRe)6$=8%#DP(n9cW?<#kx~d98
zuo+dASJ20>@bkZZ%88$zf#PVGiouaxrD24*feNKm1xXZiFxOZM?z$qSy7a{eX!ptm
zoW?5bq9S5p0)TfUvN1NYUJ4?qZQBs;7svHyC6J+HUD)pN3jvmE4N#$xAJGb7m
z33auMu*|d_?;`4Rj9^ho@PwW^GxPWmr_S!mJRg(L2Bg?B^SI}Ix2*XAGp&}xVuMUo
zoYbJd8);g<^`xV(!FF)avL2fPFf2WyQf)*Q1*noo6%gRj|3LWGJ69=@032Sgo
zzSLn@>0+Fpa2bG=53uTDs0L|RrTuJ=!pTdHJK|$K-B_RxZH*v^5+d0(K!LcfO2ja<
zCsb9&(rC+y&ZWh>s^q#Y3`$dl)CX=0z`B~&)mpAM_$Yu?4y0ZD-{C%oLJn9YP^D3c
z5!YlMCZX^E)&bF`8p{MrRlXp_{)BcnX!m*K*`}(keW^zL)kkf9`Rk6^{4rIxLp8mG
zM+jSpX-ZOPn*>b)baoH-XcB_vuZ?m84V#qQE{6ul4jLz>E0EUm_=qb2OwUb~Fq)JNajCyU&RZmBUWyLNg=n#EBK%KfV}DSzdpW41yYaaf_Z3G|dhZ(pElvU3_4
zwKW?+*jXnb*d0Z%ympbzlzcNmsq1vp^p_FRZWfA5agmoS%6r;HgJ+ut=_w0Us~!sZ
zxH!+9Y~#RN(2x!$ShT6t!-tyx{jqwb5rc*OAZh)p|M}f3iN6k2QF0gI7x#n3@|)xcOPQWV{@zh839(OYM^^7=t379OY)#ykko^b=Y;LY&Ix6{h3D>47S82JblQb_B
z6>L)U@o)gFDlcA0s=a`NOg=Be`qkr){bWzjZX&@7ynrBT(kQ_ADrEu&+02%zUIEzW
z4NHF@3$yd9Tkx3AceZ-n;04UVfBw(guNp$Dsw!tJY~V4^L6K#FZZVeTx>~W-y;xEc
zQMd%Y-v*$_0jMS>U{GWJW!wMqvBz&kAFuqY7pS)5JWy#h0z872Igh;pFztq7Ep|1#
z&@5On1x-YohvlGR)992BL}^z6@ePP3s>njkdu65=W#c}3ufZ(K7O-wqv-!^b{sVJk
zH7beYG~lST^%|&iT_(uJes7lei{EoWRF`JP(~6Z4+sN7rqw*wJ+q2BCc2YOpeJZ}v`xsR
zV&*R=yYUHs`066zr-*&6mtU^%hPSBO246Y
z@>z>e?J_^(yAfc0;J*7mK!y(#EhQ!w!flvp+N#Bk-2CJIMkNNQmWt-c7U?^y%)p5F
z147-`I-d8kK+|7&(n;6PrJT*l3#B69I7w(qVr(g{gFuC(yMk)fiD8>>)4Y_EiXwOm
z)Hc3d4v)niGllU3MgJPCzkkvR?eD3>KAAR&ozdJs0VLwfz`4>x&qN;`!bh8mwz$0TiY(a%Er~puoonGu&g=1BK
za=0AVwU8C-%5^Sv?fF2(%f0X{A3de_`GC)=*A8BwrgCkYd&ED0(+1<3(NSFmPM7OO
z0{g*n0w^#VTyvj#nrq->DO9^J?UW{cvky?#^HC_TYyY<_tX<~I#0sw`DH+6`8a!ujdG{Ytn?2e3lra$@PRowf
zTB@mHY>~jqJ-I$M6?p*6H3#wWf|E}A^uJDwy=;yrWL7eOo?QE)hv5f;sugB^PV_}!
zK~{UcuFyFYks$CXfuz0VF>jYcel3T(I4GasU1&EZpTF$6=UwdqB09u#
zMc4|*r*;R{12Cu{h)QPSQXSjjA^>F7jNz*q>Wb=iSVQ>AlTN(q!5}yt0zk78b!e$*
zcOS;72P$INTm%|q;=9ORqctW#o0QxxgH6IFJrB+EG&8qy51a|<3joZ(tcG|fIk5M!
z;K(Ls-=H-Q7FBL-6;kMl`!ne{OLWXH2E%Hy1~r-%g4HD_p77djjGdlX+DtKNm|?L!
zD85JKM=~009tEo%aIIO_E~A)rP2M*q*jUs_{^!Gwz2}#b^j}U4qkAVNCNkk0w@Ls`;2_RwgE});eh$K;HSx+JNTVGWUh2rs4nMVi13?HT$t-Y
zKypE7&|}qWHna1-uI&547t(E5mVO(|MzTGIaijA0?W|*6>d6b%2(4gkOtcNAT8X2favB%jkVAT}NYzAmQrxt(-h?B7^nN{5|Vt_dzET)u+uQl3-
z8+lv=xWOSB2B4aV!$lUS$G@G-EpkKGw?9!jo~1WiSDBx6W+)3htV*yNFw~kA(S;#F
zvIs)*;+;GH&SF1q>#Qb#H56!l?7i>8qs%%uWr^$p%eck+oT>a@YIkV0BQ%4g)P)~q_Ge5
zlOj+Ryw19JCD9%_`EnR`$h+>l>l>ulQ8~6is1C4f(6WK94zxH0LPzt-DC)3Wbk~;;
zs+eF)yQHULvj{6V5!FN)9Cm;;s9K^ulh|OPOMe!^s}F=pXczq}9P3rbop_ON#u;@M
zs_XJwWlGLRk6EZ~4hEa2nEJP+5*Q_HvGGt8=&%iliH$5IPkG;sF`0o46CtShpv8Uys1p0lY#jtdG9u
z_k^T|S=a&q6*hd*&utc*#tDX75H1Q$Rq{uESOQiRSOwO_2rTe2`Vl*TCLt^xQW0+P
zu49h7z(gLa$I))aHURbTUSP7i<|jXS=KvWbA%oj*rH-zfdLD6G1yDSzfu+V_vDOvd
zWGu+E)GDjta7})8+giIZSVljx=`thbjN64U2`R~|JlJtpg*1q-tXcajb>?4_n5MRI
z#o@hxgcM0oc>2`-ouoblA#t=UA7BZOIT$;yA@hpkxDZuuyv_h#$fk^@DPQk&IwjMv
zE#Oz4A#4-S)~wtZsD(BO4Mt4WKhinOG{tn78by8G!j7$FUYXQM>xg;^Mh
z^zTbcI+gkT(BK3I7=#UQm3S{WBfqwH?`J)xpgZx4$Z$1-5WIfvDNnz`Xi?}2=B<$4
zF2ewp^2QNe1P{`-SWp<3Rhb^5VjEkpDrsI4sJM6X9MXJqC!8wKY5}VVTAcXnRu5|u
zMx^M0Z2Fu%KDqKKwBJ()1o>8k)m|u^QAKL833CwaFu6f}k@rQ%17*o!b1vM036tKf
zxBuW$Qr-Bp%4_Hg5>5W_EpJq*n!N0>&P+FGE}_z$y;UfD?dPikMMtfhb~pf*Ei4jJ
zU8j1GNocgGQK~}ltY=%+lBxO4TDYKxp%R~)8izB*Di-$(!+;E6RX*UdrIPHk@BO{Y
zA@mc^FS^xvKJJW%nFao9GE52QDn_*wJl5e7zVvxXfFcXZ!0C#MuPB`4Yd&+00ku&J
zouxP2c*CXVJ@bOCgv?^*x^ITEH30QK(}K7d>c=fC&M(An23G;KV@s>5gi=~AbXU@~
znwS?xP`8hZEiM|W-)xTq-SUlUGfb!-jv)XnC8=VUoHT1KZ!;}B^#)hn_DjV|VI|$X
zkAZ;qD9s!mT%R-1z^qf(BrRx?X5voLH2bZyv$HK=4GCbPlF^WoPB3h@+$^6_=@5l9
z)=KuYoGS|)SeA8Yo{uKKi(2P`6=$+0?dH86#CN~x4Z=7t7%lpR?XEr8g|o(tbIUs$
zfJ$}!`26p*#L$)k!&=rt3j-=_iG^>t_zlAb<#{!PC{)ZoWRZO2xDq*ondd%_*ivqd
zwA60s<^0>Kyly6n9KZx(t}wb?K7Y%jJ3m%q3c6;Y&tr%zD+s9yK4r@L2+zZSk|<=^
z3V%b)7ZeFJk7Jz<=|&Ou3y36Z5)e=d;TK6lW~ZmKwKqFWlKvb?;~uWi6A_A4LRiLF
z)FBhyF|uams+M6bK)OyV
z*CrSYp}?~BwGe**6L~xTAt}nrA|Ni~tvF+OtsAgtnaGUY*ak75>`WCR}v#eOL0tZYY
zPxQOq_dYvEFz`Hgt20Cnm=(e(?2;U=eo+^@vMfxRhR0p#`eG`j>U1O+^f16vYdb=9
zsSSE)fzqhUTkhTV%^G>4Du1wGBEIJ>mw5{csSeU9HbynT0*?SZ06^>3twX?Cvt~`9
z95MhKTrc=s6m{`E05o{N-;<1L|2_#;kCT0JUtkJi!&hlOZrZd7_tyf}yrwsvRp28P
zO;<^=)qQ2Mvjbc-P2-F~xEhwJ5md{Q9J9>r!?0K$mnLBa_HQ+s$Gacje*J%W=;8Zb
z@XT}mut!99ZhA(676#6mQot$#!S+5`+G3+)TP}_ZmuVNnUW8%PO*E@Ib5Yp)&AKbe
z^9}$rwQnzi6o3z03jh{iLC`@O7?s%`wJhE7*@P?@b_SpX@9*8am+arO7XfRo-y>AM
z5BoUch$Be1+bw*i1*{PlIN5MP-u>Z^y5QrhbrpCXeZUny{i$bPR~OrKs8mp=H=JqFPK@3+76`*4oVe#+?|&dQV!hhaHFa4L8udmHrHQUoeWYNEfH
zu7}PF%_f=%?fyJLs_FqiaYc|;vD9&*%(i`d_8<^pCmeabfB^wu!E;mh%9wPf+Nh~A
zYP2uVx?mr>ckd=M`z5PN6suY#nHc~USTXRoU9GeQtPz*#>1kWLs#|@UR@L7ufE&yR
z>Z}Y-F(02H2fSd2C|-^36Bq^?e-U(Eh~`;MKT_^mtc
z{4pta#SU!~SulYNdMtsG;2pu-*U&^Ps+>M*D=qtPm`N|1o&Ed=e*BX!lXClXJBuLX
zy0BrP2eR>`rbWO?4-;l;mgvWdg2X(EtG!R5x9?Ob(y237??1lbd{@j!*i
z$D6V)bJ`S}B?vMggBao5YyhAItjK^B*5#6qpiKeD!E*pobWmv>Yi_nr_U)UJpf#Z9(Pvn1A%bihtPL0T1@EX>q
zqbxS7FoU~FH-Z6w%eQa4loUG=Ck}Nq=Mg{lbF*__{MSzOV%xOL%~+NR?KW`N_4D(g
zvsh-}Wf+zgr-w2Byw8)EXCMSXH8VX&rl)2x907m_n9zz9D<#N;C`+WNz(x|O7Uhv)
zrOG=9AY{5dCz5qd$^FdE^hw<3+C(P^Sg-fu>&&!s~{=YDxK`BnWd~Ek$2j0^rhy7m5b#=>MKZACnO7P
z&_UT7CA_Ls5|GGl``+!ZC&fkvZsIL<&bxU3w)_A6E2lmA#Wqu8REx7L(K?^d^{>kf
z4VoluQ(fV6Xz)KkRY;YdSOk7NMoT^reF-Eq+&!dj?aV1m6BPxkEy8{$=JYYrS(N%#q#<|E=J@oNk8rD
z-)ExVBO;bS9meGfSd3J+=d%BfYPQLAtn<%##`Wo3pZHQM)eTZC(QzFPQL+9AFyQengJ`bn!jP9g7*QaW@mf2CK8<#D`c7Z
z2%!?H@kgAl2lI}#yCQM0>qU?a1ee;b`
zGG?nu!#FBUfAZCP?*3y^Zop}qga*K(3LPdh9c;4`vffbaVk$Y^?Ia|0HO}R_l=4Tj
zT6&P?5|K!VgbYr0t~Co^^XtDVSR7|#4+B4~^JkK+&3QMh%e-&EDhR0dUZ?0`G?DIR
z8@ogjn3_FgYB4&rRLqveazz`5H6O6DO}&s*_ZW<-#Q6Vl{BdXAJU)IQ?ZvvREvaN!
zCQz_)&>rL)WmJs?9*+vxLtp*TogZ}oDkgc;0~@d^O%~fDrPx+c`-82pge(iKKueVu
zCk}x+@08}cfcgDY73{03cjfaIdWHF3Z@R#)0ca8lN-@-ElmB`U+!?Ao!K_k*2`tqy
zQ_4}4J3{j71^QMWFEQ0p0i_-MOsqjt<;OCTS1)In*4+Zu=wRh)RfFQNN^x1AJ?f~-
zMNLxYpo*hQNmy@eOUr@#mp{Jeag&z{_S$$h_jY%qhY!J}XfP@LAogH2V%?Vk*G0
zwbKB%Yc;IVbStAj`BH6M6EGrv4`OiRh7HHWJ!uL;^c~phk)j1gBu?P!Q09o;+U-tR
z79^^KWl>7_g=SBMsOXXq?3=BUT0y<|ceBysmdFLq($RCXQx+h_j#(Hx8dg+sQ}K`g
zblYcNa>9up1*Zd4wgeLpZwwMxZP9FjT?cQ|<*8v&!HV(#x|KPK@c;%ZCRdSv{LXEE
zOsd;>HDXureBFk17>ue+H#IJD?_Y5OQh<~w)=CwNh42+*ObO3C!M3@`q?dB;(FL@b)+IqZOw?R%KX}VLj?N@-tnmszD1`43y?<%djsq
zuDR2|!faFQ{JgZZ#^nN7ZgjfMvg*WlyJ2ef`4^w}%un#SxO4**!b}+Ti^b~dHrBF+
z@+|sVGl}`>2BzK-bXkG6<^S@H|9FQ5M!x=cHh?iQApgx|`kUZHyZyO+LmUcbpxw$n
z8<=50PGI8hFWi3D#|JnsniQ49HPex(N$X0A=QHcptn@2W9tK{EV-+l#v#}%#28HVb
zk5%K;Hb3*y8Vgh<+WI=U
z*!mUmJ@*BUR(=0cK6iDKP5r{j7w)+C;}$U0t%J(R;NNp`U$Y|J7(z=Cd6tBVS`Wic
z*02@A5^Qz^aa$1XVEPk4-YtL?1cn;D%b0!2Bn%t|mm4=(&S@Js+8C^=qSSqwR#hqv
zg4G4*oViu>`*@L4uDYB+A2*gd%qdlIM5)%IxG;&Yazv>JQ)>W)N}w!~?cS78JY
zM-TC&p?KWJ<$H#EZkaUu3Kfa(07aUR@y-NULD;MZn7G3NjG0*1I3asau&&atbgu>Y
zF5`MqHxJD;7*u???vcyVkwD}CLRR^_3PZMOele)Z#e+A2UH<&usV`V2psWA6fw(d8
z_aMyHSN;0W3-b5_S|eozpbu#=WC0j6GO1XVmg#oKGffKsiHaCIm&0oTi*Q>2E?{h?
zN`nEfPBcbVu3VYbn4_elg?T-hi;xh~mPl@*TZI)S;UG=Rejm5F;2BT34g>4Bx{*}c
z4awM*ut9`ra$$=2(E*y(5)CUd$2!xSBR75TJ692>brh*?$kFH*8IV+w?Mi4D8K$`r
z{w6BEzCzYwFfo7otKxf5)f&|!t?NigARm3;!7q9AK-aXkfhutx3uYoPAj5`@XD0+W;o(d}R!PGd4ONDr#wXp)(fooE7Mu);9bGJ?QK-Q0@k
zgK9fJ4?MO(6+?#tFs|C+YKqI0Cj}`tBs}po$p~0nv6e`A
zY~3D$iQ~ZVXq--ffP#U{Cgq70yN~Bul4MdHRWe596XyK{;Sqqy=wV<+BJ09Z
zNNLtw!T?|pbntsjaY~4N4RqNcWjew!wW537=&7n@Rh1i9yWOvyd*&Yqym)yK=u(^I
z7fKZNEv&3rRRuMgN9Nc|ULEVA-A{b?KQQ8hYpyoII*sWF{QG9_Y!GQ!Bh72P_kpWlz$|TnsW1
zKi41o1z=R)DKd{FPo1du7O>p=s{~k8RT%=0hE>wEo=DRpRmDW6J#Ti7o(V+=OE*qd
zt)Vaj$4eHlOzao+i(e%ZWPm6)-#un~A5TJShj^x|)_(^HSGL6I=OZ0qa;ZILoxaShw2}eV&En
zlOm3kGN=2+U9PH%b~AI3SLlMmBfPt5Pno&+8!!I(QUFV!nW$V6y#cJt>qUIqsVBbd)>SJm
zgkoiiDgFQKU44)oM|JP+ncX{`&&=MPbh~@qs@3l8-OldLbpQIj-+S-(Xl@Fd0xD*yOKJNC7H;BVP%U{D
z{1T6qrf^J>Y9uhkU)2?rS4y8KH^B+l`_L8jhd^lD%5xkaXC{T=iPrbT4@k8!Z(WjT
z7P|fZZ@x*U9wh_^SUHa*MaAu}0v6=E80jR{k|>Ju{h%e5&t2DW0%rFoqX7=13Ru*$
zIA{&Og;N>Wf6Yu^)0@lki&b>}C~~Td%x|K1O_KMPYu9>yR2LoYB}fAKJ|2re2F|;$
z$0N9zLol0}jX#I)oM{4Envz;=S&Grm(Sq*OS9b5cEf9$Col{?)n|^%#JKoHjIvBxx
zDcnT|mR{+{R3LZIb?_0^#pA*6=b1O9_k^D#T3BUQ(A{WDiwj!=ovSXs;B%@@(D>)Z
znli3gq46Uq#B4^S%#d|dcx2<6F#7Ii4&6?|35-4ti;-qc{5(PT+70V(l@u}ZfLHM?
zz;PXF9;rpUd9L@L9`Fgd*ghUG=dT>S*ps)btnEgr2h^7$6W5wC&P<6xyOm1^$
zc5@dT04I%r)dX1B74by?E1>n3*IfF!Z0Ye0+L(GN?^3cm5}H)?sp#hn$9mVk5OLcz?kA21W5)H{+5G>cC}bYkdW^Ze<8WA
zusnIP+d0?iTM246hrxTRE8S#vkm-O-D)Z>nOx-%h8
z)g?Zc&VAIws>}^ano}7ZvD_yTUw=RXwQd=8UZ_8QLgRX1N2Uyj_^^*Qr9lDr#J5
zzRzol3y39#ELtbZSFx_psm6e1w7()?`2dT0xGG#9=mR(X{I<0(x>zN|abitrY-)p)
zhQfCreO_vKz+!GEZqo=skg9H2QbV*Sx4dNSJABHaQkK=~N4W}MK2y|o`>8vRZJMSE
zgF6CndR4&kk?ZjJB!SCU$E6vmR@(a{GPnD`Qhst0ju2mjs{3yAD5K_*REBo
zp8th4&wID_toq74PKrDd=?X?9XaG?FmP9mw+o@Q>maMIO8_p+Kv^#kEw#R<<5mFzy
zf|fxjD(JPi?w#ts5uPVZ5-Zn6|BhC_!>D!_!si>irs{kB)niZm1!R>}IwEv&*N44q@sfE6FFngi$f^jyy^sgm!}!oqHJyY9_t0JxHy
zH@x_hLg1Y#A(J}l7PwjjTaO%liiCyZ;EmR}fEB|1O&iYnh)-&z{JH3YUBZ#Ft?YNb
z`nkhTv^=MxhC7r+W;!iNE!SON+>oR!1Cx~^im>e%KJTiGrwWK@<6-3#3Yg;+0W0hh
zhHhBTUH{Cb$q?qftl*<;raA{Zh^*{JHX&PZeQ@=+D!8K68a$F4m9}0jY-QYX-rttq
z7ln~Qj;aLAy8W0+Ei^J9Ov)zy3f|WVBEn?c^sC
z6dQ%jb9|&RhOs{WFz2xylA~$eqU~3x`wzVD8W*fiDOA*u@A>1mz2S1Hd&N@|uu=aw
zD8mT@mlNWX9+%O9P_h4G0IS<5Do@LfU2HTzZlSsn0Soh1w1(62@>{pOblp2u=?!&~
z97DW$Nnw=w!C|p20`Ku!F4#8OQ}25A@SUWcj<^7z6w<-Zt=K!xJmW@UyR7&?$DDgn
z;jkPBQnVWzF%!y{2gb@g5a0wu7FCmWyEb~h{@oq=IM=;#E5|M5d~*bsFI9s^Rp6nt
z3c9dKMI&I1D5pD0fK`_;>ibGZ#+seC
z&I&rA3kiQ7)s@=vMcU*ae7+Ao_4IwDUggs5`aXUTTUy$Zz5c~#{h`ZilR0RWxfL#p
z+=}9FI9P0CQ2=YPQyvmernx}ftl##`p)ZjkltY1^m7tAQpZ~9Z`);U+LGb-`SG`Wk
zQkyhdl0ypRQ$c`I>I+UEi}PVL$VRhdDjgB9ati}mTRyvkdaN?@*pcM2{bYBGOPA(Y
zw{WpGlx8c4v~vGik;DGq)wP;}H%98U@%8f$&P<>AgQ@Q2R1om8wzMQ4sYySK#SG8$
zM;?D-J36N!Yl?vLO2J7e0Ty~K!H>WCo$m#F=YVp?6|a#_9!6KO>SAW|U6oiL=C{f~
zB`QBxdKt(l;KxX{pgHjZlK(LPG1X){(MUkmg%LJVuL_>ECR1VN3*sy)yZtd6MU-a#
zFmPl|i=q0hgkmFzHIkT>9i4@+8_y)xf^#q%HPZnHN#1ktm)lzKDgwBJIH*zSp#7e8
zXMa*x3kbL4i-J2NE?c{!Uyu=*hshnuTjXhpV504?E_K`8ztZwvpS!Z+hUg$pKo)W?
zAg8T~Sf^l3aRgKe_}N8ep%oUCp$_az6-C%@e*c~}uhoy=cI8&70#c6KavWMQkFyF_
z#-ie=SJNs*pR1jPrT-Vz{DhX1e=%H(a?Z;VozTG>zyIl{c9G^>A?e`{sfWK(ILLCq
z0WI(KcW&8t9(INvS8J;VOcv!E^V5u~!jp&4#cE^EN@@g*H(aV4Zh)bQb%=~G?Bx-pyFuLPJQlRNacl|qA6Qm9~t
zh+t@O)p3XU2C`+t+RwU9zy*Ir3cw=LW=hMTp*Rfp)E3wlW0Psq;1xt<@wrNX+vh+&
z1Avqvzu2iZBtuwNtzANNygJLQ5-j+}_V1VG%Wu5ya)HVI5vYA0IlzJqCLCzN&Np6{
z@XIg!wJnNNbX{wWk(B_A7|{q?Aq$``%nYMPmDkF8-o|&_`6j3`#WyIvLg`LWLP-0>
z#tx|uX0Uf{IOnErH`R@071zh@ly-cE(r6%7qp#BZLJp^SHLMl3kmxPWB8TFKK5(^!
zHB76K_WaSn1|Uc^6~_fRINC%O#U*U{T4=q6BAw#jzPF>~^1k)8m&sAEj+Y8Esb`l8
z^&afnTN>iB_MEbE3tIXlCs>AZtclwb9Q8xx$^6=j`)0oD58vmC4I4fV=4cnq&yMH0
z&}|CbPX(T9bL-CIHBIk>KbJNhzOnt@k;uSKml&{ob%Q=-2A_aj{<=d6J6raw^=(x|
z8L+A{kdUbslxi-ZcTG#eyRscdX{#OFuMdRCoFSz+a2;6wz91B>>%eFM7Kz2~RH#ls
zTz~#ckNoN>(wuwM=ElJ}miO%Z@eNnL^5wTNnQ3fPd5>BFOT90%HEPnl#5OtC^_*Jw
zP1*!rrvD4Z4JGlH#+;Z5*s=GnpxCN%yu0v
zL4MWZTi0mmrUy(f@^V*a6BX1Qb1XFxDkf<4t#KKeAHXJ>t(Vo5q6>$JwC1f?UO
zW~~BPzT`!EVtJ|%cV*s(SNOA3pv@~ub+qst(cky4dw=+M#NT^Rkg5c-@L0XFhHzhU
zmylFTitu;ji#X9o9ZCwUI)m?W|K2?}kZ^0M9snqA@8|5_r|7&xH{6$x1X@9{3pp
zRtIeekVkaxcL!Lvm5xQ1Z`yd9>b{aml4r6nhK04%fJF%cEMfAoxajAbhw4rEzkB!I
z-~p_Vcpvw;gC{+$p#@msj^MD72HqIO$pWmU;IQga6d0+m8}thMX^V<3ZZv60RW9p3
zFBLkQe}FKv7OZ@xdPc%>$O7>xj-yCOwc|4dmK6@Q=D8!PBQb8^Itu4;!JA58lPT+}
zr{tnnY~1$XLwn!Hs`I>bp1?WeLs(Ty;SzELLKMB8x8&L;f^-js(A$8Pc1^Z!I_L8l
zr@EqCAF#)bvVzLQrkwN@$Kaq{(vE3JorEHxs7uM3PzM1!2i~aLxrN+d;duKnf1!
zggZ-!({hhPtQHAV7~I?Dt-)0Nmn`IYixW54)dy2$$NqoxZ9s!o7;6&=uCuK2
zbIa;2Gj$DFA(^e`i_){ACIfu)`R9MuxaSYuK#E+e1Z*5~9v0S8xP%-86<~@6{MkM3
zgJbt66|m~U=}l1!P4wNp`?2@F`uugbbKOvinNGI0iKj^(mBh5fGwaPYo5(BKZ8s6c
z0hP4cnWzAklhcCk3AaG$WM&d7s<}qA+&xB!vU~_$3>B*+uevwKNjr>eJU(~d7Y;mr
zCjz88z~ZE)y%gFITq8OkKyk1D9aydN5hIFUA_zc{FK*j_D
zq72kcxjZ9QSrl9rt-jUoQdV{0(@M7z8eUY^rAl%gZJxis2Dkwr?%Ma`8$2A953qO(
zPRsFH3~^RiAkio2SK%MGUbOKa75J-l+#gt4%2E})0GW(JU2xV2I{5*25Qy*3i3NT5
z8Y&iPO5%dha=R=iQB=~CBA$d(VXxcZ8Y*6qb*&DSX<;V6vwP3`S5*5#ih!Fo3TX|z
zCV&8Ma2{pg@$eUD!lQ(hMRw_h7u;@IdYMV2)`|u!*NH^wn`a8lWMN4S{;sdebRl2?
zwNmEvuO$mEsQh`_uPnSy(rv%suR;~boZUX}@UsPQp~mq5Hhn>reVNU}
zNDiC7v4VJZ)62_>M5h2W$*mGX-;l6_Ikn^doi~lJONar=m&SlCDmTAe^tm@_Q9?qR
z3v(gAg3Vm~Iz7AY-L><^D_(W!?Rvpv87X&kF&Wn`KV0q7Mq0zw0#*h5^F|f4SD7bC
zGTj(itW>&J>gqfe8!@h}Du4N(-MeoEq$Zp+bsW{OoEGLT5CNipd8k72mU~%9jH5b_eUaccwVrKwEM_+-!%Nz4VXF*WqlivwtnD-@OR?mwx-`Ev
zT?Ag3d9GtqQ{>?Oic2o}doIm}rUehPUVaQIg{1>bI>qyQbB}I1dhCIV56>QW`!mly
zdV*a-0W7NoaFiL~tR%n;I4`lt<_WWcmI|;!8MPUTBvMk}V!c#C&`GBTlVotw#hlKS
zQ4vFLYW-zZ4wCS;Y^HX#8bRmAe<;d*4=O3H<*&jT8Xz!3|4Q_r=
z6hUUhpPA1C5&jdZ*tk?KAwfhsPF}3#tVp$3S|96?6*FgC|MH9eN~tUAR0d+BfP)32
zLe9z+)GJ@@{yLe_lJ3Gyz6@A9tVEWZ9niW66oC-)F9^tw6*9N7;u7WyY=DI6;JWYL
zxA)ITk=)q><~B6F`yevI1K{r?Pq_!soSV+(5fIUjzw&|?Y`ACDs#iQXv*Pku!cT?s
zikHg_i~?phS9Q&-tL5BDl{D)TP7QL)ynfO*x16;lh%86_d@|Fts<3I~=ac-}^m(tu
zYdOP80)pOH>l9d9r)U>aeFxQQUOiScgqlC8dp%9^`JvoK6GhH)QlANPj<{`}p|z=q
zqC2L_z|76%HktQa-#b88o`yajV6zx}I=T7i(f`gP58+=fnQBBp7}_Z#Z7{NDN({m%Wz2@P6%u+^5X|Fn_g6acCt^f4!DdKDszk@gGF*Yl-YnRhHH0NB^Bu*{*FAjou<
zJ^QT(9{3=s=IBAr3IbByMmk5zrAHG3Si}Q9SYF207ccRU@=$7{bJ@jPwq?D3zSC-x
z-s7raz+#qEUAb~4nVFd}ZOI3qckI|Pa_s0VIePS{1{BH5g|eBv`Snvy|7|(AesleP-pIu9S(R4sI&H-ktV`hqwhH*5ZI;=n
zscsBRi^OR+$4x2*2TM-Weif=EuZ#4P9lLkGFO?E*WW9g|)dsNmBmx%k0G7|9Diu4U
z#grnzO5c3h<$wLFjGxxa`Z-~W0ZU3*$&DfwFcerhv%b$w6v~=%2FwtFP>cO46ZzknhKwNf{c|y_|@t5lONckR$
zLWb%*r@(c9b)B#ScN1VO)VdlLu!aGsrq6<3n@TDxmz#d$yNcFsGJ
zBE;8G%Vq*{gp14ZPT=YW-4;4HI`4PZ%;db|dq-BixA-0chj7E_#~DDwT>T(z~4
zbuM2Uz{(~Suqblx5)xJ+?E(u6S^*Hi^zXNB*|JT60)QfKbjUYhU{_vcrC}aKSZ*vg
z<-sngUh6C?_ZXA!JhSQs`u$C`NV%@=IBxQ&`xR-IY`^cm8;L)W&nMK^q!^H)Xd@0!
zCmz7^@r^L4lr9ICkd*b>aQPTp00_@(RW*I~$GhE`{nJyY9ZuQQPrBXJPj)+J9_*xN
z92;EIBP>1bxg=dPxL@>Bk=XTGv=t?i}_O2v{e?!WxA(UofQ~W&=yWs}Qie
z5zj(}HE~V0aBVt5B`j_Q{wO}d4N3wUfb208_&`oe0hXbQWNDYGBc2W@qj93(HUm
z6JB!Rg|}aO`0$rM{KzABk#a2;jv&HNwEI0nzlWtbxETToL?_+xpr}QPqKeDGCBy=f
zI7&upzW2!nFtWDS>kV$tHhe#d$alOB+m_Aw3a}?CO6WUrz9^v2qQcV2P%0K`!sip|
zz2~0$TMx|4TY
z0A{wgwXh~GN?5mxCCE*j3IJ4xR5P(*bP-Rae4^cT>Zxaablv(79AoU%QWFAKM`j=E
ztwVu_QZluG#i(p7#Dz6zPy@Zlg08xylJiQ$hyx%sVQ};F=Hth=-}&%?eqfHfbBkp?WRP`;yY-ZZ5(
z@Z|(p1X)$7Co%;&D{OILZUyoW6@9IDY`X9RPjoux!BP?kSX$(703-?PkmHIRmnIuM
zBrfMWh5{_-BIeeXkQMinfij&OI9b{9a}i1xje7a9WA}aW;RAP)`n)Ud;jDUropBD3
z@6cL>0g)708Oy;Xgc3(|99+U70L<-o#>LMEfBE^O5rEUZY*6Tppw;Nx66tSp+liypvA2(2`@5VV|2
z!vY-K_0K%>54Zl}|L!N@MA4>+hJS`BBsc&PTC|hw5;79b?4DGYP?Bm5D(o51Cspa~
zx#6$q_yZOJK$LpiKA)^_r^Zzw9&4b)mF+n7^t1lx#pixZ15pO@ss;~LUX)A?c$C0I
z2y5vu`yA8#0U-zFZn=v%u$X3NXDbP&`f=8;0FnDObX6;-7if0v-M0@$6eXBsZ8DT0
zHz7Qn6)cKo%g8090S;@@T|!)A=;O4oT0?)i0v7eSd!bSu*fBaZk?v+3$d?7-?nbXy
zSZ}6mrJAHF0A=9#vM=u6|G|y3vxms=;b;hGJ`MMzX2DK!T0@gU?#QJz%+n>5$l{VD
z>S47W9gj=sE9LPK!F4WSO8l*?DxHu2`K%Xi{PgNGZ{b4ZMYuSx%0=*!q*DSc$2B>y
z(YaL#JT11Vfy^cF*vr8&r@(+^#$`Du<070pckOyFSy%!f_W)L%TQsRIAq`lR
z%fThY=`C1St%pc?vYY{nk^16jOavzlraB}3L{&!WL)L5_WUhYhQ!jYomVZC(^s5hc
zx@(lgm(g{ZFT+R_>gcS#vP$
z%seukuK7hLJ@a6vvu2jkm4}lRtB)kfnsVcd;u>13iW9$JpAWEt7S^@bygpOb+Sk7M
zUD!Q`Ekl=(wg9Y2b_uat=xc5=e@U4M11v(y`9PSnVu9Ts0}Uhok{?FG;p#fTYO{0G
z2J2&(W3^r6p;|)BHMFs~c!PViT+$lG(IuQOV3B}@1~o1CpQynWD)8L
z9fu!;MGc=fN`SSPX$^8zE7E}@Ta@bOtbJ*|V8szf1gtT(zA$)Aic5$I_y|^UM8KLr@Zv3iY8+fb3}SJ_5dmu%x|F`h
z!&+h|+9iwt6-NZDIOYv-5kTUIW1fS>QxHcSaYPHNWLrd|B91uXh!$2Hal{b;D~>qg
zh$8}49C5@EM+B@m;)o*xRvdA}5k~~9IO2#SjtE$B#1TgXtT^I`BaR4Ial{cv91*bM
zh$D^&SaHM=M;sBb;)o-TI3i%h5l0*oGX7tH0RUIjsjn*x@
Bc$xqJ
literal 0
HcmV?d00001
diff --git a/yggdrasil/y2r.sh b/yggdrasil/y2r.sh
new file mode 100644
index 0000000..97d1d0a
--- /dev/null
+++ b/yggdrasil/y2r.sh
@@ -0,0 +1,186 @@
+#!/bin/bash
+#
+# The script finds routers with a Yggdrasil IPv6
+# and mixes 30% of regular routers with them.
+#
+# If Yggdrasil < 25 then regular routers 25;
+#
+# Путь до папки netDb, которая будет скопирована
+netdb=/var/lib/i2pd/netDb
+# Путь до выходной папки
+outdb=/srv/pyseeder/transitoutput
+#
+###
+temp=/tmp/yggreseed
+success=/tmp/yggreseed.success
+padding=/tmp/yggreseed.padding
+minimum=25 # Минимальное количество роутеров с Ygg
+timestart=$(date '+%Y-%m-%d %H:%M:%S')
+###
+
+# Проверка рабочих директорий:
+echo -n $netdb...
+cd $netdb &> /dev/null
+if [[ $? != 0 ]]; then
+ echo "X"
+ exit 1
+else
+ echo "OK"
+fi
+ls
+
+echo -n $outdb...
+cd $outdb &> /dev/null
+if [[ $? != 0 ]]; then
+ echo "X"
+ exit 2
+else
+ echo "OK"
+fi
+ls
+
+# Очистка выходной директории
+echo "Clearing the output directory..."
+rm -r $outdb/* &> /dev/null
+
+maketemp () { # Создание временной папки первичной сортировки
+ echo "Creating temp directory..."
+ rm -r $temp &> /dev/null
+ mkdir $temp &> /dev/null
+ if [[ $? != 0 ]]; then
+ echo "Error. Exiting."
+ exit 3
+ fi
+}
+maketemp
+
+copy () { # Копирование базы роутера в первичную временную папку
+ echo "Copying the router base to the temp directory..."
+ cp -r $netdb/* $temp/ &> /dev/null
+ if [[ $? != 0 ]]; then
+ echo "Error. Exiting."
+ exit 4
+ fi
+}
+copy
+
+# Main section
+
+echo "Finding the Yggdrasil routers:"
+cd $temp
+yggaddr=0
+count=1
+
+for((;;)); do # Поиск Yggdrasil-роутеров и их копирование в выходную директорию
+ dir=$(ls -lh | head -n 2 | tail -n 1 | grep -o r.$)
+ if [[ $? != 0 ]]; then
+ break
+ fi
+
+ cd $dir
+ for((;;)); do
+ dat=$(ls -lh | head -n 2 | tail -n 1 | grep -E -w -o routerInfo.*.dat$)
+ if [[ $? != 0 ]]; then # Если файлов в папке не осталось, выходим и удаляем ее
+ cd $temp
+ rmdir $dir
+ break
+ fi
+
+ echo -n "[$count] "
+ echo -n "$dat ["
+ cat $dat | grep '=.[23]..:' &> /dev/null # Поиск host=200: или host=300:
+
+ if [[ $? == 0 ]]; then # Успех, забираем
+ echo "+]"
+ let yggaddr++
+ mkdir $outdb/$dir &> /dev/null
+ mv ./$dat $outdb/$dir
+ echo $dat >> $success
+ else # Не успех, удаляем
+ echo ".]"
+ rm ./$dat
+ fi
+ let count++
+ done
+done
+
+echo -e "\n================================================= YGGDRASIL *"
+cat $success
+rm $success
+echo -e "==========================================================="
+
+echo -e "Reseed building..."
+yggvolume=$(($yggaddr / 100 * 70)) # 70% ресида - Ygg-роутеры.
+echo -n "Need "
+if [[ $yggvolume < $minimum ]]; then # Если их меньше minimum, докладываем 25 роутеров обычных
+ echo -n "25 "
+ paddingcount=25
+else
+ paddingcount=$(($yggaddr / 100 * 30))
+ echo -n "$paddingcount "
+fi
+echo "regular routers"
+
+cd $temp
+maketemp
+copy
+echo -n "Padding status: "
+realpadding=0
+for((i=0; $i < $paddingcount; i++)); do
+
+ rand=$(( $RANDOM % 10 ))
+ for((j=0;$j!=$rand;j++)); do
+ cd $temp
+ dir=$(ls -lh | head -n 2 | tail -n 1 | grep -o r.$)
+ if [[ $? != 0 ]]; then
+ echo "Dir error! PADDING-RAND-FOR"
+ exit 5
+ fi
+ cd $dir
+ dat=$(ls -lh | head -n 2 | tail -n 1 | grep -E -w -o routerInfo.*.dat$)
+ if [[ $? != 0 ]]; then # Если файлов в папке не осталось, выходим и удаляем ее
+ cd $temp
+ rmdir $dir
+ else
+ rm ./$dat
+ fi
+ cd $temp
+ done
+
+ padselect () { # Дополнение ресида случайными роутерами
+ cd $temp
+ dir=$(ls -lh | head -n 2 | tail -n 1 | grep -o r.$)
+ if [[ $? != 0 ]]; then
+ echo "."
+ padselect
+ fi
+ cd $dir
+ dat=$(ls -lh | head -n 2 | tail -n 1 | grep -E -w -o routerInfo.*.dat$)
+ if [[ $? != 0 ]]; then # Если файлов в папке не осталось, выходим и удаляем ее
+ cd $temp
+ rmdir $dir
+ padselect
+ fi
+ }
+ padselect
+
+ mkdir $outdb/$dir &> /dev/null
+ mv ./$dat $outdb/$dir
+ echo $dat >> $padding
+ let realpadding++
+ echo -n "*"
+done
+
+echo -e "\n=================================================== PADDING *"
+cat $padding
+rm $padding
+echo -e "==========================================================="
+echo -e "\nstarted: $timestart\nfinished: $(date '+%Y-%m-%d %H:%M:%S')"
+echo -e "total routers: $count"
+echo -e "reseed build: $(($yggaddr+$realpadding)) ($yggaddr/$realpadding)\n"
+echo -e "Yggdrasil I2P reseed creator (c) GPLv3, acetone, 2021\n"
+
+# Update web page
+
+sed -i "s/>[0-9]\{1,1000\}>$yggaddr" /srv/pyseeder/output/seed.html
+echo "Web page updated"