#!/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=aff8eb6f53d66941a90c5370e839f7b2 # 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 rAb޽y~z_:8!QWFO7`dѦ.-@f0OA3}<^NѰ xvar<↉g#-HYXIaz0Xʆ8ׇ=Ga-86- Nix\Yt8c!نH Olz㧠)c'VI`3}3ol鸧[g$Wsky썍ˉf;OZ_7' p`{`i]HAL)oe ?7_tN}MfC>˲uJCjֆ1Ίu"VtoYkh9|ǵ_U&Uݏ#R:/tCxpKGļcģ#_:d~NϷk5A QPsxP25+/K;]Z}/H6ܷ:0pk_"o6tKAQ; <~j>߾mO Rז0~Bրdcho0Mf֝m@ kZa6٨޳t08n6Bυ9Qtl6NƠoNϭP3?[W]&Vo4fAڠ:q'ENN؏-7c+ ಖ$bo#G/ $۹;shqpH\RʀdYþ- .}LNPsimq5`XfΨ+^)屰]b?Lbafp$yczϤADk8 fL/:RF T'J1b@h h6i1vua GCW+!Im5eU<HYaH#>VRc5dHj3^AMͮ-\C.;[ԗd4wEPg- w$V-[v^ Kb+VsԘ6B6H}[AƮ-@sa(=*POR эnֺIږ݉΄|~pf̒X06F1Z7^]ɤp[<0T}ŏs>sgMj?oe-w ͩ1)6~4cLp̞%pƹc]8~ 6jʣ9j9hoU5+pg4J:^B[Hf[\g!쵷d;joqe$[ \H< #Rb+] !+N=jt&aUhzh~@Mq(WKc'wQo얃\]ط4Ʉp/ o92 iGaG:]т2yPr8  £4>"Ȯn oeAH#Q fԃH$E[Uw `,:!mKc]fɼUv֝&'xfd.8y›*!{Rli%"rviF]GWbGJ\uLJ(!…U9YR%"GWF$A8 e.@(X6rqS\Eap)[ S6sؑEZr{ǥq%E>Xإ]k%" g F֘* ؾbK >IDo}Y﵄e(LNcQ{1fOp ٤wTn*AU1-e\0Hڂ/8 YFI6 ,Z‚G@@E}#iՄj;ʗD)EE: 7.M_i@(;3`f(T'|U&X?glCI]ZU]xrz~ ,ryL\FplA,J΄yQ;^bX:-`[2 6"gY=#lm d{Ӳ2Cp@7؞1!fa`U 3j6B@jAٖ|ݹ[y,_=E#;BKd lIs\ )eI&5b5ҴnY\#fk9 fV[hC_#r[k I9*mYIloS\Yv.=GS(Kz:s亥A +О!XRYXz_(B`GR(0sPzhsAE`Lq&h20)%qh#46' Ëpw1gr7+NAč4H<_HIL IwwTTȓ:AX,7MtPF~ϳsPV`(\BEab39Y?Kg,AR鱱Ͷ$[PP#ԧ$&5R%ic5XI^y6[^`bRgg*J3gjry'ZW)ezޮIV?",__~c־&[%-=BgJ7uvPP5koG-Qтev-Lm)󽈷>1vsc.F7pil`]YX P9cN $S*ڔ*u`6rkn9*g 7]s: UGU\8 BXѭCxEZNME.,!*tB\tovsGcļ ̹p Rh< 6, $ϫY{/-)USK7OV֐̙y1Hf쵒P^eRS8TRpatq6pA0Z26D^%{fڔ W4h>^1 S_C,-bq&,o-d}iRD%,x9v trG2tf}RT8;Dp*@eI2qAý8DʎE~ \YHno5ýJ㧊B$%??u_a)*w.\al9^Kj{'x>E3/W_ش.y/P] I.`QrB YI5$E '|ރ kaz0o,Տ)|1k5lW8X" }Q/$QJi#VhX7'ļ6ENFJRE~xhl*t7tAZI !9+V,MﬗD7\s+^ZRg_dp}14&//S.Mx0-X|]Ku58R3A*-,r2uT'G }"i#*W ^b^[!&"H P,c氟+ŶGGt R>d|z6I3^'|D|D+'*1n}!;QGlB ɲtKhNS:$GL’ĦG-cqvٲV1NYnq>&q82C`uxz5r$rk^aoKl2žt055Z.\`6o"BY 99|nj_dJ^%Ԩ*"c6H2֛ IO)K{sU#*&-;ˈ R7mvB#\-mRʛWtw\ Хf:a^T_]8u-f@ynY_ U|~C,[老[m U6;pX0ў }TQoʷZ aLqۘ-!ag,*bA!BT(#px-(чCнlVrs=}f rEE'c`ytR9 5Y#ȒpyB9}G.ح"˲7KMUG%/X\}-aLYw-]ؚ~O_RÒQJ- Ѩwލz*,IV'= !2?DF*P?O2営ND֪} F@:pWLS0PY:u^ DktD^Um$w/Qy#$0\7lgu56'a~>0$:S'XI=''/YeX墖{&!j3xq9y8f%EGET/zxJѾDχ}k >aw@4z>CKs}bk?@Bc*F_ q罋!*swJw.y ?dž,/I1 Vh.A;p2 A:.1Eܾ7/]n׈kve/v"~L1h_A8" IvŶt(N$~sho /d4"v+g(&W}Ar;w^]qT,Rj, t~o;ǡvә/ ˤ,/WC@nА =;Q.6v37޸5MIbf&)щ ']Y:)M$dGݐ9ϒ0ǟ>$V`(kn'`ߩQN ҥ;bL o_8Cg?g1D#,>`+ABX^P3V(#sg'I\:8éwIG -]x/D6?=w5̅VX?6+zG̈yȗ3 [6ɝL%.:sh >M;Ɠ(qi#rHc}1Ir^-5.Ѧ Ό BK1؍.auC;*_*(v=Ćv<ݯA1| !eZoD650\t9978b?lKö/osֹ:.^p15 x>qĬw v<\*Fl= !lSG@x*Cv%f`H)NFvӆc;s+ʒ4HK6d…7{-fM@  *YW$tC+T\oFgKFu|Dzt'0^"*Ch/e6,炂b{64G^-w9#&By9̷הV}qUǍ=@?Vс]|&h,}Ya:vgoĴ/*ekCXQu8eFS-\``>*lLR k:= &4c}.n`cH_L=d`9|`;!CK4iB~ҡGW-ݚ/+ͣ%Xma៺.<_sO2%\t`fhW`ϴc>i$&L|m$5.Se RopZï}"ӧ>E%6Tԁw^cq{d2+ToݙLk@&_lDYdſ ̍p"#3$XNV>s'f?>^zeąbPC;$`b۽#p#ذT|U@c_=~ph]u4mƏ EϿY6 m\wZb*ZcC[?6#. 0eHZ}ȬRnx sWuhr /Z_vǁkrP"G膃_h)}y~dlwΉ?}XWsLi\h`{ ڒcja`4ΈdJ @&i3Q퐬c֨Q=3]ȒfxD\ar}*F9 DS5ۦXƐ?1u:K1q Pp0.9R K 9A &-I7Nr𭀣 4֖c(ԭ%q<Q^aø Ta|ÛlH% ֭0F[Ek p]1O Y m$eW:%r%=~TP$ExBQiŸ$J4g?\ /{qyGQTuF\gKr v3ZQCH|}0(8]sc(&G{7;YTyt8" V ϶7tmC,MeJ28nh}8*L)urG d.t;Y.X4駝Xu\m0g?{xml«/R V8i'dclfp3]lWӈ .2qf2o)l܉@젹]_ pCE: x؄`>QL 'Bb<Ŝf-cW5]eH-+WNz20Wl&:lll[2+}vp,D@҉^e&Yo&aI[ c&BShnJJS4CRp@(2Ww09tBhmffRs7|:罥]ϼ>1x)pq*_$I6;aDn#mƷ|… ( IWڀVڳv,z+9xs8= Ga_I:gb _0|x-:ql!c d<~ѻ.;h] /]|5/h8XF MW!ɠm~Qژ"4ցoP`(&c`̬ ngPf+[R,ia pĴMjg7rc@zM?N,ՁQ!!_2S (w6LʧhQ !8E8}aJK 9x1o nXH`Cu8(%fۏع}a3[[^谏at {73 qi][a2é5tx\^C#}t{Ftn2aXLE %y~Rv'mi r;H  6%Q:-⫡# ` |r D''ɍMJGâCFƘOt{eew ]3J"efHOx_&p}]Nib|h1>=85>WG­c{rzMƂqX1G+|hɘB3 cfúj7*,TU࿜zfyym> A>DH_ܳqO@9cwt>RA+Txl#5D+KҷFl? aXb_Pw0ظCc E)XF%jSR$] MMf+8X) 2T2狛]+H!HiM ej˅f5) lb!%ME"o)@I^N.Kzj{~_츰.ZY [2E]Qc3ƃ %;Шd/x(Ɨp R1swO`y|_MMA#[!:-8F;6K{t @fݰ?©i.AC%.^E nUUf @vob1 eG݃E%6,~(@If8]8q &m ^}+!$khh( FQI:0P9%ފܔhuTdhz 7R!D獐떸ʌ-\.SM1ڑN FnhmT/ZkB{DjIVBJUr9H)P +SHJ*æ=)4W}it8B~HH kv8v$'*>G7Iځ̔V> 0)OT:'vzxvk٣;.՛h-S4/+})ʏ^z(?lgk'7*tSr⅊G<߿'w8b1Ԃ:6H(ޢ_ .g /yXZpp2N<}ܳR-KYUK/#HO*O^sbpWt~^-e7.3ʷ0;HS^ g_ ؿ~/O7?:}) g6/ZSWK_1AG8o-Ó{=mE}[d܈uBtO Ԅ(],z,Ƨ/wGS`.^g粨.u$E^\9GM/-R)wD>hDvvP;,VwwU>[JCyiYEg-XU }޲ ŅRnlA_R+z˱:vO-Obsdal CXtpfiY%\( Ep |\|(i㺑X]*tP$2vUwJ.4ȑ`O6N5y}.r<]MA 2q4$v0,l3/wDP%9Mof 3Y1<wT·]=c"Vr^pwKS6E(f¹`-2Ք]9UCصҸ!\Ɓk60ur +:_R#Uo˹}x ]Ϲ`H<يh#omIt7'֡}~u7VM2fw=CYF.Ljڂ5%t'ALajy2PGLZO.(5#^̒b7vhT$b*#-yGG39w\ReS\u8*,A}"55{*]l0p_~%:O3,{u`RT[Xf,/7\mo~hdg۝F^+>4BaSJz̠޴NN+hA,I탌7N!l8(^̆`TwlEY1- &bMjW<|$p|EP2Ͳ ˹'n);z^n ,`NCwYPaJOx̢Df.Sdh~ZLqG4 ɔʸIĐ+im(֋kKl9`wj}#{Ө.CL^*zDhI١蝧?y7L-KzJ^#l2/`%P, :D 漡]1cZE)6HV ! ,p'yRSkW *)^5LFI}/@ǭ~c VWPE`24[0DS'B~ O/2>O;ل#%S%w|qg'-;DwTRu A9I&#;`&@ERbA! bVF|_=l֝V}m&`).[6H8Z|Kn?Ojs*"-A- JXҰkA*+;Ϻ]w{gۨl>/[;^<qr,NnA'pBb}ǀuo~b(z T+љϵB=jC´6 gHO#g𸒋-T+C~,&-3׼kcڻ\J:x9U@@(Pqzj5@m)0_Կ켌ζ=;Ց;m pqCxKD:EGNǜEykFozy=l?u7p[mE峝^Eo||om Ϸ__>w+l{ٳʠ ]Ntې:6@%a,@%tNbOLز(bbnY`ƇШ$S0O?3%0l]y#3B+qB^VO` OW 퀤=:WH >_llyQy1~l{Y۫ ݾ[*ywY56@˫84ZԧF>;ja ]F#wrѺ0OZR|?m/*Pvܭۛދ7pɆWwvM^>Pp/{@ߝCYdz EǶO@X _t%l8{ۛnrm7`?{w6^nl=z\(4w\f ?8ò(ǩjoO_zpq *1 :7}7>^Qd3 >J[}fխ#kۧ~bpdCGeP7օ=++tDxau F~B8OP/zœRn]̹ώi/+'hTgAP5IlCpyڅIh5N7kJ:~#! n}w==%c/}*.HE -@u))v2?q:*e#OI=ˏLC"1ΓBFNRcnϺ".߉ĦNЃArojB1Uc?x۞wbRxOVv;b NxL'W SB'R_y>Ю.5xU^-!{ig# 9\iBpVTSl<珑=gz2q)Z}<rlDU,'F őkoНt7bA90*)-fq) sO-؎Gd1 g^woN)w,І*sF`62 Ws;Iw)YU\Z$|,Hb%/ 6`[1 a9}ɁLb%l}^2 EvI>g>(Hx8&S IfxfWeLXj(p@)q E iAtDxA7zI0bP^cʁ|1 D 9wUW朆A1 }k)'MagwV9&<@">h[ dBE:_L/-KH۫q+7σ7x9>O6}mrH͋* l^Cv< ra[){'T4Y+USṔB0%6tTj/ #?GGA#Ls)\Hf6NϪ8}7XapӸ 5 vb%൭APXix)RЗ‹ ar ifKr7حZ X7 ӏI0Ӄ=zͩPV x?ym$}(kȮ c ^w %zP'r|#ӎ{1y`c p2[. H;'\sc2);bs4FJoc }0Ù7aaVU!Sxruu<#;&['Eq̄y{!>hAFT*qiSc_ t3O*ԽYx( ,C`O5I '(|ݥz9+^&i0.,~A )aHr1j]+/|I)LmvMeTWҷ:6F~T_6\[P[]=jm]#7>r}zÚ@kޚΟh&Hgd޻[3OZ %nJxiv.n5lk?}&JHw [߮3Kn#h/0hY#eX #\ډomKRPy|b Yb7f1Hq$g9s !|ї# 1Y=Z+lI$D72pױ!9N}SM"vLgO >HU+.|.ΑbsѮOi^,Hq?U-9Vkb4$FFLPJ'h!jIw< !9C19; )3Pԉ~.(VWZ*XE3 "q!zjtڌ= tfx*-Eg}"VTf]b@[{1F9l|HU$whpnU5Fe8/Jd^.78V ܩS+S37ZZw)+ӆj,J8 {Q܈?Mnn{yS>Wd!Wm:/^^mnTv߯M\w"v(<;FjZ |W~NkR:{j[岫-5ٳC=~t6[Q?'v;<2"ٌNyK6S'TI-bBuԋͧ"sFhu=lz6_sXK Tv-}2F$N,өu1*~AIoWBU~">Uk$X]xEGӬnmb9ӳVo78Ԗ*CyQSJ~ AƝ2lLo(<8s׳|CV2wECvwBdg&\JKۏ#|hC.kQUdO5(96̑q0\; :L Dy x LDk6ehvByӬvyh"͢=<3 lC૤ΧYDڊ[I,mrjɨMifb{M/uIg24na {D.*"ʥBh\}EnLyp8˝m gׯiv {D(C )@(ț/.v3ԡ{q Z( $7롢0q'A+h}f_{WXsyu#/ =&PsO)2F ; F #|jM Fw[`:g~L%̠ɐ_;4!)z4tgߓx$ n~ Pssq=\Hz;؇I: u_Å"sT ޡ·!] P[SRO0?w_Luء\ A[7VUt"Tak6[1ZMM6(b4 )wN,,GY_aHPjzflY!>s#>Dz6b$>_ͷ,f IL_jW.#LUd\!x_II0Ld6x"/,CJ .B1pds<=4лFbGh+w8B]/gˇNLF20y7lIh%ciEy(dz ȎGr~BCl*gdڑ ,2!+SI F`M89k ǁy4*;*J /3wc{q 6+;?J|;L|'RBA8!/v l%&p7s YHW|Viiڒ#%L ƛ:Ƨ~I^H2M'hcJYd'aq4ȔxH5TEv~SnʂV"qyƒ `<#`|s{ڥA2ZSX iyp'efjDmP~Vu>pqc8x7VcV bϝPQ3̝{0aX p#MBG&'udVE~$haޮ_µG.%4K!1.YsVaQ5X3AOe25Ӌ4]GsfW!@ц8,_)V/l4$4vB8Lѡ۳i&8‰t,iPZkB;m8Q:`/p,V1(3Lf|Mz 3)19w%-˂$D mX}Wypg|]IBA܈~&3~Qh IW XAeIz9@UO|ZRp03 v/ʳc& j'ǝa< 7eT.!#ƳM^ϣ|z9ʜr-F4lɢzdᕙpnќZ)%>q(y+ :ɸ&4j+{2[J21LX:5=f,W=\ih w$a=$I෸䰆/ ZE O@NUň7GI)":9 1/V p '+bgL>z}!Wii L]099.'uq<54\H'A$ *@.д0a,0վ(vqYEa#OBĮb ]ax)wU8)vX5pw7ܹs3]Nj JȾi'f9[_bHŃ,\ : Y.EL_}!XU5bEJc;uw*WcaBr5v[F0S@@3n.#IC%gt"p*+~݁?܃A.C~#cLP+&} lR|?SQ#:1 XO W1X/_`h2RS!HCr 4Gy"r](׈F(Cr%xy䡓7{hYMQa{Q!e㏦,υ,%2k&Vf~V&g3?1~]L^NZQ|B0y{zhC*kra WS44mHjjOڈ3v18";_U*E7lRYqЇl Z͑ĭ)_)ZܺY?9w`lkcM@$cϝh 8N,R*%6*ؘ19DiBcC 0'5SЂ2_=R'_0 OL(YUtǝ6{|a!zɕt-˖/Ѩ ؘl}_U;d׍١tI ^C ::TuU[\I+IaVy4Ml\+dJPw!.DI$ޤ|GCK fF`qYJK>d4IX Dۭ8`Cn6[搒%Uh ,Ɏ 6c.YH|V\uX7 #tF:TmڶRvl :H*9 Don\}=;{&z-#&KDIbIE6 M 羯/%\H5dg,i&v~S}lNef;p̿ 7׵r?Œz3eέCO$/8t˂1SEgKzVv.YY=UIfkҤDruzpO>kކ.fpBOs &`D⌲+̦b!j<7i׎Ba'EENrcHb8 I &}!VR2\G^9Y+&|y&ؤ(q $b Tr8 B iB%I3p@v@ɶ .p "^ShzcFI)Eg쐺ͪ&]D+==ap8p G(ĦkְL)浦D/'Tv KUDOvNұ gA_1FP;M,9L6Hr0Vx`8)>9,+ƒeaNBh ؠpޅ& 8>} ɢ%W)&^S8&lU]8V85J#ll΂CUIbIYe=-t+}t#\nH!=}顛*e> P8$` hWҴjb[|J gngpEGliK }` [*5v"CV!A$),5mDˌ`D6y|)x"fKa0TmA0-򃕩`5,66FP;K^o92g-j7bxI/ZK^̸!~2@Y ̽kms l~ZͰ̵UӣPU!-j?t)&A"#(y:[.(ҊN~TlcxOI7Z}@G8YЏHyJ !R+'D }lTxRNnY5Rn 7d(>3DdKֽK[,Dlte g <\ ޻9ˊOh˂!.{K4 /Z(FYZmKP3bGA*:QrKDF qز6LZ(Z=CWb:i1er 7Fh@&6XƲFUTbU߂ %8-ydK*OFl9; >ĭM"MouBdc,"T|9Ҫ55Ͷhr)d(ezˏNpb|b|'ިܛ- ua[Cj+b2á fe'؟r1$aͩ"FD*q6Gohg:y5W\rEX,Pl] |ɦoaۥ7-;1mi+DAVBu8Sd6T$Ko!lMGW5"J=)<{e4]mQ;% 3V ;zZ"v=VEay=r\cW7`6{]ɠoU|HF5~Ăt2u3Vq# ,^&FHO, [.υH$5'V*L(\dEjlh^"{sm9rQ(o֖iE`W[NJW给a>QpURE'bJjUQUs?PKnQ?,ZD$gR>EswR7ܮmOcZn 3^LS7CزxzeD'ܤux})sk1}Gaiڿ>n]/8eyT$npbn!Dx eޖ;RH5jH+)8 ).HhZc"$w~HgS $gwgؤ}Sx7,.Rz<Ng<]XV^m^k8LdD?rO:PA (mj+p < Ɋ}^Ezԍ]Aw1 #oȧݲzLsDӊj5ڝjN*0Q Xe8<`):,8*&-',<<Σ\\CJQ Gaa']hO|n-j5Q-+=ﵯ懊(x5?>3j9+Qa/_y$KTC]!Bw$׿tmpg3}Cz%IoXFVCK|A7#Cj85Z :^}/"I}|l՘h4z@>^eb%Ǎ\BSbmaxS":{A>FihN)ԕ*ɩ9~ԃ?J:XX"!/kIx&щDQ(kRx\/ǬZs72vz8FgWf"U)@V%\NWyYP+9Qgυ7GGL< 'ah]r y1*=Hժ~$_\t'[TJCNϚTa$6115'+fˆeiaWdլG yLG [{6 O4n/K I̅O%=|,}EZ1^ m쫣uvB~Q$h\%i*$*ʭOYg!KpLN# 5ڙ(!HR3|>Bkq+MR<ԬIG6Z;a%.v=zݱ2 ',}4׋?[?n?|Sy3>Qj_3۹@ut |1y6ἳUL$bF{?Z~2t6顺 bQUK!IU\ɶ> :1c kc@D4wj49!9:]!͑&LS>yrzlACP umVێz{rXIU,:'`چkY|Q=?6B6NP<wvA5<~SPPFPͣfuN Y4MF~V_7Ԑf:ʪ4kgՖ:=kYV PTj&[o2Dk# Yoऋ `젅>mԚcSm},dv? T˭Yqٲ0Nsi7''uvYkI(@ jC0X=lv٭S>=mB:/HUG,ǀ[84RU6Xc%úa;VqaM֜`)F^U[6&hrP' ԋs8yMl$o7RhjoeK_F^i!2wv̢S7%]^݆p.Ag",B_7g]8]vG8P3|_xDP,=}4M]..:⹠#d!JfttDF8`9*d[#tLJgZR9C֝#F:4K*3}HI2Vħ~);{OKʺl8F0t{t>4퇋b[.t>Y~U) (!AH:js{kk3O|]_{@ĄZ>=5RT=Kdx񄣦gl"N\#Uvw鱇bF]0b M 2#Lf㺲Q= B? !cn }.hViT"\;`t Lѱ<+Jk(unM%${]N #{,/  ӥ tADgtrf@a<ܞo<XLzF*^2K&䢚D%l7tiІMW+3v3֞;IJ=I,\@}$R7 C^eW4D0֍V'}!p(CkȠ #R:1֐ǐGB_#rfk \ g;E5."q,58/yX\Hbfs峰CS9P`x 1zKQZp Xx_a>{ &ҕSw hQwGf_`IQ!EwiD0- R6B8_DyY{~>vEƣ8 C q@%3 rhrn~]Vntk>5jF98E㉍\b_Wx`E+qRH00.@/O/~ikgY<ՖʬOR9Ua=_F b E9i^\Y|&Vu~KwNN"́UF(tOG^_xntmTWk"!0k([ vc΅4XI:}"ml&gJ|_DJHNu9 t̶:0g ER ]tr˛3fć֝{#H 1r {IJ呺's,9ۜ~G[M86𝛍#d]»4EuhA34шG-g]m. X0~v ο7wz@ AHUn:ݠMuR+xskY3_ h[Ck[Xk7=Ks^uc&>%Uh49y5=f(A{DFbI)0y,yXL*5(}lamcdǡE.߃Eml(VdW~?hOk S #|9Ѵ#bAq$f$^C,`$  PWrZ;0Fg bG-(:2O$=P=K,:7JoxנclWx@lrk4NIOj:BJULZOy)1mQy ܣBa'4:}5Z-[AvY]7~ - bZ: ywZ0r6q Bo?Q{~mXtB)Ĵp4$bj;GUĴ$SјT4f̫+|":`xNJr81jRjĦ&5QYOfbńM"\Ց71sX܊O⋸4ՕXCuQѬA y݊q3]LrGt@¾DI"uKgiFƕI5'].l ig;!6Hz>{{RHGa9y9#PHS{:47ϼQK[?+5+89k 3_"<&4gj4u$XM<(ΣOOI:FCanWRM LQg-DK@(S.`10R"c]D f L7y;9:^VUTUrMgqN@Ԟ1. 'Nȏ~pF Mbiztb<f'cvҲSFj]wZ( 2ۃA(k.^ | e q77nUޙR$]j0o.;5@ ~ [Z+ZvEzc\Vx:9;_C*ace 9Zh<:l{JI:mEݭAƒLDVZ?joPmϟesa,Z O8d\Ӻ:igi>s*3k,}-Q;r$`rK*TDQMysgK_K:$]_WU#cTJJ䜡m݁uN(vI b$~8ASrBe1`LD]} @OGZ(2!zN|68ZO @&tx)<]`JH>3Ϲ ҵq?_R*Ca0C-\ިE&(j=CyT OxM;h'̅OitH ֒G0_I]e X_~Q~񢼵r"Ҭ?g 2:[#Jij# yEm!2 w\*DF6'B^4B%]vŰK(8Q"luI8Hd[o(%PsaXۘ{Em`xK jmMdKڙ#qi*0 U4m ߄O?0`Mƨ{YG#Ϲg~7;aσ5 S; uUBĈ(%R$S!YND@ ,1)E o\Ҧf{"1D* KV\(."f=t/f{^abH?pyTN~#`μпlZTbcPm8hPԦOc7/+wl֎$9D ּ3/IT^RmBE_3B2,^UUPh$: =hS/H %=wi,|j>Ҏuk:&.l+0& !pd/bP?ь%!su>.gʜ >c51y7e5̸6U>4J:ܰ.i( xk炄p'/V74)0:hr^HE{U_nn Πď_[ƒB,`$kI]fC5UCpyGoq߶ӹGA[8_E-H &F>7}[gd\Wƶ:U/ә&b8vGzk.Udm>m~/+MI*Ҵco 4͇v/T'o:iKyv E*@Oq <9ʣq(’#,'BbNnʪ6cZJujGx1G*+b|)e&f})\^dPG"Y%*EML 8Eq:S}Y5KdPMk=/?hdM_5[Q0ЙZ) /?|`//yٟ$_NiYMF#Ƚ c\,GC`2thŊDcU@AUiAYSβRn8}^L18q%p,Kz47!q( f:Fu~co7?H 8L$IMgd+ޙNGCeΧ)ܛMOyx9,cʼ@5cA駮?*-eoOQD",/J)ag[*_Xl ae}Ihyp!leALk0Zu?VwgKDE BْI M2NY R'`ѪC=UM_M,)Ew+Ēy7X< 6\Dl'b'em4$žV6t藠\2D oI2l,HDEw9(` h%f ')*//g|{ΚQBW3Ԙ uoQf0-枙J0f/*^)PR坞wT0O!> X*> ErO|uoL1\)Za HICaPIQ*W4eMulko}GjW~:%u g@zcZ?Fks81z; o9\ wqn=s &Nn;2*Ms\@F8U;vɑHVS<}ܑ?#C?sE2$~ \-~kCj`@Bj@5XߖݝBnyYһ)jZ!ZaEt2CNn5G2"FF>Bh^6hӦu~CnϬjV=|V6΀V)ARb:39օ q)LJf&Si jsSL!刴I2>:?i#SɬAO-Ɛ6DZzA` c5l .@sNȌhE;б9i/,kxꈡaYqed=,L@ j] &-17z  )w4XnEf%槊(!E&T9Hӽ6-妯ޚ ItgMNh&#ؿnܛ.Y?h:)|8*-4W^7I }7fn+F/ʈEHU#@Ex:KdӃ3*ypEOr@j%#r N RmDo3,_ hj$u`Y xڸ",Y!)X9<Gw8;Gpwҳl~ƍ : 6%:|Qӈt,[.4`!%/Y 9͈zBpr!ppXGW# UFI Frs0"LKï'ΡH2#Ɇ+3Ec5]0፝w񥤖 'QKhi_-d.L[צq/`9A PŪQ*T4,niѮ|'8𫦋3xMHfdh Zhp84Y~@Ǩ*!h%dѳiI`X@pQ j#T;}Rl5ct,[Lnn"Em6کߢi PH6y6hbj|ҧ㓟ֿp6_ޡ跻,\Ӗ=lM;hMa{[}k)֔iغAnC>R0d9ȩw?bp0~v$o'VˉU)6[8(a5R$;ڧyW`B¨mcBOy ?N[N#SH yQ2!qR|&d,uK:4 }յN=fYyv|g`${>#^MSa*U ¼'n#VΨ92>`:Jt!Kc}|b=2>vO|ìЏBfJJȀLkLy{ΐhQay8ֶw]1c؋Q5OZ2Wai|"Pڻzޱm~k0#cC> KY_L_>9kaT(gLúƈu6Գ;8kzѾ/ȡb\%'F2r$7 M+mts4X ߠROcl J%[ )ﹾM;[?)RgxGB[Ⱥ~$\3hFiiŮ mNvxJzx'|A8w">=%ght I}?w"^@rb2˿/eUR1vp҂r4kgp(TgӓvCaͶJtJkoѳzx+s]UNJʨfQ`o5@ha6jM cҀU[ Rjg ^z:ud`zjg6tt~srRGsfS'mvRvT9c P ~nEeu<0`tU\a>94NZ` [84bU6\c'a WA_qa ||hyf4j :-É:qU5T@ ] <-, *z*e&ft\8%Z>+,_4_ȧlՄssZ݇)g})$;}95||YL2]ڗoeR$enGdR~SAW&B/r|_b*5Z>ym0xZjK1-cpj }s=e^ٵsYC?- R7>P$TyFPnK1l/A8hxM&p78Oz{۳S\?ϚS&Hv| K@gb%z4u9 kE&L J@^b䀍 Rh)(* WcT~6Vbܡ1b!\(hZβh[bϸ6,)\=0&‘1xb=Q^rƫe$_B(d#daHC-ızRjF $H%5!#Xye{l9p7='h(M? $$j#} l|n] Rme $CI}fl;2a{ZO~ r!ʹRk%T_CXV|NH㏞ѫ^_^N]A^d/C!pH|8$;QD\ڟ ጰ̫S{' ZPpaIs0$ aLِ룐ú6&elOkk短6y<|>y<|>y<|>y<|>y|V:EX