From 975f9519f0ae48e780767bf543204c6626a493b0 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rog=C3=A9rio=20Brito?= Date: Wed, 10 Jul 2013 18:15:06 -0300 Subject: [PATCH] Imported Upstream version 2013.07.10 --- devscripts/youtube_genalgo.py | 4 +- test/test_all_urls.py | 11 +++ test/test_youtube_sig.py | 2 +- youtube-dl | Bin 140233 -> 148725 bytes youtube_dl/extractor/__init__.py | 16 +++- youtube_dl/extractor/archiveorg.py | 66 +++++++++++++ youtube_dl/extractor/ard.py | 2 +- youtube_dl/extractor/arte.py | 42 ++++++--- youtube_dl/extractor/auengine.py | 8 ++ youtube_dl/extractor/bliptv.py | 11 ++- youtube_dl/extractor/brightcove.py | 32 +++++++ youtube_dl/extractor/common.py | 37 ++++++++ youtube_dl/extractor/dailymotion.py | 50 +++++----- youtube_dl/extractor/dotsub.py | 41 +++++++++ youtube_dl/extractor/dreisat.py | 84 +++++++++++++++++ youtube_dl/extractor/gamespot.py | 20 +++- youtube_dl/extractor/tudou.py | 57 ++++++++---- youtube_dl/extractor/veoh.py | 47 ++++++++++ youtube_dl/extractor/vimeo.py | 23 +++++ youtube_dl/extractor/youtube.py | 138 ++++++++++++++++++++-------- youtube_dl/utils.py | 9 +- youtube_dl/version.py | 2 +- 22 files changed, 588 insertions(+), 114 deletions(-) create mode 100644 youtube_dl/extractor/archiveorg.py create mode 100644 youtube_dl/extractor/brightcove.py create mode 100644 youtube_dl/extractor/dotsub.py create mode 100644 youtube_dl/extractor/dreisat.py create mode 100644 youtube_dl/extractor/veoh.py diff --git a/devscripts/youtube_genalgo.py b/devscripts/youtube_genalgo.py index c3d69e6..150c88d 100644 --- a/devscripts/youtube_genalgo.py +++ b/devscripts/youtube_genalgo.py @@ -20,9 +20,9 @@ tests = [ # 84 ("qwertyuioplkjhgfdsazxcvbnm1234567890QWERTYUIOPLKJHGFDSAZXCVBNM!@#$%^&*()_-+={[};?>.<", "<.>?;}[{=+-_)(*&^%$#@!MNBVCXZASDFGHJKLPOIUYTREWe098765432rmnbvcxzasdfghjklpoiuyt1"), - # 83 + # 83 - vfl26ng3K 2013/07/10 ("qwertyuioplkjhgfdsazxcvbnm1234567890QWERTYUIOPLKJHGFDSAZXCVBNM!#$%^&*()_+={[};?/>.<", - "D.>/?;}[{=+_)(*&^%$#!MNBVCXeAS"), # 82 ("qwertyuioplkjhgfdsazxcvbnm1234567890QWERTYUIOPLKHGFDSAZXCVBNM!@#$%^&*(-+={[};?/>.<", "Q>/?;}[{=+-(*<^%$#@!MNBVCXZASDFGHKLPOIUY8REWT0q&7654321mnbvcxzasdfghjklpoiuytrew9"), diff --git a/test/test_all_urls.py b/test/test_all_urls.py index 39a5ee3..c73d0e4 100644 --- a/test/test_all_urls.py +++ b/test/test_all_urls.py @@ -61,6 +61,17 @@ class TestAllURLsMatching(unittest.TestCase): else: self.assertFalse(ie.suitable(url), '%s should not match URL %r' % (type(ie).__name__, url)) + def test_keywords(self): + ies = gen_extractors() + matching_ies = lambda url: [ie.IE_NAME for ie in ies + if ie.suitable(url) and ie.IE_NAME != 'generic'] + self.assertEqual(matching_ies(':ytsubs'), ['youtube:subscriptions']) + self.assertEqual(matching_ies(':ytsubscriptions'), ['youtube:subscriptions']) + self.assertEqual(matching_ies(':thedailyshow'), ['ComedyCentral']) + self.assertEqual(matching_ies(':tds'), ['ComedyCentral']) + self.assertEqual(matching_ies(':colbertreport'), ['ComedyCentral']) + self.assertEqual(matching_ies(':cr'), ['ComedyCentral']) + if __name__ == '__main__': unittest.main() diff --git a/test/test_youtube_sig.py b/test/test_youtube_sig.py index e87b625..e766042 100755 --- a/test/test_youtube_sig.py +++ b/test/test_youtube_sig.py @@ -45,7 +45,7 @@ class TestYoutubeSig(unittest.TestCase): def test_83(self): wrong = "qwertyuioplkjhgfdsazxcvbnm1234567890QWERTYUIOPLKJHGFDSAZXCVBNM!#$%^&*()_+={[};?/>.<" - right = "D.>/?;}[{=+_)(*&^%$#!MNBVCXeASqPlvWw)=qBm$tKP~}R(_-kre2{+ z>vM@KBvp^Ci|%F%uP?;>%@KBirOAIw(4o&O;dBUN-kL?Y?DJ^(xMrq_i(5}}oTclT zCnRe+vPVJg@B#Ugg6~3nWLGKr3TXx>b7{wK&JyPie=3y~tL;mc;+!jIo0tuJZlc*X zkE;Eu%K=oox91d&%^L^IX=$1n(f+Wr+wh-mq%i$tbJMu`|M4|m^rCji{;H^A#aBt3H4We!!#F<%?GEY8XwBHdG>Kb7!ADtht8<8Xom?ttZ4jVNbo0eB#S&YtVwxmM- zv#KppNr{^uHXWZMx?QfsmP+;#LW;yG{9H7Lo^7X@!KQZWCPC6jYODERV^reTRibXT zqg1AEi-0RfZ?EP2V>I;q+~X;($?HSqaNd1m1MCF; zaj1=7j{-odV&eAELB^lIGZ9n>uP z;FshywtUnfkoQzp8%!ptkT14d z2(w~S`AsRtqo)iO*?C_UC-+5LFh4w*YI%3Jnr`D~UW5^!7R<*)ZL{IwoCpnt4PFR~ z9RT628qWjw9a_Y{bi3lsi%wTmEHU#G(j-+_qvp9BW(@iZmw*7z>d31lVB33!4^Qqb z1D-}ywM#jk)$p|I{I7Q;$@`L0$}I2C42*yuFDc)FOezD{LM~g4bxXjW+!BfLmYK&Z zvDbF?4w$m{-pRM$CeK%Pj@?grApsn)Cm^K}JJGx5keEjmRN&zgbXH&hlh^e9ZP1H9 z@=NQ|;xqf|wFz%)W_IzaEfBzaD)Ood9s&3d>KeHaE4*Ga7#DQBOo}W z#m+snCa5QW6kL6?HDo;(#z_;o9CeBL^}|)*n~oC4}l|WW8=s0 zPr%9hvU3i!%(EGU1~sqLFT2S8wR0zi;h}YL1-cug7`%x)=N%R5lgxz>3fDcOh5LbY&R1jdSz?(*f`~3TmCkU8P`BtKg>>~1fa4Kko`F^wam(sz>7Dq z2pp(!0Ht?IhIVWGWtb}ZW=>797a-oHn_qXVvWjR=GIdp7iti8`9%6&{O0>B%F_iDh zJQNxuAACaUKMUq+D5|=XK9ahoM0oBn;64|-)vCb^^z-!1HCc$|n&~CsDRwlRtLh4s zLzOJ0HdY}_9FV(+VR!X)%b+L&3ib==KVO*cx$u&wA9pf&I5{K?&6d)?NLC4_#ARZn z`1PMO)PG4(Kra8%3`iv9Ou>MF2w;QaDyeU0e{2Fe6m0R<{N+jU<%8vK#4E4>Zq# zK7mAyuJu%xq6^bOScW5gOBK>a`(~%{W|Q8meRK8+AC<84bMC^Nd;_kA?c~K@YLWo4 z`vY1-R@;mT&Z?{d$2AjX)kY_u6yO>TjwXh$g(9@DYVmr!@UnqRr{al1SKS-%Gtgl2 z+A3+(LR%X0g|l3+Q$Gz@O0+z#@q3L{x|p?riVptMboBiw)uVLCj25I z3tiimZMZP6_;E$4-l5AGP~rx)^Kv=z25FaBUyhZeO4WMpRdEwo0H{209;P8p0*;Bv zLVuzXr4gxw0;JS(XSt|KOS7~ge!!b)<6zrd1sxnNw#-!uXG$X#TkcD!`wL*dK4Dsz zBk`^utHkrKP*Qwszew*b5Lv}4;U*>e-;VG25Z#{$(hE%^O*vNo>(umsxeN#5474Zn6M6c>Rh8u&T2Rk~;6XkG9^ty)i z_+Y`br&`U!%#cYm^|s|SatWiy_Sw{lb@HkS)r52mfTP?U++bALXLO=s@@hinDeX5T zF@rfT=i!qsF>z^=tu9NOEqXbG_0$p!irnx%a$*qlxe*h^{xn9ABD4dJ)AQZpNkHxG z`HH$GjtmlW0c4#xu(Xq;qx&^H&e)QTtr_-z_k~E8HYO5|l}MHOmTzM~nxiA1-&TcE zUgm57u=^vRNg*SVO@Swpt2W5bDXBfxXPOSY5u}}^9Cv7b`8)?yoec0v_E!{GTdRR<*yb?KrQdT>w33XWpb7dwf>X3-%sL^O+rRWhzWoImy#TTOXyLiEwuUt& zydo^8x&M%H$_u#5Gx%0l(ehi2VE1ogBzH`e(lpi!nlyDJW`Wz$VRLcB{*lI= z>tL-Xe(xEP5wNsPU~@%WB&sspgxGg#$%Zuw{V9dHA|ti+MN*C!kM{WDww>>Jo6K_O z{=Gj<5&OJh*B0IHQ}pVoxn9Ow4!&8J5M>{zKxA~J?@jRKVNksC_ve3r$`SEY7}n9J zSOXjgNDnrd=nDs6NH!V^?qfB(nl=?k1{d#}>+Sf3r`T#ma#Z(&ts;-#Y&smi z30uJ!#3a$_``g&IFxNOoproEi3j^Jv8Mv>4{0P&$GNQRr?nWb(IF zv7hQhUL#C7m{ls~OxAANHR{CaOpJ@;*#f%~d|kMqa7a15Wj(lZ{&@bF15{wue@3Kd zgO=9bPTw!bv3PG$Q>loOXNO+WPLg+Ow^5`a_wohW+>IcgZU>|-xu zK;r6Gp}`7uUhl`x@dMkhV&U~|!A_qt7Pl(HZ|1IkBC>sNsT@sumVd7oHpU5|H`>4b zw>Nfn_)g{G;&$%WbmwL>_t3CiPg$(OhcE3CS-hy|eg#I_NwkCz9)N%%BYkq_X-?w@ z$?1E&&o^0KjGLBMoH6lRVJ8{^5S1Yqd9>av+!SdC@ zPzUQ1gbh-*r&&`4V%58ZbUj0gIa~pW5OrI+ti zOv&G_wRKl5Goc?KP7><-!FqZ$8ZcU{aHT;jRxNcjXv_v zO^pob!VRwbrGP)3@vaD+A3s2%S4t}yX}yKbk0nE*KC$21)IT~)wiAYhiO?Kby29ZQ zV(7q6SJs>D6dDT*_S%NoELl^0lX@c@G#;@f#4kG+-wp~&1*>K=vNmhJxLlF(p%9qLC}>Jk zvPhw?06_7pH_6cvb+S%-yB9yxrvk@f#bj8jZXe4vD|9c1daVtTjKVH*xpMkzh9Ry? zbO$sK+^>n&-6k36JVymuT!AM=+w$n}msd|}O@28oDMcUin%7c~t*d+|ihFToy2q9A z)#i$ca{mk$g&Ar&UCxO*ij%C0r5)Kn6zyuI9e@q_rw+6|78|(C6py8o?Y0NvJZb9) zwc`<%W}}3KCBlf^jTiZjV=gokMTr0lHlsc)3}@`r<@1E3qvo*X-mSo__!EMyu`#si zy(3(*%WT}6p=|OORIAjYT%&dCdpEChPIdb3t*f}IX$nE>Nc`3I{_xpx_Q9IJ=-R(y z%SmDwwm5zniHtTpaQqKWOCX&JFKGd+;QtZIWT><`DPWv5Mo17Sh=1^G4!WM4c!Qd( z6vGLc=i-+f6GI4K8>B&#F$;Etfa*nWLJf-E>&JsFM3srW&b`r)DZ?0ff+PF%f2r?8 z=;IT}=R$r)u-K!JMswbaAH4=qzxCk6ZO!fK4>C<*tVZtK@ecXk(le3@RaL#|GTHT{ zFj>*!-TE{Rxlc&kn2x`5NAeAn19aWWZ-(k^_376T{5}R;XPN#AAEV6G;rVVo9@dDG znsB!6h}OZAXG)#d$=``dKC{Eyck=4%gfUp2o$Qi88Hf5vE~AP?J$PFl3gJEP!62iY zX^n$76D;s%IKBGq>l7~O@J;J9vFOudaz+*@1({qOE3Ac(nCJr99&x+0bawgp>FdrENnb}lOV2PfGrMo&&AoOtrWXIF zpO?re5#*eS#KkiYG^QcJ6RpfKOxxIZ)hk%RERkju7Qh_{B`#(!Ql2 zSt5=e08~~!)-N&E4965SMFXN6J<;q|o@RtbMjqqgi=*~OD0+GlRv5FpSQAKSHK&&| zYy1?u+kT}xY-B&`?B#rg7b(I*zDHwVaxeqmi#7GpfJ-a3EsL* zbCj@38uzp|fV}08s2LSl-MQc^kpdUFQLHl|pvtIfue_Iq3f!^A)R!-{TbngXQy%e>l;TtP@ksxadq~= zJG>Sbfb|)sPXlDHz#l^)WEZ&@SQI2P?hb1h19Io}^|}ZJre&~lL9wWLyb7C6;ElO% zsMz;3gSaGqOY_i=tIFzFB<9&mQe-8yLGSJ2&6zmm&Q+*#;qCo`LhUZM;o9W=ufEzRHbAA-Up09<&OZ9{-`JYGV|kk z=U1RE(+CoOT>RTg{Oc!it)R_PNR7(5`EQKjEyDlQqRl^XS4S6139$?b1VoFGmR}0| zAJ*h*_TPMI{hz%1Py8>5m!s+9u)&G^vy&Gj$&kND?YyC5=p?>i>v#vEZ<HXQX-Cy3ArGijLPPm*UCj*prBjR#+X+MDM7EOr0hltEGx~B)*9=-Ozn^a zizg{Dn_@)}|F&$F&rm+pw&n+9%k{u_3ozMQSXdmt_)d~hzE3KGz9Oh1X`A+?*eDr5t6wM1GPS^H)>cD%|nXKfulY>}DwbLRI9y z1&}mE?1VGa`3|Kw#bl+vIHL7F)|IF3JzSc5djM2}YQG@L!WkH}Ekbm1O5h*dpS`q6 zqIi!LFrrs5ezbeN8C8GsNkllZ#0hEvIUs6MTSV8B3gm>$wQZqKT2m;6(gkbON88-s zAHSL15(DE8J5zSwKX;|@&1LJ_ZX5R$0KexrXRH5;K_R-w5Fj=!tq#7_5HgH?ULV5; zua|;#pv7lziu|shLc)#qAN!5BfP|Y9rPges>?9Ez)h;PQ8GT5VOKz8{k69A)MZ(IJ zDOp;uULx${D*H7&j4+8_5)cB69RkgfbW_M@aJ3rdLx-L0!wl!GlSJLo%lptD4lr>c zJRDp(jShMec@=wWp1tktYdEdByW0i}8MH!eE^PWtEFmU0T!H4&NXf=g^Rcz_Ti;>C zEwU?koP%=M;N?n3qk}hH4884WEc0R$cbsA~%J|Vo&-AezaU2516MOOd;gQviWNL0I zBaU${_mLH|u5oSN8=lRxFGV7&1FX;Zi&2^{f_{f6NKDD_l@;72ty6rn6f0ZAp%Ow~ zhq!ihWEt#if7`VMy|wOYM38sVPq31E6;!3Wt6@s5*It|8RJTQ>HiD*+OUoN$B{>v+ zHNm%Akbx%MLm`X_#PW^aMalHW^i`rXo$fLoxHkX0ryzj8f330}Sd-)xoF! zXxGUv2_KLkPlEdWV*3KhsSp|(U4kbK%BP#ik#LHB$D^in)+wMy6<1UwHl7nV0VSca z&)Pv5VwS80WMr|iPiNn#Axw%L=TF9=aMj{0VhWDDzU{-f-e#BJA==oNW9t1C+eFz^ z^RuC_SS#lq8X~PO05O3%0mLng*mL*)*ql4ae7s~ksZtb$s+~qq6XKK?a3;6lt3les z?&hKEF&B6`s6R+Y9bif|>`*O~q-1m=?)S5~9^kcd;~$ih92p_1h$k3TU1%;TYp3dD zFgu#%(1C`tXZEWesn*kZAqFh1hQ`xus|m&L8|RgQM_*KKb5$W>0#3{{AZbZvSQ6R% zOd((uGPTIPH;HoWs=u*P$iiXGehEcTVHVLlc8$V{RnFLN1Z;Cs12>qhCRQH71cP7w z(nVuKspVLl%89)s0->%$uOMn{X-`4{(3JZLtWg)6jW=|k(k)!W(vmQWnA}Nh1CX1_C8w~Bn{<#-G#(6z zWk_>in;DzdXPcX57ua>C6dLpv^w&Z*4=e*hi}P-3ZG*#f1D85F+w;QBdwA7ty4u15 zND&uxjrZO>fI(=to`9F!M_EgKg|4GxR-R{92UN$<>SBs_*OxS-DgsNeSICH$biL_j z!IoB@1Al;n0h8$)5V}rv@P{wRrM7;YAl0%3&zs_cz4t?A6OC$9lFYzDEs)d>9jmr% zmK*#RMVbJ%lWIeIJ||%{c-+tZeK`}eTeE0OAr^cXc7e)6MlY>#J~%% zO6&R$hm1%*o^g)73EgWeG@;F_+1iE7|fiWBf?pL&01bHwfaL9Re7(nkZ za#fTIaOftZA_#+$IGTUFnrU%|(s_7)shdM5x5tR0fl$Jv1;cKNJ)=)Y8PEn&ZNz1l zL4U~+V-hJdF56`zhy0`m&LV&&ZDJ>K1%{3xwNo%gpKQe2@%}nPH^C-eBwBKBUYL+dfS zTp!n=TVVTaTO&&LMI>Ri6Sg_JuTf!3(H&Lg&*U=Q^icGrl4F5qxXptPRk>CUTqhBG z;)Ft!nyb;=7ihCZG=xxQ9*3f!(dm7A_wn>sF3`;s0ls3C|KVfxWm#3NkDx&0LIK-= z5U;?~z5m_i5#xV&f=|eSaKY?u{#4%eyl!*3=?Y?`W`w=gjy@8~Bo-ePp zq*&!U5+W?rqs)r`I#WfIh6as}X+LltLsvf6B_%NA75CeWi-p!ZOKG)=U}6J;fb|7W zj)IuZeW=i}&b}rUX{kdhtZc%XVCk;Y#>2=Dt*x4cGh2=Cu79_AScdsmsWCa@X}aQk zC#F>RIS08EVn%_;OI{}TOBcD~D~p@c`kKz(Us!qY@Z`XE{?R{=1?k{eA%3RCF|t|04XEvD9xRG1cn zrr@1`O3Fw2U?925v6Dh0A|zI8Xz~^*h&m<}@MFj9xriu>uV^Y;F5YJlnheZC73oNE zFtO)MK8!m$a_P0_a34o6`}QzIUsT0!e@(MdQoEYiYanO3q&u{2q?!R{Je+ISy=#w` zl`1OscwM(lP=0roT7n`IDuyhU5Cmo8>t7jjm+DJ1NMu0AtXy|QEg8iC96BmFj{Z=Ojmx~>lu)HUsA%muJ&0>nU z=B0h#ar{}y2VA4;QIY->rRbVT$Xk?jiT`CiF)H!syiTlmafil5=5g2*qEYZa)1{TsQFsrw_PIdQfuDTeOA1S5bPt8eJa$%%9exH8TkR!_9`J}P7K&K%-0uW z6KzQ+$J!G_&=v7MqsU_Yp-a~W8hnF7SHrBoF|lduC{k5YD}AkzjL|=KtO*8dUedN@V zHT81E(*Ue8i!%ikUG)Y2pCU=ag#y8BlF!@#L-PBlZh4P`AlIRRfRO(g0`QXu(lFEd zpg>^$voV{#7Kozt4pUBq&O&+Hhub@E572(W)6;={V=L5koEK%*0p;B3a0Y#t8 zd4EZ99@yLwJ19!%zRSI1gf*u>;MMBNkL-{3)`T2byTL-~*RDx*R-lg3nhKFnc|LyM z+Q`XWx_IhN_$8ztD&+0w!o-C0OUER1@#f`@CB7WCpS4<({1y;91+Ve6uUFEz@#mf9TzTgfx2x^(B^=5fqG{T>|~ia^E~&yAS=>2$Rii5Bf&dk zpow0sxr3ESi|9(xr*Bg@^U@Z_Rq}kI_wiaA(vjZYm)(;EBx!zVd^EO_O!Mbcq=$+J z(~#K&)&mt@bP})^z8!M_$nv`%lm$bW(kFG6BH4gBoDk208E>z*Q2q5Gv`UcdGa|5I z4BcROvjHhF8vX(4Ga?_mzzdaO?B?j|+TG`KDk{Ls3Pk)PSkt$e^Y<;n3v#=+uZ@R$ zdrRP6eEaWpBEZv?lP8xW0pvE~0x}nDQJSG;d3K($pcfDwIR`oDN63zSb%p=vAqg`d z?zk%y<*$}NIPvOvd=-D}<0IiyWHM_J4tW_)GLrr>zw^)&d@w|hHXZLIw$B?065lPI zgJ)uzfQpK6BP9Rh!hO@w%uMrwW#)&k&y1G8BIPk1Bt&o|md$!8}A4K$|C zB)f)j9>!F%f~{zTI%Li=D!{!T{&q|?WzJ&SKnM>+R0M=EAjC^A*@`|Oi*_}Y*db1bSdm%>twMd=XN>j!GRg4J*{-?Qd}A)X1M(6Yt` zHvtqGhk|2_@v22nx7xPv0=>>7B{@^!515t~XyK?&QgvE-Xddq5$oM(j&qWZ+89Sbm z%X-QwM@)S7#MUeb;Z)=w(PH{D>D13Q2*nzr;9L--HxDv&7F3*ayU70ocv+iDnWHV& zmzg~vunv$n2zQq1v+XSwU77Gj_A&Q?20#geB>F{&9eGaNQ|CvF3TP5R2CLqYm&`=s z&2J@tivmNOe0dtmY$07b)^Gb0!HqwNFG9XSlR5~BTY@{uJvE$81YB|o;%I><;!*=+ z)+XGGFI!|o%y!rWUoAc za4Sv!WZxyJ@gsw1jT|)@i7G-yMY#jsNHR(zgF5A~OiXo>Jymv-K_PG(v?B<+ZgbW8 zba7dqF(fNYNj&f8(^}A)iC1_`@P3rUGVa2DiY7v{8VOKTHxJ)qGJa48-5=9F*3P+1 z-p@i5;d9{fqL#~mWxXYP7q3aHBEaGIdr?zB8Zen-woL~e~1VdYo`G6dG7=?ou*ETG~%H7?TNia73aMn_PMR^0tp@QwqK2-{va6Pyn=TwYY@x z?XV)ynd3OR78Dv(idDqIxMsJi(txI$1r7AVW~97Wd13DwTs1QGu6DZFn1%B;^xIF) zbYA^O`2249RvYF=hIxo$S%(qsV;Q3iPR+Q|so0Itwc1s==#BD7mAIym9GiKYyBp6k zIdTuYDxCpv{i+qu5okKeFaT0TCSa$4P@=*K(#-~O4Ri;;dTe*v^VUA0(t7&j*EZ&- z4I;+s2&*ro3WVD6sx35Mi%I&g^6;tIP%9MR#Ot+l(&E2UWv2WPh4a}8 zu}~TXY7o(6>9gn3AuF(t&TJ&R$u7DZ)VK2{CD%V}Qx%nkJNpIPM1UH#Vz)I>YMnm6 zF^>fvw1JkeS@s*UD4CPLaBwW8E@PZ!4cKE&8$(5e=GOQsJ!sY}(N1G)t5=O9u7BbB zEnMmBFf50W;O{*Yp6isq>O2~F3qb=_x}(o+OSev~TiWVaIi`jC>m2egu`hFnA$jV))Y{wiPk&pdj)7%9xXVm*wN-wfG77sh+GTHq>P@z=6=&}{Uo49Gzu15_hXZB>C2NZ{v z2b9E|;NY4oxQ(qavVYR@W5gPA-4XAr{o)z1m>1@L`&66xc1=fG=$b7jZv zi9^zQM|XnD@GB<;J>B3(L4q(;mT)BOSLje+bP>SL1e@!q0+b-i?EZAHbvVa@D4iG% zY(~t8@UY?@N3|+BaCK1b&-gVu3h?z0_F+R2)l#(4+;lkd=FoKt^I-BFcR193=zHz0 zjanOXg<(pS2mnh~SVzh@nAFeFmjHJs91n6|+Xk&B7t*e45%;5$t?M1cRCwHVF}W%J z5#`Pj^B3eSY?C4~lCL?bS+_Vid#G=yK3p)A?cq>yx)b~`p{@~i+%v0}kdEUFI36&>tsdlzH+%Qlz2=L4bF(=yG{LGie5i`Jrkj`iTUm zuj~yrd2|yLOKFgwuCNa23a^fjt(um5)??f4RWU+5r^E4LCf%dXzKNZi9)OLcf;skG zC1RgT@g%cE7H(Zl9wU9X)(~GXhK=KeUlee8%pI_o2`Q<#=PEvmS^q#7CKTtyD{*M+ zKTpsq0%*}0d&pD_E5lX{(2c!&zbl2`?>P597MdFLTDgug`1;758&(o|M#tXxg~A+$e0hl6rL z5a&1*$6Dm-2pLzW57ZezQ-pe?mdY;=(xtZ029VyvMj^M8U?>{qI)$jJG8P$n`57Oh zq7ybOG{b2E9gl|Hjm3Kvr**n*aRmQ%*|{KvKHhUDK_cQ(?REdgEXEPq6GIC>f>~{G zz0u1_fyvzuTqjdVjd_i&sx;>>=Vf(WW1*EpdeF;bUxq?c2`UU|LVk`6l8uEC^=;6^ zg`!8Zvfq0825kbVZ~}qP4?7XQHlHn)`X{O2!2fGqZR~7iVd-k(;Qs%{uT%egrvHim zHGXwd{wu%1i0U`1@e0mW(W#pJya-om#~29>9Aw8}hsJehXJS6O)}mq<0oZYqP8Q_p zYwqAb*>tI`V{Q?fMI>(d@;I?Y6QgMkD+y&AQNKJo?$%yw0zk$W-l7+k&kb@tgD-VH zhHmx0X?^}mlqC_T_;`BT|788}av6xjx}X2>=FTWC>L#HVCa9z}zq@>2$b-1OBgL~z z0rRODCfRi=r}1h`C?drpeIsll8G9?XW<0;W zfWBR@aSVn~4RDQZtuWbM_KdfRHIwcQq>@U94-sTNVNs^oq<2evuGpA^cP#qlm>e7A z(=T-v`wfAt=$X(&GP?G6S%tzE!HaHLuyBKPep_SxS4NNSpWvB;nTvic84)OkPMqvU zwM`NaL9zI?7AL}bN~=v9&xk|^FlNtkU^G>5-@cwsQh@1aN}T!ZxCH-p2QCZ#a^y{9 zm^HR-7pH0xSK1&+#hqUdzNq$3o^S(yOjpf>{IBvj8?+vr% z2~PE@3Sc$Y>P7qD+TWvHLtg~J3RLpQTH2oqmW#8$0FH2^A5qDW4ExIJE^^?Rsu@vq zuk^bg0ZQ5typsFS%ZyAfIKG3%O1BJD(wS0XExj9AngG$V&!K0Y`&A}=m`_r|0V$k$ z#i+^>>-p${d}Sgv;Hn=!A+HGV|5SdHa}^{Q=?KkqRnHuXpfFHz$q{_wFQ6F00k7@+N*p z&%T6wS0z2`OkZ(mmAvS-0PM6AlB&43Hgo`sY6FGkO2lbX-M?NiedjARDX8_STH+RT zZm6`@* zXgk48kohVsrqB)Z=r@M+ba->M%!Pylztu$z8jYA&dc#MMYZYG|m2d3Wlk zaFLGY(L@)tfaG1}hhY*b%O}hz62u0u$}v7ebYO^CYG^?)DX}Z6A=uWbXR9EK+YxzZ z4;%O?8%>V={Ylk#0VT*lni62({+EG#7$r9FaH3(H*G0_7R?_qfrqe8NF#do8qQ!bj z?+jF2g9qgx#yC$u;4!``w#aN8tL9psDUKTFr!1<;S7IyYQ2TII&DH$KJvts?Hcsn$|1-C^G#Rm$p96u0$ z`PTsQlNX~fpTm82A>^w<^#MQ=Q&M|8$p%hjx44DyY3}a|nZT5o)ze-#JGs6MMe78K zuqkXpn~O5cF@98&sMXNVX+NXy#9-du!}&i;(;o^HoY5}Cvz}7r;FYVwR1K?nY0$jM zCGjZK&AHxN_zRW`-Zh|_WxqOr_YD0R)>%D^e@&FzGOEo`iS6-W+X&$HP~tfQey*8% zKrD6f_67_Pu~11Bd(%^nubG&F0|7=jT$ALH%|}YDXT)uF1p509!BDwiqotq~B+ZKC zOdY5ITlX`rJz$05l#RPTyJ^IfGD~?Kl^M^iQ+LyZUQJGKu;VT4>=#7_way!AF1`)%>sfUyF>6T3NxhSsgW~rqGflXs=mZ+7BWTe6E6rj3d7I z(aMyGhx;7(^6Q*`>tu}rPr$?f#O>*uPZ>&Tejc1nu4z?ILaC0osBfF;O{0v}s}iu| ztt7donrfxZ*im{s%|tNe$7iTk!9od)xWwP(XRY=4CP-2Mod^PuqV{;~>s5|fVH;n| zRx|{r=zA?9LF8s|maJjgQ+0{zW&?fX`MK+=e9F6FCSm)faVL33i(!g4Gx-<6h^8c^JUe=o$-MN?ds+P~%^*$o&s>f?qdokUYz$mi{9 zE%;#;&Q>DpmIwjpBrc=MaJ8Wh8|8Lp?w~T7Es#7|2W>y#Qw|yN-3=%*7jDK#T3}kL zC&ejmk?~7AvW>xBH{D^ClLXDIA7qq)QScy=dj=LPPVf.O0dFrOu<&VAKUhV_f8 zQwK}Eo0LB3G~|0`Wp!lTr5*CT<#?`fo3#TE=^cy zSQ&&6I?+1?QRBX|42n`@9`zm7=e9O@Hi+9 zI(0tvDcZz}q}e*-c50vQVl`th>=MXEyrS{6+^4av(t%ni zJ*P(}Svmyh%q80snj)9g?6OHcQ*lkmU<_1XY$^FgZXTaSn& zD+#~27SM9xM8Zsz1!+m{lwGnVb(-3Iwd1%Uk2(OsaG;6ICs5LA!-~b63`69c0p=%y z5SIa=y)nt~4V6BDw#k#L?KWAFa~cIh#~&$m1>gi3g(MNWd`EFp+kd08vL;=)WzQsL zpOElE_=O9(eA$KYMnn(Z$?ReKp>2XV$jm(2>X_HzeeY0!mmg1@4N@U47O_6=)=Zg) zu^0d#Xn)f42gk3#Z+$=asz$&Q}cpZl6(OAt? z@(DP*I&82ma0d`e)gaFa5+rEi#%0ABQ$hz=;2b?cfd*2*g*;jVKSxzFGJGz0*+pOUKLuuETLaRmVRz+#br6G`LkR!G|1^L~Q+V3ehn#x(cm zpV&_S7_M8PBJ^+r_idAD?j1pZx!H&@hBxdZi(j++c`>8*Kp0#k&+P@&x06B3|g zE?AT1_xE3qlp5uIeB_E`mRATCEfoeci484Uh(o{z{;-EW^|DxC1kQvPa@kuQL|v|>V48}8 z1sAXUf)7(4GHz!Zwwnm(^G{?u3i@-QNSFmb0PLajSwi=1f{Q)Z8sV4T#$v%@MT5_{ z+=A)XIw#aWiZK|$v~GgT!gz3RESG2p�?@WqOtYA!?tHO!U^R9Ti^$odC$c-a6D* zpDbaICVM(fUE?>T*|sAj@N;@B@dt?bK-79{S*fk?s$J?Oaa?WF<~JhO`)of|YUjL(}TiX%68UzWoSgbKVT*PC^Zg7_R15fe;G}* zcF{-jp4of-is6!(*G0?U^#SmH`NTBm2(&>1v0QtQ4?@+2>!9^41|bFDP$m#@t9dZ= zJs5tRG(on<0VBm=R0xRq`XE6Kw-Lj|^}EWrx@q>IV@|H$plBA_tT2G#wzo8}hUwCC z9YO)ha>(&C-eW#raa?H<6}La?k1L$p_^Hu6ZHbS-znXK`pdnK@cLkK(48=6AV6L;V z|CFi>SFhE+#I9o~0zIJU;`P7qYE2}Q7+hVw$mpApLwunil~S$4)%4ysreI6GMeGT1 z(bb}Ki915587p8nR5OS$gL0m$-66FkDEU}I1fxE(rE{W3j%8(f_(+hX%h9!9@gYAi zoGpQ0pCrVhtK5_#$^(XQ#ij5_iE9G(mwC~maAWU8H14CCN^=7b(4et=%{ieQM%U6~MJ=!Rm2sVs61S}@7@J<}|;k;-ujCpQ_;<-A$OF2oY_Zi5cHSr{lf$;8M8(UXLtY)tqY z76WBeA?Ptrk+sarf#=;+xC z+55I4214g&2WMZ0H+mnp-?Op1Q!R>5c&PViCM2eA*ey>v^lANqd;22&?x;C~1%mo; z(MKIq$X4yBhm=skQJaVF15~UlqQD>eiyj&T&^^Aq#Jo_hw0Y|Ggi|f z$zvVm71kAHhC4Un(S&>Jm3c^fO7R}99KVh&!}|I0g5XS6{9Tpig!OiR7@VBSY(yND zm<$9fO*?sg6;-=@b9>nN<|z~J+?f6Ob@lrTQ7-}O*zP2oJD_b5kX1zuv?l(yZgLgN zKWk|(8ZQ?N?=J+JJ&#J(*@n84w(%b}Luc#jJy4@8tZU>{R?y}YR>>LLn)R>mpO5Ej z(XZhTc|!t8ygvuer?*vI<99a^4n?Ce8CDn@I|%78_$RbtY?`NecS~I3axse4qehD=6J+<;Z>2AX}HRNPu{-{eoHfMhfYfmp1x0o zT@j4=sb&o9ph3)Y(vNTWGs8ZLScp_Qy$S*zX>T=K#`62%#iM`!#=h{jI(EWB&ZYV& zUTNfR?+5*6<^GzuThiN-kb093%`DCHxpj~8a~X^avoeeR4*d)8!Bb-&&NgW*3V6Ok z`n`PIlOnMabh%ML2q5dhTisJ1EWXRdgEC(n9+X>J72`k50A)IJua~!sr9^GKHPtjo zoM;Vn6#OZ^nvkl4z9h`v6>k4_pmm%tQ_{Lszgj9pa~FCL$a%&#X*>`sF$af50AHlc zwKBOrh}XNSV?P}gbBXI?Z&iG)qFtMEarx;HSaaXIBHg{?x#=Bz`8O=N9?1no`p>YW z7*B?8{hw!49To_P$pK&SpR> z=re%~T1KhYC6RvhP|F!tdc*}_|HXA}5X`sBYTa<;JI|T($3|to>{D@~M5v=YscdM135O-{}-QA3#E< zCmqaS_9r)Be5#^6V|v&8{tBX1|0&Iz8Pd@a;xeG3^u8d z)Lx?aYmhl(T54n?@g3cc4oecbHd}poG-yPWhl%~ubgS-);x9$d77rKv#{)y&?Fl{q znYhtUeDVR*OT6$r&-u%Ecd01w6@aj?0BnhwsK>(MB7HBy5vO|ngvm>sGjj)l+K?kOIVyZMNG=L;Zf|m=FIpQiL72+x>>4N#%peD8Y8BPpy2M9FVlg@gQ z!N)>aR^L5|B0=#O{J>Ax%8(z;`tH;}U%3n&(5@{Yh&7rN~0M>qSG;{%4@^N+}=p~Zh7-?Q-&iWkWi{8t{ka-z%UV@ za?&2t+661e0oozm6KU1t1eBN~Z6RW<61PgB$prZh(TNYBbIh)*&<4BAFzB^OH#n>4 zuw6x>u=)L>2Lidqhx9tJR1piI$@mjUm>y08WG0oXcb!cxYTSHmE7$IewQkGB_z8}v zLYa!YUi;&8xK{3>Zk4v5%1tWK7ptk!u|3LA^X@1@Lwh4#-NmJsaxb zUJ-4*tdP zjF>+v#oO#et`W0ws}(t)(Zeu?th7K39`FNchiFs*b(>mZs<466js{2ku1d)3S8qY! zGNhDmnXh3hGUdAy1|aRcLgD1x?tZ?u`GHFU%~A{@K5le59Sji!m(EyhfU~B&oXlr- z^2X<`_9x)zji)wDFol;AoUHPCh-Q(RJfc|mcejGDQEQj}?l$YNm8$pC3t}R}LQ?Vt}sttj407KgmvQeiLB3vi~_ZBfS2%0!Cib z-tikmGZ7AbO*g`PNr_NaZ<$rN2ND0fh=eR(OR9+nxQ47cE&nK~+I7;7g==cZsO&sE zz<=6VjEzmx%CYSiPp#@BoewSV84$wn8WDvvePRwB4lDFV{=~%u(+A>DSWBEUOQJ<2 zq9Ao+IZ+=n2XK~tURh2N?dOqQ82>$mkEgQAyE6Or>iS?TMnDwSkvf{0ZytjoRzm^oWevi_MyVxi=_2n|CN zR6%g?A+XZcF&pO%B?8{ZE^{7EDDSSEuKoe~uen`Q%j^Lt(tmC=wWAdPu)U%Drgo4Q~E#&1W@d*5I84$*gZLB3uk~ON?hHLF4QiW!&7iT2)60lakTDjImO7s zUa-P_^ggpQ{MnPAY$Hj!F>H#?yOE$JKoaZh- zX6m(au6wDO+-8K=wBuHve)u;lnqHBJf{IRxCh3u==ZLUwlk$~%NezT$)+y&0Qhp(* zlnx1EwcNNDMO9OylCDe&6h#f47`%bx2?WJVM`hj`NgP%gh;c0cQ**E=$HGKEM8}g8 zQb_v4*7UI|xA?P% z=?+rhjc+P3hE`4;@)u30=+UajFi43^O866vYE-A%&0EH}#rhL5M3;yP%_@jq(5~?I zUg5Hx8f9!yn@#Z-=4EQ6k;3;cy`3mB^X3{P_s)Si2Op46g2kWjKBgeDVjh6L(H1Nh z#6uONO1-SSL!rW0(dnr}x_Tk1 zLtF_USP|7!&%g22`NNvd?dcw|@Zk(>v_i<{KM=Exs@RRIIl<6t_ zu7P#sLA-u9`Xgi^JfcbbkLDY7L42lp&&i?X*l?AHIU{=|{6984P}4tz=!)jRkMduT z@e(d^?g1BI;$&*+Z0Pbo|1ulcx}wkV|7Ezxs9!i8u%dnEmd-X_j+-fyb+up%ndf6u zx@ekd8-&{2QZ75vo^OmxEjW3i`rX5I3g}0ZyrFDJVlvwrUu4~EK4z1+roNWPj~R)i zaIJD*Jegz_OQC`<0TzVum}X)8Wr@Ry=2~7iFTkl|pdS`E&bTB==G$>Gv$YIt}N1f@ppH3w?F!MxW`;Xa$y!KT-dN;0a`I%JGH8}Szh|fSb&4D zf)BZZI|5|Dc zdksA8ySs7#z>hjqoZ@8PWe0IuE-o;!;mdd$@tBg6%PN3WZ2@(D1xi<3N2Izqws-i8 z4iUsZoFZ`Zbr0syK4uig6u7O{q{K8sV{}2^S>ez|0;bCAonqt*0vbAk6f7^E5jsIY z6(eGo^9@Gw`O)2JrA0`Gv1eu2J}1E&%rOKkp^e}VfE|gt|Bvd&z+U_&vE*!{8gttM z7?N&=C}g_S7(0(j^rp|-lYC-j?%hiYDRV3vGRipAP0AlV>cd~5mMPfA+`jW;PU)gl zBYC!wX0Yt%3KkxrJ!)qLtpE-lPL9>`r|(O2fVU|w*r0MR$pS>^q8x(aEQLgR!san5 z2^m}zAYe%6BY(-zIuP@`>A4Fn-b?9MKhT;`@x)}l(rgn#GvP?iBa+4XapC0P^^D+_ zG$F)jdmkRDSoqgm8W9I&TWX>tU7XsgnC3Znh;AjP${xP&+j=3 z$qK{HqSRt8xpE;5?5%_Z31626R}&_dIH!RGK*&OPq+lQ_5}wrwq3f2OtxDL0M^0V= z|ivDMpL`nb)ZnbHXpxR-5*kAQTdc>GQ6KOIV z05*fcS9yUc@U{)R05=IO6aO%SSY_V@LAtf;g4Ox9bR93)^~fH| z;tjgAwo_k?dx`Ur;E~zbRx}$C-9|M7ZR@T=x(Q}RWjpV8+LhJ$H>vYkON2A5Hv?up z0T3+bipjx}>#8wt9u22X`#lo}n3)*RAs;@8I|B)!LKo4G;Qd~9eImQ0x8Z|lz#QL9 zT31GrSV?9`S{q$QI`c_~d4cG|2RVO*OV*q#e2LqHIhZuC$*K@duQ3NvY(&jY<5KP4 ztFA0t#@zHq{7G*e^j_PUzspaPb~UyU?~9fbk$tRIa)0S*V0%K5hm^&))AXCNhqYGp zeJ#>7b$fV9my|NDuV%*g-Mp)^G|XIqmipCrxqByFoxYZLAKNoJ4xg`%Hjq6b9la1u z(D%t~UhrytiS#y){q32`z{AzvDz^yLkE}$t6bCWtBCCHevSc-kgQP*$ti}G62jVff z$NoM2hHZ#lsKG+`k9@*HYJblBC!bQF{=4Gh4gUXIagnS#@lQ3OZC%hn*;6)QpmWFK zVkI&~mLo%r5=+dlt%eFnCQV^WE-I*G{~GO?A$xMeL0cj|KFD(3ft!ILLQk07e>&%s zhE`5ss+ZIpc6tJ{o{%aUMT!tfiNIr1;Fljf)|3R`P!ZvRm7~c|U>IscbyJ@}n>#8{ zV=E7p93vIMR0K+uP$32dj-$}yO++ebrJSaiUH(NH-&rN0nI4Z1>gm~j+X=iubU%fV zw5e4WFOEz;;k4Gsl`F+}T!x&b6f`c~dLE@%(cAe^oCSsT_&lNizVxuxspPdK$Q3wU zx{L;lpx#>72kwYrl1f&ZAC^s)O>n;W-KIsFr)iD$*%7CIuXM%PvML3rpUwfiRyRoizcvnwCBS1qb;U`Td(w3E zXixOXl^2P2s@`i&{ftxc1eh}*s%i>!>six@M;(-9zf6fg#a9ykL|2?zFcvX5!{5xx zq6g%89{v(lU2WwY;=LXe@`Y;EV!$ZfeBIGm&Ev9N^2#W;tk!>srIrp#P{hV3N&*FV zH@Be34;q@rqgov6^p$POjFvvxO&#EBzpQ}8HM~^H?{{ywnQV3sBTWclc#GlQ0Hix2 z+#~Cdg$ii}nW%!_6C+6L3_VGW%zBJ=tJ)X+m8RuHrS#K+jd=#_yYkNX^8zWqE&Lm~ zP4U$fCOqEHsA7k33TK8({}OEa>5KrD_ZyuZkaEKPUl-hCPQ_t!$Z`lTmnGz*mGr=5 zw85bhZh4xS?iw51J5_SJLuuU{@XMd`!TO)k2VhVVg|Bfca-O^^VpoY^#P$l`4WS#r zWpZe|dw-X*EqLN8q7ubm8#L0pPg~`7^S`dHxhKUZQ@_?0loPm1PBBl zof7A1qp76SDA$%tUZ$6`uV%!GYVH&qt@p1TkK5*^T#wT@?f1`m>mV#BWJy_xfZ9d_ z0<*7t^1Q3+8B2L=eK=MaNGR?7Xe=%I2{+#Q)~LcolC7P&W=?G2DK~6h5Uqcnfp0E* z*12PZlFm2sEPM+kN~qI?0^g#=4e*AV~tMpCKYu)uh! z>$o5=|3R_;gJJ(aQ0y4h8T&(4wC)*wLsQkP*)d)S97$vM_3ntK$@8z4W;qjo78jtA|#Mv6y77@U!em{spY6VebO!HkZA1+tdYKy zOA2aEZq919s`;kytp{P3^UtI1&A`h|p)qM4FSfXp=|Nv_dhd@{S5Dish-E-}Gn@Zd znq>0O_mL|3tI%tN%j0F_+*9(Eoje{(V`(njbW3*S{Y5WeaWX~)g&S1|i;w$l7tY4d zO6+~ik=_VyW4IXBV2iCJ=4kwKcMR3Z$)V2cLa-llASz5a0r0s?tcmNoX+IW1TOwxf z{$s()g?D|~zGtx%Kx)z>5bgFkhfG#DXCW6laBE?2Z+~*?kc$_K@H}9!O~e#lD6Wy` zzus!UOgjWnk)exk{H^cj{j&ueyc@aL@!RVBw0Zc7tL6VWe!t+?@A`CmxJ;c= z*VpOsaQpg%tX%e3r`bLhwg~5eiokT*V=|J)3G*G4Amp9?N-LKR-xki9zbAb%<^hGN z(lA9*A5eoEfF>DPZdU0x8?>}AB;&lcDNWhn6MF^3gc~&K0$XopOtSz4`wE_Co}lzg znO-8)=~t5__S&EH#FR(viioWqX@DyoDNM=k#65L@RbLfF`kLP-o;=J1k+RZFRgq8eECr3`NhMzl zenb(c>W~N7q14bG=-it(v|{f~a^9=BTAH1P1C_j-8k*gj2YS}dei#i4nA$k;04Hw4 zQ+8IJMX+aQeAeta4W6FC3E_#bqUbUAUX6% zPJJn~1~N9)`l3{nw*stJqd%BR)c5F-pXig$tfiDeYVy$crqVJj#31GJ#vn^(!-0I$ zo^{?8W;l2;bmoOvWb5jniRGGk+QApL>rDJ?(Q?zF2}G9T`;V4XD8LnNuGcz zAZFWRqYN)})Nk8|ov|ngN5m_)hrX<+{Tw(jaJ$%+T@j(2QZU=Gexm5+c->^>9%N^& zsZiLUr9CEVT@tT~GK(+vA!(m&%^&kxE7!{e9d?^i;gD`n(hfBTQ;1)<@^vg*obDC* zQ5}EmI_I}g=@llSbVQP?5o$h?UaXmHZ`Ei$AT>O8BAK^<9FD!Y>nk{7?9_K`t4gz* zh=X+agJ_Ci=m+yun@uYj{JVO9T6m&?dEx(CDG06Vv+Mj*3i^=$iA&=FOzkcHXD<6+ zJQi0K+ka_kxbJIyLA<�=QD^_Ns|4INqvWW*6lOFHq7zfCWF)c*+T`GGGa?pOKXW#KeAPTJaYZ%d zB*vb%0EK8&I~s~{XG1=whn|vy@h(k;kK^^t9N5D$*|(S5Uk}V3pEmy;!G_IsE53AA z*@o!fhfOZ&GB|dLKJ|Aydf(*p{3&Nq{+`({Pj5?XoP3Qxo8_9-u)j-h0xC>#P`ff@ z^>grg(#JMd0HsGg${4YLPZmW3={iwSQ`h=1$^~^g12>=G2IZ_f%LLO>aq-dy)=W8h zIr&)gvCQC`1sG~RIZ>lASBaL6hW=-!S_%BW({!I>iQ1s%H~}(JHHvYo??RPAcS-bF z2SZaMGc@;}fl_m%S}OnEACMVZo4-V?P&Bk)c1V-I?<-;^U9GJEB;r6ToY$MXO4!;9 zU(T;(zcmUP9YW?Qc_B44G!pY$!(ucn?dAj$3xmB?gQ!%p4~d{Gsq;g0I?m=q{s=88 zJEaSis}&$U=k#x5fl23kss^a;ik&PgT1vDX(Y2SJR%zofThtW{LWu?Pcx{>US7Hz1 zc7Zf0@+6hw+j5lk~_S*xn^p;F;8 z!q-rDiv_yqlv@>D7;oyo4q{!Wf!Irsm7v&m_0tmu=_m_*$d`z_)S9u}6=K?h0^UA* z^g%G}ND#}zZA7TyBuw`b6F7Eo^9g2Cn}%MRy5OGcY$eqIL#$5W^R;U%EcPuzM&)CG zr~LJOVu%?r(^ySbB~(*!F)M{s8C?y41S#0E^WQ%Lbb5sw;u|^hvmf%tt);CCJqv$~ zs_tSJZRT!fowV!-Yxn@fn+b1-q=&|JCOrtuN(ixGy!o!ytWNlB-3^~S_$o*NS`Lk3 z7Y$YPkyZe_%D2BEvO(3Zs{!1Y?e5X==>%g7iIDGVOkbtJ7M5pU4OB+D5r zFvwgF%$uZS!YVT z`j@_%CrJH){nsrbn+*&P_}>sk%?sxZ4uqeap1=b=wfW@~!l{J@%aVnXhPE|X_jb#h zpsR&Z6kBJK2(1LE4C{{`LVi zeF&adPoev}36mj)ZpuB#$fztp{}fu3iJ;*P@++|VISm7<;$Vv2IjrOdK5F21wqp6a zw;6qb-@dI19`-t$DnX2e4C)cx4X-{`UrPEoS+bQ5R9^^oBK70%Ma1&>FW!Igsc;{v zF>?%MKTkvUB=?ex!j+4?x^UkigUrS>az-(`Kge{uAn9{=;CFmIZ&&w#?3c3xd$6=X z_$ka^jKplRG5gU_6MR1hsVWXb`u0guM{h11F4I>JRG(X0TfWjHKRGbw*IXxFU0I)O zpU%@Kt?#o)13Ox`w8=Z47U@IN4$n7x`^69N!&|vC_;inP`afd~T zSw|yXX+_S!&{@geb6}xH_*}#A-5J_f`wk6A2OqJM-HQwbVo7?&Cm@I!4ig_it<*2n z`x|a`Z?qh<5CkELM_?70n0T;oq=*zP7k73xc4x)P$-$}dUYQ73nDcOwLd2DUo8Exc z%=2$jlAC#|XWjQZ4e2i6McT{+`te}KetItw#a6e7{7oI!ipcHfZ@pi>n>Uk zyY?)pC&Lf^!!5r(ATS9|R(0RT_a`ZVO*zx1+?Hs$HWYn@r)~NEHM)^Wcc{MOI$Ow-1f5*y*WCKfeAY4$=^``iTc@lhh*k2W+?gNv zq41aZCJ0^b1QZ}}5Gl10fJ7eO&we*6JN-qcdcB3K^$-G-#&khfF#kys*2>C*@@T_J zrfmT7;0le1eGM%gV6C!CK6H0Uf49~;$GYzj`7q!!Ouc{Cs^#-Ud@fz`irkq63kYrh zCw^8}``?L&qykzreiILD*1r#N#a1#65~zdpuKDiX_}gF-SfJd-uj|v{e8`B~8}5b% z5d3HkdHMsQ_n+68fij6q1OkhvjCi$yC;<~7!O3`)Idp;>xUWx7ZJRqAehKEibRQ=N z*W%9A-oQC42uwAE7|^rL+xH@Z=Xg3hrD%A)_Y15>0mE5)slY`!z(%uqJO{I087h7Q zjXYN-<{$IKAH!I3EPQTlPJbRRt~VidzEgL{)~f(jcgTz7fnO;w&FwF&u^u5Gr@Q~k zbtBUa4Uf)L!7v}S1;s*OW3NZ%!7b|O=n7qw3k^U?r3ANr?XduTndustr%b~^0PR80 z0FMr{l1_L_V3?8`=pZ-cn=sBc2078yBt}2|#Jv(C*TqI18`H)ED+}mPQ(RYE zq&B9#uSbS!`wj`$x-sMwS!suVi<790B-JTh9oCz=C!}ihe@r=c&{~uO!heHKP$dWS zmWp)s(!b^6{B6>zTvkvU_HH!Uh=eZfj-c^_BpyvLDwud0*0?2$XfRM##~<-$y+u8+ zbjQ{26Oc_Cr9){ym)16LSPD6+=FymlE2vmX{>tFthn57({+(7w6k%-xzu|HF?xQmDRqOm`l!6mPzX_BfY!$)xWU85KD^ul z-sdG#2>-rZRVwZsrMXSP(0&L&!*4^JF%6 z%_M4kd)~N05u?t7ZwEEJn!tOdQ{(m5(q6VjYF6%hvfk|jCMCgkrm_n#4C3aC11_kV zm((@Dz!c(_xB8}uxVBAPKUWt98L)JsIg=BnkJ!x(+9_9Y(X?cnQBWiJYqQ3-eX$B1 z))*4TfBm88>9YbkXv&3^uCRIZC7~LXFfZ^tPe}lNOE^o-Qko)Y^PnngLTj=rVXmT} z%;d(5sXm;AvUv@W;hp2EOz4~JMO75X<9^#$1vl|M;}dhU0~-_j?MILDWq}Mm=kjG*3U)geHe9ziBBU!>u+I@X55( zwOMgy?Nd$7uW~h!3lw@6I2*a5@+C zn_7{qW?`hROHR=~Y!3O&&>a+z}`D@5tY;gTSN? z;W59Uafc5QDKnXxM2bj1kRN@5(jjK|4a`_!F}2%|v!w0D=vMIVaqs1wCg}KyRJR(Q zXf;TAH#}b-BLw7KZFN<3w{&?o1|4L~W*|u6N;<-{wE;GJTzUfAZ?X7*7Rz1iJH)u* z9iNfb62Z?X@I_d>k^7eBlAMNL6??Q8v9bjtrO*EoZm>LCPsW`$j^{XO-igooa`YwoAI)UQ(4~d zR!5#huSK5HULj*^>xnv-9SVL^|pOwaTx_OxRp6PZj_xPTu|39KgW7mZ<_Pk$(g1WAO{Zh1hijKF#<- z&6q0L8_l^&?sOaSm95*CRSmb$n~0nBay@pBV%Mis6uAb0` z&j2&78;z86w#L^UMF?AcM>5BXB)<&uC!lNODaq2%InsnFd-=Tt;I_!=zYX^`85@PBTsLQJqXDx*s_qCo_rjg{mI#fK9y{%)4*@|W^34OT zvga5bCI3JUmd>CVl#@{h76M-^djOkOu^vhsJ?16_dDAM$04p{Tqz>DLezhnvoToW2 z%QnPB7sW5UcuCh^Duff~h(QiqTbkO3nR`xYWR$<}x(-1zA_CFZzEVWy!oqM((g2LP zov-;>hZKKMN#`hqagX^JW3-F@90T%jVAgk-hQw&Ab`qaUdg}mXrJG5m45sPN6eDac6NteWuv+=?Q>@;0fsR zc+&88`+WUaIDx7b0UJ87b%Fp1!WNV`l!SCFIrJ^lrftRidcw`td><^p36;VZI*!+& z-V!dBOu7dC-nlsV$wv6;p4oW&=_2@<{;_v{)x-Qb*~KfE`e^AGR|Tho?;lC>T3;+= z6;@Y>F1s-=dtqMe@H}5~X#*Hq=kZ&8?AlZA*G7~RZ2~b)=@h41^7IaeY$W0!O5+4H z85y@!dH?(3lzWO3Ll)O*Y_}L}uTHf1&5D1o6{uLnRxDU=J!w_b{*JX_#gTM!pTKDg zztX#@@ttL`D&Mf*dh)I=C_&(=?r=L%@S49;bvbkT?HyL#G4O=~4rtN7E%IHoL|@vp z#di^CF7#7eBXbGvmOh0_PQ9aD%sJUL&Z^|+_jBuab{!*Zib{Nla%O!3Q{*Clg|^<^ zZvyr!ha%=#@z>dBc-OwdZ_3v9W3-yWi=}EP6G#Y9>br-Dhf~8bAQ1!FWv1Bo>;;LX zt`g+h9gQ*N0p+jCZu4lVdE>VI1HVims;=6G&ppRk-OC~<0p_p1F z*uZqoqVg>;FAlvGRq`!^dO^#;K#;3yhO!gLgSM9D_7}xN25kOleku}es9B@f6DH~t zX6D*r+tM)R$o#xtwtjd;n407*mb)tZ2Vbg|J%AkfIo}_PlKS|5+@9wB{Y!=}UhX=( zZcmsJt7PRi_Wqdo$W4KBfv8{w8wKSp{B1%70qt9XJsF~-_^>v) z95h>~zYesXz3f-n(+?!q7v^$5?>GlDn(i#@xO=W#0ZHu%7i-OQe{evEdw4&zP+A%% zA2&0axj;d|P_xYZC!~!(tr6iRrf@*bzP(odU3`Hc8c^W3cyo@wke6u3*EwF8eGf%j zV~PoVYmOtPd5xlXX_rA1^uL#nD!^4IxLKC&KJ+asH<5eA2m@SbhgvvVHA=Ff?j^gxQ;&poXc?-0VJJwYkOP0t=*N%vRx&Ai*YHLq`z z$umf@bP!R~KizGs?vvb(nr%KCUqh}dP?ftQpQCy&K{O2LRMEk46osKPem|0KxR;^> z$h>a>l}#^V57M9je>wJICz%VV3!yy|qmT(d)+kztNf##mhCf#E0nya3APj7%qnCFOm#fz6$3K0|y(s&&EeVAg4C*={cSS>O7Ib)ugZ~suefl zh-Ek_Mn$F^MKbo@S1wnT-{6_8AZzLh0jl*DynD7SSW_+zS|y?{0$6x{CAU+~37QT0 zXQFwWgX*(4E|nRZ*^nevhW+NUOu(l*@7h!n=I$w0#%d-j!Tu{_92A__ov~JmM|heV z_8#mbw~_pO3=XS~0Lg4!`umVNKI+zYe9+L&F&zk-$==uX?vhO22XEkS3d^J*Du9-J zNGBp=%~Ob_d~d5mFvCO~=h3vA-ho`?eDU};kF}0njBay1Xm4e#`rytX@t4qaePRad2n5 zFE6{_Z7A2xdscRxxaewHwI8<01n?V?diB!XXqYs#9a{Lq(pvg+%^uN1o2=RoobK1$ zRCzwTM7LWd^0oReo>PiR!bjLiLII3*YDNI-syuEXe^((o$`dsf$0b7h*C(UP3uLyR zUnkec+TFQ&;<;Kp4j%npt@2zsF4gI-1arTeQE-Z|>^n=A+_)Hr7l+dODu7!|(@)4RfhHQGXl zIKOV)8qcoYgmJ2Z%x@!04fpur6_bqe94wDd&18_`Ii4k+83qF_+Uf)aebF~@pQ=74 z6GUNyHK8e>eovQ2l+6y8aDemK^wg~&{aQpsAcl$T19SqNA*df0y#>|#7LcT1RwxX~ zZdzl_?LG!svA_)+45%^#6^5c=1+pqGnJdNl3nnImyoY&r7=@LA%JyGDm)zbKr3LT~ zDCLg$#A=gY`-{J-xynJi#S&|^m^sCNll2Mzs*p>!Jx@`6L90^7S_Yh_@~_ko{I*Kv z2Y5e)4-^p8`TB4Vlk{cG%QR}mV6PlMwSyZLOVTR0aFh!c1Axob!;@98^Pe&7pL zR>G4Ci{AVA^-~H;rjlX_67a1DN7S=d9k0-76g;I~Z6AorUpw=or7q2IwjdwnG0~!Y z8Y@?x5ul$ct;|R)^f<656+(+pZW}2bcBBJjwVvPPz%^AGH#vr~1h--1 z5-yo#1wOI*9Dqc3qw9N5I!YN`{T;}f;vG`v|Ko&!2)U1|u(4NrEL6|8mvXij4%{nRBhk63!BpF6oL+}f&elE4yiZbn< z*w&@=lVH29Esca@e^rC%Bu3p(nBO$&C?=#SQJGG8 zxoAaqsE}5T&HJIvD6}yLcp|}vivkmMuRwq5^gw{fEr?OuZ;o1DS4YDREMQR2C#WBg z72TwSycVl>+3)BrbolNIRbD{n6UU*LJP3kOpqJL}NM~J^Q zEAh3>LIY+p2OZ`4mRfaktaXx!zb}I?VF%g6!H~ey;Kj^vRkpvZorrKj>wWts4(*7l zKBfav6is3SwoOW^cLgnb3q8kbjNc?AU4G5ggfn?O)_=pzqM4J&Bs47^H$-%*h|4on zfl!}GG$=UYX9rYmJAoIg&@rnqCQx#!*o0xF8~_GfGSe~Z?&BliS<@on^%8QkHqefv znav}Ech993wIsDr$;O2#`mAv2>P| za|2WqKV_zQ!9pRwIk2KZKb_xtdq74ici2c=k7(H1c>9!1t+w*0>lG|bjX^@lBJT-s zs+wtI)@Tjdhy3#2@P85vI%oxDg!_JT&Sat5cP5jE4MAxbh(&4G5H8rZI;x^7>E*1FP z87(t|f<2ythDds+gNK`p7AM!GWlVUv*Jgk1-#?IH5C!kTF8lzvi!)b)R`GWCQC^g7 zjY_oL^CwH4jy`S>f2i@vEuRm9>$xJZ4zI@E9WPL^LC3n$^o1l1oK4g z`vU%0PaVjY8F11z2yf2A(%jhZO2RaV@1yCUx*xI5alm!PUmKk1pUx3A2e4ZwGD6{L zZ|2SF<=(6!&<+dod;I3JNv%>7J_48kH()s-i$|ki;h6&U0aJT_q6ov$iydev!;so# z`PcFsyW_O&zO;_0f>Z_Q6F7zcysiAuhNMmMoOduDK#Sb?q=ET9Vm6>{_M#+>#M(xo z@NSpl#AnD4`il3Ns5I+A*sX^*;^40$@C5%%5VZT^C0!>y^*-S8WEHBsb%q9pAk2GUal9tLSMyq~*EYJy8#zhe{Gt$+a0} ziFrY1oROAi;0oal!UE9uRK*6}KMtCs#FECFJ)cZ-g0Mbin+P4A#4lK3`|*TzrDCp#rP(r_D9I zxphE14UCT$l2ssB891<{>7g9b=#^D?fd;~ z=`tUsr*S2mv%e$f3B#yN7;EK9z(0Jz`wH39*4MkE>jPMchKcu4WVqAhQcN-rof~Ul zR5BsT0{XgZt@-UxDS$nY5v7u4hB@O(YI8P}*{N>`(lJ;*&X9@5OOwh3yWcTu>0Scq zg4u%E+iJCgv8Y@f3-5&M6YV0P)JaOlyFqUM?+)Z_WYmZ&XcW&Z&TEI|V3%R^NJxv& zq#rU?xc~;x%UIHPz(3eT?17G)V!h22A>$_?Mv^s`T^^4-`x%wW% z8CDN{?QiW{W~cmzN4_eQWwvS!vq z*-_{=$E$7|HT@6lfwsQ8zxzIL03LWf+6v^jGH+ub{$rxyT@0Hk;TfMCsa9cY)a}L^ zydU6q6aJ@9%GW5dorUlnWE2y~30K94gm+R;l`RP8`jeWZeil&bqqxNBId|ol3aRm3 zRFO}1y5oLwL0j}+{X0|-uao-?1>r1d)AXqBhG2^rX?5vT>VzyKo7oPbkM&SP5@b}R z^Wht-$a_IV6sWC=i0$s8VeggjP7xqW)Gfe5od8EEgI~5*AFAkxcKH)^xe4E)HYxMN zNkEQXiE*b0QCqiqhO_D>`=ssz>ga*@c>*z?d?TxA+`?fR)ZWqd8=KC3BXKsewa`>k ze-*p#uuef!a%7UO=2+5T{l6wU+LFs1jmhp|_X2vI8ON~CBRG@mxwE?SF8rrCpcjA| zKbAB8j>_!nfjS2Pn-t3O)59C{a`B_@SW@GdoRwo;nj=2EhFC{uyGShG>ito)Xls)| z277Yrvl$6Dav6*n%H+V%VCY*)ov53%zxjJz8F`(|?VA-MdzK5cd4uPt726zH!%eB9 zjVI{6uEdoxs1)V0K|TfC*-r-d@-g7I-NDOeWG3bOA7)8OH{R^I;JLEj2NkY1ai;F; z^OsYSJmaai`S%jMC`Ub*9UgT4Lw997II_6X?qNe98kh9XAt|r$V})v3oJGQ0T?pt@ zc)yVn@ZI#;_b8z;)c}zgH?pvwSX#=~)gOkgERhc9A;0#WVla_d$V=KgRgwWvLlIKq ze^M*qf3=X1nTru;LAsbr%N2b~g64qAr+&A)I7N{e(iEeW_i=H=lWM*|D-v;ha(s2qFbxPyg z!wWch_g~GWgxP`DUZh=_WH|zqz-(qCV0L~

iSL-+$&TuK6r#s6hTr^yh}rDsL~= zV#Xl!qg2c@0!?6pD`f8atnW2zq2UA-(dxWyVS z-&fkIb2k=bt+rHQ!7mN%wZ6+-Ew;4#vtx%Ln-S>WcqB6HTy+^y8>#{Tj2$k?Z(<}a zd(_{bJ*J{$;pR;#XP4s}bvO1ut`H6Gq(I@$P>68bXDC4b%DA4G$-C)+L>DdDGgl>Q zJ!^f3cTKwUqPi${ppNt#v!Hy^w=eebFoti8OC2hH(I@{ZjSm zkz0!X$ZDPjt4ejLi|z!JC60sx1b~Woghm?$(`{j32sI`X8dCizV_BzdrcZ(hllx2M z(hc{w<(Nk+KMsHQgq?i>Tl>n-!p6g(4DQO%_V7Z=8*$?pzdpB$yVJKL44sVtYA1sQwCk|$UUP>v+!@`9HykCG_eLOY9zTnWfJ7lQ~)SN zSMp(~a55p$Ocpf9Z$C9WRoki#P=xTX2M|P&dIDmWD|?}o1Ds2eg<|rP4lHcoiDM0W z<5f~(r%_BgY`vFM&yNGKVHWW$xpuA&GyR;doAO3?a~Ger$}`iR+k-7_eecW3sYKD4m{9!j!O$$imvSJQX=U-8=uN506^<- z9#M(#pC?1lf>MW`!Sf1y$C_$!o|_~EcF-oGL{%M}@^c5U#Mfz7DYYr0f01KzBN72K9@TIHX%f*Tepf?MnWmZ5yn){r-v@%UgPO`Xl4Dwc{m|0RFAwNT$tz3{){ySu_> zp<)T@K6|jx`8;MGhO#W8%6_;i@PUNaIIz%vzvm-lC*yr8H!@jZulqC@0vtnQQ_55* z{Wnt|99Z{I(#gxnz~Dps5_4w#h9F9Ho8ok1ryc-F@VsqE*HUH1KB5e$Z4V1VWRy%4 z?pg-W_0X|zbzeRX8XVVkf2|$po9q)~rBFhr9J!;%c09bAT>M?IScF?GoB9;`1zYbP zVQ`(Wl>hc1rO3xw7yOsTJ-6=4|~mAF=Wr-b5TzXKG6Ki-4lP zPj}Dy8iM$X1z5(lC+;9ALVBlw)LE{hyna~HG3A*s2`F7YF zT#!Op6MX@Uistm+I-)@!HoS1S#DdwazgNa+0`pec?}e+8jL3mbp^w8$OGiWr4i*8X z-F(iwY}h|yHVw%@I$$P>{tQ?S!(PeXF0an>vVL6eoLA)_Lue4lllS&Xr+OXMl zC-l5oY=F(&Fyv$ylG{Oatyx!N_C0{Z5jyx{=QV>0;hku~pQATVau?k=V>Qk4a`1c1 z$C~a4jPN0TKpeLqZfx^3Z2E*0Z*jBHzwu;C+}hrK^;k~}4`cnEgnhADZhv!Q3bW!v zMwbxxOC)4xG}Gh)Xvx;;?%nCHp4t#7n4vi%^PvM`!^b4t1Cf5sZo1#CzaikG>10!$ z;&^|`_w(tU2+%v8f49L%2-Y_UiE>jz*4yL##prQ&duRMHs7J6iCB~1B@8%cVa(VSo zyZ>^}<;!+mVO!(*$@qG`b+Ld5`a?WS!=c87teRMWrLIxEP&LqJ=gK^B(;k`j(Q!n8 zW8UHM9l&q@F8^|WR)M(u-36e|MY}IK|JE6G60O?F{$}y!=lFTWVX*f0E2G-#S-R42 z&-@157`?gHNUdcpn>S27_M)PQzKlrN7tu4|ms;1U?j@y#JHB5}`c(28?4O`?uEk8m z4Z0-1;W!1vO$sl8Qp+FjU7aXZ5ztbkLQgXQo`X4hMUTo}UgdI!XXPJvkqpa8f59}s9t zfBQ=w4uVb4nLQ06;gk)ihPlje*oSt}Egr^bbI1Dy-A*MOxdgO!kML6`t1ghlwj3yt zan?A79xGLGG^FQ^=m8~sz1l6uas~FwX^0(Z7758ze*-O3_VJ)+Kw)6>MiZ5GKLkxU zctT<1A&5+7jCNo97`ya+UAxMpR7_i$E*zsI=^ttxtP6gG-C`(o-lQ~hr#kW%f(60+ z4x=r|Izw7rSD%GjGXFTiG9|GM@r;l9G$z&#oFO>E%9of8@B@I!2OaWpTNy#7bTv8< zKu3#LY73g+_ZGzv{KBJrm)ixm){9Y|_XXX%TL*>su25B|HXva>0|12XG1LPh zq1Kcg$(_3ST!4U(^SFnuF&D?mYbB(1^B)I9jLixBWvPjcm!Qk7v&ueCx98)dwWtL| z`yJujm&)t*&I^#0tA6z2y_1;uiTj%eZrv2eH-ggk(p%jB5d)6LWy1WxiOCU@@AQTX*JK~Qs2NQ}X$jTMk z_2FoAyAU4=2hwC+lU{bY9+|P>1h@B%64rhw4tSuxJ(^Q!%1>Y~6tTpJ=rllxKIkZ( zw^GXGj?XLq+f@ghYQrh|TSfm{R6jzc021i?Z=a%ZfrzB`x0NPFm5`bPjAlL>bFT@k ztBmV`f_L7(kt^~jr2><*!&0^pocq7Zy7G7^w>Lg>2E~k-vCRm>7&{@9Zo8$jg|e4K zi*7e{EtMpUTuWIZBQI`siHjIn6D3-#S4Cy$CT+F~MN*+#zcX`ww;IiRJgQ!;(6uLl`l=}6+X%lx9&iYl6!JX`g6rbeYlAN?h7Gb&1 z9Q>xrmM2JGC-|jCjlUjz73ZwZ8~r@`l;B5m@~@s3#jO(9uGp&-tbQ3Ez*Zl;;c{WpmEhp>OZkOAIjfI1L{rTI72ayR4gA6> z`Ybi_MVhHyf;*hZ&ZJgw57ln72z?{lfAkL(U1@*IYlWWS?AtdvK`T;Mct37u_gF+Y znp;N^-9EGHnLh>RbWd|zhvlwc-NK!p7PdSlw|396k?D2&_I738x>K#KeszP&twRsO zn=HfMQKEI7!qztx_0g|ZnVJwwEw4Up-tBv3tV{Ml($|_D-3EAemS1onqlp%cr+!x2 zr8*w3c*-BY=lrc3jsYR!T)oHQ>-U>sHf370(SD->8l|?it?8HQ7`HOcnRv-+(BJbS zR3rFN@_qL{(OtY)P9D>~XIsCa*2t^(?G8?~RdxHxRwA}`2C=>ux(ybk&3^D{z1_LC zwQh==a_B{8_r;^4?9*=6jjq7_C$HKgtEhYReyfhU7Fij7E!yyO(Bqh%m2n%X7e$&^ zb%(6g>c~h~S(K2O7{!pwO00JFet$o;@y{);`OVc;11_0^{VtiE6?u|HSt}xU_iLNp zpH*{FoNA{@oFtv);ZJ2!)q88WX@3qk_-IdTb#YM(iFg^pHQ3Ci^X@(0{@6z2p3B(X zc?EC1KQEb`edc}NG|yY1$;?+r-ob8kp>^4Z$kE#J^B6 zSz%=2hVsy*SFE%%nrnLPr`H#k?e+VVvw8A`+t|E1yhH=TV)294zt~ijq#TQm%AX$I z(O8=iH4>cvv5R}=a^t(2MeYf%t5@~oCQ~=Hc^`f4Sa0*t0v{AI^zr#b*nqK!+m|Jm z=px3(x&c$ZYtE#lg=ok2d~lrJ7|L#Ujv#u)_DPKBp0G@byuRGi=|DQ2@K4tP@+nL27 z=I9i-GN!4=89ticS^7=2i??VR4?Ph7d^uUpx7F)+#W(-B43*icvV8RxsP7~FX1(H| z*Lc@m*_>M>n#j)lC(?B%&7Gr5HAP=98M#O}%A20KDe~MkDv#G+d5p!DQZ4Cl)2XQ| zo{HJ0qxpB3uYo61E0kM%fp@yl!Ftx-tal{x9#L5_mmXgzEpz1T(YTPE9(U^TO-$2ULdc%-$YH{R5(kG(>^ZZWM=p@sQgIaIWG*0!vhv@Ob=T7To6rh{X*RpE@R zRz~I0(uzsSZ->vf{QTFpayF;#nohb$Y1Bf=G&|jNy|To3-l?hZZ0pOWQ)hE+xm6cS zEGrZmop{ZTP5z3#Z=!Tr;iiw5HQ5a>RJsZ`%f}@nq1gW>ka6Pqi(_T57;yeocR$Xt?uFW-wr6fezLK|P3`ck8A5?Ph+SpQ?ZYUNNM>eIW8Ad<(ROfMN zceg}Lvwj=Tyj^0G%fajt8_oJXCyK1`RYB*Qb%wnQv+r#sFCEBts64MdBX+#LSuZg7 z#72=X^DZlW!B2`3F2xRG(js6DVJh-(>=XegT@Da|Q{TuF^Iuw|AFAv-2dDm|Y{kYz z!9qgydw~dzEP>+pcm=(qeS6yaEvHY6&fZc_MaHf z2~^>HF-d-A;D|AS7RH(nl)={=xW$QAz9JHa;IH z0OfMTR}+V(gq!itO<_!>KvZr{e}3p4>^{f0%j6s`CX;{MDcx#;3g=9*6qY3pSp2r? zSc5oF1dFbqbtlDv9KXpr%E^BktP91G*NAjr!*wzNUS&eDBuD^dyax7+2;{Mw5@4Yq z3ZX7}LPl!4kr53dkoo2~=1GLP81F@_lSE)5C_$lSQbJblJ{5>c{m@(r=HXi{3iqyo zH7ulD*e_6){;{16)Q0VBP((L~aF2Cf@r8Z{L2vj^c@FV!680+zn1SJU0&NbvPZGmq z01Fdr<_rl2aAaD*!t^D99dP}EeFQ#80S6$t2mvo?XduM|0c!?c66=tL zYpq(zr}%&+YY=Bl8**Tx%)oXFL>ZR>_TaiT0wKnb-6#w57$XZ~4R=7~I$7w0jWYra zIk?h*I|66S@g(e|9JFWRgDAstQ1;bM%!mf}>-`@7QywdEf_58dP)uhZhNlBxAQHfT z%43mqxI3Of2n^C;cnyazBYChJ?2F((<*{;kD8W630Br$`*(VNxhy~Dfqj&@c7XTaJ zmyDdSQh=QLR0K*CphtBX2#^&ac=|g6{)%8RQ>Y&Ryd%gEDo^eoNEEgRkmUCVKt(C0 z1hXTZ_kSyiaA&QRU~okRh?1iOeMu}r;8iM25rqNSekIr@2Cx*=-uD~BbKjHe%K1|A z+x&Vrn#F$6+cz(A0v@1N$+eQ~g+kSP3GpCWkK uOt8Rm!cqpn%0=-s%<&8KeS;cwPD>R#sRs1P9ykx2KMRN3!h+*faQ_4Pt5)Lx delta 28533 zcmZ^}V~l1|*R@-=?JlFswr$(C&AV*dwq4a_+qThVTc@Ar&MPY_Mfrm znqyw$DFS+Y6sleb3v{h?JxLUcF%4T17^^83>sISrXk#~t0 zfe7`3u!9uAO~`-Yr~4r*!}nD%|D}R3plN+OBL{zWW=8rst}b%1Vr2TT1kgEl>ghQ| z4k2;l(n1riOJPhmA8)2<+BW*mE_;nK-jiJ?z(*b(zLoHsj<6YtB)5PA5E#NMGc4CS zL!Yep`}rx5m`o%NEe@$7YX>bU8g=9Nds6Ic+=EqC8kDE@mpcR*$>PKT$_YtpE}FB} zuW?jOJ;M|>m!qe#-$A){>TI&#l!?M&8i*`8(RI-hb5(3M0SqUL2*>TdjgLnh>|ybC zv)ryy^-L2IHGi^4LGB3h0h1E%g1lr`$+2Zsb#^S13?hy4=CF1p>gIMn$USP_E>q7Kt&ee>Nk;*;Ugg%>Gn2?szMUv zPkk8bk?$BpHVW;+EK~gvOc7M^H&PCZPYD|q9GD)h`{DX|*qa_j1n9XWw42=6R+N~_ zbFBrlG;lT}6&}BJ1hcj@6Yv~AVX0~um1^l?vt3_YyRXUOLGGLO4868)dkw~{$ks!X z=nspb9JR@)W|?rLdIMAq9?5eGo}8*ajh}hp`#hSk?k4JD3{HOw zl9E~w1~O{H06uK7+z4O6MEr})to(H$Q5I+wF@E)GR4%Mmae4xBe@|au|Bg}4R)IgR zIA5PxPSDF}5EX8y@-q1s+?*FZpo~6R7gFkjeSHwVKiQzgtFI& z4|PoLTu<)DO~2U^nj-n`_(?#N zLEHOlK_f&*`mfdlb^IjNSul$DTFkF2LA8Fg0s(%|3ivw1KeX1^G_p)|)Rz@eqUQ$< z0@kjgfCr;8-f+j?gFShHOaST-7U^B-1dhtc+Qg~jQqA&M41z2-Liw6pW#xPQC9|79h z?$MQbBbB3lrurF<-~No8Jp&+1`Y8i?3-7g&dN7l*&{_ zOMKZii-$u_JxEHPShvb>Cn4GJ-%EF!1?Yfbbd%abx2hmqd(bm7mr%nOoE;@R!9Uh6rLt;M~+z#!d0Qr2!mw^|=ay9#csV9PM!I2Y|GIo*UX*--4d zzY(i*f_=WGo31ffc^6n#-5*&16`zHz&7(?@bvSC;kdZVbMPye~mcYZ!Y{Z3c1O|QESsakM)2$#gDpb~RP4}&0& z%&cx{!{0stvj>&_RfRg}b7E?xt1^iPe~ZL(8IKJ8)`)S>Smz5n1+!Sb$d`^` zb)D*Z+nw>`Sz|HU9fEzJ1>qBk&bVcwiop0!{JiCD_E6V4Ayjnu1@2EAFv?-PL(8#b#>+;cx}KO8Fq0cs=&6SMINP9 zj9RQQ4x_3ickj0jnv9uR#!-T5)!dZncg#zZ!D+@Agn@|xy4MX=P;*X==o>rcO5J6& z?5^AUG@y1!g)|49oVc785>0BPO6O2O1tOR;*h5;CiuPkE8zYp|7fP8h(ciV~PB>U# z{>;+Qr@*1rE&$pfW;HG(q8`LW2L#3<#PBHFI z=M-mNYZ3t}l@1BMA@D$Z7z8Mh@+yRsXA=}D4NU@bF%qkv_%KcN7HM)lAx@GiP^L)N zOK6|*aF}gVI7}O-SO`Y{w8|f_q#f&|1>7YwNZoaXkg}KbF>|;BkyU8WZ&72+ReZ+< ztNcI}Pc(KLf{)_|r0PEb|Ms|sN2G;2nvfEuecS^ySQpMXAc4pa@-v7LrHLm9!#*8= z+!EVRm19Y3M4In644TBBlCHAu;KbpRgI--Qt|`q67^`Y5kCMAF#K$GV%HD4XCNCp2 zeY$Xq;hbAN)yg4&NWaLStv4%ftZ+x4|Dl*Oasy|Mmfq^We|GG00n-FSJk@~d=|~r> zqpqpLyY{9srRT##q&C7!&63%?cwIL6bJYP;C zb9|)r!WFr7ckn$GpNmKcWWSZ36jc)a(7DmjgSQu3hy?NLRxI6NM~PIYux#3Y`g(jP z54<6t74P+ps=X`dBIwem;V~j};r<0E+&5#`BaYcC*p6)a=&Il7lLEY#)YjJSoiwr* zr;5@ECdiSz^dIgJra(asE2fiIo-csI%EmNBf1*{v>4XmUAK>&jz?khTe4%URD_a_f zJ#y2IZ?!0RY6_DGBzhvG6;bG=Mk)5v{#b9+biW0|+xx&UdKxa>_{O_k4%)i!b@hLv@V7|+QGdC`5&FFW&1VZu{jze_+ezGw_zn3#6{Ws-Q>gz)$OHag zMM;24Gc*9kg)?+Ap>yz5Rr%N5S|kPl!JzHX$K zAnCwCUK=2lXh^xd`1ERV@#3tq$KQTz51#XVK7ab3NUZT^hvZSJj)m|Obi!)%@9sOS zd0m6RCMpipOa1k`Kz?_344b=>Qj+ZO;#M!*|Fvr{Vr((>cys5+{`?1^z7|` z)nA#N>=Yj~3H};iOcsm0^SLk-B6!+~LP0av7FW*5SLnukbd&CB7cOQ8q;i;^ckeVj zrYdM6rxJ(2RqqY8oL~KJ`0ja|-RO|DnoMK;`!-qqs1CA$l=PG&q)AUqa!S5OJfN;# z*0lKWus%%M(bd7z*~P)lA60jDX3|EY&Wi;45F9KDlRp|gm0{Xp1YE+Jx+7J()eXWmSN$xH3G{}2XnMlDXkIi zhO44vWZAj1Rf!H_W20xzXSho=0tPa4e?PDxFS5Sv&^^S#ilQ#wtcm3Xym_43$zt@CH**9kdM{= zWqhJs4n^dXQ6V z3%4=!aVv?7Rm$c)+CU3i)`;2rmg(vlc25dU|E#JpH__;OJO?onDu4rfaz@ zwTh>i?Ek{O;8>~d6Mf*!1RK;dx@s%Cc|bGg22s1k^{4@==Y3Cy%;SMBOH70(Bm%{VHh>*dz>qpgYbT@aSknS4bazwT)B-kG`&c8nzuD|?H>Wy zl{Vl%a$CU_cuH%#_n_RS&VIF*g@v1Xi$0@{B~@{`9W2pXl@`} zf_Y@FfT|YDLH{Igm$>uR=*zwl>Tv%a^}c~^(TYd+V4-M{VgCCQH-*p@gQ1c_ERGuk z1@Qy)KmX!?Zg(B}dc%8g2q2&yw4}aNiX>}8OhAo>t^Fn&()YE#U@QccuU8ssN}AI&`nd5u zA#pBhLVxy2fM5CsGJ3oH0F(8#U0c-%IUozgWW;RJE(%0PV+>CqMwu9SwBDdpGFy6J z-AnpD8Zw2-4qkx{EFG*0AWz(?Zd@OI$)VX4Z8cCBZc*C|!=(*v-aBJ&cd~jju*;{D zz)W1>&bMu)D?@?$gE!T6vB4Q|rr{Uc9%p|men<1W34WIEL4^{$l=>G-_rr_5DB#if z_5crjw|81&Vmi&;ouKP>wnF#oZRo1BaSw>#)cKt&#wBH4puSS++~7od~i(V1h)xCZQM1-Sc}b)SDLD zInadZ8eX#U=>2jis9a_$Fn<2mpf~ugdw=)6rT)Guz+nDkWYn9N98ImL9ze}COQ1na z43e9fcp8~_YF5SD^6ais! zScABLHzKo{Eg4TN(hxiPHQ!T%dM!CAa767i2Qf;nE}2&qF1G8DDdS$1cuP0Pv^-+)G8$qDa;gP$@enp9Lcs&9bUYf^c&a7=92P`^6KD#2fCP zdrU}eOt;?qA*FM@Xn$Bf1M$W(=ceyC$4jW92FH=?N2U)_?wU%@6lUglODdchzFf>S zsSe4JG|M5%p1l;GF%5))9NPpu%KPi#G0njTB01lR>+ZSL0I)JuYPQ$FHPYmyfPQdY zldVMi4FuN%2t#Ch&*0rpR>YowfK$}7mY_7{YA%QJz*!Y~{V%;I$0rpbnWKkrq;K`p zcNW+=Q2FNCbAGLcw`)l&?m<9$r8OOTnHqjZyMxYMY-4m0%z*2v z)qn-49V{>K13Ch1GisU06MGovF6~LBPpL$n+EtNg6^b421>(YeEP3F&V2X?TW_6wI z`TYOPiKggy%3|du@N2zWi551Z zFkL2x&8p58?CYNNs`)cr)#e8AGz+AtAbUA{yKPXl0n!$N$^_7Eo%DU~M{pOv*?u>V z)~KG)%7o~y%pnXqWsI+oSp6NHLo-$>wY=L#+pIx|45$V6D13+eK~&TD`hF^0;pz)X z{rtg2cB@mf#n3s`q+#19QAoc~%$J8~lvv9YF0(Yj2(!lK8rTWcz~bhigA>3j{np z2j#n_j{f{=vQF=?A4*DtD!J>y9>iC-pqtm&is6xWW|FwtA$ag08qT4Y-Re8H8=9m(<-d%G*RUlC&G8< zEVLS-QQs&3DiAx~726WOuV~$hvHLQzT3kFc`Gy^80%o}R!fSl00j`@IUTklOm)ccp z>=m@wCLWA1c0C+hY^kNw^UKTAA*;)Z?i7B-aY zd76PJFQRE_oKR~yY_lJ6ZPk8yES45d;G$_2;`O0+?Db#;&#htW1#Vj%|D*{JG_|}T^v^;}XPkkd9xWe8Wvbz14g=xhxK}s2O-kyb*dP5C`6cvYxt??9 zL#V3)0&h^(zdF7}UsHpOj@_+PZtu#Ts8b#-3B6vl?R6JI>(`^%CA|Sqw-o>0lx3UEtGdj=J0SWqP>#)ahg8=xAVTR@}w4?rI9MbO28(jahMv z-RKT`31#`p^Iu6p!;m=wY)Wb6-++8Vs~(X!g)r1CAw#MUwu&lWqobnSw-!hEPfAN@ zc6S2@XxW8u2Vaz%!|5sXJxjbK&I>t-_8mZuC-ZsUQewFr+H`{5;`2fjEjw&tg%s+e z;$UDS%%na1md8XArVlFBeXGE{htuQG_vmzmADN*4IyDS3U_IirJeS+5xTCdwflX?v$TDFDo@*A z#DW|NrouQ(vT}IxRU~t8z?m?dLl)%JY|T+Y@v+G+xhMKO3r@m;^{M9N>VR`r@M%1e|$Uc6|Zv1@zFez$$l z_^1H@hnfSkmm+>Ub)x2^MhlDcozxud&Bu4dbqYpfY(T{;jhI2=jd&l)2|Vp+Rja zOgMCY+B29cF%sf(t}J$@$cY=LAn)OD0{^pj$@u{pM*sXwu_9+%3XYhOYxT3Y=V1R5 zg3H@$jU>|FLy#vQm^O>JKA?}sz~<-4!DldgIvX@NY;@CC2D@T#fCNCM-|GQcnV{oc znO$Hg2nY+AgY5qrzxLqCy}W*LmxyBWcR}JAZnu(BF!kbic^QcsKQdtAdjx$p%HxIf zP5)s^2mAiskE%su{)MVFWQpRK*CmxGf0R8=iprNXL{wHcGk&a^rtXN2Lz`gqd~vpk zh-t3gMD^$Fr z9r)%TeQmt7no6T{iBuzyd*<1iXYDo6DTx?ISL!7gO{|mRu_roW#N7npB&B!ZDZz+X zp1+p^j)8sDq*^IBy)ZXfa*88pwelE|_$EH(brSgdTWYagH3fiupO{Gx2by-2MryVg z+6I1{*x~@}!WVU8F$M~j*GA!{&x1x>h39w9+0PQe#C2p$qqfi@IvHkDI<(XhS0c=-$rd0`bHvJfn;rk z1NIgodo|!~X;*cjI-(7R@$_)ZySjI}UBQtAYXrIjb^+D{iK9JcUM-fxf_?ml3 zy5Tsr=Aan9?w}_Wz(E!|-$z}|9ZO<7pGHVR=K#*~w+72##QlY6qV>BP~CxEUZl z41qnCHYZ-e9sUT1MUNd+Amq}aB9#th&uoRNd-#+-WdY#cELFXE4u)+k9{2JdHPx?m zb1Ie>Yb|HYRLMofy0iCf_O!Gc^Gs|hQ;J>f_Dn~Ka?;z!VpdN#zwbC_1?E!cF{~7o zZ9uS`6>7IPoBUZKdX!sBUA~r2ZnjZeTJ5c(l_ArLHzT(z=cEWg?GlU5SM7#@)`^Ckm_nd+}a9l zrSN6$<@~tZ2^Ou)Py`1crWFMPPY)*kG&x*^}q7w`?1 z&*m4fOfj(Y^sG2WH~qura4L9&f~$@=y-w2!eALorzxO9&pvyM#i&lrdvsp#;pt%9B$MJjfYJw92aZcxt#6B z^->3o{wj!7N(DE-9I@#K1=ICK4*)vi6Q;9A%tC}OGUa_^P1&<)dPwo%VfD@H2f_M@`fC{S!lOZd==g2+&S^jG`S7 zFYQ`=2w~yM60g0+{_Dz)aollo5eYFd=1lbG@c4qkZqrQ)e}CL7NBP#HqSyKx=Uk00 zB^t&TAwcx6g)H7&F=D`t@ZQIq3CWE^O~LX*{#BZmfqvUYi$I`UdB(Vx(|v*;IUl_6 z*#V;_#&6;`Ofe;LDGho_yPvTc9 zS0J9T(57DJ5a2`04bqIx8XluF)L)8*LIabKHPuf-`@>W?3CCYr>>4pl zeVi?YFn$KDMrsB`|L`wJK8)8{re(w!HKo*EY?D85lnh}>Y9KoJ-~}vmT0L0IcBy?I z=o~*=wz%IEb9ZwMZVx97XP#FMaX;6V9U3uOSncY}F8`E}g1Cs{so@)lAMK#GHs-Nl zG1w~Zpmhz2A1cnW47L`;Q*{AG__AH>s+CbBf#8F2S#XtztOO(EkvF48b}5=DU)R+a z?tkn=8h{c6t4X0j6{Jb36#@+O-{>t#xq~~+vKSb%sifl<48nhgap89z7foGzJeWBE@HH0%vGc1ela3?VO?`UI$c8fGzHjU^90bPMOb83Vsl#z^=cIia7%%f zd&a}+fm{>c0GrS;wYyRCk$Ne^Iy<}zvhysfI$J@>zC15vQxDHfs4nA+E#I3boSy|= zU*6mtS}HrxRyB(E|24DWxFre>Qix^`JZoXd7wR{!HNRBr!6ZApyc(X&2qLFh7#v7b ztvb8+&HzM2iV7s~RZ#JUOd3R`0R8TWTwm6zq{VBLd0->y0P**HzriV>P37O6}J*%yJ37YvsveNAV_b?Z$%!dW(b?r*jA~iuf#zvuT4&z^ciIG7ENvIAq0fZz&I50TPgahh^p>9gK(k+26*+$ z2R9KiEshfh1Qe=nSkC3w+;??|M^aPW%g|1VX3(bpynr@<{7|=m^^ucP-W~#7{-N=8 z#v)`IG76u_ETavP@}y+~h4n)vWT~h08ix%SEmR?lrr1#ca+<9qPjIG=nRktQt5mM# z%m6gVRC{DuyKol|6k^E2mD%w1qI=oxm5SxNYST#5 z%4M-7Y7|x3OEJ!xo_XBG)_7ST3dA}Ri$s>I+(^_du=*+ik9wICp_+W?bn2J~K0C*k|?X zK1ESn)=?Wy6&qx4(OQpeF0(QY#j4QP1t|dl`eENhHCxN8@4^mqaC&w)C;>0chnK)@ z=bT!`WbQYA(@zi?D;Cew6Ke^=987&_!Xw(qc3&6fU z-3>$BSu554j?ZFuvniuJnz#Me z<8?_RB@UJH4a%FYid4Kt+~X73SwIW1?j6mAvLzi6Cvcu`O@oom{3wl?3PkX)!|qX! z`PoXrjl&7pJ~D-1p+`N9%j6cCAey(k>ERdix?W?QAo8@D>t^t+-vtS)r+wXozjWD_ z@m0E;l+%`p%oq+q=XmX->9GOAsukRtizM)FEp{*=?P-jg^&~;tJQMFYPJki3pyMgy z(F5d8E3F1|QSFA{>NL^>lsBu9_f2t+RW(29M@`khs^;?Jblq?jfj2R_&ZRTmxCBXe zOvh1@DL3`pU783~EUqcbhD_GP+ z0lYUge?p8NzVDZ!C%7A4RkflyC?2(I$t_i1r4;f58 z=H7H%aCSEv^RF1t*Xb>wd9|f3Wjk2>k*iyM?UT8y6y>2t5uFyCIROqchWWuf`Y^T~ zGV}=Uo@oVmU^YL)u=53hZL&TAw6>6j+9HdBM#URGuwF{KPKX@+&n^5{VbXpNCogo|OUP-5M)%Vo#qGs*5r5 zr7prROu~qm$(MvcnSjy{3@KP8YjC6AtMrb>z_A+Kp4v)o zFCV|Ft|Te>(hQ~@$PrX68)mu^aPwr#n6vAQ6a)jIe`o3ed=5)uX{jkjOur}P#xp|6 zahbRh9e8Q2=3LyErSe1XS#H%Xl?0XPz(WHb7~JuVyGb+#n#}~hK<_Axji-Y0n!Q+mx?Tv(SB@dxnJJhtIw=hd z($5Yv*}Lks`UA)c?(&f`f-R{9lVQLLJ@P`QY=&!FiU35{*l-CH)L1_Z#E_!vp_dI8 z>f?t$SQ}wYv(RIKnT>r|UZ~H(mEsP_rVvYJZ5Z_YAIUB>g#vkt9H@^j1FFA|O{yDi zT{a#BN%rPw19beiiQHGf0l`bz4=OUPUcqAr`SH5^XnQ|FPN1M1?!t`V9HZgv1=C_$ zLkf(8Q-BBYqWAYX>dJ1b7>|$+cx*mMGZsFvDBL;hX0SOZ9|5`o$<8#dY4TMih4r2c zo+T)7I#=I(I~^QyflVSTIv(w{fsGf^RLzWnJ_*;g{y8l*J9`?(tj6Kp`mqfs!GkBt zc-go;40rC&66$YbJgvFf@Gm}liXF8%RUU(CdjMmoO+k=B(ng=s)t=Yq`uqynM+!yJ?rfTA;&k z=w4_~7!yBN)baP5QMg z)$O0SdX#j>ipCrUi(-cfCc=|$9vJ=gfk=tq?#nS9vJtcuC7q!OpkdAu?WAa4@mAd$hq z)kD%WUBxa5vNS4g=h$v*uT&9GmdH!Od?e)wa-z#I4-0mY2Ay|L5< z>XfV{DjB%X&uN?VC+n*FEMZMqjplSR-Vi7jN5V(MS9eR7E9eX&6J7?7n(m<$8Suq4 z2Xmq%ZF~wm*prJCECrfYph-a&rRQ;sT8>Lw|a<{FwZ3ovDaVc^$9^Qsw z1AX=H%^dz9SP9G07kMg-gxwSlAVc+csXGiHXh{29atvZwJ@bAC-|v3>X+JH`M+=Yg z;ZL7Y*eN2^*)^&L0}Wvs@ZTc4kNUys5wkNCuZX`ZCOS)Gg{*_2Ab0*VHN6~oa9=Yd zyy5c!+XEqKh4aH z;-lp|{=}%o$u{~rI!Jq6vDFXB{u>bxbg)c7cH1CpuQDdf>HO|2pqD9VezjK@0QQNT z6qm4j27(x|URSqU;hx4WU;6i|`Qhg6BdShBY}XX7J@?wHq`{h2X39(CeZU|b>t?&u z=o)_U`c=(d{GN*%y6A=(w-u28tZ0e>*kz6%aok@l*|#tv@LKHYM+TX1lI*J#hA_2c z!od);+UiYijZsAg>}NE@L1gRO;1M>*!Mwp?B8O5f0 zk*XALj&RhxOW{$#TBtBqyLe?+ddbuT`A%W0{_b6jGyqE{6O7wKKLnA%B}2v4qFyDp zhTbym!d*^bGP;_=N1cCyq2ME87X2rVKhw#c@Jy65I<_%vKp(5zEo0N2^J7t$-o6Wr z=lk2N{I>fCsEKoo9u>AhZo-fmT?H6^I&TRF`y-_${|`+q2bhJhtI~Z z(UpDS&PR|)Ax*@ZFlRMgA|ZhkL5fVZ|MsrQg;^v{YgrsZLmDXappk+C(2LqbY)MrK z%ZN7SgC*NC&v*HkElHFDze?S%fQu_eV@jJ*Qb5)npjZDjyGh%-9BEXE##zGSCl!1` z%!}(8Q~ueb>Vh{)GZ~Ci&|({C?dqC5*&W7yGdn9ccroeBM7Z!2y7dzJ6|y4Ddg+-GdWZ#ocu)>+G?v$&DG1zu}LaGdWpVx}Uza zdVGUv>sil`T@}^Y;`56!c8MYg%FLw_-#@v#y)|@2JBLd;Kyt@&$rUMW!Zv9foYHZv zHYq34YQM^i9IYGP~KC%X|JiPY~q=u#ZE)y1Ei~Xy3i) zuPzuuzKXw-C_3jN>O3`>)KGv}5UiT{z#@Q_#r{)31)a^djfIB)Lc?8ep6hy3Q`=rPD5A|9201zc<8}5^VMhe=b)`G zY`%bo_%)w~*7EOUr8X7h*jgDw#Qz@r3+yPnt(G zKC~d^Ug$(xXIg1Cp-?9Vq^bIwS;n(<@Zv9ucyY~ois#X6Efy&{BQN9La z_@p30ilx$`nO3^9VS8i)m4RVN+`g|^!mfNe&_r*1J^BK%N&=V!JY8g&`%#P2xOLH9 z?_B!+__tP#Q1v(M&RfCw-8TU;UfLxa)B5nmz!|q5pq~2?AFKjouh(p71*$6Y6Nzk! zD%=t*mpj8n*09s=&_h=@TkkPqBK27*4nt^->xjx(VOR7o2e9n8QY4wg7mLG?F2DUb zmOqUbuH})>qBK|JXcGAxcrKWs~vC39dt0EkZeKePhUBNTTW#cxSjRK%M z%e@s3fO%Que)~7(YLWOZZW*PH|07e-UyW+)?rJFG8UbJA2&;EAIoe*{!QtQ-_S-Qn zcd2#@@aQc%Bg;OrkWmzepDvy~LaIy%m_kxR|0O{Fm%m&-FsC5cV{cA|KG?-UD{3L< zTO(d{e)3w$^?{bAjhmx#_dm>etqFN+8?;IC ztQZSHK4nWN&U>b=^B;fah4?Rj#sC3E0z7w3E0VNL|8My0sv;|Y$bi&+s;<#ZiX5{j zL}g2+Qcxn4z(GjqO=WX5B6p#RA|5L&Nd5g0n^VUofDl9Ru#q9VZ*rC#;I z(k~-9a{JqmYH|r@B^6ydffz4>1s%JxKoBEpxigVeNoWNMpz}Ky4St{jiN|!rc*a75 zQZm9wc(SFMl1Mb*T4EyCsUR@LnfQbbj`7pi`PWwHY~0IV9LY^hx@W0l*j@LudOkb^ z`Ze8afg+$7%cnEjYx;@&BbOI+BIN2d?s)?;X4vq;FI-H>P zdv;xS)=})C{vdmRYzsNJ>hcln6X-XCh1D|t-BW3~I!JQ|y`0io?@Blhg<7rBgLv#H z1e+={Ku+m1lCP;UGVtA|bm$X&U?$Hdr))wj78ws>MlB2q#|gHp&E-Ywjc0*RPOEO! zsk*6vtgYm1T)>qP_@L$fNwg0r>+Xkv2557Qzo{H4(4R4Xqt2`cJ2)%-(#`1GqcF8d zD7M^f$;PkJ3icTUL(&PEw8IRicN=(0E49-l_4xpBy_?z7C^0%1SJ()((&Yr16ei)U z#Sar_EBEz)nYAz$f=%?JwR=DH99A}gxB-It zrk&ai`vHWPH>)qmwl#3z$Bh4Sa2gwks^)*HmxD-)C;rF5U0hAeuJt z^+yl)2ZDtf1D%Q-8reRLa!t4?_N3~@2K_@YEdkhQf`N`=G9_Txv|>k%v5F4!z0Z0I z9bN48aB=zg^!8(w`bpVDDut1`!!oj3JPR2r}G@Co6} ze|7{HcNJlslyPX7)&5*z&YjTKIO-u#cpGdeLjt_y`@T>H{adLppcq31bq{hG&RbF8 zkI6ycu=GJb*S`p1z5IxAy7>$mO=}D=X9l^yO!kOf9UdTk+tK)ixbBWCcSYP=aYK`i zQF19BH9NGprdltNg;CXGwsv58Z0+1#S>MQ1Lj*UX;km?qpVv#;ct8jTw1`N{dZtpy z9WDyBTu8)aiI+pjTS-<8Tn}}x`GB$NA$gzU5|1mG!TYSJpRha80O5`3N-t~Dj45Fq z8cUbpITt{!?<24@_2ETeA;1bEdr`p~M2;VkdJaE1?xQdW_*(&-82C4QFP3DI@e`^ZgnWc@mtcNovj(c2w!`HfNG`s;kf^C^d%FJ`tS zNy*{MwqVybKIgqhT1NFlDL(tedMtYEmK)oaK3jJVueX~AhHk?f04FBtaM#NgNDo== zRcD+cDispzW3m;KHgavze;3q!X_*}!d3wHm%kOUi_Y)d)!WI_)Z0;Wa1q_jR&REZX zJK=Wm=>+(@i;lt&RCw)3FMUkkMp+EZ3*Uy>0$c@(AX>OBRIzb2kNGbJl7N#o*A7ex zI3S%>bOxIE--55vxUk>kK>4}u4RoNFwxphnJF#S8#n?m}GosgZS=@o#q?kjobtZ|> zN|eHBe%rN|IJca%#NZ&QA$2n2V9p+mGm#t#5dui&KBxO)Hm_>K<`VKBNe(EhMC+GX z`#q^bqx`0Wf#Cx~BI15Q(Oy_p2;X}Bq8SFtkjok6;=- zm}xlEE@+e3!&)+lM)^2#aS2B84cz((&Cbjt(PG^4;mjNJ@{%KK`4Gg29sWHk7Phx0 zLI>2(irwfaIkFMt{OaZ8ld+-XXMl=}E}|z*)e$kt(_uu{?p=P@c274D3IfyuS_YJ7 zzwHT-b&K|LVOss*qAkjamH7PCVvFxKgpn+AbBj@H1Uo}jz_eum){ zBWv*reI}#y!|bVQM?!!KbC<6ikY790gde!GEQ5!TY>%jVlQ}pdBX8OM7TaJ;O`wXT~l(uBj1_3??#nh1ua^+iK>gHG@HIj|MTL8@9 ztO12if~N1Fq%ce^jelVCi|EmjrOrJ^(Xb-6pUo_=H&}El{Ph$l1BhrNcpq$DlSdNy zC=BRRCt_PpM~$|AO!DNYPFV@qgrw~QycNpj3mbhoU)6JeTlfTRjz)t}kZWQz%_S%8 zuL85g2GG$5S)CGp8ufq1VkeM$(E;K}#l+ppte~%gp(FF1+`!pUZpDcb59!G>G&?M> z*!+M`0br1|k%P7>P=bC5*+ymT z-K&39`q>4ySp^xsQn>DObyF}#Jyt54_}ZJOb(M$9vke5=WRAQvvw>Q6ciK?98C|nY1 zoq_}kvt*eM|12yqf7HDUS|9Xpcpf))+7?9Kckj7niEZ6NA_b_q4F2va56YBCKH6`s z=pX=Hh%aVaAZQio7Z6UT7p6s9doNJCcvZZBs&9*s&kj)a;sKc>ji|eDBHplZd~j@ ze_^AAofkCl=?CGfcJ2(+o?UL#dt0;vIV*^X4iuZLe6VN={xXL-lb^=83$9-p)g>&3 z*%77;AWj_ohH9$zuScEQ1G~~d2}PTsuQ#j7Ez`BuE+#)igb1vy00L4M4mF?Z(IXjG zgrJ~RfOOKDq+wJ1dkLtkynHxWn>q_MhxA|XkuIMQ)e5&-zEewJ-Tbp!mUnk{np}OL zraG?)b`jipZ5iAU+QLn?7M)>LWNf{|Ui5X`)z>#k$4QpS7O~d1&s|8}h;XJ5W5B#m zMi!x0lC{VdJ~*{E;FlsTEK%6+Q6an!i8r!X>fxqo{s1b+I1cztMziyz&bf2e>T>}l>@bphX?g1O)E(T!-W^27{pK8v`2TeE z6+m&W!Im(%d(c6HyF(zjy99T4_aGD8f&?4fgIjQS2<}dB2<{q!?A*(4y}hp}s5+-=%~NbTh(RxbQ;hDoSF2lVr%S4N#rlRuJL@7k zfx;~?&zWmg2~IL)ZWMR6 zI@jFM6s`8)9BbQ08b;<{$HUxU>J@qtDe#MH*CR~%!Wn;&4|AKih{d7)sLrEvZ@$eg z-(>1m8ui+`C8>gyYdq%eX^yz&t+`me4n>X7Y+6P-sV+%EbFgvk`3qNq8^8{R6gohR~tD< zvL(h5b|~;|#HU^}Mfk{U=b%pUoVUgs-c9Fo7RC`71~;^~4xaN>%$A~YqKJHO+8{Vi zyszJjSX+(Vo@hHQGZ0AtG;JNC#|wzyr)u1@8PPTzcIyUqG`5R7ekq@?hj#IbApf;G zIG1cJt&4Q1i#^%{+=izt<90w@*i{}~e}!uL)eCLOfj$Q5t8qIIqq*@O3hE^ltO6;i z1sHiGUJB!ZehH3xu1cl&`b&n|qU0)y`pI$NgjF`~Nzh*HXuBpjs`fw!QX-+iVhY~K ztgh-zT6%J}El-$sn!K2M)@3NC`j#V~1L&61lv;iKm}*r#j38g-$gBM~OsfX5vLwu& z7)^~Q4d-xJK4hOAuhzb+8q){^(*00AUPnpk=|zLO^>D^-7VIXex0fT^E@GVuy4k2$ z58^p(VSkrR(S_N#mKkxn;pa zZzc*F2b*I69^DlBD8twQ1noU}VJJxzz;zQ@s;m$0Xk3Ta0&9)lZX@$9VZxp^)GXihvBBR1W} zZs+6JMi&39i1Pgkv30Cwl0I?Z=>Ua}kI62P9g*iy46t%j_$Nn9H>HVSQ+tC+n+X-~ z%Fdzv-xq+{gI1Uwe-c4e%M~EM*SUsn6upEHYih_cwLkYLvPvuw(_DRz$Tkdr;p96`CnT8k(;;MpFB7xI*-X(M zOb{!6LiZkpRhxH+^AFSnF%^dv*}{55jBd%_Y_h+n^tL6xt2gz0qMAZ?MbblJH2$Pw zR0z!MepXnJ@HkAmrhO&evDZ1#PbGD{Cz%BOC$5qJXK~{N8{b@)`=62uc#wks_BVt@3=c+ zM^O*331j#37JsZ4)z2q{2rI#nEYglg8YEZbXiZEnM@Pr{Cs-w|iI7$SAv7_85Y*nZ z8_$%9-8G$+`hJ@D4)g-|zV=!g&_^sOWh0Q=m7K8*7C{kGp>$s3P5bx0Z<*7ZD?Ep# zP4x!scLy0ePcldr-L)OfvoX|Jtv4waWQiX|iK%o&K6^av@CVIoka8-qTFz#Tx`%we zoJCjgUb%ld<$T_ou5(g0G;xw7-;HY;re{O7g=LvWVPeyE5)Ft&`x$%o0P@~hsR5du zsQ?YWL$kPvu_X26%}|VNLcNlm?Yuq<{S`7jJ$c=V_qTez*M8lCdbL{9i6bT6Af^Lz zH@iENp%5KJf0-dMj8!!z+pEEFTSBlnx%EynJth}E3Nv;Z+BQB_tI$n&6c0Ltp!%U6+9X=j&Q@wlX*IYuQ`$u z!SG}$q4;5#$9x@FclKTtSgMw@soCgQBl9dz_;BFm9=q=xKu=AG)1+H{tP}7Gz$npSeGDfB$o%>)lxS zYPd4S3dTa=5t9c-Yr%S+dkRN`ugwF+GBqvMpPsOr!%#GS*!N8L>8oHD>x`hIKR}aQ za)jZ=tUtUD2%0s^hzK^p(pSDMGQ)5^=2oA3;yfETwuiT%&A1|lx`;JHwy zf%h&l9`-$No*k|`rS=+Dn*C2d`z&`RB5s8@s6swhLHUWzW;b8y_0F@i9C z9`;u|b!4l%+qcp9w3AA)O2hZGlW|5y>++Hd3)X_?q_Jbg;cHu_=41CcEMaWXgR{?p z(@hE=$dcCVTpBrv0{eXrC0AOM*q53{nGO9OsmjqRZ9w%`Obf=-a7bnXy@GPwSvA4b z!Jdtd;pTssD~3<(qLff@)L`ZWa@hjoVKNce2mAyByY+QKgwA%g<*)3YM95U*KJO5C zq4U`u#BW>B!KqyJI*X;FR}nENDd@&$*lX4OE$F=<0pr1ojJR~G%QO31 zkx&aFmFl1~0!N&a^I3`ld({)VF5L@ZIcTrx=1AE)=imXn*XhXRDSE)H2!>FBrEpU#cpWJ7o^5MPaRm$%RI-hHXYnA2cq z<81-~c7K=R>0wEV;}m3Yb9;{3y^PdzmlTnw(I6vTnsNSMB@m2fjb@;KOsKcJWsX<~ zmq}vcA`OnKxArdt zO!klM1f+%uv={d^yz9aQ=Xd?pLa%LI!t3W&l~mI!#26T}3(qhwUfyhH7XAoN%GJE2 zg$@AgYEasYSQcd(0=N0uJx(t&ESg%7l#U(vmGE}3qVnBh02+%3J6)s+pHdh45p*ob z7K-$wxS#AqD?*qc=DrPYJ116Jr{ICpuQjm11PwYo_|mvb5G{DRxyvZK`h`x|=uI^QRoC0*;YsHeuyR8Iye1xfm%zA3_hbq#HXrLc~%sL1t^u{D!|fCN!IY#-Ix> z<&m0S4L@58Tn5jLY{|&?Jy4SXfKv%T7uFR^&$HfadHNVoKb5@ zQk}8;&>wLuF}g;S89hLv*A>Gm%HPPT;=4h^ZK6Q0CeGrl!Kz2=zRZ=Pb_Nuzv|XJU zzz@w<{OS%oSw%GkE6gkEhap3C#vlR;Z7T+yu{PZ+|B z*=td`Z7*UzIL{TLu`gDt8YZ+fNvJR#-1G`x8Tb=&MW42y4ZjjXVRJitI zXjXI;qXWbwqG>&{;YkO1%Fg<=H3-=Y5K<=dp*K=9e9;hw({osmg*cmWZxd zUdW~tU$}vVtVs`F*x&z8$gLzl$oTJxWf-w4^Y=u#22zd%q)+qEM)MTtsd5>6Qs`&u zxYx~oU$*74e06CtCpz|~r?Tj=bO;y!{AwNZ*oL`^cY_ZUCbPz(woD71Bhu86&tPI0 z1s!v2kQ|EH%x=jZ#TTtTpzV98i=_mBMlJ9LIuoyT7}VAM75gw3kf~uEK=ipZq=~l* zePR@$R6L!dzei&qb1%g{gm~&Q$WFrz(R;Xs`*@xalH|*#E2)BFg zptw9636s2`&xVD0R3Rv}S63Y}ds@lp+W*05PK!?A?(c*DC)Nd_9+aBhR`bp1wi@!c z>(4u|91nFGH|*wUFZF7t@9%-wfqXyv6<95^qKhe`nWi_tF@DNcL zQoq+^x__hw##z|Xt*S^at#DkJ8l5&k`sPd_-+Y6U!T%97K4OtqY%IT@jVvJ2MTflQ zRZ9E0jE!Rn73mM57T)$6E%!<6c6RAw%3M^T~>_tfoKuuGmhMRv(p zEK~t5GtZ#UALZlipexnGRlTZ6^>s#!>($}PmVDUXR`muUg%z)RhBS}t!=wrIs9S95 z7tmdG)Ly&WunH1rRpj;9j!ru)#@hG&0OjpDz(&?N$YFA7VTN;c}2$8FTX_Q7qF)FIQom*>sOU`!sRfc;}N3Ak8c;osydpe*0!s8FwS0xgR)WT4TFM^$iDoNV=YAxW@6>w#gP%QK+3}JneJnYgf-n7Pu%` ziqfPsj4M2;6EwJBzcI!%aAl=}X9xrCna)1DDe zmxF7HfaTSu98WPPf8YA2q>1^#C8ShJ8w`d|ukh5_LVd?JE;Fjg7E5T9wXP1L4?uTJ_H0%kk;MIOYcr2R?R3{cf#B8)&oaE+OF$A44N@ z6xAuB%_FWjuwZNN>e1_NBSWCAy51S+%XpYOB&vHlGCOPa{QX{ghNOg3IPli?q)^}!rEwd}XR(%Z}p%{_@I zkUT=|SxU6XaZlh`xA=q6-4sRvcq;+zOimi%xDJmGaY0~rhH=*Bv zTVk!Fc8x&vLI4bTfV5qKi0KqhkJ0?h0ouh%qk&?lodjouR%5PE9MRh2O}qQB`Pi{R)9*P2*ILdCBUML)OO zGPjuM!h}jY9s;5iQ8^hl@P>BHxN(Derj+$cV}cPNKn?YD_n_IStUvbj9ThSHz!P6U zwE^n6lmcJ)F280VSLyUliw@}*0Z75#Zbp}=u_v|L~UEIq0Y;peDgOVREKJwPoNsTkFqi8WLy+An_$+n*qmEcJf zw=%#Bl$&|ppZ|=qv1l)AJJKn!*5@7}@rUk9QQLwXpo4QZ6|^QwO70v=}<=L16S#!NjCTtaL3rtRA|&9 zNS&JOI^s{fk8Pm$GER;!d}<)Hr4?^E`#!C$+wK6Y{F0kQ@f~@|`m&ib?tViwStog( zO893spBc)N@~~d(Ag>JUQv;sBlh}H?)F6xDS|4XG^k8EH0{pwGlHf&CF;HAjJNttr zpZN-s;K>N42`Q{VrL|`B1}B_#=8}-Gh|G+EJPbSISL&7 zYxMP%uq9)@WmT(Q!`NV>B_-{vFicCLueSOUwTyeFYbdo=8nOK`mz7d7g)ouG(cQ_o zRx>F3S@|hQwdzc@)F7xcSGl#6(GbIx`UMg;$yKeMRk`F0^;AwpDI=wzjj3Ig zwk3{nhT~*TspP*5^Jw8{W7J;fq@jPJ{|Yct&Hd3=@yif7GwuzB5fOdCb28jD3&5X7 zDCX{xmS*nioja*x+=ddB=~s_Z2j+K|0bH;1futHva+%K;VwtHTjG&69JP{p>uE5)ipDm=(U(8A)Nu2_>`j zw1!wee=pt8_rahgNe2WFpCDARi+R^XTz58`6~a?vT4N>*TY&=OdIgMPT`KAPR`5ix zPmRTtd^KHWeH7=7%YQhR$x`um^LY(vHM7|WR71{F_yT3PMQQ-lOIws(A1KoFsbWe? zLR@I{3l}~%FnAj4Q8#dq9n90<`Z|!!#&yF}P~svxJnAgg*9gMCPYi64$u+8d*8hB5 zha!N}uBo>&7w=d&NAAFWrmNG1O{^3hhmK;} zeywPN)Sf8B3joGtr0fnfKHyfA`}RncF1lzG7I@R<$vo+po8NalSS;U!rOjQ>=|?iI zN$hkdqAbCQ`hiI8bT;LJB!fa~fWxjdi9(g7B^P5d_gQ>SlK4o;B@SvSSAQh2aFny7 zEUs)fA4h(yF$PhS3tv1T`Cdcmz`3)R`rbn^!PoR&Kwmj7epm91GeGp7arA#CR8^Gv zOcBA|UlTruQ7Q1r$_E)I4 z+=+(}yCoC#r1pRrj$IC=MUO?0G?6R^GQ~a%aL<%Un>4%Q5-pYfl9YYcIdQhxvmSc4 zFGM?DCT4t#B3vQ9#Y^{B-%1UgOh<;n3HtKpBE!?-i!Cec8N)*2#(hf{1>T`*L@z6Q zapd-Zp%v&pfjX)%fz~$feCeC+h*=b-yc4U2n=(r6NQY%X;d%=#RP_~uMluTBeM&4% zwHh?N8>8gcJ zOMAaA{`$ew;PSrfua-SwpWGMNhY6z+I$SGtbg$S`j=PQ!M>|o*3JL5?&34nL4X0M$ z&)FTIa=b{lWjWN7iJP0T8-@EDyCVe0P*FQU?LX#Mc1ROm?#ZPS?>*V5nK_>w5HDA; zO?EC}tEVksxdl4Z$w={D?GLoc}F^2TS3HsTwMC*Kb zI6MPAV=~Xagb^3ritW{VzdyUg7Y=>u3+otoh9z1#S(mS0sKG#~oQgEveHyJ*b)g!` zC-?M>;{CB1jIJGZsS0cE$hsdlSX8GK9{VWwV2l%ksRp|sCt$3GAQ{xJ4p%SrF8tes z9juE!mIn+&c%m$26|4($C5W09SITc9xpi1LYS-59g_Bf8%ItvP1WJ~Fcytojj$S0f zgD97?>@$t`MeOKmnK`lW33@Pq?Y>=hLnZmK(?#S8J z&T3WGAWTU;i%xNO)%xD1NP=~mQOdD_TSbgr)1b|wpQV3gu(4%_ z|4zVA0>x*_piJXf0zpBcs{>kTm!{spQHe96MrNs-M?@9pa~$Z*>Fh!y&n}v*-O=^M z`tmw(D;vq60*Fc)1C;LgJJBR3U3&)#ge-6;kc*H5QwvA7f62CY+)%crpmq!kR7m=y zNvy7@%M_rh&Lhr6S?6SdR?h}4HIbu6gU=OwrdNL%s)9*E+Ws;>hJQSKhm#{xco$PS zI}m7uj7I{4`YE!4Lk#b@E;MFIIJ8z%{dm*NQ0}3I(tU%F7!+`b=f$y+`t@AKx5puj z$M=b$iO94`Wl`Uy%j7us^Zng(@^RGRC<0@&^-qM>@EUZLHA=0VN!IFpi%Vxt7Dvtl z!ZT-#*}r4%*AzLdo4_t_k*1y%@$e`F0L0ua?sH}5-+OFJ1-N8+E>1P4iMi>8+H?HB12lP+5 zNwCEy+&=8OvoxP29afB@KL*k`ZchH~fg?TW*`UqIjP>gnzuJSqMxTN)X}C4Jl?-~r zs>s`)eIQG+SS6v3p7H?06OQlUUVu}#y2ID|s_>29BcQN76S#%dEP-sk7kSXv3*^P! zUc+zjdZ$BSv46tP;}msR$h}#py;+B*VS2$TcQ0N5Hz)d+nZSRafPz(DJ z(Z(GuCZ+^q)3Uh?sd*>cm&tuqqg73HqV|0;Ex$MY-X7vu7ZAo#(IF*1js~|KovIWZ zZ0V1pY!A|jvWHDZqDqPHH&R~jfD8OIUSs1Y?2=CeE9|ZqMsH6qC1A`$^4tbRsy2_cvs!`*Xzi$#*t|%(BsGM30D0Rm@ou8-`|r6MGS| zDPpd3Mf{rkGTvmW+OVNYa^Fs&zkRznuoHv}arOmi0)GOYZvrk)j%rB?=%{Yf{#L^K zWD56vk9_p9B~os_kuA?3Z|c;N6oDlr!g|-M7qQx?-F42(Ic13ySW83jQ(VK{c9^Fx5o z!{r)+^>x5>3+aZ3@#Jaut*6VS)R4s=)fuXI zZ%ItOTH(xq8Y8%d41+tRM>Ad3QV~}*$i98YByAa$IS@Ix@GIfIWO#H+&qL_T3<d)$)2 z#hdKk=pgUL|K2gxa6!EQX^Rrf z#(3A04jbl-n0DrG!cj;ug*F-+h-$As0}O>jGaSiFW%Uw9$aSEf_oFR4xulRkercQy zAg}p*s+r^6Xu3YsI36>ekE>a%2=LC8oxwEh`tal(5t5!o^7?nEEaV0}4}Bg_B&ec+ z=C3gy{}aJc{I;;w=LnH;vvO7#^z3M+!mKV@ceoRRFd=m{{NdE}Bc)oltos2$l^8iX`3th>MHh8UHZ>vR}xpt$WYq~S8^C87^6 z=ooYNyUzE~r?UATR{MRb(fn(jJi<@(UB>Kpe=1gd|GRB0@gAwSn`rllln!ri=itbiYdH=>y4{V437-6C!UIwEk{4CYCVxv zH0olnOH#<)yL%?Z-(^-6l7<$)(qNMaPES+MRLJb(cR)QWiV0R56UXt_!47F;>b2W4 z4#C0Yx-f`6%Jk^bnGBVykEqi&ux654K}em#EsC3_M2F zDzl7bxQV)ROZp`)+mCHT`E6AuCn|$P%K5e_p%F6Cnb)C03`g8UpD^pXVygC4)S?H0 z4@~EnM7^QC&5R7Ozj`>!^1mFF%}Gv2Ma@f=Be4oLC`~C;l3(+6fM%kC6e=`KH5ks( z$QQj$(U$#_j0-?IqU{vtI-a3pxWqaG+TR-lU*V`_jWb>M0`c3jE06TKlul32G&713 z6%EdJ4=(yf$!fcR&(SwxPty@_E5hq1b+NHgNMCDF5_UoAH#mi2oIqtC3=A+4uS^lxB6@CdQO>|ZuDpm$$XzaL;f^0d5&5wyJ*G`HrsDKho zaD3)bKH}4C+d(#8+YFMNbiT~XQ@M|%<28N$xCvy@Zo~*sfEg7P<9a0O5Lq?GU(}4- zdW^YDPmi@?=Kd%&Hn2yTLn8mhqO+u>`r{?-2CZqt2an08^^F{~Cp6LB07VZttmq2! zCO?DlerhC)4$xLZAE(g!XM@YH8)9ZA#r^s`M~H>w5n(BFnY$X&%5CddqztF^tr@3B zeT=v|hZn6YNO;{=+cpXEOp31|YF`6!(#N-g<@HoT&3;REXy8j8=e&o#z4I=>OEp}~2h?(@sH#&|H5@a+J zgz=tzV|tkYDuAA)H^9gYPz3O-{R5VaF1Hgk{SOKztZUA_T6=EWn5E=y>Dh8kdgV_K?&;ej9RsaEb zgbknyh(r8G1s`lf1~DVT4ly&0^2U@?LL-C2`2X*Mf`{25TZV-BCVOHB$N;9W-+%!J zKn~FS?hSNv0F(fJgl~YB6QBTiC3yp1IUy@oLH!1o5l07Q%}0C|qt?+thh0HgtoLH__FfKuoi`9TnJI{&?w|5I)T1qJ-i0Vj_9R~Po5 z`ZI7KKY$U;QwWWY{{Me0(R_U~r(X!!<9|Lhz+4|8>2=1v(e@u9>zkYK7UB3uNKl~U zH^3nTU;=jwL3DM}-WZVvXrvTj$SMDC70~|<3O4Ia{kRz#86I-FA@xDvEj9o-_^9`P z#pYV{risx9jr4XZ_Jtw-xJut>QV~dOomFoDBmy}`7C+tqU;-K!d@BN3+>`n@MoAQM zXaZW^0PzCEUWX_|90|Eu|D5@EVvx+7yWRlWFUV3r?uZCLap;X%|3_>*`Ual&A!0>w zh}dQNjX^(y9F2eO2l;QL_FP*C(RkYYlp{{!n4>`4Fs diff --git a/youtube_dl/extractor/__init__.py b/youtube_dl/extractor/__init__.py index 41efc57..934419c 100644 --- a/youtube_dl/extractor/__init__.py +++ b/youtube_dl/extractor/__init__.py @@ -1,15 +1,18 @@ - +from .archiveorg import ArchiveOrgIE from .ard import ARDIE from .arte import ArteTvIE from .auengine import AUEngineIE from .bandcamp import BandcampIE from .bliptv import BlipTVIE, BlipTVUserIE from .breakcom import BreakIE +from .brightcove import BrightcoveIE from .collegehumor import CollegeHumorIE from .comedycentral import ComedyCentralIE from .cspan import CSpanIE from .dailymotion import DailymotionIE from .depositfiles import DepositFilesIE +from .dotsub import DotsubIE +from .dreisat import DreiSatIE from .eighttracks import EightTracksIE from .escapist import EscapistIE from .facebook import FacebookIE @@ -55,6 +58,7 @@ from .tumblr import TumblrIE from .tutv import TutvIE from .ustream import UstreamIE from .vbox7 import Vbox7IE +from .veoh import VeohIE from .vevo import VevoIE from .vimeo import VimeoIE from .vine import VineIE @@ -68,7 +72,15 @@ from .yahoo import YahooIE, YahooSearchIE from .youjizz import YouJizzIE from .youku import YoukuIE from .youporn import YouPornIE -from .youtube import YoutubeIE, YoutubePlaylistIE, YoutubeSearchIE, YoutubeUserIE, YoutubeChannelIE, YoutubeShowIE +from .youtube import ( + YoutubeIE, + YoutubePlaylistIE, + YoutubeSearchIE, + YoutubeUserIE, + YoutubeChannelIE, + YoutubeShowIE, + YoutubeSubscriptionsIE, +) from .zdf import ZDFIE diff --git a/youtube_dl/extractor/archiveorg.py b/youtube_dl/extractor/archiveorg.py new file mode 100644 index 0000000..29cb9bd --- /dev/null +++ b/youtube_dl/extractor/archiveorg.py @@ -0,0 +1,66 @@ +import json +import re + +from .common import InfoExtractor +from ..utils import ( + determine_ext, + unified_strdate, +) + + +class ArchiveOrgIE(InfoExtractor): + IE_NAME = 'archive.org' + IE_DESC = 'archive.org videos' + _VALID_URL = r'(?:https?://)?(?:www\.)?archive.org/details/(?P[^?/]+)(?:[?].*)?$' + _TEST = { + u"url": u"http://archive.org/details/XD300-23_68HighlightsAResearchCntAugHumanIntellect", + u'file': u'XD300-23_68HighlightsAResearchCntAugHumanIntellect.ogv', + u'md5': u'8af1d4cf447933ed3c7f4871162602db', + u'info_dict': { + u"title": u"1968 Demo - FJCC Conference Presentation Reel #1", + u"description": u"Reel 1 of 3: Also known as the \"Mother of All Demos\", Doug Engelbart's presentation at the Fall Joint Computer Conference in San Francisco, December 9, 1968 titled \"A Research Center for Augmenting Human Intellect.\" For this presentation, Doug and his team astonished the audience by not only relating their research, but demonstrating it live. This was the debut of the mouse, interactive computing, hypermedia, computer supported software engineering, video teleconferencing, etc. See also Doug's 1968 Demo page for more background, highlights, links, and the detailed paper published in this conference proceedings. Filmed on 3 reels: Reel 1 | Reel 2 | Reel 3", + u"upload_date": u"19681210", + u"uploader": u"SRI International" + } + } + + + def _real_extract(self, url): + mobj = re.match(self._VALID_URL, url) + video_id = mobj.group('id') + + json_url = url + (u'?' if u'?' in url else '&') + u'output=json' + json_data = self._download_webpage(json_url, video_id) + data = json.loads(json_data) + + title = data['metadata']['title'][0] + description = data['metadata']['description'][0] + uploader = data['metadata']['creator'][0] + upload_date = unified_strdate(data['metadata']['date'][0]) + + formats = [{ + 'format': fdata['format'], + 'url': 'http://' + data['server'] + data['dir'] + fn, + 'file_size': int(fdata['size']), + } + for fn,fdata in data['files'].items() + if 'Video' in fdata['format']] + formats.sort(key=lambda fdata: fdata['file_size']) + + info = { + 'id': video_id, + 'title': title, + 'formats': formats, + 'description': description, + 'uploader': uploader, + 'upload_date': upload_date, + } + thumbnail = data.get('misc', {}).get('image') + if thumbnail: + info['thumbnail'] = thumbnail + + # TODO: Remove when #980 has been merged + info['url'] = formats[-1]['url'] + info['ext'] = determine_ext(formats[-1]['url']) + + return self.video_result(info) \ No newline at end of file diff --git a/youtube_dl/extractor/ard.py b/youtube_dl/extractor/ard.py index 5793a41..dbf8eed 100644 --- a/youtube_dl/extractor/ard.py +++ b/youtube_dl/extractor/ard.py @@ -32,7 +32,7 @@ class ARDIE(InfoExtractor): # determine title and media streams from webpage html = self._download_webpage(url, video_id) title = re.search(self._TITLE, html).group('title') - streams = [m.groupdict() for m in re.finditer(self._MEDIA_STREAM, html)] + streams = [mo.groupdict() for mo in re.finditer(self._MEDIA_STREAM, html)] if not streams: assert '"fsk"' in html raise ExtractorError(u'This video is only available after 8:00 pm') diff --git a/youtube_dl/extractor/arte.py b/youtube_dl/extractor/arte.py index 183274e..e7a91a1 100644 --- a/youtube_dl/extractor/arte.py +++ b/youtube_dl/extractor/arte.py @@ -1,11 +1,9 @@ import re import json +import xml.etree.ElementTree from .common import InfoExtractor from ..utils import ( - # This is used by the not implemented extractLiveStream method - compat_urllib_parse, - ExtractorError, unified_strdate, ) @@ -16,8 +14,8 @@ class ArteTvIE(InfoExtractor): www.arte.tv/guide, the extraction process is different for each one. The videos expire in 7 days, so we can't add tests. """ - _EMISSION_URL = r'(?:http://)?www\.arte.tv/guide/(?:fr|de)/(?:(?:sendungen|emissions)/)?(?P.*?)/(?P.*?)(\?.*)?' - _VIDEOS_URL = r'(?:http://)?videos.arte.tv/(?:fr|de)/.*-(?P.*?).html' + _EMISSION_URL = r'(?:http://)?www\.arte.tv/guide/(?Pfr|de)/(?:(?:sendungen|emissions)/)?(?P.*?)/(?P.*?)(\?.*)?' + _VIDEOS_URL = r'(?:http://)?videos.arte.tv/(?Pfr|de)/.*-(?P.*?).html' _LIVE_URL = r'index-[0-9]+\.html$' IE_NAME = u'arte.tv' @@ -27,6 +25,7 @@ class ArteTvIE(InfoExtractor): return any(re.match(regex, url) for regex in (cls._EMISSION_URL, cls._VIDEOS_URL)) # TODO implement Live Stream + # from ..utils import compat_urllib_parse # def extractLiveStream(self, url): # video_lang = url.split('/')[-4] # info = self.grep_webpage( @@ -56,23 +55,24 @@ class ArteTvIE(InfoExtractor): def _real_extract(self, url): mobj = re.match(self._EMISSION_URL, url) if mobj is not None: - name = mobj.group('name') + lang = mobj.group('lang') # This is not a real id, it can be for example AJT for the news # http://www.arte.tv/guide/fr/emissions/AJT/arte-journal video_id = mobj.group('id') - return self._extract_emission(url, video_id) + return self._extract_emission(url, video_id, lang) mobj = re.match(self._VIDEOS_URL, url) if mobj is not None: id = mobj.group('id') - return self._extract_video(url, id) + lang = mobj.group('lang') + return self._extract_video(url, id, lang) if re.search(self._LIVE_URL, video_id) is not None: raise ExtractorError(u'Arte live streams are not yet supported, sorry') # self.extractLiveStream(url) # return - def _extract_emission(self, url, video_id): + def _extract_emission(self, url, video_id, lang): """Extract from www.arte.tv/guide""" webpage = self._download_webpage(url, video_id) json_url = self._html_search_regex(r'arte_vp_url="(.*?)"', webpage, 'json url') @@ -91,6 +91,16 @@ class ArteTvIE(InfoExtractor): } formats = player_info['VSR'].values() + def _match_lang(f): + # Return true if that format is in the language of the url + if lang == 'fr': + l = 'F' + elif lang == 'de': + l = 'A' + regexes = [r'VO?%s' % l, r'V%s-ST.' % l] + return any(re.match(r, f['versionCode']) for r in regexes) + # Some formats may not be in the same language as the url + formats = filter(_match_lang, formats) # We order the formats by quality formats = sorted(formats, key=lambda f: int(f['height'])) # Pick the best quality @@ -103,13 +113,15 @@ class ArteTvIE(InfoExtractor): return info_dict - def _extract_video(self, url, video_id): + def _extract_video(self, url, video_id, lang): """Extract from videos.arte.tv""" - config_xml_url = url.replace('/videos/', '/do_delegate/videos/') - config_xml_url = config_xml_url.replace('.html', ',view,asPlayerXml.xml') - config_xml = self._download_webpage(config_xml_url, video_id) - config_xml_url = self._html_search_regex(r'