#!/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=3882de42359831c815b6a04b4ef91459 # 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 &`i̊Rh/ aT 3"Zo? !a,`>DKmB/X!`A"`_q-‚~<[/yzzӎa?bIKyx%O A4Gޒ#e;j A*R`C"4lؔ"C1o9 дSΤ@} QaðgT eL | W$M `qo,9+a G3{= ; =v1ہk[cwh;/sBC=3F8lh3vԷ෍kNYnܳ (`ukD6bݽƥշp x 62lFc{4tL,7[w|k\6fn`@Uvieň՞e]yʟ @ yWjSAyQ.u$EOAdt+!b[7g|U2}ULe߉*e}(vaĸG5c(o"0F_u?>r33/*%Vي8Iؙ=:QDґLpGzh&f33F1 k?"Hd &MVAXX=$u@ ψ8@3Y 2}*"o%TF/\LNX8b. p793>P>0[aM5x8E2`s#GV.~+9I,6zL;,p@v7:(5M<^#M6)A{Z1xL>lT+RuJ3^?'>3yO#m3V*.ı7U'ȅmeH0z'%פHZ$[r'|ɅDGOI^L9/M8TlшZXA| XS :=EOܱI~NjHj[NEwa`\yBq##$3Tt" ȚoӇikztʕMH+zI{JvQ,= #F.H*]9OtT3;ZcQcIF~].FvO #qa=>:QEatUhR.*.~%|sβǭX~)84lYďzpJc"صIT'zq/.h, #qsv& y)*%s0C%O|GQs0 yC脢J|1^€uvϚ#ƥ 'GT9J9XIjG QqlH<65co|7U'mg,"~l ms;d3{mn (C`R0 P0 d<"pWאK0g^"ˋ."K8ݎ79!ƊZLN:^3۸k0N {'oȥD-զBBKJj`a2U"h kA9[CNˣ=S2QvGMvIRԦ%Kʢ 'DJ3ncUɜ:xWR(n#%>Vvz\{ѻ2 >&KP"Pd$diAqĆF|?Pi\㾻UJ>v9v6K8z8anklc{G""rLFeCSTtQ 5jv1x9Ek <5L3>)>@q1rY>ϔ=/xǎ_;F^Sg근3םOsg9>?U7<Τ5F$_e`h]WmZ4஠T"jN*ke;PȽy]]W=N:uZz?Τ=tZgJGr#+X -Ff΃Z{D'zF ~uU[gV^B=NgܜTq^ T/s |B& M2n×ؿ^2<ۧNBŸ=?y/_'jחP#a4_Y5 C*~z3+/;{=$wGc#ZpSM0V.u(pu|P /C`F y|a\J p(`|bcv?Y":a|ۭ\6i@<ܐB"/ؘdGwPwtOoН`OfI>qǟޣs5u9:VX n8aPJtbⅧ;\Tg!a9)ɷB-ZOCРO|A{_<LX9Вu;Ei5pPrjH) ZZ嘆6M4>ogeC뜼n7A(6޸?v&o&뜟23C=ДAKa9NfbH7bS^ Hdsp':4@q=:(:`"eq~ee.@y)%Q٦2xi$MlM/Zd[)@zdTZu^*FB ,SDZPkʻ ׵MN GuS./,  Gۓ{#P]^۽zwvy.hyvzI< OH}NW%̬#L%xBQZX4߀H]@d )| lU{ bx- }ۨh7:?ExVvC6K64^$|#MUj+M5Vf6y>N_2LhtCl_h{kw t `Kz \z9̶9lSg3R.801LwtUK԰QMuY\6@[oňzO6@ MoM$r ="M]IO d wW#ؘ?bNTp׵OdBs }+k5UsdJ!wȂ VkYÓIK4uv-+\'#;/k,60k+P| _*cZ7:2SduHƴÐElRμM+𢅼[R0%ܽu EDШ:De[mC&-}鱔/K6lc4NbK_ڪg1/=F_cͶ\-_Zڧ\0FNc&lSʬTT`7[%ħ:l2c3W u H8#ׂJĚ&IwyS| L?/d(Uk!^*%KԍvP4 $ G.Y>`smlyp'}-'xI YX XnK!tQnV_=l幂Hh v^YU} (,F!(xիd7h  F6bеG!om ӡj#J|]橐F#Z!R.9 %}fԅFoYT*J^Cl/2Z}Ekp< .cG,NS&*nd }9:)YG&:Y+ø= a:CPo 4#L"$Q#MuA$$SdJIELD,m}+x襼3Ŕ(Y[bwdfdq:>Fyeh`83RIt:m5)*Z"G;~WK aֈg6m: uȏP;aMk}dL(Ĵmbz8c2-bZX|*d)1QјI2ӯpRe!?'X<[dJqPqx,*  i+XO}Qx@T^?v? 3>bH'OoJn,(ѬABt %&X. tPF()H9FXv=H[-S.ǛFkgjh]CJZ/W*`=#(!H;̗zz_QtOKPkRj$@r=*#Hư +ԋX,Q猯'a3{!u)7GoPiMJqӛO!X#pzw.ܻ|zzIoW7Ȍ ̏eůU0l:0]xo> :mx>Gˈ~^Ua7u5Mog-E#?leivdN;} qkI2࿊x }ȼ\Z#dΠ!Sbkk4 oݿ(IɛBFWWՈDR!xJk{uwjZ!b, H\CwB~G8ʘ~Wm՛ (2 'tn>,J*ssk-&lh4ЗQU@y K揵^?;W{&)kX|B7{ӟ [S/ox-"MGh4nƸĹ%я'ǵWY$ouUAR{IM~lsj^i$@2X6r8y0Z&/.|C"KW0~ZťOP%.:?1A 9]zD̦8J/W\[^/ص#ag%RIEUŃ]Z0*¤R\vZtAD5DCg;,@@D:pu\:.пEgp=A#0fڋ, .-"mA9foӻ̒mGo>)<7T6I&U< Uv5KJ%w(gKL˜M }%22BݒmGW㒥L%r4V 6:kCʤj%JyLۃ'4-N2dgN6~1x…=d~E# jC/uLvy&v(Ac^c@Sd)uWXeVɩUb AU.k˾cw~~H}wNj?a龼:U܁rv"71X7,Q`=-ۣiqګ|K^8 ,EMDW=yW<$SWjNQv23$xT/KÒ(>*Hv^_˰T=SnfCG]✁8E+lKE$R@Hw yBu? a]n/ͣÇB.c0)IG)]b=A,c,5Z D$5:w>wc %fM|M{w "ߵw`nnYh2sV;5qtW7oϹW> pҼBoEᨉBo3jf蜇_y!FydVahn[0 \}}}}StȭNţQ!!MNB1aqN1En7aC\J [9:^BP%+B":mCŏ"\Y-vqJpϩ+ `LYzyεka疦 d8dޥ(EF+q](r#5~j*p峙}I"A vr8L((J$FBHS˸CO5]՝z ĵik%e[~pZ[݁YYTۧ-i¬vDD*`TeVui/빾qƓ,7?矄C~i74(Yz _ <˨6!ʎ.G ͩ9Y,Izt7H9vʤ#W&w3vt~A-n[HȜhVUAMTgS/<|Q;z[QLN!ܸ$xDhG1mh%kK5 5MT˖Ć]J?DBD7三sB[\ٲ-4rղx6 In ~sWa zű޻ 񠎉]eoK&ۛaJ(P#*7=ӕ?֣fR')\e_Ƕm?RR Z>Xfm[=x$0 5iHEL?h$ dhwVƠamQrS^iӒXovUA7z81xU-'E2V]*iy,X3 ;mҀ5eu<8As \L/>48TkcJժ8Z3:YQiN\UL@HoC/6 +QoF[|ScHSa(vv2 Mksߑz=si%iŰULsǻպO\hA5Ovbc{I k8 6j2r5#3мru޼`B'o1u;BA:k -EpgM|Rz3 h~^?q _O*_GBr\.{1'A;3l/|}b39ɓ1E0(xƦzE£JNj?CٞDyJa4WBmO8Y"ǹ ACʕ_dɽ~EYI`x /$"6p'mMagSV!ghKK AsA!=r{gJBԌz/(Qlehq8ulGD2pjs)kƥx|c3zV̔+O54ʼO/O#fk'mh.n8_9S}j'g>(pz {nP'OLRfs&[+dvy\ٻIT).Gv+GV7Q֯dJRX?kWa:Pk,Mj*fwآ#oq!{RRRy*eFh^T'=.βo {9c\<|(3hc-(:.tJ!47 VJ9wޥ)Fks2u f]8~mjՆ)o&*S@PZ O`<գ-̽$bH/qk5T~w ӜfwL}q޿-%g/'vr6k=ܼۧ>~(¾{K!"A0 _%K*qé 7)G!$Dnuf)ȫ`ZT \K-GM#V w< A233k8frc2L@ |%?k9D +tL!ŝ1:T۞di2\;1"!@ b0$X '91 ['>МLҝ g}Nwppfv\LK38f15w#5G)=t#_ԏ{(=ug[vguv֛mݿƖߙ3mt;ݨgJL|$s1W\8z\1gt`rqANt *Dao(=s2(s`;_]'P3S؄mnuőS;Aކ=F|q'V{VRr4!d1A"4N kq[FK7&Y\B춄#Ffmq8:`w5@ƺ]'lRժrSkpNN€[WӔNwdHdlTOj(1Ϡ}oRgiZ`YL@ٲ&xͺgPN8^֠T(J2 3ʨzh:0NsPI^&'!|h~JN[`9nl+e!yZD2!K FK ZOzcʰvv~l6?3vSJh{CޥJׁ8!3昇% Dmc< ϦRv =eϘ*G`#R>+[a[-a#Ĭ쨨^w(PnLɪP?.M\nO}&?{`0 uN~܅;JB `\`U}? n3WRS 2w U׎&Mx,. ';2v,pmk%iv|kFtLQ]g\vBƈp?sBezٹ}a ]\h \){=9F>]ހ^zlk3fQu䅴r<[E6 el#r|bg^?JB_؅ŲH~YhP~_nŪށ-Mh (eR'bG{׎={QR5Z I\~ m$L+cvublryxJò$٥ɎN^iŽ@ʒv8v<#`H̎x=q4'-\\gaӮߞBC}#!l탥REsz[V05< ΌFaZbVI lu)륉P/M\) LOd@ xuR f\2Z$IkMDw&R|/I3FQ"\%"Ύ.}/l>t 7I"\F_iz vՆӸ%,,y9}VM#>ºf Se\ZRE:S7붢>3|9D_b:ffiGbE1\p ]ynN̘6/R.+yz֘\ zK蕣1>K/ݓwzbrM餧 M!iΛa磥s;x\_bm^ѸbrLuxIȠ6jT}e2ecʌ,9J#"-L86aF4# `z7wj50 kbK k輺B;5Ps6 ^gӧ&Wy<Wi&~'&$g:`j;DŽoIVW=ihL"^F-']P 1eO67C b {}Mb Ν 6c`Мr#yğPFQH;XR$qEvxT9Dbb%Kn vNI)XN}C y2u\c] ?$knjahXwN` U)ZoC'IM7%FCzW(/v*:@73$U* \{NISX )07<tΧ~^F*hIܟE]]gt3Ѱ)+Y36 $ q`y.A+N0OfjV 56kMoWE_zOjXe$zf,Nh{IA鏯HzQ zxs&׷VCg%9D Sv]‡c|ǔm]r b*&%TlD$EqL^..gAmpDC!wR0NKDV U-{_2N79gq pQMDfͫ UCi哅'VUNgoh5fsB0 O͇!ٔ?acjs |5{[=\B׳30̓`4`=HKzwV(j'xiR>j/rXnKGݤ8fvrՃQ E71IG7#ܖ_CJ[+:T^J2m&h۲dj/:My\@ʛ&>GyN? ōMj.hw8>~Iqwimjs֣3Nxu>_">RjRߞ) !5q/b8r&MӾkӴ ,GelA6~|#W_k0f}z]xB=rd^>[rK c#M"MLC D 4djy2O\tT^h9Όm 3)x=6wmD(]VCރP#SJ.|zB`} 'ZY#~=_Bvg4 Xv>LL0X7!R,wQ)@fT 2g8] ()jk=3޸pR&_]ԜiQ:.>cU9! TaDg}Jd"N8/[yK0K[¯zeSрxhq}įsFz\$X&:D<ϗdH+&,.OE6o'΅E?§;\R# SLG4kigmLw_mog tI?.o]_[|vL*F(O#`03=]'q,83JL$@9r,m՛U`k]k ':y\?|+7R~S~w?¿k?c|{=ſ^?ÿGxxWu-+^U_#;э0#Es~>N\JS)HnA.r)q 0$qQXl R4~訛 E'V O^Q^1^RQ*\Nu l7p+_`Lpk%Tj2iE@. `K:&W/ 9^~ov6T\q2jEdCY3v9H ԅW!B7*@jq4rȢ DJ\@0}kUf/TuloגZU{Ta.+TSoq?M^;3Fx,_#eSA<)K^|qI:@!5^LW(lJ: n6F КGzdmT<:8.WH7ϙI2A枠~apg؞HM 06pIaU6u/@)lڨ徰j) @͔kB%'%RrBOBIP]94ôbJ}ͪ[\.fV;6]fj="D);O-":edjKuA<%N)lHj&LF:87)uRm8cܘͣW[%{JGԀϜWqxT~NwW޻k5օQ'fRqG+}.31v8/#ݘltq}{Iyw TmGu٘ۺUxU 6b`WkoFrLYRڊR%Gc2=:-Iay{y*JO90Xmys/^4\Un12)%/_y)<4dX%2X`9>DE20%n͗#_{C~fLi@5JjLsߎG E7E=yoB;#e ȨuStV]| 5Kgj{kaoic3鍴PK[~kmh|:tSl:ib`y2b2uhZLQLu>X!ۋ1*SlrܡF" 1h8=>3F#ݛBpL|yk.;T˟u8+X F>w;H̖(W%` "7Lt49OmYu %vE;\"e,zoJRD`ךlܖ8t& 0mo0%LOPNDh`L)섣9m^iw/b /d01tJ9_SaD"2hoǵFm-5:l70*u؉/_= 0. ꯃ}3/3{. dOF:,B@2o-R=(+ZeJjՀʣ+A:^w$hۈ41P`!/ǴmQUӼeqxGs6A'ΏW="Jt&Vj2ü*~oJ5%hol4AZ_ 6!?Z"ϏFB$/Ѯ-^|9.4sgNFJSL-;gKY1/I_FvWT٪ЌUdҜj&hlFϗt &670aWhW1sdm e|i ?3\;siwyE ϗu1zy!OnH "H-ØCNn:JKE ^muOᮉ,Թ}tI?B'\W=m`kXs6@)LR}xS l˯NA qɼ)'q`E ~햟Wٽx;b0\ػ~R&=݁ͫ:l;J}ūx'UPVgUT!`,HNC|)OԽnuHvN%OLm<+o+FJ=vHod QmYCl>Z~AQ.I_aқqM:;!}!k yw2}/x#w(eL/pj^ gORb+뇫Qw?ކې>..ou N þ,N& SE6ĀNr͹B]N)>.V& h8P(ooS LTQ)}Qĩ  ??%r% HY R e6}=XFKi9L|<}s>]"ib8fn-nHm*{'ZEa $!^:CbtrIW*N8%ˍ%} &' n[~Bĭ0􈝄=_08YDC Tܮ}Wc2&LMOʙaHnx~U;JdgN{2I5Pxh+p]1;/ϳi dpE|e 3O"̋۟-w%$gͨ;<oę۾%`oـitiۡʟ>SkPຶ$O=ں*hF"3}ryc Jxj[%x٧lk(GxPQC'ʘEαz簔g`|}8}0Pt  \C)9cX(8ċ3_jQԊ1F~Y|K"H?b}+rM@o Ȓ0j 9<e4j_Gp NE ]8j~IP @J;GSPxݔ!v8Qf&Fpt9,fʥc@c0:nR^C 0wa^%H T)ʾ}ugwoboȆƒI+GuEZXIB$G'Nf죄MO4=R`ڰMal?WpcVm4#KZ3y| ANɀV8#O`1H'I9p΁M;s0Ұx;%Eͩ!s_zr-6D9;/},jҤ,ax%:s k  UE9dM ˄ͅzGwN(T5u$K1kW 3٥(b'VcKuu+a:(k1{(܇ƝĤoHwا:0'6hÂ᭐u%|0o9%NÔCvHǸ E({bptI!E)W:E=a&Z`pMܼi0a2(2봒55Ť|J_Rk宎&(_GyoEIùT!`4@r2ŗkF$x8c?&8i] ۰`c4iARi=qqR=>i`9(3*Ifpm`[k6jGs2dEyOM /-4xZnXn/c{ZYz lؤ>0Fԫ{;7ixѤd]]"Dn:*6|OWUꉇ\\pe~gtUe%䱬#sj)W3p_>A }aER-Cjᶻd<ŽMt'GlhF^U V=) 4aJb|/}Jqײ̊ij..3r꒔M"tXY؄=Ꝃ>pќnl G7 i~WNI^i&i`ȼijk8jlH|~:U}`ƉFHH":o#'Sư|uxҞ{s'BRh˽ΛᏵVRL wXJnbяӡ|'X0T7Ztb/F.k8IliXr逰G*'J6C<?dv_FNL%o91  I<(N9 c/*ccUu_33>]}8>3)M S n 73),Ӗ,vv5vt|.3AVXyzR.Y#xN^< hk[iVYZ"wq ` 5vn,I4_MT:^JVۆbO}oa"eRM[@щr5ۭuWglrعz1y 7֔HCLbeXwNfݚ/O4/LJ!p sOM8^16yAbz ނ= 5ӎ 7Cieww݂m" CH?u_ kד)'k?K{2 SPD+=Y^`ssҠ^_E*a,oмBitLDX&\Ny?;'LJ{ƁPWhb`MmTzRR UXjU%V1mP6HŇh{2gV9XntV*\ |$qreJzOyZ;5Ԫ.yu+nXIc3!uĂjLY2@xzFf&>a'd²CzU?*Wm蘒RhD% B*VT l$0au| :CX@%X/ea>Y_#s  %MDEȩџ xcG|I'("*[*isM6 'RBC߰U.`fKɰˑiDDTpfvU5ZRz9 %VtEک;}/tTa>k"xX[zJ<0)i/o+PvA]ўt^8drze'bpݏGY}̤ʦ^OzA]5~о!ɨ5q4<4.y;5]A0P}^.zOj?#wx$V{۫O*^m˸޻kN`l{frIZJJc$3Lݝ<}]n*K,ȧo>I88~ @QS8ؿ *,4ݛ{J&Fi-{ |(ۆɴQׁ0 =3B0бX{FݰR"bg ;k6H=g' AJx+MOTwh6@z"”JSf "F)6U,7<*vS7bӍnEl5 (Ӆ5*K G?b2Pm9h$A ;ᚧyZ;€H//Xe˱pk8AEs45 qKXv<{9z9ݭ]MWy<-"Ѹ%Vvx8KYǴD&}4~| cbRtդS}ɧRO~߸G0d. @KسD*vV{w}f|*C*8ʶ~_4 VqL@oJV-xEpwW!qO}$&e< !n?v'$P}tq !16^\>5v 5-z'7Tחf_ZZd$D0_ W'KR߽/g:%{r|Ωjtfkv\/Ps:ؤ!`NY{ GXBbpl~{ר]C,Ylă`ܒtԌd e)SY.<&Db >xAI;7Ζb]wԈ#ydGLm6dÞh^99+ #A"gB]IE5:Cv&ET^ x3xFk1 -|N}Ն?Q{ǧ 6:&CK(e' uԕQ4(L=dp 3NEhS9ԈtXm᰷IBj8 @cհ3)!( ! *sp29?:hHb0ȑ%1f S[(/hp֍{D_9<,;d\e ToҺ[>aKu4jc#,Ͳ/yOҒYyrlT~ U!p@͐u bkr\Bo7B[ gQu7$e9dOc9t-` T`tX{m-vao/Pkuj7tń,"H鬲mChop6,EdVмC6 8ZMS7r`i Q ŽvXױHm#w<1_]{Y#D̕ax#5UNI?8w>_lc]y#2/pݎB {<$HTVHToegO?^%*YjO#I01fY]Ns=)O9_ I"ۙڊaV2\y*ѯ[C ҰÎyLN:9/Sg.#]Ν) 9 ­'u~聸J8$~]|Í}nVSSr!t\ m9$?F1 UˮČ#wG.vx 0.LWEu ͍vM2=0 0kC5xN(]nP'&1N%"#J9&UULo 5䬡hG6iaIeR+tU+ Ӊ&{\X#IqeX`Sk dϋopNAXxGj_sÕMܹ$N:1d31y*0OGɕMe2z%W12S++ G<2+NV0[iylߊzHt5P'6c6!gh1pq/y Q9Gw9?mJ1D~+.ɮG]Ir mhM&ѥ 7iSnjV_fs!/{]zjd8VI ٛ59ŕ"xLhS3Vdwua8vZՉ32: >;9f{Tg,$wLfG[Ş.g(͖S/gx3gfbMFϨo DWIUfťr2ԝ F5Vk-szhiIVҎ>:x:?%͔ug1k8q\x+hRj:ͯi` FW[>7.H;$Y'QzF[4b}CC8҆̆ TeCuST {%dX -PWxT,$PBF2hMKǟݚs?f^eFxɠR vjwGUXMcȈfO]SKR() k{Dk6^It"s }BgZ/h +C]LzTxG;S'#<-ǜ&EtvMQ}FMXZ :^*Q aڳZb?Ihw0]PJ>XWqtSR0u|;$gycӁYzqg,oQn.n jx̟xc$v>>u~,+K74+G7rat0UvwS$烂g{۽)_Ї|_;uWgz0mB MP!0`GI>bMusL)f֜@M-=br^E7Ds$9G Q}8c]xn;1 /~9G47Ptz =rK^D^/L~c}<=~K\.^a8m/;qp{[NѼSS% ;Yl Ms,m̊he u䳛B  1T'SzRɢO.= ŷl`/)W[cs\?BzC^C+Wy9u!26U6Rv](eȪږǭyۧ\f?K In/9lq=i3O3^g}a*_֟~#~P薀<<@2&!8E ǝA: cD">Jz+?V=_qBÀ{76C? ʓG GRX~pi^rj6)dG28̵;U\ZXOMKK7Q6e뤎@֒m9xJkxV[zY?)3(Toek5-#vGr>E@oppU߻}-&qqpx/D#73R:$\o<*ڱ$59tѿ*Yv"և;ԃB>ު6&QU*kT<06˸kr FYZ2WexJ5K07!њQYwVhM'3@V\Q҄tCp2iI3KTQS4$9NTiUM iPhL ̘2'ǘ`=| 4xGkY?BsrI.0>i]BuD!D_2Mait'ϥۋ_~[e΂;2=xl?70_9Ɠ7LE-8 6 c<@zwzv k=7Z;^+N?k1󿱺?}n?*|_`X^ڨK =Za8+|3J.vɯ0PJHq~W3I|_H@/r6t9#8PC\/ɇi~Ij?0W\l m/b1PḋlwL]ڀʝiMgv+ \X_W}Ԕ*\# WQ?XϷ[ Q(;k0mQN|vm{g}_`#N yCm;_ةCcJQow]uofc;zLjF _OQspt/eE/sZ+٨9HEL>9ѹZ\8rY TejDU+^W&2 T0|iZ84fO6ֿ?qs㤶5S%۰W?~(orKOdv}pjXY[-*𐊬"ZCG,>^Bt+1W[[?稺#|5:~$ҶHS/O{'rQn[H>ҚywSEb0^o'Iuoo;'޴Ճ$v~ O{կϿwoc7p?~?FS䞖WC\w\1.B#(W*Rɉ(4[hlh LmpV$Hú.͔˪ZDNU;۝jS~JQ:=0w0 0. H H-i)GIQ3F_&X<`g4aHGbF<|n`(]AF8h C[f)1F 7 =v:mjcnn= h̙ ]{"{?t8d{К &IP|vPvÀNMd j"k *:/< B^̱ߗ.JJ-Dk҄ F a:c}cLo0hN1>fb{U ']6=pn:lr8zC*0AhSNT qbQ^֠6m8)o;0wýjvK zs)u6jy ڭׄ*̞\>|@~rzRSwiZcK6hNpR-{&xyڨӴi>V]*X)M)M LUq 0c;'N1l&:ޫ԰7X˻zVTz ԹwUh5^Ξ-p%Uc0~.;lLwEˊřz-u;9di]mB]ƒ]PL иp>8U 绫&g]LQ a(9X_ Zi[5Xtu9Єz ToHQ[EڧkZ[06)( SICw7zt2 љNo FYzKuGs()eGthMh?JlŭlD}J"N NW#>z]r<>_Y\'bExdE%7k>MW{ LDǵ~k6fY7_8.ZzεXXv갑۾O.)ݩ Ri17k!/D/;.P캕6j $Vl4J.XW({9~- I欮!GY_^̦]4n5n!L{+3u3m1#4cvAZxAo%錁cWzQml>]ytece8a\F}™w}ޢ:X"fzasdQ\@L`|1)*3xQgb |jkz4R Ym8t;p/"zqHB%P^åprzo Us"a ^;w8Cނ P˴M{24bj*O &a3 TQWt0@ί3c UIu*1D/-/cEqx+zOZ@&a;ضQV-Rѫ  Nv9k a+6*);"`2TƪE19%bt昸s8k7PXS k^VU:wdIzryaB G IoyoE 'Xdv,t4P) cɚ>HewU[i&?yǤ,רPs/Ea)~Ng ,wȽf(&`>B?\(AW8~2@"1_)gCՊftlO;i8&A _2ڣ)6_> 7:W=90pIba7SUStzu؀ny T<OaWa>/AàysS_uag!=M`yv򲩫Zk8ud@)axK5{WO;b!e: Ƀ))qZ1p;kG}Gp`=E">}ݹ`ɢ=c@H. l[Jނkkqg R2i1m;rNWr».s>t<]:r ,WMPPǡdRR8dǻ2w,%7/q UrUsF)oe;ִSa_wN__oct=uIٌz X5{/ ѥPO:2YE|4 r yq5AnL& WUԧ[(O>JNfedl9 SUNSgVo}wpCEN_C4 u[ʑ*6Gx/GeOܵLJ8񳖋?F&_xsMH@AW8 Az@X)z3PS2@g#&WVsHLCB:pn#| ܝ6EEavtKf|:zGmv( _N7lgE8jp~HӼvʱFq,%ƞ?m%e #AFG>׫b}b~{j~{'ϺsC}QǼQS*k|T+U~5..-{e߮m n:_tp8ͅZX_Aw)c-9-mcZ@Kk҆;oKS--m{gKn) *sC[.B JN?'+ۘ?\%JG0.^3"V=7 \J3.֭>Q|X۪F3 @^`fxTd1#8SnhH >)z+@+Pfe*{wpۘl%LϫuD2wX }ވ{N9e=҉YA2P3s7K32r7{) "0Z&״@ȣeQe7uwb:[~ ~i h6"X<5v\dTŒzOr.}Gޟ\?F6!B# 1pdACҾ^`=9sPOy9OZ3[aE¶ʃȄ k['uz4=)Ry[qg |ٙ4y0e4 Hr$xe_EVE1"HI28,iYd P_N>F!fp*awpKq^}DVWŒii!F sǣM>1ʆA'N1:>CE3innȡڒ9t8"S:4*D7a"G4U%iVZ7ca$NЖWbeE EZ^Ms*]lYQ 1x̣} O E^ K u8ofQoGnǕ١ʪ39חhB<ϡX8 [3ij6yJغ 4daЀ :b.]@VGiO IRi|FT\D.E&$U1C %wA۽4tz<zXK:}׫G>eNm5;!ƧIx ;ɁLNqD 60Ö́J~}2D`B Yv|1՞doSxr'2l] ? \T"0k$HOg+Hy ,h.fTg&xmƾYס='LT֙2lG;5֊DoxWGЖ,9^ jaP?B[1 @4({9;IuJgL7oc_Ҿ7'q\Qh%3n=Or{=gv5CFȿ#Dx)638(XhK<3j<w 2oZ$KiN$U%3#,$6K|zuZ;8?k"MƏBY5~ CU!Jv\k$8U@@N:Ek. e~Sq_aO6ϣ8WϞEa8xzzFgO(̌WD~k_7joSq4#J][}w#qUIfdi/m1tC/jIKJ8 Γzz=lU8EǛV7Zgڷ"৏Nji}YǃL>8vL >ptO,oL\o(5r}_Oة:@&8\%C~v/ŔרZ䨋1{\>c_@"H4r8E *Ddr^;nC~w*ip|6ѣ)on/r~% f?|7?{1Qq1^sh\2,EUaD 帼P̫>*1ؼ-^Dix\yw 4*ZW*zy!6 J.dgJ-Y޻zAU u𴟍 ;54o>,y.BG|TEQU|B Y_{{/~{:OWi#;Oe )CP2V91ԭzL(+rT0qWTra$B3BzmaeK"dj)/XlOݏǣIXm՛#I.\ *3/ZC5rJ.g s%iw::Zy8H1a9ʯnfǏ*n]z2,+ S1&*su<+a\N,Y؁pʪ́+@ДNSj$}s<Yck]bÛſMG10 Iߺ9\̮ˮ'U0vVnwFqY^44Q4[ф skc" q rj C4秶\4]#s*P֋`mv \^盼M^&}׾k;kN#|_>)r?V[d^؇Lp+y.ZCZ.딘XG&q\k\U~5~,&|oڽ-p9;| Qzx'LѪGB7"JR0Q޼L8E`T/,IsijܢY.;YfisMZsaF 1r7.PX܃,񩩍mZxuN|ҽ-J~eXjR?m8scѷȏ'j>wR=~ |#Ja,7]eBLfr\.^ Ls)Ϸ0