pax_global_header00006660000000000000000000000064131074101320014502gustar00rootroot0000000000000052 comment=2b325bb78ca3ccd14c3fc88d552dd38620791c24 powerline-taskwarrior-0.5.2/000077500000000000000000000000001310741013200160605ustar00rootroot00000000000000powerline-taskwarrior-0.5.2/.gitignore000066400000000000000000000000511310741013200200440ustar00rootroot00000000000000*~ *.egg-info *.pyc build/* dist/* .idea powerline-taskwarrior-0.5.2/.travis.yml000066400000000000000000000020341310741013200201700ustar00rootroot00000000000000sudo: required language: python services: - docker before_install: - docker build -t taskwarrior test install: true script: - "docker run -v `pwd`:/opt/powerline-taskwarrior:ro taskwarrior" deploy: provider: pypi user: zebradil password: secure: u3hV2abN6X2yX1XcgBPW3cE2iDy6XS/tH+zteZ3UdUCqPKYUHJ5HMpuPgrcfPQBWdB1AOjhyc+Zk7ADdqD1tj5Z/uqAuDZCDT2cCr2I+yDQlC9L2k5luEAh2/tvHh62vLN8ZbEA9ayt6s/4x0f/zvdSsaojAu78Qao3LMKgRxr3iydcBoSWzROici3wO5DlxJ1uOjKscIy5H3UnyTshk+gH7AjfQ1nm7MjMEHyzJGd4J2yZTRo/CERRLmJt8qRbIsp2heY75TyPX+ljPuIptxEe8k7CMZGltGiR2L/hVq9j6nGXtr4kq0Tbz6+uF4jwxXNTjjWxZpfuv8J+xi/qg6Sv2/gfO4OSsGLcyzl4KHg1m9XQFni0Go7GHf+Q/7eUwoMN0BxG5g+xUdXa6KINO0Tefm5DX6NDOxqV6f4L1l2dEPl8B/qV+xLYiSeYwpdyVd+0kRwoq6IOUBRX9F9RBLgHqH7h9GxeJqhU/0O6fg8baMWWR195maH9Q3MVDiqo9Xu02LwmvdvydA0ijoItNQ27873SKPH2Gb28QAl155wHBnadaVwkzb7EmHPYY0T4ngTqXbpK9p0hjPVWnEEZq2YzEkmPwqdbgdqBM8OWY11By2PGT23sRrCDlhqDfwud4T6G8b3NdC4H4IbTzLJ6byUorwJXmfyXFjBVOhVjfwVY= on: tags: true distributions: sdist bdist_wheel repo: Zebradil/powerline-taskwarrior powerline-taskwarrior-0.5.2/LICENSE000066400000000000000000000020731310741013200170670ustar00rootroot00000000000000The MIT License (MIT) Copyright (c) 2016 German Lashevich Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. powerline-taskwarrior-0.5.2/README.md000066400000000000000000000062051310741013200173420ustar00rootroot00000000000000Powerline Taskwarrior =================== [![Build Status](https://travis-ci.org/Zebradil/powerline-taskwarrior.svg?branch=master)](https://travis-ci.org/Zebradil/powerline-taskwarrior) [![license](https://img.shields.io/github/license/kafene/netscape-bookmark-parser.svg?style=flat-square)](https://opensource.org/licenses/MIT) The set of the [Powerline][1] segments for showing information from the [Taskwarrior][2] task manager. It will show current context and the most urgent active task. ![screenshot][4] Requirements ------------ The Taskwarrior segments require [task][2] of version 2.4.2 or higher. Installation ------------ Installing the Taskwarrior segments can be done with pip: ```txt pip install powerline-taskwarrior ``` On Debian (testing or unstable), installation can be performed with apt: ```txt apt install python-powerline-taskwarrior ``` Then you can activate the Taskwarrior segments by adding it to your segment configuration, for example in `~/.config/powerline/themes/shell/default.json`: segment displays current context name ```json { "function": "powerline_taskwarrior.context", "priority": 70 } ``` segment displays the most urgent active task ```json { "function": "powerline_taskwarrior.active_task", "priority": 70 } ``` segment displays the most urgent next task ```json { "function": "powerline_taskwarrior.next_task", "priority": 70 } ``` obsolete segment displays both of listed above ```json { "function": "powerline_taskwarrior.taskwarrior", "priority": 70 } ``` Configuration ------------- If you have custom name for `task`, you should specify it in segment configuration. `powerline_taskwarrior.active_task` and `powerline_taskwarrior.next_task` segments accept `description_length` parameter. It's maximum length of description. If the description is longer, it is truncated by words. `powerline_taskwarrior.next_task` segment accepts `ignore_active` parameter. If it set to `true` segment will be shown always, regardless of existence active task. ```json { "function": "powerline_taskwarrior.next_task", "priority": 70, "args": { "task": "taskwarrior", "description_length": 40 } } ``` You can add you custom color set by adding: ```json { "taskwarrior:context": "information:regular", "taskwarrior:active_id": { "bg": "mediumgreen", "fg": "black", "attrs": [] }, "taskwarrior:active_desc": { "bg": "green", "fg": "black", "attrs": [] }, "taskwarrior:next_id": { "bg": "brightyellow", "fg": "black", "attrs": [] }, "taskwarrior:next_desc": { "bg": "yellow", "fg": "black", "attrs": [] } } ``` to your colorschemes (`.config/powerline/colorschemes/default.json`). See [powerline colorschemes docs][6]. License ------- Licensed under [the MIT License][5]. By [German Lashevich][3]. [1]: https://powerline.readthedocs.org/en/master/ [2]: http://taskwarrior.org/ [3]: https://github.com/zebradil [4]: https://github.com/zebradil/powerline-taskwarrior/blob/master/screenshot.png [5]: https://github.com/zebradil/powerline-taskwarrior/blob/master/LICENSE [6]: http://powerline.readthedocs.io/en/master/configuration/reference.html#colorschemes powerline-taskwarrior-0.5.2/build_howto.md000066400000000000000000000012071310741013200207210ustar00rootroot000000000000001. Build package: python3 setup.py sdist 2. Uninstall old version: pip3 uninstall -y powerline-taskwarrior 3. Install new version (adjust version first): pip3 install dist/powerline-taskwarrior-0.4.tar.gz --upgrade 4. Check how it works: powerline shell right -w 60 5. Upload in test repo, then in prod repo: python setup.py sdist upload -r pypitest python setup.py sdist upload -r pypi Alias for deployment actions: alias rebuild='( read version; python3 setup.py sdist && pip3 uninstall -y powerline-taskwarrior && pip3 install dist/powerline-taskwarrior-$version.tar.gz --upgrade && powerline shell right -w 60 ) <<< ' powerline-taskwarrior-0.5.2/powerline_taskwarrior/000077500000000000000000000000001310741013200225145ustar00rootroot00000000000000powerline-taskwarrior-0.5.2/powerline_taskwarrior/__init__.py000066400000000000000000000002021310741013200246170ustar00rootroot00000000000000from .segments import active_task from .segments import next_task from .segments import context from .segments import taskwarrior powerline-taskwarrior-0.5.2/powerline_taskwarrior/segments.py000066400000000000000000000137551310741013200247260ustar00rootroot00000000000000# vim:fileencoding=utf-8:noet import string from subprocess import PIPE, Popen from powerline.segments import Segment, with_docstring from powerline.theme import requires_segment_info @requires_segment_info class TaskwarriorBaseSegment(Segment): pl = None task_alias = 'task' def execute(self, command): self.pl.debug('Executing command: %s' % ' '.join(command)) proc = Popen(command, stdout=PIPE, stderr=PIPE) out, err = [item.decode('utf-8') for item in proc.communicate()] if out: self.pl.debug('Command output: %s' % out.strip(string.whitespace)) if err: self.pl.debug('Command errors: %s' % err.strip(string.whitespace)) return out.splitlines(), err.splitlines() def build_segments(self): self.pl.debug('Nothing to do') return [] def __call__(self, pl, segment_info, task_alias='task'): self.pl = pl self.task_alias = task_alias pl.debug('Running Taskwarrior: ' + task_alias) if not task_alias: return return self.build_segments() class ContextSegment(TaskwarriorBaseSegment): def build_segments(self): self.pl.debug('Build Context segment') context_name, err = self.execute([self.task_alias, '_get', 'rc.context']) if not err and context_name: context_name = context_name.pop(0) if context_name: return [{ 'contents': context_name, 'highlight_groups': ['taskwarrior:context'], }] return [] class ActiveTaskSegment(TaskwarriorBaseSegment): description = None task_id = None def __call__(self, pl, segment_info, task_alias='task', description_length=40, state="active"): self.pl = pl self.task_alias = task_alias self.state = state pl.debug('Running Taskwarrior: ' + task_alias) if not task_alias: return return self.build_segments(description_length) def build_segments(self, description_length=0): self.pl.debug('Build ActiveTask segment') task = self.get_task() if task: self.task_id, self.description = task return [{ 'name': 'active_task_id', 'contents': self.task_id, 'highlight_groups': [ 'taskwarrior:{state}_id'.format(state=self.state) ], }, { 'name': 'active_task_description', 'contents': self.cut_description(self.description, description_length), 'highlight_groups': [ 'taskwarrior:{state}_desc'.format(state=self.state) ], }] else: return [] def truncate(self, pl, amount, segment, description_length=0, **kwargs): if segment['name'] == 'active_task_id': return segment['contents'] length = segment['_len'] - amount if description_length and description_length < length: length = description_length return self.cut_description(self.description, length) @staticmethod def cut_description(description, length): if length and len(description) > length: parts = [] for part in description.split(): if len(' '.join(parts + [part])) < length - 1: parts.append(part) else: return ' '.join(parts) + '…' else: return description def get_task(self): id_and_description, err = self.execute(self.get_command_parts()) if not err and id_and_description: return id_and_description.pop(0).split(' ', 1) def get_command_parts(self): return [ self.task_alias, 'rc.verbose:', 'rc.report.next.columns:id,description', 'rc.report.next.labels:1,2', 'limit:1', '+ACTIVE', 'next' ] class NextTaskSegment(ActiveTaskSegment): def __call__(self, pl, segment_info, task_alias='task', description_length=40, ignore_active=False): self.pl = pl self.task_alias = task_alias if ignore_active or not self.exists_active_task(): return super().__call__(pl, segment_info, task_alias, description_length, state="next") else: return [] def exists_active_task(self): out, err = self.execute(super().get_command_parts()) return bool(not err and out) def get_command_parts(self): return [ self.task_alias, 'rc.verbose:', 'rc.report.next.columns:id,description', 'rc.report.next.labels:1,2', 'limit:1', 'next' ] class TaskwarriorSegment(TaskwarriorBaseSegment): def build_segments(self): self.pl.debug('Build ActiveTask + Context segment') return ActiveTaskSegment()(self.pl, self.task_alias) + ContextSegment()(self.pl, self.task_alias) taskwarrior = with_docstring( TaskwarriorSegment(), '''Return information from Taskwarrior task manager. It will show current context and active task (first by urgency order). Highlight groups used: ``taskwarrior:active_id``, ``taskwarrior:active_desc``, ``taskwarrior:context`` ''') context = with_docstring( ContextSegment(), '''Return information from Taskwarrior task manager. It will show current context. Highlight groups used: ``information:regular`` ''') active_task = with_docstring( ActiveTaskSegment(), '''Return information from Taskwarrior task manager. It will show active task (first by urgency order). Highlight groups used: ``taskwarrior:active_id``, ``taskwarrior:active_desc`` ''') next_task = with_docstring( NextTaskSegment(), '''Return information from Taskwarrior task manager. It will show next task (first by urgency order). Highlight groups used: ``taskwarrior:next_id``, ``taskwarrior:next_desc`` ''') powerline-taskwarrior-0.5.2/screenshot.png000066400000000000000000001433421310741013200207520ustar00rootroot00000000000000PNG  IHDRPDn pHYs%%IR$ ,iCCPPhotoshop ICC profilexڭWgT.eE@қ .HXXvXʲ,؍! .hTĨ [H l`{933߹{{gΜW,.$5"TI䰺@@+'$: _PR^@h#X",JR$=#`*͕ccr@W 0%6+pxR@] E-xy\>`TQQ1`[cy/0a;o+* հΓD%]1qT@ ΓE(L >7,1@ R؍+|2N(NVlIq"?Y&*UY'›ICaD4Mr 63&M5dtƨwH#mL;'0f|Ѹ$DlIii*=f:ffBUf'q9Ӝ>sc(sVv [,YXXXl2o5Ӫ궵u666i64<5-kfhWbWkw՞ic_`ѾÁttsqH:z9 7:vb%U;)ة̩遳s|F磭Fg^>mgOB.w\]ǹwmv}sq>ǽcMO{z~x}G'gY_oߣx90/?'~Oڎ>?W' +`K@Wy 76ae?hGГ`=C\B$!Cކ FEUkaQ9#%sgmMΞ:r΂9s#2`o]毘۴o,wWWH*n|BE-\ɯ<_RU]q1o\X%KnZ\&Zv}y]+VxrʆUU^\G5*kdkƮmZgnٺ_ ٷxâ o77^ifU?ln5rkCMm6液mnoǺF;v|)ٵ+q:ﺺƻ֓=tS^[ڏ1Z{І:+ }y]MMGimk>/;9wlq (?"n={Q;O]==t3gT[pۉgsy.4\x7{7\9']j u^O~]77*v;s2VӼW}~˫؃&=勵^Xq'uOݞ? Vvž/2|o |gn{m><q'O͟c>,s%\^2@E]A;h/`g2m6sv 9w7y.`|eO-DS,K6l? cHRMmusdph0>0IDATxwXTW`hC*` K$1MtS\]ch͚ivnb\KBb] 6T)W; L4JKH-((ɓ'B:777 :f9w@8p=~3\?~<ɓ9rmz),[ .]yIXM""=vr,]9=zy"Vl{)3~87BNj#899!22fiӦoaoL5qFDDDDDrruuEpp0*++\'0vX{8~xm۶accgϢgϞfQCiY>{^zv2Lrf$9 3{+>l2ab\\8{9?I=/zbÿVR:u aaappphq"##}ODD{f3"""""AAA .h}PUUkmSRDTTr9݋Dv@*ih>KS&!44}vOATkkk~ޛ6  v0~ V=߫.hPQQo>O@eeFiBfrԩSw^lmm1tP=<<ХKggg|...f10R3^666i?zPs3E9-!wZ95EFر#۵CQQ^AA}N\c޼yhӦ _={… prr¸q >H&aժUA~~>^u͇ۥK:tg.^B`-[`ѢE֭^/:Zu|'#G~~~;w.+̝;7oF{#Gā0j(8GSNXb{@M'N>cӒ i}ϪU;ߏrDDD`rrr R7n?sc݃ڶm ///#''IIIPT=$ ݑgŐ 9^+N DQr+#jnma*P=Cbb"uood2 8'N@JJx@~sNaرc޽tu???Y?~Z+_޽G 2dH>رcqI?dsJ$|7С.]7|SS.T Ϝ9CŅ 4M bڴiXr%Xi׮&Oӧcƍ::u*>?_}iH̘1)))AR(6m>#|8tִ㭷ҥKO!"M4c9r$Μ99F+DGGcӧO qC_.֭[kXStt4obTuBc||f@iƍXjUCi3w9h?{ Ɛ!C0a„:GɚD"A2cUH]T#k)}s>HE?^ Ѿ}{ƬY0k,7n4`Ĉ߿:$}|ZSHMMw}@._\kxii)vYգe2V^cxgMĉB[[@Py.~hNg@^nu [+k]rs=WWWM=z4׿b̙ӟݻKϞ=-OCݻ@Cii)zYf5 !Jf3qqq?~mzos  x#FZUVVGzAAA(--Ռ }ӧ@/^Ĝ9s`eeUVaΜ9ӧΜ9 6P.]guΘ~Z~$ߺu/BynjBÇ5BȠbw5xdbii) QfSo -9wN8~~>v܉' F^l(Q[g`9~8Y}1/ui!2 ;vͱq-Jbp`S&!)) %%%T*E۶mѵkWVVVBRR8`ST8r ;uꄁppp N=8DQQ>C,Xfk… B|g=z4N<TVV|#{ti߾= 99Y6jkh׮۶mӹzj}\v-"""3fSLiR}ɓ'1rHM0|ۯ5ŷtt#Fh`Տs#"""""+J3絴T*EUU"#%3jh9-~~QʣR`Y4ZUUs6e?*HGpVi퀌"\<"Wh˵q-УGغuV]v ׮]{J:tŠ+ciγt>t˗x71zhL4 &MѣG{ܹszFGGM6h=l*~~~zQN][$/''mŪP(ЫW:G7ִtRDEEU?h?8C/ht][K,I4ԀzDDDDDD$Ôj| B6ꅑL%i3JJJR f.6\uQTnŠb5^u{v&#=2գ?2,w\r˨i}TVV6J𴼼<–-[cرc9r$|}}ѻwo<䓘NNN:?WwQQE[<m󇵵 gNfYl5osWZZQPt刎ɓ'W{E!,, ۶m5>bX`~xzzbÆ &_|XwC5Ozd͛7# oy ő#GoB.c͚50IfP?o|EEEزe R~'""""ctUұ<) ׹%ZNKwU@ppUfS?:iNǝ;wec]${FjG+>C&`܄_\Hmmmѻw&!..N~6P=Mߨn5uP1;;[ jbѢEm+qYcժU&`w㨨@^zѣGnݺLr4FW_}xװa×_~irZ)ORr\) ͧ^LjG.]di-+WPUU h^Fdd$'@ttޑ.ƖTgr&&&Z+"??UVVΝ;Mr^Xρx}fO̘ի[ybW/ 5GxxG"6þ}62Z=Æ s[B:~~~ u͚5Koށ߿A`YYbbb'|cٲe@֭f͚ZA( iG \RK.5 zԩ߿?_7ZT*̞=0w\MY-j탏_wZZ~:phH9-?:tzmhժk|.]W_}aޱQطo z YYY(--E֭acct YPP))R4hN8cǎ!??ݻwGhhsMoHm۰n:ؼy3\k׮A. ;v4#R)V^ WWWZ ^ömGĉt4c{.pGѣT*>OOmڵ۷/LJlڴwlDDDDDh˗/ D"Aii)oш݃JL&܉T9/]QFi"u~mǵԶmۆ?ZΝ;.TEDDDDDd ݻ4P(4tZlr崲*--5kp֔[=t[{{+RJ%"= #442Ev:8|G*+ @"())ѻRD@@2224 ՇB 5%pwwǍ7¹7J%]fvlHrB" 33"%CiiT*EӠ w1t &LݻyFDDDDDTz7(DuBn J[Mz25^zaϞ=DHHT*+U@*,,ݻwY&Һukt8}4$JVX)5:P QЦMtر_RRDzڋΝ;㥗^B޽oCDDDDDTj|"L$00ڵk$64}vi_TT)SCDDDDDTjAքbӸ~:m6ܾ}/_ƪU!""""&A e*,=z(8qQ񁿿?qMV5Ku΁joo.]999HOOf >>>ܽ{WvpuuEyy9@ffQj߾=N:JVZ=LNNN(**B^^m R}3gbΜ9ظq#O΃""""fI#ǏǙ3gpm޽k֭֬[qi:u 'Nl?+EBB[onHHHo>>ٳ'ڷoQDM1cƠ[nM-]NAtX볹G<~-c<-q]aG~0j()SjO {~D"AM@.]yGGGW)iK?f\RԬucfqfl_SAT?u̼Rn?cRcϘ4YZgTŒ#""""ҦG=m۶5?c޽HMMEjj*N}:pm#113f̀\5@ڵ,H~fjC/7n %%/_Ɔ XkgϞűcкuktR$$$hMQNcZYY`֬Y8|0RSS:54֭[ÇLL !!aaaZvvvx뭷p)ܹs7n@vv6.]UVaСz6n ǧ%X>-}~ >,6oތ+W ==iiiy&~G,#믿FBB~" {Err2qul߾/Fǎykb1Cg~œS!wCݻ;w?Ǒ7ob֭ 5~w|G@\\RSSi&(Jxyya֭HKK!c$$$?ּիWw-[`ѢE֭^/:>2eJ?!pFO\c޼yhӦ _={… prr¸qz\7,Y>oi`ՈDyy9:sC ;ЧO֧U|())1Ivٳ5/BP`gΜ) .[L]vQ*&?D"k={jM]vXSn?S澮~ԧ˚v׮]Zu%4$EA_ v]sܹSJ|СQҮ];Q133So_3gN111111111JǍ3+fdd ]vչ́DAĩScee% &L0D"9" G:xozk׮bffx144TJ]DAkP.] ۶mMZ&MASRRDWWW^ǚut~4Uܹsu588k/浯ZA5^~WQ^{"خ]f}11111111$///@NNN  xm;#tk8x ǭ ">>^6Osi^xśVZ9sO>8s .\ rL,0E믵^+++o7Iu^xd2ƌBÇ#%%Q`߾}(--E޽1k֬z-aqݒ>n޽77Zs"R5B*b͚53f 0~xt+~,ױwkH}ZZz?a4ƚ5kPZZj5ڵkׯk^+((P=?Zy!Ǐ͛7y=""""j zֆh߾= 99Y6MvmнBjCkNo} dYεk"""QQQ1c 0eʔZ+7G'Oȑ#u7a|7&ow]s@jj*]줡?K.K.1bV6::ZMc***‡~ `֬Y>}:bccvZ\pluK[N0p@Z,ypLC곦B|g=z4N<TVV|/X5>-~-0E}ի94VϿМ?S/[nŢEЧOmnz}DDDDM_T*n"뢾ySȨz5tԫ!ԣG N*++kRiҥzt$1E߻wOE5<==MoݺuXd &M o߾(((Җ/_Ç7ѣ1i$L4 G{gsΙnN8^^^Xb{1@ii)ӑ Je)::mڴ $$b)Ȩw^ǚu!ik)9nL;TVVֶf"l۶ &L?Ei݇_~yGDDDD͍VqȑzeV\uqqѻ=* G@=87o}4ad@UU&NM6ԩSAcvW*:uH1$͛1o< :[FZZQX5=٘0avڅ3fիظqIcƌXf F#)) ر#:tLH yk1K_K'|h`lĉQUUUgguQ">^{5q߾}bZZ(():tH\zᡵL&̙#^|Y}FFuV}>OD"uaҥ ܹsu@trrK177Wy z :T}ZysA=*ښHSLA7DGG ^C۽} EB!.[L}&3gĈ{0YYYW\AFSO=%icǎ_CkS}DAoluӺukqƍbFFl999CA5tjH6m.))I|7DEAD+++̙3EAe˖|bnn%du-~brr1s1qժUc[~-0>Mݻw6_.޹sG+ll(ءCk .A}Y˸q4bccMufbbbbbbbzD"Av "QUUh7J%]VMAP oFIICrB" 33Mͅ.JѡC@;v:u &`MWWW"==oqm ????~u#H[[[ܸqM>-!T* Yl pwwǍ7PVVfױ}=2TK'|h\3K^Z:D-I^gdff"$$*BDDDDDDDDu 8ХR|+V0xJDDDDDDDD"gPK~̸sx饗лwooeQ0J&H gƇ۷#((H"L2W~TH&=_WS}0JfggRfQm۶ېH$|2VZs尲j8KpBuYM@dAVPVV7(#QQQa5_C...EM>r9 JKK!Nvr}ѥ;9F{2Ͼ!//d-OOOѶ 1uT\J;wwm}A=`kk A&DDDDDD&Jѯ_?mdimm WWW8;;CEq!++nS_ΘɱHFHd=vxPz^n)]yR8y$ P(Z CE||]|}}ʌE>S1BL̛7?c*osi?gDDDDDP2 I?[n>|8X_kN:aԨQl[ R<'XM""= >!b׶X%\MB>^fb:uNHۛMo=.޴iF,[1Μ9///\Rsm*K8#""""BDDɃdFP]]]J"..ǎƍ777t]g޶m"::8{Ywrr yf8vك5k֠իWק.r26kfݗFJ=Xl2~$ '7H]ZZSNEv>R4DDDG֌L;#%K`ذa DwyI3"""""/ 2Zbe4FPT y ڦ&R(rݻT [[[|3-- 7nDvvv:ha4:jmmm{F!fݏ6z~OCYw&*^8uݻ"; [[[ :f|tŨ58D"K[ k׮XkwQezi>-'=:0tP42[YY{\EryT64] ao߮^^^___k+((L8;;7r9^z%( ݻW\1y9 gh9뒓>ME&iDmW,o{t!~f݇['%ܺafee%N>=z-ؘlll0x`:t Ѯ];Ġ[n xzz"!!ֶZ) DEEGhh毁8{,,YǏN:/" QUUl>|6mB\\\C*/Āp%L:)alݺ5MmʛKc޽{QQQ(bΜ9߿?:v|?sqʘrѣXaaaݻ7!HTvir} 8=z hE4-cM0>>>7jH$x饗R"330**JsmZsi}VCi*Wo`r -222tol}T*rssQZZjMͿe2Ydu{ {+[j7jt;COJg"$$D ?89i[///ܿɵEQ իT?t!C ""QQQ8qvG*cJµkpmxyyC7nRRR@dXr%y$&&_7| 2D>rSLرdjH4FՋk9;;  Aqq1၁"++$$""""G3"""b;v,ڶm=SQQ\B`m[l+0`aRr4i~G֭[z3ڮ];xzzj)`d#F_chvC ;;JRge[NS_}0 ''dH}D";LO+o/]RS 0sv8wpYؽE볪 ֭[dZ'b#>>Я_?ܹyyy;vCaػw/.]yk֬Axx8駟׻woDDD}ѺbȐ!X&aժU;v,N<ǣ$u?ك{W\+={h7C1گΝ;QXXj>CY~cIDDDDDwww|&L5W,Y|'o5ŋxb~bITbذaZ#糲F՗hsz`֬Yo۶MEqqq'ѳgO9s8qB3SE޽:tB+:u+))+W4kQСCϱA``&gQyTYn6CTO Qo>TfYij?Z;B uu]ʕ+<<wޘ5kV묰Rk֬1cǛC,XfkkQB|g=z4N<TVV|m6t W\/ QbȐ!3|o&FI&aҤI8z({:;hi@_BBBt>a[n8t5ָq{w?p[lLXA]L~~>ѨO=HT5MX3/Rk&ɗ#Fwk׮~~~-2t!Ie2KKK5AE}tBL^DldBVpM4Jf<$2z~5S%P7w[ bիQliyy9-xjee-[ñc0rHwx'1y~1uTt~)пٳÇכ/ҥKP(~z4sDGGV\Y>~)m K9"..d K5Vf|LߴsbhwECEbR]vռd~@^^& DY-GZ?D#GصkE*uT8Nsr*>yGǾ8~8uH''y1)--ިDhh(vrDGGɓZEm۶|cccxb,X <==a.+++c߾}޿>vz1shh4Vz755?|]ox]#mkHnh \xQ3knЩS'5k5ԤՏBFr6 2۷GVVv>ܹ("<0bT886/ *Ue}U$3嶵E޽ܢJRTT8yML@ܟoF49AXhm۶3}t={XjUu6DVV߿u2޼yӬm^zi3qFDDDDDriKKKJ(񁳳smjLMM9..%J^s՜2$$^rUUU Z4'x2K9M-gѵkWa֭M.0sN\0*s ^3fһ*\R&wAL&cCZ#7*+T8k2#<<ܤ#{a߾}:'6u Æ sdիjYf;p@dQ 4,Fr>|$ilX,yѣo߻wO֌茊$)k=ֻwo ]ZXXK.,_NN&[3{y֍(--ž}0l0WWW"==jM\.p-_\L]/h?KgDDDDDDУG.M\\\PZZzH$pss Ao@C+pww㏸~I_4h)..x%BnݴF#$)))8~xLDDDDDDdi]vEpp0+>>> l2T9 UXXw65\֭dUכׯlh""""""\xѣG D"СC5?}Ym1J)((4 6mڠcǎ-vȆ&""""""իDxxx}2lmm!JT*ѧO藐`d,?? lRFZbb"DDDDDDDq-TVVb =bbbЪU+*++/,*5 (**bEHPPZ>}d7= X ur d2lllPQQ[nرc(,,4wJp5""""""""""8 9P ₻w",͛7<FFFn߾ A= "N8Q24?H$ԩ ɐdrZ={Zׯ#77 Q3%>āƍ &mdQqʔ) 3g ˖-k?) .\PZEAĜ}Lbdd8|pm۶ccc#vU=z! ؿ1**Jtww7k9#YYYb@@bxx3ψ ۵ksIg21Y.AJW\atZAcK:`@߾}kEY+**pvH/q&16mڴ|FK\ڏ=裏co˵mèQ jqa̞=/^~!N +++k'ODLL A0Y9|8{,/|P|ǏǬYЦMH$nܸ } -=绍 ֬Y$$$`@@@222ؐ-̄  777ۚ>/57j߾}O?8y$v!88{Fff6mƌnݺ56fO?_|?OPT8pΜ9???5 ?~!??_}8rqm;v ׮]C1tP 8?3{1dee%K_ݻwcbݻ7mۆ~VՐr6/(\RĒ%K0n8@^^۷('XNzįh}A@@T*Ǝ6^ /`P9 _"""j4O?Xb퍎;HEDD467n7Z\ڏ租~BHHfΜuT*qYxzz⭷_s{T*{NNNHLL;|M{Z_~=z4.\Xh~gӦMG}dt9A*++aeen_cԨQPTXp!KR)x,'=[z4wu?`ZL?%""J  |g:GHeffhtbpAlmmaggg?tci kkk4(BX'HR1cQ߯U7aHbZAI/޽{|/ƿo)ܻw7n 4Sw?_uCi~!#)_~5j`ʔ)PUU{jgc~ޚ4LR[Skh;4Yx1<2~prM3|o%['''0qr\71YzdC륾KDDD͙%^^^ܮ];̙37nHHHryg}7oƕ+W4ܼy?yX݋;w\]]HMM͛7uV17nz퍄,Y0}tHOOGbb"f̘Qy ,瑞t\|V:wlT7V᭷©SpܸqٸtVZC6 J_#!!?n̙3HMMիWߣu(--՛OYpa"99u34>nT?g(/] n7I99LACaG=z۶mkw4?iС_p ذaPZvva>N<Ozoʔ)HHHOʃǦz3g 00G1p݇ prrUxigjs[oJ .СF*vat}RNgYAA OOOܹs@qs뇀ܺu[c5z o1tP#)) CnK/!22/"Ν;grtebyd?lllЭ[7TTT Æ ;#N: ѻwoi1绩ۺؠulZ^^k+++M-]111|2RKC~И% K0u>KDDD-@|EADAĥK~ .\wzKҥk~~~ݻEAm۶weQ]>K4hIY3]VA1cm4u%FGGk޳|MQ1//O6MA}>:vy]T?}.\y}ׯ^*iuٲe ɓ'EDbtK. #FnnnW_}9lmm֔S*/BAfrO") ѱmz쩩!Ydd( C^*:99>OSNg>cQqȐ!򗿈yyy.&&&j}'۷oksn8w\QZGT*~G cDLfr7zzr?quQݻwo;wRhoo/8qBAСQ4~v0Ez7DA?ݶ95_._,v޽/ ?cAcG_UAiR;LuS HϬYļwޘ5kV'/,,T*Ś5k0fa(..6Y Q?z?-- gϞ3~Z~4_M]vŇ~*曵 )<< B`mm DVZ]vU*P9~a6榞7:''Ǩϩo +L]*؟sFwHLL,֫W/6R}N  xm;#~ŘȘͿ]~5 򮮮&;zdvt\޽/1G-wGKNY\ׅrĉI /SNozj̚5ˤԩAkWիM?R O?{#G\|_Cۯ~!,XYfa鈍ڵkVu+ga8y$bbbPYYi}RWv]هu}M0U>5ooolܸ3gC?߿?d2\\\кuk3'OƄ obƍmZ988<{40LՋY඾s[ir?&pUXX m8wV_EppVNot}~/ƜGOiW\4fRS _d;XZs:}bz~w44Qc;$%% ,?O̜9o6N{b߾}FVX{ @ȵtBR3D sN̘1uV`ܸqܹ3222yF/co8|0|M=&M¤IpQ{:DPF6m!!! ѻ1E7ܻwOI===Mi&bڵXlCDff&N:SNaݺuXx1vڥ)Svv6rtMꑧm-) sSrttR 24D}3BmmƨOcL(8wz L>}Ξ=tdeeiQƾޚ:q_W~OmcO4x1<2~UUU^0n(~s5㺪Juݿ􃦺:MDD<9R|GhӦ }Y<FPetǎqI⯼kUj#}sUDEEa͘>}:OyӘ9s&uL~ϟԩS1oNj瑥'nǵ=`s>>ѣԠ /segg 27eժU())K/͛7_ERRYۯ-P=U}L>gϞEpp0VZe))))(((L&O|8 bu233!S|φL(j`` uu:u '''ydǏz[?<ѣMr:^=,u?\wS< 1t l^$ """0i$He""L ={ĤIt."/b„ H/vvv:+5' 7BU1Z?Ν;# f])R7p@͜߿?]YYbbb'|Iꢬ k׮hժޜ9s^3:tٳѪU+#66$Ν?Ot{9sդ^TDh֭[cժU-.jeܿ&L:NJ% W5O4Ԯ]47mڄz 666Z(JèT*̞=[SETTfNZSgC CLwvMܻwppp'4>z) Cs; +WB*bҥS_ݨe5x1}@RiFGvv6&L]vaƌzZlƎ >|@YYミcǎՙ{.pG>+m7$_@@f̘zYbbo駟^f޼yåK*Bvv6^yZ7x| 6l؀ӧO#'' =Z5OyaΜ9z*233ѱcGM9 `m۶aݺux嗱yf\r׮]\.:v;;;i3E}64g9jJKKqE"Q5<2zd ‰'p1{ Eqq1f̘|c0x1\ľ}>\\\ 6 bnn/vE|DAą jo߾(8|QP˖-o߾ٿ3g?c'<κt"ZJLMMիW{OT*u͸qģGyyy ˗&+Dc^{Mܷo)sffx!qբCܹUGΝ?cِ~r?ݟ͛7OAxb ?ZNg< Rk׮3K}Σp?tTԩSi5D;6gs`z?'"f&>Qqzqvv֌hc1111111~1zjNN냉')MzV'Wk4 'L&ѣ3gbpppм_|֭|0"""íJK.~aUUUЬ T6gaҥ0"""5 *J3:QKjԯ_?5 >>>pqqA^^$"""5___^* O=+Z4PDDDDDDDDDDz0JDDDDDDDDD  @PPR)ݻ 1tָ{.+Dg!!!ݻ7|}}舢"TVVLdΜ9ϠRoRDAA#[SNʕ+T*sNxDDDDDDDD 0`o߾6#Gڵk:?8p@RNCbҥx琖'4Ծ}⧟~5qIڵCpp0zL6m43ݺuk;\imG.]XDDDDDDDDDFP?SX[[cŊ?Q6FǎQTT"""N7r6ȑ#b (J|7_$""""""""2~;((g @fffh{xx5vvvF팽C1httձ1w:VZe]"Rg1R)d2 yyyܮ];Ġ[ny6===Pkpܿ_B(< EV8{,,YǏ޽{QQQpuuŜ9sпt8<ΝD˩6tP qY̝;ׯ_YN+++̛7O<ڶm\8qgFiiI2%%.\Ǐ#00lMcN_|娪Bvv6>M6!..!J_btN DDDDDDDD!b 'O;S ܹs^^^>km`4:tNNN !C(8qgNNNEHH  8YYY&)'̝;oT*.\ӧOC9r$qرcV;;;۷/***p)ܿ ޽{ f͚5\n1].cJµkpmxyyC7nRRR@dXr%y$&&_g𔈈t/((tRWTWԯ_?Q… [o]tzOܽ{(m6._, >|Xܵkgxyy 2Y9###EAĄ1((HiӦ W^ޛ>}{:vy]T?.\ؠzoҥ(x9|۽ brr%z{{7sLQqٲed2vZQ~JY눉&ׯŋ!"&N?6l/p%RSSwf^V}J%y¡CLR>D!))I˗ԩSpww+y].kpZh^y3f@UU#7=<</_Ɲ;w+--Ν;;+**T<]z5ƎÇgEAABDDDDDDDD:ixb1;vD"ȑ#O?رc=z w^[Ys ">>^6O Q?ʓgk@۷ݻ7f͚Uj*,,T*Ś5k0fa(..f^OĉI&^@Nb՘5kI ЩS' 8*Doޚ#;͡]vo۶M6hS֭w9G루^TT? ,Y0}tbڵpC}F'O"&&Nzw`?3gԩSw^۷/Š+c~ ;==PT AZ9Wի*++!ɴ }$8c}8|0|M=&M¤IpQ{8w޼hӦ $$!!!8s {""""""""Cj/--G}6mgO>>Xx1lll0c _HOOg/@DDDDDDDDzI뻡zNOOO444]vEyy9h$*ڵk:b}Pjj*ꀠ|%l ,Zaaaضm>66/Ƃ /6l{""""""""ҫT/_~QQ+۷ozgaaa dnH9oݺLr;RRRPPPL'x mPc{ii)-Zh۶mL>gϞEpp0VZU<@|4ik=BгgOL4 6dx1aTUU}D͛;;; 6/MNN $|*C˩R0{lܹsYk[[[DEEIZYY֮] xwѪU+{sZ09T8P3HJJW4Db툏GJJ 0d_6c )'l۶ ֭/͛7ʕ+vr9бcG!,, [lƎ >|@YYミcǎm=::111p\ ( O>PT &`׮]1c^7ܶ{:MDDDDDDDDSNo199YA+egg?8`@I/\HLLi&풒7xC ._\Aˢ b޽Z&c˩NC8 ޹sG+Ϲsď?XtppEܰa) b.]{LA\pAԥKMnzJu| رCY3g ˖-\1++K۷m+剂 |듉$ J WWW#;;EAYBH$ܾ}%%%zU*@FF,9nH9r9!H汲Bpm͜-%nnnpuuEaa!QZZj}??=BDDDDDDDDDD?RVn * * * * * * * * * * * * * * * * * * * * * * * * * * * * * !ghH$:_ECDDDDD$p"諀 VR +ZIȻwڠ+..F^^+DЭ[7H-sPxrr2N8?D51]tAHH+(Vq* ʂJBHHd2Yۿ6m GAUU ޽;:ẘh"e7OΊ """2lllPRR0ӳEDU*pwwGZZ]v5޽ !" GǎͫL???m2 f%py&djr)lZ KPUƧwYXɠ𶂍 U"x-K+')KJXM@dAVPVVVKFEEo )Pvvv񁋋 DQDyyyJeeePT滁ˡP(PZZjdz=<`g/GIeF : +(*J!//-r$<==f㲹:u*V\ R;wZ۶m>}G lGT*E~жm[+!8++nS_Θ{{{ 6 DQĭ[{nTVVNmllၜ`lldxGNv ^ͬ701/uokHkLc8q? pIAP CE||]|}}*~)Fzff&͛IGd:2 I?[n>|^￯MN0j(@vv6֭[i 9Tx* R>jVa,jpy'K֣֮2TdVVβoK+Z.O)a,Cif% CTU 9IRlpgke-4IuFYY._mxgO? 899!** fYCi5СCѵkWTUU!55YYYpttD`` |}}1vX_hTkkkDGGyyyuQfڵs=~ޣX6\o{/ڴs2BiJW< *UN] /;/l8u`gg:c'''DFF">>fiӦa̘1֭#ǦMйsgdee_EVVF={bʕ(((={L~D&!oe{ Zbe4C6h;x wS?/BYV%*Ur ֮^PvIfug_X A-|mmkg*7CU9JhjuV@miwAFee%bcc5 8qcǎ/wǏ۶m[ >6668{,ziNrr ZjٚߏI&zY>}`ooرC3ĉB6mн{w8q|\jѮ{c滽``\:7鄼R,^pI-{A+--QZ\ aDD~oњ%Kgaxc̣*Or2$L1D0(`*)EoE]UiZvz{+j^kRXedD! 2r}޿?6g'sNsBg-"}>}i\PSPJJL&E-\b c] ":5gac|gx{/ aZq g?÷~ `@ee%t:]:sL̞=At:qyTWW v1|&( }}?0r/nG}ɰضm‹D b s D􏽥/` sy}?[ĕ!@mU2 !F~.Al-i4( MC~\Ea Eji:iCw ާbTi4;4#1 w5+g(#g(zNAbL"$ "6j] dd~mg-;[cw;5 Lz$sx+\ -:Za |PpdZA}po$JAВ`#m\Bm/#%rBhmhpyk1̡+;WNaBv H@2pf-p7.zU]r}U:_:Hm=^}6q)vnB=h= @1J,}#kv$AܮJ6$x T K͍}V8mG'CG6$ ::~SLd10~7^,Kovvv@dr[`YYYVrua4c4'ڐ$4twwnLO>jf[m9}<'Nԯxaz8xO\̜9Spݸ|wE{Ҿ[ꫯkjjR,^XlO( on k֬{Ann.*++/ gϞž}PZZJܹk׮ž}¸!11qeYZ rv\ij%%%]ir- G$A4#>;~sߥK a0c I&!==A{'!U4JHR U&>u:%-i Dn'us48:8I4 STha ˍRyخ@ Y\yE oU gAg-!0 E/{ΪXW/FOM5~ȾcvmZ rIZФP]e ګq=>C._3mn<@kRiPjju ^i>vCpP0M@?E~`z{ @NOe8֋.yvA<:EE@?IyR(zn6B2^ KN2Efjakb$PHUU2X"3.EߎT@r EYE85A`)XdA D g7e4<y3.sa/q0(D`(tG<ׯw, 0~_fÕ3Rcĉ~ f(BՂ(#Yce@iJJ zzz"b CjTm-6dd0{^& MY94\@+8D:u ϠxC9rW\ w'͛O>===XjuﭮƦM{n/Ük>+Vx7{lTVVl6cΜ9^|Fŋĉ+UVѣx##3`׮]xgP___~صk|?poÆ Xd Μ9*477:/[n}ɂL&,]_\/V^͛7cΜ9>F[x$%% .x8h0o}i8/A[[]w݅4KW^k@}| ,X$1i$FqDӧŒ3PƚDž}BPr!D4+{z)g(HG8ʚ4Kzda˃vCVX/a$Vb@N.s]L`W. ty,xꉠ}> {(d/7x-th砝@:4G,s4K|p BH>ӍmpYitHE4j%j?J:׍ɞgL}2D{uH_Bra]_ؠΠքZ 6z_k*DiwD4]Ou:1 Rc =G G^-Sl<Z>2TɒC^yjߦ1[ppX3q0~y:lhr.*=GI\{Q3R#Q\\ N>#<ϣIII(,,9!/N՟399$IjFw+wrd.K6ؽ꫸{p<>Je˖-0o~7x( l޼7oK0dgg?!G?l<>,ϟEQΝ;1uTj$%%788z9&sYYjjj9*L"+c@DA[0D6i$ɀ; [_E~nbzaIm zބ9b?6*%rm?9cM(zgY#qߨIuG'foctABNTF ǘN{ i2:,rR>32((#4Mcܹc:ߵȲ=<)S>ӓdsM-_ZZUn 4M 466?4C&ܸP<0OzOؽe`HRhe }{hT>{AZpZ2ir'gI/K.m6[A'\d<]!O\hx1bIz n8ڮz_SdowGG>#uh0 i6.`o$~j ӏHT.?]x |irtQh)O]}F$?F@]}5fkSǒ .k8( `Xt___șY=-GjTXtX|9hFMMMZ 8x Ν `REݻ&M`hE# SҐ['do?o-EAagΘG$JKKC6FQ: $I"??EEEɁV0uuucZ>qAX,1k?>&Nlz/Պ_W/~7'Ķm?yTI, ?+WѣGQUU|ܻDl߾Ũc=Q_ /ƾ}pzya"^a7֡g0X755Jn߿Lc୷^RRe˖y]1ѱo\U6ưknnFgg'`00e[\\,ox`q;\qb 8$ CN@57thϺ 9cMz\"jlH!fi`>DI;ׯO)"ctl >\2R;?c@xp`#} T*)>C Xtk0 H=KjruXŊ+`07B= .\ ~ Qh]]]#&7i""{pp;\> ƘP)=C W?^^z6 aq 222/c…rniiAww_O+W#&B@_Ǔ FA!Guu5*++c~`$B1h~N)5^N<){O>ϟGbb"rrēN3D:D=+ ؼ;y<( RE#{ͫG!'].+F8 ~P(D6Fu8rƚp{[#9 T0i`*`Ʌ#geN(VK?ӥlnhh"fK[UpHhgu;$GAXj{ Y9鵋QZ;cErE/^ɓ';v+$1k,n n7:::̓1L;΃0r}R;5 fϞwI"jEuu_ϿH6 y^/h7'p0v QOĉ())+7J(vCRԅP)F`p\5kV|衇 %ݻɥhG*܀Bp:ػw/Rf<Q%{{ggMk$u͟y *--EZZ+ﺃ`&W&!^]5~ f$q,<@bcz6AJ^t חs&Aё3#g$r-:`ZaoN}o3P'I!(cAI(_L&ttt{8ttte¨36F/p0wUșh@k_Uu:***"O `Ϟ=QZ-nI02***qƀΟ?&O3:TUUwu{L0.駽 4MwӉD%kjj֭[A$^|EouoFgg'o<:u׵~hiim۔7qqؿod?.{t.[kd̙Wf9a^,X {Z,|K~n=}tTtb\Z .دfι?s4 Y,M6~&訖[u.Z 0LeAI$PP{[4Y4RnOz?%IlT̢prD&_#&ݣ{@Ӷpf*.xI,Hehh "TߑzK'0% X&}Le яF $T`)0 $2ItUI35> R@H)n3:ek@/aسgnv,_0aT*ZZZ"Znaa!#.g$7Z9F-ĉ> ;S啒0 K.aΝQoN]]]~mS t Om(A]mZȟ)LpvG/؍hČ3 9bQ `믿/HII^ڵk?~NBYYc߾}r xbXhLWFUUΜ9zBVsh?O?ׯǹs{cϞ=WTVVرcPոes=7b&`W/lٲs p|QVV͆58x ZZZP^^r<>F 󨩩yP,੧j˲Ƨ~w8?8, h(b޽~KBѣ(gΜܠW{(z$iꑺ@W/"@L^ r΅v5@=n8{xd0Q% ^c[ݰsd0}8.p2-gDքA^H,Q醳GJdBi444DADym">@LHǍ!c(0Ánh~fosG|0*"@H9;jI4x)vy݇fe1$ 6s44 $j?9+;+ZYx~eGCF]R|S"  F qJ;!2 ePDTXl4ƚ5N`;EN+.؇y҆:~KG={  vuuuطo_Լ<(UP |$vhzyvv8hhhJ6kq8 +Vk9u ?" <~,{>A(,JFQI Aąs}xi 4\& mN|1Tw8NTUUaѢEXhP#y][l7L?^z ӟcٹs' Q^^b:-[`A][[.^|E\|KuuuXd {9,]+vߙ3gi&TWWGLh<Ɩ-[~k֬ʕ+񩦦6lŋ>a\pwq/]  Ap!TTT`ҤIq#[o `֬Y`YVEرcGX_54 <- >䓀BHl6t:ŋ,U݅1.$)˵bVX.8PU U;g)g1KOR^:nm=jG]$lHkcȋH(QCB'mTs|d3 X/:Jd\>4ە.-7c½Fd~W?//nrYpnw;`PEcb`,V0Us]JC:߾^%ʻHEbU q'2J?RRP]5ڸ8"@i 0 z/f\uRʼ5NڵԦ4|ǣ}ů>C-_HOL 4ޚLa xPCK%O@VqAcV`*rz_r˲E1I#v{WT 2tp ,Zp:;Ч 5ZFnn.@cc㈋]ш\ʉF^Grr2`X>^i999jtRTK0!33Fϟ&Ocǎv˱ i5 AyyJNmמ \x <#55UQ? EEE())QYYYrł[F2nHҗ4SVE 8[D)M {U*B!T,KL=]ot&Lˆe]7.\Ǐ+ւ8߰N4 K,>~l ~K(էp&If yuφSq7}bDUPPlg9VHMFgnzB;~ !"6ϭUAA!f(TjU! sÖ1L<2iinnV0( * . .]—_~ RJRPPL``Ƃ1PxMSJUPE 6s)qOAAAAAAAAAAAAAAAAAAAaQ^)(((((((((((((((((((@1*(((((((((((((((((((@& }}}"bHVV&NN444