summaryrefslogtreecommitdiffstats
path: root/lib/util/capability.c
blob: 2d13826c14430085028ee55baec45e21e986027f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
/* 
   Unix SMB/CIFS implementation.

   Copyright (C) Andrew Tridgell 1992-1998
   Copyright (C) Jeremy Allison 1998-2002
   
   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3 of the License, or
   (at your option) any later version.
   
   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.
   
   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/

/**
 * @file
 * @brief Capabilities functions
 **/

/*
  capabilities fns - will be needed when we enable kernel oplocks
*/

#include "includes.h"
#include "system/network.h"
#include "system/wait.h"
#include "system/filesys.h"


#if defined(HAVE_IRIX_SPECIFIC_CAPABILITIES)
/**************************************************************************
 Try and abstract process capabilities (for systems that have them).
****************************************************************************/
static bool set_process_capability( uint32_t cap_flag, bool enable )
{
	if(cap_flag == KERNEL_OPLOCK_CAPABILITY) {
		cap_t cap = cap_get_proc();

		if (cap == NULL) {
			DEBUG(0,("set_process_capability: cap_get_proc failed. Error was %s\n",
				strerror(errno)));
			return false;
		}

		if(enable)
			cap->cap_effective |= CAP_NETWORK_MGT;
		else
			cap->cap_effective &= ~CAP_NETWORK_MGT;

		if (cap_set_proc(cap) == -1) {
			DEBUG(0,("set_process_capability: cap_set_proc failed. Error was %s\n",
				strerror(errno)));
			cap_free(cap);
			return false;
		}

		cap_free(cap);

		DEBUG(10,("set_process_capability: Set KERNEL_OPLOCK_CAPABILITY.\n"));
	}
	return true;
}

/**************************************************************************
 Try and abstract inherited process capabilities (for systems that have them).
****************************************************************************/

static bool set_inherited_process_capability( uint32_t cap_flag, bool enable )
{
	if(cap_flag == KERNEL_OPLOCK_CAPABILITY) {
		cap_t cap = cap_get_proc();

		if (cap == NULL) {
			DEBUG(0,("set_inherited_process_capability: cap_get_proc failed. Error was %s\n",
				strerror(errno)));
			return false;
		}

		if(enable)
			cap->cap_inheritable |= CAP_NETWORK_MGT;
		else
			cap->cap_inheritable &= ~CAP_NETWORK_MGT;

		if (cap_set_proc(cap) == -1) {
			DEBUG(0,("set_inherited_process_capability: cap_set_proc failed. Error was %s\n", 
				strerror(errno)));
			cap_free(cap);
			return false;
		}

		cap_free(cap);

		DEBUG(10,("set_inherited_process_capability: Set KERNEL_OPLOCK_CAPABILITY.\n"));
	}
	return true;
}
#endif
_f:M.G98N-tK$Kmvج4RD/QMؙ b;%۹sWDp*$S1r&HNFτrE[A"Ra)9}gss 8I2@ZDSV51bxRojW?.hc(N^V"OyG>c[3cEO> 3>@⃵)H1z78[9,U4LP,t6qQ5ǟjc~;- CO3gm,:|A  ݐdvx-*a vxK.ųHa S2|sl]ɻR =7ݘn-"ް"$ټwNX/L6t]Fy=DFJsqCZ/n(tBQYfbdgm&YN],,*[Ьlq^Goa搽tg8*1J `pv?v=7phŘ=1Op٣ҋ9˕r3|mZ<*D(B`)ڧJlZQbup|D<8>8wκNpnho$5G[T R물P0:􉴅e<穀B 90!ϦV5Τ*orj,ٔw! ]W`'.W蛳9J?t?ۅN Cdr@ ~8 NSڀCB`=Hk_D.8Oh\20XYe9`!\iaVB[cp%PSH } Ȼl@ :qh#F!g'ĵ3h>,هMf^'iv,;ᇂlӑBԿ`F_L*~Dߛ]7m.2פU/_fGO@#1Wo#chXT3\.]u<$R慯dWI1H3s:MY{'aYxn|[oRvٴn+^8Ԟ~_4d#+.71u\Kː2٘XĦöEqڈ?TtwJ7*ulɄTj3-+Q\Sg-d@1L$^ߖrn\(k P2zah@ bzhٶ[{b{*GZ'eFτ"IIc7=~Fú.iϸ%eI'{{=$«+oWS ܝ~SI|!*5B[ WdrʰXtG-I(:aԽ?Jξ™v}Z|@ ^t\xes+l 1FiL'`y|o=?5bu2 Vv ȢtijϦfJS [p{b+YWO rLBBiFya-z=9/̤lY~EE;gسl2{Vphi!DZY^&3IYhk,zexTT,C o29nɂR˿@g( qQ_ʿ0jO(AKhBkRD+ xdЏԚL~XcRώיdokjmαY E}Xx48_!?iUVv*DUiq"BYZ(@% (U<0$e@޳˄vK8xò/HZ"^ï?oi7(p! W`iUסm,B ezDTe&[e&o#{:€.! H'w؃fomh#kr3a#垇)ޫ+I#C1r!3 VMF0r?mDvkhM( 0%ĭ_YJ҆AΊ^@wz+{6nô1AgTz5օ"dSpi#ԫȞ x7rRldnsϫpi,|#ɻ5w\cd?q zYbNt]eG(Y &Ũ%(* xU"[q$b:95){a,%$/_cwTi?.ޡ`ޛx9q1ُ-ⳝG,ՔZYkzQ/JSYzSVM5icr],Ul ?&緱U&bU#tn Ʈ/‰am9MEV%*:%YLVhA.\/zH#%֏q:43K櫝Sw],3YL/>P3-22?>\Y$ 7 )q]nabbkQ Ϲv)`J1,t/NNJ˖f> aḳo+JlyE T/ -(o$,I7.Wp]^oMf)J3mtppyhqi'71U朏(>2^ t[-T7>;INXX!byu|mm Z+,WKwE(Nhkb P͍~4?f~#o䜀ࠜpH &W\RY'/mKM?ҔhHVΡrb %_㊕K kU+0͜v"9^k7Qߌ7:(glS@>Bs8:Ε~<zo4&-cջ_r)gn Ǐufϐqҩ/9,c(΢ZCaNH"?Rߙ>e[MIG9,D?_)XBg44.P y2ݍ;R=X.ŦՖM$krVX6l^'y섎TM|=0"]֗aMptnj! %b&U+лÏGC!`6sCm_ 2DPZzMv`lѿ- j?Fw2^$E;706U\PD lxU]>$69t?xݤU$!#hZp,n7a)YrBМS°/}t&t;g|ϥZE(՟U⠁BgkSw+š՗OjyۛHq WnFZk6C3х5P?? ZY7V0~>́it0CFbhD8S0A#qM\2Kl"= 7*"wlbj̶d4B+w>22F{/heXtyPLe"G;i; o 1-X 1m9m_"eUMiUAw;q:T;$UH߱/!\%ZM?_˃  h/*Xa#r5bM"i9g^#-(%lo jidip͔ϳ[W_yu5gփ b @ _E~ٵ.?nU#En0C(>{V?hi<?x|CW/oavMYX>IWcrQe91nd!4Tz1i[#z.Yvpf0|k P J40a5oFٱ7O/}@۰XaLgn`[u %Dy;=v=`PPؔM9n&&`KӢoPeZܾ{.! 5O&=2 \۸:[?J _Z5 wcqd1dL7-EU3pF>p$#][ӯhO&.S%cL3DWP8kK G0' Q($Bj}a.l1'\SAaR{0&$6H GG?n4NG&!_oSkFXغXש)zU A=UAor5,:fՌX 3u9m)͟EXWg 'p 2[ ߂|"?Et3<~i#2su49&Xѐ*fe#%;Rp~THVx+e}|Uk28~يC[hAgusUg^`m:wBK- $"!j, TŠ0 6w&69rAvsm\Q"Hq1ꖊi*zs#}lܮ QS {VE+2(,\~#u{͟_1Ɇ3 hǾ#+^MB/_s(-N,0F"&5,_#M -7B0. 䅈.ύR^AODf[>;qCD]5+!DMn'iLcyÛ/?\h*LoܨOwHW?ߦ2*F6^E<E6%Ҭ\M5OM!Q6N'he0q;CedCQ9,aIp\]+/w+v8<5MO!0ĘJ0O-ۃz﯇ EzitNT7cYGߒ3Gֻ":UA=#6OSYı;]Y[Ct%7͓FݛLNo^\\E%3:62sIvF~Aah7Oy'"|:+k{U* wf|e4B{>Ym:BX¼FGnclcPd@kcT"eGű2ufacϢmyTK𴤷V$YQI>e>2T-{o{1jS'7M qzt ~E#KcFdo$q' T!rB!v8wӹ(7J;_9cV yY!` 0J:ȇ0/`?!vZ0+OWB&(d:l0*VlIXy]o2-q M]e\=:B7{ Al|,oR105?q/KQu_H.H~n/1t)HZy]0ŔgҙC bJ3~|N3I>J8W|b8͞P#$Ai"6^}%41D]:SU QПz48JXk.\dւ6V#m09w%[mnUBf7hU_~*"W0AɞrHt&w0 !v|˙wt!7*$aBL7@>C!2aE)}oܟn pMj;G]yZjfgwabI}{mćỎX4;%섍P6M 6Pte&4^Y aDFAd⎂Dr"F SxנLH|'N~ ڔy 4Fxtr-<&(Ca6.uw/ I&J@; F%_ni7]{-oN r^t0O[<-{]3 ǩ_b&4&aY,*i792yf=^jæ,ַ M܍i"0'&ؚ֙i򗯗J71bտRb]pFI7zz%ÒVBuzQ k=I ߺ)VE;VBdLqSV@zEB ?z}=w+uS MV&G 7+n[ᗾqAAzA'"TJ*zlp*B9#,%6׳\pgrtQkKfc׉(k/f;'l~vƽ JO?vrLb2B,j4ZY1쳀TVr |/ձ.Q k<|Gāʹ$8(kZzBTZ5Wͯk"?^ DhM8\EEJrO|(^[VK`5=g +Qܕd%΃1Ar#]FhI:W C[uiH@u{F1,8g֚}k3/՛ wmcbWqVbHk"*c}.&6M5/!p}5ůH['3Tu=f8hCUxxb!H+]~* rZC?Vr'3!p|ۇww+X!-F4V=I&ggǪ-ԩG5z6-݈Tɜt$vzjJhXh.BEqt`C[aٕK5S 9K@fʮ𩙻S> 9H{}%;sr%e W86r]zܯTd "wHz¨ܭ~cD9>Ca<‰_?( ?be$Q,TnMe!GWGbG|˂*} ?@+&כt^k.@f 1Ѓ5!eP~Qʏ=sޒaY҉kH8p%<0#kVZ+hՆB(#%^U$߲:#vsPTSs9*{-ToQcr-T{"7Q%?cX.-{XjE!.J~PWy ;LlX Y&mko}q#m63̗q͢$ظ !:*;O{爽+WG:p B0X.'[cɴXB3AsgEŏBo$,'T_W82c \VljPvg/TJ$GؓqQ|3N? L~OlpE警B_86V8y]:[m,LbM:8]VupR].3"EcR93ܓz>Sz+OG!e p{k8*K:hP Lq%׏+T }/P,K ]vCB?JVBe= SѨ^U4z ;b=r(Dsl'(G>؉?4r`[̎h1lEJj}JpRrt??>DP/7HBCa}iIX x"ٗi( 6[gt wt N+FF3>5g7oʭsCDJ87j-nxqr`_+`כq5w܌_E+;X@\$l # FT_)#€f`ZU*yk2DE~-v '҅Y\M1sxcL ,}c)mt{hH\;v2.ӄ[<<|3!MM BKw~  f8NbQ`Nt0`!]̯Grs77bg6yR qC@Znlder* +j.rmZƳw|D*7׭X{bMU;h zvKQlfId%xց&i)&< . <ӏslK/9 -S]~@@Ce5}ljCğ$ !l~c:y4B{@_"`]\(0#([:PyZ 3&ֆLRpQMMbc'W %3`2&?u^teIb=Qz \i6l#nT7 vÏ+m UVFeݡlB~NM޶y|YyGpe"+!8nkFG? <6jw:YDC-+Cr- NJVaDIIq]#}UZ2GNX6ݬa9\22{6 -.U=e5خ7kpp#^Q<[1AZT"v_:F:ɲ Ŭ4PG$n@4QT³ɸ7|,x ~QOC +H&J,b !|n,G7'~t}I}1RMㄗN @v[cq\ ࣳ (QhDOOst/0@(mؑ«Wnq+dX'8?{236B(o{P)׋R[Rx@صp3 @]+dJrHOnRz~ndF ͂Z-8͝Z9< 3->"F+ lo\es֧Akx ;TRm!yTr^esÅ{7PE^{s L- kƶT0>%77JG~ܕAUMW8>h4&o2:>5 K?z@_ԘΪSXq( Ϩ1;Z6FQ￵Fc,k|iQXλIFqXP߻`U־}MN52@$|īK̝V>xL#<$Σ$_b5۠ ^:u5X]OtS@`wN7"`O_sb2hpU,Mj v۷(Z qi㏓2#keT=,KyڕFb1gbG(EXߊMfG!!XLAhXGOxRr>ipC 7 T|l!۩ye!bzEx'{Wc?Go\S8` <ڹqV;B]Y֢]&UFq\ĴcY򧢎1f&ܧN"8o^ӿĬ66 p^GJG ZX,q {lp‚WƢw~4BԪx {b/!S0|b's ̒;W \[eS:0IZ8iB']!ą +34{`dx)K%SfU>hd `V3b]U t;|dK'Sq _.Id\oQ>o-6LJ7 L$9YCuAx1Ebp)$"F Rײ/5<E LMMq*nЋsQD6Ku/ԛݬAB7+}7eûv?Zhz-+ 3{.k4 *oo,*Vd.cgJ|Uw ^ؐ-T5>{x&ߖvtÓ5DzCCw8@xH|0-ݣ3'>[@ڪ'6Gwm_poLPy8cl 2sf; ͘:(ʃgHmSginWlRyS/FPS/`6IJYI%,7X%uei0\a(gQ/R܀9+.z@=FlVaUy-h{^^s0C@c8^[\)z8nKL(sTvֽ6ʤ,V+MУuO%(œH9],tޔkYgp?_F3׳dÌEʦ'dhn怯 ޑ".+]M"zlb,'ϑzM' R/y?;'D,堩Fs}"+8NW^C-x{"a^Yo;<S#†e1ky Ԧ7 jK,:ʩEBcq-Խ]vZKZfQD%6<=7LO'Ro1eo+̳67$u3G VeRê~"hZ4#njo|Ibb:fGȵ Q O ei# @A^{tl,]`Ht/Vu*(6 &OВ_+QUcf@N=$7xfsʉK8h{3ir_H5bQ9]ܛsqG4c\O_*<]?@m%yz9n4B2? xK5M)sӐC$rTrX(*Suh >(?5mv'dQix> mړ-9L )}"ɂ)hˤ]h sETFF 5AGѶtkSnt(hTSrf[l<]EO"9e*3$| Y{M7\)(j"r+b!f'NՅ{[cfezktvͫ:W=5Ge@ t: S;.zHu݃87.!Dq$9 Vh9ĖJT~!遙Z>qyj5<*9dDzZG#2DzDj,@DkpIbo{x\ZQ#M8|n1jO;vXDGe^Nrg%")4Cϳ< ą\2'bLOl!t-̢jF_ld\$3Zߟy1Ύ։3Qd>wptʚqYPFزmP8Lԛ:Oo%{r1YÆfۢi#&h3q6w|y_!ZL&񾘯ΰ1 svh̒_*:Nq@: sZy7x,o猳\! M成qmOxKݡÜƐ²\&Ků'/`ҴSJ'?ڄ:tz/ܾjziň^<u` Bz ! VR㥡:=f7}դ'Z=W̮@UɿVYN#pW@]pqtmd),O W^͢y_\Cy8ENI~#7)Me{AyM! pj1mƈ֕=Gg'@ޠ搿UTt)#SO+֐ĘAv!̣%ϩ]$6᪡qQOQ;3 ɓy@<0~V_ƥ=Pm-|eԛhhoY?3 PٰAb|$RKjLy_1S}QΌUE(\xP{.C3C^9{I4/*kL9&'k4\"£bVtE&czDjSm.h3C+&^v}keG`?.D^_Ĕp 5h}wg:MHQeShX_x{Qa:t31R哆hQ涸SZk:gQ,<"bMOStE rrPWkGRk~dN<1pv%\ Cicq iBNfJ3jzN¬X1V?\7!hrf̷q{6N]H&9H(NM.q5|lFY)m݇8z~ij ]ni}* a1PGxm衊:ϗR#0XmdI/O1L_N%C+*#cdG;=ZwP bnj=Lb09 F2_xHd!l',4*?T s #-x/r\fċE$&^J%k-B?$A3G+;6Kㄔ}7\uS᪸*e-8%= |E4wIfC/!$%K lZmmSw+VjÀ"dҋ,OI؂룵*IFA)ݾwPL0WF]R=~dC/98]t˘mS-)Dn%lϧAکs3N]b|1+;ɠ#(;|@>eέ;5K0ʒZQ5,$w_ezQ[4# '?Lg~^yk֥ͽ%N3iP2'üm!Us_d&ѽ7W⠦LS&J  3Vxj2jSPBy]ߪS=:i[P`=NٍNJ |r-<7roTѯƉz0@*n0E\gN!*m%6P\t#Ɓ'u)vs-et=$~q%Vi(RL@Ľ4(`k*B'Xe2 /7nܰI bm9@7}ev#Kdlڧ($CZ&`Wov*rK3&$Ck+ߴ4cA3*a}Ki`kjִ݅ӳg8tηx{ <-ƚ[NN70ӈe@=xwv]-t"_t>EqA@طv88P]OrU"B`EꆻdK&>]ז2 *R3nM̓Pf@`sOF%MnxMWT< +1O;BC65|Fbbv>n_@QqPvWesViGP! zߗS|W@n)wgd~EGJRw $;!j_UfEט KDD8ܚ>dQR s S܄Jiw%^zs,ȝ5)" ,jԤԳIB'o)- d/r%@P}k"|t7i﹎ Oi,Rl, :e'R;ie""eNmbf3vđՉPyh:-щQl`H@}`q#gp,hd4Ui^%F&P>[{ r|u&Z/介ecШ%,dkG>_ϙ{fU/Q vby -e7W=nNWg*PvxwMϏld)`]uϜ?7;#1s5ׂ_hf j 5DxƇ2Ij ~C#CB'yJ[)b'D3,,D8pjܢE/SPD"q} ̹I0Hm{k-(#CZ.@Ky[eEݯ" i\ \HYeߕFYm :ǴHn3MpX aPƪujanw#B:W{*-9F@xw@Gl+3Ke@ B?γ\o żn'Sj]7f{z$bZJ#/It(Vkx9_[-Acw屻(R@oCv{a &3J,_ʂ^<i/[~ʷNOeYR35{QpOge/Q$R!zE3tHf֔Rs֚; s WvxcPxob]HH%Z BWDEC(nCAv!,JևЋ} M/[nqfT4uyOPM"5 ѯlٷ.5~ S'[bЕKrғD"/&̗#d{!BI9M6 1>z-L1~e `nRN)24qW51t qT)uĪRi/2;:"v<-wȨ+%؍o 5J"tQ>*2 N~r_hK$y1,~%=r Χ fJ8!J<kz3m$h/ ԩ0uvj3Kpb ǜ=2].ⳕJβ:Iq v UIw HI?4,>c.9ϯmm@!wG8vYo&i:`\M\ ͍jQ߯uDX8<5~69T_qkIWq%1m`wUN )W:(eݽf{ M$oT0c#x5;0i(b!oT\Nl7= sդYK3RF%__v'hKYezj*˜w 52(䀕joL>̪ʲ^a43cc3]hhfDB}PPtUՆH!6L7}H г%u+ΕFBje}7Y sp`a ,[/A1 Me|fA5HEm{FS@pyW%}*w=.{=Id .8i^ŠIkLlҍKdޤ4bcVX&g|P4觿?n=TsL[{MA xV$ͮW -2o͝oP w3Xq q wQ(0{ MЦ>($ mNK B;wqVG "#Xy d2g8aI5tBGrsDuѴ2&m*A#B>?5{f vA%T##X:+|2:W0;uU|4"] dôsl[hS/2J BZ bjzKooL!~%YVn{  E*g}6b3迷7fH6[Tpַœ4-2nBy\l}|i*m>.pDGW1v7h|tE͓wd@RF Rqd0RcowlAM2cs@քet Ea YH@z ={?i 4v! z{&h9d6?wG'Q;w: %J}~Z8E n7-YP&CMޅKTl3]*0I05Xֳ6+\AUqwJ/?0Ѹ-uO [9o.`C ^_ [)<ZzɹSy5V/n$pڀDdιj&Գ}kiѲk2,0]Iw$ol+x >3ʇ]7ln-q12VU$AwDA2q|KI<:ύh鋷_PyP<{*F%3,%s2J%S՜38h>fA4MGU6_27;Yџ%j/0r=Nr•F46}OPuoG؃I ዋHrLYtvmu2K~_@,:G>sRu /LҺAZ GW.&R4-/Rto˸1ئzՂ*{`ؠ,fL6+@ pp(nze@t0FoSU,GB/qy[6 xk6S0|z CW'E3oXt-'u2ԭkbOApf07l7#j|D+m 0Ӎ{K:soVAřASU% ¿oHp$37kƴ=^;]ɵRA24sM݂YR=*q"Wӄf=MA8Wu)m( }Жת$(;֧2zю"b:(C^Y,$9XIU"'q0;kYJ"ϫ0ndx ՚oT'^79='[z4FCY?yh:rEɉ 3noP?ѼXFt *-vOlzX,rI'VGORwBzח.ݤ-f:ltN F28s_G$":g_L0L8~g{Pl["6ĴzB%npv/!H$zDtkz U)>qDG-9%X.o4&ԍ#j2( щW-V|*i|QuJ:`\֡䳭^"BGpcB@I'`oB_~МG9VU6$%-H Ec+ Zʯ+Z/K:,6K{J(8F47qBO<ɡqM#AIXuQ:ĸAn._=@ߪx$V Б aY^2_{#/^$r|[}&q_~8S oTT!ęHQth[4x~FP]-9fφ-Z4`XUNLz?Jsw|t(rt쭵 5 sL]^ d`C9 c$;=3=1Aj Nm@GFAalN{IVl!{LI_ #pWP!!2S5Gӆ7h=Z8ܹf`H"50\ǐ*c f}eRX)5 R7B$Թ_gjH`mǑ;GY0yX/C\xIyJUH_;b{LQؙ5W&g35&R3RpQ)0OA4l DUگ8/3ul> &:X d5o CQMsI^*Prϙ<8e\)I2ʂU6^$қ7k#R)+aT`!7vpZ"Qr:QUO$4WeU*u^yxىAa:y2TI6RΥ}V/G JX fG,Ƥ>M|,􌖱+YG.o(o_5Wu8|LS3E@_*j[ dHM潸׃v\+63;*"wKV`#^;uQܓĻMhrǦ;ߴڿQ%ǬzwFOf_!\Mj-}wD;Q+.)8z-,vkXFm0-ǢMJdCl #Nfr5vmriC\[dY@͒oe[< Ud%q=T_#+A{5c;鬧i ĺTgc'nǤ $RiEBOFVLc:Ds0K5:/KXo[+*gog=& ~WWfP(y`n`?=yQ%%s;Q:iLzq2A"Q ~lNX# _TX X-r;!GGGGvn|ri/0&=A&?ژF^]Vg?kkI\{ %,[3Du! lF©@MpޝRoD˅PJgGGU++`ʷfcoΖ>k<RuVL}?_ *[2uk%:$#.Ü#^3$+;CN$]?+@Ӡ+=Q Hͥ {ԙ^Mrlf׺/R=0wԜSs &IlfjL}J ,CtNmAI.!4` Ï> ~-vV` G@;|.F3`u(aLA]LU6=l-h X9;EfOR Je3&'HE%)"ro~’6bn jO TR\ Z~/>$<t= ,9  9^Mqs »U=J.yS͸4S haͯ)gw F~qK=X8Իiշsܗ?{ BxC9~پ! H@3MXEϷdd$CcE`0ed S¨~JºX#~Ϊǭ(YB7+ˀ 乻E/a!bJ iїe'-% m l-5S ?tD#g~0Im\1%T/ΘlzAory )떧6t>&%%w@AH wW&@WcHEbճ6P{iB0N_rAe JfWγ`8!ڱh68/d*! Xɗ*4L1X*b&bˣ mbge>!Gl\L㘻I%,AjR˱p&5t\nI1AEKsN|,m4h'`*~A ^kVȺz'Ehߜ8jugH/$:҂5E7eAt {ş XK ?5\{bTsnЦTܣS 9AkyǸW6T)bw>(W[G⁧*r-BzS饤hrV.z/\Pb⚺iŁ9.$6al XSۼOX' {ת@ù 2x=OsfʐsH[\J 7<QbE05D^?7'c*Jzϐ\kY?i* >BU d#C[M8U2PV ^<JREQ  1Ώ A1JwB*]jL/gN;$h2K]Z೗|k"i TG\Pb*:G hmɇ'DĝЬ1=5 }zo .L/?f+6oӷB*/sуK2)c_.M*3 RexṼ`]3.kg}#D Qiz\[?Cy(T&7O(fL8`zEUOZs#j!gbMnF Qԝi&V:mлМ;l @眐ds9jp紩# Exo"mW&*T`k{li9S$w]FoR8'=hδ_Ua<9;YBh1U><k~FΚߌ6:0:M*f/oųX p t'(np U&Ln6Y*A 2B)81{YBGg9 b œi#v(WVғuaRf-s4s@j(t'9o-+&?(1Zb.YAfGiC!rm'X&M^'!^Hw JyxG,=UYp~Bt |L1#*+Q.|`{+eq -٤G& ]8Gb[/He}"y> Y7,X)v,hYH ٍuf/_ ^;\x s"~ hUw mX~%6OPa;-e׎NzCbIEQd>͑?9C]J!M6TM8Y!!10URCm)N}b g@"?~M 4H,ҧƤlHDF6Pdx0ꍝY@nw~.)أ;h^_=fzUq7fSo;Ua䶪gU#@gyބU&4yaW{m!w/kޢuXȘACX?2gso}tIP?cu!R2m7<ώx,u&sFOP@8i[;rQѦ! #X*5{C-(0Mv2I~5b`TMtɲreY s)8ޮ@QTÀE9=:Jij}t+nll'93:;-jRKLq]bDp'MIOKb&jKjP4ZrMԾG-U!fWH)lb]H¢hC!+2H[i3 -XGTXB՚Ҫ >< e&d $s(`#p1GPkÅH-XM>~ 5TNvǻ9b`]yyD}4yЪ.w g"Ly0fb0 %E4j?nq @>Jk<P{пK!HaB2;#֋yG2O#- Na2GY|1* 2#sMP7B5x!,vA՟h/QFPqA߽Ba}VcO'͏'v?* i.i$xk} ?j E$ ,:\ Tt/Nঀ!Dp7Q?9#Jnk>vx/aoCr.|w<@|T2uCYT" X Nsւ$w3ZT.~H=̆rMm.HK:#ݧ}/T%,+in0)^[l,?^W?8{w}eT(y,sUF Op!We l`t-iYmk_;e*YIgC/7RPk9!Uf7EeX mSdWfPK=ML>hnP|뽈 ZSPT~Z%vUvdv'B캽뺓 n4_߱@aY&lIVeUl{d̃Oo)(Y0d6+`fjfNFgq I֧ʕtj׭|Nb3bM1_.:)EŠţsQzO(s2Ŧ~LP*fnO$Fŵ5l$rUy69߷iޢ}ņh/KC#4q5ubaUyc3bE[G.ʴؔ@/w*߿ AV(M0!iMW :|Qja1 &GU@xp+ޒI|%jQIp44'ִ .ƼZKXm:@5 'EEo3FUO7@r-r`L}ӻD! j2oCH.K|ڥ5oRC(oh|0u/NEm5w{{"A rB7}p_yw~n{`n&zIM [ٍ=PGnUh{vh shW@ׯ+$S'TQb!O[OW$J@ntm9";=ۊ-#rN#m w-< R{+ M9;\RyUL/mkFv 懭"ϯ6-CK6_6&J3 ?0mĉ(Gs=bG$u[ۆ<}sxkxg9=㦛!w}3d.Ha_VQӈ1l|%@,SCW<~m¢PLZ ҫB)bhЌɯZ%HO7؂#$#ru`=t 'Zo-Catɋkag&JM/zQLq!ӭP;siAJ =nKj EiٶڇTg*((cqlw2jhKaݍk JqBl_k\gWytˋW '.9a-!;-2o2cB{Li FRߵim am8*5yXy} yla=? Įez6÷7Wy tFO;oJ>D?$5{ò{p VE Rӣ @WfIsdvccy:xEJ0 2S[T3 R6$|`NR@:@Nq*tFx)AF0@|lȅ D.SU%⤄kl!* k5Ek8껕 ,iPcbEܙx:fGyr=SD{BT`ު7 n )Z _[JAW$ϡzB =VyipݥsdXLOgZpa <~2٘g IƛpjRQő!zBx>AfP]J5:)7Y[Pych#>2CNĢ֓n%Hݲ8p#[n(=(1pfN у5\mT>lfᶗH$< 0i_eJ F$`Cɀ A4miQ[OXW8pߋ wTDo==!Q1145(#xqΧ qѻlTnwLy/QĥH{vߧ}/>{<Mɚ_'pO!Kae1 G*C1R~bOT"˱`|$ H3񍹿 S\htkEA"3q3TR̸bCP^zğ VQ6vepθU*߽p^E<zI! |-7O֐ް@,¥l% HnD*ѣ֓ŋ)eZ7hy4ݤ;3uP<pvobZ3BDFG<>|{∣FI/ž/n#KuֳOߗ?3wQȸQKa)UbR"p6 -,_mdvPL&Bը??=m ^wW嵋>pjDm@au^@v>Vt)\0c ro.M4O퓫H!GkCUe؂ ϮC0Adj ~s HAb~Zъ'{ӏoLrMY1@08]n1wX\-̂OVJ`ow-Kh(L8/#G qY,E;vnEX&_ru_7Ԍ)Xq5å+P0ՙz|aJ7{0к¯%~ wqĪ*g^yΖתcJsOa44 .0u#e~Ɋ`.u6?sX^ɡzoKpV]|dgrñ 0NF9LsO@HB"]Kwbg?#;2M*mbr1pkN3,(p4p2Ϡ <^g\]b1 's7Q$-_` G*\ PW7 H3@(J.@9VveI*"n؈_n…*s&cA̦&DkF!Y7%ѠpeL2-.MQI; *&!+x3%Ru Nܳ^p +w㝢|P;Ju xt8{%8J wؾ*V14Jvj VA6~R-W1VfR߶X5>Cp,ɠp;~ ]q)% FIE0RED.YӨ i}m(΄#ZlWM)k>eDM]zSƄgb,L{uc;Xc+ ./J /Ll.!W¼Sv5D0C,@И Jܵ2%t8ށO~0i 2(9k #^i~KCS;u-Drϱ$mW\SJ  .ř+C#V( bLXu ]yFH2qdBϡ k y1е;jǒgk }Tٝ;xnߓ zpbH șWHISEl$&7Y`<]-E̢5w6-u#L_; \Ւs ќ8E @%`Y=Jv)vIGtUw.V\8LU^q/M\Z16IeFggp2Q/t2-9q%ѫM3z'mKɧPҩr'.ZY<$?8g V$>7jRRƹ6 XT\몓Rp$#MX/M֜%akirExeu﬏=7dwט4X`lvaa훏\edy|^ UA7P! XG3¨A5eg8@R?d_a_Z_8'l'x_Nc ~sl3͎>pcSN0Q5T&.Ɋ#jd gcz#ll^cU1^[Mxj2ݪïL},e,Sp=Y)laa|,"_ǀ3 ܺΑc87ŭ]"q}[7 Mv빘NYN+~mk զ.6 7SuC:mIrA`Ü zv(G o2LxV~c-rPUm) i\.7X/[ X-Qhi)54RCragtھSgjk?a5I[Ƨ YqS*ڼHhw]3 xF@b&߂/)@dBTՊ1Ub@ h-Q\.ݿLDhn˿aͧb,U+L w{+ R6s?9|eCr7@MQA񒔂|&e kQ{|PV ]viMZ`ޗ`]_d=\uMoG<3!8UdN&k \ $\:vGl%]'Lty#%ԥZܣڄ[˯_$;#ӄ!& Vq@AS˶O+w;Ns"v>Тx2t3;a[! pm h[ar^a}K%^)Osv|pT\`~=?EI?H_6^E.FՊd8ٝӂ(& 2E[3utF0ջQpE~l(K0NS Pĺuȯ8!l\d!ycf7@Ī>>eTd$4Y]KޞNLOK^1+'Fݜ n}'{upwEUJhuk >2@!iދ ]*Vּ;Jgj=ڳ{UV gR\襰-,T SƇY#i΃VYؔL67{y}d y3|bIPM Pn,L^xY\Z!%0%ev{SӸ>l6~ll1)F[N;Kx 6g_ͅaۆwTiz]}k<Aӏ{imi 9(Ҕ k%Q>%@fza_륩ڤ'V !]W>NU4rCgst*Lwd`Tsc<+ELg}cZ*KJ!ǐ\*F@=O1V A(:dM`./ad [+V16CpEvFppM;h!=x ҌɜfbIv h|GL ^eNyVӶ&ѕ&(%`mӗdE,76?5@qt-XB%6H"SW>Zt+Zfk]TR Ia[ME^O[DcΆTb61>P sՓm]m| _[xѱәF@2nh7  ZuoC3CGˁ)!v'OJLG8l /-C/M4Hl%톡EĉМ|kd9\e-[W*TNctb'S'[jJm̬vcNz/)w~CUx' 7D˳h)љ+w_ hW3X7\$?bc(MU3`:Lti{kvG&~C 7 f'$l/'6$tl٭,4YnCMxRbڏ|hsἭ^ .'ަg;3$@b 4*VAdݴRҬVB9pfolۗ: 5}慚{q~$;L վ'"ٟTήlը%<[%("ġ2 dC脳M`$DpFXؐ'V]H mcGc/-rԕ>-"xSZ%CCQFvsN@ 9Jf`-HԻUC^㢄Hc¤,*%MK~鴼ht݁/a5UKCcGKYgqHſ%0 m )l619"{[n)Qjj37¸-dހ?މ7𨪉B$@8*9۞>Wuimʫ(k {8ːo)A}$d& #82݄Qߝ?]3.ow!sP4E<0%j=\ @ܩf D-\6N6޾m殘n ~cEVRx1 CUk%|y SFp93u{kRJ&ŰP1 象UL ]ر\fX"p;% Ef "'(H>].g80 8ێIvK4;WwZAU8-2QLQ{y:'?=S#.nWDDt [.| $1"#ص|'\ȓ+:iAU0V^K/ jT{sBPw3uhcFoT`b @pBsUc@nf*w[#%b2т"P`ʒI0$\Dx7Ib(9I!B` j0꧜Y9Xıu˜},PK1g$ |E+uw>X"TRj3*"Nffi< 5 c1ҙP1MX>]0t8E'g3wKmHR < ޗ>0yOT_3hh^nø"\&7<shЈ=u&am[` 8쵡\gHR1f)_?8_k Iя^WY 2T|0]{hmUa7f40kBܖBJ\q㖷4L*ob0[} iHr@)WW({Xd!SuBOXMwNA#jDfOĘcqvQc-mGYHajV/?܈O<~*`AZP,tPF0RhZP=٬)'Z8#_9>kr\[a%ܔ І ^R814V̻& 4AVZn}K s9?'F> gÇck7|bΠ8 C anDD M6Fr%9 Q?`͍MOf<1DRPsW sMJ+ .\WlA,╁J ~\<- 0'(~9Zd35vwiK9T,$d(wHo"+TR yq~FMGG/ފs,uqQM):4t->tEZ>mn8^Ps;~@ȵ9~Z]? z3|twn6ѝ{+lDͥ*=疑"ۿ>PTZMOHYE79y"N֦?ÐXby^nc} !wFsh%Ɖv6MRـZlو'4΂ȕR ;"'.) SDAj+hϿ}QD3HL+W==@_.R9`t-&P@5i+ʡۼ`:JDfo6tBQNGΛ\~$a 7s+re\(@z=y|-Ғ)*kyM9ܞȒι2)Zv$e7H8W& Aݍ"'ͩmu C`4z Ip9IQb>6HkT\pRO sNnjvͧеg2 ]~i~.޳o.Hc_k fG5a sk.t\gXk;ґ K8]Pi Fwe+a`QdO0'"-3u\mB&_SinLb9DBO5K ;?H8LEy{,Wcz]IV#ZMN4SMqœ`xc{}~Jg2Aޫ/œP tg=hVhRs|8ͦC#-j+I]zEΩ*\-,j%ܢǠ̫Z_3T'R)[AZ rp;}jȤ+( =K5dbn?x v7=i3<|\c?yRunjcJXVskǖ~uU̚=X7"ec8rxQHeVb/6}ItetGciho5>R8lrT9^~s(Nm|Eد)GƎXx{ ޛk~qI\Xaźs=f=1Ed(I)^}xͦo`ddAXk`h"Y*yпf:'o@?(4uWgהa2\0c $f*͊>g3DDhm]TRgsWIe~vHq4,骭Dd+HS{ʣha?ٖܬq- &2eV;xacBr!ȕ ER2_9wn//bϘ |6alx q5PHW*v {̺{b+t1X;5)E6ⱅf=9T<D9xk {@؇3"1=]ά _j*kflrBԾȚ7*#[gzn Q91fZUG:w9%u1Iz=e>sIo=W 9rWz3%gH*Q3dα -B->璃ˠGqE)6 |:}46%xzgŽe*/\PF^J[ej>w>@"O"!G)r4ntO4`^g[#iF{`^V2 ɏVo &/ SA~$ZMt8^*K _X1j2){cu(ܪ#m(n3AƩjY[KNt$}d4'@\N(QMʼc IyI~4{~(x-Z4G>}rmՑzPСSf@ފ0cW'7%-xhW^1 !Hx9FɈ:܈;f၍nU^"]vWd9qS=NiCV!TT@恬 vN"J{ Ovڽw>iHY3n7a .mE/!ZK_[n/9h?XcwQKwNWL[2= c:H|7U[ Nqk]~/gokiTrA;݋7;1DEqB$(#Cz#U%LZR9!6,bƒlvnxsyg$CmVnsxo8kB+^IO˥-cLgY(VcA~FYݐu:y/@"> N+wϥa-υ)zvn|}d!N'Nue͋z+s%Ar81T8[ARw7h#UlsyE )+p >uAjH%-7"cve HiߡV@j>i,# o8JNMJ:+g=]{Qc|5S4 4icOQ95:5}tk.}  ۾a$ Q~"drI>mM݉r uTִU۷'\~DfYܢ-ZI,#ߢ/O>^jGٗc2sKQmL%U@nN@O &K",a#\=Qչ*n EIvɫ?OPX^e"dm"s4%d/+ ]z%` Y*llN;*_ile<#.&%1-9F5S9ڜ4݀[,Z喟\'md>ap yy7L "<ħi,cJ{6VƤi7F22H@’Qawy&%g4% }VQ,t>a`/9<&$@&aVM14ɽ] 6=',(d jbmZg5+V!Q$㶳%W;-␦"TLߣ,h!eW1$}+I8)ݓftt!`){y˒Ƶ3l2GSDuȥ(vct0,ud33 7[%&ov/;됊xC9:߲Na YULmܔbl-zwt-1,M:Ң3 [!6)\Dls->1\YQl?ֽ!y1u]Ũvg^[Q7C,O(g;UUw#=rBee&>\a)R)x!.fcNR?4WDT4'/(QHaӎD8NjiMQ  1Wi_j!,SpySelGBz⑓g1a8'Ws,IHʈ7۶<[Z+t-#LY ĥ&5~΂6W~yKP2XHq-|}D$+m(jfa 9:E4 M} LǟWpԞ% $[Z2 Z/pVS#nLKQ4 orU 1ۼ.Q|=8v46WwQUn/c6d.bD{bfx]*@qT'WbD _J0!]s*w+n5囼&%{Bzъ6P锫~b5+Gho*;,t2€&I XZ>65Cgj`R'8]h%"JLF]32NȱHFVh:9zF¯lb IYH8@[1 <Ӫ z-#Q6{Wd\@5RpHŮIY%VP҄ -7$"Xՠd%[k[ܑ3ĩD`MighVi|->@FjбAZk@C*QV 9H&e8a 76fCv[Τg Qe^V 6+z9*,I=^]C4-ACrVoĦgc슶-x3Wv=w6r[iY)q4w)oS~<H:F޺~2dz &߹'G:DSWu~WUFB$zYa;2Dih-q(o 78{cuh-]|H"3i1)x:]e,.2Zj`NC_8gM>9!C<0@ҞlucN>dncSO%>~6uln 0 Dj1 .Jse=3vZژdޡXj#Ƚ56 Y%{ӭϭGiz#Ȅ2X'J H *44WGM-v<:a8NCCQ{qr=9)J$>#ShK0v*r2QT(;sQ/<_|>=C|N"}ܿ4l\*>Q̾I `P~(ʃ?f /y/ΉSoZ' u4 Jlf|—BG'륽]c*ϑT r%zJ[ae\Oyiq \78?8Ln\>CXflIeyc.̌yAhc>3DݔXfGME.mi-b<[n\ ֗\U A|L^t \eu#KAޠ8X5Ύ 7lojm B@ CXV~F(*;Ⱦ|lL߿j|Ӥwnɕ ,>lLV=?a}G7'u4%gbF/aW+E՟~!〘_la:g@g y!~eT b)ޭEw)}LN'}J3/)&3WTxN u*iZN4t!118Kl(BpczUPRv!rgHKd%ngEyyyI=m(}}Uex_8V={{"qyCI>b ߌZK2&Y"NKXi hR0-;yeٙ"RFu]LA|m8C7_T1*}$vHT .q*`+,ڐ<}hpŮ%#/Rn@JCZӬ{źfm̅t}b֯ӈј8p4*HӊsME$,Uh:m-hHy l,ZxH'=ӽ5nW{W^hZ&"HtXY;MgHS4*·8y>`~(dzЦbM8=MP; "hH xϵ)kz)Z]f\ڑm'D~BXp=Fx|!c=L;"U Bwxך=nJbj hm ދ6]q?<=o5Rx$Gf/1[uog9dzpw?OA<1m|OPnr.<]y<:'vNtC(mFrwb\JQ=ƹ#^ZBCG~'ǼBxB$FtJ%"0X8ElW%sVANiq>a۝kS% AϭG]gx &H(>Zk8|Γb_Y+8jӔct@je[vz4)P!R˘|RM>ջ(-qEdjTQa\){A PL>M<_t [$š6{qSDklj`T^bZw*/Rb(](6w`[t viX\{5.SZ1ҹ2J$7GR0 &"pk_°WPpr{ J{KkjLdkyC00Q<A9%ootN}ݚJjjGo"'4H֓1_6{ xj榌tSǤސ1_b 0kvR`Lfz0J]4G b.NG<~`7%p\&Ӽ~X"{ި63Yc[VIH~B@'\ЅüIӟEs0f~ V⪓˸8*6Is2$0ؔMv 55Q$ 6| kiWmv} yot"MUrZ8Sn4]7if;bvΣüF|(`Sw\Բ:)N{<>(_ XV>UtM$o5O,CQ`Z3F{;^Kr7A߉vk$m5iӓ_Utҩ+vj wqS-Ѱ{g*~/*y*Csk<2#)4>wp WGםG=bv\G9ǝڒmE#dv`OrF>gnt*Jx#ԁr=Ґ:DIetwivV[ʠN,ag⣜{ƭ\Pm+6 c| EC'YlAOXأ4qlP}_.R uqDNt8[pm ^:Kz[ܛ BAg=9KSgXG2omgGh,>E`[[ӄsĞHya6;j-&hi  Gn3Wty<[.Hj+.12&<sl5){m)%Z{ U`DW!c}9p?%j*݆pe?;9([[(YǎP,`&-##m_+UO)gXl;L8OxU`:9.?iD2ɊO턛wKq{@p)BEvs7п:뇤2&E' VHk  `q춯. ょ ^|LԟG7!ZW* {zJ^FZzy,ϏY3}үqn)tKA nü kx<*ʻT/b%UbCsdȳ~A@"mij-XqIj໿LnHጴ93> Uo-^\( WF2I5.隖kNTZS9n97laء4#*m p='fz qeFȵ@(GVw!IE(<{< I`RРd7(/ԘLSĶ"AΫV[TܜE"-4Xp-Z,LϣCm2eRuC|i7_4p2}~(_4L=9P3SWIՀ\sv]̸ 3DgRi瀇E Br1\.Cy V{##SYd5TZK"HjG [Y/U0L6JdIsN8-M5AEJ}v{L5;TQL-. ,ߔ5^y؆n Cta9$WS/H7kz/pN01o̶Mt(GiUeN +^d³_Q5-K̓;@cr6sk3xB BWăF~[1K)>EQ&&'?oMbSjM…bRYWg*xN5P as ́?XA5/A=JBrvns0I*Z5/c瀘Fz \E2/d;~uiY)LRr,mӷoۑQDӃfF8r$#~Sy UwLׯu}*; ifasq/FcB5(c[i`RwY.VLĉq2sliw JMw:tAR`N xED ,G)F)j(듣f}"U=G}0df?EYXd@s>90t卻rM#]lypͮ? zheQw246N1AXD+ f07eMK)5tϱY4:f]^zPlVsT`ҡdP>|}#vs ǎչEHWH K1зH,_<r#bSV"_ ہ8Gǧe=̾i/ِ@o_~3Qƕu.^#:b0n>ٵ