./0000755000076500007650000000000010764320642015727 5ustar00massimodipierromassimodipierro00000000000000ABOUT0000644000076500007650000000036310763221761016372 0ustar00massimodipierromassimodipierro00000000000000This is the Podcast Peer RSS reader and recommendation program. It will read and parse RSS for podcasts plus exchange podcast recommendations based on user preference via remote procedure call for SQL database records. Developed with web2py.LICENSE0000644000076500007650000000147210763217247016610 0ustar00massimodipierromassimodipierro00000000000000Copyright (c) 2007, Tony G. Sardella All rights reserved. BSD License 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.__init__.py0000644000076500007650000000000010762757741017705 0ustar00massimodipierromassimodipierro00000000000000__init__.pyc0000644000076500007650000000031410753726222020046 0ustar00massimodipierromassimodipierro00000000000000 굗Gc@sdS(N((((su/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/applications/podcast_peer/__init__.pysscache/0000755000076500007650000000000010764320653016637 5ustar00massimodipierromassimodipierro00000000000000cache/cache.lock0000644000076500007650000000000010764320653020542 0ustar00massimodipierromassimodipierro00000000000000controllers/0000755000076500007650000000000010764320642020140 5ustar00massimodipierromassimodipierro00000000000000controllers/appadmin.py0000644000076500007650000001244010764320642022304 0ustar00massimodipierromassimodipierro00000000000000########################################################### ### make sure administrator is on localhost ############################################################ import os from gluon.contenttype import contenttype from gluon.fileutils import check_credentials if request.env.remote_addr!=request.env.http_host.split(':')[0]: raise HTTP(400) if not check_credentials(request): redirect('/admin') response.view='appadmin.html' response.menu=[['design',False,'/admin/default/design/%s' % request.application], ['db',False,'/%s/%s/index' % (request.application, request.controller)], ['state',False,'/%s/%s/state' % (request.application, request.controller)]] ########################################################### ### list all tables in database ############################################################ def index(): import types as _types _dbs={} for _key,_value in globals().items(): if isinstance(_value,SQLDB): tables=_dbs[_key]=[] for _tablename in _value.tables: tables.append((_key,_tablename)) return dict(dbs=_dbs) ########################################################### ### insert a new record ############################################################ def insert(): try: dbname=request.args[0] db=eval(dbname) table=request.args[1] form=SQLFORM(db[table]) except: redirect(URL(r=request,f='index')) if form.accepts(request.vars,session): response.flash='new record inserted' return dict(form=form) ########################################################### ### list all records in table and insert new record ############################################################ def download(): filename=request.args[0] response.headers['Content-Type']=contenttype(filename) return open(os.path.join(request.folder,'uploads/','%s' % filename),'rb').read() def csv(): import gluon.contenttype, csv, cStringIO response.headers['Content-Type']=gluon.contenttype.contenttype('.csv') try: dbname=request.vars.dbname db=eval(dbname) records=db(request.vars.query).select() except: redirect(URL(r=request,f='index')) s=cStringIO.StringIO() writer = csv.writer(s) writer.writerow(records.colnames) c=range(len(records.colnames)) for i in range(len(records)): writer.writerow([records.response[i][j] for j in c]) ### FILL HERE return s.getvalue() def import_csv(table,file): import csv reader = csv.reader(file) colnames=None for line in reader: if not colnames: colnames=[x[x.find('.')+1:] for x in line] c=[i for i in range(len(line)) if colnames[i]!='id'] else: items=[(colnames[i],line[i]) for i in c] table.insert(**dict(items)) def select(): try: dbname=request.args[0] db=eval(dbname) if not request.vars.query: table=request.args[1] query='%s.id>0' % table else: query=request.vars.query except: redirect(URL(r=request,f='index')) if request.vars.csvfile!=None: try: import_csv(db[table],request.vars.csvfile.file) response.flash='data uploaded' except: response.flash='unable to parse csv file' if request.vars.delete_all and request.vars.delete_all_sure=='yes': try: db(query).delete() response.flash='records deleted' except: response.flash='invalid SQL FILTER' elif request.vars.update_string: try: env=dict(db=db,query=query) exec('db(query).update('+request.vars.update_string+')') in env response.flash='records updated' except: response.flash='invalid SQL FILTER or UPDATE STRING' if request.vars.start: start=int(request.vars.start) else: start=0 limitby=(start,start+100) try: records=db(query).select(limitby=limitby) except: response.flash='invalid SQL FILTER' return dict(records='no records',nrecords=0,query=query,start=0) linkto=URL(r=request,f='update/%s'% (dbname)) upload=URL(r=request,f='download') return dict(start=start,query=query,\ nrecords=len(records),\ records=SQLTABLE(records,linkto,upload,_class='sortable')) ########################################################### ### edit delete one record ############################################################ def update(): try: dbname=request.args[0] db=eval(dbname) table=request.args[1] except: redirect(URL(r=request,f='index')) try: id=int(request.args[2]) record=db(db[table].id==id).select()[0] except: redirect(URL(r=request,f='select/%s/%s'%(dbname,table))) form=SQLFORM(db[table],record,deletable=True, linkto=URL(r=request,f='select/'+dbname), upload=URL(r=request,f='download/')) if form.accepts(request.vars,session): response.flash='done!' redirect(URL(r=request,f='select/%s/%s'%(dbname,table))) return dict(form=form) ########################################################### ### get global variables ############################################################ def state(): return dict(state=request.env) controllers/default.py0000644000076500007650000002027610764320642022145 0ustar00massimodipierromassimodipierro00000000000000from gluon.fileutils import check_credentials import gluon.contrib.feedparser as feedparser import time import socket try: session.authorized = check_credentials(request) except:pass response.menu=[['Home',True,'/%s/default/index' % request.application], ['Google',False,'http://www.google.com'], ['Podcasts',False,'http://podcast.com'], ['ITunes Podcasts', False, 'http://www.apple.com/itunes/store/podcasts.html'], ['Podcast Directory', False, 'http://www.podcastingnews.com/topics/Podcast_Directory.html'], ['Podcast Alley', False,'http://www.podcastalley.com'], ['Podcasting info', False,'http://en.wikipedia.org/wiki/Podcasting'], ['Yahoo Podcast Search', False, 'http://audio.search.yahoo.com/audio'], ['Digg podcasts', False,'http://www.digg.com/podcasts']] ############################################################ ## index function ############################################################ def index(): try: page_id=int(request.args[0]) this_page=db(db.page.id==page_id).select(db.page.ALL)[0] except: this_page=db().select(db.page.ALL)[0] page_id=this_page.id try: d = feedparser.parse(this_page.url) size = len(d['entries']) e = d.entries[0] except: session.flash= 'exception b, invalid url. switched to default.' this_page.update_record(url="http://rss.streamos.com/streamos/rss/genfeed.php?feedid=360&groupname=nature") redirect(URL(r=request,f='index')) try: rows = db().select(db.servers.ALL) pages=db(db.page.parent==0).select(db.page.ALL,orderby=db.page.indx) except: session.flash= 'exception c' redirect(URL(r=request,f='index')) return dict(pages=pages, this_page=this_page, servers = rows, entry = e) ############################################################ ## create podcast ############################################################ def create(): last_page=db(db.page.parent==0).select(orderby=~db.page.indx)[0] db.page.insert(title='',indx=last_page.indx+1) redirect(URL(r=request,f='index')) ############################################################ ## delete podcast ############################################################ def delete(): try: page_id=int(request.args[0]) except: page_id=1 this_page=db(db.page.id==page_id).select()[0] if this_page.indx != 1: db(db.page.id==page_id).delete() session.flash= this_page.title + " deleted." else: session.flash= "Base index, cannot delete. Edit only." redirect(URL(r=request,f='index')) ############################################################ ## edit podcast ############################################################ def edit(): try: page_id=int(request.args[0]) except: page_id=1 this_page=db(db.page.id==page_id).select()[0] myform = SQLFORM(db.page, this_page, fields = ['title','url','rating','genre']) if myform.accepts(request.vars): session.flash='changes accepted' redirect(URL(r=request,f='index',args=[this_page.id])) if myform.errors: response.flash='invalid form' pages=db(db.page.parent==0).select(db.page.ALL,orderby=db.page.indx) return dict(pages=pages,form=myform) ############################################################ ## move selection up ############################################################ def moveup(): try: page_id=int(request.args[0]) this_page=db(db.page.id==page_id).select()[0] other_page=db((db.page.parent==0)&(db.page.indxthis_page.indx)).select(orderby=db.page.indx,limitby=(0,1))[0] tmp=this_page.indx this_page.update_record(indx=other_page.indx) other_page.update_record(indx=tmp) except: pass redirect(URL(r=request,f='index')) ############################################################ ## grab db ############################################################ def grab(): import xmlrpclib try: client = xmlrpclib.ServerProxy(request.vars.url) columns,rows=client.search('page.id>0') j=len('user.') except: session.flash='invalid server' redirect(URL(r=request,f='index')) ses = db(db.session.id==1).select()[0] rank, genre = prefs(ses.rating, ses.genre) try: for row in rows: items=dict([(columns[i][j:],row[i]) for i in range(len(columns)) if columns[i][-3:]!='id']) rank1, genre1 = prefs(items['rating'], items['genre']) #session.flash = int(items['rating']) if ((genre1 == genre) and (int(items['rating']) == rank)): db(db.page.title == items['title']).delete() db.page.insert(**items) except: pass session.flash= "records transfered" return dict(records=db(db.page.id>0).select(), link = A('go back to main page',_href=URL(r=request,f='index'))) ############################################################ ## episodes ############################################################ def episodes(): try: page_id=int(request.args[0]) except: page_id=1 this_page=db(db.page.id==page_id).select()[0] try: d = feedparser.parse(this_page.url) e = d['entries'] lengt = len(d['entries']) except: redirect(URL(r=request,f='index')) return dict(entries = e, page = this_page, d = d) ############################################################ ## add servers ############################################################ def add(): form=SQLFORM(db.servers) if form.accepts(request.vars,session): response.flash='new server added' return dict(form = form) ############################################################ ### manage server ############################################################ def manage(): id=int(request.args[0]) record = db(db.servers.id==id).select()[0] ses = db(db.session.id==1).select()[0] form=SQLFORM(db.servers, record, deletable=True) ses.update_record(genre = record.Select_genre) ses.update_record(rating = record.Get_by_rating) if form.accepts(request.vars,session): response.flash='done!' return dict(form = form, record = record) ############################################################ ### connect to server ############################################################ def connect(): id=int(request.args[0]) record=db(db.servers.id==id).select()[0] ses = db(db.session.id==1).select()[0] ses.update_record(genre = record.Select_genre) ses.update_record(rating = record.Get_by_rating) url = record.url url = 'http://127.0.0.1:8000/podcast_peer_7/default/grab?url=' + url redirect(url) ############################################################ ### determine preference as numerical value ############################################################ def prefs(usr_rating, usr_genre): rank = 0 genre = 0 if usr_rating == 'one': rank = 1 elif usr_rating == 'two': rank = 2 elif usr_rating == 'three': rank = 3 elif usr_rating == 'four': rank = 4 elif usr_rating == 'five': rank = 5 if usr_genre == 'info': genre = 1 elif usr_genre == 'music': genre = 2 elif usr_genre == 'comedy ': genre = 3 return(rank, genre)controllers/xmlrpc.py0000644000076500007650000000025110764320642022015 0ustar00massimodipierromassimodipierro00000000000000import SimpleXMLRPCServer def search(query): rows=db(query).select() return rows.colnames, rows.response def handle(): return response.xmlrpc(request,[search])databases/0000755000076500007650000000000010764321172017520 5ustar00massimodipierromassimodipierro00000000000000databases/db.db0000644000076500007650000002600010764321172020412 0ustar00massimodipierromassimodipierro00000000000000SQLite format 3@   z{MtablesessionsessionCREATE TABLE session( id INTEGER PRIMARY KEY AUTOINCREMENT, genre CHAR(32), rating CHAR(32) )g%tableserversserversCREATE TABLE servers( id INTEGER PRIMARY KEY AUTOINCREMENT, title CHAR(32), url CHAR(32) , Get_by_rating CHAR(1), genre CHAR(32), Select_genre CHAR(32), server_id REFERENCES page(id) ON DELETE CASCADE)stabledocdocCREATE TABLE doc( id INTEGER PRIMARY KEY AUTOINCREMENT, name CHAR(32), timestamp TIMESTAMP, filename CHAR(64) )P++Ytablesqlite_sequencesqlite_sequenceCREATE TABLE sqlite_sequence(name,seq)1EtablepagepageCREATE TABLE page( id INTEGER PRIMARY KEY AUTOINCREMENT, title CHAR(32), text TEXT, timestamp TIMESTAMP, parent INTEGER , idnx INTEGER, indx INTEGER, feed CHAR(32), url CHAR(32), ur CHAR(32), rating INTEGER, genre CHAR(32), votes INTEGER, mean_vote DOUBLE, Get_by_rating CHAR(1))  !   session page1 servers  y^ [Z)udog server 100http://127.0.0.1:8000/podcast_peer_2a/xmlrpc/handle/Two starsmusicy^!s#big serverhttp://127.0.0.1:8000/podcast_peer_2a/xmlrpc/handleThree starsmusicy!s!O!sjoe serverhttp://127.0.0.1:8000/podcast_peer_2a/xmlrpc/handleonemusicO!sdog serverhttp://127.0.0.1:8000/podcast_peer_2a/xmlrpc/handlethreemusicfoQ )udog server 100http://127.0.0.1:8000/podcast_peer_2a/xmlrpc/handle/twoinfody nfooofo %%Error servererror server?!sbig serverhttp://127.0.0.1:8000/podcast_peer_2a/xmlrpc/haP!scat serverhttp://127.0.0.1:8000/podcast_peer_2a/xmlrpc/handlefourcomedy Q )sawesome serverhttp://127.0.0.1:8000/podcast_peer_2a/xmlrpc/handlefiveinfocN!sbig serverhttp://127.0.0.1:8000/podcast_peer_2a/xmlrpc/handlefourmusicM!sjoe serverhttp://127.0.0.1:8000/podcast_peer_2a/xmlrpc/handleonemusicdy >p@[U 3[Tom Green2008-02-16 23:42:22 http://www.tomgreen.com/podcast/tgl.rsscomedyhZ1 3cOnion News Network2008-02-23 16:06:15http://feeds.theonion.com/OnionNewsNetwork/comedyk/ 3mJade Tree Records2008-02-25 18:57:39http://www.jadetree.com/rss2.php?feed=mp3podcastmusicV ' 3KXLR8R Podcast2008-02-11 09:25:31http://feeds.xlr8r.com/xlr8rmp3musicyC 3uDavid Duriez (Neo podcasts)2008-02-15 23:54:20 http://feeds.feedburner.com/David-duriez-fg-dj-radiomusicQ% 3CKEXP podcast2008-02-23 13:26:56http://kexp.org/podcast.xmlmusicW/ 3EXLR8R m4a Podcast2008-02-23 15:26:45http://feeds.xlr8r.com/xlr8rmusicc 3oXLR8R TV2008-02-23 15:37:27http://revision3.com/xlr8rtv/feed/quicktime-largemusic ]c) 3cFabric Podcast2008-02-24 09:25:00http://feeds.fabriclondon.com/fabricpodcastmusic`' 3aNew Scientist2008-02-23 10:58:31http://www.newscientist.com/podcastfeed.nsinfo\ 3aGeek News2008-02-10 18:43:36http://www.geeknewscentral.com/podcast.xmlinfo\# 3 _Science Mag2008-02-10 20:38:06http://www.sciencemag.org/rss/podcast.xmlinfox A 3wSpitzer Space Telescope HD2008-02-23 15:44:39http://www.spitzer.caltech.edu/features/hd/hdfeed.xmlinfog!- 3iTotally Rad show2008-02-23 17:19:02http://revision3.com/trs/feed/quicktime-large/info comedy four C[ey1 3Washington Post HD2008-02-23 16:48:12http://www.washingtonpost.com/wp-srv/mmedia/hd_podcast.xmlinfoz'9 3Wake Up to Money (BBC)2008-02-15 05:00:23 http://downloads.bbc.co.uk/podcasts/fivelive/money/rss.xmlinfo%+ 3%Nature Podcasts2008-02-10 18:32:56http://rss.streamos.com/streamos/rss/genfeed.php?feedid=360&groupname=natureinfo\ 3aGeek News2008-02-10 18:43:36http://www.geeknewscentral.com/podcast.xmlinfo\# 3 _Science Mag2008-02-10 20:38:06http://www.sciencemag.org/rss/podcast.xmlinfox A 3wSpitzer Space Telescope HD2008-02-23 15:44:39http://www.spitzer.caltech.edu/features/hd/hdfeed.xmlinfog!- 3iTotally Rad show2008-02-23 17:19:02http://revision3.com/trs/feed/quicktime-large/info 1 3k&' 3wNerd TV (PBS)2008-02-15 04:57:25 http://www.pbs.org/cringely/nerdtv/rss/nerdtv-mp3.xmlinfo {A 3wSpitzer Space Telescope HD2008-02-23 15:44:39http://www.spitzer.caltech.edu/features/hd/hdfeed.xmlinfoz9 3Wake Up to Money (BBC)2008-02-15 05:00:23 http://downloads.bbc.co.uk/podcasts/fivelive/money/rss.xmlinfok~' 3wNerd TV (PBS)2008-02-15 04:57:25 http://www.pbs.org/cringely/nerdtv/rss/nerdtv-mp3.xmlinfo3# 3 _Science Mag2008-02-10 20:38:06http://www.sciencemag.org/rss/podcast.xmlinfo3_ 3aGeek News2008-02-10 18:43:36http://www.geeknewscentral.com/podcast.xmlinfo{+ 3%Nature Podcasts2008-02-10 18:32:56http://rss.streamos.com/streamos/rss/genfeed.php?feedid=360&groupname=natureinfo' 3aNew Scientist2008-02-23 10:58:31http://www.newscientist.com/podcastfeed.nsinfoj- 3iTotally Rad show2008-02-23 17:19:02http://revision3.com/trs/feed/quicktime-large/info ?v11 3Washington Post HD2008-02-23 16:48:12http://www.washingtonpost.com/wp-srv/mmedia/hd_podcast.xmlinfo`. 3eThe Onion2008-03-03 05:38:51http://feeds.theonion.com/theonion/radionewscomedy1 3n/- 3uSouthern Records2008-02-25 18:36:03http://www.southern.com/southern/podcast-us/feed.rssmusic%+ 3%Nature Podcasts2008-02-10 18:32:56http://rss.streamos.com/streamos/rss/genfeed.php?feedid=360&groupname=natureinfok&' 3wNerd TV (PBS)2008-02-15 04:57:25 http://www.pbs.org/cringely/nerdtv/rss/nerdtv-mp3.xmlinfoz'9 3Wake Up to Money (BBC)2008-02-15 05:00:23 http://downloads.bbc.co.uk/podcasts/fivelive/money/rss.xmlinfoq- 3uSouthern Records2008-02-25 18:36:03http://www.southern.com/southern/podcast-us/feed.rssmusicdatabases/f6db3e6e66dc0b6aea6b47a87ef29c1f_doc.table0000644000076500007650000000024410747742547026345 0ustar00massimodipierromassimodipierro00000000000000(dp1 S'timestamp' p2 S'TIMESTAMP' p3 sS'filename' p4 S'CHAR(64)' p5 sS'id' p6 S'INTEGER PRIMARY KEY AUTOINCREMENT' p7 sS'name' p8 S'CHAR(32)' p9 s.databases/f6db3e6e66dc0b6aea6b47a87ef29c1f_page.table0000644000076500007650000000072410764321551026502 0ustar00massimodipierromassimodipierro00000000000000(dp1 S'feed' p2 S'CHAR(32)' p3 sS'rating' p4 S'INTEGER' p5 sS'votes' p6 S'INTEGER' p7 sS'mean_vote' p8 S'DOUBLE' p9 sS'idnx' p10 S'INTEGER' p11 sS'parent' p12 S'INTEGER' p13 sS'title' p14 S'CHAR(32)' p15 sS'url' p16 S'CHAR(32)' p17 sS'text' p18 S'TEXT' p19 sS'id' p20 S'INTEGER PRIMARY KEY AUTOINCREMENT' p21 sS'indx' p22 S'INTEGER' p23 sS'ur' p24 S'CHAR(32)' p25 sS'timestamp' p26 S'TIMESTAMP' p27 sS'genre' p28 S'CHAR(32)' p29 sS'Get_by_rating' p30 S'CHAR(1)' p31 s.databases/f6db3e6e66dc0b6aea6b47a87ef29c1f_servers.table0000644000076500007650000000042310764321551027253 0ustar00massimodipierromassimodipierro00000000000000(dp1 S'server_id' p2 S'REFERENCES page(id) ON DELETE CASCADE' p3 sS'title' p4 S'CHAR(32)' p5 sS'url' p6 S'CHAR(32)' p7 sS'id' p8 S'INTEGER PRIMARY KEY AUTOINCREMENT' p9 sS'genre' p10 S'CHAR(32)' p11 sS'Select_genre' p12 S'CHAR(32)' p13 sS'Get_by_rating' p14 S'CHAR(1)' p15 s.databases/f6db3e6e66dc0b6aea6b47a87ef29c1f_session.table0000644000076500007650000000016110760533101027234 0ustar00massimodipierromassimodipierro00000000000000(dp1 S'genre' p2 S'CHAR(32)' p3 sS'rating' p4 S'CHAR(32)' p5 sS'id' p6 S'INTEGER PRIMARY KEY AUTOINCREMENT' p7 s.databases/sql.log0000644000076500007650000000401710760533101021015 0ustar00massimodipierromassimodipierro00000000000000timestamp: 2008-01-29T18:31:35.061000 CREATE TABLE page( id INTEGER PRIMARY KEY AUTOINCREMENT, title CHAR(32), text TEXT, timestamp TIMESTAMP, parent INTEGER ); success! timestamp: 2008-01-29T18:31:35.093000 CREATE TABLE doc( id INTEGER PRIMARY KEY AUTOINCREMENT, name CHAR(32), timestamp TIMESTAMP, filename CHAR(64) ); success! timestamp: 2008-01-29T20:33:36.561000 ALTER TABLE page ADD COLUMN index INTEGER; timestamp: 2008-01-29T20:34:05.718000 ALTER TABLE page ADD COLUMN idnx INTEGER; success! timestamp: 2008-01-29T20:38:36.866000 ALTER TABLE page ADD COLUMN indx INTEGER; success! timestamp: 2008-02-10T11:24:46.908823 CREATE TABLE servers( id INTEGER PRIMARY KEY AUTOINCREMENT, title CHAR(32), url CHAR(32) ); success! timestamp: 2008-02-10T15:47:57.401479 ALTER TABLE page ADD COLUMN feed CHAR(32); success! timestamp: 2008-02-10T16:43:10.058586 ALTER TABLE page ADD COLUMN url CHAR(32); success! timestamp: 2008-02-10T16:49:40.860808 ALTER TABLE page ADD COLUMN ur CHAR(32); success! timestamp: 2008-02-16T17:14:22.261197 ALTER TABLE page ADD COLUMN rating INTEGER; success! timestamp: 2008-02-16T17:15:22.203159 ALTER TABLE page ADD COLUMN genre CHAR(32); success! timestamp: 2008-02-16T17:44:51.128612 ALTER TABLE page ADD COLUMN votes INTEGER; success! timestamp: 2008-02-16T17:44:51.131577 ALTER TABLE page ADD COLUMN mean_vote DOUBLE; success! timestamp: 2008-02-25T01:07:16.471301 ALTER TABLE page ADD COLUMN Get_by_rating CHAR(1); success! timestamp: 2008-02-25T01:23:20.806113 ALTER TABLE servers ADD COLUMN Get_by_rating CHAR(1); success! timestamp: 2008-02-25T02:14:21.427607 ALTER TABLE servers ADD COLUMN genre CHAR(32); success! timestamp: 2008-02-25T02:15:58.912188 ALTER TABLE servers ADD COLUMN Select_genre CHAR(32); success! timestamp: 2008-02-25T04:18:24.561843 ALTER TABLE servers ADD COLUMN server_id REFERENCES page(id) ON DELETE CASCADE; success! timestamp: 2008-02-25T04:36:17.767817 CREATE TABLE session( id INTEGER PRIMARY KEY AUTOINCREMENT, genre CHAR(32), rating CHAR(32) ); success! embed/0000755000076500007650000000000010764320642016646 5ustar00massimodipierromassimodipierro00000000000000embed/swfobject.js0000644000076500007650000002072610756211152021175 0ustar00massimodipierromassimodipierro00000000000000/** * SWFObject v2.0: Flash Player detection and embed - http://blog.deconcept.com/swfobject/ * * SWFObject is (c) 2006 Geoff Stearns and is released under the MIT License: * http://www.opensource.org/licenses/mit-license.php * */ if(typeof deconcept == "undefined") var deconcept = new Object(); if(typeof deconcept.util == "undefined") deconcept.util = new Object(); if(typeof deconcept.SWFObjectUtil == "undefined") deconcept.SWFObjectUtil = new Object(); deconcept.SWFObject = function(swf, id, w, h, ver, c, quality, xiRedirectUrl, redirectUrl, detectKey) { if (!document.getElementById) { return; } this.DETECT_KEY = detectKey ? detectKey : 'detectflash'; this.skipDetect = deconcept.util.getRequestParameter(this.DETECT_KEY); this.params = new Object(); this.variables = new Object(); this.attributes = new Array(); if(swf) { this.setAttribute('swf', swf); } if(id) { this.setAttribute('id', id); } if(w) { this.setAttribute('width', w); } if(h) { this.setAttribute('height', h); } if(ver) { this.setAttribute('version', new deconcept.PlayerVersion(ver.toString().split("."))); } this.installedVer = deconcept.SWFObjectUtil.getPlayerVersion(); if (!window.opera && document.all && this.installedVer.major > 7) { // only add the onunload cleanup if the Flash Player version supports External Interface and we are in IE deconcept.SWFObject.doPrepUnload = true; } if(c) { this.addParam('bgcolor', c); } var q = quality ? quality : 'high'; this.addParam('quality', q); this.setAttribute('useExpressInstall', false); this.setAttribute('doExpressInstall', false); var xir = (xiRedirectUrl) ? xiRedirectUrl : window.location; this.setAttribute('xiRedirectUrl', xir); this.setAttribute('redirectUrl', ''); if(redirectUrl) { this.setAttribute('redirectUrl', redirectUrl); } } deconcept.SWFObject.prototype = { useExpressInstall: function(path) { this.xiSWFPath = !path ? "expressinstall.swf" : path; this.setAttribute('useExpressInstall', true); }, setAttribute: function(name, value){ this.attributes[name] = value; }, getAttribute: function(name){ return this.attributes[name]; }, addParam: function(name, value){ this.params[name] = value; }, getParams: function(){ return this.params; }, addVariable: function(name, value){ this.variables[name] = value; }, getVariable: function(name){ return this.variables[name]; }, getVariables: function(){ return this.variables; }, getVariablePairs: function(){ var variablePairs = new Array(); var key; var variables = this.getVariables(); for(key in variables){ variablePairs.push(key +"="+ variables[key]); } return variablePairs; }, getSWFHTML: function() { var swfNode = ""; if (navigator.plugins && navigator.mimeTypes && navigator.mimeTypes.length) { // netscape plugin architecture if (this.getAttribute("doExpressInstall")) { this.addVariable("MMplayerType", "PlugIn"); this.setAttribute('swf', this.xiSWFPath); } swfNode = ' 0){ swfNode += 'flashvars="'+ pairs +'"'; } swfNode += '/>'; } else { // PC IE if (this.getAttribute("doExpressInstall")) { this.addVariable("MMplayerType", "ActiveX"); this.setAttribute('swf', this.xiSWFPath); } swfNode = ''; swfNode += ''; var params = this.getParams(); for(var key in params) { swfNode += ''; } var pairs = this.getVariablePairs().join("&"); if(pairs.length > 0) {swfNode += '';} swfNode += ""; } return swfNode; }, write: function(elementId){ if(this.getAttribute('useExpressInstall')) { // check to see if we need to do an express install var expressInstallReqVer = new deconcept.PlayerVersion([6,0,65]); if (this.installedVer.versionIsValid(expressInstallReqVer) && !this.installedVer.versionIsValid(this.getAttribute('version'))) { this.setAttribute('doExpressInstall', true); this.addVariable("MMredirectURL", escape(this.getAttribute('xiRedirectUrl'))); document.title = document.title.slice(0, 47) + " - Flash Player Installation"; this.addVariable("MMdoctitle", document.title); } } if(this.skipDetect || this.getAttribute('doExpressInstall') || this.installedVer.versionIsValid(this.getAttribute('version'))){ var n = (typeof elementId == 'string') ? document.getElementById(elementId) : elementId; n.innerHTML = this.getSWFHTML(); return true; }else{ if(this.getAttribute('redirectUrl') != "") { document.location.replace(this.getAttribute('redirectUrl')); } } return false; } } /* ---- detection functions ---- */ deconcept.SWFObjectUtil.getPlayerVersion = function(){ var PlayerVersion = new deconcept.PlayerVersion([0,0,0]); if(navigator.plugins && navigator.mimeTypes.length){ var x = navigator.plugins["Shockwave Flash"]; if(x && x.description) { PlayerVersion = new deconcept.PlayerVersion(x.description.replace(/([a-zA-Z]|\s)+/, "").replace(/(\s+r|\s+b[0-9]+)/, ".").split(".")); } }else{ // do minor version lookup in IE, but avoid fp6 crashing issues // see http://blog.deconcept.com/2006/01/11/getvariable-setvariable-crash-internet-explorer-flash-6/ try{ var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7"); }catch(e){ try { var axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6"); PlayerVersion = new deconcept.PlayerVersion([6,0,21]); axo.AllowScriptAccess = "always"; // throws if player version < 6.0.47 (thanks to Michael Williams @ Adobe for this code) } catch(e) { if (PlayerVersion.major == 6) { return PlayerVersion; } } try { axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash"); } catch(e) {} } if (axo != null) { PlayerVersion = new deconcept.PlayerVersion(axo.GetVariable("$version").split(" ")[1].split(",")); } } return PlayerVersion; } deconcept.PlayerVersion = function(arrVersion){ this.major = arrVersion[0] != null ? parseInt(arrVersion[0]) : 0; this.minor = arrVersion[1] != null ? parseInt(arrVersion[1]) : 0; this.rev = arrVersion[2] != null ? parseInt(arrVersion[2]) : 0; } deconcept.PlayerVersion.prototype.versionIsValid = function(fv){ if(this.major < fv.major) return false; if(this.major > fv.major) return true; if(this.minor < fv.minor) return false; if(this.minor > fv.minor) return true; if(this.rev < fv.rev) return false; return true; } /* ---- get value of query string param ---- */ deconcept.util = { getRequestParameter: function(param) { var q = document.location.search || document.location.hash; if(q) { var pairs = q.substring(1).split("&"); for (var i=0; i < pairs.length; i++) { if (pairs[i].substring(0, pairs[i].indexOf("=")) == param) { return pairs[i].substring((pairs[i].indexOf("=")+1)); } } } return ""; } } /* fix for video streaming bug */ deconcept.SWFObjectUtil.cleanupSWFs = function() { var objects = document.getElementsByTagName("OBJECT"); for (var i=0; i < objects.length; i++) { objects[i].style.display = 'none'; for (var x in objects[i]) { if (typeof objects[i][x] == 'function') { objects[i][x] = function(){}; } } } } // fixes bug in fp9 see http://blog.deconcept.com/2006/07/28/swfobject-143-released/ if (deconcept.SWFObject.doPrepUnload) { deconcept.SWFObjectUtil.prepUnload = function() { __flash_unloadHandler = function(){}; __flash_savedUnloadHandler = function(){}; window.attachEvent("onunload", deconcept.SWFObjectUtil.cleanupSWFs); } window.attachEvent("onbeforeunload", deconcept.SWFObjectUtil.prepUnload); } /* add Array.push if needed (ie5) */ if (Array.prototype.push == null) { Array.prototype.push = function(item) { this[this.length] = item; return this.length; }} /* add some aliases for ease of use/backwards compatibility */ var getQueryParamValue = deconcept.util.getRequestParameter; var FlashObject = deconcept.SWFObject; // for legacy support var SWFObject = deconcept.SWFObject; errors/0000755000076500007650000000000010764320642017106 5ustar00massimodipierromassimodipierro00000000000000languages/0000755000076500007650000000000010764320642017540 5ustar00massimodipierromassimodipierro00000000000000languages/it..py0000644000076500007650000000007110764320642020602 0ustar00massimodipierromassimodipierro00000000000000{ 'Hello World':'', 'Welcome to web2py':'', 'doh!':'', } languages/it.py0000644000076500007650000000012710764320642020526 0ustar00massimodipierromassimodipierro00000000000000{ 'Hello World':'Salve Mondo', 'Welcome to web2py':'Ciao da wek2py', 'doh!':'oops!', } models/0000755000076500007650000000000010764320642017055 5ustar00massimodipierromassimodipierro00000000000000models/db.py0000644000076500007650000000227110764320642020016 0ustar00massimodipierromassimodipierro00000000000000import datetime now=datetime.datetime.today() db=SQLDB("sqlite://db.db") db.define_table('page', SQLField('title'), SQLField('text','text',default=''), SQLField('timestamp','datetime',default=now), SQLField('url','text', default = 'http://rss.streamos.com/streamos/rss/genfeed.php?feedid=360&groupname=nature'), SQLField('indx','integer'), SQLField('parent','integer',default=0), SQLField('rating','double',default=5), SQLField('genre')) db.define_table('doc', SQLField('name'), SQLField('timestamp','datetime',default=now), SQLField('filename','upload')) db.define_table('servers', SQLField('title'), SQLField('url', 'text', default='http://127.0.0.1:8000/podcast_peer_2a/xmlrpc/handle/'), SQLField('Select_genre',default = 'comedy '), SQLField('Get_by_rating',default = 'five')) db.define_table('session', SQLField('genre'), SQLField('rating')) db.page.title.requires=IS_NOT_EMPTY() db.doc.name.requires=IS_NOT_EMPTY() db.servers.Select_genre.requires=IS_IN_SET(['music','info','comedy ']) db.servers.Get_by_rating.requires=IS_IN_SET(['one','two','three','four','five']) page_labels={ 'title':'Page Title', 'indx':'Page Number', 'text':'Page Text' }modules/0000755000076500007650000000000010764320642017242 5ustar00massimodipierromassimodipierro00000000000000modules/__init__.py0000644000076500007650000000000010762757741021355 0ustar00massimodipierromassimodipierro00000000000000modules/__init__.pyc0000644000076500007650000000032410753726222021517 0ustar00massimodipierromassimodipierro00000000000000 굗Gc@sdS(N((((s}/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/applications/podcast_peer/modules/__init__.pyssmodules/feedparser.py0000755000076500007650000036006510764320642021751 0ustar00massimodipierromassimodipierro00000000000000#!/usr/bin/env python """Universal feed parser Handles RSS 0.9x, RSS 1.0, RSS 2.0, CDF, Atom 0.3, and Atom 1.0 feeds Visit http://feedparser.org/ for the latest version Visit http://feedparser.org/docs/ for the latest documentation Required: Python 2.1 or later Recommended: Python 2.3 or later Recommended: CJKCodecs and iconv_codec """ __version__ = "4.1"# + "$Revision: 1.92 $"[11:15] + "-cvs" __license__ = """Copyright (c) 2002-2006, Mark Pilgrim, 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. 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.""" __author__ = "Mark Pilgrim " __contributors__ = ["Jason Diamond ", "John Beimler ", "Fazal Majid ", "Aaron Swartz ", "Kevin Marks "] _debug = 0 # HTTP "User-Agent" header to send to servers when downloading feeds. # If you are embedding feedparser in a larger application, you should # change this to your application name and URL. USER_AGENT = "UniversalFeedParser/%s +http://feedparser.org/" % __version__ # HTTP "Accept" header to send to servers when downloading feeds. If you don't # want to send an Accept header, set this to None. ACCEPT_HEADER = "application/atom+xml,application/rdf+xml,application/rss+xml,application/x-netcdf,application/xml;q=0.9,text/xml;q=0.2,*/*;q=0.1" # List of preferred XML parsers, by SAX driver name. These will be tried first, # but if they're not installed, Python will keep searching through its own list # of pre-installed parsers until it finds one that supports everything we need. PREFERRED_XML_PARSERS = ["drv_libxml2"] # If you want feedparser to automatically run HTML markup through HTML Tidy, set # this to 1. Requires mxTidy # or utidylib . TIDY_MARKUP = 0 # List of Python interfaces for HTML Tidy, in order of preference. Only useful # if TIDY_MARKUP = 1 PREFERRED_TIDY_INTERFACES = ["uTidy", "mxTidy"] # ---------- required modules (should come with any Python distribution) ---------- import sgmllib, re, sys, copy, urlparse, time, rfc822, types, cgi, urllib, urllib2 try: from cStringIO import StringIO as _StringIO except: from StringIO import StringIO as _StringIO # ---------- optional modules (feedparser will work without these, but with reduced functionality) ---------- # gzip is included with most Python distributions, but may not be available if you compiled your own try: import gzip except: gzip = None try: import zlib except: zlib = None # If a real XML parser is available, feedparser will attempt to use it. feedparser has # been tested with the built-in SAX parser, PyXML, and libxml2. On platforms where the # Python distribution does not come with an XML parser (such as Mac OS X 10.2 and some # versions of FreeBSD), feedparser will quietly fall back on regex-based parsing. try: import xml.sax xml.sax.make_parser(PREFERRED_XML_PARSERS) # test for valid parsers from xml.sax.saxutils import escape as _xmlescape _XML_AVAILABLE = 1 except: _XML_AVAILABLE = 0 def _xmlescape(data): data = data.replace('&', '&') data = data.replace('>', '>') data = data.replace('<', '<') return data # base64 support for Atom feeds that contain embedded binary data try: import base64, binascii except: base64 = binascii = None # cjkcodecs and iconv_codec provide support for more character encodings. # Both are available from http://cjkpython.i18n.org/ try: import cjkcodecs.aliases except: pass try: import iconv_codec except: pass # chardet library auto-detects character encodings # Download from http://chardet.feedparser.org/ try: import chardet if _debug: import chardet.constants chardet.constants._debug = 1 except: chardet = None # ---------- don't touch these ---------- class ThingsNobodyCaresAboutButMe(Exception): pass class CharacterEncodingOverride(ThingsNobodyCaresAboutButMe): pass class CharacterEncodingUnknown(ThingsNobodyCaresAboutButMe): pass class NonXMLContentType(ThingsNobodyCaresAboutButMe): pass class UndeclaredNamespace(Exception): pass sgmllib.tagfind = re.compile('[a-zA-Z][-_.:a-zA-Z0-9]*') sgmllib.special = re.compile('' % (tag, ''.join([' %s="%s"' % t for t in attrs])), escape=0) # match namespaces if tag.find(':') <> -1: prefix, suffix = tag.split(':', 1) else: prefix, suffix = '', tag prefix = self.namespacemap.get(prefix, prefix) if prefix: prefix = prefix + '_' # special hack for better tracking of empty textinput/image elements in illformed feeds if (not prefix) and tag not in ('title', 'link', 'description', 'name'): self.intextinput = 0 if (not prefix) and tag not in ('title', 'link', 'description', 'url', 'href', 'width', 'height'): self.inimage = 0 # call special handler (if defined) or default handler methodname = '_start_' + prefix + suffix try: method = getattr(self, methodname) return method(attrsD) except AttributeError: return self.push(prefix + suffix, 1) def unknown_endtag(self, tag): if _debug: sys.stderr.write('end %s\n' % tag) # match namespaces if tag.find(':') <> -1: prefix, suffix = tag.split(':', 1) else: prefix, suffix = '', tag prefix = self.namespacemap.get(prefix, prefix) if prefix: prefix = prefix + '_' # call special handler (if defined) or default handler methodname = '_end_' + prefix + suffix try: method = getattr(self, methodname) method() except AttributeError: self.pop(prefix + suffix) # track inline content if self.incontent and self.contentparams.has_key('type') and not self.contentparams.get('type', 'xml').endswith('xml'): # element declared itself as escaped markup, but it isn't really self.contentparams['type'] = 'application/xhtml+xml' if self.incontent and self.contentparams.get('type') == 'application/xhtml+xml': tag = tag.split(':')[-1] self.handle_data('' % tag, escape=0) # track xml:base and xml:lang going out of scope if self.basestack: self.basestack.pop() if self.basestack and self.basestack[-1]: self.baseuri = self.basestack[-1] if self.langstack: self.langstack.pop() if self.langstack: # and (self.langstack[-1] is not None): self.lang = self.langstack[-1] def handle_charref(self, ref): # called for each character reference, e.g. for ' ', ref will be '160' if not self.elementstack: return ref = ref.lower() if ref in ('34', '38', '39', '60', '62', 'x22', 'x26', 'x27', 'x3c', 'x3e'): text = '&#%s;' % ref else: if ref[0] == 'x': c = int(ref[1:], 16) else: c = int(ref) text = unichr(c).encode('utf-8') self.elementstack[-1][2].append(text) def handle_entityref(self, ref): # called for each entity reference, e.g. for '©', ref will be 'copy' if not self.elementstack: return if _debug: sys.stderr.write('entering handle_entityref with %s\n' % ref) if ref in ('lt', 'gt', 'quot', 'amp', 'apos'): text = '&%s;' % ref else: # entity resolution graciously donated by Aaron Swartz def name2cp(k): import htmlentitydefs if hasattr(htmlentitydefs, 'name2codepoint'): # requires Python 2.3 return htmlentitydefs.name2codepoint[k] k = htmlentitydefs.entitydefs[k] if k.startswith('&#') and k.endswith(';'): return int(k[2:-1]) # not in latin-1 return ord(k) try: name2cp(ref) except KeyError: text = '&%s;' % ref else: text = unichr(name2cp(ref)).encode('utf-8') self.elementstack[-1][2].append(text) def handle_data(self, text, escape=1): # called for each block of plain text, i.e. outside of any tag and # not containing any character or entity references if not self.elementstack: return if escape and self.contentparams.get('type') == 'application/xhtml+xml': text = _xmlescape(text) self.elementstack[-1][2].append(text) def handle_comment(self, text): # called for each comment, e.g. pass def handle_pi(self, text): # called for each processing instruction, e.g. pass def handle_decl(self, text): pass def parse_declaration(self, i): # override internal declaration handler to handle CDATA blocks if _debug: sys.stderr.write('entering parse_declaration\n') if self.rawdata[i:i+9] == '', i) if k == -1: k = len(self.rawdata) self.handle_data(_xmlescape(self.rawdata[i+9:k]), 0) return k+3 else: k = self.rawdata.find('>', i) return k+1 def mapContentType(self, contentType): contentType = contentType.lower() if contentType == 'text': contentType = 'text/plain' elif contentType == 'html': contentType = 'text/html' elif contentType == 'xhtml': contentType = 'application/xhtml+xml' return contentType def trackNamespace(self, prefix, uri): loweruri = uri.lower() if (prefix, loweruri) == (None, 'http://my.netscape.com/rdf/simple/0.9/') and not self.version: self.version = 'rss090' if loweruri == 'http://purl.org/rss/1.0/' and not self.version: self.version = 'rss10' if loweruri == 'http://www.w3.org/2005/atom' and not self.version: self.version = 'atom10' if loweruri.find('backend.userland.com/rss') <> -1: # match any backend.userland.com namespace uri = 'http://backend.userland.com/rss' loweruri = uri if self._matchnamespaces.has_key(loweruri): self.namespacemap[prefix] = self._matchnamespaces[loweruri] self.namespacesInUse[self._matchnamespaces[loweruri]] = uri else: self.namespacesInUse[prefix or ''] = uri def resolveURI(self, uri): return _urljoin(self.baseuri or '', uri) def decodeEntities(self, element, data): return data def push(self, element, expectingText): self.elementstack.append([element, expectingText, []]) def pop(self, element, stripWhitespace=1): if not self.elementstack: return if self.elementstack[-1][0] != element: return element, expectingText, pieces = self.elementstack.pop() output = ''.join(pieces) if stripWhitespace: output = output.strip() if not expectingText: return output # decode base64 content if base64 and self.contentparams.get('base64', 0): try: output = base64.decodestring(output) except binascii.Error: pass except binascii.Incomplete: pass # resolve relative URIs if (element in self.can_be_relative_uri) and output: output = self.resolveURI(output) # decode entities within embedded markup if not self.contentparams.get('base64', 0): output = self.decodeEntities(element, output) # remove temporary cruft from contentparams try: del self.contentparams['mode'] except KeyError: pass try: del self.contentparams['base64'] except KeyError: pass # resolve relative URIs within embedded markup if self.mapContentType(self.contentparams.get('type', 'text/html')) in self.html_types: if element in self.can_contain_relative_uris: output = _resolveRelativeURIs(output, self.baseuri, self.encoding) # sanitize embedded markup if self.mapContentType(self.contentparams.get('type', 'text/html')) in self.html_types: if element in self.can_contain_dangerous_markup: output = _sanitizeHTML(output, self.encoding) if self.encoding and type(output) != type(u''): try: output = unicode(output, self.encoding) except: pass # categories/tags/keywords/whatever are handled in _end_category if element == 'category': return output # store output in appropriate place(s) if self.inentry and not self.insource: if element == 'content': self.entries[-1].setdefault(element, []) contentparams = copy.deepcopy(self.contentparams) contentparams['value'] = output self.entries[-1][element].append(contentparams) elif element == 'link': self.entries[-1][element] = output if output: self.entries[-1]['links'][-1]['href'] = output else: if element == 'description': element = 'summary' self.entries[-1][element] = output if self.incontent: contentparams = copy.deepcopy(self.contentparams) contentparams['value'] = output self.entries[-1][element + '_detail'] = contentparams elif (self.infeed or self.insource) and (not self.intextinput) and (not self.inimage): context = self._getContext() if element == 'description': element = 'subtitle' context[element] = output if element == 'link': context['links'][-1]['href'] = output elif self.incontent: contentparams = copy.deepcopy(self.contentparams) contentparams['value'] = output context[element + '_detail'] = contentparams return output def pushContent(self, tag, attrsD, defaultContentType, expectingText): self.incontent += 1 self.contentparams = FeedParserDict({ 'type': self.mapContentType(attrsD.get('type', defaultContentType)), 'language': self.lang, 'base': self.baseuri}) self.contentparams['base64'] = self._isBase64(attrsD, self.contentparams) self.push(tag, expectingText) def popContent(self, tag): value = self.pop(tag) self.incontent -= 1 self.contentparams.clear() return value def _mapToStandardPrefix(self, name): colonpos = name.find(':') if colonpos <> -1: prefix = name[:colonpos] suffix = name[colonpos+1:] prefix = self.namespacemap.get(prefix, prefix) name = prefix + ':' + suffix return name def _getAttribute(self, attrsD, name): return attrsD.get(self._mapToStandardPrefix(name)) def _isBase64(self, attrsD, contentparams): if attrsD.get('mode', '') == 'base64': return 1 if self.contentparams['type'].startswith('text/'): return 0 if self.contentparams['type'].endswith('+xml'): return 0 if self.contentparams['type'].endswith('/xml'): return 0 return 1 def _itsAnHrefDamnIt(self, attrsD): href = attrsD.get('url', attrsD.get('uri', attrsD.get('href', None))) if href: try: del attrsD['url'] except KeyError: pass try: del attrsD['uri'] except KeyError: pass attrsD['href'] = href return attrsD def _save(self, key, value): context = self._getContext() context.setdefault(key, value) def _start_rss(self, attrsD): versionmap = {'0.91': 'rss091u', '0.92': 'rss092', '0.93': 'rss093', '0.94': 'rss094'} if not self.version: attr_version = attrsD.get('version', '') version = versionmap.get(attr_version) if version: self.version = version elif attr_version.startswith('2.'): self.version = 'rss20' else: self.version = 'rss' def _start_dlhottitles(self, attrsD): self.version = 'hotrss' def _start_channel(self, attrsD): self.infeed = 1 self._cdf_common(attrsD) _start_feedinfo = _start_channel def _cdf_common(self, attrsD): if attrsD.has_key('lastmod'): self._start_modified({}) self.elementstack[-1][-1] = attrsD['lastmod'] self._end_modified() if attrsD.has_key('href'): self._start_link({}) self.elementstack[-1][-1] = attrsD['href'] self._end_link() def _start_feed(self, attrsD): self.infeed = 1 versionmap = {'0.1': 'atom01', '0.2': 'atom02', '0.3': 'atom03'} if not self.version: attr_version = attrsD.get('version') version = versionmap.get(attr_version) if version: self.version = version else: self.version = 'atom' def _end_channel(self): self.infeed = 0 _end_feed = _end_channel def _start_image(self, attrsD): self.inimage = 1 self.push('image', 0) context = self._getContext() context.setdefault('image', FeedParserDict()) def _end_image(self): self.pop('image') self.inimage = 0 def _start_textinput(self, attrsD): self.intextinput = 1 self.push('textinput', 0) context = self._getContext() context.setdefault('textinput', FeedParserDict()) _start_textInput = _start_textinput def _end_textinput(self): self.pop('textinput') self.intextinput = 0 _end_textInput = _end_textinput def _start_author(self, attrsD): self.inauthor = 1 self.push('author', 1) _start_managingeditor = _start_author _start_dc_author = _start_author _start_dc_creator = _start_author _start_itunes_author = _start_author def _end_author(self): self.pop('author') self.inauthor = 0 self._sync_author_detail() _end_managingeditor = _end_author _end_dc_author = _end_author _end_dc_creator = _end_author _end_itunes_author = _end_author def _start_itunes_owner(self, attrsD): self.inpublisher = 1 self.push('publisher', 0) def _end_itunes_owner(self): self.pop('publisher') self.inpublisher = 0 self._sync_author_detail('publisher') def _start_contributor(self, attrsD): self.incontributor = 1 context = self._getContext() context.setdefault('contributors', []) context['contributors'].append(FeedParserDict()) self.push('contributor', 0) def _end_contributor(self): self.pop('contributor') self.incontributor = 0 def _start_dc_contributor(self, attrsD): self.incontributor = 1 context = self._getContext() context.setdefault('contributors', []) context['contributors'].append(FeedParserDict()) self.push('name', 0) def _end_dc_contributor(self): self._end_name() self.incontributor = 0 def _start_name(self, attrsD): self.push('name', 0) _start_itunes_name = _start_name def _end_name(self): value = self.pop('name') if self.inpublisher: self._save_author('name', value, 'publisher') elif self.inauthor: self._save_author('name', value) elif self.incontributor: self._save_contributor('name', value) elif self.intextinput: context = self._getContext() context['textinput']['name'] = value _end_itunes_name = _end_name def _start_width(self, attrsD): self.push('width', 0) def _end_width(self): value = self.pop('width') try: value = int(value) except: value = 0 if self.inimage: context = self._getContext() context['image']['width'] = value def _start_height(self, attrsD): self.push('height', 0) def _end_height(self): value = self.pop('height') try: value = int(value) except: value = 0 if self.inimage: context = self._getContext() context['image']['height'] = value def _start_url(self, attrsD): self.push('href', 1) _start_homepage = _start_url _start_uri = _start_url def _end_url(self): value = self.pop('href') if self.inauthor: self._save_author('href', value) elif self.incontributor: self._save_contributor('href', value) elif self.inimage: context = self._getContext() context['image']['href'] = value elif self.intextinput: context = self._getContext() context['textinput']['link'] = value _end_homepage = _end_url _end_uri = _end_url def _start_email(self, attrsD): self.push('email', 0) _start_itunes_email = _start_email def _end_email(self): value = self.pop('email') if self.inpublisher: self._save_author('email', value, 'publisher') elif self.inauthor: self._save_author('email', value) elif self.incontributor: self._save_contributor('email', value) _end_itunes_email = _end_email def _getContext(self): if self.insource: context = self.sourcedata elif self.inentry: context = self.entries[-1] else: context = self.feeddata return context def _save_author(self, key, value, prefix='author'): context = self._getContext() context.setdefault(prefix + '_detail', FeedParserDict()) context[prefix + '_detail'][key] = value self._sync_author_detail() def _save_contributor(self, key, value): context = self._getContext() context.setdefault('contributors', [FeedParserDict()]) context['contributors'][-1][key] = value def _sync_author_detail(self, key='author'): context = self._getContext() detail = context.get('%s_detail' % key) if detail: name = detail.get('name') email = detail.get('email') if name and email: context[key] = '%s (%s)' % (name, email) elif name: context[key] = name elif email: context[key] = email else: author = context.get(key) if not author: return emailmatch = re.search(r'''(([a-zA-Z0-9\_\-\.\+]+)@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.)|(([a-zA-Z0-9\-]+\.)+))([a-zA-Z]{2,4}|[0-9]{1,3})(\]?))''', author) if not emailmatch: return email = emailmatch.group(0) # probably a better way to do the following, but it passes all the tests author = author.replace(email, '') author = author.replace('()', '') author = author.strip() if author and (author[0] == '('): author = author[1:] if author and (author[-1] == ')'): author = author[:-1] author = author.strip() context.setdefault('%s_detail' % key, FeedParserDict()) context['%s_detail' % key]['name'] = author context['%s_detail' % key]['email'] = email def _start_subtitle(self, attrsD): self.pushContent('subtitle', attrsD, 'text/plain', 1) _start_tagline = _start_subtitle _start_itunes_subtitle = _start_subtitle def _end_subtitle(self): self.popContent('subtitle') _end_tagline = _end_subtitle _end_itunes_subtitle = _end_subtitle def _start_rights(self, attrsD): self.pushContent('rights', attrsD, 'text/plain', 1) _start_dc_rights = _start_rights _start_copyright = _start_rights def _end_rights(self): self.popContent('rights') _end_dc_rights = _end_rights _end_copyright = _end_rights def _start_item(self, attrsD): self.entries.append(FeedParserDict()) self.push('item', 0) self.inentry = 1 self.guidislink = 0 id = self._getAttribute(attrsD, 'rdf:about') if id: context = self._getContext() context['id'] = id self._cdf_common(attrsD) _start_entry = _start_item _start_product = _start_item def _end_item(self): self.pop('item') self.inentry = 0 _end_entry = _end_item def _start_dc_language(self, attrsD): self.push('language', 1) _start_language = _start_dc_language def _end_dc_language(self): self.lang = self.pop('language') _end_language = _end_dc_language def _start_dc_publisher(self, attrsD): self.push('publisher', 1) _start_webmaster = _start_dc_publisher def _end_dc_publisher(self): self.pop('publisher') self._sync_author_detail('publisher') _end_webmaster = _end_dc_publisher def _start_published(self, attrsD): self.push('published', 1) _start_dcterms_issued = _start_published _start_issued = _start_published def _end_published(self): value = self.pop('published') self._save('published_parsed', _parse_date(value)) _end_dcterms_issued = _end_published _end_issued = _end_published def _start_updated(self, attrsD): self.push('updated', 1) _start_modified = _start_updated _start_dcterms_modified = _start_updated _start_pubdate = _start_updated _start_dc_date = _start_updated def _end_updated(self): value = self.pop('updated') parsed_value = _parse_date(value) self._save('updated_parsed', parsed_value) _end_modified = _end_updated _end_dcterms_modified = _end_updated _end_pubdate = _end_updated _end_dc_date = _end_updated def _start_created(self, attrsD): self.push('created', 1) _start_dcterms_created = _start_created def _end_created(self): value = self.pop('created') self._save('created_parsed', _parse_date(value)) _end_dcterms_created = _end_created def _start_expirationdate(self, attrsD): self.push('expired', 1) def _end_expirationdate(self): self._save('expired_parsed', _parse_date(self.pop('expired'))) def _start_cc_license(self, attrsD): self.push('license', 1) value = self._getAttribute(attrsD, 'rdf:resource') if value: self.elementstack[-1][2].append(value) self.pop('license') def _start_creativecommons_license(self, attrsD): self.push('license', 1) def _end_creativecommons_license(self): self.pop('license') def _addTag(self, term, scheme, label): context = self._getContext() tags = context.setdefault('tags', []) if (not term) and (not scheme) and (not label): return value = FeedParserDict({'term': term, 'scheme': scheme, 'label': label}) if value not in tags: tags.append(FeedParserDict({'term': term, 'scheme': scheme, 'label': label})) def _start_category(self, attrsD): if _debug: sys.stderr.write('entering _start_category with %s\n' % repr(attrsD)) term = attrsD.get('term') scheme = attrsD.get('scheme', attrsD.get('domain')) label = attrsD.get('label') self._addTag(term, scheme, label) self.push('category', 1) _start_dc_subject = _start_category _start_keywords = _start_category def _end_itunes_keywords(self): for term in self.pop('itunes_keywords').split(): self._addTag(term, 'http://www.itunes.com/', None) def _start_itunes_category(self, attrsD): self._addTag(attrsD.get('text'), 'http://www.itunes.com/', None) self.push('category', 1) def _end_category(self): value = self.pop('category') if not value: return context = self._getContext() tags = context['tags'] if value and len(tags) and not tags[-1]['term']: tags[-1]['term'] = value else: self._addTag(value, None, None) _end_dc_subject = _end_category _end_keywords = _end_category _end_itunes_category = _end_category def _start_cloud(self, attrsD): self._getContext()['cloud'] = FeedParserDict(attrsD) def _start_link(self, attrsD): attrsD.setdefault('rel', 'alternate') attrsD.setdefault('type', 'text/html') attrsD = self._itsAnHrefDamnIt(attrsD) if attrsD.has_key('href'): attrsD['href'] = self.resolveURI(attrsD['href']) expectingText = self.infeed or self.inentry or self.insource context = self._getContext() context.setdefault('links', []) context['links'].append(FeedParserDict(attrsD)) if attrsD['rel'] == 'enclosure': self._start_enclosure(attrsD) if attrsD.has_key('href'): expectingText = 0 if (attrsD.get('rel') == 'alternate') and (self.mapContentType(attrsD.get('type')) in self.html_types): context['link'] = attrsD['href'] else: self.push('link', expectingText) _start_producturl = _start_link def _end_link(self): value = self.pop('link') context = self._getContext() if self.intextinput: context['textinput']['link'] = value if self.inimage: context['image']['link'] = value _end_producturl = _end_link def _start_guid(self, attrsD): self.guidislink = (attrsD.get('ispermalink', 'true') == 'true') self.push('id', 1) def _end_guid(self): value = self.pop('id') self._save('guidislink', self.guidislink and not self._getContext().has_key('link')) if self.guidislink: # guid acts as link, but only if 'ispermalink' is not present or is 'true', # and only if the item doesn't already have a link element self._save('link', value) def _start_title(self, attrsD): self.pushContent('title', attrsD, 'text/plain', self.infeed or self.inentry or self.insource) _start_dc_title = _start_title _start_media_title = _start_title def _end_title(self): value = self.popContent('title') context = self._getContext() if self.intextinput: context['textinput']['title'] = value elif self.inimage: context['image']['title'] = value _end_dc_title = _end_title _end_media_title = _end_title def _start_description(self, attrsD): context = self._getContext() if context.has_key('summary'): self._summaryKey = 'content' self._start_content(attrsD) else: self.pushContent('description', attrsD, 'text/html', self.infeed or self.inentry or self.insource) def _start_abstract(self, attrsD): self.pushContent('description', attrsD, 'text/plain', self.infeed or self.inentry or self.insource) def _end_description(self): if self._summaryKey == 'content': self._end_content() else: value = self.popContent('description') context = self._getContext() if self.intextinput: context['textinput']['description'] = value elif self.inimage: context['image']['description'] = value self._summaryKey = None _end_abstract = _end_description def _start_info(self, attrsD): self.pushContent('info', attrsD, 'text/plain', 1) _start_feedburner_browserfriendly = _start_info def _end_info(self): self.popContent('info') _end_feedburner_browserfriendly = _end_info def _start_generator(self, attrsD): if attrsD: attrsD = self._itsAnHrefDamnIt(attrsD) if attrsD.has_key('href'): attrsD['href'] = self.resolveURI(attrsD['href']) self._getContext()['generator_detail'] = FeedParserDict(attrsD) self.push('generator', 1) def _end_generator(self): value = self.pop('generator') context = self._getContext() if context.has_key('generator_detail'): context['generator_detail']['name'] = value def _start_admin_generatoragent(self, attrsD): self.push('generator', 1) value = self._getAttribute(attrsD, 'rdf:resource') if value: self.elementstack[-1][2].append(value) self.pop('generator') self._getContext()['generator_detail'] = FeedParserDict({'href': value}) def _start_admin_errorreportsto(self, attrsD): self.push('errorreportsto', 1) value = self._getAttribute(attrsD, 'rdf:resource') if value: self.elementstack[-1][2].append(value) self.pop('errorreportsto') def _start_summary(self, attrsD): context = self._getContext() if context.has_key('summary'): self._summaryKey = 'content' self._start_content(attrsD) else: self._summaryKey = 'summary' self.pushContent(self._summaryKey, attrsD, 'text/plain', 1) _start_itunes_summary = _start_summary def _end_summary(self): if self._summaryKey == 'content': self._end_content() else: self.popContent(self._summaryKey or 'summary') self._summaryKey = None _end_itunes_summary = _end_summary def _start_enclosure(self, attrsD): attrsD = self._itsAnHrefDamnIt(attrsD) self._getContext().setdefault('enclosures', []).append(FeedParserDict(attrsD)) href = attrsD.get('href') if href: context = self._getContext() if not context.get('id'): context['id'] = href def _start_source(self, attrsD): self.insource = 1 def _end_source(self): self.insource = 0 self._getContext()['source'] = copy.deepcopy(self.sourcedata) self.sourcedata.clear() def _start_content(self, attrsD): self.pushContent('content', attrsD, 'text/plain', 1) src = attrsD.get('src') if src: self.contentparams['src'] = src self.push('content', 1) def _start_prodlink(self, attrsD): self.pushContent('content', attrsD, 'text/html', 1) def _start_body(self, attrsD): self.pushContent('content', attrsD, 'application/xhtml+xml', 1) _start_xhtml_body = _start_body def _start_content_encoded(self, attrsD): self.pushContent('content', attrsD, 'text/html', 1) _start_fullitem = _start_content_encoded def _end_content(self): copyToDescription = self.mapContentType(self.contentparams.get('type')) in (['text/plain'] + self.html_types) value = self.popContent('content') if copyToDescription: self._save('description', value) _end_body = _end_content _end_xhtml_body = _end_content _end_content_encoded = _end_content _end_fullitem = _end_content _end_prodlink = _end_content def _start_itunes_image(self, attrsD): self.push('itunes_image', 0) self._getContext()['image'] = FeedParserDict({'href': attrsD.get('href')}) _start_itunes_link = _start_itunes_image def _end_itunes_block(self): value = self.pop('itunes_block', 0) self._getContext()['itunes_block'] = (value == 'yes') and 1 or 0 def _end_itunes_explicit(self): value = self.pop('itunes_explicit', 0) self._getContext()['itunes_explicit'] = (value == 'yes') and 1 or 0 if _XML_AVAILABLE: class _StrictFeedParser(_FeedParserMixin, xml.sax.handler.ContentHandler): def __init__(self, baseuri, baselang, encoding): if _debug: sys.stderr.write('trying StrictFeedParser\n') xml.sax.handler.ContentHandler.__init__(self) _FeedParserMixin.__init__(self, baseuri, baselang, encoding) self.bozo = 0 self.exc = None def startPrefixMapping(self, prefix, uri): self.trackNamespace(prefix, uri) def startElementNS(self, name, qname, attrs): namespace, localname = name lowernamespace = str(namespace or '').lower() if lowernamespace.find('backend.userland.com/rss') <> -1: # match any backend.userland.com namespace namespace = 'http://backend.userland.com/rss' lowernamespace = namespace if qname and qname.find(':') > 0: givenprefix = qname.split(':')[0] else: givenprefix = None prefix = self._matchnamespaces.get(lowernamespace, givenprefix) if givenprefix and (prefix == None or (prefix == '' and lowernamespace == '')) and not self.namespacesInUse.has_key(givenprefix): raise UndeclaredNamespace, "'%s' is not associated with a namespace" % givenprefix if prefix: localname = prefix + ':' + localname localname = str(localname).lower() if _debug: sys.stderr.write('startElementNS: qname = %s, namespace = %s, givenprefix = %s, prefix = %s, attrs = %s, localname = %s\n' % (qname, namespace, givenprefix, prefix, attrs.items(), localname)) # qname implementation is horribly broken in Python 2.1 (it # doesn't report any), and slightly broken in Python 2.2 (it # doesn't report the xml: namespace). So we match up namespaces # with a known list first, and then possibly override them with # the qnames the SAX parser gives us (if indeed it gives us any # at all). Thanks to MatejC for helping me test this and # tirelessly telling me that it didn't work yet. attrsD = {} for (namespace, attrlocalname), attrvalue in attrs._attrs.items(): lowernamespace = (namespace or '').lower() prefix = self._matchnamespaces.get(lowernamespace, '') if prefix: attrlocalname = prefix + ':' + attrlocalname attrsD[str(attrlocalname).lower()] = attrvalue for qname in attrs.getQNames(): attrsD[str(qname).lower()] = attrs.getValueByQName(qname) self.unknown_starttag(localname, attrsD.items()) def characters(self, text): self.handle_data(text) def endElementNS(self, name, qname): namespace, localname = name lowernamespace = str(namespace or '').lower() if qname and qname.find(':') > 0: givenprefix = qname.split(':')[0] else: givenprefix = '' prefix = self._matchnamespaces.get(lowernamespace, givenprefix) if prefix: localname = prefix + ':' + localname localname = str(localname).lower() self.unknown_endtag(localname) def error(self, exc): self.bozo = 1 self.exc = exc def fatalError(self, exc): self.error(exc) raise exc class _BaseHTMLProcessor(sgmllib.SGMLParser): elements_no_end_tag = ['area', 'base', 'basefont', 'br', 'col', 'frame', 'hr', 'img', 'input', 'isindex', 'link', 'meta', 'param'] def __init__(self, encoding): self.encoding = encoding if _debug: sys.stderr.write('entering BaseHTMLProcessor, encoding=%s\n' % self.encoding) sgmllib.SGMLParser.__init__(self) def reset(self): self.pieces = [] sgmllib.SGMLParser.reset(self) def _shorttag_replace(self, match): tag = match.group(1) if tag in self.elements_no_end_tag: return '<' + tag + ' />' else: return '<' + tag + '>' def feed(self, data): data = re.compile(r'', self._shorttag_replace, data) # bug [ 1399464 ] Bad regexp for _shorttag_replace data = re.sub(r'<([^<\s]+?)\s*/>', self._shorttag_replace, data) data = data.replace(''', "'") data = data.replace('"', '"') if self.encoding and type(data) == type(u''): data = data.encode(self.encoding) sgmllib.SGMLParser.feed(self, data) def normalize_attrs(self, attrs): # utility method to be called by descendants attrs = [(k.lower(), v) for k, v in attrs] attrs = [(k, k in ('rel', 'type') and v.lower() or v) for k, v in attrs] return attrs def unknown_starttag(self, tag, attrs): # called for each start tag # attrs is a list of (attr, value) tuples # e.g. for
, tag='pre', attrs=[('class', 'screen')]
        if _debug: sys.stderr.write('_BaseHTMLProcessor, unknown_starttag, tag=%s\n' % tag)
        uattrs = []
        # thanks to Kevin Marks for this breathtaking hack to deal with (valid) high-bit attribute values in UTF-8 feeds
        for key, value in attrs:
            if type(value) != type(u''):
                value = unicode(value, self.encoding)
            uattrs.append((unicode(key, self.encoding), value))
        strattrs = u''.join([u' %s="%s"' % (key, value) for key, value in uattrs]).encode(self.encoding)
        if tag in self.elements_no_end_tag:
            self.pieces.append('<%(tag)s%(strattrs)s />' % locals())
        else:
            self.pieces.append('<%(tag)s%(strattrs)s>' % locals())

    def unknown_endtag(self, tag):
        # called for each end tag, e.g. for 
, tag will be 'pre' # Reconstruct the original end tag. if tag not in self.elements_no_end_tag: self.pieces.append("" % locals()) def handle_charref(self, ref): # called for each character reference, e.g. for ' ', ref will be '160' # Reconstruct the original character reference. self.pieces.append('&#%(ref)s;' % locals()) def handle_entityref(self, ref): # called for each entity reference, e.g. for '©', ref will be 'copy' # Reconstruct the original entity reference. self.pieces.append('&%(ref)s;' % locals()) def handle_data(self, text): # called for each block of plain text, i.e. outside of any tag and # not containing any character or entity references # Store the original text verbatim. if _debug: sys.stderr.write('_BaseHTMLProcessor, handle_text, text=%s\n' % text) self.pieces.append(text) def handle_comment(self, text): # called for each HTML comment, e.g. # Reconstruct the original comment. self.pieces.append('' % locals()) def handle_pi(self, text): # called for each processing instruction, e.g. # Reconstruct original processing instruction. self.pieces.append('' % locals()) def handle_decl(self, text): # called for the DOCTYPE, if present, e.g. # # Reconstruct original DOCTYPE self.pieces.append('' % locals()) _new_declname_match = re.compile(r'[a-zA-Z][-_.a-zA-Z0-9:]*\s*').match def _scan_name(self, i, declstartpos): rawdata = self.rawdata n = len(rawdata) if i == n: return None, -1 m = self._new_declname_match(rawdata, i) if m: s = m.group() name = s.strip() if (i + len(s)) == n: return None, -1 # end of buffer return name.lower(), m.end() else: self.handle_data(rawdata) # self.updatepos(declstartpos, i) return None, -1 def output(self): '''Return processed HTML as a single string''' return ''.join([str(p) for p in self.pieces]) class _LooseFeedParser(_FeedParserMixin, _BaseHTMLProcessor): def __init__(self, baseuri, baselang, encoding): sgmllib.SGMLParser.__init__(self) _FeedParserMixin.__init__(self, baseuri, baselang, encoding) def decodeEntities(self, element, data): data = data.replace('<', '<') data = data.replace('<', '<') data = data.replace('>', '>') data = data.replace('>', '>') data = data.replace('&', '&') data = data.replace('&', '&') data = data.replace('"', '"') data = data.replace('"', '"') data = data.replace(''', ''') data = data.replace(''', ''') if self.contentparams.has_key('type') and not self.contentparams.get('type', 'xml').endswith('xml'): data = data.replace('<', '<') data = data.replace('>', '>') data = data.replace('&', '&') data = data.replace('"', '"') data = data.replace(''', "'") return data class _RelativeURIResolver(_BaseHTMLProcessor): relative_uris = [('a', 'href'), ('applet', 'codebase'), ('area', 'href'), ('blockquote', 'cite'), ('body', 'background'), ('del', 'cite'), ('form', 'action'), ('frame', 'longdesc'), ('frame', 'src'), ('iframe', 'longdesc'), ('iframe', 'src'), ('head', 'profile'), ('img', 'longdesc'), ('img', 'src'), ('img', 'usemap'), ('input', 'src'), ('input', 'usemap'), ('ins', 'cite'), ('link', 'href'), ('object', 'classid'), ('object', 'codebase'), ('object', 'data'), ('object', 'usemap'), ('q', 'cite'), ('script', 'src')] def __init__(self, baseuri, encoding): _BaseHTMLProcessor.__init__(self, encoding) self.baseuri = baseuri def resolveURI(self, uri): return _urljoin(self.baseuri, uri) def unknown_starttag(self, tag, attrs): attrs = self.normalize_attrs(attrs) attrs = [(key, ((tag, key) in self.relative_uris) and self.resolveURI(value) or value) for key, value in attrs] _BaseHTMLProcessor.unknown_starttag(self, tag, attrs) def _resolveRelativeURIs(htmlSource, baseURI, encoding): if _debug: sys.stderr.write('entering _resolveRelativeURIs\n') p = _RelativeURIResolver(baseURI, encoding) p.feed(htmlSource) return p.output() class _HTMLSanitizer(_BaseHTMLProcessor): acceptable_elements = ['a', 'abbr', 'acronym', 'address', 'area', 'b', 'big', 'blockquote', 'br', 'button', 'caption', 'center', 'cite', 'code', 'col', 'colgroup', 'dd', 'del', 'dfn', 'dir', 'div', 'dl', 'dt', 'em', 'fieldset', 'font', 'form', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'hr', 'i', 'img', 'input', 'ins', 'kbd', 'label', 'legend', 'li', 'map', 'menu', 'ol', 'optgroup', 'option', 'p', 'pre', 'q', 's', 'samp', 'select', 'small', 'span', 'strike', 'strong', 'sub', 'sup', 'table', 'tbody', 'td', 'textarea', 'tfoot', 'th', 'thead', 'tr', 'tt', 'u', 'ul', 'var'] acceptable_attributes = ['abbr', 'accept', 'accept-charset', 'accesskey', 'action', 'align', 'alt', 'axis', 'border', 'cellpadding', 'cellspacing', 'char', 'charoff', 'charset', 'checked', 'cite', 'class', 'clear', 'cols', 'colspan', 'color', 'compact', 'coords', 'datetime', 'dir', 'disabled', 'enctype', 'for', 'frame', 'headers', 'height', 'href', 'hreflang', 'hspace', 'id', 'ismap', 'label', 'lang', 'longdesc', 'maxlength', 'media', 'method', 'multiple', 'name', 'nohref', 'noshade', 'nowrap', 'prompt', 'readonly', 'rel', 'rev', 'rows', 'rowspan', 'rules', 'scope', 'selected', 'shape', 'size', 'span', 'src', 'start', 'summary', 'tabindex', 'target', 'title', 'type', 'usemap', 'valign', 'value', 'vspace', 'width'] unacceptable_elements_with_end_tag = ['script', 'applet'] def reset(self): _BaseHTMLProcessor.reset(self) self.unacceptablestack = 0 def unknown_starttag(self, tag, attrs): if not tag in self.acceptable_elements: if tag in self.unacceptable_elements_with_end_tag: self.unacceptablestack += 1 return attrs = self.normalize_attrs(attrs) attrs = [(key, value) for key, value in attrs if key in self.acceptable_attributes] _BaseHTMLProcessor.unknown_starttag(self, tag, attrs) def unknown_endtag(self, tag): if not tag in self.acceptable_elements: if tag in self.unacceptable_elements_with_end_tag: self.unacceptablestack -= 1 return _BaseHTMLProcessor.unknown_endtag(self, tag) def handle_pi(self, text): pass def handle_decl(self, text): pass def handle_data(self, text): if not self.unacceptablestack: _BaseHTMLProcessor.handle_data(self, text) def _sanitizeHTML(htmlSource, encoding): p = _HTMLSanitizer(encoding) p.feed(htmlSource) data = p.output() if TIDY_MARKUP: # loop through list of preferred Tidy interfaces looking for one that's installed, # then set up a common _tidy function to wrap the interface-specific API. _tidy = None for tidy_interface in PREFERRED_TIDY_INTERFACES: try: if tidy_interface == "uTidy": from tidy import parseString as _utidy def _tidy(data, **kwargs): return str(_utidy(data, **kwargs)) break elif tidy_interface == "mxTidy": from mx.Tidy import Tidy as _mxtidy def _tidy(data, **kwargs): nerrors, nwarnings, data, errordata = _mxtidy.tidy(data, **kwargs) return data break except: pass if _tidy: utf8 = type(data) == type(u'') if utf8: data = data.encode('utf-8') data = _tidy(data, output_xhtml=1, numeric_entities=1, wrap=0, char_encoding="utf8") if utf8: data = unicode(data, 'utf-8') if data.count(''): data = data.split('>', 1)[1] if data.count('= '2.3.3' assert base64 != None user, passw = base64.decodestring(req.headers['Authorization'].split(' ')[1]).split(':') realm = re.findall('realm="([^"]*)"', headers['WWW-Authenticate'])[0] self.add_password(realm, host, user, passw) retry = self.http_error_auth_reqed('www-authenticate', host, req, headers) self.reset_retry_count() return retry except: return self.http_error_default(req, fp, code, msg, headers) def _open_resource(url_file_stream_or_string, etag, modified, agent, referrer, handlers): """URL, filename, or string --> stream This function lets you define parsers that take any input source (URL, pathname to local or network file, or actual data as a string) and deal with it in a uniform manner. Returned object is guaranteed to have all the basic stdio read methods (read, readline, readlines). Just .close() the object when you're done with it. If the etag argument is supplied, it will be used as the value of an If-None-Match request header. If the modified argument is supplied, it must be a tuple of 9 integers as returned by gmtime() in the standard Python time module. This MUST be in GMT (Greenwich Mean Time). The formatted date/time will be used as the value of an If-Modified-Since request header. If the agent argument is supplied, it will be used as the value of a User-Agent request header. If the referrer argument is supplied, it will be used as the value of a Referer[sic] request header. If handlers is supplied, it is a list of handlers used to build a urllib2 opener. """ if hasattr(url_file_stream_or_string, 'read'): return url_file_stream_or_string if url_file_stream_or_string == '-': return sys.stdin if urlparse.urlparse(url_file_stream_or_string)[0] in ('http', 'https', 'ftp'): if not agent: agent = USER_AGENT # test for inline user:password for basic auth auth = None if base64: urltype, rest = urllib.splittype(url_file_stream_or_string) realhost, rest = urllib.splithost(rest) if realhost: user_passwd, realhost = urllib.splituser(realhost) if user_passwd: url_file_stream_or_string = '%s://%s%s' % (urltype, realhost, rest) auth = base64.encodestring(user_passwd).strip() # try to open with urllib2 (to use optional headers) request = urllib2.Request(url_file_stream_or_string) request.add_header('User-Agent', agent) if etag: request.add_header('If-None-Match', etag) if modified: # format into an RFC 1123-compliant timestamp. We can't use # time.strftime() since the %a and %b directives can be affected # by the current locale, but RFC 2616 states that dates must be # in English. short_weekdays = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'] months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'] request.add_header('If-Modified-Since', '%s, %02d %s %04d %02d:%02d:%02d GMT' % (short_weekdays[modified[6]], modified[2], months[modified[1] - 1], modified[0], modified[3], modified[4], modified[5])) if referrer: request.add_header('Referer', referrer) if gzip and zlib: request.add_header('Accept-encoding', 'gzip, deflate') elif gzip: request.add_header('Accept-encoding', 'gzip') elif zlib: request.add_header('Accept-encoding', 'deflate') else: request.add_header('Accept-encoding', '') if auth: request.add_header('Authorization', 'Basic %s' % auth) if ACCEPT_HEADER: request.add_header('Accept', ACCEPT_HEADER) request.add_header('A-IM', 'feed') # RFC 3229 support opener = apply(urllib2.build_opener, tuple([_FeedURLHandler()] + handlers)) opener.addheaders = [] # RMK - must clear so we only send our custom User-Agent try: return opener.open(request) finally: opener.close() # JohnD # try to open with native open function (if url_file_stream_or_string is a filename) try: return open(url_file_stream_or_string) except: pass # treat url_file_stream_or_string as string return _StringIO(str(url_file_stream_or_string)) _date_handlers = [] def registerDateHandler(func): '''Register a date handler function (takes string, returns 9-tuple date in GMT)''' _date_handlers.insert(0, func) # ISO-8601 date parsing routines written by Fazal Majid. # The ISO 8601 standard is very convoluted and irregular - a full ISO 8601 # parser is beyond the scope of feedparser and would be a worthwhile addition # to the Python library. # A single regular expression cannot parse ISO 8601 date formats into groups # as the standard is highly irregular (for instance is 030104 2003-01-04 or # 0301-04-01), so we use templates instead. # Please note the order in templates is significant because we need a # greedy match. _iso8601_tmpl = ['YYYY-?MM-?DD', 'YYYY-MM', 'YYYY-?OOO', 'YY-?MM-?DD', 'YY-?OOO', 'YYYY', '-YY-?MM', '-OOO', '-YY', '--MM-?DD', '--MM', '---DD', 'CC', ''] _iso8601_re = [ tmpl.replace( 'YYYY', r'(?P\d{4})').replace( 'YY', r'(?P\d\d)').replace( 'MM', r'(?P[01]\d)').replace( 'DD', r'(?P[0123]\d)').replace( 'OOO', r'(?P[0123]\d\d)').replace( 'CC', r'(?P\d\d$)') + r'(T?(?P\d{2}):(?P\d{2})' + r'(:(?P\d{2}))?' + r'(?P[+-](?P\d{2})(:(?P\d{2}))?|Z)?)?' for tmpl in _iso8601_tmpl] del tmpl _iso8601_matches = [re.compile(regex).match for regex in _iso8601_re] del regex def _parse_date_iso8601(dateString): '''Parse a variety of ISO-8601-compatible formats like 20040105''' m = None for _iso8601_match in _iso8601_matches: m = _iso8601_match(dateString) if m: break if not m: return if m.span() == (0, 0): return params = m.groupdict() ordinal = params.get('ordinal', 0) if ordinal: ordinal = int(ordinal) else: ordinal = 0 year = params.get('year', '--') if not year or year == '--': year = time.gmtime()[0] elif len(year) == 2: # ISO 8601 assumes current century, i.e. 93 -> 2093, NOT 1993 year = 100 * int(time.gmtime()[0] / 100) + int(year) else: year = int(year) month = params.get('month', '-') if not month or month == '-': # ordinals are NOT normalized by mktime, we simulate them # by setting month=1, day=ordinal if ordinal: month = 1 else: month = time.gmtime()[1] month = int(month) day = params.get('day', 0) if not day: # see above if ordinal: day = ordinal elif params.get('century', 0) or \ params.get('year', 0) or params.get('month', 0): day = 1 else: day = time.gmtime()[2] else: day = int(day) # special case of the century - is the first year of the 21st century # 2000 or 2001 ? The debate goes on... if 'century' in params.keys(): year = (int(params['century']) - 1) * 100 + 1 # in ISO 8601 most fields are optional for field in ['hour', 'minute', 'second', 'tzhour', 'tzmin']: if not params.get(field, None): params[field] = 0 hour = int(params.get('hour', 0)) minute = int(params.get('minute', 0)) second = int(params.get('second', 0)) # weekday is normalized by mktime(), we can ignore it weekday = 0 # daylight savings is complex, but not needed for feedparser's purposes # as time zones, if specified, include mention of whether it is active # (e.g. PST vs. PDT, CET). Using -1 is implementation-dependent and # and most implementations have DST bugs daylight_savings_flag = 0 tm = [year, month, day, hour, minute, second, weekday, ordinal, daylight_savings_flag] # ISO 8601 time zone adjustments tz = params.get('tz') if tz and tz != 'Z': if tz[0] == '-': tm[3] += int(params.get('tzhour', 0)) tm[4] += int(params.get('tzmin', 0)) elif tz[0] == '+': tm[3] -= int(params.get('tzhour', 0)) tm[4] -= int(params.get('tzmin', 0)) else: return None # Python's time.mktime() is a wrapper around the ANSI C mktime(3c) # which is guaranteed to normalize d/m/y/h/m/s. # Many implementations have bugs, but we'll pretend they don't. return time.localtime(time.mktime(tm)) registerDateHandler(_parse_date_iso8601) # 8-bit date handling routines written by ytrewq1. _korean_year = u'\ub144' # b3e2 in euc-kr _korean_month = u'\uc6d4' # bff9 in euc-kr _korean_day = u'\uc77c' # c0cf in euc-kr _korean_am = u'\uc624\uc804' # bfc0 c0fc in euc-kr _korean_pm = u'\uc624\ud6c4' # bfc0 c8c4 in euc-kr _korean_onblog_date_re = \ re.compile('(\d{4})%s\s+(\d{2})%s\s+(\d{2})%s\s+(\d{2}):(\d{2}):(\d{2})' % \ (_korean_year, _korean_month, _korean_day)) _korean_nate_date_re = \ re.compile(u'(\d{4})-(\d{2})-(\d{2})\s+(%s|%s)\s+(\d{,2}):(\d{,2}):(\d{,2})' % \ (_korean_am, _korean_pm)) def _parse_date_onblog(dateString): '''Parse a string according to the OnBlog 8-bit date format''' m = _korean_onblog_date_re.match(dateString) if not m: return w3dtfdate = '%(year)s-%(month)s-%(day)sT%(hour)s:%(minute)s:%(second)s%(zonediff)s' % \ {'year': m.group(1), 'month': m.group(2), 'day': m.group(3),\ 'hour': m.group(4), 'minute': m.group(5), 'second': m.group(6),\ 'zonediff': '+09:00'} if _debug: sys.stderr.write('OnBlog date parsed as: %s\n' % w3dtfdate) return _parse_date_w3dtf(w3dtfdate) registerDateHandler(_parse_date_onblog) def _parse_date_nate(dateString): '''Parse a string according to the Nate 8-bit date format''' m = _korean_nate_date_re.match(dateString) if not m: return hour = int(m.group(5)) ampm = m.group(4) if (ampm == _korean_pm): hour += 12 hour = str(hour) if len(hour) == 1: hour = '0' + hour w3dtfdate = '%(year)s-%(month)s-%(day)sT%(hour)s:%(minute)s:%(second)s%(zonediff)s' % \ {'year': m.group(1), 'month': m.group(2), 'day': m.group(3),\ 'hour': hour, 'minute': m.group(6), 'second': m.group(7),\ 'zonediff': '+09:00'} if _debug: sys.stderr.write('Nate date parsed as: %s\n' % w3dtfdate) return _parse_date_w3dtf(w3dtfdate) registerDateHandler(_parse_date_nate) _mssql_date_re = \ re.compile('(\d{4})-(\d{2})-(\d{2})\s+(\d{2}):(\d{2}):(\d{2})(\.\d+)?') def _parse_date_mssql(dateString): '''Parse a string according to the MS SQL date format''' m = _mssql_date_re.match(dateString) if not m: return w3dtfdate = '%(year)s-%(month)s-%(day)sT%(hour)s:%(minute)s:%(second)s%(zonediff)s' % \ {'year': m.group(1), 'month': m.group(2), 'day': m.group(3),\ 'hour': m.group(4), 'minute': m.group(5), 'second': m.group(6),\ 'zonediff': '+09:00'} if _debug: sys.stderr.write('MS SQL date parsed as: %s\n' % w3dtfdate) return _parse_date_w3dtf(w3dtfdate) registerDateHandler(_parse_date_mssql) # Unicode strings for Greek date strings _greek_months = \ { \ u'\u0399\u03b1\u03bd': u'Jan', # c9e1ed in iso-8859-7 u'\u03a6\u03b5\u03b2': u'Feb', # d6e5e2 in iso-8859-7 u'\u039c\u03ac\u03ce': u'Mar', # ccdcfe in iso-8859-7 u'\u039c\u03b1\u03ce': u'Mar', # cce1fe in iso-8859-7 u'\u0391\u03c0\u03c1': u'Apr', # c1f0f1 in iso-8859-7 u'\u039c\u03ac\u03b9': u'May', # ccdce9 in iso-8859-7 u'\u039c\u03b1\u03ca': u'May', # cce1fa in iso-8859-7 u'\u039c\u03b1\u03b9': u'May', # cce1e9 in iso-8859-7 u'\u0399\u03bf\u03cd\u03bd': u'Jun', # c9effded in iso-8859-7 u'\u0399\u03bf\u03bd': u'Jun', # c9efed in iso-8859-7 u'\u0399\u03bf\u03cd\u03bb': u'Jul', # c9effdeb in iso-8859-7 u'\u0399\u03bf\u03bb': u'Jul', # c9f9eb in iso-8859-7 u'\u0391\u03cd\u03b3': u'Aug', # c1fde3 in iso-8859-7 u'\u0391\u03c5\u03b3': u'Aug', # c1f5e3 in iso-8859-7 u'\u03a3\u03b5\u03c0': u'Sep', # d3e5f0 in iso-8859-7 u'\u039f\u03ba\u03c4': u'Oct', # cfeaf4 in iso-8859-7 u'\u039d\u03bf\u03ad': u'Nov', # cdefdd in iso-8859-7 u'\u039d\u03bf\u03b5': u'Nov', # cdefe5 in iso-8859-7 u'\u0394\u03b5\u03ba': u'Dec', # c4e5ea in iso-8859-7 } _greek_wdays = \ { \ u'\u039a\u03c5\u03c1': u'Sun', # caf5f1 in iso-8859-7 u'\u0394\u03b5\u03c5': u'Mon', # c4e5f5 in iso-8859-7 u'\u03a4\u03c1\u03b9': u'Tue', # d4f1e9 in iso-8859-7 u'\u03a4\u03b5\u03c4': u'Wed', # d4e5f4 in iso-8859-7 u'\u03a0\u03b5\u03bc': u'Thu', # d0e5ec in iso-8859-7 u'\u03a0\u03b1\u03c1': u'Fri', # d0e1f1 in iso-8859-7 u'\u03a3\u03b1\u03b2': u'Sat', # d3e1e2 in iso-8859-7 } _greek_date_format_re = \ re.compile(u'([^,]+),\s+(\d{2})\s+([^\s]+)\s+(\d{4})\s+(\d{2}):(\d{2}):(\d{2})\s+([^\s]+)') def _parse_date_greek(dateString): '''Parse a string according to a Greek 8-bit date format.''' m = _greek_date_format_re.match(dateString) if not m: return try: wday = _greek_wdays[m.group(1)] month = _greek_months[m.group(3)] except: return rfc822date = '%(wday)s, %(day)s %(month)s %(year)s %(hour)s:%(minute)s:%(second)s %(zonediff)s' % \ {'wday': wday, 'day': m.group(2), 'month': month, 'year': m.group(4),\ 'hour': m.group(5), 'minute': m.group(6), 'second': m.group(7),\ 'zonediff': m.group(8)} if _debug: sys.stderr.write('Greek date parsed as: %s\n' % rfc822date) return _parse_date_rfc822(rfc822date) registerDateHandler(_parse_date_greek) # Unicode strings for Hungarian date strings _hungarian_months = \ { \ u'janu\u00e1r': u'01', # e1 in iso-8859-2 u'febru\u00e1ri': u'02', # e1 in iso-8859-2 u'm\u00e1rcius': u'03', # e1 in iso-8859-2 u'\u00e1prilis': u'04', # e1 in iso-8859-2 u'm\u00e1ujus': u'05', # e1 in iso-8859-2 u'j\u00fanius': u'06', # fa in iso-8859-2 u'j\u00falius': u'07', # fa in iso-8859-2 u'augusztus': u'08', u'szeptember': u'09', u'okt\u00f3ber': u'10', # f3 in iso-8859-2 u'november': u'11', u'december': u'12', } _hungarian_date_format_re = \ re.compile(u'(\d{4})-([^-]+)-(\d{,2})T(\d{,2}):(\d{2})((\+|-)(\d{,2}:\d{2}))') def _parse_date_hungarian(dateString): '''Parse a string according to a Hungarian 8-bit date format.''' m = _hungarian_date_format_re.match(dateString) if not m: return try: month = _hungarian_months[m.group(2)] day = m.group(3) if len(day) == 1: day = '0' + day hour = m.group(4) if len(hour) == 1: hour = '0' + hour except: return w3dtfdate = '%(year)s-%(month)s-%(day)sT%(hour)s:%(minute)s%(zonediff)s' % \ {'year': m.group(1), 'month': month, 'day': day,\ 'hour': hour, 'minute': m.group(5),\ 'zonediff': m.group(6)} if _debug: sys.stderr.write('Hungarian date parsed as: %s\n' % w3dtfdate) return _parse_date_w3dtf(w3dtfdate) registerDateHandler(_parse_date_hungarian) # W3DTF-style date parsing adapted from PyXML xml.utils.iso8601, written by # Drake and licensed under the Python license. Removed all range checking # for month, day, hour, minute, and second, since mktime will normalize # these later def _parse_date_w3dtf(dateString): def __extract_date(m): year = int(m.group('year')) if year < 100: year = 100 * int(time.gmtime()[0] / 100) + int(year) if year < 1000: return 0, 0, 0 julian = m.group('julian') if julian: julian = int(julian) month = julian / 30 + 1 day = julian % 30 + 1 jday = None while jday != julian: t = time.mktime((year, month, day, 0, 0, 0, 0, 0, 0)) jday = time.gmtime(t)[-2] diff = abs(jday - julian) if jday > julian: if diff < day: day = day - diff else: month = month - 1 day = 31 elif jday < julian: if day + diff < 28: day = day + diff else: month = month + 1 return year, month, day month = m.group('month') day = 1 if month is None: month = 1 else: month = int(month) day = m.group('day') if day: day = int(day) else: day = 1 return year, month, day def __extract_time(m): if not m: return 0, 0, 0 hours = m.group('hours') if not hours: return 0, 0, 0 hours = int(hours) minutes = int(m.group('minutes')) seconds = m.group('seconds') if seconds: seconds = int(seconds) else: seconds = 0 return hours, minutes, seconds def __extract_tzd(m): '''Return the Time Zone Designator as an offset in seconds from UTC.''' if not m: return 0 tzd = m.group('tzd') if not tzd: return 0 if tzd == 'Z': return 0 hours = int(m.group('tzdhours')) minutes = m.group('tzdminutes') if minutes: minutes = int(minutes) else: minutes = 0 offset = (hours*60 + minutes) * 60 if tzd[0] == '+': return -offset return offset __date_re = ('(?P\d\d\d\d)' '(?:(?P-|)' '(?:(?P\d\d\d)' '|(?P\d\d)(?:(?P=dsep)(?P\d\d))?))?') __tzd_re = '(?P[-+](?P\d\d)(?::?(?P\d\d))|Z)' __tzd_rx = re.compile(__tzd_re) __time_re = ('(?P\d\d)(?P:|)(?P\d\d)' '(?:(?P=tsep)(?P\d\d(?:[.,]\d+)?))?' + __tzd_re) __datetime_re = '%s(?:T%s)?' % (__date_re, __time_re) __datetime_rx = re.compile(__datetime_re) m = __datetime_rx.match(dateString) if (m is None) or (m.group() != dateString): return gmt = __extract_date(m) + __extract_time(m) + (0, 0, 0) if gmt[0] == 0: return return time.gmtime(time.mktime(gmt) + __extract_tzd(m) - time.timezone) registerDateHandler(_parse_date_w3dtf) def _parse_date_rfc822(dateString): '''Parse an RFC822, RFC1123, RFC2822, or asctime-style date''' data = dateString.split() if data[0][-1] in (',', '.') or data[0].lower() in rfc822._daynames: del data[0] if len(data) == 4: s = data[3] i = s.find('+') if i > 0: data[3:] = [s[:i], s[i+1:]] else: data.append('') dateString = " ".join(data) if len(data) < 5: dateString += ' 00:00:00 GMT' tm = rfc822.parsedate_tz(dateString) if tm: return time.gmtime(rfc822.mktime_tz(tm)) # rfc822.py defines several time zones, but we define some extra ones. # 'ET' is equivalent to 'EST', etc. _additional_timezones = {'AT': -400, 'ET': -500, 'CT': -600, 'MT': -700, 'PT': -800} rfc822._timezones.update(_additional_timezones) registerDateHandler(_parse_date_rfc822) def _parse_date(dateString): '''Parses a variety of date formats into a 9-tuple in GMT''' for handler in _date_handlers: try: date9tuple = handler(dateString) if not date9tuple: continue if len(date9tuple) != 9: if _debug: sys.stderr.write('date handler function must return 9-tuple\n') raise ValueError map(int, date9tuple) return date9tuple except Exception, e: if _debug: sys.stderr.write('%s raised %s\n' % (handler.__name__, repr(e))) pass return None def _getCharacterEncoding(http_headers, xml_data): '''Get the character encoding of the XML document http_headers is a dictionary xml_data is a raw string (not Unicode) This is so much trickier than it sounds, it's not even funny. According to RFC 3023 ('XML Media Types'), if the HTTP Content-Type is application/xml, application/*+xml, application/xml-external-parsed-entity, or application/xml-dtd, the encoding given in the charset parameter of the HTTP Content-Type takes precedence over the encoding given in the XML prefix within the document, and defaults to 'utf-8' if neither are specified. But, if the HTTP Content-Type is text/xml, text/*+xml, or text/xml-external-parsed-entity, the encoding given in the XML prefix within the document is ALWAYS IGNORED and only the encoding given in the charset parameter of the HTTP Content-Type header should be respected, and it defaults to 'us-ascii' if not specified. Furthermore, discussion on the atom-syntax mailing list with the author of RFC 3023 leads me to the conclusion that any document served with a Content-Type of text/* and no charset parameter must be treated as us-ascii. (We now do this.) And also that it must always be flagged as non-well-formed. (We now do this too.) If Content-Type is unspecified (input was local file or non-HTTP source) or unrecognized (server just got it totally wrong), then go by the encoding given in the XML prefix of the document and default to 'iso-8859-1' as per the HTTP specification (RFC 2616). Then, assuming we didn't find a character encoding in the HTTP headers (and the HTTP Content-type allowed us to look in the body), we need to sniff the first few bytes of the XML data and try to determine whether the encoding is ASCII-compatible. Section F of the XML specification shows the way here: http://www.w3.org/TR/REC-xml/#sec-guessing-no-ext-info If the sniffed encoding is not ASCII-compatible, we need to make it ASCII compatible so that we can sniff further into the XML declaration to find the encoding attribute, which will tell us the true encoding. Of course, none of this guarantees that we will be able to parse the feed in the declared character encoding (assuming it was declared correctly, which many are not). CJKCodecs and iconv_codec help a lot; you should definitely install them if you can. http://cjkpython.i18n.org/ ''' def _parseHTTPContentType(content_type): '''takes HTTP Content-Type header and returns (content type, charset) If no charset is specified, returns (content type, '') If no content type is specified, returns ('', '') Both return parameters are guaranteed to be lowercase strings ''' content_type = content_type or '' content_type, params = cgi.parse_header(content_type) return content_type, params.get('charset', '').replace("'", '') sniffed_xml_encoding = '' xml_encoding = '' true_encoding = '' http_content_type, http_encoding = _parseHTTPContentType(http_headers.get('content-type')) # Must sniff for non-ASCII-compatible character encodings before # searching for XML declaration. This heuristic is defined in # section F of the XML specification: # http://www.w3.org/TR/REC-xml/#sec-guessing-no-ext-info try: if xml_data[:4] == '\x4c\x6f\xa7\x94': # EBCDIC xml_data = _ebcdic_to_ascii(xml_data) elif xml_data[:4] == '\x00\x3c\x00\x3f': # UTF-16BE sniffed_xml_encoding = 'utf-16be' xml_data = unicode(xml_data, 'utf-16be').encode('utf-8') elif (len(xml_data) >= 4) and (xml_data[:2] == '\xfe\xff') and (xml_data[2:4] != '\x00\x00'): # UTF-16BE with BOM sniffed_xml_encoding = 'utf-16be' xml_data = unicode(xml_data[2:], 'utf-16be').encode('utf-8') elif xml_data[:4] == '\x3c\x00\x3f\x00': # UTF-16LE sniffed_xml_encoding = 'utf-16le' xml_data = unicode(xml_data, 'utf-16le').encode('utf-8') elif (len(xml_data) >= 4) and (xml_data[:2] == '\xff\xfe') and (xml_data[2:4] != '\x00\x00'): # UTF-16LE with BOM sniffed_xml_encoding = 'utf-16le' xml_data = unicode(xml_data[2:], 'utf-16le').encode('utf-8') elif xml_data[:4] == '\x00\x00\x00\x3c': # UTF-32BE sniffed_xml_encoding = 'utf-32be' xml_data = unicode(xml_data, 'utf-32be').encode('utf-8') elif xml_data[:4] == '\x3c\x00\x00\x00': # UTF-32LE sniffed_xml_encoding = 'utf-32le' xml_data = unicode(xml_data, 'utf-32le').encode('utf-8') elif xml_data[:4] == '\x00\x00\xfe\xff': # UTF-32BE with BOM sniffed_xml_encoding = 'utf-32be' xml_data = unicode(xml_data[4:], 'utf-32be').encode('utf-8') elif xml_data[:4] == '\xff\xfe\x00\x00': # UTF-32LE with BOM sniffed_xml_encoding = 'utf-32le' xml_data = unicode(xml_data[4:], 'utf-32le').encode('utf-8') elif xml_data[:3] == '\xef\xbb\xbf': # UTF-8 with BOM sniffed_xml_encoding = 'utf-8' xml_data = unicode(xml_data[3:], 'utf-8').encode('utf-8') else: # ASCII-compatible pass xml_encoding_match = re.compile('^<\?.*encoding=[\'"](.*?)[\'"].*\?>').match(xml_data) except: xml_encoding_match = None if xml_encoding_match: xml_encoding = xml_encoding_match.groups()[0].lower() if sniffed_xml_encoding and (xml_encoding in ('iso-10646-ucs-2', 'ucs-2', 'csunicode', 'iso-10646-ucs-4', 'ucs-4', 'csucs4', 'utf-16', 'utf-32', 'utf_16', 'utf_32', 'utf16', 'u16')): xml_encoding = sniffed_xml_encoding acceptable_content_type = 0 application_content_types = ('application/xml', 'application/xml-dtd', 'application/xml-external-parsed-entity') text_content_types = ('text/xml', 'text/xml-external-parsed-entity') if (http_content_type in application_content_types) or \ (http_content_type.startswith('application/') and http_content_type.endswith('+xml')): acceptable_content_type = 1 true_encoding = http_encoding or xml_encoding or 'utf-8' elif (http_content_type in text_content_types) or \ (http_content_type.startswith('text/')) and http_content_type.endswith('+xml'): acceptable_content_type = 1 true_encoding = http_encoding or 'us-ascii' elif http_content_type.startswith('text/'): true_encoding = http_encoding or 'us-ascii' elif http_headers and (not http_headers.has_key('content-type')): true_encoding = xml_encoding or 'iso-8859-1' else: true_encoding = xml_encoding or 'utf-8' return true_encoding, http_encoding, xml_encoding, sniffed_xml_encoding, acceptable_content_type def _toUTF8(data, encoding): '''Changes an XML data stream on the fly to specify a new encoding data is a raw sequence of bytes (not Unicode) that is presumed to be in %encoding already encoding is a string recognized by encodings.aliases ''' if _debug: sys.stderr.write('entering _toUTF8, trying encoding %s\n' % encoding) # strip Byte Order Mark (if present) if (len(data) >= 4) and (data[:2] == '\xfe\xff') and (data[2:4] != '\x00\x00'): if _debug: sys.stderr.write('stripping BOM\n') if encoding != 'utf-16be': sys.stderr.write('trying utf-16be instead\n') encoding = 'utf-16be' data = data[2:] elif (len(data) >= 4) and (data[:2] == '\xff\xfe') and (data[2:4] != '\x00\x00'): if _debug: sys.stderr.write('stripping BOM\n') if encoding != 'utf-16le': sys.stderr.write('trying utf-16le instead\n') encoding = 'utf-16le' data = data[2:] elif data[:3] == '\xef\xbb\xbf': if _debug: sys.stderr.write('stripping BOM\n') if encoding != 'utf-8': sys.stderr.write('trying utf-8 instead\n') encoding = 'utf-8' data = data[3:] elif data[:4] == '\x00\x00\xfe\xff': if _debug: sys.stderr.write('stripping BOM\n') if encoding != 'utf-32be': sys.stderr.write('trying utf-32be instead\n') encoding = 'utf-32be' data = data[4:] elif data[:4] == '\xff\xfe\x00\x00': if _debug: sys.stderr.write('stripping BOM\n') if encoding != 'utf-32le': sys.stderr.write('trying utf-32le instead\n') encoding = 'utf-32le' data = data[4:] newdata = unicode(data, encoding) if _debug: sys.stderr.write('successfully converted %s data to unicode\n' % encoding) declmatch = re.compile('^<\?xml[^>]*?>') newdecl = '''''' if declmatch.search(newdata): newdata = declmatch.sub(newdecl, newdata) else: newdata = newdecl + u'\n' + newdata return newdata.encode('utf-8') def _stripDoctype(data): '''Strips DOCTYPE from XML document, returns (rss_version, stripped_data) rss_version may be 'rss091n' or None stripped_data is the same XML document, minus the DOCTYPE ''' entity_pattern = re.compile(r']*?)>', re.MULTILINE) data = entity_pattern.sub('', data) doctype_pattern = re.compile(r']*?)>', re.MULTILINE) doctype_results = doctype_pattern.findall(data) doctype = doctype_results and doctype_results[0] or '' if doctype.lower().count('netscape'): version = 'rss091n' else: version = None data = doctype_pattern.sub('', data) return version, data def parse(url_file_stream_or_string, etag=None, modified=None, agent=None, referrer=None, handlers=[]): '''Parse a feed from a URL, file, stream, or string''' result = FeedParserDict() result['feed'] = FeedParserDict() result['entries'] = [] if _XML_AVAILABLE: result['bozo'] = 0 if type(handlers) == types.InstanceType: handlers = [handlers] try: f = _open_resource(url_file_stream_or_string, etag, modified, agent, referrer, handlers) data = f.read() except Exception, e: result['bozo'] = 1 result['bozo_exception'] = e data = '' f = None # if feed is gzip-compressed, decompress it if f and data and hasattr(f, 'headers'): if gzip and f.headers.get('content-encoding', '') == 'gzip': try: data = gzip.GzipFile(fileobj=_StringIO(data)).read() except Exception, e: # Some feeds claim to be gzipped but they're not, so # we get garbage. Ideally, we should re-request the # feed without the 'Accept-encoding: gzip' header, # but we don't. result['bozo'] = 1 result['bozo_exception'] = e data = '' elif zlib and f.headers.get('content-encoding', '') == 'deflate': try: data = zlib.decompress(data, -zlib.MAX_WBITS) except Exception, e: result['bozo'] = 1 result['bozo_exception'] = e data = '' # save HTTP headers if hasattr(f, 'info'): info = f.info() result['etag'] = info.getheader('ETag') last_modified = info.getheader('Last-Modified') if last_modified: result['modified'] = _parse_date(last_modified) if hasattr(f, 'url'): result['href'] = f.url result['status'] = 200 if hasattr(f, 'status'): result['status'] = f.status if hasattr(f, 'headers'): result['headers'] = f.headers.dict if hasattr(f, 'close'): f.close() # there are four encodings to keep track of: # - http_encoding is the encoding declared in the Content-Type HTTP header # - xml_encoding is the encoding declared in the ; changed # project name #2.5 - 7/25/2003 - MAP - changed to Python license (all contributors agree); # removed unnecessary urllib code -- urllib2 should always be available anyway; # return actual url, status, and full HTTP headers (as result['url'], # result['status'], and result['headers']) if parsing a remote feed over HTTP -- # this should pass all the HTTP tests at ; # added the latest namespace-of-the-week for RSS 2.0 #2.5.1 - 7/26/2003 - RMK - clear opener.addheaders so we only send our custom # User-Agent (otherwise urllib2 sends two, which confuses some servers) #2.5.2 - 7/28/2003 - MAP - entity-decode inline xml properly; added support for # inline and as used in some RSS 2.0 feeds #2.5.3 - 8/6/2003 - TvdV - patch to track whether we're inside an image or # textInput, and also to return the character encoding (if specified) #2.6 - 1/1/2004 - MAP - dc:author support (MarekK); fixed bug tracking # nested divs within content (JohnD); fixed missing sys import (JohanS); # fixed regular expression to capture XML character encoding (Andrei); # added support for Atom 0.3-style links; fixed bug with textInput tracking; # added support for cloud (MartijnP); added support for multiple # category/dc:subject (MartijnP); normalize content model: 'description' gets # description (which can come from description, summary, or full content if no # description), 'content' gets dict of base/language/type/value (which can come # from content:encoded, xhtml:body, content, or fullitem); # fixed bug matching arbitrary Userland namespaces; added xml:base and xml:lang # tracking; fixed bug tracking unknown tags; fixed bug tracking content when # element is not in default namespace (like Pocketsoap feed); # resolve relative URLs in link, guid, docs, url, comments, wfw:comment, # wfw:commentRSS; resolve relative URLs within embedded HTML markup in # description, xhtml:body, content, content:encoded, title, subtitle, # summary, info, tagline, and copyright; added support for pingback and # trackback namespaces #2.7 - 1/5/2004 - MAP - really added support for trackback and pingback # namespaces, as opposed to 2.6 when I said I did but didn't really; # sanitize HTML markup within some elements; added mxTidy support (if # installed) to tidy HTML markup within some elements; fixed indentation # bug in _parse_date (FazalM); use socket.setdefaulttimeout if available # (FazalM); universal date parsing and normalization (FazalM): 'created', modified', # 'issued' are parsed into 9-tuple date format and stored in 'created_parsed', # 'modified_parsed', and 'issued_parsed'; 'date' is duplicated in 'modified' # and vice-versa; 'date_parsed' is duplicated in 'modified_parsed' and vice-versa #2.7.1 - 1/9/2004 - MAP - fixed bug handling " and '. fixed memory # leak not closing url opener (JohnD); added dc:publisher support (MarekK); # added admin:errorReportsTo support (MarekK); Python 2.1 dict support (MarekK) #2.7.4 - 1/14/2004 - MAP - added workaround for improperly formed
tags in # encoded HTML (skadz); fixed unicode handling in normalize_attrs (ChrisL); # fixed relative URI processing for guid (skadz); added ICBM support; added # base64 support #2.7.5 - 1/15/2004 - MAP - added workaround for malformed DOCTYPE (seen on many # blogspot.com sites); added _debug variable #2.7.6 - 1/16/2004 - MAP - fixed bug with StringIO importing #3.0b3 - 1/23/2004 - MAP - parse entire feed with real XML parser (if available); # added several new supported namespaces; fixed bug tracking naked markup in # description; added support for enclosure; added support for source; re-added # support for cloud which got dropped somehow; added support for expirationDate #3.0b4 - 1/26/2004 - MAP - fixed xml:lang inheritance; fixed multiple bugs tracking # xml:base URI, one for documents that don't define one explicitly and one for # documents that define an outer and an inner xml:base that goes out of scope # before the end of the document #3.0b5 - 1/26/2004 - MAP - fixed bug parsing multiple links at feed level #3.0b6 - 1/27/2004 - MAP - added feed type and version detection, result['version'] # will be one of SUPPORTED_VERSIONS.keys() or empty string if unrecognized; # added support for creativeCommons:license and cc:license; added support for # full Atom content model in title, tagline, info, copyright, summary; fixed bug # with gzip encoding (not always telling server we support it when we do) #3.0b7 - 1/28/2004 - MAP - support Atom-style author element in author_detail # (dictionary of 'name', 'url', 'email'); map author to author_detail if author # contains name + email address #3.0b8 - 1/28/2004 - MAP - added support for contributor #3.0b9 - 1/29/2004 - MAP - fixed check for presence of dict function; added # support for summary #3.0b10 - 1/31/2004 - MAP - incorporated ISO-8601 date parsing routines from # xml.util.iso8601 #3.0b11 - 2/2/2004 - MAP - added 'rights' to list of elements that can contain # dangerous markup; fiddled with decodeEntities (not right); liberalized # date parsing even further #3.0b12 - 2/6/2004 - MAP - fiddled with decodeEntities (still not right); # added support to Atom 0.2 subtitle; added support for Atom content model # in copyright; better sanitizing of dangerous HTML elements with end tags # (script, frameset) #3.0b13 - 2/8/2004 - MAP - better handling of empty HTML tags (br, hr, img, # etc.) in embedded markup, in either HTML or XHTML form (
,
,
) #3.0b14 - 2/8/2004 - MAP - fixed CDATA handling in non-wellformed feeds under # Python 2.1 #3.0b15 - 2/11/2004 - MAP - fixed bug resolving relative links in wfw:commentRSS; # fixed bug capturing author and contributor URL; fixed bug resolving relative # links in author and contributor URL; fixed bug resolvin relative links in # generator URL; added support for recognizing RSS 1.0; passed Simon Fell's # namespace tests, and included them permanently in the test suite with his # permission; fixed namespace handling under Python 2.1 #3.0b16 - 2/12/2004 - MAP - fixed support for RSS 0.90 (broken in b15) #3.0b17 - 2/13/2004 - MAP - determine character encoding as per RFC 3023 #3.0b18 - 2/17/2004 - MAP - always map description to summary_detail (Andrei); # use libxml2 (if available) #3.0b19 - 3/15/2004 - MAP - fixed bug exploding author information when author # name was in parentheses; removed ultra-problematic mxTidy support; patch to # workaround crash in PyXML/expat when encountering invalid entities # (MarkMoraes); support for textinput/textInput #3.0b20 - 4/7/2004 - MAP - added CDF support #3.0b21 - 4/14/2004 - MAP - added Hot RSS support #3.0b22 - 4/19/2004 - MAP - changed 'channel' to 'feed', 'item' to 'entries' in # results dict; changed results dict to allow getting values with results.key # as well as results[key]; work around embedded illformed HTML with half # a DOCTYPE; work around malformed Content-Type header; if character encoding # is wrong, try several common ones before falling back to regexes (if this # works, bozo_exception is set to CharacterEncodingOverride); fixed character # encoding issues in BaseHTMLProcessor by tracking encoding and converting # from Unicode to raw strings before feeding data to sgmllib.SGMLParser; # convert each value in results to Unicode (if possible), even if using # regex-based parsing #3.0b23 - 4/21/2004 - MAP - fixed UnicodeDecodeError for feeds that contain # high-bit characters in attributes in embedded HTML in description (thanks # Thijs van de Vossen); moved guid, date, and date_parsed to mapped keys in # FeedParserDict; tweaked FeedParserDict.has_key to return True if asking # about a mapped key #3.0fc1 - 4/23/2004 - MAP - made results.entries[0].links[0] and # results.entries[0].enclosures[0] into FeedParserDict; fixed typo that could # cause the same encoding to be tried twice (even if it failed the first time); # fixed DOCTYPE stripping when DOCTYPE contained entity declarations; # better textinput and image tracking in illformed RSS 1.0 feeds #3.0fc2 - 5/10/2004 - MAP - added and passed Sam's amp tests; added and passed # my blink tag tests #3.0fc3 - 6/18/2004 - MAP - fixed bug in _changeEncodingDeclaration that # failed to parse utf-16 encoded feeds; made source into a FeedParserDict; # duplicate admin:generatorAgent/@rdf:resource in generator_detail.url; # added support for image; refactored parse() fallback logic to try other # encodings if SAX parsing fails (previously it would only try other encodings # if re-encoding failed); remove unichr madness in normalize_attrs now that # we're properly tracking encoding in and out of BaseHTMLProcessor; set # feed.language from root-level xml:lang; set entry.id from rdf:about; # send Accept header #3.0 - 6/21/2004 - MAP - don't try iso-8859-1 (can't distinguish between # iso-8859-1 and windows-1252 anyway, and most incorrectly marked feeds are # windows-1252); fixed regression that could cause the same encoding to be # tried twice (even if it failed the first time) #3.0.1 - 6/22/2004 - MAP - default to us-ascii for all text/* content types; # recover from malformed content-type header parameter with no equals sign # ('text/xml; charset:iso-8859-1') #3.1 - 6/28/2004 - MAP - added and passed tests for converting HTML entities # to Unicode equivalents in illformed feeds (aaronsw); added and # passed tests for converting character entities to Unicode equivalents # in illformed feeds (aaronsw); test for valid parsers when setting # XML_AVAILABLE; make version and encoding available when server returns # a 304; add handlers parameter to pass arbitrary urllib2 handlers (like # digest auth or proxy support); add code to parse username/password # out of url and send as basic authentication; expose downloading-related # exceptions in bozo_exception (aaronsw); added __contains__ method to # FeedParserDict (aaronsw); added publisher_detail (aaronsw) #3.2 - 7/3/2004 - MAP - use cjkcodecs and iconv_codec if available; always # convert feed to UTF-8 before passing to XML parser; completely revamped # logic for determining character encoding and attempting XML parsing # (much faster); increased default timeout to 20 seconds; test for presence # of Location header on redirects; added tests for many alternate character # encodings; support various EBCDIC encodings; support UTF-16BE and # UTF16-LE with or without a BOM; support UTF-8 with a BOM; support # UTF-32BE and UTF-32LE with or without a BOM; fixed crashing bug if no # XML parsers are available; added support for 'Content-encoding: deflate'; # send blank 'Accept-encoding: ' header if neither gzip nor zlib modules # are available #3.3 - 7/15/2004 - MAP - optimize EBCDIC to ASCII conversion; fix obscure # problem tracking xml:base and xml:lang if element declares it, child # doesn't, first grandchild redeclares it, and second grandchild doesn't; # refactored date parsing; defined public registerDateHandler so callers # can add support for additional date formats at runtime; added support # for OnBlog, Nate, MSSQL, Greek, and Hungarian dates (ytrewq1); added # zopeCompatibilityHack() which turns FeedParserDict into a regular # dictionary, required for Zope compatibility, and also makes command- # line debugging easier because pprint module formats real dictionaries # better than dictionary-like objects; added NonXMLContentType exception, # which is stored in bozo_exception when a feed is served with a non-XML # media type such as 'text/plain'; respect Content-Language as default # language if not xml:lang is present; cloud dict is now FeedParserDict; # generator dict is now FeedParserDict; better tracking of xml:lang, # including support for xml:lang='' to unset the current language; # recognize RSS 1.0 feeds even when RSS 1.0 namespace is not the default # namespace; don't overwrite final status on redirects (scenarios: # redirecting to a URL that returns 304, redirecting to a URL that # redirects to another URL with a different type of redirect); add # support for HTTP 303 redirects #4.0 - MAP - support for relative URIs in xml:base attribute; fixed # encoding issue with mxTidy (phopkins); preliminary support for RFC 3229; # support for Atom 1.0; support for iTunes extensions; new 'tags' for # categories/keywords/etc. as array of dict # {'term': term, 'scheme': scheme, 'label': label} to match Atom 1.0 # terminology; parse RFC 822-style dates with no time; lots of other # bug fixes #4.1 - MAP - removed socket timeout; added support for chardet library modules/feedparser.pyc0000644000076500007650000032706410753702210022104 0ustar00massimodipierromassimodipierro00000000000000 Cc?@sX dZdZdZdZdddddgZd Zd eZd Zd gZd Z d dgZ ddk Z ddk Z ddk Z ddkZddkZddkZddkZddkZddkZddkZddkZyddklZWnddklZnXyddkZWn eZnXyddkZWn eZnXy6ddkZeiieddk l!Z"dZ#Wnd Z#dZ"nXyddk$Z$ddk%Z%WneZ$Z%nXyddk&Z'WnnXyddk(Z(WnnXy3ddk)Z)eoddk*Z)de)i+_nWn eZ)nXde,fdYZ-de-fdYZ.de-fdYZ/de-fdYZ0de,fdYZ1e i2de _3e i2d e _4e i2d!e _5hd"d#<d$d%<d&d'<d(d)<d*d+<d,d-<d.d/<d0d1<d2d3<d4d5<d6d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdCdKZ?dLfdMYZ@e#o&dNe@eiiAiBfdOYZCndPe iDfdQYZEdRe@eEfdSYZFdTeEfdUYZGdVZHdWeEfdXYZIdYZJdZeiKeiLeiMfd[YZNd\ZOgZPd]ZQd^d_d`dadbdcdddedfdgdhdidjd#gZRgZSeRD]aZTeSeTiUdcdkiUdldmiUdndoiUdpdqiUdrdsiUdjdtdudvdwq0[SZV[TgZWeVD]ZXeWe i2eXiYq[WZZ[XdxZ[eQe[dyZ\dzZ]d{Z^d|Z_d}Z`e i2d~e\e]e^fZae i2de_e`fZbdZceQecdZdeQede i2dZedZfeQefhdd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd<dd s4.1sCopyright (c) 2002-2006, Mark Pilgrim, 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. 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.s'Mark Pilgrim s%Jason Diamond s'John Beimler s1Fazal Majid s"Aaron Swartz s(Kevin Marks is.UniversalFeedParser/%s +http://feedparser.org/sapplication/atom+xml,application/rdf+xml,application/rss+xml,application/x-netcdf,application/xml;q=0.9,text/xml;q=0.2,*/*;q=0.1t drv_libxml2tuTidytmxTidyiN(tStringIO(tescapeicCs:|idd}|idd}|idd}|S(Nt&s&t>s>ti?iiiiiiiiii`i:i#i@i'i=i"iiaibicidieifigihiiiiiiiiiijikiliminioipiqiriiiiiiii~isitiuiviwixiyiziiiiiiiiiiiiiiiiiiiiiii{iAiBiCiDiEiFiGiHiIiiiiiii}iJiKiLiMiNiOiPiQiRiiiiiii\iiSiTiUiViWiXiYiZiiiiiii0i1i2i3i4i5i6i7i8i9iiiiiiiRi(iiiiii iiiiii i i iiiiiiiiiiiiiiiiiiiiiiii iiiiiiiiiiiiiiiiiiiiiiiiiii iiiiiiiiii[i.i<i(i+i!i&iiiiiiiiii]i$i*i)i;i^i-i/iiiiiiiii|i,i%i_i>i?iiiiiiiiii`i:i#i@i'i=i"iiaibicidieifigihiiiiiiiiiijikiliminioipiqiriiiiiiii~isitiuiviwixiyiziiiiiiiiiiiiiiiiiiiiiii{iAiBiCiDiEiFiGiHiIiiiiiii}iJiKiLiMiNiOiPiQiRiiiiiii\iiSiTiUiViWiXiYiZiiiiiii0i1i2i3i4i5i6i7i8i9iiiiii(t_ebcdic_to_ascii_maptstringt maketranstjointmaptchrtranget translate(tstemapRn((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyt_ebcdic_to_asciis* :s&^([A-Za-z][A-Za-z0-9+-.]*://)(/*)(.*?)cCs"tid|}ti||S(Ns\1\3(t _urifixertsubturlparseturljoin(tbaseturi((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyt_urljoinst_FeedParserMixinc BsEeZhdd<dd<dd<dd<dd<dd<dd<dd<dd<dd <dd <dd <dd <d d<dd<dd<dd<dd<dd<dd<dd<dd<dd <d!d"<d#d$<d%d&<d'd(<d)d*<d+d,<d-d.<d/d0<d1d2<d3d4<d5d6<d5d7<d8d9<d:d;<d<d=<d>d?<d@dA<dBdC<dDdE<dFdG<dHdI<dJdK<dLdM<dNdO<dPdQ<dRdS<dTdU<dVdW<dXdY<dZd[<d\d]<d^d_<d`da<dbdc<ddde<dfdge>Z?dZ@e@ZAdZBdZCdZDdZEdZFeFZGeFZHdZIeIZJeIZKdZLeLZMdZNeNZOdZPddZQdZRddZSdZTeTZUeTZVdZWeWZXeWZYdZZeZZ[eZZ\dZ]e]Z^e]Z_dZ`e`Zae`ZbdZcecZddZeeeZfdZgegZhdZieiZjdZkekZldZmemZnemZodZpepZqepZrdZsesZtesZuesZvesZwdZxexZyexZzexZ{exZ|dZ}e}Z~dZeZdZdZdZdZdZdZdZeZeZdZdZdZeZeZeZdZdZeZdZeZdZdZdZeZeZdZeZeZdZdZdZeZdZeZdZeZdZdZdZdZdZeZdZeZdZdZdZdZdZdZeZdZeZdZeZeZeZeZeZdZeZdZdZRS(Rshttp://backend.userland.com/rsss%http://blogs.law.harvard.edu/tech/rssshttp://purl.org/rss/1.0/s&http://my.netscape.com/rdf/simple/0.9/shttp://example.com/newformat#shttp://example.com/nechoshttp://purl.org/echo/suri/of/echo/namespace#shttp://purl.org/pie/shttp://purl.org/atom/ns#shttp://www.w3.org/2005/Atoms'http://purl.org/rss/1.0/modules/rss091#tadminshttp://webns.net/mvcb/tags,http://purl.org/rss/1.0/modules/aggregation/tannotates)http://purl.org/rss/1.0/modules/annotate/taudios!http://media.tangent.org/rss/1.0/t blogChannels-http://backend.userland.com/blogChannelModuletccshttp://web.resource.org/cc/tcreativeCommonss4http://backend.userland.com/creativeCommonsRssModuletcos'http://purl.org/rss/1.0/modules/companytcontents(http://purl.org/rss/1.0/modules/content/tcps&http://my.theinfo.org/changed/1.0/rss/tdcs http://purl.org/dc/elements/1.1/tdctermsshttp://purl.org/dc/terms/temails&http://purl.org/rss/1.0/modules/email/tevs&http://purl.org/rss/1.0/modules/event/t feedburners*http://rssnamespace.org/feedburner/ext/1.0tfmshttp://freshmeat.net/rss/fm/tfoafshttp://xmlns.com/foaf/0.1/tgeos(http://www.w3.org/2003/01/geo/wgs84_pos#ticbmshttp://postneo.com/icbm/timages&http://purl.org/rss/1.0/modules/image/tituness*http://www.itunes.com/DTDs/PodCast-1.0.dtds'http://example.com/DTDs/PodCast-1.0.dtdtls%http://purl.org/rss/1.0/modules/link/tmediashttp://search.yahoo.com/mrsstpingbacks4http://madskills.com/public/xml/rss/module/pingback/tprisms.http://prismstandard.org/namespaces/1.2/basic/trdfs+http://www.w3.org/1999/02/22-rdf-syntax-ns#trdfss%http://www.w3.org/2000/01/rdf-schema#trefs*http://purl.org/rss/1.0/modules/reference/treqvs*http://purl.org/rss/1.0/modules/richequiv/tsearchs'http://purl.org/rss/1.0/modules/search/tslashs&http://purl.org/rss/1.0/modules/slash/tsoaps)http://schemas.xmlsoap.org/soap/envelope/tsss.http://purl.org/rss/1.0/modules/servicestatus/tstrs-http://hacks.benhammersley.com/rss/streaming/Rys-http://purl.org/rss/1.0/modules/subscription/tsys,http://purl.org/rss/1.0/modules/syndication/ttaxos)http://purl.org/rss/1.0/modules/taxonomy/tthrs*http://purl.org/rss/1.0/modules/threading/ttis*http://purl.org/rss/1.0/modules/textinput/t trackbacks5http://madskills.com/public/xml/rss/module/trackback/twfws$http://wellformedweb.org/commentAPI/twikis%http://purl.org/rss/1.0/modules/wiki/txhtmlshttp://www.w3.org/1999/xhtmltxmls$http://www.w3.org/XML/1998/namespacetszfs/http://schemas.pocketsoap.com/rss/myDescModule/tlinkR0t wfw_commenttwfw_commentrsstdocsR:R9tcommentstlicenseticontlogottitleR7tinfoRER6RBRAR8s text/htmlsapplication/xhtml+xmlsutf-8cCs^totiidn|ip7x4|iiD]\}}||i|is %s="%s"RiiRaRRR8tnameR:R9twidththeightt_start_(srelstype(sfeedsrsssrdf:RDF(stitleslinks descriptionsname(stitleslinks descriptionsurlshrefswidthsheight(RRRRRR*RORR~RiRRRtappendRRdttrackNamespaceRRRStendswithtsplitt handle_dataRptfindRRRtgetattrR_tpush(RTRWtattrsRVR(R)t_[2]tattrsDRRtprefixR}t_[3]tttsuffixt methodnametmethod((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pytunknown_starttagsX%3G %        =# I   cCstotiid|n|iddjo|idd\}}nd|}}|ii||}|o|d}nd||}yt||}|Wn$t j o|i ||nX|i oD|i i do1|i idd id  od |i dRi(RRRRRRRRORR_tpopRRRSRRRRRR(RTRWRRRR((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pytunknown_endtags4  =#     c Cs|ipdSn|i}|djod |}nJ|d d jot|dd}n t|}t|id}|iddi|dS(Nt34t38t39t60t62tx22tx26tx27tx3ctx3es&#%s;itxiisutf-8ii( RRRRRRRRRR(RRtinttunichrtencodeR(RTRttexttc((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pythandle_charrefs   cCs|ipdSntotiid|n|d jod|}nSd}y||Wntj od|}nXt||id }|id d i|dS( Ns"entering handle_entityref with %s tlttgttquottamptaposs&%s;cSswddk}t|do|i|Sn|i|}|ido%|idot|dd!Snt|S(Nitname2codepoints&#t;i(thtmlentitydefsR^Rt entitydefsRdRRtord(R(R ((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pytname2cps   sutf-8ii(sltsgtsquotsampsapos( RRRRRRcRRR(RTRRR ((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pythandle_entityrefs  icCs^|ipdSn|o)|iiddjot|}n|iddi|dS(NRPsapplication/xhtml+xmlii(RRROR R(RTRR((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyRs cCsdS(N((RTR((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pythandle_commentscCsdS(N((RTR((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyt handle_pi!scCsdS(N((RTR((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyt handle_decl%scCstotiidn|i||d!djoe|iid|}|djot|i}n|it|i|d|!d|dSn|iid|}|d SdS( Nsentering parse_declaration i s iiiRi( RRRRtrawdataRtlenRR (RTtiR(((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pytparse_declaration(s $ cCsU|i}|djo d}n/|djo d}n|djo d}n|S(NRs text/plainthtmls text/htmlRsapplication/xhtml+xml(R(RTt contentType((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pytmapContentType4s       cCs|i}||fd jo|i o d|_n|djo|i o d|_n|djo|i o d|_n|iddjod }|}n|ii|o,|i||i|<||i|i|s     cCst|ipd|S(NR(R~R(RTR}((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyt resolveURIPscCs|S(N((RTtelementR ((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pytdecodeEntitiesSscCs|ii||ggdS(N(RR(RTRt expectingText((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyRVscCsa|ipdSn|idd|jodSn|ii\}}}di|}|o|i}n|p|Snto[|iiddoEyti|}Wqti j oqti j oqXn||i jo|o|i |}n|iiddp|i ||}ny|id=Wntj onXy|id=Wntj onX|i|iidd|ijo0||ijot||i|i}qn|i|iidd|ijo*||ijot||i}q)n|io=t|tdjo$yt||i}WqpqpXn|d jo|Sn|io|i o |d joO|idi|gti|i}||d <|id|i|q]|d jo9||id|<|o||idd ddt _parse_date(RTR[((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyt_end_publishedscCs|idddS(NR2i(R(RTR((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyt_start_updated$scCs/|id}t|}|id|dS(NR2R4(RR}R>(RTR[t parsed_value((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyt _end_updated+s cCs|idddS(Ntcreatedi(R(RTR((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyt_start_created4scCs)|id}|idt|dS(NRtcreated_parsed(RR>R}(RTR[((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyt _end_created8scCs|idddS(Ntexpiredi(R(RTR((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyt_start_expirationdate=scCs#|idt|iddS(Ntexpired_parsedR(R>R}R(RT((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyt_end_expirationdate@scCsV|idd|i|d}|o|iddi|n|iddS(NRis rdf:resourceii(RR<RRR(RTRR[((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyt_start_cc_licenseCs cCs|idddS(NRi(R(RTR((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyt_start_creativecommons_licenseJscCs|iddS(NR(R(RT((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyt_end_creativecommons_licenseMscCs|i}|idg}| o| o| odSnth|d<|d<|d<}||jo2|ith|d<|d<|d<ndS(NRIRJRLtlabel(R0R]R+R(RTRJRLRR4RIR[((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyt_addTagPs   ' cCstotiidt|n|id}|id|id}|id}|i||||idddS(Ns!entering _start_category with %s RJRLtdomainRRHi(RRRRtreprRORR(RTRRJRLR((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyt_start_categoryXs %cCs7x0|idiD]}|i|ddqWdS(Ntitunes_keywordsshttp://www.itunes.com/(RRRRi(RTRJ((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyt_end_itunes_keywordsbscCs0|i|iddd|idddS(NRshttp://www.itunes.com/RHi(RRORiR(RTR((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyt_start_itunes_categoryfscCs|id}|pdSn|i}|d}|o/t|o"|dd o||ddRuR0RS(RTR[((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyt _end_guids* cCs1|id|d|ip|ip|idS(NRs text/plain(R7RRR(RTR((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyt _start_titlescCsW|id}|i}|io||dd|i|}|ido|i|d|d(RTtcopyToDescriptionR[((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyR$s+cCs<|iddth|idd<|idRARBRDt_start_feedinfoRCRJRKt _end_feedRLRMROt_start_textInputRPt_end_textInputRRt_start_managingeditort_start_dc_authort_start_dc_creatort_start_itunes_authorRTt_end_managingeditort_end_dc_authort_end_dc_creatort_end_itunes_authorRVRWRZR[R\R^R_t_start_itunes_nameR]t_end_itunes_nameRbRcRdReRft_start_homepaget _start_uriRgt _end_homepaget_end_uriRht_start_itunes_emailRit_end_itunes_emailR0R`RaRSRpt_start_taglinet_start_itunes_subtitleRqt _end_taglinet_end_itunes_subtitleRrt_start_dc_rightst_start_copyrightRst_end_dc_rightst_end_copyrightRvt _start_entryt_start_productRwt _end_entryRxt_start_languageRyt _end_languageRzt_start_webmasterR{t_end_webmasterR|t_start_dcterms_issuedt _start_issuedR~t_end_dcterms_issuedt _end_issuedRRFt_start_dcterms_modifiedt_start_pubdatet_start_dc_dateRRGt_end_dcterms_modifiedt _end_pubdatet _end_dc_dateRt_start_dcterms_createdRt_end_dcterms_createdRRRRRRRt_start_dc_subjectt_start_keywordsRRRt_end_dc_subjectt _end_keywordst_end_itunes_categoryRRHt_start_producturlRIt_end_producturlRRRt_start_dc_titlet_start_media_titleRt _end_dc_titlet_end_media_titleRRRt _end_abstractRt!_start_feedburner_browserfriendlyRt_end_feedburner_browserfriendlyRRRRRt_start_itunes_summaryRt_end_itunes_summaryRRRRRRt_start_xhtml_bodyRt_start_fullitemRt _end_bodyt_end_xhtml_bodyt_end_content_encodedt _end_fullitemt _end_prodlinkRt_start_itunes_linkRR(((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyR s                                                           '!! " F %           Y                                                                                    t_StrictFeedParsercBsGeZdZdZdZdZdZdZdZRS(cCs]totiidntiiii|t i||||d|_ d|_ dS(Nstrying StrictFeedParser i( RRRRRtsaxthandlertContentHandlerRRtbozoRitexc(RTRRR((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyR>s  cCs|i||dS(N(R(RTRR}((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pytstartPrefixMappingEsc Cs"|\}}t|pdi}|iddjod}|}n|o-|iddjo|idd}nd}|ii||}|oL|djp|djo|djo%|ii| ot d|n|o|d|}nt|i}t o0t i i d|||||i|fnh} xz|iiD]i\\}} } |pdi}|ii|d}|o|d| } n| | t| is>s't's"t"u( Rltcompilet IGNORECASERyR/RRRPRR*R+R,(RTR ((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyR,s!#c Cs~g}|D]\}}||i|fq ~}g}|D]3\}}|||djo |ip|fq>~}|S(NRRP(srelstype(R(RTRRVR(R)R((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pytnormalize_attrss3Gc Cstotiid|ng}xb|D]Z\}}t|tdjot||i}n|it||i|fq,Wdig}|D]\}}|d||fq~i |i}||i jo|i idt n|i idt dS(Ns-_BaseHTMLProcessor, unknown_starttag, tag=%s uu %s="%s"s<%(tag)s%(strattrs)s />s<%(tag)s%(strattrs)s>( RRRRRPR-RRRpRR-R2tlocals(RTRWRtuattrsRUR[RVtstrattrs((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyRs #FcCs/||ijo|iidtndS(Ns (R-R2RR5(RTRW((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyRscCs|iidtdS(Ns &#%(ref)s;(R2RR5(RTR((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyRscCs|iidtdS(Ns &%(ref)s;(R2RR5(RTR((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyRscCs3totiid|n|ii|dS(Ns)_BaseHTMLProcessor, handle_text, text=%s (RRRRR2R(RTR((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyRscCs|iidtdS(Ns(R2RR5(RTR((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyRscCs|iidtdS(Ns (R2RR5(RTR((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyRscCs|iidtdS(Ns (R2RR5(RTR((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyRss-zA-Z][-_.a-zA-Z0-9:]*\s*cCs|i}t|}||jodSn|i||}|oQ|i}|i}|t||jodSn|i|ifSn|i|dSdS(Ni(Ni(Ni(Ni( RRRit_new_declname_matchRmR"RtendR(RTRt declstartposRtntmRuR((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyt _scan_names      cCs1dig}|iD]}|t|q~S(s(Return processed HTML as a single stringR(RpR2R(RTRVtp((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyR3s(R R R-RR,R/R,R4RRRRRRRRRlR2R.R8R=R3(((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyRs$             t_LooseFeedParsercBseZdZdZRS(cCs*tii|ti||||dS(N(R*R+RR(RTRRR((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyRscCsI|idd}|idd}|idd}|idd}|idd}|id d}|id d }|id d }|id d}|idd}|iido~|iiddid o^|idd}|idd}|idd}|id d}|idd}n|S(Ns<s<s<s>s>s>s&s&s&s"s"s"s's's'RPRRRRR1R0(RRRSROR(RTRR ((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyRs"3(R R RR(((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyR?s t_RelativeURIResolvercBsteZdd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7gZdZdZdZRS(8taR9tapplettcodebaseRt blockquotetcitetbodyt backgroundtdeltformtactionR#tlongdescRtiframetheadtprofileR%tusemapR&tinsRtobjecttclassidR tqtscriptcCsti||||_dS(N(RRR(RTRR((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyR+scCst|i|S(N(R~R(RTR}((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyR/scCsy|i|}g}|D]?\}}||||f|ijo|i|p|fq~}ti|||dS(N(R4t relative_urisRRR(RTRWRRVRUR[((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyR2sS(RAshref(RBRC(sareashref(s blockquoteRE(sbodys background(sdelRE(sformsaction(sframeRK(sframessrc(siframeRK(siframessrc(sheadsprofile(simgRK(simgssrc(simgRO(sinputssrc(sinputRO(RPRE(slinkshref(sobjectRR(sobjectRC(sobjectsdata(sobjectRO(RSRE(sscriptssrc(R R RURRR(((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyR@s8   cCsAtotiidnt||}|i||iS(Nsentering _resolveRelativeURIs (RRRRR@R,R3(t htmlSourcetbaseURIRR>((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyR*7s t_HTMLSanitizercGBseZdddddddddd d d d d ddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFgGZddGdHdIdJdKdLdMdNdOdPdQdRdSdTd dUdVdWdXdYdZd[d\dd]d^d_d`dadbdcdddedfdgd'dhdidjdkdldmdndodpdqdrdsdtdudvdwdxdydzd{d|d6d}d~ddddddddddgGZddgZdZdZdZdZdZ dZ RS(RAtabbrtacronymtaddressRtbtbigRDR!tbuttontcaptiontcenterREtcodeR"tcolgrouptddRHtdfntdirtdivtdltdttemtfieldsettfontRIth1th2th3th4th5th6R$RR%R&RPtkbdRtlegendtliRqtmenutoltoptgrouptoptionR>tpreRSRutsamptselecttsmalltspantstriketstrongRytsupttablettbodyttdttextareattfoottthttheadttrttttutultvartacceptsaccept-charsett accesskeyRJtaligntalttaxistbordert cellpaddingt cellspacingtchartcharofftcharsettcheckedtclassR8tcolstcolspantcolortcompacttcoordstdatetimetdisabledtenctypetforR#theadersRR9threflangthspaceR0tismapRRKt maxlengthRRtmultipleRtnohreftnoshadetnowraptprompttreadonlyRtrevtrowstrowspantrulestscopetselectedtshapetsizeRtstartR7ttabindexttargetRRPROtvalignR[tvspaceRRTRBcCsti|d|_dS(Ni(RR,tunacceptablestack(RT((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyR,Ts cCs||ijo+||ijo|id7_ndSn|i|}g}|D]-\}}||ijo|||fqUqU~}ti|||dS(Ni(tacceptable_elementst"unacceptable_elements_with_end_tagRR4tacceptable_attributesRR(RTRWRRVRUR[((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyRXsAcCsO||ijo+||ijo|id8_ndSnti||dS(Ni(RRRRR(RTRW((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyRas cCsdS(N((RTR((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyRhscCsdS(N((RTR((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyRkscCs"|ipti||ndS(N(RRR(RTR((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyRns ( R R RRRR,RRRRR(((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyRX=s2$      c st|}|i||i}tod}x~tD]v}yf|djo$ddklfd}Pn2|djo$ddkl fd}PnWq9q9Xq9W|ot |t dj}|o|i d }n||d d d d d ddd}|ot |d }n|i doD|idd d }|i do|idd d }q~n|i do|idd d}qqn|iidd}|S(NRi(t parseStringcst||S(N(R(R tkwargs(t_utidy(s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyt_tidy~sR(tTidycs"i||\}}}}|S(N(ttidy(R Rtnerrorst nwarningst errordata(t_mxtidy(s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyRsusutf-8t output_xhtmlitnumeric_entitiestwrapit char_encodingtutf8sR Rttidy_interfaceR((RRs]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyR,rsB      $"t_FeedURLHandlercBs>eZdZdZdZeZeZeZdZRS(cCsc|ddjo*|djo|i|||||Snti|||i}||_|S(Nidii0(thttp_error_302turllibt addinfourlt get_full_urltstatus(RTtreqtfpRatmsgRtinfourl((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pythttp_error_defaults  cCst|iido%tii||||||}nti|||i}t|dp ||_ n|S(NtlocationR( R*RSturllib2tHTTPRedirectHandlerRRRRR^R(RTRRRaRRR((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyRs % cCst|iido%tii||||||}nti|||i}t|dp ||_ n|S(NRR( R*RSRRthttp_error_301RRRR^R(RTRRRaRRR((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyRs % c Csti|id}ytiiddjpttdjptti|i diddid\}}t i d|dd} |i | ||||i d |||} |i| SWn |i|||||SnXdS( Niis2.3.3t Authorizationt Rsrealm="([^"]*)"sWWW-Authenticateswww-authenticate(RzRRRRReRRiR#RRltfindallt add_passwordthttp_error_auth_reqedtreset_retry_countR( RTRRRaRRthosttusertpasswtrealmtretry((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pythttp_error_401s !2 ( R R RRRthttp_error_300thttp_error_303thttp_error_307R(((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyRs  c Cst|do|Sn|djo tiSnti|dd1jo|p t}nd0}toti|\}}ti |\} }| oLti | \} } | o,d|| |f}ti | i }qqnt i|} | id||o| id |n|od d d d dddg} ddddddddddddg } | idd| |d|d | |d!d!|d|d"|d#|d$fn|o| id%|ntoto| id&d'nGto| id&d(n,to| id&d)n| id&d*|o| id+d,|nto| id-tn| id.d/tt ittg|}g|_z|i| SWd0|iXnyt|SWnnXtt|S(2s8URL, filename, or string --> stream This function lets you define parsers that take any input source (URL, pathname to local or network file, or actual data as a string) and deal with it in a uniform manner. Returned object is guaranteed to have all the basic stdio read methods (read, readline, readlines). Just .close() the object when you're done with it. If the etag argument is supplied, it will be used as the value of an If-None-Match request header. If the modified argument is supplied, it must be a tuple of 9 integers as returned by gmtime() in the standard Python time module. This MUST be in GMT (Greenwich Mean Time). The formatted date/time will be used as the value of an If-Modified-Since request header. If the agent argument is supplied, it will be used as the value of a User-Agent request header. If the referrer argument is supplied, it will be used as the value of a Referer[sic] request header. If handlers is supplied, it is a list of handlers used to build a urllib2 opener. treadt-ithttpthttpstftps %s://%s%ss User-Agents If-None-MatchtMontTuetWedtThutFritSattSuntJantFebtMartAprtMaytJuntJultAugtSeptOcttNovtDecsIf-Modified-Sinces#%s, %02d %s %04d %02d:%02d:%02d GMTiiiiiitReferersAccept-encodings gzip, deflatetgziptdeflateRRsBasic %stAcceptsA-IMR,N(shttpshttpssftp(R^RtstdinRzt USER_AGENTRiRRt splittypet splithostt splitusert encodestringR"RtRequestt add_headerR tzlibt ACCEPT_HEADERtapplyt build_openerttupleRt addheaderstopentcloset _StringIOR(turl_file_stream_or_stringtetagR;tagenttreferrerthandlerstauthturltypetresttrealhostt user_passwdtrequesttshort_weekdaystmonthstopener((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyt_open_resources`   !*U" cCstid|dS(sLRegister a date handler function (takes string, returns 9-tuple date in GMT)iN(t_date_handlerstinsert(tfunc((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pytregisterDateHandler*ss YYYY-?MM-?DDsYYYY-MMs YYYY-?OOOs YY-?MM-?DDsYY-?OOOtYYYYs-YY-?MMs-OOOs-YYs--MM-?DDs--MMs---DDtCCs(?P\d{4})tYYs(?P\d\d)tMMs(?P[01]\d)tDDs(?P[0123]\d)tOOOs(?P[0123]\d\d)s(?P\d\d$)s$(T?(?P\d{2}):(?P\d{2})s(:(?P\d{2}))?s6(?P[+-](?P\d{2})(:(?P\d{2}))?|Z)?)?c Csd}x&tD]}||}|oPq q W|pdSn|idjodSn|i}|idd}|ot|}nd}|idd}| p |djotid}nLt|djo,dttiddt|}n t|}|idd }| p |d jo%|o d }qftid }nt|}|id d}|ph|o |}q|id dp&|iddp|iddo d }qtid}n t|}d |i jo t|d d dd }nx>d ddddgD]'}|i|dpd||tweekdaytdaylight_savings_flagttmRA((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyt_parse_date_iso8601Lsp  ,    &    "&"&u년u월u일u오전u오후s;(\d{4})%s\s+(\d{2})%s\s+(\d{2})%s\s+(\d{2}):(\d{2}):(\d{2})u>(\d{4})-(\d{2})-(\d{2})\s+(%s|%s)\s+(\d{,2}):(\d{,2}):(\d{,2})cCsti|}|pdSndh|idd<|idd<|idd<|id d <|id d <|id d<dd<}totiid|nt|S(s8Parse a string according to the OnBlog 8-bit date formatNsE%(year)s-%(month)s-%(day)sT%(hour)s:%(minute)s:%(second)s%(zonediff)siR8iR9iR:iR<iR=iR>s+09:00tzonediffsOnBlog date parsed as: %s (t_korean_onblog_date_reR.RmRRRRt_parse_date_w3dtf(RJR<t w3dtfdate((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyt_parse_date_onblogs:6 cCs)ti|}|pdSnt|id}|id}|tjo|d7}nt|}t|djod|}ndh|idd<|id d <|id d <|d <|idd<|idd<dd<}toti i d|nt |S(s6Parse a string according to the Nate 8-bit date formatNiii it0sE%(year)s-%(month)s-%(day)sT%(hour)s:%(minute)s:%(second)s%(zonediff)sR8iR9iR:R<iR=iR>s+09:00RRsNate date parsed as: %s ( t_korean_nate_date_reR.RRmt _korean_pmRRRRRRRT(RJR<R<tampmRU((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyt_parse_date_nates  :- s9(\d{4})-(\d{2})-(\d{2})\s+(\d{2}):(\d{2}):(\d{2})(\.\d+)?cCsti|}|pdSndh|idd<|idd<|idd<|id d <|id d <|id d<dd<}totiid|nt|S(s2Parse a string according to the MS SQL date formatNsE%(year)s-%(month)s-%(day)sT%(hour)s:%(minute)s:%(second)s%(zonediff)siR8iR9iR:iR<iR=iR>s+09:00RRsMS SQL date parsed as: %s (t_mssql_date_reR.RmRRRRRT(RJR<RU((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyt_parse_date_mssqls:6 uJanuΙανuFebuΦεβuMaruΜάώuΜαώuApruΑπρuMayuΜάιuΜαϊuΜαιuJunuΙούνuΙονuJuluΙούλuΙολuAuguΑύγuΑυγuSepuΣεπuOctuΟκτuNovuΝοέuΝοεuDecuΔεκuSunuΚυρuMonuΔευuTueuΤριuWeduΤετuThuuΠεμuFriuΠαρuSatuΣαβuL([^,]+),\s+(\d{2})\s+([^\s]+)\s+(\d{4})\s+(\d{2}):(\d{2}):(\d{2})\s+([^\s]+)cCsti|}|pdSny*t|id}t|id}Wn dSnXdh|d<|idd<|d<|id d <|id d <|id d<|idd<|idd<}totiid|nt |S(s6Parse a string according to a Greek 8-bit date format.NiisP%(wday)s, %(day)s %(month)s %(year)s %(hour)s:%(minute)s:%(second)s %(zonediff)stwdayiR:R9iR8iR<iR=iR>iRRsGreek date parsed as: %s ( t_greek_date_format_reR.t _greek_wdaysRmt _greek_monthsRRRRt_parse_date_rfc822(RJR<R^R9t rfc822date((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyt_parse_date_greeks:6u01ujanuáru02u februáriu03umárciusu04uáprilisu05umáujusu06ujúniusu07ujúliusu08u augusztusu09u szeptemberu10uoktóberu11unovemberu12udecemberu?(\d{4})-([^-]+)-(\d{,2})T(\d{,2}):(\d{2})((\+|-)(\d{,2}:\d{2}))cCs'ti|}|pdSnywt|id}|id}t|djod|}n|id}t|djod|}nWn dSnXdh|idd<|d <|d <|d <|id d <|idd<}totiid|nt |S(s:Parse a string according to a Hungarian 8-bit date format.NiiiRWis:%(year)s-%(month)s-%(day)sT%(hour)s:%(minute)s%(zonediff)sR8R9R:R<iR=iRRsHungarian date parsed as: %s ( t_hungarian_date_format_reR.t_hungarian_monthsRmRRRRRRT(RJR<R9R:R<RU((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyt_parse_date_hungarian!s$(c Csd}d}d}d}d}ti|}d|}d||f}ti|} | i|} | djp| i|jodSn|| || d } | ddjodSntiti| || tiS( Nc Sst|id}|djo,dttiddt|}n|djod Sn|id}|ot|}|dd}|dd}d}x||joti|||ddddddf }ti|d}t||}||jo/||jo||}qz|d}d }q||jo-||d jo||}qz|d}qqW|||fSn|id }d}|djo d}n9t|}|id }|ot|}nd}|||fS(NR8idiitjulianiiiiiR9R:(iii(RRmRFRGRiRItabs(R<R8RhR9R:tjdayRtdiff((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyt__extract_date<sF ,  *        cSs|pdSn|id}|pdSnt|}t|id}|id}|ot|}nd}|||fS(Nithourstminutestseconds(iii(iii(RmR(R<RmRnRo((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyt__extract_timees cSs|pdSn|id}|pdSn|djodSnt|id}|id}|ot|}nd}|d|d}|ddjo | Sn|S(sAReturn the Time Zone Designator as an offset in seconds from UTC.ittzdRBttzdhourst tzdminutesi<RC(RmR(R<RqRmRntoffset((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyt __extract_tzdts   sd(?P\d\d\d\d)(?:(?P-|)(?:(?P\d\d\d)|(?P\d\d)(?:(?P=dsep)(?P\d\d))?))?s;(?P[-+](?P\d\d)(?::?(?P\d\d))|Z)sW(?P\d\d)(?P:|)(?P\d\d)(?:(?P=tsep)(?P\d\d(?:[.,]\d+)?))?s %s(?:T%s)?i(iii( RlR2R.RiRmRFRGRIttimezone( RJRlRpRut __date_ret__tzd_ret__tzd_rxt __time_ret __datetime_ret __datetime_rxR<tgmt((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyRT;s )  (cCs|i}|dddjp|ditijo |d=nt|djof|d}|id}|djo || ||dg|d)n|id d i|}nt|d jo|d 7}nti|}|ot i ti |Snd S(s8Parse an RFC822, RFC1123, RFC2822, or asctime-style dateiit,t.iiRCiRRis 00:00:00 GMTN(R~R( RRtrfc822t _daynamesRRRRpt parsedate_tzRFRGt mktime_tz(RJR RuRRP((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyRbs /     iptATi tETitCTiDtMTitPTcCsxtD]}yg||}|pwnt|djo%totiidntntt||SWqt j o7}to'tiid|i t |fqqXqWdS(s6Parses a variety of date formats into a 9-tuple in GMTi s*date handler function must return 9-tuple s %s raised %s N( R-RRRRRt ValueErrorRqRt ExceptionR RRi(RJR t date9tuplete((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyR}s   . c Csd}d}d}d}||id\}}yj|d djot|}n.|d djo"d}t|did}nt|djoK|d d jo:|d d!d jo&d}t|d did}n|d d jo"d }t|d id}njt|djoK|d djo:|d d!d jo&d }t|d d id}n |d djo"d}t|did}n|d djo"d}t|did}n|d djo&d}t|ddid}no|d djo&d}t|ddid}n8|d djo&d}t|ddid}ntidi|}Wn d0}nX|o8|i di }|o|d1jo |}qnd} d2} d3} || jp |i d*o.|i d+od,} |p |pd}n|| jp |i d-o'|i d+od,} |pd.}nX|i d-o|pd.}n7|o"|i d o|pd/}n|pd}||||| fS(4s Get the character encoding of the XML document http_headers is a dictionary xml_data is a raw string (not Unicode) This is so much trickier than it sounds, it's not even funny. According to RFC 3023 ('XML Media Types'), if the HTTP Content-Type is application/xml, application/*+xml, application/xml-external-parsed-entity, or application/xml-dtd, the encoding given in the charset parameter of the HTTP Content-Type takes precedence over the encoding given in the XML prefix within the document, and defaults to 'utf-8' if neither are specified. But, if the HTTP Content-Type is text/xml, text/*+xml, or text/xml-external-parsed-entity, the encoding given in the XML prefix within the document is ALWAYS IGNORED and only the encoding given in the charset parameter of the HTTP Content-Type header should be respected, and it defaults to 'us-ascii' if not specified. Furthermore, discussion on the atom-syntax mailing list with the author of RFC 3023 leads me to the conclusion that any document served with a Content-Type of text/* and no charset parameter must be treated as us-ascii. (We now do this.) And also that it must always be flagged as non-well-formed. (We now do this too.) If Content-Type is unspecified (input was local file or non-HTTP source) or unrecognized (server just got it totally wrong), then go by the encoding given in the XML prefix of the document and default to 'iso-8859-1' as per the HTTP specification (RFC 2616). Then, assuming we didn't find a character encoding in the HTTP headers (and the HTTP Content-type allowed us to look in the body), we need to sniff the first few bytes of the XML data and try to determine whether the encoding is ASCII-compatible. Section F of the XML specification shows the way here: http://www.w3.org/TR/REC-xml/#sec-guessing-no-ext-info If the sniffed encoding is not ASCII-compatible, we need to make it ASCII compatible so that we can sniff further into the XML declaration to find the encoding attribute, which will tell us the true encoding. Of course, none of this guarantees that we will be able to parse the feed in the declared character encoding (assuming it was declared correctly, which many are not). CJKCodecs and iconv_codec help a lot; you should definitely install them if you can. http://cjkpython.i18n.org/ cSsD|pd}ti|\}}||iddiddfS(s takes HTTP Content-Type header and returns (content type, charset) If no charset is specified, returns (content type, '') If no content type is specified, returns ('', '') Both return parameters are guaranteed to be lowercase strings RRR0(tcgit parse_headerROR(t content_typeRL((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyt_parseHTTPContentTypes Rs content-typeisLot<?sutf-16besutf-8ists<?sutf-16lestisiso-10646-ucs-2sucs-2t csunicodesiso-10646-ucs-4sucs-4tcsucs4sutf-16sutf-32tutf_16tutf_32tutf16tu16sapplication/xmlsapplication/xml-dtds&application/xml-external-parsed-entitystext/xmlstext/xml-external-parsed-entitys application/s+xmlistext/sus-asciis iso-8859-1N( siso-10646-ucs-2sucs-2Rsiso-10646-ucs-4sucs-4Rsutf-16sutf-32sutf_16Rsutf16su16(sapplication/xmlsapplication/xml-dtds&application/xml-external-parsed-entity(stext/xmlstext/xml-external-parsed-entity(RORwR-RRRlR2R.RitgroupsRRdRRS( t http_headerstxml_dataRtsniffed_xml_encodingt xml_encodingt true_encodingthttp_content_typet http_encodingtxml_encoding_matchtacceptable_content_typetapplication_content_typesttext_content_types((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyt_getCharacterEncodingsv0 8 8          c Cstotiid|nt|djou|d djod|dd!djoPto5tiid|djotiidqnd}|d}nt|djou|d d jod|dd!djoPto5tiid|d jotiid qnd }|d}n$|d d joPto5tiid|djotiidq|nd}|d }n|d djoPto5tiid|djotiidqnd}|d}nb|d djoPto5tiid|djotiidq>nd}|d}nt||}totiid|ntid}d}|i|o|i ||}n|d|}|i dS(sChanges an XML data stream on the fly to specify a new encoding data is a raw sequence of bytes (not Unicode) that is presumed to be in %encoding already encoding is a string recognized by encodings.aliases s%entering _toUTF8, trying encoding %s iisRsstripping BOM sutf-16bestrying utf-16be instead ssutf-16lestrying utf-16le instead issutf-8strying utf-8 instead Rsutf-32bestrying utf-32be instead ssutf-32lestrying utf-32le instead s*successfully converted %s data to unicode s^<\?xml[^>]*?>s&u ( RRRRRR-RlR2RRyR(R Rtnewdatat declmatchtnewdecl((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyt_toUTF8J sX8 8    cCstidti}|id|}tidti}|i|}|o |dpd}|iido d}nd}|id|}||fS(sStrips DOCTYPE from XML document, returns (rss_version, stripped_data) rss_version may be 'rss091n' or None stripped_data is the same XML document, minus the DOCTYPE s]*?)>Rs]*?)>itnetscapeRN(RlR2t MULTILINERyRRRRi(R tentity_patterntdoctype_patterntdoctype_resultstdoctypeR((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyt _stripDoctype s cCst}t|dy0d"}|i|t||}d}}WqqXn| oKd#|jo>y0d#}|i|t||}d}}WqiqiXn|p:d|dtj oh} t2o4d*d+k3}|i4|i5t6i7i8d,nd|d<|i9p| |dXn|p1t:|||od"pd}|i;|n|i<|d<|i=|d<|dp|i>|d<|i?|d-<|S(.s0Parse a feed from a URL, file, stream, or stringR,R.iR itbozo_exceptionRRscontent-encodingR tfileobjR RtETagRs Last-ModifiedR;R:R9iRRRs content-types%s is not an XML media typesno Content-type specifiedRscontent-locationscontent-languagei0s1The feed has not changed since you last checked, s:so the server sent no data. This is a feature, not a bug!t debug_messagesutf-8s windows-1252s#document encoding unknown, I tried s2%s, %s, utf-8, and windows-1252 but nothing workeds+documented declared as %s, but parsed as %st _ns_stackRs$http://www.w3.org/XML/1998/namespaceiNsxml parsing failed R(@R+t_XML_AVAILABLERPRQt InstanceTypeR,RRRiR^R RROtGzipFileRRt decompresst MAX_WBITSRt getheaderR}R:RR*RRRSRRRRtchardettdetectRRRRR t make_parsertPREFERRED_XML_PARSERSt setFeatureR tfeature_namespacestsetContentHandlertsetErrorHandlert xmlreadert InputSourcet setByteStreamRtparseRt tracebackt print_stackt print_excRRRR R?R,RR.RR(RRR;R R!R"tresulttfR RRt last_modifiedRRRRRt bozo_messageRRtuse_strict_parsertknown_encodingttried_encodingstproposed_encodingt feedparsert saxparserRR((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pyR s$       #"  #    "                     t__main__(tpprint(t__doc__t __version__t __license__t __author__t__contributors__RRRRRRR*RlRR.RzRFRRQRRRt cStringIORRR RiRtxml.saxRR Rtxml.sax.saxutilsRR RRR$tcjkcodecs.aliasest cjkcodecst iconv_codecRtchardet.constantst constantsRR RRRRR2ttagfindtspecialtcharreftSUPPORTED_VERSIONSR*R%t NameErrorR+RlRmRwRxR~RR R RR+RR?R@R*RXR,tHTTPDigestAuthHandlerRtHTTPDefaultErrorHandlerRR,R-R0t _iso8601_tmplRVttmplRt _iso8601_reRtregexR.RDRQt _korean_yeart _korean_montht _korean_dayt _korean_amRYRSRXRVR[R\R]RaR`R_RdRfReRgRTRbt_additional_timezonest _timezonesRjR}RRRRR targvtexitturlsRR:R(((s]/Users/tony127/Desktop/web2py framework /web2py 8/web2py.app/Contents/Resources/feedparser.pys s                              K    &Hs' 5 '%6 Z     n- N                                                  ]  3   5     private/0000755000076500007650000000000010764320642017244 5ustar00massimodipierromassimodipierro00000000000000sessions/0000755000076500007650000000000010764320655017444 5ustar00massimodipierromassimodipierro00000000000000sessions/127.0.0.1.1204920747.03413932584430000644000076500007650000000012110764321555022726 0ustar00massimodipierromassimodipierro00000000000000(dp1 S'_form_key[]' p2 S'930402239474' p3 sS'authorized' p4 I01 s.static/0000755000076500007650000000000010764320642017061 5ustar00massimodipierromassimodipierro00000000000000static/FlowPlayerClassic.swf0000644000076500007650000034230410752741476023207 0ustar00massimodipierromassimodipierro00000000000000CWSxipIv @U$x AO/D7 V =}` UjHgVsHaFԣVJX[ޕxmBV86lm8vykr86!8{y~Gؑ'//3_f| e~d~K#k`16F4=ʮp: ùrzlVV9tLl{%/˨,WviX^Yz}7Wer\p‚[7U=ooC 6X{q?}[xR3G%wf},vTn-LaǮBټbUїq}b^Y%Ry'kn74Z> 11 pbND1y|5c_a@"Z^V U6Q.V٪[2\X)>use^lџ8ѐl2"{Sp2 Pdh:|tZSϛl(@mHqA2Vkbޭ VNc&y@aF*I#aιѦR@¤H H)i HDQ@hENυUBH"#v815 bj %!!&CrXn ?7{ 4W߾p<4xE#leus-U=:|q %3ܪA8y9r'nީe)mNlJ懙[z̷QeŢ-0P.1 #qT*-6PSZKO[UcW=9щX؛Lbo$ 7BMQ\7&@= rq `SC ,&&s1XQ< ɾMKc37Vۆ.Px,~uRdWFǿ ice߃e2ϒ:dʅ<JG+ `BOF?cN{ *`G}[>jűXcMbXS>byuxV2F+ob>;~$fA,dVgp 9w,0oo#[ͭ3n1?[&l>?WnXP%Hj=,Tx;jnb&#&Q89ŵ筰AĚ͝*yq_ؤ.`(oln]"!{-U=o﫳Oi}v2ؤ ,&1UI'm]DJF1Y{nWj\PmO9FU_qqZO 7q;m‘k#wGyoa aq6^(r姰^o.sR\e?rV<\ECV*ceyN ܂ ?3B)<>y6,~˥r6?J.Q.-p6J\D9?VmKd2wfS*"$kҪ Md͖ Bö@M;0ĿEZ]9[fsk S?EK2n"Jq,r-.yjAVnU9>͉)! P edWPZ)?0bR:YbCNwH @0GrN|A4|~myO $ BPb|qiL=H)[nKAuʑ]WprKA2NDd*.mp UAXqc-;+S(?Wy|h…q07u kU#a!BQT@P$oaloB|X{-ofrByIJ418<)H@  xǏEL}|7^1%"\~`l_4-Ӑhu0c"pGZ)W*—)|)`)Yro=dj%LOno`a갛_;\z0Z 2G2[KΧÒ?QFK/)#QC; 6+lIoM62Gf/bHoY0$?vEҲx"Mۨb;ůxoǓihL6M}gRwaotԳ)qO!EH<8ގ{vBsro#{_2*׆b`l 6&'X~ \o!%8\LufsC&* -K,⍴hR!-z8ȖM͑N-"^M0 6֫]ڈ8d9x$ JsEAHqa[v*"3%[Uh1yUnxȡ{N)4^T0^ 216ićӟo`11[hCO^6oK`&_ &]8.- <$A`ƢbFE9g*0 lhΘ= vs,c9]qSNC1{lq&p݈@ƤfB5ZSֹ2Թ{`m8;{vm. 9ԟί _DR>MG-P*8]y:oD"й Q 3B&HqugD5`7`OoqeGxoOߌd2P&Nr?w{A6 \2q9s "6Ń,į ^y2]l 1Qc, ٷo%IBF+H&vr#0BF>f!?Bw!fބ;_5FGk`^4KK 7LC\!ĎC . lT>1>" ?z"Zm[-/*n?zivs`N) s 딃G(mX`N)WL1VAC`E15-b:fChxNJOu.y. I\7 I>?Db'c'?f,+|w8E+t@X/)nLnE5"O1O~݃ԟyպǩT"~S@4Tok~{\+I()E~mn؞J4b#w"#ק(}/u`dϧh؄&ϖ:EWN{pW.}j{zĒ?f_ x/Ÿ ɾ1.twM$vӘ@$+SwuF l?m53}R+D{B13VAMEta$U#_z˪@oLg3-[׷Sp9 zwogwic$P wZihC]g9ICO댁Bņ Yɇ/8Ys܏@,USu%c"\1T<9_̄_랋]GsN=v8T7$)BKf/QGcx"،4`N2)NU3<$KGȚz̤8$5cRSy֖dU[Ќ>=_ff1qx}I$ %!~W1faM4N "S{{?j(`dįMx0e0"҄Ob;!_=El=U_PSӣ=RN%"JWNک~^MOyZr6i,ҦU7ofTndvHHPG/ט.5tۦD7tuEiЧ'c^UN2^gyҥ-UZrT?֗E kvd/Z^*20W(a,ѷ[ cJJ:^-R)t\1%(C`=)[2.#>-yJ4,QJy^. v [ߧPnU2A#"v-e_(+fs%==jyf0}R%5hP:ƍDh6\? °IQMoT0xzIww`itaҝ̓~U;D4`p Nj hu޽Y)Th[k^*E_Dh7rI,]ʆ~2E#ih%'>v;# B 4oH 3<3օ6F׏v.ZSvQkdDȄV:Tl:`MaǼC.ChP{;fdO#>o'<22iCLүxC$:bb{{h2tҖ _ԻQf`BN!>FÀFI-5c޿ u=\ s. ;6i,Sb 8vB\‚jv% uEDl3,l=$,mjv}N$: U33pœfc'-]dB(j)6O ;X],MKC1t|'N\»yd[O{%"Ս7z~ ֖KWfbRJ[Rxmy]I|i*&'hbNxA OPqb㨳x_qWqǪ5l2kjRn>;"g+ RD|On J~,zbg--(DFSP0`f$**:|A/U*< }oa_$:j=#/cKA ^ Qj7_}CZ̳ڣş-abk"lm<)rkN Q35P#A/"8IQ mC!/*^|Ok ,(xθ^C&1ë{‰]3G5Yom5&c $9%ƶ06 *͌ҾTg iNHxsQ_.e"Hąl8T(Ybq>f,؈V G~|A;6g4HD3_B27|rnx[SyzGm7x ,\& LBb{EC| /%b +i8&G h>]P=Um],셌]8=9 Fq˨)x.(2p Cw d>>y#fS>X69 >/ 8{٧xT`[sY]!Pp-{Qfn ؎7 Fѓ9CW3Y&)jU X]P̕~'IH}kWլ;֭B+U=g w9_(xBɘA/N杝%U8y&!}l !I>#XFG% k8ٓrZTFUO309j2An+ӎJhBq.Qym9ˢ JHvz@\/J !u3xvH D2?DKdſ\Z(9/3eskʽ+AʸjxkםםkZ=%GEp6VwxrC7j̢[1ɻUf1x2K5jQ<~WѲnIEvnem@_}#ot )(췕"̾dcVt&ۖ%CyZIHp =5te $buIЁrNԲFFbwg7UNl37Jyl{(Ӭa   twg,L5oZMÕ[al MOJaj;:ͽ4Q3^PfK+eq#ijZ2ӎO)-4"#f^`Ww1&oe GrCN.[4PGØ-HЏ 6CLzWPprr50VaQdD]ERVZje+\ZנGyʖE:i2 e&?,UvmwőԞR/7E gс}P1IRPWϥSi78 YI{ Jը O=JdO(NA͍ Ico 6xm|З"'= P( dCsg|wvޥx g5 ݪLq0> j{ >9#G#|H(S{`(W*=?ΚISx5>ܦµ{*Ue~ODZ5y&#Ń|9(<8 $BAP k3}®\h a{D(#tlO^Q3sRd12=ʤ֘Ho! ;zA܂|Vt7v}D|rpњz B#z$?Rr@)H9w`:dB"p )x/ 텅춏H%(u4*AqlZA'1_mcFcP8{0JB#)S!5-r.#D plrNՠ|P%b";?JęCBf̰ !G*3> ]hw3a Bk| ە[?%|S`p;ȮSa&\࿂ 9'7 ? xؐ걋w_x]gܛ!fP:qXtlaGG`&fS3S~R#Hn%S~爾pe2SX=]±'bD-^92VqK顂rR14RT,q HPŔa̚[\[ߡZmO/>Yyoh-: k_ƃ.7 /NBZ"߰fwl0qx$12]WƔp;d|,Mܤ/тufבkzk;Nz*t SDž b\'yFLz 4[9_߱4N9tSYk0vK1Uce)VHx!yMp6%]QCR,s  ,STn׋|!\qGƬ\$>) ֊F 򭕿֊&>*|{H=e܍n٫&:Rsff]$ׄf"yc aP0A_)K)]Jy9lbtL5ŶbUY͏OE 4OHЍI ĺ2/aMg[*D;s֖78ih/["X6sV/n@ܨңmjz>LS"Ij֞=3Ņ/όj+Mn7=ۈUZnE||~57;e,mZ>-搥.yh[ 0Jպ'A8Cjn5Fu5 ÇVa5VuD69W3J 0C.X;KN|x.[mg׫{Y^wtMu?r7wCIXijcs>_nyNK I&7$]SaPLX<*|uh:% qy&H$KǓG/gc_FXW6'Mٛ;E#n#P̴UJ{G2wm| 挌6cA+/}_p:0lw[Sc*惜KF![難klټ7<[zFnj |gaau>95̐bη97T;K$ͩ(Gn:g/E*O]Wn;JNVʫPEetqDD29".E q>Vwv`P~3\삣/2[ :JMMys 8]8<^\cȎbsdHF~|k?ډ8Õ@RjޔO d p. C>nqqq "f%b[Cѫ_bW&nYd &8;aŇgQ0W҇AFKhdrO݅׊ F| HoIY-g\J=V@|Gbkɭ˛ pFPGhS4P%fu!⻻CtI0X Kw9r /4'l v f]{ x"dLOkυA݂uV%У^V"O { %EcEML>{j,V=Agy>@Ș72~%ӹX#oH W^|Xдb<@r֜ WみZ5Ξפǣxd0yC:|4%,lYrKݧ9w*'h9aJWbT+u~3 #AO5UtgHpa2+j*`#x}(t/[B ?X^YESUypE ![vy,lqLԚB@:ye=G-P-d nBp'Ux//J}6u < Ad"%A$iIP"JZѐW , (qu1brī0Sw`fa5ِLRc-wٞ_S>& ~MFi׌\AgTnE[@eղZHܨ~ B00:?}}n}?@}ۭ(/bOGf{IBRK"8Rm&<9 G{Lcgy'"G#JS%؏?h#!BA:H'jc{rႄM6.:/t3#&Sc 1!=pqTsrYjL;9܀KgPXk-!Rc@ 62 &{n/~Fl\qx+𺾂žϖkgKa|!!)jۇp".v::9lXw9Q ^4(Ocuy)RipNZ#-6r7!t/yÛV?9>a, j *DХ:wJn> f 骹:&Vc+ < y2 ͻ\\ ZxmŅ [gkq(6|8>hvg8E8'hEr4WY@5WBBUq0ߍe&^'Pq5C3Pa P 4f|BT@͕ۚ|FDfpmnl+~)0GDfvE[B9::]% ?7RW  *3hZDeRՀs+o)H5X &ww1Ku&_WXC`CJIT K a$2,\Y,cJFqWaOj$EdXU=Ŀ$(xt xg/$?]>y^b3v4aLo1/` 4sO.".nP&T*J~[{r?`H]~Uiw#def%DZj/19Ђǩ yb&0'ݥOjGJ#ET@Q=~JuQL!o^ZY\;y Ik@&3;qJ| ÕԹQ(|5vb,j t|$jN~Y?*ׯ4LW\QNq[UÂ)Bdr )6HFYO'y@SjA0?/h32wEK{ e?ߒ/~~YL+[{u9$fZQE3c͓PbS0-yí@` NQ)=8 miot++INm0ZCQ@^WJ@ys1'\ 'R-֊PpT>/\8 *4i AvzJwzzSkِ 6;[p9b_Uwd3x;A7$[kxK9n;^㖲pR?`Ƴ]2p@G5uG>A..[ =}M#Lo{>YmKm[6&0䤍O 5kwL]j6Gm1}:2rn!wV#X_` Rg:R\ZGZGyBhĈ"DB~:$:@-×?Vzd{e{5imbkۂB;)6. Dt ʟN5]DO3==.Q1#W,^Xv0 AG<(^NXx2Q%\{Du0Q՗8ly? ^p8)O'n`w:7l;77;ac0+YeY;i V2.׹Be\3|BMiY"d9/OMc<] 2hU$L7[ą"9ZJv#&uQ$9k#'n$gG S&)"'>x}F|<[rt&ŕz$sO"}NX+=Oj^.ZqvA iQ2XFUڊ ʈ+g8̤OAt* z~bF$WӦ=FwZE!0#3lXkqQJЖ21~zUJya;H%}&,yˏ~kx\A5mt#_Dg+buBZP>ә+ꂓDY.>Q>pm ØÊf1@6?'%AKB_a-%Ӏ,5=ኪo)J7=`R5cXq؀v7Xxsˏ7c5;th_WKnugx`SOwaGa݊GSB@(|`{ltk'f-Ga≽y_(1p~,$K`'% Ψ>T,˸@kJ;I^*;REa˷Wf 8 (&ułh{V _mpsV-Yع}#-Z\eCfeQKopcqAP )< s鎈Ng0[9XcFm Q- gHޓlAoSQF`Q *^B_7**WtN`a@Dn;Y|k~jailn+ȷ}W>)$24 ?mjučxxBPVvͺt6('U<*g NUFw]t(ߪ/J.̐ vV!DpKBaJu`+jJsGG]r1`1bv(MB cT.8":W[2!G 'k=\W&H`T"]?xgY%m∯P^jdt,WuvD*<[#M:znQo,%59_L-u] cDdDD,Oi(ܹ7W# Diٰkw6 dvd^AOw]=[z!-|aͻMbX}o/҇^C#WvG>NT 7  +c)`Z\+x_埸##_ȧ&44OoL1`OěSc8)D~{}"!l+}6@jWv'^7|aFvO׳KF?cY"ەH8&o*]ԯ1 @*O~V/Nn5+_dVT4w6B<"!~n簁w᎕~gQ/";|ڗ_ph !a_Ugܒ<1㯙)|9T't2뙀7o 3ۨ:ou=!h.*[JT;|(GFrc9a}oE4So#- *r%Y\wN|k^/.ᨅ}ֲhVyөV AiN$!N`hU5 aG!Q]DLdU@!8}Q,L9Ŭ15#{ZH)p̅p ypZMn N5 jw`S흀FD,& GZ|H8;1J4d-[uI86G]t ]JE y"5Ei}³:^+Xp2v_ֻ±:u@dHDWom^G(xPNa @55z ઃ6wIKVO%VDFp|[Ʈcwbh[!+rԛ է/6?rJN=;Y0>%ӥJHR(ʣdˎ3e׆;`klVKhOiX+(DFjksgpvZ88ه!ixDXg"،jH}s'[/4Xc|Lh3G\e,}LsM~ɹ*KmJUIz֫ "mtt08Q5 XUgoomseR:^#_^' !B j\TTxg" g9LS`PPB^:Cca -^n~4" νi3Fd o㕩_ gGT!, psѶ)Pm)C!TjD! ȂVDD^e2#0m-2d(`lAA!]ڗ·\·\827B9Bu|GU.`hӇSR~o+"p<><6A@`?uY ʴ#ݳ@ұuR["Vk~*?;Fj.h+k; &y8T]4K{?CYf;1XB|&q6CcPH|DLCG3*ضx'Iy#pEx<O%0D1ԯM r !\Ee7ưߊ)Z!{c@iq'9~'9kэwilߘn.8c>I*ت1 N5q@+Hd} ou6Xs*/p#K|ryݒ.f3&];,܍媅.Ut!Bک$lϏS'=[̗=GA2C#tPmS8G9` Qo9e:"\8LW&cN ivS NVC|h=fM}?ʳMy+UuYtOԽ+>+kP QoM0ckx@XȊ.!+Jaq=b;A9L |O9-յ6 =wfQz*v)SsWP]gn!66lkB'Nk|#F3 5F2Kt@CzQM5.0߬4A := YĜX.JLH5@LRHmb|GM$ě‡x"#83K!IZCzxXn(&zα B,xf֩[P# S#Fycsج~lqgODq.ݖB~]sJ;|}Z=Wh{=U$fX>y>0z2V^ysv!W xRWٮHk~'`''y rbxqE+5qƯa'Rhu{9'59]L}kb>E Ӈh%EXHҒ%[,³pdx`O`N ̑9OX`si%j%eЩB "ۣ*yoUGTXڞc>R_!%X~E+tݭ_9*_gbFBF%PF? 'jK0b2yHX3*y\򇅝'L[ O!`&O ʱVW;R2&ghSo\h<җLD!CCf-F_UTwd3ϟ5n|w^o]4N%r/KD3Kh.SKfAH^PGFf֌.f3źGmʜMt=wbW]a}h˥(v~;"JKJ$ML*OTMi$ Xw=[(O_qI[M__,e}:/@,%'VT0CaZh P"BHO|)9 GUP_l%!UOHپX,WKŲ"-Yo4Xrfwl^{s n1=|2x+R2S>:A`,$GΑ;;E(*_TK|"N W:'ŲiP:2;iUGfQ3D/P *Rej$ @f9pRU,F!iŁ$O]D.RzXƧN..@mr~g&9@GTPb9"S7`XJs+z]ژcX1?c ͟1\%~w\VO.l U˯@U'KU6u 8M^o5@ٲQ#g z&Z/\//h 4dԭFi:]a' 9pWAZڦ9BW d-Az G^Capn rڲTRL6nK#xnBr)lӯ}]LxjTlQja)Jϴk5ڪHΑ]AZ1bX5#l}$A6]q:(oe2i5g@Gb0=Q&W6*y R*1S4UF3[% 'HUI )O5 2%o} A0&I#DZOk.)KNpR%OgEˬFbyʓC Xی%1 KY'TƉG` &l(djhEU Qh>j'TV5?AE%P*}B>!;~7{1Y] Ö6( 8Z|1n52+Dun}ݰ^^G2^^F-6Bv@X||E4crZ""#ҏt~2w2iswՃ%8ffZ9ْγ}dЁj0̤ڱèSHө`p%Z/wd(ِdu< 57Z )ʑ` K:\)aI6n3hk3/||O>>ځ61 n^|ٌ w5CYlȑH q W)uPbԅ(ڍP!.if;C܁܋}p/J{SY(z ] yҌjEXZV5A\Eƻh~ y|7ը67,2y Q%?һMq;5y1>c`.j5f|6MxI 5'.n"5 n> rhW LL΁V΅TΛ];%]4 F1({e~<ʔWM9~kl]᭭= %İxAx0j7 0Y[ahFaͪH68+؇ĭ ]S'MO"ǰ!B%3 nl2oR=)'7DDd_ 4́zfUZɹQYrSk#'(:fWY\ x et;ژ|,ьEB܂) ZC{S|Kc׌8(53*5ۨqhud~fo +aN78ȶo'J~~ONf0{-Kׇ.۽jaK=/~8$vׅfR.a[Jp7ⓌoU]O*CaZ_7؈{qn*}`!#Re^t:)_a[ ) kY#~r}㺌bJDCuͼ.?DigOK^)`}3'*ol,g˭:FV@+5($-P{PBV8ze#6Lq9/_vR>0A`Bņ#|U4 e8l '3D8>y&C E)ƾO5xgʋ@$F5{Жl#zmnl+ԃSTVEхv AQ*Pk+'8A,B…2){~QX a)a?GU*h}aic[uf^,i o 7RaG^DNHoL L8f"TֆAq\.2?P[\+c1DՋm @[G>Nga l hXdUwwRxCN텰0W|ög . G&[W(^gay,Iү*H6:Ž1H/hژ̳ұho?G,̯1SsA PD^˄ٖ<0"T+_FUD\W."A\{ V=Cu[b3jW Dwu HWhP4-zGzܒky):P뗝ba1ҴoRU\~O_ NN+3o8ϝ b\o7}vOK䒹}kVO8zJ_ ]|5-D"uVnMY+mFkBಾ+ 1%9ts2`L9Vi|:e #|7'rԬYb ʻx&t"c=}H"ʭ`L7w[jo=R潛(#L9ِSW*u;6Jw߻sAX v*IgguKJrffNA&&ZJp8#2m^dr-1s_5,qዊ9sN.lf}NYea2^zOCl,&LXt1 ^8Ȑĸ[@o2&Bm5l` r 6$~@Kϰɩ3l65f2)F1uX Ԕ#ncCrƨr'*nWFY T޾1 vކCb!MEکH{"µb"w(՜D5o5t7;(1Q?Vb5\p1T_((?9l&>\V.)s'}J- 9PjBpEʝdWI__͋}r&8П OWݙ,-23w&gf&-j./&Jg޵6x" sbt[^19&c`%B.#%WLUԲ~!P,<2#d<ǹcFKq*@A5 ?nqR pKW<]RDzz6,mmaj_4riH2ԞtW,Jaެz`ψKo"/p0B$GhUbɤO%]D&  }@а 2,rjF#>M wvTΎO7 s}>ERdͦ7/o0%W0j2e3'inU lQ!%ӽ0<ӡԨ&DWvw4\/ʫG>y4Aݸq1'g*"5Th:i7Uxj h3y)ng2[z{IIF8#0# RsQZܗ "\e3,[3!+6+HWPW״b_Byd*Wk䵩Y<@H:f"u592=r%oAyZUj! !$m[bɗ-(dH `$ɛ"x.F[-M>Ơdxuޟ!ɳegs\oH)'>-uh0ΟJ.kv.v#,ѽ+z]*fZ8R@XSI^('j>[bEZRypDp|))@ _T&2ڻ:1w"Ci>rx_ {a*mnZ:*zBY4 uS<%HON *~oEiQ9 *j8")2O]?ÿKfa*g.(+e1/IkmMok:EJ+AݚQ'@5{tVɧG}}o=Aԋ) po##/mˑݘDF`~)2 #]1R> B)?j!P aiH)xگ2/.Z,W%1d^.I{-DNCLKchAos|ꏔHڮ"W{&^_%ݥLz&3ڨ^g4 O!@g ѹؒ()lXAJ%g~RsI AΑ}f ! Iem'SڒʛޤH%WM4(1! Z\׮D Uo iQ4.I@Bir_Tl Y$V&KEgkU'S W (QWOuteyy5!؜ISf2$%W?AΠ7.^oTI_Zw[a0(&tptw`4Ycn f,(^Xoo]9SftȌT"0ԓ's?܄L "4tP<%Fu5(G%2#GFf-M>tixK ͯ @Օ'b]dJ: C u1(En R4AZNhi14ZAz %|N+R/ѵ QYJ@$S{,xPXK0;pN]o \Ujs@,~J=^M T U4&,pbo,>`X/d) ha coj73>}/8 JJ!b.S Q =R hP=&3ʩ.Ħb3]̬ϼ`/cݓ6:WKs<",fpx:˹L3ACmW0j?Ʋ}ɶqDnVT;ɔ{VT);[ -J_)`? fMST7꫓5N钾ՃvHHVMaamIgV!TGOCSdcDz!MuN<ͪ\k^$nzϻyJA*eYUZ?QjհX3.p:ְ&a Jdյe/]{-YBlud"A)T "Z KJgfgfScsrij#T}*kap)=igB nóPDR',OtFv;hX |=6ҚDf*3T*tHpVu(^8)LZ^7h/sҕy:k(iUf]w#qgrnQACG C㚊c2@k\{%FD{aMhg,MpMl"-1BQb%;S.ݱRU-Rx:6QJˋU[sQ$ИٍY[){r}K6\m|]n GR8EwkjB䃸!A6 Dx҅zY =iLl.C >0Ղt7(sN-F/zZt w nSw!@@}ĕ- &G{=y]-LQ OnJGJGpD-wXgs4+5d#ÈHwP]s y<;/ Z-TQD法G8%0#;g q:.W"t1=, 'f)P// .$^>U8;yQnǎoX%Y4d'ReSf)QZ M BV<(x씥({w9w( ᅾk/{Od@1ǯ2֊3**+-z69âQc /*8Q3$-S-@-o `WD |hUՒKxnbG*@*He ?@iv#kR>0 쮙1 0.kWqr:-|b2;'V,kvn(U Jjo ٙ|bB+z[BYTZ-*FM)6֒R  +P]\ƪP3XVM,4*XS5QJgul).  ٗUVyQ-=u:\RSY[O2=:O(IwhmA;4*+2ncANѬsŒzy)9-%L.(Tъ@o**g8D?V35i,5- bbr$/ VXI7mv@ Z rbC@LZAl2kWrDJ ~Ms,'踬gBc E8^=l4[c>re9[<@0L$daP\9FKl%Jy "p6BXQi_k.qi1xсڹ],qrYÜ۫=\NoHt]N/ smW){8 C|{_*@%yIu>Xx~ kSrC.g:Hش{֘8:0~eʋF:q:؉qV{۵:j@cU(SlObI? ˂'Ӫt V,~pm ?.g&'xޒLI$,*,BY" hWx\O5cS=0pu#y`q!N5u⋐f=yNF -]Lzݑ\r\G[S؃/"ۢ_QQ8 Ld~\K΁_F_We[ez?6 hFG&&g ̤G'G=,ʋ7 #Q˺9x,5/Mz T`oW J#W,5 k|1 _I>}L(̋ Gk;M]EЦ̓@1q ?ҥt~~O|$Y MXo$lpe]$L o0 ͲVaOvr~ǠB =Flg6C/M<[0 0{UFmzqubaom~qmz^D_I9Etk^LZǠ"X/hT_YYaާ&}WS29I,ZA:J sZ>lH/#TH~gfC NK۵tsoDkˋAo!(=Ą`R ]m_DNa" J)VF=coU5Y& $bn/';ZWE~@|{6C7g4Q'wO--b,@n@5θ& ˃# rh$;,,s ƕ fSЅzhꉌ?|FQfm`QӐU\3k^L2 +TXOIg6/2iy5ZgnWh Mņĉ_dǭc-B32 vA Jz=Nj~Ek5bܹSayF%*PbG 煨Uh 6 `#cM6=hcoN̹ :C ӟ˜%;Ε.BQ:|xD0Ux|pL5v"=TDZОFg㌑/j,ukz!33Uŝ]Yoq'kwvq'3;QTիWUqiܥK||:ZޖUܑ7^ōSq'N`^]#u eO_3!H({a- p0/s9d+5#c:dzH1RET}fVR}}]e[H5lz2 N+S#ژ[OT jJ\-WO1ֈv0fjM06P)fSXϥ4e@[ȘE&*}>e=+S&~։k-VG胒@jpʮ>7_8l2Glϛt.N5LJ8_or VK(Gww~N Y&A/8!N ~ dSgyBtI'҄.v9?x~cYJol=0}:7o0"w?e=`FP"1@ 9!-*XW $pI)^ M4DC G!v?QK]zm͗zy7̨b4ǭK͜/8;_!zXgo}![Wҿ߶aҿ慔~^&V.hj~k~gw0ezDOK|@+Jr&R:ddЂirH* I:Fܤ,&ݶuÝ y2S9淋pzEXNu~+~JAL>[Ax~?znR'"8+1ɩC\Z;k$L:?YgHT#S&LJC;čm@*LKT4 S ǧ ~N!Gqyo~'M  ~])nw=xp}:aji{.NS] ^4t VcAf|!}~ IWx~A@;G%tm1u=7.r~\wJאSA8L~6GcbN}Kt%LSTEF%*)@Aԝm.}[<{ˍO? 孙Ϧy $Rhj|Ѓ/(i8t~A`.yC>k;fV\ -ٯgvzܯ.p}fFo)" s:|2n7)fbGc~vnˆ@R~m^|7w|C72^uSR"43\Jp3?c;ͥ<]c;"XՆfB7}C7)T귩WOF̭O2Xa5.jL]UU Yjaו1IQQTًF_Otm5h͓)z2%['ky"%p"0yѧE&S꯷vEFOyOڐN$_fl=ܚzx55ëzw=-9N/"hdzxl3@CъP8ZmjLgTO ǿԨZJ]7Զjccsl]J]SjTwI2&QQzߏ;ߋ } 'e+zHbFGK$R'w u@Gt@FNoU$:lU>#o@AOc*DOЇԬort#}F#o_C]mƐu8`VӐ`}7[ykb~ . BS!br%ʱcnQa>ê171 -` ҈p,A :*%Z?;qk#rlV%Fݵ$% W*e?͵'_$.}ى@{RW zkT> rlXXQ8Ï(#@OFzZ3T%3!<~ AO }=4|lO't*!mTUHz}K:fzds 4/K.lx@@J$p^0GLEd_a?6-zXRY,d0 u.,!N@%G( x5]VE :/~eFnxb9DjXid9ۤEx|!M%/tr Ғ4MAzt$ё+t˃#×'~NP$ઌ2"Pm`Cbdar$5N#=7 9,9[)S?fT!Y@a $4#@VSGm:5 574r[ؠp %NF&(]Ŵ3s6,i肊m]w9#$lOW={jpf5y_iI.Q y &4 uҿ\o 31Fh8H'qHii'VO5u><=TmM8FiF#U"5RdUWkch fndDƽl~ĿZȐO 1)!,KU^ަl/HC%I$V(Ry463q{\Վb.U/b9ɼL,&E [Y;B//V^E^3UqvDhRwaD3B"8|Si\~OYjB{_O[T.ZCr LEUunT ZgZ@h{uarf%wRxi*݈X( 5B-(l.7Z攌\ئEO *~|./gU!8 E-У`xm+^4!EN+of) 2 >O@mc e*. U 1i m-SWN!tڧ|=γFFyKOF5I Y4Pg1C[\udkhХY5J|3SapIͼ$oAú=j P(Y;ސJ=I $PF )&I!ցndЩY}re[r! OЩRuWГ}A-E;jnIrϊ-ngB{B,]^2wࡎI@y# uĂ#^G͑(`A|CFcY<5$'NFdk"e) 2 A4w)m *l'2qL5IH,BKp:,UE KWߣb[o jM{Ě5ݳh0Pߑ=le]h)8ۙMbQXJF~XXEU^5ZՀ+_Lv lz_M,uh_l->f!\oVϋ[Nr}?3vfZ4ŢmS\Vz5ʬ~,Tm ɚ/7|dDL=ZB;$½Bޜ@iE< %Ԯp{cUkBN̛9R^ >ZZ -/5D49[tRs܊b<uhj?vZ3?VrQԩ5^Z8J?{_M_Zg:V~Vt%"<ߡS{F&'/Mg'3FRS}Sɑ47:45IM3##Q~ 驾k}#}S}ApQ.]Xj8-꣢HeG#h.ьGxܹ`/pFtӜڷ㼺 lÎ`&wG͋DȖ %|O Bu٭P8@٣)NX~ m!a&}8W艧 O/` le(G&`1r =[׺[k/H4>Q 1EgJV[FqHn[g ;T;@sޚS? 99..eM^ .M^:῔i^cq]kl~k NET$+ޑlGO#MN@g-ʼ@w=JEVɲ,βl6_)gg9Փ+E34f,;M ۺhek6WzW_N;d8d|4Mü7oK5l7knpF ~55 vh3?͏uYZyg~z$U .G^ʏ'~}^SU~҄\Jc3\xD'4,7m\i%m$YNSBYSHB)! qQ$Y\&q*b$ݬ׬V,}`s(2%"%>~Vm+ ԲD*aI>$qTCDG ΚVi .e:& u76Y&պa%Ҩkbw?z!N[R 7835$ɍ Q& U>`373y4[T큇B5M:4 s0GM B"-S--qn+Ov['HUAz{zk Y!G)vD_)̻Y5/\ZKI:K6BY%jbQM0ZKUq{Nw>TZ;sUҴ{]¼n\{{}kʼ|99ה3ssdM9הfLtN1Sދ;7a3g vV}:0&Q_:$J)opQ{o{1%+i?M |X(xm/lc' =W m }@ ,ۯ Qn7GYڳvJ*+ c>tAKE]':tա do@2;=ǪNUu%*e9zjY}P(?Ǒ$6 O[38Yu'ם|WaɯPWr1LIU',x\ 5]D3hr=J{\m2^7AiRi4"$@cԔ)"w~$7;i7I].9'I3r dO-԰Tb0=&r'+Nˤvp>c¦-YmͥFdfWo' {@LOکlLſ(E VM+<J{Jմ3^dӞP&f*2;Sy/иFajԨNWxfDQ]76,3׃[XZ{ )ш*6V^{a#?b.>$dr:uRX#=s<y[{i~FvLGw,%P1TGZ6OIoXнtZ o9(7)eA%+P_&7kTM,d@_ 41+Ӹj߲9uiʫUA]%2lTr;~ٚuӽ/`fM++ּB9޵EGーz7cX&{kgԸ&aJ/_5[nD.'RzUmҞ)O2 3 ݪI A}K '𑟗.42js}HYVvOӾ-{T7f|i.dL\Af[]x72G񬚻N)4,g$yLTxzh3%hz*Z -0ؘ|gk޳Zo2좑LiToCˎ[޷ b5͙!)?(~$oE}A]ZVHQ5ߦGjw]_7veQe9[ G Xy-kA#%<"(TTe?%iV N& r%c>)͐_><>LJ& > n ;z)k$٪b>V|φd,i!`J[Zi@#W}eB6C]K{TEwT5G|T/b9o۪b~|i BbBi.ڤfK ^p1S{8YfF4<+×-#H:6V BelA@2PaGF_g0 z@jdwe2ՓdS-}*tJ*(SSz1{~Q):mL5  vEBxקݻyH HZia"z}yE/)N<%>PM%LKXjn9sMhc>I3}n`I7L&ِ|NQ2\/NoFya#ySK ^۝ 3:=uyPoWKqB~XyX!%HL#JlЉT='v&_oDCZP{l. >\HB3jآnU>5O3Yj$XȭwsUB,[G8lLw}8r}>yMiJ2麺.Q/] l:z%qSidnArR XJL )xi7ّrYkgI Zl N{ uTgT^=Q$rD{|IvsJsN;8vAL~dz.偡́r8gxOp3Dnl!`K@|4U2k;-S,  9TUthglE}V(+ gYO ZFnJg;ahǤQs4ωEtgvͧ۷G<`7ӲBL4ǣ1l5Zn t mR(T#?F]rr gKb=+R-%L^xm^ cWR7kR/%n,rE+ z/X*tIV[P2! >1 D`0\e!"-a7ƱtBBȈyMזq1≋4~۬p˔J \7 Yk#%4 ׬g<_EJ\٩_ ^ض VۓTߥ1sLS.{(,t^xh?OWzqHsyq(;\Inp 1y$`IҢW o!XՂGOm嶄 S*à ~+/U녙hah  |~¦%`^Æ_!zK|> D%b HB9/L*\v֜ =y/yW9noM|lrj =ΰё&/]7xlĤ`LybW$iJ5u'4:XX:6ԀTKH#/.-P)V-CW'3<:9P2쒥RvR6JeZf))v,vqYRtIA,cw~s_NLvH}92~k?Z@=~[l!zH!Gs:絼WUsR['LeC9!'3)OH{fw9r~7l#_MqpHe3b/5/f":X)UʺijTO')lB 7&4DsC!^O N\h,~2V{9zBޔwSz)_Yg4< s5o-L~A8 5]tt tq T$lA*"7*e 4xDٜX:Cj;ti DŽr 9w1V~[ +[xT>}d1@ )!Am9yDI-E`IbhMI *ӛ!F@2*ICBO qąxjqr떼*i3U LTj"f+ Ղ UB*˖RfaBN=4J-X"IyZN+=A)$3W!?1Ӳ@68~#Y7M_@05dZ^FqIQ3Cغ*sdCT_$Aj Cp@YR-%;rn4l YF寗M͋ )MX%O[Jm6+Z/dz{NqVS7cjHIyvٴͺiƤ5QO,<Bu7uevP#6ddOR).3{f,zαWljɢۙ{=_RFdʒ]e*go=09N)it&Yq/I2YQej(;H\ۥNQ j+mHlО3]Oh# a p ܜd5b<95 Jh2>Sp4IwWDV$)e 9>:sD^R#ŋ".(KYU l6I&@7k*\v.f$Cx׽'_8,FsIY@ق4J#܈dR^ F9`0c%9s#?sST\Jgm:YK9R. eTx+ѓD&=76 K:(JJ77EG5Ib(@ŜwѱK%] 5SL> Ð(RqRs %˪{Λ@n %+_BsK'^k>$P#L^}Wß3m{aG7o\oJb= fsi)(Umɶwuځzk_m[&lS2Ur}TPH#$Co8yw)Yt_@Mi# VH27vYM5+q,&~GC>k.)qѪD.“:a4҉1qDMifoK׬I[įmV+&rir KG;"$@40 ԼD l>;oYMw M(~l2^Z Z`Y'L r ANW>0QR#_=,> &}oMoI(vmo{4E:ax⣻1&,88 }&-n_ޚO[M9qgTMQ[[=Hnapp-UD7AL bނ5E;|:L?ڏA!IY`ˎY] pCNf i$80s7y&1zbM~Wy~^꒸yqd=دC߳ rk d{U.]݌z=I&˞:UTg[gQ;|}  Iq&C q&bsۨmJyaIe\[emQqS*iO6uJR^Є0U !lO{T d*ǘvT=%#/wȬsb*ۧ^JISĕT\لnOU~I)c*5*UH !W=E,"hsEE -t\yw#py9~3XR#{#a+"We*imUp` zfAFx*XGIS|z vDjc.0 %=ѾS8$YάUt,wم~&!=QhfH-IJ͟C %h9Tx'gVrI1CI FCr<Ȭ4@M \K ^mKx@oB>?XT%o[J3*|HU-M<@AJ$2_,cF1UIJH#]gb29HP9[U 94z hB呺$fRyQt AJY(q:>NZ,~I+ )Jê 5Se=b| /?RS/_"67U.JP'8TEpm@&#țj{{VYvZФM uiQApQ߼Z' I`c#8xI>  oTQ)AngtӁjFܱ=-Gb}ɨ{]3+Gew=Ⱦy<#׉ Dea!N`Iñ4X*Fg-#?g:\r&%;.A#%7˦.|5m" ϩ{XȁEjC^Y|NkUM3.Hx*\ݦ2zQ*" 4f՘1}zJ{SyL R~^-!IE^w_UNȬ3S)逺j}"&UIܩ:˯i%=R%$ 'Qٶg.b/2ˏDYDEYGg K)̃ԩA&qW K#^ Ӆ|@ڶ5 ͭ.6T3fojUYdbuI APԳD#MTWb0B^T?5Bh̗.E(8O$OO^ׄi vHsj~q#^ѱ}'ѠANul.!JWaC9@G.EHQ٣Kj׭=I u"=-vOã.pC 3~2% <̴1< m4H-ay^H=r*bITIDS  F,BIoa{a܂LuS#Bɇ˃(ـv?択cz3-XŬȪFƭowΚG)::槿YS`\69۝I,as%.Px8x un(f϶ n]?6igV'h5by \՗_ {Pu!BFPL;>?9%?5 {ðI,lXݐuP33S\,mAzvπnhv !ܛ ȶr:̪Y&@ kuP6A#ŗK}ܜ%lEnGis[&gÃ|u_'S>; "^i<#,3N_iz: םXgd[t"[ KNVnPb/A[]6WZq ć̇fL蜤({ `J pY Unv9ILWiIvQUܧ*>nuIR} >Zh%=R,ʼnE waV>=`%?żNM!g:5ņ٢f\ ]א 5Xsv@'.GNm̕bmȿO/G!o()MU;AIԢU ںPѨMeUj$*9RC~OcAI27a|c<[Bjztg!h[$e{xuBkVXviTn;N夳g'TJr`}8{N>Зll4I A^Rk.lr-ײxc 94UD#*8D' M(RgqoPаzgzXsM'NPtE\5Q+z_[ ]a cfÎ>;3-b0 ڳՅdMt7dЇes lcX6SU4pt*2ܒ܁ZIXm\B靤H !QmEW2 NiKԬ/I`bZ96Љ?Gz⼃GU*N#p0g+9WsBFw눿q5Pe3 ;KT|zc=lx$ 0b@ Ǔ.#NCxejtťD@JJ3l 0STSFxցri0ùfɑ(ޖK*! 1.J:TZHy-a"(.j#|ӱ;- ۪.m:X )wxR\yI5t;lb(th&붣c#-" 5nUvλ&T{E, `l3e Q0NG6,N8j WU^Jq9{+QrOQܕ\(.qށs =G,//wgg^hgGGxmX1 G!k;t+q+ꃚ4}UAt &J9CʨxDţ.nVnͽu*ҳ[7QqH-=C9V[0˯IoU7i \XV3im5k{~3j&?LFZoQNA,Δ+y֟fBڗl. oOVB;ѠvV|u(Կ!ŦPC*˹%}7_t"4o!a3# (,УSMUKw 9Uq/f[mWzӸԣU-߷Z@֨R:\c)HC;e(a8 :5nDEt];]tWWLȸ%PF_1B;ͺ-:+*7xuUQG3Y36D4X:[z(id.w.g7_?$$CO˟?L<Ңe .&<)~=)>* zIfx$Ȩ!-7١ͲzO6x}Xb%QK<ݢ12Z%Q$Uz{y SA [߭|#,ГmmП#B`8f#7D vTӑxK5r0iZv6NSr<}i'K}K~jizvV|g+hW>KOX'jq}׺0W֏\g$ P}Yn:RWªed&s]MOO8(=IW*|{~E|pK5FTLhān-[qꋮ>+_|'/Dϱ)7n.M҂U*#}L!|4c(F"EJ.Tu $~s)nMݞMݢz/(v8 F(w95u R>A@UAX.Q|U-37E7K'2/h||F!3iI)5|Ug/B“qr!8տBP4a>Zc{N@) _igo,Z~Q|*ryK}H+bo}rQ$caxhhmnjd.>˞(0o|)PU(r00cRvI` < LK9H⠀鱿ґSGTod+Eﰊzŀ1dȫ}[֋M =,9I61KxX2+IBR5IQά֧)oVѢ"ͩ _ 4RNJ F.H{NL*, JcDz0 i 6`ƀ:?C3#J&ŷ|X&t581ɲjX1VwdȕGfx\nZ%*nA$ΡU'\KI\aBM(i1zG AVV%Ǘ,2_^3p"t͑*G" k cf=f|P) qP )D>YHρ*A ]`Ef pX(ԱK(ZE1*AJ #<ʏw8$M('%4M>Յ <H5#gXKS̵TTor$22GrP&=6Ό F142: LO]dCWGG&2)(۬D156:5298658?xdX^銍VeՈ_UāJ͡y(-!{D_.y;7xA%9g''49oҙjJ&Z'"jI+RJU.4wK#B%y4a>a&x!SvtSYMIpRG}%>YTf"pɬwPUb*J^} I0$s<17b2qޤ}[&2A3xdAdf:;IIZZ߆$CrψkGIeͥpy6G%SN hPx!>~q*.yH%8Q2cŘqp F#lZ?M i±z[y%'DB\CeRfёIJҩLztbjoR^LR`_NLtKaͱWF3{=4oZ4)[QGiS0RGSo   ]}·o;\ )l _;4rHf*b3a&/MW3Qva~yЛ~4⟇||8cB?N2-SET{TXs'&Aڅ ɓ z#4yG;qIF{ƟZ~ϑ1l\䆇>‘~Borr^(ӇzM0 ]Ch^ _x藉ЃFKaB ҄r)Ró0MÛ:~ܷ,/a v`p 0乂1NN~@$Sڋ@1%q LJ%j.+'M23x*]HV05702ij4A [mR!.0]U]"XH(?mY{c Aʍuߔz| ػ~߻ZkmkyUnkp%1y򫢂x2^G1$95.~I \voʠTNR9"]~Յ&8o3 t"ssX[w>H+yO/tse\CpH܇-r9t{kCTA[*]Aa |o#_TnW+35j߯0a2ZG\MitzɀC>o;1du>Z=*]%ߠL~. rץYwxlۻBQEȨb%FWPߴ3ukhD3"_b>` dy[땐)<'~xn|[+,9kN=9 > I4hDC D&iQPM?$w>MIA E<'qq-J\XwdWtf|ʈ'~ -g?/wq$#G5DLA[':~Yr[!Mro n)rCtXsv~Xy]K SB?C?.L)q l6J h5Hr/I6~ :PdExgZ%B! /-ETf,b)&X\jX%Ov6nt|0ʼ(󄖱$oָ&Qp16U)-ֆ%?ϲZgQLƔq]杺"^[[֏ LamAaԴpO .Rml iY<ƌtJljPs(FՙI ɀ T@O{}Qs?:we~;} )\~NUIU5ZS9?_MF}/34f4dH|~6%[^*H'Q/8'#'jKfu<7mt_ԩ9[qr9\/߭L>BםMr*BUU_'ZR.bϮ &9GDtd:]epY=lI?Ϙp ׿N3f߿JE&wC4"T_ mH&y۠.}NJ]2{MyCS?띈H > ZFg<9fa ,FJ-+\ԉ=6pﳪ-sP:]jVoY*)Q wVesOV?)ڐ` D?QRP ϔsAԵC,6AGC5ww@m;[Y"?QUEANBNw?$HS `,L1o db9 '^PI$B21k CuXYԫ~Q YƹdFq-7as[ ۨ&&-8m0=<=z.d Mtra-k 2{yPAvR .Uԋ%쫻f]!{vboFyPG62 ?bC:6~IӸtcۈIq8L/_MT|kEz"2kFs4c!Dh <^:ʴdڞlTs&D[:{?M_M@8G {B#toăY5|]szx6D;`?!4/ܹHty$O&Iyyo !!B,=2!2s!.V([kMz7>.Φ|GckT}!~Z*N(*p@ìY>'%i:ت CiMK*h/W8mT{*MIx?P%CBŏCONrM0 DxGBm x8tt WB{Z ?_M`^ac!7 /5ѩx,݃qMC4TIYu1|u'z1PI$ V(  PP%3G@38. ĉb$NlNd8ldl^Iۍ۾23?rnsV>|Y :Y| %Jl**|01T~ЬW#FZ)C1(dj`1B.KLqMU! .YwUmx>XzflgTzyrp JV#|1/h.0MU̕swJx')Tv$ 2חNM`Q`=nKZ}w&"Iq5fZB`.[[}/`.Nek֥0e|¹4˜ǰu6܋E؈ .LFm>eNY] -hl1g,돐ݘh z`Ke ;`[n :Ykmvl1Bu]Ec݄n_M{7<{TcZ\^trp=W5=~r`: lfj\ѽщD։щG'N,SnЍڻlPH},},/ 8_8]{\=Zqm$#4rϓDZ:z^6R!\>5`\)1zK4!lQP hbNVWv1PbV;f!E sX )ءc7{DSչ" zK;"/]%WMIVS肧.SdS6 .uBI!nZA,@z+y/툏qj%DZxʝR5:C-b6A0M=B[okؓiMO@+˺ h"u[1Ebc 1*VS./2^ƭSC_D`7z"9!/cMa!y 2NaVbPۖgнIQ?svoTQ9 D&|U eϠx>|X2kB"n5gݹBbsްտI'OHBnY$.K[FFR3uYk4-ifU=c4ӲZaN0pS$!#@kc!ί+y>D<ֆ}z![Ru8 eAӰ3[`u*o0VJN~5TB GUa5S߹TG~-ЯBu(pctU|6<% K@eR ાEɹBh5,cX+OY?-Wg6=Y& ЯZ{[f3 8\WrJV\ XbREjRrc'y/&W nQ*`>cnq 9\p4yU9<ΆST*W5tA{*Oc3|V73|{1L)}J .?`RR0j2saL}H#A0&5O.$yQFrVpsj~>ZUQNКPl"S"gGXwGܝZw*\6s~P/w[=OQ_\VN'T7rh\sQ2[㐻Cso6L^R$\sz csrN NY'bAAK3e[`Um*)IK:(U:uԿ;l:PӃ1u֑QK۫nqt(굿ϼo(m&n:ヘ=AͶ@#;PdimLrE)*n" ݨ]v;Sv{%ŊSE2PVapWIKxH=Pol;)H:,1< GQ=e|Du\e9p =jk^G҇T(ObGod8%$DiQc1no3<5}F^C^3/v>!EBYx3J4T)~}]pgEic-mQ{6/dѧtA KiY+^1עeo:.V/2 lMh *yL_8;byiy_ZCʄW˟.(@NgL%վS}\cϊxNg5~֗5 9w?  Hh_svN嗅Ƣ= zZz;xrYO:lb4dh*q99lՃw@X c'/q IK#!D4c86#8 xIo1xy;5.KM;x"߯# ֽ]Tjh:EU-|=@f~z1TLILǷ1홪dU8v hb-H`I֕K`Xy r[DDA p\T`2ЦpV8(z1T̴ix4U$i O= .YүaXqmpl5dQh%nQ(j/SYҮWO7#9؛ lo5_1ҧԒq ŸCsqWFQJs[p ]:j*u'MĀ0 Z9#8fKp_½ lI(oEoVMYg&2ӀRqo1aS[,B|0HZ&6GZ{ڰ_9.w`=Nth@Ml;l𯶖-Qw۔\^G"2>m?껤Z.M]WGZ/":}ż4{»3u1=d_?(5ݾWv(0{ =H^k+G'p11h{G_WlL;& $f[;0c7Aܹ$߂DO(L;\o"s}IB'!`GNd)QW=r[0EH.oyX7icMㄆPh0`|[I $~ KL]Z">8IkѐV[ L%! rРnG"qc:8;Ѿq"%}7-Sx|OXu#O[R7$Ur/cJf@BQ`Fg5o }OQGE5K] ,Y hAhwh5qɛ4bUV+1OGIʿh>Gqz??$prOhX ')m/'LxcE9=fz*Idt#FrI/mpY8F=N5j@Q|) 3ܐiUa(I1׫Ls05Aqr/Xu[DH~4lic᧾f)qƢ$/ l;Fve4jm;p1UXe*u[}pw6RtR-I 7/xAd<Ӝ*;N?FA kUa#miz;gM`:B̞T7u > }'vO:jKOز/:98Ce9.ԙn[v&.Z]%TBztΦ9ʰ.$w`l.rȷmE{h!|UXX3i3 ?4m?|A%{poF#0 ]pXI|љMBIe. vzl`P4b#7ٕ($rX 1)Mjn!k >0=,ƇQ٣l_)<[]Xlfm30c54Y^bK=otV۲'˜oEbY2_2Ϫfvp3FWI9s.N&& U.mБ*ń,;_'㬉)q+[)gF3iG럱Lf*ÆFgF'{49-$0X 9Gyܪnڜ0D: ]붕zZሪ]f^7#tZhBPl Ni}Vu{[te $Ԩm)mn.oBa`Х ;*g*ƣ/hwO>ꏽڱ?0wӽ -5EDl]("VAd{ "sDvF=Q~sf!C `~ˆζV_RNQLj@ Rz=ngzϣUFUr@:ZFs,5`7"qf>` S ̤*+%qTT`R "f UĒcƶ:X1@uehlEƬ6iu.}FdvU۳-d*3'؉5m +EVC-:Vq\C)V!ch }E>d!S]@Pfj;0)>gi&%*FUif~VcP+SL:e],IhNv0 ΂qTyJ.iZ7 JJr~2BR`Ӡ+ùQo=hX@YsgPlNEs:~HBd8^.=* S+W-n#/F(( ޘ7T١KxB\c%Bdef~d\fTA;Asd|dUM0_`oS^yz )DVd 슬Q1Tʹ+sihR=zg~T|Ym"Bڡ⼵!8Bo`NC,VVU[^I&`= 8U pg#%{1TlmGAu^ wQ,~,,DuI_oё3 d]:5gprmk2v'׎&s\;̵ɵ\{\{̵50J S<)6YCN7눓k\G\ ű:m;'8&kSӇuuaV7LySRmQqdnqBko:Ҡgp2$ġI%azcx k(ʸt<Y}xgtS|S6LyS^h"k`E{tC6'z Spnirq}IL%NDA,^wĔQEϯ_z"PJ-`e'-eIgԨeqH)1sZjbrO鳗׫Q/kPKe̛NU J} Za8CV؇9ۭఏXa9 Z5e&9}gg,X,0L]L|Y@Si8*5(+|vY{o}E~٢a8 ԗɑsʒ'z<=Ҫ<(SBWVխ IjkU?#%EM/e1>7۬8ˏ^'p.2.spHtE2F C&3 59%@F׳c FHO?vRo,™'fkȣˊT),Vdbvt4'h10Q0al##M>RI[U&P`\b*! ȾY[zJW+|z6lN@YB[%߀D7)/^sKYČ׹|ZUoO-.سWQH˦8 PlvQԉw;zSzk';ö~L(o(%W2 ~ʲuX+C& $L>ڌ$p2+VPlZoJ~^ȉ}PKXܩVfkâV@XmG0Φ66G>g l{Z;Vq]cT\I{ >,UԒ\B}Vo[p a"JURoۑ%tc}ߠ8oiZ/K*il첺P(_yVJHx뗀 \d#~ֲd&D)ttHߜ ӼIlj{><`qao;)1&iC? 7P#r'ʠe%6-JcMĈڠRL=mxODŽR`ʲ(h8Za4Y\zK?{2+\ ۬8'ر XCq{\xgl;m'UЄ%W;\qj\\ht$WJz:'WW\٩|R/SiVESsTp*QTgIײAKQ91ތ[Q<5 |uYgV~FWj8gk}ΗWJ:D54PыӳS.:nf+ VLNe.CG>' ;Sr`i|0QZ+ԉ:5ͅk!|.씀;.4QMC^sMIxAf(0@4SRYHeA)FXfVqD }6X\}U+BhV9,7_bǂl\RtKVnS^xVUd!Vj{Bg>?ߦ-aϷݝo > ެ!M+)ˌtU 2 nMlW!;THJT!2Aݬ&{CE9'[fc.}XrFtLwX?;O֥}Jo>!KhȫӱLd6I{3$Ó/><J{[<{c-/\{i,!|T11gt³Rّ UK D5guXV$9$PN=eJ4K[+`_ЭĹuKb -9̸_]zm'u:O6YW^㾱~7=bo/fY+W~\#U3ZśaEzX Hֻ 5(o 4K|gUu*/K h |>,h4mІ[(#؛׎ 'Ҩ15#-2E쥠(~3kA-Xa^/GA{No9;5AY y3: :ϕӁ$ud4 L~-}:xչO66T%`2* ݧEJ\/Vm.}&"Xb WP+3=kg<i|㡻\W`D4|Dž{4bBr}.Xyj%T$Q;ٲ`j8@7y`My F) |[Δlwе^;uKͧT61uӶ^P/ -V܋JV5'JZ4fA8:XPxv+|v=[ ѕZXe/%#t2:5k~"Qna8lZGOǁ`q9e}M+Ϫr25=w՟WU.C+:ic^ɗVtbQ#sH(1J=Z$$͕9B2%4Q(9BKR1/l3utC"ˀD1H!<¨\5`ț&;TSdt@a2K/T*wSPQ,]ƊbI#S.0i:.;LBd2EREG1P5U44j4)RdDd 'DA%E9dMŐg*kErI;&21;*emn4Q#dqC#j>"2lZ.`i[kz .N^2;HNxH$535;ɱ髣­ǵJ[;C#˭s+މRNҩ+r8r~>B"$>gn~Y:T%NxdYz-nIƉp1F-"#cXbK2ݖqyLj_KU wG 8+X˛*+~W |$ зTpɼ7JQǵq ](RU#M#&ѩČ]qu'bS`l)e ]JK׍C ZTD )v6:P\ͻ t꟣/LrDv̂BopA<^TFX"F4?A@~vi q Rы1,pklZT 4M=LzoyNamݭ7$Nzp( L~t3=q޴ynCBQGԳtZY#5ža#IԊkMZz2 Aܷ1d$QcƝX RfDθω:]f=d^m1ӪUN'=ܸ'3#nmN4O4S4mLKQMӼA]th>֘pfD<yL3ɞ=cȞ7#i>0:' x=!yQ8%6nnMVh/ ظtiƅ\ b6"BϫqNf*oW.Kf)?{Ӏ'7 O{U &#dc.Iݪ+44yťyELGL7vi5ͩSiN44ͫYto=zW]zW5"T:>|JD4qif1tc.M1As1挦y9i2sP ص{Mo'OewXfC6وtLņX`xEwG2/{"A ;Nm8mzm[WOYuW-.m~_?3TBiLNؼmm. ŜȎ[ vĽE iey~Su.(DN/6ޝ n^ԓFbc7\tP-¥Ԙs.%MAԘfɥY4D3y@y]6&ZLˍ)gP륺W.K{g񩦼TI-aRj%e%mv3]w=F.-Jx^x:˲!=73ytHI.GjȟCU >MĴ&k_yl#)1Z9rD #|"f6n}vMsw YޡӼ3P-TpIqHw,n uӽ%||~jτS5e5)4׻\~{Ṿrq߫gJ/JɈY뤽/b~K>w|osL4 'HRUAd_i#~ ꑽ~0"~j dkA#d?RwhA"~W=ߩ~4"~ُj dُkA{#~o=ߣ~_ ~&x%pH{҅Lo?p\?i^4mG2lki3CG|!ˡJw׬wÂog gg5ҺO4ޏ'#hxcti֭'L~` ^7鏛2rM&)#uPl-炝^N&w?ѷnܷ?5}|Sg"L>Mg"z?1"?g>WT_hg7ܦ}VW#hRc%M#hJcMW#hZc5M#hFctKMoYivcɥۚD4ǥE\c4?ߘ4?i[Ccl /lg\l4Ǻ5jgBYۛ7KHV޺ BS dS]B;?7πBd,/FX @8+d\(fОj׳WUYUY7ʏ8MLd);Y>q%oRg7j0.+|~E)Sn 2dA<˞åBxY=>(뼶WTy_j2&lePFkjet,G[5g 2@{yʖ ~g&dO;0JK<\56`TBRLyV:kW( N%DA㎊\iY!SWJZMvU)1;S'g7NwcEﺌM,C;uGV,u%d,+3ry7b#Z&w{$${0})$zr`*nҚIل}Z3nRGqU_gZ#OigA'm,9%9mE[L3rJ;|*WHW5-``;wCX4B^vM7}w=rM_Sܞ/| vMT0LABEhۿ[MhoWܾeNoxy/틺1wNܡ:q(! lQ{#n74AxN ?b:ꐓXD긕*aSa:ASN"RIu2"ՒTNSv:ǚn#읧1 ><<ǼaR%5[u,co |yπ=±(^|&q7&5%:sUvU6j3l(y GOZp 8>ƍ!W.܋+4FMhMPʪr){[^S*6U),OX lQS)!- QY/U*KL9vmLQ*ܺJ7 ᩭfuYJ \-[⺨ Q, \^޾LW-/0Ԫ;U__Wk`L)fH 59n%U9㩹;) ͤ[ybaDS ]I6A b&ޭJRNkl5 !Oԭ0f 䶞к޽+ʜp2BV ok{A_cKTJ}:O=Mb |DC)i"(q <ڌqH`zQxX}mt6hm,H/9r5*>ڜ&4 KҮ=X4h o~TRrXP6jc8 -k%5=4i3 U' DAʲM؋hO(xUBv^ީﲭ %kmdm"ŋ>SnU] LVU4~A|o'=6%PLk4LơqSqKR; yGi?d9Ai~;9BIZ]R, 8t=o=\˻|W=njIk^HU]GNO\~`_Y!CXҫng|H{2Mv=@oaDraa#ؔlrKiX?};L)GpzOi93A,)+_g7Jxy|AEo  6` IlKM 7(]&z~daXeis<14: ՛m7=&%AKy25ى*,7\rgxdo'un's(VZsŪsPJ`'% Y*k,\>UZ)SJj/XnH^nyyb~1[00(HyzF5 tm=b:zꙞ'6{&tskRe/NfS[e/`1[ԑٶ1puf@]eYțܬ^trJr.U׳[ oSj SUDH]Ζrż D M? זRUp;OqŐJ.TR.&L>G̀ЪbR21PITɿRBc){b(jP2D@Olq~({{ /A 7a5Ҝ/:_]!asbRiЦ9ϼGtN vcUL],HnlV 0(Z/ݍXR,)fZKCfC&@ycsJ H(@4H+*u.)NY~GF؀!dUFD?~vT*T;VnrɖU[H3NA S` Wd t-Q3&.i; hk7*}.A7>  19q=XȄA9V$;T_#320^ǯ2O Nd*H3ӌd~P-ҥ C<8|@iZYנ\4Nvjˏ\1)!c=2zگJ88KUhާgB;TzNiE6|8 #iZ^}C`j^ }eyHRhB]\TŎ)\;xa q_^3)r\d'db].$іDr=J \G\q[y'li66F׿g֖q1u/%MVVD;(`JbBG:r#|?PrI8w,X%υۈ=I :XI-MX(L*[lg?]XUE=k5f`ݝg 7Al&g[mҀ/H~n)/;l /QR7w*>~ ;Pp/GCA ]7X.%!χ X9v%23eG s岼\Tyjm- +%3,(,@& |S'^X9v)%!9‚x$^PS2$&]bY DTdBA)@~8%RٚWeC͎ZI{K wJ"!Ă(Ӏp/pl.]X-/$ݏ_fqL<*nĐȋ1q c QzHoc1NW˜}%&uK5-OkkQWxWGb[`f咺^7vx,D'P7|9\ -ꀏja t7A1!*=0M9L!4"p$68[۰ƝRf6%&Z ~G(Ta?Mgװ&3v|n{!$k+`O!!:r@␃:$/,g6Bmkt"?2@H@6:H|tI/R#jqV?j|NNrۡ .ÿNxSVL{%ydt}1cVmuBi4ÌqvHƭvzԙ0oϱ`,əcN-Ǚ =)E|]_*M:j0bT=;s}I&l>lK(@&7n fH*?> CHFaYaS9u>f5 i6t5'1 t97.Nw@!N86CmC;KGb*fŬ<6eqD?rFx&A#|> 4q>|<QϫS]:0!GxW}'c"f>&b}P""&*ݍNq4E`lQ[V,1$ǚɨ}R&2KYuH"[V(EO07v'&[Q^=r6i*E*$EIf}2XM aea l|Rw`bcgmIN]ۈ^W> ,HV#'rA}l-b[͑m]70o )>%e21T:kP-㋕xZ*N5z>+õV^UyQ-_b5Ġ7}DLse?WD!GL1H*2Z+\I3'OS*(kD$FȬpNUdKq&PX/c78 ;|ͺ![G4u߲ըzzD<5XuY[ͻVj;--ҏ [N|Ep{0VDJ_6WQk)~$)~uڈ&Wi˶!-rwp ųGc0.:ٗv"G_M4*h0/$sR%)W E  2h)G'HTkZa>%LO=S`H][jM6ocBiB$@JYneԢʭ@"Y,/W_$oEȞJkO婯SbNo.8eŒWJ7JmfM_ۦسi糿eLxZvln'Y[!2L[ߎM!:Q@Xݙ:`0I2R#@AuH&vl;nYKXrT h_I"IT~ՑMCt@ 8".yD2"& qb+/Lk3*mWUZηDT?.X 0]N۞ҤG:5rF7&ZQeKx[u#=2Rh38FZA-Ū R A~Wo{{zxd+KRa|dyqhʜ]/e3L2! +Y$/Ԝes:Fw."P^;Vkʥj/V?k9@b_΂.3(u o}h/U(D:|-•Hz YL8-*^5-Rʷg{dc|M >0ZM24m%MmU۩̶%L>zRk72E#d`㴛Ao EWzV(Gs8\׳6W06Z}mw`O[M Ǒ^8?ۢђ xsl&c[@+ej$Z b*Q,FLFS_OJ/N\KOOLS2)`}Rhjw$mWsX""<ȟ4ln zRx{CFrTbi('3%1a~tD6"M7?π'H\am_aiR1 ,隷X_1y7Ǹ=]K=&UxS/$+t'0_ѫtj Ǽ>X>b^ݍ1o=@+ Xƴm/MT!Xh/w"ۜ14^y=&(E>F}Q'rQDۼUK;@3 ^`ut8b$ 'P ՁD町gs3"&jEY.djbpd}&9G5_nkHl\hG=霶jǁ4w ;Ӂ^xulYE"k}/pfkOy6D5a-zA∊L/j9VLu3+9TgHk+8>@oA~6B) ⬒3]'kUx\{ Nv=EH|J 7Jgf-FVx5y6n%-u45^A`H7C$ZXGΚ!(5$$ I8!\k:w cg.x*P f,vE0,[H[ޙu#N4әj~o9IN`ex/|rGs)JuD`z>eqZ= $12!iVQx﫶M'Һ1ncx?f#v TW HZx`ڄIf { }M!pU!@m 3㋱qࣄ4\59D3L&sd\mS?woFJ$˕EVղg9v6@Y7FCq- ^dېNQ'*Q?pp≶qK-hF' Ġӊ=f*vy$QI8,[[l̞ޣkMB:L ըA.Sݸw'qw uNN_F .NW3[jtik,f࿴NCBXgҙ+՛{_&KE`Wu}Uuݗljau^VHXWWv+Qȉ$}[H=KLNW:u.(] QwE.et>362W7Du%ET}a  rk($vn[v;es"Mv{OʫL+ ﻽4hzF4nou[U2v}ILv(^+HT: *t趲v萭Gn_|įMڴ*xP(T+y^r~,3{53viY1+Aʩ/1,&QQ7 .Lg2.LelUpT(;Í }=ZeeVoleGiɮM֭u멛4;KC3A1C\,ċBI?)x5EPuZ2eUJ>JƾO.hEx҄0Og+اZUQP={3K?aI"^Ml0+ /sE-_o,5T䷴qvTq/M^DD">/R 3 K B4ar3p=:/b xSdl]RXaS44 ZM.c^&bS}MK^XӺe'*]Ynq#'b #NIE' .HjyFl=^*mPSB}86qR:5[ǵ&>-!y6V E˲Ϸ4ht>lm$彰2bMhjwoƙj6|Rb6gJ le]v^$VA~bo0%:\ebQ%+H΂Fx {VmTFNCF@/w7fڝ:CNU`>pc6"G_HfXYmr94- h]~B;r40qG(ۙgpx zMӣgkT^؛U $Izc=ѝ +˄o5 ɦx'+mv'.O[[ea^:nIy YcLtC. k؎fa@D&كORnٽk RG2M MqVp X:1x }耜DhHds w}N5NM8R+eUi heGۍe0úJ1Wʛn8Jg~c=LCc"y%rr->eWݷa}=A΃Op,u/e{2޻]Gxr}&řF]%8vx^&-fb_~ۈuztzT{'_KFuF;)lY1oC"nIc`06DDk im}>**fbK`ުm[a;&'øl C#L HB ~^iTSc8E*X5byTXJ?4Jê@o^duvL+> 60B J1L1ރjGlUޡN{K n1Gڬ5b޺R6^2w\r1,gdzևclHF*f߮mX6 P-&uBzk8ch'>a0WͨP٤:W>%,]$Ilc=|\a @~ާ ba{ w[2ϭ(\$n ^M__tt\#>O+my.;(mx.u#@G(742-N<¤-/0T2i$$l:Ce„F-'DSDsn$)B\#UUn, <Zqf!/OJ7 1d&9*/u]͛Shz+Ur-'cV4BPPܵؠx>Pxl X!Vc~V owloe >Z2R) Εb7";@Vb_d,j *+Yܕb5ij.?zZSr@/ȺTeX \Vc66Mߩ!йϝ; Aү{T5Qo "wKZ+ '?c(a7maw*T3þyPQ/Ƞw3̇ 4`'M8g:QKvֱفS `gE]87T ve@콾I٧$r ѱd_ w !O"jQ~Pp-M|$Õ8LG1x^z'H=Zêܓ="GBiViLkqNwR,3iPxVϡsBi$lځ %[reGݴ'}[rmrƘX>VsmtC׭nn+1]Mf2[% $Ox\FP=:&PFY/k3솄5$t@4\$vq;3׺hm]tIyMf頓@,hF*>IUlS]ZXcШؔMaR7ni82i=Qgq%lWuige mv*4lWêaagp"OdieWcq.d,FX3L f}.!ׅmr ~_sN碊<3|RsQ<o3G\uh[L86A^nϑSMx.FqgF'~Ǝu{QXpw NȕxGH|vW"U}"q :N^IW` >yDQowgNjߤ[";I*#'ely8$0 Qko$BՐXI5?zA1x8%ɟHn-*N!\jf_ľ"fq "XHZxjOmOg=o_'A%OٞlaX(ie\DG:r[Ƴ?-NPq鑀<u3qUȔ>kl ٴ1ƯMk0/2Jo[zl=ol|Mˎ?7Gk~睡_q&MMq[.]V?zo9M*oQ7Sryy&KvqVe ;bP_0~ɣI_-:+5O ^,X$2ceu&TVYɶ߲\;!:L,Tǖ屨OTTv1j*Jw>&i^k ,V{E.ik@ZH[S*,UXtvG`!Z_'z׫Rl#+gw\-K.Km6c|#e#YQŐwieY\=Qhuwo ԞZMB$!NMx>7e(\:&ںzq:,L[: =Zl@a{70fn92F@Z )AiM$/3%~@لZh4SOn]~' 1:NW!][4]_ | Dy:̀$-!CfkFtwW^N].5֫آ'n_>N2J7an(EyZONS*Bo(W4KlW࿻UQ0 * ڣٚ4w*{D ۯN b73t7Q-yٕl)Z.dh-FJ4(Vdj[0%Tˠq_amɛ.&/fK7*|\,^Q.SUߥ( VX5$L5 K z'}Dw9Bkiw>%FlOfe\1B~tk.*2$]mykH'N`rD Y!|f6vڞiH*ǧ|wh@}Ľ歨%MzJy[2}Mu7ońv# 2dpcǵt,/I8 <ݩonb73lnӤ3qwaMLi/v4O;|g6GrcX4g[-\0^hxUJcV.W@2iڳ9mx:?ԏ}MTM.Z /lF;2"=xFPsj b moa$o#ܭ]_YMQրwwM_K9/$j`gzDN܄Mj6jgU@<$-j(ܨRHsI(x攠%E'")?j%ċZP<2pʠyE+ .Cӭl%d,TQKYɃkg+[خwyr>J Q:*n$,?;\T^&]gg1GY :L4l5Іct.#jn8eman~X\hT@)0dsb!@Hc~rhplvfy 1:|ݭ̑x`]o/+@@1fAy د;j4j$)n7! 3hWpA V7mچ j*kkxMJ5:TGM (:n-۝)Z] X؜M̥>N @ +X9%RNhaIS)N]Xܱ36:IvL?j.@Y֞֯^S/TsgLA!6rg1/-%wdè-Q]."i**tH,GFHkp]Fs'K;x^fN&vća`d?З]:ZCȑ&3_z_ٗ !xvG&D=P'ݻCӀ3^S1ryA5&}QYl4@`C54 vpe8J"M׺"_!O8D(wo̥<6Dq`h Պ:" r O@?i|6OI5񞎠[/S }E?Lޠ&" ٝ{0++賢;%Vzˁ z"J# `m2ݠ`/aW3{a`M"TDCd^:AvQ<ؼ>k$z]k+.:m ʼn ~nj ՄQh@% _i_+++U3SגUPTjޡB=3dU@;4 @*55 O uw!m7ؙ)jY? J'< ndHaG[=,~K&*K&]ቅ47 Ui܏@2*lX,tBRfQ Ccm~r쎂GcAEB 9]*"6WqQow8;v02F-j8ЃA`D^,`]#)x0|l "8s$b' tR@A@G<[kv'H$ m8 $/) 0vG.:~_<4P4Zh0$9Qn5;?,},BZq\UBA-`?`C=AWK =yDe FĴUͮRjJeͦgml& Ӛ Óя^yv::Zۚ;"VZ_Ft!: S.^ֈPl!/%sBnafa񰹸Yy;z1Еj+7ZP?YT`]^JvEE]jqeinݚ@J`B?B KH#dϚ)j+ij#d={\!2?^͍c ȟ dWc p`|@0v;CNƞ^HW%X& ]fp>=8.1'|A߉Y2G/))InO+`2ΐ M'CzE"ye v`%-.<)"'A JZ&ur .p_Z[Tlw,H L )Bnbv{n7@W>#'A2hy01ɀڃ\(є PShNze&& ;bTsqg cFx0KhiRp(-a]xHɠ(AF;樧DiEm]XBk.Z`LnP2t # u2q!8PsBC)BhPZ9!Lm~/#7"Ʌ~H%'| 2\XIn0vakt͚|&MS#뗑`-RN9$9<:" 4)$ZBm@$D 4임+Gќ3 EBtȺoϣGwGJ'!^PWI6 w(.Rػ4:mw,`)#S+G2qr3Vvfwx[h–nn w?aapb#Σп{)By`4vCMc"y'nhV/+1أBKÂ-3Q;ݱBF 1\ő]1A!Ih7${ 0dsh:CvнMNwj&E;Bx0T`PlbGUW;ZԠEulx׆X{} ! }M\9ʉpOn\XFnMVgFjղ ev'I"Ay^"/_pe0['-VWw?Qv}6+hqΝw0O/Q^T6;BLJ-aA н]B { WeA&h9͹Je2BC8XGvYHRX|G&C v(԰tƲi,U6CO]xr*\bNRwSE \Oދl^qGxTsr؋4!n(+hvGCQS^r_Yf}K~m{( !gNWc~]eE޲GE.YPdKlRB0"P5hn}cq/Q9|(RV^s]R> ]Cem+z\=֎T7+%,287a}ətjSx+Klj'v/ٜH_Ȳ ~)U(キk_)|K B@gq,BRK@RZJ,P-}9@7]¤u1IMWf*L`zLDg=@y2馄sùͲCOn(Q`_*'~  ׷GvSp<ں#xz!9hBEǶU6~~Ǩ=^7fȤ] `X ΰ{2TaN0)DzT՞aJX_L9 wRp֏K$!%r]"1{J6ꎊ!Db1$J^ H7_N0ц*pzb_s'qgtFҘDsVn+2[O뱽" il(j|?@iֿsEGJ[ݴIo)I8AyȥSD:fO(m`аn!l!INV7\y͞jH_$P(YSOS:͒Ĝsjt\;ْchpB.o;,JB*{KT7T!wM!D*OF8pUwW\X#CjcV3}{JD Y* /\r<\ޅu3 –m@d H`쵠rgϞ%100hST2c-ӟ xT~Q]ƍW;UUBu&gb? ^Hwi!qOi I) | vypN! ED_Zp K4`W@-"d=Z+c3mЉHV7_4kN,'JR9ûTVz{y.61M%嶛x6t nЅQyVq7WM)t ˛eggORy{7بb>+@p6}XT1O)|J'bR 0K7\bȁ̷ LCPv_/*/ؽc``b&vE~mO޽W:zz@U55̀^^]t$=QV)4./d{{iiɑ9Sԫƻ vm\t,a>)_8sDv[.LX>DF~ d {Oe9YrZG xsXJZi9; }6=g4lgޞyyAB'_K&vӇ>l cod_ qNd *ҁf͉,ugZ~Ɣsy<-뇾eÆ6prE*6C o4.-E {)ܤW%WZ'* q(RZ8OG|F Yŏd3O\:m;5znaa.aC?8zb@]1 >b9 I щ; >b B ĊLP-]hOfOp1 D;0ω./? )I>U@S;*~p@T*B h  SuTM>" cPE ܏Nf }REA ]iCHA)p?J8U 7lAA-i`Q[) 0 U_`ҫf Oj);2J5!}GF/: y}RM D߀S74Lނ@01*M-8Zq_U B: `He:`hd O1z;=p+3LP{TE9t'wA@D*?m*}>idB@ # 2#xae}hJߝw`DA}wcT BV jw0 +0BO蟒Wl`A`.L8;jv`wc-@+'A0C_@1pG&|;'`10b8W! #rAX>RNGW𻈄9YGvWЀ91z%'p;^^khZ$C8yq 0ڐ ~>Uf_#ԔV~}h464pAhcfhwj.7]-lE^g#Xi-0/N%M 7m\Ӹ1`sOQSX> PYW{7w`¤:v$F o<9u2f~'LYz &6\f+jIlsOA:uE~;6%>z?h&bt@8 8nt 9q 9 rv'Cy^vH2C v @-111J\j2v_MH9b2+ђ 僚ސf K": zBPb fŃT."0%  v;ٝ"ss'%|y}!CRm^+84b5Mr gsS!35o$ǏC/5Cy p@2 ē{3\vqo1A<Dȋ1]y `a w47L}N|{F> B~=#?\OH8!Qio'[G^ Qc0i 0Bg| lT) B! ˥6\B%4Y=~@\_@8d 7>k N5j([)9~AcD\5|0}pd+7 6>]%X f?Nm _h\I.bZ^@/۞Ol~`fhmxB!ښ])) E,]LՇb6R 0`M.E^- "jF0M+Xx(EZ#/L >i±mm { B#{xЗhi8m;_oٮkŧ{+|񜃓lf|n1 $IQx"^]6r|]W^eG!Z/x秆N)V7~OB#Pt %H؊M7Ƃ?f$OH_P'ZI+<7 Vb!}zji:lxZCYY r\>dp%U-m<*.`Jz,;InjypX^7BD_|*"豏'q9 ]2'_sLM<|j{>9qF]88¤ |t~Ԕt8$WJAW~|tw!R"4fVƫOYzΞT\h[ rs5>+ͭ@֏mڍ J 4|̊ \x9DN /YK6\H7o멘~xT^/_>똋[DkRL-Բݚ?wA8ՏŽpwM^[bgmh, sɶG]DZx:s#ƕzi=ofDieS/K9Ǐ_9C5Hl[\0hݷB=ϵˋ  ~)dLtWgHi|UkZK` Q:zg\bg9!^R#qOH#q>w#_䙰\6QICɼ#2Bg=`җUÏZldɐǤWa5Y,CP xn}ZEaĘRfhZw^jЕBcuQhp\~.Rﰾ{E7:~#[WKo7gJuAFYkvqBw5W?q]tƿjqSeSbx̘Bˠ%JΔ<1qr9>s8xh;㰭>֗VNh 8D;seBmN/ߟTSâ 9]wJ燍Gn3\Sn>.4/||w0(zB>@ԃ/ӯE?'c/+xt\|n4h c ߸.,;}i78zŸH Y[ 4].q|VQ2/4xrG$hXCdlJW﹛gxu~vvNk~Ǟ_Lq9 b|3aά+6~:BRz bL ȼ"*ny'`&ʥ#XO;c|R ]bgOꀏaw uG) τ61pyj"Z7CGY$Ωkhy|Oנs:j8mb` ؙdlļG,&qԞi:UPA{.Dˁ' C}IE)ܿ@nU#O @FLۍ۽"bXE }f^<~4Xٱxdi[%M*|J8Ѱ{:Z~zÖt0,v]P>4Mc xxzv2k4{+nl_GF?-ખOqGPr־q&K7l.g㬟d+ ׭n90]!AlBѢ'@Z˦8 )KR# @Y .ZY*ͼI07g~qB]^n">=}Qrә狜Z[χ\_)Ƞ94,,P>%>smʈĤg\Ne,:j Dxa$Hwއ'-$)w4>vs9,NR7@aGLvk<\kco6t) džx-d,s;~jzķ,mN{wc}RW"|V iﰾ9}ueujŜ>iwXa+S& 1L ~}5~G3|AŔ-YP@֪dނ͢v;UBLeoYo|޷oD\bv6#Ip=2Qċ_Z Ydxy }_:<&89hy3}9Ƭ:QɅoGgTFrqN=}>+/J Aƈ{e62 J>6alTsW+BJⲹ qVs&OTB?" i?ĊrBM*jzH~fc~AyÑ㙹#Ls7@6][oT&U#}Yrʛb)`ڍq4*C'6;7mZ%\RlC޽u\ea/ߢTNӖՓ[̦i{6y;,![Uf}!/3ϜV] & q Uo)rx p5e+7 /nhIV9x^uЖ}o[Cyg:Yx÷@tOV9cr-pP9B1{̖swK/@ 4KtěG&}~Eo܊X%n5lIJ */S[5du_of$l[6X44K^?+6Qjb7kqhxaܪX]/W%'wfP^CNd4Su|%囓 f&C_ <g-j ` EatEXN{;u<";EWD7Fg(xpJ}kh֍xR9 K{R1TEfdUEVÔ#X5d6]9W a1} Z iK YbCZߐNV- 5aL:I~4ks/j~հIt7w,Zt=1sMQirOKaF%Z㠲:Y4FN3ٝX>6ѩtBHByݓF",+ݼ5j)D8nmy2,9Uj>xJHaGxD$f#oHU@{;,kyd+#RK'i_, |=o2i2ni<z!9%xU c)\)tO:NA6w;;Uӝ2X(c3:s~wgU,g2F9/hlXO ~>095k{R#3 ŋ%9=v%)%;³ꯦṋujlME뉐H:ԋ8S[~w; iMN6QkWOlVf o 綃qrMe鸐'"(fIȉvP* g|O8*$՝WM*sC-ŗ 48dnDY0z(~KϞrc]%\omzJ _T* Hȍ i4gow5wO4x0^tWAwCkjLe5@o.0g%6M?OwvRI\9sGatbDPd9SvDLWo7V7Y- 5ShE]UQOg&逎&qQh՛eT"<3ޟw,\oJ^&:'9{JnHӢ+[|.˹ʦDdQf Zv{I[ ,rm[6(~͙c=.,2JrAz71'Tٯ[G)1K$k)"+۷Z9wCVINd>vc5~叔JZZ";n`uK&13ԑj0kFu z>,;}ՇLU.¹)6~HUKuFw]8a_ .zVT-̀_U¡RLMv֋J#DysN,wk}m: wOG(qo7;3ms ךe@rfꇿ܌1,/pjf" kڈ?1!Q6U:]" r srͥNb UI< Y(_,s^R/}l< 6jI_\VJ啕a Q|b\9*n1IC8xNqJ^R"B^u{I/d?bdX}Iߔ]vƝŽm53芏Oq$:,4o)lZ1EƤ$F,H:۟;8)ԙ([`VlH7R).pum-+hڇZQ4)~LF"BK;^X~)FP!d%!#&{h4p m][9? /.<_x^28&ׂajr'.|POgNEΪ̳1smY~7QPzGO6-Ows5ɛ%P|;h#_)i{hE2v!~iYEMy#Jnüy!܎M}yBeK)װ\6:.]ao X:>s+<_wQQAEPKD@s@@AS:enI:ez{y}>y::qop_ח&("p |yJ)0]Sc~ dḦ6&iϛ[{5 M#Jlafz&hќSbSCO -Yb`cI :mf0Qg$ݫFV+~/@?~dEw.t~AjWZBޮ&|lY_j2&E )L]2jqުOM ӽU]ґv=5y]l]XF5 Y[q8*#R7#0 ~ ?4;.=ϯs}_U-TPqGS;6Mʻp m\w5!t-l@\ )vBW[[u>|L}r7O3dŞ) c2zyRm$3جSɨ69D<*'A+ ~/ =K 0ó?wO}w}̄䙨&Jful*g MAo߼p\'A):x35%,/t|LeimmMToqv{Q~XJhLM^ Ҫ^A`~xP?="Uf7MT< [WC(bW4gmgLT׆Pne`PdTdktx7 *Ӽ'NIkFπBN>.\teS#h\u~J+5e^5GֺKX_KxY71'zH@'J_R>$["HY\åf+ӿb쎪{q c 2Z'fIũҸ/0IX :MnCFzd o*,iVܬE?K:6҂d<žR}=R.5z1:8llp{0`o3Ʌejl[},HGo)Cs.U5hsns'gj9oEY[H KzXwLž&&CߦLn`iD~, /c'^"tZiQ-JAgYQQHsۿ; hU1=6LHMH;IIxrGu>t JD m_yّ76uNVJzgtms/><4ĢK[Ua.%q7N9Ŭ~^JުM> !y2.r? ?ĵtnuޫb{}%?co2ϏKhphcanA(΀*["H+3m|/+(KΨ{n gK:g]7S}pC;wٞrHxNslJX0".qPetu }seCkŻ ⣝KIʨYH:3뢫͘kpm=f !M 9*K7k0EcN8@ƹ/+O ѮCi:fN?m(f/ \9 L-\BTzRw& VF$.r؉L&/ҿdg5>Xf'ԝvFO "_U<5Ȭ;CՆ_~Bcj=lMpVC=ݽ%UW9{<)7ez@}N[]ΐUXqQ. *џ{Y^ydzdHAd13R>NQo 8Nhh9i`YL{-ZGMssJvwF0D*le>B&-:5[>syz^nc{x/?Fv`0iS{ovydo:\W;r+ ,y6;L>Xǔ1-3!JBx;gpFfV^~&JP(C(>+jDQ_I_; 4,m)o96Zp pE"YYBM5IZ)VJc;˺pX2!BmmJP^~{PӑEߣ;kj)u,'򎿋{ziw)}sC9!RR2;EUޫHVpa;)M]HtgSO>o@;"%p>eKP3Ta~ƹ+C?/?g/K첖a-K>;[_e2-ϹO7[WP]L| 7YC/[^xlDgZ\H: cwjo!ݲdÊɦ2DJ0/!2x 8O?^aAk̔0Tm(v f{=rmz|yp.6GIx+7˽~*{V҃ݣvgkf34`NZ?HnkCƸݜdul$3<3_hq Jȓnϻ[<%s^f. ܝ|VJ \LO1U7і;^Md)Tq|ߠ3n8%9-pzRGs')[`j@fRԑdKBl_vk}<8lTɏ"NߔKN6yE%v;CI+٣8_ jV2'1g1zMC}8"+}a3J(1voKC +0+b\Ɗ ?>=/o:OV 3;dI~g8V/+N-?›dUSieK(ϸju;oh.>#BLT&C#.Ky<'2)Vc_VHهcw;1';[M1Fq-Tg"`iu\4 2B<hѫI'3>1tP~O& x?WJ۴مv?yq>h\2Y~'aOv 1IG[Wzs*r+]vT>r<L 8\ust=ړ]od'L6 D6tOYDAB#3nZ/k:&{[~0uPVXA.pO= QzM4,X#W:GyB@ P%W_>݀CxݙssM:}\mJ30cjx0ÔQXrʱ~fp >ǁzutw3Ĭ *xX ,[m T|#K i^&K)#͠ߺڶsh_y\jń׸c=$>\ư&eUirX/< ArW$ lO7ay)N[r[_%E ]IR!8\۷;&>yבk3z fO|ŝ_f_র |&{Sl;%Bgpwuk Y;§J!v_نH6&]s?i7!/U?+LG>f(tj-5!jAZ46HjAxrgc֐=)3Fi\5m&Hf+Ssqו0^>;ذ`ilUrl6fRbaKjᓟC^7S? =R>œ~ <(kkkH-6eg ntZ\;C~xZ8.܃:Z5U=GH4`=\ vne]#DZjDvX6^_'xa|@& UUb{>|$,nKEG+GqJ1vԇSg¶q\0kNG,jϴO=%=df~(ci?{A4Q?[%3aGm] 3Vs1LתHz#L q#fphN]|` {%#+9Pc *&chAe37>ȟ8~irLgp+?իCUZ{/Ow/3*I;aILsߴe8V ͨkU9{zQgǕPޤ"ėܫv5boluP|_Y=<m'Sr(k-{k+ՙE$%GIϦT+ܚ8Y)򲟹*A|xT9^] s18E~zIsW&nhθq z٣SV -g){S8뚝 cx瑣U{)])\U 56p=22g%5#Y.&c)qt޾{gsݞӕ 3+=Ls{_j4oLub=9KAC 3up݅m+)ww/ ypFOp%b3;ç%t:#p ҩiZGY^U{+ ]MD +h\dRXhG|̜j[j zʯ: T٨ }Bʢ͹=%Xܕ[ unbAOWaRE)¯ ,nՠmK*1}9f'Љ}OukqgO\~D4f̪n`r8헞rW6x&o\} b1}Q 0^݁MDUŒڙE,SA% xBsᖺXc UaDlrmI݊u4iA(+M'턊]8zҷ?f%wH]ܷ}E)C\VRov2ҧsbQ]eiRO4V1iBlWUHj:g>[MJ#zCPnx&҈OcMkzfҟ#j/O,b6-(jZ/5A6x;ɰKnއsղ$4c/omBVS>\c̸,U@xPz9 _~1lkw_lV/|/y wY35Jz t;KWlcjTt0&K ^#I4ƞ8_m6]gCƙrԶ W)"'@g/Yyvi>ONs!\+Il&=ڥ~?>a:[ڽEB#8X[A:z/P4x1:[dRnD==^?]UmrW7|uVpN5OW.3yLܞ:Co]myxo|^nNի?9f Nnq$d43h 2%<3֓b\ⰾa/rFsWh$nfN'uBȑ 8qi1?BT{ʭ5{>AW' k3Ř䓓-[eԞXoYrJ3N^;_Y XMߩTluר:3ƙ6$4X83fj3zqN2&%]a7;'>%kM%|c+=bg-|-ezzbpRov#<+Z%Nqi٣q84l5WǿwiD9uvUrjŜczWHLWH2F%w]bioYgELxGd_@sw4IMY&83+q,8CBL2O,m LsT +λ,=ȊVTn{K%BI~wy)P&Ff'S.q[ѾMu(eۡvmO}߮VLR.7~xjӏ6zB޳JjWޅ뵶m^xd. ^Q4{_ajA\S__1=N(:&㻪&@GAbyqn-[zhi/mul0\E^E0NQ. gTՊIԘ '٭z6m6E>dnƔ1RTxM|)u"45qנsy:|-せAcJXI(,\XļKfk}9sveвvexDBv ŴUx`KtoP3YA1MgP7gEE;8Av뚒6T`VMsF]++ڌ;Z"Z:Y}+TuwCGF/ mpYt.k7;t, VjrDֻ\|Y7^i-lelt  CyHoI&`|Ʒ63}pvz@Bs0|I;ڂlk߰&Q?l@ O ]gN\U.q΄sNt4AGx>էGK𙊞@!NssD jxHg@Օoyݪ6yWQ*N?A:?c۽ݽA).\'z}}`ϬdX2f Q\eO鎼wI+k*&|m5y3v椦ʊtTuH;7bCgRo",&5[cg8hn1!"J,{ d[]ݤh?z,R&i_#VsGhI{QyC?nTp$<%Ie ˬ5hWb;~7 ܷahvbq@8d y# 8[wg87:Vusc)ˢ*ޡN*1MY{1>ʝM/ HҌ?Z3sB͊"8?_֪DwMU7x³!:wAu΁tͩivcB3ޖ,_{Zkw0t`iNgT.xO2s;Q0nU& ٧E} 7KO(=7 u*Wŵh6D`)a&{SY̯s%M9We%xTG@r|dKvn2ҙ{(utt&,nTml޾sK3Bں,kTCn!Cxؔ>Lvٕ/*0(浸q= ˌ9)n}Rw@6K4k7wk͊׷a;4{;[!-Zz,Ԝ 䘈,uQB`/ QPCS21hyk&H+JDȃ?IּoI? [.J~>;e;TÇa;6ƒl=r9&kʲe´RlLtTNL'=^|ȗধG&[.3:4/6(š<<0,as:?*ʊ\>j:Qfκ1ED /-1??CnfD,~O9x7&/~ikK>[UX>g#|M]Q/r+|:<*]pa^'#LرT6Q_{gi=.S?ee{1 3=HlxMZ6rgr\w9x-)5~p>aw@"# fL.ϽMUL-PVOL""26~u[}a(9r/*7ıQ^:+/cLWPB׈zAVgB`lUKB|@c<]~Ց2>ps! (:r⃙~c{EV\Y d"v3wv͹({ 7D;޹!A(5dFLQMd]3pnn&6#gt.i iwgѺ}^(k*Q *d$ MlE#$HjZʘ6:QF訥WE7AiP)ђQԼcfs{%{I` L{6(ڱۧTnL='ycR>;q"u~q#k+HV7Vw;+]w.mZsI tEb}* dil^>L[7x/;u btR Kģnv^`![O0>r)oB{ש[J5xSk&lc!0']b %Ow PX=3&4xaXv?.xNg^OOkl2~P<$0P۳;4GkѬm"+p4 W)<ΰr-Gire7k)Ш/y6/5̏[a6 $I7tZ0.9k8cV!&p+ ϭ0yڶ_V\;ds%r;,Fx 3DIbCF/;IOk Is-_}?]J> `B6U^yCx~x*Cb9޾ IZ0Tm#Zgp3Cғ-!hPߍq!X e`)5 k\ҙT +]N^(jToR }ߑvd x6H{$ɟW`F/wI+ 1*DDE]3,Ƿ~+߉KUdfp/%_UY>l~d^+~DɻNWR&}C72%⦰fL}qrh\~J_%M|-iIxY]$ #34dF~|oaQlu4jJ רs!~ɼ9h :3UٗeᖣWlH톫l݉iÈL{:V1bLv4֝xJ ݓ~b;aJw[rlQYE{\!59EwRUoڷa9#.5̖dwdK"f OKTJ񫯄5F)\Uw+DVJSnL[=<- ѠˢI~CK,fqV}Va<W_o<Wz}A}XÅWjЁg". oDcT _Q+~Eѯ(EW_Q+~Eѯ(EW_Q+~Eѯ(EW_Q+~Eѯ(EW_Q+~Eѯ(EW_Q+~Eѯ(EW_Q+~Eѯ(EW_Q+~Eѯ(EW_Q+~Eѯ(EW_Q+~Eѯ(EW_Q+~D ?_EWgFxk`FyK A6lVD_oY̟Y$Q7"~WF@1\l9 ]static/FlowPlayerDark.swf0000644000076500007650000034161510752741474022511 0ustar00massimodipierromassimodipierro00000000000000CWSxipIv @U$x AO/D7 V =}` UjHgVsHaFԣVJX[ޕxmBV86lm8vykr86!8{y~Gؑ'//3_f| e~d~K#k`16F4=ʮp: ùrzlVV9tLl{%/˨,WviX^Yz}7Wer\p‚[7U=ooC 6X{q?}[xR3G%wf},vTn-LaǮBټbUїq}b^Y%Ry'kn74Z> 11 pbND1y|5c_a@"Z^V U6Q.V٪[2\X)>use^lџ8ѐl2"{Sp2 Pdh:|tZSϛl(@mHqA2Vkbޭ VNc&y@aF*I#aιѦR@¤H H)i HDQ@hENυUBH"#v815 bj %!!&CrXn ?7{ 4W߾p<4xE#leus-U=:|q %3ܪA8y9r'nީe)mNlJ懙[z̷QeŢ-0P.1 #qT*-6PSZKO[UcW=9щX؛Lbo$ 7BMQ\7&@= rq `SC ,&&s1XQ< ɾMKc37Vۆ.Px,~uRdWFǿ ice߃e2ϒ:dʅ<JG+ `BOF?cN{ *`G}[>jűXcMbXS>byuxV2F+ob>;~$fA,dVgp 9w,0oo#[ͭ3n1?[&l>?WnXP%Hj=,Tx;jnb&#&Q89ŵ筰AĚ͝*yq_ؤ.`(oln]"!{-U=o﫳Oi}v2ؤ ,&1UI'm]DJF1Y{nWj\PmO9FU_qqZO 7q;m‘k#wGyoa aq6^(r姰^o.sR\e?rV<\ECV*ceyN ܂ ?3B)<>y6,~˥r6?J.Q.-p6J\D9?VmKd2wfS*"$kҪ Md͖ Bö@M;0ĿEZ]9[fsk S?EK2n"Jq,r-.yjAVnU9>͉)! P edWPZ)?0bR:YbCNwH @0GrN|A4|~myO $ BPb|qiL=H)[nKAuʑ]WprKA2NDd*.mp UAXqc-;+S(?Wy|h…q07u kU#a!BQT@P$oaloB|X{-ofrByIJ418<)H@  xǏEL}|7^1%"\~`l_4-Ӑhu0c"pGZ)W*—)|)`)Yro=dj%LOno`a갛_;\z0Z 2G2[KΧÒ?QFK/)#QC; 6+lIoM62Gf/bHoY0$?vEҲx"Mۨb;ůxoǓihL6M}gRwaotԳ)qO!EH<8ގ{vBsro#{_2*׆b`l 6&'X~ \o!%8\LufsC&* -K,⍴hR!-z8ȖM͑N-"^M0 6֫]ڈ8d9x$ JsEAHqa[v*"3%[Uh1yUnxȡ{N)4^T0^ 216ićӟo`11[hCO^6oK`&_ &]8.- <$A`ƢbFE9g*0 lhΘ= vs,c9]qSNC1{lq&p݈@ƤfB5ZSֹ2Թ{`m8;{vm. 9ԟί _DR>MG-P*8]y:oD"й Q 3B&HqugD5`7`OoqeGxoOߌd2P&Nr?w{A6 \2q9s "6Ń,į ^y2]l 1Qc, ٷo%IBF+H&vr#0BF>f!?Bw!fބ;_5FGk`^4KK 7LC\!ĎC . lT>1>" ?z"Zm[-/*n?zivs`N) s 딃G(mX`N)WL1VAC`E15-b:fChxNJOu.y. I\7 I>?Db'c'?f,+|w8E+t@X/)nLnE5"O1O~݃ԟyպǩT"~S@4Tok~{\+I()E~mn؞J4b#w"#ק(}/u`dϧh؄&ϖ:EWN{pW.}j{zĒ?f_ x/Ÿ ɾ1.twM$vӘ@$+SwuF l?m53}R+D{B13VAMEta$U#_z˪@oLg3-[׷Sp9 zwogwic$P wZihC]g9ICO댁Bņ Yɇ/8Ys܏@,USu%c"\1T<9_̄_랋]GsN=v8T7$)BKf/QGcx"،4`N2)NU3<$KGȚz̤8$5cRSy֖dU[Ќ>=_ff1qx}I$ %!~W1faM4N "S{{?j(`dįMx0e0"҄Ob;!_=El=U_PSӣ=RN%"JWNک~^MOyZr6i,ҦU7ofTndvHHPG/ט.5tۦD7tuEiЧ'c^UN2^gyҥ-UZrT?֗E kvd/Z^*20W(a,ѷ[ cJJ:^-R)t\1%(C`=)[2.#>-yJ4,QJy^. v [ߧPnU2A#"v-e_(+fs%==jyf0}R%5hP:ƍDh6\? °IQMoT0xzIww`itaҝ̓~U;D4`p Nj hu޽Y)Th[k^*E_Dh7rI,]ʆ~2E#ih%'>v;# B 4oH 3<3օ6F׏v.ZSvQkdDȄV:Tl:`MaǼC.ChP{;fdO#>o'<22iCLүxC$:bb{{h2tҖ _ԻQf`BN!>FÀFI-5c޿ u=\ s. ;6i,Sb 8vB\‚jv% uEDl3,l=$,mjv}N$: U33pœfc'-]dB(j)6O ;X],MKC1t|'N\»yd[O{%"Ս7z~ ֖KWfbRJ[Rxmy]I|i*&'hbNxA OPqb㨳x_qWqǪ5l2kjRn>;"g+ RD|On J~,zbg--(DFSP0`f$**:|A/U*< }oa_$:j=#/cKA ^ Qj7_}CZ̳ڣş-abk"lm<)rkN Q35P#A/"8IQ mC!/*^|Ok ,(xθ^C&1ë{‰]3G5Yom5&c $9%ƶ06 *͌ҾTg iNHxsQ_.e"Hąl8T(Ybq>f,؈V G~|A;6g4HD3_B27|rnx[SyzGm7x ,\& LBb{EC| /%b +i8&G h>]P=Um],셌]8=9 Fq˨)x.(2p Cw d>>y#fS>X69 >/ 8{٧xT`[sY]!Pp-{Qfn ؎7 Fѓ9CW3Y&)jU X]P̕~'IH}kWլ;֭B+U=g w9_(xBɘA/N杝%U8y&!}l !I>#XFG% k8ٓrZTFUO309j2An+ӎJhBq.Qym9ˢ JHvz@\/J !u3xvH D2?DKdſ\Z(9/3eskʽ+AʸjxkםםkZ=%GEp6VwxrC7j̢[1ɻUf1x2K5jQ<~WѲnIEvnem@_}#ot )(췕"̾dcVt&ۖ%CyZIHp =5te $buIЁrNԲFFbwg7UNl37Jyl{(Ӭa   twg,L5oZMÕ[al MOJaj;:ͽ4Q3^PfK+eq#ijZ2ӎO)-4"#f^`Ww1&oe GrCN.[4PGØ-HЏ 6CLzWPprr50VaQdD]ERVZje+\ZנGyʖE:i2 e&?,UvmwőԞR/7E gс}P1IRPWϥSi78 YI{ Jը O=JdO(NA͍ Ico 6xm|З"'= P( dCsg|wvޥx g5 ݪLq0> j{ >9#G#|H(S{`(W*=?ΚISx5>ܦµ{*Ue~ODZ5y&#Ń|9(<8 $BAP k3}®\h a{D(#tlO^Q3sRd12=ʤ֘Ho! ;zA܂|Vt7v}D|rpњz B#z$?Rr@)H9w`:dB"p )x/ 텅춏H%(u4*AqlZA'1_mcFcP8{0JB#)S!5-r.#D plrNՠ|P%b";?JęCBf̰ !G*3> ]hw3a Bk| ە[?%|S`p;ȮSa&\࿂ 9'7 ? xؐ걋w_x]gܛ!fP:qXtlaGG`&fS3S~R#Hn%S~爾pe2SX=]±'bD-^92VqK顂rR14RT,q HPŔa̚[\[ߡZmO/>Yyoh-: k_ƃ.7 /NBZ"߰fwl0qx$12]WƔp;d|,Mܤ/тufבkzk;Nz*t SDž b\'yFLz 4[9_߱4N9tSYk0vK1Uce)VHx!yMp6%]QCR,s  ,STn׋|!\qGƬ\$>) ֊F 򭕿֊&>*|{H=e܍n٫&:Rsff]$ׄf"yc aP0A_)K)]Jy9lbtL5ŶbUY͏OE 4OHЍI ĺ2/aMg[*D;s֖78ih/["X6sV/n@ܨңmjz>LS"Ij֞=3Ņ/όj+Mn7=ۈUZnE||~57;e,mZ>-搥.yh[ 0Jպ'A8Cjn5Fu5 ÇVa5VuD69W3J 0C.X;KN|x.[mg׫{Y^wtMu?r7wCIXijcs>_nyNK I&7$]SaPLX<*|uh:% qy&H$KǓG/gc_FXW6'Mٛ;E#n#P̴UJ{G2wm| 挌6cA+/}_p:0lw[Sc*惜KF![難klټ7<[zFnj |gaau>95̐bη97T;K$ͩ(Gn:g/E*O]Wn;JNVʫPEetqDD29".E q>Vwv`P~3\삣/2[ :JMMys 8]8<^\cȎbsdHF~|k?ډ8Õ@RjޔO d p. C>nqqq "f%b[Cѫ_bW&nYd &8;aŇgQ0W҇AFKhdrO݅׊ F| HoIY-g\J=V@|Gbkɭ˛ pFPGhS4P%fu!⻻CtI0X Kw9r /4'l v f]{ x"dLOkυA݂uV%У^V"O { %EcEML>{j,V=Agy>@Ș72~%ӹX#oH W^|Xдb<@r֜ WみZ5Ξפǣxd0yC:|4%,lYrKݧ9w*'h9aJWbT+u~3 #AO5UtgHpa2+j*`#x}(t/[B ?X^YESUypE ![vy,lqLԚB@:ye=G-P-d nBp'Ux//J}6u < Ad"%A$iIP"JZѐW , (qu1brī0Sw`fa5ِLRc-wٞ_S>& ~MFi׌\AgTnE[@eղZHܨ~ B00:?}}n}?@}ۭ(/bOGf{IBRK"8Rm&<9 G{Lcgy'"G#JS%؏?h#!BA:H'jc{rႄM6.:/t3#&Sc 1!=pqTsrYjL;9܀KgPXk-!Rc@ 62 &{n/~Fl\qx+𺾂žϖkgKa|!!)jۇp".v::9lXw9Q ^4(Ocuy)RipNZ#-6r7!t/yÛV?9>a, j *DХ:wJn> f 骹:&Vc+ < y2 ͻ\\ ZxmŅ [gkq(6|8>hvg8E8'hEr4WY@5WBBUq0ߍe&^'Pq5C3Pa P 4f|BT@͕ۚ|FDfpmnl+~)0GDfvE[B9::]% ?7RW  *3hZDeRՀs+o)H5X &ww1Ku&_WXC`CJIT K a$2,\Y,cJFqWaOj$EdXU=Ŀ$(xt xg/$?]>y^b3v4aLo1/` 4sO.".nP&T*J~[{r?`H]~Uiw#def%DZj/19Ђǩ yb&0'ݥOjGJ#ET@Q=~JuQL!o^ZY\;y Ik@&3;qJ| ÕԹQ(|5vb,j t|$jN~Y?*ׯ4LW\QNq[UÂ)Bdr )6HFYO'y@SjA0?/h32wEK{ e?ߒ/~~YL+[{u9$fZQE3c͓PbS0-yí@` NQ)=8 miot++INm0ZCQ@^WJ@ys1'\ 'R-֊PpT>/\8 *4i AvzJwzzSkِ 6;[p9b_Uwd3x;A7$[kxK9n;^㖲pR?`Ƴ]2p@G5uG>A..[ =}M#Lo{>YmKm[6&0䤍O 5kwL]j6Gm1}:2rn!wV#X_` Rg:R\ZGZGyBhĈ"DB~:$:@-×?Vzd{e{5imbkۂB;)6. Dt ʟN5]DO3==.Q1#W,^Xv0 AG<(^NXx2Q%\{Du0Q՗8ly? ^p8)O'n`w:7l;77;ac0+YeY;i V2.׹Be\3|BMiY"d9/OMc<] 2hU$L7[ą"9ZJv#&uQ$9k#'n$gG S&)"'>x}F|<[rt&ŕz$sO"}NX+=Oj^.ZqvA iQ2XFUڊ ʈ+g8̤OAt* z~bF$WӦ=FwZE!0#3lXkqQJЖ21~zUJya;H%}&,yˏ~kx\A5mt#_Dg+buBZP>ә+ꂓDY.>Q>pm ØÊf1@6?'%AKB_a-%Ӏ,5=ኪo)J7=`R5cXq؀v7Xxsˏ7c5;th_WKnugx`SOwaGa݊GSB@(|`{ltk'f-Ga≽y_(1p~,$K`'% Ψ>T,˸@kJ;I^*;REa˷Wf 8 (&ułh{V _mpsV-Yع}#-Z\eCfeQKopcqAP )< s鎈Ng0[9XcFm Q- gHޓlAoSQF`Q *^B_7**WtN`a@Dn;Y|k~jailn+ȷ}W>)$24 ?mjučxxBPVvͺt6('U<*g NUFw]t(ߪ/J.̐ vV!DpKBaJu`+jJsGG]r1`1bv(MB cT.8":W[2!G 'k=\W&H`T"]?xgY%m∯P^jdt,WuvD*<[#M:znQo,%59_L-u] cDdDD,Oi(ܹ7W# Diٰkw6 dvd^AOw]=[z!-|aͻMbX}o/҇^C#WvG>NT 7  +c)`Z\+x_埸##_ȧ&44OoL1`OěSc8)D~{}"!l+}6@jWv'^7|aFvO׳KF?cY"ەH8&o*]ԯ1 @*O~V/Nn5+_dVT4w6B<"!~n簁w᎕~gQ/";|ڗ_ph !a_Ugܒ<1㯙)|9T't2뙀7o 3ۨ:ou=!h.*[JT;|(GFrc9a}oE4So#- *r%Y\wN|k^/.ᨅ}ֲhVyөV AiN$!N`hU5 aG!Q]DLdU@!8}Q,L9Ŭ15#{ZH)p̅p ypZMn N5 jw`S흀FD,& GZ|H8;1J4d-[uI86G]t ]JE y"5Ei}³:^+Xp2v_ֻ±:u@dHDWom^G(xPNa @55z ઃ6wIKVO%VDFp|[Ʈcwbh[!+rԛ է/6?rJN=;Y0>%ӥJHR(ʣdˎ3e׆;`klVKhOiX+(DFjksgpvZ88ه!ixDXg"،jH}s'[/4Xc|Lh3G\e,}LsM~ɹ*KmJUIz֫ "mtt08Q5 XUgoomseR:^#_^' !B j\TTxg" g9LS`PPB^:Cca -^n~4" νi3Fd o㕩_ gGT!, psѶ)Pm)C!TjD! ȂVDD^e2#0m-2d(`lAA!]ڗ·\·\827B9Bu|GU.`hӇSR~o+"p<><6A@`?uY ʴ#ݳ@ұuR["Vk~*?;Fj.h+k; &y8T]4K{?CYf;1XB|&q6CcPH|DLCG3*ضx'Iy#pEx<O%0D1ԯM r !\Ee7ưߊ)Z!{c@iq'9~'9kэwilߘn.8c>I*ت1 N5q@+Hd} ou6Xs*/p#K|ryݒ.f3&];,܍媅.Ut!Bک$lϏS'=[̗=GA2C#tPmS8G9` Qo9e:"\8LW&cN ivS NVC|h=fM}?ʳMy+UuYtOԽ+>+kP QoM0ckx@XȊ.!+Jaq=b;A9L |O9-յ6 =wfQz*v)SsWP]gn!66lkB'Nk|#F3 5F2Kt@CzQM5.0߬4A := YĜX.JLH5@LRHmb|GM$ě‡x"#83K!IZCzxXn(&zα B,xf֩[P# S#Fycsج~lqgODq.ݖB~]sJ;|}Z=Wh{=U$fX>y>0z2V^ysv!W xRWٮHk~'`''y rbxqE+5qƯa'Rhu{9'59]L}kb>E Ӈh%EXHҒ%[,³pdx`O`N ̑9OX`si%j%eЩB "ۣ*yoUGTXڞc>R_!%X~E+tݭ_9*_gbFBF%PF? 'jK0b2yHX3*y\򇅝'L[ O!`&O ʱVW;R2&ghSo\h<җLD!CCf-F_UTwd3ϟ5n|w^o]4N%r/KD3Kh.SKfAH^PGFf֌.f3źGmʜMt=wbW]a}h˥(v~;"JKJ$ML*OTMi$ Xw=[(O_qI[M__,e}:/@,%'VT0CaZh P"BHO|)9 GUP_l%!UOHپX,WKŲ"-Yo4Xrfwl^{s n1=|2x+R2S>:A`,$GΑ;;E(*_TK|"N W:'ŲiP:2;iUGfQ3D/P *Rej$ @f9pRU,F!iŁ$O]D.RzXƧN..@mr~g&9@GTPb9"S7`XJs+z]ژcX1?c ͟1\%~w\VO.l U˯@U'KU6u 8M^o5@ٲQ#g z&Z/\//h 4dԭFi:]a' 9pWAZڦ9BW d-Az G^Capn rڲTRL6nK#xnBr)lӯ}]LxjTlQja)Jϴk5ڪHΑ]AZ1bX5#l}$A6]q:(oe2i5g@Gb0=Q&W6*y R*1S4UF3[% 'HUI )O5 2%o} A0&I#DZOk.)KNpR%OgEˬFbyʓC Xی%1 KY'TƉG` &l(djhEU Qh>j'TV5?AE%P*}B>!;~7{1Y] Ö6( 8Z|1n52+Dun}ݰ^^G2^^F-6Bv@X||E4crZ""#ҏt~2w2iswՃ%8ffZ9ْγ}dЁj0̤ڱèSHө`p%Z/wd(ِdu< 57Z )ʑ` K:\)aI6n3hk3/||O>>ځ61 n^|ٌ w5CYlȑH q W)uPbԅ(ڍP!.if;C܁܋}p/J{SY(z ] yҌjEXZV5A\Eƻh~ y|7ը67,2y Q%?һMq;5y1>c`.j5f|6MxI 5'.n"5 n> rhW LL΁V΅TΛ];%]4 F1({e~<ʔWM9~kl]᭭= %İxAx0j7 0Y[ahFaͪH68+؇ĭ ]S'MO"ǰ!B%3 nl2oR=)'7DDd_ 4́zfUZɹQYrSk#'(:fWY\ x et;ژ|,ьEB܂) ZC{S|Kc׌8(53*5ۨqhud~fo +aN78ȶo'J~~ONf0{-Kׇ.۽jaK=/~8$vׅfR.a[Jp7ⓌoU]O*CaZ_7؈{qn*}`!#Re^t:)_a[ ) kY#~r}㺌bJDCuͼ.?DigOK^)`}3'*ol,g˭:FV@+5($-P{PBV8ze#6Lq9/_vR>0A`Bņ#|U4 e8l '3D8>y&C E)ƾO5xgʋ@$F5{Жl#zmnl+ԃSTVEхv AQ*Pk+'8A,B…2){~QX a)a?GU*h}aic[uf^,i o 7RaG^DNHoL L8f"TֆAq\.2?P[\+c1DՋm @[G>Nga l hXdUwwRxCN텰0W|ög . G&[W(^gay,Iү*H6:Ž1H/hژ̳ұho?G,̯1SsA PD^˄ٖ<0"T+_FUD\W."A\{ V=Cu[b3jW Dwu HWhP4-zGzܒky):P뗝ba1ҴoRU\~O_ NN+3o8ϝ b\o7}vOK䒹}kVO8zJ_ ]|5-D"uVnMY+mFkBಾ+ 1%9ts2`L9Vi|:e #|7'rԬYb ʻx&t"c=}H"ʭ`L7w[jo=R潛(#L9ِSW*u;6Jw߻sAX v*IgguKJrffNA&&ZJp8#2m^dr-1s_5,qዊ9sN.lf}NYea2^zOCl,&LXt1 ^8Ȑĸ[@o2&Bm5l` r 6$~@Kϰɩ3l65f2)F1uX Ԕ#ncCrƨr'*nWFY T޾1 vކCb!MEکH{"µb"w(՜D5o5t7;(1Q?Vb5\p1T_((?9l&>\V.)s'}J- 9PjBpEʝdWI__͋}r&8П OWݙ,-23w&gf&-j./&Jg޵6x" sbt[^19&c`%B.#%WLUԲ~!P,<2#d<ǹcFKq*@A5 ?nqR pKW<]RDzz6,mmaj_4riH2ԞtW,Jaެz`ψKo"/p0B$GhUbɤO%]D&  }@а 2,rjF#>M wvTΎO7 s}>ERdͦ7/o0%W0j2e3'inU lQ!%ӽ0<ӡԨ&DWvw4\/ʫG>y4Aݸq1'g*"5Th:i7Uxj h3y)ng2[z{IIF8#0# RsQZܗ "\e3,[3!+6+HWPW״b_Byd*Wk䵩Y<@H:f"u592=r%oAyZUj! !$m[bɗ-(dH `$ɛ"x.F[-M>Ơdxuޟ!ɳegs\oH)'>-uh0ΟJ.kv.v#,ѽ+z]*fZ8R@XSI^('j>[bEZRypDp|))@ _T&2ڻ:1w"Ci>rx_ {a*mnZ:*zBY4 uS<%HON *~oEiQ9 *j8")2O]?ÿKfa*g.(+e1/IkmMok:EJ+AݚQ'@5{tVɧG}}o=Aԋ) po##/mˑݘDF`~)2 #]1R> B)?j!P aiH)xگ2/.Z,W%1d^.I{-DNCLKchAos|ꏔHڮ"W{&^_%ݥLz&3ڨ^g4 O!@g ѹؒ()lXAJ%g~RsI AΑ}f ! Iem'SڒʛޤH%WM4(1! Z\׮D Uo iQ4.I@Bir_Tl Y$V&KEgkU'S W (QWOuteyy5!؜ISf2$%W?AΠ7.^oTI_Zw[a0(&tptw`4Ycn f,(^Xoo]9SftȌT"0ԓ's?܄L "4tP<%Fu5(G%2#GFf-M>tixK ͯ @Օ'b]dJ: C u1(En R4AZNhi14ZAz %|N+R/ѵ QYJ@$S{,xPXK0;pN]o \Ujs@,~J=^M T U4&,pbo,>`X/d) ha coj73>}/8 JJ!b.S Q =R hP=&3ʩ.Ħb3]̬ϼ`/cݓ6:WKs<",fpx:˹L3ACmW0j?Ʋ}ɶqDnVT;ɔ{VT);[ -J_)`? fMST7꫓5N钾ՃvHHVMaamIgV!TGOCSdcDz!MuN<ͪ\k^$nzϻyJA*eYUZ?QjհX3.p:ְ&a Jdյe/]{-YBlud"A)T "Z KJgfgfScsrij#T}*kap)=igB nóPDR',OtFv;hX |=6ҚDf*3T*tHpVu(^8)LZ^7h/sҕy:k(iUf]w#qgrnQACG C㚊c2@k\{%FD{aMhg,MpMl"-1BQb%;S.ݱRU-Rx:6QJˋU[sQ$ИٍY[){r}K6\m|]n GR8EwkjB䃸!A6 Dx҅zY =iLl.C >0Ղt7(sN-F/zZt w nSw!@@}ĕ- &G{=y]-LQ OnJGJGpD-wXgs4+5d#ÈHwP]s y<;/ Z-TQD法G8%0#;g q:.W"t1=, 'f)P// .$^>U8;yQnǎoX%Y4d'ReSf)QZ M BV<(x씥({w9w( ᅾk/{Od@1ǯ2֊3**+-z69âQc /*8Q3$-S-@-o `WD |hUՒKxnbG*@*He ?@iv#kR>0 쮙1 0.kWqr:-|b2;'V,kvn(U Jjo ٙ|bB+z[BYTZ-*FM)6֒R  +P]\ƪP3XVM,4*XS5QJgul).  ٗUVyQ-=u:\RSY[O2=:O(IwhmA;4*+2ncANѬsŒzy)9-%L.(Tъ@o**g8D?V35i,5- bbr$/ VXI7mv@ Z rbC@LZAl2kWrDJ ~Ms,'踬gBc E8^=l4[c>re9[<@0L$daP\9FKl%Jy "p6BXQi_k.qi1xсڹ],qrYÜ۫=\NoHt]N/ smW){8 C|{_*@%yIu>Xx~ kSrC.g:Hش{֘8:0~eʋF:q:؉qV{۵:j@cU(SlObI? ˂'Ӫt V,~pm ?.g&'xޒLI$,*,BY" hWx\O5cS=0pu#y`q!N5u⋐f=yNF -]Lzݑ\r\G[S؃/"ۢ_QQ8 Ld~\K΁_F_We[ez?6 hFG&&g ̤G'G=,ʋ7 #Q˺9x,5/Mz T`oW J#W,5 k|1 _I>}L(̋ Gk;M]EЦ̓@1q ?ҥt~~O|$Y MXo$lpe]$L o0 ͲVaOvr~ǠB =Flg6C/M<[0 0{UFmzqubaom~qmz^D_I9Etk^LZǠ"X/hT_YYaާ&}WS29I,ZA:J sZ>lH/#TH~gfC NK۵tsoDkˋAo!(=Ą`R ]m_DNa" J)VF=coU5Y& $bn/';ZWE~@|{6C7g4Q'wO--b,@n@5θ& ˃# rh$;,,s ƕ fSЅzhꉌ?|FQfm`QӐU\3k^L2 +TXOIg6/2iy5ZgnWh Mņĉ_dǭc-B32 vA Jz=Nj~Ek5bܹSayF%*PbG 煨Uh 6 `#cM6=hcoN̹ :C ӟ˜%;Ε.BQ:|xD0Ux|pL5v"=TDZОFg㌑/j,ukz!33Uŝ]Yoq'kwvq'3;QTիWUqiܥK||:ZޖUܑ7^ōSq'N`^]#u eO_3!H({a- p0/s9d+5#c:dzH1RET}fVR}}]e[H5lz2 N+S#ژ[OT jJ\-WO1ֈv0fjM06P)fSXϥ4e@[ȘE&*}>e=+S&~։k-VG胒@jpʮ>7_8l2Glϛt.N5LJ8_or VK(Gww~N Y&A/8!N ~ dSgyBtI'҄.v9?x~cYJol=0}:7o0"w?e=`FP"1@ 9!-*XW $pI)^ M4DC G!v?QK]zm͗zy7̨b4ǭK͜/8;_!zXgo}![Wҿ߶aҿ慔~^&V.hj~k~gw0ezDOK|@+Jr&R:ddЂirH* I:Fܤ,&ݶuÝ y2S9淋pzEXNu~+~JAL>[Ax~?znR'"8+1ɩC\Z;k$L:?YgHT#S&LJC;čm@*LKT4 S ǧ ~N!Gqyo~'M  ~])nw=xp}:aji{.NS] ^4t VcAf|!}~ IWx~A@;G%tm1u=7.r~\wJאSA8L~6GcbN}Kt%LSTEF%*)@Aԝm.}[<{ˍO? 孙Ϧy $Rhj|Ѓ/(i8t~A`.yC>k;fV\ -ٯgvzܯ.p}fFo)" s:|2n7)fbGc~vnˆ@R~m^|7w|C72^uSR"43\Jp3?c;ͥ<]c;"XՆfB7}C7)T귩WOF̭O2Xa5.jL]UU Yjaו1IQQTًF_Otm5h͓)z2%['ky"%p"0yѧE&S꯷vEFOyOڐN$_fl=ܚzx55ëzw=-9N/"hdzxl3@CъP8ZmjLgTO ǿԨZJ]7Զjccsl]J]SjTwI2&QQzߏ;ߋ } 'e+zHbFGK$R'w u@Gt@FNoU$:lU>#o@AOc*DOЇԬort#}F#o_C]mƐu8`VӐ`}7[ykb~ . BS!br%ʱcnQa>ê171 -` ҈p,A :*%Z?;qk#rlV%Fݵ$% W*e?͵'_$.}ى@{RW zkT> rlXXQ8Ï(#@OFzZ3T%3!<~ AO }=4|lO't*!mTUHz}K:fzds 4/K.lx@@J$p^0GLEd_a?6-zXRY,d0 u.,!N@%G( x5]VE :/~eFnxb9DjXid9ۤEx|!M%/tr Ғ4MAzt$ё+t˃#×'~NP$ઌ2"Pm`Cbdar$5N#=7 9,9[)S?fT!Y@a $4#@VSGm:5 574r[ؠp %NF&(]Ŵ3s6,i肊m]w9#$lOW={jpf5y_iI.Q y &4 uҿ\o 31Fh8H'qHii'VO5u><=TmM8FiF#U"5RdUWkch fndDƽl~ĿZȐO 1)!,KU^ަl/HC%I$V(Ry463q{\Վb.U/b9ɼL,&E [Y;B//V^E^3UqvDhRwaD3B"8|Si\~OYjB{_O[T.ZCr LEUunT ZgZ@h{uarf%wRxi*݈X( 5B-(l.7Z攌\ئEO *~|./gU!8 E-У`xm+^4!EN+of) 2 >O@mc e*. U 1i m-SWN!tڧ|=γFFyKOF5I Y4Pg1C[\udkhХY5J|3SapIͼ$oAú=j P(Y;ސJ=I $PF )&I!ցndЩY}re[r! OЩRuWГ}A-E;jnIrϊ-ngB{B,]^2wࡎI@y# uĂ#^G͑(`A|CFcY<5$'NFdk"e) 2 A4w)m *l'2qL5IH,BKp:,UE KWߣb[o jM{Ě5ݳh0Pߑ=le]h)8ۙMbQXJF~XXEU^5ZՀ+_Lv lz_M,uh_l->f!\oVϋ[Nr}?3vfZ4ŢmS\Vz5ʬ~,Tm ɚ/7|dDL=ZB;$½Bޜ@iE< %Ԯp{cUkBN̛9R^ >ZZ -/5D49[tRs܊b<uhj?vZ3?VrQԩ5^Z8J?{_M_Zg:V~Vt%"<ߡS{F&'/Mg'3FRS}Sɑ47:45IM3##Q~ 驾k}#}S}ApQ.]Xj8-꣢HeG#h.ьGxܹ`/pFtӜڷ㼺 lÎ`&wG͋DȖ %|O Bu٭P8@٣)NX~ m!a&}8W艧 O/` le(G&`1r =[׺[k/H4>Q 1EgJV[FqHn[g ;T;@sޚS? 99..eM^ .M^:῔i^cq]kl~k NET$+ޑlGO#MN@g-ʼ@w=JEVɲ,βl6_)gg9Փ+E34f,;M ۺhek6WzW_N;d8d|4Mü7oK5l7knpF ~55 vh3?͏uYZyg~z$U .G^ʏ'~}^SU~҄\Jc3\xD'4,7m\i%m$YNSBYSHB)! qQ$Y\&q*b$ݬ׬V,}`s(2%"%>~Vm+ ԲD*aI>$qTCDG ΚVi .e:& u76Y&պa%Ҩkbw?z!N[R 7835$ɍ Q& U>`373y4[T큇B5M:4 s0GM B"-S--qn+Ov['HUAz{zk Y!G)vD_)̻Y5/\ZKI:K6BY%jbQM0ZKUq{Nw>TZ;sUҴ{]¼n\{{}kʼ|99ה3ssdM9הfLtN1Sދ;7a3g vV}:0&Q_:$J)opQ{o{1%+i?M |X(xm/lc' =W m }@ ,ۯ Qn7GYڳvJ*+ c>tAKE]':tա do@2;=ǪNUu%*e9zjY}P(?Ǒ$6 O[38Yu'ם|WaɯPWr1LIU',x\ 5]D3hr=J{\m2^7AiRi4"$@cԔ)"w~$7;i7I].9'I3r dO-԰Tb0=&r'+Nˤvp>c¦-YmͥFdfWo' {@LOکlLſ(E VM+<J{Jմ3^dӞP&f*2;Sy/иFajԨNWxfDQ]76,3׃[XZ{ )ш*6V^{a#?b.>$dr:uRX#=s<y[{i~FvLGw,%P1TGZ6OIoXнtZ o9(7)eA%+P_&7kTM,d@_ 41+Ӹj߲9uiʫUA]%2lTr;~ٚuӽ/`fM++ּB9޵EGーz7cX&{kgԸ&aJ/_5[nD.'RzUmҞ)O2 3 ݪI A}K '𑟗.42js}HYVvOӾ-{T7f|i.dL\Af[]x72G񬚻N)4,g$yLTxzh3%hz*Z -0ؘ|gk޳Zo2좑LiToCˎ[޷ b5͙!)?(~$oE}A]ZVHQ5ߦGjw]_7veQe9[ G Xy-kA#%<"(TTe?%iV N& r%c>)͐_><>LJ& > n ;z)k$٪b>V|φd,i!`J[Zi@#W}eB6C]K{TEwT5G|T/b9o۪b~|i BbBi.ڤfK ^p1S{8YfF4<+×-#H:6V BelA@2PaGF_g0 z@jdwe2ՓdS-}*tJ*(SSz1{~Q):mL5  vEBxקݻyH HZia"z}yE/)N<%>PM%LKXjn9sMhc>I3}n`I7L&ِ|NQ2\/NoFya#ySK ^۝ 3:=uyPoWKqB~XyX!%HL#JlЉT='v&_oDCZP{l. >\HB3jآnU>5O3Yj$XȭwsUB,[G8lLw}8r}>yMiJ2麺.Q/] l:z%qSidnArR XJL )xi7ّrYkgI Zl N{ uTgT^=Q$rD{|IvsJsN;8vAL~dz.偡́r8gxOp3Dnl!`K@|4U2k;-S,  9TUthglE}V(+ gYO ZFnJg;ahǤQs4ωEtgvͧ۷G<`7ӲBL4ǣ1l5Zn t mR(T#?F]rr gKb=+R-%L^xm^ cWR7kR/%n,rE+ z/X*tIV[P2! >1 D`0\e!"-a7ƱtBBȈyMזq1≋4~۬p˔J \7 Yk#%4 ׬g<_EJ\٩_ ^ض VۓTߥ1sLS.{(,t^xh?OWzqHsyq(;\Inp 1y$`IҢW o!XՂGOm嶄 S*à ~+/U녙hah  |~¦%`^Æ_!zK|> D%b HB9/L*\v֜ =y/yW9noM|lrj =ΰё&/]7xlĤ`LybW$iJ5u'4:XX:6ԀTKH#/.-P)V-CW'3<:9P2쒥RvR6JeZf))v,vqYRtIA,cw~s_NLvH}92~k?Z@=~[l!zH!Gs:絼WUsR['LeC9!'3)OH{fw9r~7l#_MqpHe3b/5/f":X)UʺijTO')lB 7&4DsC!^O N\h,~2V{9zBޔwSz)_Yg4< s5o-L~A8 5]tt tq T$lA*"7*e 4xDٜX:Cj;ti DŽr 9w1V~[ +[xT>}d1@ )!Am9yDI-E`IbhMI *ӛ!F@2*ICBO qąxjqr떼*i3U LTj"f+ Ղ UB*˖RfaBN=4J-X"IyZN+=A)$3W!?1Ӳ@68~#Y7M_@05dZ^FqIQ3Cغ*sdCT_$Aj Cp@YR-%;rn4l YF寗M͋ )MX%O[Jm6+Z/dz{NqVS7cjHIyvٴͺiƤ5QO,<Bu7uevP#6ddOR).3{f,zαWljɢۙ{=_RFdʒ]e*go=09N)it&Yq/I2YQej(;H\ۥNQ j+mHlО3]Oh# a p ܜd5b<95 Jh2>Sp4IwWDV$)e 9>:sD^R#ŋ".(KYU l6I&@7k*\v.f$Cx׽'_8,FsIY@ق4J#܈dR^ F9`0c%9s#?sST\Jgm:YK9R. eTx+ѓD&=76 K:(JJ77EG5Ib(@ŜwѱK%] 5SL> Ð(RqRs %˪{Λ@n %+_BsK'^k>$P#L^}Wß3m{aG7o\oJb= fsi)(Umɶwuځzk_m[&lS2Ur}TPH#$Co8yw)Yt_@Mi# VH27vYM5+q,&~GC>k.)qѪD.“:a4҉1qDMifoK׬I[įmV+&rir KG;"$@40 ԼD l>;oYMw M(~l2^Z Z`Y'L r ANW>0QR#_=,> &}oMoI(vmo{4E:ax⣻1&,88 }&-n_ޚO[M9qgTMQ[[=Hnapp-UD7AL bނ5E;|:L?ڏA!IY`ˎY] pCNf i$80s7y&1zbM~Wy~^꒸yqd=دC߳ rk d{U.]݌z=I&˞:UTg[gQ;|}  Iq&C q&bsۨmJyaIe\[emQqS*iO6uJR^Є0U !lO{T d*ǘvT=%#/wȬsb*ۧ^JISĕT\لnOU~I)c*5*UH !W=E,"hsEE -t\yw#py9~3XR#{#a+"We*imUp` zfAFx*XGIS|z vDjc.0 %=ѾS8$YάUt,wم~&!=QhfH-IJ͟C %h9Tx'gVrI1CI FCr<Ȭ4@M \K ^mKx@oB>?XT%o[J3*|HU-M<@AJ$2_,cF1UIJH#]gb29HP9[U 94z hB呺$fRyQt AJY(q:>NZ,~I+ )Jê 5Se=b| /?RS/_"67U.JP'8TEpm@&#țj{{VYvZФM uiQApQ߼Z' I`c#8xI>  oTQ)AngtӁjFܱ=-Gb}ɨ{]3+Gew=Ⱦy<#׉ Dea!N`Iñ4X*Fg-#?g:\r&%;.A#%7˦.|5m" ϩ{XȁEjC^Y|NkUM3.Hx*\ݦ2zQ*" 4f՘1}zJ{SyL R~^-!IE^w_UNȬ3S)逺j}"&UIܩ:˯i%=R%$ 'Qٶg.b/2ˏDYDEYGg K)̃ԩA&qW K#^ Ӆ|@ڶ5 ͭ.6T3fojUYdbuI APԳD#MTWb0B^T?5Bh̗.E(8O$OO^ׄi vHsj~q#^ѱ}'ѠANul.!JWaC9@G.EHQ٣Kj׭=I u"=-vOã.pC 3~2% <̴1< m4H-ay^H=r*bITIDS  F,BIoa{a܂LuS#Bɇ˃(ـv?択cz3-XŬȪFƭowΚG)::槿YS`\69۝I,as%.Px8x un(f϶ n]?6igV'h5by \՗_ {Pu!BFPL;>?9%?5 {ðI,lXݐuP33S\,mAzvπnhv !ܛ ȶr:̪Y&@ kuP6A#ŗK}ܜ%lEnGis[&gÃ|u_'S>; "^i<#,3N_iz: םXgd[t"[ KNVnPb/A[]6WZq ć̇fL蜤({ `J pY Unv9ILWiIvQUܧ*>nuIR} >Zh%=R,ʼnE waV>=`%?żNM!g:5ņ٢f\ ]א 5Xsv@'.GNm̕bmȿO/G!o()MU;AIԢU ںPѨMeUj$*9RC~OcAI27a|c<[Bjztg!h[$e{xuBkVXviTn;N夳g'TJr`}8{N>Зll4I A^Rk.lr-ײxc 94UD#*8D' M(RgqoPаzgzXsM'NPtE\5Q+z_[ ]a cfÎ>;3-b0 ڳՅdMt7dЇes lcX6SU4pt*2ܒ܁ZIXm\B靤H !QmEW2 NiKԬ/I`bZ96Љ?Gz⼃GU*N#p0g+9WsBFw눿q5Pe3 ;KT|zc=lx$ 0b@ Ǔ.#NCxejtťD@JJ3l 0STSFxցri0ùfɑ(ޖK*! 1.J:TZHy-a"(.j#|ӱ;- ۪.m:X )wxR\yI5t;lb(th&붣c#-" 5nUvλ&T{E, `l3e Q0NG6,N8j WU^Jq9{+QrOQܕ\(.qށs =G,//wgg^hgGGxmX1 G!k;t+q+ꃚ4}UAt &J9CʨxDţ.nVnͽu*ҳ[7QqH-=C9V[0˯IoU7i \XV3im5k{~3j&?LFZoQNA,Δ+y֟fBڗl. oOVB;ѠvV|u(Կ!ŦPC*˹%}7_t"4o!a3# (,УSMUKw 9Uq/f[mWzӸԣU-߷Z@֨R:\c)HC;e(a8 :5nDEt];]tWWLȸ%PF_1B;ͺ-:+*7xuUQG3Y36D4X:[z(id.w.g7_?$$CO˟?L<Ңe .&<)~=)>* zIfx$Ȩ!-7١ͲzO6x}Xb%QK<ݢ12Z%Q$Uz{y SA [߭|#,ГmmП#B`8f#7D vTӑxK5r0iZv6NSr<}i'K}K~jizvV|g+hW>KOX'jq}׺0W֏\g$ P}Yn:RWªed&s]MOO8(=IW*|{~E|pK5FTLhān-[qꋮ>+_|'/Dϱ)7n.M҂U*#}L!|4c(F"EJ.Tu $~s)nMݞMݢz/(v8 F(w95u R>A@UAX.Q|U-37E7K'2/h||F!3iI)5|Ug/B“qr!8տBP4a>Zc{N@) _igo,Z~Q|*ryK}H+bo}rQ$caxhhmnjd.>˞(0o|)PU(r00cRvI` < LK9H⠀鱿ґSGTod+Eﰊzŀ1dȫ}[֋M =,9I61KxX2+IBR5IQά֧)oVѢ"ͩ _ 4RNJ F.H{NL*, JcDz0 i 6`ƀ:?C3#J&ŷ|X&t581ɲjX1VwdȕGfx\nZ%*nA$ΡU'\KI\aBM(i1zG AVV%Ǘ,2_^3p"t͑*G" k cf=f|P) qP )D>YHρ*A ]`Ef pX(ԱK(ZE1*AJ #<ʏw8$M('%4M>Յ <H5#gXKS̵TTor$22GrP&=6Ό F142: LO]dCWGG&2)(۬D156:5298658?xdX^銍VeՈ_UāJ͡y(-!{D_.y;7xA%9g''49oҙjJ&Z'"jI+RJU.4wK#B%y4a>a&x!SvtSYMIpRG}%>YTf"pɬwPUb*J^} I0$s<17b2qޤ}[&2A3xdAdf:;IIZZ߆$CrψkGIeͥpy6G%SN hPx!>~q*.yH%8Q2cŘqp F#lZ?M i±z[y%'DB\CeRfёIJҩLztbjoR^LR`_NLtKaͱWF3{=4oZ4)[QGiS0RGSo   ]}·o;\ )l _;4rHf*b3a&/MW3Qva~yЛ~4⟇||8cB?N2-SET{TXs'&Aڅ ɓ z#4yG;qIF{ƟZ~ϑ1l\䆇>‘~Borr^(ӇzM0 ]Ch^ _x藉ЃFKaB ҄r)Ró0MÛ:~ܷ,/a v`p 0乂1NN~@$Sڋ@1%q LJ%j.+'M23x*]HV05702ij4A [mR!.0]U]"XH(?mY{c Aʍuߔz| ػ~߻ZkmkyUnkp%1y򫢂x2^G1$95.~I \voʠTNR9"]~Յ&8o3 t"ssX[w>H+yO/tse\CpH܇-r9t{kCTA[*]Aa |o#_TnW+35j߯0a2ZG\MitzɀC>o;1du>Z=*]%ߠL~. rץYwxlۻBQEȨb%FWPߴ3ukhD3"_b>` dy[땐)<'~xn|[+,9kN=9 > I4hDC D&iQPM?$w>MIA E<'qq-J\XwdWtf|ʈ'~ -g?/wq$#G5DLA[':~Yr[!Mro n)rCtXsv~Xy]K SB?C?.L)q l6J h5Hr/I6~ :PdExgZ%B! /-ETf,b)&X\jX%Ov6nt|0ʼ(󄖱$oָ&Qp16U)-ֆ%?ϲZgQLƔq]杺"^[[֏ LamAaԴpO .Rml iY<ƌtJljPs(FՙI ɀ T@O{}Qs?:we~;} )\~NUIU5ZS9?_MF}/34f4dH|~6%[^*H'Q/8'#'jKfu<7mt_ԩ9[qr9\/߭L>BםMr*BUU_'ZR.bϮ &9GDtd:]epY=lI?Ϙp ׿N3f߿JE&wC4"T_ mH&y۠.}NJ]2{MyCS?띈H > ZFg<9fa ,FJ-+\ԉ=6pﳪ-sP:]jVoY*)Q wVesOV?)ڐ` D?QRP ϔsAԵC,6AGC5ww@m;[Y"?QUEANBNw?$HS `,L1o db9 '^PI$B21k CuXYԫ~Q YƹdFq-7as[ ۨ&&-8m0=<=z.d Mtra-k 2{yPAvR .Uԋ%쫻f]!{vboFyPG62 ?bC:6~IӸtcۈIq8L/_MT|kEz"2kFs4c!Dh <^:ʴdڞlTs&D[:{?M_M@8G {B#toăY5|]szx6D;`?!4/ܹHty$O&Iyyo !!B,=2!2s!.V([kMz7>.Φ|GckT}!~Z*N(*p@ìY>'%i:ت CiMK*h/W8mT{*MIx?P%CBŏCONrM0 DxGBm x8tt WB{Z ?_M`^ac!7 /5ѩx,݃qMC4TIYu1|u'z1PI$ V(  PP%3G@38. ĉb$NlNd8ldl^Iۍ۾23?rnsV>|Y :Y| %Jl**|01T~ЬW#FZ)C1(dj`1B.KLqMU! .YwUmx>XzflgTzyrp JV#|1/h.0MU̕swJx')Tv$ 2חNM`Q`=nKZ}w&"Iq5fZB`.[[}/`.Nek֥0e|¹4˜ǰu6܋E؈ .LFm>eNY] -hl1g,돐ݘh z`Ke ;`[n :Ykmvl1Bu]Ec݄n_M{7<{TcZ\^trp=W5=~r`: lfj\ѽщD։щG'N,SnЍڻlPH},},/ 8_8]{\=Zqm$#4rϓDZ:z^6R!\>5`\)1zK4!lQP hbNVWv1PbV;f!E sX )ءc7{DSչ" zK;"/]%WMIVS肧.SdS6 .uBI!nZA,@z+y/툏qj%DZxʝR5:C-b6A0M=B[okؓiMO@+˺ h"u[1Ebc 1*VS./2^ƭSC_D`7z"9!/cMa!y 2NaVbPۖgнIQ?svoTQ9 D&|U eϠx>|X2kB"n5gݹBbsްտI'OHBnY$.K[FFR3uYk4-ifU=c4ӲZaN0pS$!#@kc!ί+y>D<ֆ}z![Ru8 eAӰ3[`u*o0VJN~5TB GUa5S߹TG~-ЯBu(pctU|6<% K@eR ાEɹBh5,cX+OY?-Wg6=Y& ЯZ{[f3 8\WrJV\ XbREjRrc'y/&W nQ*`>cnq 9\p4yU9<ΆST*W5tA{*Oc3|V73|{1L)}J .?`RR0j2saL}H#A0&5O.$yQFrVpsj~>ZUQNКPl"S"gGXwGܝZw*\6s~P/w[=OQ_\VN'T7rh\sQ2[㐻Cso6L^R$\sz csrN NY'bAAK3e[`Um*)IK:(U:uԿ;l:PӃ1u֑QK۫nqt(굿ϼo(m&n:ヘ=AͶ@#;PdimLrE)*n" ݨ]v;Sv{%ŊSE2PVapWIKxH=Pol;)H:,1< GQ=e|Du\e9p =jk^G҇T(ObGod8%$DiQc1no3<5}F^C^3/v>!EBYx3J4T)~}]pgEic-mQ{6/dѧtA KiY+^1עeo:.V/2 lMh *yL_8;byiy_ZCʄW˟.(@NgL%վS}\cϊxNg5~֗5 9w?  Hh_svN嗅Ƣ= zZz;xrYO:lb4dh*q99lՃw@X c'/q IK#!D4c86#8 xIo1xy;5.KM;x"߯# ֽ]Tjh:EU-|=@f~z1TLILǷ1홪dU8v hb-H`I֕K`Xy r[DDA p\T`2ЦpV8(z1T̴ix4U$i O= .YүaXqmpl5dQh%nQ(j/SYҮWO7#9؛ lo5_1ҧԒq ŸCsqWFQJs[p ]:j*u'MĀ0 Z9#8fKp_½ lI(oEoVMYg&2ӀRqo1aS[,B|0HZ&6GZ{ڰ_9.w`=Nth@Ml;l𯶖-Qw۔\^G"2>m?껤Z.M]WGZ/":}ż4{»3u1=d_?(5ݾWv(0{ =H^k+G'p11h{G_WlL;& $f[;0c7Aܹ$߂DO(L;\o"s}IB'!`GNd)QW=r[0EH.oyX7icMㄆPh0`|[I $~ KL]Z">8IkѐV[ L%! rРnG"qc:8;Ѿq"%}7-Sx|OXu#O[R7$Ur/cJf@BQ`Fg5o }OQGE5K] ,Y hAhwh5qɛ4bUV+1OGIʿh>Gqz??$prOhX ')m/'LxcE9=fz*Idt#FrI/mpY8F=N5j@Q|) 3ܐiUa(I1׫Ls05Aqr/Xu[DH~4lic᧾f)qƢ$/ l;Fve4jm;p1UXe*u[}pw6RtR-I 7/xAd<Ӝ*;N?FA kUa#miz;gM`:B̞T7u > }'vO:jKOز/:98Ce9.ԙn[v&.Z]%TBztΦ9ʰ.$w`l.rȷmE{h!|UXX3i3 ?4m?|A%{poF#0 ]pXI|љMBIe. vzl`P4b#7ٕ($rX 1)Mjn!k >0=,ƇQ٣l_)<[]Xlfm30c54Y^bK=otV۲'˜oEbY2_2Ϫfvp3FWI9s.N&& U.mБ*ń,;_'㬉)q+[)gF3iG럱Lf*ÆFgF'{49-$0X 9Gyܪnڜ0D: ]붕zZሪ]f^7#tZhBPl Ni}Vu{[te $Ԩm)mn.oBa`Х ;*g*ƣ/hwO>ꏽڱ?0wӽ -5EDl]("VAd{ "sDvF=Q~sf!C `~ˆζV_RNQLj@ Rz=ngzϣUFUr@:ZFs,5`7"qf>` S ̤*+%qTT`R "f UĒcƶ:X1@uehlEƬ6iu.}FdvU۳-d*3'؉5m +EVC-:Vq\C)V!ch }E>d!S]@Pfj;0)>gi&%*FUif~VcP+SL:e],IhNv0 ΂qTyJ.iZ7 JJr~2BR`Ӡ+ùQo=hX@YsgPlNEs:~HBd8^.=* S+W-n#/F(( ޘ7T١KxB\c%Bdef~d\fTA;Asd|dUM0_`oS^yz )DVd 슬Q1Tʹ+sihR=zg~T|Ym"Bڡ⼵!8Bo`NC,VVU[^I&`= 8U pg#%{1TlmGAu^ wQ,~,,DuI_oё3 d]:5gprmk2v'׎&s\;̵ɵ\{\{̵50J S<)6YCN7눓k\G\ ű:m;'8&kSӇuuaV7LySRmQqdnqBko:Ҡgp2$ġI%azcx k(ʸt<Y}xgtS|S6LyS^h"k`E{tC6'z Spnirq}IL%NDA,^wĔQEϯ_z"PJ-`e'-eIgԨeqH)1sZjbrO鳗׫Q/kPKe̛NU J} Za8CV؇9ۭఏXa9 Z5e&9}gg,X,0L]L|Y@Si8*5(+|vY{o}E~٢a8 ԗɑsʒ'z<=Ҫ<(SBWVխ IjkU?#%EM/e1>7۬8ˏ^'p.2.spHtE2F C&3 59%@F׳c FHO?vRo,™'fkȣˊT),Vdbvt4'h10Q0al##M>RI[U&P`\b*! ȾY[zJW+|z6lN@YB[%߀D7)/^sKYČ׹|ZUoO-.سWQH˦8 PlvQԉw;zSzk';ö~L(o(%W2 ~ʲuX+C& $L>ڌ$p2+VPlZoJ~^ȉ}PKXܩVfkâV@XmG0Φ66G>g l{Z;Vq]cT\I{ >,UԒ\B}Vo[p a"JURoۑ%tc}ߠ8oiZ/K*il첺P(_yVJHx뗀 \d#~ֲd&D)ttHߜ ӼIlj{><`qao;)1&iC? 7P#r'ʠe%6-JcMĈڠRL=mxODŽR`ʲ(h8Za4Y\zK?{2+\ ۬8'ر XCq{\xgl;m'UЄ%W;\qj\\ht$WJz:'WW\٩|R/SiVESsTp*QTgIײAKQ91ތ[Q<5 |uYgV~FWj8gk}ΗWJ:D54PыӳS.:nf+ VLNe.CG>' ;Sr`i|0QZ+ԉ:5ͅk!|.씀;.4QMC^sMIxAf(0@4SRYHeA)FXfVqD }6X\}U+BhV9,7_bǂl\RtKVnS^xVUd!Vj{Bg>?ߦ-aϷݝo > ެ!M+)ˌtU 2 nMlW!;THJT!2Aݬ&{CE9'[fc.}XrFtLwX?;O֥}Jo>!KhȫӱLd6I{3$Ó/><J{[<{c-/\{i,!|T11gt³Rّ UK D5guXV$9$PN=eJ4K[+`_ЭĹuKb -9̸_]zm'u:O6YW^㾱~7=bo/fY+W~\#U3ZśaEzX Hֻ 5(o 4K|gUu*/K h |>,h4mІ[(#؛׎ 'Ҩ15#-2E쥠(~3kA-Xa^/GA{No9;5AY y3: :ϕӁ$ud4 L~-}:xչO66T%`2* ݧEJ\/Vm.}&"Xb WP+3=kg<i|㡻\W`D4|Dž{4bBr}.Xyj%T$Q;ٲ`j8@7y`My F) |[Δlwе^;uKͧT61uӶ^P/ -V܋JV5'JZ4fA8:XPxv+|v=[ ѕZXe/%#t2:5k~"Qna8lZGOǁ`q9e}M+Ϫr25=w՟WU.C+:ic^ɗVtbQ#sH(1J=Z$$͕9B2%4Q(9BKR1/l3utC"ˀD1H!<¨\5`ț&;TSdt@a2K/T*wSPQ,]ƊbI#S.0i:.;LBd2EREG1P5U44j4)RdDd 'DA%E9dMŐg*kErI;&21;*emn4Q#dqC#j>"2lZ.`i[kz .N^2;HNxH$535;ɱ髣­ǵJ[;C#˭s+މRNҩ+r8r~>B"$>gn~Y:T%NxdYz-nIƉp1F-"#cXbK2ݖqyLj_KU wG 8+X˛*+~W |$ зTpɼ7JQǵq ](RU#M#&ѩČ]qu'bS`l)e ]JK׍C ZTD )v6:P\ͻ t꟣/LrDv̂BopA<^TFX"F4?A@~vi q Rы1,pklZT 4M=LzoyNamݭ7$Nzp( L~t3=q޴ynCBQGԳtZY#5ža#IԊkMZz2 Aܷ1d$QcƝX RfDθω:]f=d^m1ӪUN'=ܸ'3#nmN4O4S4mLKQMӼA]th>֘pfD<yL3ɞ=cȞ7#i>0:' x=!yQ8%6nnMVh/ ظtiƅ\ b6"BϫqNf*oW.Kf)?{Ӏ'7 O{U &#dc.Iݪ+44yťyELGL7vi5ͩSiN44ͫYto=zW]zW5"T:>|JD4qif1tc.M1As1挦y9i2sP ص{Mo'OewXfC6وtLņX`xEwG2/{"A ;Nm8mzm[WOYuW-.m~_?3TBiLNؼmm. ŜȎ[ vĽE iey~Su.(DN/6ޝ n^ԓFbc7\tP-¥Ԙs.%MAԘfɥY4D3y@y]6&ZLˍ)gP륺W.K{g񩦼TI-aRj%e%mv3]w=F.-Jx^x:˲!=73ytHI.GjȟCU >MĴ&k_yl#)1Z9rD #|"f6n}vMsw YޡӼ3P-TpIqHw,n uӽ%||~jτS5e5)4׻\~{Ṿrq߫gJ/JɈY뤽/b~K>w|osL4 'HRUAd_i#~ ꑽ~0"~j dkA#d?RwhA"~W=ߩ~4"~ُj dُkA{#~o=ߣ~_ ~&x%pH{҅Lo?p\?i^4mG2lki3CG|!ˡJw׬wÂog gg5ҺO4ޏ'#hxcti֭'L~` ^7鏛2rM&)#uPl-炝^N&w?ѷnܷ?5}|Sg"L>Mg"z?1"?g>WT_hg7ܦ}VW#hRc%M#hJcMW#hZc5M#hFctKMoYivcɥۚD4ǥE\c4?ߘ4?i[Ccl /lg\l4Ǻ5jgBYۛ7KHV޺ BS dS]B;?7πBd,/FX @8+d\(fОj׳WUYUY7ʏ8MLd);Y>q%oRg7j0.+|~E)Sn 2dA<˞åBxY=>(뼶WTy_j2&lePFkjet,G[5g 2@{yʖ ~g&dO;0JK<\56`TBRLyV:kW( N%DA㎊\iY!SWJZMvU)1;S'g7NwcEﺌM,C;uGV,u%d,+3ry7b#Z&w{$${0})$zr`*nҚIل}Z3nRGqU_gZ#OigA'm,9%9mE[L3rJ;|*WHW5-``;wCX4B^vM7}w=rM_Sܞ/| vMT0LABEhۿ[MhoWܾeNoxy/틺1wNܡ:q(! lQ{#n74AxN ?b:ꐓXD긕*aSa:ASN"RIu2"ՒTNSv:ǚn#읧1 ><<ǼaR%5[u,co |yπ=±(^|&q7&5%:sUvU6j3l(y GOZp 8>ƍ!W.܋+4FMhMPʪr){[^S*6U),OX lQS)!- QY/U*KL9vmLQ*ܺJ7 ᩭfuYJ \-[⺨ Q, \^޾LW-/0Ԫ;U__Wk`L)fH 59n%U9㩹;) ͤ[ybaDS ]I6A b&ޭJRNkl5 !Oԭ0f 䶞к޽+ʜp2BV ok{A_cKTJ}:O=Mb |DC)i"(q <ڌqH`zQxX}mt6hm,H/9r5*>ڜ&4 KҮ=X4h o~TRrXP6jc8 -k%5=4i3 U' DAʲM؋hO(xUBv^ީﲭ %kmdm"ŋ>SnU] LVU4~A|o'=6%PLk4LơqSqKR; yGi?d9Ai~;9BIZ]R, 8t=o=\˻|W=njIk^HU]GNO\~`_Y!CXҫng|H{2Mv=@oaDraa#ؔlrKiX?};L)GpzOi93A,)+_g7Jxy|AEo  6` IlKM 7(]&z~daXeis<14: ՛m7=&%AKy25ى*,7\rgxdo'un's(VZsŪsPJ`'% Y*k,\>UZ)SJj/XnH^nyyb~1[00(HyzF5 tm=b:zꙞ'6{&tskRe/NfS[e/`1[ԑٶ1puf@]eYțܬ^trJr.U׳[ oSj SUDH]Ζrż D M? זRUp;OqŐJ.TR.&L>G̀ЪbR21PITɿRBc){b(jP2D@Olq~({{ /A 7a5Ҝ/:_]!asbRiЦ9ϼGtN vcUL],HnlV 0(Z/ݍXR,)fZKCfC&@ycsJ H(@4H+*u.)NY~GF؀!dUFD?~vT*T;VnrɖU[H3NA S` Wd t-Q3&.i; hk7*}.A7>  19q=XȄA9V$;T_#320^ǯ2O Nd*H3ӌd~P-ҥ C<8|@iZYנ\4Nvjˏ\1)!c=2zگJ88KUhާgB;TzNiE6|8 #iZ^}C`j^ }eyHRhB]\TŎ)\;xa q_^3)r\d'db].$іDr=J \G\q[y'li66F׿g֖q1u/%MVVD;(`JbBG:r#|?PrI8w,X%υۈ=I :XI-MX(L*[lg?]XUE=k5f`ݝg 7Al&g[mҀ/H~n)/;l /QR7w*>~ ;Pp/GCA ]7X.%!χ X9v%23eG s岼\Tyjm- +%3,(,@& |S'^X9v)%!9‚x$^PS2$&]bY DTdBA)@~8%RٚWeC͎ZI{K wJ"!Ă(Ӏp/pl.]X-/$ݏ_fqL<*nĐȋ1q c QzHoc1NW˜}%&uK5-OkkQWxWGb[`f咺^7vx,D'P7|9\ -ꀏja t7A1!*=0M9L!4"p$68[۰ƝRf6%&Z ~G(Ta?Mgװ&3v|n{!$k+`O!!:r@␃:$/,g6Bmkt"?2@H@6:H|tI/R#jqV?j|NNrۡ .ÿNxSVL{%ydt}1cVmuBi4ÌqvHƭvzԙ0oϱ`,əcN-Ǚ =)E|]_*M:j0bT=;s}I&l>lK(@&7n fH*?> CHFaYaS9u>f5 i6t5'1 t97.Nw@!N86CmC;KGb*fŬ<6eqD?rFx&A#|> 4q>|<QϫS]:0!GxW}'c"f>&b}P""&*ݍNq4E`lQ[V,1$ǚɨ}R&2KYuH"[V(EO07v'&[Q^=r6i*E*$EIf}2XM aea l|Rw`bcgmIN]ۈ^W> ,HV#'rA}l-b[͑m]70o )>%e21T:kP-㋕xZ*N5z>+õV^UyQ-_b5Ġ7}DLse?WD!GL1H*2Z+\I3'OS*(kD$FȬpNUdKq&PX/c78 ;|ͺ![G4u߲ըzzD<5XuY[ͻVj;--ҏ [N|Ep{0VDJ_6WQk)~$)~uڈ&Wi˶!-rwp ųGc0.:ٗv"G_M4*h0/$sR%)W E  2h)G'HTkZa>%LO=S`H][jM6ocBiB$@JYneԢʭ@"Y,/W_$oEȞJkO婯SbNo.8eŒWJ7JmfM_ۦسi糿eLxZvln'Y[!2L[ߎM!:Q@Xݙ:`0I2R#@AuH&vl;nYKXrT h_I"IT~ՑMCt@ 8".yD2"& qb+/Lk3*mWUZηDT?.X 0]N۞ҤG:5rF7&ZQeKx[u#=2Rh38FZA-Ū R A~Wo{{zxd+KRa|dyqhʜ]/e3L2! +Y$/Ԝes:Fw."P^;Vkʥj/V?k9@b_΂.3(u o}h/U(D:|-•Hz YL8-*^5-Rʷg{dc|M >0ZM24m%MmU۩̶%L>zRk72E#d`㴛Ao EWzV(Gs8\׳6W06Z}mw`O[M Ǒ^8?ۢђ xsl&c[@+ej$Z b*Q,FLFS_OJ/N\KOOLS2)`}Rhjw$mWsX""<ȟ4ln zRx{CFrTbi('3%1a~tD6"M7?π'H\am_aiR1 ,隷X_1y7Ǹ=]K=&UxS/$+t'0_ѫtj Ǽ>X>b^ݍ1o=@+ Xƴm/MT!Xh/w"ۜ14^y=&(E>F}Q'rQDۼUK;@3 ^`ut8b$ 'P ՁD町gs3"&jEY.djbpd}&9G5_nkHl\hG=霶jǁ4w ;Ӂ^xulYE"k}/pfkOy6D5a-zA∊L/j9VLu3+9TgHk+8>@oA~6B) ⬒3]'kUx\{ Nv=EH|J 7Jgf-FVx5y6n%-u45^A`H7C$ZXGΚ!(5$$ I8!\k:w cg.x*P f,vE0,[H[ޙu#N4әj~o9IN`ex/|rGs)JuD`z>eqZ= $12!iVQx﫶M'Һ1ncx?f#v TW HZx`ڄIf { }M!pU!@m 3㋱qࣄ4\59D3L&sd\mS?woFJ$˕EVղg9v6@Y7FCq- ^dېNQ'*Q?pp≶qK-hF' Ġӊ=f*vy$QI8,[[l̞ޣkMB:L ըA.Sݸw'qw uNN_F .NW3[jtik,f࿴NCBXgҙ+՛{_&KE`Wu}Uuݗljau^VHXWWv+Qȉ$}[H=KLNW:u.(] QwE.et>362W7Du%ET}a  rk($vn[v;es"Mv{OʫL+ ﻽4hzF4nou[U2v}ILv(^+HT: *t趲v萭Gn_|įMڴ*xP(T+y^r~,3{53viY1+Aʩ/1,&QQ7 .Lg2.LelUpT(;Í }=ZeeVoleGiɮM֭u멛4;KC3A1C\,ċBI?)x5EPuZ2eUJ>JƾO.hEx҄0Og+اZUQP={3K?aI"^Ml0+ /sE-_o,5T䷴qvTq/M^DD">/R 3 K B4ar3p=:/b xSdl]RXaS44 ZM.c^&bS}MK^XӺe'*]Ynq#'b #NIE' .HjyFl=^*mPSB}86qR:5[ǵ&>-!y6V E˲Ϸ4ht>lm$彰2bMhjwoƙj6|Rb6gJ le]v^$VA~bo0%:\ebQ%+H΂Fx {VmTFNCF@/w7fڝ:CNU`>pc6"G_HfXYmr94- h]~B;r40qG(ۙgpx zMӣgkT^؛U $Izc=ѝ +˄o5 ɦx'+mv'.O[[ea^:nIy YcLtC. k؎fa@D&كORnٽk RG2M MqVp X:1x }耜DhHds w}N5NM8R+eUi heGۍe0úJ1Wʛn8Jg~c=LCc"y%rr->eWݷa}=A΃Op,u/e{2޻]Gxr}&řF]%8vx^&-fb_~ۈuztzT{'_KFuF;)lY1oC"nIc`06DDk im}>**fbK`ުm[a;&'øl C#L HB ~^iTSc8E*X5byTXJ?4Jê@o^duvL+> 60B J1L1ރjGlUޡN{K n1Gڬ5b޺R6^2w\r1,gdzևclHF*f߮mX6 P-&uBzk8ch'>a0WͨP٤:W>%,]$Ilc=|\a @~ާ ba{ w[2ϭ(\$n ^M__tt\#>O+my.;(mx.u#@G(742-N<¤-/0T2i$$l:Ce„F-'DSDsn$)B\#UUn, <Zqf!/OJ7 1d&9*/u]͛Shz+Ur-'cV4BPPܵؠx>Pxl X!Vc~V owloe >Z2R) Εb7";@Vb_d,j *+Yܕb5ij.?zZSr@/ȺTeX \Vc66Mߩ!йϝ; Aү{T5Qo "wKZ+ '?c(a7maw*T3þyPQ/Ƞw3̇ 4`'M8g:QKvֱفS `gE]87T ve@콾I٧$r ѱd_ w !O"jQ~Pp-M|$Õ8LG1x^z'H=Zêܓ="GBiViLkqNwR,3iPxVϡsBi$lځ %[reGݴ'}[rmrƘX>VsmtC׭nn+1]Mf2[% $Ox\FP=:&PFY/k3솄5$t@4\$vq;3׺hm]tIyMf頓@,hF*>IUlS]ZXcШؔMaR7ni82i=Qgq%lWuige mv*4lWêaagp"OdieWcq.d,FX3L f}.!ׅmr ~_sN碊<3|RsQ<o3G\uh[L86A^nϑSMx.FqgF'~Ǝu{QXpw NȕxGH|vW"U}"q :N^IW` >yDQowgNjߤ[";I*#'ely8$0 Qko$BՐXI5?zA1x8%ɟHn-*N!\jf_ľ"fq "XHZxjOmOg=o_'A%OٞlaX(ie\DG:r[Ƴ?-NPq鑀<u3qUȔ>kl ٴ1ƯMk0/2Jo[zl=ol|Mˎ?7Gk~睡_q&MMq[.]V?zo9M*oQ7Sryy&KvqVe ;bP_0~ɣI_-:+5O ^,X$2ceu&TVYɶ߲\;!:L,Tǖ屨OTTv1j*Jw>&i^k ,V{E.ik@ZH[S*,UXtvG`!Z_'z׫Rl#+gw\-K.Km6c|#e#YQŐwieY\=Qhuwo ԞZMB$!NMx>7e(\:&ںzq:,L[: =Zl@a{70fn92F@Z )AiM$/3%~@لZh4SOn]~' 1:NW!][4]_ | Dy:̀$-!CfkFtwW^N].5֫آ'n_>N2J7an(EyZONS*Bo(W4KlW࿻UQ0 * ڣٚ4w*{D ۯN b73t7Q-yٕl)Z.dh-FJ4(Vdj[0%Tˠq_amɛ.&/fK7*|\,^Q.SUߥ( VX5$L5 K z'}Dw9Bkiw>%FlOfe\1B~tk.*2$]mykH'N`rD Y!|f6vڞiH*ǧ|wh@}Ľ歨%MzJy[2}Mu7ońv# 2dpcǵt,/I8 <ݩonb73lnӤ3qwaMLi/v4O;|g6GrcX4g[-\0^hxUJcV.W@2iڳ9mx:?ԏ}MTM.Z /lF;2"=xFPsj b moa$o#ܭ]_YMQրwwM_K9/$j`gzDN܄Mj6jgU@<$-j(ܨRHsI(x攠%E'")?j%ċZP<2pʠyE+ .Cӭl%d,TQKYɃغy;C5-} ]e=ʆP [XX ٟsYe0旆 q R20xݼjA$Va/`^|~P;b֐ckӝ P m d"@Bd䴄?#X̓M˺}EGaPU?! a\aU ` BQS]QCYp SՔ7PԀlm,acqals`)uBa;p@ fDOFyK@W)a y %FW*D$E@ jtݝ-p7Na7zl8(i'ҡv2ZdJ+<a6Z05| y }Ha̰‹QcTTm9EA*{F~}?="s?ո`GXC~(:? 0`EyTpxX{d~ h:&Y-t?z*ŧ~߲5C6qdUz$:<B(lHa³m#;"x6H$Q9…P"f!Lp="!>Leb-M"US|O {{؍ C'H"RH8mGOL8ZL8Q(Y*ubب1 e`i母V/.$mLu jxh]a_GdwOP iaàt_ɠ`ejQ@e=02m$@V۱]M8 ɴm~/9N#LMgʿP/CG&D=P'ݻEܓ3^S1ry:jM":Ι>PЫMDRvqO~6l^k=F巆_@1O~[Q ՀAd1qtu91~ٖ yRÆvb拌K hJ?K0Nš7CΟ$ .Z}]D)?lv%ᱝ0BnGY;M}"m餡!!M%6|,*FMc%2m#5l ժθagq02 d6G}>97tRCh>30* mٜgzCnb =,A={СЂ8oaZ]aD8l2`7UQ,N[{o=#_'t[6?pF?êv +ϙ Ճ!5 S- "!,^ & opJ_Gi = YyWcr`zB?'^HAi2tA@v! &<z5<$HE0*Xu ! iUXאvn.;fT&xmB*Ahvt7PUU?o#yCzg +Ȓm vh.T2kj"B&`im7Y(Y? J'< ndHaG[=,~K&*K;0oӸe Uذ63XÀAeD Aj嶽%FE-Yƌ sdQ%VWqQowV|ހϱq )cBvQÉL0b ]-mIkch1 ܠ$= "GqZX#5*286c0/X6Is!b q:~7@|htd=6΀l2E isU=p8@x]U/XBN(@ A %zG}4H)- +o/[VhS&3Vo?+VwvtG { ؉,I[k'eBta:]>gAޞP!/Kt!erxX^o~d8Cj6<5lۡ:h68\K*#A=L20tyڣbcAJ(`z\Hrv78?gts佑򸧑8h~`X8{vAȃI@Ed:BuЫ27YذꞋ+<ƒ?\"GK&ݗu[ia [VRCJF 2:0G=%J+jz6z']Czh1;Ar;>Są@ v Cie@ӄC3ͷ@#z$!5J$\1k '๰ѓa蚵яXW 6Mat]#-Z#sHA9<:"h_l!@#UuX_yvQ4 HȮYymymk@ qp$X;"k"tuN EE {/88XMs@Pȟ jD{O-4on^ w?aapb#Σп{) Ay`4vC»6yAtp'4 `J6R`L6w;AxEѣfo WqId&Fz@HD'wÛ#Xd ysN-{WAN6G}k\t!$N Fn-U0AosE j\T:Xy0׷_o $ɑ OăUGkiq?.Hm逸UUȪ!S4pݩ[MJT@$<"2I@@@?&>%Z&$ih#dyK~]:M>[hJo@{D8".P 91:T|e~JV攤$F+ﳮrPf>e}EvWE\B:J kM]NaR e3S9n{b6bdzksuGLI^h'dw_+Xз>QwԊ,]|bRÓv /XǶNę9@u7=H?E+󧒥[A2WZzErCSȾC]d ?!@gAMHU7H Γ `R*thi CrWAt睺?<;HzW筤 ΜQr+7H_k[P\h'U~ijLwE0/8LۛL0G H*G8):QyP)_Td$Jgۇ.c^gXn^VJ3!'җ L]i#yv/ːhb@l<#~E^pG=8ܻbUQ--oS]%xqwwk&V |[X{ ^׏+:gp7,h[H4atJX/,- jz4U:(4b@ʿ2od.-,v4íp]q{6@C;։"'q8@"7/)hMWDDDcp]kJkb}c}|;oNY&KY!$g-@IxQRK@;pt3uAn7W!M@6~ 0l.^gݜ]0s@c9<{,^Y. * kޒ8zk3;j2ܓqpR6N] {ҐN4hHhMA2Ko߾sp?:C'o<{6֭˼ ^f R~q^zUDssϜ[Ò=G9ڹ88;yC-Ƞ.U3@`BvȿӰ]TE,{2AHЛXS XC20<MXVp#>V`Rh9@8iۉYkzШ{,ͣoj 0,k&ҿ%bx'%L"![Z% BBЀwVτ,#p%Ẍ%\H 0RmǎA-,gV1$ %\Ðھ6pɬm1R%L:WbwGZ 4 p? -l"TAoM=0z6:n!a@[ & D#ݕN­n Fx3V-!A&# nT'@ vŵX@L WF*N4d'U@~%O8}]0oH҅t C^@3_-!91y5>Ǡ vj%$3?*?P7Uh*B BUQG:Ѐ `TaPEDucPE ܏Nfm m}REA ]iCHA)p?J8U 76lAA-ĩawj ) 0 U_`ːH;f Oj);2JZB* _4t;=*M }~`-!5}N D0 H HߤO. Gܭ%E`hA & TFMn}RL{Xk 1z;=(jHѼGD[ PJ}{A ܦp**_e24R ZRu'Ha$0ֵL2~Xpn050Rw'mX$QPo|(f(y-! ]w; R) O+ V il`.L <;jaw-@+'As$;pB-!w`+HΞ'b(ap1Bj #ʅa凁K@*Fn\a ^`}^y}CSKȅ+ށJ?mtB Њ%$91ȋ@\j5k]4~>En %XrZ8"!%hOM%AtE^#<<]Gj^s1f%Z\4n$XTGoْ &u]k&#O|f ]!̅II Sm|Yrk%NY{ '^by9u¬b60 mw,lV;خlr@4 P@@=TJq ,ǁh,ǀ,q m/K0H.`2Àq6`@111td2R)ɳBd6|m-҆0 WxQ'E`)?'D=p ZBA= \OH8!Qio'B[G!ZBa0p7` HMa`o)>z9m|_7|r{-s9ddV8e4ή/`oԼ0Uĸ*_?/?uߨa|U vAN؊RRzB&*ʕDcR[= ПbI&FEQ#*r``cAniIQ|Ie5a6'2&n\'$tUaJnWgDmn,8t boǗsK`>~.o^ܱ~N˭BBk3Vݿ=Μ?V8rqLfqK PV4O/;|UGX(]GE}MςumpWtpJMUp^@~Vܱ3Qo<'2+]>O*S{ξ0& .K.RR,_%|b0)g_.1 Nq*ξ֩)H7̇+ޛk 2_>y({k"M,'2urY:h&}rTEqRLƥpcdf+옸sb'cY&.+)ݩJ| OUiE) .o}c,J:s2ʞfrw7U,؆Mޝp4fL!G/iTg7 '3}OV}2J=c,*$k}@KRv\)y y4Ugc4umd8޿%d]$S]BE.3vK[%ݚG`Psf%rVYDZ(|W):4͗I>j]wy收|;ߝ*==u[* E]j 4AJ)A"Vo2( />0rK"g,߭dmW33=,kK,4q-3!!|KETjiIț /nܙMp,\[Uln]{q&ىd#?l|JUf;2~A^Cs_S0\}B,u7xbWƼ=/ׇy-BPpXE2+~&zh  Tn:,c22\5_*h )8wiq6zKj3W@ws|)[ˉ(:eG"a~f@^?zM)GQA->=obU7]u&Q^H%f;Y兑*zބy#JETO- -\KgK|'͌QZS|ȣ- [?p%>kE=JN$5-Wl)B8̲zG(@9` x*C֓[MA4^"wyzYRw@+Kn%N9ӦZ銑&V03:~ pM "[fU[<3XxDЏC?ږr|׸X?ʦx[^>`BPnuC55& ,+W)i}^ݻqd蝉#cںic|%b 3zwxRS=S+erTn#&m$cGq1H9!+ygey!?trr;c}os;[?I?LCǚ}~-L%"=hܷǞm$+tլ=^䙔 t |T)Z~cy*z~%KC mYF~bmƉ3:wHLźڹ⇛x|`П+c&e) :l|ZLgl֋HEB!A-RlK|Mk1YEbmIbB9 @|+uر+}gSBfKJF0| ˠ ^;IW6VnKgFMJmh2:{ΧU <ןyq]PS:d'q0H͗VJwOon ʼn꺙H78-bP͢zMKҝvCEd>^ʒ!.:kot[g7Ǒ^rO,g9iF!fJjq_?ЄiV>\̕BS&Jg9K[̤YN8#Jr;YPh#=&UߓƬF <=0M5-A t8:j;:nߦxe 4gӏ'|&^kΙ#KCR%*Ny9r6*ATͧ ٯˉe/|~>*vy.^wlP΅Ë=ni*tk$֞U4y;G"<ٓ v+VC.Jf<%ld3U5SM)UnR٪7PVǮ80V?y좪yh\!)Tq=2_=~U{Lƫf>4TlLreo %zvČR9xXv+oh\˷1/n<%yFX"fѺqa6sa8W 2N|Z/] ͐u>PV鸨vG'WdoeK$7w06= )|rziCk6/7Y~kYTɰmH|l~]$]ץ4lZkjͷE?trftY%zZMl:-[ezZTj6>7Y[LڵkMIv uS$oCg'jžg_R<`:Mˉ:­wl^/rm%G6tnK }>]`7ѓ |iA 7(* |$_ ?XHE.>r)W*su1NEBȂ//x^ZN ϽQ_/Ҋ#̫hÞC:/Ugиt,Ȫ3o2-E<}j֒^X;`ȌG Z7II' 8oURxWG퇾^_?@Y8a#R*5ldutغ^{;/q)w9ڈs6=6Q[HVUK1k@f^1'}f_W3gM!"nժVU R#oXn |߱]pL#Da܉|+,gON7:/(mWwhZȨZĐQ2g̎gɛ3WgťۦL;Kg͞ 3Uz~'&yiJ`!ȻQ։l=~c'~N,\J’:eqclzCIӵ?e2IDJ~t)iAWS=lg`VzL ˦rn/{Xf)27‡6|iA+}bߵܶ 6|8:wEE/gŃ$V KO,`)Q"LwL#?[/mYÇ3F>wI2o^k7dZiRrݵQ]UNo;6Jb&/q- 8щa V]C-i/ȼ ^ZKu*z~|uHO`L^۞e&{7l;![U&a/4\WxU t&s7{b=ϒAk#x5]-Қk,TuGA398S@ډ{`uOצBItDGyU2 t싰8Wyc8/!{v럹DW4,`E<(5W$yG')6ձJ˯8,{z[;\{Y9P_[f ՝1=<0Qw 3},,Hi*ce̼b%WWN i%z֤ᥚFF GKF.#gt"زctO8;7[$ QVb fbWܟA$@c*tGw!&NzVkxv?VD"sX8֏d,xpBsshƵx kGR T&3##dEoU#Y-6xϊp|4]:{>ҰxD3M: -^zcpM6mGxԌ~(]XN28^xȖw,dweV,KiA`jv{!.eK,V,_ZnD؍in3H8x|6uxBU ]Ywo;l@btgʑrb Mz&b=cD)FF9odIzфɠ@a+Ba5VeѷWɖ,vwPUt䀭ڄ`Lh|rsϱ+Z!FPlSq;NB6w] 2S$Q]`6J9'ljXO ~1}5_߯V.KGJ35+s9_Xt3%aRM􄊚b͜k]Z떣1b2&gC6<=SsWNG fb+lՖlyv~Mi"kZUqqhb+HܯGT ƽ}xK91 ]?|`i kcF(a,Y$BtXZhrHT-lF㛨Z=.L}qXf,(3n -ΜǵBzū0kŤy$. kgĿG=xH(yNPګh;fU7@*47 H9S;#o4[u[z ٟ?/~l;UaUhs92I .6X2"5.{>ܵR-+Ƨp:ٰdƃa0z驪ub jsiooN~k>xZ(uk*E>[:ke|[H5VkNL1̯$}rR9 e_[hw`܇XC/R3.RoIRjsd%̿M,g6;7pz~ayH|p]U$3OD,M1D 6:;ʟ}>JաP(_x6ӵ҆T°;#LtM-tmzqHaOyo[NMŻ }Tt[}/q1 _k(V 9Somє!%Y_"Ti ]~l ȝ#}v)iKzuG$-d$wUϗ`0!/uOZ(>1%!5rD3'6Fہj>ZLX߰HY(ZP;BM30c }?[F +ta .VKATa7o)ȫb'̂@<-&Je/cWo0ܻ/At[Ww0uY Ŵ/XLU1@⺢9+Ӣ1Oz95 bzu>>041Lۺ8iomymޏ0Kz/:w~ge <NFg,χ]ɾkO9ҋE͍/nX*ChU܋"X`Il+<&> +o]񌫡\[ "YٲkV5r䑦BKb'\۪il_VsBIZ3[|,y={7F1qo<8&w|ѤL}ęGf=#.˔YA&o =%[Y> l PG+wW\:mf9"+H%_M2ߥYoRqZ7Șq?x&+Z 'g2)`bvKǺFeUybGnF u~I~B?|*Vq3Uѩlӆ9E ) oonAZ4ëW]~ gt|5Wd;.cIrC[c^=frF23c@i6S*1g Tɾ/ݣ8FW-My"E-^pgkMwSՎ<$M|/ξRHiY3'g\*_U PJѺȨ{:v.sh,ɬs"2+=]b%YOz/Y0y[Dunѯ%7+' TЂ#,O̒x1$lDߞ<<\n|`Iˤ>KkkzSn\^yHRF:"*`ݸ~ REU2dݯbcgp,kWg`ha(t&swĭ *?f]o_Yӊ`YԼX&'d$ϷULo{Qg!l!#VhwJnFt|iI&BEgjg$ؙw*,[z' ?|[ql3}Z#,k?M/n(Qq%䬾8J$@'|c8ZpkS<(8̦7ur%eCu79)g4+3Y LWG8$d7? .]d-ͳO8!orr =J͸B|M d:SI`< EU>__YfS](y:u9M>?y ߐG Hd޽q j!n~ƻ$)9)-\$M ,;jdY_ɦky6u+Pvcq *{팸7zcHx8Bğ>l :!fJu!qĄ9^;iSd ''"zkLʟA nBz:KӋ_ 5si { h٨xmzơ ú'[&"x> 1͛!W~7d'$7=6Vm[CwnlF5 K͉^ujhj#M,} LzbG;o ;k:6NKs0.Z1e$_%k3)i7%gN{{_ذ= ՏZjڂ ٚ *1+?E*ʅ|KfD~ټ23 crG#Yw-Y0 {>}M_ xɕָSJw 8YsJ#c r<==8h]SW&7{J]m/d$T6"A O=?'* ȹ߂B!"*1`rwC w~Ԭ k'\'/f.-M6oJ.g*LڻmQD$8$hpm!nK nkh6H瞽ǸmUUUkê %Wy+ѱd+oc3ܢRkFԦ3^{7vb:k"&$TRNM]Yi˷`R<ŮChskjcݒx+oG^RvX>Zb:C0fl310u0Od@/O+Dt*6=FDcDOT :&Sؐ{%.*ҁ~쬍җ<DI -^,},DP珹)h[v5bY2a(3 \SSWϔ&[gDoIxg׺** >-ƩϵZ`.-k˗fV$;'Kxn~fAveIsy6ϔ/jIϤ|mȨeV&EF- WMtqDXZxz$v 8C!rEk^_<9̄@U4,QS*uww k /+&3 CD Kv8T92rWlRuOcnaa,A dY99)78U_&jkAYcN; 7ow/>].'YtmaO]zG޹`zqX2O-3J=BXp JDtT l @*_i |dzUKQ|FsvV8#_f'НvVg|uz7{Y{%O5'2Pl~O@{-ثJ`?-vqS,)Y_"vwO%!G{/ojlm«=+u@qЬz*l| ,WϾ*+zk YK*1:N/Sqf gQ${d'l${˱ᷟz_|GezTg(976>;y~`GvGfNP "%_ nr_\F]SwW3(ԅ{ɾQ`zHS{Cͫ/4ē~ǖС[i`ٙgR>EVpL>hA vqS; bjx].SNQDz>q dkNu\IjY cx׵|dUEճEKu`7bbTeŽ%ye<4A@ ۯ6Dgؙ蔐Uew}ioep^ iHr-lGގmK|^ sx\Xطi P$En2+6Kt/W8ዟT hl0'ǹ&@޲Ei >JpHhyM΃`QWҗdiC,"VϏ *'wƬ?ii K7!Y,Q%ΓSdrѡ1_K0iI-V9hZi@*>Ԋ:uʍ;gj6N*Ò%▫(`M _f>?9|ԏ7ZZ3~0JL3 @(4eUٮN*01It0;UwB0 ,M̎X:DcdfFׄΊ+Nkk~7^)⟷Lr1NHz 3-" Q dʧhVSd9+"Qk1%ڬX@_zq|gY.K5?ͺXʛZ{6;v}AQˉbD^]ëJ_`qNva T ":\NsbSz&=J(4,]Σbɲ_l;8wdfe\VӍe``+\2sD 5if / +kt"akGӋQcIc0u~̟PU#$Q[dX[2X @h6X 憽Q>Vd;zcV& xi@R<En x'{žVN @^/& |&H?\PrwFzGOAcXzk$.@a5B,kܗlA]GPum4ႍxGq <Rd`mw~;ZKmE;sOJ+K:B3'[3p*)9H0j8twG7%"K}9.سN8|9ت u$;)ৃ58W\|nd#˻0EGE>u~\eRo_S NSÊh>Ε1LN^ߪξjR> 0Y{Io7֎!Cnb1&mcE NlU`m~Ǖ5yF eX1-g?e8ߩe'{϶H7|j;̙l 6=[`3nҟLŧ_J!tD`G:~ ):?p4ؙm'dX}n'Z/2ꌧ,A;oS=_Z]&Rܺzi5~&Y?ˮކU{u;E]hӗwy^C{!%Wq|F@ nwKϝx{6ۢ-eGsecgkӁ}C)K n]G17A=e 6}Žnϔ)JJ:>kf#Qym_C4VzpsKO' Z .Ga:*rRoKZ,뾜Qj+w=sqN0YMqfhP_=kr]zQO ?nK"R8 .bxذB@vZQ$Ow뫤࿗+12A"mv}G<:| `"Q[KQ5YN k!vgh{FeG>DTQ\:q-|;kedc5J y\I IlK'.VՔEo,D:I!~ju~X}<^̺(qR Kt%GC^WOCwz8cúZn0zuWљPUsj/Y+)O z}H3'@/M`s2Xz!#Р{/aqW'r Zhv'볻yTi⸔|"{fYVR5""NtWMRcsbrшM:λ9ĸ,:,e(l&J;VjB3T4V̫*|JI4Iܖ`VQO&u϶mc`-T iȞy:-H{LR~:Y HBÎZ;gb u.~GsFA*xdSKV?>& %v~gn*la_p?*s.6zGcp:zO6{M>,Qwqc 0?oK;@ܫZ7Icv/aOTTq&upT8!4I&4ƎNS+>VIwO1dpϼW0 | Rc09k uH/ iq#uڹm,.'S *^rGzp~'/< ?o_aŞ.ffwG;C4t0VЊ9>> %>1crU)䟦ӷ2Pe&GRUn=mIEzmdIs @&f}r c>p-T#N~}ܝP`1~wQxm˘Sߔ dܧscL  }XtW-Ġ;Q}R'>e%Ҟ=qc"/QMYz~Ke^ CÙP,^ a9t5Ÿ<:Vܟ_F/zWg}3@Or#D8ߝu^p.5vϭ#Ra;khV4#$9NK< D9X_ب#>oŗ%~orXteFEr-Ld>p\_zK SN6tw4k-,Sx*Y6V|XX/?imDOwOKS\W"NR蘾o61mfΏ ~ D"S#O5K\[i?`zg>wbhYO'4.ǽ]-WԆeia|\: Ldy2~Fbhs`ܿFm\^*Ci^fh , ??.H.o/f'p/RK8M55#p=s>ih"RHcv>c ig'p᫥-?6o(RDv^A!҂}]ܹF0xdiW9} ϝ?ʔzB]0)oq 4f`5r8_c87&2 d9ʻUyk@rvuM&@\M FʊXz<4; j-*~%[_-(l5tha[ x&6aCh,+5< 4BY>MQHDЁSH\Z0:|Vօ$\*!Nc0Yp.3D`=òjmjba۴z-S YEՙB soci^eyv"@01npCzbmWJqaf,) 7~illR#YRm1sάrx=X=u^|V>SxiW\/b‰v,m/Jă]_@ֶdj>e|WkVGmѷ=vW]qg^nZ4p2ÀҥUфݑO?t\̖81+wOr%"(+8N6LuM(yqƔ1J|gJ`T|R'^*##Iu\zYt{B3\xnkh_=2Ҏ봴>IGo`Kyl̜h"op~[RAκoX~9>ߕ6e ,M'Xra^M0zUg*8f!:y))<{<.@ 1}isujӎ1Jp૛J䖭!ě,'tOӀΟf Jn< 79kӓ|Mz[e)sJwBI7cL ;7׌ٺL@|I*Xǽ]ժL yk=1O;hAe#Y$S65W?WU&>ݑ~1ݖ"D=1?jMN ^?8}i٭q88d5[ǿwiD9utUpjEzKLĕK2|K& l6x~Nt a}z(^1c=/kiݸ`I'Y"oԌ 5Vcݓ-{&_um|UM晙[Fw Q苘{9sWA+ǡ|yО[䩌N+9'K.3߉^NvPv :CTzk衹5lAB p< ym0V9AU+:Ac2f {d$+#M'HQIO }潋ģݖ1Ko/k@ n2s QPc%(pA!m"ە|>ەKݭJ$;qUpoKxo_3YA!Mg@'{eҏ;(^v휔6T`RMq\+[;"Y}+UwGFlZt.j6+u', TjtDֹ\NY7^n{ɟhahp  M4\ +vzLY!ge1+\k9<Ă 6 q|THtQm(#r"u::yHkA*X`tƷ:=u`f_Bc0|I3ڌlܰ&R?C N+ \N\Εc.ױms)NAG>姹@!NscX jpHk@֖myު6zWQ(N?E:e۹ٹኅN)&\#b~0gFy4p#L"Mħd[޿o~|5 P|]3K۳RSZEQ:B_@:gCm~닃~ϡXL3~)c7 st7nw1ԷaQ DhEsf&=8PҎnbFw?::,R釠뉎F)_#sGHq[QyC?Nd%P%QeKjܚa5hgB~+7ԻLa`vy@8h y-Aa&?W87:Fecc1Ӣ2ΡV*!MYk51.ʝE/ HԌ;\3uzɛqaOI!pTuUȍ#7E\ T@٪j?4S:t6&p]؍] x3}} |fkOn2[ǦeR;=ˌ@GcƛRdRQL>to& يm)WNgѿ7Ε4g]Y VPɱ!'[NzHg-8 5S}z*4)Bʇq Iw}Lx+u^`P:-ka.k$&5}' ]J 5jmWnVמmwCZ"0Y*Yd1!iʂ^"00Tx|LH?IWy1wP(*]fnM\V6mh# ;HjZxr+ Ӣ# R͚9R(7w|{ߖ:s!_-!7]gٵ^-P5yHt~ve-20nU9u.Tuz?5zB vP{#pCpڙI-L]f?dΧoℭl?Z}P\K$]+ןaa3L^5"egpi =S[7쬼9ϪN lT73)wI ,{kS1|F&y $ުdo40WuFyDV¼VF пml:ؿfpVkT9C?me{15=HCZ: tg6r\9x-ȿ56|p>aw@$% hbH*˹MQL)PVKH$"46~}S}n 1wr/"7ȱQ^:3/}TWP\׈z^VgolUCLt@m<Yzݞ2sXQMx3OF- qb2k HYE~dlu1P~-?n$wҽy8Bf@@S_89M,p@1n#8FoV(t;{i5`aoVq O*]4М᱋\-r6]}%76%*gё|w.}R $yjw B@15ž cg -᫢}'8}{& QGԡx~:oTҽiqœ߯:fU$2m$ NDXhFݺR(r/_1-S9|A#sK5øG>WCw!FtJT^o qO ?5h≝ "N"ONiW^㟰?Qi-T3||II'̌]?{' 0=@4QLGm\(-KlBu&iQ|Ǒ[eo՗;\Zofi/ڱD'" zUHSl^>LYS{/9u ftRKjr^` [M?r%oBsס[J5xCs:tc!0+]l !Ks PX95"4xעXv=xNe0Wĥ6vb4/Q QEv{YjеpG6cPF;.J98CpoKL*/%Ҫ;!ѷObW {EDSS㗓>}1ֶWr;Ʃ|x _>3S\XJ-7hKp͉`,5b.5L zQNG; qN[k}=UF\T~Ii݋Rw+-^ D=|t<keNCz/;IwK qS ON%pv0i~1zTG LG{m֡Rb?m>!w߃ͤig5C*-i3k(nkEJnṡ4ޟ p ] e`)5 k\™DW,m#PԨf 42;\=9|X?m3)_rFYVD~BTgo}V㗪[XIL=^HK(4`cݽ|ɽGwA8S0D&RveT#dSA:B.?|Wq=ʡs]i1^̧EQza&v) oA7o'һk]'/`d{E|s>/ŷnVfSRVEG.gkǽ i+4O%MAKӏH)K\, 7bGrh_eOF\dӺe(U٦µēi;[t +9Q~x"b J۪&g{ 8{,O~־f-J6vƫn]f4'S&=QeD,8n@f:7Zfh1Kx PB $Wu%8Bn%:WS~' Tb}JPY^ ,1G|L=ΪNZ/ٿ F:kM47bJ#*NRôZCɊJ\+<<؂6YT+}t*Lqal޴?rL_n㻿]/og:;8:}oS3`T rHN54+#okd 더+k#YZ2+WܑW͕ne5sn$vX2(|e׊lWwsUY)WM/.ՅJys]سF6o#W#'5sY2q'mbe1HAVq*+6Z}קI(~OYY)?zufxCs 5p'!$L'_j1%>T.rjPZcjaU*CɅՂ[a7U ~& f*8.g<'%oKȌG5!Άцq)#Al5;^.l\' z=jfT‘4{m $L hDDV4|Xu*ā, (2nS PrIn"9$ ȃlq˽4Hc;x 'HWd>2Vֶ6RcK뮳77Pr<í:s]p S*WlX~jYqV+V)Jn~G|ɹU6W,kh`S #Ь 1GfWa5UgJ硻 `X(?r#M$Hbo {Eu{SmbXѠ(6^=4Op;bb=coe`c("tK<6;,,snſm}"W'5KvezA۽6ָY=*P,9!\q$Q8:p F+dDc0洗a^vj㙞H@<&Qqkuǚ"1k#5q7^/mϼ~Y6@xxkdqɢOHxnQvӍ|W 3&?_6:?eJkx*U:ogoY M̤x$Ăt# ǂ3~r"Ȳ6YXS%=/ Tvec͍K$#Ovgm|}u:OOta$F9餠KH[0,f9tJT?>' ~+.N3)&"nM8r-bȵ7u>-l;~?0|Ҿ1,66 Bn6vÝ+݅NLG ݊ wJels9ba7Sބ[pvZZ]Xg}\('׆ŏb4_'ܵB%ʥEΦT + gtGq[_jv r p*\W[VF\EDybr=[ZsRZV|wFޜ֪65glnA}̖cRzR-YWZ-T8Bxx%%O !hJ-*֢;y1%=Ḍ JeuXlU*]0KlQ $hbHΉ8/0qy[(l.')e' >8k2}zU%dHrx1HZ*ՓaS%>TF6}FVP#ft384숁wn;8,ݕ-ZJg_DŽi"\!.1^*/6`eD:xCZ"ih[X;!gR˜7G(4/pq-xGn䖻P.b$KB1?i`aխ+|2n#z+u0d[);#0tr@rrd9|+"\\*n}鲇`āSp99Y (6sΠ@d_>Cx*_ x~ͣ\C0}l%HHP[zdD>"G?U77A: ]buSrO8êbli qB[@x;HC&G(mFOI)s4iU`Fќ5{AtX:;Ơsx{xi2/?bxlḮΫrsesE|[@Tp/jq{: >t^DEs'!+g$L▂B5j졝o |ʎF;E>}]@Cfқ8Bt+p%g)xR,[A(býe{b$Υ}, ٷoeIBF߫H&vr#0UBF>f!?Bwafބ_5Fk`^4K 7LC\!ĎC2.! lT>1>$ ?z"Zm[-χ*n?Fivs`WN) s 딃G(mXpN+WL1VAC`E15-b:fChx{NJOu.y. I\7 I~?Db'#'?f,+Bw8E+t@X/%Σ^Ln5"1G?/u?S D,駀@? hMVPRK}N=o(шuspp~_Q |^Hрk $ϖ:EؗN{xO.}j{zĒ?n_2 x/Ÿ ɾ1.tw-$3S@W$+wUF l?cY53G}RD{B13VAMEta$Uc{_z˪@ɯ_OS 7Sp9Izngwc$P wZhC]9ICO댁oibXJpWH Aq}Ơ9P): ,bDՔz}| ĸhLz*O>oۙk3tΩn/tVB xGu+a' ӯAv>mSj3$Qp%=EB NdDTƦ8~ِ4p#6%Aݘ}倥{ J>>_lutv;~:;;.}hi-R.zްfGGi[*蠬_(R Ʋ<}58j<.U*)U [j9ړһ%2CgD7Ha`װ-} f X+>"jbQh6WBv@QC2o‘C  J@ոqF8ОG!_U6) 6]:n.BL8͑.,Tyвjh&ո'H "SsEBa`W<`=@1tKf(,$F>h1G|.,h¤]**VqʕlU/#M=65wo:8N-:39uk!@| }o< N֒I `nܻ*E ~pKq>ËB h0VZ.KOh49 m3էObgVc?&4M4S~a|ҟ޺Xю=wJ.jhRMMuY?j}crz9ejo}[O4ʞ@l|)C.6$W=8@RkHn3.̏X]|%E[{{awz@y9KIɄ#y"E:eMKX5= ~yњK&kp':E@9}B @_,˄-\KQc⯫Zu%uGZjv%Af\%<4A n^QhhJ~>#dېbƼel~۞‹Lv\(n"=C܇og4'Ǡ=~9/kME,;ꜥai WI&uZJ;TXa%3׼U3fG%173՜pdpgE;nㄢVȤLia+o<O(p{ ӂzN~iwqP%H +eqO\yYH41c`8aJOZ8s8mL)/ϤI|BE LfQG =Vo^qoMF.@ڒxKz7* L* !GSH}p1_1_3]h"=+&4},\w!k^Ru.b2sҦ:^r%S{,Ac`ٳ N\"KXT.=,(}ųCbmZnψ׳`s_q!'類df]E?ix^)%tu1;`R zc CnM%zzD-5/C{Xr1 x8x1 j3OMvp!wË!fg }IDDC.!֘\V[ :~A.h`@}pƈgxtm=IK?N,u+bwBck^3)}-E*<6ɬżg$ >~î4L`1'}߄8ʹ=T[+P(pFE6Ufk{]Qe`rE oN&zK^qY‹߯SūcU\ĺo6u5)7Hj[ûzYKuK< 6?Qn/@-\ǗKrqd&s=g/mUuZE6UBc#o@M A9oWP, w#T@?f[^; סIw^e6sbЧ+!KdX,ǯJγɑϔ+T U[W {!cW#NϧÎ1C95Y6g 9r"6MB)DosL֨`ZՃVoW|#sI=RߚUa5hŎu+xЊsq#tBp8] yYO (pbvY}_f]w;o> ptMn*.S\!̆OBOa=>ʕʟcNAd-v4^:)p6s֞sUG696wUU PvGT 0la.05CVK N  =ǐ~:W6ӂ!}\zN$/%28=lh7hLW xw8s:Y@ˆag9Vl緃GւWnlt$M俉P _ A7GFCL?g!:ZCH=&􂼵WܯY̷L35f;;hąC(n!p#q%}|8e7ݍ;w95{{f9}B/WAV`Nh:Qo}9' CVuTsnǙ6>6q&HAΩrI6 Σ9\yA4tKp%'B&2{kGMTKuGT{td\CTJLH~M^G.q޵.6ݎq^Y.JA:V%JjwA/"v:[v# ^֮JFQ$ƯBl $Z̘7rPv^ΰ,xcL!#'/WO $H B #p]eLի?҆xw"Rn·hoI g[*Lߋ&{~.F8+XxE,&G0&R"z@+[']&)^n ܡTQMZd%v8 H+c.$&> \\෴f&bzB-$*,uWJ0?6eF7Ѓ:\gCo 4KBaa60{hl .?h yz>C#([VI̗zl"("RPj zTHdo;24 !$yS*i5($$#T~6<8Ώq&&3bqFɑ mL⫬B.LåКv%Vf EzT '8`ÎM6z&'&_S$&=xEV)?[*ŅɹԬ`bx҂[ɔ;9/E̔*VOp,Qy UVz\-ojT ?a%K%1e wV e{|jE^(ZkzDw):MKqSyָ7پ>w~[ci6k\ I *WƕEe1:(.YFz,E])_/> D8×+qpTe`}͝ z!$k6.ИUW˔'eZֈAAZGec9ô;-{D'WksYE5H^uC~5 wW|jpRGڻ8'0~ t-zEv|wE<(>-qtcn.#LŋX'gVźJ9d;Nn˖&%ܤՋt:P7(0r[X~\c)$5g>vYq—ogƴӕ&aǛmD y-B">>Mjj2N-MsR<-rjfU!|#ǺȚdVan5VuD693J 0C.X;KN|x.[mͅg׫{Y^wtLu?s7wCIXijcs>_jyNK I&7$]SaPLX<*|uh:% qy&X$KǓR?#,O(]|Nɢ7ƑpIQ(fڪi#6B_DsViv՗~ /l8jM-1ANRcQbȣm6̕@q#=jkduXXONm E$43ml~նNRDp3h:.G0czw#7?*Nqd4qg(pFy2/?3>KJs%4Ԝg+xOl8jڏv"-pe+~:E6􆸜7#Y'* "s!zFaAaU,ni-koꗘ*`╽ɳ"G$eD.`>Nhonag2a dbĒ5,\{wₑ3e'- ĬFg;1[xRVKŴ`U;ѼarfC!@͈jm иdL!==?BV|w.  A.G9)Ę_J^A؎ K~ZO 2қ0[Huz 6 vSiaO"胟tҼHR͟ê35b6/D b@3d:j k_ʋ V '|[~D}@ԚsjO}<9j omz5x0JN%'cx9c~)[ֻңIݬj5J1cvkN@%<UbJ>c̫B-%qPShQeM]8k)\X- yu^(|t ˖P< O!VWp$Ti)\HV`|6LJe-[7,vf:Yϑzk+.<*T bC*d9@=I0xu/^D'KrjݶBy! C0HIP"( jCV4Uê71 H"JDi~5\*LeT*YXM6$XzW)ǔ hh59-yyP./1UC1WPYb,47&p5H=}~/8Nlz_߿[GQ*9C ǑYvJHg,Ts O`$SFI}D80mw(D(0#RGdmlO-^)&An`6vuµrc Ɣ;.7.Ӯ^yEﳹ ͝W J~ʋ /<]DD` л7`Xk{MdB!llvʇ}♢H-r879hb:v~uG.eE<&_WWFy!1 w5#f[&E4Obux`>ƲحP+MBI]s4vX3o֠+ >FqEE(,7^.7Osq5kay =Q=VϷBQlڝ8ᜠɩ_$SfR? HcW g](ԃ6-Nt}xKь3ż}/BP(կnPxT!aw;Q_|TǧrA 񖁚vЂ}$sWOPMw-l`OI!1ӻK:!#ՎGF=x?2`'ӣ/{ZT8sCI#`w "L:`5fv .;+9sQka YDq~^K- HW> ~\_;h8<,Ý9̿FoU :jG6>B e=CI_p}(NWTt.A6̗\T~KdLt xZ9%1%/clוУǘ]@.k zTό5OB5FeNuG\ϷttMAsQ>+4(;G4],O':YX EWy])YvRǼpy,$,J98V+Bqp}\0Дg(i陽N٧RBlo|ycWՒ͜IT~ݔL do)-D[3bw6_G쒁{:xU&?WK_uo&8:1rqn )d,xSVj3x_j˗W*Q~˃yG*KRjv(8cH^~:t>WqvP怫Qi8 &, =y1! 'm D}\uO^cRm9Lm!q3w #:#_ؖ:!o:ҏ0"?p~rx8dB%FwŌ|q*j&߰Op> #^|¬dZdY契/ [[a++,R qΤ y7˧9爐N>5Gk ~tI$ʠWh&W3mVӰTuVlr65tvdMFѭxԞ!<(TĊJF68[prir$l o,؛Wgq2I{ROS NŢ<TX:쥲#剞XDm͑|+xUl[܄ӀR )lYǣdr4Q GT(ֲhQҀjA$PjI_xS,Ȋvqmj& 1g2yx۷a \1@`)ݢU6dV&)8&jDo s 2tF Oܼ%SZ x D#뼂|ȧ{yBʉ(/sIoܖ6;>^G܈'$ki/߬mAa B_Ń?|V Bi4n^eڥM* anBK,.xo?T47zt <5+'Cj/lҔ,t J@>B! J Au~"͐hX>Ykr][4_N jنS90$NBEt,?+|ޣ|W9_hxuI`2בHC}J8@`82~."tD2آ}kRb F` ~G(}c s @ʷP:s~|^ߨovc+;G$yl!(_+V&/LoǑF"7#Q-LzEbUNxx'x'gTzIuXLG =sG۞WCS_y+5HCw~r؝T{0齇-™y}?gc%LO; lK7 [gH,v=SxHM|/%UEN|TXsV֗Ѳ_USsVTz] _c!mdMRR#SxRʙ=w͌2FJFD [ɝqsU921KԟVΫ^ {vg<Nva! >FedC-۫b na޼ф^6~noVu X}Q>_G7 4=uOhiS\1LkXɐŋ`(B>M7wxc q|lˤx"oh}]ÁO#;s`= aG"P_k5Z5ג_k'eO]j/zL˒L؞Da5|]~ňQRzotr9D'KϳZ'Gs(@ v1 vf޽.;Vy G=Fw,/"/ hT/[>¿A0{{'_ %y./al_5c;R70CW7r%"  21ůgPu` 0wCx]U\.PwP?RcrQ4ќO Zx+Tyq+.N1NNmU}Tf.#S($iiYL4a#8Wu+Ym4[BPX|ԤW2)^_@e׳ 8 #wH/hUV`k̊;_iTy+ :s[FtieD-'C@@[NR Js% wjCR}A8 b"z )Qۼb!g:̙,f=ג% EZMd.ȅ\{,ܦ\mpk1vhPTTj4$d1ap8f?*磈@_ىŁpV!+hتCO./MO1p=¤[vO-zl%ɇh)J]Eʇk] Uթ%KE"zk:Gr:o c@[WCXXhz/Mo k'̷%9v-D"X9ތN>}A!Sr٩ڄ).5PRD"@_W}&[vm)K޸61kLwHuX3g۰^A{MZYD!$2Rn]Xo7_8kt>w lM# t>flU E,_8xr Ř.c"G%=b a`혋Mj#PMAP R w!-ClE-$"~'*vih%Cf_ о\`v>r>‘L mq] bL-Z NKx$HH`tq~?ס=>*(xtJI.nX.v?_ ?Dp*dNѨvSu ^-f޷vb~MuzMlh~)ngTmNgFxGpxJ+0D14M>/r,!\Ee0ưߊ)Z!{c@q'9~'9gэhlߘn.8c>IC95b7b98hW{89[E\t p_51^ngxG n1-] fLGwhY8U \!C=lӵS%)ZFu9se9 OzX({ǃdF2plѡ(ڦpr(vˮxuj%>]%ɹ^Cq!MƦ:F,z:ʚ>|gV,B{W4$|Vt,6.e6  a]ZBW(z4v9S':rsK[ku)mn{͢US畯Z]ΤnCIlNOmF !:&JF׌O"<0F.ffD;DjfF e`m 8>'j \`Yibu8z*9]*̕jיzfX鲾 m\> I,old}T:5=0 p|p "»2F|L4WREJ#J52#2|R-M˜Jif)ن բ ?f* ]7׆L-.g9(9 c =9R'A[3 `ͼ4VA_V(@>XR'?ݓVR4{(mNZifUꑙbtL1Ie%ऊjv C (,Ez-ofuI(d Ja_~cnj鮿 |v-jL۔?37=?%ȡ20BE> KPb(OD1G:zԥI:մi022+qc,^~,(mCUM%* YeU)["*z.26Dl7׳.Y 8ȐET@:SΡv 9vQym ox˖;z!-VRR[єjEE@ vwwÑBzr)lӯϻVi5Ռ 9X*d9 +H8Me8l䃞|ZK$PsUxLbb1(mnrb+cd>T ƍEG- J@}ay l'L7SkeS jZhZ )O D cPuIYLJy(yjf#~gh G@ #`jd|8,-Hq$8 4:@1bƯhp4]Ƃ!`K>$\X½b=LxVU 1zWA/n mL<>lL]jTB[nc Q%?һM;w kŒ>pUa8c݇5f|1MxY g5'.nlS oM2ҕЮ <A 7+ wuE8i@nw9c4*8y")!n{Es3ڿ>ZXwk[[zQJ$>a`<`?7& GWQFaͪҮu؇ĭ Vp=ĶnއF!  $5ɔIѸ~?qse cJC x26p'Hcj~h|/#|O ):fX\ x e(Ԙ|$(QCMk9݂)R1*:gi(}UfǤ_X}f9! x/`<\-@@}A!sNtlg}`@gep1dCYOХF(?Z.3?tEsKeC LR.8^uFTPr"pm(a#,=1l롗rE"tJ)g`Vm!rb+Ep$Z2yt6)-ߪ_XE% ZQÈ38ez;.N.bˈVSRg?AJ6+>#eG/?TRark.~'}-; %< L" E%beS2!o*$̺ITONDV-n RhMAJ 衷c<oM1P Ց:ٳL9;dD<%B,Gx;s1x=h? UR0,`zS:Ӈ킯Ir&)ܩY|qhIGzgcP%u`Q0ӆ7n9wj~[[ҞM߼%y#982c&+v@FYbcs&uLy24昏ԗw) I0rCf`CCPzNPNMțdpf j K$ ո$%v<=b;n%⺰ Y- #v`WweP09Qpd>7OPAk=hB2˥qA]rZ>ԃj=rh8 HX{;^a++يQ##hžEɆk^.!>,e{˓sMO-fO.?@G}#ZdNCC `8!Y",C(:J` ŅɹlmLP1=>9&3X10D :k57jY;:CnP5&I"u$%H118N+#uTbM{d.-YrOw lƹgs]PR.Y|am[g$]A+ql!lfaሡP؂lw XE|&_p+-%)7h H'i7} tmdq|Q%G$$@W!$e^d[ٖsӪmD}^>B)FSdrW 0-/f!W/ ,+f2W{*^]oۂg>bk#j>N=$ݼFZ3qhEnXq&#v ݎuNKX̓OPr<,षKsSׇj#-<>aY^p#n^Dc3#ЊR&'ϥrl-la4?>ҩ2/:E{4]_a[ )IhNۊy]C%LdC;d5/P P9H[((oݤF6 lUg`HC .5JeIG8PzH, ȉ~9Lb'#rhpLؐ=}cICTFш_P"J' A$ @8o/h@ X'Q<(ۃTH.%oks\odl*/. c R 0'^Ɂ@^4>$,G?2Td򉇏7xK?T<߱X -Eua"lX Uk͐5D{WCF#o^,mZtj #e*։aJem^F$ljSXʌZEmaXc8@"3WM~X<ZA"Ŷ@[Rdy}a l h/p4$X'3su,{^9gnIPkz@Hg vM B./dqLuf&a+㣾@C`_Pno?7lCp7l0PyὪ 'W$IPU#]ݙHo%Ar)Edk0Q-\ZƢ]&ͥ]^[KxYJ45(%c; >:^šUPݖ،qad%;~@5R3MKq5>WPOiZGqJUb~O_ N(۬3(yрk.&Nq|D.ǞjtŧI[BN!2^=ntHt sQ"*`Roz:l7g4hRܷk3߱QJK4ޝrUIү8[R6`6 51iR"xUG%&3UQsR|A1t2焤{Y䊐ľЅ JȴLXt1 F^Ȑ>l7,&*t;Zÿ-?RS-TQ"3X-vb/Y~."M-i/̻\pg378eX'eߵ}>,%!r|zMMOܟes4{cTruZC; 06ʖv6@ZXG }xv)A푰iyGScc{W!pE_c+ )Ci: pJu+.fK*"3;ST''5ˎ!ѫW+ SGn=L?.aID Z@p8z$[(9'mR~Q@`G"”B{/K@g%wMͦ2U@i?4T<eC W ~$Y~Ư-r0B$GhWbɤʏn."JZ{&>MhتEPv95b&\_ρhgǧ@HY )o2f 7;ˎf}5d3'Gêڢ8$ӽv<ӑԘs#4'5)o]p>_xz#F}&DLybOilU-%4ENkwiy2MIUYb AfRM4y A\Kt,4c x@E)$jp_dQ3.s?Ei:lz0n!]!] @MrUs -G\65g>>CTϑDf+~3P; ..6|ɂr`n2NeF[-hM>Ơdxuޟ!ɳgsBoX1)'>#-;0B.M\^\; v ѽ^',;I.3Fs̗DfTv5P&ԫ2VGc_EH]Q^ʲ7@J8%׵|"%ɨ Nsĝ4Gp}FަP]>@Mxo*Rg|xC~oE/3l|Sx[{i5 9ȃߧd.ero 3^7 (5zIz[Шa2A`t>;YiM̎(>MNSyX(rZ11NcԜ8N2c[Ȧ.JUɮdEאYSbHk)Pvk]ě8'AݺQ'Gc]))G=0[%}}==T/倫?I](/m+ݘFUF`~)20#]1T>$B)?j˖S5Ԇ%Lݎx~aـ[b_@7%^ Pv ZP&:mmSOIU$}s0?kˠIf3_^bCS3PEU\qlI6HH %Ȋ)Qֹ$_ ΊyKsL!6:XF4 :,Թd&7%RIUz( @JLlĵk(.B~Bd-M2}?P)u&7U9x/(6>Db!ɾiRrZծzA p|ʕ{h$JՓtE]>]n8GeM?6gҔ l<3aL4&nƔK;ԧ}DZF}, A1`~GGQui@}n f,*^Xoo]>+"ьbB0j5YxzJar7l eh 1$O {C#A&uNn8%nWLäb]bvu(GE`㺘%n"R4AZNhi14ZAz e|N+O #R0 е ŨՌ"Rj~(EK2-l$c,sjwVxNI{!b(@VN^xIw FJPKWGGh !Rc4,Ueݏv3wR[ABi,DT`ڥ]p>!*SnTc2C61eOxc:( DŽpC3>3'3;ZdK?oC#|+ψ+HDd(h#d9vpGn3.QWw7JQ!6 ʂG]|>X$jh40H)dQJD(5*Q;.I87qN9|ˌiB1 d}8Ov"41|4ۺvXNjPHWMwE1\[W^[w;v9+lgXeu}ͷb(6hy -?A A]65S9ꏈ8)v|WN_JE5'gnG)OJ\ed\gK9P?CR=[jYfߧpW'k9je%}#w*J&ڒάKBɟkz0C S`"&{[UA׼H7w󔂺UZ"ڇC2~:Ԛa,g !1#X]tcLBw.1|5>дΕB5H j![D dx_\j|T8Vr$R0#E9z-,]>疶LL*mx hCe\Έcg/pZFZ3@RLeJCv8I""5<[6^bU|#2W-_<3>Q"HVe u=ךq<&4 c0_8TP~>+F.ɵ[R?iHI{D* y&nl"_) h#eQ/6k^Z/eB['c,BOY"41K3t,$J :Pvjtzą7yiDڱĕ:{Uk!&Gl͎Lv rBۥa~4hhE(D@ɠNdxiRTKbn2s] 8 b@x@@@`@˚9dAu #}QȸhâH )5zO윚ǂJM^i|ۿ)+*V[[3'j\$é"LZSt9SnKgvBq-d(&a1(ET4X7'ɪ>5CK5ϡ8 x !zPq}ݠ#Үl[)lUãxE&ld_h)XWo$-E@+/H#_L͔oB%]ΈS@m>7\*E291{e vPYR0T 9zJdfX+ΪdZ*Etཾ0b| F#Ngʢ q\s$-S-@-o `WDebhUՒKxnbG*@*He ?@iv#kR>0 쮙1 0.kWq\:-3brn; gN:|HfOv[9,l.H6Use]Fgmsn5-*FM)6֒bz aP3XVM 4*XS5QJgul).ЅҪ\+ r^aKEO4+TӷLUӷt:9%In-qB-@ ̅)}Mf3֪1fKKL1`z#_A+j]Z*'*i~Dl>{S$%fEk3Xj"S&3jb( VX"3mv@eZb܄mZS ;f4 9x`AhPYg=kLjQҥO;1Gsqo7oלϟuԀ(ΰxbNz\eiu?ËцpI3'xޒJˎEHD395BYkg.fռ){vT Sw",=N2`ԩN|Ijvzq}pi:%,~v2uS=zU9^Y<҇BYpwMl`<R9'9q]mU>~lьNNX`*9NMTz3/>+;U/7r #QWO9t+_U| BؤG*@9'8ga4PU2yṥqu8^8~g&{̉'s0_\k.Fij[ 8s8+,[?UL2|@4\/f(/v\pXpxR_Ц̓@1  ?RT~־'_:x,Yzf &bO[:m2MHJ3u0X+O&v8Ii=Vӏ|!g'Y+l_([D`4`+֍ ۂ=n rn خ"Λy))zFʊ} rϥXJ?*ĢeQbĝSӺaCJ/B^9 #YDĝٹ2`wYڮM'wF\][^D\}/} ل2!TGEAl~;m (4w"ڣj#i䠝Ǿ UX& $n/'vEm+P oe&C,=|Gd#'6[6q ~gA݆Q|z0[>+U;@'̦ЅzhIϨ>D;FӐ+_L6 +TXOIg6/)ugͦK?^5O'~l2.9J&hڃҭh07!_IImׂ6bgW zX{\)mayF(Qy3x{} ,auv:K#uZm(5"ƻ/ŇȍП˂%;#G*mgPdoԚDbwoQ@{)μx|mTE _˽L M 8?j:@)][':@]Se&U {dm@'1r0)!6J8W:W:Gݻ>Oqgkw[ܩZŝ]ܩdN.$wU\ʥ$w%+ծ꘷GkwvqGM*nvqTɓ'/ЏOq.1ٺŧ/!HWh[㯋"F.G_ t׿o  V$h>DekdYTD.)kBza)<CESC GB$&ծ7S5s׷ۚ/ G0< .IzV+ڹ8fsKgMRJٽRzK4ZtG_S;;)_[;j^3p1.3"=G/~k$ ԋ.Ur+Z J1u~=lܖ1w'o.q8nb+^|Eb^@{"ű8?QK'_N!Jk)Z1^ ¢my+=?Q yGm5#&1 o}܃ :oº}R׋;H[5"fq̦òR4J#~ᝎTDY(;XQ #A[$vձǡ͉?'`7?>Eu%Cp~IFXM2hoJB!nR|n;.Ɔ̩i06,f ?(lmB6} =;D蟈'z/?,^\$Vc?piȮu0M|6KpdUG#2Yi1>xn,h*Pa]I#0EAq|JQ/r4 h9o2۠q HXqϏb{# }}'Ϙ$˜ SOkup,w$<U}P %,_SzY$t[6(.:|Q(&uMѠ3*eT6qj(lMؤ4YO=28S˗;P7 [fӜUÄ?Ufԅ]Ώr~1R{#'h̒^i\aoq?VEeԏQ\OxR gl.OuJm~Q ~*[c:iϛ` 9?gB3WgD_>/{TO7jcfjh ~-M~p!e7tjIGՁqӿ'9tP XNo}*Fko⳾;c;ݒTW{iɣ7t F4 KooQ(귨WOFͭ!0<>a٧6U՟WuVWUT fUUB/:+5EIQVds'UZw~[TwJzwWIZLzjHF-qs ,` Bܨ뭝7?OK1I55V^02tʚ_^Ika|~=bJŝdJd. 3UE P$o"2__3i"o,5*T45U-xFأ~#J.g5 ZTGm(+j>K}44UdQ.F1$8ߛli1Ѫ1-ocЧ1lu16>+5+h13y砇{*]6u~F#o&cljJv^ɛBݓZz{9lNBvrl$ϦH%;丒Hu#h9.,`p1)i*bH[Y+wb˰Y=: <0SR'wz=Z2FXg 0JΖ]x6_] ɸ]Bj޽Hn0W(dDPS8iC]ɢfO2yH=vBE@Ss}SKHC0xewTuj+U{]:h{gHF yC#}@Rbm1L;Hvj氥:GZc̆"waD5?ӆh><`0qb50 ݟ/3ƿ'w8-; b4Enر<zر4nQ6 YjaUDy &[bѓXN2E :*%w?):qYEӟz.Q (.=Z%J؛00+K~vk!O:HS@{RWaN׬|P2(հ$~qk.#@OFyT%3!<~)&#Hj> CmI1}t*!Rmߦc,b)a'$MaGƧ4u9:apltQA :ёSpRg?EqG䨓u> " j,v(@bXT@&&GRD0E۳x3$ʥ ǔ,J ^z]PݽÔ#u;g}WGqa FIwcpX6zſuMi mX(QҞ 6OLJģaY`.-ջ Hٸ93{e܁d-΋DR"5/aG!vHѻmHY7jMUjTÄۚ31@6K׋C)C86w)ZTx7i/Iz!ʤa'=ov1ZF.8f"I%o%u1cDU55r͠1 wn&Ev/"TN1 ͗}+o"q[jo8^bCs+|HfYSLOs'ȺWzv[A, ږ.$g 2%-"q G_r^N{^dG/vCQVT3`DM%t5,iȰB>W=!>"DjjC2~&D&8Lqha zc0<&߈Q^2GQ1<ObJډnM‡cҰmr4"Ȫн=(륏ٵ]Gt #d}.l~ƾeA" yH@ 'Z!Kq[C(s]djnN;JV]:n9X*Nq [Y;C/67{UԼW\q-E#eDr#Z6JuxB?]ЧjmH}YuјN"58?ĉxye'Y9_8fgx☝kM"2_qV24+pLgK3gGto.3{/N&Lξ|q5-ՄէwL Ǒ@XTyPAp xV>^]ܱHz)TFnDDqqʌ!eqzz&+eJF]*NjlSFcPOݥtKBYB1+n[ƞ&9] ,-O42Xp@X1".7p&_WoSbRFer{g Z¯ yb|BO1zNgAOS  0fH A gM櫶lOi4+fO@zfJ*Jd0cu_ ٨s2@B4%j6Y(K1I ׵.w$ԄnUz\ 9lnO(QP~ʅNז⨷=b]d斛-oq=p&/UIe:fW՛uPFʘ<.k9YY;0kL5sTofg\z;/,rw?'Cʺ6;Rp^3uMBAXJF~/{r *Bj]mq6Smޗ@*h~Zmc/zHuqN( 'Nr}?(f͌iEڡ&UQf#en'kDEm/1ڐk 풜s3ؽ}wuZzi'#k6,K2~Xj)y3TZk1%oy&b龚ۖV8y 7uhj?vw)2wV^Ov T%ӟŽ` X/&`Eկ 2]pV]~Vt%Y"<+ccӓ顡{G.MO&WG#CSєslxz8NGGFc1<:6&N MONráDtaXΪj\*7}4#G G+J#?g8#`IzhN[ Q] r0.yyVss/%D$@ |Y] .]j({,$kB(}{tH5zy<Ğ^9+<2އւXczJru}(ꢳbqG0(֩nΞXUYyxMqRvt*L z.S:eh'z@T6]X>mOD(U[i |Ps\Yp*Ĕ6kQ^oc#]nv*v9.xkA ~Dp9m'>Y՞ҞK74mkl3~^cq18Q{8œDGfy\+FLZJcz N9g8˕K9AJQ̉1833Nf, uù6ΆWz/'b㱬dd|4-aނ[v ;v50k8QVNq lюG>dvT4#YZ E0dCxԙR*+6K%xEo:WΗ!)yMJEn۳^Hf0^t;&!9t8"),) =m/GH 0 6ҷ-ᵶF1ۉYmp8P1uAumʜWI-#3WZˑ%i! ǦJ {$;hFepIɥs\F4+kԫW ρVΜ&h8B5#Tup^Z3%"%>~VK축pwu#-NŖ MP[B@oY$KAD9i*w)+/1L C|% +F+9xHL#qJf0_!Hnь0VP4VĀlmHM:L.eqA6,> fiEVD1-/UK_BZG-m$ ^zP<; sr$bG¼KeP*k-%,IQf>a*|{n;n݇JkP#\0l1oc|hFf}k||0~hM73YS=k||<~bMOb4ԩu̔Hx:~.kiߦ)7P]?of00HOe5_|ۺW=>ދ;?iҶg :7!XIdRr!;\mr=_:̥nKWW#>}=dOSa56t}8y:ezm̽d =z-vȕڳzj]F'Y׹J|Qsqk\)ruPgECϱ~U~J3w"^{W* $I"?Vw4NV'u'UXw+'ԕ֗\7x]e| ς'R_s;Ndl=j0S⿧)Ѡ\F3(15*<3OIBRD:2M.W܏f|A3,Ppb3iw6MN餹>QJDnwbx }RKLj+Ok&lђlrTfivUJ]f=YkX~wbzNff*ܰF (JؽjiAPT="[8"+mi9^;o<L'#̫&5S}0޸<T&O̔V_%Fq^@}pH˫i4~/UN0lB#ZķP>b&k[B| Gs!Q+fҏYQfF}{x$E}\(QڣxƮ죪̔ g0ײ1t@],(ɿA*s)q'6ᾇL,w9 Wb>? {USG'S>ep#aW^/e 8(vlŧl>E6 p霢3MjZ*f+Z2~[ġ.G^*UUiV[Z[Xi'ŶJXw{YL_/Χ[Ԭbc) .f*cJmʝ1&TYYwd_ M XU6<[SF ǨȴU?;}9S./ 4I}a$V,<1<(}C 3=uyPP[qA~XyXa##eHL%Yd=/v&_NGpCڌP{l. >Ć\*HB?5lQ*egYj$X[wUB4[G8lLw}8r}>yMiI2z.Q-.!~I6.=9eoЄE&w؄J,Qf9S zв8)4 ='<%YZ&e-N4:O`|aBK@Rѥ0YP Q%gGf"7%u> *f䂹V͢C;[e \ dG~,6A8ptM^Ln%yl!2{gekᷮg_jk_@x*3~ABF,Z0~wR̷KW.+j=l16ZD7Yɻ͒6[Q[I,[ PA%2U0 !PpD|gdjw` -P.RvRva)t)]9Zf))v,vqYRvI!,X~ñ9/H:ey,NLq?5?Z@=~[Dl!zH!GsƏkyI[O'MeÈ5~RNɃ6 <<EXwc3|QT:C^M+ST'iGlK* <Za/|d h@b 5Iַ+jQ}GJy\K>ƽSWzB=5zo,9=YZ1_b]S=wn=֣kxTƃ`'(r?J4D('ޅǒ wq O-Ee%fѩ%/cHHu$ äo *b<) xdbA "\A5\.ҊRSIUÈ&nvYוmKKU jD4(*涂R8[.CqKqKTh'Ec!s}UcO`)/RxҟTdN5=j:2ίRӮ22F&hc0wek,b^c1bf1}ϾTƺOQORTUTWSz2Gip9N&rd`JBc%h/Jǣ侏MǟMIOz73@ivQh7R{!|kfs xW4ܨ'KGǯW@u/|JT,,RQ.-e՘)ACH# K_t39yRmg^N 9]!`q}d1@ )!AmYyTI-9J1,H4 $L M͒o# aҐ|yC2ҁ8*,nɫ6Xp鑊U:}@ Q` aZ-+_̲VY|MsX(+/䋢6p8!U4~Pm?I3\6_rZ$J  ~L t0y137-_@05dZx3RO`k8낙2Qʺ&R}23%둝߀f )3h(SɠTb ⰭwɇY|s᭫^Z^c6xhIЪ4c}TKiɎ6 ۥ"gCneStndaJֻmfӸזREֳ͊LŻ/*s3 b fl^MfRC6mn1b(Q *$TQWvl+;uݖⰚ# 0|w*eǞޯĢs<"yN=/)w~"iɮ 2 W)泯 =0S L9^ܛףR-@R /E 2z̫D=p#.m)bl_sUsWcuR:G.Q.SsΌ`PU` XXPdQPHb@tEDJFYsx--;3L&?W'[<ȁ`TD K 3&>=="8SCd@ʨȍ YfT:0QR#{6N7ߍvv{,I:ax1&-88 V;`A׿&/HYM9ygTMQ[[Hnapp-SAM5kĽ bW6)6.瓰Ļ_'i|W$BQ($; zّuw6K `znVуC4jQJ z.~7y/&1zaM~Oy~>^L8PAuީ٭؍ O2=xf*c"-nHZQ$YeOͪ[gA;|䨄8&y)c$hvKV6Y8p&e"5U[mu89=~3ǘ:r@+R%|O{{eċ4(qTcwЭJph*T$=pIJIuOyP7TCd܄'S=Ω8\exT^ {.dZauV HѧRLJ*JIhVxbX'm_F092Ĉl'k<>ۨmJzaIe\[emQqӞ*O6mwq%0MJèO.8dCDʣb 3T<ƴ; FI;2r:)6ۥ*YHWMMbO*'J&t#>UE]zV!Q,,~L_QUE,iUE -t\Fn/{gQ?rG,CG3*GwGr8r%P֨RV$ K-nG3\`$ݓO eP0? :OO?cd9sJWaYbEY A2MBb1{̐Z#42,)?+7zK4''r)OάtCG$ŪrNPlр`d@Z=KlT/SAXD>X8c窹0 A\T-U G꒘*t &AJ/ :&Jy1NN*WSש,L3),J_~9׿*Dp=op)h\+O(* 3ՄމK&kޞ8ZK.SLΨ/|&m#)A`#{*ZA&Q?N;(S Pi{$y ~\X ^-5 7%)J[Pn&0 w%4~Yk|')ai%:Μk]s3p(׃2k.ZK%]G+AKHx/W+cb*M%5^^h fjך(d\0UMm~˝7@\\ K+¡Sqb[b;!۳U[6y\$);G"LcH(HD_8,QP-|h‡ Ŵ(v C8^(o] 4aۣ8xS|4 s7YEi,&jw3𼀧T#$k579֥H92*l> J?oQ6rx2GeDe!N`Iñ4X*FMu[Z ~}rQu#ɋ$y/R&Τ,[.FmWQq0*<y" hga :A#DWy4O b 7s]7G}SGR/d\Ucxth8#R~>-g-C&r>w_UNȬcR uԮdp-S. ,X]tߙ4XkͶ8vy|ѱX@9k_@TD^~x ˁ{ <@kb/xOb.i\)ˬYhnm|7NYb%G{;=Wp<>OQ/TeK=M8}Pi"}<O\̸;1_qΣv52KHG1[=I u"=-vO#c.pC6 3~% ˰x aAf@v@I$ϖ8(X#+fǽz2敕b $*ZiI]4&  Y4CYIoa{a‚LuS#Bɇ˃(ـv?^thkfXyVqdU #cj [7;~Sgc\_N_)B0i_;SX J«]1Q~8x ums͎ȶ n]?6igV'h5by \՗_ {9!#]]Frŏsa$i6 nH:67㣗.KChD= ;cFmfBA>)gyh"( a1{d Zeh>^|Oͺ^"֑u[&L7S$m@  f*OmyOKD:dzdNҳ+.p\fCAy@唓qNH>H6h^: '㕜wݢ3yzа21ff4}SY+Er$ŃJ3XP k8OVح_B$0v4IϨ92'Ƨ_Myh6o-S߯9dd՗ӓ1^_uj8## 'l:4y.hJ'BVhv|'o -͈liqKKZc斦P{JȩEYZGK1 (s ¾x@9)c˓E6cǰ:WϾB+H{-rܳڴ֥#e_/$uE[=Q `6xqrWfwo''zdʐ N/Hzޗ:EHMJ s}D<~wjtS5brJ1n[W>tOcvkvQ28Fle ~%WaPEgJ&"ƽLrˠI/Z̕ kx S՛mU܄`5{xxuKHsLsg&Vblh~mb M8+pXޛERߑy']EP<5@?" 3DGHr -=DVV {lM7!VDEUveZcJS-0 X MQRu˥́6wJPv([*Hko+cNFã -/cЄ9A;8[FCB1.h!we1 >}?<Ģ'd1q&ʹe1+rLeUqLtIk vANHq͌>(a0|ͥV)kV `^UHou>y=~( e|o|lD=Øp~3>os:T!ުڱE߬>q!v[lTPu6r/(y5f]wHG`y޶j(cU 4x<4z[ϳJjֶ<דV՞ v6A撒D#n~,nol9.7>5Wx/L||•OBҹ / PMY4Ji 3]'OA/F~m5x3EC̼-2w=A <:5E+,;k4j*SrYP ճÓKO'Y0>=IpI>Зll4M0ʠ(5ogtz7n!yD,Wyq:a A#HD%1"8I&fE)O8qoPаzgF(Z3 I5svpԻW }n'/tFO>(hLM;No67-4hV6B] >";;l`#ڄTϑm]R(ۚ $D"jOh S\ai1mZ`>7 @T4G':QgW/bX[Ltp>JEc}/0lG՚8_zkZmYF=#YֻH^GS$a@J,6e舏xt|ƓnIwTXZM$&tYTqAg% T-%:z:X*_b8׌Z<92,RB%4Gʪ*c o's9XK’qJ3(S*Ĥl'İ*QÙ|#k b'ʼn =ReŧT4.#$wsTQ!hP: T?M6`f@\c!9>0!'Xb&Sf.JPo*-yy-n!zlBqQ3ۢ[}u?&١/:SH˦j4eSHĕÎZUlPl4GunHClRtS_Zg;Burn_~ 3vm;d@HxCOʝeײj^B ݮ; ~vty6QX6[?ݲ&ڣ*]yW$je! twБ:f^ Xm~U-j :"\$r5z`Uީ]:n#֖n.rSg[e{@3C=EB,)gwCfr|2]A8"wT*ery,V5W.f 3an/>> W*:8 x-r}{Gy:Q)^͝Dvv6WR ˙ە J˥2TMJ0@>;CPњFKXiQl#Xwl)n`k1-7C'C;e:R[ |oP8Ef`=pXyH-u7:)g%Zd2(@T\ǯxMVΡrnKʿ/\]'dl1~5l!2]҅e9%~?<ڭ̝\)J,fD+sȂ72LƸ뇙d(bxY}^\Zf'?w1UI[ I?eK4ÛLlr* o3Zgac^o%\b3-\o)eO%Vo`o3odl8eq!h㐻| o=)6 0;"CNoj6#AMK5T!Qzn ]6NSL9xᄡ 'y_:ғZdSG'+vgOa?Smh\/?+'B.37yq)`aU22Q7YbC*go¶'> "#wy2:^EeQ}  SN+y ~hrLUPe?K0iMd YYAȔ直2h?][nMyF@&aRqp)ϹQk%vB+1{K.q9'y$-rRQr>' ) TaLGS:+.Ҏ+j/RTBU'OA=V  ,!'Di *Cn pAsBP4u|s=i R a;q,UܜZqQ|*ɅRzxR߸#2M8C.Jd,,AÙ= CSEgzBƗU.'U}K SN;.y`fqdE%'L`Gq>vr#Sܨ.*R09 mY/v(zzY*E Om4<Kji* Oi\&)VÙiq2-Qrs~qD>$<^Fp&hk$p=T"?G+F4%!ڃ@ze>Ѣ"XN6h@.띔ƍL%%]$01JXyɔ !,)@E.K" 8,% fFG~̂JHF.,UD RBHcT # QY³x0dz _*grou;2WV]4T-tvB( $l[@o&n GhYA#e^g~8a ni3]K]!`pƍE4=J_MLON NMFSx #(s[p. OSөhQ?GDSccCӓC𕱱P62QGL}%LN O ]37VԁGb0nB5W#q'Rs(c+KMUw9 #^~InNű&7)Ďnv!+lau"BvE;H,TBsQ?b/sׁO) H 3 !à˘n2LIqb̫YTfmeddV;6'Ceb4S0 P\*b^ ![ ;z0/[wH(&.-刑y.3Ȁp%oΚʘ"gxdAypLu8#v61-j ,^5 I׎,J,d7p?L;!!L:&%!0" pZDEr`.e =1qpha*{3òG8AS'7!7Q8PWtsDúv -$(:B yL^56:9[`*9NMNO@ >y|ds@ l {e4sa7CCf|~V@6ez;(;ae=»7oCWmB[-G`EWN6irQu7aw6KA$D6G@:Mlw@6 ~ a6IST p  kqT hv49!yJ[R/t$"hg4. 1Rh|92mG8 omr`]Pa}&.ak4/Z_<4dA1 Gt04pU#Ǧix@/U!Ked‡+Xp 8ʮAcKGq0ۃPrc$'aɺ"Pv{I3%rI%[ʉ0ESn"iy&]+2)ij4&6)lVsRyCxHFqڴ: xw9^^$Rn_M''Qx }**Ӊ?SkTMyMZjɊL׷[aƟf2Hb#3udusk \]ʓ~}WbaK>콖s,_krƭ(%:sĊsZ|B)EҽVp l}5HX:˔Ns:}w'UEʵkMZ'>ܝY%xH-jYozQJgomF'_k[Pԭ~$:;C~+8ʍ'Qp Q ^S H4AjP=Ԝ/#o [DYDY, ~ U` 77+!Sx^2T 0Z Whr,}ku+&$> ih 5hHȊBm6pK+Rj?C^sv~Py]K SMB?C.L)qlej(9._%4hmtrtgcV=%Q余1AU y{% [J@g_@5Fb k Ʌ"*/9/Fnܫp,UvGuԸ5mWi0>/Zk˶Y/Τpч=CĐZefvyUCQk _Ld)N&L1N \e2vפ ^VT)mֆ%?:E6L+!P;uE~}'޷aLamC_aԴpyl i<ƌTRljP3(FՙIL@Oz}QܹR2?]ȾBL\~FUiU5ZSɛ,s^.T?nzuaآl Uv'EK}5FwUgTM_^ʝ6y.fu&_5 ulozCW F+=PeK2.߬wj˜5Ϫ2> #DsTXL.;g)PHF߮ zϹd?fNsImlE#dsIVR/TAL19%$/j;ꮫƐU׊m7K%b$O4pQ3p4]9-¹g} -K>PzbF^6i[LgEˎX(sM}-~2?v.?ewROeWK|4v7LP GZRP Fӑ{Ld138m~'ƥ/F9,ZWcïa֋Ril}-vhE8l)' ?BMP]KhЍkX,poT0@1dCd.gY.qkCϽ!m=GLrH7 lbl ؂['~۔YvЖ+ܰΥ9>N,zF upIg7jv)s Z|gh Dcq8d^d,襂/%lm 9~ڪp %tevTu=~5]HFWIjMrMzM1zlk{7>ra: lfj\]щD׉zЉda@)aVFEͷ6Be> A>|/cp/=F{rqvwAwlKI"-`M?)^_."B{W%ݻTb~hT9EjCA0I+bz"{Sj݁7 0U9>.P=vG+:ZDpivSR )j]e8yl<Ɔb!ޥ^'0aP =ؖxXo%wV-VV31NSkXGSJFCHE\ثs{6dc଎yqrreYڿVSr}9Hn La=FŽЊ~% ɸa z_QLF~NQyk qWdN#Wu2 f vuIqݛAa 3gX*Ium^DnWՎPv"|A l!]{La+r.a5j "Ywؼ7b/t)[t!Rea8 (A+KvʉbP/;+d/<0H(njHW !IA)::T7Fg*7D <ݠڀBŲD;#W4a/WR o8QS: YuwR%٢շP| pp':..7` !$.yWi|mc\kDt۾8 .4AWh7c?W{ fud.k (A*+%JE ɦ";ەgBz`!C.[)ј Rv]I*շa[(CknM(W XޟB`1@~,ޫ^ݦ~Gl<e:njmrV1ti2ށTkyj$59S$6xAAl2f'/^3J3!?S^, sN|jD܏`htMy9XJχ dkcɕ+o4EO;G"lE'ls|q*LR7wJ}=-' }vbT㣪mmi)H4; uOB}F~ 1W/ϲ3;4mX%ߧ-jOfEwt #TE}0HuNž6M;sC`eݥ {B>24>YzEF? v!Ze?]1(v!q!I5lxQ DDքTR>G,`ϕx4X ;X\|9W}OOIru|Rpl/wGFr%̵,?/4aTo^gOҏ{J&OCF"0O O3&= W..܍DzLB۰}KXN|gـ&PWā x+Ny4[DѨQ^jFa$)~ ¶WCC.zXyףIkF_WnO mt|SS@ܞj\VC8a@4lb; Xuepmd)d*٬,#.CCU7;qRzN %T4ʃ03mϴDꞤ75#1]B!+%ىoxІQVIFI.VYu.؛"vJ=%j~q5*+x5ntIn`(f[w{\TE:FH(]J-1,I<4gEi@47Ǡ%^R73IءΝϞ>O4Z2ͅ>uոh LB~ ~.HX ?4edLRH}a XB VI UFhmkEk-W,q~O*V8^N;i6=ÿZvxF mӶsm{T\xO+k57^i=My+~i7gk+[ݿoQyk؛}5uP~ mﭤW~kOxm~._1ip|&41`&݂1Q r|u%ѯ"=.Dr׻d_EQ4ygDcxw߱׭,".{J#3~?88b>`sf5)bB-&3OafwUI]2.92GE~}(bqe !<:JCAp ^4Dއusv:}#E&K(-cxhXu#O[z;N?M%dY_Vf21V_yfɹ+,a#Vcjø_6_0E_Nu҈o~ fRA'\1AtrP2!5)(Vϥ K4 S,MasjuX:4܉T|] Jd4 "gږåH.)'+¨"0fFPYV.R7U|'cJ/dABQ`F4htF(~W}"ޥ>s{; =`uF-1-<]g)#I].l|Џd?LRdeZ~Ӡ }1~O:a1FHM _  +WڿpzH%iGaF_'wq j{m f $fRb \<7͆B>sC&Ta{h'(\1`[:Oyp_|w3{#~m/{<.CУ2]d/4@Qs"j[LN9_m$>7`jUZ'ǻ".iox[-@AUE$zH?L6 Z~i7o,J`Q?0r+{oQk^܁Tzuw6R>Z: y_8x9%U}H~rFN,^:sM`:B̞T7u~My_EU0__Eg2EåTlЌ?7έ|R\ݬ zԷ]bdпգXv6i|Ph[B'֮_؜=doNx>qʪDU,ݟ~5C_`7?rwo(zu`屢 ]t*ĚTX]/70-dP?;fAɮDqXGD͈H%u^,dGkmd.Ry@}ܿ73V7'Z^f` +Y qkWlg1LSd6 sbS <ʚSm]&p̹f;~4TBG޲d8&*>}yF3\$fD,vkPKlgZ8)>R&t촀&2AU@nߖ^ª*eVu3BDž.4L,ΦHlV q@mYQHW@"AٖZ鬙Rj&]nBoPrb;lll~+Y(4ŤxKՂaW3LLW J4_JhR71 b& \lwZ8vDb) 63R dU&C0fUĒcƶ:=[1@ueghlEƬY6iu.}FdvI۳-d*'؉5m +YVC:Vq\C)V!c0k }-,YK5Y}Bڡ 4%4w`|_U3pM,? KKqICu"0,ǐaLe6u|Cyݺl> e+OVrf4 L3պ1m)W"]Y_Y6z#6AHzߚ;evf@:XձCB}#rY!YtUL"br@Uiq-WIq/O u+7G}fǜK7ջQImK1i:nԑ}hOUXmF@~qDиHaALZj!ot,z!U~;$+Y<qVu=􀘪fD٩'$:>p.yF48F''N]O gKg&Cd 909&\X4]$T XH Bu:GxB\c%Bdef~d\fTA;AWȪ,altަ*gS܉%Yz}FiUPI(ysPM}$kFPQ9:UX#[e[Vmz&y,.tN%0żT9a/Tz:{x2Lmp>#'+4-eknfcp`@nie~ G6Wnv/7K'ּ4΍Z"D2ؽ1:< /DAyj#{yI#įUT*uc[ᨃdo+Dsc[s4R{!V7/X`MYY 뒮UߐGQȺmX7]; uhS`-N J;5kkGv:v5kn. )MSm:o0'W:cuvx9p# 4먓h\r˲RtAV?dH}cJt?\D ,P/qy?I}x'tS䔧|SMyS,M`E{tC6'zIS7qnrq}I>O%FA,wQEϯM_z"P(J-be ֘3ײ 8P$ 950AK륨5^IRo}&2FBX+7tC΢ ˚^M5?(zȣY͖jXf]կ4 6ةp2ۛCԞ̲aWOJOXJsa'U? e{XS+쏜qe-z<$Vs'\O0q`2Uk+rnC;Vky=d(IU~[fQDX>e]]k{H5ن(f2Gϝ"RU;)_8yфr:#ٿ(b{ϳ az8Vv{~!+9V؏ V$ c+a RCdVB SGNv/ts8rx%X~Kvwd!Wĭ[m7a{08  2`VhMMw` ervz]6JQ!A!\)/*7EDZJ cD}ٵA9,yg[+Mxh%;9<#IL O՞ڮ4W(6R_9 Uٜ -)͚p})-1uY~X"=?sYK0SΚPA85hpZ+I/ 1O-q24p5w\axfoŏ 偔:_X8 Dl tYQ/T tL,MFb-T<}=0mb|)*=i ۟L/_FTL%$9uwKObbyZVݜP1u^-.Na++PVX hh7 &˧@MObFCR \nzZUoO+.سƽQH˦8 lUlvQԆw# zSz+';ö~X(o(u%Q2ܵ~uʲu-X% v&YAm@cnQ(|Ab辽Ius0S)TfľXKXܬVfSݢVmOXmS0Φ6Ggz lKF;Vq]iT\In{E =>,׉eԒ\BV鳭^8ZT0%d#ni_f*m4p;þD۩]2--î{]?F&A.= ՋDWL")O;vO]'| 3)o/JWAy=Sx7 }{/mT{L}:"ڣ_}6I Wma6]N@m=vW-+=!*!E7#VhJRx#:`iI?XX?#E-Dk6i*J]كYᚬmfu=V2ƒ9ɐgkّl A҇&,jV[`PB9=Bv),IbW7>[{s`)=׏Xr4 P!ڊ9 1B,/AX4ExҷQ`ܬK=x?*Y^yYM"dxm,s$@iE~zW{riy>jwcUǃ)baO>^>e=cԉ4jL%{,v hA{)(O%@~z$߂VrT'McɸN`@m}Ӆi$LﮨJqR3UK/o >4'LOhkYo8L;_,Tr`D4|S{%%$_Ύf,/h3`t(6!GRP鐰=tȰ ybvWss3عsSёύIRSC 4tf8z\Ͼi8j>y;-%rLy\9 ΩGۢ.mհG| JQHD޲J[qJDɁdfQRLӑ1dx9ݖq yLjt0/G5 f&$,&O-$pVбV0?UW`:ynB~Muj*.&ū -.x8_N4\Z ;` DB̆rcE<g?7[BQ\*WQ`q*_*+*3T$8(CRjќ|Ke߱E1?wtF؛DkMMۓ tHG z+Yi$Ztu*oP@vP<yDɞ=aȞ8d3|p9azMYuJ-{1nӼҼif"hf̸43x4]%MCRK.Ku|~vi>if#hf̺4Ns> Ƙ9YKsRӼLB4+DZ t/!%vmd8Dflp-6 >c+-|?}!:"rnGmS uhkܺ*~ʪnqo 1f?:̏(ьygZPj=Uwz-FYvl}\ƍZ3L$W)~B. X"_a`8rhUoam o;wٜ/uMČjk_y3aL9v[W{7nG|#r4o~s ~F'};)Y{kf,oKޗE+!=ƻO{eR֤\os}o\srq߮gJ'JaD߯u1ELy;S~@w"M{t -ws#Ⱦ;kAMND}O-w4F}_"^Md("~M#~ jaMG"~0kMCd?Aõ~HHُFh-d4"~d,#~d?a+ǟYQԏa,wI~~.dz'oO4V9zzSE1XWM&g\S$u[`|9c~&OEO}9Msw2ߔ>_ϻ}^ňO:HK:/uFok_ kn5W#MUi_b_O._4=oԧ.43oէ.4;ԧ.=4>ui<ק_\iA/է./iAiK˚EJ}6vRVqJcz' /lf\l5#kfCh,'S~ҥdf0|WMS?CSYm Tr7QcB587πBd̂/FX @8+dܕœCVCTʪRQ~diGe &L&CULܡNG䏳ys!'?C]!v\!-&dh uS=% +n<@>+hV/ʯ:0Uf#UdkjF闚L z1W-њgY&VMBn04#GѢ]d=4- |I&\O!n{~Gu bsNYi ( ⾻X{hCМv#e\{Ni(߮ݤw޵m@pGAZD1K4Ak4{h]'O %e<<ўQ rB[uznK;M'n[tHڀ66TD܉fݪ .kd݂q{2B_W<ڔGժ7'2FO /I9sh[hJ4;)pq />\^)x&%Ez!Uu9<9seEԂxq}ȯ%rXUYhH=!M6T:کOgw5kcFl Oşc ,-}n0?˷%n$C`r~=ȞiR_qvpJygalL*e0$-54<3'f$9[xTm:kS';+זL&{7GN4o3͛ysj^òk׉DٝEJI`7 6}0~ `:rZu$qWiO<+F tU-bjz'{zHw+Re/6fR[e/`1ՑXak̀pz7Y=؍lӕ<. jψ[\nMN!-TU"v>WL JhY + TK \ob :4ʉD?dzN;+ sX.F2$a@㪔W.e sHY8PA_Z&\o`*|PbpIY'\*WQ XHnm5 ޹@U I(4=˄i"~: /,4t U- ̲>Qʾ=m3- 2OS>RUxOqŐJ.TR.&L>G̀ЪbR21PIT)wb(jX2D@OҜ 7;U6܄@HcB¿j{i)u4٧Ag?hЕڌF3؍U c3"Î:X~MX'hPvOcIUR/Xඒ/iuٶq܊ u m.ԍԣT8eǺQJu#wDb=lf\U_4o3^۽rKCRm_ɕ'[Nm! Vn$y*Lf\-R1PW_[g5\JyGpWU"]]23>>W:ۅsØ,d%`PU'; lgp+aB#ن R4c9;^lvct)/Ȑ7k91(P%ps١V֕( fo݄#WLJX ކ!D#-="2~>DH'U{/}i bN){f ҙ:cPKeTv{hy՟ mbyit闡W!Ii usV;p< Pq6YB=kg1NS9FOpĺ܉\I~>-N {T2<6#Nlhm j1-GA9^HH>~ݫĉ(%q.{GfVjĄt~::!f18w8X%Oۈ=I: :XI-Z(L*[la?]XUY=֫4偈f`ݝgu4@l&g[׀/Hv;f1/;l /QW7w*2Ⅽ(^ B?:B)ٮ9q3xIa{*(kADLÕrYJ.~dw5yy ? pD/(TEZO-:txJlMmԌx$PS2$&]Ʉ8;R+@ZsN_^|^ 5;(w%1\ṼVL,-n qËEd|p7N8˧ A!奛@!d 8  C1,a"$p $@-ykǸ}LЕ0n_ krMSڔAU#Ց& tb3f{QtZ"9JoD4"C}ݚ+ؚܚ.ީ6 Zim*pڒ "^n*7P{P1p>c<<4zc<ޮ6+%Rlݢ8~wߋvl6 S~c?v9C!]#|\'ݚOpHy/7srCꐂ>Zi7Rs@!@E )%eAew aYk5; -*@}]\@+zƭVݣȣTȂz/;WCƬw؎X hƇ쮑rX3 `ޞb1*0AY3NZ0#{@S|UL|_*M:jkbT=;s7$SČ^6j `Kw^e*7x(K3${Y$y:vƄ:Wʻ: #^WY!mf%XqF{]Q܌Vd]2G̟8#\>  7}1 OǹDE*mӮ9d!;tH7!!_}L1DJ0ɫ,ʀAwj/-D'Xobjۄ%d;2#X3UU$TCx)KNwfu+W w$S;/CDd|.fͧ!ks1#8P)!)RN4S,m#/~W7 k`ԗۿ,:hNrhQ`M fQCR\4q=8?|_ ,'cj֞*{̷#ۺz4`<ūR|V4˄ctVC ++Jk&jT&.a[yƚTz؉+gNߢ\.b`Y}??^WS.`B[i6n+Iʲ^>$<"ZtCs |,iIO-Nߵ=-}sO6X'ҟ %^UTZpy9ٲ 2ߊ񐟑vNUom鶯WhۧNEY|+m>`Ydc(6 D!QOEm ,̡`9B墫pTA@>/s0 kC8nbU鈹 ݵ„0 JTp{GπÏ Gke2|e/ _oЭd|E#RA!B[ޖZY ڝI9{d nh]jaLhXl K iLFfAFlYz{k;LWhQkS>B="mb<`DlGϸC8J .웻+ Xi`~цw M y9W1 ~Qbẜy%VRyD0o5hX^@E Q-9p~.U~?'٩G3S::LSͥҢ>YfIU_}T >l %iץs7Ptad"VV ҐjJ+UV `B'kUZ] c/gN6ZM5,oW"zmA#N!#" Xj jhIUP[5է2\ϳgeV2 4Sטy21 wW{AkMp%jStRk WIӸ I@&2+Sͱ%:8c=x(AՕ5tHD~ݐJ:٦Zmj^i+9=o 4]&q&6K,cX=~=,Rס%ZJj:pm:_$Iu_֡%ZmHiBh̨NvgQgCMfUɼnӴݏx*T"w): |4!ϊr*aTF.T 6_i$vmm,4`Hy1 y/l -rEH6xy8aٔ}*6ETTLEM j2Tm@}:5UPל>˓4Ng#&At,S'eL d"&!zl=9,֚}z|]VQKZCPQ^ZDbajO^Kʕ_Ņhq`$tZ\\Ȍ?S_][jM6ocBB${@JY즯EE)_\Y8sYat 9GIފ=־.P_ [T'h|q^G幩BO.)z俷YgaӮg˘(Wm65=Ae(GtҞ>:589F`Sey]SXZj5L*uwGgS/἖$Pm>}> ~"3*|ܱa* T&hDڪMm1J}`dX5G\rn>$I^-7[v̹amf=`Zw+(6Z'n Ǒ^?Sh)@<96ɱL25Dtzbq4DmLiܒlxy~HFef{g4^R {N(qNDw sZh9z zSm5iɘRlfeq3$eKo-cIJvS;G-嘄 ?7ݮ.|神(@]@տJ/}4`X.~Y8lBG8v?bı!le?;OwMt:ݑq07!%$Ug[9vks糧dY#{ً5z)B&5UaHFg@?lt*$pYc(Vϔ ^a.AtSrYD\{ش̼8xP,^/Cb' 4Wm B0X>-g8~ {Ki4;ƶjz Nv y"4ȟ4lnzbT &Ҝ$W780,! ȞΔKo*2L] {bD:+/ ‚qڊ!CZ'ys5 "]Z$X㕷7)T39 :MUJASc^]wrun(M"Zlۤ%J V /0i1ՊtN8b$ 'PՁDgs7"&jEY.djbpdM]&)G5^nSHl\hG=jǁ4w 2.xul9E2g} |@d|#u׵<r㠰ٲ qDff+.AuEUfu8_=m圀{-OFh6AU}rdM*IТH)bWOiFjqy9-.jӮ%dgM^[da] "Mx͇WT$MmV' &#d! i IBN蚶]cy)K' p#Ԃt{0]d &Vmo[-Vg6w~݈#t&=g_[mǶS R.h;Ex4Q=.ۛ}`YQy$ILH򒢙{jK~[6ClʨI>bכ@uN֭Mx^jF2BWj6< O8JQγw^?!Om?G6S<0VNy\)_|q*n,? #^|>$l&j$RP3=uN">`Mi^IU?nd{-ي=.Z;Ub܉RufS#T_.m_ iH\Y~J:3rts;=dδoV9̺ ɠ*n%yBo7)g[WA~U3j޹,N5HF@Hj/܋rBE1Kb+ᦻe;}Ѝ ^6G+=D|mwA^X]Lz~eDC3uxC.Hpɖ1K-fCZAB3X?}eQ9e_KR VCBՕ벆i6l JKBb:e/N]}LLkPrK =}sɇDiGψ3㙉3Y[1ori_tp@f4XLMoleGiɮM֭u멛45EC3A10W\O%k=XúC {BiPW)*>,N3KrJ?ajUEQTul&Jn@x~7-c*ì,b̵U UJTWFIC;FP7: k6HΌg0.at*$ H_ JL鼈OiDuIahL͘i*Dzh4y1C`?MUXNX'Ӻe'] *]Yq'3#BItE .HLUl@u_}[MTw}d(PaX_8*T㪬vkX<mt+"_Wb +0r`3Gy/춌-Ŭ M:^ƔQjD,wڦWWwM آKSdPD3X6O:^VWYQb՘+/}C,UP,oŰټ}e~Me[ j }sj֟{3TU˵7kزn/Izq,TNAEdkp?y[l-@G-8P %2F~p픍]Ѷ>=bj`m 4Acmٌf@D{$B@;kC>ͽtq2řpj"%^,oY~^E^[c˫?vͽ$%a*E4<̳!/}ϰ۪qw~5͢ˇh:e9EZlI&3tۅqS'˙VDD߹7Q8=Dt ɉuQrpS`TLuy-;-S'Yy7ZL"V,eY}j(2Ѹo;}q:b1g]ji,RCD\Hmfkp3jxnvxY=z}J+Bj{XW˥JhԖjj#+1~If%S|Ke1ݝj`^Ɖuis<x3y^Xʨ]Gl[ao+}FvGcћe&Ƙ4Ʃ nOM@4Za:m壢n)6S`mFMIG;+0~2I8ok.0єomF dLVO}TZHUiz߬VR{概 PRu+ɧ{|O4, 9Ŀwxd"f\a532eP!`W+>b3$V%[b{x ᳣J4kxIy3JxKŰY56clgɚnD1'b%o.2@6awMY=xOOZ>\56:A˃$|XXF)FLoKV$ӹ@$CSykM 47dQG]qI!n}]t9̷4iB>żI0 A^̍h%$r8?p8uDEVF7q >8+|8'vHfn?cR7 {3 irZ2R, ^)*nD@Mwх2xN 8W۪-|g9pAxXJaΪ?% +9K,g+aAVKjYԦئU0´S:7s3Qu&*`w͔AxΰrYKqo}[|8%溹ǂ 0V[e7O;*]i۷6,A[Ͽڰ߫m::b  дmvGJpzay7=Asr^qG@̞dT#jp.:6[1qZl˸ީ (7 "cϧN|e |QcFGuZ NMשsty/4!oByYΉ"}vžQX.Z;"W+ŭ_tg',"qoA߫1t 8iI>U֡XAjMy2 92rY': IR c  &fM"*V ԋ]i>ӒIܢ/gvUbvV˰/<3)k4&⩙ѱ$Sm6k#ȼTBw 9S1EP:9^˥Jt#Y୼)c<3Aג xSq[m;9cyaLQ 3VM]n*_"ɭ+>lĭ'byGZh/34s8s`k|n|z}M9qM*o=S,8,[i1W,U/nb)UZP% @:WTfX(,,-O%|Pb"i4n\]VgT`l-˵bux~ADEeTm~WcfiHsi .: )j47T[Kgg4)J* &Mub7I~K9NI="r|'2l6ao+ Ҷol:+J<.M ,Y:}ڝ+2AFV_uڳQ_+ySȂ2$ KDC[w9ҪB cR%SWk\W  5qZƌU-bYC(4A5Y!%h#MyFD `(xW+fIۡ4ҡo5!F'ht*7$u(OGA%dhkxxfD8~{7 ~emem{ axFAZQTKFcH) EAQ@DQQL:0EEJ@R$${g; y޳Ϲ{}b}vi `k80Fi TCyp@RL8Bo`^K3rZu() 0XCC$`y iIpG UW;=~ E L^WGT2kwkGw}{+hJ4(!56誴*h@HL7`["=Qށhkldݐʮ.hTH 8<r7?nk?[Kbw`M,,늷n,JG%F%g=7MBƆ!S Y9Ki*RZ.1 #VGv`pS'`M҃5p`)fD` N8Gpt~sQA>j(6@s%ގk={aANȁes =;1}NxU'a#xwwuENÚ:FVjVGLPo;Է rxp9  ꕫk pQǬjKh"AP䁬>`EP5Y@ShxUCpZ/_h/>J<-rۯu'@q!g3 C;$\H+2-tFNkF:?P 8=Va#] '0vpbddrHM p A;k+R9t휬ΰg9uRаjD ,ɐ$x0Pr2bV)*o8f-M>-JxBƒAq𠦝R ʘ0eX4T Odl5b~8 s m̺‹#`PmcUL |`H@@ ޱa;1ٰx;XyRU ރb/{^Mi;FvFoZҁ@{L~ T:v,,f(AC5:~˪/'m\ лdZD?(0)*nI)V$ .eI0~h0 tBj#L/eL$,cC:USjO=pc°  I*cZuąc…:b`tVCvIc$r 5_R/dU&:F;uzcWJJai h_ ҃nn;f5U0Tb]Xd7B j6TgC3X]< Uh5$8 `Y& uh) \a:vPرlچ).\*|Mg`@"恰*mAlywH"σ<ϟg}q;԰P4l&in!CHƯCôFMj^b,氪ա6vIPaE6lmfP@hu1X,.k>N N+ Ɯ:t 7hc{c;V1iqncm`^MrØ64P Mv=C] FK̺w*ee:Vt*8jԖf[jɀYVq?PI#ľ>b?  L;_ P Xޫߺvy^fN a;@OVtj@]&4 3H_h3da3?F?M> }{^?Ft P'_/=5=`OM Vč rdmMǢXA3$La s v}*l>׍D=[UbK(($#`yJC8iU4`Q<@堫%]7zv ;ϕ 5Aܝ‰yj+[mk;$O;y} Ll vHOi B}v}ճAn9pQQPWX(].rƒ0@5 $dE,0uk$ ƵzvEHh]{;!:m Í cƆjB(*.6XCC谖*U6-P8@70}g0:I&limYnX_uL#0 R G[1mzG撉zD&<T`sx7lq?#56, Qb!% 7(gAQ6!o:V%[rlԒQ4lP$tSc^%ľeŘ߭q>c~h'2V h0]VT-UN-4]4 

`%Z{&I'[FB Khc'VK"/FF} Q!W(aH:<]ڀқ6,}ly}Wè_( 6m\'Ԯzyb`J>,kCUPT\Fv\J>HLl|}PMq,|>\ֶ>\` )@k;Z*Vޢ/"DE !G g(/5s8$.o.{/_kW @vNqcMoH(ȿ*TT鞮m0_[u'oai﭂5C&Tut Eu *X"S[kPUSW2>lff8f DƟ%[Y`6H9l|f 3wG}GQ_G"cz$bAOX|

hhh$"9DMCLփ8 5Im` "a5 Y7GPu8d{$;d+;gE:x]O# ag P[h/ogum ^N*ߵ˚V$.Ɖ b8?.f8ȒRxIR狨-٭m:i3}=mKmi$G2?!?>rfAjeSv6;]}CΒ{ޤuP򢲁lG?HJ_YdҊ_ɩ@P0YSwJFM<2Bcd"#=XADEG¶@YN8ЇC) {;3`c|k1X{؝&QSWQVN0HP?MRѓ]5h.Se\X[V CW($:?y>LkAn cv9jJz[SHUZQSR]Mbw՗/99\L^D2 Ĝ{}u}rEz@MMv%[QWy^ΰ_:zh>ddxGǾß%9VgW'  " ͋ȍy E^^TɌsXf|A2fbu=*YUoh} dro:@sy%%n,s\gwH=Hh_b]vmXQuQ6[-2EqŽ co4qt!Eqzx'ߏ$3ܖQ~z}i 30ɒ2%.fC<Ӄm_^[3O4bWc6i%$QMO&t)B]ak㺙׵)',ɫƍ^~6hpĬ Hڄ,ܔP?eQ3Rst'>) ˜fޡCm47>[Hn#ʨ.cebseY{oN2R%:k[ʟRI D[8snpG8{*E_-hz4;ɳ?,\U8|oPIu/ەxT `]Dw؅;,a7X*(N!ij:NbB.e1u} H$_!u恍D&g##>{C\-4HZ\-;G%=z^%|-š81n!|JY!$:{?ҏjKX=&!{SkIyEkiW;wՅ*F1jd !BzEt=xԚ[jȗ>4NU.~DžLN㗘ohuzXƢBǷVe NU< wIhEMc9q4ȑKhm̑P\ڐ#a(wTH"9OZG}qI1u0XcԜh;/op'a y^.ۤGq=' ?~zTt oڠ!'_"f.u!CI>sN\g%{Sez VGa1Zm( R҃Nk]q0;ז.D{A21pߗkv15d9h9;hQ oԠSvS5wB3Vwud.u\#*;Ik}HfOr\?/sת5z,^۳_g]vÕ+ho̕P\ِ+Wa~8\G$B)+߶m\ϕj/_$v}[g<>S.ع.!g%%mReȲ%f1–P+%f@x\6 mlYl`n>G<\}p K$`?Z^^t޽d=Pr:oUQxS(mnqUy.IKT͝47&aZA4\ېPp1U! IAG3OYtU3LRq Ȕ,~$K{(7ޗVpqH6x ;N9QҕcEщҦc'O\{!(}YӤ#ǷPQ~zz^I{/ok.Ϯ vT=L &) Ok45`Hz&FH<wP4/r 6%0n&m]$45euNm?|`ҵk UvVW}+u j4a\a 3`{`pt\Gg\߀}20 ){V2*W #79ZݡDuGԸGgߓţf+ L Τ2VyV {侲Ii ?)v4X``dOCsxYC5Qɨ%ϛۻhſܧGPq7w3ȼvEr-&2u05O#QRtYS^F4j;{^ cw\8[%SCgLۯ4LIZx||}y~ɍd<N,son8܂>z8SkYէٓ^\422t^uXY{$F ?djf{<;_7* [p*?Oux{ԘjvgM*xeLڒwf(=m>Y_JE2KP!#M6ۏTCR/5"Ȭ@u-U-AXefCA,nޱ_Ql?\-~;A/+{}DA}с#C7,LdUא|ds͹}n>xE?oI&SPLG`.p6 /ny1/@yq{ /^܁wȆDQupa~mOcEόt^ꔾ*daHJ$1TV6rk S'r/sS>H7a{;Ԝ>pYlH)=aG GX35|>Z$U)rCW:V7VXRn>6S9To.w/ `%$Adp^k+C7S.9׼ 6]T#"^l iZ 6׌1|ْwe:Md{QQ% gqu mNS6v6csa/2lϯ3%f's i4]Bj 6ď5/< :6~9hb]j d_^O9uq:"ہqrF>ԢACQN`9@p u}EUe XabasaGT@Ȗ efl wU#YodvxAѧ~;j:b?`l 7Z`E[j [2|`%n]lu! ~9^*rVU*"^mUh͍y7խa7Ykh{68M[ f Ae[[_=Lu۠f c}wKjac9}ϛ:es mi!5 Fv+ ^a_nNHBW^!7* ԳjnbǩзQMhq5o7lh+`kla;zY ՑM" 0=aס23"am' ߟTҺK|ǟ@H uoE WTpfejXf -#X‮~f =p)BM Q1 XMC_8l~mI[D~H*Z2VK6M !3Pt- !!Hɦ CJ :#֐ԛߚB鎬6VBCEo8 kHp8%߆*3]iBѸJ? jHЀr>"PB>'Pq 4hzz7:ԐtY@ɰh#8Ʃ6܀^Цycap f |R ) % Z(әk2 Um I8r3kHqV?\"UpJ>kH Ѕ ?!O&GGGEgMEk)ώčˊ$gt.|s8-ƪ-29(=r[Garwpq2bg\:EW'SLFl}Ē:c=tڈ+>bLj"W:K9ewu_ݹYe1yGi4p 1g5g(|pm"KaF2Šߴ>  ՒTUVT_HKZ*伀,9B.Je'HR"UT0]ٹT9}y#*w!) w\ BV(%$ V~#AKO1.~"g&>~{F&4Ғ ;J_qv_Q} st7DAh' DP%b֐ ,BpKRaB[NP q47\-."82| RQQ_a_NHTژ H(_s[CGt e~x?q+l*8|R J˥6[vJ M_vF0$0\FB̬#vI=s#xۢ ^Y>r<)vO+^y<O>6| BUJZ`(CgTR'a65hmKU0N 5u^|-tY՗;DV_0uiW4BurrHbjGQ{I#,GE9H$~cft>Ihf}8FN Cӊ2)~ʵf|׏Q%=;yY_@f&Z{ 13ns=Ϣgs\}t_2}0eZIE;]n+u9w~K:[@|gc壟|w_i̮_<{]TJ>֨K7h!`l>lD۠&bXR[mca|"Lb=[;Y X=sme~R WW\rBMko4QF S2FdS7\mNU=/_t.54:)zB`6;mI3W{{KWV/"X34ڧ~0JL ͬv |x{QCڢ]F{~T =%?U&/q`3_ w䳋 8c R)0W@AnǫZ ɘGga38Z8֮W0!GZ"}[^ȍ{_oGRXd<87@&QLxUXS7ۮ'iL=iOڔ3-+?0y"hi㋝3"iߥ?7_:VblԎu]1N14?وv}a߻R\߂sM#ޗ=vwiQGZ^x!PY`kF|.ַAD~UY C{)j:W/zjj<0OBsVtQoj֙xzW&ӂШS } ۺndw!,U UF\:/]wY7;]Bi>mk:O<6,xzGǛ-饡jdOo5m>bNRMd,KVv2m“9'SI 4}řSCarHV[doxX%FN}|y>4p7N.u_H dq)׺g-ұfw}#)=H[oq"'|I?uuݓ<ݫr2tC;pR[Ʌ[z>z_T퓣+BTng^Xzyܐpi⼋ޯL:fw<rwe^QNR]?}N~4DkinMu{y\RpeI/[%46$vg!ߺ lEdR}W9b`JR*7pjs塊AB}C_'݇2MFUE6,k0h\F*>mHajǓ԰Olٓ"^(>3]E7PI|VJyRc)9wjW"N v<:HqRrT 5mLKW_^,Oj{<ʔj1+Gѣ&A|'w+Ry͍^TsieN?ċv5gU{{UOV Iŭ:l)_Бpᧅw-ta^}>TL4Bs][k4V6?&}XbթE}[,E==qVo cJw_Ge+34΢b"Օr!gلOq{PHp}:k>+"NaɄs)>py9s_Q#X}gm4{:rpj,<+YxFЎNn2+ 2ʡSI$nomtuhZ[ͼ۶KG-NZU ( UnzPu$',-xJ&X7u2#o -1Ŀ˚2Ôy'L\Ns90#ixOZ\w/ӽ|.+/}Gb۝/ed- y)"A.p+poz6qyuoh_Sbޛ*Z йuLq.Bm~l2>qU!7X}[ hҋW~ɣ|ܝcE:7IoGEUR^᪟߾\-Z> ON'8韪JRcCOFVx+  )6~ Gw)Dk+;pmyodqLݍ}>3,+?)3㥰(f3j~}/#?zL49owE?0!u*W~66m> ݖPoѯy-)(n,r" ϾAq~M7F/UP`Cp⷇m +*ABs2YI(s۩t|_k6\&s+ŕ5W?;^;&G-7h懧Tq|ĕ{d^/ޥo/ ɉ6t& ! &;ic@`{&խdgs(j^&i1^IBv^t߱4a5jh&)4-;" B4*H hӣ!y~]?4-RH>ti&;$Y_s( d Qt2UʿwOzؠ=T\9P7dOIM}=BT̥7?0Ɉ9׫.Q?5u av[?nY6ti?V+Xja~xv{'[ \=A1l g)-p+?s{z< MSL-tuU\{翣A2TkuHN;Pw!X~ŕ4^55u:pUIW_ 6Fo."=S]8>*Bvow}LڵK@t[ec~BCIRSͻU)_U~GYXwrd̋u4[B\> 4k|HX_s6">_%"dwϦ/ O[P6: 8ͷTnܞ}P-RTe78$wϽwC@@oVx_~ߋB>l_sd9Y=wF-Di.7,H]P,r}--S*Jy:ێG^  Г1(ѿ%(듓{lW)S">u9vRJY5"+t{+%w rdxq܃Mt?m I9Tk}e?k e,"Wb|*gLmV)vϨMJ %7?'as))^m4gZω%dMŕ/||HDk}0UE紐Q5 ߘD wg OE虋^F*6V:'mB_.&r/r&BƹsawlW1}Nǎt B-_]Ӊ0sem: փFqfGzwte}#^\:syotL.󉽠GWqٯ…)U/I;;BP“]}+)d[ww]XQH?w;!vEJs[/3d.LJ z0Z!M?񸉮;Gx0??X~ͽ9UDӹ?{PᙗsR[Y -|<,LoB|;.":'TwM??*9"Sbaη /nTW;: {c87)N#oTu|Ї6xޅ%ĖW0%PUn|;=GO7CEDg^kY!S>3ۡJ뱤Қy"fMMsW> K斣ȽqtF˼[_S"ɼVb8"mKE= yY昈r=%: ע.D."($N<[@1ΓUϛY(;}ca%T/׍yJ,wqj5e3b+ey2&r+5S|^^;wEfBRpG';1>V`Yh?񫷑F/洦dzsOS[~3%#|Z<#ȕFftRPО/l}*K#NgVR%"aaZGΨ1P?q&>dM~>HSay"deDLHU_H[{NܪK+laǙ!֨p7kߔrV#Jӹ_܂5=ϳ+O-&J͍f7n?WQA$8>Sz^{)Vbn<}xh|(pNg% _b/I03bخ*?aDTƋݕzN6k3cf>yT㻅Vv-44RS\5UQT\fL3ug?!pRnx"g0˚\vt.ʷ8 ֢誣< kO55s SQˈvܙKFdΌ@f3RC} X"hZ n"JOo=ge_JyI`k1P~ȯ$4ZJqWz8X3ڢIslw*fJ^Bo3 G=};=Kw"EX@}Bj}' DF<8j11W<>b \JfbYT, 8V,N1TsNhvbTjg_1F<)'η@1Ϳl+Q_)w$swv.BW4ҷJ2E>?;kޟgZ $:}xi[x'WɆ_f:Xe=OgYtH غ憄Ә=?B.’!j7Wi$w-pۭrpa6oJCgkM(_(f`9ek)''^>5+q" 7~lLQUBMRHgL9K}x*OVI1Ť7I|TڤdU_.w{4w>Gt C xE͊7o&pllޓ_(~wKo76{K3ĤĈWu ̕O=FR蟹qV##I\bV֋/bQFRtvz R yO4dYjc$=bDzT n"{Z5wۃIgYTX)*Q>+/dn/򪸅ie:C $jfw:P*JхǢ̠F]u6zuE?]5JRK(+OXc6ϮcVyl'B֩߿| ^<=w9`׃r@"/>Z|"w٢*yi {3E*e[J2QFd{(7\ qu~'nW։$inlJkoY~yf__l7O,^_k% oV$U~ >ӅŘj/&z60127,[Wv}--+En;IU*0ʒ^el+#@ +Rn;EͿÒ,Ĝ#r7FxW^yJh︖M# ^!LaNc9}1N)f+/B~|x)Z2-5^1/EŷjR_D-ϩTͣH  _;\˝^ &>Y?Tz}4Fc$s q'K/5;O,=Lc,Քvҗِ>!m_dhxJTJ=J??I0/^!HL-pu8CƬϓݗu+~,G_娛?PfhkP0YDK!һO{wUTATTn.N)nffzs9ksGk~?kXL4xI8yh13Uha*ޫ|B&2j?xADBa}:O3e{D.tCiR 9i 9>>b;c.I5,do#~͚BtƾEU/pwLxxƚƽ"%l#.<߆~fsEt.kyC@:2E']w,{UXxsfl?E5CoD~%iy Ts__6r w?RqT6><</}Wt}$7ո|اy$@JuW.A|uA -W70ꖸMJMp|p&n);/|͙CT 3ecA8c2S2!$Ak(%sRb7Jk2+ٍ?[fl C+eXh|ϋZd Um$'spPV="zk A<2^j/]nh>x؇"+fn''|^͙6[$1_ȱ J)ӸkZNDqS5lN E (^ЙL1/xj]ѶǻuJ-+R!Iӱ<:6\3΄yUeO&:!e|eűuuy(^uˏB~qf,jȤmΒk[9)2+*#Ko/ [LYͷѺ\RҀ׀iH)A(uo^qr҇"@ΏK7t{J4Oz֝p$W"B1bFp> 9wųvJӽ~ZĠ,:(iwS`n_wo7[/!L񺅺Mu.ʶ~yTY㔃ϟ'WgŎrr)5n غT%(v AdwaQS& [%GS󘊜SI{d %(;>h(=0#$/2ѫʣ1oڌF۽Lćjv'u-DΟO@Z(9XlG%P,Ahǖg^,v2lQJ?΀&&I2܍a_bR|:)e{Ffր3+//*7ntArQO*̪ /u;}bUU NMfgIFy=4>NǕiΏj@J_~U.+6׌m9E)kng}=Ө{Sȁ6vxvcCi?BBwG>eWex;~¹=dNUF|Q30+.vq[rYś%k0ۼt\{W%%n#VP^m# TF-Xڼ )e^r6GVr2L$GMnGgriRģR:3@3?mkw،K ږѲ a}4 ?3Ʃh`2NEeh_q `+=f{G<-&p!L s'l6c.e׬U׊`9i,f΢Oܬ&Dʰ@ʥ$FeuNNΦ !/izXl$.E/YMWIJ}du&[U VUU z0]Zu^S(0Y}῞s~ }oR˴W~xW?jt ^Rh z=qGUӻߧN,I5j({*muZ驦i= [BLhpfad!,Ӫ]I}E%OE.|t(% w QFOU+_|i'94,T߈gnޣ8͗j"ZHKGN ۀN#*{V}ijgG‹N86aH„;3>NI+2jxq ՘TS[39EdE|uæ pۙ!fG%Ό_R#"mvչy߁&kwl׾n9µ|\ŽNhO@P RA+Ȥde;LJ*'U3AGq=D/oIAv?2E2o\Mh>DzxW%r}h]z>$La騚Rgcf7~&ek!`)OK=/yv1#Q]r?}P >>|[$?Z5 w14t[3Щ ٰF%E%TBU{R)w;(Jb(A,âf&x~d/QE nZ=h(4|Lm{S7 VbHj ZwmN:~w2}!D8T{-w> -$ &BcgɇCGt D[y3.(w%/M6H7iqh;_QUv.mbԝ(틛U 7-O^f0Xǂb_TOW-n(wYc=.4e?ԗV<5E>&C2t]in7L._R+QM0gtGx1"z3х#oWmyK&J..j;]C)4 u`5PMNB N3?! yE3r(%,7CEAVA'nIl݌w?UO@TNr݋uo@f}G Ns! F 0Ւ=(c.*46l46)&{A /<ņ٭Ug%sjEMU]}Ywzv8]{:%"mrkYU'Б_Ue6ݶqZŜ(yCFjk'Y]h`glۭU@;5޴}? r<ݏ:gw5y-_&/C0Mj-OP-zeW'?#<[U*ox_4t{'ګq<3 V7dinKYv8P3t8O,tcK ѡs9#%c{jʶ+7pB1&W4ņuKǵ yKV3|ꃽhFdjW-RZtM MMꋗL|I=^YL~q-C&=jam͠QoR`潬 FlNZrJљgQhHA|S|tv^rj ÃJ_V߬b]~_AExuH#%j.V,dh[ m2/ݙ.dͱ׿D)Y\h>F xLd/jjbB)5ƬįHrϮf<`w26 ֘dҹ*; _F0n _@0fuL+x}c*:_S^Jnz)g2͘ݶ@/ʚ!^fy)2LՎ~ϴZ׎PQN'dETLlʵ]91/Y-8oqMf\Q_sz_VALg<<&50t2-7l?޵jZ\[j_9\O°DBt^G f,r/vϿʁQ$A^y[bHhR_TK{nfcE\ԞYt ˎӦx;yW߉;Z0ݒ c({yK1uty)F_)zt,WBBrbDx\uxբƮgCnjd_1ץ dU&-wٗe #뫌*mԗ(nggYb7.nޖf nt5X\f9b*1aH]Xa`RdNar١ א,oIxzD<и{ʥ+vxxDv@d61el⢡/%1دbY:2ێ<&B{VYp{ Opb>^dѬNt.'__zvBhz;CﻢU#=2܅>R秪&0 O DB&]UzUχV!)w1/"k,bsÇL*׉t5<\UPL w@s%f!x5V jԯ r\ =#Ni͋ I wOOzdWl՞36.WF"L/^&AΗ=$L3l_:i% 0ҁГ܈.>hZE[Yg8g70q !#]gN|/9c`EعMPϭdʤ1+&Ƣ ԩNTex* ~^4;*5 y8ϟ9nbz=C^c9AQRuћpY4'AyUugGFk4=~MU4eBTMj+-w(7LAuM:`ԅO?P&OugߣK]:;[2hݽH8[ .x&qB_koХ({we7?:,@V/nΧ&477gq?sJV\,f*sYWT$ IBud~}ԸV+Pѫ3n+5I='SGftto.[}d\a4!ٱ3mߴ>آBy'(s Us+Y~%3Q jm ͖.2a`M̖9MEOD:VM[ՍteyKl9;9ķ7\[\wÙNFq[YbGXSn'>D_[(kVjE͘9 /$aLSV #v8P+PBYy(;Kٖ2h@엸.%$nYNz< Z/ݐÈi;:\F=oM DWF9Kqp^˼Xջ3rT̄0EUWeѝn E$>߯9 +MVŘLY HF"-Joun w>d\vNڛ4țs'X+*&ؗL3EEH] *&e;\A*o" hbm\4POث+'/C{|y #*8ݞث"lLKeob+-TFZs9>'әpf[t~uep0f-zl6^1tj@GE`>37Sk&S_׹xBz-E[j]'2n[c=d$ݪWM'Xn^8  ?9m X4WJ+n]C4|o4>:Ӆ2|\3RQg[|-q~uKCM /`5@*>(ƪq*9rIx=,ZhE8UCoͷD-LEOF2'N*PE2Oi`ty,\%鳼6\S-orpԼeoB=.YYVXܵe#Xk !&}a%Т"Ƶ34'd]Y :׋)dOW$AږW 4S;قOE q./gLQ^F }jʨyĝ4= pi+Z4BKٷ3v,fGGA 춡TE3ʮ. x(R |p_Ti!FXoU6e}+J^%?24:4:GO:U0tKz)03`1!t2uLT[F:/)nMK j o֤(U `Ī3@xiԒ =Xk*U0SV`vA0eKw~hUU˵_e{p|hVͣW!2-&JC꼕}(7_4V {_{Iޯ@Kb]'XgM@vWD7\MC 6d`k ɧGwsī>`~{_[~v> ?,hcǵFɲdWd]zɥL+(Y+v5V΢eWW:&8|p$J 6%J `E]´Aױ>5h̞9%2R (vwIMsup 8J3@2}"UxI YF;b1#tP|Vr7k%ҭy ƻ <"-,zfCb5x8TSȫr289VW?>J+8eqjfE5obT\Ft P ǖA> H|x [ 穙y>7SGhuwRzհ68jTeUE\O! ꅺAv@U#C%$(;V9jd=5̔ t^с1#AT* ӗU~WYLhNR[ǰ`е6`O_Ip򈚪 :ΪrA&Y q ̵lqdo]hlTX1b[,^:ep9u xf|MIQ4&]z)3ƽI;B&$|pTFzʞVV lQ1n徙6eX/GBZșSw{m}53flT+mV}( `QE,-n\w=]4>ev6m *~)=$5C# 2#[Z^~浼k$߹5d'UH 'U҃U$ qĺD_HcũKq⌕17,9dmaJDM-UoαNzwp ׁɱaXZ!*&2Kݽ0n/.[9; T WH:ؿةN}:{}02 ZۀW'771` ۾>0Ʌ)_ψINj OˑWwn ?o]AY le89x{ ʣ!8;esɪ)ǔ<29qcM5\yL&I,wJGpeaKG⪕gbXL~oi[uc!)R&{"&J1os<!BW$A4\QF+!~>W l^D k>1X]3%l Oi+ʸeR4dN(% Ki=lvQq5d<@(I`=@ _1 bq%H2.}M9FL;5iRtP]͈MtM*pbuG=2_7 w_c 3I *`)shx'DŽt="bNop+ek딝kVɾ m􎗍})I 3pϰ ";]r$ڌblr^zӁG>NFC.ZUў(t;Thu-6 &\Fnj[ {|+@1|as+cþ-+8,1(9vk^X9Ss$ zD"fV^wjiu{ α3q>1QjyLwz"WYZ\لEeQ 8"91\)58MMwÎn` :Q8k%\}Q$Zb:;M> ns+%PL%)'J\zG$c.[68=׵gm4|rW$6Ju޵tyv@a6fM@%: Ʒh|O˻V,o&)y>33!# EitTXfzU!RJEM`Xm`vԘr!ɪ Y<T-6Wk-Fg"X3AZul}q eѲU:bvGJ |%۔(FLYո?a*;zW09trdʲ!!냹$bJɸbhKTCuyܪTd +i2&c׉^nkY$!9/jcN`1L[h?DWMBJ((6(/%W%bqsq}Y`k(Cludi{oA5^]@l 8"-H9@oչY0gf%+i"Dz1St?cB?ÞO2~29gȬGE ޻UP6c9- _;g.I'K_Q " ޫ\JӺ?EʁNZ} xa@! )r6[~ƨZ}>2|UPmIa+3H)o2O\Uxy Xt.8t#~w*>޺G7Mu"i2Ruh\}W/ƫzOWīkw`qR(MM:WG<7GCz"+LWԤdp( x5D@?[DȍYv "Dx27!%|lZ#*rM|oM0t^fϲb")K!j.s?cJ^">A!5~[fV7RGQDx7`>S-չ]^ry)-OMuv`eTa .;.iԜ;_`RR ‡CdB((Gtm xNSp"jJv֖_C#cK "!QE@:C-0؈o.Z,za>: cHkr"|#HID&ߊSV?_"/REʘ'{ ZGP-R5YڬyJp\, °܄1)XO`$zqqkeLX_&,eo?W431-rHx,')V F~=6ח-zNWg%M_{?9Zk6ungc#ꫂ@iYo2T 7 $Ө]bӥ9 ޤXЊ+]ZCXp[@K]uܱwMbz8]x@A9CPiu%v0͑kG\"oPMJUZs:1;RMgVemAk"![<Jy޹ۚUv>tP^=!-˘M ;)"##3L3Kֳt.h)tX@u^qL 6MM8jG0ˡԮ FQE=QPv7z^zLʋOD'UlgPUb zFX$*KVJ+R BH,>U s%Ef?+TZGycsg3xN6>2"h-91]iNw:N %tcܽv ~&Rgqٗw]`C'kZ==bD <<$:2_vSJۣS>uԐ|n8̧BăTPN(:L.qn=4n}R)37v\_^~Dr%r%aM݁v"GI?h}&J OC = \TFRawb!̽ I-~+:#CM'Eؼ攭ڥӧOَm¬ֻ*!6&e/X.FwԘz0WV(>2a2KLҤ$In5OWg#ZmfzHToAf E\]){O Xyj>s`}x0:/4:S 澀6.\%'O _hjh hUDdzCU 6#)?Eߖ+!Gߖ퇃Jwרk v^x"::R0V9Q}4LCF;9C|$vz_ӇSPtX#7섈Cҋ |r*̫z.+i%شO B>ERRUTk]9p be?mꟅ^]YYJ?|{99jfs d5 ǿۜenKmt[~oZ = jaVgi" !<׽e5fi nmgAݎvv -Ƶvô Dm ԟG͎~{dstatic/FlowPlayerLight.swf0000644000076500007650000034176110752741472022677 0ustar00massimodipierromassimodipierro00000000000000CWS~xipIv @U$x AO/D7 V =}` UjHgVsHaFԣVJX[ޕxmBV86lm8vykr86!8{y~Gؑ'//3_f| e~d~K#k`16F4=ʮp: ùrzlVV9tLl{%/˨,WviX^Yz}7Wer\p‚[7U=ooC 6X{q?}[xR3G%wf},vTn-LaǮBټbUїq}b^Y%Ry'kn74Z> 11 pbND1y|5c_a@"Z^V U6Q.V٪[2\X)>use^lџ8ѐl2"{Sp2 Pdh:|tZSϛl(@mHqA2Vkbޭ VNc&y@aF*I#aιѦR@¤H H)i HDQ@hENυUBH"#v815 bj %!!&CrXn ?7{ 4W߾p<4xE#leus-U=:|q %3ܪA8y9r'nީe)mNlJ懙[z̷QeŢ-0P.1 #qT*-6PSZKO[UcW=9щX؛Lbo$ 7BMQ\7&@= rq `SC ,&&s1XQ< ɾMKc37Vۆ.Px,~uRdWFǿ ice߃e2ϒ:dʅ<JG+ `BOF?cN{ *`G}[>jűXcMbXS>byuxV2F+ob>;~$fA,dVgp 9w,0oo#[ͭ3n1?[&l>?WnXP%Hj=,Tx;jnb&#&Q89ŵ筰AĚ͝*yq_ؤ.`(oln]"!{-U=o﫳Oi}v2ؤ ,&1UI'm]DJF1Y{nWj\PmO9FU_qqZO 7q;m‘k#wGyoa aq6^(r姰^o.sR\e?rV<\ECV*ceyN ܂ ?3B)<>y6,~˥r6?J.Q.-p6J\D9?VmKd2wfS*"$kҪ Md͖ Bö@M;0ĿEZ]9[fsk S?EK2n"Jq,r-.yjAVnU9>͉)! P edWPZ)?0bR:YbCNwH @0GrN|A4|~myO $ BPb|qiL=H)[nKAuʑ]WprKA2NDd*.mp UAXqc-;+S(?Wy|h…q07u kU#a!BQT@P$oaloB|X{-ofrByIJ418<)H@  xǏEL}|7^1%"\~`l_4-Ӑhu0c"pGZ)W*—)|)`)Yro=dj%LOno`a갛_;\z0Z 2G2[KΧÒ?QFK/)#QC; 6+lIoM62Gf/bHoY0$?vEҲx"Mۨb;ůxoǓihL6M}gRwaotԳ)qO!EH<8ގ{vBsro#{_2*׆b`l 6&'X~ \o!%8\LufsC&* -K,⍴hR!-z8ȖM͑N-"^M0 6֫]ڈ8d9x$ JsEAHqa[v*"3%[Uh1yUnxȡ{N)4^T0^ 216ićӟo`11[hCO^6oK`&_ &]8.- <$A`ƢbFE9g*0 lhΘ= vs,c9]qSNC1{lq&p݈@ƤfB5ZSֹ2Թ{`m8;{vm. 9ԟί _DR>MG-P*8]y:oD"й Q 3B&HqugD5`7`OoqeGxoOߌd2P&Nr?w{A6 \2q9s "6Ń,į ^y2]l 1Qc, ٷo%IBF+H&vr#0BF>f!?Bw!fބ;_5FGk`^4KK 7LC\!ĎC . lT>1>" ?z"Zm[-/*n?zivs`N) s 딃G(mX`N)WL1VAC`E15-b:fChxNJOu.y. I\7 I>?Db'c'?f,+|w8E+t@X/)nLnE5"O1O~݃ԟyպǩT"~S@4Tok~{\+I()E~mn؞J4b#w"#ק(}/u`dϧh؄&ϖ:EWN{pW.}j{zĒ?f_ x/Ÿ ɾ1.twM$vӘ@$+SwuF l?m53}R+D{B13VAMEta$U#_z˪@oLg3-[׷Sp9 zwogwic$P wZihC]g9ICO댁Bņ Yɇ/8Ys܏@,USu%c"\1T<9_̄_랋]GsN=v8T7$)BKf/QGcx"،4`N2)NU3<$KGȚz̤8$5cRSy֖dU[Ќ>=_ff1qx}I$ %!~W1faM4N "S{{?j(`dįMx0e0"҄Ob;!_=El=U_PSӣ=RN%"JWNک~^MOyZr6i,ҦU7ofTndvHHPG/ט.5tۦD7tuEiЧ'c^UN2^gyҥ-UZrT?֗E kvd/Z^*20W(a,ѷ[ cJJ:^-R)t\1%(C`=)[2.#>-yJ4,QJy^. v [ߧPnU2A#"v-e_(+fs%==jyf0}R%5hP:ƍDh6\? °IQMoT0xzIww`itaҝ̓~U;D4`p Nj hu޽Y)Th[k^*E_Dh7rI,]ʆ~2E#ih%'>v;# B 4oH 3<3օ6F׏v.ZSvQkdDȄV:Tl:`MaǼC.ChP{;fdO#>o'<22iCLүxC$:bb{{h2tҖ _ԻQf`BN!>FÀFI-5c޿ u=\ s. ;6i,Sb 8vB\‚jv% uEDl3,l=$,mjv}N$: U33pœfc'-]dB(j)6O ;X],MKC1t|'N\»yd[O{%"Ս7z~ ֖KWfbRJ[Rxmy]I|i*&'hbNxA OPqb㨳x_qWqǪ5l2kjRn>;"g+ RD|On J~,zbg--(DFSP0`f$**:|A/U*< }oa_$:j=#/cKA ^ Qj7_}CZ̳ڣş-abk"lm<)rkN Q35P#A/"8IQ mC!/*^|Ok ,(xθ^C&1ë{‰]3G5Yom5&c $9%ƶ06 *͌ҾTg iNHxsQ_.e"Hąl8T(Ybq>f,؈V G~|A;6g4HD3_B27|rnx[SyzGm7x ,\& LBb{EC| /%b +i8&G h>]P=Um],셌]8=9 Fq˨)x.(2p Cw d>>y#fS>X69 >/ 8{٧xT`[sY]!Pp-{Qfn ؎7 Fѓ9CW3Y&)jU X]P̕~'IH}kWլ;֭B+U=g w9_(xBɘA/N杝%U8y&!}l !I>#XFG% k8ٓrZTFUO309j2An+ӎJhBq.Qym9ˢ JHvz@\/J !u3xvH D2?DKdſ\Z(9/3eskʽ+AʸjxkםםkZ=%GEp6VwxrC7j̢[1ɻUf1x2K5jQ<~WѲnIEvnem@_}#ot )(췕"̾dcVt&ۖ%CyZIHp =5te $buIЁrNԲFFbwg7UNl37Jyl{(Ӭa   twg,L5oZMÕ[al MOJaj;:ͽ4Q3^PfK+eq#ijZ2ӎO)-4"#f^`Ww1&oe GrCN.[4PGØ-HЏ 6CLzWPprr50VaQdD]ERVZje+\ZנGyʖE:i2 e&?,UvmwőԞR/7E gс}P1IRPWϥSi78 YI{ Jը O=JdO(NA͍ Ico 6xm|З"'= P( dCsg|wvޥx g5 ݪLq0> j{ >9#G#|H(S{`(W*=?ΚISx5>ܦµ{*Ue~ODZ5y&#Ń|9(<8 $BAP k3}®\h a{D(#tlO^Q3sRd12=ʤ֘Ho! ;zA܂|Vt7v}D|rpњz B#z$?Rr@)H9w`:dB"p )x/ 텅춏H%(u4*AqlZA'1_mcFcP8{0JB#)S!5-r.#D plrNՠ|P%b";?JęCBf̰ !G*3> ]hw3a Bk| ە[?%|S`p;ȮSa&\࿂ 9'7 ? xؐ걋w_x]gܛ!fP:qXtlaGG`&fS3S~R#Hn%S~爾pe2SX=]±'bD-^92VqK顂rR14RT,q HPŔa̚[\[ߡZmO/>Yyoh-: k_ƃ.7 /NBZ"߰fwl0qx$12]WƔp;d|,Mܤ/тufבkzk;Nz*t SDž b\'yFLz 4[9_߱4N9tSYk0vK1Uce)VHx!yMp6%]QCR,s  ,STn׋|!\qGƬ\$>) ֊F 򭕿֊&>*|{H=e܍n٫&:Rsff]$ׄf"yc aP0A_)K)]Jy9lbtL5ŶbUY͏OE 4OHЍI ĺ2/aMg[*D;s֖78ih/["X6sV/n@ܨңmjz>LS"Ij֞=3Ņ/όj+Mn7=ۈUZnE||~57;e,mZ>-搥.yh[ 0Jպ'A8Cjn5Fu5 ÇVa5VuD69W3J 0C.X;KN|x.[mg׫{Y^wtMu?r7wCIXijcs>_nyNK I&7$]SaPLX<*|uh:% qy&H$KǓG/gc_FXW6'Mٛ;E#n#P̴UJ{G2wm| 挌6cA+/}_p:0lw[Sc*惜KF![難klټ7<[zFnj |gaau>95̐bη97T;K$ͩ(Gn:g/E*O]Wn;JNVʫPEetqDD29".E q>Vwv`P~3\삣/2[ :JMMys 8]8<^\cȎbsdHF~|k?ډ8Õ@RjޔO d p. C>nqqq "f%b[Cѫ_bW&nYd &8;aŇgQ0W҇AFKhdrO݅׊ F| HoIY-g\J=V@|Gbkɭ˛ pFPGhS4P%fu!⻻CtI0X Kw9r /4'l v f]{ x"dLOkυA݂uV%У^V"O { %EcEML>{j,V=Agy>@Ș72~%ӹX#oH W^|Xдb<@r֜ WみZ5Ξפǣxd0yC:|4%,lYrKݧ9w*'h9aJWbT+u~3 #AO5UtgHpa2+j*`#x}(t/[B ?X^YESUypE ![vy,lqLԚB@:ye=G-P-d nBp'Ux//J}6u < Ad"%A$iIP"JZѐW , (qu1brī0Sw`fa5ِLRc-wٞ_S>& ~MFi׌\AgTnE[@eղZHܨ~ B00:?}}n}?@}ۭ(/bOGf{IBRK"8Rm&<9 G{Lcgy'"G#JS%؏?h#!BA:H'jc{rႄM6.:/t3#&Sc 1!=pqTsrYjL;9܀KgPXk-!Rc@ 62 &{n/~Fl\qx+𺾂žϖkgKa|!!)jۇp".v::9lXw9Q ^4(Ocuy)RipNZ#-6r7!t/yÛV?9>a, j *DХ:wJn> f 骹:&Vc+ < y2 ͻ\\ ZxmŅ [gkq(6|8>hvg8E8'hEr4WY@5WBBUq0ߍe&^'Pq5C3Pa P 4f|BT@͕ۚ|FDfpmnl+~)0GDfvE[B9::]% ?7RW  *3hZDeRՀs+o)H5X &ww1Ku&_WXC`CJIT K a$2,\Y,cJFqWaOj$EdXU=Ŀ$(xt xg/$?]>y^b3v4aLo1/` 4sO.".nP&T*J~[{r?`H]~Uiw#def%DZj/19Ђǩ yb&0'ݥOjGJ#ET@Q=~JuQL!o^ZY\;y Ik@&3;qJ| ÕԹQ(|5vb,j t|$jN~Y?*ׯ4LW\QNq[UÂ)Bdr )6HFYO'y@SjA0?/h32wEK{ e?ߒ/~~YL+[{u9$fZQE3c͓PbS0-yí@` NQ)=8 miot++INm0ZCQ@^WJ@ys1'\ 'R-֊PpT>/\8 *4i AvzJwzzSkِ 6;[p9b_Uwd3x;A7$[kxK9n;^㖲pR?`Ƴ]2p@G5uG>A..[ =}M#Lo{>YmKm[6&0䤍O 5kwL]j6Gm1}:2rn!wV#X_` Rg:R\ZGZGyBhĈ"DB~:$:@-×?Vzd{e{5imbkۂB;)6. Dt ʟN5]DO3==.Q1#W,^Xv0 AG<(^NXx2Q%\{Du0Q՗8ly? ^p8)O'n`w:7l;77;ac0+YeY;i V2.׹Be\3|BMiY"d9/OMc<] 2hU$L7[ą"9ZJv#&uQ$9k#'n$gG S&)"'>x}F|<[rt&ŕz$sO"}NX+=Oj^.ZqvA iQ2XFUڊ ʈ+g8̤OAt* z~bF$WӦ=FwZE!0#3lXkqQJЖ21~zUJya;H%}&,yˏ~kx\A5mt#_Dg+buBZP>ә+ꂓDY.>Q>pm ØÊf1@6?'%AKB_a-%Ӏ,5=ኪo)J7=`R5cXq؀v7Xxsˏ7c5;th_WKnugx`SOwaGa݊GSB@(|`{ltk'f-Ga≽y_(1p~,$K`'% Ψ>T,˸@kJ;I^*;REa˷Wf 8 (&ułh{V _mpsV-Yع}#-Z\eCfeQKopcqAP )< s鎈Ng0[9XcFm Q- gHޓlAoSQF`Q *^B_7**WtN`a@Dn;Y|k~jailn+ȷ}W>)$24 ?mjučxxBPVvͺt6('U<*g NUFw]t(ߪ/J.̐ vV!DpKBaJu`+jJsGG]r1`1bv(MB cT.8":W[2!G 'k=\W&H`T"]?xgY%m∯P^jdt,WuvD*<[#M:znQo,%59_L-u] cDdDD,Oi(ܹ7W# Diٰkw6 dvd^AOw]=[z!-|aͻMbX}o/҇^C#WvG>NT 7  +c)`Z\+x_埸##_ȧ&44OoL1`OěSc8)D~{}"!l+}6@jWv'^7|aFvO׳KF?cY"ەH8&o*]ԯ1 @*O~V/Nn5+_dVT4w6B<"!~n簁w᎕~gQ/";|ڗ_ph !a_Ugܒ<1㯙)|9T't2뙀7o 3ۨ:ou=!h.*[JT;|(GFrc9a}oE4So#- *r%Y\wN|k^/.ᨅ}ֲhVyөV AiN$!N`hU5 aG!Q]DLdU@!8}Q,L9Ŭ15#{ZH)p̅p ypZMn N5 jw`S흀FD,& GZ|H8;1J4d-[uI86G]t ]JE y"5Ei}³:^+Xp2v_ֻ±:u@dHDWom^G(xPNa @55z ઃ6wIKVO%VDFp|[Ʈcwbh[!+rԛ է/6?rJN=;Y0>%ӥJHR(ʣdˎ3e׆;`klVKhOiX+(DFjksgpvZ88ه!ixDXg"،jH}s'[/4Xc|Lh3G\e,}LsM~ɹ*KmJUIz֫ "mtt08Q5 XUgoomseR:^#_^' !B j\TTxg" g9LS`PPB^:Cca -^n~4" νi3Fd o㕩_ gGT!, psѶ)Pm)C!TjD! ȂVDD^e2#0m-2d(`lAA!]ڗ·\·\827B9Bu|GU.`hӇSR~o+"p<><6A@`?uY ʴ#ݳ@ұuR["Vk~*?;Fj.h+k; &y8T]4K{?CYf;1XB|&q6CcPH|DLCG3*ضx'Iy#pEx<O%0D1ԯM r !\Ee7ưߊ)Z!{c@iq'9~'9kэwilߘn.8c>I*ت1 N5q@+Hd} ou6Xs*/p#K|ryݒ.f3&];,܍媅.Ut!Bک$lϏS'=[̗=GA2C#tPmS8G9` Qo9e:"\8LW&cN ivS NVC|h=fM}?ʳMy+UuYtOԽ+>+kP QoM0ckx@XȊ.!+Jaq=b;A9L |O9-յ6 =wfQz*v)SsWP]gn!66lkB'Nk|#F3 5F2Kt@CzQM5.0߬4A := YĜX.JLH5@LRHmb|GM$ě‡x"#83K!IZCzxXn(&zα B,xf֩[P# S#Fycsج~lqgODq.ݖB~]sJ;|}Z=Wh{=U$fX>y>0z2V^ysv!W xRWٮHk~'`''y rbxqE+5qƯa'Rhu{9'59]L}kb>E Ӈh%EXHҒ%[,³pdx`O`N ̑9OX`si%j%eЩB "ۣ*yoUGTXڞc>R_!%X~E+tݭ_9*_gbFBF%PF? 'jK0b2yHX3*y\򇅝'L[ O!`&O ʱVW;R2&ghSo\h<җLD!CCf-F_UTwd3ϟ5n|w^o]4N%r/KD3Kh.SKfAH^PGFf֌.f3źGmʜMt=wbW]a}h˥(v~;"JKJ$ML*OTMi$ Xw=[(O_qI[M__,e}:/@,%'VT0CaZh P"BHO|)9 GUP_l%!UOHپX,WKŲ"-Yo4Xrfwl^{s n1=|2x+R2S>:A`,$GΑ;;E(*_TK|"N W:'ŲiP:2;iUGfQ3D/P *Rej$ @f9pRU,F!iŁ$O]D.RzXƧN..@mr~g&9@GTPb9"S7`XJs+z]ژcX1?c ͟1\%~w\VO.l U˯@U'KU6u 8M^o5@ٲQ#g z&Z/\//h 4dԭFi:]a' 9pWAZڦ9BW d-Az G^Capn rڲTRL6nK#xnBr)lӯ}]LxjTlQja)Jϴk5ڪHΑ]AZ1bX5#l}$A6]q:(oe2i5g@Gb0=Q&W6*y R*1S4UF3[% 'HUI )O5 2%o} A0&I#DZOk.)KNpR%OgEˬFbyʓC Xی%1 KY'TƉG` &l(djhEU Qh>j'TV5?AE%P*}B>!;~7{1Y] Ö6( 8Z|1n52+Dun}ݰ^^G2^^F-6Bv@X||E4crZ""#ҏt~2w2iswՃ%8ffZ9ْγ}dЁj0̤ڱèSHө`p%Z/wd(ِdu< 57Z )ʑ` K:\)aI6n3hk3/||O>>ځ61 n^|ٌ w5CYlȑH q W)uPbԅ(ڍP!.if;C܁܋}p/J{SY(z ] yҌjEXZV5A\Eƻh~ y|7ը67,2y Q%?һMq;5y1>c`.j5f|6MxI 5'.n"5 n> rhW LL΁V΅TΛ];%]4 F1({e~<ʔWM9~kl]᭭= %İxAx0j7 0Y[ahFaͪH68+؇ĭ ]S'MO"ǰ!B%3 nl2oR=)'7DDd_ 4́zfUZɹQYrSk#'(:fWY\ x et;ژ|,ьEB܂) ZC{S|Kc׌8(53*5ۨqhud~fo +aN78ȶo'J~~ONf0{-Kׇ.۽jaK=/~8$vׅfR.a[Jp7ⓌoU]O*CaZ_7؈{qn*}`!#Re^t:)_a[ ) kY#~r}㺌bJDCuͼ.?DigOK^)`}3'*ol,g˭:FV@+5($-P{PBV8ze#6Lq9/_vR>0A`Bņ#|U4 e8l '3D8>y&C E)ƾO5xgʋ@$F5{Жl#zmnl+ԃSTVEхv AQ*Pk+'8A,B…2){~QX a)a?GU*h}aic[uf^,i o 7RaG^DNHoL L8f"TֆAq\.2?P[\+c1DՋm @[G>Nga l hXdUwwRxCN텰0W|ög . G&[W(^gay,Iү*H6:Ž1H/hژ̳ұho?G,̯1SsA PD^˄ٖ<0"T+_FUD\W."A\{ V=Cu[b3jW Dwu HWhP4-zGzܒky):P뗝ba1ҴoRU\~O_ NN+3o8ϝ b\o7}vOK䒹}kVO8zJ_ ]|5-D"uVnMY+mFkBಾ+ 1%9ts2`L9Vi|:e #|7'rԬYb ʻx&t"c=}H"ʭ`L7w[jo=R潛(#L9ِSW*u;6Jw߻sAX v*IgguKJrffNA&&ZJp8#2m^dr-1s_5,qዊ9sN.lf}NYea2^zOCl,&LXt1 ^8Ȑĸ[@o2&Bm5l` r 6$~@Kϰɩ3l65f2)F1uX Ԕ#ncCrƨr'*nWFY T޾1 vކCb!MEکH{"µb"w(՜D5o5t7;(1Q?Vb5\p1T_((?9l&>\V.)s'}J- 9PjBpEʝdWI__͋}r&8П OWݙ,-23w&gf&-j./&Jg޵6x" sbt[^19&c`%B.#%WLUԲ~!P,<2#d<ǹcFKq*@A5 ?nqR pKW<]RDzz6,mmaj_4riH2ԞtW,Jaެz`ψKo"/p0B$GhUbɤO%]D&  }@а 2,rjF#>M wvTΎO7 s}>ERdͦ7/o0%W0j2e3'inU lQ!%ӽ0<ӡԨ&DWvw4\/ʫG>y4Aݸq1'g*"5Th:i7Uxj h3y)ng2[z{IIF8#0# RsQZܗ "\e3,[3!+6+HWPW״b_Byd*Wk䵩Y<@H:f"u592=r%oAyZUj! !$m[bɗ-(dH `$ɛ"x.F[-M>Ơdxuޟ!ɳegs\oH)'>-uh0ΟJ.kv.v#,ѽ+z]*fZ8R@XSI^('j>[bEZRypDp|))@ _T&2ڻ:1w"Ci>rx_ {a*mnZ:*zBY4 uS<%HON *~oEiQ9 *j8")2O]?ÿKfa*g.(+e1/IkmMok:EJ+AݚQ'@5{tVɧG}}o=Aԋ) po##/mˑݘDF`~)2 #]1R> B)?j!P aiH)xگ2/.Z,W%1d^.I{-DNCLKchAos|ꏔHڮ"W{&^_%ݥLz&3ڨ^g4 O!@g ѹؒ()lXAJ%g~RsI AΑ}f ! Iem'SڒʛޤH%WM4(1! Z\׮D Uo iQ4.I@Bir_Tl Y$V&KEgkU'S W (QWOuteyy5!؜ISf2$%W?AΠ7.^oTI_Zw[a0(&tptw`4Ycn f,(^Xoo]9SftȌT"0ԓ's?܄L "4tP<%Fu5(G%2#GFf-M>tixK ͯ @Օ'b]dJ: C u1(En R4AZNhi14ZAz %|N+R/ѵ QYJ@$S{,xPXK0;pN]o \Ujs@,~J=^M T U4&,pbo,>`X/d) ha coj73>}/8 JJ!b.S Q =R hP=&3ʩ.Ħb3]̬ϼ`/cݓ6:WKs<",fpx:˹L3ACmW0j?Ʋ}ɶqDnVT;ɔ{VT);[ -J_)`? fMST7꫓5N钾ՃvHHVMaamIgV!TGOCSdcDz!MuN<ͪ\k^$nzϻyJA*eYUZ?QjհX3.p:ְ&a Jdյe/]{-YBlud"A)T "Z KJgfgfScsrij#T}*kap)=igB nóPDR',OtFv;hX |=6ҚDf*3T*tHpVu(^8)LZ^7h/sҕy:k(iUf]w#qgrnQACG C㚊c2@k\{%FD{aMhg,MpMl"-1BQb%;S.ݱRU-Rx:6QJˋU[sQ$ИٍY[){r}K6\m|]n GR8EwkjB䃸!A6 Dx҅zY =iLl.C >0Ղt7(sN-F/zZt w nSw!@@}ĕ- &G{=y]-LQ OnJGJGpD-wXgs4+5d#ÈHwP]s y<;/ Z-TQD法G8%0#;g q:.W"t1=, 'f)P// .$^>U8;yQnǎoX%Y4d'ReSf)QZ M BV<(x씥({w9w( ᅾk/{Od@1ǯ2֊3**+-z69âQc /*8Q3$-S-@-o `WD |hUՒKxnbG*@*He ?@iv#kR>0 쮙1 0.kWqr:-|b2;'V,kvn(U Jjo ٙ|bB+z[BYTZ-*FM)6֒R  +P]\ƪP3XVM,4*XS5QJgul).  ٗUVyQ-=u:\RSY[O2=:O(IwhmA;4*+2ncANѬsŒzy)9-%L.(Tъ@o**g8D?V35i,5- bbr$/ VXI7mv@ Z rbC@LZAl2kWrDJ ~Ms,'踬gBc E8^=l4[c>re9[<@0L$daP\9FKl%Jy "p6BXQi_k.qi1xсڹ],qrYÜ۫=\NoHt]N/ smW){8 C|{_*@%yIu>Xx~ kSrC.g:Hش{֘8:0~eʋF:q:؉qV{۵:j@cU(SlObI? ˂'Ӫt V,~pm ?.g&'xޒLI$,*,BY" hWx\O5cS=0pu#y`q!N5u⋐f=yNF -]Lzݑ\r\G[S؃/"ۢ_QQ8 Ld~\K΁_F_We[ez?6 hFG&&g ̤G'G=,ʋ7 #Q˺9x,5/Mz T`oW J#W,5 k|1 _I>}L(̋ Gk;M]EЦ̓@1q ?ҥt~~O|$Y MXo$lpe]$L o0 ͲVaOvr~ǠB =Flg6C/M<[0 0{UFmzqubaom~qmz^D_I9Etk^LZǠ"X/hT_YYaާ&}WS29I,ZA:J sZ>lH/#TH~gfC NK۵tsoDkˋAo!(=Ą`R ]m_DNa" J)VF=coU5Y& $bn/';ZWE~@|{6C7g4Q'wO--b,@n@5θ& ˃# rh$;,,s ƕ fSЅzhꉌ?|FQfm`QӐU\3k^L2 +TXOIg6/2iy5ZgnWh Mņĉ_dǭc-B32 vA Jz=Nj~Ek5bܹSayF%*PbG 煨Uh 6 `#cM6=hcoN̹ :C ӟ˜%;Ε.BQ:|xD0Ux|pL5v"=TDZОFg㌑/j,ukz!33Uŝ]Yoq'kwvq'3;QTիWUqiܥK||:ZޖUܑ7^ōSq'N`^]#u eO_3!H({a- p0/s9d+5#c:dzH1RET}fVR}}]e[H5lz2 N+S#ژ[OT jJ\-WO1ֈv0fjM06P)fSXϥ4e@[ȘE&*}>e=+S&~։k-VG胒@jpʮ>7_8l2Glϛt.N5LJ8_or VK(Gww~N Y&A/8!N ~ dSgyBtI'҄.v9?x~cYJol=0}:7o0"w?e=`FP"1@ 9!-*XW $pI)^ M4DC G!v?QK]zm͗zy7̨b4ǭK͜/8;_!zXgo}![Wҿ߶aҿ慔~^&V.hj~k~gw0ezDOK|@+Jr&R:ddЂirH* I:Fܤ,&ݶuÝ y2S9淋pzEXNu~+~JAL>[Ax~?znR'"8+1ɩC\Z;k$L:?YgHT#S&LJC;čm@*LKT4 S ǧ ~N!Gqyo~'M  ~])nw=xp}:aji{.NS] ^4t VcAf|!}~ IWx~A@;G%tm1u=7.r~\wJאSA8L~6GcbN}Kt%LSTEF%*)@Aԝm.}[<{ˍO? 孙Ϧy $Rhj|Ѓ/(i8t~A`.yC>k;fV\ -ٯgvzܯ.p}fFo)" s:|2n7)fbGc~vnˆ@R~m^|7w|C72^uSR"43\Jp3?c;ͥ<]c;"XՆfB7}C7)T귩WOF̭O2Xa5.jL]UU Yjaו1IQQTًF_Otm5h͓)z2%['ky"%p"0yѧE&S꯷vEFOyOڐN$_fl=ܚzx55ëzw=-9N/"hdzxl3@CъP8ZmjLgTO ǿԨZJ]7Զjccsl]J]SjTwI2&QQzߏ;ߋ } 'e+zHbFGK$R'w u@Gt@FNoU$:lU>#o@AOc*DOЇԬort#}F#o_C]mƐu8`VӐ`}7[ykb~ . BS!br%ʱcnQa>ê171 -` ҈p,A :*%Z?;qk#rlV%Fݵ$% W*e?͵'_$.}ى@{RW zkT> rlXXQ8Ï(#@OFzZ3T%3!<~ AO }=4|lO't*!mTUHz}K:fzds 4/K.lx@@J$p^0GLEd_a?6-zXRY,d0 u.,!N@%G( x5]VE :/~eFnxb9DjXid9ۤEx|!M%/tr Ғ4MAzt$ё+t˃#×'~NP$ઌ2"Pm`Cbdar$5N#=7 9,9[)S?fT!Y@a $4#@VSGm:5 574r[ؠp %NF&(]Ŵ3s6,i肊m]w9#$lOW={jpf5y_iI.Q y &4 uҿ\o 31Fh8H'qHii'VO5u><=TmM8FiF#U"5RdUWkch fndDƽl~ĿZȐO 1)!,KU^ަl/HC%I$V(Ry463q{\Վb.U/b9ɼL,&E [Y;B//V^E^3UqvDhRwaD3B"8|Si\~OYjB{_O[T.ZCr LEUunT ZgZ@h{uarf%wRxi*݈X( 5B-(l.7Z攌\ئEO *~|./gU!8 E-У`xm+^4!EN+of) 2 >O@mc e*. U 1i m-SWN!tڧ|=γFFyKOF5I Y4Pg1C[\udkhХY5J|3SapIͼ$oAú=j P(Y;ސJ=I $PF )&I!ցndЩY}re[r! OЩRuWГ}A-E;jnIrϊ-ngB{B,]^2wࡎI@y# uĂ#^G͑(`A|CFcY<5$'NFdk"e) 2 A4w)m *l'2qL5IH,BKp:,UE KWߣb[o jM{Ě5ݳh0Pߑ=le]h)8ۙMbQXJF~XXEU^5ZՀ+_Lv lz_M,uh_l->f!\oVϋ[Nr}?3vfZ4ŢmS\Vz5ʬ~,Tm ɚ/7|dDL=ZB;$½Bޜ@iE< %Ԯp{cUkBN̛9R^ >ZZ -/5D49[tRs܊b<uhj?vZ3?VrQԩ5^Z8J?{_M_Zg:V~Vt%"<ߡS{F&'/Mg'3FRS}Sɑ47:45IM3##Q~ 驾k}#}S}ApQ.]Xj8-꣢HeG#h.ьGxܹ`/pFtӜڷ㼺 lÎ`&wG͋DȖ %|O Bu٭P8@٣)NX~ m!a&}8W艧 O/` le(G&`1r =[׺[k/H4>Q 1EgJV[FqHn[g ;T;@sޚS? 99..eM^ .M^:῔i^cq]kl~k NET$+ޑlGO#MN@g-ʼ@w=JEVɲ,βl6_)gg9Փ+E34f,;M ۺhek6WzW_N;d8d|4Mü7oK5l7knpF ~55 vh3?͏uYZyg~z$U .G^ʏ'~}^SU~҄\Jc3\xD'4,7m\i%m$YNSBYSHB)! qQ$Y\&q*b$ݬ׬V,}`s(2%"%>~Vm+ ԲD*aI>$qTCDG ΚVi .e:& u76Y&պa%Ҩkbw?z!N[R 7835$ɍ Q& U>`373y4[T큇B5M:4 s0GM B"-S--qn+Ov['HUAz{zk Y!G)vD_)̻Y5/\ZKI:K6BY%jbQM0ZKUq{Nw>TZ;sUҴ{]¼n\{{}kʼ|99ה3ssdM9הfLtN1Sދ;7a3g vV}:0&Q_:$J)opQ{o{1%+i?M |X(xm/lc' =W m }@ ,ۯ Qn7GYڳvJ*+ c>tAKE]':tա do@2;=ǪNUu%*e9zjY}P(?Ǒ$6 O[38Yu'ם|WaɯPWr1LIU',x\ 5]D3hr=J{\m2^7AiRi4"$@cԔ)"w~$7;i7I].9'I3r dO-԰Tb0=&r'+Nˤvp>c¦-YmͥFdfWo' {@LOکlLſ(E VM+<J{Jմ3^dӞP&f*2;Sy/иFajԨNWxfDQ]76,3׃[XZ{ )ш*6V^{a#?b.>$dr:uRX#=s<y[{i~FvLGw,%P1TGZ6OIoXнtZ o9(7)eA%+P_&7kTM,d@_ 41+Ӹj߲9uiʫUA]%2lTr;~ٚuӽ/`fM++ּB9޵EGーz7cX&{kgԸ&aJ/_5[nD.'RzUmҞ)O2 3 ݪI A}K '𑟗.42js}HYVvOӾ-{T7f|i.dL\Af[]x72G񬚻N)4,g$yLTxzh3%hz*Z -0ؘ|gk޳Zo2좑LiToCˎ[޷ b5͙!)?(~$oE}A]ZVHQ5ߦGjw]_7veQe9[ G Xy-kA#%<"(TTe?%iV N& r%c>)͐_><>LJ& > n ;z)k$٪b>V|φd,i!`J[Zi@#W}eB6C]K{TEwT5G|T/b9o۪b~|i BbBi.ڤfK ^p1S{8YfF4<+×-#H:6V BelA@2PaGF_g0 z@jdwe2ՓdS-}*tJ*(SSz1{~Q):mL5  vEBxקݻyH HZia"z}yE/)N<%>PM%LKXjn9sMhc>I3}n`I7L&ِ|NQ2\/NoFya#ySK ^۝ 3:=uyPoWKqB~XyX!%HL#JlЉT='v&_oDCZP{l. >\HB3jآnU>5O3Yj$XȭwsUB,[G8lLw}8r}>yMiJ2麺.Q/] l:z%qSidnArR XJL )xi7ّrYkgI Zl N{ uTgT^=Q$rD{|IvsJsN;8vAL~dz.偡́r8gxOp3Dnl!`K@|4U2k;-S,  9TUthglE}V(+ gYO ZFnJg;ahǤQs4ωEtgvͧ۷G<`7ӲBL4ǣ1l5Zn t mR(T#?F]rr gKb=+R-%L^xm^ cWR7kR/%n,rE+ z/X*tIV[P2! >1 D`0\e!"-a7ƱtBBȈyMזq1≋4~۬p˔J \7 Yk#%4 ׬g<_EJ\٩_ ^ض VۓTߥ1sLS.{(,t^xh?OWzqHsyq(;\Inp 1y$`IҢW o!XՂGOm嶄 S*à ~+/U녙hah  |~¦%`^Æ_!zK|> D%b HB9/L*\v֜ =y/yW9noM|lrj =ΰё&/]7xlĤ`LybW$iJ5u'4:XX:6ԀTKH#/.-P)V-CW'3<:9P2쒥RvR6JeZf))v,vqYRtIA,cw~s_NLvH}92~k?Z@=~[l!zH!Gs:絼WUsR['LeC9!'3)OH{fw9r~7l#_MqpHe3b/5/f":X)UʺijTO')lB 7&4DsC!^O N\h,~2V{9zBޔwSz)_Yg4< s5o-L~A8 5]tt tq T$lA*"7*e 4xDٜX:Cj;ti DŽr 9w1V~[ +[xT>}d1@ )!Am9yDI-E`IbhMI *ӛ!F@2*ICBO qąxjqr떼*i3U LTj"f+ Ղ UB*˖RfaBN=4J-X"IyZN+=A)$3W!?1Ӳ@68~#Y7M_@05dZ^FqIQ3Cغ*sdCT_$Aj Cp@YR-%;rn4l YF寗M͋ )MX%O[Jm6+Z/dz{NqVS7cjHIyvٴͺiƤ5QO,<Bu7uevP#6ddOR).3{f,zαWljɢۙ{=_RFdʒ]e*go=09N)it&Yq/I2YQej(;H\ۥNQ j+mHlО3]Oh# a p ܜd5b<95 Jh2>Sp4IwWDV$)e 9>:sD^R#ŋ".(KYU l6I&@7k*\v.f$Cx׽'_8,FsIY@ق4J#܈dR^ F9`0c%9s#?sST\Jgm:YK9R. eTx+ѓD&=76 K:(JJ77EG5Ib(@ŜwѱK%] 5SL> Ð(RqRs %˪{Λ@n %+_BsK'^k>$P#L^}Wß3m{aG7o\oJb= fsi)(Umɶwuځzk_m[&lS2Ur}TPH#$Co8yw)Yt_@Mi# VH27vYM5+q,&~GC>k.)qѪD.“:a4҉1qDMifoK׬I[įmV+&rir KG;"$@40 ԼD l>;oYMw M(~l2^Z Z`Y'L r ANW>0QR#_=,> &}oMoI(vmo{4E:ax⣻1&,88 }&-n_ޚO[M9qgTMQ[[=Hnapp-UD7AL bނ5E;|:L?ڏA!IY`ˎY] pCNf i$80s7y&1zbM~Wy~^꒸yqd=دC߳ rk d{U.]݌z=I&˞:UTg[gQ;|}  Iq&C q&bsۨmJyaIe\[emQqS*iO6uJR^Є0U !lO{T d*ǘvT=%#/wȬsb*ۧ^JISĕT\لnOU~I)c*5*UH !W=E,"hsEE -t\yw#py9~3XR#{#a+"We*imUp` zfAFx*XGIS|z vDjc.0 %=ѾS8$YάUt,wم~&!=QhfH-IJ͟C %h9Tx'gVrI1CI FCr<Ȭ4@M \K ^mKx@oB>?XT%o[J3*|HU-M<@AJ$2_,cF1UIJH#]gb29HP9[U 94z hB呺$fRyQt AJY(q:>NZ,~I+ )Jê 5Se=b| /?RS/_"67U.JP'8TEpm@&#țj{{VYvZФM uiQApQ߼Z' I`c#8xI>  oTQ)AngtӁjFܱ=-Gb}ɨ{]3+Gew=Ⱦy<#׉ Dea!N`Iñ4X*Fg-#?g:\r&%;.A#%7˦.|5m" ϩ{XȁEjC^Y|NkUM3.Hx*\ݦ2zQ*" 4f՘1}zJ{SyL R~^-!IE^w_UNȬ3S)逺j}"&UIܩ:˯i%=R%$ 'Qٶg.b/2ˏDYDEYGg K)̃ԩA&qW K#^ Ӆ|@ڶ5 ͭ.6T3fojUYdbuI APԳD#MTWb0B^T?5Bh̗.E(8O$OO^ׄi vHsj~q#^ѱ}'ѠANul.!JWaC9@G.EHQ٣Kj׭=I u"=-vOã.pC 3~2% <̴1< m4H-ay^H=r*bITIDS  F,BIoa{a܂LuS#Bɇ˃(ـv?択cz3-XŬȪFƭowΚG)::槿YS`\69۝I,as%.Px8x un(f϶ n]?6igV'h5by \՗_ {Pu!BFPL;>?9%?5 {ðI,lXݐuP33S\,mAzvπnhv !ܛ ȶr:̪Y&@ kuP6A#ŗK}ܜ%lEnGis[&gÃ|u_'S>; "^i<#,3N_iz: םXgd[t"[ KNVnPb/A[]6WZq ć̇fL蜤({ `J pY Unv9ILWiIvQUܧ*>nuIR} >Zh%=R,ʼnE waV>=`%?żNM!g:5ņ٢f\ ]א 5Xsv@'.GNm̕bmȿO/G!o()MU;AIԢU ںPѨMeUj$*9RC~OcAI27a|c<[Bjztg!h[$e{xuBkVXviTn;N夳g'TJr`}8{N>Зll4I A^Rk.lr-ײxc 94UD#*8D' M(RgqoPаzgzXsM'NPtE\5Q+z_[ ]a cfÎ>;3-b0 ڳՅdMt7dЇes lcX6SU4pt*2ܒ܁ZIXm\B靤H !QmEW2 NiKԬ/I`bZ96Љ?Gz⼃GU*N#p0g+9WsBFw눿q5Pe3 ;KT|zc=lx$ 0b@ Ǔ.#NCxejtťD@JJ3l 0STSFxցri0ùfɑ(ޖK*! 1.J:TZHy-a"(.j#|ӱ;- ۪.m:X )wxR\yI5t;lb(th&붣c#-" 5nUvλ&T{E, `l3e Q0NG6,N8j WU^Jq9{+QrOQܕ\(.qށs =G,//wgg^hgGGxmX1 G!k;t+q+ꃚ4}UAt &J9CʨxDţ.nVnͽu*ҳ[7QqH-=C9V[0˯IoU7i \XV3im5k{~3j&?LFZoQNA,Δ+y֟fBڗl. oOVB;ѠvV|u(Կ!ŦPC*˹%}7_t"4o!a3# (,УSMUKw 9Uq/f[mWzӸԣU-߷Z@֨R:\c)HC;e(a8 :5nDEt];]tWWLȸ%PF_1B;ͺ-:+*7xuUQG3Y36D4X:[z(id.w.g7_?$$CO˟?L<Ңe .&<)~=)>* zIfx$Ȩ!-7١ͲzO6x}Xb%QK<ݢ12Z%Q$Uz{y SA [߭|#,ГmmП#B`8f#7D vTӑxK5r0iZv6NSr<}i'K}K~jizvV|g+hW>KOX'jq}׺0W֏\g$ P}Yn:RWªed&s]MOO8(=IW*|{~E|pK5FTLhān-[qꋮ>+_|'/Dϱ)7n.M҂U*#}L!|4c(F"EJ.Tu $~s)nMݞMݢz/(v8 F(w95u R>A@UAX.Q|U-37E7K'2/h||F!3iI)5|Ug/B“qr!8տBP4a>Zc{N@) _igo,Z~Q|*ryK}H+bo}rQ$caxhhmnjd.>˞(0o|)PU(r00cRvI` < LK9H⠀鱿ґSGTod+Eﰊzŀ1dȫ}[֋M =,9I61KxX2+IBR5IQά֧)oVѢ"ͩ _ 4RNJ F.H{NL*, JcDz0 i 6`ƀ:?C3#J&ŷ|X&t581ɲjX1VwdȕGfx\nZ%*nA$ΡU'\KI\aBM(i1zG AVV%Ǘ,2_^3p"t͑*G" k cf=f|P) qP )D>YHρ*A ]`Ef pX(ԱK(ZE1*AJ #<ʏw8$M('%4M>Յ <H5#gXKS̵TTor$22GrP&=6Ό F142: LO]dCWGG&2)(۬D156:5298658?xdX^銍VeՈ_UāJ͡y(-!{D_.y;7xA%9g''49oҙjJ&Z'"jI+RJU.4wK#B%y4a>a&x!SvtSYMIpRG}%>YTf"pɬwPUb*J^} I0$s<17b2qޤ}[&2A3xdAdf:;IIZZ߆$CrψkGIeͥpy6G%SN hPx!>~q*.yH%8Q2cŘqp F#lZ?M i±z[y%'DB\CeRfёIJҩLztbjoR^LR`_NLtKaͱWF3{=4oZ4)[QGiS0RGSo   ]}·o;\ )l _;4rHf*b3a&/MW3Qva~yЛ~4⟇||8cB?N2-SET{TXs'&Aڅ ɓ z#4yG;qIF{ƟZ~ϑ1l\䆇>‘~Borr^(ӇzM0 ]Ch^ _x藉ЃFKaB ҄r)Ró0MÛ:~ܷ,/a v`p 0乂1NN~@$Sڋ@1%q LJ%j.+'M23x*]HV05702ij4A [mR!.0]U]"XH(?mY{c Aʍuߔz| ػ~߻ZkmkyUnkp%1y򫢂x2^G1$95.~I \voʠTNR9"]~Յ&8o3 t"ssX[w>H+yO/tse\CpH܇-r9t{kCTA[*]Aa |o#_TnW+35j߯0a2ZG\MitzɀC>o;1du>Z=*]%ߠL~. rץYwxlۻBQEȨb%FWPߴ3ukhD3"_b>` dy[땐)<'~xn|[+,9kN=9 > I4hDC D&iQPM?$w>MIA E<'qq-J\XwdWtf|ʈ'~ -g?/wq$#G5DLA[':~Yr[!Mro n)rCtXsv~Xy]K SB?C?.L)q l6J h5Hr/I6~ :PdExgZ%B! /-ETf,b)&X\jX%Ov6nt|0ʼ(󄖱$oָ&Qp16U)-ֆ%?ϲZgQLƔq]杺"^[[֏ LamAaԴpO .Rml iY<ƌtJljPs(FՙI ɀ T@O{}Qs?:we~;} )\~NUIU5ZS9?_MF}/34f4dH|~6%[^*H'Q/8'#'jKfu<7mt_ԩ9[qr9\/߭L>BםMr*BUU_'ZR.bϮ &9GDtd:]epY=lI?Ϙp ׿N3f߿JE&wC4"T_ mH&y۠.}NJ]2{MyCS?띈H > ZFg<9fa ,FJ-+\ԉ=6pﳪ-sP:]jVoY*)Q wVesOV?)ڐ` D?QRP ϔsAԵC,6AGC5ww@m;[Y"?QUEANBNw?$HS `,L1o db9 '^PI$B21k CuXYԫ~Q YƹdFq-7as[ ۨ&&-8m0=<=z.d Mtra-k 2{yPAvR .Uԋ%쫻f]!{vboFyPG62 ?bC:6~IӸtcۈIq8L/_MT|kEz"2kFs4c!Dh <^:ʴdڞlTs&D[:{?M_M@8G {B#toăY5|]szx6D;`?!4/ܹHty$O&Iyyo !!B,=2!2s!.V([kMz7>.Φ|GckT}!~Z*N(*p@ìY>'%i:ت CiMK*h/W8mT{*MIx?P%CBŏCONrM0 DxGBm x8tt WB{Z ?_M`^ac!7 /5ѩx,݃qMC4TIYu1|u'z1PI$ V(  PP%3G@38. ĉb$NlNd8ldl^Iۍ۾23?rnsV>|Y :Y| %Jl**|01T~ЬW#FZ)C1(dj`1B.KLqMU! .YwUmx>XzflgTzyrp JV#|1/h.0MU̕swJx')Tv$ 2חNM`Q`=nKZ}w&"Iq5fZB`.[[}/`.Nek֥0e|¹4˜ǰu6܋E؈ .LFm>eNY] -hl1g,돐ݘh z`Ke ;`[n :Ykmvl1Bu]Ec݄n_M{7<{TcZ\^trp=W5=~r`: lfj\ѽщD։щG'N,SnЍڻlPH},},/ 8_8]{\=Zqm$#4rϓDZ:z^6R!\>5`\)1zK4!lQP hbNVWv1PbV;f!E sX )ءc7{DSչ" zK;"/]%WMIVS肧.SdS6 .uBI!nZA,@z+y/툏qj%DZxʝR5:C-b6A0M=B[okؓiMO@+˺ h"u[1Ebc 1*VS./2^ƭSC_D`7z"9!/cMa!y 2NaVbPۖgнIQ?svoTQ9 D&|U eϠx>|X2kB"n5gݹBbsްտI'OHBnY$.K[FFR3uYk4-ifU=c4ӲZaN0pS$!#@kc!ί+y>D<ֆ}z![Ru8 eAӰ3[`u*o0VJN~5TB GUa5S߹TG~-ЯBu(pctU|6<% K@eR ાEɹBh5,cX+OY?-Wg6=Y& ЯZ{[f3 8\WrJV\ XbREjRrc'y/&W nQ*`>cnq 9\p4yU9<ΆST*W5tA{*Oc3|V73|{1L)}J .?`RR0j2saL}H#A0&5O.$yQFrVpsj~>ZUQNКPl"S"gGXwGܝZw*\6s~P/w[=OQ_\VN'T7rh\sQ2[㐻Cso6L^R$\sz csrN NY'bAAK3e[`Um*)IK:(U:uԿ;l:PӃ1u֑QK۫nqt(굿ϼo(m&n:ヘ=AͶ@#;PdimLrE)*n" ݨ]v;Sv{%ŊSE2PVapWIKxH=Pol;)H:,1< GQ=e|Du\e9p =jk^G҇T(ObGod8%$DiQc1no3<5}F^C^3/v>!EBYx3J4T)~}]pgEic-mQ{6/dѧtA KiY+^1עeo:.V/2 lMh *yL_8;byiy_ZCʄW˟.(@NgL%վS}\cϊxNg5~֗5 9w?  Hh_svN嗅Ƣ= zZz;xrYO:lb4dh*q99lՃw@X c'/q IK#!D4c86#8 xIo1xy;5.KM;x"߯# ֽ]Tjh:EU-|=@f~z1TLILǷ1홪dU8v hb-H`I֕K`Xy r[DDA p\T`2ЦpV8(z1T̴ix4U$i O= .YүaXqmpl5dQh%nQ(j/SYҮWO7#9؛ lo5_1ҧԒq ŸCsqWFQJs[p ]:j*u'MĀ0 Z9#8fKp_½ lI(oEoVMYg&2ӀRqo1aS[,B|0HZ&6GZ{ڰ_9.w`=Nth@Ml;l𯶖-Qw۔\^G"2>m?껤Z.M]WGZ/":}ż4{»3u1=d_?(5ݾWv(0{ =H^k+G'p11h{G_WlL;& $f[;0c7Aܹ$߂DO(L;\o"s}IB'!`GNd)QW=r[0EH.oyX7icMㄆPh0`|[I $~ KL]Z">8IkѐV[ L%! rРnG"qc:8;Ѿq"%}7-Sx|OXu#O[R7$Ur/cJf@BQ`Fg5o }OQGE5K] ,Y hAhwh5qɛ4bUV+1OGIʿh>Gqz??$prOhX ')m/'LxcE9=fz*Idt#FrI/mpY8F=N5j@Q|) 3ܐiUa(I1׫Ls05Aqr/Xu[DH~4lic᧾f)qƢ$/ l;Fve4jm;p1UXe*u[}pw6RtR-I 7/xAd<Ӝ*;N?FA kUa#miz;gM`:B̞T7u > }'vO:jKOز/:98Ce9.ԙn[v&.Z]%TBztΦ9ʰ.$w`l.rȷmE{h!|UXX3i3 ?4m?|A%{poF#0 ]pXI|љMBIe. vzl`P4b#7ٕ($rX 1)Mjn!k >0=,ƇQ٣l_)<[]Xlfm30c54Y^bK=otV۲'˜oEbY2_2Ϫfvp3FWI9s.N&& U.mБ*ń,;_'㬉)q+[)gF3iG럱Lf*ÆFgF'{49-$0X 9Gyܪnڜ0D: ]붕zZሪ]f^7#tZhBPl Ni}Vu{[te $Ԩm)mn.oBa`Х ;*g*ƣ/hwO>ꏽڱ?0wӽ -5EDl]("VAd{ "sDvF=Q~sf!C `~ˆζV_RNQLj@ Rz=ngzϣUFUr@:ZFs,5`7"qf>` S ̤*+%qTT`R "f UĒcƶ:X1@uehlEƬ6iu.}FdvU۳-d*3'؉5m +EVC-:Vq\C)V!ch }E>d!S]@Pfj;0)>gi&%*FUif~VcP+SL:e],IhNv0 ΂qTyJ.iZ7 JJr~2BR`Ӡ+ùQo=hX@YsgPlNEs:~HBd8^.=* S+W-n#/F(( ޘ7T١KxB\c%Bdef~d\fTA;Asd|dUM0_`oS^yz )DVd 슬Q1Tʹ+sihR=zg~T|Ym"Bڡ⼵!8Bo`NC,VVU[^I&`= 8U pg#%{1TlmGAu^ wQ,~,,DuI_oё3 d]:5gprmk2v'׎&s\;̵ɵ\{\{̵50J S<)6YCN7눓k\G\ ű:m;'8&kSӇuuaV7LySRmQqdnqBko:Ҡgp2$ġI%azcx k(ʸt<Y}xgtS|S6LyS^h"k`E{tC6'z Spnirq}IL%NDA,^wĔQEϯ_z"PJ-`e'-eIgԨeqH)1sZjbrO鳗׫Q/kPKe̛NU J} Za8CV؇9ۭఏXa9 Z5e&9}gg,X,0L]L|Y@Si8*5(+|vY{o}E~٢a8 ԗɑsʒ'z<=Ҫ<(SBWVխ IjkU?#%EM/e1>7۬8ˏ^'p.2.spHtE2F C&3 59%@F׳c FHO?vRo,™'fkȣˊT),Vdbvt4'h10Q0al##M>RI[U&P`\b*! ȾY[zJW+|z6lN@YB[%߀D7)/^sKYČ׹|ZUoO-.سWQH˦8 PlvQԉw;zSzk';ö~L(o(%W2 ~ʲuX+C& $L>ڌ$p2+VPlZoJ~^ȉ}PKXܩVfkâV@XmG0Φ66G>g l{Z;Vq]cT\I{ >,UԒ\B}Vo[p a"JURoۑ%tc}ߠ8oiZ/K*il첺P(_yVJHx뗀 \d#~ֲd&D)ttHߜ ӼIlj{><`qao;)1&iC? 7P#r'ʠe%6-JcMĈڠRL=mxODŽR`ʲ(h8Za4Y\zK?{2+\ ۬8'ر XCq{\xgl;m'UЄ%W;\qj\\ht$WJz:'WW\٩|R/SiVESsTp*QTgIײAKQ91ތ[Q<5 |uYgV~FWj8gk}ΗWJ:D54PыӳS.:nf+ VLNe.CG>' ;Sr`i|0QZ+ԉ:5ͅk!|.씀;.4QMC^sMIxAf(0@4SRYHeA)FXfVqD }6X\}U+BhV9,7_bǂl\RtKVnS^xVUd!Vj{Bg>?ߦ-aϷݝo > ެ!M+)ˌtU 2 nMlW!;THJT!2Aݬ&{CE9'[fc.}XrFtLwX?;O֥}Jo>!KhȫӱLd6I{3$Ó/><J{[<{c-/\{i,!|T11gt³Rّ UK D5guXV$9$PN=eJ4K[+`_ЭĹuKb -9̸_]zm'u:O6YW^㾱~7=bo/fY+W~\#U3ZśaEzX Hֻ 5(o 4K|gUu*/K h |>,h4mІ[(#؛׎ 'Ҩ15#-2E쥠(~3kA-Xa^/GA{No9;5AY y3: :ϕӁ$ud4 L~-}:xչO66T%`2* ݧEJ\/Vm.}&"Xb WP+3=kg<i|㡻\W`D4|Dž{4bBr}.Xyj%T$Q;ٲ`j8@7y`My F) |[Δlwе^;uKͧT61uӶ^P/ -V܋JV5'JZ4fA8:XPxv+|v=[ ѕZXe/%#t2:5k~"Qna8lZGOǁ`q9e}M+Ϫr25=w՟WU.C+:ic^ɗVtbQ#sH(1J=Z$$͕9B2%4Q(9BKR1/l3utC"ˀD1H!<¨\5`ț&;TSdt@a2K/T*wSPQ,]ƊbI#S.0i:.;LBd2EREG1P5U44j4)RdDd 'DA%E9dMŐg*kErI;&21;*emn4Q#dqC#j>"2lZ.`i[kz .N^2;HNxH$535;ɱ髣­ǵJ[;C#˭s+މRNҩ+r8r~>B"$>gn~Y:T%NxdYz-nIƉp1F-"#cXbK2ݖqyLj_KU wG 8+X˛*+~W |$ зTpɼ7JQǵq ](RU#M#&ѩČ]qu'bS`l)e ]JK׍C ZTD )v6:P\ͻ t꟣/LrDv̂BopA<^TFX"F4?A@~vi q Rы1,pklZT 4M=LzoyNamݭ7$Nzp( L~t3=q޴ynCBQGԳtZY#5ža#IԊkMZz2 Aܷ1d$QcƝX RfDθω:]f=d^m1ӪUN'=ܸ'3#nmN4O4S4mLKQMӼA]th>֘pfD<yL3ɞ=cȞ7#i>0:' x=!yQ8%6nnMVh/ ظtiƅ\ b6"BϫqNf*oW.Kf)?{Ӏ'7 O{U &#dc.Iݪ+44yťyELGL7vi5ͩSiN44ͫYto=zW]zW5"T:>|JD4qif1tc.M1As1挦y9i2sP ص{Mo'OewXfC6وtLņX`xEwG2/{"A ;Nm8mzm[WOYuW-.m~_?3TBiLNؼmm. ŜȎ[ vĽE iey~Su.(DN/6ޝ n^ԓFbc7\tP-¥Ԙs.%MAԘfɥY4D3y@y]6&ZLˍ)gP륺W.K{g񩦼TI-aRj%e%mv3]w=F.-Jx^x:˲!=73ytHI.GjȟCU >MĴ&k_yl#)1Z9rD #|"f6n}vMsw YޡӼ3P-TpIqHw,n uӽ%||~jτS5e5)4׻\~{Ṿrq߫gJ/JɈY뤽/b~K>w|osL4 'HRUAd_i#~ ꑽ~0"~j dkA#d?RwhA"~W=ߩ~4"~ُj dُkA{#~o=ߣ~_ ~&x%pH{҅Lo?p\?i^4mG2lki3CG|!ˡJw׬wÂog gg5ҺO4ޏ'#hxcti֭'L~` ^7鏛2rM&)#uPl-炝^N&w?ѷnܷ?5}|Sg"L>Mg"z?1"?g>WT_hg7ܦ}VW#hRc%M#hJcMW#hZc5M#hFctKMoYivcɥۚD4ǥE\c4?ߘ4?i[Ccl /lg\l4Ǻ5jgBYۛ7KHV޺ BS dS]B;?7πBd,/FX @8+d\(fОj׳WUYUY7ʏ8MLd);Y>q%oRg7j0.+|~E)Sn 2dA<˞åBxY=>(뼶WTy_j2&lePFkjet,G[5g 2@{yʖ ~g&dO;0JK<\56`TBRLyV:kW( N%DA㎊\iY!SWJZMvU)1;S'g7NwcEﺌM,C;uGV,u%d,+3ry7b#Z&w{$${0})$zr`*nҚIل}Z3nRGqU_gZ#OigA'm,9%9mE[L3rJ;|*WHW5-``;wCX4B^vM7}w=rM_Sܞ/| vMT0LABEhۿ[MhoWܾeNoxy/틺1wNܡ:q(! lQ{#n74AxN ?b:ꐓXD긕*aSa:ASN"RIu2"ՒTNSv:ǚn#읧1 ><<ǼaR%5[u,co |yπ=±(^|&q7&5%:sUvU6j3l(y GOZp 8>ƍ!W.܋+4FMhMPʪr){[^S*6U),OX lQS)!- QY/U*KL9vmLQ*ܺJ7 ᩭfuYJ \-[⺨ Q, \^޾LW-/0Ԫ;U__Wk`L)fH 59n%U9㩹;) ͤ[ybaDS ]I6A b&ޭJRNkl5 !Oԭ0f 䶞к޽+ʜp2BV ok{A_cKTJ}:O=Mb |DC)i"(q <ڌqH`zQxX}mt6hm,H/9r5*>ڜ&4 KҮ=X4h o~TRrXP6jc8 -k%5=4i3 U' DAʲM؋hO(xUBv^ީﲭ %kmdm"ŋ>SnU] LVU4~A|o'=6%PLk4LơqSqKR; yGi?d9Ai~;9BIZ]R, 8t=o=\˻|W=njIk^HU]GNO\~`_Y!CXҫng|H{2Mv=@oaDraa#ؔlrKiX?};L)GpzOi93A,)+_g7Jxy|AEo  6` IlKM 7(]&z~daXeis<14: ՛m7=&%AKy25ى*,7\rgxdo'un's(VZsŪsPJ`'% Y*k,\>UZ)SJj/XnH^nyyb~1[00(HyzF5 tm=b:zꙞ'6{&tskRe/NfS[e/`1[ԑٶ1puf@]eYțܬ^trJr.U׳[ oSj SUDH]Ζrż D M? זRUp;OqŐJ.TR.&L>G̀ЪbR21PITɿRBc){b(jP2D@Olq~({{ /A 7a5Ҝ/:_]!asbRiЦ9ϼGtN vcUL],HnlV 0(Z/ݍXR,)fZKCfC&@ycsJ H(@4H+*u.)NY~GF؀!dUFD?~vT*T;VnrɖU[H3NA S` Wd t-Q3&.i; hk7*}.A7>  19q=XȄA9V$;T_#320^ǯ2O Nd*H3ӌd~P-ҥ C<8|@iZYנ\4Nvjˏ\1)!c=2zگJ88KUhާgB;TzNiE6|8 #iZ^}C`j^ }eyHRhB]\TŎ)\;xa q_^3)r\d'db].$іDr=J \G\q[y'li66F׿g֖q1u/%MVVD;(`JbBG:r#|?PrI8w,X%υۈ=I :XI-MX(L*[lg?]XUE=k5f`ݝg 7Al&g[mҀ/H~n)/;l /QR7w*>~ ;Pp/GCA ]7X.%!χ X9v%23eG s岼\Tyjm- +%3,(,@& |S'^X9v)%!9‚x$^PS2$&]bY DTdBA)@~8%RٚWeC͎ZI{K wJ"!Ă(Ӏp/pl.]X-/$ݏ_fqL<*nĐȋ1q c QzHoc1NW˜}%&uK5-OkkQWxWGb[`f咺^7vx,D'P7|9\ -ꀏja t7A1!*=0M9L!4"p$68[۰ƝRf6%&Z ~G(Ta?Mgװ&3v|n{!$k+`O!!:r@␃:$/,g6Bmkt"?2@H@6:H|tI/R#jqV?j|NNrۡ .ÿNxSVL{%ydt}1cVmuBi4ÌqvHƭvzԙ0oϱ`,əcN-Ǚ =)E|]_*M:j0bT=;s}I&l>lK(@&7n fH*?> CHFaYaS9u>f5 i6t5'1 t97.Nw@!N86CmC;KGb*fŬ<6eqD?rFx&A#|> 4q>|<QϫS]:0!GxW}'c"f>&b}P""&*ݍNq4E`lQ[V,1$ǚɨ}R&2KYuH"[V(EO07v'&[Q^=r6i*E*$EIf}2XM aea l|Rw`bcgmIN]ۈ^W> ,HV#'rA}l-b[͑m]70o )>%e21T:kP-㋕xZ*N5z>+õV^UyQ-_b5Ġ7}DLse?WD!GL1H*2Z+\I3'OS*(kD$FȬpNUdKq&PX/c78 ;|ͺ![G4u߲ըzzD<5XuY[ͻVj;--ҏ [N|Ep{0VDJ_6WQk)~$)~uڈ&Wi˶!-rwp ųGc0.:ٗv"G_M4*h0/$sR%)W E  2h)G'HTkZa>%LO=S`H][jM6ocBiB$@JYneԢʭ@"Y,/W_$oEȞJkO婯SbNo.8eŒWJ7JmfM_ۦسi糿eLxZvln'Y[!2L[ߎM!:Q@Xݙ:`0I2R#@AuH&vl;nYKXrT h_I"IT~ՑMCt@ 8".yD2"& qb+/Lk3*mWUZηDT?.X 0]N۞ҤG:5rF7&ZQeKx[u#=2Rh38FZA-Ū R A~Wo{{zxd+KRa|dyqhʜ]/e3L2! +Y$/Ԝes:Fw."P^;Vkʥj/V?k9@b_΂.3(u o}h/U(D:|-•Hz YL8-*^5-Rʷg{dc|M >0ZM24m%MmU۩̶%L>zRk72E#d`㴛Ao EWzV(Gs8\׳6W06Z}mw`O[M Ǒ^8?ۢђ xsl&c[@+ej$Z b*Q,FLFS_OJ/N\KOOLS2)`}Rhjw$mWsX""<ȟ4ln zRx{CFrTbi('3%1a~tD6"M7?π'H\am_aiR1 ,隷X_1y7Ǹ=]K=&UxS/$+t'0_ѫtj Ǽ>X>b^ݍ1o=@+ Xƴm/MT!Xh/w"ۜ14^y=&(E>F}Q'rQDۼUK;@3 ^`ut8b$ 'P ՁD町gs3"&jEY.djbpd}&9G5_nkHl\hG=霶jǁ4w ;Ӂ^xulYE"k}/pfkOy6D5a-zA∊L/j9VLu3+9TgHk+8>@oA~6B) ⬒3]'kUx\{ Nv=EH|J 7Jgf-FVx5y6n%-u45^A`H7C$ZXGΚ!(5$$ I8!\k:w cg.x*P f,vE0,[H[ޙu#N4әj~o9IN`ex/|rGs)JuD`z>eqZ= $12!iVQx﫶M'Һ1ncx?f#v TW HZx`ڄIf { }M!pU!@m 3㋱qࣄ4\59D3L&sd\mS?woFJ$˕EVղg9v6@Y7FCq- ^dېNQ'*Q?pp≶qK-hF' Ġӊ=f*vy$QI8,[[l̞ޣkMB:L ըA.Sݸw'qw uNN_F .NW3[jtik,f࿴NCBXgҙ+՛{_&KE`Wu}Uuݗljau^VHXWWv+Qȉ$}[H=KLNW:u.(] QwE.et>362W7Du%ET}a  rk($vn[v;es"Mv{OʫL+ ﻽4hzF4nou[U2v}ILv(^+HT: *t趲v萭Gn_|įMڴ*xP(T+y^r~,3{53viY1+Aʩ/1,&QQ7 .Lg2.LelUpT(;Í }=ZeeVoleGiɮM֭u멛4;KC3A1C\,ċBI?)x5EPuZ2eUJ>JƾO.hEx҄0Og+اZUQP={3K?aI"^Ml0+ /sE-_o,5T䷴qvTq/M^DD">/R 3 K B4ar3p=:/b xSdl]RXaS44 ZM.c^&bS}MK^XӺe'*]Ynq#'b #NIE' .HjyFl=^*mPSB}86qR:5[ǵ&>-!y6V E˲Ϸ4ht>lm$彰2bMhjwoƙj6|Rb6gJ le]v^$VA~bo0%:\ebQ%+H΂Fx {VmTFNCF@/w7fڝ:CNU`>pc6"G_HfXYmr94- h]~B;r40qG(ۙgpx zMӣgkT^؛U $Izc=ѝ +˄o5 ɦx'+mv'.O[[ea^:nIy YcLtC. k؎fa@D&كORnٽk RG2M MqVp X:1x }耜DhHds w}N5NM8R+eUi heGۍe0úJ1Wʛn8Jg~c=LCc"y%rr->eWݷa}=A΃Op,u/e{2޻]Gxr}&řF]%8vx^&-fb_~ۈuztzT{'_KFuF;)lY1oC"nIc`06DDk im}>**fbK`ުm[a;&'øl C#L HB ~^iTSc8E*X5byTXJ?4Jê@o^duvL+> 60B J1L1ރjGlUޡN{K n1Gڬ5b޺R6^2w\r1,gdzևclHF*f߮mX6 P-&uBzk8ch'>a0WͨP٤:W>%,]$Ilc=|\a @~ާ ba{ w[2ϭ(\$n ^M__tt\#>O+my.;(mx.u#@G(742-N<¤-/0T2i$$l:Ce„F-'DSDsn$)B\#UUn, <Zqf!/OJ7 1d&9*/u]͛Shz+Ur-'cV4BPPܵؠx>Pxl X!Vc~V owloe >Z2R) Εb7";@Vb_d,j *+Yܕb5ij.?zZSr@/ȺTeX \Vc66Mߩ!йϝ; Aү{T5Qo "wKZ+ '?c(a7maw*T3þyPQ/Ƞw3̇ 4`'M8g:QKvֱفS `gE]87T ve@콾I٧$r ѱd_ w !O"jQ~Pp-M|$Õ8LG1x^z'H=Zêܓ="GBiViLkqNwR,3iPxVϡsBi$lځ %[reGݴ'}[rmrƘX>VsmtC׭nn+1]Mf2[% $Ox\FP=:&PFY/k3솄5$t@4\$vq;3׺hm]tIyMf頓@,hF*>IUlS]ZXcШؔMaR7ni82i=Qgq%lWuige mv*4lWêaagp"OdieWcq.d,FX3L f}.!ׅmr ~_sN碊<3|RsQ<o3G\uh[L86A^nϑSMx.FqgF'~Ǝu{QXpw NȕxGH|vW"U}"q :N^IW` >yDQowgNjߤ[";I*#'ely8$0 Qko$BՐXI5?zA1x8%ɟHn-*N!\jf_ľ"fq "XHZxjOmOg=o_'A%OٞlaX(ie\DG:r[Ƴ?-NPq鑀<u3qUȔ>kl ٴ1ƯMk0/2Jo[zl=ol|Mˎ?7Gk~睡_q&MMq[.]V?zo9M*oQ7Sryy&KvqVe ;bP_0~ɣI_-:+5O ^,X$2ceu&TVYɶ߲\;!:L,Tǖ屨OTTv1j*Jw>&i^k ,V{E.ik@ZH[S*,UXtvG`!Z_'z׫Rl#+gw\-K.Km6c|#e#YQŐwieY\=Qhuwo ԞZMB$!NMx>7e(\:&ںzq:,L[: =Zl@a{70fn92F@Z )AiM$/3%~@لZh4SOn]~' 1:NW!][4]_ | Dy:̀$-!CfkFtwW^N].5֫آ'n_>N2J7an(EyZONS*Bo(W4KlW࿻UQ0 * ڣٚ4w*{D ۯN b73t7Q-yٕl)Z.dh-FJ4(Vdj[0%Tˠq_amɛ.&/fK7*|\,^Q.SUߥ( VX5$L5 K z'}Dw9Bkiw>%FlOfe\1B~tk.*2$]mykH'N`rD Y!|f6vڞiH*ǧ|wh@}Ľ歨%MzJy[2}Mu7ońv# 2dpcǵt,/I8 <ݩonb73lnӤ3qwaMLi/v4O;|g6GrcX4g[-\0^hxUJcV.W@2iڳ9mx:?ԏ}MTM.Z /lF;2"=xFPsj b moa$o#ܭ]_YMQրwwM_K9/$j`gzDN܄Mj6jgU@<$-j(ܨRHsI(x攠%E'")?j%ċZP<2pʠyE+ .Cӭl%d,TQKYɃHb8b斈^aP*=Pvv8[x̅@*B3&֖vV;=iA Q-\,`^~! wAh-!z;2ZAaiEyAXG 2_C`54α5<0`aZV9 UO\B!r`E k+;sXŰ]c9Mn:!ܰcY"'% ëᰅ<+IwlR"Ђ"F+na7T9zl-8(i'ҡ~2zdJ+<a6Z05| y }@a̴‹YcTT;m9EAڳUG9,>|tTVYEbq >j&6a=e-XXDu,p1 VIk 8HtxW'TP#PgAהZI;H"DB2<0 `z2?7et\(WM>6%>a7&;s)w =qĄDŽE9ŸqYQ^')P 6fhEÅ$c B o)M.+-r<}zXr0(-WR(X)ͽڡlGf9#h Q*K(dBN6(HІ3i]ZRZPwpEA\DPY;#B~hd}D c(i.QPSd9SFy( oOx!mw *3u<8ʎM賲,C]byN 9'أr( YHRDMCnB*HUwgtѮZ|#\1FŎ|F jagq02 d6G֋}97tRC>30ݙ*9 Y{3vE=QX"7l=Phtmaf1.2t" vT2mc(Le-f?pD?êv 3ϑ Յ!5 ƈS-2^,^ &opFOKi =YyWe ~D~O EI n00Ы@m`0&t@*Ȁ P2ZA/`;(<^PB5 @ySz ncFjB (4]ǯ/]ΪjiꙩkɝVy}!8`gDD'zr@ !r,ֻ5@AM-]/`\2.v;n]9I~S^|E*@Ts,. P /Kw+R#J e 4X"DRqZQIN_6Bv㘱"cޞH C0j!Hcgik5!$K!,A0璹' 2/;1 PfT%%% r@|(l#[ T HH$,aP.l5B'E68H^RAit1UNKk)ap!eXMNxo͑Fw 'pDw?pB"AL2 0*4/"$Q†페\\X)Zb}wְuh .u~ϛxg>Q_lN099yMn!/G†2C5vu6v:xYa('Ioጺ ጪgk=I`S`MtFؓQ7҃ dKpF&\/ń%%eY臭aW2UbО%""{F?1 XVB[t˜B{̓XXR$U?ϥuVQ&pUq u' x< Pҙ ̒,&>&V-Ÿ`VBY16,xD :8cF ?<~"elMn)zE˛ Qpsa/N85Wn۝ v7K՗aw绂%dsqY~ΚJ_Os5;e'ԬpgeB";{;n`ȌT:gm/\bw׾.=%v KŐ&Db%M^(V7Vi?Rt#<'j|NH֡E1ʼ&:рΟtVEUc),C.gȗw4#j :y`OmF"zѸ{S9@DǗ;L|^:w_XjyI-EQckrvT%xJ4s3x˺ij\kc dIG%s]Fby(0n7Jbх1iy33)9Jb5>oz?&A +!{ 7!wM!|½NDDD&; ]k:[::xEDD98F>Śf(ߋ{ 11WgWI~*(]8OyZB`]2;;yyZsqr\L! TQQaȨ*DB?TAƂ`pQGQvl%}Ӑ!aOiHE#$$Cp\Q|Mcŵz^bl5ޣ˺^a Vnq)_ZB]Ee䧠|)0K7\9̷fp LCP~dP/:/ؽk phhbywVy5??<=sJ55k^^o\t=QV1~aOE|Y8썜`'RPNI७ɌrrC۷+vj(x[]K]Ƶ0ZrAYw$89u8|@^3.cϡ8rPF># |+dԻdc^_oWֆ6rlⅲ#X3r/&>|~M"LYOخ iWv/CO\]1^ y~FَŒ M\U[$93cnyȟ̖uT{hJƳBjsB hdd&fctFfb$3icgu W Ch¾Ky/TiS֤'ϼ l~Υol@oܬeO93IzN([lW JT=Ktg42xЉ “ >  >o^<Ĝa[TbvoEs۽EtfgVn+顩:7 T)M88v㵿@`(JTOx CL&yq7~^{]=G vh)Pq%Qhйpd! KF?χUֆk[]+Y[[G띱=f@@?`k@BU+A>ҿ#J?E/G,_hЕhBWEB;*t5^P@ע[OgS/[M@?0kw{0DA~¨@yhZ ecc U99Z>)Oa N_A(௨+h07v  Z.b }h^yx DX.Ў6 t #{Z@m/0k~AG[\]l]?ΰrpNC/¨0 ~O2 uEr,,7خ = [$,+bsE\,![V8c$) L2! Q1@w>vȌn~+ 'NDHfq_<08-;)gB0YBb1YזNAEZ? ƆDnu`03* R mw[wkd?!5M8pC2ڔ%.HA3!\ @@I>"ɮ@ZD@3[zalupn#a@ & D#_+흥j=腛M5A g,!A&L#nT'@ v B, &b#~G'om*l Ċ D?|q+p_gW0&RtA=>)Ő."Ðp?'F /4f'UTN B 9é"Uh{SO1")@DTSEЀ `TcPE DuI0"GSO3o>"Š!$à %*?Pi~r Ǡ?iaSQ[) 0JU_`H]J`ogU~3'T@p# |GF lJ{Ӽ>oiQipZU&nBZF]&u }rA8:௪K!=F CO0Y(2=0RwZgo' DȈEQ & fF=*"UR:J&9T B& z&~`2HM&`6@hA d42#H QXYe2>`2KH%`N;Hn;oP DWQs!]w;R ) Oy+ v iw ƒ8]R 0Rw"ZVOȃ^/90H]TFj_I`$A N U0\V~ϻ0a`&."zvVѷG;74 B.^WrWZV/!C^h2bd[St#Z*T 0P63t34\ ;1zyUXyv CҤ:4~˶LUC6!Ln?Ó YF{b޹w'ջw &1LoV}1l0g)wAcOdHIըlsOazuEAV;6o} 1Yݿ]aIpc@+πrG0{/Zsq=,ǁh,ǀ,q m O