#!/usr/bin/env bash # # Copyright (C) 2011-2021 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=2562db0f4b048f8b2501f758cf2a1aa1 # 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 Rnqѩ5? WhvǵOfVmW׎"ITx<_w ɛ? Ttkn}RIZW5">Ct\ݷs@=RkjLjdDM(l9+נebٺ@*eHiM-U!Kɒ ILouP@3;_,{F 6-+F!)u-}Œg LbZl4"E2f LH q=L(0jJfS…h`)tsx&X@#esC< `Q/e(s=GrW꒳)`q$_\rJ#]h#lF `k+0vua8 FDd@G*KJNoܕ(H|%*l@28'WҨs 3'ٌ#&H;^{DpHJזPWru_!"L:g= 'cvQ{  8j>V?cNm_/ғt# q(3Eձ*$HrGRNIo0 I6Ɗ̤'Ui4Uy/A:@gw}dٌ4}D( }ek(\G`F$rJEO ZV2MV@fS)c8 (CE'Js Aa\gKXlcOCˆ9w{j͊Ee0u$-7KݸgtFPU`l(6lo~.u%E):K8HkbvC̩!cRbr4SENF1Uܑ&I J-i=mP>&wo;/L򎏎6xV'r# _`x_WkZk~6S%,%{+*sə=u8 j{[ȜVfx\!ÅF?D[!Ίs)Y9C|q$; 3z:d2eJ8L Wԥ4JOInD~b@'sVȊ,g"\i W`8kD[䁍8G0C=w`G4IP:KK"'ռB\%$P=_< H:8o+EX4 %S TtiݿD"I k&ZuE(}YՔ:q_-ԫy=IGTpYݫD6 -\)#Mn74>^jJc#TzKVjVixyfb"7M KC[BL(`HߩibRdwq;H⟧"W C6bhӹ>p&TAGk+Sx Z+l{GQE] HU{X gFL!I1 UXWglV#@/?ymjS˅~M,p/>B%`yP,<3TS!B6Rەks^& /ڱLF=OrU) Xa,s$H޾%4e*&3gc@],o ͛| )dĔ1vdI80/$M(u:!\D,dWAo=v&l@U{*48O/<7i-4M?LcxPM ~e,&]RުN+* (hęVW:_rդHE TIM)cqDnD5|;D]Qӌ[k幀`ƝжЂ"nf',ݼ4f"Li)٤yNtf1,e=}b!;3S)5m4m4V/> u—Kp`r'M%~x}[![tvx7#04nuZX,YZ@}]ӨZxx${0oZ͘( P ,){i`6nqjJY5W!UtAO/›=V2!e//daÃ|]7ȿTY/߆)K;!4. Lan.M+'Y2'RDíI'Y^eO-"h讽%Z-u-H 2"chB1R^(l&%]w _/tڢ\54.Xrnz$F} R S1Do aCgTJG}x<7u_| (.:4mhq[ȕ aw {1eZ@, 0XAy<9]diGF5cհ g$(ط@+/#Bk:*LwXr?[<%`4POv}0\e&ჃMڶl7-`(P9o{jXn~r #w >6Bg͉wH%xID֔N&:˓TehRd6"DzgF셟vWa,Yk-UXrq.y;5 OV (\Fă^|@v# c!A`(1t oFsii$c=j]Yg]_y 3%~2;)psPH6w_P H]k!Jy?>p400L~% 6ՎV_ըa1sXR* N嵕+VBX]Ƈr] G I=}ICZ2 _ U_;2% shWm'/' 7P:,q5J晬FNȺkUS廊^2@gk/%f<11zs3H4AO4F3m! xnԱ?yt jG{tN ?h=j78h"_kzs9gzvzb {=&pB,F>|̛Z+lk HmE.Y !9f=~Z!ݳ8~>R ?I[*jcd8`? !óW +L7ͼN=!+6Ml`(jsd{"Sa\c >y*L`'_$Z4T^Q/Kzgy(kcJβFq/;:q( ;?V%,w"o~jVhh^C?aW-5.?z=,>~>r \R$au* ɸ#'8rW7@@КK"ZC"xlG#Fjr#,ԩpxDq@AoU1<,tL2{c% `[`PlM=֬[̔OqNT/fM!$-?G,VNԬW.@U'0ݨQ3cDiiOw )KO$ʻIEBO~@.f9Jʥ#7k ZBb6Rĺyme?ҭ}訌8S:p^glSFVOGiߣ6Y^nYRkLbaQ3^άzQ$)S=KCƼ nSOzur6f۪&Ѣ`h?MuwF}1nb|{BonM(>ťY4dҙ[Fa *ɫ"vS.-a x֦xbsE `Fۘtjz\}jCWӹG=_A V;?1OB>,99-{W` 0{{czqO^x1r0Wʧ=+ș痵feX Xľ-> 12K-g lр[j iLA+F+sB܄-}B&p7aw΄;]Pȁʑp"Aßs$|ÄW# 7JI ;8 PZhOy9㟹+-|S-Z= /l#'K#wB$inۦ)|m7c%_l>*jҘ7A&%L'm>ʹA{>U<KI fJ:}*g[&sm&$]qQ$gَa?N_A˸&)ȔM P ?̛*fJ6Z6hQaf K~goi%ȲriӼ_&[:v8g)owօc.?~QЬajOk qeٗ%4LEʹ  @~2 'q%d29 I2;GV~rXW+UTWR029VdYȀbfM6°G Fyx 8[,ن]5fR?!>cu]7 ᥗ,8?(:N1 *6;cmIq}/L]'(C(0n|`[%p͡xxp5~BFYE/a`~Z$Թщݓkwԗ`(4I8P*%-Mk{,fƢb)_iͪa^QuBL  z{ /PrGxѴiq[fKI;Y Jj=PG? ʞCu솠)4ASF mi@b,EOrg$cԑ-00g`bvC8:]R|чPka+ltMw8BHY*y{o \")NULaxs .Q LAFƂjlҘujU(J8e(SM~feďWFQRcҥTߊMW)@XBwp)UFe&KW4m3 8J/ gP0qp=/}hf|F (,'!/V0wQ.F/| CB%>{`T(hѼQ=\0(J4$#VA1N,O>'lp6wkyXD-&n%0C×g| Vq%t Ԑ)Ef4ian.Zcyov~&ݎniA& 8 6۾f"hY]rfz/ZSBTbܵn74|qB G X@p2@Z[c1b(+v.P;|U1&<IzjImzaֽ_zXM͋[_L:`FUwONy UH$ ւ4TQar,0`o(|ھw}fMmrDf\_̘KKO WU"A/?5]hku d3 3u,x !ӨmG lˢZs΄5\.=FWD=G?Ŕ@*=Xn%}o:*d΂ ܹJɐg'R8i״t&#uZ]vO:8QPFctY-ST6Ϩ~F&U(rG-vW_Cd]tzΘ/dPY5X\VmaÝs59v-i5V rdrR))O%tSkg95L=4$SF 7X* 6+d-~U(B(*ʨ&B]6vcFQ -O,9L[[n솴)v=rdUuάLa̳,#I}/YELXy{t~Tr$ TjVE۬ H@PKJ3\^RjAKk1J]ݻػx;WQu l`};*OUS$>-)AAXQn [ƋFȆ ay7e2QKɇrA 3LxoSTfS\U~PES-z-0MËMDbh0tĭ<0RǨ GkZIpQXpvt0@G.w)w99!pt&ء1cC9Tbd8slzvmJEW B ]F~eF6Zg4 ><vtHDKb=p/HRJ3ULq7c&7Vd; Mdb5KږCpF-WQJlÍOQF^.b; uh;}efLZ1,ϢN_zIݣfX%JNޙw3BU:ta-v2YƷ "-5ŸۈE2-690_F¤/r@!׾5Zܟ{]-SW1;`u|no4aGB3E~^8}{~l~Ii{zx9EeqZExo: c~ٵOӑOȋ):r9#9tzdhSvҌ-*2}\ܵm[52\}(&S5 <~`rtEƁ1:~#/=hgsPex_ XSّ,Dss<xppmÝ")[>HBzoG@Ӑ@WgPc/zU_gFxf/~`M &PG̅\B 39hh("PjT åǶDtNb;pDXŎ2xʥ) b~c)ho%E_X"Q{W!;'5kz-/gjM.0S1!*al:"!wc Bg'W (N@e63S2`JXeh/o6m5(y' g&|LRJld& Pä(Fд͎XW[2| #bWvj hCu-aBD8XI"dEU-2% zN4o 8Qh梽G+^֕WGE[݂X֋N}?$C@xxdz_gaaaaaaaa2;vF;W."͵IOjj :ꟑ=i64NCow~zuLz? K`3k_QohYƽw9ke߻&=8zlx4P@Sa@Tr`)T᪀&'W oĦA[)و @)19!/p{szMEwL0+*%5͏Brr1?t19 8 *n#B,C-z" 0wAĶIA9l08xuw8u&%ӨTj^> :;_wn-Ya[TQq#ZL*Ӹ)qqF6>2wOt9 +.҇ސ߈U{oBt٫S2jΣSM|иP-Wt@5M@4$& 8O BN+SR'RO2qX_>ƃ%,϶_C4&)(zEe! y_>v8m5Gİ--?m4.\9m>i2]` BUfU?|up$]T`a2h_fc2NbwwN4]&hK N,`˅ Ǣ]OvK9 dHZ WyRp?=3&KK'ض;w6>  BgwS" t=5!LppNˈ%HBSfɠXd.C;eX Gө7'8~#2O!l|_PԅNJ<0<=+N\ށ(#PM6a!SYQ`CI܋U<#aUsn~p{-ӿ'`0@邍+Y!F] x,PQ]v Ϙ^&m3`C^F%BEB}Ez224ErC!4cTgbh=j$uE%OafvX22ˠwu s'k %tʲ;y%j?7'R,p{_C dcTx5wʞ pkdoɨ߈\lHy yG!P[>][3rlGB6ߗD 7hȵoB|#^i;V ]l[q\?Hs ȿ}tpKq~H!KFEk&75 idtqS5WCZjڎ=GڻVn%ɐCEkѳe:XOg,Eٟ &Ft9$nY% tb+D~Vڻxi+Ǖa1\Ӄ VFR`l8/7Z{)bԒV +DQtjT8r-`*\,u-%eZ@Msk`o<3Pgye'>v4URa!X-py?5KFVl%orD2y.C }tCoy7-Ua˔:i6L)!qYc>;k_=gm}Ѻpe,kf?Y,g3h']`A:N[U=ҟڐq@E2\4Fijd5QI{Xf{wڲ۾Q}Sl`;Z8\zY෾>%yyZ:F]}w2h ޤɾ@X:& z`rkfiSlǂn&VtTs (~M}# NwfӣC`/ImiԔebp0eTHUˋz%iMSc !"pikhXsO!]GZ>ͳ~[Boy9:z!d6OErr5*{*|P0 4{Zh6Sawm2 y$*JBc;-HEl8͸&FDPQ>:yd^ku#JJox-8S>X|&LyJvv(IiEupK8`h텸J>UnޥGi7#vè>=躖 }SPΓ7)%N߭ZZiơ8UBkw]W: =鶧3CޮV Z&Y7z s2Hȵz*Ռ?u|p/^n#Vg{gƌ&fm_-? Šv0L$ \V5d Z!+h3LAw;@P0݄>Ig;9PZ)${PլgPe6;qf:C~nauUomdvJeA_[&t9Q{r[*k-h^PW*Oqa,%SWZA5Rʔlbu) EpXl"#YM%0;8µhFnbGg{wv93e9&*GsТvep|0b%VPWd+[xCu.$HzYEӖ8^U@[4/' aGT&S[XTKekXG?Ky~lDI?Vg_g?g3?R?,r#r$~b\50/ nqx|oCd\l잼w;'{t9(0.ST\jmeŻ:<8=gپ.}d"x=U *W..گxnBۯ=D͙:5c.u=prI{U~p-zUM73 >0=(SY}d];Km/ڽsQS&j[%g2IǦ`Z?މm<~pұy}1G6uJw` n돌bfNr?\{ȼ@[CxL 8˱4oeF?^mt#6t|(uL *G 'ͥ6;u >~~x}}wagM%Wv(@zy!ɉyiz[йri7Uwq@$P-(ByrkYO^op:?Z"A5JP(pVJLMZQYzCaQ=Z,̏pۉ`%MCC#}V5z/Ǒ< *$ @h?RR6Ol9*N;WY+W8B*, ϲÖf v%<A3Wuڪt6+,gtRY?4D(Dl> hذu7@gր8x K2,Mgޔo7g_m 7jI?얶}P7֧NΒEN K$x탽`Da^ε#epVJBw|{Ӹ"N,|"Bҗ׷M'$[Ow:AL(8Hjy-$lLFc7Al)Tc\FQ z2鐿 {?>[J F>)X6j>:_?~eOZY{5Y_y0]yIϿO/z3M{޸8O8O~8xhavUaG?7b߲XE?x9@ PPxdO)|GǧcmuЎ餛Xpذ9id<2I 8֒adw衒gTcGeEnΕ~%mxK\[w_;lleu pR=m`|w^83#4|D:xXֽq9- gGH?6+d5f.6eX6=&3vk颳l [D l!7B~u(C.@*AVhXsp:2qFaTgku>W[&cV`C8J{T22h%Ȥ Q&^,'F$C㜨\+H}YA\z`t[!.}kt7KޥZa[ Sr!m %O\fX RQҼ#$%B8ó= ̸f=+ my7RC8T v7M@*8H ݫ\4iO]ͥduNRTN^(VUK4fi&^%yb=]j܅buۤKyDDQ]0:YvV>##FgW9)_'&78 r(Þ@j9)@nf%*y/s<ۭ=OKYX47?~c WvC_䷏ Ouk]*.=A9ܤG>}ZO"@%R-BL]ߡӔtp0d"8qRg9۞h9xNixsleAT6+;Gw'gYU-2Zsm[=C,`NảEAL<ߍqWE_8W"tAǸL6q-.u]v_cw^>Ùg3{=8sO.{wo )%dˡ56)-4V׵d''-DnjRIQ=U2Ǜ ^K@"~v PJ4(C$E0T9Ǹ!Qou2aaYRW\ xWh +-%)t^o:7pk7{g1WuiS:ic(p1jS1˸q^RןN>(OP_>7.K-RS-=يBV~ zO0\Fj4Y_\~N*}(Kf#A(/i*HY(RvӔ*m'# if%i<`-?׳B01l%й 6;BTdA@9O_7Vk`n_MF*6nk }d5~A"!0rѪR ݎitOS:V<aQt}H[f3;1F(qIPkrVLY"gmJ6A0 Ah~R@#Sc jCpxԃ#6nA!&2;lry+|« 4K7Bof,Bto{$7B\'KqXZUVP| rfvcm8h)-繏%b٫%_ɔ|C=|nu%@tv cy*Yl$ef> 1x5nќI6ZMhxe3)TTՑ"9:Pd27++%>uK'$,ΎH-.ϭDo^WاzybZāI;.1+7Rjo6WX`]_h; ܴ-En9\Po^5 j4W usۊvoQMqyeql);I93Hd-|߸qwT tk\l(aa+v4ꢗ-SDIkYzA}+RK;% +nՖFVq̞ ;1vV9f;ƨڣ"bRJeW;O &TP[ P&ݣuNoZkutзs?B,̶Op &9dN߈)9|ўG'O#> RGu-0$ V)~30"K>qc}v1&oϰK;n4H-X)=g55wK'UOSiQhf%E^yfQqLO[/LA =K/0x[nu/UPuNd@( tl}uisAJ鈟F^g{Ч;q3<~s;O)BՃ N@P"7Q#9'2j z<$㴉5qo|>dR&~IهT'4 @B]:󆽼laܕU|0+F}$\l }֖ 1+8Zu-a-u  -6#$倩g'4ApM8/ћCS/U7L[D.%Q쳥@[6$փ2fZ׵@%8vOT7Hp|v w;z`}ƫ\g?9?v7]}߫kVY~B߳Y,{=E} Q&Sjx/>= I uC? лL2ª)YE&x7#y6i{kTgڿd*UJW*dj%ʵ`h1˯TS}C'˯Ԛ8R^~E=xϩq 95=}5HԆTwI{ w)U8@NKҊ{9+V%4@?yzK_ԷOJX3ËTz;~5B >>o0T;;s ?Mz3X46(3+з4cs;8?*A]Q'#RcT8F-jyC Z_xf8b3n쾨ϋ=%P}ӷwȔ 0F5" l=ajܥdD&tYf +Ps_sV oY*pj]r)ŮLFIqLjQ?1UO3jB`kFRQƉ|bc#0Gk这6rl4Xa?j-+x%_:33י%`f Yf%`:5k_ûrt @\Kr]SA2:1_~ȷRơ~Y?1[zV t' Ы] D¤?툈}qϧS~nYY^9·]2PT냘b#Tɹ~KI>} /ң!Q9NrUp @+\pVDŽ[6,LY˺Rwqc5Fy's׽%tE 6c2S~g ⣥dbg1UA5i efIgV_b=i79RК.yBUwyqv̖q$vE[ /V}òHCF(F h#ٱ jdآlp0TZ0zΩf/S!ROt! (YGg-ԛy70Pb" |8Fd\m4Aa nT+`LB%) K*f/&"!^C|敎v05S{XE!v]mmgPaٲt5bvBY>Zix{ ǹ>~9;C}J8*v0$е US\"ަ7^ll8B;矏i)"騌p@{qP2l;P[p$4=ŧf&QxiäED3B`(L<=s2D`)p=0[c}t Cф Eo2xGPnEwM-!I[-Hʟh餡5jO+/ՖgXyC.ͷ}5%WD4:輪 τ sbFB6 t" +"aMd\nL#!ٓRL!؇(G9Xm6Z,G)=Js-A97B T\?q;g3:U@['Ymײ=:H.#c~rfr`+0 A=0 }ӸP6(qea֐|bKbXlht3/en.QrZFml$1jM?V݇7nr30AHT z#UW3tEC,dS"TIѴZMy])B[1wtb:qP׽^CJJlL]T{]vFc<)H_K/ mA1dk"1=>d=JYE*?ƕol袨dѧ !<&`js@Ҫ>Zv Gr5y2$L+}kY>7%&搅7A*}T_hn)' 0dX,xwYE;BVV{ 4ps;O)Px`radqv C]`1S5u^7ܥqCzIw꤆ʣ'!pNGU\RM^OܕcXUšR٫a>-g):Q=xlo8_{?}?*?3_{=y}ϼg^3ww2,w:PIộCE8dгKW#B-B':ӊ\?&d~6$8ZN=kGJH&,8C YFՄ`jH,]!ШmF?j$3P*])AEMJ rgG:4ڽa."ׂpt<4m?DOFX%U @1 2펎IMu%]4BhuIkIt(#v3M٨X 1w Yu6闟0vTǭˆVWh.Y:DdkS|(I;jN2E6pbY!V$\ (k Fp${y9l|4 BfY=] !N#r Nvvo׸J9I*obHp1j% U,ge$Dl^ůW.9 _ 6KNjq)\nEyEB]VhH0w;]i37ÄYTdOp??DL.u')R}g}q'4x{{/gPʵ$l2wMUy~ 6? 6ϻ:^R΅*:lX1TraY'kGfbba  7 [VdVs4qrfȝ9ɟ|Ԇ~`~r~).ڂ)6Oo7wr?s{6ژ'07!9G# >vޱ/Ԧ6Ι"2ĭ? XG]`^pTqS9҅>x{!ͷd[l+^TCE$޸r>e1Ꜷu>sO?6KaGV{ɶenF9zHVt Dc;H~JM~N^V(wV}<ܭL?AClzHyElr:hmY[,E$<۲h=: <SCCF=-*B/0VFkoe gshU'03g? yKQx>?nGT !UJ`K-Dঋ"](QTd"ɞ \@d<}v@rw;n/wzpMex0&KҠ|>n7VjLLlKT_A܁"Xs5:U#\Fވ;>B>82{.UER}L,Zچ*Zj`(ZNG 5Ct9H?hRNW=S\, !tph"Z^V`7ֈjN?aT[0acꏆ_ $ϡ_N 1 P_}p}ͿpvyvE||xErq[]Z[Y[ Eۘ| qoq|n݁3tNoyZ>+p=xƕ~ynqݿ#Wwv;rsG^nݿ78 rMKiT.MfeZͿLu/Z]{zo)K\ezqI/bqQ}wzdΟbˢh4HJB([2Z{L-wfD"VC)wQel~ؠiєdPQya&o75E?:-W{g8{g ^D0rrìm< Ͼ%fOV^qa"=չMG?4$AڈΔW#eUQ[I7NҦ\\JDr2@GE\WM*֪~,wiYN#J VWB: g[M- s[R:fWQpMF _>؆ 0V}DxV$q</{Y-sP@ԨTxߖf 4&1LU|ƿ--!Ҹ+WY$PE?`)*>z`d'ϣ3ѼuHp~ z0g w E"IZs =y?S&1{ߡ}+| 'OG3a&?䇙0fí*IMl mn o.thS[ HŐi^%.>#DRh6Ӄqh[CE;M\x7 [pꪞ{[eH{s_You{v|&#{H'ih |  2ӛuop,"XP |x/ͲH~!ЕLEukw,f?%nU˜yL=+I_b̈xq?VVyWg#RBVk+sgHOQӶgy8w 5?匦nkiL=8~f?s0