#!/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=c8639695130746b67f554be6dc346da1 # 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 BIx;x)yRtJEf2ܧш64d#q_tPu P}}[h4@6:bPOQ9uA3g;GacŰtuW 6㑩1dj_Z L;ӆ3O~W@3z7 d*;ԀN尯djO74Bw*H9TnA&puk`z@9_ G qCҭѨG75LW5sG& mbjHJO'NӇf5P;Щy4DfqQ:{wA%)( $ZE0\-yeCkCUyZ Ԧ` 0GueU#Z~ĔޙKp0SfCSOi)~R$nL U.j-8Wl>̬Y- зNJurL  OтHb2kC֋|/ZV.{|3e^$Xc<+A`kDln)<:R]ݬb$WOx;De/;_;;kw~ŅwCBļ{ Bzģ=V=6EC6ԙXX2T]v۝GӀU_TO5c )p6ܾ nq sgA?e>y| [3ED:1M)mDeϼy1IJb o*"Ml'_һ_cH BW"ր&js * t2Yw= Ûta#Q߀[;Vʱ b]%[Z7z'ʙV+C.O {ENЇBy|e\C3t)S`KY@tovqLR[W#uEGd,jTe̐a/n` Ѥ]uE`-ieQr [mx77>#>B c5>A- 7)dz 5#%{0MAEuqԬ_ԡ[vg `nEєmJj0 ~Ah6PjsiԈ)07q}+yY_?_rZQ_]<<[Sshޜ3< mu@ܘQ~#gRYhXذ,la+r_Qx\pouJgw[o7~zhywM#?/VxJ"g4Whbs 2*+g@j?,ӹWI X6B4)o$}UmhjJ/ufh/^00iI6 ]{794?.t ն>[E7w&5T$J],ԙlGk%يCQl 8 J~n>Aikuv|4žA MYoS.`| Gmn">O/0 dAQOcoܗdSPgLr[(r#:nنmд$|ʥ9hn9pL¾i[F󹍯 ^V&@1GpO8rS[(*ĦLYc'-%*$abO·ÆQE|Ɲi6is7HZk\b[dDw*)pM$"D}7 Ͷ׾{ͮ`pt`+M¼w>~5qϓ&*,J8x{積`d^k"\ W>1xnFY"|ܯ[R&6h7 z/!#4\MmYf 8V*J'9htB6 +b@ Bci`:tNˈ;7 70Fkm}VjyT Qgf\hy|"p-O؋2W<"wa[sۗh!ϴTso#Ppsӽd>u09Wq{9)[AHIXK%}D px -|_Ͻ@oiW&*1w0'aGXΖpGTߌOu-N4 jUH%Xzbi+!^)}GZ$)eJ"I*XBd.Q\}azLD/}*Lh!cyԞ|(E,GR*CqEe#m3Ptc4p= {J]gkct [6@JosW 8U䱹i\6J@FMH 65L~B1m*{1ga-kCvqCEmm:Ӡ [pY}N?:wg8pdM+80Fm?h>aA2+dhNkKqbƳ᮫5:Ն{=nejC²LkS,'($^ij<^3]nMT8Q̓2t+&j[9yG>,>:xt5!$IJN.:69]ٽJum4{nvLB7̆ĴM5}i*c9!6dcRΌaő$%0&FPbU;ׇG)A~>>3HϏ8U6.st&j҄ϙD 5HNFnv)N(߰ #Di1~QFlF1n<ļR\٦uP4TPUmׄ"WTgڞ]Xڝ>BR]\@uv7uLAtnm!ԗ˝FpMqu*ІahR=.HUiXa^:Nq<ᅪZr7$ZcݝCQG2ZhF!5|`Ol @x3OX1Dk,xNz߰xHpMwa"JGf%̿fEAXsqDFԺCqr2sLA;ݰ>Dz.gtgiHtsG8^S MMl;?4YYq Wm^!>o [t|XC!l[W.uvYaUZ:\"̶q{yNmaA/Ԧy {ҡѧ~?zZI6zUU6؀FOR:lT̏D`KUzm}"RΕ5Ŵw$P_rMcMֻq9œ 2alhYDW_&)k$7淀%# XI1[;annkXF)s $Bnmlی[f"-PB,GF uon`gZ|Dj~wUjs:XV@[aYr3/JtTTR%RsZFߥd2cȑI8 <J|yh.?J#kM9E04C m wKҏ1m$ߌ>객A 9UF9M,Ō?N Z#1w;G jI`xA(4 (T=iĎL_P׌QVؙ|!qgtA]ˣ _g'PbђZ+aA7|0 B6Q(w."%7XbtQwU,FKPqXpsBŗ,<~ pUzwij |'*v3{fDzB.dXU!_zVNق[܋Ev`:5e^sk -مwHy :ם2qrcݾ8J}ͥ1Xˀ_b_Sig#dƛ׳nh ~[L4'~'mOGvC`ro&RP!@^d<] M 1;Pr1~˲7x݃!uhрKw~ {T퐠D0i9E఻yEt :o|Ք?Qr )Ayn?}c4*Mo/,>Ob;?m~΅Got-~mv<M$"q/$_E.x#D %D8Tw͓:r)F~?NZVftnsH̆"0CEx@@|~ecv6cc50qN~6n6g??~Ͽ(ങ"hI*\0U0 Y~,iNH}"̕&P]B?/}M+ɡcN9(%v{G|y1L=绪*Ȣ)ilfX_/bur% 7%i)SzK| \MQ95†H#TL ~qPPt6re_Y< XءsQ~:ܡOa7g}җh\#1hq͢<@,C x"J1gzZ*ԉHa-.m7ķ1>Eaƻǻנݽz<p _ i%1PZ)ABVx,=ů*x@K"5vb'-愘AYk81x!nB[Hge! zW0jѦU0`aU,жq5o17=$U \a Ƴm,'M(mYn$E#/2Ӌӗ!hգΉ@XHNA' !JQ= 4tQwf¿hԃ^Fl0(uReЂxpAX#x0vv@'ozvQ)/4oap$':ZUL3GsQt.Evh4N&-Ж?,%h,^Iu伓2Fe#3۾ru޼yvo1ŝ b)jhH l mI@E4? `pCo ka7h&O?'OzQTMc,@ P'pf?yg`n6-y gt{STdw[R" ĥOtPi=S+GY9+~sq"iHLI  ""gs}?#Z'mMGL'@@CN(L4UCU,%'Q.fաd"",>"O 2aXQ*)F%-ꣷ\Fp1Mյxzy#lt۴mZDר3#~䗹2SW1㉇CF|5l[ ̫0q*){VQHVnX}buseqI﬘^Pܙ7|!d=ty=۠ٞԧ-d&gcfch9e{VtϖV P'eϹ&akzd@[i'_{O8EA<$0 eX߿Rx[;P/*Ȧ3 [L`25\(|*?A`JYQYC/`A>JF*Ookq;] ɠPKxWcedS~RSLB'==#7<+ }Ym%xv<-͙# qp443Y ܵ CVh8PʉrS#Ux%'+6nAyY`@h瞓m3 ̋'OЗf%X^vM@|X2{sS>?rcIKmў4߫'^]zxjW»4m,}K#ɧ|:O41E7ǪqXFα0vz7Z&*:5 tΠ[ sEBNU껚Ja1qI'hLgh>TW @>L9_GƑB;.̢醵UV%ڙ3!Kn?l8Up_'Ә6pgd>DЬ)ԍ؛P"0:GcZM'D=ۢ٢?nU֟.x;"B^yIMk>7 &E_.Ы&(6 Hv%cxyuXDPP#+?Bz"XR?Zk#8ud@)S?lxjn8\\ yCU0?Y2R 4Dⓥy{"|Y6R|$)@-q52ntc߄_Tory^7VD5bY*(`ҷfߦ>褟 ֒yɬ|یm¯> WoV%a D_χEn Wfu*yxz%0+~Ê'd͒H,PeMe)Aε}^A&02+B*hCynCO.!1i|( -}YjwHR/>b aAh`?lPic4r{HgR?/XLf]H. l[yg5,bfјi ` L\ ZYy %)'5,:R|>Tt`'uK8YHN(cM@&d2ő9͚FM q: |R(,g<҄up]W `"ػ&|.¯ȁZ\= /Kf4Pvn`5|ΜBt)ԓh21j-M= \' d.޴еqT=/vUPqLXNK)u;rf?1~=TFp@3+[$cۨMr@Ϭ#EN_C u\ʑ*1G[xٗF-(Yq-RMH0:4I g4׉!J>w|qZ!3 q1IJH%xo}֢WjcpK-"!=>L:.7)ڢ6EJ"闵_8kp~Hӂ{gYJT'}Ɯ$RH];jeϪfg}nzaz +hφ~Qc~Q_ƺjU>?¿e HUxqjisc]LK/ɶttii[v-=[tgmY%Җޡhwזx -|LB !>yŨxrߧkogu+1򶑿j w/{$'~w Фgds tS+Er$`{ BXT Fm<HF}Š$IlxqS}P$%+-xP y:Enj?u饑eK Q@"c314(rT. ]W5ΓsAD tv;ClAQ{Q!=r{P/\RO; FDn@/9KagiFz f_\WhrMl+$)+Gd ~%q/)Źf R(ת@;xR{Aon.]ڠ_iɳAkwf0ד`Cﯜsni> E/`^z1gw))#њypwudB4K _vTeX\O04M/kV/, {o5'pA> pt׌gf%(:Fְ|GP/*dE>O~<@c[wfEx߰X̐r_ٜCm7 ٜmgc\=sspƘnhbPLF$egmĀuVKma/k !^ D9Rb-)(eH.e#\RQ J-܍ӹ1T>Z+IÑҢi":obyaANj~;f(a '"? iÙ&7Tu#]RtK%lgLc;V|徥y'=>(d=^']F.XB_(?5'e \cF2UPZr= ۔m=l7n i)R]r[&z!7'V#:n'W@CeLΦcteL0ȧt2*<1EȫY08㭅5RAk[XJ 'UwwkMvO8aKY|F|ehtClU[Ug\Ƙ^7]exH W, eau f^? 8A֤T($li6īh}s̺[ߐ LQG.O11:kgfm=+#?`O|`if XAx G-Ht _t]# ~2Ek!fq{^PzP܇c/J*T!^ DEenrEHM::X.ϡ\Ұ,Ivic awr] eI;;\;A#^O\ka ;^fSѽmɳi_x$׻T@+|ʿ,WWs-9G%o#TJh<&JWN16 2ͦkRب-iC #  {1㋋cqw۱}25G$nꦂ'^a{-qmߚ BU2y2RlvLVG5M9=fWl]xEWi\f?|# +d{Gn^En5ӈ. eqr 7KxEuO9Þ#<#7!E<0:9Ҵoj" ~qajۮ?Ǭ<3W\u\VjUz֌\ zK*c|\_%Ѳ[nAcʕ8EgH:)ë̐G"ͰQ.N;m\x@Np236ܦ$8 ]Oi/xIߦQ5j+(`+{Ǭ)aty?Rx)Qb:Ӧ\?$!X擶(U$CW1n-4Q>{1qX[M\>JB ة* M/[O+}_ڄ2،i&c97*τe?Gcs 9_z Hƣ%y9BΆga (oD*QN髧CzE13IaEt5;BR*Xw^zǠ'|oR/"`-ڒ׷'E\vϾjDe$zf2!24&uH{,LjJ= kb_ uBH&p/r?jwc ?   ߉ Hy-.f7|RN\ hB)>݃ O}{#{8mxJh\ı6ضK- >PC LzXor2kEeT,kSI<^ R%ѕl$v| p^sD{щVgwV~ q2 Z(3t7ks.N^o7t쟴yr5_:YP15GGyf0DkgXwa~aLf|0+ yniW1R%I{: E>Kg,nRc9&-`KjN&<V=Rr[ ]TzѦr)ɴY~kOW\m~[+gy{qo/m|   ōMj.=o vD "@2Obrߥy׷H92#f+5!kn ]B|h}^OPy21c7L?a~T4aW:WqY_u_];yl-O]9!641AAWu^=6zS SO W\tT^h9ΌA2LgR50$؄Cgܵy@USЅ C+ Xh"3nl.Ǹןή7;_Ln1/~Z+x+BJze⼻(v @H?Lyd{9Em=߾Zc9.\lc%^_31-7EO*z9(f=#{C)5]ĖϣY!Ⱦt!ZOWT$KhfQhu>14m8F W5Ż{!xAC%^"o0c "󚔳'cY&Deތ2 z1Kͯ{s%AGb ¿fJq.$Z.`F.J)*]=)VঠޚRnQ_gc /tK42sxbl#ЏOgc"D *^;ؤtD$ D3ji6_4I5z8(:xں҄Tvkup:*n {vǫ _חu,Kc=BO>} r(CgAwk!1Ktqi'rMZ Qz+3 ޘ 6 KKVJOhnLR""{0 ;u;bdo1ϟ+9%#YrCb|~qOP }η?\*_U~6Om>K[iO IB75WHjD-%H\.L+(bR-/I-_&7&I(fS|W6(-9K^}\+^lsVgIwY>,:O{0>_WW/a޶" !koAv cFN:KItN=.R/%`P;'eNgO̽t:%G77`t<ʅ5żC)'&$Z Ɲa^NBV}T( ; vwb'#gTgO1,|9Nb#7_sیXR)M_M.2Ǥף+?f\>{LI28 &{B(L%\( u$S~;0K%82 ڜz}DVWAykC96 {ƹ B;)m υObR2o\!̪)L47W&,⫙70%qRоN3:NHצtnrlip۫ɘE+gjPW[pFM=f:M pz &>˰W*=Mgv#m䉘]3Nla$O2yiSFcL<0 qRJ(J]Ip4" }PN0isRZ]OiY ,&Sb%f&b(]*8, H%*^1#k`RH$:39Cə-on&%p=Yԑ))fB)sdв]R;=6vV IE;53BwiX:_R!' SUpZq[ϙ<P+UFdW)A&ןm6zD[6ct&XE/6מuFGaRYq3܄AZpb؃:Γr;;B%1-vJE5*Kv$Lk`>fhyC:2Cywhr(0)vQW⫸ sڽ\FZM쏰K/u:-@w.<8P`)lQ1&n8 -'4 ުfӗVw/7Z~k$a̹Eaֳg[@|n?_;ztYn~y/;Z&{!lAJ꡵oTkԚ5x:DylqKp?v+7(g΋h5УE/6׺/⳵bhQpEϏfMNVi NvQpG/d:YdSZ0'm`c18`R@ ^Ǘ_yڈ/[x˨lkksmn}7yB2#Bп OA%6|Ykh뒺9D_|ۤg2T+ -yKH\2+?*XG"voN!s5BPؙć5rZs>q5("1R-Ģ%XkcEgȏq.bo* ue_?׶O_Ȋ\x;S#zm~>1(o󿵵>guU-lz8912.9?+ $6z%UF,n-zCX_DI>a'4ahʬHΒo|>O& ]x?by$/$GJ+!T)3AE>b:HX,G)F>_i2E:~֢`"lFsST eC i4$GFCLU({8"1pz% )5Q),Ib) cfAhmst`.Nj$,"z2JI.@ʽEҖ`,08b2 pS 7|n1 C.D&0]zt|jr 7N:v}.5.^a9''t8h=wlgZ)Yz]_e ^ GmljΤ 'l_'+к-na}h ߱07X:"l>)_))G!P Zq4j"~DBYo+Nb=L.x۬5ـw`̏ٽf{'p/W0S?(_,TrAtlXWXт.SRk&<*B ʒFKGl{)L9QHaۨU[5'qbCivpyG3mH-X*Wƚ/dZ b~*5}(8gg[-ͦ71|5؍>AM<d"z lAK/^`HYCPS' #̧)@uNia,^)Gʡr E4?U?mq44ͫЯ|;P_Ɂ%V<<(qrOXə @v.d ?3SId;wrܬ;! OiHM0,EPBd ^?:0W@ԹCtI?B',XBo/,[< )KS!4@mI,Ui#+ V =HM$>쒅 ߐn]H& e*?>-ɟI-ud~[% )'8PE4MxwO 1ػ\oļqAa-J\TFD} \*~*$M? ŽD5ѲݓSXR:]V@ϛ\c8 @2"j?jG{J&n]gs=f|ĄQGPResJVfmeʊˤHH|>74aanxR\FvmG}X'LeگwgQ1vѽgIeW/,[5hf ~b_ƚm4qEW ~np'7,5E sEtԗ7xxӨ3f,Q1W;MUV׽Kأe3 C/Yz#=eY2x!=&jYƣ_E W% 瓃 QzXΨBI/n;l(i'G$LJaz@e0Æ81iΧQ`@>#JMII$H<[F>Q }0i 婘V/i';s8E6KЭSnn yD3J%mp$Q Ӹ~7epNԻ{>tФ\\%K,97r,E[4ИL5hiE~4z̼pE%cfGe%UxgNt Ml XtQ[W1kոD=n{IY©lM:sM{$yF(%?gKqIˑpǸg MUDL s0PiTYOkY`Wv?Ö+ k/Sݘɑ)X2uf :]^mІ[۵y= o{`ea(ߐ"^t)(9{Q$k+*qGvmj0 Ø8jW[}5#x<(8빈S&u5|Mm1>k?'?PYv^2=&p,  ..BBd:AICH,uX(lFݞDA[c,V4X S9A`(3H19i)8sL=eӶHBI]ݛAs2F٪6ZM2G UcѢ-S{Ewƨ4wmf2D2Y&*6xA+ee)Dި?핺Y. /ԏ;8_}//xنt6+rPuzj΁J=񲸕%/V2IXsj#Rf+!x҃7͋ԎoSgO^KG1NĢc|evtMNrf@$0Gb{":Vkg]]XRWg!#!3] j:u%FkCqqe"lN'Š`5oj!Ktb ٥}+Rc0g0l=2i~ekvqzxv,SmP!} p|B7k(eچ&'gF%X)BuKT J=]||wa}yXjǘ\C@V*ۧG.Pks3:%|'ܗtjNyPH*%*W.WIH.7xHk mB^yL_r"9tLf]nng> _n?ٛafcx$%,իxvJ74#GL٬`BsϼDHUQtX<mbQa)ӋJJU2E?Nv0OZX=gxc4PO70.j TB柝(W`PJ=Pwuf&gI*_rwK;.X^IjMfƛ>+qקMdDt۞9gɛ0mǟrVc m멯o%-8k*7gq ߪAvh1[MĽtdG!oƍ7֟mlJ3</ 6 |4Σ 8!,,FB R$ 5ĩr lYsd>kW ]ҶZQX۴*] L\{6>%x+suܭ=3\ns#g[(Mm )vX❊9 pQ~ØHk8/Q{]o֊xp|螌vRd 1̦_vlv 5jjd<0vҴk\RǨ'Y,9xUD9h+6nhrJ @(ǾݠmPcٖԃTOU%KzK%4A.٭"Sp@|$B;ᘉejG !0`_xd‘J34ľӽkAOtU+{2BaR|ZZ+Wvh XLFjǻ}Ce0E1pusM,{e-Zsmv95Kp}4.H $V }KT^)6mbڻ ٠_<KB M}Л*)7<:v1n{#nqטV.y">Ɵ;)c0־u+I\ё[;J/yX}7akŅ- l.ALuBk>FUYpEl'v#iZ[#9-g5LS[/I#)uw<9F==&%Hq?{ L=9M"P 2ef.j=Dq@ ߊ5BױhI?^-;w %PWa gs41Rٸ.rJ`wXB&ӹVDCD&SᔝS4q=U Sg:xcڏM7 fGEyv<"4 ˖4J< r Bbِړ(ǁlNdƟT_~d=cg T|84 ĞHBKYk_Wq.A>C*T]9kG *OD"v`nu~xvKU2k ⓨ CyL#m1]M'Gؓha]6ٗzMZ`['zV[3f`'9N ;:ni-R/VcqpĎsێdg~R' G6wqïì(t1?.ʋ,^WH|'<a) L? qc`_' w#-s"yyA؉$tЄ瘳rehQHL"H쨎@%J{CD9[ԙ-WdW91bc)ݗbj[' ^nZˍatS`P|1ȣ Qr!kC=֋ 'g|eP )#eb] ,aٱ 5A9q=晋AO⏻Kk>sATD hzM@|esFΝv RpL\98HO#!  3'G Xe"jL cx+r4VM| (j 1 c`p`2?;whHbН5fSA,;xHfRY$I7rYhj8^A1 s4aS,ˊ/%x<Ғ~} U¡[nE>[G;z[hW}s\9H&Ѝ k@N;^{CZjhW} 4q<R)>Mm' KnXjEG Zò>M!̺aT6n7MkA$hG)Z [XO#u9l{YgO]Kj0mlYr~s00K%ǿSXl0}L Y^? 7̹{԰W) !0DiTINƹ!rt0t*Uƃ,Z'+l~I+tnהg\.B#vbXT vngN_?t]v1u<%_)Ԃ8RF c) 9 ­?CTqSz4 _l(F}}{_zj nQ(H\LU+Č#w#%.Mەa\ƏuK_A철h9:Z5F0,ز :fA ]X35ݩnP-1NrIi&UULo 5䬣lj-cϤ2kF&{\Glݜ8SR$˞LcAUGj럇6;qI u̪٘b2ƫfQ&%^ _J&j{2SJfkBuq!4uzY{ lr3[/Yl|Uj,n蠯984F\L7hٿ>nV|Iߎrr7u'"A͖ȿՓMz{DFؖ+$mo^{s?U?s٘B'$z9&2)~z1zXA賹ߧl%/OWC3uzu]Sgc8q\x+{tʼ (W;>Gl(l=}c i!c}CC8҆, TeCm L˭ fwg{>)4awѿRD.M'WEqdШpvkwk3Pq}AhM4qW?^̝ݭ=q4KUŖ* ;L9c@sJ ߵ[0Q~EmモȤN ĚW=Ėq" V=iWAQeEiM_#P̶F/1Q2q+;K|e6(FilݵT(9Uɪ2h_;K Ϛ5M$}/Th:;$wS%jv܁i~ EÓ'缈0d&vOO /1zO_žv芍S4"Yu,ܓtb{Kt̞a1uۆ*Bb4ΘIl>25PJ%xPo Ul_٠6ޛ )%7S >8;o/ū_kiItD 1kJ?4R!Q`0~2 \PIvdU>]Q"}Ԡ0̙JI܅U߼9ߜ+ITr̸XKONfo4lOc֗Ut>`KʖtgsתvKxC& [g椔K ,Q0 W"Ig-QICS- 3TFG l^5^J,xi WM' 61]`F5@4kIb;{1Ks2bmoq?i|߇y Uf;8 A‡ uB:q s֮$Y Wh2 XSOWR6QUyIVJ֓dw }9ޒB俜ȸ`D6ؠ+;$ކV᤬SNq8X iMWJZCwCfR.#g|*3LkIQp+t씛[E2ء _1dpVWJ&CNvڸRh<*!2̛0QFG_”#iKX7fd$| ZP͉neA];>Twm}!E~Hka&uw֪?މs0#PH\d E H!ݶ3[g:q+"1 8t6!k 1׳ٹ{KΧJƜRX-Iav@JRSg)̏eB `oJzrVb 8q"6WC5~\~\2X`s@a>aJ ݺR-RÉƨ- >mWm-k,wJjb[Vh㛗>z_ Tu+C:ȴ{UtV]. BKjܐ;jہz;8۵FUKWmhtNt:Cs  ׀VԆBӑTc֒2+&Si)N8)f!z&{s)!bgC,\(HV f3~qCg[jcuYDl\MJKY)ģv#i.Zd`үһG͝h(rhv.L.D"97  S,DpRTW9oy?6sMrH 3Q4I.:7D(YNPQUl~Tn`99{RkDeظ-ќ_V~ ᛩΡkafV;jx1꧇X&F i^$f3A)_1S\zTY19H8tEKyNur-c돊|dGgxJKzBink?[`|C>x!t:?OLm$a~qf&S'9鿻I/4cx|m#.wO=(ސ?6͉LҬD#VdN,g Id܍av]UH'+է~u:DI#E w<3T2^d6fE:٫`Jovo!؝{!:?y^֏~x&>#9gcDƝxnJ{'R9{Ws'5 /6ثsdI]-qI d4Ѣ_pK4l1jK&z$if ] Ĭ%+׫ʰGr`ד0?4A4ypjh) Pct>iV9[yg>T%tmٙ|}PӞoH`ؑ(wPpDdF1E8/DLI%sVjbэ1L02'U:cN1:8 'OjT(_O5,;J}|E{TsN[ekSa1EHQɞ J =ā8=]Gk:HXOt?fԖfKi3J6e=Yt`P>uŲg;L8J+dI/!ԿOQs͟솣9m d\ )%Q+?^8=4 )HST"Ӯx,QB \1 \hZhNdD9;Gqh8|"{Ro0Ttlxsx{eʛ6,3TQ{qg~.d\f5{|ډ5RD>˂uq9NldGkό\IGxԋg14C;䯨 l-=* h!i5shJd & .1mꎎ5W]F'C")"u#PfX?Irb30Y+>7=HHҝ'7П=|z{|g0$A_z<̓y2]G^c/Tan HT41:ehĽ>:wFB1 8\2O,A# ־)Jk$~7%x:ϐI'x6l7D@%0mSqHk+}"illQXsB(Ԯ30|h524*+| F\p-tW2Q)5qo7yFr`D^ B`6"1BY*%cV:<1i{4KhJuSzR"lVLd75⍖$<Tjoثǚ=>ШyRoj)P}:n4j]GTx^?<9CuU5K^MIACz KpEukݷTz_oak NV}P'fMMsV@=|[=8 ?AUA?O ]<(A=͓n9%Y)^n 7 ,ivhnVM9>ޣo껵:8nҤ6kؕjJC%0gP Nu:JZ{{fYhpgjǍX1CI[ Y*NEfna"qTv~7kEXz ԩi )  z o-޻:v^Fhe)8**g6?z)?BR[拖4v,ka{Vz !N>־ǧbھJ>/UrDUy٩jrTON@ER+U>ۀoH`%{eu/1AJ1~&y*'.L;/e]z# TegقkW:[ VB_эv*CI%NJ< 'Rؗ6 84}}hbX=*RKy۩+:^dV/,EY.*bqds\QoOO?[ ҡ»|>R%QUd~NTy`G>N^S1W-ƵHr݋1nGj@TgB@Tߡ;*ճ@&ALzKzLBnZ uf2#$?qa<'q]#$amea˅@1—ha4ø}`Y5ioUu{]^׽uuQ.BTyQG1B!Y@6H&E|IO| bBa/S4"eq^)C"[R jonnJn>-;ifI$d1 5