#!/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=e329638d3e3fa11becd1a204014cbfbc # 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 tcծFf!4Qg-hOba:z u@VRfTQ4ۭdg _6#kb87۳su; ;`JL~ i߷x8y 2*_JyOըj&l˜qv'ΜtmӀ|߫xMk ΣjJ))w'CXߋ>GcKh[;zO!g~tT9ى*_ O- 5d.K]o{64'K+4]G*i~Q&qp@*l]i)38eeܱ|.x`d[yH+/-9g%*-/D<)ekp9̩ r33+=%Vي8Iؙ:QDґLpGzh&f33b־E<@,eM |^qaQnE{Hh0)q@ gd0[aM3x8E2`s#V~+9I,6zL;,p@v7:(5M<^#M6)A{Z1xL>lT+RuJ3^?g>3yO#m V*.ı7U'ȅmeH0z'%פHZ$[r'|ɹDGOI^L9/M8TlшZXA| Xs :=EOܱI~NjHj[mOEwa`\yBq##$3Tt" Țo҇ikztʕMH+zI;JvQ,= #R$. ċĜ':*,}1ܨ\$# u.P#'D`8u(̏˰ig*_NXY)w EM^ew]9cvFg7HFIG_6,zc=g{fyeLxS{8 |mɹl:>gg@ϣn 9C<F̏!tBQBRuƀ/Wa@:dg'MRounHww,$#8J6$D A]_1_7WAA3[^?6?6B26XĉAwht0)ebn(a>e<"pWאK0g^"ˋ."K8ݎ79!ƊZLN:^}3۸m0V {+oȥD-զvBBKJj`a2U"O :ׂr2)E>G{. )˰.F5DZKg}JKP,)_)yxΨ+IRD4ikx!Hw7 )c)3߂+ -0=?2.j:$zH ;ڣTµ!k.!)Z׻q;TFc`&tF5ғx6[ W$ kAo'S̩Sx'6^ce< ɵW:-sp3i")%*UH6IM 'JKlijėKƥ1cwI(cnfsx66w r,2z,a )!`b UT掽<4EULPcʪm.Q뻊}YDPs^Ô^A1#2cNp(wʘuBG`phk?~˻:?sx+0KoxIk&דI~к.M&ZYKh]A=kוEڋTN;vTG{̻z~u[:~Iw%CNpFWZ0 JWw8']OH6xUw>{Pkcl{6/J!0UpU<|K>d? @8Bʶ0>31,hLt]^0>p~\[4 ownDbLtlLoIh;:‧wY[`N'gt @äw T8(\MlN8VO0uW(%:1l+3Vzې˔[X!hgA{W<LX9Вu;E=i5pPrjH) ZZ昆O&M4>kgeCJv Rao;7uΎUe!hJᠥtpаo'31Xx^gFxj[y9_ X Kn 0 8BxDGY'+:b^JIxFdEi-}' ?.^Xn+ laӋV=0V}s 0r;+gyjl﹗ʟP &-)Tn/umjSQݔ l y1BßH/T3{Wv!] m_.C'Rc2UI>3Hwp.SaIl0PfxԆD6p-7 '.,j8C z%B?;[w^k^f,w H&4 ڍO&](͒U/ouKSKٕE+3żuz'/O~&[RLogQPj1Z;p!=fDW>ai5%[3- L m)]d45lTS]V`-縍d-P[@1"/@ *Bx[\.;#{nHsrNvba$> 2+_"(  >z]*ҿ1-0`{T3@0 h!"~I#o=EU} (,F!(xիd7lh  F6b~kYGb)0NB](fB"^h@J0tC"nQ"ayjRѪ+m&z 9hQ_vrO*0y4,㭴RZ_8Js+HdSO6jPP@fz{ի7bW5xT;\&H}$-KN :N1x*2_Q Fd~:~x>`R^d Jw?m^!DKA3蝱w4#L"$Q#MuA$$Sd '$"B"iK{x "z)o%L1e@PTշDdq%8Qht^rh87Ό~xx<{[; ʲ{Hc}W? %0kĈ36Eɺ7aHmt(;+šę?#SdF%mD oğU$' Li5N XnEiϖ?Rf.TJäs <{_zP;ܭ7P3eWiOG!{b>7Œ>۟o 62B4kle.%gl.9f, %C,JJ7:gN]Rx CZ-ex)bj#j}9zm N"%ڕP ё{mxcyK=j=_حn:n⫥T5)5 9he`/1dYS/ F+crz&\LAvu[bY;A1-&I7}kjWQGzw?(\\K iϑ9;9858Pha[23?e[<`MX8+O;(M}+fLU.|C5Pn˭ mí +SVV!kA \v$)rLX/AA !); Xz1ngn#^nm;MRSᖒKq`] Ǩd 5_j  J;㏐WЄd7L-R*E'~'G)wC`ro&RP! @^m8Lj]1 uJi%)n+sIf9&IQbc,3YHmaK.һ]ClТVo")qEh1,8""y9㫦G^H]i}7FSiR&Sd,+H}%i5w.ܻ|zIo׽Ȍ qx[[~t->k:>"!Qk u :%L~jǭ ʂM!(-GkȥțO8B6 *or<>%ܮ1Js}}DI UW4Ftq侯~=$4 cWZދcUk mC``՜߁5t'o7_ |EfDR. t`EOIe.bΗwp "؄ r;Zg`^:hX;ܫSUGP]B"nmB>X8S;IO 5bSqfKp"\E^}dɌFkI[]ytXyEuIAzZW^0 $USo5ԪmN-51H~F'&m&֤ K#=P)@aVqT&OL(EwN^1Fq74Fpvmi1HcY_6:qRQUg,L ^BIaR)JGR;suNz р`jX G"D:.pg"3 wn3 [_`F6 Xy3 ]{fAOB#7T6I&U< Uv5KJw(gKL˜M }%22B\mGWゥLr4V 6:kCʤj%JyLۃ'4-N2dgN61x…=d~E# jC/uLvy&vHaIȱ+T,.Jl=tJ39 ] #>6oqSmۭQ:boʯ}[PS_& ↥5 6Ŵv{4nܟlpz:G^8 ,EI_@ռ+BqOm(;s_Y<*LaBt$[{ꯁe=)736bqec""Yd;7 OyBe? a]n?G5χ\aR J]K)< w*HLo YL=]bn=A,c,5Z D$5:ޫַC %dMM!=faE(m̛=gɸY]\}'O i_9i>^d07[ImҀ5eu<8As \L/>48TkcJժ8Z3:YQiN\U߁tE2߆^Fl0VJ)⿌.( P$4%%)eTA֨D+F92V{2aNW>sM׀>ٹiֿN&-Ж?$X: =hRfˈՌ`VCYx dLЖIv/RBiFÝ 46NJ4*q^h"x _V@7vJ}W;q€H * bj+a;oݨe{#[Ȫ Z*1f\ q=Igj{Lrf!H22 "&j*W~?S&e%a1<|1MY-,؂ЇW{w{_+ Q3)DGaX <b&CyΥ T~h+<<{#$+!fbb*O^E\5 +?)ӨĮ-6觴Y:˴ގ0瓪7\?+mzY;<{֡u*5_y'۶뷽:;N v?mXą)DžT)ocF*YM]435_|g*,7T6:Oe~2Jf: ow;O{t!7r|d@MueK$u֯:z`p1<uR4bv -:No1NIw1H0@wtxN&n@}*n`R|kN yV3>f883;EG.A%ƿ uw~Hfڻ :ؑ/=ۺ3-cY]pz&=`[{ /y #N78_CV_7p34r-T\M,& lYb3l(}'arf}`^klq\$heTa=4ESQi9$} i/ '!|h~JN[`9nl+e!xdB"B%FY)*QQΣP̙UJ?~{&\'BL~`?Fa>\ w H=N% s~|i02!f$-qd%5LΚ(v$`K*sرe91uOFBvVs% kI0#™#{I Yfrg݂CwqaƢ-4ss7~n6JLͶz13)!ZaUYM^H+wYYdS|Mm$@"boA+'UIH^Xuhc-_Wk6RSȱ29Т?HqND %{Pdf!cfetVϜ_4p'O6 W< Ju8MX; St],T |2ik!fq{^PSñ%\sŐTυ "F̴2fH^_h!&qBW.ϡOiX$4Q|xzq5.ІH/R~6#^O\my%0ͦ{Ik 0W6Yش?x$?PnmRnii9=W05< ΌFaZ80|xF1R+K(^S$3ARȀj+̸d0I Zע s3LwO3f֍[&D(JAE]:ҟ;2}A(n Eb« q-K4 +YX ×=rw*rdF|xuzŹ)t³obmE}4uYG*ƒ&b:S;v$f=11m _u\.~-m8Xcr1FR-WV,dwOc͔k ̨ N'=eh yMs ;-i+o Ԕd:~N%0EQ:{[vY Z6})Rx)c3mDL:?V-wsQ)>1ݰ&xΫ+ASS Uu6L7> BIE9Ch^Qh J),}Ύ VJTzdf (0XSh֤$[PFg:")CmO;i"]7 ]}4JT^ϠU-rYc|NN,”]{2e*)p#@8(0 ߉F  ۪;6FQ K9YP2ѐ ~݃OЫS|#Ef6_9zG Q/\ p;5RBu(f>CIܳ^ R%l$z|uq^#뗌 dIBk6aTS'nj}PZdt:Z|ͬ(眴P2 $Sa|6%OqA+Fd̯H ƩRsA2LgR50{lB3܇&P.F'j]& NFzjs9h||&Νa!oRkoXC:Y(@IL_wx"P18ҋt1/`Tk/{•KYuKSs&冗ҡ(IC^O#Ьgx/x(z Rsy4.PKnJEf0h^$%&)z9*tOt"^H\n #HMc1 |.q`h* "! ZZp, 087K$''q.00Ё[τBkxHBbh(v& l<7}𖵎vJƀ^7sb%f2sxG ]1rN|G<U !2jW ƷZtK V&YX&ڡѩU91Jd42?,eZEh9K+)0%jJRm +tPUUa/WEΌac\Bq4C m T9ۧ!}z0~qV3WӴOBZ GPe+/} f)qKV/Pl= Xg@(+!P@nIG:=1AHeKʓ|aIƗęV gaB1YnL\Y#Lܡ)|.E:BP9ttMv&xtfN? >.oݐ}m}5zM>'%25!{% = BOGI '||) >g\' jjyZu{7L|_Wamw^ۯ_Ju?ﵟj{R1>>oO˝3~P/U%y_vF9f'.%)mNc$ A8}UθW ,)gutM,T@b+Iq ݧwwJ/(Uh.KU'P :ih6\M8c0&5kz*5J}TRx҇" `P0I%uJCCA9^~v6T\9q2jEdCY3v9HԅW!B7*@jq4rȢ DJ\@0}kUf/Tu-oגZU{VTa+TSq?M^;3Fx$_"eSA<)K^|qI:@!5^LW(,_K: n6F КGzdmT<;,WH7ϙI2A枠~ap'؞HM 06pIaU6u/@\6 ~mTpj% @͔kB%'%˺RrBOBIP]94ôbJͪ[\.fV;6]fj="D);Ov-":edjKuA<%N)lHj&LF:xcS84p^"16 J"t+9=w/jʭ { Ovi-̤VZ';\'bq_G1%CIn0Kx 5$H1u7^S)؈ii8N]t.K2k=7S)bo0[vkES\6nKwd:ꈅA7NJ] vb('"4H0s )U΢N¾"RR&_ =61c]&3kBj9qZ)i#\u{:}I-q v׸a $e,*xTŌ͸0{Hy֘˳~$ٙ#VШ9 w|MuѺoHYvc36{/>Zfݍ o0Jז] GpfJq8g'TDɭqi|r,B6 CjOg?ϣ;Ϸ|hsq6~ޡQrNnϽYsF" NEٍNMQo:܉(ğ)>>\>ViȴDG^w/_7 ȫ{V- |FDD it4HGCq b!=EqQ A\ʌםWɲ:LrTSƠȂP4F8j9a jX$Q$0ѓs4/m # /.3$SϳbДQHOO(_od؞PR~n2^5$&.ވ{cH{R|b@gsMq낂.l|pPG.c#΢4Qω|(g TX<3E8jXZc\u7l a? yTr #_(Ƞum÷%>@"èppQc'^Lmlӫ,kwip {2g,)eۃxz] <*BtK{m_# ,E}Vm2j_w7,oh<uN>WDH-X&_/Ce~qB}vk_֏܇?6z /BА-G_#! ÉhLM/v`|YCPuR' #L)@uϝ3rmfRSї$Zϣ~+lhƪok2iNl54KF HIUuM6 ~.t~d&ElY[BY-?_Xh)OL>\@~x G=<㐇'j 7Atja!X [ 'Ax3p L%ϢֆwFkhpDW\myq ۋs6&HT ) $m*ɨy ű!=$&k5|#A 6E" B*?>^(gSDP-0E\2̀\ ɔ80"vϫ^tDU*(KIl0$m!a'^F׉:|GJe['SHܤLv`Lu,**Sy|}bE'fC-k12V(xp!Q0c*:%q?za:@ Q$]2\0.:IψEV;>LM<+_+FJ=vHod QmQCl>ZnAQ.Ioa7t)wBj19I^(PQOS9C)SUveR|P;b8{b]Y?\&%5!6p؆4ϜuyOGM`Mlu┉ a°1\mC +G Wȴ)"eJdSu!` g%@5Ub*Y) 0;;J85U@C2ngQZDI3+A ĵf`hpW|)7-5RÂ/p?F9<#O/;lrcIȟ Ɂm(օ/>z(qkt3)=b'a, N;-+y#!qI&'0i$7tvN?{D\Ifmf%u23}2I5PxhOc0w^gӂ$N#,5f)F)n܍wė7tg:nXƜ (K3kKأۡȏaԹK-2c{p,CpA Ymkߚ @m ;cxT@0O**|DVQ9@lG ΰD]0=%G~ =%xqK }6Z1F_/1oIIqGXoI. -!YF!'@G~[:Fˈ.)(s0X].9ܯ"Jၶ9Siy /2$'̂{>td.ǒ%LYTb,hX͒SZk@.̫d`)SY*Cٷϣi$MlX;iHcV +IɌ}p:;})~ع6mnS9ܘ{ULJ)~!RL($CS2dE$Xj pNj:sN;sGV9̡4,NIbQ7TːJ/^9>5iR0y<w 5` *Y"QZsƜ GL_2Cm&eBt=飻v'v~$UqFMEg$:Lvi#zؑRh Ek0ʚzh^ !q'1?iE'̉(ڰ kx+d]~' mfE 0e1B9gʞmš]RHvuNQ?0zp[of&n40sOFuZs lҍFsQ>k??)O'WX몌۟&LyyaQZJG=e@nbtEgBPvl|2˘R%V@;h&`Cin,UM9ނUvU%_'8KQ1^drWh[c쯣T$z;I?Do7Zc ay~,Pep_hk|ż:=nvX[&wwx!n8xH 04tMONR5T>z'G@^7RzMVO+{à%17$'%t7ONAshN76ԉN#х4z^VR /i40d4lN1wbV,Fu¬4Α*L3j@3~?^aSVs?$[[-ѫ$E=`"L}5, L7=D´wW 7 ۨb*A"֨Q$pUֵ&CLGO P[_jֱZ@`>PF4#xsfmmAPqv2'Ӳ4ۄ;L4;ځ֪ÇPq{tqs67mWSϹQ8l֫kS;8~cg#ů2lp,8 Hl۫vJ\hЩ'!Vsoj5R%86XH/Q}] Y%6$3|sN5c.+&O<'9tEg#1]xdNFPNϩڥ vo?쟥Ƶě4tZ 9&cEtDS]hOfotW*hgRhԏz*IV'bAJ n_4N*P?@aP{'Z)boնEԾ0oT u@c#?jZJu`34toR̈́ߍF@g+nau56z$F?>0L#$$L·EÑv) cXp^:h O i=!jF NxoMh+)p;,zSIJFb7QQVKE-`M:1I #ȵDf$6u,9St@ţyQ_% ǡyIş 2/#M'&לZrGl$XGqct rqԎG@1F򲺯ۙE.?}[ &)v_W웙ڔMiwkpm ]f:ʃr0bV1]F8.y@0ֶԎ?,no[E}?QjXVi)?FMMu _sx{< 70.jTBNn:c30/k@EՔ_Db,úu3|yܠA&@~e*PF9I{@%o´Z 6`aS r[pTnvLڿO+m"φ@h^%𿞬=NK=zu)(v'=Y^`s7~AT>hYޠy2$a'd²CzU߫*Wm萒RhD% B*ZT l$0au| :CX@%{0e,ӑDdgX&˃YTH$KΓ{kr~_d-Zй&@ag})oتn0 ܍d4oG cNr*AF3*y-){M+:HsYczCc:jk05<,^a=%ZE TyFpUv(ǀIhOY:Z/29=P~1ǣ>ufReSg'y=tՠav?h_FdԚ8A^F ^эZ缝[A0P}^.zOj_#wx$V{۫'e\݀5@0ZB=3$N-%ÊıD0Lݝ<}]n*K,ȧo>I88~ @QS8 *,4ݻޘ1󕣴n'6_/\€`N Eϓ@bE]wjw `P}稝c `sǡ%qY|ҿU:{ [yLNla2y'j"s_4J)Tgj`:, p[$\5cjƔs~ *sp29=:hHb0ȑ%1f S[( /hpҍ{D_9<,;d\e To:[^aKe4jcg#,Ͳ/yOҒYyllU~ U!p@͐u bkr\BoWB[ gQu7$e9dOc9t-` T`tX{m-vao/Pkuj7tń,"H鬲mChop6,EdVмC6 8ZMS7r`i Q XסHm#w<1_]{Y#D̕ax#5UNI?8/w>_lc]yAd^\y)#H *875t/~JvUFq72>wG`b̲6o?{^Ss6D3ì-d/X#/9 %Uʣ_7r3إaxstr_'  9\F ɻ;!Rr[O㙉ZqqHdCu <Cݬ B3V-36\. a\ƃe ޽D !:Z1F0, :fA ;ft)C8U爌(TW1HHz-_ڤ͇}&=IP0zGUv?4L'Z+Gl8UR( $Ȟa_ᐝ0WMt׿>&+ksI#u=]t4Q-u_Tf7]-ϐ -dQD>&s\e;FKvZ64<ɑ<'x1Y5.?j!9T tTy[.3s19KZ2bQ59ҏ#^E82ɕ)l?_Hm0Cvl)WᎧBxƉV1ytF-;K4<̛&+j},SJKp_Ft^4uzYj69}EЙ-O*T eMt` |ƈQ NQJ]M/\w}\ӗ(HHRvvsyC,dP3A_KM:JJ c[+WH~ͧ^_SSw X! ++a| tȟ;@w1I`S Abb]Weg(K4NWC3eF=CkI)Q8.k])5?WJJBhnFW>7.H;$Y'QzF4b}CC8҆̆ TeCuST ;%dX -PWxT,$PBF2hMKǟݺ~ͼˌAamnwyšJК8E|:8|"92 #泂 |H6]Su2t@ɥϯ&G Q6j6iߵ9didE*_Ȥ7WGҢ{qoiDz|Rl!7=N#i:hGm^be@W62}axS"7M&|f̪ r 5gJ=9YQR&kg@!>l &щQ ǟi}3uQ3Q) ľr]_E+%x[AJjry*?\[-?_Ez8>vh086-Uذk* 5mJVJ"U*PV2L ERzڪO!9#҃T?S,d!}]Jvto׷KPCeةԫԭD,`Ь]ɅelWb WN9EA:чJ4o_&d /!hnN.z=ذ$}FYY1!INZj{UPpE(w뮒(aڄΛB~o 9Ě Rͬ9{#Z{nsŽn4p5LHPsG>:֝pN)D w`c_shBonwz07Lc]<>ȾK\,^`8u/;qp{[NѼSS% ;Il Ms,m̊he u䳛B  1T'SzRɢO.= 7l`/)W[csX?@zC^C+Wy9u!26U6Rvm(eȪچǭyۧ\f?K 7I9lp=Jf<fS= ퟍnwa*_V>D5{'&% :2 INzqguLæχUD`0:kWTyA9\cX .,<~M )'caacs%*.,M Q6e뤎@֒m9xJkxV[xY?*,3(Tek1-#vGr>E@_ppU߻}-&qqpx/D#73R:$\[sXњp]b;ÀWA!oՉmB( GsUG u*}y5i`9 yxP +t2JZ^3ߗpt84ؠ#,FO&WV*+ytz:_nt#&h󿺲||wUZQ+@zp:#_W9wZ=g| ]?_a(Α*?vK/u;'D!Y^QqdsdGp .{6Jz_=,~:?㗍G|%U% #@D?~(orK6dv}pjXY[-C*T|JUn_Z/z ___砺#5:~$H/;GRP˿nZX>Һ}gb;̎%aDT{f:N9d{=I(ϦBe8_ϿOoFUa$,c+tLV˻Ј>ZEzThlh"LupR$aUfeUx*UNY)T5ɨq/'~Ğ;DsiHK9Jz1Z86A 3x9C:7"Dft{Dc D;ǑDF'2Ka6J0M41`hSsN@c$Naۃ19N%C%unb'[P3XoQɭUԞxaRvo}>袸B)O!X`pOz033yaWvNWS2[twwRT)87TcѻaMߔy^χoԛmUuo[f߇jބ~j? wvP;v;%U9ޮ.)@nrh5JNgȫ Q}xzkļ LP}T#x~p{w5&p[0N` j[G8 p:Qé\qC!QmWwkFfO am^LqT?:>4ՍVv4_ǍZ Z8w&xyܨӴ쿃i>Vm=*X)M)M LUq 0c[GN1l&ګީmհ7X˻zVTz ԹwUh5^Ξ-p%Unc0~.;lLwEˊ噴z u=;ҺcY9qyw^{WLND/B Qrs3E }@D6kv#_-r ސ㠛תOW1׬3f;&al2P"`n)hGopx%$asQ=ްAj05:>N:F̡Lӧ w_7 K()>ȳib"QW*1p_v6(e? FgKs$K/*YancT`d_G$?Uwk^+1_]('G~h Bz׮ca>S-Fn\;2Pb:mbaoB>1{xouGv0]Ju/û!lHBilݕ\nqs<_\TUsiȆ$P*++%1c-u )DLv@E_t:A\I 5:v 15{A1$KK sr'25p'P+ԙ58Jlb8'cO)V:NSABESZ](='e[.Z@^^!rMz1TmZD7\=nξ痹2SW1_Sz.V+8-l!&%Jԋn{iӧKkV=- ۧ\nڎzZY5E֤nnڴiqNC!ȰMPy@Ff`ʪ'E5"M|->)]o 'r!X;J1Qj&"U2)v6-&0 'u2{ Q"腊0*>#?ktnm>=A+wxҪ[z_ZgeipDpe E54vL->q,IB2 ^fgrJo-Us"{KQ;uɠC޶KSdDiLՀU>%L+ 8 hУ谀 3c ^@y5SaH$Rk}ܿhjCC/p]A'_BZg8ainv'3,wȽf(`>G LQLpgd2U tH|* uV8 ӭI454IFKɨ%sa D}'="UW1gƤ.it4Z`>OUlPzhZU=] ӊȲҔ@7R >B0 ' =]6!1i|.-ijwS/>b!e; Ƀ))qZ1p;k}Gp`Ӹ=E">}ٹ,aɢ dZH6 l[Rsu,] * /2"5OXhqw&`^m D,ڦM",2N4݄.eܼͦdg Gms;.^(c'Lx7Gkl3VZh…;U?%2ŊM;guۗƠ TwXN >EHzgդyϹKØcѹ FG\~U'Mڋ1xD/j3uN',+X.fiْ=H#KK!S/\HJ$_@PXv_-TU `"ΩXB[lY,~U:q|= /KfK^fƬ_|U.z'Of"{MwNVfRh6[w1`9"X^n(NF(?]_*y#8 WG(MU97YɍC4 u_ʑ*6Gx/KeP[t+kOqg-\暐t;ǷpZL\OPn'R^k롪d?`OF`N8zu֙T SRv%m$Ӗ}բ"G"܎nɌOCl9.7)ڢm%k hge QpbcNy& q @DKƗܑ STitSUvG>1=5=[UVG *jВ?7*~/*>+RY]QQ-UUQ\kL+]&][Zʾ]Y/7:\u0azs.էSd[esZZǴl#5w6ܖZr-{-znvm0Rhk\0?rx>W=^K}ϑ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{Wן>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}>wN#kX