#!/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=778a31f58c3b2ca110e3fb38d9c3a34f # 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 BaDI+J-DB|eS(RX,m3xlι0U20dho~'o/eq㗇Gt^vOa_Ɖ1MSGϔg"oyzA}ad'^@cGwm+c]/N"o" 1g^0N-s/Ud䆅 YdvٚG+/IQx ^dN [5k1 ON,x+vIƂ0/f>C4]u|[#@M X tŃΌ{ȳ< :%0#hD+mP@=$HA 4b9:2gUp&zp|@^5w`{XX+`|N5ϓZk}v:5OO+]}mj0uԇ֑9gxjjuL{7jS':2uh2}M1Ї Ij@7 !lNM7S6M'cCc(\_7zUj6pTvLf\AUV@3~;Ҧ(@YTv@Cb$j_j=e*z@`q5oA; &uAvhWOQ1Uazf ("QBV6.6i?F2D5ξ5itu!Rt`uq2G!Fz~#'Qn(Rʞ|b-t*6AvgZ䴳I[l1;_ߛUT|1/&Sy_̸5h跎Z=߆d@*v u6 '-~GQeKY{!s\~];)q;RHeǫN\sVjPmq{-&E#@`]( IC?.7N3 uf^ڿm ЎeH6-m'\X+p ^맶fJ:䘁K[v"m[نZiqV>v@ Ͷ9\qW~#!P dІ}d#V!>m(*{ >=ťvk@`?a z:6bbѦ#ma V ({{0>F6DT_X^%ޝ0  ]@7k3&:>nDh+d-;+{H7YT*I kW($!i]ij?뽳-D?ZYDx@ACAұ׊#'2Hl ܻ]4ui~G@Far J}p|r܎ٯ6[j%Y+{GY +xT)Hm&bCy~I`,q̱Pr97Rf#D &B@êO̼ᏠPԲ mbp *+CF:`@`N#n˃9Wa e ?c`~%D /BtMtMclۚMqo s+@GrhlB**5j 4 apڛGܾ%lCDa$۫X% "nyTb df_LLK|b: BspSu}k3n2ST~|i1Bt/)^!/ ^IAAhQXs%N>bvƮb4T'7|GnU?^}\B4 bokpK; %MpGXσǺpxS]Zy@-~5Ljj%^]G^~ /iR N֏L’XRG._`BaL幦![ۉNo+y,4\97-IED.JD89Kd*D5Dž/v!0rF5&KM4ڳeȚ+P J%V3ziV^lDgJm @974)ڛGpO>Xlyr'2U 6q.X Ƣ;ޅK2k}K8ǽ8 VGZaX:nՉulY;kГY:FaF9W:A iLYfx`}{P+'ĸkrZk[GLɞ@I$sZ~r݆Lƀ)E`C$feXhDSAt Xl47?`QB3Vߵ5T7K}R^@^`?L4hߧ6`KtM磖 ZϝĜ͜=.&<ղL<}#tE?q`_ܸvU`ТAh&k5mUH#Y0F UN+ ð6 +^i* 1Dv p'k Vb#z:~G)r=! !7#[X0:ꑓCZn߹̺#P;aYWGlUj} ۠Vdf*pۥ2x1+/؜X/M*KX'R/;6[CFƮ l[΍绲7 =ҐD`ʼnF~`X,?(0vN|K"+;sړJ|*U9;0f,+qrd,0[2L+A  +Z(QYLrāf &i62ًaŽCECl]` I=$nnh<>6\[iS̒`/Fҋx}-b%!*fYR-J>*3LLwE5G*כ~fR_ف \u$SJ oL7Y(X6JWΫS(fgYHS0wĢ,(k>gF[@D) \q~ ft;*nCh]|u7sG&j dFP;mZMɚd xV붏5|LyA?|V;IëY`Stna澼c|k:3Y5e[ٷ;lU>;*y n;=[WW?<?P>m0#+]v2 CN }66/);)΂4{DAn=@Xi~*#D8a҃p)}_WXԁ+ՙۊ? zq*{R6rm' ghR$1!0چfflJ)бT&n 8di,Y(P͜$ r=@ZYՍ<#B{9v'"E[6c˟ULRZ짊s&INX7ZYxn⹛6?@8vd1I r\-ړ(\Fj:8`!Z\6`1twVvtΫWՂ^n˒&gϞk\d)!piXQX:oDsʝ lSg;Ct$ҭ$;Wu)vOP0`kBd@AG- . ?xHڟk㵂JyoCȐ cfgy,ZcM ],䈐kdN2XZqWm +↩" 7mGq,@:j-M/o/6O,u'S oK\1Bݩ߄OdbSn|B`[}*8#/J!d]*!a%l(>:vۜ(6 ~>opN鬳7]kLE_*>-ْm^-l B`V 5J29q+8/\yoA;I uKU<Eo5j]-?ͩB5gwSk( [|6G=LKħxuЂn yT~T.!o9/@C P*^d!/F@W pZԓ%xK+EJM^QaL, NTtG;Xl4F ?ʹ 1Ώ{ 6@|l2gaw>}ջ-b2OglHO.ut_b8*b0T׆ \ԢNP+!^3+LPB5  r^xI=mĂ RuWv%,Z#pY Hhqv*!`Z-p"?MnEd\k6hP閻Td9c 8qا0HpB#zRģѥ+J=Rja#-1M@m;(=(+07n'@ <XU= QӉ_3KL?R~kPU߿jy|[^SQ$wIpgYK#̤eB4a^%2Ù2|n+ew~7DâQ13d s8}DJZ• Q=GbFXj0J[U$*PUw=vֵ3Vjyv<wKҤpd9 ز9pL%%'DY馧E O~ GD11caeL$\o-S3bcؖſذi.1p3r M#ԓORY(p%i%8'Mcѽ <.XKxB}lHXVfYo}+|tgI.h6og;UϔOR&,mc:`Z)R_5ď<1unT-veR3 Ш:TG!^ 3*y Ij# !G 6 6;"f6+V!S37Q`B\pp>A`Кj0ZuxHO8a2 )f F#v|5KY# S'j 2:P -' GxӂFa~ SAUqXFJn!+.h 'O'Jjd.pfUkdp)dxGߝ`_WeZƠ lhbU T?P({i+U A)[/Y6t.TMHedF0 X \烛7 xǿ= PT2B3&[VtHLB&L*tڈ% y5>eg[ѻEg>x¥vLL=?L,n;&77 آuBwjga OApb{NX& p @ߥXu񟆓Ί5TVrgDRϚ]}V ;Fe|ӿs~RO˵ee?b]e}>VddAi+nyh4a3>iue]LO+sd{?i=%SUw5ߞ=מ-\C[3JuhC>Z*m\Qv`mK2jO:~vD uJ5D%6X0Q|IYٜAA˃$^@zk([7@ƻ߻/J@5@m+&&I 8VCeoCBQ3ץb.!}펦ymOtDT3*S \)ŴNC WkFkiuv^lh:ԁ v@=#ժ?'Dw_6Q(kMcՠgb<> uBR Q?NB xqYvUK80cf[UzJdcr qYrfonmHކ.šHl(Kïҽ1&5U4`1wt<$Б0HDPell4Z N^BMzSN $1fw{#}Mt# ¡-KI6GHA%Cd_U9$f$,T!%1d^$_R(bX<]88\VqxY]=4,jP`MuUG{M+t3k1ofegipgNJ06LYj+z'LbCB@ !{e߸0/pи>T 9v=\,tVND>9֖2iΠ y#N&!TJNYxI]<3R:uV_:}Y֞{Ex$#u%f#EOp0nj=*W;'dFNAAr;SrM8SFI2 4\a'9l;ӈ=f'94e[Q*DɒAQ 1?Koyd#,Y賲V[';-εKRge']ZPG@UOmHRzڜ0 $]l㳊Z@@gDPmKzKJqN{Uwyqefyx~8tsLKNZs7h̎ *3-''~h]W:FVqtdϬl74j`nwlM;*><>*I_XK:P24T+=̺f!CQҍ @r+?oLw$_3lg^T|~L~l+lI. gnwqy்9h%D7ůL>![:5*V,+)Z٤%Ur:mpBJF-'W@,. (G @}¿$]az껚۫{/Jˊ!WaV7 yiP8>5,ȳ,,饗N{fʘ{pۺ`taLɋw`>`"9VQ-ZG/2m"+!P^>Hד$^Md/CJAzԈr;}i5D9Sfcʩ1~Ǩ?b6H2LS0/tZBS;cvɔh<τˀpud`8_=D a]A8jn(in15ވǧ G!kM\p A p< gV%H$nI{A-.>QEy9od=m·[ |TjI֙-}4V(;\6B%hW#L `nT(κk9"|׀|fNI*A8 1pM''0 )%` %deۥ6+Pc7SolN51D>^QEÙҦ2v`4䏅nѡcm!)BM>;MaGXQ{bnL-kƝPGLEޜPxD=Eڟ5AOv]ȣh(=o(/#L]L3iF )>&o熿'=MoC/aNXhrDڐub&Nc@x4.̕9XDLTUN#-3;=J({aMd*PK%Ҁ IF}Zz1i0I?XLu? ,?ۭqtF).re~ugmj̲eMnN/f\vsphjI_Rtf8(% *@~3/=o$@Z Da !>LaE~N-1ym{Zy?E~™H&ߐ`A^($OiUٰz7dUAjO)K&7F3]~p6Vvģ,ɳ5.W/Ŭg)S !-ɇE5weTOW^csy2j繏˿c~Ɉ(P0_%YV)~e41E8K3` Us}a.`? ,L1WQ wh璘 5 OmdV>03JMJsŁe-$COWoՈ{zuKٺ봶ۯP,ljyܐ%1X#rZE҈.UGi q62ܻ"In/CegsQ,7P8f15[ȠRmnWg%yYRTN0-`S+|mn$qP;;JNBM!2lsDt?=,!%E\+㓎?:fr_=Wpf{+DW3E,vȖ10:-gfn߽b+#I@d|̲`&zd g-Zy.$iD@]S,cȂ:O~-̿68pEEe9b@7Rfal#&9-Rn:V^\C,k(S.LvDt/ t7%:Põܴ˛f+-,|!y7 mb8z_puSoCm,lz2-_?X)..jsG8!QJDI6J$AVM'9bI4qQ&2 ϼ0G:2Cd0G{7ԎZ=6iP xߌf]]W`vdH%17r^wfXßA˷6\D(*xhCYs?bE BvxNc˓c V~5;i0C=p:pxFlxtU8Z,er QFvFs^΀g.0LwLN55 GyG !3)fiR+Z}զ 13nw"dG*cl\[%NѢ͖ 2Jc3`(䒡*3ˢ(x3.; 6Tz@F`<16ܧ$[.M6SI!6 ]+=LA]ziM[>Y0I9C?EXx3\D!88L8bVEc=O$%/QX@SbQ6;!aX[]\>0~[YS LM{ZY,<<sT{&5NBGk0Y|` eȀ4-S@^f;!Tub`a#F#B5 `i)I/=L-w`A2&FW޺>3W6KMNcs vfZ""IU[S$)f'#BBiɱ9Yq#Grr=f47tDЕx+gȢ7DӼ\j8ӆtn``i.e9bnIjD]"GhQx~pCN^_gHyٙCh i=xܺ9KtCr[X~zGE{[KP$eђ<]Mg7fa9 !"Ә$e0Uܬ|͉l;u4?΀v'3%ɅʁZ[J(+P.W i Y8 (;S&ڑp@n )bBϬrY[Viq} k`n 1`^n_h *Shr?;eX Py -&̉ '!YԨ5$81Tp<<n ˅9"jEEi*Dyc`Lw462 lq*2"Y{zÁbȪ`2* iv@:*m#{_l#sqrKFV{2Gn#) SpؚYQѹi՛]7ۼQt{=M'UqyLUqYYc0 jgXh0n|f3>Y>dnIRŃq;E住>K^7d[bM&I,-Z]Tv'i {CLRs[}yO.j]-hS9Dd Ϗ%7[}k#r~6_J 䁻0.N" \=/ vQpm$" C2І,Gg(r."LcBxƀqx)F#6iܱa%;~U ?e 㫥 ՞˘ωf@nj NYKA=Q_ z|sϣ!lW O$d)': =Sy;+0EEq϶%W{7x @-ja"fY,P S"‡nhld8FvGLl(i_n/dhvq͸@F};<`!BțߦJ4{XAIT7Nk,vP cge*kvakŸr)1x{ *3|ZntE/x-dZx[O<&R+-ӔdI^Lh OrCr+D18 csڑ@ < MY2Ԅ] 8e^.qY ]cV^k粏ǣ!n2Lۣ{1I/{9%@YHyLOIZ,aa 3pBfZoa_'nh /PZ0C7JQTq [2m𖴌:m,ϝX=7<-q7ʬ-P)cFSq#+u `d d9TՄC]:rb n i*R4sdK??#a)7EAYZEAk_N+QVmQZNuf /]UZuy/&'G}9+ X/BMBK E‡ZиGaQnV$P<'=(XLHTS0-EVEF#4b,W(ɻz{p tP#?d,ߦR?>1`~U.2Vc;mCzAfIx!qp|*ʰ[XLuРaNMO)Ʃv#4H`鞫t!\uhϟmQcڠ{1;Dյg1qQ"ٮ.>Mm:I}z8]FL/`j]UU*oMXMFmt 2 ڟ{CB\,=-/xkZmU2/(R#b>{/do,.O&7e/qgQ~Y_ Gqu|}'ѹRo{j#:[83s4t buoV̩diT7Ѭ;fw2n>)YXS937o.v>Ofx.T,EaҢEY\)5Nt~pR$q8"AGdfw"NXv~gVxf aꡱLV";S PT%A+{T@)TBj/Xѧ^=d[NcB/^a<,v[u)\ 3Aa*( Y 7)OP:TGgU2kfo#Db5?yйQѰzw[^ϳU.Z4+ʽfŒWiKa%ęFtPֹ@YYWJ&Tbx Q2x'U|ý㒻jWՐGh5|/| k4wt(HR:5 #=z9ӧ(xiLps)25 z3FNq^Otÿ% *TJ;uёm~Yw 'O?:!*a6@+Y>b 51 ق;7.P a4"󐶎<ܦHA6$kjȹX鳝5eYK]3S:mҐ+!a2dyQ+ERhBQZE#I$[ZW/e1P_-~Σt>#@@Z 'Elsڬu_,Tn~q:y:nmm-`ڣ +=৳| Bao*zᶦ̢/T꧟ƗJE-;L@:<ټ sL+`f]=X!*g#דm)2 o#yDPo:Sx!Q-L c3=?e4 h<~ I;aןP z & TAq6AX dZoX!h!1PE<$Hut҂6Xl1E<3m\oڂ`n u4{FS "`v2>-TKfJ^y}ԏ *ΧҥET-@laUwwTE)H+ C8WXPIe4)5)V|^;Q;,Wsԧ̙3h %.$.Τj% 6mK)z}j0 AE$4KHtع@q04P5K9(`}M5'L@͊c8%4ɢ]w^3@Qy?8nO5gcD˖՘̣jjGK! ʤ/3R#Q `1esn6wڇGwƛimiiLU#j1ERO|*$KuL`aXt 5gW$^1NCk`ҨPD:38Cʙ-n!)p=Ԟ *O&O*dy6[RiZn ՝9xfQvk$+: )p{g MQn)5;:‘$)BT\oTP{sφlp HPgwGo ~HٳjlivVNpy 3b(E#CZ&^FcqDsj5Z'{ 1"\c- mx]sa.wO/Kp ZV_,/ugK33Xa;Q%8F½;5t3;Ȣ$334p?Ķ}܇AKjb4&γJyX넫%O_եKO;So;h k/r钜9HY޼t,JKo^ Q.!vsig9y-&r@`wxL>%t=YoMFY"L!3!Ok:1DMuvkc"Qt 8VXSם7!"'7J;[D۽_x5yʳ^ Y3ܓtK 2, ΛvAxyN3vS6FE}$]e$m,I (BW'ݝ7RʶH= YIȆ|sNER '6mJIzCj;7$`_$NKELJm"_:vNؔfǠIip%p_F I-(m^%.ښiwxu8DK4+OFV1!JK)C-)K4|wfNF)XNlM}Z]oA/Kf6N@,B(efW4:R]]6w%;GF3X\eG,i5[kg Îkus2 aa'qix ~PKnyh=55 : Rz_vbBmpf{ 3lu̱ٳfG foF2454Vߜ#C{QR91&hI%T}~ :-Y%u}\(#ZZhl5 Z~5wىC8L~ [Ej][l7rl&ugh}Q-.,gk[- zBuA. xQ(NzOq8!m-X/%Gf8!Q7 ͎0 -6SY=˧CE@Ǣ`E}*jlvqk67 U hjI$egFk ڵ ?.C%w*%6  ɍJJ"A+pn {r #6ɻÜV~  -pqs`<٧FCB6ip늢?'rNlĭ?\V@d V[IJP-:^]AkރiBlX+9Gz l G23~Vr}MsDٗ)J%{&Kd )'~6H՛~^ucu04 J" y#yeBYE= T&~&$ 7Xl˶ObAqT2wVSQxF`tC9/)OB郞Ti*zj5'qBzwᐽ~H(yn u:)#uo0`yZOT*͖h HFK&}C'3}͗2Xǚ$iLcuk5[@ܥm5נsL9@x/dOBB&䚳ҳ+Op?í|x g/)vd4uJz|6dIyoH7Ho{b$^d:!6lMMq`RD i GN lLc,EF@ۡF٤VZyNoI;-׀SNCb24Ao^6\^&Bkԁ@f„\9&ҦgOZ_`fA$! =?Sڷ,CzdXm AnF1}9,X3qRoMv OCZmLS.mq;fKݨgͬ<aؙ }y{,1gIL0};PWJ3.ɓ6j# ;Ff펮>+dpBCֻ:M` ϶PSj7A5 䡡ҧ^Ro )CR~Lz#2G@Wy0xGS#&ߋXAޓV}+SVW>^{Z2ྩ7:c;4BN!\Y:OADmY 9H6~I|+ZT_7eh}mNh,t9p{Н9<;j|0]x:=ct @5?V'^nzlj45DM:"aJ`&b!|h*f"_R~H=raz16PeG""HmaXUj-K,D oe%NfG;b`7Bg%)+1tMxػ3ߵɶq _7mt6RmoglPdgr4vc,k޶wm4D<rKyP{&w`d%f8y`ٛ`4[ȥKNhiYy@޴ &FV/{Ӡ-1㗩 2b]0#E5x\++W> "BHǵ_dz4_MzӐyQ,-f c3zڕR|qdxm= 0Ϥ+My>T̴Vja_i{Ɨ>W>NC"EO> w=;C\!Y@*6 7@6)az>v;ՐjCDCtQu= N[ơDV'O6u1sV'mcc{蜫hG^ݬadÓW?6> _X0"`+K*Ҷ#b H4$2z&Mb3rupb)uͽv:6vM \!_6v׻7nӧ8e|AWs6,g|)ay0C8=hح8obI!k,rNȈ> ,Ж.l  ] %fRShԏz*\I'F! NP3DD7EZ)~2G:J[vm,0JRz% (4E2N}:k !|f{h&M| ۀ9F觹3O4DLVh]y -ZU\)ig;jQ`%f/w'o?6YHaqXB`rӮRVs:VY/'qXBcə̪)u.z(FA߯J:C% cQ@,H2=bX,˾H3Fߐ8j"@cu0K&lg}|=> I a  FWl8mfo`kBwe6prF+W'Ǎ\877O:ֲ#χUZga(k3`UewuQOY46PRv5s|yGc nƱI-mf48B'ώ9phn ;3Ȯ8/3&@svf/Dx9.MlšNZ4/L%J !lG Oڜgɇ0)Ǐ؁^1>zA"`~M`/\H n|D\3A C _:_Kk_KJs/1xQ?jQ].~s:!XBd]FYviehv$ndZ3($y +N?4\YR{+,>@!-8%&+u( }` F"6,Q|hV#G7캷.Q)*yRVR8!>)% :7RâXYYe"~FGLSxpʦ&oCS 3ԓnlf`64aiI7JZE6PEEZG:Z)OOc&ֶŶ1O\3zR![rs0l.ݚss8h.DVRpoD&g'tPihRBQ 9`k&+țCK݉xT?JW>x>w%VO|v덂Tx:7 @(n4 (P!-{0 ,L+n?&/ SBىa<Jn7좟V3 BQa1BNz[RȊj2r% a~c"^8%tayC0)golϓ)6PӉBjgBpp6ƍKRJօ_BMRʩl7vBj-O+jTņZ J >y~1U:?ٴR.f2HԹ.;;LoB-Hf=vOqnM |·gGx/avѵ G`0dSބ(%(hc=PړJ^f L?@Rr'‰h\.dGhcJ ^T* pQ)-HzzUp:}c_.BpC\9=B{z-sIxDp4YtGZ]ujK!õl^t_<|{؞(f3Tl=^NvR sPtiՔ:@88z8T%L+zR}LaRl NjNs؍nI]'~ /I~*qj6Wݤtz<q/f6:愫 :؎qY-dB[ROR=^~)S2Y]&3˔1yy-֖&9r2a\NvYu'ݵnv F]zH翔 fhgOI+ϖzG &oN'm>nx>S>_}qEQdg~1LqR '^:0 rnKJJՕ'j^cfJeinpuױUM<æLb2,s KO%GLFf{x}ݱfU>~X~*[zfw,QnН"ҽ**, ;sUXsUX^/$Mi .7ߪ]UmkC`\f^IOM1)fGeI_X{cA,'D c`E@C,dG>b4C,i812Il, ʼnWk`&z6%(9o?OУ=6<~_2*첒Bb%6iuGf35-S,졮dk|Nm]\uެ$PP-9a`u6 :l6l5$<$x@ Mʚ>4! ٩r`)K;RQ"% 8V4 g2E7QX6ž8QvoD٭hI?%N)ibo-w_4ێ=dFs7_9et6|bec6952aYwPp6#L(Mv(D?j6)CVd2YS7I.$Xd ̹PĮI .q6L' Eb\a6m K q|1ҹ2{IO=ujnAJX`!$ jfԤ0pұI!ʎ /fbp74D3lɼ?nQFdMpiX^E̲b{-Օ~5֯//LßkH)3FC&i+o9INY40wVUX%kH]?KqTZ4;&v&HRu.LFmT0o\񴏱GS)Oj )'njw:t,EQ)"F=KoKeA |%x6%0I6 G.P^=6_q|'ȑ=MEOI9-p D+ O`aKc) sPJ]ApjIv;iͩs3 hwuŜU~2=p{G0mz Ns1MNϹȋE^Xl}~1%?8nlXx)"Dt%֙U8#WM0IhZ@pHCJǎ&/{[4FVm5X;j]1~)|ى2'BE]oΠ#IP Ra:v`( K,m[E'0*0'UNG2Z11 6'w䢫OL{xq xTv-tf r)uLky8 "o84&L3]G{OaPX8AԗF3a3K86UtXt`oѧXlFI:gtLipU!pO8!)us %Q/Z`F QqU+!K@.q@e{#0f}pPOؘ!j8$dL#' 3 -YZ%  L6jݰV;(l6̩v0!r黝W#O_*l>5hh9}镺LtPGؕ=u E 5?G]a[%xD hIrw!dc}Y>28żQR¡y#`f?IN 3)8;ɖ5s w% =r>Z\(#E|3>}awUĞGF(Wof3յQ|ި W D!#AJG,oELRqyEʫƋߗpҨjT^<⏭{Óc,usJ- 0lHOR"7~:<8:^_yq:7T\w~<9Lp #r:nvz{hhhYlpe ^iX[W:Ŋ!S * 4ܗmlYwBГ,k}Fѭ?˓& ]~Ps٨ߗXڲpz7?iP 1(t~G{6&} 4iknm7VT}Rh_+iqwGo&y`Y.lc˨i5/y vvm^HQP03P h3n%A$@7hQ`'D:.M*SSX܏mR.=OC]]8c|%B=jZz|!ؾfrmmy޽^O wV gƪMyue)&Sd/ل0=B'ʨX *P &Z0X:-d b7ժ<3>ţۋ9qz Ee1ky(pI,C j 0\LʳfAqI94v[)D0(C!1Шe[;a?P:&۟HP`OY\I:sAfםv?fJ&u(' jf,W^зB+w'Q+ԾȟH'/F}$W#[EFQ#Ai訟*Y#儈uLJ?6pS8㨇L ҙ9E^͖j>~_?j(N%;:~Po;T}sxPoAͅ"j!n61hl*Pv{c(v|P)bjkmW>:p@'#uxrtxjqZ;`ЧyY_5`h}<#jlmX;nHv4~jtG*En(/N}LKwe䨱Պty|rPovh[wMLevZ^'Fz8W=4A:i5iِ=::! 3cCZ_dpBGQ\ZJ ;n ulb45 LVQ;+EL)ڸ{t?l$10(Ҵ0n:^VHHHnآ~-dl@*$anc< ib2o,.^]]·(:_#^|Y+:p\Gɹ.`14OljR+j^) egn”. τ\JC-iq jQYTF'Qs#$3ɬV,4$)6(WL97t$`7+4v)g<~ҜZ 7˶\)kf*]a0j$/:;5hO0ݕ70qǓFmSWAorXLt"tb8|f>bnplÌ@O{kMfFq mbmkA)V)݁|N:1lQohaDb~x69 H#\]yB,mo^&BD`z+7bt ł]1`p `.UaA$f"H΋&'7&F]Ic1}ε*9(GDذW/l8О:-.$8 PA9 Y׊M' aiëP09jc4åPDNPaL;d:]o`;71%nPzC@37ĿeqQU9SLJ%R##` 'yP.rL.FδMGWӻSZ>>K#A炏Sޕ>o -9<'@1% ;,?택zDe,KO++KP=44/ KxRqE c,ɐqTģ="G;{6|sID &E_9{`*x:.g؉\K18ȿJĘIRuL8iq[7)wAoӠa i [x <&Pl^ca@iLBu;"rM.ħaH-b>XMk6|,.0]"pꇰP*>J[A%lg oc=%3 xk1|=Sl1(ӻ 7It<Ix\C"FN&qc ѕ^.unVPs JBa8qA O;alUۇ'A"|W/XNFPO<6o9>HQBKA$aI~ kdd#3Њ2_^+w#@%\|bU0` Qx>&r/t"ɜިi,g:GFH`X8qGaKHpw_F"ߦe)!vq< tP-:o\!lsD}OX%Pۏhr < *d'*J$U-l a'MU4 tAv-0jLlWRɆ{3TJm$fC* -(`ϧjBqd٢91!!;`>Y_‰ZY8n[$fcC>v`dKcmr ᤑg?8 Pyģna}2i,jF`I篘ۭ#t\@4ꏮuծpMptlN8b}UGٛeLQDTaBZfkv cSiyjAd:sVcVI[=u[`c!ݗْBs@¿ 4׽u?|@=sgݾRl HڤeժeFI+O{AYmƎD53Zi2F:ruzs~_6 ueΐ, f2ҮHPVRt&t{G"VBI!g1mܻh KLή6h/K4IǔB]>3bHPP }=j]6&x/$^&Ўb'ʱwh YYL4V# ҹj{tP`c|!q"WF7F 8]9!tV$d%V7<;@Wzz68pF2uۿܴfiJ aZTpe(`$!o0 &cո7) mbLL,ggN׿A_o1N9 c +)KWN"El-*EjFj0\AUqdq{M˹d3eiK?9q~YZܴ3k^ONU"9#$e,йO.6K^@ԣTOϞ<8,gi]U 8 2 X8LPi{} P_xi 14xaV_B)Q(]bX'O~q:puË̃SڒTvX'+1I4l7Л6wrM0 r)A;KjJ:Lˌ18l8 e-xVR[FĠІhD%w jN<CTqz}{d fI"wY-,s!gpT L@W c2_ʾ)ŠU7ZKl~IQJ*s]*zzuI9gS,N!;G1T u7#3mN4~hSmc|^On3ALgFL' {Y4`}d+m&&B$H@%\;f3rWEkJ$5d(j1jdKٔʎޥ%xBzt62`KȻ\~M *F4uMk˚ؐ[e2 ӗ.Z&siTR]`"QJbe"P#I2q܂4ΙPpzj{lCCti2c24FhF8ƲFTTfWg["㾤^|F_|?KZ' "giL6„z%Jׂ07[Q * 2ZqI۩Ecu./rlxHxjoR $P6#8acGQwGR E`vXN~ ͩFt*qa4h K W  EcCH#`tA# |)F%pxIeechP ԩ$2"p'oyIlq2ȖdCQ׹A$p~ѳ^F)L1LTc>Ӡذa+Mdϼ~-A?>FgYW*1PF)c(IiFOM #:ihնN9+TSsԋf%eP`m/6(ך45jH+$T| z1ʐ2tZd0hMP7lW?N1JuuYI< ɝ R%,U_8UJGtUqzC7» p̭ms-0Tر*$7}tvmNV+02U(T_TLEM1{V\WTx:]1cÁYr |!KILTvN1 mR>,NR%ՙcBFYS2 .=1NWӝfx5ȿ<h4FGnlɟH4mK^S.geY(w:`Ah_`ѓVKtȖaUג Hɂ|"h%HpѐrNsb f%ad-`nf7$7c[Q+W:[}Zct]LikX+Q+le)gqW9')kQ#ܾSȑxE,o \=/=m =%߼//TOnĝ7ċdӧlmyG;g2}ܖcy=um}>9jFXykaP<{-D3ײ jw^V,"qXhR vTl~!x/G}{L~ZtKAX=:t,ToXI8.w rKr:íVEDF-"#ėd:.bnawubdҸ̣GhlLw۹b&jпV" HnXL'4 :3dBi> mȨT.%:Iݙ"/rbkV\7z1e(j)ӡѭFrDCC齝 บleV1F`m9hܒb6[m@tJw_<ĔHHhtr{.et]^@8 Q`&!pg#T%z1~h.މIs$3L=x$wb }<´ub#DS TV0