From bd8a7854601277d6c8d48518660ed553a730f343 Mon Sep 17 00:00:00 2001 From: wxywb Date: Tue, 19 Apr 2022 15:35:00 +0800 Subject: [PATCH] update readme. Signed-off-by: wxywb --- README.md | 29 +++++++++++++++++++---------- tabular2.png | Bin 0 -> 22890 bytes 2 files changed, 19 insertions(+), 10 deletions(-) create mode 100644 tabular2.png diff --git a/README.md b/README.md index 4367176..7c1ce36 100644 --- a/README.md +++ b/README.md @@ -18,18 +18,18 @@ This operator extracts features for image or text with [CLIP](https://arxiv.org/ ## Code Example Load an image from path './teddy.jpg' to generate an image embedding. -Read the text 'a dog' to generate an text embedding. +Read the text 'A teddybear on a skateboard in Times Square.' to generate an text embedding. *Write the pipeline in simplified style*: ```python import towhee -towhee.glob('./dog.jpg') \ +towhee.glob('./teddy.jpg') \ .image_decode.cv2() \ .towhee.clip(name='ViT-B/32', modality='image') \ .show() -towhee.dc(["a dog"]) \ +towhee.dc(["A teddybear on a skateboard in Times Square."]) \ .image_decode.cv2() \ .towhee.clip(name='ViT-B/32', modality='text') \ .show() @@ -42,19 +42,19 @@ towhee.dc(["a dog"]) \ ```python import towhee -towhee.glob['path']('./dog.jpg') \ +towhee.glob['path']('./teddy.jpg') \ .image_decode.cv2['path', 'img']() \ .towhee.clip['data', 'vec'](name='ViT-B/32', modality='image') \ .select['data', 'vec']() \ .show() -towhee.dc(["a dog"]) \ - .select['img', 'vec']() \ - .towhee.clip['data', 'vec'](name='ViT-B/32', modality='image') \ - .select['data', 'vec']() \ +towhee.dc['text'](["A teddybear on a skateboard in Times Square."]) \ + .towhee.clip['text','vec'](name='ViT-B/32', modality='text') \ + .select['text', 'vec']() \ .show() ``` result1 +result2
@@ -71,7 +71,16 @@ Create the operator via the following factory method ​ ***name:*** *str* -​ The model name of CLIP. +​ The model name of CLIP. avaliable options are: +- RN50 +- RN101 +- RN50x4 +- RN50x16 +- RN50x64 +- ViT-B/32 +- ViT-B/64 +- ViT-L/14 + ​ ***modality:*** *str* @@ -83,7 +92,7 @@ Create the operator via the following factory method ## Interface -An image-text embedding operator takes a [towhee image](link/to/towhee/image/api/doc) or string as input and generate an image embedding in ndarray. +An image-text embedding operator takes a [towhee image](link/to/towhee/image/api/doc) or string as input and generate an embedding in ndarray. **Parameters:** diff --git a/tabular2.png b/tabular2.png new file mode 100644 index 0000000000000000000000000000000000000000..965a93a6f586e774165d36404242b21cd224cda1 GIT binary patch literal 22890 zcmeFYRajli5-tja1P$(PL4reYcZUGM-Q8U#5`sf;w;+KK+}(q_2Pe3@PV5Ylwf0_n z-TQQ(?!%eiHyAxfS65ec{asaEV-osaUg9-89y|mD#A_)@Q6&fnXnmj^3;PQA3y=T7cxRv&Y7L0VAS2<`RMsU zot>$fnJLv>!b`!TG^&KHFY^!^(r3mFzdDL5XbR~jSp6Un-}@ndIlpnF;bCWo7u-F5 zVj#8^wxXU*k8geCdejqBBZ)tU6zma^$L_mrh{lI(=Q#OV$qNx8-Lg5wTNt}7JQLRe zO=dw!==;x8pICgK+vZKG4|!my;2rp=Q=wxVRZD9&yF5RlO(hu9E4^U3CxKY zFQl=_QJ13=6>S4zC1G`vaL_Hp@ddHB>Ep03*w2@U(aBF`e-Awpr9wNkEA7!Yam!c6 z_H&Lv&}-`tF?3||4L<5!3v+Sg39^BUq*76z6=(1q>(sw|=YgOW%L|eGFqhlo%>^@q z%tYD*>rNUI9Z4E2<(QK@1-?LZz`|x$KZyIjxn9hx*8ArNa zJ`Hx_)zH&6DGm-h5Urhm(u#>Lx{4Y{5QXcHrim^&>y{di-i^-KoI8!NOpAF*Chy!9 zDT`V#v;yy#{vM5}_$+GEtgmxz>Z-fp?D5i2OVrS|Iu&^%6pie|WrzH!2k5q|Mqlj{ znyX--KFMx)e5 zyW`GQw?5qVvgUbIz7q9xEH)6 zFH!_y)2C7&ar;5!Xzr0PFIN>Lg-M8$u@^bsLf^iBauF}>wFn^54J|$Yn7WNoISK=dMNX`5SM+lL8 zeqG!h;wV_6!wSW^w4UQ=vhDNn)hDx0Se-_luZ3xUjZipbTfa}t6{5W$&My@MN7c03 zd{IE=#kme%&NfRA#fPL?Bkipu%v-p!dPZqtn7;06&UVgIkAk1Y@(} z=gA?7vBMkhZ38+rY&A8A_+z~3^?kysW5SP2jNY@DTQ64aRu&c(PIRz0U$kd)yWiFM z&dzn15icS7IfdWAYqUxS(=tNe#E*S+OC@D`nb?k0+KcH9C4d4g+(C`<0!P+`~BPR!Kq)^ckHL|O>$$*p|~N3MGL;X+<|hY(F{`k;x&eM0qu#} z;$NFnHpYOcpNfOd+MCW~7ZK2{U#R|yvdh${Tb)MLU&ZM1#J4r5#*pwQReA`kJ=PJl zn>}=9$oVPFjkPyiE73~e>}tV@)eU(w`jhw<)CjoG(0WiwOo`D_$@@|Lq(bH~lut4TE9(nr8*ZkB(uYs?Yu0gWYnb{kov|2ECs`i+#su`?_GGCcEnlRXj7z-WmpVr8!(%Nnw zLC}dUjkNt%D(L2a#J&{QsDOjh729EOf_sj;fLnlT<0;Cg#aF7Es2jSh+hW=x57Gg- zJy1MYfH%Psms%+}lR^C^TTDsJ$V_%D0?5p`okU~=mF|+4(M2Nsc!+GUEGT#w_y?@@ z1}AgTCODSKHuat5GbjG2wj28Idd$C%Q|3;J6N+30fnRST(-V2>@8}p!{p{czaSu9W zUzh38q0FcJMX40$LP;gZEt`@rl&_IrBo~!Zo5nl@HT1)@X!vtli}7yN&td{q+K>*^`B`RigAxCX4IiWLjU3S&-V_Q{DQxJ3JN_9Sw1B_eg%z&_P3)fA2FuYTAY zsdn>*)I?^W-7Vm(CI4jJG|KFb3`xUvW6wktpz(3L5B{|J$pr2i?GOz!R8C4$YCZ04 z96x0+MVYKEA&>V#aRs(=gwhWhm%_ZMyeYy$ops^f65Lt#Wh3wLn>2K5D%mu9pPca@ z>7f!-7IJHH+{xmSGV%)zhx%WagptGIO<)cN}Tej$Eu>BuCScs@<3}p6s8b ztdk`CDmF1g)2cipyBjYy;M#|J3+X#I9e}rg^$f*ufu|Sl46oU z&Mmps9en<={G*=fD(ekvs%h$II>-4q-Boc(Rm|LORoa&Nhz3)EjqS~%&N=mY<@ST_ zj#7Q)$;17|?InUN){xH0M!`we_plwY${a0(2P|9NPmE}cmbwSE?n`TS-5=Kw-Y~rR z`bIDDBuV?m6GvPBU)W{4gbsg?qYp;np;MsMTFschZtNOQM zhqLNJ>K2#rT5Iw<^K+c>9kd>6%@*QnvmUzdk_HIHd8A#vmuTkZ8fk533#H2j29|o7 zl2o!)!oFYetzT=;;aAp`&KG*_^KZ4rKIpd@J`L(k`m}hEoC!_}9S2MY7bDwn4smL0 z2TaM9?G|HB*Uo&Msv*F2$tzqgdpxllX*;xLvZEIG?(00qJW%nn*E0&6;Mg*r-8H?B z_cYH!X|g5GNI_SCZR^ANZr|kg$fpc0k3`Vb4cC*?>ut~|alY!$^zIsrW@?Vp=GN-3p#>(Pi!GRX7iq z+w$UY+k%tb5vcQF4Q3u$nix-@_@?VI3RIF=B0(I;+jznGc-lgBPgRyVkmX~cbrNw^ ze9K7d`yh&SIgU)D@;U3r*rp`su$p2h8J>uz%m9@7)@)!8Fhn7b0c%D+C0bqhLn zZFTcqnZjJSJP|nx&W!3_3R-I7_wePu_bqwCx;^xKDdXe1o81}DgN5TA9LE)H?kW%>f2 z9u{Jg%3BykaB1;Xs^$i+ZRuOR5AJAW&evD1tdM>mklWQX?CeH+mY2&G3@Y6q%+qtY z1KtM0jv{K^CpdQrGGQa4P2XMwvmqV%v%GL)s(-@XO!%C_h1Es^96rKK)TK=2ryYrF# zrr-wJ&yN|&NPd$zTk(;p%e^NNv2!#bVP{}sU?Ss(Cm|u>bu>2RRuUEeYdG+YkIdZJ z*`Aw`(ap_`!Ht!{&e4pKnTv~yk%@(og@qoVpm*}HbvAIPw{;@_!{l#1q9#s8ju!UL z7IwBI&wLFG?OdGs$jF{2`p@T&oF?uT|DDO!=`Xba1sR`v7?~NE82`f?7|Q$nl>5Df zyNR`isD%x%X22Z$%MysRpT$QRDb$x`K`f2zMj}1+% z7**_b55rq?YoUYakk^qq2Nk4mA&sc6LcWlRmVfbSJMQ&7%XuTdv(OC6;%A-If5%hzAgo1`e`MXh_)(!>5bZENY^N)wWd;MhvA$o|R{)Zaq z_>%DwT7Mq*=ONsGc>L9XVtRb_U&enuJftImm>g-hRruGuC@6lX9RC&u#oWwa^`*Y) zaO(6(x1-lT<$Pu*Xai5zun|kokPIOk-mm@d(eWCB5cxwTWk>(gL@*c@w%r-FD)`?5 zn_!{%(KziF@%&52F;ZYj2s;l*|IH``P<>z#yeI!JWt>C&AY_A?ykP&u=)EZ~kPZGN`v=hN_f%u5 zpoBu@0#i`t?qoqh&8#j@Nz+lIMIfeX@{?eEGT!%`{}_Dn!9MxlwpT^6R}(3fMZ%ik{mUZWE&d zPuiTV7ZWlC%Pn37MWu~z>FX99r;Wxf=1h`wChXcCRENVOlLJhDmKy{%lZpi8?U%K+ zMq@ukulU>@R?nHH4J*$faMXzWS?l`(D2^3xrx~+8Y{OteSIJ!Q$N@8zI=2+<1#Z>&{-)J-zc5S$@G%n_u*0vkJsJ4aV?Cta#ik95FH=i zw%)*VCp%aP+UxCZ5WcPCi&u!>4pe=QTdtRj*U@l^eQpf)0DZv^*DFQ6M(YzYjB;k_ z4&pN%mU4hHRevcn^-1vF&3D13jy~SxS0J{$p3kj`rqAsr!flrKnbf>xQ3ID;3rn?~?m!okNF%G!}k?;Mf^^~+WMy@Rq=c?buUQrp=QN@Hbtx2whs(J0>B23#>ypdt#YUV${!47__YjoGMrpr;#*}}%>w--Z|IKQEuv`!_apq^vwGd(5 zh|h$a_WGoDV_$@J52{8>w}zi(&BaMUC)d)9HOxCUisDPe(z32d)ZWqt&^?s^cuO6& zf`RJ5_L92g)O@+LL`wPeWFpYTcqcu_ym_uOu(qn_Z^>14y-&NH$An;1&W()xUt;w^ zQJ&6h&+7TgMe&|Vf*v&+8ZLzlLK_b~k9y~9RRj)5)itvU~E-w9yZHTt}s z9r zL?PLdl2Up!^CQt(W;+>ZIZC*=Q&>!-_vUM? z*i&mAmuIx>bO==z5WZJgo#o3<=zY==ct9S- z%d!M)$iU{@DE>w!mVEn@CpRRXgL3Ct9XB=?YPPxqIbFKAKe@#>8vh$_D$2>>0vrwe zxJ!w~yQ3!Ml~&Ms@FZZ0#NlzY6q{+aP%dLt4U+_Mr}36Y@IHwbMK|46O2w57Av>QD&+n+lBxXmv22m5>7cW(Jik7n zE6J`B)94QT@V39jAh(^>v?`%1DgnQhi|m?#ehuGf?98dlngAPqL2kD(gIa`&FSXrC+z?YL%?BWM?~9g#Gic z5ND}M0*1r4Yj!Y5=o!i2DNqo2c$a3z07cKdqWz}(M+;-ig^~$Jjf&nIF!61}$r>b8 zmbYW$QRDvi(Mq9bC7gitC8a8o{0;WA>9#yPZa0&(N-*Otd+wPkijDa}_ouxytt+-~ z`K}k8EC6S0yZ1hEcCm8w^cB)yc?jE^u_=nC@u!=krenO45a-PVwfsqWo)XQ++P$J5 zlBwq-JY}9MKkHXNBH%@i(4^}JKU?@a;3rk!@u9<@hF=@LtI1nG8)VE<)v~Esd%azb z{RC@N<9B~Oc3P-J$F+1anKwW`qhXeT5qI4~;Vt(Sz;&V3=3j|u4b|9`nP>%uGqnC0 zEm?PXhI?ogc&|u}b{vRL!NfkC8O{?@(|0}M(4J(gSet`B2a(d2)M2Z(qICmKC6Ctx=HuluSp}9v4H1cU-CX5mdl)6tmN>hko{}hZ$VQk zWTwyP`95??OW<3V3xQ92iL0Je;F|&MO=!_nuGZ@S^FK$jr6#x074BghlU&%L2tuA( z`^VLe0OjJ;=Un3c5$&y6jT<9z)3i}S&zal^#%4C{!6XT0*^P&>yaE-BSi;4 zw7%Q5-sV>V@a8(IU;lnL-Y^HcUQ&+ucw6_*a_XD&sy_@ncS(bZopUzgUqYI`yjt;n zx)`7>8>;a}UFF=2SBBrN2JnzrrRy@SqFfyGK?;GPUjI4l!js#ssYeXW8OO;@5c}RM zaV8#^vmx{u@8F}m1){{@a{M+=Rnd(&(iX?!*Jri;|@m<>fqN09)a4Nw62PyUSREEb$>Iw$jC{rcy~ z($IcKqum{K>C!;#)YvldNYcY{0p7my1Aw8*8 z`jP)MXB&vE!>R%Uqo=U~RBeP#JA4;oB6B;xyjy?AB00d*Tho`e(xZjci7`W&Z1ly< z0iKj`1V;aDFOmDIzcb+B%(giQhS9b~sVEYy7lHKgZBm|4z^kuCWvz{k#P}6-E_7^5 zHCD62KHei3S!@p%lL~?NFOWD%x~pgl*-Xl`_mln-Rn8xm)ilp#MuV!m+2QtG-E_#= zcDJh)`0eXs)Vos)mxzr>g|BIN%mi8162t{&qnUC#3{k+?ujs(3Q75j*-s+`cytKC$ zp`9m|hH;Fw(&D{w^Xua~Ab&ND+wG~FI90VAW}6*qT{v27aOzTC0JVKJvAc%y_%lDr zNfyHMW>yso6N9IeO^$vUWSE(HIitmxhP)+EmIw8mkp@9S>sx+f#t8gt%-=`eZwdgu zz}9LtWPd;TJE%wkYZ!zlqWG_axIY*J#jkMGRfYDCbNSE7<^N9cS1A1BvmpMzER_EY zwEiP91jN&m?ZsUp1OzAhb2;ZQ<7G3S%H) ziiujw9vrm`iZPdKS&ufgt>2|THQsSJjSMwzUsdsEd6|t2jhM~OkLr4jy2gHTb)`6sJRYH z1i^JWynkwMjRIZCT>_W-u411k-` zO<)cCEMHJxI=aO_%~JjbrEjmAQomO8(w;K%*NTR1LoE9O+-h zRayO0%JR>szqOum$mX_q27&)@kf3Y%yfr81|6&3k8^DAWl<9h6gYxg0f7(AYe4V67 z_4A*0)}JK%t&8>i+g}mC0Wm}TY`}-jA2ffg{+AVheup)7nP+>W?{l8E@(!pCsB4*S zbI&%UE-Y@bZF}#UN;9!WL~PlJkE{!)ZU&YwJoNv z6KtE?x-~6Kmpym|ke_^I1Qp&cZu8Hk-wv7C9yu5A*n}+JZwowGAaU<}VK1pRnZGcN zFZ14{9X8`XPhs~J0T(AQ3^Mwhh7SW&x8v{ijy-3s7+eZvBCqPSk>@(X+@;R#eD4-4 z&_;Y8&pD2LuA2(l8lLxdn$c&j{M+-ar$ue>M3U`Y-y5V@f!32i#&>Oxmt|@AOFQDj z{R%#3DcNIKtxpff9KFQ8-cG*|^y(YN0vV>#Hz=r5c7v1JfG+$KQtt^L@MM-xY1Ymv zcH51Z2#B2j{<{B}(^jy+y}@}d@xwQ+ySdTjnE>UCy$_&~f>GS6w!5WccHgJFl{6XM zv)Eye5vR=ECa@_>%2ZVCZOamH{6DwOY-12ufUbl>rXD;79ede;8h^ZD7*AirC{S0W z)Av27=&i-ky~x2P#2|8c!e6-&cN$R6tZe8LW0*)>Y8Ex#GpzMNlv`D{OVoV|PG{Vf9!L=fs zt$^>)!mLvi+zRN!F~u>D0UB4o{XxY)esy^c-pqE1y9u5eZEZ}n;rYRX(YBcv<*uql zbY0&|k6WPNIT6QB3?2(ktxDgdLy#NLdjijHxs-Y7;BOrQmiYkEH2*lGsL$v%H<bq642*rn7d zW2>9d$05S>0;E|$|0N=p(g@y(cJt{Pm!APYk(}w-ArAp%NYPVZzXtY!X6v| zm+Qm@7L0`b`ehovF3?dv7r6^JWsV6&Q)TyF=p-i*X1uxdD=eX!S?1^y633@u@w_0w|+3Z`e9ArNzz%h*0Y3wi8gbIL0plrkF6AC zVisAH$3Qlnws_OSks0sr9hxRQA-jC~*-duI#P-{QiPCt`T}>INgd-$JP~jVK0sm!T zQr@q31zf`$x1+v~c_=3tJ_1)2QF5+}4!v)DsJpCm_BG>#H=MzR#EGF-pSVNYw3g2j zFZZw9G?7R>sL4dCoR{p3!)GIQCV@ys9p+ z2@n8}b`d|G^gnN>k>+@*tvnQ6nF$DXwWj%LO5)o-3GRpAz>APu!5y&=vN@Yjnc?MG z3n5S3C__<;TLLPGO0bV_4471}b`8VL^<>b-&yB_}-{9-!GY<8<#9##N%227bfv2ge z5faF+fg0oWhJr76lHDA%ueD;iZ%g{M;ONwCZcx|t?D4wI7ylZB{F!_2n}x4l$hN$h z(LSZWF}T!vfwZ;a#$-Z**XoU1!=O%LJgbQup-%Pvftf&Bk1|#vHsO8H>oU4p+2=ss zzbo(7*k9&zSv2DP1^YdNiDJe1gCh}xp*HdNfY*mwJIAi`76t61S@#=MNpUTS==~>T zOf9*_Tmw!KAw$?f-t+3zH`vXqFUR}8-2ofu%trkg`{K8Q+#_f-0K~ZE+NVOSOIK+5 zEU-1htvM+5KkZHIODAnQWuB+^tCV?8+dPVjGR+-%wrMLFS}+7ZX^!BKK?OlRB(>dd z<`tXQp+0R;38bJ=M7%*E+UDKnN{V0{BuyXqKK`zlA1YscQI_OWNLHJnB1=R2O9rM4 zk`rs76teK@n;~26kJovx!eTpViu&RzHLD`qz#UbYm&Juy{7_rV0H~+rDpr#*_S2=( zp)qAf;EXC;oityt-ceJvb)h- z${lb&JW2X+r|;?V@_*Ss?JD?shGtpo3{6GJf<;Z?do^Y`nt#2XY|gOngo`sgWEtiW zrLxg^>_Dqz8pxSfL##UXiMb5qWcg)s*D0%==K$0q)7BKY#!6L)wDKPLk zW$v3d>Fr2&Qk05M6Qk{Qpk?!IP47x&7f1t)P6zYtD3fXLW8bmr0x@DGGqDOT8S@n% zv~OJ6VqW*dvrO(_-@5MaE{;b|SxqigXwXAsJ(r~1KYzAv0^V3J%`60`XS?`07Lx1p zgU6%f@yUug2rq$RUG(siaSVDtX=vYX>!-^8zgXXjIWCL9v5yp;`)(S84sl1#&TC-nnhq+zwp`ePq%0ba(fbzyRX1X@91KhDS)NoGNJeOHfDX{i|ib z7s;;}fLLUby?;n~U_**DOLs9e9k7t0dHczn8D)|bFReD-BIKOVn(WJ2-6&Sz6zB~)v9s7gfL}G4@=M6stuDhsC5)S*qkr3 zc~7OxvJ0CXB?W#y{=pUxr zO3!@vl(XhrsUpepD_xkC1z2{Km%*hw0o5>ceQSx1dr9-sNteqHM{aFbe8yk;M#ZYj zTAgP`v32zR+Oiv2tshwoXw#Xn8LTmtvqJa-1XBz7+YW8);wEuwgsX zhG6r{ckcelm1Lc`&tA*tnTJ*8kX_Q01I%Ig7C&ME@7OpCy;-mDzMc5;n}l2`=+LU} zr;tA1MK-cdB^l~NES0JNmr*vs$*0K{)j9XpQr?TDy+3NI1Is?`b zGS@(b*1c);ktL}?mIn^PYouw1Z1<;#jQ7DTm0fvbdN9QPpeP3GPvZMk7Z7mUSYD3467~MM%YAp<=A7~Uj2Ant5EJD>(d6?CVW2GO+4(l4HODL&1Q}so! z7mKN2j2rtkQW;qH@L6mO)oQ+@*#cFcc=m}9O@JGK1Y65%_hFb* zmh-+Mwqd5TUPM#9Wk1$@Tv&ibLDV=~z!~lVCo8dIwDW(xR12My2V3!=oa&#PA__Uls{hyK!5m+56rll6N1@3<# zy9u%Uy2l&{P;vj{lfd$0;^o74tbxeud*&@SxOF}oxR0L?V;uF+ndTZ(cAHpir~-)H zjVERU*EM+uQJ8iTHX-KvM|h4GHQRHDnS;BeODT5&^M!CSkn9oLwc829 z)p0xUey6OfE^T@L*%MByGjCz%yVEZ$xpw2;Kc4Frh}vtX)5BkU|B(4+eXrnxKTgqxT_fLs-dlCTn4QMw)icuMFivp{&N>4n*A0{X)-ptEU=vT94 z)6#F$6cLah?mO}1_|97#+R0|p5OYfhN~yDWY~iA-Lr3@`%`_5u)#ixG^}uZi3YUnt>f&wM{}@(`i4RrjpPJ1Ne=CuUIcsxn zi}^(O%0A#T4xM^DM>h0j=YW_0R2Ko(9(!muGWl|`Np3CsI)}Hg&u42Z*A+H{eRwm} z(LO44-m@Mkk)(3F%e;feS)jM2qk&cN~{m2GczW zO3;87=%tg!JHf`;99NWHAFM2rba3A-a2n)(4Qd12bmcD-aHqBQ-YCh?)Uo4NUt^`o zH_xZ01@OEC=emLoyiAnl7&ES$gNX0PJ`ez-ebfBof$9uIpAC*U{`(RbT$%PS$|I@4 zidU=Dp`Mtk8sG6RYi5di_F@LdU0BZ*H|-ACKEDJ7y@FS6QUY*DXQ`c45I|pGXAqOj zJs|;x&u!fYfcTDj`F@KdYm4eA`(V$#0I3Ln2!~5s5q&^waSiM6Sd#3UJ_HT|JRRf? zQ`X5RDp@%Sjor_kqPme-`3abos%i#?`;*t?ka4HjYQ^u>tqigYsgDi;Hx40*k{favGQ&`CN^EXgI+xG^aWgAYg`|Hd%nP^|9 z@Q%VOz`zJ+>P!9D$O2QW#k}i1bkd1)RfSQx)-T!*z^)mH${E1Lh)4FS&~TVG7T)$R z7HtX*K)dZ2i0prne_s5dPc+>vnklAS

eULnutv(>%Ah*nsU5@gs@A8c^NLq{)(O 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�CZIex9T6Y}g#!N=0# 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