From dfd1861d7b6141c2e28b82ae86ec0c7e37f12ec8 Mon Sep 17 00:00:00 2001 From: Josh Holtrop Date: Wed, 23 Sep 2015 22:18:00 -0400 Subject: [PATCH] change build system from SCons to Waf --- .gitignore | 3 + Makefile | 11 ++- SConstruct | 25 ----- configure | 2 + parser/{parser.ll => parser.l} | 2 +- parser/parser.yy | 2 +- waf | 169 +++++++++++++++++++++++++++++++++ wscript | 22 +++++ 8 files changed, 204 insertions(+), 32 deletions(-) delete mode 100644 SConstruct create mode 100755 configure rename parser/{parser.ll => parser.l} (99%) create mode 100755 waf create mode 100644 wscript diff --git a/.gitignore b/.gitignore index 0d433ac..2e3d331 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,6 @@ fart parser/parser.tab.cc parser/parser.tab.hh parser/lex.yy.cc +/.lock-waf* +/.waf-*/ +/build/ diff --git a/Makefile b/Makefile index c5213ff..af50770 100644 --- a/Makefile +++ b/Makefile @@ -1,10 +1,11 @@ -export SCONSFLAGS := -Q - all: - @scons + @./waf build install: - @scons $@ + @./waf install + +distclean: + @./waf distclean clean: - @scons -c + @./waf clean diff --git a/SConstruct b/SConstruct deleted file mode 100644 index 2197b32..0000000 --- a/SConstruct +++ /dev/null @@ -1,25 +0,0 @@ -# vim:syntax=python - -import os - -target = 'fart' -subdirs = ['util', 'shapes', 'main', 'distrib'] -parser_sources = Glob('parser/*.cc') -sources = map(lambda x: Glob(x + '/*.cc'), subdirs) -lexer_source = 'parser/lex.yy.cc' -parser_source = 'parser/parser.tab.cc' -for f in parser_sources: - if str(f) != lexer_source and str(f) != parser_source: - sources.append(f) -sources += [lexer_source, parser_source] - -env = Environment(CPPFLAGS = '-I.', - CXXFLAGS = '-Wall -O2', - YACCFLAGS = '-d', - LIBS = ['-lfl', '-lpthread', '-lfreeimage']) - -lexer = env.CXXFile(lexer_source, 'parser/parser.ll') -parser = env.CXXFile(parser_source, 'parser/parser.yy') -env.Depends(lexer, parser_source) - -env.Program(target, sources) diff --git a/configure b/configure new file mode 100755 index 0000000..1d4558b --- /dev/null +++ b/configure @@ -0,0 +1,2 @@ +#!/bin/sh +exec ./waf configure diff --git a/parser/parser.ll b/parser/parser.l similarity index 99% rename from parser/parser.ll rename to parser/parser.l index a78ce43..f80310f 100644 --- a/parser/parser.ll +++ b/parser/parser.l @@ -8,7 +8,7 @@ #include "nodes.h" #include "parser.h" -#include "parser.tab.hh" +#include "parser.tab.h" #define YY_USER_ACTION yylloc->first_column += yyleng; diff --git a/parser/parser.yy b/parser/parser.yy index e950390..178fb7f 100644 --- a/parser/parser.yy +++ b/parser/parser.yy @@ -8,7 +8,7 @@ #include "util/Scope.h" #include "nodes.h" #include "parser.h" -#include "parser.tab.hh" /* bison-generated header with YY[SL]TYPE */ +#include "parser.tab.h" /* bison-generated header with YY[SL]TYPE */ using namespace std; #define yyerror(msg) errFunc(msg, &yylloc) diff --git a/waf b/waf new file mode 100755 index 0000000..aab33db --- /dev/null +++ b/waf @@ -0,0 +1,169 @@ +#!/usr/bin/env python +# encoding: ISO8859-1 +# Thomas Nagy, 2005-2015 + +""" +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. 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. + +3. The name of the author may not be used to endorse or promote products + derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR "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 AUTHOR 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. +""" + +import os, sys, inspect + +VERSION="1.8.14" +REVISION="9fa0538d9aef6e87468d0d8369f1c2f3" +GIT="9625343f91810ffeb8b844f14f997daf44a91ff5" +INSTALL='' +C1='#+' +C2='#*' +C3='#)' +cwd = os.getcwd() +join = os.path.join + + +WAF='waf' +def b(x): + return x +if sys.hexversion>0x300000f: + WAF='waf3' + def b(x): + return x.encode() + +def err(m): + print(('\033[91mError: %s\033[0m' % m)) + sys.exit(1) + +def unpack_wafdir(dir, src): + f = open(src,'rb') + c = 'corrupt archive (%d)' + while 1: + line = f.readline() + if not line: err('run waf-light from a folder containing waflib') + if line == b('#==>\n'): + txt = f.readline() + if not txt: err(c % 1) + if f.readline() != b('#<==\n'): err(c % 2) + break + if not txt: err(c % 3) + txt = txt[1:-1].replace(b(C1), b('\n')).replace(b(C2), b('\r')).replace(b(C3), b('\x00')) + + import shutil, tarfile + try: shutil.rmtree(dir) + except OSError: pass + try: + for x in ('Tools', 'extras'): + os.makedirs(join(dir, 'waflib', x)) + except OSError: + err("Cannot unpack waf lib into %s\nMove waf in a writable directory" % dir) + + os.chdir(dir) + tmp = 't.bz2' + t = open(tmp,'wb') + try: t.write(txt) + finally: t.close() + + try: + t = tarfile.open(tmp) + except: + try: + os.system('bunzip2 t.bz2') + t = tarfile.open('t') + tmp = 't' + except: + os.chdir(cwd) + try: shutil.rmtree(dir) + except OSError: pass + err("Waf cannot be unpacked, check that bzip2 support is present") + + try: + for x in t: t.extract(x) + finally: + t.close() + + for x in ('Tools', 'extras'): + os.chmod(join('waflib',x), 493) + + if sys.hexversion<0x300000f: + sys.path = [join(dir, 'waflib')] + sys.path + import fixpy2 + fixpy2.fixdir(dir) + + os.remove(tmp) + os.chdir(cwd) + + try: dir = unicode(dir, 'mbcs') + except: pass + try: + from ctypes import windll + windll.kernel32.SetFileAttributesW(dir, 2) + except: + pass + +def test(dir): + try: + os.stat(join(dir, 'waflib')) + return os.path.abspath(dir) + except OSError: + pass + +def find_lib(): + src = os.path.abspath(inspect.getfile(inspect.getmodule(err))) + base, name = os.path.split(src) + + #devs use $WAFDIR + w=test(os.environ.get('WAFDIR', '')) + if w: return w + + #waf-light + if name.endswith('waf-light'): + w = test(base) + if w: return w + err('waf-light requires waflib -> export WAFDIR=/folder') + + dirname = '%s-%s-%s' % (WAF, VERSION, REVISION) + for i in (INSTALL,'/usr','/usr/local','/opt'): + w = test(i + '/lib/' + dirname) + if w: return w + + #waf-local + dir = join(base, (sys.platform != 'win32' and '.' or '') + dirname) + w = test(dir) + if w: return w + + #unpack + unpack_wafdir(dir, src) + return dir + +wafdir = find_lib() +sys.path.insert(0, wafdir) + +if __name__ == '__main__': + + from waflib import Scripting + Scripting.waf_entry_point(cwd, VERSION, wafdir) + +#==> +#BZh91AY&SY O/fF`"@#)! (ayn#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)#)YL۸7m}9q{ujWԤ/&vwr>wwn6F)˅o{{ma(:2[vîJ;znx}{|]#)}.;{ݵǮ﹮7k#)#)#)>>vh#+{ypT@پRvۍl4#)QU>Z{=sMaJ:݋al2BBJnR#+D #+֊/[{yׯZ>>kS{z^puA5:[}:s_9מoޮSֻϾm^j^]gu84#);gyrd4{T@|ĄK (#)E)4 ӻ^{Bϻ}^#+%6`oV/sw=g^@=GzX}5t3y^םF@9Uxp\ҫovw\}^׳z7^frf.z+0x/9{Xkvzwi{mzJV]71{w{vq}l|gǧ}ޏ^o#)^]>_w=;.#)Pl5#+UOsj:]ooyuoݯR{^ޫ۰ңo|#)wbwyx󾦸m]9ѝk݃{;R{{ޮc;#+w˽{oC3׷^AMBV#*]mF#*y:0൷zo#*#)#*z.^:q=6{`#)Z4}@!9cUn>s޶XQG7_y%T{lطK=2u.w{w'yϞ$rgևy}yrXuɒOwv^Guy| #)@#)#)#)4 &T)P=CFF&4 M bd=)zGz&#*#)#)#)#)#)#)H @hb!OjIjG=C4zhmM44#)di#)#) =R)=c%Ob̦MP#)4#)#)i@#)#)#)$#)&dLRzihi@@#)#)$D#)&@JjOMST=?MS#)#)?ضڗ_[X~SĦEj\#**H !y}?F0O%).H⧜^,UQ2qkkSg@!K搀@:  nK&S.ӈ=aOa]ԼcB 㾏yG #+"ضmZmZ+Y@nJAZSRh@@ D -؈>!D@LCj#Tkյm}mj 4ă1,fi #*ͣfh)DJ)mcLXXMRlDJllYfh4&Rƒ)6"ъ!L,T )"ET-e5($D,ʋFiTd2EEjVa2jKM&ؘT50(j6VFɤS$AAi RHf&X(Ҙlb`)` 1T2%% &Ԑ$R"hdHI#*JMhJAS"$ERXQ$M"LbAe6IH Ydd(C"aDI Sb5%$IEEDA%!L؂I5$E$R!"fF2L0̩hJDI Rl! I&h1&MR6mFQ#+R@Li2f)E2ɥl(),ѕf$EK$*$ʂ3F*,60iJki&iiA%&4RFʕL0QIPDęIJ#+cdPh!4̶k! dRT[$mIIBQd[ dL"&ʍ35iP)Hl*d,bMLɉ(SdQS"L#h1IIl&#+$md I,FB) FXM*6L ڌ[Iȡƌ$B Q5QX̉4IdD RQc(!Z[$ZJ#*2S$5S,Ѧ)3LMX21IFMe#4iemti +IHJdVŢBfTDi-a$LE#*,E,!4B#+Z֋"ɐ-*4BɘԴ$i1ad5dlV),UbHU f)M0DX֍5*$4FXV*Ql%BFmcdTf!TRX6#*Bk$( $M0J%6Q$cR+LmVa45&fjiH2ڥji5Si*LU2SJf-٬%e 5&UCbҊ"5J4E!C$mIMƣ&M%0ȢK6#bZYR hJdƲ41bBPY+5%ٖM,SED” !f%"FĔdfQ31LRma3`ђaj4PD"m 3hFh&L,Dh))M%#+MJ"I6jQ UU3(Ji6Fei-b (2lԙٚblbVR(M,ԓ)ELdZ,"DPK1QɲR&"jHHj"MEF6mHaf()4E0 QI%iI&(#+d,!FF$ѡ2´i-aE%J%F4lY$ȩ"J!,LhdmhQ%4IR*Je)F,lFFcY4-T)(Kd5b%&ņB"ŋL2R3F#*40UJ#L&b)Emd6%Ac)6%  QIIJ#+-)Si5VH#+ѶMIEb ١Pl[DmhҕY!+ #+3lj62ImJ3fiebUS,UMICiFXJ&,h$FV-ՊM3(mE%-mm#Ph*e@KKfŋZ(hش[mT2ɵYZ%E#i&0l,6i1&$)&D&س6hi*Ͷ!9&Ga\2#+Jd]*$LLYa?FSPf5Q?R+^p|syxV&ܖ#+WD2-Gjk{??xn^8˪*)gmvш; a7q8g|X{#*/}ZS;X;Fir7ۭkdRTۮWҍE1̐m#*MqAY[#3nnp^GzWص&urK]];;f^&SiJJ?p5õR@֫֓fXQSF[,\T7A#+#+/vLC78mVH#lC83,"; Iѩi[3,DlJlO^޹[@[,5@i0 TNhf҂7=캙[n׭`#*KHݣ_76IFF}v˸Y3Lsr%QKHHLVi}!F1dQ?{u61s2ɼW.V5_>7~>{]5Ƌ1MIymICBE:42*Μ #+CmX/'J_*#+dz (߹5|R[&m!5%G4#+EhTMhD=Y j] &TMcQ9a3$DTl)S|%ԍ%}o2ֈ\CВcJHPv&Jnσ5¨D׺c<\XZv]AI2U#xXjFHKvxKQeaj2QNƌ-¼gmC͘PC 24;gr]̐x=O#*񖚆~>c\';˦X?z@e\kЇ?PbТMJ(v q]t!ER,PEJiyaڻY:ufuXr'@iN !F֚͘tiɬ% (V9"E-؍\ec{CefBdMZ5twiW/٤$t[)C)~x_/#*b+w$6X+Ϣ?->#)JkiTU#)A6A"YTt18BD-;_#x:yǶ6Nd #8eydko_rO$|S3mc-'uJA}ڷB҄$s() #t64N+$2_Gr)0lmDžQdI|af@3Vd<j.:Jytcј1=Wn#tWNEϿ!("s[EpLKdU(a6tE|[5v5ե +»E#+Qe v%|y[Ow{(nZzU %z߽lTUM#)f׍)3EQ2rW}t[*j˪N؎eYIs=!0yB=9/\hu?QeR(:sq 5ŇW?Vb÷ZM?Ёg-b$@0lsZ?d7L1"/eMb#) h;ah|4`~Yt=m<}/\5齥|~Q妕R8\6irt{PAFh2T:Hf9I]ݘ=ZzYJjmppK(,z<6gB{uw2&19Rc$ HF.R#+$ !NyݧwT0nz>q|?ÃPwFe/=7 'ꢸ3yMkQFJTXxBף)Eb5錡\E0E=)`d&B,L:2 ♴c#):" tq%SƜL\\u `h9J)RRΎQӻUR%ӳצh&trnJ6ιV|d Ǹ2"b6"6Mi|T\M9x;@ii$Š^׭٥>#*,gg;;U#+i=9OZ,{Z«r*^*E%5T_>~^+7 &ݽ/h|#*"8&!V)_ăkun"Y&#+tzCzog_jːypD2ָFVFֹ_2(?uf3jFƻ7:,#P2ker[#+'K)^u>mm♓I }+1 i6#*lZSaifsfG6~Y2aY[JE9^jrþi!r_$x}&;su1uN˟U+ܱN.0{jEJM.psn&nl0,F"$`e曘L`(vt(Y600|Fzu*ΈP3jѲLVVBzLL4RlӌK=٘D?.0czVB#*oZ}+A iöoC`ȢW.9^7X#*4{v<4ؤ eYi[z+"̺Rt#*Ofܚ[xWXۆ!U&;Ag&~8U#+l1M=.'*lj㿍^虺W9l~s^BDCf"eK 9z{S(xÅ&~Y@Ia-N*Z|jDZf)…{$Zz(ݜT.EGWr~u(gDh^PckR(I- qSbKE/t^ÉkeE3ZfZ3=?v72mH@OPPl=3W{xazo$5[*PK%{TqlHPhW4L1;BiwCL\vϵ)F3?%3.-D$UpsǓϊ(=+'ی+~3 .ԤST_(NxP!:?DCywubx{!w]oz_ Q$!3t*a9`ԛ>’*5}oNr]m#< QXPf^R2II`+;glDh&z..* o36z\r*΃FU6;Xc&hQ~#5ha5<޺u۵댘Z0Iovál Ep~te)z{#+5Vj#LݛݗnMac)%CPݿ t:g_Xv߸E+eῪ,g,bpkL 091J p=S~>*[Om)r\s)4讒o>GYӬ ~qwL1Z&_@liz=G5Phl ffd0x~Y݊ۄ0[5:|#0qljLm?I#* Go@kwިDb~?~4̸dxF>-a5<%mB೏otE߼f(F$Ӻr\B90~)hv&2Yq- KxEl\则Pl#* 4vyW?zuN*?4Maݵ\X_귫 \-"%u#*Abn7#+attSa}/S[YqT<#*MO6s>Yb3QxbM#*CWVVS[Q2޾]UUA80j3cOtm8,ɪ뾙j#+ M[׋<:\cOgO k)rULqMuA*"é9jyݻBq0^RHЇFdo9NھCiMxF䈘N#*bI ;en}-5CGxtX4aim:uUva^A*ȵ/21#*iNz@&ݗy)?gSXNҒ1+[#2Ļ-#+!ͨ{cßKSo+ƃ tR^*ƔbaGpoPYHc?(f|vՠ*{fu#hhx>h#*oډ7>NboŸ8pVCt E{\FӹgsCoWs\ll8^C*ڦcTgZ7=K6L΢;wW0m}ҢDoilX3krsE)'Fe#*L3wKК!5r3ݗ{i']InjN:JZFΰ$R0cyC_ n^`&vZx1Fr-̛KUۅc|ϑAϻ;knpEj\I 7ߦcci&ͩ,ex;y܌đa*+I)P-6:5[ˋ>xC !%!XՅ"q 0"z3#+Qm*(Az%(ȱu8hyv8#*N^IⓒO~+fc*K?U8Dp#*DFI Z .P|Wwcn{M|X~VINtȬQ%Jt ]PSȋE&WJpq#c$uF0:dκh˶@/99EaO>ަ2X;CWכdׯ˽IksDG180[38& 4lhL_4#)邺UT]x-v5woMt:QV$T0?rT@V*ۂKE ULT[,a q쾨[^~0)ՒPI5zEkkx)JD͍}#*f񅔨1#A(#*1`2H "9}gfnB=:%~PF2R!N+Z麝7[LJȡ*2N5|^@y;7ïO좝m,#*Q'CCaw0Š۶Wcto͎JhX}R_٤ݗ Qc7K)kκ=O!迷=Y7YѪKUn\aeoD%t#*3~q䬨5ibSC?X7ˢXUrw+}[~|{hhacG3Fęe|Acvxc^Gsff#*_ID9pA݆"D\P&A.wIN q*#*)$ш pyXn=s~xE:ɷTc}*F&b .V=79\+`NגT\TVN143xwS^mP@$ɑ#)Vɖ@.-ybZk`l(%jmi3bl,Ȉ;^j+Sz]OD iDZm+MTE뱱^{KyKfD F#+a ȲAH}zdk|ͱft%.beueL.bp49#*=$6-"8_f#9.N1=d>?Pnm$xHzxrS#*,CE/U6xq  l7֠]r80n\9P$=Xu,[(TL6r_L&DjKX]0Ӷ1DaQmNJ(gK&[FHdzꏲúPESJX,rdFP7l2?YZ!$ Npuĉ#)x|{YrpKf&!BK]1R$EHR1>{m {;F1KXYR v/qYWZVTQ}n䠡rɈYwR19o1P*$$t#+XC#+8z/tDaS#*,k23x 7,&`&M½;n6E9> UQ;/Krã5c:9*j嶹kr[skt֙3z]$#+xU#+1P(\w`4L$V?*Nfmj0 ,IQjO*#)0fa^L#n'G_oݹޙ>dco:{ʘ薒펡HtMmcVmC՟)Z7;~ǫsB0oEzW^qRb-|t|ZMG/.cGTzu 7?ܻ#+fYW+xr.Q:Wo'pzCQ:=\VO nn/,#+K "#UIP#*x}yBE1.+Qcri~k^8#+Oͺq l&p"e3lw :o㍕QcIIի+o_*yxv\]ʯ[/%łv9Pl۷Ow/m}~ly/o:L^ zC;#+jD(]jZH=Cg\Ja?=cZT>UҊcCHRr*1Mufv>],e+v#+;"iīPLU䰈JnQcziI8#+԰du#)A(I ˋi~mff#++a v\=o/˷Q39= Yd$ XS-IdU̘͕,JqKJ}uEer teZQ#*EŒ>PStڙݭYM -B?R!~>71wv۩^[ TR/3Nm}CIXRփ?rTatz9Z18 AOŔ#+$>0alk>o?'I&|5VBޛthxB*<` r 0BRP(OYO㏽09j%1#lDhlH_ݨُ4_}Qi(oFek:kd 6P5'n?tF5Q͹8\V&E?3&fS{ьt=BVhk#*àUJӿś| ("NQ#+EB%#*]b&:xɘNYb| ſu_\5Ie@Rb($O&'Jd`1թ'=P(z4=ɳ?CyGoR< ]?滟yWB_FY#+>YԾ>? W->,Uζ1sXgD9DuLs}($8WZsteT]ݦo ĠWETM^.7솻!?,\ kL#rןZ}vk?L1CUhy1_;-E`x@H pp)ǎd~diM9oXCx9CcE|*cC]]ň2Ef(Ͱ k|~woF9}BcxSyTUrpnߧhE-Ad,ypNM 'M{ą#U#*.#+YC 6f C>8-U̦=1u/I*gB15'@[d^\QƤ=z*f|HrHHBLuiC}}E+v6]da>3"rl\8ȠGI#!f[E͸ϳ4F5}H)1fPaEP!U4j9W ۮuܫS/\_#)mvPsAL2o^\џ v?or+)y;wF۪-dQ5`eЧgəĠTs㥛Jax62Sl2P. %)#)Ɩ4&J1rW9m*'gݷeݲWɃ}^Aƾ oW٧8}\sh#*W{3[ 3?ģVl13J==՟6rWm~H:^;‡)/\~կR2 if!/1y:6|Fv|F߸e{yIyտ\b޺hl_voG9͟I۩Gޯh>֛ Ul(޾=*鷅R{]:Wg;ye9pc<ߕ4[kPSvDsTMvZEITƚӚz5IcDc[#9FS:*:7+,ʫPY?=, $\i_j洮[|Κү&JZ#)ک,<) $Q+#*XGN#9˶i|=Q7s$TgFz)Ֆu"+8ӞyQY#*vJ5{a\ZI}?U ٦ʟͫ**XGKtap /MP;&lKsiG 2~we.s6v#*AO˧F駣>_Mk d'tAr̨~~pҨ8u)ȓ 8#BJ{#*b`rdj/aϹ94~np?:vuf:7鉷z鎵QK"^ZѫFɴߥKh7vZz{W^`~z'`Jk,=nV]3y'GN]0 5b˨|Fx_dgξ~irZqOA?/5}?T/]]],ߖTԣq:<_k<:y6EsߤA>_H+Cf'\\ݯ̚Pԃ՜Ed-R/3UJ֞IҺ1uWF7%G/o%EѣM9[8mnmQv89Bu!*,ɹB#+uw(\IXHn]$b_~|fct}:~{zh#*RhTPuQ)CTexQ{c`pǯuu)qZ|/[m4Gs57YE,Ż"'1?zƬ#gn3AHGmkO-*22BQx 3d_5ľz>ls7dY\pf:)̽g2Ym_`p&ðW~7Qq/Fdڊ[leBz2nQUOV޹uSNz<']o BPDR&*ʯW|(ӯg/wu)WF%{]pFzÛ_Ŧ"R˫S\J,~K0Siu¸Zs#emJV*;G7F4j 3Km,# I1ƀa J76#*tX42-`l44b,n) X$cn#Ai];4]@Ad!a? &18f#o- jqdu;d7#8#) 1&~1Zey/ @8i7.j"$$2 8"9!S^_3"i,4˲uUVӌO_kiseX{ә? Ǩi"ThB|>ROOSѧҙd!rO\"#*Xw۾#*uWW;xoŽ U#_ #ғRb0q|gT}oۢh{<#*{%}Utuuo騘RyJ>8fy> hv/3NsGbx1S2lNM=ĂFܺӧ(INl mf?piz ?|M~t/ÛiwQAc\z;Տ7WǮnwn;Pmh$\R76:v|sF*)zu9MF:S &21AA[cZMa\U~BŀlTZ#N"#+fp.gi1!eF*-i2#2fR#*0+|B7hU44)Q+Le,Kg l*Cr[9h(ӑZf vt1pvء֡*V&sb-^|ZzMCCe:)Ŧ(9 Qؤݒ1:1=Jٽg/.((ƜR!~Y 9NĶPDSƮ,llfe3*#0ae1i0f琡֨Tb-#L;=#Lb<ڄ*5 L+ya9 ~ I/F͙[Fƹj̐ N#)S`c#M,Q2B#+2yAal#f*U2iF#+U8::J 0vfXi|Vjwqۍ񰈃#*sA#F.iM#@Zi"TeY4uc}D(4x8)+LÌ2_)#O\FHbh68tBiNbc0bD\4VlD?k#* QQY9LM'5"vs>oa]7Hu;Me 3Ja!&v(_>6V#*@IzqԺBW|Q$X(A5#*EʻNl7 . ߔ`!pG#q8MٵD@r"1ڣ0v:HLK%EΌ+MՌs)X:[m,c-P5g :pVI#WACjNQ9H,#*%l`Sn\..LҪZ%'frfODHӿNxXGs׏@߼tc<e{I4=מq-=S)X#-~oKl*q|b6/Y}#+ |ȼNz?oF_c:W-%?xesQ;,oP{zws.nO,T*-ju|S,U3V+%2ӌ#sxpe3QzI fk:vեt ABiFtf3ZmB~ǣxy=pe񚈘1kb閧!&:X3UFiik?D#*ig3BŬå@c†2n>):|i)^WIrؼʜI=<(:\cGDm"Fo@)8tc'\݋9@P{Za^U|^>JjygG|cZH3m#v6%8iodD=5+#ÎvMlrU?#+sȵ$饛Nwq3xF{+X`qMJ#*qF w{3g%N/0KyD~5~Ko O'[%Xn^FWR6Ġ?soa8EsLh9zz'3덌E+hء/ءEݞ" GuA1#+EO:oEMF{W^[?fIoCCJN`4g k X&ls&9I{8G-T}ou5<,5#+lv\=5=2R$m ;trwpCBO<- (5]Q-׆,luBªb d&6^C?:rW(q.TW7nc`;4kպ2hL8-zeyHg$i9iCu6tXب_Fձ+ȪdZ-RxVH*ZP@i켝J$Э0 ) ˌ7Gb%O&nGx1-yّ%{A +N^#̸g#)#HI9:V)wuD㒂+S3}8t[5R҃F^~e8qOq7'xyDkD߶GiR"d,v嚘\#+Eq4% g1¡7Ehw:<lEAi8DZzl϶#wk+@ŻC֥)[ݻ|F#sXR8;UrM8kBDga5Xi03{,co6Bxa(\C۵ݺ߻LY̓9ö5+);rSrŒs]ۘ.2>JG&?z^O]w&X.V(X|ȓ] ,0R!T,ɽGO-~D6w|tktn<%Z^q,VڛzC3m]H|X#k#+whn;j|d:(rtrYK;A(eDUu#+>j1<;/n,!MX^׳Z9#*՜3܊3d9F$IC1ʌ % .$  .J*34F5#d_kq9N\kԲt%mAխfQPG=$oeD+#uL)oaZ%-5K楱p%謃F] ] IOH51aI8}3(֙~f:>x޲,pDD)^Y(,:Mv;X&xE[ᆋB2biS9MMW}6;}Y5W.#+U9M"d$|_{v2y1-5iE(mЪes<^GsFi@k8nٕK%uM]bT#+%Bqf#++f$㤺H6aχ&K=;;t(/U1_T|0xw}{2(

w-lG4tnW][9!s}LfQ #+]θQL`k땓~EW4U=kӌ7NE|#&x>k<|~~Ӯcc ,?*L뫪Wx#?tX?=Յ+#*/FvQ(><ވ1~W{u>|L_pqJKO+}`WfN7S*!CPh}iF}1>2{q{dYkFUÛduυ4!זӲC дֵZ^YMCYMN>ӧzD-$&[9ϼ;z}k&9 qrmܺvoZAXcQ"9G3B4XJhOO鎢3*d~9y|/۝Iby d|c]_=6ҬK|'#+juXCۧѹ?oOqJȪ飹 k!VŖm+FxP@-i4Utyu{hV`^4?Qzgw_+'^Y-CEp}c^=C[=u闞bESϺNz}`?1iYЯ2K:6YTjYJfmу>?gN`?>D'2jF8y`u{jpΆcIKxY_msqY[t#sBjo\Hfl_;SLU,idCMb;r[aC/yݭ򋘧 Viw]SHJ#vBlz\I׃zWgz+4;!7gw鬝ߘ=s;en5ST 7o5eh,e(;QX817p¦ &IywqjcB'|[ƬdQĴK2\.|Ȑ5Ǔ35|lF0uvr =O>-ZC= [G8QBHOhvL$(u1%xx>kJ ]'~n|8Ag"B/u:IQ,,.ɢ98}ǏG^t]27(K7#+ߧǎum%}UWKMo2Qm(cq}>2`SY'd_ٍ֧r?s\(mt~XRR(1[بL<-yaAp:}ֶ_և/6o&? ][WAtVwqk71MB.S|9ݞi&[ђ䱪,@LU3m n9ZZptvǦgW.WoV<8#*w)KGЀ][Am|9pfA5! ii(S'3zbFc[,gCƛM3Y#^ot jqBΞ?wzv;W3;[F%~6+ltȫʗW[IՄ):#+1:(UV+4)=JHJzaUfb^/پ-bêu3; YaA{v7\(|׷0y湡}Һ|xi)'|B>7+yի#+*3a5fu]WWK.R>jsg~K`9@@#*=_$ܐ/Q_5wQӎ%wk$ctv\WPWn{DSUݍ򭘡q~7O'Sj/I[MƷ8%OIoyw'҇÷HǃL$Cm!j¦l=ZV2E(,/sT w1hHݗ%,L_=f;›,TCU~(Gm'mQ#*'44Gd1cN!v{ʽwJ[#*]cc@)Ut`SUN3CYw-Dp\"RsSLSA+աQ74 jv]sf1sяQyk,~5 Ts{E^)݊o]ƴG Ou*pDT^[ۿN:x|%O#/rW Q=G>pC[ܺ5RyrnU[~_+1~G#Đ C KY:(K\Kc&8ns _Otp?'^RG\`?4e|efgQD>xJx-ݓ$e}rߜ_X/35©\u/URw“6 wzB^,yb['ӕ(ه&bKCG)uSC$ Ï%u=j{aN*6I0f|4&_w`ag|3$Wx/0"4FB;DPD\t.ɼ,D+u{ǯLcbmwRn)9YdG&GzNŶ]TVkv*LXL%k0.6Z{OCZ<cx;-ݺpt:6|/;`x9QƓ$_Kc9ʼnIIW”3GU# f2߾*;n1Ҥ 3z#+˖Q:H۾]>|#*8 o#I:D!KtM 96J:^Ѯۯ5z36DŽB989e:e0iԡcUNȤ,E un).$\M&^wc7IlX8&Yp#\xz:+a=W' ud-O-Z*c -q~#+"kK Wݝ0gic*4L0 F#+PW@jxBrLBVP+nmTh`=Wynɹ|˅Mg^吕xCNzzԏոט ŚF{54:+GY#+VJ r;5 +nXq$,xfzbƘ2CW)>o8$=~x:6v] 5׈C9ܭ#+kX\?<hoGǜy6|sԜvS˻AY fm1 |~R_PA A>7;WR).5ԙ"dΏ~>avhJp,#o,ոMpȇBb&=ui&$3G0Z^6] ; r'C0JDZE_ODIefMha#+2o:RuP EcIWLǎ2`VzN>=wmdW=4QViZvh>~B2#*5 y[/U71ugaQwqZ)T5AIgD-mԕaoB?8!U{ij{q^_|xSi&v*!wÅW]gM0}_H6Xhmр-ooCQ$S\BM\T∅>b=Ahl@WZc]z\锸f|Kū3\1v3խJEPdLs 7&qעkB;!Xjo(N_ړRxNp빮dl6E?[3/F"P8YPq>QąD&VpQ *@Mes?;H(vP K̕ޑT"LPZ{Y(bA(@v)`P[D8Bo0M0kx°n'cN#`c3ʷ?US*B礰Evל굂sӆ5K$DȋE0U|#+`TQ&\Tf#+ n4slB޹$B>3LB ״9NĨ}q_ v =:Ya*q(>4MpB b4V!$@lÞUAySOI&Vf|}tݢ8Zs:k?_.q#GE>:] J=yLs\й2OU 31ӻI1>=O>fҚ ckMh!KCCHm"6yX폴jq-;8gA0q)8M:AKcTD5g\'YjtKFuW/,=,#*=AM/uSGuvR*6mLz#)u5muz3"PCυѥw@tv4lm"*[+mI& J-k|0(=:5V^K#+#sSYǎq1'E49@ϛ#*9tnzl:%lj[~{TU{PH$A'Ce5H(H~ eδyj%XU j{@̉h/hx^._5cțE<+Ѹ>=ȃP58w#*_́!fv5K‚XvEO#,fU"?rLSIo41E!3FͮL ]+-ԛ- 3+Әf;ƚi$@Ien}coeOĹ+]lŭ>S48a%&$Q#ܴ׊x5R%`~#*Lt>6SDZ1rucyne"(s wvEIdTA#`YEG=Ν[(-20hFSZskgn9}ٰvT:Ryu1,=yV*5}Rw¨GH۵@޿xY#+2(#%tqвrQdi9,&n4Ev2 0B\UNV#+KMPa勨" 4AXt__eC2ġS;Tñn){OH#J(#+[#+m9k9a:ߙܤg-`#+hѳ f՚jEX"xS`Ik}n)~rkQg <9k15@-rwbM_{*T](Jo}IM'o5zhwOQXAtx)opH7VA`r5c{C,=lkE'!B0D4/G _77jâxH#+n, j:ϻs{xY$w5V;`+lt!ml>>6:s'^*[,[Ψ:ISb`4b/bMvv*)eQtȨ 5455xT>l0&"D[9iR6"n9A&ɩsmȉ".|HIW{Cq#)&9qrkQ}#+ɢ(@0(OZ!a<s r qIe$@ )Xn-R#)@ؖ)n%0R zGDKX_H9*TA`҄BX.mpcn,[&4] ĉ*b?S.Pq(&ieԒͯˆ cNͥ72I`hʚy@*|/obn.l6Џ}߾L#d7u@ʴ\iq3Qi& SSBLPEK#+:TH5,?rgCh#*iMmeuexuLKPX(V n;R.)e!"9CprB}6U8U*nEyV#+%pBDwIJD]]#+ʘi.^.w Q)?nS<|h7zvM*l,݌Ł}ϽG,S.0pmzml7$$~ަ~{u#+`j%#**JX5if٦Wyg'Z"MQR(wf#*ywv#edo)/ #)GWr;r {pBP"l/"[׳#*}=Gh2# $[M\Lp:qkwZ+P; ŮZ}}ֹ%l -']mȜP|#+ m5@"Ӄ&; n6#-v~#*>ukcx2C}+膦D2llrӾ;9 સhǼȆGX!]ڽrȅ1(Y*J65୯嬕 $ EKmE|e]ZMI~}4c-H*(.ڇ1,7f:>΃3 9^5^V\cNU(ik*fn4T$ u٠6}i(KgUT9/#ԁH <ILDy#)}Hb} c-@f>]#+#Yo&pe- V57ު#*Bt8 y3ÈHGP9L$?.p+*3=.mڍ4#)-3 k޳`Ul/f8<R@:maҞD4 w#*e\fTosLAU(6'5I(;ypq:t}ݩdkxn7ɪS!I#)Б"~A;cT7Pjp`5190GĨ#+ S5a8(–եdrg m̢)`&#)AW^Jp*eS/^rpQa@יaͺ 뼛&ؔHQ(e*Ke#):A4PLf%bPwb5qi:64=9P1z0Ҁ(`$O `Ay;6z0:q}Wto4!}E>S#)R#>?(HBBLm>x-#)]s3qj3&y괒}{C`~nUnPjaa߭覞V`wNjOg|$ō\ft M&OTkTa﮽V2}83[:x8~y.|DhGQOnj.+T6P6q,!CI”J6 m*}ٮ8I#+fT;|oCvr:Up6 YC''>Kgۉlǒ!<=Aɳ@πjȐ@^H2ǡCRE5HaAHgk1Kj7! זM 0AԻ!oUgGQi_KJUԩ{^r}:CF=viZ=2B3}]!ۮz>p&$,@c~^r4loڱ6mvf;S3uA׳ɨz;o٠l7-h!7;bO#+_pZqۺpxhZ&L\/Sd"afh?~ gI#+0`fn5(3z_oE.+qc҅ P:{,=˛Vƛvim/7bޟ#+?B )WUҭwȩT#+3ӜlbᷧkAֳ1|TB%oJ?w{Ds#)o/o8 8Bfy3ctUe80–.WK&͊no}xN5{XF>c&$= .*c[0"D>Wªg,Sf^ՒΦc#*Vnm.>p1s8E/hD߸EՓ:֫3-S:|RT!;t/)埵S)W r26Xۜq$2$ɔÝi1zՒ)ƊK>TGU7XÏhA,#L8 ~{7{gƘWG|9Ut#+٨@JL3i@*%~΢5oaR44 3K0GWW yognηxU(yBQyFR#+Ii{'UHĉ;E#+oScCDvc w_8#xtLsNxov4"p1|Mh#* #*~+Oڐ'w<ﳟ{TyE/e#*9kn $YQ[#+Fo',qc®+F8'>owYͦGV=|zt]淇 $ kFoWú4TƓΌGG]&g7Ÿzߏu'_C30BBr.)n0o(AދBrR煞Vi ۷26);Ů^;pӯ{ٙl 7V #vl䰣Mz`ЛG7&hoaنmYYv9t,I*\3f3J0le||4ɼɥ0Lg(%|_/NW+4,VZIdE:ڛv a:RWKYA0W9$3l>%3S % '$b^y#*1NgX&~"SK$_#*8N,S?]ߔq#*Na=S0I GY| #o_9 KFeު*Wۤ)o_q|F-a/XZy|yd(t!Vs⣋:c$[5t5OĆ!8KßETB=\+ ]5~oqI=_ EBp2Ÿ-/|$-ys1&4 Πx}1t9q .״T8Lz}ۈ G=N'z9v<9׎#q>`4aݱjۯ|wq5Bk9カ}u[T늊*%ZzLP#+ΫG2zeuXL6o} Cؙ&򎨮ܽ$\:>c%~uTȟQ:XF,ƴǽo]p_m[gOx*u#m"߭)w#*j5s}.fc'lq/3X5'_X}\\oӒuywt;|1g4ð)IJGx3G..O8w>!ܱ(1w=H].(4qhNM}U8BTmQ5*t߳وy0dr=rWJ(=Аs9w]ipgaby!Ahh Sp:ܞYpum[}55T%"T9qq yg_ ߃%IW[oIp.n|_]9qg=tLY#7ա=T,yZ]X4L}Qٕ8}&:yB!r7?ߪt3Zgo_#tk₺m<9HZq_?δ,aVXa{iGܼf n u90|i5ǭB< kf"l/NHT!eôakN>f#"W`b nU|$ڀ^u<%뺒M%(4`8/#*#u8Sx,+;6υqxfhj4t:;?UO%AF =9-&8 3,B+Rw.]nj}xT%F̆4_ek Az/|AR#*%#*(LxQvKJ%j87-TⳎ KM9fw,LЦs#+S['՜zS:4tXS&sAW hȚ>DLwǭ;IjQ|Y%HY$M?8C ДXSEVѹ]#+i% fƖ.^Y]\*pO"29UDq'Ə.QGPYggh;}G cҝDqf`G=>=UixṴ]/_7M|~Ȟ"Qd]}9s:Re(,thhHph0HD1#)#*Ç՗Xwǔ#KP+ZˑEב^!6Ύ#*|+qS;>7WdP"@8Fh>RPU:f)%&032ÆwX#*8r͜>[xHh !r.?pN"DMIۈrE2)"0Hi,î\V^63Za"%i?KYTzaϴ @׬RY=2E3@K#+4ӗ]YF"B]+QL'C^/؛ZgMCƄAY{.Pܓժ{ә)Xfz!/>9=6ާ_n_|/Tp&tK&m[f)FPe|{]ZG!x3DiOf<Ô=9-U&#yzw6-4*=?<*1O׭}ToGu&>Szj+>pܿNJ4=!w(gE.7*BhSbmlk-1bRU 0r 7KVdV=pt{.:VZ\'9-Ǿ#+k#+tfsbD?~#*X&q_-)w- uB#*M}7 #+NF*㿩 GȾ VBK?m)А#N=擉nsRy [tB4nz#*U6 tlPkHyA7" Q'$8y= 1=І-RSPlLih&kSM,Ư(lً"Xy~c=/KpФK]%߃͕VYd0=)YHQh3T1bT$ΝvхU#*[In&h'/MŒړ)7^3>~Iۖt#+>۹9\R,OM5@TwJaϢuYe҄"J܍-l#+TZDl]{,{UYݪ1(f)AA\nEwm{jSlUS!h|jߎV7M+fau+ymtJovtSb V-|/זۨhjV؇ bK9A'~1qtA5\צxYO㛆b*2qeCnu<X &G58llR)kjN @h|+Yv^x\B3w{c}WἺRQ81ƽ>MnFZKd|hTE6a>l- Eu׸9xa}ZK۞3bp2py+S4AR(o*ۚ2#*V!u0mM!zLtM;`9+:E映\ۗEnQ9S#;TQKo±*#@vFиb3NT6WCujc]O7maM[ɐ5FqZ_l,#$ PBbYtl| zϘ'Ncm|%O睐H^,nvLq2x˜̖7'qw]5m&`e>TW#)]>ИKGI8c#*⑺԰D1'vC7Nu`}tQK)u{&1v @e!};7{tr B-uҕIj~Y{{ՑGsTJ3g׸d^?x<ܫJ#<ǰd͕eLmܓ}¸ĵrφY|܆/C5Z"˦[d;sO9vL?`FJJ[C#)P#UT%35gbŸiU>F傅lVfr{4@{GBTdʹؖhmK@Pf[Qvix:7+"Ϝɜk,i5\1~%%t36xCߗ Ecv\yX 3grJ©do&/]m-ͷdOz{C,zy\*ߪ맶F'N#*%~:Oz_oGCb1!0vaI͢>Ϣ+#7EPkӞ7TUXQv3c{lhSrFռ /߲1\9?s֔h{'۟ço=CO|4#*ԯ@D1;~X3z,{ Ƨvad81y#+(`W;_>M?)al<%IYA#)&#teİf#)8$vXYT.:#*?yĹKj+X! ˻_wOx)fӵSˉ3Я+SDSD:1{M7azV\GA6Bv&#*Sz#)$Q>?u<ǿ#+pN@bǓ<_aWX1f w}vfȃVɸ#+COy50YeIƘt⎡QI|~E9ͳP?;4#*#*4`'>a0xo6AiHt/4Ba?1Xp E)KՊI# 6*oWA<5 #+V(C?%WZSJ;"UYr=F2#* h6ڂ/~{gx߀PyaE>jLS˩i\Cip]iJ d=0IԽF*VɁUWqlFg#)? $t^!S/)/w{2E B5܊mN P#)ґ p!D#)Y%_BӈWSo!$CShY{7@LE$]#Epm2|eg1ZlfdF #)A<+N9Rws؝n#*Wv̀:7vByn!psTZg2>w,Bc4#*풋^u5ɞoȃv#+!4l{dKH5C/EmDZ$:9NhrJ/<)QT PA r.i78qCXB3R= 8.й93aV9fZ,q\ҟݽ$YVaݻDΫLUhWgzŝp3kg7=avFFFkG 㑜7n2 w̻Y6# vb=ǩI jR㢐l/M-%I?0K*Rn-i|*k)a}9ӫض/B&H?)եj,;H#+bD#+`z?ÇEX\3@e{5@Dهgho]8ԂXd#Qd:VТ(2*mM;5NC~7⨸Z BT<)#)E_>";/i_OID4ԸaQԆ߼>>$B%RBS ]n7d029!w#)n$,0%F%"d6ábDJ>Eψ2yDSMvݸDu*^Dh(6VcX)Q2>>aťwh?T o'tb$Lz#+yb08v7 -#)G+ >|UO` .-m>es"F}!!gGHX`qM !gv3 ǵ >AZ 6zİdzo,/S@h"$R,V6=/(cNaO٧MNd-v'p=A{;HIwIѴ8yXD#)=z>+#*YSrv!!$n4=bڠZ9*h#)@OW`?@$|TO2v**ݛΟW;P c9.4n99z2jYfn4nu0a\=u%`0>I\#kFxP!XZ :ó8琴At-CP_<򮰡,ہz-)46k7&Ic ‰e^ŇUΦ#+E R fzF2 "K+ČX3zhvfsMy1A3=S<| #+qz(,;LDjvQjk|zz||M#)|خgCaO XxIՀ捀t#*~6žd>:3B 03Է}?)*v Vq `C ZS5@EHu-R13脰UJ&lN}w u6h5{Ay|{٬qs ^v(r~mH2B#*,DONϻ1Cmð:`O=CF04L[e760h-2``*\H@@ I 6!6=:M`cFig=SLR#+ X RcXͤ3bs:b %0#OmEu"fŲ$.$"@*83M C*BjԵЧCЍ,Q;fX 7ҔAvw܅SJv5S2VvAh0"gY|}j F(>6RO[P#*X+HDE4Le5|=uW-yۍZ@6QvE$,X`)GP|F}^#)v@g@`Knpp -(>D[HlM@;~)~iWam{F4V,kZ) MM/Mu@vׇ0t'.215 ٹ;7}\`3pf=:n8PٴiC=Y?a;ѝC7 0[_;gH[]JzHGXUpU)Xz#@zu!"ldkmԷDB@0!V^>~4yLh4$drѶ/|Lԟ!1)O0b!a q6a~gCqj:hLbC.ݪA02k٧Wv$xznVjB:G6HB,o#T}}7Sɰi J5㶘*)Q+x˻+YM?#,O9>[hO22#+5&~՝*><|Zn) w1cBHQO“rG@CK 2G WO. kI+DP0bbi0vk)5+RVnE.K#)?@D\>.ӳ#+<;M J9VJX,Bb8p 7<58B$.=BVo88)R(C.TL&{v)={t!6uHD,?]0!5`G^p#+ N|G95ń%1#b<~Mxz~Ry3@1K&2gLAӎ*4N=-K_+noG~caPدаb[aI*@F2!7GLj12F6Y>wmQ&M\ CSv7zc-)fã{D]#+Kg#)@%WTr>:Miu(8#+vrvI"8~5?])Ug r2flf4sT DQgz87F0rB* J@m#)89t\{ύ #*}L8A*Z*stFA(Zl2ـP:Gwby(ÁޟB P0PaAF`.l_;t7nIx`S\cNίP3=obzO$|\@zeG"t1FZvnd`v;Da JNC̛GM ɒf a[‰i.ΰɛŀ8 }p#)!1HcGT@-Oҧ#*Ziva& Q2a]BJ9!#*>%.A:bR}q< {Lچ?l@2?@G:y/SsL#)L#+#*|ކӫ<#+߯}z#*:8Eӛ<%z''[颵{P}p#*[ 9౹7sG!f`X.1#zc8#"**d +#+$ f=gMС#+Isp%M0;k8K/2/.q>Z4Bj׷=΄km`#+cĠcm43(ؼuts&?{yyi2Diل`\lSsRZioDK{8+mVCaTHũ j&2E.hV9x ӧUUWxu=4(@ 6ߙ#*T$ygUSbưfnEYo%5[POu(&8W=.K0vuj(P"2=;9Ȭ?Ef]C#)Mff}pk+? }Abe"LlY4SDda6X_F#/Hl#)ıid;,lm#)]O_o2cBG0t?#gsIv`a^+3=NK"#){hD #)\F^71M=>{|]#?#+x0)pVWKL\ex j%TP,2 R(ɬVz00'A&LbR@+B#+b4(EiI(4#* Lu Z,-Xai% +"@3Oڟ>pBKft@ީ0 .) O1bˀ`l h$݋*7Uh#*p 90G7wtG24*rqCqzQ1؂tޱ|u|$FzsA")_AW7p6g@D]eSr P"0h\**]Rf]=VJWӃ O1J)-,4vOR[lx#)BF*,Ƙ{僼w}WlTp*!9NcɄQJ\rMEwQ<̙4q}V8#+~M^e5h(#+y=;*ZAX"o0apH{lO|j&=@j#+y6m[)8Lho«dTX/R" RtR"u!hR0NK#+qr a#hfNgU<oVi4{P2a7'PU)q~#+匧E-KZ;Tu$ZZ DKxorݰ7]dN%&`d1!xY_4 ~0Z6l/|hhih Sqow:DS DVZD|i^wB $LRJdE6kbqEvKN Y#*qwD0A^lUvY b3Q{Q8ϖN1uZ 3i"U/4 G!bYͦlBMXr)~iҊ[мJ#*F7OڒW"bU|r*պT_d'"UY|+N&W_48V<@LgGGN8QW/Sd{zTt^XJ޸ rJ) 59.TR#+Q[At~ܬE#*ˮN[y;I#* M{aikej1-T+LR0|| '|5:m~Rͺ\蹉V<]?3琧y_L\ӞZ+A51*K #bk#t[R#z>NFӋVzwDNɬ=/3|c "?X3%z|cgt :p#+ӱ1##)om!|^A"<#+|I#*f|(V4g3 J 4s9 —g7GdJf˵ćeDE+;%J+.iߞ#+vҌCWp4ƹR8d&[fC(f k5 !Lj-$yi+Ly#*u?g>(8HoZuQV:\0hA 36" "d#) C2VĮ[/pMOBT⃾0UN :O!zhQ;1A0!9yqfV*r.nj1GʸJ(j@JLCLЪ\)kj|h+2;u|"Qij̝mpUũ\>yV&8m]gfkk3PUC9ؿ#+!b1;g?G;x7#oA`)G El4#*13#*#)9w_U_#+zhPe˭7'#=>OWcc=fu&ň{IY9,ӾT07L}q[R0ٽ%mflru;DNQct{^#)D#*#*#+*  454@@cgl *d!OZ] E M=~ڶm^Ŏa2#+Ӧ1oÀec'dyRۣHuoD-ϧ4otOӪQ>; Q#)8ShFC7u慠U7+0Qs%X3v[ (YLcVYA,4!`D%9n$HHS3YK~7Y]#Cd}8C*Ij"wm#s ~GfJܨd-'.BVPk,C&[5б;(l5#*l)y#h&:,Cm^R+lADv.偖t(Q[/ٌ 1U Nod*+8P!EeDQ>ɐb {|=zf3>aDrR^ 'y&f@.6[Ít;7$Gt\0Hg1>=W"Lv1 T?bʃsH6f"iJS#*xIcʫU4*C=2S#+Ne/Dp˝CwP:4RgٵVѤ)E0٩<\>nV[:38"DFNA,8PݢSe{:vF!mfއk9r(@np#*$d=CT:lx.|TCy@DF78If`W*ӆTlPbCdڪ_>{9:n8d70jrW/#* [3>Bt Y[BkNHyqzi DZvlL~CN.f~ж&ܮGjbЕ#)Xy&jHRP VG6q1#u #*K~3" +@ i0yNSx>H9riQ~g9}=PgbCj# bdXSm"NQ#)ÑARpimŽٱy`RnMQ$а#*KHb ͎,P<]My!-9q)=&f4/& w&9pILm#*i#72yֵM*meA.z>pH#*,``r82(}ݗ9,lѹH=σkhܷ7\2QK#+jQ3׶4_ 43Y[cfd˙cl˕b˙Ǚ.#*V3ݝ (f.rDX, @a#`S `m=r&9~eǿ˩ x:jhw.Cnd%QvlWN.^wV9 gZ5L@xHd跇Jv! Vgt&/y ݙLS젺w;$>1#*4n5dYm2(DI#P1#*J[zmgXqrAgTm*26\)SMM6C8B3yPXT)N**,gRT@g {QGaXC,#*/I4PH JČ/wr]L!.f׃>I#*{}SIXjşa6q!&#*# ǚTA2&8}Q6'@$LSn@Sg#)D;jڪY籰횱(ܤ&QD^"hJƸ8*^HB#+29:RjZS@Jib vEMk2lLc#*94 q6(@CCiC'G)fNQ*HB$:pd\ox[U]2=7oS6ϊƍ׉xyHTӶcNyoקs=13d)4bBʃԷ=QX&9\m,i c&D)ږ#*] l))V(712Vpne.S`a2=<.)jQ/sS^ϛԥaO5PԷM T 2 D9 "Òp*as4tӷNKngQb@ QH@,n1q#*ЎxpjҺYxkfl'DLYb/gV.,h(ZJFwĩG_YaDFRDhH wq'BE[TP)\I@ W)=)<7?ɗ/iXeS{^ X>|*܀{N4> B"HȬ#)IlJ-o|p}i @IF_dsjűhAˀ fP6,sz ;!)'\gz?)DRT c^9{_ x.HÂsTVD0, G#*#)H6ECB@!Š>b@7FOdM!3Y$;#)Lˇrҥ քay^l3E"Wv!Q$ҾTb4dz#ys|zeh+,"NͼT*vy 03:>j|N- [ylK8M5ۅ8 _PPJ;P|#)8ponAB(A A n!#);  #%[2n{keRu3/;ʘkp(P)#)5q*6XSHX0=$"*Л)ܮXԪ)l׮xEz.Lk{5uw\csIY\u:]um%e"7JM #*N"96#+^^m__V.,=?锶#)K?y $"BHWFtpoAkڜq S:!4:6n=PĶ{L>&yAVrJ ]fu1ͦ Aq8!ET#*cgkkѾitmr d8]c1R)4fs4:݊Q2%Q8 y"F#6n$@,C F7&*`#+#+*2𔰡3B<ذ(03"pҏ\B"i3T $M5iJa#+Oab~Aay$Ajw< Iq <.A~n;s^d{v|+AMdAsS&fdh5NkTFEJ):yoNGz9I/aDhh#+2_J@9Q9FUH!ۄ$ˬ#+D0H>ϷK606sa7o}n#*>ym,DLxx"иz~RڍF)IjamY*ml*(S6#)Hq)T*NpG^A" !P[DHrK_\sV<23#*2®q&dcI#@YeBD0M&냲`3υ"jXg1׺aGJ2-@#*UdxVa3U#+ #)!Hh ;ˎ3Vȶ..#(-~qOgx/҂6mH9#) q#e}m1Y*sTlʭʹdZ)MJm^+oD$\`Cz*H 9 +=Et}=knro)qpXOc!^9!!nGz;#*ґzW$H|P |DD2p,)Й@e $=8A#+"n[ytn!@M`" 礲|m)suHHsC: վ<<xLUw3E#)ϖ%#s~}tmB6^^1@xzm MH9lc8H15#* #*;k5@ZbL =EJ5יieN!U5B]='eԃx#[7kh7Cs-$e\T헝fpL-#+6#wA(DIA0MLm*۸>Uk4+3#*g.Jz? t`"#*Ơ|-h`4B_yՖFY`#0Rb**szd䀶^0R*B1\B?|q# F&Jeq0G e{B,m"觔EX@H}%EC]3ٍ陋3#)<^ޏ@G}qdؿ=w])* /_DP,#)MON;˪`:lKTH"HFŇӕK8Lnc>zX#) ,iX!P4O'~>(&ݲ2MS]s\(8e{գbJ*GBFdV`=o1XcMmҞwb#Gr#*hć-.<ҳ]6=bg|GXN9upCX!VЮ*Џ.գ;iwtT f֓n,޳.5f#)1H' psRԖh<.F<$x^[6='aɼ\!eE#)CQ`/4/@roq `g3s2sݺQv>i\̂@;38^([:mksj.vfw,Opbd"$YD1pFXH33#*gRU4،#\Gv^WμQ MRJ#+=߯OIE>Zk"Axz>z'*ؚlbHMu≃gqˑ|4jbfr;:, :9M} y@ԌTR:~l#HqB:lN0$=HDi.5\.[4eVf@NLVk/gn($wV&|tYU]Wa)b d !`|nup#)גXS 4fI4@}IVkE#NhZ3 bv,;J%J53d~x&#)ْ<=$A3{՜aN6,ɁxH#*^wngĒ`6n]hrݹnVnyo..͵nk+ [ >YPHT0gA9Xn% 9Db$Q@(a ߈|691AaYh&p!1U'׊ nϢlm9Rغ$!!JYdf:HPF%ӣ~2 ={<瓰/2Q yel2A"A˚(J5R@銑Ѡ.thdWg0|OJ#*3֬w<[uyU!$tU I)+TX!֊U<:_&nT m^V1Q*#)(G,9[#Nf^Ȓ/jP*(Vj#+lSJ#*hdbD #2\c p#+"l kf#*bXnSx\R^k$~/hSVLFMsZ!l~>JBXm&Bd8WW)3@$@D׿N`_.OiwqdQ[0!U:D_o^7l#+(D(d֐I!#*T43a[_]4˩<"Nط|>GnTpg&RDUZ.ڥ,]k1CnG~(5DH>ƴE#*HQ\l4 &`h){3bcBilw` 4LؑCdET To= !bYП9h ߽'H<4$(4ealAB$. !uEDANscvZs#+EN#1F_]iۗf}/#Èplxt6 -K"6@"p\(f)Bu>\{=L&J0aHl;)9ݖQjG,drcԌS.6w,fCUbufg07@j{r k˩jYFJ$a:fFļo~=ySMF؋QdA@뎓j!L: Z@nr\SME3wA'a._Ljk<0'7#+>o](QeFE)b<oX7*#*~"ӌuKQxXr53 ƙ!#* ɶW#*xR6CLH՗ejo[:QcLYtIe4 `:qpd(5p AHa &0X &D%"5%RD4v5̓DDQb&TKE!bCT2#)"I?='#*__3k=Νf#*l3.Jo1MeC739NY˕Kø]M]^x6:Pm"2.'=t `-V7! "-ۙXMDK^؁I}Cgi8H`G8峜CO30<aPt0ɰ3N'/ #*m9F^t!tW1FPqt'>KױNMLbGzQjkAcS"nBd5UT"aH @"0c =-&E絙7 *H a#+p`Tp.{!q>ɨVlYh`_y;SLӪj#^*"e[{u˲Ž2M<79'dt_t0d!ɂ\|IJOJd΁!!D;K N#*A#B "ݞv$Z6-^66mƶP-mdIhB}{QzȐ=wYd}Gn|,;g,rӴˡEVk}DM)hC&i7쬸7k#,':nQѴ qMOc#*0^OH"?SgP>T5ʠi "#+HH wg$Hh-C\NW0BieD\gbM-8-tILݽ߯NQKIr58q \3OÞ79Y`a&P/c/]?8ϝ-C cNbr6Wrw+9 l; 3=*Tu&u ZU3~+TAa:i.H[b̚ fet]mZ|7BffCk40( |yWRnb nq1cFWx XT t?>Ӫl>|(Bk\ЛѤ=xmi$˩u9o.LQrf0O4u).]&80-\_zR\Uʲ idN)/D9%8̮(mŬ33L#/&w:=b\K&bsS2ppcX~ښ|ݕ3Xxێ3I.q2:: `$Za:ĉq)1ퟑˇ~S*oNgw::_c8!~dlCv^L;۝wp[5iŨn1PF~BU#e1D-j"^ސCk#+=#*"5CCniMraGL&( nJwz*"N,L!W6htSW~ kV>S./#*4ؐ ίN4L_\Й61}7k1/N<3RhĔl]YGVR}k:~pߓ\vHCǝ]F%qЮ~xYLܹ0riDHD'G#*"W^ݠˬT C[$Qu<_kpr92XV0WYMH/#*wKlz)2o% \pqݷ1lfLsb&c#)5:ŨBԓEC8ui1N-]oYz2ߍ3ZVV30ll#*j&Pދr`Dcpd̑豴u7LYo6Rqs0}F72]tֱכpzcZ&BQCf-֖{hTV65ôd{ee 29.6DA,IV8:0C/H3㭱ce#+'xh֒#+%!4Sls,ڋ|ɕ0^#+c[| "Zs6S#*m1DS59XFB5.pZ )gսuLhhg' bǢDӈX& 'CCwlCmUy0&Am :.[VDj-nNp5hdKY#)cT#y}q:'EHAZ B#*5r{`Dxpl#!pn ' /X[^! A`ʓ/ՓCRISLu)tN ]J4 X(d=M(޷L84*0 QK#*b+b/#+!Xأ:H3Yf *L#*S)eh ڍ9IL55B=+"f$lɄ1t[6dsl&d$ ett6y\ GUEِtdz9"b]KAG p082yz{zN8R$ØBP<>V-g!#Rc\@d:;{wT Mb3D҄ѬsfΛ\H]K@¡d#+.%,%)ːY7#+AInd 5q8׋(?"a9|l-40 h8 vS]SL+D[D.C !H "x'FTͻ2"s0pݡ-#+ E7}(G(N"`b5mD1 !\Hs:@:.sDM)eZ"2"#+FJ\H #+iPkfm&)*5c1#)}J!hFCۈ JUQg/^BmkL9 >#*p_"#+?`iQ-Ť&%uݙ6-_ !?XKSHLCxi[<]z!Cz?#)B##.G>'4Q^7"ȏ#ŌДX8RQt_r~ >Nי-e٦Z3uూD0IbS#)[7r1(.BYB=-6bk!cTvĢ4cx(ֆ+HI#pbYWa,2,C`~LJ~p@u *9Nx -hMlm+EhDIQKLDTAI053T$G}Ȃ[O2 t{?ng(%0p)ƘB[ n#'0Q#cja0CfSfr nT|Ё;=#)f`=Ex!%h,&D3AQ`-~[tJdCRP%$ʯT@f\<e\ 3Gp%I(>`dxDH(R&a2BfoEJ 9;a$|5Vƣ8~96("ӊӣ._q8iNɱɬVgWpha C#)m1)1ȽB#*"O"ʁPKd7DW4T0E2rѨ?Ǔ,pC)׆ب$,#+֘OFP2?sQçM(pC\Fv6h|.PmA-#*8(Vɲa#*E5Jiigiȉ==pj :xl`"5hxxk #*:B˻OѦ_&ӶL6=.٢@.IC:p85#+LXqCJYLz(\6xþZ:IDn.ʑ8wb‚,pHB)sº0H` K#*#)q )@f߱-#)EB& 25wƁ^#.rH@WX#*}}H[5"vP0z?f@s#)9K@`?4s >fүw&o$P&BI$d"BĄؒKkFڤuo:o>ӭu/9&Pc:ubr`;-Z6*.T8rκpM3&V殨ڧII,-\XUlö݁ $4LKL#HS͸= )HIbX/i6M4,ey˷:ݭt &)X#Ua˱ж#Lị3i [i/FW8s- 9G8FdL|[ŇH8)zPZ2TC֪gOo(o|/oSc QJ>fL8vݓO˄"y.P7Pll٭ؼ nSg0p0DV #)Nf, EQdDJS0P"4a=韼kZ,jC)kL#*8Ȳ@)`+k(Rk7zF(TFz_57]Ȣc-1w%ۮ2שι;wk&J]j%`ܮwi ^wJ&jv^^kxԅks[AaIQdHSh٢+kST)2&جԢ 1b+"C1#EFmi*H aecڐ#+D"֘6 Xlb ]@ 3CâI܅';O'/DxJXw!e4#*>'ۊBH 0Le8!췑q(UEyEP@36I$夢#*tLa!v0Bjԉbߪa 3D4(C DaÊssX̢fJ?cna Xxy-E#*Tx3#+ dG"C#+F,;6hJ9ӇFZF#+uG5K6g2CcL(7^Z08"ӻw*|ZepX]{u.+!7".IHY\٨W2֧C6Ix?ƣBP|}2|O M>yW %A/(#3bHdZjڼXR3Xڌi,U7msA6*vKf&Y#dLkaˬ&Օ1f1&mK⊛TdO[vnbe&֦%RhTb[9"IR#+Ԛm[$[]RTPՏЄr9L3)Q!ymk{WLTM4Ze1m)*<[mB"elڈS 45eRZ0WKF֍rڢD#*֠S`dAG! -rQckKf)i)-^7#+5+e6զS+d՚SE*KcfF(SkhE)ҔRffX1J$ԚRmRm,M%51J5Z4j1HSJ Qj)R% $dLdE,ڥf5I5)6֥1cJdB#) E@0#)H;Si4_KkkJmTUZ5WW5EWUVe6V*U dV9#+Xnap޾w练3q娀B'r ݴ-*IRzC5M aP]?yffKWGو!v.˧Co"$=|v`Ի\LvJ0*EeF֟1ֆ}cSŎΘC `Ќ=Ӥ$!PJw̖=Qʣۄiڈ8LR+-Φ@&3exC#)E~!┅Hb]#)#+5T`#*ҫԸW-K>#)xx݋̼SLc zvv!" dRo4#R ۲eӌj5k %ۻ#+9xy^)ǯԻI\ ߰<?xn#*ЀkﵞM qaQWknOWƽ,Euyw.^X!*hJ>RPD16VM#)dMtl0H-eDqRJ'&j%rFctKCX ,g7 n!LҬU0r 5+:G[9c0\1r62$ g u7C@'2jбd 7l|¨5" JL5bݾ+)^)kXxap#*,qWX4emnE9umUo=ld4WJw55as@~b;IuP(p. hȈm˥"@ƴXnWK_.N)b>WF$BpccVyu"iʨ5!؈(ɡdJOY{TiZk[&e:vAET*C,Py\ (4Ur֌75fqzRqTyMpڦ}oUAZ5-#*ʘ%U.G,pmg2Ze_PpHXV!2?#`TlZŤj0 KW,q3a)#PrfMv6DL@bTMDZĊ&8\{qx#*ߞ8BNH浨jvDtRBdwki7іT\ 02KM|s ePf@$;h5b)W%Z v#*fkHS5q ȅDB#+Ʀe=(7UD}z !űoVyG8H!/!MPR,$)T9 [o.XE3{s8ˏӑ]c.ZfqH7=Y)U#)v:)W{,*oo5ޜ~n;NI㫠ɔ.nj3zKbFp؉FJEi3qeho-L@4jE䞐;WC=/rZ@خʋY06ZcޫY,X:kZ#a.4W #Q#H }X`:),qfǚz+ΞYi<^Mvpi۔9vۄN FFHr, R]SA'3Vw7JJ1(D6I(sTA-iQwu[J݅((e@\HRcLoL D4A#*2ƠQ)+ M6u1i"@S^{Wg|ٜT~&/rK5o>E:}5x )I(MlB~hq$:,)CX NRIfj6mٺ蹴LRZob(%k^FԶSZ]5_Y+VU5$DJ,3PBv}+#1qpEFE P 2Ӊ鶺E$P ApU0;#h eP#+JDa0&FlV8>`7@|$@ƊD݄#*GuU)c <;3p:T*i525MBE%*q=N3M,^QP/Ŭ.%\CG@ 3!oWi7m'#+**$h)"BŋS2Oox3P0"408"TBu{v0#)ѐ*DDPϾƝtwTeb(I8X{d7m#)&iCp#*\ϙOdyi1?t\MO}i&kCf'VC;$u#*&DC_y(5"!>p]db`tyɃ#)`Cm-+Yzuh&qnS>P~,y+O`z-{Z/#)AEmK+]fۥji"AEf#)lY!x%0)(aDI#)#*=7PAWVJT DAJ'nǭS~&{A!)7j6;9ǡHt$ $; HPHR**;>IaA|jT:l6Z}\i"Ԙyqahnڻ~[ewмjx[ P? #9@!ېB#+B%#<Ô*x:6#SFIț#+򐛉6cmgjRT)`+00 iaX߿oUI+|/3[#)Ft91.ڍ7Hh&V)L#) #+fV]fP݅"&C#*Vi1ԊUţ!F!ů9ԏګvd& )(.5 qbغ֕ @*H$Fd 9 e*e?n;0#*!6Kd#)1MF#**Zƹh%M޲'rEMDFsjPT*IIbap%HjFnA9Zg#*ZuVK2.k0,$`CE5a Xݻ-E&% Vyqh*mD),$[.\Aak#"ei=άmF#*boMHZ#*A~q)vLͪ#*Fd(;[]חf__(t3Q|z=U#*?4KH#"0n@DTlbMo-Q^urLD`m[nEXT׽thEF) >i#sbqQA,?y^egx&#*~qNwVԦa{3PآD!Z*hDBRkE\鱫&\߷FtRnsݹPVƮdA$"F]mW5)X(UȑjZC^δY5cZ͙EBHji S4J#+jͭm4i$ҕ*e÷mTmS5XχqC?Sb%]6@Ag` %D0T40la B,'IhE ^@+3j 56L f8эX^+bH(l n=]g6/y2 YTX#*̔ 8Tv綂Apl6\Ǩz\ !aW48y`V-vJIa8=yFv3>ld@E; >]g PC $Tb-# BԚHJFmZmؓBTTZeSfMTQL2cYk5lme4֓j&mmHk-6Z+J @L"N[eB&8#)rQx(Q AIQuQmvUkkvH ,pD7-F2kޭW܍+IvAArA(-iE>?+%pI>FF9P#)‡: -Dj {$ Dؿq!J#)Tr#+-9RA{9*Ez:ٰ#ˆL\GW@ atT3W;T!aFκd&OY7tG?Z&6CyD;^0|v%&USd&6#++ɝf d%fӄp#*op_l6- $D@P6OLXYrP5#+ēi3x:Bl@/#|{"{r> _)I4:>-M=8;2N$/VіD qlcuL`2+mF{6mQ7ʛ#)1w>>J_؄|RL0p-#)*#%KJOvj1gY/ъH()ڔE`,Y4s54::p/BDMueBDPQQ#LyH HȚhE b}1襺* ,B#*h~2H*@E2Fi4ow 9=siM΄]&㻒4A=.$!Ae6 ,V!#+(h,\w"x| ȞyRXp 2P2C<q3 yPPCIYyҚ ˈ.yRIO\o^pd9-˩tԣŚ0f7kP"g#ݭ-6\Sxh5 :k[I.-p QwKX0'0O7NA't8M)b8T5vC@14F@c"[jbI$J_,`qP{ZzkR~Q/#*t!.dnmH#*CHoDdFE c_-..tՇfvA} V"7#*)L;h~ŅP72Lz2թk}v5 )w۽m xDltRNw,59Ŷl}!|8{d5qu_ʉ=|xA7R#+4*`b!& l11B#* V+DR!#)#*Z ؈:x{'g*3yIwXH e~::1Pï9A#)!iPdSn@nYGCt$%B:?Vi؜69_ú#)z_{y+2]xPD`*X5JDb-j.Kۥ֥ETQC??z ]_7wV.Bw&mET #+~`XF 2;#+q#)0Ԩ­k9\pcۄ6.$"20F"aݭdh$:Ħ1F3] Zi&LVj%d W, ƞB]@#*ڰDL6ٓ ;V 4|nl1tDKLC&qr G;"eb3`Qb3Lv?}Zk?4ė>ɉ?\KW|#@sj\0e1+i]h)Kd+jғliKFS5lU)j#+-W]sc\F\HD'ڞL̇He`aﵚ)Ǭys(ffqL=sH}& ! U݂F6 qr]sv#*E6eʮs<9c:R#) aUZ ZL>eɄm:#+)aCR #)&p`#)oUP. z7jpS4zέNCB S&Dӄ.!3))hl̡qSm):ffe@A= _9wXճӟ]ν1onߑ;}Ó#P3Ʀv}2w2K^_ﮞ#tpBg=zDi;3V<)WTW-.Zŝ/pӋA= ncV}N#ՉZFrYd2)SIyJ$KAMoտD7D:Jc D"M\ 4+b;uުVf5]2(D`qT/]7LLecH`ԵoŢ%⒤KGCAywo=JUCt4e )YZI:e`Ԣ5qw.ûyA#)sArDF#=$E>D |N@ QRVm!թn\uʹҬZZdk[2)x&X̀F2*FDU:t91 ֐}#*?KeI0FYL>KdEEkDY.5!>F>iH>?fCAфpnӄ2jZ. [۠8i` -j!tI,4gjΆ$RYJ cO}bxAE׏+p&\#*_p6h'pi`B Z#*oa{v%u3~V"Df#+fut;?f| b#+*W)[S#+O޽t\\Q0LYbI؍U!k#,'?`Z1ZvhR# :CH/tKj7疅][JF&IE{5y#mr#+ 3*jjAu6Qbx&{s)&tY{:Y:dJ&@ ~[)& -~än< dZsƷé~%rȡp7t@a08iA`9?&4̍S!1=P׫~^U}=3O$#a~:X7uY[a>i牤 *hr |Q-s+f'ĞDa þ4cU Q(O_#*CԊ#* axā$#+#)K<Bw 6aG,9PGu8>}yiO|6Þ1yeEp),30[VQ!7|PY'ܚnҋ~M2#*~fZ#n䞳@jF.ϩ $+ZZd=k]{%r^0HiIQD*'HZ#*@5P:܂P#+Gt)VE#+@VҶ+1#sC2րURV%"wp&ihI}~}~Lmήۮ.mAF#lC},ղ~fL\EUL{qZct,#+d]`DN Z. -R>Ͼ{⦢RBfb^j¯ގ#ڮAui#){{s}7*kPD,m$ث#i~ZR%~Iii{c$MDX#*Sku店mIV"d&T]wP?kR[2p1n&EBшcLK#+lJA#+ ȩMPŪ3v$lfFe"Q!j?l)H)0Т 1]w@Q}|+Em26ey6ʹ/:vRƚO&4h/^۾x '; EwճG20.< ɼED"5+M4ˎ K^ˎuJS=SBiN1 !᫒t7IB8Γ4T7p:Yp.lL)}@l)!"+$ PfˆZKd8 "}@$t[šFҐb]l&MkmrƬصyu%ܫr37uWW4!ceKsNVl\SZ" ؊B* a2"_"lnLa1کMs>C'(B媦V\i)uVQ`,I.#* 6r]W{ņ%{my2#+$$, PQ2aJTk{6[bC()űkfZ0j4TS4k&)$TQ&aEkD $9 Ap;>5j׫4& *3v쏝zwGgsD"CkS\5p:T >PD ;\SfmJߕWk^+tnJ)9I۴͋[FJ[JVl]muUQioG͘(ƤiJ#)6$P !]Wn B*R#+#*h.-)\Po+o!3.Sl/#*hGᵩ_G*_E>=Rcz(Ԑm#* Px\uf,FE[TlcU=0#*#*!Lj՘Rl&0c'az\-V2ͻG3%}޸Ɔ[#* wb"=4q^N#m*PMxC?K(NΏNlPmMϭ6s(U[4*џ y $Ħyٸdw0Pl;*?Y:yPa#+a_}n7[bEJ F^ǎ#dj2nTЎVԵKQD!#ɢy>>b=ᡘ(#+$FdRHBM;Xh,M@P(EE *#+%oݝ\3>p ٸ}+WA{@H|D#)#)AG#+܅J"`#)ҐG Kaz[URcmm|}cjv'̌-$izZRB`L].{Jƫ¤h#*3-Lդd[qV-a"J Š(T(`4FD-M)-WT.ec 0q4b,q*Hy?^sx~%\rSc9Q=a֓`0kmq%p!2e*-躖10^kmjfי5oZ|sdCCc'ٗ#*aCIsggXUրEI,h('j#+:iDϫ-+9=yލԸ!}n@lgGP9x h1H0d ( K +Q@vd Gr(6#)#*O(#'.ޞk7io^7#*aUZ/!} P~=Zn-ymMf`6 ByVt`\AHCIa1!$@Y5bRZѽkozmmJG.esκ뺕5f]Ko!*MMZ8*C8m{" ;r#QRK"11zZ]Uڛ>MOiuշj݊bT50C0>BZQ'8iJH#+c6Mj{+N;^#)$"͕lZcmYe m+sQX5F)36VW8 T7N5dH!%&#*)IV5$.\2ވ`jg\ȻP Nq\bC=HTL,m%z7wau#) =BL6 \Aa3pg@+`GtˌCo_#*AT v %{#AV?sEDb,8jW&h8@l.ՕA&꬀ (Ы D`i#))u fHJA,x.#*1(T*Q⫖/rɷ/k+j؆25YɮOUvVCBęial4$6DžI#*kCFd˕c tmS#+!f.Tb( @VDPn&LIALZ`mE1݀4Rnݹ6 hɨ'bWw; d:TA'"Zh FY#)CX&@N>_'On)16@={#)2tS )$#*(B JDlbH#+Q\ACjg0O"D|؟6rQI bG IQi5J3#*MĐ)##)" VAԒɎ!?t4`4qL쐊VZ)b`Ĕc/*CEsNК#$ڴ%艒S?ynZNOB$>ЉzC@]?n?&qڔrePl;NoQ @ (#)N]dW#kA[B _'_;Ԥ%?Voݛk'y}I"oؐ21ĿNN)iq~}K6hCZSYLӤ*C*eddGQwT,9^ȨwrIMLK7#TvyaL8Іg 0P`0X˻5 IMċ#)ƴsjo[F63IHa$Jyu2a_A3T#X (zjzDb|N0c7={9 lWf-2>#ݺxr)x~-H2yfZ=5ښ]Җ$ Rae wjcס˶7RY&(PfcDB\,83sD}w(R)O~acv-']23f`HQ/o:ץ%y/"33\_#=1=DN|.E,D=H/d hI؈-1&Lz{&6 m#*cGC&p҄ZFT!$2׭ƃGux;mr4ko&ڹ]aX*#cQÕByiQ3hw{|0"\j<m0LTɽMoy!#)(|mfؖahPglr4V@2T BaZg7y1@fl{i-NLhGU"BI%Q~vbM t B(d)V[~?ߤ+/?sH-!@OJ!}`#y$ad 4;A>;$g~z}/02#S}Ov˨WQC##zgC-Ni^?<^aP Y6J2Up)x2hş4ʱ^5Y!Ad؊CMeyq: 23Pf3䱄,̍k1ޟ Ƭ@S#+ l -ϖ2*"#)` Bddsיw)DSD'BJZO*;3if/1hS0VRPзkCN\}$)P@5` €0Sͅ*ZeLܠ[0-Y.a;*N vwYvhbk#)`r*G#) (G?ӚgV9)lv#)uN4H (BZ8#*04Rݲj:_Vْ"/CHMQ#)M]bSAǰYmNL߿(0e|q#TXh_iġ$o|3OUȕQZXC_ $D`b+[Ul8)H/ߗG2g֊DwAItWY2ERDH (1m)f HE7l}q2>~@X)@M4qUDb,I$iIB)bP͙͡$)dHlԥM!Ld(|2&wsNJI66gc#*DmB ;F4Ʀpfk @KMwUcrҫU|2GUWO8t:[߼cAɓ> ?3ŜsMlK&m.nHPB4rCF,MacYc`i({N@Lm#*QYpRY$b&Q" } ǽEC#ԈuI]+'Z"cI e -Vڊ27X!F2i6#)¶*1#*"IyؐgTuW-7]Jݜ7Wm'{]-]^n`\+l0mZ@`.D< @Ƣ!J!~5#)U"@cأҌ I(>:r#+/wN Q A R:\ՙV=ʵsġ(MZBҟo 12B>3> ]5SEC2dR_KP.!VX↊F(&J(xѦH%F1keEb#+F&=f5˲mdJ8󒷃AZ9, nBdF#)Uz50#!fDƣ62 *wT7HkS#%qd`aT6u֬QonhZ!p.rwQ9*ƀ f#*dEq042 t)PkfQ%#*bM! ]4AمZ!)HtFr"uB[Bf,`liݲyF;@і3X ha8Kv"!0 E CK#+Wz=30h9vbhCC6Eץ10h ŦT1-eƷIͳǦ mSL.mv_t =XP DGpC`:.DcmQ#*x5mn捇2-ҩ'!i8N73eK T‡# HVc|#+0IqP (ȩ0`#*en#)#)SFRTT#lALa2*2p[(-,enp#+((բƅ-3bd!@Owx?s^9#)!]{DMéࡆXC4Zp/5LFsߠt/r MӅ59؇UxV"7;sڐ2KξVkb6Nq?}&&'B+;D3*Ou+\et`Oe¦@{yFfa" >a`|0J۝ m1BC"hT}l$hZSNJչiU81CMA@-#+a#)R#Jl{73Jd#+Bh*2F`ienpm1S-0 LImrּsW-ojEԇ+t^5x(F wQ0#+ Ԓ0n5#)a2U0BZj`Z#*dDt >%*#)"[@#)H`r"X߻y(Wu"{ |s#)j!IV>Jua7d@&|;F!DHؔ$Q ¼hVTloiEj+UVݭD|5ldbNdQ$H@z}J#)U6]+P*= (2d'mCQC-}\K^zQ;ͩX{P3'Q TGhf< #)1Xc #*l"4щ-3DJHMmEm[ڛMTՍci5y_<] f@0FIv&#*1<F(d%I`jI %h ,nd(6#*9*u D'F La((=MckV-[fm,-v_!U* ?ٝ^%D#)b0@=aױ!s՚M\7h#4 +9d-YCzۯ{1pĐ>&8(-%mR`Ô;||h,b֒;.kͥʙU+#)5YU+QV@nD:\:pO$q_pXֵޚ6dP7$&#*#+r4ˇsxpy@?}f J?L;@Ď;_l]#'ɌTstI}w$q:ЂqGkHAkyO~J{_GLrB":?nm%iS9O4GWtPgqem߻+̇<٧|?t,Y}V>2v3wLLWu:pN&mF\|Sܰg0rr h q;"zid g{>mΎ)8ډfBSycc[A.^侍P! ?K*~rg{8]#*gY!WG*P.Š)jwd#*d8^iƈ ~NU36Jt||xc*tZgf;$\C*:DTVJۤL"23Ҩ,u$8`&N3[q|F.\gWL 6NKvs(9+'?/.cn8.:.iCbwGIX:檰`|C79)A^Q3٤N8“[4A-á1"]C F`X0AzwO#*6M ֌ F#SLj{V=Ƥ^<$Big5Zc Z4d2rNCV#*^Rsd+Z#^2C`s41qvgyPT.!뵭G\£_<|;QdD[uAz~Tv?d#*§9g#*mL8z#8zs5,ߘzDy#*T(jy`Q3%%Kūi1jD4u^}9iFQ(%%M f 8*=zl>{]Z*4w3%nbdbDٷ8D`O)hii֛=0uh7{}Q`#G~03V0x5EƔtZJF08`B Uc#)+v(mmclȚoJmծ|ʤV"EaEDQTQgF`1MYa8ncv/4Ёxl t#m"XI#)RAUiZ#)b%`5V2e##+VP}Xd*8#*$1j2ao6pHO4*$Mo B0gJ^|my4Pd$TFePQOR;^D`Aȇ z4#IKB4`DA*ܣ-724 k(aR)Y'Oj+mG{l ,#)ՓbRh5R,-mǡݽ^LS6X9#+`ao9x̢64F;F4f̋ckaNLMțݦHj&JVmWdauІ (#*eF#*XDaH# Nia@2P#LM CR0RFT. xp85q,3KS 2]B.Iih>b#+D+l#wm]fJҜe 8' 7CD| Cr m5IRUE#+74`±Yp$n^]-0B:@awmLve A1D9Q4wa #*\C@`]mU(eUFC"pMٖv=yxqίoB[#+P#*S&0(XF= WG|lxk+`zWdpEÙ&FԡeGʪA?BV*+#=ȵ\cӅ:m*KqNGAh|5)LSa h>+Vd H;;;6LLZ02F"2YV ,n%Qn5E"]ujHua,L"AB۾lDq,0@<>ઊ0F "0YK\c#*6+ܕ*#.T=П#)#+NP$Le1^(A9!STkYp#*![v~ÑAFB{}OjJkNecYصL_ w|;'*ྔ'``Cy{}?-=`o ؊;εnf"̣#+DԴ/gga,.b"[F6䑌EQZҺRJXygl{xνfPj# g*2q#+"&墥RAiկ NI;G=x[E!h5$XEF!3fDUͪjA H#)&aQ?,'܈9f11#)0D1DlZIQR Y#*f&+R+ =x2FۃCb#+)vB0.6@bTFCl\zDI$8Pn'RCMRDU zO2"nvPuͻFba#*0#*baK8}^:V^$$8! GF!LI_Q@oW_X0EVawGxʯ6u(Eu,㤳`{&tuo#*@M&-=/Q.rO]+V1S*f4L@(s]k^v--Ykp9h}JX2BA"jP n]h}~ٹkjmTԥݰR"/#kԟkbX5z cJ#+Lw#*5bkvPj%D(n}T3!wڍS(ߟWͩ#*FD#нJ->F$֨ﲍ($'W|3ɃF݂J1#+ܘ%}"|xUC[U?(UJ}ҧ_,޸4+[#+WVRO6#*okf@0!`'X\8"wvb#{UH+JrrJi\Trg3<:6Qq4D*Qn701$H͵?_$1k[Ӝ)SVS2|d]Sf|E5[g(6SP[kFtc;uK7s۝#*vvm,lFAs2%ӍYMDbv9JJ)ztqdC` TYTo<\# E1TB((=Tc0ܤ68m>L&j̩渒qI;KŨ'sS]OkZ)fd;-,<]5Lr6:!4,Qᘐ1sNӃC,#)BYѥ BlZ:sۦ0͵ȄrOG0`͢tMɤ< $t3 Sltb#)bMV""h&N=c 1T]D!!Ϧv9gyC]^TB4#+4L 3k*{"#+h_&s;4#)&2IĊl69/LBvSQ0~-͑CΌ4&k;2#)j$bl|Nf- 3M(aZ3脝)hq,\heJZjV*ؗ+," ٬AG.MGbw'Mp'60_;K"l\ĥ!Pj>)60L#~AwC$B,TD>{{EgA H*( >|#+ʃ,/ zy J19)(LHLpBiPr*$1yJ3_uU뿘]3YjTBImGR%tgh׾:CM)d{p(v75 v?r" /(!.T$3DG~c>B`\t}=GxЌR E xD5Y52e0D C5eB1ƿXnI\gJHTP#*8F@kߪd+k9#)tZt#)gR;a@!"O#Cß`uS1@TG@:#&ŭ`FsN۞o(ɷFH.!]~gÈ8?Y;4ppṃK5 N"i1XY9Ed;#)奤iZ:#*K֚SBaMl>睷(m&U+:ek\adidgNQ[鸄؁#*Բ&ԲqS>'T#)|(IQ\э,[4 U4&c$8&2#LQ~E(p= ݵo#+JA{+#+,U#+EX#՟.Ty./CGd,D<Ȉ"8 +g<'DzUkp%a a$c$J)y|O\bcvŘ{N]fEJ;D1H!*T$Rjf-Ijf67ժE}%"bJihX$Axl#+{!)k3ABHw$ĞH/V62j%KLjڤ`@G @B/#)iLBJ _sno'I W[^ :<v!n/ފxNJ9N`yd{r(kncRI:4>z,7 }P.%kA|:D8@d83,8=iaLNLA}!AݯvjM\7&Jlit}۩ףcmIQSE]B(+zdjR@X'x}(=bow)LԧDǡl%#bs_uj 65<{!+v&{"e>)\]4mh\,|Q}_P/2&REM(6Sh+Wj[AUA|h{K,'2kcR42cGhrbU#+#*} G}b#UѫF5I(V0e[Zi[5/m|9|Y۽%$#*9{df _,D!#x#)-QZ75C2Wn`i5`[U4dhh# Pɖ)%"0#)ݥE:ځD$IcKEQQ0A;4mTֵK61*1V&8WBFo%Ԥ?QA@Y\J|'X%ٯC_ZݦeW׮n7uXffUw:iRC^m#+ "]TÀV,,ycv\ҐFҋTiM2ٖmۺ9\P.a#Wv=bB]naW f<4K=ʚCbHdoJB ϖxؗ.߇>ȴĘ"hjjkM-ŸWݐV}{z"!QCVu5G뭆HN!$h#;ssl7մrl6fITq5Wm,7jiZø5Z<>5F~ԙvwH*)Qm$P}V4q)53eV{#)4"Ne-袤 ?S"X0f\MFed\3 y3##@0]Yqs.ic.sg ".,$Ñ= lÑЉDb% pk\L}Wl몄2z?2P?f 1~rT#$ y,_JԒqf3PEVȷʭhU#* ѷi]x5 t2*&`9VqlVtj~wlqр[ D"zo"d8=%^n:"9稅I!#ro[ hBd@MBvW;?7~za eCt5' &̕KDzL*~'g$.=MoqW0n:숻J`_s}???_?_y?~O?G#*H?k#)ajf+bg)S@0k*RG#)Hֿ[+_{wtɂ*1<\ FH&p8Ո>"DhK61$PI0P˴e!C5X#)3$w}1,L#vA>7@ܜ ,P粑 wSJ*P.%BATkiLk&ԛS&YFE#+DS*X "~DV**$0dCyPCՌU!M|ahhˍL`2=DW<|ݲtq1%8 g^qQ-fק,$ [<r;Cg ЋvG|h캒FCo\ɬMOqL sm 2^w$S +#<== diff --git a/wscript b/wscript new file mode 100644 index 0000000..0cff0f2 --- /dev/null +++ b/wscript @@ -0,0 +1,22 @@ +#!/usr/bin/env python + +def options(opt): + opt.load("compiler_cxx") + +def configure(conf): + conf.load("compiler_cxx flex bison") + +def build(bld): + subdirs = ["util", "shapes", "main", "distrib", "parser"] + sources = [] + for s in subdirs: + sources += bld.path.ant_glob("%s/*.cc" % s) + lexer_source = "parser/parser.l" + parser_source = "parser/parser.yy" + sources += [lexer_source, parser_source] + bld.program( + source = sources, + cxxflags = ["-Wall", "-O2"], + target = "fart", + includes = subdirs + ["."], + lib = ["fl", "pthread", "freeimage"])