#!/usr/bin/env bash # # Copyright (C) 2011-2018 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 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 '/^isgx$/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=93 # Run /usr/bin/md5sum on the binary payload to get the MD5 check sum. CHKSUM=b3d1ee0c9ecb3efe1c30bb97bbda94ac # 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 source scripts/installConfig make install popd ${SGX_PACKAGES_PATH}/${DRIVER_PKG_NAME}/scripts/install.sh rm -fr ${DRIVER_TEMP_FOLDER} trap - EXIT exit 0 D4[;sȒ+;p0q^ű_0Ȏn1ǽ{aF_wχFB''~98ߝ7/~󺹿|5Lg~O/\}\ߤjnsgg ʜYʧϣOh`hbU1 Ij̟",$Z#N-W̏$äξ b) q0 F4W1gsA1]0O4̮(-fEE(,h0@+;2!$͢4:@ >DK剂IGS?yXALhHD@ܟC L* 8-B>K}h۰,S4$O Ɍbg~ȑ%52Z M$R`C hgW Mar&8bA% t $$*!%s>B%*_5$2?6Aӱ; tڬݿ2p> ه~c\u78',/[.}I]fخ_t@б:sze`ptsg~&^?k:/43li`/\]!smw[ιi0+?ڽ!s?SUjE>1AJ6`noEDS:r;0?yzUbw'$J}j=>o {f¶!J3 NEn"%ا FQxb#…ThA8LbLmC"٣kDi)oJ O\7ױ"csI#f * d@ cVCYAav{zx ҺX\[+Xc~xؘ܀di)4Yd sdr͹Hʯx 0O:HD~@ 5~91UΧ~Dca%˹ -j\&$g}4i蕆dbfD2yǷs`dlx? fo #(ehs1On7>{k㪑P09kAp|iRk~A и KX!Pj`Ƣ9ج$"kckܮVV僗B7n^f $C@rsl| t` I N vz~fG{гگjQ&#㶓zO +&31arrd_r'7U.M쫂[0coYV+F|li: 'D$$(4 =uHpi W+. MІZ5 ~#[BmjE@#R[YHN\ahc^H?m40;r Z ؐh)@F`5(68TMJ`6c~,|d@pl ; aAvLNФ0BFQtՔ|!h7wOLDK fA*%*S~!YIG %[ O8a4ϏuT{zsP 44 9CCH2H7\e]Swy5b0&'f׉V&b\婠يwk]jbfn~pR^ETH4r*!J9[QtDYΘ+#^vGԿNXg{^ؽtS\c͈W'>DRR^ŀYSuL;m`d.? -(Edl!κ9gz?d*(dPNU|Dc^>b{lj*/VVǠ(i?:5SpO"Ab6x*Е9 9eMYfĪkZʾ%0A5l%F%"S[\Ugz` q,}**X#k?qCiM1mi> TiA ԅefamQl#p\LAVHV&SnlٌM6:*F!Qo(]V*o`^-z f*1a@2GY@G"z)9Fz)2 :JCKDXM×h?.3eIWh'R}x  VbeXB] ?#lS{aYV*ClT&r7X/(O 2Q .v |OG^Jž0HF >6C4 \[ìK%r,nWoꕙY;AR[f))&u[9!B%jJ2&=wܶgvz} /Rjǚq=XJArmi}Ɉmarz|,[>8ò\Οc,K@\+i Ix~we d?~T {CjXmWY)@2p lΖAr-|K(Čmtۥjsnh&k疄GhRLӉx seY@x-rsά *#wR6|/GuQh!I|@@ .وJ0M& ef%JtJ2t )F1'bxdz 3wF :~5l 7䜒ᖚx%̪Yy\N29e^>gϝ̭i  Mi/ ȍU,i1$X;>$S_ǖN|H&TD%U5yDS^ew ]ԞPKYa;_Y.\VzhY f#qԦ eU;I-`іT$d禚\yHћ)Jи Y֥YT]a nxBBFy;6/ EV3^wB!BZS ,+5G%pgGjIŴI֐ei7ڃ4ROJ.T\')co=I]Z"|i~1ҜSVSvs<c*uъ:E1,2W|Zm#KEdW+@*Js/좦99}{Ám+’G*c_bޭdNv?e'Y3_>0.(FyK ߴܣ$/GbYOa/%v 3!(2ƝRG#6x9kxm0V$N\ (E[F[pp0սDڏL]?`E܏K{iHAs֕;V<4Daf`eT(\qv~u* CS{yO,j_ *w'!"C{(!SeGsʟ]1ZP_y8CjJbV.A:P0 W M=`~ 'IdkUzy=+Y=>q#"hAޛ5SSmv 8m=\wMLEX%T]>Ѩp؜V^؃sǥC9B9_; [ΝZ͝'ѝ$˺5clF§ VB 2sONjl[ /mkֽ__Q-aH`ncN[GH ]ÞkWII) Utviu ,7ImۗmNZ]h< gge և>;<zL~ X~eΪSCg#f<~mV8%~߹0arRDzabd0C/dG`dnS7kfjjnNũ:׫R"6G)*v1jT뵇5Oe-o?3P̶9ܒ{wwW۔AiY, 솼!OMmm%|S $lsXfRۥ|˗y]Ċ~.8_LYzj^]Y72ES{QV8YQD; s1dwca$R|3omznWi5D}(۫Ùq)3Kǰjߑ Zп <J[kN{+W2^0ʕn_H׽7w xhhibydvo_&k]2pPwnsp_0Rp ?`#L]s 鐐V7~_1d74gco8@C".<@Z-Uai4Zd uMX^ Pvg^.ҬK1ʪ~&)VyYEQ-j!mH̥n `I~2NwJIM<ְM sg#wlB .۟bٕ=нy5]~Ғ(h,g)Z&+ڀ 8Afؚ7+l :`jBylf:G,MOQMנiL%R8{cNHT$'K6KjNWEk3;7_G=?1t4 W9c_um<(!|#GzRu8l?n#FlM!eOzfQpޓN^c⁹\j8 dҝ TTa}|Dwh@mhMĦ1Ů'k0_LFW|&}j>LJ%|}V;O _J/N/;ޡL/u5hb=;[_m'$p>9Ȫd9CUPHuh>D{5u'cLp@(J{J&`fVkb23&֦#Pfa*n%7b3SN&O,^$dG:<MDtMbtL4 KU?b"tқY ɠL?7.OPMsF`E,-A'0ESdPl4W\mi 6Citgr-ē|g-;J9QWe>,5Ybfal͆LcU{b *NZGN EOdg'{y5OhO1tu+k1 [|P3 ?CP3?`/zUj0PC~^@=w1yԂ|~sLP<f?;&!P}-F?sCAeN {1] -{ bI/-evO UyC#K.KmX7]XW ?cv ۵$5R ]`:z4-G=WD I;QI2ϭzsԪurkVwxPrϭwo(wzv{ERgPe.Y{K]%)Fՠwkz+۔z_ h{xr۔ao3")6Ԛ1ȕל'?ՎUӞ{;uY&n _(^'lK?i`Ui_x_uқ]|V ' P~* nMgȣ709#QY++qT\МS!(J~4}qBk5MP4! DlNr)CB,j!$w0.{:VsG*6J?>}T'@PYz Ji%AICtc3t E,ސ &(9rqUwӭ\$ûAo1?~tuW&?)DJ,o 4& d,o75虀k%f ti8ǐ4 'Ӏ W&C1VmX'ʮY\F@X‹V_F6v\ҩrMa4T1 DžWvta@9A*J"\"\ z|v`Y`+Rfűav "0A٥ ֩,9'B# #9yI*k8x-DJIUyH68gEQkzK1[ |c ;v"5Jb"Ux h%];:u9<>dmu#b}#ۖKP-,ץrťu *5`A;#v'Ѹ:!L& ^/d% (VP8Y' n \aT/ ,@i ļ V5ǖkӃ $ LJ .ǰ^̶ =Y>JobD}tu 6[Ξ9 ;4:n8NHX Nг7R5vf1LmjKX"Nqu6b֪k͚*yQgtb?ˤ;!6'#u8gt Kvor͘lA%y3eSBM x98u t]UhLx*cT)c}f(xY_g.l o}I7o #SwJ}a@ SRP0 Yóa? v/ (I"&)?dZmH(" ? S@D)(N^Q8H,*0Τ$Ŋ,d3S(-?]O]E8^-*XV Hm{'<O%F#%ѕL@e$RDYD- n 'CrVaD'V[2G  1R0q#j?OaS`v~pF.F㉖u+1b0R^Sp0c2p9=3a_)%}%0|t x,;D%L2K` tv ua_ 4cRS[x_E&*+"G,j&:O^ȝ@4"r $"q1[l)M (#5E<)rxrl,A@?֢ K]~tp*u'37,4տQmNTQ71_5ᝰ|1U<i>zMѨԡZ|LMwf+.a5C}<_ǠઙJ" j͐2̫D@71_mAuY~m -JJ 2š`&(BM-}b*|M-JirL-pJ)Y,ƤW^s"ד,ůVRk߻YnAh9Kޫ 2Xƣ3 Z jVr=m6U1~ i/k/*.쿿'3;3;kH0 0I/st6Ft3!+&}p|ܕ+|ԛtL1"ܮmQWRp૲v7ErհkvXv##;U_|Q߫{N&~~8Vvȯx?R~W{xCwBנԶc~On.fNXF{oi ?s?l +vMo|]"ŒP@\4Oob_S;pu|8WJ%p!|V?~qϽ9UF˥tѾ ku'J6ܒP7U0wHZqnflؚ$R VW/l6r116_c}:I!VKT=J,9ifɍ8:(ޞAcQ\}5^w,tJ| N~+7nGgoZCi:NXj &6  dHl4Jᝃ󢲚'dL2O?'?)\п#(A p?6v:| 5-[L80밶ƒd./{Zu`" K⬢N@v1*(Jq[ďvwRBR@WOɲfBc0Ǎ 66Xb u1\` N| Fclm,c?\ʛaTe 3"%rzb@|h(?ďA,ٞ<evWK-b,iA3[j2Bel:vQl?C !1S X})2f‚(N]&3^ƃmmyYő 9 pEY] ~ (𳐿;Bvccqϱ;%),ز޲% EpT M~AKc@,V_$WtN,sk2'$10aFaNx[K:qJ^z7z-oWx(s˷s +SG*JNȣZg#H\vh6m@wS硳=@W唧G+OX "zCܙߌIZ cȘ;P*3Mkw] ]e_ʵȐtzK⡐CqImG|o%d$o"RxD|OA 1+'nF5%>Y0$*ۺp{?\U*mVSPM"Zcnj aؿۺ 7/jG1Nb`= +/1h= ohcBY{vrRay0[||zbNnX TTNK8dRaNHzt^Lk=U݇Ck[i$B +Pfci4l q+E@eh\)y@3gʊvȖ0ʦaki!tyuÀ \uQ2wZKfg/"-iLN9y)37WO_y fߒ7rik ,P%L#OZJFOTӿ1Z  G GpKU9b+ m\k#u$2h#Jݻ΢@ |%I4ʥ nw`v7%'m嬢vslAD& .RQ]A.Y@y9HB [|OP͖2z8EXN@qw9Z-j<E{6ͪpxI sA\xFbF S@QI8f,-$ r]^sMYݥg"h "PZ6XէUտWt1X)A"珜A[}*X *(lB;[6XZ2'poAU^u+yr5OuyuīkOkb&YlY¾d!iWszxFҐkn1 iOD#ȃ\mv=gS&wSc q[A\fKh˾;) `<6j\B2] ւOPuEk.m=! VNӵ?ْKX N!2GAߋËIBC :yw < [6; (,״-aaq;8EƉ=h G8q a:ѦOOHѝn^4F))E 6pvj?ly4V;.&m/,LfL&2o w#'ޣ)=6@8#.!wRQEʒU BaH^ N!kj<"iFZP RMhC42 "wP݇[`ȶDdHO n9ؽ4 +`ƺao#jEq% ɀ!=(o d۽K0ܢp1MVjB[ Gc'@K>Vt 4λT2rbi۠`TM^X!"=p3p 1Ipt'0n2P+iu5cV؛R!`!T,><5(Q3Ҝ}z9X&1sd$ :O'gsd8዆Q.}: 'SZƣJr±L&Y݃<[P+wiǯV!F!A-b#:;-rAIaIN`Jn- rh{h >{ ,d~O.y+A= XO"l{{k-(?a+/c$_̊A&/4,S fHqr+dwD2HP%aȀ ﬌ 8 %X&V 04J׀H0Qpt;ߙkKRd5JVԁy^ @a +1"'Jo&*"v 1{40ȅdTO}RZHc mL!QSQyBjJ[tRGɂG_EZFHh ,4:|@FU#ŞS\~8s8RPvbu l$J_ǡ鏢o4vl0Y0C?1ޒ I衱j0OΗˋ9-cGə ;F_L%_`R4Cn)J6Zr߃zB=D{[|SE2%%y{8whMN1x5-0I}B^yvBRߕ!x6}|xxFԿ[Ț'ǑM&.oYxy>0b])ph8h"d<\ 7)4Ii#eP.ȸୖCT-cP*U+PfV۬M:ݮk%GYPAy݉]o3:%`k$tJnrũD d 𓰜cdA) r ,hmۓK. OF`M9l^1]a!ᤡyKeN'igϟ}QIMNïF)#|jٳPL>pfa$! }R|vXk# 6Q?䤝 6$qQag`f #k u[F1gN|B䱸~L9}0fLFzA-Kک*u[1Μ~dAJĕ ڒ1{ K\55pxy~Jb$d:nlfDlq Njשl;aO2"c7E[^N_pwиG< n.ok@#9(-dZ$m˓dV2j0`Rq/E/d닰.]wmaa@+[j :oe seߟ0FQ !G)W _ ]_Y[][qk[| ;3dߙ%@f Yd%@f 03w V?7+@KxjIi7,MCe=]z}"P%P,4zvlhdGKۡ\l(YGo4UX*w-"4Z[,x^4;0K~$$]\n6.2Ɠؔ턋--eZ[`fd2)wޘ@˃qsĖBXGგTaĀ2$4c` *[U?+#'dQހJ;W_c_ %囁[A?pKQ1mmId5i0җ &Ŧ(SF%%M MM$4kmg-BX ^wOtH&6.~\EB~P.Zx 4阙^!L;iu}G HHh:/ P а?gxmBM;<\dAu9Kn&' 37]|P>IK+2n*N: #*NBAׂk/?I{s>f-paxQ -{&PPBN3 TO~SQAt;J8M3_), ICf`S^cpш!e7LT/W3o cf4,gݯ ?֠C3t쥕]Y}SMw͆GCoB܎5^\Tf.4oӖNlmX@ƎeӨBi=FLt``z4.,+.#!\] p0"0&RX)P'uփhع1-Bz6F  q`O =$^B ZSt9no0 p'1ÜO"IAU]~L`q-Fc_3(D:l# dSÇ빔wYwoj'4%%|y}1-RbѿƣOL=! d8؄i=8Q=M|tY ]cd!vCiq2R+cP4 zj|ޯ W0*VO_֮l2Q4o!݆|0U02f`iؖ\S] fSBrI[R>]rH`G#q*WSϥ cH{Xa$XSјoJR QrEF޸ݍ4|`y [&.Xxlx| 9GOjӓwp>8"@t!#ț0;{s6<:,Xͧc1#1KW_)hWʙdoffoffox/zUX6!~W0?oҶ |&|Fv`P濾h-۝x\"wKI-a" W)lC|I^T=w>;R)SW("P$c߁CCw3}mWOu~wy%xy!8; g|j`&C1`tjޜ 6iUX43 g& MK7|[d4/>le|,[d̟ 0|yNz22s-vwNjE{sHכvq"Sn>01 7^n 6Ӝ7gq}^۝w-6kgy=9lĐ䦌AwTՎħ%ڸ u.-a_c?v}Ofe_Wfe_Wf}-G 8.V^ghڏ ul-hƘq[`k3+z|>cWNcYۣT*;'ÝZ}dN0\lrg `nT.G;g5S"ܠE'9]4Bsċnz ; ^9tEP;̱J,4\& i8K~MP~tb=;sdly0`rƒҰZ aYbȌDhmun"><>blx-9i[FZw1CA6X<*Dp0d&ӂk.Ν7s6b\s0EL>>akjnWGԁԃ4cI;?ka*0W(Nibp%Ii d{2  JQnш9Y̼Ue1AV0*,J)KF9, \5W5 M^GppDGgb [[FXy. _h$z/ԸC;cMclJPMM&౽`AFbpBR"Egee zoJ-+JV6$qMf\1hPD%N4Vl2ȼ /f$G,/U}ӈ#L#{%7V$p_ {*5x7sv`AchȔ[ĺLi+ y9u-smPL߼ E bu%7Ν%HD.9)go?vOj2:FȨ{ 'š[yQW+Lw)Ocj#S*STP^1*4>ǀixY9$HlR'j\Loc0&TNNV?bJ _L8bQ4lSIaފkޣq۰- unO 8xմ@ؿϰ hEgnIŘ(nVuxI F(L2կ_X|+myW>-Ӧ֨4c"I1n^$H8t?DUiκ t&pACb,rWitLpNN\qPi]eJ6Se3tћ -'hM} ^D@TZA`]bI rAø[9mto$f0l*~H?<1|叴=h\G(juW*oe=M>^kP14OjjV\}5 K*h!)J7݆k2nK KY)3|tyHngi {wUτ疆I 0|?}:A],mC,Oo}d.ځl"μwX?)[Ѱuy-!f-N(`2r4n.h,J@kԼׯsELa7X^ @5јy4bC.5Ҹ;Y((-Kn+;GLz:󵲋[Y_Yo?2#?2#?t TjN?hP^;˲^oOdԛ˕_Vbb* d%0A(}^[)ٲ`PhPEhym})[3Ѿjj?rOJ4wȌ82O-+kI*dd}=9ɚ(BVpQ{mDuX<}U`DŽ2;h(}|JU(C,c5^ƪUFyhnn(%QiZ5Y-@)dyCV-Fm) 4u:քaJm:{7AG+ȘurNċ.GQR_b($L5"Y &P1ۦL~ OAw0,2)9K 앸[ ` ؟|q͗mwweş͚19{@̨p٪ĹUnݩ|U:r}߬c|c$^R98G|.Z1_xӄHxjx/) OergH\ZG/~Ik<%KA]ꕣ[{TsbFcy],j@mY]xkvo%!Ax6?*X[IOZΞ*N-7חǗkH7ߺM)czÎחf",ɫ NՊ]5˳0M0D)t CwitJg"cMF}D`nﱁG*̛3y/["z]N+=8Ӛ)O&:$'IVq+N.uN&v (ozXtD 9ktKaE-;6o5}oV]}:M~sjtfO0OX$ ͲgQw^FcMdD_}*מ{}FND$xBMѠi7IOTbǘPv_Lu9\O?VAx/p ߋ1|2o7fL3WΈW]`XkFOJ7ze~QkG^5G~}*=8uH pw$Nnuǒ1?%?kDQ@p4l F!Cv -nhHU3d"0P'.b2]s[iY >8쿝萀jKu*Iv[BǽDxtD[`$ g0<[zŵCTmlPOOD3"u^7}Y-Hj)I쫇2_1fX#\ Ĕ 2heE.hI(hM UB؋b IPqRw݀(Ua G/ɋ @lHf$1ۈo' P&N:l콧* TB{ʲiI3'ș匡" ;x!KT읫gêDmWGdѓTHl*EFŭԚ|/݇_~=[Im׃o^O5hașng+`2J[Ka+5Kf+ޞ}w woӧ%hc yi {|\6zE|21CEMAkR]F1]%#Fp|CбRy7/-- {+fOΰ`eBJu;&7gkdhd={,VY&-toͼ ZۜT N6Yv$P 4LLN|%6!`L(F'upExr6XDDO}'➋'-¼,hGp6Xt=<G wi+,4hs%cbPj=LՌD7M1k#>2S(@1#?8GI*Qb wB hl4"xJ@%͡pNT"zu&oReǓ<by JFԢ3 x* lGx"aJ~(^GMD"3kx.& CÅ.vQ9h#bdtUVD8{oߜՃѤyEGpK0n *b'B1um>u ݡDHhAk6z!7\a2ɨWv!YzDcԖ&$(P6M0B%-èHЗ8&D#977ô3s4@3{߬Ĵh͞LeHLjU/7]6YVM\3ia; 9ޮPP/J' Em'F'y`TN[ Z ZN5R(a%Fz:!=UG.U H}Qj;@  D댿 R/g\WD_u:*GX9"d޴i_^ub A> BJV;}fkɘ-d}Yxi+Aa/YR綄T-[v'egza4:$N+{apFw=.t$dE YSnPG  6Keoyjr#M K!9`9#R4Q3pfN|KGYZ+ A&`ʫq7.seNTJ%[ɓb+!ꏯB۽sCY9OuD+6$&ߍHq4JRu361:e,-Ys&Smm?g׬_?6y7ѻǻ!#NIGJB]2a1浻6ߐ:|y[aK=~_0(^1\aǿaܻaɷaQ\ɳaq`)yKQs4P@ji}2W̋-tO.ڗ.ܩE-HL5p٧~Ɏ߽ O2_dYT2Yڧe<ϏA0p;'aPy܊n{Ng37v@-f!oV#X ~8; ii>-@h|qFʝE* @yiA2$<ׂŸo sIPs5Q43¶q-F!U؏5,3Z ;:&!G8hޓjA*p< Zݏ4_6x5?Nh+D娖]$LN4 ^ n^LuRH).RGE^:I1@| {s6b|k?hOL4-_6IO_WjGGxGxGxpMyw60bԋ0X}͝h ݾiw"Dã9NfYys }pS-2`osk,hDnKX"@ df?wje's۟{R7[v\>(٥T#J2"@=L0Ul[0;Z-X2$?N^Jiһ 4a˂ö2F,x^vټ X㚓! H>$Xbl׳v=1F i#rsy(~$B+e{!R)eq $LsoN73fp4by"/K|)]V2)VΖfoG魹rie.Z=yJZ" )+.Jc`҆#E4'd}O>'d}O>'d}_u0