summaryrefslogtreecommitdiff
path: root/ipc/sem.c
diff options
context:
space:
mode:
authorArnd Bergmann <arnd@arndb.de>2018-12-31 22:22:40 +0100
committerArnd Bergmann <arnd@arndb.de>2019-01-25 17:22:50 +0100
commit275f22148e8720e84b180d9e0cdf8abfd69bac5b (patch)
treef7cb9810f8415904589d73a8d8f3c15b0bc70246 /ipc/sem.c
parent73a66023c937ef258f2aa340cdb53ae7d8b1d47c (diff)
downloadlinux-275f22148e8720e84b180d9e0cdf8abfd69bac5b.tar.gz
linux-275f22148e8720e84b180d9e0cdf8abfd69bac5b.tar.bz2
linux-275f22148e8720e84b180d9e0cdf8abfd69bac5b.zip
ipc: rename old-style shmctl/semctl/msgctl syscalls
The behavior of these system calls is slightly different between architectures, as determined by the CONFIG_ARCH_WANT_IPC_PARSE_VERSION symbol. Most architectures that implement the split IPC syscalls don't set that symbol and only get the modern version, but alpha, arm, microblaze, mips-n32, mips-n64 and xtensa expect the caller to pass the IPC_64 flag. For the architectures that so far only implement sys_ipc(), i.e. m68k, mips-o32, powerpc, s390, sh, sparc, and x86-32, we want the new behavior when adding the split syscalls, so we need to distinguish between the two groups of architectures. The method I picked for this distinction is to have a separate system call entry point: sys_old_*ctl() now uses ipc_parse_version, while sys_*ctl() does not. The system call tables of the five architectures are changed accordingly. As an additional benefit, we no longer need the configuration specific definition for ipc_parse_version(), it always does the same thing now, but simply won't get called on architectures with the modern interface. A small downside is that on architectures that do set ARCH_WANT_IPC_PARSE_VERSION, we now have an extra set of entry points that are never called. They only add a few bytes of bloat, so it seems better to keep them compared to adding yet another Kconfig symbol. I considered adding new syscall numbers for the IPC_64 variants for consistency, but decided against that for now. Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Diffstat (limited to 'ipc/sem.c')
-rw-r--r--ipc/sem.c39
1 files changed, 32 insertions, 7 deletions
diff --git a/ipc/sem.c b/ipc/sem.c
index 745dc6187e84..d1efff3a81bb 100644
--- a/ipc/sem.c
+++ b/ipc/sem.c
@@ -1634,9 +1634,8 @@ out_up:
return err;
}
-long ksys_semctl(int semid, int semnum, int cmd, unsigned long arg)
+static long ksys_semctl(int semid, int semnum, int cmd, unsigned long arg, int version)
{
- int version;
struct ipc_namespace *ns;
void __user *p = (void __user *)arg;
struct semid64_ds semid64;
@@ -1645,7 +1644,6 @@ long ksys_semctl(int semid, int semnum, int cmd, unsigned long arg)
if (semid < 0)
return -EINVAL;
- version = ipc_parse_version(&cmd);
ns = current->nsproxy->ipc_ns;
switch (cmd) {
@@ -1691,9 +1689,23 @@ long ksys_semctl(int semid, int semnum, int cmd, unsigned long arg)
SYSCALL_DEFINE4(semctl, int, semid, int, semnum, int, cmd, unsigned long, arg)
{
- return ksys_semctl(semid, semnum, cmd, arg);
+ return ksys_semctl(semid, semnum, cmd, arg, IPC_64);
}
+#ifdef CONFIG_ARCH_WANT_IPC_PARSE_VERSION
+long ksys_old_semctl(int semid, int semnum, int cmd, unsigned long arg)
+{
+ int version = ipc_parse_version(&cmd);
+
+ return ksys_semctl(semid, semnum, cmd, arg, version);
+}
+
+SYSCALL_DEFINE4(old_semctl, int, semid, int, semnum, int, cmd, unsigned long, arg)
+{
+ return ksys_old_semctl(semid, semnum, cmd, arg);
+}
+#endif
+
#ifdef CONFIG_COMPAT
struct compat_semid_ds {
@@ -1744,12 +1756,11 @@ static int copy_compat_semid_to_user(void __user *buf, struct semid64_ds *in,
}
}
-long compat_ksys_semctl(int semid, int semnum, int cmd, int arg)
+static long compat_ksys_semctl(int semid, int semnum, int cmd, int arg, int version)
{
void __user *p = compat_ptr(arg);
struct ipc_namespace *ns;
struct semid64_ds semid64;
- int version = compat_ipc_parse_version(&cmd);
int err;
ns = current->nsproxy->ipc_ns;
@@ -1792,8 +1803,22 @@ long compat_ksys_semctl(int semid, int semnum, int cmd, int arg)
COMPAT_SYSCALL_DEFINE4(semctl, int, semid, int, semnum, int, cmd, int, arg)
{
- return compat_ksys_semctl(semid, semnum, cmd, arg);
+ return compat_ksys_semctl(semid, semnum, cmd, arg, IPC_64);
}
+
+#ifdef CONFIG_ARCH_WANT_COMPAT_IPC_PARSE_VERSION
+long compat_ksys_old_semctl(int semid, int semnum, int cmd, int arg)
+{
+ int version = compat_ipc_parse_version(&cmd);
+
+ return compat_ksys_semctl(semid, semnum, cmd, arg, version);
+}
+
+COMPAT_SYSCALL_DEFINE4(old_semctl, int, semid, int, semnum, int, cmd, int, arg)
+{
+ return compat_ksys_old_semctl(semid, semnum, cmd, arg);
+}
+#endif
#endif
/* If the task doesn't already have a undo_list, then allocate one
jeZP.(L]'+BB4,_].lZU0jOd |Q@WnFӮTjYI !\B'gӴ? 25_g:(PL˞anuE N;jrws1o&a{[Z-ܕMg؎gv{C{}OjOR&~ry_jǝrC"; H@[lz6[ Iw.{zdy~8w34XwYs)0:cİ.Z/8"#g䆶0Fώ-YzgƁd݃6&%QYfySqA~(3][gêv52zϓVnY9`͆Ym(zMLdt H"PH qe+zG]n&,0 nj4jvEA2wT5li VSu:jd[7>(zkрTI^:~dZxGlVB/i ;$EAȮ+=T,lhCw7_vs |rၤ#'`<)4Ú*{!Pיd1u{UmV8~1L7hO`mg#rgC ե hɮZ]jY[;رǺvHYQY9u4:=HLG8rtZ2҈F^61@_':ZZ&TR$D"dW/ 7͞wܺ+n_;DPE᜷HZ!ǘHnђ cͦln#5ҭt ]τPm//q]MЌj4[es4 d4G5=6F1_z5J wI*k#.N0+,^ל.P?1E­ !Xtw8?D[@lVW*2&CtA셆jU#PG+^sV;tU~dĞk̝IRgߋ~7տ{Jomdu~eC@Ndm8{phkP}!u$ǴGg2zƣ,Xd]?js\"I!|R&,Z3+@+հB1H1wFҽsq)u>̾c)%ZI^y? aJ̀ݥ Q2Zc;#^Όѐ3bVj0^A7!/&Fh:~sXy9f!Wܐ efK,1H?!kSyVl{\ZT2s@6 H*\/e >pj^jjMY#IN9ƨ2D 031GŅH!Ǥ4RR4q1d`m~4ݓaǹH^=y3%H?`gNЕ N<m﷩L+>WɆjSQC2PAT>NgL{) $/c`=i08λ{$Tvh1~,s׶kEPN~xdp9) .*I d$?zY$׬OQ !$,-%A}f#hKPB';DH<gc ٰ/iJ|:N zh.cvɢ`ۊdzrw/ ^\eCCn-] GE6Qtw;10E?DfkrorVP~G3z,HbgӔ]⫚-FE'sRf- n ^橍[1Ca]QmT &9 #UH;?{+NswqQW1!IZtZi - X pCK8^ ШE] nps=sO\oW-5=^;;L/)dHh~Hdl{ cS4lB#z,nd6I.6M sc*HhcuYM6)A,i|QeV%lQBڇ1B|*ೢzd9SlᱥcИr&$7lH+ 2ehH ].DZ/{GVo;vD)P?UȖyOSGsS݉s A߭ψsgIc[=qUUV:Ֆj-rdJrS5z %V͚7(u^f3lpOH==nq;҄FffQ t.==~W|RdJD2z'@ v 里͉HgY#Ho#s6 JW%}XL l>Yrn'&uqk]+}cwaDY>"Z|On83Zhc)y|$#$!le 1yzƘ`eZTc]%DTk*>Iv_9߫ZqKPgL-yb$Y.ǐ9㉞6ir0K:E2H3CK'‰#n(@p8/syg{ XNL o>G4v6@\O DZ"=BrU#6?YpP⣅ni{RiU.K;0%Gk>.׆vI|ж #xUE:o$0RɲOymD cmRoPPspRzr~D&>AhUū`ݘG/8~8YGzkGl-/dh_ԴM!;.M7{=Gb*fdvԸmvf {;!@dϾE`Wr}N+$ቁ@z" nƓ c<;`ò{/EN%T987r$7˵kku54C^P.M-2{\v L\N΍6[#ň)X,}n4e*R4=fi%$ ,mA 02\rxwkft8P]=կ3'uDH—@^wV:"9]KWnRYOrK0V# դ 5̧ʭjqA7ylݭG=("ܤ+8gC5Z 硺BS*R{" B/򵋥f͂j\i]?uQtSTB+%\B٠$IQ|E=>|SnOj'v =ޖgq dLCUOMvߗ⹳w]y LȨ x+8cKsXV'ED!|U^TrS%2șAU;4Q<7K,HA?gL=y1`;yf7t05D+7+5~9%HQ.N4~%w iD[MT UqbLHc ts2cSB`7Onc-t49^[v yRXYtgyŢtOK$/S "pDBX78Ng*y 2GᰘooDS2\v}}{*4c7f,l^-u?uEf?8s=w rgok/n@".d(҂ ִfx,BzjUp;=?v0զ<\+OI}EW3. .}LJRG6`0f*<{ 6ˆ Dɜ<+Y/ףL*AskɇuW6S$ UR\Cd/?bBH܃r~T%*MÅR;.mՊj~3ccᵳd|W>x04jvKvtv_xf[.:A"Udڶ7!߃CH_ݶyy,(ZrK} ÕȮmao]҇.WkDrya֗~I5 hh ("6tEhad ƨ g9{ 0T:UDZ,N(6k-}?5h}-rq/) 6utJ[ }IGu6(y@!.+v7,1[\[[-HMaoQ/|i9=LϾ6jӞP%I(nȶ3l!" ־`3Z zponi/gjP=G&-LG8^8͡Ƴ,!I]wD:9 4/P$Q=RjQn_v_aǸ*L*j5S`0kWꨢo!y6jAfXW&8A ̚Q9b]4_q 7\R+ƤuBppo+L7f ):M{q9=s< ~qE+%4+6MA{w+V՗b{r/T {F%pc7z!]܅ =cͥ8N$w@*ZvAm=>f5dx]v;mGH恾OW}N$5pE|qY8HW:j]w[֭?v.udxg׋W`;#}O]OfCeUoTkx϶3ǤQW07O^,k cV(->[*LJ ViybV<;‘ Ӝk.ƧvO03} 02߇U*4Bgo7At&ݐD~0EBIJ%?Hvg(k4n0K6ȁԨ^O5H T 0ͅ4刨l2 кP%㎙n'$'wv_) K8~ 7LowsNG"t U.0 7JFQ>V]{ 똘U=|7ddܯqs4v〖B.Y%`jL>ʥٹ ·Z4{ޱt 1_S YfP[G/mwb0VLkH4m8g&`Rh)فh{,V[K"qRV;K8w";]ş4` eVpF1 A W%@f*N1wQSZ;sL`,}qTySh.1ً_ѡeok]6Z. oz.h!qjS І%.j*_:f*t-u8;E.d4U:= ds%0*1NUmLMzRnOO+ vPB8luv4sX3q ^jq\u2ޞJ-$g/s K{Ͷ ?2tZ{%ƀn;%:! Ui1L}Y&E_9s׋EŌLug6λe ݇LJU@(U?M]mMʥN I:M4UcJpJ6s } S8UjsdI4fw\y1-4R #3d:-_B>%)ZHl̰M 廇;2~RȰx( ^Yo XaΛ6`hOH=Ipt4M]1;D,bbz,)Pv-+{+ڱVdgu Ű0@gqO] 63VQѡ49 J(Nb/1Bd9G:B " "N%"V\-"wX3K^c="gl3~>[2?ɽ~v6 :E.&Ð Lt@o%U4ߦ4HfW հ~B{}BcȽot+<9;"i#Si -_ԫvaeB ɂͲwvҶ[D!$azg[Z}#aE#;q(6j2MNv6"#P+jH.h єj)`eMn( I5Jq*ŚDui {`d ' )~r}9Дo+?b%L^3 z٨TCDO?4Dmsm{SVΓԛvYy?64 i0>GN]$cKSڮIvuNT xͅD+ƛ""MVHSl"!:#ӈ>w@ A[ 9fWxWqnY0m4I`_F~/R*!>o8mI;}PtR[Y@WiXqZS638? =RM;{g㆙NP,v@[O+d{ָ\iGq_jIsG̾R*j2da}<4TeP-ʐ hPSJTޫ9D =8CWܵ!2 >N粀(|>4s"ݝpP~0xI,9m%) iYB҂'3~؜Nd/I X;B2! ?6fy{^R~vl㬲IPd4VN:ֺr)¾MdrLv V~^,OjA߬KٍyR-a1AFEFA7(X̙ۂ*rWaِ(iܒ<_M&'/;f$-^h^%ˍ=´J >ɒib9oK>]BaߕJo : /Q禙1.9} 1Ig/՟*&GO%&u&~؝s0 lJ]x_6ĕieڃ`K)1p)[ؘ^T@ Cbb\gknϜY t*79r3؆$E 0l-RuRc ]mtfc`C^b3hs3Ï(E3UThd"Stk[+">dL/K!QwGeV0ؕ'o`Bg&TbQm5r3^١ظanƢZ4*d]ngԲ dz=C ּiam9yNZq"9UhLs2=AEqߠ/?m@0D$Ox6R2\Jkq9ˍ,hItUofh6Z䣎H'*D\4AwɊ|{W"-s]J &;+MKQ 8'lw!Lae6tG>oNb8SRidFGaPA 1l*'5 g(&iV7qo=M+zr>֗ ,s]w Lpf=wT!~_4}J tz]Ȼi 61*{Z^ծ7bD(%(h)&l:+x2:.kJ i|6N'{F^qMPU*ߞXOzxxܭ(ɘ|C+BҒ/>tG7u<'x э*XaCm, .Vr='mgG ''+H Y.7'C&G37j.J] ;|+qF2SmـRmoXqKQbg6Ѻ|nPt%vR˩r/?Bl%( _xSHp,V6\1GC)7؛H<,xNOϸ|Qf{9 uDjZf4 aLV~=.6$ƪ^B2[ŃWg }q~aq)f[$&+u1vI֢d(cdG]{<,`#;mfv CoeiJi zo=0˵b! ?Z5o6![1jSDIrN_Wr8<{1 Q6BGҨ ”I1jâ[_Z6&n:v}#Td'g$[I`ukjkݎHbt1`{[ tw&~[u˚ mU7/scz1[8;fvEΞip߾+ݕW{G*gGtӏPj_#>&uӴw.CD3jхܽt wi~, _UՂVnA 71WB6c] _S;t*v4p~̺# /.v,ܬ8dX(YH\j#x63oȍuKW'k1kɱgf`9*PvXd*),fSr—'5v>9F2Vi )N6ImL\kLxrKIJ[Ǧ~~7%G@#67x Z nK"UI8Swll)%:o]TR?<~;tZer3,T`S^ㅲFV ʣ|ܽo;hiQká}U1mֹd[ɓJ UbQi™i6'{]B*-yKQRTH%l, vi!0MА}6곱ȻBx^lhYSR ۝q@A8LUYI-2[ m݌v˫d"_C4K2BDsJʖfa! QƯϵ${$U]hTEsg(r2SL,U[d{P1Jk"ZlN߆篹sHu`G̗B{NA_ Kɖ?"~np-A{ɵu%ȵFH_P sC BP=B|-NJ_L fW~O w"qj*ѯ'.WHnirY LOP;Ot\1_c?5XWM)ٽ1-rϦ'R{`u 4|Px!R޻i/E@>߫$ѫ8XQ~rG;Z(ݕk Okw^iv?%3zT-<ӥoeUX1&SiXwZ|U2] [P|P&|jN(F /&E$q{#^=`wtLsnm];!_=nKc?ǧWVB&'PfF͓~ E𠃫: ѨUU0ԕ{Z"U <^<}yc$ʹ"/kb3eQ=NOpmNk!m'"6 q?!W.鹵;[<FXS<+;x>bH=aiy 2UpS"l\ې4B{X)2?gkzh/u)߮@AAz696zA[,نwMH$ IХQV<f jD 1SPf}#|Mh|*,{r aS>֖YeEq(& 冕'SÀ|;(Y-.x|n9F+1x|D34tk7 yJŒqԍ61BfV8Ay %+j\Ԍr4_rBZ1ð6I{`&}F$hEKVu1B(B;X~(YD'O#2|Z!B|8f$4QUɭ&\¸ۢ)r`DqqI g';+MJ '0(^_?QwZnqr%MhaPdW;w_&EָuU%#f*!f.ɦ=dS9~ZYV 5|y\[[,ȥQk)0xߓ8 _-rM7I^O3$m:/Ƹuö́93qGW'!ɒ0]r ' q˟~K;q%0oHCNYaZ5r8cw Nl?x|ܢƀd^ȗmB^d미dDf_ώ$n&;&P\Yԍ?w=MƯQ*I&ǽJuo[FᡙRr̦Ufjrp%tw@(@*[U19f(Kzi/=Z7=@-AebӺg$?>t+tR~Xݭvq3%D /<7*$:c)!""=8}S7IaJ@|進kˬwqm 4ˍD*@VY[FUk{9<"-X_{hq6}13QKQKրoZF!- +}anOݓKTf::$ujۛ"Jf4j-{lnEvb#3LG`0 @lTviDg۾^MF$7={8))ab= Sِ;]UO> 9exuc'ʏ^yn &5fMf37]g't|HO4zgj@RƉ>GI*̓5AWT:P. dW2q^` l$WZj}宔ߑ p~ a[X6ZfhH>tv.jn'c bKprer 0gX#ǟcJvEmpܕuX[m&Nߘ1'yUhR@&CyDJCVR$L}ƞ69hǞ-I~I vXm%S H~!ggՌ[ 혱C癵QF Bb?!L?(hpK GgnB܇$ewQm{L_Ps6BޑTLv>pHm!f5wOk]x}hڙIQSFN QWF,N5&%e%d"OmaKBm}d '2.n~P!4c:-;yΝ…Vmk3^,1d'HBMF2{.=3AfQsn')1tt?ܐtT'TWһFFT xwGmյmRҥǝ} 69RV{}u/VjxofjjD9"Ue@7 kZӌ]Z+_CP 9u[Xi6%gUnB=^s[wa:oU-g њOdaaJߙT *4QCV 7T %k-GI}ё^_2bM&pF+?ul%xVqzr d3fݧ͙n ݆dzx7|F=z:>y;Y@VID3c:wO.0 g5M+)∜ΆƤK cܴ 9$hs٬ !WIgZgXJzJw5i%2_<Е&)IIȣ=fJ3&79Ӿ?:K*֐4V5Mw64)0J̍@tեpnR;GjCV=O/jס⠾@JH- j#P?0pWJ+#DA`WHFK, ËJEfL}t] gTjW?d&Ah?;_cBOcЇU6` K( u8N&ƈLzւnjօJ2o{7ustQ7 ' vԟEEqQ =WKjLwcߑVu%t+[pbB$DhM?kXy'~cq[9{^0/U~ 7U-ƒ^ȃtδ<+ ܏𷮣60>1gIQ {E<-'w3~yoM6iCԐ ;Iĕy ۦp6^}]Hp9ߨpOCС;6w/HoU)z |3@QkBgi-lމ<SkI-U%-cK{`:P=8ȁf°SJ5g5I7 R $n,LcHIp$63J-]pdMJwЃ-[^w(碞e! rMVsv ڀdّ%N:t duUΰ[%e}ߵΡIt,vCdr[K{lX{]sͣ]ɬr揃G86LOޥqNby& ݝ1As5uaބ!}}K鹙 .sό4' /$BkEg^d < ?bfJrNjLJYUzţ;E~HlP끙p"m;Nٶ~w6Mom->[Äȟ; d=ͯo+E+m"XP~Mu#ixp||O}!1In0G Sލ:~({Znș"$#^d"Sw^:.p5VCr]L2+y*F~I ID|8/"OO6tC;\v 1qↅN ы8Nq8Yx ӏyk"{H޴T^?9|.+pm3:6iL//j ƆYpG]pWe${GJtkqhb)yYۣ4I)f/- aEAY9\Nム4,E}?_P( ?ҽek?ڠnPiuc2Urۅ> 8LEPh(軵v%N6W!r$aq :{p%Ɍv2+$sN:xmJ+I0926褻AA/@gymnGȳ[z fNPMr|-m?=)ޣ0ftK-nԠe|=`-g<_@Y HF[gJU* ~#}&LK Fsz¡Ts}Ti7+ r"lEp n6k 25UgT-S1FPpؠOt)ޥ}=,W/32"mڻzf>Ϛc0ҒL51fv PI#k̷t.(v:JhH+նj Iz2W$Ԡ3NNp՛Ah1(і {dZV PMc^{:MwhF1wdue|3 d |5̂kjG:!NY\kmaGRa|y?'";}84 s8^XLA,<-sAJɢڦLW7[oY&şڏ% tӈuk~ҕA(6`J}ّ8K?Ԫ ckIT6ؑhA3'Sx3IYL&8J 6twvlB~hWJKQܩqXj}1ڪ?O6]ծWzUٮ(pി⸨/(C'U8ϵO";!@BPB`QěOYv7G1ȥ2]=!4ds\H^iSZLZ\b]ɦSbhٸukac8 %N&̶z]Qt {{d l[ƙ^XjT&=k2*-|T0,LA[G{c}XI5@G$<'Ѥ|#BI~;:;WӉf^2s2rF7HҮMkƻa!DN>vW`n$޵BeG$V_$yY!ɥ<ēM6hI4B@_95!+- ^r"ƚe Iט{T޸GAyt|o㻏o V5:dw@Ѕl'sv bȲ6LsrY #&ы!vK/1M$As-ry6aJ""W5Wx!3KFA]@k|:r^Zr﷎)$ɡrmԆwX~1Kdt!Z0U)S7\1A^tc"0Gv@aƱh\Ղ6DdߵvM㇤خeht !2]遜~> VfJLٵ$W2iZC;=ɶR.]8_JѵTOtHABCtҏRCʄdeB,t?{I|g`o|][|;XOg\䍡~& \ K*ΩAwזP"vs ~k"Hgdb/: A/o:}qߓ}lƒQ8U梫4o4XszXӑJt 6½5YoJz7ZKlHgx3 Z=8%W6:dcoz"F@!@WϵHx iV93#|7gj|cCf/"HMZ;⩟FAo9+ʞ6LX??۰؟m9^,ɗ6#}C!֫m h/H@vfSwu =抷ڢ}hF3<e@jB@a=i }wL8l7Vf R?q桢ЏЄ~ V4 )fԎ[j} V,kd?GM4}wO[]3^pa>{?aivd~\Vz/]{+]h6Q{ubp*i =)A cw4@O&! &sXMvMi@' XvHzJ 4v83%ro #?{pH2n J.^.kNjPN \FUUJuFeͱP8%w; M8;c`KI'KçVN]ijN/'.98G(&Ǧ05tWx zHU[WVꑡ_SjP]"`N8/v\8a[;s TŃ# }a dJ)`ՊS_@&K~.Q G7[XТ:qitze JyCu>TWˋҘpw+;,Ӥ>jO39ͯdt7+]qC-jPu+]h.zSmlv[M=cMozbV-M'wIߤmc%!w/xqF\ oIO>wnןZҩiDv k̓Vr)8m:=vN䈤iIV|"M۝4S\aXlځ횇vTDj!BEk[\2kIA .sC8;4us ' lƇ\"/n@hӖ^n5۞?u<g >G`m9<﾿w@Rv]]4]4)1iy8,)7p&-KM8C; vD WhxS?|ߎh=BN3tɟYLv6„ͲTM&;=:KA%ԧvX>vwMˑr Itǣһ砑j#Ko#۰\) jוjYK5f^\Fh3\㹦J]o%>%Qz@;>GA0=ZV~Pא/]ubhI`'nɅ`Xe{}&QIR-e*3T((:h㮓Ol+g pELmD2,l\W+`T,Ms'B!H$s\`9i< [ ){5,+Z]W7=vsw{v{dS)n8!qW*m\QնVW: c2OVjAWWC6Ğϕᩧg~4hY /#S'ْ%?4 z]&ZϽ,_`d uԲ,A,ǃjH(۠S\[8h#]?^ܝk(F;$æ,Wvc2^ C>̝qXm5 X1|v8HKi)Ώ J E ?>U>Tnc~5CvvKC֧';Ha;8{zAH3@󓽥y db3,AwoJL$O{P*51=5r#RmooZ_m3!kq=Mú{7Нqo V@Df%ks%>'9!|vf!P`zhRc/VPW_{0i Qm<!sdOF4]þ ϕa[ׇi6ȷn2ZR& @pAZLFQ}4:CCH_{~I3)>Ю@_z#+-S ɮAnyڥzwK[{.?wܥ(-5tCvgp\N}vk 0+ m [~@7/iBk\[-l3!ҋZ;vMl  5s;K7InrߴS)xq5B7$ܷ1 ]L Lc@j9_ +J9tLvfPN&*H07W&霽OGcRU` ^ժ+#d-dQ*#v m#'co*jQhDQ; UkZĵ EvеL7kzk72a&:dx6evdc(-)(8ʱq !{ ΕwdP9A p+k ӳcG5Vkޡ\'gSנ)EhhЦ[wL6DT}+Osz\9džw+4?4g҉&$Z;@4Hr뮼>$ֽ5U`b+){}ڊ@Dh,/vѣ@0Ney)J%-|J W+ Dk +2Gqlb H_KZaL'MУa߬[կ5UyTnrlyɠoO6vWd 0MŒ ld 4qKIՙ6Hw3,e!_~Z8nl V(4) .N fvf vsgz!Rj[A4:2D2+GxS{S]1Ɓ?wnwʖsJH;]4 EHghnN7d0zNBJ T;d%b{tGO]PNV촴13ЉpACzsmidzթ4Ƙ>wJsudAvvwr$_ToGO˄ZU]0 hX$0s|~oN6x!3ө;VAki 6=TձO;r}@5gt塡$ǩL[;/zkYIj*Ɯ*`LZ(>ͯ/)_͔ø4<%!L+r=p՟މ$ȵ ֏143˅%ZF"N)2)]2pvmgxKqs vXiCݞz:'uo/#lnْ:1eGYcaD/gQDӔսӆqw5kL BSצ*:nSF4vLuQ ko>,BfZZ7A/ro & qxf^ZjGAGEۉҔ4lѺʄJޢ'f#B >h$QĐwh*h%?;P@fEѪ%{oqJneY҃7fJY%orBI4v N0p jR\(΋{]@w0_<_}DBlQ:9Yk1dHl*cJ'CkWdݨJAjϑt%9 9I,&x{xcƆ;Uٹ[;EP=)()&?E-=dljzx^*m2>^7dU/{JTvB7N,xQ }Oz{ {}\>ܷ܌3FɓVjm2ja:Sj =3No:k'ۿ[y0V?NG9B8VY@djmgP)0B=aЬ|4|Tl"KL.43^9ȑM~:w!J I10!]hAYbsaGb|Z$[KN2 4eGR:}\)S٘pN]PY/3hi$E 7[Ka5M QHHl)oF^ WBkVY<31m#$꬗IqJjK0 QI!YK)'5,&V {}HҭpSh9i,WW9ND'ߨ.n;^;xGok} bEpԑPݑw㝁[̳O]h;ɹoqo7*ȿ[dN.Zvi-*Eԃ>B8 }#sZ\wb(3*wK6adl׽[vstLU8A]n 9Hڣ#Z_ qQ9PGRD4ifI)& oTҵK&&Vr8V{?J:x9ф͏&v%. L8SsHS){DXj@>wW])bx n.e;hoo6GEǐ^y2y}1cǑ Ngɩ {=%[-ˬvq&z2  ir}L2/{:ʪaOr\::L> bwb?$WpI{3Gy$NOTͤu9z9054tF6ǡJG@VaYl'GV>x;fj_" ڬZ5hpE o' ]q㹎\nvxew}i0eqƣ=J8|J0wi`$jq^&&& ŪŸ _7_y߅ -SlXa gi{XlTƼ)[5Vj4!fU^Ma?#.Pc+D&&g9G3QMݣj4!anYMSj6 4vu |t u5va8e6+yI[ P'Dzuu %/{V%}R3Yq"Ìff|cR1XPЏ@Xv6,1td`!).~!R=9$3GsUۺVZ8fBN[/jiMz6bܱl\޴bfubUIrI'dy I[GM!<D`R< Ka2#`rV]O9 aݴ&ߦdRD#r( @>%oI%Ւ޶<,6d yt 7D]+^s8;Ƴ Whɳ`@ƅ>)G[R56+"zެϷCI+_'܁v])+O;SRF\C\?X7 Yf96yh dR.ukK2"~"#^Xsxjtf-B7>jsۦ_Q_Jg'lr5ysYN콲;skf$V95+eH+L8v`t|ur_85 L Kּ7_,y@"Zh 'ON]9q9Ѵ86wA\GQyS7ԛ{jMÑAv2gfFya!;ݐY3:n"ݠWt 4E/ё6x!^z3nfτGrvɡ!+;LlwDž_d8^r3t88>\:.EsL(QmI}xxA?AqƸlLY8sw6 `IVOjq\>$!]!~SJ`څGSla]S uOdn:8KwIp .:ot K{07Xf|ؗhkC{=UuZЭn\8"%}w45c(./IsmjҵeԲեtw{HEz2K`)gҠ1=guJ F :6T*y]QC  ;NdeKpfHhu ^);QVd»5Ni5+hm^M~"h dp CWɕ2T"޸1d2mdɧc9V$=XZH9h!dהJXЎ6 E!oyj40e4< Nk:n4( \d%!lۥCE:JϪ}RGYwYrx:vܫs3]Ci̳[!| B[aº#V:?Hn9; 3|C B_4& fHzri< hv^k\ >WiK]}SBPtI+ܠf8HXgK^jiMI$zr4a!>u#cm6]l/kHwߒ/yLqki2O a̦c (9T<ύUm4o4&LO"S $.:.6mk?7pD9GA?F=|.~i[@ Gyutҋ($!TwEQUqQH# x|_">MMT&SM0,OI1sFOTTQ-1D:Xtj54?n6w4cF[JII{JC"0z=yR# jUsuN76@`dZ ÖlAD?X,s`He׽ݽR`\޸$4StvDHiUi7WkyJgUɄޓx(4'v(I0_^JkP1i>@҃2'wT)v-j׮KgXͥngCLSjvZ͡Wr!FGjX՞jxRu^] Ygu e~2鬠y`U8e۸5I3U+DLpd6t|0Goc}!{+%Q}.A|Z7*-&"RIȱе0lGp5|0]];tfmkN#!L-O$Vz) lOt PݣNEܻB.m{8[3%/E%:B^ 0#~‡4%^IlIn}={'I}( -GanKN-==>Iq3ӆnXNzM>L/G݇l|0=_#MZOoUTрVjrU&~(JgzC `kJPѝ.KQ ׇ/a?3фW6&LOr*KR1tjy{-OSr'r+B mOũBH=sKHQHJ;jERZ՜ CӨbf/t%Z09EalV)HVܨUW*>i kxuɳX7oLAzr1vL*?6rsԮ'@H!zqL34 hQtnkI*d6!8fs$E$cO y<d#礆8t!Ķ%$g `ޯ9Y C X& 98=K}>lXce%hKL;r%ϣa4VGC*ΝE+}:B 2ʠ{ePp 6)RC4N%k$rݐzXX{5+}rLdK}I)o![-a #dW.ȵ!z0#AC~4}S9a@i.@^ٞežߍe iH%Qx;'{Z\d)= Pt3 lJ^Yi2ޖJ1+5A=bq5yNvNhLG*y$[iL3XsiPݬ6[^S 5+U:e2[ 2jF4+ pD~۹kN=@u4rR8۸e:O'4~[?AӏK{``P8de#\ƶ>GNv\-iᰯ 2<%zϜLbY;R]/^d_q N(M,G\hdXH,e3Ul8&IrJ4%-=viՋKe_-ZwnǠhsĬӶTݥߞ ِg5͚5[4hk=ZU jÞ TMٲ=B`:0`:3Uhr?ܾl_5 Тvԩ& Ԭ2Ծ}Q=@㚸@2^8jsۭKc) ? /HuvXuh $UmI9wg`%$`pϒ:*~D0Dlďr4M\'ak4(Kml=Lˆnzk1]mժը4Gw K2(ene~'kz$}Eġu;87H,,\_RЉ}̗=t2)M=:%UV{5ʁ+h5(A1\dj4 'n}C D6ɔ ^,Vo@1ޘ0G1<͟z#N[}!qRd~tvkJMG7oۣ$ȅNG=;̒g"fG`]asAhǏӯ/{ _cW~[xJ@*GQW$wzk>M3h2@qY߸$|pw$@"w]z[#! 5 kc3gIWPoWA~\w暁(}=bc `R&R{[w]׺j-W;#ʐrEτFEߵ +ށ>[e`~>jUrjD:X +͚ g(r2'ҫ~_+$FLpvT3l9(͠WcC"7R \k܅[x8O >;ui|%W p9MumJ# D58xsdD9¾8|x픷`w)r:1 $X^۴?H ύ6; { 7dah)sßZ[M>[kWy9`s?D>kXVE=$J)b۳8T*j'٩TU]Nv\6da dfzC Ez$?Gi)tg hkqBx9ǂ n jHF-pԸdE%"k2#gkӎgHx_zڔz֟k:d, {+vsu k+fN'YyhÍY=$7XOr'DK ۶&M3VJ4\ HYK7>WTjW|G搿|9˂:2Dv+ycNVOn_}x̚t vERƆlXyv-;~۞Yzg1/2 HZѮl &4- I9C[k -lNuW9'78TsN׍5B\Vpc]2(م5#1jpreUgR|1> !ueӼ]*!%]7$)'9hܞ2͎#&7PɋL FOp&gڴ(%Sg ]ca.iJB<>w_M罷tmhx,j}D$s:׵P}]rY<zV,[:L>TG4txhMŖCtVMr}h5+C^9$07+/ gҟ|@;ebK-wՓ"U܏cch'`H31{mՇ\ÖE,i!qgh#+͋$2N΂T#L#LZri4M$~K#C?^mhDIf7#=fZbC+P'g=˖Vȓ؁k_c'F$SL}];ՖO3JsoBKYe8ws6 /ڽ ,g֫ q6\Pf׮IJ=\Yr׉ĝ2 0ip$=#EI+;aKljZnlIYeW?=G ^y}=vuh?wW.IB?hdc{N&ᮏjU)_&ۛj\yeᆆCO~۳Њxm<X{+GZV)kF=+}2#*t͐ ffW']|vASX-W-`3-*.6t[ jѬt'kMqmM~f,{2ж7hpCCF1[v&7NlcRf(ek?~sGGto\ﱡ K3sz=fYzJIōtGs;zHvL7 : 4F18 ֫w?S(2RbXŎܥuL o}Uc:Bpo<wxwk:V;mȡU4MM.TFk=Ud󝤇~nb(Dk#7g`MpX%A&EP_ٻz/hmd0g%=k-]ҼƐg NFԑgz5?9OyְNL ğ%ݭ4z=A0T|@Y҆3qܾ9zY"is%*Z/m* 2JBYÔ?:%hMT$,U-轂Ot~e+#@?u8fBL20 d ZغiW# Sm| I5<$ǡX' 37GDv[MXxVWD fҮ2ݴH>d,z4 v|6V>8(R< ! RZq WĭEJˉHkG?hdfD7 B!.P\{n@F;&E 40C9Ol;_E٫H :]#ǡPnCF=Ghmp=OIcЯ\&tWU. .F~ײԓ+nrn|ăW?tVƲҩ͗UU+ڍ΢ijۮS7;][K˟+jޤdM*SbO"G%oz֚dzOƣ٬<}Z?dv/~]x!1vBXr~Exڕ6A9d۹ flP G/?^J<]Z]<$j.2928aEhTp>=ycGtk%d1g;/X &kn$|w5Tvm P*&flQBs[T.uTv͙pmYroCU,J?rl@`'dd\JoL۸Dp8N A>r"\I/w>r$ŅYPL}ן&WϊAc( A( /X|0K΃Xh@D!{5.ɬ3m9!2'oe|4U"okt8YD0.y\S=Dq/c@L8x.7bo:עd_ٜ {b.>s7$5m%;]d>t`q  nWE}0l[v[ބ|M,|tMϠE5V*XA{AK (:Y!_\"#1^ϒ](Nnn>3vHs4_|zr(= 4)|B̫"OwӄQH"}Ӻ0AAWcP4 i7Zr"z czNIt"ͷ4s$'J'o|ڄ}RztZ:=ϼPHү ahF^m 6b )V} q/̡\PF)[k#n ٜE̅5|hDBR'Dyt dk;ʺHx2Or3vOYpͩހxÊVN_;3Ke| ~ ̧+f2鶊ZӾʍcܤa]4ؽ\GzViiՙf& v%uurM͓IXC*T|lv#IhOhmwx&P|/+{]yAmr&J?is-"sOR0 =e]rX'8t^ڠk/}FwGa~D~ ?dt |lk.9 ,=.DffLmA;ޑT乱;qtO_1 0P=>f?'s )O3F 冾/'o_^:;`WG"Ht.q@JWOen +}/v"rT7f ⰨoÄ~f+IOhJ?%鋇1}mdI(ߢOgP6aè]]G;%P6R:S3n{㉈reJ$.w. e{XDUeL 1Eexr"6FVq.;=]m1O#!SZԃ0Fk(*â>*w 0$ı0C )A~V%?+ր#(O*r Oۅfaw~[vnŤ-MJclXB4xA[2$='3W[&]9-KB(n+b8d3Wi&t9ZܾQ]$jzhTdKqڤ%= 5k>f{'ay#CR*LB`Xh (pUQGQp*WF`=H&g*O N /J[_"°*La4;49N;9<-j8JnbYLnJ!zI'mhw{}l-q{.g0ڀeHچ_BI^;B)G;G+EY0ͅay .&~SH iSnm[ 8 ex<5v; qUok^OX3rWr8<azbh˹"=;>^2#C S0"! 셰?nV PViN,켒 ԧ_<#*o՗da-jMLvZg+UBVIwJ] HYN"zjAUrq /# 0=S5i {x/=4?+!K1Sr1ktURd7ȢdQ_tLz\8܎Y^/t$5L[K\8 $kc`]dtB|˶kܻ$ EuYgi0!A܀J,&]t3 .,ˑBle+N^ȵhJ#f.AByh4pqyъ;b?"2DNcZObUZ~gM m @SBkk΋ٜ8SpU@8`:7)aG4㽝o9X΄fc:c[]5Z^R+{D|{-ڠ(يv\׻(Fz1F5cjbXZ7R۴{ՉT`Ov K`zq9d+~mdNCtKMi*F[t xɽ&Ic0h4[I|@~{Oaqe}()Six95˥׼=fm2-;K8'R*PNCc3$Tq,_niou'w--Z P~Ȫ8]&?v*g\#g1 tawSqd`gˉ,Ic{p1!~qcZ=7*<xo:cE/O֨rXrx0V0A#s65.@PId]/VE:O,J 쾲Y?'P/wպ~^cwW`ꇪ{ҚVH,GdduWDEve|+Rcei,FD(-QPaӪ8'͟NOIgdb$T| :+#2$:q< ^Q IlV7hz9ӚDuqʌ#'E ?T_ljBKt?2@vH.ܷζ]nՁ3C*nC?_6/%v!],.NA;¦993M5ơX?#^36+,*/81+{@ !2T4V/q/$g'Lb1D #DM[Wy"Q{ gQY"9UaVPm$3SbXI,*N5PaTʈ2>Dᙋ1 ؿ+mL1l]dn Uga(W'. Msa>-Fg/ E޵g0{ 9k]1PN єNюFi%+N"vutB  Rz P%j3ȩn_.oZƒ8(^`0ȏčF>C9}0VtU$/Q~7Z&6TZVH|@UC. Pv9ͣ=]ֽٵ/ְxSDrsR]H zޒ9]8z pA7:ۛ1͋FW eUz$o7)zjsCP'kq) v8c;@W(n U֞~t^1y^BV.$PT0w}Qy $|.#V~x >U] uS+'^vwjΡz;u|&;YX%JTK;M;Yñ80R; 0qz{$.(%g mўF Ntgpgk7hFQQ*iCKbufvzf5':-P\o[޳ZvV3G+4.=5jyԟس2E4zaY{5w08FLo~~Y2xP<S2cT~8&6+ve2dل^B+݆OwJj8HĞ">8P-KBYLJfrÜˮG~:r:ee6upB7ӽVɒm^d`Y^*j."ȜyצTǵO|/\#!Yg=‚L#LE(io@Y?B/2_t`k(U1=pVPQ62v&xU[NꋲT6Ͱ6/^Lq9cHzS|"> 5?!!f#$B̉$:(8beeDڄ:} nb*k|L {lbnNW}tBS =Vf1wMiR} _ޤ#*/{Wvwb@\gN"W&._Z@ :3އH`ᆘc Wŀy G5LZu P'nD(!ľA]vIŶNq]H* /_6 ~&{QBgr=IMOЛ-g,r=TW* ~Eu&*WFb1Xf7v6/*r"qq0Jb?7xL\=7Tip/f#@) <)IJZo$"%snZ|y,?36AI?i6zK?_PX:/^[7h?ۍ#|'?K:!OuW$.p2 CŅI:cq1zeLV3f]vi3V#,. jfmR*WPTBO1|%K- 44'nhH.crIfv#z4Wk\ګ FN?teH{7YŮ{U!NDEyd|VYZfW!%!H3ASI`f<<)aTU8sw(;QW-SLM?Pҥ1O%cʒWɋ}ZW8|\Z *& :/WbX̒Ö |:,9BAwGb`|e>z|eUjp$AN %m ӅͶ\kTZ!{Q1,/NV29E8AMk0ߢI4,w\1:Dd*K]_˨=٪v?MN%܄O'}N^['-GFihb$Pem9*DVC6npI`.)]"V `>Lj uF%w#ƻCSK!mhdn1QPL4;\K9wU04."9Ǩd;8P;KKi*4&ɰS|?K%@:a1w8CPn6FݖT]s8$[P!QBe~睥@ʹq=lhT0"]9O e=]stQ(QYZqȦcE^-#:xLZbL,}fԥ%>+s{zC+ @0q >܎P-;]scP_.8UAjb^}=dꄸpLmnUwBNT_al<3m+C|Oǀrǻ+Q+jxMID#ޜ~1b#umgR0)[W08vO%`GF7<[(hg1Bu,sN3=S×^0FO3uwY9N!gc41\ZLUw&A$Q+5ȿ?[G|`FE^ŠaaàMAƺ?*$XQoc:\P%@N4dϺx9?t/) kH9G),S9~gV[^7[ pq=ZmMYL}F֑tz# }NK/H&HUDq;P~LaBҡR^G퍋 Vno%LWdHXv>Mzud(}^7C<@vK&D1I3! ֚ .(Y"ot8_Y_U00qw0>q˭A&!(v+\?[PڲpH[}Y*}c=GGT f#>T!F[,E ?d1;]`۸o>+GC|dLu"dq஥P ?,D7@B 4GԜR?cUHVmܯNK,~xWKFN2՗sRHREe;,V=(&\Y#[}ZD=`S~tsЧƱ Ov}ǜ?4_}>rxFۤ`ЋR=]_0a$pNuzmTśݓIe ;GwPϢ23D%kĈ ke+Y=4MӞj 0j;Rz3i{C͔L29ui&⬞'q,w-f}ci&W_/RӍ\-^|FLըC߇=?j/EK[kBkϗsCM[$T.٥;y$mvZH|Yt|Z:;KK cZQH_zl:ECr+Dޒh*qM#{dcS0 y(b\cxt, c8D2.Fl{ MՑq}`rDhYB-qhTi"Kƍy6k׼xBRu/ :w q^Q q3 .BE5'X^^DpjSq#T\#v%xPr~kt@8.5s@ǎv7\k@Y0wI\ RzQt|s@dqs>nt02~QI#!G ww|!qޖegq’˩JF6#=ݜ\<";E4ғ1L $lp- on' )Ws]t{h4q-طiٷJaNx 1v+]-M3^DI#R3M\ 6OsS6,wc=`w]Ih? > xTӟW%opXOG<vdfw {)|+yzyϝ?q5bo[|Q~0Է̲ \YF9Ał1 Oio\i~; < '^F0p 򘤃Ob,al" ݋5'V` ! rpժM!9PS_]Wn&;aUv^X,)s}Wvˈ.eyADLd&({j=>g?n_46^lNmXߘ!>vv^ j7{%E{!h@l+6z ]LJqknri,4 U3:Uכ>ca+> }1nYUEtI 58L1֖1WD<0 P^L7,EI{_^lP?N.6 8&>j ihӇi?*4(lo7?0ܧ^wa4Mi6os{>Y~ިmCXPC`v%ĸۍڑ641fә֖, A o^Ѕ{A[-:y ]?_ Xwg_eimz{cp[9oqR``+Kݘ6]rʎ+;j-2gFFg(3}~exj(U u0B|*Z~v~$iHrU1( Cxz= ]+O@no=c?®x_ <&';;XES>?-8uș p4@TiR ŭTo#hp:1jd5fؒkm]J#LHjI24s=(2>"ƚC"P^4N:j(+G e<}~ C>8k7#YV8E钗 C1Ucע68w#@1."V3 H acϗH#!ph0P,P| |vʃlQgYyΓBƒf{):!>$7COXFDp<|a+JFZfo41p4K}lNWJiAsBUuFiwhI>< WOGRv q WO Q4ﯘȈ"-+@gD&Fsn\o:>+e W!\\s'*.nRl~$;--gb *WD 6ɮfskX}$ w}gR}dn $Xb@7 DiF$3B*v|턚UJ|sYK#Y2bZYD貙kḱeȖ@"Xb _Cؼ "iQcGSj՞\Q?Ш's*oѷ;s(uMcM:T@ p<UkTN n /->1؃8hL:Un oKm39B'ю;#*%X1"e  [!9;H!.S(ˮ^ ̹i At0VeYՔO 3|Q݉47LY