#!/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=c43e9bb5c3e562558ef1214603b8dcb3 # 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 Mdi̊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 zk\4#L"$Q#MuA$$Sd '$"B"iK{x "z)o%L1e@PTշDdqS_֨CW4:/l4͂ gFTJ?< _כhG',;a r[tiOwRcT2/5|~NGH+hB2zUo)jƢ Y˓hwS;!07)qv؇D6c.X:7ߕ$|y$(ˬwx݃!uhрK~ {T"^a Aw`Ez^V)nz|a)2s$;]S=z$÷\^dF?Ȍouk:>"!Qk u :%L~jǭ ʂM!(-GkȥțO8B6 *or<>%ܮ1Js}}DI UW4Ftq侯~=$4 cWZދcUk mC``՜߁5t'o7_ |EfDR. t`EOIe.bΗwp "؄ r;Zg`^:hX;ܫSUGP]B"nmB>X8S;IO 5bSqfKp"\E^}dɌFkI[]ytXyEuIAzZW^0 $USo5ԪmN-51H~F'&m&֤ K#=P)@aVqT&OL(EwN^1Fq74Fpvmi1HcY_6:qRQUg,L ^BIaR)JGR;suNz р`jX G"D:.pg"3 wn3 [_`F6 Xy3 ]{fAOB#7T6I&U< Uv5KJw(gKL˜M }%22B\mGWゥLr4V 6:kCʤj%JyLۃ'4-N2dgN61x…=d~E# jC/uLvy&vHaIȱ+T,.Jl=tJ39 ] #>6oqSmۭQ:boʯ}[PS_& ↥5 6Ŵv{4nܟlpz:G^8 ,EI_@ռ+BqOm(;s_Y<*LaBt$[{ꯁe=)736bqec""Yd;7 OyBe? a]n?G5χ\aR J]K)< w*HLo YL=]bn=A,c,5Z D$5:ޫַC %dMM!=faE(m̛=gɸY]\}'O i_9i>^d07[ImҀ5eu<8As \L/>48TkcJժ8Z3:YQiN\U߁tE2߆^Fl0VJ)⿌.( P$4%%)eTA֨D+F92V{2aNW>sM׀>ٹiֿN&-Ж?$X: =hRfˈՌ`VCYx dLЖIv/RBiFÝ 46NJ4*q^h"x _V@7vJ}(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Đ_+lr->:#\%sa0wydGs/l8BCrHSQvySTۣ·x4w"i&aƩa7U!!2-oB6=ꞕd|87߸<("8ѬkCD" (P܂XxOQ\'eP"<2uG,:1( 6NwfN{)h3 |͋9@,~‹L! O,4e@,r %'*iv} 7'Ҟ bSi%2w K0\,TQX∦(-yfw7sk_'+*ըm58LևW e,'B{dÈ"2how{Fm-5:l70*u؉/o= 0. 귃}3?f:g]ȞtY1,1GJdr"hA)en(c􆬰v޾#AFׅሁ yQ8nם C8G :1p~,U3,7R lKP_@P#Ꮝ5H닱;&4GKHp"5S"vӳK/%_yn~TԉzSi zs'\|Y=+T%/8[-ۚL4[͒-nC|`bs C x8v(q6 ap3G֖PVlJ<ϵ3v(^~.Q<8ቚMi6AEs‰@0BSiɳQュZ 5ѕ:Wo.)G}^+ǜ 07B#t7EۡJ2j97{^BlqlHEɢ l k#_HPmMHfm폏57ʶTKiet{ʫEn۟-w%$gͨ;<oęx31g ҡm*L}@ڒ<-hv>EuR\9;}dPCVGŷ&h(>>6f[CE^:LƓ :QƼU,jGv%;.}5F66NZq?+ҘJb%9*8q2c%NvlJ}遼,v {hs7^ka_Hs=T977 (`34} Dx2Nk$1ws( SҩX 2n簒KWνÆ(geyM@% v϶]CgaA!JH1ӗ P dp#]O݉߁2IUQSGtv0]ڈ(vd5T*Z7:BFÚ+}HoILO~t:}ZQ sm36, Y.9_nYQ$=L+9xm{PDlف'i[q-GRD]zSO4?\D7 &LǓ`V\y %MɸkfE[`BjuIJ&]o^b:,wlV355" L-O{%Iv&ޠ=N>ϱ8ѲƛjMsB'nX Tܗ=nZ~_1iz7oI>9n5R,{ #iSb)-?u>j罭^g#Փ0hILe I.8SS:Ӎ u9SFt!ޯ*)ԅK8m$ 7 S;9 7i,Q0+sd|JC̺Ќ}WgI#V .E,BQXDaA H{ӍF)0U,MliB6,EeJ5e*B+϶ppHɸ շ?^su:qRCe m2I4~_ וIǕud;|CS+ռ99KV*᪕][m̴I?5\@;8={)mP!}ro6e=Ŏ҆(MJE.ɤI0NOUu-Cm2.֗u&/: x@mY{[;tމV[m!9;B]0XxȏZR  ͭ38ݛT3!w#-Cms]O81 I$Smp䄝y>BsϼDH%Ztr-xS=zULhtND ԫlF4#wJ-4PF(ֿ 4׀f~` @+o41mL=WzLq΅*,^4{Ռ~6NR(C4q{̙Um0.Ưi;]併 f" /vs\R5^a|׎k7vK^Fߋ:H;fudzL-_58ۡX[m)KF(>ϾSoq ',@XvH{5Rj R2]Jm(BsUH]*SD&_<4K Q뜷S~+HFKCe^IY-k}Ju{o{ܶFKȶg&7d۩tXџ8јHƒ߻S+[y wmߧQ7'ޏ(J{O?W_!_{7ô=yrmd @Iy{X= nR| V|XXHdzO-5bidEۓ %'_Xڄ_C =JIEyaJ @)fB#^wN*G1p7BpnDl5 (Ӆ5*K G?b2Pm9h$A {3.5OЛ^_xX7ak!{xD 4B83GR,PfƚAs; n2͙\a:4b-ͱkԔ3`ĝ7Oc[Du3șnejbJAoQ5mX:m'j4V@K{uA*m89b2z*%,ȷ u`:ZRhA/W[p]oӸ$"ˠM[F`}Ė|,U9VDu̖谓"Y4qibg4FA2HN[gՖd2imTN%J]X?}o14`D,cRY GA9e.:2ћw*(>A`R~'8ZL"X1aO8+]XU4MH-n>GXF7o֍gƅ5ɻiM?Z}u5ڶI%!\tu2]{FMu͂DP+u"W ̒O8)9^ԤcQNQq=`zgu`}[LLD٦. pyE.̊R{1,ǐN]:)˶\BC'1)1  qA_$ w꣋[ԭSInq;ʽ7 2&[f(&W$zTb=Y]ox9ԙ-WdwN=4VCl,4[CW|_ &Ep sʚ@߳h8c څ[:d^\L<-A;9ap9JHP2BcB$VΩ@NC_hosl],EL}W@80GqfC6 j녑¸;0B(|&ݕTT34lg^Aen]wl1CٍwMhàIނWm?sxPacr84$ 29kOv Rgo@!z+I]9I"C1Ozz1|qD PdZs?81pS祒sǿkm0}L3Y^? 17 =\P^=O9e ?R%>YӏWɮ(Ƽ`9}:ZfHLYV@4gtkrBvbU y;'2xtJyFn4coN5;!HA;ys'DJCp v<3q_+z ?_l(p.G!z:;"5\t#S}ԪeWbƑƑݥ!xz|6 xrtwCs#](:25@A+xA!alr_7e|%*[irVPsQKϤ2 FhDk`#mwgY*V*䚤",7St*iߧpemw. bӲiL>ƹ1BL&}+ ӷ|(p^F!Fwji h[f:_zxI[5v+-o[QiJ/Іc&-1>v#/A<*Nr2MC8woŅ<+InAw d64A=& |Mm˝Y cn#e}MoP *>6A3{B1R6up8xJvn&]F]gu"Cr?%IN<ɝ1a&JތƳ+١Šl3ꛨdA`rv5u'hpɮy[朆ޡ192GDy:B8#@Pr;_'T@5D66Aj=o+3Er&Z`3&gI^F6{f3GaD}KG&3 M6th-*T81ޓԪ2FS"oΈqgׂёG7uyܤCpCϘ|J ssn6ˈkN/@m&:Si1qbcSE=NOq6)2YiӲipIߎpn!7o x&k)}#yTz|I翰_II|altb I^Kk~~+$߳qe%NsH2&2)~,zC?HL ʔv|ա %uɐu*yh̨gh;56e+Oj6PII(]jOi'$+:JOx(?^zyhGP҃0,^` .`*`agdٜ SӸ yeпRdJ^\cpC-)b[7O Q;;^2B<5ϙ8T\_iZ(OQrUd0GFtd|VPa֗ɦkN(uH!0=__86,ޗLhCh#]Z24^r/t:U^">&{i$M KL uF/oC BD4YASvRT''+J~,(ǚ 4$:9ʾ>S3bС.J~&=^<921!ط^.kw+heOCrK9??\)RR3Y.Y[UqtUR 0u|=$gycӁYzag,oQn.v jxW~1;uzuu?+{:^*Tl3U)GS^h>U/p\˄,A% #XͩEv(++33D3Y^v(!evU%L4yT `!qXSS 55x/P`DS rX>mWэ) jΑxhGǺsN|)8(]{,}LuNM "qB܂wl wi G%p'.`O`~B)qq*߼dAӱb'9=bN嶍Yqb zY|vS!ܽ#0RjĂ~J/V>Y3G ,p_%ʑ>|KylHT^}+|(q*ϝvu09.Da fQ>% Yՙ]@1q#y b"ɕS? _)wڌ'z>7}4#,Z+1qy4;oAO[?JwB l[o @(q`wAP$ qVض-4ibp_?PոzPY['灱]cp<0Ⱥ>B.sPYY ֌ΊBl:nz &ĥu L N)\R!NɌ pMK:G\ozwİ GcR0dƔ=>ei%O;Zk} ~@oM8^$jPNuK&u!҇*~4]ÆjӧOӭ<6no/~}Ql Y; \gus4o`B7kOVRGw|&ҼNtyQ qiU=PۄJe}%NQ'~ߍ.bmpWWVז?|ws VS6jH{Ng g._猯R>G+ e=9R~ܮbnD($K :<*.L:v!_eFP)WKG_OGy(v9[Cr˳s :!-ws S6rgZS]J36@pߩ5 U0)M=V46AΙ(sZ3L׿|'#h:_s٬D؈HPhvjЃ?17m𲝚s(X4,imRy fcpﺥQ Rj˨ʿ#$㭋75hkKOݔNm3}W[[w9#9YCE8>=ѩZX8sQoH TejDU+^W&2Texn&}m=}?Y[ŧqs㨶uVĴ tTdǏMn|fΣN 3kZt%uvxHEtCKTKE/{+qo9n*n@>)ΑT6ρn~ߪNett9c G/;^㨺|zADJ!spP'f=/`e|5۸?;cyU"Iiyu9$98i+4r"Vn.ӷ{+ɨ`G}XrYU+Ag|rqpVemJw0U`2jqIg'&p!ƥivZ4Rţ^g=NMP0y: hNcynXC6юq$Ѣ Rco(@9n{ tjИ3 0Dp=~p5ALN:xm PyL4ATrk'^臺1~(zFV7%ܓ^ >}eLo0h^1~fbU ']]6=pv`7`ZUxuw 33Vs@_ʽ{S84SU֑S ۆ ިUun]ڄvqWgK9\IUom) ߨN)z#]zy&m+eF4nC]&1.F.D֯A.(F&Ch\x^ׄU.&Q勨C|LQ,fC߀P-Ѵ Wu z=78"U5 `$)[!Z\=^I:?o\TO7vF#̬q Υ:tGs()eG*tiMh?JlŭlDE  G|x<|tyyY9O*ْҋJn.}n& 2kZ m֟W#FpXT!kWZ٩~#yO.] Si17k!7ĺ#;.P캗6j $Vl4J.9I/.4~dCfGysFg:"p&q;h"/:ho zPCx;݆=ࠍ_@%]9Q@(qu%61y DWr+xxk) .Vrղz-~- Nf/&QY_ ]6-" .Ǟx7Cg\i/ B?)ltG`6%TXE}htӥgϞUb.u[;3g&r}zJ6Tc*3ۓv./&Yկ=YcD18!\&jkz4 n2)fOD=ʥSbxaulKҫΕ"-MmG="kR77lmZ4b8 wWDdئU<i#J Y3}0GeU"ȚbZNR wac}Xr%Ę(L5I* ~N{;oM:ǽ ׆(AKBE``Zr5:J6⠕mGyv\\|_wj졡8tT;O onlt<1AA>zxjWABU|ʚ>CfǠOb2b:+Gl4 RFLNCd,9&;ڍ93#ڔU7YvԬ^VQ0ㆣGⴉ0G 'LQP}[[4 &.i=,R: 5}ʊ襁Ҟ LƠDIJQo cp!-ri ijhoݰj _;^R3G|{qţo\(AW8~2@*:$R`:+̈́ɤ?,ǕusPqr1 u(+-:=_e땕GS^m#|ntJ!z*s{aVᨓ®Kѧ辵j?ʳM9oR=]Z22kp[D rPgϥvZ\|ՅD6q,.ڃXwNF`a Tv{e|sSˆEz!XTIM82B̩bAL pԔrl$k&Njs5Z"3soWYѵ*]Y*(_0ٷtA^Z2i51/(M?}_$d9{tדy*|o`W3co4ia-0'6(=4́r-.iE^SdYiJ)HLy\yWT톞.]NE^@ENʹ^Vq 4;ĩlc Cm@-ؾx8i"IԾ\tdQg-T~qJd)],bɸPhػtaXE(X쳵>ȧr9M(PWk`3T.Z К'ɂ,48;`06q"?mӦSD'{jDrnHqIJfln^#6݊FzV/wr}&]q8ŶV6v5&\m:+ ,'#D |ł{bY[}4LËd⠻KA.K77-VxG+S߹ޙK̤ib44`|#C2~9-%'>*0elIW, ?Dć +I_4U֒ǰr"{Wp"€.GUFvl(']pym r}YZ.IQX6j`:gg 1y;wn܎ނKkg R2i'ѣo@06w ycb(4g^ r@qN+C`j4}k흪?rbd}b&JKc;,h'Sm" XA QjҼ%aSfڱ G',ʢxBl"HA_VfEoK|ugM.h0Rn.y?Ih(|*dw-_}r+=b6Kɵl{qo $7)ҭ*ERHP9byKI#IMAT- [ K*2DyŘ>CB9epMfod%*t; h ٜ~!.~ j // xz 㒛jz8- Y|k[U!*ɵ\r}q9 ݨbeֳXmJZ%F `g(4 ;8[ML [ji !]"VY__6/]bnH0lYG6Q:%= z&j&C͋8F0 ,ONleG;8YE0arMiGS5:EntRq%tJEHOT]4bkюmDx(9kl8Ϩ%tO{7*YmFCLyCԂ(IzтQNv{@?EdEЖ,Ϟ5^ jaP?k[1 @WnmvȋΘnRF}k:'qTQh%3n}OrS=gvC?#x)638(XhF<ѳj<w 2oZ$KhN㒙kQ=[Ylm=>Yn<OYyvz?]yqkikz^[;=}d6lgOqkG+VNO`LDY Ix0d5>EDuE{{b_~52%a`0@ _6E9( E'$Etاɗse XN{@|.]hqѣIkt?;YW֗4#!4S~W(Q4aq[J b :p. VQ|?Y?8^~>y-?] rhri|`_j0gp;2J8D#GSr@4ʞ-A&j+x&9Lw' lO= w}NϿW+$OW >ݣ iNOr:]sq<ل¯jJ=Rה{~mySLiI,d\te"s)S'E}TTU&AKKo~{:OWi~;Oe]z c(HegqC" ZUK' [LPߓvڱ/am bph:2ž_j?*R_ٟ[sRlemTx6KnTtjQA3*##Tig( TwGTZCt\.50c\4u>c \!&y=ș\}JIZ-Ҍ m3)v2Xܭ'˯nqhvGԋޛfY g4a$VϛKmj+&2YȁpʎDQB7T#j)Ȣ<ev†A;{+7 #MEL-[u>FNA&x'/}`@v]A~j˅@<2 %h?=~fgǩ?[xMJ 泽ud;YNֽud] xG_/t@U 2[/%8¾ y!ev&)`[f.y8D)W;{M_Ϋ_u8 o -h)'1]C~Ip&hU\.4a]wpeF7w;i77K`f@xrS%~۶ UnzEZ3r9g{y} ({~W~sr A[GDG6]WW:'3z:%-Ik#R۸)tGwGΐw9;އU0p/[exfr{.n. cO?}>ws}>ws}>ws}>ws}>ws}>:qX