#!/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=2c2e504bae30d78966aef627dbaa76be # 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   i1 Mn,X08@+u.[2!$a⻼~f,%VIݙy| `KC L* )'bs'Ia)XrF#slÌ%ObH(%GCBZ9 4΄= QbBONhX. "4@Z VuYCcp?6FgzO Ԙ:_NFfLuh&`(&P2`L }~CZf֙>T><3@# pn5ě 4C=GPx[ChdI_1xbGƐn}Eh&P2LZ@@:@{$&F"FY݉J$(Lj`F$r ~ U Gnj5Pn"NS)bVNjeSzg:/L] N=P.;KSn/3g35 Ul&G {\2f9\և&X@+jO3-0Z+\$Z/+4jZ n%o%yYA.X#b딶tL1YXjf&y{{ZvDe/;_5w;?@;o! b=!=V=fkl7ԙXX2T]v#iŪ/1`up?sFn7r~߸go sgA?e>y| [3ED:1M)mDeϼy1IJb o*"Ml'_һ_cH BW"ր&js * t2Yw= Ûta#Q߀[;Vʱ b]%[Z7z'ʙV+C.O {ENЇBy|e\C3t)S`KY@twqLR[W#uEGd,jTe̐a/n` Ѥ]uE`-ieQr [.kE!Gwݛ g2 =&}򢺂Vaj/HYP-307Ԣhʶ`m5oOA P4]L n5ݹ4jΔ ?f:s|!;_wggG+Bg8 `RΚ5=t;Jp-R}A%ו2rY*X0LKxޖp̫5eAǕ2=RҟCwك^>y묯W/Z?RCy -)I9_o{ƙ :Un(3K4LzsJlXkkm0ĕQZcϯܿڨk?:\kd3ջ-]s?v=~ <;wc?ڗ ]N[Y64j:3TS VNZYNww$u셮=wnW6lw ն>[E7w&5T$J],ԙlGk%يCQl 8 J~n>Aikuv|4žA MYoS.`| Gmn">O/0 dAQOcoܗdSPgLr[(r#:nنmд$|ʥ9hn9pL¾i[F󹍯 ^V&@1GpO8rS[(*ĦLYc'-%*$abO·ÆQE|Ɲi6is7HZk\b[dDw*)pM$"D}7 Ͷ׾{ͮ`pt`+M¼w>~5qϓ&*,J8x{積`d^k"\ W>1xnFY"|ܯ[R&6h7 z/!#4\MmYf 8V*J'9htB6 +b@ Bci`:tNˈ;7 70Fkm}VjyT Qgf\hy|"p-O؋2W<"wa[sۗh!ϴTso#Ppsӽd>u09Wq{9)[AHIXK%}D px -|_Ͻ@oiW&*1w0'aGXΖpGTߌOu-N4 jUH%Xzbi+!^)}GZ$)eJ"I*XBd.Q\}azLD/}*Lh!cyԞ|(E,GR*CqEe#m]/ZjVc?̶5&[$pKXI&I͏sS9Ӥs)m"q >rޭy+Ӹ ^,rЭ`SoI=r4XzAzl?J2˜QQ|OY_x5v)X_f j^_SpU*HPyi¯Zm "#ϳ/vwtv? oµUf[_Ih*+!K*qo#Zph2[qt?}R0y.!"\ZFZ˗S9>HC=)zoc9_pN.-(;k@эM3y+w.*k7m*^ :3p#848@7Apbcs'Ӹl*] lj*nm# .bT( b(`[:ֆ[ rfo(YDO& 7l hfm:L` ޝ!Ñe7ZM4ii4j)F y _) @sX^rS3ȥDm w]ѩ6|SZP6$,̔F?rB酜Ƴ95ӕ.d_OO!A*C99nb帟ÛWx2죃'\NhP3 BҚԨtccޕݫ4QW''m 0%f !0 6MSC Q%;rf 3h.$%!(04$#eڹ><)#,Z9-Uy$ݡ fm$RWQވM"A(c +f㸚hEIrqGS+|DBNث- }Mp ȈZwh@8_Nf4hb'vXXE2N7-Nbsk)aY]w#mX\rG=&+\6.W46fJyP)fE59XgP|R[gVES>-u mܦf|[`xD ifކc4tD)``|Ĥ;w{oVpae 6Ѳ- KIMN-ؒ(1l*]Ϲﻂs})JΚb;@9Tu.Ď9ki<#&&QHDpul6^Kpc~ X2һ> Efv8Yn2@"VM.a!22l %t 8΢͓⢬ßhtP.V g!f? BiCc^ 5NӲ5EJ㩶9rck `X뷍L9a^7qzYh{ siiFaBH2Zު'v* >;A&חݨnr Ao'[Agg~WѰ67\M!)N.ͭu`5š؛&.7#tn̾NGEU+X"e>e]8& āQP!C羚',Q+0ž֔SC1$ qP;|N*HF~#_/$sؐ3p\eĒZnlXᅠ8swr X OmQBI Mh+9;(ѡV@e;oqeKzɡwᏨOԅ ώ٨{CDWB>yv:mÂu',2*rLGA?nzRZ,e/٩32q7n5{ &h b ق˓hwSh}ۉ8TPWd6 aHauNi%)n+$̼Dt%EuƲ -l)EzkmZ4 Ɲ_2U$#8n;$,LZGm 8n^G$ȣ_5O?¬gB)7GoPۏiMJqӛ O!X7GoOs6]| _y~R-/[Mxt;|xóߨ5om;eOUIB a'Qw] ௟xD\G+f~u⍏HP1ri7Opzʥ4V;OhkXA>Ɠ!U0zb,t2w M]QfԬnB9mڸoo><]>ftPY'p XOK[%x:?Le`@׾>6f/ܧ(xx9;~W~ՃGnk!""Z@+=%H@=bX{I[Ӝ6H? x>F4Mh iL0CJ]"X-ڴ f,<8nf-FpvR:hM知֖Ķ -˭(wqUfzq`2G z9H IZ4VA>ZmVt6nxt+m]ߺ|EԀpW:n_lo~|:mpFG+;]З Ȭw=D䰭 5Hc>Q_҉Ԝj:`@t{Pմ/>KyɉC@o%Dqcu(Hȟ ꪏS) m-VnQoI-~*\Ndguum2\pވ6]6-f5q eU̴}2xx.V-*FJʞUT/A4v[W?_xyh\e=/{w0pf"7ߨwYj ;6h'(iK6Y?„dӑ^=+on#9wmMO״QRQ h+wq7 g{(FA c[ڂ^e~5ʆ))ELps֦?W)uLw1W:4m*߀O#p=CsTVu8 XFSZ+xhxB2(XYb-'vT3P%q/hO`-P ϊB_d*\ۈ9;0SBgR QMGezw ^O;:u?=xs&?<+LjB"`|փ#wmi` ПU11pT+)rHdݰꐠDf,@vȿfpEÛÍ)U- sI/pjR*)o:nny T<aW.P2f`ZE U8R:}YHOdKXǴs?6uUkMu (%c-< R Оk!o(C*z!FcU'_qt!KT`2P|0oT/Fʓ$#ιFZ^n_bꎯ.&7(F,K?LtA^Z25/b1tFi l~uLfUa`O/l`^A q|*>و\1OfoX1b쓢Y2Ci֛U=])47@<ȹFƕwEHmh8m܅T:$Fu}3oTrC'ճF.Ѓh8hG!7覙>)?E VÛ166ccUL%\omSsRgcXXi.)p1rU# ޓ" XAQZҼ%w7fcѹ \JDw\r&k]ɺn[E vf(5vM P)Kꌴ mw7#IF`\4 d݆WլD&@3|(a"a _ R\S&zx} ק;#?$ ی6`oaꅤ[<]b:IA jr-M3[)|di):d#s253D)t\PXh k3JHDUݱw ]aM\_ $]{^&7&h' \k9_R'x6eZ:@,AdNJɆ]iÏk8A z^֫@RtUwBVb{"4fV^-IwPB倈Y Gпeۇ1hX#U~cT5Z/@)[:?P$/Z.~x a ;th =@.΢iP{)zo4(;#d`ѫkMdZ0$E$A7-n#|$❾%;[^-ګQ.cp$2)ܤhy(_^K|ъwl=)#N RO`SIBH"g)Qg3$F—ܑPTg-~V5=W?-3s׋U_e]_AS6M3ύJ? J-W6֕V*Y}5..-mxe߭o@{ E\͍Uw1-m<3&񏏿-L/h)r-=[tgmi;ՒWmi{sukK?>&X!nېV F$ =N4d1pp'S#WkŠ$I|xqS}@$%+-xP Y:Enj?u酑e Q@"c314(rT. W5 AD gKevقЇGGC8rA=0JFCwQiʷO^΂} L\ b maUdzPd T ,]bc!P@$.ҽF黤L(:SGSc[H|j2N)f pKa-zKT8? FGLL, ]#HRNP ':({ziz!=^zfIOCԜrN|os]3В ߆{A><;ջxmݙ}c>C}UgsN$gsurya KG꣉C1/9&c|"Xe,0^C&@s(ZSP\G TR•ϋ[ũ5N1T>Z+IÑҢi":obyaANj~;f(a '"? i'Ù&7Tu#]RtK$lgLc;V|y'=>(d=ť^'F.XB_(? 'e :Ye8 |{@>)znS ; L)BoOFuOݹʘNFv;aΨ_#Jɨ@#ns|d93`ʏ c}Dה~vSH4>b (T۫5s/E?,of)AؾV򕅣=vUm Qb,AscZ{D{Q|# 7T\M,̷i-*3챽MϾMc?'F'Ox1U\J_.?byX,l]X,ȳs2w_]Bj[j.}OĮzt`G]ɪP?6qWM p(,88 4Qu.-EgKe.JWjA\R좍j-&aF-;`[涒,?{|{\uw.&B:{[?_PՏ3@pOrB7bxy[i q!^*O$ WWgsQ,qހ~ŷL*.-oa5YK^* lK"*x+s7 w~bg^?~iG I3Ԕ%睡6S:iP#5Vs߲zeղ9%.9߫fT6`?&kbKG [輺B;5Ps6;>`si+]2XCĽ=c4Z4.H?lV%rԀ^9@nn\ZQCbCxIt?_E}ܲ7)@`Ō@cG u q2 Z(3t7ksҮN^o7t޼>iGk>:>:uZH.rܮI%尛L苂[T/j(=Rt;Y\CL[RymszYjCGY$&6gy=_rzmy\/Žſ9>*w28.N&xG74(- {'t49~6~']3*"uȀԄ"?<2T*;Y_y2 "hOH ƩRs{d"Τ8gkaHg θk'^6V A V9%~>=p xE'ZIgɡ\q7nv20 b^6VV-s .Tyw7P(*9+#3 j[|ra|r WWx}ijĴR:.>cr7v8kX5Sύu5<$yr3tPNQ)L4NI"7}ִvJ=='ox[n[Sd~9'~w<U !2!}VP&uK *V&ِDO&ڣѹU%E(]e(W#˧Op~Z0'8%jJRc۫餪)8L+1\_.ױP.jB=`D*|a_ q|hܭT/ůiȅ7k'Gꭼ$xc*+,-[XKE{<?)2IHU̓G-s{C|( \kcNOͥ:Uur1`~?䖝d|IP<-Xx!OPL>q۠m&ӟ8(4GCS?b]t"9rjM&Dtg~/pФ2m,]z݄Ǡ>/o|>10Y+.g "Pr`3Xإ=i<Fp/99P6tAl jCO I03Vo4$oS# C- F]SG:t3Q{JD"d3^Q~cX9{SȹXU/w]? Y@HBگrMo6jZfy٪0ʛ}f!IuڬVC0Y]īf~EVǷaZUxu 3ty'fSЄk9Űm3FuT{sPS]{s7kEUmԛX;B0.tl)+Uu]-au)4e{oe+B_UF=ʘRZpۥds_h^kBdo9R4xѩ}u2;&D*QJC|\ݼcs F|iJN[1 E D潊aΘ h,^ = 4R#[oqx%$5)fW?"E!KnD,EOhNNRЌID6nT>"{0 ;ubdo1ϟ+%#YrKb|~~OP }η?\*_Ut6O7ƽ|Zp'ECfzbЍ$mM2IeKa3iCL奂5#{òE+䦒$< Źl Q&e"g /X0tËmʋT> V9eV1Gq6m+ i0`ifI0ᤳDD7"R>%`Cz2QtfKw91SrtSpIGcM?J\X ,](=eDg BWqY'!msM>\MOѝݸTU*3\tF%q䌯2*GJW˼ya oRxCӝqiġ{E(ώPOS_%VvcL'^G,Z%<Uނ37"tt.hQ6èibc6yrW9חhB<5mCi OĜ!&f_$6e4D# W.*ԕH**H v;9).e٥{6ژŐbo8,V£j=O?9+/屷4ܜ?rx1DbVIZZ&pq͚M@:'Vc@StD@=Jpwc!A$ m3;?c$.5+N-ܜ jY ,*:pmI 3N0ɠ22ysKnP"I,]"TEZIgkhD/`A9SP33<޶ZP~ଭP.xOx44[$ >٫Q\+Bo4 ݑ27e*5i3<WuGL {8(#e&`Ia  Joe_^U(4 7Ñ0W.RtԂsS`۴xJ1R 7 $(X|-ߋQvNj<=d* oZ%`r7&s9 c(*ed彘B \d'w ;dDBpoF kh(ZVs2OZ} $)%9(PXRH8 Nqh ]?zW=OwڛikmmBTQ5ZMH8[DIY֯HJjf&b(*8, H%*^1N#k`RH$:39Cə-on!%p=Yԑ))fB)sFdв]R;=6vV IE;53BhX&_R!' SUpZqG.<P+UFdW)A&gַ׶/E[ۛƳn|sml?(L*K2Yf0H N {\'yR]wf|GH^$%[YtȹXziՎigLR:?bHGf9 YE&=CՎ6J|w`N;W+H ߡ;Bp1ax@Q-Zǰރq?q4C l>yY-wu0p8 G5z_$RF:o/ug[^lngk)+ov76:϶/nw֟w6ΟmEsxЍg϶^lwaxoǝ[OX??!V`4KܔZCX$ Ɍ,{ELP-vv% fLyG8%QԂdRT~RK ȳȢD~8 Y_fΕ-`-{ݗϷ[[ky|VW|&^S|(9^v96N'o(0\~K/̡28]ӿGRmG~PzUoo6넭In bh'SNXf b_zxi@rAN(70יZ8m3S{H)v僀"Ѱh #Vxoyмj4BFnC|%JD[3ĵ" ?b%g*IRVk;\*NNCN%"q;xp0hPkY <87 P)lf\Nx?D: k {L|19J` va DR b8{Ցݳ0jzzMЇn4$qSm4 i.C_86[f𻜴A4ՉF7~s&r^fv0Ķ&t>v W46`@dr8O:iN6Ѱ'!8Jn~T^`J(~)E0(} tZDI3A $fxP"G\wrZs.ZyX5|jEASdKZ{H{ aF:SVS=j 넘A5% %+Aw)0r;#tN4ǒ>2"j?jGJ&n]muv3f|DŽQCPResJVmeʊˤHH|>4annxR\FvmW}X'LeگgQ1vѽ_z}2I-P4iI?1/jc6 "_?7ɓrk[|e  W܆۹Zz:KHQy<4DoѤKg38E6K)L7x@"68Siy i\28']L=zo:h .Ē%LYThU͚ S?q@=f^ElH]FYtMlXta[W1kոD= Q¹" Pd`91^%:g/dm%X%?ޮMY&h0&V`,z.#:ɎsF x1GjnGI1 N[uUƈOўJ0ؕq{Ψ:pyQ_Q܇aGBO]LI2~|04|!,\=etEP;|5Iv#Ru>Ki2J8[#inWH-J1IY r}+F,S_FɌ b0r$NΌ4s}?&вi[ awYb$$qt͠t BlU&_Ʉh];WcJ;6U",ySQ}T<| ?RO,neɋzl2uDZ~NuDʕ 7{=Ozy1A2UmjKw!;ѝsÉXt,:lNI,uH^`&y^LyOt\gul +q~b7uh6^tExسܱ {xX8چ6hE6G73xz>(Isr,q9'Z|[mmך{ ˳}*~y>馯+>8]u[ow{@m2龇MqáCeoa{?o|r=Bl9k|8izӮ6?8+$WAKb/C7'%|72 }YiH`B iq'^I2&Y`zӈyY@,PHۢT`_cpḵZ@3~?^Pm̵ $47#a Ej&>?M)A̿sxw z@ 4!usPL%tYF\ g !DE6*TIP]O* [0Zw2I?"~;uo*i7Z򌓎+Ka(v:Vy[+Yr_.[9aٖL+[3%ڱL CYg(}E,~jF x\`Mhع)Q-*t ޹:zϫGaar ;Zl@m\4O8CcH.pOҩQ;Av"YTx__'#]xN!c S x1~ŭ_A[hϓA2vцNN_}_ $+)>^do>!T);"OjpЌb /3g!V`n5R$8XH/]~X..džd׬^_>&ٮ{5=vxx21O蠣r9tEgG(XcȒ0Lä$N·EÑv) c\p^:h O i=!VFF Zczz:vFyL/zz*)UX_&*:<^j Cc~H@񠇴D8 ^T: LI粇^;Cr\ExT2pB q4n*\GQ yԔ|A!|zoxz>70.j TB柝(W`PJ=Pwu&gq*_rgM;Y^Ijߍ'fƛ9>+qWMdDt;9gɛ0mǟpVc m멯o%-8k*7g~ /Ռ8Vvp-&^ 2D_ ?7jR_ۛ_%C ma濁y<3HqoD!78U=B|-=kFO烩-TKQ+ KbtVbwɵ=~ƧrO2G Pͽh93s67?yBmm ?XHuTID _ |ܫzVlCd쵴zL kPamk؀˶z­.^_%X*ad`gTN!4b}2c&1ІtwÀ} G*Ѩy&\+WuK~#g?ϛ㠼jz!0b7 {%-^1hnu(aƙuj$rڨZ@+oQq*SUS\sac  hGͰSz0$ (f]šp⽵FɕA!q=ML}`|VϧZm_oEW!I_'LE(_v%w-} )KN@Pc2\!3`11_¤Fvpׅ? 9앩h]Rεvh,, MҤR "1X%w-3籜1S'AƮ]hg7kzOmxgd^k#xp]zJL`R^dߦt^Qen *$7l\A#w)I2l.s U[D\\) -zV8Ҳ57d|=r3 /fJJ c$e,=ޝ<}݋!]|4|^eD뢩G$v4Wޏ(z{*uu΢6<)qSMlIW ÙiI@Yy{tRхx7,C)~ XV"b˥l':iD9"#ܮ)9>T^*6mbڻ1٠_< ex!/CSr_J GH7BpnEl5 Ao޹PGn}i:$F܎Hs-a<05 {xtD. 4H!8 S,PfAs; n8/0޸I}֖xnKk Ԗ 9oʟh-nz$Q@D+({jtqI/@8,kSNNH$@i5=@BDbO$R!%׬*Gv BU W}!}t.霵C _"An*N {)vNHQw[!u&"™ԉM]{+0+ ]*= 8" 3zX )cC*~WzIq !1H^^5v"5n 049hlZjDH*;#|1wnǻ9%Q?ufK4wNl XJeeXօ;9dIQ\=F)E;9apM9MHP2C#C$Vι6WkТ=Mw1b j4 @(:v\ڐ/@"Ya7_!D>2q>CH*y-!Ks}@v@ُ@vM@CN\yb$oS꫾u8Uh1t^@s9D6+G.iuI"q4@ϑ==af8Q#T{+LYdP S#i``$orUNqƪqoY]>"fX!=` LfN I 0L` |cOУY?}E!~IM\Ʀ:zk+IMXD"˲K !O}dUpVx۱s5<i b2Uņ܃8vpIf9t㟂cpZ7Pӡ+EU_|.M(&&6OdA~EOemB{ɇ6wÒZDlODnXMS7rjF+ Q :H]N=32=p֙'ӲK {ImÒ`{U-rZNo\y5~ i!>w!9`j'$&(*87O?^%*Yd/_#I11ײt%}N-=򬜋\HqV :|y-LU:إaXsP~9pN,h#e]= Ґ m/CJ;O70EӠuɆ/ng'N.r@[!1ʵϘZJ88RrO<]9ƅiXwt@޻<. UCnu Â-Za~ rع53^ӝ ՂoT]b dfR^v "Q#K:qز?vɚLz(Z!0_1~hNm̿DžzĶ ;1+lyLRy=8>R]<8H߉;Lᴮyq>7P=ِJWۊ0kES0R{+ߩUУQǨIr$gZxvHt;QWx6c6!u2pqy QG^:¡t >Wr/(Y HxBaG[GĞg(-S꺯gd3/g3c 10Bէt& fKh2}f WusNYQ292GDߊ.H;Q$ٰ'1z^i.c}CC8҆, TeCmsL fwg{6.YWEqdШpjwk3rq &NQP⸫ ΈsX *|K؝19%_OG_j:L_R$2muk7f bK C8uZ߿+ [E|(4ӏM(f[(A8ЕL_%> h҃2LN4 6}[*Ԝ*dUI4Xï%XMg͚&>Gg*4V̰6ǒUjO'xBXQLLwt}zAJj2P U~Q~;p̩m[D La*x(GV^)JLyu/֠طBR(ڝL67T]T|t tE]N5,T,9Qhi}5:;$NwS%kv݁i~9 EÓ'缈0d&vOO 0fO]v芍S4"Yu,ܓ=bN UZtyFVtF!ܽ#0aj&^$-Id`֝|6}Q./)W~lOiEC+W+iwrofQއnY\@1Op<#yI9]?Tk9N{sORO/T~WnhG ?onml77ϯad)xN'Q++ B-l`1lhk$ǹJ𠺿uAl7R~KoA6>8?oū_+ iItD 1J?4R!Q`0~< \RIvdU]Q"}Ԡ0̙Jq܁Q߼9ߜV$(Uq))(XׅxLh9G'7K8tF/al;W-SNgoT,)jC A%s φH)X^_?"a60#D:$ZړއZ wz *qى@ }jB;'4'Y1(h$NTl ,c›kXhhגZU{1wPr(d8\/~w5v*Hqxt47A(]oIʯ@e6{,[7mQ0)P3' wiDjZh{K r#r=hb?XxZc0N9d`6To5])j i^p2yabn<JKū0%EfmHn[9Snbo`&|ǐAXu_)!{p8aekKuѰLKȀG2oD7H6oG} S:/cܘ K՜"oNt+srZ1Gp+E-Ur4foI U*"r8Ma~(2^te}GUn1 )%+Rjc|\1T{׳qǕ)6wV |٭+?1H/):3Asܧj r ևZ]QpR}K>Z4"NxSX_*wׯ?b^-@ٳgOOgIן:~6nls++.ͦk'#9GX8©P-osC=QLT5zxsZ+"_qtnlmg#κngoc+<JȰ(!h]xBmm_բOaoןgjNdl =6dkVo(<3/]*wy ^ذ/ԖzaӾڌVOJL0Gcnx[k|z:@grrZy8HBtYyVOdc2t-߇L)oԎNae " (9jHN0ĉ&6yL$C6MKadN?'5bpkt90rJMeP~zn8V׏HAZ},<~_0eE01OqmBŹUV9MHUC6pnhՍ`a9: 9>( ћ7I}ݛKc>8ghEA2PŰr}E`0 8;ݞmoa]gq7MzpH*=DwtO &.esT/;9!ha0O{IJ5w" 8Ƕt>wrar'd Hp`"da'gB/ :偛2(iQWo M vAfv_93_l5NZ 7u΍q}P;N.2vyW'LFbdsqJOfC;@d~E(ȵ6a 偽5D\Vdn20-hy'`!ME.z!M~3/z ΰk F qr9ҹ!zGub0b{K7~*uəؓ\ *t(;-Ae-0\)Nn(0Z ?oVkV~z(jax lJbM_]럞?^"?ŅKSiC״ii.> ^KJ ztLq'C ׸1$Sܙ&;\M&TcMMtIKrmf<9us B?(:x4sy nCږ4أHNq&1"$͊k!^vS܅ h$!J4ɹ?<.o%Nf ?!=L0"a0 qTh2ю>Wj$_Dseԋػ7_1s(aޓ'vJ LG22oWQs~Ca30{o `72ݹJe+5 d4'2sS2?].0:v">}ϲl{]En*5j0733W3~-u)Ep̆'!hː!-+2[ s ZHZ %څI+hL;ciͪ0UŐ2OHe,f&OE،!Lk֊-j%@wpI:x&~swg[[G?qJ/^ggO~7Vgd7\02M{ {t^^H@)+TG#lf$/%٤1 a훢XJHu";Q'yxt>6(H x#IT T uKtF8'I6 5='TB׉?]#NARhЙhw&`Bw% H/*ZqS{ ٙ7j$WFH 4]Lo##t ZR2`#s;.4o޶ZG2?_MeڄwWU&^OP{';jk͒_?zSRPPAނ5}QV[ *AZ|]oakPOUTANN'͚כ=VU{zp9~ zU~6FCݯ7j{-k&xPz': sRUJRkS(?!8nXF;<}l[zs|O3ެ5j]upܤI;mְ+VJ`Π:A64{u|' = /4iԎb Zz84cU&^--DXQA 5y_o֊l&SӰS8. 굿KZUձR6B.ۆnL<LOU9VmSLeUVy^ }N_VW~rg**w_|C(Y+?1 U=4SA\=t`Q~)ҋ/07AVߔ'*;IpnԣMPjZUFJ ~6 >tWʈ2ɔB"$US}%T<+ 굅*1p3~wCP0ئޞqW>CwI|xF+8<dΊ?N^mwq?BK-jv1?K:s95(UE8B}W iD\F3s5ZV\4]\Ax#?D0 wZ:Z[Ġ罒x$+J⽒?JID22 =fEUƈQ xhJO ^%I@ηS룐AHεaJfϏ+k+꧟>8oyb92Sf6f!J$8AG󑒽%R7b廓Ly帋@$V [t*a>-;*afI!d1sUԾ\Lf)?s?s?s?s?s?_V!X