#!/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=9a55f67c61621eed1b3fdcb7d91f567a # 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 9_;ksFJ.J")Y)+ IP$e|)$@@=^]ݲ /[~^guM?}xnz ~Mgn7Óp?y|1oRYɌ0ƫ(vS? w@w|D&_I527\u™$Z7s?tGvˤE1) YF hscV<^ilGw7n q@ѽ^3/ >NJ N[beEW&/Z,h0@+uI(=?aC4u"Qǻ[sQ5uhE%XDzUH̖nc i`P"3Xsf#]rFOH8ٜ"Cri a6.XPF x*GZƒP`zBђDXsb~:Ssri !;:LLfP7-vl̞`yY0 iL?5ubӑmC:F1>0@p @{ҡ]cdhSjhl14Mgtb `p(U~mfkQW@3y7Md *;сNdb00+D4CGb P΀'%3f'm3[ggɐ$n1Эhbf 5[ 2HzMs6ɸ tj0yHba}b~@( ڇ{w{%KPHn``E$rᕍq:O;۰m- Έq. 7괨Vf2mxi 2ڐRd ͦzW% L1\ CH^hօЁ R)\2({'7o4LgưC_qN ӲK;98#];mJ<\/:*Yv 7届`, ?3*%b\'sq1ӻW.{(/kBr&(>@9%cU 1Fn ۞NJ Ŀy]"XdNKc-0C'ùfo/4 r(y洐å5 ŧǩh@M?Ԁ7눁*4|(4P&p!EF %aw.a$ vq.TI鎢 $`@E4وmH kaH- 2-}DXbFJNJ۩QA`=!e3SA7 mƿ붋s.&hf9_:?:^`v] @lX" ReiPmBI)GoO' L)VϦ8<\`A%Ιs[JOn_2U'P-S-$bDe=_v׫E]&1/xFdyiE'7?'nu$0(To3Zn h`?ùTﰺn*d}|ټxA socmz;]nnAd-;+Xޯ|-N'3[ش~Oa;s;<4Z?<8mlT)Mi&5,00p;a`lQ"FP9v_9$|O1$_Oʍppe6+J[n 65,B҇̋Wit.45rVnRE+3$-k^4spʔ+bF80a$]dHV 2U6hڠ"g1Ty8dWӅ2D8A4K:cPDHQAs2&-;R3~d;D23Et.\rW:0u 3T.~/>+Z|f|qIJӱF(B %30acUTfA{wr{)6ZB|qhy9~IĹ k{PVidjP]XW`}e!wP:IRZahCЊU g@ù(,ă}EW@׆C bzun,PB$AO['PbzE}RXԹ; iQ>vƷBH" #qpj΢ZtuCH$h  iU(KGɦ?l=݄4Frad&ӹz9Vy@QMO~꠯ZDuZ)h@YTʂKH>و3(wsE%%mk*BZO/py S:m,@Vl?"Igāh6 a1悟&HFOʬ &*]#@Hė[9YV#yM D"Ԭk:4%/2,EVKC1t 2␑E62D\<9)oU2FRN(׹\X ˘Cc㦴 .N!EGa٥>?Ap7H DA -%+.676d% 4l@`f:2: UiG!x;"H>*Ԗ2y 7bAKQ9GQVr# *w&v y2-@~1^n RCKm:qD/%Ȅ쥘l "GK]ywUUbln@ƫfnZ4>+f(@udpmir!x&> f ;5kxeβ vEQ$ %Q0* RTF QidBʆ! ~m[AruR֒2#^+Sݼ0,wU>){u#֭\zM`Om%#PsL=6iKd&/ 3_s @;.[70ѵ"~#q|hnZ:#_% Kanm- ͩ{1i@_v!C!k!;)N\u;n\hq;/TR"'}G-9 IཻZ]V)NqZe?wxd3D,y u 8CXSR$I80IolQD~N=yLc?csY_(^ oL*%V=٨U^9Y1S>,\ }y܁k-3;lSD)M% =@%1LAR[H wtu 1"1> ݇!/D|..0T_)M,UB˳%LKw!uai$QJ/h[yx$,v 3=n>Nw̎/ks FIPFOn<=NE(Î|I}f+_@*}~XEnƲ[ ]^!3x? u4vIri'9:X'(gCﶊB @g$IeAr!8o"'M:EGGxyAo *%HiluX11Óp޹GC*28Uyr!náŮ tEY.nfwXQPEy\ ^RP!ۏ7Km5[!W9e&K "Gl<8w8]@T˺{(O_Ԕ]߃׽o~ޟۄY5_]ܔ9xWӝs]6&  t34 Ɵ]sOXScvȻm-'ƷJz&ڐs]й(Ue5L?nzBv㧪 H.KĭbJ'iu P#ˮ]fӏO)ZBdwxR/vӋZ/b~ gTj:o ֝ 1_vX X&numidr`$;c<<)D[FD]gcXϭw;Վ~2>0jN~5cLKIGu04Gw@^ȑfPK8𗠃2]SjA)E uOdzGB n4aWqx\^zCL]URƻ8dʙċi>_ǼU@$``r' ĦKV)<)X&&PoNM wW (|9˥/0J0 షEWÎF䝷@⸊ Jލ#a%'&,`ڒL].yQ@zin6cA Gx޹M:L:{c}^^u:]J%$l9Vkz$`@  V% ḧ́Wp])rux_F4-/RQY>P%u܋xXZk!7y _r!;o$x0rc -~d`1+Q}ڋ?tWn;3'",pGfGD_I֡ w؛ ${4mQOQ&28R$͎n /;f"hILq[4L~QΓqj@㙹32t׽FQ .yFXA ö!? K꾕X8UD}CٵU ={p|nSX ;~Crl x(W3.^F.Df]n&]v%lA <@5t/=S :k1ݑHvRrph=rPw p{գ8j̦s ErKlj tBd3@ I8 $d|Tw6/]q 9!HѴ! *ȑX/[/ECJwK'QPZ>ϻQ_Qmd ϫ'nd!5{Jr\Ͷz䐍H8W Y3ØM:LtxҨsaDW//=֑hA/Ѓxyd_asȄ-:b0\a \Xx?!dhD0wi-+h=nO6i-D=usܞJ@u<zoC1<9Kz D }\48G} u^=0ӏt)Qi["Pd9Li7RYkeee4;zju컣J.u|vx}ZzxӁob(}Bt#nh]#aO$d^`o;gE ء!g3zM5賀{ǘ%pᗌZpZ,:;Bz^J"^ǀ2j4X1&2͐e1qrX@B۠ UR`Vt`cZ!g\.gH:}Hj!*"z3ר֎v麎zh6foX*1D{SQBA̋[ QL)xaI5{c 5r%6|ȬMZOt!] ;aIrJ_$F+jpQtq% j?uX?S(QʲP&lLAI;W%~]v %U58>7m(^R}G#9-eL:WiligX(DKDr ȬLIWb2F%Y$FZ砲׌q?@N+n](~a͋kd:C)u)wtG$jŝsQ$ ݤ;'\?E`X-;.Д8Ac8Ik4,i 6H\.HO*.@CqV|ʤ$fJ: Q .CB=\O.~#W@Ga/~Ķߞ ;WN#Bmš;㒚 a~Bb3IOή.&-#rr'&qE= E2B][-r+?!ԦePq?odM-' `"Hڙ@ ܟ( ȩHǕٕb@~׶&KTyf;D,}$BRp"a!(a /XZzX=>91k{8-GpN')$6F`>Ӓk_Už#^ToBgOHZѭ3])`mC@URѧ7D=Lor8bT P\bk!3K0xhBlI?N9jOV! mځz,כ _^r#>cט03'o-a5'o F}t,cg8/+ɋqoћK]HL| B/³:οRZ"iI3p>U-`B|KUS '@f6W 'fTLGlw04i3 `ؔ`g~uIFxaT:3 tmqϭ|sϒk Ÿ2~:gzݻϋesHq<|Z4y"?O|Lygcgu( PgcȶՁeaP/_AsI K|EX [4Dh nE8=}XJdsb%K[jEꏔZf>B6^|t+^آ;"R AO^5Y6w-zUy٣}/&fq }yƄ_vfŏ"YΣt@>;rDwL') b #p}-y~DBjol6\DyG/oF@pvP/zY|7AUKްUQX8#a*#ֲpO[xDdрrߣ;Bab/b] #־)tb47ntTPD]1u@Qm:gR'3zRiiiďqX8#!vҒj v}e%b̶Tzd>a Vp`k3{ _z eNYbH3h\ho AFo"jۆ<ɋT ln+;˓- 6S!XebH>J=Bznb.[##)N] j |~ i{,fi"Ñ<[22{B?(6ccň)EC_ Mui<*7J3ñ'U,X-gl^s4Cy) _Cߕf݅f>e8lORo6k_ȎK<*KDOGrP =v|[dqx-( |8/̳0gRِΪ.FkT^~֖DK9hIKlAݎfjƄh-Kr4m@'갶_=nTU\/o&7 L>_uN+lRCDS srYD IOޖ)#quF݀a& w>`܊B[IQߜ)j"ޥ EceO "Qgޣ&i5Nx:@}YHhhi`$0+ffMBBQFxJaX[MCptu3ↅ E4vlo_8AHZ_ z]kA0LUwJM]V{xYU'WaHgGE7Id wNjԎNkОZQP5̛W*(hC4Q %':YS$via6lȇίRkD qS5^b;'ou=]WRIB0J7N+<,d(Psua]0) lgP^J5l*xu`#;,IlѬ5ϚUBˎIK5vIQT2uA }֨0aE O HPBk ̙azRMznUx^U+r4`v1&WW_^UXz[kTyuݞq/ vʕ75xh|h_cQt!!ZZ5[&455UZS~Sm _1˃{֎-~C`$cۻ no`w/sz_zۧTl۠7]'zgJUu*=¿=vB߿~F;e/}1lW/w azF "n96 AS*=ՠ|C#b9a-v_xtc+aϙ$x5s1 7:.BYOK}ȢG nM.Y<\^둖R<ʌ>^oʭFi9!'c,b} v0J!h 9kEuL aM\015$xN%_lW$j`c;`<ƣ'3ʻ{,?c XuL.UTZd@Kc'`=)K~,rlr";a,k{ i]?2@[qoj{7\ WC1Jtuc+M,ăƬ_:\QȚ9D&N}$Lu.cq’&2rn|K14[MQb箧l#4?1n>׀㔌><A6nHID'UئDXQ`Jz~ -odDnLڒ'AQ]0KLw(5wGo3ƄMGL1*1nH]y7\WB4F[t|]|TV/1ŸgJwjZ+s%mk]]D/ldhwx XHXCY㈸(qTe}ڣ/7h&` *%Ꭽ/ӒWpO)޽7`Ûh_?BD ץi v٫u70z&k;L>7w !GiSvnJ_Aҕg4I,=5: xCѴaп 1墒&jS89C3\\W}LgIǛnHD]X(R2]{2=IW: ƣ 9ܼ:4]=1b3~ ;jت6k\cͤvѣ&!lpɀxO%qGh0YcxB볪*A}ki@ Uhka%4mޓ.D?x\ yvkOgB$mÑ9px蜦COR#H?!Q)=ryvE'Rpɟ,>7g`8LN"ؗdVVvSqg>0attSDAON*Kh~`x2P?6ױR6 "8-;TRGw s/S$꓅)|ō;.ڟ= 15jc>V#Y)U!ѣwLCwϐõ؅93 ȷIV$s Un:Y$6[&{0[41<^B~%F10M%#=1 30$.;] ٚr4U$m| ƣ0챋&EmBE܅=tgTQ&Cd#wj5d8V|U6T ώ3`=Pac21̗e*z/+#K% =JdqdP4jX#gQ[q.I*l4'/uS+CnH׮Hlش#+pўoE"Mϊ'W7W }ԫrcN6oF(^*_0Db)L#m? [b"s]|F0^ дț@.(5Ts"Q: 0ګƂDZ摋y!YLb&in@25i=hxV HŶ-N1~~BC d<{%ny Vz<;`_-cCSR p_*F0!J;HTCSV=͛@x2 Od(|ea_&DԊ9r \PYie\\n: ^lS  &:,Q:pȫ5m0B!p|y!pvUp"VϦgaV1]6ZxyH8-C%rvߪ}MLL#K*(k%:СQKTdкG.BУC9NE=,Nzdc!(r]<7*nj+avFOeI(ЭF/PaJ;o],6ƙ#||Z;=)wB҄L|rHphk'(' ]`WhpLxD+#0-,hB/D ~na]+O mZ,F\i*ڠ #B̌&90Ck0) s$''ŝM,x15$"!o!pc8Siplܠes0szC# N֩茲u,N"oM>aOd3F^n:gwo1bdlV u>E2)s7[fFS䂑o+Y=t ,ec i֜ë tGCCY.aMYnv2e.22Z3PtjΙ^'g=ٻO,j݆1 0`t{@Rh ߌR@߆d}b@pI)Tr"C*^e.b v[޹#O?YSUpE@q+Vq-TMM 㣜xOۗ1`ڮxrG<*A<$[cRJG˟; a,_utܝM n|Y@>Szϱ(CxE]LziɘE.ӑ|#r-ų)W=Sy!-̑Vl׍ `Xb_O}la0<$Ͽ5-<  zp<~vz{21&[%kk!Liք7E`' ,M$Xu=*4V<X *3Nw-߿sZJ´a(LqZP)ndJ/E>d$ZY5H>@JiBZZª,S(-=bpzsLr eND(Q:-/ȼ͋vE߰x'dvPpӶ !7y+A=(R,i UZvZ_5~ ["NjEq[()S}5/6qbR4$X&,-j4 =;n5򃧀ikS6 }Hȋ"Śwx%zbI &(qe/_"XLwubHhOMk(EBih"UH%bR!-q|Jf9p١8){=1rşǂ/[/O?O/4яD(m=fjg\_wdYL0OʬZL5Fug͓qY><a6sT[v[~k ׾>zn }%oiz3},8Om~;[DŽqV} i: B( $y M sS8m4ѿPE9"0m%'ش*dxZ7N>9u:?IG'}<:A9uRpsω%*ypy=n9NݳxpSwș'r2Ζc';U7ON&'hAg8@?#C(2{Vm_itZoF) άvf\0ۧ $<*SA|}w|<}[Q8A=Ǯ JM򪸯g`^P+˯"k\Y<5Y% }Uؖ*lCB򯖮hj)ߠRG!j ͮxi6)%7'Nk!zl< "{\Y{_u2zHuޛޔ])}{#0& ގXp}e4Ɠ`j?s_|m^]} ݁RF&oΟ͈3Eo2 ~9k}xv5^? bH|^(jkn\fn^hA J%]^BS'"Hi Fl hIѲHL7΢/CWT=RFĺƥC;ӁT! Hf޴-bLqTZS2ADfhFu| L7~a̼So|Mx>щe%+{f[j㕕w'oxk3ukSnPO%;7_w,[>ڪmV"s^2m@XSl'O-ﯮ0*a2/lmVCj~eg ? wQA<0(Q3};b3s^];Nr3="c )u pm+Ly4aW 1?:;k'Q鿍Oe>Ĉ1 P?Ҁp:idž2'k0 93@"_Օ]Lս^Jm/ ?7gztFJoʫ*3]}׬Krƿ^௽Ó?+N*%4/O[IP5p80..q N1ݟH1'¦Q#FիS*"GXR,G.KM`0^cÿ \'{5sQ4)$lVSQ"?!oU)Y/L6Zb2=cͦ,BYȡv a> th!)t)kTpmG| $GU2~(IŬ@m:n (AM&( !:6cV=z]b*7 :WCdF0 BFI3AWql<~9r2t\wa6d p 10QW(<AūSؚv8yF@7ڧq=7ɫy3}: ])lit"y<ҁo+MKf;?Y(>$c [Tc0[P9ꦠX ڟXX׍Re*QIƋ'.fC>*\,U'hˡhi3ŋWvZ؋pWȈCV9e8RJ< î+ ]Eaq8n[2#9aCؕa?!rYIq0@Z J*M[:\ag*›doU"Ӄ9ȫS z\)Q%0Qq0fuƧ9?i㇜A,fڌtWT,7D4L]p+ȷI0iJMSSO2Έ7G-"Eq<+GrYI>r]uѹ^nHBAG$q(3Хs8R"IKkzS4 N˂N2bH*T>"o>M:F ?[Iύ?_⳶vPڟvgimxCs(gn/w>d|E>>J_sGRcT$g'\'#h__bNJɶ?PB(/hmGQh"}٪+wfZdsfQZz dq"4NiwZ9Mkz,4lMMKϹ v>34{5|o(1xlC9q$iNa"S۴ҜZQpmD6!=9&΂l"*jwo)'2[Qaj2" X"Zqφ ӿ[ܺs}f4˄ގB"^ +3g҅<r{}q<:I&;2KesH ? ]XEvww{zp|T>f)uߕ#y9LbMV{h8K{ES.%C]y_Q㴗VJċ(;7f՟z%^ZP51B&WA9AJ6CVQ.DuѐI||ONMfmQמ(XΠkG&zri8* a]*d8NR*,oBQZ)bK޻T\U\SP~,? #XT.@? \)Kk (!1gb3Wv`ΦL ׆ }ډGj tpHniàoUjI'CNhS@,=A?6w1D42S;6=:wYy,Aʍ52RWD (P\/+2 CA\BADtyDI麟g:'-岔;݉[uԨs$Ta֕~fmJJWۢkӳxuӤӬsD!F [yܨzC T+:/j@a\:Xp/Ўh lU ҩژ3!_d|(C #J՞$ݧtupEA5 #A+\KLXs`Fyi{QV"2}ؽAGY|K̯_7׫* @}ډdSE*Z5l |=6/W&O{ mp)|s tN#| zS&stאdm)ԅק%ϗN,glRb1GjmPZFuڝ(=L ]6ěbtjM$g{?U߿.7^\ +ՃquZ#ň|O;;E=<א%2D1\`Zi흽j!#㦏'jo12epR[tL'q<`\ˠ ܃ rNZ&:AM\|ݮzO &?a2#-Lss'$an֢j^Zrӎf2)3K4/ӣ?FwZa؆ހ!'f! > #3XQ=BDly.0ac8FzuZop֬'>^W!NVՎNjIԴ^%-Qf,L"1AiT(E#eԲ@6[V#//#WH|-OjͼISr:.Ĕ}zQ/lG)ek*Or!t@hVEI+5)Д=+4WJC`Iy0^~sz{e x)NfPs 6ըd.gŔ;ԫx6t+)^~QsvA$sV(7`mD^fٮv\T7qdi:*-ejJLm<nL ċax G~!c<%4H%W$;Ю7zĪ3nڶc)1:!U+Xx}kU;٧*ʒi=05qr2*SGh9sK@J1%AE nmV&`m} D€p(!fpq&v?^iڍx4E'g 0v- h*hb6KL{}ғF9_B4&4)Q$~_EgEM?nO)!V !@jcĿKN1IE4k[:9y+:<na 4#s L2d )7ŕ ,LH9˟I Ij0c1cgB\5ٴl1xfrJS@-Y8'J`E/іIVd╖T$B5NF:M,jޥ[`'5$tޮ'2Cly6s0,'CR:hTJ x+Mך(6G契~ޢ:9&%i?oCUKx3쟞INg "[l&l2m*TRlM'JԊJ%=SUOM} Dj(QRװy{a{4[~֞Nê0Lz@_*oؘ(Rpi ق(0meD<7v2ݚ4_4I6MzU Z:Ȕ)>_jh記b5.笷#wW>Bvhno#߫zEN'Ho !h0Q# w#f9:z" +WݱZViq^UT? r\Z_ iES ƏC.=*wɯ/3[4:6DQ=bgC^#syUKa({V9:m*|YqcmE۵ql=V,c2$!{]$刔bcLI#|WL)l+qսJU:] m13w8$kL5r h )+ ږkY H21^Kor@}!p0PACA…+ @lsmagQ 18{̹n EF2Md$=3n)KsPX`-fl4QxniTf,c1`qo6\ўA&Fb;T;Z [Feu>v>5̟Dњ{ُSʻOP]ۿP/Mh,,Eսc?y46ʬx-A9_=fb9ӆxtOGo8|u‹9͢ :%Ϻ#P! )gr+VWw<9&L*UMj> {X?adaac9% c`g)gUEhG s;KgÏR Di&w!$!ҔCIK3gpd!dIָIWTNu[G-iMO ca?ݬSæ$fdސGi5)|E&+ =e.(5HK|7fU8RRYjbUQxEp/:b4egϳO'p7jcBc\ \/-$qA[b/SϬh utc+p8!v]$$?UqA!HcJn=sw'9#-@`_GVNR3,gG[0|(f5-;:rbݑn *ɣ>"NqSgiذ/&BT9EoB~ X{ mc|m BxViQtOtAiԧheYthn.ڤDA9q<&Uݐ.]_ۜ=K1r\3ŀ)̴j875$Dɡj`m>ExN¹WkjaP`Vnh4ϩ5Z’]I/˹`ث@#"EyMo3z#rgӫH62pYFwLz.9,(:j"=AރuߧqMERKu ( 񶵝'G'}fk!^_c>sxY̏DggmŌ~1[r*JZonTɾVZVQ^_\j%`Gnh\}1&4ndY{[ðƈ,Fr^Y ues>ʮ|ǻ(}}o>h>Ϸ66c_s?Z:DH1 Ѽ8M$!8z!MY*7ܒx%4qMMᅶ x aV٘'>clqt(V3A{m F]@V;r\Tf@x0 mpu[+tT~Uۇw1%Lғ S4j=솷Yc2Ym VSst)nyuȮ/5 43tPLoNdX,dN:+:I Ej͞?]v'7CMMO|r*>E{vGvhH)`?'57q?pS8 LF(nƏ䈼' ئj]0E[n|7q&'EC] Rqo(_؛-q=+_{hsFY7ɝ?=\ךm緽Bzh=w Ou;ز٤7&oFhMw:Rʼh$,E$MڷetI~&h( h%LWTi:ihDi*v.)Rt4 W\Bjre0wm +Ōkfl\/ozm9@0IgQli'A0v,WN#kuEC ZVa&㬋]toֽ1VE{|ZnN_Ws,kBc`jionln&6>'CLyWŔ%'])8x˪:idvKJjBfԵ(38ɨ;k)S>u`e%L}'9cyˋu6&fg.e2ʨ3(Đ]_sW8^[[(&kPe#&߹@\3m}NF@c<?DCнhhb5Q_C3\ow鋵/ֶ6Ehiܽw ѥJA Tva!Y1h1Np=YEɴl~K'D_+8>@9ptRǓz:ݨY0j/JȖ % m&5kډF/{oɴM)Dv7ɔB7a63y4_s_vF]70n.&I_ t3"Pjt#9nWð} yx Tؠĭ0hwq3GzF SeMkϦ"PHðig<NfyW@WVEKSz*%x jx+$ Qs|9aJ̍XUOD]D2q#eF@Q%Հ] T $^<%9d &fhNUuJ/5qqio_<0HOz[9 惻^.&?mU|O}z*gÄ7B]!$ģWp8@098GlAߍ2Gdeػfce`bG 8Ǝ5L1)UATy<8b4% :q$$?9|C5ł:@=`<ϻ!+ _&]uԾ/33>fFP쩮OY{N3ozԱʋ7A.=G~xs?Cu: 0E8ь 9 c$a 2:;~v6֟f_OGc)[.r|v__OK)U(Bܡ )L&#:D2=(E_pPR"kmt^e}\(àp|`6}"ӯՆ:WNYqDA_9/Ou{u٤D*K*a,(Ȝ@B%gVOI`%KTe(D"nn'ƶ B|Zuח${E*Jiun6li]䓵i |4[8VЕ픖/\kpN:k\?\K LEW!и5.`f:1 ^H0zt%\|SWAjFaDJ]!H ݦ/C.ET ջpoUпJ~xQ%,6ShM91T姣fesUytG~]ְdyqS) YXU4aLdso%(Z)e⭤ c"ǨeaxXTrkyo)bP Fb' s'̇;N!gq"_L)f>aaQ*"W4m.0pu팕~YZߥ.IYX./;2=qQ YQlux@[~!cU8au ÄPrqc\\!'LX1!Nͭ^BvTl4ırc[}iLĒ^|Sn9`W^]s4Fĝe\_rM9ϣ,Gʡ<ҞʕJ]:ЛLgtk;ӛڮ/ӧbHB*}tFCtVs1oSiwlcc{pUS G[Am P)eWVv^eruvx((O.D#[#G/_/iΏ=e|Jcf˶1q.jU9y{6]T'E,;p> Dv`-O|C/Bf7JL\+G]8Z4.Kbd2h'_wF)3Ob?_ |'i"w|zDihQ ? {*U$W}oOMR6AP@QF+|#JU3M2! 'I=j$yX, Bh_6 KܑDVD^d4 (; kB(SD3(%ՓR@zC{E@Ich> <8Po 8k^oliqУ89`q~&l1snV@bMǿ"~qT h8pa ̶%pk 89h-׫ S6J˪?9}_zTO+pqހVҫ{U}wZ6d֠9h^>n֪aؤJUAA m֎jM(<)PɊ@UgyvXkjciެ~zҨ*\9~ FqS5^]9y{\쩪*4cg4J^o✢o0F8+IfT/H꿟A1x*#8[2=gS4kMxurRoTojƎ:#(ߢ2\N#J$S־-FM~'g*W͚bOkbߐdI&FFV#e*[M~Z|~W@*^l/2Էʮ}+߳_4])]RgQ|jY4V*(/m.M$= cN),K@X3͗|3 FX7/~k8}:;Bl+^qW~Vk*8G te2 83FoKe2p-f%73^O;?,E 9:)u@ ƙ;k|k}Hvb&gl$Y];팶%$pyib$7Kt.X3+4i|r| XGE{QR},ΆQˌs&{2ɽ]DjCle3KzQ#ZWo/ !: ɩd{6眧|SqEsA{8C-C҃vfÈ-W?P=9i< eX8̲ X&N[ X,~p)dR DIʤ7sJ$ !и Lla6#OD`Zv,A!1EfS F4ny<|>y<|> u0