#!/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=88759a49af10f34b10428d2f7d52009f # 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 Y_]xNn|/{ozhy98 zt{]lb?&3MrQMgglm.ea3”7DQxȴՊhbMar?H8Xl϶ gAȒh{ZAl>b?ڦd2hsc6<^i}靛?ЬVч e^J [byEˌ&/,I]ѺL caDC4^([LJ{ F-J,Gv͔AOn]%Ia)XF#]slnjD lQ lѐЇV643!,FcX-ēD2lFC4+$b_+cp:{cW6Gi1m2։ms{jZOcD] _Lݲdll:ojЭ3&|dL.; PcڰОvh݁lzusxڹ1674aOp x46Lǚfss6t̍ k8֌k}tL'6+&2Pd@v>q2budF_C 8k 2с#|ӑX-?l]k`IɀzsSFAܲ {nr:-ݼ1=O-ґfk49 >[IϘغig1Aٯ@:@G$&ѧD =tث+M,ILCQX ]AU+cR u"WAmM ΉqTP(qʌ n $^!X4J Bj ;e&M^!jٴss; ~ܸ{7il+kcMcbf_Hl0hb)^q1ʐkş[jFk7>_ِ؁<%DU۰U)}I;d16/*y/T㿓#Hy_?~OU[wF?_%Z_nȳWEDdS9>9~|Jk6z}0<&yB~3ֺ]J`r!oW}Ax<$!_4_lxrx vuDk7`r&የ@D+F-N7tȹ5 ̳5wm,j4j.5%[zXFV_dE.D( ٨u?v{濾o* dkr1:8v;CS {ͯZjXqv;,I㭗 {x1wSދR>+jVjѺO&1Cjg~tn;-D0śqSQIdWXdF)%ZRpcϷ{FJbydX-adQ DrQp}O)㫎xᆜ*EOr XnJ+ަwg ? Yk i~Y&/^"{AjlL.9NO^ DX ̵xHAOQ\e߂y*W)Nd7")S9Vc nm·Mfa S|V ^OySȝ6v~|vmdebv""X?Ifc0 Tp{?z3-4dy9ߢ=k4ӧ{.;p>Xj!GWҢ`뢕%[?lv- a6daeYY7fQ@r wq:ɬ06n"pi6&@ 4񝂹=yuhVz缍.` _Ln~<^_y7MUῬ s8yV7)0\@kȀ+q-<_Y-7z{1Tbnt +wQ>k])`]UO̔<>݉-1Ag͕f]u8*m/T %?i@/0|I mSw{?:>%λ{Z_!޳KD!Fx} ͜TaB RN#[eգ _.ڮ|276+׃wVjpR3WsMs9͍z^ǹ0Lvn4N9E[pyBgE\b)#:sd/UƞLm 0}mS_Wч0`AⓉsrYqLxzm \Xر?o{wYeRIp/`]̏8Mw[ɵf[]^洐mõ2=X퍉mvoz. *EA|Aj@Ꮼ눎]DviiY!C  #anHj88`”2h <k*d6$lX=5l RX `*?njb=HS Rj>*#73A7.u~kЁprX2s˱hW @/.ֺ+%x-%ȾA% $ X)>klvV]ppٸlkp-X)赘mT+w26_9eK'.$i]X#BXB>r Aݤ,<a7 RR٦*(O* \kα&,"x:m*˙)h@wsU5W& ? |bݗ ڰt$%Zw VXyp}X<痸om9j\2csUvI`TFҵf lg"x?ՏZ4,j1r9$U~gR I|'K;68*cƊQ{nt65,ׅ!?l6v7w]hh"ॖ6nRE33v:wEqZV,\/UKQFYYWԥ*{ޢ$Q $= q\g3YS^-8hf TWiM.w"յ'"nI/Qe_e Sl31cɆ!<RuQ~$E!,v[qlv-`EmaQ b0D8H[ | &  O]5[lKq$""SD'5wW_҃+m*Vh }[ pW?Yy|5c)StwI.ـ3C-*(ow L]AJj띰Š(eʷT+Nÿ`5K%=hAMCKyv@3d@Z$)lеӧ`7x%E4F`ŨlZ"‹$d@OƮ{P`zycƖ\d{ڍ ! T!ҨU_[yMHIDX ,V:.5<}F#d`i+sPL +5hSa7FdI(uC ϿMw0<h'LU&\BI.O܋ KK-~YyO8X BB<~֊GΈ|8 \bXIѓReniJ4K$ + /DƩXuа(_!ʫBbeWB,ɯ]0O],lۃ go,mxBYUQj )J~+ (֠,v:G[Zɍ`и`prtJsE֪0C%Bvr}P7h{1k z8Xe7woeGj]DhCbb Vԗ->_NY\U"LSBp%>wQ1WY/~^w_g*o(>3Q>b$L>@RF(i~;%$կvPkiF]x{8Hko:hj-) :R9~6t׆O^;:Z+F[;OrT_Jz,z irJsG+.EL_z,}@wDv8ȣžb\)ꯛ..z){ɻ=]1tpukco4g-!~ٵtx2G7}:NڐE\xN*h$9K d;*`? -)Nq(~8dFl>ʩ.y]yە< [`aLIM&I2`nw:L>D1K%ث̯6qטB&3jQ٨5^j9Tv}n OO ^v#>YpfXD%L% =Ȥ$1LKD *${9Ac Ct?vOO7\_0PeQa>MU?SA71ˮbJ;Di]Hު`ByN# ;}uZz@ЀZ5:j>w?QAܿD?( R*҃¼.AưbS}cd+N}\SX$@k^0uߺZ !TUPΣLT@OoRclWDِmsV$IpΔ $ޛqdXEeIe-%_KS!;mXdDd#rgMN{!SIn3&j9r.XU2t%y"j=yH| uȻ>~ܾ }C_NHc6_[_Hosy?R4h^(~q~0bl }7FpW 􏍿KO;6oM*(j0>%RکqAap9l#_^U3?P?T"y7KBV|^}vЬ;HY4 ;"k"~u1̿zw ȼ4څ `zwOIp}1,8371*C$\ S?<+PbI=jRkXLЛ< \;8ܯcSd18G*$7j(2R4|KMq5Cly~pNo;5rKqfGa0itx`a/ sKD34;wFE")1Cj{qMk}$x̦}twou,Ѩ;hai:r%o.n@"2Kg0f9K$̛$Ãڻ#o~0˰I ]QH{EN;8]/dβ^ h,[W۱Y%W~^]MD4Rpdl_ÅT=֋l]^]8ʜ f-qQd1* 7q Hj<sV@BsMOCA7t`Qi(pb/a?+:(nj`͔l2rG9Ni1fO?PERiM9vPݯo %Cb9b;e&zZޱoѹC3x|i sZ.S?kKF\BQ˃u5xp:NZѴuDtH{Fje c+iوHh> yD2WӢk`*ǫ&fEdB6 \ V*&2Z0 ЁzR=/\-z+eU:tfL(dv . qE(V7֋G'M5ဨw;s_knu҃k_iHdvoY竺 l*,LwN3ZXþ)f,D.yx0.h0&3YgXJGK |bDq!W.\+FRgA@}C4cwEf:3lLY1"_t"}dؽAGGY|јE`Dg~pZ[݆UY-v˦0RRM~|1Gӵdo ksXAg)Aep'w1ʎ*Vfyf^!M6xM]jds4ߌSq{z5Vd' eIBd4\L%SFEvd"8&k$ RD㐳[Z6ww167/ HiW2U-~y4ǂYug!X}8+ߥaOF:` C13g1lG 2=$Ek{aإ <Er}:  4D`UhM{91ײǑ|y?z?"M G~)˝L?/!4^yӲOv?I5e!a7a3M_M8ڪ`&y5=,_: PY|حP!Yݒ&z\|=f`Y!mMgi).sv+\L0ǂ&)ht)Owgj$pF)7浲6x d\y©)gU1UE*3OCT[[Fm8=Nxu[|qJhHtxnbc`=t[n7>+uLjۊ%֏k`|r.:,/66ռ0_P+H4 84>#_F=r.ctNK/3@Gv,'< h; cm@N#;a\BQQ`80g쓨OXb(@w nRƺ #v u7|4dA)&Ԅ2v*pcpbU"CJF%j[=bpc :Ljh/v>vJ*aF8|GÈߣlLR ϻ73௨z6GB zjϭkgxRxHƏ;:#vr\Ji[,s]ф#x]fp32ɒ {GGqPD2"G>N"3X mj^(aZllk?'X]}}n˕lu2tZ^X%ݖ;2k6-Rm Z?+Z)Y)x}4j{jӄ_cd>U@TV 1-'`:$\LѦOJ,ꖄj_mLx aΑ eoDFC\Wm_:inΊ8 /bUHMapM $k{f·p ҬΆhy؂`-#MU)4N" =Y?Gqµ˜gYۭ^5oNCW>ۘg8Zv[lԴ_F: ߲Or2%+QjK!Y65Z{W..b`9$m2Beaq XIc,,BZ: Oak$c:5X(lN7>zMM2q lh>F'{]X]$KnAD"FTneW5y n R7|pu kI~pn81 p2Dc%0lu+z*[ X t[Yl Ln#g/~SՄvTw"Fvĭ q'c8Eg1g"n-qy3Ke=;\r*8j(͙į-ۛc *"鮄uUJ,Mm %6x{h8e8=8بZ!"0/Fq!ح{Axe镤On48P~Ehu#&eRM%3윞ɒ=W\}./,Y zTcE#o鈡-?cr/e'M]r ͎f]k, k- ;V:tYLtzV&)~aWfGbMQ"ߋٕ"(TR "?[%LxleH`1"EH=+ch:X*K8/p-j()gr|q6H2'%eEdIr$ e}s|4&*;4) m k yf}r1~GWۣaBBbv5ݽӿ-v(VϦg8!.:@Om"$PpdޑyFr++KJG%A@t4xت} IHדN.˓X5k"8:YH vݾl&(yC8Вz BrEI2F]M46NSm \"/, hlEI:0 *foBjhS82`..vBk&v ;'!q֯3Nc,i? GE] =!$K!tH'\aH !lcW/4U8Av^GO±L xD+ԮEN܊fAFT ~{wqOWqڦS= ,@L.A}Ţ7Zk+bFN+;4;44/Q 3I`Ni($uV86nвD9y("BCڿ5VEX8"`w}u,v md`K*Ib9uڄCMϠO?Cezd&W\0mB~<^[ @Ld=4u:k#saCiRGGnvU]P謀1ZF*8V3P"d}w`x4h+8re,a6..hl,J0dHLݡ@! (;MI$P])dRSA ]@SFxdbN_\vOf\w,%))+nR9'g8{)^ Vx= ;putKbLG3Љu߮`NHI]\iˇApP*+>%T𥳜b;Xzڟ\T:S\LQu[le%%is|T# .N8^GH/)%m6/v338-bm [H|yջ[MC! .:\oS~GNOY/(x0TCDXWH~?&0zi 51nxR=|fG;-YǏgw2nEh8vHGf(N 9ykŶ(-4$`x`yInwEK"e~E{F>lg|ld0 >DS/ޗc'7ѫtIӐ7E`) ,RMXu=,KVX 23p &[3ZJ`S /Qm6R̔^@1Ƌ }/|Ɇh)zx(ĥry0)x]EVh?񯆦9k^C9<.7aLK{ҜRKaHDX!&nƚU``Pj˽HtN2BH_=L=f.,[RG8z7q-V`8Ÿ3]9wV6„ p `] d#QǮL 4}dy Mk2 Z:bm+s\F3Ԟx18<l?AG}c]e<_2 n`IjFgC+]*H(S#!֞\FS~b V%)Be.sfE(+)h3(H[$q=l k3먪;zu|(b_N| 전 ' !Ay+A=h\, UvZ]5y ["*QjEvxSBj6j^r, 4h*geo;lgO!Ұ5Vm:jg';Bwxq_,-Ȥf6tsōWQ%tΎh%=5OQqD#8 mE{x6\mm rW]|J5;Ɠ'oRɜlNM_:'8Ñ7l/Lݡ* =YNAb(3b:L3$pjdiK^%_F/4LȯRz~ՐO~kkR>9_׫_O?+ 7ca[ž{xvq>ݠ(#*%gp c$ J Вax5PbCS&곲 Eb@nsQH4 m|x.(U##l>e- $9Fтwhr#s O'& 4*T0_=܍BKֻj_Ra"#,KoT-)a>. h+B6R.lkTx mMtDCBQuÚ'!DH5T}hM%(Xf x/صWXlM&abŸT7,Z䷂f:3OP͌ +2T23p\(P#uITH.@| Z%qa>-t7p qQ#dEES})0Lt8'qS\R%0[ Oy@tW#oy4>n@ݔkA#XVqƪnZ2Ya]a{r@pQ"^H̳Y-1m(}UlY^޴hWc )K /ňBR_4٢Wd]mNؒ  eF A=mFONAhmnPE^^P`(ul9s P``+9\)ABْkv0&6ì:h^\cX _,QyOCJM`4Ep 75/o}@ie Lr.4/ӐPZ7BaPNw+*Q݃週<^a2U%WKI-M8t01eT*E<$OcIy ^ڂy_{*7ɔSQ}I^J7ǀtt*CW=\2X`.B1?$hKBMRB׼pO[&SfenvZRz-^V'(7> z7?nͷyy،'~[ywdwdܾ.Z;Lo[ cnjץtYB8zp{?& H :c@K,:HB1W=€CF-}7ND3aH0r0"l8 ;B3#FfCsp&C옥)T`D;[GkpqջEm!>Epo#e88 ~ D̦ Q->V|ԖFB=KZ2ЗV\n(kM#Y7XI &14 6AA% \hׁb.A0rޡ}@2,,l΁DL 7CJI-XԵĄN!nVwaԜ.XMdVXY3]ug'Μ޺Jdܯ-h z$!BTϕ=&/̞BeΝ{~-&M%cӞʑܪEhܹOGxXWp]/[%m0fA)Ή v1ФH@8wR Z w ٜv[,͂9}^iXF9'ucw=R qm#Xϙ9Qߒ1y2^`o #VKp߯4BC WvHĆAΩ({)*qC8^8,BuEM,bۣj0 F)3UnHpvtoo7j`#A;AuTkN0z GE= 9@w0^ :kx\^vZN^ l`Vr2 +٦gia2HC}ĒU_б3r*iDaB]cw_L/٥p%lq1 #7T7ב!vrO^+ctYe2&!FYkZK,vz a3xCmH~w'kAͼL .xtɘ(1'cPȹ ٱʉ`G L࣢!hA΢/\-[^|{,jQbXF_'x I\Xm ST إ?nŃ)m⏸$D]yn "5Iki8֍r )n"$jfG!F'lى&^hpG]g,]dzY2NvY΃/rG(FIҚ8Ю?JK$3nzaNo>E<ū*1=тkU?ܦZ%#5:"`W:h"/@%p4nN\2& ĵc`Ok'#jLb1M.P61nZhK3x|%؝ssbFda3xt&'W)(%1E7#eJ,QZm3x&Ì='8.[/:%%FK Ř݆ 䔑5!P%Hg /)_8'Tdy'T*pb9fEͻy"{r /&S!6<G6uE`_4@0$jQR>>7V\4{5N6q?ķcZH5ޒ G'A ybԂ.sˊ,T uD{Z5^B%pP g/j5# Ěj)kX"ѽ@ -Sl۰StAqQ?K}6uBp`6 R)7G0L2opRM<\ftב)S|,8>n~Iao"Wˆr9_Ȏ -Ey{Ȑ)@¨iK% "Amq04􎠅p:އ?S^»3(2Bg_ YES!2 &C*[̸2Vh1.5h4SL5~P_ 3X0 ~]Y1_Ek0DzPdZb@hVydrʑ\&[Ə:~&1ȿu 3iYVV R%2OsѬb%fOXDd .)/:Q=sWCLɍaCӋ=-I S'N^`u%d쵻xꋀܜ H}tN{P@\څ!'q`g # _0f8X9fe–;.&1Ef7WG*Q֞YUz-S.,j|8q `Fu>'i )`4~$•}>!K+ʁ"8 [;  c%4H`l,\ƝRr)KՒ6rx 2@8-qn9 '_#窘͒}>5lZQ Ql#-Y7dQ& |y N~wc Ge v E;+([(4=Aʂԫ]c֮'#s!|@2zM`S%4r^Xغ:, Ԏ6n6IjIIbF6?K svd$5lpFľOBҢOG a]0*x8@fFᝎu}HHIf$Qs,!]@ޯ}U)8t"p`5B93<}m cߙt2pn^Dc.mx9l#\6$mHVHC(d2VbG l) d.Γx I,ZB~2- |-|K?Qc86g"i5bzxow/lj||'10wCe+ZX˰eIDejp .31`PKB|LVʜxfe hՑA'Ώ`K Ưc-L hZͽZH"ĀA?0pdc d}8fSE3إVlAf3V⢨1]+t\߯-GEhF qGzF\Yn 7pyf(:i~6vst[h07˒Yp)bY$rp<"n9B 74ҒX7]4u)` U/z6g!8D{ H B ZX,+&/ 77>/*)LGf=}=jfx>d+=%4g#ص=RAe/lE3t⋗UڠEDCJn,$/Muq(u| \@UOߴfAIƪXWX'XI*/uB"@?ayVZ2mňXQh%ъʬ89UIĞp>GRDmہ73$q n%HMs\N'Y5~+@t'< *@7K E>殱=EBXrr!r,v/aR4CWλ0W'_{NDŽѶNc'8S/K|z\t&?Nu֑5)PgltӶviiES<,\Z ϟ˻B=p=o].@zWpշ2O2!#bua6Le"'Dn,)7C:ci$#ve;M2qsvmN~Er.dSh3ZĂ %ޔ,t{@_sNMsc5fv4b {WWt_(O=1^5>1<3^b {ȥԷnndPOK7hqDe 8^O<7}xp83Q]k;sh8$;zO*ຣmtj>fR4;6Q/&Ati\r/Bt:It)}[vRk  Mz󘋐㱥pu pW[%L[}\XlWB]lˮݗ<}v^g1ŝVqgf8ݔs@8R͙K}H4&` iH02ѮPon %*2{C >Mȡ2hBmT[Kh`fX%-ha+@ubd6i\ͭ3ylL!EPѧŐ'a#TY%,gH /^r8# c dabPR:8- 6ۋ?y-f"cE0,\x'q^≲8^snV@-=KgdJ$fD2)ZQouVWo\6 Ⱦc%Ei^l'o #?;O[:e @@'ƅ)1Bre!Ïo\H "5;ڧҞ7cρhV%g${jWX^fy0hc" /]V"֎sBe}K0L>:x:@; c~u!\D,ZN# -. MDW/H/=֡hI/Ѓxͻw DQ;;ޅ+4|'@&ʭ]kچ^` qW_e2'4oL[@#˼ t.ؙ}z=$ Id GJc.J">a|px",SIvq{Lk.QSa AGՏdrm_P-REPcEJwC}6%ɟ].UF<`bLe3r4^OWFE7+CQ(a|/1_ZCO-|"%f9\f.o\[}eٙI\⤖sWt-ÓhsDĘv6O|K{'8?s.rs8s*|b[3\VX,8$V}u w\,LdOݸO7CMLPn+r60MJOj3.3QХiy.Z1YY[{\{ X{0ퟆcF8@ 1bkF(Q#KjֳQz< :$k\doUT;2Hsh8 ?)wU:&n*adC"Hxy9i1k(y 3BV Рa]=Ïمme(8݆b ջAO'`mɼuJҤc uy.hFQ|c3/48<#Gh(B$@Ȇ [S &l=_b x)P&xIx_>°"[ _4bm[ J.W?ة#-^fIŁ Ѓ\/UKAEz=53l@)Kt^: 08/oar9'hӕ#*MX/|`Iˆ ᎈG%7+";-О F8c"tF&;#n+E+DgWh?.Ϧ$6 cx P1kNBS[h$4Ǫr< $Qv[jhfk2B#(S(:GtdvN2aG0k\A ly[48H E[Œ3hYh_`IqHr'HtUHX@gO 9iˑdc]t +Q̍J;k9.ڰA ? ZKX|3Z& Ȭ wlst&O^"xbݤpm~ Z0"/OH .4<30;]8E/MJQmM}tTxv*>x3Hh|KqylQsRXP4>aLHwXs\!g_LG-vtRrb!:MgNVܰ2YP!yqǜ$":gO)F53hf{ӠGLCNL| jl{s,yF'Eȑcr1L3=SB?w10٨ܤ .| GC1e:-wr;9CP%Հ:r/~C t9^kĭ> ш򥸩!acQ$܊p>G~`/Gb 6+,YR XǑqT3KA5qYn6J! AhnQڍ1'gk?2,xU~5ANb03!bV۸;y4`ߚb^ 2d1iR5~((p Ntܰߐ[k5AY/t+n a.Z^ɪ7Ou=NUsUQX8Hz3"Ce۪Nz]ͭZ ^$ 4`O"arc}&6ؕN7U\Tx]('7#B60QHd;_m4]!vvvZh&v褾S+[o^ڨ#ejjժ&###PpبU&uߎj-\?–$%H0J.'8“zRPOIi?|, ^(3egÂV׻.?4*cdm[/R 4%L=Cf yl1RE^*ӬOz>,FT;u1-Ig{9xiK]|`<&b~ݴ'<ޘwvU?Rbh`>:ͳd,> [:Ѐ㽤//BnPKAЇ`5n {얥k`+4gV&ZE'snߌ 슢D+|vRF1ʫyeTm+rV[WkQhR6["8"fm:kjbIeQ)9^ꬑPS'xYn⳴̎di2߳o=)Iߘ q֣T;#RNqw w"h>+ZuoJt֟)WTy҉}pJS,IYF !)4 W,h?M^6Z /i*½s` hM4MAAvy;v(g2hlR7}8֍pvlP`|'Ӹo Pgq>%Ժ0vsMb ˣ O?i8ҢE~^Zv@S6qikεbrU-,Ѹ,Hҗ6֓/cgO~hiQc#- =Mg{Ү4. cBK8nj KD3wTOɷyWzF;)6.SJ;0W__cޗ!6' _ᳲ7;E'@h ?}HtbEÔ aq|tVJ%u3",u{vYS͓j7y7qӬ`6㠯ʠ R4$AS|MRVbv0q#kJzMz:*>.`e%n'閛2 63'SCQÑ=QRDSt6QlmɱFM;A4ܥQs``rR}U߫;vfSWPq\>٫6IYh^Tщtc'D@T1;=똦Ok.\^…E?^nE G_5}݁A&zmPKk]P`O@b)!4Xh zꤍCvKZcy L~KA!.AҝDYwfid|AuV8̰b ;GN##$5S% \ٸMǀaj Sڎzã>7{;Fю"hLqhb3j*ڻ4:'(^kT`{d~𺤠 upxPD]kb.-̆ ԛZ1@Ҋޞ;]lAs^`F)v1N+ +(QCma]j0)Kl'P^>rh0u`O};,IU~|r\Swh%osS6iN5NJC+pPD':-ah[X!ijZvj߰i\ڍzjU\&] ŤU{u౷kXz[o֊y&uݞqN/ K;qRY~#ErGhc7o23i.7kykfdXjK/\Yo"56o֞Wkwow:}<+Y[OTvw>zUY^_QUzVoZ}cE-N~zgvG%2lz~ޥp(?m+|Fb\WwsuZq׮JpqO:Fe~zeʮ>qOqmzj2ԶwՕY+ SڍiGwOOi7%7kTG z9O$R[OT~CHkAzk A*ՠ|+BqA aWG뿚k}4oR|>OOW7_?ٟCV["ysk]=R;o)7Ƴzޑ9o&\(}9kk9}'S+qMW)^*rW+Ü^Q/8pbwX*J s" 0LXz=Djw"Ԕr::\@ }D0 >랫|Txr5Tm&_f73>~Wd۔+COs )bSG_Є䠺_G,mnI}X( ~:.~ͼ;ܮ"Fet&x"2Bu'LJquoo+F2T>0%?(͖K BcL忡{}2|>'OL?~0rMG_OQBF ErQnH s)JȠVNlpb\VՊmON=wzP_|&]+a-sO=zzw֡8:՟'Ҝ1\9Zsӧ+̵_#ZyY͂B\!T`}M7j՝Z}̦|7k|rD㎪]|<{h[:lR-w-J .$ӷSC'tC[)n j-&nv e]? w"@3)to-IMQWI|ծGÈN,|?`dbP%.cX.lsDX 5Vt\>_cgv洎5eUcg k֎[ckU":n8 gJub-&!J!X 2٨ 4$CwP&.LxWɺ=eTbN;WyYwQ,t:=.+.عKCP9LM |C czۆ+Wt&A#doFNNtY=>Q{MFH={Bѹ .n$ӌp+xN3 9īG0h܍BsU`)ڵ_6,]ƠjVoѴ3rRF@W^SZ>}_Fh},yG>u7Ӿ}z׳U(!0tJ8aΨvL>:Aɩa!TrhMq\$N9*V{W5+uHUKL+wzV=F7*Mar SpKU%:46FBCzwӫMOWQأ?e!(|&G9LjLS/2[F(ZSB&FxǶ6[?l:v;g^|#'Qu{4TRZ("vP*4N92'"S:uaq!+;49@ gJɴsC&Ǚbv"= ;NXI>#F&/*u-JY= &\m;+r]BC7$Fq L,[Lj075CcF Z?w,g_=TV7yV?5Wۏ$sIt_[k 0;Pv0`hg/)8Tp[Z.Ûr :" 1Qоae#KdE4]AU,hc".d Mk!c,X_wVJ].\DPEEn`mPtR"ˍ'3K@Gpאg)`2xGT̄kfWSz@ksQ2T6nئ[{z| ?k2ƛkB*#&K4k"Hhb>t~kg |ǿ)(tduw7a>kPo~@HVb73"XmQ`Z^Ld槝qE3sh%Gem?TβaCC$lt"OcŶQ&l04͆>KO+3(#iGU꣨4ߞo?5д* 7MAk5>}>jo2&u̮h]='X_A MPOQ@oM?uް~h}sQEn>&(T_> $Z6fhӧIgz%?}@j7ϯyc(r 8=|h5 p񁙚E6Bu~Bm|?GӇ3;}Hrh> vʭ|BSn)~BSnSr+sD9}>L1N~?SӇgo37}Y>LM~ئpr!V>:1wbNPwen5INkiow-AФg+)Ŏ~yMnuIcUnvEԬ\Ήtwd?RmnuTl~!!Z{;T ?tKa]iQLHQSv6VUT <'U?Onc-Mc┊n">q0_ ġݸ0) @/ :phգ,fL{)ynyϓSȩ~W$׿#ʣԋU_N^Zf73YOk^Otש:>͓(AʻG/LlLw EZi3ޖV=ؕ9p$pP4DNR%HZ, J^_/^/Vt5E6ȇW R=L\ܣK'U0`+elQ߳斬A\mp7~4lFA7I]Qٖ麘GT ~4Mx^ztko7~_Ư}į*-~r}ZTA[/p ,]u%Ő0^˝uB7Hdt'bE_诘q8߿Q&ϯXce<= KD*@F3NZU]Z- hKX!:p؛@(!Ϥ9YnYnQ,-,fB=2K1>>>>>>>>>>>>>>>_%0