#!/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=ebaaea24938c04b909288b6cecc6367a # 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 fe{7bʙ h=i H.H@xҕp2Zj[J)~jn (%#DÏ"} `x ,<؞x(#e|x$~MW{%)WicEBRH d=7`${E )6HGD}(3 ڇY☈PsQ fF⵲tڕO^K>⹐&+ 0FuB\mer2 (r 6ĺYxRA0KNcUÂ34[55A鏇-I-\ʃ6cA) ]u Ύ~(%eRKI2;!!ɟhF+ ΧʄsCNOhufdeSZyYvU}Y"}wkk% qٗlncw5.0(ʠryY;Xt-Vjt*r25pƊl*|oL-0LUEA]K6[=I!ȡ=@N9*@K$zg^Z}BGQQPP,g!Na ǜgzgQ{{^mK~X ЬM | >@Jc?SB? 7m6Ʒ\sPvHaפ1}.hAW#r1 G m\5 ts4@ipuOx ۻx^פDjt'o ӡ='&թNlZ||5"ao'ubc'[aKlheᶅ!&.C$-;+%Ⱥ`-Ȍ[7HЭDX:qMjx[1}5=I; Z0bhiI=uh/ ۔$>A46"NT;I#PIAN|)Y |>࿺Zt^+c2s<7޷\xTFQ~_aOO,ҮytoKGZ Gu8?ZD$^=z_z~gXHMg/ݬKdVr*8%_C/]9_e,u%? HuXaRr.AwoB.]=swr(䒰XpI;ŝk:=Ranpc2m2=ciBle)+ Z53)w`1ͣorvd ;+W? N3Mf̲u^>+Bda0\g[~'QpU<7nf@(" s-?.DY[czwK lӽV'{]7`h亚\iOޥju-ZK.Q)>c.`PX1Nu(QVs yTx Q_UZb/՛}gY܋JsoSńڄq-v{Ƃeiދj D5$ :iL% t)OG,ke4x h/_kHsc@XLܚ3.M~qyz>Uq$j k3lg]ڶGVh}t&_G_p|V&5sڜ/myxT51=Q7! \\i]Z|9-*רJGh*|U_vfe~7`Bf]x0n!hq3?ʵis133F%p|sTt/ZSZ]?x/NGFf #1>!ݰ6[^KG*W@ WT2xorrpcr-}HMtzj#1~:みN(i(%R{}:t|@ Fd0Me/A3]QHmZqy˜.#4]󴇆.' ~C6}F{)wj\-kk6B\DC 0)a"~S0N=^X^y+7ǰ)kX_XߜrE$waZ+6XP__TMH$q5{ZMs6*QkAḧ$9Ja, =Ȅ$u3΍=rhH]2ʁ-k^xY ηA+Y8beK)؂5-LF?M[73"&hO8³M!<.D~0.(q:z?[+8Vr녺IJA'0{j޸ۭ/+!!Ma X[^/clKb/fyY-P@, 5`jA*h7R(ԋS-6ĥ߯3 iA1p&d0  Gڠd|N @D>.:@+)Rl<^cJ$d٤$U-QLM4R@leQ ̚Wy:A~: Uvq}_vg|3 ]7h~iT2#%i &\P8>.Ad؁ NDx86w`Pib-%K .EZ*7MڐdYXB v`G/Pf"9q)MH WNc+92WnN }hNYc[VFM)R.Hp>AJ,qĵF,86dSX Wp W!:¢ùJI'1Zrl }(ߓ٭n7UgQ^kϓU7 t,Y9JuM*ATFXɘ lP7=d/1uF,M'Q4}ПSYwẜX83\9뱩aw C;5\KY7~'cME2<bGNd=ƞӰ+ΈR"}/w/҈c}_dʧݧϒd *z810bGh4턣B`oT."XӜ4>.q̧[ᅹߏnh'ePO=FcM$FC !Ҵv rGc˥<<و^,_B,A\|}4Gj˨/$*IAH(eI@ wpn:dHgܙ&pLҬs-Z8ojV}RRY-h`';1m'aXA8~ۜgv[[>P*[H\lczo 4hE>zpexm‘ S8T$(`_vn'Uފ%6"rʻy׾&Nbu2oЄvtO 4F4Зq] rݱ&)1Pڪ[p cZjͧ% c@Of,aMGH~c|̯=ʞMµF{3,шH:%qOe>+#Aa&A&YL{/!}컌7ȫ5 FmТ8Y{vU{}Tbx{6]ņ= GA{ӻP8,z;86GA9B+P*%T4kߗvaX\.u)fd ξ>r{ 'hF3ұJ"4 Փuᢺ9|н%25@XW'WKTQ'09D` MhFC\ڮ, (ZeV^F"#ũ"ӨXp@vF(g`Bm@mt=(иr1.0\/΄Iơ[ ^"kJb2^4*X"mGC(i .n2.?!$KFǃtN\ )HxG~Bº߻%JU a"֓.6Y^JK̇[wY&,H*^5PbNـj1 Тiub[(,gd׋LyY|="QlGsH&HFjrlPחzrbyAf>g(h*\cC_j%F #B7#+oi`km 22 H:T((#OaiN5̥<[=-6H{Px-4)xE ߼@<Ƞ.pP3~K4 Ѹ4h:- yi+i_ǟjycc=_g(OtS R-.<\R ۩0%@PΩjHX9DqX, ]LhEހ.I#sw:!ʳcƬ4V.mp'jzp|/ k^g\XUNFP_6Nж: %w"CJC .*ᴵ(8S|(,{˨ug_yk ?5vP9{ wi`h]FAGA) bAM㣂<"n_)¡.^R'-SK 3!#^>2֩p7vs!ff|(~譾g O8;XL ۸#>^!rjSpV;>(^La8p($)owWҐ8DjxcㆊyE16"?W:F|şcQgٮbСӵsNWL>yMΆTuBwN兴0G?"΢8g[iW! ݛMjC \GerERQ!Q"!ߍ ;O`?p z`c۔KׂC vtt&8VvI. P(J4|MQ5di;`184;cHmY~ъi᪝!CSMޡ, cI)ޅ)V%RЪ'l@ᡔ:ߖbȁY!ERdujhZb}jg /rC9S0v,?=1#$ fla "6HS,,TرB& =IO=r\.,3GyɺxL[;i\MIr .d<,tU})*X ? n)4e{ZVRQ@ty)3+Ddh!*.s-c=LcITExB NeS"d"^hbwPG߄JSţ T~|zJj^-' >ƅ(-/26i@Q}jĘ$MeJБiz.)x]( "!YcT *Dp8NA1AHȍ#tҪ V%-rF qX+@^IAkm!ݤ1m&~V/la^Ŀ775OXlQH ^^\4A17@Nׁ‡@0EH\BKWQQ+"\E 7oN>ju͋FE 1Y $Jt˾vZGm COF$F|R@4lu~t^ɍL W /ϐ<<_]8jx coBYv : aZ]8-!!0„؉l!=@\FP̈cƄxecA;ك6=1IMj[vrvg73iƅ&! 3ܪ4uPJ|}GǚE)qYl3-ծ=,2Pq?k(8cmt_x}A1;i6u.ddWXԄ._{wrm=;<9NO0Ϫ}p~,o#%+"LsmۙFҙῒn^.>%C9k6^WtxOu7Z Yd% ,'W8cz$+;s0&T %SF>ʄU?Pjr3*WqS3Ptb+kc @Ɉ[נkG3oF9zܨu'M W6C">BC?67w!6D42'ce!9N=y<=SFj],An ?B, DX$n6Lft޹FsXϛusT6'a_0y~1|ܪVCI-2)x%;h?;t%=_;;o`nZqNiRiVMg€n)Ty0˂j[@tPP 6oir*aS:sB[ &z\(;+vMQFƓضx%v3ۙ}U}]6p \Ym>V ?]͛MXf} b_FAKAg2h/MVҎ"aXX \PzAIܳ7}<V`;"E1Ji֒-mV#;zvֈyuwDy`~EoeLZ㤽Y߬l~,qJ(5|sR֗!_$tQO1.no'.ݺe>yE՚\(y7,sdģG(e]w@MRkx{Pq4?1SRl@0 ReOCB5O8ݑVڶ+@LzĐzu/ԯlnllnU&=+GW,s(1Y[̍U6o 7\ڀyvhcC'6=_Vb>_F$u4rV"W_ט$պvI&Pp E\|P..&etz:(JFˎvYeّ"1#ZK#&ԇp|*1L.n3/11oCgPȇ@ڠ2eg(fGv&oI:l-|%?y%V T,7Ǻ˼rfJ3O͌hPj0VV"oT&lEĐj+肬&e910 ;tF?y&|^S ښ*̇-bTIOENJ )+۠m}ڍ$1܅Zq6C u`D4#'gc"L/wNj.`+@ˆ@&B#i(@AO2 R7AoN0jR;rXVbljc]ި_+OHyy G&ԾcF6tB6p4㮛#sDp254{Igq]8eFirwX?: sid`惸VU:Q› /jie:jUl2nn1`"'͌-d;|iF!y*ӄaii8T}^ (Zw[k *z08~ "8h)}SE;`k|x}ݴU s \4[x6:,1(Bh0}X!g0m ?įBK S{쌧"w {U!+EXO8j3]׿|Zpυ)x(K s]b6ACYEnY]yNi?21(Ih#c$v>22\@㦬q\`.Q藴Hc-ࢫISC[!Jr ҕp%N]Eьa'pzV AoW6x BR1|u5cFhbhJt :ymR\~3N{ZgK-. ^LeID:Dɸ_ST٥d]$\DŽ[Ǚbn"= YoG,\CKpU&CO6؝+r ]BC7?$Fq L,CQvG7Z&Su _ .\7ϕ_jy|,^t$sIνLhu�+3` òRxgۈ.c&N!< 9ViT=a׃0w)d^  AJ訌= \F^Vɽi t};ڛ*Y*<6wKҤpd9Ge+dy@f* XۄNݬZ{j\yLUv70XWsޚAFlˡ.( vJ$U.#ڸTgW=ѭِdٝV8FZj_oyuFYL瀲]i0CV\w*  f3&0PZ?Qyf>eVS,>]ɰ$AڝZۊKd ǎ$ۥ-ʋKV톃\}Yy ӧ#dY4ՙH˂.$rny_.\D|<(}!9]ӋDOqa #gN(le0* 7&aQD,}A:PyMJJ" (k_ۤ0#1Rێ00쫞n_,ꂆӶw3i>CϷ7OVEåTirzlҦmez#To_4N؜Yk1maqb "$\'p@jx185@mv 0* È)u>*6gqy`tv.uTeq*`(EtMCQg¼,㦊@0 C<(C9+"zRgrbj..>%{2%n )y[d߅{%\xu?xQ𶒯3J H]3ce}03JU>m"\7Q:`[q'a8ERH|ơoh^ÆU<%.r|B*xCIDKͺXЫ ́9 J1u伻28=AO* ݔq]H&gV;9a*'|DY~tMBprW_#=5RP6re@Jnw).Hxo ܥ]`PX .1';mz5`Q0AP-aP 4ݵ7gb 1Ģ@pڈE6 ز)Qa~[6Rd'~~jC'}:9},n{{'fݓgcуK% X208E*G%ymǷ7l+J{N)zS];is⦽Gǯ*Q2R2_^k1j65`T̓hC*t&WרsQmF>k~/pǶvwy3QP'FW'36^AyhvxG ~J*YXlפa'}γB_nbFcfȫ1A'ۤ 5]V'v"V̧ KDSۨnY\Z6w-=e=Ҁ{UAb'E*^۟{>&WgV7ޏ }BIMڇޜ/?eB84(rSNŢ '#Hy%F!J%0>R3T];D;j D?x'0^"&/A;'othtp] IX^"ֶ Qyށsr\=+,togo%^:3{^,*e/NF&—J 7':5Iml/k=z LgG] "FȀ{+r'DC|HZW>ZCVol'?O?_'RIXsqIFsԿH|4!r/hЦԁ_[Ubtdm ɦn΃0cBCެrES)R#9IhU96|{m '@ڏ$9 ~YF;aq %|IN %՝m܃?^INX͛RjgTl+)Kh|Rȫ ïC-NIr72&G #V~XZUE|YI Qqrxkh:;Dѯ^iQc BkJ*ZDǔɜ_+ m#j$(߽/)p<-&vΔՙ6Տ>;sHLJɹǧ;įc`[%1:ADzi$z?ÐF6XT@On`*^!>GrRt yqziFӋ *e*"4V~WjQ}taG4I<% LuVM02꒝a oR<2/]^YEL*g(7ѻj=N<KHa![^\o#>u3 M:8aLUw]#*A.l6"gс+1͹'dqJK:2rTT~ERszxF@=BC ) I4}Q3Z8Нy%s!J3+0ڹٴ{'O*J?D" >\;oSd5]F7t>Bw+hHgb#Y۶h0 r`Vl?]9;({cI |VmT%u6z@r-5A U̅OvT$)!AN-^E%Xc aVU,dS|%i6M>JV8`M])`Љgɪ0$iqҴEZow' A33LeY>NV1o跤OI6GH6Y`bFHtt1= P,R.a5.,$A?ocdvFqX8jZiXԡ qUF 6{j-t'MS,,SԂVrciVYG:oKOc>t9W]@ \{u$N'G3044PzN[-_3.O1@k'ԓT7juNWU NQxIcр掫55ABZ~1~=_ߑH\Z]tMFh4 Fޠʦ~tpN֑6*BrC wq+!2&0[lWQm :0q5!mW_'W(/jP 1?Knyd#p!M{[ ?qeQ6\RnGK=r[۩`pſ:H `"\v 8)2DG@~xdcɿ &L7oqͳgOp%?cՋځ6uSAiS OI i5R-[Fe 1$dqϲX㹘osSJ)<*좣x:JTܿ2qrccy1XQEg@*Aoi_y8rͥ`iE Z}d,EIƻ)h>$9w96H+t2(gFi3$)n~+sIf}C_,(6ՙˢwĶR Ez(4C@E,(}Ε+Ɗ$GJ }s+b 62[γ9/?$g`!v17mFciR܌&B)? Ŗ9JN{ .?^uH.ό9i'oάRƯ(}vND `mE'|>lhRL  g"Ii| 㣷hoM+ :J1Z썭^-O{57ꮑw$]&*9*rygjqeB;Ӛc=.TEjRrb FkhycP. '^R&$$@-kk\բ}K/5 m X8ss$fN?nON>94q%(ϡ&5/a.8psDkf­:-QJSͬ PK! 6| O,L(HyY%-` ܒ5T҇IWswF#Of fQtq1*%D'!uN0q,Zn1qJ)PyqAF#L FtPZNs'3q$k+H;iWލ[!3x3 n^ZSPd>T؝0 ƀjq}tVeV=+ư8ٙY.}Rb}HvsDmPvS B Y. 'g Q+!?EVC#>Yc&<)r\w} v EGƿ'Z;zZM+Gu i UHf`?~Ksni@2t:`+N8`0 A z3S6cR~8q,$;dOL^bll6zGVj;.K;rNBڣ쑰ч]P:9NM +l"-U8Z&|k/*jF-Sl#<Rfwٹvv¡h#Xs|uD+hD]֢k 1&ku 2  Ao`q%֊yi lJ~ hj1)A<n*o)O}%F\ zu(JVGYRZ`)ԝ #)x)kzA=H]D/DJhZA?{xrk+ފA՘UqJȕ`4r.JrAbRtL !C B Oy]CBiwv0Y␿%GKj0p:٣SPlN..UDN.0\PWDR~ީK )u9eK%J.7=u:NJ֑_R'GGEnwީ7=x 3Ba&D9wJc7q4wDXq W޹{h6 C3C>ram2f(Zl[3c6fy_2ZQIe{UǑU逥k@2H J hWCt/`%F%VJDEQwq I$"umGTGzptcS&v7(R"9R*p.ˊjL'ҌʵXQ,N#mW1+0-XEbiEZJcO5ae7vSQ(6V2 &]ފ?RӪUO~Mj®M|Ia1c(8نA̞"4VC€Q`ǏjeWp7=%IR:'xh Mmto7GX Mqs +efaR+?a(dv_c$$ENCnɸ 8$#lP<.egUq06}g6 JiM-PϑEnhSL3rFp[dTKS׈~Ld$;#n+A+D] _ ~]MIm!@PzݭzQ߽eͅ,Fۉfi&y{\U煃^%%<45Ҫ9[:+7.5 <19 ޳&_  bM3%CJƥ_+]ixj($"HWڨ7hRr~E)>̋H=XJ"2U>Sұ-dPvޥPr~Stdb QK h]%qϜj2_k%5wƧ`NX& ZA!Ev _̌JN-rzxnVhՊ(}<0R6%JŊ͞-:Ys3Rc^Zfi}Aթ7jٹ P/tjP qƻ CLy+=oQy(IQ.Z|q|I.{0|GQ8,$<JPfEزmVcZ!8ɸ0.ړPБNwU~h8ᓏA07dܲ`|FUL4Y?ZEE擲$]-]NYZjr'&%= %2bH[-r_K>4fdØdյ>0Č$bڎKnd6A,5+TWg aau1eK5l]I cFA,'W8 rr7N2~snq‘fuT?B0Q^!wuR$]ohVKw"]{,XRf&O-wDъfBuB1FG5&WG0ƻ@ͧMHJ+qPwxm#V\b>-g>YIR1Y+P9j'0~ Jk!20hŒ?jq;V8cOCRkʮ* ѱr ܇iWsET9 w- #tHsfw@EpqtyqszBjutNO@]maϟ-2NX+\Q5o^qZ_ ݇kV;љ,`rtiхd+,`[`+wtܒ h[W4]X%9ϩ9YQb({àD] SÎ3nj :.*0lT&uԧOb^- -dF$JFffpab;!ߜǶx&okFB3qSYVAf$[w~V0 p(+hks32lw5mpP` ۘ0 Qg:䲳5dr!Jeռ]Q{MT k81C+l^<b?wPt\%-lgAOdQgE" Zu[Ppdʾ89h_dn9XvZAӅg\b٭ԻF #r^2dήJ;]I2=z?;B8k\=KNhШ`/vH U8mtMOL#dX17) QgvQ[ΚFzo7&~&?km|“Pw{2hp7xlNFlf auu\%> %fOm?_p (1Za Ҋ왨UOG0@{F4-vID 2ph@ h>Nj|s#RcWR}+Y+1'(I^KNwj]ֱcKBJ &bq?<`y &HW 1e|Jލ E 5Wp40hZR!6Ϡ$Z!*>ib~gB5bI"O+L_6U5k%6sV[4.";'$-: Do"{#6`FdW6'FcS8CӵSf^&g܎.ͰrAe]~=h+;ZebdE m鐇Q9 8;R>)B-3Gv xPLB+w2vًKXqk<)JIoqJ; zttFY,R8ob%Lw^rq @ sL1 LeYQ}= ϜOS$ l'dTTF )%Lٮ~,vFAlbڽ z)%M:&+;^1q@]âaːTƍWu]&SLADm2g vsHES>gNJs2T&h9)FI}M:5x HO?!6GnEioɗSҴ8 0cqLYCc?hzI)9lR1"dz'7\r \>򰘡7ݢE]tSxPS2fIn[1 H)o2J(3v7fVlΞXuavS"=pؓLRuM/P]!9?e6-T!  R"gIHy̐x7S$OH#⍽ƒ7;CH L!pRcZ ٫%?_UiW h_E4 _&%ǡWQ&j83?.5EJWFX:w^'x|T -v[FRzdX3SVVS$7`9^>&%_v멣4k6Kduy#3jO<:(k3Ux%24E{W}Z{Xq2-ԹKT9z^=Wv~qNg=KQV)U x$w,j驨Ԫ$UӬJϟ"qM%Y]9IF n~_i'0\׎B *¡f0 HI)S"y(ӥr*M94ةt&įþ`E ,1 &}qSdL0+Bd*Z qS{o&C:Qa)#H)Gc3ݰPsG a?̐a_Yqtdy,F'd4l$v|L o(Z7ʤ^0L~V`^QF2e"٧H.&z˲QMo5tYyqB5J,Ed4ei2GZAF<EG\AwsYuf= X"A`^)zŹ(VrU 1Py581EG\CD4 3@6ZR"٪΂6ua>f`]qCR "72"#,`-<*S(y E78zװ#y|~2?69*tt"bҮ͆:IbB$Oت" &smfds.vyT͠8`ְWa7vŸCІן1qMM0$6ftSH_#M0SQI2HkSm|Rp5Rdz\ߛmL=Jo76!GQ;XMрK``}$H1hA!D܁+pvx}PpB4H]̲NO\2 >E(пCl(ZwQ~nn3&{U@9g$,#M0M`'_7܂%{kZV4ju#9: fQmn¡vj M1FU1 ^Ҋ]I/@Ò"Zs.h`Fn4|yW{Ϯ'!ʎ|md>iQyl&;.TS([^?c_hg߸g]o,Z._(sOS"9EתN{]?ilƙ2yٌ !5A0$2OgYj76j$ @ eȅ=f&t= cu"]kuj B3޲[C xq'É]:ǘU͐B|V$>]]Ŵx1 N3ciC B/yם˾VRQ s, _y~cDr^ҋo;,\Z <+WxF1!z~$np8T -~Ѯ`u`>5&1eS_vdtt 8g/heXq6vkoaoFP++|؞v(ڋr;wnVe]~h~שiLMWHdxbP\NjHSXgns M5 ] ޖs q)M7x2fϧ=JЀndLnن (. s}&䔒 buȆu%!,U t]Oiawa\ϺS;0>}Xw8)>ƽ{6I]?·]g;ON ,jn 42؋u?c⿎)XƟ}mFWnR;|n ll?}} /'Y8l}_⃉[i_#8]n#4-I +V5\SYSmw01g_Iʙwט$57Zt#1/@_ ,6 !&y;fjk)mIU)~i;VȚZ3!#)V)T6dT}٨y_QsMT+dץ٤PtX[%e?u;Mg6!q&E+|̌RfyHAFGdMJ'#h;n2 {9mKcRLDdIO"`WI#Pʞ5mCJ!T|lu(eQlJ)`ݜ">F6 QlMJ`sU&3 :tY0l܋%H>w=)ig u( UnV|e<7 PrԆ,`{.)8sE9ʼn\ޗkMزy8^FYGnfl ԼLw6QaFʼP`$94KGqBQkArnsYe7 #Z U8*]RʻJHzV?jlUn0x%3i&jmwWgyN1k08#r͍~lzxMvWosA2}0 bl>f%SlknnyPbeQ4Z7`kla4&0)k{l7k>[>`,-7)|A:dZC]Y QbI˥ DZc`;DžWFVwq+.]|hhA}a=fG`o}ܕwʥZj]~p.) ^g{~ם~,y<ݺs.#Zӱ\}d*lsp"_%XmZVC[-m l?FB+W䢌H\~l~O稖zlċ0"s![*r9Vmvj+05B[ϒ[5tT[ғ-e:Y*&Tj+UزVm+Wc+/d>  l/SWg].8&K|~r]M"$oo.{V.z0$;yk('G&.68Alu!C57aqb>Ɖ8#&z@0F1]]j'I߮qf2s.iX#4a`,Q 뢞u0A=釾qzQkz> -ﯕ\єߚ> {24D#U~^uX;3 1z%:|&*=U`Texee  ,[;O6=OZ;=Q׹긋l2MULߥfMFK>D[Hex-otE4od*`f T.GFs6ǧ>8x)7M-f!?x3#FaK? U]Vreq7U&=yFH΅ZBSĂ\a'L&\N1bw#eo0` zO} ~uvߨTÄIYEvh> :nY0;TדDӚaoTR)KQdHg?2b (GŒ}P#|=sˡ$,~'cF0p@BX#d;Myb~\ɱ7jaU6Ng,< `Gz*|.a,7   ΌhX0ae,W O5^am?@R`@'TCAgd0g4o!Uu ,oEQ[ %wf^ K˖Hp$@JMj$%yP]bq>qd@j]' b tZp A+%e qR}Jt~۬2`7M1$`fΒ9R&n G"/^d Y݇pSbb@̥3_\}q+GrY)j]u{*li|U scOva.( J"IMKt@YUP>?\iWX7/V1 s-Ǣ^8΢?WݓoG+џ\[;no}^%>_=ؘG`ߣ:k 5*ß4LPhdl+F3"vE +1B^OBa<=x;F8IY*QjJFvAk9hhڇb~]g7MsR=ZZbbߴKT}d>RǍQDրwTQ6B (G}kWә$`'O.y)V,;ˏe[Fֆ\2TUS <'5P6Xo~6YOcJlQB|\olm&L$Ƥ*I V{N>hnq< Κzu~]y+W$?zG@*;/"<(]UHnf9]^S˔O"ܵ#@IWEy<]ϧy4u_[̖onz1EEлG#W3ms'wA>q;$7&}W\L.j ib$7KB+C|w k ?s'7jㅝHa (yޔq[~#Fw \Gz=1 vedN46 cҁa k^|NFKFCj/L%}x]J-?0Wg;f轭 {2>׫V+wRpՀ#F&t5*@ww +z$܎ߍɯ$ IB>#Id%$T>!͒/(!J|ށ @iVeH}Y#A=156Gvd+A!e F7)c|>nn=Mx{ϗȉrZ]mbEe0qf:2ʺ+VG>oL3Fζ?s?s?s?od^0