#!/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=bdd7153f3acb25e901b6b81614089346 # 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  i1 'Mn,X08@+u;2!$a⻼~̦,%Iݩx| `KC L* )'b3'LIa)XpF#ql͌ObH(GCBZ9 4 ΄= Qb@ONhX<. "4@Z Vu[Ccp?2zW벣KԘ:]ɩNfLtu`&`(&P2dL G=~CXf֙>P{>83@C pn55C=GH%x[xhqO1hlƐn=Ek&P2\X@@:@$&ц%"FYݩJ$(Lj`F$r ~ T nj5Pn"NS)cbNje1S:/L] N=P.;MSnϓ3S5 &uldžǴ {\2f9\&X@)jW3-0Z+'ZK4jZN!n%咼c ,!ZybnqUJ[_DF,,Kuw ?Vv'Qzfml5ԩXX2T]v'𥓀U_U4c )pë6fܾ n!sA?e>y|[SED:1M)mDUOyٷزr o*#>B c5>A- %dz 5#%?{aUu qԧԬ_ԡ[v `nEwфmJh0 ~Ah6Ph3iԈ 07q}+,uBoouVFz=P(J9k2ׄinw*壱޳K!<^WXe`L0-y[Nj2RVP1WhO3HIb rdM d"W~x?xe_ww:?_rZQ_]<[SKhڜws< mu@ܘQ~%gRYhX嗔ذ,la+r_YK?7:\kd3ջ-ǝ͛k3?v=~<;sc<<ٗs]N{[Y60j:STS VNZYNw$u셮=sۃ~͖!lmmux9Ʒ.nLjIX 3وlʿK=qz[ ~?t*xd}ߨ\*4 XC ZQF|bT_#P-8Wz9-rZ|tM"#rU"±\"#>^XD, ?<BWH=QY>bp T"5,5"FyDS82eZ{Eqĸ(yYf>~.ݽ(}]`h 3rU2% C \ߤzr~%m9L]>I{.Wk U݉t.=ZK;{X`#zRG> E0Llw7N\Wǚb vzZ2 ʹҫ)?iĔean:WS5bGڹ 0y8:](.518zM,j9U'שd QT+Q?Ʃ}I+ST5*T%;ǟ~Ƨ?8JH7YwZ+u>]/ZjVc?̶6kL49H S,cL糚rIS ['EJE|3),[kWqXH [?&޿{:gi7P"&g~E#99)2rRԑ[q ̿^UJ `ӄ_~}[Ed'_'ro˟_Z=W\P~/2@LBFUX )@&^Pq{"@Ķ2߄ԣvy02ZR~Ai }kÜvrYngFYnln'aσ_ԾlpmBxa } R37Cc4~'<6s[=˦B h߷ )[6 O(Ma" 6m-P-grEz[4h¬pfjϬϘ9b;9Z6~uKQN3LcQO1OxJ!&pYZsr6l-G.%jkj ϴ~iqCڐ,2S Ir7LW6&{h|t]*b1IR:́`uC޼#QgBR]\@uvuHAtnm!ԗFpMqu*ІahR=.H UiXa^<Op<ᅪZr7$Zc#QG2mZhVF!5|`_l @x3OX1Dk,xNHp1Ua3HO!Y3H(AˀY>XQ |ٞ!2E^jJ,R0qy;/r]"'QixXdf'z\8,|.Ѐ0p\!i,N|7찄ϰU:YoZ*f')νTCS,â"'F~۰~,zMVl\hlx~sCaWϛ!7VPluUW.uvYaUZ:\Woz<<2m9˷ I ZPj1mH8#KJD fGL{,m7\EXYe hlKyRSǙ[%b-U9q}Wp./\YSL{9ZtSlbki<#&&QHDpul6^Kpc~ X2һ> Efv8Yn2@"VM.a!22l %t 8΢͓⢬_htP.V g!f? BiCc^ 5NӲ5EJ㩶9rck `X뷍L9a^7qzYh{ siiFaBH2Zު'v* >;A&חݨnr Ao'[Agg~WѰ67\M!)N.ͭu`5š؛&.7#tn̾NGEU+X"e>e]8& āQP!C羚',Q+0ž֔SC1$ qP;|N*HF~#_/$sؐ3p\eĒZnl Xᅠ8swr X OmQBI Mh+9;(ѡV@e;oqeKzɡwᏨOԅ ώ٨{CDWJ>yv:mÂu',2?*rLGA?nzRZ,e٩32q7n5{ &h b ق˓hwSh}ۉ8TPWd6 aHauNi%)n+$̼Dt%EuƲ -l)EzkmZ4 Ɲ_2U$#8n;$,LZGm 8n^G$ȣ_5O?¬gB)7GoPۏiMJqӛ O!X7GoOs6]| _y~R-/[{?sF]~n[௎,{LoX0 k >2ă ZD2~<\7%o|D$NyRGӣV.ډx:@~X 4 `[dcHhoЯl׮܆xz7fvCf3-{Y6}6SB:IkFEa;ǻנݹ<p _ i%1PZ)ABVh$=ů*x@K"5vb7'-愘AYk81x!nB[Hge! zW2jѦU0`aU,жq5o1}$U \aGӤm8,'M(mYn$E#/2Ӌӗ9!hգΉ@XH>NA' !JQ= 4tQwff}¿h؅^Fl0(uR_eЂxpAX#x0vv@'ozvQ)/4oap$':ZULsGsQt.Evrc{w'@h4~F伓2Fe#3۾ru޼yvo1ŝ b)jhH l 2lL"߿qW `??lʠ;qó[i?'OzQTMa,@ P'pf?yg`n6-y gt{STdw[R" ĥt@i=S+Gi9+~sq"iH'LI  ""3}zg~oCNۚHN_4#%({!QLYV DUMⳔ88F]\"HěY:Vي9`?*bE|>/rt:NvVW+(knrli]^@:_L]L'' pynՂ0lɪYE"YDCh|͍/Ub>wI{ g&|zЩͰnf{ҎRd#L ,>M6E)۳^X6/NʞsWMtqM%5%ɀNqwp7x@`01˰:-huZQWm@=l"R77lmZsi[[xgsCxئ 1<CO(=d! 0GeU (h?ŝRw!z'$B-]*В}bnWL53IM09 U2wv (EIµ3!Z}6q(*ۡtT xESӃ7gϳr(X>,Kjg=(0r&Y@Er*'!NTI\4Ei_eQ{F>jG̀0/w?F_~B`]!7 G}aAMɁ{T" ?',%&N#Ǐw|F{|6*/zOw<ʼn׏MBiC1|!|6ծDŽwͱiYt8 mŗ$8(xGOd4kO+c6oU3㬱cM=b&>*;o2N# MUTu j<7$Ap0k犄ӝ04w5LcN(ЈelRY1*h}ߙs%$6#t(9_gT&Eg kI Jlvd+j׫.q_Te?N&1m bφl"nY!SK7Et3auz6NgvemKj?Nޢ٢7nU֟y;7 &EЫ&(6 Hv%cxyuXDPP#+?~݇D6>~L;cSWTGpɀR"<~ o^Yq홸2dI2a4[UGdN &,hX'K OElSQLAVpDشF0iOz`< ?God1l\)ȿ@SS]e^ԁx+eskgZxdVqJWA (s,uMqMaHjgݕbX8U.vu75Nl / UooLz( eZ}CNHOFGӔ(׊eI4?1 @3.}l|y "ހK\4j$E,%оuTTg\P;l43JԹACɌkaĠ\sf m,ӡIЀE|5Bˍf=66cl*aХhRTT w8+:xt:Կkzq 11QLSMg R2iT#Dz֨W3%zS(4g2Ajx3ƽ;fl w~Njl ҵ+3 4%7]Nja{2USK1wV \K7.{,:"3 K(Po>[(R Ǹh[oGR Ű3s%>i‡KiBX[tD}|U?b;z˶r=Yӗ{N EfnX*ESLTgUh@67I2" fG6¬f%6A\D F#_ 2iKs_G>4I Ofx?FGx ÕW/$=d2I 5 ,_MPSkiْ=H#KK!SCѬi$ /L'FCMX7|՜Q@ &[kr,5_ 52!߸4lFeG>fZg*DB= dz)e "{uPN6M~ ] Z-Mb^d[稊*jK%o4jH26*D<N8rB#ʶmc6r*Goj}g_*Rt~dI>#>>Ɖ_\2J6!/#%vD{| '\EӠ^'RB#h*Q zwF䋣Wךiɴ`HI|oZF*H;}KvZW;;\ji IdR~qI})PrIX{SG"؟k<8DR:^gI"eԅ/#AF/ZMj{^~[gʺ lhɟ~`?KZZl+EVUPk+]&][ʾ[*4:]@HN緹TKbZx>gLMK[6^,RZz귴ov%oҖޡhwזx -|LB !>yŨx;bߧkoOWb 岑j u8'~wKФds tS+Er$`t;{ BXT F<Hf3N\Q +$AMuHEAh 論C*d&$$wg3F-,D@~PؒʕCSz0w^ܫ_Q6`8/1s;'-Z.g BN^ң*We_ PlMD4q-H3Q`2˜KYR-^ q;N̔+W54mb_Q=_M8`hv#s&ބҝ)^^3 TJ׋& nN9;[@ӐI_9a.l}qJjI CzzВW\O3xJkUW\~~#Ob7.m/٠Qtt\RIU0ס@NL~h7WFfh=ی:گm[g{ݵBw'FA>^`BqxQx:f& ^ʗꟷ,hv Rgx jg*7oӿ`X . {<7YW\b;n+8!Kud)- AJ .XKfc| (4j*fwX"] %o!<}45mЕv bz5]V &ů^! Xwڪ}A q,ʣ,(Gvg=m^лѸgdģ"\lѲ?!HoS8,3]yu`"OސDphyb# Ek-E|h)Ӄl۫j/YR^lIzx;a5tx!O2Et 4bfV%v<_rME#G<'m wM y]r[D/ 1+6Aڬ鶊p[ѺDe Tsc0@n/5UhD)O/#wǵ;g.,y'J\$:<ܡû`ݞs9r¨D!&>:FgZ#omN6dO}(Q|= =G +>Q_Tx9 *F2qa2 ]*超U rB)P%trC RBp&F dN_tL !Y`T,p {A^c'ϑ'kaNA)sKr)3:3`PExKuWB?/ond8R S 2kE& GJb>aa(/[I 6lP'`&,gS)tI-Eғ 1x|[*@f/{tV`>rK } 7)g3rg"2ܦogs_HcO):&2c?)q '?QBw.*c:\t:4gr9~|+A'S*\pj: +?>Z(]SM!tv5rRuodϽtaZNkZW@?TVU+\G|ehe~uFg4Pq50][lPڮkMM5+ΆћdLa:7L뛻 iœCљa"د]ɹjKVL_6`z{Z{?~M 3cw %1ݚĮΰo7?7[՞<]Tq+ n~fL9bMu1c q.;(}ɇ^زw*Gmv>L9+>բs2knwN&B_6₈jc~[UD&c| $d@8 Dչ>Ɵ-dLH+IK\;sI g6ݷ QfPb;WXmJK/Y h- 2n3`$Ufȣhf(xnYK6.< 'x0WLnSSw4O<]BPoSרXC~0땽kV0vP)iͰs9 AiSzwUxS,I@Xq*ϡwQ(j8-&%l mԜB@hͧwm` lF4w1NLH xgBc[g)f;6bGH1(upDFL1ƱPLdi,{<jT8ͭy08 n{ r:SniM !O [Qd,&|&TH(5NHG51a=HO5RGKp5s/wu MDP߉T,WOJcfVôfkv|]UsA+NB9_AEC% oO""}ՈHREDC:eh)w'M?"!̷Y d{>[&׿VCg fD q}Y g L^P倡"A~$@!*&Z\4+N oݥP јR|4FRpڎфjѸ#mm3[E%s>P LzXor2kEeT,kSI<^ R%ѕl$v|qpD{q3M6,M,jkkfI;yiŒz͓kv*:9:*#'5!r^8sfź c Ənf2㋅YiC@pK<,!.ۓY]Mh#}r:& ` 8@]XФܳ`7N $*v/]ڸw}KϨԹ#>RjRߞI6 !5q/ Ї'OPP$HhS8;/ ,GelA6~|#7oEX ZЅSO0lSH$d}Uc4djzb>"5BKwfa8̟!ٟ&:C؞xڬ_5o ]xB`O8) M (¯8/:Nr&pɄL0؈ⷩl!S,wQ/λsBQY|5/``Tl/;ۗ {,KmKSs&喗ҡ(wIC^O#Ьgd/x(WRsy4-Tٗ;DݔdI` s" 5& ;h=!CB0B*px7`O90y _ Fx5tZ$p^rUc,d ՛P!`}4

-}چrЖ9f_`E/Q[W^N'UMasW֮|]\A)3rpiP@'rOUCe?Cn-D z..~5MD.ԸX8>JUo| S!Цv_ai _*2UɈM1IJGn@8=j@Xuzj.LD'kH'w'$KtuZi| }…b(m30mDA?§;\R# SLGlݵ4 $;lLw_|-&+7oc1ͭ&pG| *Z7_QҮr|!*,w&1u]ӟƓa g7YhiCf VI_ 05S8aVU$;:G.b|(x֛yM'wھzAɇFۖz{|_k4UhqrcxRm›+yzA~8iԚM}7GzYRћ qK-(:.k:5A::¶^CcUtANN'Z_o *_&~wjljwGUnV_Ը-~Qk_{0wC':Qé6>\gP~TCPΛ-\F^L4O_5[Vys|OSݬ51$V7iNЪw&xuڬӴՏZ=L PaRRtl wM]MQʣz-$>sG3>"dI>}ԡ㷝t<͘H~a IIJ1F֕GdoanW,-&Y]sb8s"s$UnIϒ *0A6>ZGZ*obvZڸO }h(UOLɿ\# q:lF2|IT~$zoX|E~TZ'8כM!]$\,y t|>bxYyћꓢ'*g7Ub?._^?ƼmEABނ;,Ì> &t&z\^J֧lwHO&ʜl{.0>uJn n613hGɕ ku$miUߑGˢ@P9w*v2rJE}?}&K$7"Xp5_fTŒHijr7= V T/ch3;CT488tq3* )b*'o-UQDAJUW{gذ ̯PY< a.gRzɟ vӏFMˣ252HvHNڼ70Ѱ`O~^f\>{LI28 &{B(L%\( u$S~;0K%82 ڜ}DVWAykC96 {ƹ B; m υObR2oL!̪ MM47&,멮70%qRоN3:NHצtnrlipE+jPW[pFM=f:M pz &>ϰW*=Mv#m䉘]3ijؤKdҦƘyaEQi@ER)2VA7`n'4ӥ :tFRYL JxT0 ZUstW_P5N⧾v:6V˕A/鬔 :ӷR:<ޯ\{{pxP? Kr[UfWJoǧ''tEQ{ɷAB- ހ@%Um rSa#u8XW&~uɍR$ KDH+l-,h>_?g |fvZk*~| /U&fD'{5֊Dox[6?=MCw$n( aMs8UD2N.HIrXR¥Ă{WuFG6 wƍp3v?䕋>`aX)6m6D7ȍ@j% }bݫSt}O&Az›V \ffgi`14Yy/.(PƂcff5Is,p2#9GǭvQjkuF9'-UԾVBAI_xL~הA}HJ,)$A8nݮ'AM E!*(&r$-B"wWEt%n3xAahDtU{WK\BT5YT$P77ſ[8˞,H㔔iz[\}ٔ9V#2fhY.K՝;\$H"Ν~љH{4,K~/yِi*zes{LHpk(P*#2۔  ³gk[[O΢xm}F7z~}t6Οy&%,3M'=X<)׮;3#$[Clh-ЬD:_\ZbjG´va&F)ݟW 1#3@XHGz,jGu%;0jAJP!˜<^cԌp8̟8!o6ȬΖ:Y8ic↣b/yIKM#R7{͍O_lt:[q܉g/6⳵o7gg[O;;g϶9Imxwjr4γFyě58O_D͵kO;3o;I=L\|d4FB'O7n~.DưZH|%F\tg&8W1Zi[B⒡n?XT8xs2 1-jΔ$>쯑7Cn+AԌ1bm8 e.A&Z+l7!2& _W۸sm+Y` Y 37]r^.m,>[[ky|VW|&^S|(9^v96N'o(0\~K/̡28]ӿGRmG~PzUoo6넭In bh'SNXf b_zxi@rAN(70יZ8m3S{H)v僀"Ѱh 3Vxoyмj4BFnC|%JD[3ĵ" ?b%g*IRVk;\*NNCN%"q;xp0hPkY <87 P)lf\Nx?D: k {L|19J` va DR b8{Ցݳ0jzzMЇn4$qSm4 i.C_86[f𻜴A4ՉF7~s&r^fv0Ķ&t>v W46`@dr8O:iN6Ѱ'!8Jn~T^`J(~)E0(} tZDI3A $fxP"G\wrZs.ZyX5|jEASdKZ{H{ aF:SVS=j 넘A5% %+Aw)0r;#tN4ǒ>2"j?jGJ&n]muv3f|DŽQCPResJVmeʊˤHH|>4annxR\FvmW}X'LeگgQ1vѽ_z}2I-P4iI?1/jc6 "_?7ɓrk[|e  W܆۹Zz:KHQy<4DoѤKg38E6K)L7x@"68Siy i\28']L=zo:h .Ē%LYThU͚ S?q@=f^ElH]FYtMlXta[W1kոD= Q¹" Pd`91^%:g/dm%X%?ޮMY&h0&V`,z.#:ɎsF x1GjnGI1 N[uUƈOўJ0ؕq{Ψ:pyQ_Q܇aGBO]LI2~|04|!,\=etEP;|5Iv#Ru>Ki2J8[#inWH-J1IY r}+F,S_FɌ b0r$NΌ4s}?&вi[ awYb$$qt͠t BlU&_Ʉh];WcJ;6U",ySQ}T<| ǿRO,neɋzl2uDZ~NuDʕ 7{=Ozy1A2UmjKw!;ѝsÉXt,:lNI,uH^`&y^LyOt\gul +q~b7uh6^tExسܱ {xX8چ6hE6G73xz>(Isr,q9'Z|[mmך{ ˳}*~y>馯+>8]u[ow{@m2龇MqáCeoa{?o|r=Bl9k|8izӮ6?8+$WAKb/C7'%|72 }YiH`B iq'^I2&Y`zӈyY@,PHۢT`_cpḵZ@3~?^Pm̵ $47#a Ej&>?M)A̿sxw z@ 4!usPL%tYF\ g !DE6*TIP]O* [0Zw2I?"~;uo*i7Z򌓎+Ka(v:Vy[+Yr_.[9aٖL+[3%ڱL CYg(}E,~jF x\`Mhع)Q-*t ޹:z?W:V;"vp"- P>=Bw~?6h d'!(qƐ\;ឤSv̓ZDVޓ',PrOG_u9C_m2cj[ַ?9'd/6zus =;HDWvS| }63C$,ie^CSwDྡ7^fRfCj<9Hq# h ;Ό-"x4؁K'_Q89eL(2n)]S`۩E9NY^"WpK0bԦl*N[e9f\ ߜY@ #1YbG_zy88 cm!|帊dྜྷyz;7h T:;>=g)Rd/%+]C@4<&}>'o`\&մ NͿ8Qf#>~z>LM`;wTΠv:ՔO;7Is" 1}V`=k,⚯N4/L"M%9Iw6{sZòQnݓn1@B=FJ>_3vuy7&_N4pt.gëD;LG''Ҏ{X_#ᄄ쫆F|_icC>1֠HyfƶikN"]1{DV܀8#i|?H ﭨ]&v -Wl80y=y=2N1 :gt2㛣\|nNAF].As̀KTQU$:%j]0(қ~9G[-ƨ1Mt'7mt2LO}O>(O4K{9f s)gX!7vi2KB{-MN)SuطUcJ{,ےz Ģ{}IO`Qϝ&3u%' (1@lq߈a"RDi Q\ap 1vAVqth`bWg)a>옽~WaVxe$$L35WԎwL/aR#R;8FbIR熜Y[.)B ;s4k &iR] UHAxXNIcW®v`^KJo4_`t@xSw赇^ ' vU2<8^a=%E&0)i/woS :B2Cu S6W. STs$sccd6@9-"..Wh.$]HIgŐ.W>/2"uTϣ~;+=UF~s:egQNZUYhw)]&XwD+Ն̴$v P<=:)VBT,G+~x6uaX4"Opon׌Y*J/Fsy61Hlد 2F)/zSX%Gǎ#ƍ[to!8w6UъӅ7\b #>菴oFi#netpz0ҋwVmfG=mk<:gqa"$C(`͇ 9HK՝7fhokwΤ>Xkq`gOf&Ƞ\pzX6$q Yd&&W..qF)4!"'kWF܀#K>㐾}o Ut!A/k7`=Aw֔ Nu;'$Fp( ϻh歐:&AMXρ6X;y[{U1Eڂ$jP^/HdLWѰ.<|Mxa։^Uh `,$G|I99XRuG-/£%7;ZYŊblq`} LOD٦=na.ЃtEy D]C,!n a?+$P}ĸ_{N$//H;d7^Qs\n4d -Y" I$Dis_R~߿(Gs:%{~b;^6Cl,زC,r ju£IB@橤OY4Li E´~Fbfz$M(.`󔌢Н0f$K(K!wD\Nc5hўڻFW1\5g yWA;J.drm{z䬰Û"8!Ew$ռꍭkxÐ9 վp ;vXG & W!'kֺ9ᬨx#"Ios(ɺkH|q1Η *!m%PPPm:6v+pwV@'EMgLΒֽmf3^OK(G&3v\j1ݺ;dKw<%97)|fUdW주M6#J-;K:6m6W=EƧ2vkBuq!4uzY{ lr3[/Yl|Uj,n蠯984F\\7tiٿ>nyuU>T$oG9q: ˠgfKimҌ&]ah'75e I;9Em>O݁`{6"I"}Lh)%&VEzeN;lQvtЫ䡙Fۺ]Sgc8q\x+{tƼ *W>=Gl(l=}c /w4>!][iCqNÄgx 9VD3=BIˁ54aпRD.M',񛁢8^2h|8G{5ϙ8T\_iZ( (dqUaEsgDwkEG\,g a{Bl lNSМ¯解5wm ]&/ wAa3t%uOt:UO_}"d>AtEYQy&WKL un/4zAoM&|fQ>gw- jjzrLB|&fMbI 3?|A+fXcϪG5NL(&m ;YQ\Xu=srHBZZy*?(?]wpUGCvh8Զ-Uذ{UA:".GLAFBҜb4rwt K ~䴾_(:FbRRþrt- ˼^L ~ʑǔ./ (Zrͱë! v+QM~ GV׃/v/(++33kQ_?/\QevULM ^yTX9#B$/:(9 ję P䈡[Hnvսn4Ds$9G Q۝pNĩw4Mф"Bis^D2tM~p'wiWt3H'`O`~ŠSt)CJZ,:XIb{Kt̞a1uۆ*BbI]X(+GzX6'HԊĕk;uaf}9b(lgwjDIC,zZ'}gK$c*ɵS?]_)wތ'z?}4#N766SOoad)xN'Q++ B-l`1lhk$ǹJ𠺿uAl7R~KoA6>8?oū_+ iItD 1J?4R!Q`0~< \RIvdU]Q"}Ԡ0̙Jq܁Q߼9ߜV$(Uq))(XׅxLh9G'7K8tF/al;W-SNgoT,)jC A%s φH)X^_?"a60#D:$ZړއZ wz *qى@ }jB;'4'Y1(h$NTl ,c›kXhhגZU{1wPr(d8\/~w5v*Hqxt47A(]oIʯ@e6{,[7mQ0)P3' wiDjZh{K r#r=hb?XxZs0N9d`6To5])j i^p2yabn<JKū0%EfmHn[9Snbo`&|ǐAXu_)!{p8aekKuѰLKȀG2oD7H6oG} S:/cܘ K՜"oNt+srZ1Gp+E-Ur4foI U*"r8Ma~(2^te}GUn1 )%+Rjc|\1T{׳qǕ)6w՟V |٭+?9H/):3Asܧj r ևZ]QpR}K>Z4"NxSX*wo?b^=@ٳgOOgGgҟ?绎߶[??Jo˦ImH)2Nspg /@POF1,U~}nM?x֊~:!qq;sȴٸ{;탽-o8;&F2,JH6ڥ{3^P(xjWSX٥Y>%[`qCϲ vrڇ5 3K.~-º}a6 ^ش/6,sLbј?fڳ{G|}VE9In<Mc$! j,w/J첢Rѧ6*km]V!i8f4FN[I]NunOFzȆ͛$>ͥp1 ?Xs tvrbX"0Yds n϶0Ʈh~ݸBCӛ&=8$S;:乃?S*Џ˝WGҐ]0qߤ_w ;wPc :;0 ŋl 2$80LKP_WN4ߨm& l;휁i{:hFWw۸upkayw'Cpmu ̫ Vy#]298' 2?n܏Iװ"xJ.+2XhS7I]e C"uOl|&g5M#H8vd :nBEUYץSLIQQ:m .'7S-^Lu]㆟FWx 7QUQ?=z50Zx<M6v{%1&毮 ?O/LRc A škZ[vҴ4k^T%sH =:SZJs[k)LGQ&x&Ϧxe$o%9o63:IݹJUDOz}asxqw{B<!mK\QU$8f5/;x)BI|Fdf%ݷ'3萞r&~ D8p4DhG+HU5txX}E]Ę9R{;C%a@#v+9NљnnַUzS~po qs~X㕚Ld2w)H}o{{4d]Iۮɝ,k(&`ceeR{R'&%\s8D~E^,(r@P{Cvtܪ,x2Dt%D\oaT_h'a~hihS+b>>|ҬTo Suyw#UfHBM^N#aGd dw7[&B'S)29~$bJ%.{ƷRN4a)G&91$t6S.h 3w䠫FE@QBWG5  KY6@I!dN_칠TCLHqP^^ y&1oDcHmi|8mS3KEV SW,{6s$msDB4ii8]B1gn8B_g%rϑ:Q2C`24E% 2qKE,Z呈V誅4N1J$!ۨә]ow&3':Ce@wF7׍W&o]2ØO. Q pWO;YgYp."?G7mL5TP{ؙ+O?"z8fÓt4}eǖuGP-$|Bl$E4\ѱfUbHy'E2z 'NQl`qPw5kZOpI:x.~swgO?^2w_[[Ϟ=ۼ#>[Bo&|<FK z[ojoدWǚ;>ШyRok+Pu:n4j]GTx^?<9CuU5K~MIACz KpEuZ{o+juu>n@=UuRm{Ն:9m7k _oJ ZUw ?V0wU ~: uިpL=@A i'I FTm|(IB1QWƹp6jqf:mԛ}fWk&Mi]ٯ8Ts Y٫8=aavUxyL{v\:5xT4aZn1h&GeǪjoo@ XzVe7@qgPM\eUתu64u{oe(` xʱ +OnoBG|Ok+ż?Ö%==u~>޾=2=Hߴ/icƯb/ߴK˟/*2/;U~Y^ ɩ_H} Ld>WlT{wiz2ԹRߥ_`n0N)OTv1-ZwO;30pwu}*5X݈hG2TyPqȓ{[-UЎ} koCSV)#";_v:hJh6Ƭ'z Ug!H-jvQT7+&z{zHi**+\UqX'svt|>5j[b\$wPܹv^q@ 趖"TVȁjS4YΨ4J"I?z7SPV ĵNGe}b Wwe6Xܭ"*Q~}7ev(#b&of\F O3R?W7Χ65=ћFxIe27MxǸ=*ok9(Hy f;K|RO`BGs<HA%ojټNOٵ]a nV1;Gi*4dnү7 |Iy'я! k+s[..`?D8 GƅZ IC}muNn_^׽uu{]^b̏*@Uy#.z+ dSp>{!nXW4{$. 9+(dƓdksm&EDY;G ڊ')[jtOyA픔~٫`ܪ`o2 D|:E)N"RYe2.LO^ZgoQ{wv* (m&y5(/Yy*?"mYPByg{y0tGc "<ɩmZs̢{ ڢd%)~Mxorqog⿷9CN^Y[ɷW aIloh