From 6e7c0b8b0c254762ca455aa1d4a03d89b6ab2d42 Mon Sep 17 00:00:00 2001 From: xuming Date: Wed, 13 Oct 2010 11:01:44 +0800 Subject: [PATCH 1/3] V2ex for micolog --- app.yaml.example | 143 ------------------------------ backstage.py | 48 +++++----- main.py | 111 ++++++++++++++++++++--- static/css/desktop/style.css | 25 +++--- static/img/favicon.ico | Bin 1150 -> 8550 bytes static/img/logo.png | Bin 3065 -> 31341 bytes tpl/desktop/advertise.html | 6 +- tpl/desktop/common/bottom.html | 2 +- tpl/desktop/common/head.html | 2 +- tpl/desktop/common/top.html | 7 +- tpl/desktop/gaesignin.html | 67 ++++++++++++++ tpl/desktop/rightbar/ads.html | 28 +++--- tpl/desktop/rightbar/adsense.html | 6 +- tpl/desktop/rightbar/goodies.html | 2 +- tpl/desktop/rightbar/user.html | 5 +- v2ex/babel/__init__.py | 19 ++-- 16 files changed, 244 insertions(+), 227 deletions(-) delete mode 100755 app.yaml.example create mode 100644 tpl/desktop/gaesignin.html diff --git a/app.yaml.example b/app.yaml.example deleted file mode 100755 index e505fe8..0000000 --- a/app.yaml.example +++ /dev/null @@ -1,143 +0,0 @@ -application: v2ex -version: 1 -runtime: python -api_version: 1 - -default_expiration: "10d" - -derived_file_type: -- python_precompiled - -handlers: -- url: /favicon.ico - static_files: static/img/favicon.ico - upload: static/img/favicon.ico - -- url: /apple-touch-icon.png - static_files: static/img/apple-touch-icon.png - upload: static/img/apple-touch-icon.png - -- url: /static - static_dir: static - -- url: /settings - script: member.py - -- url: /settings/.* - script: member.py - -- url: /member/.* - script: member.py - -- url: /backstage - script: backstage.py - -- url: /backstage/.* - script: backstage.py - -- url: /new/.* - script: topic.py - -- url: /t/.* - script: topic.py - -- url: /r/.* - script: topic.py - -- url: /edit/.* - script: topic.py - -- url: /delete/.* - script: topic.py - -- url: /hit/topic/.* - script: topic.py - -- url: /index/.* - script: topic.py - -- url: /avatar/.* - script: avatar.py - -- url: /index.xml - script: feed.py - -- url: /feed/v2ex.rss - script: feed.py - -- url: /feed/.* - script: feed.py - -- url: /about - script: page.py - -- url: /faq - script: page.py - -- url: /mission - script: page.py - -- url: /advertise - script: page.py - -- url: /advertisers - script: page.py - -- url: /notes/? - script: notes.py - -- url: /notes/.* - script: notes.py - -- url: /api/.* - script: api.py - -- url: /twitter/? - script: t.py - -- url: /twitter/.* - script: t.py - -- url: /time/? - script: misc.py - -- url: /mapreduce(/.*)? - script: mapreduce/main.py - login: admin - -- url: /images(/.*)? - script: images.py - -- url: /place/([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}) - script: place.py - -- url: /remove/place_message/(.*) - script: place.py - -- url: /_ah/mail/.+ - script: mail.py - login: admin - -- url: /_ah/xmpp/.+ - script: xmpp.py - login: admin - -- url: /remote_api - script: $PYTHON_LIB/google/appengine/ext/remote_api/handler.py - login: admin - -- url: /block/(.*) - script: member.py - -- url: /unblock/(.*) - script: member.py - -- url: /webluker-verif.html - script: misc.py - -- url: .* - script: main.py - -inbound_services: -- mail -- xmpp_message \ No newline at end of file diff --git a/backstage.py b/backstage.py index 8ff4073..ea05340 100644 --- a/backstage.py +++ b/backstage.py @@ -93,7 +93,7 @@ def get(self): self.redirect('/') else: self.redirect('/signin') - + class BackstageNewMinisiteHandler(webapp.RequestHandler): def get(self): site = GetSite() @@ -106,7 +106,7 @@ def get(self): l10n = GetMessages(self, member, site) template_values['l10n'] = l10n if (member): - if (member.num == 1): + if (member.num == 1): path = os.path.join(os.path.dirname(__file__), 'tpl', 'desktop', 'backstage_new_minisite.html') output = template.render(path, template_values) self.response.out.write(output) @@ -114,7 +114,7 @@ def get(self): self.redirect('/') else: self.redirect('/signin') - + def post(self): site = GetSite() template_values = {} @@ -207,7 +207,7 @@ def post(self): minisite.put() counter.put() self.redirect('/backstage') - else: + else: path = os.path.join(os.path.dirname(__file__), 'tpl', 'desktop', 'backstage_new_minisite.html') output = template.render(path, template_values) self.response.out.write(output) @@ -215,7 +215,7 @@ def post(self): self.redirect('/') else: self.redirect('/signin') - + class BackstageMinisiteHandler(webapp.RequestHandler): def get(self, minisite_name): site = GetSite() @@ -242,7 +242,7 @@ def get(self, minisite_name): self.redirect('/') else: self.redirect('/signin') - + class BackstageNewSectionHandler(webapp.RequestHandler): def get(self): site = GetSite() @@ -254,7 +254,7 @@ def get(self): l10n = GetMessages(self, member, site) template_values['l10n'] = l10n if (member): - if (member.num == 1): + if (member.num == 1): path = os.path.join(os.path.dirname(__file__), 'tpl', 'mobile', 'backstage_new_section.html') output = template.render(path, template_values) self.response.out.write(output) @@ -262,7 +262,7 @@ def get(self): self.redirect('/') else: self.redirect('/signin') - + def post(self): site = GetSite() template_values = {} @@ -354,7 +354,7 @@ def post(self): section.put() counter.put() self.redirect('/backstage') - else: + else: path = os.path.join(os.path.dirname(__file__), 'tpl', 'mobile', 'backstage_new_section.html') output = template.render(path, template_values) self.response.out.write(output) @@ -414,7 +414,7 @@ def get(self, section_name): self.redirect('/') else: self.redirect('/signin') - + def post(self, section_name): site = GetSite() browser = detect(self.request) @@ -576,7 +576,7 @@ def post(self, section_name): l10n = GetMessages(self, member, site) template_values['l10n'] = l10n if (member): - if (member.num == 1): + if (member.num == 1): template_values['member'] = member section = False q = db.GqlQuery("SELECT * FROM Section WHERE name = :1", section_name) @@ -666,7 +666,7 @@ def post(self, section_name): node.put() counter.put() self.redirect('/backstage/section/' + section.name) - else: + else: path = os.path.join(os.path.dirname(__file__), 'tpl', 'mobile', 'backstage_new_node.html') output = template.render(path, template_values) self.response.out.write(output) @@ -721,7 +721,7 @@ def get(self, node_name): self.redirect('/') else: self.redirect('/signin') - + def post(self, node_name): site = GetSite() template_values = {} @@ -731,7 +731,7 @@ def post(self, node_name): l10n = GetMessages(self, member, site) template_values['l10n'] = l10n if (member): - if (member.num == 1): + if (member.num == 1): template_values['member'] = member node = False q = db.GqlQuery("SELECT * FROM Node WHERE name = :1", node_name) @@ -842,7 +842,7 @@ def post(self, node_name): memcache.delete('Node_' + str(node.num)) memcache.delete('Node::' + node.name) self.redirect('/backstage/node/' + node.name) - else: + else: path = os.path.join(os.path.dirname(__file__), 'tpl', 'mobile', 'backstage_node.html') output = template.render(path, template_values) self.response.out.write(output) @@ -920,7 +920,7 @@ def get(self, reply_num): self.redirect('/') else: self.redirect('/signin') - + class BackstageTidyTopicHandler(webapp.RequestHandler): def get(self, topic_num): member = CheckAuth(self) @@ -960,12 +960,12 @@ def get(self, key): one.put() memcache.delete('Member_' + str(one.num)) return self.redirect('/member/' + one.username) - return self.redirect('/') + return self.redirect('/') class BackstageMoveTopicHandler(webapp.RequestHandler): def get(self, key): member = CheckAuth(self) - + class BackstageSiteHandler(webapp.RequestHandler): def get(self): template_values = {} @@ -998,7 +998,7 @@ def get(self): self.response.out.write(output) else: self.redirect('/') - + def post(self): template_values = {} site = GetSite() @@ -1021,7 +1021,7 @@ def post(self): site_title = self.request.get('title').strip() if (len(site_title) == 0): errors = errors + 1 - site_title_error = 1 + site_title_error = 1 else: if (len(site_title) > 40): errors = errors + 1 @@ -1038,7 +1038,7 @@ def post(self): site_slogan = self.request.get('slogan').strip() if (len(site_slogan) == 0): errors = errors + 1 - site_slogan_error = 1 + site_slogan_error = 1 else: if (len(site_slogan) > 140): errors = errors + 1 @@ -1055,7 +1055,7 @@ def post(self): site_domain = self.request.get('domain').strip() if (len(site_domain) == 0): errors = errors + 1 - site_domain_error = 1 + site_domain_error = 1 else: if (len(site_domain) > 40): errors = errors + 1 @@ -1072,7 +1072,7 @@ def post(self): site_description = self.request.get('description').strip() if (len(site_description) == 0): errors = errors + 1 - site_description_error = 1 + site_description_error = 1 else: if (len(site_description) > 200): errors = errors + 1 @@ -1155,7 +1155,7 @@ def get(self): template_values['l10n'] = l10n if member: if member.num == 1: - template_values['page_title'] = site.title + u' › ' + l10n.backstage + u' › ' + l10n.topic_settings + #template_values['page_title'] = site.title + u' › ' + l10n.backstage + u' › ' + l10n.topic_settings template_values['site'] = site template_values['site_use_topic_types'] = site.use_topic_types if site.topic_types is None: diff --git a/main.py b/main.py index e0fc7f7..cf7aabe 100755 --- a/main.py +++ b/main.py @@ -17,6 +17,7 @@ from google.appengine.api import urlfetch from google.appengine.api import mail from google.appengine.ext import db +from google.appengine.api import users from google.appengine.ext.webapp import util from google.appengine.ext.webapp import template @@ -50,7 +51,7 @@ class HomeHandler(webapp.RequestHandler): def head(self): pass - + def get(self): host = self.request.headers['Host'] if host == 'beta.v2ex.com': @@ -208,7 +209,7 @@ def get(self): path = os.path.join(os.path.dirname(__file__), 'tpl', 'desktop', 'index.html') output = template.render(path, template_values) self.response.out.write(output) - + class RecentHandler(webapp.RequestHandler): def get(self): site = GetSite() @@ -261,7 +262,7 @@ def get(self): output = template.render(path, template_values) self.response.out.write(output) - + class SigninHandler(webapp.RequestHandler): def get(self): site = GetSite() @@ -281,7 +282,7 @@ def get(self): path = os.path.join(os.path.dirname(__file__), 'tpl', 'desktop', 'signin.html') output = template.render(path, template_values) self.response.out.write(output) - + def post(self): site = GetSite() member = False @@ -317,7 +318,92 @@ def post(self): path = os.path.join(os.path.dirname(__file__), 'tpl', 'desktop', 'signin.html') output = template.render(path, template_values) self.response.out.write(output) - + +class GaeSigninHandler(webapp.RequestHandler): + def get(self): + user = users.get_current_user() + if user: + q = db.GqlQuery("SELECT * FROM Member WHERE email = :1 ", user.email()) + if (q.count() == 1): + member = q[0] + self.response.headers['Set-Cookie'] = 'auth=' + member.auth + '; expires=' + (datetime.datetime.now() + datetime.timedelta(days=365)).strftime("%a, %d-%b-%Y %H:%M:%S GMT") + '; path=/' + self.redirect('/') + else: + site = GetSite() + member = False + browser = detect(self.request) + template_values = {} + template_values['site'] = site + template_values['page_title'] = site.title + u' › 登入' + template_values['system_version'] = SYSTEM_VERSION + l10n = GetMessages(self, member, site) + template_values['l10n'] = l10n + errors = 0 + template_values['errors'] = errors + template_values['email']=user.email() + + path = os.path.join(os.path.dirname(__file__), 'tpl', 'desktop', 'gaesignin.html') + output = template.render(path, template_values) + self.response.out.write(output) + + def post(self): + u = self.request.get('u').strip() + e = self.request.get('e').strip() + user = users.get_current_user() + if user: + qs = db.GqlQuery("SELECT * FROM Member WHERE username_lower = :1 ", u.lower()) + qs2=db.GqlQuery("SELECT * FROM Member WHERE email= :1 ", e.lower()) + + if qs.count() or qs2.count(): + site = GetSite() + member = False + browser = detect(self.request) + template_values = {} + template_values['site'] = site + template_values['page_title'] = site.title + u' › 登入' + template_values['system_version'] = SYSTEM_VERSION + l10n = GetMessages(self, member, site) + template_values['l10n'] = l10n + errors = 1 + template_values['errors'] = errors + template_values['error_message'] = "用户名或Email已经存在" + + template_values['email']=user.email() + + path = os.path.join(os.path.dirname(__file__), 'tpl', 'desktop', 'gaesignin.html') + output = template.render(path, template_values) + self.response.out.write(output) + return + + member = Member() + q = db.GqlQuery('SELECT * FROM Counter WHERE name = :1', 'member.max') + if (q.count() == 1): + counter = q[0] + counter.value = counter.value + 1 + else: + counter = Counter() + counter.name = 'member.max' + counter.value = 1 + q2 = db.GqlQuery('SELECT * FROM Counter WHERE name = :1', 'member.total') + if (q2.count() == 1): + counter2 = q2[0] + counter2.value = counter2.value + 1 + else: + counter2 = Counter() + counter2.name = 'member.total' + counter2.value = 1 + member.num = counter.value + member.username =u + member.username_lower = u.lower() + member.password = ""#hashlib.sha1(member_password).hexdigest() + member.email = e.lower() + member.auth = hashlib.sha1(str(member.num) + ':' + member.password).hexdigest() + member.put() + counter.put() + counter2.put() + self.response.headers['Set-Cookie'] = 'auth=' + member.auth + '; expires=' + (datetime.datetime.now() + datetime.timedelta(days=365)).strftime("%a, %d-%b-%Y %H:%M:%S GMT") + '; path=/' + self.redirect('/') + class SignupHandler(webapp.RequestHandler): def get(self): site = GetSite() @@ -341,7 +427,7 @@ def get(self): path = os.path.join(os.path.dirname(__file__), 'tpl', 'desktop', 'signup.html') output = template.render(path, template_values) self.response.out.write(output) - + def post(self): site = GetSite() member = False @@ -429,7 +515,7 @@ def post(self): challenge = self.request.get('recaptcha_challenge_field') response = self.request.get('recaptcha_response_field') remoteip = os.environ['REMOTE_ADDR'] - + cResponse = captcha.submit( challenge, response, @@ -523,7 +609,7 @@ def get(self): path = os.path.join(os.path.dirname(__file__), 'tpl', 'desktop', 'forgot.html') output = template.render(path, template_values) self.response.out.write(output) - + def post(self): site = GetSite() browser = detect(self.request) @@ -603,7 +689,7 @@ def get(self, token): path = os.path.join(os.path.dirname(__file__), 'tpl', 'desktop', 'token_not_found.html') output = template.render(path, template_values) self.response.out.write(output) - + def post(self, token): site = GetSite() template_values = {} @@ -667,7 +753,7 @@ def get(self, node_name): if member: template_values['member'] = member l10n = GetMessages(self, member, site) - template_values['l10n'] = l10n + template_values['l10n'] = l10n node = GetKindByName('Node', node_name) template_values['node'] = node pagination = False @@ -724,7 +810,7 @@ def get(self, node_name): more = page + 1 if page > 1: has_previous = True - previous = page - 1 + previous = page - 1 start = (page - 1) * page_size template_values['canonical'] = 'http://' + site.domain + '/go/' + node.name + '?p=' + str(page) else: @@ -841,7 +927,8 @@ def main(): ('/go/(.*)', NodeHandler), ('/n/([a-zA-Z0-9]+).json', NodeApiHandler), ('/q/(.*)', SearchHandler), - ('/_dispatcher', DispatcherHandler) + ('/_dispatcher', DispatcherHandler), + ('/gaesignin', GaeSigninHandler), ], debug=True) util.run_wsgi_app(application) diff --git a/static/css/desktop/style.css b/static/css/desktop/style.css index 62c02b7..f4155f5 100644 --- a/static/css/desktop/style.css +++ b/static/css/desktop/style.css @@ -2,12 +2,12 @@ /* V2EX CSS (Desktop) - + Author: Livid Web: http://picky.olivida.com/ - + This is the desktop configuration of style for Project Babel. - + The best way to wipe IE6 from this planet is to forget it all since the beginning of your every new project. */ @@ -104,9 +104,9 @@ a.dark:hover { /* IDs */ #Top { - background: #303033; - background: -moz-linear-gradient(center top , #444, #111) repeat scroll 0 0 transparent; - background: -webkit-gradient(linear, left top, left bottom, from(#444), to(#111)); + background: #303033; + background: -moz-linear-gradient(center top , #444, #111) repeat scroll 0 0 transparent; + background: -webkit-gradient(linear, left top, left bottom, from(#444), to(#111)); height: 40px; } @@ -119,12 +119,13 @@ a.dark:hover { #Logo { background-image: url("/static/img/logo.png"); - width: 70px; - height: 20px; - cursor: pointer; - float: left; - margin-top: 11px; - margin-left: 15px; + cursor:pointer; + float:left; + height:45px; + margin-left:15px; + margin-right:10px; + margin-top:0; + width:140px; } #Search { diff --git a/static/img/favicon.ico b/static/img/favicon.ico index b0c3435fc32cf9f5813c3ef1fa5906221926e0ab..093c1967e63ecd2119e744d027c8f816e55912a0 100644 GIT binary patch literal 8550 zcmeHLF=!)46dhv|Z(;BjCTwwFFQl;GiU?AiAaEB$iWpKvkRpPE1e3xD6-KxaLPR*m z#bHzk;ldad2AdG@6$ZIDSYrt23WHo2=8C}PAjK9b*4?@Yet9!1$!kfLl~_p;cFnW2 zJG1}2`Tx(~)fZxde+vsj{TDx(LVPHMSR{B!ydczdb(A?a$|2Wwh2IY&cAC7u$Jm#F-8NK%XC15`l(Lf!_ z4-sGZjD^xV5?{_qik$Oc?$Tb~+n|pRm&va{9d+u^eoz`BzFY;yR{e=HaWrL$F7hWEOmHQ)~)!G**@|Ga2=fKhs4WgjqFtCP@e~ED2k^$ulznX+!Nx<8(I<@eKYWPT0( z(9w`==Yv?+{!iVx`JNN5%fs&;+`}W4V?+5>UK?u;md^v^ePA=7j?23mtUC8W&hdzW z`>Y9U3Ya(8XG$2e6IVpRtzIWu=DNYOzSJETL*%jaVVNc{>8No?@HLv|+S7a$x}I54nBx zGGA0R2wqr^sHHKg{o(UuvBPQ1_%O|YU@e^qAf^~g;c89xTodl8L~tq5WIZ6iHQeqf zqjE)Y8#5m41?J921V1f4g3UQX>j3$c4vFMb7tMmM!^@*sA3jGiPSQ7KSjRtM9e+wJ z4$wdy#>}mT^y1Ob{V|*~Ix6#eO&F!9kuqQ&qMx>h9vde@xzmL zER-LNFb>rH;Je1d3Z-i=u#SJpx)ITkdPZMFH83Zvjt1tY@)vA}1^2C(uS<8hA$!_fKX z_FDR9=c=ws-<)%i`G)+ZkUzi1czn^X!JO-^oi$@zhpz9;FAtfQKz5a}pf6M$q8h9x zU2bPw%(r&J8YreDYmkrBv!J~n0`5bfwI{5<^cCxls#*WWA^DE4?RWN9^wZ}UYt?^o zNanTVJEN|RDnCblhj>Wc^>g5A7I;4moJ|5{jhi3J6IZik@$Gb3i0LySCKcX)ASSQo z&n9m|OyA6xXKyCT^EYA|e-hVX7FS}v4fQ>W@cOlQ&biNV!=D@Y5m=yw}_bKRv z5e~ka$9;;pPciWKdAC;*_bK8&Mck+8tEO?EBJNYfeTukG(N`G$_Jz1l5%($LK1JN8 Oi2D?`rSt#Wr}zt#ZpgO) literal 1150 zcmb_cK@NgI5G%pNg9#xq@$6APW_$)e^8-G{A7E!?pf0XUHndSRrgGqZ+XreZ zT*GUteA7;7eDHJr)t6|PhY~EjjT-;thiClYf8kMQ_FQJSxz+zFKfzUg(98MHaASVa qyYN{^HoiqEyx)j|E#I#7PU!bc>*t+6j}cAhS$gH3SB$#pjQau&TVm1x diff --git a/static/img/logo.png b/static/img/logo.png index a1d423e056c28848ccb0187e4c63d8bc4f8e3740..31061fc150e725397cd55a917062e63f6e946e53 100644 GIT binary patch literal 31341 zcmb@tgX3kdjM|>@elh$_XClE>>>|Tu90C3=NnIrT zg0Ym6u2Wj9?PM<2n^Gb|m@(I#3$9itnS#zRDDvFPc`k2THKKJQmgDIh^5@4_*vSP} zpke7LpL0;K#t!$(<|Q~X2Z6$1a@jI4(9Ist1%(X7?+>`b`I>$|NP{RBJbrTb8#(8l zFYKd<9MQ@OqM_+RD#rH4anY4OetoOp!R8v7n`}k%q%bDUs4K@MYCcMfX887P*PF)N zK;5dxGSiMGgv0z}g`??c2#4|$+*)wBM=xE{w0{135Syz84 z%1(k9-7Hi~rT1w3NV4sS%pDU2mfjLlBZ0Lfdvq=YDc8_`3-Hc}gy~ckXm(-?wldTu zK7GC0L8p1kCiD^UTML39#(g~p)i1iKo)uOT4)%=RKF&rAJxrdHI&H>qmO}b~&z=b- z1N88VoMnAaD?W1w@rB#1z<^#~klizI*bd@_24(xQ!83X0@ORcVXbM!$Au5CU6YK*& z0p#^H`UWAu2wYVmAQ2~UkOONRU1`QY$r_O&F=e9>t|IM`CFt_JGTxdn}mJB z??rc#S4iKh2-&(OxFcXHc_F87vu2sq-0-VTzS6B=wA0fB->zI*8fLl6J2E^zItnYV z&;*ga#UTZcR5NzYoXURx}D6I#x(MnvM)**GEntt6;e=b8~FEY>1|>1Nfehe^H!t ze0Ib`@tLS9B~&~A4;^~yS9j|oVD?Ex<$cwnNqy1DCm+0-TK1)GxkD`O{<3Yp&+jbb zLS6W_MtsPpNtr+4^M`Ir?o&Z79)ZiWVk$kvN;5O?!f1WkvVwj|;SCI^c=Fcq0hE?1 z=JKVMv3*i{XZ5qVfZO`3(l-|pv|CjP+H2XC?~507vjo^+?{ebEx_BA2);4ssVmI?ING8U7U-}W;gM4=m zPd9rNoDNA6hhdqtpJ$1D%=gFn_dou_=n~t{c6H!ng06J?CFVF;Ru2+LMTFTeH-afw zLfN_w!Q%%=VCDb_9d&e#ZC4|{*n<7XjUlk_6~-~$mx znO~YI;J{~fQu0_m70&feVXbjQY4qdr<94~f% zzS8bp=Xss`@tONM#r5(mK<6T{B*p(T~>d*p}t^D|B0r?g9pF zQkRvhH7l~g=3YWFJEm7;ZGv609P}Q`l!esTq^_o#1aVf9yrXlm&zR6;coFnKcI*%X$B*>K`=;(RlOE-{9>t;}>1D~PDq-H; z_Be9BbaYha z4_x8#9`(}8mX*}jixqAh%29%y#=(FYO_y(j4lI!51UlI!mEfdlRhJk*;T_AXc!ak^ zg?sZJkn;=@_8mt;Zfa7_VPZY`Z)sF_b5T^iSsB6odnf)E{+}H8Pmw|b0#+9{7o#`- z7E^1T*hO_e2ic7ipGEgYk(hY`sh<(-_aDD?Q2+MhrySpev&OQVNx8j&oV$!F`Pav8 zm5c6r_&^qZ|HRjq57~RH>SC7Prr6e%y6O^MrUr)-Xe1I4dOpmlYGtl0iacM7jdpgqFOZJwxbQ7fnR$Xs z9pY$onwtIFX3cmPa@*d;Y5iUnzEsl(E`QQ8JBPVTWFt46ndHSK+Fsi3T9*lCPT7|6 zT>PYVdY*Zy>q2*l2)`A4ix)otq?1gw{r$W^H#Kqe_wpuSGLF_dxHsI7V$`p(NrchG z&)45ylvRJ@6&kMVOc=tg3ZToBnL)?`sN1Re{{pgD+$C| zcGaaLLW!KXC75&zSBiz7&jCxYT)>cauNumZK zx(OqvH(EO*{}41{5R_3Q`dW~Z#kHA~)!O!2|JLY`+eJRaj!pjVOv1$KC-IV3pN%3D z2Odt*D`vShu)Qi{Bnc75)YvBY_6l7(sxgvRdy}`n4MyD6k%_o*GBMNdeZtSGUi_!f z2;=a8Yy4G2@+FKyyD^!3Y@d0IM8QYhVg9Ze@IhZ>$>5=0&?GxopHnLTF+-3HkKn zsK4YYMsc-PDq_8Ert!7bIxxp}XDM=>+(L5)$8?4O=i0$;UM`}!H!4Y%HKdD1tR>xN zS>;)JNmvINpBI1C03m6Cy~w*{p4ybNjHKlQGy)bE$~zOp^CZ!BcJW{c5LQU zy&1-6^qurTNQ_gViGfaqJ!McI&i5$eIXTsz6W-5jrTgUae4(sWJ3lz1Jeiz>r=++X zzbTAf2qfFf8WQYEHa#(7PyX`S>v`Hc`sA%}@HQ8_qK1vY`(aseq!uWlaA`Nu#onjM zNrq*>X`Lh{fg>Hj9lk9|gXoe6~LyRs(}-=y{l+s;|w)(fNrM+qO{)PJ9N)N(zJm5 zp$iY0(am)9`Q0Srq$C-ue6;vp?R(DI4P(;;z2WkH^W>E0Xy%uqUXh~35*?0t*-DmA zuDb!h3VA;c@d#TSuxA^^SZ9Q9lzL%}ctuC+?-PL&WJu)bG+yd1JU8x_6j?z(e&)UB zuI?(JoLNj}XCGX*5#mJWW1I4s&^YQzOW;qnI-Om%&6!>!bqkA6AC|rT_>N&qV@dhu z0gB`FYJ*?x{ko85U1!CI0R)j}#VL&IF3BEugeW>3ez3oL6`DwbC=~KCSQ2^@KHPsN zVdA1F**4vthgbG?;7+Cb&ct0EmyIK3lgY2f#%G@%nK(X%8q0oUGL`fZtD7$+CXYC5 z0&R!GA4W^YLUN>|qjc}ud}2T=4oD##bKJkIr}8C2D)wogQ~^U|1zvssMqa`iQ8xH? z&ssg#xuLHJpJx2h_w`Z%V(0dLOVFKUa3_ zSJ{asZH=)|q>)%M*5!C=Qeco}Y@4b5zCHErCQ=@kve`reoAiZ083%r2}@VJ^|AljbGO>q<%<13~LxDx=;!L0*xsXS*lT}7v?O=9L&{@$|;^*nXD7! ze*3Eoe__Pow12<%lSrG6bB+7h{^FKw`nYD(-Td~Oa+3V#g-6%8H$;Z`a~p@}8v~I~ zT)tqr((B{%UfXpsM8-AvhFrm`hLs zx#eSJVcSiD{d_&m&4512>ac=jWCArIjoiG((-%5XCPdWUlZnzF(djaR07W%>c|Ef4 z!x?AA7FIlCpyTMW!SI9rvB0T1df58Z(7Y{aH>KVgs|M^Yfx%0lI;{YYB8GxUpWB&S zVHr?AuO(bt7NyG^RmaT4S~rm+a&z;@2u&=Tc9+L|+Z0*fvu@-d>Xnc5N|O~H)E5M#eMZDoZ|dz+G-P@Vd6|dDev|w zTwLCI@sp2sZD(tGHwcbfSyT{Gk48%U4ZHPz@w7$6`kvCX&l2EWQ0X6*^aodFJU7JS z@f-O@FS(>~-)au{8T(wiqWNt&$=>mBS13JzYe=D=GkjzuuC3NdP+!Vqe$8nhp#9QV zJ|hA+Cu$xzG>yD2KBRA63@yzT8tL1@Glezlt7pd$%#dYK1BxEaGn7_)JtQ;aSDNZb-IU6DF0b3e_U)RG zn362BMMqqtDqSg^$+e#TIfZUHbxybN(ldz@W7+qGemMt|9Hg)8+n||+eih`sL;B`i zb`n-p+uS;x@0nkb^BL2;o30mdF-R7y^v~#`IX{0?Eg~#3PO;>-)OA>}C_&LCCUN3L zOvqefGwXD+IBdjbae`DB9@jbfnO+{a-~$lyZitDuxkJot{5D>EVYiNnZYi zocpygu8gxvaqEBAMY$#4J%t7)aE0hL%L-r#tIb{$pT7GtF{6@J2mY8tGm^a))9@J^ z$Dn)X9cvQ(ymtD4XU0(b(HGSqWr&g84q2hC;V~0|gutq9ySOmX_1C!!TIYZo)E9v> zpKFQXZ}gK46kEVS|GgGo@`$P_QFV_Xv%AX^r34@n-Apu=kPSOp2s>M?^GbMJ?leoQ z5@$E&^y*X6mMAe`^{L{k~Di4UNJm6=qJ zm3X3lcZ;aq&6EC=9Q~2H$<%Z)rz%vd^D9Jde{%$9@5Q}rI>^5maa;QQvlG=A><>Th z3*cw22}S!Lu2s9gU!H5^ym64oYCQAo#l#cFycOXplseUBwjef*NzQ@YAG#f4q_mB= zDC!w&=~+PhO5vE;`MZ;-8#UurzfM5bz81G`7IDo>A@rU)YqN4bp<;OUd79Y$Z~VZ^i)Ch6C=GKER80@K*E5$B6y#H3j_z8@RK?+vulth|O=By!GPU z^wQ#J787WuWVcoH5cW7#PF%_2Evm7-q-IXh`62gW(nerX^s%)s|0CobA?EY=@N`gK zciCb>+2{+YI1SxV&WwKAOk&;Pcd~xRk6nea-*1Trt)i`IIO&`ilXOGMS#^HtrTdwM z91YJy*lGdUE#I`Q`mHR?f6lykId$HlHnQHz0>X#&;asP9gq_m7oa~cKA|5id1V|cY z9v~9t@^viiUsQStREkcu4Hp|DQEvk@u-m@6?q2B6EVY1(XxF+5A#)Qi^OB@3F@aGY zosztkHx=paRwr|f(w-jTQkmMi4g#g3UKXAaG7U7B74h_mdd_{}A%-bB4n!~NUklXp z6)l7YIXlwR&%D4~aa@8@W)n4BzH9Mn)hy>}i?+(+e($pc?O)pN)oDQAC)bBiw6Fc1 z)Zfz*d))sfi`092k)`p`{#EH;kju|MBAsTlPpE#xW$i8UTsMg#Oz5he7cEn}p);a3 zIwFKVi$oI)%rk}k<5Z4PB$oZJK9)UPX!^!?W$dxIneZ)za^Pb5XCxUtbpOTZo$Gjl z8d3`o@JSz=4&!9TjE&%LJQ3ON+ccV!F|+TWkRtonodbmfS@Hw-8eVYRt7BcMQe<$O zT$E~*Ei>lrOoo{7>N;cE0;*X3ow>J-R9us|+Ny2NGKwGavVKv3)2h{fWpsR3S(Ykl z{fN9^l~Dn#FCK#%sk1E4-qW8{l6loY66*c%$(C1E%|UI6?&z)Kk38BV*GbI~Ntdj+ z-(EfE&Ew^pnh-<78w1TMaxpDlRj$?*rmVWh#hX23yzgTk&+inw;kxLSv;M&*ig?zbJ0U-JIgGqk10U+CaPB*?~F zUFdM)hi$Cw@8dw->hB*0Ql9plC9cTgABG3Mhc6DGTbj%V6WV`*e20IKHYYjybzj(* z52#_&%o@k_)_yfh-6sSEK|7CR{4;Cl8#r63$}#gAw9lJ9`)ermG)@u$9Al~|G} zpi@YF2fXiWcf&iC#CdI0K+^1rur_^ho7y(z@?0Zq5SU_zNGi|cKuz~Dluo?~JD_n* zLhWSd73JR59^|9{0OQtBS<8{OqB%&ikynCwDrwYXAGx(@RJQ~u(jHjkHg_kJ8>IW3SFPYe$(<`quHJ*d zS>|#0JH6ZH27?jNvdl<670DR>^sC*A&v&lP;Xe^1SpF(09BbvI?O1h7@V9iKdpVFh z$k9B=C%gM*?$ot?z@Ag=SJM_6zT`Hfj7|Y5brZ3bql;Ok(tDos|9G=CWedYn2N*dbs zil3qy?FWU=lhfqofD$|0=F&$$~RD;cPy@l~A zOPHSHQt%}zHvNszsdHiyrxC)3!bZ zZREsxi(hW@k+;x-aRAU}P7)G2^sIS1Hb=w@Iy5wdy33HsrYDm6IJh<#Iw_?F%PyM9 zDe{hoN=d(nnk+)P@VNwg)*RB#)h6| zVH&OPmu|*}+^3fU-p>#@Wr7Y-$q)4n0SD7QNWBD-=t52ZY~|#5dv!e)0BwwR51=($ z{tN3raBPVAe}DCls{eqC1O?TQylY<#j`V;%N8zG!l(1Cxv{R69Z@x|s;e;#E( z?~e_MwcOcjR|`7|zRSR&7Z$x}G468ryok=1>7#kR<&;>mOh`%7AakL!1Q4mI&n2>`81C*9`*gR#}Q4!eK2L}kW# zN@w}b#r{^ux>tHGpTpn_vDK^k@Te*BLbcxmhtY7d-u8e2e8{aGp(@t?WbN zu2574_+$?q!*+|jOV5DpC4fkT-I_i9PcQsyweF#BZx^LF28B=oMa~iS<~|iWVl)ro?}u|8|mAm?f3X4?B`4} zbC)#}>b{;rs1f*dM0&f(cR{h?h%^`s!Y+2^YFqgCmims43ecb>JtprZgely|iAu`1 zZx@dX&?tQufC=37IaIS?Cri|ZyC;dUC8u5c=-k}H-(i%ncDXUU`yBM=V;3g5tHtQtpkVHL${KrrEu^(_ttkyPEB1;hQD5#eFRYeBTjal&)9El0w& z^f!vtZ!v$}$QBma^r|#(tp@cF#?_i~uhps)0Jn^%Rif(O!EFy3PjD2qWqKU$;pvp! z0Ldbmir@+udhI90`vZ<&E^V=)$*)N#PQ`vTbJ^%eOFc=rs zoq*Epyp0ru{oTDLZs?qsCaRHg6tUV)?eJ35ofvbq6>OTd}jTvLHB4gdvqw-<|V0mNm4J`{iZ>D)u8 z8#v!6hzy&LPDLBT5?U+0W2xwvS;*B-8PPE>REp$A?wWkwArLD=j?x((ec7go`ZQ}5 zH`e~SKMJmpVq*v;zSwJgN&14db$ytuP@6PK_SH+ljX}We`t|C3XON~;bvLWsg!k0u z{M^+bABxXcJP1ld^V(UeO+_D^_pLY+C0ZUHp|1;CzXI-Ehtpiz%cuTEFoR;u=ZW&_wI+wtUkb-)>ECjUadivBX6 z;>nc#qpJ5LPy3S3WEJz&hR*H9LSn=JKG#`YaP#QQU-Fx^_xc}b5^@g z?lEOPfBOhZJD#KMuxa;)m1Cb1Ig^jo!()KB^)n#w-nvKoSui{2cq3_rOB!koT`wk!Yfl%X{((-7Y4`( z?%%+nF#RsF%qWNwL%c?b-4FgAH2T{rOBl!L(oSHoC#^i!6(!toENkpfRgy7T1MYL} zZ%w#h%95u^sk)ciexv#+(dkRkI-eN6MXTr~1Vb2Ra&ZvfA~Xy^o)SJg%;@-j(RL^L z+8!UaIiLS}K7}&0{-J52NU1t5@?8JV6}w#i$G^N-4gLm?<#C_iqUq~ztU~MjHi>e# zU2p7mX~)-pr824DL!Qp!&?qWMr%)y$(w2U}X)E;Q`Pk38t^v3q%e3MO9#BPQ|A@dci7l2ubM!(N9I$x(_9=&x_WM@#-zIIo>sad`D+ z#b>L!(l)yTkJqC%6V$X74$IauIcW%N?I*vlwqIPpX!rmr_$FoJ@S%sVJoA;j@I3M1 zVCom?LeMm5jd0K!5UUY$CnfBmH_mBkT2j%ZSVbgXvU=0(nj{XmpOQ6pBlcXUrx7Y? zl9f7>Jgjw-=zJ3*rbHN2ng|-7UETO4^|O|)v+Rr6^)VYIZd>DGOYrl_nYaccvL4vt z_&f!MDFo%67+QhacF>*vKXuyh3=PM9xzlGyqkmq|_DjZ=>l|?y%kICKXS8Sd*}fz; zg3E*EYgH-923Ag2sD7;DxE^j2n<`b=Rkec9^$a@MH7JH5 zge^Txg5G zeb(_Q-Jcgnc3mH!r`#WnG*dMITHd*);<$G2HUPRh^fQ|tS$PTbmcE@s& z1lEllhkOdcuc*jd^aJF9SwwXt? z7bG+TM~)SLO#DSn4pd83qkN<*+_Py&&E}RP_R!y#ulWf&Io%XYkMa^w&4o4@hi*20 zaZw-mcl7*8gC>^C;s!X&;cWWM6LOAL*k^vX1)=ip2Y$7?+2fS7hc7M)I$y7fTh48Y zo2;oUEYli`6B72XI7*nm)32=^{>Df{V&!m8ZT9$%Wq`pv?q{fnsK9%tnsGUkhDQ~Z z1C+G+^a0vbBhrfp>s#`|zlj~|57S)97Umoe*VVEgx=$|4FBg)`U#3s?)n^UJ(~6mh zQY4R;)W(p`NKhOY?0@Xpb98BMkAcr0`3=`Ni}n>f?)s6O&bdfRA?*ihCLz6jk#H0_ z)%-JIw^|^SN*OzpoF2$5N9lDcD!rI*jw(mUAh;j8kh(Yi(X{c@QgJD7g$ z79qVL$$oiF6s-r;JZIvL<3ZCqj_a`-x*j?sZLbMBYs+fP3TqT;A8;`R$o>LPmfT^l zZWgaSa2G9mdWbP&X3x=YUHnAtXF2!ggFqIQLeO{|>Dx~K=9)qb%M1RJzX`t|p7S_v zws`xe7*!5DZ=Y9AsoFqi``5Ou5OdDWFMIhjABgR=Dw<4Ce~}K()2|&?{`)}WQ6o(I z=Rsp)9bY*u<^5#}p*uBV1>YTtT;dw*mX}?6RqWd9i54{ru?DXNjCp9<+ejDh&TLZ* zIqlwQFgk4b`mL>ECfM55mo%>ZhjZFT5=BXZcj0-5as*GgE^Ri;CH7tGdnA||0w>rlQSPoaiVSf&d^3|~5nfcW9j+ce`^wJC?V-;4G0dqt77h_4 zExHMx*X@J_7=#M8BE?LM^&c26<_d71gvG2P#MLQKeipy7bK8xKvPo#igDCd1#GL=W zB$;#wj-qs8GB$C2JL#sNJbBpQxVqe!>%noAy&ERu2Voiib$Flg5Po?qpkKc7o_N!2 z@d>Yh<5+CWSgaPK#D-xsLq>&{r{srmdVFXb(aml=72%};^CcR)k^o~hX25X8hHeI2 z-nUv>+55NUwft2k)Kd6E@ne?xL}5s`CP}g`el?bH$fsOYV)6HKKacqU{+$bxd#y3% ziANtvjK`nVWB%PF8A(|$(kQjAp0y;IKGA3w$>sLm?!4EZYe9*Gb9kzt;`S2Wv$NcP zcI%dZrtE)aXKUTj2N6OKpWJZV65D=VC>k&oa*8Q2(h{_|w`nzGKM(f!F{^}p)q61Z zs&1U$h($!tJSPD}{^~di_FBxU8{5S3d9$EwueKRn7IPdt>V}Cvu zm3#bL;FPFmEsbOBBygd2L23CFq8ox4Ce0nOA4cea==4>p0XPOqzXHete>ir_}_B=1I=EA!1k zu~qpl=}38k5nDOogZW{61x^p`k0Rd*+_V9g^RvSjn)q(V%!Uy`1Us0tJm204ZyhuT zJlWWKUtS$}^}Rdr+B|vCukGpL*NfOKpj)34Io{BB9p~M^W<73}_L&j!+Tl()0P1$^n-{LwHkOS{>(!VWq!JR!)mqX(k6aU74Ug< z=g^rHwhdCxJx;&uYEQp9%f-UxP7*>Q1M{wYyZQt=)3EqR+!?JE?!5jTthXdy=f$o6 z?qV<9rpqozE-dlpIRI*nCelHA{EW3qxE<=^TNFG*EEH#)HnXi8EGmp3!o=CU0oC9$bVsT0)=9v&cF;-*E2}ZCSBU&SUfJ#n99V9!R2`x}aI^?QdLK0ZI|1OxHkWjwK{4oayA(zT4^BEo-niS8hJI{9S!`cZ zwFN5Y?Pr|94w}!zcA|IjNV8#ZG2Ybg_`JAOkA;c*@ENAoRtU;G>Sw;1GS^Q=jz?OY zqC&z}TY;Q{u)BQFbMObN@X_JcKxoas9KngyIr} zi!HZX9a?s71ct24-=XhCUi8ID=Kh5(U+04eHZhRVky`EGO~8M(ix4@I9=Pfv($$TO zly6AhxW1Fmw74`tcOA6JSU!Ax2N;oy9i+R)TD`$-kcG%rapT{Id`##cK}vLW|L>r7 z7idiL*^gv?2Yw82?Ypv3+DJn@@^h)InCs-ITK(4;_L#&YZhV7?tcVSqbdjm4^^ePO zg`F$f7Toiq*;$J>J7>!S{LKFJMpj^BB=2o@&z=pJNYL0R>~hEVL4Hq(>msjs`whac z;V4@+GZOx=w>pZV%SFN(FX%dL%VhcXR&U`FJ>eeO2}ho0eJ)3lC8>=d_Ty_wvfzC| zK8cT7Z2ST%v z8750D4V)zWYIkt4vKr=DU7G3S>*he0ks=QffXv{QLo2Gr_fK=G!t&l7{BMudWLf$) zK(cv{C9dE2c~qp{=~n*HN&)e>IbiUTgL2tU z@=OO|Va--DPZj}wIQRIB!}d#Lvbg=2S21Gp7IJ3%{!N%4x)fJr(|To0t|y_#wHqSC zi+%&!RXfLuh5+Uq4%r&;6IV?JaGDr_BhXB4)$! z%tD0~)U4L?A)8BDBgZQb5nftm`0tJ0ufXfIT!`XRWLv!E{y{Tsn`CNy>`VFeWHW{J z^bSg>K?TO(mhpYj>VoHaeD0}#z*n+^_gCC0ko}_;;D}a8T0)W^l#YF6Nf;SFqthY& z(B+1n|Cub5`A-X>r)&0DK2t|~|N8h^ayY>uTkocif1mGGtG zF*5BiuPKvxrW(ef2Qv=h-RUvL17wbFsnOo?$R)e1Fjl{lRo&+7DCJzF1do6@vYd(6 zPkK7gUgrE-ax}CgY!|;A@};?sw>N3!i!M$IT(r8}9hw%bIFQHTLsGr_9UgF$xG_`d zonST$ajA}dQ^96(n2i;jLALv9%6aUOtKCA5Wn*UAwO`_k>dv$)PNk_fm96WyJK*syF zcZY&rLrPc9+s~6$WTub&QJ>3e!w01@DyV~oy@O04sTlRDoU?;7lc;wAB6xy=PdDtV z5YD21M@TvTuLAq!-^GgmclS?$ohM9M6ngk&E#mFH$cO*sKRmp%#!j#JA5W}E|EpPK z>fFB5FekIgpbFy9wcEcxlx&h@f5lOJPWX?4w;PF_Z7iKxU2$o1$8N)slnXZ%wl~)C zEDfa+TCCZY-;fGlEv3W;uG25X2TEBE@j#ZT(60l?7bh;odB#w4nH@SbIL!6OQk;|J zkD%*YNU4}x%m9*I-gmYx;fz*;cr4QCmURM{-vs9~a9`-k>{TA3uC^go zAQbCWO_7@%lc7}uU=kZWaGY$LG2&}t8kLJgPMXHg=hWxqE&J2@cQu~vL2F@QtPQ7t zA>YQ3ySH3OOBrm-91=F-A0&47c2@W_xYrQ++S&peU~SmxDBqxb1|9hh%VqMtL4LQu zu{DmvJ}MPi7b~AZOr=qcKqPyZCm1!3Uw>a-?o#=;@NlYWK8Izw*0Sp5o)Rw}=MUCc zMC;E!&gM0hatFg&8wL*Mu_!qd4H}L~sxCJT z)3YBOXy7-!>Rgai9&FThS|rIfRocRuELNulgg)si8U>#RIeQPg&P?7OD>8Pf^Gb?&ibI_zbIk zu|w3;L2Q7^S%*YQ!`0sVEzEnhQnU{qH6RP_H*?^?&Vz67Eg)qFRns!BU~1c z{WJQ$5?O~XeAt)|A3s~^6VzFh6+$Xu-;kkHYA`h3d0;6)4D0-{}mU>AOHWTM3_P3C*d~nFR^wn?Vx_5B}f&KMW58hxG{S7A)g2&x%O_%EZSN5wA^ywA? zCeRg%xs*ZGNZ1pfW7JgtVjA+&^7Jkscf==gRhPgEgB!oJk`(wM0-bAZbXu`VY|Yqd zQ#@J)I_wCR|KN-)586Lq+j2qpwl;VKvu05R-u;cM4z$0B$K(URxU1kD{;AvRlZ~s+ zfXKFAf@I3lovgbe%DB82r_mj)boS*o>U8jnz`X(|4naLNmh&KN9PBrK5b>Wadf3qe zX^gjy{p2Z!PAW{qJfB1E>J_G)+#ql9UiKhjBD3TxD%R4B_e`=OR7L)$8r@LY zuF=tT0og*`2n*bZ?Kg-&|0EQSyBVXYz=BO2X7Rh=+>Vc9xIK?wZ%q6Tn1f70Ck56c z1SjNwg?*GY@$zd^kRN#pxS}!6y+tR&MiC5nlrUXOKW<0%hU4OBvly3l8_KfY-83hM zQ?+FO$6{Dy#ks*kjN)0LZl=I-vjFd5Qmc(U*zPZ~6RYjPYiZTbe_6`n(vI4su)8z` zN1?`VxI&k26ZXW9JeO~ucX8AMf+ob%cNM40#+~SfP?v*%Q*G=P!?;A%(+!aWJ)lA8 zL_VSK1!~WO0l}Qbnz?IvBbQf9<>OL36oa|e>Bc7wpq{=A6(qVCh_Y*&@Op(F1`aCS zMB!0&zp&C7W#_wXEdM)9q$RI1mciqv9zAj`pLr$u&qPD}7xVtuZuJ$L!R$Og2ERAP z?akBV&w74O_)`Y0+G$yLLp?1YXetNsK!2aI8CwN4V=d7QYOl9u<*02+dA)p3u)&S{ z+9q2wSloT2aWQ}!Zz5kgm2wsd<-TFPiwsEo5|Tq?zFRT%ae$^B#Oee--^j7*4|H0x zvE4SlnLhPco92;wR7BQY|L5%K*$A%h(1LZ);MF>}V6@&FC|O|LzVS`Uf2e=80<|X^;Wn`sdFfx3 zicA8jfimOeP@1?ZoBuO6AM|xaqjNs_vb%gY=KHNh?Y+o?L$b~#iG{nfnr~O}U6CN) zoB0QmgYT}hRY3e_Uo78TWMUXZstn+%AFp*Qjt%Vn;B5C3tVw@W4>Y%3R)cKSt8Yg0 zkPJsoow--vf{!xJ$6l9++88}j-NS-v8H>2o8Ve253>O_Yzi%SEq#dJ8G(t|A!UZkr9p~PLx#C=L+7XvHPf)Pj3c-|L;0)neVJ2- zAlcW02}y`=po0V8E*R4CW8~2JcK0KaZK5{MJCuH}UH^WH` zSH9$q56@dGhvtLYEXK`4WG{qu1N$pNR3vaNH~-DaRSn>xY8D?P=#sqzm*14lg5l-j zph=;+`Quyd^dF&L(0POmSotmAEz`hCyNZ#Ds_H4bAm;y_JUlx~Rsd7UZndK1Q8*hL zA#DAQc{_%6Y)1Oi?G#Lz22_4&+Xa%1Asf4V#aq`Bel$OGi+{Oq+DKC?-kIm=K9?Vy zN9wiXi+twaB0FW|at;;9WIeYk@cNn7<-WzFw~9f{$QvIde5Vexjp8r@6rJ!^?dJtv zqJldN(0}+6_-t}LRapeh`Z0czZ344pAnG-^Na*2E%laKXeKhzWfjrEebHmY?bVW^+ zvJ`pE1;l*ub`LQPH3Gc|u(91gPvKKNy#3NNh^DFOovdu3JS{(OEj0%0Sl&B>5<5s{};Qqgg^gf$*f3joPn@FCq1Q=LQ$9{!ST)>ZXW@HAXC4DlX(g&#WF0Nf1f zne2ARp<68GfoISGJPW3X1L9|o1+4A(wL*1)rUUrg`goe(7Z9%%bM5f`1rM3{hv=Go zsBk@~PU?e+O`2L`n0%%s@L%~BUA^WvS1b(qG$Q}I7IuKUkvj`0gO=pxF3Sy8R2O`% z`@Ww&SkLN-i;X0~Y-++UB0pKeeT(-&ZPj&)q*jFSYfl*U4n7peSKob4+vWZ|jP^LR zqKk6SV<#w0g#KjmJB6Fp2H8&ehM(~O6lZPI?$n^$MzyllV#@ORvYn&hDj>!|NAfFnb}Y^5@@J) z%U{UrOU^~5WkrQ?tk9o+^s;z~$7Zgu4q{V%P<`ULAm{d2E-*yv?DX2NzuX@Cb8)W) zF0Av18nM2KUA*?C+ScWdQP9~>C_<0dHVMd@BN;h0!@_z%4#BS9L3J(dtc>gx?Rns* zW_AzSgy*_P!c549XgO&_vHp?C1`T1JZ+?+%!yvoti*hVvPeiLckXos%g@~>kB-e=J5e$LG+ay|#8no(8O{DBbZ zFV~>teDBvQz`Bld`kEuEsQ`)E*@NaHo+IPXxT8wLD$X+o-p&??QWbRt7P1IL-fv#W z57V%^HMoR_)w+POB!Oix4q!9h*@HApIna2Es=LbO_f6hgF?>rs?P zBS88m^UP?~?Xc1yWn=4+|NJm1xC)y;x-Soy*7AdGNxyEworS7MHxEI95m0Xm@TLkZJCg{lGrI0tNn!LqUc-;V z#w}}#T=ekwFs5jy12tQkumSFkdn|qYvU!yLB^?5{2_l|jp=nebdEl3RzkQGWpPSSs zSGY5#O!}>za@Bd&wf(`jREfo-UX^u5zmYL*i5bDW!~$Vjld#mYN=ZdQ(&e69NA!*g zY^H!M<7JH0o<9JrB{LNueHy@Y+;&$s{UAi4iE7cdz7N(}MH5wuHn~|1TpyqzZMXd= z#1t0OeN5cVUN7Dmj4`=3RZF>I)JV7njxUvY046;}|fi(WG0TM1 z6VMKkU>qEYfDqh5ylMi^H22vl6c2U}7JJG7K}Pdm#s$jj(_KaS9O2~dP=jmmxS!pw z_uYAm0@!cjVcmG3b6z4G@}(AG;Vkn%wdVg^|k4vww{`F+d_?&2#Dq6^h2yN4i0 zw;Y-FC8|0n;M&N$$NTm5+PpiUOGhLO=7;fD`sNS*2~$-rpmceJZ2q=cLA>HbV>wSl zLK0Dd@XCG)NXd9s4tlVG^)>R z=O2>yk~)_Y?>1l;-l`i}I>I0ii?@i=QAcV!Sc5tJCReC8P_IcFvE(xNU9e*ABb&@@M!~*`y#Qi1w-(=!u#JC*u6236~e}#0TWrXjo zC7qQPYi;f`FmS!UZPkvvWo%sMEKJt^!2a(Bn}u6I|p~Q#gI(nd0 zSCQT8YcIs(AABkTW%3aY(1{I1y0o-( z$P$tlvP*syXPj@3&zISxd(!dFj~PCrqV)}r^*-tp(=r7Hn$p93AG``;4IK0l`%g(Q zb03up1v*5`L`yV}XV&OL{_kk>tqgmWp9ZG$wK?fy3Lj~&teuCixr~cIx>+Bol-hN> zo}0sO%6veao}OMLL<9VbAOosQ0J%*1j_IweJH@9QeVP%Gj?^SG2tfLW!*ott9rr%< z{Q(^0u!lI20OY8CxUV@eJY^Zs9oB>hz;xG`s&Cdyo-<9VE}Fo zt}#a)$aAo*oY1%kvAfoq3x5g>8oZR8u^BxSKD0@9eULb)UK&Oe)@gO2rno?Zf*?Yt z%&=}Kn!{9)|K3Z4y<|W072}v$*K4Vxr|SP0sT`furTsDQb6cK=x#VN|)EY|w)mWF) zBjm4n<6S_bOoiCrj3MW-!1!qdz=a8Xt+@WA;>1vqd2{W=HX?SU__WQ}4o+S>2uzvh zs?-9roH>s<=xSG0Idx!8;#k;|HbB_W>E2o(Wv znLY#s@DBdXcPp!tBH>;DF=R**;@J6^l^TR{AE;Y=BiF29HgPpvGbK#|sh9D}4oDmh zu4=jft}C*GG>as8_~!UR_*15G<|9GcJilLw+$SPY&2$lZxj=w)UY?0pX^00P<2BnY zbQMw04=T5YPqflV+=P7h;l90O2ZV#8MbWy1Zj*AirSx898I{&4F3cvg}DWSPdhj5FRky;oYL>L}~1$ISwpVwLc1k_vlR*pfX8iBJSV0iqQdDC%_zSuEnH!vFj?Oz19 zna#jPyt>ZK5%c>2AxkpzCkTM;a^Ttg`EnENaTKx-hJmXeY3Cv35ZS6(KWLW1EQn^_ z>3@;-2>FLW^?!EV%gSIsRJ3R>ao8at5qbU>d&~c!YW#~j{9j$qZcLNP`ihpB5QH!@ zF~!%oxL(Gjq}rtCWRL|VX5z2ZLz!?)cUKqE@9E~Z^^NTiT08YiZ}DvSs6_)s++ll_ zal&@=d*uGB{YtqO)S6fMIFDju0n?S~s|!9Za%=>w!3(Iveup?OK+l0d1VGFxXT&(e z%;#e5Se823EJ60^7Tv@uiReefK=$nq4o0VTU0N1@-NSPKtc9&BVK8fQGuMbsgD2=p zQAHB_>!D~Mad(7j{}qE*5_L+br)CYjz7=i82i~&n5~306XJWq^e-Tx|BW0Fg@&bv9 zDIDny+)+uvURQ>z1%AO@lt`&n!wLdCc8r~4QLN1h<5g@E2_hSgD;&lECGLHey=rcW zu)7zlXolAYrI#*=Rg1|AKrBzk_s^6ZcsqXy5ePYYZ;fmLdg|-BNR{sd|YH zyyDG+c267CGFIf0v*$i*!k!qAaeX6DGto2$$-Bd=c;$YiY|14HSGlxzLD+u&(HJMA z$Z!;I>pv@>tw28d$EH5DcjY;#<|1FvTSbyZ76Jv`E;w7xVqcR>x#7GSSdN&2|0Z zUuM4j>v&s5ptD+@(64;I3I~;gQ__J2L0tca99kr5XTZ8}KiQZe%Y7)N5>i{U4g4cb z7YGasW^4s)UM1CXsIg`Ty^YxtivQvh!0Gb|NJ0$yDK$y}})EGjCH*|sel*-xG`r^%ioxZ2b zx31rs6NW00M9CIP7Kk70iQNjmew&*-7X<`v*Fh)`N3>?QUO_Mb=Qv)AOuP@}A~~No z6IVyS7a`NCX!3Qg0!aWM0P8Ep{3jKaLFn>Rj{C+};MEZ-&!&-8@Je4jN0sUJUR66< z?$=$A-H5(LH!2;PJ37Fjm$isv=DGN{@>yfS2Z2}fVFTA;E~lAEl5jGz=1$`=r*qY? zXXc2G*`nIZNDe@E?sys$%KYpP)0`TOQ>=vT)W5R}l1ugC|Ko=v-^tS|!<3xP(|~X1 z0z#l3`LIhi${LSkUSrKu_%-Fb0mJzXBI{m8thP?oH~7$}Gsm1|7)EM7mGYAj@t~*GRb1 zGYnom&a0BalqJu8e0=i5_n(6v&6EC+ZXFV|_C6uhXkH1C+LIRBF*KDHe!MWp4)d>n zr4$N&mb$FU+ud6+D>t!YFxSqQo57No^jvV;ed-^K9{$(CxyipB|CU~rU(a9flhTCA zP@JEYJ?f?=pdm?{-hMwzGqPRN;IWh=Q#bx2eJpZ-kxI@Yvkk)1b# zPyFH#R0{U*&9}{J;?2empJh>${Nr_cQO2{?XUIU5YdShmhNF|xO$+dzDx+jhnW^PY zs#CyHH6+&_nTLW|mDjg_U)BQ65uJN--8B6c6Qo;kReYG-g7zT8>0&#@5&ARZe=B$$ zJgWPsZg;_x(Yu2abr8yrkx8hVG2vUy4^o@I#MT`SMn>HX>G-^tDiNJW@!aDA>`{m; zFs^*}zXDqz1YySA%>Cw(K|L5=jP4$pB}m^QE6fMSMx=F{1V9u~(HoGdD$Ar~^y1}$ z$jNY`(A>{nLYSVc#oD$!cA?l}xaN^o`>|Kc)G4P=$=qGpL)ZMDOEr5i`ueQNWS83m z3bU^`k3qa>k1Yc0s~j9&j2vQ*FPoG?xfiYty;towf?vx3q83SRIQGpA5eFp6QX^CZ zsnVR-mWTu4zX*B-Tr89=3G4TR8AU1biQ)W*3TOw6qB1}LLM3Wdx{1qkcilIf$5k_a z(~`Z}Ho+;4ya99M{mt76a@`DKr{AQ}`prknfjpEzF|Z1=n3SL{gRz3lURPM@dEr($l^HhEQRU&Z}~ zMEB1l#r2-k-c_x_3#}uJd#{iQwW`$ubfu4&pHoa2ww_oqHYutPGY=MsT2o5Fk}@* z-Lc2L`VO9_!p3g#iM@tY(2E~>md3wjdqUd`F#XQHY5x@nw#s}v$X<(Fv%+@wJYsBH zRk!abOw5{6V%L#sJl}>U8?2J79R59$X}z$Oz9VM#&5PyL}T zFyc^q!I(h8zpu5b)^zxg?k-~~RHM6|bcxn!_}g!b_9@-y&Oof^B^6C@j)Dp5AMba8 zgjs!w1`Y9UtTTXrHkN95yQMaH33QK!v&8&N!Ga!dE|@2#6e*`ZOH3+HHnm=aRFKkpLkV&9z_ zI!!;`r|8nv1+R=0nq8Y8UE@g#y(5Tfb+BE!XByHwKLpiIq*s&`wZlAeZvc?2! z%I^hlYLR`zP6V2ehW2C)So0;)-J`Hh7$RW@_BH-l$9(8Ej|Nf;^L?9GmxZFR@pAM% z5daNVgh7GLK+q*|&<3zgi5fs1=AfZ@OpyMzmttf<~!Au1>bOB_OV=))1E>2G`A zDSy_IPYc03er8|;oF>TE1vNp_?8;84r2{XeMQXzH7w`9GZ)Mr9U0QrpytpwyDxbu3 z#+MHFcnAV2pNzwk<-OW3n91!4zV9YkEiFhF)Li+FdbmW?V}%LnKi4Wz3&Bwkcys>4 z_UppumNm%stTty(V$}Q_%K=1agsedN++s|)mXVh<>^I%UbMDQFhbVNe^pcf=>s;6n z5#Q#EYC$zBw!AcTSsaUlHNzMmbFAH4PhCHA`bysS>=;Uy{e`>z@)PGLNoHw_@8Rf~ z-Hc~N!l(@tXPBkqU1y(E$?TB73KZ}j*1Em^#c!f?2<}3(=jBU#-r4Y*I#tC!^Nt+)@uKKkq{HBxn};$rEysmKX6*q2}gHyrq(5++DN- zA!A6TzYqImG6do;Zl5N46zYx$>$R%a`?C``mw}!)n<-h{_2YR9lH{IT<)97sPZL^g zfpiIT<`W1?lbyvEpZ3zpOO9WhY>!B8)_zxnJvL;$HZ{9t3~wg-?)YX4!ls6MA{Ks0lGIp7%i3;;iB|6@_jn7I^M6z4H{W zq%5ucGC%d!B7tcp+9+VU)qPwW4hPTE1a14Y@x`>=#E^bT;FT@x?r$Ew zT&TojQOrt|D%^4+OM5+;e~*sOFnOA%b(J+UKM#g3)i+eOz&nL+g`2DLZzpWF%gjoK zF66ISJ`J&M)T0XgD$o*NHs5e_!vkjQ(YF#HeG2y7-z0I$4mgKh*t6t#qTi05Pb@9g zR)2j6gqw=2p+Cw8t*yLpa8<&S;0igj56?U+?s+0bTFvt-&%wWis69)D=YRl%n*R^F zX20)I0#+uH)&yM2-Jon@<}lYHQ_tJP?D(zC<71h%#hTCP1+VP%Bt`Vz(&V7^p4dsW zrQ7=#lDL9Kv#EX0(KH)oq|^IH0Ym4KlWycs z8*gevSBw=LsZ8M8!ZulCSI;!u+7(Fih!0Pa8p+c_=V&-FyJbCqO9nHd>k>DPGHWL4 zp7UN$gc=iAqb%N71Cq}U^%=3fh_;YyG@QR+DO~ueM-NOgJvsg8th(J@&BbS^E#ccX zpj1II5_EttC`Ma4^!=(=fG+#tXou7^_j;4{Dn7LzH14HM&7$*x!TuG=eIO$B4JRY~ zbsH>#I&I3G6pg@4q z(^iWQcbu9#wTDAne#vy4b%ke5U`tht5_=UzDI?AE-dvzU)^X5K!er?QG5`O6T!2Fn z7=l1d!Owr|xSwIf-~TV~ODGEB|H|$1pOv4zFH2a4V-J)V7v{y9doj*Lr6*32C;i`F zAIBL-Xlk>6oGJZl*q?JdZow7r5|?IYV#540A_-8g?(_XSH;cTsfNJSE0Jxu3l^(E{ zzPZLQ)^RNf+OPgwiUG%rJoL+w3|%-{05=blO>c9u2&89~j2|n36Im zD5TI<%ja$G1?rNHo|7%KF~ith4IZvlDjb2o&lVp%UL;Y-SIl1+!FlcK8u}F{b|6k} z>KntL)B1Dn_$BL_G53X2yY&g=M+*9vXp027y{ zYu-a$)XJy**-E0vf0=|fkoNe>ApKq@3QtV6@ZpEE0k%LyeC z$e^L)PVOYEb%sd;Lc0J-%QXzdq_I{RSgwxaU`f6XmR>ork?L>fm6c)2Kal9?T+VRF zQ8@LHkdb-3n(JrmH0qI8+mN%xkxkp^GxroEPiaap{%(qCy51CZV6%x7=#_pZ7d#ef zJUhWfLq{1&LB=6N61)~_T&t#=EGPGgJ6k%D@I_l{objLP5S!-E`yPams5=hsFf=rR zE*3V*_;T?ExA?A&tn6l`3h`X0E%)rnQ|;Cp*k$dJ z42^z;j)yB_D^PY8=}|sc7Z`lWSaCB7X>c+)T}fR;1Sj$wo7wR|0_yf`?>zMXdJGBs090oZEvdb*4WYWm(YLS0%{HBL$APT6+wIDMb{R>vp#vFCRHy2 ze)^baNZmr^myY*eQ8Mb~&<*N&sXV!#5r20@Sv#xsiUhPYSDeRm(h3aA#Jw~vl+=k} z)6y|r{}tlCzVIrsOuuiNL(d%~-K7BS&^;B9(LBG0r`0NW)Idd)1|#;sOi^b~J4Y|Y zeh)Ep{Kt1thY{BRwUeB_*-yIPON!Zw5>-BFL`^^B2CbQ^@|PH(O^Z#~C2ZUM%pZ6$ zn(0HENc+-Zu6r*2NR>4zd`uB9k>ejL?E47UjVEMGJXk!?p>27t4A4vIzwG&NM;X6N0avS&uv)7} zIr7a9fpj_aj%G%^`w@PVerDrI3uM0S@AmvRbS>{DFZZ1X0-~t4A&B@1=lLljcS^E^ zl5jskC;Dx&Sp9KBU+%x9kFZZ7VM+vmcR>{NOFH0NX-yVkCnG!UiG*h zOcg@3fO&!ddngmckY{CO3dP>epwCi+h~$)eR0HFR(jNo&$}@gE{R}|OUKYF~jkfn9 zXKj<;8QfjoSv>P8d3lwYyxBiO)w93$5+z+Ci+V@i}?;d;+ z5fRx@o6bL4YrpSR39G~Sg+1mD-o93O(#R7fA8ggb+%2%i=@+LB%$_&ApY3%O-6%`U zG;c<``gv3OQ+CR8qe{fRR>nOi>l7#J_^q>tU#1-%nu7YvK=yKfykullKA!UOv~=RB zekktAJ`4TMj!wn8AEdR}-~MTHJ19unL zL1nAas<@1VVT_zKH~273tyqjjFpj9CU_|*o(;MfH33~VHMPdHbRr@FK8FD}b8E93p zbEBO%?WY-|9di+m?G~XCCpZM}3*mNU)WT^FTnhnHgl{Hm2@V9%j;j*;`?gm5&avXZ zc%uoHdD{t3=C)lY75(5t_qyH<@5JT({GNYX=NonQTj_jS%{hcQ9G`6@8D*0s5j%wa z;9WpF9b3e_oW+w__ZQJ0mX@;TJiyPpSI!3yWg&ziSa*R-(wdzJ=rVOA{>t^wXZ(bZ zRr&e6oEy}45i&h}Qp-fgj2AmL1oU2lwlbl1lCv;}GU&parIY;Ssh;mgA?98de%4lB zI=G9Xb&e_%o`cn3%dt=6`_U9wyx6K=00)VNfmnu_$fKROaZltlD85KAFv`h+_`Q<_ zePy_v6G(ouc$f@cwu{P|Be^ehBAe74#3gN<9^FC$Ny;n-te-msQZr`VCN2+b1_F&AZ#sY#${x=7~A5 z;-aw!46GIZ#qBrXBUHb~kJm$n*G|Ni7L`jGMOvC*;XFkOqzPYTho~n5p<}WGm9i3# z!LJeCf742T_f=TEBu}B=oVIqxQkKhgGs!tlTZryq;(yzu-oPn#reKdCR4GH`G|Zo0 zjhuj|Z0Q`)Ps+Yj>_$fCaP29oZJw<28l-n#s6?I?N&3^|c9epF4LGmVTM1T5M?xfK zC3jcT>&|5t!H5@=ENC@rXu3G#d9YvDKjw=p$F@|`wgOIKM@s%UnJ6mUc+!w))!ykI zY-13S?Q+Woi4|0r#_w;={e?JG`+d7wf4dl^HLVnm?;*!+ykAZFgDWg~0vQvv1ivNN}`Bu1!3<=FIgW!FoA z{ioh^0iQheV^e)>WtTUR%LaElz(6)!dCK8+n31za*^ z(8X*=0JqBFs(o?ymul1?@px~bOjgd;Fi z|5Vz1{Lxnz;=%@f7Hg*Al@EJe=)A@%ouI16dI1pT?oZc-$l*t`h2t3#FM&Cyz)*f7 zm$_Z1@w;qx2!3+Vvf5GzPraK`tMTv&J4C!ZYzc(=9;fu~=jAiNJi66cd|em$9oT^h zWj1k_k{44+q5SsYKv^mmbr$U7uv$HT7wk3MfnTb?fgzLE1xn_8A{LM7{#)0Dafk3A zMP}!T;77(@!b#(v2=h^5$Ugrd7!=$(QE$jo&l5IOCa;@@kUFK%RY>k^PfORH14}@? z;_?Ac+)E>JIar+Nre7{UOO!O-FsOd^x?KAeRdTOPc4JqhJ)tpJ@RWVHVlW35fO-iP zn{_GOmrgeXeMVcoHdmI$QCBLQ;3h*>R%_iy6n@k+Z!TWh*Md_Ww0*-RLFRbI1h$2> z^Yy>7j{E=ORtv61Af-TmzspB&_=to=Sg-s}PWRag$_nr{F#rt6KsqT-@8WDfuGu&_ z+h5KZ+IS2qcazZL*mw~yvE&hApfIE1W2q3ceWfzOk3{vrKMj*tN}kTq{6JjDU~DYQ zAgEb4RLd=9_F62KStZ3T$u3~|ln&B4KJ)24h>nJz<g-b5+7wUr2W74;v&j|F(Uy^cam;{BTkHPWB5~Z;bEnF@l`PHGIuecgZ zdM`SP`@8N=;xkiLTVH)+t$yV{d_+Y$(Urnaji_OhzZCw0d?|%gQh$x5hx4jM*lsQe zt4pdoT7(+9@zmxqAbH>OT@3kXv)HwA+h(DSrtzA}2aiX%VKEp6@1_3*1-&tPi`r|& zD~g$bs{Prr1h)-;dmEQdw7a_}T#0>Z6K-~YP-q(tMbOy2OOui}vG}diR5TWo~`WR=E>_i+N#@4rv-~jr)~JZsS>+7+gMsNk$obT1{+5!u$Ecc zX1z*QeMK@}zhT!nO)5v%_XJU-TKp8E{+bS{-jx0Qx>kvTv>w!oM5A?+U+8s> zRX8&HK7Rre5^$$Xi)-O=S^H`cTi)R?P=A{KlFLD@9}XJZtBUDG)7}t0I)XrzbSoV` zh2j+#SiIr&w90%?j3R?9dDP*&ariKui;`CCK-pHbJGiALrd?LC1)R`%E$>U7~@8nV21r{6howdM4*|9L_GmJk<`2G#FSPk?T8S=CPl!Z*LT^d)+Wxy;n~aY@E@psw57>`SFZm?=`SL zFpgrgb3eNt*!jK>Wtna*vaQ{0&x__v9TN@D$fhXF3D)Xu!YF&~Yo)l^7?C1ExnE4* zV`;L{zD$y@;(T8wqnzCFfq0T3?43D?-&Kgam=D{5I*~qS-F|`@7Zn4uo3p$?b<8U0 zs!>kxT>3L(SkxY)XH$MOwI9s3g)N;|T#_afR%;md&dp8zkAJ}+=({BGgMn(38skq! z*NlifH@+w5lx32!_H{wE;MyADWB`fp|5LNPP?9>74vYP8xjl7sW5b4fd!8#Keml}u zhaFw#L*9we)!oeiIGs9Y_wHrJ43jjlK{lA-kH|?;_ApxlZ=;7PX3mQI?OCErS zz6}@Dul(+L>&R~K{CMzW&&((==`b9Afm1+)Kay9*vH0Rj=vz=m#_s*O*>{Qd!j9cP z;BWIL@WE6&qbSBV95~kHRO{NzU6r9+GEdJzPg_MIF?ijTZEtKrVv9qwDuckDN|f>Y zysM(}WnZycZf>2wBX1SWawwc$%_#?9wrF>22rf4z;1kp%HsltUXZ|EHDZYvspipBL zCH^`^_0@x(wpiwe9LgWB6avY>OJRHS?T;01kxo@&@nSwg=3Vd%5aL1gSPKcxx&pqs z%9-Tus-ckv+MwGyV+h}$fku9ia(|zg3C>|S<&pUP4v)}pH}FtC+0Nf>tb944qYaQ@ zV(#CRZct6T!LlL0fp1O=mbBQ@Ax1hbIKhx!2slz$r%MNOSTiaW&5RrJvqQH%0!gsY zryZ<{Vi*dUHe_F{z(!QMf)_chcFzXR5K>HU$;eITdL=}J3_@3YSD_$N0GH1t!_hOK z4dGeh`q8z=_{@v;H5;6 zTpQ5b)XsYnP?|?B#3~K`Fbp$Cb%k#TfYxVhVbFu^6<7pG+g@Mg4grEL?wG!825fyTeO@5hBs5j+G}q{53H@r)qz&^4G7I zO$JXFKQ=vBe4VLus*BF(6}Rx4S6YrCKcK$Ju#Ljy&2osYPu$~^#Fb6ccc!e=@#^^I z$Ki+=;hBQ`sBM1HRD7QtsCGMTa4*$6L`5*HPT8Zz&;rb4}+`Fl79>V8-H2k-;*tDa|V>{~2&Z$V}*Z6t!?#F|S zr3V%H{j`r=0+VC;JS*H8*wHs6MN;S3BnBGGIK7H0pXz`=&ix5sOIi^DoWC`?lx-yJ ze(UO?8+n_Ww|)8;t%{CLK$9mf*1+nMly+Cz@^rp$1>F| zw@>LV+*Qvuu|+}fMK80ez5W%T| znq)%6sTk;{P%OErmo1ABB-G#)OcEhE=u7^#uY;j6{avg~>lb%W*dfd_Y@1#+-13dN zA$b-!@FUG!i!y&w-xNv|+vU#*kYvqHcMykbkh8~;rM_853aNp4f?*8`2bHXTDI{Fc z>Uo`Ycg{dmq&M0tP6}PF-Lp0Ogc$pqH|(5)8=#cO=CAL!B_;Q-6^l#j*8QE|s&Q-S zVl?O9@m=kvq5yMF*<4!FV|4o73Vf@@60&{2TE4F7=2IQAXsiWzWw|wsg-vMJFC4e9 zL{3j5vmd7k`^j1E)Jx#UQXBQ7z&YJza;Hjrm%8(#u85r&P-}!Z#oS$(`G+jt!Ow4$ z7$azcgLd75vgBM2If}s+X={Im5+P^%#ZH^_Bzm9V7+x-_!jae8Dnh}{-)G)2Y^EB|P1K*e~!nxt;S`)3T2uR-uzdVR~N4n3mT0=~P z*?piTy7B_UEG#Lc(I8#9z5Th9@!^(r79P>Ep_q;n^mL~IkVR(7o|t{}qjygQcJfhYheY=J6w@WSH`Ww2XEa|H4z~}TTHbs7$gI+A{c<$*nev9r ze8HDR1Lr}-PNu2lcHv}>dvC5)lg4PZWvoQlryT;1;sBo<$_Nno`I)`%zn{0r{dMQU zNmd)ONR7f6ZCTb_#{7-nLeSd%Vvwy9Rq6pU6^Ute}AL{VB{6CyrR|0=xzFGm(;|l+CP{bVV$H@;9uz#T^rYN zJ`Mb)vuJ;x6$JPtJ9FL0w)ZT8Kcs$ZHK3tJ%+v@9+#!D1Y-x61*SiA#w~J(54qOG?9sFsEu1YJNuIF)94qn zL!%-F&3c~#(vB+Xnd;%1kjyUF-o+-1X=KLtuJcx_e~bfi;Z1AlBqNrKDv&d#MZ;08 z(}ZD|AyO*Ykm6|HA{k-_?w5upe{d5k&^%yQj{y~qCHXSQrP7~_3I?ZSP*Tv)(h@Rq zoQ>0IulJ)Us7tKDDJ;bCH62h(Yp z8jFXKJc9(aSaJ%Q^NR}atSG*cypQ$?3sv{|qP~Q_tkwI9#$e|g3a;^kTIm+Iq5~Bc z8fRG^e>aXqA~XNxJxM~5l-|cu8R(y=H_{oL@3eJzT-64Y&dw>H4wMjVcsNHTRev!* zP|bKN71rSn;970t%kMA7evrNzcN^*1KCI-&?z+$;F5(R={HDY;@H$)tJC9v}$tgUX zF^2o+NSncCk%IV1Y3ajRkw`nZ4z>^6eaW#)17x*!3(;7q3nJGTAnq@=j!E(fLt;=P z^rkL2Ix`ms{B|QA3 zMD@|#nZKud&C2GoW=H>!D{LUA<)fsT-q^>cKj>6PFABWl@l`ICAuFt>i_ZQO1Cgag z1&IEpZK*#)lfN%aBKBNklnjTfUJN&lbs_8oI}SE68fmkUH{{f=){{^5QbHD90Hs+(&@)i z)cQRbq_51u0ViTtln7eexEOr(Q;#F6*c4Zh0^Fnv6==dAvdQv(QX^!HG`lnn&?tDa zkCb6l1q!;`@5e9fB?_v|lfN;1_m&OKC^U}gr4}_WwK9tnpS15wFK5gG>pTpZH_erR z4d%xDxE~SULq4*ct-u(lp-!S))g=`Lb!{oK3PRdPX-)ACcDw@01wWtv6)=MAK6a&P z52PUv8xb91d!X~%I+H4|9VOTh1%_=1M(ok5Dc|yC+7PtCF^x7rJ0kk$QhAMUwh1CB z5DGdgv#rzv(j-IZXgFb(Xf(NC=I6-*>D8@|YsOAE*4VIpI@|;zyL^!ED5wfx`xnDi NR#1OeC2#The*l3Sj(`9F literal 3065 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 diff --git a/tpl/desktop/advertise.html b/tpl/desktop/advertise.html index 945dd62..e8ae9c8 100644 --- a/tpl/desktop/advertise.html +++ b/tpl/desktop/advertise.html @@ -3,7 +3,7 @@ {% include 'common/top.html' %}
-