#!/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=cddd7689171e3d69ef3a5123691dfadc # 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 'eo^?:xyp{^sA{J+b+!"ܶY"tcjl@cao8B+v d o(!s(IB`$ׇ(HB[A8skB$1";umNK+d0g̍c< n]ok+ x^pW`Ҡа8[;+ELSAX&WBkM[:H vm ͒.=˝#H0IJ,v2c~l`O3+fkyR|°S" c.M}kƈ53B|>8HQ 4#aF|[ 4 bBYh2(L[' 2&#á._H C"! b 0gKu #vj>w#xﴵjP?CTTVxڇP3 A::CC75Cz\Dqt>BQ_B ڰS>rgGCģ@ָa0$\[7ZUjrTAz#0ީNQVDӿiC /*jȧzшֈdZ޵PbGA<@kx:P"uQX V9 XݪxuqT1>5Fh׆=3:LALQ'ݾ n쾾Ll`"!޸c{̼1Nvqx,B]3 CamwS~o|`<2UcES+L*"CS)!€nNbiobFrA3z+U#tO$}vRy^- U5Rs(mY>ƽh6 B`4HC lnR x6v!F#k7&߯/q4z_}Ƶ- zt 85 m} \6gᅉC.佹os^)K4Pi6঩Hvv$qIV<8?X] ׯZ?ٲ4N:F~QTIč9۵65.bMbV[lZaBJ9`MZi}r:J'w`n&==}$quC (/=c$kjz:[y.O)=H Rʟݝ2쀘3u'Bu{,_@Q$ }Q?q#臈&VD!:"7F ƋrE\1a4Cv>gsB#,Chx-͊D#`?5 6gxD&!s<+o?n%1-D5LT'!Q+e_5adI_ָj0غa>`B]/ByB3D叀 Y7LND{d` b[ȝͽ=ʏp#JB5n 9#z0_I|! vF1BZu {&Ӏ/SY;%&Tcf_44AF|0xOYHPh;F՚ԜuRCQ}ve Hay@ a5$n֖Ui85F uIKM{rN75ҿU5NTg>jJI\/@^m%~|* } %׏ |!1V5UE$B^8Pݻq_Wr2 Hhgv=)9=ҟ3eC2& (_Qt-5(23i[q7`Dkk>ǘ3rBX(c Lե6\\Tp\&@"2 ѤN+*& ʿ=39{/U<1+W)8a5ʋk5 ~!4gI Lo$'h2xʮG9و).6=46L"L~nS]S?۱J ן'qtT= Sƹz2+,dW1#cLxx6a~7s#v>ݣAru YHǷxюYky"fLC{zW$:%J#bB{̕OSE.@WLN.WꚵV/q41$#iau$ʷ51Q:XmN88ʉUᆟ 6jkr=36 zՊmWėRϵi Zn&i"/`ܗ'h;AqCdV Q;'Osŗl#N"\Y]|Y|ُ 3&R0.|y5SybM<  &dfL>Myk,4̲T>,/sn8NɌb( `RzD1?茗.6Bi1WʽUs39'\={OhԮvBJ9mYM=B#%ת(oڏ.F-'ovqhy̷RVǣC]֢7^o~_^V\xݏ<BuBKɊ曊%7G׸k4Q1o첯JbuWZKTlz^J5;cLoKX,e=7yJGՈ S$THo@E%KU@~hwWJg̕7rv[v %D~!`:7#YȆ!;xH ӊp&YZˉSˋ2 t[^ڛmTj=P/a-mWnFajfs`IfiEf +`4x2*%{ `$ J KG).ܴ<~P𢲕{<n-`EyE}n᥁fBSMFifoDzn19;3a nĭAka-8\PDn yꡂ{d|4yoqUT0gPfBF  -ǽ7c2+-j߈9Blj+],w]ؕ0`!UܗV@(c&T hBB:U,]tBG⧍ tMw9{`CNx}vfBHͣAB*wά, ?QhئD4_責ܔ$ ;6SM{<0r:6>fq/OaM,gڥG|@opsRQ~^yϋ*}9.ӾF3m?c}gVxA͐ߎ䝝Y௔B[:GGZ'ph9ui?Φ5Z_C*O)OI } v(^Dϩ! ƔV ^ @! /5x VQ/6_7{ !?܆8s,# bBfiX|)B8ȧy{TJ0rt#86glLTLJ+ʒ5H0vSmj ni1DLFKK$,-y'| BZeS֚kL{V#1(tKB)0s\섬b.֛9uC3 F- aHNɄf#L)T^4MOZv`;^u% XZo.8&oD` =! ʍ9G|q7Vۼ쬒a^!>`(Pw׃9y!'!kGhnkds6&pVYmȶ{s!+H]%L ^J;{n=o |RmobA̮ZvKj,a1KH+wxM?XMeߴ._Y8]`Pڵv)3S]F#O)u({Cdz@\ǧ#HQ0aFS͂6a} *lDKV[@w! Qh> "bt&sŖ%1y! mZ_E2"<9sߐaY"G5gw;-g_ [%Q=}ʫV LwfsŒ"v"neQRz\Ȫ{ael!EX0fW+#vӧՕ2*h2 ow^&jg5 =HMfU'zi0H#6~N~^[b/=H2Y\YjBM1ܡK3T\/^a]~2tp.׾Ju5#$'jL7.; $߀гhMlʱN8څx.xa1\Z4]T䕗r-@ܾhYƚ!WɎV,dKE{7l VN)Wz$ 2,72a#Ef8L)&ש)+kӡS2GIa075Y+>LA]i]3[Ε>Y0J#"-w/XNu4e0VS|ʩ$`\#*v%m k|K'1k輲6*'Q36+6`YyE2~̫4 eXɒ3G#1/ Lh֝u x㪇v/Oz;d4z1416bO't.IǴ=tu8-qthI2&0FZV:1f[m=9M.7ZQ3Gbh%ye59{ћ!L׸";;UANV(!F0ɍ:4]!iAlp#R\apCĀP_ UGn[NDIȫp)N,!+`uh>s:yn>H5REKx5s5ͦ^P?T,VOڋBcV[ZzK7_2{8vs9p͏>df+(0X9Yk]ȠD,u\D)CmK9I"M71|(Q8b/|Y|qpoh_r'0HОu'&{Id1:NdA dV$o9dG/s7Hqץ0*H8Y+ h)#Jll$z| q(B?5sZA,#ن ~!Y,IkN^bkf NYi^ХzÃkKW}}t|X?td~B\wTm瑥U&ۏȹ{ |2;G^h0yLf|0 ~`ܒ4=H,>vY^ÀL%05^7Rn7IgnQ%oۯKmr`++ PӊL;4ڶ-_qyYSh%-~(`:AtrR@hФ *@'O$Kw]3J"e0\!y +'즉y!f'\6D7S>'9 8l|=Q,OKplA6v|մ!;w2s Hᘁٰb0: 賾KA=U_];̑yyoK> p=:ې{fJx'y :ρ+KEZ'S!Y9Zj3b| gl BqƸs'^V Al Zv>=p tE֛0#jsƽA4ɸq۵`&^V"<kHs*J~ͱtϊ@`K?|1/C6Y_N^{Ϸ^tf Y^rK+}lxPod%dW<fbZ+YβĿz5%|?D}Y.7|ߛk[zG4&oߋ |[g\|3>_CN q%2"f[G5:IvҠC$'pƻ񃻳!.x:/]S@8ZaMB@c8=i(k~Vl4iɚM@a@cko{?oJ}ñy0'.meB*hG3QNe2vI4 \Wd9q#}*KAq}pk8F2ˍ+:̚yqX|nnַUrQf Μ2ݱ?$&VBؔ juCK*/`gfE#1 N/HӒ4O !A\|bRf5X):eMW NrA4^?ɸTɎo@))kӋ lZxZ 횅( : 3?j[7 Zlg`%exI` Nkb <̱h$Ahz!H9CX6gH, $Kւ-b%8?!XpcuwVgsC??W|cw:{λNG&7ZY]VX҉/p_y(.Y疴n4Ebes)µAP׳[Fu]ptַMM<!®fԉev?>Z. (TyRM[NON__]nͨTKxQ{wʰn3)ÆPSMr(9񟷞on?oo=?ωV@#]=FA/9zM+1p0Yw"td B:etMBp7<0||p=P1*QI>gq3OJ)oMځ! .GŇdӪGw^E˵EdyZp zY|iRcXA߇Zi^/r`07!.hXT4{03w[&Zէ7,&A涑3]آDܗm4U8il5ə3icxY;xEq+ð/8h@*~MzO$9HIq5" Oe1gȗ|#F,%v3Nq<4R6"5OnCNYgҮwr~sb2?ɴ "Cp/aV1fz  mɺC0쒅xN4_ VVQ^am*\y !ў %@.Tx<IY'o4v%S+ etwq0ǩ*ʓf# Z %h4u2UΆyX`04IRR .$ԃe8a" ?D/GRH]Evvoӻ%Uwv' On`Pn(?nv去njfI؍}_~ <[w魎ԑ9֛0_AH"wI0NL"^ w_C*F+X ]=DJ89zZ;KõN?N"jW/"6X,/_N`Bh.4eD\x BQF=IpBrq%zɿse >zBcTx}jXaP^;X:\3? ĈQcut2y $/ Bl6 ٸR(f.%0>Sq70eG1^Nx.T\DBSىu"D07jcw:G%p[Gg)_W gP)bd7F!ȹ& j 51je&D\WY1ͺN~3ن0%Wˇˢ#Ms$X2dW>u[bc)Śttlj? !?|B@̙sgݺSQW,! &'9dʹELM =AIrl Wg^vѫGlw1𝁘ZQ3qb%ˠvDS #'{ӌrf͊"UWUr05lg 'Ϡe}C6@zP"!y?毪]eK_A<{7=qY%sפ6XF$jȧ}&/Ӏ0 hߣd+e#/b6%^`QJbre"Q#MC)#m>3i jrB{AZmPلqc];2*o6E~];+Y%O4zKeޡa!}''eҘl K3#c)!IpF4^˛&G"i15Cc*7=c@jYaO[?zx&0&zTz7 O`| gTL=oQ$'b pXr},%O$o!jԼpw?HI43eI;Kz-܇J>Tv $۳ qeeFs;H:$2)v,z#BգWEʒSޛoceu)08+Yh&Q`Q8&k/->N q( ꓠ:|=%{^ J -)rcuy/SjgJFcq|{k1Pq~m4.1\cnY l}B,_Su>uӋÞB P_j7͕ 0Q~Eu`&LzxM5tGb>SIk=Edϼ^8iJFٔ#&J^r(f4e767.,2S+ :=gurjNKzpҢ *x[Mk}4N${*?HneP^׌}h]$:#8&T.nAoT6%ʬNt^)b%¢pK'+?ܨ<9`LFZ ٵEt+v؉m];024DnU+~m,P: =:' O+B"@:0X5UǞ/ǰ\mGuN7A#=0rE Iw[pPpF Ouk>*g*J&8I&Tgr ̚S|@tD#vĽ4hgOP͓aFmtnwN:;g$rnǒOOXjhB0biSkxWX<@3֏_zK\)];(3qr kb`;I7 ԿW_J=Yho)@2LOݺZUIb+Y.$"uHHp֐JNub d%'iZ ɄN?r/ֱ(+[z_o5'HԲZVP27v`0 ͒ݹ z#ڮǭe$υԸ.0ވ]߽DOOOcOo7oD`K-wltm^:?nl=X| XlTkҟ]#v&uօ! ӊ:n^S(|CT'D*V o )TO}'`2*^謁{d0_.[vPXYAĝb{DiU&}Tsܝ arnDtp,`:4N^k Et_+9Ms` 01Nذ]r2([{=ņbi}}䢞Ū ҵQTUP(Ost RSZ)TGosb6;kItΖIX):*6P /S/O:IhG̅JOЅ%7MS&Zb5h*|8[%Q0z{[/V_XxEh\u ` :;#Qo:4˜I+J]m"#+ Yd0fyt7Z3yL.gK($EU{枻7\Dafִ5|Rgs49Eu$ٔ$w"\ܰiÔ4Bd@n7d=7-tYQE5`w#?D^x5bp&d;yuU+'NA)fT4׀iO&˯j0V Itax\ڄpL"fn3B j$Ir @YWmcx(8I˧^^v&pCˉl2/n'S Y7[(f;n+8Lco@hGT-Ke\>" 썱j2cUmE֪;vx}ڮWUm:iQ$[Kzk.æ $T/%Sc m0IEiF(>z0 ))4XL)I6z5Å{2I“n+֜VE0 xkayrţ>cC$ ial,ἁy`Up8fCUz݌ndzZ߮mvK%j{T#JϷr02_t/+IOiбw:bLHf% USrs:nKyv Y** +3{΋2hh)99P7CXYHOd1=Xo++Z`36bBcP;ldY)/(neW'ɠUM 8fqd!KfWF/X%Ӟ˲\8(NAKMԄ61޿՛^WnT%V_*)IZJ)6A{ tMgd tVJw8WqG]qLjWsZ7uUx7ck}78C JDacb-0&U@4YV-!baǕ¤44Wd nBP }u '|jܨp?p OL8>&L = '9)pL3v>O`b:+$ D|&Qzp9XŔ%m4D5cA駮7Vi8?a+e:R5nw9Smr58$kaeeE4ØS9B䜗Wդ 50@'eKGk.Xק5OU-0MSj9-"L2_j&hp@Xk6bs*KS-Kpa d4h5TXHM">+e?}%ր/Q}\[Avbʨ']Al5θvJU**دU])~iHv:"\ I w%rFܝ9!*A}MQН #@_|.d0Sۏ !$$g=X +q1}O|* gw>E|mFfc{ j)p0;ϘLrtr]7UU Ar_PE$&XZs$#ba: m Zshc&HsLf 7hR3uYY8XQ 0Rl{aBl0k,d^]İgZ Ɓ_4]x1!aDJhGA`tPG zۿ7PU2A0gQ$lqZ!3 1[C feZm$O7>ggKѳEk1jqK)Lt=&A[ݦC}8ZVge ٫`D8H=NX& q @Xu Nk. iFWyMnyo/̷_u]?AR? jF%؏y29?ꆍ jMe}~S?[ߒi /"p8;մ.9}5%5m}xyV3Mw4ߚ5ך-\CSju܆|\0R5e?&-߷66S[ώ#4lgT{ M a3c 0P c~|PD;KHټ~^3{h7;oqRs3edOe@URk.:sz{rgIC_q#y*&A@pN OgK $4 A,ARQܲW@H#Uc@Wl\񱭺I 'rd$ qp9c b6G]7}!Ab%bȤ LJM"huv9Jy?;"dJnے}\|>ux0)+6C\2R "hS2+$O bD )s53j25w0Mr)2 Lt">HvEE E3:&VtklTupTZR 2JO"1/㩔`8&P!ES|yJ!Ts7p ~O$֗4~ Q"Wv^{0s V`4Pqux}^Q0_UuȫhbT9'# j!h^ Ƒ |cq7-JQ7n鍸&?[ ~!s}.~JXУW͜#FPK%FLЋNusyë[Y2pEe[H Dȹa S}YȬ$eKvG[9AS  u'Y.v-X*WS721~8WvU054lѨLqX? 2aG^^eJw,ȳĵbx`1R}ֳKI9SNL|Yo~T"Xu^c f% ,;/~ #xaՋ>x׹t!Ǭύ?io!iJk-SXHsG-bm`\%K^ygxBiř }If]xJn0Dku<-K:ha:{u+Ţ~\|V~Q^qCЊ*sZE4{!ddV'Β&mmCf%T`Q1PPjJ%cEF`vᲔ_va`Li4Db8>>Ѥ:l;FZ>GA7>z>F?(,oUA=fkFf.@5(ЪH?.b*oj)0*c޿Qܔs 3vGAo𩃮jY۪Yr ޙDÀ.ǒ&L].20YrZqo0,\)-1 ;^Y9VfȆ.K ,]BL}89ܰ pFSȸS9(y/,v {w(xs7^i3/$*9kڿs9et LǑ6tHI;`Wi/8d>~4͝l1Q0#f̤,.:XnISW=ų/>zIYL@mc`sg FA!RWBF(%?'q(V㮎xC6a1(YKuAe(ë{ o0cXoDYOk[-fM<}"Ňr8W8.Io;1!T%shی Jkz3c|&PmM%`\:tIcRf@4dQoϫ6{W4>V@f7pc 횏]LJR~'΍n!NUf Nubd$71iɰ{_1֢X+w{18|{u'X(iCE|'‹5c<ӗ{}?&hʴ%*+ g6`G)͠c7l,+2'l &G|^s6y: C+<(7a+e=RܞaDMߨ?:/c-}{x /nu7Q}_'j"7J}G:5@M%o|r-D9eg2}5n7Jlr()c!eui,$wI4lNܱcYD^m#O2@AXWW|=Ӫ3*T+sm~AX<ᘐ0Dxxyj %G9^$/0]%b F(3UHFES D="| Pʳ]%10< ?hdO}0j" z+PI KQlһ&h?Ƒ#FQAX;v ټ9u}SV$ Gh8wf|~am8T=C?'l 齞Pzz;\:r?3lHUkX<P6UMJAvl)}`u7ztXm6X@`ˠ6FzsB;fH,Ae$WMhzݙG~ƑNw|Ic!B mQ1~ɵ_B[TE|u4a4j~rxGti˟0gcE'1MQU mGɟ nc )wlb1rq G0 o)SnmD|lVksǼ9:uZ9>}M ^v^ϓ1p<:h+8q=w]Z٢~r wTrlEe"5KMK J7@%/X4<ØB[5+ӟP % d~>QW-q*5E⇨&:Jel fFl2@XsWaVyh%T7>2 {gqfL,Wܰ >>qϫ=U6i I$SgXۤٞv cZt2@4|:Z){&!VFz Ah]}}y K^TѾET*>uڵ{)% 5 ?ąK&5Nr2STϣ`g;C!{= G_C0p|kNH q}#t"H6С?l1:|\3>6CT lw>`q؝ E d(_Swk nS\^qFK? { (jwˉj1HcTcy7 ݲ-㠱W?jՋs>`Va֜!ߑ&']"s>mB͍n 528(?2/lI#k=a=[H>rVoSIV6[u&m?tz=*=aDkxh;bRvѨ`L ^@_70#@zuiQ Z1"qcIlz] vL1Fk^bdH.6ny,52|1MHbٵN!CuE`R#ЙC݄3VDdǩʤ<NjRr ;S'w;v%kV-[*԰x2bՏ;o `،38ׁ,ham׭{=d27dIr+mF#v>v4FI|3^D16kM|ZMpX<]F(y&Haَ,X؞dچfgf8q:AB4 n:Lw6E;?Ct<^&_dn:dϤP_{ }ONG|ԮpR;ڷO-G"AMΡrJz9X4GX*Vwpjz>^ZR ~<0,tA"x_k(so?lPc\7xBRJ/A~V{Gooe8/YJ!T]e26k Џ'aR JM G9{ᔪHLk̥֙Wً\ ֱՁn+ʊBxlI7԰UfH2 >wiPq~D NhSvM>m;tW27dL</cDs^.:Oe_]|r{NP;9m3.u11u1ܲ=*{ r%aƠQa1nvP{ƈq59E-nc!4Niex8[_;3_x_Y,” YI}@D~.n,@2Lܙ?nЪ[s1۸^q]lR`A{&ٻH \z) #H l&@WUf)| fޣ,jU v;aBb!ԑzb4U`&6?3yuq^Q2>ow}ci^ԋXj9QUdW٧c\]zn?S>F{}QXRs4DBZ5=( fKjbTFqg ]ÛBDz'jC'j*UzHAd0((Rz$)h^ka ChÅfaAzM Ixf:d.bH(myKS"h Zm$ T?o*Jqcd1P'A F;л޼10F']+ l0bj4lvZج%j}!F݅QFM[gƇ,_bƌ04, Cx1sv &tv@ߴ?Ԛuw^bCN~R(ٖ#`ւ|Q;Q8&W6Ó7kGFUV۲q[4mH>.t6uF֛{gu>º@e5uRk{:9m>a} 8GlzW;8'euo4{mc-<(I}_?ԡ;٪)$jvxPpV;lVzoikl+:8nxe]+{(x}jа^o6ONzX4GUX( ]7q@ij8- l;}TG:KhKl0AP:a8^#hul3oTm}-a[ Y)4d{dB_W]=(QXA n @di8u!~ Ea%`Gmz0 P,tY$F'}4Gz!Y-϶7|bAQ߫ *˧cd..c_ZP?{a<,~b2u>4)Fuj`gSǻVE (:=QZ;r;DDB"1烙)F'hU,H4|_.^}z`EL&X"M`cE.SZ4V_Czv9#<(Sl`g@8"=|\T'$MB (]v,y|0 pr g &z՘SIE<^P#n3 nU-Y*Uxr=ow>2 D8"vXKJex /ˇ=;oRnQAԠ,M, (7.]䣳Vv (SPmO\S RppK*}d o?) 6_@A[ vvl"g~7O V&}bz;lA!(#ޱx29ؓw '-I]Dkenp`1A74Gv{}0B&װ2lprC#넉h/ efQ]M wsÃ0fH`h_[)e5hfUVQę))pL3Bz4 F42&!i &c  Tt>F%*ih68Ws0@$(9G`ֺNt.cC߿eC 5:*tI avOSnM-? 熵@:z8!ZVajyhjLCDÁUe-y2ˋ5!o݆lmt@=a gq3a卵Q EXԡ ,,!935,ː;0+?Z/RFG ^]#8wj5uWU*[}Ftjk|mMu?WQP[.8}0JrÃO)ۊrr6OO+d6S[K8 ρMqX9]8@^`޴Q%<|DwvRpjӉ<6RNb\F&#t,l9ӏ̣D89z -7{ZfA($qPj>puq489xJƣ 0y .p$\0M"TCZI{khX/Ä >SPB7oЦ-`bnቄŲ_Ku6֟^<>{=7gzV^>F0($7ȏVBנYo%D :&Yy5}. ɛ^Q0\XֶalX_9vcסDP!8C{ꛓ7e-fUb#XXW}*ߍ$PphxO."A5=1 Hf8D4Dkm7s M q.:n|]pg|G#t{v xD V.EbƦ3FGhAS﬩,ecZҦ=[c}D3*3X,G ?@$ D0$Tb;ŮC)K;Dr{ ݥ>rx e5 '\7z szpP\_/Rv!rqqB|,q1Tn덣f],ܗ^7E(38CؔC"@=1Cd*gaet MăoCfB5OW+ٕw;QWoq je vPDdя L雛AG>Ϸ鰍[QD G #Q!n«`Y<ši H b,4Cbuҭ4F[껵i\J'. 1ߒgq1x!NOJU/3!SYy%*-Z3 Ft)жq-Cճ oybIUW}X;)LyURbixb݄ёy-D֑2ϧQ/5ÇP SBNѦwLRBНW̢$)Si\Inf>2@0qZ:3h1<rM6 6a;mIxJsrP~$u J#xAR >D*;X;c.y,>dޭvM3JФ5gVWI~jd .ì:^ EbWtLBA66/$EQ )H1pf4yL 'C#Rkm߉#olmng'IQ_Ĵ,mXԾKKd:@j*Fn: bבP(Z1DBƻk@] Ü('` ;E,t tS;jiLdd*%lY"F=v ,m8XBU[=tc.DF8)|q̼t: `|y)ߢXE@ tъjkuzNf=!mM> G?^Јhr8 5ަ)\bC =c 7뉄W^r@gEqs5 y3M0ܚ4MvF@r58[_?cz-6ѫ,ˢx$m=@lpԲq[D L`jA%(f F}Yjd`V f#ziB"@PEHAK@b'^_u'P葘Jx5 c`' &?1HS^P:Q%!dI}%j+Ṳ]G& Do%Cɇf2/no!e-h9";  J w[~r"&5¿oLF*2K rql &Gb a6>E7F}6RQ;)Ũ?Ihj$=IKCk~wKEHK{q~S6H%{ ' l1dwNA./Q5 V(!ei*tOP5 VgCtÅ벓oPϬ "r'CBvhzb(zWC &L"OTgxa#3lB!֒hم,`>tdT[@w=`T4wM83?0B:azT_ҕ)N;,h9Б˷bC`NQ!E+ a`b/EN,2zpr'VfȈCH]8FeϨ1 EXfźFb%[EY NwB?[HBdWaw Uߑ (Vp:]ü+yMω"6>nnlI8TM'E׷rvV5Q؇ϪA5MM9n,wv Op6{-s0'H"=6:A{|> +h?e nb@"s^"!$Kcu;3:"of}n(nz\DrZ:ft/< ͱ:)m$feFtɹ*&dN6V"È*!{Dw;n֐\دkJ剺Ql9h1نGgés&!gэi5wm6wPm>RZd}(IH/Uxc;wh {btsXW&BqoV 4d `o7 WEp%Q 6 FD4cCO:/JƬpTU  bI3ux3K<#dRJ"[ؖH|yrX`|-ɧ#u͜c I8Ml{;O2J?Dc|9v>fȜc82ѨbI=[t&aTig'z7fYr+ g*mRYSCUJN`@!Hy;orMewnrl#_!p71r\g bVTJZ ad2P?BZ2MS4o1~} lb 6SsiϠѩgkЪ4kqԴIZKϼw6~%K0kĈ3fd;M9R Jr>RINLL ,&{@QEbZRјZJh WW8(^"9a䲒kYaP3cx'׾zRo6Zd$b7hgwG1c>7QtؠTWrbiYVPu9 _ & tPVa_itN%,K30<Ϫ9KvO){sRb!jk-z0'9I{Ur"S2a)qogJ37|ݝbֲR#YƞXH- f7=(M*JO3 ; 9[lٍБh1I,҄UU[]Oܛ3Ҟ#s1McD, okI=Y_z5 g}Er%)oOZ'n%P26ot[-'3#LEYYn l*PN$c 8CBJrE`Q`Ɣ`֐}zbX#|QU6kq`t gJ$;-BhgeiMhڐŽcelһ!3`6||F@NN| & q p3 c.=&P4T_rd 5_{5J+,կ<0Ѽ<=ڭ`]^L0Fa,z,]0kyyour49Jr DJ *D+RCwNư $4I=;rbQv&ˢoHmaI*ҫMClP ™6 cHJp\vA G4 png*H: 0`lՔ?P~|Y C=I@yl?&mc4*Mk23BX7[ֳ6^y=jG{:t-ږgכ{GTǭ6'띗G);ٳl2t L^Ah/_6ܤԝTOV 2`wj?yL' SF;jGAϼD mfON%NZW#c}LN$qє2 /%|h@븅_Jxg|g/ T!̉W:pIJҟ_Ͽ|W?@ xaʓohl0zo ߨT\ yڍfF\2>.;EfW_ 1ٱY ܯ N(]}Y;HTJ%c9Lk.fkO-`R K) ׎ wHvۡ 7<lrb9DbC1A=C9a}¶'F ܮInW_L:x_v(%3|gvdwa+ 4`Ph5'諿{_֖K!զ9={*$ ~9߽d)=2=_%o;Ggu|ܫseLyUBA~9GdvڻUR.J7 'Z^]}"ߗ1 ^>yTCAzua^~Ҋ06(e8o*HGqWT`orĭ->#^L Jajn]$3c3ai6184|ddY= Rcؚ~qʠ!ł(VN/9wɄӪU`DisY;=ArV@x6څBLFEUezѝJ"WW D(T]HJ \?pp!TSdaի#wQQ*0ɹׂdtX;!LBkd-fi.QʛO 1yb=Q}LWF{+'C!tX,vɤ5.|(P2D%)jP!_ݝ;B8:mCՠ[sr]mAl {mo>* 5sV1=FI*4$7iVߒy6Z` wjz |'?̉]K9XέQuiY>r>(q<5 PpČ>* x/Y7A}udYAo%™O~Kq"ļ*PR`-{-7 6"pJ@ *f@yWLõ 萇}mMr>ڱ?B+Ezז?;mLCmG\>^)&ڿ݀pҝ!Jd Z5:APE ̈' \2[[[H`ZfF81 ?m-U! YB gyy'cix eyϴ%OM,lSk uG眬eZ%|M xqrso'?6?)CZO^][.kI*XBJSju21}*$4y<|>y<|>y<|>y<|>y<|>'}'X