#!/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=55c3bf5cdb2a9fab2ab979f23064ad8c # 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 7O`̍σ;~sr|[o9mitOON9jaG'R0X<>;WW`qZGVYQCMVqA0# M,'?" H`Ɖ̋|:qz3 "/yb8Y{;'7^d<^ %x Ҕl靗?aD 6#?E%O -^P,kfsA\7qH0i0 <Km"B/X`"a# _r.3x^(A1$l< P'P$F8Fٖ G Ȑ@DOlQȇupZ)gY> ʨaXGUBi+>C%*_IEBPka}o&=|g&Gle~ϴf zv@ڿА1ۑm:̺-mcZ`֠U6oX.Lt x{!^^W[r8ku}f=:&Cz֍; `Wf3.s~V3|?0m$H*0OofDjϲͮ4O]` ogdv-x@ah(cgW@`E΀xcۼAāq-wj8~guM:Ĵc"*=5hs< |1v,5pM\k8wOL:cyArh&1YnqDrZ[Wkἷb`֠ Gqf(M%nXuɌ; WAK {OP,\$X0 fa7ZuckN. ~ZyނWm\GVkUk'#ý鯵鸠 x`i}4DC.-)~=UիUϽuq;Vk,gPyʎalŚ +czE[h5;wu_*6?䝾y/O9;aDJZ=nv)Ȝ@v{<_:o9jY(ΨwCE ޴|( ?9]CNivC[5) BU3tauꀬͨ%^FG9] }"Tl ,w0(H́ ~NTbMX4g/H}(hlVPCť}GXHf`\…P:R}/H# 5O+RDe":vL:┕I,Rਗ਼'4,҄G"szV[BzBZ NHY\ nwv#@,z ,O)r$v/ #gI|U}UDe *e}l)vABBy J17!F{̺_$weSɉ ;/}~OU>Jr2r澤cdb(ZDLP#pJ`u4~_I {"H` &Mv> x`Tb[@&P3BE >wwq #HؽpRv $0g(qN2f+iZwFO7>,.zpi9>6ُp%8B"æ@oǕ%` JMHӴMg|c|@K3RV{_ZLȞF"UW Й~>[k&LS:H|A8JŅ8 4BOdRqMJ5o-WnQa89)I֫=gKarLAG6hD^-֠>cg,e B?y '߁HQ `X$?G5$D FKѝ"'{WPǍp\i||Mn ]Hh #re>⊧^Ҷ"]'KmpȥQ˂4"1牎`fvx"7*,W:5c9 $b1.ݯ9?2vڙVVe{SEoD7g,n|ڈ&(&M#}nCi^v~p^j6ӻ$^/ %g8j ےst& y)*%30}}MwO@GWF63g~ r`*5x  e{<;i2\}Sv@+`y&H!T!Z"e߸rz zYe% %N HI)+pC4)y7XBg8"dTv_^,v9x,f^v9u 4V*etҁ{ m[yC.'ȅXT۽ ]/)Ӫ:d3N cϗmnxfQUL1Tu\\$OSa];j  g}JJP,)_; 8'TaWts4@ihx.׻ЛҔ1єo Gy;t{bWFQ QZϰȨ=*r5^)X›ru-L*NRq;LJOl-7d_[ñG^2 vOU2N՟T:H~{tz|^(7D(^.E½Ϥ T!D>xO"ߕ,m(0x#/'\*Kcw7P`;:4~ G󁙛ؔh1@PdY@R.C<>!0,<{yh+VҕU-,]<&w/zm!漆)bF'婏MvNr Y>/=x_:FZSg근 q9*zgd䯲ih]mZѓKh]A=kו TN;vTG{̻z~}[>~Iw'CNpFWZ Ff΃Z;D'zF ~u- @ ;t{ǞXFph|pJwV/s|A- .3j×ؿ^2<ǝNuzutO^t/d]`jQAia_Y5 C*~z3X+/;^{v=$wGcڹpSM0V.u(pukfU*4xKW5:n3OÚPhC!l 3Hf4H 3n ʕ9Nv,@*yD&;##xzu {r6{xL4Lz@S?~;o Xc5ĩSw/<༒?cņeX$ j= A>H}޻Ag ā#tFTB ʩ~#hՒR`kr`b>QÛ8PI_ 'uNMP%f;2AlͰ7c:g۪ Lt4pR:8Chdo,ҍ[?TWK<~u5-:CǗF=VuR@GLqBlz]*ҿ1-0`{T3@񻰄 h!"I#o=9 ` p<'}=ᅭoPnb0XTg,ߑ–]w֡E"/%| SER㶋 z2$pocX݁qDE,sWM0ǙӔ7(ozYMX,V̑Jj'\wNxoM r/{Y"3G2)c}e%mX9<{ۇTGW{=y' !w]^oDdhQ\ǣ8zĽIx8_]ޢbl[{G )F~ߩ5 "4YXTAbjAF^Etw4ׂ`7Mg<`VB)8EwI6 P_> :m}ܽ(x3n"E[_W4M3ռx24j ;AD~R5A]YI2%(`yys GA-Bǧ֚5Fiߺ߁(IћBFՈ..DR!xJk{uԷj{Z!b,;T+c]6?֠Ȭ[Je!wLH)ePZ7yC_.~GV ,Wk{"v K(R\߭bUgur _wǃwww{? z^l*z ZDȫ,h]cq7s tV?5k5(.1HTBVʫF wꍣZu[!ͩ%z&ɰob}^XdԚ4ytI|JQt]8h7*.|*qaܤ Z "f6(Q}nz\--@i ;+˔F'N**҂wAK")L*E1QyuIO$LTC4>tT $HWǥ [$qCD<mXrKڀ+̨FD+oƽ: y, T{s*"&9ɤDʮfI}@nv0lQy\ԑIi0PFFkrj\ C@.TJFg-}U5@}DI9}{0䓦I7fOY^ߜ=q$D-~E?}.ot4)5 9~jԥ^)bmXx&V`UǺۆ>n̓W{;tYG]Tq jYءx`AܰFUFn֍~ NO[gs_67HtգwSH"_u|Ueg.3C+G";i4,[dkU5 #=f1t4F,8|S$¶TD"5 џ TtFv)oYh2#r?3˭` X/LJaR})'pN~}V2R ~63)gK-'eF+"^`c{Vs$[Xi:,}ŷy3?Wr7,49 C8i?+7+tC fk8iGI!"\pDs!_65y3t/<]{+0i7-x.J> >> >hZ߁ȭNţQ!!MNB1aqN1En7aC\J [9:^BP%+B":Cŏ"\Y-vqJpϩ+ `LYzyεka d8dޥ(EF+q](r#5~i*p峙}I"A vr8L((J$FB1OS˸CO5]խz ĵikߒ2y#_;Z-o,*ӆ4aV""R2:\_Gxړ,ϣ;o'DM- xV%)$W82j`j#uausj, tWHyIGF>jMng(%8llZݶ_9Ѥ,bxϦ_hmUvR_bjB4qI( юbN۞K/_ S0jJkf-% ~ nq(EWVKiTsEm, c}h'CA?a.'NQp{uLZ/ZoV-51)r3}!}K:QNM (:׾Hl{VjLb?.9ƚ5[n[~ՃGP\TCY1h)ABxge ֆ< %9'msZb+ˎ*F>F3$Ӽ(BBJY6-kF728@;G{pq3FR A!I)DqYJmmOl4`MYn*E#N2ӋM)'9ژ;'R*.NL3NB$zbtS4iuwf&]Q _QR|/-穋$)G; }IIJyg59Jz=si%iŰULSǻպO\hA5Ov|c{I k8 6~Nj2r5#3мru޼`B'o1u;BA:k -EpgMRz3 h~^CRO*_7Vֲw_Br\{1'A;3l/|}b39ɓ1E0(x¦zE£JNj7CٞDyJa4WBmO8Y"ǹ ACʕ_dɽ~EYI`x $"6p'lLagSV!gh ^s{^!=r{'JBԌz/(Qlehq8udGD2pjs)k6ƥx|c3zVĔ+W54M"_TygW#fk'Mh.n8o9Sl'g>(pz fG5Sm8vǣg*nS]E4GY꒽+Ib^;\L@7MݹBbS[(ƅhk !;&:I&P9zEzJ*[~(RYwC CQ;]]K wQ=i^T<$ +ui^6e1ӕǍͽHǓ7$qa& YGAZx߾S"Oel۫jȣ4ݥYMfje ZX"0ʬKx6??*,5E#G<'Mč{U; bzmr[hh I1'S素mօ7amVmX?\}ih2 ql?QHS{~Q=ڢK"HxBp7YMeϛn:x쎩7NݾsN7Q>8s sEW~sw)Dd8H+D})\P4n8UFP2F'%Ѿ[Yz *2UB!/RQnpwl9L(:ܘ b2{p4=;onɏZ0Qy qfqg.3զ'YA yed71¯=) @tIF NL3h߉7pX(= %'|kzl +CpVD\ wP`fJ M8{J`'yLj?՞UM@!FaLbd)<!ǚqhQI-*-alY[= A .zI?nTzz(Ǻ\nm沓0`wKj2 s, ?UQp%FTϐ՗Mt8\*=\ W, H=[X JIgY=ة4j% ZFatFUXMTfvZc*I@C { b"l?<*ڱSŖX1ypx!J)&-"Hd%} O-Y'pñe`ec[oj[?6m)k%!ҿ@ pfsْ1 {Ygx!;}ʅڞٲgL#D)C SOĆzbV vTԁh;(7sdUҏ&j'׉P>=7_Q:XWG?B%!RO0gS\ľ_ZbL{L+IK\;sI k'&7x,. ';"v,pmk%iv|kFtL퓳Q]g\vBƈp?sB?ezٹ}a ]\`  \){=}:11SvLJVyyVroeF"_+x+c [;3JvDU.ķg-EiG#srLN*7R+}븪Sq,嬄.H:!vY3g!WF~& \?Ӽ0@R.pG-V~$oiDA]W, zZ_;pEIלj1$s!3-RZE ?w\GЕs(S%.MvTt!^k ,ic3 T|W[a^I/L^|9M<~69O)4o"}[ZZhNU?*% } 23㼥f:?1L+$vka(&.LhT'2ZŊz:3.LF-|$Vp )S猤u#h֨  gxrPgGξ D:b$sB{|.4=jCgi\Jceݼ>^a]2tq.,(ƢcrJ)u[QO Bq[1Mwѣ .8<]?Y`x fLv])'yz֘\ zK蕣1>K/ݓwznm33*>IO2CEӜ7G vJ<½,q65%_v 5LAmԨ+(`+{ì)3v?(y0،q7ӀhO3Us ߪfhvL7-&.$ mԔBxa۟OWj[\ed^}E逵{&YZ\41-fzHNH'KXhtIb@1gI< 5,X5Q*zDHj51һF~U81$WicwN,ǂ\@]+XNɅgAs>=HO5RGKs5sOu MDæPD*fQڨ_3d G4D7K+誂՟{8Yb%]t_3k69'- |:MA>8;7M]Z`cKztF6yp[a% 5tIoN Eo"MGmPm訛xN.z0JhM{̥hw6ͩ!P֊&L0ڶ=7NS+gC+PK㣂 KA=T+.x92/ea1٦R&&H!TS92O5D <+.RCq*/}g6} Sęgl < AP{茻6a{ .i A Z)%~>=p pE/\q3_,; &sgDyZ[֐N)n Pһ(SE)@fT "g8] ()jk93޸pR&_]Ԝit(m|xRߐA)4 J"x "qh=_R, 3zx 1D qʇ{ .W5uwRӘC K\:ںfBHH:%A>n2 x1Nͯx98 I=he, t3!43`.J)*]=kMAecݢ1.@nI@BW@?FUBELAU-])I'v(ftjUAN1BLoD1K|ZJ j|8(:xں҄Tll[ B8T7/mUXU3cױP.jB=`D*|a_ q|hܭ %84P"qxK_YJ T/G4ʢJ~[kcNO̥:~Pkur1`~>_w%qfՂ.YPL>q &ӟ8Bwh gpKP$'TNs0]ݧI=ퟶ1}-φ&||@7_[_M~gɤir4BxL A^` C;e9x0;o44<_?_Jϙ*8¦ZZ^fVo+ UzX+뗇R~];{ڞxvSrgG TK{_^◣ê.Er1rūkd'f$9wNljK s @C#-eP.E7e_3!`AYu:JaB)*+K*JU#R ԂN@#!4 FaX3 n ĚJM`q<:?TLbI]ocg?f;M%W*-D\ Zax(8PF֌qNzuU5DMvJ:=Zs%M(<84}4P=.c_uAdY@ Uk˄&g ۵V`^bUǭ> 8k+EOW))+:ǗCT4#OE\7Pw9 W뒬[̓tٺq=-l3p  *??szL'_`2'RӢ@ \RnMKn=_1M_7ڄI*%o,P3%ŚP I𲮔jS6P|bG(;:0XRo6st -cM#DE20%n͗ބ%zCzbLi@5VNJjDsߌK EWE=y/ \T5jvBGdS1\^Q3l B3j\ON=šfi6vLђH{!L.:tq !Xϓ#Cע6eB}fC NVUFe0i AO\0'xm`5E[wݡ_4É\IgX7RdAg'E*_axoO$ΪSFbW{3R̚@MF̖Z7Τ:baMR׾ xzʉ ̜*zdJӟF9v1ɗE}GMLol 7dN@/|ڈf4W޶ùN_R`:gܮn5nAIY8 +U1yv3.su8"Ƽ5IvHU"44jNCx2_Sp].%RXa*̬MދCp<vm}`wE5ҵehb8|R U!7yyryc߽6Đ_+lrrgom.Ӓ9N{ư;ohtrrhhֵ! "~h(nxY,(.2(K#Y[BIPj|Y ']X 3'lAd4f?zrA_apehGcyV 2 Ji9 m JP oߍ4WkݾD`qoiOO ~z)δXz]P%.Bew,qDY/NAz{cNÄ :VĢP%=/!86dфc s$RצH$3CHe[pe`K˛!0rfQny݋#S e'oؼޫ!!H9ǜwReu)~V?I Ƃm5$̗rD:QXlXs ԚEECe*8OL~cM<&Z& ># zlUZ$N'@X=V7b}Qa"~ܴK{f}ҥt^U7`ZjIp:g cӨCiGNA! -j^tpvq BV;ܭ7(Y%1lf\!NH5F:g5 ; p#w(eL/pj^ gORb+뇫Qw?ކې>.6ou N X2!L6m~a V4w9`@drZl.$BQڿ?[L%8k0S6Fb}G) (x(?@߭L?4J˕(8"if%H lbq /妥pTjX0r(gaN'I4[v#muCDjSS=* k@ A=Bx$H}Uq u,ч_n,389Pu ݺG:%nn1G$%"zgv%{$D4n 3i<&g\5ɬͬdN&o~oXq2IF_ m?\| KlZsid~^"vقL="7֖QxfT7L@mKޘu}ӶC?}>umI{q;Tz":wEfl.{qV2(!m[XBAd~Hvg / &ICE(c*5#;R~ÂMrᨃ@6"S ȏaad/|aFQ+hk%f- )n-E7E0> K¨}4HoKѨ}Q%8E%t%'U$C/<6a*5OAwSdDYpϧޛw|Xdɒ{;+"^e@YrCKy h0<߅y l"e*+P(y=-D@#BK{'ija% 8Ng'O6>Q@;׆m 4gsj0/Y*ҜdtJyKA"<I]M5p|ish;9)T,j?sXI+aCǼ& M^;g[஡3װ LQ%P$JK~ΘSKqL8\'}tD@*Ψ#YD@^b.mDYO;[}X^#aFYS@>7$&'Cc>9ѶEd ok/|CѬ(vBC=X("t6@ٓ8K )ޮNY)'F.qk w͛&zxN+y.\QmTNH"3cG1kav,V@bܘ&T@v3`Bj#g[85Gl2GeF%")cѬ-&֚M YlceSq ( >ul3+ >^~ 'V֢H6b(̾Q=N/p_o4)km[h5·>oUsGz87\Y0]Uv y,4sDʕ W{=ĦOzBx߼ )@D6TK/>{."czZĢbvtU~ `|Mj= D"od\g-l G\$e%E/1{v;6aGE|`xǧ$;bCoОt'cXhYM]kl7,֏ M7}-Wtmu$o7 )I)\ 攊Gd:hfVJIreyo$2܂D)swqƆ:рܩ}z#FJx~%6m̛s)_LaB4ڨN92A!if]] hGЫ3l \~rN⇤z"zudpZz=Fcx_*RA&4!uu2SL%H2rΕg[8f8$d\T^۟/ :8!粇vQ[B դQ]aiu?/NJڍAФRE:Nj}b ٥}+RpJ.-Ͷ?fڤ.@|iю{¶a>ar97BȲbEiH&"d$f ЧߺdIh!󉃶QA vw?vK:V Bvpʈrww]ݬy:*NFuwZ_apGfcV;Zy9*7.7A}O. n׆pccmRcj[?9^2vzumvj/2pDvSZٞdv{Niq~W#m:D1jMFßæ ;ָ7!5fdofzpexDI'DtQ~8lU5 ȃ9Un9Ը֖x&N+q_cT#FiRjtc(,jDT+EڶJ|.zhqtxuG-^Kn qVYMT} 9FWSfi$^h8r=gӨ)չNӶ!tzbO}oa"eRM@щr5ۭuWglrعz1y 7֔HCLbeXvfݚ/4/LJ!p sOM8^16yAbz ނ=s5ӎ 7Ciev݂m" CHՋ:uד)/y[|5ww{2SPDOH{@znJz}1r}вA eIx2a@s 8m ;:1RFkjۦs\بEZ(l$A*>D#'ɜY` c1kG[p1a&^h7Ʌ)]Z?jq|SnecDcoV'IGE\毁1d2;0-L|NeW#U8V!ۀ!%ӥ"<JXTlѵA>OI`Lh0Eu͇K"lX/ea>Y?#s  %MDEȩџ xcG|I'("*[*isM6 'RBC߰U.`f ɰˑiDDTpfvU5ZRz9 %VtEک;}/tTa^k"xX]zJ<0)i/o+PvA]ўt^8drze'bpُGY}̤ʦ^OzA]5~о"ɨ5q4<4y;5᷂a44]fpRFITWO*^m˸޻kN`l{frIZJJc$a,;Uy.U pgYO}uqpqsRUYh w)11:LkIc+Gi6 Om^"' Ŋ3y(ŗhtFyS9-nNTG=VP&<uh\K+;QOcqF>au t?zG1Y)x?ŸAs`)-X‚|+ ( I_%e{l܎y]1 t2b{7atNp>_N/./H;d` |/, |-ceBlqEGu/+Qړ[)~^Hْ=|Ei9Mv>nzCc5RO5;tEAenhlRP0y =#x,!H86ʽϨ]C,Ylă`ܒtԌd e)SY.<&Db >xAI;7Ζb]wԈ#ydGLm6dÞh^99+ #A"gB]IE5.:Cv&ET^ x3xFk1 -|N}Ն?/Q; 6:&CK(a' uԕQ4(L=dp 3NEhS9ԈtXm᰷IBj8 @cհ3)!( !UDdrziu>i`#KcP^ry.BY$Iwȸ,Z(=ޤuGhƪFYee_>n%%ahت&مCVယ!ud/R?丄fߎcQ{Bz -6dsƹ9nH&=r rZ[x^D;~Նo Y/(E2jYeAۆ~!mXrCQ:⭠y;lqDݵ *unv -9-lůCKՑ2N=32F gyb:λFj++9kxG`)`k87p^*9g z};4Czȼu; 5SF QZ#URqn:j^>x쪌n ge6?}$Ęet9mM~vK<-l!$8lgj+YE[0_G^srJ,MgGnfͱK;1:lO@LZ rw9wB40H ~`3*uɆ 7xY+BOMQȅM72i!1gHZv%fm]'gø0.h_A{W147"5 C\tbȍaXYt ίvj&GuS:7qQ21Jbz&g8[JILz(Z`􎦫_1~hN6 Vq!`1B&:8{q5bMQ@I*=/~!;E=`⩛F!}:MW6q F8-xc[!ThҪ<}˧ 78JeK.bd|@FyeF󥫧ػ5,aPcَ1j8O2m8lB c^h7aΣrT)'sڔ8cpV\ȓ]-t(L6`Koɧ ܙ + 21B^طpx cS487+s+EnXw/ dgYaeԅi]V'[8n.S2p4Q̳3}n{i4[^O뾨Xo<[!Z 6=*-_}L&T &gʹXSw2Zlix*#yO$ [ʭc.n[?_k\ U+%~AH[ TCasnө4X騆:3]4@)*g8cre.ok6sFǽ,pd+9?S>>daL6ROI=H**c45;/6Zwx-ixtS7M:WA41mqA-6-L6_ /=Qꑤ'\ pXȠg7L5;t KDF,V:|AeO-Կ@B=WV@$?wD.c"0$ 2HLiGWPRh< Yfʌzֺ]Sg8q\x+hRj:ͯi` ̍%6}n]v"HbO37iŮhvmq )= * fkv9Jܝɰp?*<[<<𜧩_Yy +EI `%5?d"",?u4y %J-۪^C5qtpUa/WEsdDGAFga}Ll dNK_'M cm:lӾks}tV?T x!Ioꯎ6ҥE -C3/1 Nǩ ,X^{*B3ozFtzg@1D Pgld.=D "o8LN#U>ewM- jJzrL*B|@Y_MI 3?|A+fXgңS(}2f"A9VVk+J4$Õ"+!5S3U~Z~#^q:}7³`p̩m[D LaUAWkۄ(E U^@˭<+e(ߙvg 蓵UGW%?-]CrG:1VXB&*:&a:8o|#SW[cXYY9 ˼ٮB6S%@r1 \uq'ȕ(hޞL_B0ݜ]zaIb<3C4 n~B}Q&h]%{=P´ A37AހY r'y5A1PYs F4 "#{hjϑ'F}t;$wS۵4]ф B'-xaxo:}ϻ_x|}Xp^w(䝢yK4 ,vZ)@3,tYnۘ7*ˠg7=n; c@)թ6O,bE/]N?A{AoE1^R\÷~HՇ‡WiWsBdXmF1l?PːUٵ [ O̼1 fA,n \9?s{"?yxz@?sG?¢UοR>I?>^[D5{'&% :2 INzqguLæχUD`0:kWTyA9\cX .,<~M )'caacs%*.,M Q6e뤎@֒m9xJkxV[xY?*,3(Tek1-#vGr>E@_ppU߻}-&qqpx/D#73R:$\[sXњp]b;ÀWA!oՉmB( GsUG u*}y5i`9 yxP +t2JZ~rg/ nphAGX׍[MXy-TWZuBG"FL ue=aum.7|9O?}aEk;jV,88[tF rz*L$@Q#(#U~!^vN$B}! 0ˣɤmȎ"E]lr$zY%tx^qi5$=<9@3ܢO {70ui*w554Lpy;c}a_ jPSp0\E}Oc2?ԣnEc3D<휩2[{5ôyGyR;6E9 J}8[Q ~~aN_ =SzV /۩9)_Eǒ&`~n6j[*^.Ɲm0B:޺y#ۭX4Mi_*ho6y.358^Cۣ*E8i ;JKUƽMTe굱xe2*^BWhFe9}o9n*n@>)ΑT6ρn~ߪNett9c G/;^㨺|zADJ!spP'f=/`e|5۸נ#ȫIO˫!Y>;V̭wwM[}+DEr4%6uE\HF;ê.͔˪ZT<;۝*kS*jQ^N:=;1w4 1. HKӢr/:cqm fFs*u$6oDs+ 4v#N04e?l`.Chqct3Ц6VƜIНѵ'Cö brkKhgJ DNf[=¤@?9|Eq?h S0B("La1f/Cgz1E0Jodp?!*>梅SqzSowÚ)vm[Y7;p޶"$ )PY~:85ԡwwT5Js]{]RP?R;;/kjڭn՗ԑW=l4VUãNP7j9v!yjok{Gn8(s/kMD`Զp@-;NI5j[uS S=:[} 42ls93[TAEWٞԇud|݇ťU6x`-lϊ~# :\7S[ӣ5Opm|M-`7{ r Q.Kƣ c[Z^ui_oj;ieY"xvFakڟWI8  "6Bv 8NQzdȚ9*:Aּ4w7;m|!ӉwDXA8RgdUb5br"c1I7qnαѦt8f 77$u>MD9Hh?w`ۚJa6qIgNaiTV|W n`0 zLVZzk isNkP&E{5UVT؝L!|8ۃ,2F1m qHjT)!|0Yn&LO&dQ<,ڎ`DGYo*#_U=E-W Qn"ρC)גqY-煣"2h:c.c.,'ώ;gqU5ƺs20[x<+㫧3X6U}/.JjGdN%C筞(e e#1\3q P S7t7~j/pU- RAq̾M}N ֒IḌ~yFi $-%ч5㿞̋VG{s\ży~O h> VAakaTt1L+"JSH9$@<`rʻ¤4ԟTn7t Bp*lJ,Zp7o򵊻 Pv`Ep!NE` h0&jjAÁnO`Le碳%4=k"=یS7Vm ''K0?ea˨O姕bG SOz-,r@EbA>;h'F9htEކZ\,w4pȈN(`^D'ݵ(oXbr)X-PVie|6k>ZԘL=\e&Mx iWM^n)9Q-cLBba(-'%>TXHͨ">+%#*/9Lu9ꗥ2{eSG82Vskkj}uIR?DzQK9;qspv$53 1,*x۶u75d / U‡$3eKZ9Eʂ OV)׊d݉5?0@#/}l\o}tD!k6N'ߕh,vD\2ܖ[uEU[(jy"Ɍr ̚# vz@kL}"tQ/'KÏ;hG!>RtR{vXjS [kTɐ#+6QBm_.'P5aA;*hI l e"W?N[}֢Wj"Sp;%3> Q\hm ?܆/k%6M5g?D]$iF ];$ā8}/N _rGLRM}T5=Wl WYQ+HϪ>BKܨ1_JeuEGTUGs1ttAni+vehpӇmVNmioii9ZJ5_Ks[zjキ:ݶ%^tK_Prj)_g]yx-zM>G֭{L@[eqKP^xyVKSTKmQ=|XZ AwVNE撃3 iF'W-uhV-1;CqgobmJlVs]M`Q9~v D9e:ٸ)I6Q31j^1y]f|rB.f+;r'R/- KhrMK<): vkw+U*GxƠ{Xۍvdo#C_cyFU,Ħkx{eܿCTij3bD<F8Oԋv:'* )"+x$[Kq2ufS1DVyamFtc~ց?A].V "s4O?;&ഌ(su2@,L-y.s"y"H/)@gy-pmoQ*vפwzu7'Ld%zU,!Vrw8w<4 Sc ΅ObT-8F}L3K$9j46\C%s0;Ent ?>!iBD >MUɸ. Jj8|” ڢR\}XuQY.Vv4 ay 7zova_QdeGXjXyxv&=8u; UWHϹD uHh(!dMnn0 (]I)tnI:NJ{GL4PirFT\.E֦e1Cm %wA۳4t~<jDK:}+EeNm՚v!x ?4JNqC 60l 9D2}2aq ]h92 2-&qcmjYWKD|kOu)#A"u:[yE{˫O`As96=3m\5vZ^nn94=ejʏig;تQV$zû޲)dy9lP3YݪI⸼ro PG^tt6%,[1=Bc/qc@%{畋\}9s@AKp0ܿk#!vLqVorLx=@м]R;=6z qHCLm>uK۝tk7`E:}X} .RY[.>W3&φm\$U`(rJAdRXa%T O<^^o=~$Z#j;zzj>(LJK| rY^, :#)׮Zql ״?(|([W=ZyrzC`P'H n(FJ8UpL !t`) Z݀=LL+[jtwڛO?^huyG[NZ+k'J\ QYzhxj5D1kݚWJ;HIG@E3ua^ն*+ iӕh1eGkWW[OO 2#oFm*.c;}Dk^px$*Ɍ성2 Ŷz5äBU%\|? Ik}5j=2GϢgkVZo[GϹEA&;&J 'O7n~.;XeW>_'@vlfKS.Ά쒡n?XsSR]qEԘfG.a `?IQBDZ/ $9XQl 29VXQ7!g;Qo v8Nfh}Tg˄kvJzEί$_!_Y2|G7?y;7^)?9~T)M4ڮP_ xȼsy͋/JUȭAz@R )ReO6/(ʧ Ld嗖294tʯ$Ow )CPӑ2?sb[`P<7"`v^:aÜIajg@XˆDcFASl__؟t?Gx%Z˫7x׏] N\.<#Uf~h 1V:K.Z̥bhC_n *gGxp.0l*ynh%)YmOҍU&@!@0ĂWW84̣ lL ͥ΁ {!N 7#WCh)J5939,<o21˵1om񦣸(pYL)[]\vm دzr $<€_Yo4>w^Gs5ZS[..#0%E {0;{nIVBb0읐x'$ wB❐o%$"O*|_而0)r?Vd^ЇpB}NCK|#F]p͵NSvP*Wqn߾x;ŋ[SObX (=&LѪG[\70RJ޼LrE`G[(o s s󊄹4mO &7UT&g/_W53J&sǽqy|~>'eyOt$OMmljūsBΖwT=| ,Ja,&7 X\.\ Lfs)}>ws}>ws}>ws}>ws}>ws}>QX