#!/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=a4715d02a89304f4ca44e8f49ac62a76 # 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 "Oc\{s8O8{ ea;N2S%KLYr^E3Z}n|~e6{{wDFk/<?yup{_o;xqzO{b?)Y'3Srv/ehu{˔iΌ0>ƫ(S/ &, m")w$2;t: YcS -8HK,;Z@$\o94V1g+^rs!])ǁG^x(t= vE œ4&+VI(ކ^|dqize`PǷ[ QD50cxA%lF:ajEzDPNy~K *%dܣH<mL oA᥉$ D8n؜""CJ9 D)gBX.0 (,Z'52J]=T+$b*@evl̜:1ԇ3Tl09<5>d4ԧ&돇P:Mdj }?OS4dʌӑ?fx0:m$x2#ĘA٤MovdDg4{c6O@Nә18lz:1u`7Na8QQϘys2> ʎt4q0И)Q蘧G3O?%US4J6?{%38'8<;2glɐ$nӏ@7߲$:248Ax>:3 1̘[ $'L:O0ʂ֡Ώu(dIb} ̊`D$*+F}<б~t So&60hhP&B/+qY@esPӐjCKVh6`)'ViB?…wl@68\Υ}`jLU,6 Yn@AZha=.nXQt)loe׫_t^7r~o :.)68+։YD7}jG>/E/_ކS^{#RO?LAc܃^ޫt3D&c >:]r3mc-k>!Lf}e~d7o/"h&}/\ͽ4Z%廍u^TW_'G**G@dٮty.FUI^lpdȪ _u˜1: 4v!::!%(A ɜS_\.cпa\s%/RUvx w #p6 j愽-XgW~'8_VځA|T̐OZn]VoKVoعNtگn4ԠE,tXT#jK_yH0BTd;bT4eh}AUq .)b&yj&o+ om-3Q+?!8>7=a݃? v3ދWU?}Gh]]n@h~x $zl.uUS Ն 6^ZW8KDXۯy9VVej7K{T(y&S neA؉9}ޟY(C5咳nѱd$mY3#zXÌdUd%9jɌjۗVvi)xچ X8wA"Kz9Jj'r|MpJˬyߘY:tX5ҿIŽ=t@IJT HY&|BH\pY[ a&ڋ)NG9^q+ҭ&16g4 2M!z8벑c3/R1X",֣3weG{i^BHlW W.1 ̺JHIb;&P86D"Φ E@=F{a FY sV>|JkR"8d yQո2*I[7$C@$i|'mdQ'6SF]˂5V iOMءn\qٳUZhp?nVj{~Za%uxP26y G,,'+<&\bAniCyhe]D5b!G͙KvA;.w犘ň$E**$!RХ,:YP1@jX}4$LI`Hub1K`)OG}j/4ٻC>#Ulޅ 5R KrAHLU69)y;O2r|nM/ôGs]?as٠_ TM&EVUF͢+۬R"J"ܝ뱸rybQ9N5oDڨrvČKVX$b q% iҲ]d6RBOBe^Dvx(\S)-m}47tFWsui0ɓLg ^$͋E~ F}0)&n#lJ)"g(jW_c($y2F,{—}x|J:)7uLa^+q-!knnlŝ,PGLf~xEĄQ 1v#t!lt{&zՅBmP͚b%^1DtrR:i#2;I]w$vl&L:XPWܪIv5K6"lʦ .jNIh XgBEy0T] ޕ4$pRNZ;v(2s&3/#Lo*( 6(Ln <*ЧK֡Ib+1{'Gnk0b`>3N plvW7t])>8^!]Cwم b+ZQƒ]qdAjRx718vض S\䃭0^6nBAE$ϒeݚXOr9]&Fa`/]'y F=`DՒ/N'u^܃ څ^mK=lxjՁ{BF{]8PCT2j R2h-o6o7A[ ۫J}.%߾W#)0ɮeeU/s(w4TnߨD P1o߱g^;2s ;YzcggSu7X (7,;gΔ% zC4DKb: %|qî.`6;qR7N5{r/(RYѨ9\kLM*ܻ2OB"ΆyAPW0E}~~ݽ(tMט ! /ūM Ah#1ũvQTK|+ydXUA4jt8wͥ|3ɡj?­6]Uۦ4j#̈`ZaQw ɲQ1cC~[엍[yÚWt> T,4cj ֝h1Y㣠JqO2p+5JH^m.i'$ :BOoƗ/O]AOv#`= F||YM5vnk5* ,2HMx:;IQU8ZNxyǡ$:y"bS2dMShLMG5ǟűAV[^懊+Bob Ѷ +_cEy-h~H$lhȍO0Msb fad-`nfoz%ŷc[Q+WzWHT^]>rA2VV(6Rvr+ kR#>)ǑxE,n \=/=o =%߬//TO=|n2}}}#q}ee!$r?=+rk{u( \!(^RHKl# |7Y'jMneUx'Uy'幧Su.N}#ksn,^RNAD}[(!>(!ـ ; p]mR|Cr6lU?~\*4GT[t 沣d{ ,u?_k@U>_;;&cQZ@pܤ@'At9CC{CyjnDx|ßED)R>'8_ Iqyqs|D׵N=>Rzt"^8?Ƥ rL}-T?Y}S@%rÑ.I~{J""Q<đoj#68FE[ZRHfM2cE}g*qc_ҶΒNt92ʼn2G߱O*$}%VSLib&bqf'D,!6Ѣ s{-?)'j$M4>Y̏ǑPK\ TX@:Z;BTj„ ftV 30"F3ڄ5Mň,GB6a5K4kG%dbG \UdE#{|.94Q?=)Wׇc`́OVqum rD=^]@B{#,B!:6218{quX06;:,V߾C G$Тv˔JXoA&A\%4]=Gm,d8fm_/<_fv=ҀO9֖̮="`&\6aꀇ5Ev7N۱ Q9MR7{(TGP{͍VKv`ǘԏ# |nH]dmxre}/r텛X-ޚx &G~J"S Nnj:1VwIb *&h߉aj!GHS/Qo8ޥC=/bխۛӔl߂nC$y66nmFcC׫PɝJ1.;uT ɭ%}9Z~E[K'ǭ[L ʠ&D ,T-ÜVӁ8˒iP"[5HvٮKϋCJd$b6'@ug V[ĢP%vݠEj A#&\Yi?3bi~v#I=lT7%Z2~>!aR̥^vɼK0L&0L::aE@1J(@,] ;̹-ByNRĻ7Fxlj4Q[ugu VMoaɩNQIԂ$qXf#]` 7_VU,Z@wS_1l8%Z]0 $iIb@>>lA4ޞgda#%Xwjb)D %2*LÃys/Ai|xRiO<|X{G߫VEM+)!xղJᑞǂqHZMƹT>518^ʇ'%~ $KcZbv6d%4Xh=!-2L.环j!)\*еiN0HQXm׏t$k +=Tg70r[FIH6J} N0ܴY ,Ҭ?^p}EB0mkid=Ɏ XٖBpޭtN?{, x:I}?޾_| E<| cgƟַ$ۖk,UË]w<-Յ9|O1iegRd%$=S1nɾc0?Gj"uuIGD]}FX<Z '[>5BCz=;V66all6-TϠj|*\zXԆ74-\f fcAp@{adLJ0`zʆ0æJ_ i0h SbaGR* # CNhȴst73M0M9<[2l~h!~X6Jk+|Z@^J{w: nJAJ;WPIA zofɽN;df1`3z˅)˸sCOyڢ7q ^~*)"9FeɁ22^8hbsټ~.k:m8#[j}Lv< ` D|SIyv%V99УQxk\f{ Z)1f"eqԿwВޯQKRwUiPU7 5Ak80U HF(%?'v(.BQ/QWGCRchS. KNy`@q)C͍ulqP0NJĖtv.j0W8nIn܏ldCcz~hiaAVHFXG4#YdKՑGCJ;S#X(RLIڊSbSjޮLY$1wr\[,Mmy׈F\%| 4Xm8Wa&C$v%g-=ophn R}ݔb=ițHaip*vƬ);b7J]Ѡ[ E坜j/g>ZLu K~ }02viPz˪.f*Ov&j{Ԃ "EH w{x|DVxoEH=d(`t:<FRLh8S}t^mgZ:l Hx7g 4pt&ۃe*s;E~NZm6)@kd/{l!w#XtaLW~?eE)_/FtݤF)x9{eR^+a^{_tX|Ztuzʘ5\8{HY;ݘ?X8T i,kt55ꈘ)/[e/z𑩘:@|Em16_|xݲcRAX8¢d=Tx:ҿ/i=q׵̎vŲn.btǥlj%9gz<ewn&JQ6!&*fFL-·%I*0?ZjW7a{v.Pc/χC7߈{7ӵu :O,{LF|YSb)-៵'y}6ߝp11&FV/{Ӡ-1㗩d4'E`'z/|8GF`8%4}c!K%X~I8OIRo2%$#,g40d,H5Jur3Ƒ50*>2BЄ#_VP-̵%Pbb}:3R-d,yC%fqГ頮P&C-iN+$Gq7T1 Vޑ{mH"RW~!mEq`Q8'g|~fo)D?X ۇBļ,#+G"nɐ32y܏GݛV.*ʇLGNsa:l`c dAc GyGsJ{weД.HAS1iy1N^?aw&';_q]_3XHp l,z߀?fσ#; PDxWf}6#Ca"Qq.=Xw7xl6ӒMBb3d6cAN:Q,ķ8ۈ~45)%Ajw:ϋλ%gxtUp{!R'GE6~cٿHkuIr)raLPEN?3‘B[5+"O_Q(Ö8Jq iU,N:b z8hj TƶYnjD+l$1m,pW0L)Vh]y˜ -垩xHZ+Z:@+^Nv_u?׏XHaqXLcbӮRVsj^] MA@2s1'X2WrM}16Wt.y2#?džLω2KX#;"wiiw$m9n1 ^8\Qh+J}7LE<ی-OqLDBGfeǦ:3 hbnBOef $ =1UbW=p&9!yB1VWU28c_(k3 0ڎ,5|xϲ)΁6[o#o;㉄s&Lji;):7x6ـ3k7qL>1vhN=<4Si2_5Ip;Ir{fcMC$tG-Oڜgɇ0.ǟfcR;0 }XwEv^;u σ`c= .&`$:ҿG: >x>n!|9῾k\> kiVX*wqu5q|/ߨ-V5(P:G2{&gUEU+D`XcĖټ?(+pwjHa~oO<C 1V1$(HOpoZgEW-hYlpeҰD6S * 7 78Fg ff2bu޿PZ7^v05TڹyQYhvXl wۭ r]$NB):y=|] ͗V5uZǧΚ*,Mt_FFUrk?ס]pGX[W.nz]^HNP,G4\-M[|?)O, ߠJWUfIGE\*Wr\|E>ykO?+#À@c1$+`{]Z Rn"4@-0PrU\JeW\x"/ G8;Y@ vgڱ6QQ9Юa3Yγ} ڃz^"j)i;gֆLj/?OP/%x`H\JaLfFj[mƚ]MmHR[&]VPRۤ KHFmiIJ3sYHXk6bdDNcFѴujs@u:͍%hkP +mj'xStgFR%R6Z`qR 3H>hV槩L^ft?uk @ jػegBo &;aSظoEC(B NA倻Z7Zѽ|XyYmcOlՑ3ҒmNjhfbdsyGv(h:ku b$yfd^4_XXd ̾'h Iܻ84 /YkFf`]uԄ'ienBEՌ3ȵsD z5Uk*Ŋ>xbfQ A՟flpPRtzM:=3=w-=-8s_bp[$֯&3)~2).FX,2$r蚶4FEs6,yŒ5Ҙ>fc?^Ғ^Pkj;*l<W-cϦx2ɝ:͋y#"(d>@[b9=l EH~Ꞻұĭ%"8ŕCĈ&L4͗]]xSl<$YjS}֋  Dቨ01#tyC%{SxN +؞CzC!:a9>~lWdyZfJ47p|f*?XTC8#dk?.dg|9:-(I%Z{A18У<"LC♮ȣ=AuLi('&k$!DK˅0ř%^Y:,r~·bѳ &p $ 2I[6vvC(p9›&S'2o| ,y EefWU1d%l,ZԻq8cwLkB4"4$ܸ۝O μK@k ; Ҫsn7;Ar#;4^R{h[/`\vEy(t X% MBzCMW2aTQ#=nu @e>vJ'IwU3㛆88bK¶r9yD@h A˜rw d α #uYXLc^oh3_@FAΫNju#S o~>mt z֊&UFC-IeA=[^_{Vx tH]~~O`7'xl%"FkPl3r5Ol&˛N30^.TVqYrvoXdGN9{,~++vTaVػS5[~ ¾r?f]8W,k=u|r ͢jro݈!e/긕۹#jBMi r87'(d^ Le& i)6 a049E``쵼|4[?!4 ГjԜh,0^0:H3"VT]gYjZ`F#3dDpךƀv2g#p4g!KDdׇ0ΉM$Ne[ G,Ie7}x3}_  Adj^xgE{. [ZΕ{okSvG[*&N~ǴlE2Wx(zU{̍O8iװäFAZAT`7&ɩ&"`ϪϞUמ=VW΋%S g%r~zZXAda9tՆ2R|`P &l6NjSgE7M*ĔL,?lKO!v"cF,d ֨pX$l-|+?Rb NOoVWL!sDbz @*Bvj]=OKm$\dIxM:l%Γ-ўި^]l:O%VkAi,t 2F/[ëWFI8&@ ]w#Vieߖkhq%BM6z|.DF"4yuƍ]kpjt9x|0U$|vJV$ (*b5 CN( Ge~h ,øgJ1Esg  qh퍡;֔VYQ]B@;^P7_ }ŢiHP8seu3%ۚb͈|4/ʆ:h^}'js9o0Шu$j 5{|iF!y*ӄQF;F2.E[kq ^ʳ-" NKҀ2{ >,"k4@Q;,/d! Aaj!TriMe5Q1 5+uHnh4o<ԥJZ:DuoT8Sse}{@@WMQK`FYt&)i ‰Hxuaq!+;tu@L)wJ4g\8x)6-zv|BOMF&/{ZHwijIA!@rKHy3 I:eaT m 8 Ȅ7,GA?U-oog)4Ya$sILI;kiL3J2[I @egR+ep[)sU SBLFPO?!V9H|l%)aJYh=G"`H.+6@I1$cg]VW$AbW~Wz$M w@fc٠7fżAVrA pDtOl]go#ntU8cK5Ly`cԉ10\ 3D-M+[)V8pGr y K0@@XG*#T`$fÉl'WN\=QWv` ÀuQk=팑G9\r˚cRikYDT.UqXN K1.]ނgmF2gVV-HB8NN0orC+ʲ-c6t*\id+xre@b]|| h2R4!Y\ ҈Ax8DQ :LXˍթ5w_a^ތyxutq*&Ja=xh)W|өo?F0L{q<@fy-/?^0x6ғ1 !<) { v`2-8=ڶ鏓A:A;Nd?-^=s/W/=wsׅ߳|?[?>\^X{_Ӷf$!M-k ;y՟xGU@K_d^L/ȭ!SKFwk%m&o|j[+B"C$|pCfqr2ˋLmuUAYTg WE?.wm"fko "VX_6ǁ7fšcN}'h^1Hil0>NlRD-UrYTb@Q&h|ܸTLɝRQ?Gq4k;ю;8aPu.*{hHV=^2wD֢>%kP VQq>(0ˡ:蟹^4SDQ@[n&-Fц(k]6Wϓ:9aqe =]`">-T'2$nͷ<6-O}zX՝11@]qEr&=Xymbiߚ +>Lܙ7 /TDo#P'gΠ6]>=x+Jƒl>FݥPZvS'S. Ux,#k31g>̊X07Ek=1۝iq(fr&ЛK-UԞ2K;Y_b(+l'H2l7;zuck4:'AeƴQWql#j1FRO|*$KĿ!D*U{pLTE& !4彛6n|4V{: ΐrjFkB! h:"6QVkr1dc!Ii].TwFl 1d]#6]YH}{{N܋ ֞KVW[ِ] Re <ަA"OW7W6z7ӕ^|}e? LLK|:LrYj,7f؀5sͩ. gEvb ݙׇ5&nhu5fѾqd܆7yꤍ񗡋 hDF^Pd1] ?_x|}#<[靟=oYy~}>[}d{zt#譯Ã^;{|`|3=X{dL6nq8!ϺM]"#>9 -@,@}IL`-$![/ jxJa` "cTL~PJ,qSFS醖F_&Ε#`%g|>]9xdcIz~~ +EZ #$HGǶ4%88KࠣxD+w|ֲ0'݊#& t<pewl5XلS|f|cmu<<_ Ξ/Y\ױ [?ͻp&=x(c%),mjtƓp/s@8OkAY|V?y676W֟?Yvϼ@Oq#7=$aDp$4B o,o \u(-,x%MN!d}Ҋ3yQ%C̙\23?w7!:fZF:"LQ|8^CQj$q$An5rD Ddq9c;oC$w*_A)cXo}}-]_?+48ƹIH ]h4p"|ЧY=Kh#D ubd%Ly{FievicτwPώm^ZZ^])Cҋww!AU$ !~@CV[ZpEQhqAV}8>)lVCIp # Z;~^zY? %RLfnEЉ'&5 ],I k7fmuzC~!(V#Dv& +LD1d>~dk9/I@Na$q;|Ńա@BG#xE!H8j7Ka7~FJw%%j0ZMy평^=+IC hWxO5[5IJr}g]?HBDRK+]#26Z[ԤHۗ'ӀEJ_R(QdK}J5##OOm"N>'GWQBHtjUYN$)kӕynQ;02=jKF_0 ʗ4BZa%6S .JDa F<δjSr-;(_ gDgPGv)0&twEhWC.>wf@wM>qU@5Sz xyk96BZi0H,6cEKïҽ1&UC.X$e8ɧ]v nY:MJB.MsFk9S(c3!HC\K`6ۻyRɽU&#?/n:T.#"޳F6'7;Fֻ4Gd֒$w g'E%C!R& (5dpϤgbX6QvY|= BܝZLK4/^ӬRkXu-fKxqZs])`Љgkɪ0$iqԴEZKOw'~.<X#Bɴ q7'iʑP? ׆H>(D11#\pHt#bzWURBDcj)!1d^_B(TX8=?&NqKՕx'_sR9a9u\N#Zs/Nm\ʯ;y#۫RG!(NEujQ];8߄Q>wX[~PFs:$~OUQqP9/D\ɼ0a+֟'QZpͳ?WOco_Ѱ %ΦAl(:|} it[:ژ3pa<?kY?<~-M)!4]ۮI4FIz^?'5z mMگ?%ly~!05'(\T(g.vBd6E#IФ|DAXm)2 0#J0cbl$WTu.Ň;f8 5 )fs1@yyT,NĿQ$<^PDN@% j40hiP+䉪Wټ?Pf,^$ 8WKxT23z^FPOx J\ ATh3ؚ+c0&@6ܖJ'G´ xP(ƛZPDohJ7ͷ H*ߗDYKn7?̨T(ʶ h*}$}S﯋%UnJ u S `Vt'GKJ0MLPq)hk3?j1C}kBqJQn$ðQ`#5t=-SfFy҉x%g8\H#5) hz6MF9C=t>ޗ`hNDNu׊E`l?9=Dav'E%maꛝp7LrŞ`]x9BkGw)(adQGuGONpdʆ%#B!˱洺sC TFlg>B QH_ЬOyuػ&LބVU)x u UT IlqH4IJNtwgK %YJR[w!/|8qW\+Dp i~uKUHDyi(=e,/ֶ]X9_'_/y)ַwN5'$i͗>P+)>35WA) PZ,^- tM%x ˋa$@| ]m;O ##u gr]>&-%j =ùݭunN=|}`pD'. (zka[Hס_mhژP{̱AyMdL}%4ƞؠ.N&CLptR1 g.,0یZ$UHP5pI7Rxة9N ~ Dζ'7|;|#qU]\"%"_;20̖Z]p$.Φ?$1tىXOP f<K sjef%bS )%+PQRmVw]$XhAw=;[z3H`2Z[ 'VQ JiJM,O):oQi1eO\ʑEѴ9Ӹn]aw[%7!+JSA+1 w o$]i⶧眄[xvu2yV)]OXdme=Y}*j3?(k'Q ^8I4&lsL.yfxWyj~V$DޒxSDp~zfA@:J#V1M}a0C 7B{1"YJ`.zHX6_c)F-tu)/5\iW8%Ohqtǩb^:-}$˃¯~IU-/Q3xbBGNIdvk?%a ya%6{Zw ǸN_;=~ذ4UVq\'Օ^oxtx`v~E6}Ǿ0< |`zZWh>ze,ѣ8"WҒJP?V 0OtJqU&hEHO/ #v'a1 Là#?P9B6Lxryx*7Y|9}9D ֬;:Fg_Z# 9ͅ6bOcCy>If A_ O7z&MOM0ͶPdgjjdRTl-p8HQnw22K8|^wH. cԟB_1,Ba)| ./t:M-!'6w))3ќy X\)~f|D 5('h7NՁ^U ~iMt/<|Awx άNKh +y3u[X"_8߳g v%ۻƖ^6F%h;(/ ׹G _IhI[t2D&$s6$&1KRqc xפ~ljq"2C]Laa.e#Xf Mu{Ԇ`%tgja-YacCFvJ"LiS÷i,`21BI%aLtwq'7; ',HK3Ln^48b.[9u|EhoPt4„<[I7EjVipDnc6P^N!c ;ߤŶ).,_XmVJ9"=dcYr̔V%ɔ)L1"=CUE6%{st9{&LPD2^,kTݭ8~ĦƚnKh,f1GH wpzI?XLy?.,okV֮H>SeR,f1׻N0>C\ 7Zx, Jт} )6aU;ÓFEfAA'O! mA H$6.,Q8Ќ/=JaE~Nf-Kcp;x!J% mR߅3!MLPg9=|> wglU}N ShIj)>V\J].?dy(LΔGYgk\e>^سL+ж'ܕm~7b[=~ _].*u"^̓ɮPqc|2_1" Q(Í&)8M. U3ҝ(h e҈čfC;d^x6 ۝QbR" 1m%IrV診3]wVsln_P7[%ֈ~"iV^6 A$ p_%{?h%r0GL-2T[ !ja*γ47TN0-`S+|mn$DYCb9g59@sBW3Ee٥e01Y BDʵ21Gw4ێQ΍ԱD s:J3Q.cfatRܾ{'VF^`)74MJՏ9Z]H>Ҥ/XƐ? uZR=/(X;ht8JsjŀTo̅ F LVsZܰ?*t1w!&Ni(P4- ]_!^a8Nn t,hk+m7-7WZ(LQ|;+tz?y,m $PªDHz2_?XUKz'AT: Qe:'\ RE N (sY(KqQ&4< tA8ڻvlhHbjc4SV >MԬ Zg#*38ƺ b-ߚv"BU/m=b(_q,-:lsBV,K&ZYcp:8_ #V?bwpȴ!Ĺ#XsWs#ɍv=?(~4KlBikT5 Gл0cCfS,ͥTӕrY^y-6^y~q~';Rcڒ-})Z=$89=\ɃStl _2TeYeo-<ˎ(E¿|CFp236ܧ$;zCA'mj"MCf` ;HiɱNy#@` FM#Gt]iB8y,}3pա>:{GEP38?Nָ FRcev)F^:/" yD6k 7DHI@HyٙCk i=#iR,=)>\7UOoB4mnxgCR#IX>A3(t_t鍙`X$@")cxHo4&&a9IY=c7Ks+DR?'N839p͏sB@r!2`. xUCZ@Fg:.ᔁv<8B3k!*5Go9Z\_ ~E8$5n'ʔm$]2b Kb`Qҭ -&y0 F\\j<]*> `T8dhNԊf7U4zjH(:\ p?unR\uȌdBb1 ֊!1ZJ$R=鬤썢&3:_HVӈBOOZ+N>bkfF9}'Yi>Œz5+>:>:m2=!cꎮB GiUŀ8cfźE>qt{73$5!p<,^E{J%pҙ Emo"Rd> }rFHLvӄ>)ES9෫J$mrc1Ρe*gL;wY[2pyU.'0vl>Gy. F&-ݠw86~Hcxawimj;3Nxmnq.GRj41/ D%;}צ۳i$;+e $ վ1̀)1w'x/U]'yn9}G' B5ٮb&IZU9S;td&B+0D|FjwN؎$qY?Ol\a0<*PTZXĢX¡9< Ih'է)N3xGh ORCr+ x c8f#qۻ{!~x\c#pM3v1 t]ݸҶjBHILNv 7u'-a {@\!XgDŽ4 : .d6x)u" eE3rEWa*pJѹ)oEXo͢3.7XnVf orO3b#p(Xݨi_#S ˡj&TpH)l3IC3T*hg~F2/>?1V8 5V1I-%F/f'C}( X/BMBKLE‡0I{dž=Z0%j ](UԊP|>\"@7BJ|$Ҡw_X9hLTx$kqӣP#?,ߦR?>10a"7^ܭ.2Vc{mCzAIx!qp|*ʰ[OYLuРaNMO)Ʃv#4MhDL\$ rC>|Njפ-ӵD_x+|>;;F,+FGeֹIxܑe#-t2-dZI'nUw2Gp+M{N(ŝܓI{i/Ja&o9.$jc yh?1ajNM y8㟫-R64dpYqe]_Xz];VN͓RǤY#@wL`0I7F#q;DCOl?}Nl?ʫigܧHS>p:GC. 1Pبܓ&XF?S'f}+yg䛝9 k}Lگ!iD1nZ])"]\Z ڗt!G'kҗ=UM\aGȺKgL-\ MzRջ{ m%񥄩L_ ydu(Ɩmq7kSh67K9cqkk+gSF1tlYmq-# W#ۉaf9 k{|({:GQn1Fp2r|B7#nzA y%(^ ǶLyҰb԰Ƣ9txH{ K*K-q6L,sڪFĠJw xQK@KdvaE'={Pb8ċi(e@f\ĻA8zE£6WaY(,'Z.n[#E9Y!Kr= E (U7^pxRk%7+ $ul\I{NHO/ UiR<2#UsesqK;0Y{rpBhFhJBq4VzJ T8Њ#캷BU_­m?}08@J8n:z|]٭./ 1WPHqkÏR<,`nq-fn&뙹ǭl9??\pƧuծK,oeDSɯlnns ;$ɎWN + [RATkVQwڟ̢_qf ''G`w<:_}W7}c^d&vrݮ5_:GLxWW\3Cꤶse_گvɬJzꜴ|X;pOW\ W76>MOW|MuMgUWh~6eTa2yfS fUfG,#7QOQ\z8u(s| =?Քm6DWŅ)3~$F0mѰ9jC2.Pi8z #uP#BvIY~M~;(MOt謈L7XSiK0iU= f "&Q7NFO(KPF8Fj4%h?HE jtn|uvNߞ4 Y8v*^eIA m4m(>.QɊx_֛gE~G=7GqکZ==5iUW8FK|*0U_׏ڪ z'NU8Q*TndJN뤾ۀ&uQ$y ګ" li~@nh8NhN[u^]ΡX3(BVVqԮ7lVY{G8a:3;lׂ޼&,X +vA8+;WuTyxY?ڭclMU/¶5ZXA]Q^Oi]02ܨ}h[Uc_^7pRB!džn,<]\.zPH"w^JW$nZ7!N:ePsdMe|GEPeN(ĭ{byu@1@\P911G&qФCU@0hZX' h%_@ݝ];\wD N;PBWs<ڙP{hl>ËVdjrɽ`q5F9[9š̢isW+hu,ک9MѻuLK2T>BJż`{h`f!Dhg(\RPVu>" ܽxtg^}ux^߉p[ }`!EU.b|]E CLB y' y*Hd).mǗ1J\ō.Y̐ 2=< ۛ+c8fՀ0F.!d[\vCZr9xyPɨ["%9@_FDW66@7y:$%)3MxAy<|>y<|>y<|>y<|>y<|>tX