#!/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=754c5bc4d3733895bf7741ebecd45446 # 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 ndi̊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ʟ @ :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}h>nJ|3Ldip eȢ'~׋{|qAgI`'ܕ˶3iK9P?-q}.A<ן(ql0t͋'B' T*Uk r<@x~1.-e089V ΁t}WLR;bzCdCBԵ!8>Ex㫾qt?i;#`ci#1$huK@J[tFR!Vi&y7XB'8"Tv_^,v9x,f^Av9u 4V*etҁ ]ٗwR;yC.'(Xo6%^RʧUug cϗMnD3P(^ **u\ 4HMa];j O6M-YR; 8'RQWts4Bi+|C^ BoJSDSf*QWX [c{*V!~e\JuHlzH ;ڣTµ!k.!)Z׻q;TFc`&tF5ғx6[ W$ kAo JԩCJGqُ|/XO 冈ڋeL4^D*$$&W%K #64H5%׀JݭW$αN9M_<s[c;Z 9=0PːϞ`b U6*s^*UteUK(}ˡ,^[G(`9aJIdi/8;e̺yy#08vr 4}~?V~k:?¬/ɯw&1L&N*C2 wlheՊ. ־ww]WzQ VvRYc/;I-B3"uiu&` :U:^aTh6B4,p,*]ݳ&t>!5W7U@㏭ݭB>RBwuetڈoƗ?o 椊j*xQMhz_4O0hB'pqoi>t߭ק!_wOE~!kpTs__B RNPg $G~e$>}U`d{PL {S=3vCgBk^ޏhM5 W[mnԡu> @U*_ N7T^'qM(2RɎXdA `KO| lsZxsCXt `cczMREC<:Cw=?=M~>D} _|L3aul@KtFTB ʩ~#(hՒRPkr`c>S4PiaBsUbcĎ{ؙ8ֿs~*@A@S -Y& un&{T͑)! .h>[Ug O&v/ytkٵ2Fpo A" C5H(BY>h kLū"ӢC 7K/:4 SnIK-x 4rQߓ΃mB&Fm^o-ݧRIJ.ٰzT:U-'ie;Ǽ*L+;~&|D6۶r2h|Qjh}h~THrh6K(:]N*RQUހvo~winD־_7nb0ԟN@<1U֎Ifr@1u`e-zvV@Hj&{lx]qY_;aASiUUEvQ9r$>حvz/[8e)Gై:4jqnX]D]$gqT)mBĆB4(eVdz+#fW L(䓋yCᆼYGb)0NB](vB"^h@J0tC"nQ"eyjRѪ+m&z =hQ_v@*0y4,㍴RZ_8Js/*HdSO6jPP@fz{ի7bW5xT;\&H}$-KN v:N1x*2_Q Fd~:x>`R^d J0m^#DKA5{6,_3 G4gNMݲ/$ -m}+x襼3ŔARU"K&1lj3vXuzF%Yp̈JGg̳Ы,kwh4yw=}Zq F8iSQXL{f&H2ӿ"I'>2Eo]b61=It1-̿AYMbzQјZȨh$V?VT?al)aBqj4Lj+0c]>z5SYz6{-t' s(!c>i+:`##D VRҁ,HbcbXA<>Ģ{#qtaY 2?{,RpoGr!=^/6^>;֗<@ -RҪ] U F G1gԣ&ZJZR#=_VZ^&2CLř>`t]QиR>&gb,̥J4d[Q5A)5)ؿT)btױ6vuwb٘zzH_3=l(3zC_vք54sԷ'mɔ[r7[ ֹj9ܪ2eee eW@Boz)K_?dQ˜Ҁ嫧OS6k~62ֶ*5n)' vS{fDzB.dXV!_VNق]iz`Nk"ʼ 5zm(s',^Bok8mv2}Ws @Pcƀ/O٩3~MHF|*"ZX!]0kyyw{ |9"p'9&f"%݆~ _6]2d/o9c"%6:cu"{5Ķ-Q~i/{o*]d^Ћ8 {2#R/bG3jʟ(Y>ԥAynߧ}c4*Mo/L?ObbWVC?y½w{[od~y݋m>M++iGw6a*#=˞Gˈ~^Ua7u + wj<[r Yӎ?@_D?vܚ,$x }ȼ\Z#dΠ!Sbkk4 ۇo@Pa!EjD@ꇿуJ"Jc,mp`f2jMP$> %(.\h 4vi>A0nĄR-zte3jw(x_As>ld 7{=.`זs o4eJo'U~vi %T&Ę(:W礧 &!:aPx$IR q-8 q6^`%X@pAm fń7p|ޅgo*=}IIJKkdR "PeW_Xzq ;ptܨd ުL[=M~I$C Kvd'\,oNP8 ?Q>`d7nbK kM_RR6CT )[a[*"O*@s@O,Q\`Jy\|Pȅ~,_&0U]PqL>+N`Ŕ3%ʎ2RyX}@DRSK1qn}[?PMD{yz,дNcvξYμCzx!NM]wcfsOq54ϣ[e8j鹐?ïv:aE~eQٮk괛tLx<%utFttT4]-@VŒAѨǐv' oΰd'gǰ!t.pѭY/hP(XVG,;h8%8Rԕo0,$ RYa;k9&%U#eܡA=E[Qd5}o_-ז`V?ij0] Xk)UUZzcxI7"r<\auazg5f5@ّ:95MK~_ Ud+RCRuvʤ#W&3vt~A-n[HȜhVUAMTgS/Q;z[VLN!ܸ$xDhG1mh%k 5 5MT˖Ć]H?DBD7三sB[\٢+4rբx6 In u0zo(ƽ:&v}X 7A +PzFyYTyELW>XJ%RKs]~k_$=HI5d&hc͚N-#Q(nIC*bE4 ! Fs2 kK؜9-1oeZtm#WZB|i^M!SwUȬBŴ5Pm# QЋ=pTl#Nnt㤔m8,'M,g'H{ Ň&ҜjmLӝQZt'SkA' !Jq=1:):;p3(/Rf˨aJ)E>~TX#vXݾ$IYJIƀjg"Np 4U4Q Zx8?( $=D mQd%CR|$]~!8SᦲM7Qp~h pƛt gf%ȴ:n{7ZZzZYA~C;Ec[wfE>y߰L> N$gl5}Ϝ8o0wF=GTb' ^~u֦L͐ 1 5⡻&@s*MAlC|)_>r8 V\wTJ[o7RSk 8ׅc7|+S8yڋk5b8J|B gj`XrD5muB"yay8Ӱ|;GD'؂i `f_o^YA&gD8J>5rjo=Gѕ!a8+"X;H(03%xM؆XW=%tuBml3"@~'bC=|1+E;*y 9S*TǏsoW~D}¨B?Ӈwaa'3Xթ~a.bߏ/-w[&̕%TCյY<rIe~;4?\;5#:٨]ۮjDa;ar ! fcD8sD~9I!؟2=\[v..Xt{.qƔ= F>ހ~@;f&%D+̼< iyZ92lj#I]D -z%;drZ* `"ΣmFj`9V&'Z)Εu\©8crVBdʐLT;u̬꙳`+#?.dif Axbz?{4Yt+JOF}=M-?v Vw{8kN|A`HV) -"ل;S9) ˒d&;*:O[/PñiC*fv뉫-0Twt/>im ݦ^O? vY 7M>X---T4GqH3LKooh;F]ʵ{zi0Kqtd&4H*ӓPbE^Ty &>IACZtuS]n{)sF̺~kԄ3^lP%{e1~Z;(d[u'Z\4&(craw)> jC#{ zu]]|B AϦ nSstTGƝ&Y-EoS%y= :#<8-M؃T7lz'v7z&ER(w6tM H)L3yM=t]=Jy`Ѕ C- Xq8"|VՈ_Pm.Ǹӹ3V"ļMjkHp7 (]"oPTDuR*Gz3.j{~؜co\r) @.|ijĴR:6>cqFSDm]iB*6Za!*,_ș1lzہX(z5 }"gT>/^@8>4JP}]j _(UT8jl/,%n MѿǣK e`%? -_'R?:ILtb?w_yr/;83jA,LX\(&8mO !~;4O3vޥHG(*9it$OۘgC}MR򿯭W|vL*F(O#`03=]&q,83JL$@9r,le`km0 ]ůRz l~y(C~:I`g=o/w~AT˻%~9:[[4/#WکFvaF~}0 ?4R8܂\Rt\Ua8H:\. h|Q7OP$-tR߽>b(TU<,U@-1Ls {o4V?Ø֠K)d(S>HI]@$)eL^( A1~xkNOؑ۴_Rq" B E #:0;8ndحd WP^^Cd5Q$!)AsG2U'aNTAPdPձLhBz]KjV%[Qq:#SN{R4ayⱢx|ٵ蔑;/2<x;!0Qr^9LЬjy l0(S>Э~oǣfR޽^).-Ur4&أޒFgR/h ƙ8}\0O+Uz#rZb mneRρNQ9\M_/y)֞MT$ýSR|/Mx_RJ7T'1j n$q6 D~L\ca夤N\†#4>t; gM$0:e7:7Ee=|Gs'f2h hpvOXl"bxy\n<~+d#YIȇ|NC-ͺ6A$Pڏ" -/E1pR%s)3^w^q$bK0SOY" Ba pWam0WbF=GOAм17.غ͂@xLq>ϊASD"-'?= | \a{B JBMxM`אH x#}"I}R] 6řV+sWP bBU^hu%h;ҜGmvw#?'fu˞2l jJ? >߮=^Y?rhQ A#lBC~D}H^* ']3%b7=[4ہr\ei AI(70יZꎮ]]Ys钢N)(Bo/z̉x sS!4@*xX$%džT,p|ְ6u6@d&vx]sl˟NA q6>Bsy3&SN,@ ?{="w`j!,wM{W{sEm>D>55 {; ~S&2 s 1ӯ!l7\!ӊf.LLQ+}MՅ}4Q( QWqg `*f(^씾(ET՟FiG$ͬ)ײBM,nW]ܴJ &TX>] ib8fn-nHm*{'ZEa $!^:CbtrIW*N8%ˍ%} &' n[Bĭ0􈝄=_08YDC Tܮ}Wc d&M?3äX?89!q&w,dϜ 0^& k@㡍?1뒏y~M ~n 8K䳔.[P֘IzY䦸r7_BrߌʻӑF 7c s6@.ov-b6nJ#?ZQ.Ȍew~1J%u>(t:[yw1,lPlř/5(jM~ #,%$ō]b%h& ÷dIYm</#JȢΝ`ur$Ww(p L)(\nʐl;cv3 {A#8KL3YrzoxgRYċ h1Wb7KNyh)_ 0MLee>;7WcdChcI~#غ"Y-$!V'3Qdɦ'jR`ڰMal?WpcVm4#KZ3y| ANɀV8#O`1H'9I9p΁M[s0Ұx;%EP-Cv+ɿz[^buZ2Jlrt09EYF k{+Qkh:M wC۱,ckHX-h܃ѳ\V5{ 6VVtx~ g/ŸG x}]M,oQb 1ߊs황Bh4!dЋ IXTq~L=6u-ln3 HӤ nOHml QsMw̨D$e,õcZнP>;Xv!m,{j0Nxa!#պnu㔭vr{|oDZ`&uQ 0^ݩe<^NS&%sm&rP9={ j΀RO<+;*.!eScHjIZ$(ȗՆjRg7%CvLo;9bC Xt4ZNOoI S{HPݔlX}`V% v!t?(Vhy<%b|&a5Q\,WdGlr ړ$qc-k64k-t@}yڣ馯7cndㆸP!Ų70ҽ6 >9K!֜RBql_[?zݬ6~J5q6ZZ=I, _[ސ|<;}.9P';@oD2{[I]/ӦMyӰy.;ܱIX= SrR 8GW :0ͬyWzuMZkOITo1o^DN "U0QO԰1h o ]E"(6&n"_TfpX^F\"Tl ʫP}eA=W'5\0 jpV(4J+,Gɠ}]I<t\Y[G74"X͛ZϜCO!oErZIżٖL3[39ڱO6 g=P.fCYS(mi2X٤TLZ cT[ג 1-_q6*(Cn}[jAh@P Զ#OCɨN:l2ljZ:2C?6np mB ^yL_p:">rKFnY"N叵_nZ0۳±, n);"OjsqC2XͽHytxb!tGwf>6Ļfl>a;}Lλ ?)d: 6Pt9ay0C9=j6؍#dzobi%+r}O`NYw=]؛O_QÚvIQJMNQ? p$Y8q*59c$~;M@N?@clC흈jUR:üQ C/E5k) !PJ?3ӽI5b7a|>>q*t3D2u  GNؙ(ayC/<+=NZREA'72;㽭7ͣk{aﰔEOO%%*DŢSC;NFY-an|5 ^R'1(\ #qҢױLeaZTOFQl.y8&"(쾌|?<6sV_sbjA`yQӝr6͟Q;Uj%flg}q*n7|fS "|]ofjS6Y-2 fڛu4wD(ʥˆZtOwDs"AXR;DҺyoDn;_sC`NZEWQT~çl5:7)pRr6NWs:iMtt0LDLi#P?:Qf#>~z>M;wTVv:&US~&šiI ά[q@?$}iq zk1&؀Oކ5O}~3QLo!S>[xf1f>wh>[M3sd?zQnz8??o%]s̀Q;fi,P^Ҡ^_E*a,oмBitLDX&\N)wTڶ2\1ť:6x졫V3Jb&(:Ilǩ{2gV9X#ntF*\ |$qraJmz֏y\;5Ԫ.yu/nX#Ic3|xn:bAok` , zLQg!,e ǒ[=KYO\B3F,fEIA,r@Ce?c$b%=A}59`/2JZ\M3C`Ɖ7lU`YpB2rd7ƣ1Q'9 \]hB`æ`Ѭvvߋ1rw5UךzW"LJ˅[/ Mz='gԯ;A+U꓊Ws2nS -!`maEXdkGc" nK~NU>`ho%Yӷ}F$vx?(b?\}~rxJoLZQ{ Óia@zgz'Iac".ĻaJ%b>ZEba!>Q ֈm{ZoOV~awh~m (E&)-dgyx!CSl9XnxT1n bA׀ N/)@@@yŶ漢5l͸,<BoDzQ~au܄9aHjF,4gVsvfDӈU{4[4LSSπwޔ?aeG˃o=Q gb*99E]$o=`)똶upѤFXݏ/^pQLA gEXA@ ߊ5BׁhI?^-co%jWwa O2,6KlS[V9NZM 9R2[N wgUrԢpTh%n L[Ptۄd]yAɤA(ƥ5a (f8u"@\"a;mV[iʤSM:՗*ua{SMT|4 =KBNKagw/+qlƗ8DoޙRjli[HE/k1`=taUќ7!]ayIܼX7$ o` N6?t /kClwk>|V'QCp ҹɘ#`w]y46 zaCX׉'\}Z+40K v>  {QEm;G4R)E޲Ο1G^ mA|D23]?d(0+J ƘC::=v,r ĤǀD^4čCݮ~$.n!$׆Ӌ RN&XA* >_˘l9D\Q拁JdVw}l#Rgd_wZN9X l]sPj['<!3)k}ϢH>KH,ͯr/3jn5 Dzq1 X$6du(5#YBYT % X;;-kТ}΍wF19]5H*f|/S ٰ'FN 6!rwWRQаfx9tkޱ e75FvDњg &y :S_ᏻKk>sB ɹ8u>_*H<&u`f'v|60s\< Ł5@C/jE35b0r[8`P1NX5 cJ}9 EB}HE|mbc98vZpAOZo$1Ȓz3)-`48=D}I2.ր2J7iA%2곑xfYqٗʤV(W M{\X#IqeX`Sk dϋopNAxGj_sÕMܹ$N:1d31y*0Oi2R{ ߩ%QGlQ|%n 'KحacoE=AN( B18jڍE`tX󨜢;Uɜ6%"AdW#$u݅64& ě4|)7}f/wfu3JAj=6A52B~z ŜJ|'9f{Tg,$wLfG[Ş.g(͖S/gx3gfbMFϨo DWIUfٹr2ԝ F%Vm-szhiIVc)%ͥnY/#:M[C:,f][L喧 uMqO:Ek>McEL(@\P˨gMˮӦM>p~K_z$~;‰{9Wxܼ!2(♠m?S&R%%-+$m?_{YS /};|ĕ0>:I ѻ˘Ȥ} 1.+SgU3%O'Ca䡙2$F(N5 ڮ?rE@%%!X47stɫ ?A~Gl(=} gxz>!][iCqJffx )Zwwgs2,O O(+GUXUcngYAyX_>S$:_I#(|X}z_2ݢ/^HdқtiQCz˽7Ḃq" V=h{W^̛|4^4#P̶F/1Q2Y+KF&A>fO]SKR() k{Dk6~WD(BLϴ>_ЊV@(zxĄlbfzP΢ڊ< -spHJHTdyW=wNl;sjQ*l5Ep6a% k+%xªDW(Pr+Jjw&tA)=dmUUI'O @呎ELfA՟).F%wIFX%2_AH}}X"VohV2xaPT oyL{ W{ܿ r% /{4`E7nlE>$g{۽*_Ї|_;uWgz0mB MP!7`GI^bMusL)f֜@M-=br^E7Ds$9G Q}8c]xv;1 /~9E47P{p| =r ^D^&v.?dߥA./0麗8=- yh)ǩ|M$V c 9]6f 2emF:M!{χDrێPJuM )X)d'k`}6}Q+Gz-9 =Ry!ĕM<4Å{Q<@w<w%@tMHftVZfɌ>uW4f'.ݨk'}4P8LeZpLU ItJf48lZb9?zӻ{ &HZf>T8!31&G/Vqh+_\6 }n年q{{}`6bOBYWpZ?3ڸ_^{WK¿[8q:lyFuV@mz+otK+w:VGЯ7kq_]YOX][M>}n?*|_`XNڨK =NVa8+|3J.vɯ0PJHq~I,}_H@/t2t9#8|Q=C\/ɇi~Ij?0W\l u/b1Pḋl-L]ڀʝiMgv+ \X_W}Ԕ*\# WQX7[ Q(O;gޫk0m^Q|vm{g}_`#V yCm;_ةC Ɣ@ﶕfvjq `I+Xí*ʿFqw4?Kqg[/*.rv?֠-=jwSڗ ;b^m ld (FjNbE!/Rqo1sUYzm,^$OS_2n??8~qT:I+_bZ _:*_2Dd܌&\p`3Of5h-p:;p <"KMUסT =ڸQ_YNGw7T~D^uF ӏD\iq}HX *~Mk@Z7oUQl2:ٱ#̗~}qT_I>l"9?B3gk|2mhkˏA^HZ^]9rNdnk \!*H['@.ƨ.^ 'E2j>QVuAl\VՊrPa$UYRLU3ZrGىI$hqi@Z:}eoTL07S1D#y#~[AdFGd0MxIht-fs Ds|;61?4L=\?:=hMS$^[B;8;Tb@^'&v5vZE&nG.-Dk F a:c1=lx:)hxn4pUz;%ø AWqp'yO%ӛzC5_M kMMm|XHنXU!`}x6MHϪa@]}`CozQR뒂 ک֏~)f_Snp |ԏ~a[:շw`Qᰶ A̫MU{[;R7pljwG{Yn"umAwJqP۪j0ϥ٨1vufTalv G㣚zMSݨojgAuܨj *`؉Ǎ:Mj_;c^ݦߣ r!N(T3uöa1V {7jEU=7@}W6a:]\#RWR_:v[ 7ShʶtW(^I!x٨Q;͡P׃ s,1Q kx {5w䤋IT"*!,%q;'>S7TK4mCk7U݂.p@ )8yH{s:cCkkz>&# %a v:r~WWN>!: 3k\Csn4}Jّ pxuϰ/-]^^V`t$[} 42ls93[TAEWٞԇud|݇ťU6x`-lϊ~# :\7S[ӣ5Opm|M-`7{ r Q.Kƣ c[Z^ui_oj;ieY"xvFakڟWI8  "6Bv 8NQzdȚ9*:Aּ4w7;m|!ӉwDXA8RgdUb5br"c1I7qnαѦt8f 77$u>MD9Hh?w`ۚJa6qIgNaiTV|W n`0 zLVZzk isNkP&E{5UVT؝L!|8ۃ,2F1m qHjT)!|0Yn&LO&dQ<,ڎ`DGYo*#_U=E-W Qn"ρC)גqY-煣"2h:c.c.,'ώ;gqU5ƺs20[x<+㫧3X6U}/.JjGdN%C筞(e e#1\3q P S7t7~j/pU- RAq̾M}N ֒IḌ~yFi $-%ч5㿞̋VG{s\ży~O h> VAakaTt1L+"JSH9$@<`rʻ¤4ԟTn7t Bp*lJ,Zp7o򵊻 Pv`Ep!NE` h0&jjAÁnO`Le碳%4=k"=یS7Vm ''K0?ea˨O姕bG SOz-,r@EbA>;h'F9htEކZ\,w4pȈN(`^D'ݵ(oXbr)X-PVie|6k>ZԘL=\e&Mx iWM^n)9Q-cLBba(-'%>TXHͨ">+%#*/9Lu9ꗥ2{eSG82Vskkj}uIR?DzQK9;qspv$53 1,*x۶u75d / U‡$3eKZ9Eʂ OV)׊d݉5?0@#/}l\o}tD!k6N'ߕh,vD\2ܖ[uEU[(jy"Ɍr ̚# vz@kL}"tQ/'KÏ;hG!>RtR{vXjS [kTɐ#+6QBm_.'P5aA;*hI l e"W?N[}֢Wj"Sp;%3> Q\hm ?܆/k%6M5g?D]$iF ];$ā8}/N _rGLRM}T5=Wl WYQ+HϪ>BKܨ1_JeuEGTUGs1ttAni+vehpӇmVNmioii9ZJ5_Ks[zjキ:ݶ%^tK_Prj)_g]y`ջo9nܓώfBB6/{}_Z%˴5^*ȸZ^"hl;jUJvr-2|_ANC78j3'EVo%,;C_Ζ|mVblZCtrhחͱK['̩-[ѷENIGOP"7K2wq7[ّk=Nzhi\j%DkZrp Q弨ԅuNi]T\ RQ?RƓU4n#{,J?3bI'6]#E.JsVS 10dF@yҾ^`=9qPOY#9OZ3a %Ǐ k['up4K= r)R[1f6||w0e4F Hr$7ge"_lpaDR}I28kyOt_'%hL}3DR ;&Cۿ>a"+ѫ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''DWӵ'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?t'OV=s߹ ~4.JyHhyvr\^CU l^|@/U4<5G̓ћM(hгOK!~|M'>87tmBLQ&22/;U~yQGE!MU>]oH`$K+@ɡᷧT~&y*L<Tߥ`n@H<➎Tv7/`ر]ktrdYI=`f ,/S"u 5?>w)ŊVFIUgFEe)($=bj- 9Ry\?R@vx֏rJzpDUy5X\L^Rp9ƵHA[_ظ8bS9X( 6߁&9E+׃ʕܧY|"BV=zLm'z6fy@xὙmpFFbԦvRh-h  P8@%tC)J59,63ɵ1>o SFGspY *uS\vm lدzdrӐ0ThԢ_#[o4-ީdwGd5!:䧶\4]#c/P֋`zv \Uiԭd`>;YNֽud;YJŀwtBDIQZ ú>Z.pPngb[ ev蒇smMrc?߿^TWw).݂F2~su`0D7g"Vuh>LPRQ޼LE`[fo{svs 4maO '7U'm/_W03J *sǽq|~>'eyOt$OMmljuuūsB>ws}>ws}>ws}>ws}>wOQSX