#!/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=5d20d0a8e38e6d440b7bca576ec75af1 # 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 †9b ϋ ֍W$Xܧ֭IՄgVFUxiGGCF%\GUas?iLȼgkY17 R4 gqBu H̃`^ي' MVI{)MƟhfq8IisM,4I=zL cQ3@!|]bo(Xtz'G ф}hEzɣӛv H–^ʓ E.y0Th<و<)Q#` Riaæ |xQger& xDBTٳ6V2/ECw_vYׯ^!{{??=~sOy [o_jgOg??}("<`Q>:t5;nr;˽a Z?6F T5#L_W_VJڌ*ʳf<&ccdM vrw~6q&70D|LTɏ!rnV\}g gi@ǣ(dz $Dr#H&@yQX'F&<&y4PT*HӼsA# )=UWNOZ?~fA ֬.awKoI6 ȇZjٴ 6_G3y7N7YXD"h5i*EŅ F*ƺ äJxF(_%ZsWy+q0=x 'eju 3pY|1ΙQf9y k)qdH=RpM#\ɩdHbа)$л`qf8OAiioM ^z- &~`IdOcZVz\?|/?iF$#Ji+ѤtRq!Ǽ:A.l-C@=)ɸ&E%ٚw+䏨8y4N.$:4M[dSlGZKSDUda?1r)ER MHy2=ȍJUN2BXr 5{IiS!o8( vE댕r@pYVuQ/qs}Vg?HFIGpX6,zc=g{fޏEeLxW{O8 |]ɹl;9!'@ϣ~ 9C׼xB̏!tBQBRuƀ/Wa@:dgMRouHww,$#8J6$D A]_1_7QA3[^?6?6C26XĉEwht0)ebn(an2\8kz%zB3/BNUhbqb%nGSל McEY&A'x~PxЙm5}y'ؽ7y{RjSbg!%|ZqXL|F0|*vM4ⵠbr{QўK)d(Hk|O)p jԒ%eQ ࿓{"%uE7I1WH#&m7 4eL4e[u5@`=F~bWƥQ QĀϰȨ=*J5^)\[ru18L>c8Ie4&ofBi Q3)=glސ |oٻ1zERȰ&P=dN <ī?t+;tPnH]i˄{H%H (ATBMmbۈ|UZ8bHӍT#\r 4qݪp%KBt;%=05cco UH &P aa2w)bXKWVhtXW"u YA LCSƬ gʞ<c/@#_)3o[i|Of} O~3uf2ouWZוicD+V4pi=+c2ՃZ1;iNh4royAUO>N{g^ϯ3wc(ґ܈ #B f`V5 9^'jln~rzЭcO,F<}s4|c87'UW;U2whB+ |E:[%k?OiSnny|~?qLQ}}y> 52H9@۞J!oUЩFXnPI5(&UKJAj@Ojȁ]iL oDC:z=\: qڿvTَB;js;cgXf鮪,1<M)Nd&[ˁt/*6 _\yK6O;:wҡK#DwS~)­A}&8_6`}'A{QVId@>.RYmZ/s_I*O)@A*[;JB0{UO~ LUߞ4LGJY.,.Zg{g$B?_@t _ ?p]pT79|A`p~=g^'8 ݫgnHygFgP̡xU:\TX'Y5%K ȉ4?;NƐ‡^IpVŽ ҷ*?vSIge>`dJE7Tuiv)TheoN$%3|Ƃ@<`OXx  :fEzO!3E^oL: )X,U;t.L/ZȻ%y/)_[G}O:PDH CTux&=h2~wK˺dæ9ZHSQT-{3An<=>vlܢE}Q!^j>,h?f`v:̊>PKE;8 VQxکZB|sA&<yN:Yz%n]'@f'P yz>R n}{܀5h?L>Jyj%ճȦ[+d _`Uv4lzfS:uOhT-^Z;J&ԁ4YShl!m2 b]weL>NUUUFR"P"Eʑ_`ʞڍXl Aӧ"l8QavRuM8Q~ާ b " ьbYJvͮ8_20`dO. ]{fyݦ8 v:e i$8zQa+a ]8gF]ldIEү5Bl/G}]:a82xR{_˳7ҲKi}qN(ͽ"mC[I0O=ЪABI m/kW|Z_Ք77QpA Ucg.Ax7:m3؉;0:lI|FF 2ٗN|~dIy2+Ay _C/9@ޛqdU`P8j.$Ȩ[NSTRt(iO홡A a7Z-|i[F:e >dtqO鱂9( X/Mۣt̝x Q:dW^1*CD?e#4!=`7Spk ctII;)hDܛ8TPWdCw1b,pRtI\mBd~eq;R[RA:h@D[aHJpv{A/Z0m ˠ;"Hru)f8Rzr}TZ/7 0?Ŋ9_ wZ .ߩmi[.u/2#BdƷh_F\:7dߞ,~gڰ:rxokЯ,{,!OBŧޤ0ݹ*Gq2{9ppEOGy85RSHG wkXAF}E*f魩i.L)82$hnLy@7X/Sp^U0l:0xbE)|t-#{QfWݐEF7? 6h}g-y#?leivdN;} qkod)JzKQ4"ri9;[O5k\+luQB7..]\F*<+Bؕ֠"oةoB~X%X5w q WBm,_AYw9pC51`SRˠ\n 46a@9\FV*X,ׯ?j;E|T/9TPH[Ū>*~7vMT\@#WWY2(nF?njj^Qd]Rc֕W9IG7C$`SKzML#aɃI_ɨ5iBH7,pq )oU\UøIJӥADlQ܍$}e)<][Z-l=vV)%NTTU<٥ PERTcN\;H4 h|lBHH'K1\H :>4xL{`W$QB;6Vތ{uzY'&+UD.MrIU'8@]͒~ai&` p�&cB`b_ P'bո`)4i\.6Z-x2knr`6'M ),ٙ o:pa9z@H(ZЋnD)]躉/%h,Rkr 4~!KKR*DR-LNBu 3|Towv#wTǻk}ߩԗCgaii1M4<Njg羂i! QmnҗG5D9Sm)\fWJEv>x#`iX2'@ޫk`vGzLch4X3pzYHomDj?΍=S޲FepُG~9fX[+sC!|_¤RWuR OBŝ2d8  mfS~ p3 :Rbnvʇ9AG2stfBKVbEt$[[-E[젭H=SW~Af8kg;-L=p2ɚKQW| P1Fj)U.vg3`$ KEfl3pPPHV9b6qjؿ[mEXk%eGw\[ނYYTק i¬v#DD*`TeVui/빾'Y;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*_7VA+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Đ_+lr|gom.Ӓ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ד)'kw_ `\"j~B,- 6w#W닑H%샖 W(#Ncki3O0q ԕ7XS6UT=TF/=tjFuUdE') R!8=yO*6[y_׍?H돁3B9N.L\0wQ?kǵZu%/  v$C|: }|L2=r/PG,6 %#a@gߩ7odiavB ,;Wq ).%H!9P*bkExJ"Vǯ_`G[)l> Xaz) Sɢ1KTHvhL(i"<(ENt\C{>CLBHbJ}Rjn[ Xs %d3LRR:OlhL$ cݩ vR;˂|ӨĎ=UܯRBSؽO鍉aZK<_9J{apx2mru HLPt bK>*ɜ\I":GJfKtID,cSZ.*Rč{^ГNUKq0"(8hŸ41fb# E ǠNKP$l3jK2 P6}IW.q`ɘ]0"FgT z)e#2VT\u;UJmqm 0m )ha-&☀ް'.*&7#,?o#Bx3c] ɦneynmǂ$jA::tr쮋=#:fCo"l:ăOkfɂANr'ar?jұm8_ 0E[3v:^k-H&puptlq"fEScHG.e[.cx]^!Hߋq{կt;@-pzqyA)$K8P^_}aak-3Gb+=|1_Ҟ,|JϷs~R pD̖+Niq;!6}١+rj/CuGc"8z9eSY4c E±U~F­|`fbV/.&斌sߝ0f$K(Kr1!wT ~/x ZOڹq."&Ǿ+F?#[Ō8ej!@Yaf_!DRq>J*q3 /27.bT;F&W4Za$oAs6qw~ v |9,܅DQa2 sCx,QCǫdWewc^>k_-sw$ &,+icn[5i9gs !Ia;S[1*BQu<򂝓PbCjղ+1HnOƅiϕV[>\TQx/^r#;r4-3j/]=}$ޭd 7v񭨇4HW %}Ah1fpVGmBpStJ9Ӧ!C;BjqЕ$ІFd]xO>妶L`άN`FXi17HǾݦ7F[hOOڠYS\)rǺ{d8_<%;[7.. N:¡t{FFguG$l`ΘsELzJ\E ozݕ bPLMThc2l09;WUƚh4d׊ؼesNSQИ#"Ipߊ]d#\&c:iwȖrxJ*gx@jUQف}IgD¸kHãȼIn!gR> 7keDi yHSLk`Wt 8xA"N՞YA_vpIv §ii jiu`ڴuU8}T$oG8qo7O7B@<gQ=٤_Xꯤ$z06ey z/|jo?U?uـB'$zw=ހ!$&VEzeJ;lPvDd: ~<4Sf3֝蚂?ʼn[AەR'Sn~H$ffn.y's肍A|r'o OS/v=D+0gd5U@P'Cw \:ireka]C_K[ LzSu.-jhY/xFPp:NV@d`w/VRy=4Ӌ?{%&J_: te#v7!b{d"gv )kjPPsVԓ%ePamvcjHe_Hx Z1 P%?U/МBML/5;YZ^[Q!t_ ,W9õ#U铿mcNm"j]e: z]#&Dam/RX _nYI-C~ΤP;[.(G8*i?:<ұ,=H3B7QŨn7Kq}5A:&vw8Gn ~?6~z4#]'0E!88o^X`Jt̞a1rƬV1]H^G>)dHpۑPJN}bAp?+e,zdr ڣR|/zHo<6G*>>rN:S"j0Za(lgV^̮mxZǸ}eS1[bqoJ)ӯ;mF`K=vw>rژhI'ҭ%;6-y7 y8ie0LBp@C; eƈD6U}>"z0ㄆiol_ ʓG GRX~palRH9 {e?p+ߌVqaam5ulZXx)['ulˡT^}TQaAi H,[$i;) Յ[Ĩ%k7;|HU{Q''J9!*򜫸?hǒEFLg z;؉XR xNl4FN8¯sjW=JPtI1\d]h}ǃJ\{QJ( D,,߄DkFIgYe6]7[qE=KnvҍvGc DP'.QE}LѐDdFs8Qæ%V#7beC1)2cxcq2Ӵ'5fᾅ?7&/N5B](a|Һ%:uCnwFe.adӧVKA>f (6,ywezٺ?70_'+)u;[|>}i^w 'NC :‚<(nުmZ{niNu?F1b|6n8+O?|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/{+qWo9n*n@>)ΑT6ρn~ߪNett9c G/;^㨺|zADJ!spP'f=/`e|5۸/ߝo1*l$ssl wy״GBTTZ+HOJ]bQM]۽Nd|}>LO3>øI86;f08ӏسsGH8`ҀtN;-i)GIQ3F&`<`o4bPGbF<Ȍn`,]A!hG8hCS[f)1F 7=Lw:mjc~n5 h̙ ]{"z?t8l{К &IPvpvĀNMd j& */L Cݎm]W[= #I/tZc{>2t7S4/? 3ivJq .NJ8E;7j:zW=)8o׶˟ћ?͑z ױm+B _mpսUZ:N*{{GZ{[;%#S߭AR;_Z}YߩLyU?ö^AcUuP=k9 :GG5zQ;|[ߪ56~Q+A GUd56/u6vw0-*MGC?+9/޽CP*NAfl)m9cT{;׵fkyWoԊzXo`:7 mt@F+ٳRuoeДmYQZ<ӕCQOvCrYZclP" G#!4.JvN|(oWhچv n䫺]]=tRptZu*ul|0MFJDt--] $7 }Bt.v;Hmfָ^G:~Iǣ݈9i#&4ڟa %y6VLD6"~J" N#>~]|<>_Z'lIxdE%7k>M7x LDnk6fOe;7/-U{=AHp,cCvEm}GFBTmZ9 Z'f/ !T)ex74[(-.bN狋j.ِ$Qeed"F}Ł$8I܎:N'7[9tF'A!f8h#Wp)PrAW{NDPJ{E:ss]M t6xpi"9܊4^)~=:Zh "C뵋rܶD{o_ H+DIoT֗?&jcMH˱'2Wf*f>KuJ/jE% :dD zQm/?]ztim곧eqamG}̙w}ޢ :X/>& >,.h9e{VtkgVQ N"ɟښͮi| h+kJoqrX2eX:sHG:|SQO+Ț3 [4"Ni(D|*?;`hwڈ#CLQYXi9%D.$]XkG>1& S~RdJ&6Ӟ[~SFf$Nqµ!JPPFggͧ8hezy[ZuOK##Q= ΀߾SrUՎE5N%IHk YLTP)] ܑy[{c)j[n#tۖrijӞ( i '{S s%04U1z@dflcsKH#f*1<XJtx \=AZ<{h>ݾ+Sia=#eL_*p(ief(1h㓘 N# ‘: &CeS gIvv5̈6eU}M֨5GרUTu8L(!-Q8m"QEB STV2 ;K:sh0HkM⻪g vӇ1cRk[8\HsZ2,G79drƗ lg7u0icLF"PJ4X僡 t3au|2'jqey]5v\Cx : xNWzeєWgn7Rȫko8$R*)omovyT<OaW{o>/Aàs_uag!=Mxv9j0֝X~A/^_=Ų{qw'}ȠUR8%s*):oDDq/S 5\`/ᚉSZrL=oU{xqVothamW fmv3]WL t ed 6JO&h)`>/g^p=*C%|nF I* J s\ aZYVF!ChW&rKpSfPb:$q}3UrC`<, ?GoFd1\)Uxȩ0`Q,u+:I12cg^[C\mVถ{KҠpd9=XHL4=xގ+#.wWNA`T[߶=Tq&cxXJ}>, Y)[1,RT~~JV'NY@x~Sϗfk}## ]3q>Dc'rt޺+BQS.Ifuf`ɌmXZcbmх7IPY\: ff=V6` T4tvkFo0ZЦ F3P҂Iۦg XjpX[li(eHZ6CL m9 z9]Bt~DA; 0tܧh46r{mP+MpZ{$OY߿Xb,nt9 TAۧH)`cP,C4o97z v=v,:3 K(Po>[RhЗUGh[oGbYS Ű3 [2?s}7. .i nWJ#e} wrm&^9m[j Mt+Jtԥ3*ypXR4HaSТ fK6,f%VBmR佊 /Qoz1&(0ϐPN\S&zx:Yɽ:]=A?Qn>-I`訰Ô˯)]{1OEm鄅yU,M3[)|di):dzk CK?0ȓ *9TL95k[h-1Wï[G;_e=viٌz 5o ѥPO: ">@AdɊLMq~KS 8&,GӭSE e3K%o$jH26*3;8~Q}hfU9RH@U}lJ9!anw>N◑\2R2nGС1NCi+)jDo z=T PGU:juJθDDwڲsvZW[Z-i-:E[mS6~Y{-m⬬=!"N3RO`)$!賔x|pRp];dj} }>kˤ rK^ٷ+FGF5>OosVŴtʘlK{,~NKVRZz䷴TK?uE--[m ֐ Fa"+ѫb 񔗴b[%{ƹQߍΦ il(t.|m13dY]$Q-CQ/r;=sh lI( %m iJuiVZWc$NUbeE EBw`"Ͳt\.vOsW@<{ O"+;RÂk݌W31ѨqEN:}Gz%n#D2ECy $_l"ewsaP`uFJ"8 H#vK­NqR;:gҧJk;66z␵~Gpy/6ݥg?/ja(ao ڞE!DT#Zb^)(sj֜ȵ; [PɥMPr#(vjDdL!H`B Yvh1AՎdoSxr'2l]r'P\K(HU -[^} ˱ ojt?prsuh!9 /UU~L=V"-O4%˳gͱ(ft9Ϛ|VuGL[}$g:3Է/aiߚI=m{ {*Dߓ>\wϙk|]^ k%  ;GcF]7H̛ Ra>33sdfZ5qkϙ$l"li5GoU.,_h%Z}yREm $AAIW ԥXfZ*Nrx 0ypX[ߩA֗׋\(Nx#lbn'g[*,˩S1ڃw*JT19^]Z]׾S6KOY&g9q5͍5]6 yOsg˴Z}˔csv:? eu풺TCNdXFjEg"nK)t\8]+rЙ#Upr1y6l"yCS '۔ /Rxdz{G''ĖWӵ'VkGaRZR `۝`NIv՚cל`kAoEvZcowL H %j|t< mm<`婑#M`2xݙa P#0٦hY{ī,:`d^Mhޗ<$ԥgp㛝g[q܊'V֟<[[Oۧ'SV^kOW=zZyZm?9}NOA;jZzuZ9];=iNV"MHjCU!JvXk$RAN:j.# e~Uq_aOO8ODˏa.8Z{zz.G'O(ɌWD~k_7joSq4[#J][}w#qUIfd'P(л9&:(+ \8OZQil?z-=[^{jxkߊ>8}_/F20v1)UrPи>xq3s $/˽:aDc4^Nrw6d v=RNg.4C=r%k tN:}9 Q%gKɱƊzE(/޸Iq<݉|)q5@+G?'e]&G_Son/r~% f:ܕߵ;oE`LOnx?x < QU`X4LWj [B|gQr`RAM}/愤~-Is|maۍA&~SSrP4٧b?{o_͛bOKb!r^(H*?ټ(꣢*7$@0_Zz 翇y*J<&?Q~*ҋO07 UCqOG*;ωqnuԃeB_j?ߤվz s&MUk c-a%SWM}bc~8M j-qWy\?Rpw8ՏrzpTy5X/K/rN|j1>~TPI:Ƃ:_° ܧtg=yJH7bV=tU':K+ _]FL<0/7Ͳf2h/4N;6{l~k8e+\5(Hx ,:W󿁷9Bƛeyҷ{N0lQtsٵ `}RM./ӋƖ~fфS`y}K hOmhGXV'=q1'} w[ DwB❐x'$ wB⿕<%z}2¤X-oEzCf 9q@h.Z¦L;tù6&:OڱC/Cmnr^YG}^/nіN+?9`90L3D:4)[lIsÔKa+y2Mq\znPA(N&+<#fƇ?%TQ-|^\(!\^|_Z__{ЖQ?ё >5MuG 9[NEIPf68rr7]y~g&!N|zX8VYLno\FS4R[[ٿ}>ws}>ws}>ws}>ws}>ws}>X