From 47ac48564183c5eaa482d988e595604cc7029457 Mon Sep 17 00:00:00 2001 From: Alexander A Oganezov Date: Wed, 16 Sep 2026 16:12:15 +0000 Subject: [PATCH 1/3] DAOS-19644 cart: Add multiprovider design document - Add multiprovider design doc Signed-off-by: Alexander A Oganezov --- .../image1.png | Bin 0 -> 16822 bytes .../image2.png | Bin 0 -> 16985 bytes .../image3.png | Bin 0 -> 12371 bytes .../image4.png | Bin 0 -> 1776 bytes .../image5.png | Bin 0 -> 18467 bytes .../multi-provider-design-doc.md | 334 ++++++++++++++++++ 6 files changed, 334 insertions(+) create mode 100644 design/multi_provider/multi-provider-design-doc-assets/image1.png create mode 100644 design/multi_provider/multi-provider-design-doc-assets/image2.png create mode 100644 design/multi_provider/multi-provider-design-doc-assets/image3.png create mode 100644 design/multi_provider/multi-provider-design-doc-assets/image4.png create mode 100644 design/multi_provider/multi-provider-design-doc-assets/image5.png create mode 100644 design/multi_provider/multi-provider-design-doc.md diff --git a/design/multi_provider/multi-provider-design-doc-assets/image1.png b/design/multi_provider/multi-provider-design-doc-assets/image1.png new file mode 100644 index 0000000000000000000000000000000000000000..116f6c874581724b355fe7b9d94bd00361d895ff GIT binary patch literal 16822 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%0DQEI)M$C zBdq^*g_Suae*u_N4(tP2( z=ov#{_<(`{N_Wm+6YLui$#|+Vm0@p>H1a&!I#wmDgL53c9TsB^mzXYXvhl!Ivn8b( z3^7(#Z4-wzWXTk@n|?q={R%t?%a4L8Qnx+7lvuz7E; zxM7}*8GOB3L9f?^F8rpz<49^VHM&%2@qoz6oA&g ztta|0MhYsdj{ zV!^ebA!Wg+fFsa5?4a3W)VJWH*{{`7P9B?^)zzozC9~QbtM;*!eEy)D$SPXk)f{3; zgQrQ-k}GP=AgnbLRF}~B~^{yoxr)UIzYJ=uiV?8?*Fow$PL2ZyM)gWHJdvOY?RTeyLc9lQ+Y|~nOG{F)^-}&*Av_^Ji+gG2hpQTKonp?7q%aSNn+rGt*>2=?20sZLJ;>iNH#Nc_l^GA+A_e4oLu`#*4CA}W{s0?g# z1X2r7ix}Y^q#yLYHF?T=p|%lyvZ>V|0s}UUYPo~WcP)r=@~0ATpvV`Y%EWhwxrp!GH;eT&5}hd0e&E0a<{@V0 zA9c1N;pHM?AhL43^j7ERr#BCupFY?u_588<=JjT__{!4`F<6pmQp747K7h)3`U>}r z`>dhOsF9s^b!4c~@nxD~fB+_&XH~R8n>50In+mPuGN1tjtKX|~<`pKOLlNdux>%a~VppLPDPy3+U`q{)+R_Z3 zLcb}rqv2h2CNfRA)sqjAB9@tN1Di>vN>;qAwW6LyNkOnv1|0C|xU#8*xLvu{7B7K8 z%yIcBIleN5T`Qco6?>QcFtbG@m(rO(w;xdkepSn<-(@gTEh$K&?h52G;ai~jmZTm9 zezEsTIN^<2P0~4xp#y}ZjEHj?wo(tN3cA-;zWaL% z;8%<~*+23C`|nE66C~(hjufc69}(P4?%t0|3#*VFh-v$WpGsF4KX&6mJNGM^{8!j$ z5A@O#_d6XY7*rM*0y@o@ueB^BJ`C$jA3#vNy^ufP{byqo?z>m-90^CYNro8Q`aGSQIq61lnV$xR%2rMM<%au}gDZ*VAZsg(_fr)SLht2Za72w5d+vJ9!_z~~i z$TAP__2}2b&wOh;4#qvA*qbXC=GMCSh)o+~kMi$lyd<_(TZrO>yNPb=zaMxHGx$x) ztqutEN}a1WvTI|2J)oe5BAg#ZTlS}bkwM&Fr%N}2cu0nQ%$NwJQ$cTSq*7S}u{_J& zr3bIcH_N?UADKn1)|-@J*D@mD1mV&DBLmQXno+7fFF<4R+y&KZp-%Pflxq5 zyU4`EAx4G}PW=eSqF+6c0E9cPCw7~km!dN+$+@hAQHn2@4Xbeu`LG-uQk{4`LdoGN zg3r_B*{BB*Fg2&w3>$TKIcC~ZRm6x(Y(AMk371=K-;Fgl(?5U2EhzJP^xIoqIO2KU zWhGvmu764i8NkMHY$;<>(&6JV8UHpzTGdu}{1c4K?msvgv(YP~)CkjGWuuM+PCG$5 z(M9)jhQk>bi12J>9M?$=^RkJ3N$EM8+=&#m1@&N~tXVlV7Fxw(*}s_1fEn#tG%mG-tkM zTA4-ACehX|)tqaIZ_ft(4;zEdUTtjJ+&9qDASJjyuToJ`jI&Yei^&KL)a!B~9`W!j z+(M@@N5*~igo474hl|M*)ZvTkHKs{F!yWbxl1^yH&%n>@$p{oZ#4P$9(e`{y{tlca zD3cdP0hK-ZpZ*6}-uTw9cEJpz7kS@LE;}D#!F4{DUKZRk06*>Dpw5Z-L|7D2MED=U zPmYWRzm6k4ifuN@OKi_n{P;?qd=3!kOiP%VBMXu`iR04JkzQ*TEH+nAPsRb>#}LXP z?oRB1`UkL0Zcc+aRPZ zDGDR$1Yc_HaV7ZwKQb-%*WHMIg0CJoe};SLHR^eyCxWhQ=E@c)Jdcgc3LBZjeqp}= h#QvuRBV5<4CvA8`1D)dF=k(y~GBsV*3T2yD{~wVsRRsV5 literal 0 HcmV?d00001 diff --git a/design/multi_provider/multi-provider-design-doc-assets/image2.png b/design/multi_provider/multi-provider-design-doc-assets/image2.png new file mode 100644 index 0000000000000000000000000000000000000000..0a243aca5b5212413759d8f50af9a8fa4057ff8b GIT binary patch literal 16985 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 G_x~5`;?Sf3 literal 0 HcmV?d00001 diff --git a/design/multi_provider/multi-provider-design-doc-assets/image3.png b/design/multi_provider/multi-provider-design-doc-assets/image3.png new file mode 100644 index 0000000000000000000000000000000000000000..3c767d88486bc67389402d0c9221221d809da937 GIT binary patch literal 12371 zcmc(Gc|6qL+qWW18HCbMwuYplCL*$qWroPUFUiPG)@(yXBl{QzWlQ#bNn{&INTcj~ z2nl1~h2j42{Z_ue`+1)Gc|Fhld)wR742vSp31RZBRPDVxs zLcrxT$jFX@$;ggKQd0sgoQ6l^fX5LR4Mkb9f-h&Mffou(85J2avf_vnJ7&j#cbW%q zeHSt^y88XUBTbH3NHQ|PDTJJimWRn)Vn`uG7d3h16sqmr2#i%;oxS6}O*Dn{c!9Vsb z-xn0sA2D`!p^=T%Q_sf>?+Q=uR#rM{kBm$gxf@XIna{z-Z zH5b@9*i@RDD}aIVB*cHeLH`MI{{d0P&;pMDBn?&ucwjEeK=;4G^1vyl<&u1CYBqc5 zeQC+AN;e(rnCAqiF?mkNb6jzst)wBl`zZWG+K>zse!+R*C&$IzA#wI2WM^KEAGLmn zq3sCb1e1M}fevs${9U=>lw=;5&~>V2&O~bL5i)j2Drvvp6Xf^NcX(36^0IStM~8;f z)E2CvZibEyr>w81$4A(n(7r4nKu7FF)taOYUd_3!-Op?vC0J#=>Umbm-OlP}Db=5W zWI(RkJ-xk(pV0DQMW&Wn?IV4Ce1!ahf*3x7nBaiAIKgxDSQ)XCkn{9CR+)sZ_~NoMof}0aLXcwy1(bRgJ}B8%^_(8t=dXI(%)2L! znHf1Mbg#ePd4epJ+Sd^#^j4^CsS0n01>+MO4ktq&fEL_YDfKm?e{}C&O4m8BljCK* zYJ$O_o!9b2}-`zJN8R+siwjE~Sm|#}5 z_?GPD8xQLskW=(#6Fw+3%~Ml>{vxht>X~WbgC_Na$BXaN*yCK`nK`O6Hg{tAb zmr6l1_S-ZS*cAXhc^H^GGJ#Py*#zKhIy2deVeSULUHV{dlyPg;oJzkECJ+{`*yK^mUN;{!9 zB1@Fia>{z)gx<&__JM0z)Z$k}P~m_j6aYJzSmSspwe@o^=-MHZys^L?#@gY!Jf_oI zll8(pMZt6}ZOPJ=I_h``>#jQVd`_9JH9tAyxtg*x`8d7w!AW3+xx`bxR)_^}tyWq) z`ri)X$}-Za_ViOIYuU3#xdy@5vmQZxbe%qTR*wJP6VBsNp`{yj0jn7x(s#|7hD(BC8VRH_!Lpd^4@Zm>if8!9-jSVS*(v505z`^YA&AGCIVb2` zw$eE`h`|(Ok3LW71tGft7sb$$J$k_j{tVz2gq-XpFI?d@Czzs{j4X==+kP2NDFY=V zvw4CPI`RMbDP{n>WV$|kX})r**NirVr8Y}+;RRKor1&Gg-Mb@+4ecSOqN}x3*NoPB z=xI?uE*{LER)+LJ_C9T(r>{=ioc1<7e*W!DiJx(`@80A=Pl4L4s0NhdP5UW7`m)yY zLNBMKd5MLyTP>QH(E9+?Vow5iSOK`hW8?<_9pMU`aLVtL%^#_-CjsE(1V82kW7r_) zIp7LD7}_UDiYG{E2TZ6BCwS?>opNH^9_9a;$^57sCb;4f0>E!6yJxi?Sav++3@$ zAmJSb>1yYUj~v>(+c0R?x9zo7iM1}qp$*2D=pOcMN0QDk>rg(iAV(_QX0UThVj#x# z%*S5)K>-N!?$7D%_A+I;jy13FZV?CZ$`9@kb0?=_kJ%4F_be>ZMO{fL*r!jQ)@}Ls zp1Vw#+Ff2=Zd(})FEd?GS-6HWb(8tEL)LKg8f6-xqj5l_%K(o<_HE@8*C!;j2j>Yh zcopV1Nzc?RI_-7o10dXqw<{6Qq=y<%)%E)cki_1xnR)&wrN$-mrr_@G?#FslyN^-Z zAz@)*%Q_aNEv%Lez3mj;GqDr*QK*`)zBP(Nz4?OI=^*DN_g(O45QY{63bkd(#dj+r z8g<;Zmy_}#^b3?2) zIEta$x`tg@S$V?6Ew{;_Aj{!Wp+!&Bt0wD07(aPVy_ca@W0LJ)reRH4Pspn0w0Vtt z=kS?B^QVl`fKH`ZTK0)-^3$k~+rWfDBU@b=nBvHbI&tn0;ecV*S~K? z4JP^0W#9I&=1)#;;Xou$?kfO}W}VjJytUPnylzF^5Zmd6>qglwJ`M6m1b&x}yrq{2 zn1OX((kk9T(b19+G} zV`FJYu4_{LR!ubRBYxgUTH&|Wu({ssYdYliHAiKaES|Eu^VqlL>vEw$dpo6dBGcEd zF%U^bCLqK6ZfULgm%zKEt|QIQ_8~Y_8bkZ>GX%@kb?KY;30GU#DV@e2GJJTtONCHh z5BapCoTKpG%vX17IPmjY%yu6eq#i~iJt8}nGc4nN>0%%7o@+t7tdtqL7-n=N=xy3a z-x0Q@r%VIAC~qIl%ljbjM)c(;=g*zcku;7i=yhgdoM~=@f>Qb(AkH;2^u%*_Y-qFm zT9pixQzS}>(hl^$N6d4>euRkNkiAVq7-8lS@;mvT#bni!Hzo6LNDSS;fev8;0JGO~@_82fgCph{nB%=rHsDob^s z?BY(Z^o)(qjcpd2!z>1m9*)ZSxX^vPr8D-+(lapNFW1~?03b2&Q`s>HxwHQ-dos8L zMt_i9BJgk!2!x4z_8H$wqt=zyX3*iG5~FEB@m8YpGdemtlr`rJ9Iz?34TS)w0{t?U z=>(+J84GiB^Q?rDqN1xFmw(2s?|=?ZBz6Hz%myG+Ff&bph4?v(KbGlVf6mu4G-Tt? zOv9#_(1Nlzop0`Y30y%E6S@h|Zx?LJYh`9oe4qKHR4&F#<#@cwexB9+pT?10ehG&J z;M7~6{;++fC7N;U@KW+)Lo4|@CF4K%1DvGnJQ(W|^p?VCI~aaJIrm|k*WPUOVnNCV zGV_hdu|NLy@iQRPO{Evq_V-e@S#7imla0Tr5^jqzn<_Hpd?6#Kc;W8W7SJ8goes9< zHjzSoQxJ3WqpyEQiZ7v(2KLu`l-2^-8i&c32xQSO}Dxwq+Q|YDjtCvts zfj#yO0L&_Q8P(@{s#r&$)qHN|>*^1cQ<}z!#<^w{>vnxJOuTXDQ%t`Re^ue2mJx(c zr!dJ@cc~jS6PaCknhx7uuun;;DViUN-FmQ-?L4wQ(Ye>5cY`-FG`|3x`ZstBB+5D* zeW_p^K~hWi^Yt32ShMP@W*EBDO7VK4Ol8_d&F7rXu)y5Hq;&dU=nkq~^WCge5pW$r8|}D6hB^R*Ju#Nn?`3?zGcgM65x1+& zR@^L&z&V!3O>#q*WU>S$)vl+}6Wi%bHb?+QRu8Rvpn^m8TnqO*kHoMIaE)qVl z6R2BrQS!YFmX`MNa95w67{hVXH>$10j*>3RJpx7SLJU zk-Zq9!ch8^7X|i8h$%lopI#VN)5Xj$oaW*KoGg~ zD}G?I5$I&5lqQ>1`-%noBE$<{U=Kj3%@FGJC|Kvs(>cAoJ{dJ&d^qB;>jQFdLFj^6 zw_OVYfJK+Pe60}*jiROT@3v;TY5!4fO@9F~AbxMHZ)Q_$$G!I$;CO!~R8kl@Jl0=! z{`+?zF8~7CA2|GrEBuBvfExbSozFLKzK=K6xaBnGD04Mpo}>afFACIHo+9lwwoa=9 zsZjjLpr7ATP-5Yw{~R_tJe#vBFaOMwhW?6G)78i{DX^3+hW3%K|3P9XCJ3$!@Yvdh zyap1-DF6|H6f&(7tG;%9>7OlJbw#GO_T+F%=~@}+i+u~n(QXHM)cV8#Wi1kAv(;&! ztfd1L>eq~tBrOBAG_qB;gW%Pn-`r-MD~9S8Oa@A5zk5g18ha>P;x;EP?{%Ya z>Yg|R;m4s>;IL+J=4jXFX=Yyq3zeX&)vHbeosmFDdO32Ctz%RXXg{N;v9wYN*h8%* zN@!55l`q;$QmAE&FhTZ5EwR{?;S(zC+VqX36tF)lcU6KyXqCjyjxE*mbROD1O)M7> zOg|+Bmj-f^=$a@>8VZXp6*Rw>$BC7NTT>NY&INC^2!nZwpDX-sMmQ&WSSur0&9noRD(WE z;eEdt%cfXtwF`Mmnc~4e$ zyJ&rBGdC2p#a^(`wBJ@k zr{SkYcb@-4X{2u)K(`dJfq*i>p`EFrq@8gtGV(fFGnwWywSM>+6=_Iv;yQTY4IUJf#Tg_q?OO?`~~#x zLtY$h6iuyBmWZ?j8!!8`7!N8B%FAV4SO=VF{4^Re(9eIJ#3Z337-XUt!9%VCFq7d^ zxZ=ry^(mdg^tJbn$z`TT)0^N5Rr`g_^O#EPk#EJJGYt$;N@&(Or?3S83NqM1Fa(Ef z%_kzB=F!zicp$%4GKkQ((y?8sA}?QZcWtV|D{r~dQQ~S&YXJ9<ktPaptipkLt@0W&bl||4Sg0g&gcAW0>oKc(>bw}f{m$;8H zFH2>i*xVXWsi+ZQGgvD8Q^DA05Q9JgV~mkPc)e1))t`0K6`HQ{t+YwWAka(f_VK(t z)`#8M+a`27F8K)#_NwSId4kYavw9wUk{H&^f;7|fk6gqZLf+{Ai(~)K6<+_%Gykey z>wR@=FN9GRc+F6u|B-9|;w}gE<^Sc2h9Ok)?acDniP+k=39gjgU)`2YgaBM@ug#K* zj6`-ohq_`yR|-6f68h;bmm z(+%-kNiGodog8EHu2&veY#+<3*`Te_eI)6R3uMD^3oU#*`(sR7_v^J)lOtQVIW{b48ZQY{SxnWaJ_*Oc6-WRh-0W`^2~J!f89CLx zDZkV5lS)!^XPu3ne(tOB4_xe!(N5qcDT!a*5skLP%grepVl=8iXi{TkWILM3nXocHuA#ohMuzqS43lem{4q^4=SrO9 zJOSP~3uLL7)undeaV8F`X$^7>$ujp^vlkJO=h0=dgRP40;N;@|543&2$^SwBx8|HKAMFql>LF zfAxZlz0>MO*$7Shsw8Ln$7pn)FFEzMoWbjgwbjSBU!{-+H+;0_IsyCqOK%?@TPGm9 zrhW6pI1vKTl~mQt`_h$F2@Zb$T)CYvS59m`^X7}760kP}utbNdbP5#*ve zk$q8PeIMqV*NV|R4(2Qn`l`Fp3Hk#~wVtCfjaX`jQ`f$Mn!x|BcQ?O^e~ z6^hO&C6$H4N>z^kB2P53YtHx0 z?>*D?+t3UAjE8@R*>#hGkqjjyxmkie`EM0Oxut|}^;|F5)}D!^l`TtthN`gt+nAtp zk znozM_FxDdRkYyi=oYn{Ndd^?)h0K=om9|;4X**vUM7Y7%fvSuwKmt0FeSQotM29&$ z(2eYdjbUf-lBEkZyAkYQ{wibFQ0`8k62JeQEN`=5@^0)spfXftJyNx_Tf5Q#R|Ga) zq5a6Hcf{T}FZ<8jJ2;j$3k0z%7mGQ}pM&zxq)GV7~2i3ML5@Y&wnz924FN>Tw%+bcYGx^cuS4y z`LJ{}G}8*eF)|;qvP(5-{r;`hL}AlV2H6t1CQeZ5PX8pkAiL-;bN$6Dz&dT@U9JhK z<~TAE-?WL)(KH4+__eU`1Yok|>Mx4%2B}MMBFki;A7k1-sD=gE1gg4ho9@Ipo(#a~ z$TeL=YYqUW5E}aBY^2dt41;VX1Dk4lv2y)I;!~b|utL9LKQZ@m>ppNV##luxVY%0D z<9h9j+gxx;u$;@4uI{V~mH>v1%)SS~Xiu=}a}x}$hP$9mlX>_tuCxU+QHx3$=#N{( zH);#VdMh{sS`6((<(s6@n#&Z;ah;)J=D@w1AJ-~}BakqON}uWA6WD8(qoF5dsln%H z(4fo*DRpy}4m{(QQX_o$HGdArv7qFgE|wV;(fy7uc+RP|AEQRBxGF%anSF>;OJg6; zjqrJHQ_Wuyc)PxiT`8!vo{AO9_2_>Z7;>)4Vc>&)tec4S z(vP3sL|M%rV@jarLY4q42~VfZ?7CwMsfUau1^T{4oHbd>sK;qM_)*Y$I&-1=^>-kS zGF#Tph46?M_&%6okxjh`L|dxD3wGik!i~$dln65$e)l;cjA>sP?^%XgWq#XVQcw^m zbBe%Lf6>sAh)qGSg_v%u_xG8sD~4E%S0T9FN6LVST)vH_DBwd9P~EYVvfMICJjkX~ zBGE^eciGtaC0!OCDjn%pwWE4hM#BX$6$*GI=qxr24Z@4*^NcrV_7Fz>rD}fKTAbe+ zbQIOPkp~13ptu4y~(@3Fo+VCU!+;kjWRhBZL<4C}}EFlX& z2>adadiUN+Xw~IMQdP+7ha)D{TfuC~2+f5Ew4uf{M(aT%a8=4qaAa?=mZK&6b&7Y2 z$q!fdVZPOd#dJqeqw3|)<+$>#k}NJi(}LqFC*hMD=`IX=8+$YJEKT;xXh|~C5tFLz z&UCG4&=_t5w{qGim1Yoz%^2nYmBYnWTXX$dsyMc0?u{oue+XR8(pEp8U#4XGr2ElK zND-?$TY-rCtkGuo*IG;T{8O*zot_@4SudD=&DM9Tc0t#L!PKoi@)Hw%*ZK<#95WCX z1c5pJs0pk!!t0~Rw#a8awqpY&jXs9#dagxek7mY7oj?0x0k{vga+--|ZFPX5Cec1i z!N4Aer-+5E=?*_Eaa#EH0Od9IcwqQ3X4a^$%jH#yJI%9!0I~YH3V-_j8!htGjrG=F)Z`-$<}_im2VVB@ryn6UQ$BLX;D|ZX3SQ0oI&NGINBPkewX6O z*E=W0gYDK^2$Je&E5_q@Ta~G~@_XceU8ImSX(IC`3vqsAp)8&0F|Y- zW_%<5Lh9x4@z2*fp9itVDDr10dOFtu`z)K8^x(5~f58J<1bVkEwsz90*nFWq1r)~% z&?@!)bacNg=uCS5UbeW*-5DCyz}m+%(e<~F9*A@3%&iPv&r)mVWjq5Wee zoN!lGrt{T;$k7wDE0P(G5@UQg8)89)KaGw*1q}B6Jj#0nkAG1Aqyg^w(+p`&FAaD*F z`6$g%X3qUlDVnoCWHm3(-K zC5so|221o`kLPbN7uNphiF{RzfVyre4f1~7KMcrKOD*tYCc#2W;H2@i6;Tc5y*peG zuvd6W6W*v2WFJEtmahU03Iqa!!jq+e+<8_py3fH*D_g4*?cu#P;>=7ZMwCsc8j?C! zE3`{XBr3M*{+huzPt|nkR12fvsdYt;ji#KHh`Xm}Vna%Os{~hDCkZ+dilzEc2)5Fl zl4Y7Z;CndQLipB91nf2PYqg}fzVybLeD@bCX2UmEv|ZMjy~Fo947G$4&weL2Ilf?!!=UB-Y_a);#z&gv9mF-u6!wzaPQ)|U0nNC*Et#YExC z`;;t`+yS@Gzd#OWj8JFWXxxoICcL+I0wcld@ zNm+QoRHZU2ngdW2M%`XX8yp{E7HVUd^J5kq?06^V)Ao%lWtSb=&uc4SEUo;jV%YUZ zhREb130JzU3U3G4RcbCxWnG?npsGO~iVgKl9=Gg@p_ON`)ewpGg{NP6{n!j@QZrd_ z4~Su>75B!dc3W=)mufr9MzQ%n*0QPUevD+x-0{AyfM~qcx}=;fY&4dd93Zj%StNRV z^P|E;z6%eDnZAM~52wX(Q#0%ZE+nt@_=i?tOS?7))6_t=e1?g}&{mh7Py;3@MR{YB z7kpWSpqN^fR_y_U5Z|`>*`aclOjDn>wvj@u?q4IHl=-pLgZ)3|Ye3+1)<{jz|8R@hVOZ(38wKIu8e!m=%(?38|>9D9f zc|sN*`<_0{E#96aZJ@QvgeOjT?6VsYIoKtev)ynT=Vz50By>H(HD?-;qIbD{8@XCpDan; zj!lKzE)KS!xbWGFx2rRCL*RLvwaIwn8vuM-)#>wDubpEt-OZ?P0H{>7#Mza_hSyiJ zjJvJ;gBm<_hqUMjj+2)go+~xJ{pirWNCagt-pfkS@lQP7jBo%8&5kd2jHTZ_`@(TK zw^#fk9eS6qER6T$jh2)R0ELh~kh1`{ubv%kW4Uu~oDekMvT{Nmro~Em)1}vv5P9rP zE~|ZCfnJ(*K2j)%Ca6s+L-@~#_X-0=8D!zZQ)dd%tv`NRTX|k>UC7^X(J@z9wJRhZw%SgJddfY6*oUb{!Hon3Hx-zI%#fnf-=%S${>i3j8t0d_9=ZxBpw5^{L z_k3AB=5lj#p=X)m=vwIvp%j1D_L;ANB`-G^0D3Ww#Jew(EKrwvKX?jfvEp^cZH{V~ zfPOxIeU@Ohe43P@WZY$I4%;E(_~d0_8{#aVHf%1?PhlCcS3kQvpP-?DQvw&(O`0g= zU_&+@!VA)%V&Cd3iJF;cud5>t8}{ati`welF83r(7>-U-WUTB$5M^P+H^p4OYf4k3 zshSDa`96n(Wqf~ro!!155zXBAc{KOEm#RjdrP-yOgm`h9~o zPB|M+008z4{E1!MWO@t$u&3ahug|5dE3z4QvhWOuyDq(fE$`_E;aA71e!%1al4pXc zX92s6y$&-lnX6>###N(sPWIcyO_SSRlC?Pk*E_r;x2)d?b{a7Q4_19rb{^25l8}(l z++&gU!O^2=p%5ey3elO_*~Zi$l}eRL*K0M{%njuW4vAnwh05XeteTpdYxF1KJJNo& z8VsPE*j~GgF#8%o--QEuM48g|l-LRKp!t@rg{a+w=5hZ9A^w#?MyPQ~H`k-s-eDOT^4N!s~x*PmdG z2VF3W$xK0J)VktwV$z3Lokv0Q<{>mzIL>z z1ci?+Z}SqI8*vhB1le8A7#0<%pEAObec>6&2PCG6W1&S6%n<(wc<#|MkYw01MGdVa zzCdNBhm*L#^g_=S9+FWt9;?ewT!fgWb#fD57Z4NTPmrO{*JVTMjjXsq2)~fqi8(R> z*Q0&u?p@{&o;o6Dk;fbDP{Kjc`{+ z(lsMGCZzAX2tT^}!m|}YzSp!I92dAZ`*^~f@0<6)dJa2&R{qF1U2yqox+@+S)m~!D z^^~!$O9`}n{F5=#56$CzW3pb^ASgp^dQZyIEfnq;c?eMh^f=Sf)T?IY{mWZRIQ`dP z{cY;rSOa{!F(IWBg3Vxj`5u+{gK_u|(SH6Z{>wrXw~gT-=bSGUc& z{4u0Maa7FTWchzjQjTwBhVfNooP>&$VcYvhirxC}z`jkb&GO0Zv~s!Y|FJ*}RMdmd z>q$$$hqja4cu|2oN^<3~NlOG~jf&Knd&tvlAT}0B%%P$QY|O%=82^cq7LWbL-Qsum z?F8Pf)%H!%3VG3Q|D0DUoCXC3+i)a3B=aj-fh2AAttxt3=u*bT&-9(L9h>Y5Opc8w zg*$UY8Z$0f&tmPRtj)+~8)&d%sYI5IVHKmQtdVN=i;3g|wEBGF);GF^sU7N(qRveT z_T4lrpX{X!Zo)}6MPv2vZtcVmH$_sUM7;HGYbzw^MLXvcIJuhg(*K)><$~@j%5f!Fi1M zdq|zV5ZnDw7Qnv%CQ!zpO+%u`C#s@#bKiI}zQD6x?L}2M|54t=e@qtp(!a(!u{Z-4 zHH=XA=F%NDGl%Xia%@U54PsTV$ItrU*FcNEI=9SPB6J|y@MnIxz^*(&>qq5EseRec zi;;zzH>+FQzg$YvrX|$f#tn6&Bc6CHBI@p?Y!q2Bq*Z&nuk>u5=(yBs>kt}X^YA3R zo(RdU(G~dXQ#*WD+|yT}4|s8!U`=<}r@>8drhs!ejTxd$BajoU+YTVr(=60K- zr1x12{RZ;Pe~UmGd}^DtkwM-=HVrFnJo0~M*9=r{s(3DRSE*k*P4QzlhM;hRUR^V_ycj)#{QPyK@LAMqSUkY&Us{r3NMAXec0Lc}7e*gdg literal 0 HcmV?d00001 diff --git a/design/multi_provider/multi-provider-design-doc-assets/image5.png b/design/multi_provider/multi-provider-design-doc-assets/image5.png new file mode 100644 index 0000000000000000000000000000000000000000..890985f647a5768262799b1cc1baa62652ce208d GIT binary patch literal 18467 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 PBXIrd%`1g!<{|$JTSc7b literal 0 HcmV?d00001 diff --git a/design/multi_provider/multi-provider-design-doc.md b/design/multi_provider/multi-provider-design-doc.md new file mode 100644 index 00000000000..fca4c489694 --- /dev/null +++ b/design/multi_provider/multi-provider-design-doc.md @@ -0,0 +1,334 @@ +# High-Level Design: Multi-Provider Support for DAOS + +## 1. Summary + +DAOS and CaRT currently assume a single fabric provider per deployment path. That limitation makes it difficult to run one DAOS deployment across multiple network fabrics or to support separate client populations that must reach the same servers through different providers. + +This design adds initial multi-provider support with one **primary** provider and one **secondary** provider. The primary provider remains the normal server execution and server-to-server communication path. The secondary provider is introduced as a client ingress path: requests received on the secondary provider are forwarded to the appropriate primary execution target inside the engine. + +The result is a single DAOS deployment that can serve multiple client populations across different providers or network paths without requiring a separate DAOS instance per fabric. + +## 2. Background + +Today, DAOS and CaRT largely assume a single provider per deployment path. That assumption appears in: + +- provider configuration +- interface and domain selection +- rank-to-URI registration +- attach-info exchange +- CaRT context creation +- bulk transfer handling + +That model is too restrictive for deployments that need more than one provider concurrently. + +The main intended configurations are: + +1. Different providers on the same interface, for example `ofi+cxi` and `ofi+tcp;ofi_rxm`. +2. The same provider on different interfaces or domains. +3. A high-performance primary client cluster and a secondary client cluster that still needs access to the same DAOS servers. + +![Example topology with different client providers](multi-provider-design-doc-assets/image1.png) + +*Figure 1. Example topology with a primary CXI client cluster and a secondary TCP client cluster.* + +![Example topology with same provider on different client clusters](multi-provider-design-doc-assets/image2.png) + +*Figure 2. Example topology using the same provider across different client clusters or subnets.* + +In the initial scope, the deployment still has a clear ordering: one provider is primary and one is secondary. This design does not attempt to make the two paths equivalent at runtime. + +## 3. Goals and Non-Goals + +### 3.1 Goals + +1. Support one primary provider and one secondary provider in the initial implementation. +2. Allow providers to use either the same or different interfaces and domains. +3. Preserve the existing primary-provider server execution model. +4. Minimize client-side changes required to use the secondary provider. +5. Keep the design extensible so future work can support more than two providers. + +### 3.2 Non-Goals + +- No runtime failover from the primary provider to the secondary provider. +- No automatic load balancing between providers. +- No server-to-server traffic over the secondary provider. +- No simultaneous use of both providers by a client within one attach session. +- No attempt to make the secondary provider performance-equivalent to the primary provider. + +## 4. Design + +### 4.1 Provider Roles + +Each configured provider is assigned a role: + +- **Primary provider**: the normal DAOS engine execution path. +- **Secondary provider**: an alternate client ingress path. + +The provider ordering is significant. Provider index `0` is primary. Provider index `1` is secondary. + +Although the first implementation only supports one primary and one secondary provider, the design should avoid hard-coding assumptions that permanently limit it to exactly two providers. + +### 4.2 Configuration and Initialization + +CaRT and DAOS configuration need to accept ordered provider lists instead of a single provider value. + +The initial proposal uses comma-separated lists for: + +- `D_PROVIDER` +- `D_INTERFACE` +- `D_DOMAIN` +- `D_PORT` + +Example: + +```sh +D_PROVIDER="ofi+cxi,ofi+tcp;ofi_rxm" +D_INTERFACE="cxi0,hsn0" +D_DOMAIN="cxi0,hsn0" +D_PORT="31416,31416" +``` + +In this example, `ofi+cxi` is the primary provider and `ofi+tcp;ofi_rxm` is the secondary provider. + +A client running on the secondary path also needs a way to identify itself as such. The current proposal uses: + +```sh +CRT_PROVIDER_SECONDARY=1 +``` + +That should also be representable through CaRT initialization options so that the role choice is not environment-variable only. + +On the DAOS server side, the configuration needs ordered multi-value support for: + +- `provider` +- `fabric_iface` +- `domain` +- `port` + +The configuration should also define the number of secondary ingress endpoints, for example `secondary_provider_endpoints`, with an initial default of `1`. + +### 4.3 Engine Execution Model + +On the primary provider, the engine keeps the current model of normal per-target execution: one CaRT context and one execution stream path per DAOS target as configured today. + +On the secondary provider, the engine creates one or more shim contexts. In the initial implementation, one shim context is sufficient by default. That secondary context does not own the real target execution. Instead, it receives client RPCs and forwards their execution to the correct primary xstream. + +![Engine model with TCP ingress and CXI execution](multi-provider-design-doc-assets/image3.png) + +*Figure 3. The secondary provider terminates client ingress traffic and transfers execution to the appropriate primary xstream.* + +### 4.4 RPC Handling and Forwarding + +Primary-provider contexts register the normal RPC handlers. + +Secondary-provider contexts register a shim handler that: + +1. Receives the RPC on the secondary provider. +2. Determines the intended destination target or tag. +3. Schedules work on the matching primary xstream. +4. Executes the normal handler there. +5. Sends the reply back on the original secondary-provider RPC handle. + +To support this cleanly, CaRT should provide a way to preserve and retrieve the intended destination target from `crt_rpc_t` even when the transport-side tag used for ingress is not the real execution target. + +A secondary-provider client should continue to issue ordinary RPCs. When CaRT detects that the client is using the secondary path, it should route transmission to the secondary ingress context and encode the real destination target in the RPC metadata. + +In the initial implementation, where the secondary side may expose only one ingress context, the transmitted tag can be normalized to that ingress endpoint while the actual destination target is carried separately. + +### 4.5 Management Service and Address Storage + +The management service currently assumes one URI per rank. Multi-provider support requires rank metadata to store one URI per configured provider. + +That means: + +- rank registration must carry multiple URIs +- lookup responses must return provider-indexed URI sets +- provider ordering must remain consistent with server configuration + +These changes have interoperability implications and require explicit review anywhere message layouts or persisted control-plane state change. + +### 4.6 Client Attach and Agent Selection + +The attach-info path needs to return provider-specific data so the agent can select the appropriate provider for the client. + +`GetAttachInfo` should therefore return all provider-specific attach data. The agent then chooses the provider that matches the client environment. + +The agent selection policy should support: + +- a configured `provider_idx` +- provider index `0` as primary +- provider index `1` as secondary +- client overrides through `D_INTERFACE` and `D_DOMAIN` + +A client still uses exactly one provider for a given attach session. After selecting the provider, the agent returns only the provider-specific URI set and network hints needed by the client, which keeps normal libdaos-to-agent interaction unchanged. + +### 4.7 Control-Plane Networking + +Secondary-provider support changes the DAOS data plane, not the management-plane transport. + +The control-plane components, including `daos_server` and `daos_agent`, continue to communicate over the management network using gRPC over TCP. All server and client nodes therefore still need access to a shared management TCP network so that the agent can communicate with the server even when the data-plane provider selected for the client is not TCP. + +### 4.8 Group Membership and Address Management + +Server-to-server communication remains primary-only. + +Because of that, the logical group model does not need to become multi-provider aware for server-internal traffic. Servers do not need to exchange secondary-provider addresses with each other for group communication. The management plane still needs to preserve those addresses so clients and agents can select the correct provider-specific URI. + +On the client side, group membership remains conceptually unchanged. A client communicates with a rank through one provider-specific URI at a time. + +### 4.9 Bulk Transfer + +Bulk transfer is the area with the strongest provider-coupling requirements. The source and destination of a bulk operation must use compatible providers and contexts. + +The bulk handle therefore needs enough metadata to describe: + +- the provider type associated with the handle +- whether the originating side is operating on the primary or secondary path + +![Bulk-handle auxiliary metadata concept](multi-provider-design-doc-assets/image4.png) + +*Figure 4. The draft proposes auxiliary bulk metadata to identify provider role and provider type.* + +This allows CaRT to select the correct context automatically when a bulk transfer is initiated. + +The initial implementation can start with on-demand secondary-provider bulk-handle creation rather than introducing provider-specific bulk caches immediately. If necessary later, the design can evolve toward separate bulk-handle caches per provider. + +### 4.10 Binding-Bulk Flow + +Binding-bulk flows need explicit handling because control traffic and data traffic may use different providers. + +A representative case is: + +1. A client sends an RPC and bulk handle over the secondary provider. +2. The first engine receives that RPC on the secondary ingress context. +3. Control is transferred to a primary xstream. +4. If the operation is forwarded to another engine, server-to-server control traffic still uses the primary provider. +5. The actual bulk transfer must still happen on provider-compatible contexts for the original client data path. + +![Binding-bulk flow across secondary and primary providers](multi-provider-design-doc-assets/image5.png) + +*Figure 5. Control traffic between engines stays on the primary provider, while the client data path continues to use the provider-compatible transfer context.* + +Reply handling must preserve enough transport context to send the response on the same provider path on which the request arrived. + +### 4.11 Subsystem Scope + +Expected subsystem behavior in the initial implementation: + +- **SWIM** remains primary-provider only. +- **IV** should not rely on secondary-provider client bulk handles. +- **Control plane** must understand provider-indexed address registration and attach-info exchange. +- **Agent** must select one provider and return the matching URI set. + +## 5. Implementation Phases + +### Phase 1: Configuration and Address Model + +- Add ordered list support for provider, interface, domain, and port configuration. +- Add provider-role support to CaRT initialization. +- Update management storage and control-plane messages to carry multiple URIs per rank. + +### Phase 2: Secondary Ingress and RPC Forwarding + +- Create secondary shim contexts in the engine. +- Register shim RPC handlers. +- Preserve the intended destination target across ingress and forwarding. + +### Phase 3: Attach-Info and Agent Selection + +- Extend `GetAttachInfo` to return provider-indexed attach data. +- Add agent-side provider selection logic. +- Preserve the one-provider-per-session behavior. + +### Phase 4: Bulk Transfer Support + +- Extend bulk metadata to identify provider type and role. +- Select the correct transfer context automatically. +- Validate binding-bulk flows where control and data paths differ. + +## 6. Compatibility and Interoperability + +### 6.1 Configuration Compatibility + +Existing single-provider deployments should continue to work unchanged. A single configured provider is treated as the primary provider. + +### 6.2 Wire Compatibility + +Any message-layout changes related to multi-URI registration or provider-indexed attach information must be reviewed for compatibility across mixed-version deployments. + +### 6.3 Runtime Compatibility + +The initial implementation assumes that all nodes participating in multi-provider mode understand the new configuration and message formats. Mixed-version behavior should be validated explicitly rather than assumed. + +## 7. External Interfaces + +### 7.1 Environment Variables + +- `D_PROVIDER` +- `D_INTERFACE` +- `D_DOMAIN` +- `D_PORT` +- `CRT_PROVIDER_SECONDARY` + +### 7.2 Server Configuration + +- `provider` +- `fabric_iface` +- `domain` +- `port` +- `secondary_provider_endpoints` + +### 7.3 Proposed CaRT API Changes + +Potential additions include: + +- extended initialization options that describe provider role +- extended context-creation APIs that describe provider type or role +- a query API to retrieve the intended target from `crt_rpc_t` when the RPC was received on a secondary ingress context + +## 8. Testing and Validation + +### 8.1 Unit Tests + +- Parse and validate ordered provider, interface, domain, and port lists. +- Validate provider-role selection during initialization. +- Validate preservation and retrieval of the intended RPC destination target. +- Validate bulk metadata encoding for primary and secondary paths. + +### 8.2 Integration Tests + +- Client attach over the primary provider. +- Client attach over the secondary provider. +- Different providers on the same interface. +- Same provider on different interfaces or domains. +- Binding-bulk flows where control and data paths differ. +- Restart scenarios that verify provider-address mappings remain stable. + +### 8.3 Negative Tests + +- Missing secondary-provider metadata. +- Mismatched provider ordering across configuration fields. +- Bulk transfer attempted across incompatible providers. +- Primary-provider outage while the client is attached through the secondary provider. + +The expected result of the last case is failure rather than failover, because failover is out of scope for this design. + +## 9. Risks, Open Issues, and Future Work + +### 9.1 Risks and Open Issues + +- **Shared secondary context concurrency**: multiple primary xstreams may depend on a small number of secondary ingress or transfer contexts. +- **Persistent address consistency**: restart behavior must preserve both provider settings and provider-to-URI mappings. +- **Wire compatibility**: management and attach-info changes require explicit interoperability review. +- **Operational clarity**: provider ordering rules must be consistent across all configuration surfaces. + +### 9.2 Future Work + +- Support more than one secondary provider. +- Support multiple secondary ingress contexts with load distribution. +- Add explicit configuration overrides for provider auto-detection behavior. +- Revisit runtime failover only after the primary-secondary execution model is stable. + +## Appendix A. Figures + +The original design draft included embedded diagrams. This final local Markdown version preserves those figures as extracted PNG assets in the sibling directory `multi-provider-design-doc-assets` and links them inline above for review. From 3e660c20be57471c5c7a9716701b61243bf83c16 Mon Sep 17 00:00:00 2001 From: Alexander A Oganezov Date: Thu, 17 Sep 2026 23:15:39 +0000 Subject: [PATCH 2/3] - Incorportated review feedback Doc-only: true Signed-off-by: Alexander A Oganezov --- .../image1.png | Bin 16822 -> 7413 bytes .../image2.png | Bin 16985 -> 8067 bytes .../image3.png | Bin 12371 -> 34133 bytes .../image4.png | Bin 1776 -> 1295 bytes .../image5.png | Bin 18467 -> 11036 bytes .../multi-provider-design-doc.md | 83 ++++++------------ 6 files changed, 28 insertions(+), 55 deletions(-) diff --git a/design/multi_provider/multi-provider-design-doc-assets/image1.png b/design/multi_provider/multi-provider-design-doc-assets/image1.png index 116f6c874581724b355fe7b9d94bd00361d895ff..51a2a5a550fcc5f2d960af19bcb46b2745c89fc4 100644 GIT binary patch literal 7413 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%0DQEI)M$C zBdq^*g_Suae*u_N4(tP2( z=ov#{_<(`{N_Wm+6YLui$#|+Vm0@p>H1a&!I#wmDgL53c9TsB^mzXYXvhl!Ivn8b( z3^7(#Z4-wzWXTk@n|?q={R%t?%a4L8Qnx+7lvuz7E; zxM7}*8GOB3L9f?^F8rpz<49^VHM&%2@qoz6oA&g ztta|0MhYsdj{ zV!^ebA!Wg+fFsa5?4a3W)VJWH*{{`7P9B?^)zzozC9~QbtM;*!eEy)D$SPXk)f{3; zgQrQ-k}GP=AgnbLRF}~B~^{yoxr)UIzYJ=uiV?8?*Fow$PL2ZyM)gWHJdvOY?RTeyLc9lQ+Y|~nOG{F)^-}&*Av_^Ji+gG2hpQTKonp?7q%aSNn+rGt*>2=?20sZLJ;>iNH#Nc_l^GA+A_e4oLu`#*4CA}W{s0?g# z1X2r7ix}Y^q#yLYHF?T=p|%lyvZ>V|0s}UUYPo~WcP)r=@~0ATpvV`Y%EWhwxrp!GH;eT&5}hd0e&E0a<{@V0 zA9c1N;pHM?AhL43^j7ERr#BCupFY?u_588<=JjT__{!4`F<6pmQp747K7h)3`U>}r z`>dhOsF9s^b!4c~@nxD~fB+_&XH~R8n>50In+mPuGN1tjtKX|~<`pKOLlNdux>%a~VppLPDPy3+U`q{)+R_Z3 zLcb}rqv2h2CNfRA)sqjAB9@tN1Di>vN>;qAwW6LyNkOnv1|0C|xU#8*xLvu{7B7K8 z%yIcBIleN5T`Qco6?>QcFtbG@m(rO(w;xdkepSn<-(@gTEh$K&?h52G;ai~jmZTm9 zezEsTIN^<2P0~4xp#y}ZjEHj?wo(tN3cA-;zWaL% z;8%<~*+23C`|nE66C~(hjufc69}(P4?%t0|3#*VFh-v$WpGsF4KX&6mJNGM^{8!j$ z5A@O#_d6XY7*rM*0y@o@ueB^BJ`C$jA3#vNy^ufP{byqo?z>m-90^CYNro8Q`aGSQIq61lnV$xR%2rMM<%au}gDZ*VAZsg(_fr)SLht2Za72w5d+vJ9!_z~~i z$TAP__2}2b&wOh;4#qvA*qbXC=GMCSh)o+~kMi$lyd<_(TZrO>yNPb=zaMxHGx$x) ztqutEN}a1WvTI|2J)oe5BAg#ZTlS}bkwM&Fr%N}2cu0nQ%$NwJQ$cTSq*7S}u{_J& zr3bIcH_N?UADKn1)|-@J*D@mD1mV&DBLmQXno+7fFF<4R+y&KZp-%Pflxq5 zyU4`EAx4G}PW=eSqF+6c0E9cPCw7~km!dN+$+@hAQHn2@4Xbeu`LG-uQk{4`LdoGN zg3r_B*{BB*Fg2&w3>$TKIcC~ZRm6x(Y(AMk371=K-;Fgl(?5U2EhzJP^xIoqIO2KU zWhGvmu764i8NkMHY$;<>(&6JV8UHpzTGdu}{1c4K?msvgv(YP~)CkjGWuuM+PCG$5 z(M9)jhQk>bi12J>9M?$=^RkJ3N$EM8+=&#m1@&N~tXVlV7Fxw(*}s_1fEn#tG%mG-tkM zTA4-ACehX|)tqaIZ_ft(4;zEdUTtjJ+&9qDASJjyuToJ`jI&Yei^&KL)a!B~9`W!j z+(M@@N5*~igo474hl|M*)ZvTkHKs{F!yWbxl1^yH&%n>@$p{oZ#4P$9(e`{y{tlca zD3cdP0hK-ZpZ*6}-uTw9cEJpz7kS@LE;}D#!F4{DUKZRk06*>Dpw5Z-L|7D2MED=U zPmYWRzm6k4ifuN@OKi_n{P;?qd=3!kOiP%VBMXu`iR04JkzQ*TEH+nAPsRb>#}LXP z?oRB1`UkL0Zcc+aRPZ zDGDR$1Yc_HaV7ZwKQb-%*WHMIg0CJoe};SLHR^eyCxWhQ=E@c)Jdcgc3LBZjeqp}= h#QvuRBV5<4CvA8`1D)dF=k(y~GBsV*3T2yD{~wVsRRsV5 diff --git a/design/multi_provider/multi-provider-design-doc-assets/image2.png b/design/multi_provider/multi-provider-design-doc-assets/image2.png index 0a243aca5b5212413759d8f50af9a8fa4057ff8b..3091592daa75ef6aaebe3d1550696cb786b1b841 100644 GIT binary patch literal 8067 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 literal 16985 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 G_x~5`;?Sf3 diff --git a/design/multi_provider/multi-provider-design-doc-assets/image3.png b/design/multi_provider/multi-provider-design-doc-assets/image3.png index 3c767d88486bc67389402d0c9221221d809da937..d8320f18a5c107ff1d3ed9acdf6e70eb5959d59a 100644 GIT binary patch literal 34133 zcmeFZc{r4P_y;O&Qj*H6EGaFDN=UL-qLeJnLNSIW)Ci%mG=`MyOPe)Is4z2TNJF+E zVzO6^u}}64LzbCg#&Dj|`@X;4_xGOj$GOg5=bWyqD<;qLeDD2p-}mPcZeeyoOjKG_ zNJvP`1b^31+;eUU2?aAu&YuPQ+A;a?sAJds#xUGxm*+33*HAy_jc<;1 zKNIlybhfVEE4NBDH+W~-?c0p%{R!>&dvYk?w6zz(`%5NQi6^%JxQg3Cx2b!jsE+?U*;5FSVfes{p zvx-xsMUeL2SgCJdH9F^|FKiML%J*3QY7j`@Wb*7l39(~kMR0y0A@$eG=gglSFqwMJ zS_xbu_@rvf?aI&aN{`3`CeM0h)TRkX zZnJ)Rz{FEt(t7nC`Fqzv1(#p=|IFoM!<7Lm#b#;#>?Xw9If{p*DC(Y1BntdXe+3bNIE7jHdtS;`6q8)&iFvIH;poIsa2# znNN`(sw-I@0Qt0FZ|w<~TzsA$NC~_)u2ZYZsVIGY;((p{3bV|oCffHnl1JV}d~959 zjO1w#>3y*)ZuV_njtt~9$B`Y-sVn_~%Wm%J$9smBCw<;RY|Wxn=JMa%W-BfW^hLz9tIGDp16JJ`^Ki|Crf3(?G{N$jXWlvcYHYWi}-|%R-A&*-s52D5yl0;IF z=+me2BlZ@njux1hfqwJxmm22a3!k4PyowCG;M-;;)(*-2>b&j`*ry>Hd14aV9^oi7 zWSey?Uf1Pvb}dKQa34rcCnk29RCTbfnW`#LO;xQseUHwwz4~LvN7HrEGu`1M6G)zZ z;-h9&+AhxP4RMx>Qk?NVdGx@%R?L~h*bOd~x@PmOTOL#V>Z@P5?`|mwf`A(wk$`_3 z`Q1OX9WzUhU-)DG$^$DeN8@$INg0$p@AYt1Z)O6YHoXGXd(A2Ls?vCGZk}=>c<02P zvep7l>YRqvrRXkmY)H0*e}{gT?5UCI3wvLVqf_f#P6`*)SyIhdW`2635w)rg za`iL+`>Ef5^w4F}-nX2!G@bW}R((5o6ZZXmOX-RkZ5fn=dcKq}qrjpIk%oe~H(hP}V9 zTM z;7#4^fFOrWX0Lx$??9ckagF7*kqo{#R{X#aN55o4cN$r2=Nz%>ImyNPGp>578tWR{ zK#5RT?Sex^NNy1IP>UYk0TQ*N6>e*#Yd2Z)BB>OA(|Y=ADb3Y35YdL#r+S4?)N|f# z2*;RV^hRGzW=r z_;3=EJT398wqjcST=;!|^-%rj99bOYQzhbBg)#ieQ(O?YIz={Y9zrt}!%HV7c1L$m6)R z&&c-s@jUY@dNe07lhT$WdvMUDlY_jMA_T^sD~9Lk_x%g)%!4;#8hfb~FOcX&Tqjp4 z)YH)x?tAZP731Al8g7VNUF1aQO}@_B>2Q1h!}r~3ax$5)I^QS)4I~y8n!?q3GJTfz zE%|`T+kac>4&glG`X5I(ZpS?D)_DIz^htH6;w{rkRGmjsh6`bz$)ShIKqX(8MW^DGd4zN^5k9+eC~+Q96(W)ELTg;%fZI zP6qZaW9-aUe2AU$f$V>#A5>=PbSI&T(VA9L9Ag7t-;wB1UFr;7XH9C|GhV=@JIN&&!@QTxf9pHqq(rq_RexbbIaGb9nlMQdKet9?J@#{pZt< zZ-Of4+{j$YoQE)nv57eiSSDhrnkkx2rtgJ%M80Cv7Y zan`?G&?)UOaYqMPP)$aknU&5sk5%|F{5cT>UoBF;@XOR9T3sK z9=T_wr5&Mpd#j5=6qZTNscyJeQKWK1YVQU$b~-M{wP&~LD5*eO-pQm%u6 zwf?43JmxrZLrtd+=4^NFL>MI}_9cZmp?*^@U~*X>W>-`_EXdM;rnPQGDHZ1&h#WhG z?aI8bc&_wAC@GoHs5++c*4+C?Z;fdR+LitSl+NRpmi_RIrZZ%gYxL-KTKIPV9mBf58e zEHDmh3q!_tlUs5*6|KN2`~tBej*J43td|{vdo#49qA2#-hUrY>FG<&|Dt3-?O#Ssn z6ZcJ!-C26O>RkL`>7(sHY5Y_+i4Gsu`)BSk1ylM@qvW%4q8cy(tl|}hE$_<#KayFs z52SwBam^!ysX~EDkwc9;V<>kd~iQ5!x6bH+yv$QwKpFb_(aGfb*{0drw&56PCt54JS zaw!M=t?d8c><{(+T8yJ>hfeW!0>`@7*JB*j7Zvf&H!ZXUy_yZ=v^n`3OjMn$PIN`l zOv?#nb=RERDhuQx1LbV_^k|u2PY%>YS4eQJZdI{h|opiyB4NmDwSpOWU3H6UrW6 zMQK%EAF$55?8}CvUDxWl3)rzwBTp3J(GlZK|Hnf}UKrC#pd z$6#8YzF1>MY2%4r(>mUAGXag$LFGH)@C9&Qql7o)xY;KBaWCe-%oqLT;JGl{r1q#c z6ouDejFcGI-;f`x@) ztjOlfcW-guZetAr|0cYlUH|+C`xq)Qdh8^(4naF{VhTj==uXQUxG6SWm-5Toh;?&v z#2)g4yo%!t4@6$0B0(n|xsJeGQuCk>p(O|%RmEh@Qaf=>5n9T7eQ^l}_8@G?VU|`JxeH#)Jp)mn3pwg3D`Fnjl$!-3jfgbvmRAYPia#Sb>I3^&E+TU zz;aYJ=A>1Jk%qOaqMz1pQDx#rX(~OqH|yOY^|uNx^eD%T>Y#-6wwVR@>}xz943GZi z_XkSk5G$Fc;BC}xZ<%6o;oGueP>1X6T%!pU8SHxLFIT#xVunxu^WHhh_ZMvs6r|Y% zdUbxRRnc2&>Z<7E9Gq2n;*vx7XFjcG?q1WRxV*%3{&-&AG8#2!7+C1Jw2vEV-ltWj zLQ-%|Z<6$#(avQaQ2D(Ns>i7c=bpgczA;|r6FB*}El}RmNYca&^qb%Pzo%`#Rr&cj zFlFG~;;+D0v+@Z;hRQtf$*}&ll@+PgkD8vaBmH6L9s{4+zWXhC3$Dxgt$qnEQu?2c z>LM^CiTw?A3MM33|NrGeg1YyAp*mSvgBACcnN22U1!mZ%2kM*uRH>{iN+J0G?V2L> z;7P=5O5^Bw1e|iof`* zT>4i?J$PhjZ{&#=R(^JXX#C5&zkdgYP_nrHM{hNp!f#rci#veESFZi#Vmf~wPRn^> zonAe@P2>y7A{>hf{!y z{%UX{&;BWt7u4Q}@Tc;QZunF9mTN(hCD{KvH>FO8x>pPhH`13oZ>{{Wk+<88n6#E( ztlO^`tGn!?Ov#%&7P#bAYN_Uf%2y~al)lhEl#Ow#T&R7{(VZbeyUU``U-u}+5IKjY99;qjADa_o&4JVV zDd#I#{b}|;9#vs`MAVO;lT(b^d-Et=$8Y&$FBWlcw?oUWx)>j7ogcrZ{xa*HRhWL| z3d<)|=af9>(er6SRG(w8Wm5ODP2l|%d!6;r17mqr5w?(DK4ZN_80Y5Vs~WG}VnpFq z)Aftg%-9D0tUT5eP^NZHj{!eczp}Z%#@D z%s2N>r9+BeZcz!Ti`aVvPc=Aubli#}8aQ{k(vtuOJ5tXu++ML}O9Cv%A(ZaN1yS&W z@hg#DZezRFfPyb+J%}XEoi3PkaQeaZqLLCIXQ`2{%i(vz%?=tubgjDi7Xs zBws2zoo!w{w*Lvb4LfHDE>A8AF+3y}#o124s6-QWDCW?~=Sj zZFnzI;E7%ruoz&3vXa{$o1V+u33xF8bUh)z;>uoC1Yg>B(^u6IFLGB6rGmSj(GCfU zi*{tGfrK-!*eH`b9=jr{KZ7Xp3f65D@L|n=-&J(#0xJMd^ zs+U@dUt=9?OlpPfzRcA)b&UxzEXlbVIZdk|cN_~p&GOSeFR(WLU)I*#ZD%T{tm0s0 z81L>sJyTdDLSz)coUSJpZdOmf&t9v{Oqf9{wx&n-Rp*!6+WWi1G`icz#<#7;=zmIA z`U#d77J<-fj)2eN_ZMep3Lot(@!Wk9+&v2!rs(EbHq;@{9k8s@tqlQ z54`i`!k!gUoGP~t%j_y2hFfq_8mLx?nrvBXs$K!1LHcm5UM}Xi%hB{sqdpq8^+;=5 z29WNwoPRT8%ZKS7;~NR`a+Px^aedUvMF0Jzke}2G6e6B4z3S@)F&P%GV<0^*CC)f1 zh~O}42y94oY9QOeoNzKIZw0w#S49k$|CZi#hDh${SqLpAX1d)Z zW#39y<)W1GjZ?PvwMAp*cTWF%+gmT=}W};b(43W4;abeVsqYIFK&YO*C1hZCqlop zOn+3y9`&2BseF|uWjU5cl2mZCe2Tx%>=1P;78bRidiD3j8XE+y=ABbo9fkCjhOW~R-`d&7 z)e#92QD<^DxOC+Pfhsm49u^iDv%rU{3l^3ykY_%ZOjnMD2a-JR6r~~lx6%i=Hf}5J zq?eS~^VTSObWb2m(X&NYd-;xzu|1V}s3!7CjAY!o=$s;;`@VkrBx*YMN^DgVO_EOBPrdV z*^}l^C1nlipwtw(wW>_tzXXFGU7Hv_!b7It>DNKR>ekpURtxBQc}G})X@Bq6ap zx8CK8RvHj_O9<+I?^hZe)FTY&Ort#P%}B>J347gxz^Dp`gNbi7T^29|b4 zo-Mz5`Q;s#Ienb(d73aC?SMn)vM0p*?;mEr!SXvim_HVb!PlwNn(Lr_9Y1dz6~F}- z3YIBVu;D~>`FXqj=hDfJKfN8m!Kvbzbx#d*ohw)3yj&*;#0|CuruNLj=&{>$K|T3R z;_uZdP*C3o{ttn3SYFZCdCFBFC#v#ILHnibyEbPp=4CPzlyKbmExm6%%q$@qA!G36 z(c85UoucD2#cuLMC)l}s=qJ|+zi!2UW#Pn6Z?U<@A68-MA|?vp-7f1CP*EqUi6RLh zT-){>*$CB@sX+gUrkp(y(|J8I$m7PJr5aai`QdZ150uC;)2L&8QfJ#r(fy9P;$JJ} zY;Xg!bMM{4KN>>*r83L&toGZI)My(OV+aInMb+;y{tx6fzda6Qc~&wGoGl3fbP57n zQv<9X15R!IuVY&e;FB3Y7Fr0{+|vKTh1n^%x21j)zBDQrCW5~h^RMIF{a!xxF?*^q z;NDVKTSczhp1_}im;L#q+*;OGp1Ii`^!MRmer105pZ!WxbWWOfUS_Gs zL~RZ>f`RQGv-nM1xmVNtY{ju0pwbCCj4Ii%hTNQ25tv*vPWJtu9WOJhv22}t-Rn-8 z#E{IkKOdGYe^#X={7lin-*dJ%!Q9MlX;iP0+u3(1y*s@JVo!nwNsiVTaL1-~_L)p| zaJ#k$bt*Vh!51h#U{GGR+4<+g+7kyZqC^`jlaIC(z5;>_@jIKIdkA&=v%R5Lgwa_gZklGYAx3vw|Bd<0vs zQ(;IY@X|ZOX9r%|0GMYQ8^zBZeN%R`A976LM|mdt=KAJx>V z=o~P4R}xpnFs$^{-_~{0o~1)GH`C`%_#|wLI=Eg1lq5N}m|IMjQ;t8Hq79vo^}0nd zU<2!(P>gZq4?4=Um)NQc7;Vvqo~Mta#1ur!Q(ZlxJ?OIwN%!w0s6tcB$sHd8NpRA% z_E6_8<*2bjcJr9d&EPC%Vz>7uflUHJ_t*CU+mHvFw>9!=)dCB8=|Dl!jFk^}6ml`B z`s;*PsI}3;Ri3HFxrBWR=W{9ZyZ4#N8~6{{J^1Dvd{NPd@pSB(rZG9qJ8&?O>_M@E z_wuHD2^Z)G<8MbjalKeEYqRVC_GGky0!3DBhpoe0W#8}Vk@EMW>WNA&s4b!yXTPCq?>i;H9rRGEO^e-GoRfe+{>Fmve7I zjW!TPw)Q-GFvBl;4d1#G2uX%-m+Y+3L2K8_;NSh~jJN@MZrla%Ub0NFfu{g&6tLHH z3?#@sJJ8j8-ColB*cGWYO`QjYDN~OjJQReNa(pP^M~{pW)?eXd?&Y6U$}Ukl(#V>& zcn@--)`LVJpN+VkR7JKwB%E#P&;0cA{@e7gSb7- zYw%fIa2A4v;o}Y+0D62!Z@eN>~_)t zn1x}y?d>)z$cyI7gH)j(@76RYR^?nz*o$XseGW%o?I|QNa*8f|*KD^-?GF45bckao zQan?eOWW$OwChcr!0gf^jztsxQL!$Vinrj*YsD*u7ef%ddj59gq^N020 z?6{M+O-ee;a!4b<>?B!X%WfCgxv9BnvL=)kaCM@I5-SGqD*}4(`P#+7{UO4*(k(Z( zp^c2rylB3omXD21Pj6dF&OQ4*8!!- zKI^!@E_`}qL`Y@3ehm0uA|7v@*yGPwp143s*UJN--qObj_YyvcBz~9rr;5e#v$Jkm z55gi|o9ekmXy`IF!?}3M1s0eIYL>hK``EB*SEPnjiaYZ;Ov;)%k;m+E-2nAFLMhsb zuv0prL}#eVT>bZRjlm$;UqBE7V#@zHzl|X+-#J)cQZiSi6u;)q`CU(YJa=tx?583q z_etAMm0cO&$_lc^pxtA745dB?j=mnS&3ptfY?28 z;gTRB8?~GdqMiiM(K-mtz4ty5iRHgGGk!k&gypPk($bu_4k~f3HsHd9@MDqFYOY)q4$O zy8p6YQXMiN;Ng{xP=~E2CupSU4T4gixc{J_QYtuSRw4ByE~SQmB(BQI1)e&G>)yyS zdKnxrC%?So*`xqpA8|XF-vH6HY~F!BGxFeYe2R{g5DPq;0zLJnKtVU0pNy@3k&tdq_>CF*t}ymJzsyL(B^SB3X4uw;O(y)}t!%JRKN&dUR%g z!4`XFDE~Zg!YBX(U-nQAqI$szGu6^l^H#b>IqgQl^39jvEYLa?*!w3+AZ2`YIoR%y z%1T1GMYek-KKHEI+ae7YYj0yw{=-h*5qhz)V3A07Kif{N_GO}+-L!;oWl(ZfJs_*WiVb{Ix4BT(`gsl7EY|Qdw91$TC1hK}IAXzewOnrLTG=i)Jlx~P1sLrRKQn*maJ%r z0n?*&O{XXkugqCx!alf7ltj?iMAh!upn=l6%28gCWDh97JvH_vd!AWQygZe+>jalQa!jb=@07!-2MOSAwjy(M49Z&Xk$< zvb%dA1>lMDJ#oNRU{fokw(puN{h^>#c)gyRU!{W5`DeLdmvk2=W6jp$?{6t~F}AP0 z;%5;=UFE78lymWXO{Tm)YV5tKn*RAAl{H8m@gBp?cstC!r3T)fa@Jdy3zXKJx98*q z-InbQ`?yEgw*c`Wa6L4o!tZu9p`x}(0QQEqjb2Q+*_1&}dH!^bKG#_#PqvkrBw_6V z+GA=jd1PryLk!~^WtL$$!`4SK0oRSwpoJ%bf;*$>IXe_VP&_5N1O1= zlS#AVMIj46d5bIf? z#i^c^6sK^x-v^H558|VN32khkJqdGJfLqy^n0qG1wc!1u5EmVvU*>ue1o4OUytKR) zw-_6^G{R0@ZtG1}-ZwD7NaL16a-OKN+dxZPJMqqpdPl=54zR98#>Jb|YxZ z)I>@QC6dz0NA%Kpt#rL(O}EB&8tn!VRJe6|i#6F(DP`u1-D-wGkQC=Tu{)GgMqFH# zpR$gz5@U(9-SkKoB*fPvZ-vXJYge$@DWCLm5UAZ066WjRM0X1gVo!A_mry5RKKp_` z$!IRy^c;8bxA@d)C@)k(FV*BdnHjy)c*yO>Vzq030>&deh&mCQwpb6o!uo`{U~ce} z8(KLZ(JlVrupkmrK=zWxw^&J`%e1&nTJOkEU*BKjv_JKXD2q2AF0R5J`EY|oHvX5SS(%D$)e%4!r7C`H z42mGDjoKn&RH2;>?OL=uO$FW(L)0hPF3W17Vhr2c+q`mNba8Hr;zq3*Ym{BFdwIrU z-{I3gGGpRuKD}~r(`?b%!BMobhH$GhrLC#QFw(9q1_tRfvb33ZsF?dd`hNoZU{vCx zr>}6f?AGR&thz%UsoL@H=FP`FW54-^nU4mw2KHg< zT@k0un&eAo*5Zm(`bsuJEw7-MKryAo#-v+ad5jYbwxYbm@X3frxD_UI+FC2Vk)&Vg zz^thOPz$h${VNf9WyK|$N8NbT?elqQ_{8XetUd#ZeSub6s-R3*wi??Xx zBY~FXEVX&)g2D$Z=7B3fpx3Gcl+uj)7*~a?#J9Rz^M3vW#xL`gJLzRUSt?e3#kt7W z&AI|HxFsX8fhr!vUGt44C6cGDtiQn3e?PI&(26VX{nZD~NQB8>Y_>gDdc5~K)=LzB zBfN4#)2%}D999IU@E(v1cSc~>%K!$z{GUk{UMG8lt^`&!KmA@BY*%m_w)g4Um*ud_ z>O>34z@P9QT2kx5>H?r~y{u4I?(RzT!Wq)63{wbN-~9tHUW3irW4)R*y*gQGRx`}G zREdUNEMedd%XpdlvPAI_q=&g7MgSZ;+~#9SfBE5?)L{Eulz1Llbq>C93yi1jRSTtW z4~Ro?4hHUJVSIxZ*A`9}Buo+3;;j2s;uj-Fmcby0-aAWY(KPn{vrRVM>$m!Cjw6?}Il&(07mZP-UaIf$WXxD5KFOseJW3&) z!6oM!i93+34ENd7d?%)uPyG7H%J&4VE(ObTrm|0{$bC5eYKRJ?e2?0z<(pit8i21S z?&dvgnXf2NGjz-#oiB7RKS8Y3Iutaet`cWG?VzqcO8yjT@wOmf8#DPx~#8xTmF|=h%^O-Ngm?^3-?* zj^aNo6Pp5ap3h}s>O5vnJJ9%UOu^E-qIG0nS$h?>>mdM?1Fk9FtmzI71)w#+9C%z( zFzxl4XAd42HhAcMui40{o2_W*G^=lc8ZYfVRd?SX%xTw$IUzrv)W~lLx<)Jaa%x(d zXkYI7L7(y?ga8OOx}+t)f0{7Se61?+L5$T9fDI5~;vbT)JFBy5GFt(g`XwuwpYH-F%=ngS z9Qo%ku%#;ZW*!vA7cb4U=0&Lv1B8yOt!=wMH`R+|*7XmG5CIYyC1Ai^UWc}vrnpRP zSfKuRzQ`w5y1X$DwvQ%{%|3zMx3A^D|KHxjslRTtW4J1-CEe^`=p|BjZd#-E#2+f8 ziq;HlcJA303wy}s4Rz~0lQR4!cPWc1d7hwB-U{PR5dVOVy_;}B9Nzeys+6yUx8b}` z+I`>9OwS3BnVgG6pISjxC2FGlcTrSl)<{5{npH1vb_!`R&;j%RAYAU^)Z#?&0qoH> z8iD?Se+vxi6YOva6^pr=9r{%%+pJM9Ya$EIKQ@yaQ$S#*hZkEKG8q;>)W@o@Ar}w} zAM1TuV`9$`iFvI#b=PTddkugh;PqefHA}A>G4LiTgRf*jU9P0U^X%pqY}bQ1KFQL< zTh>ECqscFm$bR2TOFOhnM+36$oD20=v|cncuCcpmpyt;4XbTZ@!yo@RWSrB`||0JHtwas zdNc~DbX4ru9uy#!{Cs=NBVl|qBw4j(8&G?0EM`GdN7JKp`fEMexw(@VXkI9N7+A!~^+4gVw^MP;J^DP`5DB@@3) zI89CT>qGGoWW618EvhTBv8iK$*^>?$quPZf=Z-1OmXZye3{>q>H}1A(Jw66%x>vEU zOxCL@QGej=TAT<|X+~<(KoQVQE(IkS=z5C6SKc|$d+!OL^q2fPlTiIEr6yMa?q>+#P*lY1+r?D?}>T+KKE`~~aal>Dwy3#nDJE7i9y*owKY_()0SJVSIO!?6?5g^DUZ4YsStS@y2s#h_ z$9iaqUVIad*@aqT=Q^G2;^wBFkM;WDVduB!{^5&5Zab}EUraHEY^_!Q{ye?ofV2MUENgwYD~S2Ni4ygYbkdpZ`S&ID!~a!if-(=v@#K z*wD?`LrVdXr0`G+0G{i0RhX_}qXc3Nt zMt?jdjMJs0On*%L^2BP@sTnfwT2(1g<2&4x^RX{E8ZMswKH}hjU*!K<~L~q zrB^(ZfZhQl@<5@RAuW}SWbs&nSO0}jVO-87lfO2cAT0Pn$u?r&QYqX@?r=WC`}sia zi-I)%vQ-PWjs~=qO^FXim6~aije9!SjmZfzQN;AX#s1cx1ssotxqD%v_|q3Ag6{}$ zb&9LKMx4mKeipFOnv5J1#_8agAW3VnznY9UyMn&$yb(}{6Fm|&O?!1q4ub~Q>fYW= z>iBAv@nS5O_Eqxx$?OeU2w~jmN^S98qn%R26F-tS5*mfs5}e$xs0t9Vu#te)2bWNQ zS!e01B!cG61Vqg4HpSkX_HoKDA1*wI4b~#VSCTWn{_+!NS|}ysP5@2Py5esl!4b(L zRVm@3AGzJ)h!s*>!$-j&suylgb=|6RBdJ6skcX(K^YmdYkPAW{KDjQrlL{rZK1nKB z57n}WKtp>}CV0z(nk}%vL+p20ewi#!R}SF5{+<7%B&>}-d?T;?;43P|>fQCZRwd%5 z2IoDZda!HhB>|qZNuj{Xe5I;yWV;IwAlp6qE1{Uw^$wQ4I#L}+zMCt(<`RKBt}trE zQ%Zh^swbO9eU%c?$f~{-mUHjAX0f)$=X#p{`(#Kk6h<`%m@}lghSn?ek~++f%?mg1 zzIfR?uFClhb3D{4o7WSyK>KOOWjK4hN@r3@;kf9QBvHMRo@qd2!ar*MfjZmO( z3|tf}n#lzMFBw9f%B+22cq7r&3b3Cs-?PZ=p$6s(mKZGb9(@+YqmTv+`nCP zhGnz7Fb3s{3DQp7c-h7T4W(iw(78(0RgT`@>D0?32*U0&@ba9kQ7if5qZyL|u+sk4 zLT=ruL$3AZMdx8OeGnr0$$^K21;fP!_b8fGhQ`gK%AIxLs&88mb%>%7_F(tm#F03I znFU1b?aT7sOhu|=SC3DoBSgY1vgs>mbRoTd7aPT;%tp zMQ#NaPdRFVvuRX)0MKgyjQ-VrsNV4XaaF&kcb{1eeOw2%jqyuuzY-jIS#=|{O8;kR z@t(?kOCGh~b!x2HL^7Kf#m@_vl3THT3<<^T10@u^fa{Un@u>5T)E7V+EHOR2GY-a* z#<3FjAA ze1*gHj>|Ou#4OeIktHIi1*K7<`RorfDA#E<;Sb)Xt}b+W8>0?_PQ1iYdrzyp&(|uY zx-hgP2Y5}sb7Yg|jI3?Oui5VK@@}Ku(d4+A)8fDwF3xf}spM8%$94cbZ2I&p;7FLZ zScVzLs?2ZVa(3O-c!Pi|aDdgNK=xtQwWaHB#>b=u?B$HBu?tI=fi>>n%+XDq0uCV1 zlyJ<_3}9q8hT4O!rgn=XJ&+m5wPJTGjlyU>{Ea4KyX&e8t2Da6gqQv;g5L!3w;9k9 z)_R-~G^WxEP137QHlAE7Nsr_cl)e)8$e^9574MWVXB)@$Z43^@AICFcqX)O{--e{O z(tZwVTE#XRpZCg{Fs-Nb*SebZ#9kah+cOXB)AQ(qqd+M>)RnN+(JXbYR z>fBZP+OAzLp-wkImEF$ifK{LWqGdh4Xh1-g${aT$we@Xdgcs7_U|rHSCG4AkUQYiE zJn)L#idss@RhHh}drST_mDIl(iu=?PHsKX|b1w@)L)nuIwR2cw@N+7=aiKRA9q1tk zr*IhCg8<_B5Y~#Ndki3L|87=C{go*yTQ+{UAuA!RtXLN2Z=h0RwKh(~HFNMt%fW{^ zzA3UV*25gG5n3WBxd4ygi4oPBt^qVvCFhjGydp&NKNPK!BAV~ZX9_EYUM0<9C-wwO z0oMKTqDm>i`NMP_voeMQa{W^aO+BstgRPa7-&*_xW9%qCRxPw>F||q*vC#F>9IlfW ze18t)u8RvU_27LiMCJhFYF#vpzktr>8I#BtD3!erbF|qIkNe~?yOm;jjDWk~QhDYt zqN~QuQMDlIsiw>9^%HEqw96!is_AxgeJ8DB1fpkt8S)$28w9$Z7&VDQRDG?Zx7*Jg zmfy3tg>wmcz(xd==Ekqb^BIfLoA9%K7oI?SUaETcJ~Cy3 zC^DiAMKd84bk8!GXu{d$gA zEuE4bm^U2|UB~@DBOWLP5}_6-07dbxIS$fE=5yGz>^Hy1twa#ysE!oX&>T-^HgxL- zm6+H!d`73W(f>H2Q%n$K-K98lJzh{;04uR*1wwwS4F#}sr&IrsQqD)K{}6(zt*}j6 z^h{l_UUO+V3@9D(`((8bsn~QDAGH^7Mebbp5wm<8pUb2IjsCStW4e~}oM&)BEYub5 zv#hSZ5sCn;!|z+uxpVZQiKox6U23=7>aOQVSgFk>6tMYm4r&8{4bx9Bu=vzhk(stU ze9ayOu>72<7W=UwC-wlnf>yb&;O&i&gA@Kg<|;p^naR0;&R)b!p4hR*%q>#%jdtDf zs0Y~XoK=o;mtNFL9p*lp2iKyhkm+@|_d&B%fe{qOjCWwN^wE=iMwo< zi>;hma&{_L)Sq49R`$dEGKVmRQ`PC@6@)TR)u-`EPdjV>2`phVp0Pau^h3K6HD;jR!&8VqX8=ph9I9w@{I}(< zn}bzSnVVN_GjJ8G(Jt68V!{xey&!;O)51SmIpX*hn0j4ZLTSMyjKsCXY{Se>k($q5m=gD24U zmKu+RVG)Qf;L*_!_Qz8rM~3RUizn^CLU|MFwY#$P+1iNuiVVj&Z$~f&v(TYq)~XsW z6!qmWHe--(X#(MeF8U>1)#%uxIEiiO{+E4rT1y&mC&q&=tTS*3Hcjf@V;uH8{NU0c z&+kZO#z7Gptfsx97#O-B;*X>Zmd>Ro0m~EoW&$$M9`twk50ckIXBumNrQ{!OBB+Uq zBX_lJ(wDlMZ72qIG1G<4ymLTKyTV)$(2n25#MZ3tC4TFM)y`!&abxuX2nOEo<0-s zQ=h7PYyuL?1?S5Q!6S34#|yLLEF^UK3-`^|<`x}*uY-IA@~${(Xec2@TYr^uob~(M z6jA^^$FE02dEhKH>ES{>qG1 zj)L|0KMxWrp`GgCyfD+slp`IwC#o(HqCo}_rn`5O#`%k=y3}Q_dI&7KTd`?ODg*e% z3$_S3uVr=5JNDFDA0d4G-_Ow&M8#YHFp_BI6!csl@B+!T@Am+hgq{TW4d%Ul%8YUI zwDnM6&wCdt#`>9HXGz&e5Ed-He~V;b^=O?y+l+i{Ij<$PEgD~^EfsQbP}YS$ndp); zCfB&5sN!AqhggXylqE&f9M^m`PB0Of>W7lxyXdidk8pXAGjj^Cinnd z{AzPV+9qJ4N2AZS1Jxe*O5L@*jX3=nh|6qv-g^(8phzSFldl-fD%i~HB9hdr23s>**m2rit_x%3)|$(LHy{8?(%&8adgxm6iq!wn-gkyInYGI$mn08Vvll`-hqi8S z&zkS=SL+0*HfoSnm7cM4fh{2g~5^Y4t}c zB%^gS&S~``iSnWK0C!PlS)!mPmaiZUvJ&Pbm+Cc`78(UpC2j&R zHwzPkkSKa6M#;F7gtFOWMo$lK2B z*BWY}9VPobwJBAmXuFOb*t^J&DK zKJl5jAX0bd*C+0E9b~SVE_-UsH{AxkKG*Ju$TEA_C5re7%Df%o5#?YU>p1f%Ha)Dn z$|w&;K6IrU2K7}KsryDk*wFaNvp?b0H;XpmxpfsGjX+ti5eG9Y{-(IZbg;s<($JXL}T*~gENtDAFi60A!dvC8Cbs9;qR)-%ifG z|D$;svDMkp7Uyc*d<~_2GBhJBTv|!6*^(g`%1fy95q3J%d| zq?$;(z+W2~Q2#-)JJP))|BLa&sgqfzMV;IPMKA2A7y3k2#}HN;xJYmEcHX#El_5FA zJ2z+@dl>_(U)$T4`qrx**_wImwA=G?+fj#oS#{F)EqfkN?(IPI7e5wY8mO$2iB}P57WFTBK!9etzamB2Y1lXE^}` z^N4WufZbEf*#K`r6sjlSsT(fTByBQU4 zA|`h%T{`>zh##!yt6hY&*8j3I?x~&kxG>^-M0BQRMkf^TQ6>~O#XH@4lw#K)QO#qh zz-*t_3DmwHw%AD4E^H1HnRy}5G_>;KhSUiu?aCLT@=G7)m?0wAL`KPs3|ye(-K0v2 zoLl7Ptf1vRYr328m$jMwAOs(Ym7tIKE4gY#cRKI#gLyx<8>nrz+n3c*Z3;5+A-tZZ zYt?Q14}cui3G0%}+BPW5R$L6T&a~hr^mT)@?VNMwB|qV;KnS0>9#Af?l?<;nZ)P^H z^{xfHlWKELPxE^hr#hBzQnfCH zsHPD2`WFRv?{qe&Pw9-nGRFdumL(T3fIq1f1Hh)pHlzqLk5cKMFtFXBDRvu}_hfvI zb$S%JT&CL8JW9+=#T-M`txGO0eHp*dUZZ&M&)O0Gh=i*joq*OJ z5}!ZqJ|vU+2mSr2Q=rB#-9*=F$$wkU0|K?bE;GH8j%)R6U+b9bBfx_ZC^bI~jViuQ zi#%?tAAfvAYbM9}bc|yIe~okt4VLat{^O7~S~6lyR6BL1GDIDLqUi>FI~Ad&L?5|c z{P#eHOVe5#AJAxawxS<{AguL^T2Q(}f6xcD>|{exd$o& zv~Ita0}ixi2#MN8ksM8k8f6Wx90}c?1S%ji8Ws)x_ZoLo$MEW5*QMnJE6$@= zFL+D`!>}XsPr34DFSTMDfr~Vab$`ygRmFmjz{Ufhwbi|85WDx1+R0L2}skb=`=1e_j4fh|R(j|%L;rBU>C_86eE)9y$WY&~<@Jo0KpEuMi| zscvxRBRxH4le`t)d4J-4wjV5x$~Pd@qSc;8t*I{tD-qFmIfG|R>8r>&AV~LedSS!2 zCEq}mYX(-Vo|`C;9jy+-Jsb6Ca1xY0+}`l10}q1OT)UNuXJSj`wV?Y0ZOBxyss(sG#omCk$cT@4#@v)YS;f-p>-^i2XwTf1o5ghRn*~!busd6>9XF|f#{#q+ zOKaBCv0f6X%!MeQZl^ROUJN;Cde_K5mnAQ>uFcdUycuhSiWY`aKt%^4!`b($^HWvU z)PQhR(C!bo&bFFhFPyH0{tZ(Uu~EAdekG^W^W%*P*^@VMlY@{ zPxm$=biT9&yEZS*_)~Z&Qw`t=e5yXpy=lt_Ek`3zE1m}~zL?3q+(6xqn|=me z;0wDQSk=;jHa#oZBJd@BSAEqJ$%e`HJCtrFH*F7dFR|l8E&0b>21E%0_dQ#dXbQ(9 zJSSTP!r^nIvD~IB)O!v+z{(e^P8<{!w@jA5kE9;TJl%od4R73IU;-dh`qV)y>=tA5 z3%O7?3tQ*MfHl~57ao6t)5xC&No`^4rPV--Xud6Q-U{I?jeBzti>2uYf(tA^!qQsM zXQ%c-NmFXdV?pCI-3@f9Ob>29SR}O6;5%pg>=sM2$s+efTd&J4oDNO--!_}S+}bc( z%1xbnI!qJ4GWDvSySU-5*B>{Fz%smltp*LIDaTcaDK(TrU6pO2r4u6bvx`m1_s#y`*yEAPt16MKz+XgRV#!p_J zHfRq#fCIPe*JiKCNmQ@rl5UK;V-tJppkIXq9VAio%~jtKo2?4%9#OhBfE}{U#J)G*coV)F%5+|=5I*ksf0~v!^O9T07rO=dGU&zyzodbvmwBIp z=Of7ddJ-nDSe+ctGQ#9(PiSP-S$t>{nNwHt>i<-v6@`qG)B2^ljrsWFT}||S`ewZ8 z=XVb6rJxs$ZMm|7+K0zFk}b7@!D7!Tv}&I3{0)862^1QYM#4q{BxmlogI?T_h^da80ouZT6wnj4y%WPCu)w742(L%e4c^#ttVMo% z8*`&V6=Wxw>foA*t0^?1=|-9Ydieq1xt6#BY@fq*1nH-MQ#8`vH@86$ludQB+m$P(Ggny_LHnOZt zQ1H6ZRc%GnsL?>*)5nDG*e+KL)8h?o73RL{{=8hK3%Gos%XRf4)q|}Z)3;dtjazPd zU;yZ7jBlfCybfB@l61=4IUS_xm8AtF0~e_Hd0s74iE~Y8<;xt=VW7bTlb(ShmIL z`;NPh_6YSHQQ&9IOfJaFdc9xp=2Le`Rf0?-Wi`S3s5yvn2l@Mpo7_1IkSCK)cTS1i z!BsS3Np=5RZu_#?t1zQnCOti0L5>xxi-CRZ`h)zfD0ss@bnsl`tI-_+;OO@IWVJa8 zS^=W1G%b03x;0GN=+eLQWuiMH$Mki4!ky_icQJ(_={T<=5)b*1lgry8|GH`7twt^XXnh4HPBdn z46H^{P?1;6akcto^Xjd)K&MmFCeOw8n-=xA>`WmnWMN%}9|L9%0x%b}W{75@4@7ia zRP8Lcbzq%kpfIjBd0yAqfE;=6nIVu|1>EadSv*6DL$NEw7c?ub-xj0`H={6-G}A74DFjH&y?kIKJ@8v=J+e2Bm;P3A1jGNl45@$ZTV$6(8FkHA<$-W&Gno zaLL@0wG>M~bSU0^Vd6y)LX5k5`a#J3?uE{zYUhMC6i5+ubd&Mr6;irK)T%$5%k^b}BKrFNqi>MicV8Sn~9-mJqPY z60syl)w{74p2w@&NaG5>4yWDrh|IJIGGW0*^gc zyTQME$~?wJI~THVqQ{Gc^u7&GDb2NcdLlb-OeSl)H`ms_lqR2=*PYZkI?SAsaI1Mb zRWwocjIlhOXQkpA*1Mv_tbSUG7YD@K9wuu7c2bI#ROZd}=q#n5VzS{#fO5^>So9{` zX=J&_?8?!rAc3(3t}$bz9pmEKVHDn#AFG3*sO}&FK@77pXV#SpVJGKh$OUWE-2xYY zpD=xE@KEfKrbOxaKa6X>DFUVC^qbzZOgEiGuH>D zGJ~6n#xwGottOlwdRvaFPZrX=nlFBDNU7;9{=oz1|BO6MaDHyJk=f|jE34l5P4R(Q zW_ch@;~jqrQa$@~o=7W9J*7N-PvIuHFyL+jfreC&;(2w>Q}dwEQ%q9m%aEDT9j_Dx z8g7oMqG%$*r|D1n4sXg;hu>>Z4MBQm%73h-Q2~kePT@DrIG3g?3a`ULvTT2$r{~Hg za2$4xv-@5F6ik`Rg=#I+5R`*7HkF5PziGMu9eo2$Ciq3uIlDMyXXY2+f&riJ$Fx*! zg#*Eb9;yKO>^Fgp=VsG3njEb`)Yy(V`)96HbO*+Z;vbttsW*LEtfF2a30YSA#IvSL z^M8}c7(;?US)c2wbB42Y(wNL^TF{`9v;OXsxZcR}F-7M6x);967~Cicx3ce-dOx(8 zTd)A(`s?q%avX#j9c2;4aTnoq6brh3+r3mD`iGK0g+1`Oq{@w`a*${oIk2;g^`JWd zi{>`^#d~*D2-O;KvF_mD2BwO*Kj;pV(WTwz9YHqh6aXVD~?qx*uga`n5VREBPwx z5em$hl{Y*3M@+CbYiNSzON_R)WMBX1>eopv2y zYqHC0wi&IyXlTCNQ`=lNSVnj!9SFU4k;3d}uFkk2ItsnEz|9n144$()j_71omAIpi z@`AbTIKTxD;U*Fx;g9v`%7SBkviyWr1)-}g$KT2VaK>0FSpjSHCv=(v&`)Z#5uR+TU&l@au zm%kO$8?ds)jXyfkg5Lerr*834HlkI`t*Ib{_dyOxJ&hizKvPLJ#CB^s0Hxo`A}&iw zViFukM}8 z_3;!65;59Bpovm0k-QofK}6ixl0O1S74Tf;8&9k1OS}*MCD331RawE!WjoY2))A7T zeWb8*&miQ!+DU;K3P;83yAvAJ{ zc(pwMd#wvDu&3UT?WMCtM0#d0oAG89@4z{GYkOI98LNj`6D-_%V97RBX=E9A8`ieh zp_GME`lsnBn=TTrG;i%+RDYHz6z!_sWBEvr^`3K|(T6GfF(W0p)=2{~BqVSkhp@TVBZ?{7FaxA3!j&JG82>dTM+cBL_Iq zE0Ct4wM)9ko;XC30CF6ReJK@`2L)0^0JmGx$HOwfIZ~y|_g|d;uF+PWo_~H0=xwxG zjY6^-@=p$|0g*Km1Lf5rOG5&SfrGWn^{TU4)K#;Q!O8Xh<_*L$`u8Ql+tSK zX!_$Z^|Igm(>hWn7%hkpbr@jA_Qcq%eP-5|1g z^1M%(di5xiCp);;2zG@RC+@yjrhk+~t;`;aWPyzct*NW~d*gwg<%QJ`%K2p1(JIvd zYpc|O@fZIX`8}{#mKv{{|7vDYyFLL2vt%k7Mfa+v4chI~-%g+Q42MrCAIJ(M3#6W< zz@>Y=bF|IsKzXg`J)2nHI)i6evTiEn9qSY+*+NQ`OV4a|Nh#xT{O1(sgDK`;{{?_P zv+7NJaXZjetuX7Dj|g#xO(jwskZq+d0gC(Sizdu>wsCC*GE)2E&o7^wx<5-@h_y*p4xAi+?ez^uw^j(he!^Y_V@%%ZEpQxoZ2+6J0)&0K zV&`(jHdyO%A(&8wn=S9-FWV6NmjKnz9~is=0>M3y+*ME?BvJ@WxapnrJJ(7eV=NW7 z2@l+y4hfFh<2+A=@CZm_1AUP#a3I5wr@|3{9zUQ~Si}|+>-58eA}0_$0pBeFNv9nI zs2&{~#1SsWWZtfzR0$r;$7yE5Q9_Y<1J08Nx@c_Vi8_M2hU;u%>?ae@y6cQ8O z=GVtlyx!mswN>8-XPh3P03q`tl-68V`z=4cx3Chn@8AC^2!1YU(1r`qb`n&t_P28g zn^4Prhr9<4?Ii?$y5#f-Vt4-B*oI&IW$kvXckPGL<)_npL^QL{m`S~dfl6UNH-_=u zWd<>`%xk<6dAmh})@Nu4pt+&n5(T4(0O@jQT7HaTgZ}SMkAgsv=N~^T=iA3)3?$C> zLy1oS*JVE)7SVU2P+i>{jM^2@9ADhTPHw{2Xgj$~52zR#K+_u%J=fmcT}qwm?Z|iH ztW?%UG_!S3#jFf~T>WKd*#m4W}mTJWy^h8sm_-WXnPFYR|8MFS$X)eS!AQ=sM zi4#U@F81R#)}{22JJ4Q}+NHP#tU3Amk(T8#OSV(pq1`D%id&pzCj$Tt4*1fg>3?#! z*|J)ude?TiWhN{}1t3`ZbJ^RP!WIFvmmyfqlwhB!TQ~~!zQ=wmJj0n394Hs2z7*qe z?^#iz;U6qLk;&lB8=JC7&NPfTIl;jCTZCN2cPT>#~v9xiw<$xB{U%(O{f zUPAQ4uU>hI-v(6-49F`(-Sa>~U{T8K=2LQ8K>C&U#boT0JGa1-SM!fJ64k!4XPsON zIm-tSvPhzwac8df5(~F-BR;hwE~F2idG*Lwk&(NkMiAQO>+=q@itRz{^Dk*=!-|d- z{I>XP%bjAKU-I{i5jPQz!Rm-abOJh~tM!vieN9nl1mlaB0eRD@8ZuQSTTOYQmj)11rxWqfkAoVmWI76wm!6?$W z`yM3ohA2aXjVdCnt3;uwH&&QQn!gswnb}AIfBXu^0D|}lw%mDgN7K$yU<{?|_0NTS zaTE1SvPk_L#WLMlDkT5U0jQq#3yOMXUGeW10W$_9ya9YmPt4qBb8YF@E%UZV#gJmA z=dzj`ijLE|oWbf*aK8#0%@x}56>518PB1}9BYPRM@3jblvBQ|N#gvk_AgB&q9#ep@ zaLOFg_UPDF4-iOTFMz%Qjz#GoLsgE%e7C6g;pfInPgp%IZ=kOBO^^*O8|(n1sMm3i zNd)cn&Jye-%Xl-sa9aqJ6eAyBU$zZgi2CzCT65uUd7XRR#zazcW)xQwJJ?j%XDeu@ zlqHTccj*%`FPJpsB~)wm{1~IZD!BS+YYc6zJ+%t0Pc2@=KwXkEZWjzc4+Tn7Q4w(x ze78?loZO5TSJgcL)6AEOXSEClH0=qt+8|*m+iktBvcBu%o~;PiGjH~@2!ikTtEq@c z1F00slke&IVG8q}fzRFsk&TYbfJ2+1QmxLUULpZO@&OI+D{Jp3V60QHH&DnyJqxuOog_QO?QE{>N5>I!x=!qyJ9I6!k@-%bh8r0mngtx)NdVI*ulV;`_C4m1p2rO&S{RvOr-z#4e zvjqVJBmsMOu7|_$(9(kx>>)9AJ?AN~zqTo(Jsk2@620fL`<>SZ=8O@p{?#j_&^+FU zS?a@lrPg~KRn=h{4bgrBNu12@_5eZJoi-#sjohoL``|WM~_}wZ( zPeOM4*p(gMl+&v6TAKjgZ-NJrr+O2zp)dodEmV07M9+|$fO(__)C+#B2Vjgm5>Qpv z^0v&2?aY4sD9!2Pwv;sZL~@|ni!FjI1>Wp$KA7m zFnkm^5ae9^Ps`*8E}ap95(=w$s)onyIDk zJ#6KVrSom9_lDK0>6nde4}n=f?Mz&qX( zu|daE=IM%OBF=HS8MBWK{CjV9V!Z3@%G;N2pog)(e_7vMx zMYa#jZFZKr2Y^@>N_k)c|zpWTWi*)-4NAj#2tUSh*Dq|h2~>BBLmY&K+4vA zz&!S`5$dccmHPTYrHA>Ah9%YZ)YQ7O!=?=2QP;Wy<^3N|Q{Z$)GjjWt9U zkY9Cf1}b?qp~4B5tWzBe<(}2)4a_m#ziMVU%zf4@ny(r=bx#gt748DGe}DI-ya+^k z#|^`Dee<2dEHmZD{u$Ys54^5GrzfYL3mLMnY?6GTI-Xc3wYyA7S~ly=$g6DIK1Gw^ zccA%=CiZt)vG{Owwu-T4GQCX=Aep|T-HG~;R;^jvLQ8ratOIkNLsRFy*k|(3tn|>c`cTZW=-x+EE1=Q-aOBUmE(K&-j=}vMO<-(*e+fL_DD|gU>yGA280E$z zmK2!;?kE?Q6-c2{NfeM_b8+2WOfOHLKq*@vDbH?AFSw_D<7qi@lG*N>$plZQ)V>93 zbw8H+UUgj$47GY+8>oVuNC}2TMB??PhXdn+j3R33>IK;_IN%&kogNeFu6ZoXBiJ}D#aIRfK(uR@JoaC&DwyP+Lrds*a%saT;$*u|b&Qj0TT`*mpnhEtR z_5&NS^ukm4=xK;bhBMj+RIWoo6IQZ7?jdJa*Tza4ww z{_`5~A}V-U3EXWz4F%D}&LQ21Dmy~%XH2Rt+N_P36ZDNHUxK@zzt^LtPPE%HHnTNw zczJJ0DkSAX2!7cptgC#1XXb@#wkO8kk+|cE3+yvE?sA!JsBLhy@y=G#kd>&!CcO8* zwiA+T9+>yL@ATn{@AxR$z#^G!7jAfG4xN|_zcy@33<4f<7sf=ES4}9#H7e8X(vuTa zq6I+-Jo)2AxKcpgxFDzdSLnSVi<=AnRZJ!DIq0W^+zLd87Ex|< zoOTiys(wGZ1!UtGT{qUU8#pgpL9ZD&!9BrcN)Ci5R#Zs&>{KwRa~qW zML(KPhAkpcO*fsFlS;bMnQq*i0T)t!yeSqx>mb}#KR0V28$V#0WSh#2~yvT@nk%HLL4~jp-&er8-g8H|=$fGBv+$Jy1fkF@{TVSIbCczS0(l&SL)tCxU-lCOA96n7Y6_qbYS+-XLSbS0*z?!MkR za+B-4bEtrR-mrw_wQ}-G=>Sjz8>4@e!bxl%j#e%D?*zVhOa_zgNNUNBH!U zgMs7%A9Lb`e_GgjEb`O62X@zb`1aGC0t|aSCj0-s(N6~xFS^9K-iX{!vyP5DM6zAc zguILmzSpiC`txE=v$}%*3v8~zrwno`_snOux!3L2*6kpranYqVf2}!VZEXkp zGwUZ%+ULJ7@5+gJh$erMD`hWNewR742vSp31RZBRPDVxs zLcrxT$jFX@$;ggKQd0sgoQ6l^fX5LR4Mkb9f-h&Mffou(85J2avf_vnJ7&j#cbW%q zeHSt^y88XUBTbH3NHQ|PDTJJimWRn)Vn`uG7d3h16sqmr2#i%;oxS6}O*Dn{c!9Vsb z-xn0sA2D`!p^=T%Q_sf>?+Q=uR#rM{kBm$gxf@XIna{z-Z zH5b@9*i@RDD}aIVB*cHeLH`MI{{d0P&;pMDBn?&ucwjEeK=;4G^1vyl<&u1CYBqc5 zeQC+AN;e(rnCAqiF?mkNb6jzst)wBl`zZWG+K>zse!+R*C&$IzA#wI2WM^KEAGLmn zq3sCb1e1M}fevs${9U=>lw=;5&~>V2&O~bL5i)j2Drvvp6Xf^NcX(36^0IStM~8;f z)E2CvZibEyr>w81$4A(n(7r4nKu7FF)taOYUd_3!-Op?vC0J#=>Umbm-OlP}Db=5W zWI(RkJ-xk(pV0DQMW&Wn?IV4Ce1!ahf*3x7nBaiAIKgxDSQ)XCkn{9CR+)sZ_~NoMof}0aLXcwy1(bRgJ}B8%^_(8t=dXI(%)2L! znHf1Mbg#ePd4epJ+Sd^#^j4^CsS0n01>+MO4ktq&fEL_YDfKm?e{}C&O4m8BljCK* zYJ$O_o!9b2}-`zJN8R+siwjE~Sm|#}5 z_?GPD8xQLskW=(#6Fw+3%~Ml>{vxht>X~WbgC_Na$BXaN*yCK`nK`O6Hg{tAb zmr6l1_S-ZS*cAXhc^H^GGJ#Py*#zKhIy2deVeSULUHV{dlyPg;oJzkECJ+{`*yK^mUN;{!9 zB1@Fia>{z)gx<&__JM0z)Z$k}P~m_j6aYJzSmSspwe@o^=-MHZys^L?#@gY!Jf_oI zll8(pMZt6}ZOPJ=I_h``>#jQVd`_9JH9tAyxtg*x`8d7w!AW3+xx`bxR)_^}tyWq) z`ri)X$}-Za_ViOIYuU3#xdy@5vmQZxbe%qTR*wJP6VBsNp`{yj0jn7x(s#|7hD(BC8VRH_!Lpd^4@Zm>if8!9-jSVS*(v505z`^YA&AGCIVb2` zw$eE`h`|(Ok3LW71tGft7sb$$J$k_j{tVz2gq-XpFI?d@Czzs{j4X==+kP2NDFY=V zvw4CPI`RMbDP{n>WV$|kX})r**NirVr8Y}+;RRKor1&Gg-Mb@+4ecSOqN}x3*NoPB z=xI?uE*{LER)+LJ_C9T(r>{=ioc1<7e*W!DiJx(`@80A=Pl4L4s0NhdP5UW7`m)yY zLNBMKd5MLyTP>QH(E9+?Vow5iSOK`hW8?<_9pMU`aLVtL%^#_-CjsE(1V82kW7r_) zIp7LD7}_UDiYG{E2TZ6BCwS?>opNH^9_9a;$^57sCb;4f0>E!6yJxi?Sav++3@$ zAmJSb>1yYUj~v>(+c0R?x9zo7iM1}qp$*2D=pOcMN0QDk>rg(iAV(_QX0UThVj#x# z%*S5)K>-N!?$7D%_A+I;jy13FZV?CZ$`9@kb0?=_kJ%4F_be>ZMO{fL*r!jQ)@}Ls zp1Vw#+Ff2=Zd(})FEd?GS-6HWb(8tEL)LKg8f6-xqj5l_%K(o<_HE@8*C!;j2j>Yh zcopV1Nzc?RI_-7o10dXqw<{6Qq=y<%)%E)cki_1xnR)&wrN$-mrr_@G?#FslyN^-Z zAz@)*%Q_aNEv%Lez3mj;GqDr*QK*`)zBP(Nz4?OI=^*DN_g(O45QY{63bkd(#dj+r z8g<;Zmy_}#^b3?2) zIEta$x`tg@S$V?6Ew{;_Aj{!Wp+!&Bt0wD07(aPVy_ca@W0LJ)reRH4Pspn0w0Vtt z=kS?B^QVl`fKH`ZTK0)-^3$k~+rWfDBU@b=nBvHbI&tn0;ecV*S~K? z4JP^0W#9I&=1)#;;Xou$?kfO}W}VjJytUPnylzF^5Zmd6>qglwJ`M6m1b&x}yrq{2 zn1OX((kk9T(b19+G} zV`FJYu4_{LR!ubRBYxgUTH&|Wu({ssYdYliHAiKaES|Eu^VqlL>vEw$dpo6dBGcEd zF%U^bCLqK6ZfULgm%zKEt|QIQ_8~Y_8bkZ>GX%@kb?KY;30GU#DV@e2GJJTtONCHh z5BapCoTKpG%vX17IPmjY%yu6eq#i~iJt8}nGc4nN>0%%7o@+t7tdtqL7-n=N=xy3a z-x0Q@r%VIAC~qIl%ljbjM)c(;=g*zcku;7i=yhgdoM~=@f>Qb(AkH;2^u%*_Y-qFm zT9pixQzS}>(hl^$N6d4>euRkNkiAVq7-8lS@;mvT#bni!Hzo6LNDSS;fev8;0JGO~@_82fgCph{nB%=rHsDob^s z?BY(Z^o)(qjcpd2!z>1m9*)ZSxX^vPr8D-+(lapNFW1~?03b2&Q`s>HxwHQ-dos8L zMt_i9BJgk!2!x4z_8H$wqt=zyX3*iG5~FEB@m8YpGdemtlr`rJ9Iz?34TS)w0{t?U z=>(+J84GiB^Q?rDqN1xFmw(2s?|=?ZBz6Hz%myG+Ff&bph4?v(KbGlVf6mu4G-Tt? zOv9#_(1Nlzop0`Y30y%E6S@h|Zx?LJYh`9oe4qKHR4&F#<#@cwexB9+pT?10ehG&J z;M7~6{;++fC7N;U@KW+)Lo4|@CF4K%1DvGnJQ(W|^p?VCI~aaJIrm|k*WPUOVnNCV zGV_hdu|NLy@iQRPO{Evq_V-e@S#7imla0Tr5^jqzn<_Hpd?6#Kc;W8W7SJ8goes9< zHjzSoQxJ3WqpyEQiZ7v(2KLu`l-2^-8i&c32xQSO}Dxwq+Q|YDjtCvts zfj#yO0L&_Q8P(@{s#r&$)qHN|>*^1cQ<}z!#<^w{>vnxJOuTXDQ%t`Re^ue2mJx(c zr!dJ@cc~jS6PaCknhx7uuun;;DViUN-FmQ-?L4wQ(Ye>5cY`-FG`|3x`ZstBB+5D* zeW_p^K~hWi^Yt32ShMP@W*EBDO7VK4Ol8_d&F7rXu)y5Hq;&dU=nkq~^WCge5pW$r8|}D6hB^R*Ju#Nn?`3?zGcgM65x1+& zR@^L&z&V!3O>#q*WU>S$)vl+}6Wi%bHb?+QRu8Rvpn^m8TnqO*kHoMIaE)qVl z6R2BrQS!YFmX`MNa95w67{hVXH>$10j*>3RJpx7SLJU zk-Zq9!ch8^7X|i8h$%lopI#VN)5Xj$oaW*KoGg~ zD}G?I5$I&5lqQ>1`-%noBE$<{U=Kj3%@FGJC|Kvs(>cAoJ{dJ&d^qB;>jQFdLFj^6 zw_OVYfJK+Pe60}*jiROT@3v;TY5!4fO@9F~AbxMHZ)Q_$$G!I$;CO!~R8kl@Jl0=! z{`+?zF8~7CA2|GrEBuBvfExbSozFLKzK=K6xaBnGD04Mpo}>afFACIHo+9lwwoa=9 zsZjjLpr7ATP-5Yw{~R_tJe#vBFaOMwhW?6G)78i{DX^3+hW3%K|3P9XCJ3$!@Yvdh zyap1-DF6|H6f&(7tG;%9>7OlJbw#GO_T+F%=~@}+i+u~n(QXHM)cV8#Wi1kAv(;&! ztfd1L>eq~tBrOBAG_qB;gW%Pn-`r-MD~9S8Oa@A5zk5g18ha>P;x;EP?{%Ya z>Yg|R;m4s>;IL+J=4jXFX=Yyq3zeX&)vHbeosmFDdO32Ctz%RXXg{N;v9wYN*h8%* zN@!55l`q;$QmAE&FhTZ5EwR{?;S(zC+VqX36tF)lcU6KyXqCjyjxE*mbROD1O)M7> zOg|+Bmj-f^=$a@>8VZXp6*Rw>$BC7NTT>NY&INC^2!nZwpDX-sMmQ&WSSur0&9noRD(WE z;eEdt%cfXtwF`Mmnc~4e$ zyJ&rBGdC2p#a^(`wBJ@k zr{SkYcb@-4X{2u)K(`dJfq*i>p`EFrq@8gtGV(fFGnwWywSM>+6=_Iv;yQTY4IUJf#Tg_q?OO?`~~#x zLtY$h6iuyBmWZ?j8!!8`7!N8B%FAV4SO=VF{4^Re(9eIJ#3Z337-XUt!9%VCFq7d^ zxZ=ry^(mdg^tJbn$z`TT)0^N5Rr`g_^O#EPk#EJJGYt$;N@&(Or?3S83NqM1Fa(Ef z%_kzB=F!zicp$%4GKkQ((y?8sA}?QZcWtV|D{r~dQQ~S&YXJ9<ktPaptipkLt@0W&bl||4Sg0g&gcAW0>oKc(>bw}f{m$;8H zFH2>i*xVXWsi+ZQGgvD8Q^DA05Q9JgV~mkPc)e1))t`0K6`HQ{t+YwWAka(f_VK(t z)`#8M+a`27F8K)#_NwSId4kYavw9wUk{H&^f;7|fk6gqZLf+{Ai(~)K6<+_%Gykey z>wR@=FN9GRc+F6u|B-9|;w}gE<^Sc2h9Ok)?acDniP+k=39gjgU)`2YgaBM@ug#K* zj6`-ohq_`yR|-6f68h;bmm z(+%-kNiGodog8EHu2&veY#+<3*`Te_eI)6R3uMD^3oU#*`(sR7_v^J)lOtQVIW{b48ZQY{SxnWaJ_*Oc6-WRh-0W`^2~J!f89CLx zDZkV5lS)!^XPu3ne(tOB4_xe!(N5qcDT!a*5skLP%grepVl=8iXi{TkWILM3nXocHuA#ohMuzqS43lem{4q^4=SrO9 zJOSP~3uLL7)undeaV8F`X$^7>$ujp^vlkJO=h0=dgRP40;N;@|543&2$^SwBx8|HKAMFql>LF zfAxZlz0>MO*$7Shsw8Ln$7pn)FFEzMoWbjgwbjSBU!{-+H+;0_IsyCqOK%?@TPGm9 zrhW6pI1vKTl~mQt`_h$F2@Zb$T)CYvS59m`^X7}760kP}utbNdbP5#*ve zk$q8PeIMqV*NV|R4(2Qn`l`Fp3Hk#~wVtCfjaX`jQ`f$Mn!x|BcQ?O^e~ z6^hO&C6$H4N>z^kB2P53YtHx0 z?>*D?+t3UAjE8@R*>#hGkqjjyxmkie`EM0Oxut|}^;|F5)}D!^l`TtthN`gt+nAtp zk znozM_FxDdRkYyi=oYn{Ndd^?)h0K=om9|;4X**vUM7Y7%fvSuwKmt0FeSQotM29&$ z(2eYdjbUf-lBEkZyAkYQ{wibFQ0`8k62JeQEN`=5@^0)spfXftJyNx_Tf5Q#R|Ga) zq5a6Hcf{T}FZ<8jJ2;j$3k0z%7mGQ}pM&zxq)GV7~2i3ML5@Y&wnz924FN>Tw%+bcYGx^cuS4y z`LJ{}G}8*eF)|;qvP(5-{r;`hL}AlV2H6t1CQeZ5PX8pkAiL-;bN$6Dz&dT@U9JhK z<~TAE-?WL)(KH4+__eU`1Yok|>Mx4%2B}MMBFki;A7k1-sD=gE1gg4ho9@Ipo(#a~ z$TeL=YYqUW5E}aBY^2dt41;VX1Dk4lv2y)I;!~b|utL9LKQZ@m>ppNV##luxVY%0D z<9h9j+gxx;u$;@4uI{V~mH>v1%)SS~Xiu=}a}x}$hP$9mlX>_tuCxU+QHx3$=#N{( zH);#VdMh{sS`6((<(s6@n#&Z;ah;)J=D@w1AJ-~}BakqON}uWA6WD8(qoF5dsln%H z(4fo*DRpy}4m{(QQX_o$HGdArv7qFgE|wV;(fy7uc+RP|AEQRBxGF%anSF>;OJg6; zjqrJHQ_Wuyc)PxiT`8!vo{AO9_2_>Z7;>)4Vc>&)tec4S z(vP3sL|M%rV@jarLY4q42~VfZ?7CwMsfUau1^T{4oHbd>sK;qM_)*Y$I&-1=^>-kS zGF#Tph46?M_&%6okxjh`L|dxD3wGik!i~$dln65$e)l;cjA>sP?^%XgWq#XVQcw^m zbBe%Lf6>sAh)qGSg_v%u_xG8sD~4E%S0T9FN6LVST)vH_DBwd9P~EYVvfMICJjkX~ zBGE^eciGtaC0!OCDjn%pwWE4hM#BX$6$*GI=qxr24Z@4*^NcrV_7Fz>rD}fKTAbe+ zbQIOPkp~13ptu4y~(@3Fo+VCU!+;kjWRhBZL<4C}}EFlX& z2>adadiUN+Xw~IMQdP+7ha)D{TfuC~2+f5Ew4uf{M(aT%a8=4qaAa?=mZK&6b&7Y2 z$q!fdVZPOd#dJqeqw3|)<+$>#k}NJi(}LqFC*hMD=`IX=8+$YJEKT;xXh|~C5tFLz z&UCG4&=_t5w{qGim1Yoz%^2nYmBYnWTXX$dsyMc0?u{oue+XR8(pEp8U#4XGr2ElK zND-?$TY-rCtkGuo*IG;T{8O*zot_@4SudD=&DM9Tc0t#L!PKoi@)Hw%*ZK<#95WCX z1c5pJs0pk!!t0~Rw#a8awqpY&jXs9#dagxek7mY7oj?0x0k{vga+--|ZFPX5Cec1i z!N4Aer-+5E=?*_Eaa#EH0Od9IcwqQ3X4a^$%jH#yJI%9!0I~YH3V-_j8!htGjrG=F)Z`-$<}_im2VVB@ryn6UQ$BLX;D|ZX3SQ0oI&NGINBPkewX6O z*E=W0gYDK^2$Je&E5_q@Ta~G~@_XceU8ImSX(IC`3vqsAp)8&0F|Y- zW_%<5Lh9x4@z2*fp9itVDDr10dOFtu`z)K8^x(5~f58J<1bVkEwsz90*nFWq1r)~% z&?@!)bacNg=uCS5UbeW*-5DCyz}m+%(e<~F9*A@3%&iPv&r)mVWjq5Wee zoN!lGrt{T;$k7wDE0P(G5@UQg8)89)KaGw*1q}B6Jj#0nkAG1Aqyg^w(+p`&FAaD*F z`6$g%X3qUlDVnoCWHm3(-K zC5so|221o`kLPbN7uNphiF{RzfVyre4f1~7KMcrKOD*tYCc#2W;H2@i6;Tc5y*peG zuvd6W6W*v2WFJEtmahU03Iqa!!jq+e+<8_py3fH*D_g4*?cu#P;>=7ZMwCsc8j?C! zE3`{XBr3M*{+huzPt|nkR12fvsdYt;ji#KHh`Xm}Vna%Os{~hDCkZ+dilzEc2)5Fl zl4Y7Z;CndQLipB91nf2PYqg}fzVybLeD@bCX2UmEv|ZMjy~Fo947G$4&weL2Ilf?!!=UB-Y_a);#z&gv9mF-u6!wzaPQ)|U0nNC*Et#YExC z`;;t`+yS@Gzd#OWj8JFWXxxoICcL+I0wcld@ zNm+QoRHZU2ngdW2M%`XX8yp{E7HVUd^J5kq?06^V)Ao%lWtSb=&uc4SEUo;jV%YUZ zhREb130JzU3U3G4RcbCxWnG?npsGO~iVgKl9=Gg@p_ON`)ewpGg{NP6{n!j@QZrd_ z4~Su>75B!dc3W=)mufr9MzQ%n*0QPUevD+x-0{AyfM~qcx}=;fY&4dd93Zj%StNRV z^P|E;z6%eDnZAM~52wX(Q#0%ZE+nt@_=i?tOS?7))6_t=e1?g}&{mh7Py;3@MR{YB z7kpWSpqN^fR_y_U5Z|`>*`aclOjDn>wvj@u?q4IHl=-pLgZ)3|Ye3+1)<{jz|8R@hVOZ(38wKIu8e!m=%(?38|>9D9f zc|sN*`<_0{E#96aZJ@QvgeOjT?6VsYIoKtev)ynT=Vz50By>H(HD?-;qIbD{8@XCpDan; zj!lKzE)KS!xbWGFx2rRCL*RLvwaIwn8vuM-)#>wDubpEt-OZ?P0H{>7#Mza_hSyiJ zjJvJ;gBm<_hqUMjj+2)go+~xJ{pirWNCagt-pfkS@lQP7jBo%8&5kd2jHTZ_`@(TK zw^#fk9eS6qER6T$jh2)R0ELh~kh1`{ubv%kW4Uu~oDekMvT{Nmro~Em)1}vv5P9rP zE~|ZCfnJ(*K2j)%Ca6s+L-@~#_X-0=8D!zZQ)dd%tv`NRTX|k>UC7^X(J@z9wJRhZw%SgJddfY6*oUb{!Hon3Hx-zI%#fnf-=%S${>i3j8t0d_9=ZxBpw5^{L z_k3AB=5lj#p=X)m=vwIvp%j1D_L;ANB`-G^0D3Ww#Jew(EKrwvKX?jfvEp^cZH{V~ zfPOxIeU@Ohe43P@WZY$I4%;E(_~d0_8{#aVHf%1?PhlCcS3kQvpP-?DQvw&(O`0g= zU_&+@!VA)%V&Cd3iJF;cud5>t8}{ati`welF83r(7>-U-WUTB$5M^P+H^p4OYf4k3 zshSDa`96n(Wqf~ro!!155zXBAc{KOEm#RjdrP-yOgmERLtq&EVwD+e2pWYuCnHBr%|o@I%ri(^Pd+}k+^ zv!o3L+CFpCw%B>_*G>_;RL#Hl%N051gZ>ws7G7tmd7=9yVvf{ufwJpQQk?R3UY{a% zXH~}5Y|q6L%gps+d;fCV3Ax{zC{n9^ntR@2Wsxbh8u9B_UH|M_$lJh@cK_7r*|TRK zpLb-}qqDz*Z0$7}PR#q<{mQ*QH1s@EXX(?))2}n6oNxDkTJFK)!ra+dpohVPgqsNj_=i)5_FmKZ?*iL?DEdZ z;u9idcAsGHY)!bY=Kp?5(Cn>Nd9Pl))=gif_xfg6XL8-H(&NUL_gO5?&GorEyd|JI`iVwAFVO} zwQK6Eb0yNsp10%Tv!5*6Ju5R^l{fin?aoUtq&s&XWP0=G)xO!%6GV-T`WCDei}d4(adB^oz+35wg!k0UppFT|5T7Uh9bknhA7xvweo_Ou!;}0r!lXW*d z+n}0PW*Bv5(dE}cyH#^%PdYAi|737W?%Q>KuY(>N?7!~%!f+9*(B`0`>q~E4-lkbO zqvBV3{=`EOyFF~?&Y1u2XN*|8ZehUmE@3&wlG&MiCksW+lASkQ{mtPyQ!`_EihHNt zds}_NV$S{M%KDR!4yZos7kPHZd%f`vd6CkEhpwb<4hw$&l3Ct6cz*iL;<6sKY1Vw- z?=Jjq@yD>$-|ESRcA?Ws6<&;N%$@E>-?aVh7iwS@N_YJ%GfVpoyVnBr7~?sD6rG8x z`{qn9-(2~zx-2vom;_wwKc?@D+4o6ho_?3=Ct+sIIq_5MSFfsaR6SP6)X`|`2aI%1 z4-_Mi&41*ayy@2N_peS)+u`}^oH`0KFk2s4N9x2-p;bM{Ub zoSbq)@>A~P4eMhh)C%`~{%|rT>9c=-{qx(ouXC;S7W@6)zO7(pMaHS{{tUit6YOet z#-H8pwDkF^p4gaGszewV8>#{3eXPdXlPCh*CM&s?hyUSik#MW*t%Juf| z+-{xyrA?XTxPqFRwOFwD8Rd&*J_?2I@%)i1QsPs}Wi|=#7CKrM+^^TUIN5Oh-pZ0K zvXjrKs{Q|xvF~mkBh$tgpD(GE?e_S}KAT-H=)!bv!PE8ME}MogpVwo`b=KM^+3k2z zeE#!`KvRvTTi9&>^s{WYYT4r}Z(l?&-o3+TZuouHx2IQ|C*M6*lIn40>bsg+)lc)v z-T&3+emo|0X7S>;9Z&QP8Dzm3)n>*sX8G`6cBVg;KQWv4A6s4qMXNJ7r~8LID!=SC zw?>EY#JuzIUGa@aQX}njPk+*72->lCZ|xJ$o+cnLO8Uv2#BnvrV=LzwUFVdQ I&MBb@06pAVPyhe` literal 1776 zcma)7dsGsJ9;W3QnwGsLGauKjg^!7%(=9DXa9LT3nl?p3hd0c(k}sTK`h9~o zPB|M+008z4{E1!MWO@t$u&3ahug|5dE3z4QvhWOuyDq(fE$`_E;aA71e!%1al4pXc zX92s6y$&-lnX6>###N(sPWIcyO_SSRlC?Pk*E_r;x2)d?b{a7Q4_19rb{^25l8}(l z++&gU!O^2=p%5ey3elO_*~Zi$l}eRL*K0M{%njuW4vAnwh05XeteTpdYxF1KJJNo& z8VsPE*j~GgF#8%o--QEuM48g|l-LRKp!t@rg{a+w=5hZ9A^w#?MyPQ~H`k-s-eDOT^4N!s~x*PmdG z2VF3W$xK0J)VktwV$z3Lokv0Q<{>mzIL>z z1ci?+Z}SqI8*vhB1le8A7#0<%pEAObec>6&2PCG6W1&S6%n<(wc<#|MkYw01MGdVa zzCdNBhm*L#^g_=S9+FWt9;?ewT!fgWb#fD57Z4NTPmrO{*JVTMjjXsq2)~fqi8(R> z*Q0&u?p@{&o;o6Dk;fbDP{Kjc`{+ z(lsMGCZzAX2tT^}!m|}YzSp!I92dAZ`*^~f@0<6)dJa2&R{qF1U2yqox+@+S)m~!D z^^~!$O9`}n{F5=#56$CzW3pb^ASgp^dQZyIEfnq;c?eMh^f=Sf)T?IY{mWZRIQ`dP z{cY;rSOa{!F(IWBg3Vxj`5u+{gK_u|(SH6Z{>wrXw~gT-=bSGUc& z{4u0Maa7FTWchzjQjTwBhVfNooP>&$VcYvhirxC}z`jkb&GO0Zv~s!Y|FJ*}RMdmd z>q$$$hqja4cu|2oN^<3~NlOG~jf&Knd&tvlAT}0B%%P$QY|O%=82^cq7LWbL-Qsum z?F8Pf)%H!%3VG3Q|D0DUoCXC3+i)a3B=aj-fh2AAttxt3=u*bT&-9(L9h>Y5Opc8w zg*$UY8Z$0f&tmPRtj)+~8)&d%sYI5IVHKmQtdVN=i;3g|wEBGF);GF^sU7N(qRveT z_T4lrpX{X!Zo)}6MPv2vZtcVmH$_sUM7;HGYbzw^MLXvcIJuhg(*K)><$~@j%5f!Fi1M zdq|zV5ZnDw7Qnv%CQ!zpO+%u`C#s@#bKiI}zQD6x?L}2M|54t=e@qtp(!a(!u{Z-4 zHH=XA=F%NDGl%Xia%@U54PsTV$ItrU*FcNEI=9SPB6J|y@MnIxz^*(&>qq5EseRec zi;;zzH>+FQzg$YvrX|$f#tn6&Bc6CHBI@p?Y!q2Bq*Z&nuk>u5=(yBs>kt}X^YA3R zo(RdU(G~dXQ#*WD+|yT}4|s8!U`=<}r@>8drhs!ejTxd$BajoU+YTVr(=60K- zr1x12{RZ;Pe~UmGd}^DtkwM-=HVrFnJo0~M*9=r{s(3DRSE*k*P4QzlhM;hRUR^V_ycj)#{QPyK@LAMqSUkY&Us{r3NMAXec0Lc}7e*gdg diff --git a/design/multi_provider/multi-provider-design-doc-assets/image5.png b/design/multi_provider/multi-provider-design-doc-assets/image5.png index 890985f647a5768262799b1cc1baa62652ce208d..e5747b78bff4e3603488be2929e9397be180a01f 100644 GIT binary patch literal 11036 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 literal 18467 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 PBXIrd%`1g!<{|$JTSc7b diff --git a/design/multi_provider/multi-provider-design-doc.md b/design/multi_provider/multi-provider-design-doc.md index fca4c489694..429de39c3b6 100644 --- a/design/multi_provider/multi-provider-design-doc.md +++ b/design/multi_provider/multi-provider-design-doc.md @@ -10,16 +10,7 @@ The result is a single DAOS deployment that can serve multiple client population ## 2. Background -Today, DAOS and CaRT largely assume a single provider per deployment path. That assumption appears in: - -- provider configuration -- interface and domain selection -- rank-to-URI registration -- attach-info exchange -- CaRT context creation -- bulk transfer handling - -That model is too restrictive for deployments that need more than one provider concurrently. +Today, DAOS and CaRT assume a single fabric provider for the DAOS cluster. All clients are expected to use the same network subnet and fabric provider. However, it can be useful to allow a different client cluster with a different network configuration to access the same DAOS storage used by the high-speed clients. The main intended configurations are: @@ -37,9 +28,9 @@ The main intended configurations are: In the initial scope, the deployment still has a clear ordering: one provider is primary and one is secondary. This design does not attempt to make the two paths equivalent at runtime. -## 3. Goals and Non-Goals +## 3. Requirements and Out of scope -### 3.1 Goals +### 3.1 Requirements 1. Support one primary provider and one secondary provider in the initial implementation. 2. Allow providers to use either the same or different interfaces and domains. @@ -47,7 +38,7 @@ In the initial scope, the deployment still has a clear ordering: one provider is 4. Minimize client-side changes required to use the secondary provider. 5. Keep the design extensible so future work can support more than two providers. -### 3.2 Non-Goals +### 3.2 Out of scope - No runtime failover from the primary provider to the secondary provider. - No automatic load balancing between providers. @@ -96,7 +87,8 @@ A client running on the secondary path also needs a way to identify itself as su CRT_PROVIDER_SECONDARY=1 ``` -That should also be representable through CaRT initialization options so that the role choice is not environment-variable only. +That should also be representable through CaRT initialization options so that the role choice (primary vs secondary) +is not environment-variable only. On the DAOS server side, the configuration needs ordered multi-value support for: @@ -105,6 +97,8 @@ On the DAOS server side, the configuration needs ordered multi-value support for - `domain` - `port` +The future extension to more than two providers would establish one primary and multiple secondary providers. + The configuration should also define the number of secondary ingress endpoints, for example `secondary_provider_endpoints`, with an initial default of `1`. ### 4.3 Engine Execution Model @@ -220,49 +214,28 @@ Expected subsystem behavior in the initial implementation: - **Control plane** must understand provider-indexed address registration and attach-info exchange. - **Agent** must select one provider and return the matching URI set. -## 5. Implementation Phases - -### Phase 1: Configuration and Address Model - -- Add ordered list support for provider, interface, domain, and port configuration. -- Add provider-role support to CaRT initialization. -- Update management storage and control-plane messages to carry multiple URIs per rank. - -### Phase 2: Secondary Ingress and RPC Forwarding - -- Create secondary shim contexts in the engine. -- Register shim RPC handlers. -- Preserve the intended destination target across ingress and forwarding. +## 5. Compatibility and Interoperability -### Phase 3: Attach-Info and Agent Selection - -- Extend `GetAttachInfo` to return provider-indexed attach data. -- Add agent-side provider selection logic. -- Preserve the one-provider-per-session behavior. - -### Phase 4: Bulk Transfer Support - -- Extend bulk metadata to identify provider type and role. -- Select the correct transfer context automatically. -- Validate binding-bulk flows where control and data paths differ. - -## 6. Compatibility and Interoperability - -### 6.1 Configuration Compatibility +### 5.1 Configuration Compatibility Existing single-provider deployments should continue to work unchanged. A single configured provider is treated as the primary provider. -### 6.2 Wire Compatibility +### 5.2 Wire Compatibility Any message-layout changes related to multi-URI registration or provider-indexed attach information must be reviewed for compatibility across mixed-version deployments. -### 6.3 Runtime Compatibility +### 5.3 Runtime Compatibility The initial implementation assumes that all nodes participating in multi-provider mode understand the new configuration and message formats. Mixed-version behavior should be validated explicitly rather than assumed. -## 7. External Interfaces +### 5.4 Bulk Compatibility + +As described in section 4.9, the multi-proivder implementation requires additional metadata to be transferred along with each bulk handle. +This breaks backwards compatibility with previous DAOS versions. + +## 6. External Interfaces -### 7.1 Environment Variables +### 6.1 Environment Variables - `D_PROVIDER` - `D_INTERFACE` @@ -270,7 +243,7 @@ The initial implementation assumes that all nodes participating in multi-provide - `D_PORT` - `CRT_PROVIDER_SECONDARY` -### 7.2 Server Configuration +### 6.2 Server Configuration - `provider` - `fabric_iface` @@ -278,7 +251,7 @@ The initial implementation assumes that all nodes participating in multi-provide - `port` - `secondary_provider_endpoints` -### 7.3 Proposed CaRT API Changes +### 6.3 Proposed CaRT API Changes Potential additions include: @@ -286,16 +259,16 @@ Potential additions include: - extended context-creation APIs that describe provider type or role - a query API to retrieve the intended target from `crt_rpc_t` when the RPC was received on a secondary ingress context -## 8. Testing and Validation +## 7. Testing and Validation -### 8.1 Unit Tests +### 7.1 Unit Tests - Parse and validate ordered provider, interface, domain, and port lists. - Validate provider-role selection during initialization. - Validate preservation and retrieval of the intended RPC destination target. - Validate bulk metadata encoding for primary and secondary paths. -### 8.2 Integration Tests +### 7.2 Integration Tests - Client attach over the primary provider. - Client attach over the secondary provider. @@ -304,7 +277,7 @@ Potential additions include: - Binding-bulk flows where control and data paths differ. - Restart scenarios that verify provider-address mappings remain stable. -### 8.3 Negative Tests +### 7.3 Negative Tests - Missing secondary-provider metadata. - Mismatched provider ordering across configuration fields. @@ -313,16 +286,16 @@ Potential additions include: The expected result of the last case is failure rather than failover, because failover is out of scope for this design. -## 9. Risks, Open Issues, and Future Work +## 8. Risks, Open Issues, and Future Work -### 9.1 Risks and Open Issues +### 8.1 Risks and Open Issues - **Shared secondary context concurrency**: multiple primary xstreams may depend on a small number of secondary ingress or transfer contexts. - **Persistent address consistency**: restart behavior must preserve both provider settings and provider-to-URI mappings. - **Wire compatibility**: management and attach-info changes require explicit interoperability review. - **Operational clarity**: provider ordering rules must be consistent across all configuration surfaces. -### 9.2 Future Work +### 8.2 Future Work - Support more than one secondary provider. - Support multiple secondary ingress contexts with load distribution. From 45812e39572edbf8d5c28c13f6ed88cbfb7a3cab Mon Sep 17 00:00:00 2001 From: Alexander A Oganezov Date: Thu, 17 Sep 2026 23:22:25 +0000 Subject: [PATCH 3/3] - extra feedback Doc-only: true Signed-off-by: Alexander A Oganezov --- design/multi_provider/multi-provider-design-doc.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/design/multi_provider/multi-provider-design-doc.md b/design/multi_provider/multi-provider-design-doc.md index 429de39c3b6..a7e6e69ad6d 100644 --- a/design/multi_provider/multi-provider-design-doc.md +++ b/design/multi_provider/multi-provider-design-doc.md @@ -2,11 +2,11 @@ ## 1. Summary -DAOS and CaRT currently assume a single fabric provider per deployment path. That limitation makes it difficult to run one DAOS deployment across multiple network fabrics or to support separate client populations that must reach the same servers through different providers. +DAOS and CaRT currently assume a single fabric provider per DAOS system. That limitation makes it impossible to run DAOS across multiple network fabrics or to support separate client populations that must reach the same servers through different providers. This design adds initial multi-provider support with one **primary** provider and one **secondary** provider. The primary provider remains the normal server execution and server-to-server communication path. The secondary provider is introduced as a client ingress path: requests received on the secondary provider are forwarded to the appropriate primary execution target inside the engine. -The result is a single DAOS deployment that can serve multiple client populations across different providers or network paths without requiring a separate DAOS instance per fabric. +The result is a single DAOS system that can serve multiple client populations across different providers or network paths without requiring a separate DAOS instance per fabric. ## 2. Background @@ -218,11 +218,11 @@ Expected subsystem behavior in the initial implementation: ### 5.1 Configuration Compatibility -Existing single-provider deployments should continue to work unchanged. A single configured provider is treated as the primary provider. +Existing single-provider systems should continue to work unchanged. A single configured provider is treated as the primary provider. ### 5.2 Wire Compatibility -Any message-layout changes related to multi-URI registration or provider-indexed attach information must be reviewed for compatibility across mixed-version deployments. +Any message-layout changes related to multi-URI registration or provider-indexed attach information must be reviewed for compatibility across mixed-version systems. ### 5.3 Runtime Compatibility