#!/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=31a14115d6087f6134787e24acc58412 # 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 .c̍σ;~sr|[o9miwOڧ7G7DJ"ƾg4uS,RVYj?3+Jy*N4f!%\Uas?iL8yւ b"^'3NoA%Ol'K`Az,c?3ګOAr>!R0hfqH\9js,a.hz+=)Ƣ8 f3B`}M`YKA6,pD#k@6UPpK!#-'$0Th<<1R# ARhM9*3N8L2 dA9 Kx>J(-cbgd4@KP"hBHR{m9^ d<ﬞc`dm]]zÌA\ۺC(1X2y;MaCY7m \tt5j0C`˅Ao/dKvckj\X}@;^Zw`#vol4GCdH\r}ú1{weεo `Ie&i\M܌HYu  ̮(2 1u ` Owl78_8]] =cאַC6vLDgm@g0/ƎEܳik u{iy8@Ig̡#/H ڄ6r8f +\-NHUN+W}tM"cAl,Tv(. u +.{g!j:(c)!u kbT0TMˇrcըlQ:f7@9^~I T5#L_V_WJڌ*ʓfW<&ccdM fr{v2qn'W0D|,Tɏ!r>8@;BG%CU+P<5~H2zۍ ܘIy{b-[F QT ;M5O,zX $2 WR޹;z ~_˖5QA5d ϻY¡ iz%`='B~r 3t?8I/քLs2'f5 5d.K]\o{Eߊdv^%\ J#R4i?P~ OT&kiZiġ#NY"um< xA-MyH+/-9g%*-/ 6_G3y7N/l kT` F*ƺ!aR%<#h*_9ZsWy+q0{ 'ejw @3p[|({|aš5xgqhp# W&cWR*#X 20l 6 Xw\YBg`4x 4Mt74(eeZ1xL>lT+RuJ)Ϛj?C$4)#T\c1oN byHa,A&%$K&N,s dJ|s6&/zd#Fj 3#LN)tDq}edk?x:(R:_c@0`]dz&qa)ѷ:U`;Rg}B% A//_+w٠IH!^F[P4:2 7L0H28kz%z3/BNUhbab%nGSל McYFA'xyЙm6}q+ؽ7y{\H)ݫR>8C&>0|*vቧh kA9[CxQLA>e(H{R{֧ijΒ(࿓{B%vE7I1WH&F^A|{/i(MMp]aP0O *V!~eTJuH<P ;ڣ"W㕂!k.!)ZҸdA$ј! Q,Cͤ$ֲyC&e|. slNpp0MDEF% T!2L“ܱbj,]Yբ%cb}W/2hk+(fd}RXdit(wʐuBG`phk?~˻::7!_qSU_zÓ_Lz]c4L[U6 4ܱmU+zri=+c2սZ{!;{iǎh4royAU޻O{kާ3wcȝ ґԈ #B  yXtuǞsu`W/uW֏?ζE}a|notN/~6?\QWΪE~κ_/}тv|eF~Kfwן)NC>ɋ~9qLQ}}y> 52H9M2Q?B+&y3UůBo {ރbbgb:D^hl2~@;nijrsԥwMJ/C`F y|~XJ p(mA|fcv?I  :a|ڍ\2i@<ܐB"/ؘdGwPwtOﲶН`Of~I>qQqѹ:؜ q8aPrtbⅧ;Wg˔[6X!hgA{W<7L8ВuN4vJBA95otZR \ bVClSL'jx'j53p$i l@&-3q3Yx[U ZJ'x v2c@q~jtF%[tHj0_ phP4N XI~p#:<8)\\с =K@3+M{eK=I)(pxa$fxB/ZdN[%jdKqV*-gy:ٖʟP &-)Tn/umjSQݔ l y1BßH/T3{Wv!]^ m_.C'Rc2UI2Hwp.SaO(Ƃ@cOP E :fEZ@ѧ"CWE7E,bso_th:~]-ݒZ/i' ("$tFM!*:)=h2wK˺Ms쵐Zl=K[,Y?%PgxX 69#z|٦EBWCc3F@}Y!Me~}EX8Og}dL(Ĵmbz8c2-bZ*d!1QјI2?I ٭~A=M?GS̅`Pi`W`NC]Ǻ|zWjj*m[(dO |QC:|zTWrc uBFFf ̥ X-1"t"0:x|EI ^G4²A d~P!Yڽ :Bz^Lm6}v@/yVI[Ur#A8:rc,|G -5@M| &F$g{# Le4"L1;3}Ž躢ޡq}LNXKi:ηnkR,kR'\#Sz$cmB*Hŀˁk ?!91g#b'f4a M?,z`+0Pf&􇘿rk k6geiz%oOڬ)Vo(&vʭs !!sUae"d-ˮ$S)+~ 2(81eWO>m mdT˭mUj*Rr):N P\ȰBL#M2X Dýj&QI :NXܿ(2qrdӫ]K_SigRwuFUE Z}C`$r4E"NrLDJ*D+2!ѻ  8FN)m$we.6_ls!D2I?JlEu2-l)EzkmZ4 _0U$%8nའ-qA6eXG^b9:g|Ք?Q| K=M?zܾOh*U_~ b;?~΅{T4-?!2|/#.~?WVokOmX9<{ۇTGW{=y' !w]^oDdhQ\ǣ8zĽIx8_]ޢbl[{G )F~ߩ5 "4YXTAbjAF^Etw4ׂ`7Mg<`VB)8EwI6 P_> :m}ܽ(x3n"E[_W4M3ռx24j ;AD~R5A]YI2%(`yys GA-Bǧ֚5Fiߺ߁(IћBFՈ..DR!xJk{uԷj{Z!b,;T+c]6?֠Ȭ[Je!wLH)ePZ7yC_.~GV ,Wk{"v K(R\߭bUgur _wǃwww{? z^l*z ZDȫ,h]cq7s tV?5k5(.1HTBVʫF wꍣZu[!ͩ%z&ɰob}^XdԚ4ytI|JQt]8h7*.|*qaܤ Z "f6(Q}nz\--@i ;+˔F'N**҂wAK")L*E1QyuIO$LTC4>tT $HWǥ [$qCD<mXrKڀ+̨FD+oƽ: y, T{s*"&9ɤDʮfI}@nv0lQy\ԑIi0PFFkrj\ C@.TJFg-}U5@}DI9}{0䓦I7fOY^ߜ=q$D-~E?}.ot4)5 9~jԥ^)bmXx&V`UǺۆ>n̓W{;tYG]Tq jYءx`AܰFUFn֍~ NO[gs_67HtգwSH"_u|Ueg.3C+G";i4,[dkU5 #=f1t4F,8|S$¶TD"5 џ TtFv)oYh2#r?3˭` X/LJaR})'pN~}V2R ~63)gK-'eF+"^`c{Vs$[Xi:,}ŷy3?Wr7,49 C8i?+7+tC fk8iGI!"\pDs!_65y3t/<]{+0i7-x.J> >> >hZ߁ȭNţQ!!MNB1aqN1En7aC\J [9:^BP%+B":Cŏ"\Y-vqJpϩ+ `LYzyεka d8dޥ(EF+q](r#5~i*p峙}I"A vr8L((J$FB1OS˸CO5]խz ĵikߒ2y#_;Z-o,*ӆ4aV""R2:\_Gxړ,ϣ;o'DM- xV%)$W82j`j#uausj, tWHyIGF>jMng(%8llZݶ_9Ѥ,bxϦ_hmUvR_bjB4qI( юbN۞K/_ S0jJkf-% ~ nq(EWVKiTsEm, c}h'CA?a.'NQp{uLZ/ZoV-51)r3}!}K:QNM (:׾Hl{VjLb?.9ƚ5[n[~ՃGP\TCY1h)ABxge ֆ< %9'msZb+ˎ*F>F3$Ӽ(BBJY6-kF728@;G{pq3FR A!I)DqYJmmOl4`MYn*E#N2ӋM)'9ژ;'R*.NL3NB$zbtS4iuwf&]Q _QR|/-穋$)G; }IIJyg59Jz=si%iŰULSǻպO\hA5Ov|c{I k8 6~Nj2r5#3мru޼`B'o1u;BA:k -EpgMRz3 h~^CRO*_7V2ڝ7sið|+ׯ^ IP~9~= $Aw߬ %DN$cs3@L' 8Ji^Q(&SڍP':ujޠElco6͕wۓyF7,g"q.#}P(br(3ir_QV63 'SٔU‚-}8xWH^ʼnR5 JpDp_E?3Q!f2 \ʚ Mq)^،ƃ^U81U rӫCYՈ Gnm-ڨ[Cg`9[Δ{// nJ*\EO)gV8]О)i~!o!Bh᳒#Iɳ7Ai2qi&O-r *+PUSjP:IRh~JLY;S> J}C67Cgz`ߟ^RCwmk~+ݬc4 bӆeO\\HO@:f Ta1EK<>{nP'xrx3NjT'dvyXٻQT*αGz#GTWQ֯dJRX?ka:Pk,Mj*fwآ#q4tsG}`΁Gd Tw^V &ŃCVݐ,;>}ByԎ_GdWF;3EGynU2@i]ע Mabtqgs/ IGgzVz"޷S(4Bj8,Mw)/t=x=c:uY{Ç;1ֲ! 2;O9J+dMIS+q#^zU§ީ{ܖ29BxR9-hu qX۩U&֦At*LBj-.ƍzvpSY(mp8N44cmlif/8x9SM\C&)>Dդ\k ae.Q_ W!,NU,L9ŸIbIVo EP9b~Դ[:bup"{-1[)33Өc(7&d?_MO[[?L`BtxYKLIy.Åu#r rkcJ%P~S98# 0KzdڐnuO 8Msk3StdZRaPw7ԭaA--= ?J顃~Cﱭ;?"o?_H Zoڳ u[XȾgB;t#*1œ/?:kST&fg_ss] D9[ Z Du6!/uJ+m .»mCn%{-ַ)ũ5S1ƛb)W I!PȄ350,9h":!`u<͜)Yǹ+mu"ԾgO sWaTяǰPIHTb0Ǘ;-bJWjA\R䬉b K 2w \[ZIߚSwl.mYk5_A1"9"ϜEOov.G_{v-H;yf,:BA=8pcʞqkDap oi?zlk3f^u䅴r<[E6 ޤF."L~29-QD YexZш6{uf#50E+-J:jh1K9+KReHFm&:fVFgYH0񕑟IA`|24opРTG!_L7Znm.s|zɱ"s_*%d\׊¨h39=z8-^Y)~@WQ5~8@`-fF5u66,W OXIW9#̚rI %@2<5gSbxA9:*#΁Ms׬"7i㖦yX| CA*e ]6GBQ;HQG|)r:&a7 R(fs):ڝM.ytsj.0m)?>I$*f2-jOMӔG:  `AtqR;ѠIE`7O0pt;S.mܽMmz4| O GJZjB:=A<&>SPviڷmvva}=S>| -HƏuKy xƬRP b3; /^Ggk6tYnD~ ydT w6y}S `4OԐn -5GߙM$q&ř?[C߼&:}؞hN8)^4!VNUMaK[rU6=u,Kc=BO>} rC gAwk%>z.~5M/*Ep5^җ`oa˦рxhq}įsZz\$X&:D<d|InK&,.OE6ok'΅E?§;\R# SLG4kingmLw_mnf tI>&_) W+w2x\A$d}J} ~wRUTu`Hf35=фCX1 c[.RGO '}(vUXR1z44O;w>aGn~Iŕh(h W,AX$0Jh:฻5cz_A]x{ B t]NGI(, O(Bu TWj:aPY@iBU2 v-XXlEq뼏N;eJӄUsJ=ctNJN%Pf;8 ȓ"gM]#ń|eպ$V``ih|GnvOK% ȃ¨ }t󜹪$d w2Դ(c[iS[hWy@eF +6_J LIa&ToR+Z-G.},߅ +N3Lk)[\=ݬB`o c+#|;MGs5~GW X{7Q >LI![%7=|I)Pƨ-?t}ڬ62rZ;s\7ea ,Mc.]^AE2L3=9AbƠ/0b2SpHS4 #1<+M%6pI %( 7F+5n_C"i07''t}?H=wgZ ]A.( Uzq;8i,JKsݍ x|.{ʰ@5j[ 3S@ 5UwÆ`00ɰG/)0" ZaQ;|[KM[9 2 g%{9vfa ;z`̏ٽf{'#! o2ȏR=(+ZeJjـʣ+A:!+Hжuaa8bB^'i&vuy6QdN zKExL$ˍԂeB9[9:9Tkw(P)!(G`wxe}c!G b, y~5"y0v͔llqɗy<+|<U'u0T^gjI<#6_j~ϊ) 0}I<귻 V}f&V3Adk4:{P_'dN7J\M&n\̑%*s̥'Wxpߨq33yxpDGMFjp"w;3 TZ,jmx`{o;wMteۦK:i 1'naBMkMbvZN[RCh[9T)kS$`!rú-f8E20S% L9(Ilk7w7 l^}~VLQTcNGD_;? cAҶK9}etwdDZup,Q|9Mjdt@\Ǣ"ߡ2J`'VtB`&?tڂ&H-hK=RS Fc 0E`y?n%Kνe>R:ӛX~-^d$Tzͳiԡ lۣnF5/I:t88cy,Moz3Irz'#?ȚuoL t8劑s;2Uew_&i A/')F1ߕk^R(boǁmHsMYn:|V'a,N& SE6ĀNrpL+R0} 29\FM6UpF(PD__-5O xSSS<~ V&JJ4@\ mz6^ wŗrRs8*5,Ryco3btƃ^UK-{!"T艹xh5 {Z|qsy6- N42?/RZlAYc&ݞmdgkݨ~G| Y<|3*OGq&?ތ%`oـitiۡʟ>SkPຶ$O=ڸ*hF"3}r=8+նQ ,Z!JO PQj3N񤡢‡N1o呝c a)?a&9p` l@߅SrǰCQqg0gc45D7~t䢁 "B%a>rdy$귥hԾ(":w 咓*\ݡhÁ0vr)Cp,SMM;>r,Y2d᝕Ke/2\au,9塥~m4`¼J62R?}<ꞖO xf_ %V܏`4fXI NG 'Riz Kk6y\Zq|\,kiM2y:%JfX9~4ou̝Jt*uC 9$so!yYc^&e Cdz-ApЙkXch਒E(%?g̩}%8hY&n.Hד>kwnwLRgԑ,]xF"c]1d6'Y-龊MP ejpw!ݱN`Vpœhی BֵKxxhV@;ISJx!^!~,:svIVj%QoW^5koM Aa=d 6OGXt& 5nv'!Ub ׺fq;FrYդ\-XXj[E^uC  %EN_+wu6E=:d,|+Jεg фA/>\r6'$`S1i#ֵۘ + 1VnLf* T?!߳-Gã 6މ2hyk&CBh`],28`TՍSr{_l/]+kQ$ G1f_zu__`Fxy8O7̵WRĚMC@79rJ=P˂zl]HuJo%ua<N6ICMsǎ/&a0@N!rKmT'J_44y_#6je}?9'CRňՂ z:A28PV-D=`XPt1C{/L{w)~h:|Q)$azErPʳ-g3b2.*BO\zԐsp-A[ j( 'u%Fk hqe"lN'Ԋ`5oj>sd?iAj%qf[3ml  >δCh^=a0TH0B !dY|O㿢a`eRs2ia3SSo]Kj2$z|Aۨ ~K{n f;eDC9;;{.Pn<tg':p;-Kc/M#pNSj<|_M_7xHkC1z1ܶ )x1~_@hQ/u f\;?~8 )_j-l ǂVn8?ō6z"b5V#^ҍaۊwkśUk L27Y3=v82bL̓qp":(x?CW~?BӅGm ]`7cYj\kKIMJi2_DGI<9e݅taoVF?ME kډ&}{F)59F_7ȫ‘du(F1挑Ek4S: w""Vm[DH{pF%yP= 48:<:hT78CAs+,N&L*od tƾ}@P[_WcGlө3N4BB/|[49ag0+3;jIm@,^T4bZR==d/v~L;eY֤xAHĠ0r\KLdIbH^ǒ3M]K=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-?~z"QҽJ`}cGCV$D=3:^&aHaSGIo * c0Nhpof+M<4Å{Q<@w<w%@tMHftVZfɌ>uW4f'.ݨk'}4P8LeZpLU ItJf48lZb9?zӻ{ &HZf>T8!31&G/Vqh+_\6 }n年q{{}`6bOBYWpZ?3ڸ_^{W-?3ߗpt84ؠ#,FO&WV*+ytz:_nt#&h󿺲r|wUZQ+@zp:#_W9wZ=g| ]?_a(Α*?vK/u;'D!Y^QqdsdGp .{6Jz_=,~:?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ɣ ~g&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-rM>G֭{L@[eqKP^xyVKSTKmQ=|XZ AwVNE撃3 iF'W-uhV-1;CqgobmJlVs]M`Q9~v D9e:ٸ)I6Q31j^1y]f|rB.f+;r'R/- KhrMK<): vkw+U*GxƠ{Xۍvdo#C_cyFU,Ħkx{eܿCTij3bD<F8Oԋv:'* )"+x$[Kq2ufS1DVyamFtc~ց?A].V "s4O?;&ഌ(su2@,L-y.s"y"H/)@gy-pmoQ*vפwzu7'Ld%zU,!Vrw8w<4 Sc ΅ObT-8F}L3K$9j46\C%s0;Ent ?>!iBD >MUɸ. Jj8|” ڢR\}XuQY.Vv4 ay 7zova_QdeGXjXyxv&=8u; UWHϹD uHh(!dMnn0 (]I)tnI:NJ{GL4PirFT\.E֦e1Cm %wA۳4t~<jDK:}+EeNm՚v!x ?4JNqC 60l 9D2}2aq ]h92 2-&qcmjYWKD|kOu)#A"u:[yE{˫O`As96=3m\5vZ^nn94=ejʏig;تQV$zû޲)dy9lP3YݪI⸼ro PG^tt6%,[1=Bc/qc@%{畋\}9s@AKp0ܿk#!vLqVorLx=@м]R;=6z qHCLm>uK۝tk7`E:}X} .RY[.>W3&φm\$U`(rJAdRXa%T O<^^o=~$Z#j;zzj>(LJK| rY^, :#)׮Zql ״?(|([W=ZyrzC`P'H n(FJ8UpL !t`) Z݀=LL+[jtwڛO?^huyG[NZ+k'J\ QYzhxj5D1kݚWJ;HIG@E3ua^ն*+ iӕh1eGkWW[OO 2#oFm*.c;}Dk^px$*Ɍ성2 Ŷz5äBU%\|? Ik}5j=2GϢgkVZo[GϹEA&;&J 'O7n~.;XeW>_'@vlfKS.Ά쒡n?XsSR]qEԘfG.a `?IQBDZ/ $9XQl 29VXQ7!g;Qo v8Nfh}Tg˄kvJzEί$_!_Y_[|G7?y;7^)?9~T)M4ڮP_ xȼsy͋/JUȭAz@R )ReO6/(ʧ Ld嗖294tʯ$Ow )CPӑEL;b N™,6+< 'c_uԃe}~U`?N4X(lܨԢ,egT X՛$G?G .Q.^\*3?ޑK\j`?ǸV?hwT=| Ja,_6 X\.\ Lr)}>ws}>ws}>ws}>ws}>ws}I<lX