#!/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 sudo apt-get install dkms." 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=34da68868e629106a24dbed5fd1210b5 # 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 [^]mwH֯qv}0`;q2[; vsBb$-nUud dyZ{juK/=g\[-Tvw++}MLr~^IX͝yuZUJr.6 zS3ǝ21gwkOf3=VPӹh=@rX;㦊PZOqL] &6G5 n'*H} A%+-(?YOmXkN::y\W{ZMՏXtM+}:%33]#iuZɾ 4;m0Ō}D <8U%) _uݽ#NBȜ؛MR1 fnpӲ']d`Gxz Pmݹ3r,bvŚ 6V `HlG"G9\Q< Fscг I9I B LL@7+@1V؝+ >`Ioug0,CczX_g/E Cxp{9`\S!G(@\hS'dxa檜t 7=Ϝw0.l\)!4tB/C3}kBb0H'ows2ݼq&`_苂l^$Q{lLFȊ:w+TK<_>031;ȳR\-1՟0 ? ' cD <$0,A,<' i, ,>* 5"W[5ϧˠe2(z z^1gSwΙAːffP2%x3_ ֑S^9CCf\ 45o+(+S*I3b OS9WVON ~/VU(jH?j }Z!]6W'UR]Ikm4v)ve)S$[U!dk,SvzJen-5_27kh|ϫ8yh5]T&̚75}MWt\ lW%:[uӵB֨$8dKUҨ}+q֎sZOjÇ4'{}:ݿ&L&] j| *?:8z')>,jAT;1PTkjAG!wV+tCYZiԼ!`/7Wk ]{F]|m$ҬNo7SB,+͘mg:`;Ą h<ƼWY_WOgLwkxYoaۻP4!+v G39v<MTRڃ4N!g.i7'_V8[׎iM 02h2XVXͥtq&f ~_O6(X)IN&ymPH9@֓7 Ez'͓0v%zNF%4i%$O5Ow̞ن(њ1h|HUw~5΍ʪ^\3$MP[ M,#=Q\<[ .G?W~1t-cYҥDwl[}CbB rl;WQrZ,F. &l3>?Bx&;>zg`l1 hoXE: N@7 ǾY}[CUL 7堈J{mGx.2@B BXB4q|;(V!Ǽʫ'+VP';5PT}E1|7&XJ'w:g; HU|0]jKVxLe6Wi!H J%( ; ǵ,I:<4R{5$JH]42f~|@6Lݎ HSfߎMC;][q(+nROÚ>=zDa|n5H @#M`LS{@/j,[U7'Wp\@`!6cM]Ce˷(b5Εüjs)agª{\g];maւF3#*?llB 0fѝÏ DV"xO4 鉆S=!1[Sb`,KX6? C!R큕لo<ˠ@rsF1ɲ|܍"F(wEBy8h B ©&ۆ|#ahm!t i]C]Xe,{"߬n͑mh dU 0Ι&"̿6[\Ԕ;}S _b˜1Z/[l/wP1A?qJ(_𣔅o(5ZSZ7Z n2:-erF.bGKVmi(s=Lt<0Q I,r)c?J@O`%s sr➊tG}ޥ`$S}EMC:(.7'2s(vc{p& a?CQJ0)xv"ldRj@oK^%&8GRz2p'$";Mo-y0K86'{Kbئ"^ Gıp`ijܚ&i-{%&U: gwg}mF b.VQ3.\XJ+8ϗ}a9HJeP=~!6f~ǦR Ves M?&RFx͘G !0Ĺ |ȵ5'j|~5"R NfP,Δ1o%N\26pŀ:p~fH y|͠.! 3i"t&ad})~{ƺ88Pl_1_4=(=O~X⡔2Qy٤|3!)Pѱ )F$&U4DƧ-aa "# .GkM///{7wU7骨.[4?8z({Jķ+B4(/+gYaK* A%Y-~B\YH!1G&Ie`{1n uaP |4c@].>I|=GWx4~!GMAgKs8fvGH֗`<5/\#03.-KOFI0(=*/R'@bY,='/c@*,= !/c x)6cxKO@<1*%N@Zr|w]~|^'=p^we. $ `[m[_)8q$,7Fmpq2}ݢ $Y ($/u>9ke#ue׮]vվb%,wO[_Cn>OM^h)nK\5`͐l87aGnu[XIDwWp\YO˲94*:N~\=.`3DTA?5?c`mll&mf?'dL2O?'d>S+`νw ^Qdr[-vS^_yX}!9|k{p#m QLaײy? TA_w8*w.xzc : oA;qtU`_-W@,,uӫsbB^y^gbh T8?TaKEtQzaC>oEۤHQ(vT%u6(}+H!W.^k3PzJ`hFpF):+"N*S* Bn9䁉v c\0*pe&){wkEY5jG4xNk~~^!# X:j 83`f14F)X 'MbPT'&L&0/ vZ?s)T86e , B޹ts"2SxP_AobԱ׳@WސV0?M1jR}P2:xfPS)c5H߀5h^tTpVFD1:M{e-9SrOVUrqbEl7Ok(FwY0[{ƭ%ˉX~nxW$#"tdhIŦpޯ%\S`(A"G%Erj gx?Ԧj'O1Jrz6`KDXGΫ|K9)ɧS% ̶#Adϕ lG9ԛb}p4ڍIWT[}J?' Gۦ FCTp"]N̼A l,UqyabCQ%xqׄiDȆC wG Dc{E F*)e!O'BQ^o2o W3@5Z` 'CU@$WR`# w|-Z>s%˹xޡYAE%*P[BDSu2af(d逸!cHVnd@"j_V0\ff KAy^b:mt}ǰ-&vO*{U9eVa3.)x 01elrxxT'G1!IK )9ɖr,ZuA1dBdxtFUG5h#y])K=J;V=I_θiܒ> FCS )#Sn:D#bv+y7ڝan}TbW!fGQV(;$ d./!B`ޝ>$}mq~t:xܮja8Zق#ҽzV=:yWl"ٸip؋I+5ꐰ[њa/0ֆsF<4>½4c#ۨU ܰQg)5龊hkQըGмt[A?~\oKF{C-SY mOs3’EƸ@7Ը#;6h"4&}^8|NQk~赭oh X0 Ft|E!#.7ǡ}o@,uaNdeQ7d-. /0`@2Vq|,NNnX. sMS1_5svQƈ@nW|L`Id1Frs\UeJ1nj* V+ _ ID&/]T;C-i"CC,aUBCѹ7WhIUK;Juc"/; v0 FqW/e; h1b)BCJ{ è+o PdǧS ~"{2!?1^nZaݳN'A}SP;VOU0X#TUJ IAױF=5!+uc [k}y ư;A=~^ 7ooc1"RKu8BAC;5&Q79 cQK . /z`LCYw=L)ズ4~ؽ<52HSoދp, ) M4#\gVN* <(F(cYjaݫyQz. "cX(NanFEVe&Or)~%+f;'ULxp#}ʶU/*b1]v  ou7W@_o1slp~d,%|h3B-V1˥TD|ǣN # )<}a3tMSxN>]ܓF>Kx9;O䩒`qA6oDz.TtR]Ҷle1nQo񹑁 f̘oӔ|etHA :ͱ 6OX6gm^d,%Q4伶KK<=p,2[~IzץsO9;e9/rr.%޻gVٖ8Qs7}ء=5탗l*M u^`.JɌ_O$]UI7O?C>+,@d5ܲ9T hcƀZ6/ FQ|g&TWbf+ʊgZxNu%Z~Hz;TĀU$U}'TPCW!lxLmhWp|K\g0BjxX*H/,Zo9G:7kA[nJi"6 ݦttxO> 栖16'@:/<}gTcQ>5@Uϒa"ŎnΞj% fVO啵Fc+r2|Ɯ#&1_G|w_7[F+-]&{SwLz]IXG,W2?+1/ ~MYYY Ӫj5fh^)FtWk[{D6'9sv-%*:Js_3ŝ)jU˘⍩l4雽NYOt_-][EN63EddByY>b+;rG]帉8Sj { ~>8L3Ȏ ;˭y.J+KTIL$2}FdV5o_\(\ ӍOF|XtM$d%ξ 8R*\VNGUz"-;4`5.DC^}+S2׾xN'P=5>4:]yKhNQQ-$9QU^KyI%L&^/luЎNR 1zVpY 7:C Awޑa,)=w 0A^cth7"57k"7!Yx_XCyַy#X!'~7hK1R.- _֛MsA7ƢMos3mKhФk {\b[+WKbhoN&$ fG|'肥e!Z6n0e9YVk?|-zV92lAT3OnښH0 /gFtӀeZ.b*MHz' z͚q٫vWDRF-Ԧ0KCrvh(pz@ 4o.6od!LZo8 8|U}.;c/[ ŠwM}v*RfX~]oRɇ(FhoI}{|{\9_γv(/Ҥ̾ m!6E!f>> s6҇]}|[4u0V{MZX `gkd\{xcs};tKY>u݋~31#j<Ƌ,Vv]q娺 yHچ,.._99|To Pu[3*S2թOA9S+V̮HzUbNJ{#Ħ67N; Z51N+5⺼u]a 쥺zΕ7P1(P ,0s0?xk?2<YQ$oQ媰N"Én>=ˉXz]p9Fj_3Jej躃f@ **xZN^d (06:p +H8#*Z)lk=m95M 0KDmz .d\1*s :NT|_TC6 NsH,Y+ԟ˃Iuie9kq7 .tC1?Y8-mBh_&񢜬Qf {X7NԌ(77m{c;yim^yH PX=?:Ox cM{9.m/z캲Du+ &wQL:7Ps^ć4?J{B^{`M~(Ek#oUFkz1pN}r{*ϨKϴ,% V4b".7b}`99 .:lA+T  wB`:뮱~yPmF>r[gj]ǫ7?h@_%g,-㽳n팴oF$tiWTDZ8+,ofIA YeΥẅ́Y=Y?Yo7Rr7 Sۼ%.ƧE%\h,)H xA.^'w-K4vR1XcR;nqxLO(-u'20yۨ0:T'œ5ؙZȄߵÓz{r~\w#kN>>+']tKͫ&aǢ^"] 25Tpl&J!C?(jP/ÙBywq5iWaUBO|嵇 s)FzO=FjjB= {6i(`.#*g2rW2BveU&]û,I>զT\]FqiT1#H0Q-c3z8]S;>gOll3 Ŗ~\d@ʏ9*<3oQFS0y09mwĈbN-XT X2޷˂ u浿 eNί/)XZxYaG& Us$ =бaSik PLt [SZ3yJU訰cEA`š/ L6;;1sAZUE1"q[tArWEoۃS\*pr61&yew.nQ6W'_tՠ0?5171֐8Yuk#$m, v%ű|cvU8eWirV njf7;e_U+Ş65ge>?5b4 RTgSVȠ(.= 0PD7Wu3ڰ %a@lX1Ďui?gY&SCӺdWL*"ϭ-0|oB mt3[#AO==̽2x^ڇ68孻-6LZ'?VIC%?NX=;:9(} S+;K Tݲ?Zh5C~㔪T4YMʝz"ͅnQ; u W[ibxiB{̵ ,2~3Qp>-{SM1Hc({يMUu]Rgh2:@vӡЖۼ=IeoNNǩp04F/8tx{&Pp)IV2z ه֎pJz?dr^|s@(-"']K%}~ 0\vrɀY鱭tƣV) 3s͓{J{Ox}X\ ʐoghayh5Ӏ~^sxW 1Ǭه`[\_ld(GPF|4cݩYͤ]\- ofPhU<}챃6w`hU!% I8{c[mkJ(b.'yauLE4MjM%Ш8mT`sjvt^XYJa%7|l"^0V3&@'[ak/6y5_G2%t%h|-5~AM*ߒmG9$M۸!XM!^N`~;O T#=-UΑndVx+ ?= l޼BJ|č&C-^4a~~\ˀC'5C--} .;H٘=F*( t%Բ2[Ŝ S(CK[8+Z]5<}U۫bs973,7` EÖX-%GWd-NUhp`S@4ݯVgUnpH,ˆÐD*2*d&-Ά@߰;NRKZx\r$bq'oʜPto{ש䝶bƷ HY)hDZc1*r7n=nCiT[99O):a w0Dl6в{ qLMc pV6 dԛ+C{z.f8$Zi4* 4y؅fԽmz$WWk,H6 *0_hHdV :JNPH<H36)ZY*?`g075 d)+q̺I/~k± 7AΤSv~1)ٕ%?h21eFw3M:#ʀ"KxҠSn8 k* ʩIljý.y }S=̹{GOZ=eK^\W*KJ]R.V GW> @HmJ3&/F/0L+95Y0⪾??WK;ؠ$-,ێ]ǚ\}㖨x:=u\?`{|k Q"O7M2ahu_M5&O'm%[jcWvLϒτ -Lp6~2o܀P-'SRA]PreOw`= +)KEN\nWXaɹsPɩֆ*皙s:<-E<)W!ao TՉUqKu쬹Edb; 7Ik^[,}݂7':gPe8__YsIcyl"x>b (qj?VV݌ $,9;cv|)@l Œ)@0cAE)@ R@퇧I7iO x~)@$;ȧ#V!U)@GHB<4H (O`R rH"}h RH^)@F':?F hqR)@b !yx hqRt=F A៟͟@JAPQ8- >^@?whj4]N!ۣpv7V6'Z&] ] v[ 0HzXLmGր)zU fIor$қU ĵ꺷(]2q6+>!U2T@ʄ%\r+.Jv&`\n[B˭9^+РXm@q;-݅xnwOk5;z31V̲@b/6a ),VW(̭n{%pk?SOgob#ɤ4>93֍O3Ccu@FIeiS*qe5M:'m䚈c ln䠭GBQ 2Ne!{پ%X7)})Vo8 K25(W7s}M#e_;;/:-vm6ri)Sm?}x&Lv\Qh2[[9h7TPD&j&ptk;vP,:zXMKO1`W%>V0`B[u霻" l8%)),2ͷ𓙆s(0ğBXl~,Kel+8`]Db>F įbm#o1SBO֩E6dy۰`X%X"Xֿeb&dK& PQkSFݕK?[VG#i/֒]9]Fd)Yb ,ڝNz ;ч(FtZч뛇(6l(fgu>nFy܎ PX|2b9<&|!, "Apw*DpΣ(N2:yDuP+sL/ 3+> }ļAY1h%)1/|YIrs|=sǪﯬۥ*޹L,dIѦO2azxuV}ïU:o9ңɹ= ,9G|#\;بbq8dixJ܎o N^@< nnks1#ۛR<,Ɗ?Mf͑Nkj#x6 xf_stbE7 oЫ_n܏;/;KOe\޻av9{|[}ա.k>`݂ABގyl; 7Nqj?h8 89p"%. aVޚyUBD|?eܹ7kh0C`|]=עkOn <ȿVVE7L]B03wk Usl`"Ř)3_HX_3?gL)G P` F~=rf)"i)v+;/Eß^]u;{dʟ 4贑(`XQ,|qXLM{<ޚy (jDDP%1_Ve ?xבK0l$ͨ>޹$ʺ3gmv:&;ۓҀSVE !)/n=1?֤7UR;#< A6"nL꾹٩|Kt|vr >{|7h Gv$S`jeJc焧 P+s4JW>?+KMa}̈}~^TWvv` %N~?Y~ܼ'677E~(W X`8oºw:_3}nm&dL3o7fY8|n7Gw|Ո|Q=w{ʮY?Eꛛ(ģ&w7op&t<s73k"ҏF-^Y*eyɫ Z\7؞sVL~UYZ'bU$D^DE1H‰q8aOWj߯3^Jݹ* {sUX3sUX78͠vzp :?V|SYEz:@؀7/b >?!?B!YeIWw]2B8lr6 XxFѿ޻Ui_O+^ޙDzUECRc)^ch~rtk/0hAZAO*H2Quc8Y&^4nxP"D-;8V@``djVb)#{AwApҫ)PzZS al ˔`Rp@e]*HZv*h2 xJ!K@5M=v?7nm$ *L,$l6b#u%G'y#C'=~ dS3?^¨:+=M!gi͞5l8M  ˢ֪k:q6!!E܈u%$=Ӄ'% G * кC Vs8wv+{ٍ$H5Dw~vôVаͫN%J{@ Y/{=/M8H^p*4Zϡz1pht$Re*\ЍZ\da,#W0 $𧯺ʗ߬6У$Q3sPnKCJ.ӧC `#?:5m &"05n67vmUo\B56pq I "3Z8Dca_0|xW mo=l`)|R],fN7|)nJEey QU?`'.uW$ V"i{B45ױmLoBRZ#><Ⱦ/N5q瞌As DG8mt[rBZJ.G!Y9qEG@3-,06(` \.%אMAo?ylD{o2qUaq)K仌#53,r2)ӕWI S2SX5 'N|XjZz>q0L]\ _U1W Uk^֚DƐ"thgtiBLvw]LdW6OHzƤ;va]N ݦ!xhNK)6RcE#^w&9lmOɠCa)k/ݰ0vlgiMc$rFpbi`FVn= Vnp4s|W"tbk,6Wø[NM1OkCY4WD ޹tT+jMX8۱_GXBZVXm1|:Qu }̈6aחxh,L`Q*E$u!~^'=?{h{6-5#UoT8/ۭɓS=H&/_d "!p6^˴|rlFm`wM aԴOӧ}:Rq d s6B+U|.h @SINHioh{5h%rTT` EYP-Z&Q1bm2$8cBeizd dxJ\&#I* p aŨ-1e :aS+^4#c. -T[ G( !UW02EWD%¢ jC6+G!S&h \%fClM5lJ1'gi_Rerdu$ HZ&5,r)Z1N.h=vV-=$Qzi!;`s^vMSpZݰ1*eExEAr-\8x< {U1ͳ-'MиTf%7kŸ I0l:x8q&e|&>*ASvYV]&* ,_tE=ۚNxb$r+)_*C2&-|d㋋ȹa;4ƒ7a5Zh?$/9Qag&3Kv}DO<$L6}[9u,7Np1Y:}X- Ym8̄q(|%v@H[(Ԃj d__  ;>8uc<IY9EdFsbwѢ;|aÂ!bdđW?+ j'! ]6~Q"Fa3@6E y48,!Î}| YQ(/띒Yu/tiBBk8Ea86RdzȃWfWI],t x$ͧYSg"tN`"C,[ b*w͆Ǭ 27\88.b.fXЖEhNr臘*X\EdX:ꌝ5FmHto&{YoЏԡO5͇%q u[Au$:Ԭ];6">`қyU?G5ubycsP,vCk+qaa.SK(I1gnUQu݋Iܚ k蘾($Qwī2/#x"E} p?V+Bf#LA80-&ЅVCj 4nDJOAh2L1J)+Gހ PB;wfzJR7@҉a os|n 110FYXZ͟5t̗ljK)_J(E\_^kY/y8>0Shj% >Q|J̇ ">F&!"<Âw<wFہ[yXhbH#uxHa>NTc:<}O)G 9<}pOi1h,w7QΪ T*_|y}NlI_xCd~_<ck@Gy  2Q" 2hz? ,oZ0u}U8/Bl(v*@?qfҁ|b BBdN0:0X,._^]e.byR 2fՅ˓Rhø#>V?IGcVo d/eY,_/eFVAPڽ gEj_u<CڡJvo 24^5F[Fl,F>(IWH`+Mb4p.)kR.FdVlM*[ D&ٻط&P)[}p7Ġ/Ȃ)OZO5b^v"19DR׿`!A>JB? QN]f-㓣Yt(( z`-F͒p:UZ#}>M8 U:S0"/j~f^l;" 92fվp5[JAflsxo*oeob}I"kX&%BEG 3ϋ[ֳ|SѠEtNQ(<?oci]o9Lw5Swvp4nw,Q̈́s6f"R&Z~[tz[E.{(֖Ņ(l\z0B+2XfgúLPw<6i>C4~!2UM ̌;R)I?\`Ep^1T,1$CDdG:BԣVF #(dovyXl&eO[ybqx7׼`R >qs0 S/AȥoU6Đc [5>7,@Z:GR Ďx&cl)!L&y6r1> N{2Ũ3a|CS,.YuzGE< pJN;j/)E-P%.B:ni3FD@ =^jc_AJ$E>5eArS l@NX /_[a5.(όoN3ީ*!Qـs5gJwr3S_v1ݓ sNJ/XAU'oTRԌ']r4n:ƙ{8{./?Y4Mm ET(wY<"G]Ī=ZzC]yJ';Y2ƨ}խ::#k3M]@$٧6waa1F iGi¯_5F$k_{˶6 z8a&XtЃ,qv ῶL[*$ M+鍩Lo fsz{'6fdwfDZeI(츷V %>9)ųgDO򌬡# %fvח~f{mfE>Wfe_Wfe_WfiջUؽLXi/zɉt0p7p@%2셅~Y*QԑpS0,+:ݙ:"g[Yc .!]*{ A796"ʈx8؈*Hݔ?d(k@-+.I`DU<&(1Pwg! %iAAyI*-j z:DMu+(W Ӎ^Ul^VK+@l8`Om$l͋GήDiƎ4sm`#w7CT_ǚ΂÷E^YPh^~wEg| N/=dN.,'xSf7P*)n]\Zsdg2 lguᬗf8W2+掐&OBL]i%^trL{|'TJNgQr\ M_̀h%2W%{/Xg a@1P؎M<0-aQ^K%D @{RMP{lO0׭ 8qY|F7!ʀ8p1KX@)sTNQwlZ`>pxԂӲ=%yR.&mI ƛ~'S۶5~DNU`EHhx\gLB}wjC9-C::P< V9Clidˋb6M/ٺQ0qvۜIw=\[ '1bX]> 0*YFpi=i)eCj.NV yL), Mmu0[4Jj0\[%J>eST>Xh[IoSv:7rdb4;|_{ggfgauye!_Ǖ ny0\.Ɩ/ɿþ<9Q]^|M>]=~nx ƍaqшܰKh7YD 5 C͂fPMxg wNWVgDK|᫕b^ԯ0e>'ju p\Xꏘ4QիV.ZX lѿ_0˖HV&Iɟ b#k  ?ougJvO?O b?Q~\2%7Qc(0k{$X <'oSFqSM ~rD.j&Ul;h]S[P #h009|^`x4 1 X/Oq~~Pꏀ9y?FkXbixbz/Ky&6d2k%9!k^Mz'vtJC0r| RLcW~xʩy_cvbD5H 0YLf:4Ӓ<OzhguJlՠ~?E}4b4 Ҟy{%QzHbi>cI5 n23>JW.|y 'EMHCPZ!H o cYiP:Mb!ZGgzi7t땇u^(8ᆱs\vq9.;e{07UBIQ,C4ـE7™F~tFI,p1W OeWG}'coWN)l舢6H e6^[,G8߿(M#V/X0NKdM'.sfg0DUGL&1bY3qEGh&۟%Bd`,AI2)~)Sy9Cʧ7|ޢ G@Vh=w?/,_KJ}#Q= 1սXgɂㆴ'' Dt_+J>'d}O>'d}O>'d}O>'d}->$o0