#!/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=e5847d0ef5308518241626145c950393 # 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 #pl6Fz6L!s]mio^/+\5ȲN5} 3BҧHjA&p6ޫ Nm_ρAIɀz:Wv8̫SsF; $qS32uiq5~} :0Kbam`G( ҃ʮ/4h7P$6uFa\vϵ~G¹MjMj0zE2TYވUR+XVGp0SfC\HRVoSYFAtݎ͜j\:ep' C̸YέV гJW3G` `;iraJ_O?5+G_Zr!nT%GՊ|bS*) c&K";FSToU~})_1;܃[x"?}]pg{d^ȷ))nInmw\:{S}|Q=,y.vOfyc^W2f(aA*j,0#Vc8*L^Yڰc@`V*?5HwޠeU*1} ,W*Z_op NJeoyY{_F;9CcU@bTz@FA), {h[9GJB&|3ŗ~VV^xB>A9YtJ){-evU¥!()SsBqqL/0i=5o5<3Jn NƜ梊 <ƱT-棤s"3hܾaĢBnB) g[?i`v*8=ƥhy! ]ĊS6*^˜W Z 'o]SFAQrD6+JxoȀl߹?S0ů‚x E-$J@[OA< n@H $=-i@y򑊣}@0J"@\R|1n9 %hZaCKRA갮^$TvZLya"ZupJ4䎀zBOf4 %Cm +: tEƾMOS~}V~**PY&A8ہ@A)JLix_T0 XA14cs{?Smu!,5H8I6gI~,X]{XYr2BXt( s< BD0\Z,Nhueh$P?AôgPp7䛇c,@V#o@2HpKF]h`"bݕ(t,w,;a;Q%}p* *0L6Yqn! tE S2Ɯ쇼Ϟೡ8㞿3 Х"IpJ7+Į[ p&ƐpE*6})KcE[QɩDRbF־{8QI/رZG1~8&)3UPdv#p8)Z#.3~T?59t5`{7 eZk?r pcK;N.w Vۼ QspQiU7eqj'v ?mdcezN xdR-jFZB#侞ҹhx&c;Fޞa/"!= K]o_pw[y$Q )ٔ&U)*'Вw?Qb'DV ܌#n'fƹxcS!6T!x%`֛X:h:d Whq$G[XDk᪋cP1DeOt "J&^؏01E{O2|x<#fmg % E? 1^nbFnVn~_168?9mZw<]~;;_qۑW#ʄ>9m}2+jՔ/oG:핵sYaR K&s>-J-*Z|";4~|{*7 ŭ,;G.w#^s*10٥X|C^oƗajL~bv/ [gVȕ<ŊT( L^D>ٖ?&(@9a[8fb޶ٙ˶1At>G&QE|'y7@HRFR kJ:hຯ.Ox6f8oNG|zIܯoГʈ<7 Xfw[I=S 2:iøT`t5dՅd=X"KHrwe1^ЄRv^u$Y BtfZXe3 sW#6^2o:zS]պ{_8½DdFiilhRϋ74,rf~,A{92 k8BJ ]wltP%l%'UZ,@WR;sH-fRArg>ewaUO`K]? }G֩?F7-(x;sh"=z>[AWcoN/zqBb&(:m"UIaAMc%@ 㩁=u2Ka`(7R}rgn%_+4Wn nI4xS9 q39 wmϽl:A Vc鞱OR{ C*Pw5>czxa!ZF.:}Hr6Cg4Rܼ,;$7.a1 QoO5|ХF>);n9Ə~X΅ 6(C+{X` H)?K&X|Q&bEҒ .N=S`R ,:Ng:ύc /%WA'՟r)5{Cb?mH"07)J=*yzO%oq(Zm2/ہ௼%vF*/$IT}lm2I>JйE[v9' /kCWm'"R`DMTmM8EK"LdQD6 '$"(,ݯ zo)>SL9$wrScW kz}$JJ(.cMѮLi6<\,i,anģ,ʳ5^J2w Y}/ٻL#ضj.~U?>9PQE{.dWO &j䳙QQǎc;$c!i&ϸH8D#lT@ITj._,aT&+KOܨi;sILg.yt+H&%z s5~s[I{|{\ufugslJy윐5/F3Eʺ][:l <l0AC*sWеg3Qb1^z@Fjw &[&/K+Jw ԗDV6Wn$q/@v֐X l~^&hb_(}GQV{NꍹYA`H+cEʍ"|+jkEry eQ#6 GMʢv8v"vy3x#qKItg-uSog]SAvH[`㙲j2?:^ ߞ?X..U5ՏjuuB~(1(8N9~ xBb(G{7{z,15ѣlOz .pD:FW Lם)4"hVԅSŒx 8O/Q#p05t^[Y)T 4D7,u< 0\ȼ Q\\,9s4oW`Dc[o)^f;!9"ÏFH P%th4d-:M6hb0vߩXeLau!|2 fm=69M)7ZQ3Bv5YIݪ"`YMbNDK5.pȎN]F11C-\ -+T$ϘEoF.0!߉:!'Xyx tnp+`i.g9BnIjDŗXAGhr-1 8D5]P_ UpܚDKȫq)N,(ӛ|-u<1 zh5\j")"l0t6ozc&I TsX=/ IXIRVoii/o2?'N_qsÓ߀ɅZ`tE|EwdD3 cF̆ ހ>b)j+:A=Sϖ^s  yfqwӻtd&B+0D|FjHvN؞$qY?Ol\a0<Jl7E`K8ԂȰ;O`p_fdvPm.Ǹ?f77;T+B.Vv59\`!% E&o9@Y^Yg/e(&kvao@rgx-ҝq`[*%]QffY=KvJUO^PJ@ry0+X++O)ɒJMj! S1OmbiP{/|9cLH^׺Gs{CQ@$#~Km6H„Mxbv_yqwXIhCWy'e?}b(m3c1]Bv;5O+ \C)Ʃ'i+ezE =9?0]Kg& c1},yO|uGwE$Pt9c-pkBL?9@(PUj߯A~ S>_Nþ0Ato:%\k+7eƻ֑)~v6l^/-}\rcIי2U3@/-QFL@R˾BRFwVyvXFT *K*j^ F.79ւPB\z8q2I N`]S#')%%IĞ) @- PZ.BӃ67lAe4{q8D+ SiQImev:oFþ ׯֽWf_;)VOJ)E ڶ5Qo8.KF"#O+,Q:..7N"ZDq A6F91Cܩo"Z(Rm(FnUmvxd!}&u]Ȯ!|Njc .`ᨢkNF@ď$ꯃFH|= ÐF# 6!0X كa`0?!<7BNl879^ 'g"]a/⠏0F˹UƠBդJl&ʽY8B.ˆ[4'( 8 ѹg+%Fi{]nn(C{ā~cgi.<ЇMls.26=[VΩpt/ o>9|V.inϙbFU095=ۆ.0'&H"shU.J< J ,vɾIa\z)@BzX1iyi(3(Iu̴C,> bkg#2P6JkXV.3[kmFĭQS3@ǐ51pY2`Qbe%XlZ)ĈQtGs'.ИbFi%ƕ%kl&'G]sbNmXFuQ,НvtaT|7IJ*Ҡ*|l#;Ce[JnWwn `'@`zdhJ qIra/om@^^Cѷǡflʙ-nQU5ʘX,e=3L6G>ItP)Tl4: I|yBp;ԝ58~LѱC%šC.v(ɓJҏ1}Fp~:d}&!CYy*Ghn$ֵ 11d PW' og(;,c߈?C7  x!SZ̊xlljЁіwBCmfN2Ԓe:\_x%b> RkXi5\*`F#X:/>?`WAFN3tZ**Zl#gt F8i9(,nOۂ# 7-y^կ *(D.]&DLwUHHR*PK)Y$j# _ӠO;X<]SV.8<,U5s(YCǺ|uՓF& sAY?~3+ G}R?iGTWBB!ah i7{wRTF?$c؅kb膢}L&$Y>>,YڥRpsV)H6}v@meh_ױoK ڃfG"-<3Qz;K\L>gF| =XH-Gaj얩#0~𜲄ұ*)H!gtc|/Ca÷83T)b Êckaބ٘C=֓!dPh}H a&g1:ldƓ$%io'y*6n))~r`p(LEYYn l*A(]ߡ"Sf]\zc)v;̘}Dk=٦} >2y}j) :N La]ȴOB~L#R'yzM7ý؃ߨ[T) q3Eӗ;'5/Z^T4z[49JkWЂkw)jƢ&]O/G A#)16Hm:Ha37!}&|BN,J:=2_:sYt@HC)U\J_\ bHJp;ucD3'3Ht&WiXγ.[5/?4g`!Aԓk>iV)nFY!ԍź9_z N꯺t-~mK'P+Yylm[1},zZ3>_azwţE&_a6dɲ^]=JV` O;%% Yev?33r8ղ {IR-6%@Ds]6ˇVA_4jns`0h䴅nG5hiLinș=ULV{c'VU|8ax.yD?\N`8?9QjndGʌCVsdE]1`)LeLeڸQ{9^`6޺<;#5+eR=8uL.FPH' `w^ձ{oc1)&\ѻe~rؘo¸(6ىrqȗFDQK`)&KW/EUQN@|{~ tx)WQTvc !%<g؏A :`w%17<+R8T18 x>bN4F쉘hKrq82`7lǡM׻7s[&g|X|G4 LV7;#Cu5@ŕ={ .fc*TA^~ KD@']MhS;EKf~$njeԼG׎Gl,2 , |hP_@m`$q/ O]7I&c&G-d+-UV3~N} KZ<_i2:fX&Ai|Ω">/줳gcln"?cJ5#fΞ;[ʺg d|tY;h~2뱃huݦx. ɤe9Xv 3/ۻІ5xKrcAL|ld=,VDTw:^]A8j녑eF CLfŠ"N øWa;c^&0=f(oF)u 晋A,,iќO,JJ59uPac|{Nqt@.+XEis4!/mRWN>Ë(@2=O o6u2LNIi$L&=4ޟ<{tf9߽AgZ}oFeNCLg]D_7&F ƐzAV,Ԩ]c ,Ç?;wazDQ)X '_䣥x0 Dp3r9A;KN3RI0-~4/N m> ~|5Il*.#XIIA(6aN%7s z}?g fI&>wY-"RynQvF&b?Re}wS dIV&R~篂HL̵N^\o+O˹_ʒD3٬-d߰_^ppB %5gMgG?J vc oA7ٙ+ bG% OY4` A*=K!~ꉸJ,HC`ӝ_ FjV)_)H\LMqfW.R8ؗ{X 0/r WDiƸOJIq[=0$jTK6/Ӏ0}A˜IF^-C4.&-~ir8>id՟e5xU+fLe=abƍZv)¬;<+-q^%~|]dVZUTNT6(;BV?){v@r>c)!IpF4^gm1 51[6'/9!9˽6InܬK80a jpr혖q3[(HLv9C,n%'+Sa/_(kΧ1&¯}_i۵;~u?)qg3UEg7YZ25_Py0δ No&D[|h zgR7H KŌ&=Et"w A>ihյN9Е[*˩9-UI_Kdc45iH+$T| z1С2(ExB᫐MQ*~nCr 漾Q\wbBb_)"+E"kn8)zQy_EU=sl;cuSZ `c*xe\/KV%b[bKxc!"@xzt `|, :b]6 :Hjޑ/d1IJߥKآPX 0F %_':ʘ01I (rձ1f2L&bQMb^.]D ʎL|Rn+ wE]s4=0{UTf*.Mg!qJ 5̚S&ps|NW՝fx5?<h4Fvٮ?C#{ou'<~y7OMUu{xxr%# ݺ?}I.MrtH7h `bO[2_}) ,$FR4eou&z0{LeEJ!\pѐ&,=AJO҆ oƚZZ\^_~]o5Oeue)8ma6%)gzk<)ďkQc>RxA, |s_s:e\{zKy+O^3_gG[6m?JX߼| *r& pD.\u.}P)r~}Hmڮ~vRDJ*Χ@YmQ IwV'Kr)a02_1mW IYaD$9QG9E t=w'B(Bmՙh;ƘJH`8 6Mh\y,G^ɹl2;wS IY`b흢aӳ0?8dPhۃ {M%is=?FRUB?'HmiPQl6wVW֫-*:=:+^ _<$a27f*>A`D4-o{yd ƫlVGn=Y}dus'qiT(/)uY·~^WaPmƀ'A #+ 29(E)Yon/l~sgt p'G[($F J|Cm}7\/mYQ(؞l8֫ƁzR0E6@LIS(S#M €`&=eA FՄܣ+kl8\V~v J"BA X׫@tVŃl,ަ9R\O~"B-X-cenY8rkB,C>#i茲xhQڬw Uv8Id_L pyU~3W 1cD':&OQ/;kw[&98'*L!:U '5ϼCA)-RdM&FK+%N|>:9xWU3B}8 /0KlpN4CtU5P#J {Ldel)Ao@wW(8( +0=++;>=iQէ '^v&Sa=#CFGo^h*M)%1itD8<`"̧jYj,S~l+X?ZKkY?De4AzPNjiL gMIGq40]jLǎh΂6"lVap"qa`V:>ī06 6B< oXsZu8 L,w(_'QHA$l# 4q3!̗dž007c[glַk[Va|"}Eo1CMZr1B5dwSkʴ`b` 1p"]OT֪:nKye y T~O*^J +ub簄 Z`?tzC,'Ēve geŴUkƦs20+4[x6%:`\R0@M!u҇ ZL9Xőe-S)iBb tZy~K(A'cgd }^N9LRWTM=Y6hb ߺ+7*Be8)'6C>L)Eg2j6cqӉn$ D|&Qj%KhzƆԿdk:?[ TUPYIu۪Ri0 Gk[>Ff֝5 Ki0QE*<}M8Qe;`ۖJzyD@uzn۫$/V1%f/%- | W茸 u^H„Q2FMtA͞mxY̊%2ő8Ff"q6J(L &cX7B͜Qj@ s={8n/wY,~<ƌBr*úo\lц&̵OؙU /ed0ɞ 8Dśqyxmƨ8U* ˈr}urf?~vJjd.Hfkdp3AߝP_GuZǠlhbU T9?PӨ{f+U C)[/DܽǸ+#o!R1fq ^naO'uzh %΢P ݵCgR-b[m$O7>gg[ѻEҊp;'3?O[(nw_W_8+kf!"$#^;a$ȁ8}b/1uYua%w&(Uy'հFInyoO̷_u]} Ÿ sS}QcިowOi:Z',,=mxe_o&%g }ީ͍Uw1=m<əi˟;v=mkr 'dOP6&2#lLmڽkҿ{|]+rZVQk7JR09[e4:)lXh[L r)laU?w2vܠʹ@~D#Ve/pwS|=ۓVg cCߌv R,/hӪu/j/и.ya+)+v@S * hIHdv{TYZkQ?>z|ELw'y>m{fX V4/czŃ} [7ڏ 諮QI@x]k졤k8UѹZR?uE$|&=U]cVWQWQ%C.x/~>nk[)ǛOߵ;ý=6/3"0/-^.,(oT嗭ӓ=cXk[X[B,qΓxHE֦6Dҿ_HǏ$6$??^0^}܂&guk@ug [1C|yU[V8LVaINSŧjEmnjd4ےՓ͍j0B?\Fz[?lYl|y?݃znOWg}{93+ 5mN{֟*'xNO;2硝^گjF[ji#';UXTaVhܩ¦VOJIG)x?_՛f;U 1*cI-JhqZ;ivkC꾲"TE[UqY # GYž:=(Datv1`*'PC/dhB'}h4Nd k`R=}\[0kk/uxW7ܠ[om KMT+ck~lTmNuDb>42J u#MIue٦K6Dk"ȭB  8"ȥqYGfLR+p T;Zv 'e+kjh#;D;;WtϮ rg5P_Gl0)ե|<\ыc; :;K/pgƠ>A3?v_<[7Pw_OM4hE P:.ŌolwZBڵ6/k3t8Ujɜw\*f-nȞyQ:!u #qD]F )Bx"aYtE>*R'|BnOpm8rD QYk2bi|9D:̌nBUհ[x?+܍S;9v%PAA4ŖYp5%{Egʓ!ΎUa=zru(Fhm3(?=l0?wCWT(QPxQlMfj_=_"VOi1Rk!١@Ҭtitl.A9g{FK֐J081Z:%ָKZ JkxpGv Izfh{(Ogkl'*ӽc–P}cs4ܯ%9M!ғQhl3B=*CKQ*S\}$61%CAP%_ 7r*eus|x\ʎ)R3$Ce.cIӎƓc E>qJ <*s u=8FcjG?|hWl/l>ل3Yq5<dws*?XVIxaPocw &U|G+5ɞ0h2Pb)ꉟ@]﷏=tȇDa|͊Nȗ"7LL[?.hmȤl24Q^OEZj ?vɸqw; %!!s$t"b킱O+#M90֤xm4Wإ!Mu=Ajε.C@|14?lLj[24q[ٹ -P&Q3hD0lwO iKX-!faagQQ-b/K0G :E^#^vb@sPNl"uG!hBy']jo˪-/`-D@Fʮ^@_kIQHU*Ѳ՞ 2O1dj:!ۋ0]G{Rt9e4 ]\SYh7Z_rs%ft.$8LdNA손u0r 3~htNk:/]O?V'c;K^"66SN-'SD1**LJ< Yv3 5 '̒BCPTVe4*?l[ 32-Fqcr& :p3!! 6OF#1$)D5쐋?@1:;A">}#8ϲ7$vĶW2a\Ũ/2n5gcW@{$1 B7xaψv% K l+L=2EBbȇ ,I HL;KMGҒUq.cKKYKQJ$>'&OE?:E2lY >=|gh?[[?Gl~fx=iϟHflؠ;dnK^y[}0;}>~>n9[2?ߟ?c*?le_Z GPgoB1~KmVz&gk0X(JQ vSZ8d #h`] l08(f-ȓ_-Iʅ@G؝t x=+KuNa FШu`= ˰qWO$(;ST A "AL)~njDSsPmլJd4V.IT Uu$'ѷG};K12B(fD1g~ëPq5R9Mip[= P!$=x~ySk5| ƾzNu^5T]UG:>jG􈝻r 5 vN5ޞ/F<<9hBco0QhU˲P i:~+Y{T! ^]]J bÇՋ >ءPȗZ\`/H lmM1K;m`'l)gY_W*zu%)-^%l+{;zIs̈́X^Ly)1`AoS'xbwJY{ٯ#=?bٗd>)~`xSP:Y)i)BM1ľORB\}Yd1, ń#4Z2K<! +#e*r2r.94Q?=*%Rasp]ݮmx9v ю5'09GXLCӵ3f^ga͎KW]|iNFaFL<1^{ʿ,,au[nݚ=Eұ^`_aGLYqp:kWfBvC E&vd"šԸ9i4ǻ7X k&2`D<:=,ݥ7a8M0D}gYl0oRʼqG R{YO:oo=ov܇?ۻڡZe{ (\Q6A8 cMo~z%X2V9( Y;4HTgl!r65d>|f1QR,&>Nj]Β\/.؎ӛO;Q)Է *9SLՖ;KbIk9,oW[~At5gr INF:+f%M0Ӆ<t9.r1-楋Zn\m{. K~k )r# M)sd-bG%zxxetĮIP8>YH<'i1ZJZD l0VaҺ`HkS,K]J`ݲ &S c AJ:09<$ Žd]Ld@\-Rw x#Mi5;W5VhmKLQk/K81Bk݈':PVdncE#&⎁O"I6w`d:+I2:j9DT_a= ;iX_R{{kXq@a\YBsTQq0Xp^mˠ3D~A="Ԉ8IyVo9Ai3DK)ųl>\\F&k\]o魸FP[~!{M4x7%l蛬W#!./З51mT'x32Gq8=)˟Un< 8zQXۜ?RBZn>b5-`@$=^')Y.N-ϕQ`_ Սz9 p|#aK@e8UqAPTgQqX? hpWVǛb#WHDĵ0?8Ȭdpѣ33} `z~L%HzE jz|XV2eZpP1+IɓӘn[oTYd!ܪ-w_,GN+dK5P&XtO`_PwIGD]}-4Ntx),Okn#D@]TmDeԍC.IFYz`v,9y9`'q(ٌl U3h?~AhH@ ="B첔_wa $}찇2 Cħl ;l9_DA/dמZ)EIQй [BCyjfOr h9۪H~6S$ qw`*o10@~ #{7_uciy 4n? ]LU>%|j8?y|c0cIiFK \,q,љ+L%eiY'Ote^3*KM b e0<opgrlpp_^8tEZXm8&7l&NG9D遼;dRny\͍ IGʽiv6#J[ӡ($ch4G)fLd,ps KHx># v5kN;sGs1&l-8hfR7s{[*T<"ʁ4q+ n:NT̛ )^ H] @ġt,"}oG7f'S.DN怿l<g[E$]18(Q:N0v&sRA !6^s UzDA@JIE-_ TmQaAVv':qV6@6:yF'LIXlpg!{\~/t3|EpZk}3[`kx`;<lÜ4u5χADY+9_~}W¡ lNkuSF/ 8;>aɓ P(sfC2UT:zPxuZ]KR~P&Fc W٦9<ͮކ8$Mi\1$!? esp9_&+y'*O[Qh0Y*JJqљñf1i$tu-|g m6бP79jE ThwjN])VY?q,ÐQ#:Ԛx!Hnz0qWe喤rKߗ]/}]'(LWA{x /niv~yūZ)bೊg_g]Cbp~O(kв1aXkj#f+i!7LԮg-U6L99 -C7=VAj#GXxS%1+5: LDULXO$d\|`zўX6؍EΓ8q$2+]ogb:,d[xX8ꆯ›.:hՋni|THK3\+vk;c.kcLw {Fܰ=-7<0] ںgiNbCg) fM#9E)\ 攊៍GtUo;z)y|&FV/+{Ӡ-1㗩d4$'ź`zG.:,Z1_xgpllFϲz[Y]/ ]m7 ,/y^;1 ? My>Piՙ}Jc\@U'Hz36l,.Jb3I|뮒B/Ib+ d:lQ)$azEr΋Sv@$F6w-2" k0L e2ԒvĺqTM7դH;K av=ov^0@!_Hoo[hyS~{Ɨ>W>NCЏ%>},zBp" #  +?#x4 GMZu֮2?#J*P6WۇMlv6h Vw;Gh.FyrEYC|рWt 3˟4tKb%Xm c4I++ z߂+s>D8sGtefﳙr%FAi1~wdžjx{f17Hy:a8zXLn]y!fi%6C}K]Z9>}M^v^ϓ1p<:(XߝC7~_5G愭U`Ej\{x&B'/ UNfdpkʺ Oh9"ON{eRFFB^$PGlA͙MX22rK['Z)`kU,&m,pWѤE92 /,toSdWܰ >>q*4W}` $3ml 1-: Z>brTw<$ժ(Y:@k,^N꯺Gs4,zSMJFbT}k{)% 5 /&pOĠp'ꘚWGw9@cxU΅(=6g6#NL%otd,A;p>gyؔSKy P|-`dၷ4y2݌Gr5p@vl@ݙ &#FhN=<4Sy6רY4z\,O4/LE"-%e;x ?K¤?bz-dv`S_ r=8k7߃=wlGǴ} 7pAt;?;ҿGA>n>ןnn>Vu Y7/++@Ug w1:-4;W𱂆o?Z3ŇItE?TWΖ?\N2Ҥqic-e.=/3liH#|}7Y0ŶE67r껦? tIsH-黷~t)pc 7X7H[óGI}ϟiЛ2: ga,_2{h0 aP΢`M~/qMExJ 7uE1v^g]]MT;t?V?TcyWK jo2zl8hGFqy qVaלɏXvO+@PdHJ0Z?e"bi/'jI~l%)LNDVdSE&[e8?5'ު7v;F#+)Ĺjt_5jŌz%FOcf:AQo..&mΫ]_I," ?IIB* nB̺[j|as~Lؤt| `"]`,BS.i^ݪ73RL}$pB)Fs+![ve> %;aQur 1 vRj$14'3#ǗQ$FM i΁ 5֋ܱ 'ň\}x%s@0RP_{*~"'/k'~?>4ޞ`r{Pޒ=n i"8н ,Q.Ji~n^M/&y/mdA8aY(' :|ƾS *1f^d,MK&4}g hIݮR0geVؖHf!q*3Bɇq@(![7|(B?Q),* U\KkʆS"2gj3LIPٱx>&cZVKK1owGf{<:nd(k2=(ݹzqlKGgjf_^&[ᓥHZEaH]FGm,>3I&Y7gUH/iAzX~2\l_tX"и4^ @xSAK.T'} Ez@3z@Szs2V= 0c008n*wPN7ӸՔCv>Ŝ율 1[C'y 2h[_8;_hR,–XI<(]$m[N0q=swMe뭹\?=n)_vaT"k.)R:^8bfbd~5ig `bEigr8((?yZ9.}qا]I3[Qeڕ WgF.7:k::|.yj0Xъj9јUd\ 㭵{?k`%Y!ؒFocM2I$<[' 0;/}D@3SvcIZ~PE&HjHjܝ2Hգ.JI;=_c7hpI{]SEKզ6w-Aheu`+6K E韅JIL |K$fe5gCM>L)`y|a=d|w$g2 k Ca#uY˻ cQ-7KZHZhedGՏI-nϠ#_C:l6QN]Ch3&~ɝоpڌ nBkx|Gr&FqhҐ({a.4@M\h;" j 7OH+}$ȼ;S-iXjscJ8@H_sWTV])"*tB@˻`V^w>.=ZK_oG@twX;)Rrv^msW (+=:1齡#%%O{~jyaWLjc|BSk"*U:\$)\'U̇@oniN|X|">)fxbrʑz;[qݱ$$ndI^Ȍ K3s\r<:tuu_smhT mYqVl>Zyfgzeu6 Uҥ!Kk6tu  Wf" ҙxI ň'0n) \b ;I(MeZB#ҹkecGuQ`QGۛ skOt0  zD!:61<)pGbL.81)aOnQl"1갊OO=IS8a0̽ː CQ|!**>c3 zFjuob4xŸBoh 2ݬ E\99r K#^Ftr bQXq0Xb4NGsTkxdOoaI¸*R⎣,N:NV0oV øPae :9!58EU񪝂j-90C6D_i4L#2]i&bkxIq_e^,}Ko.t&dk9fg 8G4G J>L#C8j(1MD9cIM%%8l (@ɵ b/RV]DY]# @Z gUlsڬW޹Zr7?8~Qh>okw{{x;\f=0K20Ãяۚr2^OOkdRG Nj:)Y8SB`FfQ7rd$DhM- (o5NG@ FW= $~638sGaqЧhoAp92 B)A0K(R9GڬaXk[]4\B;R6yxـ1mmQ#{N)~Y,~uUa)]NfGG49 HTe֫ku8`lFJ" EA zA )W-mT om7n=:; 7õkY8;aub*$& V+&+qYw"pd 3ffk_$2MJM2l( 1;Td9%@]\e꤃Br_PuFx@Q,l Pa+Nz@ۃG;OSyP捣㣆b $%WNǚGO7k0aqo{i㧛[Zѷx*ͳG۽'[As㭧}⧏hkѣg0x2M1vbL,I9@ y |@D5$Wb”j?)FFP,o-!H%Ai (0"z>& HsFdk{{ ϣk[Omm=7ӳp}kD |V`RXoSFNyMZaC2HcuWӄWuaO^4UGMLyvz Prvtkc}<<_ 9kLA-uAi Nȸۓe1fUFb#Qg#ɠprL)ǽ$x 7kp= [[kO6zgO: /eˉ&Up.cd=Qr 3'O7o~.DƐ]BW$䊄:t^HdG. 쎃O':t;d.4Ch28>჆7B`v!I33%Qa Qdq^Ѱ՛7!'s; UMQ>n^\_K|tg|Njђv rA?ri#lT{u~mkh<*H)qݩ-߄r#=2+~EwrU\ZYGgG>xsPAϿ/zj-Ǐ{g|fuGgj8F·o_*ɱgfx!Ec-F+K4֊)&h 9`e%$\4 {,G-#1|7.Y(6 1m1P2&O)w|t\=UO 5 Kfl N٩$ d0vWD&4LʭQ.6q5( Ww2zG!'$/5Fj<%h?0)7f({81e1&B$D/JD}exȠO?Xɂ=UEMP7w'Z͗:>O #uԏ8q ,Pw^Վީd<<9hBs~vi6e<7^4;Aف2u_F ~֞7wf{{q܂vj4:9m 'lOSF*~?WhQp7`蕊Tk;8' C<(C;F _aM0Z]YZm7K_;8ͪxO[C8,twS_ӊ˭I{WiN ~SΡX3(N&^2SVYG8aq6kAPVo^5y WVKцwb#,$U5^4_6 |i%ضf 4k&#ÍzqU5_&^ 6tWt UBU(p\.rwk˥~e>kNNwDy_ Ҧgb'?$㳮>>m\uӭ}^vP$_.*2&?[X}R=@o/D@ǫsyu{|%%C?K^ qԃsgb(>`0D r* rq{KϰcqX2K71)HUyYOUPJؚA -@}?MV{ X4[ӎ-)6Dwph.R UkzUEF~`sY:=AtQy6;BNFWpDUezћJ+ҫBbb$e^ԯ4w9Ap^i Иڔ+e*vRAD8 ]` A,zsrN,NETϴ*EODǿ+F:ߛG߫gϼn mXn:<P;Vi,dR&bQW2C%Jt^Yܵ3).z5)ihN>TckLيHo)Nbn>* 5s`^$[4kn|d.;? ;4~7NxC9ܞ]B #{x0Ȇ>* "Y7;{/˺$bm4DyIU!EK["pJF{¾ y> emv*L`[y8׆loLiq ~cV" ɨO5yM&͘ azx',o ~̌.y l2w[—I $)0V$.+߆o îrU(8qo\)C2,1~L JZ kc%m9CrSk=އU0q/:F +VGN3Oֶ?s?s?s?s?s?iX