From 8f23fb78c343eac61faf6587da3e1ff42e7e63ce Mon Sep 17 00:00:00 2001 From: drowe67 Date: Fri, 11 Sep 2009 09:43:02 +0000 Subject: [PATCH] progressing zero phase model with a continuous phase synth algorith, still a work in progress git-svn-id: https://svn.code.sf.net/p/freetel/code@56 01035d8c-6547-0410-b346-abe4f91aad63 --- codec2/README.txt | 27 ++++++-- codec2/TODO.txt | 18 +++-- codec2/raw/mmt1_speex_8k.raw | Bin 0 -> 64000 bytes codec2/raw/morig_speex_8k.raw | Bin 0 -> 32056 bytes codec2/src/sinedec.c | 9 ++- codec2/src/synth.c | 112 ++++++++++++++++++++++++++++-- codec2/src/synth.h | 38 ++++++++++ codec2/unittest/Makefile | 8 ++- codec2/unittest/tcontphase.c | 126 ++++++++++++++++++++++++++++++++++ codec2/unittest/tnlp.c | 4 -- 10 files changed, 321 insertions(+), 21 deletions(-) create mode 100644 codec2/raw/mmt1_speex_8k.raw create mode 100644 codec2/raw/morig_speex_8k.raw create mode 100644 codec2/src/synth.h create mode 100644 codec2/unittest/tcontphase.c diff --git a/codec2/README.txt b/codec2/README.txt index 3dbdb084..2c75b568 100644 --- a/codec2/README.txt +++ b/codec2/README.txt @@ -19,6 +19,9 @@ link:/blog/?p=128[blog post]. Status ------ +Still in experimental/development stage - no 2400 bit/s codec +available yet. Progress to date: + 1. Unquantised encoder (sinenc) and decoder (sinedec) running under Linux/gcc, pitch estimator untested. The decoder (sinedec) is a test-bed for various modelling and quantisation options - these are @@ -31,6 +34,9 @@ Status 3. Phase model developed that uses 0 bits for phase and 1 bit/frame for voiced/unvoiced decision. +4. Non-Linear Pitch (NLP) pitch estimator working OK, could use a pitch + tracker to improve a few problem frames. + [[source]] The Source Code --------------- @@ -69,16 +75,23 @@ Development Roadmap ------------------- [X] Milestone 0 - Project kick off - [X] Milestone 1 - Baseline unquantised codec running under Linux/gcc - [ ] Milestone 3 - Prototype 2400 bit/s codec + [X] Milestone 1 - Alpha 2400 bits/s codec [X] Spectral amplitudes modelled and quantised [X] Phase and voicing model developed - [ ] Pitch estimator integrated into encoder + [ ] Pitch estimator [ ] Frame rate/quantisation schemes for 2400 bit/s developed - [ ] Refactor to develop a encoder/decoder functions + [ ] Refactor to develop a seperate encoder/decoder functions [ ] Test phone call over LAN - [ ] Fixed point port - [ ] codec2-on-a-chip embedded DSP/CPU port + [ ] Release 0.1 for Alpha Testing + [ ] Milestone 2 - Beta codec for digital radio + [ ] Gather samples from the community with different speakers, + input filtering, and background noise conditions that break + codec. + [ ] Further develop algorithm based on samples above + [ ] Design FEC scheme + [ ] Test over digital radio links + [ ] Milestone 3 - Fixed point port + [ ] Milestone 4 - codec2-on-a-chip embedded DSP/CPU port [[howitworks]] How it Works @@ -161,7 +174,7 @@ The tough bits of this project are: Can I help? ----------- -Maybe, check out the latest version of the +Maybe; check out the latest version of the http://freetel.svn.sourceforge.net/viewvc/freetel/codec2/TODO.txt?view=log[TODO] list and the development roadmap above and see if there is anything that interests you. diff --git a/codec2/TODO.txt b/codec2/TODO.txt index 99058ee9..66e62e49 100644 --- a/codec2/TODO.txt +++ b/codec2/TODO.txt @@ -2,13 +2,23 @@ TODO for codec2 --------------- [ ] Important Open Issues - [ ] Why zero phase model doesn'y work for mmt1 - [ ] Pitch errors on mmt1 + [ ] Why zero phase model doesn't work for mmt1 + [ ] residual noise on zero phase model + + "navy" on hts1a, "frog" on morig + + perhaps due to mis-alignment of phases at frame boundaries? + + or possibly pitch errors + + need a way to research this + [ ] Pitch errors on mmt1, morig + we may need a tracker + + suggest manually step through each file, check for + pitch errors, design tracker and check again + + or develop manual pitch tracks and check estimator + with tracker against these. [ ] removal of LPC modelling errors for males - + first few haromic energies get raised + + first few haromic energies (e.g. mmt1, hts1a) get raised + [ ] good quality LSP quantisation of {Am} [ ] conversion to 20ms frames - + without significnat distortion + + without significant distortion [ ] Planned tasks and half formed ideas for codec2..... [X] Convert files from DOS to Unix diff --git a/codec2/raw/mmt1_speex_8k.raw b/codec2/raw/mmt1_speex_8k.raw new file mode 100644 index 0000000000000000000000000000000000000000..769a49cde4968fdb9789a610136b1cd4c1ee9af6 GIT binary patch literal 64000 zcmd2@1$P|BvaagcU9l{K%*@Qp3^6k^GsVmdF*7qW+let|h?$w$mSxducc#1EcmKt^ zIrp3#N7nB2bXR>;P4xf!e=8^hWia*RZ;qwoa!-QjkeoGZOcha-lxJ{HPR)bqhs=~0 zrlg#adJ<1v`J!x1P+=jyFo~)HzQb$(H1$xf6 zS>!MC)0C6r=Ax-DZ|Mr1HoxQ`N8%g5qO17*^K_j4m(Q|e{xVtREZO{;8?l!3^3GH? zjid~vHn-%1ddKNG8MlGgDwTm&>ZQgu=S^*4eCIQCPEAoyC{8XqXPp_OB_Frqmu4eA zXTDUyd&)sYrLVrAin=z*@IvzaY)S{7+-;;4|?pe}P}nePm6%9_9E zJ*QQb)jD2?=PV*+<%W4-j#4C9W`eAzdpySKMYr`9bI1HGVHAb(XDMXfN@KN= zCdfdZL)C@(Jl!>A%Qtx= zqoe>2!rOJJeY9S(>R~z_tFxDuS?4L0nPvXfpL9Jc!Ivbd{E)vXfFE#D)s-&GI$9{% z%`<7OQpsokSLY&r&skH7zVc71NgXMk9-9Zw5)(o}*f$608z1B8vO%UxN*bXK@-MSa z_toJ>%qyver~R8gsf^Y=o-IrDJN+l#ZoFtYMIN?kE?4F#xoCdqlxD3-O>cP&^*8(E z0Qcv&QkPHANuA8}mD04H*2zSihA2GUWcp2|xD}12BlN=D(0j}mna4OM)SD{NbJ>HF z*W0wy*L5dJhPB_S@~HZ}SZ0`^W`a2_oA@J-Wxr_s56)?<=}7hXECrbj&Nyks(Y)Bo zV(p=eCPqi=5R=TDFpnjY%5ZxtmWN128cE4ytQl`|Ndeg=;Z#myX`z+YddjvO*H@h& z?259qgP!A@G^ZzOt@TjYjM7V-0s0(GWKf=L^>LuE-k64 z7B{15IJbGZqH1TomOG(#lrj&A`L4NPKAT}C zzqnCJck*0LE$eg&8YJhP1bu>5s;ufNHRddQN*2j^DNaAJ{&{Gb38dZpK-y3fu0XeB zoGg%ksRk9Lw)oT4=86=>8a$=el+>)o4y!_GcqTr3KA)Bex~GYgB=n2oXpR)bv$x|h zyo{$%SFF@_QwPu5owiUnlg=c{Oqxvn$&vn21*;WK7jgcUQ(cPDFinWg3~_VgY3Wxkr# zR7KTCHA=^`Ohfap`7VRxgzT0hdWG3V3t6yp6QsVmr)!!8=DBGlo#-QVQqQnHx79VS zjPCKkjMaXpra3D+={|Z^J=)Gi_`Er%?`x%RI~UCvI*5JN#Oh*s)mv1^oVulcK@NAP zF7jTl(`RJ|UsYwTbDW^#ootkW6_ugvvO}LXr>HfzVxwe2za#4XUU5 ztMY0;8}my~lWB6w_{>Yw1>f-sR=0>eMa}l0I~At)lurF=4YMk!a+Jkfx98|fy0KH# zw5C=ZVI_BMLC?5E)AVxF8g=uLxlc9uI}PS0l-_hSFJ&OTl8my*9MzdjV+yruTXkiS zGv7p0F22FbsGCgUUzE+XmT;V<;qpR;nR_N2{jacGH>so%YPVLWtbN>Dj+&}wGoC9m zFGZD@YD!25FQyothi)?tpPSV*)c;6J8cum>y7_GiU=N;(5hu@df5^vV(SI#$`3%hR=VI|P@ zYn!HA&MIKlxBjIPcuQ4epNzpj6{V%=XxkDvrDgEzcH!>ADm`n3&wH$S! zgZ|r@t&8b$W*&7`H?7C&6My1lwBC%CPY8?_uNl+> z{=rM6m~O9|n?|OC86!!V)F7M|%POF9a4(>;Av%?P&xtj!Ca=;4nAXy(;WRf29hqdvt_EfskYKF zb4Xt{|KR*4QJ2*hisU3}1U=CeO(kkcJ@Bp3GbmUZnTb+~%cEZ|mG-nxUYm>3kt*rV zb}hM&GrC0WuxfKkVR?mqxQO1%pU!3D<74FJ`+S-HM%`~?GRPOnB6FyytAV;?HUb5{ z(~G6DTEW|7i#Re{ngI)5$J%$&hxBM^i=S=Bnb56AVI6wood2eCW`mh&KA8Ea11V`A z5a)DRk3IC2yQ{pqmaeDzP$$al>c?6Knt$|j{na@m<6Yy_8mUeV=@UJmU#1W}H-9({ zOcNGsmTF+KNO$znHoAs91YV2N&!s%g)B8+TW}ZRBujz^Wl*_c5<^caTlUwE>WuxbM z3(ia#oWyQC4Onh5PJbHN2+Va;H#3bWD|h8asyZq2MvC%UArg6`WAteWUf~ zF{P;K{U;XRMT72UfGz5ruDK%16Tvc7&X{hmtb0^qK2X04QWuB}zGk|eU(*RY%3gN=CS&RRZQyFI{wOWYYQqj}!!H5l76?`SlQBgAPE+%V-K0RwvM5 z?tpa!gLh;Gs%?a>T}HN<$NH-|MqO2NtE^fpXY^a=jx$kDM~}W}w$fay8FIs;;{5NO76@`l}8BV!cRFRtGC9I@?MaLEw43UVZ=vW!0~BDiy4naezuL zw{b!j(p2is^=LPEPim7?(oz8mknU!N>_guPvBs&2crSyrPgkN0)?MqBtTI7T(4>GneyJgI<$)}h=O$9#N*#Q^EA&zRp?7k`)=n2N+GSKr72zw;8eW>| z+>LumS31F+Xtl`%PHO`N)Ws8amp|1~tGL=P_fX?<7^Z&MD;X#g*!TsQiIwAkaUs4J+VZ0e8kAY+t@Lmp=J7xq8kf!FWIRuP8TJJQ~ z)L3@mo2SOg6_CHEfO4rN_?a2xija1aQx0K2)sRf+PMy&K2GW0$3*G!8mBy)$ z<9h0-{;79UNy%&mNmg#78d)8kAfEqB zIQD05eD+7VDV?M)YEU!YrU=Y-6%7QEO^vn4LhH;mr?!crFT9D?ac9>x9;#>KJ(PeB zcZbRYm8O+zx~fUSNBJ)H_)(t9nW0=DrN<#@6B$2wy9xS?DC%h%w()xrLV z4(r|eIM7*7u%={cK25>%R_712Rqrr^>9`pP4Q!7UX{DCBI###U-%WjM0!~F*vqu+` z&RjtKQc09WP0S6ayiB7ka+m((3Q}J-kq_)MHybL+-Q_VfpcE7&BXlJRQFpi*KI4Vy zqGQ3Wx5^~d!Sz9Xl5XNPVbF)ZL*Efv3Cwg7xTeZ5WlRrK5c*3!dH~Fk3e~)j7_hF{s73j>ATI(| z%q@x13mtK|j4}Jna@1Z2wKTc80xTYcQyDDnq25&H<{S!ye+202fcEIox~TMFM-8(| zT8(6?oyX}3{pU0t03Pm(E|X98gO8rVF768^k{Q3FCN*WHwt=U$0`sj*@6e$qL$}E) zUNHOz@`gG<{c2(+gJsO3*Qk0q!8|TOYYpdCQc_Qs|I`KaHJ&uk^2NDgVztYDsK;6LU8QlttMM+N{oAOYGj)JY3QiEG%TabK$o(Hr!FsHO zCVvtq_)j{;d1;@sNe{vq+^G(rYWqz==b1Ab8dR87$I7pIQ9kq9ad1vPNinEsoADNp zNJpU7873ok&L(I>OR-zuq9*p?NSbNfKm(De(9`6gT$96QnH=H;d<%McZ|HU#%w_QM z*J?PB>=E+~I`cC5K&81i&Q1?#`jHYv*PwHjhJxP!D>oa8;=kB!6(}baMCY3*Tj&Qm zQX^m_24m>OkNA*Gkt@(Z3(|7@_etoCdvpL)%g*S6cWDk(+|(u>XzQImW`0vQZVgto z6g#@VKIz;u?|7to42>Xy)6x>4g^J)*nQ*r1aIjTFT>}<5g1U0Z%#$#Q(rn_Oi1y|) z?4Vb?g*u#vztBWk4K6tx)h3EwqAs?i5xNd`Yctwpj+-UYg~os>w}x_h2tL7cox#+^ zIhqA!>W=!~dHrn;nG-rYm{kktW;Y~ACZnnbvloctKj^mSjDu>pkEVdNPer$yB1gfq zHt|L^LGn31=ZhH*?lw{Fk&$u$mEw(THjRNQqoLq# zPUB6~s1!J{$AF&_;Yl1ZAN77`v;M`IUBj$JswKyQJ+;cz=bPb;-mney8nJIrL(`Q)t?;%WdE!8BVRb&M{CzS@}IqsM21 z3zZe>TwA)JwH^TMa#jo_hk~^O=rB1DY%y@Mlsp-_R(bghO{*SVSEH;4s-`N%xguGrQpp72@$~rpm;Ty10GW$&L4A!N)4j&(sb|DS5%8m@;#2 z+3O^L#cx$LIi2doUR_TQlNB@(dgKtON6qOjwZgiTR~fmAEOgd6ZJ?^`(^F&(&rscz z+j?xBrLnq~&I-mcSB3&rUBf%yF6TJ6O3!m-sP^06>>RqDbmeT;D^*Q(wx=uu7{EzE)Kkc6zIQOfQdq(=6`@b6bp`2l4hX(r;@|^ z1+dhAYANRf7JA6z;0I-+>fDdY==DwS=bHH2S`C3TWpm zREYun3ffFsx()4{B$w%hy5)g-a-XNDX>cMtn8s3p`a-Yp_ zZ}BN8bxom%%%JJeu}1Sh`1}3QOW(XhRvGHBCZQ$j+~z$*k8|os{^m#o=gVS9|#kzQHh>Euur=olTY{>Nr@( zC*bxVT5hVDBB)78)f#Gn-&7Lkq6zK8&R(Xc=ol#4?c@@eNd>;gtHGfcLu=k*<^r|U zH)+vN_h5Y|Ky|-_o!WuV$z|O|g5bE8M=d`|-@uap!O5#ap<;QyVBr05Cg)lfd4nD)S07dRiMmzvnY7fd|dldsYi5>u1gY}&`WSNwgV5@V9+NiC7%Spd4+dVRwo)uwYTa+7p;wF zTMQ4%C8yD2-orn8Y}U|v^@sJG+LGbcvK%XL7wYa6cu!Y2jY?wKT+pP18rD|-4Ig^} zRG0)Pl95u+Yyz(y4)63d)+CKIHrwba`2KD<^-oM)dd(Gh7rJM1)UAD{7Hvh3&#u}6 zr@zxbC;FeIUo-&304Axd8cqkxuHRsAHMYcN(I0{D#suj;;b3 zJVlpl3(QvpsAGegP73VojX9}v(r5T4zo1oLlu9xg=j)s)q~GePYMASznumS3+f3K{ zoRN|WJ!+K7!k5eaTTYF)uu=wq;Z4RK`6i#BG54Y3(9(WOyiUL>oTJUM%Y2mUG#<+O zC=TTavtDnc`f4iW5gS~r5q8HW)Ro>?)pY!ZBPgS!)C+YnZi8;|mR^8Guw+MiWErZ- zZ?1}3)Peh>Cn?nU>ELqxu*yr(8^`iPISJ1;mC4U%T*{S(Qou`TDg)%Me58-mfujG% zu)rQWn?mv#{pkp|1S+eA6VO!d@=w(KM7+H%IwRQgPB@WS(6RI2cjrTb4OA4wdaWwB5r%vF)U| zj)20u9vHTV909f`N%+ zze)4;02$%V1YIEw5&|>ap~2!F&r7ZHvfQ8Obb$6;)<4`X?7s<|cF=t0jjlBAS=J+0 zsJk#X;4_j@e|N^(nilx;`1(^LeG!;F!q>x>)LlBjGH-Pnt}Xp>);_r(2CTF8#7FUq zuu|YRuRPm4s~op8LdWab)WYA>w@;t7zk4@0FQK7sRi{Pfx^7czD9ht0jxVXwRLU&Vo%B0+Jd4qrb75UGDu!R%$7G?6VC6Z%5jw)h zo1lt-yKRvD`VCyN!tjtgivtwX3~8-%sP)&O%O*#Est1I)oc%y8CE=I5z_lx?sk{yh zCMVF}YdOn{_&6M3pKfJ($#V)+L0m!}=uggX8KMH!P`saaCIlyU5ONFIftC`{_cE*D zsw$;J1t=%8(Dz=Tx|QB#QlbJXd5HX25w%^Nr)DNf zhaqj_QeV^{<>m{}r@upWSY`?Vy^qH?9|R4%3pZ8Oz;)o-m`i4<6rvya7FlTBW!fn;8oyu^;+wL2f~-r6BOjS($*ISO`dV9+<~% z=Z*1$^>&9cauiv&0Mwl@;L$*20a`-gtp&}@L4KwOa!ae|U!;G=Asx4n`cW(}*h{(& zywHdGsg=UIvGfP(_@DZCN?M^dK33DzL;7u}*5UZcq0o6Mfq%!DOS(I^vHk+)*oR#? z*`zSVz?MdZEwjGp$zEXa$xHbaBi6&x``jD-0hahn1Q?!!sK#pTR_GQ5U3l>H!lz;!9$*=>cS( z0(!+yUp?i=iAGlfQVDO4>>#S6uez;#;&Vq zF2SijZ`KLHb&Hb;{I3~CeRwByre%7SZc05krM1L5;i@59kZDSEGD9go04(2t_wgm_ z2*mdlEHb~T0M);US#7?UVC?M0s-{)YwF(YwgmcD;Fe6PYr6Lz~RO`7qG`j%xKW*+2 zd_2eW*0W3ixM?`p|1)s1^_&7ZsoN&OGzU*Qhn(I4u&J@gn$2)lLxIT3$JId9*Hp); zAC6PoQT2eQo>sqhzCv-V#OKf%FGvSqpAmcxJAa;er7hE+V$pGW3XljoO zt||@COSqB>q{8q8w)6i~kUnOj&Te`-DfQpVXXUU8ss1=`U-S`O4M}0Q)PcLU6WPcy z;3*&R*8h`&bPtKb(sTqV;`L^e(^Ib%O}kZg>joK<8+CTr|5Qe3ML*0*~pLv1k30Q#@d~Y8paEq8`wwPbt?D+4%LQ&RhTXS z+n3kPxeyIP0%?of^}nQ+u8(Fsw{lfA8&xIuZZp=tq)+?5CHAyj0c+9m@2P&Sl%}$e z)JInxr;2|R?{THzv*<$^d4MX0?wQ7Q)2c1^)Na#{$6FN>vpEgiODLJW&a6}2&3-2} z(u7OZLTC!Lt+ehl@FtqV&lrd29OcVKvs{DyqxA{vwkY_>&vaQ-S-(?>1KsE@y0NRD zwGjy9E%x3;YXNItH#+I6=rlGR*#{*e7J6}UNo^&U7Pd|IEeA;U7FBTn!@vD^^l9sz zRQI(u@v1m?HFpz-t8byJ`Klci_{zE&a3!$U&vwq#R1%%}d#d1<)`Q=B6VgxwX9zi% z@F`KJP(ibNEnS_$j;J2?DgS9-pMWZM-(MAj+F6-??=ZHw?W+0*?R7P`Mu5Rj4ybFL zw+{uS4gAw={-0_t%}i(i`ox{4t9jxrZAPmU*lRa{Lgu<^SSRGMI^~XW8LNWT#%f?a z(T)AXoyVwg+wJoDv%hBIIlHgUOnHKLIvMqk@LBFnbj=mxuNyQn{8ZG??+dc@i7)*0 zc#>i2eC&Ad7Jo$W-k>%=7poT;Q_6nt%p~uEFPOT{cuyWP$LI4dNNnuh=)L7#9}w%L zvJYBrzM}qetx#j!vDRMah;&oQ?GyG3tCo4GdjXx^#GB6OUBESYf-~Cq)Dqyh%W7%B z!l1NV+#LCwmBLy_)r=Wx1qDROsd&p*J7Y~1^1Wq-n!!b4m%4g~_D^i%OTp2;<*w%Or+r;Q z4|+fQ8i%YjT@!x=G;#lMj;VG?>TR)3``@~E$_{^8wZNICZ#c#6J|?@Ff_!3>%5Mt0 z@&|OH7oMl?Uhd|B>D@MRLB;5$zpSs65$kUJcKel7b$)UeXJbO!@UzLs{~qu*O_4YL z(*F&~ea5NurF&vXh>s`4&y;MGJ?+sSMTj!hjs9(451VMs{dJvJ2X2q6K$oenMEc4) z=YpDW3-eBO4y@0^&8?vFV8ord6*;aT?~TM-0e{8(5r3P){h1Rpb1L@*lMQ+G0|5ns zzq`BvQ`~7SK`L!8H1?C;nbuspsfqNAh)WvxKE?8ghM%7PiY_?v^NUBf^2GfJ`I5#r zEV#Nf`JE!*&)^>c<$uISeoLO?^V=ll!*?Y-Oqdq1#2Wf_f`2kkNqiEQ-DD1`*pM`0N zt}A+?-V#vUzc$`ThJ-KCZ+ywTITP;tqWpiF=3wMMRjg;HRX*TN&>43D_eGaGtYOmp zX27oznZA0fynK`{$Jf^1a#9uNrt`?VI$)~ngnHy}96BoGRa8{)w*V_KkN2&mT)U(C z`Qvzv-6%2K^a(nOzC0l`XYg`Yu7I{-L7w-nrtUd9~`0u`Vlr&*n;zzy9 zmo}kx;(RBAKPQhgL2j3;k6G?X=dKfSDe^DtSKPHMi~OD6b-A5)T_3dNP3^57 zupCZkZ(qaEUBO>|c|)^WfBDImMQyhhM2~dZ@N(aUgmBd-;JI(B#DxzDyvy@L=7+ac zTLXUuKlM4PO<<(SV$bm9w)RV8Y#sl7|L3@0zxqhSL~nvPjq%-*I~@WGrx@%!@Kw*& z(SGu)S>ALp_q-1R`>28b!@eV~U~evY9(OA6Hl2$}7j(+WD$V1Q1=XaqaZRnWrn0^r zw==L1yPfkP@7(KyjB8_Pmw>{0LQqA{#0`;LeP9oBE<2gMrxOb#aBO`1-h`<5es*V{ z*A8@z*8u@XBgNZErOmQ4@sTN-W0|vBtqFSLL8jYZkW%{&=q5kMxbAb0Z%5q4`Fi5` z`2XC;_*>jZQv{0Lowz(|s3*b-;;HWZq1gf}sa=7|-06|mp6lA`inB+`2bWLhO#H{b zXAg@h8W)(bAwExZ-ro^UAMY`Ls$?qzt|acv*d|qI?9sGqQZ00Z{|l+(shwCKy`hF{ zWo%LJr_kv!FJlXoGLW3~*T zLE;ZA6*k!_@0_Dz)@WDu*t8rHJTm5m?*X;-sPFdO%Y8i-)Nuo{SvjuMrTyD-$m!UUhON7LJ~pXxVe( ztHuwo7a@UYy90y5T*rdihPJn&t&@Q*RazeF-fG>aaaLpQi;QGmf0W+gk4|_P-!ZuPF+p*26T5kiTV4Hk!s64P)ppR}v~8@U0r`Wby9;`Hd7OkhG&wYDd^VruZj!h) zy1(y^cWiXWgvoLDV}~UsdV|e3=$0c~r9z*3W?3DA?T`s!LxO&Jd|`t^TUm3g^8qid zn@&OBLVtJPtk|2skH@r*+WoD<&o;5+ynm=`VT0`LbTN04(96F2ssBteiLHRco`F_u z;7*ww|2%w~75qCF@Mq(g;<3uk`}*T@ z;29Y_j~-ZyIkOW)Ph3@ewf%Rksm^r&OmoorZvWOXc4<4ao@eLt2k0&)J?6YzYMV;! z-r=t8&gpsV&giM-j#bm$or9vRDwwQENyq(3y#*7RdBc1S;?sHW7|V|H{-iRfZw;(B zIQJjIzqn6wrr=`1z4(7FSZ5~_@Z-YxiT)Lm%)cs*9klsZ!@T}?A^=6rLV zBHVYWkg2CSx^{6rs2pCJ?uwwHdZ6o+`fdh7Etn0ST!5eHU(QmoOl|$Yti?k*Chw7| z9BE~@lJavEY#jlc@IrTqf_ie$f82cHdUjep1^Lrl$RH+wU;W{}q{lglt}<#WvO=AZ zbj*s}*(<55`nu-ogU)MANYwyaj{st>Wgh4N^A+jtF~I&uR5I|o{H_H^+4crI%w=tX zwvk8yx`)$4<~bjoyI`9q&2An5cDBep6>NWs8i_>mUcFWwmJYf-a$=KM!OyA26=kR$ zt+zpUZ2|}WC(l-bbYoL^PPbJCQyqM+Ce6`*+3ZAur+6e%lDO|$9pR7UfituYsiU%R z@(Q62^@cb1jAnwf-!W6bda5|H?UV4glj_kx=o6r;Hm@*(3pFvwqQ_$F!|B~PVY1mtS7-yTLAw*x2!>0aUpk; z1l5GgVbFN!?^)wXVl*rozQV-SCEVM7` zbu^!o@EmK5tD-f7rs%c$0Mc)xk<}skS*4|b{U-669!R@=!7?T=*wx-C%8NXOFvs-POjdVznp4#_ zdXR;@xbHj}YmL3XRK02ObY7}M`2d&kljQV)mCB}T}<8M?mCm&<5?_)0&~%Edx!gP_jUVB z!e4a9@%mnBkF$zaxcb-+Xh7g|I%-B*#a*@C$y=N#X5C(^orBBs5= z$qsN?e`ugP_`NhpoM;uW$<*bFF|ML5kVXE(S$SJ4{<%>9!G78y%^m*re#c%pKtvE?xl3)^RCom@~r+)DCk(OhSsKp zPwt(mr}?s5#e*wI<5b0>$|o)jFKsqNPx-wo;&jxDxD~X_-^d#Ovv9~Zd1c@AL{a9j z+jbvoueHfK=sM{87<%0uZvA0xu_$nqU5*bsHSJdZH3@C~MdC{(hQ=-Re~Me=vjYbu z{P(>|+Juyk-_{D!S@(F)#=H;Dm~3A3Gb?L~MRdTEE3u_jE-*x$682B@`Pfme zyxxTPesPoBue_bT%K}H4yg_NKDW2CsspXz4mGT8l_WRrv`kzzI6Gw|&PfTv7pQ##e z`z0ptoH%wfS-F${ipk6;;lsGIm$cDEq@A6r+`1!UZ!c#0A4~rk(Fw~onx;gCMGWOF7^NA-!5bH1X&>)%wV@cSKbGtl+|6&S(&6{ zQkO5Qo|R^UTRtw5@xirxeLuI*v93?v>ds>SZ_4g!PUW2vlqI-?zbHLJ!lNnw>${5_ zfDPASi9YKd#Rb)D>#pmnYn8;ovD{(}H1FXnRpR!#fZZLl-CdE?t%B-a8Hx9Fn2DH6 z8I9F)O<&&7Gll1@c(^!MO#5vdAnkH>fizQyC8OUt^$vwHTUrfqt%kyw9DnXX`sM~t<{y~a4K$_Uls<#Y($f{n$B}pF zAtxNnSeWg|U8aEhT!3SYhli-i$m&%!cT84fz_uYR-xc|G57fn^(63ubajf3}WNBw1 zA2|!oM-f!{ZJ2XwiM}>T_UL$I8p7b@|YH>Obd`o*n_Fo6HpLuVkYn&dSqWDd9FfhT`w*0 z{0yDEFXpQrAb)+2r{gyc!Mo@PKl&7$d4RxtDj_2=kg_0|8;MNHJtUH9 z;5Sz1@-zqe=h-sSbigeNP2oY_1Ma!VWvmmN9*K!J=Br*J6)_>Aq?ZZdLu`10m5XD| zzra6zFcbX2thA$@jocNdJge1$Izfw{pi}FoW)nQOM!*ow)I>~)j=-dQJE@9X#ow5c z&1=ddL2qGBWg@kdIneGG$_Aty9wDc?!R$l^>IMAx49Ev`_KSQ7=!^{OU6T{JQ5QN> zAnh<`e7P|n^~~=<*2@pAT_aP|1sQ<;c>jlWFHCQK^2g9swOgL5uDsm@s>9k#!_*(n zPMK|AmMQ80JpQ64*tM1-?N}3qS)`3rR#kG9RH2wDs&AG$XVhjY>%Sy_Amy?F>s1A4 zuDLbARIpoMCS|4Rh`ICwnAlo~Tt>XpAMTUSZmh?s{#HC@g!=G6ogE7IH~W-H&P|c# zcp_JUzzdl{NQh>m7b+$7bSgL>+$XHzPHs2>kwDd%<&|^UJcT#c1@lscT$iyQda6r$ z3@X!LIqh^*ecauo048_uAXjips+(Q90a8yX;Q$Y{^0LQhx`w3Ma8(X{ZUqZjMv5%l^|2p_L|&u7!!;-A;(fhu&2N&dXbM66x?I9B*#=w_3FW3dD5tuS=T4 zeK~Hi{}RqgBTpeI@he6JC+`+GIMz6=lU%my*j=6SW+3O}d46BaL)|stkbak#od&pi zt23%IW~#jbk3$!_3z;8kW9GkZfA;w~($mLPEGF7}E$Bj6c}u(h4M`DkHfhhG zd%WE>IcO$DCT92j@KsH$<^2&G5!Kuqo7gcSByqpL6VAmL_YPMP&$EzoAs+&Zx|4^0 z3E1n-LrHaC)XVz1v_HR-J~SXa>(@+C88ZwE8vLW_muUYaOa>IOdwym$KHarY6FbhI zJ);$N(|6Guto^QW-obYA_x6toff>!FUmfGKCA|?=+r2%kZ{XwbrxDeYi~*zl9emc> zmY6C!AwDWGTl|AxDZllOePFNAp}yAMP`3(B4D8{l6?`~p--uQrE#1ollxMs(-7f6y zXV)}&ydR?;#4QgmpQP5?b3ayOE)?+Um-(E{tO+db8c0RH-11b+k~!(dg!n`&^Bq@J zeKEF)udl0m%mLTnw@IT0gw?Zp#vhB9WNm{h1ineu*eVp0Ha%KllsooLHl$sP5kKF?D^* zXtHaDWn=gkiR(g2~Sljgq-k{UEYlbdz9Y=m}l;;m+fth~?dkZj~n7J~3b7 z2xo=vM+;qlyXL^{*x^~>ZmZbJ6EHR4U-v|-HFtwc>EaR2bNjo!9g4~he?H`i1alLy zNFf}7|G(cU==8DQ*nwI}4!THxs(Mxi%Wb8zM&M448(yz z9fErecAyhxMi(x{$KhU%M`c?fp_rkJLnbVp+%-K-Eu;ziApf)tZt4p7dmgm{Dey2= zRRyUx@RD6fU56r1nF3u7vo5$rB{gOsAIMUBh~CD(acfU$%%pXIQnDGz)f~71r?GLH z9D1Mjm^<Sv08@iwF|vtF77)R zDY;DtN)1=P8}0+j&2upU@*1w=2PBHx$W6>I9K|8I7KV>r7t z7C!P0&W~x%-?+6TDV)$BTn{c|I@)Gx=z+*0Epv|1S}U)W9d7zH(;QPE74VJ5AUAr5 zGV(aHT9j*$6-0tLxI+4~p2!oeNc9JN?w=+Gx!0O%s8z{2g&fFJUBwQTb?O8X|F@8t z+N^h*Ni-iSO$kh~Kf#2_;Qy&a{G4-O7G|Pp3g7o4pGHErH8(--(=xenLrp;_ljFed zn z{2bN?EFSK|JDma=#ePb})Z7PZtq$>5yzRk21h`2=*5THmJaiMvm&UD04NWt> zNuE(X*@-mYE@W&LeH$q$k0>RNEyb-c(!kJNWRD-n=u@kh41o zWPvOsT&Rv5_`jJ-?D3KmZq4Rfn1fo2`y5_k(%?D}R|oS6xu^5^ESKxOmfyBIlGPu^A?=V?6{d|Jl#S%=@63CeUQ){g(OcB z%xk^^YIKm5id3If9VC55$p*dNj6oKx0hhrIVn2~k`wOV`C{U&!Nu7CAL8XT8i#bN@ zM!++f`30thJyHScRS8Vu-$dP5sM{kAlboJn`sghZHeYeaL``bIZ>b_?UP@qJ zHp8@X8Kg=3sS@fel8|TQDrOqCVG6Yk^w0D>K++&-nuM|-4IGb5;WF&zu9!R-jI7N? zc>+#Y7z`vI(k$OFos$}f_&yy5x*wufW4iAMl3>WY@?qT3VnZQ5snhE-@-LLRS-c9B zIEWV@x7S#C!7}|&+j8ntP`o_AwyW{e*UW8x`kklyMXHn?t;jU zx3kZL;#P%w*l!Pzun7XU%7PQI6|?YnWr>bNPNy=Bz?~acF=06ojBzt&~t-qd&*5! zk$qcb2GcW4rsl>R#yHayr~5bgYhCM zv%;)$p4nSXJ?RZ_zcZbFO~!uRkBZb??Cww$x|2 zh&2wYQy=gCAH1b}U^Ii(8ST>BjN8+NFZjCf4=Wk=!5O_8NOA^Tg0}uiI6oImPfVno zQq`oGJ%e4ITRht=)wT2qSAJJApwnd59@=WIBdHat;?#d;5xVjP+?%T+0)?-HVF*0~NbUw^L#^ElkYWz29d1qbBIh*)h*H$6y zx84NgQ#Boz$&4yJ5BFI;(HpEP?v`@X@p?+T&q-nZSnpTUB!%PBo9LM8g1qoBXdsR8 zF5W}QybY$TZ69u6s02SjT*F+YZYtlZZQxQm2PHWdgkPN`(FFs zUb_l2=RD6h?)!6B1M{girX(kc3LyZ_gGo|6KAqK|#Vw_4<5YNuQzo0#s9aoc_f2*Y z{S8ym`BW1&mMrF*@d5NsCWeodDlyTRklz-}LO45vjD>oEC%@o+{vT9ClZhPWpg_74 z6;`&TuvLQZjeH>nb8zD+^697i2+wxfOW96(%UvX@D9_8qt~=;ZuM6EUKkZ4+WTUCS zpo;9z{1V=|Ua@70F2YYy0Z05?av0pnC#WbzhSZDCC+iX)P@^xB29i;fNf^TIW0KT2 zq^6vayh=BbOrE8r%!X6@;X_zOufzn`$k!mE=)ST=ctvcWdqDA@BDSG7E4~Y>UFl*B zWr33J4bhWLXQzt_PJ=hFsZ=DGi50YyZYBh~2a|o7ulUm@lNSgTGrRtnn zx`s2#4K0;PE)h?O{^DkN5nY|03ishQ`VP@sswOLO3w}n;INj4xy32%;3}!pYbU7tS z*SQ_y49Z7#@omVBs{8D7sIqQ~4TPD(XgN-GqbC zzkKE5-LIrgbOHRNPoU>}3`MdUGx)!l0pupA{kJnWi3CxE%b^CbQ5wfR@Z6OdWgJys z7)$k4PZn-j?h5VbQF23&|MnBD6wg&Z$P<*T{!M;%uI9gzcZD=`D08{3j=Nk_>65%$ zZB}P6Ny@9rOVo8ah46#>PvoNA3h64diXf$ZbP4&J-zqI++{9U-oUF!%yYsBgF@NaE zmGUNN&Om)qo?s8DTl(Z-!u|l8gL-tfSU3GZm9mJJg%CyEOr9 z28deG^#8*rvmvL&vRRaX>p0FsER4i?JF&oA2CMFD9w0ve@&=YTP?3RK;6a- ztd{1uqMb@O3_1usq@_$(sD_5}Npcg#7ipG@rgj*Ulp#fK6Cro={9Uow;^R7xfq8UT zuJ)dvE^@w}ao@FMnV%GA=YP$#XD@W5lmCf}nRx#^-#hAN+Ued(?Q6w(a<5QR@|FK~ zf3jV5f0G)~J*Xyxp3Gn_sGGA}U22by*MYDQ((to>@e1OKJEN>aIUE+go$3sTs-_z4 zS2Jp?_Lq5Tp(!sWr!c2qRzUW7n~B}4%JKFIn(F88tuUO`Zl-q$op6?~anr73cLkR& ztC>vYVR|ytj0)#|O1p_hcB5-!V02tFOVqont|nd$?0j*#qo1l>wRWv)hgKp+1n!R* z#qIg|_~*Uf{j>Yz8H+BIcEg^&g|CmXOXzMxm|_^UM~ZSKn-)2&e5xl&ET$eaBb1*s zq~@XAk6a_xtxz~$atACa+}NsbYRxZjzuilB_tBNh`N{5^KFRftwRqy6Ben>56S~wE z`?<&Gdp`zc+Vg_Ti);hf{gq3iTtQqQZ)m{0bE)m)%ElBPb+i$$OZCaQUiW?HcqMBV zD|%yE)tYbPo>&%Yn&a4F)6uUYGirX4PvkEp4hai#_m$k{Mv*xIy=%)g_^Lyry9C&6 zzcL?v-TS)s(@`JRl^o(bGK%2ZF;yFMh@PVuBk)}J;tSssGhLP*o^9$bAytFx8`lR~ z4BJVqyS4jfxze)I-ql`Y-|3m)7%f(>|ESMTX2`AM>E+ZAN6+7-MFpf^&AJ2Mw=Xpw zQ6+e{;0L7Nf7#(~hm>on#nz$fB>#a?Lu!`R?o)GK;GK$#Y3siyW?e3{xLEZ;!=B2O zYll>6;N6xQ=ysXt(#K_QOoBZdbKVtlvT&2D<#Vd#_?ASj`}(CfQ!@7zm)k~@I>p?Y z=Kj9j{c26{ogrlWY@FKl-RQ?5PwIXBA*>G`8ndlVc(pE3<$)$;hw|m$)~DWi`#EbQ zkr31?IVrD^b~@MKXy|#@<8K$z0zTPa)_Lw&Z?iu8eW{;$s5n~tBw|)gWesC=)sS=Qds1q7?Y!SP(@LS?z)Uuu-|7B`YeMu; zy!Pp?JD{6dH7X#l;M(id7ei9(=bWRj8&3NM)%nyhI>D#yuh>@7iYIHX?7MdHZi_dP z$*Gv>Gd`Z|+_2O01|$3L(T&Mb>+0B0A*4oEeS$2IyZ(V|OTFJKDbtS%Hdf*e| zqX1plT)*vMrC~Yxo@HHM9lEdnZ@{M$mT>_Wsze#PMokJk8QjjVwziqGY4*T^bwyQO zzlfg7=W3y zhRMcHfz6o_))A&7&f7vrU`(yd0FBVSu-4}@pEC;56b9`SW9!JOp%ZJ3taCl0ljmpZ z-*-ly^S#^VnHOxDgUhVscl0)?U@YnS`u~D^uMmcpX8JySn?WbG6Zft#g zG-EBB8}4Y@tzGBV>+3WPou*Kj{>^Ui#q@dMm#iG4yPfuA9MR-)%iNmofD?Sb>|@`3 zKQeCuzTPXnDy{d6u2MbDRkKf2ef@4?g1IRB#qTFM`-*4Tj!HT73xi+ay?`;knanyW zl$+=}W+N>}tgT%4sR+ZYkS#iIdY^e-+J-dWyfXKRfXX!o#!RbzHY`BXRIX?Fk@eq~ z;*U+=q@{m!EYQEN)~3a{7U6NfLjPg~^R>d5oHvyj?F*8=v zO21w|T>VsT&=0@t-dI`m5-jw9{V^^ zduHUG&20azQCezQwth}rbeoKJm1|Eod~pxWx|ROx+pF~789Q^!$|41q&$Hl`F<0ZC z)P7mDpCQftJa=)1EaH-%9W|f8vpVRu&`p3Eu%^1Zg`Jug=*{8s}a6oZKdn&or ztEcbm!0ezv1EB%A)|O_Dvea-I_*3*NRkX6bLPMpyhdTXSN4cRwo^*n3s%F$4(UmM~N_ONm$QWH1Lbw91$Bb%FRBLD08Lv2N zrC;7(#V?h9#1wwD*5m^e?X}|#W#NaT0;6Atuh-2Zifu#kVtx+IoKw)*u}itmzkjGH zY`!r`^G*(Qj42;lG248v>_3yT!s^%}Pf+Lh=7+Wk(FR`DZ6>BWubMBE{VZ?nwDF&a zB=(+SqhcW2g>uS$#FgB3=#cNj*;rR@FRDdf?6X$N5m4uQ=n-@>CJ*bWFnS>~5R;c3 zu0ZP()7YZ8(z}kwif2Kus~@e^FLr0xbk!6~O6K2bfoUgx9V&h7jAE908~iIm>4?n8 zwqgE$W<@8#U0y41@b9SKyYeqvb##g$wo>g#A>?1*y2?Ym#qzVbb1q`D0%G|19U_3EENqQs|?I?1(wReGN6#3543U+Z0jozns+EoyCbZXjQ!4 z8~cY14_@b&=CzY3ac!{6*EYz1)*PJyLh^3e{cLoMe-TqkK2_aQ7%~oX}JDfwxji9-&p5mg+0Y2W$;NZ#z=5 zDQ{_hVtG??w*R{5*xGGs9jILBt#=Lb2V>3*=NTqvcE1qD7#Ya;M)ebs;%_FS*QGn`HlIQc>}853qmsW zLD|K-fqsFZo_7OKI(@9EmZ|p1p5@|ybSZg=xu@Jk`7(!SI5Opr;#p6gd$VUB zIG{=upZ~4Ty=7YJyf4pU z@2W3&_0p#r8u*Oow2J z>>TQ-urILk*6WT`cd4X@%JQ0zU(j#w&8i8+Q730DuNY?SX5ZtkL|miiC|@c|*dV3^ zq=3qTn|IL_>U>pKX33*P?z@q1AA zrNR~FAm<11JG<1ogYjcX&oKX}vyqvhlHnTRSN^}uIcbq;0U2lW_EcH%5q?Yk6Mb%|J@QC<@8WGa8Clix`j$>~YDsU6pFZ15r8&*cq08w? zWPFDs&_}DVnIqYO8CXD|bme-_%pbeN8w*j#VDiBx$aZqdC2` zO_8y1Q^`i_0H(2@Dsq3doQNrb?KNk4L&f!im)ZSte2dKHldg`0o2{!l=#>jZ@zQ`U zK_89h43|}5;t<=j(oO}n^NR{cnS$(V_)xMFtx=v+B&la=zi7YeerYBuBgmIrWygQE zGHZ~dh)*O(E6-^5Y5FO5P*32=X(aEYjc=9>d%K5w^$&_AtrYy(&&fc5PCRQu7ntNKe z_OT{SSw@FraUnr6(n_OF{!S{sb^%;1A&7dUk!>sv> zyoAhS!&L{>n^X#>n@o5;XSK^U1$w4i+HE5seJR`!9^@rOy?oY+lIRq%>1#S}V0j`7%RCoPR^t(;AS zSM*U$u{Y_{RF|PDpkw%5&I|U(*8283t|YELe7+aJBN4%`O{J7<()Ll1^7XA{&c@nFwS zf|_Kvlnd4|cCjFL+>&Pt%{?CH61T}i@mcZ@_Ky0X*2n9krcil=$`o&U6t2FGOvhPQ zCm!TT$su9qMK+!wNUpf&U<#=pfCPF`Q5C7bR21JM1`b1EqYJ>h^1dXEIr?#1M!g1MyM_t<&*FUmO`~E!dra> zJE?3WPDDtr~lv;eWV^Bt<8p?J`p>WW^i^>(0i@J{JtBwlS7HG5U_3) zOR*o_2|C7W5Gp=lzwsS}vVoW|XG=YaWb(A6m0rmk@EsJ&-{BGe2O6ZC&@in7FXc5f zM_WW*oJ@ScoW40!b6Y5@%u2JNUhM=X=~MoK7)w<^adHpZrI&Jl@q?%Wqq`YdiSWnH z_6WH1IuIeR!G|1(+?02Lw5JBux{WjdyR{b}eQt$+zk!^Asp55lmLEya$pTP0 z8bH%i7r%QC=`%K16>#>?A^MBM#4gZJ-vF=l3mlw3L1oJ$E`Xi<6qyj|$cD*-0!5ap z;RcyOx@3uLPp8Pk#CFmTkp*YCGEzFuQ8}PIbOcNDr?5~8C7+Q`sFqY?LNDIr|HCHu zn%tTiO!>)y*guYhR{gfDA*Wzt5=hR**6294kj+7tdMtG%cI|NN_h#P z2hp=Pl0~fGI~uTM&6nHDt+3Y$CMJU9Ac6L9h`0;#adUDRSU0tx4&MTO@^h&JNilAa zj1njk6t2m_C%)<*AF{lU3S};k=RxuuE4@U$V!#IR2xxCd3V$ROfhFmTp^XRsDe{YkukJK@6#f1}~ioJu~!}JFScPc32Pe8jo!42@7_cZYA5N6?2YmHu}E;|xk zO*f`HQ~_qnC6d|PX0Th}w!0@p|PN^T7OnSDwmF%#Hc%Kpl=r~`eVHRuZ_>kqJK z?-F`y25#>pbk9H?tk2|tgIDP!9Gn?=ZNjfCF&nUlxviYEk0Q?$fa@Db8bRad|2XDiH3i4 z6<#;=f!^twk4#;mr~S3#RK;&oi*l9yglCz!lH5WKRmN*$wPEU>%nQ0NlSCKFO*~H= zan5U=e!^rZ=^9Y`S&jOg+M=k5iTY(|Fk_@?(g|ayk1IG?I-wKQU!F528Y8vN4dnyr1-4sqHIS#P~B30BEoGaY=bI3mEYppxQ|+5 zxlCvqD%iigmwQ$6?(N%N=c^i^XhE+O@46q^jh6M+dCuxC&e@hbBb^~1&`P#4o5{XY zK36QH9?55Lruvf^;$>I3djx+>>unMn3Rmc&l+p*V)C%asZHv9UfaFOW7$ ze`7l{jc!a|qgH?_VxUGN+a(V)u7==;{0A0IeX=&)1Mm8MaIFsV7U2LkO>en#Pyr4H zf$bmA4svnxZj`s6COjbJfryty{({>l6TjUCG8P({h0qDMfO7BsA6kakM?3_D?{3`C z1er{^!A{i@ZJ-b)iO0k;Pz^wwgsZd`m=xZ)pA$g0IS=CDRq2DUoI52g1AU+eqhV6u z--;BIi3sR1MuS$?5_fDSrDT?48ng@dOkF`E+~J4uF0nF_oz{aCaSnXH-Ed3AgX)w9 zYTFbtj$Vw4wh=beUh*ZuEsT-_sQ=M>=n&{F)$m$bK!9i^7jdjG1?T4!I9&RX>Eb^0 zm1{(3WI^o-mVaYk`2siTE#eh;0duLTY%2Sl1{+zT-vw#$a2cQcXshXhr`Uq2ybHG4>@D0p{*K#wk zAZN(!|ii{tOa6KW3ZH0 z$TIm5saQ_jgHOawU;*BQmS;RjrDMR?S^*MjXSkWNq50WJ7~qK+O%H-U=qVIQ`=OsX zi)ZF7R8UpGh+8Au#VLY9$Q9Q^|9Oly(jbCD2fSU{4XybU)L|xQSBl}rGC~9PKhUj; z#1x!;CnX=~(ni3|p8$&5U{nV;$rMlqS)AwjLWUd%ilvIKOE)4#C@_prZKjCZghcQl z#>#V{V7QHHFaujwALy3v<6Aif-GC7%nS?|SID)C|WJ8eIPZI5+Ghd3T(I2YnQuN}B zZ~|Y&6Fwa5j;^Fh>Ie$jB2a7og^oK_8V3HV0yT*N74TB|C7$Fx=(Kv1<xAm`K*M?$eP7@D(S(jZ5JcXLg;j?ua|@CQ#q3AYgyV}-ngQqg0m-cTyv1*3c{G;#gpY;lg%f~-#dfSPGH z-n{Kld8MN&38VUu9%M&thGym)x`z<3np5yQ%tlT^Ds*C(@vKFl#x#N>at(g5j;LJ- zypgNG#>kUsIHhk3{l#n$zv4i0D1Ss#U4^+z-=c*{ zkGhQNd8~97zgHdzUOS<^D?p`G9sEuKeuO%BoByyB4bmcXOOb>P8oN?(oX_k^8;LzV`c^MO4W>pr2U??VM9OjfyW28|oI|aK(VnGZWmchakV7mupMw zr1hx3gUEmA80K$!91;tX@Us+3G?XGwkdk7-Z!!n8ssZ?YGNDm(L(RTZG|Ba-)?^x7 zmFu90pGh=8l|BvX#dNVi97NtlWR`(zf2p z5zx@Qg&wIT34#N)2uzxf_+D>8O*sd@Qxg79KWOn+qjz#b86%4qrHwe1p$~^kaRq2C zTTv(aP=8L*rjid74(H$sJVo5cnRE%a=y&No-rH6ZMfIm1;YnzN+V>B+?jUMo7kK)y zNLb*>DtN+Q;Vep#>wr19gH%ce;Vqb&0{X!Ns7;{;A|FFFA1_Y@5iuBbvk51@5)7^( z(p6bU-=+GJ&!IMyKs$*8;cdKh4|Jk?s8s7yr{z?rV!*-%@u(y6_;Td+sABJt{?uf2 z6MNiPOL)cZNPL zUs?-q!3z2AYVf@xF71r zJYqfi$q7g~48mzv4Xo5T=x3%<(dY-#rRm~!XlIha=~+nBmtDw^y9-5F3t~MK>GzPu z5=C~Qa1Nmp`ho9e21w2`k;SGKQ;__4lMH9tQvXWFq*ow4uORE;?YYgb7L4*{SqDY# zA-H5Nf!5g?y4C+M=h%r9Ghh6zv*9GF3y1I$Vj|d)+2FJtmRE^`abm59BH>?lD!q@~ zE+>#Y|4P`#42GlPJ5kFMM(vhI;@KZ151?O(GoitY2Rk!I`WpmS11JmC#i5D}Y7V1< zpX3}F@7^WN$8)%K&7d>5|2ebV%cZqKA1PNa7zij`lOEaJGbk5GwgA@H7Y9=)`gzU>|_u2JlyilB_E%?u+`6??&ZsHDtx zB?>`|TCVG9FZ80X%6({pyee)Mw^3u|dz_v&s(u z$0@>s22sV9-r_^=P5SMMs})5=)k>e$^<3xN=e+vraVFZP+KSlaWNCS#>8Go=avE*s zx+($;Uwz-Jr-F@ehD~NRIzlU+TioRZWxLG79KAgn>M9@OIpX!kf0m{r+(X}0TNERO zdiDTr4V+NL<;TmnvRa=Jid9lwO|UvGxk$O@Q8i zmv)8L-|)h)OZSQlal~`kw1d2C&iXR0{Df`+=U<|=hxxqmo1;G_ZKYb)EvPb7{8-;_;fCR#m`u{16#jawcb8k|GrC_05as9Gf`iCb@4#?>K@6;^zmQnr-3C_l9n zxc~AAiUkj-M!9~u&Nec*L;Xg9 z3lxmLm2rT2n)zYY%uLdH+BUSLhyAg3P{i=S?%oT0P6kC8-x0UV))cKal^3`Fy*y{L zYl&i;?{~wxprEL_ReBq;`B{z+wg_|og3)<5%f4|{nNmeVO`2h_v4yvpIS77YJ#IG| zcbBDt+X!mPF(SoF>upyYrJq8Jd{)}v*kK#xn5_u((pNMtNmP~k%%j}SxqN%=*PvYe zPG^#64|^Kc+4xR3FT{;FT1-$wCaN!t=r z>B_?Dg%P$YQlw^lRA7te;ic1$72kNw?2$KB}}s?V*y z#aZ8rqN9;uGp?z(DfX@ZY{hNC!5wloF1h!sZxK|3UK73V_>KzNA2`LQrP9m=n;2XleAPqb>lNla zRp~p&R!FKVl?@8mZ31&cEA%x6ry`MtImyziK`YeN}a*oG7l`eUc?lr3Q`;< z?ciWOFh zm&3WY!!rpCifJJ4{UsX2cAlp8BFWGHc;32qsdY`m&n zBrY@W$!(U?xL};ASm>vX@;wl=JhW!W0N*2ud#>JPuZ!Ln&N26Q>f}`H7$BbR*^o(~t2bIgn$Y3XAzH@johwT8}!(n;rqmdZIWGoQM@d zIaqbi$wgEz%1P!U0qPl1BJ6}iunqY5GG=otiF9nfo|1*Akx1bRw}u}ft^_Z4KiQ6& zML`=16>v4wneX9<@Rllz2Zg25E7S$gP&dthLi{4Cnfu~(aXK6bM^U3TpvPnXdIPhB zk=Pt}g75G=vNrlaV}Ds{Dc^@W+zYkT{dM+#xHxZ{W zZ^*`My9OAbN_5S=p!Tj1C!!N|A(I7JnsO+#*Y!~&90q-SBOFWu$Qd*e1x-kIxQ@NV zG~{so67h*()*6hgi0iUPzCa!YA=(WWaBFl>5++hb=~1u1E>^O!AP< z+Z21Ko$#!GN3z{MQUSurJCOD+U{<3AU)6!n#3VhEPGE+!2h*pu=sDluGp~nUGex!{ z1+NkM%BzwaE}ElY%GZQvYavmL`TA+3GxV3gfmu0L+J*k_u=Eylg=OGnl9V52tw-fN zWbw{Ihr1m#>HE}C@;AIRbtI24O^zTF$Pbv(m&xnIMDY}+(tFV>w??{A6iGs(yp}u; z-|_!Y3pRq6VlMV-ftWi<(q1T_KOzTcIUH^hyv`e>mB<%34)V?~Y-o03OE3&G`yP0% zzk^MZgH(}qAi?%TLi`~3&@LnKVIJ~Pzu_ARLDF^$@;jYHzeOfkU+gkKL%@_L0U0;Q zxr4hzNgb!`n4o>a?=lv%>KWo@e!0{Rekm5@%2mW|)W<6^&u++rX4`cBALcn)9mK;kUY%OA*}<=0@+ULpo!2lR>DK>q2* zo}v>Of)p5?R2SXvOjM-ac>9)9!ANdwCp80g*@eHiANCuY;Z+(z>9C174j)i1_F}8> zR4hPBa$T_DuV82CLyf{Snv3`NEY#E&Nd`H0E0FcAk~$#g?;NJBWRE`N4PA3yM&%@B*_rRF_DETA6~K|A_8Ym zs{C2HiEn%}Sl7dmtg?l?4FdHUc^wEop>R??K)w}$(*uccCV-dI65mT7IAeUt%CwT|564U=aiuUBv-gWQD|DD|iPBs=@o-v_ zP02sp?_9wn{)PT~0d52J1_vV!YV{F%&g);1DK0bFbi+yNVymjC?0#A!BPpif_{v-*96hd&y<2d&Rq)+ z<0=r0LUAJ3g=5i)9&oqlhiO}1xR9>lY}kXRB><$Hk775n7rc4#@LCnZ*A^sJmb*~R z;5vDP&OQU(_D#tyUn8%B^^iksqu$fW$fZ~aKh<;5Evlu_IBnY@yW%8$h}wwhe*&Jh z;Ycyip-a}I-)kiQO?6|M(laqL&XoF6aCGpZ)SeoSZS+&5B~O8$C`IZll}d}GW)gxu7SfF$d|dAWuBTNxK2}RW^B!?o6IV_TWg&O*X)p z(;l4uT}U_;#YAMsKOt7qHqg5I!gV%~s6re=KEP}A-X}>V(}a$}Jn$w`c(#IueGi+n zgV>8%r7D;SZG+R|hV&FOnmqXfZoww#%Kvz@&Xd2W{^Sw)7k0d7r8gj@=Yuh1#+-K} zW~z~x?>VK`B36HJSiK`Dax|4rEXE0NMVc%#KG{_&WV9>;wA7&uWmn7#bO>Dv)Z?LBxK=D@AB5{}Jg z1S4+*gGqtgZZD>Fb#art!0DC(Z%92d8Yw~-aC)!DJjx5Rq&Q3l?qSc{Bm=cI^q(y^Lfc@hve4b`Z53{fbuew5v2Q9jvI0qSkeURhU3bUlgAVOWnt#Ap?#a?)3a)kEMRCtm5 zQe&u*WHsD49=yfr;(XAys(?p63%PdP@t!os%(K5ZLi|SDAZhYXaz!qP-&630_#@d= zCi)3e`0uy_?-NhRX4E%KZ#F?)kuLd*)$tkJ`2RUh04N$yumdMR(%6Lb-bu(>^%L%)8ZtkLh6F9@EG5|ifj%iZYq39|AB4S6f=$IaB7dktWrVmKr&(sCPrt3 z452H|@o|`kUd3cx1XU#m`%iD&&=z$5D9$iLilW-VdsrxZK?3qNoFA9uQhq1uvHfHq zeS}(zy5pL+t_{qx8d*dw+OK7)4t95c!gWCAWE9$;Gh0vd`7vI{fr zO_;sc!ihLtjz$f)nba}Un1OPHa2K4ky24sw0#YPz;`Ew_DPJ{kWX_Q9;U!;5ES18f zsz^#n#%+=f=i)!S2Hx0-?sA0-XM z^YRfB_9SQlnqxW`f*JEy+%y50@iqmAraFAHhj7kD;LrC%1u%x#4bDzo`5Z`UeZ}9% z?(hZsZ3>>t0hmVe(gvIgEinatf|+a(=By`h$8CWA;Tcp1sJoEQQwhGXToBMrAd`H6 zDOn2?u>s z%wq1!S<-iDh`3*nQI)L1B)bm?Hb%mVEk|oqgOl*zpF%F?K-^57vGE&*Nh@+_geq{2 zz61|rERx()FiAG!RM~<1{wPkq8eoloLPFww%<>Mwi8~N?6DzI4N%jp@M?5wUpTSp2 z!ZzkTz878^0ScldUk2He#1q&7N&;kOV@vm$m;e=0RSAR`BBgxXTP#DE&b;uJ%kC0R@_ zBP)qH!VOdhTjcZD$^8$Mc<>If1^Fz7NJDYE^v5=*GSL~SNo$ad*^RVF^~Iy&8;L^> zXDsUUs`$As!t*-}`^FQX6?Br`3-{!F>Mn>CBhVqPK-vM)|Ik69+d?<6MH&sp{9Ym! z+ZHc;s&Aq2NF&zaw2C2iieEvFi2*mJ5$5zM#2{=LwqsU)pL~TnqznAN%_R?dCcl2KPkB3V8q1H+hKjEIz(H3kpr(-vo0tfIZ)VbJdNxs-PtL1s5i`pxN z2oI$TNcLJsOrf@6XT)FwDC5pqNMciov-q)i7JI-dsO~`YB*v33pip}tH^7}f6-n)% zu(?V_Uo{KwB+{?2EpLSh|90rFs$+idkIpI*yOW#rZaPgq58v!3@fWl$^Pxp6Mg21! zx|nIyKq`>91>g5j^gbJineZj+kz1TZ4ui(8k93P01KmyfA9@qWRq=F9Fc+KR+3-gy z?n)|4)`M0xP<}=}qDoO`s-WoTDZLZUN>023pQuD-cf~d&ryAWq9VWL)aFdl)t(0M` zLK&}^O{R$F`3A0&_6TPk_W>cEX{w&@b;IkNnxLmjeT3=UVy+`Uh_7%R_B@yOfwgT^ zPgN~oSCD&z7oGraG%^`!-61e5W0hu6o5A}8$7Eq_|#IQx4ghtgR*HK;h_3~S5}|;lan+7IoU%%0gFVB zw9)f`OB9EDZpo3lf4%3bCXwA-ggMaskL?lPPW4DP#Vf_TxA!W=W-!a&Ix3YDWm&~e z^ENSE`N3yzpe|^ucR$5EVvj4s_SqU~?O<>1ekPA){8Ux6ChszB1l*06;9rPvnq7mq zS(xVOCdWbx+?tHzv$MWtsUfTTn}-qI3LOx4)<^**!;;f@-d-qI|+qcfwYU< zPUezIF~!}0U&~eI<|yk0aQe}#+q18vckaugG4^@%Qs2|YG5*a0|J65PrjxU{_Z8X2 z#ks|q+e#XXHqEghF~S};H^8NBL~e8McK*+Ls649Tbp_{i$n#W-^*jBm`W9=h(CzsB z_V%{VHpV#|&Y1Q>E9ninfqACg>UB_co!Ke<_M|#XU5!u|yvDu!ujqxzh(9xtSwVH6 zcY$M3U+M>DtP1&bJGd&Y4%|7nB=q)94rUF(OhbEa=H`s3yy3P@n$cmOA_F3}g{62c zlB@BYZHCEH%;tQ`oLF+h^Icn5X-U-`QJ&z=-nH?YjB|vTtCig?-BFfdStQm|xAxx` zx-dA=a6<7P_tCPlY+1>HvIUl*&Wn5>I!isnz#4BFetE5@Qk*H)hvj#jb)=VMHM)nq zRy6Weh#lx3x+wG5-NEhagGL3ykfVmzu(Njm&SKKSJ+t3dDHTO1_kX4PnkkJHQ3)iuR@tfHnf*-Bc`!E z)>K+v&)H6N(%y`LEXOHUD*ce&ku8{AOl>w%QJc;I^xo^UNKffcdik*jgtIQ*5@706KE^(oi)J2Z zUwV)CZs9df3Hl9DReJ6@>}u#b;@QLdpa#O+g=|6hU>;F+=pCxU_if@np+`DM6)`L` zpV|Ta!*|ql`Iu8I#LXT9#!DGdkI|^xt7j|cFb6@9Ndt?q-1Xe$%l(2%?H^_{`;&Hq zhjSjOE)$S;JCHaD&ERrt>n_m3RiUY{Sojwk-(eu$JtjaWCZ|E)I|R4vX;5pP%fF%i zev7`Qme>%qmZwOdNe5AeCwtI7%w%RU)0}E7|0BMXZs3hJBO#>|^hgi+!+bbu?dF)c zD5Y-5dtM49m5MPV@%%EeOgsiUS{zx8x=JQMU-J+oh$3;GWRx4Co9In6qGvHx=xaEe zVnKTNis{^VWM}?Mo|EdM<~xAfBnZ@??WmFO5#H1RGEjblO>Y(X8NneB^{JGEspo8* zbZOWn2MIN~p(Yt&h)3Ei1$g%f@y(s)C_XDk<$Ac(BR+-)u*x5Pakhnv3} z5??mTpQOd07+%KQ>4Cf&3V~?sBS&INq{8NWfcz7i^Rsw%j$tBs9}3zpa4Fa3txB}G8TxrQGpMN@g$_b-P!@HF&LN2ns~w@-j7GJ+TiEz%L9 zP?{x#2p`3{AmB|@Zc@~uiuhL!+?uuk?l5y(A7pH6JYtxqYA&{S?zjKtnCiOCtr2{M zaoia9HJ8~_Bz0tGX}{<{`1H`v);6bnof|7=TdLX`xmxqtd^N5Ir{-?*KjnJtL-hi$ ziC)t*Zsw{m76jy$Zl&-ys53njGTWOTMjk{JrH3x#GqUCWkofLNF zvE7qsomlqC?1Pr1kAG}fyKt9LrEbFqTgI7!%$KZA*Jl2tVB&PH=B^~qE;3A463`&* zet5Oer~2VCXUQp66#AC>+BsL0YngkMTjRXTZKNM+!+cYWO?~StP-S~!EBaVky1NK# zDYfc|N~sKGbK!e1L(?{s*hL1=!_l?vr0X!F;jBuNhuQm@XO+$^9&BkyTD&I&t_*D- z+R5*Zs=rijU21AmcHTUwd_%=B%lwM^mXpqYQn7kcVAUu~l|E5LmHzQv&Zc=*md`Jm zSNO8@Q^kr3qr>8;Z*S_(lKxV;eM*C$2UqwV_x+FV;a*@*sW@brVxP}7BPcdY`2?G_ zqfoovLd~26wLurH(K}Neqe&sf^5lYPIoX+tqNkog8jEpOWS_|NpxgQrbcpkr>3!MY z(nIE|=HBLp<+aQgEhC(hh&EoAgJx8&5GA@3kZMW$_ zVNp@diaDO?$}ff|)Pt>uy}YfB3Yh2mM}x7Lkrg&2%Zzct0u!&GtFP;Z;h z8=o)UsoGf8b1GWyCnR~I9F=UhDw>y{s<>{6cd4=esjO6Ku4&ur(!3n%6y-s-Kj@tz zXn#gjl9Qzv(Duxro+Xo?*c;4BCWwt<1=-|j=Xz64S>o+#XAo7Od1ui2JN%pYgegPG zXm`HlO6ic2+NMROaK|=b4DpzLtJ>`~OZUXPz}xP1K;x&Z%=l1Ei7%oVC$-CMaZa=6 zS?5_-+g3VXd!C8D)L^ES;-PY|>Y!?*vIq|QPUxEgL~oIWLdpvhsWI3OZ6$kx4VXwZ zruTy+XAriz>v(qb{w%fRXF!~OXaIG2lCNqkUhy{hVK z`LxtERCi;ubzifJN*j%R~q`{nwZ8W z3#&zsq?V_M+l5T7mYZ^UoZg;`py1dPHC4XaJGyl3f9h|_`%FFRiO|4pcKJG=IAq5* zR~sn)8xvib1XYo;5qq5}z}~hi(+ynROl+m*$RmVc;TSwqIs8-4Gmt88AhUFqU>7Dz zPvO@|AnTyg%41U5t890q=@^lK)q;s;bj%1k3Awog;3epaXQ03{%(cQf$(8Ifx|<3r zvL98M*{eFNTB}M@wN#|BC#hl5bUwj-(RI&N#jSTWayx`E*yTKBO4ZpKQQ1s+SUF2! zWM|{98H6NGWc_(Oo(%2`bh&S#oSq_d5_$=%g~vi1s=S3rtoV(tIh!Wf{_ICZ30uhA zWqY%SnId{SeIEIT>F^zlMmKd$7~r|Cs)N)mKYX)Q<-ruq_ERiUc2g!OC*p0n zLUoXj2|3&j_ayE<|AL<+9V55X`{_b@FGDFWv1_QF*j#m!y~L)1z*FL4u_12nt(XqP zisSirTov4z-f&`Qk&4=qN?<0j%M?2l*A%Z6{)$J8flj8L%U$4X8jlL-hFBYwQ3C!H z9TZ#@;xVDMkiw@!ZFfg%g^8<)ctv$n{H2`0E@4{GFR)*4i>>%j&wI~6j^RgOi!_w} zhwa1;Qe-JMEArWfOci8WC1Lydx6~G!)p1g(5R2*|4OGj)LK|@Yr+YNwR%scwTt3V+ z_Lnk9ty8{cR5Xujq)57rEayO^xPIYJiuc8TMG^Jo1XN?`P&aOqmJ8n8Z@wuqCrXh& zv61m%U$O0!68jI+jy_9#66$&yx&|Q8YK!|izgC_{y`1(mIyS;f9l_EIG(7pZ0{KF~v`?$Dq7 zCpHo9@^kq2d>fwP2cUw>mzqeDm;m$wJNNyY@v=gPYZbpJyZEgvqP)*+Nf2j_Rw`P-F+jj#H1`9bDvBpNoa>8;eR|e zxs}{TZX-XLyTmOPD#_!iOy)Ye^e4&<%1X*6s?BT@wmF@Iyw4BfIgqvf^bqgB_f3`N zfFHOG)I33`!%OZ+E{iV~&ysuCo~i`R4b2mEK8UJDDxLq}YUSu@?PKX+%XD4jPso9+ zLVZMYQaf1dqu!tx#nxncQZG?SHvy<5__6B;o1oI`4?GXV|+s8aXDq$BA{33zVgP ztUc%TOVdL=M@cawm|x@{#p-0x&cmfo;zpsG@B&r378*>qxLnZk^F2dcgy$4*75C5< zbr zJ{$v$3bsG|es_U;w0(-DjkU66k~NJRM=erZ)rROVdjHmX)OoBwa?;jOTDb9M!c)*w z)QiJ~d0b!dFK8Q8kgicPE!oKwguQan~PQhrk2#W!+@jiceS;(j@6+ilhe+Z1btWt06B z@|EUOI^|gPSY3|y9Iw9WRf;UiA)OWOaPvJYL1y>3m-1!ed8qKSs4{vkeOR@TxhW=c zq0SE0+Kw*5YdT7|%WrVd17A^>%>KufI%Zf)E6&+H?q}|SZg0;T&o)nlm_zMQrusbd zGx?42(-^vg5ipeQBkDPY?VWABwO;w}vg0K$ihh*rw_13TtsA%`m@qc>+pKO(92SDa z``i^ST0FrI@%+PY^R)LQORa=+%pQHmfPDQV?_t#K^54ZH3$lvO+xikyd^h?h_>R-J zRq*g~tbh|Ym%dIua>bYr6rL{VZJO%2s$A%23ELTYtW*7c<6KmC->TxZl92`f%Q{}5F?Y39c6_sScGMSYsILdEsMI*@ zK&5eh57=HDV_x@v9i4T2RY%u_XU@5Ck^l)765O5QR@}7|D8-@0p}4!dySux)YjG>? zBxr~bqW8?q`{e!gkMDa+N$x#oX3N@ZtsQaT^XxBL z2WASLlO-4`d_|tYw`2nzFiX+((VoVn#q;3 zYo1X#J_RlG9Gmc#s!&)dJs7tuA+JMlNM)1yG}vy8PeKM9?cscqU9?ltju?ZyE^ z6UINw_+066LfHYnwTzULv`AxCkC#m?gF^8jXewz4UM&kR@b#wj` zUOM`@`%L7TXl)w*I1t`G&A%m+%HOT=Z}EHqFXPv|xcs5@?TC}=Y`sUH6Gmr!S@~%F z1?7E!QKTnmzz<4cbSPkfr(GTtG^D9>ntzCH2QknJ(p?7>~we2bV`QZ(qK=+ zRX>_PZyeS5>-6W>BNm5Wzd8I}V5!YDU+0@yII3vPG|fI-(Q{sX*jVcPzn{{*cpJGi z$H6isi=M5#p~1J@_uML_&ZlP=9^RPs`unq}&mqAjizI{<%o$c@c%iMq_0m;K?r<~L zk#o25{CEHUke?d@n&h&|``6u5vI-kbLVx%?+z$tq#h(dolB0h5i5Y+MtK;`B z-Mi!^pT=iuTKVzMJZJO2k4>ES`RaGygkABzNu$f=X!0)imaJn#f2IUK{Nqib2PN0G zJu>lYWPG?)vRLQ(BP&0v-2aySx(5f8%b5j_nyTqrc-?`6d^+xKME?(SqoY$c3fr@dPwwCh znTH1d<$4=aKcz=p3-@-_{p(i0>J8iGt8j7t<7eqEyDLN-h*=T)zzHrqtkJlzmR7GU zk8Jg*^SwOJuN^&dY}}7?y1si|_U+Yrmg`jPX35ol>)zdYQ8QA%I&kmUk32FcAbr7I z6{Z%wmf>S?CTq^C=?^O0&3m)m?G4|0dhGD;n|E)yt2txSZOnEyT}sr4x6eLx{aiSz zysIyJ=jNw9ovnA)cK#mT*Y%1YuDC^UAHKf+{5;zEanD`advxG^VLMeqmi@Xr^wZsi zx0}Rni}Q}E5nm~GUh;=RS(*$kT+*wVNlx7Jwdae+w==3(u>ju+O?AlMlJbJ>qUu&_KRjQnfzTD z-(|2u_U3kl-OW}q#WbesUGN7F?lDsX3Wdj{V`v^SC#n+jLrA@`-_hQ;twT$|2f6IQcp^l znr?fs;(32b+r?Jyt#O^dAN(-vKmGhh?0MIyG_}*U3d)>rWsql8c7$(ySL@rP z=xok+R~L^uL6t+_gw+dpsm{gsiun<QSwe&w3{XjLkGFptb)3-vj!I^E2sq z@}AgZaiO}3$3FioX)B};3T)~7)BchY_2cTd6W=$+E>EliW9e_Jo6n$t***`z{~qfl zDLaw|CUs4g>IgIW`J!C>l?1QAnnfcszIuD@)9CQ=5#fnZ9@kx4tWE{1S6WkGW{8#Y z_lJ;I-@==|Gf%!pd`LMJ=!9-6_$>5MV3vS=CjHNTUyi+h^k(hXDRiMT0}cnb&NMo3 zo&P1@wkcsBd%rLCHBIzD_a~1WKI77?PG2KKX}>^MlshiERZMW)!IU-XuH57E-X~Y! ztbiY`b19eND*RZN9AxMB%@FwFv`U7roc{Kg^KD zZ?4bg;B(%e;>$*E`BW(Um*{*V!Yd+8L~xsoh5Sx=UY3QDp2U`qalSu~ZsjiH=>%R2 zejOO@SxfG6A4>FzZ~3Ek?AN&W&LfX({X*18;b%fA_hvEHqm}PP z|IKN#+V9;jlP@Q2Ncl#`v=v8{{qnl!XulPH6Ft+54({Vgx01@IyiLjLEYqLlK93yU z)4gi3kAvRX-Aq4$={6sa=mm6uq1H=l7<=RQ!YlgKDV4k*A=-hQKlD`v<)CY@+{3T>HZ#w%N}NiG$tIR*>&y|7HFIeEyU3Q_jVgk6ZK8 zCuOF1>`~pjy!S!R6|S4Iu*sxKryNPjCuGh8|SJp8K#olGC-TSKf!_#Qd@bH~UexZQz1TLb*#Ra^i|#LKKFp)7$)x=5Zyu;z#UJNYJm$Te07I3ui5#?8!dS`Sb?I zz_!!LaTXqfNe2^FCd_aGeF_GxOt-+Nq)Pg_;N9Brv(ZDX9l^)4H3>`1aLX4rGRohnn)5U==Hv8_r=vohU7mUTBLnsZmh<23Tftk3 zQOQ^0!oG)pdHy|n!gLwyn>pZIVB3JTUXkXWJ1V(wQt71iiSER4PA+SpSAD5Hp0>+|>s(&-O&s(y@n^ckn@$0bV}8TazE8W@@3-O=kAz`*y}iY|T$&EyZ2+NfG4EsER!V{!c3 zls;A|pDX?^0xG4s;~B*Eo_k665(*`ZPX3m1EG4~eZvW@C-)FkdLQgMg++C7F6I&!7 zbMJC1)rtLW9lTz8mGmrVh3XqA&62yMlz0E-ey)P-L7)sfJ=VH5up_$~eexWqG;a5I zQ8*v5?!!#+gzNI}qbA7OXGhq! zD?fbP5EJFjlvs)GtbsGZn&flBUj-zjDeCb}O-~vc_eboYA02)+N}8+s$)2A1{WkbV z_|Nhk=`mH5O8GPXeq7#!+9@B@Jz2_Qq|alYZk`(~+hlZvyRLgEjP<2XPUj3>?ZNh9 z*DoGZT|e!CHk+*6f2S03)~U+6B8=2TQ5z=rIXq2n;IaLMSz%U{+ga-DVqfA?oCT7_ zM*Eh14D7BZO7!9ClC#!igx3|uq`?!7<)0FEEsExvu%cGLYMO`(c6VH3(wmNEsi`Qo zp*~;C1TG(3fT}RShwJjpwQ|6lmhu#n#VzntDu7b<7PsJa)YJ#u&)jR>JKYCW9kJ8( z)N8SKTJNE*wKCC(O`4Rnn5}K`DZZe2H>|m?P>(5I$GpNgRsV`)^^f~U^0nl*DVN!) z7;Rm#cDoWiy1+ZT1YVOJ22OP~7QJwLQ&WC|1+)n6`v)0rMc|tM5nb;r=N!%_QSdkJ zur=$F>My{08@jt)j(azPu@`kHe)XD6w z;V!6}F%kVmR&vF9tedKh_vT;G_(h!LcQ*um{8~Elb`#NQq(+GG5=9%6aB~g zbhpPD-{hxpAAfBBu_>-pBIv7Z;9BGz=X2LPt5-?y;$FqA1-Md7O)8W)0liGmluW9% znB*Gbd)04)cNwocuB}ei#5U}*&f$D@8jB!1(k_g0KfkMpeMIaunK`WmaMXl?V_c^b!uz2KJ?mgA7P?}_)=N@lGE9cLoy+1F-eNMdZtX2l4tHVG1XOf{z0>uH zSeOm=dEn){dY*}1HasfF+|hB0~mO1%2!v~uS|VSg3&)hpZEUdlW>Ob>Nu zPhOkM{9TrHwf8#gW4w#G#=(1CpsIlG4od8nxF+#ka!)hfwZQYZ*Idrd1dl?l5IIDZ zb0(#vWA-Le7Q44QOLc9#o#zFr)z+R7uB+B?v&Fq7d31k2Ou>#R@{@JiZ)GhStvWuLKsfP$V=SJ{R4(Op5E#=|Hr%-%Fs zbGr8G;!jZ6`nr+s%oOIU+{z@hAZKnIoZMRMO?w01uO8g4^UTO2P|bgYZ4e1(&Xf6d zFVOAoe7`L0n8_z^hz2kOV1Q}|*0(2{PQ38>YRuNY5Gxv|jGS@?ymOD#?Jg;uaVv{5 z-d0t6gPjJolLh%WS6pTcn2S*`~X0q88#Ia$44wM_`KPlpWb7 zd>mhYePp=$XZF8>02Jfhei8Iqis;GK{^+0j?*P_I%xQ+z-8H1?Y3S}(%fxOB!3 ziNBwi$z6sT__Aw+#{iFY9`ikNc)WLQaz&ASj)@FvsXNF$IAur5Y==!JqN45V>O?ds zW>1FwJk4a&=iN(FKBQa*(LaMTRepZ&LswTqSb z^HH7DL)Gy_{wmACr|@H2#2Q$&)8MGyHm6`zJcg11YA7+BAew!dsCBl=qZm<9plx5 z7Nv@4!JOf>Nf0&QKYoD!IK+&_Ur(UvUx8222x4nyqQz4>Dy#oHY6ItqL}^IU!1aqFc#=c3{3W8c)mtR!=ngO|_@_2E%5w z=}JzV2urS*b0~%0PuI8WdA{-T@W}vkaF^vc0ZCO8$0trn%HxE<^L;6I*dsh9ctv|$ zWXgEOb;Wgv+%eL*m2^CDL((lY_Z>{AJi+vBq5aw}!cIfnMa&pg2>$I*_Fk4?^HWwm zgN>k{bYGFj>SCv{dsqdm*C@G0s>-0*%i+NU1Rm?9Qr#WqrGr{gd4;b$Ke#KEQH1{B zESF%j)L~r{Ue|b$*&0Y~(NA3GdDKRe5T{D3oZ6SIPd>QG#L90njwd7AXN61TZ?|#Hw8O-Br>nDp8YK>gjRtJ~dS@QUwWv9(%S1L$9n~Aqhh4)xB_}(8 z_Q;Q-y=-D#6XWR+^W#>;ek2rv|8b%ZgYJ%tCwePY zQdLH$6mJ@c%;JQ)#CMD{HF=`*tQGKQ^e%DN3X@aAA(1Z24ls#d0)vkElny@d8>d{$^8M1*^Sos#EU={9A zVd5HE8FYGK=DALB?&%5W-xkPhAQ=@^N1a)WMUB%4l}LFQYPDfr-!$=jzu%}gTsZJe z<8J2UiF6j;Xb@WJQ)ooq6TNG~Sj)$0YcF?#_cTO5(;cQoMb#hf;8!+^{l?QR#7`=U zj_&~hZ?E(I{OscX5r*Nmba|7s1su3J{awTP&nVx-Q;-d z9aDGo14M`GaM@p=j?3wc=Y7A#At)OTubcG@=JU_ll-3Xjq+}|Cr}%45XZMb@0#KK1 z(GBqYEQH?W3VPsTDAh{P3rpP4rpPV$bY)kc(ZZI5nblTSu{O&Pb_r(@$Iz^{(J3lK zbQ5b$8mpj+R~O$!lk_a`UwPP}TM~no3`yf*uDOo%uH^)lN8Y9YpQBUA#nL z)RUa!l56BXHZCqh&GkX=MY-~bJMssy?J)1Y5Pr2InCstRv(!=?XHo2V+T&|`(7bGs?Zu)_!~CLQTCI0UCqwiV@;+|V7+L!D(px?`cBD)z}fxq#v+ebYbjTUSOn%h!j{)sZs?qUbx zve#b~*FH+1QLc%X+a2`MVY-k0q8*<4e)$4TehF&HV0ZwVh&cPHp$?;ED@43p`hRz` zt5gxk(a^1+_iM-vKW3uQ8ziwidm1{n6Z$1@coY72RQWJG1s{c*Zaun5PM%a_RMK+>92DBuN ztP$pb(@j-S@%m44&@QXJmE9`OHn)!W;dW&IcWJb}Q;73Z_{sU=RF<7ZZ)0$NFx?rYtU**PuYZ0&A?I=UzSbzjpGFQlIMUR}h~ zuQv+F-TD$c!DH2U@sapZ0spbtU@Ny&KHN7CySwOu#FRI7AG-jYiDA@VRmtazQNHX& z0UadVYBWk$LoGj=-IdkwlZ(OswhfK~LgWLl2q(7f2Z!-y&*nDf{j2EpJEo#D>njFfG z);XN8R zb8`-7s@L446Vw)^a33oU$3$6d(1Wv6Uo{bX>C^m(rqs=x<^m|d^1}(9Or>>0zL3?d zK6LIEbeJlPE-jgFTAVH=j{h<<%F-Y_$fEUH9e~SWTix9%irS%()z~@%S2%0m1xy$EKM|BsMP}|LdWiubOP!ahMB~Ua~n~SrN9gf(4rW6}yZ<^uOROv(g zP>}uPzl#MZVFUSR4tVYi(?Orq_eDQ5&zZ0K;m=!KtgyP-->Kae;3Dx-RWcLNGkD>m z^<7Q*za}>l#o=(cOaAJEUJDjJgZzGpr#~3a$j(+VyNB$kraNoVetzO7zCxRqnQSx` z6>KYcm1?^IJ*zJcz0dIx=!qc5&y(yD}%Ywid7A`Igb)>G@4?PK3C%~dmc zi|T5&PSqKgV)Lb2HWl5dI3rQ_|BWWo7tCrQO5@owf%{hyMQC0V3}y?a<6Kfheyv#$<+HC!P->nUX0HO5eN9yDLcY8|QL zZ;8_&wxvxhPp1sr_-lBZ{sFdk9aqC&sSyXJdaUu8yK+Y-sS~;#o^k`I8GLmSrWvz% z)1BeOd*dCl(o7NeWFat_ZG7q^ZvGsd5qG(r>?7?i(2{~A_7K(761ShzNnJ4qtr2k6 z)_{cNgWdisxjRVvqXqMlThS`7p_03V)8}9G3C~q#wm|Pdx0j80bA$gi5JhV_Tq(}d zsrBHyj=|;R1WqnvL3b9T=0*uDy1*?l9#xR93zMCHivP_`;QFYP*mkx=hHiE}4v0 zdXs}qp0jZhy@i_44_#&!h%T0bylOqwdhv*nbGpHxFA}ZTKXcHeuL>l$2UogW|#CZ-4WcW6%lZQ z-s~Jzyl?b0zmt#Z8>#Ywyv`<*ouuMqTM|{SBk{1P0gqshr+d40LvF6gRB)JXS#TyG`__6k(S#ZWnKkVQC!{qYw0g6`=Azt>NV zQ9C%{1+0JUMEL;c{!ZlebS590O8U^BK7t{A&cw@6G8^&j5HpP1f@f) zI^K65dY#NBMJZh#)pBWiuMk-gbT^pV^9H*7Q}zz)7xo(OqyMgm_Fmz({6YT#E_28H zWY%wFBKi6}8z_#8Z)j+}@dLk(FVjXGTbEJcuE$;Z3|>DrinysbB-Orbniyr+XyepEYij0gKN>ho>J$osD6_B`%pXQzq#q63-)u9_@L zTjfz_w~>R;oQJ4}beC7~P`>Dl!qes>8KM==E2m8rMFjws;Mv(#ex>jG+k8TqE#!GzFV0ix2jNR}T^+?adX_FLYuhb|2<@ozCeXh; z)>@B74L=l&GM&H`8jR&1bWfID*J>&K$S<>r_EOGdPkmaVab2*B>QuLVnFM~tDd;ZM z{#ZQ^kCpG%7}r?a!XtXVJDszW{P7DIc^>>Lo{2kPU%f$cnxRLXK{q2&fS1JSbEDa8 zUAKI!^`bKy3?g+EH5Faj70z-3=wx;7&_%e-!{op8r)>Hry3C>u8z&E0z4cku6%XwG z#GY{Q`T1sn3_#iSMhs7_EvY2F;Uz!W3Z{17Y#LJ!oZ~q+K->Npch{@Lvm(YDFPL6% z4wA^#e~BCL3pT-j9q8H(T0W4y0=b<1PIdgWYtj|(whF`KDa+pWvP|iZD9wy|H$8j; z9E?)duW|$G_B>#;C%DJew3E`4?xQHUN_%^!Jy7OWeN+u_$1{BIR;g~hR8M29;$YaN z$!6KX4tG<5t9N_PDU|wv7c}bn}@4QG|IM3plqwi)m7y+IhJ=m z5p;G5-ot_TpO3I!!$}^dhx3dpu`Rd*XRijk9sEGDYk@#0{EQFMNuZ|G1!PbB5>|r_ z-UEF+O7}U3=vRT*m(07W2%Eb&+S^m+y1IaOS2^ieUzm5$kL_ZA2jp&|bryZZ@gxFP1(Qj}ry@)~w@TS(QJ;pYq5S^mOkLPsBfEo8*0OF>^$sEe z?V!_6)@wm2cY)!TVk^r@w$Cf#e+AC_as9(6w$Ti>pNWU6jvD9qFu|N`rQ^Kc!+ZY; z?>IBK?Nwcg?KKyf29-6vi7o*kUOkDvD^U-I>jqQ}C+XQr$cM~ocgRBA{sGpz zlI-(%r#(zV@f)~Yg!vPf@MKko>Uy}m&%E=pnW~oQ`qW+GG-bgHN-x)_~Eak&B2#sH7K zu7ct*8kqI&O*krgQ@6Xor!v}&t;1p=*w}b7;!(9lj}m>@&^}GxNZ$o_pB&uwmUQL)h?{doCf!T56|X^UZ1^Pk%sLdJ&G2|?MDz(Xzi?~! z&<(Yd73_APRio*9PEe8Eq1$?7nlS%#G5srRYm_nvaEV$-r8o~n)#0QD(JQj`NsPf; zsWnqXKV2I?ll^7}D1Qa=oEz6`i3d+0dFnY{^4X~ER{g&+d`z~o0;yN~qcW;P&XsJEIRa{sM5pkGE-@1`y^rAIU6_JJ@O)AodD!nKlHmAFQAeF1 zH9*us!+w%_d!lYhZ5}E-aNt>Qj;cugoEo*QH4EgTF<4G9Fp#qNu=$Xiul?T(EI?Fd z6IGb=w`yjxn7Vww->n$yC%B%Uy+?dzHZh#ZXI(tq4(Ri2dwL+svt{Zsm0x$J#=d3< zUX7)A-Y1v}XJq!7hAH?ZwgseaZz^b_ajB_b+7W%vaiWJ1IbzuP+=o3syTNo@Q!S)= z<-8NqL0a9Q=teKrQgsD4Urra*g^oB@=CVpqvwaYqIO~yg2%GSIDMxJ{o~kP5?Bq9{ zsn%-{DI1U@{?bK=_9NJbF$qLb*dy&)rh?N!Z9{E7$I5DdBU9JVJDxCaLQ9Qr}r5s%i`5ose z5N9hvjL@A>MLJG9T}G6|k!ciY!d}jJL8~Tp^bT`Y2ceoeh00=)-UlX@k9`Uat$uO< zEfb5YuASX@c=E77g$D4HhU~&!;u%g!6EU2Zgd^)_M>n~Ys7cYhZesmJc2CD zZ))LgHkeAe0Oxivo?64?blxtN6J51MMEHyQ`xaz2H~4lnrb45*p;_P%7XY7GXujcL z^Fp>D0=*^MZ(-iMnrxYi3T+vAuQ9)E4H<3=(c?IkPzqjOmvQE=Cx5Vu>X^yLcCf$b z#k12#=Yk{mQB;tjRC_tWrWO(Rh6<)BCZ2v^JQ&0#whqjr)>(>%{w|+9yBGoLz`X>0 zEJ#K89dz_JRh#(k$V9t}y+N+vx8$VX2*Jm22$k(1YR~;z$`bY~`*Y=}I+b$h-C}sU{?=gYcU)~VGP(Pxf8&Xz(GyHwChsY@ zZ8>5cxIi)dI*;S}&_{1WF;~F6w~lb?5Aol0WcD6uZW6=4TLon}VXo3Bb>QKKux8EJd#q8LXiojvbg=yjBi){1^5+oYS2|8De`Lx(L`r>MN(h4~MMx z)K2f|1jpd`a0qPSJMXs)c-k*|l9>ow;0KlOE0D4l;IzuL#mUx(x5^|RW>jW8e$T7j zDldLU^X)Iz4(2Gc!I~$F{<;D&`my>3($L+CwYpj^F-0lIi_W$#kuDuxnh$Y%9ggqE zbo618vtJzFxZZ4h*dsidzFby&^)l%tOX4s(M4Y0RN<+QG?l<|>o&xT-N*;xq7SG&f z47c)~@`GQpN&bUR{yip@L)aJdjD0(&nYGvD}GA32BiFwm@mJ9NEOuG%}$+JZ^qMaAfMg`u8JS0 zGKSq5NvI2x>?LU9w&`2U5Zc0|yvEG2v-t+PcG3FBdJYFd;BNT?_52b`QXAKz5`bf& zAJd7B#;0m1Zgmw*iY#W;=l@IO2K-I@|1Kx#P3}YNBKyYAyd-Xet)-=hA1nRz8)rY0 zlW{Q53bPmI26an%`j~On7qZ?e@SD^d@KQ&a3!o&~c2S^8Jr8mz=^jp;QmP z{+!>{)F&Un4}Qwi)Z&?yH||cu!NZ=L4c2n&J`;%d_)vYthsF|PI3smooJ?WwL1Cu* zS%_8Zn3)zOcde$!et_#$7OM_e!a=bDjzJrcs9M!HcKKO242Te~el9=Ys27`X_f5*Km z)IT$Eef`7!!w!N|c~oZri!4pN@4!s8pL*oH)VD=N>km7Gvr$g`1Xawyv{$!WY zOuv4S>FJ0|aR2ISDRP+xWTzHX9&tF7-lg(wNDniTS#LS;RY6yHo4qUCR=jtL;Ro%3 zZ%a8bl#OJWVQcxyXD~-UGA;MQ%cQco$+rrX{#GVBu(V`_CEWM(($9Lzq&`aDQ#tWy z$%0q!W_r@aaPdLvrmf8^;j=5p17|&uGaQz-AtWU zQLv-qakZ50*s*n z{EiUVK{ez>GmomQCBDL5@MTuYab&m-#C?bTh5h6N>c4aJSSRQ{KG2C>po0FDohm1& zX^Y|T*_^3s7;}U~{!Rtsi3j8>oH2vw18#vK_G5yx6c5J&@cY8Kk)Nn$_R~kMR}rA_ zHTg_6$qDDgzaV@^$+_9pI(68LrI(D7FX7|tW+swOEq0o~CjMbI%M0APYM|h$5%;TF zgAdW~xama6nW*Pa!;9U>865^gFkH=6lTfZ+5MlOo@RK=I{a5+sC&We5NS}lC;A`T! z#pA)Ii{if5j+1bZ33nYb3Nr!g77@6%9t$2`lnKT<>4`&Rs?W_#{in(Udhng?VM$_$ zbO|r~avJdlr*ePh;h*UT7W0&U68Q(N4Ly7$RZDeh-zPBgx-y^m0{?KMOfSMrSte+^ zn6)ngpLok`u?Tz2Hqh79fTgsMemA=)Mw}Q+Wfdq2P-Ty#cg!U!ff1F{>p(t^z%i;w z7deH^TeZNd_li+gNzoAmtO`{{5Pi%&K4*Dm?7nb8|Djr`!P#1mC-*^6@eybh!f|^` zB&%1ZYWc)_6gX*4bKEL34x8E8Ty>7P`w6b&EOy@J3n^ByEmTZ2@$t^EJ)w2hdQfDInLE>pHP?3H58=U?KQ5om`idGGKkyuW3 z(Tm8Qh%-|x&(Wspj7#mud8dt;;RwAE47qP=b&u=fMKTH%3>$r}%XZ|{qF~(T=wmt( zr+?}rsyAEkCh%u}N{5-#JZ4aDcoVlR0p4;4_sYqjt-+vOr|7kBu>UA6xYAVkTMKcr znxNCLJMRWPdk6?$ckrX5yq{V`+E{RxLA;I0WP4BE=cAmsXWG`=Z2tT(a zo9QmI=OBm~*9G?Nj)7~iiF)`DY~J?L$M&#Jz=i3cKB=y_V0rM#R};N@$a+k_yTELZ zQ;&(O<go*K-XYD<1S0h6yc_~9gc2=X&q zE((*mKRvmodu_^Wbt8VUsr=4C==p<1Piql4ZUQkno+-{8(7Jz#ZN8xB7EvO^Dj?h8 zh#F@0z`j|;=elV(wi8WBW?AvzTD~xN7sEMWQ!I|JtHIMB!s)usT(&R{=cQB-6M`E0 z4U?!nvWiEfJsGTB!6v%u)MP%Mh1t>XWRf#v`T^WifBa}`aGs*zF_jn9Y#*FBSArkS zRe8*JxE}+khJ;8`lR;i{qQKiDZ@@_EOIH=fj@Epz^y^W{42Gp}Q#J+17(`TrzhXvE zLpG-y|45y8mYG0B>YORoIDDy>q6PA2a~1KC*+>(R03XiQa2dqJ>LtBTdA2Y%)~8fA zJj#y|vo7Mfwg;TN2U&8AvlA|~KU^q$!-;}(K%%RXL*Mdz=ZMT;G9y$Gog}i$5;%j~ z_D~#-K8eg~&l?x`{IhoU=n?2JE$L}H9>8eMHE7lfVI&(5D z%L7W6o!QzVJZ>&98y-c~)r}Lk2sEYwo~bd-0H26gOgZXH&0b2r#s%J zj#b(oA|HVu4X1y63GRyXJk$}gt_Ml&U`5_*T&46 z?mOL`!m2%+9G}pg_qUkla6&Uu@tjn5^lE(Zno`}JwiJBIRl1P#w^LG0;l7QwHrXFR ze(%EKSJd-)tPNC1%bb7lcTR>`w4S(C5y$ulq2V&FrR#sq1aZ2&f`@Gz_zI1QGYi=1 zSp#H#IcU{r7y#qM1S*&7%%jfgL=dN%WT`;5f-VO$Z!3Ri9@8HLLh0Aw83XuVf^F0t ziTzBFiDHE`+s6LinNGwT=mwGdH<)Do$u=#;BBu?$I?YW}yyBaSnoPX2qhE=Ids~VP zWW||l<>IcTrH1vCgl6 z>>+VQ4OHt*Egbd7;jBDEDk5p3IS*@iIsS!rxz%s}-?#S0^KJss<0^Tv43T**nB9C% z?gwt-2{_m5sb!|=Gt7}}YN9D*iq5h$OxU5|`f14GW%VKVB4-mnb%1pha z}Dqj(|X}ruO-p(>oTF?Xx-OOlRZ4X&G;Mura3uICLOPmA$a89csGqRE9r^ zYK5unJj@Aah}dPr;FhakmO0J{cRG_r;uLBBYPE*VvVmNbl}M)aF1Y?^DX27KsF&+e z0~{nb28m2+DLB_`C!2ils)rla4QlJPPOLkgGrSzn&cf`cJtUgZJr1URK8feeI5m+i zD=urcH5}K!44lWw%w{L>ME{_+%F5ZwLCv-h-e4L!j{vHiReWChef35eZ=5%|B zIG@#jY^41aeDO>w)`Z8kKkW0pW)pvRAWyvn&tondJ$HhozBeD4vxku94-iBBWR#dp zjU7XEJ)ItPjK~6qW-9mMD-od`v)F6s7Iw0wU=s*#HneQ_QQG;za|t9y$Cwp-l1E^P zADJR}$nxNv73Dp0(?Jmg64{B)BGAldvQiJ6`A?VSnqWM8pRHqx0%oF{WJ z(Rjy9^oa0aXXbL))H&38b(ZsX!4@uWmyeytWN;Qb<;nMjs5;&Vur2cMX4F7bD^v+JU=J)hjylN&n^A8A2n+8;Ec zF#eH^HT-!pgclgl27Qn7eUGV80^Ma7vqarB#Z4eQeP5Ja2VhSA3mX5C`R5yWJo%ZM z9#-jajU3JF+Om3~*lJ21>S)qa3!XJ~@ZcW9&JRgf@xmFYFH_4^hs8Du*Q!eB`=eph zyazYlNcMVe#*?ASfYrb%N}cS;I!whg(}R{Wci{uvg<*6_z2VOqQ==7Ox<4JvvKV-^ z7T2xD%)C39CPesUIuI_4FH^wgAo8QZLfz&7@8t{k`#o=KF1cYBxnLsy-8c5a41_6i z0pvI@zc+*Iz`T7ZRm87M>VClJsV6+eS@6dTWZN4kA4BB@H9-3kA2t!6KEm`Z!|&XY zdTwD22Z}bdxdY09wIUSZ0D$JtvYq2Mxp_IyMJ% zWB?mB?wFP^+}98t7wMDe(3(+0o}mU#RQu`F8p5#tMvZn-k7MI+A+wz6!3jA79PuE` zqGn`;COFYI0UO;)=QPV&X9aR6`!kb&LPvW`Pj{bn#-T#HN!8I*4hQ$>F6(h7^Xo@2 zP*9=5RsEOh-WNROfh=eJA{EGVdXyax=&b8eZLep(`U94pZD*4$sBAMbw|lAv(N*jq z%KfC`n8u_cnOb9!=?;o>k_xkk8E37rCNszOx90Fv$AjD@p+K9Ye*wW2RAW!Y1Y+vr z)Q%hUe+&Af=4AVW+?~U)^cHb8cfe>UBZEZ-dis5`Gc)0W)cgZEPu*ZGH-HOrk3M%P znIach)okmr?TBIM@EQ`O)`3bK6Y2Tc9jTPQal@*ESRO?MQ(MMUPgMuaxIz3{Prn%r z&Q+R8|5NxVW7zI8+~fwgo=U|_#-}2$PY<)gI%g#l!zSq5>b=^|X73mfLz<+I+AF@l)z-_`xVH&*jEhB2jF1{$6TJaQQ^ z>|b!tXlje9CRX**5vhD`d5>s&&fH>-{DuC|lbQX$oUT3eNY|+9O2fn(;cl&3)Aem* zTeCl`vb-?8`olzA%?$8gCUCXk$AsFRqBYE-znr0}zh&D=poNq47NOc6x&P$iidaM`mY^*q3-Q6sO(Y zbV)}*m;C788dI|@rYlAzr$aT}x@ZiBvB&ISf_z9<7a!>b9?79NC@*kwsxf2>cD;)6 z^pqJn&uRIyhICF2JI;^sISUh`mxwe(slIUY4}way(+`{j^bBFR3*2Rv-kyJck?XjV zZI}&Yr@l%9zBeD9Ykq z$vN`o=52)47YF~cINOvQbSkY)Pu&q@ues=jX5o`qLM2*FAEdkdCO(OJOluy)l)M7= z6+=Z;gL&g!A_8+h>M8bs@Q#-96dS|-_7eYsFJ$KgZGcC$3opZJOjh$SbqEkyarlYhy)i^F*Cf{ixR3!FiY`ezih920$s>tJAAq&Q?{*tOF03 z&V4v4s=|7xKrMBjsPzjQ{;D!hxos7++Q8_XkKQ^R?EXID4!OFQIi%{ERD5htYMugN z@4!20!lzuruD2O_kV$VXB_f94uzW-nBTjq-*L}|KZ_ku%iyXr~qzmf36T?(A%si6k z(D*GUHuQ(H|Btyt6;&8se;eIZ4b&$=6bHlM3Z?g&X*%e&>VXrc^24}`vsb!;Y&I=X z-DFcw)C*!`b`T$b6g|J%zP8JnVk$Z%-A9~WdVuifDfh!iX0LLSg_?_tu*=i(?$c}I zJcg%I1xDX)wEPjwbRRG;_QlOQg4nl(Pjwh}*>f^gS+PpxbZcj)u7XGFa(fW}W&l&M z$*@oIQDx467tlhiw~N_x#Wgy%(>g!dG@N?qE3B$Q^aDp^Vfxp1_G_`iNuzG4pQ;s{ z@&od-40e^4N1TSJYfr;uc!O4JF5P;0_GZ6EakrESeH%K}h2*jZs4WgtaYdqpYbC4d z)lQ1aM_erO-lYF41?_WR{-GRH3#gC$_;scnt&F6NJ7#88R>RN@v(LF(~I>%LZ0PCObJ{ ze~d$mzRa#+Wfj|*Zmw31z?u@MY}yD%{-8hgXLpQ`4#i3Pi7LXK^tTUNVJLBy5J~?; zVX*-0>#7==DP`KOfoU+E(dRas+FXgEpUy+AeWs@HIWsBU;B z;BjB6@E$X#Dgt-*i(W>Ig>xX6SgAU?&1{AojMCPDe>a6HI)T2SH%}#0#=#eAM3jGv zt3)Z#@2qA9)4!TTgf)ayxLh#)mcW5p@%#I22;nLK-YiE6_vAh3qr(Fdt9_KgN0fyV*ijdVwdJL$2mdf7j8}k^cG! zT*}^5wI|r2`hbq-2mG*loY*a}SbD-mJVstUEgq-tP*hPG?2XCR4sKOvkTJ~(90wP) z5=@6P@OjHnl?5=t`b^$&$${2vIaB9V=n<(;bJ8jON2FdtPA@Ic?vN3mn4R4G zVqmc~#BQ?{j3J!K>mKU^OyKdRGJKNRR7xAgKGT;iU8g`(*ne*4uyTuexO8M=<~5F! z(p^1*KR;bmwXax*-~xNWC0Po8>@*XT3g%z>9j&54?7D$@7NUyIN(Npic7TAn=sZI3 zIe5ld?aL%6j{o{!s?pu5lVhBCIAvX|)u{BY%R@{kTe5>83)saw>X9e4&#dQNe(bD0t9C6m8~Fbd|gm7)&1gNJrkD+kZWgXvj4?({HbWP7P7G7zip zqAXuxrM0eu5iW&~SBi;bb~4gzcoXA!J9#)aoyd<9sN4^uNt}!;&rv4A?dVcA%Ts7d zGw?evI*(OHx-)s z+4-W$WFNI&5Z&8?z{0bIQ`(m(>P=3Wg-*T-{A9O|0<)h^Jf1^#8)klEw+cE%I_4bq zB^U)>F(Rz}Hfns;P>*o-xP!$9djnI4RZIZyGs$eBd(-pBlJnEk z8@)qu^O;#oYIex2XVE(!A}=&#)^fm1C-+v9Y1pK?lo`Nyw#YsNO*|=W>km4k&)k~M zdMSHoZ^70)#ca9~F)|Ocp(%7v32+*0s9PE(urRp3xogltTmup3Qt9r*|7 z;X`AF=hvffJ_97?rx6Yfxcs$QEc)5xxDt<|2m+sEoo zx)a~O92jyPrlRxcS1!O@@Pzje&XW!>n?U1t<7_en1ScHkLWF7#)9N~X)eyL~KA;6@ zsguBM#B|A|H76c$lTv>p9d<9G zV0&<}eQY*=q~~)~oc+6DP$~MTNFR{>6k1?-udZR5e}st{+TZg94q?8o+dG z3w-(R;PYuv{cG4}JJk!im&#PowNP7>Lpk&ux1d5g5B%s>y1yud7fp6+1niVnu!Fp) z-*EHL{-Cf`=;_bEA8bc0K82q98E9-t)H=7BdKSQIVYTk}e}&oty6f)r5mVte)Iq~C Vj=dsB>5G@B^QtZJZZ_S}{{VdKZlVAH literal 0 HcmV?d00001 diff --git a/codec2/raw/morig_speex_8k.raw b/codec2/raw/morig_speex_8k.raw new file mode 100644 index 0000000000000000000000000000000000000000..ab667a1ba233722d51e6f6ab21ff1a1ed77bce86 GIT binary patch literal 32056 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 RuOWH>MTe-kGfs4>|37kh#FYR5 literal 0 HcmV?d00001 diff --git a/codec2/src/sinedec.c b/codec2/src/sinedec.c index 2a3310cc..bd4bef58 100644 --- a/codec2/src/sinedec.c +++ b/codec2/src/sinedec.c @@ -33,6 +33,7 @@ #include "dump.h" #include "phase.h" #include "lpc.h" +#include "synth.h" /*---------------------------------------------------------------------------*\ @@ -86,6 +87,8 @@ int main(int argc, char *argv[]) int phase, phase_model; float prev_Wo, ex_phase; + float phi_prev[MAX_AMP]; + float Wo_prev; if (argc < 3) { printf("usage: sinedec InputFile ModelFile [-o OutputFile] [-o lpc Order]\n"); @@ -148,6 +151,7 @@ int main(int argc, char *argv[]) dump_on(argv[dump+1]); lsp = switch_present("--lsp",argc,argv); + lsp_quantiser = 0; if (lsp) lsp_quantiser = atoi(argv[lsp+1]); @@ -235,7 +239,10 @@ int main(int argc, char *argv[]) if (fout != NULL) { - synthesise_mixed(Pn,&model,Sn_); + if (phase) + synthesise_continuous_phase(Pn, &model, Sn_, (snr>2.0), &Wo_prev, phi_prev); + else + synthesise_mixed(Pn,&model,Sn_); /* Save output speech to disk */ diff --git a/codec2/src/synth.c b/codec2/src/synth.c index de7df7b8..e9affb45 100644 --- a/codec2/src/synth.c +++ b/codec2/src/synth.c @@ -29,10 +29,11 @@ #include "sine.h" -void synthesise_mixed(Pn,model,Sn_) -float Pn[]; /* time domain Parzen window */ -MODEL *model; /* ptr to model parameters for this frame */ -float Sn_[]; /* time domain synthesised signal */ +void synthesise_mixed( + float Pn[], /* time domain Parzen window */ + MODEL *model, /* ptr to model parameters for this frame */ + float Sn_[] /* time domain synthesised signal */ +) { int i,l,j,b; /* loop variables */ COMP Sw_[FFT_DEC]; /* DFT of synthesised signal */ @@ -72,3 +73,106 @@ float Sn_[]; /* time domain synthesised signal */ Sn_[i] = Sw_[j].real*Pn[i]; } +/*---------------------------------------------------------------------------*\ + + synthesise_continuous_phase() + + This version adjusts the frequency of each harmonic slightly to + ensure a continuous phase track from the previous frame. Used with + the zero phase model, when original phases are not available. + + At sample n=0 of this frame, we assume the phase of harmonic m is + set to phi_prev[m]. We want the final phase at sample N to be + phi[m]. This means the phase track must start at phi_prev[m], + rotate several times based on mWo, then end up at phase phi[m]. + + To ensure that the phase track arrives at phi[m] by sample N we add + a small frequency offset by slightly shifting the frequency of each + harmonic. + + The continuous phase track model is only useful for voiced speech. + In fact, for unvoiced speech we desire a rough, discontinuous phase + track. So in unvoiced frames or in cases where the fundamental + frequency varies by more that 20%, we don't add the small frequency + offset. + +\*---------------------------------------------------------------------------*/ + +void synthesise_continuous_phase( + float Pn[], /* time domain Parzen window */ + MODEL *model, /* ptr to model parameters for this frame */ + float Sn_[], /* time domain synthesised signal */ + int voiced, /* non-zero if frame is voiced */ + float *Wo_prev, /* previous frames Wo */ + float phi_prev[] /* previous frames phases */ +) +{ + int i,l,j; /* loop variables */ + COMP Sw_[FFT_DEC]; /* DFT of synthesised signal */ + int b[MAX_AMP]; /* DFT bin of each harmonic */ + float delta_w; /* frequency offset required */ + + /* Update memories */ + + for(i=0; iWo) > 0.2*model->Wo)) { + //printf("disc voiced = %d\n", voiced); + //printf("%f %f\n", fabs(*Wo_prev - model->Wo), 0.2*model->Wo); + /* discontinous phase tracks: no phase adjustment of frequency + as we want discontinuous phase tracks */ + + for(l=1; l<=model->L; l++) + b[l] = floor(l*model->Wo*FFT_DEC/TWO_PI + 0.5); + } + else { + /* continous phase tracks: determine frequency of each harmonic + to ensure smooth phase track at the centre of next synthesis + frame */ + + for(l=1; l<=model->L; l++) { + //printf("Wo_prev = %f Wo = %f\n", *Wo_prev, model->Wo); + delta_w = (model->phi[l] - l*N*(*Wo_prev + model->Wo)/2.0 - phi_prev[l]); + delta_w -= TWO_PI*floor(delta_w/TWO_PI + 0.5); + delta_w /= N; + b[l] = floor((l*model->Wo+delta_w)*FFT_DEC/TWO_PI + 0.5); + //printf("delta_w = %f b[%d] = %d\n", delta_w,l,b[l]); + } + } + + /* update memories for phase tracking */ + + *Wo_prev = model->Wo; + for(l=1; l<=model->L; l++) + phi_prev[l] = model->phi[l]; + + /* Now set up frequency domain synthesised speech */ + + for(l=1; l<=model->L; l++) { + Sw_[b[l]].real = model->A[l]*cos(model->phi[l]); + Sw_[b[l]].imag = model->A[l]*sin(model->phi[l]); + Sw_[FFT_DEC-b[l]].real = Sw_[b[l]].real; + Sw_[FFT_DEC-b[l]].imag = -Sw_[b[l]].imag; + } + + /* Perform inverse DFT */ + + four1(&Sw_[-1].imag,FFT_DEC,1); + + /* Overlap add to previous samples */ + + for(i=0; i +#include +#include +#include +#include "sine.h" +#include "dump.h" +#include "synth.h" + +int frames; + +/*---------------------------------------------------------------------------*\ + + switch_present() + + Searches the command line arguments for a "switch". If the switch is + found, returns the command line argument where it ws found, else returns + NULL. + +\*---------------------------------------------------------------------------*/ + +int switch_present(sw,argc,argv) + char sw[]; /* switch in string form */ + int argc; /* number of command line arguments */ + char *argv[]; /* array of command line arguments in string form */ +{ + int i; /* loop variable */ + + for(i=1; i