From a97bfec0a743fe37acc09118c61e51a098a9db76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ilkka=20Sepp=C3=A4l=C3=A4?= Date: Thu, 10 Apr 2025 20:11:01 +0300 Subject: [PATCH] docs: separated interface diagram --- separated-interface/README.md | 4 ++++ .../separated-interface-sequence-diagram.png | Bin 0 -> 29223 bytes 2 files changed, 4 insertions(+) create mode 100644 separated-interface/etc/separated-interface-sequence-diagram.png diff --git a/separated-interface/README.md b/separated-interface/README.md index 1b26f40aa..4497e360c 100644 --- a/separated-interface/README.md +++ b/separated-interface/README.md @@ -31,6 +31,10 @@ In plain words > Defines a client interface separate from its implementation to allow for flexible and interchangeable components. +Sequence diagram + +![Separated Interface sequence diagram](./etc/separated-interface-sequence-diagram.png) + ## Programmatic Example of Separated Interface Pattern in Java The Java Separated Interface design pattern is a crucial software architecture strategy that promotes separating the interface definition from its implementation, crucial for enhancing system flexibility and scalability. This allows the client to be completely unaware of the implementation, promoting loose coupling and enhancing flexibility. diff --git a/separated-interface/etc/separated-interface-sequence-diagram.png b/separated-interface/etc/separated-interface-sequence-diagram.png new file mode 100644 index 0000000000000000000000000000000000000000..162690d41176f6159f25dd612021982be8918db3 GIT binary patch literal 29223 zcmeFZcQl+`_dkqC5D`QY3DJWaL4qiwjF2FS5r z#*pZ3^gd?hH*(+i^W?jJ>;32b=Uwkw-?5f;%{lwp=j?Osv(Mi9v#f|@tTr^jPx4G1>zMc z@sA|bo`n4OH3_>8D#(VlI><(`1hK$@|>{#nn@p#iGjV&OOKaossKxn zlaRR;$iiC4+sWmefJDX{K)iIa_AqDnc5-xf2YAbJ{-yvBug{x>IoW@ccsR&%zEpd` zt_X6oW)~N_FLa+%?lL<&yNsKa4M6L$(m%HozsYjid3d-0goVAlyo9_&g+Ok$!VjdR zq=fH_2#bga5-9}TeVjeay#<}!x&CJIFQ3QO?v`%$E*|zEXZCZx<`y8Zhb$-O`9S~q z{5?+(dz=4`BSVRGZ&wGR)2;CR{4{zeFGUu%T4L5sh;>hRxpPZo!ZF|#Cm)4Q50#a z>6Kfm56AYIRH>Wa%d-c|E2tc=(!E}3W>R?i_3EqeRrK|@->x%G`$?ge*S+uu_8RLA z&9bxT8K+bq@?EX=@+4$*LGp(5ovOvtaRz^X z{io;aHTh0$`u`9STVq1V>2~d3+F9Ku-t?dQDSg)dbA8@C97CcYM?)QXPw|}hzg-*} zEdRMaACig4J>NVt*80ye*%t~g{Pz|zIu%7S$`i4BVpUiEndxtC?_|J#awfA^A>l|5 zd9Ren@vlHcvY?p!tG|W&X9DarRO|~Q6@#53|CO7BD9-4goGEiSNZ1>#PvxYgivVa&l15fSz6nEWt% zLLk4Iqbs=`A*$_1bPXYL@0YXhH5EOqMnTMx_)JLuNcC|iIEG4W)SG#imcKY;stE}! zaIBCHAU5?g?`oJmH%fE|NrP6JtogRZ$ggQ+WO~lTKxEuL({XGul^(71kNvgfBNK5~ zow6-H2=;BQ;mB|#vMI{eRO^8=vZYzstL)?;E#Cs)#Xv5u^cB@&PdIqmaEOtGyVGD~ z%L!s~bSh3{g@gEcp@rI5c*t6Rv$7zk*X&J3ZD*~<@wi4h(t+zt$QU$mZgb_y;&*S{ z8<))~_|!SwGMmjKEN%AByYHz6@u@nJWu*?Uyf$S41Q)9s!u`wYTA$^^YYFw2eL!!) z%MTwutg=x5;D3~EErP{a7(C2YDte|>|Fx5eoQWgGo<~qSdSGt)NdBh)aMjv;j!4;B82Q`z)x)A^6dPaK6LQW&sAGW}k32o7%Im&Q0mXcKrd5nEa~_)`z=DT;uc5 zH;z*f46~0Dp;(}Mu?hrC96;W9D1Q}1nF9T6nL7KbpEU6tZf_|+WA@ZS52DOk)LvpiV2&-{ zUz-J-Hmea}ku7w1&<*aTOVF?7pv0cI)pbYP@mdP6eF0|Mbm^&~`Wx0FKAOdZ!W{vH zja{l>jhj}THgC~i%aAwNPXcH;c2AB8tN2`ts2=-AJ={=idQL4N)0m~H%0 z3l0c`gxC|#NbPdqE+|{_ntsH6h>gM&#Q0qkb7VE)bGbyLj=$bgHRty`lwy%V<2a^~ zOHEE$_8NJhzsgHrW4%7Ew&#QFT$H`P{st97EHRQ2N9$Y|Pv+0L= z1B-kdz#b|4yH}@+3@Ik0S2aUMW_Z->^bMtCNaxh7Jbx%$(o><%_bUC^cY24ClC%`- zY#8Y@NLq@qo>wp4#GgVt74hD~jZYw2J%(K&3kv($0@Tg9<6U>T|prdqS zrmVs+zb3JL#1j)HPN&b2PI=*t@uLda07~*oLGq!c{leGw z_J+Mbrt(pm8_7?M9ciPZ)Jmm{EB#O?n-jN5{$`Ztjg29C> zc`(I%C!RWd#*$Vvf1HkFH1zVF5|4QI`du zx2o&z;3eXrO><9c&M`mUuk(>UO-#x3mBN?$Tms9Vo_hx7Il}dorJSa>U0AED6pQ4z zda^eiw#IdSEGyTS9os0MjPRmD_r6k*vk%@6{?hvb)mtPhey0i#g`@-If22Qr;g(&q zb()#FS^X4gEajVeHO>jYD=bi!n4Xj$;jx|Z=o{29qdF~T5tqrS=@1u9+mWqPMQ_^So;zFZN zXVQ+)b*0Apn{^^*8U0nOGc1cqULUgz{YRqAo*Z;A5Fb#`wFw{j%!@nY1MO~IJ=DQu zLv?UnFQ(Oe#9<#m7gDb2 zTg@Cy;Y;mt?^j-B&r$4#Q-~5ORg_P~Do!(MYC8vL|ZYoBBm$Ri5@<@kC1lS4#L>yF6@juPebm*GpH z3!aX)t%6_R>Z~l%YT-+vrp;!u4vf;uhz!d*V+lx(zsnYx&-`h_FG+Cob8mArhTpPX*cJIqxy%)pIr>tr$?Tdz&5Cz3;!Vv+Y@;WJ8+0#4!1DA89rRL7QI>H(c24%hWs);B zI_c;Zm+YP*Xs-omRpMXmmVD=Ei1`rI9*K(llzmE5x#RHjndr5XsW(z?_=O{h(~@dT zb1wD5#=vZ?`N2BKC@RMCl$IWt;x~gTpd_|-||^SPlkV&Ln?PeZMHLD0N+Gq z^fcXRN~Noa-=Mid!GrfpJS*DR*YW1-Pbn`NSsR86A!%2pa+`G$$0r~ewHI8vLQ(Jc zG_3%PYx_>Y;n=K;nNbRoB)r4`Bb)pb+#RbhB1Aix)r`5NpL{r4$^M)b&{AGAK#h}1 zGt;q0Whm8oJLUF@S{Rr_B?}W)sBl&*E(pBmz{tL0VJ#*L+ z==2&ui)5YFK4qduOnJzK3%s^^wS33tB;t{{s`egZR15=U4oUE#RKqZjw2|lLu;S@0 zdc=<~6PA;iDofjB-|d%^a7#w6>&2z=EYo$(5fUG*Ypd6dVP|A0(uqoU2?K{T!Q!$i zXmF_Kj1k~-J+m7?0sqF}tZ4Q6?O#m=C67;&quQFKG2Du%_cs&j#6TKbb?F=CZDmVd zWvh2<2D)OY#nIj2=1JwjPE$tM=rxIn5N(bbJ_(I9X0W^@!F{~67Rnr;B+chrsxB>v zxP5<=HNVu98(3yw4Y-@^<~{q!ZS7~D)8~*ha2?HG#Erj-ysa40)1U~85mIU^7gHU@ zjAWO~0AIIqnp@{Af@2IyN;K@nW5^VGrOb1pr+yu6tGkjW*qxv^f3_-~(m#z}IC5v!h`?%g*AB zTXu#6{swm&Q!5(L4;0g|aFsGYfx5E>Zz%={E(RDNVAOJ2;%M=`$a`#P8+a8}XDYeudN3|+lzH}R_(i;h>oW|m-|svz3;64KFEa%gtHvap6u9?67D>N{<7wthZQ8Bb zIO-RuDwl%T{h&RZNs~RDuv8qFN~Jf0p!h$PGsp#M*NNNOX5n*c1yM*tRk z$Whs#!`I!~F_Ep*7twwbcxdxC$xsqrvDdeCR#&vR%27V~}Iv+cI z)<5i`gKVx9`$AY+623#lOQ%9gw$~SS&^s3sG*&3OUZg)?AnsA4}A6$0Ej z@($3YAQIvrdZ2u{Pfwoavx^!#W)_5tNB)Iw4iPliLqo;)V*d-Ws z-;Wt3Z&up$HJ#KuqABGd9=ZEaW-wq1-`!+}Iax^yzzhYb8B6MS_oZF~ADxMev4+;I z+eJUZURG7-*8AL%{X)t1iXURshk;gsFD6mjW9rZ8xIabIliVOivtx14PDp`Bs z@o=Zw;ohM`_(`p{#^v6o{Sf2e4@PMFx1nRyaSS`OpnEC9`>4x!(`Oiffi`Q-%! zN3LUNs!=LIMH(I8H445^z6mb4vNh4AuIz^QC4TR7MeiyA0}Dsuo181@57(xisA?O& z$~%@^{$9VH!NOc-{fH};>`>^8L+63?K`}~uykzz4h-oi+uc#rD)la+1$l%)P{O;*P zcdJ82W~M?pBg00?QobF!OT=81TyWKtIT$J;YW-;CA*^T2aNv#3GIDhOrtIEAXXzA5 z6Wf7!$!+%e2`pv2wd1Imq1|_n)_qB-uK0sKe$DC)HDwNa@J5*DP_w6bL4PTzGa+Tj z1}u^MB*m<3Vmt9U&Lb`GIeMyla4IFb_l>T^)aKkMy@y1=kCS${v*P5WGWWBjgrsgR z8{eMmqO!JO$+Hl&c%zs!JgYmV?!(5JM+qiI(zGv1l7x1YC6OlRTcP9J_pR}#4F>*s zdsDP$>p?DhD37k#=RmY6{uE8=DvhcqB{7+viZMFVF5qoEX@OcTg%-D_f8&yV=T&RJ zG8uAawC?msac7>ElrqdmmL+Sj@18N(Ib`yQ61w1VZmA~t8b#*dohKZ}U%)KHqS$%J@ zJNMUdZG7g5Q(1A@4Hk6YoawTM1RI!e>Qi*$Z|l{tYI!qT32rx_6fz{ic4}L$Va_~c zFW%2G?Ux}t26b~8qH;Xe=R6JYXHflF$&lC8Fb|6h5XSIwX>9SW>*+j&sas|6#zlU0n=Pg$t?BRTmwo0&-I*K{YsH zA03di2%>TI-eb5?@3gnc_9^UwZzV={=bN6y54JurC8wC6#PGH!ShP z!JDVS&6he!x1vC?$)MyXZ~)8{Hu^zPDlOqjtAdlKT!8Bvo3_F5&MzepRd5x_a*T7tMBj`oBcL2tyDP>B3o2jF|8d7JZu{Nj2k}NESYPS#l*`kP`?#Sf@ zICZRh>=eWKMZIPkp2GU7L05boP3`90@OOxh=ahUptNisq&hBeu*)$#0r}v>OdUvRy zL(Yh=r!VF9jaAFuX)qXm>mZ!!<3`ISJi3u6S6v)XP%vqvFL29rd3fh^wV_8l_xb3t zpt!WAEC@giAS-8igOhM@$RA%xr`NdegX^gEOk%3Fl^#icL2vdNFK4`;eo;JmX<3yfndRJt~d#L zlRMIlk~Nwkmbt&OWSRTwsINp1^a;1DMFHXSQ4Bkw2ttaICG;b#JKn50Q>x6&;*fq8 zVogkq)}>$op;bS=j%m~y?3h?D1?lSPb)k)hOi*>b5HiN}Rs8D3bw+U)MMEPwQ+gsh?sqZxm zmS|1$3_5etBf>6fM|OOg;$V7B2$dUg!KpcYj7x94YV)gcoB=oVSNRCqdMYJg8SxPH zvTmHs1)WKZ6EE6G_qw4zZ09Y@B9nF-uiUG_q6Q>@DmVJtxgbNsPbm;oyeVi&vT3|m z>X{PYx^}P6mw+}tPxJgJmm`r8J>TosyRQ$>D*14Yqb=YmPoRMB8{pL1t-mnU?wISJ z$6pW39P847W?JI?%^z2J@*B?8RA;I~#JZ($J9*|j`10Pr;G1G2F&_^dYbu!3kG9es z$FDlxYq1;1OPTH9x*Fz(wSBEtlmO=ip01az>p2^fmzrF|v1w_D9eV6UXP)fF;wz2U zX`laMCkZ}g*v1zXNz~r%F+$L+2}zjsI-PC3yG(=b3A7YqJwd(noqj9NPd8Y~a4-@x zV#XeMeTV6AdFo`BMi!|BVR?$waF8qy^4eMb3xU1ya+wix3o{w=z1ghsqIC`Sc#Qk& zXbN1W{>>jSiM%1*tH*MJ;U82L{()y=UXv4J&Vb1Y@%X|-v)y?h8Kn;)f$!#{fBQ+u z%7r7GUk$1@yf(jp!^4ayi`!COJM$&gph;9alKY$f71riRnm^VLE{{W64^kI!L zM<~-tJbz%xQ}SSTSTH*(Ee!sIsZfKx(}}&aE62@#*8>_>ciA z@Vpqh1GYvPZ8O9#z#Q6j2Nvf04g~dVKb-iH`xv&?U6*Lu$@S&cyz6t;KM0T=)Gl24L z=+{KFBH_}d2He(QownQ0cz*IY)mM#mEKXPF(0C)0PQQltcumI1)B66nE7GiIMhxxvJUxtgGERnDB=7W)5u?=R=0ONo5Q4`bW(Hl}C)vJNRaLOjsWDz$?#ao?!vS{8w_Qk{$r*qDLjH!>@0?mg?{uL|mi)VmWlpue z6Whc?GtYHh`s*W=3}lH!0#cLR3$yspnytIo>-YIJswr=hmhQbpc@epur@Qexp30c; z`n`biH37_}iWR|^x>EJyp11h3z%yeIkP#*JUa|wTTvo_r?e_<{^LvmKKMd<&n_XL|NEQJ}5VFqYfSA zptB`wT!1A(Xl9?*^z#<|#*gaO?w_0 zzV+Qt3Uopdp)g|BUcYXW&E2W%4I$+$-vGZyI^p> zh=)@=hN4>QM@Yr3a;QR{f(h_6y8f`OG)y01NWXPsm(TL?9T5d=^o7w|Svj~4lG5AJ zgZS*$ES&OkoSoSe#Q#IS7B;%LN?TF4$s2mQs?6LN?uT4CxV4&f@+9P!uO<1~<&%<) z`kO~TMCLyF{R&yH{4r)L3&`9w&0no$*cnPYcs$>u-O=XoW&R2FNb3Vq3WIpqrR30B zCf5irQ=Wo^!7b+mFLZo7+{(RH?mh)^h#P}5uNntajN^nTKKBy;T!vXA419bzsu!4dipy zDz+Y|bfpKd)Q}+DatwDUe(QXYv zZ$SeKy3T_^Xg;Q*k;j6bO!E=J$+C^6NP`D!wfb$vW-J`#to8MDucG{oE2aP#i}6#; zn*YMkd#d4~2QK344>7YtDjTtfY-}?#fU@OH!0xT|QEh3xj<1Va<@SUqB?}@Ze!P7+ z?kekrjO{qiVGVz{sbCuKdPz!ge@bAcd0FU6$2f0BxrA$}##bW*GXR9s8R1nDX6So} z0ZLgbW20%kKse_W89BauyD{SG;MBbJKz znfqU0Ur1;g7OyaW42DnN&kUImTbOlGo&NBi2yxwf-RBoVY%Tx4T6qk>Qke=fAMYAm z^4p`UasNzF+NO;(U9*_$xwQ1bRy}-(>IGxA`-gnt-ub5z4X&a{&W5w6EdK?6NXQ-# z(V>oak)eMagX}TJM3`k^mlyoUIY`+?1f19y#99Bxx$H))e2DK!AN>=BqGKQyI;c)~ zQ~o(j7dNr4K?tHn%&q)qBzaXLT=l?wp5xD9?j{jSJpOl*zso=Vf3lLn8=uqWI4E8?)NNXo48R#p%|qHP_jxgD z?3~4$a|iKL+||!eXYz5D3pR2~zLfQVpHXQ>U;c4Shf|2^Tlz7&SK>VhSsCA_v)dt6 zN45K{!{hypE9IrF|vps;*r{P3Yv^>UUW}To`ZefO1fK zcaM^gE1Xv{k^i|x|DP+Ff|V#oM@KuW76o#1ayI9FDY4FbMvx2PurzL4TpAyRv}9N6 zM;6f0avvY?KxFFR^^c!*^Pibt(feBuiiw3=Fn)E;J?3EEw1B6cQ(G#NdxP`V9Ydi# z_Ke0npcbrob>A840M@k~i+yfyU~oKX7x*icN@nP4cem~nu$D30@qOP`>5+_a2jZdd zA@KCN)XtZW>yJ+sC1$&dK`jE=N7G}QV%1w|ja@XbS%HLv14hue&tN{|)Q2yPb`8B> zU@sF(UShNb9#H>Q8VjP`icYvQaFX_QexT(q3G_h_%ZFLpqu44`zjWuanOZFHY?0|? zsgW(k8o`jY?l2yj{&9)1CHZSS!qlrcg30}hj;?;FcBz4x<$yqO5fL*F(9$y0)5riG zob^<##yqN;5y4S4!rQGRR@wmF2;M|@LqXFElw%4>?RcCtsADj7%ghN9% zNd7t*z%B5oRbx_G1L)E?9k4gHJIG?w-62S@#RWo6#x&Eu7ju)3-z<-Z&0tjyC&2kG zVu}>BpT2)5OFlltnj_@XKI7BX9~w56=>#S>s&se1Jqh8Av5p=(S50w+Ahvf?ly{sj zCVhp?60Wm;mpXZpSF=UPWvPF4KzxpmjBu9oR-1mE>8C7BFcM!t1%Qns9%Z8jAZ^N%B>_Y1R56VMWW?4sSv7QScy$M$fU z?PEzFEG{}1w3X&Inn@9|)ewL2W8%cfCK?V9_8aw{5v4X2;OFO-kjU?E{vo7y{YKB1 zc6y-e)Py1*#7x?mbMK~b(%f*}aK2G~q-TZJ%pH+)Lqa^}8HmSxL_Zs?kcsAk1ATdJ zjk%uhNROkFYbDKeu6w=`o9|*RtRxI*x1Tm#=45oTJtDlY%4nL{50&n2$WI$w*<+@z za2w-4ISftTP?n}Nx{A`#ktAS3P^GW*f62JD9WLRcv$FjAn=ZPw&I;9Pu6;RrPH=sz zia(W>HnB#PhV;CX;OWYt1;&05mJu?EbZU-J=^yB+W(n>Ky;_N!IkWQybJfjG{c!IC zZY9ovxerU?#c29@~g6uo0qpE1o5*9fr@GqH*yqe z@M#b)KW)hCEU zYqxYLn*YK8Vf5nt0hF~gHSla@z@=7y09-pQiA&AdZT~HcviPhd-3jO@-v`8tF2!od~!ae#WHI0)6 zKXo)qKS~(&uspCqY0+n{Ic(gp>K+(B=X&>VxoRrdV7T|kuW!A9Xu26Q%0dThuYyzlD z5PyI2>ph&=s01}#&p_YOeJ>5~I(`c2&RE?ug{$s|LOn>Aosgz{ilJ9NZEW0=+Sz~uJ#={A zkek#L-snD>^(-}EUstPR7ZwxQI{3IK0|aU$CQHzp!unOwn)&WqV~fdBJ8R=*G^Nsm z?wD7r*V)R~%>))0g(K;9KPrBF1(t)vKwI($gS|`5-ukXjg)9l4(TGSpo_q8^^~qFA zcO1Gb^gmK=)T8x0+m2&xO=I5IDrj+yY98UD08g$;|GLLaXqvj1q8u@4cJ)qk=!ys9 zjfz;rrxXKeWXtzG>fE6-!%wSWp%gSLpnyD8+>p?C?}asRcU%G9)STRm*^E7heC~r9_Gd_%Fe!_^@ zY+QC$Q$KaA&c`!v`Li>ouyqo#cK)?=+yFT?L}6abD`T>6IZZh&&Io^yv4Xk+9Vj>F zgnC}~0K|EcUzN5q^D~lu3}07YNKB6%I6at>zEPl@balAdodS^(Zt~mRq`N?bJ1m2K zaD8KU8Eo@B-cAgmQk9&XIkek3WCu0dj5JH{>7{(QT(U8!$yhhz zgVXi&dxlopt@C56#15wKrgAOLxogn!=AKLty(hh&h=Wb#@!9s=kbK* z0;5FzkQ77K);20z&QNQY+0C$Hc0Cfu^D_HE%HW8sx#4jXXI5-mJyenmxql+^+5%!! zVW|T__$Uc^3W~Wm7|rPvtd~c4ZqONa-oCAGt(yRSlg)MFbeS1n+Xv?6j&o=$*8i%s z_b~#Ii-c!KZSD|Lb3ECDJ1=gItyUbXl0Eo zAt9-!MLF#rBhGe+FSWH%^+BFzfrTr#^`e%ZW4NA$k4JWJ z?a@?kVmQ&laUbl9MvxlO8_mV`2M9qa!lXY;(z&JU$5*YWUg zC!alx=xIH=2X+jRzsxXbRs>ehpZfW4h#scSE|x5QD(nAed`}X5{XCc-dSh>22X`_( z>hKh6u?rMb3tcASTccd}>w7|;vgZDWos=JJjFFw4xsDh0b&y!(YYQ3qnfO8TY{~i6xzo4?B7<1V;lpuvZ z%k=ANv{dW!s3tj=xJ3 zfjz;K#0hL+s^+yE1|aB@gKql`;6PG0e@CnGF~p^Kt20GfJ4Pj?H1}4Q)VP77=XJ^Z z-;-b`CWa^qYc4n!>rYfpjHM@hGx~wAp)3AJH<*d{N>u#3Cr?i2Ps;D8`uiqQ%HvNY z*iLNCtAE0$-^5>Mi7JK{GAns|&iL<#warI_Uo@z1R{z^TT=g?GVwzxUw;k|Du$fK_ z3ICVf{|9Twj+$LEXZiiSa-@GJb{eS`fHYKAR#rLYWnFHA=enaeH$i=#r=X!^pBc%B z@lSgKVtG7@ZK@cVkRiV8#K>y!+dGgTQw0devgi>upE{uY#zo;J)69p;;PZD%= zbWx66DLp)871e@`BVITh+^byg@M_InlJgt&!f{Ao#wAB9zKgzTx|d1t@g(D2Uz%@`+3De72MfpKG&3{5RFJP8$4(r3It}y0Ggz zuMNb2gqL?5pVRGr6M~fdk#1GdCQ2(NC|UJ~xukO>w!KOMj{jk6bBH_BKjr3~$$#Hd z%P=Pco{5<#MM|mbl^X~U0uI!qPNts|5v06d6k6N;YjfB5_=;7&eTmK0;UFFi332Rf zf3J;bu+f&!%aG`4ME`PFe19xz%TFip%txtu9*S_Oj9lLgO?N!3EP0 zYPC(zrVaVo2V1kEcol11J4Wssc{?s;5ymWoVu5K7p7TI(&^x|A?NY6l)mhH{^e)SJ z(+K68bJuM9PHBdOOd1SrgpGN2Eb2M9`-dZmvqL|NIQ!cgza=kgp1bC=P{zD?qP&%; zG3)*G5bZ9(eAv>FX1{&g`8fJ(>Q(6{PYM%wfIB>exmR zb27>Xp~B|2KMhe)3ONxetEw`z`CKUe#Nqic=em^$p8VJvc`V9v@qBCXJ$(gsExc#Y z@~m4xaYRdtJ3hM(T{BiST|Q2#KwH&H4+%-D%`{gf^2_iX7wA* zbn6C1#W|ZugTyeoJ$jwl^QJKpJOS*_69tnLX>SSUN68v`Jd1YkNi6>)&E~Dj)3O)5 zu)NsCL9xN*Fn;rSW%7C;GBVR%gqu5ew?6qz)?VXsuhA>Eu~qq`FOa;As`ymgcxicL(?CWsM{r#2kv2Y8M>wv?Oj|&Hktkhoqa?rELv(+Nz$E|ndY=8pCAow~d zpAcW{EY!7XVR7jhqNUk-X`^Adb$k45X?by~W;#j8mqnxkv5!HIOo0bo^Sh8+Y86lx zn!O5x0T<+3jR~<&TS?k^-MJ9NBR97yYeKUZZ0HP&AXHCZrlx+}dL|Q)=J=rY<0xJwZ=(|Y^6&j zzJif*|CWUNHu#-S$|Q%fGC}t*p!wW@IM+{jYWHnMQ&V1eV1REImLaWp?^1@EdFD#N zak=|)*LbT$Qjah|-}DXvPQQ;^EP5_{1<2-rHzB8;_Jk5MqVIHcbh?KSvIF5DmSn_U z2m+=h^d(xrK`#ZyM2;D-hmy zY*o&g;;u?a)8b|Y302g(53`8kxBWQk9-&o9H?4@Wr9 zHebI!x;oHHiHn!8UK1OlH-Xw@DQE!!DJ7eX)u^Y6&Qk*;7(r;tT$;eWPFNstw7)S; z6x7lz=Z$DC4MS3+pD2%f^Z-OEU#xVFF5CfcOnkfK3cAYK+PMC5uY6#A1z#qOd6nJW z*GENd#bWIR;ye`3GDYi%;#APj_73Iqe>v85y-Ie-BegfpPbm~O`dlc#X49Ku866qG z;yKtN9@c*}<29gpXnf?Wf3z22hSAJlTk*IH<{t&;-%e_2X&)?90$eLU8ojZwjEZ{K z>|&Pr$U(QEze8EMc&;>TYoaV>$eS&}u_W)9AnaXY<$YDymXi2`4Z@4(zXd=%7J~+; zJnW3vPoLJgXNUWGESDzpLIK(8`E~^Y;@XZnbZOrG?T1s?+#@D8^;hd2(JJ~njmo|a zw-@!6p-S0EG~A=Cnyo2(xEKW2o(UvaHnaTtaxHSZtU2N#;nX|-DyH>~NqJ+6f8n}C z-bE>7gLZ+Urb(ko4vNuq_TJ;ov9bZlmd%rpD5!%pzc1qX@}L+O?A4g7*GQ=G9Vp=4 zu9lV-kB^VkxRHUc$%1IJ-@Ck&doOF+n0q}_Y812f_AFgnDUK@lhS1-&y&|~F@?^BF z0U5yl%it>#?<6dD^0;!`=cU0D6)|3|0sU{3i1=O2wGPvBH6Z28P}o6jL27PFlTOsB zWhS$kvI{5MbH|Yf31txX0H+RW=_y2DNGsXd9!k^wzWhdGxO-p=ZrPJ?YL%} zXW`+;qUr#34|3!87(cc^9>7-91ERrV{s_y&p45u3svO^7OxG9wtgdfgD9}k8`Q3q{ zXMH?b>Ud43ZF%Wko=Pcy5q4f>{aH^_^yjNaQP9w>@eB2-@D~QqG7}Yv{H>cceo0U$ z_gh~t36P)yG{vL(?OB~1Y2J8^oVLa9dbZ%}>>1fu+Rr{)a1!n15@`-uk4|}MPQ+lu z#F~)!>FQW>Bb4*nOj(8Ji>9V5PRFhcQXJ;wQz0-UeZU;3UMb!(a6a3So)TopQwvk3fL623)W)Q~;mfnkYa}TgiJHox zT|u@&sX-`Dz^7|!?=29}Lgnxv9VddPzw`xi0lz1iys^M4Z@|99Bm7X3BS z3oQ(l_N*C^^*Fl0@=KTAcV0K?J;T`h&-`T&BJ$-n`i(+GnM-HZ|46Y>a1P;o8hW0D zu6DAZ#ZHq~$46YAtcFOBA)1e5Pg1uwJR|b&Kt7p#DI(hqdwZ0W zWEP<9$?RUT|IoeRfYF8vU1xL^Mr~UT|K)kRb}wpoURd-oW3mz)-RtjZ5>)(AFz}kp;0;!1NWvR1L#;hdJCb<` zN*=<5yn40JD{&VNClzPzE8v@exIUr7F?5he;MuGYt{FY2H7|v0vs~1yezItfK&UEh zwG^Z6Rba~z9-%3MK=4py8PLV(ZHwiMw;kRBYRHhR)KuQA?d9vS%8r%}&AZ($Z8E1J zO!W2l`GwuiBQ_E;P0E$c`)f^E>R$4beP=1lkFcBE@aGZk{7j(cCE;_pwr51R$*~#i z+c{7ne>alYTrmFleCW@yU-V4wwE9IuhaKcnEgnVu*ee zI%MyyMoR_gg-1R!x_qW#HvPb;aXmu)xmN7vVxINVbc;=FN#d$QNWRF(llFPu7AJ^+ zycfkYill^Oj^;+NIM?>%aGs|o7_g8k!;>hlr0H77mIUTav+>&n^6o6$4opLtp2y$YSf?K1I?kOMX4du7DbsWezg z+AP-5#2-%L)!xln?WY!i7wWBN?C5EZmJ>V&vg8PE;b^v21K(Yy#9*~d@m6k^7MoLPgq(MaKkWyMDL}F+p22hah8e#zHo{<`Q=Dst0 z!{7Pi+_lcVYn^k~{qZL}^S=Ap@yy^^ftjS&4~QGl3FpyGNNES0MVS$SM|L4(kQ2HwWKzRc6^J z$y5rQ1MtEU=bv7nd@V(ZbmjZHkG`_~Ro@&z^;|WV@~GhlI#} zBqnj1(#oTu8CBLjdxmChw$uwuF06|9Q6ddCRt=G5As8w+V|OcaV4&Mdt;`RS6##&d zgnJo6zhkxo_krN2#$R;BS;&qqxWlZ&J<`mGnp@*R_CAr^SZ9a$ln*C4B|)kpFjqj* z^cAl94;H1+41Q#2O5T1w>;`@>d$tF~_KcsiBzYkICJQLAE$3VeHKy$Q%8Jt6TwgZJ znE3Prdiiqanc{fxf$1vR+Pb%>9*^pFuq-D$rpTEh1Jw86$uFG1!8v4_Wsgh^oCy4t zMbA14uFlb?%Q9UfXn1MT4~4lZ#c}V4siS%afHX^h z$38&t3PgsN*uvSnC=kK;;T1vlOV;OF~z9>ep2x0#v&os zNrQ+*@gPL$&n$(co2i%yRlW8Htl4%ZkKA6#mSZ(2pXrX%U^XKjdm=pjg_j8*6C;@t z6W+Q7zD2^L3SdoIXk_zwX-$N0I=3k2&pgC-l}HqSMtt>D^!{Ii6*@=(U%?|9xfPWC zB_!kuRz3@S#{qhUZ@?geKjBaSEgE_Q7}&on;x8r$J&NkoX7Ko_p*GJ9>f@?TnHRB zOkpoOzj25l(rjtFW;r!0 z+nAqN6ZMVfAlo21j?^&RiVy3}S(MLMN)fAWZg*T*2#gt?wMP>yQ4(~GFlaf zGs@}^G5t)v-;TxFDtvd?br9iqvxN#fC;ikZJ5JDjE4X;zaKTmO&$;^eS#VSu3 zlIwmVcdpiXILgrN-3U4Z>K7zY`pzcv`>Ky61|dzxtQs*}k72_rdPJgGG|wn|hQ-M$ zp^K!LCm&V$z+WENu9n;Hbd_8h+g|t%BA|^wP!zKy#2)4R!3Nx1Eh`At)U5h;;M?FA zX|NJGBw2oUH}=Q3YJyv!&7F3ie*_E`!d`(5zhs%hnejY|zX3WT^*pkY`X{VqQ?awi z?7zi3VL!XgstFv2@(yD^1c~R*4_Imnb6DzM2Xg>R>60H%v9vGYLX)Zcon1Y@(!!%B z-S!Grx?^SfKU0#tpZ*Q% z?aR!cjYM@5^~Qbp0Zz}yEb=KAUM^8=x<==_EMM+!(2CBC9!X6>i)eX*+|pH#5N{Oj zUqpI(cvK13ec^IHw-T9`>7V`iG3bxP=P@Zvou<=!qt~8diy% za^_3xmhZ(}%BZ$ec_rd+zo@Xk!5iO~A>O6j&S25v5Adh7TJ%O^z>3fbmCVsmVfyHT zvXeo^F%iCFh1;nPDt=d`=y|120jrO(0N4K;WvsWc54M+={V{dQ#+_s5r0mqVLE3^5 zbqFw=xc+_uPpV$YqQ5~2`3@rCv1*=W()j$b=rt;2tmJ-!>hVvjBXqmjlNE;QB+6JZ zW7M>R2>tTbfpqdEP~cc5mLX*=+a&!QQw*EjpzN>J_Z+u*SPM|azHdwI?CtKLd_kRn z23SKw33nz^bQb$gKuIB_pYj+Gg1$Gf9`v^8H z5N}ZKSeuTek$p4BS32=@YS~uETy+zh5F0AA_40N--T3Hovk$$cf7DW&KamZA?w2$G z;PB2|eu7hGtjrFX*xYzaui&jUOHH@_ev%;xG(-* zLDD$q~wFUnpHZ}nZ@_y+JLs?vkNyY;5p?bzngkN8; z4SdLON5BU!>XA1Av`Un*gf>@~ZEvOnWEz(4ePwY96d>TD^rZ;a^|)|zf4^p$+ec$% z!{N;>5kA-q%q^onu&GlKX)0B87e$Xv8?Tb`};>d#<6o4O;O zntvgTiz#$XU2|5bga)`Vcb9OH+oV|ScFajmWu>aR7@C7lvb4#LeKB{N(uC~f6yS;y zn{9-9z8sM@>6wh97qAP0=6VnHsVG(`eXT7K?ryBLXJ_{Fwoc+P(Mk- z$@7{-f~%^(@QTluuxzYnHXwC7`>#Ov-_@AM?`;k?F!+D8M(jlPRk;wqCRyjxGx4#g zWWsX8UteI^dGrT1_VC#Fzq*hD4A22V_C_?VjY6u!X|hdIX?AmrLOs{VVVm1gzDnXA zBx+?x*2@so*fYVWMZ3!$ul&D#{2}1DN+#iBYN=3Y)V)=^(Wl$$;1|zqDnV0^s0>l# z5)n~EO*te=WtpbQ_zpIwAi6%O*ZA~wbyey(y8HCmq>&`oE?*6r6dH}ncF{VawrndB zyL)=u=DOLmjB~?-+v>-%dFm$ybsk$cGkvUFZf_UnT4%KuiE!Fy7!E@puBvGyFfzsQ z0lti-xN~546HVE{&jmH>FB!_q)~5y=Sy!hPVR}lx`A6HSLhgVv%IBqzYI#p=5li`? zQq4!>2>)?n&&j9=-<5Pt7$@6txI0^JuC{(0XpLdm1Jekl_bbtPgVKFf4-D0Fug=$s z7$GcczhxsHm9~p;PD~CJ2Z_%k6sD)8q`s)F_ema!2yCU$2?Wfuo@mKzX~I3X%&hab zY6iP=>c9+BDrw*S27M6H%DrUa4}fgj5JdyNM#rpz6`V|oC%BJcQsrJiCJ>E}-1%In z0s}z3j$n%nm5)~w9cJWq7*ZSVa9p{tDdo+DU@~kzHSB*gH%LYuN?B}SIW7APZRpj+WT?? z*S38(B=ww8OEAuR>nbXSNM892xvxR87l?CU{0}c&Axgkz6p#d&=2H}#7&+1)*JA|4Atqac zX04+l%hC1s*`9)?vVR)OG0^_A0892If5$pm`&iJ+2GL~FiGY)5Tfv#A*xA!a%YvJ*EobNVa zn>uY1Bew5_IxRk6mMgiMG|rd74f%M=Rq=Qki$J|$sD!MB9amu9o7cSZb2+WhHZ;9$ z)nC_f8NF~#M&Et1AGmZYuU>m;bbvBHFi{xSI-WHPs51E_;lI4;GwhLA=y~(@J5KS* z@Bv=_(Jhybpl zf(Ti4&%Z&H5|5~)y#HzEKnkULIF=OH(CjQxz_L*@d+?cRTbx(^AlOU2CVfP``D1Q( z>q(LG)Ms>E@nVa{*%a7vblQHTAp06a#pYo2`cz~XUkz36uICw~Xi_viaPiKLm=|XC z0cql{x=d%!8@>czkoROC2I(*(D!JRdH3T)Hkx;=5Fo=X5OQAO-bsd`=QKhp^D-4V4 z-I$*r<1@VAx@bpKBur|~W3snK=9J^oR(%RI%b*^0e`VF|*>dL?@*8{B6&c_1iP!-8 zVLTr!N@XvjL3-i_kOv%@;;^G{=cZ>b2KM>Mny>HGdK8U6wZn+RjDe^^v+}Pa>YQc` zjs^+89n$}#u3Oilsi#go!h}B)mr|(7+?>kSgA(R|{io?o4@_cDKji&T__@JRofe4r z&VKTFO1&?mM$^X~X-OTUFx#em5CQ`w3=vjuO;(4eT3^+vw23|&^LN1}E>=GGzVujaitx7m8 zgo=SQ+4b&-*f_51Ta$>t>NW>kbjELKaU(N8m3r)IN%C7-tO-=lA=*RZ0L7Kyb@NZK z*uG=*vK}89BT$%6QqoRVqajd*-G{yp?le=Fmleix<42nK8-IOw5$G@>s6AtM0H723 z?^^_vMC+D%KW;9fvVJ~I-dm)N*YF{a`xo3qDC@%g#-pAW__!M9&w5)KAZh$>Rt^Qp zY6e{3xEjH1Z;*41^{Nyxdl*o}+{;!z?gz^{S^O#TnnUmBQVLY(Yu-uqlTyY@V9PTYVn!&PuYW8bJ0F`+% z`<#b_87R-l9x|k14`qT^L6py??AWn7hcP8K@^6gmT13ZweXqwrXOLQ6l` z3jB{p1<3#&b*2@gkN1!Dffp0~`*Hsrx_ffcLQ)hYyGvAL*3{@tN+!-rgyoINOLwxK zn=D%xFqcsXvnx>NxB41h*NGHZ!vY|YnmhdGk%I@g$c^h129E#I6nK<8s2ZEk{aaI@ zR9BSoIViD9oc%PlKZ<=Q>|eVAhd!?wCO+OOwYIfZakUQ}8IQTC<7`Nf_yz~>F|iS6 zJ8GBfcRX?+dp68dUM@hkU5qExJ3kPUmJAgKSfM=x<>yx>WaAuouTB-VpAC}|xXUrp zsNyI3^LH~8;$k2a2pJAG27ZZYq9TclJ$^m=WY0XB8Ki1N|71qy2xAcq8qj-}%XkFF zIvhuWB-Y6O=Rde`i5C&Tw$!2g4G#QgB6_Vo0d2I?jeMq8AHf7463ehywd^mV(z6_m z?o;%jOh1B1wDQ7?UtpWFXIo-cd%z$SY zQUXIYiX$O&J&F-8uF~~F=4ihHO^`XCeorHx6*LG5oL8YhXrX_z31;>_52OI2vS)-`%Jc59MaMb}0_WkrPX zy~Odz?oxY}?MQgt|2^mfcao4XH-||If4CN$ntJ0s)ZAXbb)z@ic}`!;)M6s)W*KzV zwiRU*dAUz-)=#f3(>tEWgu1NBjN$D*pXu?e+=PFRtH4q{XnmICs|EmluxUP~5*NSu zDOTt^x1hg>6_0A*@^#2p! z;~WEy2Y@OK)~)O64*vijYJUMAAO0)A$GL2FVnE7f)W=_JrMZ1Ku=6sfp^>(O;+e%E z$hKF*f&S9oCUdCNu3_(MfXqJrH5p<|6{GXxghfM&FG2cHAKS_{;r+&GsnzOQivPi6 z?`!W9XzbFr_N=OvzX{$V7}3yhHlw)g)U2kh zug{d_FD8#@z-Wmb2Kg`U*UYB4^z5bczH#Ex!yJ(cI98}FzU77_@dzRt&5))$vwE|M zY~9J-%I%D|Xwp3*DqUcAZ@MgoOQ$4cut0r0Q)t?oz{hQKo3k-VGU>jlSC1!+kX_u6 zCSFj0_{8$jAq#0dWsDSDlJa<1>%RzkC}OJSD$vhD6B837+9Uu<|I((8MjTXeiz4O| zCp&jUgmvHivRd#{m4*U}+rMERD#;z^X#r~-P#+M#%7{?z{STOjZuI}(n8zQuR7X2b z)=r<7P*5S6;(>XKJJIr>kesoX&fp-Ty!^SuQ1RR&<4kds-AM=h=*m*&o2>FHmY})? zpZe~I%ji4pSzsV$^Bd5oR@i2`rFSjY-a0rRrKEcgxt4#bjrma!6!@!pgRP(Fh5r?@ z+LPWtYE0PcV{hK7d(ej^JH`0XK)BxM7UWH`)HkkE~omDKHh zx4ZZ2PXataDq#O$a6tSwe_y3`&(KV>_&k1OuyTUZ-hUWr#pnHm^|gCR;psGd{RWA!s;l=-hAORn2U=5P5xjvKHv|WpLE4 ztraVuHT|@Cv^RM=5qYuEU60YDZq!OwH!lO|RB^jI^`x{%*yX}VUV#mPf8=BhnV?N? z*__CoPlxMh*98Uv*P%;TGVD;X!^*D_dSAhCGhW^kRvW0Y^2SIi!sNb-PwL)~U|?HSGPhh2@5N`dsS|eQ#pE)@ylrX~aHFs1wvcN2{J#zmCch?F<;vkhorBa-uh3 zf8w+!P*C!)y?Q8*->fpTUPD_@ZvH%v4Ax~G5C|QPpu6>Dkzy78q4@gZO6O+iL-~Up zGzNtbRwyZt`s2_@W%woSt7NC{v1(Z+*0zV1RSE-k_oD_bXvwwkY7NL)YK4QE<Oz4Nu{M3WlCR&kx+lnZ|NKzCFlUzRApOGoj4U6V<~Zb1 zpw0u`^hai(N*|x->!y3RRXUxOw35nu@L5U0(xyJrF|?L%>gRbi?QSjY*33v+rSygu z-I)nIk(&L|ekgMS-(_q2K3n6YD3y%<=8H^4dA<4KePpGi$+NKFcEJ0iGUMz0pbL2T z1ct1orPnH|Kl8VQ`E(7jExq)xO&OjiTISDe#vfmahMAbibkkCT1gl%i1Gen^kJ4tP zwG{LqTpMFiW0>gZXgyF^Ud$Vj2Nsq+J{59SjEb#RHpw*Y>^1ERZTv|VU{`k;n{Mw@ zFO4LfWbnq5hAv;p zZlRgXm;ppD2Kw_FL*^-Y34;CrA%!L`n?9&e#|b}q`)8Qn6c<{+n$@EkgWuGnlSU(w1$}CL)N$!<5-{}kYv%i@vkwe?NdJAA?9 z$S-#=bK6T0{|aOOAJ+Su!XZheBKQPEWK8^lgg4`}nyTp51?k0h_v${F)%(aBJQ6-| zGPcZ1wFCR6#F|KWKSCowGqbg8SF)yzH6-X1$B+#tmpmvzE!vihhc@Ay>F3lg8i+wROTRX~sA5lI5_d^@{ZQe=Uf~G(N zVeo*_B_yB7>0ZT#U;aaQs4 z+DYWy#wxh$iEY{&PI{4sT)1v84an_#duiG%W?N%v=;4gcY`{>N8=qwqdO3Dh)8%Bw ze@Z;i_kl3zEUl1KcFOa#LGmocBx6e#P=ajGh2W>Odzoc_=**r`Dzp4b8f-tYIhwDa zKX&e~E)yFR1}{8;=@f2bLi8U z#gy_{O?KL%Q3vJEpLl!B+hOc^tfUVQ?-YoBLsjKN^N>0*Cz}&B5cJ@ewuo-#rVdj$NcT8Pn_m9*iOytb1*WSP-LO*&OY`qp zvi7_33<1n$|8+|P5>Uj6mKfZ@z}ZowQ?2b*jL4R6;i#3nILC-HX&y-3q)Lv(1~^tn zOu0b{($)r{%z(CVzv=*I$7>kQRe;mI-`X@eDKA9IXOH5qfXxJ00-Kx!5l{ZWF5}_A zW3LB)e%_1dtUh{@Vv(^aUVpjvppbW9EWxCusuzjTJMmcBChqaVLt>6hKh*jL#B}s$ zeCAY{EjqT z($I_4D!GyxSoz--1AnfzL^PQbq+aaPpy7M>w)cqA>FI0(^|Ie3#yH$VNVH^GWaRwn z8KauxSunhml$0S8@1Z^P!JoZHX3meg^2>IM6}q}5F|s$4rbPluZ%XfI+omPK@wGNS zd%MX=dl{}_m6ctL&t4<^6<$kd$symvHfyY|dXv}c(zT>dkKJe@+cwVpzn8oS92eCJVRfKFBfzXcA7tbpdcYFQhT*ibwj?9Rrg%PIxS;qIVO0Y`^ zQfO2gb+#YNi+5vfG~o-%Lu{$=@?sTOsVvJfoAF%b{)r=FAdVWE=l@=^czvK_rKs@H-*MCl#8KxJ9>%}pNF9iy e|Ij`kFvbFT*-a&m;Vb{yQumA literal 0 HcmV?d00001