#!/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=fd80bed1fc49eb6bd49109f0f20ae271 # 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 [rHSTP)YޠIHB"9c<"P$!22OU(GcDH̬< [^u6m:_ZFF^ovSQ5Z?d*0!?'=_:Vl{HqP"zQ_D"`4}JCА,d- ЙeQ`/bHg8dHǁ`K~ergGkG@-{i|2#v1lֶCb@q;[,'@,z"k! OoX&+ Ip"x~d #8@噂EM. 0 f40Z10mxE%af2/ɦ`?|xF,47 JYa泑G]=0#`7(!Aaw #BY`0 (,PO/;4 ie$0 h|' - (@evĘu>y !yd0~еnxw3]{}=P) [D}?U hWӑ䀾4(m<]E 2̀Hf0p6)N$srKZi|sm6':i_iQ_'k}:1T 5c0kW D}gĸFyYXQ |_T\:tu0Cv@`qT:ThtD}CYR5?_0xHX|V3=k]BAkcͮg*L\ㆪqFF+Pa ϯ kOT]δɸ|ay2FͨF]}(w*Q\c}T̲`EP$JՋv*> w`4h|i0X F獸̷h?|!r8I\JsWP3"eh& k9qWbL:?njCb1еHn˹ |ڟ]Sq30RD@"E 2$d-Ṱ_J~nVXlIc"{Obt!ֆ1TiųD)\ܮ*^kuۀ:ߒ7 FfŘWF(U4 #$ŋҬy:4VePc%KB&

`` (@Gn +4ؙ:49x dž|asH2@:z}TT8 KDLJ*ؾ9To$B{@Li*ar8!+۞o}ۂ~w_9^0tiO{G;t%_5~5N{\z?'fxX+2UԼW\)U1y8â:=-sJqQMH2䶙 e*ү20g>ٴfjU9l3L2/ RdBwSaRÔ(__:]RKgKRC%sKj-=l,)_X:VR>t|fSaKI$.<bYOlԃ8 Q]xX '( Ҹa3.y^2DBeBaaBM,|9.o$<F&d!68 %ƾd^5MwYI@]GFeIiK=ܓ?2Av7і-p:0k'qbށ-YK0)Y#;P^ȄS)LB`um^jwwwՕW`U#RUBC*9T@AҮ#}'-@<zWfCuCrj*Fܐ Hw](;?·hu#Ra4S2 Bn$C jQȕU+] h̩xnvG]Wr%K%Bb!00ePSlu۫0@Xz,Wfl'mhd($P[;0 9;F JU`oA8[Y!0ZDXQ)#%Bӭɖ5cj*~vUׯOxYe3T+ N2ֲY2HJvلPu]x;0O:d&'ZVC!YĶcB|M} 9-Eʃ] H_[8RmPۄw5` oU%`IZ)Tx7c*U<\ =U g |T28VzRgcS5)ȸf/hQ>9 )]Njq>@)U}^;ӐLbc/pa)BEL/ډ=5ޥX%Ti p>+r . ;j<7\@ISGF%YI=  "8lE-^|4?e+b((l<ĬC,y+Go0^  5t߁/epɍo1va?`'"nkHvlJE`JLw+<=("rR&ćejҊ1ք:=]ƱCIL?֯ a9'-o ,PWtΞ >bمV10Uy.;M>z>JZ<*rX%G)~CїZ!517 Üfz'iZDBe`4p]+Xkϔ zat!Fv}nTKX^8?X#W<9"=(ZދQj@A T⭠?@ eFe"`-mp(M9&7HDHu _HEf i8ͪU;sۮW2?NA~0fիW<-ߨXWPvjlu9R }r=Mf&)ȭ0ajƃq0b ^8$bF`f{ٓ5 yN$9Gg)ʼn na)(oqDW6?Do ߕI]L~l,〕x4DaSV@ ˪gʣlo0|Me2I"<81$yKhx[Rc%"lnaÆ*LcW$V;OxGb&NFN1["trxgIIY `2ᛌ\r@1sJIcr/f%rT.bJX&v)AL*V(*Fbr_eQȜ4CA:& Lkb(ǏH6q7r ͠y+VƲftD{uV仚2YeXK,TB"Ą%q}z_40ga,2> π{~];W!tFlt]1fcZ.,vhF^x#h@ ]KU-.Z-*׺ՒDLfI/ \T3mo ~zZ4h VX:K[fn,ٲN='?W|. IU0 pǷ,r<=/xT2@fQ}aݺto/.9KH|O!v'mURnz0EnM xz:Sa"$` JZրWkLR@-_6xbUd/k20˙t]:+5a@Gf|L#pQJǑ8zI >?.%0{v"9$C%ѐgW)oXTQQΝ%H캍UrGr:BD:9b{hxq='O ?U/Ի{\,}5GnKNykw;;&7푧[7h`ŗb.&/(A[o^Q/] u/GG'/gx8= /Q͍dn 㣣ƃgɻU?:j5^jn[Q`GWwk{ı`7;,|eojo uU<uxZQxޘsN7dvwU7$`oǂSC5V3PLni.?C,+pcкfpL "T|?$k)ª*d@rK%vٮq)HIؚY71/112O2g-@t ljg?ۛ\EQC ɦw,d%JE޷X89Fac3Gq[HOHYG0@=bcz"&ϑeVZGq*VHa\G(q}h[وdlA)l:Zu~4xظ\4pTytӶ r/ޱ/6 S$Fmc! B; ENPtȼ^,x*{<&G|p6H27X8ڌ>a_(6Oћfe8Wܤb/ablXBI$X@ WHC(Si6?g8(`i8C-'s%²Ǘ!]&+/eJ|CvSmM+霚ً2uuV juSeLn:Ό9*rzUPc+eɓ(:<գ:1kyH%śY쐋eky [Żh9m|}"ah-T[~ GJxho qS Bc7FG|GcX|nowS>_Vu0# '}ҟԀ=W,u.R <'ޕ 't*Op?AL'ҫ|klWu>EDW ٓWmٛu%Ey iiHuBol8/sk)唊3(RJ-,f1OE΀5]_X=d1qoWZud~Ks\G5F<*Bp&Br qq!>r|xAi.Dvk^l-2x*Yr]Rϱy0Tá ' 3ᕨ' Rh~N0¹)WU,`YIw+ YS`%}u|F-?{R`L-gɽʛv;|FrJoRz(g_@@&̜wPB?t.sx>Zw1>+5D)k#2rU MGF^,p7N{Uw\и,[}x^R XUPˮglfG1տU%񬏁{F1٬+Qf|`/Ө;Q&%=- snR5RSV=g)G0k@E)aV-Lw_tj~DRfb@F7\qw R8}B$rQM'5:׊+h!M( *6ϬG~䠮^+VDž'% ,Kjaj8oZl%]sdJ\DQ0zU)(d ͡|5S@ j\AEG*6b3 IBm+ #- S}'`zCt`#9& +0dKzH 8<gYYapCf`ٺ:mD4']Oep.k^"߾7_E]ԫ<~7]j~Z,FZ^|ߧ+'_GZ_KD+4@a2z0HJZRJk𼤶~L4!_e†iCIK†H]~!fQKڑG@Wb`M@z&k\s-'v0@ք9;'5ć{2%gRӘ=ЇD\gZ Dcfr~jb8$-%k2JlIw Lo=F3(+IGcc]Թ"t =jri5^F98S+ft]1|Jw>|UƩA]0;>s?C­,A FcS-~%?fNR9mu:X%`Jk5ܽ gcPpfu_DKl08쮜ϗmaAml[Nu.%PSXK[‘EpM&PGmȭ|vP/N+]8F됯WT%m`p)uƂUA&S9^m\_19[Tk53JZ;Q&V{Pk>,޺ Uq]37*W4p0@tJPΣ/h7M0.l/N2ŸޘAdcF-d=ư ]VHA[XmWJakP}=dؐ EIct%,!a% Av`? SN%Y>`s: 4UB]8{1V[֮D<NjGf,Ӓ.[i*^Yd_FC Hiz63U\F+bhۤZC\ 7ZemY*sXkX"ojY]kg4! RDlT/D4Av;Ê~Nf-91y8<{ZyٿDLp&) s:hK ͐s11c7u4kT:Z?f(.V\J].?dyaNX,ȳ5%W)S!-â_DǏETāH< 5`L>ogrAx( Is>(N4:]@f"J~~^o4b$=q$%6j/;vg[ٗQbR" +,2JZqx$tA{h]S,cȂ:K~-?)6^;pEI9bP7Bjal#&)7 𭄫 Sڕk(SE.NvDt/0v'w(~M+-}&y7 ml8zpuSogTEvH[/#MqP@^]a߾,76rd?A(xFQŸp$*KO\F}ᛎ^V!R+,49-!q$>B@nRg dU8 wPP;I"nByhSX4ͺbkzD:Dyݙ;ƺZ5A Q6Ğ .`%,~E체AniPV,K&ZEcp:8_ CVн?bWpȴ3h6(GYī(P:(wH=׿H١Nd-Ƌ]4aOL6sTӕrY^y-6r'He͒kK)7{`%H9=\I):6҉/2,7Ӎr) cf8̀)&1>;NzCa'mj"MCf` =SPz`*{얼symO) Fݫx$N'vv3+F|%Q 8O/V$CS VO[Q(jnX[]\?XB絕 8B@C4P m'igcá`/)N"u\4>s8ogDc<)S@^f;!Tqbpq#p΁L=Jù,ͭ߳<~upQ2&FW.]SW6MMΆs v3R3[Q$,CLE8;ErY;s,7y%shr1#:4S!t6ozc&I TsX=/2IXNRV/ě/ Q/*Lw\@hwxP0XYKzLtQDW\ē"3>qRw N#đ ݌RDt=6RsD^flXqp5r9i. ) ]'i$2et rء`Dy)0X'FnKG,nɎ`8M蓂iZTa1 \Tv'iN?cn/.U*g/%v8df/yU./&0; k-~ XVn]D PG74i(zV_:УTID ;v~7o6ws$Q&>_?baS9` ;ʀg|U= .6Wcu̱ bJ~U ?*e $ ^ɘωf@ǔ F}RPWp.x:Uq#5;KwVla8⬟mK?60woxu6ĝރF%J3J] M흍& 0o8꯽1291͎;@"L ,Dy;[fp4%HqfXyEtbpI6"`T;,/'?ڽ=ƅ+wj_]ҴiYR)r1^Tf/)V=A{C)5^ĖbȁPHr`E~_ M1OLu3FSxЊL s (#!]BB*\cw7G%K >{78XЅjlp;&n㤅2Lۣ{1oy9%@рyLOIZlba SnԅLc9/žN^$,5(`Fn44p [Rm6:n/ϝal,zNt\LVf `9ϧȎM1RƑqN8hlT/T)(XՄԡ.X91FDBޠ('l*RUZO'O[ƟEMDr$Ȱmjp:* w=Uؼ3\\džpq& R'p!}~3~ıqA S]QW> ųZ#RՠOHTHS0}EVE3hLTx$oI耳P#?[[cMͥ6~P;}rc$6щ-RͭXI8+Ix!qp}*ʰIYLuРaNMPx<9q ڏ#Z"sӅd!\whү?cs?$[i<7Na~Q+p؝OcF4!Z3$<2}@?j)@/4ߺK!N^X߃XN*<+ͥBq1!5aV?n kNivy8-` Eٴ>LHؾgJ^L;yy |g5mqɎ{)-U7J9F3Øw+<3hŋcŶn{1L4Nzxi7NoZVnZE 6ZΛz abYoUAL Elb.]?f~/v}1\-Ci1N@dØc?✨6zV?*:#+^Ll" $a2u/ )}$ P3hd(x8izs\D!..1%TQ;4lE6crU FƭG cf k}QL^z,1jÞd؄mF()N&GL7,aؖ>w;͎ƅhCv(x`TTG4[Yj⿭wjiZx59kϾ"()989nߟV#yY!ala(e@_p e"mKKLiuXN:jXjY[U=GѬ% ,%[n̒W@2VzJ57 f;$y{t='$@l᧗pܪ4u2L,9RukIrh)~hI֟ʋmS\Q),* UU%5gL3WALlfn?kpژ+,PrԲ<|)!3H9jjGZq|Ɍ!S's ]8lc3l)ߺ#yL(# lz x& t4aW7:;x5@4CCPLe%uhN5hEvE/q)|ζ4&1CeDh[(2gpvfż@9>X$hÏE-жì0q=3wU}[7 \Vnk?CYw1Lˎ0t#Pz:J"Y1~]p |c,uN :XK0@6 a*}dqؿF ȵ#+ _f Ves ȷ{VQw՗Z5fE)?-8gGʰl?*3>yE_(y0,qh=Q:iÀP$d6mV=h_HɓWŵJ yF=Bo$b oӶ]s!e__ W$ܪ:;Ge.!x(=0\3m}NǗ`8D槕- Q<[380[hI9fܶtqK%5GhIO /(;РR(18tWݱ==^o%T, ʶ)#E# G*Ffn莤J3MHIUi|?K`w3.~9draʪT |>z{0RF~wJ\};@j[vtߐdk43Wj]GQP&pP?Rkx-Q;n mKHAĐ+(Oq#`>6{ ;uuYy:gn> JQSW@EWE8%&/OE`$ E! 3 .EL8[k O?)qH#qڑ[D$%}M& .P7'yE0?:9,w3[CX-Sp`4Nİ2 [9PxD%J#O( l% " :ziڮt{lU9OqH@na:Jf裷G~;!y}"5t@7uPwD`l{|5)J(5V0NkY/IN^cg $h(5^at<08 oJ!°jFiP2;iN(,x0 Ap#=u\$Qa copD\OY{;.oXS euD%_@;_R7_ ^c'QOX,|NC Esw蘑JW($1:;V|U6v b] -c0IeiF{|iF!y*ӄk2ÉdrS>gS}֪:iKyv I*^dq >*"81?udW,'59릭j06Xq³0_^/: =I2ha`PK7{N9TTaMp+>:b .oǃQ`~:YY_#4?DE4%$SO: r^[פTQ~w0/wJx tdNKZr3xBqvHt‰H~SH6[ꚾ" k>9Ci|p8Sm[8p!3bhtidb3bO ('?M`wRPQV`Nv )|_ył0IXVV"BڣU~w|i@#$H:)FFcţnXrj]wU" HgFFN;jɑ >%nͭa# 04ϿB"G u"k0Rϫ 0oDXkdb"ƈaό P-6}8uȺD(C|4g5.go%Q32r ӕF3(9hg!'>E>ivxZ`'`И_(o-<'%={brzL~0 X-QcH+.\% WM?}ɍX0|nDT^H*!zE''԰g[> Ʋ6#yk %LT4B{};;;X3AtQp)U۶du%T/lGz,*׋DW6zp"iӃO1>y9#BgT F4NϋH,*"4oS6eEӋ.ҽ5 *kQN%Oej;_Dk$x2a2dv?I#`.z){/.L  V#dqq(ك~di+4d݀b;7u0C\$ 0x]%_5gg Ǫzb>I}"\y=9񝋒 0-f F|U/?)\GGp !~,xmF(8U ia).qTj{'Jj.0fekdp) yՠNNh Q}h U9PH@MT6n&[{z| h2ƛkB*#&v ˆkX &1'.{=x8DIE@+OL9k%$Y0(7w6BižOVLz#UV1.%z~^Dv >nѪM!emtzźDqZ Z;fX#ȁ(}"O񟇳%/e E1뜙 QTitWT'Q~o=7U' *6?w'_`?Jg*[~>㍪J|R?[emۭ'F>)aIv+.s=%==z[~O;j==]{z[[)3 q(C>X*Beƣ#>>n>~;f_@Ub"OEc D[|vli@艎}ӿY}-#)7\{a"4$#Dt'stH{i)6zjnFiѫ?_ B0!tWeԌp-1Fq<<t GI&0J3GчY,9( ~彪56,ޡQ=lNQ{&B-,>&W~JN =R!.b[xýB<DUM@\Q F\Y<\wc#zly0ng!:#T2^[63AFx{f q6\LZH| (n9R@ABXb+yJ࿣a+f~{O?.XsvZhwRb}}ALDt( )7?([';;I+|M"ќ!dhԁ_[Ub#U`/1AEύp  Ѭq )| >،(&&K\n;!CkǛ^r9*_Eޛ`h/ĉGn8nCt cvUTnkWi8 )\ |w͆eeC^ePn'UHbKa@ڏ\tH٣gv4ݐ؞|tR;FHU9cc^|pVdO,lsU` קM\n 3Km=KcjZf}ۀ݈(|0NhSIzÒj[^W&:2S',T|<(4O5uϞ!5=4PϞqnm΍ &>-q2x u l̄=JQMlyn'fo򓱙Y'eٞaj N<'tkb/d9Eѳg9Ne5;wpUbsfHwew]k;w89m7i\)E7a!15,DW !$s6ZlNIekg#;dـ7JkXh)YH'On]n+0ZC Ƴʓ3(WU!|EsL9yU4D{`N[%q QZyѴc6c@ Sp?40Ɏ<ޙQstz1B#%L[o,0A}8NpET5╏R0vb(W-n/ /G)ɻQ_:7&lULU4v]N!*A.l6iсk^ ho3EWI.GEU'X$e=g]04}Q  Y(*:`$>mR%u@)fM4A| U̅O6J!-$ݩ˴H;DK`A0*lD?z6šy B3*SVUaTIirOw'>]^-q F8i(,nOӄ# w-׆H]" L."_U3\BDc*јE2pQe! y|'˷3ʥǩVJâ4m(XþzZo5Zd$ Sk<1ojeWap'NJn,(` RO ],reHs:Au4oyiƕ$xJi{Ký>%Bz6}r@=LipwRHBUv#HRdی/;ݻjɿ% pβ|GZGb9ri>rSiӻzʕaa.s 9 9v8;h4$@OlM]E5tՄO9,Ĝ > ΅i2Z~PkIi_r%<9Fhbu嶹r;^R CDп_0lyTP.$ p 9{p8ꍑPV0ay/6oo>F{,A >GGZw^"D.XAbOZЅL냑j$G42([Ќ!!{%JwGHw=}:]4mG [!38}1Bܱg$.GRbP!@m^m2Ha37${|yHtz%V:sYt@HCޡG{Wzo+.`:spo:\OE tPuت)&8 K= 1Kmf4O!Ih,̑Vv+\waCo7xvI~/B}v%}3> t?+hxTw\Bjyٓ0+ Sc8ajw 8$3k`2OGfA1[L>44ej'ɡ 5:'hi=WvLq?(y֯;!:۸p`YWwOvñrU߻6-LbyGS^, =5TufHI)3hwYӹǠ?Gh9֌!OLS IL4xa4aXD$6Õ<eD&v'5 2tbmq\NǸ[dvFy^:3r*a49< Mm^H ͑pWcJ1t9'Ufmݛ aV2d]$IW'+F,?79'ɈPF Jᛂ 9RfWqZxf:q_$ڕ,(xþ IH[gԯ,U~a6b7یiYԳ*iSSgDh 9j'aXlR]M9#9/r2vKpr:ccZqOY 9(x`aTԘ;䆺)=e^]7-[J_P٬PPK%hWuoiyP.Ǥwa@WKVzY(cp`zR1`8D8gƺ%'@>~OKm?T9Sq2n9tB~8-.)YMڶkt4xS(kC ic&(mJD~{.QOu[;.uyz4 |5NɸJz9ER({W,gw^ 40l8 ph\01jg,6xh';@x&:Q.bܽ` DW?FVH:6-)zﵲw?TvY)Za_Q)ljd68$3ID RfشY=U QG>|I0*jq@}_YBz$Ħ<{,&#u^%n?X"򍦵54q [׻7s[>9#&o>c`1Z,8/7H+%Ӡutd(<=oޙB, PT6 U0ھH`k D#< *[wXTZ2QY trtl}$]aFL|| G6wKԡ0D?٣S:Q'T*D>#'Gzy> rCfΣ@WGӎY~ >/mm^O]r4Lx2a(L"HURg诶ggM=x${&2x.>h8SE6}^,١+rlwiO:zV}'Hl,r^tY!-bAEkAI:;ָ@"Ya1&m @I"R1uT3,ۻDI!gaл˸wbrK֊5?ALKlz!䬘Aj{)91'2ubHWboEF{p7%:┄3A,7-YX9 VE0t:l)]9^R# OukXis8&/ʭg$O{ 9[0Dۃp==bSri2FO鹴aeŧ)ɴ.Z{8mᐷ9Kդ? )"i]͡>w_ =(Eۇ *(fgh3Gb9~>)FBV}H(R.Ԁãp޽2锰 b8>S4R\+)- WNV=%ʿ iS ; نeDEԎ^ѳ܂Mӹ琅+W?(rc{{4AgZ7"mؽpA5(`:sZU+0&@' MY?~Ӂc3wi9rpT1TDG PVHTK7O2 W)Y#,K!1WToו'\L8쌁b:h B7×\KܳMʣ_ VthsIЍw2lGŨ 9Pi >Tz4CRqԣY u @C`_Fjz(kɎQ>Ւ+Vo8Vޥ%xBzt6kl2'_~M(2\Ԉq[=0Ć,5[>j@<t2aHK*ӓI8; BU][ "5llj]g2BYϣk щڦ٘",h"CfqeXԮԧODyMBt?ZxG*˔6V$:SHWb:ZiQZFSo6 Pf(ezۏNml-J1g)saq*Jכf/DcCj P6c22pFA!a^"0;,B_@s9V%NNH&^]G}H=h]xO>3g"p 0XtcFLDZg4(F[8֠Å٢07Sd6X:o^U9d-9'A{Ep~Y\&we4_lQ`̓ }n;uOtQZ̯uUOf,7^<\-gٚH?iH" ;tbgz@!0GBIϚ-1 \eݳv$4]Ip/j#=JdƖH^ m E卷 gLΒ {µ9m7 Qw2M tD+!_|Yv#rCp r$V.թM2# ᎐%V FF>Mf Y&CpC-X$|1s+KmD㵬lm1 eИ-O*ܶ1oܴ'MH˳OxA#DL(l1-k1~gDKHLҲ`&!"d'54 ZH bTwt KDeˢ IՃaY PD(R $|1$4)vzcm7> T%}6_Gk1muapU?PQ[wRxm'+Ŗw3n~N$dStɫ=wtz #ɂ}>C)bcSC8b-3AOeA"j[j`, CXpx2 tvØprs:|&WL¹[KQ8%C4dy?%b5L+juN5Ϙ5?T_z(YO6QTaXGG\Lg YlI ]:\EA4l&/W>gyzB<4^E -S3L i lX&go@ f"Q%FJ0^r( e/167)0 HC뭎urπRiNIR/N@=X"kVФWD(Y!~㯴>_ЋV uՈ؇l _d∌R1#PHP0ΖB(Hi_1, ,o 'EwOu=g#l;cuSZ `cWUI<l`ErQ^@mcWzD )Up[R9tt8{mtL9H٬DMTtܽ)a &Ca Zx',DHCCPH) TdUt)WCG<{s{4y'qFO%?>9s'?~Wճ6c47շYSmt\<0/L'?&$׋t7N_L!St)CLZc՗Ҿ'5ZKtȖaHMgZȝig-V†ۏ(m6'fQ oVL?IFR&vZk7R|:EyI~ro;V8E|͚‡WxЮ &ﴵ {è6͢ݽz#ڞGĺs$/^5}{{$rNN{kOo7kE `K#wv_?>:cܝ K?>܉~5?pc8 FiApXRcH ) 0B ERH|"i"FH0>z: pdˋ.f_5:/^wNqz[Oڝq_ u58yUosR/n>ܐߩDB]7".WtcE2u#9EҞcMdյjRki3FZtG>2[yAGJ=꠩ BHydPaeUc}#f ;Mň4u1a%p+uXE4_+%& `Ecs|"Hb U]wZ_Y#6{MrM@Cs#@! MNy5;_= FeGzc@=% Yт.SR%#GE_$A\Zʮ6; Y7NšIvLIk-$0v<)=1nzދmr߳p٣#kwgh#^#YOAٓVK0 &;N!ң%Yd4~bxk>) N^Z~ c' %+^Ī3u ȵ͗߉ab%`xY'5Z1񢙔_suV8r7P?í /;IRnס3bQV*nNC_unx~8",T5!b Lai)l+ -xQj !z=q-it ]`ؠWxh.)#x>/ BJ\撍Zod@ug E;J4A/Q ʦ ŇC" όXznώp$J#ؗP\%IR4lN+.C3D`/஠GPG܄ Jr}̈B iI_֑ |2e$9ժ+bV\N_z*J=I 4xwElAګfwR$FPz12 zOm<Y/φ,iŰh9TYu,/Ԯq V\;G9G 4)v7 Fs[d dGDxma(l䶌&!sҘC(GpfHzyHýʚo+!IZx ܓBV:=&^eRߏG2KŀeW/KEşP?ܓZ/AILk-X3އY]k<-ԭ9|OʻcNΤȸK5MIzoUcf+}|>E<-,|]j-lt: d Y(Xx'-T:Ϡ j|*zXԎ}l4m]˴f ɘLc" LOj#u![I+! ќ/1$>AKH"BԳ#joC. H-!fw!EOS-OEqL{`|~i!V'M۠^)zN])3ciy 4naZ?|Y79|{qK8<>쐑EڠiFK譏e1+%@S:s)q3=i׶Xǹ[p Ie9ACFW|ogH`qNuQ+ܘX;&*RX<&@#ΘN ,ey]^ޙB "eHe|@]ѝYh^L*U]9ͮ*OkERteĨ)j< b^z "'|=<`I Q") a![DhZT7'bDoD2M; Hb٤١%Ȩ^ZYACG˜~r{F}aDMjRx+zxYx~}\?+Z(bUfi)c~kUs '{PY;nzol45DZ}M:"fJ`&bً!|h*"T{~=wוbp,AAj#GX *5CGbb$'b<>{]hW,F"FJq\nja]sɳ1o1{vV;6V23^ӻ t3>$m"Kj91~ T[ooa{j?1//82,bvzfxߣóPieoiӈ>k|t#B,95g5}՚?O fwј\W#EJiЖ9 I.moxR++W^:.':J^RK"@xMzӐy.9%)-f=U f)EQck# +My>TJLWja/Y70h ej& n`xoc93L $uVuT,F1l4]HFELS bE¹(s.%Kɑ&bX.T߾GB۹9O)(,1Lu2j kc$-+$GwWR\Gw$;f7@NJ/$޷5U7 /}/ 7 |Џ{a>11'w[ABu2H  )ϙ=ysRuJrYQO73=9q)'@w?66 LLvp486wG0sF@qۓASp GmǤš~:zݙg*w.wiX.3XHpàm5~ ??fԏ #;@][p >/s(98{lTZ* 㞳sRClAf36N0b!uQFXLǦѮI!|, "mVmyuX}}85? : N0ϝC7~{^*ńA6Ȕ^Q8?*\ dF"~h tyϑHb$|ľWH3Nÿ#qlq<& z1i-F0i}Yo>1I ac _WlʎMu{ fim]fJ"c]!I8.yB1 o6XZ"w ~.F ]I0 ^]faTS~M}u\ ŷ'xz ݹO$eRK{)M9qj6ـ3k7qL>))7ښ).$XO(Oɑߡ@@2`dHIS,r);k6&c݇UO}y7HQd /i܀OvM/ٮOhgkGnA.&`X $c(?}>_Ϟo1y#@dPXmkiblk?ヱ2MkߨC6V"4@)".Q+ˋvΪNuLwx#%ak Cq>AQ6 .A'Xn-߬dC Ɉtk~qUf@xP9GV)('6ҭn]t:) BBڔI^uC>)v}9$ )fYd6\&ZP%ez yC.>2)/涟CFϹ_M`41 v}w[?8DBD>]S } 0R}ِXh- w h88Yε|BTNGΏMr]욭S8ZS?4qbv&~[(4"K?3J%Ba!Ib8aȞva[5St'co@st(ur^<9Y}_R͗ykVEwppQRp!; h\f;T&hj%dZۋ0]G{Rv^R!s!R_]ZSYؔB)& 9 ^ft.$LdJuvCqI@B)_gGs-̛z;?_fF"wxzhk0C\(Ih4cwLcB4"0@qBt]B+8J w͓ mE&_̦0:@:AC47/KG$ӗJ0lj0DW2aTQ'#=nu @d>vJZS/X6̧!b8v!{AVHl$)w99&kp5gUމ4%(F3ImLmSjq`w-kg Njc=Msw'ub|y<3>_gce UtjΛNju#S O׫z}֬)t <~. mee$|}g,≧W00%"u~3Nپ?ZfOWgó1Z6*9r5OlSkvآ~`{M{PPᇭɭ:-XɎ2.XKY*vk+UزVm+Wc+2_V9!?M7_Y jY?W[bϏ^7;$+^S_Ahcַ@<(;KgQo Ceg@x^\( J'¬qA*D3F-+RIvYU]ԍR{\ ]jCb, k$[-jVi-0\(p37"ElRǐ4"ؑޒf ;8eЇ `lM+rsQ 4#?ঞ'{8Rr*GfdQH qe9`f՞IQ%#ւ!%<؏W>xȭ ;"|R6,gǨ菀vs@(nuq} ux(L6WB -vGl9y-LZWNLFGMW 3%m:a^dǥJƜtUْhIVR/h u4p@<]U4E"Bۑov/~<[RۻplkrѿOJ??I, p]` aI h]+}]5VRJ}8Q3 nxOI;&yIUkQp[ԋḨU׺5?ٳ\̧ȴ{[tvǙܶ. B Zܖϓf{VabV [3Km ;]t, Ed-%(lc,XړĨJ&:.,^B HN G?Qyf֘ڱ`GH/o#ԥu툍Dާ*x$W -L%ņmVwAһ`I7meuxVтv:Kz#} x)Z|ȋsՑS ĔPKg;8uZ[#eJ\d/O[V jD² zU̍z:Ã30ɂ1S&E¥KT:qmaH8 ^{ e*:]{}?EHwi%Tw>WߟvP)%C'GD{n9nn|9:z60g݈w2z"D >Ł%u rč36i(قV֪-F?fB%{AqQoTMǯK @/hqhCI:NVT'QY{?/OF{{u҄vl7jgզ:=k 'whAF*zS=< ͜;7qT:eMѬ8' C<,^kWX:̨$ KuP=#+S;F:{j7gz}rr@+ު760:luZm`$o0qob?WuYVkn7$UY4yw=~M}R]@޾*_l/D@smc|_t&c?K^ գiΝ- kT&gS\=e^s"hX}h4֛np?c@)>66hq3MR$Ƥ* V{9'}&O0g47gx8k#$;QiƎKovlWUl37m"T27w-zq.(lOIft6]|mY~uk׋)X=2/nWǐ䘛D 1=P 0YBǸv[+.`CMP0hZX' /PC^7vxEۇr#EGx0qEwPUɽ]D$񹅭i ;5$ACMZ0Og<{[AJmn_ytxҜwBzhoǮFzyj7 cB_,BQ2&/crg8 pg 0`x5ZH/Yzy }nH 5J>Gq@q>~NXVyc4g:DQ>_fx󿗾,X,-\۪lKYT g޼*c`b*b Ix2cܞIlm;_>QŞ0