#!/usr/bin/env bash # # Copyright (C) 2011-2019 Intel Corporation. All rights reserved. # # Redistribution and use in source and binary forms, with or without # modification, are permitted provided that the following conditions # are met: # # * Redistributions of source code must retain the above copyright # notice, this list of conditions and the following disclaimer. # * Redistributions in binary form must reproduce the above copyright # notice, this list of conditions and the following disclaimer in # the documentation and/or other materials provided with the # distribution. # * Neither the name of Intel Corporation nor the names of its # contributors may be used to endorse or promote products derived # from this software without specific prior written permission. # # THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS # "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT # LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR # A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT # OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, # SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT # LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, # DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY # THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT # (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. # # set -e PKG_NAME="Intel SGX Driver" if test $(id -u) -ne 0; then echo "Root privilege is required to install $PKG_NAME." exit 4 fi # Check if dkms is installed. dkms --version &> /dev/null || { echo "Package dkms is required. Try to install dkms first." exit 4 } # Check if the kernel module is in use. /sbin/modinfo intel_sgx &> /dev/null && { /sbin/modprobe -r intel_sgx || { echo "$PKG_NAME can't be reinstalled because the kernel module is in use." exit 4 } } DRIVER_INSTALL_PATH=/opt/intel/sgxdriver [[ -x $DRIVER_INSTALL_PATH/uninstall.sh ]] && $DRIVER_INSTALL_PATH/uninstall.sh &> /dev/null PATH=/usr/bin:/bin umask 022 DRIVERPKG=`mktemp -t sgx-driver-pkg.XXXXXX` DRIVER_TEMP_FOLDER=`mktemp -d sgx-driver-XXXXXX -p /tmp` trap "rm -fr $DRIVERPKG $DRIVER_TEMP_FOLDER 2>/dev/null; /bin/sed -i '/^intel_sgx$/d' /etc/modules; exit 3" HUP INT QUIT TERM EXIT # The number of lines in this script (plus 1). Using this number to # calculate the start address of the payload. NR_SCRIPT_LINES=118 # Run /usr/bin/md5sum on the binary payload to get the MD5 check sum. CHKSUM=20d57ec08fb0d1118b5c88c2532ba2cc # Get the install payload from this shell script. echo -n "Unpacking $PKG_NAME ..." tail -n +$NR_SCRIPT_LINES "$0" > $DRIVERPKG echo " done." echo -n "Verifying the integrity of the install package ..." if test $(md5sum $DRIVERPKG | awk '{print $1}') != $CHKSUM; then echo " The install package appears to be corrupted." exit 1 fi echo " done." echo "Installing $PKG_NAME ..." tar zxf $DRIVERPKG -C $DRIVER_TEMP_FOLDER >/dev/null 2>&1 retcode=$? # Save the return code # Clean-up the temporary tarball. rm -f $DRIVERPKG 2>/dev/null if test $retcode -ne 0; then echo " failed." exit 2 fi pushd $DRIVER_TEMP_FOLDER if [ ! -f package/dkms.conf ]; then echo "File dkms.conf does not exist." exit 1 fi source scripts/installConfig make install popd ${SGX_PACKAGES_PATH}/${DRIVER_PKG_NAME}/scripts/install.sh rm -fr ${DRIVER_TEMP_FOLDER} trap - EXIT exit 0 :_]xN ^ߓcx|u_v_~ú$QٳMR7fpO>Ϛ0<]Z6w{;f)_Aob7 i#Є<=~q" sCm΂%68,Ѝ2I};M:e\ƜmxҔlG?;78YAx˼( i M^,X0@+u=vI( < a+hy2Q0r5$[ &X횇)AOn]%Ia)XF#]slnjD lQ lѐЇV643!,FcX-ēD2lFC4+$b_+cp:{cW6Gi1m2։ms{jZOcD] _Lݲdll:ojЭ3&|dL.; PcڰОvh݁lzusxڹ1674aOp x46Lǚfss6t̍ k8֌k}tL'6+&2Pd@v>q2budF_C 8k 2с#|ӑX-?l]k`IɀzsSFAܲ {nr:-ݼ1=O-ґfk49 >[IϘغig1Aٯ@:@G$&ѧD =tث+M,ILCQX ]AU+cR u"WAmM ΉqTP(qʌ n $^!X4J Bj ;e&M|j5eplZӹ9ԝ Z?n\{˛4f5˱ͦ1L~sk[6H(ڤv#>.8\R|mU&~jTv]hJΚ LSBT` ;YңO"!S7(?|b_O5;@$*{C?xߺ6_A/Mֿ zcWg_'ûϟ`dkK<PZq0cl|?R:dÕ x2+6ǃ! T=1~lxrx vuDk7`r&የ@D+F-N7tȹ5 ̳5wm,j4j.5%[zXFV_dE.D( ٨u?v{濾o* dkr1:8v;CS {ͯZjXqv;,I㭗 {x1wSދR>+jVjѺO&1Cjg~tn;-D0śqSQIdWXdF)%ZRpcϷ{FJbydX-adQ Drqp}O)㫎xᆜ*EOr XnJ+ަwg ? Yk i~Y&/^"{AjlL.9NO^ DX ̵xHAOQ\e߂y*W)Nd7")S9Vc nm·Mfa S|V ^OySȝ6v~|vmdebv""X?Ifc0 Tp{?z3-4dy9ߢ=k4ӧ{.;p>Xj!GWҢ`뢕%[?lv- a6daeYY7fQ@r wq:ɬ06n"pi6&@ 4񝂹=yuhVz缍.` _Ln~<^_9: Fd/2O>i@?ҀA>Bqn~<_W_m_+ztQQ&^B3(}أ"!cVD,+M`䰕s1U\ӷ\*Agscq. ӲͤS5?wƺvV!\!hqzHa"ƋF'S;H?#L$b~Dۄ~!+wEdb\oV*FW:v~x]AeT܆|rYC׀9-dp&L~V-s{cbK |Qв_P#:cc>e)&jdp0pȐ@øHؽb.(N Ź0v2@xŚ q>:>;og +V1C0Xr1#XO8Ԃ LwPKt LGr,t68=:H9Є닋a 5^p oeilB%kÂ5V=]g3F;\6.-\ Vz-.kDUʝ GNɪ Itw\C@*xo7)<rCMD0/xFdEi.} /Has,3u ˦Hg>N@6rf u6=g0\UMq ¢'Bl?_X6;] -`ɟV/o%[xi[-}t~ij#-Xhfj]'99>Xif4tق`O#,)|ܱANe_e Sl31cɆ!<RuQ~$E!,v[qlv-`EmaQ b0D8H[ | &  O]5[lKq$""SD'5wW_҃+m*Vh }[ pW?Yy|5c)StwI.ـ3C-*(ow L]AJj띰Š(eʷT+Nÿ`5K%=hAMCKyv@3d@Z$)lеӧ`7x%E4F`ŨlZ"‹$d@OƮ{P`zycƖ\d{ڍ ! T!ҨU_[yMHIDX ,V:.5<}F#d`i+sPL +5hSa7FdI(uC ϿMw0<h'LU&\BI.O܋ KK-~YyO8X BB<~֊GΈ|8 \bXIѓReniJ4K$ + /DƩXuа(_!ʫBbeWB,ɯ]0O],lۃ go,mxBYUQj )J~+ (֠,v:G[Zɍ`и`prtJsE֪0C%Bvr}P7h{1k z8Xe7woeGj]DhCbb VE/[*|ϝB5 EȅJ|R b C;^tκUP2}f(|H2zQ3|*DQ)(A5v ?JH_B`gk?*p\84ׂhu ZR@u@s_lL7 ]uvTyuvWvp9#2U=2XC-0hQ=唲V?!6]sYCqG}CŸR>_7s].]R*(z'8vmvܭҜ蓆TeiA1C\8u;k\kCs;O~C,e/{$!n6lS:Ӛᐽ#}IA]mYogCBpZ$;SN[7@"m٢`%Vl pd5H9]I ITYF{+EJ H ]s8qQbEl1im4P{u0;vJXcE#yG>ۀpH=ЩHl9:m愽P tĥP^ۏIնz4 ٧4Hc=|ze .߫lH./g_JN9ױŋdooA0ӨRk$<<\o YYFZ" N]a0q^a8^EA"jt@9Mh)y-<!yT?Z B߫ՎdZ6 A8$>t[_ۘ^ųҀST6 2ezA\2#rgOz_ SHn*5t8z*G\ FUG%1EIO!oNxIasTm^wBFz*ˇ?%)TG]'J .an[IpD#8+to +߈%'7&Z5)Yvj~xPib! U[Ëh?A%~T(4j=mշkZ!?l20NS B~G$}Md.7BU 6ſVWBp ZQc)/lg&Y%7t耤0b]*X,GϵAmNEɡȃpʵ>6叇nsT IQCDW^>Ɩv So6wY CHW釡-(-Ш?xFfE")1C?͖VQ.} fӇݾջ7˱@4<,mUBzQ؞x$>R%Ȝ.\l 7/B0o6CCN^&0ra (lcH}._ph(+ _7ūZ8Z\g/7ZPl=\[|K Gd DI^Xv:Aσ6* 2gD zN+8)oPz6 }QR͠}b"=Lg[c6K@s^H|1 G7Fu$L6{q^MRhoaljU;J/]_FtSÌG :=0A৻裹Rީ&T10ElmXצe;=دAc;mhfXp@gCG19vQNfWiK \U^E3&I8dڎQH[R<|7`ХD䐅[ Ã[p-zm߅@aiE?SeCč2y]pfߧ Gex5B2\,묕P\SP"X7t`Qi(pb.a>+i:(G`͔Sdr tŘ=a?TdK.5lAu8J<3 shs|wj sKON#ӵcߚgx|i uZ.?kCF\BR˃uxt2hQ!E=Cl!߲4)qvkPm7)I$wj;v,:}|[}Bف&9dxk{Zw2^wȭb237h®tnkRs$۝fTҌJʞ% p0$O!v^GU RѵPR$m蕅=I<Tn# :XHS]F>;IiqHzWpՎNJ[/FXmZ^u9/HZ ^~HW@kͽ ';xO4jQ! Q)E1XfZF ~=stR_#u@L¤Dd)H0ypxSpT鄖 w &g٨VYI lM$o9ϰߑ*.u( `"tƓBȢ *}RF}{ƣb%c ˤvp4qvW'aOtyH'wy@yŻuҜ3[M\_y|ϷDR;~ia*[i?B4-2 nU6z~xr]DuXj_Llīy{waD] W@ahy/ǂ9 y0z*2?R 99PQ"!KA);OtAPH$2tQ; 2PN!c Ó?6P Tܚnl(Y K;PB!C$_ Ɓț7Q:$=hޛj.Ҭq_rAcDE9\fn3bz a͟Kb'7KBm._៎;a!J&=0j`E&"C@8HL8<tN3aR#j8>Ӱq J;nTtB8(|5d19]0M|jA¹…;K )gXdk2.'350;+e?HཇE[ˁ qZw4VGIAە:VX\SZ)8h'7hDQť޼!O "zc(@wunR U@rӅEv u7J| 2٠_Ԅ2v*pcp竽bE"CJD%j[=bFpc HaDx;;%fO1#vaāI6 &] c zL8+|{QC*쭱+#rGY/v=$ai8.%)I`h]z]p32ɒ { ##/ZFwBrWXnCB f{d\S~` wvjw/[e ixb w[HˬLJ+pOzcc 7NhgUBѨժMϢ Ơ6}x#\^aZO@wJI_gLLY["s]~#Mncj4h 3u\P^ւId@'mr:Ȁjv븹1-@,sEHKBbhнz7#4 G!Y3p6f8Qfu:DC&ZTۋZShȣ" =?KqµۜgYM_ WUoNW砾ؘg8Zf[lԴ_0F: ߲Or"KЗ(y {dFapr63`G3C[쓛 N#"xɈ)9&ospҒtNYrH҈.%kſ_%4V_);/tIPE,0HhUw\kIpjIرyڡˊ.&O&%jBrv,hok~H(%SҦ\B6; n1mxVcErACSvV8~yk)-N2 O lSx}RR(B[fT(|ka_%"jE_kdgE.qe4rƸfkHZlo}S/(j~{tS 8Q_^@_ӻ7YVYw,1.p?5D8>*(UPo FM[Y-//T"QB=*e ᤋaF=_ki5.Oc~_MV*I\pmQ=x[)9|rܵ3gW]o2ORkb66'GauJCcZH˽p2Sѥ(@,%{m SDFM@mTm eNh `A8?ME9l%a%͕Qh;q'3d ә䐦+0L#Y)c>bB? v*q%aNR'&a{ᔑ)"'z$l!s]܍@bnF_vњ @L. z0~48o6%aScKS^ĉ`ef't8MqJahATqμ*)~JuahJz $u)U m9'XmKF`eHY%ܫ I|4wL! 5+=*S0h -)u&7[~#rv:_UW9>*;*Nf-J䪔#4f 48a:>̦b)hmCoi򙻇$0V'FXʐ~D)dd}'.ܛ3= p0CCWHƻv1`h::N&O*6߼ ] pr Cx]%Lz)ɘELHO>0ϓ1W1=ՓSyIZ#oئ@1X!d=0so<.+!̀QWHgHՓx)3NIEzd<Ɲn8q\ h~Lqcy{+X;OFX(4H1:Tgd瓌v.QΒLJNy8І2TWrvC.mkE8AGɷba^Lm,]^ބ@; B_ Tѽ-(H"&S#pє*UIAʬ!; JZ m2F(q3{\kU tT QXȹ]/wvG0x+d vPpS՛CfB]WM^-NjE(f}UADTfkԼT#ϣa_,W:`a#?: H" [cmݦ%]6~}26}HċzaE&%65ﴡ_*j)nݸro ZL{ h5S? JvHD=RcZG\bif.׿;cR_Wןf;8tOoPnPg&p  ax5b)`Q Y3"I0 (n$mĶx >>d<UJ=!#l+ rNIuޠc="$l2b*` ?(dEz@#W5%q9Z (FZڴ; 7u%T*RXDatC $'Ҁ8NR"d#&&N^kVG>*1n#Wq4x]$$Ŭ3 E&5dPBM&V:`3zA [q>t1. ':xZNtcTcC'8qGEz8|.@`b$Jg2Q[s(ԑG I :iyt(EQ?_i=&HRYp2O$!G$0/p] R[n3T?"<&|3j4>r0j@ݔ}+ŊjZ52avmQsr@pQTCٴ6Sj]UL^fhWc *K /ňBT"^4WdT]mnqVؒ  eEHapVR 4 \oc>NF% ,nPE^P::RP:(x,QBk{;|{JWs`4U?0,ׯ<';Mߵ*M>42?\&s5yHzNBi7&M0Ar(^AwXW/L#bJ}ƦBIXZBiy*J:&ISxX,^ @[OEf rZb* O7~6Rkč18 ~׿e,\O|P7?,I!Pa%!X;ѝQ_^N"Wm0e '%~oyr] #xpkK xŜsGVyGu gzm>&[k#SIJ_+k/SVמ?KaF?Էd%z܏bw+PǕ3߻s*ž2o|'^܉eZ5dUn&ôbӏb*Mzu} E{㭟k6]f$RߩjQmc*8' FţZ;ë92Ǿ|cq}o:~٬TdjAF/.wX $}ᰕC26!FNMRNїKGI! u՗1gETfSl_Z)^ 9sDnr1o*=^inNy}{m/|r{4|F(QP&rq+DXK?ZQvYÔ+,K=`M-l֌pY(\,NGmH 巛 .>eg9[d e`(7z:R6e:VU1^k橿]}ϲ?ڪvW[3%XJTx1> Om~sd4gJ ;oI|`9]P 11eӋQAḜ\•Qh_ݮD Z~p29+Rhֶ |K@aрBglX;Nx2*Qu+K.?e#A:!/a֬5~%Ny8yqxicMe Hn+EAvML .xtɸ&1'uc`Ǚ ٷcOwU&HQhA΢/\ʹR>Y(_ sM giGЊN.ڟA2ߏ ia"&tQd,f<ڎX?MwDȧ+.a]Ff0yw8-4ںߠ!mdD(Lm5;qU_SsR9qtnRr%.SPQ܇Q&L_hi%o76ºHNo>E<ū*oc a{R =Up֫KM.Y<  .e ^/LJ%! ˺d D0מ2h1;uІ9NG"|Cq{}Dq4qw!pCK .OOc%O IS m?ßM̷ ais0X}, K rMΑ2Q(Z¶<ݡǞJ[/iu֕ U/1L1'/)#gBJ-)yp \!/)RH,nRYñ! LK0ɴq,(7rYHg_m *Xg`H*(aR|"|olrلaG,H|O0EʿD=NͰ}t,c:HngcycnhנગLcVkכFRTs[gU`18X=o!F_<̔?A"bZivtOL[HqRBl&*fn qH֘)1i(zQ>AXђ}A_k$Yvor@}pv|?=(@\څKCNd;Yma/QGfFaM'b0rhJ w*y]BMubk|OnШVnΆvaqVWWVV+ġ}G31J^nTRsr l5 ̟F;ُS}´ 3]b1CƋj_<?94&'\J&4צ ɾ ,{{OCoX|݂?/t }ĝhwW)1P7 F)$Y{y ~>&iБ HV#CjcCˮw)URvy_ݖCI a9iه0`zJ.¾ߐBPvGv|퀥ړ1t8Di,@d'9HC,))Gccv|JH.]"񯭔׾L`5 fI2ft?obz7 Ti X34fd^ G LNftf]*D{ڦ\*V]$)ؼ%Mĝ-}?1Ia;$ێ^q¬a&=?^Kɼ҈p> A 'ְ9PMi 8*lRI&*U}JC1kzJR"VNCAAUS#B@JSl) ec,h=Ǔ1$ Hb>]#6(??!IT~B"@Bp-13b`,HvqClH",''bthc\,F[N;S>~%>N,=Iܹ*[Q 2];YDqiv٬;%hkv)ZXӈ,8 Mc|e BxQtϵtA)g 6^`&/ &i=ks)GVD=}2:9vvE.o4Pmhʼ`Ѵ\bfV5|/u$DC<$򭇖>s'.q pV+nhT~W4gW\0U "J·j |ɶF.(;p㒠,F^AH!?`8~L9FQ& |,<b"e8?Z5ZJxͽZH@T?4_q5H<~ IIGRt+6(#KQ Gbp2cBrZZp4nԀxk67S7r#m0EI[}]`#BѸ?^^"SBpIsO|6R]n!ݣ)%tQBvN\4AG/1*@hH) IK]p\Jh4B+/f{<"YP* 1VĪԋy]Hg~Op9ňXQ%Qʬa9YUIĞp>GcRD2G۶oDgHsvsI="JΑ?Ђ9.,U?P 7 8 2ԢV^t"|!YrȲ!Ȳw/a4MWκ0=j'q_cvhSDz'RF1'[N&K|6z\t&?N;)PglSv>ii/xX2<^-2vuu#T+CK\9*`{+VfT&rJtx]B+ 0]06`I8b]$Z7ݯokf$CW+gC6E)6E ؀:yQr+MϲJ8+TL7]c*7!V\$p͇"äs+eO~bihX'-!H~w63:S37fJx{A#N6 a4^[{iE{{qk1E9]gF" @/`{@6-o¤~+.vv-qRvm~ƭ[6I]',<8$1 ު$n&fž}UW ;#ﳗVW_?&/2p/ yt~ K34+òɠv⼎FpjO<7}xji\ըaڎn2\$Ź:N3I>> h[@_4?m$JЪz1 {+F0>}v\[K_?^">Exl)/CQ8+,)-Ѷx/_V#[לuX*4U^u7΍,m9ф!"gSIvΩޔѨ;*i`)ɀ}LZ7. Ix)cSyJ@ Kj;v>s jU@'W3 DIi 9pfD.8>M\ Akz'7VN/lj,/3mx^"@Z&ϫt3IxzN?h4)j@&;K*Q6X\o,]b&sabFE(3(fRQ.>H(b VР$i`ꘐ2>6 &k`37`g^J0HxàG\P!=P^Ic2{zdueI ." X 0B}#"Q\ȧ"[ О F8c"Tz&;#n+E+D>g?.Ϧ$m`X="l@RȺ[h'5y Yz9pT0d!rS![z̖3R>uF9Qc%#3(8NhQZ/;7J8Ξd߾cׯe F, 6Ŵ Jn%b%fEr cR'xd7䕾@E.fdZtFebG@ /_z,sWGeU֔9uф BeDYpr( Dwaǎ覼:JPfEزM>J!8Q[1&410EaБwU{m.s̍ 7k$-{e$q2$.Kë5pV7\a>%q$c8r  {\9nWVZMjNHĮ_ͥ?i:8J":򞄸bj[Di>&-\pe ZB'0^Ek+鍌1\AOT+HەbjwRmc@$esQtT3ݝeDs.b&C)p"LQ^Κշ̼`ٓNCZ(%V!ya^P}%Mמ789G, NI.t$ J:Ӆ``LяHp+TLF1l`X4ךCb% %fbP Ē~q+W! ؀Iy8^שrR -hi#|:SKxFq\C0Vբ\HOdLXe7xQo2*,o״e #D@BbF[9yK\DP;.uɳZfN2J"iHCt<ϔt3 #aGě7]}5N z"QͣI|V[?2!1:AcƉ,YRXqT3KA54 *${<}2ӦcIQBNVŰc1V;o=τˈF[1oc@(Ӏ7b^: 21iRR~A(xp N{u߰OHqSյ/T1n 0PY)`TkêQw*( $ǵP`ǦXok`;+`Er"Bl[R!LMtbNO/fD<Lc竍FWrW,$،r֎G:h"h;%h?z/F)yժ:"wH#^ C$vIՆ) 6]eemYɈ#Ky<2YoZ 3{ _j eJYR "͂q׻.?4*Sdm/R4%Ll<Cf yl0PlU ٧XG:@;:B#PzIS*RQ$R<%c>24pdd>OX;_6 %4rYa:n /eؼެ(>EBi]ˆ4ʧ6%mkYK'+ $M`;AJX)i$TxU6rajbDta*@HӲzga3 Z}^|/)rH§K%ܝdsy?0*%O؈ѐ=MD=1T s38nUEQN*+`R_|Y!w_cU됀3/->|SR*H[br nE+-)&!hnY(-sJ$ eAl:{A&ƯM:8y8iV0+O6t i*che$nx& bf)zxKz*$a;#|Xn]4:x*8d%9PEf[[z+qՃ֯dςv'h+LMu`|;Rݪ[Nzl] p 5ZjC75fEMu H=v9DӃi&b(\?PF W9R7pWnշ/V^$.D ebEԢp(0$'G &c&g!f!#X#W %F~#H׉O?>b2^"h z3]뢆LW !j؞`_m ~@qtiHH&Y~?]#,b0"z$i_P)n73bjF#25We.I(2qջzS4w[ajSڎ^ѯ `"ZN|#Ӯ6Lڄyzᨁ0M}hIV5K~wS?x[І88la#{z JKu8M!6lؐ N)}`+0WPZY|W۳?5ptV FJ lwpZmXD^)G:juRIX6ky ة#& W6iQDZÒ4zUowhez;l7k4jJC+pPD:-aUk4X= whp ;Ư4FIW \^Z*.GVoe.a1ib|A^88Ćכ"l^:niiDŽ%]Q՝_8~YYC˷N:U=f̬WXLɰ')=\^ox eMc$m ۇUakYÿ% z]z+gTj[7]'JV;f]qT_xI;C~N;n.|@_2lWW~ azNEޮlYV A3*ՠrPNˉ^TC_ I7|_N'PȦb"~RsԷ]=;o+o:%zo)s/|>f>oy|up~8?D6j{*b.7<2c5VS̱78J(Fg`r{"Eaqdur * M1iL%`$zP͛|1 ,N]01׆a<tM//pQM :v7՟)o}*ݽۦsW̗,Uy!P2q@a_/S˿T?K規|&*mQG*@$*Kv+|+e6[|%eS̗wXyh)u|mh3OJ[}\#B3dg7UFC~l>IviSrS[#ǕOt>ܚ~w]Eʨ6LDfT[f |),!ٴ)?Ah얉RGT/njZwˇ|4#' 98s-KAH Ui(+ErXDR{h0s:\G{")neQXܦ(O>_nsѩ gjҕ{҃ǡlT,977<8_8F@ b(RH5w˹;8}\is֖ܽUN=y.')Lswԓ乻(ɳ4;i=Nxnqb9 bN#j@$;~rǤԠ&ޖڌJ .$ӷUCjO$ jCz8 5<D7qە\.cѯ6f(VwB}* މ!GY`g@/sAiؾȕ1V1c>Rፀ\A<kluǀi&-Y~jի~xU3ZuN?a ό=~XB"Tff|wr:pPR%C,W-.0"ޓn ζԅ; JWb+ ʰ|qOϠ 1'^UtuY;hC-mi21&2n| ?B6D]v0ܥ"-`ʢ}<0,JfX, @ ."ONɧRHv ;Be)/O$_73WCdԡ6cT+U8nqЯpkngQ`Ə((6~ [js`"`a㶒 r /o^P#Pt 4@)yªtB3-݁!0e3uG[uFhG F78D^69*oY@H&fV'LBDqф]1A3;}DQ<9(,t"2誢Fԓ@R'䕉 JCSL@EIt+ t Dͷ--aBѥ6&?jkj|O}xJQ][I"tFA5e`tbP%CX.luDX p8 #i+֘hh8+NX4]U: Ɠ%L쵚b'.Ñx~\>0Ir*+UA+7WN3 YWxa Q؍IʢDjm΁B@[ `H6t_Dj +e(B!vAҒnZk8xu@)y/8a?UOgdXЬI(h%ĂX0(H@JAd&%t1%а7Q ƅ=qs=A 㵶DgtqV{.eYe ,]Ơ,dլޢIg⸌DbH^$p0;?7Q6c7 FØ< :З,W݋2,l eNk49YFA%YXFAk4. 'gt01rL^Zb[1&Kl_;h/@*9HqخdC‹Iy0V8{KGT 2J@!:)@tYD}RKJ"l2.w5}EtG")IvƷyĚqا0Hp˵#>#F.*u $W=+!&\m;+r ]BC5ߕH lY #q*gW5Tų!9kq((wœ}yb -ߋtoXXvpBJ%H f0Il\uehAm΃Xh)&j,_PJ'ިuTD\%1D DY%WD z>\@OeN)gQTg."% v]H*tjX@Y˅o Ӕ=mM%ଇ /s[ARSvLP|ܪp'mhurkV-c_ܸ@I p2%qq+5aLC%%B7MŁI;̬JFL\4$ 6F0+MRN\Oq*]#*A 4 )cKc֍4PtQb Ԁ,IApbY|G~1%~Sm"L7h(ą]\ O{5!+#&K4jk"Ȥ7 ^3j Q~TIfdv7>{Qo@T&7VHӭ"Xmy[lIO Mb[}Zy|< > x5>Kl\B;E߷<~D (Kf.]10H/DT/y8va}xep=]r+=vx@ŹDQ. P_&/|[>B-薏Pp_&%\.r r9塗wN7#n%_Iݟq[EiJ.Өy;͖wTmۄo?xInS;-ߪzvu1Ts9w*l4yE6rgSO $Z'{;{ʇO)*]Rhw-ǿ(namơ?yTV"B2{s"diMy*D,ӎq(WCqaleC`p$1DoLzxRŻ#>GkŊ.z(/$-<^ m&}r齝DLFoV.KoQ߲斬AM6O(=&>|6UPvҨg\pt]#q*MѤQfL=d=x8dk~_{~_:B4BIQf@Cת6n`QLy3U@V`*gRh?<(>y<|>y<|>|oC0