summaryrefslogtreecommitdiff
path: root/rust
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2025-09-29 10:23:02 -0700
committerLinus Torvalds <torvalds@linux-foundation.org>2025-09-29 10:23:02 -0700
commitdf897265c0c6fc4b758b07f3a756e96b6f2ab81f (patch)
treefa265dc2a519552c30b83a91c63c1ddeb110fe58 /rust
parente571372101522fa91735dac6d30a160b2abe600c (diff)
parentc37adf34a5dc511e017b5a3bab15fe3171269e46 (diff)
downloadlinux-df897265c0c6fc4b758b07f3a756e96b6f2ab81f.tar.gz
linux-df897265c0c6fc4b758b07f3a756e96b6f2ab81f.tar.bz2
linux-df897265c0c6fc4b758b07f3a756e96b6f2ab81f.zip
Merge tag 'vfs-6.18-rc1.rust' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs
Pull vfs rust updates from Christian Brauner: "This contains a few minor vfs rust changes: - Add the pid namespace Rust wrappers to the correct MAINTAINERS entry - Use to_result() in the Rust file error handling code - Update imports for fs and pid_namespce Rust wrappers" * tag 'vfs-6.18-rc1.rust' of git://git.kernel.org/pub/scm/linux/kernel/git/vfs/vfs: rust: file: use to_result for error handling pid: add Rust files to MAINTAINERS rust: fs: update ARef and AlwaysRefCounted imports from sync::aref rust: pid_namespace: update AlwaysRefCounted imports from sync::aref
Diffstat (limited to 'rust')
-rw-r--r--rust/kernel/fs/file.rs10
-rw-r--r--rust/kernel/pid_namespace.rs5
2 files changed, 6 insertions, 9 deletions
diff --git a/rust/kernel/fs/file.rs b/rust/kernel/fs/file.rs
index 35fd5db35c46..f1a3fa698745 100644
--- a/rust/kernel/fs/file.rs
+++ b/rust/kernel/fs/file.rs
@@ -10,8 +10,9 @@
use crate::{
bindings,
cred::Credential,
- error::{code::*, Error, Result},
- types::{ARef, AlwaysRefCounted, NotThreadSafe, Opaque},
+ error::{code::*, to_result, Error, Result},
+ sync::aref::{ARef, AlwaysRefCounted},
+ types::{NotThreadSafe, Opaque},
};
use core::ptr;
@@ -398,9 +399,8 @@ impl FileDescriptorReservation {
pub fn get_unused_fd_flags(flags: u32) -> Result<Self> {
// SAFETY: FFI call, there are no safety requirements on `flags`.
let fd: i32 = unsafe { bindings::get_unused_fd_flags(flags) };
- if fd < 0 {
- return Err(Error::from_errno(fd));
- }
+ to_result(fd)?;
+
Ok(Self {
fd: fd as u32,
_not_send: NotThreadSafe,
diff --git a/rust/kernel/pid_namespace.rs b/rust/kernel/pid_namespace.rs
index 0e93808e4639..979a9718f153 100644
--- a/rust/kernel/pid_namespace.rs
+++ b/rust/kernel/pid_namespace.rs
@@ -7,10 +7,7 @@
//! C header: [`include/linux/pid_namespace.h`](srctree/include/linux/pid_namespace.h) and
//! [`include/linux/pid.h`](srctree/include/linux/pid.h)
-use crate::{
- bindings,
- types::{AlwaysRefCounted, Opaque},
-};
+use crate::{bindings, sync::aref::AlwaysRefCounted, types::Opaque};
use core::ptr;
/// Wraps the kernel's `struct pid_namespace`. Thread safe.
',YkUM+ O+FyÛQXY}/qÜG8/Nߝgj36pTm n7Yᡮ%.n~6]9C_VEs e2)9H=,W;HqծQ!w9Q_^{7M=#5)aX0/~:7u."D-J*8ƾXe|g:9)sJ153ǾƢ5{Y'̕=4A,X ӣ`əAҽmAnI. "me!bOKɷ>ΚlZjk5HPxr3״uI%~`]R 0C-@Po$=oyf QM*@ݻp% ޅ`>^v02QfIg~ݰacV5X7z"$ym0dSvݳ^q~ON#I>L7Ι,Ɯ>Ϊaa?u f~kf.8>7.9:\WÞS1x*slJ͹2c| %ݧxɯwgI=dX#.n?M//,𠽷 _oqrKo&`6cJ?^Y˕ӱpOGqȭs $YkY]S~J]N=Sۍa9O`C͚b|sW۹:E~] M)*>3S-ݢ_췟Wl1nt8[`qy& cexZY9uC5Y/62'ՒbQq9,ZJ0"g?Y7EF?GSʬ/yV|+Hc&7ŦuYFk~d8@nAeEA&?l;;_ajv8(D+щ@}a>r:8LjwՅQQHv377HC8$B/2IB]Kw@%u #6ߝ}=cBR0ޭjjUmw=_ƬY0IAm  !P*#)>v#tqd,q^dp8ɕέ'0݈B[Uj.nۼz>Os I8r\k3T~ul뮿ѹgg"0+Y̆'Ⱦ:ҥxm&Z65]Ck3LK;#[mJo1?c3/DghZXحK`-DvJ4:K۵W Pjlr2̰: mv7LP7C7lZ,Ev9ˈ!ZLӝ5ҌBC,;S{Hȋ(g)Fp[bߙ;)4{aGE.|Fms*bVkg&T+/N:0eHf]Sˮ m2J>h2WfG5)`YuSTsBa`߆:2콅Y8 \kE_ sкb0׮WSvns5QܹZHspYyE-Ky޻B>5]|F~Ϫq i!䇋B=>Ȏ&RyiL ק_+Πe[+ܰ6܌_m##YpYZh,uE [8i~V&՘: 3o+-) o*F];z ܼ\HAǫviespwLuF͏bmʘOuyGN߬~s,EӐz/b0 3Hsj}foOWZJ~ ҘUqV&#vR1PlN4Q1ED2>1H H#_ȠSP|`xTrHЧ*5KBBP/q㩵{$μ0 bˏGӜ?,(H 1 Eӊ8``xȠTLDXO ÎE9hbKR D_gmOv2_ O.hz!a֓?ـJ?,P ONUwγ(J`JQ\! DNl|g$=Ǝ?T߫+jqٷi]?'r-r  ?ȧsҌ>`W(rr(y6D 68#9,~tػ5Do Òa3;Fe{@E(<5L0QD6*=6{1V&<%C{:M  )7HRBSMv:Hi-&Z z5Y|1i5,Q l#Þy=~nd*VPTmdiއ_1=ԍj+I5#6\7݁2 #OBXc7GӇZ'ѷsWJ0Hʿ"|a 4[VlAԫuŽ-λA2+<6H¡?i@YHXfM[ r>KلSZ?-`R*u6uSV>qkNXݯNcS 衑iA( #[G>/M"nn 5CcX9u|"ʓ,Z+>'^q<XgڗTz.!csyfmm۸>n=C|8F΁Jtz>.už>l[Fyѽݐu_y; KDOeQZ2q\͖wk6x*vm=`2ymߜ+\s~/OYLqW*PiSF@YjKD'V凉ʴr>7:o[I L 5r@t#&wPOEMhIKvh?=}s=Yv>?stj_4jz8fGauM"QC}~cLې<^[g.|V՛Wš 3u¨(>0f-.u:'eXHAD[ZX;zl1Q[V۠r#4ftqAĸnTό  .lpIM'Kޜb+筚~o_#=7" 8H&"rpf.i؟!ꛑt+w>/evΖw?@I+Wa7xtYglpx*7 Xds?T;sv~ӟyhͷje󧯗U!v;0q/4Ms^驦ݕQW5UW%~cJ6_tuu1q à R|)3~ZN3Akuë!:5 ^ſhv :p ?PFYa?FGzǒn) i \lE52G4!8Sls^4".6$5>u xA]vݾ̴o5E}]tڣso͂I/[]4K$°cGߏ-9UER&25`3龹lENTHN=}QHâViKzYBb\AbXp]u^O&c؝gY`@X/ ^&! np; &7HulXGJ{L=-߷ӯnd0r3ҝ3ILu`xQaAԇu(E =]WaObr_,rÿa`@;!J~gBǮ,}s ;' I7d-$pXnSb0 LB 7ZF2RA1+_arC9E)H4mIaES9`t(pƠ4I &.ETC|rv$htvKr@.h*'JDתdfTR)-P(| P^r'.C?[6N, X$y~G-㐒z>bqGoc%XjH6&:Qޞ:Txk;?Xn5x1F{yDs1m.ЀvmۈlQ:AYo/!Ҳxϐl(wW_/hJcVן>N>-ǕaNj1[껕`:i딸TLNm2: =&-O~NmUZvH1N9۹(?r@lu61ofՆ ~փݗWXw?=GF/U.5ia pgP]rwdتҫJp]/!5uGkﳇ>iн\<8;<%pL`>) UA.=97+kܻ2h+o{]o=X 7D<М_\5d#6~[vv<8Q‹/*VkR{ٞɝzݐL#;wRb\' ?R:酩1#f@toEox7yxܹO9&I`$c A]Lue*X׏dkwWavxkEMivYGKd\nݽ%hޫp߃x[at3sU~sJb&N]ĒhPk!CKi)ӜYr]v \,ݘ m}uÂtm@a>U??ɵ+~~]Z{Ģ' F燤wkZ(:mgr~]^P!Yk@햍x09-n xE!(%VAځDf"C {Øo'D:Hq9!sn3>UJRE% c#ݜX(K]s $H.@g]6\:"CoO1!z$'%TXcQaݪr{οS O$z?,Xi5 \oPȜuIZ" YDvxAaq.rgNu(WD'׾o CyP"i.]\ak{>u)no\r3N. ߡG !?Iخ* @AO㋠vGT1Lz_BeLOQk<1PfT3~_(&CxXd8k\@ jR]{_da3A.2Bqjok,"TPYr>= OWwT}\k>P5e$!@!`c,涾#D5eHV^v ܭT=Vǿd×ѷpڗ 5޺ae P4+l& ₲Q2$9kmNiKuI.',4j 7yNHt|KwwQdE$;5@|e}tA8;< cɷM˙ÒZ'F(疧Yz['yA7.*B%ZC\̘pTneJ]|h6J +xH`K;HAOWv+Ӌla}A77t4su[PXmiӴz7 Ui^h˹xl6q/xPCF_n^hFĄQvtQŦ^\0zP[^YX)`_Iܮk"%Şq[F~ue֯KUPqC;}G# }{#̶Y<R[!o$XjVp>N~}EΖ^(6% 7FßQةU滫*v#F :Ҷs({<%b>UKRT}0{J$/MMEјBbcfSzuM+?WI%3~VbsLT]DV>N[Ddwbp ]:x[2DAƜ;.aSi9o Mrdak,0;>wmI L")@op"i78}x G2dA'Gea7./O~t#5MZm-!T^g;7~;!n/N1BB%20FAA'\ v YYE2?1Guh}n[Ȁ}k(jC#C+XC l gײ ?phv7Ei'널 y]O\N"w+Y=mB^ϭM͜| FVI;=+ǥ|_HD gX?eUPRxj>1iA\:y"XnYG_uBA$rAK Q\Wl>A濽-?qTG".5Y8t'ʕUoW9T_:]n4[FFWofv>l=ݞYO^ =8МfSX^h`m>/ǿ Y ȸ 3=/xm"EF6:Oܫ= [N( '?M]_PDwwb[7 ݇] ̗ZrIiJnX % \Ŀ~{sIyuƃUnѲyvκ-=8T]|ɰɏ?L>|&Uߞ KШ># G6 ð&!0Prs<`9"}B.E .¾v.ǻulDê%(v;Xt9d["鷁ahyBꂋmb%hxYξ04`8vs1;6pY$zytġ JF|cW[/#u#Cs<=b-z췑]`g%L it;0㲩Qc;'? gD2=YM;i,(΁Poy"#:F#쪈* 4T f|~8Dʨ`1U:.gj:x!j5|VocžGpaED/g7AMBC憧950RgfdVi7>79nf`u9عHĀ&*QDABĪn.r|&PjTC5D`0#! Lw/ Wnɐ]}k7F^{C.mgt`vb*vE/;xCz@0~ϰ V@թ()8Z lwZt VK]@.*7-[)mu}@E ۤ9\[pՕ zĽJ9w҇E83}d6 r]qn!^c7wTB|7n5n{9"" ڶD9טvqԣ@{3~0{@k{K/],T9Ai@l,uc~S{i5S$'&t_Bo7vҡN_|pN:2 ;TĭϲPeo&(∃TUӛKZK8?߈\} Bl[9Bt_E3%jCk>/Aχ2᪫2;WZP)paWeWoV7 zޜqAkϯ66 \{)jnBlk[=k^{P L(G.HC YHzg~Mý*J(_sm[`DD u/BPZXߢd'8BE, vgznf;Βwץys)oliȎ;3WeeV\F {ӌl?u42Ws>z}?3pfX3aW}#Gq;KȤ/?3iHr;*gV.{TCk|6 rZ%T_r'P!$ I$GV?{ݼgN[y9gWg[/}pstu(ؘs >1k/]SM}SٶM(WD U&Q<"9BTՙ=?bxd,ޡoµ^mAETE@?HziKnR%O~|sClL\ ~Y@pN{v׶ʤi>lj>EA+5M8QTx UJI!UuOVť/Z5zH=LnsgDեg7c<00n2\;w;X9 @5rםQPXEU\><!,s̺%s8&z-Ƿ݈%Ϋ_{Cq$]r[+k{®\@|W7* J8t}|[s++ة]AG A"7ŠIWo*3j3'cf}{4b ׏>$e8esz4?BR$R$D*97EypkJPuUz .\9cKsiHnw]L3r-9d92H HOYˏ7qb/ u1su|]P%Q[dƾKC[('2Ula bh5r_pSb_ԭ<*l R},vT A.!_ЉOngR!';Eq囲AckktyP*d^'( XNDžTY(mc4|M'O={u^KE}p_ /Nߐa2pǧ}T^bV[Sms"O*;G=_UϘ(wSp1PAy\1&|g$@.X_}Q7=:)y*I;玅@WsRn.@6岎՟HGݿhT#.%Mtto[HXH>)a`y XZa{N.5mr ࢆCSGj;V#znΗIch9+ᴍ#?DT?HSx"NCp|G?곌yP?W$$l cTk|qEtDG{^jS0ν; Gx~ 1\\ۭbW}!6Ic#y¼Mz8tUw2Ë`,V{^0g2sƣԇsMa&!u3 83KwNӘdr'\6^5W'ɼ}/B4U?C%Oƫ1hPU<1qCA"Nr#%iAjM,ɾ';t%GoTs]IʞjN3sBD;#p%F)A 6"&陇:R@Ly|b9tp1nzx.ƛuo*&5gr-W2H=;r>Vj5dYv"M67pFHӹÅF/I R!B({5"95Ķøz621&yio88y!wbo7͎p.IpƆ$T¶Jb"NyU}$x  4FkWZH_u w`-uy~·0)=KI3f>8"V'RbCtMPPC ,I!a !qgٵ.m FK2p7Đܽg! G.U$0 ] 2b&8R!0b@9G1O049K})y.HBF}Dٰi=3"JĂ%f"9f-|R_XQ̹ Mquq^ oۃ s肫"q)~LDYQ:EZkKfD]3ɂ/SӼ} t"K6G(7~"|Rn{I(]T DDIath̀a2Oـݾm!ݐj2>3u\E"ڶta\-G%_èC:e y6Q <{@pbuez"!cTT[Z ߺ>\CaH!})hU^>Me8X^8MUPx7+RQqȆ#1 ㄴ6x??:9G*Z!YDރ6M%Zv>yb S$ UIRX'HZՑ= Zj,.@?z:r63!\LÙٔ{a*KC`FFƸ1Q;YbK_iP\ M \MoA+q՞Iˣg986J}f,[4sD5Y\SWRǗXJj[By»?pE&w{{moM>9 VΉo|]Cq|_ 'w8:C[G*oQ*'=UrMU"5ޚ3Z gf2}eHt|/g}+G;!>?vXK9Dy-o޾o |> 8k_}qi`{Ayr7<ٻ7v-ȶxWAtb+cpu?EfvO(}2t^QzMl:G>zQnEu L\xrCʹށꔬ~$ԟ!*&b]bG @aP:撷4yڥIo쾣eZEÀD6єc!Ak6\a]  N0V8GhPtN2zKfvUkȊ/,d,QzMz+ r_ nn-v!`O}`-7VNED#dk(ʫTKY+,S]|:Vy3*.^^j!FX>>yY4d 0 ЏOu'&iCsY,o{5Qǻ lݒ̾TIaI5W{l>F:QXvu3wYI^oapS瘌F9Go`nLc?K.}ʄ_:pN&{h=V׶AQPGO3SYc3 c(XKsVd¹ uccf֦aU5 XwXi ' XMsxMX m%Pcn8;H\-YsIf=Qkٙ0{ 3wVˡ,Ӛ{2 5%n6ƍX:]Sǃyc1@];7w9>)ÌF(HB2Խ9HIKxUS )S;8se;PHN7DMحo){hU.\y" 4 Ơv>*V_S.~0cݓ1K{ ˜|j W?Wdk`"AP^k,écL^>,ϯQ/۫t4تJ'@vϓ6(+Q =h"I2S[)b8 R~7[:m;-j9]F -7!By90|#2Bgt"˘5g!Tl!?\rx PU@?8H܋'pRly]kfNϪS ]am7b7ӻU./"# =="( PYآ Ku! :.p]뗁pD0L`S3J j,gx _Yn-&'IGMX3UY7W1+v8^Ř-y;;o9!E WiX` ] rkҧ[ϝjC~YIʠ[t:v' /ֽw6]׊(1r)b#;KWD9XhoKh'ԘI*}yؗg;2N&U9g[\3KrYs\@$b<<!ׅIL-  9PɬP t26!fXC=@e;ãEX7rKw:}U 3Q& ՑWrQ&DC-M4ӬsIw M|YSFZ<`q'8B<FLLA4*6JXW׃4VJUL@%@4O"/)>*U'b}Hu5=m5!I?vOҖ '\B٘?nF8@Ew2k!z.~h }C2p 5^])o8$c̽L=:ы9܃kj[?Y Zy׼F V/3%FG{ZKDC?Ջ"Kcp*x+f<%tj3~.i 0 q*; ?]bK!J7KmVi#ؠ_#5a& 'C I&*8Fh%y>K FCSYDjDC;0nhIj#|vurkO! O;-|)ka 2ѺES[YѮhIsְA|q賿殪.bugJ+ҡBi, x5^][tv_9m%X:/o癐}3EzK =9pSDk.,j 2$TIZ9],,`GYM |(%UV#ˠ ON/ L?쯻uB~u^8bYW(ؿP@Fԟ:T0M=d3zΟ.a{ϮڶChcf3='$YWѵi[n0m79)bӄn[{XH `Yn:P0f,6NX$f딫S18ڶ@[Eu-H띅l҂*~>g؊_eO+N NMYⷑ`G[YdqBg /@8VBw AxzM~$J`ښLWg-4AjI(^bWƑ2#~>;CLv6ƣ#F k 1 WpM磖lɺytuR^rҐa_uZ!j J2uf){lt/SjRJ{%\AI.+a.1G9yj\xڦdiOPd5H0TpqL,<>_jRdJyB&YGD"ݡ֓MfSTgs3-19]!ZLHE˂Pg=7) 4wkfTSDP<}_p/wE߄TPM',`*P7Pr,xd!+Q4u$6l-*,W~iu# "!sɄ"pUȨr;v-[@{U^#j!s\pV,I&,E{Sj {Cct~~+,x6h:AH}:Lh_e\QH#2B6s+ @* '2 q€k|׳RUXtY׵N1" \J?EK0z|s۷=wǖ|2Oۓ wHX"Ibo @JX#C`ӌ XD`a'(]ݛԮؚH ]"fƪ.RȤ ̌ȁ@T\[7=8:KTvyK/]&0)Ȯybd暥YA,eP򢲍"/ Es"Qpïu"3vZlUeU{޵TG֥U R.argK wZȺ\uh(-rWK[;M~>r!o_y.PУct,x3 H^ g 58ͤTߊ&Q.=rV(_2-h|rA@g.E.5aK 'ȮF:T&T<#5;7w:ͥR @ >%zZۓaC; ٣Ee!&BaE ևV [y Բ`4L@ fDB1U7@y>'Cis<򭓝%,(1խ|oӺ,{{ Xes.E]cs<994_ƽ+R3Uq԰EOF"3)l#5z?*S8~u'A&@~TjPl!X|ٌdayFfÒl Wٴ[w {f4maE$^xBߴ8vLNji4.*Y4#cONa6<[`F~c%qtDSϽI/}uP]۟Xas-p0n7k,ACw= tn.$qz?4+ďZ:Iڷud[ <"*ٸ'IHZŌP 2Vom3ک7_NFm-. =$\Fk1 B֔CI/T>^2@K6:z/Co!8w)PD0%v7Ci-e!U*`Q66J;hi^ijQ$DMԝr琼kFq?BQN*Hh;' d0]$?Wx@ 07"!iSb`,@Cnrx[\}dWkm.E4͢p1! P%7@fxcm.ns~K~KpeUD~ы Sq5_0ʲ Jsi]NV%hYe=8w_,p!%NdQߢi`S$+P@mí:A')mmVX|/t{d"߄(|y/s /Bn2"&AhaXTV уaqbh;4F\G? 3ULi+ PQY?ȡҐzmnZf=B|/1* ǿ U5&;8IR4g,O\X!w!~1SF:Ĭ"|+ 6 ۖƗm7HYr0y?W:Y$'C=k'oI ^]qH#Y>-ˊ6) LGS*J6 L%]O }>6Ng%0vAVj@eL6̔^ xMvŘZOv+7{JB12p+tH<%'7G)u¶'/a D%U{cA *>GfT:qYc扼vX->7-ffE$4uꉫW_ Gp5 ~xs,x N ^q5j漑"w󿏉0|O`ǣ?`gMGw$w x|Th_u/4GΗ 95X=`he@^OD_9,1,ƭD]SZ'e{ #<qA@G>ob (*ITC5O: JB@ &hHt&a2Ưdx!RtP"mV^VVHAo7Us >{%W:MԲ,Eʢ!//b5wqmK>^ /6ǰ3"ՉVc9r f&aX*U[y5oރƐwM7*'qIqp,i6S N_LJA:vIǶ|ojYQs4ΖUԈ04, RTyHO6[uh0sAHMs8YnOޘxAF1u7ws؉B (ۺCXs8H!p!'ߊj]ySŚ*4`,I< =tCPQn- '-L1o?VI>9-h LD~?[P!!a>e bw\8FƂ7k~Pj9 8[v}fX<p`9\82J38T~%sژ/J ʟK ۱GŒ2:OWjR?M`˵A{YR:bB,$n'bѕҋ ?z 8׏hI`ݎ7wɸ0v1{"?;:F|dz[/G"Q.l]ɕj>,G(RpxES dnuNwAv3yK5EC(Ħ\6X "qE@]so]Z~AS}zS])È{o댽; $XOoEqm^p -N3bC1wXjW;th)C=cɋ/cIǤ$,⠀Q=ԢVJ!5\}g՟}ӠO>[/^"{ǙbE;F\jbǃ u'c)Bc6Fj}w@MCBf/4G+`YlUx!Ч`ߢqB~cH ܐcȠd>Vf䣖MR1 QXY]>S|T\Y$Q F XiNNQu¯gqu"GcvƓx8K&ʵhc2Xs.Ae)4aUl۶CN\3R*[ͥiB\[( K@@NYQW}TXkX 'A%:TnںsFʑ><;݄X4_m'Y|%`u|7 ui, +=[IAMsVY^D-'&=4ǶrvrEثVƜeaMz9EyQ.F=dIv"@^:dc0DF}|8X1lO;(`lq3XN2~?+0k/v<+ch   ϊMϏ:~ѐF8;X &$ 1s@1=G-G.̻6}5,_ ^{$ JOCP`t,!Rܸr<E9vz!h<:]KSH?p4_Ug o^ZY3eo.pf$_غ΋4ͮHߑ ČDPe"'5֔+C*~/7qG9Z } C ᒉ>1ʠEߓ\rßGҤDG˘+l!?D%W |:A]dPGZ!Z>Pul$rpB;+|K-Q_ya`$~P2VB?? dT+b$ .Û6Q`Z ɔy%k4 QlU=DM )dd] v:hR` ,XZHQyNJ>;D!,5 DዜIkU9X:u` S*@!VyK LXW2l§:B# [&@?ܽW{u\@"v ""13JfEfwg[w5Klj*fmmC#l%8*4gn~R`y70goϘFbG"|l}Z!1Z{2%:$r?31sr4śqIe U=);w|7{I @4H~Ta1jk]xŪ A _AtfN c!yͱs0PVC>(ldG[-X||+UC(-%h9@8) [ALIie'QY2ԠgL? X9n~.Q>}8uH񬇜O+}%(lsҁ'\B/,ٽ++ w}Y{S/w\H,ߋP1A?n]s!4 kb f.\xV+wQ;zK!YֱT.Đ@v e/H*z:~_ƌ˳SA>(e':ݓIzj/ZCywYe;Č1/_}Z2/9Z9XIt͉PտxKZmaD>tϭ~AM>/5_HX>=ӞqN#@ysZ+ήs 4,A˟n,LY/HbU=s{ؠ4&Gunw/vM2,.r_COo꨿~W^-1rO ^:Ӭ95=2BY4dv<φO'ܦrNʟ>&V?XxX0ߧ-@(#{_;z|LMh0HͭWeԐùF Χ;j^g|!n"xʲ)z[A}s&/-{2\N>v ~rPJbe@"ȍRs>wzMm]SN avjaΦYr Z,6]7SV.`ҼU X(Ok -@ց0H'< պy-p&f ~WGjBq( \q"9pvP$q#k#zaK9gɾx,kdv/Xr d -ҹ$*Q\H32ܳ b9ʻ/>dJ"QM<ٹ< YCD\-B:p l4Yh;?1wc1Uq5Z9wǿ0bX}c5oz~0ⶃP(+2 2ՌC9g⻳e8.<݃ 3k8'$[\X3'UaȨĊ 0dlQp3{UL7@\s$?|Gu,H$2-JCM;恜>߄W5ε#H}!d~΂zjPЬj2)+Yh>& JS&[59/LJ>CYQ}xN]*zհj[66Ǖ)h,Gm8dKmeQwtXeKo: JXC?C!P0\zK_7paxs>QHs73moV1;=PVudo[c cc2YG@4? 'W4(#GLwgQJ .pKJ i8 q( l[ֻ]~^6 -}]ؿ1(jRfNHky0k ]b!||6aY89DgYfhH@sC̰wXdb+U";_E0"A\ GR\w0\h8Qh,,x>#vKYl.&}: Т! ,Hg,ėsudnBX*+^bH:L Xy>n$ J%&,\r#FW.ɵ6")S^g^cJyIm';W³g0$}4|y((}~1^~Xŏ`Az@>z O[ ;f[:8nee sr`5Yb{H(#xD#NфzM=1Ȓ8Po%]2_ͰhF`PvuKB#{N-ÿBL/taXpL8ۧQ ۍ J^ԹuY w ~6#l|Dj|fbADE"bx5 O!i!8:&9i"mkoYhha;t]B/>J&+|iM; qU+}czuGX9( #b} cIz;I-=ZZÐ/qiqoK+"vP$(zL`XÌHPaH$jQ`4z83P\CFiKcgh%<\5b?w۞ ~jT1&KJ؅֡7Rgo3!6w;n r>ب-n(ocpxF}fIѬjVInUQpa:& 3&`cm\]}ǪMB|yBBa|=|^YpDc߲ᅫbG)H;jnoT|7FQ%`Q@lʏO@ji(k (*c0?RVQa7<~a rp0S/s2I'6"͛hɲ-'$H⽣/CQb@k7wF1q@;hTI0aHspY.xV!EdַdԮΉyH `tDy, ! 'Έ%ȗ=c.hcNa2^0!@$MG<'(dxv@<wdK5LI~=l&ÎPonf1e2fNd|ݼ.A3q6C,C|uBx8DExQ9|BM";CR(cNwQ4c0]k2a#c#pw!]جPjGV"9JLăzOVg3O L2Rd"W1PFKl&lTղQX $s@JPBZ(NM(8rl,ѱ Fq͙YQ,+J!he[)Eku2X"6 ?2 h˺iG+v v7|LF4~>S/d})_ IV!iTx[ pqqqwg+S^4у,>J80#:':G\ DcJ(.,* BB\Rp a@L2 >eD# G: ^C9GьD޳Ӑ՜"ݸ>0qX 3}jY/*pb@Th.~ЛDZ_5[سO $$?:?!ؠHr){s1_Oy-9O"d b|D}nX) )֑Ha60}èpwB>0+ydYf(*\׎K_lm0\Ҡ?B%+л~͏vYYB"zB, PÏ"՞=ðmF@ϸ*j:tt_|^ v%RǜW￾ ,1oü˂c J)au`uN0]F/i!CO/ *E[0{ I25ğOss9G [cs8w/VqTD36.$ɲ&fݴcx.2sA<42"?0d"RQSx\bEC{,zD EF sNdfW= .d:H*OsNM 0>ᓈ49*sD9 sj+ru Av /OOZ=<\Vf.d#@/+  }&U;C xIO,0҃m~ղ1L/J+sIE`e Gr(C>G֜ 2dtWXxT~N#-Wk|{ihzrPG db!ণkr|_\}t C!x|_Ǹwdw(ħ[/(D ]'3D@"q]bvpfef)3I2TӚMVr3Ά Of4 cTsŵz7m,^Cgԑ8xPL/k)uX۟C47Q|O]FTXr}#KKx\% ua46˜˅SiDӆ:WIWH~:~uyCe\}xr+U"~d7z쮓`SH\b!կnChz+95bGgKl;2^W$͹Y*j#U~[ j:-dre2j1yx\-j '&[Ď@42NnRq VeD)DCn0-Vx_;>Yosٓ{dzuZד;o@y:l6ȀS2|ry fS(|se]xF%Hu| @Q,(BQlE`ZW-[lULHD~.t6~f`ӏ\pRaTh>>ʸj#,up:R"7 YdX:Hn6y|2_M-o,i|PUBK}/V(`C<ŊIEU7C\6'4A|!:K޿"(f+r{]K@"rD=5mhN@zX- .Cl׌8L Ơ b?#"4z@6k]tou6·Q>moӫ~0;'r,h2óhFK-u3"l,p*m[U#_fjAc__%,Atul O6m؀@4/#P|k3/r~\zrQ}b{K Oj&3^-/EhE~{oK@p#'Hjb=QCrY˜!Nʔ|0V]s q|%ӣkDa}Zl=ۍ93LLCl +H .X2ByazǣOJZ.REc/~$V:EMaQg&6sA tb}-c _#YX?Yϝ-&vIaJqt5E۶!{Ʀvv5|9@XjHID^n7>VDhv\j7(*\2;vX;βoNlV|Wasj ?T#Wu,>-85EN1,1u31|6]CPO\-ρb76; 5e s jX,3 S&/FAӿgjppKf?Y,fN,;CtzT<֙+4_K9Rt="Fy 2iTĬՔ{-˼\'0)q`Z^/ijUGByzoM}ex::DBL=6|yI_#)BORUXl >ue2)$.cb|셶).0?}[cz㺰[v|_$:@=C#n3Zֻ߲9>Z۫ZqU>򽟘.(XQ ¼m\t A]͎ߦ }QT#13PuJ{űje"l"Ylg?ȣʴU &o4v<Z={lσ3CقD DBA&qst3NX?>90aخNQx3R>.S h=>DI8C6Fk„ša]P^x kupmHLl2q>a5K?sƹ3'9#K`tvE<]$}!LJ. Ҩ r'%=Ha|ݻ7@pA̤HjГ~~L [ Ƀ83v+>j7l ~pI99  D9sN ~.kiHk.t7WP1C 2) e p0vW@SK+cbCqVԒ kbyfdTCхCK μ7y둃ZFEW`x#PND\;bl>Y{VZV*;py燽ΧSzg:;8jsCOzTcPӗvXEgI+H0ٞ\DN#y x/ ou3+ Β`(}%Rf?Ɂ0$xX긩!"ؒ_xdKZ7=yH>'Bǒ3[qy\o0GhG|d mɝE1\7[`z|23|Ư5ARfK@-D^HP'zJd&V4?a[ˇPcp㉇"ʄ i:M9gҘT #VQdAWjgk5 \fƥ\JuwQ30g6n3K Fk;ۦ9%3W4H9ˊR(#<:wFe7I S.Ơ -}Q(%24/5<g+uN+ Ϸ_yhI&i_sυ /A17v"C ȻeB).FF  -˭p)by<Ƈ« y;pCk(7 9X.n;RܬwƪzaqZ|u #?3 W|2sROS\L'b+Y=sgCn 1b,Ec%YU40YWA8d A‡)kRWJ:BH^ lo﫽GFks5Ȕ 69³cO7 yՐLL?Eg;;}࣎O`՝;N[~47ڼfx8,ir#zs dveN2,NM+4_8,`q.ڬ<\5[C 6D9< հN0۪q5\ǀkF1 +d낵nPN[rT@͔wA|{|`]"59~$}Tמ9hCb ny@H^Ǟ5łs3+ʣ4=Lxwu8/9edne0wύGYX{/sSu9^wv檸EӉHO7 lV?w О{Y00>뎢WȆxqħCh}z!V4C:TMű4\ysWTcӐ0C8^ +V=IJaw6n\b?LZWq[u;#oSrij~0Y | 1 V`#TGD[> }+ym(ܽǾv"G~&̚a2\rlK "S3F\k^|0Ys" *+o 8)4^AcDfgKiu|5l5UgbcIю3ǧ5Y,q1-M1 pfσ#yf6.8vZ>rǃ>@Z::yW^1zZy$#)菟/4MnI'qru{"wXa6H2Fv Jme^BDUۉqޓ]!܆^j(}g,H\N[4i38A,b4esCp8ry_jx;t-M^1xZkݷ

ぃ<(݁kϭc3ƁG$|n+2ԫ~>;9K'( 5@Ў W=uoy l]BKs{z!a^xMP<1(A?e͇ Deq 'O^0;(X8d,~X4y]Q)'|d%穩eaLAw/RiV<R6&Z%Dek-A5BT;Lmh7F1z&ZaKKaG @_iEuX8/QoN,. &^t \q]U?p!џȇS瘣| @@xwHSYq927o7q(?n9X YG[ĺr;Tt.te8S߸Oc7nߘݿ3da R4ކGzĤ4lx:ʩ#O ;dѴvÒSUxt_'a ,lz 3AFeP4ÈH,!b&t+7lTөbDSl(=g&' =ȝfϵwDĚHH/,bVdA[s~]eJDZѷË臍_5qBFP.alz|q;%C͋5jy$!g^wuNz'.kW*+aD&m/Ye.6:СA||yY]$qfYwG{ 6\}|ozGQNRVE(qZp\tЩzZvUXgqa7`u u䷻8D\KK4Ŀdnŷv/FD (Iu럀ڕ߶ Gg$/vVt4Kh%GVb1ts>"jxUek5ns2NyГj x\,8BuzD8ApPpч 2@zKEFb $Yʐf_r %V悍C kYY{ k*|ڔ>xS."P~[؜wip9~S#皑U®F0HqާyXD\wWțpT4&1[J #$pQzjȹ Dqgh5snϟB`Uh11E"{8Y_ji$,% I"m %G-%!c=V;4,ZZFklb૆qO,&`E~xhyy1 5DLFPl'1?>o״_~Ʒ{.Ds= f_6hM)j_Vf2E6IC$ǿ}zT.8?m~82$'s AxxiK{@~U%*js&q& 4 ^S aJufO|fcHk\ۮ2 4[jg3d@MCԃ[&Ê,,K[ő6$ń^\b,Z^pؿ_t~;ܪIG"|~DPC'v eFs9E%|gn:T}t["H>h%5a8E.yjyIi5mhriDE֫ +-LNf,$ZQۯT\tpC5TP耈;YSc!UUԧ;GMZ͡q, s01و|w~ *mPasS ʳi> |i}XrNhű7톤Vr@!f{@( b\&1:'J|]m^.AD{]X2|gFG ^Fۅڥ7*i56#^M,/xgʧwKԉWo86A=A=TH挐B qQlaa%H@O< ,r~jȣ.LiP4ɑ !AQqK&E})+4y GH iKm:?K}t'#>dF^&'N( .RGRհÒ'CQ#aPcwO%. 8#Av" J a 4 Ļ\yy˺k@)& !Å5wPxf21aUwe^~ÞČ!pQ n )Ɩ$<]@IpE:q;9<#솎M|TIz)Af pg)Yj!0!*,Oߤea5Y@uN{!Lm\{ SdTt,"[>8nE?,mKf`c˂m϶X!}aAi~{񈮊Հ#3fq9A5%tPgA:.rU9 !]|;>[lgQXa&Qb@Ydqfl׋=X(+*@09||c.Ra ycitFYeI[(׃) jͬMaޱkPQ (ng8wz@:B6Xlv['&tq͜@.[e ~qY/7H \ʤHTY8Aj]G95\j=!b^;3|A P[OĂ;I&jL>ֱd K%JwOuGfh׊b? ͓:XKVP6KW<^:\eYlklczZ؆"bEoɞ ' GГh6 )jCmN[.C' !ppɄ2  KR@A@$d ۯᯎ?'ǟg1~NJȃw ~$/J2ګjqylD*1N~]$鱟"_WYBl_Yɲ-%Ldvd2Ў']%o-rq>h"=*e!dOS`X;ÿ pug4\tio剰1>1 fa Q_ǡTR=nvNgF/Gt[lFMX2WR/=J:s7=ZQnUe_X7>%w?Q%%>"S?7櫀+[^.2b !,Ϙ4I0Ɖi4?v?׼eMb59vrb8;w ?՛At.6XDQדv/rbvPCmY؟רWѓYa"&3G}n@&m+jdE֟6LpN{>a΅b HM)/&wCp0MUZP֟ʁCM눕׭Vhn-(*8:dNwR, 'A`(2nI(㕷UQTfq1M67a?5;dsVA->M/~__߲z59VgbM'J\Ho?uc߻v^}=)rN>+HAGXXYBѷ9ЊT[Ey?GLjra܅0R|?ͨ9ZlU!%>?| r8 E'Rît4Q%<'ko:JJܳ?k5b@)tQsNJcxCJI/RpRYsR;Lgp"P@(:R/3ў,^ swqӭ}~>l`"ny}߯p H(Sx` Tŝ!Unx>梩 g|YHD_#׺N.hyy䝍j.~r N.!iö:?~' O9oYGL9,`O2} %Q~_/-+)p:G 2[xz'W3B0 \kbW4XS:4 (LMbEDDӅ!@*$CH(xɆI_}X3p}Đ?( =}~.#&>~Xa6M|4iwJkaĤY.in4[?͝v=6)(zisSrd֤4P~=RlLVLhwId`6/=NǕ{<a!/=1:6+Po=W^u}i[$@ Bw3lkΘ@€KX&O?l^hh@|vb{{bI';W7Ŕx,l[A}<?^| Ny?߿kuG^ĖO{ۤ vxY?g 5nYSVZVvT[t蔠:ϫX'y vD6Po^??!9/$sKKA9 fe??Z10|_OɃ]`;+l>\}"M+S`gy\2 LJx0'W"g?%8uk-N$"Ը=T?9j P/!EsŖnrR)^F>A'udu7H#ݴgV1W-~ˆ}2.8Xm߳,`H'[?{uK/ܺgKNY_+]]<ڏi%7=y9]}Af7*n(^O8'?'1vy2abP7,!igyס˫m`c(oy2ݲɇ!V{x;muDZj[r’p|49'ۋzDSB/sfEA%$.>ϐuK/kF<[z|'DcykƁe{GbS3 <@nP$>3"d,ř74 #Eߎ# >_7Of7oLGK:zȱ&(՞1{p>lf)D=2z$z]q2QKb u,[}{lS9p5DTCm54z]? #Βہ=hУjc F9``0281PXd$(+E,AJ@v!!;Bg +׿q*lws޿|}ȷ@-O)сB @Q&-}dK>՗=ML<D2a @/_W28Ο:b4$)qȇ*@h+a7"6);÷gB<0@ E4a])3Nv?n,@wf)A,p6~G{j[{{6_vCt ݖXd̪=۹%ߪ-/K~_d⿞2:LE]w*" 5uC:;v}6'/uYSZNVtRi]A8y`^,!؟#982Y2qvrΧsVY5@ <H#S4|u%E8l(/+O tpQm-=8.۽ ~~|,۳[=>㷉v7s'= F{'iKnN̩ϯwb/~Wrr#6q}.@W|U&YB`/K*҉7{^HEogc!IWZ7cRN 9^+1Y6h9y1qêJ -xlKE//N?ͥݗ! sP|>RιhRdl9>RCq8,~[_{ډɻv3c啝$a-R};g Sلf 헹7j'w4fEWUӶ6=a); B]{vVJ>l:+; .IG#xϵ95r8(߯p\~IO!v%Di+̇|pAl`iUSQʰܾG! *ngrkM6`\2;UEn?GE>^gq7t۪D,:8kt@Ç08Gml˃e; / )T(A}<7ai7)\ A@T;;c>GW(ϛo8e' ߲G'dkpiȳg {-m집R5H8#ւ۾= -W֔zgRnmxk:ӣ|.OyԾ$dUT~R_D/B/1E&V!LɹUfO/{F԰BtHE&n"N˨O2Ȇ=iyx"'Oe= !!tXMB9x Mˠ\ ވyJqsߟu8T$v7= ka = Ԡ)ϲc?忥=:w|.[ I !-J#~bjlt1~V~oLjޞ[4wQRH tS?=gv1=D9} ]H/C$+f+2\"'[=ꈱ1v!ȗIgvD7s™N>_ZGם2NVDhrA|_91_F Q>-׸:{꣪Kƙau7*zg0.1DGs Gy6]͝ (3sHb68<߽|^љyGN-:tfIVYUw2w=ذTLKI|_}0<к+ΑxOD7W:-g(UsDRؔm)?v?~?g\敕a|v~\=fȟ=ᑊՙb~sHrϨsYDD;ꗣvT.#m:`Tsϫͷ]HvHq@&sCAxu'hN=1&::7G,f%@sPHi#%蔝֏/XGAY>9bvOd|={9Fɻ[b?7Q[u޾kIVcؖ5[uP(Ų`5?ݺ $lHQR8ncU=z{ rUl2vMR`4A;j665eu,jb%PfUsAۓ꣛gfvhs5G{]sC$:3|^ PCK\l)LpZ}oz@vF(5 v ,crVDoKi @ `n"W" "Dߏ(r5DDd?>"&_ؖ XE>"9̒ko kA Nbylvڮ^7eP$nfK|䚐'-vlMtSZI&H&m(sKcv a@ :=@Bm^JP-TFĹ /43h+-h %#$ 1D\tM%Y uJAau0llDM`}Q]f rofX@ *#"'sX5񮱰U4aC$ZX pTA!FVQA.x5Lel6Q~ݸxĐ CQ*p" c86"ͺ% 5)9`3aN\pЌB$eVC+ܡ 2'L!)dI I%禙 #=%֗Ni`;!O + GAؤ)!a刴5O Ô^:/5gzw%XÍ7r*jI ր`P8:[,%&~|