summaryrefslogtreecommitdiff
path: root/fs
diff options
context:
space:
mode:
authorOlga Kornievskaia <kolga@netapp.com>2024-05-07 15:59:33 -0400
committerTrond Myklebust <trond.myklebust@hammerspace.com>2024-05-21 08:34:15 -0400
commit523412b904c4ad2e9649d536bde0e6c75c88638b (patch)
treee088caa374bc0ce031f8e40f13fd5e0867936c64 /fs
parent3ebcb24646f8c5bfad2866892d3f3cff05514452 (diff)
downloadlinux-523412b904c4ad2e9649d536bde0e6c75c88638b.tar.gz
linux-523412b904c4ad2e9649d536bde0e6c75c88638b.tar.bz2
linux-523412b904c4ad2e9649d536bde0e6c75c88638b.zip
pNFS/filelayout: check layout segment range
Before doing the IO, check that we have the layout covering the range of IO. Signed-off-by: Olga Kornievskaia <kolga@netapp.com> Reviewed-by: Benjamin Coddington <bcodding@redhat.com> Signed-off-by: Trond Myklebust <trond.myklebust@hammerspace.com>
Diffstat (limited to 'fs')
-rw-r--r--fs/nfs/filelayout/filelayout.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/fs/nfs/filelayout/filelayout.c b/fs/nfs/filelayout/filelayout.c
index 85d2dc9bc212..bf3ba2e98f33 100644
--- a/fs/nfs/filelayout/filelayout.c
+++ b/fs/nfs/filelayout/filelayout.c
@@ -868,6 +868,7 @@ filelayout_pg_init_read(struct nfs_pageio_descriptor *pgio,
struct nfs_page *req)
{
pnfs_generic_pg_check_layout(pgio);
+ pnfs_generic_pg_check_range(pgio, req);
if (!pgio->pg_lseg) {
pgio->pg_lseg = fl_pnfs_update_layout(pgio->pg_inode,
nfs_req_openctx(req),
@@ -892,6 +893,7 @@ filelayout_pg_init_write(struct nfs_pageio_descriptor *pgio,
struct nfs_page *req)
{
pnfs_generic_pg_check_layout(pgio);
+ pnfs_generic_pg_check_range(pgio, req);
if (!pgio->pg_lseg) {
pgio->pg_lseg = fl_pnfs_update_layout(pgio->pg_inode,
nfs_req_openctx(req),
z^툊I}}:yI^D كz1Nri%M),>Ŀu*B"ec}U]1O i=PIa?h縍ܫ>n{{y>4Զq@ydH2ZI߷5'm$FZ\t$AgXpM(Q)ݓ lPlKȉ5+wy#NL`/ea~qﻌxyHB×KΰebO~u`!=i (E%*0`j^q?/gBTBaX8֜[0XRMf$o5Ds91>uT3(8MԱq-f36 #aAƃ4,*c,J+&<08[Be01IL byxetf7N5f N#$ 9Lh8#'| Y.#' %,ĐRn ۹7Pcm71na6kVZt U+V D'ȱ.CSdz# 7dLIXxx~*ʺrv qhʀ᠌X:{MS"u: zUC$CThGчim {im+lȦOƵ|JV,= l^@?7!DMed R%D:Kr+F"67'З=X "#rdjOƺHT\4Ν0Wry .G-M[ZMnna%6BZS siuxhD;?Vsxc|-7u{?1 s:,;!t+) \mE uU`Ƭ-Շ$DB] 7^qhΨ D6Ev,6,ūמ)W,o~F|[3PEzk7k"׾g5Ra s@0_^hp\[8;gOOXA[!ŢSF32 %5}LF?}luo<|#ǻNz]1áDZ+ EEIP/Sw[SYř=w9P׷pNs$Y#E0x5 ' l!.&0T7;Cb/ י.8ÉpNh&xM̧r_swdrMk&[_ k7FtwB xְʑW*ϫthrI ss^#Ƽ2i$qKЄ(ɠ070Klbצwy$ Dd8hd RZ,S 8d"bIa 0D'?x|8SzPJ>eY|9@`Y(6fi\$y>gys5X4C@-%H!v^è:QYt ByP՝k1ǟN"~5#hd; (VI8( + Ok堈ԺX}vP4S+_:jxjրmQH%)r,̟Msnٞ96t8\1tt{oѢQ}c)>_(@:yݙwӇe]㙟uk""~#m^M^.4tEgxh6+z$?G.pY*xZKxm|Fve Щnk6jw'f?V0{ϯiҷ!nad7ií;OYa߿T#C@b8lfk^nhikWqQg,!ل|ѝ/  FdI.^ܽuͶDٌypi@g! ߙWұp770įDte7⫽؍ZDe?^; q6G)k2V:VJָ1Kamc'z+>N8S󵻭/t*Dp~vOq=9-nG\T.d tJX?GZ9}dQԾ3?djݥ/q|s޾o>?nNqQ2| H2Yv?4 \(ZH,:pϲ66j뱗7}@R@O6׊'y 9eUhs_̷{0 `9MEI܅8ĽD`R1NӌDX7@=%?JDMKH~I,QIGPش(H_vmyݶ?AEXhor.(bm5`U,jÃU gVڪmUVgn!$67`72Y"8u>VڪmUVgn~3l)(J y9.\"[ܥ9*LCm8뭌llfodkߒI5_1铏Oƍte;kNd;(UEXd 5q@ͳ$=[7ٲhJuFxf7@/'=(@)O8$~NEKIZ;"?wT%膾H%I + Z[T5U3$1OXe@a-3e(|M1U#~/)m6fr0:w&R;N'0w?̀_ҥҀC 13D`I`2a#e AWwDp~(0Nl@EBA!2T,%(vc30Mjl^X9*CCGdFlK}Z8Yc {;*̢LyC5 wٰ26 %9'3۸p7|7_o,|4i_ֹ"A9Q(OimOB^e(nA! I̱Q'Ws^?Ox_;<EK?fV=^bH=qtf#'I.Վ`)Ib@ ha}Uȕ :z]۠!Zz(rsM';1pXA^@H9_KSnRDiH$:aI>r&0Q'zdYU?ĕ];m.A[hi:a;74W{G09@wɩrCpۆ#0Jԟ]yc۲i7 L3騱B@RTnQ%<ץ˃=ʌBHRgGFVpȿ9bP_p;>O}ѵx?k'C{/@Nab|j[,x~nWH@3iRpW啹Jw3J oCuhֱϜv·T:Ac@Z|:`3jg>V8;]SzQ!6;aKXP`/G }4}ܮ{$Ï~7HO EՏ󳬝|~o63Up^82 =GLj -4y+[/e`{UsF록 ?NhOJ6τ,QC@Q)6fPܠ5ΐdrg>B&#sSjmGB8ÂT|{ӽwi8ZSNj:X?pp5!^(׾Ob@pBH$tp|j٠iވ7x x6~/\` ^$4viqwXG(dzGeI[_wOln#ĪT^ p>޲xFDH{zd3U@u("PyQuPV~gv〼? U8YW|i i( =4PvaJ \:BI6Oo?se2Z=chCB2axybžp%`/. @ q]?}P2I[)! -<=h4h\jptMz:8*xⱍEe~0: >-"XO~p@uƒ*@#0g HLxz]Pz`VUj8r)''Yz=GCʫ>~d.~GͩaAW8]o5ŷXm~F`hkS,H!^јrK8v#ǠH>=|k1+R>>Iyi ?z-O/+ۥuRnlv7<hd FJ" /I =6q7ڙ28ARArPT#I@٨ 52xO0bPb.Afm CkTXGb cq:UV :jD p!M`un:p ?qVKG5lo'wO" viq? J4\|\b6w56Ig炈OS%̆ 4&6$ @*`1 FiT vbK&uT_ ik작/\u31i6^Il7MGo]vZH*aC?h|4,r7D\a:;4]snWKkZx-:T-cxEG>2ޯg}>ꮀE~~j=4ѾRM 땑0ENwH* -_bMZ[nH0;O:vttHoƑic4Dr6,fa !z4p~~6LjqڵI5/F!1|z<`eգ)[m}vh3^_gd|\:ZtBY:(gcHn`SNϝ <;=ځ/98G/Md=;qVzu+ԏҮ?3A ¿z O_uK>KG?~U?&/Q/O5f}{`s"CRiE"ΰ);jP^:AQ/ 05fr@NԠQry`oǮ^BS^Ƒh(loi4A;6#:&tӎ/}(öqW8 !ɮv>+!#N<1(.0к:ov1zyv=߯!آwIYL7-4[ă4HcfqGMC Jz?ޤLrp3!@6(Yʏ2b(@Vا+pՍȁsK`J= Z`Fcy"^]Pxq]nv')$a#V5,s/d]#Z* A` G> "=ꠦĄc8D;-]\+3Q+uXc@B>b!dfxLA 9:a:bʮ# L6F|`#ȟOMj)-Wm#QẐv 7|xEPCf,ΉJ=<bmЮ@(MQ&&GhmgDJ%% /xC5)hmnF^V41Uu ` EW)z}Z?妬7PxUL*/‹%1DN~ͽsOa izvegq t7onu.◟=y~Koa=`( (MAEB:geBc܀#ıtEz#86}_|/7;6ώ&;Htб걬}l-9j:Gd7a. /i`Z=4\hb0el VO2J,wsB*ngy|ֺܽuqB o~5p,W\گԃN=Hw%98q[pn^Z쿣fyÂw*EiRWgӛbgp>e{ώ8ޢ芁Au>.Ɗ%p@8=CC0膋OFn'>c{Dς{QZ3 JD3'{ \РGvY0C%oFX]u@ 4d "cҠ"xO]-rHmÐ?Ӯr3oϰlm dHϰ~bBUTU&W*yǠU13mdN 5 .#yD(CR Ud(;TAۀ / +ZÓ0 0v rj9hwhՕ.nGJ^P욭O^2镞|)[e W8gvjl4=Jf9q7 1{|@8;圹˧O`_,rq crw J~0eiγiD8'O1dTُ 9@4T"cJRlV0 y =wH vjꇺ&1Q{i7-y*& ߔ41`v`}#eX>|k d+lF/OZ$}D-?I$uX>M 'W(W T ?螜%n7DNŜ\lG֔Úʋ!/Ksf4Yv')OAP8N<|KΫCg? م-F~  D; sZ0",TxzJGPͿv^KǠwIL N"q(琘3}\,,H:UhqA9G|pК|q3R_\wje0?O0ͦyG˽˹]gN4srh CGϛ9㞍K-|:'m$W 9qխ젩.#)=te!=(2XCmU^#z1ӭ+bmJi{IS(l "t6wM$S~,R'@/x7?>?U-"xr+~ ȷ_tڪLVؾL>!!pMO! ?V==83vbbsNU Dij% h w59+ *$5:uZ^SVa?O, Bݣf 9B'\4`'N]ᐮU$aox]` re%9ns \O $1P<뜸f0}AÛSdm9h0q+g&bF9ӚNM;4m{W}Ґ׊xtx֡icD Ĩ%,Dw)pl?vdd.l{7 ?l/o>wfp|嶏᷾Ȇ!+?")#ЌĹk޲"Zp}~x?n`9k3acPa ,.|1Щvшċ^)/ Ky\޿_7iLGTR(S7&Z}?gO>`7ZP5okA[h\7q7SY]J<2\4>&Cq+eGʯo- $jh,s='~b׊}}꽉*f/%\O5'yrzsu"LBxO@:n >࡮٧ϱؗlHO|ymM|$6 F- 46zʁw?0iSbc&8NV@d1XDI ՜[2u m5кk޷鋕˝ً Eڼ*~F|SU尿ȼ)ekߧ~&>kʋ5oԷ:z=nP%#u=~K+Bz %E>OSO@-W@u.ѕ%`Eb9Umbw ͭ2\Qaw  IM-1mI腜=HnMe ITEC. W7~t /(Rm;i#s > @Hl`/\Ad?`}D3{l/ˊ5k~w &q"'Rn8Z>y+qж^ŅM0Chd&8CKZ eP/+]ܪ-B1A2I&-D@{ບ(I ¶t~|Eev#DlajOi,mcFlT=ZhevX3UlXH0=UUKGƕsu[E躎P{mʗ;y8+#L9/@ MMR=q4dž"H45p;Q;7uk:_Ouili^0#g0 ` ذ2 Zjkc^^36Btm/CSfr=A>3Y9{I -q;%Hܬ>Ao=+7I@CK . QvN[wg*O>Y|t="a 3yGCw>b44)v9" ȩ˔Ndzֺ}oE׃5FLcAx蟯_ W4]>38L5ƲڒC艐]^W5XPe!b &EJ?H^=HofP="rHY/ݬ 3fajQBd <'Q L q`B"ݧ9><mZcKEtתcXǠa.5ƕ=M㇦ ȂA{\\ž9*2#X%;y[DE`-s7I!Wfo=aζ~k?DM*E 9 1N"T!BɼM9*.МnH({9xY  v ;|Rv42ȡB,gb qj(TѾQ重l5l7&zmMd9@G~ш H^ o9q M.Dt׼Skܚux S B%.ل-fI*|5 =-b@?gC9t"{y__zrPUrž&z9]1L:kg/FԸ`CD5RPI| oTANL|x^GJ6}?N:m^;r1߂  ϓu-^f'! I[ 'ʁ.xq u=Y(ս< zouP6X D6^.L.QcG~ْADn; i"-^NFM)UD-$uJy\T{H4I.P+;Mm=7]}70vx|Np\`P'o6m[>o٬"c/}9YmhjrAݫ0^C5jPUH(3٘);;zb#0MدL'[__ )AYfљ.qE]% q1<-U .Hby.|`R(CULo ][& 15OF{laH\Íak@pk$8j-Oװ-|՝wSA`;ox:曷~k6ת=89A˲~9A檅h"YZЦMѱ !p廛k$pv~ΓKfu*'+Lv>ᅇ!p2][zk+oei#o8`-<pai)fv͌DQ/xݜ,̕J#j}{L%@}8 UЍdN5Q}o;&h6 @qŷo;5SqveOc~H^!]@˵[LE}#fH 8toPFF1]ݕ:.wY1i^Z~'(n"P^;:k9!:Mͷd6.H0ҤصU*O#)-)TJ JHawvrbԄbmq1̀`7H)7ECz;ak_&'Q^w 'Dloh]7Jm :md1!dR' A{ҲnA E[_9@";\V9aŁUZ/,QbdbEG3+&45k׼US" Mec u-nm!M5ȇ,2A":gM?Xp`n#sy= |Alb=h2#\O/wxvO!LW>MA~nƪIX!kV(T-2s Ow35$PfwwMd[%CzDsZuvt.c֔4+{~ z`oܳWn.@zX}:OLWsW`rWͳyW*GTavëvv/ D3^ g?b$b_@[&ճ sTa g"뀾K8SUnk/o>ے0 p8(RprJ$  hs#>p|-P%@+.f`xX/oSPK\Y8[͖4tCݵ'v,J ߩsGQPoDz{'nY=^|l^KucP }%c'W1|Ư|e\|74})Eov VQ/JXP0^2mZtczB1Hb(`|̧':bU^ ?x|6檙N_{{ fv2 \-\.V4(:^p8&1umKt _~t+[9 } 7DKE#MES֖GBuL"I#uإ*0Z=kVZa5#?=sp ;\\t/c j{aK2|asQJ火}B^p˷_P=걡UH@M~eQ#'%s;xp̋~(v<;Y__qZ)IW/nUYY!Ks؀jF X87,1mdt΋g(bYgۉ'Dsw~Թ-2eG{vngh﷯+ؼh(f]%6US ubtQT¦U4fyUL$?^X(yw[xu.atfXyſjʵ`>6͂&{v/3+ʒ&Cjzdhs <ՠ%{&r!boXuNoGiȊƹt)۽d*6^80R6a'4ɸ\j58A5 7Q@TUeIɴQ+%3H?bXNȀCo|trfƁO.tG%5 jTҮi',s'3Oa*Ĕ^Ҁ62d{Q>Xhfb&5[-=%kV:kibl.D1K)hԜ}{9 8~P.]޴뮖Cf?|xK5RL5z/XAp-f~n;+r {qʆc5-Rwy܋lg6>G$U8F/˻q*4afg4V,ëQv]o=_\oreܷ>- 1!2 S ަsCG/;@fƁa-*l1M̻Nzz0泾Po!Yŀ3 Cv7/V _z׻JEWA֭w jfM ||@n/z5`$c$`6]j`@gVG-k1GM莏xWڰBݒH wؖz+wՄ@`t _>sW@x#;&ÔC;ˇ=B}vxCCP#yÏBCʞpZQY׉g] |Q} vFYNٴIS8ApSHʘpNhD &5< SLI =b0t&"<|nEBzk5[ƨ 9 Gv^nGol +D,4 ZvMY;$>7FDNGb)0YW*A<,E۫P#,d~HE3ڡH~o'nFuJo50Jd-׹`gU@58è. kJ(n +ߎJi=QhAɧ y#VD{3v/OM' )`=r=yZiPQꤢ11Xl K^g*fP-LK0Ht 1h>~QCELYăfI[pV/)tQ·'A!7ߓꍡ׷=]١c`\rf39Ҝ>an4|fXa0L6u4pjB:Q-8ʁH(e(Q6`i-Ku dί:r8JM.aseӲSұ]~zjcܚVw˺W=5|\56i횴Kk.-M #A|phGx'*߾GNwGVn[PJL7¬`ǥִVgٳͺ"g'.l[-:89ĄY̲᝻Kz:=;f*4kQ{eGE԰{Uj#r .ά6]7R鼎/Ymi+3`it@%HR`̷DghN$/%;n(稫fPG/IR3ߥ (6cރ9t\4 !1EF%d*2I'x.\`xo7 \BOs2k"nsQi3h%@1,9aïXvun8Q};޺T߱=Fîq܎ O50uabܛr riK-wE2zk3nC'Ҷو@EE|H|­ҵ3H.K#ߝڟ7.a,ɰqq8R8?M$ ̀_Xʯ1;#o: V7)Ppd+Qh3u}YH|өG^ʆ" HW$30•itI\RXٹXlHաƳ55)$?h]HbR0z0гp5rvV@踨cB\q*ڞBokϻ:sTꊺ28f׺( ->xF|U~^ƕH\?4ԚNKjv,(s-@Y9,l&R_i w'c5,^6}ፎPڠPNqf 6[Gs[&1Y9/qf^̝𥶣8Kaɣ.dp'Ex\:>IEj8 .8T98 `͐1Qb,mX{5䂛 jJFr #n9 (6D//澺V4X:KfH- BqPD- Rhڰ˪B2Gj_n[mMEڰ?0 MlHH zdd/y':{޳k ?|tݚl7p ,_d UD{ LLa |dD)C 3#S+f@-]l ϡD #9ݥpW}BFtՙg2멁5j(cTA;=|޲҄xbO``섞d5ttxbnfˬkӤ B9׉W7􇍷ㆤȁ(/7͑ /p %"F'WO:uy2d=h4R%͗:ȋu! rmD.#< L W=_* '%p ɟk[aoZ'̍V/d " l=]h H3˔PamB\$DܡZ\ B0P[YKƖ|NC` hk<4קp@#Y^9꾔ʒ$XD26GX3 ZHbhH[5ʣmPPhjTrU"($3hgpE ks ӗ}^WOgv>j`󛆕qhw-wC99 oIcat>u _7]X]ŅB{$G\ xftoWZx#s"m$xp8QAuG FޥwnLr1YgCȁ_ԪUXdgMژw2 ߩ+B ߽7k8_F!R ijZae\Iۅxd0%A9 3NQ{ u uƃv̶hCa,< $P?|]F' ]8r1lKcw9g6Gࢤ8:_I0퇺%a(gDIq s4{O섄Q$\)fNbMuoij %Mp-5ẅ́&m+$ab 7=y ѩ~#gޛt>ŞOʬqUt<"A%]XEj+Q >z_eO_^FQ.0=ja /hY̯z= ͹mqAӰޠ}cM'$G_r/d8-ۤO.z;S:SscN:q< 3Cxgz*V2X(&h@z83 ڕV|̜9X _-yBmZM{v)1 א\ᗛΤ A@_0$vI "QxX=Pe.=t qZi"-U,Ԩ䜝Z#R ~`69 lI%+ք}=\BGZ߈xؼhC2꒽c??f~X4[#ȾɵdVy>>VaE>b.8͌>2v nFkN14%:E:-Npfʺ\aP ?W\x.*/n@_׭1 (2M?HC=pzijC" |̱6 >2{-2(h8sF"EMl0Z6s  C.o@6@dFxsa#AOp飰~;սPz$I $^pQ :_w%} dtFУ6A2J\|wo1@R lT/7 A YܭUJID=H3,nrh=Fdw?C|]뻎"~x#‹X -Wg$q΄ yL3׃ х NhZ)|Þg;CP&h&p1UL iPY:9XW78l8 4r%x8n1oZ_YN&#2*{1lp%^ MuNm/FmU( YߒHPC}ח"DCۯn{}\֎9?/B(\^0xzGFyf/⿠'T<`r+ܘ8Ǹ$ eP餁f>A)KV+ )V-Ь#+Դ=~zo25^ V,Db51=Jl+zx Qb|3㷎ȵ-ZbG''LCF(N8uE=âܰjSqqZ={++pZڰ +v;@h eloFWM6ABL Ϡɷ$C;ڨ]/Cmd!;LJX L@1jk?/U#q%ӄK+deYΗjƬ6tj[\}ϏMC0Q44u6|Gk4y| -6{ YQ>*/dB-{SN̸Q@omEN7‘98qMfXurstf2.'LȢn\c3- ǽ'aq7)hGߜ!:G:"[НL`J_®伾"` @#p"3Ed19ұoJZjK3nd>`G5DRd@NI,1|S1B39`"m˯yņηXruJ_kc]qj}¯ed}L%+^9.;.sTb&fhkd8r# JؠsbAB+ϳlέbSl_h[@~{>g rUTx%]p"C]]ߏס\Iŧk9"upo 50s]^! 3}l+Hj":b(]|Io;官27'F׫GzH7ZG.r.9# Z{ &)&t멸zj /* fl&?jSPR%@GɬPf0PK|]h;x:_$aէ G+ I0>oY`/r$@sƫ砆cmZZhT|Uڨ & R7^#XbS#Ƿ8<2]w#^*GXh]Lb +ޣ6]ItD1Gm<5u\_Wm̨ܙ L{t`5ѐoVag_OS[I\.z ][׭G̣.2IRTYN*<$bD:aDg8b\0!1^1]g$TiJ`H;\z~ ̕b$12=YA8)Fem\oٻDqӪX] ߌ{MmpȠUR` D Ipp8ņ1V~rrp$1c0+VR+GWl;B/rZ9N5Omz1 ~ɋs|<å \!xi?G=U[GXr (RB /ulEZCJ'姕ɶȋc- bAGg)pJyA-*yK降B0YX`#_qr.Qu]@zuDGldt*0ZaCm6[&ë֐K}\XGL[R1r~= G3fo;@le S^WJ$_5$[;{vO/ >iw(t{H+$s z,̬0f`”kL 8aJH8;E9aRY0CQ }>yatcKF+D9޶bQEq5r}GQ-bPjNÑ-jEeҺ%FT PࡊHsHG9'ϥtѷ> #@韋5 $B%IA!$3nwK}b\lz -dž Hu/!dN) :[Ne)6 LHmh />x&KJv1v<rw0胟K@C#A0W" v2VmWP"pYty.qDkq.Xػw0j>DF3dhDF-m>G8'@sÌӊhG.[RK=Pj:2 Թc5XV?d GP?FWA. @~ћ(!0+ K ~M/qs^cߛz9sͿz$Di@l$=vÉ, Ee' PC8l,"#4Z ~=Em4x{\*S X?ZA_}W4'e¶UE/q}j2>`(CSI!f:,B$]:g?V}7L|̧fawJ|6_aK6m ;ARuM`u-k ahMzV"y;矬<85Ŏq0ƥp",8ilm {Xb1o`_`4%ZGD|uoFqio# N739ŌCK~"Dg{ZЧ+$e52c )PODuz,e"v ru,Rh=ǭkۜEehXr9\\]P}eCl/3xf)+۲Pc䬪e'@,kpzQ `V8&6+N"/{)$5c=d#q!^(|%KZ[r%E <([MZVƒvkz`acprqwW^ў||QLj_Ơ/96:/93I ]h WĹoKF:hrq_& B5y'}z&Ȟg'~oM #nK?Ļ5K dE^$bjhpA /E`Hr Z|?c@9+p0Ii|F|m 2cTe\#TE9EN4NWsIluĝW!!W>% w& 3ӊc/߄ɠYwIEhџSd]nOĉ? iУ4Sd_#ffnXOr @ B{WQ^secaV kuBTCAh#+g+ X#08l~ub<q 8V~F!BhĆ$E |:u"ve u\`@\zDlO2T4HB㧃tk4}?G.p*K@sR_нsae gA2G^Zb ӮwDovĤRL@ɽ\"!_[%HF\DJjj(!wm׹oSMr붴 m_P(/Mm{魣[|jimTTbenyiWUNE Ģi="MHL@뫚S)#GV d|L ɉ`"#©i_b^F M:ĽHk2$H,E{C[3=]v[srq3Jm~3wܔ[m_)8_Zg@ ms3:%Q: ˄=x=Ed&](\M5bڭ9+ɞό?8ED-idM76vpmgM)c%[7~Q AehU⳰{i{wSŅ:ity+Ѹhf7B}xqD_TƩJ W;ېG Iā<lj>Ƙ^3kqHkq"&Bb} )0P1:]wHytsz_-xuxЄOG0ƣa .|t? y"+ǧoljZUZjעI.|rg#,7r`[ ;.p&L0[}t'NG`AH^=?T,m0tD roy7jun`P5Sc SV3- /Vqy'X`]l.hr'ݮGf[]čC|3dl{/J_Cϙ'.L'b&*bHV$Zg4nS$Dy봅(߆@'5q#M4j$J"f1)c,c[$>%5ZY؁ة3?͆xP!1ߊEdOurtN)m]L7mi,5'TzX*"> Al[c"fc{XL IaL mQ p#80G Ȝ);^j*& :qZ ,N]h ("ysԼ _C ."(CFE7W ce:Z^Q| 蹟mXe(_ ze%1P[dsftu D "\ 1wNo'C2~lv=g8#Ͻ6aQ0avCtVBz"ņ?\͡@|E%`mCGq<<2Wn]|3ډxN f$dQ,0%?񚤬X(34v0DJ 茤.18D'o2>O.6ó$N̢U'"jk$ JZ[nba]]hި4q+l{݌G6 A VK0MOP%w$Y!&`?"ZaQ\ Rp"h9Y9 !!!DȐ>UO8uOYw"=*M "Q 䒈>A*ֲ ,BSd&a dl8ߝAt(v)7Y1{6IwMv*&l 0>縪Z U(‚~ 7b#2bC`㤿K|{o:x:%MP}UQGV[e[e}S%}"m|m.1@snX@;T9S! +^Wzņ}uk}F?^n¡nPmޫt[~h 7Ou$l/ͶO$ AJSSʕ awؔ9FȃX#\r#xۘf0Ap7KCJ51&+ ĸ:ݺ\!J ;qds9:^=@VmgZS."^\,nDD͛( J8 U$?7x5^ƾk5wa/h현:v,c4_)oD|z!m.xSm<1=v@ 4vtEO]BdCcQzP}-N8 XYt8d),ĐiEUX C#[7āǃkAȄ5Vp%ӓgpta}.tf Jj'ֳҒUIIQy2}'mv6~C`ci,iZ"Bg Hr3O`JDžxo0s,IfURw+&f'^Zzd2{ U $ sHpop]j6+&X)`*QFڟ3(?E++卒B848x{{.Sz}!XGd[i3db^C 7q!lÁCEObm L#53UbSO(N@ۗ\Job mииqA畨P1Ur1NC 묨 cg 08F8{dMApdfgB1`5cfpjp S:a Z]=ϾDEgN-v;cjޣ1kz}H]a! >Ȫ,zt< }~JX)#AC8T(1־748ԅ? ̭o =g!:h= ֜{)gn\}|G<PN<,(0X@aބH%z d.u{C2d!( (l  2DN^Κj8n0j5RJpUK]6(5wn*j*ҍ۸狒Ӡ qHg(Erw/ T<;wxywO(\ސ([C8_ B{hp D36`/u&Kޜ嬅ͪ/7`76qˊ֐^{prm?x:AiŒw pC`*HgFFurǖkֻWb O_óT[ܫlDr-Ƥf fX#wq6{6D20v: g857є#-JH%O#uclƒq ;^m#yt:B>!ƬdkzP6 jx_E~)зY% 2!RK>[0yɨ\+ /o( PREE- 4f*q;|Mqyuy8!# vXvހ ;y#-޶p瑎8@|}PpKgyNe*b%R962%a@!dIgκ$TqbFzȃ]70Ӝ4 vb$Cs܉[ZqM]ldNsc066@p$[B <9WuL,s!uP u@R6)lЂIce٫{J*|NZ&ۋqSƙ>;G;ӇTjG;'=H.qw c6CM):L] !}ɬs gP+ ̢}Ra<"jCtCuyݱB;"׎x􉲹1vQus1UQH,O5%ϑӶ%!&-W:c3vqw˥ >߯gYcp6.d8ػB|޹ٴCUG,dblm,,#6LsˉǷ=j2.5-<MbF&gBqqoQ !e 4` 4E2g"L ̂To;a_(o?(`oLjY`g@0les/9h> dE(M°,gcF-kPa蓃`[sBzdG<.hR_Af V5 ,cY KYg-wWtMc{diSPMS=q-N ?Ouj/-&*XXTDXpC瑎pt>Cd矹UC ~h@Wu-]c! ]C4P̵*lyЀ(qMb>HjY$'%'Tevu"8@Xq2q_D EC9?Dyo?lRV 2f48I]9[L gXkq$G\mv9"^% PX 01iU2{849:%n`9O/Oo={>|͓շfogQJ@x]tgQue+S+Zy~K<$q6Ēر_g`7i!HMs:P iuhc:x!5lN hy«7$P̵UD-xUt#,9ȑā)WE.L2-NjD@Bb-0ǯEm7$s>~D: 'RsY!x=+`9&U~ 1d8L&~tƃQȖ0㲗ʚc>$'qGJoJcw֏ LcPP!IS{Ig.֗w$>WN>XXrm@pA`DbZ䛞/B$ZBטco-t4#kQ鮾+a{FN=Os7p.JJ;BMr)(j`-2rP`=sw'˲3\YT<B3ҨU̽iyQ@$(7* {&qoGaKܘ(ZQ`jŁPaCN^(bXJ F*Pg0[9j되s7 @ry@ Rasݑ ZШӃm 1~,ޙ$ <ѷ،n#Bsea¯ cnmt4!;h6dd9gC&QW B82Ra~о0(ހ\w_ =o~܎x{?[$߭@w_`c.>0G`Bws Q$s R>T!A$pz,:ʫ2Z`3qk Y2>'1~uAXEd5a̓bmH~}N)9DprNZşܥ.+cX%uT;ex _-@G>%ĸy~RN@ԩBmBcҖ˜f>3dJ@zF6E5 <"Ƚ8ugYH#IȦ̸=!n(|w~23 ,\DJap4Zm aL.kre·Y+-"^. vRNd.JHvBȇJ.xV)H3"<PK\Ru !WMu}HzDِB w $9&.vpȦBsjV[1$ѩhIOo-|9Z~ÉqSo= l}c.\ɕ }sW =m sSb 2C") XnR{ mQbF *oB}$ 36 G?HLFu Ρ)iҫ*Սd%:^ջD[m.Cpl:gSN'[(ݹ혖oGi=A:w>߫]ɶ>~#Z;;_nu+]<<'J"?UkEbUO~.86P\2qb;\SD"%+ `$$}.;E#[ \̻aO!p&k_(oGgY nSfN;lݻzK79qpr-n^=sQH/{vݪ\_uyy6Twn.xnunf~D^£QFA=Byxݒ/ 5?3YGwCǏv绺Ch:#}^+?/|$zvc:V@Ym+!G*^1Tmjl}Nvcx|Cӵ}ݭQGrlME005LJ 4l30Su'dBËs7f͟,,M?_զ?mv^wng_̾}unϳڡ]Tƿ0)CU0*`p((]A{k̓LD@J;~\NztS0c>K_ nOw* jQP<HŁ#0<\v~a.QoT: N߿~"'O7O~mAݽ ԡ@i`PP5lTcER#*F0:ZA +&?eK%ɶ `?L(&;{-mC4p)gR4UWl ,P7:g Ǫ?qaG?~wDŁm`~~S6C)P9-@P5?+BR$QfZ^\!3$)ȈO~YC7u>S3l%m{_4|4z]}銿C9GQ,>N;:t}ylQ>=6)yu"z޽ uChw)pCҺ 鼝\wꯌ_C|,x-Ԟ->Wų?b~#NIm @mWWsqzFua9,sA!kRClAA]á@u:I'|G+}1+<=Px(2У)Qxy Lu_1NVD={/td0F2dne;ś.x~+p@*x/?G/2i:$JF*, @$H*N t^۽\0z#"9{[-2|ufg۷loz}"ۺfVG]L;GQ134ghz68V& L&prAP(c‴}F$ n'㳏rnARwm<0].,/se|W 'Ώ!UbM'wɡٻYskkEu풺؁X:E>S`]WÔVpgk\ڽ}6e;ؘ*%m#@G+4[h!أѣJǃz_ݟfNDaed8x Gl HWVԜᲕ#ӚbĂDTwo:dϿ y/|%"c]':RJv\eXP ^? +d 0QF #ToXMSVɩ_SXmцBȢ[qƌ&( Zfb$_}`̓X yD!;XJ;h[hH@(Pr^Ϳ/w|ZgwNW=U+dpQ~kmPvI)0y!lt \wj(4iZ@Lcn~@sm1maGK.[bBPڍp` 6I9hsdhց:9h4*Mf\zkKY5T}P N?lSaAp?3פ:@vx5}>)V-Ȟm^(l_ߺzz d4Ó*C ; =6*Q6AK^hJ!AQd1PWWFaxE Ƞ6Hnz,76@' dwa '?G'[FziwY=q`ȯo˨|C@ED`㑻Yq !dtuk[CX" V@UnF\g/Z@(yDLdƞۡuF`%IX];O1@Ê"yG enwWp2Ё6{]dQd<1 1G-$X%=_z-=ru^@4D(a@(%VIa;Do A#ޘr?*A6 CS]PZo!V4˲:4=_J2q{4yA>6#C-u~=vzuc @]ǝ|Ez#8.vh<#7&~?V.wuOk['4r AȪ^{ m'\RU>#Sk`A蚇6B7KH{`0}Fy~V66̢n3}^GߒA"q/ꐱ9Ve{"ճm#&^,-n`1!Rp.bYWM=*BHi:y}4fцT˯>iʢZթTu3%#$!FHcecYY[1 T';o3=yS#D~0qO'Q* |rtK߾."% Iï౛y VW[`/߿B)brw9:.hr"yqr`,ՃނLr )}bPjPԣ;6BFgIA4Ra/f4@$*XV撊?Ekw "SkDuORLӦ@;lHu j&:*M(.J1l-âع'8ekQvW-l6NdkU1vͣ‹^J.h>:5sCqiall}.[yk I"rne /([L&T8JЮr:aݱ.(BpY;&d%tj}:2oL4cAD$@!.8\8o}ASL*Tig{t8pz9m`/5O^ Kf0xKiÄ]skxz(=(O3M*,OqggQi,D1ZZwG<Iv'mw*\t6ՎkP!0tBsZMS;Ze.Toa@s֕}Gw5g-$w2cX oIHoAh~6 _UY5Ϊ H򗲃ݾ$d@>2 Fo6]9rtb@A1}h?4PK+o'M|Ÿ%p).<{-*i ¯xNN FD]_U3Z/Ab d^$G#Aɧ("~t=9j/d$=ýǮFO?Ӿ=~nn>ka bIPcDGeZ3'Hz d^mlҸ$HB ./P wjߪ9( 4n .:`+4Vwa[iɭ?YO4 &,YBq=K}UJƸ];W{V~YzGR ]h7V'݊ O8܇Hv` ny4Os@@߷[N?W=_SuYŖt*^[tl18;i ̋Us)-9sFXC mE$ȳzwhh׻y" ~NRd5|Ou BЪzJ\,pitrBϞWIv˧B`8O~7MйՖ:@0>t[YDNhj @(~jm3(A*kM75K=qoELyGߠ: 7 #1v13BͲH3,d&kX wMDw_F޶ eca} ;6J>X s4`cI<3yh)%"WP8 a}prIYH0S^`g[4,̒\u(A$(J%<4Zq`4 ~P1 mpnkÜ6<G"`qeűJEAX%Qx *Ngצa)*rhҫ0 ]R@J '̟/xJj~pmY}[/3y"鳹k}7xmA P'zځd%4 ={4zÈi팇8{uzlN<ąl^ ?r-6c!dcX4 pQ>7L=X.ۂ-jٖo\@9Ʌ]xd7n p$jտ]^0I$r/eJ<(RjeOWW*#Mqx0ÌPe5_F7mdgK plDlm3yY`li&q%=yyb΍fu_=ov'y<0Xh5%ƥXf#6 'ί0 M ֪n?i: \c[x:F3$ ꯈ4x :%WTQ́23MC3$q$[dC0 S%3Gl]= 18z~ =߳ӈ}G\]^Q1ݿcSxowdr]C! \`J|&z. J[mVnڵ8`ɹS G2\Yx_.Űу~*:d(V4go,G(?l=tcߞzq?:o}T3pmb5 ,ZLgߌ/F9e;y]?쿥`cK`VCFc,%QÉa :m(Q@4`fAuf9;4V* 唑yCUȷ?XS1772skvjt@6ʛv0܂0w8w# h8W7k;ki C!!fKtd3֣^EFW+al3,!WKOO!}n*ښ6v>=|PpZ:|j[jG554*|^6c4qa;¡@9 XJ 9{̟?6_=$fM[Ɗ&@>x=raGyY"+wu˃@{5c/._ ?X= *,Xڱ0we S@󖉩$hryMahۺH \酷0홢 [?_CKƜ.NFAcNc9JY?v,!, @sGo>@m~e 4 Ϋ˒ AvZM'z07d< oGgG,4gQ{a>J=VdH~)_\MENPp̓G(FLD8H:BȨBO]ViHDy\!nTa)LVRel;CƆwxo)Ϗ$rarHQMwZ)5e$(d(d((((j(j(j(j( QEV ";o=˯鯸im= V4h#Ul8 J0J#S'ќ1曈M%X0n8T!:6z⚴GB$DU^f] !LJW)pNg*۟;]wQ]ߗدؽ|zz=N@{o$~(DOԼ篧8Pؔ  (i JRRa *ZB$ `Ja@ï}g7&v'j CCCC!Ţ:եgjҳbV.TeAEU#@RK/ wVMd/ ]Y5lZ.@R괅.@RVy˶ڳgjvA+V6ՍZ/3M4 [:jb@@wߍ:Cp ]V^m.dtwG;)P?Hwg5yveA:lD:aNT~R/E0f xGh]C`ی1+af|^+ޮ@dXA]A2Ct4$:هL"*/qJke4 p҈ jWR=}N:m&;QA^b!!2s]Fc!Օk`Xn@bBvvVdy u9tv(oXw Z[qtuxtΉ^@s5ۿoF{84 TkANƞx g\SjT#Oo'T b>Uy Ch/u&/iSTA;:NP%OnYL0 ER\ KiȞ7~ -ꈤF4E,u|C<,Cg# $m!1ɿ7ۥ x֝\gCW9XSnxr·¨RM:޾d]HCMKiո:$625BC xHj -&Is4 u-<1'Ӝ +ͤfTMoϦ&C(wݎ&m9ϤU!՟dӬoo;~^w_M*X%Jdp6.*[SٲbHqM;{߷o_yq:Oy?CAb?ʺPMHDDCfMb"T4?%J J0 ((}d%&2vTȔ(?2S"E h B"1R@Sd5U#:ڋ(%ƒU-?7D T$Xt@mr@M*端۶W<.IW\xNX[^6e>A S%# U5nPL˴Bo_Yzg5ݲ]D҄ C~^Qfoc>j"2@tUG_|H>6#J 4yp+BXO5?Oۜ93\y)f)wŶ7.pm8؄ SC~VC! fƒg2`APE$C%(Yy&m_z}~@t lZmlY-ǹ'jqi$Jfj:5µ$0&-^~V]eI-=su'4: Ů1CErxvy Rc; ff@ !ݿQ(4XH)ǝWEKb3$?")/‡'$ h: 9l`[B)"c[a- 4SyMVPޟ$UZ4Pz^0ݦ{G2:se@[c`v$dq*B q58pm<L@1D ͯt510[YߏƗѾ5YvNz/{N<sIK ?|I~  **ﴝA?$H j8)pQȑ!-8(aA8B?ndȻyȺ& C9鴐z?$:&yfU5[k=Ά7y0єЗFt}M$DAp gjdTQ٧MI!GٱRl i! :Y2@ Fz{6%'XMxꍉ{>k$"o.zMo6hY o.TqGi)@w!YINxG ;Ru.n|P_ fB8XHUunVsm@cVaÌ =p:'| s{n: ##?\o>oqI OV@HZXik `R.,w4@ue_7۶$^͸U3_Oc^ ;EywCۗ<ع31x!pIz; ؃dxU:~r Wl39&RcvK PoxMٺ>eqZiePs%Es䤣*P5muuΕhOJkqV% "H. qV _PoƦUYy4X-}?ظE{yxqXWI11iaNn8>οkvH3]3ܻRIw5$ʚTV~ƇЭn*9A5@.$ݢ XU42isǟ?~תX60rlȑoMiVC9>ON"bN$@jUۻ𗑱43M IJG6Re[2ɘ PaxJ03l{+Zw5T@X#.a[?t޵]@VNSLVZD(Ҡ)NOtbL 'Ӳ@rl 'ws"̏PDo/_0k8Grj= xVڿqrp_8(A/T.,.q&+ww~ITTP4<P^ؗAKJo 9|܄\" "B^muo5]+VȈ & {_b|i7;ᡒaRcke)ͤSAX}.p"~|_do}EևK VhEk_g߁<35vIH'* < 3֜@ E[ [i.[`梺p0HI4Wp1ggKǼR&_FvO@oQ-_M'gS0un`f0bavNf53 5أXoY``𱇉/ 2A$OS']3Q]gB.sݭnVTb.dk8ZAh>Y A{CY89E?7enby%: G&Bj 4;96*喱@ FRB|ōۦe8ҡDq2>b5HCaIm\列ao2Ο\VF۞ c U258 8O*34"__AQlՄQ*掣X^}W\c#~W/4L'BmBHO]KFuA:{A\3wܺiqn6ղ PlNʹ]&6[׈r >8@`@M Æ,S.eu9xvծr9o6;PJ@ANr7d "!90%ܣ?kp8XtPs9}K jd2 %iRD O5;lL,`; E>wOTx`ÃN"C #~}Eŭx#P\!>T\Ҙ7SF#3HSAzmGŢ 3w@p$(LB M@a& 2Yp_1i3rzJZGS!=4|Cذ-7rL`2a#C6p5 E]uH-|J y=|ϖCK- `2vu{兇{GQ x,h}Sx(B vK腷%`> :١ERCM38}bi/7؂$ -rWwcs;#Ԝ >с:=FoˢX6}bƏ_{0r,0BJŘ2kB1b HcLXX \d^]?;lwr9۟Y̖BpEHBM^y|2. Ps ^ۊ c,B=y]Q?u,0TJTrӦv @4*q]@7G)UU:C(" _a:/ 7tf~Kn8I,xD^$QE~+w~FMl} c#B"n?U;ֺ QaTZ:DoY1_c팞|Z|ݥz *H/O1p Ku*$zqBp0"y供ei5 LRvnħ2 ,Ba=${׶NqԴ H@abiHtA]-ms B"@'[C#1 vO Re ^x.$0CW 6N9Gqal9. WIC@e|Z[vGL5}nmf`P F"CcT @$.xg#3H#U(*cK P4p^Qַx/ucmcn9ƮlBz*`H p_EOFO[A1gw~P"7~(~fmX#OR[õdPcpY~L+ԲSfiOQ.w&U4RFD*!s;þL=(` P!͕r~/5%k8:sŅP?-7J1o_͈G̋g[c>VCM\#rx~6,Jh`3v} ,ϫt;_ﯮ|o!BvwyЃY>2p0s2(~D.ĝݦ:ՠE(RD dd&~s9'b_O ׄ`2~qOzp6UlOa*o\Ih 5LO~0L' N\q t zH /Qn ZEA"EsZpsx C$.^B/p 8)e" ]u&97]H.?fA" %HkBEFr-b/ +]s9BEa(.C▐SRhnhM(EO'yR|v c{uTտczߚG^eߋ3Y@IC «1.C |^|9tH6$ Go_V,5+I @C,b4