#!/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=eb850ae14117cba4f874013c78dc945d # 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 -Tb ƣk t7&h&:d46Vׄ[0X7M63j`8?'n1 }cxf G10. ڴD6:g ^gЊdˮћcv5_LtK Lևf~> t{6q1j )AWzπG;oA'w/AEcr3sbL]F}n$MMQw']Z`y4  FZ9O:D.&a"w q{:g[pl ZXV3<2XqκkÁLC IDOASN䭒x f~/ f޼4GqOI >lΞWS5˹ͦ14Uw㟴nNAZ{*)Һ(̑\R|mI+~iV V`7r͆|beUԬ cD΋@sjW6/k֫(~]w$RSN:GG?V;~{{`_:(w Axt̴Apw̡68c&o|ܒ'k'\PX[ +ƴ>E _۲ 0vmM{EQzHȎnvm:׶XNt& k<3dEDd΀Iw'pT}0!lպRO&3ߞǴ⁡H,~Yd=kBPSyS(kiw0 5oGgƤi-`b,s234:k%!pTSqhAdxY(;[VɺLBbU4¨; `&!Psx+#b `@YZƨG^hqq0 BLDkGnCR^;z Vdwg$¾0L&l̀{}xǙ)iL;?n4qx㆒X ,p.f7F0$Avu6xG, B&X00sDFt Aނ-Kf 9m;_2LO2t0Q=3#[uT yfK+#GN;7 =R;rW (=>D 1.|zE*92"ra(;ul(|?Kc ȥ5Oq¥o-`ʻLٸΩcGiI흔ƕ n@Mc`awA&3n1<YcL,`~׃,A|M H 3;E짘?ñ&zWSf^b QI!/WT0v/< AYxwU#(rQ/a bbRja]'ؠLz( Mnt [R7E׏Qi/MzLYXp i (8/gRQ's4|7h 1=V(_e( lJ7}|i<DL^YR0Mcmoy&vA#+~n!7u] &Fr5'1qaY%# t*: F1yaalH6oYЮ/|# 8EdkS(jYfN "lrb{le;ӆUhW%ۘ g[u~iF|IOG-Af^65'"r&zG'Ԍ/7KӺ=,Bgq%ED#倘a[mM}!d?zTQn5jS7&娼j÷g%ӋqZ9OqeIMS.;ϱ*|`B{`IJeaKۣv BC **e3AhMY,C)]2ч}Tg^߽gO=ۼ1_q*&nܤA2DJHbeH[XB#`群@ ոeĽi4r{Smo/$Y]f~iXQ}$uQYјialK%J ?I}JlRU6?XYaE)/uq~ d;p&ǝwҪuRG횤j#" Zo$pR1GHc8b]cF{N?2 f]H%*Z̮鵢-u>4F.`nf.Mg튱Tu1EZb՜Ce%0 q9vk-JyОɢR~[#ۃOD@ ">.` ~4U\]eͼ]Nϴyd;|QCo@{6ICCIwp@$^r$o{ ;rRm R$ zf9j n hGPg,7'χVyU< VJPHN#!ZnliFQ>o*_4@+z,jZ̊ZlYL`-`olpa~/FƳg[;cn1C֕X%:8d 9N|.O2MyRG f#r_1pޫ5㊿PzQ+ͅè+  ;qzQ @Tߥ%Z%^μ-rh9cNS-e}Ey5VUu% baJ93/ V+BLZv Y..Wu#FPF=tƐ ij}LT &ͧP+akPlgl fq*V7P{=aV Mm{0#K5Q +{Mmm8PdxIC'e[q}cbN& K`".݄E /M ߾ O#<'>xԷ#ZX&UҟΌ0B pNe,]& V1hxT\ٱ/+ FpWi= ȇ4S]|\1XHB+,E%+<-g~k#]-bϱ}$'}rp e>*뢀!,J1[Hc!˷2IFPt(]!/a-L 1ec/r- K$ /J<@u30J)mʕ ;7(cމ=ب@Iʽ(ͼM.>"2"H+^!c4|1yVI;='Q/זWY(\` Q)e V~4i Dngk( sObۏ#U#bAi)UHqD R]H=ނy$XRnk"J>o>pzNސ#o6dYRĥD4H'L)r#&aeubS#όcn?YRXNEclc;lF'Bs,C7ӸP8tk~Kp<5r$rk^aoKl2žt055Z.\`6o"BY 99|~j_dJ7^%Ԩ*"c6H2֛ IO)k{sU#*&;ˈ RףIymomvB#\-mRʛWtw\ Хf:a^T_]8u-f@ynY_ U|~C,[老[m U6{pX0ў }TQoʷZ aLqۘ-!ag,*bA!BT(#Gpx-(чCнjbSpˠ6x#q9;FsFa|[]A]Crѐ T8Fݙӧ,Pqӟ6u1sf1-`I+Kj߆*s>|;jfukӁ6N^k|$ˀ(>] }6o8fQs4ʛ؍Ҷ#b nGeb$b1Ru>Kp螄U6iL`$MF0f9+AÇVxbZ얇*|A';/gǵN]㘕iQ)EJFQ>Ӯ'F޹d -E #Hq }uƝ._Q8+ݹقTP޳$ t/X~aF`w$ʌso(is޼tEZqo\#zەI_l؉-28 "~!ሸ$fF8|v0s}#\/2ӈح$z,"|VdK#_ 6=CP1V{We2uW= nq`lf{wuQ9G4nJeH4o9LgLg7/JK(r\ !PBC6,F,O{~4evx&)͇WƛOCF'.:vgmD4ޒIwC?K&¨XOH#jPHb_S!|j &ZOhfkGu;!7Hv"16ҿG }#[mnlE*ϷϟU{d@J ayEZCAΰ[#~ϝ$sP~.A[T;,']%t9kA'muN v/X kZ]? uQQҼt:'b)iaq偑\"V{wW]rT9x]kL,R OAOZYX6ŏZowWx}vI0uFS,hя8>l;!bYކFm@髢{0SOC XJDQu"_R}!#3U1<itN},=6 {77#[9?U%zپowB4`Evy3DE eQGS/O^#Ŧr_-yJ6>wULDF'm帞{Q8apW1fh.7{{`xytb8F+}H*4pY-tz QIh7b|8UAXX;B[ww9b8b/PDN9tc#eY]N !|Ѕz8D3yԇ6.A!(6%ː*`uyz-q \QdEv!4Wŏ/^piHev5ۛZ5Zx;cO.[n[xvB@94_*eq8=vf=~ S]SH;zǺЍ>н{!dϵBan'1 O*@RI^Rk;`*D*GʐbC"r$.ǃU00 {DQD7c0ǟP{Ƣsd̚UO}5r斛.^4Φqt Oe$ =#"cvy$;x}ɡLL ĸ~:&|I}&b?9as$pZLq{n5٬̌L8-qzOy #|V"0Zc1m 2#jy"_F4oE$w2LDٛT24OilǏؿRG#=`$˙{ ָ8Gf$83:6/ -`7e>_S՝\~Q<`weN% kfjIfX&gpNp#s}wg7!c,q۾(Za[l8f{l<$~)A|CrS`L3M!J ٕ؟Qew#86NeW(f(K 8/ِ 8\5yxi@7 fIC²UI3Vk_1`nO^yRjr-aV\zb.V(f1./B!)b[_ ԑNY ƫ{8p K+>T,BD,` {H{{7m (l x3 L+f^ЉPsY~ -%]hj ҝ ”Ϟ{ I `c!v]ڰ .BVz H(UMb0^S?XMuOUY7]`XEN#wF.e*9˾b"F.On S; }bq GPmMpKc1H%d0,` c#f2ؒM?|Wi//рߦ UHbNe\tkd4@c ]j[:=}THrӁ].?by䚼b3QfWL%J}5keSOWPQE{>ɬPvg2ϯ|e)Uz oX27~ÉГHc;Y!2̝0{AlI RjA\nl6r•cRU55uӀR?O/`;WRҍ2<<֣fA (q!`i Ѫ0j mir(wpL&!ajm J-]yN:"{Y+ئ$ koFz3C#A~Ueޅ;'$a]1s}M,hKڪ8#+ $|DCYF|OvJv"KuqY/OrЂmOO0obCi.=/HH@}8¸\J1,5\b9F4Z$x8&&BX[.\RDUzK 6nrDPke# oⶶ!B'XTin-u<S'gh7з]\q`^8:xVvo?|?XȖ˙QA˓ EU ’(IМs-dŕosoEQr--˹7hE #&= Œ8cwA΅vduR$X5<еq 4"q(M{ᨬ3P[A,DHp@gjcu@v^aqYJi_uKc H6X8៰dy9ͼv}\M#6"\8Zƙ#c@ϣmrs'v}7U D0+b(GY31p Hs"I]m wtgdCy"_9\Id(갱Ym lAڷ[#q±I':dxdQfl|2%m)={DFMblL1))]O;4N I~^: 3ILzDǟw=o)krƩ$p{ LN &lTJ0N$_i[i ! >6 p̫4!tV} &97|UM0_r# Fz`d+v%txě`c)t67]d'EnZOLDiccϊ["C`WtE.3ʃІBu{h$oIv]1J6ժicɊy}A37l8TBBNY"w$UH(֩/j>X^cR[2Olk6(O">i`#r\ٖ~ѰH({1) e6=uIS\ L^]@93ԡdô,7\S@t,Z"ǫ%|l2 C&so*VqNik j/cN2z~*,| ŗH E%? N_q쥺sRp<^Y\ެ5ix} _. :STH);S'-D 4ݴ'i{۬p$ċY[䬾8o4"k 9B'F^hqL1&Hr%))YD;  sݪ=b?_swʅͥ/PJO|0(=*9 ska5P[Dv&Ow }s:=).T&l&,ƥAv nQbR3wsymo"yRHi)LvʄaQ05 ~K)۝M6{N}T8"Q(Vt8.ؔDe0bֺdb<,4.Ҿ6Ds9>{0vT G'74)9cj?Aӹ{Y)vn&t}K(!>}bv9ib^ nSh\\y ɝ֎y6a  aT؆1X`W٣}'c> ̀ Fހ>뫰SUr«Wu嵥/+ !}rς"&I>>@ޥ"HE P:ⱍ /5K0HIb 5~A cj&9lbqXpOI`w64w6cE,fPm.˸?/nnvvX L#5`a\-֐$4ŊX%yE8n,ug~KP0-֗ƷvaO–kg!+|ZnuE*Mz—Bࡤ_Y$HŔE.?ٖD55c|!DSxXFnWx .%A A76*?sZCzG(۵~$'Ji}}{ϹbÅ^)yy޸( My1%>br<\[ PpahjMjg3_-}}ӛyxOK+on>\q# ә>|bwPBtDp|"Mx[ˢr֑Jyq縖N76*dHM'b C"DXkݥWtn) QCgcU.ƒ{.KEIA/p=i'?Z% Z'a( Wk/c҅"g_ù!<K0f9Ts.,> @ÁX2s#ՏFbuX.ADU) Gb9?a$d:)]fIkNv5e/ѐL8n,μKaN?#Bl4!DQno@'dHP^`Q:vX{s , XWXWL sKhZa ekTS*sfwaJpdTl!cntJrb:ɥo`$Ȯ|JW.i]/t?羃!"d+Jݎ&ut#ߜ$Zw $lJ6ɠB? fEK ?# h p_Нt1͆Ea4>@>h1i!?Zr.׌x2Kj,ۙQ;]K̶hhJ bOϸ0q!£6KMEpI!ਰSXXip- TW$'weij~ew|>]ΰ< HReo+ce*/ sQj~qrmnlwGkzt÷V6vvv GwO)ۊ2Vx:9;O7Z&a2|x~b :y# xx3NS=5Ee$Ǔ6$kRp5 2o1^ΦH"Ct%U؞Bn~B6.,%,^ۧhQxY$Բ=:;TEdA)U6c?e2珋Qك\LQ k15$$S*&C"X//aB9(3K\AM&;w u2{\ O&gwl0P.)y>B`x* @$'P>vUt"sie Y,(p/ T-OJeL])0(Rx0%bw$XY_̹ >mhhlX!8`<2JQX_܍@j% &mj^}Rx_FM xSamFwbP4CUElM8e(~fDh)<0g{0jJ -SjsuF!I$BrD3Z)|FZBSHs’Z:#I jق_UGsfFl$(J3>9SO~?llv^n?v-o|clmt{fwB " ( #y~"~ܭ vg*/+.t:NnӥoCK9=1aˮ G]vEfBVN?lΔ't" ϰZ = yY=- ?L`Ⱥ>]'}\!@x F`ų޳gn2tnūloi0 gPP &.FhQF81'Z\ݑ7{NCpZCM|wz|dUZ2>a18_|e.oyNE^$[~Gh&B/4Ûᴷ063_ǿ}golvy+g8AG =GGj\b/v"^Dߨ[_٪s>9F -ۙ̋0niםׇ'52g;4-skL&S;<@qN˷7o۝m?eC{A`dODQtrtiRvC{IU6wzuClF_=țŤ42rH%3vN0N;NHa.6}]t]"jZOC^WPdGT!r0Bӄq ͭGO1?ZC'_ @A&4Eo;7Y;ĈGZQ42 M@ Z B ğ,-|P%~va_t/iTLJ5 Bax8ra NFL:(8]F%ţl2A .^~n6^]%ސ2FyA!!|)%@eڰV垃R>xrh FFJ}a87% Q˙t9:ÛrI@R̡ l C2Fx> ,'ÿ/9_wO+]a.ɇ̇ O Vd*7Ɍ/м >RU (vBP3e36T40(h߶6&R; R *kLVQ9/&bH!w*yJۜ0(oz 98 b3j+/šS s_BxrX!44`rb@t;L2-lW|Y&AX`1 szAӓ9յ 걁SB'͕Epmus $.aٿDZxoTdqw3&l]pNf˅@wc礓}nL& tGlNw @> z,r<Fp8& =**$Vb`On}dǤud(0/U4s/'CS-ȈJ I.FkŃ3)6ͮj8]Sϝt jbWkD&|uFx|EpFV-|` K#tSaBP;񭸍1qIj3s*O, z![LŒX!)NL?gd42d9ýO8RBsD޼A>&7k޿TZw-DF@Fnv":6$݉po0@nivߞj%ѽ9Rl"#ڋ0)ǿ*24jM1aPh3p7 J?-7D_Q7ޱ!\CW\>;5v(F#g!G Эoc6O?YUnEWfEkl:梈@&ݺ* ?6NѮhUZ(^ZVyG*:p?u]7[4&7_??omG=)?;ȷ#!Ift <^uͼ=JjI3^om>phF;05GLg3VOE׳yzZjMGlqoӧ15"' ubNsH6QSjMz2j tX ꊞ+:jfuk9l~~aTTϋڝ2T ;e 24a+p`zeG쿞?u_n|[/"&˿$;6IǜR.v_~@r1>^"{D`|tw/FqԨf<5t&J>iP8^f2_$˟U/c`dl&Z1(Cʛf Uϛ'5GCn1V`ht_%p>jή'VJbn͔SKFhJS7DkzqM:&Xqc nSG{ rU響LQ.]nFz+vfDg̃#@$(Ylc=o~%uMMsȈMP<ݻ B J`HB F|q݋S EQ ^<>8 ZAs7.ڛ.'D ƺ&З˫8}T T4;o~rO56R A1mMHvuV묤oj`069LYO. E5f]t u>]H"Jl`}Z<3b ڠ]hں1Hb~ا3`\ *6O\"jjA9npOsb`Y?p sFGWK4` A!г#92?,ȵoMgy5ӯ^//MdR'ra {B`|l|֦U~PQQLxٽ$dc~O^(Y9WjaHNŔ<Ǧ`vO™y Vd+1S ͢FbMNHӖ4a.afR01>eEV NrEnL?A0T";>4vW |` tGCڬ*"HuSz6;Ȼu߰ }h|. jZOH3 =9/0T#m2CqX]M.b{g6`d܃&` s U$Ei:09' ]?.#A;v=*p)\a^ qAvɚs ˏpIzh(ٔP^<4[Y%ק6Di=fb%Oz d!Xca5%؞Ml6I1N dIZuxm+ ZgՁP;Pg:1Q CÀoG{1 9؋ м)03>>!sT 8[ d-v8@4^C)˙R-yB%}oLtoc'}wȒ{幰!jrkvz=KD|Fe zD8ATeBN&j,' &FLg+$=p8BxF "(w# B5jnDrg("'L:cUn>L=1txI"Aa"0h^aL-Y|n9X$q f$KoSX?xpg|]IBA܈~&3~Qh IW XAeIz9@UO|ZRp03 v/ʳc& j'ǝa< 7eT.!#ƳM^ϣ|z9ʜr-F4lɢzdᕙpnќZ)%>q(y+ :ɸ&4j+{2[J21LX:5=f,W=\ih w$a=$I෸䰆/ ZE O@NUň7GI)":9 1/V p '+bgL>z}!Wii L]099.'uq<54\H'A$ *@.д0a,0վ(vqYEa#OBĮb ]ax)wU8)vX5pw7ܹs3]Nj JȾi'f9[_bHŃ,\ : Y.EL_}!XU5bEJc;uw*WcaBr5v[F0S@@3n.#IC%gt"p*+~݁?܃A.C~#cLP+&} lR|?SQ#:1 XO W1X/_`h2RS!HCr 4Gy"r](׈F(Cr%xy䡓7{hYMQa{Q!e㏦,υ,%2k&Vf~V&g3?1~]L^NZQ|B0y{zhC*kra WS44mHjjOڈ3v18";_U*E7lRYqЇl Z͑ĭ)_)ZܺY?9w`lkcM@$cϝh 8N,R*%6*ؘ19DiBcC 0'5SЂ2_=R'_0 OL(YUtǝ6{|a!zɕt-˖/Ѩ ؘl}_U;d׍١tI ^C ::TuU[\I+IaVy4Ml\+dJPw!.DI$ޤ|GCK fF`qYJK>d4IX Dۭ8`Cn6[搒%Uh ,Ɏ 6c.YH|V\uX7 #tF:TmڶRvl :H*9 Don\}=;{&z-#&KDIbIE6 M 羯/%\H5dg,i&v~S}lNef;p̿ 7׵r?Œz3eέCO$/8t˂1SEgKzVv.YY=UIfkҤDruzpO>kކ.fpBOs &`D⌲+̦b!j<7i׎Ba'EENrcHb8 I &}!VR2\G^9Y+&|y&ؤ(q $b Tr8 B iB%I3p@v@ɶ .p "^ShzcFI)Eg쐺ͪ&]D+==ap8p G(ĦkְL)浦D/'Tv KUDOvNұ gA_1FP;M,9L6Hr0Vx`8)>9,+ƒeaNBh ؠpޅ& 8>} ɢ%W)&^S8&lU]8V85J#ll΂CUIbIYe=-t+}t#\nH!=}顛*e> P8$` hWҴjb[|J gngpEGliK }` [*5v"CV!A$),5mDˌ`D6y|)x"fKa0TmA0-򃕩`5,66FP;K^o92g-j7bxI/ZK^̸!~2@Y ̽kms l~ZͰ̵UӣPU!-j?t)&A"#(y:[.(ҊN~TlcxOI7Z}@G8YЏHyJ !R+'D }lTxRNnY5Rn 7d(>3DdKֽK[,Dlte g <\ ޻9ˊOh˂!.{K4 /Z(FYZmKP3bGA*:QrKDF qز6LZ(Z=CWb:i1er 7Fh@&6XƲFUTbU߂ %8-ydK*OFl9; >ĭM"MouBdc,"T|9Ҫ55Ͷhr)d(ezˏNpb|b|'ިܛ- ua[Cj+b2á fe'؟r1$aͩ"FD*q6Gohg:y5W\rEX,Pl] |ɦoaۥ7-;1mi+DAVBu8Sd6T$Ko!lMGW5"J=)<{e4]mQ;% 3V ;zZ"v=VEay=r\cW7`6{]ɠoU|HF5~Ăt2u3Vq# ,^&FHO, [.υH$5'V*L(\dEjlh^"{sm9rQ(o֖iE`W[NJW给a>QpURE'bJjUQUs?PKnQ?,ZD$gR>EswR7ܮmOcZn 3^LS7CزxzeD'ܤux})sk1}Gaiڿ>n]/8eyT$npbn!Dx eޖ;RH5jH+)8 ).HhZc"$w~HgS $gwgؤ}Sx7,.Rz<Ng<]XV^m^k8LdD?rO:PA (mj+p < Ɋ}^Ezԍ]Aw1 #oȧݲzLsDӊj5ڝjN*0Q Xe8<`):,8*&-',<<Σ\\CJQ Gaa']hO|n-j5Q-+=ﵯ懊(x5?>3j9+Qa/_y$KTC]!Bw$׿tmpg3}Cz%IoXFVCK|A7#Cj85Z :^}/"I}|l՘h4z@>^eb%Ǎ\BSbmaxS":{A>FihN)ԕ*ɩ9~ԃ?J:XX"!/kIx&щDQ(kRx\/ǬZs72vz8FgWf"U)@V%\NWyYP+9Qgυ7GGL< 'ah]r y1*=Hժ~$_\t'[TJCNϚTa$6115'+fˆeiaWdլG yLG [{6 O4n/K I̅O%=|,}EZ1^ m쫣uvB~Q$h\%i*$*ʭOYg!KpLN# 5ڙ(!HR3|>Bkq+MR<ԬIG6Z;a%.v=zݱ2 ',}4׋?[?n?ĐǠ8\`_77f;Q^#7ׇٖ|]g̃P5zpd7 WysC@x U0N+NA p(9v̰[D@ '3O.^MTQ_@~ήO@F@e F@Kۡ}r4%Aqa6XB` λ݉RvE #E?Zr\}1-d$92aqӹ-] ?҇WR4faxnZ \&'9| S@z^T U;9jyQoO 8q]%QYUېs-/UVFa N.&Aכo (y@I!Ƴuharc]PYUV[fRgӓv#ݪ7b1_jCqQ~b^f_7hmuA?tCڧZ4~l@w,n$^=uՃR;k5 [F}iv: NCn7k:uv'`XUZ) #t6y FCІudX7 `:n9liؚ,CȫjMCzqUբBgR5T͖0P Y wI+y;m9^掵׎Yt{fy<"pE6(LEkL ATy#j Vt;%keQBZ<4wQ#}:_lV5CSY yn?އpXvϟ?'t~^/*eWQ!a6%;$ ][~twY-onomm߷)Kq~SS?cPgu@Fbs`iL88p,қ\iBk$ء ώ=.=pV̨ F $ RATvZzl\W61;1 gAǒ?v0@},э 7 P UWdkpA):gaEix-^#7΍d+|bBIAb?|{%%da4.3茮4@N، (G+Gij]x7|gkAdl_*^w!Ƅ>F *A6V#ш@ m($y@!QJ/=;:&z hI@7=8[7@Jծ 19:6Om؎ z7J-E'a:dI0iw3- ;=@7|ӌ3&\sURq]K!x6x}(") BVFغ! cJԾ:ķ.\e $sD]Z't׃R@@|[(? u2Q_vѬc#3K!lE$% Y,l.|vhu*  ϝ!F/w)j`QK4u<P + `ާR~O!w4C{ -:JLK,)*莢6 EATʦ[Y˝1/kG.xQ'ahA6Сd&7"c2YMZxcim;d6{S6g1VvD3h1݌k,3B$BUJNkGuH!A숵 E'Qf| G#rɑ%||_'Fb_Z `lCR| j:OmPnw-I:)Z7BGVHIWSi50; p$J:iulSpIĞ+:r&fK[I|Wԟw.!5H![;.1cIX?hHW()]$N=t,|ȸ2>>椳K!l#fXP2@o܇VǕc4c(8 JcAMxwΑ9.F]9_ӅC_kR0?IOyf#p*/c OZ'nmnܒnK6oI*`xοه),B1(Vv (e/FWdLH !5Z ظ~bY>GGuTZݪjJ,:NQI.͗#oc;|{7vqZOaKk[_YˮHo oZ'gkt(_Y%l,8Z GwO)IY'5(Rx߂jTGҸ dV?^Moxܸ)Mx!I;dMuSA^f5krX,% sXR'n"l$3;6>[ǔ]f1&#hzVT & m=]w}WJhT^Hmlȓ(J]m QER!29,vV(]BygK,!G"J|C-C}--+5mCMk]b(lWmP(m$[H~PPզ1mS&~6! h/]N0FEՄ#Ot<Qo}'?Yߡ] {4YA^ %'FD1,"ٝ Yt&BpUpfI._x6%7{3!*T~FhH]JzDq)7{ 4[ʌ㇇Cbϣr;H+tM߅'h @`kТr_cΆj)0DpJe6xy!%])cvd'$BP= OI:jFj,xdhJ E#aA["ǖ W@@:LfP.q~hOfS/pivw8[c5N|ln^:wLGaSu ]O?uEQ)^l-{3oD"*fQ|QL d>RIrdkpX+kĦKRD|Fdkm .+bZsT>]"*-,/͖F5ODhqHv"8mӎV2Edj&hbI.:[!vλ౧X]0H"e;<)ۧh%)qCD7'-&ri]`{.~(L ۻp|Ў $uHP{k,2i1TP1{ tUJ0=ܖ,te;x aIJVa(z?|Ch|c,%aJbk@ N NRVŽ)mЌfm@T#q+5Ea qN>O>⇻6'/Meˈ0nT0ՖWuQ1&.LF\Vc٪'u- )yTX|$͡hFC/ ?I5JHB_5- gZ~>_5]ěmB2#'CfhD{̧̅ABg~Q[-E+މi! RlO`#IH"kWP3bRJZ#ua&'((M4T#h^U-s *7 'Ui~nߠبcިowORڬ:.WU7NMM5mҾl@O o$;մYF{S拔>555m5EݭgᚶckډdCk{ܲ [OaOV r)&%k_} ,jUy`g|F޻"+N -͆}&i|M|;v'I}D_wKc_3?xMŚ ~ϝހOɭaǾDճۓVnt痗Sv//ػ=(ԗZPa8n7rkutCi*ìY%^Ί^ڄJux;zm\oAthv;"%DRK7HoP'MEx4v|/1awTo^,3szM+i$h+!%ܮ!JUApfH3:DD$pd>7"{HțOf/w35r9<$#f^=UȽi[l`Po)1xIv}Cո~q=l\&`m#q k.)b.=teN .Z m_8H>lYhEEV*{+@aFA(QPz(RGj둊{WvڌVT9\a_WkFcۗ@ӄgaHa A[o٬l绯Q~w簏`]ϱ8lTۍ|!N+4͚ǖ{Wp*liwf SGîv5./0x)q]sttzq5̨ӞϽRk1?WcҾYX_|D1\ɻXk{3tz9ب{Ӫ:6n k78Pjb-Sv,3p1v*Aa"ǢEbw_.LgJl--0Eڿ7yZ>h]N&vsY#S㥂~ǖ5xdQ' C]s6܏9A$̛/e}P;0}̓NUkoQuS2~z#Pώd[aTGR ska0n4ɾ:%Ѽc]$|"J=UZg1(`QV:NFBv["y"ߨgV2c$eԪ gL oS4O(n} h_Vf-PW[KJ,&#՟:+dDp\:O&,ߡ'uNQН izlxS!%"-hأ&wfXr4r'>8 <Gf߲<䣍w;|" -?=;-@z+ە|O|7Û\"}r5RTeu4b7zD)Q-` (1a7 5hc<6U7]. 'lJ^7Q#q^RjaK%9 !ɘP!v{:X ePRV*K) N (J)dh|e\$Ohthݑv/.hP8Abd& JrNޕ0>cQćC!eJĥ˼*N 0oH?up|h=ZT[AcU)t+My<|>y<|>y<|>y<|>W~o;AX