summaryrefslogtreecommitdiff
path: root/fs/mbcache.c
diff options
context:
space:
mode:
authorJan Kara <jack@suse.cz>2022-11-23 20:39:50 +0100
committerTheodore Ts'o <tytso@mit.edu>2022-12-08 21:49:25 -0500
commita44e84a9b7764c72896f7241a0ec9ac7e7ef38dd (patch)
tree0a18a9c3bd8140b6ea41ae09af135a424148829c /fs/mbcache.c
parentb40ebaf63851b3a401b0dc9263843538f64f5ce6 (diff)
downloadlinux-a44e84a9b7764c72896f7241a0ec9ac7e7ef38dd.tar.gz
linux-a44e84a9b7764c72896f7241a0ec9ac7e7ef38dd.tar.bz2
linux-a44e84a9b7764c72896f7241a0ec9ac7e7ef38dd.zip
ext4: fix deadlock due to mbcache entry corruption
When manipulating xattr blocks, we can deadlock infinitely looping inside ext4_xattr_block_set() where we constantly keep finding xattr block for reuse in mbcache but we are unable to reuse it because its reference count is too big. This happens because cache entry for the xattr block is marked as reusable (e_reusable set) although its reference count is too big. When this inconsistency happens, this inconsistent state is kept indefinitely and so ext4_xattr_block_set() keeps retrying indefinitely. The inconsistent state is caused by non-atomic update of e_reusable bit. e_reusable is part of a bitfield and e_reusable update can race with update of e_referenced bit in the same bitfield resulting in loss of one of the updates. Fix the problem by using atomic bitops instead. This bug has been around for many years, but it became *much* easier to hit after commit 65f8b80053a1 ("ext4: fix race when reusing xattr blocks"). Cc: stable@vger.kernel.org Fixes: 6048c64b2609 ("mbcache: add reusable flag to cache entries") Fixes: 65f8b80053a1 ("ext4: fix race when reusing xattr blocks") Reported-and-tested-by: Jeremi Piotrowski <jpiotrowski@linux.microsoft.com> Reported-by: Thilo Fromm <t-lo@linux.microsoft.com> Link: https://lore.kernel.org/r/c77bf00f-4618-7149-56f1-b8d1664b9d07@linux.microsoft.com/ Signed-off-by: Jan Kara <jack@suse.cz> Reviewed-by: Andreas Dilger <adilger@dilger.ca> Link: https://lore.kernel.org/r/20221123193950.16758-1-jack@suse.cz Signed-off-by: Theodore Ts'o <tytso@mit.edu>
Diffstat (limited to 'fs/mbcache.c')
-rw-r--r--fs/mbcache.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/fs/mbcache.c b/fs/mbcache.c
index e272ad738faf..2a4b8b549e93 100644
--- a/fs/mbcache.c
+++ b/fs/mbcache.c
@@ -100,8 +100,9 @@ int mb_cache_entry_create(struct mb_cache *cache, gfp_t mask, u32 key,
atomic_set(&entry->e_refcnt, 2);
entry->e_key = key;
entry->e_value = value;
- entry->e_reusable = reusable;
- entry->e_referenced = 0;
+ entry->e_flags = 0;
+ if (reusable)
+ set_bit(MBE_REUSABLE_B, &entry->e_flags);
head = mb_cache_entry_head(cache, key);
hlist_bl_lock(head);
hlist_bl_for_each_entry(dup, dup_node, head, e_hash_list) {
@@ -165,7 +166,8 @@ static struct mb_cache_entry *__entry_find(struct mb_cache *cache,
while (node) {
entry = hlist_bl_entry(node, struct mb_cache_entry,
e_hash_list);
- if (entry->e_key == key && entry->e_reusable &&
+ if (entry->e_key == key &&
+ test_bit(MBE_REUSABLE_B, &entry->e_flags) &&
atomic_inc_not_zero(&entry->e_refcnt))
goto out;
node = node->next;
@@ -284,7 +286,7 @@ EXPORT_SYMBOL(mb_cache_entry_delete_or_get);
void mb_cache_entry_touch(struct mb_cache *cache,
struct mb_cache_entry *entry)
{
- entry->e_referenced = 1;
+ set_bit(MBE_REFERENCED_B, &entry->e_flags);
}
EXPORT_SYMBOL(mb_cache_entry_touch);
@@ -309,9 +311,9 @@ static unsigned long mb_cache_shrink(struct mb_cache *cache,
entry = list_first_entry(&cache->c_list,
struct mb_cache_entry, e_list);
/* Drop initial hash reference if there is no user */
- if (entry->e_referenced ||
+ if (test_bit(MBE_REFERENCED_B, &entry->e_flags) ||
atomic_cmpxchg(&entry->e_refcnt, 1, 0) != 1) {
- entry->e_referenced = 0;
+ clear_bit(MBE_REFERENCED_B, &entry->e_flags);
list_move_tail(&entry->e_list, &cache->c_list);
continue;
}
dRٺᜐԉ Z3u?@Ј fJ{޽2~$O•H3k $wI5D]A#_eLME<'Tz}1~b؞%(ʶJiz`DBGCin}y'ˌ&G8͝M/Le&|͎G}j>㥟o̰"?sYoi^]Vj:x/%cl1lSV_g?Ynը۳])Nn1.ܵwf.v]̈́ײ4rUψhm7瑆^z6XgE,3\!^-N|j c8r\_wV1[TN:\ٙa]|%;y \t+yI"9ߧsj⹭'Z?/wφbUu9T;,9eT6stJo;{P2hT5\/ҵ+Tڭi+ڹs`V,B~_px}=]ۢ21B˱U4^/6?hUSxYt4?6aO:xίÆW/m«ki8=ڽ&%뮪ׄz+pi@e! zpu+w®9VZVCp<ߊb6iOutuz$*aT6G*uxtJp=|2=Mo8:E4^LSŬ۰T>;-ۚ_鳓Wj4ecz >_8㞉K:ìR|a?=Y**: 1*(./W;o㳙om ό~NwqL/aV|*&oL讍S{/ 7-jұ=^ЃvFV:E6Z[8w,ō?e@!a1YZ%UUdn!m' 1, 򳜩̈40L"Kt)8=LIv{.I&ŕ O'*T^/h~0_߰蔯ۍX`  AA$ACoA$v[jUVm]`b@A_43ͯ$2Xn]r"q+mcvD }EUYD=vYg+37j"!oW Pv}6Wg+y6UmC"c&O?J_Ra^>:_7\u}?G___ny8h@XqW}y` Y8[a~6_ @ "jzְo,?飯w $ PU!˜;UW+8y\H'?Ä,ҺR!?3m`ś>\;ƼԞK!) 3 X[zR׍0 3FhyT`NSD% @P}/ZWL !4|}YOȂ2TQx)ޯo@r :6eyIDk`m B@$^>?B;9뮽Fbo?..uwn!τJVx{GhyX}kIATؾh AF@dUk=(XKHQpp?Zvus&*휀3GG_,ߣoWig|ҀFłāS\tS:!cنiʡ5d*N΋wbxgᶶ31vYg@Fb$&bzx6$ܐ >M{43H]%3wD'To:YnANMxHhor@4<" y ]+@-"SM~G:Zs E ]ў lv3!9w'gݳ/>nDUʎHwiFD"Vr-Z 5 ^>w|r9F/6G5Bn{ج?[ibѐUcys(6eлYhPfƱ`~h*砾 Y(l #ιSѢW]uLUb`4:h: 6u?|Q=zpu^WU5TTdÞ+NY[rnpM`PSnRLs^\} HRyԉ gYM]ffp;qDU @u̥U&:vy;Jyd~LDD KwB2i˴|(4%-aӘ4kX\TٯЄ9,@TKgf:~w>?d-YADJ( ]a 7{]Z䎬x (uiX,eAWe7=q$_V_C[2g==iO @7~l:ey0i徉w{?h?x[Gf" "4#Xq#oyмӎ!X: |-?omz9.ve䏓wz[k@H+[0<NX:wkw cP3~/rMt_}[GƴݣX˯z=j]>![8Zg\4ݞZ9ۧBsTiUW٘iy᣿ ;E3CߗDNɬO%wX o\G@`O:WEhE-P(W+U;'RM nUBb) *$MN{ }Q3 3wl6g7cÐdsO|4+o@@8KmTj<~D[;WGŲ)WDW%_t%N/E Fŗnp7|UWCRjVȟuy@~Pu5o2h#t~ppxƜ]^;d^ſH  veP=^yNWlzut$RLHg3Z:ؠƐ&]$(šdCv#HP9m ,0gݯ_(n;]lأl6&J;Xc\pߍJ,23tq&243纬s["_du'Ud_XOf @=TPևO ?N<۷.zxet T ~aEV=kxyB:a歇wy,cc᷽eMn`k ]eϪ[bk )0 6IU˅g{!IevX~߇ٰ/G{d*D TM%9LԢ<83O`ttuYX$aSgݟ˩. Y0l8]uAODtTĭ[¨'ή9e-ǧ4s7nۣGνc\{d {'Hw}9AL7v7nc۪;Z[{]ǫb6˫&al5ǟ1AH?Yc8?̸a7閨G-8kxx/F]۷NtҥU_ɴϺSG`6v3 5Nzvq{xwUٕ"Nvk96yɢ3[y舿 ͬZr Trl|egNn t! ^|S+tQiygΆy_bađLj>Aǻl/[w|CC lljڂSl@ŽRX0mlyaiÔ莎f9Rpt2vvY2&lS^b-u>8Ռ]m+v_Uvc-on6lNxjX8i/%"mԬI }>-M57ge6%99-]˄yc+nضZ+0]zpG%ks| ~G7|a?Z'zhokWylOY6349?Y_\]+vVZZUy۷^lТHoࣸPFsֵ @k R|pm`e"茐8\TaC;2<(qnxC.`2x.CJM} D5MI Dj )9/#qCPoеxmNFWtMB_d"b*tlA-R؄H @="`!E& ޡL<4 Zg87hf32 TAa5iyFC_t&h-&tP?Q0MA$9o@{\*#TFĭ.X wH~O>} 6hmHv !g52q=qq {O< >8 -vsmP?ͼX! #?߆0S~9 Uk}?eGB9"](:’ֿHtzin?qwm[~XEWDmuouZ _|m@PQzMgg9JN/L"HI1 E@df4; (W/ {?TV oE.퐷ɷm?V:U65r]vdȿЌ"KKEt ^Z??"cF10qx .=O7mpoiGu|kjp42sdrVa.ު̖TzeE2ړQY'0MO^6bt[;qп!fxA|ڥtf1 amj< EVT{6`sJKb0(D{D@}ҷQXA,@YXt|5zݺ诺y ti\Рkn7C΀B!j>D7э#-w 9vײ6pP8U֭gGSw^.[ю>n%ޚ"GL4b4hxXB/J&D)Vjc;4I  a$oXs/$b 2>l"d:tA:P( ǖ Y@w\\8%;<;A̽>ߎeO%IGwZBNfpH޹Kr:A/oŝ`ھX^-_Ui7jqXNq/ӧP*ҮRؐb߹Py:Ш2BCb?&zrw焬C\sO?LQicBSqzms(I齈}{L im;X@aײԄ 6-@/Ddqkq8Jj*`أk*"snJ*8Loo5E͌&|ʑ& '!/a5RZ|aM.޾}6>Q2B = w; -׍ Qm7G=sJ!kqi y.~կS_ d{YUxs~QI$|^ogFD.nu8i֐v^tSQSMQ^PeQS'XЛlVqERu5vL==d# HHuyE2ߥar<EU ms@mRP)n!\+ )G1ߡ+xD+QҏO}? zxx[}׬փ!A,@S"⌀ϗUG;[ .ÕrGUtQAvJi(/W\:k6;"^":>aK&I)ZbKא(((>Akǵ7Mzsʮmx͵5Wy/ty6[e5 n6vs|Lj__m%>@5p-0rhl42X+wFPz\W5[dD%(u:XopfĠB:mzHX)U >nhX %^{CD]e0;P9Ǿ:p8*s=`zR9k5a{ o{!S64:{~L~MoX;6i,5 FrAw\G8=ŃI bn5*nQEN?6Fy)vU/Nuhf߅DATELE- o1C])I}*"*}^;`HLE555Y߄ws #b]LN;t؎ݢE/rϋ=Rps'jT"&dkic5#3tJܐ,!ULJj *7+]T'/^QoٓI0R~]t~G(Q'B< ]|ҒzrE忨25W^195>*(7{la!]t?-d˷Ad6xުN NS8UߎƔv:u&1ruFDkƢz~ejtg`ʾtHx텘Ǣ}j|wt3tǍ ٳ٧pN/Kvų!FE~ <[$׌l׏_8wQP^`*cC~f<:J`:qI߅(ID^*3` +A3IV.?D 8%k>g,联 lQhsiv+Ivn8{dTk5/:i?:n@ANx쇩޺oj|ҜGZcX m >X+U5pzqsn5My^>[S_0 eE>`!=k{!~>G7~`D2j\k!y>6@T;K 1qG|C]zZ"$.Pgb;e͑'.v˟3j,:<U`+pЯb %rSx׮)%עZ%ahnp}_m5-Scj2б>W00EºYϺwchHPXً_|^Odj<.,_B&cl㛾ւ8Dʿ@Cm5O0R6_X>%=Ӝ".pn0Щ0(U՚-{c)dPƖ("'mX#璥}1h]jOW{JXra4@Z*':6p|mt}U߷W@Ggn8#7Na(±"91%x5eC>!X1n*w c44@ԃ}zO@ㅷ<[ 6icsu*7o귩%u`l)EWEpP R ^~8i@Y{p)hj#AUPIBZ>Y(W5Pʘǽ`^`1 ty7Ѓ~8PnΨ_UK@}P5rֵ", &+/9}](qTDr8jh4} ^ףynxeR[spmaduj55RϮiӁgMĞ;MhJ=*}KJ\"jzEِ_mʉFvߗ4݆c8<Kgh܎`&TjYGCECS=a#&n%Uo{C s̫>/&E!&!rgqrA.E\v\hxDOeQ{nbpOf%hB:=cЩLdzDkkAK9&lFzTj3̮a{y=@W pVP9+HQO%?ܧf?,| Mkj>O Ͷ(SPT4jJaRB1r7nE% UEQV=(TQ"5(Ml"( B"&4_)5D@fAj=Z_zg\Dl뵊MufSqo(ovURNçި_ndY]kߔ3[JD vb,2r-?݃(d,Y˛W8}XhB*V]q%k =u@O{0bF0E|<-9. U(QNd OAjr]ejz:-އZ\y} m S߶tuT AvWQcJłP哱A8(Ur<NT`@b vsPW(mr>+2o}z.vca79q݇7"OzJZ{',)$=1 "=3j+!jLZUӛ~>27F[~~0 zc׎3z% Y q. ԇsMa&!ֵ3 83KwNӘZO;"qp<6 ۄ4s] W]< ⠪8A 8YAT=GT9 $"2Pe6#o'7jz~gR3{|8: y9(8&1[p7Tb3L8Q/-˹ź7i\5azrbD[W&B)=;rd)3X&B ȉ4Hn&;o8Qi/R"![eIL"9;ְ8uCw&y; Gl3Gbw&|pd ITlws9Ud!Y0&7Pb00h֮><='ȂZ ݀' G@~G8g|lZTH@M_Q][J (CIY3zf\6'0Ӱ>]ZBW@Ӵˮ zWlqo(PÌ^# /[ #x"H FsWfd,=N~+QʖW'Xw}y:;i5>Yp.q۟`}(1$*(&\t(˓X{Gƻ֕kaMpsY.}[]6٫=$C4UfHpH3]'͝_y.<ຘH3U%ԋ0A(&DD+ +!VQ'NQcbκCX0.=D[ /BkwODLmTvp1T7 X@4sA奭l;68=([AqE"vX4~FF, XbCr¸+Wc~؟RSLG;PoU a^h(+knjr!H Bl- ~'9^#O>QϞ7 FN8!Uv_b".^ŭe]X[ k7qt/ӈѣ7/ ++S]hT݅1w-Nuv& 0u1y1A.٫B*nPA o]=@Q0#KuoFȲN4;<BT>8Eۄ>6z[.i 8Myk1)6<8s6pp<8OȉS js+bb_.,|ceD kf磱F8;^\*:HXMszvIݦk>.uc%$.tB0 a`ˑ1uB+} p"~<>gQiz9M %=\Ec΃b#.ih;8}gܒ,lBfԷ5Z9OXǀ=# msD !R8Jp=V.=u78A @ 99'!Bc; S41oqQ.DylmAJ]I ꉉkQ*$5p{bn.0۝Y^Fd0dBh|~K}{OÛ˲oAD۹ߓ94 rJT]fUvnr^jF%*9LQƓ{jN D :\dEciw{vjcyspt񾝘}҄Ni,p\\R Y {el{bsqx}e;0ZLkv?ǵx[ErJ0AqMx)5ͦкFKɇ^Cin ;k.cK)sFUG5sJ=&WYhj!iJG`n-͠\} q&  mSZ{c%54\1SFj[]p+.R`[X0@Ea"&bKCFRg ө5]ִ=Yvo 4 `Že,BX4ֵ3 f #18eO͚uxY&ËM )!53qDiQZIL\)jL{̘C6t7ulthmL2 bvjq1 ۬1x=W;IF2H.;ww9tqPX^% 6* #U)bUtscC6NԲ/dI?"=#>Aqcmy9?,ҏ P;j=΋{C"k* nJMZ/g H"@u/`u:تUmZ] \`ǣc'5=xƼ~?4}eۿ7] }1PSx"ys9sb?Li.Jq{|cр+g~|A6 P5TkJrlAG:XzjZ*tJ7F:K6Bf9k0t#}>< p.k#5@e!RC&up䟚 8< zH=Qd JM+} :~Zr~ L*XhDJmek/ك`e+PA"uX?{EL¡ ,Ӿ.a]Wn0XB ++(Z(KZ`Avb-+w2d\t0VX_ѕ~kgXD95aޥB{oh [S kۭංCmu< :/::-Y(WiM\QS.hL3ҧkեeR2vUoq̀0Zm$` ,֫..teݸaa@NL^H#J:!%N D(oYyyd,~ۭzcG;~!t0Ot=PX!$%A!B޿dH$<qt2]B{3<_{}8a l B.&DHB,R.&"Q粵Ο9ןpJӈ=`f~ ;W$q_oz쏎#+r%nxWLLs" 0mtܰHܕڔ6b B zR-eqNqjN={FQJ!N8J}jn>OTC .(G$ǼIP2=K_؞aZ0S}U NX\^`'TŒ _>ZH7N>\y&NC0"KKSߟ8hz]Ĝf=r{8 2}Ƣ{{ 1$0ZqӴF#5rVR$9vO v:4FZK ˞=9a~7pF0N%!槃3B`ْq5##n I"G],876Uˁho*Ak/4 A|rwN1">IH(a=`:L 5qC9eQ=j31z rVR\]D ĉnWS|&wo 3bMaߩSHCWቂ sdlq @j*ZyOSw6ʶT:٦ ͬK120P-}YԹ .3*+ΠS6bK9dkK˛{T]Uo.ŬQrlRl=@c2m[ OE>4% X@_#D#猻cO4u)~u0|Q_l^\0!b[&ӁDSF 1M׌;Pk=̎(WaBq'T|\psֽhh I6~t~5=d0ei.F8 iG5R >R^{3eo_P?=-(o#m2%"I-@&PH$Z"nrT@-)mJחGU%mj+F_CJu bSreR*{1l I#<<& "D:e)qzQg+I?B R VZwsқyX pfvȃҔ$ptNuACoآxJECYpiub̨ CU>b\Xdi6Q"@p pǿ`]9aa;+~:f`iUГdԱ$F!dհt,:&2('%Ʒ jjzbLwez$]?}-A//zRIS !F G?D7q_Q$cBj1c5bmɞ+<]GH̠cVpm~ wY)*,9@dh,OnnyjYhDĈSHhT/P?#@`&pwq$hx&J$_vkgCB́M@?X><X^Zn_cn~߯^.a߶ᱶsHk32θZ aĢ ZyCiLJs|6$c)W+swq6ғh+0@B2hse~#޿:Mn`gErzdAVw|c `@/=Ys%F:8l!B#^n޵xؒ_a舗"+WC$TudF'mK6VZ躙= ,h+FSgG;֥M R"sD>MkZqP»cOC05|^[0pW;:ٿ9~L T:OtAct,l|cC&`o0u}xMM1S~J$kDbPLQ27-6`њE!\o%Zlٔ hU)mVL=W@0^ z7pr1oZ8&bzB @NK-]o{ƒrY%IY̻jG+Unfr*N* /`urէ[%6W'9H4¡^Nvl=(f_?E HHՇC5պ;8h hyRL~ji+N:yW*/aEt8,}OaV+hk!Sxe-v| ^ܞW -rdUoа .Μ݌"=oyl^#%qh?f4ܽ~$> 4t$vvF ;sPj,kfPws"(?2tx]KEW }mE$q^HB_8uy^Lˇn1WEyjki^hS5^Ϲy8?c.{ou뫝GnO-l+FWrѾpY#[!eNEܫGUl[XZeߟE>-\rLȝ"ס_-bHO!$Uj&|N*K|pmc?G4+FSJ?+&w9u.~_IM&'E7މ!iE0eb~SoP `A{CVtxmm\}lBC/%&/W΀cDw9>Sǹ.-T##) 6޻_aKpGA./,B.X.8t,{V.IfX i:Q+tY xl DD?_=PRd;Fʭ8LJ&8~Y8}ӮSrτ(tq.rG/dDmZk=A0{XXڎ(:VCL\Gp<^uYh,P"Js]Vg%0v!Vj@e̸6X}kxM6EXOf 6zBuJj+aFMpV˝Tagj\ٖ:r$Ш 7B8HVYဍNuw D)^݌.s+'\Vj>{$~X;LJ ΁D@'^)moWDrQ,ŋC) (8.+lʁK.״ތq^X.%ly&!/*ikBUOI`]]I"^a'`,6V`V;T"E^ӈsp&G,U]?:1C!9Uvzl 0@DM { o[pdHU;x>$0Nf?;21RWU@]~]=\h7!&R9'l֥d7<>%]ZK"(HDx8&,@aUEU&IJҪ.e@l,d 5\ʠc' R.X칢p hϬz7I6]~蚵up>]3w3Fdtw &%c.D}OA"m--ӡYU泒qX9W{[Sl+u(ɻ0c#HbU HǑB8*'K].HlpUG!-](:%7g)a郒"Q {f#%羔 u$T堋׈aLx`dm̸6T=/csj:ꅺb<"3邓*͜CiGeJJؤV〒K|X|6TG͒-Zy~Ka|AO0] ZZSs:͟(Y$D{3 wQP/5"w;+X<.> VbTGc) $Tz+k\hzPGsH4Gg rm)^t*V5TyؠYD^oͭF`zS8g,x " 9J;` UFf)fF*(xTFeL~|dȁMӊI%g3 Ka@aʋdz|Ҳ,lU'$!,<όB0*5ZvtF)ڷ)COxTyu6 ^޷/]KAT_U,7 *q= kQDY:tpizLrw`M[>:WԪ9*stRhT? geOÅ<WͷB Hh\|Dhÿ΃2Bh}'3kR"M#u3[ͻ6 ȇs؉7B (ۺCXsל!pzD`I⚼p ^.r=ߞ*C]!/Cae>%700A8uZ+wU}S{sسHW{ފ$+6ս/q}&p t/½g_^;>]OT 齃h+S,a/S".i?Ey[(ȣ,'¦C;AR BxVBO'6$~T1pWYJjoV.c^{|xc\q*0{^ȏƾa,Acz_"Z)>q|2WZ>Z,G(.eqaKxqoѕ]<DdIJT]=ǖp\?\*N/o,_erEj.ꪓQ *t?zHyM"kCX@hc I9'/NȀ@D{pWlU AՍnΊa^=k;R\\q P)C=C4o~ 4 XnmP1TsOu~ 3g] |z!nBT;8XNE ,W_.Nlάc8aUχZ{BG95To#km.=b6|s69t߈,6iOG\\7 a$b(c7 9ikvU#ۋXYyyڝ-Ӿ?<vȻJ==zw7-ŻG1Bw{6@9!oo4,#pT8g#"cKD+~tTCIŭCm-UaKww|1HuNa =-( #@@∈|"B9g.ҰT9csvʹw97Rx|k1y ؍S-f줮)l }@gXۣل^x2/o?|qjvn\oZoq7-~9~}-'TzǾ26#$F9DptFBx9C ʧ::NR? 5YCU AɉANgMg5x 4y`,$[%FҴ0=>"7q7qG9Z ~ V;GzdAFWKuXo0N#:D,KG^h-sC~f2 ,~ `~!ʿّ6Ϊ{HiMG0VX{Ғ>? 12gI2M]r@T0n@@=EKuWunDkuhҫU}C)!][Ug91[DsEHQxf#AJ氈>8%~~{s-rʧ& N޻f tzB]Vht pH慆n|j3s>Y{pqE܁ PTEU_ڏMQEI%Xs26фd8CljԨ_CT烳!P-ZN]HE:~>Ga6#, kD,+I_>'ƹ!ͼxFNp=pG~Cv$cnv,)_Y(t#d:0fX`'my@_uvqp0?[D &k-ӽy5mhjݙDZo-н/f1G hQ-7NJ"3NG‚N'{9CE,ޯ3Pv3}}VPO64\˒+|++9H"XM ۋw1HI\s>J4MB\|8rI^̞PDsØ=,oO2ف32=*[5YR6FJMU(F{lIq6&!2 -|+݋O]mGr=W)i_Vy%>$k՟|+g=Kc5~G )ˏWqFq_C1tэwn,se)of`I#f Puԏ%\BP^5[%ؿa(FFu(Ke)}6Ƶ}iQ~mUjj=5CULUDx%AlCϵxF\Sks>rp3#Ck^NG0N=A&+&!3yVs\ ^3#f%xo@M7[wY`{~ёq߅Kix_89 uzhE7nJ\ÞbeāJ0{H]^#`Ȭ/ij (o{"s!S]Wx5 KEz.[FC; 9G,3%/1G芡1^#dz5oX3Q\gϧǓs.}_ة7Xv{J;U<`#N>evZ!9 hԳ=R F{Zo\Ah * jv}zaKAGZl|ljGVB8:#)E9K% M.Gz$vv4.{c [_Kih9Rk 3md, Q~RJާ%PL(^\_t5pDq>.4+8[/{vc[9rVxB!`I~=7?ļ:9W`Ye( z}R[վ15.+:*s4h#DF*85eK?S淑ֺ;Ǭ"EoK!,97r KQ`θ_{Sݹys ow~l 7O^gywUj@f#ǛT1N7\2M_t+8(@|xqڰڼ-o= GD޶%ZX=P͛#(ӥR3 V#m<6uC.ky=ÿ7T!}SH}@>]U⏫]~p1"M]kM'9e)F~wBa[ (LQo=S~|0B_,:#{o.4u?o3"hrumk{4Ȭ dpr7~K:R_Cڭj42{Jj4L+@x[9+T=l9ssg#)%KC;΄o|\=MU(nKtPI:Q#LܕZC0ݏؓ\ƽS1 62*dlKK iFX3wnbٝ>"O%#Z_yQ\ssJ6gpk|_8F(c8a~)/H@0)3{|%X3((`` \` )՗%6NUpi CUGu_ȔD/J"syp7] H l+ JQ d3Yf:0O[Hn7:qM>ֱV?"& Yn7뱈U7?+ (qsrӌ$!hu.0:6}Bz^& Hf`Gg-U>צ-Hu"_;w"g5 8Q ̏aٟ[ms^t,#5PɵЊi=m@ ~`Fp$yoWp6>**yA]7q.,f4V)q~jrƜ\[4` K b;0=fYb&VֱoY.̵U|{+{;)pIݎ؉roUkŮ-w{ aOa\\ WSy@MhuQ}Й!$`PLVrTH~WQW2C! bԜ,桸rv\:$z#:fI'fmM^erG ΪnzL%YOLwӌlp}x2d#:)_5z~4y63awΪ)*){] *PVȕD}7 [W=NeE|~/0^0ѱȝ+\6H[bf>x<>7yכaR?L~jŠ7(:߲%-+R$Ɯ8rG."%y6megAWdnA/u?"<K{ؐ܂61! ,Hg,ė漚#jʄ2^Gó}L[OI0(f&,^8Ԣ$ pL_c/AGgsܕ1QD0w A$) |a _~٢)>1`jsCPqx Di=Ar@>Z :x D5V:f7e] [c*FQ#CȂ,'u}=&^I(p&a@%~7^m;B57'p0*{CB#{N-לȊB\ <9_|0XB0:v Ʈ"\-2Ek"}@ y8`U湶͐1y}tS|u~.`J(Z/+Y6)D8 2 ='ZAAQ:-hllz뚃-X2;݇?9|jqJo\Fb 6܉-D3EQ?i.k wy|_ L3ոrIZÀ7.=jiekUy E Zܠ>n1([:dIGw@NKd 3e%;Z~vð'k8y[aD!db/(] gyko[qMjuˀ#]]5 (X|HpRjYIѬꪍVI ;UoP!غd:ZfWyjĦ!?@F." qIv9@Ē'>3 i6M5?/C ÌX}Bl?w[:hKBWҤ`h"̕(!(Y.kH6 fI32d 4r+, j#$] -j!}@{@F *$l@f#XEھ2Jk33!EdC[R:%Hpd!`^'E5?Cȁ8G:,3[ṗxX"6Y EJ2RR .8!Ôq۾ sRk]<3C5$ED9 1v M85H]aj9<qt6h%Ap"(QxpI޲ [,9w]$?96sJ)/#i"& (4 i@pyزޚ,~bkW3``.wW:#8vϣS7.˦F-BfEsv,NX(5Ó(ﮤ(c?OcXK=P9ãv2e>Gi#.a:a$:|xDp#X[RF?Jd})_ mC&]Fx!W+\} ?:zF]~ {Jyyb=gX{*Hـ [?Tkg@ ([aeAt(CԣQBhKN<@L&RS}~ I: nbdBѹt'kB8"yJkXKF39[Ȧ8pk#ILu ]atQT5[سO SXD }E{Y1H` B=X㝠S@]cG@<ƧC w>%b$RD `yBt~6۩jύB i69suɟMvUJ[i(at^: W۔Ȓ0iwi5J;`X sk ą wC"8Iּ!mk ^30~zvw^75 =!tqԌsɼM,V\CYEAFb2ӽ}{a:j-/.n%ʢS8SZ!pO` 3Jjŀb 댏 5Yn6}lX/S/':{фk~_:0$ub5ϴ~}qgr~fBBOEY*r8O=TZm蘙-%njf>BlxvCKN-N8Sΐ>8́;[%yNA60{kx-t'ȯsnS_E6n,0BI M>Țrd8s~ne›; HaC#z^k08̭soCPɸBz|,>v)bbcA|(OrX49 !'ˣ,;PIm d,7yCW7LJթOf>+$ф+i>f)+xq!x.H ƪftr<.x!6< \B8yk4Kfr dcpTKJ3]o A[ kC8L.5)~(_6_ޣ1$ + $$5=Y\-8&~`j4ɛe7VGvn۲0|ipδZpoOWHs`ir:~ˤ`鱩sњ%eC9G4=58^K\,p萂@&wJq:Ťg Q,iF鷢W!v9 wKQA@c}$laqvzL RD0@DFOO8Ư|cLdU-uR =5=S|{k,_PYO& B-=C nvNc w^9 >>~/Ŗq)L()a 2:~ƱD"8Nb ̌&;յ9t"9MI}֌PKb 9bn"rI8MyVJx={sk^듫Za_nH֏O;ٹĶK'# _f ~*v-MkZA;d + ݆3s]1:`7֬P4|\R`KroN !EO{e=uFD1ՓϢ@IG5_7E0Sj~__V6iXAA>C}k2}ڱw=c'XF<2ٱ|KuL.NfR.1Oy R~f)3R_Q$޿n)sr3VCׄFlՖcUWVb q ^^%Õ0LvI$3Cpe/ЌyȂU pF͒/,m$ Zk9}C4!5n~L"7r*! 8h G(9aDy$?hlN~5/!& x䴿,\P\HClͼYE0rImYUW!t24 pPdbv4'V:cE-b$B|>n0 I٧j@\ʸc`eɸCKGs/5Aӈ̝DD3L(q{HIl_ ^ Y@66(՛om]Hs'_^sYݦX bpzԈ\SZ}W4G]䎆wg5Zד;o@y:ln[4U%9c'XorGgI=D?? s{YQvWØS݋I0 k"v8oLzڥ=v:YU/ǙNdGt 3}rӂ|X ێt*;Z.(+|X8oFpmt Xk̑K~.D:riv9TZq [>Ңa}/:E:gA @Dh~1zwGOfЊ܈AH|WP]Ҡҁ\rO|AM{9- % Pb8.,  }"DXϑܝr.-23m%52)2.)a h"sޗT{9 ~' ~sGQ\39PY7>D4yanɁ"+*\"Ņ2z5d2ڿ'}X.hvQ׹d4,,0ּrZGr{Ghq N_O~ N 7iz&X/79>GګkWҴζpr@gY~e5mWTYH@8Z?r߻.S3 !UE̤]f9ghdbkv)eP.ղfyxcKcB2wn0[VyHG~t0SazHO(##+?H4Mf^JI~FJ-b):FN;[?Jb=QCr`윩K @\LON''n]rѬv*U?D9s_YHSi72|fη%L` ; 2>^f#΢><\Z󟰞Sf/mJzNN|UTG/qԪc#~AhNr "j2TtJ~>Ye,e3YMyd6NTWݼ{t/$6P@#&RQa.ytvL4]mXZ%o'Zat.:j6 !^m/p[c-zyB!'ȉ)~oPl(?L\`)5A vEǨV@z76<}EɡyrG[uz_( 412c~5$bFwgwMY{xOTSmCY5o7Qk>_ַriJ'U:܋:iRȤ_MH_Q^twJi̩D܀+f#7WC{L<>:ICS)Z/O#>nDlušrZB_o0 OQ4r+4FHCn3,/CUxqt PEH8 #A$WT4EF4dwcS^U ޽lp"ھHe e+"?Yc.>備IЂ|%c*ס:Zk]u}ak^1[ +U̩(MXF3'Ȍ˵`Pٹ#U.DT@>n١m~me]/wG=q8Qx|yLCվA!-ۛxYYs PzF'lؠl~7bRBeUϷ?9ysM>TҽAr)DmA$5ˑC\%վ*4gH6Wp榩R7=Hp~oN]]urv0V;+] ad91S-w[i}>oӖ[f.G9D p|ZP{Lu Gou+ TaƷk|C Wq8KNŝ9)ߪOHHFp<;j·KKzjD jiT.MU(mUc>ZWdA$hp߅ʳج`{gl]Ӷu9p(v׫Yup܏h$} 5P~U$ @E/ ^8m*a]|_TgI$j)7Sxb3MS">@Aej;paO9EvC僛cDgZ9s@hOB'Uk"fem^?z ,{  6vKߧ#Љ'>3+C$L7J0 q;:ǖf!DI\Q 2(h8ͪxܪK0؆Lnab߃ v+`V(#\>IG_[B]Q~ֲh`ES\,/\u5kDP]8"b8w2ay2.S k by`b,‚C6FJk„šsjoJC\'zI.佖0@noO PWc^x Ǖi!;6G'yvw[>'t^ݺSM= @"N#a}mx1# kҐI"Gސ/!~ Wcᑚx񜕳 x0^@-yqg_|.'V3#ƿ㒈0I&5YKx:$gqң*MOی##>@|bX L oHwEq/P> sk]z&hE[tSR HBXWyDzuB΅S%f4n)6䅀L,(%-js+( !z=;MWzGwbi`8NF8,qFcƆlF&F"3m ` gORvZqg<qe,3}hS';p.aTie1X+4V+cva>OiLu_rďw@8 5O5[ q<^X|!bKgrF mÎ+F v=9#=[|jR#9xva%9~o[y?uwa7]KY!z/{Σ 2(>GռF00>뎢|>S"x-!ߴ>U)Χ6ƺqlM:}JYi^@\c0zBV3AP,F$񛧬{g$  0pڞEIJ u6H7?@wȕxyVij3Ƨs"r%O :! s V`(\⤼=e"ߩL@$,psu|Fy~yn7<7>Px%ȻD&K\8=N".㭲=J{( *F~MR3¦Oy`q߮˩n<\ANJy:8ݜ*@rʶ pD̈V  6_qmLH`;z8Z n1ЎԱ<|p0{}Deez13Դ8433⹎xmf8fFHoKqu LY6c4ԁ*@-3{6c`v9[h@0ܽǶ@v-c̷>kg&΄~ƄP_L x5KbSt8@l]YNU5@r9?1K6e@^bLs0ZsV.Nɀܑ8~C'ۺ륳W2'\g$ Ƕ= 9Dtd|*Pz ]VڲrzsqFԹ9[v%9W;B]z]F|\FC 9Z7p8wNb=8 Yb  3n~ߘϞzC5:98~RnE>l8^#388"[NֵYV9Ny;2YaV ҕpZ Ѿ3^3Iݧ3?'FޥߧG/^!9>HH|n+2ԫ~>;9K!;\Ƽ!~xpim\o|{gj*[3 z8oS<Ap}t-ɂHadiz %g;E[.:_%Qۯ0$f?[ !\>b J/8o"%hOfו"28ED_"<9|ҹVBZpn+K!)'|'SQEaD>b޳&0e."lw<K I3 :7A5@ޙAL2$U̙i2Ғ =q0Q8CeDPEWᜌGNшi&!f_Ǔ/~S('R4?d`fP=` qSNfjEѪ:˄Է_1wWqxGdNg3g߰vߊL'GUgZɉl0Av37CId ^Ek#N3 \ӫ2teaDa9J'k),!-_]eٜR KAZ3EZn7cM)ϯ=).48pPQU>/u7e00#?70[{D q`~q:b̮ݣғkTkv< >ZH} ŹxgE 4 \# 7)6}4L~'Cdh)G訃ה.~lLoq?Y*.C \jdec{ |G;:a89m`+-9$CJjY#yewgS )Cg%k_/A2xIK*Ik Z|wYQȸ=naR9v?'VDZ1=L*dY^&_:t("dE}vpCɍոfK?깳PGAX'۞m =;eF0`KksGϟg㑱DY؁O?;P/A24 70G& 7Y28йYZ+`Cp_ d#SH3EW5U44PLN5<6 U{.l?[ĂqnS=下X3;`s)VTS8=, ¨?M+4(\Jr_'gV:]Eߨ`kQyBY$>[ֽ8j/m,-%\|)RJB-+[rjg|hγΞ76|`],ʽ (9x,=gki’ I;q0 ! )SOps0e֩mpɩQof v0$ y#Pl'1?>&~?? 1b]N4>[%]O O*:KjmqBz _4~MPDHMLYE¶\~L?sLP+ʺ>/8:|]flTPH({}XﱷԷRU _VIHy槹\K9S%IL Gs[Dt[RnC!~uѵ9.ێ[Mp &AfSaf7+]mǭa F99 oL a,KiymehWFJOєT޽{~t;KWEN!JE{uTj98(`{<" ;kg(3D|jv5y_&VERM@Zjm4Z-[5 HNٯŽk2Yl)r01׈|6bdLa TlP_sSr © Y^\'5Z:F{ ti79C-ꊂ-{D%s+Uru].[V p .,A =J29efpXb0mp#Eb$4y\ΉSj6 g#Q4޿rfocLNDj<=X 86+}ٯY:@9񊧖QSPh.:wƭp -P}FM!dB NW#I#ҕϽBjS(<5;<&21j^0o*`p: r*A,/{SQh[MSWj ]Gq Ҍ* Π#PD4'G0G0GS^]^;E a}Sd[%0W3*ǝy*Zm9ܶJ툓kXu/^' nc{vg?<;EP{@FBaEf{Gn^OWw'TUbpdMJ\"?_W*ӆv~mceQCs%. UȩP:l mHGHX×j=}C͎noն 0UKi<ރAAR2}0 CPm@.}?z`0 .ҽ!C"Xp[P;xfas9C;RoX8R w>k9~+EX+(^/a{yWkN9躻O2 MgS]knbe5Z퍘˝O_HIk dgonPџ?/݀aQ.g0q(U<:o]!\u_|hEŹls؞`+:PN $0b0kETB!Jo~iVFfD ٣އWO B"_qǵ`XKAaDJ)W=T /Af*"1hb:kЛ/T "Y,yII_~9x>@d8 Qֹ*i6qKvdO+3pTצf!# .it p&VP?]>S6'sk0BR(IÇ:ؙ7Ǻ{* ,hw jK#Xqz%x,ÎB_9$&4~OGwh>OW!Ba 49s`T4zOfgyEk{?~C(:wwg  9]F 7ߠ7+KU:'^m}ݷuqnAvȫHBꝟM?}Pes_Ӥx˼ ^t-B07zn?'FEzÇw8+%<:?R50{dɹ~ ,B[E>XOɣBQw?Z{\E=|^{]%&{4>|EqY(Н'3.TB/:-ٹzVSM?˿c/B%rbˤa[$r/: g81s/\"CŦ8U:fޮO_8W\~aVL"y?6ScI :SFagK^ªX>'|WǧԦ L·F8ʺyQj1헥vlc*,y }mb"-p!m&~֭_]kyFT=/]<Pp01yauUG8_CmK@9)cکEݠiztsR-\]GYòc!fVhUi OGnr Ҕxa/.̗-y]1R틢u6_LyS|{ay񃴞+ߞHضyw:{}.:ۍ6/&;@+i〫y=v +0nnB x&{$3J-yNi1eVxnl\!DRɹ^8Q9ϣh,=T3"rWOsT0WꝜD䊋-`>cw{ dU\]l ֳPFuPp8ί˒ؐJՒGWIW)We?zgBʄĆO+cQ=b2T]3rKo#/DF-@>U$z]qQKb q[`v0]Y|!`&QetW{&1#Cީ#ļ΢=hУjc F9h`t U""BI)d0# ȟx[VеBCvCDUѷa*jw9_glo>)BOv 2j_(sGK3;R{" ۺ%zJ?eOC-/`J/|,c??_D/f 2LB>IƸMȵ ~wr,Q֠bR7^˓u|ZE,uO_"ԯW%PZU}Ut_nzyú@sZ2Go피tEE|w/84L\ 3j 1M#iǪXW%?7bJrY=tW{7W ^~E -`^,!̟GD(shpdxBӽˣ*莮^aYqmhJ 9~;z]o-*(Emuo;72*wߞ."޳(RRfhAj:qޙSRŒ) 53HX@ڪNY@"_t;k1`)R|[eH]V՘?9`nCWq2WkBkުְT:tn}"NsfIJc!qx"'{ k]d 5mE`*>63X>W- ct |Rkv\ɣVakYGO_5/K->ώW"ea=m~Iy4n]H +eZ*Gg=D{gmQw[4fL|@=IGj$ Gn5P=~M=D*^ೇVQ P@x|nHegk"e3+׼s] ,> ]K0@HQZ'8L)5$}yrf Pfew.9L;[8'/g 77-gA6|\}mvwB+ ?= b[bpj"~o'Sᦤwvq zH_R6~z6^ VNamUVU.Rg o!_|,n0QeP|Z0i_@b TcJ-gTsDUS~o^9og)0._Ѩ (#W6A~tdhYf&O솃N*7.ss 8 ">ONDp25\=ł {6؂5m TJD!DY$CM!RamžʇGyYwP~ @@P&!=65ОP=/u%M?Nj~r~ƸGR=>ow~Xvuz-Qn5`_4?V&כ|xk~jO~fqc# N;"E7iXXMwi( 4U r_ݕO'g8Y }UT]8#&;qO~26 ?_,V{5~pf@>qƯܜ [nnB'1a?.&g:Hup@r;CApu~ްI*Lr52M=4:FK);l=߾P)z3x}h4]OC1nY՟ (#T*䏡4b=Bfj0*0 d^xyo̟?[T)j1GŒDσ9!8b~=rwORIB \S\5JkXrGYP\ & ??z*9\B{=}ONćHr7R*"\YM `ZvQPlAO/: !b@ajxVջ_3vHLrbTUYg ?|DDbxEhPb:YI=I5|t|<՜i;\ڮ^z DCJ`mAi p(DѦ5g6t %ӡe0/}g-3e,z^\!B,/ij'$Z-^0ɢڮA],?x! T8LQ=paJ9 9kH]JwQ5GLj6 M6cJK ͥ~͞N aB_DkxTk&` hb+ 9cB Q' ׯ/x6zLl`H]~x(+`/6N^3KӞئj*߉WQ^S"@^Tk(q  P$vvqH HQ-plR".>s\$NZ1_Jg~As ZpDW]`]ocfYK+GG[$-jXb+vkj%&^p|HxƘ[f42s~Ggn3癉—L?oE/,9ataA}&}^6AezQC?KACL?`| ݢ`tl4,s 8|  z8Bkz@ֱ|!axeU1N.䋭 B<ʋhd CP@g[NJƠq셄0>Mݤ8ral„Lx2`zrNUPM2VA@h \(>y_N#>?0KbͱlRGAmʬTsХAh܉{hV}]|~џγ]3i?Iw6D~@[{ja&QS shxr^]9A,8;؆;I&T>ȧ Ӊ5%vΒn;|9XL?8:mka׵>yC;n7ʬৗSƢ1Zd*bMFcx"s&!/. ~D{.?!Q