#!/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=7946f6a65b58f74c61cb9f9f6a217e44 # 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 v^k;-hڇl{KSi:m5ڭ+PQ?Z)W'Y&>}<ܬDGƋuC.bVVY obFsFUA|`qQF&w=Gt \c^DfL<>z1 Y7fDƜ^ss&^81Ï^pfaz8IkY,X;+u)Ƃ0f`>C4]o) :Qc#@0]s/@TaA7uہnyQٹ|j}=Ի6ʔuAbx5tDZ YO.A'552mc[ga4n[?"-YiF |l=c`9pP~ >5#5(0ٌ>4!bCṉ%i 4׵`@Re~7.AW!ykXzͰ ` @uLrgPF\eezo d^!X2R]J)\\H)fŁ@n̽rͮ> 7i>8luMcd[c5\6X@2쫟Z R=W1 HqEg̅)ՃV6WSŸ_\vY7JrIݱR: ;hl+rzHؔsvRm?;t봚oq::V:n_6zʥ\>~r|Gx;Tr粀J_v9kgGύ-+Klu JX|!Ϗ͓-羊՜>w=^i?;~|%Fzߛ@ Xrԯ:a_A߯:AeJJU:VsG=3^xs6k#cYדĺ\_c0QGV?p8{*R)C9~\*R.~(Ak˜vv'HZ{O:r jDgT ϹYĝWz=J͝h%A~ډ x?:Xpg{'N|aMZ^%DΒ"Xl ʨJwA-Lg ĜGIV7k6؝0h\*UZúi I&p8u7EsTemR[V4{ӄyo>UONYڿ+[`J$(C#KدZ=r]nCN;\4ӬNj(\.TEfϐ0K)`RMy`[qZ>'ڇTzUMwO@WN6#gnT:ט(Y|S 089{U`7lw0vwBPq:tZ[t ә{)jA*m)Xp*E ,#f8n긺&t>!^Fu裥JK qB'ۄ-sbh+ͺ:,㬄^:>iB3{҄V6A҄v6"6yv⫦v\?Wwus7~[}fz8V |iMpŜ6g $G̾/ߚE]|g<^{w=PmEHk;t{ ʹN5.A*op>R"O~ucJ%7CT;zn˖NGqM Bʶ0>2һx!QԋQlךsRJM LlLO$]T8M9Nzt󰠡ӳ 40vÏAѹp S@Ƿ^ª^!щ Og}pV-qlXZה߅"ZO}!+-v1iOc X:wTuj1ӏhltZRsZbfMlKL5 NkLk ݵ q~ÓVLJ[fs=ckbѶ,=1KZ ,B9v'j6,8n`Yɤ /.GI%: WҢqU+Qp4DF&~>Bx\ d@?6 /$r2#D-J_IO@N+]9JF0SހE{dW:ar92rJMXpjv܉P+NO˽Дu{kmR"Nr) I j~>DßQ/^5 C[8,Zu~Gd>#r|D63Hpp&’X`PXjCo"87'.4klY@ F%/! *?ucSIAf?`aZ@liJRҤfeo#1g/5u|,d5قv~jy/m.|2JU6Fk66 7 @ H0XXvK>tCSO;opxJWD[i+mU5x.i t&0"@ *B8[<] 诳@$g!$'CVyL L?]㞨"S+kJ,#ZWZSƢǒ~D͑ۅSr{4lVu|8{١zJ#[NX;l`v ˗ wD$`*.(Y Ohȝ"è"om`;X[ցp[["Rnp uIͽ 6BC_boȶN'xȺ '|ǺMs쵔Щؒ;Y~Ɏ@ŞI #ae䈷b^fr]_L1:h qP޷[`϶9ԋSKe ;8s^{֩>eZ@|}F&|M9L__\Mk9'lN"`MGt>V'J5/|DL:(Y1Ln} 6F%<{@e@[ȣѮSr6)vp'xܖJEWJŵWM3[&#yxR'i^{MOXG`q*A4I]8+Mkl%=\'d.O::0a0v[THj^d|'"p’ng7"p \>H{K/NO#YqV wO#E?QU6=-?Tn,a[zmC %&iogwg(w$w"2"3!ػ]"wXڪ-)%əu:t-к!Һȫtn̾NGU+X,e7k2{%|$FI)$"%b\i40ԍB_"iI9E05$AnvG͡n6:9y}#}LtY6|=^s YUF>U,ȺN #6ł83[3NhE5 -p&&z.V8U^\3FYaku^??=V0sS8i1+I Ar5 B[Q?DZLK`qx6RjX]-ƽy)di`x3ra :y}ze-"ͅ'oɻ__-Y#Fٴu7'># ҡ̯kf~YlLKmDoĝU$' Li5N XnEY| g˷rcow5_iToW`N}]Ǻ|zWG{&j*mv[(fO }U !8,<ՕX|CPYf+s).`Lt1g!]@,^CQR½בsX,mGײOo){طr.Rj#j}t]  N&%ړP Ց]x=cyK=Xثm7r jGez r20h9d9X Dzƕ1=ca.U !; )JIrL m ?!91gcbzI_3&_B 3z}_vք5ލ,sԷ'mɔ[r7[ ֹʪhȈ9Ndx eW@h:)'K_?R(81e=WϖmP.k~2*5o)' vQ{fDzB.dXV!_L#J >dtqXDk"ʼ{ 5zm8Ǵ-s',^B(2ڲd=] @Pcƀ/TT&$]]QfjvX>]0kyyr4E"NLDJ*D+2!ѻaE _sJ.Iq]K˗7@1ҏ2`Q:@j [w=-$B_^a)Iw`Ujm܉[sR;g6}o#c5o'ޭv*z^ngk ;Sy#`ܟx4#7YĢl^usFYoQh|Jjz{YZŝww`JPਸ㋋H5 `ǿӃj,JcRzj'\Lml!a`լ߁iN2jKkj )4_P}!>U,\}'znbj\r }':t`޼>lT?گSU|@\B^}B9ɇX8>?YO p;urKqfp# ȓ)k1aa8Nv^wz, `a8Hplk;׏$-11<GasF'&mδ K#=P녋SMf3~ZŅP%.:?!C ]zy9a? 4fp{0vmqaA=V;caheJoUU>vi T&qY]:t(րb=jD G&:.pgJ1Pч%pi/U, t6Jf$FD+o: y, R{s*69ɦGDήfY}@t~v0lQy\a$`PNN('b3ոP&h\Pm+![pVe:Vee='5-M3̜l|c {8BA㏃GԺ2%\ @ m||!O)zU:`Z̭BF1TooiKk߫O~am's'6*nAM]= v,,7,g]ZM~üFgiޏ.5pV<;L y}9ֽB7IMڝѴ},ޢp-q]ϊ-7zyĨțs>^V. 1#;wr C[nnޢ᢬Ҁ҈Ґ˜JEJI1T81ۋ)[b0 .51B$uр_C:d3t+3Gg Z(d%(VBGՒAwpL3wClsl:ع|ރ !ٻ\zŷ1H pIduym-|=(tÑ_Ov+AWuM-r$e=g(!Q Qzv#`Xvׄ6 8h`e!ۇ(.ȝ=*am4jQfJ3 BرBFQCD͘z8Sr+j L<o/GUIwD\)Y2KT<@%'3=y&$Lf_\-q/]&Ѡ)rU zӫ(Qfk'-N]? keMr2m>#@Y{drԊ[@~HNCƕiB„.~_;ge$ey nK{fRj%鵪+PUSjPÓ: qhRvK fiOʫ_[L&-WFf~tY$$ߝ^RCsmkWYw>lG;9)DžBSnjB'"&[_7,h&ϝON6L)SQg&{zUv[!gfpx2 .`wx5@]+ڥ؎`PˊN;|+v9m/{1'niuº5Ze%=Z٪ū 6O}}DåжPq5޲0߮- $Y N/ e8nޤT 2 7Ψh:0nיpPi2 cL0Ƿv]W2WlY~}D_/рߤ]$ɀYSKV)\pl9MώMB/6~]Tq _.?ly8[,<]^Y/dg_3[vr v>"e鳲T?DvTԁh{(?sdUO&l϶}8j?/_:xoW0B>@r\`Us\~^&Lqn3WRS 2w U OgmoX\؋%1ϵe9xe3eE:k/h6F5G|IYľ8s9g݂Csqamt2nL%gq(s0Gm tfRB̫K4y>G+"Hjoel#r| bg^?JB?8J:6tue#0E+Jzjh/Xeb)#:fcfetVϜ_4pGO6W< Jԏ8[8j*s yK%Jdb%PiɨBah`mƲc/ʻT!ND2fHAoX !&ܳ|W.ϡOiX Ii Agt] v8v<#`Hz̎8=4g-\ga.^BC!N ˅_Zw/(8s[ii?M`턨K\'M<9iNBn '6z :36>ӣyZtS] ĭ8}?g$ݬAm8P8s<;|?w'P$11؅WRq-K4*YX {×rv*dF|xu=18zŹ7^KPI̳obC;!ݰ&xΩ˷AS9>öWj[\ed^}܍81>9kW[&4֙fu hqӜN0sYD4Ȓǃ&1Jo `7c`Ȝr#9ğPWi*:;M>KKZdǎu!($!Fp XXrSu 䙲뛉 E; 'Xqoȕ{z-`g}-6臆*zq4qQ呢 8d{bA>Hj51=һF~W$1ĩWiڃ$IS]± $'!V 907<tsCT#x>gQ3)|[Y?tL4,Ab;E13DLf.;J\[)wW/`fIC-I(+P/W kᡌD8(oH MLzIA鏫z QJ Z`n\ W[5&H\?@rTI "c*@U{El$$/v6d8A|)W 'DcEf6_9zj@1Q/\$p;5RBu(f!'4px1^0NKDVU-{_ 8qvК wԋeڰ^7V>%~:Z|Q:idXHsaI֙lJ,0D둅qiAɹmVKظURɥ$J|F6"yp<[a% 5t`N%o"mGmPmꨛxN.䳢:0jhM{̥hw6Ω%PՊ6K.%QQdj+/{my@/m| D' \; p} DcrL_,8[zFE GJZjBpThs&>Sl11(gP0y) 'xSbFYu?Ǐ*ق$lYG? 7oYX ,Ѕ/K5`"CYT*[YzltS hN!8Zj5c[.H)bM5I < AtP{茽6a{ u6F'jsJx.\z`C`} 'ZU#X@no %j'![yK0[·zfS?qDR<B]8XɏrKbm>鈹TǏj-N6F,ػ.+Oy'_g[-„ƅb(m3GCS?.E:BP9ttM&x_mcjk+[ Mzk==7^Y[_?ݸ&;ˤkr5}MF^n }{2`|AhU(<8hFr E Pt  Y@ U `% $VpX[)~rNɿoA1XI8Dlty\b, uBk$QXZN : Ђi$^ٺa>-l3p *?տsFOQ'oI4$'R"O ^V`vka6/K U-%((y{)+,ֆJJuTk" =ehs )=@w"| Gu-f~Vr%7EIeCan #NP@ZR:%$蔕;/ aeyK*y#3a4ځpy;j%4iwF6P"^ί:>Ьjz l4(9EVP0szlũQ`+])AJݖ[9^?E0:;zk? ^,wb?p4/;P1%CI3o2Sx!5H; ̮xOeo# 8Ax.c j^ .-Ur4СΒaF2cj~QS_mys/^Etq兪\OBdRNC_N 8I勘zڻʿ.W.J,`_}FC0%n],/! KJFj4FmmMciDVnk,ډjq+Xo^g(*ɳ~a:΢_l&\*xWdWdܹ*Y+.b5J'j=zOpltF% u6Sf:ҍB:Eb6δ1{!O>:QLLu>X! 1:Slrأf" 1l8=>3c0܃BpL|yk>{Tѫu8+X F!wK͖(JW0ADnljrߞjؕٽe)RfRQgötj3EL Z[;Vo2Iu$Aۛn' f}AFS:;sɗ$IUH*NľCi#g%!4L$,:zmbJaT \^ MRq!y#\mg' hθ]k0|qVLiypL*WǍݝ7bƷP=YI6ɇbNGϺ6Aڏ2 -/4E3pb%q)7^^q$bKi1SO* B1INV 6NAE6LS7->s6{}Y݆[!O,/WNYV 3 JH mKPoʹTk=y Āw8&"9).1AĦZJ` uAE.lpP>c#ΦtAϙ|@g DYnr,"51:I+a?hɔcq򅢈 Z׻QY?zWOM[Z r g5{r$ÉɇZ zqrzb_޾3KZһ48`r2,)&%taELY-pcyTr{6T7dOf/3l03PpqQԧkEKN:Ǟq0{'Stb,U۱&37S }'G_2buMtNJ|+T+8_L~ucU? ;L%eL & ;;J*d2^ZDI3+AĵfxP&EYwŕrR/Ryw\n3bxhAءhb8f6nTTOt:!^8|aA8b$Q\rH%l#7_Rdۅv] ]sQH{1{dJrfi3=nu 5pHi@@f҄|Y&g?0j[ %q23}2I5PDhOe ˢtM nn@G%YJ,W֘Is^,rnlmc/>9oFi#xtɏ7c %7l@4|mǴmQw{-b6oE~Nƭ4AfFC<+𐵮Qs ,Zahϰ 9No/ 6瓀{AƼU*igv'[#"D5 ="N`OtR C<9Nq6:!\/)&eARx%[n2|`} B!@Ǣ~[:ˀ.)JPNa̻7U1΀/jq L((dqvʰl;kv3 {Bs#8KL3YzoxgeSYċKPOc0:nE ލ4"߅*Xn2el@Ip ! #HcD;A9I1aleɦ'*OP`Hn$ylzy|\,mitM2y-3pF/"ROGs`[ә8r?:aasvJ:ZwVUoq!yYc^&e1C-ApЙk& ਓE(%?gI}%8EtJ@y8g1\{$UqFmH4- #-iMP Qejp?S: NX2d: 6hÂ᭒u=|0ow9%^<&s ϣɐtq?K:svIVjH I޶NYAdDܚh}57„ɠp:׉_H?W`0g~0^Y+$Y- V:U%;9&K^DQ~RnZCȭ|4:?-aj&{>eL IVPT~ 04{ۣ4wz+.boچX?.ίcQgHA1d rWc4[c쯥a^Ea6cnKFAU "#zIhR<ߋD"<S)>zYюx6$ -]nz]IYIKL%9;GGEx:`QxONeIv&AԝeXhYmSon7,OE M7}Wt`unu$7 )}${.XsJE'd>uDMe;hi$ٲ3 ZzaAzCrR 8w ]\Gs۱V40wk.dze0_x M!alvc@ f96fq @P(4P7jen~|N⇤z c,@QXaA H{&3P|qڻDY% ۨb*A"֨Q$pik8葸*4W}`ƉHH"ㅟGN$3OQAӇ^xWL{׭IVKI@,^֎߶[?YIa)ՋjJT2ڗdJnL;!1j CóI/zAaȌ%g:|9r~:ds848ϣ cAAge5ĤQ@ ؁sߑ9Nik/7N>U౺@0FzۙE-?H-qJDB[+Lm6_@{5vxtٯ~N]*Xl:nի pȞ'"ӥp47ږ%r{p&ju$dn,JoE7\z)չNӮ!k>=_1y4Йi4ELiS?YQf#>~ە:>LLΰdF|iA7:&'USyi'̉4$Y`;|uܤA@~e*Rf9I_8fO%o´Z6`HSwo9,yo!9s5 7Ehev삸D|37A! *V7VzsS<){o?Co|*~BlY76w#_$.4?_F:0Ox.N})[GƁXWhc`]}TzRR W||f;\E'I t3Ԁ̾hod`3B dHu2j $#: MOgDri`URwbST< /#&ѐ'`$Rr0z)9'*dhL8i"<(ENt C #`m! %<{@ah&/WeRb:fؙHXp"# [2Xf{izCxAtIN%xfW_3e7e~Ӫ^HY`zCg:eTi^k#x`]zJ3)i/7o`WTݡC&{rѺi(m*2=(sl!;@W-*/Fj|;S+SS>Kݠs۩  KCe05 >b}J}Rv[&X xd?0k4d3a_q,1D7%Ssw*O`[1l*˸_4ǡE*΃UJu"psBJ9 man<3qP=y>mpe0@Ix{\= nR| V|XXHdzO-Dbg\J"̦)9q܃uqc\ lɖnU}^}IE&Ӂɘ`wm)y|M~p&" d]'9*Z9`0,I'eaZm:矜?K |88loc!a(~ tE.ȅYUj?@zK0uy؇^!0BlCX}J/T]BH]8$^5v5 7tf_X|-CKm|lqEG/,Sڣp8$Ǥl99|%7h!Mv>m9Ac6&tgkv芜/u£JXz橤Y4,Ǖ +ɯ3jno04*́`tړԌd e9SYJqڹy."$+F< l3#藭͆l #'gq]ayHQȻ3EodX35Ra#\U{hàIބ'Wmځ{tPac|n94" 29OdAD!+]vgX` .cPdZ $EkIsG`ŪYee_,>ηҒY:h7kɪwvaUأfH:܋Op9.v+!D^гނeܽqW$egOcZtcTi&؅ar&&Y6|,M7PLMȂA)QK* 6 ilÒZDo1d~d v RqiF@=,lG Ҕp(xRKa,iHtu^ό6[{Zgo.:D̕õax#pآ$bKe]7?`f~sc^o<׻nKzr$,B{73 @G KW9Yqy ~Kwݑ$i;ir|vUL F n;'29tIL9va<&\')@{v3Avs.瞏i{Rځ~J$~]\Í}{);5v#S}Fj®#GB.Ma\Ƈe ޽D ):&bȍ~XYu o6fx)C8U爌*'TW1c)%ͥnY.#:-M^3ڮM6:Si1qb?`SE=l NSq6 jtiu`Zd|*_z> #INͺ: A}-o$g#M5[t KD/&F,V:bAeOxڷj ,"I"]D&EOqJGdv^iG=RVhGH;$Y'RzF{>!&CIq ̆ T*rT -%tT| =(k-WU\U\5 #泼 s|H:_q#+ha]Cv_JkKLzxL5 ͬ<c|(ZN+ 2`WzEdϜ~pY&GKL uf/oC BD4YNsvWn)_PsVԓ%ePa~,)ǚ 4$:9ʾ>S3bѡ>lzTp2Fs ebC6qdz Pβڊ< -gsqHJHTdzVWwސl[sjQ*l6Eq՛:~a%k+exªDW,Rr+j#w&ta)=tmUUY'O@呎LfAjGG_(J.F%wMFX;eeةԫԭD,`Ь\ɅelWb[ I9EA:xx1dK4o/_d />hnnlE>$QѱV_U?/\Q|_T;vWgz1m LPqq?bG,I^bMsL)f֜OO-=fr7^U7r"9Ԝ#xѨu! S)HްۑPJV}`N/V>YrI'f0?J$~Q+Gz:j"=R‡WӶ`Յ8Vac,I/nHIo}Vuf6nSa>2H^/7Hr%pioCpW͛RO7福֯z5۸듕{os]^4[|U(mtKBe NOz>8U`|{2cĢ >K?V=uJt01CE_I-GG/R~tanVl8e0W2jıqaacuS읠#Pd[.cndm:U/j˥ J+U{ Xqo3/+vKz>ĿVUcpD; `0OzbbH] {f''-Y:#=CDZy %={>-Tl*&mc[h:~ΡP mPtþI1#]i}磪\{QJh",ߤX[FHgޙe6l7{qE?K3nvҍf:Dc,DP%+$.QULdFxQ˦e6! 7Mu'|p4&SfL3jm2 -lx'7xt1B% 㕶,`YK1.ww04%ִiЯ;m~Ẁ"O0=xloV֞>^s /=]I{[|ei/I:5ذ,p׍V;۵CCVƶR]_YtngV7{E@_;o}>7p?>绻\C/rZn֬ʥB!:{epF^ ʵzHQvHI~HQc(] WO;#,Hxb|jJ8qidw Gd9"ዺ8)ee׸Qk c{=_y.,L>[]uTkoޭiBִF3 dɭN5*l',/ #3{G &f0B;Sd._7hIcm]/M`ىk;>puhCj g@wfnjq `IkX_֪̓+,8?ѥԸQU"@;gd{ֶF%KEҢֿ)J:Bな|pW/wy7$UT;:tΌXUW;.NҧS{^,Wq|6os?Co}naOOP/V}okkqЋ;e@G/&gc0h}!#X~stp|HnV 3k^ VuYEnj*O^SP0߽IJ6bC?W?Fr|o&O_۫XЏ\%ִWǍݖ߶Ni~=خَhtIVČ0DԎ[fxƋT{[EH)T~l߹B3+w N&_7x7rw#zs$+?Ɛd{VY] 8!:P]UD3. ZCvB4l՝r œ59UWuAlRQcrTQœqdjB)LUMƽ: Fv`h "6 !.^FZ.FxЛg?i*PLF~tl1!(`f&G0"]@"옥F2_P&8ahSVƬIНuCavsrkKÀ  q2ْ5 uAT kU/( ] I}\5BCX]4'Ahp؅BЙA4!4O &B`Z)Ot wwҐTL~t6yvTWN}GE/G7o[㪶I 8gxXk›H_Tãz6n*{h7FYV AK6-(:(kګmWFFkz a>ޭÃfi4%cN&m~K5'eUhv  s=-a}pjG \gP~T;=Sٓ}|T߃ 0tl5ZǭzspCSݬklכjIuܬVC0YMīf GGLJ=L Pa~Jqh˅o'fSЄnYŰm5F_xS߮cofjG&hpk&Lk?=[.JkUynKaXfCv M[WUKfvr(\0Y̡Tє¹ P kxP 3!4!|oWpBe<$f|AD654Y- ވתOW5׬5dh]MPϣQh2S"z`~7Zoqx%$ifzzQ6cfku!}ԡ7t<͐)1 w_?K())qvB"QWp0$x]̏C~& ţRռbJH,և.>V-?wtIUHՙ4-A= Z('fA L̡RnlU,لH cU3LOH*IuelaPgwLۧZ (tް I5x(um0\>|?9-x u1I,~*]XyڊP o cOyNm6iS~XD6薪J Gw,~+"϶Bٍ*?mZ 6-!w0A7~2SW)!3M($xNtAZh` fXGq]K`v֟-={| и{Z*σ!tk7:fwߩwhdN5XY=iG(:‡lIl/ZNٞU]6@:\7'kZ-&J;nvA(}!>(flV`u֡׽+EV>zV]5E֤1nnڴi+N@@m*_v!p.f!k樢p;xh+~'_K/ JkG)DFHwac}\dO|KӴ'1p_ǓpP0KH="00D-gR]nԇITwsᤣMbjQؿR"4 P)H B3Q~N~):=d"{ $kI9UB5Btw<XJ=H{%w1Rj*`( gH-iH]=h _23I$cctB (jkEv'&' WǏ_aZ> }}WSJ7u)c|VկFQLaxw)kf>0;}IRaXH@j g5ǤpQ5̨6*FΛYok-k֫6tpΐq '~LQ^{W[4lemYЉHE.'iTQ|Wu nt1[huKX\Hs:Qx֜VEPa2=x+j׫!=ظ7ol8AW8a<B UtH\U{#`֋ftd:Lm5N_LX'ޢ7j]SE=%mWMQn"ρC 2k +!\h3Rv=~; lmyU7>Ɔu20II4H5۫૧3P6Tbzw'}ȠWSX%s*9+':heK3jl$NJ7DkMDfbݍ&7;87V0¶H&|36A.ȫy.]I4A4/8a 'K= \zv:ˉ6c2ut4Z`>OUlPzhMz34")4%(T9So([k0Zuꓯ;`YR"#bgkl4OXhqw*&`^-q"?B",2N4Ä-.pJM;TXgIͨ">+e?`~El7?_ )aÊUAvb']n[)ehZǵD߫]]+ ϱl@bv< \IMwel͸rB < *<@ʿM3 }U;a$mLْGxlcAЏ#;t~H0z(;f_hO?_Q hHK'hZ0?X\2ܖ[uU:(j9" )Qйf7ɌmX7Q4Q1GޘAU`h֭Px#Yz# ȉ}AY*D{0ߊ[ 7hdqh;0ax {h) F>"b .?y3KɤAG}ᴵQKÏ;BM3=}&KAI0R{mD05p᾵N5NI쟎`Yv΄v(Ac0L}$R6.a[?F/r7GЎEVx&88aq.( KjA  j)7c-z_H;kJuAm /ϜC􍦋‡Ki|v;[6wX}x'f#q=6um6-u%23 S' T#@tFZ:αqiM?dh@.H 0Y1աP'ocA<!&(7ː`D>fwod:{$v4F￉ޖ (`訰äͯ7L\%:|QC{:aa^ %u1K̖?2r@=!E% huBB͜Q@ Nb[-1[ïۭ]+_e?iٌz91k;|UK)|4wr?޴е(QßT=/;1t)" %vO.*WC(Mp@ϬFпe݇1hXUUycT5j^&/U C)[:?lӭ`==>\2r›kB^FJ:4I":jDoGJ"x2ѫiI`Hx:Iv䑰wڲrvI-zhv70[2ۖuhۦCm8ZbC+YY{cG"f؟صSIB#g)V'sHYuKHQI4Ot'>5=3=_UW' *jOВ;7* _/=+R]]Q_)+]&][Zuʾ[Y/7:zTp\-.iiYΘ~}|1>_miͯ͞F%Wmi{svmK F[{75CO1#G/1}osR_[+O6OVO+q&|i ~%.1jW rT;`㒟j=@AHpu|:"Q!j~7Q"{d ܿ&78kYoO6`ǝg #(4U-ճ جn>ۉ1:DKJן1> `OA[G.;vlt6Q3,b.8t>=!s7#> J'di܎FVB% RUKJLXKŕ*U0Wԟ4b7[Џو8`PiQZ6{7&Ym0ǧ'hL@P$3"މEa J( <9kz 0ZֶL~}Aξ,ሟ OЖC C#`AIoV-#~N"lHok +wyVEK4&^Y;,k}(.ɾF WQab 1mt2Q?&[* YAKcKyb8w<,4>p SIhϐifIvј_&v+ H:̏ΡG1 -&QJA7I,DGTkIC䨓\# Jjb9|Ô1ڢ+Rbd]}XHODBF[6L'9+ ݇'"/LK 2wC(M! r+k~\_ $u$;H5C<H9+`9FťQ" DPcvKĭN1dlNO' .ldHe)xXzN|}c# ew^Q'h"b^ir\9RhG:&.9@#Z#( .y` 7 8xɶC4ӏNaqЍF&ܜ bj".(kcx/[g<6T'ե@ $+ ZZ$E),h.|Lx']՛{JgmQnn94fyR~Rڜ <' /I٣=iL}߻{].>\k) e<3Fǐ5]I0"jX\]l TD &KjSuF!z>}q-}XTwQܶݐ9Lq*ڌJumBΘ<1yCQP #۔/Rxtecy|I.>]^Nז7N:S¤$8ȧA wz1#؃AgŕUg: mwIWhP+Znt{Yw{5fn}+j?JX9.LNI<]FZ1-:όuo:5@w6dݵ':3nM0ׅ}ɓHB]jy<ٛ,l<|YNvv66OO?},wOO|];Y<]<YyY>=}tNOA7<]хMirvV>y|XFA4E4ȪVCȓ$KP@F# ApY[a3㯿0 C\JJ/BCjO',Zad)ǝ݀=L+[ >uolyttٓΓ'I7|~/h2FFT#C=LxuD1Տ㽺W HqOE3wpҺ0\UKM iFJp䨍`rixl1''Q TE a99@# 匛M<XeFyYpH1ۤg=zÔK"d(~trz=,u5B}#;?r- *j|ڸڽ7?G~lOY]P=Ïs^Z?ϳy [:)WH@phvG˗Λf31a䉝ԖW*6<Odd!:sT n4EF2ԠSEy{f 93p5Ȕ`;Q]V$„kzScs)V!s6Wc[<$4[7|d6;5L>rN_1GܖK &#Gpb 8D!^ӷu}9pe{Y^ֽue?WpӒ CIuɭx䢥YV¾ y#ev.)|#L=\kcrvP[[jqyQYȭ{).==e~$d%`o2 D||T( byE`G[fo{ v 4o m\g!W⧸_*W03J Pýq7WłV£~#A|jjcVv ^S9,%-IkV}6?sosRwl{#{+Bv d6İ~ U#ī0cճ KR40RHYlz)s?s?s?}ε