#!/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=28a4ad57e725c7a9a34ad48c62ce13f6 # 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 ]:9jQ§sjjuOZQjW-RM8cg^_ySzz)w +*ljwh#' 4g !a,oΫ|&K+2DxT bno X GmZ#GǙi`P"/F-q=gő5d^K 4b8*,(d6G7F_0h4.lv5ubڰOiOiךs_Ӑ6cS,62q=6tʌao0*l86lGU";.صnvn Q0!RGccʹdl<1#KgaqPe>u ŵѻnKe:t$FK޳qMٷXT5{|"PX-?&]k򋒁MLqXs6쉭ѨOtl0HhKGVq@2~> 1uӜmc4fLGC\0>2? bCṉ%i( $׳`@ʆԇ=Ga6BH* - 8Í(*qLȼE 6$ޕB8oh.=QaV%3֤lu~b(|Kf$׾3 Prd9'ͺ?=&?A)P{`Ll#yZ~r iO>[lh eA.| PP?8ԘEūP2y<.&o|lR3-f^r{m9D lך[TYRRra`ӈSjԈx":H(C4L1nӿ!M($Xg?x&f:=K&n)`ٝ:8GϱKēz\JtCöGoAyqm [o/$|Р{ܐiuڨ}<9Ҭu,aq%w`UK,m>9ћsjK[RdVU 쮘p'jVK>Un|؀E_yҮ*1P\ĚZsUc8h9>Hn% "YT׆՛f|=7cFJS'LQw_'\Zx抓0֜q!0}ؤcquGfp>D ^x!8fD_6rW_/j@N~RrR]<7r"65fxM[t2[az96v`?sTxwϝDa5J@t"pMqmSa]n$4yd V0_['%Z`*K_Iݐxܞ wω}_I}dRifRs\pg e`lS+:Aq.쟒C!˸lsҳ ϜzSŕ!pTS5d(^4Fp Ipxc `C.kP|"AkS"Sdug>h<`[8DENsSYKq*~8[:"PDHq;WO+dMZ8jK ˺6Ht[qGR{Ǭ"'Fn}/6+Z|Y4>8et(d@etPo;)]N*1=kU䞀v_n!vN;4~7It;Kxi4)$m@%b,J bLkqk tdq=p 5/}D׵~!Y>[6[ y!AmڍkbJ!vw_tK(w wӰ:8gB܇huW-U. :tD <`SUv4tf#IJ[hpL ZNb)~1R/f?z"o ( w"43Q~'lơb{j7".V^ҧ  8+:|Wq"Dya.zIfELUTovQg$b rAz?7H`NMQb'C" " B T0TC #u.!˓V)3Q42.Q#.s?sav|& y4X_2~'4ܳRgPRK K! 扃 TB̄A알{}Fg* s;Has5 _1$*ԖcB; s'#)u1kIS_+W# *w*vOc&m~/"ˍDAht=K4eEj2!{)d>P\Qu0F۝ \C3 cBdTU'M(i3(O'}jm~hgkm|gNEA<&)Q_ER _ EJ%I99iѤ:iѤBJC(,"v o#. 8Hn8< ~edxu_MaNr&e;h]tN.f*g?׺KDY-:Hxl%gEe[td"%$*,d\6)!n`8Oy"~#q|h|}t>JG>|& w+[anso0_ ͱĘԣ&-OE:zɳZ]-~Ԉr=V-,t)H ~|eGOLfG獇N G?(Jtvxa^~ˡ1X~atTҌk$>nb+0byYX}EW1M=/bgҤ; T+v·dmX|:eIY$]ř9l)>65ϙmA)!uD&&$w%"5QС JTpxˋH+Gbե+ <.ՅBwcV*SnNx Vj?3C}C6t-}[ۻ{? _QM]_ ht䨻}qn٬0Ke<  B3\C6J?O |/{3#-/F'ZS[m%1&5ӉHeUB$X?Ίw_o^*:;p<9ZtfbHא%EYsbXѯ,zԆURB3χTUyl \z?zq!&}:B  I."H]H/k֒`ȝK—} *AH, H/S,וK[:cRŸRhwIfFKz`MU7KTOմa~YTb@GxlB|1 jn4@ __^6 äpJt& k4SqɼAI)P @{% one%OoCʧCE/CNC6xJE}'}ܻ΃ŁVQ/wC=xY 6j嬱c򸨲8^Qz/k"<JRqqC+R_]p(a={"z=(}q) NF8306idɾ*bYUm h$K攦 Ȯ:Uu()S`Y]׸܇8rƴ̕.wEwɐ!VDTm36C2+5;xьap:fc,9>cՈ";k_g[S˺$ҧ^mE֨6 aeUcn Kz>f2ࣝ ڏ-_d*fM] әް$t~=FTR|VuՁ a3Πkޙ ο$3Å{0I*“n+֜VItv·T WM635&aQEW"JU1w@TXHM">+EA?_ )a.%)^ɔ%hF3Rk% k~:%u g@zcvw֔ 1~;n܆$4qFܝ9!Sno}3^I3BFc*LيGo?!;ݏGEӄYV) dމ5?6@#..},\^#%.@e6u ䷡tGf1/.벪tP djdݹFEɈmvcfmсMkCn+t-;{ĬlY'h%*aѤp~!kF+9k0l6욖1`/TTvIY' C>"` ONOT2iU*E?LǢF*Ѯ;h{ ޓPtڞ>nƸZa'ˌV05p᾵NH쟍aZłeOMwImŕAc(ϰ=)@ EX:]M{{,ڷ33YOQ-U)rպ܌譗~#) dʝUϜODIé4MT{,M;`^i~yY;$f^n[A 2-5N2P 8@tFZ:;iPxdI2"G fG6<,fbmLT;ڱ*O,\M 3$dVsʤ5UOB<H#$ e9Lx?F[&˯7Loqdt,WQRki٢H-KS!.POP / 㜜?,P9W1{ ׇc„ 6@ܕ緐Ϯ]lqevs|.ZgSF- 4Dz嶔#xӊCFQ~KS 83,'D:CQPU3?zTI0dVV-I PBဈYɉyC4 e_JmUzmT4j^L%P]:ٚ~}95m}Z@Moدiͯ[ӓDMZӦޢkhwۚx 5~}Hn%l !X.m\Q!^`cz#Z}}s|+?a堺09HwMImVvo9 R[#)as摄1YAG.JqVYB|}Z!=g~q|tnO*׳j;7sƻOѪ鲶 o(u&1umA R:?-Sx__ `*eq#X0XvaAr *)bL_.qeV6VDttلK"4"+i(_i_pBEGE͉FVothڶFv0 ]\nS6a1&dY϶kb4^f v6sx|3I;mCʡ_ *ڮչVߴqk<Rkm1:AQg*ԑ6*C~pFNs+/7(r()$s#}ۏ%ɟןlw;׎u4%ml0[ ZoZ-Y>2>%8CBdYճjq%U?jb̯g=T=kͬ =Z67jѷbԉevTh9=[kmPnkS{CM6+:h[It5kLĸ]vʰf3-af.afxez,k.7|^?.A_hU"a|' ˎ|GaXc|I5>|AtcRҶ@"hwQY=M;v Cuk umU6絣]mn M"]2 &"+{{Ծ.(v-Xlۥ%SpS׃eYGvq&RF2qM>$Z>bUp:ɢpk*נ,j& j͞l.AYu/Sf_E!dީ fa^)%Gk gv0O{QS^PXe\70Arhz6Xbu1S'Pw?~ QSoZ dmg5\`5M c_f1tΜ!hk[ RpOlLwκ܏@lh;ndZ܎I 簊R䁑6Ȫn88Y}70]d ԼDP {VMiM\S쒱} b&{lD^tFc XRXRepC:tglג\)w1$TalTAL4ߏ.sԱVA=$0{N y}NoPj_=_$Ÿm8iDVo,-!$^CJabtLt)Tk zuΌ0`s̐x4B}n!*'S3!-K0å,-QTmdLh h#c)!vOn1E '@NT!":Ɉi*]H:y˩,!ڌoq:hv=#T4W$8 Cǧ9v1U~D%e]py쎽P"}!GItOFӑ =6Esz⧭5#g!$`{I 4Fэ ȹ,8@v0;lgH22~WbVTiû`q)bp|8[eA6:.!C5u{1l5),it2h#324EKZ./Qꌸ3U*PR)!u}1hGx ;,N{?.ҫBQBn7:+Ws;毣76gSa8)^R+:ˁ(n (S@W'o.]͍DIB@㕅i9kB<e1< έ=i|y) 7`|Q]@ ԡL]`ѝ]GA- ,A\:U/Ҙ~+Ɂ~sU`~z*>(?7ՃPZ? ^ug'Q=7e}~trcmm 0T<"OMD%fi'%ԚFM"W0K%4!Y!;8-F1.pf OO͌~c6 D]|Ih2 :oH>M q2K(HJ T >hR[r4*"$ [@{kh`,`Bs9sf6Rm(e924r,yOx 4ۃ|;e W DoxP.OFЕ{[xSIg$'Tu{Le*8=HNu oM`jM}/Bǝ~cpCt=j58E]shd?ò6O#ZIy0Ǜ]RUL%O]Nx7-|m1S5Yy'y AE3"Jx)c/wajãfr|sT^qDk:RY _`!s}ٗuT,U2Y^G HsWkkokUhfnY GeKu]{x|i{F`'NgGa(9ɧNn@'z12:R\'R]8EF>ҍ7p:yLۃ 3B7Jpq5>8j2l=-S%M*`P:FV޼y km\;Șr+:wyvfgӝ?a><: -0.xٛl=yzwEv}yyjwJݍO:k:ݧgO7ݍ3xmwOn>҅Ei{IYSbe8^87{ElG4> /@,N>,&[u΋ʯ=s>)9Ԃd]TBRJxd # H~!ۓ_Ε%`5{ݝgOlytl'Ǐ;nt-ZĈ0FTT#ͳ$p9/$!HqOPA#wtԺ0__UwˎOͳvEOګO`|s}m,:[m>X6rJշ4[7DG8Ȫ$ӳSP(ڭ8.a.?igsy~ى6?owlnnn<_xzsi?}ܬ&c8d 6'"=QrP@pgyfO/,΃IY_2˹ ?fPX2:ięD0.p. 춃 ]J^Ȩ* >28>lJ+ q;%%F2(Fhm,Wl1'2;PoplQʞ/{wy^R}C{ rV [A3OG+"w rW`0kjvmt!|{GЋC/F˿Ϣ_ܲ]Jߍak䰹z_K *Ckbヴuo xdgAVuJ[2NcE1onn$?gԽRACvRz *Ջj!򝿗^|_TBml.t'nv^:nE'԰5h*>HzuܬKãF_z;&:~.=FySn*|*v  v+f tw%?6Ҡ/-}¦aE 2~- =RԷdʹY;H9S .;3$+.d44@;1D(2VޥF#:PHdQ'M, z?"->A5>mRzgݺ}&VL8 =sN\`pw‍ὂ QwvRTyi`"oĿOhw ?|`vvӞX#H h ~ " y4}ߛj8' Y֎pZrUP?__0grex`^NtD1Pk 0nCj"s NZvv&i}HE&${>h|de>f*Ј$_vc=W[(K/#XӣS/(lV`sUĎrƳi4Hdgj!rm>,6ug=(/EMPln-9N_}Ag?zCQ'J=rq"f7Hv#r%{*51ihkI3sѯ`4F'6ўE*@epDGZARQd$R~ -t99ґ"9KȻ-۪ѷIFpBN|9d,8qM9ם(> lSn^i+q-`R~&IZ̢1"W-%4_c_ZXF -|Mqx}dޥ&-:7W`2J/rW9IY#'w # ;hѥJ"Ԫl{i$(^kV UORDnO&(xTAٻ_P(j'Ҳס%T*!!P# a{hw*E젙hOh 8ӀMTeNI\G_*㽆(qNƕ3c/G.l`ĂF ^WC4FIzͳ<~6= ;鍌A> =Լ$Rܻ8cqj Ėۖވk 9C_V 𹐧5+`ABG\t^}<~Xf\:* GpW6GIO PfDy ^4P]v玺v{3s1ikbw,þ,d =j@9rpd%5-#arC$/xNdص@-m_ʩ;aEhIVmL% 3쪳ް ԠҋH 8Df3~/[e#G¢!O\- Eb1RMܤS3_*OtóE{ǭt4uz|1tIeoc%m6t {%gx$*^OIjKv܊o64AbR{<'ђvTpb&ܲ0'+锌!Ũ1pUhiJ%=nyٕe$ 74O[oO[_Fz9qw,\t^i߰ jFC~$knղ4J}RdE|i svF"sʍrgKH^ygxBiř۾ZC?Gv@a->]C?}>u<-KگvŎbQP??.>+⸡-` }4Z^sR;!w78%!/ fuj\Yeםo pZw48>++כhBt#BAyBJ Ee)?6*ֳ\ >@н(؃Ł|D 3^a:(:;Ay+rĦSC1e\r dy"귕K3E2/*^9;A~u;zwOp L)(dqd BcP=jצ3 s94fʥj@e0:neX gmkۖ,\VHhvtFTN75`ChaOV܉mX"Y-qNFl/ }l,OQYz αaOV{W_g IGʽiv&#t%Cs%Ca9J>,",%l v5sv;sGVvrhfRR}-ɿ|S<|嬼4A[ 2"ehک+!{#%?'qh~EcH\) '"OO_h>k{rk7t0DjDYOk:fM _!6^ 1a )yHwԓZ mQaBv]vm019 HcG.]OogB)WU+vccm g4b#h6AN%\^#ߞPu[|J3~ |̇jZ}]Qb=R&I݄U(3z!YTfpzOW?v#yE* n(咁:E*2._\A+iu)<8eD(O1Y 2r}+J\[pߑ pPCkS28uL=sʴﰻ`Pz:@fPhY@ FRo6~n9AkW%;.c8!Bxhu!Xչ].K2Pk_9<4jX,M ^0ePЌ4@i{aAGqS1d+!(_;EAixs7J)p4ZA^$' NQ'gį=&@;Tj4^6PXkDT+Zk Jbñ(hnޤ A,Wܰ >>q*4S}` $V6isŽ!{= G]C0?p|kxj$ –Chfw܄lOn^)"φ@o_.׮͍$Sxt >s¿ XDks->zk?:4>Er0YW+jXoZ3>ՖG9t؞<03 %RHGqV+ ݫD"PIaY~:88>i2fi'XZ(W:>7!1WX9 \я'ǩ2/>[r6nanQvfEu w5%/5 pi N p۩QNv͈{tg_I}=:|U{qXw(OjM.hz`V\ym"|ml؞j:^A/w{ʝU718`h^L_ϭI}J??JJӨ9gP׮Fu#Kly² 'edr!=əz;a`lroPDebŔA٤"N$?aVIupá4q=Y_;5 niO{8 <7z%GaE=ΨIl05]y'R SyZ]i֎KK|'^zyjVRޱrjiic=M&>wI( vr0; c᤺>хO_Tսf~pi/n͟ka;tA @q] }K>x3A߶s5y7&+/ANZcu.fXOG^L)N[;`yI2H(MϾ*b}k"kOU>1]'3[7օH_8sv!"<{-q`,)\C?{p@+խKa78/Lw?5'0%:ʦ42e>jN @zm] c%A7mNQY##~cx%t+)ůboTޘ+TNYv'-%B'~ǿ(oێe*N=8FMf3yU6vaSSB/ ^9' t ǾqA;ǢM;qJ,p b0N@٬:y!6 8r=.'3=/6; v{&'RQF}}f&?U4D?%| =NVo?Kowƽ`^(m6M!BB6H"f8!,xi&o@7$/ ^#h_^q4T?cyWK Hbٖ_ۭ6=daV`֜n!ߑp2*;VIa̋4hzC(ux!,!Z X68c|.w|nY vg.,@+{@V4 L-\RFZ+S -)sr3*݀ '@0X(woQ&\E`}6(\+1wIY$@`j?|rLLRۛ°|l5F7-$&ēr<}PЊP1hF! 5Bm^Dq"Q$նT5N=3;Cm 2 Z$ur82&ĐkEz,/YN"cǴ` "@m뽞$27@9r 4 |ԁ xu1 ^Kn%oVfItÈN8ŏ8rٍD ,A vdۓ/Rs$O6@,ٽ!4: +Yŀx$3FXk۾c;!{r>fwr oEq j].,X,J< ^GggY/-$aPk/B&Xqq\4s9j?U.RzommjV^WXj1QUZKn ߍ@;7|vOX6 Yj`2 j|l`e`aJȸ%nk O`˺ߔ1f#~gKs}\%x?ȆŒ D ήS)-#,p1D43 xZu~'})3%P)@iQF1)*1_1)Hi<Mv_H`jE-%vAMT~_>y#L1`O| R‚.ۻ̅!A!zwVsI\dQXs]&`3ԅ%h XtXoC2`_z+z^:v-ҥ .7 KL}-9uq$\A:͹x?l- I>ZK9!fRJm0V맦2 N,v*0j(qӢ8cw˴M&x z7l TuY+mmO\pFxF&g&i[@ !1u)4]lVP)m6OI.jo]uLВ'&L.4t4J%Uk1x63ա$0RAEe#'Ҁ\pq9ڜ 6 1%})"x[7)cTT!pIX"s,9N !i0?=}ͷ;GIp#+ѽΥ)RjֵÖ4j;AL fS܎~iW9NkRI4DV<צRtMOHӡj#`6{h'ChJQ.=eq-uJ%[,U&6Y=S]eov;4|j䬬'k.1g \=Ꞟ_M Bqed&ϩw>[ܠ%RX`;[t%w/; @5 dPHWxcdi)ڥvl(58pJ8Ϋ[e(&,EYvk|?w?ϱGbՍa#[_: ^&M/IVe|Y="EZ_E:G( MM8<qP!!oN;C.h я8\΋<74s)2ѾM&ļ#muUQDi t:@в)/itmi& 'Y<SZQf#h&kT[JQ?k#Q4pTsIkb$b՞NԤ+جh9en1B>?[:d|ht|F%?,d8t\ΐ{W2Gy&tpZ (ovCʔ6H@R@QA}g"?HI! U{87IlގQX)?Tli(z\a-=bW:zm؋oq/BG)ۅ7HfY1ؗRSt'-: ?iid7K}rjы>#BEgۃVZwZ_?U)Mk4kN'۹,hn i3fyqm6=*^Bbp%,>xUFoDć.xHG^vbUe"xݧR(F[>Rk0?WͥNȊ-bUS=db0` /lM=I909؎Z] KkHSk)+Ğz>s?DFB`. c d$D6_q i("tOF0g3hg&8X{s!+ڗ: cvvT {>ߔOGxv.PzdKX y~|kM?XMy4r+ Gz *FҬ?c h}YbHŽbia.л5 hz18ڪת M5mǗ7IxMeo 2Mn@A}X{kT;B?o&3Ŗ%1y-! MZ?ܸҡdgrz[G'9klMa=՛Fέ@=UDr ].?ly8_]Vce{nel!W\WaGmQl^(aHɬP?.L\.O׻leQ9bA6a8I9C *aU3B~]YbxL+JM\);sItH-έC ,A1JWkD窛0wj.͝"}>F3Fuu nľxs5G͂AwpBP 4z=p(# \8`KaΥx :jBZ{V# ޤJݍ߂YCbY᧳"IHdg&"1v.Zؿ檯Oc7uckAH>Jzjhڱ(RЅ96a3+z4$ " 60)S?G;kULgoCkkeR_g鯅!|A~s0!9R Iڜf6`Ҙ"aX0:\CY0J9C ?EZnEQדs6H< Q.6{Ʒ|++@Qʞ?n?7= 0 QsxM@gz3~cBcϷ,SW=Iht"Fdl. f;#y{;p0$FȊ @<=9.7š~O [cd?_V,`mNk\j8A؊<"S027uowHLY"w"UH(֩;/r=@2+ p zq4ވHCs9ZbFp>Hjkb$zwbgȭyC( y=HB|;i B>\ x?3$3p#>̇VɡF*hI|ϣfS鶦a鵙hX%H<BڋBcVLȇfsV|]T3bG )@ xwx2W\ ڬ5i]&HwQW^ӯ"@Y8(;S&ږrsDn+)b:{mxGp9/n5 m l Y7‡x#<mc(NNdA b$thgI{8ʅͥF.CJC=0dA'ZáOQLhNTbn>V$r 7ԀcVؗ9Ovf\RQ}h5Z12@&ll$z|㒽V~kk 14_νXF˳ BɆz"VUN/h5F9g!Ό&QڄD A>h8,,;!ܽVKu$N~N4*y[ar R ƭ4_FF/b@Y mk)%v3?TUhXZjN&<1d ʟ^ZѢtPi+=Ԗ;\lE% %is|`0 :9@ Nn4hRr :ñD ;v~kɻgDb.B301WN9> 1 OgE9 8\|=RѴEp|%lA6v|!; 9hp `6<4z?Y5.x;2/-=xX3ې{fJx'y :ρ+]"DE 1:fS"5$+BKwFl0IAqϖ!W{h;7ay6ĵ Al Z Xp<"|V페ZBlno2횳 $R.N3X䷨7!H.rPҫ(UD7(恊~żQm6lv\՚2_qO (A!'|N)4) J%"6xޞi `ՔdIn͠ &VS@QO`6` .A 8|i.C%.ŕgH _C+ `b7@ 'оhȢ(m ] >I(vkb bPnʓ8)Ȑ6x:Wt5<$khh(r<*[6xZJ E%se][ӑs%f2cxˈ#vd+ Fd UkB .(X9dî #̢"zM G&|WCA]ZQAi` E +Q[Vkt\ h6mgT>d/@Oۃ864€AT.YOBRQ*z)R ^: Acaإ|9cHx$o+QæB~$SKcLO̥2~Pyr10`ϝ"WܭE31ӭ&aj=9s+O8QL>q m8yB#ݮ)|o*E:BP8ttLS'bѓ6 ]W;;D8\lhһ7xNWl<]On~gZ Bm<:^/Hlܑe#-t2s2rҁMgBs ';n$mC/La&,Rq]HDs3r-$'YWg, D( >ޢe8/؞Q֝.`^W5`7 j۸r(ꫜ:sK/k) rI:bn,dU͵F/8C+MkG}4~"_y8Ȟ[adZea~#ϧnlm<-}L7kd &h$i_}G:ff;՞8FEπ<2\u)釲=m?;7y.mPzB]6ú]Nsdtҋ0ĭ0p|5Wt#2.c] N#0=p_/vMIz [Qk-uaxNKeoԼ/ýK|N.b^^nvLP*GS1ntO0m[PKo4a-s;bd5͑y~.F|\L"^ P/!ъ/"}DңբYM6 u"H|M?xc1|>YB"4e̠<*V=cn,fG_2c:#E^vH}~@Vtq%xOCNQuf?("k.hvD=U4rM. ¡?&^M#/Ը/yC޸^\Yڷl֒am:ٜCyE.8e '*~.FP& 6R^)b:ǺW׹PAQD=>d6RMFWKM90aO-"+XQB; 0/ 5B֑ihQ/Px10 @6cʕY=?W!O.Q9NZbd X)i6q~NA R*ދ0Ҋ!mikfu)oPq<۔x4)GRbυٵ SĮn4;(ۡLƓ}o4j )˸AA-KX T߽,#n+5;##uCŕyg E5Cr@vrg51/;(n> & m$q+$0v[#ʡpuudĴM.a,.9}c耩iv~m VƠǰI'e|S5[-{Lz S(cjw(N;>u[bc)ݧtt05_-CsL[w u A~ $Cւ5lHB]#(]. HPS$V,Svלǫк~Z ^a\ĄF< |+f<OGb=fzad`A±XQĐ)d U76lg^tVbnÓiob;PhpYt晋AL'-aP[776Hƹ< _?Q1p^bVV^:'M8T7:%nXfgx<=`D>8 Efn&F) "H.QCrZ8`ykPsո7"1̮Pѻ6X =(鑛wYyČZrBk0$"ݏG ѯ\yPT4x,ZTMG#5u.Ҡ,,IjO("9YqY^KSJVح&ġ[ယ!q,`tv~@6w~٣GLnC7&]  Hco{SJgP{E;|'PLD"[zaPQq* Z67nxepYG SPOGnaPٸ4u#Cљr͙ R. aZk^z; H-kÙgoN%NGr dž+`)'!XlN&9 z{$DE 07̡j+a$VKUxogģ^ŔeGȒ!?kE`be?yri_T=*O9_ I"ۙXaV&2P| c1 Pcեޥ!xz|6 .x&x/F4[Aeh hŐ ӛ6-J62/ykHU➻QS\nA$ja]_͇u&-A-:\.R-/HG"=OM#mAqeǏ6E`K F-w# )"$)0> >Cs9?}8m8.;LjQHn@sQbf `A'r3Xy?HW q#demMkP 7)*t_ҥAs[F48Sd6Mu٘#}<*LJfu?%72:}xE_h<7ߢ:%9 932;z:,v螪8_^O뾨Xo)kYබp2gbe%9L*9&1r Ԫ2fܤ3EI8heN2/txO an!uD9L@}Uf.Si2 Q.Mrz. sNDLQΒh2 k`| gT7L=o'^d NZb pXr p e ֗PYj,,WRm-MnYnDR֒^"6Q =>T툄զZ++ 4ȟAwWI`S'IFy ~CvByQ"h\%}5sU * G8I&T9DŽBNf) $.]j{Z;y^YW82<#Ѩ}؉S]'DdȽmcmꧧxjhBo*ofp7yQ,Ik@ۼ?6~>Ǔt^%#]b8G&,|'S4W_J=ido)@2,[7UE8JsHM4>$6z5ƀRSlrG5?YI0B2aӝֱ(+[zWmkHԲzen9ema6Igu[={UgvmΊӍK=3?S ~w4<:n|y->{TY^+.皕~rPcp-[<0br(zWvD'|iYlA|(T$9bͧkO&O|woeOVN{ÕhcR\}g}U~}Jy+Jʀh܀eԣn/ eU8"l xYw4B!YzpdЛh5-g~t^aB0 nQM{ziSӽ(pmo@G PNu"Qߠz5(TrFCBgDtCݙ8_~@R :3lI[`ޛ؎87FRCbEctL.#MAћR(ubI m@\H4:ӚƂq,hݛ*<҈Up(0rM7}U*?rL[ jT5,:-Éz/"MR5l$Шɲ}#O[Mp*E @`FwGe߯.rBRæK9&5AB$Wi?'qtR߭reLiE,rR$3QU#e2;E~Z^bDQ;SUHEJg  x-݈Ɠ eiVIYIO*В#`n,7'HԿԚ Z3 Tnp [TƩ*M2Vd\.ѱj-ЯuG;u.F"<۹L LT+ۓ~*N@+Tʠ}s93kO> Zl]D9*W 1y`=@ 7gƣgST{ews}>ws}>ws}>ws}>ws|AX