#!/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=d2a5ab64a4cb62ce30f6549f8e9847bd # 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 ldi̊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םO?s|+0KoxIk&7I~кL&ZYKh]A=kוD:TN;vRG{̻zzu;:~I{p%CpFWZ0 JW8']OH6xU>yPkc|wϬ<݅n{b6難ù9,A ^EZMh/'\e/dv[}yO;r7?ϯ{_By5NvՂ 8/GF)'(z3[i# jP>SU*f0W^=(&vݽ);{Id!5V/sGrᦚ+`ʭ6N7G]P~*/^TUN*G/ēø&P)db,0 ҥ'>ewyDt[rmoӀx۹! ,:E^0ѱ1Ɏ&fm;ܟ%! }+P}ԏ?GyGǽGj`s7tƱp*] Ow9X%mC²s ,SoZ`A&?҃bx/>&陰:6ss%w:uk * DՑRjI)H (Z 91 mh}PGϴ_x!N9yn*11PbGmnqLL9?Ue f{) B"sxk9nEŦ]A>oiGN:t|i$c5{/tPu4D'$?|#:<8)\\с =RJ3"+MkeK=I)(Hwrk'=]Ifx^ɸ߯iSȖY`?Å%TlwϽTX4 n!Kהw{kS\^X`#/ ׏'5ZGzٻ{ 7\hVwy<9JYG K`2/6&oi9qfQgR+ ٪^2c[@Q'nt~65BчllViH=F.M.eWjlI3ѺFQ+Z[Cپhqī-^s$ms,b/gl]ph7`bhK骖('kakm%kҷy?lT›ߚHw١ ?{D ̟ [ 04G"1)Ŝ&S+kH,:7FYr=VjtaB4*ճ'<5hZ^Wn#NG7w^Xl` WX$@U@,Hou5dUiQ!ܛy߅)tWE y$aNm[z[4(t5>O?*$` 4P@݇% L.TYj`G* o@;շ\]KO?t;?d4a7Ig"k_Md1'p G5,xcMhHjA~_PBTJ2 eh,gAHF⏊]L}J6F",J!OOڧ[JͽOrp:8gܖB:\)U$zts,+x ֎FM"?lO\'iKkG$39:f=;~ m MF5}_L6^뮸,ӝ ۇ ީHJ^Jd(T]9 VS_-2Hu#X?Mg8 7.V |8APXa!bCD!Q 2Wn23+@&lżkpC,#C!.ZG~S!dG\/ B t\r:KPG̨ Q}߲<5hU6_eb;^y ]<XJ{soyFZv)/NiXmhV2 'Z5_( 3~pԽeUCKf<._js%Z};q~FMbH'OoJn,N(ѬABt %&X. tPF()H9FXv=Hj9$K=[_\H׋צ 18 :;ijWBUz$GGQBv/|a踉R֤H>,s{Ux C)fgqO7]W;4v sR0MVmMPeM k`Jo$@uM]Ep9p-'=G6l^<;׌8CEl̤]n5aFp㬬>Md4Iu2V zCu.$:dy*LYYY`rЛx1EbY%t0촃4`T᳻z4JM[J.EljvԞ* {AȗiSCFt+؟A295B>D8=>`A KC?N[nLzu1X~1K4Sv*?B_y@.ߨ ~3HV0oHZ^Dt_HI9ɽHC({E>$z#v()M%˛m H&G}Xf#-ŻHt CD_ZKme>#Hư +ԋX,Q猯'a3{!u)7GoPiMJqӛ O!X#pO޹p֛&_^"3y'Df|eů|SJmmѝ| #govxϲ'$!䮋Q|zM >ڝx_/!ip9]7[xTw^skxh!%;ځx4Q}{aWbޚ& *HL͔"ȋ_.CZi̔t< QBH9US| ɦ+V} ‡A ?2oF}U o|]kq b|fߢ7VFa'HցЗ0яA&+ 6I@4EC,2y #o?ټ3zX_boȃX*]i z/򶎝VmQ+Q eZUs~Н*|eL+ԦuWqKi 7D_N ?% 9_5PBc64@chjПapZŒzcpSNUCu Ek{] Nc NxwN}'=pCoԋM9^/A@4ry%3k1&qnnvaE%5[j]y/pTNq|Sn_?D9D4X vMk p9{G0}+*nAM}9 ;t,(ѴߺqOóy]pkxv+&}9zTx Iđ?նefH|e_d72 %Pz }"Tlェaz4Fۈ9qVؖHf! (n?- mTxD'cul=<>rWI)L*uU/.T)oJS 2/ff1svc}hEV_4 lp {y[jq0dk5Q^ 4So3oП^&&>guAxSGWp?-}X{n`l '()dVkhz.!!oyxQwbGko:&ݼEIݧݧݧ!݇1MW ;0cЩx4*1I(9۠3,.5!hf1,|K)1}t+3Gg Z( dE(VDGբzQ;Kں>N 9u)Ko6ӹvs-t݃ !ٻ\zŷ0 AnX_/m\n|66ITdV?v/0,'}_oIo 7hۻ:Ms%$}iQ39˙H !r@4\JLW L"bwv6er` B^5ң*W~q",Dͨ\cQOfz$LT -g9&HkSi\76iNL}UC*Ew5@hv‘d[6V1X3v|Fs WzpS٩~W=!cJ/Dzl0_[慎{HRcDڻLzS\'^N.*}l#3א z y;O} Q}5w;qBDaXKԗUKSn %Sg|X雥 "iQ%r.5햎X]0{^K̖C4ꯁ9 ʍ0W,&w0@S?51].gwR0;SmzypnLj\@v#ڳ` <,@#Tj:w:@&l̒}96[.#xTgp2by#uk=hFPKKO++ȏRz`GP{l'vguv֛mݿ3mt;ݨgJL|$s1W\8z\c <XqUzWP{fPNv02$ gO5pf ۰#va'zL_ߟX)[JYm *FL/;.rmνޘdq 9ҫv㠚8PwJWˊNZ|˵V9m.; V~{)0> y‘ȀS8 WQb4Au Y}DåȵPq5Գe!LuϰqV݃zAQreGgQMu`Fn5栒7L' (+9UlY~}R/ho! Yd@6 ]ޗԒ|;[V=cVVB .K ѯ i6<-i o㩰y6}ݧ\-{T9B;2Y?Dl;!f`GE8Cr3gJV*qmʯv|r3S{qUUupu.1,TR z:/E%Nw˄ĕjC?`v|29k}bpC./bזVkǷfD>9 auZ(l'_P!$lg3')dSǛמv AŅP@p%ܘgs(ѧspڏ35a̤hWg5y!=O+gVfMm$723SdLNKT%!QB|{y~bY$y4^0|]H L "@x#ŹҷZ85gRJ1CQjY=sL|egRX ?,\4(Q?7qbULg@&K4NuŲP)ɨ鯅!zANc^TpͩCR>/l 0ʘ"z~XD0sut ]v_Ƚͫȑjkp-C‚b,:v( Ϟ¾] _i I~g=KႣ_<#Lpu`ƴ)iוrY~ʻ`ŐI^9Z=~wF6S)03`8)3Q4y3|xns -˂>WLnSS鰎:iPFX﹂of7j٘2# h}HH S0jy3 fd8X5}ZhF ltÚhA:NM)T <i{Ukx@w_ĉ əX1[k)UOsb汈{ttF!C pfēPت!Ȃ^_7NCYp 1qohNgQ3)t[0L4l %Jb zE13+IpDCt9;B\*X)wKPL/`MZ[lQW^ӯ"@Y8(oH M= tWR$t=w(Qx=Vq{<&׷VCg99D Sv]‡c|˔m]r b^+|'%TlD$EqL^..gAmpDC!wRz* g!Agd#`!i_{JYCQPNF/Ҥ}_ .܆IGq!+ٴ\v'mKݜ p[~q +mhR9{)ʴ #mړq-4rv:+49>*w2n]T .n4hRsQ쬾. GÁDL"ŎKwoS qS)RtDNAOᮉ{!O}{@}09mm]}gA}T?*g d*n^ހ1볰C‹#ٚ ][pCm*ibMu^=%z!3TC ͓1"5BKwfl0EIq7 θks'@)쒶pR"w;gP/8;u`b:wyJI` f%2Udqޝ hN @H/żQ6vx3{ W.ehb/M͙^Jg' y=Bࡔ],bK΁Ѹ@+/wջ)ɒ>gC,8KPԃƹX@n?Rpj ! M3CB &[:Vj^-*]{Ή^薄 TnJ)tc9AlTu,T]%j.(X9d}b!?`hbFV#f+]Mi.χS0h+MHƶU+ AUqSpV嫿\93Mq;p X&SOl‡YLJZ ϰ^_M> %j'A%-[X@)x4 @c),Z@%6v\^'# N.+Oy'_g[-ҟ gQ Z`2s!dя0q|׻ErB>5}iWB8]lhһ7WJtC47|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?zQnz8d׷|k/8e<ڡ.0Kgzb.R eyHe"7p/Lwtcu&ԶM*U).չQŋf]Qro3FI eT|F>N}Oޓ9 bu#m돼6RcL$n Sj+]~qV.p˨3{qCǂ|߬NBL勸#v; :_c0eew#aZU}Fp\B;CJK 3Ex4 ڣkQ僰}*&і'`<a)9D^”}(LG1`1,J.fS"*?P&.9OQDU~hUBl93Na] >/̂s7a/#Ӽ1-:ɩk浤FsK6 fSw^ 锻¼DԻzhy`R^.R WTۡ삺&գ=ehpNCԙIMUʋk}E2_QQkyi1xJ{iD7jvjoi@yih>8~XnmRTۖqw֜h l;+"[;<IpX2{wwvC]|>/β 4&1EiO`+6vSzcbt֒0W޻mL|Dp҃=;)=Oxgt! P/!ъ/" xFl3ޣ~z{D CksA)2?/Li!4e6>Ch abXBpãb7q#f8F΍(ӝ ewOE|IZLʻ-5$acoeqpz0 ҋ &̑` CR3?{OY\yF(@gsHX!u6\ugM9K34['RF5٢9v``| s,;Zx9z9ݭ]MWy<-"Ѹ&Vvx8KYǴD&}4~| cbRtg3EW]!ztR[EeG?LB/~GXI8&7 g " H歐8̸ؠ&yW;mt[xYnf[೺ >$oεNt5bȣηYЛjźN=Z9Y`I'`0kt,j)<*?5LQ/u88lo A(~ tE.ȅYQjo0ƔK'eٖ^W}$&e< !n?v+$P}tq !16^\^5v 5-z'7Tf_XZd$D0_ W' R߽/g:%{r|Ωjtfkv芜/Ps:ؤ!`NY{ GXBbpl~{Qp+XY ؠՋ"%#w'' #0GR\(yL9i}h ^vn-0ɱ FV1;~lȆ=@m0rrVFEτj\tL4Ë>͡ X#-f( 0; )^O8f/P+,rP7aorՌqƪagSCQ(C-k+ }z# GЛ1Lo'I7}$\HqYQz0PI\o z. ѨUij4ˊ˾9|<.KKJf~U5LV忳 5C_4~q N_ ioǢ2D[lssܐLz?е7P!tWc؅@v K v' _Pd"ʂ C۰䆢u[Av ٴ70 ∺kT6n7MAZ,'hG)sZ ;b!L_#ezfd :t~w eV1Wr׆ݏST9'q'n*Trw~ i&>w!y!pvjث) !0@"G~#? tн|*Uݘ,ZWl~I1 rژyMyZBHqV a`>`2XϛV)~cvcu~9f'?4p)h'rHian>g&kEURA n%#DuZgW& nd ҖCcϐZJ88r4OXoφqa].о.xbhnDkE'@ hŐð/@=_7ԚM uoT#2dcR^v "Q#M q>i6P&BMWb0hmBbMtp,kTJ\T {^%~SCvz\S7>R]Btm%ApZ<80&CѤsUyO%n4q2轗\8N-- #IN͹: A}-o$o#jTw6+)/nYt^!i"6ZxOO݁`{6 I"]D&EO7`Hdv^Ҏ>:.x:_%͔ u'1Fq⸬Vvtw_-*) K^m ;`#Dd>\G go>ԋ]A6HSz0&0S ULQ2s ;a~*Tx8x@y^9OSWLC Kk ȠE4E,Ywi6/3jgKZUݽ9+ Bk%8_ ȈVs8 *"tMН%>N)D;u}搥~@~B"_mKZf ^Žb>SXAKUgc?8b5z]]M5zDp6F06}Z*Ԝ*dEITXï%X&𳾚D'>Gg*4V̰:EϤGՋ#4P&&d6etNErViHn)+EWBj"gΫpmHG|togۡS䷈@W`î)^ +QX[)ANjV%B:[yVRP3) J'k*J*>Z,t,b:0KR={if8o >,0NkcJF7 hjDG*0%"#A9OXwI:eko7܁i~) A݃#N["Bt0w . rxH׽ oQ;E6N;N囗,h:X$'R4gXܶ1+nULA/k386בn {>$7v7ƀRSmzXOJ'^>Y~߰b^9ۇo)aʫy%\Ӯ&ԅȰ8Vac,J9s!:k(1nryc$/A̖X@$s紳!8+ENRO6福E6f?.?Z}|[|P薀<<@2&!8E ǝA2 cD">JzK?V=_qBÀ{76C_Q#٣pa)S,?]rj6)dG28̕oF:6-,<^Gٔ:bYKPi*aȾ{Zme\̠4RB{Lƴ@T-bT} `ܛtE>N*N(f%ܜHKrnyUcIFkr#Tu=Dv\|U'ml MX'9T5%T։y`l:qפ.A%dн(\%k`oB5b2Nf􁮛 7;qF];1d"(ӂf >hHS29aכ1A2ј 1etO18z~iZɓopBsrI.0>i]BuD!D_2Mait+ϥۋ_~e΂;2=xl ړhy_‰`?63 $=j^y[Z?~ݏ>E_z:]osw~8UÊvjFXqpr|]kU*vӇH~GP:G܏C,HdB"PxaTǗGťIΑ1D(*I>HKR`(.gkH{xys"Sg>d#Eݵ@nnaTLkj48 ^iv;ՠTa"e~G݊f0By9Se.^_kiwm^狶sn;q mNz1:x5^SsSP%M*o7__ln6WU]T4\J;zUw`$tuF[mmiTҾT>ީm/xj+\`K.g$'k(pGهG=U0:Up+w. A{CbkcdT&y ]},p[m'w4_6~nv77NʗWʗY~q>7-/>?>̓yayf Z nȒ.rSUu(U}߂j߾%tO6nW}N&֏۫s˛"M< KA/imcH*TFG3;pS=>گ5;;8@$}2?>gW}b~>"VW?ɣ->FW-䟖WC|w1[.B#(W*Rk PiKl1ꢩ0}׹IvԇU])UTy'w; gU֦T|S &ǽt{vbh ,b\iE#-(i_d(G-`hj,E0(\4ǀNgMmϭf;9;kOOmZ; ז׉lADcD%VQ{I~sj` ^\ΘښHBhN㕤OEtznm4\Co:x12MRvB76}݄F3, ϦQ܊FDo^\y|aة۠zOk?KK2- ϑ,fB؇fQ }]!hVޭUzluɣ vg&1âj']xlwN[~rBUݞMQ?a^ E!t9*e׽ @Vc f uWrEI|qQUͥ#4C=̛CĨ80:cׁ3QGFs~kЃ:'.!6mĐ .J.1 ɝ@iSgtp+c&=M$[8OG_ MAdhvT.X{okIv4{y5dPrli`pp9Ļ:_L]L|iNe[<⠷W(R/CKO.>[} 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]yx-~ϑu$|v4:9|C\*^^RTA%7պq@[f0F0ֶVBU"k rQUˬg>)ڀzK@,Pfi*wwp盘l\`g:CDDl_Ā݂=`Nmٲm6.tJ:zML q`^Y:#ʎ\Iwpԋ`nGKR+!\Ӓ!*E%.ktNݥJl2$1hvۈ8`PrqQK=7y/ro|Uڌ&'-Q$3*Γ쩝ΉE  yRuLT c(ѴU8~lX2<}X걟u`OPK"1s`3ɸ<8-1JG\ t<6'!>(yjgK~g\H#K=`v^{$:)\DE}/@e%jJp$5wǝz Y^K*3nt6M8HeCsol D!̒"IM47Wl:̎z)CFd3pHD)Dh(-mCdOSU2K}?;0%q+(:W`h_/:{]it]8ʹ{BXEޛ]xWYd^f,޸I!Fݎ+rB5?s/фxlwCp>x'9/ʻf'Yb)㸛 4DWi@E [nu9>4TZ!у %;{.=#a}Y̾?P?C {],$ &NJESg(G`ނO.mrGF7P '߀'fBL?~@GjC|Zn1̰̂C v${/#u8a<߆S]DAHmVhX\M|Lx.Wk]ۯC{!)xOxcjn}-Y=k@95Ԥ̡~{;b8.b$9ԑ1ݤx Kt fOlK0pg+

zXva uE+*jd ќ RLrwP.2+pGWqæ@P脑̓Nu ^Gqrx geKuiZ'O< Ғ d$dWuHʵdt[5|#_4,J7O}[efZF*Я)ݟW;Ǥhk&/Oah"u4 ǟ6άu k-6EL#^gYwW& @jBI$.5=yZ{dd=~jvz QmϞD+GVA7$"+[5 /xU#$/ajD},&%؋fmڇ܏jdJ~ja21)A*m,rQ NI"zaO7 i/SǏׁ)2?ҟs^+WH6{a埤>yzgQ wMqWϳ@UE E̓+TǗB%2d^`b zq!;rk?/ШB i^^!z3(++d1{o׋OZW}6b/~6f/T)ޛ0{w{Y^uK^D fUz2н3{id{{ |%|/.TW}/\.&qN, ڝbNH24'a殹8jTlB?5%E}Z)vk=Iռ)k$|.e2y٩͋>* Amo*|C Y_w{L =4Sai姲.sBP1t~`Sm-{X넭p&ˇ (Oo;ؗ6184}`b/x/XOSM)VD6Jb<%7*:(KE ?Vkyɑ ij~˅W*׻#!rwbR.1UDO:vűFʡ҇hD`4)bP^μT>ǤsiF`o;h,֓WWA8G4;̣ l`M30ͥ6㕂 Gn,@k8eU(MQ 5dQh9HuYD77:o]Pټ+56bk;a~ k"@C -:z lN >0 A ?Bb{t^ԟ3ԳTJCn%ɺw{'ɺV./: BL܏?va_<v;d-C=+99-ˣ~#A|jjcV뮫+^=ti5m)~f~R?mܔwq:#gU_êR8˗M2F3V9=hj71ӧ\Jckh>ws}>ws}>ws}>ws}>ws}>w$$X