#!/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=a6a355f3de0e96cad1fbf9674bfbd211 # 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 G4[LOOG=ҥ~K֜>*Z&5jѬWUk՗3RD.!ϼ݃pC IY޻'Nԫ sLdۧsucWH{>' #.f8FԴ<ߵ&+$mGeYe-{2u܅W&_,8.|@pLkjl2]J]XOMte…b3b8i _19Hgd8&3"Z}⬱+ CBAaydM8Ԛ ` Oq솘SCOhF%+ &9čB߫^pE^$'( 3QBy%:|BaѦh>#G?*7?h:>Zk5Ãm*J $lȪN̕>'J|[!4 !W79<0B ~LKLRs+I 0v$ ]^BfD)-ܦ٦+f dlR%'$CE?Lf@'sVȊ,g" i W`8kD䞍8C0C=s`4I[qo/D 0OW2HDs%TeO)Ge-s |uuۿpt:enZ P )5_.S&gܫD=jqgd [woo跷 d5T_s^UXQ1[̲1ܓTj%MlL˾yY&ZU"yK H Ȁ Ȁ%$sҞ`̰|>y)_Q~jpr!Wr{w. 6̀ẁìÌi6̀w)|=;oQ]Ouˢuz\2meRXÿRԝQ҆{xS& vw}a ۨ! ~X(<Mahݞ.4zN<@؇$ZӽEf?n|X>ur6Yy]ć*GyW^ǽmEWdjAʛN7Y$)BpX+n[#y%/2Zg0{j^Of\VA2? *%Gz AЖ$.YƠyTIa/PdWq;BH˓Ÿ'W C6\y8vR콁N-VKe6L#>>}$i=,zsLJ,#f (Y3P9R|=E&6tS&_Do0L c(ygLl4d{+$~M_cz[=UÌ#!g:BƜ.#7oI#MYFK[}&_*r I"e D|Ҹ!tcsIS;`ݩNȍ r/ߑ8J\5)RG$ȱhlRSҾ&om+0;QM+i55~X!z7uiux4ƚEy.`q+-`cn@3K7/G7SZJk6iݣF KFO❙욅{ ý:ۼNvo7BD ظ)2}8o1Id}XÎqY'}u !]l23\pZ44_QlbP,5EBj$NR76 ͶwGV3k֨?jfp=Aw4҆y:L&V3< |7z,1ñ=?z9eg5s232. QT*%?<N^$]R\lL><uEmh.Bb/\ѴR%s2+@9ܚt%MZ/n[EmR+@np!c+>.Dc!)+慒2f"YuѐB-UC%GbD9? l>I|o6tFt>γSu%Eò- "nk2!L6-Ct 3bYfȴA/xG n 0OAx<9]diGF5c尭 gteaXH|M &cYZv?[nyJh 6}>bjdNr7i۲!2ߴE<$cBsY'`9]_j>d0/P f-S(.|hr剃%qN$w>gqO \G$ȇCOwF3FD;DyID֔N&:˓TehͭJ`b~M`_c di7;|Tmb> &h'TL?Y&w@X/6 BaC HD nH/Zf4 Rby.-͘b\mC\++K Oaď5@^f' ~Ҷ+y)k-qP1/gGGK2(72Qr}E_f-}ުBH?Uj+l">ӗ8(m|8R4EW;g/5?pZKx4u](PxvAl+,zBQQ\TYerЕZSY}M%uתb7;-IQe>@^JXԘIA Kk3H3rh%ʱ B?,auOɣvTGc͏^]o\|眩٩ꉩ$Qhdq48j-ay5RvDlva,f4q '0{z>>`!Cv ]tiUX`q=@0̱LB{%O 'XoyiCz(6Ml`(js>b55cᩦH %a.BƝm?8ɍ?{1M+9{UlK%P:J#識qǡ7Zc%S/BkD[ָO jtq6idm'S䒊8KR_Ia/JbVxdGhHZqsIqCkZa]y^~~[Mn:uNhkO=u*zn\ZN7VˆLrY ]"ۼv]O5C-f'q8 '*q3b&y_V~('֫_^E  YRkKaQ3^άzQne&NGy8&ٯ lI(<^~t}ݝQ_^lЛk~<ʡxqo+E$ٴtqQ%".xJ*TK@lDiB\4>'fo6v߿䷫꿻꿻_KFgC9"u)^î _Xznxl.b{.ZfԞAh0>/XŅźj.iNwSO @l p> uFR[~5^! z0X# nFo*z^wn7c퐗:x}uʮOW0ƼXśAwȧ[NYP{7Ϯ~Zs{((_zA;?1O{m`O{(v6^"(`Z ;czsO~xQLղi_A r5EY.Œ'!Fpҵ<-"zbmR&I)zEE`7a~W* \MؕW2 arR$HPxg)#0 3fM7Ruokm {}4*@,g}|U?O|1$x$G@nIR7QP0_Kb<.y 覹 o7݌NkKc޾LD\ۯ L2 06$nT,}&)t#)1'/nLHqJX*$o5l(BwřFQWd;"}pjRo`&)ȔM P ̛*fJ6Z6h]fΧ K~goёEȲriӼ_&[:r8W)owօc.RxP+eb%AGHΆXATQ:ʼW?oWv]gWv]gWg~+$Jܘ9 nW~rP_ʖW*2|2"GW&I'40HjMgЕ74K,> / {$*eHa`7s-v-4: oqYY%ac>;m#2322oxj%IU (hpNre2'a%[ج A=kz >%c Wh/8H ?+,]I9(󬙎4 FnmoHI{_ҞnY‡P`ҡɛmٗ FV=Uei?G"[j.0$ uweGN잌Me\~Pm<륾;KthџRk9(Joa8j2b,,*vVڪU'$ahD9wp쉡Tx)w|M!2[JZɲ }5 Af+yd*!<`7LiǏV3n` &Lb.zf#8 I^MSG Ũqt VZppFnTX6o \")NuL1x4p`K਑ l`m_XPM_ E `&cs|rwT]`r@G$]Q&!)])qիzԌ9jfg< aw4]у42En0ɀC`92uMPYf2L5w'о°A,#HRuVX2 X.-Kf{9;N+*m|zVkkbK|(سgPGp@"%rҘ ϨM:.yUܭ]`{PN4@I/+LS!cSr88n69+B&u \@y f,يjnɟ~# AZBAQ`f#ZGY9{^nIKLz|Cį; rp.R 0߳ 98Rr xAq.XϕxAdtW(>@a4IDSUIu+s(0ޯH6ᾨ pw /sp.ҚvuS:鿕 cnװoR bt[ ߌפ9z]JؘB"N0e\vuWClaթYՖ0`k Lc.ѭpӉns>ncY {L "S),vڥ%?aqP3>>޵ۇT2 ԙfH 4UK 5NZa,]DZds{5Ww~'5/Rx$ȡfseݣ[Ģ"/ wN$zD>Z#us\nYJh'?pz&]k+A3r]WP?iY*ME(7ݠgt nդ.prو rEI d5N3A*!,S".`'1Lu5W"6 }E#RʭiP':pxڿf!Y ?ʅk4 > d5>24Vr<`i}ّVZEcz@YUQ8Cнx߳UA?>vWsVp:%{S2^l 8#Iҩ雊 ̥i:z¯W)q$ϣlpF- 5'3![pf|cZ_Pi?ʟLI~ؗD"e9._*pk1"-n3fSChr q򴚐KAT'" |$Z8GJo)ny4lJ^7) o>@6dr-/H~v(WHeKt؍^'/0oJ?d\@wOݲ iST{٪zY1Wl)kL# 򻡾c˿X om>"x TϚ5[IJqH2ufe 0a&3\{s@=H+1Ii]Qlڞt;WsEedS;*O4>3$5>/)jTQ[:=`.TjFf^AZkY̢cwf"OnyǠ؆]mf)xB)vܭ*Bie$"(MtC~TJ><0q?%VWI: 8;,yEqڍ{@AY>Kۛ g ΐV¿-GF2W}-mIc݄Px2,Jco u)CN|oGV N\"di{Aj/Գ|/QdP)v~obAznH^Fk'mE^Kt]۲VR^q5i!ì/ޞ*@p"$ hEloߞʌItY;E2)LEaI> ze7>\&4CBg/x0ӆF~q6"}HC!1G ,;oQtS=YApr!uvejP+ߖJ6e_ngB3 M'vl2(*!h#눭r% gJ3\_m]J/ɚVG+h> A~Fipr`mOsӴ"`9 1]Gu2Q}= "c,[-CΪַRgqQҸ:{c`hUBV}[nMf e٪ }bTq!'=-> eoSu#mi,򥳴ȯUIXs;!;u6GKeqw>>be߹ǪUqAj{{l o}{1E AQ'{Yj= Y2na6JnZtv5jl&Z-}#J "xS,}' ?_!@1Ə?<~<7s9?U{W4ڹnD|R{_kg_迓AInᏻ{A{'1;?>~EFo$_Z&Wx@TlYv9}{8FZYnH󍬞>]+86: p5\%@'8*`nA+{Ąo/AWí#<6 _6Chv'%c~ >3^tV @XtX5)q 6?AIRi2ɞ|(ĬV4BSAـU21Qn#Ѿ!;a^'#nJxUiĜyHbLTދnRP&PP3u·5 ogpTUÁ[܊eWUV&.Ƒ`%PN}~rtfp ^3 JfVݚS;\S]XK;oAee~Y[~bu.j*nf˳n?=X !Fό8Gжޢ&:DApP`'l}9d*ųt )^Z<ÂnidFǗ P;r1;Ѵ 8+(n#>A|Qr[3 e̎hGHnu$lG#~HE\3%iTD/B6@)lV*67y J CE1yY'#3RQ'=V5݉$O>eQ `2q/R</_n7ϵQi40B.w?cr I5 _ަMIKRkrF@ʴd'xAQr:Ml0FLg;}aGA4y`SB;r>]1hWWT6Z^i}IEYGٺmj.ucB"EEra?!mHt9׃- ;hbAO3.ۊU*S#`.+2* \LIql<Q؟䵴Tx&T5ሒDw8oGN㾂EHWpclj0'ޢɁ$^bx"B} Y2 )0ӈ$w\e˝džL?۴I@sDTZ&*>ŹEv:(f!wDŽAJ8#E"R9ơxorvp$WN;i>j,J{* As9j q2ReDZT}ι$cIy7ɽh==uGɥ} 6#fWuzu%$:E*` 0f[99'G ?8X?sIp׀ nxN8*@J-kDVv d)Pˊё+P [>WURPYvӝ5⪤`NC "V%\'MLf*pk%'kDlm_./Zl|3M)Odcq$峱߅9-edh{E "}C gJT| b'VJ_ IkqBr?3Gtc,f=TIyGu"F8 "q,l:0\r[)yY&kOf2y 8_--ȁ|D}mm4fr]nي!=#^S0$ 8Ȯ})/h)Ͳ$n5sDGi-zѾ:W.^;@<sQxjY%p"W蝳Wr _nKnem9<ϦE =[h%PPdϹbL<z..=մFs5UHK!kwD3tY'vG*)AقиقB 8Sƈ\&aXɋ?tX!0*a!On-7- lP;>̆2dXYOU?ڳ;o;><^[ߘ|yUÙFYf ;qR#K$dƙi{E )-{*B" !Ifo+:u;RoHs FG뵡cP9~]<|Pl{vpsf/-2,ՠǷ:V%hv[%IE!qlj4(N+dsOقwSIT֜t𐷯W!͵5_K c&db#/8m-qϊ*խ<猟Gn/j: -G Nv"uJ9e*Q1u5=\}>ۮ@7 .e}ͣn^EˇԜmkasi]zmetdC Jk;XCt1d@BO/=hlPWWvLBcJ<0&Tm<9r F  iRy"sFT%zH.ڔ !*IY͘1b ?ik&fM X) 9Y@鳆5Wd^+1nm< /?%B0QWZSSYמBAkd[4/7ghcZug忊g3vf$ \Ķ#@ haZ݌mJjD E;:Hv/",y"I[T,Ex oϢ~t509g{[_q;~dlyEކ/"TA-Gu=]ٽO[44:`ݴ;[w Ac$8{I$؍H?ϵXBMU d Tu*̼LsNUx-b%Fw'vS}wVcjQg 9r0&{"O{jf(Kv3YIbʣX*'$1h 7+ZZP*p!׿ٳG}rvztӞ!RMWaÔ .f2r `$Ew^y⋵D>Wόܙp>;/ɺkܤ!K<IBK,v$ yR+:DH,MhnHz/z0gJ _z?9ڵ=AXb%u OHZK1 ^VdG&%WkdL œ*-L2v{5#wloT~iOO{=s{{4\i0zH=j;.!_3uG;݅^ :GG={5vhD | `f]G krd]Cū.Rh5g;Sr//{U姧9pFP.{/{=6S^S$.pr6Oeٳc&ѳӿ5^CHV]Mu'k64{>~Ո~r E{15ouD_Ə7<}b^J"Vv^!:+>VUgT'+Uuܷ8@@sՄu0Hєڪ֥~K(uC ZT*9%U74~՛th4"dG$H:ayB cFFiz[FY.:i/y@IrZ7Eyھhw8Jm_ණz'(iTQ}߹? UçOBTVȊYy][U9 n@ M ͽ#=lW, rQYۂ?4;n5qdr$p޹2k^:n1j ,f9J5/gˊƥג*`"{i4Ĩmj:;G k!\hGh$!qJw|KO:+V:"(#}Y}ʺ-= d9rSVrn9{/HFrSKDweS4B0 ñQH<{ψ? $"ZU= x/Ե={U*KĂ ~U Y# c a[H>i~'>g-CVQKJ*Ǝ¹l5o)\PtA,y4j?z${]4mNY4 C/n=;ƝˈV_s(نJ 5( Ys{Y"!#1+ 6UOުUXA3Sv6sh2B+#IڽxdIgP!enHjrLӄi1>Qai%0;U\p@fZPvƳ^2 `X˳ Uᴎ{A+LzA(M:|b8ߛ:xXmkֹW-t? ukfjcl~Uq,0m [6RWԒ#  !7)~tw, 2D<,o9[seVύKd-.h8' # A_BlؿО.%UlJߚm'_wx}=kG)Z(^ ?$?b޵^aUQ\XAJ[dB,hh(;jOi,5T*kErr̈.[{JIKOR"ޮGw, m+7Q4vAZz`b(={-_yPe#>[JWRU !16EK$9&AQ&&oHPSHU\l۠U1A~7&=M>"cV顀MomducSearC2c{^;kso3s߹w;~3gq)[_ox#[23Sx#G~yKOr&dKRII[Q=Ub#G^KG"~q P$(a$y($9vǨ"JqttQaY U\ xq#j_wP|t ZxΚ851{LiS&i!H1q1諸yQS 3@=^M!TpS*:k0×j-ǩwZT b<k$! l\`8C2qQCB!sxA4(.AFF,)H J-PKxhd6ѐӗDɿxiQnӧQeJYuS8b!q⨆34DpbQ`K8v]԰5,0-+IRv#gNvV7/ cձku2d0Pd?•vu[`/.G^$$aWO= 0 62LIevc/X&t#eby_.Ei.:yKw"x;_Gn!v|B^L`{9Ҹ#GxH7Eѵ'vZ2{p,v\_b'sc%Ϋ!:trO{k\e&G84@@ "V_s sVL>=3 {nQzvϣYF<~@Cm[v>Uf,r3g:VufO9!DTh(g髄*C]:w]n?VH.C~OĩLw4U'j 3.>LWef\އK^5`垕f9=ZU*޼ЃL&Zx$V߼2$^T\yx\/cܵG)[. | E|x춲!P&UX,j'jkYaWo_K,Iy"a'ւr?A RaXV_5 ͱnȶUtR/ď9SyYJ,P ^@/K Z_?x^Llbkas@h79ǬgK|CyKV>{EfJ65N^\0SڂG%I:ݟU>URryc%:(aY2Yaa=7`OMP%,NZ*#"&U% 0i$D; Rk&B-xV;a T 7V-e4ZlyVUi%[74:}kYaGe)tu?ZPB况}&_q֎ DmEkŃ.nB?[h6XYC%3ނCɽ,3 `|OA$>띍Z~؟OMs .tFIL򆢸0WuVO4{-,-%t`wp9:egܻH4Yi̟hav?žs>  PmEv I1{#<; 6}hJdlmu{JjES1@h3j{)q|958㹭 N0e& &f(tFB&{ 㴗X ?z{ GiwY̤ _WLS":73ekg9G/3r# Hs nv5cX'nՖZ6]U,2y]vθ 7}ق 5U8Sn2u窪#䩖IUf?WG8㮎u56cYpgxXO"Xc]Tf ">9k>2Q up?BhcIK`Yj 볖WXم6}y Fĺu2ed`4S+Ԛ"sDeiw:)-[-V_P1ZI@fIޣ)=Q>@8#ENȹ^{R`jy( ) =(,eidb¨Fs:WQ t}}ڇ:LNB Fw0F^u-:޴G>ǝ(&NF-z^';]=ɐʚ"^z㋛S>B ?oN.>h8IayId0ߊؠ*QEQ9MI9ipt'nB~(JP3@5cQUJ!`#mxj`F곭<0z׍Ҹu ,`=]J|p}".9(?^udXwps;.aؼ37WPvXxc r& b9}x{A ~1*`o<??An$Nh o+2F}ªw#O_$BF۟O9Zd\ qwŶѼs:H>67) Z+'3cs;8<}ROQ'cpqǨ(K[qӂ#ˆ>̰qfrC;a^>]l@$)b:E{Ly"TAXlazңdL7M . 3Ps_%ї_2SY".3Ծ&S]%T͒adyDqTg!"|\OQobc} cGk这02rl5Da?/'7<~?Ͽ972?疀%`n [斀9 #|_ȳ-T/U2 tD *l)p>3G <@hugcNDEo10#\]qeH8XM+U^FuoI0>]y~#@%.X,odK7&VcjT8|Tla$"xݟQZEAkE?TN EwTwɻ̔^VSM2KZ ת_!(M I7G^ +ȏ pB=/4glU<0NÂp P`gplCy B#4c:f 1*@¬>מ^x^ ^ yA?EȂ52)WÕCRJǒ:=7$.L6sW3]XlY:R~HY9PZ K)}FǏqа+Df<4Bp:D$d'~xs|1! $"鸌ؽ{qP2c:=HX4h.%V6S]E喉W|"w" cC2q4 ,~wBX,&֘C6Qa7<B VG(9\ÒBZ*Zǃa[.ԑNCw9In ޺ZUpo vr- (kݫ~bTuxӫgB Q3?vAJlz}^I:V3fIb3q4c%I)˦APz {[^h7$< (fC{rAڣt>WXÝqs`P7#a6؛Sj٬:t5{v-u:΁}t`a2̀\Q`@mFA:(qiU]Mm!=( 0|'c$3h>Qf=H40FAHޟV%7"m&hUѠF yN6e'Fp+t( #dE_R%>>KB{QgC XaI% jRgErrhieu>\֢CސB ~qĪ֪TXD1x9A~Xٜ GeJvg,HEFهgeF]բ#1p48)X8^PNgg~mYZBpj#-/Ս rq6-ԏB yw e1O[N})Mnt, h7O;곜e-%ۄT 1kw }VW^ 8d."yb~; ! w/V@>Cg04n< M~7R-@ 7Nnnj(Mg(^S:Q8DaP}FߝFF# xf⶯qgPF[5p(m-zkJ&ǏQ89m 8x ):+b#oVA\E0g]t1b[?"tZ6-u2$_%;r9娉[KSP[H(΢ r8=`UP'58~iն"T.m*4$ /lUŞ9کr u7'\GQE5SGOmN9hXAΠAb:z#h| m~U:>q^*וC|ƜR*~˳\E*ZiCGjFECl D$ʡK}ޞ'KOe;doQr?w\_EK0DbrsW,>+q<칇ITsا>3IqϾFn{qDR]w0ghMEsTDݴY⭸ KN)+n&F]Б2oM~?9ZsKGՖ,KE5K&>?(/Oi)nٓkGi['ЎqO`39T!P/n<bG4Da'\H,yM.\`='Cq(֕ EGsPȴ-Q)׹`\ +Sv S;^_lY&n]ha[FG3T[EFYC|rO 2"gfWQ]:Fm}ɆoqM~ڗ]g{eumʇhs x8&^Ji=dh7:bB6m?7j}^}G-vZvfӾX1h:afBaubʧow#,nZr,mڃhj$- t:|m>>8no"k nKAhTXcrK \G+M G鸩} Zٿ聲Fڼϟ;e@t؍V/% RNC; ׵fTw6RϨ9lƣկ2!~|f_Ϳ+ʟ72?>y:?p[M{dt]~X~h<8#O?hbQW:}x>=4Oح{p{zx^O>Oa:<= >ރ{ruzx?N9='7^ޓqqP.ѠFrc.@UZ!meaӔ$~}U.y|};p٧)N_1']>~Ea2:t9 FW[ޤөGt"YiGZxn'U8zD#XG|dt݊t~*wwiYN?!e7'FkJ$V<^* yWхrQ2¾p+V怯pm~!Prce2(ٍ:hxw%65Yn_FFV@_>^FϣvK/zj=v}yA `Kj5=0RJ|Yk(P2Hw;@hd ֒}!#-BjiY>0I\gNsy.#e乌<2ddHJI5ZPx gv'eta=Cb.g{DR${qx[#fE-xb ]3z.lNf&H u`~)y[Þ6F"3}d,4I]@,QJ#J҂={2ʐ3C[vVN#xW<$ѺZ+K|DXd^O L$@. t%gKvf$FZP.yPWR/%H\ X k[o|/73pg@]lWIKp