#!/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 sudo apt-get install dkms." 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=767253d5eabe465a8d77b6354b98413a # 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 ]\SH_Cf)1B@c ֲdndIl#t$dn-~W>/Wĝ9}ë~_gzr//ĸ}~ߒZ0]xys^X_4bJ?L"g`f^5f3Ƈ,pB'vZ`  /i 3=-C e`9ezfp&~0M_ܷ݉kq\Uf[8܍"fvmDS3`f3]2l&BNN&˷1f"Xs_S ˜GT1 L' HΝ H$&KmhR Fؾ;^dƋ9kT|)dY:.M=se+j|=(@!hec l:3iG‚6 (L-2. S]R@tΆpi-޼Gʚvv-uFp {P:nF=ST]g:p?htWmG-{^e!`6aNd3Qͷxl=x 77C9j7?{ʈ7 jXNnyEWYVt6޴UBYmi9$һ&UjS-d}UBտ0 4rd<@>zh^%wZSՏYstHi5 @ 3 qiݡ:C׭`/ sK sQ{dס.ުhd$ kÀ$R^YW=okjR\hZi: 8j8\,UL;c;á&ՆV or2w{95}o^zo4h' Ӻ2/h7˹աm=Ai RRڴraJ_I7+G_\o%%yvm*Yc Xҽ{)e_.F/_l*G/Dy?3j;?xy_X<ĵdž'QLR1Ks譽~xScbiRxe 2-lK>1 Y1< @Tu: dO(Q(GiM"se`ΉI8I4xIL/K4g"m` Xy D";9ع9_k ֘5SHv|gAzr')6_8"\8 -O*Hs Rl 2?NabRoEfJ&U)Bዺ^..gnS5 kJ#!",-E\&ofpu3ݼr=WP e_g fS$fn.{5YGC<_8!2h^VY`p$_#$ȀdȂGȑ9M7Y#PCiyO%_)K_*K0_+K[2|} /У$̀83}u\Η8I3םϚqfZțŶh,06_eS=5?Ƶ70 .@p!=Lz(ZlFw?s7P4Ԯf_f>nz_kV9;,|­MOW33"n5 !ȳuHl]|nmӎ-DVH@;DypPgFmh"5+s8! ([ [) ([Ltfc"=:彝2\cMr }ߖ1dqkڶ@h|<:d@F~t56=7, 4v#Ŧم值{:Q\\yo^ H-"-MoύRÝ7N$:jߡ ](4TF̹|NlgBqv]24xaF[Lnvr>ۙ .94N4&)4h~FɊ,VWl0Sfů&GSt1:N&32dw4woa =yn:W߱rA8K'2xZ86| oYQl9ަť?l"#eQl7h?|'QoAjFk J滪}hm.mA3nXdT`|+<P\13wGߛ2W #U G =9Q;vgnt!}۩^R@M鈌hU(ChZ#W`JqE:)J#wk继*'v'ڤ=E=r Wi5@kHUhj%C=y?11?Sf0e#*C!Ddhj9<٫!P^[z +CS]oJgd۪pK5RR<teJ{|b\ AƆEl‘X%!}QpP_UO4ʒ[6g.~Gᎎ{>z=MqFz ̖ԠLL ̙X^3^CՂH;j瓳0Јn<S=lx+y"A*L:7K*ō㤍p8,] i_~?!_G7JC A (y X za=0Ό<ɯM슭"$VI.  Reg}guUIA#]?=@%A \(GGӘX3݂7.Z/tt~.+z%^FPd`fIzDkdV ji/Ec;#n|XuYD9OkKlt(+g}PsxIERyc{@<%fj. &mNw#οn'V%{[EDdvс@=u9ggϢG"1e"nv*2VΈh&_9+kV B`OQfǨ@jSJ˰*eQ*~nVS3`;KY"D' zcIH[U*2:dq zL%mS4 +mp` z b)17+dGe5(J穳R)N$\R( [PVG:E |mǫ|LТJSՁ(A)5Q1P2: ѺױׯJvz~~svVI5sddR],_ƻBxpIGuZі%\*APeďPd\&[C?(ˑW2ɮO\cּpT-QrJ7#z  2Nh2UH^dv.m%ߍQMo9x8?+#l,W 3e>(Hj#H)Y8AN @ٖ9J`'?HP\8\BgsDŮ0iaoI|XY 7Q?lY1)86E8.BF# ll٪,WL]6L8I oᣒ,. 'LM8Wf8EFVDQ뇐1O$l44^=FwYڥX'Q%3˧Cـq!yZݥFG56}4O?%*ҺúZobW?UA}:N_әcHR!ԽHHnɢ 8ъfzDuI@,PE,s޼)Q3܌ю ,awOBVC! h.6”ΥFN;},\5 D&z J8:Wy{ZZ6JvnL߇'+𒲲b ҾG.hacSo/g22ILT !!>/"mE K6? tw(M/<509{ϸ-#w'|uXf/~u￞z￞z￾_S3̏B 1|0)xmM1z%\w/y ݆7E kngtx C#Df)t҃jGur0")?:a;7; TsO8 HMk6m6bm~drIR)i*1Pt6&E6TV'?-B%FЩ+Y:1V?S_̘ªn5&5]:(Së'$'SD8V [%;Ӻ/ˊ=Y2>P +4nߡ+Ňןw%ġlő<cGKyv M¶b{q',0ݢuҎP}'M 7YԾ8q| Uq2̊u7H5[gR >R6:1, RO|Kb#^iɹ=I!"ԻuEdbXrƐŕ|gpsKmb@po\܅kXcy’d4e%=tE9Xjj8$ >=]D[ʵr%tR+,nlGb`KY@\J_hʹG`& Xd07Z9 Xl& N|$צ|l Q+F촌ٙD>i +S5M($, BS3/Jv\_|0 i'nx氘.(j5cD:%#b z$!\Gs&^️|8}b3s&K1ѯCo-V~RVcJBwi⒢#%3*Ww]k#YEKOQn%!n0A|6H]KHѭU9?G9Oת,!5k}RU^"####2"#x̩tLCn>QdWfކ{4kzՆ\RSn/0-YN33L3aЙ&!lzrE$r9Eyk kx?ȤjjʓC) :Mm rj֘l` DXGKO]K9!$ ̶ U\jJHG}S\H\M6k-.y9'“εyPތ ̼A{n(^<"_;T&<"0R`L=/c',9zzqp œ[W̜qc$`p5ʒ_ anC9;T -ڒm8s׼irD#|6$kO~ֆisF<4a^ZYp]A]6S#jZweDsF_8e[gj[>hjZ'm|:!e]-޸WRp]DhO?KNN JZ+x+e{;7f<1oc\cyM(}8 xT_EBąa1h&u%A;)[p^*H3AxP&*J%DM,5~kkZJW|)2ZZD/AsBGsbH.Y,o3X5ո ꫐{X"?{D~B~-Oʳ`%-bP !R%*yӻDOXݒix~qźKn8k[ `َ|'O,EhUIFQ~6"{k 5 +d4ԂXO~=n@_߯Վe0H#T]dI~XV!T : !+q,N+ܓ1- FEs  F]WFU=Ci&'U,b"QЋg3Z,RL?ctKߢ{WףVVW_oo~#_T^6lvKЉcC?-PԧϟVW>{["ԟ'>BFq|]SI叵m>V7[Kw_ߵQooר^R?S]zFf Polp{*Rwz?N~z:0TKmn5lv}K (?fuѠnW}֨fu*n6Fe~~c{AebUkl7PީWf`%a9 3a9@_0m4W/~(Lm=RU"}Ao+DA7V=zCTF~4_a*dP qD-/G?[&y@seŋ4DNt5a~gF{|/=K/=K(r_[VqhOw2&8:Ñ3Kbrs]T].xR)d~@GEUqӏ t̽!v~ N;_JKD6TO}?oo⚏=vp6Fil.Y}bY7kJڨy_XtZxp)N˾'A#t4hϵZ9'S?S?S?S?e3I& w htǘ+T*0YfNJ{ZLl-\0_Lbb+o '0 z=`!T>U5lUwv6Wk}Yw޾9k/'9}l:9/Ǜgy\U b[?vɠh) |~~qԼ]W"o~#2sKJuea´KaQVU^An*^v*sr{"Wo \hejxFY:N-p|2ӵCVX!W{CoLH Gug0 p`)O୞ū oa@Ap2>ib݅3vFZE e{w y(%ú, 0u ?!03%f`Iff  dYI|lf|8mIFcb:}'g\'s@r>`lAApMN7^0C:4v3-K`z\:ܷsJW."pTTK#n_̶)4qmb[y':bF).nF9.qGFVbݎ6 ;V&`';t,Ky"max*[L(m'F!HNAH Dwd (7@ B#c؜:ЧȲcx9NzZZ<_D8us\<Ϟ}( Ñ'AR| 'XIF"8B )v#R'coeڋy9}>'ROjI?翙 tdfU Od*/Wb`e{G\n[iQ(aKE+&IѬajFͱD7h^4ނjzWށBX[_{uX{_UX 1b}(*^W}džOegrP?߇axyǪccy~Z^1X/e'FC=ܕV"+\du%EDkVIƋD|x;U)^]a|.Gϑlà)e+FJeh>=F"駗]ĻZЙj##Xo$E.W1)Yx}bDy^'\_?4G`MB\|"h>Su8HX hn#p%;3 "RhiC*kL1erEY`e!8syKQP0 0J!C.GTQ̧&uibC71{Tt"B-_m|& }ڀA]K'}ՕiG8$[ o(נ+^=;i; {KWOE޻ffӽٶH)CU2 VW\.F“wAn ğgQBp;FdJ\2` ꏳfRG%"zzU8lQ"Yw`0#כӠ_0*nW"ϕDA_!yKzfteamͅsŮjQ3 Q`4d``ahz vtnm9Ʀ8Q'dmكa?&A( z~4t;I' ؂LpgIS5ö: &|'@?i;V0S? pr%I9^Jzt_Hgy)-y G\>c]0<\5.@#\]pRgu3pBǺ1H ב\9A+A XP4hH4 т$ c]D3sj.@]ACsqv =(wDx hf>.@8]pe\Wm`Qv:%wKv Zn?mu~wWEFɩj6oZ O쐩/ъQLyOE睄&WMrrsZCROhwnS>]^ƽnq쿯7|&yPdlw Ht `&zw[߁v׭Xa/^$ ڀ.3 |ngKL>U+(>wUOw{@RsE^6N~mhϝ^gwR࿇۰y1>}淏OG|W@mO}࡯[_z$|(Pc:irX7$ 35qdN?9T7}ۯ5Z$G'*N>1lȍ>gIOJeI*qeᨵA' eyXP2daV d}-m<`h7dǠq+t>}okɸ1EÉB2%{#4ld:c &mأ I*Lº’Bp2@~W"𻲞a)s;c'67w>t^iہ7M\Edۏdk]*~l;(@4i:eS( "q@5PIfL7K|DsIZVN?Oz7MozBXx 8;'Z}d-0#\ǣh[V fu /C/?JTVR{|R?S?S?S?S_67יpfقFlzKo5˗Pt5 ]{l8SJ~lwncY⛛0p[ ߹^ FWLIϮA?Ⱦ3]x/mF08/YiUi^& [R?Ȳ*xk쿓U^'^uuŏT˚ $XdզD4drbXJ"k8;;a:C#__Z]yZΣNxW4dGߺ1q&b_GH.4f d*Є?yH|-fMxVa3Ol(#p>"UD^.{,{;E/kǧo~}W+3ZJ*Tt* * 1BE ~w:=ldVʮڱ(<@ lG8x{g)W)zR'է_e:w+=M!qgIo$59M  |6겥kZqb!!E\ttaEpt IBt ڰ(p |i1sFX' D"X/w z7A۟lJY<4h~m4zaYߖz=Κ-P$/E8 mPDẼ-P-8d|A i?ciƺwr@ KYajD*D̈́A!.Elj,d#>bMp6R֩cSVi0~y믮S`}-Vg`:חQNbooCŖg]ẁ2#aQG jN8 Àw0te}MዄJ. 'EgY)0s1ZMTJX*9 uإHšP۴'Ӭ׺܄F\)x{^Y<5Ÿ< ga *Dwr&7QIi(!+T#'.Pa~%:gЍAjt-ى4QC;jhN3'7(Ӱ݌&Hy,^!E馀Ȕa yHtbw7LAju!b ט3:ai!0u0qMrML|l1(R9yY+fBo)"1N.S()vޝ,74+V$;~CjnݐcRTX`HWɲ3>`C|9ps'xDI1fznvdgiMa$rZʪbi`FV/O=rVlz4r|W tbc,6[ŸuEcZѺXO{pӧ!,#\J6ʴr! xk-J1 K1/Vמ__W_W_X (m_ ~/1ӥ׃רvЅ/Ptt=G{ٷ/a蹝"oeJ?usg{ثW[wS 160{Ȑ n˳!Pq3[a8/&T/xm6乮u G롰fA; |;i3e/a"\M*/6e_DH-\ĩ^CsM]g4R'ym@NA slK+rz  ZQݫr5!t%%䒤ơ!.B?"͂͜ 84br&N_k6=d'H+?ovCB)ʱwA^n9)[ Q0v&gP49R\lnՊs5 ΀6Qg x rsyƙ% 9O@ ̽&gee.FG;5vrXۗsko %V{N}ϡ}S`Vlwzxs/n+ȍ+bR rF5r K#!Ķ}Hxzi8V_'vtC#Ӝyk;j7dGpwE *蕗[],hzj1Q*;t|O5/f y\Ú瘧wڛIv*/IЃ{t'Z/Ns!xX G}X73481]VW vz~ͨ@K|J3j A^.O6ƗȢM1%=gu%0!΀h.#/ )߮2ݮ⹛}e/:m7;'u2D ?&nIi>xw SZWTDX8k/^ݢ>jcJ oRaE\֚934r_+h|W}%7."y%o]VY u*:Vg$Yx Ņ[?yQS5Un7Ӥkk1-i%V" رSn:]EQ; t_=&>9's:བྷT'B+-ÃxP! {s\1ֻ5x>U6zʹ>6s}lg֨3V'S{e5:cr/k˻V|{{)KɗLqxtP;p!:7ݱ;B3䞪l:P5pZcKfl!u9ڨ o]f=Q ZSLHnd( Z@@'3Dt#yqLv~pl-ytrrqAR<.~`IP?R,v죟cgiR p؆qxF腇`.3^#mr I3\FE<-1}9!F#쾂(a'§vp>/Y9ʙ>GB_Zr"熂 @J/s<0QMiy`ڜ޸{fcV;7Sic myQPL+hFRUR IC9A(^y,]\⤺ojŪE8SW98ɵ/G'ccCQ8/a:j7@,|EM50un5x$ܔT&2r]nd"NU%Qqʮ{,m eќI"@Ӟd4mx-)@09p`otJؖekYREӤt^܊zJ0Gpig9f# #Jyz1&2.G1/OL~&X;rL&#-=Bܩf$.l.!j}k+1}"FcR]>09ܑ.E^a)_]C4N9 FQB)0[m7ryl sCAg5P{Sg}8\ QQ䙱cs>7x#VΎ@~o!CwE ]M&Rt>sYgcg}Mֹ lòr)bxz\$8b`N4eMlW #Pz6E׫QWɖUӧ\K,uR{p=>{ 1= ?'ƈSuOm(tm_oloGǭ5Fk,D/VLjߏ'BnxHz~. m^wj1 ΛGǍDdz yEѭ_r:(y@_GzuCcShB@\fy T뵇'B+ BAm!x"^ҷ{ۭMA,\|5 og>@4MVgOO!R^3E6RW'ܱt2Ɨy~i#%iyZ~N߾eHyV8%b%ʍdS0_LÈnifXy95)fӼ͍qs1D:ncw0 z3[Fj.#C МGj7Hw9%Z9:` Tab`"H,~N隆(򚷴Xc8 ڽBLWe@3]]_>P==EЌqBdhw1.wV:aQyͪ3XkɋAE|:gXo@9' {[X-?MVS4NmĊ?>#G|"ŊR Xco od:cq|;ܵ.'+ŗ|-,|AcYT>%G)_8e1[|ո鱙c9I< 13Z^bݮ ~ |֡O``Q!+DDAԩk2$º1wXD 0nR+Pb]7OaR6Ɖ$n `w9: Q7j?H܌b?2kh<xEbw`=QEŏP%ƨMݚ ۜCӔ5d-N5h9!qj1e.ƒX|5HO Ct (wh-&<Ά@߰;Nq:r)m"V3q$pq2#ž2̸t^a OF,a&{#S{[on7IG:=@Y}*o٫N.JBZ^^.|/Ji>|o&n0w{]Ÿ=7IS>E> ]`Y;kT';R^pPݧg Mz7N^Co}3x]*뭕*優u!=Kw K(d9F9v?i\ Dggȅ nQ3+cݥ%%VV/pIe^"8ta"ϻ"VD݌&a!ݡ)$R)`mctb1n@ǭK/*$QBC1ZtbiTn$񴈱ErO_壵 Ѹ@TL+^s8.^:(+e;%^GƭVOu>SmtLf&°[lבe`ci9M.-GDdg`#Ki?Å%<<0Ig+7H2dbiϙ-#ؽ xYWn{A|~ܖxXgTR(q7Smą໎YlᐭKj#oDz \U 0#M[Kn-p6ŃsppX{̷bن Rx tVv'+qi(&UQD#aC%FmxSB ZqstNƉ*<(9BSd <óqJ h *GcΈCN+HCf'S`ȃ7m&T]͆sr&)Gl PX+ܤTAV6E{{dy$fD[+9$ `ziw8)\^u_St,#U T(uy=ۘNxb o/7_sˈ4a*y%o|i 9ҒEqwk6ΨDVG;gbԗ(dfzOmKy~HD6][)u,6:Np1z 6#,fBXYS~{;KZXݩQjjk !e_W Kf`1@V|ьN(oĀr i- &EZp,pGvFg /BO?4qRtlK /v"9׀9%%KEyY,ϊ{Aq>&([P;[h %4ɔ:yZp~糧s8ϋkr>/>&2>/&a$בy+e.>:3cz~8!< #j 8 pypfv9EvB;]y2 Ϊʙv(!TzJ JבChe!TCm!X0sC#Dт!a>BE>VGCn!&ȬFbE̽w*ddB=I" Lb`X/fc"*Tx'CDDJ\JhGKfZ2 G &7 kѤ,$K8؜#p]QY!$q30 ]-AoThzCÖs`]#$s#nXL(("J!L&96r1;FL^e|ŬǞ ofc>a0aBZfT9' r]_"Z3p>j > 56czg1' ~aǣ\li!|ퟷaAWZGwuksAcNXl J%_e_$eFJطnwH%nNpJ)s;k6t͠O}ꞮЎxJ_ :*<9xi]r"4n:5sq2mZ_d4ڵI0LQo{A7#%."Uˋ<*> )1L2L[`&FmS2{9HnI8?;( 0yܝm]6G$kZyyS]co3V.՛`a6f.t2-i lJ!LoL6fzSm=gqaFf mKc`Lj(اB MTC,O ]x,M쩇=ʼ5 T!m(~n^\B{*Y{}O_W_W=+A]S<ɔb缏'&UO]Xqƣ-:ހ en%Sϊ萵(.QEŁѶ<4qx}MMr|E:1IvP 1FEu@pP(#95=qW?TdO5CodP;?1d4qKA5JXAzI&; 찻~Щ\/wxNN'G;5IqyR( [tt d~#ϑ7/y%Z Nsv;G 'FO!*.rޗ%{P MyݲNЧ0{Nk)zɰjn}8?<“B$vce,wbԞ!1@ms9D{r.3<=\*;he3rF`Sf4dY.'z[ә^s9./zcS#*R(TVE;x&`Љ­Pę̘})G2nFB;/p1KcMc%m&HjzL/K~3ͨ嗓Q c6pND3~69/P]L_(WlxDAyjӴ9Ũ NU{e 7M |!PAE{n# H3CE1D#Rqcj&O^L0ONn`I/϶{ڎ' 9~wTfGOl"J=aj3Swhkht+`ۼÊvu@k?!"S LGJHt?SH(^Ad![BrCidKbO/Q0qt9zx8/N1NMs8)<| J\Fpi= MFⴐ!x'Y+<&QKUuʶ@é s<+E8fIƈOgdA5#ӥ1DҲhmunYDDzdij̾x2ZFEJ֠O=.}] tH/Qz,ykmY.>f`يV4B_qOj>_Ks\~kzPs|$Ji}sʟTXNmW,sJeYr"eS=m \b!Fj0ЖOnҰ?__eKg=_\-_{|m!a<@HU"(5^[-$\ؤ,E1,&&6esgy8O vS,z.oVmٯkzHK4Z.|}%ăm菇CEy`Rs#ՒhΎAu\vs`ΐN2gb$Ogd!dz_awƳ VWXř)!/y<<(7c@^M e DF<)bٯwi#<Nq;hvbMNDrLet+6 M2[W"M?dB_5֏w>EŽ69 /g * Am6" |VYiIS;NS;NSKOkNWo[8$wSqMB6}mƑ_߮f*^ΎUwrʭ fv ?~ x%wsxgwj`o|rj:O [Yżq#tP}  S l/QD7D/\?OGvތ:Gf_2Mv,DB&t`҆z ?G/?Tɝ$'5^~Z ץo͘V$|\~,77,$zm;m{& r(v(OAW<8Ã}^%#cP] m]*ysNF[_Xȅ:5( Ȉr:Hc޿#ld` |H1yPC [#5kQ%WcR c؆[t>D H<勃DŽ^%*uIa>VgwSXY(42: /_ZoUwvNr6SZb b <̾vhrMpإtZ4RuݷrjT+f}׳.PF8( H1ՑV*UsKaГ7E G҉!=³gϸ}=w!0*.9MP+yhitez ͸c|d:ArM|xģls7ʙلꃔ4r$%0bNx9MI%P. ,q"L:.;Lz&%G'LcQ:O HE= c)<'q_qCHȓ鹝8SY([8- #z#ڐGNm _Sb-A՗eb^~qdܧyo1>MY2)O!dk儸 S.cɜs{k1[5r 6(n[p5ɫ<{U;Hud-rc ( .m;,7Q_^bv},A"7B )r˅A|< I1 )c>㇀$W/]7QZD(pR0ֈS=SY2HxR=3 [WZeP/`>0=VAE^Fwtd  fhB;{& e-Lᐂ  /ZFI4D7n6m/fmzMOmPǽٍdq=;"3K~D{5jRy7lF*LB}-r{ZJxuxLtqyۑ{>5|<NѻG( $td[(MFߵ$C#C(H1!i%痸5Z'ݮzwhFjװ3  [U֕&zq0~i^.џjLb_=y(Ƈp"_e[py؂H'leԁnQm񙑆Bc IX.n>X"IS╦'Mr 67B,X?)RȎLf^l0LFs.uX4䉫 JAx`̸>m7j2pL IHv->h>ea)"r|؀N&=w"sCa`y.3]郊{[qT< G#}ء-7D\g\ j=dzqs>߁ &%a4-{_ an#& w,[>:{| u3&Cv̉Нpva39^|-yKVn dFnA+NAO6 栖g#μ _22i^DٔOhPttOXO"ĠT\V> jTy=϶Jb D͟8`tբ~4l`c=²hmdޠy+yq{8^Fz-3q cpd9,}|SP+nݼſgu<QV/W=r ''%mx[.YaZ 6Њ5- 3)Fx#V{[yM'B*E5nbQbm|EQIjWU=L F t ' s:lH\%y4(Ɯ {Stj)fYi@ȭER4&nG0N!2 vȒC2pEsp)dD5:OԲ9/JRfU%!3|&&4}:gK|qhEEBOWT)a͌V xΫDx<4Fwp1jyMq-]5_ePR!\BԼnv(U[i ڠX2mCIܨ- `rzA~dwґ|? #:Ca AwΑa7ؒ{/$`xq=L)|P_41}tpğs(3ofyݛ@z4֢%s3}(!J{ӓ&{v)զ#:m#t &@17_txW0,1{,"_+El>l 9!g&QVVO75A$!BȉĶNjFQjѡXeȱqŠb3knʛ1OUO5D@`4`A(yIC͢QN? Ft rK~BJ^Vz1yӕtRPV=-w[p9n;޹@sEaL3̞+0a zaxx}ƨ:+ v8Fe-\A9rëRU@ܰܶ޸1vi!L!k86N?qaKyLuCmR {KEUW!~mSFߒʮ>GU"\9s!Gى=>V:S̥l~,/36R Ks?+ߵjz{|oz7Mswwu?|utԠkۗBN,]=khbZ4` Qw%xPϖd|֨3߲$/'OD+kJ~r;}C[ =_~dyA^Y3.fX\ *8?;F3,3I9+X2_=w.YGqn v!rPٗŎ߿_dv.b/¾Z.vL3yk( B)\ ? ?rhߦKF3G (nƣ[x>XV^cT1H(܎VYB~Xn-L!gl`KJJX.l U񬈷ȡ]][[]ޝt>.fֽ05􊣄]^fy_83"h=f [,n;Iy!e5;fA H$]ܽS(,nArNfxKՖ+ +~I 1jr7j[˦~3X%㭯{D? ZX!D]mk_b) _ 9>n= P{Ud6N5GSM2>`$?(}Q`ۭoD~ !9FGatf5'?Q"&^s{WjGT!JT!JT!J)D !!w"m)51`Xb(V6зRw|]AR>}) 7uP^>6`őnO]|^ex1N @#"l"/@(˛x&hɫ32Dȇ2Y57r0C[vEGKI䆤=07dXB.eH:P[(_ j~}i Q6 Tq8P4҈{8#>sH=>b]^ F 5|T4+]=m-cKȉnBJ?'~OI?'~OI?'~OI?'~O'}/