From 3df2cd0402fa4c645d0b0410fb98f7ae20d324b9 Mon Sep 17 00:00:00 2001 From: "lei.ni@turbo-ai.com" Date: Tue, 10 Dec 2024 16:45:13 +0800 Subject: [PATCH 1/2] gpu monitor on dcgm doc Signed-off-by: lei.ni@turbo-ai.com --- docs/images/dcgm-gpuhook-architecture.png | Bin 0 -> 57841 bytes docs/images/dcgm-gpuhook-readwrite.png | Bin 0 -> 60057 bytes .../koordlet/20220615-qos-manager.md | 2 +- .../koordlet/20241210-GPU monitor on DCGM.md | 172 ++++++++++++++++++ 4 files changed, 173 insertions(+), 1 deletion(-) create mode 100644 docs/images/dcgm-gpuhook-architecture.png create mode 100644 docs/images/dcgm-gpuhook-readwrite.png create mode 100644 docs/proposals/koordlet/20241210-GPU monitor on DCGM.md diff --git a/docs/images/dcgm-gpuhook-architecture.png b/docs/images/dcgm-gpuhook-architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..7146c00c6937851e198e2f3f3204e5b05c29eb7d GIT binary patch literal 57841 zcmeFabzGI*_AiPc-AIE1(k(60Al)I|EV@*bkdj6^m!ybv_d-bt>2lE^prn)_-JFNe zt>V6W|8ef`-t#%HpO3z;to6(>#vEgOM?7;5UnnU^qN5O_z`($uOH18Xfq_A3f`PfN zf&>Trq|J3@5%|wF2Ng+Cn8F^?v%g$77m*i%fhh?`Ju-p^{?4r=rzTFoqzwG;ufG=N z=iS`gN{Wkxg@x}wZodDx>Hfo}`;VHL6@zXI*zp=>0bkI(j*$jDgY!g1LG={I@s$7V z>DjO6!u7zPCp$?J?!c$W52dsmU|`tapZ&f@2htvgf%!rseP2Y)S%2j?7(Dy7Cj(i* z6r_ItXmEn#_=J_Okp_e?35uahQ~i80bdQ!Ar{?)*e@Z5P=2Icx2-AH7Uo6o!v5#b? zz7g;rIfaoZeEBhsl_ik0u;k&+KAP$K_aA*$WETbdcF_7_ZCI@Pgb1}GX`wTu01u@# zV6vZ3QG&Se)dY2EeDed%u1%vNyo{jMQrdqQk5zg*0X~qGP*)TT5}9i<6>ST$z$dRW ze2AJGyUHY4fHRk<^cMRgE4csYu4S&;Rp_~)?;hHBqob^b+?`ENq zS?T{FpqM1zDCNWN>&Mp-s|)!~7@{9C{bpI;I-U#`AO8K3u(L;wF;9O!6dm}@;Dk2Z zw__I-FsZ_>?eaph#*?NsYUkVM#wC5<9Q{ynZ|0!r^u!3_imO&<0GOJSX<_E}vDgT6 zVwt}?`Q;ZC(GO1sJ>RqMh$!uQ00#Rh_Fcjd8;e?Dz7bj5IqNtdm77}d^4G(6A{J9O zj=cdlVeD6Jvcd;w2%pOk9oWgWaww*G{1o>faTn$Q#0&+69Z95F# zouX^w{qnG8Q%5#agAt1d)*({1TRq_1-)y9m2|b1xPDEd7CldyB^9*(ocjIT~rEjmZ zHT5iO7z7vp+_&ZmVu(tC%(9<%Tu8u$8hTpt{6npKYK!FqJG+HTg5+iOc`(+)qrXi~bL&f1&!qGiw@1?!Aq zA)#t@uIIt~h2MrHd{4Zib%Ai$!&aL6yN0rh@-!yshu44Xp)au`BWYS!{4m({T>{OB zA<GfEn!*X7ZB~bmQNW}iu0zIT2yONk8B5Q4t*(~hxsc69;Nz0Rq75X&1-?S=1qzi%qv3}waPY=appR($?L96FKB`WneR zLAdm5NHq%mKm$*S%_ zSiMvqc?;maFtKX{Kp;p)@6I{cL7*Q2jTmOJvPpfmSFKqpqc%Wh_G4nwB!tTx z@x(vOfTCb2_}Xfwe?i=}#b?J@*`A;X<_BeR!`!cfxmL=~gUk_3gn+2{-eT}|u~POa z%(tGt2@k4Mk4b>7l;{ddL5&!_^vE*ojodoT>2l<<$6E1jGFY|u(`CQZYKF^5@|q5} zMpy!27q#kawe?e)Sika^^!z@;)1~L?CDJ>{p~_Y*B`_*VsvZ74;DmP~R&a(hp$Rd879A=|*&3)m(IHf! z#e=&r+BmZ1?)eHIvXkiBZ7vaER2YMWTDiS2l*@)Qz+FKKdhiHc=UanHg?j|=PZlAw zDs;RvZa&x5_EeuthJl$VC@O5fGSX%Bb>+hh?P-3EqW>ZFN6n_&p-T>7PjYRa)`g~9 z6!dBp*=hZNFHCaWJeNm7>hAa(ZyXVC(wvg34hBs)qqy`kvo$<&*Vggr0@8+aYY8RG zH=0|8sR%OqfssNm1xDMe=s3~s3~i1dsQiiK1hhJX_hl-&@D@g4jTq)@0xluU9FAzi z0i98OTh97fKN%v}fy?Gm)R-bHJKH&AlL^xyZrZ%05pgL1@h!3=XImlj=`>}o@ky(6 zWv|9}A^$Mgq2k%`3txdry){4}7Ii%`i{XJu($o@oRE4Y43KqlHWhv*S9KsKttx#^N zHJzyXape=7!@AJ({NhiM^G?t5j=i5_Ep%3yR;dX*l9uGE@V8uwf7$i(!Mn61Ed#~o zWe&%Z*W$tFP>%^SnilhTdM5!dqDKRVuQ+6-^pknu4O=wXk=7sfpH|{8aA0v;W=>Mv zEUGm;$_f1kLT$iV$T=E6ke5@YiCKWUkw~}j7aB3<#8R(p{!rB;Np$Ol?4C;HY@<8} z_4ivpBJCVvA9y89C60!zTey;{`q|UqMXg3b)E`b_Yk5rm(Qbq{4EijpRjY}m@xo=# zpBb4WR-eRB%0udUkF#U+!^A9Pmnl+)Hmc;8B|Wie^=Nb?n~49V)#nh9Q_@SDwMgoN zEf=v#3_3Y)q3JSTcj6yrPi#Gs2IU0lxGSJOkcB?oqL=tZN@o@HPMn?ipQH+m((ZAI zRO!2K*M!~T3#fS|2mKK?<`CEWx$-@%4ZUollp5Ll1u%YyRKUfg@_1jY|83sA)J#)% z?69S2lwY1|;#zqjR0OcZ@Pj37>k%I+CV@p-j02kn8D&hUn`Mt@?&vG76}U^M8H>^z zL>Z~trX!)|vPn<~H$pzt{DJS~8QbXTgHaSw6^l|+PNMo@xjLM)@!C6T?YojfTy5!> zCTH7TXayh9vbEnDE0=k3&M~67_%Nx(rK|h z#UFEQqC=Kd)s!WHwHOW3amOo{o>J-S+&Z~P)r6k6fSlCqTU6U*Gsfhra%IhZueXuz zD*f0Q&djG+R{aJ=tls-PZpIM=NvZq8^;UbB2qz>%LD3FUBlRc!H*w96da<5OWh2MO z{}l5oJ*fWwGq14x% z<;OzW{Rawrwa#5%|C^!}SKQ=W}$zQ>iPrOVgW=;P~-FGb=!^{U-Tr7u8r->D(87Jj*ET{|h>h~R4jZeqx$=0`Z z4yBRv$dc_=$3AY0dygqm=p=L@{`vhITr2ty?WFdz!@p-`d-2svDJ3$j!;K+c3jdSq z&vNM1r(ogxW^n9c^m?*fE3K?J1CTQ}zRW-V#j*p}$};PrQwQEki>(1wb^#ucI>B6E z!H?q8vAtf~;beD8C;*SDUMk`;HT$P_{ilNer;qVZH|GbG{9_CMJ8fZ{?9&}|3J^a- zWAqa=cZQ!0y;6Vb*>~AUicq$#9HyUbKw@yj!kgRt(ye`2r9Yd8)|#TPf`itnZi=OJ z{A@Yq8zH-}{JH2Pkf+;=wkeVG<9(67=Pwxhv*D=KgtH;_pMLD|k`0bx7EuXX|Fy&2 zc*16g(Azk1&wLzFglk`NE?C{F4k1FK5PBZ84x8N6-b@ZTZur1-U=oYPj)bHr?i>}C zs+cil+9iy%e@)Go;47&D4MNE(CX3levOM1i5n<;`j*nSP5JcNBU*E0~UUX*3YXzCY=lS~YoR3Q&5ncDq zy3h)AjoqxTjP`=hU$@Dg`gOB7Gf&%5{wrEQTN#;e zq9`FO*QnBEhM3!${KN~uINC+R1GNLa7PMzOmuQLl1cUa5&&UoULD^T^>SP&oK67Ng zeE)8b!>2mgTSi=an|w(_MfIL}+_Sf+J~v?y{fgCJM{iu9DQh2Zk{p`xIGJwOo61$k z4z87S>XkNP?pIulR!%2|sP;0Z`Hu9So~J#IOwj{^3j#~1hGPfx>9uz}%N|U|3XqYl zM8bQ-Yp2+YWB72b#GHkktrZQ)>mb&unoWD}HjOI??Z`*h0L>*oI@E2Y?h1cCu~hba zm+=r6bGzjJkPh2vTFQF~(BVf%*~in8PnVPpU^s^4(}%wy&m(*G%gfGuZ@8sZ>|ZOm zmGhHSGcg$L8X(?J*D5yB>p;_x@A=4KJ_Qzrm6%}X z(P6H+s;X_+3rFVhoa9}A+UB5bdVe9patP=xXNmuW(!b){*U_nP-S&;-r0@30AW2Fq zP32rcgi?g*TW7KKw|G|R!*Hh%MbvaB)OQr!F%K~4qNDY5+RLF6y~NM)3+6T8ws=fX zw?C`TGPvegW9mUv`PS3wU^4Sk#KvgXstAmVYG=ZYGv@XT!=5^Z^NyS$fD)p^>!&)cmF5)ULee9U0zILv&a7i{O4CJTw{26C_l(JQFD} z8qBgb)z+@V(DAt8j#nh_-_&gICfyHqnPhPTq4-<_bFGT(ilRgDrU#)Ny>&{jC1?}I zGfX~&e$3-4rQ4W{rjo=m)t)IaP&{5<5?JgCxZ;L`m=G{-M?+H=-13`5;E@9Gj$uSR7i%( zbH|g>QdT(tdBJz?1o3FV>eS)Xnjb=N>)K?nL;Vm7i@UCgZCQ(@rL|Nvp;(T)c$YAGxnS>vi9qSM-n^()h3kNj zykXN+qEmsj{wlM!QK_t)TT^tQa|bJKo`mX8+hl+;-1Y^&m`|)vGY{(kb{i847Q`}Mx*N=0@cTr=osfXYxYYzz9h@UgP zI#GXqGN&~Vmy!Fh(NV&sAbC%jtZ&guVsT^CaYvqvB!g7D&DTI$s#MYa=-yc@|07ed z6cI=A8s5$qpIlyR-xUg8pwH-5K}|NsN8+eC`AkN$N8*@g3p*J-Hbv>#cqcKY(SgKe~aKz#0Pq7erl%gKjIagW5wK7NU^s z%KCdUapLhXYm4Y}l*ijyA%B~0{U@MYUA$>Z^}dA>F|toER#z56q`u+WkX zZN7~(K`ix8bUGQG1dwRNS`e;-g;CjFK^ynqQ7YY!yiq214B1aSUn8Wag;U#K)O@*Z zn5pYI$V;nS#8y%W4z~fv2n~l6s}%)4LjGnf?^??o5iDw^LZKVXNn?w zRb2EWr@R1EM$x^-kxNJv#)PHquHJYYRb=t$y&$TcJ7*N+tE9x+`v;FXuBhux9N&v! zF}>Q8g7o_Frvni7Rj_Acy=F{dUU&UTorkN;9ezHI9=q2iI?AH<#)-HQ=kW^~RsKqxG62fXz z?9HS;*+2P=b84XiMB^T^=^$LSy0PdA^U;~-Whj#*ew+_Rfl* zw4?hK51h@cSpzK|Xhls~w%09e$@^q*rs27mQ|c4G+!OyAP3!t`N&vfEsd}ppOg)+q zGSn(OR7^1=v#7gwlb~l#je23zDt6RL(q#Zq?f9dw|C9X<$Hw?Yhrzao78I^I$qED? zY3k9g#$;?SyW0c0nh#9A4!k3rbHv{b1ChBtVJ45RTsZVFy+&uyhBAe$wmoIlRPG4 zY}3@^tK1@5-Gv7YRNbrGOqai}pXpQdcEs$sYlQsL%!5gpFzEWWdT^! zQ2pEeVV#*(u+c|R*uZWyLc`c(7XMup8R;>jtX_H@^&s<+kbe4JQx+{IKJ57Ex%5l< z*y{xmdZ#}?!JmvNkKZYA2Hh=vZ*#zuUglF?@bj9S>0SzX^iZPFP=e)2AFv65Cgzy;CzlGm-_~ zorONnk#=<+UO-BBcAv~1v$e^5bi13_n{qW?Hou?fbB8s`s3NocEdYTS+|gdO%tLK~ zgbLoK6@!uJ1F4qbJ>ay0JhHTPa3pEV@<4INcbe+6eEXN8aF_C>_!_8b5*Z!-=Y7}8 z6jy>f%LF~rlX8n+36hzGrU|aA)W3~ojbSn9Ow!qOO-}fjC>D%07IH+8gi1;*9U$m& z^J?is35)KVRjL{3Z)N3+wY~3~F|Xpz)~pV;xxQlqeTBySEP`-gBmcm{cCcOc`U;Bk1%2UG_Zwkrm35mJ4*geCyyCtd}9`zDjk-U=n zQ&EIOE)VUK)U>SWyHfGi=S+d)M0@4L_!MDpaxc1V~ofx0IzElAnyv%?Z$Ii6(>zG-p!|*im}8`ec7~NQ@+vK*CHI zH+cyEYlr%^xu?)$gV|eOrU!7kByzixYidVTh`GBLtc_Xs(V$gEt8)VExYV<|2E>$j z?XKO!wn1+ht?%ASQC4^m-(j6Aumoqn-NdcOpjTIOle4}z8%UAMg)O#uvAzwn9(xFX z^7~ZKD*=5SevR$k(_3k4_KRd_p{`ID zv_!b?Xj)DFXo}D%vkU^Wkea#z&$W8^jI~DPvr4JW=726ei@eCOY~xj=v+Bkj5hf3f zKzotx@)A|OjCLgThs;*TI9GJt*aqJ;k&nvoRny>hpHZQ1bq3SBW5p@7oKzgMFlbnf zWMU67j9N@s*&5hZ_WRiQ*C!n8f>Va@TD3J<8p|KuB;7w}oRpsQ&vlL?f9zYxJp*c* z;2xglo)tO&EFIfBQBLmHzZb5-UoEQcPa{Ja()qEK*mU3)Kg|u=5vg|)@@nc^pv3GVm6s@vif)2!JzPF3=zhLNI4cuB#jPsb7Reyyc`fwO5yq)U_hU5J zZyBW;ie~hDHPVSOJOKujUU8#r`W8U zcJgdrrvz9mxb0mi=N9Z6%bV70Q5x>J(6^H)S3|G}gYye4dq4i$1yA8eCmlOE<5vtZ zW7Yfx-SKh8i;o%B+%q-_OT(f}6W(!u4sCd19ZbDHM?0#xIuHir`Kf{k)4sG5j=V0z zy|UlEEFWz=QR<0=#}G>i&dP{;MMFv2vJW81V4b{M2X&dW5%|7SsW*Sp#+Jc1oU0^NWy&Ud!kXLRVU^_w_%iP{8&*nw z&B$iRNc1mdOTPQ9+E$`j&+X&!b>Q9-P7y?X z!K{C3MWH3!z2Q1o9pU#f55Z6kA{oAtJ zBH=~zdcTx+fahN)gfu$5O(%m~Rcm9$Xy55A;r)ZxiYcnozJUM8$%`s6AS<;=v{kpm z5^8Uev&9T=;JnFrOKXkvj88!j9QCxce~)=S8&mlBfOPT=Ogd23`LLyg;55d;b)`}l z@!|CB0&(ylZtD}~Rr~c44t*W*nB7lWNAEtQa-tO6Sdu2gAa*9?>c_soC%0_(1Bsgs z$aADBAIVAFT3fQH!?dE61=Hyy_*k){1e6?OT8t0> z8FkZMO0e+RDQT&0zd~Pho2YW^EY|mUH^)x)X`ha#qgo3c5P;H}NUWsOfobH~^oPpS zMZ4EL?k92$K$-<~zUF2G$v0_T1`oh2DYXPAwqppGAEqOAZ%x%8NK%B z+TeQt1fNN&*vRj_SBv8}lHD8$PcyjikoH20>r9`QKh-A;^ZZ%g`3C#Q`YdbJ2@YaV z$k?rdE7Aiy^Lvrw8RjPP)yWd_sqNoYiEuX!MKCB0<=l&p)H+3e##KgBgbft2W*j{u zRJ7@x0UtP~sY?aS)iPZ+Csj%tcyMBC)7p^&0N8scfbh2-IhI8_ouyQn4mC338@F-0 z_=QE`3?jqI1E$Z%$6Lg9&&WL3}73Ij3&Ld>~#Agy>w z2`0q5TPjSx#hb4L;Y1t+;eNttnpbjy`TgC>8X|#YEN-Flm#UivjA;GJtKh+O=NQI} z&K{OE8q|RRV^jCZh{_F?57*q$KI_fX&^--8aAR-)#~caE}p@+s)CX5@N~ zjxId6V~61eti&cesy{&poosHITEcjI-Bh?+%`;YWZ8>I-Q8PUwb1V%oT}f9k_8P(> zi=fHPi`@i$d`1WsN46wORUsU_e7C$ z5U+rms#@`X`O=33a9(o_9n z*E1k-l&DOFy`zr^L+pWI3MC7I>hhJj{^_Zd!*lKi>tM#W*?t6PsPODTMg{nOdT$3s z2_Ws{VN_*lK7_gDrdE>#(=1F4o5dzVje=BWOy*e5O+c?g32Vu-*B2oRFPx5RaCI2v zU!8RVi`#RYwXgN}gK#lS4g7q_eU4G)qESKDS<$)ZKM++-;6!zon#H9u zZR9g{%YBD^dPgCJ5`sK^zmf|VqR9{8fm+}D0ErQt8rak()YC(bL9Fi)J+TBzq2Meq zktwNG^GVyIm?Gc!w063CTBAD}{d@ojo*%%tc-3D|_D*7r?*&Q1GD=n9r0e*&ofiIx zfB6tg@z&@BHDu%2dsl-E^`2Xi@x`m`n^`e&Cl(LrnkSqqW>3H4T6Po1o@utV=RPgt z#14PjE+~%`D#9CpU+OgsUb6hO#YyDXls%c0_?PlF!ZB+0b%rKHQro*iFr}oK-R~%f z8P9>}*~)B=rMm^%$`%x(SZY$&H#ZZ&+@htfl(qHJfAIh|*eGnyMKE$6(afD?H zr;PzO$A6-mYrEak|2^@;6HX#=+Fvk#|VOB4=KtO?T+;Kbkml%82;dP#gu?GzrX%+hb2%QR_UL8#+(=f%g511jg~zgE6nDd;w-0X?AA9NEP( z5$(=5nC{$>)R1=Tn`|LB-jut|a^2U*prV-o%1C|Bk-@X%S9m@=*@c>yLQl}6671jW zDp(%TR|lbzRb#5WC6G;%woY1TF~7NbwYa;9ZBZCWev8rBg_RLA^MHv{=XOraZ2U;= z`{&t+)ryr`T|SQ}TNcYqt;2cBxkzUdWe75PHUlj!75&Hj8$V<6=5woiKIssGa>zg^ zX-YWY(|jpW@5`j{L~S}#bk>cr66W|!U3ow93C~qalv|ogw_6&9VUTaiPOCQS-O^+m z5?^%<$#_~S_9Fi?j1*_|7y6IWb;x*{moclOu2tke8bFkxZ%hKZr5pNTjSB)~+HL7Y z%$G88P)JK#Q#n&TS7Gm@v4G^C;AXGTcag55fYm=+ z(1DPMtX2#&d%@jI`aIUo$~w{!gI#w@j$-_*%1m$JW8H8MiF7}bcW1Sw#T0L#`_cxx zxwt7ojoGR$FY%bvETy5r{Y zVP|*nu@9+)@!R7>3jA?LQg|`mbU42c<9mioZO^rb?k>T-IDlhk;LPl#U7HJZpWICK zyFSg8m9KPZvW*;QiDK@5ZA>uFvV0YYA|_^_mSAEl=hS>dVekwNJc^bW2fQH0Tfapl zBPNI|OJu+C$gAK%N(@tfy@(w>4doVL>ud#gCq~Px#5Mn{c0H9=JdNf5qnB6rTNif3rG zJz-s&e*@Hz*wxc4l{;OV-bt#|w9U0|dN8eGE_92tjVKxwo%LiN>I!*(rd=s=eVtq~ zFpy-U1Ym>R1>F9U;KS(=M3Igad@e(P8Ko{L09(+{4^N}%K#)93-mJl*QC36!MNPon zD6;ki2k9Vmg!r@wT_p~Q)s0uTB>f3Z)f-6Mb5trL3qA{B+SB51+VDZ0?Rq8gEtA$? z5zi!TX<4vEy&ru$NAOwV&xEN>UK-?`so7uwT?lCd0($jgN5fns_{1j0b+j^(IE{98rCjB?#&*sQ1z>jiI&b^Lo0X3X+<=35D+oBE7 zN`LE6pv=I4Ar*~_jrI7~>wng(x-s`@at+<#{P^}@=ZnUN?TA=%1WE3Q`?%{1W& z3(Ck~&FZ9dgL5GIQV#pyWE44FtP<*mv8tgol{Z_uwR~WC^5TW>Z9fwGbW%*86e39L zre2E1V)J`JtQMQeZqC~&)P#x~lxUxj@Ld;naMoz816@`hkI$~vYEDYw zGjhf{uPs)_=Nr9_TQu?SF)^2(g1bBBR1P!_C{g7ydu2x24ED#`gsNRf75&2{loJr! z>(;K=z^7;U|>3HfqZR?zH#=D~!eZ-L`exB^dlhp!C z(NSFKv$A-)Q7txb@RNRr!EQ6~%}QhrcjU`~H+qKOHC#WmJp_5(UEEagQ1knk5|S>& zYk-!cpLXktpL4Z?a5iF?F&`!e?cS@kSOrIb1$A;Yc&K2iV$@Fgw?N@0S=+FrOQw2#cNLIRQHT(JCBpmCoq$*=X9sK@j;U+!BQ9nIo{}-%O)5KyxM~9Q(mcpJS+Qcw-s7taAF_N3K2@%kNI<0 z^W`{Pfp49tPAXj}_i^2r93Q zb4Nhjo^!lX^~%4uKPEY--x0FZOrI$2N?D(p0oUsegB?#+Ja6dTJY1-#?)g;AJh))q z>{>eQnfHCvLT$E^x;#TT`Xka6wIwseSc=$6ShexS;!qa8PGJ7{x)*zn2;vPd{azuG zNFBdbr6sX6HYDr=we^w-%2Jl`HN0nAreZs4iKd7qC=!Dl>}^MLN#tqY3%DHTp^l|< zLVzH*Uqp}0OZtgV7063$WQL0p59?gXldm4mttX?0l@Z4ovki^ng2Ba>w$7v0-r|+G z2PI06YcLSKIaK@seJ&%ch5$U-k^Ppiix@5Y9SXeK5DWU~qjWNu9*h>`3YsWl0JW(Go@@jdCJawEBmj$$%gyZYg zo0g15v>3)4yo->|Q#(0)dwLrXU)DOjmvg68?|F}2re=-rzp|_xn2x6j__zlMJB=Mm z^d{O&Mrpl7+HSQC4~dKyT%Kx97uj9YdO;vx-&>3)Ut%;Ap`yvax`df05R7jNo|%JV z&$l9&FYnZV_}p-*@H~r0q_U+MN7*uodmt+LgST)T?iY2+Z-@W>vQfO*FdG{S+dP|m z+w55lINL#j1c9_jen#4Nr4^0lkBhcqp}TKJZabzJB_4y&6E*bwSly&~^k@aj6@w8$ zN)tGTWu3zipNd_VbB*D5LvSTCw)T%(5GgGOT9e=I)nWe^`a-^A(7T)3Y*m@ReqayP z+j}gyY3eo>wK18@tvjn&nS#$T>XMZunO1spz{^2i0`5vZf7N^cIa+^qBjn;B>OYqe z&aTXypIrRs`o`Jypa1_{crhXtZFBzRxWK=z0R2QRe@i5a8RcKz!i7Kh^9~M4CWUW^ zW_v3H>X7`%ldLn5J}QNyjBJ7uR_%yH7txGyQGp z%Q;UTz%?T;tPQyAA1U(Xw5Iw$FFIY0eVPL92$B09!TdbXdpSR9?av!cms6m2|GZQ6 z=QyeD8=p@1$=u0(NvCD^<$t>^Hn^T~M1%ix?i4z3)pt+D*s4wfw_!T5eV5JwpBp_|t zbKZ~*SU5(pp#Z@fz}TX4g$ohtbj?aB(*eF{@teVx$r0z0y1nZHNlKB_#V9fbGWXx3 z$OD#_-+LV29u~pvMxUaIrIYzo^dCn5+0lP&^#3Mj8mEQd9rhQ*H`Jz056z-KMfeRT zfcvxRGnO6o*M7qp;HvGQbHaxG`(JSixRndydX;%Z@*Bzs4Zj#%Tgh`T}nO6z`J?5Ka=uWJSX|4n}R{q&p7JM9eWiAmNG*6?mCOlHQ1hI`XBSST|e{}XQIGv ziV?z8baLtR17zmy?vGVmB8QlGS3ii7ZU|aZNx|FvXp?R9aed9-18n8rX40JJk4`pm zLeTOh{_N?Q7$I~;r?Wl!K}{2#gdjf^8X}Y!8>HIVt<+le^m{TdG^mUtF?4W&$HO|%$`36+cM&T{6l5+JyQB0l8j7=Rt)e3%T}4m;JvC5wu?tPH8hMM{ zrh7yVj^Kfd6+*>)7;iu&)waqnygz$8aP{?PntD0%Ir9w?ePzF(Dvm=gb?Xvf_E84? zVb=qHw%QvT#;-Tbjp90`b8k>351tCwoqiFZsuj>^zj3S44@j8KJy82p$imf4l|%kFf|iB?Io<2mar!t5j7Rc+b` zzK+am7Pry<5NlkyVFH@hJ}m`N$zD42uc^gZA0+0sQ@#@~ctcdP$s?K{SsGS`J%TDD z+h5$rtqJ9fHVILd8#{6Hj--{QbnUnh@~J4O*k5PGw*tn8kCf#I(1txtPwFD7vGt58@15&HgMgH@CyY zl~L}8AU}KH_Rc>RSD#LuvD=ra6=_O@HCF1j{Xdu7zkB086-N|w*P(FwhgY8rey~-0c~cA7yC@n?S|*{iFRYnA}73NA4P|s-TN1~AfAN#(%CiZ z9)*lkwo%y;RpUoVhUXCBj!%m-HdErwjYs8>{D(k)ux_>Gl>;~r_>9>iB>Nf zKdoOLpqoft>4Jhem(n6=`7G((rV~OaL60ODQbOQMZW4SNHgJ#sbl5SMDQ^fM*e+q- z5k2AJ2IC;IPD0ec&cRGo@pgT`-hNtt`gb+-PEx5hzzm{+%yY)OdO=ruw1`T_YW!=q z5vpY}mNC)!!;jVU?Rule(wRAZw|06|39Lst$VT=ToJE-^V-;JxM=;O|&5RPeb`@#g zKthAL^2^U~7tSYE2u@6oJ6>9a=$4#a6#sT12cOjlN|%@K3fcofA{1l3J8z?&RC?a$ zRSzEKT+`1t>J&mpqQJg*Zb*&RMvEbx`*@}bD=R0sJq!RL^qc@uIo)j(*wgBiW zf~J0ghW1oTC7Pyul|H>X;>4F~LQl>SfILgX?2UFMtntVOaYy&8$Hk`8o)I6?roL3g z4H-2UAW+W6ee6hiUczGULWdg_)xHiWiD^*z+y(dFYtBVSl0ztcg6rkQJ{}<0O6$4S z`p0HE(|i%~U=ay4D&L?r%R`_ZS=;5*#*(4fOLh}+071t3`l4uNTbkbMri+rD0>TF z1J_G#66>}%Sx!$7>yv5MSja5XDQvsIaWUCUr(m(W3K9UYqq{HEYxt6DQEHKhn44vaIN8pe|=)K7)I5G6##vvxJ#myWft++28 zr!EN9`JOCOC#T7&<<6n!3$&AcL8hQaU`##Vq6=n38zAdm9M9qeC(Oy8P@?o^(*>B@g zdvj3JA2TH8vyp2gW>;D4OHE~5v*DTak;VQ+z?lPub7=2_NCQ_#KFic5Wa_o|Sn7>y zHYGgX)@%Akw##tJ)_ntqLw{eW$KqwB8ZhvQYPOZAz>OWFdFM;Rgs0Bu6i<2d>SIl$ z)l;_A8&NaD`{qQerBvkf_gBeMmFw(IgUg_U#Q2`xil@FTp+~BG6s!`ADIstr+c$J| zns7vy&I-gdJ@6YkwQ@fmRgw$``if*cqy|D>ZE??4img~dPre(lV zsCvuh66~Dy27_2%YBfbw^mRVF=)mb@ZsXh~V#Y&?$I(@(Ek3{41C&L?;Cw&*q05`* z>;*61w_D^0x5a#pTJjS(8#^@JX*yI4V%{pfY_EYWYp*Lv$ij9gth5e#oxPfW=PzHvO5=`ADPlo(vNlOZM-yvc3Oc2P6r;Mxe&Jd^wgU zen|E+NKNFAy(^{ce2$v?JGor)-#OwKjWm4^Klr=!53qjUp!k(G_Rro+rnMJShnV}% zRK*Y&LEk_<_|vlF96>}6MYez60KEIZ?-31ODcalDf9M0{Hb~~7^mgO<#RH&hioU6Z zpsQ4ye|dz_RGZZ+S{WYupKbad*e2FqV2t}oKS4z05iRrS*G^%eHF)L_{|_dyK4*l^ zhnD%Y6!+hlvB9mO;wGTSAnWyu)BR#o|L-qwHlF3&X|uhh80$|@Vuiwv4-OA^$!rTYx4lj9{y&;?`K@}f7yHI}T&JXX8HTKKP7H7-RM7+-BZl8|YS25~KY>mD zvn3ZuYBwQZ2=c3uk*I;_*eBsm#vACfic(A7qInrkm!5%+JA82eadiA2{=e%Ai6!E zyg|?kRldD7FO^Mu)gmVupJeSL8 zh%I39JzaD~CZgibH)8z=yy5$|06CPV+w{%TGX)%)ZHqdetu?h8i{l7)^MGlEYem_s zYWu_#y*l+L%vK`6M{#l!xjMA!KKqhgecj6UKKgh7>Z z2;O(qY_j|MGerJ7uA7LtPhJ*a$fL7oS4+mQ01jI;2)LP(?P%~_b(XAKHT}8YIVw7?}P(Z5dC z8b*K2R>%1i3@5f3pm?oOu6w`#=GEY-9X=D(@4-KIzy}+(Ln2s+USl;fEY_SC%eCVF zuRN=?IzZ{xe4IT*0f{Wg?&$dVa61v!@5%mBqydlf%i8vuv0QsRZ*=RC;EQ2amuNX; z0w#v=S9fhc`&Ada&($jN(!2^LV`AWdOH{HWyR;RDtSw79;Z&VRjkup79Yn(4tIZ(pvGDQ0~wP8v>U7pz7M(iXoYcmI_ zbZ^cpvoZg96`Sh7eLox6QX=E~!6s|g8CiaP9|QReR6f7#n?nw{rV59FK3 zm<-}5_`U=*CpzU=b*K^gNs4=#M6Bv!Am({8ocntFZdZ;nx^+r8 zog1`Iy(trQnl)*B#z#qlCXG0V@k~dl0!OF0f74r7bn(`t5-{NN zSV4l~8w42oj`rQy)pa%GPrFM~3z#*-kvq^A>mruXBZmZ3M-&R>8@Z;BpATlcs2xzW z{}+4j84hRH{S9Af5?u&_goqwBYNCedy?0^sE;?a|V6^Cr7Ln+pjhYA{j9z1Og6Pqs zGunG1L6Yl!|Icx}?{hpKp8F$np8H&T?X`ZZ?6ubpO{pc_DouB!rAzW~1Wg$R9;xyA{i$Rw;4 zt>PCsxuH2A+w;!wFyAd|>OEAQB(BL^fxf!$Xc8rRqNOlL7-TWb`nU_|sr3pe`q4|& z2dkSTpIITv0mk@9DJRD%eL429Xe+b~6qv)>gf5sf~ulKGdV z2I!l=R0gDspkpEm~Juv~QLXyB5E0by# zA_$}5Uw9_I5Yae+!H5~%Z5ti&HQ^@y!S{n_y#49+f5)PL`&>(kYfB!POkvTXmG+i}pFVhvSXFbC zooV8ncLyk3A8dP~jGqErXO`vPdh<}jO)k-<*cDz`$EV<7fH_1yeB3klXJqu{*$v!X z8yR?=Fmd3Q53ew+khq`ae7cz?_Zk&7$H@plhJ)sIdlA2R!sTuc6yTB{%`!nL_XDXr z2nQ=bqY+mYgjcmk)1Ci~a$0)Ns_k9b>gZdf7$ZGdsugCvJ&NngZcu@@FM=7@h&kPT z6545i8Sv~8TNuV#vv5PY4QEjhhh_1LsNDP#jlc0y z1GoWVZ^P4f|NTX$cb5=No+dj_7!YF$&(!`zVA`o@E-e#nc)I6Hrt6r^0VY{hA_Ks+ zHh;)#YPi5|e)U1yykd)S2Baz!vx)q-7fQ+c#koOq$>p_%N(^i)`ZT~>G_M|o#xFZe__?185Ll* z=IZXRiT9VDvv=QX8eI;Vz}8PwBI6o=zg6DdVT|^_G(!KnK|dT@Kjp4c>pOfCUa`GR zWTIA7^&sV62J5c`(w2NaNTG&0DP2-&fcu`!isJ5_UgBwvoF%aX5RKmd%(%Cj@MIqu zw|8}P{9It?My)h|8GcakD5v3Y1<>2QJW&4*r{=Me3eK1;;pb|!I#5lW6-PKaxyPOs=YGCD3NR>VTrt$y61mxj! zo>nkzHi#Vu@@27lKjfi4&%Og!VU#mi*6$Tg2J+wgloG{e_->ftZGF@>kR;vF|CANwds&4<-+Dg*ALch0@vXQqZ^`j_XHhq%)Sn4BpA>RK zr?b$}LjBKt_}yEW*B!vHFGfm++Y`LWV;xKp*^ zWq7pRd%QvQ#}Woe9dsP-VGH=@{w$*Xn{P}5=IS0eT0aYa|6V8F!f4puozg&{R2ZlM z{+op^mpK@K@xPrE>Ha-FmLO^iw!Xy)g_WOx;yd$m8&8Q3ge{IfUw=|}41Av8+=h$n z-dn2Q1~1qXIMf9{4LY~ugy>Jb~I@Bk1pV9(W?Z5uDqTp;>Y{p2W*vlc@c1xYu#$ za(GAe+_qEzk2EGgs?<+r7E(YM$L@CmHOVI>&jDQ0M>7dJ{n;k$N9^}|zsjU*NfaI;)J)zqrrc!f8^~85;X?NEvIZDy9WqBlKAPoeHZ|)8J+SRyXS~& z!lzslf&xpz`m0KO9AbXNbN!==fTOz5@L(ZeaH-S5Ne=Q44YrdGJFkB3wqE(gT28bh zftERaO3sDsxSXO=dwPmGy2^PxsTc3`3wR@b+(4l{Q1k9uCXoi2x>|txi|H$<%a3oL z%(~)h>gN36-W^V0nkPl^{A1wEi4&EHN$5TjU=rZZlPdb8AN<`vscDfpn!mrysSN%` z3@~}JTG3Nx&{SYMo=kPkj#;k62O#GDzY@~|XNFq?`tmQNs2@-Er0~D?{D64q$Fn&p z)Zg~mdK+@G-cPLcPp0xOv@;wNbW*WDex6eSzQ^yM90hQ%*_8*x;po@_Ggra!+kuD~FC0sjWM|KC64 zrV+a!3w-q$!GYn5J#c@St(F=?XW)+$)aNBl-#DfF2?2FE@W%;nCs$Z9OM-TcZcLPPnw zhqY}yZd;zw2bLHABLyT20i50O3W$9g_A9HbDq^&UrrA`l^(^!>1%9z@$p}=)1N?Df zb}GH1VvyKli4KRs7TxOYkZWY>BoreJzav|Ib(CDhl*cme>usM>j_x~gjj`S zCQ4)SJLD>_{IA=Pw9D+f1eRo7`D_D^M2&$l}A^Q?VrckRFrC|m(8}G)Kr>? zh?@LIA};_1+7Y@pu8|dq8Zo|82D(CU@lelVVJe`+u&VQi7-L&biS27#kMM6kr|VC0XE8mCb2nB62d;^fWpi4I zL1DSng(Ujrj&#(%_7KV?O1ryP*NIgn{)6V1L(|0d$gX#W5Rn;b6X?4b^xZ&HI&7#0 zVzz(zm+F`Z*+=a?cFDL4eDLzw2X9#PD{jiX>wcN}UjJSjAW6Sw#D_=DXhj#QOZkBO zm!$2WD8kd@N>>B2Q;oq4dTvH9Dy|u0x)J}9ayIfN*$AbGukv1%Yq$V)CTG-z`Mm1Q zzRF>_=WIzZ+tXladtX49Z-Iq25(ly#cb>m4fUhAAOvj;$4~|X{U4FrHxKNsFHK;ZzUbB?;2hl)XoL% z^jVy$3m;ylYNR>P7CJsk{>28e`n3lPOCmf|1+l z>iw1e{ONU<%NQ*I)Hr)j{vKD_qQDL`_EyQYs*9x>pQwwSsgQ!X5XR^?Hu5zGgy8KvjL1gfO{P=IeJ0b`50&|Chc$sc zfz^Cm01kss->gm}E?wU;M5KoHpa#yqK7-_?xUh<-;|1iqDw)r(YN37}wMe?n`-L<; zDNxLwjl?Gtm$F~zLZ0zTn2tFb_nT;%#sD|4jd1F@kG_e@rYDoB7(lXJGV5xXyIgp) z3yFG4r*PKSs8X~7IzWtC&ZJcwMb@Gp`%vg{*=Q+#*A|4KzS!g9srV^KI+ZfWutXod zw0rha6zh)+U|#PH5d=N3G}P3%^I9=(j@iPDd+Qwc?q8A$WJ)tiQ-+J0ePX>Zr+r>s z0~8A*IROpAI2-;3+tc;8b3uL1X3^&AL@T6pU-3A%0Bqab^AD)NFa~1HtVF-oMePh#8~}HDokH0BougXjnUn zYkopJ7p;k2RDx|0qg2s|r{`P$p7)s2Z#tSey>0?Dd_JWiDk8Bsx>EI<2%VXgi~^=s z{PSaRK8Yz-F(u8wk0TtqLp*aqa!qEMqs>ZDACMozJzdDDa*A317$_?0z)3 zUcfCFPkG^7MC0x)i5W!P?eNXMM@>}rUbj`qVRCWhb?I@`FO7dJmAEoeJGtLxC{V%* z*u4ehzTX%;{s1DmWnWbh?9 z7z&g4`>6d7r_KG&1yz-TC6FG53Ih+ufBMnzt1zKGu)}#>9>K=x{HvGF#ieWt(oUUz z@0hnmUcgV+=IMIOKLYOZqeRb~{W+M*J?FiFg5|E~&mt)eOVxdwmx=Wu3E@ z?L`@PAP)W}_-l9EZ_~Ywc-q|7+FPtKL#~3pw1b1kFD%SIfp(N6;<5vsz zZbDgd$-e#lGZ~pSqZUPRP!2}E;BCTYfrbg4X+qS9d(uvhr1|cOR|>%HPtmgy=@Nn0 z$Ao}WgOx4u!)TcoGzdn#xI5JNv%LEG1wO<#U=9jGAzN=ku&0v7caDw|Nnlc!pFN;q zZX!toob`5er#-xZrQN#+J)JLq*7JVuYk9`2goDz(5W=@1cvDH$UMb&z6eVcMcUjH8EIHWF)&+0Q zMd1LI_ruWXdEtai0y!O*)Y58%$pBbACgO56&u zz4O}&9&EDOy}VmO2~C4P?snTIyDR=v;E1c;_Fb8EV9Y3ULVPFpf$hVcA8gh#OA85DyeR=$~j~1z3xbG>!kD?p{fDj{xS1%A~{{FlLoGA+ZzeV*3zz zJiv2+2EwVxTeZDXPs0ILG@%3Rd>u9FPZFb0ac@vq)lcnh2+33=Ms2Um(>R30<^0FD z)tYVK!7bCre7GFDF!w=$zv+?X@MUMIMd{f|On?zbPlUE;ezrEfq(M63%k2>*r--8^ zP@VSjrxI|DHB9vZLdeFW01U9Lz%LK^gD|7ZJ{tx3B~(1tHgFYKy|B0q2;_Rsb) zZgxi}!u5g2S5n<^f%5?$d~)hvG&@hR0$Oyv0?SdGE=l-K>CdJzI%TcEp}p%lp!pBL zAdh|xvTGN|fqs@?{W&!7Utnk;44gl)X=jaT7%o*|lw(CN6W0E0l5=p{PUh?(9HA*5 zl!BjKajJgxl3D!l?V!ph%s$g;$v9^-u}1Xuq|( zDgJYa|9>CNX*tZV55+bE?Vk?cMZ;CZE|efXuy!Ht)W zM~ymY6c)d>ot#|n>Vqj7epL@jtY%;g)qMw&A#yYj*?24sIbhNQ6Cju()B14zKYgR959axvc!K62!WGWMnAYxW zu8z?i2h9a}GBoFa)IfhKbYcZWgf6|qI{*ruS?-1@RxVDc0uM9&r-u_K4f>aRU^m~( z6`N!3+AA1imZKTy9JOYVQ08%FQ{6G7^k1Ch$cehirK)e@4~53S@6DUH-NaYO?uBtJ zZ(ROYBFZ6&QwII{J+RIO81S6HO<uu05hOO#4Y} z-)s1FwYoL$O8%R{vV?+W8VW(nnLLn)gTUGaox2E3l!MiKMfEn9F7ZLwf#X zxCQKcKbapq!b@FF?ZGg!*IyHS#_}wHA+H17Er$ zQD!K<2TQZ`dEJG+9Nc7s9-@}`|jphAlFN0ugeAWwPwS;Q*R zmza}i@_ud$wiuXUEhTP4jL_!M@h1eX80b_g!-a~Fys@Tct_QN1^i6tXGxrBd^g8r_ zgmNvB|6(if5i+T3$p^a@>KLqL2m{R+TcrB*)s)uaO0478+as2R@tnxwHuI@tXh&V8 zoiI}$dfqvGyCaKFOLJs7A4HX9D8R5@7HNj~__C{kRgI?dO8SP%&H2?dV%4Sb;0V6Q z#l;n0lNLDdmK+VTr&oV65t=*@4f5tDkJ)Vl%Xbd3y#?4{rqvWOIBPC5TsOgQ>YG`V#^swP+MpsQy6K2ohwkK#_lxJ@MFJAEI;n)F~90dym>WW z9}wQ2ZWOF8+eDY{;DaY$o86 zOr2F9q!j$bP~^@SY@006R>-g=nKFRvNkVazq@yO1-i{Z3BKZ(U70K}GE4FHgxT4E6 zEDRdDGC642)CcYDCyT>l9GIl4vd^}P9uG}w6&a9TsiirQ;$sn$hc}BbnXm0qN(E74 zIostL*Ji$Fw}~3DH}9XssIM^;d*#(Hs|Bxr!P9t;R)2jUirsT-l%{dDpx7o(w4AGm zU6-&JOA1U-xW8cLpxe!$+oFNMH>psJsAgYIo63!%2Bmk@lF9$AxZriAO>xA;gXEZI z#8HO7|0vn-uI|03v3qTxVTIFrD4QpuQy?O<4zN01R!Toi6F`#|w)qcRrSUBMer=7UGHdtaI(F}{|nu0D~BoZWdf zAg5mY%sW{4zzAzz*@^k>^OrOoI)y$ub3wS93=_#%t%)DIE#289YLkXBPgD-Dqto5<%y&vm0uy{CC}tf;*aTM zY7~=v@pc83#-Flu5t7?~aOi!@7|&}@m+a7O8o425-=OrC>UKV)^ZPeh*0=06s-q^t zr|`$G1BXVj_*+jc;`=OZY+6|y8pM@UY?4ZJGW9c0jRoT9 zFPL%Q8LO_o?s)w$;lmB31s|HU+i6cQS9lg|!n%VtY)dAc% z_=UDC$+4Jx{Z-Ud4owU;NJD9G#!B8E$!!wfol}VWIVsg{f()pnaZIm}qkba_ilbUx zQv4;ey;r?0MahqobZ@LleDw#XS4wDkpqb}%2<>_p8jfAQU+v~H_Y|>zH*t~0MpAcL z`kEYF`ghkMntT+?_SS!-z@^{GXNO+?3Y2nMOf1yPAoFcwB#4jTw6bL@D54y+Z zl0?Y!8Kt{Ll``;&Sr{Y?_#paU^=fT;zel{Zb({04fVQ*PfhfT5qjrT{0`EtMyq8+h z@^Ofxdk2MOTiKwTcvDJ%n-Ixind75u0a2e8yhq}>ksr(z;l{L>5Ln{ICgmuPL(Z_F z(YRUE_i{Jcc&EAYzR4>i$+?CTV2uZEpg9HB&*jbR@F$!%!^3hJf(v+J9g2o%1V&tJ z(W&4OK?#0ocuAx>4RSrHRVFR)F;PTC$N>-7pbRLln{E z-%K!swXBLtW`EXB@}1sS#?#_8n1fY7jpY(^WvdkU&2zL!ajj6<2yaU}YrV(FNM&YA zK6clVUKB7T<$w&RQi)l`0Vt-O+6UVr^YSm4O%S4L>P5$iv>0N|<0izFrUSWV6MBNj zW&T&+=rE(1yph>%un_yGTxx6O+2D3)_&|%!NdY_wbQyELQ>xSpGb)fUh%)Dtw4zHk zrMIW8;LJ?6H`{;JOOGn_EP|IpW{044oSY0|62u;}iRA_+h~J8Q-5%6mR|}F(qSm-` z+qkmX6)if?`-gCXIA5urTmHj2s8|O3l`}J42H>*NMooQ0c#OEu7`IqqR2Hyz0D<{$ zppXRYwcP5>T6iLKfk^K4V6EZq5Es(~8i}0s^JjQA=n3Kzgv2Sq;&?zmHW$FVDTFX) zf>Z8PQ>&yG362LW=tjj@OV9gyT_ot9c|M&N^`7UZV!Z5NLf5kvkIAxF=LtS)tUhf1 zho8N#Q9*h7bsqBeBPumq^B&yfrXZw;h7bFkX~2wmzcOm{de}_@pNl0^buFB_8uB{; z3hNKyE-rIN9h!N+*i_`Cdl+SevW>SWLM&N^3I*JQe(ZQ$KkvB8YjNKT<)=_y+up#&%pFXr%!9(Bsl}CW@6Q1=*$Zt+%TwgFI|=cb{YfNmz}cB z>8+h+z9m&luP?z5^Lm1yA_*}%nRHo>WwF;mu7qqA&v5n}^7jD+V6 z)9t>xz9{rMh-v!QCxCWo^Q!>c%ikd6KMWO6N&#p+Y*O}Z?`}1h2%BXcL)61p9RHZL zQs=*Rn8gr!luh!Uo*?AvWb%?D#~=2lmscc8sii(?)N|41lZ~n0 zb1X1$t;Jxe3B8|XDl@9lL`@~=!#*AlgH_6FYNZU#Eqgt}4NCs*j;C9K5>GHoQu5?( z`;IkM8xvxea$P->jVxl$DxXaxvA)@lpv%sKTajhBVXAB(W2)tyg}9 zs0X&QpQEi|#;8mKvHYgMG$7vQ#qJ^NG^GKY6J-v(7erFf(amK>kNQ4#A%2sB0-eSm zbp)>D7r8_@YpJg~m@m)kjjVqhT50)tYWypVy<8mIM63_-{^vK2y0hW+!bD2Y<=^($ zBAN6YLN?Jj!fljepqm|LpCYQhm;_stf?OBmNF~L^%uJ7Hzt>Q*w))WaW}@Q=qz5n8 z>6Xt`@W(X6$Ec-SjfF6D_B3TeBK^q8M%%}zZ)jKPL)#Z5IbRC z7$p7V#ulxW22)^fJ!cVWTEWACl7*`_X+#s7-Kc>32AZsa0N_Lz2wuFZQPMTcpi+za zAef@f>=Q^py|CQ^I{^MYXN{AgmR6o`&ihBdpvL99mdoKrAU9LVET(m%Gc;%8u#`Zp zORn&IJE9wYVmD)vApYfW1nr}hh>zXTmvr^|lXznVwB>U5lNWy^IT79kF z(4~F+5_8Uh>4y2ze;^OeYL~L26D5BWFYdF7P@l0c%r;eiHlC_I@LuCqf;0*$LVM6H z{_ZKTjy+?F#$rpVP;LMC)zN$cznrDXV(H^lr@qp;(EW&dxG6>9?DqDF} z9CfBP(v18U=`uF-U$-FV(qr)x$wzOzOf7qu%e6pbpDLtJV^eZRMDG>9)|{9QwjBGM z%fzwN@Uf?{zxtwf79_}Z!;Gl9nbP^yBuu>H&ELPTa4;yO$G8D|!+-T&*7rp$NK|^{ z=Com7A(<`A$e`bhI~PJzliKl}qkxzb zw03NcC>>xk304Tw)O;2JY9M(Z>CTG=etqUfmVJWc(vg=J2V5KluutneVursTUoT<% z0Ga@9m~XPqczlX?vTATr)2HzD=|EvAeoh&|o+!%2=(MzXJIzo+-bP9VLQ$hK9b%~# z@$$qHM}dZc6`Ap;8yHIWMkMDum(X@RC~5j5*Gr}L+Ldpclz8dV(rH<+Cd-}a{abrsMU+GJ z>(P@W*UO73f=g2BA0KJkG*BUkgdwSKaapktA;8d=mdp{|JTD`fSmQ^r$%@UD30JR)rH760EU?`BAP& zsJ%w_22LYprf$H~(w6NtnX}1C6$Dk9G-nBFULli}J$@L8#b2XoJ4d!V+%w_!xZ?Jzl-GE`rQL(@ z=|DcW&&) zi8t`cbsh^C1yjc8VT;zMx?D95{q06h;N~raxo)XeV9vV^4ZSq;9+~RMg(e+rdzCG z_M|N5l1U1$0n9D`)kB8mD{_Xz3vbq4XSOqYVphAIw4W;I-bG+pCU3&icIHa5T6W3YADSAMOZG zq_X|+3__k0)-! z)Vjtdj4u9oY24V4?$j4OitFl$Rjo&D5uGD@ual|B5~jV@_kD}ipin0IY-xBSW_0z+ zi>t`Mk1Y2h3)!L2a3>y%d5@3!^-z}hXOH^GeE;4BOAv<|=pUFu@!?Q9mpWOY!hMxUJ~I z!J3*M1u`~%&|~FqY#sWyyWM%VQTE7;P$M4QeyMA(Gx0M6yI1Kx?QYa=*=+d+v;DT? z;I8woPoiOw0h84(1zyyvV!cPOXJD%@2QslMC?i^*YlY0_@37mHc(`CXJ+q8k;XTtN z8IA=SstU|W^3G@nBOxq`g;#gxKoUJ242Q8wWe0uFLIIz1I;1%)sf^MtGZHYCycpo#I()I6 zZrq>kB`-Oj1O1PYcS`6SigbBAsX+dCzb#qZ z**X^7H|eCzT`npmQ%W?MBqoMgz6D+IMCaG=gj-j;sI#~`S1xeUzwF4(IEkr_0qz}W zijwDKAdL%{)*uXTb(>XfAh_VOsJ#V@e1jwl(eA&5)fFVWmo zl@xqD_tc1tNFUnn;erC1sCz_dQ6ry(H=g$~D7K(3IO*Ijk1`zEoQf;BZIrl#-xVUQ zCJjaAxNB=71u`66uf^5qZPMlUB;6vJmAw?(i6s^DnSb)aC$IGV3W*LYEf)Teanw)f zaKfF1@L-R79uD2G(StavEO)yd0!>UKya(wi!+R{J5s;k}=B@&&V0S{YUX~0GB1+f6 zELhr^qwW@97o6r=HQAn;oi`0+EKRI|f0>5Kpv!d(!`4=`rlT$d-h{K{O%|jph=R5g zn}6&L0j(4qv{cHkxR&V?MFTCM?lvgB3F{SLVtkw<2vrOtACY5TxU+s^Ei7V5xoOXL zID{Z!)!*+?iwDE5%|+T3&pi_g`vcr zLMgnYzLS1u5r&p|f2gDjmCupUC=;^zP>E{VIm6W;)q*pWV5X}i2|{6bKNB+Ho>BSf zKbj65o;Y=?fVFK5e#@^f(V(Ss@OzMZSvMns(Ieg%t!#C7OTzX)G!b zwfrx2s^_*b-jQ?==2((1kO!u*PqJA%HMs4#o>H4zMGWOlSd|+VIb#)xd4IYalMzt< z`K7Rpdyx>e*=<3wKdy4}RliFt@34@WK|h##!uY7M_Q)ek;0SlwBh}uSsq+J zkwXfz3xl_$OJy;*A6!~Lv>yI2{NjG=jOXD{woUndKbF&4*J<+Lgc66}C<*1T%#yzM z)=_Guh_@9KHj8M6y-5$1lB!~STX>;Ainqc%?RJrzE8`7)W<(+iOUi91lNY%0(z8nd zA(5}ORId`q(H>~xg|!{zv2t-Tual|hRkcNQ=!D2s`ZllE?Z7l$$LUV|;G@(Fa5`T5 z&i>rm>KU+;0g3P_v7R>c#nVxXHNKNMpWpllFxG7TmRlA)*DVJ7U7sJtrj z41c3@xIDx5{DNwzvogb{E5J^L>q!UuqXkX=q2#P{mdAj2X3P@+nNK=_eUTR#)8IbX z;#D(1OW^X$z=;sQSv+!k#Oo^TAcawz&}vb;hLxN54105 zCCmX~o+=)2RSV)D3-yz7sh=fF(=Rx3&QKqyM<52qJQ4R_yn#VD&N!0;lDL!uVmu!6 zXm0{&!ybp;3qv_yS7G*?BS+*kh&k%5{*x#`%zy%g)C;{Zf>W34=-L^xGyVFPNeHE% z40dFe{)Ir)xRb$t7LNQM{rLH+6`%m@cgp_z;~#ZB|7SRKdu6vTU)OWPm3HW3mB)P1 zo#jr^LWtIOdk)*%(_NOMdyy#533(1hYI;%HBn!fKDv@IW^SnO%Ug0)>b?4@041cHy zfidRpl~c6`#NOxCNq~EFHAW$113pSdKbsnB`2YHpBbdoCgIV+4HFKZ0xE4#0Ybj@jUUm zCI!s6wNxND`ldsna*rbcvpQ3;eI z2OD4msvtpC2_!m69{GX&+$8&%i@p+~7D7HXpVXA)fWSY1TAC4Ec=P2ypIr0ak+s7+ z<@izFQUi|sX2SL=r=55c{ruury`;RBV2cvL#JDV=EW3N=+ZI9`t2;a}+}tz|tE=c< zp`XLY1?Qb6cbc*Qjs?OqBZSun1Il&MB?WZ$)<`_FSLc^Uo5|pZd-br7)%7-syM3dh zp4P~9#Tc2$frjC)<8n|nig@GCvQM1+{31GNY@Dpu=j`$EE?K#DD!@rwKXxr-{+M~} zQu(Vk_NYc~v)rH3Q#g!dc5rn><>>t3*`hd=606=rq4W`W+bV9ZeuInoU>d(s>=Ij% zB8$*)atA@{>uF{T>}c7D*5ZQ!I?9hcdjpMI^!$)uYPL7Ik1Be+lW@{@CTCf4O)&ev zC2Z+g!IZaNIrkcKus^t0tJu$pAL zrBrqYud_QlZLFoJnVEV^c)v<~mEjKy#quZGi>MNx9D)R1tk>GNJSsM1qjbAAsg+A) zycV##Drdp8+$q}yasR}38EHV4JY~Xp?eI$M^5u{bH`V%^7hG zD{@#v9sYCk_$Y&9$-&SJQQNrV$-I|GGD20SyN^B*oSDk6fgX{X&q%!)Jb-G8S&?4~as(W*ns9Uc>u;&* z4(MOH#o>-Tg1H1geizh&l{m4{670Fzfj>d%PzZ^hUMTv?vXcGKvVLhA%kv^DYg6)| z&%-VJ=1ObR-T9cux>c9L^P(*^w)ST1HRXs|7980@x`Us3pqfu08Nm*O%&jbAda74s zl5XP{;q&s=sn_Y3z~%B`*0OH z7|YZ(NPj@hEn9`uXq|2dLNtl-ZB8d4xiZhtVV%eqQT1j{KgV?=uJ3C!&!-J9vG(Y0 zUw8E3>lfjY41W7TsuxWwBm`TgKl3*8a%caC3z0(}3!kO6cn&WYaNoBmO3~laIvD+^ zNxbKH9ISpUGPY6He+4DN|5*;(D;vp*| zC)-P$866j9xys)qdcIIkOf0EWh?7Vr?m%HCadMs7V~m%pNpA3XsGTxIF4sep_XCz z0>=Bp7S%@gx;(pbA-Cc~F4%5Z?*xi#5ZBABQH!2-0l}O>6D#K%elg{NDJ_rpWlq^M z)y0u>Q0ZpJ101NMs(mv!%znvfwUCE5%AMb}$Ua3aDf^cD6xnJhf6}C0?`^=BJpoLh zNFXg4XA!xF5EO1xS?bh0)xY;!`JK zDB&|`SqbR=2|TV86LSM#>{Dlx#|Tpk2WJpnLgvN?t)Us*FYXF+vBMZ`U55WSIYGii zSHbwK?e(f&OH|))AJDQYO{?^)n>pB_jeXvrLV+&x8MiO{lvsvVh*^kXa*U34AF(+e zU~};|`A3>07wt}xp}#iXwPmWcYl@Mr`6FW9FPe;_%u^o@G?im`$e8!J?ZP6z&k%TC zo(-6RdYLvEH*!>j+msl`w$UuL2;`Pki1EmftZr=Le9ul>upgt51oslkgan4Nva+?O z?{c0RQ>S)f&JJ4BUXvi1&&lFeE59qFLDCp)c%YueH04|Dp5>L|EHb)Ri9PEPgt5iv6x4d*$*w$!S}_pWp44n`mhvq8LwF0L64g57iX=_Dt;1QgxE_rep*A8 zW{J-lURnD_Dv2X_&OXrLQ%0VaaR%V1y-r5ic8R@nEHQ0GlFkV!Wdf4!b`)npkX#SU zE*CKb$;;JXUVoDA!-d1}Wa3WT_QCwEeBF#OLR7TD17viLpL_TnCo=$pRlckbDBK6i zXClO2^z)}eMC^0;M7WhLvs&@)NP}fjaeE09C6X8e;@ZtfE^aK|bKb_wv@9vSPae;? z)`*+f?`2dPTOmfoV%_*r$$TaWrvtAlt(Zqspd$VG*TB=QAoq00u(gVlRVSWKb&jN$ zZ`sS6`ZQ?vwIboFP6}EwmT~%qz-@y#BqbA5e8ePNdUivhw`0vLX2>pOZ)JuSaq`@A z+Pf>b3NVn)qF>!mNM|Owboj|j#NMVT_gWl2M$Zh=u0K(Qv-ows`e>e=pTGqRn@me- z|5u+y&86NHRkIf2P4W#YfBk0{=ufNnrsHaD*R76cu>DrA!Li%zEBI&Nz;<-)q5SrO z+#}I6*|##(w7EFt5D7MHmZBfQTE_Y!{@nA%cUAxx1!^K zpmq`nrvaeQ80Y@-u+}&UJ>?RD5WPn)Ba1m^k%@G3+(7dqJn2#0#m8M3>EeAJIQ`;v zOio*$GZxe*`MBpkT-a=)5x!2=!TelfeWxpDF+??mxOJ}l;NmHat_Bc0?FxXwN|iZ? z?LtOz;k-pHtPi!}*Dh(e$yf%^)-;X+j2aUzjC}6`k41h`UEDK>pon^(0!Vn>*i_#5 z_f>gMyi+{b4I?H9M9kbwxbWf;7az1(ElwjqNtiL$&|Z1dx8hBQi1iN|d9AFQgo;=V=X2&$~93-*5q)qdykZ7=q_nAqvzFAFK6ycKd7tBjcVuLFdvRiX%>5`$Ufo7ldXxk)&Lc&2;Gke|&T$rVIRN+KPwHO@^ z*C|hP7|>~SoAexf-t?&8Th5VrDrp~FG94xuqg~vxICEoZfI@ECH%=XsPnLQ&%PucH zy>F)H#I~+oNWVbep2!0*RDNw=MyoIg`*=|ZZlQ@=Jbq+-7S13uL8F6MftMu))Y^-A zY;6Drmc#9kmSMe*_k*f0FdjTNKghPk5Ff4Nxu3nTuw7 zfQxBarTfM2om`SUNrz9|K~FT`yg)i6*AUo|RM$|y9)r^*S>+ICp^c~YZ~&iyzRkuQ z#bggPYKxdt^+viwMMm9^!snemdI2GLO-uIeK$0KV=6hF8&!R=lfDPk2)4rMer%0q_ z!m&Wz`KIYP<1Uurr|VneGD(b6#d#elX2A%}z?-+ejAMtjj|+(rHDciwA!V(W!_(GF zG8}OZO~4T^ikuEm^?SIpEBZ>4HhZy_*E&+l&)m0;ZWvNOte5v{{cOg&y?-3!;|(r> zmw!?{ox@(0MfB>27@Zc#V9MQ#35-QTHfrZh{TbbuC+Op zN<(gjbl^oZFwMOO6fyH2BK|7#IjgEe9)nsu6&(VhOJ}j#(mT+6pEUP+{5Z64c|80e zl0o%|$5UlHDfgBD6&Nr#G7w_7nhvJ|T%;Du`>vs^QeVRyGXMif{gBKxy8{rb{U7lc z?dVS})21ND0_d)|%YMw05mw$_!>?LW^aD!~?l6j6zoC88F!>*1VfCx*(ZLsZBwOc5 z3V_-fg!A3ps-3mG4lC!yJv;=6Cru+I=H&-KCawu|At{LFSK~Z0q;yBRZ9Lz7MH)r5 z&p9^8gZUE{R`CS_Hvl)ccSL?57U!W?a5wakiMNp~Hj+ziVDuTYeK zEi5%EDB6WhJnGf!7kI#dckBab9{B*)L2JgEo|Hhnx&nL}nLFy?c7H`%;jn-`Vs|)U zf&Z97d~}T5?}{Hcy#ZiG27l%ILB~Vj8XCfF{TzHqh)V4y@VaEU(_GnG1Kg*3a#rQY z>*vpe?B}fA5O(9uS>TNZawq4(o96lJr2K2tU+q|5Iw$vEDbnCbnyBuV{TIX(Gb}z2FFYSL@sUP zpAxhb!6%z4#;R|8`}p$cC=yccqMPw6j@>@EoSNUQ(v^KjXLl*&1bT%=C=R<&q)`H| zm;hL0P-=Swl#W_H-c2E`82SK|b1FThxS7$_WT4WI*y?q(ddPD-lk%VbS^IFFy@%RY zNLo4+{3DbAAs(Enh89Uo?gQbffAvrdMF$3;&A?#N^Q3@~aar{DT>(mC?{R!WL%d&> zZJpyOIg(Bj=a>Ow%>EA%gs)WI-yM%dy;>xxl#n9rGzr{}i=73cZ%Ycdeb>i}ULi4^ zA1AczL=t`ZY4ME@@FcjjZ*VlvL|e}y?lMbG#Z->eNQy)eB+5m}rEBI=?K{_AiV4b> z(V48d0yW8yZue+7zgHR)NcY{kmaf${G!+u)*$&h1KQx>AGgt67wuM4EQ+SvYuG> zWSpu`9z7eGFeklMkXCW4)pWQ`8X#)Bb_jtiJ2GnVy?J$8XRZ}+5NaR#>EgvZWZRkO5gERaXo9sHPC!o3)#Cz~xl&+;?R_ z(GMf?nwf-ZOvUG;DOYFqlZq>=$>udtrkT^<)N*YrKll-xn*GtJ^=2FSa%XQLBG=+$oE9C91+9t21>cvI zy$I7gvKKfCjO>*SS8U6(hH{4zB9I^Cfh|MLWSuHL0uu-ELv8adP=u+1diqd*eR^AuA!u{s?*G%?m4-vTw(+bT z+es-h3@zjsy9`H^^2TH-S<;|ljxx3(iOysTnaWZ!9s82P6oX+H$!<8dDH)CRSQ4U! zVaD2s_wUs)E!VlO_rv?){m^`x4>Q;Ef9~tKf7gBAzu)uwGxPgp(GalB7S;ptqrN3Y zm3&T5o6DH-I(jPu83Sf6u2SkJpQlr1WGuB>w&#fvBaN_+f7K5nC3ec*+$@w=c%Ytv z_r{8n!6SSRrGrQh2VPqCb~jB8zG=^d!5`w=CT@GAhcz>u+U#D9RwdI-otTTlw<@k% zQoP0W*5TkR;?MseRFJudR7rdezgF%mQ-}pG#2bBGkrIuP!=hZ&ODoLAL#z|`xIyr_ zF(+4T&i;I&>_L1Z--t0Dt7@aqr6qqb5`2W0&=l8eBw|-su#nE>(CT%p3&KDmQ9dR9 zB=wU`A-gtfz4APaia-rt-ZnHoXX|8uSvKk1fwD+tCtSPH^vt`v8+iQ7eY!4 zyLN4>RZ+DtS&2eQ8k6XZ$7QvlS!D2eiDFeod+InZfGk4Fp zUy9Zqo%+4Y76x2^6F*L`s@?MCcC-^L_8VhLpGF*ql{%=r=-3Ih%kq~5%A;)y(lWk; zA|^MLC3BW_^tQ^_n3M4bFPCI!R)a$DM4u2GJT9|-jLvlSm42Q>tdm?oE#o=C!%%a) z6W2KSago7TTqHJVmiSg8?;ODkAIH4OaLCgy&GJKJ4B*AQbDCt)daYQ3R}U}(blaA_ zlRtl%ev@6)GeDnG8^I*JoiS60q%Zmz;-+`U%xB1CAW?oh4}bKm6O4Gv<_t-%IEpw_ zgk;3}up<%_A-;0w|2WSp(6`V>%F^xVd z@NQaGCgI!;R{CP+H}S}g@m=aC4D7Vzqxmu)pdvSnOR<;J+HGg_$D>c01wino6=*k3Iv6IH7GcU$CA7XmO z{1F=6HfEWq`x-iXF-6im#l5GV*Tfoe2Ia}bJ->4Fd3K4is;JIyX;(8x1Rg3TS<+`D z900|xA`DTwDBNS^FGTHHx-puK=n{u{AcZ=wuAJqB5a3^|+RO_?WwGYd!W<|q!-$j` z&!rgjWqChiNBq`65$A8v&MY=D6N@g1(R|=2mk2fOv3jc6-&}8)z~dW% zQkyM(8>ma6lrkzfJ39nvq1$`=nQBMxp^gtW zVQDf^(5`VEpYY0F)J->{FO7=^P+sf+akO4~Da|r*lE}9`Kuvwi_bX|b_D^%lqzaFo zs)_zrj)UT!%SC0ajJX=~k!14A*>w4j1Wi#%Oo&%L^8wBNV`_1`S52|1Jq~~iGf3f2 za2@*InfE2PtOUcm0{!bh!RcNL3lcu$HlL+zF{1_cp-k&*(Z)o@%9^TWeE`WPI*>xP zzeo>#uFy8v`p-dClD{Fw+4?GIVgA^oz1lC>toK@FCPHbo74^ckCt43wj3Q38*qU~i zPg_`3kI|+2qv|A#91s2j7PQ;~kq}+Rutl<2-SA`U8t}J~5V+W@>{G!xP1Tv0f!6pZ zBmg07(J1Bg%$ZPP96jqoZX-^Dk~L*6lJe4OrqK(w7^X2kH!Cy6+RSG_R3HOL3-A{1 zNiAY;iS)~y&5%F~2N~X>N<*yfq35!JJYWC`8v+!XFvP(7P8Z0*>AOk}ePnU^{4Tk4Nc&pZ!Rc0)v5Je!M1<4joqny(?mzPm=}wGNI`Y2p#EdQjKKUA7I) z1KuJKH{b23duYuMFgNYr{Q=--?<-rA-xIAjlMLWoGkz^ZH0ot8scHVoiHeJe-i|JU zDu?<5QlZ#b*OvNxKJbU)eh`3F=?NMh*eyhnUVyhpRj#`keIRjXQ9P@ zyKIc#YWJzlo*WQs?Csp3Z#QUUa0@q7xmqX%O5e39Sozw-1~yWIp*f~g|BlCoc!=Y< zv(78}%T;^yI2Nkyc+Fq<mM#wb39&Tz z>E&-NQ&hsun%$M3tbC`5sFS}46}MT11Mj`xab*VwsfKqHgM=UKSK256#XyrKuE3%xo6)- za;e15rH9`BoUuo#0sQ;IHnNo4gdutRr;W_~;tyB(K!Gg}o0-=p1+|vqj@=()Px-0YOc3Ml#b4!+t7cneHa-urlTV^cRBj8&xNoV&6ZlT z;L=}|AFzz?;s5on?yfzfs`3vvZY9i|d>C+P;mc`9(H*ycS{t6;d-SUVZg)vIQHSB1 zy7njZBJAEhVodn#v)ldmzW*Yr6BWk3vg*!o`$b9qLfsfYj4ReYZICTvO{&wln*YCyrb1$@y7qzVZ*(>5sAO3!Avnv0AfTULx z9^CoaacH;Unwb5zugKiKY4;vz1+nkptp=}Xz4B%*bn9-#zMYphzase9>n_l(xtKr6 z1#Qd-KK&QI~bO~);RVzQn(3>i*-ie5!T6(R*gJM*G*^i|@MkJ;$e$}@K~?K@i0AE@a#6o?M4=n|+dgaotu0?^q6N_j=PR-WQjFHKgZ(p_hAcJHOEC_n9w zmN{PTF3V89{#*GF+!C*w>s}H19vA<~=Ba;MPw)#@ulHopX+YO8z(Uy=*2+!=mxde*(-OPs#9BeLR3Pt5|pf%agHtqpn+xNU7_j z@R|~?lWLYPp&K92#r5Nc5^F!lBYT&MgS>N;o{jtpG94YhioI@$$Ax3knERAZ2Gw2& znnL3P$Hz}UZ{>DWN|G0s^a2Mfl)I>%{4rLM){ zoA@_t5lK^XvkpO>-7y6yAO20xw@omZ+KGUHqo0J@##s_`P9>!4n*|eys+77ux|1Yi zELWMV;k%fIbA5<>etj?YL)UGiBuo)mM8@H$gWqw(sIfh1_0B*v&n%6DJXkewOW8z> z&3NiSz`}DJkj#JB6|C|q(9fX}Y5fbKFc_W^?shX&cJJ(sZ*&bDIRD7cPCq7;9T9bG zkTp!-ZK4sxbW~9#8SAAFqIY@12o6Y@ogpbW0l{am&z9i6!2QQjRh*%+XhbtraG7sHSG= z4yd+;#cbcXPeX0xjw55S4$4>(JY~kAq>bZ9o*h*Gzzs)OLJ|{HnvoE#B*=3$Kw!7| zYspI0*xdPj@DGFLdVz5;<3#yxSnW)r^~?XO9D` z`gfm_bqs5M&!4rZO1tz35CV#*sj1`66ZSqrEna*9f*Loe3Tz|qy~ zz!PLP%D_NA+_I{WbLXNPJyD#%HP5;MdDeG}AFLu45kv?t((v2({3=NXFlScDLr4h&v<~D(v(P~b2bejjZn-*6ptA@8$CCS zqdcU}hg9fN;Y8vNlCCctaZc6Rp3cbTGt<(^1I@^@Q?a35{1gTwhR)BYCQnQDaevs% ztkhy%2NJEB^MVSIsd`M41X2-R{&E z2ICT_dNnBHH>PH!xth!be*azrwC4z`sg(7MF(k33qRFm{9|Um+2Y;Awp!u|?613Qg z&64ex`%#S{>~76mqIp`oNx5=j7$cb=_;py^XkGV+gcVh8#OR|(3My7xyQsA%|I3NS#&${*ET9q) zZOA2P?z3)eX8y!Kqfv8E0Y;a3k0!<>O;gENB_;cUn1Js1%FR@X{)jrz-=cF-pVWq$ zMMyA}j;5H@=~;ssUPg$j%}29ok|~sO{U~H#mFJ8^bDv5l zK2M-&LnT?g%g3S<<|N;VH9;tp(gZU%IC!d4tPl-e(J+oFa0DljbY9KVP|t2^~0;%v`iG!1+_9 zTdS3~Y8{zm=?}3!bBKiLv<7ou5ked=%rrMB4YwG&<%*C72puQI0%yF0(LeA=K>CeZqLi8K6Pp+223{oGcDk|>&d5NUnOW%A@X<+sZaqKdZsXHLj)OWI|UT2*AjO!$^OuC3?h zZ{?@Y(J2i{lW#^zBspOSEqW)1w3-@{;=XrOuyPAo!11c@mywu32%lrpsy))m_hwjy z$|&*kN5}!mWr8Gd-y*ihQRJ18JekelA{ZDFx1HGQrRXTMZC0pFex<&$D5L@z%dd%0 z*akzfiF9sSwU?A9p?jKzV&Jl6N&GQZpP4Vd(^WF>*ylt=xPTOhPL>2O+ zTNI`{FB|rM@Sho=Ovy|*u4tXM8mXUEwiXP>YWB7iTmwqDbz}IHW+2uKzty3#DMqhq zDDfsYn6r$7lA<6sIw$$)h~$A2t7P9JS`58ZG3u9-JV}{fPVad*NJ{2|Z3yYLn>P>@vr3)ko1<$%jWMjTomiB;kB+gjnquHX=hM>+hA7;H7$Kola;I*Zzq;Sy1$ z2Y%Z?hvEWu0Lj?Lb`MI_$JFlf@6--Y^NQP$BosrN62wiLo=7znLGai3Ai#Def*ywp z(RMT;L+MQay+bw zvdf=p0?#Jc`7HzmDL>{~Kswv=pKQ&i?rrI@Is&-L9^ZbM5E}een1rY2zxP6dBXa4dBgz?>&%a6-24UtzOR;MO42)lCr2?v5?!&7AL<*2dcFMq~Z{> zn#7e`HUOMt=62Fs-_uuCs10U4&#mZ5>a!afWr`8f4l{h(Kx`l;E_ocv-qN84*Lo?p zUJdoaJ?~^)Z&*<$8i=YpcI4Y}H&w(0gLogZ+`eaIthdj>cwkd2uTXC$ifA1^a0E%F zo|^68u=|`?W@e8%W9SiNEH1WcsXfMFTZGWjB9s|W?bykoNWJpa#gchtUUkF|M#RpX zY5{!u3h6BU-x$*Ln>j?sa&IlFPM{59Ic-yPhqeXWQKnhYTtIA2+VG>~8-FG3@~(Ja zQoFi1h3h6wjEXT(q_u(CcE73x$1i3TrlDfa4jd^LVtf&%eJzPw4Qfz^#F#V`qR|O9 zjT~rjwH39pypq4Nu)yp?V2{c5u3hjgMS#b z0l`#wNUK^K&oc%j(~0kJYiZgC*W~mR3il@o=(ueWL9M`ltAITSUdxY-xuf)ig`=?i zDc+SJ@3+Dt7;d3K&x@_dHs%8;)Ib9{RF+=x_!=$26pB)FX*L)#iZtfM$V$2}4$NWQ zt}tWMO|IuK$Eo<1r#Q4xB?905Q_8BqY7a8yekwH0>OAc?ct$gX&yVMX1nK z7{UHf(Ib(vnx7N<-mL$y4ZKZ0Pvts@iig>OGOeSZcwvWClc#HVTS6Ns%dKg^O=jE= ze*{{Lt+SgeWsy}aiC0%u!_u^^<8^k*tcsW-Z`f_IaHt^LIgrs8(ijq&bjv*Xk-)W- zx<^!%(5F4d&LRW{S8MsQ37N98b=YyLHy-i}8Kc0q-GrH(RieIC?(d+q^OceaiV-Pk z_(^fG_?0eh8sZTOIl$*aktj+Y`)wF=G*@{#CwbxKItM=0+61{x6*18JTnOGVS}3E( z&@0SB@tQCPg>6}Uh=g&o1F|XAf7q0>>&T{wXO}!1LvqTBZiqVQ?=d>6^w0{~^j}~P zy_0Vp^taG$npE_e*@h1w9mMmtoc2z0MbOY)d2!pM>OsJHlbs%Rmy61YQEmyONHt4PW`K5~$q!xDJLZWNkqzhWb18;R*E7uK+3fG zZqfAIw0w%d{+M+{+}Q_kIKjPYd92`87G3>5gCEP-GSUg@gZXQH9NKR{|2R3&f^57Tcq)M=%$nltFxp3i z_QhpQo=5uT#b>X~%X@@c9%Z1A2d!=vi!AmUWT)XaIcVQRDVEd7v?h?_EEN31%s;iN z^DCqt-J4k+^{~PWJ+44O#yntStweK$P;rLZ^qZoYVvY$DUx=73mN@#dQY1xDbXVRx z!L8%Zrb4k_ANrC9%QTk68d4h@ za4ad7v_)(w2~KM~JtmYBu5KPnc*w7p*@_h$*22syWmFMx{Tz0In&#L%sZyXY?Ww(D z1+C*o7)Zy;lpg_X5wFmbYY(IBT*IAXU7Nk}XRc5|@kh@tr-XxEU@fbQ5YxU`MMzKb?`} zK^4vc#qqTeU_6NS_#Rxd54BCHPD*%{kR?|w^K7{|j>rMzB{kvBwiALVdPzv5Tj0XZ zvI)nOITS^*mNM)8r*ky&>b;Ut@jbR>VnxN<$i*VC&?+L&J1(r%y%3l_oA)(d%KhqacbJ0E;TQ8>aSm+B53Qjm?S95<_ z>*R=b{uc(yijee1*$uz966{A<#pRfy>3foI!_@UfIENaFr1>Y9 za+hrhhFu}8&q0%7VYy6r<2w%OZ6|dQN20K(;-}#B&9?bETELVJ58IZlu3L68*W0My zUnUd;FQC)J>COA~nif<8xaRg~PhTocVWkj5L3}8N-s+=i6Nad5l$O;vgXt@HqA&%N zJyD9-n=Ex{^+bUYQS!^;?|Ar}4>MsWnf|1py2y==Dd0Q7wtF%zafE64TMdg)bBNaG zs%qNEvMtndm(6Dq$gchu5Y1a5O<3hiD;u90Kc_F&haeK>RH4DxnP7eq&;{|4s1-2r zz9`k>l{qyI%Tfa@piIObUNUV-4ih!;+5cuswp&Dx*mTkfh2*p7mA3t~yvu~Wm$l8^ z-4k0&G9swHWBZ|u7wUQcM<2h+>-;TC+QOM&mODSpj9x#|nw~RwSC1uXPbBsy-Lk7@ zO1|ZXqXae6Us99LLIqZ^H$AKIxp7KPvc9RWs7m3`(6~HGi=(B7B}|J%kHp;XZAnF~ zuadwZ*AevrxH%r~XPyVTj|>vYw)iVd2^Rwoe_3ITREQZ!3j5byJt8_1G{+N#6W2#%zqzXQ0}|xa{)&18Iu!B(OnB&1jW?khHKJx5pdpQbA&{L&Z3F0% zTMw!@j&NI1tN_p8(q1(!>8(~I1G9=toirpJlqru0`qbrsimq7OlrV1v2BkRk=nQB< zpT~j5(P&Z3MR0hVJZ9h_+~CCO+uQo&s_WY(8!_bQgtK=xkx{(I4!%iOMEqYu()zL42-u71}^tdOdFYRi=euVmlZ)9=j~C&UxjEHej6>}CE0 zsHduF$(i!^e5KBf4{`^u;Az912&m~xa(!ECaG@F#x-NNwRx?a8m_F|)j>7mP>`E11 zXx!h{xQE)NKppXw&aSkqFq)xrlH%~+0xHV&PG3JSS1)95fIq{HEspPd7?$KMD~3Ii z=p~tr*(p0X5|8NC9RUav;J0NHqcTG>sVHHlJ9>?W;fQeuPGYqW_7c?5VxM?v_o8dt zuLUzK$oL4`Ho?+CGbePJ{Lg$AmjB9v~dOKh_*++v#< zx7=#%y9AEHzI3m(RBJL!OpCf0G$3BFd7mRECr}GlZ^pfd~ zkB$9vk{?v@JaOnzkW zZt^iTh|-Nnjfzwrbp!Nz`xjD6^k|8h@j`Kg0GSQ~90k3LfinQfbkoRKz%ovJf?+Xm zDE9ar5w~6dYE&8BwKSYijqL%fvdJONb3szktB%l3E0PgtInYaPX_3Gy9}E%q7!4#D^ZmA5}k82XG{8 zP?JuNCiXXVWIrnwDV$k`H8^cB&xifQlg&X;82 z;FUh@-KFZSpsid0S}sH7@5NOL8G&#mj~P|nD8pW;ZZE}*lkrSOjnX9OO#FbPAMQF* zpWx6Bc}%ByvNiC2LCq`GM2xWAOB`#wl0D=ggJs%sJ3Y%L4yQ5{j!o$)N5|Ytvg^%* zA?R5=8$$G-g1KVB4ZH*Cs-|~78c|$KL7fDU)Xjc1%_dWuIb;T{orbv{V7AB zO03Ryk%0K&?b@FvPD<$Ys_W-qFNcM*QK1yrvZfeQTV8=oi#RK!@4U>5c+ zHJ&eV;0y$@QNCLl#BPw*dia8j5~mQ4CdO)t^z2gF6P`42)bE)M)nI~?$;^mZd3hOX z1j(0(!X)~yf?>%%+eKHUoq^+JOl?h=bI{U50|U}<3uSq!vE72{RXI_%-dp&`Z?mdG zuk)XN$i<-c8U%WpQ)9)(-db$Z>*x2Iwa@!)9sgR-HA5j1c+N)inMqHZJRHCwO@|r% z4y>|jB3*1XDR5$Y{;cX*O`l0cea8{VTe2&f`bc6^#T{zc0(Nx- z?dP=d6i9!Dzttbv?60r~NHXl^;17zc!l>S|C^3Qm>^s|(PpRfsbJ1Zp6c_TH)Fbj_ zu0h-0K*E_0?TWg+zaFDnR(dG;yo)yzZt##;HSzs-qW##_>zgG3 zK{)K*3*%8LWdwQ^>CN5|EO!*sDf~VxJc}7Scd)I38z2pCbYl-@P7Gl}K=U;K?VxBK zI@Ku=mWf57k`SQQvWTr_uu9M>%*B_kcFUT3Z)g`~Y&nLwmC>BYpnI#|bFd&1_tFkl zVz8=2P;#Khgc#&m;lV-S8dCo4H%OTfKd|Yikf8J4&qiAb&6CF-g2Uz}Cvb=p=1-s7 z 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 literal 0 HcmV?d00001 diff --git a/docs/proposals/koordlet/20220615-qos-manager.md b/docs/proposals/koordlet/20220615-qos-manager.md index b5c380f42..4153f09f2 100644 --- a/docs/proposals/koordlet/20220615-qos-manager.md +++ b/docs/proposals/koordlet/20220615-qos-manager.md @@ -51,7 +51,7 @@ Currently, plugins from resmanager in Koordlet are mixed together, they should b ## Proposal ### Design -![image](../../images/qos-manager.svg) +_![image](../../images/qos-manager.svg)_ The below is directory tree of qos-manager inside koordlet, all existing dynamic plugins(as built-in plugins) will be move into sub-directory `plugins`. diff --git a/docs/proposals/koordlet/20241210-GPU monitor on DCGM.md b/docs/proposals/koordlet/20241210-GPU monitor on DCGM.md new file mode 100644 index 000000000..d5a38c536 --- /dev/null +++ b/docs/proposals/koordlet/20241210-GPU monitor on DCGM.md @@ -0,0 +1,172 @@ +# GPU Monitor on DCGM + +## Summary + +To support koordinator's GPU monitoring capabilities, koordinator needs smooth integration with the GPU monitoring component dcgm. In order to achieve this goal, a joint adaptation scheme of koordinator and dcgm is proposed to collect GPU indicators on a single node. + + +## Motivation + +dcgm is a GPU monitoring component, which reads the kubelet.sock on the side to obtain pod and allocate GPU information, and then associate GPU monitoring indicators. The GPU allocation of Koordlet framework is a centralized allocation architecture, and kublete does not have GPU allocation information on the end side, so adaptation modification is required. + +### Goals +- The GPU NRI HOOK writes the Pod list and corresponding GPU list information to the mount file on the GPU NRI maintenance terminal. +- Adjust the logic of the DCGM component reading Pod and GPU: switch from reading from kubelet.sock to reading from the above mount file + +## Proposal + +### User Stories + +#### Story 1 + +As a user, I want to observe the performance metrics of GPU at runtime. + +#### Story 2 + +As a cluster administrator, I want to monitor the GPU resource usage of the cluster. + +### Design + +#### GPU NRI Hook + +The GPU NRI Hook maintains a list of all Pods on the node and a list of corresponding allocated GPUs in the gpu.go code each time a Pod's GPU request is processed. + +The path of the gpu.go code file is: + +```go +pkg/koordlet/runtimehooks/hooks/gpu + - gpu.go +``` + +Define a function in the gpu.go code file: maintainPodList(). + +Maintain PodList logic is implemented in the function maintainPodList(), and function named InjectContainerGPUEnv() in the Gpu.go code file actively calls the function to dynamically maintain the latest Pod list each time the GPU environment variable is set.The function definition and function call are as follows in the gpu.go code file: + +```go +func maintainPodList(request ContainerRequest) error { + ... + +} + +func (p *gpuPlugin) InjectContainerGPUEnv(proto protocol.HooksProtocol) error { + ... + + maintainPodList(request) +} +``` + +In order to be compatible with dcgm's pod and GPU mapping data structures, a structure named PodInfo is defined in the NRI HOOK to maintain Pod information, including the following properties: Pod's name, namespace, container name, and list of assigned GPUs. + +The structure PodInfo is defined as follows: + +```go +type PodInfo struct { + Name string `json:"name"` + Namespace string `json:"namespace"` + Container string `json:"container"` + GPUList []string `json:"gpu_list"` +} +``` + +Then koordlet mounts the directory file of the host, such as /var/lib/kubelet/pod-resources/podlist.json, which is used to write Pod and GPU information. Mount information is edited at koordlet.yaml: + +```yaml +volumeMounts: +- mountPath: /podlist.json + name: podInfo +...... +volumes: +- hostPath: + path: /var/lib/kubelet/pod-resources/podlist.json + type: "" + name: podInfo +``` + +The GPU NRI Hook is then responsible for converting the maintained podInfo list information into a json string and writing it to a file named podlist.json. + + + +#### DCGM + +In the DCGM native project, the logic to extract the list of Pods and the list of Gpus is shown in the following code: + +```go +#dcgm\pkg\dcgmexporter\kubernetes.go + +func (p *PodMapper) Process(metrics MetricsByCounter, sysInfo SystemInfo) error { + socketPath := p.Config.PodResourcesKubeletSocket + _, err := os.Stat(socketPath) + if os.IsNotExist(err) { + logrus.Info("No Kubelet socket, ignoring") + return nil + } + + c, cleanup, err := connectToServer(socketPath) + if err != nil { + return err + } + defer cleanup() + + pods, err := p.listPods(c) + if err != nil { + return err + } + + deviceToPod := p.toDeviceToPod(pods, sysInfo) + + ...... + + return nil +} +``` + +The connectToServer(socketPath) above indicates: PodResourcesKubeletSocket pointing Kubernetes is a particular node in the cluster on the Unix domain socket file, through this socket can query scheduling to the Pod of this node and its information resources.That is, use gRPC to query Pod resource information from kubelet. + +Because the architecture of the koordinator framework allocates GPU devices centrally on the central side, rather than by Kubelet end-to-side, kubelet does not save Pod and GPU allocation information. Therefore, the logic of DCGM querying pod and GPU devices needs to be adjusted, from the previous query kubelet to read the file podlist.json to query. Since dcgm is deployed in DaemonSet, the dcgm component on each node must be mounted to the directory of the host machine: /var/lib/kubelet/pod-resources/podlist.json, so that the file can be accessed directly from inside the dcgm container.The architecture diagram of dcgm is as follows: + + + +Defines a function that reads a json file to construct a pod and gpu mapping. + +```go +func (p *PodMapper) listPods(string filePath) ([]PodInfo, error) {} +``` + +Define another function to handle the listPods return value: the PodInfo array. Walk through the set, converted to map[string]PodInfo + +```go +func (p *PodMapper) toDeviceToPod([]PodInfo, sysInfo SystemInfo) map[string]PodInfo {} +``` + +Finally, the function Process of dcgm is changed to: + +``` +#dcgm\pkg\dcgmexporter\kubernetes.go + +func (p *PodMapper) Process(metrics MetricsByCounter, sysInfo SystemInfo) error { + socketPath := p.Config.PodResourcesKubeletSocket + _, err := os.Stat(socketPath) + if os.IsNotExist(err) { + logrus.Info("No Kubelet socket, ignoring") + return nil + } + + c, cleanup, err := connectToServer(socketPath) + if err != nil { + return err + } + defer cleanup() + + pods, err := p.listPods(/podlist.json) + if err != nil { + return err + } + + deviceToPod := p.toDeviceToPod(pods, sysInfo) + + ...... + + return nil +} +``` + From b8ca00712503d4f46b0b2102802d83c600946c19 Mon Sep 17 00:00:00 2001 From: "iostream2008@163.com" Date: Tue, 10 Dec 2024 23:27:01 +0800 Subject: [PATCH 2/2] gpu monitor --- cmd/koordlet/main.go | 79 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) diff --git a/cmd/koordlet/main.go b/cmd/koordlet/main.go index 5e4e1e551..3f2a50864 100644 --- a/cmd/koordlet/main.go +++ b/cmd/koordlet/main.go @@ -18,8 +18,12 @@ package main import ( "flag" + "google.golang.org/grpc" + pb "k8s.io/kubelet/pkg/apis/podresources/v1alpha1" + "net" "net/http" _ "net/http/pprof" + "os" "time" "github.com/prometheus/client_golang/prometheus/promhttp" @@ -36,6 +40,8 @@ import ( metricsutil "github.com/koordinator-sh/koordinator/pkg/util/metrics" ) +const ServerPodResourcesKubeletSocket = "/pod-resources/koordlet.sock" + func main() { cfg := config.NewConfiguration() cfg.InitFlags(flag.CommandLine) @@ -101,3 +107,76 @@ func installHTTPHandler() { // http.HandleFunc("/healthz", d.HealthzHandler()) klog.Fatalf("Prometheus monitoring failed: %v", http.ListenAndServe(*options.ServerAddr, mux)) } + +type PodResourcesServer struct{} + +var nodePodResources = []*pb.PodResources{ + { + Name: "pod-1", + Namespace: "default", + Containers: []*pb.ContainerResources{ + { + Name: "container-1", + Devices: []*pb.ContainerDevices{ + { + ResourceName: "nvidia.com/gpu", + DeviceIds: []string{"GPU-32e51276-4ddd-5d40-b63a-7bf69ea08b2e", "GPU-6638b0e5-0708-3bef-74d1-5b75b85f6e75"}, + }, + }, + }, + }, + }, + { + Name: "pod-2", + Namespace: "kube-system", + Containers: []*pb.ContainerResources{ + { + Name: "container-2", + Devices: []*pb.ContainerDevices{ + { + ResourceName: "nvidia.com/gpu", + DeviceIds: []string{"GPU-68d4072a-f4b8-46e5-c76f-66ce3d02cc38"}, + }, + }, + }, + }, + }, +} + +func (s *PodResourcesServer) List(ctx context.Context, req *pb.ListPodResourcesRequest) (*pb.ListPodResourcesResponse, error) { + //var pods []*pb.PodResources + klog.V(1).Infof("List(): start to list pod") + + return &pb.ListPodResourcesResponse{PodResources: nodePodResources}, nil +} + +func startGrpc() error { + lis, err := net.Listen("unix", ServerPodResourcesKubeletSocket) + if err != nil { + klog.Errorf("failed to listen: %v", err) + return err + } + klog.V(1).Infof("setSocketPermissions...") + if err := setSocketPermissions(ServerPodResourcesKubeletSocket); err != nil { + klog.Errorf("failed to set socket permissions: %v", err) + return err + } + klog.V(1).Infof("NewServer...") + server := grpc.NewServer() + klog.V(1).Infof("RegisterPodResourcesListerServer...") + pb.RegisterPodResourcesListerServer(server, &PodResourcesServer{}) + + klog.V(1).Infof("Starting gRPC server on %s", ServerPodResourcesKubeletSocket) + if err := server.Serve(lis); err != nil { + klog.Errorf("failed to serve: %v", err) + return err + } + return nil +} + +func setSocketPermissions(socketPath string) error { + // In a real application, you would set the correct permissions here. + // For example: + return os.Chmod(socketPath, 0660) + //return nil +}