#!/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=4a46c9de7df0f7e2a7cf1080fc476434 # 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 C4]Z^) :oţ D#Pw}^Ăn8߬x8j!Dl$<?$OA~1jClD8+, X"ealQ`A! O9 ΄@]`QbYO.GT e,^9*LP"T@(Zʰ5k}? zGӸhMi><ڦq>GXh}CC#?Mݲdx`:ojCЭ*3o / PڰUD6`׺ٻڹ10D°Hbd56zf,hƵޯ@7f֕6 hF /v>Б-oz5ez @`qPI[?"M,YkF 2HzMs2Ѱ|j0Ob q3QUJ&J$(,\΃E$*[+Rt!W`  " T'p. 7ꢨUVf\0c 2ڐzWRd  xxy$nxL[Jhbkg~,yضc9T2h`:T Rih@uј#ykJgr~%%ڬR gC(7VsYJhdmY-bۜ6_EæorYEIK~Gߒ)sw hcI4j( AȏxtʗA]oR8N;UJ0+-sk֞Tz-lj]~B NJoy3@YYBěD޴`4Ta7seN4&kv:}_oh?|_ΆrI#ncF3h娑^ X8mMx)+`_,wdJr;s*GsҬcRyg &ʤ/>m$kZ0[.!5{gM0m,#R>8h>8]օ\u]O\hxuJ =^66OMBv0~fV\KVN| b">Z@݃˝*kVJJP. lqqЃ`J-ODS e(PY 5F b kwz`/LgQ} ` 918όs$ZT<ȥD14l{NdߙۆryK 9Z:9Ǔw+ͺʈOHz:PbZ pGMV^eĒ6ޜSwf^:ؒp#kb`w4|,nUSypЂP=wFD+5{ B&k]lۜr{ DV&J8O.+PY_Jē\h{NmMs%sJ5;8N( c;ZXaSl,K$9,+]ć^)k'J1|{a[@M,Bl=p9;45rN\Eql0~I ?DSToƫVa(W9.Nt I\Q>cS42-v*L8ۖzZɢ݀a,(ZMekU?g?m4]2:pPiQ :)@po;2G_="M\IO"Z  L]cNT7ӹ͇YE ̵q r;p&P,ta\4 YƥeMx˝z. ʮ!C1|\HjËxCXI|r)_"(  ZC="C;D*oFpѡ`$4 BѤӽO0>uOhTߢDc:߬f`jvZc4D)}1KDLx%@YS)U| 8g3=g%^So&pe`>eGF3B\QL~8 bP%q>Q 2WnRGix % Q}7L,#I\85ʺDϋe i$0( SPa ]8d{fԹF(,ON[zDш˸HF̅۽0[82b{IXVZ8JsH DAI-%,$'63Pu 2 W2]tc#M(w8'|ŐXR[d/ [+ ϝŬa'5N}\d0ܩ`pJڥ>?uZ痶 c eSD/7u!Ѝ"ӸFyȄ쥘dR@qEgγmw*pZ :8*es jPT4YD\i/< jj8>v@^V񒚤~FI~I)|*$`E `E )joPp/a6/7>h^V@X ~[Աn^$mRQ޵Awb6_ϰV ZW2b5#+E Ҡ$첨l+.LDD%0 &% Gt9ODo9G4GO/neK0lm+9vzԤe22VG"R/=yAݙ\k=>p/TR"ǪGm9 Iࣳ^r)N ZU={<\ Cǥ" 3:t~ VͰF FI p`bޮla$|FsLcßic3Y_0{($~= ɤowUDt6*N}9i1}p+py~+Z[_;35"tZ TRS& ^<-$t 6 i]A>&ϑjGN](=w˺MZb4 0awRk/?}&,v 5={}>3q7;a 0 d('G+Åy]- ưc_ӁASI3+@v櫭XEf c ]^!7x u4vIr*dP]9}uH`% fitEgPIJI>Z>g?ZdԁbՓpޕGC*2(QyvRwGW72'۷o LY\R$b]d/|"̔ΜzvJ+ϢWa Lf>]$$F%J jsso.#`w2J]t=_>`v ґ h;*76=TW\=1uLZŵ: Dqyoa@bWr咥ij .`Cn{OgĘo΁W jsAU؆ٓgfC,fRM: ¬")H`a-'|UB@xX, jYQlt+IС+J$lO r`'%<. Cy/2]앀zȆk2hڗQh3Et3fur:Ngړo6^_NGcd.K xޠGfyqFӓ[|4#W|Ni|'Ɠ^$3Sps:jKyv Y*g*^UW3ǻ̓2h*l)}>,',CZ9*Ն:XsvF!&v}%3Q-2dIo2(a4 1#Y2RD1ڬCi:)˹, )Gn%)@)x1v%߆W4cs7߿Wy ξɵ*!,P>?#ҤMmP 5xk<-!c3/Z) o> p̯J#fDǞbn\"= k&[,1F'/(NiuJPw"r=!R  IZ%O (8tϣ"aYK/n%H&P~{n~72+oeMY؎2 $sH袼3FI4Df*iØDz^{ix=ܔlt+io )DaŴ 1'Pa#7RVYD-v\x~'{%SۗθvJ2*د])~iZSDÃdػArqw&NJi;2Txɛ'l AwloDr(2e+Z v?M2g=X +2Гy'Kh)K4r{ɏpԁkZ߆=ż溌˪AQS.VDRvZs$#ba#7ۍU1G6 ͺrеpT3Oq dQGWp<,_AjOG;;(xԳkZ u:?Y#SɤAPV0&OrƫDZzJ[$jzzOCAi{B k,3VZh…;U;#6i = 4%WMh<Âd*H)aaP,Cv5i^cn{)wkh [,dQM'4QlW7]ye퐘 |zm놻Rro1x0@ hڇ:k@%h::{itp "46ϐY)T9< #ЫvOw#}~w'e2m8. 0m=Kt6S Wб\%FI]idv#,MCLr<fB=BՃH0sr> hl\B\Q*@^n[r4vqWžBf>viYƕ1M̵W&jIo8M&.sM^RNVM+~ ]E1j-Mj@t Ew@V͜tiS%9YZx$+Bi "gw;''C-ʺc 6|*U?PѨ{a3 C)[/vT,o Ɍ mAS`1˜Y,iP# zo1T;%dѳkU4ϤZ0$&F7-j#|$읾9;[-Z(.cLt4@crs-nS6~I[-E+މvpb{sL@Kx?WI'i ׅܞ STitUU6kG}j=3ߞ5  jF%؏yTZy}MGuRQGs-&kZҾ]7:}aӆ:ic}]LM2dk:<Դi5%-Vc w4nMO5jM{[mk)L֔!u܆b`s5FaxmkkIw){X9%rN?A~yRo>'ee[a(~hFVHm\y$a vx9wPK~~ܫwVFd+BaVH|g<0uܰ7o>y|'Yi}5?Y]JhtY[˷ wo::6i q ˟}}ޯX 0q8)cω;X0X.] bdx-Ën\,+XVҁrX,V,wbb[K}FH1&/JGY2f+R+MlmlBufu4lrdMhO괯ٿY8"]i"D# 7:WxK4m[#;W]..7 )fS_2Ǭg5suw1k/zQx3;9exWk㙤Ox@/Rm\rCo鸵Be)6Cokz (I΍3kGpȁanCt\i?U|8K'9{\vQuپGOwo]oI8P7kOS]oZzjJI-ĉuH"̒6=XV +AQ̠{f~=Y߾nfMGg ֲ1Vx%CN,ܧBȁZCo:u~X{*j W4]A MZY][f%Z]}P5ao 6Cu 6+[exm7_ O6'wt:FC% ;<0'_]v |>*oDK"9=حk=AKOoډݷS[sfk?js@Tx.o 袐iH6Q,dYۣ5tDkb.u4.5,:32ik '`ydL\[t,Pe1(P3h .Vkds ږ{Y2Se uM/dY%NUX06 BO)A?O/_c8CY˜bƂG(ivF3г23N =&P7?-+`zR% ho;#q\oj]M67uѥSDv A3]Jf{bds~ROfCA<u #vLZ8U "AVucBŅ"U%: M@uChJ;dnr/`5_Kx# 7ٛ0`#z셼Ю3KR’/3bGMա;` prOs!I\ cC /0gq~tZ6N'sZȓsͷFWc$ /n#L lL#b>Tްci !v8Rj cb%KQ(mZSu3%pf,ΆQS'Odģ a~5߆I2EI#B7u qW=:1 iYԌ.eij[<$c -EfxOH^DNY' @3}gu)\\`<~_rt ѹOFeŰWNS@[Ne qf v\A"F7f^)Vwg:>ȱxd'*(/3cw >Jx2L)?m~qCE+дcXd4;KHF{5NIӐ4s)A\|bRT=Eg5i= !-K:_0"nd@5f90S4Ye8@io{to;*O+NXw7ĩU,+ չv\!G؋f4 (]N =~eOӕAq|A(Z\ҊwyA%Pge!ht}RvJY8] >AF;B^[aAuq^r־YӸ1yut]?;EO #IqZс^~Ew[@ 7e?ysjnFCZNbeٗvos`8`yqm ba}Lb L/謄`dB=--zYb Gz]y 8i('!F35WdJa$T07+Z%5`0Akh& L؅C;\dj# x+@`fEVUSS:dΑht3?`4!(Iv=,|u*"$U% m-!*-7:ĈEVd% AǠ .@*֥7Vrh'3 ݇'FkkVZ.4vI!jO=rN,H˹X⩽( 5^Hpn5]"``°jTwsHB= 2nQHe 2,֩z[yNܥգW9AѬpau\x-;|?Y.6~>د^(3o _Mn3尵Nyh"-1 ]O;(q4j_2/A iyPmh1q 4+Ux2~lfIT j.KB Yf!Dw}CijPYjGDURy1\DQ Q[@{eY}133޶ɕj@v-헡c6{Dh.k0Z zërY|2zvCJnFP>#9yc8.SItAr:#o x3mjShG3G'{:[*PG.3DC%!/Y<xJʃ9L>4 2Edg*xp+ȼin;QK0F*V8O/3} Pۀ5[曣zVd`%Z`jO˾Kb8^?E^^{[ۯB6WW7 8]v+H8Z,XIYYt95x7<$ϖFp$"L~2>uAC:wpPX. 39CΙiQ# Ǻ F';eZT'˔]!P5kԥNB.HB$c~@ ݖc|DsQ\(V *2~k–:3y6l#Y CS 'À5_B?HړƓ盏OOۛO6"X]ﶟm>9t:gO= @N>Mur:׋ Qa j:Pu)2.AnE츁ufjTTREQ0-ei*iTZѠ6¨ܠ(^cXh ޅ~AƔ[x̳<5;`ܬqaUh^<$%Gpctec}׻(괣Γ'ϣg6>،NWg]VnwnF֞?~Y{Y>={nln{t.,OkgOǏמB+z71Eֈͽs-b; Ix0d_tb1d1Aؒs^8oV~E_ߌL9L&誜ȐZ`U ND ٞԴ02u,ѽ<|dյgo><~9mvk&F|0uo&y %A A{nօ4r[vBn(Z}=}^}p'kggj)Ų1KVM!z!twǯ>AV%rTE ~nqpt't98O;γN]ydsscuNԛNf5s p U099;7S?xzauLYΕhH1:!I#%" Hv3FvP`,,mLn0REFuETfGa{ DV*>XIxOq(A.I4r8D1*D%XmcYbI$8 ܁*enjWMߛkk)wy^R}C{ rV [A3OG+"w rW`0kjvmt!|{GЋC/F˿Ϣ_ܲ]Jߍak䰹z_K *Ckbヴuo xdgAVuJ[2NcE1onn$&xuƽv<0Q?FuRszOlo;,%iv r.ë\vfHV\*ih07v$cPdj7K'GuN &wYnE[|0j|.~κuL v,q3z眝۹-{>:3&楨BEP#Ή?=x[B{ d4 R7=F(ђ"5Ox5j##i#KaˤkE;PD FJãz/骉Bzd;\#@L&l*ێֱEfa (G21ϢDt`TZe^[^F5Y6O ʎ ݦD6yͤݷEҶZ`^aF:MQ! @jEB|sEhJ7>qFOFqT؍'@Ng媠~瑿aa0bc^a܆)Eܥ7f0uם0$};ķ:MjS7N{(MHB}Z}cTI5 H{)%Pf?4h_F̱Gf/0^B WQ>>(lgmr垍gӼ i BZ|Ym:C'ϒ{Q&_P%&1dذ;dZr ;p~$O{Dn:wGNJTkTc&1Ӵ֒އgd_hG[KGOl=pUɁ&H~#Hxj [ r0r#=EVs˗.w[xH߷Uo߹y/ 9qs&Ypr!;Q|lA,Ihu<":bW$ (6 [,LE%%-btE" I[JhǾ>Z6RfGS,qɼK L4[undҕ^(r<FN:Gp݇vТK7E:U'f - -InQ;)]֬>OLP w8QNe':ECKRTB2FC.G4  TA3^=\ phQ) CmU jg{ Q ㎝2+g^] zjA9>(/ȇi"H#Qc,}+/"Ҕ&cKz+$HA|uo" si~ߞط< %$ns#&2VG?2(Y`/Ӿaaz~L%HzE B5=>,ei2_-8$"45팬E殕΂qŗ7ӊ3}I.~&Ds|X S9^7 :E$XJ xAj:vѭ6&j-8+̤/åv[ʹx"Yyic+ JO@M7xd"E SWBF-JK~N`\uƐbRAND@|ua׀2oaԈ(t0֓͊99!A쳽ClL 1@zc$ SX'@~ ='6hÄ-^#9`0D cѕs@=Ǝ:]-&߻rci[ V>SVsW4>^Z,> i&G`9l1xKڹF^_ìxjт_VtV+rPuztJ<9UElDzHHjXoWնgv)C6Lo99-C #zv]rnD< W0TH ;xW(;VtԽ.'h;:,#i0 ͛jϜ<794[#x(8Kbp 6c0iWS\%Ծ @U\M 2 ѥ]\fo>s(:9i$Z Fi1~gۆjp{džC,^f1~[Ṙٹ7!5溩yska "7e+O<ǣ9tAhg#䬑-<2'l=(TѶ[XSڻě43}է9rM)6 35݅~OⰤ}{oRShԏѵz*lIV'N"AJ N_{rMv Oim\։VjjbA(u9,ꕀ+Ćc1aQ}Zk QJ?3ӽI5bYa|>ַ}=U6i I$SmҰy P ZU\>ig;jE@,^WNwߴG?VYIaϰEO9!*]DS];LZXMg #Ń]66ZS1Hu.za6/+ݹ؍ P׈ElؑfkDpL˾3N!slqEDcuߣ Q5c;7gO~ScA8m3Ţ8-yb'ho>L~Y$TbIZ6M3_xqXZ;U 8tՋO;_cCѠ턻:͢ç,R; 8{IY>o9q7O~Tv(:)7t\Bu@v l@R`vx&)O(4J3Gy˓u2 ,SHCIFoaG-OEO؁^1 }BvzA"`~Nfd`7BH- q}wܼٞRD \ ] Iw_3' /̼p1O=7FY3am&?}zρnQ\w6yg֫JZ(@;[i wQ|/]-(( #x#F 9Q~ܫ1JwB*Q}>}z10TiRXpaO|uI4Vjyք- qk~@z՟eHVr|=@Ľtqv)V4[ب[]YvQu݀aMGvK \{,~1v*Aeᤓ"r]3bm^c@3ݙ2WRe,v_^k֝_?ʓa ڹ^.ƹU`,W}qva_c0hW ݞrl|M9A<$,/+xzW{sqtR߭һ~$OFe84*?FA*ԵQHRq1}+v v{#9CG~uO~rN{X? Qt0nX1e0yy6)8Is~OR7ן&'kOorw ƂG)pt4b%=n>GrAvQi3x:LMg+`>IԲT0AVx@3=埾jåԻwZZXO|S{F}*q]$iF\ NØt8nOtSWjUhccuoe_-9\ڋu';9ZN<&]PP\GWhbߒO-Lзܧm @ KÁ:0SX2ֆӑSm֎;X^#a( vӳ >* C~AaSyhOLpaW֍u/$Μn$:iu`/~KK a|螥3>oFuR 8N-1ACc-O'G - yi6L:OeP^=8z[`!X@McfSTV_<^q `oJp4n97 .'`uˮc 1/!۶cJpQ|$u{/rⵍ+u~mWΉfjB)og\P+8hSNG\+)9\Fq;Ls)y6N`^H f" L˫ yÀɉTTQ_"OM$O 2_g;[|u۝q/w8 mAMz`P N! vc?ƲOYB><1[7 IāH5ڗp XR&9Xevj~yYG5罆Fw$\7ʎg~؀$bE%|eF0 iFc> d2^6KHc?efֆ0_]5&[A:la# ~(]Y @6^'*MDr T~lV AKG@ 0v7`CfIg&&/{yxDn 4*L8n8vgL&pIF N1,|L2<|ޭ흙/Ҋa ~Am#"3?jn,'T83Qy[qt:ظl]֧FYw JY<#IH &H1間n|6 fޢkU؍v;X0@1  "udq?*ǵmEXkKWoL^X6Wۧmiz[ۭ_ Ὺ HLh8v8nXEة2n}+a[:Z_xo>{.7:~و<{'"WG{?^߻E $D*0C.kTJHna8 D 8 Œ >'p*?ŽixF~y4D:m!8j^S_)JUUJ4+``6<$S@~1bLc fcFALkȇ71V/ ($UG)-H :4K`*@H$7Lt59OO`QuH vtosiu%N}_k╫iӚTc (70A.].{z+S!i,:tz:ئ :^5RT&:'KOY\Kb 0p eVx;@TW۳ݹ6sb<7 ,09+ l`9KycW$C\q#G*"'YIs*]ϖŪ"7Fe7]d.`d Pi)$-)ةq;YZvJ"8+BoV0{5 }QVϱFg7sXuqV5΂IAyKUyrO}QV&"WoQ+B"|6n ;jeYy &<ؐ/jT=eև GY]rZ&5dkt>q 52S8vh6<[?"_,4G yLEsYc:kh>v$xR bǧN-h.ˡvT¨L|Et#8e}?fpgO9/^Q<;&Q(K2hiőXUY^))ƭ6 !Q".<}psbXoզԁGٯ% h)(_[S|OtNG&0LGV!a8-$蚴9Ըf#'v2A68^ooy8Q0سY* EiWH,ʣ(5 Ye (ko%X/]7Už79#+/Ժ-8BGZSfV}7‘JѬ4h>2)G_cw3Rqo`Zo. n(Z(^L$NᨶjjFSM%mMR^ESۂ B_0x>F3f8ՎPϛLe fL76p 70=bzH?D~7th)|QyN}SEXkgOs/FGx%\=ahW`4cΗ40xu鱕:u/GF[w*[Õwm~;b[=zC+E*E=J;R2+TǏ /W~.[QA+HٔH )RA2LgP%p7x}X:B q{j[¡<#E§.4w2ϡ__#fdPm.۸ۛL7;nlT6V"D<--kH3*J~Ͱ yE:yb?l1/`T/'?۽燝=ą#@ WrC+mlxPo _S zjp M+|Z+XĿz5%@2∢)F`ƊFEBBoUP"uK'! V&ٰkg4 +lfj$ rPVTP)Cq;JԖ$6B8W582 v;p X&ROY>! 0`Ktq~$P<1!|^+@ק|NmbiPwv)_Ech47Ř&.J>ino |/sFr\$ ؄;sHwkiALbt uZiΜ$ NOEi6oN^ck gpJ''N3XdctN:? >'OSO? -]XH|6MЗYmgfĜЖ :9 9@&_u3T ^l9ݍQ[ؓs7zڡ~0L8.jc 9 ʓ,ګhcjgp?SNoѲIISl(Ny0Ko 0D m\F]UNwN ܹf~l唄MI$1orZh Tڡ>C`VwѯּWdOޭ{0E~QБSYk>52onrq tc4C/۾#sjQ_zH3jO#Ogt |úCYScs6џFRi[껍>L5U M~>&ZB8U} 7W.}-ςkKyspJқ{}:Zr##dd- ~0(Hۡ@#0uG&ѓEQ7nͨ)*Jo Dk{bN!?!Xp1d|BŹ@+Єk?o+?OY8nRn.mkz?C_0OG96ωa9Q0%^n|{0 Q|oRnw{Z0PZ0Bx%LGb}AުU6)w 6=O0a~zR:G UL*QI)x 7mt(lè&ʓט_эȸw%7:VSg ,bm|5%G. +n]Fԅe8/!?rS Sf6^/;Qxr2yyE3AqMu?mAeb.0ϱ:7Gn>^zqY2x5,B)T,F+X ""EjH"Vvgi42T\ZԉGc =6E,b\fB#eДOJx0\XM5E;Dpy8!ۅLTрˉ70 T2yQ6]P, "zzYpygSk^=t[KlgsWt-"A;,ڬWv$Kyx!b\^B G}$VpH6a]/5aGG~Ä-? `)F ܫX¼* ( I[GEe@ zRo< ,۸j+WgDN`^ax}otkv|_oȳg#`f̹3n)MKH|T%;w,6Y Zְ!MuBwǣt$(?"iBYLv X:@L]sB>ix}qmbz gS`<& <.$j녑i b3bEC5d\VذfxY9 Ow0Co0eu@Qtg.1 !Bmx\#$~DXqx1c \R[u.fK;Xy)s0B֞r4" @15glAG*,hPߜ ܻFd5LBe>"]ۻ]Afrԍ FgA7gr.PKaǻ,iy44l2#L߮ gy`z-:җ>^;1z 2$bqS?8\$8fLL- 2kvjتQFX`:Z-UT 2n%"{{Sb!KʇxIe˥}QM<-|)$8lgb)YE0_0G^rC%l\Vi`<&ޜvz&+sĄ Qa .#/;{!R2Dvfʺ#z8 ],(F]>AdlBhI [NC>ݻ)H\ +@Vw{X / &,\ ٻ>DklykR\Cn4S64 Loķ(XlEb U{FMMbr&!dv6֙PpH! aC% 7ki YH2-fV=hL妧 &,G&6鱓(9ENJ1}G1:Kx0Y7Q 0Wx(8ist% bA'14 6X_BygQ ?_II45eI[Kz-|G._S3#VjH"n]ED&EOu8(jdvdԣimQ]l: Jks;4_ʼncKA+%+'zH H dnFW?>N >\G 3|̃]AwVH -`8"|g63\*^m4+fF. C0_˰Q2l W,n9"P#0<}(3tC8\(Ρ -)ri5ͺ|ϼ˔ٱ\Chb%9cnYAyX_>W$TAϞlubO!v:7Hخ- KA`Cu \/{&jnvZf E b>䝆SqK=Egc 8i@̑=&J^rj ěbtщPv򩕆[-䞱2SR() kD ok GG =?zA-[*QSbA"8$Tm\_ ˵ƚ!pR(R", 'Y-=wÍc*mcvms52ݫbI2c<2c&9*8W%څ3 mxE]syU1*x_>1#B$XS 5:5x/@tD Gh{e]ihgOPG6:;a'Nv!oݎ%M1 OJܒF$ͯmMlOy t=L]šO;2_}) ,$i:b˰G^XnPDV}+Y%"5HHp֐JNub d%'iZ ɄN?Nw^o[7\^_l^[#=R‡WѮ&电s/V\l$mm9,vVٵm[ $OԸ1ވm߽DOO{cOo7kD`K-wltM3鍧ʟY<>}8+~O7V/l7Olw!ckp"SygykV/+Auµlh;/Èˡq\fge4QNJ>uS_O4mn>}Oo,+=Ƥ}΢.oW)&Ѹ˨G^!(˰fqDb٤Ps%#h6B:TWTɠ7Ej<uɉ[\F # `A4ݢf)sFҦƹ{Qr>Eہ*DDEHBAjH QP_匆@Έ@G3qmJLuf?֓#7yqn3"5,v\F7P2BGڀ=Q ixᚁ6 FS{&7])E >BYUqE>&☻4qR*~\?z[۫?˪=:^{*{,?k/OG\i@ezU9YU:W ٮנw]cD,8:mCd4+"fYvJͧX.@ذ]56k+$4Էdv޲F ;f򁷓:y4#v]*LfCYs>PuaI kHp{^NUGruld;YNֽudN.D@f~>bVPaWXkO:E,;]e<F +>Mٝy$юh忡74hW_}/;U1$ЩƆ u(=AphU\;ǐ?.Y; D2=zaQʿAN-*<#I'F.S!d\vAZ3'\Ar7N`r5u-r A]GD[6ָF>dwY2-QҒXzwy}>ws}>ws}>ws}>ws}>wsX