#!/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=83a2fa88e1856b84bcb39fbd2bcb70d2 # 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 +`d\{s8O8{ ea9S%KLYҊr^E3Z}n|~e6{{wDFk/=?y~~/7~>xj_$SIR;f_y|:W)-l;3”PN(첾3j'd4g&돇P:όdf }w?Oәnl2ctd9?n1NC 6́81p>i=;gc?2F3ޘqi67MOgӉ30qxhT+N8UvTLqN,@ǜA&:̨?ܖTMO *ٰ ,t Ȝӹ>L&C>|Fvjʰ?@d 4Hzxfӹ1`@:g:I̓1NtF>#aCP>Cɒ( $7 HU>W6?xcނe3Ll`Р 0)M 8Åz_V6-+3޳!ՆD78lzoR&NӤ3}K4'nmp 7̘MU,6 YP7 ^N0XxZ7s(WzJ㷲Ul|io|M97͆|beUԌ m5ĬioN[l>|A/oWLs]1/^>{]YW0(t3D&c >LGg}r3mc-k>!Lf}e~d7o/"h&}/|-4Z'ջu^TW_%0 n7 1$pg(%R<]zqƱ` Q$V,a+W^1g$~\<a$DM+R%m;t)ҰPO1z90}TzUՏ ɲ]2\̫:%a U 9cmu`/h0RC u&uoB3J.PkғD]&{qJ^(z)t8J1LAFbSl {[`?C7r=_! NRgqŭe!sP ݸH߶Pٓ-ްsek<0_q(hZAXJyG b=xh f`aׅ,o&Ĩ%hث\SŔM1LBWhAx9Y"AHXM4YW' W}@&|xںf&=R-W>yCp& |nzpOú{l/:?f_U/^;?b@sUAݕ-W^W@2 [W;Pm`K^un/Nԡz^ qlaE^v$GbiA:.pN3?fsk0eH~\r:-:-kfDU } $']-Qm Nr:-eOzx 2.HqWV/GIBv Yirb;sOn&Z^^V1 IPر(Xvir# ڄ/rWѝ !kk!̄6x=07c0KneXġc\-m{|F3P !S^bɛ!g3\1. +162s1)’h=J08|W,p!j)0Zz ¬4D!cucoC( l P # xN'ڢja0I;g%hWV *%C֐7UK*" lPEkZ^-qA8q DjƷFVurm3h+е,_kf:DDe=)\Ս^fWV"ل7 /SaCp‚xSjX-˻F\7?ZvULTs 2 ԜhP+!..rGxI\HXB"(% ]Ju&:KCQQjFT7l/vc1>d}g&XBC;d賱>R}*PCa*ű+KTe.Sj(nA`-vl]G8Lx9٬7-%]!^ Bn\]ԖEeB*[s/今_CtզrL'"p>雿wIʽ`Iw.DŽz |ös#\1p}-w H:,% Z]gT# TV.c@><@H/QbP-L[5ؓ'L!y˿ک-f+ L^v]Ʀ$[{ٔ7&1.*<{tX-R`% Bn7!\ Z6\媏#lG 9J&ǘ)r$+~%?xsj2.#>ǯ2je]i$f%Q]ŕ T;$wy+'Fݿ'-'f\*23Dfw,1THO$b VBGk #E|翴L5N[{7zHA7˩8+UfrzG<- z$*/gƶ@lINleC<Ѹ3"rKnId:&xzt4/ <&B]D8*YR H_B|5mFP _a(Qp01yeŕ\o|;McXW̳wB935)F%Ve<#]4: b*FngM5ljnģ8K4TI M"Ly(! r H$@sTHG5ẢNdb~Eu!i!}dFEK+a1±}?fώX Ã+4Y*nXm:"cƆUL9qx,f BHȾPF4!f'rirYXE,8+E>WvL/gC0Cq^LeiIRΉRoVnoL;oaUOtJE#ӎT{e^[Wu[wN+Prݍ*M\nj{kvZ待נ`2__7Ab6'y(Fm8 }) PFD^Aa;l).V/TbMY7m!Pؠ"gI2nL'QR̈uB0ޗ.K<\rn#Tj`:`pH/N^_6d T{o߫dײ EFzTty;oE"YQz7ʀX3/-9BvmCXϱa,~eWgJIPv[|1ERim UaWw0W)[kYSܚֈ=To)Q^i5\]ʦo]L'wgü (Er+"Y~ݽ(tMט !w /ūM @h#1ũvQT+|+ydXUA4jts8wͥ|3ɡj?6]Uۦ4j#̈`ZaQw ɲQ1cC~[역[yW 1@}"P$Bj@mm2=E§3w'q\uq#tz[jvhL喧ӎXM+x$M8mCiGDL({CJ-[_z&q;̉! x eFKq?S!;R#!ȖEKYP`zƹ;llD?Iϝ !I`S 2HU2ws?BX[RQy:HJ15jB4MFp☬Qzrɸ?G%$|F|s'7O×LĮǠh~mq Ō[vgBw>x>ŬVl޵LdKL&Z<(*E-\<JiP^׌}ΦNPd∌Rڸa{!q֟EjucI9P(BaX.R^}Tk'N;`pXEp;vUQ#~ή؉j ^$* 4`Zb?]tv@19|}MuIg>"@80X$DE!%,!ݓ^ ZxOD?hzDzDz ,SO ^J4^{1CSxy W{:0Fs4hdE$ェ:\(12YG*I|U)UU?3#B$XRJ9j5MJҥ6x$}tGW]>nts!$r?=+rk{u( \!(^RHKl# |7Y'jMneUx'Uy'幧Su.N}#ksn,^RNAD}[(!>(!ـ ; p]mR|Cr6lU?~\*4GT[t 沣d{ ,u?_k+qu*1 (-z^8n^{j !=!Tpj<5U"T~>Ђύ"o"j)mb Ym Y]ۯS$}q88}9>"ZupNni{WBVM:T cUcRn`hWEo៬թPtTzH$Fv%(7Kd#AnN)Gz$s&1Ң>3Â/H iDgI Bg'GaDCG'eoo~Dz D)41X83hhehQxo[ɿ s ~J5&ɬs} %. *P, w-o *5aB|]V@+gm^ϦbDLգw!%YpH5Nܒ2*}}d(10'c ոtʺqqxv zfɮ= ^ MNy=kvt:f,o!#{QAhQ;ZeJjd{Qѷ ؠC֮6s\oo/ n^kvfik[fq0.QڰU{u";ћXL؆(WE&qgh}R#aY?ƋF}s%i;ZcLGQထ>7$.6<9Ʋ9MoM<V#?%VFܩab7 5+$UghHD`0Ii$֩7@oojҊΞ VRmdMiJobk A7 ~X^{Qe76# |jCNpR:*֒-O"V-[x{U&ABePjail+@ACp te4(-zdi[@ ;t l%ENT@H!Aq\MF13h-bMnx}ŠMDլ4Jy?;‘6rEs?ux0A)bR/Vl d%&DPy xhw0ceD"ăV% Mʮ \DhȼqIbv^Q?aݛx#Mi6g5V3:+&R7ꂰlTt ܤUjjXm,YY.Wcn֯Q+W`/^0&8$VV>u <W_ F)jFHl;v۵ >Ga|h؂C&m.CzC&;JyVoh`B%9FX~፬A!U[ִ$ٯ*#Ae0Vo6ZClD 1V\NK |!{ 4x7El蛴W  %EF?#UvY<ψjYHOc8lQr\s*\y nlp%1-K1;K2E]u,Ԗq&sWTDEsQ{aZ4n'K@~E߶G{:e൅֞lY-$$>'snڬ?i֟Z/oiW"~Bk]6r{ҵ4ֿdjlK!8V:=VJo_·_ˆ/>XpO~Fx~]w@1 3OyR[|mK5팪EnXZe>ofӲ3)2nzMSx)B՘Jd߱#O຺$O~#>#K\,_K煓-yNsA|!kE+_`b066*JgP 5 Q> ABU,jv.Iy3d 8=찋 2C0=eCUaSl%կ4|)0 #Z)D'`{UA4d9C C&YXzL{du6 Gw?,>-| {=;7̠ (qӠ׿n= uOy' ׇS0`BYg Д\fe9塧m8yƅy/?frZ zd,Ωn8 7&@c4Xt|k@Mh \NJ}@/aMkl^?qc^k6cBꑭr5͉XӾJ&;Si"K@$ N(5w.ÔF3YB;hI[W(%4(H 5*DB$TBV#В;Rxcq@1)f%B~0c\@[68(VcVbKmUQiM5+_@@$7G6l2!1IZ]4ˉڰ Kx+]#Ǎ`t#P,ɥȁ!_r)y,)x&$mũv1qO)5AoWa;DA I-ߍd0k!Ӟ׷}Q84in4|MU4M8p;c֔E.h-"NG\3-RT% ?>4_(eUvNpw[W'ER eQ=Ŋ j_"|=`I >DS"+NI/ڶ3-kaDa$3qD 8pi:xƲb9ʝG@RI?[|' 6KuZmw 2jV=xCm,n0+ܢ/ԗ[|X_~#nR]Uڽ2Y/0KýA/{xE E >x:=ej.=ynzol45DuD̔L{-IJ=UCTL @QEUW/>{nw DZY ,ac2l<ߋfGb`7B1R:a꒜xGuMyػskna%(`tKz3N#|gÒMgEIG~cqeW+Fܰ=?1CZnY ~boںg}NN[bC M#>E)\ 䔊ړ¡8tPW( 'VٸwSRJ\G+F aHv=nv^$C+mz߶"80W(Ó3LI?7܀~qzx~,R@!}cb^OvEiב# 7ǃdH!0Mب8T,<6i&L! o2q '([nmDtlǒf;vE]WT3p<:*8q=wZm{#S`p]vm?ȱ_$Ƶ$0&(y" ߈pHv-]ؚ~(aK8z*\I'NCCt~4S*c[,7u"Vu6rWaVyD7{^Em4w;Ux#G?7l'Z}%6z&F?y`&x+|[4s® īJ:C<c{&DND%otd,A;p44;ǶA_A/V(%;&mVm'8& "x!p\#m3ccS v4F1P!23Vgߪ^1CN8^zA"`~Nd`/|0r`1[w~@_BE][،Z{k|_5W.?P ̵4Z^,;{yL88gos+vGDs(#UFKW*"p01bblrGIDuًi8QʍKt5ZD'v c!uTnqs$̧Gf4,kl6K^iX^" ةфh]#Fѳ33t:_?d-v/;*<,_sY]w6\ }N9ya?s'|!SM>bkKKU^+ua:n}gM J`:/Gi`Oo*S`9of׮^Fu#Kǭ+x j7~/w$'{(]XUjz-W>'oD*#"UY+i9 C.~LO>տDO ]_3gnLya2ݵm?"yniGe']Z.'Q3sD#OZ{Jcc6pFj/ra2Jԅyr`:v4xM9@c=Wž:޿7E FnU fgm"2q;F3# B8(;HB>phÐ#,Zn0Bb˹mL19{k@ eC3'uEWےjx lUxQ g _%^ :3mrfm¤- xM͡x{LWў:4֋5"?BMY,9Pb CxNCٌt8Ҥa;!M@B)_gFz 7w>|_fF" 2P3jXw -81;&BZ5!qGxnΧNg%Z5fHi97 G\rHCVdLls/=0DC.|Hݼ@{:愦F!j!&r +u07:G2r%mrؓOMCp?%G]a[Ŝzw ]FUc:)k^k6xrKp^sWO=VkE*̖V-=V+EjDZZf?k~Vu?ksY^y6b5`G(˙ 'mM~lio ?,U^Cd ,iLҽeZbgwj+ݩšPSu[aV.+_c `U>9مff~9Gڷnzߐeu瑀5&۴][9tܛR2sRlX i24Jw0"0mZ^>­e`MِpnIeudjNC4dqN/@K$hיM+ .Y,5Tx-2"`8kM`Ԉ\c@;t3sh8W^%Y2wCSÃJ&-ӆ#Ghֲ >ʾ ᯅ 2a3qRy--꽷]A)jueumpY'cZ" +r<* =WL[D'4|k aRnh{ *TdrGa0~{ՍggϪkמ?+Lz\nCoV^l ZfO:QjC)>0xC6E)dz_\&zbJ&g'[Z;2"CNs= }~: YHiXݱ=m@OkE,3}U?P*kȺ3 GFPD,82m4~|Et1#SkTV ] ^,iEE) 1 A7S+Fb8jdi8+5E^M(FqXG?Ry U8nY8pkcCd1/휅b -eQg]m/ ؗi4c8+C4$9Vq-$J!JƦ*!ǬSA8'{|R#O|L<ϏM C:Ʈ5Ld}V5ddusB>;%}uR+RWjS1GGtÚ΅t@'h gy?4a\S3LS颹ԳCpVL4kJ(JD.! r/ܯv`>G}bч4A(H9mMe1Dҋfpl>͗feeC[j/>Aq7hԺQY}Q=j>K4qsc=0rZ0D}oCS*z7ek+8SPC L0L_G(;r$CBȠ05ҍzXOUKuƕB74W7x BRX%H"C ߺ7*ByЇ)6CO(e{<D?d\j&~՗={i 3U,Y\Y gޠk2?p@B*1vV4+?`2 oa%Jprhۼ>TpAs~Yz: R >=V&s%Oa0,:LC픃CZD$b'&NKR=-l;4Ps M%A†&;XzC +?dG":'S3BvX7*1ץW<1v _f]Nؘ}XG-ً~ei+8d#r@9̄%r Mn ,SjRR0i6ʓ+QW(+Zu;0a@:L5|H|vHɜ DS.eMɂ1)޴5,a^{*8Fs`,B.oAu@ ѶUR#u3+[$c[M!s`w''7eه1hXU~i4J~lb<2 x >>ƅ_]\x ɬ .Eti b^w<E@,M1R:ݵCg-b7eV2Iy5>eg[ѻxXz2M hݦC}(ZbE+YXg*D B ^;f$(}">W5TtfDR?4MCQ!Zާ3y?'pg\W@Oڨ1oT7;'ZYV Uk*zWoe~ּW7 @N!c8N=U,cN_? NkSzzf'ӆ^khwߞ~Y~JO_PDRhJWnX]M]{ϋFԚ0x]o<<:8^cE0 ӞQ}<+ԷpZ8~|3˼/U!k~ ɡRb >!389hEo6`ê,ze;6og ?ĵٷhn+Qp3HaMeuq J'IGK> L4/AxCVr~F$Az6U6NZᖪ^BzT,*1u(h4>nS*QG#vs8hGDX:k|YK=il$Ys;oJkQܵg+€Ȩ8zh]P\/wT@)(-K7rhhT~?Î.I821S*CLd$鷟Ic7Yy|N@hK^vX=ɍ8?ؕw2-%ڔ%^Ր"GX0QG>0Fj5 %{FD9a "Pk=혽V qx \bpf>NQQ`}L7U9EV-9s2:X0D4у*h<%K-8NGdd\Yu-BYqv㈎)g])jʮrT579; ?h?憳EVVy-xct>>0WȹHH cYҿxJ:FZϨ (]&ThG &JlEJ[GH i(vOjC#G(K&nI o)]OIs6VֻV~n\%ΐ?˗;|qc*:[Sfӓ-c_7n+pߦ:]E `",0\DZ՛KD֔ ɵ' Gas<"yDPo=-Gx4:l?)O͜ ~s> e{wݚ IvHbTV,vjYhX |kR 2mܖn%1 r:ԙi6(œ*ٞ.G0z ehz[HZB'>kr=Θ .K̸"9Ԟw,ȼ6WoMu`܉{ &G*Q3gTJ.odnj% 6#R -œ)ZHi ]`単Q3kKfEV[hG5]GN급Y ch9Zͥ*jOK䬯K1 Z[Pr$l6V_{fucXY(v٫8o[pK#n'g[WҥLI"˪=8qD EabMQtw7Qv O gH9u55GnQdzPǨLյD1m$дR;#6r FAo,m>Ç 'YWkOT%V++-uؿ`lFEN2hoSJWX} ӧ+O΂peuZ/xvyvΟz&%I>MLr&׏,K5 h3 l@CTl d |3";f1yl7beu4h82nA:> ,2 iX?n>|nv77Oϟn<}Ϟ|[?[>>]}]==A/=xكCizvמl=y| XG7C Sg]d⦊F`✄ ~ CpS>$&[u‹Zچ_~5<%0Zjt01F*& eL%)`q#@])tCK/Gγ >OVVo<{}{]=_??VՍ"-Hc[xW% pQ_ ";>nkYnnqa;{l)\>j3X}vgOɗ_RX\Z]8ߞciřD (!H.쎃;Xt3zw-#qu Be(>(J5N8 79X\"Qt 8VXQ17!gP_Kn>]{U>m#"KScTKňIC '}k`kJĈv9|8I \'{ LV"NwٹaaVnW힜6Lx 륥52(xJ--Qy7TzIفXNRg8.Sb1Zװ6j*0˓&o*g9ZL*ɜ]>rh^}b'UY P"IW^Ku$ (Tx+0O4uQzo!o0:>tTIH`My"Hj#/30ҵX?ZfBB(Do"#z.{ P<>1 p|~S8dl;xy`$xm[ez $__s9h.ŘAb3V4*snQQ5ER|e!m#14TP($颋$>>Nhș82(b=kta||cd[AqDn-IbQ}`ppBk]T2"eRCQJNvLz!i;=osezHzClWHL:)&:v!)fYQp ke655;A'NI-$ݩ˴H;DK`A0*^2i65:OUzQ) x JGM[{gzja5"ęLGaq|&M%޾o?N0~mD샢Kd3DI?"U吘,%D4f"HZ. ,$G,^œaҊkiaQSk6xϾzRo6Z(JktSk1oje‚?/U-?Kt%Ky!6Yj+zB "L_A<^Xk#It¼Ay}&,4s/b)C{Xis;6}r@maV$@KBZu(P܉"hݭ.bՒ%pβ#-#E>^bRiӛ {N3H46HwAwNwv}d4Ma`2lM&}."cW~6b(x08J,rd()GA5Ĥ^4/Z{’ԃ,~rѴ'I[r(r[[]K p-/BڂJ'ˮ'E00N p U8ꍑPV0aI;\?[yI{,AxCL 5R/v֨"DN@xbOZL뽑j$G42([Ќ!!{%JٸwC@w\=B>9A86u'l"!wbxP 7RT0/U|>=M+$PMLr({gZnV`,r4Y0Kyyo|4RP `qoRbP!@m^m2)gFi3$)n~+${B:`r"qXeuB[8R|A;6W(cޕ+$cHWk of"HGMi9cgY!8}PZo7I} OBcj?V^yӣWR| _:%:c!A[Y_]X_y)伟GMw2{q8hW~ɛ^e h? qGw*S;m7ZN&R?5;AL'~;7}Rm̏okp"%k2>LʟgIf3FA4ɇiiz3ݖ6fAL,\Faj{{bl_Ku|ESo7M߶GRͩQRſpIx?njkwykj/A!dDH$tM q4ʙˠ<*x0GDxQ(t9H4 mxP5Dk̂1jeR= 瘺! U:lK!YG>NF dz(e6P@KS4O0T F >A1'.>pf-K|}DƇ$Du`*0ZhvDN C(o@g 'QfmI:a07M7 CZg y`a6ԡY뫪0 #@C*Σբl18d #lQCS#@WBhЇ< ʘ$?as9.Q0-y+=)/T#h<*DM-↨´D%Q[Oy&33U; F:GBɬ`zTa/|IbhkT"؃(ђ<207L>.)uT\8)̬sZxPڶP\`0lc؈| sO~KT9Q0t54A N<-HMJpӠb~'a#%i3vyr>`fyb6ةۏE`vNkQ]7y|Q@Ixf'>\)7S\g#Xwڑ]&JbYԑsQS\o-:a%Ahr9.ܐBr6ٻFpej* 4S^. 7UxUJ0BjU#5poR-4=[A9F>aǪْhIVR/h NU /y_RRpr^b vϷ2K-8|E{VI|pK^`-]a ,I!qZ&JJ'jtF}MU}J( j/ g%~bKw<|S 9oX9 P5vBWdNB*ȴ{]tvǙܶ|-Igf=vpnwaASOzn1Xr;ɭbb8Z`9mX1uhwWA&6f:s,@qkY%E_I!$M'6hiK)9TLCę )6>|6 2A<d-\ҍm#v*:2G`)_a .H\UhWv8H=H׎ j;L4%V5Ek3g4" hIo 2A*lvz'GDwB*.O.ߒœjYc7C`JI T>)g`]emF, )tA.3Z]moNL>֖.IdH¢rR 02Sb@[g;8uZ'eYr$*qt4}NGx4n[WrVe68zJh(R#G`?vJ` g]'E['5 %`@9'& >?kﰌo^d?vvcWS5},f7F~8 _`F KT> O.`dmq <--ق0B|V?hŬB͢ Yxk6Н Jaԣ3l^$8Vf+QA R` fa[83劶v*Zc>Y3>Nq͍". ū%ZΒ{W u3M곎N7Ku']Z8rt]wPL?3*j6;'mV)5aգxruJu])1[t7nAlL?|+zdƎoz.`. g)=0waMѮng4Φ7h܋GqtVvvũF K0,$Ďh 4)Y\Il& [*%`hba>m (6j<b ta^hQ~C,>hhM>JNHA9`z/ &ħu)]vÐ ,;m?!yx5 "QUefI/sHygtރEi#Dx>GY(P1K-ZG/Rz%z8bL it=@D4SRGٲ;ZOIB^lIv1nӽfo36? ?DUbw\`ǫ>Iiu[#G'~k`߫y}r{M߱/ O^Af^kz(HO*3c0D~ ~Q;҆K†H]ItX 0O# Tv+ :\D:J*M8mi_r9r5쎎4ė{BNsaӘ)}$u"}i@ЗBMᰃDDA*|SsLo=f-ٙ9T%$k@K?.ңF̬L :y8 4W&PC1xJ8K*`NSK E]0;B dL4gig6s_t0%bHl1PSXK)YB@S/B!X |h |Fw@8Fч+Hv8Sm n:̷yvLs}IzDhk,')ɍN-Kv0RD}qa,'[jn-;*VcFN&_Q<{|M0(D)V ezu3d?[My6xS&&s8N&7i"=GJ 7Vۼ쮒a0H1DDŽĘFm3:qI2e S(hLbPU9mM ]&aIS%:ѱK`|@'vw-if,ے.Yyx^Rf} 7t* { Zծ 2Tq#/Y;c熬5Hi?ey8W͂A8 (2:Wc@-FsczS *6HZ$/M*'Lw J"_*x+Iwv֐XNDMU ~~fFv{L`G{yLVkrLLrͶc+껢s#q,u,.H>䜎L;˘Y33I$X0Fdi>f 0 @R}#n~yb<{4i)1dOB|%`_r /}8RZ1 s!0@UƜ)7 ]] S5)M˂d&;":yWm( ~nMEk ĕ.}"y7 ml8z ݧO= vE}+ o)ԩj<?8^ 㮰orR$I%U2GhEN- W°yĹl\V{!Rn\ 0 Ͻ4G:3#dvh,nZ=U;qOq5ꆂY0J88g|o4N.ßA˷P8As`DbOw2\.K&#e˒c V~5;i0C=p:pxFlxt*2eq.!k֜,uHr#]Omk@g!/1MpZU p..# Gjsi)t\W^yKpMwwb_&$9ɎT,dKpfl NN!WCė UiEYƛGK)#J/ߐf8̀)&!Ɏ:+xIkШص#%'6%\^@3sS7t<MNx= {#>Œ'\+ӑx8OʊFQ셄ao tN췕v@pP*>@M/Kܴ' c0Aex^p0-5X4>s8oc@c[w)U/*pN:1pF¤Ƅj+%R5G&pfP`l1SÑ1ʘi^zBhL]4=69N-7Z3}B5YI݊"`Ig3dg!gEr{S "'+ndc0؂F@WFN!F \`.cuCOFNsLΏӹ5.yXsaJNl{ GF9ZbEp>j }Az?P9RkqvZBZ{9H;iKx~ {ӛ|4 /`[hl^j E-ϣE! >t6nzc&I"PrX=/2IXNRVe Qω*Lw\@hwxP\ ج%i""|Ր)"C8e`)'af<"",GJyEbj_Q>&r Cʼn2e&q#)0ĒX'FTtBbL,$+6z:G0AdA'9G#-a("GhM"xc`Dw42 lq*2"Y{z¡bH`R* jv@:+i0#{(h.gs?4>e쓖n#) pؚYQιiIVoZt^txq~銯NLO󘺣<`Q8wj1 ΘA{AѾa f|0I }H!0WR ,xƀyxN(Gõil>@'l*IC>wdD3 cJ̆e# ހ>b)j+8A~I=qx^[N~_9v } yfqwVy: =Sy;+0EEq϶%W{7x U0(p((bw74w:,_pzc&dPl.׸ןnR4;\Mshh8 BVv%BJ%HqfXyEtgbpI6"`T,/'ڽǝ=ʝZ3~>-Tfu2Ŗ` _S zRjx[O<fB+@}%Eiyįf 6SԐ )^C3·Ht.^_\ӌ] qy7<P+RR]H8M#fI eEWf6J)|db<ǟ° 狢,` E'Am+HmzU tRKIGP_. cCq0֋PvRS:ǧ!}~3~ıq& v ..}Bg"F8r5ͩҧ6_14EVEcj4b,(Zup:m7ȏ)Kbkl>鱹Əj=On$L؄7sHwk鮋Ę^^{R^H'(2lS_8y(4hGSS?>Sp<9q꟝MS'Z":=W;;B\Ф5ot-w}!|vGwY$V(3糏ˬsÓ#23F:A[L05Rs$]HDs23r-#(O~O?cԜ?p?W)[l ia(L Dz1ֻBiw# xZ[g,ҋFN 6RCI1ogrU-F/8(ǻ4y`t[ FZ^q=yz$ m|'IFƁ-?anFve7~ ~W'θO$|V3t&>a]bQ'M㱌Zc #O=ͦ3W$5 L7;s4Aq|#_Cljc*ܴRDt: f/}B6WOV׼/!{IaubG[+~~%Z<,4w@NK4K S坙x{fTF ET3bJ' H߈9$c-A8<'5ЕXC{mE1tuKdig3%۩y~ d~4ߛ5?yW|Ͽ&OНS~W0{% s7wND*& ܁[2>##]{uZIik7@%)T;m:npƪ|DԏHRA#A;m4vGz!ak{M rKCK쁞Ӻt"Vס[öū-;ؓMALl/Fi&ƮMtlLc&K wNYsy'w׶A.%Vc*u3C%lbn}.n:8xPbsEx| E"Cڷ!Yèj3>JTދM~\bF:e2i1pLFh~tB[r(xA*Qˋ(4* &GѤpceYŵ8,p\{m'}(m4%wFD= P:Qi9NjߞԎCyIJB/1v^LW(Xڣ]4q( ^XbFG_ef4kz5o9SfL~Y1qj#JzZ=!3hHyhvq'3 X07 9@Yc6c3Lom[InӮ8R1+:Hia2[V֟OW_ iEmTma{푰6fT~t?^/u6Z >ntֻV~G{E4 @t|Q;8;0qVw]e 4_Vr\ϵ|iک'*s/c[]>_p1ixpohZ=돀Bܷo-{ ߭4`h4Bm4^?b qz⢍G'sF9Иc3hd8n'H..O#!=4ՆlQ1uфR-NÙg!ׄQڷXOrhkAA&nz@CgE@`y7J+X7·hM~pa0 `ٕ7 w2zGa_rOD01R-AџE(HPi-9SFo8,^'iюgrT4 xȠj_&‘)3jrTx֬+~<~ثe]k6^jW{RjjwƋqk-WwYoPy߬VI5vNG/K PGmhqhCq:NVT}?k/;q>NMԚANN'ǭ5ZT@~VW@sf՛8wEƉRI쌦hw8'mxPvZ'|5Ìjw%iUS(/^ Uue`{vOC8,rF]W/hQ\vEvڪPjuAzv7:0Tޣe>> ә7aø%U7qeij-Xݶ[ zYٹ˃nc;oz zJ킑FD۪pZ 96td*r9+ @u`Gw+SVŜ~e>FN{6SP8NU~~{뵎Ou7tk"r$]PU#e*;M~> fU.roG XW?w7ә/钗z4ҹTe`mVߔϧ* Ne߫j8V!ybSKG7QND>b.Ij=yWDpЏDa}W5j- ZRlb:Oz@Ww۪c6U.cIWNO'Tw- ׺aq*)ÀenK&h--=z((sBqhu~0~'ndKG˓I`b:̡1=2k&ĸ=2*A:I@/,TZ亗M={ $JuځbTHL&΄Cc^%S|K1¸>&(EdM[:_FdN΁'nލDc2\|=R.C 5 % Fs<@i;<>N.[ز|W 1/(ĴpG."PJFgU(>Q@ 7T1G"Oqi^=? >W1yS IO5z|:Ed;Yg!Vi=QzӀe&ubM w[]\w1D1r%K/B_%D9ˣ޸GhwOFa/y54'D=:d58%)Ik:+̇y<|>y<|>y<|>y<|>y<|>7=;X