pax_global_header00006660000000000000000000000064151266733460014527gustar00rootroot0000000000000052 comment=0f45528d826c233ff8b5aad0309cbff643a18483 python-better-exceptions-0.4.0/000077500000000000000000000000001512667334600165135ustar00rootroot00000000000000python-better-exceptions-0.4.0/.editorconfig000066400000000000000000000003541512667334600211720ustar00rootroot00000000000000root = true [*] indent_style = tab end_of_line = lf charset = utf-8 trim_trailing_whitespace = true insert_final_newline = true [{package.json,*.yml,*.py}] indent_style = space indent_size = 4 [*.md] trim_trailing_whitespace = false python-better-exceptions-0.4.0/.github/000077500000000000000000000000001512667334600200535ustar00rootroot00000000000000python-better-exceptions-0.4.0/.github/FUNDING.yml000066400000000000000000000000761512667334600216730ustar00rootroot00000000000000# These are supported funding model platforms github: "qix-" python-better-exceptions-0.4.0/.github/workflows/000077500000000000000000000000001512667334600221105ustar00rootroot00000000000000python-better-exceptions-0.4.0/.github/workflows/push.yml000066400000000000000000000012141512667334600236100ustar00rootroot00000000000000name: Build and Lint on: push: branches: - master pull_request: jobs: test: runs-on: ubuntu-latest strategy: matrix: python-version: ["3.9", "3.10", "3.11", "3.12", "3.13", "3.14"] fail-fast: false steps: - uses: actions/checkout@v2 - name: Set up Python uses: actions/setup-python@v6 with: python-version: ${{matrix.python-version}} - name: Install dependencies run: | sudo apt-get install -y expect pip install -e . - name: Run tests run: | ./test_all.sh python-better-exceptions-0.4.0/.gitignore000066400000000000000000000112701512667334600205040ustar00rootroot00000000000000# Created by https://www.gitignore.io/api/python,virtualenv,vim,emacs,linux,macos,windows,pycharm,jetbrains MANIFEST ### Emacs ### # -*- mode: gitignore; -*- *~ \#*\# /.emacs.desktop /.emacs.desktop.lock *.elc auto-save-list tramp .\#* # Org-mode .org-id-locations *_archive # flymake-mode *_flymake.* # eshell files /eshell/history /eshell/lastdir # elpa packages /elpa/ # reftex files *.rel # AUCTeX auto folder /auto/ # cask packages .cask/ dist/ # Flycheck flycheck_*.el # server auth directory /server/ # projectiles files .projectile # directory configuration .dir-locals.el ### JetBrains ### # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 # User-specific stuff: .idea/**/workspace.xml .idea/**/tasks.xml # Sensitive or high-churn files: .idea/**/dataSources/ .idea/**/dataSources.ids .idea/**/dataSources.xml .idea/**/dataSources.local.xml .idea/**/sqlDataSources.xml .idea/**/dynamic.xml .idea/**/uiDesigner.xml # Gradle: .idea/**/gradle.xml .idea/**/libraries # Mongo Explorer plugin: .idea/**/mongoSettings.xml ## File-based project format: *.iws ## Plugin-specific files: # IntelliJ /out/ # mpeltonen/sbt-idea plugin .idea_modules/ # JIRA plugin atlassian-ide-plugin.xml # Crashlytics plugin (for Android Studio and IntelliJ) com_crashlytics_export_strings.xml crashlytics.properties crashlytics-build.properties fabric.properties ### JetBrains Patch ### # Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 # *.iml # modules.xml # .idea/misc.xml # *.ipr ### Linux ### # temporary files which can be created if a process still has a handle open of a deleted file .fuse_hidden* # KDE directory preferences .directory # Linux trash folder which might appear on any partition or disk .Trash-* # .nfs files are created when an open file is removed but is still being accessed .nfs* ### macOS ### *.DS_Store .AppleDouble .LSOverride # Icon must end with two \r Icon # Thumbnails ._* # Files that might appear in the root of a volume .DocumentRevisions-V100 .fseventsd .Spotlight-V100 .TemporaryItems .Trashes .VolumeIcon.icns .com.apple.timemachine.donotpresent # Directories potentially created on remote AFP share .AppleDB .AppleDesktop Network Trash Folder Temporary Items .apdisk ### PyCharm ### # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio and Webstorm # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 # User-specific stuff: # Sensitive or high-churn files: # Gradle: # Mongo Explorer plugin: ## File-based project format: ## Plugin-specific files: # IntelliJ # mpeltonen/sbt-idea plugin # JIRA plugin # Crashlytics plugin (for Android Studio and IntelliJ) ### PyCharm Patch ### # Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 # *.iml # modules.xml # .idea/misc.xml # *.ipr ### Python ### # Byte-compiled / optimized / DLL files __pycache__/ *.py[cod] *$py.class # C extensions *.so # Distribution / packaging .Python env/ build/ develop-eggs/ downloads/ eggs/ .eggs/ lib/ lib64/ parts/ sdist/ var/ wheels/ *.egg-info/ .installed.cfg *.egg # PyInstaller # Usually these files are written by a python script from a template # before PyInstaller builds the exe, so as to inject date/other infos into it. *.manifest *.spec # Installer logs pip-log.txt pip-delete-this-directory.txt # Unit test / coverage reports htmlcov/ .tox/ .coverage .coverage.* .cache nosetests.xml coverage.xml *,cover .hypothesis/ # Translations *.mo *.pot # Django stuff: *.log local_settings.py # Flask stuff: instance/ .webassets-cache # Scrapy stuff: .scrapy # Sphinx documentation docs/_build/ # PyBuilder target/ # Jupyter Notebook .ipynb_checkpoints # pyenv .python-version # celery beat schedule file celerybeat-schedule # dotenv .env # virtualenv .venv venv/ ENV/ # Spyder project settings .spyderproject # Rope project settings .ropeproject ### Vim ### # swap [._]*.s[a-v][a-z] [._]*.sw[a-p] [._]s[a-v][a-z] [._]sw[a-p] # session Session.vim # temporary .netrwhist # auto-generated tag files tags ### VirtualEnv ### # Virtualenv # http://iamzed.com/2009/05/07/a-primer-on-virtualenv/ [Bb]in [Ii]nclude [Ll]ib [Ll]ib64 [Ll]ocal [Ss]cripts pyvenv.cfg pip-selfcheck.json ### Windows ### # Windows thumbnail cache files Thumbs.db ehthumbs.db ehthumbs_vista.db # Folder config file Desktop.ini # Recycle Bin used on file shares $RECYCLE.BIN/ # Windows Installer files *.cab *.msi *.msm *.msp # Windows shortcuts *.lnk # End of https://www.gitignore.io/api/python,virtualenv,vim,emacs,linux,macos,windows,pycharm,jetbrains python-better-exceptions-0.4.0/LICENSE.txt000066400000000000000000000020651512667334600203410ustar00rootroot00000000000000The MIT License (MIT) Copyright (c) 2016 Josh Junon 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. python-better-exceptions-0.4.0/MANIFEST.in000066400000000000000000000002451512667334600202520ustar00rootroot00000000000000graft better_exceptions graft test include better_exceptions_hook.pth include README.md include LICENSE.txt include setup.py include setup.cfg include test_all.sh python-better-exceptions-0.4.0/README.md000066400000000000000000000113241512667334600177730ustar00rootroot00000000000000# better-exceptions Pretty and more helpful exceptions in Python, automatically. ![Example screenshot of exceptions](screenshot.png) ## Usage Install `better_exceptions` via pip: ```console pip install better_exceptions ``` And set the `BETTER_EXCEPTIONS` environment variable to any value: ```bash export BETTER_EXCEPTIONS=1 # Linux / OSX setx BETTER_EXCEPTIONS 1 # Windows ``` That's it! ### Python REPL (Interactive Shell) In order to use `better_exceptions` in the Python REPL, first install the package (as instructed above) and run: ```console $ python -m better_exceptions Type "help", "copyright", "credits" or "license" for more information. (BetterExceptionsConsole) >>> ``` in order to drop into a `better_exceptions`-enabled Python interactive shell. ### Advanced Usage If you want to allow the entirety of values to be outputted instead of being truncated to a certain amount of characters: ```python import better_exceptions better_exceptions.MAX_LENGTH = None ``` While using `better_exceptions` in production, do not forget to unset the `BETTER_EXCEPTIONS` variable to avoid leaking sensitive data in your logs. ### Use with unittest If you want to use `better_exceptions` to format `unittest`'s exception output, you can use the monkey patch below: ```python import sys import unittest import better_exceptions def patch(self, err, test): lines = better_exceptions.format_exception(*err) if sys.version_info[0] == 2: return u"".join(lines).encode("utf-8") return "".join(lines) unittest.result.TestResult._exc_info_to_string = patch ``` Note that this uses an undocumented method override, so it is **not** guaranteed to work on all platforms or versions of Python. ### Django Usage In `settings.py`, add your new class to the `MIDDLEWARE` setting and update your logging configuration: ```python # ... MIDDLEWARE = [ # ... "better_exceptions.integrations.django.BetterExceptionsMiddleware", ] # ... from better_exceptions.integrations.django import skip_errors_filter # if you don't want to override LOGGING because you want to change the default, # you can vendor Django's default logging configuration and update it for # better-exceptions. the default for Django 3.1.4 can be found here: # https://github.com/django/django/blob/3.1.4/django/utils/log.py#L13-L63 LOGGING = { 'version': 1, 'disable_existing_loggers': False, 'filters': { 'skip_errors': { '()': 'django.utils.log.CallbackFilter', 'callback': skip_errors_filter, } }, 'handlers': { 'console': { 'level': 'INFO', # without the 'filters' key, Django will log errors twice: # one time from better-exceptions and one time from Django. # with the 'skip_errors' filter, we remove the repeat log # from Django, which is unformatted. 'filters': ['skip_errors'], 'class': 'logging.StreamHandler', } }, 'loggers': { 'django': { 'handlers': [ 'console', ], } } } ``` example output: ![image](https://user-images.githubusercontent.com/157132/56871937-5a07b480-69f1-11e9-9fd5-fac12382ebb7.png) ## Troubleshooting If you do not see beautiful exceptions, first make sure that the environment variable does exist. You can try `echo $BETTER_EXCEPTIONS` (Linux / OSX) or `echo %BETTER_EXCEPTIONS%` (Windows). On Linux and OSX, the `export` command does not add the variable permanently, you will probably need to edit the `~/.profile` file to make it persistent. On Windows, you need to open a new terminal after the `setx` command. Check that there is no conflict with another library, and that the `sys.excepthook` function has been correctly replaced with the `better_exceptions`'s one. Sometimes other components can set up their own exception handlers, such as the `python3-apport` Ubuntu package that you may need to uninstall. Make sure that you have not inadvertently deleted the `better_exceptions_hook.pth` file that should be in the same place as the `better_exceptions` folder where all of your Python packages are installed. Otherwise, try re-installing `better_exceptions`. You can also try to manually activate the hook by adding `import better_exceptions; better_exceptions.hook()` at the beginning of your script. Finally, if you still can not get this module to work, [open a new issue](https://github.com/Qix-/better-exceptions/issues/new) by describing your problem precisely and detailing your configuration (Python and `better_exceptions` versions, OS, code snippet, interpreter, etc.) so that we can reproduce the bug you are experiencing. # License Copyright © 2017, Josh Junon. Licensed under the [MIT license](LICENSE.txt). python-better-exceptions-0.4.0/better_exceptions/000077500000000000000000000000001512667334600222415ustar00rootroot00000000000000python-better-exceptions-0.4.0/better_exceptions/__init__.py000066400000000000000000000034231512667334600243540ustar00rootroot00000000000000"""Beautiful and helpful exceptions Just set your `BETTER_EXCEPTIONS` environment variable. It handles the rest. Name: better_exceptions Author: Josh Junon Email: josh@junon.me URL: github.com/qix-/better-exceptions License: Copyright (c) 2017 Josh Junon, licensed under the MIT license """ from __future__ import absolute_import from __future__ import print_function import logging import sys from .formatter import THEME, MAX_LENGTH, PIPE_CHAR, CAP_CHAR, ExceptionFormatter from .color import SUPPORTS_COLOR, SHOULD_ENCODE, STREAM, to_byte from .log import BetExcLogger, patch as patch_logging from .repl import interact, get_repl __version__ = '0.4.0' THEME = THEME.copy() # Users customizing the theme should not impact core def write_stream(data, stream=STREAM): if SHOULD_ENCODE: data = to_byte(data) stream.buffer.write(data) else: stream.write(data) def format_exception(exc, value, tb): # Rebuild each time to take into account any changes made by the user to the global parameters formatter = ExceptionFormatter(colored=SUPPORTS_COLOR, theme=THEME, max_length=MAX_LENGTH, pipe_char=PIPE_CHAR, cap_char=CAP_CHAR) return list(formatter.format_exception(exc, value, tb)) def excepthook(exc, value, tb): formatted = u''.join(format_exception(exc, value, tb)) write_stream(formatted, STREAM) def hook(): sys.excepthook = excepthook logging.setLoggerClass(BetExcLogger) patch_logging() if hasattr(sys, 'ps1'): print('WARNING: better_exceptions will only inspect code from the command line\n' ' when using: `python -m better_exceptions\'. Otherwise, only code\n' ' loaded from files will be inspected!', file=sys.stderr) python-better-exceptions-0.4.0/better_exceptions/__main__.py000066400000000000000000000021141512667334600243310ustar00rootroot00000000000000import argparse import os try: import importlib.machinery import importlib.util def load_module(name, filepath): loader = importlib.machinery.SourceFileLoader(name, filepath) spec = importlib.util.spec_from_loader(loader.name, loader) mod = importlib.util.module_from_spec(spec) loader.exec_module(mod) except ImportError: import imp def load_module(name, filepath): with open(filepath, 'r') as fd: imp.load_module('a_b', fd, filepath, ('.py', 'U', imp.PY_SOURCE)) from better_exceptions import interact, hook hook() parser = argparse.ArgumentParser(description='A Python REPL with better exceptions enabled', prog='python -m better_exceptions') parser.add_argument('-q', '--quiet', help="don't show a banner", action='store_true') parser.add_argument('-i', '--no-init', dest='no_init', help="don't load ~/.pyinit", action='store_true') args = parser.parse_args() startup_file = os.getenv('PYTHONSTARTUP') if not args.no_init and startup_file is not None: load_module('pystartup', startup_file) interact(args.quiet) python-better-exceptions-0.4.0/better_exceptions/color.py000066400000000000000000000041021512667334600237260ustar00rootroot00000000000000"""Checks if the current terminal supports colors. Also specifies the stream to write to. On Windows, this is a wrapped stream. """ from __future__ import absolute_import import codecs import os import sys STREAM = sys.stderr ENCODING = getattr(STREAM, "encoding", None) or "utf-8" SHOULD_ENCODE = True SUPPORTS_COLOR = False def to_byte(val): unicode_type = str if isinstance(val, unicode_type): try: return val.encode(ENCODING) except UnicodeEncodeError: return codecs.escape_decode(val)[0] return val def to_unicode(val): if isinstance(val, bytes): try: return val.decode(ENCODING) except UnicodeDecodeError: return val.decode("unicode-escape") return val class ProxyBufferStreamWrapper(object): def __init__(self, wrapped): self.__wrapped = wrapped def __getattr__(self, name): return getattr(self.__wrapped, name) def write(self, text): data = to_byte(text) self.__wrapped.buffer.write(data) if os.name == 'nt': from colorama import init as init_colorama, AnsiToWin32 init_colorama(wrap=False) stream = sys.stderr # Colorama cannot work with bytes-string # The stream is wrapped so that encoding of the stream is done after # (once Colorama found ANSI codes and converted them to win32 calls) # See issue #23 for more information stream = ProxyBufferStreamWrapper(stream) SHOULD_ENCODE = False STREAM = AnsiToWin32(stream).stream SUPPORTS_COLOR = True else: if os.getenv('FORCE_COLOR', None) == '1': SUPPORTS_COLOR = True else: try: is_tty = os.isatty(2) except OSError: is_tty = False if is_tty: try: import curses curses.setupterm() max_colors = curses.tigetnum('colors') if max_colors >= 8: SUPPORTS_COLOR = True except Exception: # curses.setupterm() may fail in exotic environments pass python-better-exceptions-0.4.0/better_exceptions/formatter.py000066400000000000000000000260411512667334600246210ustar00rootroot00000000000000from __future__ import absolute_import import ast import inspect import keyword import linecache import os import re import sys import traceback from .color import ENCODING, STREAM, SUPPORTS_COLOR, to_byte, to_unicode from .repl import get_repl PIPE_CHAR = u'\u2502' CAP_CHAR = u'\u2514' try: PIPE_CHAR.encode(ENCODING) except UnicodeEncodeError: PIPE_CHAR = '|' CAP_CHAR = '->' THEME = { 'comment': lambda s: '\x1b[2;37m{}\x1b[m'.format(s), 'keyword': lambda s: '\x1b[33;1m{}\x1b[m'.format(s), 'builtin': lambda s: '\x1b[35;1m{}\x1b[m'.format(s), 'literal': lambda s: '\x1b[31m{}\x1b[m'.format(s), 'inspect': lambda s: u'\x1b[36m{}\x1b[m'.format(s), } MAX_LENGTH = 128 def isast(v): return inspect.isclass(v) and issubclass(v, ast.AST) class ExceptionFormatter(object): COMMENT_REGXP = re.compile(r'((?:(?:"(?:[^\\"]|(\\\\)*\\")*")|(?:\'(?:[^\\\']|(\\\\)*\\\')*\')|[^#])*)(#.*)$') CMDLINE_REGXP = re.compile(r'(?:[^\t ]*([\'"])(?:\\.|.)*(?:\1))[^\t ]*|([^\t ]+)') AST_ELEMENTS = { 'builtins': __builtins__.keys() if type(__builtins__) is dict else dir(__builtins__), 'keywords': [getattr(ast, cls) for cls in dir(ast) if keyword.iskeyword(cls.lower()) and isast(getattr(ast, cls))], } def __init__(self, colored=SUPPORTS_COLOR, theme=THEME, max_length=MAX_LENGTH, pipe_char=PIPE_CHAR, cap_char=CAP_CHAR): self._colored = colored self._theme = theme self._max_length = max_length self._pipe_char = pipe_char self._cap_char = cap_char def colorize_comment(self, source): match = self.COMMENT_REGXP.match(source) if match: source = '{}{}'.format(match.group(1), self._theme['comment'](match.group(4))) return source def colorize_tree(self, tree, source): if not self._colored: # quick fail return source chunks = [] offset = 0 nodes = [n for n in ast.walk(tree)] def append(offset, node, s, theme): begin_col = node.col_offset src_chunk = source[offset:begin_col] chunks.append(src_chunk) chunks.append(self._theme[theme](s)) return begin_col + len(s) displayed_nodes = [] for node in nodes: nodecls = node.__class__ nodename = nodecls.__name__ if 'col_offset' not in dir(node): continue if nodecls in self.AST_ELEMENTS['keywords']: displayed_nodes.append((node, nodename.lower(), 'keyword')) if nodecls == ast.Name and node.id in self.AST_ELEMENTS['builtins']: displayed_nodes.append((node, node.id, 'builtin')) if hasattr(ast, "Constant"): if nodecls == ast.Constant: # New-style since, used since python 3.8 if isinstance(node.value, str): displayed_nodes.append((node, "'{}'".format(node.value), 'literal')) else: displayed_nodes.append((node, str(node.value), 'literal')) else: # Old-style AST - removed in python 3.14 if hasattr(ast, "Str") and nodecls == ast.Str: displayed_nodes.append((node, "'{}'".format(node.s), 'literal')) if hasattr(ast, "Num") and nodecls == ast.Num: displayed_nodes.append((node, str(node.n), 'literal')) displayed_nodes.sort(key=lambda elem: elem[0].col_offset) for dn in displayed_nodes: offset = append(offset, *dn) chunks.append(source[offset:]) return self.colorize_comment(''.join(chunks)) def get_relevant_names(self, source, tree): return [node for node in ast.walk(tree) if isinstance(node, ast.Name)] def format_value(self, v): try: v = repr(v) except KeyboardInterrupt: raise except BaseException: v = u'' % type(v).__name__ max_length = self._max_length if max_length is not None and len(v) > max_length: v = v[:max_length] + '...' return v def get_relevant_values(self, source, frame, tree): names = self.get_relevant_names(source, tree) values = [] for name in names: text = name.id col = name.col_offset if text in frame.f_locals: val = frame.f_locals.get(text, None) values.append((text, col, self.format_value(val))) elif text in frame.f_globals: val = frame.f_globals.get(text, None) values.append((text, col, self.format_value(val))) values.sort(key=lambda e: e[1]) return values def split_cmdline(self, cmdline): return [m.group(0) for m in self.CMDLINE_REGXP.finditer(cmdline)] def get_string_source(self): import os import platform # import pdb; pdb.set_trace() cmdline = None if platform.system() == 'Windows': # TODO use winapi to obtain the command line return '' elif platform.system() == 'Linux': # TODO try to use proc pass if cmdline is None and os.name == 'posix': from shutil import which if which('ps'): from subprocess import CalledProcessError, check_output as spawn try: cmdline = spawn(['ps', '-ww', '-p', str(os.getpid()), '-o', 'command=']) except CalledProcessError: return '' else: return '' else: # current system doesn't have a way to get the command line return '' cmdline = cmdline.decode('utf-8').strip() cmdline = self.split_cmdline(cmdline) extra_args = sys.argv[1:] if len(extra_args) > 0: if cmdline[-len(extra_args):] != extra_args: # we can't rely on the output to be correct; fail! return '' cmdline = cmdline[1:-len(extra_args)] skip = 0 for i in range(len(cmdline)): a = cmdline[i].strip() if not a.startswith('-c'): skip += 1 else: a = a[2:].strip() if len(a) > 0: cmdline[i] = a else: skip += 1 break cmdline = cmdline[skip:] source = ' '.join(cmdline) return source def get_traceback_information(self, tb): frame_info = inspect.getframeinfo(tb) filename = frame_info.filename lineno = frame_info.lineno function = frame_info.function repl = get_repl() if repl is not None and filename in repl.entries: _, filename, source = repl.entries[filename] source = source.replace('\r\n', '\n').split('\n')[lineno - 1] elif filename == '': source = self.get_string_source() else: source = linecache.getline(filename, lineno) source = source.strip() try: tree = ast.parse(source, mode='exec') except SyntaxError: return filename, lineno, function, source, source, [] relevant_values = self.get_relevant_values(source, tb.tb_frame, tree) color_source = self.colorize_tree(tree, source) return filename, lineno, function, source, color_source, relevant_values def format_traceback_frame(self, tb): filename, lineno, function, source, color_source, relevant_values = self.get_traceback_information(tb) lines = [color_source] for i in reversed(range(len(relevant_values))): _, col, val = relevant_values[i] pipe_cols = [pcol for _, pcol, _ in relevant_values[:i]] line = '' index = 0 for pc in pipe_cols: line += (' ' * (pc - index)) + self._pipe_char index = pc + 1 line += u'{}{} {}'.format((' ' * (col - index)), self._cap_char, val) lines.append(self._theme['inspect'](line) if self._colored else line) formatted = u'\n '.join([to_unicode(x) for x in lines]) return (filename, lineno, function, formatted), color_source def format_traceback(self, tb=None): omit_last = False if not tb: try: raise Exception() except: omit_last = True _, _, tb = sys.exc_info() assert tb is not None frames = [] final_source = '' while tb: if omit_last and not tb.tb_next: break formatted, colored = self.format_traceback_frame(tb) # special case to ignore runcode() here. if not (os.path.basename(formatted[0]) == 'code.py' and formatted[2] == 'runcode'): final_source = colored frames.append(formatted) tb = tb.tb_next # Format frames manually instead of using traceback.format_list() # Python 3.13+ changed format_list() to only show the first line of multiline text lines = [] for filename, lineno, name, text in frames: lines.append(' File "{}", line {}, in {}\n'.format(filename, lineno, name)) lines.append(' {}\n'.format(text)) return ''.join(lines), final_source def _format_exception(self, value, tb, seen=None): # Implemented from built-in traceback module: # https://github.com/python/cpython/blob/a5b76167dedf4d15211a216c3ca7b98e3cec33b8/Lib/traceback.py#L468 exc_type, exc_value, exc_traceback = type(value), value, tb if seen is None: seen = set() seen.add(id(exc_value)) if exc_value: if exc_value.__cause__ is not None and id(exc_value.__cause__) not in seen: for text in self._format_exception(exc_value.__cause__,exc_value.__cause__.__traceback__, seen=seen): yield text yield u"\nThe above exception was the direct cause of the following exception:\n\n" elif exc_value.__context__ is not None and id(exc_value.__context__) not in seen and not exc_value.__suppress_context__: for text in self._format_exception(exc_value.__context__, exc_value.__context__.__traceback__, seen=seen): yield text yield u"\nDuring handling of the above exception, another exception occurred:\n\n" if exc_traceback is not None: yield u'Traceback (most recent call last):\n' formatted, colored_source = self.format_traceback(exc_traceback) yield formatted if not str(value) and exc_type is AssertionError: value.args = (colored_source,) title = traceback.format_exception_only(exc_type, value) yield u''.join(title).strip() + u'\n' def format_exception(self, exc, value, tb): for line in self._format_exception(value, tb): yield line python-better-exceptions-0.4.0/better_exceptions/integrations/000077500000000000000000000000001512667334600247475ustar00rootroot00000000000000python-better-exceptions-0.4.0/better_exceptions/integrations/__init__.py000066400000000000000000000000011512667334600270470ustar00rootroot00000000000000 python-better-exceptions-0.4.0/better_exceptions/integrations/django.py000066400000000000000000000007231512667334600265650ustar00rootroot00000000000000from sys import exc_info from better_exceptions import excepthook def skip_errors_filter(record): return not record.exc_info class BetterExceptionsMiddleware: def __init__(self, get_response): self.get_response = get_response def __call__(self, request): return self.get_response(request) def process_exception(self, _, exception): _, _, traceback = exc_info() excepthook(exception.__class__, exception, traceback) python-better-exceptions-0.4.0/better_exceptions/log.py000066400000000000000000000016031512667334600233740ustar00rootroot00000000000000from __future__ import absolute_import import sys from logging import Logger, StreamHandler def patch(): import logging from . import format_exception logging_format_exception = lambda exc_info: u''.join(format_exception(*exc_info)) if hasattr(logging, '_defaultFormatter'): logging._defaultFormatter.format_exception = logging_format_exception patchables = [handler() for handler in logging._handlerList if isinstance(handler(), StreamHandler)] patchables = [handler for handler in patchables if handler.stream == sys.stderr] patchables = [handler for handler in patchables if handler.formatter is not None] for handler in patchables: handler.formatter.formatException = logging_format_exception class BetExcLogger(Logger): def __init__(self, *args, **kwargs): super(BetExcLogger, self).__init__(*args, **kwargs) patch() python-better-exceptions-0.4.0/better_exceptions/repl.py000066400000000000000000000025651512667334600235650ustar00rootroot00000000000000from code import InteractiveConsole import sys REPL_ID_PREFIX = '@@@REPL@@@' repl = None class BetterExceptionsConsole(InteractiveConsole, object): def __init__(self): super(BetterExceptionsConsole, self).__init__() self.last_command = None self.entries = dict() self.last_code = None self.last_id = None self.counter = 0 def runcode(self, code): assert self.last_code is not None self.entries[self.last_id] = (code,) + self.last_code return super(BetterExceptionsConsole, self).runcode(code) def runsource(self, source, loc='', symbol='single'): # we abuse loc here to mark different entries of code. self.last_code = (loc, source) self.last_id = loc = '{}{}'.format(REPL_ID_PREFIX, self.counter) self.counter += 1 return super(BetterExceptionsConsole, self).runsource(source, loc, symbol) def showtraceback(self): try: exctype, val, tb = sys.exc_info() sys.excepthook(exctype, val, tb) finally: # this is required since tb will never be garbage collected # see notes in `sys` del tb def get_repl(): global repl return repl def interact(quiet=False): global repl repl = BetterExceptionsConsole() banner = '' if quiet else None repl.interact(banner) python-better-exceptions-0.4.0/better_exceptions_hook.pth000066400000000000000000000006041512667334600237760ustar00rootroot00000000000000import os; exec("try:\n if 'BETTER_EXCEPTIONS' in os.environ:import better_exceptions;better_exceptions.hook()\nexcept:print('An error occurred while automatically hooking better_exceptions.\\nIf you uninstalled better_exceptions, you should probably delete any \\'better_exceptions_hook.pth\\' file on your system or unset your \\'BETTER_EXCEPTIONS\\' environment variable.'); raise;") python-better-exceptions-0.4.0/screenshot.png000066400000000000000000002577321512667334600214160ustar00rootroot00000000000000‰PNG  IHDR:ÄØ�Jw iCCPICC ProfileH‰•WXSÉž[R -)¡7Az•Þ‹€t°’¡„*vdQÁµ "‚]Qp-€,*bW{]QQÖÅ‚ •7I]÷•ï¾™ûsæœ3ÿ9wæfy[–@��*�ÉÏFø{1ã☤€À? ;Gà Œ=ÿ.ïnB[(×Ìűþ9þ_E‘ÃÍa€„CœÄÉagB|\�-æ@è€z½9¹1~ ±²€Hã)Öã$)¶”ØDExCì™Êb S�Çgæ±S`9Ä–|�ñˆÝØ©,ÄÝOÊÌÌ‚Xž ±qÒwqRþ3i<&‹•2Ž¥¹H„ìÃËd°æýŸåøß’™!›C6jª0 Bœ3¬Û¾ô¬`1†Ü‘f~RhÄJ_äq$öb|7U=j?ÀÎñ†5 PÀaùC k‰2DéÑž£Øš%”øB{4”—5Š“„Y£ñÑ<~FhÈhœ©ÜÀ1¼�›ã9f“Ìó „®4ôh~jT¬”'z6� ±Ä9é‘Á£¾óS½CÇl„¢1g}ˆß& ý"¤6˜jfÎX^˜›%™Kb�ÜÔ¨©/Ç͉ ãÀáúøJ9`.?z”W—WĨo‘ #|ÔÛÆÍð��Ö;”“9æÛ• ˜´Ø£4VP¸”?öN�%å†ã xÀ"Ø’@H¼ö�†øŸtİ€¤.0ÕŒyÄJFø°�ùàOˆ¸ gÜÏK2ÊyPÿe\+íÍA²d4O⑞@œ‰«ãn¸ {جqGÜiÌ�)?6+Ñ—èC úMÆy°!ë Ø„€÷otÁðÉ…Ù‰¹ðÇrø�ð„ÐIxD¸Aè&Ü1à±$ʨÕl^�ðæL0tÃh~£Ù%Á˜ýc6¸!dm‡{á®�?äŽ3pu`ŽÛÂLƒ´ÄV`G° ØiìÖŒ5&v kÄÚ°b<¾KVÂØlné0oÌÆ²Æ²ßòó?fg�2JÞ7ÈåÎÍoï,Á�eÉÚdk²9�Ì'�ËÈûÉ'É]ä§äag™0ŽÌ<™52»ešd®ÊôÉ S)FWJ%�²”RN©¥œ£Ü§¼‘••Õ•u’�&Ë“]"[.{Hö¢l�ìGªÕ”êM�AQWS÷R[¨w¨oh4š!̓–@Ë¥­¦UÓÎÐÒ>ÈÑå,äå8r‹å*åêåºä^ÊËÈÈ{ÊÏ’Ï—/“?"U~@AFÁPÁ[�¥°H¡Rá¸Â-…!Eº¢•b˜b¦â*ÅýŠ—Ÿ)‘” •|•8J…J»”Î(õÒ1ºݛΦ/£ï¦Ÿ£÷)•�”•Ó”K”*·+ª(©ØªÄ¨ÌU©T9¡ÒÍÀ†Œ@Fc ã0ã&ãÓÍ ž¸VN¨�Ð5á½êDUU®j±j�ê ÕOjL5_µtµuj jÔquSõiêsÔ·©ŸS˜¨<Ñe"{bñÄÃïj ¦ó5vi´i ijiúk 47kžÑÐbhyh¥imÐ:©Õ¯M×vÓæioÐ>¥ýœ©Âôdf0Ë™g™ƒ:::"��:í:úFºÑººuºô(zŽzÉzôZõõµõ§ê/Яѿk càh�j°Éà‚Á{C#ÃXÃå† †ÏŒT��ò�jŒîÓŒÝ�³�«Œ¯›MMÒM¶št˜¢¦v¦©¦•¦WÍP3{3žÙV³ÎI„IN“ø“ª&Ý2§š{šç™×˜÷X0,B, ,,^NÖŸœ0yÝä “¿ZÚYfXî¶¼g¥ddU`ÕdõÚÚÔšm]i}݆fãg³Ø¦Ñæ•­™-×v›ím;ºÝT»åv­v_ìì…öµöýú‰[n9*;†;®r¼èDpòrZìÔìôÑÙÞ9×ù°ó_.æ.é.û]žM1šÂ�²{J¯«®+Ëu§k·Ó-Ñm‡[·»Ž;˽Êý‘‡žÇc�ÇSOÏ4Ïž/½,½„^ǼÞ{;{/ônñÁ|ü}Š}Ú}•|£}+|úéú¥øÕø úÛùÏ÷o ¬ ¸¨È¬ rZt6˜\ü(Ä4DÒ4�4uýÔû¡¡üІ0¶>ìA¸QxvøoÓˆÓ§UN{a± âB$=rväþÈwQ^Qk¢îEG‹¢[cäcfÄTǼ�õ‰-�펛·0îJ¼zMvM.M~–âš²>¥?Õ=µ,u€çÍ«à½J HÛžö>=,}oúHFlF]&931ó8_‰ŸÎ?›¥•57«S`&(tg;goÌ ÷ä 93ss•áQ§Md,úIÔ“ç–W™÷aNÌœ#sçòç¶Í3�·rÞÓ|¿ü_æãóÙó[è,Xº g¡çÂ�‹�EI‹Zë-.\Ü·Äɾ¥”¥éK/°,(-x»,vYS¡fá’ÂÞŸüª)’+ÝZî²|û |oEûJ›•›W~-æ_.±,)+ù¼Š½êòÏV?—ÿ<²:yuûû5ÛÖ×ò×Þ\ç¾n_©bi~iïú©ëë707ox»qöÆKe¶eÛ7Q6‰6u—‡”7nÖß¼vóçŠÔŠ•^•u[4¶¬Üò~+gk×6�mµÛ5·—lÿ´ƒ·ãöNÿ�õU†Ue»ˆ»òv=Ù³ûÂ/Ž¿TïQßS²çË^þÞî}ûÎV;TWïר¿¦­Õô˜q ã ÏÁÆZóÚ�uŒº’Cà�èÐó_½y8øpëÇ#µG Žn9F?V\�ÔÏ«lHmènŒoì<t¼µÉ¥éØo¿ímÖi®<¡rbÍIÊÉ“#§òO µZN§œîm�ÝzïLÜ™ëg§�m?|îây¿óg.x^8uÑõbó%çKÇ/;^n¸b¥¾Í®íØïv¿k·o¯¿êpµ±Ã©£©sJçÉ.÷®Ó×|®�¿xýÊ�Ð�7£oÞ¾5ãV÷mÎígw2›wwøÞ’û„ûÅ”=ÔxXõ‡ÉuÝöÝ'z|zÚE>º×Ëî}ñ8çñç¾Â'´'eOµŸV?³~ÖÜï×ßñ|úó¾‚ÃE*þ¹å¥ñË£yüÕ67Ø÷Jøjäõª7joö¾µ}Û:>ôð]æ»á÷ÅÔ>ìûèøñ§ØOO‡ç|&}.ÿbò¥ékð×û#™##–�%9 `°¡ÉÉ¼Þ -žà=Ž"'½I‘Þ%ü',½£IÄ€½D/ žQ¶Áf1>ÅÇï(€ÚØŒ·QÉI¶±–Æ¢Â[ áÃÈÈMHM|ŽŒ où²’½@K¶ôÞ'"<ãï°£Ž¾—àGù„�m`l(‘ pHYs%%IR$ðžiTXtXML:com.adobe.xmp 1082 452 9^ÝDiDOTâ(ââË,zZä€@IDATxì} \UUÚþSŠ‚ ¨èQAE4•ARÓ4Ô°¤R'Ñò–fa62¦_|cŸýdžÍtÆtÆÉÔ¬ÄÆ¬°4”$¯yIñ‚¼ â„èÿî}ÎÙ·sáÜ]û÷ƒ³ÏÞëò®g­µÏ~Ÿõ¾ïz¤}ûο� †C€!À`0 †C€!À`0aDÇЋ¬ †C€!À`0 †C€!À`ðÔJt|´Ó“AÕ€¸[ø ÞÊèÔ€[ðp‹îß¼=ú«¼nÂÖ×ÜHƒ:ý燰å¬É †C€!À¨ÿTÜ»‚¬c×ê¿ LB†ÀCŒ#:‚Î/¼8ÿ{¢ÍCÐÒ³‰�­ñ˜_Ó³q¬U&¨9ÿ5Ô‡N˜¼Ïn0 †C€!Pw”ÝÌÅá3·ëNV3C€!`Ft˜…çÁ¹y9gÞ;×üÁiÐCÖ’�¶�Ñ­¥G�·ÚÓà ¼<иZƒ{h„V�jpµ´×+Y¨gtNõ‰ ¨8‘猢ëI™np{TMM=§Á‹Áðlð]ÈÀ`4(î]=�cJ”ÌLX†ÀÂ#:–ž¦vžýõOøû•&uÔbÌ k�ÆTûõ«Wñé�:£WŒ.^nuЂGЯs<Ü*ÏFFë¯(/Ç/ço`Ý…2£÷ÙEÛÐü² •¹õcÅHäŸE�Cº¹)ºôê†�”âì±³(µ"–“G aâéÔÞô\Óáø©|Ö— †@@€Í[y'_<ŽùjùEö�!À¨sÑQç]àJ|p4c6>*twe¥T—7¾{c8ú{é«-Çúµ;0ÿ–þ;û´ �FèÛ© š-_»JmŒ+¯õ¢^�ì´]v˜""Öœ5Á];AªX“Û’´á]‘ЃfIù=¬ú)‡-]¤hÔo=Õ =hò^ȹˆ¤3®d–´ª¡§)BÅw¡º.t¦¦Ý1qâ@Þú¢ôÜn$ï¹à00õj�ðŠøB”ZiŽŸ½î°²Æ‚žƒ§ÍÅ k«>�5Ë· ¨w\¿ñobx�øR’—¾_dº�ºñð‚¯�JoÁÒÇ6·­ùp_1Ñ úýAœ·Ž j\Zò¡R�¿}xÇØN›ˆ‘��¢<ï¦méÒñc;à…`“p¿ËWÞ@†"¯á×&x{jôñ×0&ê4Ì熅³Ѓ‡©AêZ}*6L%¿âAuµÕÕeii M±|^´Èé=;Îk"ðù±H¯¶£ ‹³6Â’qјªc¤8eæÝ5Xãˆa‹exÀ>Ò O…t@³GœÐ®¾Xõd[4¾_Œi×` v6j„¶¤›T�jÚ¸š Dª”Á 3‡… ¿w5výtÉ®´RŠò }¯¹õÖÿ ÆÅf!Ãâ0¸3G—’5G²c¬9$}ãæˆð Và†sEñeœ¼X‡¦+¹êiCÁÓ#h^É[�Õ8Ÿ¾ [2vœŽº":z�ž�‘a>ôTÖ¾,\ܵ›×NÙš¯¡Î &·{úýAœ·¿•!'ã ]ü;íÐ6��Yk1Tå…’ìÿ {Ìbƒ² DtdÑáCl¢ÃJ\d ¹òKC‘Óñ˜8•èÈÝ•�G,˜éDtüQ$:–ÑÁ“än‚Jm8þ®áþxo”§Ññò‹ðl÷Ã^ƒ½ëò°ê¦e �Ž’n:ö€ˆ¡N³Ù›`éÛ"€_€ªÁn":ÖÔJtp6Áû”¯£9bÍŠ,a³Ž°ÑZ·˜Îú›•ÃðïÔ'ñ‹õ9mËáî�Ç<ªñë}—°+¶ÉØ�r¹µÀˆàv2KûÅÓ†uÇ ïJløî<öʺÊ“¢ð¤Y5÷ŠŠðÉÁëÈ–¦mä…¿=ˆ6÷ocvÚ ²†b‡Ã¨¸õןÓÏE‡{⦠æ‰è² {ñÅî³N©¸I›.è µ]ã¶ìËÉg ™=@7$<½¼¼PYJîYö4¸žä5$:Ö�EG턃½â÷Ÿ@–$â³ÙR¢ÃÖ|öÊËò×-Žè÷iÞ:¼74÷�ýsÄeY‡×àâ#�rz3ú’:#:¤Ð[‰‹4«KÏŠœŽÅ©DGé­ Ü©ãí3ýþñ5¦k'L}¼1ª¹m)iËÊ.�îÚu=éÀ‘ ºäíèô@­zÛ^dÑ1YbÑ!j²Y!·yvh[Œ}¬1¸�"îÞRcßO·ñÙ% F Uá•H‰¹¬¾N=¾^ÞX4ÎMe É鿆9Bj†œèpÃ[üÑ¥q rãÙò°zÏ>Ý/÷vÃåc¥¸\AEqu¹=‚’sEXwITYÚµiŽß÷&_¾nª³qcôïÝX·F£Ð�Ÿe±øû�p´êòX+?D6×ce(ï•·±CAxÈóTârtÌã³z`rç–‚B_Tt[îˆZµ,Ÿ¦kòÊ0¹ww¼Ô³oj_E2:ð+]óÈ%òÀÿ 솧;µ@UuNcw”‘ò¾#ë,ÖHêÑ籿>}Iøl쇘 Ö|Œ”†¶ªöHú] �ÛÉÿIÝNÈ%eÁÓ�Й¸ÆjRcÃŽ Ø+Nq„„vÂÛÝš"óài¬)ÔÆÊ1–Ó1×Üðxoòål~CáíûØ[$FQ‰'Qí@�€+w+‰„i„~”·äõ7\ºv‡K�ÈÛÈ É­¢ÜÔvº�øû\U7iË]§’;÷³Q¾íj©ó�ÎCâ0¬«ÖšãÀÉ8í�WŒËíÝ>]ýµfÿ÷ rpþºs*s÷U!8° š’ugIPV|—/ÀdmîÍáËí ÂÝãÏ|CHÏ9κ ÷ p:Ï´BÛ¼MgtîÀ­¸ÓQ]�‚ È»i²F¾|{ÿ¹Oß�þÖ?�hç¥Fôc›ø'd\wG§V|˜Y”ݺ„|é\ôòG06vT•àb¾áJ€‡W:RyÂor Î^vêñ A Á…´ —Îæë_ŒUãÔkJ¢ãü®Ïp¼Iô§ß0,–önß�|“�'„ô„>!íù߯ ²š++)ÄÙ¬ý8uÃ0ßöª*tþúJHè{9éH9VŒ¦.UwqVÕÖ|"xÖÉé啨IœPBúÓŠìÕ�*4pk\�+Ç ó¬é¹$Ê`É™år:lœyø£ß H„¶o©{w«Fù�ë8e¢µ­°\N.½ Ϫ[Ô¿•è7,¡miŒÑûr£2ããÌæ~·aÞÊ{Ç ½?�ž[¡šž WòŠbÂ$s?ÎJŸºL†í+BP¿aˆìÑžws¯®,Á™ÛqØäDòE¯�éèÏë\±\žüKgq$ó”ðì�Ëèào·q$+ŽõbñGtt7^д4r ‹Á‰‘¨,©€Ÿ_%R?\†´#íPE :¢5Js� ã¤1WºP*·-Ÿñ•«/B6=H +- À»ë!œˆuÎV¼>g3ÐNû[�Ò¤e(Ê”XtY9 ±‹�øÄ8tö£/z:ŸLýÖÓ"˜ÙƒÚ–8qŸPœþ€^Í… üÉÝ[Õðj¥7îÔÝSæõi‰u3[ÖbE¡$:<�ôGºpãŽÔ�_6_Á£wd[j¯¸Ú¢«Õ„ËK–à¢Ïà„ÏÊâßcÁþpˆ½c%Iq£1³£ðæiP úòQtH¾(»®Ì“�öÅñ E@㣲c?ÌÀ^]ny¾UAå«[dMóßíxù‚üEñ±Î!øbLO>þ‹LÝ—ìýû1ì€ÜLÈžúŒÕaï5¯fmðd_ÚÅþ#:2üËñþ¶<ù5v`(FѼáÆöÙœ+øÇ™R^‘ïÔ¯öÖ Õ]Çkû¤/§ä¶5:oäcV–V1´_BÃÚªüñöïü ˜ê¨¸S„÷÷\Çee�–øGŒŠÌ嫱ÿTBºµFxÎ]BÒ)©Ú³žE?nX•aÞÎëóåñÞÁ˜Ñ‰{TcËÎ3ØáT¦ƒz¢èÊwîP¶Î±ßÝ;ã÷S†ñ1‚Ê.À»N;¶|#¥ùtê� _í³²øò \¼-Ÿ³F²Xq© †<�®:%\ž± 7ÎÃ�{~UÍ1|ҋ訤T]ÆŽa`ܳDlINÍ5lýä{ÃøîTgìHtõÑ ÖZu7?ÿø#½è;Ï�Ï™xræï£ÂZ‰ 2vVyk–mpñí?3‡KIS‡,—#õè1scÃdy®î[‡�èE9`æ¿©S(µIŽm^†¤øÕÅ¡$:ŒËPŒ]kþ Ïß^˜4yÚ¾*ðÅ\ÍÚŠ�2‹*_Lœ?�<{f¼&íÕJ¤¯YѰÄÖ|º:¬–è?q.†ò/H‚ '·®Äå“1ª›üé]}c–¬; ¤³ùÄJ91Îú�Ƹ¡aÂÂŒRö{yYHþb·0øûVÊÉåQâ©VW£Iå@PŽ3ÛûÝ–y«o»WÈ`L~nL­}åÜŠ/öžÕ'ç?åí«Fqq||”£Ƕ®ÆŽ³rrÔ¿ßhLnºHUÇŬ�ؼû”¬Ng|©¾YG.‰­½•D%âü–Wi|©±ÛqôÉÇÁ‹-ƶw^Büú3â%Rú7ÝŽ¡­éRñŒ Ÿl Ç'g`Á .A)VŽì�Å:­y᎓˜®Ä]R4Wdæ»J~QBtäeÒ\î=�Šbr¶-Dtüçò|ºo «·cÞèPƒ{%¹;ñæ�x¤)ï1AÔHÝ”†ðß? •~mB—Ö\}Êâjûn3.º‚£Vã?óFð®=ÒºÔyéx}À Ãöñ‰b°qÏ{Ú…sRj䤉9“þ,ë[{åTÖRëw�ÏZå¡.#:”±5z÷%ŸbÔs+II+zPá­�rL^/ªäÑaÄ¢ƒ³›ÿ„/†ôö„¯¹`Ê:}|ðéÌÚ਒ú姆DÇ¢9*„èšt6% O ËOˆ"Ùž�ÿÈsåYŒ‹¼r‡+½> ¿tqX¹IqÏÑaøb¯¯ „ˆŽÎ ¢cḼÙÅSŸBÀÒfA8;»�ø@ ¢c2zO™O(@yr÷"úýë¨ÎJ„n¶ëŽ+“»›|!ÑgÏÙ¿OP€[ýas}úœðÙªE; hg|•ÔòêÜH™Aï;x-Cl/<šãØžH(8G–§ä¼O§,íͽ¨º»ðÄIëûXð}¾a¬Ë3™ÒGÕK§èÿF+íåP{zBåÉYvÐqŸH‰4)ADLJDtH_­+î—!·ôôð×�?öˆD†ßî<‹ dÑEØõà†<­>ÌÞíw�ß®ý„ò=ûø¦:ã_à ßcD7n\•!ãË/pÂy|•Lü6ÁáhÎ¥Õ¸yî$òKÄg©,¡U_Ü9vzùèȉª2Ü*¢€ÈÍ(x£—Ž(¬À�/6*¬Všc½4ujÑTk9EùîV5A‹¦ºrjÈ"ïQ:¯ÈÇ—€"FO®)ÜQCyïV¡ í;ÚX—½âò^lÜ%É×&vÜgàéO„Å4S„…Tt":ÖÑA”˜U˜ÔDŠ,Ii1ý)ÈçPI�OÐ-kh‡–î“æâ‰öâo«:o–A/ÖutXFt�pÊÀ«½ðÚÜQâïœ ù¯ü ÷æëîúbüÜ™›o"×}¤¯ü'2}ÐÖ|T¼MrrŠyòw¾j ߈_•”‹}ëØV|¼ÃÎ9a«œvŒ3å¶«òVé¿ÝÃöe«p\ÏÃÙ(§Åãì~Vþó�ƒíýnë¼åˆÈ¹DDÖ6Dåã°¸}÷NbÙªmôö¡;ü#aÚ€ZßëpïåÛ!æÓçwÂgÕ�«ÈȾꘒ%‚¾À’ÂB”Ý¡j­Ÿ_…DVD d—nêÚ}øËH�•bøÞX�¡ÏÍ}!·”Ox·MÞwè4`Žp3!9 ¾´ùm¼àí¥µF§»êâbT¹¹ÃÝÓ ‡–O1ÜUňœêÂ\œ»í‰îÝTºr ±42 Ë „êø“ø�û°€,ïµG)r ;ÏN¡PqÆÜQ˜Ž‘}fÈz˜¨ïYö ×ëÆëÓjÝ›q¡jÂ>Eê¼�º 5(̽ŒrߎôÑ13ÆÚ¬8¸cuiÔÅȽD‹°M}Ñ1°µO9IÅU`�œ:­û0ÒΟ–× ˆxµÄòÑ�"aS‘Ð6�è âÔ�®˜ŒÑΧ)F÷÷FdOÚqEIz+‰zå? %­bІáUšGÑw 7Z OkC¢CoÑQzµïvK¶ë‹ÖuEÿ¶+ˆ_oˆN¢¢ËñøŸãœýŒýÇÌaQx�ˆŽ*Þ[¤îM›#°…H|ØKtH-:Œ%dZ®!…×Gº%ŽŒ i„O^�Ѿ:mƒor9öÿrízC·Ð�Ûxëý=øT‹mõÙ�im%´÷ë€~­u¦„µ%6zŸ”õgB�Ÿ‡?’‹•þhÛ!I}µ´@Þ¹¤—ÔH^ZhŽ4õÁ„nœkp8ã VÝ]„ú–³‚ÔX°ÍD‡ÉŒÜs¿F�-é°C'öàÞA˜ÒIKZþ…d*e‚Œèø Ç�]ÀŠK¼ü;wÀBÎ6“æ~f¹.IÚ/ Òúi¥»„O‹Vø÷“mø›³ÇÎãýKÂk_®3ÿÕ\üêÌ£N¨"cghW*®e`ã÷'œP‡©"Ýо[ü›rk2qÏɆý^,D:¼B¤7åïžÄÇÿýYRys<6lÚÞ=Œ+Þºô©Üiç™)Ú�g´—Jq|g N4ˆ‰ƒ;’˜Dtl�bWz½Ì?Š” Ö"ªîƒê�ƒßì†ÜfL_¡#?�§/ƽ9ÁÒÇMõ=\¤ ²~�Ah.üNRðÂèñO¢7oy¢U«æ¢5†2­ ‚ L›?‚÷(Ý»šs-»ë‚™r‰o!eñÇpþ:­L0Ùc ZñEòÕ÷î„ VzE„ËR�#›W`§ÎòÄ Ÿúî; tˆÄ€n­Ä:ª¯â³%‘Ï_ñˆ‰q"¯žFÍ}wñ妒‚I—W¶t­â"’7îÔ)»\F[óQ@-’<ý»wC{ ¶ ËK·?®‰mxrØØ8ÎÄoë‹NÂùõq<”÷Ý›#¹»çW�áï™НNo§ ó´–sä#t�]&–mìL&§™kæaì"íò¤¨èk�ž‹I«%Ö'asq4õ p¶%(9�wžzëùŸäP¬Hûcuïš™KGaìri>1ø)ç㘹&A¨/:é[¬ŸÒ“ 4RŸ1Ù­ºf%.©tžH%î§@S€53žÀ"�yJÂÆtÌÓ-ì§öÅIÛ‡1H»´ݸßÍ‚ï)’Q@’’É­èÊLj�/éWY;¬•S–Ùò/²~wåø4-b=':ųáMq8»”btp‡Þ¦í]36Ý€Þ‹I$:èµá^9þ¹º¶]WšàOÓýÑ«•nÅ—+Ö€èà.*7,š XlpÁOå1:È@ÀË�^jp®TŒ¹¡-EŒTYfý±èÐKvöðÿáŒþ¾­Ÿ�a‘8ül€�Ý™DGáÙ£èñ5÷sˆ³oGˆ/R——fto¶äõ[ê·‘k )ÄîmqlîèùdNè#?ü€‘Ç´® J¢Ã¢ú„–;÷$¬Cm·,%o¬¨�ˆ.¡¢·ŽœÅûWÄt)ÑQ[i²Ï#IâäC$ÉRz¢L�M–p µ•cÉ}©5Ç)’ù‰ÌܳBoaqÿFþ ³P-:ò(ÉŸ¥±H$Ö+†„¹¯Œ ÷Ž?)/&÷•k‚ûÊã½;“Û ÷Ë¥¦¶^px[kÃC“±•—»]³êñ±ä–ÀYËTàЗñ«ÜT¡6‘pß�a=ÑŠçGÕÈ;q ·ìâ�TxžˆŽVÜô(½€­É óñÚ$nÞ“^Œâ‰.Ž|9¹}~¦°æ=ŸÁ‹QíPsã>Ùö«XŠÄíeð™«kŸ bמ9O¯þxsöP Á@&ä›—�»µˆVTçÒŠª Š˜#/<úá͹ÃÅrÌ¥¥¢½z=�Ù£º™„Íå[¹‘D© ÝËÙŽUß§”˜4÷eHŒO�Gî7_pî7´ª?‹¬9š åÝÇ®eÿ¶õVZCœß¾[Ž ©¹“^ãÞÄ( ótq×JÚu¥vMΪ|vËÙ o&Žû[×õÕ“ÈmÜa­¸QSIÐJ�Ò%±îÃN9mg!#f`L_ !E ý¾uÿ×½üá߃C�½{%4œršgóiœ‰œŒÍ «ú]‰¾¥óÖ‹æ÷lÉü&rïØÖäjBr#Ä�4€®AûΧcÕ–L’„ÊL””©xføö�™ÃƒD‰9"n÷.ì=®¥á‚^-nÑ6æòù#fpÞYqî¯8Q`×�™ˆ }Φوž¯·mæä~ óÑ›/éÐy[É2c¾¤1¡HÎÞŽAÜOºÂb@´ö(@RäXÍ ’¬üi›µD‡•»®ä~5CæHä$2#›È N%±�´�H š(t¤' D?�è‚jŽf½Å“ Q%¸ä‘3DJ䘩�¯È®Öá"’<¤W¬O±K´$•VsCÇ`]8¢£ð¦ö™l½ÅTc¬“ÓT)µ^—ôƒkǧiÉê9ÑÌë�[Ûn`«îÙ0¤oKàÄìÑ}—|3Ér÷w·°æœ¹‡‰‘¢›‰£ˆã0»á/«0 ½qå³¾¸®p²—ß~ †Ê›ñöØvupï(|õ´JÈìL¢C %Œ¸¼è-A;÷Bæïƒuæ^$–ÌÚXòÒ3˜ÀkX¼ÌÙ?í°L­"©$:,©Oh¸OZz·Å ~f|¤YR±< �EB’Ä"¡-¹¦$ñ®)¤ò’¥Ì2~àžµâñ™5’Õ±åûO /çÜý¶�:PÞGðþ·ò˜b^ÛÏ´$ §ü†Ÿö�ÃwäJ¢ï± rüÄïºà97˜#:N#‚ä’HêH­= ‰Z• ÕXåV¾ý‘ÜWx=B$U*n]ìŶ7ʆœ¿ÝÚ�ò´tršË"’U¤Ào�*ðæ²9øž_—ÞèØBûÆ~+÷8òîJúÊ꺚bPÜDè„(w î^»„ .áâù ¨5LFÓž˜81JàøÖQlø†VÛépoÎ6õEu�ñ Dé'QznLÞ8š‚m‡�o·Á d柣ð4P¥«ªJD¡ˆÈij&­.ã@r�xBáÁݪ¾u+>ÞIj²òà¬O¦#˜xHS\k£FäÚ±f•$†…² Ë¿+4sÊ›úb:–o&åM‰YÇ䜸H#$t`ßÞ"aO—Œ)®Êz�¥1Ö «òÙ+§2?'нr!øÁDÔÄòDM%öQ<‘‚jCÿ)ë±OkÇ™’Œâ|í—Á)æf;äTö›tœ)e¹‘µëvëm%´ò(ó[:^øÜJ¹MÌq��ÌÓ[f±%uc8‰æ²$ �@üQ%Jù„öÕR·Ñ!À_�{·®"'ûögž5òœ:åDSz ¿½BovE2{ÍxÄ,’*ÊþX›µ#¹àê˜üœLŽ[±KÇv!бf\ep²�œM±êÜdY`B@+e‰œGHÎX©œ’{J¢cáŽcÄ‹^±Î`^§QH–I#!kJ²0®ûí�\I™ÖÔ'+Þ¦/Öá–¸©äŠÏ½Cn›÷V^‚c¥$¯×~‰)Ô~"‡â¬¬¥8+#ySNP ²3±gϤ~ºÖxZ.™pX'§�ÍÚI?¸v|š´þ/w@À±kX˜müñ`@tèÚZM�™rÏÜGVö=|wÕ0oÔ€v3C§)-:<<1kH3I0ÒßP¥i„nýšÂW`É -: aVZ�¦¨/DGuÉ øËO}pÅPD‡\q%Ña.¶‡žèÜ�ˆ—h‘xA98ý‡àTIfH‰å=Kêsˆf ñðl…áÍ\žfÒš¾E ûh²),À,‰„�[,�ò¥lÕØþã|e°H艙‘­à]uŸ-’Å∎ მ.ÚvÅ0(¨iA,º3¸O0¦(‚Ûͨ)Á¢ï%õK\W È s÷¸Â%‚û ¹­¬"·îi¢tÝ1*�#/–üŠòï·ÕãØ£MäóˆíÅ­NVáèÖ †A[�ÑÒ¼º¡k²É§ã^>íÀâˆJÜñôØhHƒˆêj/½‘ƒÝÛö›v#‘×2¾Ä÷µ,q„I#ºñÄ£%éub8íÑx(ÒØµ("²Z“VŸQ¹š¬»ž·}¾èsŸ— �âXÑaú ]ÙÖ,—(צSÖvG© IHå=½2l ÖR‰´L}ReÙÆÒèÓJ?­Ég·œÊþ–®ð“=l@-dÑ3çNþ ‰›�õýg·œ@VŽ3Ckw¿±GNÃúÈ:H磼WIqk–)âÖ(ÓX:^ø±£ìGD‡o²®*µ®�ÇàQÊ Ÿ\Ê{‚|µÖí�çgMƒ"¾-/¶ð¯ò¶¯_…Q”pÛÑ'¿© ñË/:âÒÞÂeŠä+DtèíÛµ'~u³9Ö¢ä(ãD"€»M�"OS SÎ9W°²�¸´d’…ÁX™…�¶Lí+esrš¹—˜Bò÷5!? "ÜW%"gœHä˜)SJ‚(‰i m;·— ú:�úZKmFˆ*¨^BÊ÷ Ñ·µ|©‘+©0g'Þ�ŽGŠÉb­“Ód1µÝ0×”×yãÓ´`õžè˜6¡#¢A;“ð[ÊrkÕZ·�vtv�þLÒ&—ß*Ǧ�7°S²ÔÓ5Üï�òÔ&S6#%—˜½ñý—…8&©üÙá´­l_Ó® õ‚èP�À?v g\묣þ‰èð›«$:^ À¨!ºñA© Oe¢Ç6m0©zGt�rþtç¶¢©¸Ø*+ÏÁ¤aÝñdõMLßsK’·)Þ{®ïÊ£))BânypOqGÞcŸèŽQ�‹0›¶#ƒ ‡¢»qÛ *Œ-×6"µÒ;xwÏ ÑRÉ™aîžNú¸!Ý1¼%•Kî+³É}¥¹­ÌâÜVj(6�b·‡6XYXùY”»Ùá$ІbYÄò±,jÈrá�傲zg~oÚ6ÝTœµ…A½q9Wë–Ó\‚°n�ж5ÕÞ|e—±õ‹]“y tÿdDÇV":Œ¦rH‰Ž|"F~¨…2:áÄÑxÖ%ÑÑëù×h—zVtq ]4ìKvšPS°Îå’`�ʹïðõõBeih÷h“‡I�r(ïUÒªÿ2nÕ_éîc²tí aÇI:eٖƹ°*Ÿ½r(©´Ë”½!i‡á© ýg¯œ$„µãL‰£±>2h›r*눪¤YÇ —¸1Ý?¿ ÿÜ¢µ@ÓË`˜¿vbFŸ×ÀÉ$Ñ¡ØaIJˆ‘Stó2œ+Bû Æ�|W'­Œ^8:¿ëƒ�hô�(>‚ÅÿÞ©ÿæ¼Ïª;ø•â}9ì¬6ERO(‰¾…dñqô Ö* p'úÄ#nu:–Žæœ]òðNÀP¬7‰„•в99Í܈ cD ɶ�Ú7“#B”í3Sf}":¤�V5jÚ½ÐØ†kîDdÜÜ‹qâåWu}7 Sž†~a]¡¢@êÂQœ…©áDòG¸Á�XÙ²¼V|1×TŒÐ¿Êþã«°g|š–ÑeDGeÞLæÉ ­0¦¶[Uº‘¼üb ž Ò`õûB\¾­+§œè¸_‰³w!DꜨk{þ¾ë˜wP- ažè°m{Ù÷ç©Ðè ¼îåHæ&#H =©s¢Có8ÖíˆÁ…\ŽþjÑA«°gçJâiHcm� 6ÊWª ¿t¶èþÉ´ç1Z²ç¨°Õ­­õ9P}yW#ºkoN¯¿dÏgxhºy�[Æ�[†¶´~=‚0««Žø)/î³·Q@6 �û!¤™ÖŽäÞÕ+øã!ÉϹ§þ1¢îÙ©ÅõyÅØ!lúî,ÒŒúÄÒOsd†¹{º2¤õnÙyACBømgïåQû�JÚ/­ÓÑçš«PoùDGû:¶pßÇFcLGÖàdÊ'øÙÅ~�г#gAĹJ]ÆÉK·ùsgýs÷íŒ'ŸH.2áaÆ‚ÅJ¢”^ïºr‹\W¾©#×gàièº"QX•+á&” ¾?-RZ$=4óÇ÷5i¹vëÈf|¼Sn¢Ïýõ ‡¯éõT•ä“ϾiuÛ¿W ^Õ[[¢yYßâ Ù6¯¢ŒJR0¹§$ƒ§ÍÅîåE{òúöGÂÌ¡|0@í ¹y=~-kЦ¼ÜU¨*«¢¨@³¦MQu3E ²¥ßø —˜­(w±ÐUiðaU>{åTö·Bñ5Ž¿`CÿÙ+§ ãLé.R}+ K>Þm¼Iú«vÈinœ�˜1}ùíàµ#½¬êw½¼úOe?ššãÊWd�tsr*ÛgÑ¡”ì¹BгOzé¡{UÑÝ,¦Ýoþ-î~#fqÜYu)N#’[yI”É\¢Èue ïºB;¤DÒ6¾Fã¡X.‚*z:þù×? ¿ŠÃL�MSÃ0?ÍX~ëä4(A�ØÁ�(ËÞŠ´“wÅ fúVJ¶8~|Š"(ÏœLtÐv�·Èm¤Ñ£(Ë»‹y?ÜêïÚ½5þødcT“/=w¿µ>·ÂºBKt<Šã[óð×s5Ð[rÀƒ¬;*kD¢£ºŸý£ßÑ�ÿ�p?¼0È m›Óª+åÅdѱ^aÑAÛÛ¾§ßÞVQ'¼šcùÔ–ðªþÍÀ§×ƒž”ž¼^§t]Ñî•ødid{Aî%üß C=š#3ÌÝ-\nÞ(E3/R€ª±ë§3H¾+$râI!*¾ùªEÞÖ�uùâ™)cÐŽ”«šâ“øä«ŸXvíE=êÝá]ýùg¥æ^ŽŸ¿^{&kR¸Sê —Pš÷‹ûh­®e˜°Ö°–è ‚vìí®5¨º†­¾7bm`�ðÖ§užJE‡D;¿‹d.B¯Ñ3(ˆ­$(£)%ˆkŽRÑ3«øú“ Ê4‰ J%®ž/DÛàö’ßV.Öm£jhÖa=xB "ªîȽPšruQ*h÷rvQ0RZM m/_–o{y~ûJ *ÊùQãe$ïQðÅ�)ø¢þÑÔ?ƒºTàk jkà=H%ôýbùàÁZÁ«oÃÚ�w Èý¢zBsb/NÁź|vÊ©7æÆ†€¿-'öÈiÛ8 < /h/¶~‹¯÷žå´m ö ú”`Óò/t;æpIm—Óä8 †„ñ‘²÷—gßðãLϺ~óñg–Î[e�]Ú)éàfÚù"mâ2³‰´i?@*§²}–œëÊKèpç¾KÙ‰‹úÉC$©$^ц»hËe âõ*oé×räfe£€´ci ÒÉIEŒºw:UëšbrgI`ΜÔtø�Ê¿ïO¢]>¤»Ÿˆ" ”iå®+î"²6ÈÝo¢~‹-3{òµY9Š‚už%‘¸Þg~€ð±«Ä{fÊ4K‚ˆ%Øxf.ª©«‘õ—|]y© 1`úç–׫¢¨CB>jI:¶Là¬r ƒ»Š…['§˜�bÀÆ&áÇUqB,‘ýäâgÊÅIÖ®ŸR‰åçN%:”Vòª%ßm¤û  A5]§Õ4RŸ'W”-9¤TÌpï¯Ú�ѳÖ\R@ñ1,û÷� �ܱ픔µ×hG- &aÊ5A© q9ª)Hz#©JÇ]½EÛi~,l§C»vônÅÝb3‹ïU¢YóæÐï[|2ÿÞ&Ù¹C—Ú«×8Ú‘&XÌ«8«¾qKÖéÅěֿ³UÎ~ãf‘;…´£t2pý]MÛ¯\‡SòŸQHÎl•Óöq‚‰c èAÉ…´º;¶ÊilœUÞ§I3+ÒZVú[Öö»­óvहpT&îßCɶҜPÜ|_.Îweû,#:hûÜi3ÑWb5uÿaBÏ÷&Í„9Äc x.éqqÌg®üz—œaà)Q$É©_%ÍÆn{YÕ|õýßÐ_¿Á4qá�Õ÷bt äýÅhàO%’@§%'�4î9¬æVöUC�øÆã8´`±ÜeB"§5DTÓ‘•õ'ÞUšÛ~uÃÆaA )÷Ô¾”Ô¿¡¯'7òœŠø‰Œ¶Ö')¶S+q¡ ¢Âî7ÔŽ#›þŽ×ç¯% i2‚‰�ŽÄ·âQ•ާ¢çó×™¢ßEöúÉðÌËÂÊÅ`9¹ðp‡*j –-{ƒøÝæ,:¬•S¨ñWd�4®ˆb×1%�IúÁµãS&…ì‹S‰ŽËé×ñv–ËŽ^-ññdAÁ‰¦Vão+® q.ôD½)`5YJ쑉¯�Ññ(rÞÆ‚}–ií½ûúã‡ëÌð¹òˆèøÛ‡b�Š*d_yHH]CæºÂ Ð\ÐÆï>º‚Ïdâxaù¼Vh«x¯«¢Ã¿øþ]¤FÖRÇ~ùäUrñ ‹œý»ÉzB®­�HÛZI'“),%:ZáÂk}’ÛYEŒ”/ºY{Žï�@³0TaÛ·ãnÛYÝa’設>}v6BDP0T�µKvgP€mÍŒ�«±?#ënó5È"¹àãßIQ­ÑXs�‚€æ;<©¤*x¶ðÅûO¶·+¬©¦� EãGElŽÿr+ ÄþƒgKr©Qñy¬Fª«Ü³u[²&ñD“ WœqR‰ªô娺áè%"½¬Íñô¤Áo6t7þ»ŸÔ~n~èÑ«£v²ª§²/Ñš¹c��áD:tÔ’|É5U¨ 6n,a KÏáËä= WcÉA»µü>ÝŒ˜NU\ËÀÆïOHÒ*OÛà鉱�V[SƒGŸ…UTƳe(Ë´à» ðô8ӞЮ"™•H¡PøöWøí›Ê,ͧ4�§<'SVbÛ©Rx„ŒÆÜ1a²Ròö}FÛ¶æË®ÙüÅȪ4½4 ë³eØm¤ ¥‚fª^Ã�0|3c:zK\Œç½O&÷ÿ4br„idâoò÷¬šd^bDfkóÙ&§y\L[ÈÇÀ’«6Èiç8óêƒøX©Õ€19+Éêh™ÄêÈ9©XóxŠõšva²®ßmš·œ^½0#ž¶õ69.¹D´¥ðVÚRø¬Èt)Û'JkésÂ`;[®lãÇÅôϰ9ÓÈ6žÜŠ«5¸~ê(ÎÝ–¼sX‘»Ö¤2ER›ZCz1Ìâ]ÁNŒŒ4ß�Ë!µšà¾›´þànJq×íE5ÕÛ„ê厲Nˆ”Z'H¬/¬":¨¬8r¯YÊ»×ðE£¤¸ž‹‚£8¸£8ó?dͱXûEÿߎúôEØúi.T‰ÒB5½ï¸¡‰›¾…@æÒQ»\´fIøêæqAfõåႽ%« D@Œë3ÃÀ]IŸÅZ9õù ê¦ø.‘ß…#g Ž:Ÿ²è.Ô ¢£¹v,Õ»v¡!uý˜Fæ8#¹—ÂßÈ}å*¹¯È•.©¥De±;wá³KâÃRÖp/ÚMe¤/K^l¹•Xþá5“ƒC,ƒv¥˜Þ¿kÅ)Qdѱ.kÿõ&Dt´å-:ø"ÉUgò&�á‹ól^ 2w±œÒM“¤‹Š¤Ý`†J­ø¬üç‰Ó‡ÿˆ $“Ã�¥+jpï~´µlGÙ-aKVÙÕ¦ødòPŒn'oqþE%~w˜~»×Z‡IÛ…‘‡‰Jwo‹ÃsˆD†"_µ»¾~9 ƒÚÈëäîiJ ñÉÖƒXpMþƒµP¨ÔªúdíµåË#ïÐAÍäãÈ–’ÌæñðÆ{#;@ESï¹+H:eÙÒÄã=:`FWošåØ�v{9ó gäjö6í¢¢õ)jÓT¨‘‘s ë.)„ �S–ÄÐ^ À)ÚJ÷éóB°èø ûæ`]!¹Ö=ãígº „ï†Jl"÷œ4�£Ù­¾X MÆ¿QéÄxÍ»?�ð’�Û¹{ò\Esx#´wW­ÿ4mÉ‘O2ŽØj¬Lg|lP]^ŠŸÎ’ãÖåÓØ½+KArpeI EÑ¥çö"yÏYÅUå׿ˆ|f$zµk¡¸Au^8�Ý»©S‘Ôª¯®Ã³WÌ4Œêí/“Ž[ —jHJiÈT–[òEâÆ¢Ü곚¬6VVäë?›bHV�%y%%Ú|2bÆÐ‰þ¨$·�5äblœÊ4Î"ãQø4—ÈF…äe¥PŒC« Ò 1p\žn¥¯JöyŸvúñÛoŒº ð }{aÒäQ0æa¨.¾ˆíŸoÆYcB[�Ïz9å¸ÈšE_œárÄÕa�œŽgA1ù¹he$ fµú2wnÇÞSJósëääZfO.¹‰IÁÆ�ÆÆ™ö>¬èw[æ­® “„ç'?‡n­ ß;«ï_ÅÞ¯7#3_þª ¨z1}„›G̘+'ʹî‚ÑÏD#¬½ë!¨úþ-Û³ ;�+û@�ÖŽ“ßp;7§ MÓKD’*’Å…(ñi-.æQ²âœ�x•vßÈ�d1<�Žìü?é¬Ô4H}g0¦“{¿%GÂÆ�¤£tHmžRì_“ˆ¸E;Ä"È2ãàÁ?�39²æÚ^V²L-´Átݱ‰#éõ¡à 8„RÕÈÞ¶ 1ñk…+ ¹äM}ƒwñ¥>¡O,ÆE_~ô\ìøp:Â}äsBSR€7}ˆé‹¶êS ŸS“>Æœñäj$ÏB÷ÕÈÍÜŽ·Çί¥ß«å¤ÒUqKðãÒ1Â8;²a6bHúZ��N„¾¥ó:ŸRQôçN%:ô•¸ú“ÛZ¶ðfîQü�FÜ® xÍýÜѺ¹¸Šæj™êK}NÎÃ_/ÿp¼ŒM±dt¦Jãkp•”^ÆØ� ® ÊzcÛcP;Þü2ÿÚ ¬È+S&qø÷ÇZùaDûfháÖäñ„ük·¨^Ë”{‡ c¦ÀîªÎèªxi6“ÜÎ[�1kXgôó¦9T^ŠíÇnà+Ö!þ¾ø=)<�=�¦¤+÷\C¶œ²S–Ú³ûx5F»‡ŽŠr L\îbjÑæÕÇ6 âtžÍùkÏè‹á“Æ€÷#«† dÕàš£)º„wC Žxø­ ¹Çrp·¦viíMÑÔ· ZzÑDçxsZ)¼Yäüö6mŽ6^´*Å‘cN«Óõxzø‡ Opkj“šâK8|ɳÈÕCø•Qöö]]å÷ è�°ŽÞÔÆ«8|*ß*1‚zôCz¡u£~¿|î0ò‹jÉîå‹ U[x{{“Œ¦¼ùÎㆹí^$Eú‡ô@€·7?Öø¼ù”W½T’^ju>;åÔ×ëôÏ:�ÓË?�¾ðæ&¼¦Å7òq¶¶Ž·BN%Ñq~×:üPä�°6ž§7Ïeã¢}Îaou¿ÛØa&� nLs°\©‹–)ØVWI±iB‚àCsˆ?¨næ_ÀEŠ«å¬ãΕÓÈvŠ¿ŠDb‰"y„Výc—{#.Žv—iâ uþ!$§‰V’\§KöœÁ„.Ô Fw¿0H®¸ŠØØ0P\d”•å!EçF¡H䀯þˆ�‹¦E©r²X¡.;·"è�ªrHÖãƒðVÚ1Zvé$R2jï?>Oåáø´²ÛØ›²Ç¸u…É6Y/'† îw(ËI#ÍÌÙz1>å  ‰yÙ7=×ÏÏÁ;§ýô_�ö984ÿÓ'½;¶”ÄÒVXƒm›¶á•¼G u�Š‚ƒÚtB¸¯•«Håø¯ýº¶Ã”>:÷�jÜ,*Ãõr )†�Rü”ÆhO25ã«Õàø©¬ 8ìpÕg¿DÅ‘ÚüìªÑ½3žŸ8Œ�ùra÷Ø}Áùä"·F`�0ZùäÈè ä�8‰[òE=»šôðe®'xº,àäÃ×ìŠ=J¢CpíÐ'`Ÿ.Eàþõs8rNnÅí$Ф�Kˆ…N]ñ-þ2¶'Ÿ:÷«ù2ÇÐzÀ¢X2†€�z8>Ñ!ï¢öÛÝüWñÖÑ.i_ùœ©ò©­¸Û¾ÙƒWθB‰rIS]V‰?Emï߆�bã²:å5B¿N>ÔÞ�¼Ýјüm5d)…êÜ%GÁ“Wï õR)mXÆG"P“÷Ôqd‘fËj£jC«l7�oÝÀIñ¨Â ¢à£\;{×J]`Êa¶õ üf}Á“ | 1ñŒè¨?½Tqû2² Ü‘œ$ŸÍФ?â—ü?Ä==]ôî%Y˜Ú}‚<ˆ¨“ÄfÅ>$ÔÃñÉˆŽ‡`ì•NÁ›]\ÖÒqC†`u”Ôr¤y¹çñ·oO`‹kìá]ÖVWTÔ²y; V)ýû]Q3«£.øíÆO(OßW—"8½n7/?´|¤·J˜)‡#À®xR°À¹3‡Š;?< ®+ŽèVCÀQôŸ€áA¢…§©]€U+Ç8š{Wñ󱫯o:ãjT"Îoy•·–ÎÙð ¢ì±°–!HËÿÝt©ÕðÎó“‘\¯]A,lKV¨‡ã“õgx8E’ê²�øc—®´vî…ŸÆt ÈëÈ:}[NÝÄ^FpØÔ¿�[aDP+raÇC…Àý_Q¶mÛCÕdÖØ <8"6þ#¢©§¹µ]ÂúUßÛÄ> ­dÍ`Ô)½ž Ñ�áÞÝŠ“PŽÜ¬�y‘¹�º²S~«(DFÖE>Ô“ëê EÒÆ$„7½ƒƒ`1·õª…GÂÚ-xVU†Ì”MX°ÚD0I ËbÉÆ¨ã“Æ{ê�¹:Û"—’ põ¤!ÏvëÆHŽzÒ®£,ù=WVÇêb0 †CÀ ~Þ—åb’à áXR†C€G V¢ƒáÄ`0 †C€!À`0 †C ¡ ÀˆŽ†ÒSLN†C€!À`0 †C€!À`0jE€µBÄ0 †C€!À`0 †C€!ÐP`DGCé©@΄�é˜7´ R“¦`úêC@‹X �‡�°Y8øý[hS�Ž—Ì@ÆCÓpÖP†C€!À`0 Ft4¼>k�/ü*3û·æe/ÜÿúÄ­j�í`B3'añŸ"uÁ@mã `jŸÉH{8¡`­f0 †C€!P mÐ…@IDATï`D‡=]6Yß¿•›©ï Ãôõ–oódOµÖç�@òÑÏ1¨µެ�ØÅ®µ¦ˆ_›Ž#y± ö„ȸeÖ7�å`Š©ÁãÌXØšOV‹_\]Ÿ¢9)iÜŠ�X:¶ _z^êB ˜þ¹“jbÅ2 †C€!À`ØŠ@­DGTÒvl™jqùÛ"2þ!yñ#¢#›ˆBÇÕ‚ÅÂ'ŒÀWDtôw5Ñ¡š…£Yo�wXQŸÀ¬àç�b�àõ<µv5{¨Ê %ÙÿA÷˜Åõ\ÞU¼³¢bÇ SS ¬ì6Ú?õ6Œ¥ç0ãˆè0ÂÖ|¶ŽW×g«œb>ûÇËŠ='1¶K*R�¯f…a΃õ`¡bg †C€!À`0(µªØ¹ø¿çº••Ú&ÒG§ÁÑo­}ÉËܶ7áÁßó �sßþ‹Sê« ‡ƒ{‰f�[�Ž¥£9— ¹ö ®Ç®=f›aæ¦h)È309ýÖƒßa‰[�:»�ED‡n[óI˰æÜÕõY#›˜Öã…HÜ,"qUT¨&o+: ˜/ÏÎ †C€!À`0ê�Z‰c&|uóú“CIFvŸ€“Æ鯩"Ý£™îÛ}¤¥iãCDO�…¡�MP‘$y?cñzC·UØŒÜ]üÀ‘(%·/àן¾CJ†eDJTìtŒ~¢³–†©,ÁÉ̯±>åŒ^2ŸˆO|�ý8ò¦Wÿ„åɆ²ñ™%DÇ‘¥£ûe[$¾1~$¬®aÛ‡Ë�V`¢ºìºö™·è‹‚v^$­_KÙc¾?M7Gq‡êÌ&+ÎÜ¥`'"#ãkõeçðèá�ƒ´ŒHHzí=*qa_2VSŸ…ÅÍÂÄ�&¨ âv.ZfzE;,‰Á£ä6¼ýü¨ÿ¾¦þ«=&‰*z & çûŽë÷Û²±mõV£Xðr¶JKðîºE'KuÎV¼>g3ÐN7ÖK¹vX6NÀÿjÇ<ÒhŸVHàôyDõ©h F´Ñø+@(¦&¾€0?Î)¬'Sÿ…õi†XÖI?H°±{æ{[l :lÍ'i¦U§¶Ôg.u9oã7f`ÁPÎ^­+GF`±ÙB«`d‰ †C€!À`0ìDÀ&¢#1åf÷% ¶V3jQÁæåT1ü)]ŽþS84'0µÓs¿sδx†ª8«Ã#/ý# ˜d& ¥*·,&"…ÓÞ出à(Vþé ,7¢8E%¬Ææ�à]Q¤¹Ôyéx�¶4ˆ°/!:Šs‰@éªÈ[ŠmI/"~µ’\quûÄ~PºØÄ&mÁª)´RÌHŠ|«Í�3R\ÌžGQü’-Úø%¹›fcÈüf“CâæR\øp:.h�›S€ŽÝ!Œ˜â,Œ Ÿ`@v$¬ÞŽy£ ݬJrwâÍ!ñ†ýÇ—OceÏ{Ú…cd”‡9é_bΤ?Ë�…;Nbf¸ñ±©/¡8ó„�uT¬±ÿøò-žGZi¬×úF¸picÝPPßMiÿý³àW/„ö3‡\â¢.q®ï�LVãbç|§jm!8imͧk©ÕÖÕg.õ`ÞÆ®À¥UÏòÏ¥ì £i� BœG1+R–`DW_¨oÃû&#ÙÏY«{ˆe`0 †C€!ðp àt¢ccÖ¿ð¸Ê¼Z¨.FA¹7T>:-F£Ü輄üλËýΗì9ƒ ]Ü Q—¢øfÊݼHåèÓ»‡ŒAÚù%è¦×C5TgA9¼U*xëª-!%´»B K ­çé¶$W‹ÂÜË(÷íˆ@½¬…éÙg†Lá…„èÐËU\�‹"ø£ ÅmÐ¥X3®7eèSh?]Û>QQ–Ñ ·`ýL=ÉQHrFÈ)—Úòo‚ƒRlšÚó X"EYb„»Sœ—KËü] ‡Ÿì'�—WŽÀ@nHg&Iv¹‰ß¸�VW9Crî(EnöUxv …JO˜ë?ê§÷bl n`ÐøÌ½t“,[|Ñ‘êÑ^-¥ÕÚÞ²ÕÚ„ät$Dø¢œ¶Ãðôöuq1ªÜÜáîé†C˧ nyí–$ZykûÏ)„¶Í#›Æ5/NÝÎ#ua.N]wGßpín=@!–FFa¹D9t}?pÀ؆‹íó];6„ùT+¹¬M¯ÿok>}~k?­­Ï6\ê˼‚ç?ÇyÖæº&¸ôè-9òºÇš!ë­ž¥g0 †C€!À�!àd¢CW—j.²³Þ�X;â«w¦`MËÿGämÕgìå=*SÛ’«‰DYŒNÄÑõ¯òÁ-Õü1ØHðÇ„ä ̤U† �$ãåØ9—¸ñ1ÍðÁ�ÉŠ ˜C�B/¬}9rDS€53žÀ"�bž°1ó†j•­ýäž·\b�!#:J‘ºt:¦ë”[i¾ÂýEŸ¸µ2àáÒöÑ i›Ä™„=É1•HŽÚÈy Ì~ £ÝVRùÝVJ±�ˆž ¢Ç ³ËÜmÅ�øµH ¾ŸÇY‘’»aV¤„RPÕí†AUi›ß£©ohƒž–œÀ;O=‡õ¼BŠi_bl7-é”Iý7VÚœÒz‰H1ŽÑ(ø‘s$bE )™ÜR®|ŒØù[%×¥§¢<.Q\¬žG6ŽkjbÝÍ# 2×$`ì"­PtÒ·X?¥'I¤AzR,&XGqýáº~° ÑÆùεŽ;¬%´¹lϧÏoí§ÕrÚ„K}™·âsµ6¢Cºû‡©©ß/kñfé †C€!À`0Œ#à¢C¶Z¯Æ¶yaˆO¦—ð…ßbËÌžÐä|ŠNÑ6.¡âj<Å[X0ˆ”_Š2ŽâƒÈôgÕt ÷'>@Š`død�äP#û*]õ6´1¸N¢œç�{F´Ì=#†”è•Z%Ú˜¬2 Ä/Îh ¾�s±D^Çd Ö+Ž'9¸ÖÄá´€#œ4¹˜×i¨»Í–¢¿»ÞEJ$ÄvÈ,Shg õº��Ò“ÈÒcµ$žƒÄ%ÆPƒ=Dt�áq)0µÏdî-¦Då1,ÛT;®[9�l×u8�r¿š�!s$Ä‘XÙDbqt—´Ïå(º¨lÄE.«ü›Ùù.Ij5� Ëkk>IÕV�:ª>ó¸Ô—yƒ=ù+Ám4[ëü�MÂéUqüVä ™+Çcìb ‰oÊ,1C€!À`0 †@m¸†è”XZÉÊMFð�¼\ª( 9"ê³iÆFª†PpÏ1ø]x'4uªÊ€ý{êÜ`Œl³Hõh}ýCâÁ4¢Y±†H˜—°ò„Ò’¼L\û%¦„ÙBTÒ®ì5ã³HþâºpÇ1ŠåàÅ[¬L¥-! &\Ô>)ÑQ�}Þ᡺ö‘¥Yr,0Ì4V–Þ\I¬&:DW�è¶nZ©Ò+à¬9C¤Ê(©Šäìíà¸1Cr,k�nÇH­%Р ;{öìAê§kÍ’Õâ ÊS«¢c)pæÒIÆ›%óÈžq]WóèÍ£Xé<’´YÚçr˜\Ô6>_Y­�ïBFÛ-3E ™3ÌZ~�c÷%åHO¹•Ú,ryᎼԅ0ÝBw™¦p%�ÁDÁNDFÆm£=\Ý>)Ñ¡W�£?Å–Ùúít‹)VG„ƒcuˆA\•í×Á ÿ°´žèеå <²rbKvÆ‘ð,¦m…ÃÛ CåO;®’ò$q!ð—ió±þä ¨ÂbðFâ›xé oü+î ,Öû‘ð¥IV’;Ç‘MÇëó×òÄDXìt$¾�ˆªt<=_ +øl% šBlJœ‚ùÉœ’ƒä¬¥¤"k:”«}®oŸ¸â-UÚã–lÇÒ "žKG’õŒ_¾§®Ý‡¿ŒT´5è;ƒ1i½!¡ÀÄý°´žè€t7 ÚxÃÆÑ˜¡ºTc�’ú7ôõá¶U¡@³³B¯K|½Ñï"{ýdxæeaåâ°œ\\¸ƒ ’»lÙ{ÈõŸ9‹¬ÍÚ‹‘**Ÿ¶µM÷œVyáƒ+>ŽC ›py᫱þŸ•óˆÛvUÄj͸&ÉêjIÇ'�0.Ì‘;®ë[p±g¾ë‰@ P?î_9q‹éªŠ@ÜàfHN6ý<µ5Ÿ¾^k?­©Ïf\êü•Ùš¼­è4`¾Y¨D\´É\BŒš•ˆÝd0 †C€!ð`#`#Ñq ³9WcÁexQtü¬­"(»n~;>ùK¡…yd á£BkoNa�Âý OÜ*ñƒ”앤܊—5 ÜÜļjÚÅ#8f±˜€ÎT´ýß�’íÿ(X©¸nh"É—I[³Ž]nÜZ@_WUÆD寑»Ä¸>3„øÜ5×·O\ñV*’Ò8PŸÁ;ƒGa½ÞôDß(›?ÉÂ&_oas³‚GSBÑ‚B+zEHt 1NØpeÈI_Å¥ð¤Xú^/ÎüYsÈû<á+"ÅúKŠ%å´ãŽ·– âe3Ò‚Ì\½+vbéX1h®Z­F“&Úüdi©u�´PƒsÛæWŒM㚯¿næ‘r|Š˜9¢ÃUýÀc=.öÍw¾3ˆ·Ùå®hhœÑ@ãB ›q­¢„¶æÓUkõ‡õÙŠK}˜·+È-q,ç–HGú;£ˆÄ•ü.MÞVúé4òd$»Ä`0 †C€!`#6ÂnÅ0.|²L‰—Ë!*Øòë p DRLR’bª©+¾ÅÿÛSPTù;%¹Xóþfô˜õ?d-á†b": ˆ.eVìøcÃ9ké¡FîþoðvÜã2GÏÅŽ§#ÜG¢èRvMI~Üô!¦/Ú*-Œ´Èé8xðOtS#;ó2ºöÕŽÐ&+¦];þH»v déÚöEÐÊþf~‹U¥u 'é” ŠqÑšZ�ó)‚£ÿ¬m€þ‡ÅŠÔZum-­ÝZØ h�è(ÆšqX”AÊëj"FwA1ú �]FYôDYˆ$ÅbÒj¹r›ø1’^ Þ€C¨€úfÛ2Äį®HO¦&}Œ9㇢µ¼Ë) �•Ìíx{ì|ãcER·sDí¤'U´·J±M"âí�¤´õÔöyÄ×hí¸ÄtÑ<"åøhêàFà‘5¯Ðö² a\h�JVAÓÍX9¿ôÀX�‹}ó][oTÂj¬›7B·5´^5Ò—NÁ¤åZk$ýUé§­ù¤eXsnM}¶âR—óVJnîÿˆÈvîÙTË¡³BÑҪΠ]‹ì6C€!À`0 �‡›ˆסŠèØ0´òõŠò‘œ"*@Ñq/ÑïçH3çj�Ø.�hÚ”$.»�½”ßc…°è„·¢:¹l—N"%C®Pó7Œý ‚¸ßðwÊò!%­¶|uÓ>c¢;óšÔj¤€®H3—ýrø#6.¾ Ó "/rvnE†�Î÷yõ9-”[3VDyCKc•keeyHѹÁˆ÷ëþÌöqíâydT.쫟/vÎwz&D++Ÿi€­ùlí kê³WÏÛèÄMX?;’E“÷ ˜cÑo Ÿ�s5ˆ²œô›B®uì`0 †C€!ÀpõœèpZ»YÁ.F ‰ÿ):"ã.G.ˆUÇ`0¬@@j�†Â˜Úg²Qk=+ŠdI †C€!À`0œ„#:œ,+Ö�…Éû0s�/R“¦`újÓ¦ö†9Ù†C€!PÇDÍÂÁ-o¡MÞN¼< ¾V—¶:––UÏ`0 †Cà¡F€u÷³Æ3 †C€!À`0 †CàÁB€V²Ö0 †C€!À`0 †Cà¡F€u÷³Æ3 †C€!À`0 †CàÁB€V²Ö0 †C€!À`0 †Cà¡F€u÷³Æ3 †C€!À`0 †CàÁB€V²Ö0 †C€!À`0 †Cà¡F€u÷³Æ3 †C€!À`0 †CàÁBà�&:¢’0¥Ÿ/J¯gã½ù«Pð`õk C ^#Àæ_½îžZ…cýW+D,C€!À`0 †@=Eà&:"°ãÒf„»qÈ«±a\dë…lÌZ‹Ç½�*á6e*9Œi‘“a4‹�®nNb“6áýñ½àŽ›X98­×~‹ñ]½QUTe®¤êg­õ»ÿ5,�õ³�˜T¬ÿœ:¢qzË«ð†™+_ÂØÅ‡ì¬ÎQóÖN1Xv†C€!À`0õ�úKt„ÍBÚg“ѼJ¤”˜¹»—`ÃË£°ü¤ò÷=)ç7£oîÜ<Ñ!"\ZÝ¡>Š©Áã�¦ÿ^�>î8†™á^$Q)VŽœŽßmÙŒþDÔ@}‚d~®^Ê\�à«sQêwÿI\ TVÏK矤Žv—ˆ¥xm½ÝqdílL_^»²÷.V¼=ÝZsó—�çã‹Åó±<í†öZ½øÿà÷_�–ˆìÔWáCBd¯y1‹öØ)Ž£æ­�b°ì †C€!À`0ê õ—èV¼Ì!¥!K�P–@,çº2,egvàíùkMº®DÅŽA§¦@YÙm´êm,J¤ÁQŒ#¢£>Zt(åLjèÄ…éÙgŒò><ŒÚU¿¡*/”dÿÝc›·ï59mƒÈöþ³­>ks9j>X:ÿ¬•¯îÓG`ÉWK0¡  Š%ÊjôÂMX?3RÈ#=Qg„à˜eÒKu~þàö_�C 8œè5oë:L†C€!À`0v#P‰é‹`j2Ž\<<”í-Aꇋ‘æÀàa‰[�:»O½&:âV§céhNÉ*DRälDÿ¨µè(9òºÇšS–h•ö4Y¹)R߉ކ!§rUôL?ž¥ªÄí ÙØ¶z«QÄ1rÇÌøUDGwão¥¥Q_…Å`áÄHT–TÀϯ’H´eÆI4U¢#Z£4÷2NÃŒÆ`´v ž¢r•ÃÎÚþ3.»k®Z=lœª¨!ˆhJáð ÅÔÄæÇ™)Uâdê¿°¾V·ÛƧU(ùzžÜ x²‚2æ¤î„û�èBj#:–ì9‰ \B"'׌‹Â¢ «jv]â:ë?4QƒÕkßÅèðÖ|a¹›æcÈü­BÁüóÅ›{Îu@BÒ hïQ‰ û’±:å ÂâfabHTPê�‹–™¶ä£gDâÄAð(¹ o??zÎMÏùÚ]–¢§ÎÅÈ0?^–Ûvbñ·aÈÎzËÑ!>— ·ÌÝš «ç­�ÕŠy$!ï4…'ð¯ù3±¸Öy*TÄN †C€!À`8�@t”’bÐÛbÅ já·Ø2³§h9^Aô‚Ú‰[^£Vã?óFð/­ÒŠÕyéx}À ‡ÇÌÚ¨9�q�žÃ“;Nbvxhr>E§è?KEàÏÒý™tßÜQœùÂÇ®2šÄ¶öÅ`ãž÷0´ ·f©<ÔÈIÿs&ýYFxØ+§²–Z¿ÓªêyZUmB1\öo;ŽÞ£#)8 ô(ƶw^Büú3’‹¡Øxt;†rºTñŒ Ÿ,k—0>9 q ¸*½ H:kû�+³®kçƒÐ6…Àf秉@ð¦~HÝ”†ðß? âídGζ…ˆŽÿ\vMÿŶñ©ÏmÝgRÊ!¼Ôá–ÏG15BñÕéí||³D‡jŽ’RË�ˆÂô¿¢Ï¤ú»ú]ýg]O=uɧx{Â@Éü-FúÊÿäÅ;´$}P\ø]ƒÜœtìaÈga\ø²#aõvÌMn�Š£$w'Þoâ9�ÕÿŸ½·Œ¢:Ûÿ¯@‚ o�¢[~HÀ˜§bÓ¥±©4¨Ñß6ÔòRQj€oA…šÄ bA…>Qú€T�ö!ú«P ¡´E ©ûD V±4Õø’BŠ °Àß{fwfϾÌìÎìæ ¯ù#;;s^îó93“=×Üç>;Váæ��˜,�¼^¯ééþ#®ó¹$bZøÿ-»sŠ]Nï[-«ãû(ÿìø¯h²î|Ó‹BŸëŠYÜ%   �#Ð.„Ž5"tD_1%’“gÊ2Tþ8'|8�–Šnéþ~Ä�ÉȬú§?3g?‹Ê9×Jó¡þà?p¢ç¥è×#ð³9fÜ Cl{ §ã�[²€#þes/—X$²zâÈ;1×øa¯äŸ]Q…ÙÙ=qBâºftëjþ ÷64àtjÒ2RñúÒÉ(ŠLÑ]ûú`Ù®W0®_€�·}tî‰KûõÔ)$b§ÒÜøw•éQF¦Æúz4ÊpÉÓÛ†êE¬È +¦¬z�öH–&‰~mŽ’éA¿Ð§ùjƒþ#fE›ŸNûÏÌØ ;NïW÷_”~ðÖÄ_?JÃUYFŒz,ÉÉÅÒ0÷w×g²@f‹ÐáŸ6f÷|1Š�³NVzâóÓq_Á5+|øÁ»xùù_Ååm–,«íÊiéþ³³%žsžÂ{°ê'ßG–2—¨nï ¸¿pn¨ð �•© µÏ@�ií^®­=�~ò|Ò¶ªy#0quÐ[«xí«(ÍÓîymkÂÁš�Ñ0<Æ ßâ9¿x»xò š½l=fŽfz:A¦fmZ:ÅKc¿XPLæ. � � � $•@»:VÈ[ño¹h·çqžaá½�BÅ­<´íNí Í÷7e@¡ ^*˦bêr¿zIÅ«˜9Ò?°©Ý4#Šƒ.ðÈ/û«‹ôöµäÜ,åœâÎ1H‰Û°¶“ÐÙýfw¼÷_H?Èr›+fcÜÿ›øü²—°z²æ¡åCUY!&.Wï#·×g˜�®¿::¼uØóW†_eˆ7Fšמq´Õ?›½ÿi¡öYˆÉ# ix+ÊîÆ‚ õ œV®±ƒ›bTñ*Ìïœ9WigõX3=¥ƒÏ��{7ó쫜¡{ä ñMÌûÚ-X­ nƒ±lûó7Äï­±GžóãÔç¼< I\]î­¯Æôa°Q7G¼<¶‹—G _H]ÚyÅVGçô²ýœÝ·I¸�2ÇbíS÷‡xð5¬ÂO¦ß� 7ÿ»•¶p—H€H€H€ÜhB‡4ËۄưUf3Ò>ÅÏ¿{-í¶i¶¼ÅsðÍÉDõ-ØÞòo£p‘�ì·¨-þ Ìâ Fê¾}c±C„Ž�Ú/üú×0eؤз«6]f°3Þ”ÇcgÌâ¬(Šë$¨ëÜ€›»žþ6ìz´!©¯öñ̘«”25[0R#…®tôö¨“@±×by˜‚RH»Øur?D4(ÞûO釃"�R…#dÖÈ 3ZÐF÷×g„¥.杻©Rb~ÙkÔ)>Ô8€Ãi}�5ÐïA  m‘ÞAJ!­±ÛÌýç¶IžÂ±ùg“”€°^ìÝð8 gÙL 2¯±`̧:fŠÐ}£÷§ÚUeâé±<èéeJLø³jöR†kW®¦gb–_åð7ÛND2muèí¡urß&ó>Ê—@° ï �é±âÅž5s0®T}¶*†r—H€H€H€š‰@û:¢6Þ~iY=‹ÝƨeÊXUý FkÁ"¼obÊ [BÄš¢eÛ°dœö6¹AbÈdbȈÝ52•AÆ6Þƒ4ªÔ‰5m2­“û!¢!|o¾®ìJº½+D0TûA9.&¸¿>#,uy x�†Û¦\NXŽújQ^”g ´™³ŸÆæ9yú[ÿ†�'§(zœµ¼Û·abƒ’ÎIÿ…”áàKH‘º*Lɉ#’ic0æ“)t˜KmGïO³ÿ|ocNÿ1¨±U=%8ôx mhïFùÚRåSd©ò€³Ÿ?·i�C1Ã.Ÿb—“û¶9ê330ÕÇ+±£E‰¥˜Ë]   H:�v tH€Âò…øÝGÎÖ1œÀŸVG_½Ã¤ç�B3½ì8ù�8[‚NÎуNª%DÙ�2PŽ’ªÈÇ#t$Ô>Ïmظy>®RæÎ ¬?° æܸ�£ê§3;ÕœŽöc\%òFv¦¦Z4î“Ìxs£×¡Ìù?¸a¦x!ÈKeJËñðâáãȲ6“ØÉýat ¾fz»t6çº>ÍÊÙ ^§vBÇYúa}9謙’�Ò�/$žÍ[ÏF^�[ÄyHÄ„òÚ°)×.�ݹ�Bâÿ"tHÜ‹�¿zE¥ÑÕš¥šv8:LÁ"Ús@*0χJÐâhùL{Z_èHö}”;¥ �Þ;P¬‚d›}à   hí@è�¦nctØý˜´€éd`§¨óÉô-ØgÄ&QñÉ+?¢8buŽˆ´Í~ 80‹GèHFûreÙÆÉ·^�/g^Oÿ\v½™²²ÁYÙ lÌ àÌNרb\Ñ0Fmâñ±o—ßk¥~ú+F‘ h—èÚZÌ뛇ÕFÒvüéä~ˆhf ¾fz»t6ç’q}š6¸Ú ^§vB‡ùÆÜBð ^g‘žC®ÌJV&ö!UØ¥³;Rˆ“/Z|ŽÅŸ#ëD[Þt©,oºÔjySÓŽä óe Ì4-ÖG˜Ð±ªz£ß#¬� I»�–÷Õz´±ö5þåeCX˜?n£¼5 Iübì¢ý8 &Ó÷Ì´2¿¾F‚N+«º(SØöHŒ•qÁ+Á)!Ãiú`+ÁHµkw—üïÐâ5G<•2Ã\ÛæS :¹o¹�<ù²¼ïâÈå} ËûÒ‰Céî’ � � ´8�óRèðÈ›O@~Œf—a— zõ“kf¢ t/<úñcÔYx_˜?%€æÎòi2H–Šâ!Pt]TT„STÑIú½ë~Š»æ®‚VtfáT”Ü[ŒìÓUøZþ\ýX‹÷nD…J€MY&±lü-X®y s›Bö<)oöü¥DüÛ/âŸh"úæóùyFO ïÁd•ž¹–¥¶T¿·tÿY6Øå‰üÙ²¼élYÞ4µ ë¦ß€¹š ¡mæuübôeP,T=tB=SŠdšÚ}šš¿¸Æ†&dHÌ!£ÿö¬”>_ä?iþíƒe;þ€q�çž @�ÆwÂÈëZÔê]¸ÙpÛò6 át7ôèfÔf•Ϭ8ÄÛL;Ú<ÿÇ °õÝrd¥kËû>)Ëû½YK¸K$@$@$@­B  Æ\duùÎØŒÌyÑ�¤2œ0Œ¹÷®”iá?J�³ò6LÞœ=£¼9óŸñ¢jÉdLŒöÆUÜw·>1Ya?`}�uøýº'0uÁ ÁÂÛÀÞìµÛ0;o`—&ì\Q‚¢²zHøæ¢}SʞƬoËTŽÐßôR²÷lÁ}ãb»6;¶SJ÷-Æï—Œ5”{Å“§°4J›´6šƒÙo¨Gc�Þf>ítƒ¬s§¬³[ûb¹MEÍû÷ÞÎúP9ï:L]9eÇ2»ãj}ò6x� ÈJÃ=�j›ÁÉýàêþ1e_å }ÚÏÞ·Ëò²J{Ì>²aëâú´m°ÍI5p£U²àÀ9,Ea v=~'t‡&ó”«žÁ„‰‹¢‹qfº–é÷Vé?³�ÉÚ¼ÂFTlTÄeó: þ?)Z.KDß< "NféÓø ¡Ã‡ª²BL ›~VXò4ÊîʃD ö¢fÓã((^ea|6–m-Ǹ,s­m=ÏžuÏ#í“ĈêÉ“;ÛŸ¹C eL+]V˜Ù´ôøüÔ{õ%¬£æS¬prßêÙÜÜG™(ì¶í’ŠUÜ%   �–!Ðv…Ž–i¿M-}�_x .ê,IŽÆ+wĈȸ9¿Yeèe?ô–üøS~hÛÔÔ:§£°0�¥}Ç�×bc`z‰�-nÚ§çé+LÄ1&^Ž¡68·™£Pô•¾8~`»ô��è`~€½âuS¸´ŠŠú‰‡K¼ï¿ŽŠíñõßâocÂ@yÛ²êBh+’öMqkGqd’V/œßÉ«;¾’Ü\Ÿñ•œÜTùE·¡¯€^ïze+vGu7 «³Õú=ÌŽÏü×>(,ÊGOˆ‹šôá�m/ÄÕÚµù•¾=…Þ‰¸óh¨ó ÇúÿAþÉÔÉx.•Ð.r~ß¶—û(´�üF$@$@$@¡(t„òà·ÏEèˆt�Ä”e/ááqWè‰n˜‹Q³š×{G�_Wµ9­Þ$Çg?Sµì÷öÑO´’H€H€H€H m ÐÑ6ú�V´×BG/þ1оqÓ•«1eè„°`®ÉoTñZ ¶š§¹Á7 |t6iÁd¹�÷Øïç}³�$@$@$@$@I$@¡#‰0YT;# A0ß]§æ�Žë"?îX£°ýý_`H ¹Þº×0ïÖI¨pîWîØ`¬ª~£=éW@‚ÚÄ™qX0“·iì÷6Ý=4ŽH€H€H€H Í ÐÑæº„µ�Á([[†¬ÎÿÆ®5¥Xd¬Ð‡³W­ÇMžãسqJ—[;�£&!     H. ÉåÉÒH€H€H€H€H€H€H€Z‘…ŽV„ϪI€H€H€H€H€H€H€’K€BGry²4       �V$@¡£á³j       �ä Ð‘\ž,­Ì^[…9yŸGeÙdL]þz3ÔÀ"“J s:vm¾Ÿ¯«ÂwGÜ�ÝI-œ…‘ � � � � �€= ö|x¶• Ìß°Ó†÷Ö­¨ßù†=ÕʱúX2‹ŸEeé5þdõ¯aʰIØ+Ï“ � � � � �@’PèH¤¼¹®~é^xÒ}عä6-mNoƒl¬­^…«»§M›S�Æ?ã{9“lÞš»ÍgVÒj;Å«ªP:ºŸ^ÝÎ'‘Sôxt[2ïAõæð¤zQ9ïzL]ýqôt<ÚbòKÖaõ̽>_ío0bÄ,ÔµXí¬ˆH€H€H€H€Hà³L€BG"½ŸY‚ý•wB´Ô¬¸ v$RZŒ¼ÙØzè9d‰¶²y÷aÊ ñ6oÌÝæ ©¥Å¿äÊ@y}` ì=P�Aù¥Ö6´h?X›ÑÖÏ\Þw(~zÅ¥è“Öû¼†iïµ4ùûïÇ]u‚÷l´$�z¦3·ý {¢�+Z¶ KÆ Ô¿ÕVÎLj©¿²IÍS$@$@$@$@$@$�:á(ì:zHÍ/t¹…cÑ¿3püøa|ák÷¡tÜ`@„Žñ"tØÅAp›/4 åõLǾê{¡OXñ¾‰éƒnÁF»[¸ìLi›ç.Ä£×Ç·ûh’œ{sÿ˸é­ÃÆ×ˆÏ¹_-ÄŒ‹Ò"Ž4`êú?à÷ÁQ÷–íx ã¦Ë9/6LÏÄ,ÛŽŒZ’ � � � � �€#:á KÜŠìÌ’õ¨œ9,.¡CµÚm>µŒæÞ/Z^…%7kSV|2åºØSQZ±š›E¢åß<ä+˜y?ôîZRl¡ã&:.€·éC<õ·�qA§Ž!œò‹ÃchB× Ï–8�³¶êIŒ˜hx3�Æ­`á&ßìå[0çf™&¶5܆ÿ;ªX‰25[0RzkVbP�(?[nÉK"Ô\!g›°bô—°ÀüæJÜ“õþ¸'×ÍĨ¹[-JP+ýÐpðm`à`}:Q0E6•} ÅËå\Èæ¶DŒÙ/bŒ1Ä[�уžÅ‚}K1¼·DÅ÷&¦ô¿EáRy‹|yè«7aB—Oñ³=¯àgÿêŒço)@ŽÌH‰[è8òW\ñ‡ý‰ÙZ¸ ‡žº ™š5˦´ÅŸÄZÂÜ$@$@$@$@$@퀅½“ú`Ù®W0®_`�êmÀÁCŸ�{âÒ~½õš6 /—yÈÛhe€môµ·þ Þ9œ�¡C<�|õX’“‹¥a‹w¼� Sáó6¡á“#8‘Ú ý8L;É—_¶«'û§¬T•�±F‰¢¬Œ¢^3g‹P¡ ò%à ‰Ç°AêÚMs1¢ø5ñˆxE¦î¤¢~çc"><¥�Ò·â ‰ç0Râ9øbNÿPaœ°ûTúá€LwÉ™îR "V¹_ÄŠÁT­"®~P¦Ùˆª�Ms2Q,çΗi9Ó®€ïÀ³èŸÿµØVÞ�_è˜wý-¸£gÀC%ŠÕMGÈ”c¾Q”!‡ °ãýrh ͪ×JH~!     �$ Ð¡ƒŒUû¶`´Œ¯ý›u5{°cÇT>»Ê:�¥2ÀÞ»B¦š,P¼3”s–B‡g”Í‹¯dõGg‰›pú8pùð+Ó!ì—�u"X­Ò>�ä›/ÓP¦iÓP|o‹è0&LtÆãe¤ÝûeÉÝnÚÔñȘ;ìY¼_ªy¶ø7¯ þåW`ãþ-¸J¦¿Ô·…›9UÆ¥Ð^žV«Ù…¦ÈR¼³aÜöƒÒǪgŠ'WÚÞððþm{ô€­-ÿ¿ÐñµCqC÷4œ:ý)^>ô~ì4.ù\¬õe\!תæ©ôÜË/á¾ÅÓ ñPb     �ä Ðapô܆�›çã*5˜dà\ý�mx0¿�´Æ§2Ð�3ìÎIþÙk·É” í·ÅÃSÉ`¡Öà$_‰L«™y•æ]=Ö„y>D@(�x åz<†½2¥åéÁ?ÇS²Tlc]�¬øáAºxUŒþÚ«¨�%G{ˆĺ)™!q8�ºÑÒxÕÎñ"t¨³aê‡�>lTæmg?~¡ÃÒæ‹¿ŒwGö×ãϼùö˸©&Ž%fÁ©+–#¨¦VíÞò1²Ü­eí»€ýëµXvtÏcÈ (jäóy½@z:RÅÆéXtøö·tïo£éÝÒá�׬3[âw<§Çï@Ý6ää‹ c a6…D š^^ÂýRo˜GO “‘{ª×Ï€±p¯±M¬l‰�W…Ží¸é­£–Å]rÑçÑïÓO°çTh’ˇŒÄ–+ä^‘-^¡Ã 0‹èK-‡ÖÀo$@$@$@$@$@$� ¿üQ³z2j«Q¾è1, ,ùª•|üñ‡0²ŸxD‰'‘¸GGÖLÏFi øGñò-(½Ù¿Ê‰¨.˜Þ÷Úȸ �þ6… ¹³|ŠÉ´O6Š®ë‚Š e M ½ñá(Ÿg*ª«ï÷Æ}uXóƒñb«ˆAž±ØXùˆxjh«rø°iú`«L ãݧÆúƒªj×W!gظeí«(Í3†öâ'R9#¦þÊ0Íüœ²êU< &ŸŠš÷ï°�evz„˱ßûþÕßÀ�¾ÐÅ6QÓ‘¿âŠ?ìIsù¥™xâ?að†¤8}ú6ÿõO˜ñNìÕVŠ–mÃ’qþ•…êw>‰aE B™_H€H€H€H€H€š……Ž0¬™ùÈꛡÍTŽÆ+wÄŽVFü_%ea&.ê)õyR—±åÝ&£ß_AÂZÄØúH×à¢Î’Ì‘½NóõAaQ>zB\]D :°íìŽ<#†é1N+S]êD@ȉK@�B3G¡è+}õÒ�¿ÿ:6n�åE�Œ~ˆÑ˜ðÓâõR-^/úD‡qV‹jÎï—®®èz�¿ ï1<ÿ¯£qU—_²«gæèi}µ¿Áˆ³šñ>ŠË$&"    øŒ ÐñéèöÚÌ2‰—2ù*¿ˆíTžvÖ@Õc¥®j¡ˆ8Ñ|úÃé8›Ä6±(      �Ø(tX0j��²…1<ì˜@ëôŸLkY"ÓZ2Ä£ãƒçqtáŽíf      �ÄPè°à×:e cxØ1£ÿ¬2þ{ÆÕV§Üz.œy«¤Ô'1:š£Ã=Kæ$     —(tX€3ÊÍ2 ¶¨“‡“GÀè?«›£_Ó¨BúÅéRåQœXò œü»UíÀ±‡Çãô‡ÁÓÜ#     hy:,˜Sè°ÃÃ~ªÈqFDŽG(rðÒ      �¶@€B‡E/Pè°ÃÃHùºO㟮‚cð®+ÅÉ€Ú‚+ÊvvÿœS¾s—H€H€H€H€H€H ù Pè°`L¡Ã ã‚ûª�Ñ/LÕˆàâƒwɵðr‰Ù2<@$@$@$@$@$@ÍI€B‡] `x�îý-:¸ÐžÄ©h¼û{\}Şϒ � � � � �@Ò Pè°@J¡Ã “ � � � � � �@&@¡Ã¢s(tX€áa      hÃ(tXt… 00 gÕÃ!ûnó…Â/$›À%w¢Û�nGÇŽ^œ\÷pbç¿bçi�­n'ÿ¯´F·³N   �ä ÐaÁ³í 2@\¸�.ŒÞ€ÓoñÊϦÐÑå‰Hë¤qù¬ 3pá¼ï"EHø~7M/î‰~±$å¨*0)žªAãÝÓpF9ºë6_h)ü–LÑqß�pA¿>f¡çŽÔàø/¦át3І)93ÐeÌ×Ñ¡s*NÿþG8S˜shç%ɹÙyÉ7ÑyÒd¤ Kí>”;çN…ïí­8¾òÉèÞfI²Óìg¡ËñÊ�in„ŽöÙæf°º- ˜â:Ô–›-‡ùÔ2οý–».¸w;2øUŽ3ï‚.£¿ŠæÔ;þXB‡+;¸œÛ)}&SèÒSèNïþxwî¾p2 ‹�ÚE<d;³{×nõ7Úø›€�Fn?�ý_É“i‚ ÓãäÆ'áýãŸ�2D¼XÆß.mÔ¬ðÂ[žo˜8–:ñ)tò½‚ã"Ds#   �æ @¡Ã‚j«Ýó�Q|¯¸Œ÷Ò­òí\€¦ua?‚öšÂûptÎtKAÄŸü"t:Pß=÷Áœý4PˆþawHùâpt�é1gߨ#u @ê�HíÞUrž‚ï�µðí�=ϽÕâÖ<ôRÿ›ÍÓMð½»UòFN«I¹Dêúœˆ^:Ïø!R5¡ãƒ-hzæEàs�ýF{âÌߣÔÙ}:~¡·Ú0}?²½Iü.ÉC§kr�râRº÷Ä™ƒ[pºÚ:¦E2¸XXb{8ehÒ2‡ ƒ>7çÎ~t§«¶FïeÀtz‹LeÚ ¤Ýx :v׿õÄî?­?:ùOtìÕ)iÒŸþ¾¿n�Î?ÌjsÀäP°p›ñöŸv� ¸8Zcßåz:»_»ößœòLè~penº=9 úؼþwø÷�盥¤Þ¹]¯Ô<.|8¹æ›8Q¼;Ž_�nyC­ãÀ|Qbc̹)ïüŸ.U¼³äú4¦ViùÞx¸ü«H•ËÓ^èpg'ÔûA›Ú÷ÇÞètƒˆ,ú½ôNo^‰3!ÏFÍ*Ù\Ú™2ôNtùÎõ8½aN¾á/Êÿ7hT!×­�j²ïsWÍæèÿÊ¥ÿæø§ÆEL•TÏýn޽¨ ê̛ˤÿ+ôt€cE‚Þ®— ·UÊ 6 rø‘1s.¸÷·ÈèU‹ck%þÇþâÉõ+Ý“ËNèpg§˜«Üg?z¸x�Þž@Cäã˜qž†j»'ÝØ,7|ï"düø×¸ ·xuÛ'2ÓC§v%`§^“Ãç.4;¡ÿ+>ñÚ¸6Ìkã›"šýPÍNo¡c³rMˆÔuªx|ˆ�ml¾ýÏãXyØóË8ÉO   pA€B‡´–:R®”·~ßš„Ô ý®Ìš9gÞÛ‚ã�=9ÀþâÝøÜœoYX8í ºòÃ9bç9£ÒsGÁw4M‚ëiowµM¦ÎüH¦ÎD¼ -@×'æëogõdgŽâÌ/:ô” |±äœˆGÑ"mæzt(ËÂJäÊ”Œ 8rîØQy=)|:u”·®?ˆºzHÊH™ÿ­k‘rJ2‹“ÒÉ?H�h¯nLðOZñ‹èrEŸÀ�cðÕ~ˆ”ÞƒÐÑø~ô5½Ž¥€`”?#‡“Ï‹�.£tm`¤m§$˜a}½ðè�ÔÞ½üÇd�v\ä§Ô¹Ò·�DÐì<Ó”�Ô/mŽÞ鼊ô‹¥¾SÇpöè¿q®cWtìY"/F�O7‚…–Õi>§ýwÁ}25£Ÿ\[J¿v*~ôé&µ�÷¿eÀ- S'®C×ÜþÒþØ1F4»cmnx&r?IJ'ÚùŽÖ¢ÛÈArêc¹§o »§­§Ï¤ä<€î“oèÅãÃ\á'Dä/�*ñP[ÝCÍoO°»ûÖ­�ªÐa´ÿì‘C"2ôFªÄòo"l-aË6èj|vuD~óŸûày]øDh’(÷müv:îÂõÿ• øuî£ßáÓ‡æ›ÏÉŽ·Š—Ï×µRâ´R<€Þz�M›¸�s³‚âþ™�qró#„Vâ�Äü$   ‡(tX3„‹Óø÷Œ«­NÅy\[Âï~d íLì]œXÿ NZ- +Ë…v½{:ø|2Èí‚þÁü¹£ËL”¦¦Ê›êMh,WÜõҕΈ8Ïi?XOÿn¾¸ û£èwÿŒ¸«‘µ·¸“CßþÊÑ´™¿A—¡þAøÙ÷^DãcÁx#©2/?ýªÎ8ñЬH1G³WÞ0ovϽ÷ }ÌÞ{@Ï¢þé.?Àñ¿}Žh¯šNyK�дà{ðé‚ͤ߿é_ð~"ܲfN¹¨ÕÇ¿/ƒ—Ÿ‰h¤ DGdJÁÁ)Úum‰áÔÃÿƒcáÓœBìôJÿ-0û/e´¼½/ÔÞÞGï?|1OÄ·ÉtõM¬7�énÛ#"CÆ¡PàHèpÑ©ß#»¿"` An©)Èž �$VEç ÷£qô¡Gãï*«” ñLð~°²)ì¸)�¨‘épÓÐaô¸`ÀE@Ó›2½`%ÌóG"ƒh†Š^œÚùt¼zŒé櫺_Dÿ³#¬ZåkP°»oM;œÚr?ˆ÷ÆÆ»Í•]ÒŠEd½Â/ޞݿ Ÿ–W(v…ïÆggx.óûÐûpáÌ[õ¾Obt4ÙÄèнLØéê¹ëöÿ D€}àÿAÔÿ"fŸþÓ&øÒs‘q¥&˜É”ÇðéJ&„ÀÎ%è|ǬOµs½†cOÏ�OmÃóñ; � � � Ä @¡ÃPs )WÞ�n·K À'ƒÐÝÿ-îÛv?®C Mý” T%@`<1:”øˆxÏ…ÿ W™ev—9è�æúKð£¼ÐYŒƒà@"Ö€:”Jà›LÇé.sÇc­6Òq¼¼ÁÎóÿ ?µþfk”·ŽÝ'‹Xr—^F„ *3'\¢ÏAEè8Z�Æû­¢°²Bì”�æZe i×aŨ_ÓfþV,ñì�ëîS‰ sV=©ì;,\æsÓæ}ƒ£2%å8‰à[iÍŒ3¯KpÈgþ$Sw~-SwRqv¿L•*�œ*¥˜œÐn|<¼â´°“L#é<Àß·GçüNŸz ÝCÚvråÕð}Uúþ29/âU´%ƒCÅ>í¯o§\{ë”k/x*l/ØÎˆgŠ’Òµ�êýa“X3Ƶ­‰‹F°d;;“CvÓ¨ ˆr .‘kðï!§C…i'v&üÜO:'ÿWfg,ü#.�Ë"b;&¢ìUQ6"…y £àî\(˜9µNþ'Šб˜â˜YwH€H€H€H „…ŽÁ/Í)t„Ä“8ò˜cáÙ´'|OHFt„¤WàÿNbt¼¨¸Çyîtx@¹ùŒ ƒñrT‹ƒ‰‘AMfµog›’Ç|3|æ]4ý`¢ø6¨[0žCÄ ^)ßµxGû�±ðWÊ`‡3µ{qúÍ?âô«Ñ(jå'jg÷á¬ñF¤]úÿ!E†Î�§¡Ë†ø]Ícxj¨×g¬åeUNò¹ê?aâ¿6�Á+S¼ý—ás�¸šþ©/™E>¹î›Ô@Šª±N÷]óLð~ˆÓNU@øtÁt }ZöÓ³ãÔ—ž²:´t)·®Å…_÷‹‡ÚwgYÁvÚ ®íTî‡hýj^OBŽÖÿŸ�FjõÓœ%ÏÕÊ´•GŸPOû÷ÝÚi^ÛNÄ¥ÐêÕû/æÿÉš:ñ™â5Ä_ȱ�q¶C/ñ4”‡E` ŸÒb·úì$S ;¦F�Öc•‘ÇI€H€H€H Œ…Ž0 Æ×:ÄÝ÷Ô+ÿ�ãëmT×§úƒ4æ@2䇳;¡#bàaSfÊÈGpᄯêíˆ6 ˆÝÀà@¢9…Žà€Iâ0ˆ«~¸w‚y>|àcÓvU\ˆ`»áÖ)º]JîAšËÅH|öƒ—qlaô ©ÝçYx¶ØµA N+^'®üý�*"?Û€Ðaö�Laˆ¿ÿäÍý²$¦¼9Ö¦$y=?E·ì/àÜ‘�-~Œæ!%ƒünú ?úÒ˜‘0bIŒg‚÷Clóôæ’­�)!�$fNúÀ^ÂæÏ”wR �+/--&ÇÝ·›ÓUüÕÊ4–�ÑãêDšl§Ý½ãÚÎ×¼y=Ÿ¶Ýztt�ébÝõébÒr BÚ(AH%¢PäæÒÎÄŸ»Îbä¨AaÏÖ¾ˆOõOñê(Sž:]¼32üM‹×+ªÃÈûÄ«ã&sé]Hü’‡Ç/‰¤Å#$@$@$@$•…ލXšû WáA‰Ïaô”úd™½c²Ìžº ‰�íEèˆðx°k”y.8àiM¡C_iAsåo BG€M‡œÉ¸ ç¤ö“eR»åd´�“Ý€Éæ\0þŠ”{ê0NíÝŠSo¿‡s�^túf).Ðb—Ä :º>Í~w6Ð2¦BGôþÖà™–âÛ¹ §¿ø}d|!§w¾ˆ#o•U">Æñ5¿CúdM Š”S16ÎÝÄy&x?Äigê÷d Y}pæ�x8MópRlxï—7',PxàÑwjÐá²,}ê—f£¬ÆR©Ä{‰jS°;¡Ãµ�6×¼fŽy=Ÿ¶Ý)9 $`ë×ÞPâAvw¸™Ä¥�ªÐáî¹ëäþS$‹G\£xÄ…Š6ÃÅ+j©¾‚N�©Nß ;¯´7lYuí̹új[3 ¾ði=J6î’ � � �€ vtšùœ¾âÊwdÅ•.AWßx—Ùs4�´ûál«Á6ŸÄÁ°ñhSW$àd†œ>@ÓŒñ–;u…ý’pË%É×SÊÐ"tþÎHÓWŒˆâ}àÒNÓ…?Ê@ß Zˆ FÍë3F:#½ñé$Ÿùfßaÿuš-±($ÖÄÙ÷^Æ™>_EZm Ù»ÑñÞè”qLÄÆ‘6T¦_8´ÝhCøgâ<ƒ€+á/Ü ‹ïf|¹N®‘•2ª•˜5�¸;Oúãîœ}ç²ÄóÊ`)á"G ®DhÌe5–`ΰ½`;í„×vÚÝb‰;#\Ø ³Ò±Ðqå}è~ç­Ñç{x¼¾²OD±Æ·vJ¾Äž»N„2$ˆošxFYMO Fµ^É&Ú²ê'eYõ!˪`øI$@$@$@ñ Ð?«fKm™=¯,³çµYfÏÆ|û(fKpÎ %8gŠì†/ ª¾Œ\Øýà¶;'Ó,º=òCy;.[¬·yZšˆ-8à±ú‘E=b›uŒ5VÊé-·áØæ÷‚¥(ÌÎÊ2¸Ÿ*ËàÚNO ©;lšP°tç{Ýeõ‹OÕ�§¿ˆÖ£ûH¿gP²ú/(fÈ4 8zN±Ö´ÇèWóúŒê ¶ë$ŸÛþ3ó�òÊk|Y1Bll†Ôû«tïŽs'¼²¼qz ^G” a6Çúš8Ïï‡XçÑ3\Ì0ûEÒ+Óø³‰mO¬Ð¼Ú÷ðÕUBÅMP’¥[-WÓ¶ÓvÊ›+;Ÿ�{3ì¹ Æ‘ÈUeüm5þÆi§–\9ΈÈñH ‘CËãÖ΄Ÿ»N„Ž g”æMvT¦á¨Ï ­ér?¥‹·¢Ä@J*˪OŒ\Vý˜,«>…P+‹ � � � 8%@¡Ã)±æJ¯/³w¯,³œŽ`7·ÙxÄ#tÈ�x-æ€&<œû@æR/ô/õÚqô#èZøU¿;µœKÖ@YCd®&¡ÕyDÜ�ŸzH– üR.ÉC§[o—i;Ýpü‰[q*ªkòE2½à×úômÙ×c�}ÏÿTæ˜�3럌ê�Ò}€Ô&bÅY¾QÞ j›àUƒ”îÚ·᜾|¬¶/›ºJÁ™�qâwàä"&t/@—y÷Ë›~ÍÓFÞn¯¼'ÞÐsøÿ„ DÂÄ »sJŽv‡Þ-˺~ )õûpüÅå8Xò5å‹ȘüCtê-ƒ 4‡G‡¬ ±RV…´=í{kÑ%[<ôíc4θ5j?h§ÍëSø�Ú2Ç7KÜîYHÒ¾jÙ·ØåsÛW> ×Çóº7åâÔÎÄž»Ê}Çÿµ®3(cK ˆÐéΟ s`‰Yáèþ™mTc{èb-«n’â � � � ÄO€BGü¬Z$¥ÈíF äÖQ~¯,‚WxGÙÌaL7k-³6PÚ$ÂA  SGqöL—�èøÚ™¡Cñjˆ8§ü�8§W“‡.?•AKP·‘‘£¬kÒQDù7;7|uu-õ9yûž¢½}—-ÚÔœ·¯§ˆþ'Z}©Ö¢ëHcð.õ;&ƒ« Ñgßù¥xs„Ç#zÈD´=&—è¶ÙM“©ú²žF¢3^á!+\ˆ×�¹} ŸÞ?'ôm¨Ëþ3¯-½pÎÖ tíq½Ø qPÞºëÅÞѳ²ã0Ÿ«þSßÞK•gß“©�­DÊ�+pá˜,Óšpï'ó„Ã�dðtz?841˜\®cifíà¹cGå~�85�íÔ–i"ZEÆÚHùâœû»âed|¦\"\?¬1»Æé d‰ü ÷.ÑS¸±S¹ÌZžIšèqIb7v^pŸxõSîQ³RuÇ'«ÿ\ ¯*ø&`'�Øs×¼Vãú¿"Ë^?1_ìëo‘O~B®Í{п‰¸W.bé~ã»öiÖ–U_-±©šoùfµVî“ � � |¶Pèh“ý-o¾¯<ßÖó©¸ *nÃ1Ý}¿8]gÜ…Ô@$|½Ù²âËÉÍëÐákwé‚Ä©�2ˆQ*ƒÎÓ²,í±¨ËÒŠÇÃ:™Ï¿3š “…ôûBz¿>a”½ðíÿ-Ž—oÃN¾F_©âNý®L<ªB2™ÓBކ~9-ˆ¢$éxãt} :èsmŒ‚32…à\K´_ÞævìÓ×_ï)©÷ 'õÊê"WÖóž;õ¾ä�|›œœ&\„Ž9×ÊÀG‹Û ?Òÿw+ΪÓ\’SIÂ¥¤ •B/yK,pÌÒiõö]¥¾¦:Þ‚SN:æ|øç¯qÆ2Þ‚Q—p½ò+.úÞi¾öÐÉàÙÂ÷ƒþ¬ðâÌέ-ó¬0.›¸?ýîÆÎK†#u G¯éÜá¿àÌ~ka9nsš#¡[;zî:lˆLì8ÀÿœÖržý§ÖÁä$@$@$@$à€…°˜”H€H€H€H€H€H€H m ÐѶû‡Ö‘ � � � � � � 8 @¡Ã,&%      hÛ(t´íþ¡u$@$@$@$@$@$@$@Pèp‹II€H€H€H€H€H€H€Ú6 m»h � � � � � � �€:ÀbR       �¶M€BGÛîZG$@$@$@$@$@$@$à€…°˜”H€H€H€H€H€H€H m8¯…ŽüÙe˜üåžhú¨Í} um»/h œWxÿµ�îd?´�~ $@$@$@$@-Gà<:²±õÐsÈJÕ`z±f|&JwG›�µÕ«pu7à´yZ25þßË™„¨YÌt­³SX¶�~û?‘†OP~]z¯z ß¾¬Ni»6·©¶YkÛî¿dÝñÞm³�ΫÎÃ~ÈœŽê—î…'݇�KnCÑÒ×›±»ÜÞnó5cSX4 � � � |†´]¡C~Ìnÿå$t?”Âû%-­k¾;Kß ?£}ÏÆÆwŸÃUéÚ¾½ÐD´´�Í»S�Çvã{úœ¿õ/˜–ÕU,jBùè©øÊúç0\„xß›oi“6·!|­nJÛî?u`¬ r|?Ä{ÿ)u´õÝxžIiØ»j&¦6ëàÛ ¨ó±J°¿òNh�¼š·£`Á'@¦u{?¸ÍçÐ<&'   ˆJ í ¹òcv½ÿÇlTËõƒ>ñÔlá©jSW®ŒãooÅ}sWYN]É-‹þ��ãÇã _»¥ã‹h°ãEèh‹áå+Eè©ý꯯Âèaw ªî£óò¿eÌótEcÍJ -Xd�¶UÏ´;ÝArßîêsš+Y÷C¼÷ŸSûZ-}îƒ8´~t'1#¬¹ù¥Í9ø¶©<Ê©ó®2KP#BGikó €ÛûÁm¾(]ÈC$@$@$@$@ ´]¡Cý1[Y�½�:…·®•O,Âö$ßÈ,Y�Ê™ÃÚ´ÐQ´¼ Knî'0êQ–3ù¿÷{t4î}C ‡¤|—·»ûÅËED‘¶.t´;´vÝ÷ŸƒJ’”´=ÜIjjìb<£PrÇÕˆx �ú½¾2ã†{ô2ªÊÆ`âò·c—Çî¨ÿšÝ£#ÔD·÷ƒÛ|¡µó � � � �@¼Ú�ÐÑ Ó3²±ÈÚM!´­žÁÈ¿üâÐcò­é¯;°;A$W„Žõ®„Žl—܈½´aÐ)|ðç—±´¢yÞêš?š«1zè̬~7{R-Å Oæ(\~‰0hꋟY€,:¼^À]³ž.éâgÕtÛwÁ-xÀ]û<ùc1)/ ½t•ê¿WƒMË_ˆêu’;ƒÇÞëƒüü!z²íÛ¥¯2 0ÿ;98Õx½z�íñè"š'ùÙ½Ñtp/v¿�™\ƒùþkð¯Rnøeç´ÿb·£ùR8¾\ÞžÜQÈþ<ðúF�×`L)ù&2{inJ§ðVåϱz{4Îj»Ý]Ÿj ‰ì/ß%÷`?-¶O5ÆË=Ùêž`­Öî(:yN@:ö–�A¡8¦—™ÏÞX׋öœ¹áº/ã²¾½tñ¼ñð{xãåß`£íóÏß.Ç÷C‡Û|Ú3©ä;#Ñ©ñ0ºõê%ÿW~-ÿW¢Ä$Ñú;{ðÉ^ûç¸r]D{6¹ë=æ"   �¶G MX1þKXçÈ!wþKX?íŠÒñº“»ùAš;{9VιAw¥V+öÖVá®w$=f†ÙFß›ßÿ|uë[˜™•ß�gÑ?ÿ'ª úþ|9?MÎÛm {CÖ¸§¢&q×¾¬Ýñòjæá›ªžÇ¬‰? <µ3¼–˜ßezÔ»2=*]b¸ìÜô¿øÒÍ9ú¼ÿ`¾lšwŠW«oçcí¾-Èë-©^Ãè¬I!mÐòWìFéH-�CåK"�ÓþÓÊl­Íéý`¶-Ì`ÛûO®þ˜ ^T®ÛެÿsD· Ùlš�üâ_…3¾¸»>�ÜIø,\†COݤOi±mgªŠ·ˆÖè‡xm Mçü9¡ µ{^¾t ú…=Þ¢_/Ú”¸5Èó„%T[õ$FL´óˆ“i,.…p7ùf/ß‚97Ë4ʰ­ñà6üßQÅÊÿ•Á¨¨Ù‚‘ò¨õÊ”ÄA6SsKäÿãLíÿ£ü_•gÓ‚x_ „ÙÀ¯$@$@$@$ÐÖ ´ ¡c�ÑWL‰Ä뙲 •?ÎGÆ N§¥¢[ºÿGm¼s¹�þ Íœý,*ç\0ćúƒÿÀ‰ž—¢_�ÀH-fÜŒÈ6Ä:â)œŽnÉŽø—ͽ\b‘LÈê‰#ïlÄÜE[#²Ï®¨Âììž8!q]3ºu5c xp:5 i©x}é䨫¸k_,Ûõ Æio¸µÍÛ€ƒ‡>:÷Ä¥ýzê�±Ó_‘ÿʛa#gc}=Eîðô6Cõ"V䆈SV½Š‡GkÓš$FLøµ9J¦ýBŸä«ý ú�˜em~:í?3c+ì8½\ÝQúÁ[ý( WeiS´´­Krr±4Ì=ÆÝõé/1Y˶ÿ“‡hÁ�bNßP‘¬‚(§¥ûÁ�©îžªÐaÔ«]/ïÎÀÐ!žÀó%úõ²xÇÛ˜00>o>9‚©ÝÐÏc÷–[ʼû*gèö ñMÌûÚ-X­ |ƒ±lûó§‹jÀù¿2.ð¥h¹7«Æ(l•ÿM†#ßN‰S$qcJ6þ3¯ê ïÁ Uê¶ã˜�H€H€H€Ú<�v tCyûÖ¶ÊlFÚ§øùw¯Å¢Ý6ŒejB�LMÐÞ×Å;ètòƒ4ø£ˆ|Øf‹Ð\Ǫ+îÛ7;Dè�§ò†ñ5L6Iq³¶é/ó”3;ÍlNw”Ó�uÔu®ê sv½¿šTå«}A<3æ*¥]ÅÕ7¨Z‚ ·G�нËÃ<”BÚÅ®“û!¢AñÞJ?áh”*É ¯F}Ñîa÷×g„¥®¯•iJþyL2Å.;î)v®+t“±™ûÁ�Iþ<.Ÿ!×ËL¹^”ûÖæz±³³Xâ^”js?bÄXq{?8É—_¶EÄ=ÿ”•ª²"î)ñi<Ó±¯ú^]QJgÎ^'ž…9ÒÄ™’"×!‚÷�Ön¿XûšLÝyE¦î¤¢~çc"ÊEŸªhljçH€H€H€H ½hBGTšöKËêY”ÄÍ"t+´ÈÛæMsnCù!˜1kñ�UÏëîÄêÒ¨Mi±ƒÎ3h¦ãö Æ*‰c1Z{Eªo>ÔÕìÁŽ;Pùìªè>�¤ú§3;C²:ùr}| ”·¼èƒU2(­‹ð¾‰)ƒn kLpm`apÅî’d¼t¾¼1u2@‹@Â÷vákœWI·w…LPûA9~»¿>#,uy (†yÈòü6ú†Ü†aHÕtNú!¤ G_\>'µS[=gÆX|%«?:§§�—¿B÷е¬¸ÛûÁI>sùißÛ˜ÓLØT(EdUEaâ�sÓ„u2�nî°gñ~é5fox%~Ó ü ™V·EŸVW#÷YèóÎLÊ   8/´¡C–/Äï>‚ÿ‡¨‰ýþ´:úêfåqø ÉL¶ãäél :9G:VHø×(åð$-óÝ™€�Pû<·aãæù¸ªw N‡ÒÀúÛð`~16*ÇBw�Ùš×Á·×GɆ×1SS-÷ÉJãCWÒ�·äûÅ[H›2pCà­²2¥e�Ìõg3×ß�•­šÔÉýah ¾fz»t6çº>ÍÊÝïä/–7ï´7ï>y›~¦V(oÞÝ›üœ6 C*³Kgw.¤‡_Ü<'ìl±;'¦Í^»M¦Ê«Í+÷ú °{]Iëö~p’¯D¦Õ̼Êâ¹#¶˜çÅÖ)b«¶d�LU)×§ªì•)-Oþ9ž’%Èëê�æñ ][¡ëk¯¢B¼AzÈtŸuS2170ÍRiwI€H€H€Hà¼!Ð„Ž¢ÃÇøÑ­�ü UÆiÁí´`Ÿ›DÅ'¯`üˆâˆÕ9"Ò6ûgB2Ú—[4“o½_μ ž]ƒ-l¨Æ”¬ !^Á“Îì æs¸ãúˆ> 0ê��}»ü^+õÛÐwX±Ì�¯’yòÚd—ZÌ뛇ÕFÒvüéä~ˆhf ¾fz»t6ç’q}š68Þ �µZ}Çq‘Í•Á†aH•véìÎ…âî‹£ç„�-6ç %ÞËSz¼±Ñ[��›_Äoÿø7ù× ”,ÂÍZì‹v tÌ!dš&„„âS½Q÷@;°n!ö »Gä¦cϺ \2¡H¦àÕ¡|ÎfܶD›ÊY'�}¯�ìë®ç˜‹H€H€H€Ú&�ö!tˆ+n¼Ëˆ`¶ùÑ’Nùb좽ÅWÒi»fZ‰Š_ž#ˈ¶ùx ΄d·Ï“?ÿµðîÑ»·ŠÎì ëÀ“�ÂëúáxÍ Ø.+ Xn¶×GЈ(3^D™ðp0…òFÿ)ý�~ƒ nDÖf¿ðá­7ñ‚Èe~-ípzÂ3ù—_Œ¦`÷[ÍëE`^qÜͰ嫤¶Kgsδ­î¿�ø áÓm”¦EÝmÁþÓë·abŸ]:»s!…$þ%æsÂΛsæ”�(}SÔŒq�›×\Œtáœä›/C§IÀÐè‚©ò\RVXÑê3<ÐönÃß¿x®ê¡½$˜ŠË×?‡‘Ýš°wç¸j¤x 9´=¼-üN$@$@$@í�ÀgHèˆoN²ùƒÔ'KEö·_*Ò3e9ª¾AïçÚÊù1õWm¼Ï•©{ŸÄÐÂÇmíM¨}ž>²âJä "žÚóF`OŒbUaS®K½GäÙ—3ìܲöUYÈ�FÅO¤]ˆòz ø‡H€H€H€\hÓB‡E~Åøø§®L‘8 ëq¬™xeiÕA‹¢'PÞÒk Ì·cópÉ )S‘žüî‘àpã–*oå¢×Ü"Gƒ«…ø«óÊÛ¿tyû§mÑmnÚ7[‚xÎÑ‚x›0i«µ3¶K¯:¼´òôÍa¾"™·DŸçÏÞØÐ„ ‰qdXÚ°g¥xs„ýS–žÕr5ȳ(K¼ö‚«ùËŠ\ ÝœI€H€H€Hà|"І…Ž{PS9C§©ËwÆFoº'’úäÓøqhänÜ»R¦m„ýH4NÊgîìåxfÎ æôÿ)/ª–LÆÄ¥òÆ?|Ë¿[Ÿ˜Š¬Ê@^ÒøëðûuO`ê‚Âs´êwmå�Ù²ò@(—&ì\Q‚¢[#msѾ)eOcÖ·e*G()Û‹ƒ{¶à¾qs-EÃÇvJFOÑbü~ÉX³ïöŠ'Oai”6i•¨BGC={ô6ói§du˜;eu˜ÝÚËm*jÞ¿_®Sm“Õ7æÉê«#§ìXfw|B­OóT’)¥ážFŽ µÍàä~puÿÉ pŸÜëÚjÄ{WÜ.ËË*í1ûȆ­‹ëÓ¶Á¶'³±¶z ò<2ÀN0µ,£eú¯UúÁ²ÍÖ'\='Äãa×®û¡9R9½^¦,{ ?wE賯ñ V<ú.ŸþCŒ”å¤vÊ”�¢à”�pë�Üj^§ù KžFÙ]yÐ8Ì‚¼¨Ùô8 ŠW™G‚;¿#°¼µvÌ Eª‘¢üÏ(gÿOƒes�H€H€H€Ú�¶+t´:Ç>È/¼uCŽÆ+wD÷ PìÌÌ/@ÖEú‘ã‡ÞÂÆÝmËC1QÙŒÂÂLt–ö?^‹��é%J‚ˆ]7íÓóô&2m<^Ž¡;·™£Pô•¾8~`»ô��è`¢eÀ$^7…K»¡¨¨Ÿx¸dÀûþë¨Ø_ÿ-Þñ6& ”QWÈ*¡­HÚ7yk[-KDêŽèqÄ‘IZ½p~?$¯îøJrs}ÆWrd*Oî(ô«Ý�ÝQ]…"Ó›GZ­ÿL ÚäNâÏ 'Í’`¾ò컨§<—޼� y¶[~Ñm¢üÊ>ˆ±žØíýà4_å£'Ä%NDãÛ^p~Í�ã' � � � |†Pèø u6›F@:Ì·ŸaIb}ÕÞ?,oˆµíà†¹5«y½w2‹ŸEeé5z}uU ‘31Ú›]ý4ÿ´Aì¿6Ø)4‰H€H€H€Hà¼#@¡ã¼ëR6(n®…Ž>(^üc}ã: 4¦+5VcЬä°=îÊÝ%,^+ÁVó´I (��EâC¸«‘¹’I€ý—Lš,‹H€H€H€H€¢ Ð� �~ÈÜõweîºFä€ÄºÈ�;ÖÅ(lÿ`ä­{ ón�„ §Ó3ŒUÕ/`´Ä‡h�83Y6qfÍ -@€ý×�Y � � � � €B/‚Ï0�Á([[†¬ÎÿÆ®5¥X¤-áç6{ÕzÜä9Ž=סt¹E°Ó8Ëb2      �ä Ð‘<–,‰H€H€H€H€H€H€H • Pèhå`õ$@$@$@$@$@$@$@É#@¡#y,Y � � � � � � �@+ ÐÑÊÀêI€H€H€H€H€H€H€’G€BGòX¶»’f¯­Âœ¼Ï£²l2¦.½ÝÙßêgNÇ®Í÷âóuUøîˆ;°»Õ ¢$@$@$@$@$@$@:>£×Àü »1mxo½õõ;ð¢§>£$Ü7;³øYT–^ã/ þ5L6 ÛÝÇœ$@$@$@$@$@$@I @¡#ÄÜì_'ºÁ‡=å·aÜ¢öïùP¼ª ¥£ûé-¯Ûù$rŠ�Eáü<Ÿyª7Ï€'Õ‹Êy×cêêø——5€ä—¬Ãê™9úW_ío0bÄ,Ô'ùI$@$@$@$@$@$Ðâ(tÄBžY‚šÊ;ÑCÒÕ¬¸ vÄÊѦÏçÊÀ|}``î=P�Aù¥mÚÞf5Núv¿ôm7©$‘¾-Z¶ KÆ ÔM­­œ�SÕ¬f³p      k:¬ÙøÏœOB‡g:öUß }Š÷MLt 6Æjÿù|>‰}»lÇ[70]hy±az&f}¦ÁžÏ ÛF$@$@$@$@$ÐÖ PèˆÕC2u¥F¦®œEË«°äfmÊŠO¦j\çjªF,\íê|…ˆˆT-"’G£[ûú�˜Û®PÐX     8_PèëÉü)÷`tf/ýèá÷¶aÑK™¨‘ll¡#Å%7b@¯N’÷>øóËXZÏ4'ùú ?ˆnÛöíRvfæ'§O¢W¯S¨|âql· ‘� 5Ïa¸Ö�ºmÈÉ)Ž;–„'sn¸î˸¬o/t’æ5~o¼ülÜí<¦…n|[ù£{—ŒAáó£dÆ è%�성ɖgd#Š×îFižæ/Ó€òÑÙXôVd!     h^:L¾Ù^uþ× ÔIDATX¾cnØÕ<¢íx½>¤§§êǬâ8äÎ^Ž•snÐÅ5³·¶ wɲ£V+q8Î'Þ%ïŠwIºL�عéñ¥›sôøÁ:°iÞm(^ývð�±gU®›‰Qs·gl>³±¶z ò<Ú”ŒÈ­¶êIŒ˜Ø|�L g—á–¬®øÇ«k±`u3�U„ކƒÂlàà°>l¦²o¡xyž‘8€Âe8ôÔMЮ–š5Ï¥4¡+ZA›/N©¶2fT[YÄYÙ¸wØÚ¸Këª:x6†0Ô"*\>\:b˜šFeC¿­Hzßùkh•\›¢‰™<{„go|�úó MýåîAe–wIúBÒƒ¤ŒKÑæœet^"     (tȯà˜l¨Û ó ‹ŠŽ7Å£ãg–zTÆÒȆ eÓ»ËbÓ›o;hó9I?q¥¥ŸÆôí.V£f˜Þ€øGìÿˆØM´my�oùë÷®IÙ™AãöC°«›äÖQUƒŠ�kpïph µ2åèÍ xý­�±FÎ!uÑ%W‡Ù®gåY‡‰[ýxAæØ^c.Ýî‡*4K¡#x^#     �â Ð!l}²qnÝ%›öèux¶5¦{jh›á̈§¤ƒŒé 1|Ôvý·�ô̈ÌGðãÁÐ$™›Þ|ÛéBÇ�3Q×¥EYHºÅàÌg¨uÈÎ\JÇz¤t¬ž�â¾,F™ñ‘�Ðá¨“ÎØ]¶kVî/îÙ!^!r³FaV(¡ÃLWQ][1YÛ–ôµYÞgçdÚ³Íä tŽþCRg¾cý»°ìŸB‡%ž$     �GH€BJ1|ý"ŒbÙ´oÏØ´§m†Å`²+e0yL¢$ÚT”D®#CxÈ·]ºÐ‘>53ÕëÈ7uåØð¸¤à¨…‡:|ç¯é*ʶ¤dµü©qc†)¬ú®¢+ÜeŠ ÉòlÕ¨ºfOÌaêŠâƃH€H€H€H€H€' "t Îã‘A6q!%!OP™uÞ`ñ(WÉNýÎgh¬ö& Ióm—m.jd}cž™RÕ)f¤G—gFZïÿ§›vÄ aê“?ã/ÿî~}u¾î¸wI�…� ¹žÈ¬{Öwë— ó¹àB‡fF:û®Ì¹xi €½� � � � � �ÀÓG€B‡¬§üΧ*°üW–®'¿^µV:ÏX#¾&´Ô8uÌô`¯C¢9ä°�¡ #1‹ª7FG|!     (: âçÐwé¯hPi ÆE8 ¬[g~�Ÿ]*tˆÆPïǧ§ÝÉj+bÖ�¨Ä¬Ž»h ¯öìGCoúF=¯vúÆ<>%. ¬ÓÎÄw}P+Ñzô…y H• EôK´lÛŸU H¥Ø¨bÍ‹ú³Î� k“£]‡¦ÞF¹ûtj˜•ò©J¢`ÎÅ£`Ì)Çb1(Ôä C“h,-gU™>Is1?“'ö‹ˆ”þ¼ÍþùN$@$@$@$@$@$P\:’|+Ð7Ú�†2½ŠJWG>Àª¼ U}vªç ܽA‘y¸ÞÄè;Í(ËFb‘|:òš».d¶ˆ_n;]è‡Y·!%°H�á¹qqy³nÊ�Þ÷0Öñ]cüè\Û\ÖsKœõô}ˆ_5ìHmüÕùÈMœùÝŸðbË/$ê¡a:ÊV¢ÐáhÆôô/±¹$ŠWÿƒç÷”ÆKæ&Ö®xþ\xêez—ÒÞÜ}ãèiˆW¦ M½+¢MHÓñ � � � � � ó^e( � � � � � 4:,ú’^s0M�KSoŸy¯2”H€H€H€H€H€š }É ¯9˜¦Î¥©·Ï¼WJ$@$@$@$@$@M‡…‹¾ä„×LSçÒÔÛgÞ« %     �¦C€B‡E_rÂk¦©siÈö9LAê°›×2•o?ŠòùæÐ%4qÂz¤\Ò5UfIà¨ÈGÉ“�¢Ú,ša$@$@$@$@$@$ÐŒPè°è솜ðZ˜•ÁM�Kô/ÉÓŸ@òe«}ìzk:J^Û§Þ/’ÎCËn©Æ`ÍýOSD“Š—$@$@$@$@$@$ÐÔ Pè°èᆙðZTÅÁM�K¤Û?ü¤¹qñúN®]èxS„Ž6¨)Ø�²Ýàh™¤+ ¦èQ¹ÇZ(Ñ%æ � � � � � 4a:,:7Ò^‹j£>¸©s‰hû:MA›Ç‡·—]¿ ô¾ ¢Y„,tûŠ~»:êÇ $     �Æ"@¡Ã‚|D'¼uÆBpSçéöµxøM¤´;�ÒõQy¨R—ü‰)a'þŒ¢E+ba¨ÐF     h:,°GzÂkQmÔ7u. Û¾L:V…'txWtÄ]’é+5_æ£&êG $     �†#@¡Ã‚uÃNx-ŒˆÂà¦ÎÅ×>+ôßO¹Ò*ÊFxøB‡¬ý�“Wä”ÕLJ U‡6¢dù 6z€YH€H€H€H€H€š }ê›ðÖïÄÖ¢² nê\|í³ê’ú¡ -fíBJ—d+³PsâeÙÒò¬e<#H€H€H€H€H€H ¹ ÐaÑÓ¾ oýNl-*‹¡à¦ÎÅ×>«.©ßñºÐŸ5‰µBMùWpíËCÕéïà¸$©S¦!A||N8—gÁyÈÊr†“ � � � � �@ó @¡Ã¢Ÿ}Þú�ØZTCÁM�‹¯}V]R¿ã!t¡ÃÊô�� &ÜäŽv횎’M‰cøóh3¬Ÿ;�B‡ž ïH€H€H€H€H€š' ýÎ ½9r1çrhZ{8RÓ$ù9Ô”ŠÐ1ïi$Š3Qמù(ÙúOÜécº£bƒç#môMpTœDùæÅ8¿Çã‡#.k.Z�æ^Í|‹ÒGoG¥A Ù.&$     �&B€B‡EGrBo†\̹„ÚbVž›4yõ¹¥«Õ4 cÖ£Õ KÕ{T”ŠÒޤ5̵ç1”lØ¥Þó‚H€H€H€H€H€š+ =Ï ½9r1çjhâ¤×�Ú§cÐä5'þŒ¢E+tiƒDjNR“uá(ÿçßzå;xÚŠ ïH€H€H€H€H€š+ =Ï ½9r1çÒP¡ŽK"¾C[OuÅ_ÃuÈÚ¯GCÙÄzH€H€H€H€H€H šPè°è NèÍÁ�‹9†’ � � � � � D ýÀ ½9r1çÂP      �è @¡Ã¢8¡7C.æ\J$@$@$@$@$@$(tXô'ôæ`ÈÅœ CI€H€H€H€H€H€¢ƒ…‹~à„Þ ¹˜sa( � � � � � �@t ÐaќЛƒ!s. %     ˆ:,ú�zs0äbÎ…¡$@$@$@$@$@$@ÑA€B‡E?pBo†\̹0”H€H€H€H€H€H :Pè°èNèÍÁ�‹9†’ � � � � � D ýÀ ½9r1çÂP      �è @¡Ã¢8¡7C.æ\J$@$@$@$@$@$(tXô'ôæ`"Î¥ÓhyÏX$vé‡ÛjÊ‹àú|;ÊV¯@�¹Y %      7 !âz‹z£=8’\â²æ£õ¨›¼‡ ‰³ï¢hî£;LÐ0ˆH€H€H€H€H€HÀC€B‡ÅHˆä„ޢʘŽ—L¤>· ‰ñ '*÷þœ{ö_‹”œ\$¤&¸ùTí��âõÛc‚�$     hx:,˜GnBoQaŒG’‹£×¤þüTn�ók�ä¢õŠiP4�šFÑ¢ÚH^“ � � � � � �€J€B‡ŠBÉ ½¾¦Øºk.í‘ò«WÑ¢ƒ¬ê(=ˆs�LFula£µ$@$@$@$@$@$@ D€B‡èÆ™Ð[EÁ�ÃE¶µ,‘m-)²¢ãäË(zúÙ("BSH€H€H€H€H€H€¢‰…‹Þhœ ½…1QìãbeÒ÷S®´Š²ÞkÚL½Ýí¤Ô%>:Jè£Ã>Kæ$     �&N€B‡Eû&ô™¸[Ô Á>.V¶F‚WòÜ]H¾(Yª,Bù’[pþK«ÚN$@$@$@$@$@$ÐÜ Pè°¾ }$&îUÆD°�‹•±õÍ+aÌ´ÔÕ]]Í Ù¶²ˆÛV¬Ø3œH€H€H€H€H€H Ða1 |úúž¸[T3Á>.V×'¯¸!Ë�–3ÀS•8!-'¤UV3œH€H€H€H€H€H€„…‹aà›Ð×çÄÝ¢*›p ˜�´±7¹ýr âJ—I:‘ � � � � � �€–…- Í5… Œ†¾ì; inGœ»Þ“(}j*O7´¬�H€H€H€H€H€H  Pè°è5 `"¬9ªDäx†"G¤‘³|     hJ(tXô&… 0 v ž‹´ÑÃ<ÛUP ç†98ˆS\Ñ|ªíC�æž—$@$@$@$@$@$@$à#@¡ÃGÂðM¡Ã¤n[ÌÚ…”.U# ^œK®�“GÌ�a � � � � � ��‘ZŽ –h"‘ôð›hÙ­Mðò+£øÁ{yúJpJŒ%     �fK€+:,ºžB‡“ � � � � � �@ ÐaÑ9:,À0˜H€H€H€H€H€H€¢˜…‹Î¡Ða†Á$@$@$@$@$@$@$Å(tXt… 0 &      �(&@¡Ã¢s(tX€a0 � � � � � � D1 �C¡Ã ƒI€H€H€H€H€H€H Š Pè°è `L$@$@$@$@$@$@QL€B‡EçPè°Ã`      ˆb:,:‡B‡“ � � � � � �@ ÐaÑ9:,À0˜H€H€H€H€H€H€¢˜…‹Î¡Ða&‚ã‡ÌB‹n æûÃpnX‡š°™&’ � � � � � Ô cCèÈD‹©� ù?.…#Þ×jJ¿ÆùMsàÜÌØŒ¾3Ñê¹UHpóp¢|IÎÙ„›É´™ñ 8àBå¶É(Ýšß„˦E%�NÐúÑûïÄù ÿ‰ò=ßE¥™ˆ„�|þ¢³¯i � � �@³'@¡ÃbD¿Ð‘‰–O¯BRóTn¹¥;š§Ð‘úì*$&)\š�ÐÑi Òÿ⤵®·¦£äµ}æ‚¡Q@` Rf=Š]:ª¶ÔœÍGÙŸ&¢2‚bœcÀ¤» q-Pùö£(ßQ›¦�2ÛÈtH«ê2ò³ÓhyÏX$ K¥^©5åEp}¾e«W˜¯âª';ÝÕùþ öüu‹VÿõŸpT¹|©¾-‚õI˜ýP:H€H€H€H ù ÐaÑ÷Ñ.t8†¯B›a™n뫾x e/­Auiâ~|#’zµÂùÕÏ¢Ú¢mÑ,"ΓÏ"©m*jNüE‹V„e²²u%¹OwÔœzå6šOzÂ*1Š›hE±ÙÑaZÝÆYxmÈBêožFbªY®3(_~+Î2‹«KX&’§?�äË.V ©]ˆ°ag�Ç`xvÆeÍGëQ7yµiþ‹³ï¢hî£�Ï}�íôW¡^+ó’qÁŒŸ©I­.\»D Üd(môƒU '   �fH€B‡E§7¦Ð—5)?©@ÙÒE�¬{í�¡#Í-tœAé”[QiÑŽØ ÎDêY•‘[BGl¶Ù¦Õ²t>M¶®pE‡~ 7ÎZ<œ‡”n•£ê‹—E˜|Ž«g UV?�á¥ûqî‘iõ&NÆ©C®Gœº¥ÍSMmB‡-;ƒMöké–ðí”>“­i‰Þ­i•{ÿÎ={�‹¯EJN.RÜ5Ví��âõÛõµ×ÁN}Aš»`Ï_Ú@$ÝÐ?P�©,�ã²;D€ò¬ì©Øt7ÊvéWßÙê1+aÌóHr½‡2xù!   �æL€B‡Eï7ŠÐ‘–…”IËÒövn«\{æ£dƒá�u¯½êŠŽòƒ(š1ÙRñ$o�ø^ÝÝ—5'÷¡úœ·÷W°8ÀqÉ@ÄÉö˜ê�÷IÝ�0|(ÒZIÎ ¸>^סÚ÷ãÇõÍEb¯yþà—?ò]G¶K^ýöŠ)ŽNR×"n8ÓÑrÊ#HP„Ž“ÛPòÂkÀ-ÝÖÂyU_šÔ™Ö ñwð¤ÑüØ^M¤ö²S’®GùY8ÒÚ¢êè6Tî·^â_\´Õ‡z?xØÖ�¼ú›wQñQO¤=óË„ŽL$ÏF|š²§§BÚ÷�´ÏøÙÌŠpòùÇRÕ!)[˜¶¸º¯l)¨@\Z*·®F•nì™Õ~˜2nâ{þñíÚ‘(cæÜWp}–g>N¤ø:�³ðÍ“¹h½bÜsó‚·ðý¯æ©¥$LØ„V}•.œ_wÊ÷ûÇvü¨Uh�Õ [&£Ìl»É%âcÆ}p|ñgœ[ªYõ$zßV¥"×ÇッG‚t}p¡Ãž�Ðî-s›EdqïûƺßmÚéè5©?¿•›GãüÇJ }¿ý¦+ÁìÚé+^¾í?šBä2åWC‹"ÊÈï÷9ùýÖ¯¾ó·aŒô�‹6†y~g‹£lýLT„ðû¬·Œw$@$@$@$Ð4Pè°èdž:F/Cê`™h«ö¡bÛ"”mÝ¥†@²•EˆëuZöí*sÖã(Ûü"ª“%o T7™à©ód¢c\&,N�ˆˆ“Á=C•7‰ÃA�9réúð7"D¼ªô݉pÓò¡9Hê¸^ßí›àC¥æñ³v!¥K²/·éwõ�Iݺ€¸¸Û_@ÚM=ÂÚ�H¼w=Rû_S#BBÉ“�¢ÊSW.ÆòBºÏDÊÜgÑâ"=Ëš Iž·ØV“ظ!Ï UŽL< õÔ¼�’_ÍlŸ7]ØùÔ±äD҇�Ø¿Ÿf<+…‰³ÊÉâ¬2Pä2˜â­²õä9Ùâd>fª>ùŠW®(«.ã, °YËÐf”<·ò x{/2Ó¿ÏÝ7UŸ,{7zKÔ:ÕuI>;vi„7¯Èáy}Ñ´xøM¤´;�ÒõâÿãP7Y!õ÷ )«1¢TjÏNɨª¿9\t©a¬•Šsä‰(7¬ZPê´c§’ÏüÓ^„W=B©�„:Ø Øþlí;L¸Élöûd»Dj5þ>·@ì«Óuèe”.¶!Ü—šß$@$@$@$ÐtPè°èˆ:}åíäÏîABÏdU1§êØ6”ýöÉÀ h({¾+òqîÁ‰ú7„š?ð&:!Æù0Õ‡«(QœúöýËÖ™GeëLÀ›ú¡hõì<÷[dwÞª"T�u"®­8ôŠ%5"ZiD‹Ä©›�Ú]Ž…eÁ‘âŸÐ×”qÂ')^Þ?`úvÛ1Xöíÿì8*$³¨1Ž$Ïä7 ½¾†x¿'½†Ô>ž%ä@)\'NÃÑáRÄËj÷§è}=6C?QÐ0ó¦Bè\|9ÂûN~l’/öNè–EN8ZuDœÛ骧,³¶:†È$;Ç3ÉY Õß|�šÖ�ï]â³öIq¶ò™r9#c1ñm|bÄ”=u+*N‡×~«ÔÉsÿ†ä‹dlT”¢ºè{ÔÄ·B|[¿‡ÞÊmN¢©Ë8³²#Xxüèõh=øRIò­<+·žëí3Žs‘6Öû†^úN]Ù¡9ñRV~m2_ùå±Ë_‡ÙñÙn×N­Ðá+«úìqé÷H?;žO©œ€”]Ë H¡Ùé«#ðÛŸ¿æäË(zúY}“ñª�vŸ?½ž»�É6¦‹.ÇQ2e´ô¬þc»¼Å$ŽY…–ƒ2ý"cÕ·8¿õqBÊ .½-¼#   �X%@¡Ã¢ç|B‡E4¾Ÿr¥UTˆáÊѰ�!¥WWúÒ#(ßôÎ[ «xñp4â\ò§qR*âR<“Çš¢oe".“½„ñiñŠ—k–±+¥kþÀ˜è„§L’+ßš‡Ò×<+LâG½ Ëê{JáÊÛæ±{̧þ©½<[pª�½†âßúý�$ˆÿ€äË[¢üÉi�bŽ›†ÿ tͱ?¡è·�oåÝɬþI“·äÏxÞ’´W›Gó6å‡Q2ÿ^¸Ü‚M7$?¶J„Ï$-à ³p¹h«ùZ–¤_ KÒÝŸ¢ƒ(~l²—›¼e~LVyxí lë@¤>»Ôs�LvÊWÞ®:¼Lœ$¢R�XU!'ô”éNè±™OÇEy‹ÿ ¼Å÷¬BHšúZöòJUŠÿ„‚MÌC&\’%"áw²=C³Ú¡—ø-™êñ[bº…A-¾ŽãL-'øE‹Y2±í"c©<_¶™MDÜ�¹hÑ­=Pò‰l/X 5þl M½Ø!+eö¼ƒø+‡©+«\»‘C»êËÌ¿8FüéU;ÂµÓØï[¤ß½[m´ã¬úÐ2œ[¾Ñ_aÀUhvdóôš…6SowOð]⣣$ˆ�EÔ<ª�¶Ÿ?Ÿašo ++¶ûAS : EËû§!é"¿èWóÍû(ýã ¸êIdÔVÇk   ˆ6:,z$’B‡£ïƒh}ßÏ4Ž�¨Üûß²Ì<Ø$@o¨cÈóò¦^†â£CóÇuÀD'Ô8ãÄA#”™&{ÌŸñú$'‹Eâd±Fo~-wþ Oð‰ªE1Áj²Ä�’7íYÊ›veKÁküþäUºêû"À-³p¸hêç2qú›H½L™°8á\�§Ö/AQG»*#peƒ5c»ùt‚Ú™€oÐNÀï?�xýTl?O†ƒ ì´‰S…Y/afêÁWœ5_ŠúøN’m$-»yl)šñ–›ƒoÑùÕWÂu½·e5V±¬Æ2n•Ò‹~‹\Œýqú+;žUMBÛvjŸ‡›²Ðê¹§‘ ¬â ÚŠ!¡Ù©1Yw™ÓZìŸðˆ ÚdV×ÁlÓäQßœVAÉc KÈ»¡åoþ¢,œ œ iÊ‹‹¦îp.Õ‰�Y_kl1NbU‡µÒ²óë&ÃY [R¼ל)EÒ¤Uî•FÆvóé„/%ÚññŸð¤øOh«l39,ú{&ôá0Ñ¥UN·¸y8ôC8¤øšó²¸é²žž¶šmåR3×qœ©å¿PûO™èÏ߇V^ç±J®J9q£â'Ï{„,³þõí¸}=ÚÜäå” ðV:ùÛi#ÞâÝ_¶íÔ�Ac¿‹ߊ– íóØš�Z›}× c6 Õ ®îÛš²meѳ¾(ÿ·M;U.föëÊ4ü¶úkö^ùžš“¯ÉÖšE)”µ¾:ŒcÁI²E¯¥w‹žé¶cÞ“ � � �@Œ ÐaÑ� &tˆ¿…Š÷þe›^µ°Ä?4â„´Xœ�WŸÓÛ²Óþó§µQ¹öûÞBÙrÐÈBGÊ“ë<+!Ì‚ “7�£UqÖ©8y ø(ÇèíŹ_=ªn/²›¯V¡Ã7¡7ò 0*´¿ŸI_q¶£âóc¨)v"éŽ9ß%A'×ug¡™‰„{åÙþò¬W‰óÉŒÎ'56û³ø£1ø×1:ý"q—ezO5Ñ8( j‹¿Ž`B‡m;ƒŒAŬH Žóe—ÙMÞÕ;²2ëAãÊ, [vv“•Höž?MÍr)~o–ˆ¿œ¹´´¼l÷ƒ¾BÀp\¹]S°¥ë¦Áõ¥11ïI€H€H€H i Ðшýé>qåçrâŠï ±%ÔãëOèðo0 61¨%.&¶®<,N"»){SNÊé£ [Wü“À“Iji{ÚãG˜5 •ÁmÚ´SK†•On;‚<ª�r¡ó{cܨMèNëõ¿îxÑ”cv\ùy9®¼\w\¹&/I€H€H€H ‰ Ðjv SŽt9P�Œ}címœ8çl3ãî·žF§”úm&†íÁ&ÁâÒd/ú3^Ç“f“ƒZ™û'<áù"ð¬³-Ðg€¯z­¯”ÊmwË1¤Ç|Qrš‡ŸYµƒ{Ns nÐ ½®nOéa]ù·’È’÷Õ× \ãŒ4Xÿiãª>þ ŠW‡¶=Ên>=wáâ¿lõ© 1u*¾ ŠfLVW¤(IU$èø«ã83±É4H36Šês,+Ä_GÙ.ßÛž]å91G⌧«èÅ9ºõ)9ºÕr’ïogЭd¶ìãtcÞÐï§¾09UFÏ+D;•LZ‘£JDŽgj9”<6í´ûü)Uz>ÿ4â¨Xü™-®ò¥†Ý~�½ä¸ò1�Ç•—Êq寭yj}¼    �&H€BG´tªû8À‡å8@e…�çS}H&ØË×ùnußê)¡C&­Å¢rð�âïœ8ÁSNA‰ò Zå\¯:¨ xÛ«›&íÁâ¤lõÔ ¥Î³²\úù'åXÃïàè”…¤Ûï“m;­Qöìí¨0]B­™ȱ¯¥¿½×ó¦Öít²?ª6­0�(8ÒºIm2Qì&ÇLÊ›^åã™ æÃ‘¦Ü}‡íªíé0Êñ«ºç?–·íiC‘úøcHt¯´ ô¦ð¸(V„ý‘åùÈò|÷Gs ®cð\´=ÌûF[Újt4 �CUy;\¹gÊ6lt÷½£o.RFŒCbÕû2žÔ‰Ðïˆ5œ|š1œ�sÓ£p*ÇË*ú ½;ÈÖ?ª˜¡œ`±ZNÙð @‰÷®GjŸãÎoQ<åvÓñ­ƒÔ0ÆYøÆÊxþ•8bí ´_V`l›�²­âXs . ÛZ¦è·µ$Þ+þGúw 9|õûÄ|óÎ=9O߇iíáHUý9Ô”Š€0ïi÷¶ ×9vuë?´Oß>íø ÇNÛÏŸ×9ž¶�­Øšàh¯YËÐfÔo¥òUÛqåþ”¼"   �&G€BG”uiü9p¸/À¯Î•£DµËÜýÆj…³#)ý)•+E8xCü­ÐQz5©íÔÕBJÁÕ'ßEÉÓ�ís½µß%ŒyAŽí©OX~\Úôº¬Xš"« LèP2†3Îô…y'+8ZOüâ“´ùdmÝ¡]{ÇH+i[É)e[ˆ÷?àà_¯¢ÊÒ…/e�3÷3èDÕží«1|5î·÷y°cg§�Hèžî6¿Fú½*bý^GB6ì´ûü9.Ç™}6~SêÐuÄÃì$@$@$@$Ë(tÄrïÑvˆ&¡ÃlM4™J[H€H€H€H€H€š. M·oÙ2hX:–7k#    0%@¡Ã I€Â& qöèÚ%§Ñlòo! »,f      ›(tØÇl$@FÝÐbÒl$´8‡Êw¢ÂâÄ c.Þ“ � � � � �@} ÐQŸ4Y � � � � � � �@£ ÐѨøY9 � � � � � � �@} ÐQŸ4Y � � � � � � �@£ ÐѨøY9 � � � � � � �@} ÐQŸ4Y � � � � � � �@£hÒBGöôûÓ¶(ù&OÎ|§5+'�æE€Ï_l÷7û/¶û�Ö“ � � �@s&Є…ŽþØ~ü%d&(ÝëĺQ˜³×¬«ûcýþ5¸²5P©FK¦â�pï€{`šEM×89 6`Ñ]?F"þ�å׿¢Ãš×q×e­Qy6zmnRÑYkt÷_}=¡>ÑÙG´*FûoÐlÚ4­á¾åwcäÂÙ•$@$@$@$@Í�@ô “‘÷ç{�Vé—Œý“˜XŒu¿†¥Ÿc”ûþØrä%\ž¬\:ü‚ˆ’ÖûqĸKG!ÏwEßó¶ÿ3[‰E%X>d<®ØôŠPç'bómQisáktS¢»ÿ´\ ª°Ÿ‡PŸ?M1v™‘;KŽ‹Z'âÀš©¿4Ȥ:ãn¬_òK\™™÷O’LÄ�Å…øìƒ×ðèø…0ý kT1Ú³‘¿c.vù«îÃÐù»•"+'   hÑ+t¨oæ‚�qÉJ�+5€eëÊ =PöùvÌš¹ÆrëÊ œ;ѵ%PVvß8 sFöÑà F‰Ð�+:Œå¾"t V„Ž‚]Òïþ “&ÏÛú¬ôV(Î_�^CƒÛˆq±b§=DöûÏ^}áæª¯ç!Ôç/\û?},Þ¼£vQM 6©4i^˜s«¬20ÿ¸NíÄð“‚<·æù"“ýG¡#ÒÃ‚å“ � � �@Lˆ^¡CûëŽ�8ð �”ddZŒÏ.D^=:ßȘ½ ;¦ö‹j¡#wå.,¡L² °`ÀTd¿íYÑQ|`zåüÎIs/oiÉ*™qE»ÐvjІqi¿ÿ¨¤ž’ÆÂóPOM ©˜œÙ+ñë_ÞŒî-qþ,ÖB‡µ%Ôz-âëÙ‘ìMxxÇN$^w3ºK€µÐ¤g?„Ÿ¾ûžºs¶hk�ý_?†t Šá±ÑúOË%ôëìqaHF;w†3ÇvbáëÈßÿpB‡ÝñN>›¿/¡7Ÿ)I€H€H€H€,Ä€ÐQ‚U£~‚ù{-Z`4ïulšØÇ ^w²çÔ.<„=±“šM_‰Õ3nvÿq­­Øyb~yÕýõî3Cm£ëŒêz®ßþ)¦f&ÃuøEtÍþµÖ÷õ<‰Ÿ(ñÁ>…û~‹Ì‘Ï›&±×¾¡X¿ûIduWÞ­?NÞõ2¦�ùµNð¨«�ÆZj½—·¿Gäío²øpÙóÆÿâ'#¶â�ÇïÆ¤µŸkŠê�õ·!«ƒ¾�!™÷èÚ $œ´q/æ V(>T~ Ò…ÛJ™�õ ÷yPÛf08èó'Â!ZK?ìØ�‡Ìÿ¼¢Ûé>‡ß˜‡ìIÑ…ùnì�O_îð¾lùwÿð8–Î…¥y=°ùÐ6·œ`B‡u ±òƒ÷0¢‹4¶p?FeŽnô­r�ÑÖ|‚ÅôÇÊÝk0¢»â«Èÿq:]HNö «>±;^ÂÎgë÷Åß^‘ � � � Ø'BÇ::ÌOL lxú¸eØñ«l¤”»P™˜€ÖÉž ¾Õ½ÆÂ�ØeL;f\í-Æ…‚£_¡¼í�ÐÅ»$½v¿F j¿OÏ™Œ¹·eg=Çæö_$£3Ûâì[0sáö€¦oÜ…éýÛ¢\üº¦´nßÒYXˆÊ„D$¦$àÃ¥c‘kâLÑ^û:b™LàF*8åã,ÄÑãÿZ¶Å�ºtðÖ(ÔÅNOEaþ«ÙåËY\P€b™r§wð C"V Ò‰ãÖü O QÞ׈�ãØ¼N¶ýɽ=Èuâ¯èzÕ4_Ñêw¸ý§fl„‹pŸ[ÏŸI?8 Žâ³oqy¦ÏF– „¥†å1öÆg}�ì/B‡gÛX¨¿/úšýù�"R^j"RêÓGþ®¡ûÏn‹ç}ŠÑ=½Ï¨«§þ]Ž”¶é¸Ð÷ØJÁf}bw¼ØÊg2®Cù}±Ë„ùH€H€H€H€übBèX%oÅ燺uÅß6Y3þ�,cžÂ2f¦ð&v2©="“Zå�k×)¬ºÿÌ÷Ó2}ý.ÌÈòLÒö,&"‚vU€¿¾†½ò¿�®ÝŸ‡b™Ýö݉¼ã‹ÑSÑ9Ný�h'ûý±`£lŸùב3ÓÊ'A¸vÚ¤¨›ˆ”`Ç‚ñ¿ÒsrÆì�ÃÔÁŠ˜œxCü'LÒØš½GÖæº·0øVÈYŒ#ÏßéŽ3›hÙ´´Ñ²…÷<Ì õùÓõƒ ºj:FÎ÷vÙ ^ÇÚ±Ê -v-ÈÁ˜•ÚçÈîø4ØiûÖ/TØêkG‡d)tŽŠ�Žë¢ÍGGÄûÏ&xyÆŽË3æ–Q öcr¿Ñðì’Uy²Ê£§g•G`ŸØ/6óéÆu¿/6±0 � � � �€Ÿ@ b¬³ņSfSÏῸ ÷úpeÃ1]8;í[¾ËïBÎBÏ$ÙcG4:þôOÌBñ `¿}wb·Ý•™HÁû×ïž0·ï„gg@¿‡ ™ˆÞ N]gjWÃÜ�¾žEªr�xEVfÌÔ”Úó·a°²+ÇpÒ�µÇ)q{ VV h ‰‰Ëpž‡€…úüiú!`Ÿ!bås±Òþø °Ôf€œNªk/rñnY• 8ø@¡lÏëòö¼ÚK®§î?»VNßü!f T>'6OÎÀ4­ß“ âŒÝñb74ã:¼ß»d˜�H€H€H€HÀG 6„ŸµºïàG˺“jþÐ u"ÎÄNu*)o›ß˜q7–‡êã¡øD1~¾æeŒÍŒ¦£\ý³�„ß 4a·¯Öˆ‹!Š› ÷Ç…Sùû°{÷nìxq�¹ƒO_R÷wxv겆s£waè|­PÕkö¿‡!гç'wém:±&wÙN,Ù]jÓNRÅî|ÙÊ s0çÑ�¸ôº9áX•iÃy ã{Ÿðµð‘£Iw`•†Ú~ÐÄŸáÆþüãÔh[ C€üÈXÉ—m+C}ë²4ümö:c4éÂé?]aÜÌ?)S/W²ƒò\ŽÒ=—ZqÁØ'vÇ‹Ý|z[Âû} “’ � � � ˜ˆ¡C.o}õ´O;Êñ�µæ§w¨íÔünü£WMc¸gb7]œNÎp;�4b¼5™(“4̽bŠÐQ§ö¥ß�-[çárã9œÒЂÃ;ñDö$ïrs³–‡g§Y !…Õ2>f˛㩊jQ|£z�Ò;Š”·Ý‡Ä‘©gÛÁTÙv «A4[ZöÉ Ÿ‘º>!Yu‰ÂyŒ¯…¯š>Xº quŸjåu¹ð�ÓP_”Ú‰_ŸM>¿>â„tœ8!õîx«‹1õŸ7{]eÁÒ‹Óê�ưÙs¤>»ãÅn>½Ð(ôý} Ó‘ � � � ˜ˆ¡CN]±ë£#Ƚ¦4$0œ‰Ý¤õÜ,�—l¯Qœ}|Ä!*þýF]5)àtŽ€´ðOÌB:ê£}ƒr'cìí7à§—!ýBÏÞyw3ƒNð³Ó6¶ZÆGÐ7Ç�?ð¬Z)؉Îý&!wå.,¡lv9�Ç;ga­mâ'c8ÏC€ÕµðUÓK$®>Ƨjƒ­ ÿ8 UèHÏ]†÷–Üêm�ŸcƥðÑVÝ �){]íÁÒ‹Óê�¬ۿųÒ*L¡Ãîx±›¯V¡#ØÊ”Pq0 � � � �€)�Ø:F…~¼¬®•6þÈV'vfDë ׈"Ê1¢äѨ÷ÇàŸ˜…"t¨,ê©}éÙãñû§ÀÀtEðpbø Ì4}•ž�†n'´ý‘sm”å¿9œÁút|øm°:ú3gñ6Œ½Ÿ~kݾzˆQÇ@ÏC@uAùjRK$Nµ­žÆ§Æ¢/ýc$$¡#gòŸÏõC}K†dai°ñi´¢ûÝ]uö:Ó‚¥ §+$ô¿¸¥ A|ºØ/vó:ücÇê÷%t"LI$@$@$@$`$ÐŒ„ãi# ϽúG­ë(ft½9èÛÖôq+±ÿ©›ÝO옇«ÆÿżШ Õ8H=°½r~Ô²:µ/½£œ¸8 ´x6�öœFc=9 ÏNm#Òe2ù¶L&•-%Êg�l!ɵÚB¢›„ƇÄÚáÙšbyB�fRuxÇ.´“‰«â–dÏ9eGw:ˆÛ”úùgÐCØ¿i <ëˆ"\—XÎóÐÀ`|µ‰ué KüƒÄÕi|jë·}ퟬæ‹o½�C¡Z‘Ã%"Çð0EŽîw·õ:öAÚ§Kzÿ…|ëßJ"¾‘&÷À$�3ReL| ¿ÉŠdãï‹Ýñb7Ÿ^è0ðfµþ¾„L„ I€H€H€H€Œš¤Ð‘.o>9†²ÿ| “^÷½ë¦bèœHwÏ¿Å)‹ÕêÄNpîY>Q&Éâ@QVä^›Š��Î5§oHú~ƒ_Î\¥èŒœñ˜ýð$ô¯Ü…³gºÃŒðþ^ã`³ø,uV*o”Ó¯Ãì)WâÃ9 ¾l¶/û 䯽)'öcùÂßb©,ÑV>éƒîÄï~÷$wQNš¶¢#\;ÝÅ»ÿ™$~Sæhý¦NEñ§”+ÍM<‡`󂩘¦/›~'6o}½þE¬…‹ŽXùÁ{ÑEaÞ�K¶#t�Üv„Aó^Ǧ‰}|µ!”•9jbá=ž Â~þ4ý`œœjû( 6ǧ jð2.¼@n¿Ç§…—cËÛËq¹¨j‡7ÌDö³ï»ã ?ý\÷¼gŒ[ŒMOÝéßJ°ùñ°ê0ÐIYؤù|–·[—O…†ì÷†ë?m ø–í?Çeû�û©“ß±Ço¼ kåGWá¼Q8+ç±(Ÿú/6Ç™f\Ûû}ñ´ƒÿ’ � � � „O ª…Ï/ñÑÆÖ•qâ'á)·ŸkÎüÕrÊÁBóš·ôJ—Ó)^P“å�jó‰¹q�d�” HNðO~÷-†‘KEx‰‚�ö´Å§´/YÚ§|Nɪ”†U)vÚç?þÑ]¬Åår"MkO=îP Fõ»_ïàÓ›\ù ×N_Ö€ºÅÆñŸaªké&"žüýí-ñÔN `í_%`ÂJŸ­v¾3foÀŽ©Ô¬ADzšªa>¶ž?�c׀ɩ¦�â¤YvÆgh`Þöb¢œ¤ìS¸o2GúWKÍÛþ©äÑŒ}ÓÌ.lÕ3÷šFŠÞÓ0ýÞÐýgÞÚÚB;bÙîw0Ò}4¯’Ö‰ÂBà õŒës¼Øgš±ëkQ¸¿/¾|ü&   �@ !Çy;§=¾³öÆ©û·½I]òí—<�ÅV˶�…–… š¾/̸YÝþàIèÄ®%c1f©¼ñ7~²ÂögÇ#Óð‡¶«øÞÞð,ÆÏŘ£Q璘߉éYÝ \J°gÕläΗÓCŒí·à�˜v—låÐÏ=¤d'ŽîÛ†Y#gZоêöS2¦ç.ÆÛK|oÏ�²’'gŽI›”J´‘Â_ØA×ç…r:Ì9Æbîé5s<ò¿~ÌûÙ…�_‹ñk·ìx××¶>yk½N¶ Ì1®4ª‡j4E„ó<ØzþDL9(Ϻ²íçÀªûäxYM{Ô> ÂÖÆøÔ4/¬K­cJ«ŒÆU6F&¦ùäd¦Ér„±f†!YÃô»ÑÖ�~?ëÚ†–†vÛ˶/ÇÈLeÔø>NìÛð2o¹Êé³{–ȶµúü½wœ©cWì³ýûâk¿I€H€H€H€Â!½BG8­ˆHÚŽÈιí[JáegðÞëeå¾ê3²‡"³}Šû¶ìø§Ø²7:VqøìÓ÷@NNZJûÊÊN`‹w{‰>�þÎNûÜy: Y*G}­áÛ‰Œë�{Eg”Γ>":h&"dÕMÎÒÖÈÍí"+\RàüúClÌ ­ÿïþ£»‹œæ<ˆq—Ž2lÿÑ·¦Îw铱ÿÃ!ø‘©s}já?jÖº°3>È´ºWÓhý^wÓ#Y‚ÒçWtn+U”ãðÎW°×té–¹vÇKÈùêé÷ÅÜz†’ � � � #@¡#Æ5mš‰ˆÙ2÷P?nÙëxj¤ÇgÆÑÍ3qÝ´È®Þɘô"v̹ÚmÚ©]OcÀ˜5¡˜É41N€ýƒX¿/1ØjšL$@$@$@QA€BGTt�h¶'"1iñ¯�{˵èîÛ®T¼ãz�Žìj�4i½8[ÍR–ëbù�þX¨8“å§É`¿Ç`Ûþ}‰Á¶Òd   ˆ2:¢¬ChN'˜G6M€âFä°øºÈÙ×ÅuÈûúOèé5Õyê}<~û=ØƲy{­ì�5û_Á�ôdŠŸ™Ì ~fì•Ï\ÑI€ý�ýR‹U¶_j)—Ñ$@$@$@$@µ ÐQ+"&hºz`ÁúÈlù=>X7 ·ñça€0}Í&Üš^†}[6`ÎJ g§†<¼%hNìÿ¾4'Jl+ � � � D‚…ŽHPe™$@$@$@$@$@$@$@�B€BG£`g¥$@$@$@$@$@$@$@‘ @¡#TY& � � � � � � �@£ ÐÑ(ØY) � � � � � � �@$PèˆU–I$@$@$@$@$@$@$Ð((t4 vVJ$@$@$@$@$@$@$ :"A•eÆ�þX¿ ®l TªÖ&ÅáÞ÷`¯Æ‹fE`ÐlÚ4­á¾åwcäÂ#ÐüþX°q>îÔ­eȹ¤†ù·¸ð+üuÁaæÆÏ#P'‹$    �æC€BGóé뺷´SK ê•€ïœÃ©º—ÖÈ%ôÇöã/!S&šº�ó Æ]: yºÀ¦qÓ»s/ü¦Ï�Ð11¿�‰_ÕÒ°vXqÃÒ6U&âžOIi~ÿ÷÷ðßß×’5V£3f#Ç\(ö篺Cçï®ç–ˆÀvð%du0/vß’a¹”B‡9�ú íÝ9Ïþ¤;z¤$z ­váô¹løøxî;¿ô©¯±>z¼#   �˜!@¡#fºªñ �þB6¦_ßR&»qn#<ÿrŸk<ƒê©æA9w¢kK ¬ì .¾qæŒìˆÐ1J„ަµ¢£ ]3wu”å+ÞÏ'‡ÞÅ­ŸžñÝš|ÿ¯Ž¸ýZ˜D¡|wžúÎ,.ÆÃ",tdÌÞ„Sû¹!�Ú·�Í{Ÿ^€Þ7ÇÈkZcÝø_7±±}ãáÆŒÁXÓ«£©aγùèùÎÿ™Ä5ÓçÁ„ƒH€H€H€H P舅^jdg¿2Sûyß|Š-MEèÐbU' :Æ-Û€[*ò�;s�¶úˆ]�èyæõî‚�J­§6¡ãñësp{OŸŸþö0?ð%:w»s{tô¬î8w½ñö©%6‘ Ùº’/[W"µ¢c�›ÜBG–t„¥M[Ì4ã¢~8<¸’ƒ«Kñ’¬àXú­ פwÃøîm°õoïâ¹ÒÀÖ4Ûç!CH€H€H€H &PèðvSúÀøYvGdöJCz›$$ʯ²¬ß}woËžùµïX-gV HÃôùÝqM¿6hãÕ*Ëœøä£ÓX»à+|j9ìæKĸ9½qç5¢�”]VéBÑwÅØ½þ3¬4±3ã†N¸¢s¼ÆŠ*üãÅÓn»²ïé�±ÃÛ!±¬‰-«ðÏ­Ÿcþ‹žÕÙ?ëŒÎeUøàåÑÍÛ0)¥àýCxbK)Ú*³gÖ¾|VSv.Óû#»”=€½Ÿ~kRPdg_äÿ,owÀö™ôŒëpóµ?Åe�Û!)IÜmœ9†�ßý+¶ì5+K_¼:�¤Ð‘³Gž¿Ó=Ér|‚?Ìœˆ…yµÛ¦·4Œ»Ô^8<´·gR'Ù>äAb‘@IDATÿ× $¦wA7 Á…Ž®øû¨Ÿ¢“äq•Ç¥o~¤V:vàÍøõ••!ÕØº÷¯˜òu°çBÍÒ…�þKtúÿøp‹2z`Üì;�ÑN±¯ŸîøÖÖÂ7{ÜC’ÑÎmß™c;±ðõ äï8bB‡*¨ïÇ�^£ƒü6�e ÅìŸFRñ´n×'?zK7†à?Än>CõMåvÑÍ·á®4e#–¬JÊ“UI!mÁjœç¡©0g;H€H€H€H 1PèêÓ_¸ 3®O Êÿð«"û¡¯Òdϼ¿Ÿ|±8/´úTâÀ«Ÿ 硯t ìæÃÀnÈûã�ѳ•®8õÆÌÎyoŒÀÄ>Z¡ØõÄN|tó5˜quŠšW¹pû?t½ñ3¹JÃö/nôa¡K­ÜTaU/ "Ì€Øxh+ waHæý“ÀIë÷bŽÛ¹�«Fe`¾º¿Dq,ºYéî÷´õžØµW�ù]@¸6 A„Žì‡°û÷SÐ]3XŽîy“sÐV­mu¹~òú[1:õžÛ÷žøh‰—oŠ¢Y:zw» Û.WdàýÛq÷±2¿ ©ÿ�ƒC3ÝBÀé“áÊ¿÷ÇÙ¾²Ù²Íä�øÓh 'vlÈCæÞŠtŸ3¯-‡ß˜‡ìI1±¬?Vî^ƒÝõ’ÓéBr²§�úóÑ!̤Á2·.ÄE×üS‡t�ð(–?õ|“’‚‘¢N´䦯܆#d[•áS|t'þëºI–þdìæ3TÓtn“ºã9}¡¸G)�±{Åß�‡Ô¶†B2‹‰H€H€H€H€‚ Ð!p2&ÂŽG=+‚°ÂŽY[1þeÍìúàКKƒˆÞÒ þ…>ò¯@°›¯S7ìÿàÇHf¤Ä~é}dÏ.PSÍ{c¸þJ„ËY…„d½ø¡„ŸxëC\5QtÒ°åÐ ¸Ü\;P’z?ç±jøvÌW´‘:~üBF Ö�ú æ¨B†Rp±ç%\®ˆ§v ÏI~ž´x÷çÝ]ήp– ðßgQžÐ]Ò• žÏ�åw!'È  "txm™¾l¦Žì§®´€ëÞXú8&-­oÇ—¾Öû¾ÛˆÐ‘]«Ð1¢ï øý¥ »RünË›x®Â—_ùnƒW¥ e'SÉÙÏÐç�CÚHÛ×¶úOãOÃW±³à(>û&—gvñÉ‘²EÄà=wqÞ§ÝÓ;¸]…8õïr¤´MÇ…šñ^oBÇ 'p|Ó=ªCWŸ­ºo‹•D“ÖÿMÄ=ß_‚£ù'‘ÒµÒ}bY�ˆ‚ýÌDA{ùt6…y3(w<]dêÔ%Ì’´ÉÏcïËk°×ÐÚ¡^ìy-^ê£È.¼”÷:–&wÇ#?L“¥{8Uzï}õ/ìÓ�uOÉ�ñ<„Ú&¦#   0'@¡ÃÍ¥v9Ý�çqâ«bœ8Qtºƒú´ÒMNŠB¯;ý'" šs-6ÝßÖO¶¤;¶žÂÙ¤ôùé�ÙEù£¿K†ïÀR�`7ßìW†Š¯ ÍD¢ä6¼xøI7Œ¾ZófÚõ=&_ö.¶x-·ð üâÚNèÙÉà¨Áo¹z•ÿÇw0t�²u¥%V¾q~*ó€Ä´D‡d^ga)N× iÞw˜pËÁúY‘�½GÖæº€oÌÄU“^Qíï§8.Û>”wí¦ÐAC1îX»E³œ?{6®�à~ƒëÌ_�K‡.ô—g¸jH¡Ã]uÆ�XÿücÈêîcŠ�î¯'ß��Ö{� V‡{šÐñø ⟣­(•öú{ètY?Ü×>•ç¿Ã¸ÿ‡'%~ŒÄ»JOàšíÿÀépÍ0Ko§ÿtB‡»j:FÎßî.={ÁëX;¶�\»°k�Ø»ÒÿÜjÇ öcr¿ÑÞgEVyäÉ*ïr)Óqff{ma“±{ã}HsÉA²É­Ñ¡µGMqœB±Õ8ý}!ÎĵDŸ4ß¾J¬ÏÛ‚¹ßÑô<ø,ç7 � � � �@p:||zwÀ‚é—!«o\ØZV/Èßë‰É‰ðn×w§ªUèð•%Ž N|�÷vâ_ë¶X(I„ŽPòõî�ü­½üB…«{v}'› ä#Ë­3‡ÿP·¥%ÿ�ïÉÊŒ³jÉ0æWb ¾‘- {q›sÜBFÖ‰¿�9Æ•$eûk©óUβ�x~¤ø0€l_'ÛWò”"ýÛVœ‡_Ä¥Ù¿6¯'ý:Ìžr'®È슖ʂÑbzìãÙ"b±5ÀWPc ¾úgË…©Þ- AÛèË`ë;|¡ã®í§ññkà›îŸo_|Cd„ŽpûO#tX%[“ækVóhâŒBÇlYõ3õri‘Œ‰qr”°{ˆùxÉçKR—oí8 ¨ÛPð¼íÿÄÄÌVò[ô9ft†�ºx�(hñìæÓßoÔ•JÛª‹±â��Xì4z_6[~r±{ÅXáé�Ñïý£*­ÐѠσj/H€H€H€H€Â%@¡CˆåÌ¿ Ï�ù�n›ŠH£Ð´ÅÆý×b°™E`6ç9,÷–êăðó¥ßóS|ðëÖj£Ï€1"@è¨ÆŽ'¶cü‹Ê*––ȹUqÆZ…£=«®¢ð•Õ�B4oâÕí+šÓJö,†\í6¯‘Ó×ïÄŒ,E ±øD±Ð1hÜ,zxº_èq‚é1§«•˜cѼЂC:Ô£4½[Wî¼úfüâ)(/ý¿Ü¹×úV|ȳÃäˆYÍ®¬ÐÌ0Ie«ÿ‚‰–q=°þà6¸}Ú”U>£ô«|,ó™m#H+tŒ‘Åj…‘R´*Ș٩�76vóÙhŽ&KG ôCÍ}=]ÿËâ¦ðË{…œô#e»Êy¬—Ó˜æ~§/ãÙ[níä,?‰a[÷ªãº1ž½e¼#   —…Ž[ûàÈï/õ;†t¬Fáé2œ­ŒÇ�º¤¨âB Ð¡$n‰/ôÇ�ƒÛ¢µgžØ§¿Bç«ÂÃÌ'L�ˆãÓdC)V·‡×¿‡ìyAVt8Ïb\¯÷ôo³- :|~<,2Ô1xÙŸcd�)ÛWÈö•›eµÃSÊjy³=YÞlkw(Uå,xÏ»ý1È�³{¶¾†7ÿþ8û]9†Î^èñ¹�BGúP¬\óFdú•²âïcÑC÷`m°°m¾¡ ê„°ºO¼’‡uºúüe”|'ÎHß­»3RÛýL”°Œë�5û·`ˆr<‹™€`™OÁöM} ódeÊD“•)µ Vùl7JÉ8h6ŽlšòïSèu•È K?Ñœ°zNcÊÞâŒt›âŒ´êŒl¹z7`Ë•ºrÃßÐσÑnÞ“ � � � „O Ù F?p~�ÇoxkO+0õ~-Ì…?ôA·vÆÈ‘Ýp‹ˆÞ—óÞÈR,¹ê-,u—éOï» )ßÀ8´±—ÆÙ_6ÏÚ� ßµ€ø •OÊ \nÇ��:´@ÉGØ«­Ï¸¢£ä;ŒÊÜô�²Ï¾Ù¯ '¨²Äû1žêâ ¯¯ou2(ÛWV��Þ/¼ä>v¶pÏo‘™û|@5êR}Ù$´DüwhOبmÒç+L­ÓlòëKT�ß㿈Y£¯Öôg!v,Ÿ‹ñ #á›Ãg¸_¤z¼ìeƒ±í'%S5¶îý+¦|­õ]Óï�ú)”3M ¿ÍG¿¿ýŸ¯pÛß¶û/˜($NÎOdëÊmz±O³¢È¸åÅv5ÕqV‹ð¦d™·E¶®\.[Wp�wÎÂZ%PýôÇf9…h ²@ÁpòŠÝ|jÑv.„·ç¨_;™ƒå)Àò!ƒ°ðÓ`iB‹S�‘"ЇR‚ºrð¢£w?¡µ†©H€H€H€H€‚ Ðap(ê:ý/\u•ç(د ÁØ~>'u‚ñÄt¾î Oe ÊÕÈøök,˜u}køöS_¤Ýf"ŽCåÖ…¾x÷–—póuBÞÑS³j¤`ÿ! ¿ësÕHâþA.LñÏ€í'>:œ"tô Mè˜ôÂM˜s½²µÅóq�ør¯û{;¥aú´.8ÿê'X©ÛšãKi÷ûn|ðõ|÷dúTþçh�ÙCÇ‘ÞâÕ‰«ø*0:x\ ~Æ*~Ì&µóÔ ¨ë¨øC¸ÙàA“°Ž—éÙaÍâÿ‡ÌþŽVf^F¡¶û/ˆ˜� qÓ7îÅ ÷~3ޘܓ4K„ÒÇ­ÄOÝì^ÅÕØBÇ y¯cÓÄ>n’–“ã‘ýŽ�•‡d…¢sîp¤_´›/Œ.‹Í¤šq}ìØßpÃ�kÚ‘Žwî¼ÝÄ=“SŽMî©=6Y“¯!ž�Q¼$   °I€B‡ñˆXérVÊ¡°ñh­9RÕ÷ ;žyãW)“;9~õí1¢›rZ‰çSXP.GEÆ!¥u �SèD»ù€q«²ñÔMÊ^ÍÇU‰S²’£m‡µÎSïÄ€{¿RÍ~i¦Ð6¾Wµ4¶ nx+µ«?|ñÞŽ`õߺŽA×µ�?Îî•ÿ-¿·ƒÃEm¹þ´…X7¹?æx'®“VnÜ=¼IOarçk¶½øÊQ…ñB»gùDä.Ü-'pôGظQ®ëá“1éEì˜sµ¿¤ÂϱjÁƒ˜¿Q3�õÇÖÏUR"z'*«q*ñYå…xuè5Pç|~äïòY�;®°´ÌpDl"VÜr+†·RŽ®ÆûŸ¼‡»ŸÚ÷Â?®ïí=�¥�lÊÃËõ`¥íþ "f:�» Ç—ÜêÙ’¦9¶5cÜbl|êNÕñjc H�ýûó8v�ºFÉØþVÆå�زã\î^6(ÖØÎW}ÝE$bÕðÜìþ)¬ÄV9JvŠû(Ù6X‘}†_àYµöþ?óp÷Z°aŸ‡èfHëH€H€H€H 64{¡½/“ÓL2ÔÉMmݶç™�ÈU„Ž0òøãûâGÂ{ä¬Ý|nÃÒ°f÷õÒE™€ûœ—­2ÛÕ­2Fúœ•rÒÊÖ€“Vôi:a·¬&éî_„ �–ÉðæÿÚ‚i5×á6}ܱÿ©,µÕ1©â¿ð‹J˜KN¼‘³g/LGƒÓ”ÙúÒÏdë‹»$Í–w)N'�œ,“a'6ŒËÀLÝÑî6þŠíG–#3Ù‰›W gšÿ-¼�ÂBÊ¢;iÂ"‡ñ-µ;Ù½p0»·ú\”œ?�ä-T5ï"“ÁÃÚÉ Eá!Ûî?ͪ†Q"˜‚ŽX¶[Ž_îîóxãDa¡ ™ }÷£Ê ¡-µ%QÛjp j•/wñ6,íëÄ­Ha R.l¥öCá¾Õ²šca@v»ù jjí3ðÉõ=á“‹]Õ"öÆÅ©<�玡çN£?%�ЀÏCSCÎö� � � �@c Ð!Ô3îé‡�¿þ‘:©óu„óô¿±ü¸ufzºÿ2>‡É—¼ã_0°3Öÿ:Y=LVKH!.™”l_{“žÓ8U ·›Ïm˜81}é*ŒàûSݨþSxì<ÿØ^ÝV’àBÇy¬ÊÝŽùûÔ"Ì/vCÞìå OR|ú;,ºÖ~¦¯Û�OPJ©}Ÿþ¸e¯ãW#û¨wÝÅG±jÑKè=ù ç“V>>|vš¾/̸Yã7C‰qb×’±³ôC_²º}g ENëíØg£�¦ý¿+oÁ£û·¦�ƒ|e©~íR}_"YÁñÞ5½ÑÅ¿hIb*ñî'ïcœ²Â£?¶úOÄ©ƒ;¦¸W˜XuŸœž¤Yy£ .ìxüZŒ_++!tŸþX¶}9FjÁ*}½oÃËH¼åY-ìYrrë«ß½u«BGá~ñ‘3:¤íJ9³ÿˆ¿Ì2øýq"ÿ�ßaè¤5ºVioìæÓ–Ñ$¯/’q}¥q\WãØÉøûï‡ «›4ðyÐÔÊK    (t¨ÐZ"wâEø�žåË_œÆÊ—Ïyc‘û@W\ôý,}Ñ Z()ÄWŸíÑÅ›•ø¿�¾ÁÆwdåG°�Ý|J™½Ó�ÛÿB\Ô1 iIq¨(vâüSÈûLë82Xåöâ²ïùúwLFR£Å$@$@$@$@±C€BGìôU³´”ÂfÙíM¾Ñ‘׉Ö#å’Ö¨©2C™GE>Jž|ÕÆèNw å=c‘Ø¥#î8jÊ‹àú|;ÊV¯@�1=ïI€H€H€H€H PèˆÂN¡I~‘žúkâ 4�H�뤇óв[j�Añ”1Ðê qYóÑzÔM^�Ã$ëÙwQ4÷QŠ&hD$@$@$@$](tDWÐ�HO Õñ–„@¤ÇuÒÃoŠÐÑ5ûQ¶û-“tíª)ú_TîÙ§ ËDês«�¯9Q¹÷àܳ¸øZ¤ää"!5Á�¶jï|¯ß®ÉÇK    ˆ>:¢¯Oh‘†@¤'„šªxI F ÒãZ:Žý E¿]R»½& õç7 róhœÿX›%­WLƒ¢�Ôœø3Š­ÐFòšH€H€H€H€¢Ž…ލë¤%é ¡¶.^“@Cˆô¸V…Žz&Ú#åW¯¢EYÕQzç™èÛ£¡À±    �…Ž 1Iãˆô„°ñZÆš›3�H�kUèð®èˆ»$Ó�»æË|>6d[ËÙÖ’"+:N¾Œ¢§ŸmÎ]Ƕ“ � � � Ä 1ÐIÍÙÄHO›3[¶½ñøÆµ•ßO¹Ò**¤pŸÐÈ©)UrÊŠÛ÷†’Õ…ªCQ²<ŒTzÍB›©·»�”ºÄGG }t„ÔLD$@$@$@$Ðx(t4{Öß„°®¿ªbh0¾qmUa]Ç{‹Y»�Ò%Ùªxñµ!+3…¶2#yî.$_¤”U„ò%·àü—–Å2‚H€H€H€H€¢‚…ލèaEÀ7!¬ëÄϪ|†“@cð�k«ºë:Þ㳦 ñ¢V¨)ÿ ®}y¨:ý—ä"uÊ4$Èådçò,8YYà O³­uuß„#Ž/•±$@$@$@$@$Y:"Ë—¥×‘€oBX׉_Í`v¨W¾qmUhÄÆ{ßù¸`ÂMîj]»¦£d“öˆY½5qC–!-g€'Pœ�‹Ò*}Þ‘ � � � �@T Ð•ÝB£||ˆMü|ñ›š�NSÐæñ_xüm¼%BÇkæB‡cÀ|¤�½É�GPòàñîÁ � � � � Ä ±ÑOÍÖJ ͶëÙðHè4i�߇8)Ûe%tô�…´ ·»Ó'QúÔ(TžŽ„1,“H€H€H€H€"C€BGd¸²Ôz"@¡£ž@²˜fEÀÑ+ Ž“»P}NßlÇðçÑfX?w ©Ð¡9ªDäx†"‡ž ïH€H€H€H€b�…ŽXè¥fl#…ŽfÜùlº-ŽÁ²íd´l;©8‰òÍ‹q~�g{J\Ö\´5Ì»Rã[”>z;*5Bˆcð\É7̳]¥pn˜ƒó'�8Ãá-Õ‡ö¡Æ–eÌD$@$@$@$@ C€BGÃpf-6 Pè° ŽÙš-�„1ë夔Kýí¯(a¢I j˜kÏc(Ù°K½W.j;’Ö“Øç’kàä³:v¼!   ˆ.:¢«?h��…Þ’@ƒDjNR Ë1Ê¿Åù·žAùŽ@'¤I¿‰–ÝÚ/½â0м—§¯§ÄX    �F&@¡£‘;€Õ'@¡#8Æ’@0ŽK"¾C[O’â¯á:”,9ãH€H€H€H€H I ÐÑ$º±é6‚BGÓí[¶ŒH€H€H€H€H€"A€BG$¨²Ìz#@¡£ÞP²      h(t4‹nŽÝFRèˆÝ¾£å$@$@$@$@$@$Ð(t4uÖ2 !£bB      !@¡ƒÃ ª Pèˆêî¡q$@$@$@$@$@$u(tD]—Ð - Z¼&     ¨�…ŽÚ1¾Q PèhTü¬œH€H€H€H€H€bŽ…Ž˜ë²æe0…ŽæÕßl- � � � � � Ô•…Žºdþˆ ÐQ¼,œH€H€H€H€H€š M®K›Vƒ(t4­þdkH€H€H€H€H€H Ò(tDš0˯ uÂÇÌ$@$@$@$@$@$ÐìPèhv][ nH¡Ã1` R‡Ý„¸– ¨|ûQ”ïÈ7‡Õi,Zý×ÂQå2�—PG‹ZʰÌÉ      �º ÐQzÌq #td"yúH¾ìbµ=®·¦£äµ}ê½îâ’qÁŒŸé‚Ìn\»¤ŒMe˜e` � � � � � �@� Pè¨3BI‘:â‡?ƒÔ!×#.^ߊ BGÚ@$ÝÐ} ²ŽËîÁ¤£;¦bÓÝ(Ûu̘Š÷$@$@$@$@$@$@$@¡#‚pYtÝ DTèè4mÿ…*X¸>~è}=’€ BG�f¥üêohÑ!(?ˆs3&£:HZF‘ � � � � � Ô? õÏ”%Ö#�ˆ bg‹‡ßDJ»(]?•‡º!uÉ_�˜bSèè;L¸ÉÝzn[©ÇAÀ¢H€H€H€H€H€H :€Ť O ÒB‡¾E™"t¬²-t´x,)§J‘ÇQ2e4¬]•êkå � � � � � �@ý ÐQ,YRø„«¢¿Ÿr¥U”�ð:² &M¶ÁÄI­Õ‡–áÜò�6êg      �º ÐQW‚ÌQ±"t$Nú+Rû´E(_r ÎQ,,œH€H€H€H€H€HÀ‚… 0 ޱ!tÜ�Ö+�rpKÍÉ×Pôô¢è€G+H€H€H€H€H€H  ÐÑ ;=–š BGüèõh=øRÁêÂùuw |ÿw±„˜¶’ � � � � �@“"@¡£Iu'S7v|t ¦KÝLQºE�LCMÝŒ`n      �: ÐQxÌÚÔ„/t8†,C›œn•oMDékùM ÛC$@$@$@$@$@1E€BGLu��,­Ð1%µŠí‘òä«hÑ6¨:‚âÆ *²²t      �ZP訣›8�´öp¤¦I#Ï¡¦T„ŽyO»·¡¸öÌGÉÖxâN3ߎÒw.ÚL‡ä®úø7(^ýj‡Åæ‘ � � � � �@ô Ðý}D #H Å¬<¤tI ZCõ¹¥«Ò´xLò^¬ä=ƒÒ§nEåé€$      h`:8«‹.‰“^CjŸŽA�ª9ñg-ZaH“‰–O>‡¤¶É0�7$ç- � � � � � �@ƒ ÐÑ ˜YIS%à¸d gö¡ú\Sm!ÛE$@$@$@$@$@±E€BGlõ­% øÿÛ;ÿ¸(î3�šˆ4¢FÝãù£HS‘»Õ•Ü Wñ¬ÊEë´‘Zih±Ú¹âi4FrF/¨×—èKÍ£�¨5@šC±J"FQIa••Ü3»;³3»³ËðÌ;?¾ó|¼gæ»ó}æyž/`L€ 0&À˜`N°¢Ã NbL€ 0&À˜`L€ 0&À.¬èx¸®×– 0&À˜`L€ 0&À˜pB€Nàp`L€ 0&À˜`L€ 0&ðp`EÇÃu½¸¶L€ 0&À˜`L€ 0&À˜€¬èp‡“˜`L€ 0&À˜`L€ 0�‡‹+:®ëŵeL€ 0&À˜`L€ 0&Àœ`E‡8œÄ˜`L€ 0&À˜`L€ <\XÑñp]/®-`L€ 0&À˜`L€ 0&à„+:œÀi­$}| æ�ðFí·%x3a#*[«`.‡ 0&À˜`L€ 0&À˜@;#ÀŠŽ~Aƒ‘}q'; 1`kT’òx¥¸L€ ”ÉY2&À˜`L e hPt„#óÄJøv¢×o�zìŒ�ŒT~ënÆU FÖù�ÞEÈ¢í):bÓñßqAh¨··�õðÀ­ÓÛ Ÿ³Qq˜w˜@«èס~�PqèV;°Š’+@e$ ň…\Ù¡ö²éïã‡ÿö,úx<‚â²ãXøÕ÷M4­'Þ�8S¼§�¸y©½]…w>;Šÿü® ч59 %9¿DªɦWžœ×Â-![ñNLè­žmÁÚ—™ÆŠu:-wÔß'o?7¾žæL�¸r« ;þö9Ö_wð_Œø<´rΉ 0&ÀÚ!·º˜Í(\5ABQ±/a±{¥ý޹aþú:A÷jJÞ‡_xª["ו‰¾¨;—�×¶´©AZhânì^ä´=jó`7Ûì4CNdnˆÿ@�øñ]i°ûˆIªhã!D¬¹åFmóÔЈÐ¨«»�§'½Ž¤H_Ò…#ŠíK·Ü«ÇŒÂÌ>d¾bYN—Á´37Ä]•õSøpú=¦’„zl>r«®«¥=äÇî³¢#€úûK_Y�‰ß¯X�³ÕOÂòTDŽñÂÖùo´³{¯íÝ“Fc‹_ÕŠn–`è¡/UÒ:èó B‚1&À˜ ¸­èHÜs‹G ß“,KõqL œ‹3â~‡\“UF)YeÐ{ºEG[FfUtT#gë>|Û¹3:Ë+L;ö­GzîUùQÞf­F qïT,²|ù¤RÛ‹¢CP€ÞgEG̺xñn.¢IáÚËô¡#±Â¿?z›uTR‘M):–��À‚^æk~åj–ý>‡ã¾}ÌÖw®`æ¾(�rl'äºRB®+÷Ë¢ÃÚßWa­O(ÒÚ ¶‡¦}ƒP6z Lž�·±“,8Ò®1F7óuÇþO�`ýmûÖtØçÁaL€ 0& pSÑŽÜó0”þ…�:uþŽk)®ÄsMÆ•Ðég`î„@ô¤�2p7.”`_úÞ&$Zå€`Ä&NÅÀžæò.Ÿ:‚´L'f¾º`èý·€¹�Ü\³ï³>&úwA�0¼¯ø ©Ö¯u£zãçú>ôë]÷Î �!4ÔÝÅõë·ð ùÌgrdÎ,T¬â“aLPwt·èê 8}ê 2R.9¹¦Zå<“ä�cz ;•^×`Ä÷×k�·ý,ÒUê0±Fú<*#xŸo»bª—~®/æMí �ºFxt½‡/öŸCò6³µ†þç>𩻇Q¿Žé- £\ªŽ—beÖmx Ý“¡»nÊònƦp¯÷FmyòϨ<Óô\éõægúl®ðœ)¡¿˜ï/›lz”Š¢ CÅa¼¶@Å¿={È"c”ð~,,ÔÞ†äâ4Œê-zÓqãiÄ xY’_‘} Mß^Lbj?ÕF`¤}üŠÐa÷Âav"e[_�>ɪL±;�ħÀ²édÆn³Ô”įÆÅJõ“’Éܹ”üº½(HÎŽ\þó4èdÍÎ+Û·úØ¿H"↶–6ž‚rJËuëê6—f–g.7ë²Ö`òo®}�Õ³æ"Óv„+VPã:þƒŸaÙxQ §žIÙ‡'¡_ú�]¢>a$Þ‰{𮽣¥EžFÄÒKŠ´ÊaÔ@änþ †>¡ÈNÚQ«çŠ}Ó±p˜\Ñ^y§&�Á²<%YaÃxáK ˜t–¶º!û«‰– ¾ŠSlvîaSô>$Øv{×™¥0ZY}˜¬ØØõY±Ûó‘d n`À& *œœ/"¸¶mÅ�z_Qqø]„ÍyK>ó0⃽!ÄéôôzÂÒÂS]�†Nððì„“ió�foi¡‹Y‡œ?êáYoDƒG'x™¬cš0»ýSL ê%a©EyÉexð…Nœ¨µOæ×m–£:V•ãì·ØßrˆL•CÈTÙf�. °lÚ.æ£¾ÖÆSx¹×r„:hâÒŒòÄvK_@-jŠÞ…_„óA«(ëê:`a(r~goýc+Ÿóú~Ìß%û‚=qJ· v¢ä°äPõ5BBNYŸ_­rý¢ðÄOLÊOÛºÉ÷Ëv‡>±J:´bßTRtX-2„£áYŒ)•ÂñŠÿ=‰°…ßÐV7r›h â+¤8Zî`ÓÔl$ º‘f.VE†š›Õ} •‰g¬•'•»&ïf ¢¹+ µ¨¾võ�¼ÐŸúq)Ú0NfÐ�žÃûiÑa©LüºÝX$YZÀX‰}iË›æ\+¶Eûº;):ôM*:¦ÿt"Þ,°»�·²þŠõwå%vLJ”‡àÉT{ó,†*•'jÞÖtýšÑï®É=ƒY‚餰éÿèZ=<½uè!Ó•µ˜¢#t%.îž+ý™ µùupßiëwµö×6urs74z>Bûªuq3'ùéw�¿k‹kV˜r1•íQCÇbç0AÍaÄÎÜ��Öe~ûL72Ý»‹ÊÛ·pôÒ×(PÜëæLÄó R}>Ę`L ÍpCÑ1Ùçÿ ‚ƒh¥±î 6FÒ×TÓÌ`ÙL±�3�{q † :†Ê�á²DL µy »À¯7#"ÁÖD«Ü8šÁä¿Ìƒz9ß´` ’-ÓÄo?Œẽúc9>Z-r¼n)™/’Y‚TaÏòyØôäIybRð¨ô%K„&‹M]Y¹N_^–¢8g‘é‹jNcù¤—‘aRLøb]î.DZ>£ÛEÆW¼pÓ´„›â™œmºú”��1O°,1âpJæ¤+#êK,ã9Ä x 'uÊ i••j&ü–Ë,k—ùˆ‹<Ý•ÓÊÅRM¸[ž(GëÐĬ•î Ër³öCÞßGa�á*.Õ ¢¢ž\£z t˜U¹&_S\ ¿Öëš4»x‹U|¬�³¿7;{b؈§Ø_xé¯ÇÚ©9H“)´Ê%î §X²�Dí-ìØvxn f½ û2müqCŽ ËR³˜Ô‘øÅØ~ÚÏ&PƒµæÒVÉæCO\Wº"}_FÐ8Àã©®èÝÅ*k¨¾�Ë5?À?¢æ]Ç/_,¶QlJÙ¹·¡OÁùŒh“À.3¹}\$·¡«S}†CÃóT2²dJO}"Š3~izž›ºo¤çÐÁ€Ó½†¸pvÀ lßø{…%^Mùa¼·™J-± ™¹zŠkŠŽå)>‡7i2ªðÒGGÑoH^é剆;×Sô%Þ¤ô9”n¼]�1ٟ㊫Å;;OËõÓÚïÊî%T".h–åY!+�\²ò°ôóª÷™³68J ˆC^æ+è&(ô»x¡·—Y›b¨ª$—MâLJþú3»�ªÌAk¿«UNYº{{Tf)ýwŠßÜvv¶;¢|‘�ïì×Ò$EǽÛ(¬nDH/ÛÚ6à`Q^ø^‘áy5à&À˜`m“€ëŠŽèu¸¸všéEþðò0ÌÉ ®~%J3æš^Êw,ƸóàÙÚÔÈ#E}Èç4×Þ­Âz²lK›œÜšÃþ ©õ‹«Ã€¡è­”½™_/ Ø·,±™4˜µ¸™˶a€þ Y=ÅM«Ë…üÅSÕÖ.˜Ó§ ¥„¯)‡Ã)t ÒeJ]ŠÉw[ødWÙ ·�›½–Ð  ð}TíÅY`©Õ›ŽU�ËK˜ŠË‹ét­<Ý”ÓÌEl“›å‰b¦uD J7FK/Ðôe>ÒÉ—y…¬;:Tž•Yk�¬­B¢æ4):¦Ë £±;®—µAñð~ Ö[¬)&ú ÞçÒ,1/ÄCµÈ‘5G1Ys÷Ÿy¹ƒ aÙHµŒ2m­6 Þ>„ÈõæXæó¢äï?‘)ÍGkÎ]ÆIϾ'G°î¸‡}¯ÿ±r«:¿3ËB¬ –¢�iÖ•:s-úKî+%ä¾"<,6A˜­_¶+‘2é6–QŽªKqu’„ )&BÅÀq4^’žÃÖRtX*¬�]ƒÿÍ X½n (غ ‘I¶}½£ºsÜ5EG¹»,êE×»á*):.QŒ¨é¾ÛlþoÈ4ü®¥ß«Âü�âwªàæ¹N¯ŸÆ~7ž~/3ü6`O\–ˆA¡n2¥¬ZífõíN×Åï@¡ Ôw!F‡Ö~W«œ]eÝ9@ÿs…͇Å j¹¥©�.áÏQ/!½”“'b‹¯Ð¹ˆK#®|W��tŰnž–ƒ Øž›…?Èbw´¥çA¬9¯™`L€ ´.+:b3Éÿ|4 cŒåX6`2hüO ðK(¶…ð߬b® η¥ø¦H£#*K �——‡œm[�ëp0 MÎêF`$%Åll¸iZSQƒÙ² ó�L+{15”gbð¸$¡‘Ð…R ÕÉ?†áË\?›©è�•ëìåuEö„¾Œ“uÅ2²®0_SéG6³4Éò/ÚD&òɲ¯Ê²4µ²¥–XŒÍÚ@ÊŸÁªÊ:Q–·[<Ý”ÓÌEl‹›å‰bÒš¾öÆ�÷Ãwg÷Ó{«¢AJo‰ ÿÞH‰‚ ?íŽ^d½@ïë]<`q×7•Ф¢CªG#ª*¾Ãу°:å…‹…pŠ�¢Ã9_”ì÷³**Œõ8vø:9ÐBæÖ�SŸQ¸´”l>J–7¥œa+/¤T}K. ùx™I&EÆ=l¥xIV1aËÖ’Ä.oåéÍÚ³Z±‘ûJ a6YŒY•¨NŸÝ8$.š�‘�ÐU0H ]Œÿ¨aw9çÓÆJÏa++:DX‰ä2·Øâ2ç´�¢€¦µûŠŽ™ÙWðÅ5‡‡…³ã“§'ÞE‡»×OÖ¯¸Óï&’ÕÏâáÔ"ºÖ1ä"jºÅDž²<Õúkñ4­kù}fW¶M¦Zû]­r6Å·»]É2ChYc Þ=tk, ÿ!¡ÈzîiÓ‡¦ê+CÐñr©ýrEG«>R xƒ 0&À˜@Û$ࢢƒ\BJÉ%„LŒ¤ä ¸-X¿>US¬�`›XÔhÝldí_�áò žUe±R+™°+i�‹'eÌ2AÓÔb  ¢ƒ­AE¥Ó/‘3.WH'©m´Ž¢Czv/CJ·}AV´ëj—Ì×ÞY5Õúâ{ËÆ.DI�'•ªÏáŒ#…•"o7xº)'µÛ].bKÜ,Ok­uDrÖÏyʹ=UÆVÑx#³p,œ>†[Xsi å�ûrº¹#pâ�gš¬£ÈÌNa§èhDÎÊlÌß&X±tEÄ4!ë=”|ÓÎ ¥5�Y@Iî+²ÙJŽ¥�[œ�û—ÐæøíÉuNpós°4¡À°>‡Î"roÖáИ¬þMYb9¶lkV1$욢CšJÓâº2ã…ÉøÅSž¨¿}¯ÌÇXÑ⃦˜}‰¦˜•yei® ¦ë§èW\íw}±�>˜bÚªõgÎòÔÜ:« ;÷™Ö~W«œµ–Z¶ú 4ô-‚Îej¾v0“s1µÔy#iÆ g{Ò;ØN³1ýáºò¬·_|ÿô™ÇÖ_ÆKûó¥ûúA<Êšñ`L€ 0�¶IÀ5E‡ÜgØI;œÍ‡yÿ8#†P�O²J—êBÄÎR~µÓh펜Õ|œ2ôOj·PàO\;Ѝ°X»“ÜÁ½¯emCѱ‚¾.TûèìåØYšÀ?q7Å ¢Q´2«WµMä­&b:æ¦\S/ιˆp³ÆŒÑÞð\ÈÔ–+—àVl“â¦0=O�O»Øäâh·lûQèW8±è0ÜDŒßQ‡ý‚<_{E‡ÇC~VËm¯;qÎ`™ÜWBçb2Y;¬¬,qläžB©)a£)íªplÿÿ௟}‰›×래j޹кp¤oY‰é�VåqMÅq¬^:Ž|lš…Ù5E‡4 lü+÷æb«¢Lkµ×)é‘REª–Í×ÏY¿â0�¬ ³ÌA¾Õú\‡rZZf/#õ÷MÜ�‚¤Ö~W«œ}mÝ8Bî‰çÉ-ÕÕþÉõœk)>Ùs*ñÉ\ÏA<ÓŸ‚‘‚‘Þ»A.WGì\®$Ë ›ôÖ~Äúòš 0&À˜@['à’¢C®@pÖ cÅÇ&8ª~¶N?ïüûk¥ìˆ @‚Â>W›œô’F³‘l¡™\Y¨g¯pµh‹ŠŽYäº2\`V�å>�¡h‡UÙ"Ì‚£˜YÆÙ˱³4Ê_bꋯ¢:ÂNyÛ�/pSN3�å‰b­±¶�ÃÃwX>ñ2L±/”q-ÔÖZ†NóAdä@¼HJqB!sêm¬ û_¤™ò´ž/n¹$7Ê¥™~’«˜`}±çõ<ì¸þ(V(-÷PWe4†ì×û1ÔžªB¾¼<[‹ŽÚëˆ <æ0f…X7a�¸w*A%_Ëb;«‹x¼¥ÖÒ3Aý̦¨ùðÿ`§iÚÙêc4•tôF»b$S}rZKñ;ä355è3“ÊTüŠ'µà:fÍ6¼>ëÙõ¬FΆ?`~êýˆÍ!Vܪ¤p:½ì�Ñ8ð\jÄþü�±è¹F{ŽF�€vºúj ‚>ýRÌ\óZóõsÖ�9I“î 5ËC™E‘{ÿQ®5_ºÏ\èïµö»Zå\k�ƒ³ˆ·yŠuéšW‘%k¨½%«†ü¤`¤°�Ã!d'YnØXtø·òó ¡i,˜`Là�pAÑa@H‘ñ‹(z‘ïo�nŠ}ñÞ_0O°$€Ê¥Â,*3s„®9ŒÝ³Ì³ ¨¾°i�ÓŤ£pÕdÈŠ ’9ÿ/îAuòòé<#«�¾¦YWå:vñƒ¢ u)ÚðMG)‹! ¨)Ί#ÕY‘¿«&ÔfiéÅWËËY¹RåT6Ü”ÓÌE,ÚÍòD1óz¶ä®Æ$šî²¾ºëÕ"�éÄ2lãe¯|�°0óT°){§`^�¤Ž$*ÎÃgÜiQ”Ö‚ Ê ¸ú R^/F¦hÃÿó¸¸ZîfB�Ci ÖT1]“\?ä~5Ê<Ã’¥U…¥˜:óœ$:i„±dúöÖT¶Š):ü\StÄ~ð3$�\[Ì‹±âkD�;…ü~Ý¿¤?î|xé ×ñL­ëÙ8ñM²i0]Yr^�¾¤P iÉ^¸ªxL¡¸;BÜ ¨ jeÕ“žCEŒ$Ù -´©Ó/Å–5ÿ†@™«aeÑ^¼‘à’Ò©yÕ�+:r1íÌ÷êÙ=þc‡šârØ*3¬ƒEà8Åë˜}¡N=7Žj¾~Îú'iVLŠ5ç‹X™‰�ðw‚þãã,ÕÿM7Ú¥vªtŸ¹ èÐÚïj•S«o»:&»¯/\ø‹®Éš§Ã¡Ïc …g2дÉCåÓ&ËäZãy�UŠ7™`L€ ´iM+:dþçŽ^¬t1›IÁ0ÁÔPÅ94+K ÍÊâYQˆ ©FšejE!¸ç[o½‰ÑýCR‹­rò€œ­±hÇàÕ„-¦�V@Ä|$þ&Á ‡1IŸ ¾W'”f‘ÙmžE¦d+)’d±,'Úîô!sã£sãÓH‰zÙ<Ø5¯{'“RUMðu:_ʈ”Á)8A3w˜^^·.¦r‹ #Kxà*ÅA‘•¥›�ÂÂß›ƒ:Òô¹[_‹BRÖUŠƒ2Y9ÂpÓgzû—c§–N^¸…’­/¾£ãåß⢗UÉe­Y òóeJ1A+Owå´rin=å|,yiRt‰õPYÛYtÐ9FCM û(¼dSªšEï!çOŸ`þ&apGÓ¯~2 Ó ³•˜—êªzš*òxz=¦b …RA«³I�U?“¹¥ ÅPI–Þ½=¥2+�#ä_/YjE;§`qˆLa#¦I¾)!]ný!¦[Ö¯…!ç×OÙµî/œÇ€Ir�5Më–õ+¿%ÛÀ²Œ­çVck\0=³æÄØôHš.ôÂR‰8Ÿ1êñŠ(Uz©_;¶a!¢S©oÒ#zìãÈÌtµŸ2äð' vr’^°¦Sü�M)¿Fr¦Ê³m=«y[�=àï!Xã4àlC|>‚qιóŸaÊÙ*SZõí:›)b=ðî‹Ó0õ aJáF?}³Ën½üðùxË ,ßã·»s±«yµ3Ik¾~ÎúVgi²ÎäÓˆĬAæªRàUÅm ´SÈBºÏ\Pt@k¿«U®…ÚØv³ñÀ¦©˜lê °Ÿ¦’]dšJ¶;ÞÕ�ÃÔ'ÍVkÇ¿ÈÅì¯äJÀÖ}Ú.?®`L€ 0%�&1¢ÿ9Yk86Ñ´Nk¬ØKî+ ¦R¬�J-… ¨¡±–——ÌS–Ü,¢‚(¾j•JÑÑtŸŸÈ¦û¤Q!©R:Ñ Ë  `íKˆL“¿¼Ëü¢-UWvSµŠ 6ëèu±6ÒlÐ`0 Ks;+ɺ$ÄÆº$&ý0VM7[´Ød%íJÞÇàðTi_؈^skg‰ƒ# �Q] OŠy"¶®ºà}Π-K|IDATF*eèíUš6×îåØÙ 7•'½ø*ja³c¤à®äÁ]µòÔ*§‘‹0+�èoÓ$W¯»-µkf“µ{»þCh6“ipÓ”ð±?D´ èpC®hóqŠ#a™rV«œ©bݰ%o<¦ô Î–;ä*“-¹ÊØÆØPJ6ÐL+ûífZQžÓydMbšÆZ™`ÙkÄž_eaÉǪ‰šÊ•»BR`R•Ü”÷ˆ‘f¼!íezÛM©"×— ×S–2—aßHý u0ôÜ«(ŠUêàÚ¡pdŸß€À.íyK6º&ÖŒ³3M8ÈÇö+µé´'ýP¬÷—ž‹Ú;wÐå±Ç¤~ðøi –Ƀ2wá°æë§¹ßíƒuy4ýò ñÒ€êjºezˆûæJÛõå.´¥©S¤¶’¢£©YW„¼4ý5C®©ú?ôé½pzüPˆêbc#){yDº¯ ·.`èAÛxJÔêV|zÆÜ&À˜è0šTt¤Ÿ8ƒédy!Äߣør9%é«—Í RLÊf,™9½•ïh$j@yÁ¼©n­UÎT'2¿Î~{>m^ �5•ødÇÛ˜Ÿ¼W^uÚ¶ºžØ$P¸ |Ìqí…_ˆÌO3+ˆJs^µ8¶)ÑÉÙŠ¬%shËQš-ÔFŽ”EïÃ/ÂFiAçE$nFÊ«lâ,P²ï-„ÇnQ”cÚ¡ARqÎ"ӗ΢M¯Ðô²²/À’¢Ãˆœåc1?ƒ,DdKhâ F";¢²içÖ¢•§V9s�ÜæÒ×Ýb}$8nÑðÇÖÎFtÚIs…Zè7`n2ßxVÔ‰Ù®\Æ÷ª0-!CMoÆ·÷‡¬V£|°ý�LðU±–jKJ²ìŒ"Ä®—2×*gª1݆y!⫺é ôS}á[lü}¾Â•Ĺ¢ã6Eg#¹@ÊB}cÔ@änþ‰…ƒò”š+×±zÁ1dœUoÞž¨rq¦6—³î#ü1r˜ò¯)ǦÕ;á÷[ŒÖu‚£b=CãÓñÁ²É²¸BЇ×ÎÜ–ºçÂá•�¬|±Ôû»þ·ç_Äïž¶º©•VK¦úÃä¦úâIdÁqtŒ?ú[�–(¥GNGŒ`áÑ‚‹¦ë׌~WøOZ—½‘²@°Âµ.ر /Î%ë=P_3³ÅûIÑAA£(H¸+·�ûý®ùÂh•kÁËÚ6³êK÷õó¶÷u#.\.ÃìÏJm¬›dMhÅçAV*o2&À˜h³šTt´TÍôáô¡}ˆDÝ ÍÊs¨4‘—©UNÈÃ$ÛË<È«»x†^ÞåVòRZrÛèJëê*�eq×iÉÌyõAD´ž¢)�‰ )‘ÊîE¾#-TËÞ†s|\‚ÉýQWvœî±«÷‰MWD/ì‹÷6›/W}ué»nYÊò@ôkÐ÷»HÛf£´ΠX1Ó{¡¿Ewðå©o‘y¨Îy]µÊ ¹úwCtpôíÓÝ:?‚»5œÌ­DîYyàHçÅkIÕÏ}Á}º sg˜Ë, 2 îo™®×ÓzêzySŸtódR(.úèÙtá/È=#q´îCy¼€^B€W7úQG¹=üÇ=0ݧ/¼MÊŽ{øüR¥4ífË·­%®Ÿ{µþÃFúx“P}ïãµö»ZåÜãø0ž=ÉçøÐ}]ï.]»†‚»®´¢5ŸWêÃç0&À˜xpZMÑñàšÈ%3&À˜`L€ 0&À˜`…+::Ê•æv2&À˜`L€ 0&À˜èXÑÑ.27‘ 0&À˜`L€ 0&À˜@G!ÀŠŽŽr¥¹�L€ 0&À˜`L€ 0&À:Vtt€‹ÌMdL€ 0&À˜`L€ 0&ÐQ4©èØœõXGaÑîÚùã?ÂõšÿL»k[GhP#<áéÕãi^:�~ôjn�ÇÑO;N£¹¥L€ 0&À?üЉޯ/ã—W’s5™@Ç$ÀŠŽv|ÝEÇ]Rvü=o�îÕŽ[Ú>›&(:®Ãƒ½{àyoó´²í³¥Ü*9AÑqëÑÎøÑ…Ýð(úBžÄÛL€ 0&À˜À& (:¾¿÷î\/ÇÅK7pm¸x&Àø]ÌÚ—dÿ IEND®B`‚python-better-exceptions-0.4.0/setup.cfg000066400000000000000000000000501512667334600203270ustar00rootroot00000000000000[metadata] description-file = README.md python-better-exceptions-0.4.0/setup.py000066400000000000000000000051161512667334600202300ustar00rootroot00000000000000import re from itertools import chain from os.path import basename from os.path import dirname from os.path import join from os.path import splitext from distutils.core import setup from distutils.command.build import build from setuptools.command.develop import develop from setuptools.command.easy_install import easy_install from setuptools.command.install_lib import install_lib class BuildWithPTH(build): def run(self): build.run(self) path = join(dirname(__file__), 'better_exceptions_hook.pth') dest = join(self.build_lib, basename(path)) self.copy_file(path, dest) class EasyInstallWithPTH(easy_install): def run(self): easy_install.run(self) path = join(dirname(__file__), 'better_exceptions_hook.pth') dest = join(self.install_dir, basename(path)) self.copy_file(path, dest) class InstallLibWithPTH(install_lib): def run(self): install_lib.run(self) path = join(dirname(__file__), 'better_exceptions_hook.pth') dest = join(self.install_dir, basename(path)) self.copy_file(path, dest) self.outputs = [dest] def get_outputs(self): return chain(install_lib.get_outputs(self), self.outputs) class DevelopWithPTH(develop): def run(self): develop.run(self) path = join(dirname(__file__), 'better_exceptions_hook.pth') dest = join(self.install_dir, basename(path)) self.copy_file(path, dest) with open('better_exceptions/__init__.py', 'r') as file: version = re.search(r'^__version__\s*=\s*[\'"]([^\'"]*)[\'"]', file.read(), re.MULTILINE).group(1) setup( name = 'better_exceptions', packages = ['better_exceptions', 'better_exceptions.integrations'], version = version, description = 'Pretty and helpful exceptions, automatically', author = 'Josh Junon', author_email = 'pypi@josh.junon.me', url = 'https://github.com/qix-/better-exceptions', download_url = 'https://github.com/qix-/better-exceptions/archive/{}.tar.gz'.format(version), license = 'MIT', keywords = ['pretty', 'better', 'exceptions', 'exception', 'error', 'local', 'debug', 'debugging', 'locals'], classifiers = [], extras_require = { ':sys_platform=="win32"': ['colorama'] }, # This all comes from pytest-cov repository: # https://github.com/pytest-dev/pytest-cov/blob/cde7c378b6a1971957759f42ac91e2860b41cf89/setup.py cmdclass = { 'build': BuildWithPTH, 'easy_install': EasyInstallWithPTH, 'install_lib': InstallLibWithPTH, 'develop': DevelopWithPTH, } ) python-better-exceptions-0.4.0/test/000077500000000000000000000000001512667334600174725ustar00rootroot00000000000000python-better-exceptions-0.4.0/test/output/000077500000000000000000000000001512667334600210325ustar00rootroot00000000000000python-better-exceptions-0.4.0/test/output/python3-dumb-UTF-8-color.out000066400000000000000000000226131512667334600260350ustar00rootroot00000000000000python3 test/test.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 17, in shallow(bar, 15) │ â”” 2 â””  File "/removed/for/test/purposes.ext", line 8, in shallow deep(a + b) │ │ â”” 15 │ â”” 2 â””  File "/removed/for/test/purposes.ext", line 13, in deep assert val > 10 and foo == 60  │ â”” 52  â”” 17 AssertionError: assert val > 10 and foo == 60 python3 test/test_color.py True python3 test/test_encoding.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 14, in div() â””  File "/removed/for/test/purposes.ext", line 11, in div return _deep('天')  â””  File "/removed/for/test/purposes.ext", line 8, in _deep return 1 / val  â”” '天' TypeError: unsupported operand type(s) for /: 'int' and 'str' ./test/test_interactive.sh spawn python -m better_exceptions -q >>> import better_exceptions >>> def foo(a): ... assert a > 10 ... >>> foo(1) Traceback (most recent call last): File "", line 1, in foo(1) â””  File "", line 2, in foo assert a > 10  â”” 1 AssertionError: assert a > 10 >>> exit() ./test/test_string.sh import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine Traceback (most recent call last): File "", line 1, in import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine  │ │ â”” 5  │ â”” 5  â””  AssertionError: import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine Traceback (most recent call last): File "", line 1, in import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine  │ │ â”” 5  │ â”” 5  â””  AssertionError: import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello there"; print(a); assert False Traceback (most recent call last): File "", line 1, in from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = 'why hello there'; print(a); assert False  │ │ â”” 'why hello there'  │ â”” 'why hello there'  â””  AssertionError: from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = 'why hello there'; print(a); assert False why hello there Traceback (most recent call last): File "", line 1, in from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = 'why hello there'; print(a); assert False  │ │ â”” 'why hello there'  │ â”” 'why hello there'  â””  AssertionError: from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = 'why hello there'; print(a); assert False why hello there from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello " + " there"; print(a); assert False Traceback (most recent call last): File "", line 1, in from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = 'why hello ' + ' there'; print(a); assert False  │ │ â”” 'why hello there'  │ â”” 'why hello there'  â””  AssertionError: from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = 'why hello ' + ' there'; print(a); assert False why hello there Traceback (most recent call last): File "", line 1, in from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = 'why hello ' + ' there'; print(a); assert False  │ │ â”” 'why hello there'  │ â”” 'why hello there'  â””  AssertionError: from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = 'why hello ' + ' there'; print(a); assert False why hello there python3 test/test_logging.py ERROR:__main__:callback failed Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 16, in foo cb() â””  File "/removed/for/test/purposes.ext", line 33, in bar3 raise Exception('this is a test exception') Exception: this is a test exception ERROR:__main__:callback failed Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 16, in foo cb() â””  File "/removed/for/test/purposes.ext", line 38, in bar4 assert baz == 90  â”” 52 AssertionError: assert baz == 90 python3 test/test_truncating.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 12, in div() â”” div() â””  File "/removed/for/test/purposes.ext", line 9, in div return 1 / var  â”” '999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999' TypeError: unsupported operand type(s) for /: 'int' and 'str' python3 test/test_indentation_error.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 13, in exec(code)  â”” '\nif True:\n a = 5\n print("foobar") #intentional faulty indentation here.\n b = 7\n' File "", line 4 print("foobar") #intentional faulty indentation here. IndentationError: unexpected indent python3 test/test_syntax_error.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 12, in exec(code)  â”” '\nif True:\n a = 5\n b = 7 *\n' File "", line 4 b = 7 * ^ SyntaxError: invalid syntax python-better-exceptions-0.4.0/test/output/python3-dumb-UTF-8-nocolor.out000066400000000000000000000204101512667334600263630ustar00rootroot00000000000000python3 test/test.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 17, in shallow(bar, 15) │ â”” 2 â”” File "/removed/for/test/purposes.ext", line 8, in shallow deep(a + b) │ │ â”” 15 │ â”” 2 â”” File "/removed/for/test/purposes.ext", line 13, in deep assert val > 10 and foo == 60 │ â”” 52 â”” 17 AssertionError: assert val > 10 and foo == 60 python3 test/test_color.py False python3 test/test_encoding.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 14, in div() â”” File "/removed/for/test/purposes.ext", line 11, in div return _deep("天") â”” File "/removed/for/test/purposes.ext", line 8, in _deep return 1 / val â”” '天' TypeError: unsupported operand type(s) for /: 'int' and 'str' ./test/test_interactive.sh spawn python -m better_exceptions -q >>> import better_exceptions >>> def foo(a): ... assert a > 10 ... >>> foo(1) Traceback (most recent call last): File "", line 1, in foo(1) â”” File "", line 2, in foo assert a > 10 â”” 1 AssertionError: assert a > 10 >>> exit() ./test/test_string.sh import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine Traceback (most recent call last): File "", line 1, in import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine │ │ â”” 5 │ â”” 5 â”” AssertionError: import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine Traceback (most recent call last): File "", line 1, in import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine │ │ â”” 5 │ â”” 5 â”” AssertionError: import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello there"; print(a); assert False Traceback (most recent call last): File "", line 1, in from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello there"; print(a); assert False │ │ â”” 'why hello there' │ â”” 'why hello there' â”” AssertionError: from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello there"; print(a); assert False why hello there Traceback (most recent call last): File "", line 1, in from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello there"; print(a); assert False │ │ â”” 'why hello there' │ â”” 'why hello there' â”” AssertionError: from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello there"; print(a); assert False why hello there from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello " + " there"; print(a); assert False Traceback (most recent call last): File "", line 1, in from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello " + " there"; print(a); assert False │ │ â”” 'why hello there' │ â”” 'why hello there' â”” AssertionError: from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello " + " there"; print(a); assert False why hello there Traceback (most recent call last): File "", line 1, in from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello " + " there"; print(a); assert False │ │ â”” 'why hello there' │ â”” 'why hello there' â”” AssertionError: from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello " + " there"; print(a); assert False why hello there python3 test/test_logging.py ERROR:__main__:callback failed Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 16, in foo cb() â”” File "/removed/for/test/purposes.ext", line 33, in bar3 raise Exception('this is a test exception') Exception: this is a test exception ERROR:__main__:callback failed Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 16, in foo cb() â”” File "/removed/for/test/purposes.ext", line 38, in bar4 assert baz == 90 â”” 52 AssertionError: assert baz == 90 python3 test/test_truncating.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 12, in div() â”” div() â”” File "/removed/for/test/purposes.ext", line 9, in div return 1 / var â”” '999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999' TypeError: unsupported operand type(s) for /: 'int' and 'str' python3 test/test_indentation_error.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 13, in exec(code) â”” '\nif True:\n a = 5\n print("foobar") #intentional faulty indentation here.\n b = 7\n' File "", line 4 print("foobar") #intentional faulty indentation here. IndentationError: unexpected indent python3 test/test_syntax_error.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 12, in exec(code) â”” '\nif True:\n a = 5\n b = 7 *\n' File "", line 4 b = 7 * ^ SyntaxError: invalid syntax python-better-exceptions-0.4.0/test/output/python3-dumb-ascii-color.out000066400000000000000000000224661512667334600263300ustar00rootroot00000000000000python3 test/test.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 17, in shallow(bar, 15) | -> 2 ->  File "/removed/for/test/purposes.ext", line 8, in shallow deep(a + b) | | -> 15 | -> 2 ->  File "/removed/for/test/purposes.ext", line 13, in deep assert val > 10 and foo == 60  | -> 52  -> 17 AssertionError: assert val > 10 and foo == 60 python3 test/test_color.py True python3 test/test_encoding.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 14, in div() ->  File "/removed/for/test/purposes.ext", line 11, in div return _deep('天')  ->  File "/removed/for/test/purposes.ext", line 8, in _deep return 1 / val  -> '天' TypeError: unsupported operand type(s) for /: 'int' and 'str' ./test/test_interactive.sh spawn python -m better_exceptions -q >>> import better_exceptions >>> def foo(a): ... assert a > 10 ... >>> foo(1) Traceback (most recent call last): File "", line 1, in foo(1) ->  File "", line 2, in foo assert a > 10  -> 1 AssertionError: assert a > 10 >>> exit() ./test/test_string.sh import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine Traceback (most recent call last): File "", line 1, in import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine  | | -> 5  | -> 5  ->  AssertionError: import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine Traceback (most recent call last): File "", line 1, in import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine  | | -> 5  | -> 5  ->  AssertionError: import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello there"; print(a); assert False Traceback (most recent call last): File "", line 1, in from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = 'why hello there'; print(a); assert False  | | -> 'why hello there'  | -> 'why hello there'  ->  AssertionError: from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = 'why hello there'; print(a); assert False why hello there Traceback (most recent call last): File "", line 1, in from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = 'why hello there'; print(a); assert False  | | -> 'why hello there'  | -> 'why hello there'  ->  AssertionError: from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = 'why hello there'; print(a); assert False why hello there from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello " + " there"; print(a); assert False Traceback (most recent call last): File "", line 1, in from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = 'why hello ' + ' there'; print(a); assert False  | | -> 'why hello there'  | -> 'why hello there'  ->  AssertionError: from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = 'why hello ' + ' there'; print(a); assert False why hello there Traceback (most recent call last): File "", line 1, in from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = 'why hello ' + ' there'; print(a); assert False  | | -> 'why hello there'  | -> 'why hello there'  ->  AssertionError: from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = 'why hello ' + ' there'; print(a); assert False why hello there python3 test/test_logging.py ERROR:__main__:callback failed Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 16, in foo cb() ->  File "/removed/for/test/purposes.ext", line 33, in bar3 raise Exception('this is a test exception') Exception: this is a test exception ERROR:__main__:callback failed Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 16, in foo cb() ->  File "/removed/for/test/purposes.ext", line 38, in bar4 assert baz == 90  -> 52 AssertionError: assert baz == 90 python3 test/test_truncating.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 12, in div() -> '999999999... TypeError: unsupported operand type(s) for /: 'int' and 'str' python3 test/test_truncating_disabled.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 12, in div() ->  File "/removed/for/test/purposes.ext", line 9, in div return 1 / var  -> '999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999' TypeError: unsupported operand type(s) for /: 'int' and 'str' python3 test/test_indentation_error.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 13, in exec(code)  -> '\nif True:\n a = 5\n print("foobar") #intentional faulty indentation here.\n b = 7\n' File "", line 4 print("foobar") #intentional faulty indentation here. IndentationError: unexpected indent python3 test/test_syntax_error.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 12, in exec(code)  -> '\nif True:\n a = 5\n b = 7 *\n' File "", line 4 b = 7 * ^ SyntaxError: invalid syntax python-better-exceptions-0.4.0/test/output/python3-dumb-ascii-nocolor.out000066400000000000000000000202631512667334600266560ustar00rootroot00000000000000python3 test/test.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 17, in shallow(bar, 15) | -> 2 -> File "/removed/for/test/purposes.ext", line 8, in shallow deep(a + b) | | -> 15 | -> 2 -> File "/removed/for/test/purposes.ext", line 13, in deep assert val > 10 and foo == 60 | -> 52 -> 17 AssertionError: assert val > 10 and foo == 60 python3 test/test_color.py False python3 test/test_encoding.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 14, in div() -> File "/removed/for/test/purposes.ext", line 11, in div return _deep("天") -> File "/removed/for/test/purposes.ext", line 8, in _deep return 1 / val -> '天' TypeError: unsupported operand type(s) for /: 'int' and 'str' ./test/test_interactive.sh spawn python -m better_exceptions -q >>> import better_exceptions >>> def foo(a): ... assert a > 10 ... >>> foo(1) Traceback (most recent call last): File "", line 1, in foo(1) -> File "", line 2, in foo assert a > 10 -> 1 AssertionError: assert a > 10 >>> exit() ./test/test_string.sh import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine Traceback (most recent call last): File "", line 1, in import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine | | -> 5 | -> 5 -> AssertionError: import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine Traceback (most recent call last): File "", line 1, in import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine | | -> 5 | -> 5 -> AssertionError: import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello there"; print(a); assert False Traceback (most recent call last): File "", line 1, in from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello there"; print(a); assert False | | -> 'why hello there' | -> 'why hello there' -> AssertionError: from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello there"; print(a); assert False why hello there Traceback (most recent call last): File "", line 1, in from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello there"; print(a); assert False | | -> 'why hello there' | -> 'why hello there' -> AssertionError: from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello there"; print(a); assert False why hello there from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello " + " there"; print(a); assert False Traceback (most recent call last): File "", line 1, in from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello " + " there"; print(a); assert False | | -> 'why hello there' | -> 'why hello there' -> AssertionError: from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello " + " there"; print(a); assert False why hello there Traceback (most recent call last): File "", line 1, in from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello " + " there"; print(a); assert False | | -> 'why hello there' | -> 'why hello there' -> AssertionError: from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello " + " there"; print(a); assert False why hello there python3 test/test_logging.py ERROR:__main__:callback failed Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 16, in foo cb() -> File "/removed/for/test/purposes.ext", line 33, in bar3 raise Exception('this is a test exception') Exception: this is a test exception ERROR:__main__:callback failed Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 16, in foo cb() -> File "/removed/for/test/purposes.ext", line 38, in bar4 assert baz == 90 -> 52 AssertionError: assert baz == 90 python3 test/test_truncating.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 12, in div() -> '999999999... TypeError: unsupported operand type(s) for /: 'int' and 'str' python3 test/test_truncating_disabled.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 12, in div() -> File "/removed/for/test/purposes.ext", line 9, in div return 1 / var -> '999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999' TypeError: unsupported operand type(s) for /: 'int' and 'str' python3 test/test_indentation_error.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 13, in exec(code) -> '\nif True:\n a = 5\n print("foobar") #intentional faulty indentation here.\n b = 7\n' File "", line 4 print("foobar") #intentional faulty indentation here. IndentationError: unexpected indent python3 test/test_syntax_error.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 12, in exec(code) -> '\nif True:\n a = 5\n b = 7 *\n' File "", line 4 b = 7 * ^ SyntaxError: invalid syntax python-better-exceptions-0.4.0/test/output/python3-vt100-UTF-8-color.out000066400000000000000000000226131512667334600257600ustar00rootroot00000000000000python3 test/test.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 17, in shallow(bar, 15) │ â”” 2 â””  File "/removed/for/test/purposes.ext", line 8, in shallow deep(a + b) │ │ â”” 15 │ â”” 2 â””  File "/removed/for/test/purposes.ext", line 13, in deep assert val > 10 and foo == 60  │ â”” 52  â”” 17 AssertionError: assert val > 10 and foo == 60 python3 test/test_color.py True python3 test/test_encoding.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 14, in div() â””  File "/removed/for/test/purposes.ext", line 11, in div return _deep('天')  â””  File "/removed/for/test/purposes.ext", line 8, in _deep return 1 / val  â”” '天' TypeError: unsupported operand type(s) for /: 'int' and 'str' ./test/test_interactive.sh spawn python -m better_exceptions -q >>> import better_exceptions >>> def foo(a): ... assert a > 10 ... >>> foo(1) Traceback (most recent call last): File "", line 1, in foo(1) â””  File "", line 2, in foo assert a > 10  â”” 1 AssertionError: assert a > 10 >>> exit() ./test/test_string.sh import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine Traceback (most recent call last): File "", line 1, in import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine  │ │ â”” 5  │ â”” 5  â””  AssertionError: import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine Traceback (most recent call last): File "", line 1, in import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine  │ │ â”” 5  │ â”” 5  â””  AssertionError: import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello there"; print(a); assert False Traceback (most recent call last): File "", line 1, in from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = 'why hello there'; print(a); assert False  │ │ â”” 'why hello there'  │ â”” 'why hello there'  â””  AssertionError: from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = 'why hello there'; print(a); assert False why hello there Traceback (most recent call last): File "", line 1, in from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = 'why hello there'; print(a); assert False  │ │ â”” 'why hello there'  │ â”” 'why hello there'  â””  AssertionError: from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = 'why hello there'; print(a); assert False why hello there from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello " + " there"; print(a); assert False Traceback (most recent call last): File "", line 1, in from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = 'why hello ' + ' there'; print(a); assert False  │ │ â”” 'why hello there'  │ â”” 'why hello there'  â””  AssertionError: from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = 'why hello ' + ' there'; print(a); assert False why hello there Traceback (most recent call last): File "", line 1, in from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = 'why hello ' + ' there'; print(a); assert False  │ │ â”” 'why hello there'  │ â”” 'why hello there'  â””  AssertionError: from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = 'why hello ' + ' there'; print(a); assert False why hello there python3 test/test_logging.py ERROR:__main__:callback failed Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 16, in foo cb() â””  File "/removed/for/test/purposes.ext", line 33, in bar3 raise Exception('this is a test exception') Exception: this is a test exception ERROR:__main__:callback failed Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 16, in foo cb() â””  File "/removed/for/test/purposes.ext", line 38, in bar4 assert baz == 90  â”” 52 AssertionError: assert baz == 90 python3 test/test_truncating.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 12, in div() â”” div() â””  File "/removed/for/test/purposes.ext", line 9, in div return 1 / var  â”” '999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999' TypeError: unsupported operand type(s) for /: 'int' and 'str' python3 test/test_indentation_error.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 13, in exec(code)  â”” '\nif True:\n a = 5\n print("foobar") #intentional faulty indentation here.\n b = 7\n' File "", line 4 print("foobar") #intentional faulty indentation here. IndentationError: unexpected indent python3 test/test_syntax_error.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 12, in exec(code)  â”” '\nif True:\n a = 5\n b = 7 *\n' File "", line 4 b = 7 * ^ SyntaxError: invalid syntax python-better-exceptions-0.4.0/test/output/python3-vt100-UTF-8-nocolor.out000066400000000000000000000204101512667334600263060ustar00rootroot00000000000000python3 test/test.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 17, in shallow(bar, 15) │ â”” 2 â”” File "/removed/for/test/purposes.ext", line 8, in shallow deep(a + b) │ │ â”” 15 │ â”” 2 â”” File "/removed/for/test/purposes.ext", line 13, in deep assert val > 10 and foo == 60 │ â”” 52 â”” 17 AssertionError: assert val > 10 and foo == 60 python3 test/test_color.py False python3 test/test_encoding.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 14, in div() â”” File "/removed/for/test/purposes.ext", line 11, in div return _deep("天") â”” File "/removed/for/test/purposes.ext", line 8, in _deep return 1 / val â”” '天' TypeError: unsupported operand type(s) for /: 'int' and 'str' ./test/test_interactive.sh spawn python -m better_exceptions -q >>> import better_exceptions >>> def foo(a): ... assert a > 10 ... >>> foo(1) Traceback (most recent call last): File "", line 1, in foo(1) â”” File "", line 2, in foo assert a > 10 â”” 1 AssertionError: assert a > 10 >>> exit() ./test/test_string.sh import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine Traceback (most recent call last): File "", line 1, in import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine │ │ â”” 5 │ â”” 5 â”” AssertionError: import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine Traceback (most recent call last): File "", line 1, in import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine │ │ â”” 5 │ â”” 5 â”” AssertionError: import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello there"; print(a); assert False Traceback (most recent call last): File "", line 1, in from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello there"; print(a); assert False │ │ â”” 'why hello there' │ â”” 'why hello there' â”” AssertionError: from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello there"; print(a); assert False why hello there Traceback (most recent call last): File "", line 1, in from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello there"; print(a); assert False │ │ â”” 'why hello there' │ â”” 'why hello there' â”” AssertionError: from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello there"; print(a); assert False why hello there from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello " + " there"; print(a); assert False Traceback (most recent call last): File "", line 1, in from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello " + " there"; print(a); assert False │ │ â”” 'why hello there' │ â”” 'why hello there' â”” AssertionError: from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello " + " there"; print(a); assert False why hello there Traceback (most recent call last): File "", line 1, in from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello " + " there"; print(a); assert False │ │ â”” 'why hello there' │ â”” 'why hello there' â”” AssertionError: from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello " + " there"; print(a); assert False why hello there python3 test/test_logging.py ERROR:__main__:callback failed Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 16, in foo cb() â”” File "/removed/for/test/purposes.ext", line 33, in bar3 raise Exception('this is a test exception') Exception: this is a test exception ERROR:__main__:callback failed Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 16, in foo cb() â”” File "/removed/for/test/purposes.ext", line 38, in bar4 assert baz == 90 â”” 52 AssertionError: assert baz == 90 python3 test/test_truncating.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 12, in div() â”” div() â”” File "/removed/for/test/purposes.ext", line 9, in div return 1 / var â”” '999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999' TypeError: unsupported operand type(s) for /: 'int' and 'str' python3 test/test_indentation_error.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 13, in exec(code) â”” '\nif True:\n a = 5\n print("foobar") #intentional faulty indentation here.\n b = 7\n' File "", line 4 print("foobar") #intentional faulty indentation here. IndentationError: unexpected indent python3 test/test_syntax_error.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 12, in exec(code) â”” '\nif True:\n a = 5\n b = 7 *\n' File "", line 4 b = 7 * ^ SyntaxError: invalid syntax python-better-exceptions-0.4.0/test/output/python3-vt100-ascii-color.out000066400000000000000000000224661512667334600262530ustar00rootroot00000000000000python3 test/test.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 17, in shallow(bar, 15) | -> 2 ->  File "/removed/for/test/purposes.ext", line 8, in shallow deep(a + b) | | -> 15 | -> 2 ->  File "/removed/for/test/purposes.ext", line 13, in deep assert val > 10 and foo == 60  | -> 52  -> 17 AssertionError: assert val > 10 and foo == 60 python3 test/test_color.py True python3 test/test_encoding.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 14, in div() ->  File "/removed/for/test/purposes.ext", line 11, in div return _deep('天')  ->  File "/removed/for/test/purposes.ext", line 8, in _deep return 1 / val  -> '天' TypeError: unsupported operand type(s) for /: 'int' and 'str' ./test/test_interactive.sh spawn python -m better_exceptions -q >>> import better_exceptions >>> def foo(a): ... assert a > 10 ... >>> foo(1) Traceback (most recent call last): File "", line 1, in foo(1) ->  File "", line 2, in foo assert a > 10  -> 1 AssertionError: assert a > 10 >>> exit() ./test/test_string.sh import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine Traceback (most recent call last): File "", line 1, in import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine  | | -> 5  | -> 5  ->  AssertionError: import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine Traceback (most recent call last): File "", line 1, in import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine  | | -> 5  | -> 5  ->  AssertionError: import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello there"; print(a); assert False Traceback (most recent call last): File "", line 1, in from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = 'why hello there'; print(a); assert False  | | -> 'why hello there'  | -> 'why hello there'  ->  AssertionError: from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = 'why hello there'; print(a); assert False why hello there Traceback (most recent call last): File "", line 1, in from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = 'why hello there'; print(a); assert False  | | -> 'why hello there'  | -> 'why hello there'  ->  AssertionError: from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = 'why hello there'; print(a); assert False why hello there from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello " + " there"; print(a); assert False Traceback (most recent call last): File "", line 1, in from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = 'why hello ' + ' there'; print(a); assert False  | | -> 'why hello there'  | -> 'why hello there'  ->  AssertionError: from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = 'why hello ' + ' there'; print(a); assert False why hello there Traceback (most recent call last): File "", line 1, in from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = 'why hello ' + ' there'; print(a); assert False  | | -> 'why hello there'  | -> 'why hello there'  ->  AssertionError: from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = 'why hello ' + ' there'; print(a); assert False why hello there python3 test/test_logging.py ERROR:__main__:callback failed Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 16, in foo cb() ->  File "/removed/for/test/purposes.ext", line 33, in bar3 raise Exception('this is a test exception') Exception: this is a test exception ERROR:__main__:callback failed Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 16, in foo cb() ->  File "/removed/for/test/purposes.ext", line 38, in bar4 assert baz == 90  -> 52 AssertionError: assert baz == 90 python3 test/test_truncating.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 12, in div() -> '999999999... TypeError: unsupported operand type(s) for /: 'int' and 'str' python3 test/test_truncating_disabled.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 12, in div() ->  File "/removed/for/test/purposes.ext", line 9, in div return 1 / var  -> '999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999' TypeError: unsupported operand type(s) for /: 'int' and 'str' python3 test/test_indentation_error.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 13, in exec(code)  -> '\nif True:\n a = 5\n print("foobar") #intentional faulty indentation here.\n b = 7\n' File "", line 4 print("foobar") #intentional faulty indentation here. IndentationError: unexpected indent python3 test/test_syntax_error.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 12, in exec(code)  -> '\nif True:\n a = 5\n b = 7 *\n' File "", line 4 b = 7 * ^ SyntaxError: invalid syntax python-better-exceptions-0.4.0/test/output/python3-vt100-ascii-nocolor.out000066400000000000000000000202631512667334600266010ustar00rootroot00000000000000python3 test/test.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 17, in shallow(bar, 15) | -> 2 -> File "/removed/for/test/purposes.ext", line 8, in shallow deep(a + b) | | -> 15 | -> 2 -> File "/removed/for/test/purposes.ext", line 13, in deep assert val > 10 and foo == 60 | -> 52 -> 17 AssertionError: assert val > 10 and foo == 60 python3 test/test_color.py False python3 test/test_encoding.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 14, in div() -> File "/removed/for/test/purposes.ext", line 11, in div return _deep("天") -> File "/removed/for/test/purposes.ext", line 8, in _deep return 1 / val -> '天' TypeError: unsupported operand type(s) for /: 'int' and 'str' ./test/test_interactive.sh spawn python -m better_exceptions -q >>> import better_exceptions >>> def foo(a): ... assert a > 10 ... >>> foo(1) Traceback (most recent call last): File "", line 1, in foo(1) -> File "", line 2, in foo assert a > 10 -> 1 AssertionError: assert a > 10 >>> exit() ./test/test_string.sh import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine Traceback (most recent call last): File "", line 1, in import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine | | -> 5 | -> 5 -> AssertionError: import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine Traceback (most recent call last): File "", line 1, in import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine | | -> 5 | -> 5 -> AssertionError: import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello there"; print(a); assert False Traceback (most recent call last): File "", line 1, in from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello there"; print(a); assert False | | -> 'why hello there' | -> 'why hello there' -> AssertionError: from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello there"; print(a); assert False why hello there Traceback (most recent call last): File "", line 1, in from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello there"; print(a); assert False | | -> 'why hello there' | -> 'why hello there' -> AssertionError: from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello there"; print(a); assert False why hello there from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello " + " there"; print(a); assert False Traceback (most recent call last): File "", line 1, in from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello " + " there"; print(a); assert False | | -> 'why hello there' | -> 'why hello there' -> AssertionError: from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello " + " there"; print(a); assert False why hello there Traceback (most recent call last): File "", line 1, in from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello " + " there"; print(a); assert False | | -> 'why hello there' | -> 'why hello there' -> AssertionError: from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello " + " there"; print(a); assert False why hello there python3 test/test_logging.py ERROR:__main__:callback failed Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 16, in foo cb() -> File "/removed/for/test/purposes.ext", line 33, in bar3 raise Exception('this is a test exception') Exception: this is a test exception ERROR:__main__:callback failed Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 16, in foo cb() -> File "/removed/for/test/purposes.ext", line 38, in bar4 assert baz == 90 -> 52 AssertionError: assert baz == 90 python3 test/test_truncating.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 12, in div() -> '999999999... TypeError: unsupported operand type(s) for /: 'int' and 'str' python3 test/test_truncating_disabled.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 12, in div() -> File "/removed/for/test/purposes.ext", line 9, in div return 1 / var -> '999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999' TypeError: unsupported operand type(s) for /: 'int' and 'str' python3 test/test_indentation_error.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 13, in exec(code) -> '\nif True:\n a = 5\n print("foobar") #intentional faulty indentation here.\n b = 7\n' File "", line 4 print("foobar") #intentional faulty indentation here. IndentationError: unexpected indent python3 test/test_syntax_error.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 12, in exec(code) -> '\nif True:\n a = 5\n b = 7 *\n' File "", line 4 b = 7 * ^ SyntaxError: invalid syntax python-better-exceptions-0.4.0/test/output/python3-xterm-UTF-8-color.out000066400000000000000000000226131512667334600262450ustar00rootroot00000000000000python3 test/test.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 17, in shallow(bar, 15) │ â”” 2 â””  File "/removed/for/test/purposes.ext", line 8, in shallow deep(a + b) │ │ â”” 15 │ â”” 2 â””  File "/removed/for/test/purposes.ext", line 13, in deep assert val > 10 and foo == 60  │ â”” 52  â”” 17 AssertionError: assert val > 10 and foo == 60 python3 test/test_color.py True python3 test/test_encoding.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 14, in div() â””  File "/removed/for/test/purposes.ext", line 11, in div return _deep('天')  â””  File "/removed/for/test/purposes.ext", line 8, in _deep return 1 / val  â”” '天' TypeError: unsupported operand type(s) for /: 'int' and 'str' ./test/test_interactive.sh spawn python -m better_exceptions -q >>> import better_exceptions >>> def foo(a): ... assert a > 10 ... >>> foo(1) Traceback (most recent call last): File "", line 1, in foo(1) â””  File "", line 2, in foo assert a > 10  â”” 1 AssertionError: assert a > 10 >>> exit() ./test/test_string.sh import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine Traceback (most recent call last): File "", line 1, in import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine  │ │ â”” 5  │ â”” 5  â””  AssertionError: import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine Traceback (most recent call last): File "", line 1, in import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine  │ │ â”” 5  │ â”” 5  â””  AssertionError: import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello there"; print(a); assert False Traceback (most recent call last): File "", line 1, in from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = 'why hello there'; print(a); assert False  │ │ â”” 'why hello there'  │ â”” 'why hello there'  â””  AssertionError: from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = 'why hello there'; print(a); assert False why hello there Traceback (most recent call last): File "", line 1, in from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = 'why hello there'; print(a); assert False  │ │ â”” 'why hello there'  │ â”” 'why hello there'  â””  AssertionError: from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = 'why hello there'; print(a); assert False why hello there from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello " + " there"; print(a); assert False Traceback (most recent call last): File "", line 1, in from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = 'why hello ' + ' there'; print(a); assert False  │ │ â”” 'why hello there'  │ â”” 'why hello there'  â””  AssertionError: from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = 'why hello ' + ' there'; print(a); assert False why hello there Traceback (most recent call last): File "", line 1, in from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = 'why hello ' + ' there'; print(a); assert False  │ │ â”” 'why hello there'  │ â”” 'why hello there'  â””  AssertionError: from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = 'why hello ' + ' there'; print(a); assert False why hello there python3 test/test_logging.py ERROR:__main__:callback failed Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 16, in foo cb() â””  File "/removed/for/test/purposes.ext", line 33, in bar3 raise Exception('this is a test exception') Exception: this is a test exception ERROR:__main__:callback failed Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 16, in foo cb() â””  File "/removed/for/test/purposes.ext", line 38, in bar4 assert baz == 90  â”” 52 AssertionError: assert baz == 90 python3 test/test_truncating.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 12, in div() â”” div() â””  File "/removed/for/test/purposes.ext", line 9, in div return 1 / var  â”” '999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999' TypeError: unsupported operand type(s) for /: 'int' and 'str' python3 test/test_indentation_error.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 13, in exec(code)  â”” '\nif True:\n a = 5\n print("foobar") #intentional faulty indentation here.\n b = 7\n' File "", line 4 print("foobar") #intentional faulty indentation here. IndentationError: unexpected indent python3 test/test_syntax_error.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 12, in exec(code)  â”” '\nif True:\n a = 5\n b = 7 *\n' File "", line 4 b = 7 * ^ SyntaxError: invalid syntax python-better-exceptions-0.4.0/test/output/python3-xterm-UTF-8-nocolor.out000066400000000000000000000205041512667334600265770ustar00rootroot00000000000000python3 test/test.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 17, in shallow(bar, 15) │ â”” 2 â”” File "/removed/for/test/purposes.ext", line 8, in shallow deep(a + b) │ │ â”” 15 │ â”” 2 â”” File "/removed/for/test/purposes.ext", line 13, in deep assert val > 10 and foo == 60 │ â”” 52 â”” 17 AssertionError: assert val > 10 and foo == 60 python3 test/test_color.py False python3 test/test_encoding.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 14, in div() â”” File "/removed/for/test/purposes.ext", line 11, in div return _deep("天") â”” File "/removed/for/test/purposes.ext", line 8, in _deep return 1 / val â”” '天' TypeError: unsupported operand type(s) for /: 'int' and 'str' ./test/test_interactive.sh spawn python -m better_exceptions -q >>> import better_exceptions >>> def foo(a): ... assert a > 10 ... >>> foo(1) Traceback (most recent call last): File "", line 1, in foo(1) â””  File "", line 2, in foo assert a > 10  â”” 1 AssertionError: assert a > 10 >>> exit() ./test/test_string.sh import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine Traceback (most recent call last): File "", line 1, in import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine │ │ â”” 5 │ â”” 5 â”” AssertionError: import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine Traceback (most recent call last): File "", line 1, in import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine │ │ â”” 5 │ â”” 5 â”” AssertionError: import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello there"; print(a); assert False Traceback (most recent call last): File "", line 1, in from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello there"; print(a); assert False │ │ â”” 'why hello there' │ â”” 'why hello there' â”” AssertionError: from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello there"; print(a); assert False why hello there Traceback (most recent call last): File "", line 1, in from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello there"; print(a); assert False │ │ â”” 'why hello there' │ â”” 'why hello there' â”” AssertionError: from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello there"; print(a); assert False why hello there from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello " + " there"; print(a); assert False Traceback (most recent call last): File "", line 1, in from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello " + " there"; print(a); assert False │ │ â”” 'why hello there' │ â”” 'why hello there' â”” AssertionError: from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello " + " there"; print(a); assert False why hello there Traceback (most recent call last): File "", line 1, in from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello " + " there"; print(a); assert False │ │ â”” 'why hello there' │ â”” 'why hello there' â”” AssertionError: from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello " + " there"; print(a); assert False why hello there python3 test/test_logging.py ERROR:__main__:callback failed Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 16, in foo cb() â”” File "/removed/for/test/purposes.ext", line 33, in bar3 raise Exception('this is a test exception') Exception: this is a test exception ERROR:__main__:callback failed Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 16, in foo cb() â”” File "/removed/for/test/purposes.ext", line 38, in bar4 assert baz == 90 â”” 52 AssertionError: assert baz == 90 python3 test/test_truncating.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 12, in div() â”” div() â”” File "/removed/for/test/purposes.ext", line 9, in div return 1 / var â”” '999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999' TypeError: unsupported operand type(s) for /: 'int' and 'str' python3 test/test_indentation_error.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 13, in exec(code) â”” '\nif True:\n a = 5\n print("foobar") #intentional faulty indentation here.\n b = 7\n' File "", line 4 print("foobar") #intentional faulty indentation here. IndentationError: unexpected indent python3 test/test_syntax_error.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 12, in exec(code) â”” '\nif True:\n a = 5\n b = 7 *\n' File "", line 4 b = 7 * ^ SyntaxError: invalid syntax python-better-exceptions-0.4.0/test/output/python3-xterm-ascii-color.out000066400000000000000000000224661512667334600265400ustar00rootroot00000000000000python3 test/test.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 17, in shallow(bar, 15) | -> 2 ->  File "/removed/for/test/purposes.ext", line 8, in shallow deep(a + b) | | -> 15 | -> 2 ->  File "/removed/for/test/purposes.ext", line 13, in deep assert val > 10 and foo == 60  | -> 52  -> 17 AssertionError: assert val > 10 and foo == 60 python3 test/test_color.py True python3 test/test_encoding.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 14, in div() ->  File "/removed/for/test/purposes.ext", line 11, in div return _deep('天')  ->  File "/removed/for/test/purposes.ext", line 8, in _deep return 1 / val  -> '天' TypeError: unsupported operand type(s) for /: 'int' and 'str' ./test/test_interactive.sh spawn python -m better_exceptions -q >>> import better_exceptions >>> def foo(a): ... assert a > 10 ... >>> foo(1) Traceback (most recent call last): File "", line 1, in foo(1) ->  File "", line 2, in foo assert a > 10  -> 1 AssertionError: assert a > 10 >>> exit() ./test/test_string.sh import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine Traceback (most recent call last): File "", line 1, in import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine  | | -> 5  | -> 5  ->  AssertionError: import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine Traceback (most recent call last): File "", line 1, in import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine  | | -> 5  | -> 5  ->  AssertionError: import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello there"; print(a); assert False Traceback (most recent call last): File "", line 1, in from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = 'why hello there'; print(a); assert False  | | -> 'why hello there'  | -> 'why hello there'  ->  AssertionError: from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = 'why hello there'; print(a); assert False why hello there Traceback (most recent call last): File "", line 1, in from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = 'why hello there'; print(a); assert False  | | -> 'why hello there'  | -> 'why hello there'  ->  AssertionError: from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = 'why hello there'; print(a); assert False why hello there from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello " + " there"; print(a); assert False Traceback (most recent call last): File "", line 1, in from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = 'why hello ' + ' there'; print(a); assert False  | | -> 'why hello there'  | -> 'why hello there'  ->  AssertionError: from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = 'why hello ' + ' there'; print(a); assert False why hello there Traceback (most recent call last): File "", line 1, in from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = 'why hello ' + ' there'; print(a); assert False  | | -> 'why hello there'  | -> 'why hello there'  ->  AssertionError: from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = 'why hello ' + ' there'; print(a); assert False why hello there python3 test/test_logging.py ERROR:__main__:callback failed Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 16, in foo cb() ->  File "/removed/for/test/purposes.ext", line 33, in bar3 raise Exception('this is a test exception') Exception: this is a test exception ERROR:__main__:callback failed Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 16, in foo cb() ->  File "/removed/for/test/purposes.ext", line 38, in bar4 assert baz == 90  -> 52 AssertionError: assert baz == 90 python3 test/test_truncating.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 12, in div() -> '999999999... TypeError: unsupported operand type(s) for /: 'int' and 'str' python3 test/test_truncating_disabled.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 12, in div() ->  File "/removed/for/test/purposes.ext", line 9, in div return 1 / var  -> '999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999' TypeError: unsupported operand type(s) for /: 'int' and 'str' python3 test/test_indentation_error.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 13, in exec(code)  -> '\nif True:\n a = 5\n print("foobar") #intentional faulty indentation here.\n b = 7\n' File "", line 4 print("foobar") #intentional faulty indentation here. IndentationError: unexpected indent python3 test/test_syntax_error.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 12, in exec(code)  -> '\nif True:\n a = 5\n b = 7 *\n' File "", line 4 b = 7 * ^ SyntaxError: invalid syntax python-better-exceptions-0.4.0/test/output/python3-xterm-ascii-nocolor.out000066400000000000000000000203571512667334600270720ustar00rootroot00000000000000python3 test/test.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 17, in shallow(bar, 15) | -> 2 -> File "/removed/for/test/purposes.ext", line 8, in shallow deep(a + b) | | -> 15 | -> 2 -> File "/removed/for/test/purposes.ext", line 13, in deep assert val > 10 and foo == 60 | -> 52 -> 17 AssertionError: assert val > 10 and foo == 60 python3 test/test_color.py False python3 test/test_encoding.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 14, in div() -> File "/removed/for/test/purposes.ext", line 11, in div return _deep("天") -> File "/removed/for/test/purposes.ext", line 8, in _deep return 1 / val -> '天' TypeError: unsupported operand type(s) for /: 'int' and 'str' ./test/test_interactive.sh spawn python -m better_exceptions -q >>> import better_exceptions >>> def foo(a): ... assert a > 10 ... >>> foo(1) Traceback (most recent call last): File "", line 1, in foo(1) ->  File "", line 2, in foo assert a > 10  -> 1 AssertionError: assert a > 10 >>> exit() ./test/test_string.sh import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine Traceback (most recent call last): File "", line 1, in import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine | | -> 5 | -> 5 -> AssertionError: import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine Traceback (most recent call last): File "", line 1, in import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine | | -> 5 | -> 5 -> AssertionError: import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello there"; print(a); assert False Traceback (most recent call last): File "", line 1, in from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello there"; print(a); assert False | | -> 'why hello there' | -> 'why hello there' -> AssertionError: from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello there"; print(a); assert False why hello there Traceback (most recent call last): File "", line 1, in from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello there"; print(a); assert False | | -> 'why hello there' | -> 'why hello there' -> AssertionError: from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello there"; print(a); assert False why hello there from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello " + " there"; print(a); assert False Traceback (most recent call last): File "", line 1, in from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello " + " there"; print(a); assert False | | -> 'why hello there' | -> 'why hello there' -> AssertionError: from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello " + " there"; print(a); assert False why hello there Traceback (most recent call last): File "", line 1, in from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello " + " there"; print(a); assert False | | -> 'why hello there' | -> 'why hello there' -> AssertionError: from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello " + " there"; print(a); assert False why hello there python3 test/test_logging.py ERROR:__main__:callback failed Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 16, in foo cb() -> File "/removed/for/test/purposes.ext", line 33, in bar3 raise Exception('this is a test exception') Exception: this is a test exception ERROR:__main__:callback failed Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 16, in foo cb() -> File "/removed/for/test/purposes.ext", line 38, in bar4 assert baz == 90 -> 52 AssertionError: assert baz == 90 python3 test/test_truncating.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 12, in div() -> '999999999... TypeError: unsupported operand type(s) for /: 'int' and 'str' python3 test/test_truncating_disabled.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 12, in div() -> File "/removed/for/test/purposes.ext", line 9, in div return 1 / var -> '999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999' TypeError: unsupported operand type(s) for /: 'int' and 'str' python3 test/test_indentation_error.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 13, in exec(code) -> '\nif True:\n a = 5\n print("foobar") #intentional faulty indentation here.\n b = 7\n' File "", line 4 print("foobar") #intentional faulty indentation here. IndentationError: unexpected indent python3 test/test_syntax_error.py Traceback (most recent call last): File "/removed/for/test/purposes.ext", line 12, in exec(code) -> '\nif True:\n a = 5\n b = 7 *\n' File "", line 4 b = 7 * ^ SyntaxError: invalid syntax python-better-exceptions-0.4.0/test/test.py000066400000000000000000000003251512667334600210230ustar00rootroot00000000000000import better_exceptions better_exceptions.hook() foo = 52 def shallow(a, b): deep(a + b) def deep(val): global foo assert val > 10 and foo == 60 bar = foo - 50 shallow(bar, 15) shallow(bar, 2) python-better-exceptions-0.4.0/test/test_chaining.py000066400000000000000000000005341512667334600226650ustar00rootroot00000000000000# -*- coding:utf-8 -*- import better_exceptions better_exceptions.hook() def div(x, y): x / y def cause(x, y): try: div(x, y) except Exception: raise ValueError("Division error") def context(x, y): try: cause(x, y) except Exception as e: raise ValueError("Cause error") from e context(1, 0) python-better-exceptions-0.4.0/test/test_color.py000066400000000000000000000001461512667334600222220ustar00rootroot00000000000000from __future__ import print_function from better_exceptions import color print(color.SUPPORTS_COLOR) python-better-exceptions-0.4.0/test/test_encoding.py000066400000000000000000000002331512667334600226670ustar00rootroot00000000000000# -*- coding:utf-8 -*- import better_exceptions better_exceptions.hook() def _deep(val): return 1 / val def div(): return _deep("天") div() python-better-exceptions-0.4.0/test/test_indentation_error.py000066400000000000000000000003021512667334600246230ustar00rootroot00000000000000# -*- coding:utf-8 -*- import better_exceptions better_exceptions.hook() code = """ if True: a = 5 print("foobar") #intentional faulty indentation here. b = 7 """ exec(code) python-better-exceptions-0.4.0/test/test_interactive.sh000077500000000000000000000005731512667334600234120ustar00rootroot00000000000000#!/usr/bin/env bash [ -z "${BETEXC_PYTHON}" ] && export BETEXC_PYTHON=python /usr/bin/expect -f - <>> " send "import better_exceptions\r" expect ">>> " send "def foo(a):\r" expect "... " send " assert a > 10\r" expect "... " send "\r" expect ">>> " send "foo(1)\r" expect ">>> " send "exit()\r" expect "exit" EOF python-better-exceptions-0.4.0/test/test_interactive_raw.sh000077500000000000000000000005761512667334600242660ustar00rootroot00000000000000#!/usr/bin/env bash [ -z "${BETEXC_PYTHON}" ] && export BETEXC_PYTHON=python /usr/bin/expect -f - <>> " send "import better_exceptions\r" expect ">>> " send "def foo(a):\r" expect "... " send " assert a > 10\r" expect "... " send "\r" expect ">>> " send "foo(1)\r" expect ">>> " send "exit()\r" expect "exit" EOF python-better-exceptions-0.4.0/test/test_logging.py000066400000000000000000000011361512667334600225320ustar00rootroot00000000000000import better_exceptions import logging better_exceptions.hook() logging.basicConfig() logger = logging.getLogger(__name__) logging.raiseExceptions = True qux = 15 def foo(cb): qix = 20 try: cb() except: logger.exception('callback failed') def bar1(): baz = 80.5 logger.info('Hello') def bar2(): baz = 890.50 logger.info('Hello', exc_info=True) def bar3(): baz = 600.524 raise Exception('this is a test exception') def bar4(): baz = 52 assert baz == 90 FNS = [ bar1, bar2, bar3, bar4 ] for fn in FNS: foo(fn) python-better-exceptions-0.4.0/test/test_string.sh000077500000000000000000000014611512667334600224000ustar00rootroot00000000000000#!/usr/bin/env bash set -e [ -z "${BETEXC_PYTHON}" ] && export BETEXC_PYTHON=python function test_str { echo -e "\n${1}\n" # first, test with regular args "${BETEXC_PYTHON}" -c "${@}" || true echo '' # now test with a condensed argument cmd="${1}" shift "${BETEXC_PYTHON}" -c"$cmd" "${@}" || true } test_str 'import better_exceptions; better_exceptions.hook(); a = 5; assert a > 10 # this should work fine' these extra arguments should be removed and should not show up 'in' the output test_str 'from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello there"; print(a); assert False' test_str 'from __future__ import print_function; import better_exceptions; better_exceptions.hook(); a = "why hello " + " there"; print(a); assert False' python-better-exceptions-0.4.0/test/test_syntax_error.py000066400000000000000000000002051512667334600236370ustar00rootroot00000000000000# -*- coding:utf-8 -*- import better_exceptions better_exceptions.hook() code = """ if True: a = 5 b = 7 * """ exec(code) python-better-exceptions-0.4.0/test/test_truncating.py000066400000000000000000000002631512667334600232620ustar00rootroot00000000000000# -*- coding:utf-8 -*- import better_exceptions better_exceptions.hook() better_exceptions.MAX_LENGTH = 10 def div(): var = "9" * 150 return 1 / var div() python-better-exceptions-0.4.0/test/test_truncating_disabled.py000066400000000000000000000002651512667334600251130ustar00rootroot00000000000000# -*- coding:utf-8 -*- import better_exceptions better_exceptions.hook() better_exceptions.MAX_LENGTH = None def div(): var = "9" * 150 return 1 / var div() python-better-exceptions-0.4.0/test/test_unittest_patch.py000066400000000000000000000030411512667334600241370ustar00rootroot00000000000000import io import sys import unittest import better_exceptions STREAM = io.BytesIO() if sys.version_info[0] == 2 else io.StringIO() def add(a, b): return a + b class MyTestCase(unittest.TestCase): def test_add(self): self.assertEqual(add(1, "2"), 3) class SilentTestRunner(unittest.TextTestRunner): """ The default TextTestRunner will print something like 'Ran 1 test in 0.017s' into stderr, and values are different from different tests. To ensure that CI script can compare between the outputs, those information must be muted. """ def __init__(self, stream=STREAM, *args, **kwargs): super(SilentTestRunner, self).__init__(STREAM, *args, **kwargs) def print_test_error(): test = unittest.main(exit=False, testRunner=SilentTestRunner) error = test.result.errors[0][1] # unittest.TestResult.errors is "A list containing 2-tuples of TestCase # instances and strings holding formatted tracebacks. Each tuple represents # a test which raised an unexpected exception." assert isinstance(error, str) lines = error.splitlines() print("\n".join(lines[4:])) # remove '/removed/for/test/purposes.py' def main(): print_test_error() def patch(self, err, test): lines = better_exceptions.format_exception(*err) if sys.version_info[0] == 2: return u"".join(lines).encode("utf-8") else: return u"".join(lines) unittest.result.TestResult._exc_info_to_string = patch print_test_error() if __name__ == "__main__": main() python-better-exceptions-0.4.0/test/test_util/000077500000000000000000000000001512667334600215065ustar00rootroot00000000000000python-better-exceptions-0.4.0/test/test_util/__init__.py000066400000000000000000000000411512667334600236120ustar00rootroot00000000000000# DO NOT ADD AS setup.py MODULE! python-better-exceptions-0.4.0/test/test_util/quiet_console.py000066400000000000000000000004251512667334600247320ustar00rootroot00000000000000import code class QuietConsole(code.InteractiveConsole, object): def __init__(self): super(self.__class__, self).__init__() def interact(self): return super(self.__class__, self).interact('') if __name__ == '__main__': QuietConsole().interact() python-better-exceptions-0.4.0/test_all.sh000077500000000000000000000044531512667334600206670ustar00rootroot00000000000000#!/usr/bin/env bash set -e if [[ "${1}" == "generate" ]]; then rm -rf test/output mkdir -p test/output GENERATE=true else GENERATE=false fi cd "$(dirname "${0}")" PYTHONPATH="$(pwd):$(pwd)/test" export PYTHONPATH if [[ -z "$PYTHON" ]]; then PYTHON=python3 fi function normalize { # we translate anything that looks like an address into 0xDEADBEEF # since the addresses change from run to run and break diff testing # # we also filter a number of other version-specific, spurious output lines cat | sed 's|0x[a-fA-F0-9]\{1,\}|0xDEADBEEF|g' | sed 's||"'|g' | sed 's|File "/[^"]*"|File "/removed/for/test/purposes.ext"|g' | grep -v "bash: warning:" | grep -v 'now exiting BetterExceptionsConsole' } function test_case { echo -e "\x1b[36;1m " "$@" "\x1b[m" 1>&2 echo "$@" echo -e "\n" ("$@" 2>&1 || true) | normalize echo -e "\n\n" return $? } function test_all { test_case "$PYTHON" "test/test.py" test_case "$PYTHON" "test/test_color.py" test_case "$PYTHON" "test/test_encoding.py" test_case "./test/test_interactive.sh" # test_case "./test/test_interactive_raw.sh" test_case "./test/test_string.sh" test_case "$PYTHON" "test/test_logging.py" test_case "$PYTHON" "test/test_truncating.py" test_case "$PYTHON" "test/test_truncating_disabled.py" test_case "$PYTHON" "test/test_indentation_error.py" test_case "$PYTHON" "test/test_syntax_error.py" # TODO(qix-): The unittest patch tests are volatile and trip up CI. Need a better way to normalize them. #test_case "$PYTHON" "test/test_unittest_patch.py" # TODO(qix-): For some reason this one trips up CI quite a bit except on Python 3.12. #if [[ "$PYTHON" == "python3" ]]; then # test_case "$PYTHON" "test/test_chaining.py" #fi } for encoding in ascii "UTF-8"; do for term in xterm vt100 dumb; do for color in 0 1; do [[ $color == "1" ]] && color_filename="color" || color_filename="nocolor" filename="test/output/python3-${term}-${encoding}-${color_filename}.out" export PYTHONIOENCODING="${encoding}" export TERM="${term}" export FORCE_COLOR="${color}" echo -e "\x1b[35;1m${filename}\x1b[m" >&2 if $GENERATE; then exec > "$filename" test_all "$filename" else test_all | diff "$(pwd)/${filename}" - fi done done done