#!/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=27249f69d44a37a4f5da0730f28028cc # 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 ^ь}:l#uU 6<7Sc\[7[]UiP21Lvy4}@ TONFuCkUc  8ROUv`jO=_ unh=$a#}t>`&^oi1Lڹ!)mud|rn$=? |8 (HTap<#d3Q*pA%( $`F$riW?- njPn"NS)8 (CEuJjez:/L] u&OKAQ<ߙaЛQ̜LZ?.-2x;k+fЇ#3icE`]kHb@ ;ENZs`^Y4%K(|"{qY:UƙRZ"52ŘYwKu՟׫X;::w-J_`ϺԮ_Wݽ?$s>Tfܞ]?vovtcmG^xœ{ q9rn, @0 - 8z=p dOQ1FyYHx )269Oc"ɱ<!h .V8Wd{N<i  ֘!6FW ً;A=0˽ dtL*Wxx>2D4O q .PyCCۏ/Vhr^eO arZ,1xw1DT81"klO;i__{>Pd_'?_ȉ9 FE;Nk6wAzQ5v E $'fHs|!Rh*K4O^ 2yz H'^D0牘ѓC<>fD4<=j46#nB: #h1cf}8 tusdYJ{iԒ*^zEO{??\{%phDx5>j-8>6~{O/{%qh\v:ԻO&4imPPփv~\i;A~tHMA- \-CH GċCdzѡ xEj9l#{XmDa=T[me8Kh$?`Q8P-m'6ߴ_NI#h_H{yȞ>A/IW/Ɏ^-YBpJsl~DM8 U+Axt"P@| +Ƭ^_YZwJq9bf`w-#-.r+wdP׬ nA'iMl0+PqLn;3vn\J7@Ga#-+웃]v4ǡ=_m8<,=Ö\Pko>jV[Z}m}w8R!.7[j22$-osI\?\fB|Ne~0߇Y =s={ԃZW]gX&(Mq8]co!M./&? Gy9ZSA8mn?U&) G%ٚpƶ~ivjae׿ :e? RefnY{QJ%?}=8zvލ'% |^ `ة%N*Mm'75=:J! F% o!竴NAsMQJKfPtnav)%0s4!,L3#D :rK\AX6O?R {:e餢?-jiĈj!vB~j:J$/ 3;'5U܏K1s.p.f@$ \`p,!q^[p`֩HԲAr`7Sk2(3lBG&aZO <'^eٯ >DG J~g[֩f]wayQ$`,T/u J}D ;:qyw'{AveA.y ri,P=+&ᦾ 7u.xSXhE(D khՑt^jy]@ԜL adݺ{Ĉ$%{D&O'aI 6G팅S!0Tp'6ʽ$i?GO@0-~TR-$#md(psMPJeC9tB@3Rbb B$l<%-|[ -jG#i|8S~%]),UHroe f-rUoϥtp{' n0|*8@&NO^"rfsʎ_ZMgp%Y:3߱iD zqa_LxۉN{[{/]Os-:o uM1< ^W/- C" j[C24jm?ʁQ k޼a2L޽c/++5NpMA8&PבZrW ۭ0d/$=>AKHBUImoTh5nrĹ9 #'ty 8yi, >M ĹJ %f5lsb^&yWpluk&}%CƧHd@ /gGqq;|e+ŋ{ŵ_K߸*{ k'}S0P a߱ }ɸZz> c>-Pfc0&.TNM;5#1'*7Wq<{].y-/j}Vvl~;\s57/6Kq M33֐ua@@|agb_lLէDuؓTz D+i洎ElGi5`tk\+J[Ь>9DWvk{?*JVEYc0'K ZIu l,*/9I3ۖkEm+܉b\fr$ws?1)I iG8v@\78"8qVDU]OZ(=4eO!"+'pXPPF`*<oHe݈"!*,'R KȖYx"MZU  1LJˣLU+%z]R -47Yƀi˄s@cô8Q '56^ X5.|6ԕ aC!Diap#P[+v~"]ErЙ1)Y/ZЋŷ>'N!b0eؾ+?Q .cnl| *\GS۰ 9헛U [,(`r$zЫג&PҊaZ\.tLˉA%-K5bӱ_ HWToXgZC;+Yׁ+Ko=EL+Eg8J)ԉ¹ J%ʴe+y%ĺe\Um؅*2z98PVp) ;^Albڠm ei7+.4a1ނ},u(KFǢF;О~vu.f1JGS"V8Z[Sp5j1wOLyu]; E6i" R5h@ ^qM4HvR9J0fŶ&S,# P25K|Yk|dI4wEUѴ0LqzQC\^pL&%'6 ~'l9bw5Z * BI %2;w+[@Z )q)bE.SzJF%'.ܝrK'.[IW/R %!j %ޛue/<Ŵؠl%GnB$Q*q}5gq<VI\Ua1SsOsxmKׅsaP˲vd;L{TSo.%.: . 4T&`!'3ą8Hg)fIEc x`B7s.`iުJGxY8¨LW/Z ݬ<JZ/+8Oq$>0`4BS[3`'D>sSF ,,KbK - UO%t<>Q{' oٷ=! M$TF2?er$A = ]EgT xlv^/;11).Dٽ}GylbՃ;v$Ug;ڳ&V?8h4"$59Ee8H" N!q0O* j9xuS I|^p;FĝP;`sOLS^d@8ƅbݻyfuQ,2{@+Iee BN#&1zsTn* {D{m IAKG iZ7a<8k J)침Lxwܑw \v\r/`?`ux'$mi3j@q, EA`&9_|V^p2wFyG7ʺ|I^:Ш%KYM. Jy80=>.ywi!w$~mp7UZFg= &B>~**{{a)yYt".'UJj<UVj;.FA w.am줿ao:Gy^ʤjRg 4xd! iEh*AXp,6H!#*xM=X2ƘaJKDؽ=uA=¾{!2{E*hZohoQ+Pߣs+_Y.]:˵ZmȌS_zr"51NQH<{Ե!j=x-jb;+`¿ ֽmfuG,Y$>:qw8:yU g9`@G1;d"YiCϪUe |cDt2^C0?5aPcBD,D9}y=C#,;Ac]ӵ5ʀT&6)=J?hΑӓT0e̲>NXDҘZ[E(r@st;,|0GMuM]Op`KZ% eFX@nGhLCu#9"5վL` +l늯g XxEgHjꈵ8Qd8Qg.IޘuP0.pz r'F|,ܻ߉5K$h׏ƈY g}AXDđdUr˟cT%gT$9,0&Ie}8涳&.CmY8wLą;D1&3(_Ӂk(QG 1,[RDxfR4l0}>#kBmv= &0s6}濘W/WXn8ӣk4χANtTyR m wM #Cc5TJ7L*ю)nfc) |X{GG/6pNAHYֺbwӍ0Ít!=#~ (r@ 7PвIX=EQ K@߰\pb|@*wX~%"d:B~8 +Ǥԍvz$wL#l$PR!f? ppwثDέcRhy;G@ Pw~$ ۸wnU:JWa^}IQ0N7bZĐP-0WKB_4Y+)r򠠯?QG'`Q<=Ba$t|6~ /$g{1-=LG'0Zv?V'"$O1~-h쒽`2GN~?y=hӖh0:YbsDc>xzM8prBsbės1ϐ iGۺk+,ߍqDgR2 `-t 뀯UY0E /ˆ3v5;$bX֛Fh,΂~cE=sa8eZU懯>Y qKB%DKrKm<.[0.nra q;ť2xHrNWqBS|ipipt[N9j:~|{Mixg~ ~u ,أ>0on,X` fz>E()Dh nO8 }TL{9rRTԱMfI>,@kPɜtiKy%03؈;e)ZJ̖0lvcX"dc nAf ĢvXF[w6@z] YY؍C2Xwg\7wH9aS, S7QM.н"M2JH޲Qh*yJ;[J$tF wBi)QtE61wOt=YjMrq=bDNN/ZU`Tc7YX 'Pjc~𰴳UYC& /}:"Llp"vFN ]F" =a"׽Rr ɰ2e~/-@ o- c^KzlA2[frZPVdrp 曱JF ipvY_ya2{Q!hv's- v9ID)d; ͑?4ك#7<9Ja']>-$Q-L (J-jh"=G@"5 OCQkn 2\&b-ܽYקsEXdORoY9%gKDO/nP =v*O2X ?9bL~LLUQ|( Dm_ow2Eb+Yӌ](MOz‚I_HSi89W`̞j@@#2 Ju ߌz&Jo[OhGicch;&x\K `4iʛ#]kۻ F){JyVo,Z JɱTKmdh_ȿl+tĆrS)~U,G'A_3ڀԉ#]~v8ƸKb&)+yhjaδt82mC'ICJaiU"J}HTQ8rz%<0TBFk=% h>-_85 (8>i50^#:*Bo!#6`FiO&nN a隙2/S nG `{B=0-O`7KLġru 2.;Ҟ]4GcjEI6XK\A+ 6Vۤ&QWXhHR Nט6\a!GQ8 Er,s,1&ڬFz6f-=s+|V("LԻ*z)3FI dOGcl)^1ۈף ]K&Ҳ;ȡ5ESK:Ccl |K9ԫo|'A}-W`]/ͥ#9z-K<4%6oꆐ`2mP,Q vR0cw5iKʦ ?<mfZ/f:!h_?hF<3Xqkm *՜-~T l5^a| eQ%2'UxʑM2œM\~;&~Xb=QK{dEa>Q Op/;˳dDgKqo=uf]m \86_W67wƏ4Ǖdy:cq bLc|ց9 Ij erqᐎFh_66޽u\+TFviN@Vn̹C"Xv$S!ֽ("#lP# =nfQAY&0"ntGQpʆb9]tcBIz $6 /wEUCf̶m=Ȥ(y8(]r>Fݮ^h0y;(%4iݔ";y|rMG B}o3ݘWFގGz%3\Å[]1}=I,(m:$%c@Vz<)85 TxqAZ~ZR-3}9d=1`cעQaSLuNɔ,c(mS4/1OI)B(LB49x[fvM˾:nPٚf=jM%-Ȥu=|H/^CVhUA˟z"YpYIeV^m 4TuVgo*Sͮay%.F~5Y8kw[eQQNKdng>PqkX0r~w>u1t-M9 (Jf83=43GGTTU̙)>z=]~a2kWi=j/@/q1qe+Hp`{zWO,}q^zze?&jb@ Mx; >[fEux1VLv L.FIR|r;)=F7>r,GvCfw& -3][<'gg TQyۛ`4[K!RO^O %FW/+A[b/S/d43Ǻ`~޸ͧt=WQi>bb*MsIPPvլPx D%7&HmQ1>j]T3_h Edٰ3φ)˼jƺ7M$$a\*@~È>UVjiwp$DPCkѴpAU̴WbWj6*Ұ$VHXY9 ;泫I23ߨnYL=1y Sg'(]8elg߸c]o,.WdzsOS*k>{8ݺ)l& yی 5a8 Hͧ uG i5F}Hp=f[aݳ”YR48NYf^Pڦ~Ͷw@7eKaU* )KjHpSj?!  2ٞpьQ;tdV8#C)'Q!g4ht~>VFd8BXQ$`M2\-A?B2ccmˈ =%BۜUvFR>KDjtX&Rˢ'g hO % TFu{QFJWSܮޛS͘3߬a,U b</$8 xԍ=Hg@|?LDiD*xӰ&4}YrЯ qp; Td6ƴ Rҋn.-H˚ A}PvMחLGBpu2S6Cv"F|޲‘|c-U=69`|/T$iF-m~񯖻- VVMY; gh:wvH"un,=y7R~r\Zd525\L$}c$?67 $ǽ хٰm 8ʕFIלgX!+zhv{ycFRp2=pA',I(#V6ˮCFW7T`1h?1qgݗԃD9M~V ?q^GJ+u/l9m'GnARr054̖Y Z_qSkWNn~}gc"$|Īa`NE`HB)MRJQMUo:G̔Qxүe 0Z}fh2|r*=p}3FyItMTWJ磄 EЪH6+^3RXYbtFyۘnbq[(4XlE>=~' Z XGPgcD~ɰa×߈I=қzY푱'F GsI> =h6kª32؟)%.O5y| Xs-PںbޮJډdkw_u@b^VM`^4;tX#PKԱUQubl?*ŏ@%s,ɮu? %gJ^i y95<>hh4^U2uA[~dk[H%}r\&C6;&uvW-;zy彧;ж9 H~ \HYvԵv4*[y=n8w_k l)a U'4?@&q&bwBJ굚HJyzpp:kq1Ӏ/ȬT\7{ pqHSӾvM&3I<Dȑ2)>.?1ksT?-aRJ΁z:f!uXR_d³󖒍`7 1`~,o,:)? Ef$lR-to 5p3cE "%>a~p@:oo9ި:&01U?&w]զlGj9 Z.N癝%뉹[PN#LD- l@IYWœ,S>]JCSE2ʺP'!d0h /\.A4!f}=1şf2'>紾r9 ֊г{k["fOQ7˞MWV󿳹'`?^wGov'g{9>dor?8د #S AxbAN _?|[}ZVnK[ϱlW8\cq?۹ll߽p?'x{وfLEC6 Ezop9 ;K05Z)m}ֳVy /X7r=Tz-U(Jl*l * /lUϻM~uOc?,Gd2#h%ӝ?y>g|f:Dsj|c" yHƻeD'iYƳʲqG!knpD8=]5\B"6U$xD\SpoUGW}xW?O`-jls硜ۤ1ԭne6k 1[&gngI.,y9d[Dnn*t`_HL추Iȑ"z3#b՞7@ ?}\Xѓ?)?w+kjx#UJNѝRv &QJP[hbCKp6CGq\e bfFAt6'}nN9,C8S_2[o|7m1%M' xJ~2dU=2Viw7 Pr|+xZ1؉{Gͣ"Λ?r3se?B%S5(>F#A0"Y xߏ'Ke2]D΁?v?(h%LWTiuh`O֮kݚ"v>쉭3Ϩ[z0x%LDromPW}qj@bN57D ֗gE=|*i&xH >m'&fQU.ը?-J%m[R XBlǥQ<&O D{lPh=[>`,-7uKH[ @9;M:lv[C8N ©u\qnlo%n"/ZP_Zχrq1}ͷc@p[g_|Ni'MҼ~4YE t[Owo>{iaٵ [O9klӵ urvJ4zﴰV?N}}Oc=9>9s%u dtd)7[v:u2@f$/4i\ff ɵjW)|iБm0:;" v 9Xt1F7 ~,~]zW51aXn$EЅ(~m< CL[惐Ǒny6?.FΑ35,DC>S "'m;7.L]v%s;CBYQľf>!g2$EYG80?<=O/`k>p4 ah X8K%H' 0PP{yv*Rd^.&1F?**-XiRSM}JNuWC84qk$wI<:&N( MV'{RMcj-?rbZHyۮ]X($v02wN0[է;ˑ\С95HsZ-cWhbKrNhw._;A@8JYm1>D-xͱsLJcb8 ϝ|K*D:2ry0/7l|kLAD4a@ìe4F#"..K%;yW@,uMREn:(xBOtrI%tY, ]8jF?Xmo>Iz|oY>E2(ʪ=)jDj`/N؊=~^W'?dtJMr6m-8hҟ3Su>E3N1Af:(C?NpQ&Bضkb`қcnjHbUl6w766j^%.s54\FY0md$ WL[Tߧ2FHxBbzF&x0 xcC6=_U֦ (Y_|ޠ 0|-%R:0jP9!]<пݢvB;9jhiz Qdh"A75&-bU+YiyԸ \>s Ll2UgyN;MTӾ" g=/ݤ~ozb`X~ۥOI ņD^,jrHXg*;7Av^Sm^Sm`4Rp$ lp: P[_MǕM\Ϧ C="'ҭ?$U_#rc]+ߪ_VNOjy*hdQ0F >zxܪ.܍`uspbk %"ƑxwD`l{d>UFy01ڲ{Y α&Iõ3y5UNc:ndNI $.i[ JcV4r]jg*&jcF}uԽu[ JN.ͥ֔/YeWpjބ ێTUG1 |~.. kL!oE($l,ݙx#msDvfx|>cuicZd>&E6vHqmk3jj>4a}d}ݴUo1s ֍:MFX\x$IRlrW[K,8D s 5a=vS;XUУ<"Qpf&l_WK՟^_VឋnU󮣹4Px.ըMcj^o?[qV g20W<0 x9#Qw}U* Yk\ #Lw5 Nl1U oIN * Q OO"] W1_Jy~ =гRWR<̼v'K2ph͎ņ]ޫ*^apSHlS]L)Qtg2Ərc uQd P6hh?—w3l`236~yZ|#CS)6YYm)"c΂0! Nbk]5U!@uDL%eݪdEn85GID`pWGB'ΔhH˼EkX:- 9fF:$+{z1UHN4US&)}i07 7&Q.J@C F[A҇SemKvH{G1gݱ8~F8s<8\G_ME 9u+^nn3r$948_^JHs'a:)l87xU2]8 xN{\_6g ]C;0)!7J)m D:dLpސҹ)TKOTRǯx:>>.聆^MCC.PQ^Kx&U]ģ:eu ΍5o\k(r:cDɬdܐeJ-%eQ;9<5ʵOVJa)"1< dhmhL.,p4jPvZTETҩҧ 2Gi*'O(R:am[O?8KX8-5# q(d$pIMAE,K&ƺj^X.Keר5{sTLd‐8Ŧ" udNkcC2S40H!JJDSRydݎ3Yjt6 1#q8^(nM)T[b1s=~jn"Cϔu6bmMb5YO.Hg`tf{@SmC4==~΍ ysqs+،p4xXƷU4A)gA0/Mw{y DP-Ѯvu> vou^PcT?a>9OCYXOǢzOqzp&뇮y)0ϾDיI ,Mi\ov.I(Ѡ4H9h LHEh!2XюDł yDSstKT, XFADkvٷ2@Ba|IWR{`^Ik1u{d~1 7daY 8@rkqm`:G.=D<Ϫ؂*II%6o.]btƻG+!widLvB&L `%Q.1 dү0#GJY|팦8eyٱ],?P-'B]iOu\3(%d֋# ݨ%adBzzdad F "&)`T| zs'6=UV \"ޝ *4B4!#t4r0PGq(|{38.&l6!oi1rg]Byxɨ71#!ݐ v sGw%~SoqeY (˭VDRJh-LT@'KB@7GIĂWs=_svVm7_8kc1 J3`/C0!ɍ=I,% ipoKS@=@5 Ҵ<˝^rCsiVl#DK<ZU+j{pU;14N'GɱXXvn,gbpmnk1<>WÞ-wb)3۶!@] Tm߄JD4HGRcx}d&(YdkG  ⑓`" x"9AG}hxcjb>ԚOKjڗj1\b؜&+xe[+Ƴ9#\x19Mŭ Rc;n3 M$QD^梭B+Q*Lzy[a4IDvir* 7zUFĝ]I=P64/_kw!&4βg(NQ&n9můJ ALC F&(B#AofhTų:+#$xV-z*h6pk/7ÞЖjOqNM6<̢ p)o*4UHby_շ{f_ܛ SVԘؤUZ7U(x7w?8Gz&,4ݲI A], cRX`pu̢* 5XX^λ$/eCh0J#c8RЇ&̣'rljdL>Pjlåjy<q;8ϱlP|ا9d N1 O`1VܻF4w")Y_RlE~ʱ|-0YWL3I;XGd@j(2sL,r p_õk$&q~]D'k5({a[&gȒ}Ca>}UT&Q+z#+eV˕#e7 e I`\o\3x=p $4{ݳ2"(%CBBf=˅{lWJݳ*1Y8ݛeDZ $з]<- #?=OrUA^|LQe.SB?⽱/+:h q=#´'E̦ӖEpy,Ũ| L~j %p&1YM' ]ˆBq}ts5)[wfB IȇK8j[%Qep(L%yR.:a zdiypSq.e?e ᣔL̻ʹ"{42(ιGhϪ96•Mj9iZ}ٟhÆǬ !M] xhl( x핼*/ 9.Nh%xr9p]9B^;"b e.`=v Qik@Y|EK~?^s99CrrjmNcn)zڽD : gʇ~tPf='_"h<78)iwWҖ8D:d#+t913Η#N=qlLK>3]%ϡNWL>v ށTMvNd0Gs?;EEq϶%7@7< ?jC \obZEQY!=S"%Mk;O`q N( f\3`0$VvI. P(J5~PY`184۴ s5G̥p&c`,dq$J5о:0 $HD́XSV'=؂zd]BhKzM,fAD[2'Mp MĥRM@Nb qe.dl<.Ӥ,#he9Ʈs) `}9'UCVej6]JYʦdy mh5f1@zN6I(NQC%"k`qXJPRJsix!G'dZ/Ki( r8()AS)U-f/2cOpM_9oD,#Q{,V17[_I:hCjp]^V<G}3v&f!ZJAu{9$~V] $<iʦEC"20 c?L1m"yw |9W}UՇJ%f'C<(n^wt/A V$C \!kx!-4hQ| /ja'Ko Ŕ7RFZ,τ-Eb>D+2qn7}xcDCȷ(XI"oNrlDnw"{wЍDKH(qejd,p:cs8)|Ju=.' -ɘ W{{B\X7O'v>mnmo>IٺY>_|J/%3b],1j6FR.'Д}M{VԹ >D+$BHIH0-1_NIA9汈0.aTyuWAnvn8Gc[,|Y h} |a`?'{=BrzO(wsT˾:yAyXe8;lU\ِkJ/Ds) yGjv&h]ŷ#sߠZOfi cU[QtT?J7k\SXvl=N޺㳱 .u x潇P@ Ma[Gf=LF7q0vv; w~8,##e6[zQS67+~pmj;Ջ,߶8Oz^O?޾/GU%=H*[ٕaB.nu,n0 1 # Yюhr3V%}w\⋰YǒEĊm#xI8}袋kJR1EV1+6C:d +kћPR5\F6 xVP25uc3N2Z8o9|р$!Y?65LMeȭ&h[1f!ȇIBsɫ!d FM&ʓV;lR1ݱKv l,]%ylmH  6p*qe &p >@!z5JQl$l{~BXՅM3朖Z8ǭRTV%P3}:m) ,.⡌9zmկ\,'< 5 }AWqZEbNJ%CiSG ZFQxy?SEPKbU;-Er2_*7"I2^Љ2Wd ]as7Q0&%39JUԧuJ K(`(o\0 zy8KZ da.nK.X88}i#-41>L8;G(}3[ABucD> 5cu}#fnpFĻ 78GJlLd O HsdQB:\1g $qU:L|[j%-)X9K($M >VVrQa\oKYZVF褤VM`¾+N@<]UYE1ۻxٚf_霦ZkR /ԯKRJZ嫯B FS}n:0`2ݧA}WqK[sbWuM%xz7p4nQzk&9s;pdHPvvǙ޶ B Zܖ{Va$ |÷gq,F:QdёG0 Ѽ;D/̯!ZѨxdeR|.Xcϝceg)&C95ɢ%dņ&L.nqUEOH}e3ձ2Oi8 0 Gip:ⷲ]-R{q9dPC_ZP֖Fl%qFLb ֣:6A@DJA,ܧ>9M.teW2|lGnV*$'%ol c_(ܴ ]4oF , ӆ .uP|.KVo=4۵iJM,螃uO2ΈmInkS^9U*EOO_V jD &R,23# pxpcH4)4.Դl-ґ:?bG@i]P>oﴎ+,#e"uOʍ¿Z)gN?ۏh4"}cǾT𑥠La D qQtg<v{PCȈWkBx*2L5,z<@ivMjwD^¶#&̪8ZE )q"tTDnO:MBThu:^M&3 pVhP*P@$ P3S!ǻشgGt0c]Ò3`m܃ً?_ώ1Mz8c5"'kwx0xO2bBX B^Sy평^m?ox~NĀ+U:$ ;13gPҰ+Єm:)Vn7Ht?h7;öe-ȴp5 U'#+EQP-^925E/jȯC0gm)y8A܋!V))F Ǫݮ \GrR=U(:d) 6FlD:O@d20)yH )Ddc=#J0P;-ZHs.SEe6I: Al9ӏ_w=R"zi.<éݳ_Ml3.2'SzT9'y),&~n  e֋lZj3ٚNvf1'&pM+sXaUYAcb1s:0)-,B>G,@<-Cs?#*qXv&oK,vͭ@Y7ی.e@s!ݏ R Z$&BeA^W6v@+E,8uExhLuSpi+cH牾Q`\f_''CHmx*X]15<À@E|C?0LY E$kiPW>KH8Bo|rɌC.?Wu3F&l]J]4oζe=ȅmZ٨.<bb݅fMƑBs-p^ml,2؞33 o%ᓦ!a8q֕N8;ḥ\gmN:Řj6{l\cѡ9ͦCoI%TG>bewG~^:?k]&̹?cXhl {I68G. mQ1!|P {"ّ ug:k;ar]AB1~igOS:ǺDr 5AF c *pJHSKpN~VzSB#:OyduഢhkBŧ*=Ϩ|xN={SOWQI-.<ٺ| bp&r\X,{Ђrbn?~KRԯ *(D.]&DL$f$,T!%1d^m'_R1dO*3gE iP.}]:j)W&`Ϭ城Rp}j1bZJn,Α 5HQzwS3QLVFX$#|pבu;0]T.+Cz[-/9 f& nU yƻx#HJgj30v G}5AmZ~hs=;ɡo(Yb`eF5έV<Rҏ<+E*9 ֈh6IX@ p3q5$G22„\*n2 eSեߏAA5Ĥ^,/Z{’L~#`4m1$Er\n{sI&n/)mmg"m\QYaˋ"Ar٭]4L 1R?A6"[)nn"lS*g O9::@BU?pڦ{oD6D), ;#IȏidPCJ,O9I29{;XB( :JT?߶(2qrǃ֑WS Pb{Gf~-HJT3HU+0o,7xW=>g$.GRRdP~uC"wNRX)m$oe.>_ެo1 8*Mu-CM_o4(}ΕkƊ$GJyL鸈|pҶ&b7qu)8 K= 7Kmf4O!Ii,̑Vv+\waxu@t7{i;`m+Az%6wJyͽll|J05@v۱7AjZQNQ(b֚W^Qk[5lzaxggo$&VOA_"24k75j̹V[/ꇇqM`j(YCU _:6&p,J˧?Jsz>_p1yys?887{4*~xU}ﶪ'++ڋ+*Fm fYFm`z91,b)'#KrdNtƄ aC `Q8ۥa) x|4 W '$5FS,4yvPЩI=Y={4TZIo?@%:$.ܠ;ʛ܀;=cm[h#KLbi%1$a &^L jØ+Abb}iE^F˥uip "bxnUemP OONj5_'p<=/:'6VoC5zU?I5~@ͣf vN*q:yyD=lv'-hNNsRgӓvCzqsЫ"6~ t?Whqp^4`׈T~d+E EoWX̨"y:!JKWg8r^;Y^ЊRh?W'mZvrPԩsh |naV82l[Xg*2 &i~†q-h*&x;k)wg͎Sȩ)W8#ԋTU_O(pEWHof4VEE%hPDpzev|ZP8՗ncw5Q̣G ĭwE%07Uv0l1hբw:ے?ܘ]q3%:Io~r*w-Vb ?^/V@M1Q+/91"oJz¸-n =1 vydN4ky )rNŘ:;#8=x[^pշ6N^Y{5gY{ND#, 2Uux~[k5S)hCtx1 bi w2f]pIVu)]w04ckk_1&jd)Jn {<>׫X7ѩ3&C"8 Aj@ s9jT.#u&葨+s;nx7f*SLR$ \ \$>P4K(%E< !dHsZZQ e ΏDt&`J=b>|FPH|s9B{s?s?s?l0