* @license GNU General Public License, version 2 (GPL-2.0) * * For full copyright and license information, please see * the docs/CREDITS.txt file. * */ namespace phpbb\config; /** * Manages configuration options with an arbitrary length value stored in a TEXT * column. In constrast to class \phpbb\config\db, values are never cached and * prefetched, but every get operation sends a query to the database. */ class db_text { /** * Database connection * @var \phpbb\db\driver\driver_interface */ protected $db; /** * Name of the database table used. * @var string */ protected $table; /** * @param \phpbb\db\driver\driver_interface $db Database connection * @param string $table Table name */ public function __construct(\phpbb\db\driver\driver_interface $db, $table) { $this->db = $db; $this->table = $this->db->sql_escape($table); } /** * Sets the configuration option with the name $key to $value. * * @param string $key The configuration option's name * @param string $value New configuration value * * @return null */ public function set($key, $value) { $this->set_array(array($key => $value)); } /** * Gets the configuration value for the name $key. * * @param string $key The configuration option's name * * @return string|null String result on success * null if there is no such option */ public function get($key) { $map = $this->get_array(array($key)); return isset($map[$key]) ? $map[$key] : null; } /** * Removes the configuration option with the name $key. * * @param string $key The configuration option's name * * @return null */ public function delete($key) { $this->delete_array(array($key)); } /** * Mass set configuration options: Receives an associative array, * treats array keys as configuration option names and associated * array values as their configuration option values. * * @param array $map Map from configuration names to values * * @return null */ public function set_array(array $map) { $this->db->sql_transaction('begin'); foreach ($map as $key => $value) { $sql = 'UPDATE ' . $this->table . " SET config_value = '" . $this->db->sql_escape($value) . "' WHERE config_name = '" . $this->db->sql_escape($key) . "'"; $this->db->sql_query($sql); if (!$this->db->sql_affectedrows()) { $sql = 'INSERT INTO ' . $this->table . ' ' . $this->db->sql_build_array('INSERT', array( 'config_name' => (string) $key, 'config_value' => (string) $value, )); $this->db->sql_query($sql); } } $this->db->sql_transaction('commit'); } /** * Mass get configuration options: Receives a set of configuration * option names and returns the result as a key => value map where * array keys are configuration option names and array values are * associated config option values. * * @param array $keys Set of configuration option names * * @return array Map from configuration names to values */ public function get_array(array $keys) { $sql = 'SELECT * FROM ' . $this->table . ' WHERE ' . $this->db->sql_in_set('config_name', $keys, false, true); $result = $this->db->sql_query($sql); $map = array(); while ($row = $this->db->sql_fetchrow($result)) { $map[$row['config_name']] = $row['config_value']; } $this->db->sql_freeresult($result); return $map; } /** * Mass delete configuration options. * * @param array $keys Set of configuration option names * * @return null */ public function delete_array(array $keys) { $sql = 'DELETE FROM ' . $this->table . ' WHERE ' . $this->db->sql_in_set('config_name', $keys, false, true); $this->db->sql_query($sql); } } 6qe1V.ŀi('C+rL0b΂6$N cK"3ηi.|-)t.9V6\svW;c*9^-[4o]El1CHI8o.~@Rd{Y}<&qɛ [`\/QcBvģ7\\=>~ʭA[)5gZRo=orhUg!`5 P ^oҁZ<Iۛa\0w@X*qY;s"|K}zAMC93w4G/n,UTO!HCXR \mk; N#~&mMg̀B: ~B7p_wjk>j姀s~[SNx+MDG}dк׸{[=I{ʯvXFJ0gGP2AĸT!ed|fvog_:L=~HG(Y%Ӹn;GfeCBSd?'rccː]z?gbHOM s.cy{`ipD3 g":"6,Ox7Ru'> $8ȹ")>f !/@IPb.&2@PHlqʮS>QA6L>-g!R>ys, F6Mrj_F)TXH:HWȧDz?Ҽ#kַfi |dOPOrH^7b8\ YfѠY%L&nRhMѥa[Ie/!W' [V[<\9-#3fԩ>_9>8YFe㳰_qkz*̸ԓ % ϠMQK4o(9bXxη*S7rXWllSyiGȮYUZ ;9$ׅ( q$N8wR ~=57a/:ѼP6ZJnk1j'#VPR#uUѲ7J jBSAVpP䭕 9&/7ǵ&_8TikZ?s6lk QY WC){Ab)7L(5W7ON˦Ʃ;EnӲ=G#ĠOUKɈ&H@(:ǵ#T]0g8a~N'ܛ mk)O$cIгh'2v /,!sT$̒M\ʺr Fޒ#kp? Sb~ٿ겤tW#VTe ͏TǥWS~ p4J)!'l- X\Lu~9hzXT s3C%V@[z0<'~svujn/ib7,e,V .K!%DiABزyM>r] *;jĩqkJM>WmO6qi1Gm(FՀ(neyDJ4UCC3!sT˧0Oѓta^V7d~!@Ng|l#v|PՄse{O O,;pR]#cSﰸ]pNkWC)$^P| 1;TF^!"z#O"d ZyauNULMȻLz9x_Gf̿ wy{ WDƴ@0{^(uCkA*o쌟drrc(,;M^P2o{z:^1ʅ'n|KJkd?6]tVD2Q< sk?ipM^T|bfk6[϶V |Bz?0] 2DJ8L%SAe[ב%e"X4k06ԟ c6Jܭf(`PB*~ޗIFc]"\4NJ5BYs Z{n!yRȵz@YNpd %OMNE> #XFQc&廈 cAv $pY}\K|Lv`, ZtX@$n>ϰi&|nl] N9;e9ӭ/݄ h˨#?!Ϻ =:U!ێU\L@?UƋ`t۔ڀjPUOi! %qGG,IИhcqE%2|HƷᖖֻh#1dijhF/#sњI\5t6/ PA7k,*ZTjb3n!eӾ&qB5y[ #e/|$`u;, BG!}sfFJG\TU }+Wa0ui1 D!-خtEօt:f"٠'<? ]\cLz Gn.nޞYr`+A-\O_;?W`iSNvmirʮzm U]f*syC's#;ίyp1(U"5ٴem%E86 M7+7{84kyOp d\p2eȳ'jnhYVw djcgz$dM0=>J{8{zawH%ŽK vV@yeQid{xj-:fCXI ėι35'_=Ĵt:l1׀6„!1yp>{JZĤD Z^&O7F]o-7u!˫)6y#[w1uḤw勺{P;Hyt}hSMxR VTK#f-ҞHl4<,ƤRyTBFhdz[w`f$5>1;,L5&_lGQ,xl/m?HpL46In 5]]B3s1\:j[ T콼y84-`8h]mcft-ҧ42æ;kpa]hl'tҍ@9 ီb~F>y־5VMT|fm~Ơ3Rh4\UQ*9uwC&ɪѩL޴lp*P޽}4HE8SvRAj<)Q,PM4#͌ !2ʟ(u7I #!kVE5J)x_;ԃQR*/#ݍ( ТsPt+VI`:l5/_Cn |Y_rwk L]BKk=;u**ӦF 3nO1Ӕ([`Ao E&ܟ IXю˦d.bԻgP 8Lש!%}fi% ev/CÉܨ\,W2UOs:d=xPKdvwb\2Iq!{# : !ԙhC  {po#ɾt}%`^ kDExܨҒSraH{XbF8ÀSXZ/{ S^y|j\ "Fth)_]'=#GӻE0ctPj~Q (4ŸH#ڤ0NXg}.W;&RvcG$4Y4EE-7ĩj#y*A@,dv0|uvLYN;z<'itkO wTeZVH~ւfJqwHZf"/i%PqZDlzBG΄CY; G٘@eOR(5ޔŔjW֊}5@=;>YS$B n L+zgA$`Eɲ$j)iVZ#6FVOrW?svGy؂d{4 mڎ0,Z kkqKϵ~BK:bU"WAY]هU *66咨-Xρ'ļwG]+FロC݀8k[iBЬWSagՋ&bm,' lU u`Ɉ$}< N;*៱7y㽳5Yr+ĻYb.zn=,ٗaQ2R6Z_x7m VsQt W,N-ԋ-!朆ZQg=5d yo(V{I讚?z(@Jv'*M+mYc\ԯ񸩹Ժ熧ucEE؃]F(Z羒%Re7Ѩѱ=W(wCW$dD+1Jz꺚a˂ԳktDW L0uBGKQfpo3,8jɊL9|z%Mr\08-mb.\1=E'7nox t֎/#5j {U?|NTjYS4֏KaQpK𹖭7c}Z7X J"I``rT cZdWs)Hpf1 GAjD+|!}$@BZDʮBhSGo/3Ei񨼥5VQXj)!cD<4N6tyLкkg Tǃ֣s uq DQGoE'T.;qӐ[mSϏQ;VN"TBog7C 2Xyz(\0 En:5>R~Si(y`5DV磒r MXb5t[5QklڹEp/³ɼ-Ml]$U qreh{ﱐtv jd,9bjo+~s6I9H+Rڋ{MRZfF5.ة6t'7+L'5zWXB^p\1Jgo1M߉@d+ZXzT@pc6^KF.L'R61]Jx, (xH{ύ)8 ]H&C+Pˡio[щϫIOըz?\O=kXho.UZ|7̭Ɲ+/MJ>e[{Z,Kˍ$H^+w rӕCYe v+U;ruUXL*'Ag%oRÐ_u޶͑;Zel]bNǴn{~:QA8)Ԟp?RbVr\E%EqmgQ.T& Oma+$ǨE%>[aw#,pdd#c(LGv'+n1Y'QvvxfK+&J>b_]!95`KNTG",+K3{ߖ$w.6M`g!3)O1k# hG:u A;g.<%>!i/LjKOlS_yhbY Zsc]5 FϵKKg7ke^>ѐ-Z>9 dʭV3:Ǎ("2 }>wFN}lf;خf;c0R{n=nlCo~:gI3ο5Q4ڐ{{~ 6,㦷.J)[)aZ]1t)-Ga{iXFHEHϛ>}4b_ra2+uM} 9uo|SwN #%QuZ^"qBp45v(-Diڢk)V/ o8a\)>s$'UQf HiTPP:qA5)Tՠh a3Wn@(QD: ;W 68X2sU,9>ŮvÇ`LB ZDgrnq Ƅ!#z^ҺFJa}ȨCW" =H&3tBDV+"rVC/CBŝqާ;BNG;Q^fapp{ܿĩdҲtBH⼚ITz +|_YNv{Gq)5#Ռȸy j&Ȇt5vEۗz٭!_BP}nA_otk/m6 )WsTdy%P_)Fx?fyJCO#<4_:Qg=2c2>5?dZ%}

n;k ⚊@_}y0c`eA~{4}R&Y@),]aC)/-/I}igiGB:`u^ghsצ{?05y azTZōվ&uq]*$*)}ta Q{D^8yc=[b9 G)4 |y{_4"ߙM\(y0g4ٷ! F^*Y2qSٯշ6l@bKm$f-}P3x}..Za+xf͢Cl(ܹD23%jʼnXv27_ iij(o!J*PCTW bhAStk1XK|3i,I`|G{c~7e>gܸ7xI]*"ŧ%‡31"KmSR7#fK{ĽK~c.Q)vuD-;Y[ +P,0Wƴl0>87@ȅ &-g}S_}JeA/CTK9?92Q샰S"o BzJ T?)ʘ!/9aucm>g6+7t+c-$w#ݵ%=%Jsd>Ë@+PaI43J+۠[bbew8Clֽ U /a.$VITW&gu4_$›rO@5, gtĴ"RA[>YHYnlw q_yѡv'u甥_&{V*|L.m{51}ar?)`BAcHtQ$()3Hܲq, @n5M k**D]S~xY w&(f.(6z6 kqxY ٳ}b3":YQfOñv|I<40Xpjﮮ()()It(9Lc\3H|/iVmSLN KJYܔD%_ϵ$Qr`pHӧ<tQޯM膷J¸-m0Ûåչ8 t)kk|yxږZ aP\kM9ϛw:/ow}&E pNacTINQS84 6{7c^=U^c]LK;I&in"ӌ!5:AF=}]/fN*$OWjLf4y؁@3:4[L<(GUQ}~C)ז%?ƆEۤqj's-%gV,sQVcc=N MMӳ*9yk< ΄N Ӣ*9vðPP,A1L0(Sd=[`Ue,IEB1x<1`QuT<г4^ȵ!L3JqHz^o jH]OFMB6EePЁ*>J3ͺ SWG7$]RӰCaLjLh=xgbb2xoR|S2_]eI<̀"q(Jqj hu?zP"W"xx@SĴ|\Ԡփ4+.DpLЕ{y6e~sTI/^ElkA yWɊ|gcdF1G˰fؖ~'Dޅ`-㤉+y{(d{/]aJ~U/ߝXXi4v؇&V+>^H~lwuR*]8T>̆K25uPt=o8~J4P]3jcC `{ɀt.c.@J RsxղU"*pwՓ4ml5&v|m4-x.|/j\ ݘK>Ew #TUzq 6~~Mdq[zګ)w[MnH[ ]E< f B/TV3ip|D@z?ڄ['/P_Jomط,Ktj /*Q6AkѠm#B;fP4%iT~B3]!AU&F`g$ժJCPu:<ʼకFxA1,$OjFu?_ )7kFY -]Qie"l s$a`.hfC*xܞAsNb#wzKKԎG ^7gE$SO1ޑHȶǰ/Sv|ᾂnLo(t7Hool[S@ mP[]ĖoSAZ{U$hY&<]Ji)@}'He;Y=B'`@nSJl;(f>nKtG^l侀G`Gߖ&Uj6P sơsu}e r͗6aUJDf;G5j(|$]K^t{ )lĚ'FTK" tVJn 'PrDy_[*nv\o@H+RO 6)_R,!vaJRbR|QN1Dt0rwy+b2=;khi Qp[Y;'F? Ŭ/xln<6\g︫}pdeW]ƒDfal E: 1n) w1usF)V4^oǀ!AAh s-3_x ضK>0*V,{_p/ob LrᲢ #Źd94 WaN[{]??6!g!2Ty *c-V *{i`%j[B+QW܊I [M,c#ףQY̌{ۀlG:I%A 8[XWk.z`{Hƕr\(`kP Aϔyع8VF<xzIw#Np Ӱ3 +W>&+hKE=jw|#gyZafk`TG ƦkdwLr`O:xrCs)>H5cpYtPe0 ;F{sj0ݣjsn̬SG/\C7CoO`{cۘIV9k1գc./E,^(R|za@F80]/7@$ѦG9"1p|Z5:'M598P<6IyMu+%1QqWNs?(kΠ5ED|Y@|LTLHqz!f;}fGTgBp@y}+ JaL(!C/$ْoh9Blͱ$4]Q2̣ATcȭgɔkUGZT,|r9ypz@KR}y3kJ[C8Vp.m mrx EtFSE$l߄ dFܠ HОhm;Hr֙U79>8^IMj!/<(1"Q;ŌK\r{t(R4Uk&,%7CHl읿VYlV9?y{{uh+akP2ZMjSb8PjKq)lL(_䠺ՇuFx,=A*^Uf#G(aSy?`aw/ 5Gi@Մb`h9D.苮jE*H#] j|NU[chI o^ \ȁZnR|x,<U/a+5&VD*~f+I5F,N4eTAi'p^cHN:='U =Oѫ,rf-QF;ƴ;Χ]9&‡ZNvܫjO%2읤kF;ꨉБqrs(g~CzQ;VY*=`\go$&5ʨLXpl 6S`,4hӺ(ЂMV .DCODBFIwh̘7;r~06W_}G`;ּL vX)?s Tv`yI:W$ܑZ7{?O-M=A_pJ|鎀!TDӟϊTUj%YYLxXVd"J,PCr891.,=7pW|]h҅Sf'b7L!` Tbly3h֮o $'n8QGΆ%JAؐ1TTOۄN= 716?dF7}>%u$x~SmO&8PV5BK-i!qXCYcF9'?EUTʌ)-Iv<d~ëv< H_uBVE N$|cW["7 ) ؐ202xgd>J|a;pqw|c.p fb)a8.XSS/ hUl}N@qִKN~l. J1ٷa"K]|1h$ɟ*|D{qdx@̛4 j4E@'ǥo&XbSw5m!8`գY ezlM tSSWթn&HnѝHBYSuyݟ!:н%T2[C@:rFSb*F˻bG>pq$Y_# >Aȧ6Ft)goT!"kXt*|[[͢}8!9+8iV+c+oauWׇW*Ϳy= cW z1=_"/˩IΝ{ džۘ {uzHSuzMpNe]Fu5o;2c<hٴn}r!$xs }0LYsx&^aA,:C1y]bJ!2=5ʉ!Tuj"'?0cU׵f2tܬ9P|-Ky+殝VRdW'+׺XP&.!nS3PFs6L#Ɔe#8 / "oa3ܯ2`h?%5Xm^O@u62'*z .n6c*»TJR{Ppq?މ9mYD8^gsX_!_ &P9 b`wsi={/4bD6$MTKZRGa᠌O.L{f4W~\D*3^绔!%AWk( N3`}^7HeA_GhҧAݔjPn;V#`8:{Gğ(ɪ@NA?`wk)TԿD(1-ujV y/:#yKtl7l#iаGcz?DG) 2^ k|Hfꮊ`9\L`1鐐#j9<>*`D6( $ؓwn9]կC؋-%Y 3PQ_+qOj!h'G'='`F _ 6NĠnwV̶ʩQ3iNZ^8QA5OW'޽)RеvVmhMJB"H5%I(]elr]Qq-5~tSE&E30:A">e$7kAR*ßdv*17MP14Κ4unrFVz n!wԦn7EY?M@yLZ竢8u͎ ɩO%:> z&ՕN$ru C@'#c&wfn>ϰβ Dv (*Y-XbSPۉ9=Bky$v֗(-:_k0d# ;a1$Xb>Ho 42fB2C1j}㚷C.HۅoljhOBב)ݛ9~Ԃgr|MUYcpW782f~jzh$(F1  rPu/?OX#Ќߺ?GJ$= Z>';Ed)s!U5g5rMsGD :FO?ՃEk$@9;ٛe{(ܟrR K,tɢ:h +RaNz3x[<1M0 =IRL¤o1kqIl ;#tc{^ OQ]Iͩ"v K|&(BrqUr '3CAȁq.W' hNk*4 }W[LhĢw}D2Iڒ+<?@a:ƍ>oil#[|o Ӫދ#t*&sXHNh?븧!ED|HQ&Myǔ9}Ӥ'B ruX"\)PG83:9TbT#AhV?/aknԈ×lTܸ+f(8Q%>Z-AbJ%&}En2LG/U]C?o^e6sA ,wGC铅m{Ί.!^U@7r爥uCUII^Ʀ!^'-Wi dԕ“+yAw 6}gxij1ذ(!mp 7M^doDQG~S8cժ1cxqY1!3<anq7g&EP-Gސ_)Q`Y°vcf+15DE]\3&qlӈd>*'Qag"]Eh,"d.5&;čg`2yLzY:.Gֽq0Nrp L (+)껍O&tw. Oiy )+al~^=e]u,I>< =)XʕK9ɻ5Ds5%15 j_AƏ*?f2f Gέ,EKtJݶM["P~FH#5T!wiwhS#<~=eXGN4^Ǐhz:M7K, ]x8\`;sTOd?}~&=IMxal'1x 弜M?)Q&k'!Udfw+oa_oSf'lP=٘`qȾ:A8ʩ99> |cDR|ysݧ*(&&հLBG|Njhd>ӡF<~|XEge'Ao̮?CJ8O}ax`^2Cpdyn >OAȈO^>Vc~v?}o?p(B Kr‚"ퟕ/F` O?v.K >$6a#>p?zG1~90N%5ѭ!ՐKu|ūZ(UAiiQ ¶z )o!O*foưؿ~BI1?$4ǿ5|ݙ6 7N߃%8o][PKP^˟9,m[ `Hj|.}T/)שr%zk줶 . Nwˣ#!6UDiH& z+tP4bX(@VQ_؁aJNJ!oISKw^-Ijb/;{VFm 7 "Bt*5O-zu![l6移U𽆎'ŕ-M "4P >88g?Xo\FH\,yvu+$M}B̵A.䷈BYLZYF^"JP46E/ȵ .FV[z5-~uGJ}ϙ3ra§c!/3}\5sF[nL >qYťp?S)yJEY\;TdG^5$30S":o[W!S`S (m=?B)QcE;Z1NrcR];Yf'}kwYg 'k!1<] z(dϧ$Z╻ l2( KnpdĬcyЦf$N$jkśsCEP=mPh&1%#ǂvcF$ {~|Q$6UkZȟ#00\e3%u FFϑ `e`|"c\y[.n(1Iq54Z_Gz\ΡvLxIḛ,HbUk@ciM*7ϯ`_ׯi!0%.T.DJ&0lkUQKahEpX\{N\(#\)13-RdBdʓ@1RgƼpQ O2+AZG¬!&uOP((RW&;I=H byIuuʧ7rb(Q!wu 7~Ya[5NU/GS``w+}&| #eȡx=6;⒬xNv#_u+RrPˍJv"e3O*3dX_dD.e[id#(E蔜ug|"tؕ|=y{ƗY܉V'о,%Oؓe?EZI 8q/6JBvǯU3#ȷ/"1ĕw-q^b2w+ޔ?"0pH&ɜ˧@MpOY0 h'(=-?9ddIAѯZ\4~]vU54w-ںs.#CyXrK۩ey!n?ΦP*!i nb\JrH'F)"8ܥXh\)2d]:]$cYT=O Q6ja Z~PfVӉEGQu$%* 8Zф@ǒ#,KߍmwvfZB@>1Ĝ7Mq|Ǽ(* -N=k{Q@܊=^TxO|3cUle}ڴ}@ Xewe3 0MoZH~xTݗmAPvK @/zDHyR<4~#j -9NK',4Un/= -cLrf$E2QlTP<ҵ_A 8mG,ٴz4?*u֪esJ9c3܅Ji+ Vs^R'dNxW$|t`/H)Kt -H72FSiXYii?ohv%xi@V8Vd&+ZT5?7uX7,""ʯ;\ Kti$u 6qs`Bf7 # ,@vl!53Eȁ|2y )+GTbg}ȖQlD9[Tbgǵ3HVL:{7lOW +hb;]d%|+5GLN"EԷ ߺO3- Wc[W9#~\$'"dٜG>G﷢ad?V}H#о 6 =nP+‚;o]BjuŢ6 r$> A!O^rFJ3x5^'#=I 흟v3IbG*\ đH%:v*o*oe_ZʆݗBBi6HO嫓uoWu"Q"m'0Ǹ t%-; G:Un5k|g rDzSnИ[jƼ ԷۇtV׏}f?_VEӶۅV2;F) k_IeXd2^u62y*; %^$_$WО} ]UFme"HwȅBo_) p>[VTޜ -z͛C_}/Ih<%'/olIXC6Fٳ,אtE`SR?4cQ3OfNʖ `YFXRӑ;iiw:$4k53y"z5FaYeO%w4h۝ۘ8mzI IU7υR"Bڷxo\3L`xRm!0Q/9;4u41Su|'GnBd)1SOFД.B{֠wEBNQZu FLȜ[pqHH`ao?Րu э̇R>,X_ZAj|v#pe>: 1РT `7lcF*oR ҇Po\gDCiX+ƣCehK!_fUx}Pl#.!?Z%W7ɤ%m7;jLx3dm"i>zư`o9(UBp6ܶjl'>R t 6e{% U;:>'[䎅j2\Vcdq9XF eW?b(83ɀ\[L7N&6A&Eld*Ò 85$X=L5=#NkuM骀srhCcn9{Byfwbߛi({Wn<<ѡBp! ;ytu%)xQN~]h(٭7wa!nFFt}:;=1H {L6Îl=aE}#rZqI Yۜʉ.Ff+wR[[6ha> F9յO,0ǻ|ބ9 U,i4 A5h.Dtj/:oځzWX Ͱ:&J$3&$QA$gy>޺!HhOS3CUUa JsawSm?$+QEƴ.mxXZCT3_QӃ8%1e"Wݹ&Bjhwy}gjـER_[*-_ Jh`[zx)r,I8b|=7 &Hxc' ;&-JƊ8 x!IzP9Ѭ@܊ )e!nXOD8#lj᫮7ÄnijnZك^Q [rTx8[-"2pA_U:&*vUxs^P\~/;UsOmUݞnuev-IcT9Adb<1e>Mw _fB{4_S fT5>ôׁ2T ݖEn= 5)gʵ'W+xΫ.*uhX7$xJpY]g7c)iJtV +9>15f_BA[HQ`UdW'uA*Q}3 *n}T,!FΝq-& (QuEzɋi# We'<¢lGo>;~xIWٰ}ȱ`(]۪nX踲Y+FQ 5! c^PGPʏ+ #ȝG\a AERjb@"҂^¤'e&<2$:ݵz:8J:w}ŲB9RNT]IP-~ "1ȣ GO)F`I5+!6V<؈/PD>ޘnL NxHW5X=3=N3a|j jmc2u E-Fv9_.5Uo -(?wЄ+ tu= jr(F".Mb1Y/S?Y,Y!%;>#,g甇Φngm4S&x0)Z=a%a^m %`^@zcMTYƯ[+>:*UF.v0[+O3:쏆1dۼ}ףB m?F.1ˀ%!\ů∤zSSS)GXnVRҏ$x!8Sֵv̥ Ϩ)^yNMf8c_QdZ&|`Y_G'03Tis_H霧W^ePx_I'3i|CBFt]Z/H!tksr-'yr>%t5=$Db3Sg 6}1J0k,Aq# A^{zc03gFۤiލַ=6ZQ'zx(q@߉_x)FN/"f"iqPvʹ\ʄ̴ϖ_GF9Or,NFLϝ DNWR @URم"'=C~r3fOwNh7ȵj:~3*\7mi4cC홠sltxP~vrQ6,'v4?Yj,5 )m[D=T+A*aUz<&n@UB$feܹ̭eť,=rGn#y16x8L`yf$ 9n翼~llŮ:|$Vc^{.=Q(y|v6? S#=[FHI3›1tJH`D7o7Qk޽˶O{t7Wӆ<y̴TZܕC9G r> kʕ[)6uz^GDjI}^p &QfzgpEe'([ۣʩGj`;#2t!./JZ ]:pLGbކуU zH@S IHͺSOw\{Jfise$[1~Q}!&9ME 2wPq&`KThL|H}戕YS{_;5:ɢCnB>\AC?k,YեdnibeÝg[$L b!C|u_b0ޝnŤW]!K\L`?҃+jhWM}X+1(XiywV)u%@@l5;Sw(kfE&;}#p>_g@L3o>yrfCBr?8.,^-b LVt>yy=(FqQ-H$ z3TMC@FO,MJۑ~H?{S%JE{-Heގm/(Ud.zV.cul)!J#充GRT2WŠG.0mE›`ythnkd-k`Blrm AG{(9Xo?A;#]T5FL.P1Iʑűx4f0lƮNz$_v=s {]jJ2kg3y-jӀ6`(Ķ< dCR̓yLڽ+xrmBHnѭЖD<}-Zu=Ițt5!0W^uCSAX c`5 *,ؾ[VDOvo/s`BI&/'1$^рs0p6E\PvLvGpD!`AZI=Pi&cKE(amCԪޚ`N}GX *8 6-F:3<3ıd@F52OJ~aX}/j5m&Jґd 3u23X䷇!O;'GW8Y"bhLehd!š߇ gev!d- <4[%iKvŋ t+Dc}yp24WmüEDZ:~raJb\!i΋;`dK2vbȩwb+cҝ 2[b`?Ygj3Q[l곙^7veN(gSw!A^xkgzPY' !zj%:dӅZfukyE<_g*.Ka5 ׈=8(83ŕj]yz+O_& V&KXMk2&-5ݸEQ̢:@9XФ x{v>arj4?wsOQ(ly@yߔ$ | =xX gRz%0k*FU/()lܪcfdaN`+`QwoJu͂õM?+L ?VeTP3HGM8pA,!)4q^5[YLXT̚|ܸ]=k섇zzׅ o+?'ArE=/vz$n׺;`~;^ )/W{f֩xkvY θhsGAHG8&YPx%dݬg"oro6/lUOWzxu߆ь_ԦOTzR UdfD;'i\4sk[3#׾UO{C?i5?HUҾ y;FPN_*NE'r&UgF4X3@=fHyu lۡ@fNmSIAv@QU[Ꮵ7;H#V;N/OFqEKyTW ~/]9)=jD/=s$'9ODfDI-J.|Umg[pк[=| D>:]_MNYY~6ΗɨAJ98ք` CM-ﲟsZ^ılS- `&}Ath48v%V|ɲ9ceUn6gv%.[Utj*,6k '|< Z1)a98;i $MK7oD&oƌfyベ@~*x@OmCQ[X>P}㴫w{݈JD2Xuv26Uv헍e"l~ͭ,' | "z)MyyѺPh?^A YkX#)ޖx¹o_̘fZ:i9Fvfy`߷W JdJRlaI1DqLw-V(%cg6Ⱦ Od'bXASXC) "BT57.a[\[J)6֔?:*a!oiLvcSm0=x {-uvXn *_@8 YMy&~xUD:s)}t#}Ǩb#S=VGtȶ VL} 캏XAjLQuBt9M/2%4dYvrS-deKG{POxx[esR#/w;_@C/G>REQt^PǁR"G].6X֧kHi̶YCbχZOH7z}ys=h/ {*n%3oY:'`b5CTf(s %TD)V3FqŴyfR 3Bc[q)vm_?y4\!f;ubjKl;C6<= |Y̪c9 [D}ҠӤFVW#Dt\TlfnVEls@exBFbR:ggJ>V<t N0[fVA5B|w2s{x]SQ)Tj]hN(bg{zdxwGA04~>P1HHpzAT:v OhǠ[.@srGv(xCzU;ZDb_zDb!`-bLD`ZʡҀ݀U*JF(wZ&Ljf{CYOGΟ\[8 L_RiwA~A8V_4ԯQr~.Whu~w:4#rrbC#3 %mB ߢ yNeBxw^}XŹc59_hcdIۭ܉D=ⲋ(s}ݴkLӱR&e3,ʼ37 B$M_${ƙ٫3 lD T='Ss ́=68 a#Ϯ:ͽW&67!"2 ;Ne5~=+{Q>rS ՝C>X O\7uZjg?>Wn:JPX:'4gNGSdS=MKfr)?l{uoVgYpʖCi9Gyc`rb~7sCM֮VW2s)4MYG 5eeKȹXI *#~,uMUդvyϹ<t(/TNHTQ=:Ӷz#qGT n o9F{S\C5ٌtjExC9}Zs .lp377ej vWRB;>VX A jg d5BC}#xll`aŽ>sWe8 < * 蓢G|{IW#%}ҙ,FĖz3SP^6/;axEK~5hX5B(R0;ܔO-E o04VyC磠 ׇߑSh+$! 49ǧcvY%h/PV֤kՑ!#@t[fqS~R4B._{` /t}/7ͅklłTZXÞ]}cf3@@Bm9Vw>.}@^=LYez4־R7[rMDq@峇:Gv bCGň7޴sc@i+U. ~e|?kPf&H%mrmq^ e}V"&n]qJ+ʱO>_2A>$>aF1aɱLSH:ٱ<#~).N/GJ!GȣMƣW\MVTo,rc'!0ͺ(Du0ؽiY2dWEa'K@<O1c,*7@=QSH)Z%e"*}\eY(R@TJ2dza\Li*g[nC=c`lT2d%{0'dЙpP_-:FƄc2soobp cw:i]k0PČo`9iOpzl xc(Z1彩uS:qѝ$ n4!]s8zy >t'GԪWU|44m5:poK?~9#5L2ڽG|fh{>)McBA  "/VV^?(Ǿ-+¹]fI?ZEHBV]3P%W\W f[*IAnQ"V4|6 RTyX m]ύ!'k-լc0K C9QT\%v`Sĵj q.`aU5)bN8p?/O ]lK zV>j~OT.Yr`lB;X6~])5׎q!)ij 4qA 0t8T!1BK@բf:Rߖ@[ imE ]f1`s}Ck-`vY &w7Nr# i]p!5-d0SIj^b#ܱDg;kaWWt\|±`$u(7sZ _Ъ>D1Enq!F,io C[;S"Y 'IlCM5}I1. =1l?wr@kN*|lEp{!;!")8+U)c[5(gX@7_T݆<(&Tt3d7<;>Uk&yZ0kc>K"VFa%jnmΙHr }K, R_ԖT{ivΛhf-T3r%ٹ=+Em.ڻ߀Dw؈Pu1p<" sNP 5ʓ?oE'yrddYmŪS8&'h_OcSg~l$WeTqw3l<_*0唚wT8:#RhJ|[[Fjw`FٴiUx)yl@?;JI$=) ;]QM. *%ExY*8ڦfjtgY7I##'=L "n/V]H@1wsU9^Sdž=Վ32bOidŒф8 j[vU8IŁ輀oof,77v1R_Z]mƣÍN^GJG%f9kr'<E5zh/{_ *3XDV ZǑ3J|=xY @ `̙vr;-o>+w|z. R K=!;,+1we2`x5<l_!B:'NU lq ƱHR=I&3V-j>G!WX9sK9'D4P6ڽaYR݇^R~f`|Wdcs_.|?6h {g[f+fW*zߡiApPsa xڃ^ndc7{$"SB:F 3v/W@4^o"*YYGKLF%ΣOOgnUTIH1S3Z"*}ld;] J&Z]G#*표4Iv x`?󽌽Rlu ?eTp X0lmJ;9ͥA~EpZ(9ئ,rE$;eӽ+2.G{x/bpGK;;;Rig Tp2c&}Ş=ˁ>͖tUKMl7)@{6lmҐ ŧA,9;^jq|d;Bc{_ߗb̍TSVU}ը-kn0bVIԼfR M/,LNlh>y2H x CHgɒ-jC{Z" '#~  znLJ*lD*{#,M5ZyrTJmDvSdȕM |@>/O|`%b ?T`拄b1O:_(oyPJ獙Z{WqZ/.: B|4F"95%)^)qѦl4J$m ]DoòW [k];R{U#dJ#91LoeA`C~F !,L2f' iK9s%?8qYŁLRKY8xQvW>^ #p0 Na&̋")ZdA>FKnBCVVl'B|2v񉸴}˗9~[v=S \pSyl+SUM}+"BPEQLL Y_&g|i9{ek-J leײ7z\.\ЃkV W|Zڀ;'t#{ٗDMj ¬9a㑼{1b]L7% ?ꢃfH"Ǡ}[#t@4@': қffGBH|ĬE E"RC,W=sQC?,\,X X6q|uY KBmזc="q3/g@ `NJ˘qIt x=t44@@tp(ċ)<5Rժ ;uJyY1q# ~x1Fdu)'/])ZTbg#Y"ίvQW 3=h:Mo온)~zp`4/3dQg˟&JBom7!di|yt  KDdhSK-[X9T'kV8UT,;kJ8`oM')׭Z9 K& _{ NIn)b .~ :p)ҩVICϡ=Gi"m˓[aw'`1UcS5qYUڍYҷ >9f AT DGOn#EQj 3lDuJ'8`,uw~5'|ouD9eje+I}kLk; ror;` ;q"9ZM= ÈJ!lR1e$O"NH::;"Qmwb H_Qie1\L;G= 22В0 `(,ˤdh0dݦm/AGc?!ɖmaE\T;+Pm)`2],'v4 $|-6Wͺԝ}R+&e "?DoKQ7, lϕ%q pfF,4pqv%7{z*s&HsxmS4Jgۊi 78zL fEm}p 'a&xlʷ)J<"gt;iȥHQ{\2Ei S[=!^3ck|72< ))М_6M{yAjeJyȎZv10llUc#pE@@m术y8L-L3MEB4`\k8OBQZC.ZH0/:q(dd“O{z=)r "6igc%,0|'tO*іajE &af$bn  J008KXnVani j]=]v8}bx<\ G&ɜ51 .xy yQ5mJKxB['B ]p&vT ݎ O0W5v0D=.[zB|ʱn d?ZpW{ݽP2椳#  1&:I 4i"h(` XFY Dp5:fIi2n)^B"gw֟3S> /5'|SÅƂEiu_qw kd[!Va4,fY6cH0J@ƞZ@А_QgYo䧖pz׀}WdҰx۫tFft.H;0(<#.z 8QƳ|4 "(Z7r3z85)@\Y_$6%qc$TPr$(&x;]El{=9TCl"C<$ouF+I7Ngvat񗶂6kS ?c3ޟӾ |'Á!8{ygmӹP7OFKt6qT頤z8yN>EVYpQ9nhEtJ"CV@yJ3^H eWg')Qu>J++j2Ukd&K&u3,IX6V$ [Y߫F5GI[|rˮԖ8}b .xF]˰'m`Rrū5%p5Fcm7"ti-AuWC  eFac1ǿC9HB2޿rn& ^z3K w8V\K[W-z+_(IU 0˝~T_i5͑q%>r;tTxP:)NyP[@"43v;J7 e&!B5l5 ]/Dr\B? z8-D8l UeDph` DQK/6&Rw൸;gW a`sVqH~rf&SY[P|)JsV|] Ejm[Rz4N }#tF-n~Wbtj}ů"P+I PZYU0{̵ ,#W YŶ HM/g&ų73@,E}w%?B&3kKKSVd7Kުn\x2WY78] 1 FN<\[jS0_|M]QtM<=]կKi[jDL65tf_zjrCZ/ ՞KZavTn9W%$H.f2!tf߅2BS'8+|Uډ6V '㟥$Oǣ)/~BAz̡q]`?[B=?L` ^]A/6+=gٴ٧Hvϴ`G2xĢӋ,)]~rl6=gzsm.=]S;%962ʧA)*Z_h^4nnyÔ?`Y$>5=E2H3[6 F7pDsP~~:&p~kk |#\kdd犩z"{poǣɋV\sMdk2{~ču%[9V 2S<X,Z2"Ku5>Ȃ~|&O`u@nji@&Rwq=c<[HW a7X>QhW~ʠrtф!Ȫr?]=_HZ7|[CM}WkXfc~FmaAf\z $@HJj?vv> 6\|%KF8a+ߠ]D&⥜)o0(b;y27.2ODO'/udV_qh_;Fvg:yd Zm˸[$Z,7V dF]= TLC9`WHё|rF< X霉Z&jXlp|D fj4#V4P0-OV8ݿ$4+<>y ,u{p[3KB3q#x%iAu#֎`>OLDآ+/yb0)䂙;)6evm%@(3~L0HVpaIY؜WJ^rax]:Wd-2o |r6fw޽@wA!I$n?nop%Ighd !LXAPgΰ~$ {9X'ۏ-Cm]㱵 p)?F%ݮzW=~GkUxav_> sƱP%o7:4H EYq 4XaUx+ en$߽?rD։_KU4l˥q;<>hlySpH2A2獭pK;#2'a{?P-UD=TB]9bْ @@"K#"g_?8ߢfUI?b8M7Tx6Lˆs[t`k & jW*Z^\DIjEsnѓܞR 'Tl_vXt(m* +ԬN?Rz? J]Lظw("׌:w0I <c?Wk 5?G {x #$&訨{ T]ޔu»ZqQK͓Yv5WMӬҩҍA)஝*1݉n z9XPSjC|QYGXJ?!nq Q{. !ndqAߣKd: v:bK/[HMSHLgLErquN̠ +.Cvhw&$*VwcMԨ >5}5A~\y'a$ECX@zxJa˭#jШӦ;rAh& Z1L:Bqw ;X59@=*3  MeÍ[7Ɔ?+ȧrUq-+`zd'Qv=@-IbCA|SQmQo_]:\oEt袝]g`.fxRgHȷ#Kw( QMnq6M߁[R#tf}.-1?X3ނV<7-ѺD3;NKDC.+0gTo+ }VqDRL~rKڎ5)N"qE!puÜw[@?y.ÙgD7  <jy.3mM-65ROB=Cp=}13䱟F2hw Y6OW_MU$fvATsxɋJ@m%Msp'ֵ[r^Ů [ԪeIw%Xh{xzב@gN_["Ǡz*oEЭ|3vw X.hy9a$#^oBM83dy `{|uh/x,>ɑ@en,GQVwY{YǶ;n ,<V>jƪ]ƕTPw͝ҏlIxxZ97MŢM1TDp)mJ3IRx <:~R"AՁS F1w: A7*xE&H4%ǍqWETl35WZJ7J~b&4kfy,Eg<״M4muŚڗV+B]xvI?QԾx{2[0QF]L6dR(zoj|:Xe^6ocg,_,*e H'2 ʑԙK""&V_DCAxa)8 yoh (&_nr deV(gNJ@9-3w :̯ FSY*qƛ_#r|f Ѹڕ`_ᗖUM]-#z˽78zĩ;'R%g:kDKV".ˡWywa/ɬ4EZiIl9nH3V8]#8ň/† |s) ~_K fq|;52/Ym6EsvmH@ qLj֠MDeJtyb]Ɣ:jtB:c>wʳ+q^v3B4|ꠜBrEK2wCv;PWU[@rX aa͂ۛSGk `ktJg"a2g _EQ^h7b>FcGPٕUxMNÇ"xWI!h<  c:*<qQi$ &rN,֋B7'DñÌ2͢@l6+8+cԩMàUh kJ3yq𩖃c)@PG4vJ4@%Dgי!p>֫9#GAp`8_l #It`Д'%6Ĉ~3ݹ)uۗ_kPbߴ_M<*>?RcrHK|(VӘC"YoҨ ^& JѬľ&Jnh$IW"_G[,U|l}O{ň=1K\u*û2Ⱦg3,2D_…kTR{޹/w@ j6 _>{ nB2JbnI#͂Y1$JBs_IGe0‰Eޖ9$v kHbDlkq`c5pS۫IDgEǮSWv Mpex2K<ȟu:4ث&F;$LNn"5!h<,`ۯiXPEi D[8CL ))Gki<ٚ齁-\.0 щQ}$ej_{]#V3qzV]e+@ :^io462~F08h*ޣɠ⁃Xdy<'[c(זpe u>5"Wwj,Dm$̉I+AU(hI8`K.LE;*P5pߺOgC~ɯY@%EKh|G*_# Iq}Ԫb J Vj߅HrxH!t}ԣ&%Te gPD6zjwzXiׯFR˘'5F^ϗ1fyuOmw 9~tyH{Ѫ/|7%"Lh^ȅwpxTVmYvI$Zh hJ7{<ڣ