From 8dfb70cc4abd84b311abd0bde7eadb128229f405 Mon Sep 17 00:00:00 2001 From: Manos Katsomallos Date: Thu, 7 Oct 2021 18:34:48 +0200 Subject: [PATCH] expt: Testing bottom to top approach --- code/lib/lmdk_sel.py | 35 ++++++++++++++++++ rslt/lmdk_sel_cmp/lmdk_sel_cmp-emd_bottom.pdf | Bin 0 -> 14308 bytes .../lmdk_sel_cmp/lmdk_sel_cmp-norm_bottom.pdf | Bin 0 -> 14803 bytes 3 files changed, 35 insertions(+) create mode 100644 rslt/lmdk_sel_cmp/lmdk_sel_cmp-emd_bottom.pdf create mode 100644 rslt/lmdk_sel_cmp/lmdk_sel_cmp-norm_bottom.pdf diff --git a/code/lib/lmdk_sel.py b/code/lib/lmdk_sel.py index eb2071a..3420005 100644 --- a/code/lib/lmdk_sel.py +++ b/code/lib/lmdk_sel.py @@ -269,6 +269,41 @@ def get_opts_from_bottom(seq, lmdks): return opts +def get_opts_from_bottom_h(seq, lmdks): + # Create histogram + hist, h = get_hist(seq, lmdks) + # Keep track of points + hist_cur = np.array([h]*len(hist)) + while np.sum(hist_cur) > len(seq): + hist_cur[-1] -= 1 + # The options to be returned + hist_opts = [] + # Keep removing points until the minimum is reached + while np.sum(hist_cur) > np.sum(hist): + # Track the minimum (best) evaluation + diff_min = float('inf') + # The candidate option + hist_cand = np.copy(hist_cur) + # Check every possibility + for i, h_i in enumerate(hist_cur): + # Can we remove one more point? + if h_i - 1 >= hist[i]: + hist_tmp = np.copy(hist_cur) + hist_tmp[i] -= 1 + # Find difference from original + # diff_cur = get_norm(hist, hist_tmp) # Euclidean + diff_cur = get_emd(hist, hist_tmp) # Wasserstein + # Remember if it is the best that you've seen + if diff_cur < diff_min: + diff_min = diff_cur + hist_cand = np.copy(hist_tmp) + # Update current histogram + hist_cur = np.copy(hist_cand) + # Add current best to options + hist_opts.append(hist_cand) + # Return options + return hist_opts + def get_non_opts_from_bottom(seq, lmdks): # Evaluate the original eval_orig = eval_seq(get_rel_dists(seq, [], lmdks)) diff --git a/rslt/lmdk_sel_cmp/lmdk_sel_cmp-emd_bottom.pdf b/rslt/lmdk_sel_cmp/lmdk_sel_cmp-emd_bottom.pdf new file mode 100644 index 0000000000000000000000000000000000000000..be40ef354fde376f85aa8cfc2ff2c008dd3a494e GIT binary patch literal 14308 zcmb_D2{ct*)FIN#lu#L;DN(%1n~==P9AyaQ;gQ1Qd6}gW5|SyI6`5ycOvs#w6iH<$ zNeD@l%75=eUu6Bu`qyu*fYuc0}W5CjwsC0U+@ z$jL!rdIVdd3ls@J^r5ih9!^9kOqoC-*pqCb^70U(qcu1X_tykfcZ#|Jg+L)frI#nE zksK*d)bhO^fkGjY9ieFOCj_QPCRrH}DNs{@j*1$9pXg43!j3usG?iAa$}88SP;)5E z;0(dq&e0Z%S)OjJYk8JvMS)_e$p2#p@wWhqj*cXX3lsrg=0F+XhUf?Y@XI*V$)xj6 zP*75311L;|=xS$0)K>?n1HX=w363sK1TxXl%41dd;Z+U5Uohofc~|Jj<%FDP{i`00IaxB$V7qz#66+fM4QBeWviYl7`%JYhp}BS@N_ey z1M}AEH0N;TXMTjXeD*fQgQ;puJ_Gr8N1WV5H5uOfF;CIqy}i9rKjB#<<}6dw! zasAPS3J0c#H$!c6l<)BixQ+Pbb?;MWebN%<8}}g{?-lm>00l?7+>1%^fy*pn;%4Kl zSYLBqWF9}FfHC(>3I1;I;x>-k;V9l!hG7nFl>DMv#*0*S3ElTZ1>w~2;NXYnrOwhuVzx?EI^E=sl z5>I#{O7YuV8>{JsBJW|Z-##;WmZs*KLkh2!)IscElNfgtT~u1hI5he4+RYgiW<%PCIJJ$RwK~{4Us|Fa&ty6&3dQj z8>a61_Hp60H+NEH%&rW_d!947Qm=9s9fGWDdlXQg968D&=T0fu@m<*0bz!T?w2N`r zrSwl(--8C!s!@9w=Q!QiluQHzl+AnI+6KzDz9^10&ny`rSQzfczRCMAT>1TuPA>k0 zZ%#04J85@&Gs7nxLr)scB-%+2i2XL*;9M-PlR2EJZL&U6T`oi7!9|GfrEhZdrGB>Y z>+5)Ez%+0-zDab&6BHT@HkHl2f+#gt~rU{C&}jIkb% zZy~Qa8;FZ?&Rqq~l{>nh8%#}`a3=+iKb-cD!wK_3B!6J0o_^y64jujDB*)O*!vW9}awS zKcvJee_&L1cHHyMiyiv09|s#X+0rmoVqEtJ=T!K(1ho!kH?YQ@*=xI~VjDaXHr`g{ znf~IOa_rdP`80Tg|F-$|nFz>(q^vsj_d%l33p6OsclOC+r{{y?1z6j%;n*cQ{hF3| zFet8gkt1*)rkU*d*)cg+&jAWbf{YYsv7%~1hess9z^#(Yj%DgZ+4ow#UnCm> zpJ4W(_l(|e`tbRg{Jg$TboBKvbZY&#D?@fhjqGE+WO}i%6<0;)E9reHC!-1yamUL4 z`n%JT`u^uqKF4MW;qfL7Nm_jGPbQ-|-ZG*g2bJ9qLu~D%UUcws@I06>nU^l_-m15f+fuXM-hI*c!RysPv)#P4CCSAt zc&F>-h!ku8MwW3qR3L3eNW8U_>6JqhB5fmzUMCv~X4TH)`-zC!z1>QMi7nEu3?`z= zrSyel=HR<_CR=DuWzTOhkG3sB5#$1=YrD1$eCXDpygKf)wTeA>DbDC}X{)!cAy@h3 zq~KSIiB|oJ+$m!s?-%5pbmDp*zGNJcFru}K*_v=5$=p)NDlR><@qVXCr3LRdx`R$ebgZkGDH@q$X7) zYUK}YP1rShpW)N^mIGhT2JN0XbpVm*FRzubJ^wp7Lg!0#w0!T_v#&Xde2$IsM&VmL z{FE}~bq#hu*m5X(x_BvUboQsm!wXxG!M82`U3ny!18(NgMPS!jpY{#K>&k*m%JT`2 zc4uBuW*?NR$*%nP+Etxv6g{yixl#O@5RKm&6r8)7Y3gj_9DB8D{Ns3WGA0 z%*;n_^2Y@ftK6cU&$@XEdxzBT)d(}0i2tE*U9d*@zNm-y0r;=2-}S^CNa%|)28-&y zo($-kPrf--{3IDrW`+;}w_em+TD&camn^e-FO){WRju zA`K0C!}^i&;FB@qOqc1q#lNP9)E{4)xoO5T6mLQimS8)mb-uy%{dO~C!CwECb^*h* z;_Oke2<{#!{{s46=bDC(GM{HGNL@sd%}w~HSP$hYcbEM<_au0E5Oo^D@3e#N*-X^o z9S&Z-rYyo!H2d;Ygy$&*=RG->jP{*R@P=hRW#|z|(Ybsf_e{it!oJF$22YL{`xATA z-@IS^_~`VrC8;U5=rZs3i@Uv;RAM&J2$-91#u`vK>9rb(z!&o%m{ex*^inAjmhZ^? z6=p0yr;>l5MaAgYwq81w?)9n=;>CCFONT?v&miXmhr@c04Zkz)V`(d#?{=7#moYtE zpc*a`FfJr9sTCX@mAJcA`f&X->4}S`h&>8aMUTo zCs)xV@5ABA2N}-TywQG9Im2mK@dVwN;X!JXEOaThDR%1Ctm%e*D*6`s$_U#Q*^`oM zOu1IA_dHFBRCffCu}6GXtLd%%v}KipzeCP*=X?tDa~pY-=}5=JQK7HRfj;LM_I1m& zo!UYvGkQZPkPSJNxJwRd!X;#WmDx7y>YnY^0>7h8_X^dY(&)L7IM$i`Y^S94sn+Q! z*69ns*sDVY!pD1hC(^@zQN$0v%Q zs35z5zt_ro2wf1WXLZLut+@biCX(uOCCE)-ilzXTIBqpkp0r3Cd0r0ul3tE)Pn3J+Gt`PT!Mmd{plaEgw901 z+_>c0NR4Q5K2b%F1oq3%!KiO`l=A;t88LqG47yoYL1!dnMht}cl=~`kLI}I6S}PjmRf4P zQXy9YdSCS2_rUBU-QNEDle)HaXMrHST?p}z-m|&h9$RnLU==xxx^;5{Qm=_CzRRTR zSrfh|_hneGfq?=y6iMX#+8NiS-$}L!yzdg|+A>fXzMqlDIhXV-68pNjK-4z>qUdB0 z`L>42uGcAfiven_O79fwb)$9^y{!p4V^h9?Ucr--P3aZ6)*cV(;aTVu83DciRuJjH zzb!cyWjVWq2{eMw}hyM{GyonlsZG1^lJQYSgBk%d8-6 zC6p%-`8j^=<`j{ZEmee9-Cc8+#b%l`Vx_aQkEramF#ML9(Go41hdMR%d*B`a)UgLT zJCb*5)LF9%>SNlGVmxp3mGshGFz&RbIl^xW2RMiNT$UQV_C9-VlYKx|H$&d*>D+*E z|LN0sCB4!Ov;`g%ZAM!t{90|HBk&P?2qxuOd3xBOgmaf`(o`IIu)_D#wo);nliG?~ z>hLklIrmQYrf1}NO_UwJe4+l~X^!S=1wMH;#?d}WUka`8npi7==%>311kf5OG6eHac(ZGF0eKiW`_~acCX#T9m+a>tAe$`Wl9X-=s9aaVT$zllcC?md3vGW?LS=MS5W9Grp)HsU^RAmL{BGKh5>3Dqz~7Fq-o-IR}NQfI?ap0{*LypNX(aP*}y z?MF^|J-;ew&h+z&_TJbpogY5l(Rv$Snahyen`e!7m4eSczTsst*&|p2eev@)X>Q77 z@_vjkiSlTh9mGu32C^lHrUF|i@RK!;J#+lQW0kSeEHi!d!wk7szie|Sm5Ji-X6fG4 z!o4<-X0zL(b-@6IMC!x!;HYiv0qNXkB2TFRWgRQ^4`kk z&1aG-q_G%DSL4!CWxPqFQbc2H$Gv3+&V~P%9n@xXbv$xSa;6$u$6O0#qFai6BrI}? z?PW&xkCa8<_$~T}zqLjjfUOm5yyTuRGV zyeq3!a$=i+K52hKyvMCwiw@6}=eOOA;-PH7<7RVeG<*$@8>(z|Gh3GiJxB*-HVm(i zu8U^a5?{oWy8-3R=B`LQZVl-}`kG{A1Y>`Vfzwv_VV5L|jCtDpfT2Z3{1LhfjJNGi zSYE5uRf`x;hj~cz`41?b$e1U{9(3%p z(++opZ#;V?!tynk_YIBJM^&F%5vf*@Oj$}{LBX4+c>&e19U+#3GW+F)>u|^FxKHf% zkg+h;GbyxC5bcf)J|9nTyu&c7e_fmw)fv9W>zdbnLSmJ8uSN2E_!~J`h(phXLk8h8>oEKStf9l^!K@sI-fI}_Jx^n21aD=_Y{kCBzZG4 z%w8(rjxw(}d*iE$i9gSNwqV{HuleP0Xx5N7A99 z-&uUTW8<7=hN%P@2@CJ!lxbOcUyWD#)Z?+Wr)Q{5r;>=Z_K4O4Q*frrMNV(%3ANyu zdCFOdn4e4BX{~156Bx#*3i!@|f?#VP1&>e7%xfT_9F@(sWe7hD-}aP|`=e9h-TT#$ zq&lx_@O>KiAXW46`igUGZd_4STGqTg(%-E6%Vzc_k+^cr^wS!u5{7SHa64%fq5ItS zXG_O#tKBX!0apgLA2yPJjovlA@0!8O=W6o~^+X4C>e~*f#F13}a5C;wPV7VO0aWm@ zpilHUiP9(TaUpJ3$4Xjfn{b`+R*i{&{-ZzLWlqKxmdBu9_4|0%$%4btF*=?b*w1FO zLfl&O(GG26zNo;cGId;Wdv2TUSo0p%mrEyVRjT1(aMacP>?fH8mCbj|(^Q`p-M6Q( zbwMF0(k$FZ9y*p2?qD6 z9tkK2v2364Dm^(@_-pBYfUB-b5nt2i>j5GXrjPLOJ?9TOF1AmOtEay`VExExmGf3$cZkI};YkeA_UE_fDFfpckGUBY1~mwz<6W+`I&ox`Ab0ZoPF2v61%0n@(I4!Vxkwg%Sg^DMP(-{=eb!l%nE z3#L3wCWsg9Kf9B_?QURl{_BUXy$dClb@}Kz zHmw3er>z3Q_$*xY>4ZBo{gixct`ja;EKTSA8`PIEz9jxG?U~>pd~VG1ESsa!#lJtL z(3$*TxnGhHL5gHLH}FwX_I4GY`^iZe;SW2fwtwHM_8>D%vi{x+e+cd{<2Tji{bU>Zl$tFhJG z`QR)yI!s)`Kqu8Ms%)WcXX1&K(_$z13z&F#ES;O?a}OvN+HtDqQ|F^|K?8)R5p1|- zb_VRPl+QgXOsVMxNN8hBe5V5=;_PvM{O(V-+-F*$Vn%^|u9g>MOEY3;V{GT1_<1z` zOj(>ztjtQ-E!Fkw?#FPuM!pHk09|VKF7 zL`^Nr${(NeAn+4sZ;yPKIq7-XzcTo-1EQHIekxdCOj+pu;Cr1A^X~^wFy##YZh3RZ z?pb?~j`;5Wz=pIVr}~+>92@i14|kuEG-|9eq*N@)xl04p-OmGGnJ)XQ7PZ>4Hzm&q#qE=+?XeWXWPWaC zc^Ju4BCq?crCZ>alMUm|Y-W}U*>ewP+I|ihRIq06FG?vLwBda`vrB7?eOEl>&bRkJ z+{M2ybr;N)y!ExZ7^?NJl}c|mV@AQ(`C$E42Ov*atb$#WK7|-GMXhgH@Ny zV_xxQHGbwzlktsp?C6g&o(PHyoe0;CPMDN=`76=+<=Cq$Qx-6Dy)nB7Eur1TFLxDo zuq6{c0`PNHrRQ4rCfZduJ=vqBxfFV#XP%5E-yW;~7;6wdBPBagme2~(I|kd25C8r)D2$b#7cp7J3rMK|Q&>3xjd9#Tz z0(f@+PK>p~G+FAw7orK4Qf#ftygbQbCtj#}E;(!ybEv%3OxiMaiPq6r=E1H!jNF+Z zPSUK#!2=0N%pqg0!m*t^hPs+B+;%-TbiVceLZJua9kbfvc0Qr=uPKJr-v!LMi?Pll zF=-84jBoC?`@H3Rc3h4@dg|1($q(F*%L6b;r0ZHw#aO-iX6Xz<5TP3gwdsU*UAl(W zZ*{I$U|P(9MAf=fSc8aM$qm+Q)KiX%kQD#)4r!-+sA0LOe)zNf9ci zKOdN_6!vZ|Q|w+SiMD%3^){}iYgu(Vj~);bcqa4>?EFpZ(1XrHuZKp9hmTTX#g&ij z5_@!B!kTmJ3DTe%;nsg=Fx}M}Z_C+-Ky~3BhrT}_@&JboXHq)6H+phUPaobh6BE4m z%j1+YjykT@NxV+YkUm)~PD3^%JkTcUqeRRFt=BHq#pU*TR~^+mBc5t;c=ZX$C5a}N zk1{mg9h804SJyF}H?6}c@N8D%%3ir8ZF1^h+T8oHusKM2)R1(Dhq{-@bxsZOvp;1^ zIuEMdZo2xNgYoSS>vsXkql>KBd(JFvpyJIY#0Y838oNP<$+EBHW5Ty;e3II&^>Ong zx{l9!)47VsG{&YZj=;8t;8p|8g$PljfwYPgJMB7n*uG@ARptRLhUe^+9J}puhB^^~ zXW8PT$vaIG?m0i~lm5k^v#nVsN|h;z;U@j5OA}gqMMLP1;akeH6&gQC+0 zkJ7d;Rz({|)Z2Lnlb)KAd54>99qeyf>un3$Ry6bex3}Y4j#jk8yocVe2y!DGcjJr6~D^m+z?U4LwKWjcD zTJz=CHo6+6?;Ge~v*|Vxxpu>INKeyI1vsJ@<#?!YSK;D~*$3Hi+EX=r%IW4qR~P)= z(Cr!@9Iqt`>kON!)e!>*)Uvm^(pu6A3(`M@Z_l)t(a!&D{%$XsyXEmK{k+3om{|F2 zlhlS}MT^^mJwBJ8+{!EB-I>-|LTlHNB+{UoUgCQznYFpawMyNX@wb$F(>Y_0Z)pD~ zToMn0QLUE^A|Jn^-0L^-Y7VVkKY-1>O*#{TP+j&ZTPvxf?71@E7=S8{bOHy;sh z)nGD;x=&<&RbqLWlgFg!$^fZNq{Q@G-IZUa51O9xSdADQ{Z~zhzn=mnf(wyaiV4%Q zvm}xU6g!fm0Z`uv6h59Ikikk!ph$A1uu|0#s5Ar%E#>4OFcmu+8zNW(3Dhl`LQzO4 z45*2;B0^DED9ninlrsVaj)3=tQ41yQi8eq5C-s(WXL|W1ui1buKPp8y4p z>S0z;m^Cm53bTPAfM^c01L`}0&T~+hJrw2ug*gJ`pa=wjA1Iy#M5F*efN5?((If&2 z^8hMtR%$Q*ND2fGn3^5gg#u~=cxwOyb)~di-YJQemWE2A;L=b83XX*0ad5D<6C9vI zbg?4aIZ;StC_s!_(+PsL2^2CQ7f=`~1qWVvgK6b|cfeFF!U`QE8em?B-~d*2u2~fb z%;3Bwg<5V47Ks9?SgsXaUO^)}Yswj5xt6PH0oGRwjsA`-iZ0Zp!NUPvDA5Hfg6*sn9c}H2P&iN;OK_*M2&@WVgD?XM z(ZLYZ>3=f(r8t=JAJ+boWHs=cLb1RJ=l?^4{9kb(u{bE$fHEN{8ZcF$L2x)c6obJ+ z5qJa?1)RWB8vsKCuk)#60odxil{u?(*Iyy4{eQ*-I6yqq2GFDG5F`dREa1?(3gWm91wegNMJ6AkhI7HgEvYAgC48R8)UvEi-|Ff{LLM2k3xk zL8ie$t29@y0JDFX!U8T4g+O~!q8|W;2{CHG=7!(GA_W;p}{%J9D!E|3bSlw zI6x7r4V2=~B7qC_SEF+O$0Gjgpspau^lGD810X)tVgUHxSE{B#7})<;TOkAi8CVr~ z{S|x^s4KX#7_0rObXTt{@IThDI*xh;6tf|X)kOxb{}oC8od7985nwK$4+acicR{@~ z03OTbyAx1qSr*W11O*&FwU+=G!SbCI6iIcU5FnNysoon5DL@53b= z>_n{){40b47D7d`8f;N3#K};g=7ieg0tR3z8(=u4ZiE2>%VAo2g#{oKudo2dV8FVm zGu@y-B`NjJ19;w-aZtmx^fJ-^Jo2hT20xWhLqMsyg+7>IuEd@-p$D=2MTH`Oa5d2W z`78uxMSxOkK46N-)nPzTUXBg_eLb=|>@O03r8EE0{mUBu1A@%2y!ZbP2r6Q=7(khH z9*BSdSxq}@Fs%U$9Ml33o0s`m{_N$yxj-88*JR*x3ow0B0l#wDuOfqlBN4!Jh(!Qi zPa1asjueB##l#^nWpEsj8te!10VjJB#oo>m>WY$*mO>qbo}o~jTx4J{hd*6XB(g0q z3CP5(&szZ>ef&Mk$=U{LNw7Kx=z0Z%_+NT)ClhTTaHupM0(ixhKPU!`2CT~l`UeIk zciGoYoeg&}dExvhr*kzhRxj{#J&ZX6!)1?ylaI9TYsW*qPXaB}NmDBx}4 zIv4^EUylzCN5cOdhr_Lh0l6Qzq~PCw@*yvF0H5@=b5YX&>I#JeeEPa^(qIkgdKemXW^3_D<3MM&7KTOw zS@e3?26NHaf8|Bvu>a@<1OHbJ4EQo<9SsaX_#YS!Oq$p7hXwQb^)MuGuDl*5jsM54 zu)q_zejE;1q<>)2K&)Da4~GXb`*kop63Fz|!@vN)9)n^hLyEOO~=^Y>8qvGh>kKDr<-&G8nSWScdFcEXlql*;*;PWKY?*vX_d= zQb-6%l<@z)LBGiPALoDmoOj;)?%VG6?!E7u`w8nPtBNBeBq73C@1U7w5CjwsC7Iho zWM!c+9lSNc1&Rb9x=@(Dha&+BQ^J$+_9SbloE(Hev;+rA{WU?wovfxu#*+z9$(2c} zBqAA#T50Rx$z*~v5sC&MAut_hl7$|D3^fM!QC0=kC%BWLu;UKEo{For(rSGiY66An zoyS|+5Urt@mFcIo&20%5WGI%h_k2T^~#sho7GzpeActw&sfIYZ2S`sON z!6MO6NhC@Fj>Dosgmu8ljOrH|sGDm$jVe4(vR!>lUY zoVFFwIM$CIlm8`3-Cph=<_RKuq((FbM4&|+`W9BZo@nHlIhvqJFRAQBt$8)fovBT%I&szzr(1`h zMe{HMZC!Sf$-wjJLgk*FtvC8+3U$Q15^>DlG|Hl%8(Rb44HDb}U=79S{PevJT=UW+ zt{73aG8%sE9$NL=D$n)lm)Q&x8D2sogoO<0v3jZ1W!DP}q%`YxQJKdShSl%IK6+dm z|4{}Z_GB!n=q(Go6HRRr`Ejg_X=fMfx$w!_2U9uBJ<{>4?2{Z%by@H{4-k{^%#{jNFO;?dA()vYtAZh4vEn0rAQ(W;4O8#$Rw@)J>>%&WmM*BTryv08at^>!zXIf9EtXAq1r{K733fINeijhcZUPx z=e4{cV^$2!^&`&oyRJHx2)JN?V-dW})>rb3fkok4oFfVW;39Zg^|0O(V`#5w(f%O2 zPd49~5Hq#on3Gak^d=Wy7-3UAS!ZgBDAgunmSa zTrfW+S>kUhg-`FQG?Z87rHQF&e8tK)|FtR4^F2z(`WbPlqN3-w(^FkT=9sUZozhrR z1MeI$?PL7|z8|CJFMK~-I!0^HD0%lQ+6iSmK@t;KAaY19Xpw7g##8jUsoaw= z1`b7!x`it`28{!qg+^Yf;vWPJ%dK2*xBA+JJSr>sYAVS&HeBIZKV14t-Q)?;)I^fR z^+3jWght;TLhcvM6O`?3?Jc>e)h%`UD?;|Y|H#<@PMrbK_DkuN;Zybz{tC!$OJ>E0 zfqe&LN5sl6LbNY2$Cy^KJY2Tj*eF z@m)?Gzhi>0?=d};!|K4CEY!nd#geUTq-mkv@u~9osm`ZyhYRXke9t01k$0VXZEkV1 z+?;I}y%`6uuo7st7!^FLPK3S^%8OKIlDWmfl!HC`U}=2pd2#acov>QE z%kjp>+uEmg7sgKwz;l;Mdp_h~<1g6yEKJRQ`)Vs#^W)s3XGep0?{>PyORGf`TgS(} z=S!MwEP`?r-hZz5f;%rqJayrQ)Y4S&m;G}t`HLxK*LPGH{y@zaRqMTUt5o3$_8ZCX zBYbiDnO1f-w4r}mI%vpyp^sSn)6>sO_!N(iJF?<-Jzw(YN zpVDkp_J_y9T^-y{;L65fhAm`u8dGcAJQ@!xbzxt{H1p(|ge8v)UW-3{4POlm`j3ATHJ!f67EM^1!GJr<==%R6b=$((!rtg2sxE@4$19XoV@`I7O)ye6q~YCm!BOPT5Akmx%W z0pTCdiR%W~-TIpFPymNBs!h@0{d6W3&Gvx~4LPjjeiUMDAN#76hmHHmxY3mKc5F;U zM46gR9k$PK=x%5T!%RiyahJr7rIyDv--#XErS{P+Z_cyHGW^t^I-}`RlD%JIer7j!z3F=t!_mY(oznU%?;Y!f#B9Z~#mPEZQIj(I2)$`G!T2d84S zQau2%;^2UY2A(zZmAFbp|H(07-wkL1L)gW`N-lar*Yof5M-r|zBPFjiRT~XMX&Vnn z)oeRnIZOt~^?>50}tIipXTaOnSt+#?#nri(63Y-~lbBvGh!IG|(HAMNL-3mB<@U?Rm7cT`$4VA z`T5<4AMU?;JM7id*I+YeX-;yv5VG6ta`Y|BfI6lz8&nWgdT64hgt7mTaiQl!3SMXG z@MkNW#tsq?mHWCB^O74S-Dr)3m5ONcoEbyz+Zb)zZkjQ-%_Pn`ABC3PAUfW^(U2W7r39z=ioH?c#uVzs`;#ox2p8;J{;%5D*vLyga#!V zkb#)CD{I9oIiwnN`+gE^;74+m6IdJz9aY#44pH_##@Pb*#mTp}xUbQ-c>*(IoGqQK^S%&s)9Md{s8hZczFHU6<}bdM=*l^2q9uW0(4~F4&j+ zA7MR)*yl0bx3W%?uT|*0yr)R2I)+H!D>|c5|G|FByxbwcA@ikE4w><#l^n`=sP*ZH z!1snAA6MD~UDD4@w~>nt-{W&-LQRwR$U==c1Wc|nT0gwHm)??ZDb9GGK#l2%?#SfP z_SDYZ;+CdOQVA%$38SNj67d*l=IZp6XXP+k0W77H=Iz%yQ+%T zm00}bapxTfy7C3~U-B7m9G<1?>ESe% z{KCwf9R<5C3MC1!_z#Q;xIq{DjpIElZ9iU!{BT+I8w)B^%>8;whzZ;!Ht!eN{rdau z#O-NG4k8IZ1{qGyKh^1Vv?@&UyJ_I^u>x@53j3>Bei+UXm7L5APxN+P`hDT+7uh6v z!J2cw67cQGyjeF>D`QT?iSi07cqFl2ei_k#A-Re~$JKM;ctzg(OAQvKKnWKbG{)*W zUfX&_y*plx5PIrV%-5yIf*0I$}^0Ou>Y#0k{)r7xT12cWw|%<(G`6G zSyq^#=E>vnucKroo~u8#zjt#yI(4_qeGT)n`Pi$X!_Hytf-vthF+ux}?u7(sg0CXB#8>2ceLSLr zW1?1|1NgcmFVu?rP;fHVd}bLFcuZ6kelbjQ*dNLeaYbM0SG``4XSMlYR|4_rX&sE~ zK7H2L?FE$)9v6j*va8YW?y+iDk>{PW^oCGQR8_ngtzn8~b*enkwuAc-^eCx@2WfPC z0g|K7RHvMZEg;Ve$S2h9evwf#~&z-|5>J)9lE%43DR=9=2t>+dx8W+urU{IQoqk;8{Id!ytrBneqqkh;il4!ssyMnOcxx@tD&;b|3%tizc1Vyj?=Vb<5ivc6Cp6v|8lmq>3O!V-0!RMO;s) zJZwNm(u{iBJ?7V`G6>Q;pffMQY25UDAlz$AtM*gpdDBnsVzEsmP0t%4AC4cG_ZZ%L zFfm#C)<=<~wwV!8D~!)>{ksc~vR}Mb{}N_)(+Amz{ScfJHIe#~SwzF4)$@@3@9oDg z*~O~7VlZEfC~0R8eyT2f=G2pUo7ggSL!#C0iEo3MceF$D{Pc^dtvIEA`<}cYN-rET zoS7q(ZY9zZ+WSF&sD&Hn^U&S{MVvfolmBM-JGGRY4{tGCZ&N%Mav-^R$=kBu3|173 zyY*9hs!DjYLVnX-pU?HX!+CRl6S;2nwt_&f4=Po36j-VG0jqpXRzYWbUqN!~{-Wh) zn9oIC?aEX;^qKXKjogZqN{8&l zn6A^E<*MyP>Q4u#b?76_PrN)5tt@7V@i&Pp!f?gHxT$-_6o=t1Dq?YR{4sAHow=;R zSQ_>!?8?aLg^B#G0sNfv+|jc`hbLkDbyA-

V4=3Z&%vD}`p1Cb3SQ?#i4CL_)`A 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 literal 0 HcmV?d00001