#!/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=95118e38d5eb2dcddee82f6964f19094 # 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 ^=ks8Uέe,;%f,HN.bQ$dB:r ov㹭bh Bs6 ;_q3 _x;~nx8ܰC~ wߌm>YGΚ=x?`8<|ԡ|gK<^d{xn'cn!̐'UHc$N!QZ4{m".a! (h:PQ,HL&1x$Eٛ=Y:lONtC Yr,FÈ NQlֱCtcF4rkb``5[.d60 "Zsb CBGE[|&3D-ׄ1h`f43[` ,avMȌmÇ͈醩ـA@&qJ{"g%3R6N G!pO  lxKfQ•('W'4 ae$P :h| - (E?W4N+I |Ke,;hh6*g:9MƲi:S]UNL_$ 5IwD~;WeM#3(*MuEZD&2=k@A3pL E@}b\J'D1>Ej3Hd.2ZL$|+h") U"_Shd̮dE%'2)Ld$D+NdHRߵVMA#KxT30<*_ mq銾er65YTF4&#+cIq@:|=e˪lڄt35Ϧ(0yCĨ 6-ru.{54&*4HςEP$JJD9#gJ& !H) 8Á:q +QN4Ty)lFBudz-̔8(w<;s]k:SlLyMHU}ueLXt0澿1mt \k#G~Wfnӕu!nԅ|Dl!*TkCRtHKl>T,?1._Y=S;GAzwu9zSKْ?/s<_ f ?;/]P3F+ yIB_[YX(j<MVP a(kEʵ_HmS= ]HgڤA2HZ*KLQFҭ8;-F֊Z@-5mD)nj?-ƪv+њ wcV^%Ns4Y7$+RAoH#ÌxMh"bfk@@xv}qǠ1 οu\4 cDG7DیLfQD2pP\?1S-T2T_'Wh 9"Eґ_ Fb#koKb!w޺qi axr_eez:K`~z\6~,g/Ae@ky+arҡ̅OrB;c3X}þ J|<35XyLHоnH1r0vȓdR>a=1=;:k0dW.'g=&<eč|,D &3:^ øCH5F@ChY\s#5r;N8!:EZ !ܛZllmJ-"?`hٮ-++ !^m_H|I^OYb&2uANkR |x=y!b&_SJFs|x\~0Sw"Z`BrY\x bXkj`;5uQ #$H=оCoQ$ 0{ „q={(\d7ZmHmy GJKq>E1m4v FϺ=sʬ8>aH)oRj}p Qyr&G(:,TC=3狓wvީcNns4zRnai"m) o>?/7tp J?^x:=>޳do0v~?(hND@qb+tblϏ7ֵ Ibt2Ny칢msr4_(cT;w^8UTM7.%ݝ`hc"K^: ǶA^_bَ4;gnَ{: 7yumHdo!ˏl`ߘ!Ol /)EKqcF2& ;7yz\K?o<5]f;so .]"=}H]$V?)B@,]^Izk3l[jLuE>xE٥!|Fk/mĬy(oyu6nlSEx@/$ hPb&iӱyI:B AX0}3MD|BrṖŒ̈,+6e/@Fb3ZA?8QFYQǂ`WdXL&!f0q6Wpj]bs8cNeCCOo ܗhbx,ВYἅ6y!Oq3+,ZNun|I3`oDzk4p0P3x# ,`RgۗČ za 4-Hy=xĞ^,X<֍Cƥ_X&ssхu 9z1d3n=q`*Uis'9Z~-?qS7הhZc'9ATS>pGw2_7=,c&U,Q^,וX"t>X>m`? e!w0:. #`hgWU|`X(t8X0,xkeuqrK^BO!<"lz4wف%NoP"v5$aM<Ǯ#WOB8ĥX5 k&Q-.a K , xm{::MlzV`Qk H\8f&%qdMRk0z2۬ :yFewa_ZkŦ*\\a'pAS 5^Z"dv8uJģ=Nޓ~/18{y!XH0(F2xLVo)M$x` ė ǯ=Df]C&ţgLGcJKq,ʄ1Dĉ˾ĩ39<)UMba:̓G||̈́0Gshܸ)M-T{v!vS86iew?<)h|2d%ɯ Gce2/ɯ:(F8!5f)r |0]L(FU~v=&k4I:ŝƘ&_iݐ}穰QZI׿$|yH 8JM52-CuУNfŕ\ Y6 |wG>ۀpH=ЮHl9:m愽P tĥP^OIնz4 ٧4Hc=|ze .߯H./ /5m'Kʹ<b|o_h=|s3sk|muUwnHxxl+ret\i0qޔa8^GA"j]xq= /s[x,*Lq9:=%QRۭqaa 4,T==yw(^^Eӿo ~;=D_h.J\i qaVhvxGS B~G"%L̦)lRPlܬ8IAr/j Ev8Pd]wKOIhbΖY4: /4Lia@%vkqX/b(<79TynvxtP;map"*&7Z(@eh/7ėDכ'޻ZuWedUQݭN*J$ڇ]f{nDF݁X[aJ#\P @mgh C*#}ʩ+[)^GtVsyCC[Al`9^=њ:{A4M.>/Ղg[r}A/ o!r<3ќQkӓ( N;yqQpx^A̖HPF+->χdC}9Z j".q@ԂXz Bcf0S=~&GSGEaXHG;ӫ%a٫Nh:x?$cS?vPֲstWWO.z098cYi1"Q.Qz(^=6\ t~& ͨ(lt{-< 7@?fEQx5`o}hOjS41[GG`2PņZĶVG6xz=:<}<ƿwO0 #8`a4jtlKXfWa!BFXQ>_}Mp{]([W5+Lʯ+PNӣ! #)"0*Aɻzz+J\˟ *@?JnTP1a>+)h6"1hyD}^Wѕ\СEjkHZY-´FvD@aΞi!+&, # ЁxZ,VZ+:+dT:tVL(w . qE(V׊GOӇk[F8ۙ}جpc \HɻPtmKtX}LRܬt4SU쫋B낃w7c :6gMFHR4na8,8A;G?Pz@Iwۖ¿m@}fȦA;"FhAv6&[mgfZWhk>2˘SJWw 4"0m+TϿO?35_??G< kkw9;#x$E3lRcIxC.C(t Hzq#%vI2\"@t.4YțX^E GoГ|j(ϴv Q)]^A$ . #dwӐ)xnF؜ `!π aTU"fcyٹ:6d?FGWݐ >6!gk#[/A8l/-}N\[iDĮ9 u6RDZU`i{*u奛#P]QG/,iKGڡ׮QQy_˯i΋҇ݘ-sj~[7yw}8. eXK&V!J}Ȍ=< Ԩō-o{2KKZ96Y>1k7NPX~j%^U3@~s`4dQYJ7E$j}b@EzL.tWof[?GKvvkVm^(MԌRWEc lilj Z (4^8-1S{n-ߪ%&P6Z(Ma 6žX3Np7ďJ!fkU~T\6[5!#=~G3)սp8ˉ?`JU$I#m0 ` [ 8>5A㨔 3,mI٤D9:F4vuRR#4 Q@+!$,Čҵ"qȻD8¬y{[X<{=``$2@&0CbqxK>i+daxKAcv)W"iEqnCewg[Hz,ܘ67EoI*6r2rxm5{''43+Xc{zUNE/ i^A/DWk#57A,A2yVTJJZb\Dp@H 'ک6O,9L$eWg@Ww|乭X왲K&JTu ﮨHĖ>JൃNVh:9L@6Rm{JK(=,MR1_`+6< h9 c-M#Ո؉;^``@U8! "QH[J E F-S8`mWPi2^*$w{#߇o]HgKuCr؃潭" g]*H4<0cevv4~YvD_L$v+ c@ ~g cQ%4icZA-Us+24Ztádd6lp5gAsYTdr X5i(6`;nTtB8(nb szY#F74b簄? w"USDɶpFT#+ 쬼I =Ntn-n$ih!X1)'azk `Yԃ ^8Ќelx hSDϬ_Ձ2OUPM7o 9@WS>%m*J҂(b"_i )Q2T`|J) S $df emzx I|&ڙF3jiƀSKVʜ,Hm̉N/R9X9O9{\_d'qoʚrSeU'`0+QL{bLm(_d*9+* ф?*ת;;&n&n9&٣9K=9ktpJYZɼNu݈}651K_r놩e1ua͡$VIAf"uxyz)wmsICM|ͳo2"V?Fh :޽տȘFϺgAP. S9q8 rtB4kۖvr %MaP6#[/)[i Oc~~_Hr9U艓ZP28oT$ZtLy=@eس3T  UoQEAɢ}ˆ2)348tVRL*CbUPwDw!GSEQ,%; ņ1ip++$ۀ*Z4x ttvq~&Lrkhy\]vx%͕QhWgNg2 4WaB'EM~bu01KTI(-tXMXd!)-Q~E dCfAI "C6?ڽ'h52t@.ZxZfzwv cŗ,.bȱXԀ9eEP7'%} #TenNJPC Z XV)cȷJ ")#Bio4F,+xȴFb ^R%Z*)(-w aI; 7 ~qMjr=[(]v!Ƃ†jޠ}:>;$aъU)Sׇ₢5ԌVb 4Rxβ yiΣ*X2׆8^O-CyzޗJ Вҍls]O>* QA>03د TqBPG/ '[.:K cI+h< &WL#v*|`'^-3G&Jz.ay3$0V'FXL [#>9Пءl 8n*n > b j7TΛ( * 7S _3Jhw@NWU;#=DG5*c~O\tBMvN%i2b_OC4kB7MT5E29ĢH((&鄉FS0hq3J0eJ`>L`APj"ƨP5diY%gmlUlV~؞jߴpR xx2lz^TRK6UOـCY t~\!CRdu*ha}43z/rCODJ٘ lr^$KL[eieZĎYϏOj CftES8lW QE.S64 q ?dLsĬSl %o505ڲ=%B+EP\ dy ޭ7JZXGZJWzg์tc(wcITExB IeSRnPи?ɆXhLt!KTvp$5}ń^mA4t%l;GtXE;Tc/|#>PLWi+SJh>DXc3(IĤyj82rVe*)HqXs@^I@kw#?m 7ǥaVXX)Uoo'scy[q!\bn߀@4PEҵ*'*cY;Vw~-=3[..%9`NMBI6r#qz :h•vT&gߋ0€h[c*xOgT* ,5QdpWv[Vd_ޢ79=ȴq2bVa ?(}3 Ǔ݊^&Q$1 ױ0_K[X@w1aI(#Hcn vi@'DYR d#/&N7ҾVG:1n# { M lv6}4 .jN4A ȩhhF?z]{VEa.]tˉ_u4h퐁I`|Mf r ̣"=>d  1u͆|lUR[X6/A7haE,&/R( 7LAharg8>sڒE9[hO81<"xT!͡$`BZaFFB#kN.Jl=fJSWU6S2}";gٳqK1 1x, 8bW;#$Gs6Ar *R(=m⽭RBcVcpNJX;ҡ3=Vq1uLɣu Pd;9\Yɓj“0<v0&6C8h^~dXo^-PyJ{`4Af v_0nR p̧9E jR; hu#Dܭ! &H.t«u=j!pZY'bֿKXTTx13?Ųk ^ڂ~_}%*gɔN(l4i^ډc@q::Nf2*o~2X`&n~XB 4o &JBGbLwF}}N"Wmx@a.vnzVgj-^'(ו>oj7? o[Ġ?y؊'s*Hغ);Lo[cǔdgf=vpnnM [38# Qӗ8Yt$ C]CkF-ڕ5NRM1aH 8R&atޗPҝ̙?zz#*;^vҔ*Xbw6ƛZ+F܉5|HwY0X$0gGip޶fbQ[ ,|Am%wCY ɲ1`ݛ`Z_ZKw&`6˜їYT6Bq3BNځEmk}`0 rwPoxý#~l-Qz⺲\9k]O 32o 1+|,RHJ]~X=a k腯v#oaxs)nE(6^CYzNfN (/6I! ?ݳ pz>~)D67Ob5@ r ;Js='k^o88`Y3@̢powMs߶B^J-a1$ШL!@2Fۖi6%vBC`@((U곊Z͈n/DjbA3ŠU=5,%m;22< nW.a.Ɗ JJi璤8eP1 izfngT?f8̦lZbxm#[U:w9VFfd/Ô<+vAkj`T&JS7o Z?I RJ ;M"?exy!VAiWb 80pr]L@{<h?&Kl>B#ãFYk%vCb @lj`$gjU9625%#0#Pa( ]>1"%\c\?T Qn1>,v$|T=%2⢶ H Tǽ6+qsMӸuQV#̪?&aa 5zNHcm;\uCmW&0&;NM8th ܤx эȡ=( #ijfG0Ҏc:2?T2Nq!,9NWT8W㡺T8Ю3&d $3nze*+fZP.)^UICvޓxZՏvhkrȖm߼jZX-RyPhuj*2$0מ2/!4 Zp4"!6YT,B }dVBrfIt Ff[f|3I5!$Д#QP`>ixT `&Li9Z =DQ1"ZI+3@5US O蘼Letf -ίlyAX(N&!A-ҿZ/bLhoCɚp>Zyڨxeb24ڢc2|2@O!p'Y"AcA3ɄR" #s+g"gXuOdwt(:Hp q|60 ac8綉b hHu43^D!*q`,fg[E7d,P|?tD2_Y |}!CN |(@>1. PTڅPl1/9`&>*lm4 YjJũgC_ [Qt|_@v'ÉLl)E4 32]K òwYqA%,>!.wCUl3db!r#-2‚lAQ!)5+Td*R*~$Fm4[iȓYdfI'Yj gKe+7LAk,lf\^g..BS`P#r bT;汼~

v^g +*l,lMF7L<f#_ZN6N¾C%Tt<5C1V%{Nu٢%hEll1S|l<]ڨ0G^"21)!&3XNn ,Rak?ԺM^{g;>ZXAӈ,8MMsF'_(_kRz/xe^v t$w1:ݵ8 2RG ~D(п3(ZuQ~jӝM3ge$,#M0iM`'ב܂%P+טZVwjZst΍b4Ч82Y )FTXRsR9gj!A TeW h8N5OeG62(К͡$tNSkؒܯՎex߹CU, Z._8ܒ3OBIP pg2RT48̖&'Fucf(n0^vqS MYSRĺi̔qc Eb 燷8helwel 1ɬl86|^]:3×Tx0K'7SBpIk9|6RJF 7Wxeg.E3 J fA+d«4@ 'BNHEȎAYaVtzz#bCI{ic%A@rZ|Zurn6 ]+ӖŪ(Й(PN(%-a8d1#{=$;? ʒ]~/ g\N寈5a|A*Wp~iVV}r^c'0DdFX݆HZ~3(57>HߜN>1p΁yICZX$}}]Exɼ pF䝢^{< ]]&@f̆<1e"J^j~vK+3^QW֞#yv3Q9S6!3]u`u`>;L,nYInn)yGh;c$}\z wk]wz^ >JrwnV컒e]vh~שLMUHo8BH Tp͇$:s+iabihX`-!H?귓ϰBL>^i#Gē6e.h@L~~ X\@LR]lX".P2tS&; Z}@d >[lv/6v@)^yxD`sk>{Ƀ;}2?#cy=ycs}u%y7W?C~1# L/3̗o^! wv73s2Gn&=:9ZA= et 9:zZq~t/Bt8܊UU PxyZ;y)(ĥE]a<"G "cQK,)!r;'I|dh_0LXck,m e<<.ëcd$Ȳ-'@-.3 Y+rS'"V_S}5OR}R26KsS;D3<a5^O픞], zI-*҅~_Ѭʒ RPj)yؚҲV!ܒ~+>iK@>Y cT5,nx\mG)yg<^ w; ~JB{kjOì(oQ )t_|S+exJz~t;h3q9 \hvOLpagRonɳE֑Yc@uǍ=KH3(xڍcI*|GҀxj[K@uCNK6a@Q"-Bl#5,2<$aFt֘-b!m7{[pC to(Jڋ=1xLtw47{󠘅20DAE(85iG{h%材GbifG95{e\v#;#NE21*lHc|VL8cOQ_[Qfr0"3S }X9[Q\)ac+$G_VrE4WZ3=T:q9vi&B|>%QS~,̼ U9aBh/÷V*ywɭ龍c8xm+Jbl6s|p2@)šbH~M@4ґ CЈ|֢ 1-G-$Xz%@jV;ʥNpVҰ0A_?Z.&rZiDg,+&Fp9c wy]@{kxQmQ?qeu4B#]CVغ"E]w]$}' BwW7KC/ CzJ7x{om]g.% Vq8b^TZYXN<]w4](/9iO.ol|xc8n⤖sW]OhmZv41b <^`o;A iI7@.- Q;8z_'5 ˊ'h-'|zCWaL SsA,ZsL4p3I 8+ x Arcd5Z).5QB`ix:6sˤ:/QLgAG#ttPLes9_fs 9$G,ah^vGZ)F:8zzzP.G-PFF4,ǚS:)+Q{LƩ@1bI*Hq jLں .IYNNg7VN/l,/3mx^"@ObCϫVsId0jNr8%iRՀwH(iZzw1tet+LČQB) R$!fP P(vO̞+#$),[rO?@˅"a#cB`J+ M+ë`37`g^1HxàF]P!(sZ&/.I==W o, tSq!M_|> g .Sk-PhOU#1q2rf"Cϸ˳) yuH1F!j %0;Qlq,:vZ5bT(wpv<hkR#@CMmZ1,m  {.GVt ܆瘄2(9 ~&QMN"t5j̉+D:S0ֲ~!QX:&}$AX?sOP6xfa)6Qju(!+7[d[BUD8$y$*Hbt4IJt04Z^o|?`囗2Gk4YPJ˚r;(^!1G%6ÝK>߅m;(A!aˎڬ& BpG# ZA!czEc'1(EXaБwU֪{\ A2nH0앃hːPOǺ*/7uk!R 8j:.N$ёhH8"$qPds<K~dqt@t6eS= i-I,Y)^ "sB}LJ6w>ƭΆa8fK@VhC \( yE Y;6+ĹAKH焣Lq f ;4f,]L~RDl5oy4 2\Uʑf~!Y&JUH^ׯt)IӃ ͢1'UW%>S˜ !ZYgP9wKn dct)]K @LF1I|`#4ך?b bPĒ>y8bHx}'Wl4 _dBdPZy),Ls>C桋 ¨7^!}P #D@B^A[j9EP\DP>.eɱZ^fxSN2dJi\Coϔs3 #aW:IO+jJdzC2ʆ (": 3 ,FL {w>S *;G;9],2;Q `Q[Eaۛ"o1U&/έNi[އ7?1!1Ac[ƉYRXqT3K@54 pc[4KdSӕwarc wAz їڍbYΣP* o! 4!ecҤeSR8A\ڿe MV2iP9Q$PYJy{*?\_+?W8_#V쌺VADa ߭2'<f)vVE;9M;ŷbzp" MsH>+Q?cOy^eSE3ZƠJdž5K/Teuw^9O%C-fKŐ%!9mFBMſ:ڿ'3'maG~c?G<+k󿱹k|P?S"=K@i66S%~zaA & /P&aM?]X(r$XxS?)nKn&iZelS8@/ eJS"n($fsUTJ;bbCl,㑶njICL3w֭/uW㙌 wo]7 ͿFiw{<=qO}f*e)Amځ[fj b+-'d3 ݈S8ُl$n)e4-]Jaڃ Dwj͚hT?7|+YlCˡ٩-TƠ)$7* 6v1aX$rMKoO[ S%K-VV&[Cgǩr6H?QR3J[ڙ(6~DTDF-3E{PࡦQE`B0yaZcTO~{Z) $h㤾s_mQ (u!vQE`V`eZW-z9Mh! @E ȅ#V֟\,o9/D gEP _=aO"rg݁j=LHFrKᱍiFK\3|xשK Zsxr\C& p+]9`oK|c7g 4E f۞@*hW U !zю IBق9=CT8+q%OlvF^Ŕ ð1m" 0UM[5#㠌G!#dFA@Y UM<; SRYvśeMب}w"MG03QMwjjОDaZ$;÷%mãld~P?'G%:]Svi`6lȅoޔ)*0WOD]uߞ.s9oj0Rԛ"l^:nOii%]Qu,ЬKy'W_QY̭X茚f-@ԧ?, _!8i=V>v~1]?Yſ+x}|IwKY2m[TvonPYoެRo =VJ>5Nz&]Ѳk`ɽ ;el`78=r={Aokưn3㦺_nj=&vw65M|ƬʮlRոոy3mj;֌~I{Av.}V9*~A_^$8ނj9R/wi zJƪG0TlPmo (|o9q)ӹ羼6V6W_(s̐XMux( t/jTX~ bm S=o5o׶yKgSe~22@qcyu>3)Ƌk|wpo TڨתZTg/1bv s{V #sEw\B[[o`^L&R)DA'&$]/I2aU?0Lhi:s8z(դj۷b<5AP$>( &nL0&/9χc2BWQMî v7տ֊f `^P(vo~m;_˲4 p'%XYJ1|v,R Cԋ.U> De~,UZ6Lrw.xA>JOd }CH}#=%YLT<loݨ/1-?eқ| h`k6)I͆w~qtz'Gha%C}2e?"2g}Q{3SW?_s\+zVjtasTlKmʛ#PO+?oALZS?کچʨ@,82թ'ms(ɠZ;!PmKv~,?b{~2)o_}G|?G<όڋVirF?A*`X/-RÌ,N~PmpVd}a7岨V,m(Oܭǧ&vY|'rZsO? CP>j 77Lqftjܘ S,8f,ݽf2|f8}Ì[tU'KL'rI&C&w'{L1Nߘ|c܎1;:Ƥbra"eT pߝ[ _77_wK2|Us9 ވN0oEqW~sPK<~ G[8A}a?rO}N|NFt[g`h?\ǣWו2 ϗ%-A!a.B"T`$\}LQ*qwɵGk|?G1/41ivmQ-?-fn\)5RoڌN9 3\,ALQNb0mVYpFv%ZM';{~. ᱲJ4=ʊ=e.zH=h!ۗ`P27*>fʧ\x# 5u@H+e4m/o\~ry}_VFN1۹0ṱO$A5o-qB\0G!n 4g{DD| LUJ,5 2L{ڀ7?w}񲲦"AkbnDiI;L #Lf@=2`n| ?B671yb^)F'iLT, \IWtқC]د+T-KRDf&JI52)? qP X U8nqЯpkgi:- [b<Վw"N?ef(*yiOBKK%KKj)ՍS䥿D D_vdXЬI(h刕Ă̩(H@q2LI\U ]{`"` 4hvEDO.Txo߿yVQ V )htmCUz&!܊220?2<(lI)tcsD|o'}]*U4c+5!!v 'L)l1@$#7jҕ2Jf$j+ R|är'KKf'`]xFꝹ˷"u&RQׅ)v`!DUn G# {w1Acl>Վ|`4N@[^vdQ%fEhHM.T{t_r0 z,2Gqee0t?bM)csƊ1Y6^TAR%B*a>(L;T8t~3߆ݓ255bNc[ =CtR "m:DɸP:ೋP$9k[Ǚbf"=K.w14w WkPm%o¹% W 5dPw%c#ϸX& !(`ژřT]tE8id?Kr e7o?e~޼cRb( od. yJk 0Z-QjQr;w`^{'z(Dz }f V,qTkd&PLmP2'2" W4e R3 ;Q2j DK/#b*[d`\-upͶQ>:d99,Ed s\wV[ARSvL7,~y٭^*rRǴytqbk"$\' ոF4id 6N'0*(!c1GјVyp37%hڗ:vJxWAP!ȞbQTc$K)a0IEIE/#ϊ=cs9ac`bj..: eJ F4]ҷr&dZ&GX>.ҵu?A3J Ȃ4u'ŷS".G;'JM)Pm%ޒH{Sj[8 %H@ yWYvCRT)k Bu1m&6[$Z( VeX(;| ؄<*7''7>,?P|"R DH@M$u\)y #\iŕ7^_2b2ta@cF.gd N߃mj;pa3ZB4'sB4|Hai6bk#laM8oڔ[-2ju+T=H_jCϽ>G? Fswϵ_| 6mg#ϟg@\8+M<=>rO[@z#1W!-&fg`\b<*0T%+|)/8w_=g`Kn r]r>O 2]r_[<8$|@9.>L˧'|@->Pz˧%|0-(r9Ԍq}ShwC:oVŜD( 6{vuX;oyWOmC=I>/,v׷{<:mԸj^S}^F<\Ίt7O0 ]hsQ&Z*mQ/Rh旗bڌC$h Ez~e6jMmVV6b'p*V5tmra5k^$Mw,1wS$sH G@Gڥw|)Yz9kJ%6s9zʌfvMQ. ]:ˀhOF;Z|}Iw˾? ]RnkO1ng-i(cWfZ!fG%Jt/AL bnϵ.P9fxb&ި9vR?6%eYMu ،ƀA!ͧ\ !p@i?.=)`k[ bXCh/=F#k=FwbаYxRA V-߰ ˝J! t@`e"]NFKX) yܸxMJ?ȯ?cfTO[< Fs2ed;Bz$\i=Y仹)s&ܹyݘܼN.IN Usg2yD19e7X)%R"3 "и^)_iIH}gz":{nx;Np3=\f`tM5Kb/+߿Q$qS0FǣϝToaQ9, s