#!/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=72ad91410949ebee6696428903d42379 # 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 ;f̍σ;~sr|[o9mi:oN;NoE%}#{iUƫ$Xܥ֭QՄgVFUxiGCFSK=~ $q""gADNfLK[%}Cz0a?тp lsB%Y\ &WM{RB2$8rT$ (f<-GqʙdhȂ2*(s<}@PZĊP`iʗzERфr3tydY=.>ɺۺv3mu1vPb8/4d >0vdÆ6nF} |45=kp` .[7 a6^Ȇƴոvv9FZq߰hlɐtucؕ́˜kߤ L (.LӸ蛸ڳl"MS(] '&Pd c 7X{3 6oq`3p\&{qǴY]1m예Jp `<_g \Ӷ# Ӏ=bpΘCF^ m,q@V8[;#V60֕98>D8-Ǭ,'X5:&Q\ rS$Vf]2BtPRjC^+Ɠ)TA4 ), V8 "a؍yVK2V쳷Uk[#ѯj8pkg:.(H0^Tco3[fʘ~r]~]W:m&yoSN@DJZ=nSħ, sVrp|ْq@@qFf*HC91OYjo(rzNzurY?֏M$fPd%emFIQOVqū`Ae1&s3=;8W+"s Q9LV\}k giǣ(dz $FMnLÁ$r=Nd- Y#yL\hT*y뚃'CA,B|Z)\=Px [0fo nm3']4 j^eRJ,P4z=PNb?dk`{PmDAUod{`vv¤kz9{D@A e2..}="oE2;. %Mב {GATd}r\X? '*ѵ44eLb:6O\<٠a&Cisb=P>0[aM3x8E4@gqM~+)J,6z,;,!3o0uPjxGm:SZA2` &D?6jhٔ^?gg5|gҡG V*.ı7U'<0z k PykrC'|ɹGOI^L9^Z dR=F#ja};+p`)%P;H<DZkǂ'9=!%1^9b=nGHcW=0Vkr gE5E֠-+W<hwQ8YzhF.*]9OtT3;XcQcՉG~]ΡFvO #q~=>͑EatUhR.ޛ*.~%J]9cvFg7HFI84a?oYď{pJc"صHT%zq/nh,9G<3Qsgܖ˦3iK9P-?-a}&|̔h[r8j25ϟa ЂGP׆y/ƕsлlփE׏ `nbf/ -e(qo]@LJX AOσn5dpp=ę! *bkg1 F#ͩkNȄV,Wv9f6K8z8ƦD""r &P aIeCKTt^ 5jf1xٗEk 45L3>)O},Lm2Ǵs:;eȺyy#08vz 4}~?V~^kvK?ɟWTa՗;^M'V'MC4 wlheՊ\@} XLu/^H줲^w߱:Z< ܛgEuڧiLݽ;rut$5bˆ%1B4,p,*]ݱ'œt>5w5U@㏭mQmw_)F82:m7G㋟׆s}TUz*xQ-h z_/0hA'_pQoy>t߭?ϯ{_Φ~!kpTs__B RN m@hEԏ7ʪI@}LUЛ^yv{cl0&׸;[̽΅j)ڸuC]'0RX*tC>@%yքR~@ e[Y]E4A.Nvc8?Wu;7dEP &:67$]4qӻc0t'ؓcxaһoOCwtyt6xAj'NE+x6D-6D,;2%V Vi?GzPC=vfn dDhS7:ݠjPNM)EFßXՐĉg uL2\:8ɯstn*11 bKmnqLL9;Ve f{) B&sxc9nyŦ]A𫫑>oiG$:4̨=:(8`"eq>?N Wt qwD(Ќd^~RORJ \A)^Xn+ &6ރЋV=0V}s 0RJ Y.l.gNeg$B?_@t _ ?p]pT79|`p~g^'8 ŕݫgnHyoׂF'P̡xU:TX"ʬКQEE'#HC$8^ggKz  *?vSIfe ?f*HKեRvVF1oIKfxɖ?n5)x=FE٩ 6f٘,;0Gi5Kةf ~)[Y}g ;R%ZijبZQd-P[@1"/I'Uw›ߚHv١v{DZs̟ [fbh^rX`c Rv9QMSWm>Y& u&w{T%! .h>Ug O&v/ytkٵ0Fpo "@C5@(BY>hu=dUiQ!ܛy߅%tWE y$aQ/@5mt>@?vڟiζgu 2+H-(XE hk YiL?l9Ldy|tNy pZPXs>6tG7EW+ BMRRYȽD(hEc B2T,eS 95*Q^2.}+ܻ/)w7 k~m$.*9JYVYd- Fx@S*D[;M<|?qyXc46/%cZ)42 b]wenL>VUUUF"g`"Eґ_`ʎڍ6X l Aӧ"x6i(|bvRu0^Q~ b " ьbYJv6;_ 20&Ot>7H6PH$,TH#^כ])cTm>3Bd#CT7,O-*Z~D!6bs>A CQʘGKI>goeQ{^QEچ6~o%`zUO d&ٯ7 7]~!p~USnFp!UEα3 t02|HZy+gHbzɾY7oE?. pHS] Ix)-I IHR6޷^[;SL,U-d"s8TvXuzF%Yp̈JGg̳Ы,kwh4yw=}Zq F8iSQXL{f&H2ӿ"I'>2Eo]b61=It1-̿AYMbzQјZȨh$V?VT?al)aBqj4Lj+0c]>z5SYz6{-t' s(!c>i+:`##D VRҁ,HbcbXA<>Ģ{#qtaY 2?{,RpoGr!=^/6^>;֗<@ -RҪ] U F G1gԣ&ZJZR#=_VZ^&2CLř>`t]QиR>&gb,̥J4d[Q5A)5)ؿT)btױ6vuwb٘zzH_3=l(3zC_vք54sԷ'mɔ[r7[ ֹj9ܪ2eee eW@Boz)K_?dQ˜Ҁ嫧OS6k~62ֶ*5n)' vS{fDzB.dXV!_VNق]iz`Nk"ʼ 5zm(s',^Bok8mv2}Ws @Pcƀ/O٩3~MHF|*"ZX!]0kyyw{ |9"p'9&f"%݆~ _6]2d/o9c"%6:cu"{5Ķ-Q~i/{o*]d^Ћ8 {2#R/bG3jʟ(Y>ԥAynߧ}c4*Mo/L?ObbWVC?y½w{[od~y݋m>M++i;ol_AGam0eO%IB]4כ4;};W(^&q/C:"r0nWhyy)>94BJwj)hzn +!¨H955M%U)Et]͵ M)y:;r Ϋj@MF3/W=@?N~peD?w/ ތHhM;oE5o 9ZNi/aT;nMPWm ?EIoi<>Xd^@.-GygPyx)vQ{÷w JRz|f@5 }A%T^m;^Vo˴$;!#Uʘ~WM5(2 'tn>,J*ssk &lh4ЗѨ*?@%A^m=%)wkX|BݝOzޮ7s^h*#Kf4EXcMOͣZ+Kj շЃպ*_ zVֿ~lsj^i$@2X6r8y0k3&M^(]E].Na4 ; J\t7bB)xs2M5q_l62?kKGJ2щ?`a]H JQ?bLrisuUC?I<$q)8CIPчpi/V, t63jQhʛqo8NB3 z7ܤȥIN2YRz/,P=ۄu@8[nTפ?uddlZL+\l{=,e8-%զRYKoU&} Pt-QRcz&?ip!%;sY.a7'C(b Qz폨s0e]7E@ {MB_/d)uWXeVɩUb AU.acwnn@}Ŀj?`}xW~;U܂rv,71X7,Q`=-ۣiugi?Y-W0-d/Mr]]#W7_m;Eٙ̐Q)od, KD {U ,AHOi ƷsN/+I-HB' ݹQ~[ڨ .O0 rk%|(B? RT.@_J \Sp TAdz_bsKe dcъ4/ 榐лRD*dVM˫`fQL(ж{G8L*T'ozPHqR6Q~R[[& XS[dzJQ$=Ci iN6ΉTJ5L𠓅%ɸuZuIW)meTc"?*hyb,rʑz;NBn_RRFu$azNo^\pZIC1,cU('qS:Zt ꓝ;fkhmN+ڃ&o\ a54\7o.Ih[LNPm隤h'*qK!)hf4@c<樂L"&иecǓM嵵,7sið|+ׯ^ IP~9~= $Aw߬ %DN$cs3@L' 8Ji^Q(&SڍP':ujޠElco6͕wۓyF7,g"q.#}P(br(3ir_QV63 'SٔU‚-}8xWH^ʼnR5 JpDp_E?3Q!f2 \ʚ Mq)^،ƃ^U81U rӫCYՈ Gnm-ڨ[Cg`9[Δ{// nJ*\EO)gV8]О)i~!o!Bh᳒#Iɳ7Ai2qi&O-r *+PUSjP:IRh~JLY;S> J}C67Cgz`ߟ^RCwmk~+ݬc4 bӆeO\\HO@:f Ta1EK<>{nP'xrx3NjT'dvyXٻQT*αGz#GTWQ֯dJRX?ka:Pk,Mj*fwآ#q4tsG}`΁Gd Tw^V &ŃCVݐ,;>}ByԎ_GdWF;3EGynU2@i]ע Mabtqgs/ IGgzVz"޷S(4Bj8,Mw)/t=x=c:uY{Ç;1ֲ! 2;O9J+dMIS+q#^zU§ީ{ܖ29BxR9-hu qX۩U&֦At*LBj-.ƍzvpSY(mp8N44cmlif/8x9SM\C&)>Dդ\k ae.Q_ W!,NU,L9ŸIbIVo EP9b~Դ[:bup"{-1[)33Өc(7&d?_MO[[?L`BtxYKLIy.Åu#r rkcJ%P~S98# 0KzdڐnuO 8Msk3StdZRaPw7ԭaA--= ?J顃~Cﱭ;?"o?_H Zoڳ u[XȾgB;t#*1œ/?:kST&fg_ss] D9[ Z Du6!/uJ+m .»mCn%{-ַ)ũ5S1ƛb)W I!PȄ350,9h":!`u<͜)Yǹ+mu"ԾgO sWaTяǰPIHTb0Ǘ;-bJWjA\R䬉b K 2w \[ZIߚSwl.mYk5_A1"9"ϜEOov.G_{v-H;yf,:BA=8pcʞqkDap oi?zlk3f^u䅴r<[E6 ޤF."L~29-QD YexZш6{uf#50E+-J:jh1K9+KReHFm&:fVFgYH0񕑟IA`|24opРTG!_L7Znm.s|zɱ"s_*%d\׊¨h39=z8-^Y)~@WQ5~8@`-fF5u66,W OXIW9#̚rI %@2<5gSbxA9:*#΁Ms׬"7i㖦yX| CA*e ]6GBQ;HQG|)r:&a7 R(fs):ڝM.ytsj.0m)?>I$*f2-jOMӔG:  `AtqR;ѠIE`7O0pt;S.mܽMmz4| O GJZjB:=A<&>SPviڷmvva}=S>| -HƏuKy xƬRP b3; /^Ggk6tYnD~ ydT w6y}S `4OԐn -5GߙM$q&ř?[C߼&:}؞hN8)^4!VNUMaK[rU6=u,Kc=BO>} rC gAwk%>z.~5M/*Ep5^җ`oa˦рxhq}įsZz\$X&:D<d|InK&,.OE6ok'΅E?§;\R# SLG4kingmLw_mnf tI>&_) W+kw2x\A$d}J} ~wRUTu`Hf35=фCX1 c[.RGO '}(vUXR1z44O;w>aGn~Iŕh(h W,AX$0Jh:฻5cz_A]x{ B t]NGI(, O(Bu TWj:aPY@iBU2 v-XXlEq뼏N;eJӄUsJ=ctNJN%Pf;8 ȓ"gM]#ń|eպ$V``ih|GnvOK% ȃ¨ }t󜹪$d w2Դ(c[iS[hWy@eF +6_J LIa&ToR+Z-G.},߅ +N3Lk)[\=ݬB`o c+#|;MGs5~GW X{7Q >LI![%7=|I)Pƨ-?t}ڬ62rZ;s\7=Cex)Qp 㪻a\ uEdXȣr\~ϗcBQDnso֨&V-fF;bmְd^eWvoL^Kٓ?7f7H){LWӃ-2%l QwڠSސ^w$hۈ01P`!/ǴmQUӼaqxGs2A'ΏW="Jt&Fj2b~*5}(ՔP}]{~>Уi}1`G؄h:QPoa*MR3x$k/5Kgtrp$R]QgE3V}[IsfYE5=_@MrLlnahs%&]7? .bcjBM ~gv+<_8o8<Q2N;2V"-:8(>B&fc:EcQPc%+:!0:mXI BB[U)S Cπ X_Աg"q@7n^2Yt)WtMzF,e/yGe\l*YX4PZ6QFz#sPj$:]Gfw jpIzs 7פsH9R{dMB:B~:r9J/ 4܅ځٓ5A/da6}欋h|j}>jkbv@?Ld)"@lb@_9BnB]N)>.V& h8P(珯S LTQ)}Qĩ  ?w?%r% HY R e6}=XFKi9L|<}71|hAaA* p%͖H[`TTOggc Jxj[%x٧lk(KxPQC'ʘEαz簔g`|}8}0Pt  TB)9cX(8ċ3_jQԊ1F~Y|K"H?b}KrM@o Ȓ0j 9<y4j_Fp NE ;r~IP @J;GSPxݔ!v8Qf&Fpt9,fʥc@c0:nR^C 0wa^%H T)ʾ}uO'wobȆƒI+GuEZXIB$G'Nf죄MO4=εaos<k8>L iGʵ4gF&<%3pF/"RcOs`Wi s?ķ:aavJ:ZVʹx,1 Hٖ k51H4SpT"Ғ3T>bAjct4,7bIݵ;Q;P&3jH.b<#б׮fKQŎƖt_E&VW(ˆuXsQCc25P;IX'O+ju8aNmFцY[!%K<<`ms4+J){%<tq?9;P$m+BSVtzуKܚh}57qɠx2JK?W`0gn4枋Y+$I|:ZV_We0as΋8`W:)r+u^#,:cYTא*ZdEkA3ѸJsgjR.m "/:Aš?^Z?"|:FX ޢc 2b% 3SЏhBɠ.9DՃ{ÑmLZ؆f+7I3 *؟HkQQDQHX4k Ƽf{}4w.CXdaJCGu)[JB{/‰M /`TOS/x|#z-hK<B"~>Q W.IYIѤ-xKLŞMjQ7|_#ƹ&X?i$Ɏ'I9'ZxSmin[ ˳c*GM_/+99]u[o;@m2ɾ; qáCeoa{?m|r=B98"Ymklz\Y- = !9)xw ]\GsN4 wjވ._e:%0_x M!a\vcz@ f96fq@Piu`YWW B2׾!bj^ E(a0,aic!=EP`m4MHFES F"\Es 1W'˂zNG=NjȹaAԖᠭPC5i|WXZݏAv5x4鸲TlohjE7r92؟Bv}ߊT \yK-㏙6g hgڡsc/Em*z\͆,_Q0eI90)귮%5b=Zx|mTP]?ϥRcՂ\2=tm7kok{G:Q81u&8ejةVu>d/P/m<$!nۄZ/u4E|娗a^][Ek? х/~agcY@b^}SwDHFN=e {Sg/mBz5|lw*|&v;w^1R&88tl<Ρ+Bo?[`#s6`rzN.m}Gg,5%ޤŦJW@%Y4/#$B{7+|۟P 5D>=G~UH:qUjpsH5vTZ)~ ˇ;J{-"u8yp<_koQ RC~f{j&n7:c_q> |}#U6T'f!!d-3OQÂAӇ^xWH{םIV6Nne/w{[oG?XI1-a)ՋJJT2E?Nv`ZP,jk҉A NbP@F%&2$Ecəʦ.;*\8 pL*DP}~xx l:1v(";b$:;4m?v<J~1},tT"o4AD/DN+%bԦl(N[e7_coh2ӉPKG5tEvau{*rgv^PCoNOO4jJunSdm(:㯘t0pߛ`qTF*':-7t\F}@v+|@!v|)^;:euL.M5%XeY 2 ,S7B-H6,y#bL0 kfނC0?r}`\ʹc|}Z٭m og&6ҿGN+݄deq ~~t->K=zu)(v'=Y^`s7~AT>hYޠy2$a'd²CzU߫*Wm萒RhD% B*ZT l$0au| :CX@%{0e,ӑDdgX&˃YTH$KΓ{kr~_d-Zй&@ag})oتn0 ܍d4oG cNr*AF3*y-){M+:HsYczCc:jk05<,^a=%ZE TyFpUv(ǀIhOY:Z/29=P~1ǣ>ufReSg'y=tՠav?h_FdԚ8A^F ^эZ缝[A0P}^.zOj_#wx$V{۫'e\݀5@0ZB=3$N-%ÊıD0Lݝ<}]n*K,ȧo>I88~ @QS8 *,4ݻޘ1󕣴n'6_/\€`N Eϓ@bE]wjw `P}稝c `sǡ%qY|ҿU:{ [yLNla2y'j"s_4J)Tgj`:, p[$\5cjƔs~ *sp29=:hHb0ȑ%1f S[( /hpҍ{D_9<,;d\e To:[^aKe4jcg#,Ͳ/yOҒYyllU~ U!p@͐u bkr\BoWB[ gQu7$e9dOc9t-` T`tX{m-vao/Pkuj7tń,"H鬲mChop6,EdVмC6 8ZMS7r`i Q XסHm#w<1_]{Y#D̕ax#5UNI?8/w>_lc]yAd^\y)#H *875t/~JvUFq72>wG`b̲6o?{^Ss6D3ì-d/X#/9 %Uʣ_7r3إaxstr_'  9\F ɻ;!Rr[O㙉ZqqHdCu <Cݬ B3V-36\. a\ƃe ޽D !:Z1F0, :fA ;ft)C8U爌(TW1HHz-_ڤ͇}&=IP0zGUv?4L'Z+Gl8UR( $Ȟa_ᐝ0WMt׿>&+ksI#u=]t4Q-u_Tf7]-ϐ -dQD>&s\e;FKvZ64<ɑ<'x1Y5.?j!9T tTy[.3s19KZ2bQ59ҏ#^E82ɕ)l?_Hm0Cvl)WᎧBxƉV1ytF-;K4<̛&+j},SJKp_Ft^4uzYj69}EЙ-O*T eMt` |ƈQ NQJ]M/\w}\ӗ(HHRvvsyC,dP3A_KM:JJ c[+WH~ͧ^_SSw X! ++a| tȟ;@w1I`S Abb]Weg(K4NWC3eF=CkI)Q8.k])5?WJJBhnFW>7.H;$Y'QzF4b}CC8҆̆ TeCuST ;%dX -PWxT,$PBF2hMKǟݺ~ͼˌAamnwyšJК8E|:8|"92 #泂 |H6]Su2t@ɥϯ&G Q6j6iߵ9didE*_Ȥ7WGҢ{qoiDz|Rl!7=N#i:hGm^be@W62}axS"7M&|f̪ r 5gJ=9YQR&kg@!>l &щQ ǟi}3uQ3Q) ľr]_E+%x[AJjry*?\[-?_Ez8>vh086-Uذk* 5mJVJ"U*PV2L ERzڪO!9#҃T?S,d!}]Jvto׷KPCeةԫԭD,`Ь]ɅelWb WN9EA:чJ4o_&d /!hnN.z=ذ$}FYY1!INZj{UPpE(w뮒(aڄΛB~o 9Ě Rͬ9{#Z{nsŽn4p5LHPsG>:֝pN)D w`c_shBonwz07Lc]<>ȾK\,^`8u/;qp{[NѼSS% ;Il Ms,m̊he u䳛B  1T'SzRɢO.= 7l`/)W[csX?@zC^C+Wy9u!26U6Rvm(eȪچǭyۧ\f?K 7I9lp=Jf<fS= ퟍnwa*_V?~z"QҽJ`}cGCV$D=3:^&aHaSGIo * c0Nhpof+M<4Å{Q<@w<w%@tMHftVZfɌ>uW4f'.ݨk'}4P8LeZpLU ItJf48lZb9?zӻ{ &HZf>T8!31&G/Vqh+_\6 }n年q{{}`6bOBYWpZ?3ڸ_^{WK¿[8q:lyFuV@mz+otK+w:VGЯ7kq_>k+w9W +zX۩Ub = 3ue3sW`N#As?nRs"I @]Q_N&n;Gv/gxw%#/Iã<K!Y9Lu~ٻKP3.xa  jTRk*{u+ iL}{U_>ʓWy/ιM`lV lي$o(Mv ;5vbĘRݶrlxN9NA,?6|Ws|U\UwR(Gp)5leTUEnQnJRAswxU\̫p-"eTT-I[\?ܹ7$UTZ2 5fn*V+Qi*xw~\F^BWhFe9}sPU~{|N?qyS#a)_7m,iUErf0_wGQugg3'=փBg O{կ_jq?sQ;cyU"Iiyu9$98i+4r"Vn.ӷ{+ɨ`G}XrYU+Ag|rqpVemJw0U`2jqIg'&p!ƥivZ4Rţ^g=NMP0y: hNcynXC6юq$Ѣ Rco(@9n{ tjИ3 0Dp=~p5ALN:xm PyL4ATrk'^臺1~(zFV7%ܓ^ >}eLo0h^1~fbU ']]6=pv`7`ZUxuw 33Vs@_ʽ{S84SU֑S ۆ ިUun]ڄvqWgK9\IUom) ߨN)z#]zy&m+eF4nC]&1.F.D֯A.(F&Ch\x^ׄU.&Q勨C|LQ,fC߀P-Ѵ Wu z=78"U5 `$)[!Z\=^I:?o\TO7vF#̬q Υ:tGs()eG*tiMh?JlŭlDE  G|x<|tyyY9O*ْҋJn.}n& 2kZ mWן\\|_wj졡8tT;O onlt<1AA>zxjWABU|ʚ>CfǠOb2b:+Gl4 RFLNCd,9&;ڍ93#ڔU7YvԬ^VQ0ㆣGⴉ0G 'LQP}[[4 &.i=,R: 5}ʊ襁Ҟ LƠDIJQo cp!-ri ijhoݰj _;^R3G|{qţo\(AW8~2@*:$R`:+̈́ɤ?,ǕusPqr1 u(+-:=_e땕GS^m#|ntJ!z*s{aVᨓ®Kѧ辵j?ʳM9oR=]Z22kp[D rPgϥvZ\|ՅD6q,.ڃXwNF`a Tv{e|sSˆEz!XTIM82B̩bAL pԔrl$k&Njs5Z"3soWYѵ*]Y*(_0ٷtA^Z2i51/(M?}_$d9{tדy*|o`W3co4ia-0'6(=4́r-.iE^SdYiJ)HLy\yWT톞.]NE^@ENʹ^Vq 4;ĩlc Cm@-ؾx8i"IԾ\tdQg-T~qJd)],bɸPhػtaXE(X쳵>ȧr9M(PWk`3T.Z К'ɂ,48;`06q"?mӦSD'{jDrnHqIJfln^#6݊FzV/wr}&]q8ŶV6v5&\m:+ ,'#D |ł{bY[}4LËd⠻KA.K77-VxG+S߹ޙK̤ib44`|#C2~9-%'>*0elIW, ?Dć +I_4U֒ǰr"{Wp"€.GUFvl(']pym r}YZ.IQX6j`:gg 1y;wn܎ނKkg R2i'ѣo@06w ycb(4g^ r@qN+C`j4}k흪?rbd}b&JKc;,h'Sm" XA QjҼ%aSfڱ G',ʢxBl"HA_VfEoK|ugM.h0Rn.y?Ih(|*dw-_}r+=b6Kɵl{qo $7)ҭ*ERHP9byKI#IMAT- [ K*2DyŘ>CB9epMfod%*t; h ٜ~!.~ j // xz 㒛jz8- Y|k[U!*ɵ\r}q9 ݨbeֳXmJZ%F `g(4 ;8[ML [ji !]"VY__6/]bnH0lYG6Q:%= z&j&C͋8F0 ,ONleG;8YE0arMiGS5:EntRq%tJEHOT]4bkюmDx(9kl8Ϩ%tO{7*YmFCLyCԂ(IzтQNv{@?EdEЖ,Ϟ5^ jaP?k[1 @WnmvȋΘnRF}k:'qTQh%3n}OrS=gvC?#x)638(XhF<ѳj<w 2oZ$KhN㒙kQ=[Ylm=>Yn<OYyvz?]yqkikz^[;=}d6lgOqkG+VNO`LDY Ix0d5>EDuE{{b_~52%a`0@ _6E9( E'$Etاɗse XN{@|.]hqѣIkt?;YW֗4#!4S~W(Q4aq[J b :p. VQ|?Y?8^~>y-?] rhri|`_j0gp;2J8D#GSr@4ʞ-A&j+x&9Lw' lO= w}NϿW+$+OWpi? ayjMP,h%h/fa{m`{S3[B=^нgvPKW* >B.r 8hlb Έx|1'$?lO`\nsn5Go6럚A>-};5|[jӵ}Z Y>2]FGʼTEQ7Ut! x,;=[&ߞSU0S~^|!e{:RYP)ⶖ=`vUuV8f'7vKX}zL,B'|ܩ+"[Y%U1ZpAzs|HqHUY?+]Uac;r1]z)K ת?"'np;bXW #OObC4|0pz1Ktg^rf*WrcfV4#u[L0E s4wI~򫫿۠z#fYVMRJǣIlLr5cn*@Q (Hx ($:WL "ߛbeyҷ.NLl^וOrٵa}MCHS!SƖ~lxS I~K] |r!t1`B :Z/Op{q*pOV!^Suld;YNֽud+Y !&EUjy h NDivBY@yo}d2ؖ١Kε67~Վ|zjsS_>Bnot uIqׁd Zա2A)KADy2Mr\znQAN+<#f?%T-|^V(!&\^|_ʞ__{ЖQ?ё >5Mu NEIKRf6?3?)k6n8s]o3]玪/aU) &V#^e4KS.?4ws}>ws}>ws}>ws}>ws}>w?e:X