././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1700163875.5385401 regions-0.8/0000755000175100001770000000000014525470444012445 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/.flake80000644000175100001770000000005714525470416013621 0ustar00runnerdocker[flake8] max-line-length = 88 exclude = extern ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/.gitattributes0000644000175100001770000000001614525470416015334 0ustar00runnerdocker*.fits binary ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1700163875.4985397 regions-0.8/.github/0000755000175100001770000000000014525470443014004 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1700163875.5065398 regions-0.8/.github/workflows/0000755000175100001770000000000014525470444016042 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/.github/workflows/ci_cron_daily.yml0000644000175100001770000000435714525470416021373 0ustar00runnerdockername: Daily Cron Tests on: schedule: # run at 6am UTC on Tue-Fri (complete tests are run every Monday) - cron: '0 6 * * 2-5' pull_request: # We also want this workflow triggered if the 'Daily CI' label is added # or present when PR is updated types: - synchronize - labeled push: tags: - '*' workflow_dispatch: concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true env: TOXARGS: '-v' permissions: contents: read jobs: tests: if: (github.repository == 'astropy/regions' && (github.event_name == 'schedule' || github.event_name == 'push' || github.event_name == 'workflow_dispatch' || contains(github.event.pull_request.labels.*.name, 'Daily CI'))) name: ${{ matrix.prefix }} ${{ matrix.os }}, ${{ matrix.tox_env }} runs-on: ${{ matrix.os }} continue-on-error: ${{ matrix.allow_failure }} strategy: matrix: include: - os: ubuntu-latest python: '3.11' tox_env: 'linkcheck' allow_failure: false prefix: '' - os: ubuntu-latest python: '3.12' tox_env: 'py312-test-devdeps' toxposargs: --remote-data=any allow_failure: true prefix: '(Allowed failure)' steps: - name: Check out repository uses: actions/checkout@v4 with: fetch-depth: 0 - name: Set up Python ${{ matrix.python }} uses: actions/setup-python@v4 with: python-version: ${{ matrix.python }} - name: Install base dependencies run: python -m pip install --upgrade pip setuptools tox - name: Print Python, pip, setuptools, and tox versions run: | python -c "import sys; print(f'Python {sys.version}')" python -c "import pip; print(f'pip {pip.__version__}')" python -c "import setuptools; print(f'setuptools {setuptools.__version__}')" python -c "import tox; print(f'tox {tox.__version__}')" - name: Run tests run: tox -e ${{ matrix.tox_env }} -- ${{ matrix.toxposargs }} - name: Upload coverage to codecov if: ${{ contains(matrix.tox_env, '-cov') }} uses: codecov/codecov-action@v3 with: files: ./coverage.xml verbose: true ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/.github/workflows/ci_cron_weekly.yml0000644000175100001770000000355214525470416021565 0ustar00runnerdockername: Weekly Cron Tests on: schedule: # run every Monday at 5am UTC - cron: '0 5 * * 1' pull_request: # We also want this workflow triggered if the 'Weekly CI' label is added # or present when PR is updated types: - synchronize - labeled push: tags: - '*' workflow_dispatch: concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true env: TOXARGS: '-v' IS_CRON: 'true' permissions: contents: read jobs: tests: if: (github.repository == 'astropy/regions' && (github.event_name == 'schedule' || github.event_name == 'push' || github.event_name == 'workflow_dispatch' || contains(github.event.pull_request.labels.*.name, 'Weekly CI'))) name: ${{ matrix.os }}, ${{ matrix.tox_env }} runs-on: ${{ matrix.os }} continue-on-error: ${{ matrix.allow_failure }} strategy: fail-fast: false matrix: include: - os: ubuntu-latest python: '3.11' tox_env: 'py311-test-alldeps-devinfra' allow_failure: false steps: - name: Check out repository uses: actions/checkout@v4 with: fetch-depth: 0 - name: Set up Python ${{ matrix.python }} uses: actions/setup-python@v4 with: python-version: ${{ matrix.python }} - name: Install base dependencies run: python -m pip install --upgrade pip setuptools tox - name: Print Python, pip, setuptools, and tox versions run: | python -c "import sys; print(f'Python {sys.version}')" python -c "import pip; print(f'pip {pip.__version__}')" python -c "import setuptools; print(f'setuptools {setuptools.__version__}')" python -c "import tox; print(f'tox {tox.__version__}')" - name: Run tests run: tox -e ${{ matrix.tox_env }} -- ${{ matrix.toxposargs }} ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/.github/workflows/ci_tests.yml0000644000175100001770000000634414525470416020410 0ustar00runnerdockername: CI Tests on: push: branches: - main tags: - '*' pull_request: schedule: # run every Monday at 6am UTC - cron: '0 6 * * 1' workflow_dispatch: concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true env: TOXARGS: '-v' permissions: contents: read jobs: tests: name: ${{ matrix.prefix }} ${{ matrix.os }}, ${{ matrix.tox_env }} runs-on: ${{ matrix.os }} continue-on-error: ${{ matrix.allow_failure }} strategy: matrix: include: - os: ubuntu-latest python: '3.9' tox_env: 'py39-test-alldeps' allow_failure: false prefix: '' - os: ubuntu-latest python: '3.10' tox_env: 'py310-test-alldeps' allow_failure: false prefix: '' - os: ubuntu-latest python: '3.11' tox_env: 'py311-test-alldeps-cov' toxposargs: --remote-data=any allow_failure: false prefix: '' - os: macos-latest python: '3.11' tox_env: 'py311-test-alldeps' allow_failure: false prefix: '' - os: windows-latest python: '3.11' tox_env: 'py311-test-alldeps' allow_failure: false prefix: '' - os: ubuntu-latest python: '3.11' tox_env: 'py311-test' allow_failure: false prefix: '' - os: ubuntu-latest python: '3.11' tox_env: 'codestyle' allow_failure: false prefix: '' - os: ubuntu-latest python: '3.11' tox_env: 'pep517' allow_failure: false prefix: '' - os: ubuntu-latest python: '3.11' tox_env: 'bandit' allow_failure: false prefix: '' - os: ubuntu-latest python: '3.9' tox_env: 'py39-test-oldestdeps' allow_failure: false prefix: '' - os: ubuntu-latest python: '3.12' tox_env: 'py312-test-devdeps' toxposargs: --remote-data=any allow_failure: true prefix: '(Allowed failure)' steps: - name: Check out repository uses: actions/checkout@v4 with: fetch-depth: 0 - name: Set up Python ${{ matrix.python }} uses: actions/setup-python@v4 with: python-version: ${{ matrix.python }} - name: Install base dependencies run: python -m pip install --upgrade pip setuptools tox - name: Print Python, pip, setuptools, and tox versions run: | python -c "import sys; print(f'Python {sys.version}')" python -c "import pip; print(f'pip {pip.__version__}')" python -c "import setuptools; print(f'setuptools {setuptools.__version__}')" python -c "import tox; print(f'tox {tox.__version__}')" - name: Run tests run: tox -e ${{ matrix.tox_env }} -- ${{ matrix.toxposargs }} - name: Upload coverage to codecov if: ${{ contains(matrix.tox_env, '-cov') }} uses: codecov/codecov-action@v3 with: files: ./coverage.xml verbose: true ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/.github/workflows/codeql.yml0000644000175100001770000000563414525470416020043 0ustar00runnerdocker# For most projects, this workflow file will not need changing; you simply need # to commit it to your repository. # # You may wish to alter this file to override the set of languages analyzed, # or to provide custom queries or build logic. # # ******** NOTE ******** # We have attempted to detect the languages in your repository. Please check # the `language` matrix defined below to confirm you have the correct set of # supported CodeQL languages. # name: "CodeQL" on: push: branches: [ "main" ] pull_request: # The branches below must be a subset of the branches above branches: [ "main" ] schedule: - cron: '33 1 * * 0' permissions: contents: read jobs: analyze: name: Analyze runs-on: ubuntu-latest permissions: actions: read contents: read security-events: write strategy: fail-fast: false matrix: language: [ 'python' ] # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] # Use only 'java' to analyze code written in Java, Kotlin or both # Use only 'javascript' to analyze code written in JavaScript, TypeScript or both # Learn more about CodeQL language support at https://aka.ms/codeql-docs/language-support steps: - name: Checkout repository uses: actions/checkout@v4 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL uses: github/codeql-action/init@v2 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. # By default, queries listed here will override any specified in a config file. # Prefix the list here with "+" to use these queries and those in the config file. # Details on CodeQL's query packs refer to : https://docs.github.com/en/code-security/code-scanning/automatically-scanning-your-code-for-vulnerabilities-and-errors/configuring-code-scanning#using-queries-in-ql-packs # queries: security-extended,security-and-quality # Autobuild attempts to build any compiled languages (C/C++, C#, Go, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild uses: github/codeql-action/autobuild@v2 # â„šī¸ Command-line programs to run using the OS shell. # 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun # If the Autobuild fails above, remove it and uncomment the following three lines. # modify them (or add more) to build your code if your project, please refer to the EXAMPLE below for guidance. # - run: | # echo "Run, Build Application using script" # ./location_of_script_within_repo/buildscript.sh - name: Perform CodeQL Analysis uses: github/codeql-action/analyze@v2 with: category: "/language:${{matrix.language}}" ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/.github/workflows/publish.yml0000644000175100001770000000412714525470416020236 0ustar00runnerdockername: Wheel building on: schedule: # run every Monday at 5am UTC - cron: '0 5 * * 1' pull_request: # We also want this workflow triggered if the 'Build all wheels' # label is added or present when PR is updated types: - synchronize - labeled push: branches: - '*' tags: - '*' - '!*dev*' - '!*pre*' - '!*post*' workflow_dispatch: permissions: contents: read jobs: build_and_publish: # This job builds the wheels and publishes them to PyPI for all # tags, except those ending in ".dev". For PRs with the "Build all # wheels" label, wheels are built, but are not uploaded to PyPI. permissions: contents: none uses: OpenAstronomy/github-actions-workflows/.github/workflows/publish.yml@v1 if: (github.repository == 'astropy/regions' && (github.event_name == 'push' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || contains(github.event.pull_request.labels.*.name, 'Build all wheels'))) with: # We upload to PyPI for all tag pushes, except tags ending in .dev upload_to_pypi: ${{ startsWith(github.ref, 'refs/tags/') && !endsWith(github.ref, '.dev') && (github.event_name == 'push' || github.event_name == 'workflow_dispatch') }} test_extras: test test_command: pytest -p no:warnings --pyargs regions targets: | # Linux wheels - cp39-manylinux_x86_64 - cp310-manylinux_x86_64 - cp311-manylinux_x86_64 - cp312-manylinux_x86_64 # MacOS X wheels # Note that the arm64 wheels are not actually tested so we rely # on local manual testing of these to make sure they are ok. - cp39*macosx_x86_64 - cp310*macosx_x86_64 - cp311*macosx_x86_64 - cp312*macosx_x86_64 - cp39*macosx_arm64 - cp310*macosx_arm64 - cp311*macosx_arm64 - cp312*macosx_arm64 # Windows wheels - cp39*win_amd64 - cp310*win_amd64 - cp311*win_amd64 - cp312*win_amd64 secrets: pypi_token: ${{ secrets.pypi_token }} ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/.gitignore0000644000175100001770000000130714525470416014435 0ustar00runnerdocker# Compiled files *.py[cod] *.a *.o *.so __pycache__ # Ignore .c files by default to avoid including generated code. If you want to # add a non-generated .c extension, use `git add -f filename.c`. *.c # Other generated files */version.py */cython_version.py MANIFEST htmlcov .coverage* .ipynb_checkpoints .pytest_cache # Sphinx docs/_build docs/api # Packages/installer info *.egg *.egg-info dist build eggs .eggs parts bin var sdist develop-eggs .installed.cfg distribute-*.tar.gz pip-wheel-metadata # Other .cache .tox .tmp .*.sw[op] *~ # Eclipse editor project files .project .pydevproject .settings # PyCharm editor project files .idea # Visual Studio Code project files .vscode # Mac OSX .DS_Store ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/.pre-commit-config.yaml0000644000175100001770000000622214525470416016727 0ustar00runnerdockerci: autofix_prs: false repos: - repo: https://github.com/pre-commit/pre-commit-hooks rev: v4.5.0 hooks: - id: check-added-large-files # Prevent giant files from being committed. - id: check-ast # Simply check whether files parse as valid python. - id: check-case-conflict # Check for files with names that would conflict on a case-insensitive # filesystem like MacOS HFS+ or Windows FAT. - id: check-json # Attempts to load all json files to verify syntax. - id: check-merge-conflict # Check for files that contain merge conflict strings. - id: check-symlinks # Checks for symlinks which do not point to anything. - id: check-toml # Attempts to load all TOML files to verify syntax. - id: check-xml # Attempts to load all xml files to verify syntax. - id: check-yaml # Attempts to load all yaml files to verify syntax. - id: debug-statements # Check for debugger imports and py37+ breakpoint() calls in python # source. - id: detect-private-key # Checks for the existence of private keys. - id: double-quote-string-fixer # Replace double-quoted strings with single-quoted strings. - id: end-of-file-fixer # Makes sure files end in a newline and only a newline. exclude: ".*(svg.*|extern.*|pkl.*|reg.*)$" - id: trailing-whitespace # Trims trailing whitespace. exclude: ".*(data.*|extern.*)$" - repo: https://github.com/pre-commit/pygrep-hooks rev: v1.10.0 hooks: - id: python-check-mock-methods # Prevent common mistakes of assert mck.not_called(), assert # mck.called_once_with(...) and mck.assert_called. - id: rst-directive-colons # Detect mistake of rst directive not ending with double colon. - id: rst-inline-touching-normal # Detect mistake of inline code touching normal text in rst. - id: text-unicode-replacement-char # Forbid files which have a UTF-8 Unicode replacement character. - id: python-check-blanket-noqa # Enforce that all noqa annotations always occur with specific codes. - repo: https://github.com/asottile/pyupgrade rev: v3.15.0 hooks: - id: pyupgrade args: ["--py39-plus"] exclude: ".*(extern.*)$" - repo: https://github.com/pycqa/isort rev: 5.12.0 hooks: - id: isort name: isort (python) additional_dependencies: [toml] - id: isort name: isort (cython) types: [cython] additional_dependencies: [toml] - repo: https://github.com/PyCQA/flake8 rev: 6.1.0 hooks: - id: flake8 args: ["--ignore", "E501,W503"] - repo: https://github.com/asottile/yesqa rev: v1.5.0 hooks: - id: yesqa - repo: https://github.com/codespell-project/codespell rev: v2.2.6 hooks: - id: codespell args: ["--write-changes", "--ignore-words-list", "exten"] additional_dependencies: - tomli # - repo: https://github.com/MarcoGorelli/absolufy-imports # rev: v0.3.1 # hooks: # - id: absolufy-imports ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/.pycodestyle0000644000175100001770000000006414525470416015011 0ustar00runnerdocker[pycodestyle] max-line-length = 88 exclude = extern ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/.readthedocs.yaml0000644000175100001770000000070214525470416015672 0ustar00runnerdockerversion: 2 build: os: ubuntu-22.04 apt_packages: - graphviz tools: python: "3.11" jobs: post_checkout: - git fetch --shallow-since=2022-10-01 || true pre_install: - git update-index --assume-unchanged docs/conf.py sphinx: builder: html configuration: docs/conf.py fail_on_warning: true python: install: - method: pip path: . extra_requirements: - docs - all formats: [] ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/CHANGES.rst0000644000175100001770000003160714525470416014255 0ustar00runnerdocker0.8 (2023-11-16) ================ General ------- - The minimum required Python is now 3.9. [#517] - The minimum required NumPy is now 1.22. [#517] - The minimum required Matplotlib is now 3.5. [#517] New Features ------------ - The ``Regions`` class can now be initialized without any arguments. [#527] - The ``Regions`` ``extend`` method now can accept another ``Regions`` object as input. [#527] Bug Fixes --------- API Changes ----------- - The ``Regions`` class and its ``append`` and ``extend`` methods now raise a ``TypeError`` for invalid inputs. [#527] 0.7 (2022-10-27) ================ New Features ------------ - Region meta and visual metadata can be now input as a ``dict``. [#462] Bug Fixes --------- - Fixed an issue with the CRTF for certain malformed input. [#448] - Fixed a bug where DS9 serialization of an empty list raised an error. [#449] - Added validation to ``RegionMeta`` and ``RegionVisual`` ``update`` and ``setdefault`` methods. [#463] - Fixed an issue reading CRTF file with labelcolor defined. [#473] - Fixed a bug parsing CRTF files with ":" and "." coordinate separators. [#407] API Changes ----------- - Removed the deprecated ``BoundingBox`` class. Use ``RegionBoundingBox`` instead. [#456] 0.6 (2022-03-21) ================ New Features ------------ - Added the DS9 'boxcircle' point symbol. [#387] - Added the ability to add and subtract ``PixCoord`` objects. [#396] - Added an ``origin`` keyword to ``PolygonPixelRegion`` to allow specifying the vertices relative to an origin pixel. [#397] - Added a ``RegularPolygonPixelRegion`` class. [#398] - Added the ability to compare ``Region`` objects for equality. [#421] - Added a ``copy`` method to ``RegionMeta`` and ``RegionVisual``. [#424] - Added the ability to handle DS9 elliptical and rectangular annuli and multi-annuli regions. [#436] - Added the ability to handle DS9 composite regions. [#436] - Added the ability to serialize sky regions in the DS9 file format using the coordinate frame of the ``SkyCoord`` object. [#436] - Added the ability to serialize multiple regions in the DS9 file format that have different coordinate frames. [#436] - Added the ability to parse FITS region ``rectangle`` and ``rotrectangle`` shapes. [#444] Bug Fixes --------- - Fixed the DS9 default point symbol to use 'boxcircle'. [#387] - Point symbol markers are no longer filled for consistency with DS9. [#387] - Fixed an issue where plotting elliptical regions were incorrectly filled by default. [#389] - Fixed an issue where compound region colors were being set correctly. [#389] - Fixed an issue where sky/pixel conversions did not preserve ``meta`` and ``visual`` data for some regions. [#420, #424] - Fixed an issue with elliptical and rectangular annulus regions where the outer width/height could be smaller than the inner width/height. [#425] - Fixed an issue converting elliptical and rectangular annulus regions between pixel and sky regions. [#425] - Fixed the string representations of ``TextPixelRegion`` and ``TextSkyRegion`` to include quotes around the text parameter value. [#429] - Fixed many issues with the DS9 parser and serializer in not consistently handling or preserving the region coordinate frame or region parameter units. [#436] - Fixed handling of FITS shapes that are preceded by an exclamation mark. [#444] - Fixed a bug where written FITS region files could not be read back in. [#444] API Changes ----------- - Removed the following deprecated I/O classes and functions: ``crtf_objects_to_string``, ``ds9_objects_to_string``, ``fits_region_object_to_table``, ``read_crtf``, ``read_ds9``, ``read_fits``, ``read_fits_region``, ``write_crtf``, ``write_ds9``, ``write_fits``, ``write_fits_region`` ``CRTFParser``, ``DS9Parser``, ``FITSRegionParser``, ``ShapeList``, and ``Shape``. The ``Regions`` and ``Region`` objects now support this functionality via a unified I/O interface. [#386] - Removed the deprecated ``BoundingBox`` ``slices`` attribute. [#386] - The default matplotlib keywords that are used when plotting now depend on the value of ``self.visual['default_style']``. This keyword is currently set (to a value of 'ds9') only when reading DS9 region files. If set to 'ds9', DS9 plotting defaults are used. If not set or set to 'mpl' or None, then the matplotlib defaults will be used, with the exception that fill is turned off for Patch and Line2D artists. - Renamed the ``BoundingBox`` class to ``RegionBoundingBox``. The old name is deprecated. [#427] - A ``ValueError`` is raised if the radius, width, or height region parameters are not strictly positive (> 0). [#430] - Added a ``precision`` keyword to the DS9 serializer and writer to specify the number of decimal places in output numbers. [#436] - The ``errors`` keyword was removed from the DS9 parser and reader and the ``coordsys``, ``radunit``, and ``fmt`` keywords were removed from the DS9 serializer and writer. The new ``precision`` keyword can be used when serializing and writing DS9 regions. [#436] - The ``PixelRegion.plot()`` method now returns a ``matplotlib.artist.Artist`` object, which can be used in plot legends. [#441] - FITS region files are now always parsed and serialized as ``PixelRegion`` objects. They can be converted to ``SkyRegion`` objects using a WCS object. [#444] 0.5 (2021-07-20) ================ General ------- - The infrastructure of the package has been updated in line with the APE 17 guidelines. The main changes are that the ``python setup.py test`` and ``python setup.py build_docs`` commands will no longer work. The easiest way to replicate these commands is to install the tox (https://tox.readthedocs.io) package and run ``tox -e test`` and ``tox -e build_docs``. It is also possible to run pytest and sphinx directly. Other significant changes include switching to setuptools_scm to manage the version number, and adding a ``pyproject.toml`` to opt in to isolated builds as described in PEP 517/518. [#315] - Bump the minimum required version of Astropy to 3.2. New Features ------------ - Added a ``as_mpl_selector`` method to the rectangular and ellipse pixel-based regions. This method returns an interactive Matplotlib selector widget. [#317] - Added a ``get_overlap_slices`` method to ``BoundingBox``. [#348] - Added a ``center`` attribute to ``BoundingBox``. [#348] - Added ``get_overlap_slices`` method to ``RegionMask``. [#350] - Added ``get_values`` method to ``RegionMask``. [#351, #353] - Added a ``Regions`` class with a unified I/O interface for reading, writing, parsing, and serializing regions. [#378] - Added ``serialize`` and ``write`` methods to all ``Region`` subclasses. [#378] Bug Fixes --------- - Fixed an issue where ``RegionMask.multiply`` ``fill_value`` was not applied to pixels outside of the mask, but within the region bounding box. [#346] - Fixed an issue where ``RegionMask.cutout`` would raise an error if ``fill_value`` was non-finite and the input array was integer type. [#346] - A ``ValueError`` is now raised when calling ``BoundingBox.slices`` when ``ixmin`` or ``iymin`` is negative. [#347] - Fixed an issue in the DS9 parser where uppercase coordinate frames would fail. [#237] - Fixed an issue where the CRTF file parser would fail if the CRTF version number was included on the first line. [#240] - Fixed an issue where the CRTF file parser would fail if there was a space after the region name. [#271] - Fixed an issue where the CRTF file parser was too restrictive about requiring the last and first polynomial coordinates to be the same. [#359, #362] - Fixed a bug where an ``EllipsePixelRegion`` with zero height and/or width would raise a ``ValueError`` when creating a ``RegionMask``. [#363] - Fixed parsing CRTF regions files that do not have a comma after the region. [#364] - Fixed parsing CRTF regions files that contain a ``symthick`` value. [#365] - Fixed an issue where ``PointPixelRegion`` objects would not plot. [#366] - Fixed an issue where DS9 annulus regions with more than one annulus would not be parsed correctly. Such regions are skipped for now. [#371] - Fixed an issue where ``Angle`` values for ``SkyRegion`` shape parameters could be incorrectly serialized. [#380] - Fixed an issue where a semicolon in the DS9 text field would raise an error. [#381,#383] - Fixed an issue where DS9 regions without metadata would not be parsed correctly. [#382] - Fixed an issue parsing spaces in DS9 region metadata. [#384] API Changes ----------- - Deprecated the ``BoundingBox`` ``slices`` attribute. [#348] - The ``RegionMeta`` and ``RegionVisual`` classes have been moved to the ``regions.core.metadata`` module. [#371] - Deprecated the ``read_fits_region`` and ``write_fits_region`` functions. Instead, use the ``read_fits`` and ``write_fits`` functions. Note that the ``write_fits`` function is called as ``write_fits(regions, filename)`` for consistency with the other functions that write files. [#376] - The following helper functions were removed from the public API: ``to_shape_list``, ``to_crtf_meta``, ``to_ds9_meta``, ``CRTFRegionParser``, ``DS9RegionParser``, ``CoordinateParser``, and ``FITSRegionRowParser``. [#375] - Deprecated the following I/O classes and functions: ``crtf_objects_to_string``, ``ds9_objects_to_string``, ``fits_region_object_to_table``, ``read_crtf``, ``read_ds9``, ``read_fits``, ``write_crtf``, ``write_ds9``, ``write_fits``, ``CRTFParser``, ``DS9Parser``, ``FITSRegionParser``, ``ShapeList``, and ``Shape``. The ``Regions`` and ``Region`` objects now support this functionality via a unified I/O interface. [#378] - Existing ``ds9`` and ``crtf`` region files will not be overwritten by default with the ``write`` functions. Set ``overwrite=True`` to overwrite existing files. [#378] 0.4 (2019-06-17) ================ New Features ------------ - Add region copy methods [#269] - Add pixel region rotate method [#265] - Added ``union`` and ``intersection`` methods to the ``BoundingBox`` class. [#277] - Add support for BOX in FITS regions [#255] - Add PixCoord.xy [#247] Bug Fixes --------- - Fixed a corner-case issue where ``RegionMask.multiply()`` would not set non-finite data values outside of the mask but within the bounding box to zero. [#278] - Fix 'text' renamed to 'label' [#234] Other ----- - Remove astropy-healpix dependency [#258] - Use standalone six to avoid deprecation warnings [#235] - Change CRTF writer to match CASA implementation [#226] - Simplify annulus regions [#279] See also: `regions v0.4 merged pull requests list on Github `__. 0.3 (2018-09-09) ================ New Features ------------ - Changed ``as_patch`` to ``as_artist`` to accommodate non-patch artists [#218] - Implemented ``to_pixel`` for ``regions.CompoundSkyRegions``, ``to_mask`` for ``regions.CompoundPixelRegion`` and ``to_pixel`` for ``regions.CircleSkyRegion``. [#137] - Handling dimension and broadcast of ``x`` and ``y`` in ``regions.PixCoord``. [#172] - Deserialization of ``CRTF`` file format is possible. [#173] - Added ``regions.TextPixelRegion`` and ``regions.TextSkyRegion``. [#177] - Added ``Shape`` layer in the serialization of ``DS9`` format. Also, implemented ``RegionMeta`` and ``RegionVisual`` to validate the meta parameters. [#179] - Serialization of ``regions.Region`` object to ``CRTF`` format is possible. [#186] - Fix mask bug for regions with negative indices. [#190] - Improved the ``plot`` methods for several regions. Added ``as_patch`` for annulus regions. Now, uses the parameters in the ``visual`` attributes of regions in the matplotlib plotting. Also, added ``mpl_properties_default`` method in ``regions.PixelRegion`` to set the visual parameters to that of ``DS9`` by default. [#194] - Now, ``to_mask`` in ``regions.CompoundPixelRegion`` handles negative bounding box. [#195] - Added ``regions.RectangleAnnulusPixelRegion``, ``regions.RectangleAnnulusSkyRegion``, ``regions.EllipseAnnulusPixelRegion`` and ``regions.RectangleAnnulusSkyRegion``. Also, implemented custom descriptor classes for attribute validation. [#196] - Implemented FITS Region Binary Table reader and writer. [#198] - Renamed ``Mask`` class to ``RegionMask`` and added ``origin`` arg to ``as_patch`` and ``plot`` methods in ``regions.Region`` class. [#203] - Support for explicit formatting directives in ``DS9``. [#204] See also: `regions v0.3 merged pull requests list on Github `__. 0.2 (2017-02-16) ================ Changelog wasn't filled. See also: `regions v0.2 merged pull requests list on Github `__. 0.1 (2016-07-26) ================ Changelog wasn't filled. See also: `regions v0.1 merged pull requests list on Github `__. ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/CITATION.md0000644000175100001770000000010614525470416014175 0ustar00runnerdockerSee https://github.com/astropy/regions/blob/main/regions/CITATION.rst ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/LICENSE.rst0000644000175100001770000000274514525470416014270 0ustar00runnerdockerCopyright (c) 2015-2023, Regions Developers All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1700163875.5385401 regions-0.8/PKG-INFO0000644000175100001770000001324714525470444013551 0ustar00runnerdockerMetadata-Version: 2.1 Name: regions Version: 0.8 Summary: An Astropy coordinated package for region handling Author-email: Regions Developers License: Copyright (c) 2015-2023, Regions Developers All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Project-URL: Homepage, https://github.com/astropy/regions Project-URL: Documentation, https://astropy-regions.readthedocs.io/en/stable/ Keywords: astronomy,astrophysics,astropy,regions Classifier: Intended Audience :: Science/Research Classifier: License :: OSI Approved :: BSD License Classifier: Natural Language :: English Classifier: Operating System :: OS Independent Classifier: Programming Language :: Cython Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 3 Classifier: Topic :: Scientific/Engineering :: Astronomy Requires-Python: >=3.9 Description-Content-Type: text/x-rst License-File: LICENSE.rst Requires-Dist: numpy>=1.22 Requires-Dist: astropy>=5.0 Provides-Extra: all Requires-Dist: matplotlib>=3.5; extra == "all" Requires-Dist: shapely; extra == "all" Provides-Extra: test Requires-Dist: pytest-arraydiff; extra == "test" Requires-Dist: pytest-astropy>=0.10; extra == "test" Provides-Extra: docs Requires-Dist: regions[all]; extra == "docs" Requires-Dist: sphinx-astropy>=1.6; extra == "docs" Requires-Dist: tomli; python_version < "3.11" and extra == "docs" ======= Regions ======= |PyPI Version| |Conda Version| |Astropy| |CI Status| |Codecov Status| |Latest RTD Status| Regions is an `Astropy`_ package for region handling. Please see the `online documentation `_ for `installation instructions `_ and usage information. Citing Regions -------------- |Zenodo| If you use Regions for a project that leads to a publication, whether directly or as a dependency of another package, please include the following acknowledgment:: This research made use of Regions, an Astropy package for region handling (Bradley et al. 202X). where (Bradley et al. 202X) is a citation to the `Zenodo record `_ of the Regions version that was used. We also encourage citations in the main text wherever appropriate. Please see the `CITATION `_ file for details and an example BibTeX entry. License ------- Regions is licensed under a BSD 3-clause license. Please see the `LICENSE `_ file for details. .. |PyPI Version| image:: https://img.shields.io/pypi/v/regions.svg?logo=pypi&logoColor=white&label=PyPI :target: https://pypi.org/project/regions/ :alt: PyPI Latest Release .. |Conda Version| image:: https://img.shields.io/conda/vn/conda-forge/regions?label=conda%20package :target: https://anaconda.org/conda-forge/regions :alt: Conda Latest Release .. |Astropy| image:: https://img.shields.io/badge/powered%20by-AstroPy-orange.svg?style=flat :target: https://www.astropy.org/ :alt: Powered by Astropy .. |Zenodo| image:: https://zenodo.org/badge/35690635.svg :target: https://zenodo.org/badge/latestdoi/35690635 .. |CI Status| image:: https://github.com/astropy/regions/workflows/CI%20Tests/badge.svg# :target: https://github.com/astropy/regions/actions :alt: CI Status .. |Codecov Status| image:: https://img.shields.io/codecov/c/github/astropy/regions?logo=codecov :target: https://codecov.io/gh/astropy/regions :alt: Coverage Status .. |Stable RTD Status| image:: https://img.shields.io/readthedocs/astropy-regions/latest.svg?logo=read%20the%20docs&logoColor=white&label=Docs&version=stable :target: https://astropy-regions.readthedocs.io/en/stable/ :alt: Stable Documentation Status .. |Latest RTD Status| image:: https://img.shields.io/readthedocs/astropy-regions/latest.svg?logo=read%20the%20docs&logoColor=white&label=Docs&version=latest :target: https://astropy-regions.readthedocs.io/en/latest/ :alt: Latest Documentation Status .. _Astropy: https://www.astropy.org/ ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/README.rst0000644000175100001770000000531214525470416014134 0ustar00runnerdocker======= Regions ======= |PyPI Version| |Conda Version| |Astropy| |CI Status| |Codecov Status| |Latest RTD Status| Regions is an `Astropy`_ package for region handling. Please see the `online documentation `_ for `installation instructions `_ and usage information. Citing Regions -------------- |Zenodo| If you use Regions for a project that leads to a publication, whether directly or as a dependency of another package, please include the following acknowledgment:: This research made use of Regions, an Astropy package for region handling (Bradley et al. 202X). where (Bradley et al. 202X) is a citation to the `Zenodo record `_ of the Regions version that was used. We also encourage citations in the main text wherever appropriate. Please see the `CITATION `_ file for details and an example BibTeX entry. License ------- Regions is licensed under a BSD 3-clause license. Please see the `LICENSE `_ file for details. .. |PyPI Version| image:: https://img.shields.io/pypi/v/regions.svg?logo=pypi&logoColor=white&label=PyPI :target: https://pypi.org/project/regions/ :alt: PyPI Latest Release .. |Conda Version| image:: https://img.shields.io/conda/vn/conda-forge/regions?label=conda%20package :target: https://anaconda.org/conda-forge/regions :alt: Conda Latest Release .. |Astropy| image:: https://img.shields.io/badge/powered%20by-AstroPy-orange.svg?style=flat :target: https://www.astropy.org/ :alt: Powered by Astropy .. |Zenodo| image:: https://zenodo.org/badge/35690635.svg :target: https://zenodo.org/badge/latestdoi/35690635 .. |CI Status| image:: https://github.com/astropy/regions/workflows/CI%20Tests/badge.svg# :target: https://github.com/astropy/regions/actions :alt: CI Status .. |Codecov Status| image:: https://img.shields.io/codecov/c/github/astropy/regions?logo=codecov :target: https://codecov.io/gh/astropy/regions :alt: Coverage Status .. |Stable RTD Status| image:: https://img.shields.io/readthedocs/astropy-regions/latest.svg?logo=read%20the%20docs&logoColor=white&label=Docs&version=stable :target: https://astropy-regions.readthedocs.io/en/stable/ :alt: Stable Documentation Status .. |Latest RTD Status| image:: https://img.shields.io/readthedocs/astropy-regions/latest.svg?logo=read%20the%20docs&logoColor=white&label=Docs&version=latest :target: https://astropy-regions.readthedocs.io/en/latest/ :alt: Latest Documentation Status .. _Astropy: https://www.astropy.org/ ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/codecov.yml0000644000175100001770000000031514525470416014610 0ustar00runnerdockercomment: off codecov: branch: main coverage: status: project: default: target: auto # this allows a small drop from the previous base commit coverage threshold: 0.05% ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1700163875.5065398 regions-0.8/dev/0000755000175100001770000000000014525470444013223 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/dev/README.md0000644000175100001770000000041114525470416014475 0ustar00runnerdocker# Developer stuff for regions This is the `dev` folder in the `regions` package. It is for developers, end users should ignore it. Here we have documentation and scripts to help `regions` development, e.g. to make example test datasets or performance benchmarks. ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/dev/regions_parse.py0000644000175100001770000000216214525470416016435 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst from pathlib import Path import click import pyregion from astropy import log from regions import read_ds9 log.setLevel('DEBUG') TEST_FILE_DIR = Path('../regions/io/ds9/tests/data') @click.group() def cli(): """astropy.regions parser debugging tool.""" pass @cli.command('list-files') def list_files(): print('Available files') for ffile in TEST_FILE_DIR.glob('*.reg'): print(ffile.parts[-1]) @cli.command('parse') @click.option('--interactive', is_flag=True, default=False) @click.option('--parser', default='regions') @click.option('--errors', default='strict') @click.argument('filename') def parse(filename, interactive, parser, errors): readname = TEST_FILE_DIR / filename print(f'Reading {readname}') print(f'Using parser {parser}') if parser == 'regions': regions = read_ds9(str(readname), errors=errors) elif parser == 'pyregion': regions = pyregion.open(str(readname)) print(regions) if interactive: import IPython IPython.embed() if __name__ == '__main__': cli() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/dev/regions_pyregion_comparison.csv0000644000175100001770000000450114525470416021553 0ustar00runnerdockerfilename,time_regions,time_pyregion,compl_pyregion,compl_regions ds9.linear.wcsi.reg,0.009,0.775,100.0%,42.9% ds9.mosaic.fk4.hms.reg,0.034,0.749,100.0%,42.9% ds9.color.reg,0.005,0.227,100.0%,100.0% ds9.fk5.strip.reg,0.011,0.350,100.0%,50.0% ds9.fk5.reg,0.011,0.476,100.0%,41.7% ds9.physical.strip.reg,0.003,0.338,100.0%,50.0% ds9.physical.windows.reg,0.003,0.437,100.0%,42.9% ds9.fk5.hms.reg,0.013,0.506,100.0%,41.7% ds9.icrs.hms.reg,0.014,0.478,100.0%,41.7% ds9.icrs.strip.reg,0.010,0.362,100.0%,50.0% ds9.color.spaces.reg,0.005,0.235,100.0%,100.0% ds9.mosaic.ecliptic.hms.reg,0.024,0.753,100.0%,42.9% ds9.linear.wcs.reg,0.008,0.742,100.0%,42.9% ds9.mosaic.ecliptic.reg,0.021,0.775,100.0%,42.9% ds9.linear.wcsc.reg,0.007,0.784,100.0%,42.9% ds9.fk4.hms.strip.reg,0.014,0.346,100.0%,50.0% ds9.mosaic.galactic.reg,0.022,0.745,100.0%,42.9% ds9.linear.wcsd.reg,0.007,0.773,100.0%,42.9% physical_reference.reg,0.001,0.219,100.0%,100.0% ds9.fk4.reg,0.012,0.484,100.0%,41.7% ds9.image.strip.reg,0.003,0.324,100.0%,50.0% ds9.icrs.hms.strip.reg,0.012,0.350,100.0%,50.0% ds9.image.reg,0.003,0.458,100.0%,41.7% ds9.mosaic.fk5.hms.reg,0.029,0.771,100.0%,42.9% ds9.mosaic.image.reg,0.007,0.753,100.0%,42.9% ds9.physical.reg,0.003,0.446,100.0%,41.7% ds9.ecliptic.reg,0.011,0.473,100.0%,41.7% ds9.ecliptic.strip.reg,0.010,0.363,100.0%,50.0% ds9.fits.reg,0.002,0.262,100.0%,100.0% ds9.icrs.reg,0.011,0.473,100.0%,41.7% ds9.mosaic.fk4.reg,0.024,0.768,100.0%,42.9% ds9.mosaic.icrs.hms.reg,0.025,0.779,100.0%,42.9% ds9.ecliptic.hms.reg,0.012,0.487,100.0%,41.7% ds9.fk4.hms.reg,0.014,0.486,100.0%,41.7% ds9.mosaic.galactic.hms.reg,0.026,0.761,100.0%,42.9% ds9.mosaic.icrs.reg,0.022,0.764,100.0%,42.9% ds9.comment.reg,0.000,-1.000,0.0%,nan% fk5_reference.reg,0.003,0.220,100.0%,100.0% ds9.mosaic.fk5.reg,0.023,0.749,100.0%,42.9% ds9.fk4.strip.reg,0.012,0.351,100.0%,50.0% ds9.galactic.strip.reg,0.011,0.349,100.0%,50.0% ds9.galactic.reg,0.011,0.493,100.0%,41.7% ds9.composite.reg,0.012,0.474,100.0%,41.7% ds9.linear.wcsa.reg,0.007,0.775,100.0%,42.9% ds9.linear.wcsp.reg,0.007,0.760,100.0%,42.9% ds9.fk5.hms.strip.reg,0.013,0.347,100.0%,50.0% ds9.galactic.hms.reg,0.013,0.473,100.0%,41.7% galactic_reference.reg,0.002,0.220,100.0%,100.0% ds9.galactic.hms.strip.reg,0.013,0.346,100.0%,50.0% ds9.mosaic.physical.reg,0.007,0.735,100.0%,42.9% ds9.ecliptic.hms.strip.reg,0.012,0.345,100.0%,50.0% ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/dev/regions_pyregion_comparison.py0000644000175100001770000000674114525470416021420 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst """ Compare DS9 parsing of the astropy regions package to pyregion This scripts compares the DS9 parsing of the astropy regions package to pyregion in two regards. * speed : the time to parse a file given ``REPETITIONS`` repetitions * completeness : the ratio of regions in a file (estimated by the number of '(' in the file) that survives the parsing process The test files are the ones used since PyAstro16 (see https://zenodo.org/record/56793). """ import re import timeit from pathlib import Path import numpy as np import pyregion from astropy.table import Table from regions import DS9RegionParserError, read_ds9 TEST_FILE_DIR = Path('../regions/io/ds9/tests/data') REPETITIONS = 1 p_region_count = re.compile(r'[^=\)]\(') results = list() filenames = sorted(TEST_FILE_DIR.glob('*.reg')) keep_filenames = [] for filename in filenames: skipfiles = ('ds9.linear.wcs.reg', 'wcsa', 'wcsc', 'wcsd', 'wcsi', 'wcsp') skip = False for skipfile in skipfiles: if skipfile in filename.name: print(f'Skipping {filename}') skip = True continue if not skip: keep_filenames.append(filename) for filename in keep_filenames: print(f'\n\n{filename}') # estimate total number of regions n_regions = 0 with open(str(filename)) as origin_file: for line in origin_file: n_regions += len(p_region_count.findall(line)) # regions try: region_regions = read_ds9(str(filename), errors='warn') except DS9RegionParserError: time_regions = -1 compl_regions = 0 else: time_regions = timeit.timeit("read_ds9(str(filename), errors='warn')", setup='from regions import read_ds9', globals=globals(), number=REPETITIONS) / REPETITIONS compl_regions = np.divide(len(region_regions), n_regions) # pyregion try: pyregion_regions = pyregion.open(str(filename)) except ValueError: time_pyregion = -1 compl_pyregion = 0 else: time_pyregion = timeit.timeit('pyregion.open(str(filename))', setup='import pyregion', globals=globals(), number=REPETITIONS) / REPETITIONS compl_pyregion = np.divide(len(pyregion_regions), n_regions) # collect results results.append(dict(filename=filename.parts[-1], time_regions=time_regions, time_pyregion=time_pyregion, compl_regions=compl_regions, compl_pyregion=compl_pyregion)) result_table = Table() result_table['filename'] = [_['filename'] for _ in results] result_table['time_regions'] = [_['time_regions'] for _ in results] result_table['time_regions'].format = '.3f' result_table['time_pyregion'] = [_['time_pyregion'] for _ in results] result_table['time_pyregion'].format = '.3f' result_table['compl_pyregion'] = [_['compl_pyregion'] for _ in results] result_table['compl_pyregion'].format = '0.1%' result_table['compl_regions'] = [_['compl_regions'] for _ in results] result_table['compl_regions'].format = '0.1%' result_table.meta['repetitions for timing'] = REPETITIONS savename = 'regions_pyregion_comparison.csv' print(f'Writing {savename}') result_table.write(savename) result_table.pprint() ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1700163875.5105398 regions-0.8/docs/0000755000175100001770000000000014525470444013375 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/docs/Makefile0000644000175100001770000001072714525470416015043 0ustar00runnerdocker# Makefile for Sphinx documentation # # You can set these variables from the command line. SPHINXOPTS = SPHINXBUILD = sphinx-build PAPER = BUILDDIR = _build # Internal variables. PAPEROPT_a4 = -D latex_paper_size=a4 PAPEROPT_letter = -D latex_paper_size=letter ALLSPHINXOPTS = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) . .PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest #This is needed with git because git doesn't create a dir if it's empty $(shell [ -d "_static" ] || mkdir -p _static) help: @echo "Please use \`make ' where is one of" @echo " html to make standalone HTML files" @echo " dirhtml to make HTML files named index.html in directories" @echo " singlehtml to make a single large HTML file" @echo " pickle to make pickle files" @echo " json to make JSON files" @echo " htmlhelp to make HTML files and a HTML help project" @echo " qthelp to make HTML files and a qthelp project" @echo " devhelp to make HTML files and a Devhelp project" @echo " epub to make an epub" @echo " latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter" @echo " latexpdf to make LaTeX files and run them through pdflatex" @echo " text to make text files" @echo " man to make manual pages" @echo " changes to make an overview of all changed/added/deprecated items" @echo " linkcheck to check all external links for integrity" clean: -rm -rf $(BUILDDIR) -rm -rf api -rm -rf generated html: $(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/html." dirhtml: $(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml @echo @echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml." singlehtml: $(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml @echo @echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml." pickle: $(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle @echo @echo "Build finished; now you can process the pickle files." json: $(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json @echo @echo "Build finished; now you can process the JSON files." htmlhelp: $(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp @echo @echo "Build finished; now you can run HTML Help Workshop with the" \ ".hhp project file in $(BUILDDIR)/htmlhelp." qthelp: $(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp @echo @echo "Build finished; now you can run "qcollectiongenerator" with the" \ ".qhcp project file in $(BUILDDIR)/qthelp, like this:" @echo "# qcollectiongenerator $(BUILDDIR)/qthelp/Astropy.qhcp" @echo "To view the help file:" @echo "# assistant -collectionFile $(BUILDDIR)/qthelp/Astropy.qhc" devhelp: $(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp @echo @echo "Build finished." @echo "To view the help file:" @echo "# mkdir -p $$HOME/.local/share/devhelp/Astropy" @echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/Astropy" @echo "# devhelp" epub: $(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub @echo @echo "Build finished. The epub file is in $(BUILDDIR)/epub." latex: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo @echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex." @echo "Run \`make' in that directory to run these through (pdf)latex" \ "(use \`make latexpdf' here to do that automatically)." latexpdf: $(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex @echo "Running LaTeX files through pdflatex..." make -C $(BUILDDIR)/latex all-pdf @echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex." text: $(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text @echo @echo "Build finished. The text files are in $(BUILDDIR)/text." man: $(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man @echo @echo "Build finished. The manual pages are in $(BUILDDIR)/man." changes: $(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes @echo @echo "The overview file is in $(BUILDDIR)/changes." linkcheck: $(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck @echo @echo "Link check complete; look for any errors in the above output " \ "or in $(BUILDDIR)/linkcheck/output.txt." doctest: @echo "Run 'pytest' in the root directory to run doctests " \ @echo "in the documentation." ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1700163875.5105398 regions-0.8/docs/_static/0000755000175100001770000000000014525470444015023 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/docs/_static/region_ds9.png0000644000175100001770000120104114525470416017571 0ustar00runnerdocker‰PNG  IHDRķAmp1sBIT|dˆtEXtSoftwaregnome-screenshotīŋ> IDATxœėŨwxUĀáßļ$›Ū Ŋ6!ô^BU)zQĻtáŖ‰‚€( ]Q)Ąˆ ‚ Jī „’P¤ˇ„ôļõû#…$˛ 9īķälfîÜ9÷ÎėŲ;wf§OŸļX,R˙MũŋŲl~čĩôË !„B!ōŽBĄČđ˙ÔߕJåC¯) ԙ“x‹ÅBBB÷îŨ#66–ÄÄDL&S–ÉžB!„"īdNÖU*vvv8::R¨P!´Zm†eÔ§OŸNKĐÍf3wīŪ%&&†&MšPˇn]ÜÜÜPĢÕšOB!„BŧŒF#œ9s†mÛļáääDá…Q*•ÉIŊŅh´˜ÍfŒF#ÁÁÁ8;;ãëë‹ŲlNûB!„B ĨR™ösúôiôz=¨ÕjzŊŪb2™¸xņ"†˛eËb0d*B!„Ī…BFŖ!88•JEŲ˛eQšL&ĸŖŖš~ũ:ĨJ•B¯×K"/„B!Ä3Æbą ×ëņ÷÷įÆDGGŖˆĩ\¸p'''|||$‘B!„âĻP(¸uëąąąÉ#ķ÷īßĮÍÍMy!„B!žq‹777ÂÃÃQFâââ°ŗŗ+čz !„B!Ŧ`kkK\\JƒÁ@RR’ŒĘ !„BņIJJJ™7]!„B!DFÔŠÉŧŒĖ !„Bņü0É7šLςދB!„"L&jŗŲ,Éŧâ…aN¸ĘūŸÖ˛öˇ#œģFœQ‰“;ŪĨ+QˇáK´kSbZEē5LÜØ0Ž_…δúr5˙ĢĻ}dųĻčķlZËĪģŽqîF4zTØ{ųRŖū+tėԚ^6¤•ngķ ŽL= ží°n°ļų¸īĪũŋ,íũKo@šÁĢXÖΕĩëZ’¸}ô'žųa+‡C¯ž`ƒģo^ģ?oúŧ81BŧđŌ’yŗŲ\ĐuBˆ|g‰ fŲđĄ,;Ÿ~ÃLbL˙žÜÉŋםhÚĻ>ÅŌ¯d¸ÉŸŋ„ĻüÍŽŸO2´jĶįû)åDüž?\ÁɄô¯›ˆŋsžŊĪŗwãFÚNœÁČĻŪhō~÷^ –XūY2„Ģ/ķ`r¨žûö˛üG93âf´-"ņBŧĖfsr2oąXdÎŧâ?ÎĀ•3Syęŋ՛7jųSÆCIÔŨ„ū}ˆŗÎoPÎÎBúĶĄūę~šōā÷øƒ?q,Ē\2f톛›?j'“;?^§=+–ÆŨt‡Đ“ģXĩėw.›Žŗiō\ŧŌßß…ŃŒ4ų<üœ‰ĶīĢĢ÷]y=SSųÂMđa÷úSÜæÄĪ ˜šé2‡ŋú’u?ŖĨ§2˙ę.„΋łR’x!ċÁĀ­āÛ¨k eBīWiPą>>%đĢRļŊ†1ú͒™Ļh$qqÛ6nöõzŅÜ H:ÆúŖd¸ži‰æČ×_ķWāԌOž›ÃčŽÍ¨ã_šrëŌĒÛ–~÷!œŽ˛ōĢmÜ–Ųš`&"ø×_fܨÔõ-Bą˛Õi;øc–ôĮXģī^!Äŗ¤AĶ—0x‘‘‘i¯EEGķū°á4húŌ•­dT^ņPáZˏ‡ņør–ėđĄ_ŗŌ8>n7ņ›~ŋ ØQķĩWiįņ3ŋoŽäøÆCÜkÖ ¯”u-ą§ųé@ŪíCãBꇊ˛-ō2CúmfßįÁ˜ĪneX:Ęb›†ĢŦxˇ7KnW Įģ•šsā ĮĪ]!\၎agŪkíÁ…[Ø~ø —Â’pđŠĀKobHķbØ* yēĪO,˙å§Īœåü­XTN…)Uå%zŧĶfĨíy°Ë&î˙ŗyKˇrôüUîëmp)ęG•áė=xßVą´WĘ\v3QÁ?1oÉ&žšJ„Úƒ’åkōfß÷hWŅ5›ųîfbC~cŅ×?q øw N)YãÍĖËYHŧq–Ŧä÷āšžˆÂΟRxŠ÷púÖvAŠHš"ĸRĄIqDíIõę^z‡‹/˙†N­“B<=ĨK•âäŠĶ 1’šŗ>GĄP0dähB/\ d‰š.×bą NMä%ĄBüˇŲPļŨÛnÉžØKüøi~œ[ŽÆ-[đjķ&Ô)ëš19âƒag`S™–ū”ŗ¯ëæ-Džų…=ˇ_ĄƒOr ›të$õEŠ[Ņ E–SFxVoB‚šĀuūšŽ§ŊgSMR×5œá‡EgP*s8įw,`ĎÔT€™Ø[§ųyÚ(ėJ,į]ōuKÔa~ų#ײeŠ^ŨĖŨsgŨˇš‰]ÄüŨ'4÷TFn˙6‘^3ؗŦFã˛NÄ_;ËÁƒ÷Rę•Z3á{>ãI8)M)ÃMū=šŲáüÔoø¨Ž Y.2ļ{:}&˙A€Ú•ĸEĐ߸ĀŊĖSŒN3čx~ K~ÕÖŲ ĸ#šqî ÷íėPX¸TjH9Îĩi Ē1šW %mĸšq~/ßīž€ņÎU" õp|ø3•BˆYͧ1xø.^ēĖā#Q(\¸x o//fMŸöDy¸œę„/ ĩ×+L^ åÛy‹Xyä.æ˜Pv¯ e÷ēy8UhËûÃûŅnj]ōĶf,ąüŗi?Ņ€ĻŌ+TvR`įûõˇ°%:”ŸvŪäõnÅŅ–øâĐâĸ}ôĩĘÁ3e´8‰˜¤ė'‚¸ž4ŽE#SĖ&žãķßcđÆģ ĒĀ€Ų“éXÁ UøNū÷ö§ėŋˁ#wč¯+.õ?aûjT)NĖQßmģŽđã‰H^jîŽ2î–,LNäŊۜɞAÕpQúK,yû=žģŽ" gX>÷OÂąĨÖȝ™ŪĒ6–DBV äīޞu؟ôŽõ&E˛Úõ„`–ÎMNäG˛h\ JÚ*@™Ĩīöeų‹îäX@!:.ø–!~ļ`N"ân$ęBvhŠŋɸ>{xį›ŽmūŒw6gąMcyރâR¸P!æ~1+-Ąđ*\˜š_|ގ—ו-w !^ l‹5ĸßg+ų}í<Ļôz%“3sf͆|ĘÖ;É߈m‰>Á‡’KS.° ŠØXbŒ>4ŦfĀŋŋîāŠ>ĨT­+ɯFq#ĘđČ­›âī €=Ų?ˆŅŠxYŧė” t¤B͏Xl)^ ¨<ĒņR™äecîF?˜Į¯„Ø‹ųeí÷,Z8Ÿ¯žÛÃŨ”?F܊Á$];Čņ€2tíX99‘„¤k{9p@MŌ‰ æ|ņ%3ŋ\ȆДoŋzŒĢIZw‡"JĐŊīËɉ< 2?HíéOEW€{Ŧ˙x_ŦūƒˇÍ¸x{á”.[|ģ~Áʉ]¨[Ō%ezĪ€WčPß5y{ėe¨JņŒŅ¨5ØÚ>¸3ËÆÆÍ—+§;!Ä H­§M;ųŅ´Sî]Á˜qk8wīˇŨ¤ų[ňūëgŽĻ$¨gæŧCë9™Š¸ĩ­˙vãƒōļØxW¤”ÍzîčīąwĪ5ú•÷ÍâYįf"Oíã2€˛4ĩŠŲqÖ×Xm›|Â6'g0JP¨ąIIrõ ÆädŪÅŅÃöãÕ,Ëą˜ÍXS\xō ĩ;E˙ÁÂs—hâ8ųĮ¯œĖŧ€>Ž„G\h0ń *Di÷Įŋå(ėĢ2dæh´sŗūÔQ~üú(?~­Ąx`W>xŋ+õ §CFŒâß+WŌæČ_šz•!#G1÷‹ĪņpwĪuŲigV™3/„x1ŠņŦŪ–6ĨÖpūÄߏÅd c˙Æ0>vŊ{lßBŸáąsāĩÚZīKā֚YüPwo8f¸ôi ÛĪĸÅ'0ļĩ^Ŗ†‹"ĶyגÅc‚ĖĄO˙úƒåžsŸtyĶŧ xĐrô$Ū ôÅÛîkûŋÅW—H~$¤Å‚Ōą0N@ĸ1œëŅF,öĒådڎŌ1yzP"ž [5v^Y%˙é™*m;Ļ(îÆš°Ø§Ū5lyh;@[Ļ9CžlLĐ#ėÜĩ“-›öēī;F߲á‡ų)Š0c4+P+ Ô Â‚)ė ĢöÅZj6+ƒÍ‹ô˜O!Ä3o䘹i‰üœY32bWŽ^ećą|Éĸ\—-cBˆƒ%–ŖŸŋG¯QŸķÍ/ûø;ä*ˇn˙ËŠƒŋŗō‹ņĖŊ ĄLeo”wöąņŒ°§éԍėųãwöĻũlá‡>%ˆØŗ™Ķņ€Ō•ē}ŪϞ0‡˛|pF-ū‰GĪpîÔaļ­Ã ˇ'ŗ5PС_}<ōéėkŠē•2ŠîA@Õrx;¨Á”Hŧ>ãrļÅŠįp™å‹~įßÄäÔ×Ŧ&֘yŲÔv¸Ā˛Eŋs)!Ũ„tŗũcæ§?ØÎ–.ū“kI)ˇÖšâˆĪ<#Ép—Ŗ{s) ÜËŌáŊqLX!ųo7Īs/Ĩ^Iŋ§o×áĖūå ÁWorņÄf™ÎÁD x{ŪĒėøĐ!„(HĄ.ā[ļ,sfÍÄÃŨwwæĖš‰oŲ˛\¸xņ‰Ę–‘y!Ä ÁqŒ ?.sI™KĮˇą"‹eėĢ÷åƒúŽÜÜđ+Ą/Ķą˛CÆ/8BMą—;PiŲ,NÅėgã?1T¯ëˆĻØëL™Æč˙­ãŧ1œ#kįsdmĻ Ø”§û”‰t(ĄI>įĻmOZĪøåIéĪ0`˙`d>ķ—NŲ–lL-‡ŨėŽ aÖÛ=øšœ'†kį¸~u ;z~™“wļw=|ˇˇ-Q7yûvôųā%Mųƒđ=ŗčĩgŪŽ(ãšcĄæ„UĖjä’u~;ģĻĶmß"|ŧm‰ē~7åĻáۉ;ûOÚF$É÷!¸IDJeœë5§Ŧ‹9ŽS6s!,’ sNŗ!C|+1hBįäåä-Mņ Ųŗc{Ú˙Ssnw77–-^˜áĩܐ‘y!Ä AéR›ĶGͧumtEŨqL™~mëäAŠĒ¯đî¸yŦ™úĨ¸Îī[“ŋōĩx›ļ”ˇËĸ,zt¯g$røįD™”¸Õė˂U_2˛]}ü §>Ī]…Ŗˇ?M:gáĘŲôĢᚯ'^Ĩ[}ÆĖB›€BØéøz…˙›ôií“yI<Žä‡%ŖéPÛû8nßGS´4…Ē  ÆŖXųÍ:×+O1Wáˇo–¤Ĩh…:øŲyôā|Ļíhcšu=ÛRuy­Eétą° r¤Į›õđ/ę†mB$IZ<ŠU Y¯Y4ĸŽJ@á@a ų˛_KjûÂPh SņĨŪL_>ÎĨž[A!ūËÁÁÁ–ũû÷ĶŠS§‚Ž‹Bˆ‚–xši]‡ŗ5tÃVą¸ĩ§Œú!Ä3jíÚĩrŽBņ€9öWbė(\Ø^Ū$„â'įi!„xAéīæī‹á$ĻĖ‘ąč¯ķûâo9 ­NËŦæ !„xĻČ °BņBŠįÔŌ‰ ÛJg||l‰žy8 € ßīGįĖĪBņŦQßŧ|Ģ ë „âi3›ą¯Øœ&ˇķwčMnŨˆÆÆ­(~åkķFī´(ë(—n…â9 čXģ§ĨZë Üŋ ë"„B!„°ŌēuëPV­_…­Ģ~/čē!„B!rH]BW‚2W|e^¤B!„ĪelT<ŽžÎ]!„B!D)5'ž,čz!„B!rH}hû!ŋÖ@ĻŲ!„BņœQŋönknGŪ$,,Ŧ ë"„B!„ČEpp°e˙ūũØÚÚt]„B!„VJJJzđ °oŊõVAÖE!„B‘_ũur2Ÿ:_>$$¤@+$„B!„Č^PPŪŪŪ(M&“Üü*„B!ÄsHi41›Í]!„B!D) ƒ$ķB!„B<‡”ƒŖŅXĐõB!„BäŌd2t„B!„š TŠT(ЂއB!„"‡”•JUĐõB!„BäŌÆÆÆĘd>‘SŸ4D§Ķ=üķÆJnšâ9<ŧēļ+¸–åīųå1uĶéč°á.ēÅ71xu/3;DŸōJæ:¸ļu_­9Iô“Ü'lēËÆîĐŊô%įõY-Į‘1uĐUğQqO)n9eMø¯1wåGŽÉđķ׉`.ŪŠÆnš˜‹Į8ręIų\#}Čl^~D_Oũiŗü*Īõ0ĻpŽ,C—ĻՒ÷Éŋ Ztcđ´ \LĖË =­sT s į7ÍâƒM¨æ—ÜVUˇcĐô œŒ´ļOšÎÉęÎ\Sû´fâl_ĸ2ŋXbųį›É|wΛē•Üy~¯ˇ%pzNOz.žŽ˙ũų¸QYœīpéėQūØņ+įúĩŖŦŨs85Đtģ2hŨ5ŧtĨߤę”p4p÷üA~ Kˇ.m‚SA×ĶZĘÎH€‰ø[ĮØ03ŪžŽío?ĐŖ„:ûõs¤€ß[2PâVą>ÅYžŗ1ŧ[Ō-ųp7…ņ÷Ņģ„îžHb[OėĐsíĐ)âTū4*m—\„U}ĄWžÂqpöGļŨ¸ÂOŋ^æŊĄåąyâRŸ–gŠ_QpržĖÛĨnË6:dõG-•G­es^Õ.§[7kå×>(q¯ß…ēšaüē鸐>ũg;ŖhŌŠΊŽcvrg‹)‘$ė°{~ŗKPØâäę†KĘ>¸ģ9BÜin†Eađ*ŒB…Cņ T| UQ:•ŖáĢå2ŊjæūŽąL;gÆwĀ\†×pĖĪĪų+á4߯žˆc‹EŦøŦ).i;ōƒÆš0=—÷ø˜¸ŗy #ÖŨ¤âĐųŽŠģŅĻ=ŊöcûžjBōÄĮĨ5šŊœrhA3ŋXš÷ÜĀÚ]ˇéúVą<ū0ųlmŠÕĄ˛ãBėšDbËhKėyö\ķ Y—B8x˜ú:”ŗLœ>xĘôĀßIÕ}áŠņœ^ŋpUij{]æČĪ?sqĀ(25=ģž­~!DAIOĪŗ7Gk.¸šķ+Ū­t:tŅåk9÷ž…ÖÅņoĶēFōeá—ßũ‚Ũw2OFHŋņۈŪÛāėĮ4­|)´Éôā\MĨPē×Ĩs][nūú 2\"áīuģˆvnBĮĒNdĮĮĮ-ūđHjéÚ°üjĘ Æ+,mŖC§ëÂÆ{)|õ!Ė~YGãiÁäéL… bŲŨ7]ûål_>’võ+āWĄ5 B‰8ēŒąŊZŅ JĘ%åĻŨ˜°ū<š>eŨĢ8˛q"T@§ĢDĶ>ķ9i"áâF&tn@€NG@ãŪĖ=‘é’ūSė[J%j%vėdžfc"ōüQŽß!ōÎ%‚O$OĪ9vúwōū{Lˇå#6Qe4sTÂ>ĩZ–Xέ›@ˇĻUŅétøÕj̀šģ¸žÛgģĖ“ļKb¸ NE ķĐĀŖR…*ÃkníšĪāvTŌéĐų× i—1Ŧš¤LVôš,+÷ũČx•Ÿ—ė#ąČÛ|Ü;]ō–BĄ-G‹ļå°ëÚ,3kÛđĄãŌęšŲ˛/]‹â@ô­¨tSŧŦˆĨé>G¤eõäķrķžsØąsJ6Ķs˛Ī+ØųÇ´¯_NG­×GšĀ´åh\^Aĉŋ¸23%ņō^ÎYüiĶē)…īātTĘqžĘîPđŦUBjŦī 9:r)îëvD`×p(cŪĢ 7åį éßŨŦaN53÷~éEE˙NŦÉ4?3ņô4ëę0æp`&úä÷Œîr|ëtT |AKCRÎŗ™ûEvË? 9=¤Ä¸Ũ7l^đ>­kęĐé*Đ Ë$~žœødũTŧ0r~-Ôb .:šč´ãOÆÁ ­UÃ0fîīOĮūąk1˜ŠCĢāžŸĨĶÆĶ-\ËÖymņz’ᜇę ÂÖŅ[Ĩ‘ëë> ×ˍđÖĮ,lR˜û{ŋáãΆë# ÔRuüZfDŊÉč›}Yšč ŧ” 4.^šģ ŠpŖN—úØ ÚÂÆaTNžäj‰>ÁÚŨą¸ļčDĮŦVĖ>n…}›â§ÚĘŽā(Ū.áQ§Ųu „įãyŗ#ĻđėģnOå†%ąËMũSYĶNÉdĮ>|ŧt;ūö ˜=D˙vMõî|ØŊÚ$Ž bî¸^$xmcFC—#Éį1rY-ēžÃ; ‡XōÉ\Žˆ¤Îõ#ØwøŲŊcØŋđSæūŒZ;>Ŗž“ÂĒ=Qß‚ŲlÆŦ°`1‰ŋ[ K:ĄyܛjÜ5ŽØĨ”5ė‰įîĨPū ĩÁŠb1´y5-Ép…5ŖÆō‡)Oŋė…oÚ¨š‰›Ķå‡)ŅáCæļ(Fü‰ÕĖœßnŅ?đķ¸Z8)ŦY&Ĩ¸\ĩK.hKR§4\ũ s+ŒĻ{ŗĘqČĒņL„íøˆöƒ6ĄjüãįÕÂË|ķ‡öq5Â(ˆžjeŸK“?ũČyšĀŖssĘ<öāËA{äf‡ŽËŧ›cŒ¸Â} p”7kbiäęĒAôžBõ>SĶĀ“ˆCßņÉG'šKŪÄéôl>.<ˆOVíÁOyžUŖú3áũbTÛ4˜ōšOĸt! °ĖÛĮ™č÷(íaæŪßĮˆ*ŪžJ:•lW˛įBor éęAN'Øаtōžĩ}Áęã ÷bū^˟QZęwĒ‹_@ Õ&˙_7žgh@åŒīŲÆĐœÃcM‰gŖ^4ļĀĘ­×éđnɔ>ĪéÕŋpÛĢ-Ũ*;@Ü>{īv”빁”°‰åfč1ŽÆ$d}\Ü_9[>'˛Ė/bˆĪp›Áœ?‚ŋ`Ēûpæü:ƒŠĘķ}Ņ= xnų„ÎĪãÕHņ4åüLž´›ÁMjĨ{AKķeû™×Š9ú‹Ŧœļ‘ČZSøũËNQ4 ĻO8ÍßũŠĩ—ZōAš'¸ĐüPŨŠ3`͆–aÅüè_úŠŊ‚‡¨W Û/ĶëŖ T`ëæM!%ØēS¤Xņ”:į–—ڝi¨íĪoĪ1ĸrU´Xˆ9ž–Ŋqî´îP)eŽe&ÖÄ­tEš”1˛h×_­%t'!ôô=Á{ū%1°"ús; UččV>Ë­XΚ> Ē¨™ƒxŠpē€ĩŸĀäôå4ŦO‰ÛMøíQĸ_~pŲ\”A‹gĐšˆ hLéÛģiģp51Ķv0ˇ7* Qņëėjˇ‘M!‰ÔĢĄÍ˙žeŽ$ôÄ_^˛+䋯—Ũã§ŗ(](QÚ5€ >Å=¸s6‚H}Q´y2ī;s_eĘ-­æNįÍĸééÄŗ,Ÿģsāį|ķq[ Ģ€Fõ(ohCģĨ_˛Ŋī÷´wąb¯Ôäĸ]rCS†ˇf~ȉ÷ĻķÍČ.|8­BũWÚķNŸöTOM@õøūŗMDVŸČļŨ(žōrãí͊*imŸK•OũČuû€GĮXĶf^O°NVĮenYŒ$ÆĮ‰øÛĮX5é[ŽéĤ慓§ØXËâgYąø8ömžfŪČFÉíQ¯:>a¯ĐkCÅI[—ąSßĨ›đ¤Ī¨ļüĐũ7vŨHųŌšũ0ŖĄH­Ē8›wąįR"­Ũõœß{ —U)äT”†e’˜č:úzžÜ?yˆ›”Ĩ.ųühu_°ö8Č-K4¯ŨIŒļjš rhL§J>Úú#gGTĻZúÃ7Ûjr|Ŧ)\ëđVKWŪ ú‰Ë=‡PÎ,ŅĮYší>%zvÂO ÆĢÁœŒôäĩīĶąjJ…›ķæ#vÉžŗås$Ëü"Eɔ­:<ĸ|eF|Ō›Z^* =?ËMĮ2÷ˇ÷ŠÛÉį9žJ< 9TUeøÂå,_žōķí7 ŠdŨ8¯)ė;¯@åÎÍđIë™ œĢŧJ›Ģ8ũd—”2×mųr–7‹Å5˜ÂNp䎚ęíę&'ōJWjļĢõdŖÔ9¤pĒAįFÜÛž‘s €%šŋ‚öīŲ‚ö˛N~ŦŠ›Ú‹Zu }ü ×õzŽî?A’ßkŧÖēᇎqĪ”ĀĨŨ§H,ېĘOz§Ē5} LĒšg<ũ˜ŖO˛zâÛŧZ¯rĘ0jĐ{s4 7BK?… lKę§ _Øā]Á(ĮĢu ĨĐl|đ&Š‘ëcô$ûŦpĸxy?üüüđוŖL17,÷.rūZĖ㧔Ø9“~0MĄąCƒ‘$c^Lĩą{|.ƒįœÁĢËl&5÷ĖpÂOîķJĒt¤PÚ´øļjIķv_L´j™4šh—ÜQāđKväįESōV[Ē9\á÷åčÚz(ŋÜ2Ĩėß_ėžĻ Z÷{D^cuŸK‹Y>÷Ŗlä¨=rŗN™‡Ë\KÚÅ ĀjTĢ^“­ú1˙o_†-G Ģ2Ĩ^ŲĮŌö7GīŲPŊmĩɞ‰J­ke=°‘›}.H@ē‘™“ĢŖ IDATMgi<‰äúõQЖmŒŸ2ŠŋÜx‰}į@X;Ĩ õŧ¸sđĻxBö\ī:TõČiÜ­;rËsŒ Ũq84ęL 'EōC:×DļĪ$d\؊æôXĒt{ī+?˛ö|"`!âāwüSžÎo”ÁP{T ĸKë'LbŅ/û9/ņą#ė9]>G˛Ę/–ĪgPēäü‰ÎĨ›RŨķAQšW§ii3įv_ĖĮiąâŋ"įí5žÔŠOũ\ÜdjŠŊC <˛~#ū{ųûņ˜ņČũ'ĐĮÔMNN¸eU͏Á™ĐÜn1įÎTíܧmÛŲpf UËeí wl‡˙#2­[І•ĐŽÜĪ?aí1îŋGąVU)[#„Bŗvr&ŧ!W„áZŗ.EŸô.;kú€Ö5ã4Ķ-6îÁ¤ŗ5é;j.Süŧqą3qaq†O˜ū gį˜aލB­D-Žv T¨4¨0cJy“Č÷žĨPcīäŒsJN..؛Oqúæ5î{ųSčQCl åC#÷ ,X,O>*oŽØËÔÁ˸Ræ=ÖŽŽ‡KĻĪhĻøpâ°§Œ›m†:¨Ŋp&û1&Ģ–Iû˟‹vy"wüšv¯i'ĀĀ­mci?øf-?Ë+c+ĸŒ #{J{jŗž:’“>—ēJ>õ#ĩKq܁+—ÂŅS‚G]ŗ°Ž=ÔšX'Ĩ2—OBUQ ‡SŲNOø™ÍĖž‘/‡.ĸáC ĐZKCÜ}âqĀÃ)ã>М ‘åŒÃ9Úg]ÆŠp % L<éįi…KKÁ—ûĪÖęĮĸŠĶQįˆEkWÂîû=„Føą?8mÅ”Hī°ļ/¤Éæ8ČŨ`”…¨#AėMĐRŋUYˆ‰&ĐTjCåļ¯?ÅG5j?ø@•] sqŦØųuĸSéü°úÃ*”dĪûŅWOĢÔOįĩøßˇŸb?c ‹Gũė€ŖŽ ƒ§L¤gį‡G#sē|NdųžMœp'% V?ŅâZW´écŦ´ĮÕ#b0äķŌÄķ/¯ŸöX*PQsŌj&×Ɯ *ą+œ—’Tö8HTBÆŅ sB$ X'ŋ8UíH3įÍėØpŠūƒ8čCˇ7u<)[7ŋf”ãSū8öÆ]ŠSÛ ‡Tąų‘ĮŽrë_ CĘ<ĩ+éĪ=–ˆŋØpČHY3ŅÚ#åoqÜĶį͘ÃĶī[Jlím€Dâ“Ė`ķ”Ī´Ļ;l0‚ ÷+1rųûTÉ|Š1‰',2 öiíaŒžC4ZJ:ŠŦZ†gâ, >ēņ’û/Ŧ;w=qp,„ņÜ KČP÷TšésųՏŽię ŗöîāRb5qZךYįAæYOÕxāWŗ6ĩ€:õ¨ęr—}ÍgŋvæÛ>VÅŌ&Ú{âÉøéĪsØĮlú™čˇjojUwÃ˛m7˙œ¸ĪuˇšTMYÕú6¤lŌ\öž8ÂŅÛā;¨|Zblm_ČÚÃĮAŽÎį–¯9@"Iü9¤MŲąŽ“ãjS÷qŸ¨2—ËķģĻ4¯w`ۜ•ęQ“ī*¨3ķeŧĶēšG˙LXہņ†.ųĶĻ0ĩŋ–Š~ÂÃ3ųrē|Ū˛îüņˆ›ÎŖnmâÁž›ĸ¸ vå˛š/Kr3Íæ ¨ Õĸi įÜÆĩŒ/žžéĘPĖ9˙>[¨<ĢRÛ+“;/¤KŪšŧû81]SÚF†ôyõŪāP™ÍŨˆø} ß,?HR‘ÖŧîûčgY7•{U‹'ptųˇœPV¤Q);ЖŖišö¯øŽLehRÁš@>ā[LIč-Œ¤Ybƒųõh|ž”˙ôû–‰ÄØ$@…Fķ´°oāęēŅ|´]OŊ‰_Ōģ\Ö}GåQ:ŪfNŽßGXÚgØD.ūļ›Ē 4.kgÕ2O)’+7ãē—oũH]‚×ß Äîær&,~č –øP~û%C.ÚãŲhC>mÆĐ§”‘# ~ā|’uąTyVĨV!=Į7˙CtjL,ąœŪō;3<ûlGéF~¨bązÍ)ĐR*eŗJ—ęyßãĪõ9OQęUv{đ!ĐĘžhåqæû‡:”„Sŗņ,^žqęČÂQĩąŪÉÚŋ˙ΘĄÎš>ŋĢđiņ5“~įŗÉ 9m׈ˇzd™˜(4nø6čʨ!ĩPŪ?Īŋ1ŋ´’Ķåķ?Žmeû•‰žūĘīlšĸŅĶ€Ν§:2M9zŽmĪúūCč:d}_ĢAQ›8î^=Įá=W¨5i&í‹>ÁøiŌ ũļ™Č š §ō hX۟ˇÔ"hĘXfÕ]ȰυšŋgãVŨŠ?ĻP[|*Íŋ°v{ešÕbīåKyīG\ÚˇŠ=•:ŧ‚Į† VŸ€â^ŖėãžëkmÜlŠQŋē ~: Uzāį(]ŠÔ¸áŸ_ī^T/”_×>OéV…ĻeYŧ`%'ŪĄĸ"„Ÿ>ÃĻHČū:ŗōģoY’ˆ‰ŒĀŦ0‘έÛzN%qˇUđ4G¯ —V0lō!’ŧÛĐØî~ÛüOĻ%ØĢKĶĒūŧũA‚ƍĄĪ¤HŊRœ„ŋ×0cņ5ŠöœÆ+…U °b™§-á$S[ŋĪåę¯ĶēqU| kIēõŋ}÷-ĮÍeéß= šËؔĨĮG¯ŗvĀ$ēŧÅāNĩņļÜ#äđ~îˇú˜QsŅįō­Šđj3ĪtåũŲíxõpēŧR•âŽFÂÎbËēÍœĢ˛„ƒ¯æŧ=ėž‘6´ņĨÛĐ&,ēšEûû2§™5ąŦĀ[ũĒąæ“a .:ž>D\Áŋ'<ōŠÉĪÄ>+pōkDrčЍ+cj}mŠRģ’- ~ ‡WŠW<ũ ŪĘžĐė–uĮAŽ™š` ‡ žtz¯=MĒe,ÅRŅLŗ…ī˛kí ĸTˇĒÄ'9ŋĢ 5áí@ ˙ Ãåõˇ¨íú Ņ“Î~Eŋi׊Ū2Š%Ŋ°=ÃĻŲG0—@%ׇSūœ.ŸįŦ:åúČtŠ÷h‹QˇĶĖč<›!{ōbųŨˇâšy1ŨŊ*;œ —ĸDąB?:Ÿ%ūģ—`3p{3ŸÎúëR´-–ŗn}Š´›ËĶt>^8“Ö&sYš \ĖÄŠîSYąĖSĻ­Āģcząî×?X3s-÷õ€Ę…R5:0nÆpē¤f*<š}ĘēEÅøô‹UL´ZŠToE˙îę\öš|ėGĒÂ4Ÿō?ÕYÄü›Y2y €Ö;€ĀŽĶ™Ô/GT8æ¸=ž•6TâŲt0=Šĩãëy?s­Q/JdK%ģ-`Yė8&,Åģ‹l)Rˇ'#?öäĶĄ§q}ä7Z=ûŦ.\šžVˆšU ĨKē´ø6,ŋž€ō)—9ĄĩĻ/h#Ŧ<rČÆŪ ŋ0ųô¤c7j)œĢŅå%ļnâ¯čjÖ%’Or~W¸PãÍj¨ū ĨMˇ*î•P{T¤˛Ķ~™ŗ•ų‘I rŎa_æOčŸåcEsē|Ū{‚ķG…|Ņá4ŗ&žËį‘ <ĒtbÚ´ą4Č|3”YPL_ĩßâLßž} )čú!„xĄ¸¸čuZ-ĢÄ÷ģ§S;Ÿį9‹f‰fī°fô9Ũ_ļ C÷T’îgI,ģûÖáŊȏŲԞB’ģ‹ ÂÛÛõ¯'Ŗhâ–wß(„BXËpõæmŒFW]‡ŖžëƒørÎEJ÷˙œĘ’Č˙wY’¸wá,Ą'dĘÖxĒMęˆī —Č ‘7ÔG.?îšB!DūP¨ÕD^ƄÅ7ˆ1ĘŊøŲĻ[ŅŊ2nJZŸ˛”Ķģĸɗ*Šį–ņ:›į,a¯{ Ūԃ˛nI„ūļ”ew%$a+û”ÅÆĒ‚LÜŨ2’.îĀŊÍ(fũ¯$ Į~`ÆôžŧgŲĖī–I.'Û3ŨŨʇ=ÆŗŗX>šĶįK™5g ŊŒkøyL5ėķ´ūÖ2ļ}4=Æ˙ÛĢØų?ėîæ‡ĪŋapVm™@ @éI“1sđˆ0Ļ[73_g镚´(o—ŗōōHÂÉųŒ˙6„jãžæËĘŽØöÅ6ûÕŦcēĪŽIčˇNO페TÉSØEN^#>]RkUģ>įqļšU13}åæ2/ņö:Š8šķ÷&–~˙¯iØļ -^ĒœėŖ•åYÛŦúUl”§ĪÔ~ø§u25î•Ũ3ŒPåkŸBˆg„uÉŧmQęļlC`–oHZ*ZËæ<­–øOPŖķŌŊ|PÜõAG{ŊEģ6gƊ՜īņ?*Ų=Ž€†KŦŗƒŋŲ0ũJǁĻu)ņ Ŋ~őN_蔓í隸úK~¯É' 'ĐŅGÔ§l\kÚ};›?ú,§­§2īęoĩ8ūÚEœ÷[ŦøŦJŲ¨í~FīocSč(jTՂBKÉ-)™~ÕØƒėšlÁžagjš(rV^Iēs‘peÚŋ؈ęNyV,q'f3n] /ĪÚÂÜ6^¨˛\ĘĘv}Îãl-ëbf‹îŊ|“ūĨ7_§ŽM :}ˇŠ#­s3kËŗ:ļYõ+3aę´hC#ĮGĮ ?û¤B<+”EŨždLŨši5nîüŠ÷_ĢG]ÅFtųßZÎežŒ+ū[”IŸ¨ QĨjaˆēAdúA9 ÜÚ5ŸÁíŠ¤ĶĄķ¯AĶ.cXsI%î"‡Ž@ņfø¤Ļp" Eelb°%$!gÛ3ŪbßīWĄrGšxĨĻ8Z|[ŋJãq6ŸŽÍaũMD]ÆØ^­hPåÁtœ ëĪ“ą‹gwX°ØšĸMËŧØ8;cƒĩRÁŖD˙ÄÎh'štށsÚb9)ΚcôQmΟoûSgČ_`>Ȁš:tē@ϜL|lģĻąÄs~ŨX:Ô¯€NW]&ņķåDl9†ßm"ŦH5÷B…sV§kÛĩ€ãüøxXyŽĖ̘eIƒĢˇsʞåf­)īaĮ6æ1ũ*ĨVf‰IĻ,ĘÍ~]!„ø¯PÔ.ũ˜Ą ‹¸čhĸĶ~bH°z>ŧ™û;ĮĶą˙<ΖęÁԅKY8ą5Ē-ãé6r3wd^ũ‹ÅÆÉãw H%Ф]ī6ļã#Ú÷›Ë Ī7?īk–ĖKW˙$ŽFÁdmÔ¤O”[TDrūR4œ>œÕöôˇ8u <ũJá˜îšŧOEŠ įęųp Yö¨ú›‰žzMõî|8s ËžųŠ1­´ė׋IûĸR kŽ'jôh‰ëŋ+˜ĩú7Ŗãˆ¸ô' Ļo#Ūŋ+u¸ `‰æøšŨÄ:7ĄSÕôÏ֖gMŨ×FvÔ˙|Æ€ĸ:S~ŪÁŽ?Ö3Ø_ũøvMuf>#–%Đr–ÎAŨđՌî9…Ņ))šūG‚ãŅúúđ÷ԎÔÕųáīWĀ.ųņBƒDÎęv-¨8gĶĪsrŽĖ̘Ĩ1‘”O\t—|Īg_‡âÖúęģĨ2§1ËŽëÄĪŽ4ígláĩą×¸|ۀsņRØN“¯Kđǟs†u˛Û6>Tô_ĪũKŦšڔ Dë7ąE§ķČ0Å&ģō,ąá‘:ŗf2ĸĩGJ]⸧pŗUĮū§oAáfåqMwPدF •‰ĢÂ0â™áq˜æđŦ9lĀģg;t™÷SËĒōŦŠ›MŦm”‰Uí s—3x§]lján ؕqBŖ šŊŠ)āļ9ĶUŧä›:Š7_ZÛŽVÆ%ĪãœM<Ŧ;W&æm˞¤Äš|eŧ9Āåp`—Ģ˜=ļŧtÛ°˜Œ˜Q`õ§M!„øČ÷o€UĒEĶ&θk_|}Ķ˙”Ą˜sžžČu„Ī{ĀFËĖY>œÚÎw9•gMš”°p|åvndy>•k Ęû•Å[ũ/æí ! +¯•~z[ŗ=Ô>6/'×ōįíÔ1ÜB7oåĻē­+:æ¨<‹) ŊEƒŖŗmZa‰ æ×ŖņöҚã@íJqW¸ķĪî§ZNø÷˙šĀŊ¸kĻž&îíYÃ_Ļ"´yŊEZYž5uŗž°z+ŋņįÕˇnüɖK ü•IŪ'Ĩ5ÚĀÍŊėŋõ  „?9§ĸlÍâÉãÕÖļkAÅ9›xäč\™W1Ü2'=ˇîå*…ŅyŲä0fV–gmlŗdƘy^•é6;WÅ`ŖŖVQšÉUņbÉ˙LÚĻ=Įļg}˙!t2€ž¯Õ ¨Mw¯žãđž+Ԛ4“öEelū?ÉxuCú˛ė‚ ׯpdëƒī#Đĸz“:ÉO„ą)K^gí€Itx‹ÁjãmšGČáũÜoõ1ŖĒk‰>øˇÚSÉŋúëŨ¸‚MĄū ]ß%ųšķ9Ų6”í6Œ—ŋÆä~Hė×įâ‹Ĩ7)Ūû ^ōTæ¨<Ĩ[š–Idņ‚•œx‡ŠŠ~út ›"!mƒUĮŽŽĘņũŧ‰ŧûá}ŪkYģ°cŦŗœ›/1ĒIĄŒIĻéģ‚Ža.>€×}ŗH`ėŦ,ĪĒēeßFÉļ]S–S…ąlЇ¨†ĩĮŸķlü|&į=Ûŗ´eę} *ŠļE—%Ŋ˜ŲwĻZSZŠĩ_|Įí"Ũ™ŲÔ#eTÂĘvĩ6.yįėâaM;äqĖĪ2ģ×.øRĩLQÍFĢÕĻ%åŠŖøZ­“É„Z­&!!ČČHœœœŌæßĢÕę´'á( ôz2 >Ŧ IDAT=*Uōˇ'§ŽôË °"7”Ų/"„BņbĐëõ888 T*Q(Æ´[ ...iO˛IŊ6)) ‹Å‚­­-GGGÜŨŨIHH &&†˙ŗwßqvÔUãĮ?ĶįömŠyŅ\é-! Ē(ŇPĒ@  (ŌžP䇪*å'ø&(EH|%„lģuîÜiŋ?6ķeBȆ$Käŧ_¯}ą{īĖėĖî=÷Üķ=' Câ8&“É`šĻZ ›vˇŅu]eë…. æ…B! Ã@điĀ `ÛļęZĶjĩÐZ­Ļ˛îļmSŠTÃPeŪŖ(" C ÃP-,Ã0$ŸĪ300€mÛĒnžP(ŒäĨ‹ĩԊķQ?ĪŪ>ƒŖöڞMģģéîŪ†)SOãG|f2tÃ:v3ēŧ‹EņōØā‰ooG÷WnáõčCœũ^˙ũõ\ķ‹į¨,÷{‹‘Ö|qģtīÎįĩ†ą—ü~…BŦéBÕ °m[•Ęäķy¤§uōC‡HÕëuÚÚÚÔūēŽĶÕՅã8‹EUoāē.ĨR‰0 ņ<fŗIooī_šX}p0-āŪŗöáāwōN÷ĄLŋâj~xé ėb=ĘUĮ™Ŗoüä˛Ė¸ ŲxBĢî Ĩ¯˙ūzŽũÅķԆ}>âŖO~ŋB!V?Ã0(—Ëd2ĒÕ*I’`šĻ•vĩiĩZĒ_ŧã8ÄqLŖŅPõīCŗņĩZ ĮqČįķTĢU‚  RЍŦ|Úo^ˆáú€°o˙æžsw/ۜųk~zôƸ‹Ÿųâžû˛ãY{sō§đŖīæôÍÜåiIļ<ãîYŲŗB!„X LĶ$—ËŠZöt0T6›ĨRА$‰šâšĪįU÷›VĢĨJm,ËÂķ<\×Åķ<>ņ‰OP¯×U§›l6KE U—_*•TÖ^ˆáX~f>˜Īon| ü‘L?ėŨ@cŸ;ã &ķųÅÍΰÄ˞¤ÁÜ_žÃ;nJw÷ĻL>xŋųw“wĒË*ŗ xëĄk8iīKy6˙,Ÿw/ׇĻa<|Ķöۉ-ēģéŪd;Ļ|6ŋxu€'žũYžqŸ/]ĔMģéîîf×īŊˆ˙Ą~<âC‹ËĨũãã8V‹fã8Æļí%jã-ËÂļm5ũ5“É ë:ÕjU˙Ė‹•ąÜĖ|R~‡_ÎПgƒe$ŪŽĪđånxú™G™īīČĻÎâ'ūq§ŨŧĮž˙ߜĒÍeΗqæ]ŋģ˜ÉEmß)ĻīĄéxÜÜ=§qéŠ[Qė}”›fMįĐŪ ŋŋö+Œ1"züûŸx7Æ.ßdúĩ“/bîã0ŋßâĢĶīā˛ōW9ķ­cšíú}ŖkXĨ1ČV#)ä_žĖ‘—˙Mŋv?Ūu4}ž‘‹ÎšKmCļ‹ŠĖkÛÃ8ë°učĖøŧūølŽ>÷Hŧ1÷qŲÎEļ~ßßoĖÛËŨˇÄ˛î8!„bYâ8&Žc’$!IUúRĢÕ( „aˆeYÔëuâ8&›ÍĒö”€Ēĩ:t û֛ĻI6›U bĶ7–eáû>ž/)H1|Ë æÃ×é:7č\vPl”Xwœ ˙~ūHƒų¨“oüč2ŽŲĐvbûî„îyW˙á$>sĐ8ŒĨĶz…ÛfÍa`ŌL¸ō Æ“™8Ž—Ī} wŧúNžđ*ˇ~÷nļŊ€û~t(ë.>ķ]öÜņAÆ2*§ƒĶÁøuÖ]| 1ĸš/sËuO`~î~ô=čԁļĄķíŨ9î÷C7´˜°˙ų\8ôĄwdŊˇ§pÂOŸĸ˛Ķî”Úß˙÷ûûJ4/„bĨ W5mđGÚ#>íLŖiÍfSečĶú´ö=]Ûh4–Ø'$†!Œ3†ūķŸj‚lēŋÃĩzZSNø"Ÿ[īŨĨ­Ö'vc¯ ^ūĶ+4—ąyÔķWz ļœēãTĻQÜę‹leĪįą—+„=Oķ§×5ļ9lO֑{}­õ<˓ MļŨī3ƒ<€ŪÆÄũ&ąô=qå9nŋāë|q‡-éîîĻģ{;žqOīÍyô,]•ŗ ÷B!†Ęįķjˆ“eY*ƒnš&aâēŽj/E­VK-–­×ëd2Ęå2I’āûž*ĢqGÕŅW*æÎĢŽĮąęU/Äp-7,6ÛÖĨxíÕ^ZŦGfé ĸ2¯/hBûڇŠ0šÂЗ FŅhöW Xēî!Ē-¤ ŧxúd>uú{Īã“} ‚Z5˛Ŧߕ‘˛‰ĩDÔčĨNÍڗėYdĩ§Č?‡l¸€9ĶgÆK9öŒĢ™ųŠą”܈Ũp §>ã.īßļŗ¯Bą” 0M×uU@ŪÖÖĻ>ÐzŊNŠTRŲ{M͍×ëjØÔĐ?]ô:00@GGĻiŌl6ŠT*”J%ęõēz!5ķbe,7˜×J›ąë†đƒ??ČĢÍmXēaMÔķ8÷΅Â'ŗž3ä‰ę;Tc›fŲŖ*īTÁŨ €ĩŒHÜČu’Ã`âŒÛšpRnŠguÜŅã°kŖ(Đ`QGBVúĩ€‘í$G“˛ˇä0ØĀōuŌ˙4w=˛ũ÷/į´/u.ūŨÖYÔZÖû8Kú0û !„K‹ĸß÷Éfŗ$I‚ëēÔj54MÃu]|ß§P(¨‰¯qÚžRŠāē.QŅh4Čfŗ8Žƒa¸Žģċ…žžĸ(ĸŊŊFŖĄV 1Ë/ŗą&°÷1;`ŋõSfūüŸK–ČD‹øãå—ķT´‡ĩ-ųĄĪŊöū8˙ŨW—Á›äw¯j|ęŗŧ§ŧĀ5‰)ëEŧüØÛ´m°m4ôcÖ)š]ŲuŊ„gnģŸ7—y¯k˜ļGK˛ą F×Ö|zŒĮsũkHđŪäßz†ęí’ȧ•X䋎z‘–Ô^äŪ§CļZöīwÅöB!VŒīûd2âxpBĄaj8Tēø5Í 'IĸJoŌŪņ†a¨n7™L†bą¨˛õžīĢÚųŅŖGS((‹´Z-†úžB ĮTŸŒÛ{ŗ;ˆĶžˇ/ûũũhŨíS”üų<ųëŸpĮ_›lwÚMŋéR!ēŅÃÍ'ž…ņ­ũŲ„šĖšârævíĪM_ûŪůöÆqÎūÜyÜ)rĘņģ÷v|ÂŽķÎü—yâ˙ŊƤ—ŗ˙'6äđīėÃĮĪā0í O36YÄŧ'Ĩo¯‹8c[‡q[އ{~Ë÷oÉį?‘!;f#>9VĘrFŒģ _;~ŗgžÃ÷?ķcž5e4}˙ī*Îũų[Āēj3Ŋ}+ĻlĐä†ŨÆŗ›ÅæÚ<~}ÉŲÜ=īÖvŊĪīˇcEöB!VLlGQ„Žëj+ īžįŠ…­Íf“8Ži6›d2ĩx6}>í;ßl6ioo§T*Š ~†ę9ĮqÃPŠ•ōÁ `Íq|ų{ŋáČØyŋāŌ3ŋÅé͝įĪádNųņ=Ü|ėĻd—Ž–7=‘īiqīųGsÔ´ËyŦũ fũl:“Kī÷ít:Ļ\į~z:[ŋ3‡KO:šŖžy—ūäĪÔ6ډÍÛtĀ sˇKøåõ'˛å‚;¸āÄŖ9æ¤ ų?/ÚŦ×nŸØ÷|NųŦĮĪŋut˙uËĢ´>äH|&ët-7ē>žšÛn6‘Cn¨sĐŒŠŒē™ŊG]{ _jŪÄÁ;lÎæSĻqOĮÉ\6uėŪį÷ģBû !„+Î0 5ĖÉq\×%—ËŠžķ0ØjŌ˛,ÕžŅhŧ§Ŋd.—ŖZ­â8™L†RŠÄ:ëŦCŠTRûĩZ-õAjæÅĘXą—€FÛ:ƒ›ņæŲå^dîâ¯v:ä{īŗ]DŖŌ'Ŗ^˜ŒÚá.ßá˜åßbü”i\7eÚ2ŸÕ‹ÛqÂ?Ā p–b 2ژôÍëøũ7—|øĐ}‡~Ĩ‘ŲđfÍ9€YKlõUu/Ár~ŋ+°¯Bą"ŌŽ3QŠ÷0 Éd2hšF&“QĪÕj5LĶDĶ4t]§­mp†J†hšĻģ:ŽC[[ß˙ū÷Ņ4K.š„ņãĮķŌK/Q(¨ÕjĒŨĨÃĩÆßΉk¯ņ÷ĮĪ- s@7ÅÕĶS!„bØžīĶ××§SI‰XYküÎižđCŽ=ņ>ÜOËwÛd™ b…B!F‚aĒä%­cO’˲ˆĸHM†T-= ÖÚ§ŊįĶíĮĄŅh0jÔ(ęõ:?ü0FƒbąH__ĨR‰žž:;;yã7pįũNKˆ÷ĩƃųėgŽäiŠB!ÄGP&“!I4MŖZ­R*•€Áůų|ß÷UYM:6­}O;Öärƒmļ[­ļmĶ××GŗŲÄ4MZ­– økĩš\Ž… 2jÔ(úûûGōŌÅZJŠ\„B!ĢVĢTĢU à —ËŠŨ4MÕ>Šį§øž¯ĻÅšĻ‰ŽëäķyšÍ&šĻąÁā8Ž*ĮIƒ{ß÷ I5`jÁ‚Rj#VŠÜ5bĩ˜={öHŸ‚B1lŽëbYF]×UyĻi*øNˇiĩZĒ}ĒNąX$^{í5Õ'] ĢiŲlÛļ)—Ë$IB.—#“É`Ëlā-ÄrI0/V‹éͧô)!„ÃfÛ6´ˇˇĶjĩ0MÃ0h6GgĻ=čĶēø$IÔ0¨jĩŠŽëxž§:͘ĻIĄP```€ T7œ´…e>ŸĮķŽc•qĪfŗ˜ĻɆaāēŽ*­ņ}ŸL&C†´Z-U~ęf“ÖŌ7 2™ ===4›M\×U--ŗŲ,õz}¤/_Ŧ…$˜Ģ…wŗgĪ–oBˆ˙(ißø8ŽI’Dõ•×uĮqđ}_•ßøžOčēN&“A×õ%˛ëi ßl6‰ĸH ˆŌuQŖFáû>I’¨~öų|~¯\Ŧ­$˜B!„XĖ÷}U ošĻęTI’`ļmĶl6ÉįķA€a$IĸąÆqŦ˙tkŖŅ uŦzŊNĢÕ"›ÍĒV—R3/V†ķB!„‹%IĸĻžĻm#=Ī#Š"•ĩ‚@-bÍfŗT*ŠÅ"šĻŠĮĶ.8AE‘Ēˇ, ×uÕ14MÃu]ÆČ\´XĢŊŸųčæļ)ŨŸģ’š­emPįÉŗˇ§{ëųc9YoÕā‰ooG÷WnáuYß!„Bˆ ÛļU eYÄqŦO[RĻ%8Q‘ÍféīīWũãĶ…¯ļmĢASŽë’ĪįUKJ€ršŒëēdŗY ÃPõųB ×ûķF;<ãģšû˙ŊĪןįÎ˙;@îŗS™XÔŪûŧB!ÄZ&Žcâ8^"ŸfØ}ß§Ņh¨ļ”ŽëĮ1Åb‘l6K.—Sü´ÛeYøž¯Oŗüé4ØjĩŠĻiĒtGˆáZÎXŽæ3֛Ü{÷ŋX:œ¯ũũ—O†X–Ĩ‚ū(аmĪķ¨×ë2VŦ”åķ w|†ŠŸqxëŪßō¯%^,VųÛ/ĻRܕˇ.ũOŨĖ9GîÅä­ēéîîfë)‡rūsŠŋ_NŧˆģėfËãĄ6äáæs3ŲŠ{ŽûW0äŅ€ˇ熓öہMģģéŪüŗ|ŪŧüžB!„>ÛļUëČööv‚  Ųl’$ mmm* O3øĻibY–ji†ĄšōšN…MKuŌ:ü´L ÕjŠôé;B Įō_jílđޏ'ūŽ9ķžÅf[.ÖH*ĪrĮŸj´íy[åb*ķßĀÚö0Î:l:3>¯?>›ĢĪ=oĖ}\ļs‰•OŪĮô=4›ƒģį4.=u+ŠŊrĶŦéڛá÷×~…12ũX!„Ģ@ĢÕÂqĒÕ*™L†VĢEĄP \.Ŗi™L†l6‹įy$I‚mÛôööŌÕÕĨ‚|Īķp]Ã0ČįķTĢU|ß' C†a¨^ôŽëĒĖžÃõīįh”>=•3Įņ‡9/sږ[“!ĄúĖüšŪÁ—؂,ö?Ÿ ‡îēķŽŦ÷öNøéSTvڝŌĘFķ­W¸mÖ&Íä+bŧ0™‰ãzųüŅ×pĮĢ_ā䍭•<¸B!Äģĸ(ĸÕjaÛ6ļm†!ŽãPŠTTËĘjĩJEĒtF×uēēē0 ƒFŖA6›U dĶcĻŊåûúúԐ)@M”( #vŨbíĩÜ2­°S?›cŅũsxŲ’ OĪ~„FמėŋiFmWžãö žÎwؒîînēģˇã÷TđۜG·h›õü•‡^ƒ-§îÆ8•×(nõEļ˛įķØË¤ØF!„ĢB’$¸ŽĢzĖhšĻzÉÆ`0R*•( äķyU^“ÖÄ'IĸļMËi4MŖZ­Ē Ū˛,uŦôyĪķÖđՊ˙ŧŌB+˛õÔ)îģŸģūq6[oøw<æ1úĀũØ$åŖĖ™v83^šČąg\ÍĖOĨäFüë†c8õŸđCDÛQm!UāÅĶ'ķŠĶßûü'ûÄt"•6B!„ø°Ōļ”0`×j5ēēēÔt× ČårTĢUšÍ&ŽëĒŌĶ4ÉfŗjXTš\ĻŊŊ0 ņ}_•Ũ¤Ųü´ũeŗŲT‹b…ŽZ6]Øú@v+ŪÃw=ĪqģĖæąæ8ũj7îâį“ū§šëņíŋ9§}Šsq}|E­å´XŌ4,’$^âá$đšČ7rä0˜8ãv.œ”[ę :îčqČ !„b•hĩZX–Ĩ:ÍX–…įyär9Â0¤Ųl†!š\NÕĶg2â8Vi<ĪÃļm2™Œšú ī–đ¤A}ȧŨqŌARB ĮŠõ@ĘmÉŸoį7ü77žú8ūø#Ųg#G=D>­Äĸ­č¨…ŽIíEî}Ē™e-C×č,­ų¯S‰ o,xúoôŲĖ5‰)ëEüėąˇi›ē']X$„Bąrt]WfÂ0$“ɨ’ÛļUûÉ8Ž ÃP-dĩ,k‰N7€•fúĶ•iNÚ_~h?z!†kCã,[°•?sûŗëîŗ7žËŖˇoŔ š<ōŖÛxļ/ č‘;gœÍŨË?æĻûîDîĨëųáŊķč­ô0īWp֍˙ģäföÆqÎūdī?…CNšŠ;x„G˙tsnŊŠŗũ6wŊ)oI !„bÕpGÕÁkšÆĀĀqSĢÕčééĄX,Ē…ąiš @ŗŲD×u°mMĶhĩZ$I‚Žë˜ĻŠĘv`°œ§VĢáyŪ™{!†k…ķܙMöcĪQØ÷K°ÄĀa{#ŽēöžÔŧ‰ƒw؜ͧL㞎“šlęØåQŖm—\sÂÆj,ŗ5<2— –ų¤FfØ5įf-ņøW™Ģ>Ξũū:äkĀčdō)7ķĐ)KmŸŊŪ{šŖv8†Ëw8f…OW!„beØļM„aˆëē4›Mâ8FĶ4ŠÅ"žį‘ÉdčëëÃ˛Ŧ%jßŖ(ĸT*ƒm']×%Žct]WŨnĸ(R gĶůq3jÔ¨83!ŪK^ !„B,æ8abÛļšęjĻiĸë:õz$Iˆã˜bą 2ęēŽĢQ–eŠv”ēŽS­VUé @š\Æķ!„bØŌ@>Õ*Ōq4MŖ^¯c†ōdŲl–FŖĄ@eÛĶî6é ¨zŊŽĻiX–EĄPPå8…BAÕâ 1\Ė‹Õbúôé#} B!İEQ„ã8čēžÄ0§´ũ¤įyttt¨~ōqĢÅŽé"Y˲TųMET*UV“fãËå2Fƒfŗ‰ã8Ë;5!–I‚yąĘ͜9s¤OAŦaS§N]eĮ’wu>žVå=$ć‘ãKOM;Î8ŽC˜ĻŠzĪGQDEtttĐjĩT>“ɨQqĢAT–eŠ6–š\ß÷q]W-ˆb8$˜̜då?~æÍ›ˇJ'÷ĐĮĪĒž‡„XYŲl–8ށÁE¯i^ĢÕČfŗčēNEd2Œ§‹[mÛfá…är9t]GĶ4t]Įļm5<*]PEšĻáyÍfSŊ8b¸$˜Ģ…üaūx˜={öj ŧåúxX÷+# 䍙LFu¨ Ãp‰Ā\×uĩÖ4M‚ `á…d2Z­–Zkš&šĻaēŽãû>ų|ž(ŠT`ßÖÖFŋ”Ųˆ•"ÁŧB!ÄbĻiŌh4čččP“]ĶáNiIĻiØļMŊ^'ŽcLͤ­­ ß÷q‡fŗI6›USaËå˛Ē­w‡žž>ÚÛÛq‡jĩĒÎ.Z´h„¯^Ŧdh”B!Ämmm$I‚aÄqŦÚF6›M`0āĸĶ4U–}``€fŗŠZYĻ_WĢU˛Ų,ų|ß÷Uđ_ŠTĐu8Žąm›L&C6›á+k# æ…B!ĢÕjjÂkú9€mÛjáĒĻiÄqŦļĩm]׊VĢĀāBÚtōkŖŅ CÕ%ĮqœÅí-›ėōŊŧüō\^zéeūũī˙ŠËk1)ŗB!„XŦŖŖCu—ŠÕjŒ5Š… ŌŲŲ‰įyDQD4›M2™ aĸižīcÛ6ų|žfŗIĄP ŲlĒmĶ,ēĐup;r3†ÄåÚĶ\^I::Fú' Ö6’™B!„XŦÕjEõz]äļmE‘ ÜĮĄ­­8Ž ‚@-†MģfŗYŪ~ûmĮ!“ÉĐÕÕĨÍA Ôf2.9[ßāšG?Átôå‹ĩķB!„‹5›MÂ0Ä÷}ĸ("ŽcōųYéËk! æ…B!ė2“!IĮÁ4Mõ™L†BĄ@Ŋ^' CJĨĻiĒė|ڗĀ0 UšĶl6ą,‹ūū~2™ žīSĢÕIˆi=F•đ1r×!„B,–fßĶ€=5´å‚ Ô°¨$IhĩZ*āã˜(ŠT÷š(ŠTéM?ŲlÛļÉfŗd2.I Sí,ãb¸dh”B!ÄbēŽ“ÍfŠT*tuuĄižįŠųFŖA{{;†a¨’Ķ4ÕžšĻaY™L†|>OĨRQ}&“Á4MjĩēŽcš&–8;īíSčoŒėŋĩ’dæ…B!KÛOfŗYâ8V¸eYÄqŒëēÔëu|ß§^¯ãyļmĮ1š\Ķ4q‡$I¨VĢdŗYZ­Øļ­‚úTœZ“#Ī˙7W^špä.\Ŧĩ$3/„BąX:Åĩ\.cÛ6…BĶ4I’MĶčėė$ÕŨώˇ—RŠ„īû˜ĻIŖŅP h+• *đ/‹hš†mÛøžĪük'ōéĢ"՟~¯ŊFø Ö:’™B!„X,“ÉEmmmhš†ã8†Ą˛ė†aP¯×Õã­V‹|>OĢÕR‹aã8ëė=ĪŖ\.ãû>ų|ž\.§&ÅvuuŠžķŲ5UÎ IDATl×uGøęÅÚH‚y!„BˆÅԌz:8 PYxĪķ0MS•âčēŽmÛT*4M#ŽcĩčU×uÂ0dÔ¨QĀādŲ´ģëētvv’ĪįUßútŌŦÃ%e6B!„‹ŊũöÛtttPŠTČårT*ÚÛÛq‡ 0 ×u‰ĸH „ęėėÄ0Œ%2ų–e1zôhõB Ü}ßĮ˛,jĩš âķų<ĨR ĪķFúōÅZH‚y!„BˆÅ …0Ø#~``€RŠDĮÔj5ōų<===ǧŧaj’kZ†“.„M’„ ÔĸW×uÕô×öövt]§^¯cš&årY-´b¸$˜ĢÅėŲŗGúÄZNî!!ÄHHī\.GĮ4›MLĶTú¨QŖ¨×븎ĢúĖĮqŦZZzžGĨRQu÷}}}†aäķy˛ŲŦš›n—§j6›#}ųb-$ÁŧX-ĻOŸ>Ō§ Örr !FB.—ŖŋŋŸ8ŽU;ÉFŖAEǟ|6›U¤Ō–•I’ĐÛۋmÛĒãMĮ´ˇˇSĢÕ0 ƒL&ƒĻiĒū>›ÍŌßߏaA `ÅJ‘`^Ŧr3gÎéSkØÔŠSWéņäúøYÕ÷+K×utˇZ-\×ĨŅhÍfUŋų TĻ>Žc|ßGĶ4\×%ŸĪĶh4ˆã˜|>OŗŲ¤ŖŖÃ0ˆã˜FŖĄžOÚ§VĢđU‹ĩ™ķb•“ŒęĮĪŧyķVéņäúøYÕ÷++]°jI’¨€>Š"ĐgŗYĸ(ĸT*Ņ×ׇŽëär9ĸ(RŨjĮQ d[­–ĒŸīëëÃļm<Ī#“Ɇ!Žã¨ėŊÃ%ÁŧX-äķĮÃėŲŗW[ā-÷ĐĮÃęŧ‡„X­V Ķ4iĩZX– ībąHš\&—ËŅÛÛKąX¤Ņh¨ōxwđ –ähšF__ŸDĮ1Åbß÷ ÃPĩēLŗöB ‡ô™B!„X,,ËBĶ4˛Ų,žīcĩZ0 UfŪķ<ĮĄˇˇ—l6ËĀĀqŖišęOīyõzžž>:::p]ÛļU|ēpV×u‚ P/„ÉĖ !„B,–$ –eaš&žįĮąZČE–eQ¯×‰ãXeā†ę¯ë:–eaēŽĢRé`)@ũ7“É`Û6ŽëR.—GėēÅÚë2ķMžŋxgēģģ‡|lËîG\ĀėĢ Î)Ģņ§c7ŖûĀģX´Ú—5xâÛÛŅũ•[x=ú(s-ü››÷߄î=Žā…%æWD,úŨņlÛŊ=§?ÜĖŠī+|Ûیî)—đL=Yōšč-îúƖtīrOՒeī/„#$­_¯V̆A.—CĶ4ĒÕ*AP.—ŅuMĶ(•JĒž T*‘Édp‡ūūū%úΧm,mÛÆ˛,&L˜@ŠT²,ĸ(RŨn„Ž+ŗŅ7ã„+Žãēk¯æ˛sžĘč—~Áų‡ÎŊīŦéčW#3nC6žĐ†ĩ†ŋķĮŠĩ>‡Î<Ž ^ģ‘ķnũ­ÅĮpŲ…$™23wn—-ņūĖuŲ˙ÂSŲtÁĪ8÷ƗyˇsrD΃ŗ¸ôą,û˜ÆvyyKYņŅžįŠ>ōžīĢÅĢõzÃ0đ<]×yũõ×1MĮqčééĄZ­ĸë:ĩZ$IÔDØt]×1M]×yë­ˇ Z­R,%˜+mÅâ1{Ûíļ;ģ~Oö9ō–—Žē€ģŪ!Šņ×ĢĻķÛÚDÎ<ī Œ–ŸŋøöF‡sņqëķęõįrÛĢIå/üāÂûI>wgLn“„Bˆœ8ŽÉfŗ´Z-,ËÂ÷}lÛVƒ¤|ßWŨlŌ2MĶ?~<0XĻ“>–Öͧ/‚  §§Įqp]—l6K>Ÿ' CĒÕĒZ@+ÄpŦÄßRÜÆÛ3č{­wŧq˙,ŽØu ēģģ™´Ī™Ėū§ĮāmŗčˇG˛ų&ņ‹ˇ– ˙›/Ėb—îí9û‰:SyîVÎ<`'ļX\ÖŗõN{sâMķđe—Ä,xø:ĻíˇxŸMļcĘÁgķ‹W[@D˙S7sΑ{1yĢÅĮ›r(įß9—ĨßųKŅōlsōEėSxšīÍü=¯=wįū|!›œr!û¯#K-ĊȰé1—pĘųáŋâͰÎߎÎ]ĩíųÎy{0J^ !>‚:;;‰ĸHu—ÉįķØļMĨRQí&ëõēę+_¯×)—ËÔj5UOßŅŅAĮ Ęå2…BA-œ¨×ëĒÜfhŸ>/ÄpŦTTöū/Ŋ@Ž3ú{üōõœz͖xō|ÍøŋēüjÎ?iļš{Ÿ´uē>{$ģ¸ĮsÛīß‪',ūÆ ^¸ũˇŧ=æ+ēeęOōŨo^˃Ãų?Ū‰õėoũķ¯;ĸįÁī°˙‰wcėōMĻ_;‰1ņ"æ>ūķûC@Ŗ2˙ ŦmãŦÃÖĄ3ãķúãŗšúÜ#ņÆÜĮe;—7ųߟŪ6™3Îߍŋu‡<Ņ;á›ÜuÄFØ#}bb­Ąåˇáä‹÷ãŪŖŋËôĢ_ä­[˛ÅŲ7ŗīx‰ä…MÕj•|>¯šA@†jŅĒã8Ē•dŗŲ¤ŗŗ“VĢE?ĻiR*•ToúZ­F&“Á˛,Â0Ä÷}ēēē(—ËX–EŗŲT­0sšē.īWŠá[ą`> i64ˆhŧõ?;˙'ŧÁœüŲq˜iEu8–ãūûJų„ėÁöm/ąËũ‡ß<OŽoĸĩmĪ×žĐÆ×f˙šq ېTžáļûúXøTÂų/ōÜ@{ŸvnŊ¸nl§ĪķÕ÷;¯Öŋ¸õģw3°íÜ÷ŖCYwņÕė˛įūj“ ûŸĪ…C÷ŲyGÖ{{ 'üô)*;íNIĸųå0ĩûˇųú„?rŨkmė{Íąl&å|bXtJ;œÆŒ=`Ú ŗaŖ“øÍ!ë˚!ÄGVšE¯Õj”J%ōų<žīãû>īŧķ…B Ôp¨jĩJĮ8ŽCŊ^'Š"LĶÄ÷}Lͤ^¯Ķl6q]—VĢE&“Á0 ŪyįōųŧęœE‹-éËkĄ{ č?ˉ;mÃ6ÛNdō—į†Įķ•‹¯å˜‡äh7ú";ŠBvė„-Ëo ‹ËąÕĄû0öĩ_qĮÜ&Đ˙—ŸņĮę'™ēīØ€Ųš)›—z¸ķü\˙ÛG™ģ¨šÜŽ)QĪĶüéumۓ÷Ģüˆ+Īqû_į‹;lš¸Īv|ãž Ū›ķč —ŊH%Ô_˜Í¯^āŲŋ˞Qˆdtąëq2˜xŌátģ#}BBņūĘå2F]׉㘠Đh4T'šZ­FĒõ$ žK?‚€ Čd2ĒžËhŌ––ĨRIí×l6ŠÕjęB ĮŠķÆ6œņߡrë­ˇ1û×đÄßūĀnČ“Ũ<îĐ,ˇnb‰ÆŨOÄAëŋÍ=ˇ?O#ZÄ˙û?ŌÚę0öJ#ņÜ$Îûé%Ôų,7œq{ī´“ö>[ū^YfPÕz¨‘etWfŲå2ŅæL;œĐųÜiWsÛ]ŋáž{Å÷î€Ā'”ēųåkžĖįŨĘۛœČåߘĀk7NįļWZŧŸKŅ, Ķ1Ĩ´Mņ‘æyžĒ•7M“öövÂ0$Žc à ›Í’Ëåˆã˜$I0 ƒ(ЍT*A@ĢÕBĶ45@Ęķ<2™ ũũũ´Z-|ßĮq<ĪŖŋŋß÷iĩZj‘­Ãĩbe6V'Ÿšøi>ûßÍZŸ}یk¯ēĮŸČ­OilųîC:Ķčä79€ķr̓~^yōÜ2k&——aķ?^ĖvK•xųQh°¨Į#!ûž !éšģŲūû—sڗ:?_gQKōË,āoŸÎ ¯LāØģŽåË>Ã3÷ÁUūšŊ~rRō,„â?‘eYA€īûhšF†ttt000°ÄVė|†!–eŠ:zMĶ0 C-–5MĶ41 C}Ũjĩh4d2’$Áq àZ­ŽäĨ‹ĩÔ^ia0nΝ1Ņ€ī^øc^p?Ë×vî\æIhV;M>„3N™„Ū7—˙­ž77otMd×õžší~Ū\FÉLų´‹|ŅQ~R{‘{ŸjŦŌĢúOŊõ[f\ų<_Ė77Ë &2íÂŊpŸøŗėYÃ-I…Bˆ5#-¯ÁÅŽŽãĐjĩTW› 0M˲TɌmÛKüWĶ4t]Į÷}°GQ¤ĘhŌ…ŗi?{M͈ĸˆ\îÃfMÅĮŅ_6mŒÚ•¯īdņÚßz(íņ5>Ũön>Ũéžūĩŗ¸úįwķĮGŸäŅû~ĘĨ?x’xũŲĸm§joČáßŲ‡ögfpČ ?ā—>Ÿ˜ÃMŸÎåĪ4ĐÛˇbĘMųŅm<Ûôŋȝ3Îæî5xÁkŖ¸‡˙ûŨYüÅŲ‹§L¤ čtėr&įėr˙EWōDEj”„BügŠã]×ŅuÛļÉårǤ& îĶN4I’ĐÛÛĢĘlÅb˲¨Õjxž§>OČ `ÛļꔓNœb¸Ö|$­Äv_ŨƒQ|ųĐ­ČyĘėܜ- ¯ōÛĢÎåøŖŽā¨oũ˜į×;–ën:ŽO.sMˆAįn—đËëOdËwpÁ‰GsĖIō^´Y¯Ũ{#ŽēöžÔŧ‰ƒw؜ͧL㞎“šlęØ5tąkŖ„ĘãWrá};{ģv šEŒq|ųüoąe˙œÃķx#w’B!ÄjŲl]× ÃÛļ‰ĸˆ xįwčëëSYú8Ž P(P(TŊŧĻiĒLĮ˛,lÛĻX,ŌŅŅĄ&Ā:ŽƒmÛhšFäķy%VĘÔĖģlq۟™{ŪōļÉŗË˙ŧČÜĨ<áhî™{ô{7OĒ<˙ģį‰Ö=ŒŠ›.YoŒžÂˇ¯›Âˇß÷{eŲū]ę{YŒŸ2ëĻL[æ™ `֜˜ĩÄŖ_rŒeķãLŖ¸ã%<:÷’e>kMø:ŋüĮ××ė)‰ĩžũÉSypîŠ#}Bņt]GĶ4ŠÅ"===čēNŊ^Į˛,JĨFĪķT>I’$! ë}Ķ6•žį‘Ëå0 ƒVĢEôõõ1vėXšÍĻĘđ—ËeĮÁ4MņYôĪŋņدŽ`æīlsôl$˜„Bņ’$ ]]]ŧūúëĒ‹M:ļ^¯“$‰ĘĀÛļM>ŸG×uLs0?jY†a¨éŽårß÷I’„qãÆQ.—‰ĸˆŪŪ^t]'›ÍR,yûíˇGøĘÅÚjĨ&ĀŽ”`>ŋ8q*מf3á 0kŋuĘ0!„B|”X–Å… ą, ˲TОįŲlĮqđ}Ã0TëÉtĄkÚáFĶ4Z­ÖC¨4MSå5ļmŖë:™L† 3fŒÔĖ‹•˛æ‚y{cNž.'¯ąo(„B1<éB×t°SŗŲTA}ôôôđ /°ũöÛãû>ŲlÛļi4ÄqŒįyj ÔĀšĻáē.Žã ëē(Ĩë:ĩZ Ķ4ŠT*är9•Ũb8ÖüX!„Bˆ¨tŅj>Ÿ§ˇˇ—Z­FĮÄqŒëēttt°ÕV[`Û6­Öā0ÅtņĒëēxž‡Žë‹E5TĘq*• –eŠ6•mmm*;Ÿ–î1\ōPŦŗgĪéSk9š‡„#Á˛,LĶ$ àŊŊršŦ:Īxž‡Ļi”Ëe˛ŲŦ2åēŽZĖĒë: .Ä0 ōųŸĮķ<Õ˛ŌqjzŦīûĒ'í+īû>ĻiĒŦũøņãéėė ÕjQ,GėēÅÚK‚yąĘIFõãgŪŧyĢôxr}üŦę{Hˆ••Öž7 ōųÁŅ–™LF•Æ‹E5LJ×uFM__ŸĘІĄÚYĻũãMĶÄu]ĩ ļ­­0 Y¸pĄPÕl6ąméŲ-†O‚yąZČæ‡Ųŗg¯ļĀ[‡Õy ą2˛Ų,QĐÛÛKŠTRí)Ķ,}ÚĸRĶ4Ū|ķM’$Ąŗŗ“fŗ‰ĻiÔëuLĶ\ĸ^žŅh¨AQiĮœ´MeŗŲÄ0 &Ož<ÂW/ÖF˛ŌB!„bą(Šh6›čēN’$A€išDQDŊ^GĶ4LĶTS_mÛ&›ÍĒ6•žīãē.qĶl6ņ<ršŦPĨŊäÃ0TũéĮ! Cž}öŲžzą6’`^!„bąfŗI6›ĨRŠĐÖÖÆ¤I“đąčwĮŗm÷öœūp?ņHŸøč _įöÃ6Ŗ{Ę%‡Î<Ž ^ģ‘ķnũ­ÅĮpŲ…$™23wn—›Gŧ?s]öŋđT6]đ3ÎŊņešę‰ˆžgqécYö™9íō2 EņŅ’vŽI’ÛļU?xM͍ÕjhšFŗŲ¤^¯ĢŞšĻ‘$ žīŖë:ēŽãû>˙øĮ?T'œ$IĐ4RŠ„axžGE,Z´Ķ4i6›Ë;5!–Iâ1ąLî&GsņácyéĒ ¸ë’Ŋj:ŋ­MäĖķžĀhc¤ĪP|ÔŲÎÅĮ­ĪĢןËm¯$•ŋđƒ ī'ųÜœ1šMūB|ä†A­VS]iÖYg<ĪŖŅh¨Qi‹Jß÷UM}ē0Öu]z{{ ÃĮqˆĸHíE‘ĒŗÃPõ˛w]—(Š0MéK"†o˜KküéØÍč>āį<9įĻNŪ”îî-˜rĖu<9áŊ2‡ķ§Nfŗîn6Ûå\ũD?‘Ú7ĸ˙Š›9įČŊ˜ŧU7ŨŨŨl=åPÎŋs.Kŧ õņäOā ÛvĶŨŊ5Ÿ?ö*|h&ģtīÎįĩ†lđÖC×pŌŪ;°iw7Ũ›–ƒĪģƒ——~K_Ŧ-Ī6'_Ä>…§ųŪĖßķÚs7pîΞÉ)˛˙:ōX6=æŽķ"?ŧāWŧÖųÛĩĶšĢļ=ß9oFÉ B!ÄGPEär9|ßĮ˛,.\HĒ$Æ˛,:::ČįķTĢU,ËÂķ<˛ŲŦĘŧ§å2žīĢE¯I’Éd‚@}¤/’$QŲ~!†kåĸ˛—¯įô›'qؙWq”÷8˙}ņ՜pÚÛŋņ$ŲÎâ‡ß¨ōč/áēißeԃße‡‚ÄTæŋĩíaœuØ:tf|^|6WŸ{$ۘû¸lį!ķ~"ßøá<ļ=æRΞÜE˙ã?ãâī<Į۔†œ@LßCĶ9đ¸9¸{NãŌSˇĸØû(7͚ΡŊ~íW#Â‡ĻˇMæŒķwãÁoÅ!OEôNø&wąŌWŦ(-ŋ '_ŧ÷ũ]Ļ_ũ"oŨ˛-Ξ™}ĮË˙ BˆĻbąˆŽë¸ŽĢJe,Ë"Š"ĸ(ĸX,âyžĒO{ĪÃāâŲL&C__Žëĸišú: C,ËĸŊŊūū~â8Æ˛,JĨ•J…\.§Zb 1+ĖĮŸāÄ.cęx؅õßū_ųņíTg=ČÕûÅ>ģî<ŧßîž×d‡í2€Å„ũĪįÂĄĮŲyGÖ{{ 'üô)*;íNÉ˙ˇÜđ Ų/˙מūYJ°ÃļŒë؃#ī˛_ën›5‡I3yāʃŒ &3q\/Ÿ?úîxõ œŧąĩr?1„Á¨ŨŋÍ×'ü‘ë^kcßkŽeŗĖHŸ“Xģč”v8{<Ā´fÃF'ņ›CÖGūīB|TyžG&“Qå/šĻE}}}tttĐßßO[[–eŅßߝ濪(RSc‹Å"F×uY´hŖGV%7}}}DQDĄP ÕjQ­Vąm›u×]—^xa„¯^ŦVŽduÃ/°ŖJ}یŨt°1_üĖ(ÔŖã6c,eŪÔnqå9nŋāë|q‡-éîîĻģ{;žqOīÍyô„õü§Ųlû•my­Ā_šDvȡzūĘC¯Á–SwcœJđiˇú"[Ųķyėå Rlŗ*$Ô_˜Í¯^āŲŋĖG–æˆa3ēØõ¸L<épēŨ‘>!!„xéÖ´f ŸĪ“ÉdT—šZ­FĩZĨP(ÉdĐu]ĩ­ėëëŖŅhāûžĘä×ëuŪyįt}0ôęīī§ÕjŠÁQoŊõš\nd.ZŦÕV.3īæq‡4ĄĐL ‡ŧûîkͰ0ˆ‰ÂÅD ˜3ípfŧ4‘cΏš™ŸKɍø× Įpę3>aQŊ9: Kž–QE~Č×Qm!UāÅĶ'ķŠĶß{zŸėk͉ŧ‘˙!5_æÆķnåíMNäōĪÜÃ7Nįļ¯Îæ˜ ĨĐF f9h˜Ž‰ô¯B|”ÕëuÕ}FĶ4|ßOיôq×uņ<\.§MĨ? ģVĢU:::đ}_ečmÛĻX,E†a,ŅGˆáXc+“ū§šëņíŋ9§}Šsņô:‹Zīæz\YęôVÃ%öĒ‹¨ ųÚČu’Ã`âŒÛšpŌŌ¯buÜŅã$˙Đū÷öéÜđĘŽŊëXž<á3Ŧč­ß2ãĘįé<øbžšYŊ0‘iî…ûÄ÷˜õ`˛DG!ÄĸFŖA –›ĻIELJ|ڙÆ0 zzzČfŗ4›MÂ0Ä÷}úúúTß0 õĸ Ņh iaĒŌ˲°m[-´mĩZĒū^ˆáXcÁŧŪžS6hōȏnãŲž€ ˙Eîœq6w ŲČŨ”¯ũ×64îūĶ~ø[yęQîžæÛœũ€hhéĢ{cŽ8g˛÷ŸÂ!§\Å<ÂŖē9ˇ^ÅŲĮ~›ģŪ”PķC‰{øŋߝÅ_œŊ˜qĘD €NĮ.grÎN!÷_t%OTä!„˙yâ8Æ4MI’¨~ņ…BAúžī“$‰ĘÄÛļMĒ”Æļm-Z¤Ju•Ũw‡JĨ‚įyęC×u ÃPÛ 1knf‹ŊG]{ _jŪÄÁ;lÎæSĻqOĮÉ\6uėL&ú#n>u" n9ƒŖ?žüucNŋhO:ĩ mnZÛĄĶ1å"~õĶĶŲú9\zŌŅõÍ͏ô'ĻļŅNlŪ&ŖhV^Båņ+šđž€Î=‹];†ü,q|ųüoąe˙œÃķx#w’B!Äj‘–Ō‹E,ËRí'{zz(  ’$ĄÕj øĶ…ކaš\Žl6KŊ^'“ÉPĢÕđ<0 I’]×iĩZäķy‚  RŠ†áŸ Kų€z—-Îû3sĪKŋÎŗË˙ŧČÜĨļ*ėv //ũ`iOn›;ôAĖ†0kÎĖZbï.y<Ŗƒí˙1÷Ÿ>đĘõûĐ[܂Mē†j›ŒÚá.ßá˜å_‚&âŽ—đčÜK–ųŦ5áëüō__ŗ§$Özö'OåÁš§Žôi!ÄĘårÔëušÍ&ĨR‰\.§jā=ĪCĶ4˛Ų,A†!†a`Û6ĻiĒŪķ†a¨Ī‹ÅĸĒ‹OËwt]',Ëĸŗŗ“fŗIŖŅPn„Ž\qy0˙ˇ\;§B÷ļŨŒËˇxã/ŗšōĒWX˙¸+ØRzœ !„b5 ЎŽÂ0T^Ķė{ĮjÚk:ô)-ĮI¯†aHĄP \.†a`š&ĩÚ˙gīŧãŖĒ˛ū>“^ E`ŪB¤ØÅN]Š‚˛ ˆ  `ADVė-ŠŊWĘ ĸŽËĘRwE¤HúdzûũAÎãL$¸ß·&™wßŊįœ{îšįž÷Ļ ›Í†Ũn§  @+Í)--Đž VĄ¨*u.˜7˜Í”Ŧ}šéKūĀSF+Œ]Ęô1mPĪx+ …BĄ8–HFŊ  €úõë´áp‡ÃĄŊåÆī÷ãp8´‡`“““ĩ‡_‘HŋߏÅb!))‰P(Dii)VĢ•ÄÄD @ŖŅˆŅhÔ^iŠPT…:Ė›dÆË™QÛQ( …BqÂáp8đx<¤¤¤PRRB4%)) ŸĪ‡Íf# ‡1›ÍZšŒŨn×zŖŅˆÁ`Đjíå[dũ~?Á`‡ÃĄŊWŪbąh%9vģ—ËUÛÃWÄ!Ē8KĄP( …ĸœpxßņĘĘĘ08íKžl6›ö…R>Ÿ‹ÅĸŊzŌëõbˇÛq8ÚÛnŒF#‘H„P(¤=LkąX´ß ąZ­„Ãa6lXËŖWÄ#u.3¯8>ČËËĢí.(âeC …ĸ6ø÷úk—1 IDATõĩz˙ŽŗfÕęũņ‡ æĮ„iĶĻÕvqޞ!…BQ´kß^+qģŨdffâvģĩ’€„„ü~ŋ–ą…B„Ãa­æŨh4‡ ‡ÃƒA´6ũ~?õęÕÃī÷kŸs8¤ĨĨ 7ˇ6‡¯ˆCT0¯8ęĖRY…ŽáÇÕö” xmR(Ē‹Ô°ËÛe<eee$%%a0°Ųl”””āp8´zyyØÕd2i%4‘HĢÕĒ}!”ÔĖ'%%ąk×.’’’hذ!.—Ģ—L)UE튪ŽĘ¨žxlŲ˛å¨ļ§lčÄãhېBQ]ä›X= dffâõzIKKÃårŅ AĘĘĘ0™L„ÃaĸŅ(áp¯×Ģ=,+īž—eåu–>ŸÄÄDL&ÅÅÅÚ[nŌĶĶ)((¨åŅ+âĖ+Ž ja>1ČËË;fˇ˛ĄƒciC Euđx”[§įÜ&ļ}ŸŠJ{Õ[x÷;ÜpîŦņ5cü0ļ…úÁø ēv|.âģ§Ļ3į՟đ5>“īŊ‹K›;0ÔvŋĮ-uŊėĢŽ÷OQķĖ™7œĘõŗGĶÚĻģ0Ŗéqų•SQŧ›ßæĩÕ{hŅĨ/šeŸ°Žļ줍2á??âŽ+§ąĸņåüũŅž¤üú=:†ĢC¯ōÎäÎ$TÚB+FĪš‘S5›6“Ņ!c˙ˇ¨ŗč?ųQ2‹BēkŧüįĶXö[7Îme—ž˙é\9í ŌΟĀüģOÅžw-/>øã¯ôōō‡ĶéšX•öĒ1ļH1_=4īĖq9!OhŽÜŽw"ä6…ÛßoĖ´EO“ūũCLˇ„SßēÖjŗŖ8Ę >ŧN—°Ôõū)jØ‚y[#zžw!}ck4öáĮŽŊNfē ¤Ÿ˙ë1DöōÆđOXŦí>)ĒF€m¯<ÂgžnÜ÷ät†60§qŠû=ģ€/F?ÃEY•ļ–ô8÷Bú&âīÍzŸG3ũīĘžaåŊQNNnĒäŨü”ˇwũĢxîū›hočK÷Œ­ôŊåŪûe];9ĒĐ^ÕĮæY˙$3ŋhĘØņÍX07?*ęGÁŽ{üüūÕVšüí^În[cķé÷â<6Gh]īD—BĄPėã(xÃ2V]ßįāgøô™‰ :­ ­Û\Āŋø(Z÷4SŽHīŽNœN'Œdúō͸Ŗ\;äež{ë†÷nƒĶŲžŖįģâ0Ūmo1}xoÚ:´íw ׎pī ;W<Æ-÷ĸĶ‰ŗ]_.ŋû56íŋÁÁ1ÕíaįƄîNrĮBž<ŧ“×¯éˆŗß ž-­DžĮšĐ.Ö|ļ: ĨŽė´¸ā|†~äũŸËbj& â퇉u4Ĩ?åąĸ4™ūÃģ’ĸPtßõö4ÚæÕ€5%+FĖÆC[ÚAÛĢęØÛxqFæĢĻ3¸‰*­‰+Ž’ßXÉi›Åö7Ūæ_ųĨl_Ŋœo"Nš'Ģ@^ĄP(„Ø{dXųÃĢŊéÖ €ŗ¯{Œ×~=q-UϞzÉč?•.ũšwŗzņæėĩd]õr“k˙T#äĻĐ é‰č+š ÖdRí°ŖĀM8¸ö X2;sé5įŌŊĶIdōų×Oņä‚kØėĘãíIH8ČŖ%ëČ[ã!}ā0:V(Í1’qÆ^žwŖîɀŲåŋm9Š%ĪŨˆĶö×ļÛ^Æ)\Éŧ˙C×ģ¤GŠO%bSÔ1ŽČŽO l'q؜ˇšlNmwDĄP(ę&ąķĻNÜžčÖōz`Ā`%ģíĮæũéœQąH>Rēžŧ‡æųOä×B˙ū?œŧ…üĐY¤Ę*uĘyœĻ3[ŠßϐĖų=ŗĩEÎÚ -õy–?Šƒ€ƒpūŦø :Œ;ƒēō†”ŽįĶŅú._o*喖™ĩxÆ+ÆtN˙û<¯šŽÉW~MūÆ+ˇv%9îj ĩĪdčŗ˙7ũĪ>“ļÎcės Y5zįg8Č(Ek_á+o&—iĀC‰ ×<ĀÍ÷Ž!{čTî9ŋŽ‚Č{h!7_ŸÂĢ/ŽŖũ_v‡k/Fĸeü¸h_6ē™wÎĢG|W Ĩž4’Ėj3[—9ÚvŦP(Š’ŖúĨQúĀ!Zô=o|ĸĮCķšãɐģŲđ•{™3IÄDˇ¯poîģ #öz ÔBxDDq˙ô8S—S˙¤D~Y4‹w.ep]xŋĩíĀ›ūGY¤ŗļ‰ ėú7;ąátfVš4!ÁĀÁĸßHÁ×ŧē6HũQƒpXĢØÅĪģ Ū­H͉ÆŪ¤3MMaļoÍ'DÖXۋqlž?7˛#ô'›G÷ãĩšXzyo–v~¯_šˆLÍ×]ށ+ …âÄã˜Ŋ öˆZHJąiņQ´lŦ;:•ŊĻė\4 ŗéëŨ¤5oA‹úÍiœĸžÜöHˆ–ũĀ‚;žaoĪ{xáåĮš˙0• s*Î>Ŋiyĸŋö,ębŨ#“xžā4î{qM3ÜņāHVšÅä×{ņô协áĄ•SFNāŦį'pīĶņŨؗ”˙ŊÍÃËvŌ䚇9S{7w„?ßAß)EÜüŪûÜÚĘ ūM,1‘Ÿz&=É0đī^ o—Vcoãôô"āđVæũ@¤ÉÍ\Ōâ OŗÚ ֒ŨÃuwrÃy-ąį˙Āk>ÃÎÄ3™Ô?ģb0_Y{1ŽÍ”Ō‚ŽŊZT¸ŌåËĀ€Ÿ“:÷ĸģúØ8 V;V( …âĐģ˜ĖڂkÍfĮÄy\Ūëap4Ļį°qĖž€[WÉ0“7ŸmÎŧ/2į–'đb!ĨQkzœ;’vi‡^Ãģ?fæm ųMûÍÛĖžø6Є›ßûÛ’O䯌RúŨCLząˆ>s^bPyYMJîíĖĩ’+g˙×{?È&ĩΛ˛Īã]Ėšg!ķîXNČŅ”>ŖgÖ­~kf˜(‘ũ¯B5gŌąWSÖ|ø .wÆDĘIŨqīÜ>Ŧí_ö™áŨ+yí_pŌø 9ų faÃyķ3žÜD÷Ų¯ōŽ$å4ŎŦ­X GĢ‹ņ€GƒShHÃ@€ß?ZĖĸíÉ ځ”ZîŨÁ9°ĪņwũãL{v §ūƒG:¤‘P¯ļÚîTÜp|Ų‚BĄ¨Ę(Ž5ĘÆŽGĖīÚBžą=#GœE‰Xg|šŖĐąøÂA‡I¯ņ~mwŖJÄcŸĪ6 Œm|Y_ē$ü3Ұ?vėϚí[Ũįø˛…ĸ&¨mrôī¯ü€âXŖlėXQÍ2›R>TV×} ‘Õ\Ų<‹ŦŦļLūą †˛š;>ĮÕũœÔĪĘ"Ģa{ΟđĘĸÕÃdįŠĮ¸åâ^´q:qļëËåwŋÆ&ˇŽ/‘~|j<tuâtvâŦëf՞§?Rņ°ööž\ķ‰6Îd@›}eũ؀ŋFÆfĪ#hĶfoėŠxžãßø g8ģqĮW.~ txyxÖN$×y!Īl/ŋ ôË.tât^Î[r.ØÂ‚ŗœô›ģ_Œ×ŗ;•ˇ~‘o¸š›§ŗŗÖė;2ü Ÿ>3‘A§ĩĄu› xâ/EëžfĘÕéŨqŸn: Éôå›Ų¯öōãļ!/ķŨ[÷0ŧwœÎö ũ8߇ņn{‹éÃ{ĶÖé¤mŋkX¸ļˆŠ’ŽÁŽj’¨‡Í¯OaČimp:ÛĐûōŧķ_û{s -”đsŦxņ.ŸÖ§ĶIî%w’÷‹—š…ã|8÷éĒâŋLųĄŧ˜*ZÆĻ×§3r@'œN'­s/āæ…+Ų­ŸĒ•~æHõ^D(]˙wéCûr9tęs1c—mŅų— ģV>ÎøAåŸ9ĩ+.ŸĖĢŋ€p ö0ę’Mn|Äf ĢmüşĶčŅäp÷A7áBž{r įuŲˇŽ}ũŖ|žbV%åĸU‘KŨđÕ[ŖgOąĖˇš"–šĢ>Ēę"ė}÷jڝ:ŒWwVôzžŸįŌĪ؃ÉkŨT.¯mŦ.ÉW˛ãĶšŒęßū0ļ\UXŽ—AOņūˇpA7į!ÖâęSÍĖ|2ũ–|ĪįoūŗîvđČĘ'č›d!Ĩ ‡Ŋ.BÁ§ˇsÎČWq\tNéJęŸ+Y4mü™Ā7ĪĻAe9"ޘÆĐ›ŪÂ~îxæÜ֑”‚¯X6w# |´č"rL!vŧ>ŽĢį˙‹6WÍäÉūõ(üŋ§˜y×fōI;Dģ:M{y%—qįÎëyiņĨä XRs°ÖȸLd>ŒÎLáõ˙ÛËĨCęŗO¤~ļŊ˙¤ôgvĮdĀsĀu•ËŖ^‹´6}ÄĘ %ü­i”üĖĘ_ļ°bŗ‡Ë˛“ü“5;čpz3ė52Ū$N{đsŪøpƒįؘõöz§ĻîįĖŦ7–û^^Mkãf^žtĶoiLį÷ÆĶĒfŒë)×ņ܇—-aíü˜ųU ÚÖŗavž1žËī^KĶ!wąđÜÆxūų ķŋ‘‘Ĩ/ōÎÔ\’ ą|ĻŧũjéŊ†pĪũ7ÜĮį-G3ũÉ>4ĩ–ąķ—Xįō˛/T “˙ųß<ö=Lũn`Úĸ\r"{Ųüíļ…ĨÛc´ēdĶ•ĪģžumÆ|Í_üÉnWƒøŗÂwWēŽmy,×,ØB—Ņs˜Ü;‹ĸoŸįžŋ¯g7ЇšYUäR7|…ŖĘkT%öäūŠ’ųV“DbŸģ•ęŖ m`$ĢīÕôŗßĖKí`ČuÍʃG?ŋō.ģs.bd‡DpW5yUęĪjM‹šíą ÷ W™ļōæü…‘]ĩũᆇ™“q;~0vÆÍäMš!ļĩ8Ēé‰ Øŗ›Đ¤žŒrš4ŖY €ûđ—6ŗėîW)ęõŸücMĖčŲ8ŸîCā…_.âÎÖ54ķÛxiî[įÎâŗG†ŅĐЛn 8ûēĮxí×ķ×d3Ī=žķ™ņÄßĪ!ĶôęLæîŗ¸éŖC5lĀ–^ŸėD#Ø2hظIyÛ5‡)ĢÃē˜üújūŧlØž ’+ī}°“Ô3 CŌA.ŠE'ˇŖķ‹WnÅw~wĸŋŦ`KbFĩø'_Ŧūž>ílZÁ/'#[%ÔĐh ØŗŌ(ĶFŲšĐ$ Ŧ\™4,gÖĶ)ađtîÕ7qúi4Ũ=€1ĪŽŖ´ĪY¤ĘœŠ4bė’y ohúqōîU\ôä+¸æ~ÎÂAû6I}›ė`å ˇxo‹^]ąÉąe W †3šæ‰yŒ>ÅôĄ‡3Ę/į>ȏoĄį°Ō<=™2į:z§€,FOēˆ¯ø˜•ŒĄÕÉ5ÄŦ4=%Ŗü§0ģŪĮ#̌œũāC\ŪÄ žŸyfáWDú<ČS3/ĸž čۋVÁ ´ė>Ŋū§nŦü39厍ŽŪkˆPÁÖgqņˇ0´Sų}ûœÍeōĀV^¸˙=ŠģÜÃ'OŒ,÷ąĐīÜÁZÍbĩ­Í:dĶ•/[Č9 M_lã`ū¤&9đū_xŦŌul#Ī-ų‘„ ˙Áĸ‰}÷éˇWäŸÃÕoæ^U‘K]ņŠU\Ŗŋ֞BÛ+™o5Š%öš[Š>ĒĐV9†´\u^WåŊÍGŨJK+DKäĨO i:j­U—WĨūŦ6ÕįĻĨ0ĸ‘ 8‡iéwŖNv1ųÃC´mėČ÷]CnŽ čˍŲSøbĀ”Ę×â¨ŅWS†˙\ËĮŋB—ĢĪŖą6ŋ ¤uŊ”.Ö˙˛jCi˅ķ`ÅoĐaøēĶ)ΧŖu;_o*%”˙OžÛcĻË žûycŨåÖPÖšš3é=´+ÆŊÎĒōRßÖwųpW:g iGâA.‰EQsš=˛)ũņvl˙柸[_ĖÅœDÁˇ?°7ėå×U˙Æ×ät:¤×‘ˇž6īOጊS$RēžWîųį÷ęP^ŽŅ•kŪ/ÅûĮōõGņ§œĮiÚÛJũ6 €–œß3[›tÖmŠO åxĖ{šĪ™M÷[–Fg0°y”MĢļžę¤>´Õe ,Y'“E1;ĘĮZx7/cÜä/Hĩˆ9ė ŦÃų˙äģ=F:éCļ&s-žGÃČXĩÍĶg4ĒĄ÷šÂœŲ†vŠų,Ÿ>ƒÅī~ÅæŊž Ŧpū÷ŦúŨ@į+ÎÕų؊Äl˙Z›uĮĻ+_•ô\kš˙՟Ô(Ü?ļuė'ÖíĩŌåĸÎû4C2í/Čåp)—*ÉĨŽøŠ*ŽQ•ŲSeķ­Ļ‰yîÆ ĒúH¤ãČK¨˙ۛŧļŲD)úæyžtĩbøĨÍąRuyÕ5ųĐâ|úÔƒ7ĐŦ=õu˛;"xōēdíŸŋό. 89RųZ5zF.ŨE)°ūĻSÉžé¯oŗ×M˜ŦéT¸l.`ÃÄŪ´žø×ŋˇ*ôôā&™ļéŗN–´†¤đK ô˛ēÉ8mŨL“XžzC/Īā—ˇ?bwƙ j{p÷‹<"drŌéíqŧô˙ĘLčĢŊ4؉Sēn!ûĄü§ātļ—OZˇž4Ē+Ē;Ōpč÷á]ŧ5ūJflėÆõ“2Ģu}Ríaļ.Ím?ú égĄ= ģ.;a01`#ÉžŋAƒÉ‚‰árįĢk4HŽG˛^Ļdę%ƒ¯ČE0 ŠĢ؇Å^ņ­T#„jÉÛFJžaūÍąąũ$ŪžØƒ”ō1…=¸I yē­ÂPĖ)9¤āĨĐŽé3ZnŖz¯1sšûŲŲ$Ė[ʒIoķäŧņŗîaTĮÂeų”‘ĀÉYŽƒĢĩ*ö/—Ô!›Žl|ąéŲ\kĘu ?Ši¸Lë˜ģ‰d&Wˇ)9›ƒŌjmWE.uÆWØĢ´FU:_*™o5› ­ÂÜ­LÕđöÖÃvōsŧøĘŋ™ĐĻĢ_üŠ@Įi ”PUåU—ä+ā˙1š1éd›?<Äi­# G…ļHKˆa-ށ æIŲ$aĻįüxč´Ũˆ{NÃë)1“DLt›ņ ÷æ˜Ģ6b¯×ki&‰ø(ņV|ā#â-Žķī07fôbXw3wŧž’Ũĩ㝏÷yö`ËĮ$Øú Z2›/~øžĐ˙ŌčŅ=‡ÄĻ}čh}“ĪXĮŽ˙Yh{kķ:urĄŸŅĸīyãÛ=šĪd–˙ÍÍŪĀŅy\7V9Ö(Ž?qE@K6„]üé{ķäøy…lx'īMĮKŽsxčåkhŠ3°}2÷_ė'J‚ĻīPéJqĐ,ŲĶg¨ų3“j`$éÔ!LfĶ‚Elûîcž›;‹979h÷å}tJĘ&{ķŊÆ)TĮūë’M›*_lzŽÎ5ûmŖļ§Œūūą­c$āĻĀUqįví•bă¯sĻ*kT¤{ĒlžÕ`…ŨQ]ģĒŨ–åd.šĸ-‹}‰o¯ėÆ ë ô˜ÖūĩĨĘōĒ;ō•Øüá!Œ/ŲIiXŋ—°Ģė-|-ŽŅš~/Î=)ĆU;Éhyā›)ZŌ,­æŌšĻė\4 ŗéëŨ¤5oA‹úÍiœbƔՉî9^Ö¯ØĒ Ū}üwՏ¸ÛēŗÕAīū‡öjc=‡õĀōķr>\ąœ˙ĖâœËN=Ô~1&y˜2:ҧ‰—uĪ<Ë?íč{’-ĐŌËWĪ=ĪŋÂÍéß&ĨÖŧC û D-$ĨėĪ6EË6đÁēŽąĘąFųícžÜž˙x5øĮ—|øĢÖ}ëÖĻëĐxŲüÔ8ūūe:W=>›õ+dĻĖÎô¨aũō5äkûnÛ>ū„Ļ6ô;ÅĶg⠃%ŊG0éÖ\Œ…›ųŸ+‚)Ģũ›FųņĨOųã §Õą˙ēdĶ•¯:zŽgۈuËÍđãû˙ĸT{ˆŧŒŸ?üū/¯A¨ĐvœĘĨ*kTeö¤į`ķ­&9škWõÛ2ŅāÜĢčæ˙Œûī}’Ÿí}šęô˃’U•WmË7VŽČūūŸūļ?ĐüöūvtÖ⚍,Ŧ§rܑŧ4ōZÎŋövnڃ&ļ2v˙wkžø•Ķæ=ÉČĻ5Ô%kKFMĖō›neÄ­7sũÅ]iduķįöMŦ]ũš3æ3¸ŅŠ\us.yŗĻđPĪ'™0 …ĢeęË;&‡iÜFƒ áũwyíĶœŨČABN ZÕ?ÄQŪ1ÁHFatˇŽgÁŊ eā˛Ö‡ŲæÆ$XsZ—Tžx{#tŧ’Ö‰€1öũRđāV¨5]˛kąĻ´ŒéĐÜĮ’'^âŸm¯Ĩa oĪžĖ{ÅpȝNUˆUŽ5‰)Ÿ§ĮŪ…iÂ`Ne3o=8ŸÍYƒYv^ũš?%¨Ūõ ķđĪÔū(—Ļ˙ɯ[˙Ü÷ƒ…´FMÉ"Isĩ IDAT˛ŸĘ߯õ&oędFĪ(fė9Mđūô*ķ–üNŖQs9§ž 1|&đo|Œįî Ëy}h×,[ŲxoÁwDNž™öiF°žÂ•ŋ„×nžÁˆ1ģ?Ŧ;õŖ{Ų˛ö+ ÎdRģjØ]˛éĘÆ×ĨzŽÅ~ę*1éĻ WŨؙWī›ĀøFĶŨ'“ĸožãáĪü@"†C-Jņ*—ĒŦQ•ØĶxĮ˛ÃΎähŽ]GŌ–)ģ?ëcaĖ—ų¤^rŨĶöPĨūéĒúų:ALsîךJy~ė$lˇŖa#ËXĀÖŖ´×pšĐHæ9ņś-™1į)Ļ\ũ^Ŧ¤5mKī ¯Ĩc>Xd$cĀLŪ|ļ9ķŧȜ[žĀ‹…”F­éqîHÚĨM†-b™k*Ķī<‡ĪÃgę>æĖvtH^Íģ~ÄãÅ~0ĨŅâôëy|úMå¯M3‘yÆl^_ܘŲŋĖ=c—ÆAÃ.šé s5íŋ.Ųt%ãĢ–žãŲ6b[Įš|‚§ËĻ2}É$Ž[lŖaĪQLœ™ÅėÛ~&íß:¯rŠĘux{2'V6ßjŖšvI[†Tē^ÖĶ—ŋpáȎžģ¨Ü?U¤ĒŸ¯?l3†‡‡üĖC÷\Įƒ˛Ī=:kąaÆ Ņ5kÖpà 7PPPpÄ ÖĪ?˙<&L`˖-ĩŨ•ŖN^^ĶĻM;.Įv0N´ņÆĘņ"—ãeGƒ]'ęøëƸƒl[| ŸnĪ Ģ {ŦMŽr:úÄũ¸ĸĨü߄3ũķŧûáœu,讛ō-cÕõ=¸Ąx&kō“}ķyyyäääÔtf^ĄP( EMÜū.‹Ū*ÅŲÅIƒ¤;žÉã‘GˇqōMŌĄōŠ:HÔĪŪ­ųeũ›ĖúČCįCiQĮųĖ+ …Bqc0›)Yû4Ķ—ü+ όV ģ”écÚÄÉCđŠZ'¸WĮgŅoVšws5Ž‹gŽNT0¯P( ÅqŒšá@fŧ<ĩŨEübmɸO73Žļû—$ŅīØ| īOĀ) …BĄP(Šƒ ‚y…BĄP( …"NQÁŧBĄP( …B§¨`^ĄP( …BĄˆST0¯P( …BĄPÄ)ŪfķüķĪ×V?Ž yyy•(N9žĮv0N´ņÆĘņ"—ãeGƒ]'ęøOÔqW•ãUNĮë¸ę 'š|+|ŦBĄP( …BĄˆ–.]Z13_ˇžūVq$Ôͯ4VTĨG…eŠē†˛Éã ĨĪø"//œœU3¯P( …BĄPÄ+*˜W( …BĄP(âĖ+ …BĄP(qŠ æ …BĄP(Š8Eķ …BĄP( Eœĸ‚y…Bq”ąęúļ8‡žÁŪHíõ¡a.ũœgą`K ö:Ą8 ōûG‹yėÕõ”Öĸũ+Ž%ÖŪŪįEĪņ{¸*×)Û¨Û¨×øÖ— æ …BĄ¨~˙h1‹^ũ7eŅÚî‹âØ`ĀŅāZ6KÃRĨë”mÔmÔk|ëË\ųG …âÄ öáĮŽŨTÛ=Q(ĩÍ>ā Ã¤×xŋļ;Ŗ8Ę_zŸĖ|´ŒM¯Ogä€N8NZį^ĀÍ W˛;$(?îôī?q tsâtļĄ÷å3xįŋ>*n´‚ė\ņˇ\܋6N'Îv}šüîרäŽVlkđsŦxņ.ŸÖ§ĶIî%w’÷‹—8Ü´ÕA"”ށ;‡ôĄŊ͉Ķé¤SŸ‹ģl ~­{š)W¤wĮōŋÉôå›Ų§Ļ0{ŪA›6#xcOÅŗO˙Æ9ÃŲ;žr•˙Ļ2}+Žœ ;>Ë¨ūí3W*ĶCe:/'ROį‚ŽNœÎNœuŨÃŦÚâ¯Ä:ΟáĶg&2č´6´nsOüĸJuĒOŦ~8F]‡ ųîÉ1œ×eŸŽĪžūQ>_1ë %Uՙã•ų ĘÚõ°ööž\ķ‰6Îd@›}mô`ūČ^Ūę¤ÃÍk(ĶŨҎ~}œįđøÖ`åĨ¨>ąĘøPū ø€rŒXâƒÃØFíá8ãđķ=œ˙ē;É˙ ų„wōú5qö›ÁˇĨ2E¯ņ¯¯8ɡŲųÆx.ŋ{-M‡ÜÅÂsãųį+ĖüFF–žČ;SsI6”tÃÃĖɸG?˜G;ãfōĻÜĀŖ‚d}xŊS @„ÂĶzĶ[ØĪΜÛ:’RđËæNcdƒ]DŽdå~^ĀĖzcšīåÕ´6næåI71ũ–Æt~o<­Ŧĩ$Šã÷÷ÜÃ}|Ūr4͟ėCSk;ųu./ûĘÕ"”n߁ĨËÜuEc2~~˙6…S¯Æ›ķ ķNO%ëôatf ¯˙ß^.RŸ}jķŗíũø#Ĩ?ŗ;&S%}+ĒĪĻÅÜöX†Ž{ĢL[ysūÂæJ,z¨\įBėx}WĪ˙mŽšÉ“ũëQøO1ķŽÍä“ĻëPUæų#ܛ4š™Ë>åÔ/‘Ŧ8q‹u™üp,ēŪūōXŽY°….Ŗį0šwEß>Ī}_ĪnRu7ĢæÁžŨ é4í5æ•\Ɲ;¯įĨŗ’c4`IÍÁJņQ–—∉UÆņŦŊÃÆŽÃ؆âȈažgÉ´û/bāÍS™ņi=?]¯OfÖ×é\ņÂôøËœŠ}ÅĮĒåÛČ3 ŋ"ŌįAžšyõL@ß^´ ^Č eđéõ/08§üŗÆŽÜqß5俘€ÎŒš=…/LaáĮˇĐsXLmŧ4÷-ŠsgņŲ#ÃhhčMˇœ}ŨcŧöëyŒkYŪ–Ŗ'Sæ\GītÅčIņâŗō1´:9>DWW l`}qßq C;9öũ˛ĪŲ\Ļ}ÂBŗÁĶšWŅé§Ņt÷Æ<ģŽŌ>g‘šÕ‡a] L~}5^6Œ&Āŋ•÷>ØIęĐ! ˆIßUĢ„T„P}nZú#™€sč‘ļ‘~7ęæJŒz¨TįūM<÷øZĖg>Æ?‡L#ĐĢ3™ģĪâĻt×Uež›:2iūXÎŦ§vuGĘüp,ķÛ˙ž[ō# ūƒEû’jzuĄAū9\ũ†îējÎņJ}PLíÖ';Ņļ 6nRū ĒĐU*/Å̌˙â<æ+‰l釰 őã|Īč?•.ũšwŗzņæėĩd]õr“ųëöØ÷úŠ‹2›pū?ųn‘ŽCú­ ØA‹įŅ0ōVmķí˙đÉč’ĩ_ ό. 89ÂĻUÛđáüXņt~Æžā)ΧŖu;_o*ŨėvRÚęvp–Ŧ“Éĸ˜ÅAG†9ŗ íRķY>}‹ßũŠÍ{}Y˙"Ĩëyåžŋq~¯8NœÎŽ\ķ~)Ū?ļŒ™ôÚãŋ^gUyŠoëģ|¸+ŗ†´#‘*ę[Q}ZœOŸú"` ÍÚS_7WbÕCe:ßį ĖtÔs_ `LŖÛ \ėēîTIīÍûĶ9#ΏÁö/˜|å}|—ķ7ŧĩëū*ŽãŒ¸H/‡=¸I yē­ÂŽĘœ’C ^ ]a´}‰# ‡ūCÆŌĀWä"KŲ\†‰Ŋi=ņ¯÷jUč!‚mß;}[#„âđĩEuŽÄ\î~v6 ķ–˛dŌÛ<$9/düŦ{Õ1cxoŋ’ģqũ¤…Ėj]ŸT{˜­KFsۏ~Bûf+§ Ŗ›iËWīačåüōöGėÎ8“Am÷-÷á˜ôŠ2_GŠ= {…ygƤ›+1é!āíJtžĪ$Ķ6ŊbĻՒ֐~Ņ~ŽMīåķܑ†#.ŌqD%~˜Håķ;ė.ÄC"™É—)Sr6IēŸĢ=Į+ņAąĩk˙ëĒCeō:N%VĮęT|P+TežS;rI˙LŪX^@ËËGĐ!éøHqĖ›3IÄC~ąŸ( ڜ •îĄ͒M 9’’”†AK†KØU ö–ÉX Ō–‰n3^áŪÜÄîdÄ^¯&• ŠŒ$:„éĪ aZ°ˆmß}Ėssg1į&ížŧ.îīyãÛ=šĪd–ëÜÍŪ@EŨ3z1Ŧģ™;^_Éî‹ÚņÎĮ{Č<{0åą|ŒúVkb҃ąčŖJunJČ$%ۊ=GŧÅxĢx?ũŋM‰$āĻĀUņáæ°ko…‡JĢ?Įīƒ:ÅÔî!3°˜ ­ŲEƒ^ö¨veōRĒ c%ōēKėķ=Šû§Į™ēŧ˜ú'%ōËĸYŧ3p)ƒã­~&Fâ"eĘėLúÖ/_ŗ˙Éd|lûøvšÚĐī]vä÷øôˇũo9üöūf ußæØSv.š†ŲôõnԚˇ E ũŋæ4N‰‹ũÍq…Á’N‹Ū#˜tk.ÆÂÍüĪ!öˆZHJŲ-ÛĀë</6fĐsX,?/įÃËųøĪ,ΚėTĘ+`•žëąč!›˛:Ņ=ĮËú[uÁģ˙ŽúWī§8†Tâ‡cÕunv€ß˙ĨQíCüüá÷čŊĀŅĐõÁ|Plí0[-ôĐ×ÜdÕK °ûwJĩ5+ČŽīĸ¨ōRj\Ƈ° Åë|–ũĀ‚;žaoĪ{xáåĮšV4ûŠüm\oōĻNfôŒbƞĶīO¯2oÉī45—sôŽ™Jy~ė$lˇŖa#ËXĀÖŦÁ,;¯üm'֖Œš2˜å7Ũʈ[oæú‹ģŌČęæĪí›Xģú7rgĖgpŖÚ艃ãcÜ8w]ÎëCģf9ØĘūÃ{ ž#rōÍ´O3b¤#šûXōÄKüŗíĩ´3láíŲ“y¯´H#=†ŅŨ:ž÷n$”=‚ËZë>“žĪz"=dĮ sûŠ\us.yŗĻđPĪ'™0 …ĢeęË;&U쟚įĮŽĘüpz,ēnÃU7væÕû&0žŅ4F÷ɤč›įxø3?ˆAv՜ã•ų ØÚĩŅ CCx˙]^û´g7rĶ‚Võhsio^Ė‚ršĢ_˙ƒŠOũh\uy)Žœ—ņĄlÃĄ2˙GB,ķ˛Ą‡uLâų‚͏īÅ!4Í4rĮƒ#Y5j“_īÅĶ—7>HđßúŠ` -äÕđĖ|r>ã^ķCĘ)œ1f ÷ŒÉ­ø@C›1<<ägēį:,6ŲqsįNĄwĒö´fōæŗÍ™ˇāEæÜō^,¤4jMsGŌ.-.+âsf;:$¯æŨG?âņb?˜Ōhqúõ<>ũĻōWļāÚEŗŲ1q—÷zé9lķ†/āÖÕÛ2¤wgxOkVûÉšę2œûJßu€ô`Eįfš [Ä2×TĻßy/xĖdwĘÃY|××UģŸâØQ™ŽQ×ÍF>ÁĶeS™žd×-ļҰį(&ÎĖböm?“Ļ}ŗWõt]šŠĨ].Î­k&ŗtÂ(– Ž}“OîjKZŋ<6fwOŊˆĶ6öÁm÷bū„īĒ./őSã26Ō6lĮčŽ'•ÍKĨß=Ĥ‹č3į%•—Õ¤äŪÎüQ+šrößyŊ÷3Œhr`ģņ­/Æ ĸkÖŦá†n`˖-ĩŨŸ# ŒU×÷ā†â™ŦÉLö îķōō˜6mZœëTĄô¨ĐS÷íáXûá Û_§ÛķÂĒčî¨üŠēMü¯[Ę&/ęž>zōōōČÉɉ—ĖŧBĄP(N4‚ÛßeŅ[Ĩ8ģ8i`Į7y<ōč6NžéA:Ä} ¯P(GĖ+ …ĸNb0›)Yû4Ķ—ü+ όV ģ”écÚ¨C …ĸœã(˜Oĸß?6°šļģĄP(',G×›dÆË™q”ÚĢ{¨uëØŖdŦ8ūQÕc …BĄP( Eœĸ‚y…BĄP( …"NQÁŧBĄP( …B§¨`^ĄP( …BĄˆST0¯P( …BĄPÄ)Ūf“——W[ũP#”N”z”=(ęĘ&/”>ã í`÷ėŲSÛ}Q( …BĄP(1Rá`§M›V›}Q( …BĄP(U`éŌĨĮĶ—F)EĢV­˜L&‚Á ~ŋƒÁ€Ņ¸ī҉ÄÄDŠ‹‹ ‡Ã$%%a2™ƒ˜Íf‡ƒ@ €ĮãÁjĩb4 …BX,BĄfķ>“ōûũØívBĄVĢ•`0ˆŅhÄd2Fđx<˜ÍfŒF#fŗ™˛˛2Á`ÄÄDíŗƒp8Œ×ëÅáp`ĩZ‡ÃƒABĄĄPŖŅH$Ņúk0°Ųl BĄP…ąX,Âá°6ū`0ˆÃáĐúl4ąX,ƒAĘĘĘ´ąĘįŊ^/vģŋߏŲl& bŗŲƒD"l6&“ ŋßO  !!“ɤ]#×E"Mfáp˜H$Bbb"ƒŸĪ§é0HII!bąXđzŊ¸ŨnRSSqģŨ˜ÍfL&GĶŠŅhÄåraąXˆFŖ8M^¯W“@$Áív“ššŠĪįÃl6ã÷û‰FŖÚ˙§¤¤`ŗŲ())!‰`0pģŨ¤§§k:D"„B!‰FŖô"ļ‡5ģÛđų|ØívL&“fgÉÉɍFü~?^¯—„„l6‹Eģŋ´ …đų|˜L&Ėf36›M“K4ÕîcŗŲ4ų–••a6›q8 ŦV+EEEšLm6‘HD“Y8&99ŋߏÉdĸ¤¤D›/~ŋŸ„„nˇŋߏÅbŅÆāķų4Ų†B!­īVĢģŨN ĀëõjũD"$$$h6āp8´~DŖQÜn7‹ŖŅ¨Í%™įFŖ‘@ @ZZšf‹EĶkZZ‡ÃA(Âápāp8(--ÕæŧØž´™˜˜¨ĩ0›Í$%%ąsįNM–ŠŠŠÚķûũD"­ƒA›wŌ_!‰œœŒÍfÃl6SPP@RR’6nŅyFF‰‰‰¸ŨnąZ­øũ~>ŸOģwŖFpš\D"’’’´š'v‡1DŖQJJJČÎÎϤ¤‡ÃĮãÁd2ižSú/ŸFÜn7ƒAķ!Ņh”;wb4ŠW¯IIIü~?EEEšm iÚ´)áp˜ĸĸ"˛˛˛ˆD"Ú’9+˛ļX,äįįcąXHMMÕäPTTD(ŌėFl<‰h>OtšŸŸÍf#k~Õ`0hūÉnˇk~Zô/ūYt/žÕh4’@II‰ösjj*Á`h4ZaŽY­VBĄ&™;^¯—’’Âá0”••‘˜˜¨ÍiYgėv;‡ƒ‚‚L&ŠŠŠx<Mo>ŸŖŅHaa! ˜Ífŧ^/õęÕÃív“ŸŸOVVVĢ•h4ŠŨn§¸¸XķW.— —ËĨųŤ¤$ÜnˇfâKdē\.l6IIIÚ5›Í“œœŦ͛P(¤é* i×ųũū sÅ`0PTTDZZšæġy<Í˙‹˙v8Z_Ŋ^/~ŋ_‹ŦĨ˛Ž=õÔS(ŽOT0āõz‰FŖZpîõz+,úĄPH –eAg&ē,ōâÔėvģļˆĘ …Z€*†â˜e1ÅÂh4j•ßī×5 úäķƒA B-H–ûøũ~|>ŸėË8%`ōzŊšs•,k‹™ČB˛Œ=55•’’’ Î\61.—ĢB°ŸœœL  bĩZĩ…; áõzĩÅĐl@Û´”••á÷ûĩĀC $€ …B¤ĻĻj×ËF"))‰„„mŗæķųHOO¯°é ‡ÃÚĸ¯ßčI`ãõzĩĀZt …HJJÂ`0ār𴠐^—ō_é—ÜO‚TY°$HIIЂ^—ËĨŲ…ÃáĐėA‚UҝčHÆ)?[­V4ũËF*j:šN6šfŗY fdCåõz}¨ô% jAģ,ĖÅÅŚLÅļ¤ß2$č“ §lÄ>dA– N61VĢU““,Üb2RSSĩ§ĮãŅæ@BB‚&š¯čĀd2i퉾ŒF#Z°#sRdžœœL0ÔlC6õĸëäädRSSąZ­¸Ũn"‘&“Iŗs 0 ™™™ÚVd%6e6›)))Ņ|€Ėߤ¤$’’’4ß#ĸlîdĶ :)++Ģā"‘ˆļ)‘‹É999-¨{– Š$, ‡ŋ߯mî$0ÛĘÎÎÆãņārš´Í°Ė%ąAؘJ–ššĒĩ)cđzŊ’%r/ą)¯×ĢųVņ=â_BĄæ§E.â+dƒiŗŲ(**Ēā‹ôķI|“ÕjÕ6I’ŧŸ%rYFŖQÍOƒA-p—y,íF"M2e[sš\6Tr$€+l$äŪ˛9NHHĀívSTT¤ų™˛™JNNÖüŗČØnˇãrš´ ¸\oĩZĩMQ  33ŗ‚Üd3”ššĒ­fŗ—ËĨ]#z_)kŠlhõęÕÃįķiö°Z­8 +ČSdj2™4[{”ä‚l Į'*˜?€UŸ]‘…Đ2•°?ë%¤đ˂ëvģIIIÁd2i}AĄÉdŌjųŲjĩjÁģÜS‚qhfŗ™p8ŒĮã!11‘¤¤$͊ɍF)..ÆnˇkYJÉ,™L&RRR´@LäJeņôų|”••UpŠ’ĨuģŨZN˛ā6›„„Âᰖ–>ø|ž ™hÉ0JĻ\‚Åh4Ē-Î"{Yô-‹–E—ĐI@ @evģŨZ)ŋ …BZfX˛[úöDOb’šļZ­”””h*ƒÁ ÁŅhTÛ¤ČElLo›ÍFiiŠļ¸H%&ÁEbb"$&&jYP‘‹Œŋ¸¸˜ŒŒ ÍūҎ^N~ŋŸ´´4mˇƒŊ{÷jv Š_ŋžf?r Üõ d0% —‚Ēîˇß~#;;[ģŋd%Ķ/ūFNJ ƒļ@M6q ėÜš€ŒŒ öîŨK  99™ŌŌRms$ļ*–>I"sZô̎ ™G………ÚF\ä!~Næ¸Ņh$??Ÿ@ €ÍfĶ:â‹õ‰ņaō7ŲčČ Q4ÕNĸdÎÉi‘\¯‡čÃī÷SPP mpdūŠũÉiĖ Krr˛vÚ¤?í˙-Y|›ÍVĄŅĄČš¨¨HķãbûŌ?IČ\” ‰lœÃá°æ§äô"11ŸĪGqqąÖߔ”Í7ú|ž ķÛëõj›™w>Ÿ„„mŊÛrģŨ$%%aĩZŠ_ŋž–ÉןÚĘõ‹…ŦŦ,Ėf3{÷îÅbąh'šzŋ\RRĸų]}ÂJq|ĸ^My ĮŋˆI†R‚AŸ-ļÛí79—LQqÆâLeą“Ė TĖîHˆdy$@´@V(qfÔH°¯¸ŧˇ>X–ÅCJf¤ŋ’—1Ëą­žŋrR!A‘8o‘‘,ār*Ąī‡däŗr9aĐgŦõÁŠ 2nš^Øˇ˜K^‚ ĸ%€Ņ_#‚¯°/ÃĢ˙'Gļŧ鏊õr—qˆũėŨģW“ĩ!r? Hõ2`Q ą'É Jp*}1ČfH2‡RÂ"r–ņëËj$ˆ‘ UäûËB­pHæV/w ÂD~ŋŋBÆ__Ša4ĩ Wl\l KßEŽzųëƒ^)7Đgæ$'sW/÷äää 6*ķEÆcĩZņxúĶÅH$ĸęHŸ¤¤P6a˛” ˇØ­”'ZģzĘ}ôūG˙7ŸŅhÔN˙IMMöú˛9ū‹ČIŒl åŸÛíÖ2đrŊ~~&$$h˛éOŸLԈîĨ}ģŨ^ÁÛívMū&h\.nˇ[ģŋŪFÅEžĨĨĨšl$i!ã=0Ã,r”ëÅĪĘ ƒčM¯gˇÛ×ë­pÚåķų´ūJ˙ĨTĪáphļ#÷J’ČáphsIü™lP ›$‘ģ´åvģ+”l ­īRN&§/2ŸEV6›Mŗ)ą?ũ‘SB)1ԟhJRI䠟Ģb‹˛™ÖۍâøÄ4vėØÛˇo§k׎ĩŨÅ1bÁ‚Z°"Z_Ã+Ų qX@…ÅLŋ‹3‘l…8? BvEœŠ´!™ eĄ‘€Đڗ C~/uȒᑠĢė°/Č5 $%%Uœ$(…Rڗš_8rɊëO%dLúĀ]˛ÁŖZ~ IDATČB"ÉØ‹3–i[ä(ÎW˛Œ’U”Í•ū4I&Q_.!ú“ Ĩ>Ë,= hå:š‡ŒIô&˛M´'å:˛ų’ū‰ĖŦVĢ–Õ–ėl*ü~?eeeÚQ¸ôAėC6JúŸõÁŊœļč7 r*4ÛÕH~ŋŸäädm!÷zŊÚ™žžNZZšļFŖQíč[JNäžiiiZ?$xÍĄs˛PK˙%+/6YTĨœĐæ€díÄ.¤tF,ŠõMOO×J¤ŧGô!ö …*dšEŌ/™‹úĶģŨŽ•Liv‡+”5ÉĻIŸ?!˛HNNÖ2ē”K !ĪUHMąĖYą+)û͟JˆL%Ā• ˛ČQĘeŪ‰$øIIIaīŪŊ”••i'f2×ġ•––V(…đx<šLĖõ‰ą;ŅĢžėCúc45™Ji‰k’é[”ădQeŖ!›Y)Ÿ&sMę°eĶ §"â3õíëKqĞôĪ!ˆ¯ŋĻ÷Ōņ˒ü‘qË GBB‚Ļs€ôôô ūÁãņhõ?˙üS›câĪÄÖôĪäHyœøŲč{<­LK6›ōŒ@aaĄDËNd%ëŽøH҇ĖŲøÉ&FÆ%'ČúŸūyöFė3--MĶ­ø=‘™øũæI672—å˙ˇnŨ Paã¤?*,,¤ŦŦŦŠū9ŲȆQ|ûŲgŸ]ĩāAüđÃĒĖæD@qH’ņĶKŦ°G˛RN 5Û°?û,NUÚĐ!ŠƒˇZ­ZMŽd„$x“c|}vQŽ7aŨēds].—æŧôu˜’Ö–Ō†d=daVJ;äķ&“I;>ÖβČčŗseeeØl6- '}’ ŋ,HÉÉÉZ]°,ōy.A6 ’MyJ€Ĩ?֗āUä$÷‡ũJĐ!mĘI‰,øRzh ‹lJD^|JŊ¨,%%%Úu)))„B!m÷x<ÚÂ#˙dĶĸ/ĮŅ/>úzY Bå˙%Čƒ”––âķųČÎÎ֎‹E&bĪ"+ äaFŅ—”LI6KjcÅ~ÜnˇVĘ%ã•ĖŗūP ˆ$HHHĐô!úĶÕ°˙@6Eú§ÂÂB˛ŗŗ59ÉÆáĀ,> eØE~r”.ŲBÉ$ŠíŠÍ‹L&“öŧƒÍŠŠŠZ‰čödúĶ™7ÉÉÉÚÊ, JKKINNÖęÉSSS),,Ôt–’’ĸÉM˛Ļ’,’" ļD>úÚõĸĸ"-[;”g~vîÜŠ•,čįļž$33ŗÂŠXãÆĩ˛yĀ;‰PRRBzzē„ę762FąŲüü|ęÕ̧e2Ÿ¤DEJ ¤J2ŠbK"[)”ˆNŲŲŲZÛō0МhIĀ'›ØP(DFF†6Fņ7‡ŖÂķ Ō~$Ą´´ŗŲLũúõ5_‰ė[üˇø$yāXāvš\ZģPĘ\ÍĖĖԐ—S y@S˙ܓĖ ĘÅåw˛q´qĘs‚lÅË|“Ėžl6%¸–į“dŖ r‘ Ybb"ųųųxŊ^rrr´g1í”AÖ;‡ÃĄŲŠÜ'??ŸÔÔTíaTąWą9y‘yYŋ~}mÜŌæ›k)YŌˇ …HII!Ų˙,‚ūDQqüĸ‚ų}- 85y*Ў!åU‚gyčT_Ģ̝ų” €ŧ C\,‚,˜€ęų%Û¨/‘ Ĩ~‘G.¸dÄô™dÉHK@'ˇJMĸ:úĶYHų9)) ĮCQQ‘–•“ Ģĸ’õЗõH?ä[˙6 ļäŪRŖ/Y>É:JÔeëË äøVßOŅŠÔFęßP$}?X]ŗČYŽaSRR´ §žūöPrOYT$X´€XfYôeŧrOҝžÜ@NÄ$€—…^ˇäädŌŌŌ4;āAĘ(D7bŗ"×Ũģw“••ĨeøÃá0ĨĨĨZ]쨐žîXä§/K“ĀEĘb bų“~S*ÁŒ,°bĪR6!úyz<mœúMŖ>ãn4ĩ ądã¤6\2ųƒÁ@II ŠŠŠ$''ŗ{÷nmC&2“kd,˛š´´ŦŦL{`\˙\ˆČ@îe4+ôQNM$xėŠüŦû‰dnCĄ™™™Āūēc€zõęUØČZŲ…ŧÍDt%§aúÍ´üM2Ø2Gä-Ez_¨/'”žŠIļTŸH0 üųįŸN($°’Ÿ‹ŠŠˆFŖÚ) ĻC¸´´TƒÁ –––jqqąI{Š9ZUí¤ "ØPė´äTMF%ôíęęjŊ˙žÖ××Č/..ļƒčŗōjėEœîĖ;ŲÚÚĒwīŪu¤)°ŊŊ]777uppPíėˆ„˜‡õōåË1{čų~o,H‚´ÉįėœŠËËËą=QNËėėlmnnvŽ[÷|}ŧ×3˜˙.ĀÜŋũ,|U5 Ę?@NÕ¨RIjī‘ÔčM^@Cęļ}§ĒšåJ ”€ŠĒē Yã,I   TÂąIú¤6Úfân2AĐĪf?X§ĻĻēo&5Ü6Úŧ˛ũ€D¸Œ<…Ęž ĪúŸC@v‘Ėlö.+Õd\tž××ם ¨˙R.AĖ5{>ŸŸĨP2ŧŠÁÎīM&rrė|W˜ņŖ)­Ē–é@Đ;ƒŪüsnjãd˛°{eØ:Į×<Č$ŋ_wMÎ}č3YuÅ\ļļŒĩļ§Ô8Š%$¯­­ĩD xô" )#ĘäBã|}}ŨĖģԁ"L"4@tŽ'dŋ˜¤J ŖÄÄI§BŸ Č3ĒĒYũi ˛ÜĨ{ˇŦd͒Ƙg)#´õV_ą‘@ŸK5$ė~&š.,,ÔÆÆFWÉ:>>n‡´Ē::áūIčŖtzonnēœŦņĘr•ú!%PItˆ¸f„„]ÜÜÜŦ—/_ļdÎÜ÷ˇ16īСUãĨsŪVÕá“ŅŽlû" `|ô'ģO™vĪ7Žz&™sÜØOmįpļŊ´ž°—åۘŋ“¯¯ÉÄ<ķōō˛>|øP đmMÛÃĒĒįoŽ{Ēh`ÎCmĩ枯÷zķŸĀ•ĨŅ’}Ä´dĩėL aÂߌģō_)ÉzĀŠŋŦąÅJŋš„Ĩ%cbxĩ1Ãˇ€šrjĶLūūÄ ĶĻ2Š6NŦ,€AĻ#(ãûøøØabmf|www a‡°mU5ÆŦcmY‚xÃDŠtww7VRzÎÅqJ@ėūô°éԘž›íŅöÔEáYĘíË/ŋlũ4°­:…ąKļ°Āä&[oĖI1ô`g,i¤mĻ9o>ÖęęęX$ Ųr{{ÛĨq'įŅããcW˙™ųĪ×Įw='Ā~×ŋø˙ĸĒjŒ‘Ŧ qc(s˙¸”`tĪdË2Ô Č“:äL|K͟P$KSUŊ § H)BmĶÆ4ĢÜØŦl*Øj€ķōō˛å6ųŒ:p€´eiiŠ5Š™PjãͤâŦ*”Zrō˜,ũ‰IQ)e}}ŊCÉ6ãĶĶĶąĻŗæsúŲx ī_^^ށíĖ Į![PēS8ÛXa÷H΀šŪ"#úÁøŲ„r|õŋ9Ļ/DYüL’.gR"å`0‹¨’(ã!Ú4YÄûįģÔÉ's¯_ągĀaĘHHÄ^ŧxŅā’ K?nnnļl2ˇŧg†á%Ēåæ7@”Œ&°KN’ *ĨmUÕš.úŨ|øĐļĻĒē‚y ôJ^__ī(PŠ_[[ĢĶĶĶļ_ËËËĩžžŪļŨ8˜;ƈdCØ6Ÿ“j~[œlõŅŅQÛRÎ???z=;;ë2s˜™Lt€Øö'å3€’`šƒāĀ–ûĒŖd‰š|ū¤S–@,+Ô<>>v˙Ø(o‰­æ &3øœ[)Áŧ§Ü$KHĻĘOž5ØE|PQĨ&Ŗ€K˛ =6ERs)}“‡ŠaŋÍO§ˇ:Y4׊ī$ƒĒš‰u坁6ß1~œ ˙Ūhũ‘ėyFǞ2 Yį+Ĩ&™¤—ķĒĒííížÃYv’ė0SvŅúͨ†AU1ĘģbaSƒî}ąß@- l<1 NÖĩžHüĖÅĖ%aŖŌžũ?e~iü ¨Y_ggg]ž­å´ŲΜŠtdIo2JĻSÃnNX§ą”_åZ͑xŠ}l]æp¸ˇdP9}ĄßæææÚ˜÷đ$€nëÅzĩöŗō›D€BdUæ¨ŋąč€rÎ ŽGĶķ%gôogg§s8(———uzzÚRLŊßycĖ™–”k~ėq@´Xœđ´5 ä€2¤’ĖŸ¯ķz–Ų|ןüɟôfhÛ|Ōh)wt’ML† õŲD°ŅäBœzba_ ‰!K)NĐLÔ˛y$“­€ŧ°§Đ?G^acÄgōtVRÆīžæJ‚eö–sožÉįRMk2߯¸ųžĩœ'Úb˛Ųü<Œ P*ōææĻĮĶēĐNN…5'ŸÅ}œM`žš_@~e{CˇTZ2ŧŗÜ"•ÔĻĻĻz¯ÔN9&œŌ™™™ž/ÛÛÛõ›ŋų›õíoģŪŋß%k777ÛĄž­ôūŅ˙7ņ|ũ˙úz–Ų|"×ããcœœTÕHãnŗfŒ’-§áļYa_”ĮĮĮ1ք–ĀŗĄ?>>Ž%˜%{˜šúL`Lũ/ā¸ģģ[§§§ũ3ía01÷Jô1ô/_ž“ø0Ž6ôÔ;ڄWWW´a88 Œzn`î'ɋS155ÕœpŠ8 îŖŪĩ(ā%e.™Ž™fÔf‘NOj}IwĒĒK!’M ‡ŖäåĨĨĨå:”ķ‘ ×Xa„87šKîKv,sō@$lž~uuĩ.//[l“ˇąU…yÎĖāėėčRũOúáĀ ēŨÔcûŽˆAéix1Ğŋ´´Ô5ÄÉ_ĒFuüå`U=÷ííívÔÔ͡‰k‹Đ=€TU ūčôŪåũ9 UՑŖųųųŽæč/ō u°ĶŲ3ߍËūū~U$NŪ‘Vž āœĖÎÎ6̘ŒžĩHBäIîævŌÚšēēĒííí&'ôq=;;ëį˜3ÕD8tœÃééҁPUOåZé¸Ũk0´ÖšĶĸ?Ė닋‹–ŠYŪ'į´÷Z__¯ûûûâ)cOú”í ‡ÃŽĩŋ´´TßúÖˇjyyšŪž}[ĢĢĢuxxX§§§]Ŗ_dĘą´´Ô’”ƒU čäe9ėŅõõu—Jĩ‡Lļ‘=`—Ųfû‘šaŪŗqö ĨUü27­ĩûûû>ĮAž€w•§QõĨņŪKKKĩŊŊ]=ĻŊ%Š€lXXXhŠUæ™Ø?:Ēäoķ (GYcä^lÚŨŨ]­­­Õūūū˜SŧąąŅöYûH÷HŞe6÷5ũŸ˙Čķõ1]X@5˙䆐å÷ČV2ŒŒsžãsŽ,Ũčw“÷˟ģuI˜ÚéyŒˇÛp&ەĨ“ÕĘđ÷ä÷ōžyiiÄä÷˛oōČyĀ×ũ0uY ĸjTĪ•aÖ땆 p˜ōžÆāČĪ&Į,Ûežūēž^8‚~fūÎÎÎvšĀ¯›‡"ų}‰ĒƒÁ ß…|&ûíââĸŋįsŊž8}IËĄ ĒŦ|Ėzū<Ëû]\\4ĶĒsŽČĮđ3,˛ŋEzüÛ{įį'maļosĘrnˆ øcŪNŽ}Õh=š€ãɟ{'īígŪĮxëlrŪč§ÍÍÍÚÚÚĒÍÍÍZ[[ë?U5fW$Ožģ}}™ė‹´æ€>ĪõŸā4į[āũ´]?ųN>˙ëöŠÜDB&?ë3æ^݌kŋŊ0ß7mÛÁ9æ¤zûœë ßÉ~fũēWŽį´ž‘ũ]õTÁí‹/ž¨wīŪu[ƒA6Ûü|}œ×33˙‰\y#"d ä•ŦöŖ‡Ēž3‘`š \y8&ũėėŦC.ŒĮååeÍĪĪ7ë"$žĖ~†‹1˘`‘LkÖˇyų{Ic3#ˇQ'cԐĻĻ]?ä0XdŌ lP&yĻ„ä‡Üdkkk,äŋ´´ÔlRúdĶ“­ˆ TtŨ˜îLF“¤9==Ũ5ąĨįOMMuv!^íÎ>ö<Ŧ“ÍÃe>¨BˇŽ*Gy¯Ŋæ-]ĒyE^eríããc­¯¯ˇ>=Y_kÁ†›eä”\œĢv„™6wmŪBčÉ~yˇõõõ˜ēĒęĘQžaŪIJôūúčØØØ¨ķķķąü†GŦ\&ÅÉ Áį<ōžËËË-÷ɨ”¤B,ņd~FXīf.XĮĮĮ ’š“yVĮIųÄÃÃØVžÜÜ‰Ö}vvļK$îėėTÕ(¯äææéđ%Īvom­I8´EdEÔĘ\00˒–ÍëĐĸú‹ŋŊŊ]ŗŗOIŲĸrXmë§Ē:÷$ĪvÆ$™ZÛú–|Ãü—”úÛŋũ۝?055Õ'ŨŠNdUĨĒQYUL:û/ÚäE#///›íũ3oEöœs`=ŠŠmoo÷ØÍÎÎv.AÚ'’F(Ú˙<+‚Ũb'TZĘHŲ–õlOĘâ Æ™]ĄaŧÍOãD^—ļ˜Īąˇ/U=9Rķ=ĩ~DĶÎĢ.fŧššiYÚ_|ŅëOŸģ[ķ|}ŧ×3˜˙.•CtĸÎj*’}€SLWjĪÉH^$9ĨĻÛĻЎĪΎN*‡­#úŦ%/ų›´„æŪ32TL ¤ÚŒÍ¨jFļ °JÉ´frp†}įææøJģŋŋīÄĐĒęŸ ĘŨ+l ¸>ŖŦU Ąį¤WĪ|}CN ” če=~*÷$ÉP …ĖD¨<ĄH*ĒĒĨ$§§§5==Ũã7;;ÛU‡ÖÖÖZ2ĸ*‹ūTÉwŦ훛›î'?ãp^__×îîn;Š9¯ŨœÆ:æđîīī7+oM#_ČÛč÷§ĻĻjssŗļÆžÃĄT%ĘeS"ė ߯ÆFŋËŌŌRíííÕũũ}œœ´<åúúē΍åϐŅ`ÕONNzÎ8ŌNËØzg6×ZÍdé”Āqb8H^ÎĸõĸéÅÅEŊ}ûļXķUnÔdčųú¸Žg0˙ \6ŊĒQՒ‡‡‡"Y2íëtuY}#=ũdŨcfsgdĒFĖa2ڒU2˛ĘPŅ˙bl˜˜"˙¸Įųųų1m4ŲÖĖæ€#ųĐ’W}waaĄAP+ö‘Mā,ä čÛôĄūĀ6b$•Îsŧˇōkĸ›››œg“I–oyyšû‰ķVU×iē1üUõ•šĮÆncccŦj…¤é,ĄIO‰ē“zN΀>đ3sS™>Q“ĩĩĩ~ĻÍΆ•Ĩ)ÍOsđää¤õŦ6] jۍC>Ķڙ››ĢĶĶĶ lU5ģlžVä;ŽM=ū‹‹‹NÎä,›_Ā"p͉0ˇĀ椓†ŨĖD\—6Æž dz'ķ 0ŽĒîëÍ|VŦáápTɘŊyķĻe?æˇH§WԂāÜŨŨíÚëûûûĩ˛˛R>|¨åååÚŪŪŽ>ô;s(2ņR SĀUĨ ¯Ī™ĀžäFļ/O æ däĪSFŌ6ĪsîšßƐc č!§f VŪ`0h xxX O‡éŸŸ×öövGvôËŅŅQžžÖ_|QGGGU5’ôp˛ôŋL6Üs9ʒbõGęááĄÛΉ´xoŽoÚWģ÷īß7ˆĀ“–utt4Ŋ°ŽƒA÷ĮXÂ;`äEZŒKF7äédÂ-đŽd­r°æ û–ļĀwĪĪĪ[æÆáa7‘jųH]ŧ>3¯EÁE _ŧxŅû¯ČHÔdTųųúøŽgÍü'p k“K¨H ŧëw˜%† @Ë*$)UՉaYšÄķ0ÉX?ŊMVˆ’Ŧ‘3Ë°Ī¤5ā[X5Â@„öģ÷ĖĖLoâYÁĮīUœ™™ՒfP%Į%Ķ ´x‡ŦIŽÕÅĨV#,ø<ϏĘ*#™ėH ĖāguŽt‚|?e9 žŒ­g’ųhonĀĒ%˜E`!Ë>Ļ +Įœ“ĄiZVŋ ˛"Ž6c Ķ‘ĶķÎĻ/QĶω]š9U56īĢF%@ŗR“÷ôŽ@!đbė50€†ŊÍ~–Ķéĩšë}¤m™hįšØŌō žTP™™™iYÕÅÅE—ĈNž‚ IDATš÷’ˁÖĒj ›}Čpé÷ŠŠ§3 €™Ŧ8peō˛9-QDÆēWĪÜģäĄP™āoœR*ÁŅæČE˛+$‡qÃÄĪÍŠa˛Ä°[l Lm2æˇįrxHG2ĮĀ8`ëėėlė$]Œ;‚Âú°&ŲÁ`Đ6Åē1ˇZŌȆĪĖĖôœŸŸU=ŗn’•ĪÄScž D“ŲT„Œ}đ uī‚mĪÄZÚõĒŅĄe)ŲaŖ3œ9"wÆ.#ˇßËúî"#Č‘n˙ÖoÖyUutQûÍ-ûšyi\‘^šˇæZN~ũø¯gfū¸lŠMÍßŲL4Ō°"šQ+ !y]`U5¨rßĒjVŲ=1/˜w÷˛)%+dƒ§įˆą8Œ~ÕH>’eڒIpiÃđx/,™ŸļÕ€E˛ųŧģģģ>4 +BķúuɡÆpx/ā L­k&NŽŗžbāiÔĢĒ+Ax'˛¤<°D$ IļĪfœrP0öŠë$ žŖ/S;š_2Dãšíxųōeƒ‹sķ‡.ßgRJB6`r|ü1īRzē~zÎAΏžžŽĪ?˙ŧuÕÛÛÛ-yņėĒõ¨qpäu¨ũíŊEG”0ĐĢFŅķ2%hŊ"EāE-0äæUÚŠŠŠ–ˇ¨Æ‘ÕX8ēžĢoÉyĖiãc_9lœ<ë”DîŗĪ>ĢĒę\UĩÎß=ĩ‡Ŗe\2/Â:PY(į—úÜ××םŗ@XUĩŋŋßãn,_ŧxŅUMäy(˜šG¤ )áČĪφël­" €<6éūūžöööęņņąË>>>ևjnnŽ^ŋ~Ũ“ņ68 ƈ ōđđ°?c-XëšĐĖ“Žloo÷ŧL˛ãîîŽ>|øĐå?s­omm5™`íĶÜëÕf´=É%sËÚ6‡ĖÁŠŠŠ¯0ël؊:ūæƒũđōō˛Ūŧy3uö^@Ŋõ "|‰ÅÅÅZ__¯ũũũ~ļĶ€I–8ā§§§í|÷ŖŖŖąœ‰”|ž|ųō+‰áUÕΚ>~ž>ÎëĖ— ƒĻ2å4™\úđđTōs‰Ũ0”ÅJ|†21‘BŅ<’@ ˆHā¨:Šƒ“ā"7šdëą%ša¸īŲŲYDŠß‘÷ĀĻ.Ģ8(1Š_l‚˜›[éĮĮĮŪÜĢĒÃõ 0–ž‘61}6ũ………€ƚܠ”ŊĶ6YĀfccŖõŧ’q÷Y˛NÍôôt—ą3ļÆũėėŦŖ¤:§§§UUm,ą_@œūP  7Ž=˛ÁҟøØŋ,ig.ŖĖĪĀ´ŅŊNOO×ÁÁAW.Ņ?QãFˇ ŧ9AĩĒ:‘[‚é`0øŠ&^ûÜŋjä´ĐŲꇇ‡‡vrčÁ9kąĒšÕ´­—Ė%˜ž~ԊsēŦmåbąû ÖĖ ŌŅ ķˆd~~žVVVÔz§¸Ô^ĮŅøđĄËJJėS•Cž‰œ—dI‹Ŧ]€Ķ3ô+mx&÷ŗæįææf'pĻŗŋˇˇ×ĸ„â•••ŽČI‡Ë‰´4îé$Ķé|hO‚yÎĒž7l¨Dg‘*ëōââĸöööęāā f„Ãņņq۔ŧĪĘĘJ¯I˛>N+ŲÎÕÕU—:VĘWt:“úEüD N%‡ßŋ_———ĩ˛˛Ō'Øf)SŽÃ™äX°1ƕ”qrŪ" œEyLú€ČŪ`]ČA@°o"{éÉÉIG Ė)ļøå˗uxxØVJÚnnn:į“qqŅë‘Ęąa6Eaė1Ú3UŽhķq_Ī`ū¸ƒdߓņnTw;ÃĘUŖŌˆil(™ŅébČŨ‡V=Ģæ$‹(ŌF,KN"ôœ5ĸz sĮkë~ÎŪmä6ũ ‹sH;€ Ā §Ī2ú`s×ī/^ŧh ŒÃÄcģ0MŽÔ‘ú3K ûØ(˚~Æō ‡Ã1;–‹3öđđTw?+xŧ€ƒä3@¨ŠE0lČæ ūzĒFŌ,ŋŗųrh÷3úbĖÕxÖˇYũĢŋŒnūĐ477WģģģŨ>›f˛Ãœ<ũQ N `TĻ#;>Õ'¸ŋŋ¯ŨŨŨāú@ÍSfęŗÔ™“*™ĢJ3ĮÄŊĖyÆeRú#ņ¨KûmNI@Ī$QcČšđ}ŽŒ„ÄápX{{{-= ;H'ĘûéKŽ{‚Į\Ãᰁ<€î{jōëwũ t‘jeߊ~˜æ6g]xûömĪ 7}sæ<°ė—s>ĒĒŪŧySÃᰎŽŽÚVI7/8/mŽ §‹†:ŲõãĘĘJ÷;7;;ÛöK%–<ہj-dŽB曈ÎŦŽŽÖÜÜ\ŲĶoûÛc‡›%šÄ†Z_Nī•÷`.ommĩ.ž´*ׇ:øÖWUO‘š!÷÷÷íØXĢ"ƛ››mĪSF¨¯ŽŽęøø¸ļļļērX~–ŨŗÖØ!ŸąÆnoo›hš<‰ŧęé´eßÖũ_TšDtˆš?_įõ æ?‹QMÔ(¤Ü Øø\Ūk„ ’K˛“×}ĢFa@† ›|–-Á¸īå˙'ÁoÖÎī$ËÎОdņą$Ųf}ŅßęCŸË°ˇ{č ›‘Mßw8/Ā|^鈇ŽŦÅ­¯rœ0>ŪŅFbĶÄcķ=ķųŖ”!ģ|OũlcáŪëĖ—¸2“Œ$ãˆgr%J•fTRƒjsÅØ’?UÕĖŽėût.RįˆUÉC:’mĘēĐ–€U’Ģ´ÅûzyB–@LЊzųōe‡v××כ™ōŨÚ¤%Ø'‚MÖÆZ5JäͰģЏ’xYU­iVŠ@ËZõ@Ŋ –ž8e'Ā,0ŋąąŅLǟM֝ŸtÆ´_X8õŪ6<ŽĀɑöLĪ‘DWUÍę-//ˇ¤ Í0tŗŗŗuzzÚm&ČąÖ§Ā8Žũæ9'ë%Ôx`$ąÖũr˛üžc.'čÁ¨JčĖū5DR6ãsĘ:,†ƒåX9ϧ§§ũģĒǃƒƒšŸŸīÄÖGÆHËõ)7#$‰€dîŲG[“õüŅũQ ‡ÃúéOÚķ†tË8ƒÚŨŨ­ŠŠŠąC9´yÂÖÖVįXŠá˙ū}¯] 6Yæĩĩĩz˙ū}3š[kAôĘ:bģT˛Rō‘ƒ9==]ŸūymmmuE’\;äcĨ OûN΋/zLŲ csvvVįįį¯“‘!ãC˛áŊ8TȋŲŲŲ.ÛXõē:@)ÚԛkĪd‰ĪųųQxë.ËļNFûŒcæl)­ëy™„NfyuuUggg}Ú,[$ǐ¨\}#˙IûíäTRĘãããļ)lÖp8l ­ŨäA œąņoŪŧŠ/ŋü˛žŦģȌü R"2Löøč討k}}}Ŧ|¯Ŋ&íą(Ģũ:‰šįëãģžÁü'p1H؈ĒQU…ŦĶNŖš™øĀ /ô™ē{‚Ô‹ĘĐĮФ ˜%īüÜũĮ$ ĀÔŲŲYmnnö;$S{ttÔb%Ķl”ڏ=›4¸éPTJđUĘHú=đ’'}r„‰…EÔf_\\ŦƒƒƒîKy UÕŅíōn’,1zU5f¸É’l`ôŦ>c3ĪqÃ0ųޞ×××Í×ŗ”î̎ Ų“@´æI:ĨŪŨeæH.~Î’YÕĮ|BDbnook{{ģNOOŋR‘‰ūģĒjgg§ŽÛ™°IĨ8Ā ā™l´JŽßp8Ŧ7oی9MÆ\ߜžžÖÜÜ\Ë(\y¨ĮĐŧmšŒ™?)Hš ĮVÄãōō˛Ĩ1æ ũō‹/ęŗĪ>Ģī|į;uqqQ?ũéO{'#>ÆĶ͑Ę$x}ussĶ3'¨›žžŽäĶĶĶuttÔvfŋgīÚ@\$s›ķ•“­o€Ë‡‡‡ÚÚÚj)âââb­ŽŽ6# ȍIîö÷÷{ÜČtLæææęđđ°×ILUõŲŽŲŲŲ>œX•J‹ĪÉC‰fffęõë×mĶSĸ…„ 9Éĸiwwwc‡üɉ"eáôëH˛+éQÕĶy™‹ƒ8>>î\Îļ›Ķ›Q“Œ.žŸŸ×ÆÆFˇcũđđĐIģĒiqn÷ööęÕĢW ŧ9Ų“Ĩ˜ŊÛbŒ8,ŗŗŗuxxØë“mģž?ĩØŊbÆŨģ°yIV™#œšįëãŊžÁü'pؘ“=Ã$¸0S“å'mÄ@ŠÅæV5bfƃáJvņlF ρ(Œ ¨{û?ũŽgcjÜR5Âī˛]ĸ÷ ›„(A†0AŒöd2ī ŦŌtē0TU_ ũ§fšjTß>ÛkãĖdâŲŲ'ũޞ›œ0Ām#đžXÖÔėŌo'+Ί%´f•#QÉbUŖDKã‰Ũ80¯~Ī ä´q4ÍŅ €Ģ’r DSŠŲ=99Š™™™1ĻļĒx§” ķmÜE-0x€"†[+¯BŸjæVV-É$që$įvÜÚꞙĀû‹_üĸĮI|>įT&Į𗎎ˇcL;@ė{ú)åCÖūäIšžŖŸÍÉápØÎŌÔÔTG˜ČūæoūĻĸÃE˞ ĀS2ļŪ'uæ"mÚx˛'Öģ*6šžĖ/ËZĪ>É9hNŌÉg¤&įræŒø˙ÉÉI×įˆÉ×yxxh}“UÁ\˜uo:Ä@69‘ÄjmåMFb8Ŋ™°­Ä"›×ōōr;."rYŌiE°5Øh},ZÄÖŗ%‘ãø?Ɋ5âĀĨ™™™v~]Æ ‘{[˛äÖ~UõX\]]užNJN9}ėȋ/ÚX^^îäTĀÜū„xŌ>íâœČyrZ–Ō­“{°H'ÂgRēų|}\×3˜˙.ŒYÕČÃgt?—¸˛˛Ō e~‡ŨÉēÄ6yŦ™ Ū†D_îđ#,ŒÍ¨j”đčûšA¤ąÚ“›Ÿ ÜňVUKe2@˜đ$įt€€ÔågŋĻ.9Yj˙WŪŽjtäũåååXbĻS1ĀN” €PåÆ&>==Ũ€IŸy߇‡‡:==í Šęŧ&Ā$;ČjBĀNĻSg{yyŲ‡Úˆ0ŲqČy($Oftځ]‰mX1›# B&™Į@¨yĖŅ#S1žŪɸpzŸų™ŦĒ9EÛ:==]ëëëcĨENNNĀs"2b$¤.T œÕââbĩ3FR9yJ%‡ (ĶGÚo.bĩõŸųųuQ6N‡ĪxÖĀúúz­¯¯WÕ¨ Ĩõģŋŋ_˙ú_˙ëfk1× ‡-p’˛>ĻîīīkkkĢۓ9NėtOR @ME :­ķôôtmnnÖÉÉI'C´î#ĸ‘§Á`Đí0' ¤Ũ$\9ØGŽNÎWī˜92ėļ NUÕÎxæd>Ōōōr;ë"°īĀÖĨvWũ¯ią‡“ŠƒÁXBú˗/ëũû÷męõë×]ũčááétdćRި‡z÷î]-,,ŒI IDÍe˛:ŌGā–ŊĒåCMMMÕįŸŪUĔĪõŽsssĩššŲ6 ÍæāŅŅQ'!#4ϧ§Į4í"’æŖ~wÚ,i”öēôģ}.O1&ųÉ*Jˇˇˇ-ĖÁČrĄĪ×Į{=ƒųOāJŪ&ŒõUG !)ŲĘĒcģüč`$ąu V,Ģ~ø3 :#Ÿ‘ųēÚÖ)­Č÷ą)’†´Ēר@h2ąz6EÆŨf ŒĪŌ+ÛØŗJ†M˛DĨÍ,..6(nŨŗœÚņŒb`⥔°O™‹Āž`û'6(Î5uuuÕz;ā]WWW[ûŋ°°Đy.Ö g;ĪŅČiÕčĀ$ļGTķÅē1—Č㖗—ģ–šqOÛfn͇‡‡ĩļļ6v`—Ŋ kņË5‘Ķ÷kkk­‡]X3Īæ<&3npEŌ!ŧ:hIg C˜Ö†œ:ŨÔ{ųNĀ íú¤ŽšņĒō666Ā3ؘúL`ĩ0ČÂŨ¯đĢö$šEĒžôæt­ØT@@á ²‚ šīy_ënŌŅb˙ȟ2‡$ĨZ$ž••jüŠĒŽ0˛"XŪĢĒÚvŠÖHÕėGŠMb7Ø÷“““fܕD™ŸGGG-Sņ~Ū‡}4—677ŋRú՚$­3–æēuo}cí2ŪėŽũbiiŠŪŋ?–§Âö[˙æĄ Z¤gúdccclOf/ĢFQ’ŒŽßŪŪöYXX¨?üÃ?Ŧįëãģ~ō“ŸÔszķ'pa„3\žā+Au˛Pžę'Bü˜lm†ĸ‡Ã§ãŽ“Áö]’ŒL•ŗŗŗ1™‹īi[U5[ëų"]7’Ū_h–‘’›:ō †^ēĒđĀphCՈŲŦĒŽLېL–#ü*¤^UÍJ wbæRʒ÷Đ%Él¨Éú(÷†MķŦäÉÉI38×××uzz:ÆŧęG%VĶÁO6:ķDU mĶBöXKNøYD#5ŧæ”q—`hl0{äGwwwu||ÜlŸTė¨ ÚĻ—Ė”$< Ŗ.˛! ¯333Ũo>—Q IÄd>ä ˜Rsüôô´žĒl`ûiÍÉä'`Ë×ÖÖZR´ŊŊŨs˙ęęĒåǚhf HŽ•R3lĸÄ:Ėâũũ}šDōlîííõxˆ„dē9?55U§§§-ébC2’!Ō–§ĶZĶt‹Øˆüš×ÆÆFGđ”‰U>—Ū=õČldœ...jssŗfffjoo¯íW& Ŋĸ7{k”ĖÚų°&ĩ[ßI˜ŗ1ŊķÍÍSiĖõõõ.uŠČXRŠĩ°°ĐĨ8Ų@zõ”>U=IUHšD åWäšĸ^;;;õķŸ˙|lž—´îĩŊŊ]õūũû1}6yZUu‚Üä…ČĖŅ“,Ž€ĪC”°ņ@6§ÜúeģĶĻNJjfŽdD’íļŽŽŽÆ¤YĄŅŸĸfģ’Ė ĩžž^Ãá°Į"[ÎYHyĒŊhjjĒNNNÚų"íÔŋĸŪInˆ—¨Íķõņ^Ī`ū¸ ā)eYb~~žkQg"(Íģp2ƒšŒģ4%ÂÚā9>ŖėÚÆÆFžž60 uJžh‡ šIOŽt ŌÁ¨ĒŪĢĒ eĘwƒAmnnŽąī@WjÂ'ŸCĪ ¨ÍĪĪˇÎŗjbÖįY B(œn?kĖ;™˛jT҃°ŗŗķ&9O}ĘÆÖ‘"éÛ ‹'ãņǧĖtž<߆à H]q&HJđLЉû âÆ45˙Ž9 %<ŠxždCđEŽĸ4"™Õ$H´€KĖēä[ 'Ĩ6Vī5 @0™ƒ‘sg~~~,5+ĸĐÉęŸdį´9yĸ8;đôôt—õ›ŸŸ¯÷īߏUZ2oHÔë7?õåååeHÄŠĨßÛÛkGČģųw:ˇÖŠd=ßá@æÉ¤€&ŠØ`|MũƐ pĨŨŠĒÚÚÚ_Z雛›.…ä:š•]"匭 clü­‹ũũũ~¯õõõ~OR(˙֞t3:%ŲŨš Y VŗÛČ ’šŒDąk*$ĖĘĘJíîîÖĪūķ珏蒎Úxww×6‹MÖˇģģģíŧ¤‡]†•C 4îĖĖč”Rkœ#¯ma}@Ö633Ķ\ŖÅÅÅ1‰(Į‘mHÅÆxžĩČQķŽI”XŋÖ>P?Û(`>xOûŲååe'†§]!•@ĖîsŽÍ%m☟õZņŒŠIœ}ž>ŪëĖ/}vvļ“Ģ...4,˜›ĀââbžžļĢF§ĢbÖmĘ 0 TUũģõõõŪdU$xxxh9 –ryyš5Ū@ öW5Ā0ÃļžĮˆ9ʨČ$2 tqqQÛÛÛ]Ú,šÕd€.`4#ØŗŦ^ĸ]ĒŗĐļÚ02âÁIɨčŋurrŌ}Ŗŋ&Ĩ/æg[tĐXŠbbnaF9†  \Ũv`Šƒŗŧŧ\‹‹‹urrŌ҇Ē'šxFHžüō˚™™i;“ n{{ģsIČfĒF'¤bėĀ`0¨éé§ę&…Œh~ųå—1Ąm–w1==ŨN…œšĀ,Ā—IûúPæŦėííÕëׯÛ&dTvÛÚŸĘ‰ ė“õĖAV‘JR­{ŽÃá°vww{mú9û:í5žûûû])ɀĒjí?đī„č………ÚŲŲŠÁ`Poßží{OŽÍ‡upp0VڔƒËŽ#bŒ3!ķ—ė§+ŌcĪy˛ÎžęØ[ĮsssõîŨģÎEĨôLŖĖm0īgggëīūîīÆöeûĮp8ėčÕôôtŊzõĒž¯÷zķŸĀ•!ņ”:Øė€W5^ˇÛ=°MŨÉúÜU5ļ!g˜ĖŽ„´ŦR5r€’ŧ'†'7}ĀC5l&Cäbõr“Čä/Éĸ˜1 @…].´Gĩ—Ēęī’ŠT€8 ™åÉQ@čīĒcQõ•÷žžîúÎ@ –3•v:iޝ{čĸŪāL'‡“ĨŸ0˙™ėčP…\†´#™ø|OĪŠ>“’ĀBdđÍų”„Ĩd,įtŽ‘Ŧ⡟ŪëĖV cx,tŦMÎU™ÔWfœ<ĩT;č¨ąĢ’Gj1ĘXĖ(YâfˆÉFų/›ļËÅP2–˜.šČ”ĩA3Ȍ$ ėķJ÷››ë÷J`-ŠIŖÔ֊V+ظ´ƒF „5Âô‘čT€ĩM䐛Ÿ:^]ŸŲT“ũ˛áųÃá°Į˜ôŪUÕ ,I]ōÔÔԘlDetœŽŽŽē=™KŪĀą0‡ĩ˜.ÎÖÚÚÚØš¸j!´éúį3ֈ:î´ér:ĖssĖX€“yU5:}0×v B€F×z4oõSVéÁ6ĢÖáÉÉIËģnnn:FĖąĐ~cp’‡ Įë{kĶ<÷3÷å\$:==Ũ -…Hš—ų$b(ÕÖÖVˇ0ã4dYV‰č"X™,‹YĨéæ”øđĄķØ,vĀŧåô¸oÚķ›}vvÖl¯y˜ŽŦŦÔŅŅQŨŪŪÖĢW¯ēYYÉØ“xpĀonnj0ôŲ 777m§8ˆ ēxöJÄH´F{îīŸJG*Ī( @•ÁRĪĪĪ×ááakŊĢF‡”­ŽŽ6‹/A”“"Y—ķęlQ’´€ũūū~-//×7ŋųÍúėŗĪ:ō€8H˛)Ŗ/öķ™An”ƒupvvVoŪŧiF]’íÕÕUG†gN[’:œôÕÕՎNŲWõŗõlŋšđŊápXŋúկچØßĖ ëŸVÔíęęĒģoÎË{ņâEī…/_žŦĩĩĩąSpŸ¯īzķŸĀEÖ$ëÅČX´§É83š6ķÔÕÚܰá6BUõĻCÃĘX‘5`B„ ą,˜|ėīüü|ũĮ˙õgŋö=ūäđ+?{ķ?~ÖN VWH<x–ĐķtĻ>O&@;<;;;V3™|GøĶxppĐÉŦķķķcIq)ãĐO€—„YČÆÆFlŒŒžLÖÅøJ,刐%ÛmI=ˇq¯Ēf+S—ož¤S Žųb(=/™uĀÅĄRaFY$¤ŠĖBŠ`<õ; †ũ.8‡Ę}ڌSžUUũ9ĨRÉ/›= ‘8 Ŋ˙žAÜôô“F;ëx{mÉį`9†@—š¤Ã8mmm5MG”Ûjí“ >)ČĒ€iĘÛ8ĸÆÃŋ°0ǁžąąŅĀ™S@vBĒ’‘$vB Đ×.}ÂAœČę>|øPˇˇˇĩļļÖZėÁ`ĐIėæŦ~ąöŦi›¨Šëüüŧvvvęööv,įææéR‰ßsssu~~^GGGí€$Ãî3æVՓt ȡ˛ fJ­0éū/y#Å9@dh#­?[›i—ũ­­­&ZōŗĸĒ™'ą°°Đ’2mļž%Ũf՟üŪÆÆFmmmÕŨŨ]Īe$€gļl‡ÚüėĐáááX¤—­áÜs$ŗ<Š5Y!Ā5¯kccŖÎÎÎęũû÷]÷Ū~e +kl?›ŸŸ¯ŊŊŊēģģë›"?)5’ÔĖÆpėĖUdŲëׯۚco§§§[ÂgáÍšũ|}|×3˜˙DŽ”§0ū60yJp„mēU#iû‘¯ø?€ŠH0/ÆÎ휖333„äū_wųšwœÔi§´†#”ĖŦßšōŗŦ0gK Ąo|_˙ä•%˙ĢĒĢ/^5­žŸs"Ĩ: c@ŗšI‚ ôĢj,úáŧmæD˛žož¤Á30䮜Ÿūχ~7ˇ€CßËļĻ|Ë;ę‹Ē§ōŒGGGc2#:YÆ6O'­Ē1ā‘õpB8hYí‡<ˀ&đôæ2§ŅÅą$ĀPš“%Í ī‘˙Īų‘'nš‹æ‡Õ3ĩ1E%ęĀ sīYænží$s­U=é߃AX,žqĶF&•nܸT§?Į.ŸoÍyŽŋ'/ø"ũ?Ąo8íÖDĘŨbŽëdžŠ1˜´ĩîw}}ŨÎT–kõ™Ô˜ŗãĀģĩ$ᕞnnnŦoŋîũU@Ōęæk3‡ĖؘÛ"ւJk¤Bæ_ÚÁ< )ËxnmmI§ŌķūÚ>I$ŨˆΓņæ8dŲKs)å”)AĒí{ō_”ŦäØŋzõĒNNNÚ.8œ*å…ÚkŊĻ-´EØgc˜ŅÛįëãŧžÁü'p؈z›ŦĐJn0™ëįY"<"í†ÆāøŊK¸>u÷yĮä˙ĢḚ̄HüŠĒ1öÃĻæb@ĩÅīÉQRs;;T9e˜…”ũ؉€UŖ  †„3åģØHĄfŦšöúŦŌ›\SĪ­Ī û"ø!99::jv Ķ{qqŅIĀ~–UNŽŽŽ:i6Á –šX›aęEkË$Cé€/‘UF”Áŗéų^†×>M‚,Ļ4Ŗ?Xs\›“šĐÚ:)Á0đîîŽvvvZģ´´ÔɅDlđc­qdÖ××{ƒöÍ×dœIÜ+˙Œ QYP Aš:!|ā‰Ü ¸"ą0Í%€S›ĻĻĻęÛßūv}ūųįõˇûˇõÅ_tâjFĩúdKĀöž———}”=g ë^ž|ŲÚpk¤hmm­ĸǧdI‘kb˛üŖŧ†,[Hvąļļ֑@}Š>ûŨŨSYTš$’_Í+ß{õęUĪgmÁ [˙NŅMÖ4Ŗ€.}v~~>–É:”čøøx pÎÎÎvä@d ĶŊĩĩÕ6ģĖF‰ēvIGŋC$yãŨĪÎÎ:ņœC+Š4ķŒŌF †ėCŪ›lÄxe¤÷ęęĒvvvē'^¨ûvÍû.//wt:åwUUĮiËoßž­ííí1§T)QvŌ9›››ÍĻ›_‡‡‡=nl) pũęÕĢļ#ō`ŽŽŽzũësLD ĖiÉömÄ ŠPV#{ž>ŪëĖPįbôĒÆ“˛ŌŠāé{žYįÛõđđĐĮg“ ĀhV$aĀm@ŒjUĩN0e6 ë'˂•ČīæûÚtŗŌ ĻđĀL1ČĀf–+Ë{yˇåååą(‡Ÿ“$`są;&Ö˙ĀĒČÅŨŨ]W‘Áš“K¨īģj­{_ĪļĄW}õ`§Ēƒjü„zŗę ¨Ė~ĪyĀ)´AĶÃŽ$)UÕU:€›.pķįūīí|ūŪ÷žßķc˛BŅÃÃCĩ´PD‹-gC$ŋbĄÍÜĢŦĩÍÍÍvzØ%`˜s`Ũ¯ŽŽÖwžķŽä2Ž*gŨÜÜÔņņņX˙¯¯¯ES‘õúõëž?)âúúzëŅĶîÉŲ˛Ö­[ķËøØ§ė#YĸT“.--Õ`0ŗÁé`žž~ĨJ bHĘĶ÷ë"ĪĪ×Įq=ƒųOāšũJ¸=āIÔށ3l=p `ëëëÍĻĨÆŋĒ牰ŽãȁMpJÍq‚6ɉ‘ö:XĮ‡‡‡~Ĩ H•xi\Čj|Æģ›B˙Ø&5Ÿ§§§{Œl¤Xo ĩp6 Į™ÚØØčû&(t*ĘũmjāųųųZ]]+hc:99éū'EI'I?*¯ųūũûš››ĢŸ˙ü)'â{ßû~oˆ´ļ*[üÅ_üU†s— ™+ëëëŨOYÚĀČ$Iįååeį—p>8nĸOôŲ@ĶÎÎNŗ×)ÕŅO‡‡‡]īŨæLBĨ=Íéd–­‹,IXUŊA“čg š´ÍØPæ+pā3Ų{īââū‡˙đęęęĒ~ú͟ÖÁÁAĄū´ž´ŲZ™™y*‹ŅLŨååeíîîÖęęępÂäj‹C…ÎĪĪkeeĨz‰ētŅ4逛“,pJgff¤UU¯õË؜zxx*ƒČAÅĀĘc1NUŖķ<8īė”ņÍ(Ėââbļ,BB);ēŊŊŨã„ČƒîäÚ 3ëä䤝+ļO4éęęĒvwwĮ’õ'“ˇ%B¯­­u$âîîéPŽW¯^ĩmQ‘É}3bʐī!>ØÎĪ>ûŦ&g€“ĄŸ8 mÛįįįĮ"lËōōrũŊŋ÷÷ęˇ~ëˇęßũģ×s/ŖLĸhNz}˙ūũXI㕕•v*>|ø0Vū•ķ”ŌKĪĪŗ<ädŽ ĮŅžĸv|žÛ"š&˙G”Wd‚ƒ˜rÆŲŲŲ:88č3bŦsŽ({aū=_įõ<ēŸĀ•ō‹{ ~3(ŲëdđmÉāō1 <>Æ}U€Iāˇa#™TUc›d2ņ6`W˛|žëŗūϝÅ0j‹ę36` (đmHæD˜ŨéÂđĀ|UĩĶ÷R āč'ŦljOķ}lđŠĄĖ’„ &1Š‚įiƒž´Ō1L}6yPŪ ¨t¯Ių đ7ķ×UUõ÷˙ūīū'đ9ly•ˆ‰ūøū÷PUUõWO ū÷~īGŨ^r ˙ž,‰—2 ĄĒÆ–}ī'J1éHæ}ŗĨße‰O€™\Æ5OÅŗAįŗs~p¸ĢÆĢû`ƒÁXrēytĨĶn›'~/"÷öíÛēŊŊ­“““ą\áp8ÆvzĐĸŋs¤SœQ+`:åjšžĖ҇‡‡ąy¤Čˆdę­ÛÂúžü Ëč@É!ÆÆāĘAĻ܌NŨú˛n<;#‹Ú5y6 ˜å|ĨžŖ]úÜ8ˆĸqڒŽNÎcķ-mĮĸęÉéĸKg“IĄR>•EŦÛŦ´ĩ´´4 ŠĒ–×!2Â(a:ŗ3ŋÁZGĻHR_[[ëDZgÎ˔ûˆxd?XæLĘ7Ųx{QF6鸁z;ÃŲB|LĘĖ RÎdÜ2gA¤yĨÎ*ZĪ×Į{=ƒųOāJ œJnMÎ(Ú@ą YP"Ÿ*ôd8 @dj’ IÕ(!—ėčLM#–Į%žKŋ:ë›˙Ķį57Wc5xąU6Â<('õũūÖWŒVĶghU_ž|Ųė Ō¤Fĩ>UÎLōX†ã}NģļļļjjjĒŖN8ŦĒf]îÔãŠ|`CI24U5ĻÕ_ZZĒķķķCīfėh8=771ž!dh0Ôââboļ™Ëđâŋúëŋ~:2ūˇ~ëˇ˙“&wtāÔdĨÅææf]__×÷ŋ˙ƒZYYŠ?ũ͟ÖīũŪĒę‰E”hč]ĶĄŦĒŽ""ą/Ģ<<ŠjT2ã.ŌÃ)Ā.//ׇjnnŽhÖ××ëË/ŋėM–.W‚ę"@š˛ĸ3ģŊŊíņĀūq,ëááĄ666ÚQ´ŅĶūAæBÕč€ĩÁ`Pkkk#ĸoŦWš*q D[DĢŦY6Áœá lnnöŊ°ŋŨWWWk0ԇZš}Ŧz‰Yƕ–Ũx¨œ“ce\ĩĪúã0|ãßčj:ĶĶĶMjœœœÔææf>Ĩ3úFYZā_‘8Ĩ}jjĒļļļZWíų×××õęÕĢŲŠÖNëS‹ôâŋomJ'R>Ņëׯ{Ė=ãLĻ"b=Ɯs°ų+++ĩ¸¸ØcžÉđĸpĸ=$E×××]ūHO`-J`ūĘˆžpbD*­„ÁíímĪaQ¸ųųų:::ĒŊŊŊz˙ū}Ŋ˙~ĖyĶ™—ą°°ĐQ÷b'åīkĀ>ĢİQ™ˇãšōD ¤gUÕã bŽä$˛‡C#ĒĮš™™™é"Ē#‘JéĶ´ĸvĪ×ĮyÍüņ˙ņ?ųâ‹/ęĮ?ūņíļ<_˙…ŽūĪ˙y'/ŅP3F™ŦƒÉĩ)ûôļŒ+ā–‰Ē H‚˜dÁō@›r:™ČwuuÕL juuĩË:r míJ (´iú\žbˆMĒ%Û%gŦąŒX\›ÃpøTųs(”YŲŖƒ=ĶOˇˇˇõûŋ˙ûõ;ŋķ;õË_ū˛Ãõîãˆr÷• i õšĐ>gø`9wÉH8?XÎķķķÉŧŠí`&ûkî[` ę (ūå_ūE}˙û?¨˙Ŋ7cƒi˛Y~Ø=ÎÅŲŲY}ūųŋŦ?ûŗŸÖįŸ˙ËfÔĒĒ%Gßũîwëw÷w[BÃųųÖˇžUc•„Ė9!pō‰åå喒X˜ãÜdPōš¤'U#öÜ|ˇļ„×9„é¨ųL2žĢĢĢcQķČü\YYéŌĻ+++ ˛sŦČž$áb âj=8Iõøøx,‚gnkkk â¸csŲ ëŗŽŊØ|āVú9Ā잞ŌNēu(qõ—uYUcNM2ķÆÂŠĻ֙™™ÖvKĖžššézūN’ÕsĮ:Jv°ËÄhöȉŠÖČp8lPųęÕĢŽNfĩãųŲgŸĩ=ĨõNiœq´6ĩĨĒZž‘€yiiŠžōŸkwwˇęøø¸mQFsŗŠ 0Ģ3¯jzzTs=ĨV)5ĶgÖV&ÎŗírķĀ~ûömˇ„%ĢF‘ãTUíîîv˙Ø×Ø•ŠŠŠÚŲŲŠ‹‹‹:==íēømŲÚÚ+įlũ!+ØŌõõõî/mÔįlF1"W؇”ij;â'÷U{ˆHcUÕ?ūĮ˙ø˙ *<_˙^?ųÉOž™ųOá"dä]ŦĢ HW›€ fX$´ĨdÃß =Cí3"J-/0Ŧ'+‰‰ŗĄÛ|"Ĩî€ė“ €UbĢÃAĒĒåU#öRx•ü%“7m.@ Íņd’/ƒ ˜Š:ruuU¯^ŊjŊˇ’nŪifffŦ}_'Jđūâŋ Í\ޝ¯7ûy{{[[[[ āԜļŠf"6ÉXci:SË Ä—ÍěGtË4äí_ũÕ_Ö~đڙ%sÚ¤åeØėĒĒÕY\@â÷ž÷ũúÉOūĒ~ôŖ˙žY)rˆđūAUUũėg?ëę˜ŌĒęj ę‚W7vđ2Ÿ’­7dXúk{{ģéģģģŽ|Áņđž€(‡Ŧǚéã˜qĒŦ€?+aVõ‘ž4æņ Čr€0" û ‰õ7÷­1ŧFšäįpTĖ@2ĨiÖ¤ŧ‰šš§CĨô?‡ß|Ŋžžn†œƒ” dšéééÖŲcô­mķÍųíÔ§›×ķķķĩŋŋßD‰šŸ ,y đ'BIe\KŽ&:syۇ‡‡zûöm™Ŧ,y:™cQŒZŋä‚čĪ>ûŦ×áųųyŗßæŠ9h>ØSDŦΝv+™Éiņn™“Âaā ›oúĖI9Ą=É<qáôlmmUÕS˛uGŖ:ĐŲŲYíėėôžuppĐ0áöŠĒĒ>t4ÃüË…h39§Íģŋŋ¯ÍÍÍv¨2¯‹'93įĖ[ŽŽ}”“g\ØwÄĖķõq_Ī`ū¸RFđuĨĪH>2Ipō’r0ŽLrĢi“ĢFa^†F-Ė:ŠM^~7ŠÎj,“ÚĶ|_!÷NrUo@ÎF•I¸ž“lvęp1e)˜Ŧ Ãᰙ\íÅFWU}ņÅ-urė`Bũ;Į û=ž wéĀMļ3¨ūÕŠ)n…Ņ9Pšåß9^?ûŲŦüā‡=˙Üß;cŲ´ė_ sVvéųŪ÷ž_?ũé_ÕwžķŨąųđķŸ˙ŧƒAļŒ XM9××Õî×nāŽS‘y€SæĐûĒL”eö|Æ{åÜL-qŽgĶ}R†]ÍĩmŒS:‘:uz᜞…mx•m|.Įn0tĪFSœ‘ŠĒQžHÕ(Æ{JĀÄæ{/ŽƒžxņâEW2ž™č ¤ÎÎÎļķœ@ųøøxė<sziiŠ“¨ĩ]™Z}ižæšíH™K&$ęOö'm̟c„­!v‰Á)'ąâ$IĐÎŧ„”ÂąS~' ãX!rD÷2B[U‘qú-û“ũ _rđķ´•cÅ6…úÎäÜÎuėķėBÚ—b÷÷÷cõöĶņ"{Cl{šúĖXfĒÅfų6ĢžõæÍ›.!éŨ-šNELōŊ'mx&Ķŗ)“ë|r_zž>ŽëĖ"—…Œ‘ËÄØ„ĨĨĨ:>>nf\ĸ˜qĒ9XķŠŠŠÖņa•°X6 Ësmš keeĨ r–"sīÜPmüX? @”ō’,¯Ļä&p`ôķŨŨOYŊ‚˜×”’\^^63įģ´ü6‡Ü\$ŅũâŋčēÖĶĶĶ­SĩQ ‘Ûü3ëėėŦ^ŋ~]ŗŗŗ­“Ôˇ˜B}’ ¸ẅ́/›ÖÕf— wU#6Z¸;OiL8ĨŋüËŋ¨ī~÷ˇjjjĄAâŲŲY÷ Ŋ4VĩĒÆÆ •:áLōúũß˙ęO˙ô¯ëw~įīˇDâßūÛ[Ãá°õŊ››› Tfffjgg§A-įŽę‰-?88¨Ē' oŖO™‹DļˁH'#5ā€V1Oļ•,k^ĨãĨrJęôŨĶŧķ™tôOJ38ėÆÄgĖ-Ĩ,EžčÆÍGÍ8-.ĐkŊ’žlnn6œ •ŪÅ|ÉÃ˛ĖQĖ"'ƒ´ģģÛŅ Š@L4Æá´æŊ/@č¤ĀŽaƒąÎ֎3ĮĮĮ]âs8vÛĖ ōôA:ËĒ*ŊxņĸÛ!Ô×úuccŖfff:FZ¯*ždÔĐËwßŨŨmģ*"Ŗ I¤äŽ$tĮŧXZZĒũũũŽŪä<äD›oƒÁ nnnúÔbQĄŒV°Ŋ"< rŲ)6X˙ä•ÕŌĒjė.kˆĮ‘QūR4`mm­m‡ØķÅ)ccŲžŒĐØUĩ™éË5,Ī%“ž9A÷÷÷u~~^ĩ˛˛Rũ×Ũš7ĘãnllÔņņqŋĪķõq_Ī`ū¸hWK]¸˜AŋēēĒËËË; Jü¤OÄ>Ø 2Á [•,?6ƒ1ˇi3Č~FöÃQ Op$W<ë33†Œy mŖģĒQå…,m†9¯ąÂڙ,ËĐę1“Ÿj ÖgRKls¤áNé =-/9Ĩ>4⯀ú.y’ÄŽ,‘Iú°˜/Æ×ēžž^īŪŊ“=҉&[e#ÎzĘWWWõˇû7õÃūN]_ä3Úå0&÷ĖrƒĀk …ĨS $føŸc Taúô!†-ŧņĖų\ĒϐZ`iˆ•S$Ö›”}$ō"Jsß=|¸ŽzbŊ1÷œ+6#ץŋ“­5ļtųČ å9E;´Åe9Ŧ’)Ų#īH§ĐįÆfiiŠÖÖÖę7~ã7ęķĪ?¯Į›››ąŌ“r} åŪé=;;kįqssŗķ¨ØÎŋv"ŽĖcҌ¯ŗˇú­ĘÄŲ,Ņ)ņœ]õLuÜõídYGäŒ$VīįžÖĩž›<:ízJ |—ĄĪēUVÅáÜhcNĨ-ōŗü~îåŗŗO§g’đķõq^ĪĖü'ÜÁœ IDATpG˜aˇÔVUƒŦXDF„‘"‹Hy#Ũ¤vđņņéFÛŗ´o˛äŸ › 4H€(Ė'ÄwąŲîˆ`Cķ¤ÛééҁHXà ›bˆ„™R€T5‹)€‚įbø1Ŗ ú3ÎqŽRB0;;ÛÎv՘j' €yÅäøyjžonžŖ’ä‹á•<–I…äBæVԟLėÅšŊŊ­_ūōõũī˙ noGV:YŠ #‡ųSE‚Æyfîīī[‘R ė÷dĸ$ §ŋą|Ō›ŲŲŲ:>>n†¯jtB1€â]ESƒA˙,@č>ĮųųyĪķ7%/[ÕDˆ ĮWWWĩššŲs,A9ĐRõ$wQ)ĐĄÂūJ’Īŗ°{֙Hƒw3÷.//ëŗĪ>k–ÄâÕĢWĩˇˇ×ĪŖûÆD?<<4ã¨į\ĀtŽ———ĩļļÖíË’u“ÉįĶĶOÕT>˙üķ1pŠž°MĢĢĢc 5`X’˜™3¤ ØwQÖÖÖÚFUUۈĖЇŪ;88h-vęŽWVVj0teɓlķÃÓP*ųĄ(×`0h'ķčč¨~üãסžõ­>­ĒęWŋúUÛq%†BZõ$WqŽö(­h~XˇéĶčįÁf¤YėWV¨åŊŊ¯ŠT%ŽÚDi———;Z{ss͞§~oo¯×ŋ¨( û`Ļ„æāā`L§âS:X"[WWWí˛'ĸ§§§533ĶNžĩąēēZM’p‚<ËÚŠĩ/‹&...öĄv"YĪ×Į{=—ĻüŽúO˙i3bUÕlSJD€å %ũ‘0$+Žéō˛äÆ%u“ËËËŊąacR§šŌ 8Į. ˙›Œln’Bė6›*đ4ĶVUëŗ×ÖÖ¸Ú`sÃĮėŋ i“!e2œī%[ĪÁŅ?ų<áZ,$MöšRkƊķÂÉōo2"%äôYVĘ÷ŗIųļŸ"ĻķķķŽQ¯ÉlâæÁĪūŗúÎwž;ĻKöŪ>KK¸ĒRĄŸ€Âd…ŧ…¨ŌųųųúÆ7ūĪú7˙æ˙Ēíí˙Ŗå%6ÔMŽ—ß@Š4Äŧpēí$“>==ŨÉÕĒM`ā́˛öô…šŠ—ėnV…ĒzrTŠĒvV0ĘŠģMVîčč¨^ŧxŅĨNTNšīŌ›sN>|øĐ KŸ§ƒ¤ēÆååå˜:ĨYœkUp°ŠĀį™/"C¤%€Ąņ÷ޤKÖ,Í}–6Lg—“ë9§§§cų/YՈX°Ļ9éČX›ŪÅØ[Ëdpōjmގę(ÚIÆDZ(ą8+ŨÜÜÔööv÷{āŧ—¤XQ}˙ūũûúģŋûģúÕ¯~ÕĘÃÃCį<<´–?ŖNįįįĩššŲL&í?'KŠjT$ÕbĪõNoŒŠsŋ<ŨSb$āg,onnęÇĩģģÛš œ9ÂŲÎuēēēÚ ąœÍÍÍ^×w‘˙O&qssŗ×ÄîînŊ|ų˛ZæĮÔGŊ­­­:::ĒíííZ]]­Ēęw÷nYb֙ ÚÆ!É2”Ū›ŖÅĄČƒy.//ۖŦ¯¯×ÁÁAūööé+õëąÅlĶÚÚژDŒÍIYIUuîČõõuŸŸ7hļ${/,,ÔÖÖV'CrBîîîęWŋúUŸŸ×ŪŪ^ÖŲŲY]\\tÔČ=88¨ÍÍÍŪ$ÉŪŨŨ5Û/‹ã›Ō*v8Ö_|ŅR™­­­Įäˆ¸ŠĶnžęCŅ!ãg/Bŧ¤]ÖÎ".ŌqssS;;;cmÍΚ*ÂĖž=<<´ö_a‡Ė3á$rl8™×•ēīc?´g;÷Â|A˛Üßßכ7oę͛7õŊī}¯ë2Ũ“]yž>ÎëĖã^Ucuw]­‹Á°ņæØÉē’IôĖŧĐæwōģ’‰<‡ĖÁ=¸,ŨÆ8cumä–<îÅ~][<3æ3\€Ķŧo–Ôf 'åDîÁYŅÂÖÚOæā÷ƚaœ˛ĪScšm׆<3ĮÖfBKėßNFURãšĨ<ĢÆË;jƒœ R¯ÔÎÛ|Ķqèɜ—ŊŊŊ~'ë‹/^4č5ŽúšB—Lځ}ĖīM:’é¨ú;į¸ą‰™˜īĨ1p“ã”uŅEĘ´AûŒ @›åiņLŽ_Ö}ĪKd$įž1ËųĘiøēōžæk^žĮšĀ”š ÉāHŅs§SZúëëëÚŨŨ­ŲŲ§dp÷Íy‘r, 9kËg˙eųŋ÷ۘsũ¤oRö797´ß:ĸۖˆĘÎfÂnŽ}ļ@bĢ{’ûgsüøø¸˙­Ęéû:/ƒ-0˙r]éŅ2īãā´üĖäz7įôS–´ Hû+Š=ĪZąOqüĢlj}1šVÍqũg'įëÜÜ\ˇWûŲž,`]Ĩ–‡‹MÚß|ŽûšOƌŨŌ^{„9dŸŗWßÜÜôįŲąœk“ōÕįëãģžÁü'pa<čååå6ėĀŗĒ)Pîm04 uU5”,4ãŸfbËĄ` ķJ´s˛üÃÃ(Y5e;“lžœ€d‘ÜĘj X Ŗd)ŒË`0¨ĒøÆ^Š/B`cbd›aēŧŧėMĪĨŽģŋ0xggg˛ŽĒÖVKŽ"i —ĻÕåāTUK†Ãak€m'–kmmmL7EĖĀôööļ āČJš…ų†IxĖ=g0lÉ> Åg j‡TŠÉr™‹é ƒŽĘ ƒÎš"$'Ɲ§ŽëƒLXĨ•&šģģĢ“““ēŋŋīō„"Ié$hŗ÷Éu™'šJfÕžųųųą2…™h™y!ĮRAfiiŠ™om -ۙ™™ŠũũũZ[[ĢíííÎąŪķøzc–%\sZŗĢĢĢŨžŦ\ÂI IcMĖÎÎÖ`0h ­?ŲĻéé§ęUäéėš[nķ;ÚaĖ1ŠėŪdvYt͇pĖ÷•••^ĮæĖÖÖV---uԈŽ ËvĢh"ŠŖoDUšÁëûwīŪu~‰yŽcöíÜÜ\Û!ë>#‚UOāūË/ŋŦĒ‘s‡™¯Ē–cYÛė“÷Z^^nųÁ @ʘ7¤•GGGĩģģÛāøôô´ûķŧļļÖ9É~ŸžžöûU=úzrrRm÷ä™o‡‡‡ĩŧŧ\=&}2pUõ!}ŗŗOš%°æTyãd§C¨?­ß[]]m’Æ8xž6šŗæÛÍÍMũō—ŋŦƒƒƒ cIÔrc&ŅįëãēžÁü'pĨŪNH"‰ķööļsEŲŦôÄ1ßßߝǑŒ!ÁœNßôôtׅw/‘r͇›››NĘĪž5ÆËËËõđussSīŪŊĢ>Ôp8ėÚíWWWĩĩĩÕkN4C{Ŋŗ9-Į@یu \#ŦKRUöąc=šĶō ØÎûsppP õîŨģ^įÖGãëĸĪ×Įs=î'paDĒjŒõ`|°T€Ÿ ‘yŸåģTԍǤ îĘĘJobpdŠPcCNIļÅfĮ˜c+SSOûÉÁđž¤0îĨ\F`‰&‘=øūėėĶŠŌ@P& blŒŠYo-ŠhhŸÚņ֍ųL>Q5~úŗ~˜9ísssí>Žnˇ›sŲũĖÛ~ŋŸīį}Ģ=’ˇ¤———cii)ö÷÷32‡¸xj¯n{ķ¯AÃŦV­ P˜DÄģŧO“šĖ<¸žÛhLj ͍W&”aņ“ãĖ=kÕŨJbH*8ÂûNyĩ‚ƒė^•MĢ WâRÍ œ*Kâį†cڕd”FF<"xų>ƒrvv–QŠÕÕՔöÃĩä`Ää Ŗ:¤˜d}ėŲԌ$IŲ|¨Œ™9PĢ6˜tčŽ1ã?˙įoÄG?úą¸Ŋ0ą•YöŨę TIL*ԜˆęÖäCŒSQĩÃūw‡F@ĩš‘9ŽrŠ ´VNâDy晚¨/j‰J €ė F D"Œņl^…q´nDhŦÁ*# Ē+22kSō­9âúĘãšn¨°Á1#Oâ8bŽáââböĄ3.8R•}2ˇÍOy/>ķŦÎu÷ōî×××SĖ­y!ē¤F9‡É}Eâ*Q!YR’4P™ôė;Uöâ™ÍMzo6Wi\Ž]=ÎõŦov°ÚáåååtDũQĒë}ÖūąCdHĸ/ŪK¤ŌÜpMĪO~hŪÜ5šŠÕ¨žg¨Î0įE˙×w2Öö$cY#IH ˇHŠ‘=,"rüŧ—šķöÛogå#Ī‹Õ÷9‘Dy›•••_÷”?°ŗŗ“vŸƒÂļ×ņŒ˜8‹žŠĘËēŨn2īæŦĪxî­Ģ˛'{TuLŸÚĢŲžĀükĐZ­V˛?•]Ą}Å—UŌ1КT oÄ$Ų‘öPyJ?ŠZNl,B-ąVYc'–Ō û˜˛ŦZĸõŧtBÚ ŊįĩŅbۄŒTHŅjs$0ĢúĸŲ4ūĖ:ƒ‹]ėj.€wĀŧV6Ę{â@›1ްVœ/`…Ū´nȜˆˆ˜*sy||ÛÛÛųn´Ķ6!‘”1ņ|•SEH´ČFVˆûwģŨŠŌzũ~?įAu0nnnâđ¯ÆīũŪį㓟üŪúÉŧsā˜¯`žÉĀ*Ë/p]Œ™Px•—U†D|ĒUÁ#Įë`댧Öũũ}:UÚvuu•'ˇWlŠ5ëđŽõúúzŖÁ`sdww7VsąFÛŧIÆp8œ’!ņ¤`Íf3kã×c`mmmmĨÜŖ×ëMCú|kéää$lĻ*Mœ5`ĮēǤ†g匓R˜“ÛÛÛqss“U_Ŧ_˙ė÷û™ HšĪJĖē‡hÆˆžŧķÎ;šžH?ō‘Äōōr|ųË_ŽĶĶĶ,ĒĪD 8ŒäzÕŪĐR/--e%ëÔ:aĮ+É`ÛWH2=ģĘÆ(U*ō'Ræw¤Ÿžq{{{ęTpsSRēžVĄHŠJ@Ék Ũôšė=§ÂúŅŪE¤$ËģģģŧŽfX__ĪũLôÄ~!'CŊ˙ũīÛÛÛĖu9Š28į0Ô=Y˙___Įúúz ƒŦTfžČ‡Įņâŋxj¯n{ķ¯AS‚¯–™Ģ ŖĩáIÔFž&‘PËYxYr#ƒíķ67†˂…`0|5ÃhÊ9\“”§đRõÂUFBiCüéÉonnĻžkĮ¸/--E§ĶI ¤÷ŠUrŽŽŽbgg'7?ĖNŗŲLë™*˜oĩZąšš9uĸ¤$Kė>‡Ë;:dG’r•<Ôū%ËÁėę*oü8`ڀmž%+++ôŦŅ i{ĪēÁpē%Ŧęååen´Õér˜‘ņÅ´yÖÅÅÅ8>>ÎņÔ¯?GÖķčƒN7ˇĖ āÅÚŠÉØŽoNéčl_e˛ŸĪÜŪ>6D7s¯^/bRQŠs}{{› …[[[ % —ÆXŦ,=ĮH@Ņ[ģzxād-ũ'''yđ gŽ:ũΟ?O0FŪRkãsœŪĢ~¸¤pŅ3ãįĻרXŖĩRk`Iå¤Ôõzxx˜ļŦčüü<ËĮš§ž#iKÍiŅā™<°6ë’ãŨh4Ōd[ˇļļbuu5vvvČ>ū<""Ūyį¸ģģ˲ŗūD<ęÔI;ÖžŌĄæR%}jōĻ( 0MRŖ/šÍfvš—č%€9°Ø|‘# y4ME*؁š stt”‘)š[ :XGŪ}ss3Áˇkš?îË~čŽ į[cwĒ,n~~>#RQŋĩa¨į˜+r-ØJ9IÖ&'Ü^]Ģ}Ų‡âÍ7ߌŖŖŖŒ@JržģģK ÛS{5Û˜M&^ø:"R < 4ĐYÚ´8úáĒR0#B{BČ“Š7ä%ūdžģČđ0Žô‰€P1aĩąī؆¯ęĸE "&Ąf@Ķ[Ë)ŪÜÜ$3I‘Žėf•ņŲûÚ1,t"5<‹­SWÜwjĨŠq˜ŸŸO–hJÔ@Žˆ„•ÄöĒÎÁÉét: Ūŧ7Ë&Žã$p0Ÿ_ũęWâ#ųhŒĮ÷Š›ĸ'k]Đv"&,6]uŒēaĪĪĪĮææfž:;Ŗ×ë%(pęŧÔđs‡ĩŠėzje;ëÁ÷ ĖXe:+{,ą°°'''éTJšuxgĒĐUį3)‹û‹œ­šG—9´zŊ^˛“'''Éxcr <ᆺW}Z~}fV°‹m4ķrœvK^65´$|×ņ•O"’!RgūčwNy]§æ¨q6ļlgÆĢ/ÂÄÕ¨€UŸŋžseœ ŲžwWYȚ988ČyƒŅ YûÜ5ŧ˙ÃÃC’4öU“ÎéEX)ÖR—ĸUCÎY4— Öé˗/SƒĪąY\\ŒŊŊŊosbŽŽŽ˛âUĩ;€vŨ#Œ‰ lŧ$æãããŠęD".ūīŗĒáTģĎYOÖųŌŌŌ VˇîméôŗŲöŸ#}ŦEČĐDŽ"&ō-‘÷@l˜‹dmĒGy&QYNŠ~{ŌĖŋÚí Ėŋ& PÂN5›ÍdT…‹m4¨5iPÃėTí˛†qQąĻ^ĪF7ËhzvĢĘJ<Ũ`#&:ėzz]ßķXc,9ÆßĻËAŠ@ĀugīUuâœלí3ß]ZZJ†ĻJ–ô=IÍ,譚Č*e¨ár˛ęĐõ•ëØjíå >hEëØųžÍnvŧ1h>WŸ‰ƒd>Õ 6Ø(€ĻjDm¸U§ėkŋ˜Uĸxū_5ķ„b<°ē*rĖÎ#Ī_%ĨšX%žSxŋ‚īŠayĒ•.°Æ>_sIÜÃ<8>>ŽëëëdßĒÜģ, 4*{=ûÎĩúSįĩūv=ĀŊũ-—ã/+j~øˇĩ ÅsֈBĸŽû*%Š ģ’›5zSË^ęk?į°“5›Íiĸ,^6­ęöũnii)ÎÎÎō,÷ņžėĸwM4Aˆ˜ÔIį°ŋxņ"¯sĀY­ŦÅYÁôzΚwÁŠ`w˧YíûŌŌR2íUŖ$M7Œbpâjå/@Ū<›]ģä+Õąa¨ĪPå—æWĩÁ>#éØzĢėšž¨ũPĨ]œvc¨ßŦļ‚d!ĻĪ777§Öƒy ;N4%q­ĨYy–ųkŽ˜/ËËËŠÁ¯kÕsŠžÖ~b_̃ņÔ^Íöæ_ƒŦVC ZĩŦ P†AŧŊŊMŨē2~X#›5ÆÖu+8ˇQĐ,GDę:<ėĪŦ¤ĮhW277—R U(€2ÆSH™áôwÄcũķZ2’„ÅķĮãdWWWSûNĻ¤Ē Ã=77—r‡ķķķX[[‹íííhˇÛSŽ„V':ĄŅûÚ\j4c6!MU9đTBō@hÖ*#&y3 /Üß1äĩˇV#,äU/+Jáũë —ĩb ÆšŽ Öņęę*kk _Ģ˙ ürĖ?} ˆôIDB?‹\ˆlpNĖaß[\\ŒÃÃÃdÔŦ!Yr̈ o}‘{!ív;™ÍņxĪž=‹ŖŖŖŠę ˜æ•••ÔŏĮãŦ|#2$r*!ũî°ĨkE Ø•Ē0ˇjbû>š™ĖÂÂB&LVPNÁą>::Šķķķxë­ˇŌŽ.Ũn7VVVōžu ×5õđđxÚ*iHDäšn€Ūœ›ÖuĤV-=hüÍ)’EIšĩ´%gsĪ&€´ũũũđÖ¨šę9jÕ.Ņ8§¸‡Ã899‰ĩĩĩx÷Ũw§ŒÍq:lãh‹ŧŠNT‰ųå`ëWû€k“•˜OÍf3m€uÉ!åˆō˛'œ%vz4Åîînœžžf¤ ÉÁž3낭;::Ę 6ĩ„ĒĘJŗ•ŋ$W î]ė?Öß`0ˆ“““ŦžFŪS+¸IäöģÚ§ÕQYŗÎÎĪĪS.YĨ=œ*ļ¯F˙ĻĒl5›Í,‡ĘVŒĮš%õP¯ę?ĩW¯=ų× a•lT€{Ũk™M܆Újĩž-”Äuä6;Œ7ļHȝ“PPĨ4€ĐbŨđę5€ZC˜ģdCÂąĄ@ƒ?ãņ8Ëķy†Ę–Ė2îX'ÚČŲDVjÚbl•{Ų𮮮ō]†Ãa2YtĄØB›{×1Đ÷Âá´ÍĩwĢÕʃĄ*+*AÂԑUũĻ>'aøÆ7ū8Ūzë{âōō:Ađ´bējÚŗEL*ū`ī+Ŧ:T˛Š:ŽX>•P""KĒz›đúúzĘijšČz¨W`ō1_N.%9px Æ!¨ár€,DdhöP‰g&îî&å nEÃ=ŗŧâÉÉIŽM€aČ#""%Æúáá!e\$QŗŽĀx<ÎÄģN§“ ‘ƘXšÍĮzđ˜įųųųøŽīøŽė‡FŖ1u† 4ÖרWYg­Ķ^›_rŦįˆIŠCö@•›ˆĮ$÷7Ūxc*šÕzŦ­,sĻØ”šãŖ­_LëÁÁAÎŖq\ZZŠƒƒƒëã“ņŨŪŪFŋßĪįÄfKĐ֟Ö8)Ëūū~ Ɲ‰ĨJŨČ3ޝ¯ŦßŨŨÅģīž›˛?c‹I>Ŧs–c;ŗ#§ļʕŦ÷Záhnn.įM=¤2õ•İfë3Öh g‡ųžÆXŠRûG­„e|k9LNĒũÁܲĻjNRAĂs…|šƒ“ŧsguu5vwwŖĶéÄŲŲY`e?Rū–SYŖĮĮĮSÄÄl$ũŠŊZí Ėŋ­†×jb`-i‡™Œ˜„­ąÕ@m=äEĨˆÂŖĄāČSîīī“5Ēė•MƒÅ@V1 ƒ“øT‰PM:c´€&šc%ʄ^ĪZa$bRט#ĄR€w¤õŧõPŦ§Mž:?ÕĀJîZÅŲČÜĮŗq<“÷Ŧ ĒŪ(Ģf#Ģ`8cĐŊ§~ŦšîˆH…úæČzn@ƒCSÁ}ÄDCŽag–Ø IDATŗaFŖ<åũ8Žúŧj´9†@ÍíímJlęä-×××ņå/˙~ŧõÖ÷ÄęęFnū´¯œĖĄ>ŠķÍķø]ÕôšW××× >ĖチĀVų Đ`›ˇi×5ŦUNņ¨Ļëøžw­Q1kĨßīįš4&N'Y?cK˛x¨v%*ĸŽųH÷ų$u¨ÍWãĘ&9å˛2ûúáōō2ŸšFāD°ōCÉĨ8YÖĸ9¤ĪôOë+ßl63zâ÷ū=kĪ<ŸžА8ËnʍŠe+pŽ‘}ĖÆŪŪ>ž °ËI:??Á`gĖĘ[ä/ÔŌĸúÆŽkˇ:Íĩ’PĄŒ1ŦYŸ3Øeũž¸¸8UÁĘsa­ũÂÂBt:ļ0"˛ ¯ˆėėĄ„­VkĒtĻëŗČĒigÛ]öãÄÆ:IÛĪÍŠy­˛7Īã}ĻÚëâęę*öööbkk+Æãq|ë[ßĘņą˛Ą¤6ާīĢ|ęŠŊēí ĖŋÁŽ`̞⤑ō˙žŸŸĪ“}—qcøge75qŽrĒø…ŗ12>ÃāĎ)Įĸ‘„ö[[[i1MU_(9N%ī‰ņĢɋÃá0ŗ°Õ‘ĀXÅ&‰ácčl`6:äåååx÷ŨwsC <ī‰a´ņTYP›úĻʒ°˙ÂąŗŽL­xY2­nÖõøzŌ˛ŦeŨ,lrŪĮƄŊ ą™@ļ9ÉY^ļ19'ĀÆp—ĮĮĮąŗŗ“ĪŪív§’k=ŸÄŗ*éԟÕ!RD3D[0Ę6gĪŽ™û6ņˆČjĸ6œ˛•ú]Éŧ".Nũæ7ŋ™@ ôNԆŽũ¯NĢõNzā´ËƒƒƒŒ„T§›jŪ]\\ÄîînÎÛĒĪ%͐ oîÕúŪØLLiŋߏnˇ›RģVĢ•åÉ:mļ‹ˆxŦæ2[ÆĶZe”ė´öŪ˙ū÷į\ĶP×­ų’Rg“7õK-g Tš—“[Ģ,Ž:ŒÖ,f5[­ÖÔaZ’“EĄÔ×÷ÆcbåîînŽHÅÂÂB:ŧlš×`0ˆ‡‡‡,ũéy‚Ŧßgĩô“ĒHu^[>Ôs,ETĖ5eškÚj„M՘ ’j3ҍ“““ÜH”Ė“^¯—ķĢ&ų’EL*žąŠö7ÎČÍÍMFˇÛÍyô[céäēŽČŠ$es Žįķķķ888ˆŗŗŗtBjYYĪĨ}]'~WĨ7OíÕmO`ū5hõdŋ›››,W%ŒŽ}¨aũˆ 1a°%Ãá0Cĩ˜PŸŠL¸ ŗ&‡V‰AÄ##áČõŲ„ģˆ Ž˜žAvđÜ´ÂUV# ˜\ĀËRCžĩō~ZXXˆ^¯§§§Y&ōää$vwwS†sqqoŧņF,..ÆÁÁÁTųG ĨVÅQĄ˜đŪJ°E4Ą@ēÍøgđũÜX|mšXōŋ̇čp^čMoo¸rŽ˜8‹“˛–žÅTŖĀ =ŋ~-ņX’îŲŗg1Ļ*]qËđyzS –(ƒ<؈ub~Įã8;;ËŲĶĶĶÔÁĘ1¨arķpŽ]y—6ŪŲdHßQ†ĩ˛v$o˜CcäUŦbQ] ņ;ŋķ˙oZ§ö˙Ļ}æ3ŋvGT@䈆dĀāVĮ\ĸ2A˛191šsŊļļy`U-Ŗ[;„­ķ………xņâEFjô¤JÄ"×0_ķ^jø‹VFL"Āg§ĶÉHžßÉq…ņėgggYĄæķpLüaĪƒAžĢũƒSį`§zļŠĘ[5šFœDkD"OOOc{{;ŖlUĸņĖëëëy¸î0yVŨn7ÉlēūĢ9J÷÷÷y~€}Pî>ĩW,.>ÖČ'Ã2ėŨlũS{ĩÚ˜ 0Wõ‚ÂÎôzB¨X‘šČÅ@ŌքWŒ*&C‚Ŧë(īU ”V% 6ZÅu8 ´1n˜%LsMüŦÉUbĸq*SīA™l Xz'ĪYō ë˛ļļ6uP ĻĸBMČͧô¤’Ŋޝ¯3_0•”č{€2Ļ“ƒd,j‚ ˜”~@—––rĶÃ@rŒ# îØ÷ÚUÂR•6†6š………ÔWģN Uûš÷ö^›››Ņī÷ķŨX}1}ČÕ{•vĢō1ÎnÄ$‰¸ĘXGŊč°|qq‘ZYsTĨ˛ũ nŽb÷ô™~ ĀäÖę>#&r?ŗn0Üŗí¯ũĩžŠ(4Õ5čœĢ/šÖznˇÛ™ŦížúÁœŌ0ųÆBTƒ¯žĢŪĢĢĢ8;;Ëš…‰%Mã䯯¯g‚,gФÅ<ætËYaĮ8ėl 6›DÅû! 8ō΀0ĮĢŧîWõ×â3ŸųÍ)¯Ú‰Ęū˛7´÷@ŖŠ%æZ)‡i{'š7XkīW“Æ+K+Ÿ†ä‰­ĄëžŸŸĪ|É÷lį7°…ɜĢoŒˆŸˆH9ĄHÛÎīfŗ§§§ŠkŸÕ|/--ĨĢJĸæ~Dä<ā W‰i­’ÅŅbGDr–––RÚcėôs•ë4ŨŗÕØj”ˆ`CZ­VžËŪŪŪTģč—øĖWQ)ÕÄf÷16ģÕjÅ`0ČRŊÖËS{5ÛSFÄkĐlžĩŒ^5l˜íôô4YW]yDLmU ]¯ãw mĤŧZe6Üŋ&öøãŲk6>@X“ŨĪsÖ,ū*ØŊ‡k{'}äēî5۟>īo!īY1‰&aõŨ“{Ôš3kģßĢôņÉÉÉÔķĖ^×ĩęZ°æ8Sú´Î‹:†úšŽģpŊ_mŲú1nuÕwĢIâžĩÎwst6yžŪ}5ˇfĮFŸHŪŨŨÍ÷ĶÖOŨ#ŧĮly_­&$ûŧŋĢŨ÷ÎėÚéééÔŊĢÔ¨Ú&}aŪ"Øĸ§öęļ'fū5hŠ‘zAZpėYÄÄØ9<„ÖžA` hŨgŲīĻ­ŒļËfĨĖęÆkōÉöBR“ß“ŠDDV°Āž`81—Uz„Áfđ„4ĢF––{?2¯†|k• ėãw~įwÆæææÔÆxss“Õ(lŌWWWq||œėŋ,Ũc­<ÅÕŧįââbVcŪ6fB´@&\ocĄ‡÷LĸŗŅIžH1čsssY…„üf0¤,¤F*0ÔųžŨn7úũ~ŽIeCÉDAZ­VʆÖ××3úķŸ˙Oņņ"ޝ'į%HŒ õaM V^u–aŒˆÔģĶûMú”'P× ŲKŊŸ¨J•Wɴ֕k’?Պ+ō3lė@eĢiô”vģ,ļkŽŦŦÄūūū”ėĀø_\\ÄÖÖV&ëYtĮÆPށ„jī%rŖˇg°öUUyņâEŦ­­Åæææ¸UX&gāŒ‰4˛=´Ītåõ´×Z*Ķx(Që ˛ZeŠŲlF¯×˜ķ†Ôåöö6~é—~ų/XųŗŒŪÉĩ¸¸¸Čųdž‘ĢoĪÛī÷ķyŲ'vN…”š ĐÕķŖ„MßßߏĩĩĩXYYɄNķ :ä/_žĖŗÁķķķŅnˇS˙ XįīEu}×x×Ã͜ūėwĸcF#^ž|™É¸Ū´H…´ÅÅÅĖ59;;ËĪ9uØ3Í´ūÛÛÛš˛Ŗėˆų@uxx˜˙&ŋ͝îãįŨn7íģUåŪīėė,ĮŧōÅÎøŊH‘krœHīZ­VžƌĮãdé5{)‡f6ßãŠŊZí Ėŋ­2’Œ—J ĩĖ\-§ČøÆãņ¤dĐ]YN•c°N§“˜ŅhëëëSlŨdÄ#“HŸŒyą!TŦ&Í5›ÍŦy]5–‹‹‹y8HMōU^¯Ö/&Q‰ˆ”$%Ø&Ļ™‚…ÆĢæÚæ,‘–CķÆoÄîînüđ˙p†Ž?˙ųĪĮÁÁÁÔFįÚ[[[Y%'"ŌPWũ|Í5Qą&EUy}¨MĖŗUFÕÆīgÍ Č4.ŪŲ<Ēēv0 dTĮĖXŨßßįõÍŗFcR›03gk5"ųZ×+1‘QÕû{6ZIÂ'Æ3Z ĩRĪ ~îsŖŅ((š„čĐAîsww—ĸ9$ÔãÚ1ŒÁĢ” [Ča­U>ęĨ•6WHvj‰< Ëüje*)X[[‹7ß|3ŦĸOVę¯Ę¸ô=iˆ¤į“““)pjHĸ•ŗ€ŅŊw•BqF:˛äGȋšĖKGn^WGĒŲ|Ŧ}_Ī ¨ÕŒØ6öąFš€/U“ô›õžĩĩ•˛5ŌŽáp˜N7ûÂ6šŽŧ T+ōĖl3‰m¨āØŧ$?kĩZ)Ō¯ú¤ZįŨĪĖYYfežįįįckk+nnn˛„*g­•oĖ'W­ˇš,× ¨—,nŊšÖCT°/d% ÍYļÖ<")´Î9>ĮyõŗÔî×rŽÖ’?ĩœ§yĀÃ˜ôõl¨ą˜D!fĐņxœUÆėÍOĖüĢŨžĀükĐ4 ^ÕëÖōpÂŊ) D´Î6x†ūėėlę ¨Zuxq_›_Me¤%ķÔpŠÄ?%ø$؞>€ĒšAījŖ'‡Sy^ƞV0Đõ„2%cqĪZ˛n}}=šÍf|āˆúĄŠO}ęS bļļļâO˙ôOãw÷wãOūäO’šŦ˛›………Œ\0ūĩrŖŽŋ9œ ũŦčív;Vģ˛ŋØ:Ōcˆų”xĢŋ°ŅUbãĐØßĘŅ”ge/mō•E˛‘Ō—GL×.m˜ˆĮruũ~?ļļļr~]^^ÆÆÆFÜÜܤ¤Á3]]]%S ¸I@\^^ŽŖŖŖčvģ™ÔWŋG7c–kĨ"}Í)ˆ˜ČP0Ŗ>k4ÕKœZ ņää$ļļļĻtĀÂé•Ĩ4ĒôŦ bmm-ŽŽŽR*U÷ŸųųųtĻ%†ƒčt:Ņnˇ3:bޞ/ægĘÜ@ÎØ7D09ēÎļxã7$s|ôq•îČÃ˛–ä°_öÎ:Ÿåc8ŧŽ:[ĮĮĮ9ö­V+ 4<<<ÄÛoŋ‹‹‹ąžžž4ë^pôũápĪž=ËĘ=ĩÎ<ŋšįœęz0āS{õړfū5hīĨÁŒ˜ŽË^™đĘVGDVKîęīë*>랮[+Ą`ī#"CĢ•1pOx­¸‚^^^žJŠA¨›m õz~€¤jm19ĩdXÄdCĮžFL,Â$bŽęģú#Ąīųķįąģģ›@  [^^ŽvģĖį 3Uû°ôĮfĄ †1ņۜƒËËËo;Ũ´2Iøģ§˛†Ø[ ’g¨›3YŠ10Čr8@51×ŗkÔ,//O%L{ßZ?bRBP_T}ĒŠüÃVŲ}!gīm^bŨm~@ ížĀ{ÕéÖš9.5lĨƜjPķ×üōĖXöz}`Á\2ëûxĀâ×ÖÖĻ$Fž'aÛûL•hq õkDd”‚#X# ˜Bk°á€°ņ¨ëX׿+0Ęą´Îõã,¨Ė<ŸįF™”XĨw5a¸jø§Ĩ˛Öô×îÔ9ĖŽÎk×B ԟŋWž '„Ŗ3k;Č+5ūœž~ŋŸŅ!Ņ+‘úīŲĒQ7k!d~õûũCc†Ũ—0MfžÔ(’1sŋē~‘Č!UhØ'sĪ<­rQödvߋˆ 1 ō<€ēWé $TĩIÆĐ:Ŧ ëoŸĢc œŗ;Ņ@sSoŪ™cl”(zŨHĢȒĖ7¤ÛS{5Û3˙´jT†ãE Ͱ9ņŽq­z{áTF˜Ã2ō•%ŗ9 õ’Č€’w""™ŗˆIĨ›LeālĘØZl•ÍŦ°d“žl˜?ĸy÷*Įa4[­VŧûîģŅét2DīĪęęjėėė¤NūÃūp&‚9Ž~4z,ļąą‘5Ņk¨’“_ųĘWžMĒ|WVŠnę6W ;é4@ã‚ĨŠ•”[ŦÔXV™LeT[ŠNžvyy9ëųĶÕĒBĸŋ1pę1GDFHŒ3pš˜öŲėëëëŦ@‚ņĮúĄ—ųDŪbÔĮ겛g''')É2žÆĐģÛ`kŲŅ ęÉŅö÷÷s.UũŽõ€Aį”VfVÕŖššš<ôŠJT)ą.#kWw:899Éõ]ūŦeëåęę*ßÕZâ@DD‚킿×9 š(Y›ĮōrŲ–ˆ ĀÅ`×ĘQ­Öã‰ŦŊ^/–ųoũFŖŅHmŗžˆtŽjiUŅGŅŖ*áXYYÉuü ŋđ‹ņŲĪūV4ÎqŋߏŊŊŊ¸ģģ‹—/_Æûß˙ūh6›)#“ëamq˛:NÎeĀoee%ŖsĒy­ŽŽÆŲŲYž?ĀN˛ŖUĮîģœ gō+++ų,ÆŗãN§ĮĮĮqww;;;Šãīvģqrr’å*=3iŖųĒ$/y—Ü+ļĄÕz<¸÷Ρˇˇ™Ûr~~ž˛J/„ ‰šj~*ëkū’TģĀūˆœÖh3g…,¨FsVVVâčč(%65b‰L#CD†DÕD:ä†X§5šhßŨØØˆÁ`ŋëõz™${ss;;;Ņétō@˛“““˜››ËˆÉS{uÛ˜ ZÕVGLBĩ FE‰ąZŅ#b"i`P0ôj•‚ÔKā0ļa %bīîî¸ŅH×dĪj#"YĄD%9Fšvą21UËŠOĒÁ˙[­Vž°É°+'VĨU2ũ<==?ūã?ŽĩĩĩØŲŲ‰|āŠŗm6›qyyögßüæ7ã[ßúVja•—szŖ˛d“ŧ`ûüü<7]ŋ7n˜.ī¨ŦŸą,/M ‹WƐ<[Å9TN.bĸĄ˜8BÖō 0\úŽŨngŲCbĖ6Ņû­V+đádâjũūķ˙)žīûž?Æãų|gũTĨ<•ÍōģFŖ‘Ō­‡‡‡ØÛÛËšīķ€'9ÉÚÚZÜÜÜLU‡ŅÆŖúKŋߏvģÉįU˙* ĶqėŋƒƒƒØØØH†h,¯ŽŽĸĶéäÚĒ•yLû ”a e#ŠåååŦÄŖBNeÆé‰ágĪžÅūūū”Ė@5œÅÅÅd)­MŽĄ{ĘņlUŖ™OBū0 ržÖhįÁŧ¨ũˆ}6_ÍZ}JbŖqä(°•Ņ}÷Ũwķųˇˇˇŗ/čâÍwk ‹Oō&/ĸŽa÷š-ĢZŖ ÎbM0mˇÛ) ęõzScĖ~W{GŖ1qĖúũ~FÖH}8r°rÃÃÃøĐ‡>”Ž_Äãž#I¸æ˙p~ŲvŋŅhÄņņq2ËėėķįĪĶ‘Â‚‹–,//g9MŠĮ°&˜WgØŪX‰{NÍ!Ąā0HŠ^XXHáũüMĸÆIe˙5 Íņ‰˜ŽōdΙįįįųN’j9ĒN@6ۜĐëëë\OíÕmO2›× ũ?I|Š€Čą9c<€ƒˆÉ‰œū1)ĪUcYjHuöūŗŋŗÁûw-ĪWŠúũzš< ļjļÅdVfĨ‚Šj#bĒd#~zzņ§ú§qppŋÃę*5VKGVgįúú:uëõ]ũҺΝéįŲą™_fĮdöģõ÷ŽaĶĐ75ÁSį3uėĢ„ŠV´Ģ´Ą>§ųÁúIBŖë͖.4VõgĒĒx_ĪëĐˇü‘×ķŧĩüaŪ‘ˆƒYŸŖöeíīĒį ëf]¯1û^ŗī^įoMÖZHKÜŗÎaûú|ĩjŋEDVœŠcë*Iāßĩ>žˆ@ũ^Õįc9k9GsĪܨĨ!k9?÷­Īĸ_]‹RŸĄ>ŗqūéŸū™< Ęg­— ”Í_ëĄöQũüŦ]ĒspöĘfú\ũNŊ/GŠ´Đ;Ī–í­QUã:ۗŗķéøøøÛΙ}ŽŲ9Yሟ×1´gÔwžWúŠöA]ŋH#×3WĖY?Ÿ]oŪÕŗžžž&›?;ėŽõ^×ĢëÕŧŦŅhüā3zW?Wm¯ąˆˆÜfĮ´ÚQR}ŠŋåÕũˆMzj¯n{bæ_ƒĻę#ƒŅîÆđ0vūƌÖ2‰Æ‰EĒZŌZ=›¤ōVŒf°2"Âã˜ĮˆIüĒEÅÆnoo'“OÂ(Ō"FDJ@„2#&›<öŊʏ„ĸonnĻ"Āģk`Ã""™CƒAüáūa|÷wwVČøĘWžoŋũv\]]e˜ųüü<ŽŽŽR*´JPKpbE`đėė,ޝ¯ccc#Wq0DĤ˛…$Æfŗ9ÅæÚ($tŽĮãė3úxŽH…ÄSė˜Yˆn<~ÔųĪ–ŪôüŊ^/FŖQÆÆÆÆT•šš Hŋ.iĖܘŸŸ/|áķņƒ?øW#b9#ELОŸ 4ETĖM•7ĖI,¨yqqq‘ė­žQYÄ;a0ਘÕzz¤š)9Œ0jŪĩ–rŒˆŒŧH–3†‰ƒ˜īęĐWũzÍM!;ÞŸŸgŽLũ.& ķĒė!ģQ%9AfEĸ˛VÄä 6īÁÁĐ×*_ųœuįŊôˇÆîIę4wŦ[kÛzb˙NOOsNŗ'ŗ Đē'“‡Đī÷#"ōtäŨŨŨøā?§§§ņōåˈøöCÛÆãqŦ¯¯ĮÂÂBôûũ”ŋœœœ¤)ÚbNb´É5HâęīFŖQėėėdB¤Ëüü|V ĢÖočUÃņČ¨ë¯•••ØÛÛK;Ķétr]VŌÅZ6o#"Ŗel °Îɇy™ĩ Ŧčééi:ôoŊõVFWœlkߊED4j•™ábûEŠD6Éņîīīãėė,´•ųMûnÚÜ܌‹‹‹ØßßĪ$čz0ĮC´ĩ’ŖŅ(ö÷÷3zÉRŽĮ“CÍģQ1¨VˇęõzSō§öjļ'0˙4Ė—2k@<Ís-ß×jĩĻJYUb6¯&!V +cà ąßŪŪÆp8Œ‡‡‡ ˙gŗėG­fB*R™baXÆ đ”čŠ<ãW“ 8.’ô|¸’I =4 521a=Ģ ûûûSU9žņoÄááa\__§ŧ BwhWD¤ôAâ%0ZKķÕ~:jM}‰XUŗ Dbú$üŲājŲLߡ)pžęøčƒˆČ÷*|~4Ĩķøzw¸ÕjeņštæķĀũđh4J < ŽjŲ;ސŖįõkŖ1ŠŖĖ%ũ¯RÄõõuÖįh­ R&ĄpĪ_™MĪSLcČiÆE7""ī§™‡Ö/Vn{{;ĖĶĶĶØØØHÍ5`1ɓŽ2īĀē•ËĸôĄ5 |sÚ­%ŽÖââbžŊļļũ~ęŪ•IߨØČyØívãčč(×_§ĶIįgļRí´õCjQå„ō~ŧoQ€qDd.€ĪKÔ4H€žÁ`˙āüwņŲĪūVÜÜ\§XË´^__'3~Ž¯ŽŽRŪDžSíj­åū››› >ĢTɚjiúœ““ĖMĀĘÕĩܨ&yë]×ĩĪVĸFrdæææâøø8zŊ^î)ėˆS˛onnb}}=í%Įē:¨‡ė!ĸŧ‡ųŗ˛˛;;;ąŗŗŸūô§ŗū}Dċ/âöö6Ĩz‘c¤’*E$}ōēŨn:*Cr/˙ˇĪč%9JWWW) 3ϧ§§é@s*ķĖ_^^Ļ[XX˜JZåx›57‰#ģŋŋŸ6–tФöŠŊÚí ĖŋŦ`UŌb-‡EgŠ}Ä6žīcō$;C  ŠŦ"ãÄĄjDlĻĩ›Ä,L‹’pUŸQĮü͐FD‚ā’qlˇÛ đ+ëA‹aôųZį›œCßaW€‚ûûĮŠ2âíˇßŽVëQ‹ ˆÉãņŖž|8Æååenŧ˜+›ÆÜÜܔ¤„áįÜÔ\ˆ›››8::JfĒáZ%¨ßī§žC}{{›‡EDÖĀÆ,yæšŧ'Ųęcûx|ņ‹_7Ūx3R/Zϑ߀Äā_^^& ”¨ė;ö""ķ*Hl4ņĩ¯}5>ņ‰OÆh4?Uõ!bRųƒ¨jÄDR„Š}xxˆ~ŋŸ‡ũØŧÕ_¯‘Éxœ9ũ~Ē*ŽČB§ĶIkDÄúúz:™æx||‹‹‹ąšš™kΜ´ž%Öī¯ŽŽæ:ŅoÃá0Á­ÄŊˆČōĒ,š[΂PĩIŽĖgškëž3l>{ö,į1 >Gķüü<%œ>cÄN6˜ÕéR"–sR™ËVĢ•Úq}*'ˆŊčt:É4wģŨ888ČĪŌĄ?<<¤ÃYûĐ3;ŸXgĶ$&ˇÛí8< KĒ崈œĩ"›0gX8­Cí IDATŌŦūqR*ÛaŨ‰lmmÅÉÉIŽOĢÕĘHĸųÂųâ ÚĸaÖFMbĮŲ+„9ÉVÚ#ęöۜT„C j˛¯¨ČųųyŽ•J|ÍĪĪO• t΁č d}ëNžHîlNDd1€ˆHRGB>{ä 2dû ØK¤}j¯n{ŠģŧÍĻīTR‹+„ŊŦe&g˅ÍnpĶåė\Į=€Ė›‰ž‡^•án\ĶukČØg…ą#˜w˛ŸĒ#Ŧ ´Œ:6žj4˛#I´Ā\=ĻjđŊ7` ÔHEDäŗcp*(Ā(2ū‘ĖŌ{õõx<9ÜÆ˜égŒŋ͚ĶF"Sãlķļ!GD> I2Ņh4ĻJ2ēŋMĐsxfũ¯z‹÷æČÕĐoe īZROsŖ>šžžŽ/|áķņŊßûŠÜ˜1°ØÕ9æo‰eքq7lâ•A˜ZīŽ)ÕwæülšÔZ:Ņ{ų<ĐYהĪčwĀȘøn—ŗ4Îŗ{Éáæ€Vī 0é ķÄã,[?šûV]3]ļĘ!ÆÄ3pøEHV°ŨlTĸ˜æ™~¨ŅQAöIĒ:?¤eœV…&Rōkŋößį˙ú?NųĄį7ŗezũŪz6_"&pŽôh4ŠÁ`ĪU}oÔs1DWjiS@Dd$ŽæUšV=xËX­˜#~ī=""˙ZÉĒFT­Žrœ sŨs›ŗ5Ē ŒFD某$Šö^\\ÄÁÁAœœœäXoΈŧŌUú1ÉĒëŧŽ}€°ąNŦg1RB’˛UĢÕ¨DqëYũŦÎ-ûŽq››KĀIčė2'˸Čo˜ĩŖOíÕjOŖû4˛Ū#šŠLLÕ`“™TōŦ’ą˜„ +ČŠ˛‹ˆIb–¨Å|aáĒö]¨(ˆ,Ĩį~U)Å3 }Û´ĮãĮrbđufŦkĨĒ1=°a§jiÍšššxųōe\^^æāīŧķNnNÃá0%6ÉZ+ŧöąÍ(èPp̆MAe}G;o.DDnXUj°qØTmRXÍúšˆ˜Ētqq‘ ‘Uß1IFœ0¤Æą:6Xēf’Ÿqcđđđ%ڌpIk^Y/ã&´^Ų˛ ÔlÄUŽ)k¨ŽÜsāb@æ]+ˆ ÉŅ˙ī{ßûr €†ššš”2ÔMß89ø)âQŌRėëŧĀtV…ˆŒæ,..Ļ Á|Á8nmmĨôd<§ŦD“ēžčÃąËúsyqq1õLtÕ*†pĀ÷ >EĢ0ã•å÷.æ|-šˆáš!-ššš‰~ŋŸŌ*īˇžžž“…ÂŽk‹‹‹y˜2‘>įŽŽ2˛UËļŲĢĢĢY.˛:ĩĒ9< 2j ÁÕ!;ŗv°Ũõ„i¨ y•5b_aoŲQĪŊ´´GGG1§ĸ~cĢ$įĄ×ëĨ“e=ąKKKqyyoŋũvöŨ×ŋūõŠyĪ)7ˇFŖQV É|xxHSuRwvvĻÎ9fu¯D^ؗظ›››8>>ŽŨŨŨ”ąĒdŖ”ŦÃļĖą………xųōeJL­G}'^ŖRú¯–XŽŅRŽmĩĨOíÕkO`ū5hÂĶú^ÚËĘDTdÄÜDL›Ņ* UŲîĘ FD†ûlŦ>ã;>ëČęvģÆ ãéyIS0œXēÅLJÅ*y/NŲŽīDD‚)€”ķ#Y¯ÕjMé‘%fI ­ŦōÉÉI‚Ņ^¯ƒÁ FŪKČUX›U"āÃĻh“dĢ8Š'Œ’ELØ2 mooo ĉrÔņ¯ÍĻnClmÚÆØg#&'ŗÖ¤eīKZCŌ…}ķL€‡R™Es•v™C÷Å/~!ž˙û˙JÜŨM0,YŠ™(…9ģšš9%ũâ<*•Ys"HfĖK›ˇ>”ävvv–NĀ`3ÆH×\ {–)4?IC`åJk”‰œđÄļ–GGG9ÆŖŅ(edŽ]™V8ülĀxüxØĐŨŨ]tģŨtÜ8Ęŗ Ķ+++Q?]KėÖOU$Ķ×yŒ=G<‹­­­ÅņņqJûÎÎÎbkk+tŗ=÷÷Éú#;ĶņüšŸûųøˇ˙öííQ&–ę ģ˛Ė¤FŒFcRö”4Ęútųųųd5ŌQ%2ÖdíL9wƜĘAn+!Ŗb IŸbũŲ&äˆhĄŸ“ Š™ĪIā ҍĮ Ą­V+õ%ˆJv¯Õސu?‘t­?cĄiF°tëÖljķķķ,Ÿ;boo/?Į)ÔĮœ’ĩ‘f“Ų°^¯Ãá0<ˆŖaŸc[ŦwļE’mDÄááaJ8FŽ˙ˆĮ=XzŅā—oLŸÚĢ۞ĀükĐĒ|"br‚f­-ŧēēšuiąâ6F]ÛˆČJ6´ĒÁ˜”2ÃhIÄā2ŧ6y’ˆĒēÆbûŊŠ1UÆáõ*MÁ4KØ˛ņßŨŨMmž•QĖÔXSĖ9GĀ¤ĢŽ˛@ĐÌDLNGä0,,,d˜Xŋš¯ŋn˛ô‘tû@ %ĐYĨžIĸ'Õj=jīI$ŅŗģžwQž“$×aļZʇ?üV|ík˙G|ä#Ízí4ņ’öĒ´ŋēēš€ŊJ€U94ô5§ĄĘœ$¸Š8!ˇ€ķRŖ˜Z  x˛¨Æ™ķÁąŦ˛€Ū!N@r•S™ûtēÕÚÚZFæææ’Ũ6ūĒė`uĪĪĪķ ŖĒUv$ũld'b’gūJv}xxČj!ú`AŌ¯ÖˇįĒIŒ‡‡‡ņž÷Ŋ/^ŧx‘Ī„‘g#ô‹H†D>‘īeė9X;;;S‰ĒÍf3Ö××s 9å‘uų9~ëëë1 (q´õ7{'˛Å)­ëˇĘø€Ļ*ƒs]€OuŦFŖ‘ÕZTæĄ]—Ä1‘°EÄԁBlŌųųy\]]ÅîînDD<{ö,į-ųÉ>đ¸¸¸HŊļhœ÷$ŋā(`¯ÍWĪg Õ -ĘøÖ¨i¯×KĀÉ~ˆ˜Ŧ¯¯įû/6J•5‘CãÃfpūüžĻŪ8Naņ,ŖŅãĄrUĻĶëõōš"ŽæŸgyŠā™cLŌĸ˜ƒyĒ/ŲäJ’T; Š&˙Vįãūū>321ĸŨnĮÚÚZüɟüIėîîæē;88ˆ~ŋķķķi§§Õ°8°U+Ļüe}ėߌ'Ƀ?õšj?ēg§ZŽģ3[EGh¸~ˇžeŅęũ|–egŖ6ÚzĪ:nuƒ¨ÚĐÚ§ĀŠ*ĩŪsÄôņôGPu:.MĪōĨ/}1>ųÉīÍ÷Ąyn6›Y Æģž[û°˛´u gį‰ûcķfĮŊžS-cø^­ÎĮēæę×kēG­‰­ßŧŸëÉ+đûĒ‹V2Ķ=0„õŲũŪ{T–ļŽ­q2ˇ­-ëŧįų}÷Ŋę^[/úÕ=]Ģūŋ’ ĩFxsŪË}gׯūĒ ŒúŊŽ÷ŸúŠŋŸûÜg§æHœ8Úúú™:§ĒíŌUūĀY­×ˆ<Õuę|ŠīZgūģŽĩgNŠÚâ;ĩÎŧúŽî5‡ĸ‚åˆĮč¤=Ą’žq<O%ũÖ?œâúŲ:~æVgūÔųWûĢŽCëWU,ũ\×T7õšô“=pļ?Ôyõ^ûn~^íTŊfm"u.Õ5ĄÍF’ŊcĩģOíÕlOĖükĐf“é9á@ FC‚‘Žˆ ob°#áN§ĮĘėĮ֐đ`A""K_b*ûŅjĩĻJášO­æá÷UTe 9ˆŸc+lP , ˆąæÍ×ëõōZãņ8CËΟ?ΰ4ļëtŸúV?#QŅžãÚžWŪÜÜ\V§qÜ8æOÕ!Mu‡ZžcTĮŽJhĒ]¯n6’tõ•ųča´Z­ŧŪ§>õéøō—˙(>üáˇōšj‚pD$“[ëŧĸ!¯u —‹‹‹øÚמ?đ?ķķkįØš†Ė&ßl6SRbŪVÔúš?ž WúēŨnjŦ¯¯¯ŗ/=G-J Vu­ĩRŠr•@P§~ŋΟ?ŸJ>ĩ–1įėĩĩĩ”Á`ĖsNŠ”ņ`“ąå$rÖLÜųŽëH6w*0ŧŋŦåŨ3áĩÕje˛¨õŽvģĩ(ŲÕV …LÁÁOúĐĒQ'€‡äˆ\čyņâEėííMŲ‰áp˜õõiԁ@'„’’Õ>1Il""ß÷ėė,íũŋ‘čC➅}UåE´´ę¸Ųu˛ÅÅŌ Åˆ‰ˆ]\\L9˜ė=øĘĘJ:,lM~M.Ušå}ī{_ŒĮŌŦååå´ŖúĢæ:ˆ š"ęā×R“îÅ>*ˆāũôuE—Ī&ôûũčvģšOp"D/Ė}s\ąÂĒĘen;ŸĀžAŦĖ)ˇøYŒ”PMäŖ&÷Ęī!-ŦIákkkIpX˙OíÕlO`ū5hŒq•ÂЄû]ÄcHsöHčZåĐĢL`Mà ^MhŦÄōōr´ÛíÔHĒĶ=Ë’ĒŠPĩå‘ā2"2dZYX’!0ÄXû°Ú$ČJj>(Ffii)˔U­˙x<Î Yȡ&EDnP¤5AMXŲĪl^×××Ņét˛Ô_~´Ĩ5ä/Y­Ųlæ5RžT+]Чcyô—p/Ē$Núۚ ,? ĶéäFŠoÔ.âŊ­/ČzHŧwģŨŽ/ų÷ãã˙DÜŪÎ' 5GhŽI`0ŽŦĪĪĪÄŌÆFDūŦVūáp(gD.@‡1¸ŋŋÁ`ŦæĘĘJęûÉ=Ö××´T­xDäweaķǎVÉÆ\yčt:šiiĮãqJÁĒÃxŸ’ UT€Î}ee%ÁíŗgĪøFLä Uv4 âøø8Ū÷ž÷MÍ[uЁ¤V빤%ŠTŖņXԐŗE†b<ÍIŒ5īF"ÔhŒ3 ąk5ąs\5áˆ_ũÕ_‹Ī|æ7cuõą˙€'uÅũ pynÎNÍe@(EģŨžŌos|Öē‘0ʉ4ötņœ8ũĚ搄´Ûí<ŒŠ“ÄÉqA•Ŋøųũũũ”œÆ'K4o­ßjËõŋ>Đ'wwwąšš™Ī6?J Ø–ÕĩcL"Ĩ\뚤VāÜxKč=;;KŲ6ÛēįŒąĩUĘæ>æģ5!מ(9Ɂ¤2ˇ8ņ’XŲXķGIāķķķŠü2EŦ×öîėļ}ŠķÎū;ĶåŊōĄžÚĢĶžF÷5h@YŲ>›bM†‹ˆ“5yÖįJ CRõĀ€ë(ƒëU†SĩL‰ß{nŒ>ãesØTŒ–įÄ8Õpģg­ZÆ °+kE4+“S ´wåHDDFlž•mÔĪXČʘWP[ÃÆ@É,ÕOމqâč¸ļĪ ‡Ãdˆę!˜ÃČ7“Sgk)C›ĄUŘVĢúĐwÅžđųŠÍ­–@ĮSĨ5̜#"ˆ&č“ßûŊ˙=įLeá;ã}{{› bMė3w#&ŽĪԄ]ũã9+ãX;s XˆÉEęŠ¯žM"]•č§*!¸ŧŧL¯ąŽRãmÎxÚöꌙs˜mœ:žÆ3"2Ša|jõ@AŸÛ˜C€rÜĪ+aŲøc9N4ƀY-Á'bÄž™7žīēŸ“$Zĸteuž]ŋ:ŠėŸ>ÔŗI‘Õū]@6,oÉŗÔīa•tķĸ:ī€70Yí@% Œ={å”Đ*ŋōŽ$}ÂĢqygīÑɒÃ#Ō$JČ1õ^lRDdô >˙ææfŦ­­eÕ$īW̘™įÆÖMÆ 6īũ|6ĄŋVŽĒ6¨ˇĻëžĻYĶ5 nŋąūŧŋ=WĶúĄVķÎ[™]ĢÖX%ģĮ\ˇĩĩĩŠüƒšPũÔ^ŊöÄĖŋM˜ģ&8U _­öqqq‘!ꋋ‹¸ššyĪ ÅĻ[“áę†ęúyfDdl‘Ą•0Ä0bR]⠐šl(U"Ãk4›?Ŋ(ļĶĻ4ŠĄoÆãq–Öt¯gĪžea՚×jA•!ĸÕėvģé¸T-ˇ÷‰˜” “$WŖšv ‰ÃcĖ$jrĻj¤FšNÜøšąŦŦ6GPU,œŸcļ8Ãá0žį{>_˙ú×ãŖũØÔw5,0f_U‡z ęË_ūũøÔ§>ũũú8/>ī⠙štjnĢÁQŲÜܜb#kĨ%,Ŋ÷ųųyVép°ŒšG Š‘ĪåU:ĒN2`×h<–ŨŪŪÎĩĨŧĒ1Ŧ데´´”ĩŠßyį)Ö^?<Žœ´÷Ņ/_üââ͟ūžž=Į€#`ēÖÚÚZj’+KĀ@5âĐj=Vų˜­tSû7"ŌiÃ8ë_ž~jˇÛq||œ°ę'úI’éÕÕU– æīīīŗ~ũÆÆÆT"¸w0gDHęZPŗ_mōˆI‚ņh4ĘD@uãcīŧbØooļzūüyĖĪĪ'PåXébĸ9$=˜öĘės‚8+Ö6Â:7ÖWWW ēTŊaÐÚææf:ü¤&¤ûûûąĩĩ•@”ÜĢŨn'`­‡LqęĒÔGŋqJ#œW“ UP°oœüvģ'''é¨ârŸU“ČËČ38H r–N§“ļ•Ã,Į@?qHɞœŪʆŅŋ×DlŅvģŸŠļģ\åCķķķŅī÷§NĘļÚ["oÆÚŽUã’Ø­­[šsßĢō¸Zų ábŋĢŅQ×;==ÍšXKŗ×læp8Œ´ÖËņņqV36$JīĨÕ¯’ ÷¯Ņ#ëÁs’?ړEGŖŅTBôS{õÚ˜ nD$ Žē&2Ú@€Œn=hÛĖĀbsmnä @`čØŧ•Îc°mzUĢņV–ކ¤6ÆąJ*˜ÂÚI>Š˜0r @WKŌ&ˆ˜°ƒžŅŠ‘ E"Ļä4āĨŨngŲ@ŦŠįį¸T i3llätíúŊę‰9[’0Ũ °LôƒąĒ‰˜Ęl• ›`Äa‚°eÆŲXôŖ‹?úŖoÄ'?ųŊYĻ€zxxˆĶĶĶė˙Ēo6›ņĨ/}1""~ā~0ŽŽ&}Č ŠõĨ———Sĸ|Z2ZDd"ĸ1j”Ļ–ĀÃFD:-ÕĄ¨y$d5iÜwõ›ˆ†õl{ũ‚ĨŔš{ÖķéŲIŽTi‡éÜazgO v_cŒ­ĩÚkÕ)s¯æĪR-@“M1tĶJΊķķķŠŗ –––R?Íö°O€t•r\ęúį `˜§ÖČÍÍMt:×ŋũˇ˙ëøõ_˙Įq?J†wnn.A>Æšæ#Ļ@–š _k¤Rũ*]‘obŧģŨn&*瀞\íáá!Ĩ*ĩ2ܸx>QYã&ʐÖh[ģŨNûágæ¨j)æÖááa<{ö,ŖĩÜ­}Eĸīååe<{ö,%0Ö=Ûŧ°°kkkų 3cËvvv2¯hcc#NNN˛OkÂĒũČßäOÖą„Ū*ęcww7~vÆúĮČSu˙í;rŽ"&Q3L‰ˆ)v™sķŅ~,ūđŋ˙ø'ō8<Ū÷w÷›ēīG?úąŋŦLËGČX\ŋę×ĢcJ6ÆqõŽō?4’īZß_‰7}ã3†ĪĄĖžˇP“˜}V_Wũ}=,Æ÷677§úŖ†Ū=ˇÛÍęŽ_Ãü=ũf“÷ų H5Ō*N9‹y6^Ql¯ˆĶķįĪķÚŪ @[YYÉÄG‰žĩNûŌŌãOĩ:Q-áįoc `Фxv}[Elį,¸šË9ûO–Q5ßė„h’é´ælQ­§oūšwė3đVįI•SxNL}D¤DĒę´Ģk^¸z‰”rō8GÚŦíáœú~ÍIŠŅŦ:ˇg×SĩK‹‹‹ņâŋ´}~nœk•!ãÂŅև@.y’d_2˛Y‰%ŲŌÁÁA:*ãņ8e.uxfDC•oųų§*R•įÉ­`Ģ\÷üü<ÖÖÖ2šęķ•8@T˜gËËËqzzĮĮĮSķ–ôĒŽ ëÛ:zj¯n{ķ¯Aà DDjG#@ŋßĪ*ÃUÁįl‚šīÖÄKškÛ0Ģ^0ˇ‘ˆ0:XÉ üÉD`›$&‹Ár÷ŊšŒ„õöŒ‘Ŧ&æĩÛíæF\Ĩ%€`3[&­jëąpĀĸM(ą™ę×ĩ`c°—îQĀĐŠ—žËõ°N5|]“¸čyąŗU"ČÛd9c5'Âsˆ˜'˜.ŦĄ{Jüũūī˙+1âĢ_ũĘ_:_?ūņO$õČ|ļ”Č3ØÜ܌ËËËŠŌ›œããã_•)Œšyf™Ë‘TüŦ2xĀVŗiM<<<ä!/$#úČũ°Ļ@4āąˇˇ—˛ŋ¯‡€‘áTŽ:uJŌé' R¤Š:k¤t )‹Ņh­ąđ÷÷÷ŅëõRß ŧcŨn7ŖBÕ)˜8īīīãčč(c°FD]ҌÕÕÕčvģŲĮŋ~3fd!žCfãŊ›Ō‰’Ē#"yœĻûûûø‰ŸøÉø˙â‰ņø<ĮPtĀũœø)b§ô{Āŗ^¯—‘J ÷Ö§7771 RbáŨ.//Ķ™Ē'ã.//į|ęõz)-âėԚęãņ8snäpT}~eŽkå öĄR €ėĖÚ7îƒY‰Ŋü• Ú­ûGąæqŨßßg%$åÉ`677ŗ ¨LŖņX=H)×åååØÚÚĘg”kÃ’x‰xõûũÔŊW^’z•û‘ŪqāZ­ĮĶokäÕ=9"æ÷÷UąŒKÄÄšyįwĻ$Ŗ˛ˇN§“§õÄ=ĩWˇ=ų× ]^^f8~mm-7F⯿ÆÛb #O2ãÚ6zÆÂ&1 še8r ĄūZ†aŒ˜TYĀčŲŧ*HŽˆ)VÉīÕēųĒVÁy Ũ ÍŦISJ)ÚƒA:2 ŠÁˇáŒ1 Nģé>6ˇ………LJĩáúú]ōSeM#âÛj› /{v‘ä\}܋ZÔDA đ'į”ęĩčņmv¤8§l4Å[o}OŪK T-.ŽeNÆíímlnnNaNƒ.Đ{W™–cas#íĸ×čĖuãKjU(šžīââbĘŊjž*GÁčڀWVV˛ĩ?Ãá0k’Ž‚Mŋ‚ēŅh”ŦąĘ"õ:g͋vģëH/-='ŖM>§îuŗŲŒ~ŋ鰐ŨŪŪÆÁÁAFNNNbnn.­ĶĶĶxöėYĘĄŪ|ķÍŠœ—ˆH]˙ááa‚&ė'‡×ŧ7>įįį +€<;;ËDh%kÉšāĢyž*-‰˜ÔAį¨×zę*´¨Tŗ´´”2)ī ˛yĪ´°°všŽŊŅhggg)_!+ä ’ųž9ŦB•$cs„cĖÖüß_ZZJö(e7ŲŒq%zØδ~ĒҝÁ`Ä‹ČŒņw6‰¨Ųxüx˜Ôææf:!ĩēgĨĶé¤ô†-õšŗŗŗ<ų9"ĻJčJ&¯{ƒį"Ņ ą˛˛’öŲ<ˆˆ”#Ųƒũ†3‚m—urr’sÄx¯¯¯§nÎÛWiÄcTi{{;Ī8ØÜÜĖ~ä xĮ­­­tíc5wáŠŊēíit_ƒ† Ž˜0Ũ€ SɁõo,#ãĘx‘ŧ0⨠v ø`đlzĀš&Ä @VŖoCŗi`Ilļ@ZMžĒ:I›I­ˆÃ9aĖk‚šd0F×eè9Bŗ5{V™O›ƒ ŅU3Uz }ž&]ø“ärŽf:â`Í*ģ‡ąÆ"Րēkw: Ë×D¯Á`ãņ8™6ã[Ŗ96˛Z™#f“´Qé_Ž‘M3)lN61)ojĶ՗Ø5,¤dg›´yhjXœķyyy{{{) ¨ķĐ?;;Ë1О}Ųm›÷ IDATJĪ ĩÛíŦÚÄyŦĖ%'ÔēÄŦM`{cc#+ĪÔ5îŲ=§9HæšĢü0hˇÛ™Xiđë™WWWąĩĩ•Ž-€e=rŧ>ŽN§“ŋ¯k1"âųķįét˛ ä}Æ0ÜŪŪÎ5ž°æ:'Z.Āp8Œ—/_ÆÆÆFÚ÷ĒÁwė÷ééi3××׹ģģ;•wAnÂŽpT­YQģÛÛÛ$3Ēė§–Še×FŖQ:.œŗ‹‹‹Ŧĸãy$œŗõ¤MŪ đڕĩ­2ļ~ŋŸõđEšĖ5ķĻVV’ĖŦú“=Í8ØŌ^ZŸĢ9.ßüæ7cmm-+ÕčëŠÄngg'ßu0ÄÂÂBŧ|ų2Z­ÖSė+ŪžĀükĐHI""–ĶcĶŅ€ĸĒĪtĘ(ˇˇˇ ÄmLd˜€ ȜMĒd°kō_ÄD˙W+AÔ:Î6ÖĒ)Œˆd̀†áŦF~ցņ3Ā ÆîU™F՗“äTF1"ŌđÖÛ¤?ž‹9FhûmfÆÁũŊ—ûršQŌũY# @Ž*ÕņáÔԄ1īYųÁ`sįŊBđĩJRÄtuˆÅá$ę+ĪJjDį[„]ĶøŪĨ–ņäPaųD~ęI ÆŪfËIā䘏ĮĮĮŲW~¯ eŗŲĖę9ŸÕÕÕ\3֔ņ1¨ ڜã*=ÃÎÚÄ Ŗn]+•4Ímãf×*GU6%™Ôx™ctĖ÷÷÷ąąą‘`Čķˆ&HĖäčs<‹ˆ‰q5÷/..˛_ÉĘĖ5īíYĢ3g=yŋz2+›§€bs~ļÖ8›Į†ąAî[™{`“îŲujĆsē¸89‰•ļ>"2)ļöVĢ5•‹Ááhé'ūŠVÎúĸVúŠzjvRBvģŨN€ĖŲv-NK­~åŨô=yĸ>%ũ2jĩ!:}Ĩ9Ũƒ°ūŲcĖ9Š2ŸJŽÔ¤fkΞÄ1WõĨÕje"6ÉfD$áU“¨ÍN‡~ĢäLÕî÷ûũŒ„āĸTœTû—žFjp>Ø k‘Ví–ŊC„ēÎÉhg#ROíÕjÍ_üÅ_üūüĪ˙<žīûžī˙īgyj˙ĩßøßˆˆHã†Á˛Û…L›ĸË†UüēÉcíAc“k5“‘Ä~ ų2îž ›ŽąŽ• ææærŖ\Ŋ]ĨC ĻČÃ,øLüĖF.ô* jŗ˛éˇZ­ŦÖLÛô8;ށ•.OOO͈W'K•~~ŒŠžŽ˜hM=Ę-Ā–(ƒ(Fļ‘ĪŪh4’ņĩib\WVV˛ē‡ ÍrUo[į đaū-//į)59PKuÃĢū`ķs€Ė&)„mÃwĪ 0ĢŪŧ=îũŠ›ĨMŨ|“đ\] ĢVál---e"œyÉQØÚÚJ'TUãÆŠq°úũ~t:Š0;9ŌūčWã¯˙õ?ŒßūíīČõ,‚P+ÚøŽõ까5=ŋčE•] ũŠā¨QGë˜]áøŸeކŊƒlŒŪž“OÉ ą9ũsss9O"bĒD§ū3§ŲI˛RKŸįÔ°į‘ųPėŠ9XķZfí$[äâČCŅĸ´ÆE[OöŸų‘‰§öęĩ/}éKOĖüëĐę ]4.//§~ĩę ”ØÚÚVBØŅ†…q°‘š– Ŧ–ÎŒ˜ÔXĮî3úF#ŲGI5Z`ŖÆֆɏĮЉęfTŊGŖ19šą˛O1~ÆŪ1öúLBÔŦNžÛŦOÔ5ˇYh¯)ÆÅfÁÁ¨Ā kÕ:N’ Úōōråž`ŋb_Íq‰Ŋœ^Ίœ÷FØŖięI̔ƔCRŠØYXXČįŅW䍍F#K%돧öęļ'0˙š4 fļjmĸ60 ø: ˙÷™ˆIé1ÆŧļY&§ę8+s Ī>7ĻČwĒ VŲÚĒīôŒĩ‚…ŋŊ3æËû---e0Ö “1‘iUŗŠtģûĶ(cÎfŲe҈ĨĨĨ'aĶ:6Āo•(ŅuÛ,…­+ˆõ9ĪS# uĖU•¨ŒYĖÔ$?}]CÄ5”ë=<ëlųC`Ŗ æ{€|MôōģģģģÔŅëŒ/ĐkŽ×xœK÷ŦĄjׯČÖw7įgæ^˜ļú𚰠lšãœ)›7–Ķ`>Ԝ‹Ú?€ƒĪÕųnlũÎŊęxÍĪĪĮßø˙eÜßßĮø˙>""~æg~:û✟e›zŌmíģÚŋæÂxĢqRÉÆØüäOūTüŖô?ÆÖÖâÔZ7ĮVëąRĘŦ Āöz†ęėÔļŋŋŸÛUį—HCũ^]ģæ°¨&^ŗūgËpÛą¨F›XnMŗzB4Mzíkd'ˆ—$Ül6ãđđpĘ~xīíŧˇ=Ë˙ŽŽĻ"ĸËž_¸ÚØOļÕ8™Oö!v¨ÎŠZ‘ČĩęzĢë•üđö\îī„asšũmBĻč[ķŋæÕŊ@tAÄéŅ?ČߊķõŠŊzí ĖŋQ´Éj6ĀÛ@>ÁGLŒ%ļšÁ#ƒŠüŒųÄüü| ‡ÃŧÆl¸ųää$Ū4›zÕXģO DÄT•‘ˆ˜Ē!Mš IĖžw¨c-r1‰TígÕ7͍ęC€#dĶ˛Ų ‡ÃŒ Ø`ŨGéG}Qž„ĀĢ䤖C$R7 ôīZUÃx{Œ6 pÄlœ˛QĀ‹VŋųųĮp°JdJôĶN9ÄVFDFmęFÅ3æ˜ŌĒ՞ã~}}=U†ÎØJĄDI’ŸÅÅÅL&Ģ›ĒMŊęÖWVVbqq1Žs<ÖZr/bRûÛIŪReRîo흟Ÿįü&= ģŽ´Ž}Kžgm4ņc?ö7ŖŅhÄŋûwŸ‹ˆˆŸûšŸĨĨĨ<ņ¸ŲlÆŪŪŪ€°FjŌ—/_fÔčĶGåˆČh•õëũ{~~>NNNĸÛíFģŨŽ›››Š(W„™GŪˇæ>4ŒEDö“1'AŗÎ°Ę™>%‰œE‡Ė÷Ēŋ1ŗFƒAFm–——ãCúPŒĮÕŗ<æßZ*E-õ;ŊˇwS brv…(Íx<Žíííxã7âë_˙zFÍ^Ĉ¤RsŌz‘0’=ëy Ž177—s"&‡‚‘ŠTû õžös•­eīkŌCEc4ĨŖŌh4˛ä$Vß;".ØMc[Ár•ípl<ÆšÁ>°Ŋ“jc5ōÍ1–[“ĩ­ķûûûøŗ?ûŗ˜ŸŸõõõ´?"ĒĸŽU“l͋ˆI.ŲS{5Û˜ ZÕņŨß?/O €DLj)c[rŦ2ō Îååe2 Â߀'Þžž>bkk+NOO͈ޝ¯įs‘VØ0jb&ļœ1¤ˇJ1ŸŽ+ XÃĄu“­ėÆ `ąis°Q¤#žŠVíŠIļ5šsww7kW'ûX#N;ˆ”0œåĻåyŽŽRG ”*ŅįÚōjĸ_•‰@OZnZV!cŸ¯za` {ĢjH=Qđņx<Ĩi­ Ë+++SšX‘ÎFet•ĩîjmoŌ¤ķķ픆,//įi‰˜J€ĶXvģŨ<Ņ—NØĐ%˙ŪŨŨÅÆÆF^ÃqP‹Üœ ÍkėĢū‡yđR-?č=Ēlfii)+YĶÜÜܡ•3uˆ”ų÷^ú÷*Ķú؟ũ™¸ŋŋĪ}îˇ""âīũŊ_Iy yZåööv\^^ÆŲŲYødÉHfO{˜ä8 ČG*¨r{Ŋ^:–­V+uŅdœ'ü˛ ĩ’ 2Á|į0Äō~ō'*~ã7ū§ØØčÅ`0ˆfŗN'ŽŽŽâčč(OVPkĩZŠ…><<Œvģ‡Õq„%csz0åUßüÆoÄÎÎNÜŨŨÅüÁ¤m6îF#+Į¨ūb^°ėīūū~ĖÍ=–=>>N6z0ÄöövJĸØüˆGĮÃ96~UŽ"ĮĻßī§c_Ī ¨Éž@¤\)ķŽäęúú:666âÍ7ߜ’V'loo/‰Lēūđ,l ŊjîÉWNWWW9‡ë\¨2>ûy"gē&ĮjUĘ4§dT52Ē/j‚ģũŒt‘ÔÍx"GVVVâƒü`öŋ5ÂÉCŒÔ”;öŨyj¯n{ķ¯Ǎge“jRiDd"BčĐ&t}}F Pe!‘›j•7Ė–ģššÉįa¸č_kŒH­TƒŨđ<ķķķYú ¸¯`GÅ,‰†y—üF"0{"¤šā€žģqMd¤Ŋ7ƒėųũ˙ęę*ælœŒŗÃCčŲą6ũ~?‡ûÍf3vvvĻŽB?::J–Øx ũc“Ēdž¯ŧš0777—õŒ%‰\TšIÕ¨*ģXŖ 5raa!ĢŋØ8Ũŋ2Č~¤q€l\ĩüĄšŅl6ŗ$›Û{Ö8L0Ļë0p8VWW“ ôy‡Ūp 8 JÖ(ųņŽ<[ģŨΚää]€ †[ÉI ĩųD_]ed(æMDdžBĤ2ĐCĮņÎ˙å_ūĨ8;;‹õ¯“æüĮ˙N,,<.ež‡ÃėŸ*ɸģģ›b˙ØŦ+§ S*B5y“3RA30Œ™o6›i‹üŽ“fŒŒ™ĮėŲÍf3ŽŽŽRBCŽ+ _ߊ×ëå8|ë[ßJ™ƒ9Éé0Ū÷÷÷ņōåËX__OgYîģquu/_žL`W%6ĸDŊ^oę 4ÎŖŖŖ´ŗæŨųųy ‡ÃtL”Åˏî­Ô§÷~ųōe<ū‰ŽČyAFąwú>b"uŠ*6—ŗ{vvN'÷īTsØĒzĻ‹wą›sæ<‰āl>ÚS{ĩÚ˜ šÅM0lŽĀfIxß&aÑüXØ8""“>i8ą#@•kc¤É$lP5Éļę‘1#˜uLBcHŸŒ™•ä0vdQĨÄĻí}Ü‹ˆW׃SÚGÆ_Õ›Š‘1|lúHø@§ˇ­Ėįx<ŽÍÍÍ)–šF""ŸM¸ÚīųšL5Ërë'eÍ ›M•ÔgįTiPĮ™ÁvC}ŗžžŊ^/Ų<} L؜*æ}ŧˇyK˛a.ČAĀžiUī}ŋ÷NDŦzŊ^2ņ@ÚÕÕUôzŊyŗQ“:>‘ŸģģģˈY? $:´ĖZ>::Ę1IjˇÛq}}Ąõáp˜,˛(’ž‹˜Tvár ¯ĩ×ívcyy9~ėĮūf´Ûíøį˙üQS˙ķ?˙s9ĖWëm<ĮÎÎN‚Ž ā\đQQˆdÃ8’ʇš1U xu]kŨ:æØsv0ÔĢĢĢy‚pŖŅČÃŪęœÖGdŽmūËûyxxˆŊŊŊ|ÖÛÛÛčõzé\ôûũ´$Uĸ(.a ‡Ã\Kœą…áв‰ÖØũũ}Zį ´*Ũ;99ɊYö„ˆHFŲ\úÎīüÎ)™–¨ęŦ|C.Ÿ­Ī‹0AF'ÛnooĮÅÅEüųŸ˙ylmmÅöövÎk€UO6ŽÄūc7Eĩ8ŧúÛgãāā ŖAu-V§Ü<č÷û1bcc#ŖŒrĄ8<úĪxˆ\(ä°ĩĩ•‘•ĖŪ}÷Ũxxxˆ888ˆÕÕÕX__/^ÄŗgĪ2ZyzzšvËéÍ<ŅB÷dˇ=ģÄzÎ;›X×ĶS{õÚ˜ š„MlāUø3Û+Xô9,ŋ ƒxrr’Œæ‘ŅŗÉ`UĒÜG‰ÆõõõdĘHN„ÆąO@˛Æ!ÁØø|ˇÛMf‡A¯%Ŋ×íím\\\¤Ö”ļ9Õĩ’Ž÷ōNķķķS˛ ,6vˇjxėœw‘ ëh“­!gr&ĄãĨĨĨ899Égį8Č[ĀēĪjI+‹Yå7ōH§°Ú0ꅍ›žģ–ēŦ ŽÕ kôʐ×(Mģ&$W)Íh49öŊßīįFGG.$īķ¤ŗ#Pîųô9Ũ:āÂ9õŒtĖJ–ēŪŨŨŨ”‹Uäœ`ZÍ3ũĖa$‰kÂ[DLEp°„¤6æ'ÉgÍy'žĪu Ô¯üĘ/Įõõu|öŗ˙,""~ņ!Ųæŗŗŗh6›ąžžžė/']ũqŦ>1‘˛ÕĘ.Õ>YúÖ<\\|<üˆŖ{tt”ÎĮũũtIR@H¤Ė]ųņ˙‰ø—˙ōˇãčč0ICũ˛wo?ļŽ×YāG͚uŽUUŗŽk¯ŊŊM,D$Rn¸āļotˆ–pâÄvâÄÎ&ާB‡ŽƒEđQņ!>%$€ū#¸ĸM[ŠDīd{{ę<ë\5ĢĒ/Ęŋw>szGŨR ŅŦUŸ´´ÖǚķûŪī=Œ÷ĪxÆxEÄŌyRöĶjūúŒˆ!ÍŊĪævŋĒj㖕IĖ“ĩĩĩĮT„)k“^ XpvÃē ­ädUĩĩGz–1v_PËn8ûĀɰƒÁ0é]˛ŦčĪââbGå5ɖäYKqāŨĢÛíŽŧžīúúzŗĮĮĮĩ´´4’p2ŗÆ<ÛÄÆcí9—">œ0šB)ą˛N§Ļ†gļ˜ 333ÍéÄŗŲT§Kg”C;UÆrû$‰9ß)‰;ebī¯÷ēķ/Á• O6V,”KˆÂɯļ"“?õy ŋ (ÁG2XÆ-õŊj&;Ā ¤ã—7žÄ“rŸĒj• \4€%‰ˆ$Š4p<€iÃÍj(UÕęa”=Ã÷2ZaiΎM8ķ3lĸP6ÖßĻxqqŅžëëëvė;)`Ÿl.ômŽ.ķB{m UÃŖâ%¤Ų˜3ēb>˜K6b qwwˇÍ•ņ05ös–ø<>>nuŲ3$YŦĒjL˜äVŽ[ޝņK ė÷$AH¸HUօ?::jÉkŲ‡Uà 6ØJk-Á´>áq899Š^¯×ÖĢd_›ĩųËÉ2wD•y÷ŪØØhl.)Ķņņqs ­ JN f¯ÛíÖ/üÂ?¨ĒĒĪ~öãUUõąũlsĪ’û á8%F¨ĒjëŨģLOO×öövsR>ũ¤¯Es€!Q@ļŠ#ÅŪqŽģge[ččģŨn=yō¤E¤ŦQcėĨSåžé˜g´qeee˜÷zŊöĀ" ­?Œ’uîâœëÖe’žoHb7‡jccŖŲnĩŅ%oZ˙äiČíDŲOƒA‹Æ˜įĸ YŠ8ג}FžÂGß;$Í–GÂŗ“ōt’ä0—ĢîjķûŨõõuKdOģ§’ŒČPÕ]ôjgg§666ÚüÚÜÜŦ7ß|ŗ&&&Ē×ëUŋ߯^¯×*^áI ™_ėKĘÎ2"lˆ’9ķ"‰129û§Ŋ€]1ßí‹KKK­īÔßŋŋ^ĖëĖŋ$W•Ŧõœ,ŦŸc]Yđđ}›W˛ÂYĄÄMOO„5ķwîƒáĘĶiČvš%āÖ5ūķžØŒÔeį…!TIÅ{ËHYKn~㒉,ņɈc ´IŌ€â3™Ī`“o¯ąLŨĢöĻæ:õâŲjhs>‘”æ¸ô€â}ôgÕ°‚ ‘cā^ŪM;9MĒdũėÁ`0D]" ÆÃ\x§ĪwģŨ&›Ęīë[N‰ąĖK5öžĶdÜ86ōö{`;k~ģ2O˜qZUnąnô7ŠCJŦč†3’&ÉØXp⌭õTĨŗŠ‰ÕoŪsaaĄž?^ųȇĢÛíÖ§?ũÉĒĒúÛûoĩö=}ú´NNNęŨī~wĢ8SUm\”4.ĀĪ‘“Œƒ@DAJBĒî@[Ö+įČ™ŠsŠ'&&ę}īûŅúŊßûŨĒúŪķĖo}•ŽgÔ|õI9Ÿw•ČNeMxŽwËų(Ē&b’9Jģqŗ–TŨ!'ô‡6Ü4Ÿ€Cy!îmnų<§ Į.í^Õˆ_]]m2”~ŋ_-yYô”ķ{Ę`pw6AVÃáŧķįįįu||<’§ g$e–ÖŦyŸ5×ĩ9mIΟL¤OāoũoŽé9YŨnˇIģĒĒ9œ7Lž1×NĪäTgŪū­fGr,HŠÚ)ą’ĮßõūząŽ{0˙\ xÕŨ‰žšáeؚ1ŦtX16’Øy I_˜E,p€ú{yyšąå€cC– QĶå=mV˜gŽSU5§îđđ°VVVF$r=˛ũ@;Ŗ^€6Y ‰Ãä)p‚yËÄB Ȝét:­<Ūōōrc^éjÕG÷ĮĄM-y1į0UU+§ĪŒ‘ŋļ›š IDATûũ~‹­ŽŽ6Fķüüŧvww›üL{ęŸü“_ŽŲŲŲúųŸ˙ÛUUõĪ˙ųoTÕđt߅……ęõzm,9ɚsÖ2a¨Qüööļ9‚§Œū°)ōCĖŠt\;NũÜĪũ­úĘWž\§§wšîõõõ‘ę+ÖöūūūûĘų3GågdÉɔ=™/ĩļļÖsŽīÉÉIŗYžc~]^^Öęęj;L/#ļæææfÄAęt:­<äŲŲYĶV;ÄNĻŖŖŖ&ģęvģĩĩĩÕæ…>4Y,•sŒZâ-…Ŋ0žÚ;99Y?nYĨ9eΓ[qˆVWWpÖ_œŒdÉ_š)’1Ôĸה|ZlŊDįŲŲŲv.ČōōrŊũöÛÍæ;ךR5<ĨųĪü™?SĮĮĮuzzÚÖu&xwģŨ–›’Rą™™á™ú>ŖĢ"(¯,l`|ėĩö–ŒHŪ_/Ūuæ_‚+Á8vˆTp›b˛Ė€‡pn–āR8öųŧ šĨáō÷6\ėRÕ°œ&fžĄJ60K0”e.I€8†´Ēž§­Â´6Ŗt €>Ŧ8y@.Ęũ cõ%ãV eEī– ° l=ST@‚!&ĖũŊö9ķ˛BĀâģ)ƒDfŒR‡Ŧ-ų6Μc†ú˙Ā@æbЖbb3â`ĘPģī`ĩ‹ƒ“%>E"ō0.8Š);!Ŗr˙ÜėĩËŊ3/!A…ųcÚ¨9¸™'’•tĻĻĻZrdˇÛmGÖW O;6f*Í-N™$c}œ}”zīĖĄĐO™Ķív›Nß\âčJŽÃZsÖRÂņņ˙JŨŪŪÖ/üÂĪUUÕ'>ņOÛũÉ[ŒŠŋŊ¯HžÆ•”Ē9œi|}ģ/öøôô´EmRZĮÆŅæ§co^VUs\=QN%p9ĶôôÆ+ĨT †%ĩë?L2įÃXsˆE‡˛Z g•ž#ĪFˆče į”ŊbCÍ}Ušvwwø%§9>>nk[¤+sDoŲËČŌŦQō(ë‘MęĶļ˛íéŒ#AØë‰ æđgKs $WdqqqäTŨĒģˆāŪŪŪHE7ĪåėË]á˛#ĸ"ėŊj?ė}Ԝd“=Wą)É ë—KâfkkkDŽcú͇”āŨ_/Ūuæ_’ 3ž›Ž+¤đˇĒŖ­˙ĒaRj2ŧ_Ŧ)†z0´p~˛ĘU՘BFˇĒšaʔŗ™2ž˜OlRU5æÁfn”ÚxĢĒVWWÒT “EmōUÕ6ķ<ėŖĶšĢ/ŒĩL„#Õąü ō|_7˛Ēĸ#yŲ0H:—––ZÉLm&oŲ°ŲÆßĪ<Čađs`4ccccäwڜzxī‹ũ7žÃq2ŽYŪĐ{`4U:??¯Æ6k,/šƒų¨šļMßŲØx›Úį”Šæ9iŽWÕHõ&a} $ķ<ŦrUT˙ŲŲYKLVH60vĒųäÜ„­ ˛1ķÜú_ƒÁ¨ÎDC[&áb‡EĀ0ĸĸ3yR5ĮCŋNNN6‡“¯* 쯉°ũÎaTéØpæææZ2ššhœČeϧ§ëéͧí´aQ83fOÍĖĖ´j<Ū+pNŖųžå]EY´3OŒļŽ=[¸Ēځh;;;MVĻĖqVũąN8F˜r§Äj+‡K2pÕč)ŦY4ōnˇÛ’DąîŠhįÄÄDíėė4ƒLbj~°ąlšŸYGōØ#ŊŒ~§Líōō˛U™Ę’˛ˆĶi’ŒŸŌË´k÷׋yŨƒų—āʒZĀPÕc€šq`ƒÍĖ56ååååz×ģŪU{{{urrŌjgbį‘#AYMÁeķđģ×^{­ĩ‹ÔąYō 3I _Uí].PĪĪΎė@/‡Č0l4ŌƝU Á ÖÛf"ŋ´´Ô˜” gå}Ŧ\&™aҁ=§¨x‘¨–+ĒĐvˇÛm€˙ôô´noo[• Äø ĶW “ßü­ŌŠTˇÛ­ĨĨĨæô˜(ĩĨWWWˆįŲp395Ģh`Ļ€'‰~į;ßisÂŧÅŧŠü`#E>ۜžT̐lfŽŲHEŽHdž@c~~ž9’€´š’N ĐĖŅQũEâ\Ö@×ļn÷îbķ;õŲîUUÍá1ž<¨ããã6/<øJ`tŠ^r||\ĢĢĢ™ÍÄ@N‹11Îō_üÅ_hL˙ßũģĢĒĒĪ}îŗU5z@›1ą>”‰ŠDŸ|‡ļ=/ã DrĒS†Ã`Ā_{íĩ6–SSSõäɓ–‡b^^^6 °fŪ°XaŽu%,îl# ÷ääd­­­}OäMŌ,' ëĖIÎdukųđđ°Ļ§§ëđđ°ŪõŽw5[Ēę °G:xyyYOžØųĒaŘĒ1F6œĒ!sgÚ͓îŧßÍÍMíííÕÚÚZcb0I }^ÔûŲ¸ŧˇˆD–aķ<%ë8!6}÷đū\ũâčŗĘM:É~{Ž÷¨‚#Ā#f\mĩ•õN6ëlK՝3#IМ …€Tˆ^Ø´ÍšÁ`ĐĀÂŲŲŲHíh@Zi6s“I˛ŽwšššiNcUĩWh[SoŒ¤$ËÜRj 2O8NĀŦߘfŗ”đøĶĢ›c9.Ə´Aé9`ŌØ3Ęã2ŋ9}ƒÁ Õŗöūĸ UÃs'RÆ$ÛMR°žžŪō&sķÄ\¯ēKļ#Āæf‚÷§?ũŠęõzõĶ?ũžĒĒúÔ§>Ųŧååå&ãK@n\ƒģ\‚ƒƒƒzQ‚Sų)'ėt:õŪ÷ūp}ņ‹_¨ŲŲɖä/7âđđpäPļė_s„ãļŋŋ߯D[ŲA`ˆ”ûĀÁ•”˜y;úĀŗRķ'•tÚŊ+|vvV¯ŋūzcāEgĖ1ßeĀk.‹Lä‚Öā›É–‚ĮĮŖíķ¤]™|žI­#Ĩ,9đØe’‘ĒjŽ9‰žūbŗæææÚûIæöīųȇŦķ/"PUÍVr¨8JæDĐļ°°ĐH c§ĀĐ­Ī|^žH–ît:°xđāAíîî6{„$āč ›ž?^sssíiļæââĸI\SruŊ˜Wį˙ų#÷×˙čĀŋƒÔuē°÷6{Ū'ŋGj’˙OƒĮhå=\ųs%ÕH!$Gˇ 2ū;÷â(Ķ<Ā™”™ ŒXc×äähŲ˛|Įq–YŸæg\Šãĩáë9ųYí“ÄčsãũåžXRīéĪxHuü˙Ũnˇ96•ņq˛ĄzŽßg˙{§wzOŋ÷ŲûŒH”HÆņɤ´ņwIĀI+ŒíĘūŊžžš'æŲīĩU§ļVŋrōÆûĪÎRžc”•c5>oŊ‹ų*yRD!īëŲæ<Ÿ`ŧ]Ø[ëĀwE¯r<´ÃØfmļ/Ë|úžž=ą–õī‡¯|åËõšĪ}ļ>úҟ­÷ŋ˙ßŗ.Œ9ĻĶØUÕH™Å\‡Æ,I‹\ŸŠ?Ní0‡ž{iiŠ­eļF[|fmmm$Ņ_›%?š×ŲŋwõĀ­em%Ĩ,}7įQæäīL˙ĄÜÛÛk}—ĪČËw$nŠÜĨ]M;”ųŲˇigsíW Ī0Hû Ī<Ķž”DŽ¯Ë¸Œ÷Gū1˙Įß7×aV~ņ`Úú˛.ėkú1ŖŌųîūũNûûzŽvŲÛŌn’pĻM§=;ívÎWkŊj¸6ī¯÷ēgæ_‚KŌ’ō\Î°š 6Uˆîôôt¤t×ĖĖL “5`It„âĢîŒŗdÖ~ŋߍRkšĖ1Ã8ÎFkOV}ņ}ĖģĐĨ¤#Lŗ°ųíím­¯¯7 \5ÔZKdzMŊn–įĖļ Éc]2qÉķ}nqqą&&&0HŲV,Ģ=`6ąq~žúVq2€ĒaMņ<í7uĖUÕd%L4&;›ĩ›…ôƒÁHb°ņ"ĸÛm 'ĶŅ$%> čmnnŽ„ˆ\ãŲY}%#+Âīž+ąS;Ė/@Ė:Đ&ō ķ‘Ļ•,ËfkŦ3ņ,#™Ll~÷zŊös}^UaĩînooÛēė÷ûuyyŲBīĘš—˜[ zsā2%f)/ÉW’¯ĖÍ0ßR_Ûī÷ÛÜÄė럔^ä˜Īž=‘ŅUU={öŦUšēēĒ/|áķuuuUoŧņĄĒĒúō—k„UĐ/˜ØŊŊŊV‹^;ˇļļZYÆĒĄ“!Yķúúē>ō‘ŸŽßûŊß­ÉÉÛÚŨŨmZįĖÃÉēėœü”‹Đ–īl„uœOLLÔęęjs8°Ļ"šņ^)ĶĀîNLLÔÁÁAĢ~}}Ũōޝ¯›ũŊŊŊ;ŅųŅŖGMZ(ƒÚß߯ÅÅÅzúôiËo‘´üę̝6ɤųa-˜ßSSSĩ˛˛RĶĶĶŊfŋ=ũv&ŧ›ßîM_U­ŧëÔÔT;™Ö|!MSĖāđđ°åAé?ŅS‘Ee‡í’dŗÔŽH(ČÖÖVũŠ?õ§ę[ßúVœœÔÁÁA-..6)ۃjoo¯­?ãæb7onnjwwˇ­yÚúåå呄؉‰‰vR˛H˜œąLb—0ÎÆŗö[ļ°°ĐėPFĐEŦéũõâ^÷`ū%¸,îLÎJmŸD/Ú`‰ 0 l@YۛqJƊĐ"™4€@90ŧēēÚBĪVö9›J2ĢĒ"h XU͈{n&IV +LTUĶž %ģŋrcB¸´¯<¨~ŋßt”Bđ Žû’žũWÕHé6€+å ēČŒ]:ÂÛŠŋöĪĮ…)"˛aäé‹Ā?9Šą˛Isč W2c Úŗę‚ß3’8sĖŧ{ö_nbœō,IĀŲ×$dæ Ond¤l2™į!ŋCįKēC¯ë~ÛÛÛm\Ō MVXũîĒĒŊŊŊ ­" ‰ ‡áööÔÖŲŲŲ‘ËÅÅÅzõÕWkaaĄ~˙÷ŋ­ŲĒ!‹xyy9Ré„l…–4÷T÷X^^nĩæ3é<ëeKÖ$a8>>n ØŋĒ;Gc{{ģÍÅ'?ų/ĒÛíÖoüxUŨÉoö÷÷kccŖÕđWâđęęĒõ§đévīęYZZŠ3rrŌ’ļŲ’ĖŊ`?˛´čÅÅE­¯¯ˇu§_Ōy!yáHĒ ;iTŸI •Ŗ`žæ=ŦË^¯×æüÇÛ8’†TŨŲõ,#ė]TcëSoŸÎYĘD*se.DžŒšöŦÛíļ{Ļ}[XX¨~ŋßĘcfÄ ÛlŽvģŨöėķķķęõzmÎđZāŨŗéŨ766Ņ€°¯å l ōáŅŖGõčŅŖ:>>ŽįΟ×ĖĖŨIŽrˆŌvú¨äTU KÂŌãúųééi-..6ũúĘĘJsZŌ^¯×tšÖįūū~‹´ĐDīėė´yđüųķĻąWÕĻj(ņųüįŗĒĒ>úŅWUÕ¯ūęĮ[ž† /ĸHy@—Č'M_OLL4úŪ÷ūp}îsŸ­ÛÛŗ–,í]EH$4аaŊéČwww›Ŧ„Ũâ,>zô¨9Ûú8úūū~ŗ{ōd¯1Į’Žy‚H¨ĒÚŪŪnD@–ižžn•ÃŦ‘ƒƒƒqüÎwžSŊ^¯VVVZ ų""{||\›››#Î@’˜÷$lϧ§k{{ģd/--ĩčƒĐúũ~ŊúęĢĩ¸¸Ør[ô›>55UŊ^¯Ųg•bähx/ŅBßņÎOŸ>m`\D.ĢV‘­ÜŪŪ֛ožY;;;õôéĶ–í%I>œŸŸˇŊaccc„I×NΎ9āKÂŪŲŲ)|}}]ũ~ŋÎÎÎZŽbfbbĸ1ķōr:N;Ģā•W^Šåååzüøq={öŦ‘kõ•7dŨ3ķ/öuæ_’+æÜX$>å,=ƒ `ųÛ%ûßæ„Ŋ˜U<,léyļŲsĶūåœËˆdæ xÔtë$ŒąF2T Ĩ&‹‹‹ÍŲȨšĻõŸ}ÉļOōöŠ.ŊĒFĸŒœųÜ3ōņ*-ú›ŨŽM)}öėYžžļ“ŅŨ 7ö™Ŧ_[š‡YûĒ?/— cųYs!Kū˛Ũlâë•W^iûoΉLvĩŋ'átŊ¸×=˜ .ãÆ`eYŽķķķCL§Qˇ™UÖČŽĒļŸN§iŠml˜ ĨĶl|´ ū÷˛÷AĖąīt:ZZZjFņææĻiŽ•šKē0=&nffx Š0vjųW ) FÜÆÆšÁ}č? ‡6mĪ×€\Uĩ’ˆš GNwNũ¸öaÆizõ #ŸR%N]n|Šs&iĐŨî°ĸCV3š/=å&œ f›Ŧ’ĸæy€Ņ&‰ĀI<čj9éā˜s æķđĪå\z}˛žžŪápũXUmO,ÃDŌ•Ęáȍœļ9Ĩ8Gj3×ĀÜā,Öŋ˙÷˙ž.//k{{ģī™9*æŖ{Š4ÕęęjâWWWõāÁƒ–X999Y T=xđ ļˇˇk{{ģÍyōŦhæ/˜{{{8ŠôŨĘĘJœœÔg>ķé õąũTUU}õĢ_iöĮ÷ČŪ°ķ $åīüȏŧ¯žüåßĒëë“ÖĮ*Í`DåøäųdÖYKUÕúúzcN–ûúúē9GŸœéčč¨éįå dTÉõĄM´ø’~=ßøĐ—cŨWVVÚe?Gėžĩފ‡ˇßīäF‰ĘYķÆAE‘W ķÖ*[ĩąąQũ~ŋzŊ^7ģĩĩÕ$gæž1e/0*•ež‚Š=ljBˆj°ũúŊ=>>n‘Ņ35úŋ˙ûŋŋ...Z{FV^JĸHõ›ãããŲ#uōsļ^õ2ų]Ũnˇ^}õÕ‡ŅięÚw}}]+++#ųMúėææ.ˇKe0Qû0~ÚĪûëÅŧîÁüKpņÚ™Ē!ƒ– PU5ƒ|`“lRŒ‚ Đį]XnėŧÍÖD,3#  øãžUÓķ™O×ôôtũäO~ ĒĒžō•/×ÜÜ\›ÃtߘrR†ņŌĸ´ÔØy‘5Ä/..ļRĄ)˛vwãĸ_Ė÷MĻwŋ677kaaĄö÷÷›´e~~žEĖåzŠ$3ŋąąŅ@œy`­ļāėėŦ‘' ā<.—­dĢŧõ‚Œ`ĪŦkŅ0įSøy:Ļ333õøņã–Ė;55ՀtžXëܓƒƒƒ6žú×s¯Žî:3§ČOØŗÁāŽŠBĀúˇÆĖīĢß>|XƒÁ õmÎÛ<š–}ÍT3#Ųæ7Į€ÃPUÍVä~Aú÷đáÃļXŽũũũļŪD ŦOÎFÕ]l~~žIˇŌŪß_/æuæ_’+^afÆ"A~ÕPSȈ [cĒę{˜üņįŒ—+#a ĢjÄHeÉģŧ#މĮöe8?Á?Ãí>ŲÎl“gÂ)™ČĐp†…māŒ$քcŖĪ˛/ķŨRäų6ĩÜ@l€ųnĢ’ Ã>Ÿ9 9&6—ņ‹S‡  ´=dãō÷Î2ˆŪ + œe˛l‚māœdÛķwÆ ŽļŒĪ;c8^Ę͸æz0žūäœÉä1 ]J-˛,Ŗ˙sVlōÚëßԏįN`ISöŽdö*×ĐįtÉíĐF^Ŧs–­ôĢKTŠF:•>V_[ŽBöK§ĶiNW:Ŗĸ&ąķ˜]íĐ¯¯¯ëķŸ˙Í õÆŦĒĒ/}鋭8Â777-ōp~~^?ķ3­/}é‹Õé įÆ;Ųŧ”°™ėˆU­ĒZ[[k@)5äiĖ…™™™ædĸ4ƒÁ Eōr΍ĪYũúüųķÚÚÚj2|ÛėûˆŦ}ʋD”Ŧ5öeÜņîvģí„\Qˆņ+ĮKNÁôôt̆¤-æ—*diW3ŠVUMö’īđęNPEroČwķG¤%I+W•$\ ã–<÷ív‡åFOOOÛws-fDāRgl:Û%]äQ?’<îîî6ĪętîĒŋ‰ę˙$ŧî¯īēķ/Áh%¸ÁräFŐäáNŦŗQaoh́?åÛŦrÕøÅĻēoęmąUÃ0-Æ=5øÂÕØaPŦĒŽ&Á9<<Ŧ“““ZYY‘ė d(´ĘĸJ;ŌiēŸg`„ŊŊ+–>C˛Ø3Ė–'YÃĒ!…e|9 @Q&–Úxŗ~˛‘¤~Ôũ€ĪÅÖUUÛ°„Ē?ĖrÕĐY"P‚Ķ˙UQī••2BRUí[‡žĐšrä˛äæ8“˜ō`8+>T Áˆį///7&ۚę6%¤š/2+s@Ô_;zÍyc‘g ø}&üY‹KKK# ØZ䐛aô0’YũÅÚ&VVVģūĘ+¯´5n\< ŗk~Џ=xđ æææęāā Eƒ2w#œļ™ˇ+++í}mm­­ĒjŅ‹‹‹‹VVvbbĸžøÅ/ÔÅÅEũÍŋyWŌō _øüHéGōN”ŠE§§§íā8s’~}vvļU`í ‡Ä–——kkkĢfggëOü‰?Ņ$#GGGõüųķzūüyõûũĒēcFɧȘnnnFr+H2r-‰‘8f´K›$6scíķÖTUÕææfĐɰƒ!ų1ÖėŸCŽČš€čËËËöl ÖÚ-ļ=æPg{ˤ‚JbÖ>æ^ÎÅüü|žžŽä4égÕt2w ĩöé,s’t‘$3ØB‰ĩ¸ŦUU-ĸ•9×××ÕëõF$•ÖQÕ¨ŒYæŨäiMNN6Y˜yâžŅd›čŊĶ‘ģŋ^Ėkō7ŪøĮoŊõVũĀüĀīļÜ_˙ŽO}ęS#!íĒá1÷XB€âęęĒ…9m@#Ô9ÎDŅäb#Zjšil$į”ƒÎJÉVĶ›j–zcl%ßbYRĸŒĪBí6<íÆÎdĄiĶXÛhn}Š9Ŧ2âUÃ*.YŗE0ĮØēL”ĩn‘ŖĒ;ŠÍéééHō`j˜ŗ2īĒļø[N§9¤6{’3›ž Jæ›˛|UÃĘ-æ§6Ē“ëRŋôûũzøđacį3ÚbÍcīÁŠŅ?ėYļŅ|UņƒT'Ŗ™­m˙îßũOõoüåúđ‡?RöĪū›úæ7¨õá¤>ķ™OˇžfĢô5GHĘüëĪ{‰¯ŋūz­¯¯×̝žÚ*ļpÚȲ˛Ä¯šæīdONNĒßī€QļO~’õ’ķ%+đLLLî'î IDATÔööv“AœC•\ŒUÎ{š9"{isŦįdļ9ģô؜KšHˇˇˇ-‡ÂüČj2öÎežīaMY#ė]zFĨŦŲÅÅÅæ¨¨JĻR{’ō­œƒ)sąžDK‘ƒÁ 9$IXeâļŧdōåXxÆââb#‹D$TøAŒ]\\4g}ffĻŨƒl3mĻ<՝Ø/Žģ›Eūâ_ü‹uŊx×7žņ{fūe¸ ƒäĢŲŲŲ:88h›¯Ÿ—ŒäÂĐ2ú@b2ŖU5ĸË´1ų7ŠFU$I1RyXP2žd-UÕ –ʲWũFxĖ* ėcīą“Āw–[ĶNUÅ´äə™™fl•ÎÃdVUíėė4 ´žO-Ŋ~˛IęīŦŊYáĮfŦß°ˆtŗ™đ…^XXh%Ū `É;Ļfy}}Ŋą­60VÉķōp÷?88hŽC2đ6Aėmp&™z7Î_F€R“ $9āEØÚfėŊT›āüHūĐ%‘ypš°tÂ忝M8õū¤6÷ĖwĐ8ŗŽ€SĖōééiMOOˇyŲÔvÕ{8— f[ÉHāl~~žũ<#˜j‡/qvŊ $JT5zā”gKÔŗ.Œ‘ųį>.6Čút8 ŌčāĶ1ÄÎĻ#đ[ŋõĨš­|āGĒꎩ7—ŧKVqĀŽ÷å8Xß)ĮA lnnÖææf+  ÕÜÜ\ÍĪĪ×̝žÚ¤4HÎ&;´ˇˇ×"?‡‡‡íģ)ë“įĀ={öŦõ1{ĘyģŊŊ­×^{­9jģ'ĢÅO‰‡L$hÜᘛ›ĢÕÕÕĒēĐ@ĩ9ëL„ŖŖŖVÛŋę.Šb=ēØ'÷ˇN‘ úÛ­Ī’māÄTŨ9§žcŨ›" ˜ĒĄœN™Gą9ˇĻãüy šC4! ŒËŌŌRŨŪŪÖÖÖVUŨ•Ë<::jkÕ!ˆfΟ<ß Cö™ãĸūîßû{õ˙æúø¯üJįn÷.Ņ“ŧ%Ymíņ.ŠōŽSSSĩŋŋ_ŋú̝………účGīĒß|ņ‹_¨››ËÆJ§Í1.ãėéŲŲYĢą¯fģvĩĘ#lķ6õīšąĩvSîČá`ŸĖa6G{§§§[˛šqāPpjÍĨåååVmJ›< NēŖ­ã‘JÄAŽšœW2’•LŠw/gDpĩ/į{œÕˆÆŖ/>7777’|Í>‰ˆ’j"Ē8IUÕ¤’777#nô‡Ŋ,KĪ#Ņ/˙éûėĨwņķŠŠģSmŊ{îuœUk”“nm§&Ū•rŖŧØ÷֎tšVWW˙ØˇûëÅšîÁüKpŅYĒžPu—˜=iĖ„) uģŨÚÛÛŅC&ۊIP@îĀq \|73ЕaK ,à ĐaąûYIA8’N–€YĢ&mVUû~ˇÛm LߤŖjČÜ|JÃ>;;ÛąŽUÕ 3ąÖĻ‚C2ę ŋ’m€WĨŒ”ĩa—onnjiiŠö÷÷kmm­JļŅøgžÉÚÚÚH¤Hî‘ŊG^Jˇ{WÆQ{ÎĪĪëāā`$Ōhîąsikwwwkuuĩ&''[ŸUŨ9-NÉÅŧ¯ŽŽ6F^d&۝ëR’čĀöövíîîÖÚÚZ“IÚéū§§‡‡īšØ‹ãããÚÛÛĢŗŗŗ–ĢĀ™›ššĒÕÕÕ9Ũûúúz“ ’ŧé9KöÃÃÃZXXh{XîKæIUĩwf[ī¯÷ēķ/Á`”„W̆‡Ļ7É@ÎX„^¯×´ŖØ.Ęg“ĩĢĒf˜€x3æ@F§j(‡Ž1Æ;ÛŌ@%S•Āöמ‹ ÅRb?ąG˒õ°‰cŖˆƒZ\\lN“p~˛Ų’ĖH%˛´Ļ{ØØ0x>öŒ,Į&•Õkō}žŦė@ë¯ũ)įŠĒ–tåŊu%픓L†Č$ápŠwíŲ333aĖę9˜3¸ų`NxˇŦæ`Ŧ:NĶlûF‚5ā†]ķ.ęjkķÔÔT!ÖpBļ0ÎJ¸%c3~ú^­sN”÷ÛÚÚŠ—Ÿ­¨g(Ĩ’Ū2™—TĻÛŊ+wôQrJŦ ëÁxŅNįôÛÛÛ555ÕØcíŪØØ¨˙õ—šņ/ũŖ4â\53~2ĻQˇÛ­/~á MŽPUõķ?÷síž_øüįķmž]EÉhíļygũ`ˇÍëÁā.áSr|§ĶŠ?÷įū\uģŨú˙á?´9€eÃĮ×ÅÅEŊûŨīnš;;;õGôGí„[kyccŖŪũîwˇ’”‡ķķķzōäIŗEúId‘Ö][ĮŖëëë#špī-RÂ´ŽžŒę#l3›ŸUuüNXëgggMŠI*›››ĢũũũņüöˇŋŨō1&''ÛŪ!ÚjŊxļS–“•G\lnn~OõææĻŪ~ûízôčQĶ/;ʁÉŽØ8 ;ųôéĶZZZj>‰]jÚå‚āą•ėȃęđđ°í!333#§‚ëWN—č yĻž1kkkõøņãēšši†Râ#™Öz5¯‘šK÷׋wŨƒų—āĸ‹¯Ēfč&šôN§ĶĘēų|VFˆ*‡W5}—Lúé—Ú|<{ü¸9Æ{{ģÉ@suqqąãÛÛÛ-ø_˙õ:;;ĢĨĨĨú™Ÿē“É|íĢ_mlũÆÆFc09”Úutt4â dbxFĘD%•‚%zōäIŨÜÜÔĘĘJ­ŽŽÖîînUUĶ"{ îãĮk{{ģ^ũõzúôiKġöä„ĖĖĖTŋßo%g÷ööZōčééi_"‰Üíím­ŦŦ´ę1Ix˙đāÁˆ\$î<Á%šĄŸ8æēė•••VįŸ#ŒåŸŸoŦ´œ%Ō2:qsŅķ3 šˇˇW“““h‘€äÉŅŅ҈œÕŅ0ÍÆsmm­Eq J=˛—l({ˆh‘3aÎË ˙ōNú 311ҤšŽũũũVļX.ÖÄÄD{?sŠÜ'`É×ĘbÎÍÍÕÖÖVŊë]īĒ÷ŧį=õŸ˙ķŽ?üÃ?l{Ŋxbbbä—tŽä†Ų‹ØüûëÅŧîÁüKr1ZØEF#ĢkŒ‚d{̆zîŧl@ƒ'å*YAÆ&R5Z÷=b^˜ŧÔ!n@UVĄyo›÷ȟųnUĩ¤8mt˙Ô7cŖ2TëŪé,9ڝž0ŧ|Ά’÷ŌĻÔ¤gĨ@P˙’eŒë909ŽY!Į€N9•ŸûwF 2‚íõ|Ÿ×|ĘæaJJl¤Æ7eZãķMį\Č1Ãviį¸L,˙]U-oB{3ēôNyØxíĪ÷[[[‰ršŠ—‡,qpSRāžŪÃũô1ÆØīũ­oŗ¯R÷;ŪîkãÄA›œœŦĪ~îsUUõÆO˙ôŨĪž+qpđyUžā™ļģŸ}† %ß ī¨ĒúÜg?[×××õ3īUU}é‹wõä3Ęä˙))Āfg‚qÎĩņĒIÆíŲŗg äéŗÔ°ģ˛,ŦdF•„2)ܘ•Nôôo Ÿĸ š–E 8ß)WŌ^ĀĐ\K‡swww¤úU– M›Ė^į|på=Ŋ3ÛĄ˛RÎqí¨%y[‘Éúžī>ė"§ÛøŒ“úĘ÷H8å hĢqį`ŸoÂ9˄į˙Üûi_í1Yų hv{šg^Ø#sÎ-ļĘī———kyyš677ëÍ7ßlŸMY?ËËË533Ķō%ÎĪĪkyyydšŋ^ėë~„_‚+“nōp#āhÂ``!lJãúßĒjZ^0Žb&aJĩ)% UCļX“„”'”žœœ´ ĨjČ>dŌ.†ÌõŦĒÆ˜aXlÚĀÕÆÆFcÚąŨ€g–ØÄ.iöā /fv}}]kkkM:"ĒęŽ=ŧŊŊ­ŨŨŨføõ¯ÃNôaJq\66΁~Å.iCˇ{—ŦfĖĮĒjŸK;V74đ­?ŗÎ2 žI$>ÆÅFo,Ɠ •ž3†ä0æF"B&S5<š3A“ =e¤)ĘáŲ`ŽŽÚ8åaOŠļŽÆģĒjt›ē™ņĻĩtlČNhĩžČgÆ%GYÎQIÅŖŖŖÚÛÛĢšššVAÃ=IlöëĻÛíÖ˙ö+ŋRUU˙đą–ŋë,ŗ ÂøúČÚ6‡aVžYņy2FÎĩ õÕ¯|ĨŪ˙ÔO|čCõ•/šõĄy&ʘ ōWWWĩ˛˛2’Ŧë÷œMmũ~ŋ9iÆLTÉ)ļֆįĖÎÎÖˇžõ­ÆŗeŪŠ×ë5yÖîîn;Q—ãûž÷ŧ§ž{œ&}Æ98??¯•••ļûũ~McŊŊŊ=2ĮIfˉų;ŋSũ~ŋ>ōÁ֗롨ž­ĩŦ$B]UíšŪŲ÷3qÛÚā(ŧûŨīŽÁ`POŸ>mc‘öËû÷zŊÚŲŲißÃđr¸”íŧŧŧŦ§OŸ6Į|kkĢúũ~ŊúęĢu||ÜäÆNtãööļéúĶFÍĪΎųcL­mG19Ą8všsĢLéėėlŗW)Ģã˜ë/{gŠ`MpT¨1fšžŗē ōi0 Z~ĮĘÜ[XXhŅNĩÛ%i+÷i°æ¤uĻtŽČ´ögöŘÚ+\ƒÁ Ö×כũĐŽÉÉģĄÖŽ9ŠĒ‘úÕ ÍÃŊŊŊúæ7ŋYßøÆ7ĒĒZۃŲÁ`Xå'5ũIŠģ˃ēŋ^Ėë~t_‚ËfPU­R‚Ã"gpj†Žęø2ɲšˇđ ûØT=› Đ f˜5õ|ڕ(%Ā{˛œ~WUM"'8âuĨҎ9ëĢņ´īé3 €áᤤ^p×üW†¸=ËģdûUD*Ũˆ§[weŪÃíímNGĘw2‰ĖŧH:Ū^’ W†úąĖų]awēi}đå… ŽĒöŪKßņ< AbŠûęƒ|" î!y.:īÎđ¤MtÆY…D[RŽĀĄ6ˇ<ĮßæZUĩõ™ ?ā|į3āØÜČJ(ƒīåz5V‡‡‡õÉO}Ē~öŖm¸\ ĩŧŧÜǘĐņcĸĶŽhg-uā í@ĒŦÚCŸR̝~å+õÁ˙ņļöą˜é¨ûŽ“f])˲ļĖI}Ÿš֘yágųN97Ējdū+ËșŠ{Ŋ^s4ÕR¯ęŗ1ÔÆ’ķšvŒcb=‰Ā¸|†ĶáØĻŒĒ¸ŋ6ڜ2īį3GGGm휞ž6°Ē2‘ÜúPE ĶmŽXčķķķ–+bMy/d‰1å”K'ԊĀZ§IDÉe`¯E;’Ü@Îh[ˇ{wâîÂÂBmmmĩ{Όxäž"ŋÂīŒqÎMãÍŠ4nĸú`gg§ļˇˇ›câwšļüÜÉŅ)ų˛‡Úī¯÷ēgæ_’+ÃĘ)ņīĒj,1,Žkjú'Ož4†›T5Ü4ˆéö\ĪK–8Ë$T,ãÉÉI+u'd ¤T†4'“×Dčs}N0&5L˜Ã^°G6I‘ũƒũIĶgû{œ5Ä@'ĪK§ ÃėŪÕ{k7ĻÍī$˜‘îpļ21Ų üúWÄdiiŠąŪÂã BEM„‡•8—€šūÖOú@ہbs%ķT°mzôé 1æ„đUĩšbōŗd  1ĢlØôÛ\ĘJFúĀ™0÷žqé“ĪKîŗĩĩÕ6įnˇ[u~~ŪÆ5õģ*ؘĢ֓š$iø/>ųÉĒĒúņ~°nŋģn=zÔĩ#rĐéÜ%Ī÷ûũ‘„l öÚZévģí$Tũü蛓““úúמV?ņc?VUw:z€{jjĒVVVÚgĩŠÛíļ¨ŅŌŌRp)ŋ9<<ŦųųųVĘ3I…­­­']éŌĒĒG5–(e:ŠæĩųßéÜPgūÎÍÍÕöövu:&§`Õšg'Ų8Ŧē>ãØe$ÕgŨũũũęvģõ}ß÷}-ĘÕī÷G$U֙õ¯Oå>HÚÍĩä]///kuuĩÉ9ØeļÉZMGČ{’ãčQ€éééZ__‰ä‰ÅÖ‘ą™˜˜¨õõõ&[#ģÉĘ3*KÉ]˜˜˜hL;g@›H^8'ö?ŌĨ^¯×úwwˇíUÕ¤/jŨ§3ĄŨú][­yc‰Lą5ƒ:ÆwOÕMpÍöbāÍģN§SŊ^¯í;ÎBđ ûœuž6ëčč¨I ũÎēáLkãũõâ^÷`ū%¸0gUC°6==ŨÂr@O°‚%NŊa&ÂŌ)ڜ˛´  6ĢXYä1ēԁWUĶHb‘°õ˜âŦ.LI˛‘BÕđDÕ-ō@‰‰‰Ļ M™F§Ķiarí?>>n`7lΎ bčS× ü1đ´DüĢî;ƒ,wČYɊŲˇJIr@l0#˰p>ā=ZÆ*æ˙ŗNģ sdėąr9€Ë†,Síf dbbĸąũƨ‰Q‚Ī\“đeã27ŗ4§MÛØŪŪŪŽ”•úRŽŌ¤tķÕíŪš6??ß@€5%QMŸIĖ”XmÜ›ŪÚûdušnˇÛōjÖÖ֚S˛ŋŋ_>lĪŨÚÚj ž×ëĩč —ė¸ue¯Ēæ\^^ÖמūõúĐOüDÍwš“´í'''ĩššŲœbrQë>× žŸíīī7GÕŗŽ€Kö'ŲI•cë÷~÷wë'ßûŪúÚWŋÚæ&Į–ũp!*0ÉĶĶĶõôéĶPjiiŠ­a@H÷=ō$šë $AŒŊ?֟ŨĸđāAĢŋ.Ōi=æ˛^8ŽÎ-°N°¸"g333õŽwŊĢ9kˆ˜˙ôŸūS“¸ää˜aŠĪĪĪë;ßųNMOßÕuĮ {/Ī$į`ÃíKKK-ŌÃY7–æŌ‡ƒ:M´0á§­­­zíĩ×Z|ÎwJ•˛Äąœ}Ī֌K“8J‡ ÛnŠfZWOŗ1bqqąë˙đÛ~É)žœœŦÕÕÕęt:ĩˇˇ×Ƃ­äđrlVWWkffĻEWĩ“ėŦßīˇšŦOíUIâÜ_/Ūu¯™IŽÔ.M6Đ #úį˛ŲĐ['Û^5,O–:áü“ŸĮŸĄM˛ņ]Y&m\‡ŦŨãmQÚmüĸmÍwÍ{ä1䩉´$Ë›ŌüŽûÚŧSĻ”,MFDō~y1ØØ0ĖļÍ2™đė— Åãl{^YæL^įfģ'''GĒjT ¨ûøYjˆķ^9'|&Ÿi“”–ũ•}âUËąe›ķûîaŒĖ%$ãāûŗŗŗM’!Q­ęLŊĶŧō|c“•n2€ƒ8Ū'ÆŌûx?÷Ö?æ‡oŧÜiö‘š1ŪæöVUōÖeJ"˛oSĢm9Gü_?¸Į`09 Wö5íUŪķķŋų›õcī{Ō P H}ëūŲWæÆėėl­­­5đšÄ€1Ô׿‰yŸķ"ב{›ĢŪUrįÉÉɈ3äßÉô7˛Â÷<ãúúēEú˛Ÿjmm­NNNjwwˇöööÚš™™ie å>d%÷ÉBÆÃŋÕ8Īņ˙œãcšWž—Š2æ™õëĢĒ•ų´†ĩ1û>Ŗ1ž—•ž´9۝ë5ېë×=]"6Šį_^^nDĖøgŨWŋĨ4_ÖÖÖÚķÜßįĖšŧF>íiföQļåūz1¯É7ŪxãŋõÖ[õ?đ˙ŊÛrũ7ē>ų]lžöIę:Ö4tį°´™,‰XZZj,fȆdsÃbT uŨBâØ †áΰ'#›,§ŸIđķ92’,Ã)ŧë}ĒĒŊ‡ö{7Āãæũ1LX9lšM`iiŠR?—,8Z0UɲcĸI,HsŌɝۂ9ö>Ø9úS`4+°TՈ^SøU;Ü_ûEZ˛ĖœEęģĢĒUGI°Ôb™Ėy^j|E6„ĘUĖžy†‘3Ūr"0aYR[œUPŌŲ͝ú9ËebīÍ’3÷ÍĘYžĶ\ÅėŒ]&ŋbũZ_Ŧ6­rÕ0¯EĨė›wËöŒdōfggkwwˇiķŋūÛŋ]īû‘Ņ„ĶŠ§cž˛ŗ<§‚üîææĻ•…L ŋ1õ9ķ@$ NHÛ$tbÄÉĄūāoüúĀ?X˙×ũPmmmĩ2¯oŋũv“`ûŨcoo¯U39??o‚8•)G#m`sČ É6Dņ$qk3ļŪaQUŖ5đŲŽLŽ”Ŗ„eŪ.//ëÛßūv-..6;d=cĀS—m “øĨėîîļöĒ&dcv3ŒiÆļc´Û€Ũnˇå‰˛ŊëëëÚÛÛkė7†YŸŲ{؉‰‰‰f‡ÍĢ^¯×ĸ8ÖČųųŨ‰ĮėÁĘĘJ+AœäP>GD!K$Kqœ~vvV+++-Ą6íš9l|sž°1l¤yqãŽ\ IDAT!šWŋ*s›{–œÉũĸ,ĶĶĶĩŗŗS#u÷ׯ´ũU•ŗ!'ëđ˙8˜pũ|}ã߸—Ųŧ  $d¨h­ÕË3Š \ūLH2õ´™W5LÅė?$=ô•>›õŋĮ/ aJvƒ$‡A´ ¤^XÆ÷F6H Ģj¨iĩņú.æ÷Ā9ļh° S w,#)ĖmäQŋ~LV)ĩėĮĮĮ­ŗ>JļA&¸ĩ9Ôî=77×õö’!ڒƀ ĒjĄ÷Á`Đôá)Šâœi_VĄđN€‘ ^äC?Ž9‡|ÖnÎqt8PĀĖg8ÖĘÅÅE“ÔØ@É8|I§ ÛíļjÖÅūū~ĶgwģŨVĒ”nÛģHäÕL3ÆÜåđp(ÕąՒī¤ĐOûÎúúzŨÜÜÔŋôĨĒĒĒĢĒiq­ŅĶĶĶ&ÁĢĒ6NGGGíXy ˆŗÁ‰ČŊĮ“č^JZ€öėėlKFääZŪõƒ?ūãõüÛ{w"íw%œčÃÃÃæäÉa îęãątĮéd[KtęœGr/ėuV›!cŸČ5œDšÎ{\Ēč3~ÕÍÍM­¯¯7"†|$Ĩd€ĻyÎŅS×ŧĒˆ¤ųúôis09\āååeŗûĸ‹ Zķqsą;æĖĘĘJģŋš‘R&kœƒ˛ēēژn§ņžÕŖGÚķž$uōFž€ÁÁhĨ%#U×ōwBû’ådžĩÛ̆%-…WmâBæ‡˛Ņp^fgg›œ@2'ĻjXK=7ž §g@KÄÉÁZŠžQƒŦęPV:kXz?Ë 0Á4ό´"Ãöú”´*ĩãéØŲ„̓”ne›ãa^e’%@–Q#Ā sfėĖZjN‹žĶ/Ū#DŸYKÅÛÛÛv§dŋT€f2ëŌĢ ežŽü ËätҰŦQoíI°æ8ÚúëĢ_ûZũđ{ßۜā ĮzrIô0Ģæ`Š ՟ž{yyŲJOfĩĢšššv°”ąęĖ'lcĘ|0éä$ŋũõ¯×{ø‡“mÜ1Ī4ĖÚã ŗŒ8ļ Ķž˛[Īí÷ûÕī÷[ŋwģŨ&šcĮŒQ:å"ĪņķԀsˆ­ßņ3¤FJčŦëŠOųŌĢĢĢ6§Øz|UŌvwģŨfßˁ,ē¸¸8rf` Ü;Č)%2ö€–ũ6ĶŠ>_p||ÜÆP×>I˛ž'’–%€Ų]ÎZ某„Z×d-Ə˜û™ņÅK§;Ĩa"1ÆfnnŽIĀØ"UŅėÖsJOUĮRą‰ÄFÎĪΎÃĘ<' ŸwŠzß_/Îu?ē/ÁÅh`3a‹œ………Úßßolšj î“ ;}įŲŲY­ŽŽŽH0Æå0ãI‹BĐ.LC•HfŨÆ&Ô ŧ˙4ōŒŪĖĖLõûũšŸŸo,x‚āûôô´UÁčĄ3Ö 1æS­}=ŖëŊŗˇûÚtSœījl„ʏGØĨĒ;ļķđđđ{ĸ Õī÷kvvļ7íNíĒûQú^[1būaÃŌV åBtšûûû-:ĶétZũw@ŪF đį<ȍFH<â’ØčĢ‹‹‹ÚŨŨŠ 0îîîļ UÕĀvÎ˜ŽŽŽ64Ĩ ˜ÁŦęcíĢž—ā§Ē;999Ų4Åú5ˋnnnÖŅŅQ“’$3 4éΌ~õ4 ėcēßķķķZ[[)ščAā,aĀÍĮ,ŸšLTĀÚļ>9EØæd%=ũ Ē0 ÚXą$.€-ÉÁŲŲYõzŊ’Ō14Ÿ‰g.//×ŅŅQĢ'ΎБGë@tR Åū.//7I ZÎŋ™™™ÚÛÛĢÕÕÕæTØûØä|ž5ÎyŗîÔĪ˛žHëĀ÷Svš¸¸Øœ`ŋOö˙øø¸–––Z!˜2ŪZaGôF!DQ?~Ü"l"‹I\Ũ_/æuŸû\ŸøÄ'FtĖ =yF,Yr ÆĻ„šĘ=ØNļ6ĩëÚ$QĩęΠIĖäĩd?°$@QÕPēb“gļ/..Úfį;ØH›-˙ÕÕՈ̓ÅaØ3iŗĢūļg%cîúpÆD}˙÷K†õŗėÃtŒO2Ä6>›X2éɸ&#MۛlĐÍÍMĶãr†Œ­ūˈ ķkbbĸi{Sëj|mBWWWMŌĸī[ķÛŠ¯l€æ% {|ƒŲ3WsŽ™?ĘŖrÖlĘSSw™G™ mÎGIhƒÁ %!WUs*õššĒī0É֏uC‹ÍáiЧ’¤3y¯ęÎ1ūÚ×ŋ^?öŖ?:2w8@ 'ĸĶé4}ē9įOpĀ̆ō1Ŧx~Fŋe´‡Sž°°Đ’I\ô‡wI‡#Ŗ@GGGõūāÖOūÔOÕ7č‡šÔ Â擝8ĐĖx›ėc–ÎÆS{Œå×4Öl‰S–6d•.ŧŊŊm`Đ|Ĩėõz#ŅËååå6'ŒeJ‚Ŧ6øŧ¸¸¨ííí‘ôHôffîęĐ{gëÆįĖ+ŌKާÂ|Ī(Š,äōō˛9-ũ~|#S2ī /?ĸßīׯÆF[§J)ŗ[ĀrĘר0īČÆf‚2ÃŧæÄŗ?RČ|å(‹&Nčééi{7v„5Og ÷029ķreeĨöööZ)\ö$ 3ÎķÂÂB›ķäØ~tŋ߯éééúKé/ũ…÷×˙¯o|ã÷2›—ágoĢĒ…7ũ>õäYú+/ö(gäōū´‡ŠÕôw{LĻŌ|ž#<œŦ­{`Ŧ˛,â;ĩ×&Ŧ¯ûĨt$˙ö{õÅSfņNĄĘ띌4äīŗ´X2•ž™ĨķÆûÛ}ĮßOŲ=›ĢgéĪ”‰¸ÆûķëSã‘åōÆß×Ī Û5ÆKÛyĪ|ī”\\\Œz§ņđ,Ÿ5ŪŠ_öSÎSk%Įœ#“mŸËɌŋĶŧ$5Ŗũˇž}7/m0vŪģ§­ž—ŸÍ÷KÉCęuŲ ģãeúČ,ŦA÷/ģ8ŪcĮve?y'÷tŲŲŲ–xė÷Y†4KzúŲøēŸ§Ö@&ĮfŲXk?KޝCëW[ääûįûå˜ŧS BL|ĘHÜÃŋßi\˛ŠÖ`0hŦ;‰Lžŋ÷6‡ÎĪĪG¤~įz§wNģ”ëŲø¤¤Ä¸Z‡ōŧ0Ųų>æ’Zî9žîc^åú×ĮiWĶž˜šƒļ¸RŠ—ën|Mš¯wļ>ÆįųīŪãļI?øžšŊ¸×ŊĖæ%¸ēŨaŌ rg´w’{F…Æ<åØLļwrrxj'FËŅŎōUŖ›ŠMՉ‘X¸ĒjlRÕĐĐUUĢ‚IÍtˇ;Ŧļ#y €Ë )Ág"uĄUC‰ f“Žõ3›76ƒä3ÂÄB¤6!Q}!_lĒ0>÷öÛoˇva¨|ŪŅûÛ0ą¤ž‡ĮØa˛“­Ė$Mũ,IĶ•eîHy°z˜f ‘Í[ĻnģydމōĐČW 1 §šā˙š‘éī2 š Hâ"II†ÄÍÁŦZƒUÎP>–klŧH°–šąˇN§ÍGrĖëÄÄD›ßƒÁ0ŠŲũD”ƍ’ĻX÷{{{ÍiI­8Fūúúîā+‘‘Zd‘lģj:é4ФØédONNÚØ‘p1Ym)פīaĨE8 ´Uä@sƒK˞2ŽLhL‰›(WÛõŲņņqŊũöۍŲfÃTÂÎ'`4ūŽÕMČqŦëåčč¨É¸Čžnnnš<Đú›­ÃÃÃæÛJ įŨž?Ū;øEÉDõ )ÍôôŨÁ_"_l°y HŗÁ;;;ÍŽXŪå­ˇŪjëÆ¸ŗĨėØááa‹% Ã~MMMÕņņqûžīJj ­„¤=D’éųųy‹¸q(Ė‹ŦŌĩžžŪ¤ėļh§§§ëÁƒ#Î[`Ž™[ėSĘÍSũíûė=;šÅ8 ãŌ$˛W øœË”FŨ_/Ūu/ŗy Ž_úĨ_IēĒĒV?;8V ķoFÛ&IF!DLOžõ˛Ģ†§2d6–L"ˤ*zĶ”ĖĪĪ×âââČ&Nâ‘·ĐŧwĒē†NŪLYĐ`0hōŠ”9VT ™ĀÔŽÚD„?SIg¨@ˆ“ŗ=ã’›´{iG˛2ƒÁ]IÁŦ~0pjtl‘g īgmgrŒ'Â;ŸĖ- ągėI€cuąŨ¸MÚķPÉÂÆ(Ĩ<>΁Ė>ĢĒ9"ĀTnZ´ŗSSS­úgÔ<^ZZjsøĩÉįřå§~9e3Ęú‘žéásîŲŲY-//$ŌåüP;_ŋĀfæ ø='˜#ėũĩq~~ž~ķퟝ˙å¯˙õ:<ãęęĒÕĻ7‡9ÉļI”ĖMīœ‰ĪūŪß߯………–{ _åŖpdžUĄČ7Rēæ~ÍĮÉÉÉ;ķûí¯Õû?đúæ_ų+ß#3Ë<”’LMM5āeĩƒŊ˛Žü?%^úƒÍéP&“ĄÍ’Náüü|Ģ ”ã°Ģæ Äŗ îO’2??ßĘ˲õėp§ĶiuųĢĒ9^æČÕÕUĶĮgĩ*ŌīdÍ;€VN‰ü„”Üaˇ§§§Ģßīˇ~Ķ7ÚiÎTU“‘âØ2áVr+[æ}2/Į:MĮˆ¨ggīęŊËÍČ%ō‹ŗ$ ˜411ŅÎ ŗ"Ë&kTnÎüü|+OJo˞šŽÜ‹”ÚW8mi?ØëčžÎü‹yŨיIŽŦ=;;;RõÁ&ÉKė”ėÄ(ŪÜÜÔūū~=xđ BOUĩRzãÉJ­vØÔl Y `048ewŒŖ­tũĒái´jUCIĮææfc‘ŨoŠe¨S“ XЙ֑Ē!ØÍwgĖm XæLÄMĀßív[eQ›ƒdSēM+Á’PoÕ0ŠUÂČ*6FāÅf‚ *€ķÂæŠŦž1Á~eâĸ6ëSí×ļ&ķ ĖkëĖĖL+cH—:ž7Āņķ,=Ęi1~œR čųųyõzŊŊōƒęøø¸‹ōĸœŠ~ŋ?r˛fFcļļļ΃jŦķ Ą}į š;XËííív ŅæææˆÖ—žŲ||ßI:bžYkæpÕP&Us84@éŌŌRcsÍ1I”'''#5Įe喤’•^܃Mʃ˛8ũ~ŋ=7×2Güôô´Ų)ī6;;[{{{ Iä¯&9ËÕ°>Í{k 0W×{vvļÕ_WzČívģõøņãönÖ˛~8??¯ųųų:==m OND˛ģ€¯hQVüĒĒæ îîîÖÅÅEsd1›f=ZÙObÜŲ(Āß|???o ˇæž~ĶÖĖ›pe>K¯×kö ONÕNķ.™ëŒv¨ė’ų\*ĪdÄ Û‘6Č3ŧãėėėHۈņá¸é}¤ÍƒÁ •õ\šŨî°0BÕŨ>hßpoķ$̘Ĩ”IÂīÅÅEsėô;BÍûˆb_}5.Ũģŋ^Ŧë^3˙’\777#ŒŦp%cęwÉļĮV õÂX[›ą˛6cÆ3JÕ`ģŸûW Ų:ŒŖ¤ļ50Į2˛ĒŽČ|˛”Ÿļxw?#įũđ˓9ÕīvÉąÉÚrU՝Po†š} M ?DRwY5<uœņ[\\l‘0Ÿ}îģĀļĒKīg\Đe›8ĶĶwĨ˙Ô|ÎÄV,QVGņ'û81_æ6Îæé}$ũaU•Ą—Je"-vŨæ|×ŋÛL=88‰xˆøöķøø¸%tę ī‹5%5Č0j)7˛y§vš´ÅÚā“Åq@ü õîUÕæXk˙W%'e!Ģš ÄaU5§ķ%úĩ´´ôŽŽ[C:ÔëõژY§Øā´9Öw&3’E4ægĘ{Ė)ũǝ9ĢęûsxČDƝIR‡ÛÛÛF(¸įG?“‡œ}’,ëS”Â:Ņ?d4ŠčĮ\cū}á°&•ŦôE‚ÅŽ$Š“š=i_zŊŪY‘āh5ˇ°Ō@Šw5¯Øx˛§ÛÛÛę÷ûmūėĸ0P64#"ÖĢžķ˙,}œļĻjX‰Kxîx‘ķ‘ĩ`™3*˙KÔ%#$Á<>>n'ōĻƒ‘‰Íl^§s—@lîį:°§J6˙ė]÷ēųûēgæ_‚kjjjdÃdŦƒA Ģ3 GGG#'NMMĩPh‚LÆ.¨RNߗƐ …fŲ‘L Āë;ãåíT€ $ —n˜Ē”dâ™vÛŅ”ÃĐz ņV “j1=úøÚÛÛĢÉÉÉV6Ōw1^YxËúįĀ1@Ŧnq˛ČŪ€M§ÉߘeŽ 8ŋ_5Ô§&ëk“ãđŒuž7ļŨ&¨ō…ų ŸĻĻĻjiiŠvww[;ĩmmm­ĻĻîĒĒÆzgdB°jú hĘMĩÛí6Ѓõ4–UÕØbsÎīđ–U.}{yy9ĸ÷Æė ‰ŦúquuĩÉkT2‡Įįf–<Ô^Ž € đĨŧjŋ}GˆKiŗ×Į+++Mž” Ĩņĩ–EÍTũPŃ,ãââĸŊŗŸ'ũ)j„ĄœššĒíí횞žn‡ÅiŗjN§ž?^'''õčŅŖfc[É9Q ?#ævJčhŌ”cdĪUUkkk#Ŋ™™™ÖŸŪīôô´I#8ōl;G.!"$wāä qT÷÷÷Ûi ĩŊŊ=Âz'@Ö~‡5ąˇķoŋÍc\ÎģåååVC˙ææĻE"ŧëŲŲY;íWN…ÃĐĖOrÄííí‘|‘$\fggĢ×ëÕķįĪĢjh7———kggg„TŅ–nˇÛ"XîåŦ'4§ŽŨ8Ę1!¯ņ;cx~~^;;;MŌI‚˜•õõõfëŒaž­Ā6ĪÎÎÖŖGęââĸ9ūd l•wĩS6RT”$(sŋŒ—}uuuu„<_ģ™Ī$‹ËŊúūzņŽ{0˙\X›i€Q5Ŧōx+6 ›UVČHļ,Ãŋ؊ԙ ņĨÕī°XØíŦ_5- ĻŌFˆIŗ9îmŖ MfQuˇ‰ÔÜÜ\c„¯|į”Ņd•‡LĘšęSĪĀĘÉUÕdLã%/ũŽpssWįŸs‘2‡ĖWpa{’MŸnāÛ3io“4ž’6õ#–O¨`Æ~Ē.ɨŋõ“(‰(A2_˜jlŸė6SN†wQ.¤~ÎC›œ.™‘@Đ:Āæ˜b¤1ĄúSzyyY-ėÍ 4Œ+ā˛žžŪúÄJ‚h̆Õ<ÔÁˇa›÷ŲwJ†NLL4° đ’pÜŪŪÖ˙ū¯ūUũĪų/×ęwÁU5Ŋޤ•••ļV%žbZŅ‚œŗĪž=ĢGĩžŗ¯¯¯[/..66÷čč¨VWW› SNŗ]U­üßãĮkkkkd,3rf>ũ›ũ¯ëCõ¯ÖīūËŲĸŠÆā“/u:&ÍŧĶ."%´O­rëM"ˇę83p)zÁfdIURœL•¤oŽžž6ĮL˙c¸ûũ~­¯¯Wŋß)kjžŗÍ"†ÆÄĪwvv8ĖÄLeH9Ā×××ĩ˛˛Ōl60 ZMsë„ŨŠĶiũõ×ëûžīûjeeĨvwwëÛßūvŊųæ›Í–t:&gĖ}‰ĖÂ’ļ¯ŽŽÚéãÚlcSŦ_ķPy[īë Ėg,..ļĩcO SåpĐj˛oéK‰Éʘ:ûĄjXČÁz1žd2;;;mO`_’Ū3ŸEôĪŪĀÜ_/îuæ_‚‹1žÎ„7WˇÛmŨ,//7Ã\ģ€d˙N)IVŊ¨cJTDāúúē0 ĶKƒ™šjJ“ąČäģõõõÆ^b7SÃ[ugđONNÚĻCj¨2`N§ÉMũ eŔ|ŽöVÕ[‚ö{đo<°ôšņh†(™\ŸãĶī÷GÆŽĒšæ˜nˆ°Y`ŗL_J8NNN›ŽNū_ĨSfSõqÕ0"Ą˙Œ'pÅĄČūå(ĐņĶé:Ęģ–›q¯×Ģ“““ĻVąC~†ņāÔĨÄ,û‘ŽVÅĄī Ņg.-š1KO>Ãeū‹Ŧp’ēWÎÂÜÜ\íííÕŅŅQõzŊ$'''›N[ģĢĒÕĄæTē¯>/Ī—ĩÉEMRˇ HŅū“°)›››mˆŦ…˜ik*ķäÅø)™šēējN„˜Ēáam"ƛ^T#ŠUwØÎĖĖ]öÍÍÍzúôiíėėÔŅŅQŗSÕÆÆFn;;;ÕëõÚ\,E~ČÅēŨîH„Q;0Ŋ)ųÂüŽ­­ĩ¤ 7‹‹‹-Ãū‘øŦ?ĩ÷ît:­ÃĄpÖGfoo¯–——koo¯fgg[´NrĻšÄá쏏h‡ qĻgffęO˙é?]=ĒųųųzøđaŊį=īicŠa“vww!`Žc EÉŦ}yOæh›žšCö.m3ŋ———Û<~öėYûŒwĩ>ė[Æi}}Ŋ9ö•Œr'•ĸūčū¨ÎĪĪk}}ŊŲoį čCÕwŦåÍÍÍļövvvڞe84˚X[[‘,Y[Ö˙ũõb^÷`ū%¸,z›:V…ļō9ĖŽšŅ)sІFąUCđ›l< Âp2BڔI}ÂÂÚi“Ģ&ī/æ{9ÕŌw’YמĶ{vģŨVĘPlœÚ—īx¤Ė$Ûæū.zo?ĪžĀaĄ0_€K^îI۞@\Kīį)ŅąjwJqü.īĐfųH!ûqmhFh’ŊN™ÚÆC"Ąũ^ŪßĨ˙l•ŲĪdžåVŨoī9>/s›#Ö4GR?ŒGžĮížûd”:÷@QL6>+¸™ ˆs5s“H•ō=íÉ$…ö̜Sė‘ĩŠioī¯ûēķ/Á•˛á6É9)§ašáÎNaE@ûy~~Ū¤~'ŗŸņÂ*Kęa€“iŠĒ‘zĐ6ėQ†Ā1v$$*ŒxfU0Ĩ ž’vãō ŸÃ’N–6—”9`Am˜ōd^%”Hú¸ Ąĩ ˙7{ī$i~•ų=y¯ĘĘKeÖĨkjzzz$°$ÃbÄEËÍ^‹@Hč2HŖŒ.ŦÃļŧŽp˜ũģk†đ‰‹%Bō @„$li%¯đn­-/L‹Á‹Œ.ĶĶĶ—ęĒĘkeeUŪũ!ûwōys>lėŌoDGwWežī˙ũ_Î˙9ĪyÎųĮŊ`=ÂÂķ„…ļsąiŗé3Vŧ`Š)ˇI5úGR„đéo Ŧ›īCßxb¯W‡ņŌw€"gČ}ÜI€0¤bČ ˆ*˜7ĖoîņįũŒĻ5›ÍƁė’ėŧžžŽFŖm`JJI€/÷Z[[Ķõë×%I—/_ŽĶ é{’ļ;„ë9ˆ FdŠRŗzŊ”°FQ IDAT÷œL&!?đō€Ë,Ļ÷ũ˜ĪĪë|‡ÃČšĄ/˜“ČŅ`i‘Í‘ā—ÍfÕl6ÜzYŌ›7oƒ‹¤ Y U>|\`Dqš˜‡€ŋšÍϞŲŦęõz"ņ}}]ÛÛÛ1ÆŠT*ú€]ŠT‚ņ'A•{Ā {Õ'Ā].—K”D:â2#Ødú›Ķ“ą;Œsĩ×ëŠ^¯‡Ŋ¤BJ>ŸE6› P ›Œõĸũ~_ˇnŨR.—ĶÃ?Ŧnˇėw:=¯%Oĩĸ’0ûė#’"ʄ-J§Ķ‘M”d<ĢÛí†#Jr>ķ ÛvëÖ­XįˇoßÖîîŽÆãqČúp4ƒAčā!X°;Ŧú('Ō5ūM IČėļƒæŒ|ĢՊč™ˆ$`<×ČK€b÷¨BS(‚ũ§\.mįķØH¤{’‚øa˙Ā‘Đ{œ;ŠŦAžåäÖęēûŽ˜ŋ.6_˜IÁœŧ¤$›ą——ĸcø 针¸@čĮH˛ S–ËŲkÛ°(^ŽF–gąŠ 0ōrŒ$qŅ 7,!÷q)´`§Ņĩâ>ũ^’ĸÎ=‰sl\áą`cøéwŋ’ĸԟ—ĩäŊé;.—$Ą}öDQ€á|ÚH§îšƒJúėũéU-^ڎÍJZTeaė¨ļÃĮæƒS…Η9ã.ņžlj<ĮÔuö€q6D.w˜hķ’īœÕBĪM¸š øf|F°hŨn7ĸ&´ LąwšL&!ŨÕj!ŲbLp†ø>ũuzzĒããc]ž|Y…B!ąC´žŌ\‡Îø§ĶéphxärN'Έ°")"˙PMû2™Lhęũ;r0Đ$ũ` īīī“OÅ#@˛Ë"hõâĨEĸ,ÉŽ€cH׀ãä8;??×õë×ĩąąĄ›7o†~Ųû°Û톍’98ŽŦEė KÉ ĶęIŲhUyWÚIÅ8R./?é%Y Åŗųs0š¤`ßHl0Ūív;Āöt:O<„™ī÷ûÚÜÜ 0ä ķŌĨKēqãFĖkĘåá@Â$°…1Ėd2Á–"‰qŲ•ŸŗĀ@¯Î<Āz+ØTúŌeô;Öũ~?!ĶÁŽĐnĀÚwÚĀ…ŖÁz ŧbv‚Äyœ—ëžYK´™šCr,=ķÅmĪĸũD`ø7ãΜd^1oˆ˛Áäv:D•'l36—šŒũt<§HĮiĨ8ËĖ@66Ā%Ė;ú˙čč(ō;čÖĻÛ9OTf.Ę!`ŲŅã3WqÚ°­Ė/—™˛îą9äßô;íō= Ņ:WæĒ8)…ŖŅī÷CâC4ģ–JĨ´ĩĩãIŋ9ÂÆ"+%Į§›ÄeœŦT*‘Õu÷^+0\V´ĄÎ–:°#ëÃE8ØM*<`ø`EúgĄ`Į`”ũ܋p),ŋor„ ãŠäũŧš‹ëLŨ€{ÂY=—É`¨…ÎyũzÚ$-Ę@rņ;oŦ ā ‡ Ņžī‡}Áøpb*Ā‘ž“›Mš\§ÁA,`šĪy™JÁDhÆÖ“ËØ`ˆŋ°ČĖ×Āv:DÉO.úĘõĮÔi–Ŧ¯į7°1Ķw0€Cŋ{rŸË‹sĸ1ČT˜/lö×?ģŽYL>Ÿänæ'k ÖŨAŊ¯Igô=*Eų@ļ­­­LÕj5$š\.ä%„}ŗv=›ĪĮcíîîp÷ igg'$~œœ$äEår9dEōūr@B{[­–Õëõ"’@N&덓ĖåŖŖŖ˜kÅbQ7nÜPąXT­VK$H2–° ČŽŽŽbũö‘E8ŖœĪįUĢÕBúĶív•NĪk´įķųXËôG“Hd­×ë qŸápō*?xw Ue2Õjĩ8ųuwwW­VKO?ũ´2™ŒĘår<gĮ„{a'ˆâ”Ëe•ËeĩÛí8Ȋ5ĀúĻ<ķ†öJ‹DnꊡÛm¨Ķé„ūŊÛíFß #ÞE;kĩš^ō’—¨ŅhčņĮÛˇļļrIš™ŗô‰Gįp€°ĩ.ŗĄ cŨívÕh4Ôjĩĸ^üúúēbÎP•Ŋ­VĢ…ŗÍ|„\`ް°—ž>Ü1ÅŠâ>ė7D#¤…Fîƒ]đ˛Í+™ÍŨ}­Āü=rÁĒ„%%X @Ŧl.—SŠTŌééiå.-°œŊtÃé Ĩl26M +ŦŸq ÚTÚ.%kW/Ëh8$`Ž“âŒ ā>“É„n™öæķyĩZ­Dũe6ˇFŖlŽ´>LjšĒ]灨ĮÁ#Ü P ĢÅ{ų€ņd3U"œíŦØt:/‰ÆF“L{¯,ŗäl0ÔÁ–Ąv˜*.ō+œšĐSˇ™ņ`|™ĖZ­VBĻÂF*)Ųŧč;6w/ÅæõĀũFgÂɓ ԃ ƒÍæ—÷vųŠV gûUĸ†5ķ…č l2e‹ÅbBŌÆØĐvgë<Ґ{ķæMUĢÕÍK‹S—Į"1Ãawˆ$Sģ˙üü\‡‡‡Ņf摟FÍēDbäIđėDyÜYX]wßĩŨ{ā‚IâōDA@‘×å†ũņrq€dŒBĢÕ Ãë ?l*5ĪvŨ5,ąƒ8רûīØPaĀ8ą–‹Í‚äSjkŖyĻ]ËRÚ ¨Ā b$…C:ãīāRŗ&`rh‡´,đ~h~K€@4mbl Ģģ“ET‚90–ĢW?a<8ü°Éŗ ´ŨuŗÅb1q@€s¸\!g9˛Äå’—1 ƒ`ÉŅââ°ˆJÁœķlĢ´Č]đyË=‚y¯T*”CĀW6;O<|#O“æ@´ßīkkk+Ā-€Í/ĀŽ¯Ĩ““íííÅÜŽÕjáüļZ­`ČũîË|Ā‘•¤FŖĄlvžN’-ãĖ:dō<—æđūčĩ=І¤ųē÷ŲlŽ6åôôT/^ÔöövÔMgũS>é!s“ué‡ÁúŖĢ'úk/)¤mĖ7ĀŋG!9Z­–Æãąîģī>ĒP(„ö{oo/Š HķčHŗŲÔx<]<6›õ‡ô&žž¤=ę‚}Bö‚´‡¨€z:jgg'œo@:ŅöÆYā Ė;SáĄP(čO˙ôOcî‘/ƒŊuŲSĩZ ­>™ÄūÅÚĻĪÉ_bŸyā$I7nÜĐÖÖVÂņæ< —Ķpa$E°ËZ!`ĪũLėQu"].\H83årYjĩZ‘O€e81ąēîŪk5ē÷āå›>,¤0ll¨Ë`†Ëk”ÔJ Ɂ˙ƌßķ6î{„!ã‚=õgĶ6>CJÛŗŲl”Nķ{ņ=ĀŸ÷Īšū’įSUÙ?˙ŽĪK–-Žv-—Ėķą JÂŗyĻ‰˙A79 "ÁąôúŨŒÍō3åüĄ ?ŧûæ˛ÜŒĨu/uČŊų>ė9€ÄŖ>Ėåūyļņôąų3Vܗ>§ŊŒ)íX–øøÅģ,ˇg‚1b>Ķ/ĪÖ¯’‚Aķ{Ōgūå6ā4,ĪååūeŪyųIúŠwņŠ/€,Wú„čũäãą<î9úÅK:(g~ú{?S葩RŠķ¸|/ÆÆß÷ƒ‰Ĩ˙›ÍfHwø˙ééŠ:Ž:Nœ8ëëÆÛEŋøŧZ7æÂééiœšëҤgŗôž_n –tú’šåkß×;—÷īŗlCũžŪĪūÎ~&…ŋĪSĸ8CüŪûÁm"í!'ÁŸíōžĮwˆ´Žy6ũ N˜ƒūž~°’ˇĪ×.cËX,KcÜFrņū|—5Æ;s_ŋ´™Cø°Í—.]JėmŪÎeAÛ˙ĸĩļēîŽ+ķÎwžķ§Ž]ģĻŋøÅ˙ļÛ˛ēū ]ī~÷ģ%)Øf—Ā""@¯K{ÃÍ=`\—'rōH\8Yv9ņƍ¤Ëk0ƞ¤äL-ayf!dkí§Ōæķų8M“&ÆŠŌĄĸŸFęa\OFÅĀĶ'Č@¨ļƒVž4Ŧ>õīŠ(ƒCe e+,6 ,ÉĄ°LžyRû ϟđ9ãO@žļļ–HĘ$q{Ōoŧģ3ė°CÎ ÁLŅfær˜(.­Ü“šė‰•ĩZM{{{úŪīũ^Ŋüå/×å˗uëÖ-uģŨ˜cŽo÷H…ˇ yƖĩQ(BGėíOĨRq¨íƒÅ=;;ĶææĻ*•J"æZr$cÎúš<Í|>Ÿ×öövôĢ”ÔŲ3N°ĄD"°}ėE/Ōo~ôŖúđsŸĢ­­­õĖG֌ŸĒꇏąČdåąD8¨&„đ{eà Öܞ};æ.Q<*Ëd2™Dũwĸy”>tŨ˙OüäOęg~ú§#ĸ@dëääDũ~?ls‰X*•ŠŌ8Č‘7АUŦˆ´ ƒ¨™Îŧdnxé¯Z­R¤&ŧ:yėa>ŸOTr˜Éd´ŗŗŖFŖã†ôe<žį=œÃ]­V#ЁV]ZäƒĐv$+ŦQ¯Î5#ō…÷ÂĻĐo€mžĶnˇ#:›Íf#oĀO/f=-į­Ĩ^˛’ÄīnˇeZ!N˜o$ėI!/ÃOâÎfI÷^vļ;M”š5G›ŧ,/v—qb IÆF`ķ|=3įũ°šršŦjĩĒx@ŨnWŨn7l mg-q_d|>ā~@ĢëîģŽ\š˛’ŲÜ ÉDŌ‚ųØŪŪŽM›M=5ŸÃ{˛—3LŌH¸Føũ%@…‰¤*—ëH‹d5—¸lƒŠ ^öp2™DŌ2 jj¨aIxŲ9ˇoh„‘é+ä:0fūž876FšĪ° ãHÁ K‹CĻōČ7Ŗí—/_Ö< ˇŊímĒ×ë:88Е+Wttt”H$ķét^gžĶé¨Ã e H0Ëįķ`đؔ lä„ģyä>ƒÁ žGģ÷ööB ÂēĄ?sæŽI|FŖHĒecûũ~Č@œaßÛۋdbÖ'^čƆv^HđžÍf:88ˆšķüį?_­V+¤CČīh;‰|H[Æã…žžúīN'‘\ΜgÎz’,ōˇt:­k׎E¤ĄŨnGb"ãLnžßív#1`Ũī÷ĩŊŊ­ããcŠŨn롇Šƒé/?o'&\6ģ8 Ž„DÚÅ‰ĢN'æĻ4—É ųÛØØPŖŅHČÚJĨ’jĩššÍĻ.æ&Ī…ø ‡§yooOF#æEģŨÛLéNˇÃ8 Øę~ŋŸ“ĮĮĮáÔlnnÆØĀ˛KФüjĩ•ŋŒ 'c}"-÷*kė+üNšË[JĨRäG°†‰ P- ‡đKî6š’ŖŦŠlvQ-k}}]Ũn7ō5< ;O”†3ØČĀĄpö‡B„ˆ’'¤5 ũņ˙qBOÎž<%" Ë%=aķW×Ũ{­Āü=raXa<ĐJ yŽĪ‘ ‡Ņá;贗Ã˙° 0 2X˛øķ^‹×õŌH˛Ų…V– p{˜JĨ‚-E'ė†pÂ3¤đĖt:Ė ¤'Ö98
!¯ĸ!)"hĒ@Š–áGiQåæ“vôÂ4’ôįaY6 ¯ã}%-¯b“÷ī1–ž@L¤ æIc°ôΤŪ_ŧ¯'zqlZ­Ö34ß8ll¨Ė+Øjo€U¯×Ķ`0ĐņņąƒnŪŧI¤$Ö„‰ēМyã(w@< &ÖЇlšîÔš"rŗļļŒ,ßcm‘č3Č@?Œ3=ƒ%§ŋŅÜzžČÉÉIœu°ļļ÷qPÅüåyDĖX_2ÅŧÃĄō*#Ųl6Î> "k‡Ü€ã˛TkYB@’$•WŽŽŽB"E5ÆöĮį¨ÛíĒX,—¤ÃÃÃXO€7žĶī÷ĩįgŗYDo†ÃĄZ­–zŊžÖÖÖTĢÕBęÃz¤˙qÔČH2˜ŖčĩŅNãLxn ķ…>"b")ž‹]ŠTÔnˇã°'_3;;;‰ NËÎ6ė=€į6°ëRō58Éí>Éõ$ƒRcŊT*E?@‹Åb8.ëëë‘[ĀķHL?99QĨR Ûq~~Q "08đD ]r’N§U¯×ÃYöœßc677ƒ!jÆ^åŦ?>‹“ŠŊ#YˇP(¨ŅhÄŪīt:šÍfÚÜÜLdėMØ2H ˆ3NĶÅna3 XpzTĢÕÂ)čõzj4ÁæĩÛí•fū.ŋV`ū¸œí€éâgŌBēŖĮ&‡l@åɤ°› &áëg;ļ„Íc™õeC•6=¤ ČBym] 6ß]>ˆ…wö„SîÍ;ãHx5ú „$[X./oF6w$|Ãté ›‘—č¤ŋšˇzb)€‚ļ4¸–ë Ķžå$-@ŖKiüŊ ƒĶ6øwé7Ū˙õYŪL<\îRží rOceã<==ÕĩkהĪįõõ¯=QŠq0ÄæO5 æ(īėsÅœä(x>‡ÜÂ×īS Ā‚ äŊų,Ét8Jˤ2TÃ@ę¨öuGXŨPžáũđuPK2ĢŽö2ŸWŗŲŒŌ¸Ø@ll>Ÿy ŽŦÛlL$Pū\ÆŅ‰N§}éÉãū‡yáŌ,IąÎ!HhķĖ˙ÍûQR”~€Ņg-`›ąķŽÉ‡ô`nđl’nķų|D[=ąŨ÷?_wȌX§ŽæšfŦWˆ)X|l—ŋįĒÎüŨ}­Āü=p•JĨĐŊN—'§ōo¯ĄėL3› €(vC,-†|žM F âŒ(Ņ@ !j ād:čĨĻĩ3€'Œ1ZrŪÛ~i¯ƒ'6v*%# +Ęxm†%• s:ĒŨnkkk+6)4ģš\. ?›Î ĩĘa{aÂø9@ԁ#gđ* ŒGˇÛMûÍÆÍ=`ų9L2wū`îaā]×ËÆHgƒaŒ¨ĀËåĸĨdeX0@ á-R™FŖĄN§ŖVĢĨŅh¤fŗŅÛķoî“ÅŧöäT^ ”MŋX,&XŨ .$€"˛-6WÖeũč'Jķ …ˆp@)= (nˇÛēxņbôˇ—2…=ædVdD2č×ņxŦ×ŊöĩúO|Bũȏ¨×ëŠÕjEųYä4žŸáÕXHvĨę •4HøDöâ¤KÖ2sđėė,ĸ#8Ę`Ū™،ÍÍÍDžĮúúē~ķŖÕĢ_õ*Í됧N§Ŗ‡zH—/_VŗŲÔ͛7ã~D<¤E¤‚õ8Nƒí zÎsžųFTAÂAŋ甁ˆ"ī¨e>Ôëõp´&“‰vvvĸ‚ ‘>tÃ^×ëõėlmmE4ŠųĮAp8>žV֏;éÔļwé “¤áņx•›X#€yˆ”ÃÃÃXœw€ 'b…SNEûä“āœT*•č_°¯árš•qp\`õĪĪ·‹!yai6›‡!ģĸVŋ´85))Žû’!iqv ų,O=õTėaĖ7Č&r‘čWJNĻĶéD•+œv"Ė ĸÆŧ/íŪÜÜTĄP™¨ī1ĢëîŊV`ū¸ҞąŗqaÛ,|On˜¸TFĀË]˛9ãO"ǤØp1ÔÎ0°ąYÂxybå˛ėCš[Ø0iü–ĢKĀĐ2\úÂß8”FCÖXDǁôĮ)yb,}ĶK_`LŸ…Ak °…™ņ>v6‰wõ>ō$bú ä˙§ß€w€/ üüü<ą‰ņÜršŦ^¯—`°a†aéW?Æ0”Íf#ņ×Ī`L`Ā`UačSä%ŌŧēœO>)I öŪeÎ<3ˇqČ`đ`YŊĪqD Œ%I­HTTč|S|PʏįIŠšÍØšDFš;čû%…üV`Aŋ<™÷€j$­V+‘DîũC‰>§ŊÜë _øBŊä%/Ņ… tõęU}öŗŸM$ âÜfŗY%¤{Ȑ'0–^åƒSHˇˇˇc^Ŗ“ôyE—+šŒÃƒŦåÖ­[%"bäķ€Ōˆ”ōãũÛíļŽ_ŋŽŨŨŨp¸Ļß#:8ôõz=; đėl6ĢÛˇo‡ķ‚|ŒD{''ņälooø&߃yŽ EfČšŧcš\Ž$S_˙ØIdŠ™Ÿōĩĩ5Ũ¸q#rXžá,pīzŊŅ:"ZÜĪŖäiņlö!Ö¨K ûũ~"ĒX.—ĩŗŗŖáp¨ÃÃÃĪŦ[°ĸčeŽŊx6Öå:ėŖŅ($fĖũõõõ#`–Ëå8\Ęī‡ã)‹nˇåMĢÕjâP(ĸqm"Ē5›Íâæx”–ąęt:Ē×ëĪ80kuŨ× Ėß—'d>›n°‹ŧÆ‘Áh`,I4r,F ĀËãšf9$îėŊ¤g$rš$ƒ‹gz¯uP&ĖĘļœ¸|Q`åũ{DB) ē\jžCÛÖ6ĪtŠ—×WNÚuXpØĀĒ?ߝäōå‰_°Ŧ|×7oƆņvyũîķÅÛáũƒĖøÁ<‘āÉ8ø;pb˙ĸūg8ĢDddYæâí-]Îŋ`/_ĖëåĶLéKÚã}Į}ŧ$)cãīÉÚãō5ŋHĖFOīĪDc렘~D-—šãs<Ē&Ū˙D\ø<īál-ũ7 "iąT*éŌĨKÁšŌŋ’âđĸl6ZdŪÛ/ڍSėí:??WŖŅHŧ§†uâe/™Ī§§§ĒVĢ1%…Äį錄}á%<Ŋ¤"Ž(:n †RŠ”˜ëŧ‘OÆäįĖ=?tŅŧĢĪ€?¤áôQ§Ūîéæļ‰õÁĩ\VŌ×žÛ˛\n~˜ ‘˙<šRnƒš7’ˇš8‘Œ÷_6› ‡Č+Ųø<Á.øšĻOésˆĘCōŒŖKãŧČ‘w: æ}Jôƒ¨‘Ÿƒâå4yŽLž+ãīå2æû‡“kkk‰˛ŧ^ŅÉmØęēûŽ˜ŋ.š’‚-p)ƒ—įbŗsɛ)!Ašá"D‹üĀÀ|ƓaĪĪĪãčria¨ü"7Ē øIwív;€2!ā0ēŧī‘Édˆ`•a/2™L„—Ë–JĨ°Č.BÕŨ˙ÂļūãnQšqŽáxŦŌ~OīũO[zÉaUoúāĻūīŪ8Qš„f+žŸ I{ˆ,°–Édĸ: Άu#ųŅ+ö yAúC {ë‰ÃH58ų“*Ō<„KXãÕ4ü°,Ķ{• ú ÆđFģčwĒlđN<†×™0ÆIšŗz•J%JĐĄŋf‡Ņ"*Áŧ’‰“@~†|Á7kĀ3ΧrīɁ=$ûų†ËHaŖŅĐ[{Lŋũáë‡y$Ö‘?.ž¤ÉršŦZ­ĻBĄ ŖŖ#=ųä“Ē×ë:::ŠõJ ˛6ŪųXŖŅˆūen’ L$j{{[“ÉD•J%lŒ¤¸'ö €Žüã ŋ˙ûzũŖĒx'ؐHÚd2‰û3†.Š!Âčų&^ʼnÉl6Ķ͛7u˙ũ÷‡K§Ķą6()É80V§Ÿ~:æqĨR‰5wôb IDAT||œ°%D‡yĖ#/1x||˛AXítz~X›&TTÁF°Ļ v°”¤dÎSjYĖvŋß6iš'nģ&‰ĖŅŅQØ @ũųųššÍĻ:Ž.^ŧ•— 8fŗ™Úív€`¨rũÔSŪ…ņã0'ĸAÄŠ|㠓hXvP= â4XÖãÆ˙IŽŊ}ûv8~ô!Žö›ōŒ-īBČ}&“ÉD>Šį¯0w™K~ØÎ˛&oīęē;¯˜ŋ.—‘¸„ĀæIl>g@``đė1îR˛Ū˛KoØÄyŽ´Hxô/ŋķÍ -mjĩZą°ŲÁRōĐO4Äčہ84„ĩؐ´ƒËûŅöŗ™PER€  m>ˇ­ßú‘ļi÷ôÁÉšŪퟴôyi8šHšŧŌéil°‚''FŨ+ā¸ĖfŗD%ĀĘŗ•|$r8p--ĩŅÜ$ūÁh9ĶĖŊ7Ÿ#l~üŊ>R+žĖ-)ã‰ÜŠÕ“ˇŽ5ÍŲdyôÆ´‡}<˜ ˙`Ú¸č/ HyÜĄƒiķ =^¯|ųLĒ^ā<ß˙ũ‰đžWĒ Ƙ5G„ƒJ"č{=lî2ĸå Yc‰c””p~ŠäS­V#Š…žØ%_ûÚךL槓"bĩķRĸ.\ĮƒyĀ3kĩZ´“ .D˙Xk€G—‡Qö“÷eŒ™OØÃÃÃøGĀÜĄDÂCŒŗ(o6›™Ā‘TÍØA ‹ātâŊŊŊ˜“nŅĖ=œ 0oų‘’ņxŽąæ$îétQIˆwņšl'˜ûœ‘¨௸?28Ā>ëommMëëëjĩZ’æ üĨK—ÂqåŪ™LF­V+q2n:ÖŋÎ8CMÔ¤ÛíĒßīGĸ4īBí}Ū×Éœ%ö%€m:9‹;bgggĒT*‰$ÜåČNųp8ÔÖÖVTDb ŲķJĨRkkk‘ßÃ<&Bļžžyk>>Œŗ Ø ėfĢÕRŊ^×xĪfä` Žæœ6ĸ‘u–Œ„A6|!tÂļüŠ€9eĶ`sd#ANōŸ¤DČÕNĄÆ5Ī&Š5öŗ5îöôŌ‘žũÅ==ō-=Ŋ ' ŸŪŅ›c[_>‡ŅfCõīΆšÉd‚™dņđdæŅhL,÷f#÷„7eØK’9Rhžũ˙hKIĀå>üUg1/Øŧa¸ō8g´QR8M0YĖ7’}asyo6y~îZ["HÅb1tëŒ÷$rO/9Iģœéį?ž@ˆö—įûØyĩä°ŽĖ5äD´(e‹PÜÜÜLD° ‘Ėß\.§O}ķ7ëˇ?ö1}äá‡}Κw‰¯ÕBĄ§ŠĸõFr‚“ÃÅ}XŗŒ Č ¤Q=ęĪų`ŧø €x6›éŗŸûœžûģž+JOō|¤°ÂčĐ]Øǝ ũÆņ`Ė?æ‡;žDqp:GrĘå˛Žƒ)enøÜ‡eĨDâx<ÖĨK—Ŧ1vÂ#RĖuČä7Ŧ "M¤=€P۟ļā2ΈÜ0ĮXĪĖí~ŋŅ…bą˜¨:ÆĄIDAē,Éå cÖĨW büČĄqY&dĩđÉ§Āžb÷ŊĪpLyŽ#eY‰l{Â2{ww75∎ŽĮã`ؑ=BŅ×n__ÚNąų…ŊÙdŋ@ŠÅœpi+s “ÉŦēK¯+WŽhUxô¸œĩėÁLŗáI céIĻžčél–KD¤….zYÚ"-ô—lnC×ûa⸜ëW=˛°ŦŅduđPb>Ÿ*€v6!īd2‰hÄÆÆFTÕasäŊa™M×įRîĪ:ōHŅææfD`aÛŧ”%÷’:ęņx'G.ëĨįŸH€¯l6•p€#š$ƒyG_1įĻĶi<×ĢãÉōĩ°dŽKķČ € "~ažõųä§>ķŲ{ųŲŲ™F´ËĮˆĒW'''1Įø@‰wBÎsrrXHJˆ@ųüĻ˙ũEæÎ"÷b=nll¨X,ĒZ­†&ŪûĖĨ!DRĐs×üŗVœ}įũÜ&°NgĐ/Ėyl-ļœwæũ);ĖŧķH!•gĄ9ŧ;äÎīėųNŧļd8†síR<æ3L5÷ÃYÄÉáŨI'âKģ8œ `īՀ°7~ĸx:āOu!ÖjĩÕyNOOC>ęQbŊīąØ}։īą…Äōh ž-ĮjuŨ=×Jfs\žā°cķp„Q€!pPM`ÂYIÅc¤aÄ\B )ØiÁōIŠMԁ™ŗ–[[[ c X„i…M‚dŗæ Šjĩš7H‹ڒ§5ŌW$ˇąáU*•Ø(Đ$ŗéŗé›Ęčíë”Ú=×÷]LëĪŽg4¸ã Đ^Œī˛œĻ'„Í×ËÁ1Ļ&đ”™sv–(jî{D)M´HCH"ƒA…ÕGNBû\Š…v:ÆFī›LtĩZ ¨Wہ9;99QŠT `é@‰ūt7āŸC“˜‹lđDZ–ĨXČT\ŽáŦ8L>›+G`”¤Hs~*`sx’į–0{°õ$—…–xNģŨŽûņŦfŗ÷i6›ĒÕjšN§zÅË_ŽōŲĪ*•J%Ö.•>¤Í RJŖŅˆĩ#NûŽ’ÂĄF#î 3Ž9ß§ŌUwˆPI}6íũž—žTkæl"=alq^° üΝæ63l”—áŊ}ûļFŖ‘nŨēĨŧā‘°Š3æN'Q<¤“É$’Ø ÉZ­?ßŪŪV­VĶķž÷<=ų䓡!đ˛ŪIÆõd|æ6 ‰ˇŌĸŠĘŪŪž …B8\ØæūééŠęõz8 ŧ“f€/ėë›ûœžž†­đvâE¤Ī Q8)ÖįG‚p<¨˙ŋ\čģĖ}ĩļļŖaY;ôR?$ GŠ šDTļaŦ=Ntįb‡ ‡a<‡d2—ËEIZúúää$Qig ë2—ËÅŋ‰ år9íîî†Ķ°ēîŪk%ŗšŽwŊë]’”ŲŗQ"aQa308Rč\y虇3ŒlĐ;úŊ 1’ÃÜđ{Œ%`ĐčŲũo€Ž´¨ü ČTxGŽÃ†íŖ’RI!ŲāŨŲhūԅ^¯kŗ'}ņki=¯ļŽĪôm;#}ë7*÷t]˙įņHšüâTÁyIÜĻĶYhS ÕâHPŲÄpķhĐ}\œĨR)ÎHĨR!9p ßÁAqí&‹#úÍ5ãäR8cæĖc…ĶÆgčk¯P")6~ĸBc3Čã>€ÚzĀm'Ÿ å2‡Z­Ļvģ}@ŽwY__×?ūĀôČk^åū˜oDę˜ßHQŧͰØĖ[@ģä+āĐ`—čįK—.éE/z‘ĒÕj"Ÿ>qrĀíɜØ6Øhœ ä>8Nä.āøx4Į#GĮĮĮąÆĐš#Ÿ“ew]Į˜‘ ŽĶFԉįxîƒ;cŌ<Įō"„ūĘįķžˇ.‰$*Áœ'Į€č GúŠ=Æí´KųS("zÂīé ¯\T­V,ē=Ÿ€H)Ž:Ņ^äP^R•9[?™L´ŊŊų;;;ęõz‰rȐdËŌÁL&Ÿ”ãtyÁœ!整\âXî%éÕ¯~ĩV×Ũw]šreæī…ëŨī~w8gÖaQ°"üŖę˰'ę4€nX1ØÎLĀt -äų-Ø=ÚP*•ÂHaĨ¤äąí0Ļo—ÕxĀĪ÷q0А‰^üŽū”FëÁ3ũÂcG*ü?ëzŧUÖoiĒ?øķĒīëëĨ;#ŊøßīĒpŊŽ?ėĻĨTJŠ”´õī]ĶG_ÖĶ]‘žLÂųādHO$fĨīhËq2܁YŽĘ‚6Á-H'lx˜—d-€ų>Fn6uœ~†D‚ˆíčH 9 mägF6b{Ú Đ8;; ` X€í=99‰9 pBë ķæN”¤`u?°ĮlüŦ!/åˆ<‚5Ā|ėų-kg‘ZādŌ^œZw`™Ė[ÖŒ°ŋŽ”¤ËŲlVŸûŽīĐ¯~čCú‡Í-Ÿg}āÄdŗķŠ8€vփ´(wI"" G‰ąAÖ@ÄY‡;yØ Ę_Âôũō?¨ŋûŖ?šč:a—žážA/}éKc<=ĀåƒDqā)ą‰s‹­c,hĶūūž$銧žŠwA—¸g-¸|Œų€rɞŪ‡Ä ĩ4OĮҘN§%ë˛:Ø~ú 6øėė,ÎÁÉpYųD‡H øbsØ?<§ ØĢ”á ĐĮîtéüü<œ"AžWđ7ķžqÆ!‡…Âaįķô-Ž cÉ\Ā–f25›ÍX§ĖCœČåšIdDšeTHģŗ”N§uxxš%ŗŲœ¸Áî9Ųutt¤ÄúúzTŧaŖy'Xy—Ō'<ᕝ|å_ ;ŦŽŋ×J3]Îdpų ƒ8svÚå’žņ X0;bLËúsyβÆ^RlÆ^'œŸ/ˇŸī.ë­aj—kggŗŲ8ņ’ûķžü@ãīéíđĮ˙ķ3=ōĘ[úîōDĪ­YŨīqVŋõ[÷éī˙ŋ)=Đ;ŪrM?ū°4› õ ß~[Ÿ~ڞwųD?ųyi非mŧÆĮĖßĪ!˜JÆŲûkų=|Nø,ô)ãčšsūīsˆžįጃ×đFWëķ‚9ÃFˇčŸŗŲd­nÆÄĮØīås`2Y”ĩCĒ‚Žwb>ĐŽÉdĸ×?ú¨>ųŠOÅįčw*‡øÉĩÕj5úĀûŲŖ$hŪ}ųúõõē|ŋ}ĘõĢúŪūļˇÅ|Dû¸ ķø?ü°žõ[ŋ5$#Ė!úƒgz2ōÆÆFTŠņ1ĻmŪo_ųĘWtíÚĩ(KÉÅ9 Ūŋ´Ë+Ōx]~wŽĨÅzķh’$]¸p!q@TĄP9"Īu‡ÅĨŒĄĪmæ_Ŋ^æ™g{˙ãČø\äËĀø ÷ōË× N<ũáæē¯/ˇO8yĖÆĀį ¯m֋Ī/Ö}ËüķĘ5ŦėǤX ū~Ø&r-Üöđ=Úā{ãÂ˙—ŖŋØl$ķŒuäīBųPˇšĢëîŊVšų{ā‚m’L3Zbt¨„" ąÂÂÖ"‘E”5Ü=aĖ“Š$EDĀY×SB$ĄæÛõ‡Ž_'ô\¯×ã°7Č`PØmgŗŲHB‚9cÃsy ÷ŐÃĖ%€íUjĻ›į’4҃ÕŦ¤EBčt(}ōwî×L7ôŗ/:×ÛßøgzU7Ĩ­Ęŧūõ÷õ_<ž•˛‹d`J§ąQ{ĸ}„Žu0˜1Ūëõ‚ŲĻæĩ'w˛ņM§ĶWî]*•â~ŠTJ[[[Á~"õņÍĖĮŲuđĖæ‚3å°WÁ˜ÂâfŧŊT*ŒŲÉÉIBûėĐFyWĸ~ šWÃ!´žœg"8Ņ^XĄs“˜7™Ltá…`?=°lâDžüô\@ ķŨKËúxōo—i1×3™Œ:NĖ•ÃÃÃÄē‘”8AöSŋûģzũŖFôŠÚáãņXNG{{{1 Ō… Öy8ĒZ­†}ÁyŲÛÛ I’^úÍŧ4<´Z-}ėãF߸ŧŲlåÕĢWõøãëøø8֕ׯO§ĶQ!ëøø8áđ2™gôŨÚښööö4 tķæÍ`ma‚ų~ŖŅ6—äeg™{ŧ#Α‚ét `Ú=׉Ä`Ú+Î\J§%HsšœęõzDA°{ÅōJ2ē>Ũ°Ë°—ĨR)´ÛŦ‹­­­Ä:uš@t<žįđ™N§%@‰¸¤ĶéĻD° $yōū”ũĨŸ=ĨX,†= ī‚}‘ųŸīđî.7rŨ:ãÅÅ˙ųœ“#ėKDā§­­­ˆXąOĻēí@–ãyOØlÎķŌéÕu÷]+0\Žņ%üæ•=ČaõcD|Ķ tĘį%ī@˙vųƒ´(-H¸ЀCԁņˆ{’™”AčɈ3ív;ĄëĨM„21Ŧ´ā\*•b㓔8˜HZlj€ĶųįŌēŨLK—§ĒW†Ę(ŖifQģĶéč“ģ_g§ˇõķß>ĐVe&)Ŗöŋ? ˙RVÉ4BŖ€G/@Aû ķÃæËFCÕÚčũȤ4"s‚Ä1/Ž!\ÚP("qĪĮš‚—ˇėđoæ{KJŧŦr¯× €ĀĻExĮŽq`ÁÂ1×$…#*)3ĸü 0ÄÁ“æ’aáa(mhģY_žk€# øÜŪŪŽąšÍfQŊŖZ­F QĄŸ¸//ō(ôųŪGGGęvģÚŲŲ‘4O¨DęAŸĀ< ī‡yDŖŅHŸūøĮõČk^ú^ęvŗÎ)ÃX­Vãž´škÉŖ+‡‡‡ĄS,Js wxx㎞Ũû˙͟ųŒ^˙čŖsģu§ Hy°98›;‡G=ņÄzꊧÔív5 â %Æc:ĒŲlÆsg‰uH9@ˆ‚ĩĩ5õû}ĩÛmÕëõDéE `ãāŅívĩžžLޝŋ~ŋNĒ3Āb™Ÿî81w¨ĻENļŸī-Kå\v„Ŋ<== g5P(žQz”œ€˛ĪØđN§ŖZ­Q"æG¯×“4gŧ‡ÃĄļˇˇCfEYK˜m—˙ q˜#Ũķ~§<_6Ÿõíû“K;! 8Ŧ {Č|d먎Ž_ŋ.i.iâŗãņXÛÛۑˇŌjĩ‚ŧ@ŽCųLN-îvģa˙ŗŲlėˇ8oD(ÕékŌ‹5įųaė^ huŨ}× Ėß˞¤H˛ƒô°§—udsņPYū’ HRyiąáđYŒ,”ƒq˜v  66adan<é› Tl0ÚIĀÎ FFÖ50i°`ËĄVú– a<ŠŲLKšĒ^¨Úî0^ÁÎōú§Ÿš¨ī|ü\įbZׯ–ô'§e6˛ŌGîįҘ(úĒßīārÆØ#'Ōĸ„Ĩër%%î+)1N1œ×j3ūŧĪķąČfįIŅhz]j‚ƒ §/qî`ņyžkUiíĻrUUh›ŧK$EžmėŠŠĪN›hˇ?›5 )"4ô  ‚Ū˜÷ōŊ´ËU\“KųIĀļ¯eæąW\A|âāˆá>H `>ųųĢ_õ*ũ¯ŋûģzÃë_ų  @ˇ đåÚØØí/cO‚ǤČÁĄqÄ„‘¨]¯×cú3ŸŅŖ¯{Fw4ßDq`IÔv&™ļ9ÃĪį™#^Ąˆūō1âį^íDZ$ŒB$ėîîå>D´¸Ÿ—ŽĮá”!gÁyđ bŋ°WĮĮĮŅGØ;Œ"Ã@>BŽ ũŽŖˆÅÆšŊ"RāûÄrԍōĀhé},€åÉÉIHč Apö!jp"Üņ^ž÷Ō"™Ūí cØzÔc2™„äÅëÖķˇËē°EUĆ1Ī …BŒĄK¸Øą_8%nሏf2™¨nDÅÁžō|ú„>ķĘW.=âgË9`˒ÂÕuw]ĢŅŊ.6ģlv~šĒX/{Æ&ˆ1ĀáņKJWĿĮw}ƒÄ葨'-Né$A‰Ÿ9āę÷ûbdSņ¤*Ø"/Ķ%-ĘÔáHL§‹˛pnhų?ÕYØ@ŠÔÃf}˙ķĶúŅo<Õä4§ãĶu]Ŋ=ŌépŪ?ĩmАÉčüÎÆŒ#2gw†:ž‘Ķo>5ÖúúX…Âĸ|D6jĒ)8 t™‘k@Ų,Ōį°vŽí„š‡ņøˆô¯ŗ`ÄđąYâL1‘K9ËĪØI Pâ§.öf!‡!Á3’b^H‹ō€vÚH¤‹{;ãåō6Jæ8Ž›?Œ˙|3™<dRæ7Ŧ'c„L ĀDÛé×jĩĒN§´ōŧ ũAiV—Úáô:ƒG"$ÚÜG_÷:}üc“$Ŋõ-o‘¤-‘dMĩ$æjĢÕJH•\NĐl6CâFĄ>ģuëVDgX­VKŸũÜį$I?üæ7+{Įļz˜į΂"G`ŒĶ^¯šđN§ Īžv&“I€túƒšH„dYįüœį<'lk@Yą}ârVI!e2)H’8ĨMi'L6놈 šė= G[īՎé”z<:: â¤RŠ$"oŦËt:SÁˆÃ¸Sį§'÷đļõzŊX;°ą;H…$…ÃĮ`đO}Øī÷˜.į&@`¤æ3›s…ĘÎĐŗq’Eč&Ģ×녃įUkÜáČįķŽŨ™aū!U‘Ū#N‡ÔˆĐ< °âŒ:ŦŌJ0ØühũîĀ”°5Ė6,ąG´xorDÆãq°ūÍf3˜=r’æš[[[1×8„QåŊp9œĒŅhÄú4ĶVŪĮƒūb{"&÷}Ëcé×?üaũÚ¯˙ēūķû15qÁ$Su‰yMŋ¸­H§ĶÚŪŪæ Fpâšn€ük臔žcOån7677uppĪqļ™ųY.—ÃV@ĐÅb1Ö ŸžéÕŋN°Æŧ;z° 8ŠŽŋfŨŅô ķ’rŖŦE’q;NŦ x‰8IēSŌ6eXˇØ^ڈ~ô‰ĪĶ6Æ˛P(ččč(öt}­M§S]ž|9ŪĄĶéD…ÚŌívÙC"Įzît:q?Øm—uB0‘ˆMĨ(æ´GųƒASFC’´ŋŋ¯\. ĀDą˜Čjx6Ŧ> 7ãĪžGųūéå5ĪĪĪĩŋŋĨC}-¤Ķé(ė‰ÕŦėāūÉ}+‹ŅgŒEĢÕ §˛ŽŊļĶé<#˛ļēîžkæīËå č•ë€IQO˜0h§ĶQ&“‰„-B|^^ĀÎá!ML×Ëz•˜ÉdėßcĨ}’", ؓŌ4°°p€Ā÷䙒õĐŠW~rr ™ƒ=@‚„|$ŖLîDŋņŠMũ‹í”ökí‡Ú¯MußæH 3);Ô÷|ãPßŗ<ŗœ>÷ģõß<‘Uķä$¤Blr•J% rHÆtŊ$˙÷0ŗoę˚ÉņxŦÍÍͤ°|ŒŸëŅ(RōTHúĀsĀe Ō‚÷Ę0ôp´ƒy Ęrš§2˛/K\há{¯ŅŽŸrqlôüŒy6›Íâ´H‘ŒÁx<Žˆ‹ápšq>K;؈Ņđ²Á Æ"€ás}īÖÖV”¤ĐįŽF#Ũž};œ%"­V+E[$2#Éd2Á&ŖSĮxmuœ(Ęĸâ,ŧųMoRĨRŅûß÷>IŌŊã‚OIqPzzî‘N§¤L&“û\Ŋz5έ­-M&ķēÜũ­ß’$ŊæÕ¯žĪSĢ8'‚!)J,zol„'ārNÄŅŅQĖ‘~ŋ:w¤4ųüŧ6:öČuÛHĻ8YĮŽßīĮ\uívģ‘zķæÍ`x!1ÜácnÁ@'~ũúu ]ētIår9jۓ4ęö{Đ_ĖuęĖ캃ćŸH'ĀæĮˆu@ôb{{[ų|^ßō-ßĸZ­ĻfŗŠĪūķ1ĮŲopļIÅŒFŖHe/bÍR'žčsŲŖ[ôŲÕĢW#–Č‘—=99Q*• ‚§ gƝ1ˆ">N'œ$cäÉ ĢÁų`uG[ iŌl6CŽį'Ũޝ¯ĢT*éėė,tõØCŪ‡’9™ËÍ™ĸΏ'ģ=]]w÷ĩķ÷Čņëåîr^ũƒĪšF’Ës–//Ë“á%Ûür)-4Ģ6ÚO”p; ‚5Ái@‚!)6f6$6[Ú t†Äīåšs˜ŽytÚČésÅØ˜‘ō¤×‡ú•t¤—f3úėīoęÚÚH—j=´5ÖåÚTO~i_˙āË)õFÉR°7lH.ƒqöËu°>>Ž›v°í$×ŗ‘zlŸ;Ūo7 synqņË~ú 0Dx–ŗ‚Č˜ąÔ IDAT?$%"JDhãōEb!—k}é—'qO€ˇŗ~|æ °GËׄKĪô—GŗcDFoɃpŧKƒÜq[āŦúō4ûŗ}Îv:íīīĮãūTœZØÜķpféĢåh&]?‘Û/æ=ļĐ̏y{š?9+>ßx—ĪÕjĩXßD2ŠLÃEģ}¯qi Ā>tϝN/N1Į~/}đ1$1›6ŦŽģ÷Zî=pQ9ĻZ­Fb•4gqNNNBŖ 8ņƒe–“‘b–A÷†ņÆ˛‘Ä+ÄĻAbëh4ŌÁÁAb“ņ$?*ąÂlš$ÃG€vĄA•”0pTláû0ōŨnWĶé4ä 8 ´ß×rø˙H/­Iˇ˙dCī:,Á —ËE•×ll;€žž÷JŲl6QÁ€žābƒ—š 8@X{ŊžfŗY€€ršŦfŗ`ËKŋÁbrđcæō#ÆEšƒ‚fŗ›<œ¨Éh4ŠQĸ08fĖBߒB†ĀŊ™‹lŧÎ6ŽF#5›ÍOßJ 6GŠsĮûÄi#ķřT@_Ŋ^~ϊ >Ÿ?== m3āĘ×āƒM™ ãĪÃ: ķšâüŒuKųÉŖŖ#]¸p!Xņĩĩĩø;Ŧ€ZĸOũ~?@3?w'L’ŪōØc!úĐ¯üJâw?úöˇĮX _‘%3ģŨŽŌé´ūņ>øŪßđ†…ÆüN%$IĒ0ĩËāË˙O)@ú  NŸâœ0˙ą$Ąâ€Đ/HŗŲlČõ`Îé3ė @'eI9ŊÔuûž&¤yíøL&ŖnˇĢ~ŋ6‡6!Ä–Ÿ…ÃŅívCûŨjĩâŪĖ]ÆÍÍ͐ŗa/˜{HhĻáDšĀIÂîaét::??×O<ĄŊŊ=uģŨDå/2˛ĐŋD­ŧĖ,•nœåFZvrrĸûîģ/ä;´{<ë… ßh4R­V Ōg4ÅáûHöÜ!Čår:88)ĀĐ}||ŦBa~(ųĖ7ĸ6ŧŸ3ūĨRIˇnŨŠŊĀĨ2;;;ŅFė(ķ‘@LŲTr||ėXŖH‡ČÍ9;; ŋ;§ĢëîŧV`ū¸\“‰tiazI‰ÄG6rgfؤaq 0(^ŋXRČDH.â3hŠūÔlw‡ė}Œ8íBø\fƒú°cHQßÎd;Ëík°vFŖ‘JĩŦžû›ŽõČs‡ĒŽĨ?ûʆ>ōĮēĄ|ĀšÁĪčOZ’jŊ 6ĶZg!gĨbS””0˛€?~ĮĻAĂŌf€CØ Jãq˛íx<ŽÄ(¤úe Ä;;;ąažÂđÃd,ØŌ<BRl@€SXH:Côíô=ŦēK¤EUØĐ¸Eĩ~ŋ‰›8CŽ•—‡â¸ž&&Ν5@C.— GP')8úŪķFx.‰i8 ”gÄA#lŽî֙@d€Fœ wjx}!)ÖĩēT*ĨJĨÉ}­V+XDæ9ķ-: ƒ>čõz‘Ü8õ–ĮKČ~åŊīũĢĖ‘$éMo|cŒC6›UúN?MC67›ÍŦbwūšÎy[pzz%Ũ9›N5Ü 8Ÿ<‡šŽ Þ`3ȅ€]>[Eî}LIPiÁōļZ-eŗŲ°}8lØ›l6ĢN§Ō/l7kBZ”b-‹!3!ŋ6ŸšĘį<’„§Ņhč… ‘ĮÂ:ĀöHŌ“O>Š7n„ü‹’Œƒ4Ž†qÄyÆŗąú8$ŽîėėPgŒˌ!čËÍ<‚Čšr9s‡ũRŠŒ6zs':ŧ<0cÅ|Ā^c[&“‰šÍf€xŖņxķĀ˙H †5=NC÷ŸĪĪOˆ…”ā$Ywēwvv´ģģ̧Ÿ~ZW¯^ĩ˙EČW×Ũq­Āü=pÁBôllÆh1,0˛l^ŅāBY2XâåŖ¯ũ{֗Ų5žīÉVüŽ #ˆŅBgLŌėėö˜ÍføâPH ā€áŽhĀúmũO˙ŲŠžŋ´čĶo¸¯ˇ~Īšūá¯]ĐŋŪSáNŨöéTēv##=gĸû/åÔ˙ãŽt‡írī))Ø+Œ¸'€1f$9•Ë帜'ŌŌôaĢÕ †–ĮõÕč)qČ\ÛĖ|ČfįUt H‹ōĨĖ62@0‰Æô1Ė<•BH„•Œą3ôPOd–@˜Ķ€U6-—?á`œŠ×ëiss3ŧ¤sŖŨh¸3k](TĢÕÂÁđĘ8ô!ķĐįĨáÜģęõ ačS‘ÛáÉŦôÎŽđg<`d7.gōIđ8’Ô|ŅNlÂß˙ņ§™l(ÛHe•áp¨Úg R{ú)ĨČ`$ûũ~œ¨éšięĖԉ3o;NTáÉįķ‘câŽ:útÚĪ¸â¤ ‡Ã°•hņą­N'l Žĸ¤8%§§šõŽ}°âBŌ鴚ÍfĖq˜ũT*cŽÃFÂ.{įPā¨ų´ƒ=Ûâ2!#ž‡­¤Ē÷÷¨9f;;;ąĻ°ÁŦö˜ŲlĻZ­ũ˜Īįcn`Ŗaö_Čwö˛ŲlČųøšÜg4šĻļĩĩIžŊ^O׎]S>Ÿ×ææf$ĐŖ§_]wįõLņķęēë.6L˜ŽņxĪ5|€g-šœéæ>lž€sžˇ\ P‚ũr)ŋŖ$ ĮÆÍĻėĪĻŨT1‘››4ߜ\PåD´@))}įģ´1•JiZččį˙Ģ;@žSÖ{?õ€~ø×ˇôŲSIåũĖßŊĨŦĻ DæuãæüŊv/Œ•ēŽŠdÁ{˜°õ°¯Hčk$=l lZ0ˇž4Ėg—ūž€ @ČĐ.¯~sIģšmŒ ķđÑ\FĀzû˜K$ŧ1wxL8l5‰lŪ8%ÎLJ Ų@Kōi›ƒz€&›Ē˓œág-qņyæ!}æ1 i ãCģ#ËüķwAÖ@›ųCN ƒgårš8ˇ'Ã×÷ãāÚGÍuÄų|>Ø|—y‚.sĐË8#ÅÁVĐī$ÔÉÃųF:´ąąĄÍÍÍDŽäVæ/ãDۉÆ0˙ü{Ę=ˇ[ÛĖxp!¯ō9Åŗx_/%Ėfįe€]Î"Í>‰­Ũ–? ŖD&үՁޤÍnkh7}O é AÕë´ŗŽũ ¨^¯Q6l;÷q‡‰œ"ŊĖ˙åü ?›Ŋ‰ŗžčKĘ\2?Ž!?a?ōD~ėkJR°ßƒÁ@Ũn7‘ėŒÅÉdcŧčėö†Č7$ĒáŧҁÄb_Ã1ōh ûŸõĩ ŠE)T"@ė%5üŽ9¸ēîÎkÅĖß:RŒŖË ؄@ŽĐãx3ɌūNT•ad^ü†ÃaŧĢ÷­—f%ú!)&´Ëgggš)ŗĮZ8#™Á qō1Ęr–J%hww7æūÖÖV”Â<>>Ž~ĀQ:==šäD%xWúV'›ĩ‹ä§™úōčÚé¯áp¨ÛˇoĮ}ÛívÔûv†Ÿū^__׿æĻZ­–vwwÕh4l8ŦôriYj–O&FTĨ\.'NDfLq‚‘āĀž3N^ÎĶŖ.ŧ3 ĐícÃæ‘į@DŊ4Î+ãB‚5ķ{ÁŦúÜM§ĶĄŊ?99‰’¤ãņ8*ĖāxJ {âēė!’Ē]ÁN#_CˇĪš8ĢØ|˜f'^kŒ÷"ˇ€5šžžų;éôĸ~ŊGÜĻĶiâÔ^ō<ę‰ô įđNDˆ(1û"‘-J•RqĮå\´Š^¯Į}!zŌétxH3ļ8k1đ|…­­-Ŋâ¯ĐęēûŽ+WŽŦĀüŊpũėĪūl‚)ÂȐ€đP˛Š{8—DT€›¨”ŦNžHĪåB2Ö@⌍ŗęu—Y@Ą\.G8“ZZüáēûiúLžöĒ~ęáŠ4ÉëíA}ō´$Ũ‘.¤ōŊí?ęéRģĒđ™‘Ęßz¤Ožú\%Ĩôå~YīË:™Î”/õ¯?Đ;žYzü*ē5,ęŸūŲH'ÃQ°"lĸ€AÆÁO˛…ąĻĪŠŧuģéÂåÎKsJ2 ×Vv–ŨûÄĩé^ƐÍGkkk+qĸŠÅbl(°W$ßēæų†ƒeĀ3uÂaë™s€3—OÜ\wĖŊ˜KČŗčuŖ+æũyOúsX ã ŧī5āũŲl6˜m€úúúējĩZ0€$zp*\ۏsÂ6dgA‘gpn‰ĒŲlVÍf3*ė°î(ė!zÖ cI„ÃŗˇŽcPņsrˆæáäxGŖ‘xāXŖ4q”Ōétœ ë`Û% Ķé4"Nų|^ĩZMŨn7˜wgŖi/ũGU+æģ;‹Ō"_Y ’ŽbąõÁŊ$ŅÁš#WĐJ$ÎõŌ/|á ÃöÎfŗ8šŌ–•˛‡8ņTœĄ Íf3Ēą`KĒÕjˆäĨxąšô#ä`ų˜'uō{ĸqœÆŒôc:ĒŨn‡ÄÅĪķŦt:ÕąÆãqDGqdqāYëHi|ŽđĮeV."ˇ‚¤{Æ {Â<ÄaĄÚšËaÅŲķ'îGîĸF.Ī!j‚sƒ­e͇C]ŧx1X}Ol÷ũŒķ Xŗū ˆ/ãé9G8¸‘‡õĒWŊę¯Ä ĢëoŪuåʕ•fū^¸06lN€>.6RŠW°á{€xgĮ ƒ˛YÂZĀ‚ųīŲ¤E .w&ëãâ˙_oú&VpyžņŽÕđļĐ>ŋ§ŗ‡˙îōÅz?xŋy?ņîLī_ ūŨ˜c6Öūy×# AĪ ˚ãž^WŨ™Xä~Ņīŧ‡ˇå/;öŨŸŅYķoæ%}KōĸÛØ{چ<ÂÛíķÆįcJ’{ĩZUĩZūį§fō™åúüËķxŲvxŸøøøĸ ŌŧĘ īÜɟĮ;ķ$ĩúX.÷=mōg3ŽžŽũķžŪƒ:Nĸßü}}n1_™ŗŒ'ĪĄĪ}î˛öŧß)QšœŧLŋų{úü –•Y˙D—ŧÔ(īĘ\â™ô ĪaÍr&Īō˛Ŋܓũ‰vzģčW?˜~pûㄊWYãoœīŋH4öųævÃŋģŧ7ō7ēúƒõüsĢëîŊVĖü=pũÜĪũ\°0Že&< k@(FĀõšh?=ų”īy2, L/BIÁ@ĐƒĄƒÂđĀPU*•`[<ŒíL§Ā ‰ō\X ŗŗ36¤ˇ>v{ä§9Ŋë=5Ŋ˙öš†wŪ…īžÕŠõôÆKC}įķ&*(ĨĮ?ŋ¯Į>?•6JOFzāo]×Gžo¨ŧrúŸ?RĶ˙5\°Ö°8J^Ĩ„ļVĢÕ` Ĩđ¤ĐŅh ;r 6!Ú{|| ą \ û˜ÉdTĢÕšĪä2°ô.wņÄW˙Ž—æ”Rd 0LŽéw–vßŖE‘@ŖĶüm/`œú˜{-ËržD~h3Ąwī7i!M ú 2æ0l¤;ʞgâU ĐŨÂĶ÷°~$mĻRķŽhŪ‘ČФiÍĖÂŦnmmEBŸƒ{ú‘1 )9蠖÷‚ņFķMD6—ī"%`<ˆRdŗYíėėDÃ4Rƒ„W@Îl6 y ã‹-b.•Ë合õ W!—ËK īÎD"ôG6› &žžÂ†1>ŦĮÉdĸbą¨ĩĩ5Õjĩ`°‘“yô Ŋų`0P¯×SģŨVģŨ)–ˏQĄˆ*>ĪVUĻÛíÆürš‡KcˆŗŲlxƍzëŦ}Jâ€MežšOOOã´Ōt:g.<õÔS1‰Tdŗķ$Õvģ­Á`gœ`[¨¸ÂX3ÎØIr*xŸ{Øäa´›ˆ kžī"gŖ%2/Ö<ûÕyōųųųHŧŧĪÉ-ŠÕjÕT{NÃŲlQ0œ ė¨ ‰ū?•JE4‡’Š{¸MŲÜÜL ëëëzųË_ūׯĢëßũëʕ+ĢØ{åÂ(’áĪ-)Á&z!šm?‰ ōēįžøx¤1uĩĮãEų94°lė°-lâ<ƒdCĀĀ$—ËE2™W˙›$ŒķZ)ĨˇũČMũŖįŪ)™žčģ^°Ą_ūÂHŖT:@Ôܸôį_ēO˙䛞Ö+Š’N6ôk’—ŠyOšzÕ÷é§ŋíLĨô‡ŸŽëũˇfĘn,Ø4Ââ€Ji!I"!—Ë…<Ãúã.)’ÂØd×ÖÖ"Ąl:j{{[’†ž‹°,ĀĮĩéô%cˇļļ RˆčäēicG¯ā°d,3Ā#’*ūÍŧĨ\$:]ūíLTwú*•JčeŗŲl âķĶû ŒvģC˜ÃáôD4ä(Ț¨ŧą|Hķ–$H4øgĖfŗDĸ$ēlúqoo/ĀˇÛ æ9/ÜĶ%Œã^.—Zb–WĄIœĨB ãÄ8Ā0"  vG‡b?ūOß‹E]ŋ~=æÂŅŅQ”UÍįķzøá‡uttįOüy'˜X/}ȸV*•;8Â8ûžoāķŠÂh4Ōņņqô[Ŋ^×p8T§ĶŅh4Ōå˗uõęÕ >pT^n—ą9==œ—yŪ ũ )‚ã9 ´ĩĩ‰ū…BAF#tÜ.OÃÅžāôgŗķ¤Td)ĨR)’kŒŽŽ´ĩĩĨíííÄ~Ŋ&ßb<ĢŅhhww7"Œ5 :}@â, ™C~‰3ğlv.‡cáøĐ/8íĖžãŅ ¯Ž4ĸô*ë›$mˇ÷Čüp˜°Ąe¯dnø>ˇŋŋķßÃÆ“đ͜¸páB8Ž^ĄË#îĢëîģV`ū¸Ø¨%E›Ÿ3WūFŗ 3Ī}ØĀŅ*úƐ`s’æ,‡;Ž!sM4FũŠŗe´ öÃMģrš\h8°Ņ†ŅėToĶŅČOÖô‰•Ō~ķ™^ōũOé“ûõ÷ž\Ôšāy6›)5ØÔ÷‘‘jo9Đß.÷ô‹˙uOჴr…Šî@@ũá˙ą¯ˇqĻÎø\›ÆøÂ”ÁŧI‹#čŲqN`Äčc@&}3 ņäUIQ‚@îziØ%×gcė)+ 8`Ā}n8;ÎåzXƋ9ĀķsOū°yØHąYyō›¸Wx@ē‘ÍfCˇĖ\“ė7›Íb^zb#āÕåËr9X $––Ë嘟Ŧ)>īÎÛr2%Ņ ÚčŦ —%Á–īPˇO.—SãÖH_|r[õžžiwĒbvĻ´¤ö­Š~ņ“ûúūõ††™lâÚ(åŊ&5L/ōΛ/}¨Z@eOv–ģRŠÄįÜü~<Įī6Lä^Ųi‹´8Đ‹ą”`Œ?¯ÜffCD6ĀįŲp3™L”hDzt†dY¤$8§0ĖčGęôÕd2¯fxb,ØČ Ų …HXæ4OšõH2§'įē\ŠP(xu)„WŽōƒĀ¤9˜­T*Y€:€ōJ€ 2€ŒëÖŅVöįg<'Is§j:—ũô ?Øœ¤ĖI˙ߥt"˛d$0"•á÷ÜØh4Šƒr<‚qaü™§$n“|‹œŲ„į1āhĄ}Īd2jĩZšL&q(dĀ$ķ7âā'îAô”6cOąŗDIÜi§p@ˇÛ Öy2™Dí~Ö~ĄPĐááa°ŪŒģkų™ëôĖ6 ’uN˙ĸŠ÷y7NU¯×CމSĪ\ĮqāŊqnaŧ)Üétâ”i$’܃ņdOđ¤PœZžËZ‘sŸ÷ā^Čū°ąž, ÃYĖæ=tÖ rŦ|0*í9bO`=ĀâŗæąaČzœ @æ„si†CIdîôôT<ōČ_@ŦŽį¯U5›{äúĨ_úĨ%ØÔëõ›z¨Ķˆ\ãįāÅõŰđ€v6c?¤‰Œ‡ŋ‡ŧųÃFā G?¤0|‡÷Ā ˛ŅdŗY=įÛÛú_žk¨ė¤ Ÿ˙āž~é锯“™ÚˇëúÃÔ@?øāP=Ü͎ 7ô{ĨđŌé´Î{)}鏊zßīWôåΠ÷˙^]ī{bKOtŗęÜŅCĻRŠDRWq?›N’´/yx›ĒÎŦxß‘v ít:qĀËd2IT@`Ŗƒæĩ˜lã4xÂL&€ĀY\:˙J ö“pˇ‡žiW­V PHį=GÅb1$AԑöŌÎĀqXk6>œĀ ŗļ8°fŒ&ĸL&Ŗvģšlđ8Îô ƒIÉdGÚ 0w§öĐYhĀ,īÆēÁLát1†T=!ú€& q~~ž¨.¸ú<Ŗ’ŒGĄ|܈ėаSŒfÜĮļ^¯ĢZ­ĒÕjéā⠜%æ#ė= ÍmÎ2†žö˙ã|Đ&Ā.ļ‰2€ōÍÍÍ3Ī].@Gį ‚VôėėL§§§ęõz*‹q€@NÛ=ÆN'N ã€#B>Ō,úž~)•JņÛˇo‡´ŽyOŸr&į÷0ÆHô*•JäqøątģŨ -ˆAÆĐf’8š‡K(qüYĪų|>ڊŦ§Âs•ēåž8<8Ë8ûŦÛA€˜ IDATØõ\.§ÃÃØ‹,ČphvÉ#3Ø "e•c "?…ā@"ČágŒāŪ˜ŲlĻÉÉļū`8֟a_īģ:Ņ0$!i=ũĩ5ũķá™^ûÜązūŠūÖYAŋw°Ļs“F„~8×­ã3uûúG°Î„ķ 1c€´Á~ąQ’ˆ6č+X@’û`?ŊOüĖ“9„ ]ˇ4Í×V&÷ˇk1Ŋ^4ī<@)%+“øA8$0„´Į7M's?6s 'ÚywØct¸˜ŋlæÎü˛ŗyų?ķ†'Á7{6kÆĖåbDpš×ú6›MIJ€Æ °l‚ˆ@pCßΤ¤9˛ąą‰ã82’"ÁÕë댐’¤RŠ(ˇČxPæģÂ;V*•˜gŠT*Øîáp¨ããcĩÛíĐģ{›Ã\ĸ_Ŋl!’Xîvģ-IAB oaŽŅ.."Ŧ5īKä Ō‚(ōB Ö/6qŲæcnĶ×D‘ÛĐ8÷ØZr-pJpĈj`ˆœF™ˇĖI¤T8Ŗė88åš\N[[[1'}|;X`ŪÁį5Œ:‘lDˆšRŠ —5ˆķR*•Ôī÷uxx¨ķķsÕëõ°/ŗŲŧ<ņÁÁA”lė÷û‰’ž8||Ēņ$í2Θw€iúŒ5AdĀežôÎ:eū1Öô˙öü%îÃÉÁŒ3–Éd"W [‹Sä¤øRФ—Ŋėe\X]¯UiĘ{ä‚9Eŗ,-Ø@67–މö¤/)ĮÅæą|ԜÅĄpĮ‚Ÿû‰°üÁXų÷ĨEŲ3Ū€F‚ßįwŲlV“ąôÄŋŧ_ŋq;¯TfQVŦP((›Éë_ũūŽŪū… 4ĶwŋōHīÉšō“qâ]üŨ–Ÿá˙÷ūķûģŌīË÷ũË." ū9ŋ<,Īŋ ŽCöRhŪ¯Y;œáĸß˙öîåG˛-;ûʈ¨|Į#õč{[—Mm’BjM5L聆ü?đŸĐT‚ ’ čđذ Áj˛HȔ(˛Q}ģē*+3#ßĪČHRŋ߉[-šĢō…Ēƌ8gŸũXû[ßúÖÚY6Ķg„ĐU¨øÔôįå~Ęä°Ŧ`”ŅŖdˇ—ĮÉģgŠÄü=Āî{ū—ÛãōŽú@Ą•^.“×ī÷ŋ3Κn€ŠLęũUã%ęĐęf›˛ŊËãĸī?õ^Yv”dĘwõq×ūeģá{Ų‘å}YÖđSļؒ`™sŖĒ:Éõl€$XķÄØ,ˇj‘ŒžŸõųå2Ūiy­h'ĮœĪū<>>nå,gŗY{īœUOzņ,§čËë?ûOŋ-¯ŖœßäP™v Ëāæ|Č>cŖŲõ,ą9›Íjoo¯E|ō3šÎSÚomĪyt{{Ûʏz—āŲ.6(×FÎ5ũĨ/Ŧ˛››ÖVí`/ŲL—9áJ›—sBg?ûŽuĄÆ0“Ÿ}Ūå]}O_ĻŨĪÃŲŌžæ;/Īįëķēž™ų/āúŖ?úŖVĸŦǚî”ņ$ÁIļ‘ĮO—-|iÃÂ@IŪ"Íp_šüĒj!nėIÉ š MnV×Ā'ÛÎųPáBšĒjL–˙c•$XbĨ1،pŋ?¨Ãw;õŋŪ\Ô÷[÷Ą˙Ÿ~Ū¯•Ģ-ė›:qŦ(&ģ‚ÁĨ˙LÖ4E0*)Ęœã…ŠÆ’cû…¨ŊëÕÕUë۔Ö0ęŠyŋ¸¸hmÄZaÃ0SƋ4AŪÃ˛ė'ríKö;kĶÁâ/—„ėõžŽgO Ž Õ×ä'Æ>KPŌ‹kĶũũ}csĐĘ9šĄzíĐOÆ-áyÂz4w8_Bô)gđčvI(8$w֞>šŊŊ­étÚō1VVVęä䤓ƒ€iL:§u0´ōĒãņ¸įY˜{æƒõ<&sēŗŗS++‹31Ėߌd5ŖĖQņ>éŦ7s‡D'iĪXNæÍf-?Ŗ‹P`į8aœ•ĒÅIÁÆŅ{“uœœ4ũŊ6p€Øũ´ąąŅtølQFį”ČEŦ¯¯×t:mk5åJˆk;ß×|CHđ\vÔ}7ĮÄ>‘2=÷ÎsNNÆîîn‹ÜŲįįįõęÕĢ6Ī› %w2gŧģ>L9i§ãââĸŗŽs_ą—Ņۓ?!-†ÃaŗWÖ;YĢ÷ĩ†3ĄØšÎĩčäWŅ:÷f'22AÚÄųcČ͒ûƒ?øƒ˙4Xxž~-¯g0˙…\˙ėŸũŗĻĨĨÅē0@Š0ž„ #ÉøĐõ$Œ&ö ŖáP•Ēj†h>Ÿ7Ŋ¤¤Eė…Í‹—wčq96ĨÃ0@ }ķ3˜ĐĒÍäÉßÕģ?_Ģ˙ceV?ųË÷õ[ŋ{_?žŨĒ˙åãfÕāEë3ĩØ÷d{rSˆ0ƒÁ IVh¯õ+ÖŠ×ë5¨ĪIÜĘ aY/īū6TŅ íŅwgæ$`đ’ÕK]ŗÄØĒEMüÔPcÔĒĒT ¨ņļšÛė2Bõ˛,ĮgCĖMלĖy”Ē~K ā*y.Ųsc”aôĖ9¨ĒöNÛŗÍÎ ŌÜ3§9įįį5™Lc‘ĸĮöqt%[Įú{{{ģļļļÚûXė@FߎŽŽZN‚ŋ'“I+sh^YCéôŌß;` ¸%JæˇßIķĐ{ŧxņĸĻĶi;læŲŲYë˙ĒjzpΤ„æĻvrRrmdų^c×ī÷ëÇõūũû6Įš3…íļՑE<99Šķķķæ˜sPä'|œ}Ž/îîöĪÎÎjgg§"Wĩ9ĄZ Fšã–˜ŒĖ˜7%v¨ßī7ļ=KÉŅqēžžŽ—/_6§ĪX‘:yVÕiĀá\[[Ģu’_‘‘ˇÍÍ͖Á<<ƒųĪķz>4ę šd@ ßī7昗cXl26ĻĒëš!āĒ…”%KĄŲ\Ü'CÕĸ 3C“ 1†–ÎVWWëââĸÃŦz×ĒEåÆ;%A6T!QߙĪįĩRũúŋū÷¯ęŋŸ}[˙ã{[;ۏÕģŋ¯ÁÚz̰ M ļMäķ,ŒķhŠÕĻ2 ™’•e S˛á6C˛ ÅÆdCĨ­‚⍍:::jĀ[§ēČ) ęs^č˙LLM§'CīÚj ÜgY/ė{Žyb~q"˛ßũŪøg”č’ōųUŨ(Är’,y YI:yĪ÷szjN­~||üNę”nHHÍd[ë #"úßZå'{­ß8ČĀŠyš€S[´ŸL‰Ķī;€UŽå)ëë띚gŨrŠ22ŸĪëđđ°•ÖŦHR&Č#ķâ‡Ãa'!ˇĒ{ šöīėėtĘžĻ“Æ7gô' œŦŋū3Ÿô)é GĄ×[œÉā Žœ›úLEv’|ĮŊ8ĨƘĨJ›+qzzڈĖēšd›sæ>0˜ķŠŖĢœu'z&i †Ûx`ĩû§œBû’š•ö6Yt9HɈËI0Į´[$ŽÆĄuĨ3é=Ũ3?ãs’QŲgHlØ@Žõūū~ŗlŦ5Š?Dõģ5čŨŊFo=×~ĢRœ€\‹Ī×įy=ƒų/ā’lįHᇇ‡fÔŌäĻžššŲŲāl đ,Æ%3íĢē:ęÔMŌ­VUG÷(˟ōėŸ U8×Fœ%ģ°ÍßûŪ÷ęõë×Õī÷ëũû÷­ĻoÕâÄĶĮĮĮĻIļĄ`jĢĒnoîëg˙įoÕ˙p<¯_üŲc}ŧģŦÕ˙X™‡L…ĮJé“ĶĶĶÆ4Û,l^˜i@ 0‡YĀt\{ŽO&Cc äëcsÖģ§LF­l@HŸ`ŋ°ŒU‹„ÚŦŠĄ­vŽVt04VMäũķ €¨Ę2z€‘Ûdî>ŅR‰;Ņ€_ĩƒƒƒv/`;É r/€g9" =ãņ¸1‡æVPåXŅbë(k˙[gĸnúø=::jũ'’c É)ļŦc-°C& Ię’å qsÎĀÖb´Žƒ÷ūũûĻ…vØU:zœéŲlV>|hM.ÁíímcšÍ}ķõááéür=Î{”vygg§ŪŊ{×ūŸļā&áB‚˜_ȇ´)é`ÃĮtļ­ 9Ú4ëōō˛­mŅÎĩĩĩFj1›››u||ÜrŦsīũđđĐd‹æZæ0-ËÜĖ…ĒĒÖĪōXØ&ķ•d#øâŋúæ›oęå˗õ§ú§ 8÷zOō,åsĪTöĶ=ä%RūōåË6ßĖÍ˟âÔ9œË\f ŧÉĸŊžmzķŸ÷õ æŋ€KBMęåmŪôĢt•™T™€hccŖĻĶi U `œ ŠÉFW-€;Í!b Së+ Œ dŌ´w fvwwëoüŋQí¯ũĩēģģĢ?úŖ?jĪĪ„Ne …bŨßĻJgøĮ˙÷Ŧĸ,iŗrlāØv}aŖÖWĀh‡„_ΐŦgƒÔŨĮ÷8Aʉ!UOŦ’Ōjʂ´@DF%œ¤,Æg>ujN%RXĨŊŊŊæĀ¤Ą×ë5đą\U‡3™ÎąæÔx‡LŪ͢Ō*'˛žd*ĘģģÅáKûûûzáúÃ\3ŋĶY0DŠ´Ãé•@~:Ņúū9+ᕠ9ņōŽÁááa“(áJŌ5ÃŪYDDD `ēŋŋ¯ÃÃÃö]ũL^"ú”%#××׋ĢŊí0ĢëëëVÅsN~Eâ'‹ ŧי¤ųœ l¨vb™IgŗY‹œXÉvKļPÆ×g͝ápØ)ŨiÍ[Ŗ/_žl÷ô}˛8í|ûöm ‹SV‡ÃaË+!ÅĐ&ķr9RsuuÕ‹â<#ŒM:ÆnYōvrrRoŪŧiön6{:xÎ=dŅNN¯×ë8¯l[iüôŅÍÍMŊzõĒęÛoŋmÉí)ŸrĨŦo>Ÿ×ÁÁA“Ü ƒ0Ûãņ¸>~üX/_žlcŦüŠņŊŧŧėŽ•mũúuM&“úëũ¯×d2ŠétZīŪŊĢĶĶĶVɰæ s>|øĐ6r!m™1899ŠápXĢĢĢ-šÕģČ˜N§m> š\œÚŅhTĮĮĮ-Īåųú|¯įŌ”_°ϝjQō*/,ŊK8—a΃v€9ŋ_žlJYÎ ʒ—.+“—Zʁ„WmĘUOŽËëׯëÕĢWõęÕĢNIÃ|'÷Īįg´_e{–û3Áíōģ/÷īōģ˙_ū<]p‚įėK›mŽ™{äøTUâųŒå˙/Ŗū[NnĶnã“ĪÉ PĖį˜SŲgäūdße˙æīĖs3īįīlS–ô<€1Ÿ“ĪČgųÎrŸĨü'Ŗ\Ës ëg;rN}jI¤Ë9WU-)0×LĘļŧ“õ!ÚņŠūį¸-¯gĢOõÁÖÖV§T ųĩ\:/mŠûŠVåœbĻåÂøYŽŅōØHžĮ>6ž™\Ŋ<˙Ŋ×§Ök:šŪÃgUÎŊõļ\ŌP?f Îår­fī“mÉwõ<Īɧėŗ÷ņŗœ¯9îÆ:fėŲy}v4<äD&•z—ŦŸ¯ŧ¨īģ_ÚØėīĒj’6sÜŊķīe›k^Ĩ-åȚGrģhŌĢę;å)ĩiš4éō˜yf’cũ~ŋķ~î™ļÆúЎå=D‰ŌŖ~žģģ۞gũå|Y^ĢŲwËûÛķõy]Ī °_Āõ÷˙ūßoaNė/Y֖×OvBs—ZāĒÅA-˜†Ēj˙WÂreeĨ…Åą˛’ōŌxa‚LŦY&ÕŌb/š‡‡‡V•D06˜é?˙ķ?¯?ų“?ie …ÆąôXOáŅLđ•Čö$TUĶãÚ0–+j`ąElVYõÁĪ1ęY EŸc3ŲF‡ ŽZ %Ú!īÜimm­677[õg&“’Ö¸ŋ{KđĘ÷ĖrkY•AߚwUÕd Ú'Ō@ûéῌâ Õ͟ú›6Û%4îž6LmÅî‘0$;.ÉO?&ƒģ˛˛ŌdMBíú Čs3ņoeeĨ1ļÆŨƟÕQĒų$žWUí߯`6{Ē葊T6I]ŧh@ėžƒÁ #ĄķyķŨŋEFzŊ^c]És”3)KI‹ŧ lšČ–ĀķÆ›yvv֘õápØ$už!M)Žč‹ųBē%yôööéTQ¤´Id/UÕlęNė Ō€WWWĩģģ۞ineBžĩĖéI;)rą\Ō‘ä…ÍX=>>6;âáææĻĻĶi“Ŗ°yˇˇˇí}Í=Q'‰Š„aäŲëŊj"ŨŸž^"-–ûââĸŖĮž'ßyElü›7oÚû‰ĸ`ÕŊ3gĮ;cĖ777[ô85˙æ{žØF?ĪįVU}ũõ×MI.˜Z÷Ė×ÚÜÜė$䟞žÖ/ųËúųĪŪÚ.ī%ז{ড়.ļt0´čĄčÄl6k‰įöų|Ū>wwWŖŅ¨#KKĮ?Ođ>==­Ÿüä'˙QÄķõ˙įë9ö šŌÛgHšĒęČ\ęÕÕÕĻ5elßÍ0.P„ģŋŋ¯ŖŖŖļØTĄüdBi^ĢĒŖ÷ļYHj‡ŠŒ¨Đãŋü—˙˛ūõŋū×õøøXGGGÍÁP&k+|Iæ@Ö2 j2™TUuNÉÔ&áøLˆUņ€ˆĘÚ÷X!NÅ|>o†šS‘ ĐÜ,XžÛÛێF^;õŲ@0 æ“Ûø_\\Ôööv‡0mÎˉpĀ€ĘI`Nĸ1ŸĪ[•˛Ļdŗ~Hš€ŧ }j,I|8bęSG÷ĐŗR‰>æČ¤ézâ<ÕZ°šŌ˜ĶqWUĶ9“(kgî9÷õ'P-Q“T‰< j!ÕZ[[kĩÕ3§CÛ­G’ īE#LæƒÁVĸ0#?ggg ™ ĐsppМos %c˜PũeŽš´×@ Köëúúz;áĶ:FH*Är¯¯¯7ũ|>¯ŖŖŖlrĐR~GNå„Z@[ŸŗWæ–yę2Oô?GA,Zôëëë&šēējRëÉÜÚ́’Dīß"€­ŗĻĶi‡…į,Ģ“vÜ”;đ˛áũūĸWæî°é5{˛ŊŊŨq’Í?vœ­˛Î^ŊzÕrMČÔ2RØë=Õĸßßßoķ‰3âŊĒĒõ3Ûĩģģ[¯^ŊĒüāõģŋûģõ§ú§õūèĶĶĶēŧŧėŦygVĐŲÛŗŽŽŽę˙ø;öŨwdÍ(i™‰ĖyĒŗąfS9\Ú<™LZaŌ›7oj6›ĩr§Y<Ā8˛}úáSŅđįëķšž™ų/āú˙āÔl6kd2Đ6w›`ĄÃj@0Ęp`b8>ƒ7Vä>ëŊlÚÚhŽûƒ>;;këÆxépĨ†^{0U ‰ŽM=Ŗ'ĀFŽŸļZ‡’ęČ3ht4ލįš˛ĩ…ŪŨ{.ŠÃöž™W€—x$cXčJT;¸—hüđđt¸’6™ė†u,ŠÂ.eÛ2bc-ʞÁ1—,ŠĐücNf~Ā™UģŦߌĻY'''íŊTr&$éķųŧI0$īėė4‰Œų, ?Á:ĶG€7ā'™yeeĨũÛ<ŲņGdČĄIڙö\Ôd0´õāY"8ÖPî+WWWm•ĖNÁ›7oę¯ūÕŋÚI@ŋēējļE„a45Gį¯ü•ŋR?úŅę›ožŠËËËÆŽ;Ĩ˜­y||Ŧ‹‹‹Vķ= íííļÎ3B‰ņ]}ž ĢõÃū°~ķ7ŗŽŽŽÚ0p´š™ŧ‡ö˙e6#™Zõp4dR“gøžÍ!ÁZžgÃsڝít1ûúm6›5¨ÕGؐ–x” Ÿã b‘ídŒ¯ŽŽ:ßéõzu||ÜŅdڜąåt”yВņM/YU?iq’Ļoō@–ĄÉ&™'’3ĢĒ}> ā××R&ą€kō}šķĀMāā{FĘ’U5vÆ>Į#YsīėŗÖƒīs—õĶÚÃy֎ų|Ūæu:Đy_mđŨlĢõ—QÎérî6›™š[ Wwr¤å9[U-bäŊ–5А1Ķ_9NœsÉãu}Æ;ę~į”×ė˙ĒEũsÕØūæ€û“†¤ôÅ<õ>>Ÿ‡œ+9U‹5ĻŨd‡y/ŽBF ˝ŒÔh‹ČQŽw‚5ãÄōސ9F"â+öΚ7F’zŊû”‘CmņN$lÚĖų‡­ũ~GDSoė"2sRßĘ [š¸¸øNĨ k_ԇÚáLî{~~Ū’Ąĩ0tÖO:sæ’1HRƒŊŗŽŲ.Ÿ#Ã"OÍHV–Ødã|†CŽŦ2×Ų|gpkÚČįëķģž™ų/āú‡˙đ6Ļ&ĩÔ w&BaŽ ŌB&xžššŠũũũöfÜ0Ĩšb§$âyd9/ĨÔĒĀ%“pyn ÂģYEÆũrÃÄ&:š|d`“yL@IħÎYx[ÄŗâT×Ô0{7ԌĒEhVų9ĀvssŗÃ– 1§ķâßôļ×××m3JæÛ¸ī6=D7”5ÃqxHÚQĀ2k5šŪãD^¤ æ\sA?Û ĖÅd2ÉŧWUĩ11‡ą„æ:0‚Ũ¤C5ßÍė­9‡•‚ĩ5æ´ųhž§ ƒcĖYņĀF‹eŠÕŧĖy&rÖDÎÎÎ:s˛ļT҇´é'ŒãÖÖV“ķįââĸõŋņŗūŌ91GõĀ,YOIZīgęŸņ9}<™LZŽ9€‰LĮá9¤#i’ųwīŐɉ4ЎŗĒJĖAŌ7")åąōr˛\cJ5îīīk2™´yå=HjØssÕüT9(wlžu>ŸĪ›öúėėŦÖ××Û¸K AžÍ{…ĩ&/"m{‘m˛D‰Ų¨Ē'P?™LÚķ...Ú=å¯Ö×××õáÇæÜ6`Ė!ņŽšĻnnnęį?˙yũÅ_üEž5[Ä ķz2ę“ŅˆŨŨŨŽæž=ĪlV›ÍfMnwppМ$}’Q¤õõõ:::ĒŨŨŨļg’˜fd„Í1viLÂčīūŨŋûŸ ĪׯŨõŦ™˙B. ö#“m´6L VUˇū8`Sĩ`<2q•FØFčDC:w!øÔ1Úā„ šp؏ÔyÛ]Ž.ģ036xÄ~žŸŸwØRm:;;k}–ė:C¨’@2v6NuŠõĢãęSûšLwÖËNVg4ĩ>” hL€ĖĒ.ãéūUÕŠ\ÔŲTRĻPUÍų1ljØ" …€+ ‘€œxĖDāņxÜ"€į2nUÕJzOķÄÜs”Ė$sšLĐAʀ9L9Ā€!œœdĀ„íl5æ;GC)ÆŅhÔdX%ķoíFū0÷ŗÂF&ÁVU;áŗĒZ ÃĒjR™ŒäˆĀa@ŋ˙ũī×ååeM§ĶŽÃ  +lĘp8ŦétÚ) ˜N_>f.›ˇ‡‡‡ĩģģ[U Ųįŗ-ú ˇ†1Η——ĩŋŋ_?üá›Tj<7gĖˆH'‚Ž[Ž”yĮ^cëegg§#?;==m' ësŅ‘ÉdŌĘ ŽæĘÎÎN4{™DF¯×k€ųáᡎŽŽęõë×uxxØ•ķķķúíßūíēšši%Yjģ[ŗJÅĘsĘÚūėT–SÎhŪÖÖV#>ö÷÷[Ä4/kceeĨIA;qßI ?==­ũũũÎéčúŒbŋ˛•Īe?˛TŽš€PKIãķõy_Ī`ū ¸˛~¤FŸŗ*ō„ewÔŊĩ=ĸžũöÛNv&k[Ë4É*͐,0ƒÁ joo¯­•Ējãfl1”ž[ĩ8q˜3_U-‰Ym|,äÎÎNĢŊ$Hí6ûdNmoo×ŲŲYGæ@JŖLFš2’=2ŗ˙ööö:§B§ƒšŊŊŨÆØŧˇļĖCöļ×ëÕááa‹ŒZ+UÕ*Õloo7šŽīË×øŊßûŊīHCôģ9įûė:Į‰Â^ĮËŅ‹ÁëëëurrŌŪÍũT-“ˆ[U¤ÖL0fW3ō(.//ëå˗ĩˇˇ×"‚ĢĢĢ-ããĮ°>fŗ§ŧ&NeFD9ŽUÕöŖ‡‡‡:;;Ģ7oŪ4[{uuÕĸŒænæ"‰p¸.•Ėŧ=issŗFŖQËÁȓŲ}įää¤9tĩˇˇ×Î\šŊŊmÄÎÅÅEĮãŊȨ˛ŊķúúēÍÅÃÃÃzž>ßëĖcž’WęõįŦÃģŧŲ8č`§Y&aķüžS(}—J6o›€ļ3ĐN(ŦęÖÆ*cS|žķ!iCĸ]j¸û ö2ÛFrėbūNlä&f|—īmSŅ>÷ĩ €X0} $d_įøėtŅËɸú$Á´Ũæ†IÍy”sXĘūņa)“ĐæĒęĖ7ßĪš—ŸËrÂöæĄŸũǚâĀ‰ß IëĢĒjũ“Î_JFrėŊSj‰Ũ+įęrŪ€5fŧ8‘Ë÷ÎųûŠ÷ŠĒKį~ū¯@RŽßY~k.5Ųæ$¤×d˜ķΧ.‰ˆ"æ|–JĖĸ Čá@eDđŨģwUUiFûÁĄ1ĩ/ĢAé÷ü”íI›öŠŅŋ_uą3žÁ.įS˜ģlWæĻČ3ÉuČÉIkn‰e)Ü,‰č`.9 œžžv֘ûgéZë"į“(*G-IŲĐlöTZ5 $÷įpĻ=3ÖĸÃún>Ÿ7ģåy)ƒ"Šķ^žŸã‰ĨĪö¯¯¯7G3žíÉË;dÄĶŊŧ ÔŪŪ^#Đr¤ŨvY'iĶ–Ÿ›’!ī#:ÃæĮãvė33˙ų_Κų/āúį˙üŸwBx†ĮĮ§úģNĘÃ<Ų 0&’ĶĒė”ûhĀPĻ‘ÍđÃÃC§Ŧ%ƒ ”ŅÁۀ°í€–$uŞ €nooG’ƒuķœ,ī— kVōIÍŗ{Ų@õ„A•=$]ēRĸ`ķHfy6[$āííí5#­xŪͧR]ĩ`āą’Æ”CĸĒĻSՕdÄRZ‚ŊMĻZŌЃĨęõՎ˛ė" §b†>ŦZ8’OUNō<`IÄ%uĨV˙ÂJiÛr¤††WtÄûŦŦŦt4ķ€V&’€qĻÜß{’é˜Ō)W-’bÍ­L$H B–vôŽ" æž12Ŧ‡\~nŽû=QŸÍfŗ:<<ė;rrŌæ *Q>o XÖ&æÚ}Ė5¸õ'[ũôÔø§qîėė4[d^\\´r˜U՘QŌB‰ôÖžīŠ°¤4ŽÜĨĒZ{9˜ãĶĶĶ] S‘ųBägŠëˇŪ[ÕÂáĐĮ"oú˜}ņŸ™IQ`‰ņķų|Ū´ÉîaÃôū~ŽĄT2ŲËFŽM ŠJSƒu1ūYÅÄĪŊģMČÖ‰zƒ~J)Ş|ĨĒ:Z{íņĮ&*rQUų°ŦŊO*ËüŲŦŊKÎ sØYfÜõ'öŨw1ož›c¯Íįė§Ējås.ĮņxÜK‘:k—9ĢŋĶaKįŽ_˙hŋļZC’â|Ã˜ëŖÅ)I‘š?UŨRŦ)ÉH;Ų}ŠsƒÕ¯~–XĖũŦužÎą÷ȈSÎÎ9Æ:רō…"9œB€KÍąšššŠËËËö^Ú ÜommÕîînsöR–k4%6ÚÄņŽĒæ|û Y–5bd)BķŦj!ˇKŠ]ÎīģtŦÍûûûÆ0c‘­7€ß;ZKYõ‡Ŗ¯O:ļÖX,Ûm÷œė÷wÉĢ’ƒÂy`ß<Ã;‹LrĖ89æŧš- Xĩ(ÆāĐ@ėžŸ#_ČčĖųŗŗŗļ99ūrJ8ØI0ˆPJ°e+Įãq›ĢŠā(œžž62+mšÛëõZžr@A,7™Ō%ÕÜô“„Z€Ūy¯^ŊęH¤ĖÅ´SĪ×įy=3ķ_Ā…MÆ2Yo{{ģ167775™L:€d¨sYW < ?ĒgÎČ1–iČ Fę>ĩ/ĩėŒ*ƒœWU“]¤|āîîŽ&“I6īŪŊk†Z Ã@ÛRS‹ĄĒZH‹Ō9Á‚UU‡õÎõ{8˜š•••zųōe 4˙ĀÕŪŪ^ĮąĒÅČ y(ŠžđŒ›MŲÆ‡īõžjÕ+5éŊD8€XŨápØJŊeõ—Ēj•!ôa‚Ÿ,ŗ |Tõc˛ššų.ÜãããÚÛÛkch›Ã˜j÷Õ?ą”Qy.IŽH‘\”RTUcē=[tœLI†ĐHiHl8rú>×ĮÉÉIë‘–ƒ ÔͅĒjšv§jĄ+'­˛Œ§Í_ūH‚LLĻqŊŊŊmkƒK/16įėüžĸ$O€ËhŪŗYĒ–ŧxņĸiáą´$i€Žua^ЏōjĩwķV˙eE' Œ}{||ė”Å–Ĩ3 L’yiˇč’Ddė9;mŊHāÄ^‹RęĶ^o!‹ĮĩŊŊŨN˛ 5ęææĻ“`|ttÔŠœbž{wÕn$æéŨ)CéLĸčööļ­q 4yVڊĢĢĢæ|ŠcFŖvp–š|xx؞GŠ•rcûøøØČŒ‹‹‹ēŊŊ­7oŪ´\ĻĖqâølooˇjFŗŲŦEļŲBķs0x:M–Ŧ‘ŗ$R‡U "K⤇Ãzũúu}øđĄ9mĒŊÛ`0¨ˇoßļŊH˛{&$ßßß×h4j`Ÿ n0´døÖ?Ī×įy=ƒų/āJ™ #™‰U@#ŒQ€ ö'˜,€ĸpšDĸ—/_Öt:mv2XË:à T įfˆŋĒ:Ō Æ“ņ­ĒÔ´1ŠØ›”įqUŨD8`=ûŪŪ^“Ę`­„́a`ÉßÉđ3ôŪCČ=Ų4Il€ Oŋ{yyŲBĮÆMŸ{žj1J KLKđ¯RN†ų¨¤Ü*ë={WÉ[¤ úŠZT11ÉlÍį‹äļLŽtŲõËũũ}qĘÆXÉĒj@#6)‰Ÿ UCāļÜûUUûžįrfiÍŖÍ9Ŋ}J^ŦĨ”rĨ䈎6ķKŧ/6OYēŒÖ­6xļ Û„ęβujŊÉqQ–Ėdj W"œ‚õõõ&Ą‘Î’•Ãá°ļˇˇëāā æķyŊ{÷ŽUÚ2ŋŧ/§˙øø¸Í sëå˗<vúũ~}ûíˇ5ęāā ŲFŌ#c=™LZ[3qí°Ļ80šî0īú„E9]ļÁ¯^Ŋę뎎ˇ­$&'īîv"^‘ĸt*3Š–Ô.É%ŅR2M€Úzô÷ˇß~[ÛÛÛmîõûũz˙ū}[įĒÕ 8l‹hG=ŖÖD:ųÆČŖŅ¨õÉ÷ŋ˙ũēŊŊ­oŋũļž¯Ī÷zķ_ĀĨ´ ‘åōFŖQíîî6-=Ũ­Ė|ĒچZU˛ (‰Ą$Ģž6õ“““ÆH&HÁ†bĄ€ņķķķNU,ËÎÎN}üøąũ,K iäÔ°æÆ ´œŸŸwXL›€û’ļ0úSŒ>€kCĮĀ`Ę6r ÆžŲD$ŧŲ8§Ķi‹6š6m@[˜Û†ÉĖÄŪdkô9ā‘÷aĐfcŠ}ä jŸß-ŗŌ ĒĒڕ hB ‡6לɴ¨įŪ™0ˆ-ĪФ‚ų‚īkáûëXV Éøƒ˛ô[Ž‹ĒÅiĢ€JF€|0™Īį ėebœ6ˆ\ûžģŊŊŨJŪ%ØúVVVZĨŅhÔæžOŲ ›‘uĀEjĖŅĖ5x˙ū}'w@_rrœIEôU&‹ßßß×û÷ī›”DŲD@đđđ°­ũĒjŅkŗ™˛š•••:<ÕeŦ/ėą˛DéD÷2Ą ÆD¯­­Õ›7ojoo¯EÕŪž}[ƒÁ %¨ˇė  ‡_ž€žÔá&{(ĨH¯Ē&AđŲWž-ĄÁĀU-’mŸ*Į•IēŲĻ|L‡ŋ9YŪ.q‚?ĩ}øŦf M™Āë~>—Zčė7õĀSŸ Ø%mãŠĒŽ|Á8.‡ûølž‹ž\žlú†ÁO§$YŨåūסÚđfpȲ\˛PŸJĖ2O˛ĒG2ô Öō=c†ÉķNĀ…ļöUՉ dČåų€GöŅōũsܗû}6›uŪ9׊wSén q “y%yøÔÜ(†Ãa§ú†ĩ’ßÉu“šxmãˆ$_~7s…CBf“’š” ™'ōĒ…TÜ#e͊`ĨķîôNÎh^*÷T-äRîA[Žßûũ~įđ8ãcŽUU[ˇ"0˛ŧOŽMQ6ëÅÜÄ<‹ŦåœÁČ6W=vōŖlŸīyũ~ŋÆãqĮcbŒü<ĀĶĶĶ=zņâEģ§Īę‹OŲ”\¯ė•ĩ&XĩbŗĶ^ųiŒCõ “mĶNXίOŲ06(íĘÅÅEgßĘ\cd‡­°‚(PJĶžå¸ O‰íģģģĩĩĩUŋøÅ/ĒjQëeŽ™ËREÅ2Ōe<ډŋĮĮĮŸÜ㟯Īëzķ_Ā•‹$<5ĐÂãڀhĮ1(XI•˛ōđļi/™ ˜F+ĩ|yP  ¯ZļaũąUՀĸŸ9YQâúúēą4‘ī}ī{ œ1šú Ā÷^ĄĶBŪiccŖUÁĐÚ á<*<ã€eÁÄ­¯¯wØ0 hÉą|ŒĨdT˙Ī…csqqŅÆ3ms­!qZ‚ØŗLēĢZ$ūeâž(…Í[›čimĸú[hĶ-YÖåæÁCNī’Œž÷2‡1Ÿ r´AÅ €ĀiĒé0ęWcdN*1jsĻŗ%Įre¤yžŋ×ļœĮÍáÂ*JēÛŨŨíÔOjA‡ĐšĩN9-XZ@&#ÆÕ30ØYIÅŗÖ××ëãĮMBgLØå9ēæÛųųyíīīˇŒUÕæ ũŋ9IS ŸÍf-÷DT’Ž>´1t/L1˛áį?˙yŗgæ éĄy‹÷{ )į@ŧų’„­ßÁœĮĸ—Ķé´ļˇˇHŋŊŊ­ŗŗŗÚŲŲŠķķķæøĐaĮãV’SĐ3ؑņxÜ*§dôDÛÉŲôŠ÷É} #ŒdkkkMââķ”ds„ƒĪŠāL˜kœ-Ņ9RŽÁ`QÅ8f[9€.YŠHß`0hīë}VWW[”Įøúčä䤑GöJvAôȁPdly—hÕĘĘJíîî֏üãúŅ~TƒÁ ūâ/ūĸūÅŋømlØÛܟ‘ Ų6s9ŖÍšŋž˙žĒžr">åt=_Ÿ×õ æŋ€ (ZÖ<™´JW)!ĖF—€ģ(ŲØß yV-j+3fYząĒZ•@0ĸÅô6>O#Ŧ=ÉÔVU ‰Ú dmmm5ö •,đ%ô.<^U-ŒmŖ‚ũ2[5’ŲlÖÎęõzmŖá8Ž~4u*ŸœĩvėėėÔææfÖ|>o›‡rr.ĀÍæ˜e'I“$ņĻ'Ŧ|}}]GGG-dOۙō s$“qĪĪĪ;āÅ}Í%É­æˆ >ÛėgžäĒDž€ĄT¯j‘sÁYČdaĪČwå„,K¯$XbÃ0Š6ĶLJōáqIlŪ]ÔPæŦåŅíÆL_e%)sĐ;??¯ÉdŌ?įķyôĒxXÛšF€”“`^¤ä 0"I1ŽØkāŧę))qccŖE…Ŧ;åR%p[+uđnX“æP9Ôs$Šæ4?<“Tëôô´9 æ›ÚôÚøōåËĻ;&A򯯬ÉdŌĘ(ęd>ŒŅhTũūâėŦ#‰85îëëë5›íŌ‡Yp¨VÉ+RÆIt‚īęęjÔoũÖoÕüÁÔh4ĒĒĒ_ūō—č•~Š'“IŗKN5ĮŒ‹į”$’ävœŒ<Õ[&ũg¯ØÜÜėäbžžļZôģ2ŽÃá°ž˙ũīGמ‰ŗ„’ģDAÚGzūÁ`P_ũu“gq82?E4Œch˙0f[[[ÍéšžžŽãããīkNI¯×ĢũũũĒĒúßųFRlmmÕŪŪ^›/"I9ßg'$p;÷ ĪO §bC[Âō3 ˙ŧ¯g0˙\É~3€qU7ŧDa-Ķëˇų&{—Ąå /ĶŽbė3€uIŊģ$Ä<ãáķ#Ö˚ ĩû¨Yu°¨Z°ŋÉ6UU§Ô!įģD[Ž%t”vr‰¸iŪŨŲėŠbH–qÄT&ۈÃøfyČĒîá6€2v‡„ØO ũå>6e§IûTĀ8::jŦž +÷Ēž)2*mĸÉ­zb‹€VúaķŽ=# šŠ2“2—Ôœģ_F$’% Zĩ8ŠĀ5§†ÃaæŠËØĻ¤ÆXgūFę¤iŠÍK˛¤dK}œ„ĻWRmUĩšÖUš ËßMÖ?NëĶc-™c@hęŲąī rܗ=0ī؊Úōų|ŪI\œN§ Ēîęõį_#ΐH’5’ŽoÎëp:6"b8ÖÛˇo›žēĒęãĮÕë-’ŋĮãq+ø‹_üĸ%dbv1ʒ Í5úķŲlQg^;;švŪŪŪŽĶĶĶND˙ŠâYŗ´Ū¤'L×ÖÖjŋ~ī÷~¯~ã7~ŖîīīëíÛˇMãom!AôŸËŧáüTU‹|°#Ē!­­­5M¸ž0×õÃúúâDUQ˛››æyĮų|^Ķé´c#ØæŒs[g˙‘_¤¯Ģy:œ ožųĻU‘RîUw¯×kėŋHØt:m{ĸąŅåbŗl‡rä­ü›ķoęˇûˇk0Ôŋ˙÷˙žÚÚã(p˛E%Ü3ɏĖéRמßī×ŅŅQ˰fķ”éįëķģžÁür1nXKbYČĐĶWUKFuƒdĨĒ{ČmlĘS2áR’Ų öÕfœĀ§Ē:ÆËī°j’Í>Ĩ‰ÔÆ`ņų{› E2ŦÉj&€ÍĒ.ŸËūËį'ĀąŲx×t:Č_”Ō$aĐŨ˛mNg$+—,×÷ĪĒA6†Ü”mÖY?Ũī÷@Č1ōūæLmmm5&Ō;›ŪŅŗGŌ Ų¸ãŽũ~xxhLŖwÂcļŒŋΧ6>“ÍÅKÎ,đ+Ī˙ĶĘĘJ+᧯HMH5÷–õū…Ŋ'؁g™œ@cÃąúąuĸî'š„ŨNI–õšÂgSBgœŲˆdß3šØû[G"& Į˜•a2BgžˆœĐhĮË2ˇDN€OëDT%8vE$Ízâ@’¤\]]ĩ„IƒųŸŅvÍ˛Î9’ ¸Ũ[”.í ųŸĢwÜßßoŌ>ə€4B"Ų~ ›ŨļÆ2ú–k0õĖōnÆI_!HvD5ōĀ4åxŨ×úË Š0ČęLö2%0‘@ÖWÎmė´čĮååeĢ œŗEĸ9ĸˇ¤2úŽķc´vsŸcû9īöž/^´Ę6777õķŸ˙ŧģūĖH“ōĐúÂēÉdkķŠĶŽJ’Ŋd9Zū|}~×3˜˙.fU5ãrmôĪ [•Á ĩˇˇ×‘¤ábô€"%‡Ãa§ŧ`ŗŗŗĶҜƒÆ ™ļ`‰vww›ļSœæ;’>œžž6&Đ%´ ŒcCŊ&“&ō€ŊjqȒMĶ&’,lŽ‹ūōŽĒdĐag#@í^ĄĒj'üÚ܁@šė˜pÎôšd^‰eĀĪŨŨ]ííí5F°ĒšžŲĻIĨwvĪ„Yļ3‘2Lä:>>Žápد‡‡‡šN§-dž„ü­úP†ucīēیŽ`벚LØTĩp茧ņĘ*#æ* 3›ÍZ_yŽ *œI,5Fە:ŦgÕĸŽ<6Ô\ ûũ~“VTuKĀræĩ‘ƒ‘šŨŒ™Wú=eLÖDęå{Ŋ^“Ėä!EUŨ:î™Ī‘ŋ×ú'ī3›ÍÚŲ ¤t'''́qų~…"ũ¸ŧŧlrŒŲlÖī1^ÆT´pUWÄ dTõaG€ûÍÍÍV…ÉģĀCã=ŒCF¤3œŖģģ§’ŗ'''íÜÎŽ1Îd\͘'hLÄēPÍåå˗ČžĘ,ũ‡‡‡fã1×lƒī‰Ž­­5-xJÔŧGW˙‰zę“ķķķúę̝ÚÉße˛ŧ܃ķŒ‚gäz´wą cš˛˛Ō*ž O’Î>4PũíˇßÖÛˇo[´äööļį<õzŊz÷î]M&“&kŌ÷ö„ĖĘHôõõu[ Ī@ūķŋžÁüp1.6Ą<(õâô‹É6`ĻĒj‰=Yž ÃĻlejށ„LÜüUŒ@ $r>R+ D<<<´ jãΰ$ÃkC(°…Y̎ĒZÉŗŦncĮV-NĖĨV5šˇQ‚ÉøæfvvvVŖŅ¨%ĸĨŧĀč÷û­m9Ž"˜Õ\ÆHÃ@qLčESE/mƒõ˛ŊŊŨ“Je^ÅW-œ –eåm\\\40‰3ĪVVVZ…‹LØ­ĒĻ™ĩ9k YzvÉŽ IDAT ¯˙’…ÆâĨÔŠßī×h4j:a Œû ¸sNaF‘8ÎtīæwÕĢėū€DjŌķÔÚĶų|Ū( øl6kIÃU ´ĐØĢė„aÆô}AVąēē8|ŒCĨDb–yĔzßĒÅš2vŪdD‰XīžŗŗĶŅČ[~–k…ũ ˙6ĮŦŖdl92ž{{[Ķ鴕íŦĒÚßßorŗŖŖŖ6÷s-r€Í ÷3§æķyc‹­}ā h5æ/_žlųB€*éé›û"Eü˙đđ°ūŨŋûwõæÍ›ö}kDß}üøąNNNęûß˙~­ŦŦ4š[JĐĒĨeûũ~ÔëׯĢßĒôÃÉ÷ûŲė)¯!ŖžĒÖøÃaFč{ķÖE–ĸß´{}}ŊsĻ…9"šÃ‰%úđáC˨Ēáō>š8 €?0ΆZC"Ĩv;==mkFš5=ŸĪ[iÉĢĢĢ–īd^Ėfŗ:::jķ×sØ8å*3‹Ąį(öûũÎaRöVP¤§*eUĪ×įwõūķyž~Ũ/‹xšĸ‹’|$äjÃađ|3Ĉē'€â*Ü3Ÿ›Ō€đÜÚÚęčgŗÉâ1ėšį…MÔŪ{ūŸ‡ IøËŸ'ƒũ™ī‘ũĸ2ƒûųŧv.×{`•33ÛŋÜG؟Ū+ģO=+˙ŸīDåŨs|ķō}ãē<—ōyĨž5åEËߡņč{ /˙7?Í-sŦ+û<īŖ}Ÿ’eåĪ–įßíím‡Î{eß|ęž9Į–/ë#sŧ‡žËu›W¤Ē‹í™Ÿz¯|.ųŅō•ëZW>ãSīi<˛¤jV+ņėėß9==mĪa‹€7íÎīį,é—WūL[ÜO˙šĮååežžļļx˙œ7š>´ÍjJc–ûĖZ°ŽōúÔ¸‡#3ߡn8QY•+íQ:ÔUÕvī”sØŊŨŸĶâ€ĒtZ˛OrŪëœOúTŋæúąŽ}ƚËu—Å čīĶŽZīŲO9n~ĪšJ;h ŲŠ~ŋ_{{{mŪæ=Ōî/í^ž—úéôô´ĩ3kž;O!+qyהzũ™s%įVî[Žåqyž>ŋĢ˙‡ø‡īíÛˇõûŋ˙û˙ĩÛō|ũēūé?ũ§M‚˛œ<‰=Ä>ĐæaTąœQŦŊ¯~˛ô™4‹ ÎÍ+’e1ąBëëëđ?Î3Ēz÷ÔâB¯ËĨ+…Ą…ymV™4ÔĘ蝞žvj%géĮÉdŌĸ d4F2ģBå ą> M{­ ;–ŋj‘øWUĢ+Ģ ƒN­káūĒERoV$ŅŽL^ŗIaŦ—“ähŠÍ ‘ķÂ8›/@87KúQ˛…t°<7ĢԘkØŨœŪ)e˜6īa.ŠĘ$++ʤfŗ‹Æv0XČ3ôˇö#z`‘%ųĨŽ6Kˇ<§ÁˆB`Ŋ% cÔs]ģw‚æ|^ÕB: ˛jk[cŲNkH_ŧŊŊŨq*Í!ķ¨ĩ KŅ/"bN^ösrrĪ$ÕI;”lģb&cw­míIŨŋŧ īWĩH†ĪäBr3‰Ô$æ§ąOgL°é"MģģģY'‹0‡DEą­ėĪp8lö[ž€1ßÛÛĢ7oŪÔp8l`ظĘo˛&ɲ$;+6pwwW5™LÚáOY=˘HĒL=ļq˜­ÅÉdŌl,[—úsv—%ˈ­ČV:"l*ģĪlŊyK?n­JHÎ*HÆČžķâŋV-†s ”NÁÍÍMĢBcŋŅ>m‡5›LÔ3Œ…Ÿy”9 ˧°÷ûũņŌĮōgŌ“Fdũũ­ŋõˇ~%Nxž~}¯Ÿūô§Ī`ūK¸ūŅ?úG čeuaM†¸¤2ž,Û°QŲ$€•ÜĐ$ŗõûũ&CIvÖĻdM-30>›Íp¸”!áÔîîîvôY˛’Ąō‡mSŌ5N›áö˛žÅũ<Ÿ#P` +2ˆ aKŪK§&Kąq˛‚ æ:m’Œ•ö/K˛ĒĒ­EßåxWŽŽõ` Ē–6ž%‘7ĢđXÛÆc`žą$ZË9$úæęęĒ&“I[_æ`Vč1.Ū-į작ÆũââĸsÂōh4ęŦvHųËÔģgBãrÂĢõ‘ĨzŗâPF2"#ŖŅ¨^ŋ~];;;ĩŋŋßJ‡ŽŽ.N@õüĢĢĢŪ'“I“kd%'ķķŋ§K͇ĩĩĩ:>>n’Dļ…Cäšë䖤"¤z’{Éķė)ˆ%6Hâ2›gc_=C{Îl6kī16`œŖ‹‹‹öY;9Ŗ.Šöpļ\Ų>ķ#”üŲōé”BÁƒÁĶ š’MmŽËL>V(ęhŽwvv:ėĸ1āX&đ4ī—žL°{gՎĒúNU"㜕T˧dˇĒĒĩՎ­š/jŒ=`æķŖ āŨ˜Įãö,IÅ.uã}Įs9sæ{PĐë“ëëëÚÜÜlā0#)Iæ1û#Ä6d”hY*• DށūĸQ6/Ō10EÍR]UíQ ßKIHF‡č‘3˛•oŒŋ<™œO)O˙!˛æ}÷ööZd$+8ą+Ā! oŧ×ÖÖZ~‚žĀBįüņ˙›››F4ĐÔ¸ëëëĩģģ[ûûû•įĖÆæôééiįŧΰõYyŒm><<Ŧ~ŋß9…ˇĒ:ī=™LZŸ‹f~~]}õęUËeåÉąTåf¸ĖAÚq`w{{ģ>|øĐōwŸņs÷ô'+"Ĩt…}ā¸ŅÄkĢudNsN+ĐFe-Sæ¤Ė ļa}}ŊŽŽŽycNTUs8ÍMŅ sųC’cžÜŪŪļø™zž>ßëĖÖÍeĶHfējžrãatĢĒUĪđš°ôŪšy%ķÄČcņ×ųídā0^ÉĘŧ|ų˛UQņ]’Œ~UĩÍJ{1:$#ØwŦ†3CāØn@§D$Luʙ2ŦėŌ–dī0×)wXNrĨņtĖ9Đm“ÃâbŠ|; đ7äœĩĒ…4 #•ĖnQĀĘFč]ĖĪģŧŧė0­Ëų’J66#,™ßcŲ€âŒeĸ'&7K(Ũ@.0`#įė“ú/Ë?@dVB˛†´É&í÷ú3פ௖[éXs†ķgÆ)ĨY&2`~˜—@|ĘßŧWڇŒ¨ bNsČÜ#÷O š•ō&QíÔŲ7)sĘkSjæ™úGŨ+ŽĨvbVSÖd>z/ĀŽÉ$YöĐZĶ/)‘čõz œ/KērÎY§ŖŅ¨“ß‚,ŋëĖW‚>˛†N98` Ē:Ū<}ĢMÃA"ĄÂrK6}@šĒÚg$EŨtˆŒ$ļ†ÍČUÕ)!¨î7YÎÆÆF3f6=`åūūž^Ö/ˉ¸++Ou˛ONNZɡŨŨŨV;HāTx'Ā}kkĢ%ĐÚ WWW[K` ĒZb%˘( &s€BŸOĻŨfžzl€\ũî#Šģž \Æ á¸a*S×­üš VũéŗŗŗÎ/j¯×Ģŗŗŗ6?€č•••Ļëĩ eČ?Ĩ,ji›Ģ@ÛxoúmmnØ@§!H9# ”­ũ,;čwœx˛1ũĄŋ9ÉV†™3Bķ äĨs(.'Ĩoķžã˜ Æ5~ÆØzH‰›Bâ”ũzww×q s-š‡ü“dļÉžŒ$F6 ãɉã\ąžå}E÷ööš\Æ÷­¯ÉdŌ$WHKög6›uæųvO@ûũû÷ûî|útßõ÷p8Ŧ‹‹‹&o˛VÍķŲXĐŅ“ČdÂú‹/j45g_¤$ËVš3š>tdpä-"2ŪCqëb<ˇü!‰§įįį-`Ÿą)`nØ'$🜜trÁØû’s0ŽŽŽęå˗-šĒęõë×5› i<×øÃšÍfí3÷÷÷uxxØæg“=›Íf­,ë`đt*,ûÎy|ž>ĪëĖV'uĨU IPœU0’´iWuk'gĸęÃÃÃCĢqœ ŧī${~~ی•zwwˇi-1ĪX :r ˜{/ožÂž60ėÃÃCc¤üƒ˜āÛ´3îØ/@euuĩ\¤pz82™S Ũ6`Ņũæ,U–‰gUÕÍlšę ͰN§ĶN’×ÍÍMÛ Ķš†’ar@ĀčpÂĀŪŧ 0ĒZT ʲ‘ÆKŋ{oßĶ˙N°5NéÉÚņŠ)Õˇ)ßʨ”öĨcąģģÛ†yŧ’zŲäéŽZä e(ŲĒEIŊÔÖëkŸ9kmĘÁđŠ"d´ƒķMōæŊ8 @€Zæž§_9ɀŊ~0Yy${’—9â`ąĒEފąɒTI&Â.øĮŖī]ô‰~āt™OÖĮFģŧ“ęQŦõZõÉ6ô#š]JįRr†ŧ`ĪŌņ3žl)GŲŗ°ßÚ@įšmĀÕw<(õė<Ô(Ųh}% §~=§ķãĮĖāŧ`ŠĶa7§Ķi“Á‰(nmmÕõõuûF:ÕVˇĻ­ų0ŸĪë›ožiI°r€D8Ãk¯×kl7â`6[œ§ĀIæđqFŦcļ`86bÁĪôi˛đÖFÚ0ãål|.›čųŪÉüN<;ˁ˛’äø“?ų“úŲĪ~ֈ4ŅLJ2ĄĒE9Yö†oo¯ĻĶi[Ī×į{=ƒų/ā’l…Uļ9ÚĐRj“ ŠáZwÛ,>eĢĒ%y%˜I)I&ŦUukzͰú]˛6ĐÆÁ˜fų.ˆļ§†ĶũĶHC­ŠKdLĢĒ# ŠĒīŧŋ’`Ўč@Õrß,ŋĶgūŸU@ôĄjä@IžĢŊô—îmOF>?8ø?–ŅæQĩ`w“ 7ŲOų܌ędN÷uOėĄ~ĘΧ$⿜¤ÔÄfhū›Ŗ’Öxš\ŲNŋËū÷N>ë=s^™Ãî‹ĩĖ’ĸŪ+ßĶ}ržä˙1’ž#‘/׎ߧŧ*Ãō}ķũŨ7ۑ9÷Č(]FV蝗蔪dDhŲ†|ĒmË?cÃ0ũŋĘåĪåœgŽÔûįXpú8ÍŲOËÎDÖųN†tmm­1ģ>—ō ĪãH™_æNžGÖßO2 û)ßÅžPĩ’Ũšw “ČéKĸČ%šfú÷ËųžķĘ8˛įįįį)–y’yUÕ°ōû–$žōžĖŸÚÚÚĒ­­­z÷î]Û+íyq¸ƒAĮã–äíbsĒĒUaKÖ?û܅dÉ1í÷ûíä\co^-Ÿũ0 šƒ-ĒÉ&eģrŊ?_Ÿßõ æŋ€K#×R†Ē8—°cƒÅJ$˛ņ ƒ:<<ŦÉdŌXII˜FK F*eUÕĀ}˛^žÔdfߐØĀČēŪŗŲŦLЏę+ā˜§ÄH?cú9ĪÁāIâ!ąP"ž ¨ÃŽeH_y?‰ĩ™p玎×ūU{ä$ŸÜF’ŸÔžØ*jВ'˜ŗQ*ë—ĩ™ąŦ››› l§ūßá?™×áwŪđn÷÷ööv;Ŧ Ø$1đ™LĖLi0œāŠ#›gp:9Ö´šž zœ›f–ôŲŲYwÖŗšFËΊ"?J°%ĄŌœ•ĐHĸ&Úãū)å#kJĮ›ŠĒæL.ŗŧÉJ˛æ,ûĮ6÷ņt,ô‘wōī›››‡u~~Ū€Ši Cž<ĩíÍoúôˁxxxh…Ēžda_}õUû=P,Út||ÜĀ%‡˜ ¯ęIžæ}”´G,W—Į­ŧķ8ŌqRa>Ÿ×ˇß~ÛŪ‹ŽŸ-H:į´„bķS”d6›ÕņņqŗwykīÎ9ŨŨŨm‰ĘXk%„Ųú{ûrÅēuxâááa}ī{ßkë}oo¯ŲĪíííļĮɓ’"ĪéÇít×­­­:99iŸ—‡2 :ķįėėŦĩΚVŊ c=°ųö+ˆ+÷¨Lrž>ŋëĖ!ˇ˛hĀ$]1í6ĨjĄŠĨõķŲŦŅĖāŒ}UW>Á°13F؎Ŧ˰[ |ĢĒ1F|9yq9›I’6ŊĮFÂI@Õĸv6pį0  ûĨ$:fBP…%õžú; ŽŖŌ}Ž#$ô';\ÕÕs ŒßōFPĩÛ¸§“%‰-÷1&™€•õ›ŗžw&q’!`Ô|Îō “ey1҉‡y,Ŋ÷IÉG5ķljēúßķTYSāMÔ4ĻĀo&>gâxU5GxĘę%œĖeÎ ķ7eÉ‹ŽJ™ØîgúÕ=Ũ¨ōoė´9$ēĸ¯9ų}˙åŌ6}hŨ`r­ R6ˆƒÍx6y“5č-PŠMĪ„Øt(2×Gd,%=c–9ŸÃŦÉûûûf[T÷ŅG´ņœ ŅCļbųÔWcj-͏[ŋƒÁS3ũ´ņeŋFãĩ˛˛Ō@ĢwįdˇĘ5敞đ3‘ķųūūž9)úÜ|šŊŊ­ŗŗŗÆXs ąũWWWÍI7Ž"ƒÕ3N>; ÚéŪYÚR”'īuzzÚoīĸ˙gŗEq…åč˛@äq>Ÿ7Y&;T§ ąn­ÁÔĮמ•Q`÷åxˆącYtšbŸĖ}÷āI<=ËĪŦŖįëķŊžÁüpŲ…3|UÂ` įĻūŅF˜,™;F[ĒÚÁ˛5ŲęĒjL &¯×ëĩD>fmm­1www?Cī°4$Œ˜—ĒÅ!2XFėwę^sCÃÔÚ{vvÖ6›dĩîīīįÄXŌ¤dÕ›šN§ŸÔgbØ´Ų{‰l<<<ÔÉÉIl ´Vl'FŪ&™'_ŌįcE9:˜4 æųųyžžļÍߜЗsũ@rĄßǤa&jë'īfžnnnļԌæŦh€>JíļÄ?åærŒą,Į™˛“\7æ&-6Ā.™:ģ…šąÅĀ~ĀDstĒĒŋšŽ}ŒĒŽN;sRŦw–§$ģ€3ųUōļ5gCũÕäwwwÛ\Q˛4ĨyP[™Ë`‚ž‡‡‡Æ›ŋÖ7 9§]ä)°õĄŸ™›î—‘>’˛¸ĶĶĶY4Ÿ‘ ĀĒwĐ^ā6íJ2ŨÕųH}ĩ5ĨÎÎÎ:š´Q9G666ę?øAĮãÚßßoĀŌI{"FDČβ•’A jˇwÅTīīīWÕĸĸé!›g>ėííuĀŲËËË&šÍf5N[$L?r„€tciŦ|–?›Í#îũŲ9‡zŊ§œ%ķÉÅVxŽgŸŸˇäÚL6Ļd‘YĮ˜z ēė¨ĩvzzZŗŲŦ~ųË_v(sÄ8Ķø;…—swttÔl¸īZißĒĒ‘RœÕüŨķõų]Ī`ū ¸°”2īĪÎÎÚ&•ŅÂV30˜<Š”´!“š°Õ´Ú6&›ę2“Ü%Ŗˆ ŧ¸¸¨~ŋ_ÛÛۍõÁŧ¤,Xąi&­Ķ鴑ėŌķõų^ĪŖû\6ƒÕÄŦą-ŦˆŅ===máo†ČfŖÎqÕĸ>ą ĀÆĨ4CšŸ¤”úž,ŋÕī/jōŌEsTVVVęüüŧ…HE lŽËåĀėļTßTUK&ĸŅĩ ¨˛Ā!ēąOkkk-ÔĢ ôü üŨŗ”އį]‚Čę6ތ6ånnn6Ų 0ĒĖ ¤Mž•ÔrDF2Ũd2i÷¤ æœéߝBĖ1ũ‡™7¯Rū rĄMųoNÁ2#‹ųLvViŧĒEÄ#§]œIŅĪɈŒël›ŖBå{{{íū™Ã¸Yé'%!Yõ$Áģ9†ÔF3Gđā>>î°÷IʘŗŠ"jáŗģĀ- IDATg”ŠãČvÉÁ2—TĐálˁĘdq6xuuĩ#yĄ[׏"6ö‹ápX'''MĩŗŗĶž;Ÿ?å}°9~†¸ÂÆŗÁÃá°ETHāô‰ų Ô§“퓓“ēŧŧŦápØ÷ÁÁA[æ öžĶ'úgüėĮ~w}}]ãņ¸ŲdċšŸrÉįëķžžã._Āĩ,ß`Ėũ<ĢŊ0P@E†%t  øL–ĢĒNnĀÜfjƒpŋdԖË3fåĒEø8˙Ôģz÷LF• BģõAžwļMû€ĸLâ]ž2‰+û.5U  ’÷QŖ8J]<‡Áį2œãōПåßú=Į.YíåÚĘËĮž1ŋęyËķ0Îöúž{æŧYžgŲ÷é&‹ģÜ}˜€ÅŦ‚”ŒZžwÖév‘`øžsųų9ˇsŨ,ƒ"ī—ëošSŌÄŠHŠeÔwYUÉå=–īŸŋŠķĘąÎwÉu›ŸÍßeÅå~üÔ/ß×˙///[ä%û#ī“ļhš­ųËķ?ÛågÉwųUīm]äûä:YžūzzÚIŧĪ>áLe"č`0hˇlOÚņ”‹øYŽUķ;m“į~ęü‰œ§Úá3Ë×r9Vc•Žĸöf˙dŋ­¯¯ˇƒŧ–Į1?PhaųžŽ\;ËûŸ_\\´jWÆ!ûDģIũŠĒ‘”vŨÜtˆÖōü5ßôSÚ{ũˇl3Ķé÷ŨķŲlÖúņōō˛õųķõų^ũ?üÃ?ü{oßž­ß˙ũß˙¯Ũ–įëŋĐõOūÉ?é$Ž=>>ļ°vÕBî@æ!3›Oéô;É’ĒƒdÉÆdÛsōĪ'ąW`ÄČH˛ĩh@nÂŗĒĒ¤,S!a,5¯—„ÃeIO‚,´6`—ą*Y×Üŗ…ŦɆJÚôdųsŗLCގļļZ3ûđđĐŠbÃ!FMŽa ŌYɰ8°œ˛ĪĮbbĩ_ÉĮŦ(SUmsôģíííīčBˆK Åôbš0á˜B!}Úû|¯`$eÆÜ|ÍčTʍD›lėúM{ķĸd`Ū[ĸš פŖŒ…ua÷mč¤YË ÍÚ#™Uãíųōô?FJJcNc$3Z‡‰Î„Ņ^īé ĸLĮT’Q˜Ū[ԃ“‘‚\+æP–g%ģâ ßÜÜ4YŠņŅ? vŒ;ųŠq–x-á6×Ár´ō]ō+cíŨŗ˛Š™˜9•ļ,GÉ0ģžĪ>Õūū~­ŽŽÖīüÎīÔÎÎNK:í÷ûmosėŋ­Čj666j<׿æfÕh4j}ĮČÄí\[[̟ũėgM Î֊ÎY7jŧSų%šFąāu||ÜėŸŌ•J1N&“珏¨“““–WEŠC[ĪĻ”RžPJ”ČÅČZŽŽŽÚšH‡ŧßīˇqĒZ丰 ž'ÂĒBû˜"2ĄŸŦęúúē9pös,į†{č+ãaM‰x§M"ÅTUHD$Ŗˆ?ųÉOū3háųúuŧ~ú͟>Ëlž„KōN2<6ß<=“ĸr3ĒSBMøT¨¨ĒĒŽ3čޟ7 HæãŊ„`ŲåJ@Ję ]Y;>CÖʄiPÙS:wl›6k‡šÉ4­ãņ¸Ar¤ĒjúFNJ2g (l'''5Zā•c“EU÷čv`Ō&q&šŒĮšã°jžN§-ōĸũ˲$†dŧ°K™4˜úhĪ$͋Œ TU'4OĪĢīSĸcnŲđ3ąT„BNĀũũ}“‰åÜįŲôķ šL*VÅĸjQ‘ĖČŗV€}´gU–Ôb/3ÃúHō]eŋ7ūŪ“Ŗ <č+÷R"ą×ë5ŋ~poN@FØmÕ^ãį äšāDsRDĀŅwéĨnoŽWęâŲ<ãeœ´Iwy79† ŧĒŌ­|&įŸIŠOķ|6›ĩŧŸĖu!]aO­1å,wvvšÃIÃ͑4īSs•cā]^^ÖÛˇokoo¯­õģģģÆ&;Ā(Ë~:-ÛÜ8::ęŦ=öÅ{Ļt$įŒįX׃Á ô}qqҤbĘØÎfŗÚßßoëĀ\Î9TU"Č {ÆãqM&“ēŧŧėČŪ”¯LIĨw Įä({Îųųy}õÕWMî"Į˚z||Ŧ?6ānLØ&ũ1Û÷ģ,:ĄŊ< Üe9Y[[[ų‘ƒ¯vvvj<×t:íØƒįëķŧžÁüpex”áj˛Mq°‰‡æĒ'@CWš‰§§§™ Í@Ēęĸę #Í(×U Bˆћ„zô˛Á`Đ6§‡‡‡ĻąÅČc0Īyâáããc ‡Ã\RC[ĩ¨¯ßzŊ^ĶŖ ÍęíYYYŠņxÜ6°Ē§įä䤺!Š1 D؀ûũ~}øđĄÖÖÖځ'6šs(čN’ņw€g3I7í]1wjJc¸Ēˇņļá:ĮĄ]˜äBŌ…įįį ĀUUMU‹MĪ$ßÁüMį ;ẜN'‡°yũúu›ŸĀ }*ļА˜œ%ÍĨe}{2ũœĀd—ũÎÜö´xÄD{‡Čxσąė$O VN¨vV=%ybSĶĪyĀ"æ}­Įd;Íā æ˜$Đļõ6Ē ãŲķ'ķnŒ…čBÎ÷tô3ĸ…í7ƜÆtö€đ<ÔČĪ3ęaLWÁ™bsL5įP´áööļՐ÷ ã)x6›ĩƒĐÎĪĪkŋöööę̝žj‡Ļ!ZFŖQsôĪÎÎ:N-§ØŋņxÜķéŋõÕW_ĩššģģ[———­tå|>¯¯ŋūēa2īÖ)9›ÍšŨEJŲ §{,ĀFĪfŗV­Kŋœœ´ PŦRͲ”ÉZ–œ%Šßŋ_ëëëí\“´ŨœOķ…šL&ÍļKNļūnooëãĮÍšcŋ9åîeĖ)ķŌgwwwõ›ŋų› 뛇ÛÛÛurrR;;;M#ŸN’ĩˇģģ[­AU}' ø|}~×3˜˙.l íú”F<‚l¸ ¸’qcŦö垑~gHĻÕ3É>šÅF0ūؗ”‰T-ÆČcÃĩO¨˜KNéĒ'p~~Ū€g¯×ëİĻnW›˛/%Pų™-Wj`ęŗ6ˇeļigg§ą2XËÜRĸC. OīîîØNpfnˆPd(ŲØĐ 'Ŗmsļ!cw—ĢÕ?`ÍEį œ›'æ)‘>Ččį/5ûú1Á>ö22ΒųˆO6\ĩHF6˙ô@šíāøzŽš]ĩpr]¤Ķ˜R°|÷” -'Ŗöz‹šÕËũ˜Ōœ|fV:J†0#i’˙ûo.™›úÖûëC ZŸĨŒĀx! ĖŒNč ĪŅī)×É?9Ī͟}ŪΜ0īôËōZąÖ8žŖ yet(×å9ĢMžå)Ãō9"”ÖĻļæŧw20[Jū„ČQHy‚íFr°įîERTę3ķ9Į>‹úp æķyíėė´īøÛ6OE&Œŋ5ęâČŲ'ØTcœIĖÖûōzĶÖģģģ:99iĈšõH2œŒä™"i–įĄ= ÷Cļ“#|qqŅS˛7R#Q_fļŧŖßė°=›tėS’ŌįëķģžÁüp%]fē.†&i°ĸęØãB˜´€@œĘ@ßįfŅëõ:l*y€+Y†4FYG€”!Ë$fˆ:€?KpdS¤9ÅÔŦ¯¯wjĨ8J‡)Û˜T-ß\žá ­ sZUļÃ%Š+k9{5§Į†!ŋ@tۘī/ņ̍os#Jƒ}ôh}U1Ęę#6ģ•••‚ąR4ļÚjŗī÷û­ ¨@ÖsÎÃR677čM'(Ī>00aŪÁFĪAqŌ/^ÔÅÅEmooˇ“'ĩ¨Đg ā–Ÿĩę‰Å}ķæMKlĻY6ÆQeŌĄįšÃO%ëĘõJ~3[?e=˙”"Îįķ&­Ķns]x•E5ÎUÕlæããcĢë?›ÍZ.€9‹€ØŨŨ­W¯^ĩį=<<ÔááaõzOų ÖËååeM§ĶÖFļĖ¤ĢY6Ë|f䁥]ŪMëkëI"xˇšdœĖŽi'`‹¨QåÅ|Ŋŋŋoī“ ]%ĻÕÕÕ:::樎ŋô—ūRŨßßׇjssŗUŊōˆžLļWšĮ\QB4•ķķķšN§MĒjŪ8QVUQ֌€“ŠUU+é›?O{A’iūˆ ’ũ!îČ3:õ|}ž×3˜˙.úo›qJ5R˙Úī÷›æšFL ŌKמG6CēÁ°ę™ŧp’ÆTũ?ėŨkˆĨkvöU÷Ž{íĒžĪœŖ9ƒ°2DFl"Yņedi,É8 Û2Šl“ĪLB NHЗ@ų˜68"r46Ævˆ`,d¤Œ%ENĀF JĖhŌ3ęĶ—ĒŽĒ]—ŽËŽĒ|¨ķ[ûŋ÷9ÂäŖģë…ĻģĢö~ßį}.ëų¯˙ú¯õŒÃÔÉæĻęoˌQr–gŲ|r °˛ķ`īW5Ö¯O'- 3žÉŒbƒõ/f|~~žĢ5¤ŦeZĶĀ\_ëF.O˛§$÷3“E–ØEĒ’`{t}=YosGכ@9YS,÷õõuĪ=sH;ČŧËüü|Nråķö÷÷'Ęįég Xˆ8Ķ7‡‡‡Í¤)eÉqRÆhq@–yhcMŸųˇH@2¨„ģÔ3WU—šķy÷ ҘŸŸŸČYP&ÖÁĖWYbã9??>ũԘ%#ėp$ āúúzÂų\[[ë6+‹šLŠĪåaQĮĮĮqv" ˇæŦÄ\Ā›ŦKŋKôSZ 1oYĐw¤Xfí(Û|7āĪ:ˇ†ĩ/åml ļÖzÂŦ&ÃN*Q5>lˆąÎŌÉØŪŪî„līĩžž^¯^Ŋęļ‰ÖiûRU}đ–w0G<ķüüļÎüÜÜ\­¯¯wÉ\k1Û#Ÿ„Ŋ"°>ķ9œ0Čėėl^sĪš yÚ2‡ŠũÃĀg‚*GXˇ>ėI>—DûöāÁƒ–÷ĨĨĨúđÃÛqUŸ“bŊ?}ú´ęå˗-]YYé1đÜÕÕ՞+/_žlgøáÇ-Kål9 Æ`{{ģߏ¤ÉÜLä, {›œkėîz7¯;0˙ž]˜‡d™ĒƛH~ŽĒšId\†Õw1¸ŒjV𨚠…ĪÍÍõŸĒ1۞úyĪúsr™l#`–e×ü`ņlmÎj;)ÃHtjÎj˙Ī ST5Ž,čĢĒqb[2ŖÉ'HO)ƒžĐ~ė– 4ësFŲį.ŸÍ~õN9l„ÚęgÃá°?g܄ŗ3Š3=Ī'šs&K Ē†„9ôŲ”[`R%}Ų¨2bĄŨ)gŽįááá„Lëũī|gbŪdõ *FŽ ĪĘ Ú!ÂẟDQ’í˙Ŧō}9WŒIŽg:Ŧ)}Ë+7˙įøæûdRę´Ŗ ŧaĶ>w…l­wM;ãũ˛]9Ė“Ēąŗ˜ãL¸ÎöaB­ũšĖûsIX˛ĸTÚ1U–ĒÆ$;”mNĸ!Ģ dûõaίįcyv@öÛA?ž%]9ŗŖĒÛ‰<ã û[ōúp8lСŧŧÜy@Y Åå˙ĸļæ\Kĸ˜XôüyŽaÚŦiI'Ūwũ|špņŒ\o˜õœŸžëū­Mú$‰|wųOÖE&Ŗ›Û™ŋÄ¨ĒŽčz^ÎÛŨ֝¤ž#úôYäŠwÉö¤ã§}w×ģ{Ũų÷āR⎁;==­ÍÍÍžkJC”ĄQLcŠ4‚”Ä7]BÃN(;fã°ą žžž6SŽŠ÷üi°ęž@n&&P*ÆlooO03Uc&Sh_ÁĻčyXl÷e¤ąŖŠ9žŧŧėĐ7cU5Ŗzɍ‰°¸ÎëëëÚØØč>&lĘ^}L흤ûFãĶzmd7ęúúz5ˆŖ§Õ˙œÚL}(Ŧų¤MUÕō§ŽbĀ„Īߙ™™ IÔöövíîî6ģ†!v<6ļqÅHšįXfŒ9–€ŗŲ~ã§ŋņ˙{mũĢx}ųørUUįQT6kƒœw‘‘ @=+ēH°ŦĒfßՈ'õč8T˜lƒ|7ŸÔ>cÖÍ˙ĩĩĩŽ.įiQ–dĢIے9vŋŦŪ”īa-‹¨yo2= ,+]iŸHe&.[ãúÂ;fqápØUĒ”ž´V€ÜšššļĪ@wētÆrĻƒŋēēڕąDø8ĨŊÃá°ĮLŋuŲbejõ {Lž˛ō÷­Ē&iDLČīČJØdJ/­ųŒĸ${ĪųIplÎ]]]ÕŪŪ^ÍÎÎÖÎÎNWgc#žũío׿æf˙ūÕĢWõøņã ĒĒj{{{"‘šƒ#‚ČvĘÅņYQ(Ŗ9)[ÍčôÛˇo;úl/^XXč}=_ZZĒW¯^õ^ÆŲēģŪŨëĖŋWžŦgáĶ?īėėL0qä ÂÔŠMÅĸ0’N%ÎĪĪ7čb 1`$˜#Įlįķč¤///;Č˙Sã-|́āč“9Úĸ$ĸM3Ų3!`ōŅŖG leN†ÆĻÅëG›PIē˜zöééiË)ô9ãŊŋŋ_+++ĩŧŧܕ*RĶŧąą1Ánf‚–ļ؜19’ x¸RBäß6T?W¯Ē>5w$s@îm#â dUz`—p´¨*“d}Î<F20ĩ1ËjK6å?ü7ūp;žæ°Å1|FTxÍúō6w÷Ž8mօõĀy3S‚0ÉāĚ?Yc~mm­A˛˙ôßũ§ŨgúR[ŗâK&‚(ųŪ=Krz§{÷î՛7o&ōaĒĒmPŸ”YGŠ•OĀëMö§Ē&ĘÁƒ”Ę,//ˇôđ6'ĶY7σÁ ĮĐ\7–ÖIÚHŒ,§B›ÖŒÚUŠsšR?Îf9sãíÛˇ1Rë>íĢČ#š9G‰d Ãn§4ŽĶO˛3??߉ķ)/[\\œ8ņ5í@Í1bsŽëââĸ=zÔÕģ€ĪÃÃÍFŊlnnÖˇŋũí&KŌáĪ÷!‡›››ëžüøqīæÅõõ¸bSÕ¸<- ë3Ö į…Mq/2ŖŒŪ°[*ëxo§_ŗˇ)MT’4ķy2úLŽˆÔÆ•‘ÎĪĪû€=ų79?ĢĒŖ+Úvqqq'ŗyĮ¯;0˙\ŸÍxjĮfcã1ØváJY÷@V Û°ažNj0(ÍíÉÉIŊzõĒĒĒ i…§‹”ŒäR1hØšããã–ŪTëP§‘Ŧ'…Ĩ´%YFl5€”% 3qXŋŲäČ9...jŋÁ‹ļč#Ėgm–[[[ŊA,"€@˜%Ū“c6‰˜×Į˛eICābggg"j’ápr#÷ÂĖN€ˆuÛŪŪîĪŌ@„q][[ë>IfŠĶŦŅß'xüÉdâ>|Øšōˇéų]˛dBôœ/sŸŗÁŲ@=Ë÷0ē)‹ņ>KKK­9–ā†ÉŐ":¤™ŗ‘2ŦĒjŠKžŖūHgĀ|áŦyΟųËa8;;ëaëšcbnįúĐÜJįQ…#KšUnŌÁË Bæ0Æ^TUŗî4â×××ÍūröŊĪŌŌR@ë pēēēĒ­­­~GãbūY'YȜĘ=õ/đnÍ*įšR<Ō% _Ds0ttõņãĮuss͉ŊĶvã‹t`C{9ĸ&Ū‹É$ũˇoßÖp8ėg™įoŪŧi‡BtÖõÅ/~ąVWWkoo¯į>ŲŲÎÎÎDDG˙p„€æĶĶĶzōäI´Ũžwo|‚xĘo>üđLJŠéŖŅí9'õōåËĒljC¤ŽŽŽ:‡É<Ōf{] ¨Íå3———Û1ˆn}W’ĻŒr: Nõšƒƒƒ–û‰Ü"Rėoŗ´3WWWuxxØ÷‘Đėėmw×ģyÍūË?rwũĢ~Ĩ#fŖ988čđhžšČ€­ŦŦLŦdÃcLŌ Đ&&NmŗđŸû¨D#yNh:AT†ãÔd×ŧ“˛w6īāūÚ)<™@Ŧj|P&ÃØi˛dÃlęǜ*6dZđLžÍ1ÉĘéŦøŽ,ĮÁĨo–––&JϜ!Yd÷^w/˛†dAŨ'%UcĻJ"–ŸŽÆ#—‘›”#%¸Mcú=į%ûŊj˛´dIķŌϟ_Ü`™O~įīŒ‚pæÎĪĪû€Ņ­Œ äØĨ“XękŋSŪōōōrhÚxps6#HÆā5n™āiŊú;īeũŠÖQ5Ή 9›f¯Ŋ[˛´Ö]Fā2"cÜ8Xæ<…Z%šcfæÚ5.ūX?æ_–ģū›hŌ÷[+Āq˛ņĀTŽ[mÍdãéü#íöĮũD%!ú9Y_vÔpøŪŅŅŅDž0'Š[t3í>Pg~ˆbaôŨSžEŽÕĒ[€-:˜ŋ—@*ĒņŅGÕ÷}ß÷ÕúC¨?~ÜÉõH™ŖŖŖN ĩ~ũŪ<,Ě[’o9ëúD¤ÉŲ%Ūķúúē÷0Ž‚‚ŊĖ=­j|Fy—ŦŧwOģ–Ŧ>ûe/Ėûg~”ˆšššŅŋÍÍÍvȔ1NÂÉp_ũ4 ZOŸkG-˙œ“w×ģwŨ1ķīÁeÁWë “ÛdĸũũŧÌlđ™<&d—5ĸ†2777QiÄe“ÄÄ:d† LUXHæ 3GĒBךŋŋßLMÜį1t°Yˇšļ›Â“R${“ɧœī^5f`œ˜N‹ÍÔģįįįõøņã‰MØ,2i‰<ĘEĸ“mā\蟌ȱ€‹¨ĀéééDõ •%$Šfb- ‚Í|sssĸl(Pŋŧŧ\/_žėwWŠQ(ۙāĘŧãŦaЀĮŒđä=ŒšLFNRŽĄŧĀEō‘ĀDŒĮXš÷ĢĢĢ]eË0ĮlūôŪ€øũû÷'d ė1đÉvę˙éĘ7@[2áĀ`F6b ĖĪĪwx¨RævīŪŊf¯ŊÁėėlPCžtssĶy.333uppĐj`Ūī˛ŒŖufXŖ˜qũ ¨§3L“ÎnĘ€ít Ų‰œ$ UˇŅ e§“mŽfäS ŒĢB“•†ēä'û9ŨVHÉuaommĩũ^Ķa‡ŊŒ)Āŧ´´ÔÕNNN:§Æ˜¯ŽŽÖÎÎNžžÖŅŅQ'ë_šFėĒĒ'OžTÕ8*§ũŋøÅúîīūîZXX¨­­­úÖˇžUΟ?īą]XXčĘb€*"a}}Ŋ÷r›,­ĒŋSō‡DI´?ø›}ÜŨŨm`ŋŧŧ\¯^Ŋę(ÛÅn'UU¯ļāææĻöööjssŗ666ځdgŦ9—ū9°×$´´´T<˜!’Ž[SÅO‡ĐŲ(¤PævʐTÂÉuqwŊ{ט.›bÕøāĻŦ-œÆ!“ĒÆURĒ&Áb2F6åÔL:E€ Ív‘îĨ^°ZŧĀI՘yŗĄ'ãĀá8 Ā§Æ‘ËpiJv˛žĩ>Ȝ›˜M˛j|đ{*KĻĻū°Åķķķĩˇˇ7QĒOŗ Į#u՜|w˛‡Ēņa7———­eŽnŦ@”?Oö,å'øÅÅEŗÂÚ­Ž´šXœœÔ`0h xĐXg‚ŖpŽÁ`Đeč´0Åú‹ēhā—šuáöĒąS ,JÉ*gū‚{ĨŒÆÜ'1H&Ų.É^sî$ž§“Pf0#u"Ã1ūÎ0ž^Vš^C)šJļ+iķÉŌלHāÎXgä„6<SQ€ÃÃÃ4Ę ZK7ÃyÔ&ã™Œš -6 ­Œ @^5.[ ¸Š–å瞆Ø5ÎĮgmm­í°9n~lnnöe“ĖŸÕÕÕÚÜÜė2†ÉÆJ9B$Äėėø<ŸŗNôąy8;;Ûų8l7›Īū¨ŪĻMė:v˙éͧ5;;ÛĩŨ͉Ēq΃k—ūtr°ņä¤zūųųyŊyķĻb{fVCĶ&{Đææfį Ą’HRú2÷õģëŨģîĀü{p%ĐKķķĒqÕ›$ā[U͈2Ø ōŽ‹‹‹zņâEUĢC_ŠÜĢĒe UãÃQô™™™Ž*ĀņĀFaå°¨B•Š­Ÿës)K L0枞Ĩ?~2Ŧ( &éQX3cÛØØčÍe}}ŊCŊ™ÄÉ蟟Ÿ×ÇĢjŦߎĒ6ô;;; –“š`fffú`–d?ĶЖdũETžœˆˆÄØ#}˜ÎÎÎN •r°žîCžŅ›7oŪ4SEū•9@úęęjíīī×ÕÕU'ܞžžv‚ ™ ; ”Ŧynŧ)o €Č”Z`[3‰0Ž”øŽ’t‘9mŒĶ‘Ãâ[ōôuusÕüČúöœß,Å*ōåjčûg—DÁÚ˛ŗŧ)Š–PNį0Oiį.΃āėšsÖBęã9}Ā=™Ņ ‘ąp_ŌrN @dN›c™Ÿ@f!š‡UNûČNlmmĩ ËpÂ$/;ĮĀ÷T #Iä(§$ƒķ=6'ĪmČDĮápØļĶÜtČŅņņqGHU˛–ˇˇˇÛ!JRcŋ;biˆ¨v…—ápXŋũÛŋ]‹‹ˇ5ŌŋųÍo6iÄ ãL‹ ŅŅ'QĄõŸš‘ëy„öĨ IDATeeĨ‡i_UŊ˙p9)oâ\&d.XėRĘĪėcH–ÃÃÃÚŲŲŠĒ1ˆĪƒŸ.//{-"iäĸŠÉ?]éĖx?xđ sģ*šŋŽŽēÂÅÅE'˙ZsŪûŽ4åģ}Ũų÷äÂîĨ†”ĄOÆÅĻâ˙ŽdåԘf)ļüŦÍ$īŸ@„žÜį§uŋ vĘæ“÷Ū˛ÜWRaÕø¨pī–mđo‰ ŅÛ2úāûÚņņq3Ä= (YG Ą+!ũ™îŧ0tŲ÷)—°š’ _™`9-ō6 ›''Ć@•ÉĖBí)ŨāÄä‚]“´æŗŽ´Č  Ąŗ^ŗū uRŽS4øĶĶã›ÕURGmÃ5wõ#‡„<=gŊoÕ¸Ôh2Ëæ(į5Ôč§ÃéûÆpZ;íû€´ŸK÷`ÃEēĸ_§Ģqœ§/ M[“ÕÖSƔ8°fÍH˛Ė÷Čqō7Q v–E%[ŌūIíy_—„īŒúß}\ū8Đ'ĸ˜ ˛§į˜>Ææēô›{åxäzŌD>|XOŸ>XĢہ=ĘĩN’#)yÚ‹b!ōā§“““ŽŠŖ››› L3Š–†Ÿ]ZYYŠgĪžueN{ âf-ąmœ%€@Ö_>—s˜Ŗu}}]~øáÄá{)ĮËhqU5ᮓØäœāpˆ œœÔņņq=yōdb˙áˆéļÅ÷sü]333ĩˇˇ7q/Ιh‚č@Î_Q}aŒ˛4§÷×ŋėĩqŊģŪŨëĖŋ—Đ>†‡$…–4%UÕaČL(M †M–1a0éôlŽ ĖtxžqąáBĶUÕ âč訓WI&R‡îž‹”6TCéX†>õÁŖŅ¨Y>ĄS'Ú\ˆĒęˆÆ Đđ<íNdj¤ąP>›ŦšM8^\\ė]2´ëûPV(I9P„m“LëßéØŲÔm^6 ō§ķķķž3Ž;OF-YīÔmjƒšß ę8[ę 'ۜgp,0e~ī˜vĪâ HŗĄĶEcĒ„ãĢjBãjūr|ICŦ›<=™3:Č–Q”TÍÍÍuX?%9XBg@ *[˜ë9æ"d*EaliīąĸÖ€“’í´Ž9˜YH1V¤Uˇē`LüÅÅEŨŋŋޝ¯[—\UõāÁƒOÉ 2J(1–ŗfîLWJųX:ō ÎÎÎ:R˙’Éd$MTÁ¸k‡ųjũ‹äWs(’0`UÛ°Įl@ÚũΨû÷ī×ĘĘJomI§Æ8{†Čψ ›B–qppБ;m~ņâE;rŸØ€õõõŽĖyĻĒFȗĒ[_ېšœÚī´{Nž57ĒnúÇ'NžFõōåË>ˆĒęļ<Žuķúõë–ī`š}7e'ĸ)u͎{{{õÁôŧy#ģËč "Â:JâČzļሠȲw°5JŽŽFŖŽāÃÁxûöm=}útâĐģëëëŽp´ąąQ{{{UU=įåLėīī÷šâĖÜ]īæuæßƒ xæÁ+ˆaQBđúúē°âUcKĮg3™f“¯¯¯%ÃĘČHN’8'7åB¤ĸYéPIéËÜÜ\˰Bģ’IŗĘL˛đŋ΅䕄L&“ŽÛÆĄŽ°đr&™ÎÍÍՋ/ڙęiÚ¨mU“‰ūˈF77“ápXÛÛ۝DĨ¯2JĄ-33ˇĮ”ˇŗŦ(Įi°Á‘é˜lmm5Đ2Nžg3Ë …ŗ‘ĖĢSÉd333uxxXËËËu||Ü 5ī‘"p`¨~ÚÔE0ĒĒķ,“ƒA˙\ˆŨ9œ m43Ãú2ßnnn&Ǐ$ī÷†ą]\\ėˆ„r†ä÷îŨë„\LĢ5hĐ‰c59Q朚‘9œųŗŗŗŽ™]U ĀI8ŽŽnKéMŗŗˇIą)Í2?2š6sĖ%$@–”=??oÔ<ĸ×öŨŧVBĘĒ[ÉhW#Jų%ķn|îÃ6j›w6Ūn€Z[sîe­ū7oŪôZΟĪÍÍÕw}×w5[‹ô0žÚОŧĢhgVŸĒƒ.â)iŲ=`2Šh<3Õw˛hAÎŊt766:ņ˟E ØĨ“““ÚÛÛkYÍŲŲYíīī×`0hÖ;§ŗ›ļÍ`ŦGQ@`Îĩ9 ’Ėųųy×ČߨØčä|ĀŪZboŽŽŽē*‡I!9ځX\\Ŧ………Ž.č[‘Ā\bōô¸[÷Ķí0Ļ);›íHĮŨõn^w`ū=¸čĘĢjâ“ÕÕÕf)0ŗ ĀĒÆ:`›a– Ã:$°ĪÍĘÆ’É…yŅņeb+†h^YYiã†qŌ6R Ą^ēų<…ąĪ°Ĩ3™5Ī(°œU5qđŽ ƒœ¤†Ô$ŲvŦ§wÐK¨ģwī^÷?ÖÛûILx96Ø$›dÕøˆqĸžÖ‡˜ëĒq9ß ŗIž„‰ŗiw SÉBĀSŸÍĪΎļøLÆS4ÄķŒ™ųlۄ=CtÃ|4wũ,omČÂŅ$˜R3ßKŠ‹Ëg2“ŸÉ$ĖĒęd>€>ĨCĀ ‡+ëwŅ4Ø´vsÎrJϝ,™íˇŊ¯{ĨöŲæŸĨŗĒ ›0§ƒ>͐ųXP‰ŧ ō´؜›››HõŨiiÔô•Z{kŨqüg'åéäŧYá+ûœf{sū§4Ņ<ąöH÷÷lÎ)B¸ŗnųŊ|Ž1Îč›ĩ`ž)Ĩʎ§ÔĮüĶ?×סÕiôßōōrííí}ĘĄ1ž"Cœü,ŽĀ™õŽëëëMdŌ(‡,įp– ÎqÕ)A ƒ–פŦ45ĪČ*lĒė¤ŧŧŧœˆļšYÔžęsú;Ų$ėĶŅcmđë.OC6īpö䅅…ŪC‘Vl6DL“nw×ģuŨų÷āʰ4ĒB@ŸĄŪæ6õéCrjĀß÷háy›&^ø:ĢXØė°ļŠw´ņú~^UŊ‘Hž=88čw~~ž+<wg%‹:úįôô´YEÉbĢŦ"`Ã<88č÷xl@6emHDŧŗįC(koŖ’Ÿ`#Õ˙@On°———]ŽlZVäŗ‹á¤äÃũķôAĖ[Ö÷ˇÉ‡O6qø…p‰œœŸOˇ5/Œ5I 6lē˛F&úa°$1fÂõöööD)KũW5–ÃëŦHC†`Lõ§Ä¸Ø0%…å–‹`Žrž€eĀȉĸŠŲ—T˜ †ŗ,™ĒĐdŸ$Ûi šfqĖÃ<‰8Ŗ’jįįį;7HT†Ä‹“kü€w‰”"$Ķãcė3)–”ŽD…­Í$föāõë×-ą‘¸Ocī°#N!ÛŖ ĸ1íŗŗŗņÉJi9†ä[ÆîáÇũ=}‡iˇŽÉ{8íĮĮĮ]ž7mŋy6 ē횇ÅÆĶ˙E_Ø2W:Îėŧ˛ŦĢĢĢ] !ĨĢ333õ]ßõ]U…Čëė­lvFųŽŽŽÚ9…069•§0ídŪ]īŪuæßƒ+AC ”eBĸßUÃéUÕÆ ¸ņzI› Æŗ <Øā”OL|ēÕ\ŌØúÜėėm]fW– 2dëžĶĨ,ĩ‡ž˙ææĻŸkc8ŗŗŗ .„Ëmémmmuˆ?åYž0ƒ6‘Ķ`š’õ˚ōÉČ^lYžŌĻŧŧŧܕ´ŅæasLgĀ6FYĒSũgZôõõõ‡Íö“VŅriúmmm­{Ápš’‰F¯€\XX¨ŊŊŊÖȓ?¸29X˜0ũÚ ~žäQíÉëŪŊ{]ÁÂx™k ,ŗ‡÷–ĘyÉLfŋgy?sĀû3ÎCū^Õ÷ĪgXŋYš/ĢU“}?A‡<Ų_īÎĒGsŦ7`žsK_ŸŦúââbKQ*7i‡9ã;4ëւ*HNy㑈­¯¯w[E™> ĐäΌũôtĮúÆIÛ)ŗ™Žhˇū͓“­M€Đs¯ŽŽęɓ'uqq1Ņy+ss“åķ4i6OâšČŸõ,Á“^˜_;;;í]\\LØwŧRŽ´ēēÚīxzzZ÷îŨk9ŠŠ:›››5 j86HĪd{ũʆ9ĀØ[Ķ'•–HĢ&VCâЈs0ƒAŸe2??_;;;Ŋž677{ãg˛´5ĪNˆ`,..Öūū~ƒíĩĩĩ‰Ü•ĒÆ'֒`{k!…ŧ9??īŌĸŖŅ¨^ŧxQ õøņãĒĒ:88˜(r ¯G›3ĘãžwĖüģ}Ũų÷āš.ąˆeɰa2B˜TŦŠī0fXōũũũzüøq—:ķ3 ŕ,D2€6 _Ā* )Šē}JpaíŧFsgg§7~ĪXYYé2ˆYOÚfÎؤŊŗ>‘āf3ƐØ(Rˇ›,w2ßōŅ ƒžõŲ¨„pŨSøŨ-ümSĀ,‘"é Y– ›Žę“Ąxlļ6ŠgöĸåÜÛÛkĮ`45c™¨Č…~ę˛ä1˜Ož%ŦŽŧ^æ?pĖ” @ŧw–|4v[[[ nátx%ŨĒ~Ipd‰~ĨĖ(tFŠ4 ŌF ¸lllL€W;;;ũŽÆN´s}}Ŋ^ž|YįįįU”Į1ęņãĮ5ē¨ûËUÚŪŪî3!žüå/×ââbũŗöĪęã?n{gŽ---MŦ}¤r4unÅęęjߛDįŪŊ{õ{ŋ÷{ũ¸˛˛ŌʙĶĀ;=š\ķĀaMrWŒ_Vƙ^^^ŽápX{{{5??_íČŋ}ûļôb—"æļ›lqssŗ“ŠĪĪĪëéͧ=g¯¯¯û]Ų…Ėq°ĢÆŅZšVĄK)āht[5ÎÁ]ûûûM¤3—¤{Č “qĮÎŋÛםĢöž\6HeĖlžyņô§õÃXžü?ƐŸ~Îô•ŨüÕdéJ˙v›õÆÆF3[.†×EĒ’@zúŗ}ūž.—˛ũŽÍ+7s%SÖ0Ũ†ĒqYĩ|ÆtŲĩéđīôe˛Ũ.㜟KŊëô%Ņmuuu"G!ßqúŊŊŗÍįŗîé=§kûNŽSĘ^HrĻÛá>YŌÎ\Ôo;Ÿ12˙ Į3û>Įlē6ķtyŧl¯>š.Iįįųų¯ŧ‡Ÿå33!NŸ@ŅtYŊé1öNÚõY}ė÷9o•44~)-Ę C›}“?W>s™īiėr=žYmĮŗr}¤ÍúũÚésųķ”åųÛ{äØåŽgŽ5‘Ÿ|īœOŸĩŽōŗŪ SOvĩļļ6‘×ĸŨĸĨŲö,_h æšÉy˛ššYÛÛÛõá‡ÖÇ{~eæņޤ”ų™ŗŗŗNœÍĩ•NûO[UĩįéͧíŒeiĶ\ˇ‡‡‡į(˜#iÃDZ?kOCâd”ĐûeÛr­æÚŌG9ŋ´1įĐ´}Ö~Ÿį?|V Î,:=wîŨģ7‘f­˛¯Îøũė÷Ũõî\wĖü{p%€Îę)ŠķŽĒfš°>KKKĄŸH&aņ¯ŽŽ&Bēîī’œ†íŸŪTI á”M$CšaXÕĒ&On­Ŋ<ĘîķËËË}`G†Āĩ+Ų°Ôšc]°Ŧ¤sssNöŽ 3Öewwˇ™ĩ ōĄ" –~8N0ōÉđgŌ[U5ķŌšd•ęiņŪUã$ãÃÃÃ~Įõõõ‰dX!ųŒ>‘ fÍũÉšD0Ō"Æķøø¸Į s+TŸĖ)Æ~4Mܸ0Žúôčč¨åÆ.#EōŦīv}}Ũk"Hí=m¸ƒ–Œ a-`Í'TcĐIŌVVVzLŊ#!úúúē+Ž(ŋ™Ÿõr™7æäh4ęųšrŅĢųųų#QŒLÚL-˛yā9ĸ"æš'ÄB[o¤J~ŸQEö YOĪŲŪŪîԊUˇQ1ō ßUÁÆ1´Ë\ÍSö/įĒhHĘš˛Œ"9ĄwķsķŪ{™‹>lĐûöíÛúčŖÚŽzm ¯ÃŲÖ××ģĘØÍÍMËF˛mJ隓"‹yxöėY; Ų:í‘tœsJĨķ…SFĸbœ@ėŽĩ Äī÷~o=|ø°ë×ũ×ëˇ~뷚i&‰1˙Û7ÎÎÎęāā ×Ģũa{{ģkßcųE§ë;ßųN---ÕÎÎNē—ÎĻ5!2âŨ_ŋ~]ƒÁ ...ęÛßūvÖgŦISĢnÉ'ŌĨ,ņ瞞RģģģĩŊŊŨs‘$i~~žm`’q"˛¤~öL65“¨=Ī>wŊ›×˜.ėI2•ÛÛÛŊŠg›LDŦĒNüŗ ԙÄĒDŸÍŠj| Ŧ ØvČzrŗs ˛ŠÉ|1Ž´ÆØņ_\\ÔÆÆF­ŦŦ´n“Q$ Šē­‰ ø¤“r,Œę<¨ĒÛMéõë×­ƒĨ×͉ÁŖŅ¨“É*$¸žžļŪß߯ëëë۞ǐ'ŠÎϐ ąYĩÅ ŦžŌÆ(œ“Ēą(Š$+úŋС:îäZ67€"Į ĢHŖ^5Ū=37hã’I‘———ũ}chSMIŒ’¨NÚ´á“5dbŸÍ1Ų9ķ_ŋH:Ëcčs]ÍÍŨžā˜åD9Ē@¸žŗ™ “įŲys^äHJRr–ŧģūĩ>h–ggokĀsbÍģĒęĪHžHJ°¸ūL6•ŗ‚õˤĮĖ}Y¸žžnžų#–6ÎŋzØæÄĘĘJíīīw?[$o)Ëāˆp4ÎÎÎēLĒ 2¨”ĘÍĪ%\@O:\+++]ĘąĒÄæøįáL™ƒ”‘ ĨĨĨ.eËŠáô¨¯Öz–ÖŨŲŲi'ĩŪ677kkkĢû¨jœsb=...vÍrķ!5í}UÕĮ\ûûû=†Éd{’,ãîžŖŅhž<|ø°†Ãa%y Ĩ1¸žžūԁL}ôQ.OŸ>­×¯_ˇĪk22zuķ"ΰfĖMĩõÍũãããē˙~Dœ/ũĮ隮(%/Äú—O´˛˛RƒÁ B’‚†s•ųZö€´Š­zöėY­ŽŽNH‰Œ 9'Vd„ Šj|†ÉŨõî^wŖû\™ā–r™iÍijÎķdŋŌ€3dyˆ‘ŠBč6tRS­ēMÕ8Ÿ!}›‘ '3ũ>ĨōŽ.÷Á> Í.lkkk5'ĸ XŲ­­­‰Ę)Ο?¯ĨĨĨ ĩŗŗĶ:hũÃIĄ|ā?+Č0ļŒŊ~Ö$Q‰„0î’mSâāÂ\Ģ„‘eØfffš5Ī*8ŠģÆ4c¯÷ėėloPÂ˙UÕU=€šššfŋ$qyÆĖĖĖ„Î–’ųĀ‹ąHŠ”#‘õņąW"EîOßjÃĪHKÕ-XÉú÷@;ÍŋÄ[—3Ãú™`6??˙™N­ž5ŋ˛ ĀM˛@f֘VôĄ9–Lļĩn}{ĻûdiFų$)NÉo¸žžūLÉ §ņŗĸ!éœîũđūæąqŸmÕÚ’’00>æ1VvffĻö÷÷keeĨ9ŪíęęĒZĢn¨Ŧ€”}agŊ~v†ôŪ֗ųÃÖÉH –}dNr FŖQŨŋŋí/mˇûž|ų˛666úģūÕHgffÚųåÜë/}fΙJõž}ûļú”üx/å+ÍŅÕÕÕÚŨŨíų}uuU[[[=—Ė÷)™ŽĒq ō™‡‡‡}€•¨@æŒØ“čé9KKKõúõëŽ:ęoĪ5^oŪŧŠ………Üæ†ę9Öۛ7oÚ1'ũ!7r–ũÅ÷EŲÆ$ÆŪž};qX›¨Šßqtõ ĸ(ú—QöŪ>ĖFŪģw{Ø Sw§ĨŽw×ģuŨiæßƒKéĀLēÁ:hKn“ĸMĀÃHV™b›Âp8lfZHŦĻ#iCÄhŲė|ƆŽíKKKõų7zS´ųx'Īķû_ũ‹ŋÚeĢÆ•›š‡åÕ$O~Ö&l#Tj 0Īä<īīéŨ$’Ú´´ŸvS_ųLÕX™•͏cFÛlüVmæ¸xĖ Ją4Ãü2Ėī ÷¸&öú›%q.å Ū)å-ĶÉžXdL¨ū›Î ČRšŠ{Î}DģĘ Ģlj( PlãĖ’uÖOō”s$×°į¸ģŋžuHNö…ņŠ­ Ĩ9v>ģ°°Đg-`æõŸKbœ÷аߙ0gD€†ûę/í÷û,͚ÕBŒ°žŲߙ,¯?9ØYb4ëšŗ_Ö"ĮΏk“?ÖjĘĶČÛĻ×1°œŦģš¯oR‚ãŨŲÍ›æ5fCŧ˛˛ŌēīdņÍũŒ|™ é<Éx–*+ĸlĮĮĮ]zé°ąąŅvÆ!Yú–’¨jū˜Ī*Ų¨&†=ĩÔœÔ\[§§§uxxX/_žlYÜĢW¯ęėėŦįž¨¤qö}cČÉË2ÖĢßkˇĘ`¤S€9GŸTôč訉+Ņ=rMs:KËfێ?Yļ†ėKÖĩ9f>UUˇƒ<-ķVr;ŸÄ‘NĊößiæßí뎙.ŦǚIw -“(šYã;7" ã” ?ÚÍĩ{ø>ēēÛÉNUUƒxFmqqą~üūxũĘOũJũąŸ˙cĩ¸¸ØmN úėėlũÆ_ūúąđcŊĄ`Âû Âm‚××× ­vūŒˇŒrŌHęgī”áßė`Fč_%™<ô&Ģe`‰ŽŗŗŗÖw“O%čHÆŌŠžXãš˛(úUŒįÎÎNp ņę".60Úđ”Eč[ Dŋg5ããã 6Ôf– gY'ZY@NŠ77”04ßDlRúPUbsÕöŖŖŖUr#Œ'F7ËBŠēLŸt ˆ:ČŸŲXSēāĒɋοÜ$Šđ\ėyÉÕÕUGYrnf´Čîšŧŧí4ūĒĶč3sÂŋ{U5ˆœąĢYÁ˜œ™™iđĩŗŗSUU=jvú _øB¯AëJS$$K:r$Č^ĒjBĮ́Ņįl y”ˆaUÕîînKp˛Ē †ŲØ[7ĸ "SČŸĩnĻËNŽŽŽ6°ßßߟˆ|‰ēŠZw×סyė1Cd)WZu[æw0ô|ĸŖ uxxX›››í@íīīOTŪŽIpH"{Ü%Ĩr(í­Y7˙ŪŊ{õųĪžÉW*8R’ÖĪė型ÔyøđaįƒĨķcīŽwķēķīÁ•`6¨ ŦË2“ƒ#ü8cgmx)'ĄdЁņ”ITUÚ ĩÛ\ĒÆIgÚ0ęūO´~õ/ūj}åžŌĀëģ°°Pŋô“ŋTüo˙ņZ[[kš Æ[™R–ĒęP>Ā (+ᖠWÂÅUÕ`Ã\5Ūā’ÁvˇļļšIķĖdģŧĮŌŌRƒžĒjGEČxmm­ī¯ßŧ›>Ė'G€“PUÍpaÂ2ĘA˛āė7­úĮÜeë´Ø†ąƒX0›=•Q€Z­tÉÆ 4r|nnnZįũĸcå\ēôįŅŅŅD2ŖĢ €ä™kkkÍ`“DŲÚ @ä&ĢÎuUĩãR5–ed%'û9‹šÁåܙƒWWWŊö0õæĸ2{î`0hЀÁåčtÆr:áuyyšvww[>• ūÍÍM×w'ĩc[DĄ°ŗœs`}}Ŋž˙ûŋŋƒA=ūŧžųÍo֛7oēŸJQ) yûöm­ŦŦÔį?˙ųÉĸ_œ&y:YžĶ:8??oųŸņ5G<ƒ=Lœ ĩö°÷֝>ĩO‘ Ņ,ãŒŊ===­´Í]]]­‡öäķÕz¸ššŠŨŨŨ Mŧ6+;šēlk›CjÍÍŨžÆKk/™VŠÉŊŊŊ–ĩÜģw¯ ˆãããë ŖĨö ļ^ÕææfÛøŗŗŗúÖˇžÕŌB2:Éų[[[í Ę_rž†õW5>“1pttÔuéõ›7ozŸģēēęgggÛņņ|‘:xL8'ĶúgËô‹3HyĒĒžķY2ī’‘”G‰xdîƒņĩáŅ^WKØŅs.//×ũû÷[ÃlŒĶą$ËS?snšÂÛ6]íŌ~}KN_“ŦŦŦLHN2/ÂÜĶ^zæi)ĻO/Ž]KāĸM———Íúžtc’6ãK$2AÜÕKDF^ŧxQÛÛÛĩļļÖåJE0soßž­ÖÔbÖÍkL´{;°ō˙ŲŲŲē˙~÷¯hČÆÆF÷Ķô¸&PŨÜÜŦ—/_vRã?˙į˙ŧ^ž|YŋûģŋÛë!Ëåš{ÆCäIâ~:ÕÉf{ŋĩĩĩ:88hųIXؔĨũ0ģ•1°NUbĄŸ>::j}sJAô9ÉEjėĢjbŽׯÆFË?ŌxWsŲÜMŲ†_9W‘”Á`¸=ĀÔ&s3įR? ôúz˛Ēšĸ\,< ë;õņĮwÉØtØ1˙ĸtåä~o.Ŧ¯¯7Đ6÷ØyL<›Ũ˛ūļļļÚŠķÁ ŲßßoyÎææf?[ԂŖÁ^؛2gfgg§ Bŧ|ų˛įĀh4ꃞH2ŗ`CĘ-OOOkŋFŖÛˆ(âÂú!5bķĶ!bķîŽwķēķīÁ%Ė^5 +ģW5ŽvCöQ5f@HgĒnKzČˇ”LŦ­­u=xúæō6|믯ÆDe’ŖŖŖfkœ¤ ĖŨÜÜÔ}í‡ę?ũĒĒúáŋûíˇœŸŸīi3335 Z?ÍxŌ”V‰gÉLÖĩŲo*œŸŸ×p8ėjôÂI|Į„Kfō"ĐûæÍ›ūŊ*4ŖŅ¨å lfffjkḱ$OU5ˆ;::ęę/ΝĪ Bņę`įü”„ŋͯ|7↓dũo4į"%1d@6p]Õd…˜tB0Õ@08˜Ÿt´™XmdĸxęôĶ‘IGI{Ŧōũš}Æ9ĖÄCsR€īĘå°69 Rĩ/ËnmmõÜĨũ&ĀæŠnĄú~îĮ2nmmÕŪŪ^;§drJįS’öÁüWLųÅųųyëÂWWWëŲŗgõüųķ:>>îS13×Ā{.--ĩÆ>¯ŽŽüécR¤‚@ciڏ[r´˛˛ŌļŦjėøi?YƒīZ§Öį.sfĖ÷1/ĩË\ 阙™i§ÍN'øŪŊ{}Fƒ¨ Göāā sØĶáp؎"'CŪɧ‡úßųOUÅŌŗ6aŽįįį'$)ĒŊö,..ļ ˙Üį>7áüM'Ę&ņ $Ŧs:HԜđzyyŲUh܋Ķb>g"ņŌŌødZ 8Yõ<—ÄœS*Rb1GB˙ †Ãa~ œŦM? ėŅúOßÛÃÃà ŸÍ“%÷`ssŗį3‚ëîzw¯;0˙ž\Ø;eĮ˛ú@= ęüüŧöööˆ@Ũ.fĘFCW™I˜@5¯d4ĄøŦP‚ųŪŪŪŽĒɓoNHUõF–Ĩģ€:X2˛˜cXāÆĻ”å#Āt0îŦ^asËUĖX–ķˇĪÚ %ŠĨž×æ[uëTĨVŲ†„‰~+5ųũČ0pÚī°Ú6Žvčɓ'ũ9Ąj 9“°´ƒÄÉÁ.bhwww{Îø,žßŸ››ëŠ木R&Ng 8ķĐĪgЅûŋ6‰ôČä0Āŗ÷Åāæ)‹ īh4ĒápØ æđđ°ëm‹˛L;eæęדÍ][[k‰„dĘËËËÖķcˆ9XUÕ÷` ’ž–>Đkŋ}ûļ×°Ē3"lļ9æL€‰ 0'''ôŦOėĪíííM€oZņL$ĸąĖ ÍŊE”`ccŖööö:á\”Í5ßRęRuĢŖléā%ŖŅö>ZuëŅá˛?īßŋߑ\Nšč49‹5æž@8ōI OöCÚÛˇokkkĢ# öû5ĀoouQA¨Ē&*GeW:1æõŨõî^wšų÷āÂFcī°;Œ Pv¨S5A¯Ē:Ŧ—‹/åØ}Foēʀ0ōââbŠ‘ŋķ,›CmsũÆOŖūØĪ˙ąúÁŸûÁúÆOŖAœwąkžxģw–#ôž™ĖČ`’Œ`.1ķ~•ĖM8f˜‰Uû7'‡“å 9&@8Āt¨1=;;;!S:W–Œ`vvv‚ųÆøÆÖXeŠŊãü)P:ĀĢM&+pįįį'd]’ķ0˜”ĖŠ63Ė" ›ZX}ãÖÜZĀvy7•>´Yôweâ J˜´ĖOk31īp,%âe™BQ/sykkkœbøŦSīhė|m0Ūĸhڗs&Û?77WƒÁ Ĩ!ž7?{ÚąųåŲÚ8Ķ[777]š…3ÆåÜmJ0XUũīkĨü‰Šįe˜‹Ö”J5™!Z"2”ų+"Y9×I´2ĸĮ‰āÄîUÕķvmm­677[‚iĩžŽē5>/Ä&ąS~§O­¯ËËËNŧĮ†›ɔsIJˆ€‹ãåᯛ ›™™éĒ4ė¨šü{ŋ÷{õōå˞ûŠĢ_]]íža[8ŧæØėėlŸ”ėš~& č;]*W& ë}dŖs,Ũ7#$2ö[ösqqą†Ãaˇ}kkĢe­" ŠĨŋēēęà ŨĪž{xxØ2,™į‘=˛7ėFJ_īŽwīēcæßƒËÁ(YÎĖá*ÂqU“'VKü aÚT] @lā‰ĶĶĶf=„^}ĮglĀĶņņq=ūŧŲ'€”áFÍÎŦŦŦÔ/ūÛŋX?ôĩę öūÖÔ¯ũĖ¯ÕũƒĢĒjæ O @˜¯j|"jÖųNÆoŋ...ęūũûŊŠ/,Ü:‚qânnnúĐ+wvvļKEŪģwoâ¤ÛĨĨĨ‰ ¨Ēî'†ŋęV6ã^ąqšGæųķįõøņãēwī^=ūŧĨYč'ŋ!Pƒ~ÚĻž2‡ëëë–^ ˜+2 Q Ŧ/ÛŧÉ1ĀHi'` =ƒÁ %'.Ā (ōŖí6ŅԎj‡+“äT†ĀŪŋŋ™rÎÔúúzíîîļŖ&úRU]Š{žQ*R ē_  ˇ^DU܇S-QŅ!^äSŪOÔDž4/ëÜ!͙™™i&T†C đËmąöôõŲŲY ‡ÃŽ0‰öUŨjÖwww{üŽŽŽXËį¨ēuāTŅn,æææf:Draæŧå0Ļ<ĒĒęÕĢWŅö…“ę[•pÎÎÎzŊæwčĢ×ÖÖZÚuppĐš€cUuD2ŖF"*˜ėųųųzôčQmmmĩķa-9ņ•°ŋŋ_ŸûÜįj{{ģÚ~´e ƒÚÜÜŦƒƒƒ~šŨh4j`ˆņM;¨ęQJ§~Ę͇Ēq>'m0ÔĮ\ķķķ d1Î*9PÅ)6@ĪHËŌŌRíííu$XõRą……ÖšįØ=xđ`bŽØŖNOO{-‘tĨÄIdJŋ‘ļpEoaĮĮĮ-s’ŖRUĩˇˇWƒÁ ö÷÷ģõpssS÷īßoŊ>ÛĮ)Ŋ¸¸˜ˆ+lßɨĘβ[w×ģ{Ũų÷āĘ3ņ´ĒXŊBƒkkkÍWUy hÕ8t 4 acĩlđUc4ļŅ=Đgy;ĀČŠĒzøđaÕß˙Ņŋ_?üw¸Ĩ˜‘?ņ?˙‰úĮūןų_˙Ė„ņ ;áL*€•ā’PYYYŠĩĩĩzũúõŖĖXœ”ø]Ö Ī„\ÆeeeĸįÁÁA'7 ĩbm¤ķķķŊņgøWf8ļ,āōō˛Ãį´žØGė5 ĨßÕ*Įļ&ĐŦwŦŸķ0˛ Û=”€ËR¨Š¯N  jeeĨŲÉëëëÚŨŨmųQF >°„é4¯0ÛŽôüĨ÷\úd ¨qÆDôģrw´Ô˜Aō………ŪŦåZ`ĢÆeÕ¨žššéÃ~æįį,.,,|ĒĒ”ÚûÖĀh4jØģøž÷Õ'´īæKj˙3bĮfH0ÄÜë#l}Fæ€>Q3D‚9īũã”Ë™?Ö9 †S|zzÚgķŒ &Aģ˙3üŲv,p+!×÷0”ŠÛBõL,šĐ°~JBgžR§ëëëzųōeß'û/Ĩž]n…d1Åĸ6U`¤ĒšYrĪ”Øx¯”eŨõĒIÃīaaīdŦÜ×sIg´äœČų.BĨũÆ+ە}€õŗ~Ÿ÷ČÚéŠĪuqĪßÜÜÔöövJs4ŸËÉÂFĻÚß´ÖdĶ5ØĩÁ˙mîŠũ(\@6kžWU¯ŧˇ‹Ķėy€ę´4B? ‡Ãŋ@xÖ9÷;c?ũŧĒO×mĘņšŽFū~ßg{ŦmĒĒž‡îįķĸe>oŨäu||ܒ#ÎļūL‡Wąs577Wõŗ?{ÛīŸüŠĒÚøÔ[T}TûÎ_ų+U5>A9Ĩ%æxÚÄ ėw2˙ĮΏFŖ hŦ´ßxæžãĘ< `Ô•´Š*čx†ûǏ3ģ˙ĒĒ× ĮĖ;e•)m0÷õ{9ŪĶÚvīLúÕ5ŗw9´ĐÜMģ‘„HÎ56!/ēwíIɌą-æs cš÷Ũ]īŪuæßƒK‰6—l~€Z˜5uĶt¸dBĀB|ūÆ:$ÄĖ/6ļ?ū¸,ĶÍÍM ‡ÃzôčQ—Õš›—ÃL‰ -jÖ#N`@–@ˇĘHc1dķķķ8™É›ŪC”áeŒ1÷tšÂŨßßo0iS!= m*Ā€ōsBô333ÍFfĨɃÁ YŗĢĢĢ>Ņwr%į8 NŖ%5¨x~~ŪÚsīéYĘJbĪ|—ķfķ5Ž˜{Œy´Ēš(šˇļļVÛÛ۝ø˜‘Õ0˛fģžĮZCY) žÔuÎč€čM¸÷ŚVUŗĐ€_~WĶėōŪŪ^]__7Ê}Ę"(æļ$ÕgĪžÕ`0¨ËËņ)Ĩ$"SÚÅņāi}:îeaŊãht[  åčz?28ėâÆÆFĢËØ///wwR#mY[[ĢįΟO8úņ\ģ~—~dO†ÃaK?€sŸ4h~~žöööęęęĒ|8Qiėøø¸Į´‰ uj/m~՘aĒ…ØĶĄŠ3~´ŅUÕr˛ }ŠŅēč?GīcCÔˇĮĮĮúb}Ęaŗ@X&ė']o–.ŧ˙~Ger椈āØėdŧŒĨ deeĨÖ××'Úi>f„ÆĢ\›>Îrz€Ĩ05ÍŽ{aĨiÍŊWU5ž?~<Á’Ōŋz'į)¤,,“ÕÎÜ!o:iũC–dY›´ž€ĸSœŅ‰éÚ÷ô×ĩĒjŨ2Į™ķę]€dŅļŅhÔ ō°Ŧp¤ŊúŲ\`€ŅĸL]ZZjĐøgô uv #5L#gŠ$Đē⍗ō'8×dGUÕ¸ą´Ōæšu—ú}cÉ6°qæMFRJč=ôíÕÕUũˇŸ”ŽüÄčÔ?ú¨/ųËõšĪ}Ž5Ō÷ĸĸËüü¸fųęęjíī[ßI€¯Ēú?÷įšŲĨW˙ãoT^˙â§~Ē\ũāo6H.f ŠÄûÖLnĮK>5îōŌ?´îæ?‰ ?ŨJ ××כxHeUĩ͛­ĶĶĶŽ”fÂļ9‡Ø@hÖÆÆF ƒîKáúúz¯'°fggkwwˇ%-ž‹‹‹N˛Ē‘HÚ8ŨĘõTíš˙ūÄŪĒéô3:ëߋ úûūÁ?XUUŋų›ŋŲmĖܡģëŨŧîĀü{paör16,–‰QĢĒ“đ›•Đ$–Ķ™eą6ödžũœˇą žŸí´ąŌÛ°€íÄzlll4øIÍ4Öã—˛Ž“Ė,°a㠕’*ŲDéÔTú(7Ā•ã‘•Dt:f%ÕT.Āē û&@LP“ĨFEDD´a4ךĪ:›§ÍĒǚ­Ä:šlž6s›žžÄ´sx8 ö3I/õĘĶ’zÜ`6E‘ ŋ8ØR5vâ8?Ū#~×īÆĶ÷ŦĀ Oë´Ļŧ¯up||ÜēbššNČÉzĻ6›#Ö†v0ô;ŠXûrg”z<::ę>\YYi9‚č ī<[ģX7ļ ek˙O3VŪī2IU_ęGQēî<đÍú7¯´CU&ãe}éSë†SĘqėĻD†}ôÍoc'’§„áÕÕUũ÷OžôúøęķŸ˙|ÍÍÍÕŲÚLJNDÆØbkCb'™K‚o¤‚\‚ĖßĐoĪūŌ_ęī˙k_ûZ}÷Ī˙|UUũŋ?ķ3ũvfûââĸö‚ ņ6Ë{æ<ͨ¨9‚1æˆĨĶ•2&Ž›1KšŖûį!ˆl‡5.˜ÉĀY67ešė)›ÄnY×)­Âxŗ3<˜°méĐ蛌>YKëæúúēËGsö}6Ĩ`Ȋ7oŪÔååe=~ü¸mōĀÁ‰Ÿ%QģģŪëĖŋ—ņlˆ6€ ģcãĢÆr’ĨĨĨ‰„×Ēqcƒd$mB~îgãÆ`ĪT^ؓĨŊēēĒŨŨŨfāĮ,aį^z†“Ö›ÎĨ°č¤HÉĐaQ•*Ã:’;ĖÎÎö!(Yj1Đ4Ø˙øã›U—čĩŗŗS õøņãŪ8Ēn+÷•¯_ŋž¨Č :BĘ=\Y:‘Ķ&ņˆaSĄˇä ŦŦŦÔŪŪ^mnnN$5Ļ^Ũ{› Nq´Q+}Ē 6Ō<ŦŗIä*Á¤sÁĄ3O„õm†":EĘúÜŪ/“HiūũãįRŨâōō˛677'BéIFŠFŖQŊzõĒ=z4QŠ0čööv;u‡‡‡Ũ§Uc•ŦĒH `Ÿ‡ØˆBĐĪcėWVV&ÂMÖü›7oĒj\‚ļęŠBŗĩĩUUÕ“1ōۘīÔåĢUÕÎ5ĮŲĪ€­<ėéõë× °7ĮII@ )ÕLÎ}õęUĢëëq‰Āt¸Čũ”dË2ōfiܜąļSJÖrŊr.æįį'"‘˙úļˇĒęß˙d=§ÃôôéĶŽˆÂŲ"ĢâX’š™ĢĢĢũĨ2&ė‡R_‹ŧŦ­­Õo˙Ų?ÛÎ÷—ūÖßęöũÖOüD;ËÖ<ųšĒ!IÄžŨ_´ŠCĨ/ITŪŧyĶëÚŪ#QÖzÖßÚxûlÚŊŒ:rØCļA’<ÎĖÜVæ÷ö¯ĒęZîėĩCÔH­ŦųÖ}júÍ÷—/_öįHŖHØD”•{%ģ\__¯û÷ī×Ûˇo[Š´ąą1q­ĩ¨ÚÚĢW¯ęW~åWššįš/w×ģ{Ũų÷āÂ@Ų¸l4UãšĀØ+ā h´éOULĀDÃ6‘”z`)U°9ßÜÜÔ`0č ßĪČ ck‚ąąņÚtUPŌ,õīĶĩuĩ cO‚°¸¸X›››]“8õÚ6x›&W­~lÎt%`JxC‡õI)ƒŽŦģĮÉQë#ŖŠÍÖÖVƒ ápØā=+JqUcĀĄ/ž?Ū Ž#c3FŨˇœ`HU€{oo¯e%dDÆ Ėg™sœ ĪÔœšéî§Ū6@KKĢd–Í4læ@éĘĘĘD-v÷ urrR+++-ŗąq’T‰|ŒFŖ ÷ŦëëëÎqę^\\Ŧû÷īw„ŖjėT “[/ÚDģKrƒũWęōō˛Og­Ē.QĒO¸c9ĀN¤$Ą06rbŧ9€q•?āžj^īíí5ˆÔ6ų+dũÖÖVíîîö››€'đŽĄäÜXÚgn¤ėHÎDtíšK‚8ĘE0HÍüđÉhh 'Sn‚š(ęČŠČŸÎZJ͑oûÛŨ7rT~ë'~ĸĮ˙_˙Ú×Ēj,Ķa/<7+ĻpšØ~šO")Ö÷ƒúôėëëëÎ_ŅgK,rV6J§Ž“Ą]/_žœ`ŋ9žœį•••Ö–›7žsīŪŊļ㗗—_ÄŽÉERĻØÜ`k8×$Ē[[[Ŋ—äė"§Ríyā^~Gläj觔Žedi{{ģfggëÕĢWÁ ĨMšŅŨõî^w`ū=¸âĒjíˇŋmÜĢĢĢÍ 3ˆØņš˜ kÕø„V 6ē ˙b…S#ŒEÉcŽ…]îu||ÜāÜīąœÉ¤%ƒS5aBųY’/ņ¸žžŽŊŊŊ ¸æôģĒ?ž nģƒK0éØK}‰˲qt™RֈF&5Žä÷îŨk°iüƇ¤drā€DމīA‘ Đ9ĀÉJ-}V•I'ÛhCļŅиšUã| ũCŖ}}=މŽ=Y'ÛÎ Å^jK‚VŒ|Ę\sssS Đ8­ôöœ œš ˙šI­)1ØI­8jUc†Qô FéU`&¯Cr˛äĻgKĖûomm5HgDžč÷Ķ11áÃÃÃ:99ŠG5¨PéŦ‰Ŧ ’?ŒÁÆÆF]__7ûŠâ 6;;ÛëčķéÜs€Ũ9>>ž 2jhũr^8™åÔŊ›ãlŨ8ûR!ļâââbĸdæ÷đaUUũ{Ο×ÜÜÜDIGÎÁōōr=|ø°žôĨ/Õ|ĐöDģ“Đ`čü1ē΅ØÛۛ%žœœ´3˜IûãK)ÚwžķÚÚÚjF÷7žúÕÚÜÜŦīų…_¨ĒĒßøęW{ūĢ͝,›Su›osrrŌĩä_ŧxQƒÁ ĢÂTĨũũũ^Į$r)ë)#L777]R÷ææĻ^ŋ~]÷îŨĢĩĩĩ–ëTÕDMw‰åö‘‚ĩĩĩv2§ËôĒ0å{KKK} Ū|P/^ŧh§.÷†û÷ī÷~ ”ŗÅYĄ&‚ŗŋœœœ4ķäɓOU7c×8øÖĸDäũũũõėšCÖ7 a IDAT˛RŲŨõî^wŖû\ ŦōĘRh€YbTķ>ØĶéz™ˆ1Íīå•Ōå)!Š—ōĸžÍt€C˛ņ@&žQõųÔÖŌĻ“od?]\ŒŽÉ$ˇÔûû'€,hc&1ĄCÖĄacc\Rū“ÚëdSF}ž´4>uÕĻ:-͙ž+Ú^URžÜ”ĻO&0š 6¤ŦåńÍAũ”(æææ&*(ųĖl›÷Õô¸>—šôü^†čĶąĖžļéc2õWŽųí3Y•Ã{eō­Ÿsš3imnnŽķ˛=֊{¤nX.×ZUuô*Ë=f•˜›››‰õ;=?°ŽÖžw Á0b“åĮ¤SõĪäķååå–p`ÛŲI‚ÖČôüĩ~ĩ!õÚ*ķpŦÍÍÍOUNI[8??ßō¤”HŠTUۀĖ)!-;??ījBØsėp~×÷NNNę˙øņ¯ëëëú7ņĢĒę˙úɟėö‘Ēd_ŊzõĒÜ|×é9”N$[—ķČgœ Ą°ÁņņqO”î´Vsܜzî2Íũ­­­‰}Qt û"į2‹CĻoŲ{pVØÉĩĮ–qXŨÛz<ŸSU Bô›gVËąU+ ˙cÂvwwô“mpj”öã¨a`cjS0FUˇ€wwwˇt‘ sbšM–ķ KŦü†ÛwĸSUͨt$!%FõââöU H1lŽBæXbsZŋc=Đd´@• sģj\†ŽDGäĀ8kkkĀÉzĪŌĢËËËíÜXƒĨâĩīq`“āQŌ6įv:ŊŋũÛŋŨĪåÉĒL>Į‰ŪÛÛk‡ĘÚŗļHq뛿¯dtÎĄzīJZUUĩŗŗSģģģ‘(lũÛˇoûāĒ………ÚÛÛĢģëŨŊîĀü{pe5ė˜“ęŌaé:ÄÔAē—ä§Ŧę‘Füŋ}ė5ā ° ŗĻąÂvøwUĩáW5CĖ Úøîßŋß I JÆ8D‰-v€< (Ų Gá͛7 ĀŌHОÉHIG*å(ú—”čMyAÕøt[ԚĶĶĶŨØM2ũN띚`NG&žëĸ+]vÕøāNMøJGŽj’ũ˛öšÔßręvwwkeeĨ"įcccŖ+YĖĖĖLDaĒĒ% y(‹1ÍšpttT'''uxxX;;;-SĀđnll4ØÆž™[ĀYÃŌŌŌ„”Ŧjė\p<ōķUÕ%:ceĖŗė_öQ2€æĀg^`īc!  HFkrî˙6.äō.˛ŒíüüüDŨķįΟ÷;ËgX]]­•••ž+ĶcžīāŌVûŽy tnnn6 •marŊŖĩ#Ą‘ā|åûŠRp¸ĶéM'•ŒĄĒz.pBū‹OlÖų‰m2Ÿ,ī“uɎomcŗŌ.:åÖŊķ”nkųų'˛QĸŊÚėä]ķÉpyy9qrŠõô/~ę§ęúúēūĀßūÛUUõģ?ũĶĩˇˇ7ÁĻcЁ\ōɸ u||ÜāŸä*ß[˙>xđ ^ŋ~]gggíp[ æēŊäāā įPUĩÔ$e}æŽųĀ™DY3Hž˙ėŧ¨õõõ–ų˜ßĶíw¤8öI„{ĒRķ2$“īb}X3'''õėŲŗŪ ĻKŊ.,,Ôææf—čÍ cw×ģwŨų÷āâH>|XoßžíŠōŦ€ēē˜îŅhÔU*Ü+ƒ.ÎÎΚÕ€Ŧ´ŽĐ3ąœœ‹W¯^ĩŒQaevvļ•R›ĘÁ%ę1zŠaLæČŅŲUˇ!oŒ‰vUŽ_^^nm*Ŗž5ŋm*Ã`ä(yŸÁ`Đm˛Q0ūĒ$ĖĖĖÔÆÆFv‰ēLÜšmJ6$Zer`HōčÁÁA;<’Ņ€…”Ž`ömrIŋÆrvvv"dŅÖĻÎW~„Í+™Ų”đŦ­­M0Đé0TU;Skkk533Su||Üĩ]ķųųųfŲ0ÜĀ`V˜‘ČŒŅ  ͗ŖŖŖÚŲŲŠŊŊŊ›ŽúŊĒ&…YYYé¨ ÆQōĩö‰\xWāJDHe’?ū¸ÎÎÎęÁƒõģåB4ö$ Äaã°dŋr$z]eŪĮØŲŲŲé9™e÷ô“vqf9)kyoo¯#=æmŽįÉÃXv}#Ã;Šjq˛î9Fuuĩį°Í9`Ų2ä Šũ777õŗŸ86˙Á's $ķ’#ŖM;;;õøņãúžP?n𸸸XßųÎwš‰…áÜČuĐ÷ HģãããŽäqāČ šöĒąæķk>"$čØENNNę˙üĶēū˙劏~îįę7ôG{ŧōļ”Âmmm5Áė"'hÃ9:>ė考Ŧüh–¸+ášÚŽ-ĸ§Uˇ‘@Ҝ$&†ÃaWĘHŌtá§x#öööúŧ{Đ.ĸ]U’¯TUmk%Û۟ŲާŊSŠßŧ“mĩ‘TŲ#‘_w`ūŨžîĀü{pMë56l2ĸUcŊsUM°] MÕhä†ĢdœßšW&éĨ–ÛFĸBÚ@0’Đ€IûUãĒ6~íađŗ”ú UãšāîĄí~fÃQ%&ëZO'¯æ;;]qÔ|Wĩd0mĐúŌķggg{ŗ!đ{@ŠĒĀr&0=‹‹‹í˜Ų<3á/eF~?ŒŦTbFPDDKlhŪøąŠč/}K*@ŅsFRWí^Ž<ČĖũ\ŪmērŒsmøų’ɲ¤ X{~ęÕķĘÍØ2g“•ö>$Uãü”ce$ĀsąoÖ é•(•1FãˆNŗœÉžįüĪÜc< éÍ>ÔĪĀ[˛´´ToŪŧ™XoiƒØšd@(Ë$VU;ŋŪ×<&đ}U5>뉭SöSpÔsŒRš§_ŦŸ]YŠ˙$$b~ŸuÍõ39i—“uÍ7ũę=Ķ6sdĻ5č¤UĘōrļ ›E7T‘zķæMĩũJ é]˛H€¨æ?ũąĢÕÕÕúÃ_ûZũæūh;Gėū5žé|Čo0ˇTĩIĒÖČâڗ…80)ĢtBėééi'ĩ‹ˆŠRâyG'čęŋķķķ&h*dŠ’Q9ÅÖY樐?‰xga‰ŦĔv8kų›īiK9YIi›ÜŲŲŲžËöŊ;0˙n_w`ū=¸šĒ1ˆ ĩžž^/^ŧh6)u— ŽÉ2†ÃaëũĄŊˇåŅîYAĻjĖđ2ĸd4@×ÅÅEoö´ĐXĮÔ¯c%ąõĒŧlll4CãJcæ€uĸ1î— mccŖ7:EZ^R}pØp’͈€ÚiWŸŅí oc„læ °}Ææ-/ Æ °uḔöÔÆNo“M逃jŋĮD ]§œÄį”MeGŖQkéSåL€ÃÃÉ(ĐÂÂBkîŖˆvM¨yyš%TéҤ^__7ãUUũlĒųZ%ÃlŨÍ5˛°­­­f‡Ãa׉Zööözė8Ŋō¯útŠDšôˇÆ}ffĻåEĸiū¸DlĖ9ķ9%>ŗŗŗ]ac8özTVŌ{š“dæäÁÁÁDŪ‹ų*×A%’ Ūøs8â" ĀØtä ›ĪĻTU™ŋa|iļU QˆôYCÚ5ã˙ú'ėŧąˇūgff:Ąņúúē%XõÁÔ÷}ß÷õÜyũúu?7čÍĮ<ÁüčDYTD!•&ˇPīvž„š~rrŌ§fŗ‘iĪ퇸~ā“äØ_˙‘é9(ĸĨÍÆ0ķ¤č˙‘õėŲŗ:;;̧OŸÖÃOĒ™œ6kAHQļŠTîɓ'5ę[ßúV—sˆ įÂŪ°鸉bX“€ōüü|WûĨņ}‘8d[%JÉθ—($),›ƒ]?<<ŦÁ`ĐŅ ũyttÔ¤9°¸¸X;;;UuA`^ž|Yw×ģ{Ũų÷ā–ĢÆĩœieũŸžžvx—ˇŸáÖÔî^]]5p÷9 ffė„€%yelƒ *™ÚĒq’VÕ¸úHžc™!EF+SU ›¤‡´Ã&ŸáĪååå‡:wR%Õ2!üísÉÆW5Íkeee"oš5ŧēēę(‰į{î ¨‹ 0Ū6@ąDQ!n,‰ŒäŗƒƒƒZZē-Į–u›4ŽÕŲŲŲÃę=!Œ”ļŽæâÁÁA;dOž äWUG8X—46Ņ“““eoßž­­­­nÛņņqŗuṱΐVTUíîîNĖ?N@ĀšĶĮ)Á2ļØũö¨éŠ,s`VøœC‰‰OÆ:kSg ääĻôÁ÷Œö^î ‰LęÕÉSNežnllL84ž‘k$Ĩ)ŅâŦ]__ˇũIf8Ë*Õææfŗņ´ālš5ÁvOķœv~úŪyP]Ž)‰…™ŅhT˙Í'ēųŋ}m.ĘMĘCļfffęéͧ}(Ņ÷|Ī÷ôē0Ø3öøėėŦvvvš}fKęã?ŽķķķzōäIíííÕÆÆFÛbŌ1 ŖÍî!><ΜOĸôissŗž={Öļ+åI™Đųŋ}å+õoũō/×÷ũëõë?ō#5ū(ÅĢ'ôsdÜ i"ĮDÉKގķ6H@Ŋƒ5ŸĨ†Û,Ņ*Ō"ēkũŲ—RBĒ=čĒÛŌ“ĘUrRÕÂgŲ%s=ŖƒČ/öĶŪ¤Í°/^tŽÁh4ǃƒƒÎÕ ĨG–hįŲŲY¯YļÃÜf“2ĸywŊ{×ėŋü#w×ŋę— ĮfgcĪŌ’UÕ SC2ábˆ”hôŗd€< ŦōoUÕRßül˜J'bTĩ=Ë VUƒģ,æķX&ī”ßÅBiS~ĪŋĢÆ!íŗŗŗf?ōįŲˇÚžÖŧ×ôxhĮææf­­­ÕÚÚZŋkēmUÕĪČßųŽžˇQæ%r2}  īc ´d;Ķ1ķ3íʄ?÷S‰C’—ņNųVjKs|ÍŖĪë߯˙§Û›åî|w~~žOŨ Ôį˛_]îU5Î#ā°TŨęoÍĩl'Åũ=Ī;g;ôĪôŊ3\Ÿscz,a˛đūLŠ?įįįü—s͘îsëŌ}<Ëûp†1îŲÆé~Îļä;åø›KYĩ…vÛŧËw^ )ŅĒĒN¨ÎqČ~cûü-ĮÃ|ä˙ĶOßI;fmøžwØŪŪŽ§OŸvä0Į;ĮŨXgDNŋbdiąŲ7&ļ7Ûå=éčsūלyö;ßSģŒšwûß˙ԟĒĒĒī˙ú×ëŗŽéū6NúBŧgÚcޞīųÎīŦč¤īÍ {ī˛åže/œžgšī¸ŋbŽŠ´ũ.ßI[’kJŋ›/l„ûLĪœ““ŽFcÜ=īđđđSk ÷ûÃÃÃOŲĶģëŨģîF÷=¸°2’ÄvĖCV’ɤUÆWčƒ'(á,?‡=t°’˙3˜ŗŗˇeĩ”7IJ`Čą Z˛*Ū…†q0ÔãĮˆĻÖÖßîA˜Zm!JlëÎÎ΄4giiŠ%AĒ͐Ē­c=H0‹˜RĖŖwõY’ĸ”Ŋ~ũēĢķTŨj>_Ŋz5áäht–9I€œ'Vt}}Ŋuē)wŌū•••:>>îJ>Oōb#2†Bû Ô0ÂôŨÉīīÁ<BŨÁ*ĨԋsVUŸJÖ37É2Ēn™4ā†$¨Ë0=ĶĪ%Ũ9§j|Íîîn­­­uųÁÁAƒ0åá2²ŊŊŨÚ坝.ú””üjffĻļļļZŌflÕ¯šŦ}^UbŸŸŸŸH0Í IŽF]÷÷÷ģM âUmJ)•yũėŲŗūüŌŌR=xđ ÚIđ/˝vxŽĪ§™#%cœBku~~ūSÎ"ÉÜÚ9T5G$ÉM) ĻūŗOÚú×?aŧõ3f~~ž“Āõˇ<”Į×ŖGęŖ>j{‹´NõŠâŌŌRKŅDīRzwppPOž<™pŌiēÉ!û ģ”Õ°Ų"kjĢĪĪĪ×ŖGę{ŋ÷{k}}Ŋ>účŖzõęU}ķ›ßŦƒƒƒ^Kú>Ŗ ŋū#?Rß˙õ¯×—˙á?ŦßøęWģOÍ]Õ{†ÃaG.E1ŗMæŲķįĪksss‚Ũ& U˛4判xl°5åôÖÃÃÃļĮĮĮYŦĒ֘g;T Úßßo‰iŲėėlWsRAȚŌQ)ëĖūÃöfäÎģÍĖĖÔŖGznėîîöü÷l€žmÛØØčÜtQr’žģëŨŊîĀü{p} Ęr&EҊVUK/°Y€ ƒ–ŒnÕ8ų/Ĩ<$)6RƐUUcyNāŸķ‘`y0LlúY-Du›^‚;@ĸj\éŖj\éĀĪ A"” 4ûÚgŌĒ1ģüøņã–%+Ž9Tēđ2ĢBļBŦ6XōĻi°4777QmČÆã~tüæ0DŽâ}mpsssŊŲ`eõũŌŌRë”ĩÄF›Ė—Lšīywēaķ–\"“9iŦõ'V<“ÔŒĨę?U5QéE=ėËˡ=×ÚL–K›čĸũLŲ?ŌŌ¯­­­Ū\ˇŠæ%'‡ŪÛŠĮō;Ļ“”­á÷@beoÍĶŪŲ&˙ŅGĩ¤%Ĩ'œO훺b(ŖŅ¨ë˜jĀr:ˇž™UŅsøĶ!]\\Ŧ•••Ν0†N9Õ÷Y:hŦ˛ŋ...:ŠRšÛ,Ÿú˙ą÷Ž?’žįyįÕUÕ]ŨÕÕÕučĶôČ1%Ō”IɲD…’VŠéHi+%Ë ÅâHđįŨ @‹öŖ˙ 1$Ȇ9˛d%RDĶöŽ E¤DĘT,QtčrHöôĄ]‡îĒîŽĒŪ5ŋģŽ÷ĨdÄĀ.v=]/0˜™îĒ÷}Ūįp?×}Ũ×}?ätPũ¨P(čßŪąIŋuĮšæÔXžSŠT´ŧŧōäU˟K—.ÅI¨|„m6›ĄqÆv2>$¨˛Æ¸?}LšÚŅh[zؑÅÅńm¤bŽ DČōō˛666ôž÷ŧ'rĒļļļ´ŊŊ­ƒƒƒØ7vvvĸ’ĸrĪh4Ō~åWôĶø‡zßĶOë˙úЇboÉfŗÚÛÛKô}‡mķëââbôs‡deƒ~îvģQų™ ˛$˜ųü´ž<„Šįp‘Ëē•ωôŧ k™ ´ĶĪJ988 Īũ™cü"[Éįķ*•Jz˙û߯““}ûÛߎŊŒ<l02CúĖ“y›ÍĻÖ××uzzũ2ģîŪkæ/Āł÷pŗ¤0 °,čĖŠŽÁFSZ(BÛÎψޜu< Ŗ”ËåĖ Ėë9Ö=ÍĖÃæ¤aЍCÅ6m˜CĒä`°ųžkja8؈ūrVąĶé$Ę.{ˆV–ˏ›gC÷°~6›ĮŸKޤ„a')˜û{B"c†Ą—‰kÎTē([†›Ėœ INR€'´Ûl„$DS­‡÷C˙ŒĮĄ)$‹:膝XV†%øRĸMm:ŽZm$ƎŸŖáF—L3%é+O|å˙éå÷˙ģ  ŧžžŽnˇl$,}ÃÚŁ!ʇCĖÆ‹õŒsZ*•tíÚ5mnnĒRŠhii)ú|iiIoûÛÑGËßl6‡láH˙āŠ§ô3ôGúđ7žĄŋøĨ_ŠäjĸY8ëDpIÖFËî‘ō3*•JD5Ũ†SÆ8U–{ N•¤˜÷Ø2lßééŠjĩZ$œŗgmll$$mN@¸céuttßÅÁáĖ "øZ X—ƒÁ " 8î$ųĩÃnąŋAŌu:Ø—¤IšeūāÎŽģ÷šų py• ˜.ĖlÔ2âËŌ0\T `ŗp)!_Ā* ā9ôE2ßwæŽM&q<xķŠ.cšG:áÚI× zĢožŧ/ŸG&ÄĪ´Í?C?Ā$Ņ&†ÃalZÅb16ô˜$O!aÂij6›ąiÁČx?ÂÖ:Hây0AŌôØ{¤WüŒöQyÁ+朞NN DXr€Ā=7>hÍrm'ãíɧô;@HRÔØ–”`oũB[Jģ`Ė8MØûƒw…IƒÍzüˏĮ\¤ũ0fĖ?I!#á]<éŌeî18(”[dNÃîņLŸ3€ĖŊŊŊÄÜôņÅ)G‚A0_|Ž0FĖûņxRŗ›÷A˛Āģ0ļĖ1/ā‰˙{¡ŋˇƒmOĖĻ>c’Ëå"Iš1čãčÃÆûü'ŌãÉļ8{0š€RĸTĸōÄ{Ī_āšų7D…úqccC+++ņF_Rė„ũÃĄ'b §YK0ÉŪ×$íü‹ë0J[x*æôû}=ü…/$ÖĮžz*‘ÄĘ8îé7úû@$ÆIiZŌųŒæĪ>đ=ö­oég˙ĶŌ‹˙¸rš\DS°Oθ{‘ڂũÎd2ĸ:•G§Üabî{IRúÜIgė-äQK"dŧ+ö‡Ŋ9GÎ vܓa‰ū!ķYZZŠv2îž7@œĮcŊōĘ+’ō ÖŅqžÅû@˜øU*5‰7ģîÎkæ/ĀÅFí&WRxüÆĖåręõząQà ””#ŸŸŸĢŅh„k-Mš'ÔKĸ‘Ë>0ôãņôTC7@SŒ/ĄĪl6Ø\uũ1Ŋk…ŅfS"m(ōˆL&Ŗ­­­øš¤„6›û {"É GĶ“§aė98 ”ĪįÕh4BvĐnˇƒ…ã}p˜ĐÁ´čcžf6QĮAãK~ũ€´FRĖ9˜Wæ w}}=NXN—VõÄÃŊaâa҉ã¸< Į€úÚŧ#c ¸ÄŽ {`x G?…đîQ3lßōō˛>ō‘čī|§žųÍoę™gžITęaM1ÆČ˛÷˙îNyYXtėJš\ÖģŪõ.mookmm-ˆ ėŦÛ/ÖĻ;}:;;SĄPP§ĶŅÕĪ~Vëw>˙Ŗ_ų•ˆžår9ß™k0ø.q˛‚ąúÎãGiÄ|>¯ŸũŖ?ŠļŧøņëøøXįįįul6›a߯_ŋÎĢ~đƒ¨^¯GŠ]ō?k¯sssZ[[Ķw?ö1Ŋ÷ŋü—Xįė/TMâ@>ÖŽ{ō§ķķ퍰E˙"Y„ÆšaĖęõē*•Jĸ‚“K/oŪŧ'¤zi╕•8UG—ušFʉá’GlÕx677ã=p.°yN!“Ąú΍7ŪRĻ^š&LW*&rcØÎÎÎôę̝ęđđ0=ž]wį5ķā‚ĩĻˆŞpÃâL:?‡Ápv‡#CŲ=îA 9B’ÜS’nßž-izz*Īōōr$ŽFŖHė‘Ļšt 'ßŖ]ž‘˛1¸AŖmIWc˜sú#Ž íuíæp8 =,€Iš˛.€׉:Ķ; ¨"§€ēĮ^c0].—ŽëĮ"l8Qa`Ķs­<ĖŽāÃe7lŽ^vŽĖĢūGōФÅüŨétbĖpĸ\ƒŒ.›>§Ž9ī')Ę’¸IûØÄaÕa ‰PB<,Ė#]Ģ&pČü*•J‘¨ŧˇˇ—HˆĻ\—GēVWWc\p ˜ËŦQžqéŌĨĐ˙Xxå)dqČ>†ÃIr$Ņ*?šįŧ'QÖ9ķŒyG$&›š PظDlmmM‰šÆįVWWCŠãN‘‡‚ŗ‡C€3L”Pđ§ßˆ*Ņ˙”_ŨÛÛĶ÷ŋ˙}Ũ¸q#@n:ŌÆøąú_ôŋßY?$‚ĪĪĪkqqQkkkēté’ļļļBvķJHŽ“Fۑ^ĐįÛ˙á?h[ŌÍúOÃÖ-ŸJŖŅPĨR g˛ĶéčôôTår9@ŧ'gzôæŋūÂ/„Ôä]_ú’$随~4ŲYZZŌÎΎ^yå]ģv-$8/ŋü˛ÚívôéÁÁ2™i‰VlĄ—x%š÷Ũ}LīũĪ˙YĪ?ņ„VVVÔÃä(ē IDATjĩÂŪ‘ƒhöh$$ R- ‚‘ca{Z­VŧĨ/aĪ™2ĖMwÎX8éĩZ-á(!õƒ0"RĀ=°åTŽqâÃÖyDÎŅŅ‘Ž\šŅ&JL˛Ÿ°ô^ŪØĐû˙ôOuõÕWUđÁˆdF#íííŠĶéčöíÛzéĨ—ôĘ+¯DRôŲŲY-Ø0Æäôô4ЏäéÍûîĶûž~ZoŪwŸ$…”ˉ"ė9īÆ;Āúãė‘á™DU`ë!Ø p6‘Ũ{EôûũDDûŨkˇÛ g”>đšüĖ5~OÅ'ú†5t~~ŽršÉšŦgĸš€qöÄŨŨŨD. ûytZBNüTĢÕ ˆúũž>ųÉOūíĀÃėú;q=˙üķ3fū"]^ąđ7ié¨oKĐ“Ķø†ã%%KJ @ĨRyËá5n œíĀKĶ2|°å0¯~´Ŋ4aÍŅ0Ō6 ¯”Ã{$xĻ,x@ŋĪđZāî°ĀÄđ1q-g¯×‹J€JōIôÕô•ˇ6ģ^™žô<ŋŲ.K‚­$dî@Ł-}ÃĻé}A˙9ĢÖËÃķY˜až¨8 îč–i€ŽžEFŗ h|2ŽŽˇv-° ʅĻ/€ģŸŅĀÜČįķēzõĒ~ę§~*ưčũČwŌ!wƂwįŨˆ$Ї‰bŽĪĪĪ'Ā´—?'U}č_ẗ́ôŅõō>8ę’âwȐyĐۃŽ'•ú\sā ¸wÖÔ×(}â ÷ŦUŋ¯Ëŧúûŧå˙Œąŋ/˛CÖÜ˙vįŨéÃRФbą¨Z­õ×}Œ 8­Œs ­7×Ûūā$Iķo&ĀöŽÜríŗįp]éį5¤å=ŧd÷Z\\Ô_ūŖ¤ŗŗ3Ŋû˙XŌ$2ĀØPˇŅh$ĒCáØ¤*îéŌˆ ÆėįžúU=÷ŅJš&{zeÚÎüĻ­^ö—{sOHŪuëm —ŠõO[Ķg]ĐĖ}Æüß+01ŋ¸dÕ/ō+p^ūĻŊ~vũŨŋf`ū\°P’ĸ:ÚŲŲ™ÖÖÖ›ā0†Æu°$9ør`Âsa2Ĩi o˜ a@îh%1ĐCĄŊ^ī- cŽ”Ļ@íĸ?‡zËŧŦ3L(īâl Lúe~ÃI=r6[úLšÂā´PW•aÜØ`ų. a.™J;l€J4Ķl6~>€ˇģVĢ%žøŋ;°<€H/UČ<ōü6(BØlÖ°_…B!ÆĘ™ÍL&U„8<–XRBjSĮ82\.…,ōqDŧTš‘”`B/„Ö™KJĨĸ^¯§›7oęøøXív[?üá뤇Į]’@>K$Îa÷úũžúũ~Č×XOŦ/ĀãééiĖs—@0Ž'''* ÚÚÚŌŌŌRh…=Ō‚ĐnˇH0ī‘u’H°6™×8lh‡yīL&@ ?ë,}r)Ŧ;sۓŠYî,Ŧj,Ā’ķŽŒīââbÔ\—¤ß^^V%›Õũ÷ßÕ]VVV´ššŠ\nZĄË!ų#MNĀ-‹ÁāŌī{úiŊūĪ˙šŽŽŽ´nķœR”ČŠ`^o4÷ô;īFĖŲŲYD Ŋž:ų8ŒķW’žâ ---éŋ÷{zū‰'Žĩ4=9Ų#g8B$vē”…ßc[ôÜG?Ē÷=ũt€čl6Ģõõuår9íîî&rs–——uīŊ÷ęúõëúÖˇžãįÎk6ŸĪGu3ä&äƒąĻš/ŌÖĩË,}.4´đÜī÷uåʕČßyã7bŊxōž}ĸskkk‘OĀZö į;K%l!{`ē\įââb8MD+ąé|˛YiĘģûšÉl.ĀõÛŋũÛÁšžwžüč M€ĐĩĨnŦŋxŠE? éŒ$ œ1@€$rI‰CE4J§Ũ$'’@•ËåØČėäķų’mXÆdĶF펈Ë%2Ífķ-L?—4Äé”$rÂ7›MĮf‚nūüü\õz=ŪFˆĶxé—9‘č:779xˆ>Æ1csÆ9bC`1~Ė žG5/•ÆÆ‚ŦÉ5ĪŌT2q~~Ŧˇ āĪX0Ž€<¤ °Z0ī$TžŸŸ‡Šį#?Z\\ԃ>¨~đƒētéRĖ]d~Ü:šnizØÖŌŌR$ÚŅl |ö÷÷Ŗo%E‚(˛6æ` äåWß~ŋũÃ<Ą­ô!īMû™Ãé¤7—Â---ŠZ­jqq1ץĪ\&å!~æŋ'RÆŧ9??×ęęjD XŦegߑ¸ąfų7Nk–5ˆü g°čm`r?ƅ3+)ęī#CŌ÷?ĮúŨ˗U.—uß}÷éá‡Öĩk×´˛˛ĸĢW¯& ĘÎ:CīN%këøøXīøâuųÆ ŨūßĐųųššÍf8j0OÜ'2q™ļģHÍzœ ´ÕHāČeøđŗAœi>ôŪõ•¯hãå—õęÕĢĄé&‚Ã{ōŽ<Ãķ>ČMÁŲrûúŊ÷ęįžúUũõåËiuš š’´ŋŋ¯ũũũlŅf>į;}âĪrų!ļ°ĶéDŽŦŦáÁ^G{™W)dŨũôO˙´ŪõŽwi4ÅÉĢ8c ęõzĄOLgŗŲ(€TÕûĶeZŌ´Ž}ĢÕ Îü`=´ÛíĐës_$z.=F‰6}âŸø[ĸ‡Ųõwázūųį5;ė\Îj`l`Ø}ãô ˜RnŪüÎG¸qcį:sÚhâ;ԏĮ€âdHI) ZG˙=΂ëøĨi8–į´ÛíDũ„vÖY~įŪô+lޤØĐad9čwģ¤Ä˙ŲÃsų}ŧn1Œwú}čC/+逄 „ÕûĶuÅ<ŋŠVhlúx*˜lŧ2w¤\ÂĪ=Ĩii*ųđöō‡zÕDũš\NWŽ\ŅÃ?Ŧ÷ž÷ŊzôŅGõĀ2—'Oû=qVŌ'Ũ˛éŖEƉa-ē\âޝĪÁ!æŨxwÆ0ČķéK?ŧ PëåNi˛7l‰^ÔjĩDūëpÁØ{2í`Îá Ņ¯Ė "w^ŠÉĪBđuÁ˙é O"fÜ`eq†xO[@šëü)+ų[wėĩãˇļļ%Ŋ\¯Ë-ÆãqĖ7Nžv)Ũƒ˙ņ?J’öūÕŋR&“ Įžĩäš ’Ū"WJKû˜—Rœcō™č3’"ũYiŠ…×ôĮúƇ?,IzøË_Ž}VÛߓī­ŦŦ$ĘcŒ8­9]ēX’>üoć,`ŪĐßDoNOO‘BėDz>ųüŖŊ$ãķdrŽs…ßš=ųq’ÂÁ` Db*īĮš"r*MŖST(cb/AãΏ§ĒÂa¤]‰sPĪ\äû€z—¨ÍŽģīš1ķāúėg?†•*ãņ8Ø58ŊęĖGēV;Æ đĮ&I2'Æ]1˘¤Dtœ‚tR'›@ŸÃWØ@ŧÄŖkŨ™Ā(ÂFņ.lް´°gX=˙fC¤Ķ6˜zŪ&ŒįPŲ‚ ž v–œūĸËårH |Ã)rî2'Ā7К ã"íܰáJŠ÷eŗáaŗFgīōĪ)ĻZu„a\`§pŧh ‹ÃS3X3´֚ qnn."!ÜĶۖ––ôČ#čЧžŌööļĒÕĒ~æg~F/ŧđB‚õį]p؉åķ“S\Ûív(O&ų4“Éh{{[ĨR)΀ETąq¤ŠFŨAĮÜܜÚíļĒÕjTŌ ŸĢÕjČ@ŧ" k čå)a*f8T"Bâų(0ÃW¯^ų‚SQ,,ž4uü<ŌÂsŦMgi äå‹ÃL´'rssSĨRIėíéë<ĸĢW¯ęÚĩk‘@Œml6›áÄzž svœļ‹E]ũėg%I?üÄ'Bę€Ķ‰}qM8ŽŦp:ņŗVĢÅģb‹°Ģ8"‡‡‡ĒT*‰rļĖĪQbü°¯ß{¯ļ_yE?ú‘öxā- D™p!ŋBēÆZÎfŗ:>>ÖááĄNO'eŒ_\]Õ};;úŅúzŦWdz0ΌsŖŅPąXT.— į€yÁ¸;9Äs)A‰Mâs8ˌéŲŲ™ÚívĸēXģŨÛâķŽq"ę˜…õÄoÆ`<ĮaMĖoƝŊ’=gnn."VKKKÚØØˆÄ`˜ą7¸S3‚”•*nŦũÅÅEũō/˙ō˙8p˜]gŽįŸ~æ/ÂõšĪ}.ŌFw ĸ …0Ļl’â÷’UUMü—Ëå#G|yE J b´N†KD`¨ŲĖ\oŒ!§F5 ‘g˛Ų9; pĨŪ줨l`lŲ'Č …B% 3īî‰lH œ5u  ƒÉĀtrŦ;FœM3Å=aģ€0^ȍ\ë ÃIABB%—ŸāŧĐ'ŖŅ(*Š ´8VķķķQĨC4 °ļŧŧŦršīˆÄĘe^nuuUÅbQׯ_×õë×đčÆÚßߏÍړaŊÔ)›¨ŗÄH–——Ãq JNĄPĐõë×Ŗ%%<%%ƞ K€{ÖĻGMHĀÄéenĸ=öRxÎÆõûũ`—ûũžŠÅbčŅ]ƒ3å•Cpô‡Ãa”ąŦVĢ*‹Z[[ G…ļ#]p6” 0 iĀØ;;Š€$†ųĮį\ú‡Íŋ}}ā´:ãŋ´´¤Z­ĻBĄīÁ<ĒVĢzÛÛŪĻãĒ˙ë­jĩĒ………XCŽÁæŊˆÆ‘W Mĩâä᜜œčōīūŽ^úä'5úĀ‚‘w&ŲOœ#5åĢJlQœ$/UčΎĪÖ2ūĪųķķķĒŋãzíÚ5Ŋįk_SķĄ‡ų=1G9ÛۘÉdĸt¯kė]Ūø×ÛÛúųo~Sˇîš'aą™”åū‡‡‡Q…Œ÷ŽT*ąäršÄŠÚØ œCß#°Ķ§§§‰Ä|ėÉĻė]ŧ'ö‹uDY(öˇT*iuu57Ö3ÄÃp8­Æ'΃Ŋ–õŠ}ÃQÄ!f-ŒĮãˆR’÷Å;ŗVHæ;30w^ŗj6äęõzĄƒö'Œ& VĐ[Eví š'::k%MBŠ^éŖ ûÃĻ5N~œņuŊ? ˆö´Z­¨ Čecu @¸’Ä^IÁūt—'ͧŧ#ė<,)ĶK ˛ššcÆĄ/$‚&Ґģn +cÜ\&Ā€Í§]6âålNœ–Éœe.˛aJĶĒŧQŗŗ3íîî*›ÍjkkKõz=X´gžyF/žøĸŪxãp*qql———C“_­VŖ‚’4ŲŌô@3JĘŲx÷ģßšU`#Ī“nqV]âЇY#AÕOLöhS.7ŠžFיčųųÉá5” ä0-ÅršŦzŊŽĩĩĩ„4e<G"3`ļ\.‡cpvvĻ×^{Mår9ØĐ´m ZD_R۞ú×årYŌô¤T´íœ5ÁīČß ]+Īŧ æúúäč%æ$Ō."[ô/Äķ§ˆ9‹3ęė)2Xhǧda‚īũüįõƒ§žŌé[AAĐBį 0ĮfxŲYwčq€‡ÃĄĒÕǚÍf|.]5inn.ŠōņŊ|ųr8ÁDh`|ąĩ/<ų¤~î‹_Ô÷~ņ#Ažy™€ķ‘Īįuß}÷é‘GŅ‹/ž¨[ˇn%*á‑M4ˆ$Sĸ[Ō°—J%ĩÛ툰zRĢįųėīīĢVĢˆå!s E`ՑZ1fĖĸ,~î „ÂōōrD!ąOŅ.ƀ„X—H‘#˛´´ķâ†ũÃĨL.§ƒ ™š^¯¸gĪpgΓĨ———cŽú>=ģîžkæ/Čõã€<ĀŨÁ&`‚+­••! ËYD)YĒƒËŊsR2ĖKĨÛ @ķ’–.įā3g/mˆ„HJ”}„Aō˛réįû…ŖÁĪ1Œéļ˙¸~v) Îæ}Mø†Üį k|ĪõĘlÄi=>R>Īfã wŒ†ÃaœÆé,4›1ķ°Ã†í·ąi1ĪŧũŨ¸†ûšiīésƒūe|Ũá1ĻonŪŧŠŋúĢŋRŗŲTģŨÖ͛7ŖJ3Zđsú‹šãe)i,=’+Izũõ×ã`$.€ cO%•ôxR‰„ i Î ũEŸįr“Tq@ÉĶ ]™L&X<Ɩ~æ3ŧ#˜Cg1sØžÕÕՐjpxÎī͸r˜—’äŊįįįuxx˜ČŨ@!MOãtĻPĮ{pš'zØÔJĨrAÎņxųīøâõÚ?ûgĘjZ2‘õæēli* cœø Ž÷üüŧ6įw$)äŽįÂĻŖn<Čߥęõz´-Ŋ6¨ˆÄĻ › BŊrNžåžéļJŌģīüä,5ãÃü%Obss3"%E4÷ũøõä˙ąūüƒ āë•ǐŽ) Á~-fŌv–ŧÖŖÛIŋkÛęĨEÄal¤kØ=’F4…īzŽkÚ?—–ŽBŽôz=ŸŸG$ĘņéĨOXŖQ8î<—}öĪēģ¯˜ŋFIš2Xhgų9-eŗ`„GŖQ°}lJžl ËírX~0´ŌTAŪÂ&L8’+’oˇÛŅ-ĸKH´øÂ$I˙ũ˙cåîŦ5J'5$ čš'îŧ ‡C]šr%¤y8ô9räaÎææķų˜ĢäI°ēļļĻzŊŽnˇĀ’šG"SÂn,,,č[=Ļü؟é=_ûš^xōIĩZ-UĢUõû}ĩZ-]ŋ~=ôŪožųĻžyæŊūúëŅwD?ŽŽŽ' §ûšËšķ„c"dîĀáĐy$×÷%d€$9íCßOĩžZ­ōŗ………˜gHņp(*Mķŋ°w’b_õb ŧ+€;ĀĮ`?t§€ã…Mä^nCØWæįįcž!bmĻzg×ŨuÍĀü¸Đm;ËåF Å&ī ŋ8 å{$7z˛k3aau=tQcs",J)5Œ%˃W~‡"ûũ~cŪ¯T*ØņÍMj.—‹zÂÃá0QŋpMTáčč(Ļ`ˆ%)ĘÄyÉ1iZŒS$MCækÚėI§$ôēÆÖOåŨZ­–666â]$%jL{9J68)Yû›žLö—ĻahIđØ,H¨•2 æ€K‡$…ŽTš*†Ö힤5ŅGD\ŧŌēUĸD%`åԌū­[ˇĸũ„žQŒ}ågĄPĐ‚ööö ët:’Ė"s§Ņh¨P(¨ŅhD40L›$Eĸ9Īeí¸ãę›?öÍ7ߔ4qލeŽ<éøø8ž^Zš°~+++‘ëĐī÷cŊÔjĩø/Ų ŗÍŊ¸/ķÉ8™#ų|^ëëëą>%÷ߌąX Įˁ ‘€ƒƒƒČ…ĄmČ kÔéßVĢ9*8“€f¤VNHlūÎīčÖ¯˙ē–-'Í%8œČŠ3•Ífupp +WސGĸ÷ę§?­yMĶõõõˆD“+ÉdTĢÕ"ņšP(hwwWŊ^OĨR)æ˛;ë86؉t˛|­V ‡ŽÍĪON˜Æ~čqļ‘ā …HbugâÛ˙āčŅgž ۉ}€}ßß߆žŨnĮÚ ´0!"#ų|^˙í—Yīųō—õ­ĮK/Á#R ‡8ņĸkØ4ûŨn7q:4v{4E~'Œ3w™Øæ#{âééŠzč! ŊņÆÁĸĘqÜîĐ_œLK[mÂÆQčųįgā0“Ķ‘Édtųōå ‚č{H˜ĩĩĩDžÅėē{¯˜ŋ×ęęjW6M \ZVƒ°8ģ@’‘¤0(v%Eø•ÍŠûÃxÃ6¸m¯¤Då—Rp5Ø4HruđØëõ"ɐD–ŋ¤`;lÁŠH č%a÷Iz…š°>]ËęåaŒ<Äh#áͲI—gÄ:::ŠÍŠŠ&­V+œ7Āúd€9ÎķĀĢ$^Ņõz]WŽ\ €Ļ8“É›ÎwŌd3'x&`‚>¸˛1ĸĄ%‰SšĘYíķ>D x’Á$ĖMálúVœHkûs|āsËåĸ_'ΠONOOU,Ȓ$…fœ1†žMR(߃ũG˙Íŧ Á¸Ōôš¯SÍęęjHrš\~åígÁ}8ÖĪ(—ˉŠDhĸI\æ˙8õ0ū8=țČí`Žđ=—=¸dŒyĮ‹EmnnĒßīĮz‚ †IfĖi{íÎZoˇÛá4×ëõe€<cĀ,˜ĩ•Īįĩõ™Īh÷_ūK-ŪąƒĪÎÎT¯×ŖŊԂgŒx×ããã`ŧ;2¨BĄ ^¯R Ūus||k‰hŽ;#ĢĢĢ1Įsˇ÷Ū{¯._žŦL&ŖW_}Uûûû!aĖårúƇ?Ŧ=ķŒ^xōÉȟZZZJ&)œ/JpbS! p>÷÷÷ÃĶ/ŌTCN^Î7ë[î6Ņ#šŒ3Ā™ĩô§ÛíFu-ė"Öy5"'nŊ o‹“‘Ëåbū¸douuUF#ڌėû9pįųčķKĨRØ)¤ņxŦ|Pī{ßûôĖ3ĪD>s ÛĀ˙Ũé™]wß5Ģ3.ÃIXh -XITŧ•%œ…q†Ą%éZ@× …0Z°(T[áû€i*lH ö‡üÅ šG.Ō†A„õDŒ"_€X’GÜÆÆF°ķķķq §DærĶúØh8;; P ˆ†QfsáŪÎ0‹ÅĀĐW8+|–Ę$GŌN×ĘĀyÁAc3¤ĸũ„äį‹wpg ĐĆ tÆįF™‰"ã,%Îs“ųpŖo]ļä‘ >ë˛0ŽŽŲE’¨æžĒč?€čėė,’[}>ā °žüdJ¤/î„Q:~"eđĩĀ@Qŧ`Šs#N"!ɨDv˜wDÔČû(‹Á€ō;æ'ļ€ö–JĨ°Č)H8ÁD#Oƒ}fJJ8Ôn#ˆqvƒį7°ļŠ^5??rú§Ûå 0§÷~ūķzåŸü“Dâ7s…~Á>…ņķ5Üūųü "!Â|#A?“A4’ĩÍxzųPėļ;š\NÕjUëëëē˙ūûĩššŌ$Ūa8ę[=ϟûęWÃ&cGōų|ØUÖ2‘—9˛Ī°Į`×YĖíŖŖŖE!ÄAbŨ˛>ˆēxt‘~Ļ-hˆæ;û”K!ŨÎzĨÖ`ŋßËÁ[Ū.æŠįÃđ{rZpJ‰ÔąŪČKÃ1É M.ģÄŅ#ˆč2ät^ØėēģŽ3.äŽ-% #íÚS˜6VŒ>É@lĸ+++(ü(z$<Ō´~ēŗk’‚ŅpF• c sŅh4Âéx:ˆcc tꀙgaÜĐöÃpc<ؐąĐXZ¨cę‡ĪĪĪkmm-X§VĢ`\€ršė-ߍFj4 Ųí*‹Ū†Á‡ąĄĀŪÃRņ]ēWrJßx5@8›Žox”žd„•p IDATÃaƒ„•ķÄ2æXŊ^Oč@ŗîDĀ:ąA3iö=ļį;P‚q˜¸•[ŧ?†Ãa€tÔŧŸ4M8M'Å!ÁÁčt:Qž‘6Ũēu+Ā¤u°ƒAČZ$…ÃÂ|ĸ? ŖãL¸V˜{4Ēđđsd'DŽ`b‡Ãaä Ôj5 ‡“ŖįŅÕôON&õՉ䅐ˆzéŌĨHt†Įų-•J IrlRĨR ā Ā…ŗ-)Ē¸DAš–†ô1ˇúũžŽ]ģĻFŖkéÆC_ú’zŋõ[*ļÛQ5Ķ×T>?) čŅGæ)Îö‚uN’¯;Ģ8éƒÁ@N'‘ ÉC UĢÕ$)Q6•š„Ķër7œ"Dt˜c8PØíˆ~žœœ¨VĢĐĻė+öĮˆ¨ īĘ80W< ˆeMŌwũ~?æÁx<Öw\úú×õüODŸ5âģ€n4ã<žH Îmt‡Ķåõ`=oll¨X,joo/@8•°Ö××cÜzŊžnŪŧ™úŽ‹Īfŗ1ûûûqfŅ6ú{C_áHPų‹ũ˜uÁ„”įāā@­VKģģģqėŒWCãžŗëîŊf`ū\éJ,^Ņå&č& ÁPa`!¨ÛétBk977Œrę”î`^TĀĀŅ>Ij6›@بĨéAI„ėŊ&3›Æ ërrrlŧL%ĖėNFŠT M$Ī–&›Äūū~lä.Ë Om- ŽmĖHJÔŪFöĀ&īŒ 2ä;ll.°ĩHĢ$%*œ‡í!W‚gĶŽ5Ô åáâ>”*dœ˜#ž4JbĒWÁ‘:]O|sÄĪ}™;<ssS…BAûûûQ„6I̓˜ ü֋7āæ ļp€ŗ{rrĸ^¯§JĨķہQ-6ĪnˇĢíííhQžÎ“j3™L$ģn“PŠĶXD/žÉdblÛív8$78¸.âJØWŽŗ™ŒL9ēņRŠ:ôŌätx¯[î’ņx:(?Ča:ĖA×ûģÃÂųÉD~ˆ$]ēt)ú '—ՏHp&*‹Ũ„QĮq8;;S§ĶŅÜÜä =$”0ÕÔqøONNT­VCûŽ–œyÎ>FT2bnn.Ę|’ˁ|‘žcž;0æß^™;8uxxK¤90õŦæ5ëUšĘ̰yÔĨ§Ü(˛ N§‘'æķĩ„ÍōęXŗëîģf`ū\lâ$Ą¯DWMX\šjæ%3PvP…áŧŗ‰4›Í¸ ˆ0&áëN§Ŗƒƒƒ °œ8ގ÷p(!PĘ8Ŋ°Īŗ1´”ē[XX&Įë4ģÁ<::Ōææf°gív;€<Nú†Æ ũˇ¤Äf„aæų’L ëhad•J%X9¯ē^Ÿļ˛aqŋáp•`\ÂFD›øŧBœ ØcIÁ""!ŅëV/,,D5új0ā¤?Ũ90Q`ƒlduu5ĀæųųšŽ\šĸwžķ:??×­[ˇôŊī}OoŧņF8Rô?ķėāā Ņ¸Įáe“÷š”ÉdĸĒ‘!—Ē1Ok~NkæŨŪŪž$…ô‡âōåËÄÕëõĸ‚ŒGž˜/ĖCÖ7Œ‰^=ĮÖģęõzQq†6Ž­­…fyaa!ĒaŽĄ5fž3aæaž‘XšCNr%ķßĨ ĖEwXįššš8˙"›Í†}mm-Ēį0a&ŠmßnˇC22õž¯}-æ6My§ĶIœŗ@ĩÆGg<Įz¨T*Ŧ¤‰ŗHu§˜–JĨ`777 9`É×úúēēŨŽ:NB>Â|!‚Ž÷đđPĢĢ̉ēįŪ6/Đh4Ôív#šx$‚‚ŒŒu‹ŨËårZ[[‹Hûũ„qŠãĖZyô™gôâĮ?ž`¨ųü`0P­V ö'—œ"DØ(Ā‰ĩDzpd˜—n_ÎĪĪĩŗŗīE]wä>îl!cÂn1ė18Ã<ŗRЍÛíž%"ŒƒX¯×e\]žŠũG2ãšMTöĸP&“‰{!3cÍÍŽģ÷šiæ/ЕEŪwœūŧ4­qĖ3îV¤Štļ ™M9ũyŒßM?—gĶ^¯iīĪãŗ\RŠŽ­E’")Q؟ŅĮ¸ōy˜[? ķ<×ŗrožCÛ/×û§Į„ßņ<@ēoü›Í›ąM‡ĸũé6z˛.÷¤íūY˙Œ¤pۘSüÎA,ķWZ åīãÆg},———ĩąąĄk׎éūûī×ÕĢWuíÚĩˆT¸ŦĮŋëķĖĮ‰6xõ—ėđ}úÕû‘{Î}îīäs  é-ãėõÅyžįUˆ\Ëí}͘y]kÚæúr>K‚ƒ­üY.‹cŧčc—18hä˙<— ÛãļŽáp‡ŨņÚéũéīîãä÷M5ã}û7~CËËËqr´âC?SfÖĮšž zā _Đ_ũę¯ženaÛŌūîéļĐVžÁŗŨŽpšMNk =GÉY^ė&cæĪ ¯˜8bfˇ8#š\nÂÎ?ũô[æžˇ×ŸëöÉי¤Ø0ßčKžĮØđîū}ÚL´Š÷r;•^ėC´™Īs—ĨûŠĶūÎôQŋŌ{÷s2‹Äa.ŸSžëíđõœž3Ė봝Ÿ]w×5cæ/Āƒ‚7ŸĪkww7Bū.A§C ãáēE’ȐĪĀpæķų`䎿ääHXëÕÕÕDå•tâ&l2ūëĀĻrI°hkaą~œŧŲlÆįøƒœF“°Ģ3EŲ\î­e I¤-€ ×LĘ') –Å7>C˛ŸkÕ Ķ:ŗCÃ阜€ ¨[YY ŲøršIeŽGG‚ãßīGšũÚ¯ũZÜķĄ‡ VÕĢžHŠrxl~^ÉÍÁÁAČ4ĐæS&•üNíÍįķ1īa#ŊDŖëWED¯:Nĸ.H|\SLĸ&ë’9ŗŋŋ‘X^äE€X<ÚCŌ*!œT"b°™š\.tЌŲņņqŦwØ\ŪŊŅhÄ:CâĩŧŧUzH æi §š\.ō°?ØiR›@ŋ’ Lä€\Oôc!i wgŨš˙ūû•ÉL*¸ėėėDtƒyÄë×Ŗą— åŲl6æ;4ÆÁķŽ`Í%%Îė€yv)v&—÷ ąnI.n41×xwœ ä`´…äz´û°ØãņXģģģ*—Ë!sc˛&ú˜|ú CD[øú믇T‡5D@’vwwU*•ĸŸFŖ‘ļļļt||Ŧũũũ° ÃáPN'ĸĘČ=ąYä3‰f&fŗŲˆzō|īÉÉIØjæ-y+DŽø.Ō7Ēö0Gįæætxxö—(ŌNėīŲëõÔét´ŊŊ­|~ZÛ ûĪČ~ÅĪXs8>ŦĸYģģģQÉgvŨŊ× Ė_€‹ÅOؓĐŦ).6-ôĻ„Ļ ŲųA+’B{ëā ŖÁ!B°=ŽŨ%Œ hæY’­8ģˆÄĐķ˙ÕÕՐõph‡hú€ƒqĘår€_iz€Q.— ­>†Í{&“ŅÚښÆãÉáH€K´Č1x7B žĮi BZā¤MĢĢĢ!Āą‘Ļ"š5.,,$rh ϘŖ°[Čh`ÄŲh`ÅĨdÍzŪa0¨Ņhh}}=6E¯4Áw3™IËķķķJŨnWGGGQfŋųŊ4Ižs¨T*úĀ> {îš'*ī0‡?ôĄiwwWˇoߎ~ĄÖ62-žÛëõĸtīÃzĒä ]ĪØ’œˆ$† YÛÜÜ\čÅģ q§úÚ×^{MƒÁ@׎]‹„^¯ÄG‚á?tøÎgq šô=l1N˛æmŋßWš\Ž9ËNßK“ÎNNNā°Ĩ¤ÜĢ×ëéŌĨK‘ø^­VÕívíâ}WHšøē_ZZ I‚Û&ėZ&“ ų ve8œ$^žã‹_Ô̟ū´†ÆŠ2'xWœ^¯§­­­čˇŊŊŊpŒY[Ãá0ôä’"pĐCÅ8x&‰Ĩ8B•J%œŽÁ`ÉúØTœũ………8áęÕĢĘd2Úßß ÃÜYZZš”ĒüŌ—ô“OXö$Õt ƈ$mÆÉíēŗæ8m$D#)CîŌž“¸ŒLgb×HĐ-—ËÚßß@Í:ÃNR‚čŌĨK‰č I§H{°Ø,îÅÄŽģFŋ×녃†4“šĶOŋĩÛmUĢՈ*ļÛmU*•°¯ČŠ<™œâŦŪĨT*‘Æũg×ŨyÍĀü¸”°a0°ņkI &đƒ!÷˛k™L&Ø:€!šJJėĄGŖíR ÂļęБ{–ŋWáų°ŋŌ4ÜJeIÁÃđģD†ËĢ˜đ‡ * ‹ĖÖŨĩ‘‡‡‡QŪŽúÅaĀ` 2āœąōZë0¨ gĩŧ/`ĐcX>ØY’|ų.Z|ō"8ũ–ˆ õųŅ`€ņî€ŨRŠ}Åķ …‚ęõzbėy.›ˇŗrŲlVN'œ*ÚÎxye’čļļļ´ĩĩēu@ÕYÎÎÎÔh4‰ŸŲl6œ%ÆõôôTN'Ё%¤Ų ‰lŅįŌôHæ=Žëæ°ŒŪÕå-|2U(Â)äŗ^Ņ#%â˜;$Z’¯@Q֓Nqčƒ;Ŧ…g?ō=ú'ĸįŸx"ĸ”år9QՋžį{Øyl1{ Nž—Éôrŗŧķž{ąv=‹õšˇ9¨'záß!a‡ÉŖuė­ž îã˜Íf…Xiĸ`0P‡ė"úĀŲ ncŌ’ŗŲuw]ŗŅŊ€ÃâĖ!SĀ9e]j.M7!JÂ~¸a%Ɏ ā€ü…ÄW čųųy”ŒÃ(ŽŽŽâā$­”Ä|b`Ŋ|œ¤¨'SˆáEęĀīÛívÔ#æ=1š[[[QšŽ öü|rÔwZ›MŅĪH xWBĸãņ86w€u.7IX$úŅnˇŖš›pZ[ÎÁPĶ?Î ų{û{ÁR90 p‘ĻõĮųžk–aÁ(UČũč÷tiA6`úØR×Û¯ŦŦh_ãņXĨRIq0Ņx<Öūūžļˇˇĩ´´¤k׎+urrĸī˙ûúÁ~ ~ŋ¯Xŧ‡Ÿ…pr2)ÁØl6cžã\đy’aaøkĩZ$5Ē‘XÁLžÅš€‘ qd€pl€¯4Iŧė÷ûĒVĢŽįŒ/ÕI¤i)K@ÃíÛˇ$ ‡Ãˆ,øÁR°´ŦeŽN§vƒg"é4đĮzá3Æ™ˆWmÂnā$°Ļp*lždŠ]íĻ˜_Ė –¯ IaĶŌzd×FS] ŠR&3I¨'×ÄKVú}2ĐØŠŖŖŖ¨´¸¸¨jĩödH€įææ´ˇˇ—Čī Ŧ¨'„JŌææfØĶƒƒƒHPåų8IT}Bną˛˛ŽŠ;ŒE>ŸWĩZ Į†Ÿ=’ωŖ8ØwŠYëédK@-‰ē.ƒ$ĸ–Ö‘Cžžî ˜(1ûöIšVØr&š1!ĘĮŋ)iL$ bãđđ0%چäQ ÆĀĮĨ†Ŧ]ĸÜ^ē’ĩIĨ+æ1{œ—â”ϧ1s2.äËÖÖVØƀy2ģîÎkæ/ČSBŒFMRT‘pá Q°ThĻŒ–Ÿ"éõ|%%XJNl”&âíÛˇr6gi˛AĀfaŧ; “4­|sûöí8ŒFš˛8ŧW§Ķ‰Ę&°ĶŌ´J6›Õááa€Wî {L8§Æ%ÕčgÚČæƒ‚~š §P#)d€"Ú͸9ÃëŒ`’Č2›ršŦ\.§VĢßcqŦ¨éēĮ8YŖŅ(6ŠÕÕÕ(Į阗.] †™1B:@8Ļš…¤`ķ1€@@ˇÛÕsĪ=2œą›7oę…^ĐîînlĖDdpč`îÎÎÎBæ€3åUŸ5ĐwŒ?L¯:ú: @Ę8Ģ”ÃC[ŖIŪČh4J€!ôÂčú™{=:<< yMēZ 0NYVæ,ãíy‘@2G;ą H•h"Ü釁=88€ SŠŦŽįt:D|ÖeS™÷°ÂëëëjˇÛ1N8_Ŧo.ôĶČ766ÂĻ,,,„-Äļ•ËeÕëõa7ĸYˇ{?˙yŊúéO+wĮšá~´Ã$jļãĖ -Ä>ē4ÚétBūæųä ‡Ã¨ęåIĒ”%RÄüE"â%s×ÖÖ"’ŅnˇÃf˛Öą‘iĮ~0ØáÉ'õsø‡záÉ'ÃŲĮšq™I‘â%Ʌ@ŽƒŖV*•ĸĘų=&DŠČkŲÛÛĶx<ŽrŽŒ7ũÖh4âķ^l3Ņ)îéIĨĖú}ɓnŠ2ÆCDÔO¨%Į;BYOˆ*\ŅŌÔŲ!į‚÷b<üđ>I!íÃYÄĖŽģ÷šų pyHŠ€kÔ%ņ!)ąq7`IÆgŊ‚%ø¨u ãJT‰yCNNN"˛•ņÃēúXđ7Lq.7)‰čŌ ˜í………pÔsš\j„sÂÜ$ĸ€üäüü\)h4á°2w;1o/ÚŪív#Ē×jĩ‚EįÜœwÂĩžžų.Ø?ÚI­s#ú–ŸQî’r€8 Ō´Ė, Q6ˇDŽcžäS?߁šĀĪZ­–ļļļ"Qœqî G›œîál¸?@;ˆÆ›ąÁĻ`3Y—.ĪōHŖ4=ËÁs›p\TŠTs•JĨ°iŦCˆžģ˛˛’)¤F”E’™ËåtppIŧČã ú€DP։XhˇÛo‰äō<ö¯ĄīQ…l6lyy9ĸˇ${r!]>ŌOi÷ÜöĪl6‘Jė‡įlĨ% éhõėē;¯™ĢvA.؎´nÎõ†Ō”ypļžīJS–Ũ%^ú˙LךķĀ R/Į}ØŖŅöŌ”|FR0ô0É´ƒßä¸\cėl ú@¯— ô{xŋyŲ96Ét>×tær͞„ž‘9ŗč÷AāÉ^žˆåĨķ¸<„˙“Æž‹ņōßņ}6rÆVÅûąŅ0>Œ›)ãīmå™l:ü$…ņbėzŊž^zé%ŊôŌKÚŲŲQŖŅH”^dNņyæ'3öŒ9mqŲíķš˛ēēúÍÛ˸ø˜8ĶĮ;ĨK ŌGĖÎT ˙¸ū.^v˜g˛Žčæā‰įŌ&旃+îCŋŅ_k^ŪĪîmOÛ$€cĸw>÷ü{ŧ?’Ëgŧt+¤CúBÎĀ3ÜnŅN¯“^ģŧíãrûÅāōH„Iē¸ˆŽ.;âžŊ^/œ ~FŸšmuĮēŅhÄį´L)]nŌא?_RbÎúŸq ČPxßŅh¤[ˇn%œÖ:Ÿ°™ķŧ בã`ļÛmŊíū@/ęSšģUCúĮŊ‘‰Āˆ^ēt)Öŋts@csxxũÍ€­wĮ†$qė$R%æƒįģxICX_ØaÖ$ë“*A€>lũ“Ëå"ŋ[ˆŧÖĀŠãCŋ.™'ô5ķ|\nZĸõõ×_*4EĒÕjæqˆĐ3FôO>Ÿ(’,ĒÆ0G*•JŒvÚ2ƒ•ĨbĖÁÁA<‡Ē.čĐqŲTŪt ™d0?ʞ$īQœfbĀm:;;SĨR‰ąåô`/GšžČ]Ā>2ŸËår0ũ§§§!?Ãf]ž|Y×>÷9Ũúõ_×ŲEšČ^¯”;ô)v˛‚uX¯×Õx`Ē! pzVq‘cĚÃ6a[h6’„<'ĒĒd2mooëÖ­[!„@i4Q…ČkĨ}įņĮõČWžĸŋøĨ_Š>'!ŗVĢ…ũÉfŗĒÕjáp2}Ŋą–š0'q€]ĸ„ÃĶÍŋÉ€Xėâl#Cã÷ËËËđ=’á8Ú%)@ž3ė€q\)&€fž3@Đîãė˛š‹“ĖŲīčg֎WĶĄĪpdķååå(Á˜ŖÍŸ]wį5ķāÂãĮąAžœLjɔ۔ ķúëéä(6_ibtJĨRB3 ¨t*ø7õŊ1ž0*°0år9X=6*´¸Ī>ûÜ˙đģ?øāO‡ļ^R"y–*>03θy56úƒ¤Íũũũ`ļÁÔFÆYb#r`ÁæûHäÃ5ŅŽj'īŌ˙žĪĀa-üŪ™ĮRŠ”ŋ€lb$­y™RX~€Ą—Ŧ“Ļɖŧ å ™{›››Q!åėė,€ ôķĢ^¯GŲļŅhõ˙š§ŗ¤ģģģ‘PÆ{’¤ Hāŧ'ė3í„ÕĪfŗÁ°įr9FN"܆‘qŖ66€……mll(„™ķC“ãņXĩZ-ÚM„hyy9‰tŲl6ĸZ‡‡‡ĄÕ—”8L tąX ;ā‚yˆœ„¤T$Ā€j6›Ánz"Ÿ÷Df>ĐFC °s-6“\.•€H0&‘“Ü’|>¯zŊ‡’q0Œgŋߏņā}ÉķAkŪívĩžžöGäĐL&ŖršŦfŗŠëwÆ âIČ„ÜÁŅÁi$ÂX,cũPĀKŸ…C ą‚3éëūėė,ŪÂögcˆ\y§jĩí%ΆjCä00ĮŧŪy§ĶŅĨK—hF“ĒZŦu@hš\Žü@(ZoŪÅ#pŦ!ė1v’ĩŽÍÆš'¸ŧŧœXë.׃”bĪaž:šB´ÎZöėļ'˜z‡……íėėÄū‰í8<ü*“™ãšY0ĄĢĨ<úÂû8ŗčb.ō=ģG[h Ŧ%īĪfÍŊœÍG2äīįÕ(Hāãg.—q],ũ c~ōŪ ›ŋĀČĮŒj?éyƒ¤ P H!Z577§+WŽHšĘŧp葹ür6Đ#R8GHž>× ?IĀzti‘¤č+H¯î čôąˇâ‚hŽ ‘"g=Ũ...Ē^¯‡ŦÂĢYÁbC°;Nâ<I!éō|×ÅĶgŒŅÚãQ0Ūß×$Õz\ŠČÚ Q=Š3`˜;w„ŨáôpšQEœl%ë‹rģČFÅ8nŦÉ\.—(éËēpM8ŋķŠ1>Į™WĖëņxzē.Ņė"ëĖŋƒŗDČ *Ÿ›š…ņĘVüaNķsĪsā}|īdÆ^yÔĘÁš'âcĪh×ĘĘʏVÎŽģų p­ŦŦđį„ā|ÃtRÁ0†!gã…!Ąd" ^šę5]˙įs´đ<ƏĐ,, ĖRĄPpĘõĄũO:?ī'ĒüüĪ˙}ũųŸ˙ŸzķÍ7%)ąŲŪv33ü *ĖÍÍE b1hņ)Y ûˆu  č"Y˛Õj% āÅf‡aįš0̈́o+•ŠZ­Vĸ,,ŪĘƊęõz°S€ÚÅÁ*Ųl6€Œ; €cXD/˙‰cT(ĸd#›2rØtØMƈ~Ãyôp4ō'JčáˆđĮ= ,/)ƛwõãėyæ7å™[lōm¤h€BúŊX,&NuŌßÛO˙D‡Ž3ۉĖ)›ÍĒRŠDEĀ#ķ°ØđšBîë’>BVsé5ųąîäF\jĢ9 T­VãØųRŠĪf,\FŽ'ģ˛ŽŅbãTEĸüŠG4`š˛Ė‡vģ­BĄĨА“ÖŸŸŸëƍÁēz.Ž>˛€čââb”bdÜuÛÛےũ Ø%ŋ€<ÖÕmˆIF‰*2^!…6q 8NöââbH¤ĸ 1{2kūėė,ÖÁââĸ:N´Á‰Ųu÷]30.’Ŧ¤éaH0…Ō´5˧:ŧ{6rØĨú` ÄŽo$$ĘiuؤéfGÂiZJ‚.ÜĩŲ=öķęv[Ą?$´šËåôÁ~@?üáˇ$MĖ˜ãPĖĪĪĢRŠÄs1–€Pd°,´ĐJøž¤D€1†™w#Y -/šZî k*MÁanä1ԝÆđ“$5N“ŨH ĮáĀé,™WwđöF#moo‡Ù Xđn$ąĻû’wüšqãFô™4‰ĸ šđ˜8$ô`6ҟ177ÚzĪ AŸîŦ6āgļ˙WĢÕpœ`Ųé  Ėh™‡$둄‰ŖĖf H"†;í˛„……UĢUĩÛm‡ėää$ä8Hģ82`B›aęSÁÚˇZ­Ķ))Šgū<R”Še=@ā Đčķ;RH“„dgŊ™˙8+i;@´ŽÅršÉ!kęÉy!RF. ɸØ;ĸt›››a)ˆ#‹„]DŋĖ=ŧüįp8 P~tt¤ũũũ˜?ŒrRŠũ˛°°QNI‘o”Ëåĸžúîîn"2äzqXwÚ5 ´ēēĒšš9íėė ¤q"jĩšÚívD `˛a¸‰ô+¤Î—G†´Ė?€´WžņhâÂÂB‚ÅāÎŧ+kY“4-§<Õl6ĩļļĻÅÅŐšņwžUŠTT¯×%Mķ$kæÄīĀ!m°ú8÷Œe~‘ÄÂĄĀQ!ęĖŧf­@č4›Í„ãET‚ƒČŧ(ƒ¯YڌœČ#7>VŗëîģfĨ)/Āåš:Io)[įŋķL0ēœ“iéI„~aD`Ķ¸aĸ Ū>Žß?]NŅ߁ßņ]ßXšÁĐ.˜#˙œ˙í%đY{• ŋ7L<ũ‡ö׊(ū˙tģŊM܇j ^B.^M—]„‘sŲ͏{Ž—ˇķŽžIûåcíåÕü=Š’.{Į=ŧüqyô„ËËzģ#gNĶãDBĻ3‡Î|3&čOĨdy>ū°føŊˇ#Ũ6žĪ3NNNäū8ų}I¸ŧĀ/O^gĶÎô Šū}o ĪP8ŗJ_7DYŋÕÕÕDŌ ßņyn7ã‚đ5ÄZ+‹‰Ōy‹‹‹ņ,æ¯ß›ō}’ĸJsæę`0ĐÎÎNŒoZž‘ū7÷p›čĪö2ˇ”ĪdN@:HzË\âģüœöĄU?99‰˛Ē|ßįWzŽņ<Ē´đ'mgĶeL%;ÎĪX÷nŌ‚ŸĩāķÆŋųë§×?ãs€īSŊĖĮčÄAđšÎī} ¤íĩ—ĨMØwæŠÛւŽČ8ņ}æ,Wē'ķÖsĖ|īM¯]*‰ų:ņyÄúÚ÷ąbėyGæčO˛;ŗëî¸fŖ{.׃ÐÁÎyŲ4ØHŒIhŪ‘7HŠÃLH$)ĮīæĐ™H5V°å’âŗ<“p}.—‹$ iÂœĀ’Ãd!pm īã ûC¸’ĤzŊŽĢW¯&B—„ĒŠÃíJ@,›Ņiz’)yô ,0L-ė',LzVw ˆ đOE’Îōāā@š\NkkkÁķūčjŗŲl°T0aŊ^/jÃģķÅŗŅ_ÃRšš}ûļjĩšōų|„ÉI(Ëd2ÁR–öūääDëëëąÁ1î’"ę#%)æ›%Jš˜W™LFÍf3áP]|ˇÛyÃī˛ßÔŠ@3æŅ’za×`KI>åyHĒVWW#ņ‘fW¤nįįįÁ4 ĩÛí`ų2™L”ô#ævÉ ÷‡e&ō–ËMĘģ6›ÍÕ0gŌ4\īą˜OH‰Ōë›#)q".r–VĢ6ęđđ0d[”?åĪöövHXÛĖs,s ‹—"”Ļām8jgg'ĸ&D5W4æŽį6P…ŠRŠ$Ēđ` \ÃÍ<üR)É ‘ÖeĩZUŖŅˆf’œ!ShûōōrØ ŠĖ]Pl)ķ6›HĸëŧéSˇĄHƒ'Ö°3äœ7Ā™ũ~?ÖÕm| Đ^úyIQ’°Ûí†ST.—%I{{{‘[Âø2ΐU!5999ŅÎÎN$û" ĸĪááačôaÂ=ÁIž¯tÍnĀOš\ŽūMŗ×DXTgIG †ÃaāųôRĨJĨ”Hō%Âgp`x2†H*;Iąnp¨Z­Ö[_úŌ`kkK+++:>>įۈŧd}}=€7Ņ8IQŋŪį:v[ʸûx˛é/$ƒ€îÁ`IĘ´ [Âģ0éo¯S´‘įōs¤fØ*!ŊöÚkŅ?ü°ęõēvvvk’Ę÷Gr­éą6ŊØVÖ;ļy'š6ũ~_ëëëád0Öä8á ãė0°qž_ĖŽģ÷šų pÁÖ į…iāÂŽĮãDe „KDÚív°ÔĮĮĮÁDqˆgßÖ`'ØXaíØä< Mĸ)zaŽpgŗ¤ŨĪ>ûœ}ôī…qõäĩī~÷yŊûŨ?Ģī}ī/b ÉÍu”Tâ đJFPQš&…úá-ĨR)}‡ŅÍįķĄĄ%‚…õÅé‘ĻōŽ gķ°ĶOTú`Đ7^Īv†wĀĸŲÅŠã|ú†÷"zá 4ö„ÚŅ)ŖĄg:FS cėcZŠT"!Ņ+šd2™(ũˆœĮ\YZZФitđ°ÖčģŅ”ĒШŽĮ㨅M¤…÷DSĻ‘vdXķķķjĩZE"9Ö^šjõDĀlúŲ’U-\KŦŽŽ@õÆÉ oƒe,Ž8'ĖEæ;`vkk++y/æ@*›Í€–lmš\VÔ˅’$ģšš†ŧÂŅ=$$74°éD6HĘÄ)"i‘9€ž_Jž>ëUb<’H[ŅšV^šBúq„€čt:ÚÜ܌ĩDtƒ9Í<Âi‡%§ô.‡"¨Yŋ^—n1Ÿ˜CF#îĪ{ķ^^†‡}Æ)tÃ%T´—ũ›ėy0|¯ÕjŠRŠDdŠŸc`˙‘YÍÍͅ3MŸqßŅŅQ$UcĐá“÷@ņHˆrš'{$}I´•ˆ!Ņ0OvEû> ÔnˇU,ÃūC!bū°§šĖ vßuw0}:==R´”ō¤Ũ“&Qjˆ-cü"7â'IVg×ŨqÍĀü¸,vŒ+Õ$ŧt†ĪßKSJSP`gƒōėyØEIÁ8Ā’ÂÚÂŪ o€eIoXÜÃ+€p}ûÛĪęŅG˙^ü?—ËéÛß~6ŪYJSžČ.<<ę˛ŪĮš €ļÕj%$l,’üQ1ÃKĶjx6@M€ëQ$=×ãã`Á–îO‡S $ų“wõĒ ’ĸŠcą˛˛.}Á˜ĶnZĐo~›-œū`ŽPń¨ī (–Ė;@äüüsÂË;ryŋ@J!­ō9Ø œ$æ"‘NŸW°öŦÍtū‡ŸîQOÚÅŊˇoôķÛ@ģŧÚũéķrvŨ× Ė_€ ā MuŸ~Šž4ÕDûa7Ō ģ1a“Įha‘Od2™(™ˆæđøøX’ĻFPäUlŊlȰyŪãgö]ĘįķzöŲgīúČ#īŊöž„Ëå˛ŽÕl6ė‡gi¯WEq%'ļ(q†ĩVĢÅ&Ęæ“+ÆØB#šÍfã '4ænĩģģĢrš5‘qē“L&,&eé\Ķ (ËårqÔ<›1ĀÍĢKPUbmm-ĄÆ9 \Îs(3“æ h°ƒ,>ëė3ãĖa=lĒ8†ôSzÃfđ\6ViZE֚‘4uđæææÔét´˛˛ $Č%*0đžnNNN”ķΌ-•‘“Qá†šÍÆË|įâ{D xWwŽaãy!>äņõåĖå•+W""CšCNLÆŠô€âŒ5€ųS&“QĨR‰ŧÃÃēˇąąLíh4JDũˆŧÁlŌo°ėÕjUÛÛÛzđÁÃéßÛÛ đØõh뗹Áŧ–&ŽHŠTŠy@4É%M”˛ÕjĩpH‘Œq_? {ii)ÎOđ‘tФö˜ŧÚŨl6c-Ũb~Š„ÁžsīZ­–™0nƒÁ ôö-Ą”!‘ĀN§§DCŦôû}U*]ģv-úĒ)°ûĖQ/ŋÉ\Ļ4&võėė,Äæaãą7år95‡â}čOÎ|@6ÆØpڏMĖårq"4šĖsä{ų|^¯ŧōJČžpęaë3™LTšō'D…ī]” e}2Wpꖗ—U­V•Éd‚‘'"…Ŗ Äxz)Ö2ƃÁ@­VK›››cƒŲuw\30.?Lƒ Ο‹ÍGš"¯ Ā`wÖ™‹—ŨÂhĘŠD ĻÃáPårYív;$:h_i;û/ūâÅûŽßųÎw˙wM¸K `€=ÁÆãKŨbĀkúŊphœĖy M;ōœŊg|œũ-—Ë ļ Ũũ`0Él>,åŅŅQ€J<Ą'c€¤9ˆ;A֍F#’^Ū騆—]sŽ{Áj20ē$÷!‘‘'@ÁëŠû& +Ę|åw€!Ø+¯ZÃŗĮÉåĨ*]ƒĘãPĐo0ĮĪüģ¨å˛.îCY<ô¯~ī}rrĸRЉ§8•8ĀŪ\n’7AŲ;žŅh˛(œXÚĀ^&į„yĮ{1?‰VD2,ŪųK_ĀēģŨAZ# ČÂņfl™{ô1āg;Ž'6A7Mž ˙ôô4æ!ãpp ^¯§jĩ߅5,īîî&œ4€¨¤Ŗ€K’ĨkĩZä)Đī8gŒĢW_a>°F°o^Ž”|löuww7Ö:#’ži ú~Ē1†>Æņl6›ĒT*!iÉårņ¤€ØSÖāúúēvvvÂbÍÍĐ#BŪÂûC8`˙<"Adĸy§G9åŦ#" Hãx>N/kœŊ {3âŦÚK$Ôm¤įž`˙yV.7)GšģģßÃļņœAœr¯\ĪīŽôėē;¯˜ŋ—{åŽįc“ ô.ã{+@¨1]ęÍ% løŨZ­`]´ŗË°­üfˆ<€K>Ÿ×ûß˙hD8øÄelÚã:1æ°1‡‡‡qŋŗŗéɲ~°€‰ƒc`Ąx6A×mĶWôÅūū~0p^]ƒj%N§ãāl÷d3C›Éd‚}sÉ , €ČK˛ŲĻOjå°Xf.ęt:ÁúŅN€;GGGĒT*!ōq€Ąãũ`|§§§ÚÚڊÜ+%!‘đ#Š‘”ŧîĻn6īhét:‰ƒĐ$#Š–œcĖ}šmhŌw^ļ”MßŖN0Ū€œ].ȞØĀ=O…*&䛐ČG_xŽ ũ#ËģÁė6 mll$*Ú4›M‹Å3ČΘ/XÚFr7 ¤KKKqmœ››‹ĖRФN§ŅHĸ#æ ũ1õæ›oČĪd&•{ĻH!kDc°cHB܉Â铤ĩĩĩ°°æDĐp4aŒ‘{ŅnIú¯ŋđ z˙×ŋŽ<õT8JNNHGzqq1¤>˙aX{Ŋ^T’„qöŌė7ší~ŋŸHœ~ûÛß™`‘Iv9mķŗ¤Š–`Éä´VūpĪŗŗ3]ētI’T¯×õøwžŖg?ō͏§2AÆbmm-!sÄæķnHĻŧwvvbĖļˇˇÃ‘pĐLt‹ˆ y:ä kįLcWwwwÃŽĨCŠš€T§ÆŖ‘0č•J%ĸ^¯‘ģ““ŨŧySkkk‰ģXk{{{ąžqZ­V~ŪQR€zH1ہĩ˜įšTČ) Z]] Š’ŗëîģf`ū‚\„æ<ŧQ(:õ´\ėÚfišå,,iØŽŽŽš\×Ļë*s0ƒ]w$‘)î[‘Éd„ēt#ÍûōØ4ÚÅÆĖīĐXĻA8ΚxX)ë;cĖ÷\Ī1vĐî ļôģ3|lÆ|VÆ+qđyīwBēl˜€Z/Ɇ3é!_€–÷+}ãĖ3ŦlvŠT gÄYtÆ˙Į]>Īx7r<Š&ÎÁ‹ßŸšH;=Á1-/K×Īw‰ 3Qœiš@tƒūdÜh;cÁÆëųžģ^¯§•••„î—×íN'Ū)ãŲÎæēS6ööS2>§ŊüÎËēcÉ|$jŅsāë‰( ŲûĖ">›– ĩāŗžvœŅĻ_ÉštéR€LJÂđûœ`˘ŦŸ'Ō42šÖĨ{´”õôˆäR椯gū CęvģēqãF<ÃÁ/ũpõ>įwŧ mh4ąVč’,Ķũëö ûãŦx¤k†1p™Ļ×jwđ\(´ŋŋ/ŋ°sD#‰ļá0ŗ/ /ĸĻ?ß%څÃĖģá#w;Į{#Ã"īËŖģéķ1oæÕ¤hs™qeĪōũąĖŗF=R–ļë܃=ŠĪ{§Ųu÷]30ŽN§ŖBĄ8=ŽMšd#Œą_āa ŠcF8Ā-MëÚc<8Ĩ“dyyYõz=Œ+ŒÍöë s°āwfdcpÉL¸¤DˆŲ=€Ĩy´—0Uč*yæx<Ž cŠŊ<§Āā‘ž‹!öąĸ˙é;´l–~ÚâIĩl.ÃaÜØT=ąŖĪøISyút—aÖ=LM_°ŅģpppŸ___<´Âlx´ V›P3úRŪ×e5ÎôŅn6b.$Mžņ!9#ėĪx˛qŌD<ąŒuA{ŧ>5Ҍ………„îĐ_¯×ÉĮHHH´–&ĨaŽyQŒ\nR‡~?Úā’Ö s¤\æ6Ņ1ƖņãwTjˇÛQq‡÷EúDĨ æ4uŌI d~ŗžø‘ j¤/..øb]Ã¨"û[ĢÕ@ŅOô{&“Ņúúē2™LHõNOOõŊ_üEŊû÷_/~üã‰ŧÖ ŌŌ4iųE­VK$3ß\ŽE˙Ũ#'‡>–”¨Á?ãTUôÎØHˇw.ˇ!uũúummmi~~^{{{ÚÜÜTŗŲ ųžįD<™›…B!ØaiZŠÔÉ "SäĻnˇĢī}ī{ZZZŠœ‚^¯˛ŋ˙›Ŋ;{Ž4=ÎCŸ(–…ĩŅ=˜žž .")s÷EäpHÉeSCް˙˙įZö ļä[ßZK\DŠR\DŽ83˛hRĻ4 gĻ{fēŅĒ …Ĩą€sūY5ãsŦsâÄģņEtt7Põ}ßģåûä“Oæ Ôb¨ëžņŽ/})~ü[ŋŗŋé###ņ–ˇŧ%㊧žŠõõõč÷ĪN—ÅN[žŖÅ $ĻŽjOjtˆ$m||<#&æ•vėėėdųPĨC­[äÁüü|ÚNRŗŲĖŧ-€;âLĘĘ9žsįN´Ûí×U9“^Y~Į*[eŖí#úãüē{¯s0\´ĘÆČ}ėĘÛø”$™¨ ‰fY[ĒŽS­*ģ.ÁÉģE?ķ^J,bo+˛ąæĻQKÆU6Ų†En4===ŒGÎáŠÕ38 $D’#"ĩĩÂÜŊ^/t2÷Ņķđso› ÉDũ˙đī‡įNŖŅČ~ÎÆęPunÔjuã5Î@Ėĩk×ōpē葑‘Ô%ĪĖˤ|@â"ÉG­laėl¸r´CiJ• ._ž7oŪ|XŲÛۋK—.ĨĻ&[ô5itqq1æįįŗŦāå… )įÁJ@ÆÂÂBlooęVĨ0ĀųŪŪ^Ŧ¯¯įZX\\LļUõzvÎ@/5š|ooo ‰\^„wį¤icŋߏõõõ\2ļ=Š%ōŨŨŨ\÷ˇoßH|՞*ģQ§Õj tg.Zŗ•¨ˆŦÃÉŧyķfŧđ Ņl6ãæÍ›ąēēˇoßÎg‹$lllä|¯sûāā I–~ŋŸ5éՁį´ö•uŽēqŽ H'÷ÁFûĶjĩ2÷ƜĢĖōpŪÍßūí߯ÄÄDŦ­­Ĩ„Ō÷ĩI¤ŠÎƒš<:99™9 ík%!õ/g°Ę(,¸xņb:ēUNÔl6c}}=ÜÍ]Îåėėl\ž|y ŠŨų$’EjŪį ä°2īk_į ļZ­<dŊÎĪĪ˙oá…ķë—ķ:ķ÷Ā…ŨŠ8ßÂ{ĩö˛PžĪ`71e6ššÚëõ^b”U™úē‰Ô*õ~~§"*A“ė¨=ûáŽ ēU ørZ´ĢaS¨Œ{ ņWæëjR…¤õŠū83˛ƒGˇ×zęÚíY6ÅĒ7­ÉTœüކt įĀFĨq yXjÕívcll,.]ēô:šÎ°6_8čös˜ÍM97āD ÷OLLäÉšÕÁ:88Č$csU‰ģˆSé @ ,›_ĩÂÖĒ&­đÃí¯ãŋŧŧœcZįĩúųÚ,ĒR5ęĢjÎ=F IDAT, đ ŠÕ_@ôęęj,--å¨IčØtkOŠŲl&˜¨‘›š|ޚ•ąĒØ…Zą†„ĻžVYOųDˆ¨Ô<Ī6>œēwkĨŲrÕč–w Ķ66‡Ŧ%"âŊ_ûZüđSŸŠĨŋ˙ûtæÕ‘¯ZüˆČÃÔo øđ\ôûũ~Üēuk Ö?ĮŊ–É´~œ0FGGcqq1Z­Vlll TĶŽŲŲŲÅUb'ÂjąĢ=‹ˆ×ŲZDƒ$_{TxÖ­­Ä{¤H­ōVÉŦaöõs•'VĮa8:q~Ũ}×9˜ŋG.Æi{{;̤(g‡Ũ˛1ČĮĮĮėā166– ^Uča}ĄeIIdXsÆ€ˆ–*"˜UvŋJ%ä=Ôah´GH&<”7“Ø%”Ûī÷ŗĘE­HƒÁŪÜÜLS :‡‡‡YžĖVË^™ĀĩDšˆŗdŗędIŌ•œk͜žžŽnˇ››!&׆čEšŒ1 Qû˜&1­X)›úŅÆÄÄDüėg?‹üā’"ė<‡š}ĢÚs9 5ažáüŠtč/$‹ũÕŦ‰Ŧ''g§Úڏn§dąƒŲfffĸÛífōúÉÉI\šre€ëvģ)įĢ‘_Žíųu÷^į`ūš€_akG{íĀHSuFf›&6qĩWúøø8 -ųŸ3tĀ:ʕY I†TJ°VÅĄīÅc3€gŽļŖ2ûœa{F’ŅĢÚqõ¸o¤C’ĀcĒ*ø.ļ 5›ÍŦąqƞíīīįéšúĨ2á@žę“IDĸÚŽ‘‘‘,˙WËģa31Xt˜ŽĘÖU† ;Öh4Ōš Å8×ZÉšÆhWģ}||<::š`ÂU9ĩL™žaŸœœŒVĢ•#ÎFD C ÍĪķ9ā­jJ9ŪŋV‡Šlp•@Е…úc{{ûu’~ŋŸ‡•pˆl2úXčļĘcVsĀæeCåąiŅhĨUÆáYgUe0Ļĩ‚‰ČD=×@îpÃY4žØLSmĨŖ­&ŪüŠ8Zž ĐTˇZ­”4`üfff+Jfąĩĩ•É…æ 2==ĢĢĢšŽ\š’2,@˜ÄĀftpž€ēy_ ˇõ`^y‡ˆ8ü­Ú Œ/y§Œƒ @T]oMF4œEL?ā*Ú¤DbMŪ”CōĐívSž!ŲĩßKAéŌ÷ŧ'~åŋũˇxíŅG’‹)g ŲlÆââbŽ…ŒëÚÛŪīūęWãÕGIöV)U’*9˜úĘcwÍ׹ąą<ÄËp2Œ?ģP}r9Ā`Mē8=@oyy9ĩā/ŋür&ˇzgöI­v2DõŨŨ;"âCßúVüā“ŸĖųX ’GIŊæF=ą0ŪŨŨĪ<õT|ķȤwķ‘ŧÖ]2=É 2Hd•Ŋ1'ONN2ęķŗŸũ,^xá…čt:ą°°š,˜v‘A9Tė‚ĩĀņeWØkvAÔ!"ŌvØ $žËŨ°f+š`-),ĸWΝā@HLŽ’Yö—’@îũīÜšŋ˙ûŋ˙@į×/ËõĖ3Μ3ķ÷Â%TĢ Ž‚K›¯Ÿû^ÕÛÕßW=ŖS%/¤Unŗ8D€X÷ŦŒ[ÕpÖÍ [ Ų€Ębš*ęYûûûÉØ`’ô‡M˛ööÕž¨WečĢßsŋáīÉŽáŌ„u,$Ž›X!LĩžŽ8ĢÆQÃđŸĒ@ #ˆáĩ)×ŖŽī^Ų× ĒĢ‚Â2s‚Ė]-é§lgLRneö+ƒJš"ÂTĮŦŪÛ_ûĩꑍ[e6}W•" iM†ŦŸ“Ā\“ō&ë€ĐŦīSīe ™wÆÅį­ķs\õFãė 2÷°|^Ōy•=*úxŽÎ&ĀŖ=đ~Žūˆ€ąšKSûąŽ‘1ô}FH¸Ž5åõ§Ž”Æīj_[Īū–ŗŨĢɨõĒėwę\prr2666boo/™QōÄ@-E¨-˜ßi×pũy—ĪÕĸ"4ÕollÄČČéšĩīTžAâčc ,îîîÆÖÖVF;ŧ[ĩ Ú>===pœųVåNo4ėĐææfļĨŪģ~¯ŽŲšSAЉ@¸}ûvėîîæœĒų9ÆÍxšßņņqWdJ։>3&5ĮáôFŅ {ƒ¨PĩŊĩ/ęŪkŽÔũjØ&DDÚūZ†ļ¨ĖķëîģÎÁü=pÕ°dÄ)cƒeŠDOŦÄXę~—ņÁX`Éphš+KŧĢlqxx—.]Ę{cŧûũ~&ö`ķúũ͊Bā5„ZAŋEjRÖÉL"`J°Ā@dÄY2b-Ëhķ4#"°ˆ˜Ė`­éMÖÃHh$$Ŋ^/e?XŲ„äĩŖVCĸ98ĩô…vĐ?/--åįk2)郒kc›×ččč€$Ä^v:dšÍss566–šŨˆ3Ā(ĩÖĄR×w$ 5‘¯ß?+SČąŗę•eÔh7ޤ-5ē`>ÉI j•ĖĨųB’åÔŌŲŲŲdĐ9Ÿū8Ļųųų\ œ•ĨĨĨwU&ÅZ3'ŧ_•C‘Šp,jäŠJ봁 lnn.5ôĒŖĖĪĪĮŋSâYív;ĮĀߨØpVĖÎhå¤:Ēgmk˙Ν;ŲgĸvõœcX™U‡ëEDĘ.€ĒšššØßßO‰Ʌ ÕvČ*âG?ī˙Ú×â'ŋũÛ)ĄŲļW^y%íiŊ5ņØØˆ\Ē\‘Å:?9â5ĮE¸į’$Zcccąļļ–š§yIėMuČ%or Čæfffâãßû^<ųØc1ũ‹˛Ŗ$"ÆD‡Îœ6ÖŖŖŖą˛˛ōēÝT!2_5™Û_ĮˆMWZVTĚo4ņōË/§s]“RõuĢ Ĩíö{E=-[ûvvvԁ0ŋØ=¤Ë;w2˙B”ÚįTi[XXˆ‘‘‘¸qãFÎ3•Ɛ0ĀĨĨĨLTG,--å=Íß& ίģë:Ũ{äĒIQŒ*ƒGnB̌E 1 m&ÕT{Ŋ^J lތŅÜÜ\jo_}õÕ,Ũg3ĸ‘‚HOjâ)ƒČ€J †…Ų#"CŒŒØ°V×Ɏ•1ĻÅl IĄĸUcLëOa~eidāõõõhĩZ &kéBēU ¨˛I6RíŰņÔ¤?:ožvXY>•=Œ=pQË*ēfff2ŅĐ͇ĀĘææf\ēt)vwwXWN’ŋ;N,..f[$ÎĖĖD§ĶI°lŽ:‘Ņø*ƒ‰å×_/=ĮwŸˆH9†n?õ࿐o kĩdErōąvģ=ôPŽ7’ɕĸúâæø°3äßũ~?ÖÖÖ"â,ErCWÛívSBn4NĪz°99Ā›>¯ō4ëAŸ4X^^Î5Hû/†–ČęîÜšsssųžUއŨåsŧsŖŅˆÕÕÕXXXHiÆŌŌR‚ĘĒ?–äÍ6_¤(5Šprr’ŽrDÄŸx"~ôøãąŋŋÛÛۙS éT´Œ´Aū 9”s(""펈ЧĨ‚Kr k’]¨ō0īH^ôrœÉ,8Üū°';;;éøq.œĢÁžWâddd$Ä'''S‡Íš˛žĒ͓øJ6FōļŋŋŸŽŅ<Ņ8ĖļGđßüfŪ[D†yĒpƒ1`ËHî.]ēąŊŊųD$nĸ*ė“šĶívŗíUO.I\iå7˛œ‚)Šš* ÕųGBf DL܋ĶĐëõŌ™p6Y'bkvv6÷ clŽ“į8ĸVx:ŋîŪëĖßZĩå 5}aÄYI/,356ȨĨģ”`ŒĘvģė´ ĮĻoÃÄ īĻDÂÔh4’ÍĢŅŗmöXۈH#'üč˜kīŌī÷S˸ŊŊ@hŦ‰‡•5ĶOĒD nn%ŦĄ$΋/Ļ֙>˛nÜ.ŒŊĘ=ž-ņОíŪ×fƒšŗ!rDܧęgõ` ČÖä=`B5 cEëlj˛ĒĮ4›ÍNžĨĩ!Š.ԈĪŅŅQJ%T|¨ĖŪđ|å˜WÉÆÆFÎ5,˜ņ:88Hq–a`íFFFN{ô~5ÁŒ3ĘĄŧfggc}}=יįe•õŔĒPØK.År2+Ņ€VĢ5ōôK$ō7üp_XX¨ôTz@_~öÛēŦŅsÅATĀĒū<§ĻϞę -9@nÍqüiûEÛnßžįŠ–ū‹8c°k­vLŽņSæ|îsņŽ/})ĨėPÄ ´ĨÎ }Ųét2s||<žūėgãÃ_˙z|ķHÖætÍÍÍÅØØXÆY#U~Âömoo'å|ÕdjÕQĪz÷J-“Ö|=ŠMUš@dĪ=G‹ãøÉü ūú73ŽËá|]•‡ŦMY uØFDFž|ėąhü" cŨŅĄûŽH ûĀÎäų‘‘Œ´ˆg•ėpĸíe•l¨‘ŽÖäädFØÖÖ֒”á čs‡āxŋšm­ŅĮN§ĮĮ§‰I.o4N V˜Ķ.\ˆN§“vZâŗhĻĒTÖ)Į`Xv~Ũ]Wã˙ū#į×/ûÕjĩ’Q"ÎôōūͨŅaWĐD `×d #VY`1âŦRßŨšs'å 4°lļĀĻ„ŠĒ;¯ÉTÚė蓓“´Á×j/6X€8"’‘˛íīŸ’ãhsōē_›öHrĶĘĘJĖÎÎ&¨ ­I\ú“܈×FlŖ~á4ØPlÎÆ‹ƒVĩ¨XRÆfjj*Ŗ`Đ3ŪX¸ŅŅŅŦ2Ŗ?m˜€\ >Į3ŋ0V˜×^¯—ũī€n^čŲûÖŌ–ĸ•Y3ŋ#ÎōjĩœąŠ˛+īæ,9KMv´v$sĨ4ō’ŖOsĀ"c”Z­VVÁNN¯ÎĄ9Ī)ŦŽ<' û§ŸDŦīĪ įø›ƒūŽ2¯š MZ%‘S?+‰šĸL@zMœ¯Zn !`,Ų }* gŊÖy;\°&šwN÷ŦĢŗ];ŠŅ¯mdo€*‡Ô!>ėžõ^ĮL›HN8/Ú¨fũøøx˛í•$ĐֈČHf-X†:0O-|‘(s\ģjNöŲû‘ŠČÅŅ?UÖ!ŠËV˛ĸÄÆĄJߌy ™S­ƒtĒŌ*ēxō@ŅWļĶ}õa]÷ÆÃžā ŠÍÍÍĖ'p °>O]̝‰ ˜Ķĸ‡æs¯×Ë6˜ŋŽõ)‡ÆûDD:uö7ŸŠšp8û’ņ:ķw÷u^Íæ¸ūĶúO•C0NĀ&ŖSå,ä '''™e)ņ<›‚ĘØ  ‹ąĢCDdBĸû3^Xîųųųd‘üŽ|5đ1ļ“““Š?ŒˆÔ ’ŠÔUX܆¨o0õ |Ũ,kâæ°VWa”i¯^ŊšĄT,_MöĢɡ€V§jX˛‘‘‘˜™™‰7ŋųÍŅlžČCÆx*k„ā6m.›ÖČČHloogs€C›§ˆˆ>ŌĪ6ũ†17_JĀÕ;¸yŽ0ŧ9à 劎\ķ*ioĀĢVé0/j JLc­6á(0YuҘžvģ‘}C[΁œššĘu311‘l[ÄY”Œ“üqXÔĖHSHŋĒ,ČÜ׏{{{É˚ŪŊßīĮėėllooDĖWķ×:ÚŲŲIŠ„÷¤Ũ•OĶl6cuu5ŽŽŽōžä8ôüdÆāāā Z›qÅHΊúöÕųÅū÷ûũxņęÕøđˇŋo{ÎŖę×ķ,ĻĻĻrGDØąõˇŋ=>đÍoF÷īĖÄô‹9ɑ2ßÕfˇž*AĄĪ81*|ŽŽfä ûĖšÅxooo$6×dIŦ=p "j"^OŪ :ö÷÷ãCßúV|÷cKéÃŽÚívF I‡"b ĸ*éž×ëebė'đƒøö‡?œû‚īYŖÆÁ$úRuėėŒ9Āéu-ļ–%H#AjŪቓÕëõōÜŠŠŠčõząēēĮĮĮqųōåxõÕWĸoœ^NˇõčūaˆåååŒlV['Ōę\—ĒīፘûÚĀ>Øģ띑ģĪūķo ί_ęëŧšÍ=rYā ģ2cŒ fT‰‰&`Č`ÖJ5i[Į°1ėÍZ­ÖĶ+‰Ģ26U—L˙777—Z[ˌđ/`Ú,՛Æ>é¨Ē5ƁHĪ~ĮWP-G€ƒáīf@ásĪ=—ũI+xnn.C͈ˆÔŽ=5á‹.Ϳ΍œ2 L?؊ąŦŅ!cũA›\Ā HĀ#"ë¸ë›\=9´JI°ĸU–…•3/šVĢ5Ā,béŧˇ~vĮ“ÄtģŨ˜ŨŨŨ”=xs´ßīgųFĘČ;ÄØ5?""õ֜}ĢfˇMwii)S•–Ô\2‚šŖqtt”ëCG†ÕívŗÄĨ÷ņ]īÆįČ% ÉŲŗļ9ÂŪgbb"%´Ųtīú…s‚y¯ §æĘ•+Wr͉RLLLÄúúz4§cÍĪĪ'HTÚSĤ@_DdDgqq1A ķää$e(’ß#"OĻģü8jĩ„éŅŅQĘØĒÃÃ͞š÷ģŋīüã?Ž~ęSqņâÅ´[Nŗõå˜xö\…ũ5­%eŊ' ģŊŊįnHĀf.€ņÁÁA–|ŅTqJôđ5öŸ}úéø‹|$šŋx Ø=u||œĮÔ\\\\L}:y'cmm-ī+”ãÅŽq,|Īüžxņb\ŧx1Úív&Ŗš÷æ_ĢÕĘņåÖũDŌvtt‹‹‹i WWWc?wÚÚÚJæŸíaß'&&r,jTvttozĶ›âī|güėg?‹Ÿūô§ī$šŊÚMëÕ^Ŗ]ląv™×[[[éˆxæųu÷^į2›{ä@yņõßĩ„VÄŠ‘Pxø6îˆH=t5ėØ?W íUÆrøžūŽzl?ŗz.PTÁŒĢ–[Ģ2Žú˙ˆÁg„TæÚfŽ ĩõ?ú°–6Ģė€[vˆ:Ū‡ŪĶXÁõū%­ŗ&ĶvĢ[MŖŦ_/ÆS´ĸ˛Ēú¨ęŠ%HWĒŠKjËGœÕĪ&ŽíM S%sssŠ—֋ÛÄ95’œI~FFNĢ“Đöb ĢADĄßīg‚†$¤Ņ8=ãˇŧŧ<°f"N^Í}ąŊR׊wžžŽÍ66ąæIXīĀS-Áqϟ6oą•Ā"Pcū‹:Eœ%zōAŒ%ûwppģģģąņ+ŋ|â‰hŋãų,ō `ˆü†ėĸiՏŦŸ?÷=˙|Ü÷ÜsņÚ›Ū”}ŽĄU^W$ĸ&Dc_Ģ.ūūûīˆ3’ĸæŸÔ{ˆš…á֜„ēĻ]ĮĮĮ177—ų5ęđŅī|'""žöŪ÷&3MRF"iũŽ.\ČSQ%š’ŒH|ūčwžßx˙ûķ=šÍS)ĸũDG ÜÆŽí™ššŠ+WŽÄ'>ņ‰øā?=ôPĖÎÎÆ7ŌļęĪĐäuge—ÍiļģßīįŦNŧuąšš™Iۛ›Š"‘ąŽÆÆÆōDhöŨ^ö /¤Üjbb"Ųũfŗ™sCõ(ŲÉÉIŽgöŽÎŠÚŽfķT†ißüŨßũŨ˙=Đp~ũR]į2›{äĒË`l”†cœjâ `eŠ8̐Q“”ĸ‹8ĶąKŧpáB֝žsįN,-- €ĢĒŧpáB,--%ˆ8;āĸŅhÄââbŦ­­å÷hj•WSūq¸$Hß)yˆĄ8Ģ|Ŧ–ßŅļV āUö ZŸIoZ“2#°hc›+ĐšØ[“:%wÕj<(ĩąONNŦĘŪ="˛ļņŪŪ^‚Ā_¸[_īííe Bs‚s#L홀+§ooo/e$€ˆvíúČF*‰¸œ˜˜ˆëׯ|ÖÖĀįā#cRbcĸ2Íōōrū(ĩÉīīī§TĻĶé TLÚŪŪÎr›tãôīÎ+ĀĖŽ¯¯gÅĩõdžët4÷F#æįį3YÖŧĐ*jČwPIŽÔĐ5sÎ8€Cļ<§Ķé¤c{ųōå?å777c~~>į8YJMv@Œ[¯×Ëx°´Ö”9ēĩĩ•’Ģš[Á1ĀnZ#¤hú$ƒ6[žMD¤,‚smŨŽyw•jŒGM‹ŸũÎīÄÛūëÍäū™™™ŦfÂ>r96lĀĘö:y–ît:qß}÷EęSÎ_¸p!+JqąÅ`b“Ømލ6×g͉ˆˆŋøČGbĒ$*×JN՞V[Åŗ…ƞǍY’Ā–Dœ:uŊ^/mG2==—/_Ž÷ŧį=ŲGoyË[âÉ'ŸLɸ™Ÿũūiívë!ĀI0˙ÔĘßŪŪN'EáD¤@­V+Ĩ<ō äx6ŲYŋßOi!ŒCh/% ­gIØ+8¯ĒŋąĨ5˛dŨEDĘΝģ÷:gæīëß˙ûŸúm†Ü"r1B’|°UM¯NwPa}ļŲlĻžŊ&Xad6#zxx8PéÃĻMR€"LļL…,vö'''eūÜĶ&ĪIđnŪ|—sƒ5eŧÕ ¯Ce]@Æŧ2ėÚ#Iŗęø'''Ûô1yĀMwŨām~grÚĐFŖ‘ÉÂ5‹Æž—ˆˆû~ŋŸ›ae[ELÆÆNk×wģŨ|}hÜCíō˗/į3ÍQmęõzŠŽÕKH0Õ1P.˛ŅhÄĘĘJ,//įw777ķŨ+C^e66T ĢwŽ>ÕœãããY‚Ņũ•÷Ū€€*)ĀPË ¨āÅēކĢB™ĢÜČČHžų`ķįHŠ8Õ ÍU¸[ IDAT†ONLdĮĮĮąžžž,ĨDcY“˜ą[[[Ņívcww7įuTÉG§Ķ‰+WŽdDĮ´N§§§ŖÕj äĘ ˇÅšY[[¨ _õõúÆX´åWâú§qķÍoÎņƔפq‘%Ņ NļŋŋŸí=wß}ņ‰ī?ēīzWJÚØ3ų@—ąĐō#BĖsŦ¸qeoiÃ9Žúgll,ēŨnjŌ/g{~~>m*'ҁųĀ7ŋß˙Ä'ŌÁ0/jå}&‚ѯQXšrW>õÃÆ_ūú¯§];=ĨÕ˛ŪØåa'}mm-x⁏téR,..æžqûöíxņÅã•W^؟ØO÷`'nĮ–ONNĻķo¯&fggŗČŸäTdLDäų‡‡‡ŲG˜÷JbpBk#J8UËoĪņNzĩ¯FÆØ2ҘķØģķ:gæīĄ‹ŅŒZĀĻθWö:bPķ øûŒŌ]usðõzŊ4ʘG QMÎĒ˙¯LL­(Õ ØC˙¯ė—Š0œ™š0VjI€¨:-…W16 t6ßjœ9\W ,1Îfh´QęīųųųJ€đĘAđŗ*(ž‰yŽõہ@ãˆÖōbŽi7"rĶņ9mЇ¨p j˛_EĀoÄĶZ™K2ũÆųS¯Ųīŧ69"ŌayÛÛŪKKKņˇûˇŅëõōs>‹­Î=ßģ`’IŸ8 ZĀrvv67iŌ¨Z\Y:Āãäéw`W›­‰*eĒŽT•N`ä\Ō5ŦĩšíYælMŠ­‘4 ČÆâđđ0ĨM4Ė`D $õrÄI‘8ũÆÎT§hx~‘Ō9؉c&‘Ö|QĨ‡tÉQ 61âÔų#?ŗŦ$„qĀÂsLĢ.žÃõäcÅŋü刈øĢO:íÜččh˛ŧ5 čŪ"næ€uRZ¯×ŽˆĖ°cl]%mØļēX#æGõcßũnDD|įŖąBÆpŽjÍx2.ÉšˆOMMeũūšPn\ŲÂÉÉÉdäũPe­’ŊÍÍÍX[[KÛĩˇˇ¯ŊöZ˛×ÖĻqĘ9QėU-ōPûĮžSīŅétH#ß×&{`ģŨÎ*lö-2SkÂÚŠ2+ŌVûĄõęđ=‘-m1OI—:N’$Ū}ww7÷ĸķëîŊΙų{āúâŋ˜ ŪôÖp/9EÕobš*Ã\ÔÍ f˜„õE0Ŋ@'āM‹Œ!´Ú„1‹tĀX& Ö&gƒ˛Ų3ØxSL/P!*`CĄĶ­Ąb€‚3AžaķrĐÖjœ…ėm6lšU§ēOÔeĀyŠd=aY|•>U=6G °§ ­ÚTŦĐ|V ˆ cll,7Qaߋ/Æęęj–'TYĮ&,‘SĘ˜š ŒV@ƒŲUr-"˛’LM˜ˆ+WŽÄŖ>˙ę_ũĢøđ‡?œŒņîîn‚"kwē-Đ+ĪĸjŨå?,,,$ƒ ˜ˆ9Ŗ6ˇ§ĻĻLēßááaVo9Éd(€ƒ¨Žį™¯ŪΚ­•8+æ•u@ƀyt/,#' °˜žžNG¨åŦÕŧĪņŪ*2aDk%,ķxcc#¨īvģ)YĒō!ļILRļˆ`ƒ—ÚålLdww7~~˙ũņūo|#nžéM1;;›gR`t­yãf|9 ĸl]ų‹<ŧøb\ũųĪã֛ߜ}ʞÔj5ÖĻ1¨s a€XĐ,8­˙ââb˛˛4ۘ]š9ö4"dsŋū—ßx˙ûsŦ"NåBˆ6ËÁcė3 ,ĐΈHŌåŖßųN<ųØcЎ¯Í.]ē”Ŧž}Evww7įéņņqlmmÅúúzlnnÆÎÎN<ķĖ3ņ /Ä+¯ŧ/^ĖŌĄYÎ!đî”iÅúũ~J*Ųiã­Ō’ĩËžšģ"ÖJĐÖ(0[.šĄ¤¨š||<#fMUIĒ}AyØę|‘q$aŗŗŗY҆=üžđ˙Hœ_˙h¯gžyæĖß ×ūá0å lMø™œœLÖ*âŒávĒ&c€yŠ!ÃĒŖÆD2ŽŒ¤EoŨ|ąTU§ĢŦ$cæž1 ÁÆōÕrXušX2„Ēi""Yw€Ä=§F2’§'úŲ´`įXØ4 Ôa+ msÄā&‘‰MĀČææf2Ŧže ""ßCK[é}ĢÖ[Ļ€†ēk[ŋßĪÚԘČ*C2>€­UDsĖCŦ6įjgg'įũxeÆÜÛĩ¸¸8 íÅtMLLDˇÛÍ1ÄFĪĖĖÄÛŪöļ¸xņb<ûėŗņĘ+¯Ä‹/ž˜ķâčč(ëŦ÷ûũ žÍĄ¸}ûvö!gÄØ4Ôڊbˆ aÅ8mƉķĸD_€ųK—. %U€čt#"­õ¨ĪŦkkģ&9ޝ¯gôÁZ!pWC÷̞Ž~´iîr8æ%‘œ›“““< UŸ°)ÎÃÃÌĸŦ¯¯'9Á¤uM­2]7@,T5đæĖŪŪ^ņDDD|ëCĘyā˛˜eķÕÜg´mbb"0l÷‡ŋũíˆ8­ËÁ¯$CË1Ē„ŽLĨŲlFģŨŽĩĩĩ,—ęžÄN§{{{ąŧŧœvxss3Ĩ_•ā@°\ŧx1íūÔÔTJōėŸÖ @ÍŲķ~ė6ŌĸĘ8IĒŦu’'ī\ׯyfŽW ĮŽķŒ(ÛÛÛ(Ë,÷øø8~įw~į ÂųõK~ƒų{äúâŋ˜É0׈3ŠKeAyô9Ƥß?=äFâ`V“m¤ÂŒŠ ģnž@NÄŖm¯ēā T}†qŽ•p$¯Õ¤&aë癐€–̓ÚÖl6Nkeô…‰ą—5 >\žĐ;`{jÔAˆÚŊlb•ą§;ôlxõôĮĘ0‘DpZD!l/‡‚ÆKí"Œ]Ŋ:Nj`ĢäëI–ōÚk¯ÅŗĪ>ׯ_ëׯ'›N㎑&SĒ›ŗgÎÍÍÅÄÄDĖÍÍenAÄŲiƜIlk˛u^WgQŌŦ(1nj5°ŗŗ“e AÚqgDXg֍dRãëHœÃŒĖ7΃ßqtÍ߉‰‰¸uëV&‹?ĸ%˛îĒķéĒeT{ÃipķB ÉĶ&ŸĩŽ1ēl‹ ŖŊŗŗ‹‹‹1==/>đ@Ü˙ ąūļˇ 8æ[[[9w1ŅlAöU}='Q›Ößūöčŧãņž¯=ūny9“A1đÅÅŔíėėÄÚÚZZëą&ۛãõto§W;0??ŸQ­*ąIØŲŲ‰ûÛņôg?7~8îūūiĨŗ•••´7ę§›Û›››iī§§§cww7sH"TWž{.žúîwg´ˆ-Šō,ŅNēp‡‘yãŊšš'''™°ī}ŊgĢÕ ND…ØĨŦå+Še3įj^”ˆ¨ũJŋsž$™[GG§5ë9žctģŨXÍI# e UĨb÷\H'į[čģņ/ūÅ??œ_˙ø¯gžyæŧÎüŊrUyÕ Zĩü™–…‘‹Ŧ-]Ģ†tø™ûTŨžŸy´įzO0âĖđžõgĘ=VųKmWŊ€ŸŠ×đįëģ ŋ~†ãS˙x'cĸ}Œ0§ĄūœSĸm5ŅŅutt”ß*ô{í_˙WŖÛĪŨĪg*ķî3ū­-Ã`^ŸWÛãߎ7ĒqíŗäBžĢ˧öW){Ô9#´îÚÛۋëׯĮĪ~öŗ¸~ũú@ŸV'Äĸ~ßĻŋ¸¸˜÷ĢsžŲlĖql°ûÖkxn؀̤Æĩöíėė¤üÄ|¨ũZĢĐÔž­9ƒõÔëō}í´f8ŗîUIōĩĒšŽí¯mōėÚįĩīĖ gø]M.7&î%‚â÷ŽÎ+'ˇÚ¤I•>˙ĢO:~õË_hŗvē—ęZÔįÚRĢé‡ŊŊŊøÉo˙v|âûߏw}éK}§­ÕvU‚ĀX˛}ĩ?ŪČë7sē&žۏ}ë[ņŲ§ŸŽīâ)׊ķČúņ•°ĒūŨķŒ;^ĮëŸ|å+ņ­}(5?žCužúŒĢž`ę?íbŊƒgÕōžJÁē†íĄįÖwĒīRmcŨGĩ­>ËķëyNâ­m¨—6j“ûmll ظJ Ī%ķt Fũųuw^į °÷ĀU}ՀĶ=c‡ą$ôÄBXzŦĻwww7õŽ•I§wˇ`|ŨCHŸŅÅäaVąJõ$ŊĘt*†™Šˆ,§H–c“ĻqVyfss3FęĻŠAęŦFyZ&Îû*Ë×nˇSæ€UĒú[Lũėėlļ1"’…ÁĖĶŪcKigĢîXčËSņ;›zŖŅˆvģėfMÔŦQc^õŊÂá˜29ÂēØI›ÉE-§æY Ā+Ŗežb°ŧģž¯ydæåūū~´ÛíœÃ6DsĐs:pĢՊØÚÚJbŽIBŦĖXˇÛMvt||<æææ€ˆčFvvv6Y2,3ín• ÔdØŊŊŊdŠ}ˇÛM†Ũú‰8HČ šsįN–ŋÄęc•…ķEŸŽcii)ÔááažŖ ÚæČŸ*(!¯ÁŌpģˇĩemJ6^YYÉ÷ņŦĩĩĩ”A‘ ĩZ­”Yëš;ä8Љ"‰ĶבIáNŊ6wĩåʕ+Ų‡’-#"~õË_Ž˙ųųĪgÂģvŒŒŒÄÜÜ\llläiÁ‘˛;L0Ųˆ Äááa<õ™ĪDŗŲŒõĢņėž2›ĩĩĩhĩZYˇüūûīĪqđ3ō# ČÖDu(éĩŲ}ųėÍÖÖV|ü{ߋˆˆ˙ūO˙éi˛ũÖVÚH}ŽŌ y(Ž*FF#YdĪŽIáJ^zVČŋŨ5w†#\.ķÜÕúÍÍÍÔôČöŠ­­­ĩQ4Š–SskÁ‚š/555•e='&&˛ü2MŊ(ÚØØX–PŨßßĪ"Øö“““”ė‘•˛ŗŗŗyhš}ąŅ8­ôģpáB&›g${Ífsüŋ‰u~Ũ=×šĖæ¸ūíŋũˇLG­t@˙\3ŖŖŖ)CĀ.U9GŨ0$,*‘l ã‡ÉUŋ*) ¯gŒkՏĘÄx?Úi ˇC€üøø8 >]fD $į1œ¤F#­Ēl[eŽŽrÔOdHũūY)CzI@Bŋ’č;›~M\­I{@MÍQ¨e ĩšÛí&xĨmÎ՟BÖdĀĩūˆd2kífŽ•Ã†j•Ž:fu™g•]ļšcĻĒ€#éhr`|N?ĶLˇZ­t"Ŋ[ęļ5"2dNc\LŽ\ÕᛗæcMîĶ.åĢŖU“˛&ŽåœŖ…•Ė Ā¤*$]œRÚúvģ˛‹ˆHi'€ã äU T“Éĩųčč(Úíö€S_˚֨ž9á| •ˆˆ………ÄÕZA  ÛÚÚ¨čbžxd2úGŠCÚiĨOGFFĸÛíæ9€¨äînˇ›=ÕÚÜ;#"žŋīžxđå—ãÕGąąąxå•WŌn™Ģ7oی•••d>īûú×ãÁë×ã™ßøØxûÛŗMHYDa€Ā0§ûũ~:ÍäLô÷ʛļZ­xë[ß?úQŧô/˙eöąīčdLĸqu?899‰õõõ´ą•g$ ל'’3„ą:Ļl ÛD†CBD’ĨôgJėííåįí'’›;NæO ˆŒĢ}áSí˛ącSĢLŒ“RÉĪîõzųžö•J¸ũŪīũŪ˙f8ŋ~šŽķŌ”÷ČUĢkDœÕ:ĮzU}9ÍlŗŲLã­: āĀ1ŒÄ/›KDdNÕ13čŒ!#Ø͘ŨˆH ˛“ƒŦFĢn6"FT˜î¸fŒĩ§ÕjE¯×KšD=œƒtŖRÁāFē ųļ&@ŋÆĸJGRKЁč‰Ē’ļö÷÷sCŦ_Öŧ?Ķ?@Āå}Í Ŗ m6›qõę՘×^{-7~Yāŋ6ėFX–T+ŲØ`Í‘Ÿˆŗ“`FΊÍÎįI>”ëÛŨŨMũ, AKĘŦ‰h6y'RúY šW€āŊę†П•SbŗÖĒ>UPßh4ĸÕjŊáŲ €PÄ ¤)"SĢΈ>ļfZ6ĸß?+ƒ:22’ēeLēC‰zŊŪ@H-īˆeėˆ3yGŠ&Ķ÷zŊVĩĶéä3k)Ā ŧˆeūšKcļĮÜ1īj4¨:ld&ßũØĮâã_ųJ<ķŋU‰D\5§§Jú"ÎĒ•˜c@3–ûøø8žúĖgĸßīĮ‡žųÍŧįßüŗûûû™—ĄoԚøX“Eaj5ĄFŖ=ųdŪû¯ķ7Oí}œCēęęd[ģÒËz īéwŽŒįˇZ­h}ņ‹ņÖ˙üŸcōĨ—bcc#zöA"ėččiĸ8@?22’`uyy9īšĖé‹8ĢĐĩžžžãĄjūL%ŧ{eĩ+!ĸ ~Q1Č^S#G@šŧû“H¤Ŋ°{ŲĖÍÍÍĖ}ņ5¯†cÎŪT /âå7ŠDœ_wßuÎĖß×ũŅ%#Ŋŗŗ“ԈŗÍÕÆ˜üå;˜˙o6›Yƒ—fÕŊįææb~~>:ÎSM¯šiˇ6Ëʐcĸm:˛Đ7p-áļŨnįĻWĢiøœŖ”ŒŽŽ€•FŖ‘•*Āæõ~@.ãZÃū¤‘U/€mUn,|* J¤O9Zīŧ“VĢ•āēu `‘›ŋ đD:¸HÖ%ŗ™™™‰k׎Åũ÷ß7oیˆSVˆėETČËŪØ=N  Ä>$ Ūˇ‚üˆČ<I­Ŧa•ājŽÛx}ŋ‚uĪŠU‡Čš*›Íôž@^eŌú{Ž,)đëwäDp¤°áF#666b~~>“ĨI""Ųnåĩ{}õęÕtļ9đĀĖÚÚZöī0(]\\ĖūRNB0??Ÿ zˇnŨJĐŒֹqę8Õ„ķ………RÖŠšiŊYķ€d-oˆ•]ZZŠˆČĘHsssų<ķTN'ĖZåˆlŋûŨņOžō•Øyī{3ÂX-,,D§ĶÉ>Ą`79aŖŖŖņÚk¯%đĢm`ąŗĢoyKŧüāƒqû­owõĢqõį?û_x!î˙ųĪãÆC Tū’āŠm揈ÃcO>÷ŋđBÜ÷üķņĀK/Ŏ?üáØ|×ģâšûîËčČÖÖVėė뤪¤WųeļÕęEœ`6`Ž ¨###ņŽ/})øÃ?Œ+WŽD§Ķ‰[ˇne9ĀûûÛIŽÉ†pFFF˛‚“öZ ú˜ŊVÕ ¤˙(¨R(åWÍŖããã×ÉŠęžÉŪ8šÖúĒīĞø<9TĪ‚!%ˇa¯õ+Įŧ˛õĀž MÚ% ]ÄĪy5›ģķ:gæī‘ËA8‘eā"""€5???ĀāŠ‹K `3Æ^0˜“““ ē„˙ˆHĐ ”0RĀTŊ*Û¸UV R‚t˛ &pss3KabMEũ ę­<Ö6"ōsäDU/ztt4PŲÃ999qåʕ|/ĄčZʰW†™3ĄôXBԍJMųzB-ų‹ūSÂĶxxxZ“žŒۅĄÉą!ŊÁÕCĸô9‡áÖ­[ņĘ+¯ÄîînÎ12‡hjj*Ų$@ ôž8Ŧ“5÷u"Lģ ÜÆV+ō čyÍ9‘ Léääd,,,DÄYBŦœų$´ŧÉZ%Æ:=­…kˇÛYõĮĪZ­V˛lØ´Z ŌķD %-^uxx˜eMëŧ§˙×.cX#VSSSqûöíÉÄŪ .$+*á—ŗ'BKŽ'ģtéRŽ™Ú'ņąąąü*5ĒŽ;Æ^ߚ'@ ÛC˙Úk¯Å;wōTSåXÉcĒ=ŗÎ)RÂûpÄ$DžãOū$ūę͟ŽŖŖŖL&ívģ1???āÉ0īä:Üwß}Ņī÷sĖkbą5CĻÅžũčņĮ Į‡ūËųŲüī}üãiGšÍfLÆY SrBžœœ$ _]]Íĩŧŧŧœ'ęŠ:YwјÍû’1)CųôĶOĮO~ō“xõÕWŖÛíæšDœˆĀDDVj’ĀqVčãkŽGŋz˜“ˆĨyÃ.˛—‘Î B˞€ŧˆ8%[”í”GqVŨŦæˆXÕŠÆļ“7ÚgäÕØGjžb@ŪE=ĨSßjĩ˛¤o„yDGRŋX—*ūœ_wįuæīKÈŗpĸ0c5œėV*ÔĒ5Žˆ4°kkk bÃˆŗ*5äŗŗŗš™æX8l6ũĻd ÔfRKøÕ¨Vyy9ĀŅŅQôzŊ>¤CÕ¸9ø$Đn†éééLļb|yĶUãĀŸ•\#I˛ii“ÃIŌiđ,Āt~~>+Hp€­Ûˇo„VõoęN´–Ú3&ĩRŠäPŽÄØØXVI ŲHhãÖ­[™´\1€ĀĪÆĮONąö,s~įΝčvģI^•ĄÍ{ųÛüĒĪ6Ɠ““qéŌĨÜøĢtFŲĮˆw333ąžž>P1å… Yöˇæ<`mæäFa‹ĩĩĩt|8SXDmŗ~%Ę˜;wĖaA‘ ōŋcaaa`mÕ܌~ŋŸ'ęšK@WĪ6ÍkŽwÕöZ;­V+ļļļŌ ãˆ›ŸÖ RĢÅ`ũ–ëׯĮōōrŽ5ë”>ۘ¸¯~[\\L€/ 7999PãŊæ!4øĢO:>đÍoÆžų͔Ãôûũ<íæĐpîģīžt@""­šššX^^ÎąÜØØˆŠVŲ‡āī’&Æ,"ČY o˙‰Æ>W̊5ĖŨđėVcģŋŋN'Į˙đđô„cíįÄ ؂Oūāqz‚ėøĪžīČ>{^=, #Í6^¸p!÷Šúģ‰‰Ķƒā¤Vô1Ԝ„šb>‹8ˆg”÷āā ÷ĨíĘi’!g*YĀ™Že%‡Oˇ‡É[ŗĩĩ•%\Éųö÷÷sŊiŋ}.â4rÆöŸæ—Ôh¨Ŋ…í9ŋîŪëŧ4å=tU]iÕ×VMķ°œ!ö= ŽPԟĜa}ž¤VúsĪs?†Ēę3‡/€š–¯ŦšdŸŠĨÚŧ‹Ē U;X%>5ãßgęÆ  ÛjßÕī`„Ŋ§°¨2dõĒ%*ëģøw­9īŨ"ÎJĄũ¯ÆŽ~6"rķ­÷ÖĪĩ/j9žz™7uø7v´VĒ~,”÷3ūž§ĩ°Vū́¨ũ…ŲĸūWsĻö§yXûß3€2ī_/ŦŦßYoÔ_õ3ĸYĩô\ÕØ×īûųôôt,..ŒUmO}ŽqĶ_ ę8pBišëīĢTČ\šMið­¨}f.Ô{hkՏWgXYHcáûœĄ:ÎJ…ēš†áŽ—wķ^œ¸úžu^EDĘkŲF…wøŅãGDįũųŸį÷D,äzĪú~ŗŗŗŲŽVĢ•ŸWSH}ä{u]r˛Čë5<6æņäädFÂ|Ž=ąnßh\Ģm1†ĩ_õ“ EÚë÷“““ äŋ÷ņg?Ö5jî“t@úũ{ųF6Ųķ6*ųū2lß°ŨÃ<¯sI˙­ŦŦÄĩk×bee%ĮË:Ģļ>"âöíÛqûöíוžåŠ8÷+++īŲīŸ•ZÕ/æŋįŒŽŽÆÂÂÂĀúŒˆÜOvvvĸŨnGŪ‹Ŋé¨väüēûŽsÍü=pũÁüÁģ\KĪ‘Mؘ$ V1†ƒƒEg8… ë& š´§jØą¸Œŧ7I­0™ßŅ bF$Ybi„)1"˜VŦÆôôt2yũ~?OŒˆüœ››ËđŦv’)`3UŽŲŪŪθĒ!ÆŌø9–ƒSđÚÚZ2Ž>Lh3ÆÍ;›'ú×}1AÂÉĩē gSm`ė}îđđpā QŸEœ˛‘˜E ÔÖÖÖĀ<’´¨˙ŧŸ‘ŽZ†ôĘû.--ŝ;wbww7Ö××S+l~ÔĩŅjĩrmÕ‚r8ôyDdbŖ9Ĩd#¤Ŋ¤ĀcDÄÚÚZ~ĀĐ}t||œc€Ą— aŨbË9ÆēFē”ĘķŒ*‹ęt:9^SSSŅétbcc#OÚėvģéÔ‰6Wœ}jˇÛÉøW6~{{;vvvâđđ05Ė@ŲLēØzy)ãããAØß?-Čøã°<6ƒn|ww7ÚīxGÜ÷üķqųŲgãĨH€XŖY*ą …0N‚œ  ›­˜Žũ€ų_eXTײ€uĪcoä…DD&ÅīîîæĄ`ôëŊ^o 2ÛFSn}‰éëˆS€üŅī|'""ūō×=‰Ÿīvģ9÷Ėk}m^Ôu(‚ŖÍ DDL%2JŪ‰ųî÷Oå.\HŠ×öövŽŅaųdŖŖŖqųōåøä'?ŸúÔ§bgg'žūųtä(ˇņņņdîEN›Ŋ‰4ŌŪI2'™Yu"û{o^ˆ†“{rVjžÕØØXļibb"Ŗæ{ōųĪū˙’8ŋūą^āŪĸ IDATį'ĀŪ#×ŋøÅÜčÛívjŸÉ+čp…=2í… Š_æ$úԓ^Ģ,€ėƒ¤"Înku ÕûŒ¤ÚÁ6~÷f\mN´É ÕËÚxI2TCaONN2^}#Θ$ížļ9+Î8ڈH„i/{D$(ŠrΆ1#P€<āQĶEW†xq_ũ[K0V9EeÄjI5Ąlc4 ' Ŋc(ˇļļĒ’ĐŦĶōJrjlķC%§;Å"J%Ā8“q˜§āF;L~Á!ŌĮ@Lm_•pn0ŒdƟķĄMä_”ዑûŊ^/ÁŗA9Âōr0hå€âđđ´~9 á]$/r€í1Gõs­Ŧ‚eä uģŨtāĩ]b2öøøxŧë]īŠG}4ËFĒ Ę­Ÿ^¯ģģģ9kÉOŒuÖétŌ9fĩĢí3žÛÛÛ177—åõÛÄÄDŧōČ#q˙Ī×^z)ž_YÉDNũWíIŋߏvģ=PžWĸ)ũôîîn>¯ÛífŸ‹DŅmë{ë›_Ä­O ˜ŧ9lb|c äUۍYŪÜÜLŌ€ŒŠ*Pĸ•~›Fū‡ŸúTôzŊ$MØĄƒƒƒ<_ĸŽ›ēön;22’qœĀž‹R™#kgaa!m‰9e.ZÖžœ@zff&ļļļbuu5VWW?í5GĢĩ•5įįįãāā ę?úŅFŗŲ˜$‰œļáŠYĘo"=õŠŠŠXXXČShĩAßWųįņņņyiĘģô:ķ÷ČõūÃHĻill,Ģšm’L€‹ÄęØl|`ļŲa996p -=1ā\X›ŠMĐ`\+ûôôŒŠÍ(ąyËôįڇÕĀ*(¤—âą66FãėpŦvģ‘@šÎ×įŨ[Ļ35§¤&VI ԁ{LŽÍŖjŽ#Î4ßgZkRuäŗ‰‰‰déĒ~¸Ģ’ ė&Ļ."RË[Į sÜl6ŗb ‡Dĩ šęũčC1ŲÚRõ´•æwgg'YæĒ“ö<@ûčg怤>ũWįä™ķŪ‹Ö¨J'ĩPeÂÜÔU ‰8hœĸš'677— į’žX;< ”\96vZ#ûÁŒwŋûŨņāƒÆŌŌR2ĻŽĢ¯ķŒsĖqÁ×Úį˜Aß=88H ÅÁļĻą×Ĩã”Ũ¸q#ą¤>s{ss3_wwwŖÕjÅČČH,,,$?<<ĖTķ6"bnn.Ŗf1°æ3ë˛JÃä qē9ˇŧŨ¸×^z)Vßō–”ŌI¤ŽMϧ§cnn.ú1ˇÍiãk\8_ãã㙔Ŧ=Ö§Ī{”œHĖŅŅQVėackŌ5ĮĘ<Š8Ķß[ûl.F¸&mrĘ|īƒO<?züņÜgDĩŠF4储˛†,2ßIFę˜{æōŪŪéPúœfÃŅŦr#‰ø*šč)Įųđđ0^}õÕŒŽ )ŦYŽ1€-‡…mÖ?ĸyœ8ãŅh4âöíÛšĻŒ…¨§˜=CF)qŲnˇãđđ0Ž^Ŋšc̟jä4âĖa=99‰ß˙ũß˙ã‡ķë˙õĖ3Μkæī•  ĒŅLŒ ĮfWõ­*—¸§ę6< Ōƀˇ™ k šŋ#Θyręū–ŅķuŨ}ÖwkōaM€Ē%3=Īįī­­­,ÛVõģ*xč#›ŦMU›8:čz>ĮBxĐÖâ3â5QûČlƒ%Ÿ¨ÚWė—(‡Hˆ°ˇwŠÉ‹BÔîQŲ<,Ģ6ú ЇļĢĒ{•ˆvgō™q•Xˆi4~ÆáΝ;)ņІášTįSŸņÚQĢ ˕ô•¯øy=Ājø;î ä×äF, |||ZŦ qÄŧhY=GakkkTĪ…ÁõŽæÃØØX,--ÅĩkײD…ŽS˛&*CęT“úüáhgäëĖfTŒie:NŧôŌKö@uɉĩd& “{Õą¨öÅŠ$ËVY—đJJĮDĶæõØØXüų¯ũZDDŧ÷k_K§^ÚØx‡ .Äüüü€žÜũųzĒŠuh-’ˆTįŌēáėÔ$VĀ8âL'_e:*¯T;Ôétboo/677`ļ5˛Pû­9>>Ž÷}ũëqĘČ÷ŋuhü1áÖĒĶT!2ۜbäûÂî*(ĀéŦëܚš˜˜ˆk׎%ËÎöØ EÍúũ~ĘUŒy¯×ËȊĩlž×9RežÆĪœ"­)müųĪ> ­ÍŽļ}•$qŠ5G666ĸĶé䜨ļä‘ƒV+Ė_wßu^Íæ¸0 ­S§§§cmm-Á9Ķ&N;o3ÄzÔÚŧØc´›Ífnž6šH؁ēÜZ͆Àąņ3΂Ē46áÅú@kll,Rë 4…’<íiĩZųî~¯ėœû`üm"#§6b]“‘E¨Õ}TT8>>=Nđ`@•,ŗé›[ˇnÅC=1ˆŊ?&7"HØ °ĪúGøXnƒš¤zĘøøxt:==ôd{{;ŲAĻÍess3ļļļ2ĖûęėĪ‹`œœœd% ÎgŦöWÕ%ŒŒ¤ĖËĒlœ÷ĨĨĨtfm~1Š“Q‘PŒĮÆÆF&&ę Žfybb"’ŠsYTË<ĩn^y啸˙ūû#"ŌIäTŽŽŽÆ72]Ëļ’.U'éää$6773ÂļŊŊ/ŊôRŦ­­eŠ@RˇˆH‡öää$vvv˛bÆūū~ĖÍÍelfoo/‡ãããdÎwwwsޚŋœĸŖŖŖ¸qãFŦŽŽæÚbŖĒŖėžRĖŋ(9U(jgũęΤŗŗŗ97ŲŧYaÍũ*ÁøŸüdLMMÅģŋō•xö _ĐņĶį[Wív;įm-‹h.ãfŗ™īeí9Q—ã"RwxxiīFžūZķN§“‘U8Íf3ĩÕûûguÍąČÆ—ŗBŽth6›ņņī}/žûąF—~Ņ—NM8Ģ‘Î!˛ĻŦ%6Ú˛‡p2–——s-ŊƜÉŧ¨šÅÅÅøÜį>ĶĶĶņõ¯=ÚívÖiŸĨĨĨdŧkQD¤mĢĒūÜē:<<ĖÄXëĩ:3ÆÎÅ!4~քŗ(Ô𛛈‹°ūõdkDOŨ§ÉŨHĻDeUQ;ŋîÎë\fs\ôG4 TkR°[ŊúŖŖŖŦW Đ1VSSSithĢ>pŠešįǝÆ “bÔD!DĀ2"rÃŽÉ…u“W~ÎĻ"ųЈ8cöl.ĩ69Ļķčč(;ƒĘ ßÚ\"b@Û[ĩú@`ĀáŠ2  fĩ—Æ;ÖđxÍy¨ÚvõöŊ ­ģ”SM2ƒ•Ž‘“ÉÉÉXZZJ@ˆąĨs70˛žAĮK:cƒŅĪšņ%§Đ~ˇ`eSĮGœ‚%×ô¯ąUĪsÅą1ôÃÁÁAÎ É  sšZĨ:E(°ŽõpŸfŗųēPeĖjŨõVĢ•Ž*đaŗŽ}W%?¤ęS“ŖpÜD1ĻĻĻ2įĄÛíÆĢ¯žšų0ŪcŠę įM‡9â=8Ævkk+e=ú¸Ûíæg”ŦëžæEaÛõ-ÆÔœ‹8“’‘ĩÕH oŠL! 8ßî!1Ņö…ķH‚-ņęÕxΟũY<đŌKqû­oMŽĶéÄėėl,RkÄŲ nÍR5ũąŗŗ“6Xe"’üÉá4V# @íŨŨ ^ZZŠééé°úöΝ;y(ßÄÄD,,,ÄGūâ/âÁë×ãŸüdFzÍYí&Á$…Ž."+Ē-Ņ.mÍÍÍ\ĶæĸĩS#^{Õîîn<ûėŗy¨]ĸŠfuģŨįĶä Ôąš#˙œœŒnˇ;ucģØ íĐ^6×ĪüÜúHîЧēö9>¤Ž´=ā˛Ã51öøøøüШģô:—ŲÜ#`đՐāp9BĖ&âîåķîčÖpzŊTč`lŊCeDlĸ6ž-‹Y˞Ɉˆ7lWũ}}ŋĢcåę3ŊO= ŒĻõ\,ãđœ¨rŊđģĪjŗr—/_`tĩOŋÔžņĐÎæxFíûá’põũZ­ÖëæVžŊ‰™įH4ķŊZZŽŽÂŗŗžĐr?ĶoÚ=Ü/ÖRgŸŲŲŲ`M%QÖqwmllÄÆÆF´ÛíœwÃv€ŧfxūęīQßÉœŠšĩMÃķÆ ŦÃíĻA¯Ÿ–3ԈQ•rø|ŋߏ|w÷“tíŪo4IÂä’Ô˛„JJjãw?öąˆˆxΟũYļÄLb=wĸļŊÎ9ļdgg'666¤9Ú3<öUÆdŦŲújGku•:ę˜ûÛ¯8ņŽ?ų“ˆ8­Xc.ÔĩN2§l\}‹÷ĒķˇöËí+ÃɧÕ)<::Š_|1åkuĪņ~uŦęUį\]Ö6ÛnŊÕrž_ËKVû"ú‡ Ēëē>oxo˛Ãũ4<÷=O;Ŋīųu÷^įĖü=pũÁüAj1´“TFŅ…Ā cō+ŗMZP+ļ` ”hŖMUR°ŠuŠ=Ķž´´”IX˜Š‘,WMfRŊAhŸŪ‹ čõû§'lîííeÂn­’ã;žÉ‘UuÃ6ÉĒ ‹Áž4›Íy’qĀŽUf؆/ĘQY;›`Äā;UYķ´]ČÛ#QŌŠ‡Āīƒ>׎]Ké –N%’ĘTV 3H÷Ŧ65,¸w‰k׎Å;ŪņŽLÜ$ũŲŪŪÎähļDUĖM­ˆjŒ'›?22—.]Ęä5NŽ5XačkøSŒ ŽîšZK ÖlívôģōŖZ#Μ"% %;ú>pī{X?ēđšĐlžVʘŸŸĪ(ͰždČąĢķT;E“T>Q‰… )"2P[ȏĖk•T*Y__O Y•Ķ`ΈØUpZ“°kôI„GÂ!†>"N^õŽæąH’÷¨2/‘ŦÕÕՔŗxļB#"vß÷žøŸ‹‹ņūo|#–˙îīâīq(–Ö;ĪÎÎæ‰¤4ũXtėĩH€¤û~ŋŸsg}}=m+‰ŸuV%‡æHĩO΁'…#ũũ™ÍŧÉŦ|â‰XyūųøŅãĮĢ>šöŊ–§e'°Č"‘7oŪLŋųj,ĖsR:2sčâŋYÅ)"2rÄÖĒĖeėD<ŲŒ5ųģPm§¤usܜžīžûb{{;:NĘŒĖ“‹/æē6ÆæžČ~ŠIÔėoÍõ˛?™s˜}öĶ}ģŨnFŒHԌeÍm˛įÉŅGGGį °wéõĖ3Μkæī… ÛúFĖL s3T cl“ĮLnmmÅüü|ĘĒļ\č“îø†TidmZBÅ6c7ā‚åŽÉb´ää/ eę>1âÔ@ÎÎÎæéz ģ÷ˆ8‹HgÖ įøøô¤=Ąk?8Ē^™ÔÁũI’°ãœĘŽrĒ$, ˇ—œr†Ē­l6›šĄåĻWå>*Šsō‹ũũũØÚÚĘ|† |Ė%Ö8[ŸáĐŸž|Čáá`™G5\>==˙ú_˙ëøëŋūëxúé§ãāā Úíö@̎ŋŋŸī˜özŊ|sĄVŌpMLLÄÆÆFĘŋäÛˇo”3Ô×ú€ļy›SÚę˙5į€ĶhîßŲŲŲ|zzznōIÚ$Væ„5čDœ‚ėååådŨ0ĮÍf3~øá{Ē€T™Iu’•WÔīôÎ$ æ×<Ū˙oÄgžz*ž÷ņįwô%ēJVžAjĄ““§#Õ¤ûÉÉĶĶŠŲ 6v8ZÅŽ‡tɏÔ#NĪ đLë˛×ëĨcĢėä͟ũlü‚`áU›€!g§ÍŖ*ŠdĢÍ kęŌĨKiÛŲ Î8ģwxxv˛3Ûq–¤Ÿúũ~:ŧŨn7"Î ĖĪĪįáiänuM¨úCzséŌĨ”ō‘HÕąĢk´æ}Õü¯*]4÷ėEėĄ3Ŧķšhģļļ–e[•1m6OåE*ƒiˇĩĘîJ–×Īį×Ũyƒų{āõ÷ÚÚÚ@æ;€Ĩō†ßŲÔ„DˋåR˛kdd$ëÛPëŅŅ€C\Ŗ.\Ȳ‚@gÕV֓õfffJSFD˛ĄB˙ĩ,Vw}}} R‹Ã\0wõō9%å$V–ķŽņĶbŗ¨‰˛uãfœgffĸ×ëĨQîõzŲž r0gLåÖÖVLNNÆüü|jļ94Uī­¯Ŋŗ2ƒ€ĮČČHt:*6áíííėcāL›†CÕˆ3]˙ÄÄD˛ŠŪëđđ0ūôO˙4VWWŖ×ëE§ĶÉM“Ķ@Ûl6hŠė077—LŽ~ÂębSkt‹T™ÃØĪ~ŋŸĀHžpáBŧúęĢėlÄ`•#gŋߏK—.EÄY]{ķvX‚B[Ėųëõzé”UāI[OōãŲî999™úꈈvģIƒĸ4ÁĸAķķķéđÔō{úŠ3č=#"OcÅFÖ¨†DđZ)¨Ų<Õģ‹Ę4X^^N;˛ŊŊ%7/^ŧ˜Ė#IDeåÍ3ŽáĨK—r 1˙Ūs|üô°;QŽš7â>æßĩk×ĸŲlÆOúĶt‚ŅÛˇoĮ•+WŌÁ ĩ]ŠTNāĖĖL<õ™ĪD¯×‹ĮžûŨˆˆxæ7~c wŖÚŅ%@mkk+ĸÛífĄ6‚mdŦŋœ‡€œHČûY#”´ķœŠųųųqgffō4×/˙ę¯FĢՊŲ_°üėŠ$O5Ũĩ¯FØ`ÛāŌ^PsÜģ×ëe’ųÆÆF:wžåŨ`û$~š÷N§“ß‘‡qņâÅXYYĐÂ+ĀY•ųāԑÉY°Žä™p@Ü[ÔÚc­cš)úI$-"Š Ä8˜æĩķcDŊûũ~žŅī÷ 9œ_wįuæīĢ†y‘ĒŨļAĐpb‰Ÿēš‘Zõ>ØN ÍFQ6ęm4177—`а‘ûŽMËWK>bg€ī āk$@ø”ņÄ ¸‡* ĀrD$Ûä˙6? Ŗä3Ž8s2Č8Gú҆ ¤ywīę>îupp}ˆŠ˛ųaÛ%g05)ËÆTYËÂ%įM‰ˆ÷ņž6{€MÛĒ&Võãh Ė›&üÜsĪ%ëË 9)úGû…“ûũūs‡“ˆĒÉ8ŦXlāŠÔJd…TH˙l5c,ëĐ/Ú_åXæ!ÖYßÖōŖ3zãáųq&åâ4sˇĘØZÛ5ĘŒ*ČS&ĐgTLō CTīæÍ›Ņl6ŗ6ēšÆ)išžžŽõõõ$ęá,s\ä?€SĩK^ģŽvql+“_ËxNLLĕ+W2šaŪ“žĮÚnŪ GČ,"ÎtĪúčûŸøD4›ÍøāמO}æ3ikT§&3×ûąSæŽq%uĒ6G_Ĩ$ĩæ=§Î\ĢuŨÛívŦŦŦd˙|抧""âÉĮ;uĘíŖé4õw-wi,8l¸nnnfE¤œŋœÍš¯ãžĸlž/šÚ=ŲNŸ„|Qƚ“aŨœ!E€ssĸęŨŲsĸöa-÷¨ē˜ža;%6ŗÉÆØI˛Ū‹CZs)j’āŲSiđ œK$‘ī‹:>į×Ũwƒų{āb¸#"å @5Í$đ]Ŗ°ŧß3ĀO•@•õˇ‘“ž,4›Íx衇â}ī{_,..ÆSO=ķ73ĀXԓ&H‡Í)ĸXōʒ2xBœUÃŦܞM€“ĖFNëSē3Ļũ lÄYũgDäĻ‹m­N G¯ ôcãvww3ŌĄ]dôų4—Ēרä#ĩŽą>K ėVgŠ:9˜FmޤWˇÛ‰‰‰,·š0vF#+įũūi’âææf2ī[[[qųōåÔųĒæáūĘ r,fggÄÖ˛{@ßōōrDD–~s蒒o爈‡z(–——ãᇎ˙øĮ91Đ### FĖsaoũHĮŒŊĨõÕŋÂō3Œ6™ >=ģ>ŦõĘÉÆ‘ĘNGœJ8›€PžĩĩSSSąˇwzčÎėėl–\Ŧõî N×ūū~ĖĪĪį 4ã=ôPž§¨°´°°0 ›ĢŽS0XTķ\2uY;‡‡‡1??Ÿ•rVWWķĐ, 4ĮøĒvcqĘū>÷Üs9¨gžÆÍ›7c~~>įĮˆ,ÂØ˛"~ūũO|"îÜš˙ųŸ§M~úŗŸM‡Æx{.{TÔ­ÛŨŨvģvštQßÕĩŽü )÷Rã:11īũ…ĶYK˙¨ĶÉ(€HãŌŌR&ÉrĖDĖyĪuŌo}æÚÚZÎĢtā°ÚėĪøøx\šr%ö÷÷ŗ"RM65ΜM$ZQ#Ĩœû}žˆÔĖĖL2ėU6‰,â„Ë-:88ˆÅÅÅČ˙âĀŗN'SDz366Ų/4ûu,kô¯F&7Č9(5ÚÉ!Ē…%8°į×Ũyƒų{āZ[[ËjĩŦ™˛2 @Tää, %ã Ø<×Ö֒ESĒMč÷ÁŒĢW¯ÆīũŪīÅĘĘJŒŽŽÆË/ŋ‘ kq°âX aGe!kYÕ2âØŧĘNcwĢ#akĒĄĻyįč`ģ€áb ›\„!ļųÚŦ9 ‘2 :\ŸßÚÚĘ XËēá éV6[Ō› )â,‰{d#āTؔ1‡‡‡Ņnˇ“]ŗ›#´äËËËŲ‡ŪĐĶWGGGYŽobb"Ö××ŗ=ÉĘFD&ŪÖąŗI›{6ËzR•ŒŒŒ¤TÁ<âÔÔōŽĘrđVVVâ=īyOŧ÷Ŋīŋ˙ûŋĪy <¯Ņh H^8I€{ÄŲĄ=Ęü5›ÍX^^Î9qĘVWrĒZûˆŗj5[[[yę0ŠTģŨÎyŦVũŠ}ƟshŒ9`ƃ$Ā;UIE-ãhÕ\ĀÔZ•ŋÁšTŒ™hŋ+ŖˆũŽQ'‰¨ŒŒœž[ķzȓÆĮĮŗæyurŽ_ŋžN˛ü —÷?=?ajj*.]ē”' ŗl›sĒŲCĨČĖÄÄDüøˇ~+uāZŠˆø‹|$!듊ņ6ל@úč;r4ôs•:ų›ŗoLGFFâ×˙ō/ķ=ūü×~-ĩöãŋ°=´čœö¤Î3ÕĖ9UœĄēŽ9ßæ—hŠMu^Í÷*9ㄎŸžķprr‹‹‹Ņjĩ˛œ#ģËqY[[˓[­åĨĨĨyoŽėīīGĢՊ™™™888HÛĘ9ÄúŗYœ&@ŨZĩõJ{’qæÉ%­!öB˙ęÛņ­Ō;všmŌ§ˇnŨŠŖŖĶ2°—.]ĘČw•žž_wßuæīkyy9YÕaö‰ÂjTf–&;‹Éž™™‰[ˇneø3"r͍vĻÖÎÆrŽ­­Å˙ņĮėėlüøĮ?ŽõõõÜšˆ3 ßīŸ PV=ēļ3œ üņņqJ]}$¨u\¨āƒņĶ75ÚP“×8Ā40X2ĮqŽ É177— ­÷ hÜ#NÁ9]?‘yų嗓YU3™ÆēVcŅß$ 6šē)b§H+´+"’]vh č~<ōH\¸p!~ō“Ÿ ČhŋZEegg'ŲsĪŖ§­y;;;Åĸ7773bŌh4âęÕĢ)×j#"7gLž÷ÆÆF|˙ûߏgŸ}6Ų\š\Q,ī øˆZØh¯\š­V+Ŗ’k9ÉjĀcčĖ…ŅŅŅdĢŦDhžŽa•‰ˆĸ™OÚģŊŊKKKŌ 5¨ŋš0ŒéÃ.Ö6T§ĒF¤†+š˜Ãž’—ąžžĶĶĶqéŌĨ”ÚÄ4îõTZUNĖQN"‡‡nŧ–-äŧĪĪĪĮ•+WĸŲlÆK/Ŋ”–čō7b?–––rs"ÍøøxÚΙÄy6Ą×ëeF­R´ŋŋ?ũį˙1×ôcģŨŽ~ŋ+++qttŊ^/å#Z€™s"_‚- gßÚÚĘ5ŦŧC¨ČëØĩˆHšĘŋ3"Æ1ēyķfFķ8dœh’0ō$€_RąųĒÜĨ9ŖøŽ9 ä‹åá{UZ:771P‰§ÖÖg[EĖDŊŦƒšŧ~Ũ×9˜ŋĮŽĘ&FœÕÔ­l׿æfęMĢūŽ&ÆõûũĖØˆLzbhĒ[r)ĖŪŪ^\ŋ~=Ųá›7oæ3čI‡ŸY“wŧs5Î.'ÖĢYX&W5î"õŪ~  ¯kkeØkĩŦ’ûŅYJsr:jø“4ĐōŗaŨlŨĐŊĐĖĒļëûá„ßĒ̝úīúûˆŗ˛—€d“Āx­{¯üž6ų\ ‘c l1đŠR’÷°Ų U{¤öz_}"bÄąĒpƉP­I’_—œ7cqV|ss3ËhĪĶ7ęSũ䈔I.¯}Ŧ=Ā,Jon“0ÕÃĖäĒXŗæ2i§ŽŽ5ö”œ‹3ÉŽ›Ķ€žžˆˆtąØõæ‡]_Í5ˇĨ:õĘNLL$##Đ_Æ_Έ˙ŗE֕¤xsđĒkÃs܇“ė;5_æâŋ Í|ˆĖ@6õäĨ<\ IDATG?GGGyšđĮžxâuķåÉĮĐÆĪaûQ˙_đ0NüÂAĒ`o8*Š<áÔ {‡C‰°‰Tį˛ÕjEĢÕŠÛˇoŋNeŒ}ŋ“Í)öNȖšā:œā)1›cS/ãdLĒ=ccH¯ĖuDĩj>ÔÜûˇšä{gÕX;sœŒéjÃë/ėéö=’?ãYŸĪ¯ģ÷:ķ÷ĀU™lRė–˜Ažxņb† ‡Ëؑ¨TļŠĘ!hžI]jr$CV+¯ŧđ †ĢĀšßīĮüü|IFKÅŠMPōÄ8 7jqVš‡fŽÉV¤3ØŸQĮī…IŨģ&yEĉˆXe<}üpųËFŖ‘@ļÖwP0ؘdėuˇÛ͒Œ,ų.Đđ `øB{Ŋ^†rS’…Á­š Âڀf-c‰ũ¸Ģ\ÃX{/l.öëėgØü™™™hĩZņž÷Ŋ/ŪöļˇÅO~ō“xâ‰'r“Sķģ{›čęęj‚<}aŨDœEĸvwwÜ/,, TŠuą•_5k_´,â4D bÆ+čėtūOöîũIŌôē üŠĒŦ{UÖ%Ģ̝ĶÖĖėČ # ÂH6˛d)$ā°A˛ ?alä›0ąÛX˛°,ɄŲõČØ6ėD,üģėā5°ÁZžā‘0ōiP÷¨{ē§ģnY÷ŽęĘĘÜƟ“'ScĀ&6ÖęŽ7ĸŖoYožīķœį<ßķ=ßsžv2ũž  ‹ŊŊŊ”b´Z­Ė4ÕîŪÃØFDڎڇZÍ`ą+“Aa“2`ėQËĘąąąØÜÜĖõJÎ āŌĒP1ęĨK—bcc#Yķ“““ØŲŲÉ“˂Ũ9évii)ÚíöđVø;66_úŌ—2‹Â7Čøéœ‘Ænj Ĩ˜v2 Žu%¨7G|pmM*3jüÄT ßū:˙ŋõr • ĒŨnĮÃß͈é^ÃĮÆ2PŨn7ŗ‘u.Ãē~vĸ;L•üԂßFãė€&•‘%ŠE˛Ö*!séŌĨ Fųgĩ+|üėėėĀzZYYIŋqÖ!Š=XßËËË;6ã=͟Ÿá—e°ĮĮĮSûīįØŸFęŌétō´tëÃ˙MMM høįįįsß­ė%ė¸ŨngVĖąŋŋŸžŲßßĪŦëž_ŪuæƒËÆ H‡ĘIb ¤į¤‹ŲŒĒˆņŲĘ J­s<˜ŒĪ˙æoū7ŋûķo~s˛‡RÁņ’)úá–d###1==š$@.Gī°"Ī th&ˆˆMÔF%bŪjģ9TSeE#"teæj`ąšškkk9ÎZ¸ši€BSĖš ß!e,õĖ>ƍ}aa!îŪŊÉIÃĘäļZ­hˇÛ @ąe? Ō{M ¤1ņæqtôŦ#΍7’Õō¯ę͍ŠûíííÅęęj‚3R—VĢ•3mõ… ücÃ+‹‹ÍëvĪZŲ­­­e𹸸˜’Œfŗ™‰`[:Ū%!đŧ֙1Œ’€ŅÂÂB´Z­÷!qQD¸šš™m5ą‡ĩg<ßáī‚h [×'‡ŋuģŨĀ FkÍĮxĮ‰‰ŗŪāŨn7ûĒ׎P_üâŗ7¯×‹ÍÍ͸víÚ@‡A'`žšš­V+VVVâ駟Ž^¯[[[q÷îŨâډ‰‰ôYÃōŖÚöOlŒ÷ööR~ÁW ČĢNzll,Ž\𒁀uWĪoŨ~æ=īÉ`–_Ē,<ɛ,×ĀųŋË@›ļeė<ĮÜÜ\ęĒu˛æˇļļbjj*۞ō™‚°ZŖ$wģŨØŪŪÎ{*Xf+SûBD¤4ĻÜ:ņŨ|“õXŗ´÷•(Вˇ2⯗="§""ŗ sssíAëÖÚ${ ĀÄ=ík|B "ú™>ī=99™í=7ÛAÚÔŦwĢÕJ֞]ōg {kŸúąąą”˜ž_æuæŖĢ:3ĮŌŲ*0Į^Õöb€CÕyû,P Ø 3žcd Ųl–ŠŲ†ÛŸEDüņˇŧ% 莎Žâ?üÆoDDÄ7|ũ×Į¯ūÚ¯Ĩã$¸lŪÕųFô%5 ęŨŧŋgÄŽXžŲ=mtÊTŒš´´”˙V‹j+}~Ŋ ĄĘ-ĒTĀXõü ļÜ[÷ŨT*°HjŅ´û™[ÚhĪŽy5~+++1;;›˛Zāč~‡‡‡ŲŠ0Ŧéīá4qe”ĩNŦĪ&ƒ„åûžëëëŅnˇ€€ VąˇqŦũĘąŽÆĒĘ&""YAgm™Įưb•ą­sPëC0ôÖɊgFĐäŊ}ĻnâŪ×ēf‹tūŪØŽ '"O2ĐYĨž§Ú9Ŧ(ą Į<Ÿnˇ›ä;SH8;;›A§ĶÉ֔|€ Ô;8 j||<.]ē׎]‹nˇ7nÜČS4Ēem9hĒvˆö=æÖ8T)…âŪ*Cäö÷÷sŗ9öXíŽícĨeö÷÷üŒ9ķLÆB¤jÆ5(d°šđ*/ŠAƒu[ũ™{ŸuėņŅŅŗNVZžšsķ.c1ØZ¸m˛ „Ÿ¨qAĩ#ßÉv0ōÆK€JŠ&(­„ rÁž`^Ø/Ë?j`P3ŸHc‡Ŋg_>~\ĻÆŗœœœdąķÁÁAėîîÆĘĘJÚŖz‚ˆ+ļ%ShlίG÷:ķÁEĪ 4wģŨLsŠ:•ōũÅ/HÂP7]`ƒ#ÂŽa´*(¯mܤž=›Ÿ! ¨€S7Ŧų~ËûcŅû]pãũūø[ŪŸû˙!;ļ+åģlœ¸Ŧ¤IB0ag€Išß&p||œ,iDÖ:ãXY0€q Xėėė$€&lî~ üžąą‘ĖxŨë&h˜^ =y…žČØ.’šĨĨĨ¸råJö Į”Û`Ü˗/ĮÛßūöxë[ß333 ¨~ûˇ;35Ɗ[Q˜ņūĖ Û™žžNYąŠa…ŊķÄÄDÜž};^{íĩd-mėUŖŋŋŋ;;;qíÚĩßŊŊŊ}ĩąÕŅe?ļļļ2€ņ,l…|Š Z'ūĪûÔC^‰¤fģ‚ČÃÃø~ũz÷ÅŪ2:õü€K•–]šreĀ 8*ô¯^Ŋ:đw@ŗŲĖyôˤ îƒÕ&¯ęõz9¯¯ŧōJļ‰U !xŋyķfLMMeņŋĩ˛˛’ūäøø8–——ãĩ×^‹‰‰‰ØßßO†”ŧ‡ÜJËŅ'Ÿ|2ö÷÷ãđđ0žôĨ/åĄK2•‚ĩ*+‹ˆ”ÆLNžucj6›ņôĶOĮŪŪ^lmmå¸TIĀ\qĩņ='ö˜íđQäGėĨhÖ/;8>>;üËiÚ5ë´´´”>ĄŨ?99ÉCîø[LŖŅČVŦ:ģČÖDDÚ?û`éĒdˆˆ,đĮÎÛœØĘߊ‚™ęŖ622wīŪM‰”į¨fRÃ~|)a Č_Y=‡]x‡å™ĪĘĒ  ""ÖÖÖâ… Ņh4ōp?÷•YÖ(""rŊœƒųGû:ķÁU #b€Į8s~Uģ<œ>č3Ÿ“““R˛Œ)^[Ur>X9_Đ.JWs~;;;ą°°Eēg@>ĸ¯]z&&&âmo}k|ū×=ßĩ2%Ré2 œņÄÄDļl\GeīiЍmzegoķR×Xįzw:88ˆ'žx"ĶŌX+Ščˆ~[Ä`ĄnŊWDP­ķķķ ||ī~÷ģãúõëņĪ˙ų?ĩĩĩÜ +|ôzŊģ´´”›ĸî'Z’Ņdrâĩöļ™)öķü:ļ<ËËËÉ~i5HĶ_7pfg€| }ņ‹_Ėņ=>>ŽĢW¯Ļļzz:Ž_ŋîĪũš@ĄÛíÆęęjŧéMoŠ[ˇn%ØiˇÛšņé_Îë ;đ4:˜ÁŪGPUõÍĩ¤ųc‚ ‡.՞âĀW]W˜õ‡ÆO<1Ā jWuįtÕä-ĀŠŊô…ˤcČ|‘˛ĐēÛ܁NväŗôÉUĪ­đMŗsšũģ1ē˛]Ú˛]kQ@*¸ÕK]öĄfč*sŠËų¯mHŨ×ZĸmfWGGGąēē;;; ę{Ŋ^üÆoüF[‚%šfÚį*3ÄTŲŒÚ†ĶĶĶ8<<Œvģlh•"Iԋ¨—ĐʐP!ײŲld­Ēū`> 4˙Öi­W!sͧųö}€+یˆ´įš-˜U Žvŋ֏ÂwĘÄŪŋ?NNN˛V'ĸߊŦ|5˛ēÆĖ†¯–%ÜŨŨÍl’zō?ë\ Š”V‘ä:U6IzcaCĶĶĶyîƒbxËíÛˇ“P ^}ŧ ‡í¨a@ž`čeöÔÔē$šŊŒĪ’ ́đųõč]įįû>&WÕ7V@ŅoģVSƊ„sb=kKŽãããö}.,NDäįë÷r~ūŊ2ŠNũyŒHŊ|žžßđĪÖĪųŦ?ˇēŦĩ~ģ7 ÔąĒšQ–b_?SAœ@(¨Å[ÃīTßÃ|T–ŪœÔûšĒ>Ú=eQlč:îũļmõ8{īZĮmnn.Ž_ŋĢĢĢqåʕxâ‰'âŲgŸ'Ÿ|r Ģbū&''ãŲgŸˇŧå-ņĖ3ĪÄ3Ī<Ī>ûl<õÔSqņâÅüZ]…¯SSSY´j\ØĶđWûõĩĀØRk7Šē13ĪTÛčEô5ÕõgØ PaüØ PčŪ˙ėŸũo™}Šļč™Ģ͚Ž2ˆú ÎOđoĮĮĮ)ŨĒ™ iÎĢ׹<†/-<ŊŋyŠŲ'÷g‹ŪCG‘ œŸŽ¯ˇ–ų% Ũ{Į×“Č˜įƒƒƒØÚÚJYŒ ĨõĶétX#%ĒīĒĪģĩĩ7oی—_~9߯úCįßkM×÷b_æÉUũ˙[į˛ÚC#cUģķ¸ÛáėoėZ­VžŋŸ3/Ífs@—ī^ĩ`˜˙4–ŪĶZĒã\ßģfŒÜ“[žĢŽk÷¯÷õîžĪ=üblÍc[ūŊÚhŽåŊ‡Û`úŽXŗÅēÆŨš;ßË?ņ‡õ~Ö¯šcö÷ŪίGī:gæƒ {YéA"̈čw V$ƒŠ'Ļr Ā vSŊ ƒ–zu…tõpLkũÎXaäččh2Ēž•Fxgg'[¨iíåĸ[ÖIg¸XŦ2ŪUƁ)ôÎúäÛ¨ÔTĮ-s ugD$[ŒQÁ,aą.t䨯ˆHÉÂ0 ô]ÆŗŠÔ=‚ĖË­ ´víø!Eo|ĨąŲ‡4>ŨyŨtb!‘ Æ2a;NŦ¯¯ĮÆÆFŦ­­e&ĻĘTØÄČČH´Ûíˆčúb|iģIŊ0qÆrss3FGĪ:Ũŋ?e,”u:d}ĮĮĮcee%AIm3Hæ ÅŖyÅú‘ °ÍÚYÄįąû˜KLįw~į_Ÿūé˙5~āūv&KgŊ'ģ% ŋ¨í÷ČCØiƒâėz:-y”iØp[Y|cjÍT{fä8֗q„ų?YžAæ3^Šī4ßämŖŖŖąēēš ĪA¤,d###ąēēšĪLææŪüąŸœœŒģwīF§sÖ1¤8nmm%ã=99¯ŧōJŧúęĢYëB’Ņ/؝››Kļ˜&ĶĢ`Ō=}–8ĒŽˇ‘‘‘ÔŲ'÷â°â5“×ëõb{{;c-Ä´/čįī„f \S÷s˛ļļ–ūbbb"–——ãää$S"éŲøq—CÖŧ‡lMS­&ąálX6ĪēžpáBt:”m...&Đ­6K×Î7Ö öüÚĩk122’5ü/ ßŊŧŧœįRdm‚Ŧē*õ2öNŲíŅŅŅ<ũw~~>3=¤7֍ų”‘%2¤lŠËĮĮĮãŪŊ{{Įųõh^įŗû\§­(Îf]“ˆˆVĢ•ĖHu&,éEŌŽzr=Í#ú,Kí!nãÄčĐgJ+s–Ā ŠMø‹/ŋo|æ™Ô˙*Ė}đāAŧôŲĪtŗŅ„ÔÄwWfÎF˛´´”)Nš`éŌĒé–^'3Ž´e´™WŠ FŌF[e3NũSØUû‹KĢræUdŖčcccąēēģģģŲŌŌænƒą™aĒŨįôô4ßUtlOBûûûYēŧŧ÷īߏ7nÄSO=O?ũt‚€đŪŊ{ņŲĪ~6nŨē¯žújDôw˛“"Ô}Fc ]‹ +¸ĢÚa,˜ĸēšaŌÁgsss ¨UzŨ3 Œƒ WĐë~ZĶa Iž€RļϘ¨™ŋū×ŋ+~ō'˙—øŽīúîÔēęŧĖæČ?ę™@;Ɍƒē0Ļ•fƒĩ6€l)ĸđØØX\ž|9ŽŽŽ2ˆ–Đ™#ZéŠŠŠØŪŪNǐŅÜ#ū>==Ag§ĶI‚Ąa*Čמ’ūØÕŗ:žNMŌ˛ŊŊã~||œķĨ¨Č<==́õāˇ^¯7Đ5‰üŦĶé$¸===ÅÅÅ|&EŠŠ*Íû%ãŪ­ą*Iœ™™Éy÷îŪmgg'uߞ—¤DP¸ĩĩ•AĐņņYo6Å_NNžõŸ'͚™™‰fŗ™˛ÄÆūū~ĘwwwķŪģģģqåʕĖ‘ŠRž6 :vī$+°ŊŊ€ č¨ €ÅDú ØVđŅĻ $ŒI…6ņ Žj‡“FŖ Ú°x‘ĖæC§)V\HØ4€y…á–ĸ‚šÚUÅ3]ĩuÚččhÜēu+>ķ™ĪÄ7}Ķ7%xX___ų•_‰ŊŊŊTÁZc51ËĀ´Äßgff°GœŖvģ‡úDôÛ~Ō{cû,Š—ÉY ī e Ų&Üēšwī^ög(õ´ŦŠ………ØØØČuõ?đˇã'ōĮ÷}ßßXęƌėUöæū˛*(˛#ģ쎎7pîƒ5ĮŠĘRXĮ~ž&ßXš°›ôËĀ'đŌŌRėîîæŗ((ė­ŦŦ¤˙ąĻuˆá“dbčīŨW'ĩÕ_‘zÕ5@c¸Õ*zũâÎŨŨŨĖ,ųwckŊUÍšukíÔZĘ°ûnã+ŗ.d?éûbyy9ßĨvĻ1Ī<ˆfŗ™ív;ŗÎYŊR•bČUōsŅ?`¯1ÎæOŋz÷T”j=Ģģ1ŪW\×3ĸƒorēr͌ąYXD‘wn| ØŦsūã­[ÖÔÔTÖ öĖ+0oī°î]Ŋ^/ vŊķŪŪ^\ģv-׹Œ÷¨šúFŖ‘{‘ XŖŅˆ7ŧá ąąą‹‹‹i;cccyŽ ˛AČgŊžŧöüz´ŽsÍücpUé Pƒ™Ģiu Qá6ą2ÛÚũ)ĒŠéÕĒg´áųœMmĨˆaŠ Ļƒ¯§aē""Ūū'˙düąįŸĪ˙æoÆŋ˙õ_Ī~îsņKŸųLŧí­o˙áé§s´ÔC{€›Ģ_Š„tې1°é¸fffrˇiŅ‚ Š5 ÁFŒ´Eg-Žlš` `Ŧ i||< ĮōëŠ" ŗ( “ũˆˆüwķĶhô‹&ÍĶūĪ˙9nܸģģģŅëõâË_ūrܸq#666ô,..ÆŌŌRÚÔîînJœŧļkaa!‹Ķjzzkk+ßwnn.ŗ1 )­A;cÛÕÖ""†™Í{LLL$x"!QÁpģ?ĻÚf‹U×ŪUą¸ėU§Ķ‰ŋņ7>?ķ3˙p vÃmŒ§§§“%.ÆØą­ -9ߨØČŒ’{ŗ/ãR[×Ę@ ‚ĒÍÕ,{ė[c@ôp=66‡‡‡™‘p_ļ Ä)RīvĪ:ÍÍÍ ôö.öT‰ÂpOŲ!RAœ€Ađä"Îä{ƍTˤJÖÆááa‚,bõŊ×Ŧ‡,!0lūŲY0lā_ëAn|ŌÜÜ\feübķsss9FÆKéFÕŦ+øæģdúϧ§“ ô˛1§wb;žˇú5>lqq1ŋ×ûšˇˆHbĄúîˆČĪʲzn{bŠŸŽkΞČį)ā••¨A0ÂÄ3û{ÎoÕ"^ ^†DĮû(ØUx>??Ÿršš˜œœĖņĩÔ šķëŅŊÎCĩĮāēwī^:-ė)@§{ FCk.šĻ|9$]üģKú¨ĀžUŨ7pxtt”ĖЃ}˛ČFGGŖÕjeZ?"â—åW^÷]˙ũīļ¤tU VYo›¯ ~uu5bD_tŨn7áŽōĘ˙ĩsC•z>|sssų>¯ũ €Ęæ+H°ņˇÛíl1@T†ŋ×ëÅÂÂB,--ÅÆÆFJqȘ€%°`ÚëaXGéÜZĖæŊŋ@“““ņ ŋđ ņõ_˙õqzz/ŊôRüÎīüNŽk=ą0"œžžĩŨk6›yÄ9ÖŧĘm'}ĪŲv:X]]­ėˆųŦ]‡\;;;9‡6|…gX<Ŧ{D0ĐÃ-———c~~>&&&âkŋökãΝ;122÷îŨËŽ&<ˆīúŽīŽO~ōĮ÷˙ßJÛ5Ö4°@ē`MfĢŅhÄÂÂBÖI`ą­?z\ļÚ@Åģm‘@¤Ķ:ŋTpŠ {ĒAXD?ûŗˇˇ—ÁÆĘĘJŒȎŒÕââbJ¸Ē´Äķw*ŸM’JDD%ÁPíųoÍÕuęŊdÖßȧų7ö( <ųõ3ûûû¸‘Œ°ũũũÔ{ķ ėÎŗŽ¯¯įwY7äB€ŪØØXf>Ēt(øđaę§?ĶŖonnÆÆÆFŽ'~Ö8ĘĮãããØÛۋÅÅÅOÖ{vv6ûšONNϝTÕ,N? [ŸÛÛÛąŧŧœs-¨yc¤8žŨngC×#$Áøøxv%ĢķĻķ‘@Ą2õ|ˆ÷­­­Ė\ģv- 1ûĻ}tggg<eļy‚tXZZŠÍÍ́ ^Í× ęw~įwjfėj4 „XWæđüzt¯s0˙\ķķķÉq0ĩ‡úááa:< JbŦ 6RWˆũũũdé""úÔÔTĻčúĘøEœåÚk_e‘Nŗ˛OĮĮĮņĻįž`Ëŧ‡Œpąōģ˙&eĩŠ:ëééé¸téRÜŧy3ŊƒR°MžģęÉiî!gNžÔéôO\´‰Uļ^pD{ë@ŖÛˇo'¸åøk— ã ėI­G­iũŽąąąÔŽFD2áX>€_ VAœƒ‚_æWoˇÛ;wîÄöövn†¯žújļŪ$ņ`#ĩ*4]¨L¯ÍPpytt”-’ l ĐXk0‚¤7ū4jIųđáÃlO'õMž4>>ž-^­2Es@­wU¯ĸm\ŗŲŒfŗ™k‚-|øÃߟūôĪŇ?ü=yoöõŽŌ-@Âđ6ō*ģ9==­­­=1‚ä#žėauu59 đāÁƒ<´ĢÕjågõČØ}ˇ?ŊĢ‚QĨN)UÆWe3UZ!;â[­VŒŽŽĻLO&PQhmSjNĒvyff&[ūŅCÅôüģģģxđėôāā ßAĄ'}=š EVf\Ŋ—‚mRω‰‰”l'ãë 7ÁÖũû÷Ķ^įææâkžækâkŋökãÖ­[qãÆ˜Í1Ā ĢՑ!öwŠũũrą§7ķIÆW6AŠ•îÉÉIļ,6˙ˆ ļACeŒˇÛíXYY‰K—.Åúúzę÷ũáĻ ö)ûģž+aŽøĖņņņÔŽË)PxÍ IDATtđëØvs!hĞ×úWKķOBTĪŋ¨­ŖEíl#{Ĩ.ĀŲ%ėÃڛœœĖû...ÆÍ›7ĶĮËâίGë:ŸŨĮāâ4#ĒGUWŠ ƒEÂäDôÎĀēåW•-ЉV ĨĪÔĪųˇÚŽpsßʤÖû ŋßđဠ›_Í*t:ãžũĒãV¯ęŦë8UV˙õZ֖Š. $)€g¨ßUÛü ˙Ÿw~Ö:tÔ2 ĩKöŊJJjkJŒo Žzč‰ĀŦJŽŽŽbss3;×q‚ ˆ~1`ĩEØ˙3Īčw›ãđ{Ģ1įĩĨ_7Á‚ŋ{iwīm^ü ÉODd{Kīa|ŨģĶéd7FãŦß´9âŦká{ŋ÷ûâįūįŌždHâüšž‡ŒËÖÖÖĀÔõU˙Ī­ Lĩځqč’˙37 ~ŊÛđú1O­Vk`<Čd´ō”ĒEĒÆŌ3ø3[,ÕĪšĖ“÷÷ģĩá;üûÖÖրOtVC-üŽīãį'ęzŦųZ`īĒķéĪÕoÕĩXyc^mQ&æŸÍDDŧųÍoŽ'Ÿ|2–——ŗKаoĢí }o}ŋZ[ėT˙l}TŸâkv͘ONž*gœfggŗ˜•í ’Ŋ¯ņôžHŖē'Õye‹¤‰Ã&sc °áēžØdŊ¯ųp˙ēÖį­v9ė7tbž‘-XĮužũbcõ}Ŧšú>|lũ<;ŋŨkė{ŋ÷{?vëÖ­øâOü˙ũ,į×˙G× /ŧéõZɯčKš–¤…Ŧ C—‘*ģQ Č J1*ŧŠšÛˆČ4>-`-zRáOƃ…ÔzĢĘ jęÜĪTį];S`ΰãF#5”>+- üaî"úēE‡-Eô Šk–Æ[Ķü4Ąõhƒ1Ë26ĻĒ9–IPägŒiK¯×‹ƒƒƒ<ČÆ:55•ŦVíLQ%T'''ą´´”Ŧļ÷wč†ÃZ '–‹†)ķ.ŪWfĨ˛œuŽĒŪ]q¤qÛŪŪŽŖŖŖxÃېl4^›Hš_ĮÎëēá Ĩ×ëeîpö¨ŨnÔDœ7-¨ĀxNOOįÁCƁ¤,"2HĀ$[‹îīø…øéŸūtŧím˙gÚš,&°ąÖHyČ@jŊDˇÛÍĶ•}ž<¤ÎŗlE-BļdhFGGãŌĨKÉpZī‚<ß[˙ÉÉIlooįgžŗJžĒÚ˙†´ÁØeĖųĖĖLĘYjËMc!큐Âđ[‚@ļÁfčßwvvr ™áZõ ¤)猐r(Ö===ÍląŪÚÚJ ŠĖÕūū~ʧdÚjĖččhŦ­­Åå˗ãâŋqéŌĨ¸{÷n|ųË_N L*į™ÉŨd5Õ@y nˇ›Ÿ}đāA9Ŋ^/ÖÖÖŌ>ĒtđŋpáBž@Ėwđ2ĨuŪĢ„Íŧ¤$Qϧv“iāĶųrŨ}X‹Đk]„ņ÷]ŪÁē$wŠõ$lE͙V”|›:,÷ÁČ{wŲDûĢāATÄY€æ4ķņņņøĀ>đÂį×îëĨ—^:ķÃõâ‹/æĻŠsN“ sœZM5K+Ō<øœ¨Mŋ‚6)cԊˆūa)œzekˇéĪŠŠŠxúé§ãMozSž ŦrúĩĶ&Í “˙>|˜ō}æmŌ—4üœ4Ų…Mēj9+klCŲÔ8yŦ´ÔŽįŽ8 ¤VÕšššØÛÛûŠn+ŠEąVŠ÷tHˆˆØŪŪNƆžØķWö\-‚ūķ€Š: —ķ$@  üøøxād7###ŠgFGZŪ‘yBęÆ$1nŪĩë¤!NöķĀ>æŲßI¤†ŋ^¯—ZÖá"ĪZāVÁ*Đc€W?oÜz‘Ī­“PDä&ũu_÷ċ/ūlŧãŋcMrd3¯íˆČī&•xøđa˛s šĩƒdįØqkß:ę˙ųųųh6›’L÷ĩĩĮ˙úŪ â|_eąIÁŒ/9FfZŲļÛí”rŦ˜FŖ‘€ đn&ķ§Ž@$/Ē5î`võl Ģâ]īmũŲ:"ĢQ”ŠI¯ÄFŖŅČ1á{­ēu’쇯į?˙ųX__ģwīÔAYä€|­sssYčęģųËJ`đƒØaFģŨN‰ŸËÎka=%ŅÜŨŨÍz6066–66===`ߊĘí1d7N'‹ųųû‰€ĪŌ~Ī“hɐ677sėj‡7’2AB†åËŧ@ŸTmqq1Īác#"í›?6wĩˆŸ/á#žÚīI##Î26õ¯ūÕßv8ŋž:Žs0˙˜\/ŧđBnHF#‹ü0Č-ŸĸšĘda)œUí„ĀŅTpZe++++ųķZ°ÕBĨˆž–ßŊ‹oø†oˆo˙öoÃÃÃxųå—Rį6}īUY|ƒ>ōW¯^Í ­ÛíæķŋuŖ¨,ŽĸR?kŗĀLG ™v–T ´‘Õ6€@-l’rŦŨߨÔî6-ā^ŸwŠdģHTÛĒ邁ŠnŊ&°ĸEm4Š›ÅŽÖa°V(­æB ĄK Öŋv~B€c pbøÜÚš ~ŊĀJĐnˇãęÕĢųoęĖyfXáFãŦ'žāCöĄ“V–Ņ)ĨēäGU<5uv°—Ö‚ú÷Ŋī3ņÉO~"Ūķž˙;Z6. aÖme‡Zå;€Js S›–-bcū ^ģv-ĻĻĻâŪŊ{ąžžž~HD¤ęĖŊŦW]&6Ī“““…{ûûû™åÜÍ?°W3$N'ũŽ –5Įčķ͓FĮ'“úlÔgP¤vív;[h †ōE`’Đ I€/`•mŒˆĖÖXíXÂįY5cĘ/; jddd@Æ$ķ:\íŊŲĩ㒑”õ1֞ŅÚh6›™Ģ~IąŧŧœX­+žũŊŽ/>Ģö‚G0đcķķķy6ÃččhÂ֚zr­ųĒ{™9___ĪŦŠĸút>?öe`ŠāÚCŨîŲ™'y ”›öFd”` ˜hOMMÅ?øÁ˙R8ŋžZ¯—^zé\3˙8\œ ‡wzzKKKéČë!2Uî(@ϤÛífjßæS ÷öörãēĨ$0NÉæMTøG# DŨģw/žđ…/$ ĀØÕÎũÂwb=wģŨNc-2„°­Í¯2n _ÄpŦ$KUŠ222’›ŋ÷4Öž˜Æ–Ú$ëænƒ¨­ `E¯‰íî}&Ā–=™œœ`#ú]H0_Æ\SeŠm=ŋī*€,h@ĩíc+žÃXؘ>ŽO}ę'âī˙ũŸHfĶܤ4Ɯæ_ļŖ‚P˛„ˆČn7Š6+›ČV€ļáāž˛æŸ,Fû<ÁžyĀjvŗ\%u VđgÍ`_ũŒ )á˙ø4¨Ę׉˛JXŨųųųmŗņÃ$›ŖĨĨĨ”‹˙īß1ö1 {ō tŲccgį$qsssÁøëk^Ų>{ĀđÖļÃ˛¯ä(•íįƒ€IĪ\ŲņjĶ‚%?Sk3ø+΁QĮŪ[[u V)L•Ÿ-//HßŦēg¸[“e”U"k,W،g¯ArmOj¯`ŗü¤ŸåĪĄā‚˙•ąĒ„‰Āßē5Gl×ŧōÕOÕĖĒ,‰um?ĢõAˆ‰ĶĶŗ6Ģ7;ŋÍ뜙 ޟũ؟M†9"’ÅĻi;k`D?•ĘQÚX°€‚€ŒŖˆĶOĢ\ƒW™9ēæÉÉÉØŪŪŽ^¯{{{O°GëëëqëÖ­¸yķflllä;ØŦÁAD˙Ė—Ž"@9@2 úmČĩ@Ž~Θz^ÁMÕėúūaāŠb-Œčŗ…ô™6éhŸu`ÔîînĘCFGG3h6›š)ČØđąGæņ>6\ŨVdôŽ­éŠũ33;;;ɤ[Åfd*ĀŦĪ¸DôÛåÕcØŲ¨ī­ĩ dæÛ˜GķEĪ\ĶÖ˛Q6|@pΌˇn>50*PUČ&c177Ũn77e Œ-Ȑŧī}Ÿ‰O}ę“ņÎwūbʐ<'ĀIŌ"0 "j˙j|§ĶIæRŠßIÍ![¨@Į÷ņ-ĩ¸fŦ“ŲŲؔ晗^¯[[[` 6j­ĀøøxėîîĻ,°ŦY§Ēąˆduų9c+€ÍuĢ'[Ä [@PÅ7V‚Čƌû§ ŗ}š|sîdOc-(ö ŪĨÛífį1ÁŸ]I@[ÆŒŒäxONNfĻTσ<†| HGؐ'Ö`Öxą5ëĪZQā[I‘ˆČnÉĒ›‘%ąÎKUĻéž2_|„XFF[ׅīŒč×CÉn˜7sÉŋķūm!%øVī"{===Ų*˙.ká”Z1Ä ųY=ušÖT˛Ļ>ŸuÂ76øKé/ũQÄųõ‡ų:—Ų<&×?úG˙(,'nķÃoŠŋl„UËZe œ Û=ĒD§˛YUjbķFČY8!EŸØFGGckk+œį›››ËįŠŒM¨Ūëk#áč€K›ŗ{`|ŒĄ˙}ŋû#ڐE v~Ā+ö<—{Õv›Æ‡ €IÛXąrŧZã`3Kp]7ÍĘŦ›FŖ/^ĖÂ\ķ Ŧ`_eVč˙ģŨnÚĐ||œāÃV‹ī<[ĩ+,*ÉFD ؀Ÿ­,šÍÎ HI؈f€Šr Å| #ú'˙ üĒļ|{{;7aÁŠ5¤%ĸįc˛D@0;h4ņŽwũ›øņ˙xŧ÷Ŋ˙.ŸŨaŸuĘĩÁ*ģ\ŗ#‹‹‹đŒa@„ŒI•āx'ĸ °R#"[ūŅ “˙ÔâÔÛˇogg>a~~>m‚VŲ‹8Œ›››d ĸŦ €XP†qĨīŽL. +HEÃxV ÚzˇÎ}/&ŊjÂ5¨4cfŽV53ЍW`Š,vŋfŽ:Nĩæß[\\ĖqZGGGSŪŅl6css35™Ņîîn-#*ķO&W3p•˛ˇÔ ĐÚŠėšŦq­ų0÷üËņņqö°'Ëķ]‚Đ*AÔr”ŧ¯f{€cÁbÍ*’ŅUyŸ‚}ē|{€ąDY•y÷ė˛#ljwww r­= ü÷÷÷s_`ہĄ9ôōĮßömßö@į×öëĖ?&׋/ž˜ėImëU7Q›e•YĖĖĖäÆũz560ZbN ¨’.ŽˆtöuĶĢāÛWͰU2 P Ûė}!€Ņs;ƚÃ<*Û_7#c-áđØ*Š…Š6\ĪįÄSā[• ŗ)Ûüąö‚ŠˆūV¨ā¤ę'įææ2H¨LhÄŲæ\7kßM˛#ķaŽm‚OŖŅˆÍÍ͜_Īk|Éq0a°ąáŌÕë¸"hëõzyđ`Ž|¯ą‹ˆüÜččh\šr%ÆĮĮãæÍ› ¸´7´ÉģGeí#ÎúMssssŲ1¨ļ:|ø]÷›XXXČg’Ē5õõõ āFGGS3˙Úk¯ °ŪÕv"úįB(œ~ûÛ˙Uü؏ũŊx×ģūut›{ÕRŗŨnŦSã:55•‡séæ4,g*­/¯Ē” Čá#؀ėi€ĩ)(ļæ|˛˛’é@ÄÆČĄŦ“ZLŽĩļö1’Ī{'­+Ų˛`E°UĨ3U.Tq=Vđ ;VŋĢCÁ@ ÚųH@[īp0„­Vâééiúvč,’ųĮâ֓DÍ'ŋāŊø›vģ„DõeÎrā˰ķÎhđovŇh° Ž‡ŒŽ$HÖąî5€zcÁ??\>°í÷ÕÕÕÖÕ7Ų[Hī|ßøøxž ,íuUšč9tPĸŨ—éŠčuĶÆ[lŒ/°ZĮČ26öhí™OYZʐ&įŨlÍë\3˙˜\IDŋ3DÄ`vŸÃˆŲ„m˜~ ˙\ũ?LĮ:,ÛŅ˙ Ö Ëčįõ|˙ŊžĪį‡ûĶüûŨgąÍÃīK6á9j?ņˆ~KÎÚ]ĨŽĐXī§¸ĒŽE3ĩ‡ûééi’ús}įÚ_Ū&í˙ÜŖö\¯˙ggggãâŋņÔSO ÖÖKoī4Ü3ߟāĘ0Õņ¯ãûzã=Ŧ'9ПĖÕŪڂ™*Ûđ3-EôR¨ëįjĪī:ĪæÎ3ÕįĒ=äˆŗ'WZS˜RŸe.īå{ŗƒ 4ļõ3@”ņ˙øĮ<>öąÍ1JĒ´ÅØÕųpÕ9Ž÷7ޞÕwvvō#vbíÔĀŅÚg;î199™=Ųë{–špũĶ­3ã^ei>ûzļ5lũ“2kqiĩ{ķa777s\ØģđŗÆƒlėĢMVÛđũÆŠÕjå=< ŋSįŨ/;Ēķ5<^ė¨Ę^‡m[0ášŧ›ĪVģaĶSSS<œ_æuÎĖ?×OüÄOd8Œ0ŨlD¤ŠHú[ ,m0v—cáĩ”’Äú×ôžŽ˜ĢÚ^ Q{ŒŠÎ ˛ āˆ~ą#VLŠã!å\Ooõܘ_ZōąąąleG“Iځfi€1€5|ųōåd“ŋ)QŠ]@0וe5ūŽNĮJaü°’ĶĶĶŠĢĮÖõzŊxį;ßßųß™Īļŗŗ“ Tí)í(tL“qŠúq6ŋJ`ĻĻĻâ‰'žČÂMLöččY§œĖ˜?LļÐVš =3–Žvĸ¨…ËdK˛(Ø(’,lĸąōîŠ@đĒ—’ŠŠ-áȲHĪ0–Xdl)nëʘbŲ0ø˜mßSģŨØØ‰ŋø#~đ˙Nŧī}ŋ”r%€Á÷[ËÃul+ŠŪĘĘJ2ĀlœŊ5›Íd=§ĻĻZ=š™jDäzÅâcĸ+JÂáß}'€DōĸS€Xktøļ"k§5"[Ë—/GģŨNũą9”íŌ –­ŦôÕ˛•2[æžŋét:ą´´Ī?˙|\šr%Ôņ乸HbāĢ„Lļčo|c\ž|9"";‘e˜ĩ5[ä~˛ü0Fŋfëjąk &<ˇŸ1—˛-j"ÔHYo6?^Oxvž‡ŸåģŒí˙j–Čŧņk2|ŒÚk\}C=Øē❖——3ÃRëĀėö!āš62°°,ōĸš]¨™ēZØ,Ø´ø%ËXĮēõ°[ ˙… boo/ßéCúĐ;p8ŋžjŽs™Ícrũ“ōOâøø8Ķ­õäÉĒTĖTå5m/Å 4H?Vg.P$9Zx›T~-Œč3Ëãããšš*zĒŽĩ°KaŲÇũÃk0/ēnDôÛÃҍē§4¤`Ŗj%ą/Íf3‰t>Đ~rr’žĩjʡˇˇtĻ4—‚úîįũüŲŲŲØßßĪwąņĶÁēLĪ………xöŲgãÉ'ŸŒ_ûĩ_‹{÷îÅöövø‘îĐgV@R7zō‰ųųų¸~ũz\šr%ŪöļˇĨd€ HW6 蚁(€ˆ Ų{{{ ”Č/€Āŗ‰­Ģō ˆũ*ļ[^^Î@UĘS[znkû.Xj=ģ4_N'õįj\û^ö r/ĪîŲ’ŋŽŽÆŪŪ^ŧķŋŸøÄĮ×}Ũ˙ž:yēŨtz6ũåkËԙ™™X\\L0§máęęę@ æzii)Įįøø8ŗä-ėFā:<<< fNNNĸÕjåÜōīÕNj?˙ĘdˍŒŒÄÎÎNLOOĮĨK—ō1Ú˜ZŦŦ[OD?s#€Ŧz§Ķ‰gžy&–––ââŋąģģ›kÔZĀ ĶöķUaE¯‚2{“ûĢa›5“iîžũÛŋũŋί¯Ōë\fķ˜\@gM÷Ųxą'€^aeŋ€ņĒ%õy)Ft˜Aė9sāC [C-ĀõŨU'­cĐãtbąaÚ°aXj‡[SŊ´ÆØ[›s•~(´ŖŸj]X@ž#ä"b đYĪX Ëj§6Ŋ2Ī–íčč(nŨēŸũėgãöíÛąļļ–Ũ€ØĒÉõä.5Čōī˛׎]`­1-Đlęõą[E`Ũ¨É˜™™‰•••délšŌķ~ ĀŅڝbbbb ƒš2FÕÆ¯lCjۜÕ÷Nņ‚ûûûŅnˇãôôŦgųîînlmmED¨a‹Ų‘5)" ¨Ō3°ŋ°}ėc/^xá§Rna1’ĀKDŋ˜Ũ Ŧ€vkUW…‘lWđa>Ģ´(d˙| Ęæ Ų–BQõ1@(dŠˆHû›™™IÛwY›@ŗīåī™ãÜņ_l Ûíæa[ŪŖ‚N>\ĀđÖvÃ1˛ĸ………šúĮķW‘'=×U‚ Ī`íŪģw/ɍŧ§įn4Î@4Vl›ßX+”Õ`eee@:TI¤k׎ÅķĪ?ī˙ûão|c|éK_Ę"RYLÁ’õ(=::Iō1d›—.]ЎŊímŅjĩâˇ~ëˇâΝ;™5q#I”!r"o-w¸–@WЋ¨D–Ŧ§ų;oMųh^į2›Įäzá…(ĖĪĪ'‹]%3 ęČČHj#íīīįÆģ´´>LF+a#ã´9ŊFãėÔLem˙Å Ų<€¯ŲŲŲØÚÚJŨĒĪûģĪbé ŽLw,[- äYc@Ę&Z™€ŧęâmB•ĩĩ9‘Y`āęŊ"büũĶĶĶą˛˛2 û€p€–Ŗ¯­ę¤]{Ŋ^FüÖ6›÷îŨË÷¨Œ7fßæ9::: ŠvģīācŠŒ1Y”M8­‡ŋØ,kFĮ&W$D` ›C›,{—­Šul™MÖ˙¯öO{ŽķŽMŨįą›î'@Đ6Ī‘ī˛<ú@ãZ0WSö‡‡‡9ū0˛fjÁ-›ũĻoú×ņ#?ōwãīüŋVYÃØØX\Ŋz5.^ŧ˜Ž1Â<U¤/lO]Jeu˙aķ˛)ū<11‘Ų‰ZW ×öææfj›=ƒÂL Ī:bīąˇˇ—m4#"ģϰīéé锑Y×ėC°Xkt$¤%‚Ÿc›|š¤ķØČJÔGXĩßģ56::šļåŊCՀwģŨ<5–¯ÎĻ"\&&&âōåËŅëõbgg'ģåÂ"úéYkŪīôô4ƒZ˜JÂ7??Ÿ˙„VžLĄņ&ųČ$n͙_,˙ÁÁA´Ûí$*Ē˙3ˆEÃ5Ë_tEzđāA´Ûíœ €?"2 Ë.ŽŽŽbmm-nܸ˙ņ?ūĮ|§FãŦ!ÄĘĘJÚŋh>ėl9Önˇ#"âöíÛqķæÍX__čnvzzšAŠfÍŌgĀWëgĒtS]‘{žžfā"úËų/˙÷‰ķëáuæ“ëŸūĶšŽJę•öˇj3Ĩ\ĩWŧ¤Ek$FŲīÃ˛^Õĩڜ‡ ē°°{{{ ö° 6ƒƒƒ,ÄĢ`ZaĢ@AË@‡xŗU“Ņo Ņ?z<"ŌIJĮ6a2r››ĪyĪZXŠċã IDATč ģYõũé‹>åÃņ>LāaląÄRĐ5EŦUZSŋtĩĀP<¤lūõ0)6T˛3@‚ĻĶÆWĩÖŨnw ‡¸šŠ}Ĩ—Æ€5fív; :É|dŧ#ājLšÍfö_Ž5lÁį°ôZZÖļ„‚4)ucm>m2VŨn7ÁfYpŅ/āöÎaY`Ęȏf|ˡüz|üã?ī}īŋKY„ôŋš5&Šéæؑ‰āØŠy wŲØØČĩ8VÍsek NyD-¨”qP[A^␚ÉÉÉX__ĐĨ×됤ŪFŨ)°ŧŋŋ{{{ąŧŧœ™I¤ũņ0áĀ>šÍfāN'Oƒæ?øũĶōtYvĩnˇÛäĮââbf;d–––ŌŽų+Œ,|˙ūũ<ÍHŸ™™IŠ[­W°~Z˛˛šĨˆčˇ‰­Úzë%"H–J~X/@^`„¸`ûÚj...fö€?æãjũ”l˜VąÖmmŒā]iŌ`ž›í fˇļļâΝ;ņÚk¯%Ą${æÚ}hqq13ÆĀŊ‘uW[Ez/ßE×jĩ ,k[Öáwnû§íh}ĪVĮ\våúõëņĖ3ĪÄęęjښų¨ m‹ZÛĶbÍĢÛ]]ķÆĐYĄąĒ{ąũG¯Z#v^en2Föß­.­f\øĐÄw|Įwü×āÂųõUxËl“ëüƒ0P@CŽbCŒˆÔ×T,'dŖ˙ŖôÆ3Ī<{{{ąŗŗ3ŽˆÔíŅĀōááá@g’ĒGĸ9{-ũ€šÚíQXXuī•ŲđLŌž~†|Dë.rXˇÛč|āŗÍf3VWWã;žã;âÛžíÛâšįž‹'žx"îÜš“Ũ €ŲÉÉÉL}V–Žî(¨zJiPAËââbÖš@§Í@Z(Ёšq1~U:dna:ėųųų6LĖŋ ĸā‰Mˆeã¨'ÍVŠ–qКjÁ„ųšžžÎ”š UQ3ãg=_ešk esS´¨TĻÁįČWĖŋ€Ā%™p8’ŸâiŦŸZ(FDÎ)ŲÉččhļ†Œˆ>ôėlbb"eXdŒyPD>wttæĪür|ėc?ßø˙*?Xt:l ‹a`“R° rã`ūĢ̍ ¸JöĖ™ąŦ€„m ōąûûûą¸¸˜€œ¤`¸Đ)ĄŨĻ đ1_‚ąvü¨™<ëmņaNˆ­­U&˛—VĢ•ĪLīîîØ~¯×ËĸWã ([×5HBøŧ{œÆÄX˛AK¯×‹šššxöŲgSŽf™EÅãããiüĩĩc}“@Éæ`­W߯p=ĸOEôŲūĶĶĶXZZJĀīÚϞķJöØwøDs933“ دKŲĄÚUĀj]ÖĀDc\ˇļļ’HjˇÛY°ę{&&&˛@Í~‘múõ3üąĩi?˛zĮúÎZiVéšZ&ū¸îį´øí¯ũĩßv8ŋž:Ž—^z)žō8Čķë‘ģÕEDn¤´Ŗ•5¯Ũh^ö‘‘‘¸yķflll$û[Ķ’Ā2ĮīßĮĮĪŽ5×o‹Ä‘EôOÉŖĩ‘u:,Ø]\\ŒˆH ŧt7‡mãĒú䈞Üĸ‚ąˆHĐ/3Č›>‹õh6›qõęÕdWj{˛ĒYŦŦ][ėaŨjįi[mÅ0TÆ5"Rˇ]ĩŦĀ W;ƒ(>ˆ™G:ŪÚ!§Ņh 0sĩÅ` l~•-÷,Íf39(€#Ŧ‘B-@¸ļē25(Ģ){`tkkkā„_›—yčËF*ø`čŦÃŧ+/Øĩyú˙fî677c~~~ XjžJčĒ1fËËË=ŗ×ÖÖRÂåÁÁÆÆF\šr%cdd$ĩâŖŖŖ ž´Âėõzņ‘|4>ūņOÅG?úŖšá¤ æĒÆ>wzz/^Č6Ôú Ėgħ[7žē¸ŠÍĻš˛áÆĻ÷ŅũĘÎU@!Y{‹û÷īG§Ķ‰K—.ĨüĐ­v];ĨÜ5c ĩ;ÉÂÂB<ũôĶąžžwīŪÍāĻžvzrr’mR­yˇÎ"ŪQMėĀŋķģdæ""ƒkĐ=ˇoߎÅÅÅXZZJ` ¤ĪĖĖÄÂÂB’o~ķ›ãŌĨKņ/ūÅŋČāŲŗ›?6ÖĩŖųĢõ!jˆ&''ŖŨngI•¨ RÛ@ūĀ~jl>|ĢĢĢY°,S#›į}­ųš ėõząšš™Åøæ*ĢŨ_KlA†oee% “VWW3pŦcN>IpŲSŒ˙eßŗWXĢtTĖË^ÛívŦŦŦd`‡¤3U–Š`ŧfŨΝGķ:×Ė?—Ånãåˆ*+éĒÚiNũđđ0ŲøĩĩĩL=ę–™ÆR#ú ˆsĶ#û HpnRÛN1čˆûKĶ—ÚhŊcÕ¸ē_D_šRŋŗ2¯‘}Üũ⤁žŊŊŊtēív;Ö××ķßj Ê?Ī@rX;ŋĖ•Öfū߯ xøuéŌĨԂWuîÆĮĮ“$ɉˆlĢiž‰gĒZmc4::šŒ}ũ,€a“ĨY­ļ†UU ]e@4æË]7/ŊŌ$m yIąWÉF•=ÔŪÔėŌĻoūQ×y6kĘL`÷+ČŠ€Г}`랊Ķé$HWíĩ9Į’šS Įįe(d7ÚívœœœÄ'>ņÉøąû{Ņív“Ä˜Ö@Ë8ę8Ru×Õ~+Ž=¯ö€1ö\ĩčēŪC`Ņ×NGÄWUķķķ øĖĢ Õķ ėDĩ0\īŪ‚Īa>0ŗĩ ›] đ%˛.ķ/SF:§ą€KpÉ/ ô}2…Ŋz7uMjE؄5dģ“““ØŲŲÉĀX&E6¤ŽßÆÆÆ@ŗß];ž¨9āƒ*kîį0Đ5sr||<ĀŌ FeîŦckΚa(TrğæÕžü™Æ:‘PāͰŲĒ¯õ`ÕFô˛æ—/ôÜžßIŦ˛‘ŲļPmÜ8ņĨZkڋ*Ų`ÍUÉĨī¯ūŠî'u-_öu.ŗy ŽOúĶÉtÚą#‘)ú pĢS´OƒÁŠDĀ3âĀĢ–{Tõƒ‘ēÛá6]Āéæ0H}ĮĖGœĨĨĨĖč|QĩâR™¸Ļcxûöíø­ßú­xå•Wâ—ų—ã•W^É B(Ģ,Ļ­ĘøÛS}‡ŒMÎ,ųęęjŧéMoĘö6z ‘VÕŧ-//įÜēâhgi7@Švžũ ˜Ģ< ×ëÅîîn4›Í|g`ęÁƒąģģ›Ųā†%pÁđÉDDJ °ŊĩsÅōōōĶzrr2Đ^”öēÚ?yËŌŌŌ@ĀgėąvSSƒGĻW đĀĒW¨ÁŖ`×ôŪ0×TŧīÔ`Z\\Ė÷–ņR÷Q3ôī<ˆ÷Ŋī3ņŠO}2Ū˙ū_M&˛ļm5¯¯Wû(“ y.`ĄÚ;0$(B x>ŌŸėhcIrPŗZØv€Rā$Û!Ëe|ļļļ že­h‹Ķöø?Ŗö”õįd@Līšļļ–Ā[¯ũíííôoŊ^/ŗ˜•Ũ¯rŠ:~ įææâü‘?O<ņDf2؛ą¯Ō ĪČūĸÕjåxėîîĻ÷ûØØXŦ­­ÅÚÚZŧōĘ+ Č=ŸÚ÷`ŠĩßäĪj-„5,øæeĖŋŊˇˇ—ÍÚÚZŪŗfRkĀn_pōíÜÜ\ĘId9Ö××ŗë™õ'XŗöØUÕŨ †ŲIŖŅˆĢW¯&‘ŅΐĘfÉžUfŧ‚nûĒÎ_ÃŨŌėĮ|Ōōōō@ļãøø8ƒkkĶžeŪe|ũŨŗ.øŦŖŖŖø+å¯üūĀÃųõUqkæ“ë§~ę§RŖgã Ų899‰ÅÅÅdglļn@@e—kđÅ(DDĻô1 IŅ"Gúptt”ā„CRPuxx˜ėIu–wD$đŦ j‘'†;CšYrĻdĮĮĮąžž÷īߏ;wîč7’ŅÄR%pāĒäCĢCĀÃkĒYcr ŽÛf\;øĐøÚDĨčeP°8ģģģĩĮŠúሞ\8L€x2“™™™œãe.wív;åžšvQĄë–™ÍĸFØZHL'kcĩ) "lnl `kĄ^lĄĄ›%‘ÂhGDv5qömŽdiz6×ëõb}}=ĮM‚‘‹čjW‰DíápbekĀyųōåX^^N 'ĐũÆoü…øøĮ,Ū˙ū_M ĶnˇŖŨnGĢÕJ0†‘ø ,""ÁŦ`Ú|bĢëgĐŖŖūaaoÜÅææfūlÍŧėîîfĀaj–Ŗâ +q 0ǁ‰ Y™Fe7Œō#ė™ŧF=ƒņā°ģ2TcZA Ÿąŋŋ—.]Šéééxꊧâ/ü…ŋīxĮ;âšįž‹õõõ<͔Wɏąč):¯u §§§ąŧŧ<ā/{Ŋ^´Ûí ¤ÉŽŦŦ?9Œy7ö‚lžúõȔZ dkÀņņņ˜››ËbeRKōÆÚŠiee%Ÿ“-,--å÷Į˛•d†Öŧ1ˇ°°‹ēWÍĖĖdσŸĒõCƝ Œe[Q>žž€SŋAŌčßųĢííí ōøŌaß";æŨÃl–īāŋøíķCŖÍëŧ5åcrq”ĩ…\Dŋ­ŸÖƒE…ūßUŲ7ÉpËE›Ú°\ĮĪ× ĻļAĢ˙7ĖXVyM}Ļ*vū—ÍĶōzlčđģ×öwõ;ŊËîînj.ëŗø@ĨūzŊ6…žCĒUw˜ÚŅÅUīá]ô+Ž-Éęx“ŊLNNfĒ^ĒÛ|ÍÎδ~Lę/2Ÿ¯ ~ŲUۅ¸ÉÂÖyžKũžÍŖNîU5ÉÎáˆU˛ÁëØxfãîßŲŲRÕā×öt55īĒ­%ë8¸Įp@𰰐vgžUí———¤žÅxnnn؇ÚĩĻĶ9ëiŊĩĩN'~č‡~8~č‡~0˙}yy9.^ŧ“““ųķÃķXå6jrƸŽcAoļåŨ5›Ue$N'kPęU6Ūŋŗo÷øŊÖu â<—uĀžöTíÉs ÛĢ1ä#Ė“l˜ûĒ+ŠūÁxÕ‡æ@ām.jk]A}•Á _Æŋ‚ORžaßR5ܞ¯úIcæģëÚ­‚g¯ëiX"ķāgĒ\Ōŋ՟ķLŪŗūŧ˙ŗĖU“ÚŊ'"ĸŲlÆõë×cuu5īĪĪ×lãđŊŽŽŽrô|îËnŒ‡1¯žŪø´Z­ôĄÆ|øsl¯ÚʰŨÕĪÕį5F>1č‹Ũ÷üzt¯sfū1¸^|ņÅdēĩFĞtģŨØÜÜLļ;,Í,ÕĒXPēˇŲlÆäädvžĀŽcU&L v °9`Ké];NjĄ#úĮ™cEĨÄąĪX-ˌˆd¨‡°VdČæįį“7¯ĩ`—M^ēt).^ŧ'''q˙ūũxéĨ—ōđ8kÉ ¯sssš6|įáīdōØ L wāk7­Z„éФ×â;2-? K'c<ˇ@ ûč(šļYŅĐ“æĘwJ?ņÄÉđ‘xŋÍÍÍ ōŒ;1cccŅjĩrœjú_-‚įˆˆļ˛ÔÆYĐAZ"UN˙Üét˛€MÉ( Lœ ë˙—––´ä• ˆœ‡Z{P%ëŠ ĖŧŗĀZ0ŽŒŒ$Sīy€i )"˛eę§?ũĶņũß˙Ãņs?÷ķ„x&kroo/ŋKŊ ÃēŨn´Z­ØØØ`ĶŲ„–°tķÍfs ;–5jîŲ9˙ãø `ˆŗūeļd%—€qdKŪŅzëvΊ•÷÷÷css3._žœc=>>ž>ø6Ÿkkką´´SSSŅnˇãōåËņÚk¯ °˙ŨîYĮĸzŽÄŅŅŲ •ŅLÜŧy3}Q¯×‹/|á i{֖v‘Æšŧn~~>kD°Īív;ŗ\+++iģ{{{IęLNöÛÆZ+ēĐüNí´Ōhœĩ´­`ę ´Č„Ú6ŗíD[Í""Ō&Īā›ÍfŽ Á2?ɗ“7™L˙­[ˇâ_ūË™l~eŦíQGGGą°°ËË˙y%“ėt:Y˙Tũ^õŠÍf3mzii)k&đö#ßĮˇÔ °=LCŨßdzjŌ~ÁÖŦqļ—Š/;ŋŨ뜙 Ž^x!#sÕfdaŪhNkaV• `?€.Ž6)l¸‹GķlÃÕa ĸ¯SW¨Ŗõ% ŗįs6!ŒzD¤s\XXČ÷¨]R0:+ī‡ĩ¨īČšß„` 6>Ŧ’ûØä߇1’9ĀŌdP‹=kOō ˛°AĩđĘûaúö÷÷,×î†Č,a‚€JGŗŲL×s?2'AĸBNÅŽŠ×ęf X{_ķĀļĖkˇÛÍ^ÍtĨÕææfôzŊX\\LPÆŽÆÆÆ˛c†{'ú\˝ī5æąņ4Ū€*c¸wī^˛yė˛ÖIø3ũ{ˇÛÍÂlsxrrÛÛۙņą‰ĪÍÍ%‹h °OēX …FŪg=ģī(GFFâ[ŋõsņ7˙æ÷Å>đųXXÄnˇˇoߎˆˆË—/§” oíę&„U°,+"€Đ[ãl.°“fŖŽwĒÅĮė@0^A;¯ŨĖŊ ”ĪÛßߏíí혞žÎēļd-øn>ņøø8k=ķU}Ÿ`‘?VĢ•Y@ žŽĶÆÆFŦ­­ÅŨģwķ{e6°å°ŠÚÜ܌fŗ™6Z}l=Œˆ­ =5`ˇžkP…ņUc!Û¤K’āNhu8˙S"¨]Õ ĨąˇN}Äoooį3>xđ`āĐÂ8Y÷{{{ąĩĩ5P[5;;O=õTœžžf‹Nķ&čüō—ŋ'''qá…čõÎúô“ÍØC°ėöXÁ€ėÔäädPSSSyŪ€īaĮæŌũdÜø ~†?¤ųW\īŦūV× AîšfūŅŧΙųĮč’"Žl÷hCÅV)ĘŠ:ôˆ`ķ}Fīîˆ>ŗ\ĐhEæ;+Ģ‚éÂāaˆH&8cś>qāølĀk"Í˙Gô7Œ‰ßĪam9T,xeũ6‡œ`DôīŽãhė´ķ kꞲˆTåĖĖLū_Üũ–šUú`üĢÃŗbÜęˆÛ8ë …l‡ÜBą ņŽlËx^5;$xo rbb"ƒÅÚ*Ō}Ĩ˛‡.\ȍ<ĸŸŲ!¨:_Šnöî{GGĪ翐°ŠúŦî/čąŅëSŗ4Øŧ´øŨŗU€gÎ*ë(;5??ŸÅ‰UâA˛"p’Z‡ÖõÅÎ#"ĀOũÔ ņŨßũˇâū߉ˆČl“bųÚĢßŗÖ>í‚D@ ĔÖ5/˜T ,čŽčÅoø:€ĸ°“$ŽûõāÁƒ”(†§§§Éfæģ4›Í,d㕨Á­LV=㿚lGf‹ FôĪļ°vĢ. ŦžHđ‡T0Ļ|*ی”V9—,Ļ-5C ØqÚ•ˆ[|”ŋ×ņŽļP×”ÛŠ­.*IĻŦ›`ŦŽEAuėüRĖũũũ,š•ŨõœlI€nLģ˛U_}m^PíRĨJ¸üŒ"ŲĘô׀ڜķ)ÆN°ËĖOĩ‡z)6ėĶįø cí˛ž=ͰÖūüz´Žsfū1¸^|ņňˆÔFD˛Š€HÕBIa t•*ÔbŊˆž¤ĀFY[daD´8ÎÜÃĻVsŦ`é~ū CŧŋŋŸ@UšVږÜFYõ‘XĖV–¤ÃÆ.Kßqtœ6ĶÚE`cc#ml€H Õ°^ž˛0î_ÁīõĀe}Šm€Pđ4ŽŽf˙õúsžIæ#\˛ßYģG؀<“_5đōûp?pāPˇ 6VûHHãOMMeKIĪNÎfĢŧƒ×XcKmä!F#666´ĀUÎCã-ˆSˆjÍ`}k=‰šf›ũŽ6ËËËŲáC'k˜Öãâ+[:==sŽVƒˆ?::ŠwŊëßÄūā߉?ûgu ëm: ųģ6¯Øi€ŗk-üŪÅs.,,äšĢ,={¯õ:ŪĮy|ŒÚ'jÕYA%1āã:´lãôôtļ'åŸI5;†ņ<`Ąīē­đGdäëõÎÚ1Žep!0ˆčDÆįŠUÚßߏŨŨŨ$;Ôí°{˛j—%kØ˙Õ6ŧÖ[e†ĩ˜UŦ,cKlWLeü7æ-"Ōfũl•jMNNÆîînáŗ?g˜XOlvvv6[ņFDęŲî$ôgkÄ߁cr y{{;÷ęSŅĘĘJī *oëÁfŗ‚>ĄÚŗũŦvüǚ>) `á‡Í+ŌMŖŌöövgŲ™}čC˙]XâüúÃyˇĻ|L.°6\L Ë"Ŋ(ē¯ė76cw||< ˇ­ŒZeĻIOn˛:m)VŸ͓újZļūŧTäfŗ9vÉ æææ˛0×f`Ö~䯝iöZ˜Ģû6ĘXb×ŨĢLŪĀŗapčQmX´īœŋqõnĩ/ŗ qtt4îŪŊ;8qđããã96R8-g•CU¸ĀŌÖą€P%s L° Š9Ēi})h@žM͘Ô^¯—L° VUfĨ.ĶËÎo$æÉ‰“˜1āÂüÚ8m”UZV tIwHŸ|’EDJŧ›yÖĸntt4k :ŖĩĩĩØŪŪN°å™ŽąŠÆ2 IDATŽRÃÎ>õŸÆ(Zcī~÷ŋūáŠ}莺˜Ø: wZja$yVģŨŽd!l@ƒ+jŒæjUÖ2[\YYXGŠõFA{ biČĢ™/1Žü_ ø­o6äyĒDĖzÔ]‰ŊcB­]R ã&pŦō öéß­[뚎rF ˜õŽ;;;)3Ģā$ĒfÚØŸ +Á'É$MLLÄÆÆFú@ī;77—Ų2>@ā_s#`ŪųöRũā˙đáÃ<Õ}­;vĀÜŧ˛é*ÉŦ™†íííô™:Uæ|ff&?oüų.R?vÄĻ""‹ļëiŊÆÃ=e`|VPTũ’ ŨûWÛnĀĮÛã ¤TėC#ĶūÁ~đŋί¯ēëĖ?&×į>÷šļ„ÃĒ­*Ģ; ŒęIžŧŧ+++ąģģ›:Jš„ĶĀØrT´ŅuãĀRs| ˆÁÖDDę~#"Sé˜Ul5€ÉÎ`ŖësWMž{ÆÎÎNvŠ|Ģæ˜–‘üHŠĖˇ´žĐøđáÃ>žlũƒ˛ƒį$ÉÕvwwķß*ĢŠ^ä=ŸK—.Ĩ†]€„øyE‡ĢĢĢņÄOÄŌŌRfßú­ŸīųžĮ7ķ/'ČQPČvM ^ ኊŠ<€tÉ{ņäüȊĐî7›Í|Î .Äk¯Ŋ–ä‚ãéɇtQyøđa4›ÍԊ[÷WÃL‘ÉŸüÁÆÆFÎ'PÎĻŲ+… PĖMÆwĩÛíĖ&T‹<‘UÉDmnnÆņņqÎģĀU0m~j"s¨īīīgąl͸ÔēL˛ėĒy"o‘uãeJŲ¨,Ĩā˘ÕIũ.OÆ8ĸDģ€3›ö;˙bÜ˧˙CČ&!/hābr&Ċņ#ƒdü$û ķƒČ&>_kÜ#bā A@•™ššš:†š07æž’ė†&ߨTÂfaa!×Ō… booīœ™D¯ķ>ķÉ%%Šą¨#˛ž†uŊœFMŋcgkŅžĪúå{ũLŨlôRÅ>ī—ÍžöwÕ~éØđúNū X¯÷āôfggĶĄÖįö|õ‡ĮÔŊkÚ_ ˇę2NÃ=‚ë{#Ī^ĩŗN'–——ŖÕj%8ŠũØ=Ģ #í†Į´>C=v=ĸŸÕ05sãŊëX™ŸĘrÕī0ŋžˇž;;ü\e­}ļÎŽ­­ |Į°íÖ NQĮÛupp[[[ąŗŗ“L÷7žlË=ôjßž‹ũēˆæMˇÚĐØ™oī_Į´Ęe*ÃđĘY—>_;Ąøˇ‹/柏Īōųô§:žį{>œācx<ëüT]xĩķFŖ‘í=­‘šŠŸ5ÖfWŦ÷ÚÚZÜž};ģõÔûēwĩ-Bdd ę˜ Ęü^ßuøŗÕžĒ˛ëaûc/ĩ ?TûĢ{ßĢxĢÕĘqä :Nļ2e_žßĪíīīį˜ÛÃëģf­\ÖÛcWuŪŲ[=kbø2î.žÄ;V°Ym÷õüĢįĀʛ+ö\įēŽƒŋWÉQ]WÃsyöÂÂB\Ŋz5Ī›¨÷ō.ŪŖŽå:6uĖęūč‡{ÚÛtŠŠëĄ>¯ûÕĪģįđį<“9°/_îuÎĖ?×'>ņ‰X__Og¤C€n%ŠŒÕBTĖ+†ũîŨģąŋŋ?°ųjM†Ũ²Ķė‘3prœJ§ĶIæ ¤gqDŸ‰čˇ|Œˆd6°mØp˙HškĪWuŧœ¯T1ME€´‡x¸0ŸF#VVV˛æ IajA”ŒCՈWĻk{{;Ķîív;ĩöī{ßûâŲgŸÍVu´â˜2€ēqW–‹6“e:==MéŽŪÍ25Æĩ˛ØŊaŲæ ģ˙đáÃhĩZÉ báŊ?í˛īĸŽ'Ŋ_ÕN§“ēyļDGŊŊŊėš3m¸ä냤 s[3KUgė;ąņU–``8eUüí<ŖÃ ­˛gˇÉīėė¤-ĢM`˛ģģģ1??÷îŨ8čkss3ƒ:ˇØQlŸq”AÚŲŲIôũû÷@|ã7ūĢøČG~$ūԟú ہvlļû˜+é~­#úYĒ?99I3fč&u˛.tŅŲÚÚJ)GŖŅ/FÆöÖ  ļ•em%ĢÜȸ˛YŒÖ()„ Ā#{aģž˙ččhāôUkؚŪj–Pf’íģÉ[¨ë Đ3–F#ĮP6ŠĘY|útc‹íƀ#FŦuöYk^øĩ$ƘMcĸĢüĪŧxū 8IüėAˆߍšļČūđŖ$7˜~Yˆū)ÍÎ$‘š“‘ą4÷qá…xūųįãO˙é?O=õTŧá oˆĩĩĩØÜÜĖw>::J˙ÂĮ{Ÿ1—æŸũU­ŋ`ÅĪ;ŗÂ¸`ä7ŋį×,{ÍVĢ]°ŽĖ›ŽSįŨlÍëŧ›Ícré `Cŋzõj\Ŋz5^~ųå¸qãÆW8VĀpzz:fggSö ­Eô{ļsÆUŗ¸¸˜ļnĸ.õšz›//eH‰•jÁ­´6Mv§ĶɃ6|^Īeō ß­3Š€€1ĸ¯˙TĀįP›ũũũv6-Ā#"2ā‰8cÂīŪŊ›ÅĮ˜qšo`Uņ”v˙é?ũ§6ƒÚ|Ũ&-đ9ŦS˜/¤6}}ŸŲÎōōrÖTɓaü\íøĸ`ĢqvŒņ0öėMņáņņqlmmå&č]0ē[@“ŋv1lFPˇēēš ą.-- HSlļ6܈HMĒ 3ĢķŽLXģžžŽTDÂāŪ6]ĀŽ×ë%@ūėööv˛ŋZ×qæē×ë tˇÔęמˇˇ—2ˆüŸū§˙9ž˙û˙Įø™ŸųŲԃ“ļ8IĻ˜$öFfF~øÕ‚wAPĩg’+Ÿ­{ÂÖĪĪĪGģŨö1ō333(ūŋėŨŨėëUøÕU]ũ^oŨŊģûlŸcĮ8ČNœåÆA`"@"Ą„r›(Dɘ Q0^bȎ q˜p•? 37#ĸ™d3å(\Xą,įx{ŸũŌoUŨÕī]Ũ=}>ĢV•AĸšĀ{÷OÚÚ{wWũ~ĪīyYĪw}×w­įöö6įv-īh°sė›< ķ ×ëĨ°°°˛3št÷°ĢTÁĮ’ō! \÷ÔY+ëëë™ëŨ$HJ^ˇŽ–——ccc#^ŧx‘v—ĶĮ>sZ9ė•{ąë¯Ú$ö[’ėōōōT-zŽĄų!'„3ŽT19wîÉIÁ(gßÖÜ öYô‚m7G´ŸŖŠīũ:ļoŊõV<~ü8>ųÉOÆÖÖV:%ģģģq}}v×Ūf.*Åǟ8c•@"G´ŽŲ\6h0ÄææfÎM’­ZT™R ŒĮãœŗl}ŗF5kŪĀÃõę^`ū5¸°ĩ)ÚÛۋˆ‰‘ŽėzDLąW5a“Ņ’c–""u‘›(ƒ+Ŧ]ëÔetŽ7&%bb¸ęûT'Ą&Úh́­mgä* ŖoļYEÜU ĨųŒˆ|a÷ĸŽ›LՕj;†ëæĒĀGBPōüųķŠČ}(öĮĻTYx`Ū!5“ę úSnŦŨHĒ>c$:`ãŦlđYĮĖgUĮŖŨn§ŗĀЉˆŧˇcîŊ›ūdĒAā1ŒÆĶøh[D$cGO{yyĮĮĮS˙7×mÔ"§T˙{ĮëëëÔ럚Tŧ´´ũ~JŠRËŖšįōęĄ0”šSį‡Ë¸ÔąP…e8Nå¯hCˇÛßø˙5ūÖßúÛņ™Īüb˛ŦN÷\õŸ\€pmm-ēŨnŽ ŸUUi1)¯Z“æ­s˛÷Ž”ĨŦR† JOOOŗ¤ĸŸÕŌŗũŽ|āėDduÎßÜÜWē‘Qíg_ÕkĒV•ņ{l>ÛQąž¯öŗ^œ|ķ6;6ŋ2ždՖTģY׌šĘ~GíĄŲŽNĻuÃ6q’ąņÆč§û9t€Ą÷ŨßßĪęHæaíŖZÁėîî.`Ÿ'‡ëvģŅnˇ3gLŋ---å|#'}Š’QŖŅČhû"Â}ëēį˛cÚīYėAčX÷ĒôĖĪĪįmÖ&Öa|¸^ÍëAfķ\ŸųĖgĐ͊e¸˛&9ED†ÍUOē$"’Løž˙30•eŦ’  Æ÷vww§6ĪØ{ō›Ãlƒ™ÕwúwŨĕ­ĒVße=GȟŧpVÅŖ˛ÕØV  Âŧc=ĮƌUö,I¤NŦák!lũɒ´Æ ĀUMp= ĩŅhd5…N§“ŽÉļĢÛl6§ĒȈŌčg `ss3Aí?0‰aÅú]__Įæææ”œ*"2ŠRį¤ĘBˇ xô ,‘’¤HvŲiˇÛyB°šÍÖæĮŲ“(ēŊŊ?ΰĩäR}D‚xZ'777) ĒQí1ŌXõ:Wkß7ĒüƒŅît:YĻęíõšgqÚ<‹ô@´čđâĮ~ėīÄw÷īNÍ`ƒ€%öœz˙ˆI>ÅÂÂB'đ­ķ@é͚^ÁonĻK*Z{WWWąŊŊFIK`°"Gâ”v:”FÄÔÜ&SŠōģáp˜kp<žĪmQm…ÃôœœdŸ+Kyuu0’ŋĒ“UíąąĢ@˜cŨī÷ãčč(—––ĸÛíÆÉÉI:§l*š]ŖŠdEŪģŨn' ôŊĘÄ׊OĒĢčGk–ėĘg9&Ū!"bkk+vvvĸ×ëÅÁÁABe˜?õÔ_ĀŅÂ~6LŦŽÄŠ Võŧ œ=ŲŪŪŽ}čCiģ¯ŽŽâķŸ˙|üáūaJîöööĸ×ëåžâŲl­=ĪÜR’ôúú:Īa#ęܖˇâgl‰š%J40'ĢFžÍôŋSáŠ×ëÅ_ūËų‚ ×7áõPÍæ5š>÷šĪ%XÐ6B–•­­!ĖZũ@ŀ ¤ĢNWĘVö¨‚]ÕHi$ Uö?"Ļ6Ve én1ļ¤16ĨˆHC­í˜l}Đív§ôˌq=*žFĀú kōQ=BŨ&eķ­eÕe kÜːMƒõąųTgĖæÆ1Y]]ÍÍYE ĒÃä T­ŋū€P’˛‰ ¨777§ō0ˆĩtcDL÷îî.° ¯1Ą˜9ĀOdgmm-æææâččhĒž5ÆUŊ֍ôčQļŅįj_[÷§KŌōŌĩbÆÍSĪÔĻíííŦÆŗ˛˛oŧņF|ä#É뛛›Ø5`uu5Ģ—lmmåÜą?IyæD¨\b̞žf´KäĀøbķ°›lgxģēēŠø˙?öc'žį{ūŸ”Aq’Ė­š`>Ô(N­>€9áU=}īÉIᜈŠĐ[ce>ŽŨŨŨ)I{&šQû  õŊęHՓE˛í%F#Ģ);Y%S@|­öe=˛}Ö<ųįųĄšÍĢy=hæ_Ŗ čfpmęŖˆé‚54/dŒÍˆ˜”ÁĒRŽ Ã˜ÄŨŨ]&Ī1ĸX#QpÍØU†W-å ļ…&¯ŽŽ2Ŧ_åBëōlžØãVĢÛÛÛų=īHZåC´ûûû ¨Āh1Ä3cF†Ö@  %5_ŧx‘NČááaņĒJlūŗĨ-įææōtPĖƒ_ÔAŽõ iM]5ŧ<77—c PŲ kĨ›ˇ ™ĶbŖ­É¸Æ?bRČXrÖ81÷ŦPq00°"6jNŠ9WV^=om°Ad/_žŒĶĶ͌Véŋ5ĄĮqppīisÖÚqīD˜+ƒÁ ×dŖq–@ģŨÎH<Ŧ^­`aÜIÚ8ë֒ąYYYÉųĢũ5˙e<Į¯˙ú?ŋũˇ˙~üėĪū\Ž)%(9Ž×p8ŒÃÃØŸŸtZjŲEŽ !ʃųö3mÛÚÚJ–ĩ:˜"XĮĮĮɯ¯¯įųN'ō=@ˆCŖ„_MB5wģŨn:F˜R@“ l‘0J€ŦRģęLT)ŪááaŦŽŽ&s_×"§Ķjĩܧq0Æę˛sâ?÷äsØæææ2 V sä 0X‰ ļÚŧ[XXˆõõõGŽĀââbÚ´ËËûÙoÉ̜´ƒƒƒxņâÅ×UØšŊŊMgpww7÷§ēGpÎĢņ{}%zq/ŲÛÛËčŪųųyėīīįáQ" ŖŅ(ƒAöĨ\•ęHr†Ŧ]öŦŧĨڝ ĘkÉOįU°Ķ÷9úiŅét˛]lüĘĘJ:Á÷ē{Ž"‚ęázĩ¯0˙š]Ā` FLėNv11“Rp@¯M ācLČ3""ÁŸįŖrlŒ# čV ˛{ED‚ûŲwŗi3ē>ΰUËî}°u˜v ÆÆj3ÄbŖČ7|āŦ˛mb€Ŋ‹ĪŲHĩWŋOØyØėå0.ãSŒ#ŖV@0´x˜T…ž+­ĨÖęøj?đjķöū6-ā>՟6ĘĒĩ¯ŅĖč>đ¸¸¸ˆŖŖŖx÷Ũw§tŊõ@anrƒũũũč÷ûUĐ76aĀ PäbÆãq†ŊXōLģČĖ•*ÅĒ҆šá™ĢĢĢŅī÷§Ö*Ÿr_ã]˓Ö*KÖ~•\‡ÖQMZü•_ųÕø{ī§âņ—’õm6›ąąą‘߯Ō6ķc­mÕYŽãTå`ÆŲ\ņn5qØũͅĒg>88ˆ'OžÄÍÍMN­@°Žķē=ŖPķ3nnnĻ} (ú.‡ŽęŖëWMũléW:ņÚvũPo­zŖ=5Rēžž>å8ĢĞ÷Ö^ļMčŲ‹ŸKē4WĒ|Q?ąåĒš´õčččëlšą˜ŸŸHCÍ/ŦŧyęwưžVĢ úÛ\ŗxīŋģģ›Î›¨S­ž†4Ņ'Úəá$͎šį*@ŽSÕxDːM¤3Õ~Ô{ëŸÚŸĩA-‡\ķHŽWīzķ¯Á%lĮHSTV€†y˛AØôČ jH˛ę#"ŦĘXÔg¨ü@§mū<Ķ&`CFÉÚ1Āĸ *hhƒĪxozāęHŦ­­e!F§$Q@ {ncÄ^“ĄDD2„@:#\Ēj›MUR˜öcÎUÄĀĐĢøqĪØ¸OÄôa*.loDäWúFBŦü ŋÂÆ\ęŒ‘ū­@-ŠŸ°œœA§JĘĒãæũ*8Sk‹Íĩ1Uįnuu5~đ0ÎÎÎâ÷~ī÷ØĩQB6 Œĩ’lm^GDʒ•ÅÅûSN&΍ tĘūúŦę/éŗŗŗLļÃė:ž–ß{r:///ãņãĮņįūܟ‹øÃņÅ/~1žđ…/DĤ äééé°%ņĒzôšđčy)­ļūĐįgggņ3?ķã'~âÅO˙ô§SBw~~žķggg'˙RÍ[Hŋ[ŸĄÚč•檓%Īą×ĘūŽˆdm% ×j8“ÍŒĄĮxŅ뒊Đ|X`ũää$noocgggĒs­ˆ‚ą´Šs*‹iœé=ą°U–ŧØ€ ĸˆČ°7fŽęģ9?6âáp )éF ėm‚6T]eÆé?õƒBrmđúėææ&ƒA>ã\CŨ5BacŊ¸¸H`4gĀŋ˛]ûûûņÁ~0įXĢՊŨŨŨFYGķÍé4wĖá*5kĩZÉ.DģŨÎ*BĀŌÉÉIjŌÉô wģŨŽÃÃÃdīîîō85@ĸŧɝäքu%án{{;>ō‘d4ĖI”XrIr÷õāFŧ|ų2å*$h$Xúbnn.:NœžžFŖq_dgg'į“qģŊŊ_ø…˙ā|:~é—ūiŒĮãŦöcūûåá8s˛Ø %#Í9ķØ}ä]č Ο¨’>#™bkúũ~σŽ"ŒˆRø1—ž*Írâ1ĐÎŽ‰Z’ŨŪ۟ ąŗŗ“NbdU „÷õ=lwÄ}ÉÜáp˜cÎ Áûā_íK•ü¸Čp$j7ŋæhôûũL´_[[‹áp˜d 6!‡ÃīkR+ų!ĘV‘šą;<7›÷gl ]äP°#ív;öE„ėC¤aĩÔ¯qŽÕģĖ7ë–c„ÕGė¨dmss˜#ČF/U‚Œ]îõziī+‘#7ĄæĸuģŨX^^Ž÷Ū{/ŖMĸæäææfÚĢ=Đ|­Å*jÔ­V´z¸^Ŋë!ö5¸ūÕŋúWi0•Ŗ÷–Ø ´§ÂĢX’ĒĮĤĩ-7ŖĒv%z?sĨ2ÉUŪã3•pˆ%&Öņe3Ø<ëŧFY˛|ā)ŋj6›9ŋ€)Q[_›V“ˇļļŊ^/ÃĄ6”šČq_ĮĄWŒ”P,㠔×R÷rÕĘ ūø^DLÉmløŽRu [9?īa#-ā x'}^7xŽ0MâHÖZÎ*` <ĒJ´ēē=šJRålØüĒÆ;ģ´´4ÅÜ ũˏĀj’qŒFŖ,§'ė_™zU°Kĸ+5ōööv* šöž¯ĀŠŨngšĢ§RŽSĘņņŨN§“āŲF]#NWũD fÜĒŪ쨨xcbNhǏÍë/xÄŊ$ ÃdFD2×ĸ ¤$ƒÁ ƒÁT5 Üõŋš}pp~‰ƒŪYŠUՖ8—ŪĩFé~ų—%~ę§ū§¸ŧŧL{` ĩĪũŒPiŽÔ¨vTäIŌĨ5 Ž8°n}[OŽI;âŗŪ›^+Ș×ŋ9hm°UÖ{­ND.!oC™Čē€ū‹‹‹td€\6Gĩ ‹‹ûÃáNOOĶņ5ĸ EˇjĸĢu{rr’ķéÁ^­­­MŲËĒ'gŋõe-÷Ē_õąh ™ GĘwkܑc[Ŗdl5S?r\ ėj%ĒÄŌ~QËíŠęyļĩYtÍû*#ä¤éƒYĀĪ֋ø˛wȍ*%3WŲ4˙ļV‚ĢîÚÃŪTM|r’~Ŗŧ„‡ëÕš˜ų×āúÕ_ũÕôîéũh4k-c ‚ÃØØ`i,†{Öétĸ×ëe‰ZŒî˜áō,LŋīėííĨv¸˛V@4PYŲ’š”T7|íväd§Ō‰ŌŠ×CwllĩtcՈ×܁ZeÅķÖÖÖâÍ7ߌO}ęSɰŲ<é…U$Ņ÷‘ũx¤X>īR#,Ūeee%ēŨn ‡Ã‡šFLœ ›/ļˆÄ†S'aŅûsŧĢĒœ‘~ŋŸĪßũŨߍ—/_f‹ĨĨĨdkšO oqqq*!U˙ˆZÔčGFØĀkN6›ƒEį+zQKČŲT#îeë[Ã˙•ĄåĀ@d]sņųZMhee%´]ÂX IDATˆœË6~Ō˛……ûĶ@ÕÅÅEŧ|ų2ööö’YmĩZSzj›|ŗŲLP3wC҉…5 =b"š’œwxx˜æw|Į˙?˙ķ?ßõ]ŋ“ũ@ĄĖ…ģģģŦœĸ GGG1IHÜßߏÍÍÍ\wUÚQ5ÅŖŅ(ēŨnŽkÎÜÚØ.ķŽ˛°uŨ‘ÚYžäƍøÔ§>5%g2‡DFŖQŦŽŽfŌ5@ËAÅ ‹6#Ä'¯‚Įnˇ;ņAlĩZŅëõŌŽrĻDŸØĀšđlŽp'Įâüü<ķû2Ŗ"nė[trr’sŖF|9lhŨ/ŧ' ėžÆškɜģZĻ×ĢNNNĻęæs}ÍUMĮ8pzĢėø6_Ē<čōō2 ą*=kˇÛSqí̈H‰GD4Žmä Õ \Ŋ^/Ū~ûíøøĮ?žDG‰Á6ÚĪäVhUg×Ü˙áūá˙~ ņpũ‰ŊęĖŋ&×ŋū×˙:.//“ų–Ā%ǛFĔTĐĀō’,Ô ‚Ā:Š[ĩËB­4ŗ6Œˇį`Il6S˛—*a”#"Ų4Ī%ĀČ+õf%kˆDDˈ‰>8ÁĒĐYÛø•]ÚĮ´ÛíøžīųžøŌ—žīžûn˛D•­aüm,6YbSą1ęך{@ļtuu•GL>rŋZ’¯2lú`ąņŅë3ėš6Ų,ÚívŧņÆųūž äGģŨž:úŨœŠīģšš™›Ŋōqkkk L|ĐōvHÍ˜¨Ō Y p}} ‰>ļ–sü8”U ÛhܗEMŅ/"U&Ä9Ģ0oDv*`ŌvlĢäQCũžûaë8Ī‹‹‹™\+ÁĶ7??Ÿ ¨>ŌoÚ¯/kdä;ŋķßĮ§?ũĶņ‰OüīŅjĩb0d„”Ą2—æreĸÛívtģŨ\cl”5X×9;đącĀ€HŽÁÉĐv÷„üžÕjĨÎ]'kãđđ0...buu5öööō˙4÷Íf3K„’ëx–õPeģŦuķ‘#W¯:?ŧ;g”Ũdˇĩ÷öö6Ģ^Õģ_į§\Ģ–]ÔFRąČ毯F·Y›Āá7—rc}}=UC~{{(bœ5_D Ŧ'šwķŋ’=¤AÖĻųĖ‘ĄŒˆ,õh~Jz­šR“3CĖ={\ŋß΍ĮZ¤Ã\㤙_ėˇ5g=pĘ9äōboo/{ ŧĸą5iŨ{sČĖķã‡~č‡ūøĀááúĻšĀükrũÆoüFn•MÁĪÕčŌĶøJ¨ŦÉs>[˘ÕįHc€ęÆzvv–›4pĖÚ¸g›5IB•Ö`8%UÕĢO@7f Û­ Œ P‰…ęt:SU+>úŅÆ_ü‹1AķŪŪ^öŠ ûūå/9ž={–?×ļ*7¨,uŖŅ˜’HTåÍÍ}E ĖVMÄz0´ĩ9?@•zÜÂ΁Ī —Í āvĀWM>ģŊŊõõõÔŊb¨1Ŋ"%dNæ0Ö××ŗO|ĶØnˇ˜aæ†Pzu€$žšˇä6kɃĀ!§C¨ˆŌüüüÔIÉķķķY1DâŅŖGąĩĩ•›y•:ųÍf3ĢŊpBq@Ŗ2ķÄéË^¯—9ÆÚÁi•Ũ­2íŠŅ+ ŗĩ\×fDdôčúú:û™ūøęę*ûõ“Ÿüˇņ™Īü“øŽīøwS9Îæš^ŧ–ŨŗļĮãûÄmëČŠ¨Æįúú:Ĩ6ãņ8“ŗ#"Į¨ĢŌ đdBŪŊ&Ŗ*â`:Í{6íéͧŠß¯ ­Î÷ę„ÖÆCD”ŧÍĒŌ!š Ö1ĐÎFÖRŸž]‚ĢĢĢԆë?Ž?'§æJÔ9Á>q@īO¸å˜özŊŒfÖ¨•īGLęÔ#uؕˆH‡ˇ&ŪדY1Ķ5ŸĨFŋ8‘ĸ4€ŊH‡ĘŪ@Nįžd”"U>g°‘æ ÛĖ!aw€qĖēqaw´Ķ[s ""÷MķÅZCĀp°õé{īŊ—ßE°?$P%dØŽˆŨp8ŒũŅũ˙ V<\‚ŽÍükta›""‡ģl 6˜ˆIĨlŪė÷°Øžoƒō] ļÜįlļØŸņˇ?.ĪûÉņxŠŲ¨Īō7cøãEĢ,Ë}|?bēÔĸËķĩŋž_DÄĮ?ūņÜLÜëŊ#2-w}† „“âŪūŽī>ĢãĮ2W Ą>v<é:Ļ>[ûbuu5Á_}ļČF}‡ĒS¯s)"ō–ĒåÔVU""ĮŋļÆ4??ąžžžŸ›u\H8ĩ˙ĖۈČīø™~Š:TãHŸŦ˙|G?ølũw}WĖĨw1ĮjÛô–ģęvg?73Gäå˗9ŸëØVõ=ũÎ==ˇ~4eũ~wú´F¯ÆãqüäOūņéO˙tŒĮãÔį×ŧ ë˛&I÷ļVTũiŨžžžÆÁÁAöģûÖvÖõZį”ûz_}_sQ´Á¨ä6‘åÕšRû\ÛüŦÎŊÚĻŲū­ļŊ¨ëēÚÃųųųL°6'Ų¸ãããœßhI˜öū>W5ܞéŨÍßŅOĩnŧīÔy6???žęĶzU\jĮęÁYú=â>Zë]ÜCimkŊjÖgŦ˓““Ŧ€4ûĮ˜rgßŖŽĢjĶ땯ĖĪü\ƒd]sŨü”QīkŨŸžžæ\Ŧ‘æÚGžĢ×Ģ}=0ķ¯ÁõŲĪ~6™5ĖãSƒˆ‰$ƒX[[‹Á`‘™õ_l“p$™C …c™HklŠžī{ŒX|ō LFįw"âĮ¯Žâw“ēŪĩJ õ?¸ŊO_OĮī‚Ū|ķÍdĄ<̞ŗu3ÁĻb=°/N'žō•¯Äģīž›Õu°:ŒŠīÛÔ#"Y×ZҧnĒBģúĨ&“­¯¯ĮÜÜũ‰ĢĒmԃ†HC°OĘĢ‘¤`GE/hūŠŠĮ”FLĒŪ`‚hĢGŖQ˛“֘隚š”Õ€Í*"žŽ4ŖßWYÆu{{;ēŨîTĩmÃÆÚPÉę ^ssǃ§]ĀyD¤“.÷Čŧg¯Ēôæāā ÷,Ÿ}(Mųj^2›×äbô)ú[I˜5܈ĩÔkØN¯–ÉŽ6ā’Á&ÍņLálU0_ CS˛0~6ū_^^Žŋs|œl#]ī§[­øėû„ˆČ¤!ŦĪl¸Zß0ĸô3Fąˇˇ7771ķ}´ÃÆĖājoM1Č6NũmS¤åŦ%Ôjäƒ3Åpc~Em'ÉĪ€} Č9ĐZgŋ@cրEāAVîææžD›B›ÍfnØŗ%Kk¸øōō27(ĀØü8†Ãa˛U•‘æŒčŗš[7Å âkÛ`%IúyÍM SR‚ZiG;ææær~ëgΘ$s5ŨZzYcZsEDCޝ''YZæąyëũ8ĸæJ­‚éŧēēĘJ€Đ]Ģ,'öÄ<æÜŗƒÁ ūņ?ūŸãūßĘ5,ÁX?Ōä\@U•zU)K†’'­S§úĮœ–*͊˜œŖ Œg¯Vđj6›)Ų˛>ĩ×qgĀ\ĢՊ´§J~Œ§saa!úũ~FÁDĨ–——ŖŨn§^˙‹4\/ljŠĪîšuŊFŖ$*Ėgë˜ŗjŪéV#ˆhkäcaa!qķ™aķØ+Ō÷ŗ?'sš&Í̞ļēēššÍæ}õ¤ãããėOļLĖiް5QŖ*ŗļÄz‘“uyy_2rcccĒÍÖeunúũ~ÚđįΟĮų/˙%I Ņf'y×ËēŽ˜jDŦĩäWšrl8` DLjU› ×××ÉLĒXcLęIœ5˛Ą_…ŅŦ*ãĀVŠŠÚrqq‘!ø*ũõ3§øuaēZÆnmm-ÁúĘĘJ†ëÉšô ¯&%ĢÄ€`Ųj5œŅh”L_§Ķ‰ÕÕÕt‚€hQ BJ8ÎÍÍĨÆŲg677sŊë_m5Ī9ôîg>ÔDØåååØÚÚĘ9ķėŲŗčvģņŠOũûø™Ÿųtü…ŋđLIú*`‡ą3§‡ī˜›’'ŊģĪÖ(žûoļ ›ŠōŒˆŽ9dĒ´2c0äz´>777SVÁ9ápFÜË̓AژŅh”ŋģē犭­­|/sĮúSH@˛k§ĶÉ÷׎åååŠWE.Ŧ›~ŋŸŅ¤ ĐĘáöŲËËËxã7R˙į˙üŸ^¯—‘sÕēFdDDVpáœÕD|y֛ÄgÅ8+";ĀyÛ*ĩ´Ûí”ūčDČÍÍM%d}xžy[zīR×#'‹dËždÕĐNvÍöņöö6הHŖ{ ƒØÛۋ?üÃ?Ė}g÷āčr¤ŨÃŪa<Ų.{g_´‰!ę­ŨĖüĢy=Čl^“ëW~åWŌpŸŸ'ā’df3Æ*øÂØz6˜Ę :6¤ˆIˆŠˆÜ<€Ãta ?¯r†˙:ø{ggņíwwņ ī;ƟQ¯åkâ-€]̤0ū‹‹‹™`„ ô*Ķpmnn&@ˇ!DL¤(Œn•^T´ ׯĒĩ‹Ģ|Éfmųŧõ{ÕÖdĢ(ĉ8>>Ž~ŋ?ÅørĄŽ }ûíˇãúú:O!Ä™aŗMŗ19saa!zŊ^2°+++™ā†iârll¤ûûûSīŠ%–ÕH kÕŸ‹‹‹Ŧ¨Ru´ĩ* āYKrn)€į'•7s™3Ķjĩō †ŅhÃá0% ¤€§õzxx˜ÎĩˆÃË8ÚūīėeLÍ €‘Tm8f%Į´–w%e8??nˇ›cĀqŊžžNtŗŲŒ?ûg˙ˇøå_ū_âÛŋũ˙Ėwõ,c†Ųf[8¸ėƒû̎>˛”%ãÆŠÄîrĀĢT¯V)ÁŪQURĩäÆ?õ§ūT|ôŖÍÍ͌ڈtYĮ€˙ŅŅŅ”tpnn.2‘ĒtĮüĮ™÷Â"#Kš×ÖÖōPUQŦoī]“ցÍũũũxķÍ7ãŸøD|ß÷}_:tĸi$F•YXXˆÃÃô›ī‹ęØÛ7jÔšdŨ×Zö؜ą~Úíö|{Wv‡ĶĨ:M•›igąÚmãZ+é/6æŨõäTvÎ|gĀą¨‘b‘LųĢĢĢąģģ›Ėģũ Å™"}ĒĄyWļ]´ŧŨnĮ_ų+åŋD<\ĸ¯wŪy'æ˙č=\ßėŲEDäFÃ0Ę67ĀŌĪ•ûŠˆ<ŦĮæÅ0ÛđÅĒ͌ˆŧ?;(DD†ōmÜĩŦaŨ(?ÃĀģ€ZĀd´k„ n$ĩ2CD$8°ĶGGDŒ^2bĸ9Æé?†_xÜÁâÕ›†‹įPL“CļôĄīÔŖÖ̌ s ,h×××ņčŅŖŒJ\\\$C^“95ä,€†Í5"8ŪŪŪ&€!;âHšoœ.ķö¸&‰Viˆ—úÉŗųĒĪ Œë͈HD‘ŖP?žb¨m„ņÁ~0ƒAlll$ãfN‘mnnFD¤ūųņãĮq{{SĀ_sļ–ŲĶVœ÷;??ÍÍÍ|¯ŨŨŨtđc ´ŖšPSė´žŪÜ܌ËËËxųōe2ŧœ|kŧ2ķús4ĨŦ `Ãū؏ũŨˆ¸?ˇÂŧąv€híŅF÷7—Z­VėīīOE„ĒŒÁ㜎Į㊜ļŪh4RĮ."$ŲP[ØKš8oŊõVüĨŋô—ύûũß˙ũ\ŗ ÷g1hSŗŲĖ}鎃Aæ TéÛœÕ͜?sØÜõo_ÍŠ°fD’ØíŗŗŗLhÖ˙×××1 âéĶ§ąˇˇOŸ>Íųā3.ũ#ÂSí į…mė÷ûŠ÷wō,IŲhbÄ$aט{Žwib‡Økvõää$z™}öœZŽŌúĒ9Hōwœ˜jNWũûמöĩØŲŲIGĮ^xzzšûĒųWĪđy{+Cŋj?ģ´ąą‘c?ķ (ũ]}íĨl[%oĒ_!‹‡ëÕŧ4ķ¯Á¸°úûƌ`ļę†áĸ2j(`ÆDÔęĪ}¯˛§ĩÔßėįĢ6âüŨ““øįũ~üęęjüôû˛ŒZLDÂ÷jšˇŲûÎŪģ~ĪĪj”ēĢZņĘëãYƉŽuö™$CÕ8—Ųq­l–ŋ::u gķ f™>?sŋ÷\÷­‘ lŦßë Ŧ$ÎMí'ÛĮãûäɍ uv“ŅŦl8ŸŒÅÆI‡O“mÅĀ KĒ̞–Ę”`ä67734^AVēķŋ~ŋĐhDķ}Mü/ļZņggņKīUĄōĒũŽ -iаŗ¤§ņxœ¤DLĀ1ų&Pß-//ĮÉÉIDLØjRėąvŸœœ$[lņĖãããdŅč#Ʌä!ôûũLb‹ˆØÜÜL‰Žīc˜Ÿ:ļsssŅī÷3$\…¯¯¯ãđđ0ēŨîTųŌëëëčt:S Y$!•:>>NGŅ×Wāív;y昜I8€5’377—9 ôåĀ%‡Īsž?žã´¸¸˜‰¤ÖÚp8ŒápOŸ>Í>TQƞa=Yŋ˜ķ“““Ŧč$ō„iļŽØ%ķd~~>ž={?ÎŧÎģšBNˆáˇ)Ũ‰ÅˇžHŋŒeM f[e`Ė_Ņ‘X9"ToŊõVlooĮh4Š‹‹‹”ˆ˛oWWWyPâééi–‹ą2_ĢtOÄU%3ûc%ÕôĄš%ŋËįZ­VlnnæúŪŨŨM;<[Yëázu¯0˙\4Ė߈Å\ZZŠŅh”€Œb¸…)1P‘ŧĘ&čėãY@´vxÆŦDÅÆ:ķ^$56ĩĒī˙‰ëëøĩn7Zđ7øĖü|üäÕUüŌûėöąøĐ‡>˙æßü›dČõCŖŅČd`öÜūG.¸¸¸˜Õlä%EDމÛÛÛ\Ģ5‚$É|v?°F×ÖÖâÛŋũÛcee%~˙÷?žÃYÉĸ–Æm<ôĪØ%•sĒŅûÎĪΧf ‰YŊ?FØĮlšŠĸŸä•ˆ o“:ī61mąA͂+›ļ3ėŨŦvģ&,‹Ęô@ĩ2—‘`""˛/Ú$ Pk-7pĀyy9vvvĻ7Žųųų8::šÚ¤æææâččhĘ!$ũ0Æõ}8‹ÚI6åĒuŠĩ““ã„OQßãŦŦŦd„A¨{uu5=z”}?779ÔjVŗ}~~ U¯qȗÄaēhN™šî€ §¸áČú<ŋ&*ú,§]%Îx}cč-I{Ãá0#3æíŖGōš5ņĩ&Ž‡Ã´ ív;˙1Š(RËBÖĶ@­kķĶē´†îî"_õŽ~ŋŸN´Ã§ž?ģģģɘĘŅā€/š}ÉÉãņ8ķFfsŦÕZÆĄ\ÖVĩ˛ŌUĶîoE/ũjžÖ„R‘T‚ĒH$Iæ}jŲ#Ŧ#7™{ƒķZKß•ū&ŗæÉZŒÕÚÚZ|⟈?ķgūLt:xōäIžËÕÕU´ÛíhˇÛéøp¨hô%šË—`‘"혛›‹nˇ›}ÄąĢŌžÛÛÛxōäɔ”=Š{„ĩÂybīüžöwŨ85ŪĢqdAĸoöÆO~ō“ņũß˙ũņæ›oÆŗgĪâĢ_ũęTšMķmqq1ūÚ_ûk˙ Čááúfš`_“Ë„ņüĢL¤Ęüąéaˆ~†›…ÄØPmT6>,#ø"ÚäŲˇˇ“Ã`¨_h4büūĻR+‚p(ŽŽŽâ¸~? ;l`AąáF#ļļļĻJeÚČę{ų.0Gį[ķjŸkŋD)ØĪmūŪ‹‚„DĨˆš( 4)I˜đ‡2EĻ IDATÍ% *â`L++,O˙×qDd9ĘĘĖW†Ëķ8=••¯Ō.yG­ˆÔī÷ãāā ÃŨd*æÕh4ĘÍß8W`ÉĮ,KĢãgŽsęÆãq†Ģooo3„Mķēŧŧ<•{Á1Ōī ’ųšņ5á@ꋚˆČyķã„õ9ãƒõĢŌ0‘$ëĒÕj%ä9”ÕI吝Ņ~‡ÃŠDtÎĢ9:r|kŖņÅT@ØÖʐLHSeŨoooSļRˊ(q"ÉĢVWWSŽS<Ÿ­Éö“ü‰™5qRŸ×õ[mŠšÃŠ¯9lY­Ķ_sFöööâƒü`ŽĨ{°ĩŸĒŦĀ6åT{^%"UcĪnh›wäÄŗ3æĩyIn°)tčėuQí PlÎŦ¯¯ĮūūūT›>ÎĒiæÁ‹/RæãYÆÚ{š/u8??O°ī{l‹÷bĪĒüÎ8ųÛ:âĐš×ŖŅ(˛NúEûõķÃõj^Ėükp}öŗŸÍåŦ^Y}Z#‹h6›ŠßĨڴoooĶ a° “j6ĀŽá´TY₉ŪjU‘ÕÕÕčõzÉÂî ŦŲ 1"Ú[KŌED˛ãî])¸˛|sssŠYw@H­ŌBKÉ( }Kęm8Ŋ^/Ų Xp‚€J›šUūCeqb XԗØ=z|} č;ą77D°K5áŽ:ĩâLģŨNé<Øááaöw7ŽīL^‚qļųcõŒ7 –_Y?›¸P=āSŖXB˛˜ĘšV' ;¨ÍĖ96—ķ&—SĢÂÄæææ”Žß&\Á¯ų@ŪĄ_€˛FŖ‘ãož+‡hN°œ!ĶXZšÔG7>ĀfēV¨Ņ•­¯kPūŊ:G§2ėDãšwwwSIËXWĪ÷}kûŠ_D&jek€30ßW$zôčQtģŨsk}oo/e‡"õywīG ąŋÍf3^ŧx‘ōC 0"safKô;Į“eq^ÔÚ'­ÖũŲ U^ĩ´´”ŽĩšĒJõh-}Ûˇ}[&"׃øDéööö’ ˇÆguøjEkĘøŠę 4äeGÛfŗ™ÎŲÕÕUŧxņ"ž={–UĒčņ{v•ˉŅ|~í'~fūąkl‡{ÉÍŠ?W.‘¤š“vØ#ėœ‘Z!kmm-%}ĩüŽļÕ˛›‘'ßrŧŲUķôææ&^ŧxđ_øÂ˛t°yDÚuyyķoūÍ˙äđp}ŗ\uæ_“ëŸũŗ–Ŧ›0xMöte cۈ€Iĩ}#"7Jˆ,„5g 3Āč ys†Pët:ß0YÖķĢŅÄŦK­Œ6=;PO,Ė[YDlĻÍģ잞’RũĻ.5Q+ˇhŖëJōä"wX[[‹ƒƒƒLĖŖŸp˜ûb‹1fŗQŪl2¯~ēå`îĢžģžĐ P˜3øcąOĨ)=ŋŅhDŋßĪwFššK&Ŧmr~WiVÄôa/œ8%ėŒ`U#L’Ķ*pZ[[›ŌŨGDž‚I—žŋŋŸ@“Sqyy™IŋõĖĪå€ļkkkąŊŊ@ˆ­¤œåįjbļųS’m^]]/^$ˆ™ĀDę īn}Ķ^[ģÆëk _\\L%Čs fŅĀŗĶéLIĮ0Ę"Gú°>SŲONgöÔ(–uoÍs–0Úō~hĒ•Nd;äĪxouÛ9œNFĩƒsssąšš™ŽŸąm4iģ*K|vv–‰“ė‡hŽūbG9øėÃŪŪŪTŽŦ&ŦÖäz-öģjąEá”c$YŗÔLNˆõőāT‘“t:Ü_ęÚ4_UÚÉ~[õņ­Īŗŗŗ,kã˜Ö*HÚõv\O8ÍÕ}j”ƒlËūe~jc•JY‡ķķķå#Ģ#1Ē{ĘÜÜ\looĮââbŧxņ"Žs˙UjVÄË|Ž9ė¨9ĖÆŲvww“D˛%/‹îüõŋū×gáÁÃõ \īŧķÎCiĘ×Შkč3bėąˆé‡ĒIH6ō;!ÂŲėø^Ž˜h,}OzV–RC‰•Ĩ‰˜v0Ú>û\ŋĘfŸ ø`ŗe#&åÜ3‰rļÍĩoüŠáįzUöÉũ1BõšXęú;ZîúŨŲPˇßWωÆĩŽUũ×>¨Ĩ$=O:MpĒ#ĻĪjÍį>×öú3ÎUՆÖ~ķ;É}uÎÔņŦcPĨ<•-sÕĨŪU•'ĖÖū4÷ũë_K?Öryu-YG5){ʙ˛FjĸšRxĩIKõ˙úÎēöÎÆˇ–Ŧ}WŸé:==ƒƒƒŠõËVøŽžõ,ÉÃĩ"÷0žėąĒe ë<Ē—ÄgkÃå]ëúĄÁ¨å9Ũß\¯eëx---%ģékŋųŋĘ+úßÜtO‘"}¨­.}8Û¯úښ¯kauuuĒŧi-ZŸUįøŌŌRæ8ķäææ&įąīøŒ9U#ļõ3ėK•T'Š–ÂŦmšŊŦ…ŲōœŒēæ#&åDŲ?“7QŖvuīŅŽjKëįëz7WôĄgDDîõųušŨ“Ē}1VöĐņx<Õ˙žoÖŊ@˙ÕÆÁü¨ebgûæázu¯Íükpa,”ŗÂZKētâäõõũĄAüŠĨö$ä Wc–ĢfĢŗ˛˛’ė-=`Ä=‹R“aą|¤0˜ŒˆHF˛&{U`§}ǟTcė^$‘÷îõzSIQX —Ãlld˜!Œ”<ÖÔÆŨnˇķD[’˞†ÛŨƒá­ŌĄĒQŪĮ¨ AW°…uŌ {žxņ"úũ~nDäPXÄÅÅÅ,+YeUŽ0??Ÿų=š•ã\˙­Ī•¯ĢĪët: ž"&n5›Íxųōeę?7773bî‰ōĐS ĩ׈Íââb<{ö,zŊ^˛äĸ4Lŧ———yčSe™WWWã[žå[âíˇßŽķķķxņâEŧķÎ;ąĩĩ•Žv´Ũnnūöö6%?úž—Ņ^ŖÂÍÍMæˆTŸžŪŸÛī÷sn]\\dÉQ2ގŪz+טhZŖŅˆ/^d‘ ‘Ņˆûō­ š¯ŠÖÔsŧgulŽWķzķ¯ÁÅ DĔūļ†ĢąFęlGD–ĢÉO>Éų{? W­āQĩĩ‘ĨQ›ķââbęG–ĨĨĨ4VB°VŌ IĀ'msM”ŦL.-)G;UY-šÖņxûûûąŗŗ“§ĀVũ,°*kræõõõÔŠģŪÃU%'6ĸšôšŅé?:pũB°+0+Đ'Ūķââ"666„Ģãˆōš,ÖjĩϤ?ƒÁ Ū~ûí¸ģģK=éüü|ÄîînôûũX^^N`EfS“|9›Æ@[YYÉÍ›ÕÁÆŪxk4qttëëë BĶššûZûĮĮĮ9.‹‹‹Š)nĩZņėŲŗūđ‡ãã˙x\]]ÅŗgĪâŨwߍŊŊŊ¸šš‰~ŋįįįYwss3Áj͛Čl´ˇˇˇŠMæėČCQŊŖV#‘Ü(—ĸßīgūK05ÁŽūЈОˆ52ˇ°°ķZR/0}}}%>{Ŋ^ļŗVÚ°Ū¯ŽŽâčč(uÚ|LtM˜%1Så rWÎŽū•ĐIŅív§ĘžœœÄÆÆFJŅØ3˛;ëĢęö6kœlBũũņø^‹Ī†¨îU“9ëûuģŨt<ĩ“WĪÃŦŲ3’(NģkM‘ė [Zuí"äl>Fß:ŠZr6ŽĖNŋÔČ Ų ų–ļÕ¤QN"‚ˆmc'ĩQ„€¨ĨcģŨnʃØĸģģģ Š›ŸŸŋ¯fÜ*C¯ūũŗgĪ2zÆąÃp{gī`-פcŋ¯‘Θ÷G>ΤJÎCÕÃ֊æžŌ§œ5úU•\Ēô ¸4‡0õ*|`Îā ?l„ō;vßZOŠ{5˙ÖÖÖ2ņPŸūU˙knj#&Ōs¯ŽŽōŽĨĨĨŒŽ™KŊ^/×ųŨŨ]dãÖģ„`ĀĒĘ8;jčWļOt°§KĀFŖQ|⟈­­­888ˆëëëxųōe:dkkkSC•<\__gÍũÃÃÃX__OāĢJÍÂÂBôzŊ  ¤ü Lķœâ¯~õĢąŊŊ=%-‰ˆŠēíUŖL§¯ĒOĤŽyŦT&‡Ėō ˆĩĮîr–——SĘ5 âøø8í—h'‘ŖZuôÚéo`\s8Ļ}â8ā"@/_žĖ9fÔę+ôú•ŠUfŒY­4C“ŽL¯‹ōšˆ$éSŅRŌ¤BMÄϝ¯6ÛžUsjŦĨííí¸¸¸ˆ“““Ė5QŠëää$ŲzvČŠĻUķjr:û-bĩšš™‘YãUs9DÜĪûU§ÎzäŒ9CąĄ0ƒĩ33˛eŋŦq8ŋ€-@ņpŊš×˜ .ŋŏ-Ž!WĖBŗŲœ*Q‰ ' ų}5õā ā„ąĢ2“ˆ Xõ9Ÿõˇķōō2š0M@WÕ;Ē>P%îĪčÖ]FŅĪũČi"mXUĸMÕá°Á3Üڀmf¸ĩÁĪčBësm•MÁŅúĒå­¯ę‰žÕąņ^î)\‹)ĒĮôë[ vqqq*1MŌhĄÚhXēĒ5˜DlZŽĒÛ5æ6{ā—ŗT7ą Ā"&åáŒgub#&e+ãčŨëÜæ<<{ö,ĨĪž=ËĪ“ģč Cģ8¤6U›ũh4Šnˇ›ũ\;Q*õ×­ ëÄũŊk=đ͘zOs@Eō6kGßDæ¸ûp0€§Y ĒĪE_Ŧ›ę$`ĪÎÎâ7ŪČõ§ZÖŅŅQ‡ÁĮĻ3¨Œ*āĀÍX@Y˜_¨™!Åä´îXZÚqŸš 1˜1i‹Ú&¸ŧŧœŒŖīˆžÜŨŨÅ˗/sĖéÍ1Ƙ䚀Önˇ§ôŧúl?5ĩr5ūĩĩĩŒD܃c‡ŦÕ4´G™3ÁĄFæ˜ēo=ĐĮŊĢ4 pŠĨ$+(öžBŋō•¯Ä{īŊ—ā“Y7\ŦgFČ4ÅÆÆFÎ/ëQâ%š@eî"& uyy9CčÚ¸ŧŧœŒ{•_øn°čkĮÜĻũĮû­VĸՕøŠ_?ņôé͇é ĐæGL´ŧûûûi'üœLj6›Sy"{5įbii)ûŦ:õ"2ôęž/Šf^™35 ī@„ˆ#]+Wq=ÉiāÖÖV,..ÆŪŪ^VzYXXˆ|āM䐑ԞĒÎĮlÛũ8NąÁėõĸ4ŠČÛą°°Q6ۜĢUŽ8xąŊ‚“Hj%zÕjĩb}}=ɉz‚˛(Ŧ ?777ÉD‹zĘÉ0ī9=îm=ąßör1m­1k‰_Œŧ’ĸ Ņī÷sŽĐ°›īĩėæĘĘJ>Côx8æ>@ÎĨÚŲÆÆFÎqļĘģWIĻ9o_ôŧYY §ÜŗŲ`ˆuĀ™¨ļīôô4~ôGô…ŽoŽëĄ4åkr}îsŸËoĄEš¸¸H€KG,ŸœœLÕĮ­á_Úŧˆ‰„įđđ0ö÷÷´aH"&eąW´ŋ6E ĐT7øVĢ5%-át0ĸlV•J1Ŧ6hFXbæûgã¤Mf$=‡žÕ3l €–„&Ė3†ÚF/ŅÎįR:ŪĘü)īH^øatlļÚ%?AÉ3m䀰ØSBaœĢ”Ē&GVĻĐī§›§§§qvv–6 ēģģ› ŗjüIˆh>766rcˇáaŨÕ Ž’˜šššÔ#ÛøjR]uČĪ………L¸4_´šjõŨˇÕjÅķįĪķ´]N—wöČehNsĶÜVJ˛ÎeķX{VVVâŋÉĸręj™ÍˆČ6b9Éz*PP>€"&gBpŧKD¤ŗ øb5k9OIÕĄˆ¸OŦŦ'ŌJė­Õ<3įō,ō ā–2ī+x¯Ŧ¤õoXËÆ Jûúũ~Ž/å ąæEŒ*Į@Ģåa1ČlĖææf>_{’p˜˙F™@LĢūŋFŲŊš#ŖúÎē18õúŖFáîîîâųķįSåYJ„‰ņæŦׯ+CΖ°õĸC~GTŖ ÖM•Ž!bĖY?eeŲ>ũ('ÅsÍ_6ûęę*ö÷÷§"ė¯šâģÍf3ķÂ8!Ūa8fķˇ~ëˇĻƒŽ>>[֙ˇ+++)mëõz™ŗ4?ŸT÷ {ŠūĒŅO˛Î8"G’ņà °¯æõæ_“ë_ūË™›Ō므éĨ9ŧ+ķʈŌnjž*ķķķi0ëÆBī‡eąÁ2Â˜Û Š@ ¨ĒZTāÛmã¸ēēĘD9lŒj•aXi€Š÷l€–ŦÂķÔ"ōĀrV€•j¸m6Q›gÕoz_'š‡Ã|vFxÖøų[eĘØģ˙ŅŅQ,--E¯×K]pM$# i4îëÁW°ĖÕÍžæ-4ŒėÔąŠ‰€†ÃzFö…9(iĪũ‘ZņĨęŪIŊ€RcĖŲėt:Š×îõzéˆ`11ūä Ãá0Ãņ4Ûuūč+Õ+ĖI!n÷ņî5’ĨŊöŠi͑<<õŌ.L­ĪÔä.›‰Rf@vÕ­V­ĻÍŨī0‘Ėē‡|ĨļɆ\ÛZß}~~R[Ú.tŦ€$°āō Hģ~›)Ŋ6Ā/ŦonnĻĘđ‘ˆĐjĪļ Z¯‹‹‹”pŲ¨#îŲsΝzUĄ•@*›YëŖs°fkRû ĶYįOu Ē$ˆ.ܸׄlßÕFō°:ī0x@ŊHV]OÚXķAÜĮįT01fƌúŦžŦĩŖ#Ļuɞ[ûĮ˙ÍŸ1ĪkJ§Ķ‰ŲĢÖ{¯kÁ<á¸?ÕIq‹ė™wĩ?kE{éģ=ŋÎ[ŽG ¸ķûĒ÷¯W%(čŒk˙™cS•wŅ#K*%ņāhW‰Ÿ1Ķ}Bŗī0Ą* ŅĀĢŽÃŪŪ^:ĜWÉÎæė{X?ädËËËéHÔJas@`ŋÚcÕP”l­ķpŦsģ:Suú¤F|âZUČ´–8௸ęę*Ŗ¸"2UZÅ!;>>NGÆ<ÂĒ{—*īBVŽˆß›Ÿĩb”{HŽ­ļŌģŗ-~(SžSŗ´´ûØĮâņãĮy؛švvv–vŖFČÁęû¸ØJŽc—‡ëÕģF÷5¸“É ņÄbîīī§^ģ‡ųĨŋŒˆ Ē5nSb$čŪÉĒT†öQˆuļæ:c'ŒqĪbšG ã2n6.›šgq@l˛ę5ĢUė€đŖŖŖ4r6J5§4Ņ6wĪ[__ĪÚōX“ŖŖŖdÎj8xŦ†UßŅjú?G‹c1ŒˆÜ¨éžI4°6PēXIĪX2RI]ÆŠŲlNi^ÛFŖ‘úwɘŖŅ(ŋ \Ģg_û¨ŨnGĢÕJŨ+A?ŽE6HdH-ôŖūŦ°ÄœŅŪââb–5ŊŊŊ¯p´ĩĩ•c{vv‹‹‹Ymæėė,Ĩ 5ŠĩV@Gō:~ÅíímęŠ}ž>¸˛ŗææ,brĮamm-öööRãL7LžåŲr!ę:ĢU>ęa_ž§Ÿšépã" Â¨Ō ąŲlNõÆ="’eWz•†~qq1666˛LĨčÄíímæĸhŗšT™Ûēfį†Ã*ð›'+++ ~´ÍŊŊŸûē77÷ĩÍĢÎŨižwww)‹õ:==vģN'FNE`ĒÃiŧŽŽŽRÚ#ŠA/ūčŅŖėÃ^¯—'šÖjOæJbæéHĀÅÅEÖĖ7žĩ?—––ō„cßįhUdM­sĀæ°­¯¯§ÔĻBøÚמoŧņÆT­­­œûÆįęęžæģ=ÉøĢ€eßJ÷j‹ũĸîI" ÆĶøcŪōåFŖ‘'üZ?KKKąžžžöG›• e‹ėgd1ÆHŋ˛ũčGãûžīû2ųųĪ>žúÕ¯NNĩßŊIGļ:O`Žl%,ŽWīzŲŧ×oūæo憄ĨVAÛägÂ̘íĨĨĨd$_Õp!‡ŗáWvžĄe$kåŅz/Įŧcq€aFí&ļš*åxvv'''ŅétōkŌcÕÛ6›Íd#bJÛ1}ĀCîg$œ‘Ys•5Ø0~ g~`œŨƒŒ%"P+īČH÷zŊܸmf68á勋‹ü}M8Ĩ̯矟ŸįáN‹‹‹ €TLj"-€ƒĮhČÍŦl}'ã7??Ÿ9Éã*™ÁŪŅ+ŸœœÄh4ĘđuÍkĀ’ęN€HzĄ.~Mjô= Į<Ž9$¤Ā`4??ŸĩÍīîîržYdîč¤lnnfr]ÕÄWšfžæTI†’üĀüĒNōņņq:֜ėšl-rp)a[ĩēÕ^ ĖOyJō‘ŗÉ#!9cŦ36˘[§ĸ‚UÖÖjĩR"ÆŽÔH€wQu„Ķ{pp’ ķŦœäy"aīŊ÷^2ĶŗĖ. lísûũ~:„l„ŧ‹š÷rrr’ÕüÂūFŖ<ˆ¯Vbņū‘¤rĄˆmü""יÜcÛl6c0ä¨20:qīgūcˆÍ- žŧŠƒ×étRį͙![Ãô7$ƒųIRxss“†u á|4Åh4J›(ˆŖ$ōYmQD¤Dįėė,öööŌŽcéŊƒĩ:77—ā›oŽ’¸Đė×qŠ˜T‡‡‡9¯"":NÎŅ/ųËņÅ/~1^ŧx‘°š÷A)šiė×ÖÖϿǃã8ȗ——ņÃ?üÃ˙Íøááú“ŊķÎ;ŅøŖ?öp}ŗ_ĩ&.F•ĢĄõˆI(•Œ˜l•™¨‰dõ° ˆ 3ƒuĮ(cÕĀšŸv2^.lŸĪUö“CRAruX$ībũũŧ‚Jīų؈éņĸMļՅ……dģkB­*4|y¯ęÔž¯ 86ĩ_ÕI~.ī` 5˙æTˆæĢ\诜×đēÍĶ,jaƒĮŠÖ9Ļ ŖŅ(ˆĢĢĢܜFŖQ ƒ”,TįŦ–#Åfšæ˜>Đh‰ˆLô•dĢ8sUĸâˆõ:Īüž:rU19hXUYĀr_āÄX`ęŨĮŊŊo}×:ÎĩÍõ*ĪŠ:} keii)̆NHļ[YYI?öÖxģŦ  œ}`Ē|Áõ{ŋļ.WmEup"&ÕI0ēÖr-Y%f¤uĖŠĒ2/sFtpVîâšúŦßÛmč IDATF‚TúY]]ĩĩĩ)i įÅüđŗ…ŧŋų `˛IœN'[Kˇšm=ÔĩnÍy˙ ÕĮķķķéØëKNLD¤Ŗ…TåNė$P5Š˜€pŒļgÎFV9LúŨœgŸĒ=3Ļĸ5P#O@ވ\MäfoŒK•DÖũĀZé÷ûéô+}Y‰)W•ØU9ečÔ=ŽĖF"Ŧq¯Qąwß}7žđ…/ÄͧOãŋųž•ɯķR^‚=Æ|Ž6Œ}¸^ŨëAfķ\•-ŋŊŊÍÍÍdjUāųWĐŌétĻ˜ÚˆÉaQŒ'æL˛PŗŲLF˛&^V$´Í ¨e!ąs6ƒ*!‡ĀNÔ͂Vr8&Ģg—đĀĶ_VŠFM¨Œ˜”ĻŧKey%ũy_IyÍĒ•XeĖīååeĘT0ĒBŦ´Tfđå˗™\ęTĐŊŊŊXZZŠ~ŋŸ'†r¤0ĄÆ @Ž˜$÷ŽJŲ‘ Џ/jÃëWĨk’/­üââbŧųæ›éTGQ›H§É"&§ÃŽĮ÷§đ’ßH $]Qí"bĸŽĖo—ä*’ +ø"‘¸tƒ™#§0rL8˜u×××sž“Č`˛qíàW'Ëú0IÜ\¤)"#œAā]dĄ2Ū‘eĩ{uu5Ž3úQO‹œ+Ķ[åAõtIīĨÁ™Y__OÉZ­b"UĩÜÖuuÖ¤ëëëØÜ܌ˆ˜Šā. ĒČÄŠŗÎëü3ŽÆâōō2NNN˛œĨhŒąāŧODÄææf&{˛“æ–õŨëõb~~>öööō+ĪT•DNųÁ1´$nŗĩāyŸudŽZŋ"Yl|ŗŲL›J‚ĮéģžžÎ5Ĩ4hod…ąc“Í‹ęŦ­›ŲN ĮŸũį,DDAā´Ø/NOOŖÛíĻ$üĖ~FkoŸpX_ÄÄŌî*ƒÔˇ5÷Dßr jdÆ&ũq*´ƒČ*ąUĨ„䔆Ÿ?žÚŲŲYŧxņbŠŧ¨k‰mõ$—#Ķ”VĪCûpŊēט . S8߯^0 0Ŗ .éĩ<āˆnŅįO›--Ŋ=C‹I¨ÆĩVÁĀhŒU#;{Ŧĩkmm-5¸îË`zÚHFS’/GŖ&§Õ:Æ>‡ũ÷ÄHŲĖ›ÍfaN,vīúúū´ËZâņøø8Fę!iMĮãûĘ J’$ũ†)bÔˇˇˇSĪYß3Yŋ'‰šöŗ~hĩZSr#  ĀSŊ؍ˆIõŗœ„ˆˆÁ`›››éT´Ûíd¯92ũ~*Ųx 9fĪ­,°ņ!ˇņ,Î!‡Ã†Œ÷, oDäÁVäKԌŗ1$šŌžˆIÄIHŗĒŗH÷+GBߚĸpc]Đf=bY~mŦŦ§MžFž8#XwĀŲ)¸+++Sk­Ž˙¯NŠĘOōH˙ēžjädaa!#6æ Ęi"ũ2>Ū_>‡wd×8úĮ鏿ŊČŖš(ɐŦ–ėd÷Ŧ€ĒæVˆ€T†ũāā VWWŗę ‰„ˆHékíZ[[›’siƒ>N———ĶžT9•ÄoķŋFœ8qö†Ų$f,4›cZĢÕyŽ!L”˜Āõšųîķ5iģ:rF#‰ ķvgggĒŌRM˜īOÚ~üøqoŌx|ŸØ|ppėžū­QNēŠ05ņ•c#ÂX#ËĸŒœ?ÅôõgoXXXˆ/}éKY5Ģ&û’+ÉŠ¸¸¸ČŠWõ\dZ•Õhg%ŽWīzĐĖŋ×į>÷šŠÄ+Āĩ GD& 1V€*­#–ē†û€kA3Zå7F#ļļļRžõb”0N4ëØšMxžŽãúú:666’ ÆÖ2dõNŸaĶ‘øFÕp*›tˆT(sį=køúú:ļļļbss3ÞåĮ°Aãņ8kŋ‹zĖj‰#"ßŊV€ąqųūT9ˆÎXû+{ĀaÚ°ō€ŽúŌėęxk÷ééiėīīGŖqŸ0f~ķæ“ °¸ĢĢĢdÁiŠÉļ$ 'rs{{¯į÷Į<­Ā„ļŠĒĐâ9“WÎg- į°-ė›ą\jÂöÆÆF:c6ds[<[uD˙ĐõKēŦ%.{Ŋ^§ û LųlÕ%s:Ė•^¯—cqⰠę^×Ē1tÅÚ-"Ōét2į˜šģģ?¨Šj¯Ģ­ž8ŠŽ'Zļ­ÖũY˜õYĮģĖvĮãŒøx÷!ĮžŖĩUĪ-ā€Š‰ūL§§§Ņëõō ?ŗÆ1ˇĩÔ,‚Ã|Ü­¯úÛÛÛt¤ĩĩ&βŪĶē  >9!ė{ˇÛÍŌÖ××́  VEY­]vÄũƒA4›ÍŦĩūít:ŠņgwI­Y$„ûTI•>>;;ËöÖ5ČP@gΊ¸Ė'''1 Ļk'¸VĀ]A6’ˆŖŌl6ŗZģe_SģŪžŦc‚ÕˇVÍĄˆ{ōI[ŲSˆž~Æ3fKzîååe%{X˙ę…1q˙ŲwÖūDøÍûTÖ¸nĐõŪĩŨõ}gßp¯›oÄ= ã`ÔûÍö¯qâŸ}o2-Ī™ũ}•!­¯¯'ëäŲ¤ õŊūkīËĢå;ë7õŊkcPeYî[åUæoŊ—{cŨ+SîOĤ …īĖŽSí‡ņxœcîģĩîk,*[íOãæví'lĢūõ˙ēÆĒŗV>ōŋĢãŠ=ëÅiŗ^ŨŗöqĶY[ ˙ŋQÖ2ˆunũ׿ŊĢ–&õžæ‡Ŋ‚vũ>[zvvn׹76ŗkŊ–UtßąĢ˙ŽļÆU×ĩûk‹ūŦå/õ-{UįĻ*.ĩüŽæĀīšsPû™ÆÜŦIå֘ÜÎ|ŋ:^æn*Ô$acU%ˆÕöÎÚÕzÕßÕĩ6û|Ÿ­s‚ƒ2k‡g#ÍúĪX×yįÆôŋļĮšƒØūzOĪ™]/Ú]Ŗŗíâ8ÔßyNīŽŲ=ūázĩއŅ}M.!ʈ‰DƒqЧŅaŨ""CãBįBΘŦo ë3ô˜ĄgŒũââbÄââ}Ų@l"CVĩâ'''Y “icŠ˜”öÂŌmW&t^Ãß*ŪĖ‚`‰^5ņLuˆ*'ĐO´‰õ”P!lĪ•”Åā Ũ c""# >ƒŨkˇÛSė#™ @"AĐIŖûûûšaXOŒ J?Ø)ē\‘’ęDxc88™×˜™ƄÆZ˜×ÆīŌ6Īŗ9“ííí%“ĢúNMn<>>Žvģ›šđsÄ$Ō ŧo“ÛØØČö]__Įöövæߚ0'Ņ’DFˆŨ8Ûh2ĘSå%6cŦ"6´&&ęķĪ…Ĩöœ~ŋŸl0zgggJ΁ĩ6‡ƒAnöžgnzy]žÖד'Or}´Z­Lás^i€įįįcww7“ô€Īę€D Ų@pŽˆxōäIĘ6šÍæTBÖh[]‹"ōf°Åķķķ)-3&Xxī# ÚÅá3‡ŧOu6WWWãđđ0mîÅÅä 0k¸¤Qg...RrĻ”l¤åīt:9ŋĒŠŌũÂĻÖSöß3܃ŒƒÜĖÚÕÕ’ĄZy%˛Úī÷“9WqĒÛífb¸ˆg-§ĘÁĮ™‹äÂŽs,ŒËíím ‡ÃWaû›ÜšZ*ļ˛÷ÖÛÔnˇŗ°‚=soްŖæŊu*2įģ$Oúķüüsssq||œJeË#"KFŠę8Ŗ€Ŋ‹˜čĶ_ŧx‘ŌRŋ^¯—‰¯HĀĐē'‰s`›3-ČĩjŠŽqō#÷Ĩ—ŧŽŧđo@ųęęžLŦ2ĩ1å,Ō{ĢÕĪ6{6 žõÔjĩRjX“¸DD>G{1 rÂ××× ļ­Šša~ą æ°ŧ ļ’ÔĢæSœœ¤#Á†ÖíÖ¨|ûM¯×K‚}ˆ)ŌŦžë@ögâ´÷zŊ|žŧûž“mÉ/ĪĪĪãėė,m™qĒ6°FĪŽW÷zķ¯ÁŒWƍÖ0"rc"ëa"uĶgômhØ`…áĨߋˆ@ē ´ęâ[ĪÈÚ–(ÁŠJ mŪqÄĒn\(ÄÎÖ4–3Y邖•Ž<"r3,"îF›(6MU•št5[Ŋh>==“““Üœ9J>ã6ušq›oedü\ŽŽō4P M”!"ĸßīg_FLLJ Û¸ļZ­ėSÎĒÕ&‰ÂÆccc#ÎÎÎRW͑ĢõŧE"j爸:Ɂj5ŪĨJRZ­Vī l˜[ ]ߊ‚HōshĖÆÆF\__gíđÛÛÛdŪ8a͍t<ĩQMmN!6[dŦ&fwģŨ888HĮĐSkÛįĖVĢ•uˇÍ‹š8,×ŖJÜ`æ¸ÜÜÜ$skŪYĢ÷āhy“Đ XøŲęęjtģŨxųōe&§vģŨd1”ĢŦb*Ģ}r@*ÃÍŲâhĶēcĢ„†cZ%Gœ ,˛(’ߏFŖt6""Ģ YsėÕÂÂBŧųæ›Eb‹TŪ Yæ‘ķƒU7O<AĀ)™ŸŸáp˜mˆ­eŅT‹ôfwkk+#&¨H–2ūo1ŪUŠãgëuoo/ŖÚ6[Á§ßī§{tt”QD Õ<ãČÐ$Ũjĩ’gÛĒũ{ųōeēU“…ũžŒŨˇæonnĸÛíĻ­ōžŨnwJrj˙ķ\ļ¤JųDŋŸ={+++Yœ€ũãØ#9‹‹÷į}´Ûíxë­ˇâ‡~č‡âË_ūrüöo˙v¤­ÕmØ)΁žĩ6ŽWķzķ¯Áôßt 1GD˛´ĀpËh7›Ídž÷ÂzL€ãÆāFÜf`Ø÷0ĘØW°d 9 ØV j@pe‰*ƒˆķ;˛īžŧŧü˙ĩwæq’VÕŨ˙UUīĶ=Ũ]ÕËĐ ÛŠq ĸ((ĸ`4ŽˆÆ|P1¨ņU1¸ÄHĸIôÕŧQqaFŅHÜH"Q#¸€ŒāœîéŊ̧§—Ēēī=ßÛ§zš™§fĻgēfÎīķáCO÷SO=Īš÷ž{–ß97UŌ\ bą[MÎßXÆĮĮË"C|Ž;d.͝Čß1HÉk`` Ŧëép‹é鹓Qmŋw2.<‘7Zhb¨ađƒÆÆFåršøŽČ C ã‡M : Ô"íļЌīĮ!"n YmäšQ5œ<ËŠĩŨJȔŨāŌÕ6˂ņÂÎ!d˜ķD&ĄUØ(:…õõõҘ'‰ÁČ|€zĀmeÃ3c4CĄČŽīŖđœ"7[ ’q~ĘÚ­BcŖĮĄGŪ¤ķš'īÉį,gÚƒ“ÖĮāå:ËAˇ4œ 枍Šåī–WŒ+)Ž zˆˆ-ˆ8DŒīäY-MĖf0îÉØ@k“L™;IeE‡Ė'ææQCCƒV¯^­\.§ĄĄ!Ũ˙ũņ=Pā ÛļēŦŪC†ÎFVN´Dˇc˜3nét:R[]Îø˛îŽ:꨸^­CĪAĮ°Fm;Ô4Œ`l օĨŨAķ)‹qŅ VčFö 2<“]ÃüŽÂQô˙ˇú™L3DžG…`÷Ĩ‘rÃ9ˇAÛúˇTšíÂc;´YųC“!ø0>>Âe˖iŊęîîŽú V›õæmozĮá īfsā3ŸųL4íF…"fC ÷<ÍÍÍŅx#ŨØØ¨žžžØŊúĶČČHäŽâ„b02ž¤’Éš@ĨYž|yųä8ū!-_ž<1–ކžAfļ+t ČL&°–––čœÁΧ.ÂŽQ¸×ļ=Ŧq°ˆXc`C×Āaĸ}$΋Ъh5H4Ų`ˆá`¨ˇļļęŦŗÎŌ駟Žbą¨uë֕Õŋ —ūūūXGBPGG‡jjjâÚÁy˛ēÛRíl: ã,Í:###Qį€Â5>>9ūgœq†Ž9æ˜-/‹ņÄg4ÍÍÍeí}™ 8&ÔĄ›q4 AĘd21hBtų͞ĀüĮéc˛q„XWŦ›ŽŽŽč4“áe=Xú4ÖŨĸØĶlÆĪŌ6éāS("ŊŠ=Ē*ēËÎqvÔQGÅūôļpDéË?99ŠGyD>úh™ƒBj&ŲMKĮI§ĶēâŠ+Z ŽjÂ}÷Ũį‘ų#P\0IábėZ ECú›b:6؉‰‰iļŅ[pc#O“““Ęfŗ1’` MĄ•XÚ¯4kÔpÄ8FŗåƒbÜōŊ¤o­Á‰aB[5Ie\HøÔPˆėĀE&pĄ1ÆØh0:ˆŒa8a02˜˜ˆrÁyæh2DĸlT”÷ƀãxsRô ęéé‰xžļh—īÁ‚ƒ ˇxpp0nĘD”ã;YŠ4iކc ˇāÆˇQEÆŽŗŗ3nŠlĘkĨRImmmjhh(ëU%…9 ĩ9.)öˇŋˇī†‘gĶęvL-?VšŖ‹1Ž–;::į7mîÍĻm#ādˆšÂųĮŗZétZ7nŒky‹ņ EĀyįųVŦXŖŅ8ŗčÆēP(¨§§':ûļHú5™ļééi­_ŋ^ƒƒƒÚ°aCY†ŽėAŠTR6›ĩ>č_žˆ:kŘ!&ûËåâœg~€ČįķeāQoC`czzZ}}}ǝ¯ë9”Édĸž¤ˇ<úˆ=ûG6›ķ``` Ę} ]R,´Å´mˆ‘ßĮXą6 …B¤ÅûZĮƒöØWЧŦ?tÎ/N×Ģļļ6ęiΞž> Šĩĩ5c0Ū­ķÄŪ@Q=: ũĪŪĖž‡,ššš´aÃmÛļM7nŒíšŅįĖgZdâÜq¨YWÎŪpcū€MmÛHį|Ų´=ÜmŠŽh÷´˙ĄØ‰øŠĀBéĪ˙ū'*Ō!e‹ĮĪ8#ÚD&čnaßYš; …gÆ C.D*‰ĻĨāũQĻ(Ѕ@„Črō‘J–˙,•ĮĘâ€á XŲŲvŽ<#Îīl˙Îŗ1^!6ˆņŒŅŲÔÔ¤M›6Išk!ʘc0Ā#Åč€ö@ZšžgĶv×@>P-ėņčy<÷|Y# (´°DŽ\ÃxØô=ķ š3Ūv>#3¨ŧ3ŋŖe†ΈL)čå}p˛ų.;xnœ"Ā# /ž‘,Å~öxŽÃ‰°2$2L†ƒ{3w0ėqm1k“ųĖØŌĮÎ?ĸ›– å *˜í&„Ãũų{ėąņ 6æĀøøxœ÷D¨‰–ķŨdeæËŪÎIôúLš;¨Ž1´÷Av“““Ú´i“ŖƒČģØ"KœA>#):Û’Ęæ2†ŧ]ĖQ[Đ+Í5AāwdįxîÁ‹Emßž]õõõ1:MD§tū3Úú$æī?==]V|˘ōoämģ‘!'æŨÔԔēēē"?9áģ™WŦct5Yĸ˙ČŨ•lƒ9 ͊ŋĄcŦÜyN~gu4:ŒųÆŋ X [hūXŖŸÚ6Ā3‘ĩd´45[¸í8<áÆü 5›2$õOԚ™´:–D˙ˆHÔÔÔhĶĻMŅØ˜˜ˆ- mAiccclSID*ĀäädŒ‰°Ú`ˆwwwGÅHÅGôqrr˛Œš‘NĪžĻJąd!Ļj‰ŧ°Áĩ´´hûöí’æN¤åûæsxĄZ GZ\{h3ļöĀæJsi0"}PšũŪˆŸWWWW\o˙8Ŋč[PE„ųÆ:'S”NĪļׄƂqEԚ¨.Æ"™ĢSN9E§vZüã íÉfqd$ÅĶX‹Åbl™KŨ ãĪsÚS;Ą`Øv—č+•…_ߨØXĻ›˜Ī8ÁĖ+œBœ<Ö,<ųŠŠŠŠļķ€lTB At돌 #j_SSŖžžž˛5LĄ-}¤Yįb`` î'č{"īčöēē:ĩˇˇĮČ2Ÿ§ K:V{{{”F.†4ô16 )ød?9ôŒ}ÂvĄû{Ÿĩ§ÍBņąĩ<|Žöˇ<įsqG'ņŊ<ŗ­1koožąm;Ræ5ßÃ~F÷æYiî°/œY{ĸ5ûŽãđ…ķGˆpaÜÂm•渆P$ÅÍ % _‘¡t:šđąŌ܁lđ˜áâō,(ZŒX~FibŒđ˜Pf,Ĩ…ČüOžˇŊŊ=F°ė{A)ĶōåËc„ÅŌKø™č ZJ`Ycˆ“TüĖĖLlßH\škī‡œIKŠ›F7FŦåTsŠËā´‡Ę*úĖ)´=߉šņī\.ŠFl0D‘é} 0686ŗÚÚZeŗŲ˛.F8<–úeģ;āā@Åaã…cËÃą%ęĘ;ķ\Ö¸d~“%ĀČą=Ę1Ä(@ļm:‰öax ŗŊž1ZpjŲŧq ™īüLä CŪfĻĻĻ´e˖¸pž™{˛8D6ÂhŖŽ---Úļm[œ{Œ)Ią&ą%ļg6Ž sĩŸËå"Ī[š5믯ÆĘNˇ, ęīīW&“Ņʕ+566įŽ˛bLOkˌŒŒ”oC'ĢĢĢĶņĮ_FįŲēuk|n"ūDĐ;::b­Îôô´ōųŧēģģ#õŠw†Ēb#ŨĸŦ čBĖÚrZZÕ ŧ+Ž7ƖĨ@!Gæ#Îŗ5žˇoß[[ZŖŽÂihZŠTJũũũ1SD ™Ú"r2 <Æë]ŠcËŊkŒcę˜ĪP¤šz tsžōãããe‘i[ßš$¨`;úØFčwô2:Áfƒ†‡‡#‹ÎddëāíīØąCƒƒƒņdiŽŪ c›9Čz#ģF+_ô@Aš\NƒƒƒeûķÆŽ ēŊŒ,,{ Í#l§/‚,Ô"X°Öm”ßqxÂG÷QxВb‘šMcė°q°‘ŲŠx ą‘‘‘Øķ#SR™Q!4?JK 8ĸO(”Q(žŠąą1ļ€#ō…Qbmĸ'l…B!VüBa‹Åx@FQeŒkŌų(QŒB:õÁƒ[#ÍE$EN/›åÃXE^ļ°Rš;ĀČFË1šé5Q/ŒhŠ ­ąÆ&NA‘o8ĻnfÆīŗtŪAšëzbŖĨ555ҰÃHĢŠŠ‰ķËét:v cÂü!D^ŗ$­Xą"~­Ų@i˙‡Œš/kNFČ*ĖĀĀ@ä=3ŸÉŦ0˙qÔpH˜Ãŧc‹#ayØĖYÖ/sĘd­0æ‰:"c˛qƒi8ãétZ+Wތëų•Q (0Ä@bž“Eŗ­`YsœčI Āo~ķÕÔÔ¨ˇˇ7fpDp^yg{PŲZc’9hhhˆ†4īΘ2wpĻwŽą†ķÔÔT\ŋDŪɖBš"“ĶÚÚuKCCƒÆÆÆĸöĪ[ģßIDAT‰ĄĖYũũũģËĐPx62@ĐϘ;¯ļCĐÄÄD™ci)2üŒ,Đ#Đyx čœŅŅŅX`MW–;wÆÖ§Ps´­­-fSČ^JЇŗņ]|íNÃģãH“ŲāŊÚÛÛc7<}č’čoPā~ļv…yI͌-4&€Ā|hjjRoooœ3ėũ3ˇ …Bėŗ/)ļžEwP7ĀūšbÅ =đĀņEtØܘ?ŧáŖ{€čģ4wĀ ÆІÂJiރ›č ´ŧ"BIįōR‘æúWu“æZŋņlܓûؖvDĩ,÷ŸŋŲÍßrŲø1`æ×ØÖ‘|Ÿ-äP+z4ÛįæûÉ*XŪ8ĪE/l`žŋP˜kG‡CvĸĻĻ&:llZ[ŧ§­mĀ ™˙n–_Í{Ō‰>,GÆļpŽ 5V1*qŦėFG€īˇYēEĐ}drr˛Ėāb˛‘eŪcŸ(‘žááaeŗŲ˛čŠĨX°éãÜņ\ŧ§›<F.ãƒŧØŦĄ 1.!„H‚2bēūāta@qá{p|YŦ)ëc\1nĐŋ0ʑ/Q<Ū‘÷…>EQĩmYiįuvÉ8ÍÆ#044‹ąÉf2ĩĩĩEž0FǤøî–ĸåˆč3s‰5GD§ĨT*Eã #œ6‡D˙į=z ÄļRíėėŒk„9ËÚ%"Ë:D–DĮ‰ŠÛā N ãÄøąÎ‰–KsŽŽ­!đ€Ch-t ëā ˛ p͇×Â8gļ# ÷á9ĨōēŒfÖzÍœ‰ŲVö%Œ}œĀų˙Ȕyl×;"Öˇ4@!cl jK‘C‡ŒkŊq="cûöJö9ôiô.{ ē5“ÉÄNZJKs‘}Ž…×oO&įīŒ56Ü}ÛÜÜŦļļļ˜ āų#îËüpžđ֔G>ûŲĪÆÔ'FˆĨEēDQŗYb\°1‘—#Ë(pÛš­Äø Miۈ ŅKį°?ʝČʏļĒąÎOŅéÄ (æNō$Z†R´Įƒã ŅņÄn.Ōī'‡wĩiyxÅlŽ}}}‘&ˇ”hÍB)s6œąEÆĐ)0áŋáĮaaƒ†ö!):7DĒq0nˆ°ą Mį9ÆZAŲl6F[ĄÎā4Bë€Úƒący¯\ŸJĨâa\ČÖÎ?č`8#tĐ<ØˇnŨĒ–––؇„īÆČ†ĒED>7­ål–ˆqÃŅÁ ã9ía=Œ%›2Ÿ‡‚`))Ė}"¤Ė xč \­ÆLbŧÃļĪM׿XCCCėj„œˆ2†´wdî566Æö‰6ƒDo퉉 årš˛nEccceœu[¨<<<Ŧ|>¯ÉÉÉø|ŒŅLæ)ēįʞaQÉÜfíÚ:œ7Æ|rrRŖŖŖQîļ›Ũ°h+ˆƒ‹.EdîxF2Š|ŽCÁ¤9#š{['AR”?īa1q˛~č K"[ŠūC~č,>ƒá‰ņ-ŠŦí)˛` K˛]]]ņßd+,G:–-gŽŖ+Ņ!<: gšœ‚ĒÃ5Œƒ vāHâĀ3Īlˇ+žŖŲFíŅÔŽ CéԄNä12bÔÔÔĖž„ÍØĸ;\ŅÁĒąąQĢV­ŌōåËc÷2IÖyd(‹zÕĢ^õƂŖjqß}÷š1$ā‹_übY/]6q”ŗ¤˛MÁL’†&ÃÆŽŅ‘OÚŪɲ™`°c0ZŸ(Eĸl˛DãĨšH†ŨTčuŒĸå;jjj411 Ō™ü›ÍÃ÷DíęęęÔÜÜ{÷Bũāz 4"6ĒĪÆ;ŋøÔō‚‰\=ūøãjllÔōåËŖ3Ä)ĄČ*žņņņØļ^.Ô6{(lų|>Ž# œp;öČRˆ1ÃF„ņ‹ž|ųōh 0†ƒƒƒqÃÄ) X ę Ņ7 Gygë đnŲlVíííŅ)ÅA™ cįƒŖ Ųā<1×p læ†ų†q’ÉdĘdFD'†Hbkkkė7m3ˆF´šH1Ņn6`ĸę8\Đ ŅAæ=s¨#uĩĩĩPKKK4”xÖúúúø|œ6ËzŠŠ™å§ãpĐVÕ‡ZŖžq$ĸm ķp ˆæãt07˜|‡¤˛î1œ#€lˆ4S°œÍfãœ$"Ëģ,[ļ,:Éų|>€Ŧ-îoŠ€555Zŗf–-[Ļáááh؈2k dž[SSSŧ7-‰ ÛĀúÁRÉ07Ņm!uuu餓NRÔÃĖô’­uHĨRņdYi֐īęęŠN´7 RÖō$˛N„ĨÕärš(SĢGš'uXĩĩĩąNbllLQ'Ha­hW]]zzztá…ęėŗĪV:Ž…§Ė8—PXĐōĖKģ/mgbü(Î' @fŠųãƒŪĩįĀq§ •ũ•Āëyā¨ķ]4 zŸÉdâ98)Č7NĮ`Åôô´úûû#?„O;fādđ¯|å+÷ńp,qÄ>ķļēßqøÁ&ÅâÜĄ8DHûąām/m”I6 xœH¤oI+m) ą ËF–FFFb*Ķé@}Á9 *Äį‰D˛qAa°ÅĀlvlš63d‹階ã400 ãŽ;ތBD/i[,Fô#ËŌ†p ‰ á8ŲĶw‹ÅbäđÂÃÅȃ†EŽÖÖÖØjŽÚcņņņØģžš“Īį•ÍfÕÔÔ¤|>Į“ĖF?‘jÆ"—ËÅZĻĻ&ĩĩĩÅØŦ1Ö6cOdœÂSøÛ~Іhš‡œp€FFFâē#JL]Æ|=…œ ÔāėqæÁää¤ēēēâÚeÍãŦņDoÉ1O Íͧ˛āč÷õõŠŗŗ3ŽG iIQX‡#ĮŪŌnpš,ĩŽˆ:ŗ\t‚-d˜_333Ęfŗ*•JÚļm[ ’€`.ŗ6 HRooo 0ŦXą"ņ< zĐfN‡††â>ƒXWW ^Æ‚Ėåŧã˜ĸ§9Ā ël>Uëų.æŠÕ‡|†6ĢĖw2eü ˆ­ bŸÉdfĪ2`^ /íģ`dåf EÞ9Nw™BĄ \.,tMãyÁ)öôŽíū-HR4úy7ô:2% dĮÂ:Y6ûė8üJĨœ3¤ƒ…BÉcŗŗm÷,P(ļĘ^RäÉÚ>ĐpZų~›ļļ˙—æ IÁc`đÁ%ĩ–ĪC ĸˇĐkøn"ͅÂ\gäĀīØŦ-§uūķc,`ÄōŊ–;‹ÂEŪõõõņĀ“Riöā#ŌáŒĘ€MCÅrÚéÚxO6sŌú ]cSÆlđöw8ntLaãâžĖ;GėxÖ×Īõ§FļvūÁÍ.•Jęč舛9ķP*?čŠī%’ĮwbȍÅž-ü˛°|XîËąącč`„q¤˛éց?‰ļ"û…¸Ē|ÆÖQ ?Œ/Ö%÷áų™ŋ’ĘŌ˙Đ?ė|áßļ_<ÆķÖRŌlTžX,ÆBCÖ7˛Ĩ×ĩít¯×Ž3Ņl;ΈĒÚg´÷ž_KA1"īĪ;0DĄ‘Ņôôthi€šmƒwÅpg,$iÛļme5:–bc×ŋgŽđ<3íwízE.ķį#ŪƒpūZfũmßž]­­­‘ënŗPҐ'QeîM&„ī%ËFVąEīH*ģ‡ĨÚCߐ‘=¯ĩĩ5fx6ŒeæQg2^=ö˜ššš´e˖¸>ˆĖŖãm7Ū“į´zĀŽIÆČęnäo>PÄËøScƒ]ķĮŎ%ķÉęcöEœJ˛e|†ĩÂē`MļļļÆŽNķu)”#ÛZ—Nt{zFĮáƒĖÕW_ũÁ͛7;Íæ0ÆÚĩkcÛ/"!¤ĄØB"g¤+mj~~*×žĻˆBLĨRąSĨíØ‚V ­č”Aņ+›B[M …––555ittTCCCqÎcS66Ļąą1ĩˇˇĮ1ÄYÄĐĐæŒYzéSßBWœ‰‰ uww—eĶldęœå¤īÜš3fZėüĸ“ļ[Ę”9Ö …āļ¸TRœŋܓuH–…q‡aŌŪŪ^YĩoÛwžč$ŋĮčƒÚ…#W,ã Ö5ŽãÎZAîtīâûqhmfÛž×ܗ38RŠ”úúúâ|'œÉd400 å˗Į  ž ŽēĨ´Q€~˛E¨ļ§Í:ąČÃĘÆœUWWWŦ‡€jÄ˙™įãã㚘˜(;ˇ‡€yd‹Žyîų$æ ēo||\CCCŅĐĐPŦw‚Ö××WÖMueđžcccQ˙ĶņĨĄĄ!vBÎķk+ČÎ2ëęęÔŲŲŠ\.§Ŗ>ēŦ¸”yË8XJ*{ ßC‹}gffĻėÄoÛwbb"ę)2PÕ2™ŒZ[[544¤BĄOkfō~č͗Ŋėe•˜Ž*Áēuë<2$`Ũēu‡ú‡Ãáp8‹īUäp8‡ÃápT)ܘw8‡Ãáp8ĒnĖ;‡Ãáp8UŠČ™÷ö”‡Ãáp8Gõ`íÚĩ{.€ĩ~%?īëįæĪ‡úûûįCũũ‡ûķVúķĄūūÃåÔ·úû—gܟŸõ÷îĪ[é·úûã÷įŗ‡úįCũũûķŒûķŲĨôķĄūū$?Ķ-Ėi6‡Ãáp8G•y‡Ãáp8‡ŖJáÆŧÃáp8‡ÃQĨpcŪáp8‡Ãá¨R¸1īp8‡ÃápT)ܘw8‡Ãáp8ĒnĖ;‡Ãáp8U 7æ‡Ãáp8Ž*…ķ‡Ãáp8G•y‡Ãáp8‡ŖJáÆŧÃáp8‡ÃQĨpcŪáp8‡Ãá¨R¸1īp8‡ÃápT)ܘw8‡Ãáp8ĒnĖ;‡Ãáp8U 7æ‡Ãáp8Ž*…ķ‡Ãáp8G•ĸfO !,øŗÃáp8‡Ãá8ôˆÆŧëɑJĨ\^ á˛J—Ur¸Ŧ*ƒË+9\VÉá˛J—Ur¸Ŧ*Í7Ūč4‡Ãáp8‡ŖZáÆŧÃáp8‡ÃQĨpc~āéŸäpY%‡Ë*9\V•Áå•.ĢäpY%‡Ë*9\V•Íy‡Ãáp8‡ŖJáÆŧÃáp8‡ÃQĨpcŪáp8‡Ãá¨R¸1īp8‡ÃápT)ܘw8‡Ãáp8ĒnĖ;‡Ãáp8U 7æ‡Ãáp8Ž*ÅbĖ—Ô÷Ĩg(•JíöߙŸÚ ÂüËgzõ_ģBįŦlR*•RĻí=ķʛõØô>\v衛ßĸᜰLŠTJĩŨkôš˙XƒÅÅ}ã}Fá1ũũęŨå4û_V¯ŊsĮŽ +iiL?ŋņ*Bķė5™œNŊäĪôÍĮ&į}yPūuå3zTŸJ)Õr˛.žö6mœ:8¯žOH4ž•Ėŋ„2Xâķjį¯ūQ×\ū­9nט˙Χĩqˇ…–ü:‹â–/éâĻ”RŠ'é/*_”‰īˇÄä—ėš ÚüÍwč’5'(×8;ŌíOÖķßöũ"öáērėIŽÉ×đâ#™ŦŽšR^ŋüįꏞwšV4ĖūŊųøgéĘO˙†Kûp?Šúd•XįW¸^“ėÕ&+ŠŨquyc´čHŧf*™/I÷ū„×-Ąyu°Ps¨āāât]sĶ{ô;üģFgu)c/)öë[r–.ũ‡)Õûõ™ŗēUėũ•îy¨OãĨJ¯+jÛW¯Đš¯ģU¯ųˆžō‰“ĩã'×ëšw=W—„õēķ]§¨ū ŧuEČtëŌMŨvÅíĐēŧQûõyzųiMķ>°7™ÕûÍ×ęü7ŪĻŽW}X_úęjęũ/]˙gÕ+Îߥ=tŊÎkŲuåļ¯éuįŋQ˙q›ôw_{ĄÚū÷‹zΟŋTÎüT÷üj^Ä×Ū7T:ž{ŸÉd°ÔįUЎ_ÜŦŋŗU§ž{ąž˙ĻîÚ¯ë Jƒúî{ŽŅkĶŌÎ}ŊßR“_Ōį.hø×ŠtĘKôöםŽãZ Úz÷?écŸzŊÎ}ŦV˙{Ûå::SÉu{”kō5ŧø¨tÎėeÍÍüVˇüųßę?;_Ž×ūÕ[ujn§~ųéãoyĻÖOŦ×]×<ĨÂ5\…˛JŦķ+}ÂũąędUî8 ēŧâ}y‘xÍ$Ÿ/I÷ū¤2]:ķę âÁ k׎ ‡7ŠĄ÷æs‚ę^nŨķ•cwŊ1tkyxéWļ„™ũŊnę—áƒ'+茏…GĻwũŽ4ž˙úΠÖW‡˙ŠüM Fŋ.oWh~Ų„ĄŋL*ĶĄđ¯ĪĢ Zų§áž ~W ˙ōĸĐ îpÕŨ;vũn2üâũ'Õ<+܏аëw;ÂĪŪ}|Píáˏü{í/oRY%”A5ĖĢR1”BĄ¸-|ū,y}ذĐBIzŨ.äīū?aUË3Ç˙îŧŌÉáē§*ŋßR”_…r˜ÃŽđßo;:HĪ _îŨĶŲķu{–kŌ5|HV ×\q,lxt LÛßM?>uV*¨į­æ}´ž;HØ×yĩ ÎO~ŋdûhĘ*ąî8ēü‰Æhą‘ẍ́„ķ%é۟ôē%6¯ÖŽ]ŽšÍBiZ;' Z8Ų<ǟ~ō+ę;î*}ā÷V‚J ^˜ėēH?øĩ´ęÅéØÚ]ŋLĩjÍ+ÎRũč÷ôĪëbjl?0r÷ZũûpĢ.yĶyjOíū÷=Ë4Ėūž)Ģe1|•R}[›ę•Qmz× g6ëģˇ>*uĨ.‰aÃ&=õ˛W긙Ÿč–ûÆėKėËøîQV ePķ*•ÖSe߯“¤Š_éú7ß Úˇ]¯×¯ĒÛįû-IųU"‡2Ô*wL›$=ÁúKpŨ^åšp ,T(Ģ=Žšt‹Ž[•S­ũ]íQ:û=ŌĐ ÎTxŋ*—xBŸč~I÷Ņę“UbŨqtųŪöåEC%k&É|Iē÷'ļ–Øŧ:H8˛ŒųéÛui{Ŋšk•n?]/˙đ÷ÔkŗVStį}ãj:õŨũöŗÕ™J+“ŽQĪ3¯ŌÚ1§ŧ“^WœÖŒ¤Ú†Ú˛ ŽkPĩūáÍŖ˜-=„aũä†Û5Ö~ŠŪpNëîߛLÕĻķŪō åų„Žũ܏ĩq$¯‡˙Mēæ›ÚqæUērõŽ|õÔ&ŨģIę^ũ$ĩšYYĖĶuŦĻôč/ú4ŋdáŖŌņŨëüK(ƒÃa^UŒ‚6~éjũußeēū]g¨iôqÕ˯¨Éãʏôęáī}Jīüȃę¸ėz~Į|užäē$rM¸†—"öǟ@ĄW÷üdĢtÜY:ŽĄŌûUąŦĀŪtūېtŦFY%Õ‹­Ë÷wŒ4ö´fö†¤˛Jl#Táŧ:8B8ķ)ÕvŸĢמãzÎ9ORWēW˙sËGõĄ÷?_ëGîÖēžŖæ”¤™!m’&žũVŊãŠŦūˇôäéŸiíģŪĢ×?{\ßŦK;Ō‰¯K5Ÿ Ķ:Ĩ›´^#ĨSԕ–¤imúņÚ!i|{^IOc\Cwé†˙WĮĢß ŗ—Ûŋ$”ŠŌęüŊĪëGŸŊLĪyķŗtüŸÎ~:ũÔˇę?~đ^­fáōę—š;›Ë8äŠúVeĨßnĪk‰ÔvF$߄˛J(ƒēÃ`^UŠR˙ˇôîk×éŧO~YĪmKi|?îUõërėģzyį‹tû.īļũĸ˙§;ozŠēįķā\—LŽ ×đ’BRũ4EmũÆ;õžŸ5éâ›˙HOĒĢô~Õ(Ģr<ąÎOˆ¤ûhĘ*ąîXd]žßct@ņDk&!’îũ‰m„ę›WGg~ûÂŋž˛-¨öųáĢÛwÎō߯nQž>ņčąkâgׄã¤pÎ?l…JŽ ážkO Rwxåįî į‡ÃŖß~_8ģAARxĘß<\Î;[r(…í߸84¨+ŧņĮã{ŋ|!™†bØūí? '§ëÃWū}øÆwŋn˙ŌuáĨ+jŸöpO~×uÃˇ† Ō 'ūųú0iī9öđ’F…•oŋ7L„Ĩ†ũ߅d•XU4¯’ru÷t]i4Üuõ1ĄaÍ˙ īĸrÜvÁœųDßģ„å—D^…ĄđāO~~đŨÛÂ>ty8ĩFĄũ÷ū1l˜˙Đ{ģ.ą\ŽáƒJyā ę'‹RČ˙ė¯ÂīÖ*t˙Á×ÃÖ—ėõ~Õ.Ģ„:O÷Kŧ?VŖŦęŽEÕåîˋŠ„kfO2M*ĢÄ2]ĸķjąvíÚpäķ!„‘oŊ84¨'ŧ*‰‰{ÂÛztüĩáūæÂü÷ÃeË:¯üqØQÉu!„0ņpøüžjgŠĒA::ŧøĪŪžĸT8īŸú’žVÅŪpËķꂎē:üwš‘Ũd:š>üÅI 5į!l1 }bŨĩáeÂų_z<Cˆ˛ëžę§Á~UŠ˙ĢáYR8å¯O`ļZėĮøî&ĢJdP-ķęķSŋú›°ēļ'ŧáۛÃĐĐP ūéYAZŽũioÎOīūž{ûŪĨ*ŋŠ `‹áņ[. :*\ũß{rwwŋ.ą\“ŽáƒŠeĩš3˜|dm¸¤UĄņŲë[ßl$^‡ uūžî—tŦVY%Ņ‹ŠË÷a_^,$^3{qūÉ*éuKu^-"ŽČX‹P,¨¤”R¤[ëŅĶOHIĄ4¯¸iļ€'EáDŌë$ŠņÉzũÍi|ā7úÅũiķØŨüœ^m҉ēđŒļ},z;8(õŨĄ~8­•—ũ‘V'ė|ĩ›L§6ëg›ĨŖÖœĻœÉ5Ž:W'fŠÚôPŸf$ŠūX=ũXŠīG4jH‚S›īÕF5č¤ÕŨK“ö°ãģûüĢ@U<¯*Åôļûõۙmēņ…Į(›Í*›ÍęøË$é1ũíš+Ô~Ņ×ÔŋįęĪŨqØČ/­öĶÎŌJm×˙nßSUÉî×%–kŌ5\ØmÍíBaÛŋčMĪ}Ŗn?ú}ûÖˇ+i§ŋ}ÖwKûĸķwCŌũąZe•Dw,ĸ.? ct°¯kf7$•UŌëĒu^í'ŌŠųZí°DI3ķ ׅ-ú÷ĪŪŠéúÕzöņģHTé÷š5ŌÆīčŽMsÃŊã—˙ϟæ3zĘŗVŠĄ’ë"RĒ˝¨ĶĪxŠVÖūZŸŋîVíXķf]^1šė`ĸ¨Įŋsƒî*§?øÃĶ´{ÉHB™Öæ´*'mũŸŸĢß\?ņČõHQę\•›-ܨ=FŊôDéžõī›Š(›Đ/ŋōumĒ=W—­9äÄĀ=`oã›TV•Ę įUåh|Útû÷îĐwĖũwëO—´BWÜxģūëĶĪÛĮnÕ&ŋ’ŠģUÃMkķžŖGÕŖÕ=õ]—XŽI×đ’BÂ5'Š4ôC]ûü—ë‹áĩúú­ķÛŠq`}ˇ$ą7ŸI÷ĮĒ–Õ^tĮĸéō4Fû‰dk&!’Ę*ņuÕ<¯ö5œ"vXcōũÅ3/×Ŋŋķ]°úufļëŪ¯}RkīšĐ鸐.îāũktüåŅ›ūöBŊûE¨Â/Ķ“§îՍīũ¤ļ{ĩžüâî]í’^4ōũwęǝ5ëwĪįšk­}ŠĒ˜˛ŦT't@4ąĨQƒmĮŋ ´†N‡L ô:ĸFÁ/$1‰Ä#I7ĻAlˆzPčîŋNŸt‚ELŧaŒ¤Ë $ģvíŊöēĖÛ7ī÷Ų,cšËCkļt¨žīEUíŊ֜ß÷~ī÷žĪxÆ3ÆÛív; âßė ø˙ 80p`0 āĀ`@@@@@@@!Ā€€€€€€€€C €†@  80p`0 āĀ`@@@@@@@!Ā€€€€€€€€C €†@  80p`0 āĀ`@@@@@@@!Ā€€€€€€€€C €†@  80p`0 āĀ`@@@@@@@!Ā€€€€€€€€C €†@  80p`0 āĀ`@@@@@@@!Ā€€€€€€€€C €†@  80p`0 āĀ`@@@@@@@!Ā€€€€€€€€C €†@  80p`0 āĀ`@@@@@@@!Ā€€€€€€€€C €†ä7û^ģØnˇ:;;SŠTR,ûf_N@@@@Ā?ģŨNŖŅH§§§ŠĮƒtˆ0āÆŲŲ™îÜšķÍžŒ€€€€€o¯ŧōŠnßžũÍžŒ€o ø†Q*•$Iív[™LF‰DB‹ÅBņx\‹ÅBétZ‰DB›ÍF›ÍFétZŗŲLétZų|^ŖŅHĢÕJŲlVģŨNų|^Ōĩ˛8ŸĪ%Iņx\ËåRģŨNņx\ÛíVÉdRëõZÛíV•JEÛíVÛíVŗŲLņx\étZķų\‰DBÛíV›ÍFŠTJÉdRŠTĘūŸëZ¯×’¤d2ŠŲlĻl6k?ŗÛí”JĨ4UŠT´Ųl´Ũn•JĨ´X,$I…BAƒÁ@ÕjU‹ÅB‰DBétZÅbQNGš\N›ÍFŗŲLÛíV‰DBąXLËåRFCÛíVš\NNG‰DÂÆ1‹ŲũKR­VĶh4ŌnˇSĄPĐbąP6›Õd2ąkšL&ĒT*Z¯×J&“šL&ŠĮãJĨRvÜ¯${>‹ÅB™LF›ÍFĶéT'''Úív’¤X,Ļų|žwŋŒųzŊÖfŗąĪJ§ĶvŊ‰DBËåRš\N’öžcĩZ)ŸĪk:jĩZ)™LÚķÎd2J§Ķ’¤ŲlĻårŠ|>¯ŲlĻT*Ĩ\.g÷ĀįķŗŲŦÍ!~&NÛ˙§R)‹E­V+M§SûT*ĨÕjeĪ‚ņc>uģŨŊų‹ÅT(Įĩ^¯5›Í”Ëå´X,”Īį•ËåtuuĨršŦT*ĨT*ĩ7§ãņ¸’ɤ–ËĨVĢ•jĩšļÛ­vģæķšŸ‹Å”Íf•Íf•N§ĩŲl”Ëå´Z­T­VuqqĄŖŖ# ›ÅbQÉdRĢÕJģŨNąXĖž[ąX´1–¤^¯§BĄ`īZ&“ŅršT"‘Đl6S2™Ô|>ˇ9>›Í”Īįí]ž¸¸P>ŸW§ĶŲ{ŠÅĸâņ¸FŖ‘=ûBĄ nˇĢBĄ zŊŽÕjĨD"ĄŅhds‰ųÂŧ˜Íf*‹ö1ī—ËĨ2™ŒÖëĩŲd2Ņd2ąy‘Īįm÷û}ĨR)ĨĶiĨR)û,æÍnˇSEjˇÛ ‡öŗÉdro^& %“Iõû}ĨĶi[Ãx†…BA’ėŪƒ2™Œžūy=xđ@įįįJ&“*•J*‹ēŧŧT6›U<ˇwzĩZéøøXWWWĘfŗ J§Ķv¯įįįjĩZJĨRF* öėY‰„†ÃĄĒÕĒúũžŨīvģÕ¯ūę¯Ú:pxˆíXåū…‡ĒT*zŨë^§ŲlĻŨn§d2Šd2i›Ųvģ•tMōųŧ&“‰‰„¤ëMšMiˇÛŠRЍßī+‘H(kŗŲhš\*›Í*‹i4Ų;U*•lsÚnˇļŅįr9Ûđųķų|Ž|>od§X,îŋÕjĨõzmä ˛˛X,”JĨŒ¤˛apÍü\,32A:˛Āĩ,—KÛĐķųŧ=Hã’L&5 ”ÍfUŠT44B‚¤ëÍj:Ú&7ŸĪĮ•Īį` ‡C#Z\7?Ë÷sŨëåršGäØWĢÕ^Ē?ŸĪkąXhŗŲ(™LaLĨRFˆˇÛ­}ŸéįĮd2QĄP°Ÿg´Ųl”ÉdŒN&%“IÛøWĢ•9Īĩf2oūÍ÷BîKĨ’ũš$#‰<ķĢĢ+#_†x<ŽRŠdäkŽĮãFf úëõZårYÛíֈs"Éû‘Ëå4”L&•Ëå4íy&“IĩÛmûüŨn§õz­zŊn×_,%]tONķųŧÍu‚+ŪS<ĪĻP(YFF˛ŽŽŽ,Y,Ē×ëöN M§S ^xˆjģŨļ÷%+—Ëiš\ÚÜā~˜ģŧ;˧Ņh¤X,ĻŨng÷ŧ^¯•H$E‘‹Ü3ĪÚ?įd2isŒ T’ĸ(R2™´šM`Ųl6ÜĻĶiÅb1M§SĨR)›SĖĢÉdĸL&cAã`0PĄPP6›Õt:ÕĶO?­‡Ú;>Įmž ‹EĮc#üxHy*•ŌzŊÖjĩ˛u’5%•JŠÛí*‘H¨P((‹Yđ‹Å”N§uûömŊņoÔÛßūvEQ¤ršü„ģAĀk!ņđÄ@5€@đgDČš\Nņx\ãņX™Lƈ‹›`ŋߡ…yĩZIēVoÖëĩĻĶŠ ÕjeŅ5›j#ßí7cH‚WSØ ¸ÆétjjÅd21ˆĪdfŗŸĪįö™|›n¯×3R‰ęĮÍįs•J%M§SĮc­×k[ėŲDPI ;ŗŲlO=dCâŪQd$i:j8ą+ ϰ˛q š€ÍfcŠ!c áa“ãžNŌõæ‹Ålã–dd/•JŲĩCB‹…ÍHÍd21˛ųæ÷ëõē‘ŠRŠdäÄ+\ķ ĀķœÍf* *•JĻ>Īįs#é~ŗĮĻĸ°áÎfŗ=uÕĪ)”î‹ĪFuĖfŗ{ķ B/ɔĻÁ` T*ĨjĩjD  Ō\­VíY V–Ëem6 Pžbą˜VĢ•-ÔZéšās-ggg*‹ŠĸČHWĨR15:›ÍĒÕjiĩZi4™:i‡eŗYYĀFÆxCŌPgŗ™=ˇŅh$I6‡˜G“ÉÄ2 \ûjĩ˛÷úęęJ™LFŲlVÃáĐæÜl63ÂX­Vm~ķŧQĒƒŊĢÕJķųÜŽy<kģŨ*Š"­×kív;år9›O•JEš\NĨRɂƒRФŅh¤l6ĢŲlĻŅh¤ÅbĄhąXh<kŗŲ¨\.+‹)“É(•JíŨ7ķ…˜õU—÷ŋ\.Ûŗ`m‚ŒÆãņŊŦA‰W[<1 $DŊ(, !"y”R\ų|^ų|Ū6FIĻbąÁĸdxĨ† —ô3jÄbą0•Å ĩ†ëô$ åŖßī[´NZ‰ŸgŅG!ĘfŗZ.—ÚnˇšL&’´—"…DB ¤)œA…k6›vŋ\{*•ÚÛP7OãōŨüž$‹EÛØ!/¨¤"!ž Lņ9š\ÎîrÃ5đ÷>=ČįÅãq M§SÛ('žķ$—ËYÚn>ŸĢX,j2™h<› –ÍfMC, Úívę÷û{é,6k~—ôč|>W¯×Sš\ļ4\:VĨRą1d’Z†4ĻR)•J%EQ¤ÍfŖáp¨ét*I{)@~6N[:ßoĐårŲ>×ĪCÆĨVĢ؟“rī÷ûf)@MG!GíŊ˙žY¤ë jģŨšŌŧ\.dGQ¤BĄ ņxlcæįaŠT2ō ņ]­V‡ÄãqM§Sŗ}Œ,0¯JĨ’)ų€€nģŨ*›ÍĒßīÛõĸ"Bϓɤ*•ŠŠü(\ŗŲĖžŸ /ĢŅhė­OWūŸëâ]¯×–6†Œ–J%år9STyˇ!äŌĩ-ŖÛíęėėLŗŲLNĮYŽu<k0hĩZ™ fš\ĒÕjiąXXVdŗŲņŽÅbj4*•J:;;ĶŖG,æ>–ËĨŨûzŊÖååĨĨĘY3¸^ہFŖĄ|>¯¯|å+úž €ÃF €O R?¤ą2™Œ-B¤–đ^ApØŧøûų|n)'IĻT \ ˛°Ąz/›QĄPĐ|>7ÕUŒ4é.RoDÃlnlt¨^ÆÉdbiTŸk<›‰k!-•ÉdėŪP˛üXz?Ą$#@ĶéÔÔ;~6™L*“ÉŠ#ŸĪįH2î(™årŲžƒ$#¤IĪá§d“Z¯×ĻĒāßƒØąņÎįsM§SK‘‘:{ųå—uyyi*Ą¤Ŋ4¸÷¯yī"vî V’ũ7Š ‹tŗéŖœd2ĩZ-Åb1ĩÛmKsŨ¨á^9õv†õz­N§c*>¸Á` Á``ÄæŸĒŽ/‹{J8}š\ĒŲlĒŲlÚ3fĶO$ öōė¸nŽ—@€':¤ą*đ>ņķX,¨0åYā]åēü÷2vívÛæ*ײŨnU¯×ÍGČõ‘úŖyCЃPye~6›i8šē‡ĸŲ?==Ũ ü|J"Žd<›ßĶ&ŒīB,Sš\ļĀ"îƒQî#›ÍĒŲlîÍŨ|>¯FŖaī{ģŨV2™Ôh42ĢËrš4đáÇĻĖâĄD­åŨÂkɟ. xbā=ƒėā•’nԞX,f)”/”ĸeiŖ–áĪaSN$ĒÕjF~$CyĘfŗĻ˜Ą"@6ø™\.g›ŠWˇHåøĸ„ų|n ;~Š|>oŠčjĩjŠOTN"{Č%Ļn6Ž…€ą`“$=‰…XķwĢÕJãņؔ3?fÅbŅÎfŗą +Š"‹E#`ž8D’]›9÷Íø”J%ۜI—­×kĮc۔!ū ĖōŪãE 1ŖĨŲlÚØ÷z=#u¤ŋHyB<đrņyŨnWårYÅbQ•JŔČ)j4vū|:Ē\.[ĀŅét,ļÛíÔív-đ€œvģ] hšÍĻ‘K?‰„Š„âņ¸^yåĩZ-•J%ĩÛmģßĢĢ+#m^=ƒôAxŋ°[p}ƒÁĀR}ÕjÕH)æų|ŽW^yŊW‹…JĨ’ĨŪ ’˜ŋŊ^ΊģPę°v ”% •Ëe#D¤…QÅQÕēŨŽfŗ™ H'¤”÷gŗŲh0XpHĄN*•Ōt:ĩā 5Œëå9‘bF­Į˛Q,í}Åbęt:æc,‹čĄ,fŗYe2ŗox‹D‘ÂéĻ`+‹i0¨Ņh˜ĒĘx@*!¤ũ~_Ŋ^O§§§ēŧŧÔx<ļôúbą° ˆUēQÛ!{ĮĮĮJ§ĶFöūb¯ x#A`p¸UĀO Ēūˆ\QÃPķđÄ eŗYķSQH!Éūõz­RŠd‹›ŪŌ<tEfęŽÅb*•JFvX}ÁGEĒT*Vā˙aķn*g‹Åĸm$RLÜŒŒF#U* ŒŨxÁ ¨ˆĸD"a„ŠP(¨X,Z”˛ÂfĪXrmÅbŅ Pšßnˇké7ƒßķ…¤1Ķé´Jž%Ÿ‹2ÂÆį`ÎOĨRúÖoũVŊōĘ+F QVšžƒße3’nĒc!Kx´[646oŸŌCC1‡{D𴎤=o •Ĩa6ŌT*eEIŒ/$†ąa‹EKÅq=(ˆ¸““+ØÁšĀ˜0ÆŠTʈÕfŗQŠT2U›wh2™¨^¯[3¤ ī*ׂRŒ×ŽT*Y*]’^˙ú×k2™¨ŅhhˇÛéėėLív[Ũnׯ‰ë‚âC‹ĸČ*ą)āņãī=ņFĻ’Įw’fnĸ~zī#ķÎ[’ɤÆãąĒÕĒjĩš6ˆy2™ÔÇu÷î] ƒ=/˛$[3JĨ’Z­–YÆãąúũžZ­–}ķe:™n6›ŠĸȂ]Ö¯žRœ“JĨŦĘēÛíĒVĢ™ Į3ŧķßŦQĖĪL&ŖétjV‚Á`` $äŸ@ ƒkc~R`Â<8l0ā‰AŅ5j›Ã`0°TiĸX¯”@ēHŲ°QP%'ÉŌQ€étĒ|>o›j ›Æ|>7•ŋƒ(°aúâŽD"ĄL&ŗW$á7.T#C¯×S6›ĩČb‹ē‰ŌÆįB`øķ(Š,];™L4 $iOaƒ˜z%žK|D¤Q!(^Ac\ ˍUĶéÔH…ÕûÍđŪA ƒÁĀŌŲuHûm~h§ÉDEôŠ5_l™c QQsšœm˛¤UŗŲŦ)-Œ)~C6ßt:mĀ6"‰l6ģ—f÷•ÄĨRIũ~ß6ZÔˆN­VSš\6RË|*—Ëj6›J§Ķö,đZB,Š áeū`ĶāũˆĸHãņXĶéTO=õ”uā¨Õjöš¨w¨¤–AØl6zôč‘6›ÎĪĪMeä>ĸ(˛ŽŒ)ÁĘk[EŠĸH’tzzjäyˇÛY015u~~nä•z:ĒĶ騜Īd2ĒT*ĻūÍf3{OX/˜ŗÉdR§§§ĘårĒVĢæ}d 8\đĀøŅ“‹E‡T‘:•¯ĩų|n¤NĨ›td˧0QIQQeņÁãCī+Ô>éĻp„Í„J=`Ēj%1ķ*$ę¯Æ…8ÆãqÛ\I}ĄÎ@ZQ>š*U!=|¯÷8AÖh ú¸7Č?į{}ą1J˛q‡ļųNåŗŧŸ bF:ō ąc#ÔŊüōËö]ö ėāÍÄA„rŊazĸn2fú@X¨xFM*—Ëę÷û{›ŖOéqMžøk-< Ŗo~ķ›- ņĒElęÉdRgggŠÅbJĨRēuë–/ ‡C+Âáē¸ü¨gétZwīŪĩ{†pq Œ5ī÷ĄfŒ™Ī=÷œW"‘°3äžT*éÖ­[:::˛"A„ĩX,Zņ€¯æ÷gŗ™åĐ6E’Ĩō'“‰õßk4* ŠĸČ*p;ŽŊWX:Ž­øû(†áßM&ķĩˆ´Z-Õëuķōųŧãˇoßļt0ØwŖÂ F#›÷.‘HčôôÔÆŸûÅGX,­*7Š"žžĒP(˜ā„ ß÷J'Öæ*ETš\N•JŞ ­d đķņFQ´įĩĻā‡w ;GĀa#Ā€'•Ǥ0!]étÚHU}Ûí֌Ël~’Ė+HôŒ’F´Œßo6›YÚhąX(—Ë™_NēŠČõMŽų~Eī5ŠĮã{Už&”'<@|Í_“ɤĨeÚíļkd2S?H ŗ1˛öz=#Ü+äˡáīđŌųĸŌčø§đÁ‘"„ĖP@AalØŧ}ĖjN|C>]‰ ō×+Q¨Mũ~ßRđ\#+ :ŽĨdŖ(2Ōˇ^¯íŗyū¨ø%™Šį Hâãžé)Į˜˛yŌOyRŊX,ôú×ŋŪ<žs_­^*•ˍOúm>Ÿëë_˙ēŊž%Žtcu įĨW77›...LE$õ’g‰âWŠTŦũmAjĩšUŪâ5Ä?JÁw’˛äžŊJKá<ĒI!'ŖŅČŪŪąÕjejc†ĸ–ÍfU.—­• đŲgŸUŠTR­VS­Vŗ‚qCiĨW"ī;cŽ’Męáx<6"ČõGQdm“|ꔹ@Å<ŸELŦxėČTL§ĶŊ&÷¤[ŠøF,•J珏°59IđFā×nˇ•N§U­V-ŗ€Ÿâ9H j"÷P*•ŦXÉ÷ õÕŦ‡Đ:ā īÜšc ’÷¨Ąō‘v$ĘEå8AƤ›BxīųA=ôŅ:ŠTŸJfC€Đa>÷ž1Œâ´c UŠO ų cŌt¤ ¯úeŗķįŊCķų\FÃ@Ėßl¸.š6K7^5ˆŸ$û=ŠVP?ČĨW=QÜH'ŗáH2ĸÃfÁF‡ @x’Ė3¤ŋ)(ÆĩįIÚTē9ŲÅOå〈0†’ŒP\^^Úüi6›–šöũyū•JEŊ^OGGGļŅōŨ¤‡ŲHũ¸Įc5›M+$ŸʜBfž@Ô!"¤JsšœîßŋoJs_*EJToRz||līP­VŗžzĖwT†gŗ×ÍÃ;Ž¤øÆįDžßl6SĨR1O ‘įÆüĮƒÚh44ėũ‡V­‹÷’ûâw)æČfŗjˇÛFH¨čžēēR­V3bIšÅOđd21ëJ[ŖŅĐršT¯×3Ęņl6SĩZĩvB:ŌĢ’Ŧx„õû6Ē”IšrM’ĖĮ™Ëåt~~nŊ ëīŨģ§JĨbcœŖuÕxņ‰Đú€Ā€ L‘–`ヨBƒ˜ ø‘ēĀxƒ$˛xyōF:Pē)`Qí÷ûåōw•JÅŧ;˜ļų.ŧ;¤r!ZFŽS?*iÔ*6ˆĘ×ÉfÅbÎwBŦhæJ:ŠjiŠHPÕPPHũr¯Ŋ^OĶéÔRbl¨´Au âğ–ĀsaĸΉûãĪ ÉdŌ ą$ķzAȨč%}‹GÍ7d–^íš\­VĻņėđ[u: |:BZ,-UŒ€†Û|Ībųx…7sŽīæs¤›Ö>ĖUŌÄĖ‘Z­Ļ““#pô‹#íŒzŽwËsč+N—ËĨ*•Š†Ŋ7¤Š¨ĻšĸIæYŦT*fģāųųÖ5§§§öķĖ3IöŪ ĸPCJ™=ą&pm¤“GŖ‘–ËĨ:ŽŊĪTÍrę Ē9dĢö!Ū‰Ņhd§ĸ@ŧņčá;dŒ!CXP\á›8SuĖ}ōYŪ˛2™Llžt:ķĨÆã7đ0ŗž@ÚHį“jf>Õëu#qŠŦ—ŧ7ŪW‹wĐÛ<¸_Č5ĪuŨF& xb €á'‹ĸhĪüÍąI¤Kˆj}•' m$Ø8ø]Š ŧēFk•t:mé?šũrz›2ä‘~f ¯(’ršN§ęõz–V“nŌ%™LÆZŒx•ž}ËåŌ6TŽÂÂįEQé# f|ãlŽŖVĢíĨwQ?ØXė“x<ž×揤oNĖī˛1ûô6)7¯NH˛Ķ ŧOēI­“Ūålgj÷Aę![tČ8Š1žûņcB•4)ŧ““år9k=‚ø1NE*QéCH5$ Ļ'ˇTZōÜi@Oœ)6ádzĶ=îw„”ŖčQM/Œīϐ ÛíšWÕ7“FÍÅ6ąČårę÷û֜¸\.šƒāĶ*Ĩ’w ¯*$‰ô4ķxąX¨ÛíÚ| Չz ɂĀ$õû}{žŪīÖh4ėwąa0>¤í™wÛíÖÚ´ÔUĢU+V)—Ëöĸč‹EÕëu{ū‰DÂĒž™ƒ(ÖÕjUįįįö=4go6›V\…ŌÎ +Œë„Ÿā_1sžs†Ŋ=īüüÜvÆ)“ÉXāÂŗdŽĮãqÕëu#ąÅbQGGGVHÃģ écmō•ü‡‹ø†A čččČÔkZ.ĐéŸH›ŠQ7”Ÿ:&UAĒÕjŠÅbęõzĻ@ū ’JĨb‘;߃R!!m;ŒpųęaČéS"~ĒPųoRƤg RÛ¤¤¨lĐ͘H˛†ŗøˆÎËå˛ĨÕXĀ!ļl2Ąķķskšė58Ȏ÷ŗ‘Ō†ÄC–QGøoî Uę wü1I6'xö´ĶĄš•ôÄ ąõE;¨žšŲŸÂB.×ëĩåĐ^ħÉx>x&sšœĨûP}iHnĢÕ˛â’jĩēw†WŋQŧ 5Œŗ÷mA|j‚ é^¯×:>>6•šĻɤŨ!žä0VNgīįĶé´Z­ÖĢZ× îqL'č@Qæš_ßșg™“nŠDhGT.—ÍŗXŠT,āņéVæS§Ķ1…“t˛?Mˆ Žā€K^Ņ|>¯^¯gī[Ŋ^75 ˙'„Îŋƒ|'íŦ S|&ĘëÕˇ’ĖŖĮŋšF_¨Ã;Žu†N Ųėõ‰(´ÜAÕ%sĀē3M9'ĩÉd,…L ā įđ?ķwãņXŸūô§C ø€ʀž¤l|¤L$˛ąĮVÅ'ŨœgK?/ˆĒŠ/ĖÍT˛ ųƒŋ—n€A•ãų2OHŨâåg}jR„ZĮĪQ áÛ:ᓄ€á/ψˆô)…¨­ž')OÎÁĻ7Ļ'Bô|ôč‘ršÜŪsAe…\âŨíõzfa¨ÕjæŠôķ‡û”¤ķķsUĢÕŊ ꋋ år9K“ ášąNúyLå4ķžĸ›‹‹ ĢæÚ)*am%íĒÎķ 8l„pĀÃ{ŒØØŒ¯ĸc3‘dJÎp8´~¨¤Ųp‰X}ËßŨŸT)žpøÜøēäC4 ží ęę—$ëQÆgŗQĄv 0aėFš@ È/É"t›: •ø š@ރŋC]ō‘¤ß¤›ÔĶnw}^.gĒR-Z,÷Rĩ>U!g#"U ‘…ôĸŦđŨ¤|ŗkIæã9Ar QgîŲVpl`pžd“”.ĪöââBŊ^OËåŌî ė;wîX?7ŧ`œV‘Íf­­Eũ~ߞÁųų𤛓DP“Pgŧb |*Ũß}đđŗRTā dŠÅĸĨĻ!ˇ¨š¨KŧW¤@=áįĨ= 7*öéãČŗĻR˙,j7ĘąüPi§ĶŠ;æĶī<Ķršŧw „âBãoNč Ņ7=F}Ur¯×3-ä{8j0Ø<Fö<М% ģZ­trrĸjĩĒVĢĩį]l4jĩZŠĸČü™ô˜$ˆCáĨHˆĩgĩZŠ×ëYk,‚KæÁAĄPĐééŠvģīTĢU+2"x 0ˆ@’ îgžyÆ6ElžąÍW­Víč4ī+ŠĸČ*i%™—‹ˆ>,RIDė\3Š 6F6r|k¤îŧ׎ÍY’Ũ ūCƎī"ŨŅáŗP7ßË ˛ęÛĘ ėAųĮ{Č0Ëŗųĸb@Ø4 ka€ I\¯×F8 %Ūë‡j‚ qCÍ%%ÁF-äΉ„JĨ’ãŲČ|Õ4?Z¯0ŋ|Q>I?PŪP^‡ÃĄžyæ™WųôhŌh4,˜!h€Ės˜W×Pęx–ÕjÕŧ˛Üj+J¤•›*aéZ!cœ|š1NëęęĘ<°Ųlf§O0Ī$Y3hÆÄû@)ęaœōųŧƒŽŽŽėt’įŸ~ī |}T°R9ë‹Ŋ(Vōž[ē&ô¨Á´•A)§0ˆyÆq}[_@…ĮXŌZ…y^­VíķVĢÕŪYä|myxŽX6(*ōÁÜÁGĀĖqØIsN!haM[¯×ēŧŧ´9HĐuûömÍįsŲ‡Ėų9ZaUāY˛žļZ­˙Ċp(Ā€oxI­ąØāĨb§é96<”U_M‹JˆōÃbí̃ņ÷P‰(ÉR5}@dHĄ}Ė&@zΧIIųáq‚@Ē%™įɧĪi×Âŗ’nÎ0&­„īĐWŲúBI{jŠ4>VˇÛU:V¯×ŗ´¸/ūaŦh#ÄfLģŽ^¯gøŊĘÃØRę•kŌ°¨t¨EÜJ'Ēž=H,)v΁ŽVĢ{§į”Ëå=Â*ÉæĒ7ž@Ū~Žžy4'æúš&ČĢ'Ŧ´Áį 6RŠ”ÍļX,ė<*Ä!jôÛ;==5¯#*5Õ[Ōé´]DŠ1˜ÍfϜ^]]™JĖÚB#ÉúCŽĮcÅb1ķÛųį‡?wËû‰„){d&ęõēUˇZ-õz=ĢâN§¯ĪNÆ 0ÕnˇmžJ˛Š{î‰67ƒÁĀú_2÷2+ūˆB”ŲårŠzŊn)ūd ™$é×~íׂđ€Ā€'$…‰$SDHãՒn*iY’Ĩ*|Õ¨¯Ļ“núÁąq 2@$PĘ†ÃĄũ9ĮVAū Z¨¤ˆP*!d\{>Ÿßë‡ÚHõ*›)×ÍB‹Rå[9ĐœØ§sONNTĢÕL={œ BÎP˙øZ¯HÚgŽÃˇq‘´įu¤ €Xųv>õN3dî7[?<ž'[Ÿĸd< <\/Ī\*•lÃõKÎ1ãB‘o^L:Ĩ×W“ēcŖ­×ëV˜DZ…ĩ›ļ!%*Ú!TĖ—vģmĮ‹ÅãqķÁ’ ÄÆ3BEŅϟß9&šËåĖBA:õ¯VĢ™Ō)CŖI1ÖæIŊ^ˇ÷z8š*‰ČÜķļ”;ŪiHpŋߡ9H[&ާŖUãíŋ  ÂCIą_]]Ų3ņĒš˙‚IËdōúx´zŊŽX,ļ—>öÅ^žB€Æ73ŧą6*›/NŖĐ‰wŽ€Ô7Å,ŋĒ›ÍÆA“ĩāđČķšŦģžĮŋī\Ä0ā°`Ā#‘HX› Ōy,ęlčūT ˆ‚oIÂ9ŦŪĖLKÎz Dâ6$īŋcƒĮÃÅ&ĖßcįdŅJĨbJ j Ū/6TTNČ%„ÆĻ†É5r,ūøũ†…Šo *Š<”)Úįp jƄÖ)>5*É~_Ō^Jrā{ú~gø+Ŋ€6>ü<÷é{”á÷ĸ߉Á05U­VÍĮ(ÉRžoæ"„Ė#ÆgsŽ-ÅĖl K5ÔÔ*ŽĻ?1E’)f¤6Qv§ņxŦņxlū5ČEEØä`m Đ2urrb§ ˜`¤Čt5ī+íHđen6U*û|…kĢÕĘZÂ@üđĄaÅ8::2•™ņFĻķ¤mą" īĩL§Ķvr īCŊ^WŖŅ°ųGĒ“y†ĩԜL&­åsšœŠ×1ør{ŊžŨ'īėzŊVĢÕÚģvžÕŸ%AŲ€BĄ`g Ŗ†36¨ÂßíöēwéÕՕĸĨR)SĘ95ȝ“;ßäģZ­ęääDņøuÄT*Ĩ‡ūkn¯A„*ā€'FtŸ"„@ `ļDÍāø6"rOdJĨ’FŖŅ^/2éĻ*’Å”•ŌÄįPõį[Ģøžaé&û¸ZY*•öRM¤ž| ”*ÕÍfcՙQY[ŧ@´Î€2>,ب<¤čh‰AŅ!ŨD{ H6ĮmŅ,‚$iīÄ š˙^ŧP×X,fiCüZøĒ8Ũ€Í†ŪÛ7žN§Ļø- ķ_QÕÍ}@Ëå˛ĨˆņũŅB¤ÛíZzPíLoĩBĄ°×km2™X“Ũ(ŠTĢÕöÚŋ`3€ĖsĖ=[ž§P(čÖ­[Z.—ę÷ûĻŪaōĮƒ‡úzqqa… ¨RÃáĐHĨoSĸCb3 ×Č}ĸĒąÁg2UĢU ŒvģUĒbš P€ ņ=QiˇÛŠRŠhŗŲčūũû’n|cķųÜ*w™/¨ßĢÕõ‘hĖS,ô"äyqĻļW‹…îÜšŖ§Ÿ~Z¯ĢĢ+[÷†zŊžŲ HŖæs$g` Rķ3ô"dėņ)sŽŗo;ÅûĄ$`DĩŊŧŧÔÛŪö6åķyŊôŌKļŽ18\đÄ *É"QßūÄ#”ūŒ _X¯VáņņU°¤ŲHÅ`Ŧ&åÛyxĪZ<~Ũ2" Cx ø3”L6ˆ+U˛¤¤PĮđ‘#-ĘFAZČŸĶ‰r‡oŠÔ$ũÎØ(|.ž46 T:6)Ē21õ{õB’}›*'œHzUJŧ^¯ÛšžDßzŊ^[Š r ĻJ’3`!O>M.Éڝ0öąąmˇ[{^Ė62TÎJĨb›2Š{P­V5÷Ž=Ã7E‘îÜšcj÷ļŲlL!ƒđ¤Ķi/ŸžgNO§SM&Ģ2f^—Ëeõz= X¨äå÷¤ë4G‹QŊIĀˆ9ÍæŋZ­Ôl6-øĀ§Č÷Đ×ĩš”¯$ûlîƒ{eŽzû‚ŪPįũ;Šzų…@år9YU*?9ĨĖŨģwõĻ7ŊIÅbŅČđŊ{÷ösŪIŌôŒiV,ZzYĸŠÆã×m“VĢ•ōųŧ=˙étjj1ã…âOĢÖ9ŧĄŲlÖ q j\ž@_üåį×G˜Ām6›Y@ú*B¨ x_°Üđ,Ķé´ĩwB5$žÛíôņ*—Ë{}Ŋu"ā0Š@žaPB+6B_ü@76IFl¤3>‹¤O’Ĩ´|!$OĒ*Ą'žPœQ醮V+Kwņ9^éƒĖ˛iø~\|¤Ī&~ˆ!=×ø]6m=ž!­/:`Ŧ%ŠÛíĒ^¯Û†đEôũ‚,CZP]ž"žßåS댅 p?Ú˛øvô%ķ!ūķ!X>†ęquueg6C Øđ)žÁgæÛŅčד)4׆ˇ‚OÂĪõL0§!ā'*Ę!>Ė%ȧd`Úg< sŌ É€ŧK2ĸKĘd2v~.ũ,iSBÉŅŅ‘Ų čÃ)Ũ@cŪķķîĸJ2PĻ3‚8ĒÃI3_z$Y°pëÖ-žžÚŅyétZ÷îŨĶųųš.//Ø \“ēmĩZVîŊ­øę8ūėėėLų|Ūy“Æį3§ĶКÍĻ)ÕxWąP\â[\ykŠ"ę!÷ļ^¯í3...Œ(CäÉā•f]bí ×(ãŽĪ–9˜ĸ8{™ ‚p휞ŲŦ~åW~%0‚0ā_¨5lš¤-|Rē93ōÁÆ/iO™`‘$ĩČĸÍį?Ž@ÅbąŊC”? "üQaŪ¯郠˛!ĸ yƒz&“QĢÕÚ;4^’U{Jמ/z|á ōjPÚ?H7gæŌf„b R‡ŪO燔éĶjĩj ß´! ā}ú\ē9ÎőMuŌé ˙í >ļĘPŸ6w3UĸQŲ9ēNgī3 (hxN/Ét?oi´Ė{HE´;™L&FĮÖē‰jS>ƒŪА“ų|ŽËËËŊBĸõz­nˇĢáp¨XÅv2™´cėūáūAŨnׯ˙NĨRĒT*Įf€ŧ3wšGŌ˛ŌM/Oƀ‹EĮcõz=ëČ}Ņ’Ô?õétÚüƜîÃûúMH+Ē‚˙)ß°ʤ›>‘T™ŗVP°ÅZį›GW*+ ō)kŽ÷ôôÔŪ]nĀa#Ā€'Æd ã,ž’öÎŊ…ĖāCCqČįķ{'øĻĘø‹0mãáá;0“ûß%ãUdT&O8ÖëĩĮâęOđ$¯-Øt((`ķÜl6FD Cøtš¤ŊBŌ Ķétxa*‡hcŽ'MLEąŋVū›ĸ )’ɤĨÚ V~ÁĐAŽH'ûgĘīp_˛õzmęT"‘°ęDî Ō4 ÔëõŒ ņ-/ DūwGĒ }ZÂN]_ôBž'æžPIF$ÃņxlÕģôáã´  o65 ëÕFZ>ŸĪĢVĢŲŗä¸/RwNG¯ŧōŠ Œ3'ÎPęĮ– Ÿ€ĨVĢ™ MŠß?×áp¸× {6>ļ9ˆĸOfÖ7­VË h°Ē$“IKũCú *ÁđÄ …Dž’ĖxO{ČKŖŅ°´› ŠoH˛ ˛„A›6 žŠÕ÷ķĒJ Šž‘ŸAÕ"Fz†ĸŸb„ÔBFúũūščt:öŗ´’@ąŖŖ?ŋ ”dßÁ˜Bl86đ{žÚšb)Z¸ā=‚An$™Y‹ÅėsŲ@!‡¤h=‰„dSü@úĩÁ÷DŊ¤ņ2$erĀ<đŠ|Ōđž­ Mŋ!!xŅ(ÆđÕ餿HS,@Š2å›e3¤á(´đ÷íSא.æŠ$MŒ™{/P´ņ*—ËVą:™LÔh4lūqTŠ/&đgĐĸNB†ŠnĩZęvģF( c…BÁz:RČ™ŖxŌžÉdÔív­@ĄtĶĻŅh˜bąėt:F>yŪķų\Ũn×îwŊ^ĢĶéØŊøÂ#úb8r* ÁÖ Æ-NĢZ­Ú\.—Ë:::Ú+(bŧ<ŧēēRŖŅ°”B&ÔGÖüēOAäąđÜąi˜ų@‰â/Ū>úXr: g{˙s™“YP˙yą) B\ÃI A xbøt+ä€4ˆtc"—dŊĶđŅ ˜Ėf3[}u*›# úãhņô°ķoÚš°0ãÛ" Š‡ßŠ(ß{qP9š KǞHē™”-$Eē9•Ā7Îå~h Â&ę{ŌW RB; 6bîßAŠâ@N¨„\ņ÷’,íĮs"eĘgC4†ÃĄyŋ|jƒ~­V3âE:BE96ÁÛˇoÛÆÄæL“ãÅba­j 3ø8)tAm#]J;Š/ļÛ­ŽŽŽŒ42^X {æÄR’zŊŪŪŲ˛¨:FCívÛŌx~|™GxU!“’,}zČ1q(ÂŧTƒKŌååĨUšŖų4žt­ĻúöKÛíÖTKŌŌ’ö BP˛°90ų]ßŪ…įŗ\.õāÁKwCž$Y‹“ĢĢ+û˙Åba픘;‰DbīĖhŪOæáp¨ĢĢ+ĢLJ€S8T(ė]‡P1ļTÉúĘ|6Ū‹ĢĢ+#cFc¯Č ËīÁ&īIģŨŪ;Ģ›5¯Õj™˛Iē}ąXXĩųl6SĢÕ˛g‘H$t||l÷ų„°Íįs›žΈ€Î+îvĖåRŠ´×û€ë{ܞpx0≁ú@ģ6BLæxĀXpŧ7L’'Ô_‰ģŨn­‡ÛfŗąjTūÜ{ĢčSÆĸíũFžéôzŊŪķŋA.}Ē …‘ ‹k@ĩãz}ŖjˆfuŌCžØ…kįįiUâ=tzõ‘FĻÚoã‡ú ‰†LŅ2Æo.x1ŖûžpK”)Ɵø.ŧ\|&—įŒŒ <™LĒVĢY gÎÉ |7ŸÁŗ m†zKĨrE–övRē(îŸ9‰b3Å@O€ŠÍ™­ž/%÷ãˆ3ãA:–š!Ëi¨Ü#ß˙ũ߯ˇŋũíĒÕjVĩ ņās)ná9p„]ĩZŨĢ2f’ö*ŒŲ°¨ĨåE\„¯ávģ5¯Qĩ߸}ŠQŌžŠ™JĨöúŲyŌIŠŅûžøŊnˇkM‡ņ/’ōĸu „†B†l6k›&j ÎĻŅaŗĮ+HA|?ãņØH÷Ä÷K7ž?Ÿž„{˙!iuŸąc Š0ęŸ?_Ö§ļ $x"}Aķ•?yäôôÔîŋ`€?“d×囪ēđũŪ#Ч ÅC˙|>ß;7“ÉčččHßō-ßb­EPÖPš!Bž2Ô+á9ŒĮãæÍ¤ų3M›ˇÛ­...tqqĄFŖaĪßWįSøs~~žWm?›ÍŦ$ įŅŅŅ^a Īĸ×ëŠßī[pÄõКyîûŲ%“×GØ]\\(‘H˜RÉ÷Af(ŪX­V:99ŅééŠ)ŒĖ7”>RÚ¤…Qč"_ž=ŊDéOYŠTŦZvģŨšŌÚnˇ­Ãę3sķyņ…J×ĘoĢÕ˛bĻl6ĢG)‹ŠŅhXšžb֋ÕjeŪL2 ¨œžBʗ1ĸ&÷‹R P {Ŋ^hÚĀ|ã  LģŨ6…ŽÔꛕiø~|Q…tsž,ę‰tMVđŌÁB Ølü™’ėsI •6z÷wŒôī˙ĸŦū,k€Īg3"ÍCTM`Tß`˙Œ÷˛ĶķΧ! ’ö* …‚mDž @ö¨ŧ$õHiBÔ|C¤Č|0R¯TÛBĸ(2? ¤%‹45>+ŋšnˇ[ĩÛm#ŊøÅđ*VĢUu:ķįĄ‘ÎĨâÖ̌ŒŊņ¸Ō”žô@Ę}:O„ũĪH2UT’ųyfžš“MrĮgųūkxS%YK:s ō1đķ‘k¤úõFÚīį„#X,j6›*‹ęvģjĩZFž$YJÚû/ ¨˜;œōAzÍ7=fœŧÂ-ÉŪoš7ĶŦ"ΜäĪæ“Ղāk÷Há…÷ęBŦ}{Zû0‡gÖÚĄđnāŖėt:f-xøđĄ‘t~ė*´EĸÅ7ŧg ō~Q<˛ü>Gāāpæ0Y Ö-ˆ$ë ¤Ô7Š&ũOBîiģŊn{s||Ŧ‹‹ k}syyŠjĩjÍ×;Ž}?Ī Në×ũ×C˜F( øW¯låTß„ô‹'ÆiŋÛétŒ€ ¤`ކt‘ĘŖŊ ‹§øôQiŠûũCũĮ¯¤t>ˆYcÃõŋÃqs’^.—æįã4Ž™ĒEî ī ´÷ú0TĨō>- @!bcķmF ¤lФŽ$Y46^šŖjá)dķa3"%I_9Ô;īwęvģæÉâžP*ø^”NHPŗŲ´Íˆą`<Ŋ ‰‡ @J 3ãņXĮĮĮV PcIÕÅã×ũ)fĄ@-zØüЊ„Ô“ēEMdîAēØü!¨NNИÍfj4ŠĸČæ.ŪFچ”Ëe]\\Xz2 i¯eŠš”H$ö_zÎáCeü|:>~“T2ûö?¤zŊž—eūQœƒúûčŅ#Ģ –dŠTÔĀ^¯g^SČ'j&A"ķƒ”ūÕՕ5/&­ICæÜvģĩ ÕŲwČd2öß긥Ę8đ,!ūĶéTĩZÍl ­V˂7žŸâ’JĨb…4øWyžTĀķĖ%ŲŗĮĸŸ1v6ŦqĖCcÔSÖFÖ>Ö[ x ĒØ&ĻĶŠ‚ÂûG7ā°`ĀÕÁ÷#e%Ũ@626ŧRŌĩB†‚‡ß!„æS>8ü=ž4I¤íŠF4¤›Â|P’,ÂÆ7ÆÉ étÚR¸Ū—EA›5æ{Ž‹E—Ÿ§j…”fŽ °Ā{Ĩ’ká^FŖŅŪŠūuMc°|J‚$ƒĒZú+zBéĶɨoÅbQŊ^ĪČ3ibī1ä2 3¨‡’Lu* ę÷ûFF$ ā˙!<Ŋ^ĪŊbąhãƒĘv¨(¨´ž¨ĒDEã2Ÿ}K”QšzŖlĄ*“ŽÛív:::˛ë‚ B& î¨\Ōuõ÷;wŦp›ũ1ynŧxųyڇ@Æņ™ņžye ĸÎÜã{˜'Ü7ļĒoŠĻĻm }SŠ”5u†¤úJ|2(îôŪc-ņ€ŧúb|†r|Ėš~ŋoī9D—)Æ4íŠúŒ T&“QŋßWŋßW.—S§ĶąņL&“珏° ĐÛP _˙ú×ĢßīkŊžnÍŗ†¨bAaM ĐāØ?æ1ĪúüüÜTMI{§æŒĮc-—KķË™åĩû sŒÁøÄzŊÖĪ˙üĪë™gžQ.—Ķë^÷:ũŌ/ũŌŪâšÛíô ŋđ Öüķmo{›žúÕ¯î}Nŋß×{ŪķkRúž÷ŧĮާú—ĨD’Eä66_6)ēFŖą×ˇ‹M•ô‹;)"Ô üo¨1 &eãcņCA"eED2B%˙ßëõėú$™‚P,Õl6mã"&Ũ4—•d$rLa)COhũ‰(740^­VÖt– Ũo NGõzŨHÛzŊÖíÛˇ•ËåŒD $øbŌŗs6T”ŽŽ‚ĀRáK ߎƒ û‚ėŅ|› ųāSß($06~üP‚ÚË0ĪFŖ‘ÅĘīōߒŒØŒĮcķšą9ķ™Ėˋ ķmÅãq›×¤ûļۛŖÖ˛ŲŦĸ(2EË"žŸÁÛhiB`ÃXĸŸÛ3ßnˇ:99ą–&÷īß×p8ÔŅŅ‘NNNö|Ą|-} \$ƒĩÄWg{/Į[$YĒ•Ū|'''F„!———vŨødy‡đėŅ—’5Ą\.ĢŨn› †5™LF/ŧđ‚­;ĖqŠ-hĩt||lEExfY(Â!0ņļ2đo IDAT¤Ā†ĩ)•JĒVĢVđ‘JĨ,ÅKĀ3ĩÛ]Ÿ Üívm|ņāŒ1~Qíu:`ŽûņfÎéččČ~Ū{Šą)āäėc,ŌĩÚNpMq›WځžņŅ~TŋņŋĄO}ęSzéĨ—ôą}L˙øĮõÉO~Ō~æcû˜>ņ‰OčSŸú”ūüĪ˙\ĮĮĮúøŊ´Ųģßũn}ųË_Ög?ûY}öŗŸÕ—ŋüeŊį=īų_oĄáũN,F-6$*Ô8_˛ãO¯đįw˛°AôH'J7)¯bøH7‘ŧVöâ‰_é,16tT@” ”:ß°YŌ^q &J×D%%÷ãO úįY@NhƒRâ•>ޤÂ\N —×Da Åžú—MoŖWœúũū^jÅŸ* čĒËx<Žnˇkę'­EPjPbÖëĩ d˜ãˇ Ņ(i’ŦÁ¯W ŧoĸX.—­¯•Ô¨P¤â(T@Iáyrn4‰BEuëh4ŌbąĐųųšĨđ ĢÕĒ5yF=Æ&€¯ĩVĢ)Š"›į¨Æ( (‡él6k~-Č6ãYĢՌ A˜)Îā]ŠĸČ6÷RŠdsÆ5 ØS C‘éMæ•ķž:{6›ŠÛíųâ{ŽŽėyC6™ >°A)džAōhŗX,özúScxĮ$™BĪÁÚa"U.É ršœÍ”ŨĮ ĖP3ąvPPƒĸm€b2‚ˆ­WU9{š÷ŽÂ8Ūē'ā%= aÄÆ@9}= ÄĻĶŠ...öĒõyG°á¤Ķi]^^Zī‘ī%p˜E ¯AŧķīTģŨÖoūæoڟũȏüˆōųŧ>ķ™ĪhˇÛéôôT/žøĸ>øÁJēNĨ´Ûm}ôŖÕûß˙~ŊôŌKzÃŪ /}éKúÎīüNIŌ—žô%Ŋõ­oÕßūíßęšįžûŊŠ@đā<Ū\e…™…OĪáÃĮFz%„‡Å.ūlč+Ō¸^E”¤7œĖõū‡sŊķ:ŅËÆ†ÃĄ]Ę%‹&†nŌ ū c(u¨Yøs$íŊ@đ1Ą‚éĶ6ƒâ pRMlė¤ƒIZb y5‰B ¯4‘æ,—ËÖzÅWLŗŠĐj% Ÿ'ˆ°iđė$™oŒĒN_Ä1ílZ6Fo~—n%šF“Ō/ æąBQE]ķäcĩZŠVĢAĮÛÅ5úÆČô`ôļRŸ\?ĪÄčũœ¤ą%Y7$‚įËÜB…âŲōųŒm&“Ņh4˛@ƒyÜl6-­Kû‚ Édĸ[ˇnYښųEĀÕnˇ5™LŒ¤ \ņ9(„XPāčáĮœ.•J:;;ŗįIĄ5ė øIkˆŅķo)ũTĢՒ$ËD@x/..ėũ¨ÕjFĸ)ŦJ&“Öž†€†ö9L•JE›ÍÆĒŨŸzę)Ë|ŧüōË{>@Ö¯BŧŖ(˛ĩ‘9OEøī˙ūī‡"FP_ƒøîīūnũÁüūūī˙^’ô×ũ×úã?ūcũĐũ$éë_˙ēÎĪĪõŽwŧÃ~'“Éč{žį{ô'ō'’¤/~ņ‹ĒT*Fū$é-oy‹*•ŠũĖ?FcoCŖŨB*•˛žX,Āl lĘDāl:úh‘Ē MÃ&ÆĻĮßáŅō]îI5JŌb~sR Å ŌMĨ%›<•ÅŪÃÅÆFS.—-ŠFiōFzûččČ~˙qž¤>&“‰Č‹Ē•f‹§‹–"ūô 6^†$k2ĖĪTŌSWwŠĮâĘåæކJ5RšÎēúĪN¯į?jĢtznĘS<W<&m6SõįYŨģXØ)xȖËĨĩ ĄB”>€(TCBØ鑿\gÃá …‚-đÕj՚BŖØåķy#{¨ žĸاW1äŖčŅĢk‚’Ræ3 MžĘå%•JŲ†ƒˇkįø5 ?$™úãĪũeĶÆ×åÛŋ@`ŧ§…’Œi# }ĮãąĒÕĒ2™ŒxĮbųâĒžņ“Ąē@DˇÛ­[æbü¨žH:>-IæŠDö¤‹jMN‘ā=đŪWßKĪ ņôÕ×ŧ¤ĄiƒO”û—ö‹+ 6fL4ą ­ÛíÚ ņxÜúØá‹ƒđz‚Î3āŋQņĩr<$Ģj÷^¸d2iņx\õzŨė$ų|~ôŖ6úāˆ@‚Ö9¤UsšœgTÉBĄ°×Ŗ“€Đ÷„ä>HEķŪņžāđŽōiDŖ÷ķķs̈&ã€ŌX(”ËåtqqĄ~ŋ¯ívkE^4x† 3GyŪĮĮĮV L ‰ĒˆU&ā°ākŋ÷{ŋ§ßūíßÖīūîīę…^ЗŋüeŊøâ‹:==Õ{ßû^û9zāąęī˙ПņøČG>ĸ_üÅ_|՟ķķxN ‚TtBFPī$YÄÆ{u|TŊX,Ŧŋ$ÛxPmbą˜Ūû_Ėõ“?0zÕu]ãēbôãīúOˇüģ?¨čŖ˙įĩižļ܎Š“J]ŸWÛl6-Ũ„rI?2ÔLˆéLî•…Œ4›“$#ļ"MZ‹M5›ÍÚųĒ´R¨đųTBđhÁAŠ?Øt:ĩsqų>éÆ#…ōƒZJBüPyEÚå…{Bu%]íۋPAÍÉ$Œ~AZ– €ŅˆgœĘB?Eˆ)jÕš(R\/9sÎ>°ÁR@AU) 'ĪÜ÷$(ÉįķzꊧÔl6õÅ/~Qũ~ßŧbø7›Ĩ>)āX?ŪTĻZ­ĻG‰DÁĨŨ $…3žP¯Á``Š`ž+Ē$”*$â*M! 6”A‡Á``ŠDTÆŅhd'nđg<Đ~‡į›Ëåt~~n)l*ĖQXyFårŲNõđę='ēÄb1 ~ņfō}ĒxĨtĶĸĨT*YjŊ^¯Û-a!¨â:ŠÅĸy!žņĶ?ũĶú؟ũYũčū¨$éo|Ŗ^~ųe}ä#Ņ{ßû^KēVųHiH×ኞ0Ō8ôq\]]ŊJ9?÷s?§Ÿüɟ´˙‡ēsįŽ” _$đ*AbˆZ}ĶdLāl 'P”:ˆæ˙úĮũ‡ŋN(‹›j6MÅõÂéB×@üßęzé"§ÉtĸBž ÍöĪI'tŔÉ\Ģ’löéŠø36ül¤‰Yˆ9EÂ7“&Ũ‰_ÕÔŸi`Ôßîeōô-ž!)LÔŋI2…ę€ß ĩ‰^…ËåRÃá‘vģįĩ\ÆĩZ´\~Eåō=KIųBŖÔy2ŠĨW}É !]ÆÁWã˙ƒxųķ…ũ (R´Ô@éķ'Āđ¤ļ1ōSUN:snéŨčOWĀCȸžå-oŅŪđ=zôH÷īßßkc‚Ŋ ßīĢÕj™"ËûDú W \á1å;QÖI—“Že| …‚Ęå˛Í”Gæ„ΟWíƒH3Ēä—ŗ€}ÕzE{ũ'}ģ"ūíƒ@Iö;ķųÜÎÚ%ĀCŊƒœEQdÄĐ[ ‰„..., ėt:VÅËq€<‚>‹Â˙ûĸŪUŦö(Š^ĩžCZ| CŊæiIzæ™gt||ŦĪūķzķ›ß,ézQûÃ?üC}ôŖ•$Ŋõ­oUEúŗ?û3}Įw|‡$éO˙ôOE‘žëģžëŸü^ßôՃb Zär9Sŋ’ɤŠlh˜Ũ!Š(ĨRÉŧ;DÁlÚTMz• cuw›ÖY˙Zņ::ĘūŖ?íz“›L¯IčWĪ3úĶŋ_(—㈭Œ]Ëõ†˛1…‚Í”īë‡ęņC™đ–}“WžcąX˜™Ī O‹ŅR‚Íŋ"i¨BĄ°×¤xģŨš:…AŸM"‹™ĸĮQpS č’ė7T 6øN ˆĸ”&“Ŗ(ú>-—ßōĒįyŲQŖņ¨Ųü_”ÉČRߤF!m´ž‘dį—B`y–TÂâ‘J&“j4:;;S­VÛKņ’ōb3ôž;Šh|ē–Ÿ! Ɠ%Ũ(7¤ĀI%nˇ[ķuąąōė PU?˙ųĪë _ø‚ĩ™ĄbËFīIjÖ|>ˇÔĻ?˛"ÃÉɉ’ɤ °čÁĮ<­VĢæŦT*úžīû>ív;ũŅũ‘.//- +‹ē˙ūžj™Ífu÷î]=zôh¯)9^TŸ€`S MÚ–ė …(Ŋ^O…BAĨRIÍfĶ ˇŧ*™H$ŒāRāÃ÷ø é€ÃE €¯Aüđ˙°>ôĄéîŨģzá…ôWõWúÄ'>Ą˙ņ—tĘyņÅõáXĪ>ûŦž}öY}øÃV>Ÿ×ģßũnIŌķĪ?¯üÁÔOüÄOč͟ū´$é}ī{ŸŪųÎwūŗ*€=PĻX¤ŧ?åķiŊY؟ €‚…’ ÉŌ¤-›0$Šh–ĸČã5iÚIâtŽŒųų¤ŧ´¯P žI˛Ú÷ÃŖq1¤–Me¯ž4RĨëõÚ*˙|sÜ(ŠlƒÆG&ÉT‘d2iʑtŗÉsŧ Ŧo~ÍŊĄ$ąaøĮgˆ' /"JäõwĨ4˙¸>ü€¤¸ …˙KGG˙NĨŌWĪ˙ŅõŧÖëÖÕÕ§ÁāŋVģũ?Ē^˙KU*ķ?Ō'M’)‚ŪJž-Š ›ūGfŗi͈!R`|]Œj.Τßī›jœN§vZsĨT*ŠĶé¨RŠė5:†d ĀĐĶ¸oÆr„˛J•čh4RĩZÕååĨĨ°!B¨œ´$a>Öëuķįá“õ„b:ęÖ­[FP¸žZ­Ļršl>0HæååĨ)J’Ŧx€w˛Ņhh0ІŦø<ĖĢL&c)Îųüú¸2Ū=ük¤Ŧ!Fb‚=ZĄÜq|Ąīá—ËåLm#å yæhB”DHÔ:ŋyŗõ„ņ‡ŠĸČŪå‡jŊ^ųƒlō^LĄxĢH&°ĀëĮ; ņît:ļŽû÷ãņ؂%ėĖmRŸYņÁQš\ŪkAE`pØUA|ō“ŸÔģŪõ.}āĐķĪ?¯ŸúПŌûß˙~ũō/˙˛ũĖĪüĖĪčÅ_Ô>đ}ûˇģ>|¨Ī}îsÖgM’~įw~Go|ãõŽwŧCīxĮ;ôĻ7ŊIŸųĖgūÅ×Ã&€zBÚÂ{ŲØtųs*uũĪ VĄĘI7䂆)e€"IéŅŌâņ~l´øžüõŧųÍoÖ3Īŧˆx§:Ž5Ž–d›/c˟qÖ/^=F}æĢT*éęęĘČķbģŨÚQmlę:!ƒ™Ÿ¤ŗyvž×`"‘PģŨļkßívFZ!ƒ¤@}*œĸ Ū/‚ĄĢĢ+ ^Pē!ŗŨn׈ķĀ÷ô#ĨJ…2}ąO`āŗPÕ9‚yĮ­™öbą°Â ßĻ…95TĢՌČ3ĻŦ+¨Æ*á1åtŸjĮ“‰¯0“ÉØøĄ"‹Eu:;Ĩƒuƒ  X,Z0C1 )x„ÉdbE@4gŪųĖÄ`0ĐéééĩĮų}’ŧ‹ø%)[¯¯¯û“`+žÁ` OúĶĄā#(€O 6-_xH$,=…Ąžé+RūAíb3¤¤ĩĮ+‚ĩZ͚ąŌ2ˆ–’lĶ#"ö‹+ŋƒŠDäî7qI¯ŠŦQ”Haķ{{ŲĀh4ŌŊ{÷ÔétLÕ`gcā^šÖÛˇo[ę Ëû+Q ĢÕĒĨĮQ%Y ›Š#_!ŒsÂ>Ճŋ­x|Ąįž{¯ …ŋ1c9*ĒũŲČS)é™g~VšÜ˙­ŗŗIēNšßģwO/Ŋô’$ퟅŌu||Ŧjĩ*ézĶë÷û{Řå!W´Ā JvŗŲXЀ*KËZš@Qdy~ž@æ!R۟7™LöTbÆ% U#ĖHrŨžĀU‰‚æãQŠT,E×l6Ís×nˇíwŽŽĖæĀī5 +"uˆĩÅ…›ņđd›ėJ:ö\.§Ûˇo[Å8)ījĩjĩŖŅȚ7K˛ŸƒáũƒS°DĘ’ĀŒĀ‚1ŠVĢÖ8Z’ Î÷xå‘#ۘCH$÷E‘†ÃĄŊ .ž=mpčûČÚF›yü˛ü>ŒįË㞠$™e†ûķkts:/”ĸBžąãzéÉųŖ%ÁJĩZĩˆą8l`Āƒv,Žž­˙°ãÕĸ(AŌž3ž;6fR\?6p_%ˆÆīæķyĨSkûģÕjiéŪããcKĩ°Ąņû(x‚¸~úōsŌõˆęSū?Š6|=^Ąáß(uëõÍi*Tj“:Ĩr‘J_ÔTCˆŪĨZ­f$rîe‹ë›ĪĨG~UŌVO=õßkģŊņ7ņœÛÕje^,_вŨNu|ü úÚ×ūwõû˙­ß˛†ÕāšJ&“ĻdŌJՄāāōōԊ/æķšúũžUhRĄ<4 ŒĀ÷z=Ģŧ†üĐoįúx€@ĩ(éÅívĢXšVxBņgúķs*īëõēŌé´ƒ)>lĘJ&¯û@žá xĸ}EP>HĄ¨˛BPE@&Ũ¤rĨëĒ[?Ÿņ”qmTJsD#ŸˇŨnM d.2očīČ5=xđ@ÕjUÕjՂœ?îuLNĒĄ=įPŖ„{ĪpŠTŌ /ŧ l6ĢŋüËŋTˇÛĩt1Ŋú˜_WWWÖķÎō¤Ķi]]]™jī×Čī4s™“F($"XX.—{$BÕī÷í}›L&jˇÛHĐî[Äp:s ÁEkŌŧĖgßn‡÷“–MŖŅȚ=㧍ÅbFöÜA øWJ‹DPēņí‘rōՐ¤^HÉy2bA$ŨÄBF:‘…žt j,SgšŌĮūcN¯t×ö=øĘPâņ¸õãcƒĀŖĩZ­lCáīØĖfŗ™ĨšØ0Ų@đATIŅ`‡0r힏_ĄP0B•ÍfMáCá!EeĸtŊŅ“ÚÅđųdž?ŌĶņxÜ*~Ųŧ;_ŌrųœNO? tēgãQ.—mC$uŒŌ‹é_’ųšęõGĒÕ~OīS>lßÉÆ ņ¤Dēi2Nš}2™X:O%Mq)6‚@2´ë€\ã)],F>!¤ņŠÜ„7 Õj5SQ!ĸŒ5›9D€īĨژųĪuŅĻ‚‹ĪU§ŅhđŪ?o/Čårö÷TÆr: *$‹ųDÕZ’ ūPƒ_””-e(W¤ĻŽŽĖwÉæ>!äRŧš´š9>>ļš‰å VĢáeüršœzŊžž{îš˙‡Ŋw–ũǝüÖé×é÷ģû<îŊŌŊ ,ƒx Hl0 ¯˜)¨)ã3”+qņ°I\ņŠL;ņ€gl“*ģœq2Ø$ĀØ“ÄŒmdM2Ø˛d$’ +!ĄûĐš§ßīîsú™?ZŸoû♠\§rzWŠ$Ũ{N÷īˇûˇ÷ÚëģÖÚ:wÅĸJĨ’¨“§ˆƒ÷āāĀ.žĶt:50Ë‚qJ)ēÛíÚô§ØĐΌÆ8ũœ0ĮxŌh4Öbnfŗ™EđđîĸILĨRfœS æHĀFŖĄVĢe ŠÃgĉ6čj[­–bÄÍ;ƒš¯•Ũ´“Ų6pĶŽšņÁ‚…†čj˛$[\˜€0øR%ģZ@Ĩ;Ę,h”Ũ(˙Ģ@v™$U:ũ÷÷í¨;NXZ?,ž$û]X@%&€,@ ×.ā°ÁBĮŗ8r˟ÃÁBą0-ãV–'"Ā&H+ŨR¯×SŊ^ˇŖ¨|– q/”aû(7JĢ“ X x>œ3™ŧ^ũū;´ŗķa%“į X°ĀŅ˙[[[ĻĄķß]¯×M_¸Œ2ų—šĪãĒVĀĘX’LgÆâÃីs'ŒgĮ^턆ÕdœZ?u‡ü€ķ”īČÎ~Ã!iíŒäŲlĻBĄ`aČhž¤Ĩ–ŋkˇÛF`)eÂrbÎNŪLE€PĘŲ8Eãņ¸NŸ>m,:& ܟdĸuãڍ†9ķa§’É¤ąŸŒ}œÚl”$öœÜü< ,ĨUĀ,LV,3ī§ˆ4 Ûø1æzŊžÎœ9ŖË—/ëōåËzōÉ'õÔSOķ ƒ •Ëå´ģģkēcJķÜ ˛>ķ㎒8ņ1č30ģÛÛÛf2áüsŪQIĻ)fÃÂø>>>ÖéͧíT6ŽFÃ$l˛€ÖL&ŗļ‰ …–ąH”Â9)ˆwÉ›=ŽņÎ;īÔûß˙~ĶĢnāĻI¸iādoÄđ1-,üyũ å Ikz4´qü=e |.€‡ÅĖkõFŖ‘•pŧųA6  ;gĪ~Hq’sķ•N§×tf¸1apōųŧõĶ`0P¯×ŗŨ>FX"#&úQ9ĸmú4‘H¨Z­ˆˆ ¸^Ɗ° ŨnWķyXWŽüc%(“ųCcfđ€VYØéŸH$ĸBĄ`Á¸ŲlOÉä—ÔlžÎ€ FŽd2Šp8Ŧt:mz0¨ŲlÚÂČÂãģęųbœŊķš’lq‡ŨōŽhú‹kģzLÃS2xψ¤!_w9Ú8JŊ0ž\%E€,€•÷–Ë;Ÿ3™ŒúũžZ­–ēŨŽi2ÉŦH˛ëĨėÅ;éŨÃŖNŌˇûŠæĖgųč Ī#”–‹ ‡8œ~…Ųë÷Rãņ)e2?¯ŖŖ‘•VYė<ƒ Ā€­@“†‘ōÛŌ ņõz/×|YÛpũˆ˙+,x†,\<ĖlĐQ7Ŋa IDAT:‘7×h4ÖtV|ėˆ´°C„i|¨9› ĪCŠŽP(ØĪÁŖ)ĔD 3÷Ãø Ŧ^Ö;•JŲI8Œāŧ‰6™ ßáp¨BĄ`%k@īĻĪĐ˙1Ūx—`—\ ƒûDöHãŨ%–ÅģæŊļ‚$cãũfęđđP­VKĶéÔØ2ÜÂ8€ųlØ[î‡üBŋą$Z‰÷“Z>Ÿ7F ũĘfSNx7š—­­-ˇdn _ų„ŗSŌÆĖæŽŌ8ĀģŨnk>_žEM%ķ–—š YD#čķ’lÃAF#]¸pAō'bŌŸ°i'ˇmāĻ]sãāųŲlfš&LŽcŅg!įԋ~ŋo“0ĀF Ļ Æ°FöW§ĶQĩZ5­eCŽpbeÁįŗ€ž‹ÅŒ7ėŽJt‚¸i …‚1q€_˛ú8ŠÂģF/ũ~ÍÁĘĩÍ ­ÜÁ”ƒ=€ōúB$XúIŌ &éųÅn[õú{”Jũ+Åãß2æË]SfE#GI‘īņā€ŋ|Ž_ĶbQŋŋˇÆüĸ՜Īįv2 Ĩēbąh1”›š&6ĉPŠãė^ 8kaÛØ4Đ7°¯‹ÅÂÆßÕņ69 á¤J„°ÍívÛXhØ5ú€`bŽ™qOŸÅãqíîîęôéĶ’–:HJü3Îq…&"ā čĈ˛X,túôi•J%eŗYsÚ …BÁúvŒņč3!Ұa^‚š‚ †}Į\°ŊŊ­\.§L&Ŗd2i'‡ĀŽÂžÃčŖG}öŲg×bj8gŦ†Įb1‹Å5MâááĄvww P"™šhkĩZŠÅbf>!'QZ˛‘š\ÎĖSü^ĢÕ2ÖĶGëIPyûíˇëíoģbą˜ĒÕĒ…’ķpG$íĢ"lŒK˜ŸĐ7ûŧR€ļ$Ž>ߐ8ŠjĩĒķįĪЉfĶNvÛĀM쿯âN Ž/QŖŦDž;VĘLLėĖ1°ĐcÁė@DL:6ņ3 ɗ†ˆŸĀ4¸dōDÁfĐÔ˜Ø-0` `p|DÉÎΎą\#åfŋ0ÃôP~&x¸ßī[™@Ësũ\ €˛×ë)‰˜6‰Ī„ú¨ÎĨIänÍįY Ÿ´rŽ7 Ā(QJÂ<`ívģ&šÃzdŗW$IŗŲ’d‹ $ē?ĀL Ā ûãËļ…BÁ2ã|Ċ$ûYīŪäY$ˆđ€Ą#^# l ã›,8â{Æ`„ž€MÂ4M?æû@ “…~ËgYŌĮü<šYâX,Ļvģmú@0™LÔjĩlSķ}C_c4đĻŪ?\ģ”šé'€L ĪÉË:€iõˆ'á^n1€ī˙h4RŗŲ´ą×l6í=hˇÛ”<ÛžģģkΉea$ÍfĶdč4a;aYŲDx76āS}ČõFŖQčūûīˇG˜c/Äe2ë;[Cū%cÃė.ņ7\'ą[Ė30¤TU˜ũ‘„›āMÛ¨@7íšĮqQ’dg€<äpĄ v”Ôööļ °™x)ąÆb1ÛéŊÁ1Y°oJ>V‰Ŧ:€)@0 čĀ``‚„ yca$ Îģö`)Y|`ųX$ʋ>͌rl€ƒkƒ•äžX8YÄ0ŋx6R/ĮO™ˇĶy—RŠû^–X+Ŗá¤$ŽĪâģ›ÍĻvwwÕív•Íf­O÷“I]Á`KũūåķÁĩān:œá8\9›˜Ī“´ÆîģÁđ‘dzƒ¨\.Û3Aŗ …ÃJÂĘI˛|7žq Ā•Vųplf0Čp˙ívÛÃa÷$™„A’ũŽē”%(46&°sôˇ$LÍfSĨRi-}ggĮžÛūūžnšå- ũÁüzŊžXž˙đđPÅbŅ´´°Í>3‹YāŗgÉļœL&Ē×ë&į Ül6Mg)ÉL9ä.ōįl:a!U.—Ąõ—ųÍkŽ“‡‡‡v¤ķŒ-6;Œ3ä#ČgJĢØâlFŖ‘Ž\Yn˛˜_0yPFˇË5ÁF"Ų´“Ũ6 āĻ]scqĸüŸa„ ”Æ‚đc!ØĀ$‰5]Ā6B’1|€šRŠd ,ĸ_dė„aČ7 ú`$ų~@öŠ?é„]9ą”xacōųŧÂá°:ŽNŸ>mą&Lô^øMŸĀ>xĀ€xæËģ^—(É´ÃļŲ߯ããīS2ųIģ/~>N+[T šE4x°@€?žÕŠIk),ؘ€äyĀRU*Ķž´ ›æŨá>ŗ‘Eģrõ‡ĻM’K†`‡ũøŖTIt ú+˛‰NŠ×ë>Ų€āž…‘„ŽĮãfXdĀ”čT*eyŽŒun´zhĪ8Jø6ŧCÜ+ã‚M œÍ ,F!!Q'’Œ……ƒõ%†īř ãã‡ôÂ/˜ØDņâeŦ°Ŗŧ é3(yGŖQ;īŲŅĐE Íxĸo¸XXŒ?”†ųNúz:Zõ-3ÕJÉä“VĢÕ5÷/ŸI?Ėįs{WŲ8z#1/ŲlÖXXŽųŒfŗŠ@`ãHĮ … PoÚÉm¸i×Ü| D’…ÃNą{w.æ vJ•ŌjąöaŽLŽ”~Ŋ‹–Ėƒ,JĪ€%ie*áĀyo6ņĨOŸÜøƒ•dŅe1ôeŸ`py =BöRŠdYqh<ŗŲL™LÆL3”¯üŋߡƒä™ôš O¸X<Ÿ+¨YÆŲŧF@_ÅâÃ֗ŲlÖL”õ’ĖųŒ;vˇĨwā.ĩc M§ĢskyŪDøö÷÷×\ŗ]>—2ģwšG"eŗYåķy;——ūX,ĒVĢķB,Čl63@ÆĸL¤%aØWÆŒ Ļ˜ËRŠ´Æ.r" …Ķlč+ú Ė6 ‘XÆ2›Üŗ8Ŧ%Ŗ ĖØDĶztt¤vģmf IVūđĖš]¸ķą:>JÆkLyßĸҍQ€éYšˇFŖĄ‹/šg¸ņĻo9Ĩt%‘HXŠ—r)Ė-Ŧ,˜R*ķß\ųęÁÉŪ‰ ›–Ífmؕ–›EÎé'Î=ÆI<TŠTė;)9#@g3Íi2­VKÍfĶæō}Ųž@NƒaƒäĪFGęĀ5"OŲ´“Ũ6goÚwŨüY°$°oė^™đŧæÉĮŗŒĮão+)I2MŒg>ް†ˆîaę¤åQcLÆ,"ålâķĐūqžq`áĀõÚ+~Ÿ‰–ėĖ™3ĻkŒFŖj6›ĒÕjVŽĸ4N^\0TŊ^_Ķ)J˛ieâdÚDØ:ØW˛ĶØåŖáĸ<Žî pL&õĖ3ŸP ĐŌūūûÖJX°{>n‡˛$îf_ŌFÚÛÛS§Ķ1ā pxęŠ˙MŅč_éēë~ÕĘÎoVĢÕÖÜ˞åãķĢÕĒé¤`RaÍĻĶåąo0Ą„ssžTÍņqœcëãqĨRIõzŨN\ ¤&ÉĀ7, Ž×ëŠ\.¯…Ķ„0SÖį^Ņ‚6 î>†æāā@ûûûæš…B–×ČõÍf3c×Éæã}ëõzJ§Ķļ!ķ ŋ×îÕj5+ŖŲ›†ļō0rIk Ā+šVĢYÔĀ †›f ā´ĩĩe Ņks)ÍûX(€ã…y# åOĘã‹ÅÂĸX`ūaŦŲdĮc;{ļ÷M'˛\ÄôĨ?‡g ÉÆ#×ĮũƒA“LPŊ@›ËũmmmŠZ­Ž…rŗōĮ1æķy;åĮáĶ0‹Ė€QÆčÖ֖~í×~msđ n āĻ]sCÃGÉ͗d`:X ˜}&™g°(ĪQĒõL>ĨZ&9Dõ°C€3„Đ|““&z9)Ø(>GZÆx<ž6Ás_,Zįâ¤D¯CIŦĶ騂€†0‹­…ēúP^\.o,āga_Yŧ`|9Íg¯ū†Ã…FŖÛT*ũsģ˙œ`dŅaQōö‹€r$îoŸg7› nŲ[*•,&F†įÃCų-‹™†Œ˛Ļ?"lGI6öЁRŪ"šcŦ4Ĩ7´fŖŅČØ2î'2ßŨnˇÍ͉Ā3T˜(Á\q5ąXLårŲÜŠ”—ív[ŠTJårŲ@ šBÆĪC’-rúüø…Bö÷@ l?'ÉŪĀ Ķ ŦeS6bąXL‰Dœ?†6īâ9 S„%dŧ6›Mííí™ļæƒ%zK˜zIų7L)™ä%ú@čŲlĻN§ŗå€nĩZkŽr€”×cúTŪG̝đ܈ÂŦÃŗâ uô‡^ļĀgОáķĀķĻ›nŌūūžîģīž59›N?'øPõM;šm36íš“# Ēßáŗ˜cBđá¨L¤Ė‹ÅÚyģ~qĸl#Âĸ …,’ƒ˛ŗĪ„c’¤ėƒ†îI’-öžŦŠV–ā(ãwO|÷āđîYL&qĀ l%ļÉdĸl6Ģnˇk‹l6›]3+ĀJą0#Į=Ņ÷0,ÉäßÖbQ<ūU’čûX”Đ\QĻ$tXŌZ˙ÆãqZ¤Ī"‹k:ŨS:Ŋ,RRpŅ(ĪüųNØÚnˇĢŊŊŊ5'įd21ωį!ÉĀã Ėã&ã‘/ËúĶ–q[‰DSų|HR_ŠÔ–ĸŅ€ŽŽ*cšĪ‡æ†Ãáķ ä‘õŖ´ŠKŊhWĄĐTĄĐčyFpK[[3Į=eŗuģ5•J%ĮËķŒww3ÚÚēü|ØķŠ=FŖŠÅFŠF žS4:W6›Ķx|ŦHdš xž¨zŪ<ą{j4ŠĮ3 Ž´ĩĩ|îÅĸ™D`i„Š¨Ų h0˜Ú 5ÉdŌ€2AŲ€A6=Œc€/%K60tų|Ū€Đd2Ņūūžeåąk4ŠÎ¸ôÂ8NŸ{î9c]ŅũT(ė”q"s7ņŽ!/aî īqooo­2pttdĖėãrŖ5´{EîÁfÔ™"‘ˆúũžNŸ>­ããcuģ]s9Ŗ”dī'ôĶéTO>ų¤.]ēd˛=ŗÎûéŗ7íäļ Ü´kn”ÉՒVē:4*^›…ĀŨį°1QK2…ž FėččČÎ3õâhô€IVÖâÜMâX´|n`+—ËIZ1ˆÜå0XFvøŠTĘtWãņX§N2ŗ ‚õd2Š+WŽƒ>ĘRX„šÍæšvŌ å7Ęę’ÖĘã0Ë,:8—ŒCęųī˙–}o$ŅsĪ=g,? Ęįņwūŗ‹Åĸ1d+&eOķyLĮĮO‰pŒÎ VĻÎŗ•čāŧËŌo4$™ūoww×@š$+™ “Pžæū`¸,ėĄĐ2‡īĩ¯ũ’ūŅ?zâ˙é×č˙“íĄ‡^§/~ņ?ąÜĘZŽë”™šˆQ‚f,ŒF#uģI0Ŗ€Jß0ĘĀŲlĻ7ŧá+z⁗*X™]bĢÕ2ķ“˙ū$ރkƒ—dŋGéØŋ FCĨRÉ\ō4ĸéô-ÕjUgΜąÜÅũ~-4Ļ~ooĪ´z|¯7}ņœ¤čQgŗ™Č3¸Ķ騿 㖗|´Z-eŗYĒP(X|{{ۘFŪ}ØHú‡˛ķ|>ˇ$­i„‘’´ŗŗŖÁ` RФN§c`Z’`¯ũƒ Ũ´“Û6pĶŽš…BĄĩbœ‰¸\™ŧY™ÄÉK&“6Ņyg €„cŅŗLpívÛ>SԚžƒ‰wĖąhpÄŦāæ ]™’˛ŲŦnŧņFŨpà zík_Ģ^¯§ŲlĻķįĪëʕ+OđęėŋBĄ`āN’-X”U}É7Ú– pFyŠr+įú‡CšĪfa…Bã5@&imņ@ÃŧąĐ°€øH¯Ŗ˙ûũ;”L~Cņø–|¯‹‚1‘dĀ$ cÉwÁ^øRƒAíėėØQ`ÅbqmP6,bÄIĨRfd`ėĸ—C𓠐BGē,5öôĸũ…xā …VÆÆī+Y|8{}v'ú:Įãc}ØD —õåwrë`ÃaCĄŠÅĸ= ž+4|Ąâņ¸å9bđZ,ē|ų˛vvvĖ´ÁĻ Ÿ¨ßgŒs~‡ņšŊŊ­ŊŊ=+ķîļÛm]wŨuVæfSœJĨŦ‹Œq$/Ō2ŽæđđĐX;ž:LJĶ\N¸‚‡9ˆĪÍfÚŲŲYËKÜ´“Û6pĶūFZ&“1Ģ$‹ đŒŒ?14Įh% ;)@ÃĸŠ>ŒĪĖ ÛÍRūđæ ĘoˆŋY¨Y q ÂæPžbĄ"ϐŠļ ‹)ëēëŽĶŨwß­›ožYŌR|˙ŠWŧÂ@„´UģģģjĩZļŧ[™Ÿ•äØ'Ę߀“ņxl@ Éīã–öá΀čfŗŠt:­ííz=X#sĖGŦH2=\4UŊ^ˇgMôĪØ—Ģ—ķąÚí—)›ũ„šŖawpI{}#ŒŲ|>WĨRąŌjģŨV>Ÿ_ æžršœą ž}âúØ$ø(ų|nG˛Ąáb<ų`qō6$’LdĪ|ĨRI…BAĩZÍbSиQ†|âŦF+ Û ˜ãšŅˇÚF&f­VŗŌžĖŌ*ø`ËŪl6Í@„[™SMnŋũÕdÕמöƒV&FÁķ†}Ŧ×ë;KL?bÃÂæëä]†Å¤¯čī`0h§iøĖB>CęA%zÜž8’ûũžöööŒÎd2đ§0_p-ĮĮĮJ§ĶĒ×ëĻ_Ļ)ÅōܸĪ@  JĨbã ËØbŽ9<<´yMs"‘PŊ^_“žđīT*e§…B!s•ƒA]ŧxŅŽoD׌„S\‘`fŲ´“Ũ6AЛv͍‰- ŦLģe XAJR&)"†ÃĄ-`>­ß øų|X+JL°&”âXØY|¸â7`¨f,Ē”˛ųBŖšN¯…šN§ęt:ČëãÔFŖąvŌ å.˜ôx^ĮuøcéˆŲ@7̉áh^,æ’ļė÷q˙˛@ĶøLĘaūH<îëØÕëuu:/Õl–R6{Ÿ$™Q1=gģ˛(ÂčM§Såķy-ų|^•JÅ 5€)Ā%n]p4[€vĘø°ŧ„lS‚–d@ ŗÍĘ!žĨų|ĻzŊž&Ú/‹*•JĻŋ‹D"Č  ¸är9cŧ{ŊžiŊ˛ŲŦąq”Ŋ‹™q?Ÿ/O8aĶĢHy—1ÁšĶW›‹øünˇĢvģm› žĢŨn?+ēõÖ/ę¯ūę´XŦĀ,ī @tN4Ą,ŽŽ3‘HŦšËqĀōNú’9‡‘ ­&€iĖ&ī4Lã‚wœŌ1€‡žLĨR6n*•ŠäŧĪčō0’øYØ´ ĮôĀ–qĀ|h¤DL_Öj5ŋ°h3„˛ûëãs`,ž0Čív{-蛹‚Pëe@û–mJ7íäļ ¸i×ÜØaÃĐPžb*­Bž™,Ŋ=•JY9—Öŗ6°2Lž4 =ėI<×h42Wą?Ká¸g7>,—‰Ō;•9ĄÂ*p4ÃæPzĪį:w…žđ…/phˇÛÆVÖëu FsBcäķYx(ûbXđåX& 3ÄŲívŸ/Ž4Ÿ§M—Ôív­lîA Īv°Âķ‡šÅ üä“OŅčSJ§ŋŠŲ,iė+ŒW6›ĩE”2ļg1%ŠT*™đŨ˙Îįs+™ŽF# ƒĩÜ9ĖŪIĻ‹>}ÂbęÍDč˛ŧûFˆ˛3ĮĀy‰ᾔA‘:x7ŗ$;: ícw( ,ÍÁ``e×ņxŦFŖaĨtÆ īī9…NįÛX7NžĀ˜ƒÎm4é%/ųŧÆã¨ÎŸ˙aM&3ÜfŽĩˇˇ§~ŋ¯Á``īU:ļqAȴ׎fŗYŗ^ß&É~€Éxæũ´ąų!čŨ;â‘9är9+O3V|Ušh:]†‡ÂF69cŸSFĸҍ­īkĩšs ŒáRФP(¤JĨĸ^¯§ŊŊ=ģĪ`0h&3ĘØ°v”uũõ×k8ęōåË Îŧį7Ô>žŠw2ĢRŠ@fÎ vōČĻėļa7íš§0qÁüÁ(azüØõˇZ-ÛŊSÎÁņ‡Ļ } 2`MԚ+X’1€8JXL”S/šg‡Á TãËĢ8ü$ŲdËõær93†|å+_ŅSO=ĨĪūķ:88ĐŅŅ‘-lũ~_/^TˇÛ]+™Qîõ ¤¤5F‚īÍfvŧ`æ‘˛'ĮPáPrŨ‘ȡ4™ėkk+fĀņjfpÁâHĖ 8 eˇÛĩrų’*¨Ûũ!;÷§ ‡WGjŅ_ŪĨM˙F#‹E%“I`WŽ\ąąЅiĸŦ hæšbâø7ž+›!IZfÁ=ÁæHZĶ~-ûdb`ÖÖīj‡%ĪŠ×Ōh4ė3gŗ™šÍĻõ¯$“2ĄPČō‰J$VV‡y¤ kHdyĪ™§|~ nøwúō—_Ģá0đmæ6ˇÜr‹NŸ>mf 4t€KX]ô~äHJ2ˇ.Ā…<ŋZ­ļ&%€Q Ō æ÷aō<ž˛ō; Cg<ĄĄĢT*ƎO§SÕëu…B!™€ēBĄ —ŊėezŲË^ĻŨŨ]E"{†nV°ė“ÉÄdū?ŋ”ËeĶF{CãāŌĨK&Í@÷‹ū“0mÖVĢeF&ŸžĀfđįĩ͛v˛ÛnÚ57vĮėJYXČDāƒ(ƒuÁaįKy€7œĢžÔ#É|vŧĨRÉÄíBžáKŽWƒA¯L&“v,I&ėæH¨VĢĨ'žxBÕjU.\Đ7ŋųM ‡CUĢU[ŦaSĻĶŠĘå˛1Ūe ãācA0,‚LėŊ‰dÁ9 [ûI?ҁ“’‚ęvwlQ˰ Ōô9‹čh4ZĶ\°X*•ŋ§@`¤Dâߘ^‘ō}ģŨ6ĀÉĸ›L& |T=ģ3Ÿņ=” ŊĢēÛíj6[žY;q‚b!õåa~ސjôZčšBĄ° $ô ‹7 Ķc‡ņƒŗ›x>ĢŨn[ų•Ō-Ÿ‡Ë{eܙ­1Á”į)õ& +Ŋ2†<Ķ;Ûjĩ,\Zž–2õ’—üŠ&“˜žúÕŋcL}Åĩ‹E]¸pÁîW¯/Kĸ%˙Ō“p™sŨívÛú\’1Ü=ō)a¸čģN§c÷‡­/ĐüÆb1cŪ;ŽŨķŌŨ5&œy†ą†sF1+ëėŲŗēūúëuęÔ)•J%M§S‹EcĨ•„€ž‡mæēüģÆu<Ģßī¯9ø1nĀÜú1†1ŽŸ%™ ›[6 č/ rßŪŪļ˛üĻŧi›đĻ]sc§ÎDĮĸ ãĮî-¤5F‡ =‹–ĘK2ÅBÃÎÖgĪ$™â IDATađg˛ōû°°n’lBĮ*‹ æÆ@@}LŽū†’Úņņą´X,ôėŗĪZY‹Ōú+_2ög„0mHËķŅ…B!Õëõ5Ŗƒ?™R: 6'1lM>_ŅŋŌpø"e2O( ĒĶéøb!xB.—3=% Lcˇ›WŗųT.˙ŽæķÎZüŦ[ PŊ^7"€†}åzūMŽ! v§ĶąûgąD Āŗ€™ķc ļÖļRЍT*­•Üõ/­“‹eĐpŊ^ˇgäY`ÆcÄkõúũžEs|ĐÎyfN’é9wwwÕnˇ•ËåŦ_| ›6ā¯RИ! ÍÎæd2i› īĪįķŠFkēíļu˙ũoĐxQ 0ˇ\Eí‚\s…$cYŽŽtųōå5}¯?O¸ÛíÚFķ€i2Yž)ÍģĮƒįę™DôÂŧ™6ŸĪÍu= ”Īį <ŅČ9dNōŌÆ0ú_Ā~ŗŲÔááĄÎŸ?¯Ņh¤o|ãöN06CĄ•Ü1Üđ,Ãá°ršœ…Y§R)jÍfĶr3™Œ†ą–Č/üÆāÍø.‹6&Ŋã]!ī É>ö‡*ËĻÜvÍ @FYĮį¨yS‡´:$ĖO’čØ|¸°Īcķ;b"C"‘ˆ J˛#ØXÄ%YiŽķ_Yä)í˛ÜétL„€…á”e2¸,Xė¨šßfŗi1!&O @…E˛# :; Š á;¸/ŽP#ܕūķy“ÉÄž%ŠŨ~FÛۏi4zršĪ‰FŖĒT*Fv"Ŧ™$c`ĻĶŠJūKđAƒ•Ë˙Ŗ1>‚ƒ3vų<´Ž"‘Õųĩ˜Püü˙`00ļÃ_‹ĪD#ŠŽ”>‡ A/â9qäŲrŒÍAĖâLų‘0cŲp8Ŧt:m§ãH2 %NÆģ"báÆš‹sw`ĀŗaÜQÎŦÕjVúã÷jô1š‚ƒÁ˜Ûd2ŠÛnûœÆã¨žüåWéčh•×Įi”Éyˇ)gbļāû`uŲt|xˇŸ7ƒo˜"“# !Ų­VËôĻŅhT;;;΃„†nēéĪõĩ¯ŊQƒÁ*ėy<¯Éx0p8n†1‰…BAÉdŌ\ö’Œõ❐åķy+ÕzŲ‡;ĸĸĀ;T¯×Mˆæ. ę… 6Ū‹…ōųŧķĖJĨ’"äąXĖ~†ŸCϐ„öåút:­RŠdĨ|N!ĀڛĘ\œ6B_bR‚ÅXķžōg\›$´ą”Į}ĖúĮɍFCGGËt˜[`.7ídˇÍØ´knD;H+Me'iöęõSü` @5™LÔh4ė´U,Hė’=ãį5yŌJÇū VA’t},†>ƒ-`ŋ JĢ|Ķ­ÛíĒVĢ­E6p]ėîY %YĖÚ34^­VËĀ3ndŋ€ō9Q<Û (ņoL Ëžø7Z,ÂjĩŪiĖLš\6÷"ą‹ÅÂôq0i°e°ŒŖŅ)}ë[˙ŌéŋT*õGÖw€sØ t{€+Áåé$Gö Ņ@ĄõbœŅ˙dX´y†€BĖ LFgĪb° ÆŖ\.Ûŗ“dąœ/)s]/~ņ˙Žņx™ûįC† °ŨxvŒ5Ø\ž‘7yÔj5cI‰báīxKĨ’$;īe;;;„Éî“dæĘÛô3}öÔSO™FļŨn{ËuŅŋŒ%¯Ķä4"´ģl08›0ĪfC›—ŋø=ķš›°Ä~,ō^ûķ cÆW,`tŲ år93â$ {æ~ ŗáØ´“Ũ6pĶŽšya>e1„Û0>‘žÅØ˙.Ž´Ph•gįšōÎBÄÖ8혀ũŽ–Ũģ’fá˜N§&LG˙āđåNvŪ¸nŅ“XĖ‚BÄ‹2 }<7÷/ˇų•–€9ŸĪ›ĶĪâû}vßŅŅ‘1,žt0ÂõGŠĐpûcXĐLϧlö_Ģ^˙Ī^oŲx<_šGoÉÂ_,íh¯`0Ģ'žø¨BĄļnšåŋÕņņę”Œ ÄĀđLą>f†Ü<î ֍’z.—3‡pˇÛĩûcŒĀR'^‡~E¯‰iđÉØķZUŋiđq%ÕjÕežÍÉ étÚ<ĘĮhžZ­–NŸ>múÕbą¨l6k@‹É;ÄĻ„qĀx…%(Ķp\Sb<ÄųŽ%sTŅÍ7˙Ĩ}ôGt|ŧŠ ‚)`Ä<‹Œ ›ÍšîÎënÉqdãÄ&ƒį‰à ķjgggmķä™{î—M 0úę3gÎhkkËÜĘh!y‡Čáķcn6›éđđЀjĩZ5đ‰ŧŲ3vĄPHŲlVÕju Ŗ‰Ėįķöų°Ā|7%nœÃčƒų|Ū6”lœq€I/{`ŖhåyŗŅbŒlÚÉn¸i×ÜX¨˜øYŧc6¨\.¯é´|Ãü–Đ˙ž7&0QS^ēÚ4ģģÁĸÅÄéŲ /Ž¤ĀžÁvąĐ 3( kķĻ Iú`9&‹E{÷å-˛åz0—\+!XĀ÷,­ĸ18‚†Ã;Ģa oēéĶ’fēté?Wŋ?0–ÆŖßīk8ڂ‹–Š6†õÔSĶd˛ĢžđŋP °ŧĘS˜J<ĶĘuÃüa˜āųŌĪ\kŗŲ´ßFŖkĨG8âo<ˊVŒ˜‚‹ĨĶHčŽ$Ķ>V*ËÕ#ˇowwwm  c cą˜1‰|ˇ‹Ī…ã°ÃûK%­bqxˇˆ´<Âčą)ĩƒMÆKE‰›˙fqûíŦé4Ļ'Ÿüac+amÉĶ„Õ➐ø˛<€q:ęēëŽŗûEoˆ˜wg4™!@Ī{b&­ÎY kîaūĖŋŖŪ!|pp ƒƒƒĩgĘw…Ãac&‰!*—Ëk⠐*ÉdŧīĖ5ĖWĨRÉ@6!õz}-ˇæŽ{Ö˙ƒÁ@ :<<´ī`“įįÉzŊn`Џ6ŌK(bą˜1Ø~Ķąi'ŗm8āMûi”F(õųāã ČÍBŖvĩYė5ŅãÁąûGÍ"ŽéƒÉģĶé3BĒ>ßpĸÔ䏯t!ægņŽÅbv+Bk&bNō€1œ ˇõčt:Vfö'oxW&,‘`Ą_švIÆjĄåšN§,L)ˆ(ú‘ūĮv ßpxIÅâ/ĒZũ5Åãuƒ1}[‚āŸû oГOūsM&ģēá†÷+zJãqÄØ"i•ˇ‡fŒį/­FžC$QąX4†Ö3Ę2´YĶé2‡ĐÃĸ hÃpqã7ĒÛíZIŽīgŧÁ¨TpNķLxž•JE…BÁž…×#˛ŠđZ<ķŌyŊÃĸ>}ÚîRņlļ<÷•’}<WŗŲT °<‘%—ëë–[ĐCŊUĶiTŅčÔą˙‡SLĐņ˛ŊŊmQ,ÍfSĨRÉ~'™LZä Ā&‘roŋß7ĶķDĩZ]sąĶ˙-ž-ÎÛgŸ}Öäč!ŠĀč6 “ĻėėėčōåËĐŧæĐ$É9?_pī>VŠVĢYÉÂXaÄÃûō.ЧŸ~Zģģģt‰ĶÁŒ„Îã­\.›¤…Mķķ €§5ķ—g7ídļ ¸i×Ü(MøŦ5=bøģd2i 'e_ÚēząƒÁƒĩ`A§ŒČÂ!ÉØ#„ĶėĖ؁Ã:›ÆŽ$@’Ōß āaQĖōų€TŽ—=`•’Žđ …Ŧ4‹ļ ?Ŋ äŨ§˜90ŦH˛5ĨmØM ؇įž{NŌrQH§?Ģ_ÖááģÕlūŧBĄŦiøXÜ[­–RŠÔķÆ˜ˆž{î]úÚ×>­Å"Ēŋø?U$ōđZSÂôŅ7äÃųāé~ŋo:8sF­ä†v ž2›gtœ”x}Ž×BɎßåķ\EŌ鴕‹ĨÕ×8VwĘ´€Õd2ŠZ­f›€—?×˜Ī€éBëø&ŖoąX¨Z­Ú†!›Íš–§-R XÅétjė]ģŨ6Éā敝ü?4GõÕ¯ū€]G"‘0 -ēE˜íT*ĨFŖa`’*ĶNĮXt~Ŋ Đ×l6uåĘ;7šP(˜C›`3[Ū%ךŗŗcL"ī;ã3rÉ˙L&“ęvģ:uę”Å´”JĨĩ*ã¯?ĮcCb—T0_‚Ņįú20%d6Dĩ°Ų`ãĐjĩ,3͟@$-jæ†ņxŦBĄ`ßΆ!Ē\.eŦŖYõ›M;šmŋÛŲŗgmRņ˙ŧī}ī“´d>đ¨X,*‘Hč­o}Ģ._žŧö/^Ô[ŪōĶ"ũôO˙´1#ßiķ]&`M&B˜mÛ,đėLY|`Ä0@xĮ+4ĸ{@!‹,ė á͞åņl’^āXPŊÁa<{Éīĸ ¤d‹Æ Ė$ °ĀL!ɀ$ …’*‹ }Šž’ nEâ+(iĪįs[H¤% AH‰šS˛t.#-ūíí}DÆÛõÄ ãã Á n@eąžy&σƒ¨¯ũŅ•+īW.÷‡ēųæ¨`đŧ]/,#aĖ’Ėí™JĨėh/Ž…ūā9øōr$ąŌ*ã„`yļÜG¯×ŗ~å´ Æ‚xØSú…Ü6˛)]ŠŅh<Ž–šēmooĢ^¯¯•_™LÆÂŋŽŽ´ŋŋ¯RŠ$IļQŲŲŲ1w9ΐqJ\ w&“1 U(4ŸĪÕh4ŒIf ´:Ĩ§ßī[ ÷L8=Āéīk 00MD ×Ôét ÜDũ æØg ļZ-ûî¯ŨnĢŅh¨RŠØ{Įf āH2˜ModaŒ0Î0Čz¯\šb 6™ĮĮĮúæ7ŋi㘠X¯!Ū´“Û6%āīÁöĐC­• üqŊūõ¯×;ŪņIŌ?øA}öŗŸÕīũŪīŠP(čgögõæ7ŋY?ü°•ŦŪôĻ7ŠT*éžûîSŖŅĐOüÄOhąXč×ũ×ŋãëAÅž #?Ÿ€‹‰Dėl_ĘĮ^ãÆŽÚGē0ą& ›čwŗ0y‡‡‡fÆ`ĸŖ|,-)@•’%×ŅívmaÅÕË-ɘ_r],ĻIcÁĻ”‡Ŗ”<4Ę@čŊ(?QäûŽÜ;€“…ĘB‹‰kÁy {ČCËã\oūge2Ąƒƒ˙R.üW’ūk…Ã5Íį ÍįQ-imm •Hüš^ôĸŸĶxüˆÆãåõû<8ĘoápXÍfSņx܎3CK -3é8ˇŅh(ŸĪ0Cž‚ņĒŲl*›Í˜åž]ūŧaŪ'oĸ"††,NŪaū.™LĒP(¨VĢ™ä OÅą…‘ĮgÎįËcûŠÅĸMĶČ;Žq@|ĩÔdĶNfÛĀīÁŖ@ûčG?Ēžđ…zÍk^ŖN§Ŗüãúä'?Šūá–$}ęSŸŌ™3gtīŊ÷ęîģīÖ=÷ÜŖ¯ũëēté’ö÷÷%IŋúĢŋĒwŋûŨúĨ_úĨ5cÃLƒAcrfąfđ‹.8oôm”Ŋ.Žã”¤Ui ) 7#PģŊŊm@&…ō,ą,Á`Pš\ÎJĨ°ÎYt(­ųIØõ÷û}+‹ú25@‘R.%[tzņx\­VË´=~qđÁN°{§ė,ÉúÚg)|ÚíöšË/“ÉX)–|0X%iĨ_ ….i˙Ŋ:{özĩÛ/ŅņņYmmMĩX+}JšÜ# 'ΊÅĸ†ÃĄ-8|°YĢÕė:“ɤÚíļŌé´é"ɎŖ4øĪfŗÆÂŅŋ8ĘŊŽ’rØl6ŗlH@ž¤įõŽÃĩŌåqÎzõĮĢŅīĢČęs<0gcƒë—}ąXhooOŗŲĖLüũâã\=ū `Īdf8›—Ŗåüņ‡„ ' œ4Áõ.Č Ũt͟ë‘GŪŽh´hΝxgŧļ×k;ĨŖŲjĩ´ģģk›šíímu: a†„É"F…˛%ã"§ŠH˛Ŗ6ÄŠ‹E›“Ė!ô7™äÂ|s‚ ›‚N§cŽgXBd&Œ6„Õj՞IģŨVŠTZ gĖ0€0‹€7~ådĀŠ´Ü¤b>cŒˇZ-›×¨Ē°ŠFē|ų˛U>˜ a˙Ëå˛ہM;ŲmÏˇņxŦO}ęSzĪ{ŪŖ­­-=üđÚL&ú‘ųû™ũũ}Ũzë­ē˙ūû%I<đ€nŊõV’t÷ŨwëøøX?üđŋ÷ģŽÍÍĘ?Ōj§Oyƒ‰īę`IvX:Ĩ]IJ,”|ø^vōŌę.ĪųČB°ņÅbq-Ļ .ßáM€J 6eŽ –fĀ3y¸ha%jĩšLJRˆėPü‘9žB„&‰x€ģ/{q-Ķé2\Ų/&”—C€Čå¸ē TęŗĘåū;‹˙BĨŌī(™ü M§ũĩ#­¸Gú€ž"JdggĮô{,ŽhÆ2™Œršœ9'¤8YŌ?9|Ū”ÃœĪįæā„q…•"€šr˛wUDa\Ģ|iK[[S ‡s•Âāøãüô;9~ūY…B!s÷û}ĶÄÁHa|˜L&fôĀņ › CÄ÷Pfå]é÷ûv2ŒlŖŅ°ōû-ˇ,ŲŋĮû3ԌF#cõįŦR˛„…ōŅNô[>ŸW:6‡s6›ĩÍĀÉā(›ÍŠ`qL1ÃpĩÛm:uĘ6Mčëåą‚‹ÅÂrũ`ņ$YdM04đ‰DlÃá7l™Ë Ā r"I4UˇÛ5J._,S:V&“ąŖŲúũžzŊžIoĀęķĖûũžą¨˜M.]ēdōÍfĶ"‘0˜qoĖWh$}Ô › rAŠÖđ.lÚÉnø=Ū>ķ™Ī¨ŨnëŨī~ˇ$Y)+—Ë­ũÜÎΎígvvvÖū>—Ë)‰ØĪüuí#ųˆ2™ŒũsæĖI˛t{@4 ­?F˛$ Ā‹ÅŒŠÔ0aÂâÁ‚ųė."M|žāÉī¤ųneJ_;;;ÆÖÁ¨ēŧ>ÆŌ;)MĨĶi›Č§Ķ隓3‚g@)‹Ešŗc÷FúŠRˇƀIk:,¯ĨƒuB“čcqįgę”ãÛíļ•ėų<‚~WŒaČ;¯ŲdĄžr劚€†1 ūĄaÛÛÛŗ’ ãĐ …TĢÕLaüúüGú 3H4UąXÔŠS§”Ëå t{w(Ųn§N˛“m`1—H4uË-čąĮ~D“Éļ1”Ģ#Ûöœ1ķ’ÍfÍņ N§Ļņ¤ĀQŠū¤€!*˙|°oĩZMŨnw-ĖpÄé|× +Íx¨×뙓JĨ”N§•N§Mj2™LŦ4Ę{W(Ŧßä{{{k-쑤+•ŠBĄåyŨŅčōšBĄ`ā›Íj0T­VĶ… lķ„Ö’ Âũũ}Ŗhš1ËņØKĀ-`4ŸĪ[\›úÂxoÚÉlø=Ū>ūņëo|ã›÷×5/|—´öß˙žŸšē}čCR§Ķą.]ē$IĻņBí5.0+”•pzϘÜ=ûÃn‚āŸō °Æ˙ŖĢ’VįņRæĀqŠs’‰?OYŽŨ:LĨąP(d:4‹,f>˛Å—čŸAÆ)(žÔÛjĩėH9Ÿ5;ĶGYSŠ_ĨUė‹6ņ6Ō*GF€kā‹dĄF™ö•{ô\|ŠĶĮS™ƒ”…æ0Îŗôyx’Œ­€ĩĄŧ×nˇíšr:l2Ņ.Đų|n~:ęđđPápXårŲ˛%ü‹ÅôéOßĻ_ø…ģ4›…ôs?÷ũŗöŊøÅ5ŸĪėü×ršŦáph‘#ŒwoœbâˆFŖÆ´øũI1’LIéĐîfãg‰ų ÄIūL]0Ôwü™8õƒb(˛ĶwĘå˛mâ`Đa\‘DPjõ†4¤Œ)Æú…įÉûĪį-÷{ÚŪŪVš\60 PŸĪįvB Ļ-´q‡wģ]M§Ķĩ3ƒ™ˇŧ–ÔŸ$Â8ĖbÎņåYËÄF‰ŸgNčt:–ãIɘīâ,iæXwŪ/I*—ËΜ•0ĐÜl6í{č'2ė"U Í3gÎhwwW’Ŧä^­V ôoÚÉmø=Ü.\¸ {īŊW?ų“?iļģģĢņxlZ!ZĩZ5Öoww÷ۘ>œxW3ƒžÁ¸ø$™{–VÍėˆ~™N§Ļ Č …ĩ8œĀčâ0KœÁ áúķÁĒėč™đ(GK˛“()˛QRņ%”P(d1,¸CŅ`:Ûl6×â=`˙ƒ-HhYĖX„ŅI˛3kŊ&…- ‘gŧ<ĶÄ5p=€ENۀiÃy‹™†ŠH Ī–ÁtdŗYår9ŲŗeßŪŪ^;Ĩ€ˆŠvģm}éŗÖ΍FC­VËôGGGļ˜5›Mģ&@ÎņņņZYv7Ė”\aČ…ŨnW{{{ö˙Œ›UFeHįΟŅ?ų'¯ŅG>ōZÍf!ũĖĪ|^ŋø‹÷čæ›ŸŅuםąĪfŅ%ˆÖ%‹ŠŲlJZ?Ў)æūŽįČ3>::RĨRQ:ļđj?öqwģ]Ûpú—§~ܧo|ãÍĻ#@{­ŠfĒÕjvœxĮ °uģ]íėėčŽģîŌ™3gÖ¤t•ŌĒ,‹éæ]ÁÖū¸?Ā ŦŋĪ $Ŧ6<*Nۆ„3“ķųŧąõNGŠTJįΝŗÍeb6˜ˇ<3ėYxŪgÜû”ĄšVÜŌˇ”’ 9GBÉŋÛíÚį2ąAãēyß9+ŧX,Úf—Āu"€øšzŊnŸX÷öM;šm3ž‡ÛīüÎī¨\.ëMoz“ũŲwÜĄp8Ŧ?ûŗ?ŗ?ģråŠüqŊúÕ¯–$ŊęU¯Ōã?Ž+WŽØĪÜsĪ=ÚŪŪÖwÜņ_bcl ĘGĩH+&‹Ņ°K~°Ą‚Ņ‘´æ öA>ØŊŗ;æûRŠ”ą(ŪPÁįų >_†C”Mŧ ×ÁO† “Åooo[)†ÃâώZ­5&='âM¸/îÕ!ÂÜ# €Į)°48†q䲠ĪBŗÆÂĶPį:ë€/,Iöũl4č/Ø Ifŧ˜Ō׸™ŅšĨĶiuģ]õzŊĩ’|*•˛r4ßO$†gZ°b€| NĮ.€2Ė Æ“åØ‹čÁĶú…_x>öąŋĢų<¤÷ŊīõÁūŽnžų…Ã!>}Úe_bGĀ{M$īX—d8€^6gŖíâŲ. ë˜0dĩZM/}éį5GõčŖwZFĨ6ž‰äjÆ’ Æ4%×p8l%ÕÃÃC5›Í5vŗã‚2.:EĘāĩZMßúÖˇ,ēÉ>Ę 0xŧ›Tč[iY‘@ĀģÂs‡AŖLėYyâg¸7ÆÍ3ÉÉdŌōOég4Ģô9l¸ßüÄãq;!ĨT*)ŸĪ+YƒČρkBÆãKüˎ|ßh42ãŒĪ,•¤JĨbō ŒoôŦâĻėüđ‡?üá˙ˇ/bĶžķ6ŸĪõîwŋ[?ūã?žføˆFŖ:88ĐoüÆočöÛoW§ĶŅOũÔO)•Jé—ų—ô‚ŧ@ŋ˙ûŋ¯{îšGˇŨv›žūõ¯ëŊī}¯ŪõŽwéGôG˙Ŗ¯áøøXũčG×MŸOFYÅ3j€Bk}™Čƒ-iĩPƒ„Gĸ IDATÂøŌ‘_ĐķˆD‚øđSރŌ(ef_J†]`˛gA#"„ɆfąXXYŒZØPĀ1lL§y°8ú1׌ɆĶb8y1Ā|ĐŧŽJ’ŸĪĢÛíĒT*™ÛŲ‡Įp3ĀHrMČ|¨ē¯ČF(2.údúĐl6TΜJÃÜåOĶ8>>6`N%Áëƒũ)"€į^¯g›A~­3Õ ž3™8°Ĩe…+Nįų|yž9‘D‹Åž™§T/H7⍏@  VĢĨ¯~õĢúЇ>dæ›M;Ymķ=ÚîŊ÷^]ŧxQīyĪ{žíī>öą) éī|§FŖ‘^÷ē×éŸø„-ĐÁ`PŸûÜįôŪ÷žWwŪy§bą˜~ėĮ~Lŋō+ŋō]]Ë|žLÔüQžô's0Ņ|9´P(¨Õj™ųÍOē”פ%#HĖ jˇÛ5ĻHZ1°‰ÕjU™LÆĀ‡$s˛2‘7 ;sĻËģ |É|>¯N§cnEޟ’ĸoú}%'#°ŧ‚ėBi„|xxhėf˛ßˆ°äú@XrĖ`ҝÁ``ĨAtœ|AyÁ: ķ›ũ1zl |iÎqĐNy—$e˛Åba1<h/d 9‘H¨Õj­”ZKĐķBũæo~ŋΝû–ŪôχôüŠ.^Ü՟üÉ+T­žĶÖVĀ€ã–ÅŪ/ÔäÍĄéÂĒår9e2UĢUc?)/SB`b–zĘWŧâ5™ÄôĐC¯ĐÖÖą9Ę lxĀŠTĘâqØĩZ-+2šN`Ō'“I5 ûûjĩēæPÅbö;rŪYØWž5cƔįFöhŠT˛ąĮ†ƒM„?M!úe6Lh}1y0^'“‰:Žvvv딝+Ļŋ(Û´ōŒ1îƒ %6ąlH}ųžķ&sš?ŪY´ˆT%|H=úDŋaā]Ū´“Ûļ>ûaĶ6í;hŨnW™LF;;;6á1)K˛É Ĩ1xvĀ0MŪÉËäČī˛Ķ&˜=ģfŸ§ĮÂ偗$Ŗ’,°š…Í3 ülāʗ´ˆ>`š˛&ĄÆ€Yz9_.åī¸nŒ€Ę@Ūä{CX,ÃÚī÷×ôƒ`ą(’-Hy{kkË›€ EŸaFY }š=Î Xâųs¯q’dc€ îL@ë|žŒyōņ8^+†áv–ûÆ(ĀũąŠČfŗė`^ī °öÚLžĮŌ(0ÔÍ7čmoûŠÎžŊŦ‹wõšĪŊLįĪŋ@ŅhĖdl:‹…=ˇŅh¤L&cY„’ŒeķnZĸXö÷÷5Ŧbi„>::R.—ŗįŋŒ+Ēëžō•ÕcŊQÁ`P‡‡‡Úßß7=cĄÕjYŠĩÛí*ŸĪÛx÷Ŧ"1:8ĪyŧA…ąk ķ…NWZb0(`ŌFÚÛÛŗk æ,ÆÂæ‰q%É4¨ŧ‹lŧÚw>Øfë ęvģŠŅĢĸQäŊä™1oĐg”­aųøŪú…MD­VS*•Ōx<ļ !YŒ5cŽņIų=‰Ø9ĖhŖƒÁāZž%Ė#sßW¯×õ[ŋõ[ęt:ßqöëĻũ˙ŖmJĀ›ö]7_fâöŒ(sąĢ…ņAŋįwŗ09”Ŋ–Å—r$e9@' >†ʅ€N Ė.-“)ēÅH$˛v,LMģŨ6`ęC†ų3Ø ĀŦ åi&īPđđû0„üf ÷I9€íËØÄ[ĀxQūõ}ŠØŌŋO •…”ŌLÄŦ„Æ‚ëŗëŒ~Bg›…s–š/zĻÍÕ`00 /ɞ .Ĩ2L4‘HDĩZ͞[>Ÿ7 ô'ĀH˛Āg€#ŒũOšŽŌ$ ¨•%H˜¨ß/éüųWéŲgOëúë/éõ¯˙’nŊõ’FŖŧ&“ëíč>Ū‹Ë—/°šú™zƒā„p’F͌š[oũ´ršĻ>ûŲŋ¯p8aŸũįû7¯ŋN€>c’ÍL2@ļ°âû ×GT ’ ÎWÆXÂwŗC CÍũÔyo=`%@úøøXš\ΘTdzŊžå˜N§SĶߥ‡ä]¸“'9Ė-ī7Iü,q-h€a/1,‘áčMOÛW­V%ÉoĖX˜ČŠÅĸÉGĐ;cëõz6ˇúSQˆĄB핝|eS>ÁmSŪ´ŋ‘p ĀnāØdņfƒxŽF—‡–]áOŌ@īEä€$Ÿ7¸ÔeÍlņfŅ@ N‰—r Œ“$ •d⇉ĻI’i…$­EĻär9cÚ¤Ëhâ;‰C™ÍfVŽ(ŗ Rĸ’d§ãP¯-ŖtėƒĢY ŅRÁūąP–æķÕYÁ°f€QôWčⸯŖŖ# ĢeątŌ/\š‹ä ņšhŪpƒú’™wŗh‘ũČø!ŸītSâ÷ +ÛØÂUĘĪ€a›ÍĻ1a”ũ‰_ņ›˜QĘqũ~ßJĨĮĮĮj6[šNĪę‰'Né†.ęîģī×ģŪõ¯tpđ=øāßÕOœĶ`0PĄPĐŲŗg%ɞ‰7*°đÃ6ž{ŊžĻ‚ŗ•ąĘÆde’hęÖ[ŋ¨|ŗ"‘ŧõ īq;ŧS”Ú-hč0ņŲžũmˇÛō`ģ(ŋcŠPÎįsčôéĶ’–ŽwJË|/ī;ã?ŸĪĢŨn›”÷ÜëŅy“$Ābsúšāƒƒįälr<š˙(sK2€ËŦ‘5ČûÛÎ\EßQ*æ;‰tŠT*Ö„–ÃJŪvÛmj6›fō o€ö÷÷m#ČũÁĻÃÄn/­‚Ō}šsęĻÜļa7íģn0€°ežté]‹”‚`vØĨ2™M§SLNŪ$ É&;J14X@& đ ŗ„Î†Ō#”­­-ĶTÁjxօk 4Įīą§ŧM‰0|ttdåmÄãų|ŪūfC’Ĩ‹ŖϐE˛˛˛ŪLĀC‹H™Œëáųøī„5åį68ũi |‹"özŊnĻXU~ƆĶ]ČX Ž2N(ss-,ZÄ[pŨ|'ôWūbƒ0|°€&yvš\ÎØīúFŪ˜Ä `Äžbą˜éčˆę‰ÅbĒV“úÆ7ūļ^ 3gžÕ+_ųęÜš'4æUФ †Ė„€NŒƒ¨ôGŦÁDúl<1šÎ~ŋ¯WŊę•NWô™ĪŧCņxÖX[/'ĀÜD™ĐÅHŋ{ ÁĪņžĶ°vŊ^ĪĘĐlːDtģ] {ū8‘)åz åŖ”8ÚĪ3¯hüب0į˛ĐlwņxÜæ›t:mĮÍĄĪ¤ŒÍgĨĶiUĢU+ĻĐã]č^1Ŗôû}3!1Îx׉žÁôÅü…Ļ™ƒéá$ūZš~úƒJ l;›6uđdˇ Ü´īēa‘˜DXd~€)ziĻĐ^% :uĘ&E/’ö9s”B=āBÛ#‹Øô”˛Œ ågŸ™LÆvéü‹:%DĀå,@îRØ3ĀŸ˜YDa›0 L§ScQĐõ I|ŸwŨĸÁËd2ÆļÂŧņ€J€`ޝģä™ņ;€×āKcņxÜB–šftIk:B@ËÖ֖åÚÁŦ ÕyČĸF6a$QŠT˛qFI=‘H¨Ũn[é Š œßؐqhDŪĀud2k€ctcŒu˜\Í@ ¨v;¯/ųv=ũôžÎ{NwŨõzá ĪĢR iąxĄRŠ´õ ⠐ÂŊ ˜ĪįĘåröŒxN”?š|~ ģîú—zėąˇčøøÕ,‰æņFo AŌ€öĖkęü¸õ†ŽŲlfF Ž“ō'&­¤ h ĢĻĪҞ™"ŋŽÕj­ũSTŨ›3úŌo‚üØaJ^)!ôū˜D/UĄŸų{ŸŊĮFŒw1NÛw!3X,ϟdÎ`ŪÂĐæŸ_¯×3ĢwŽƒA RgCāįTotōņJlĖ$™1d6›é‘GŲĀÜ6pĶžëdw‹‚ɏĖ=@ 4‹5Ĩ!Î+Ífv ˙OL“ą‚e‚ķÎaΈÁāąx ŋcˇėŨž^,Î} cB_ˆŒë‚éÂ1‹{—>bRgŅ0ų˜'6 ŗâČ\÷ĖįbZņ žŖ/͞hūĐk‰Û ¯`+Yˆ1g`šđÚ94€ÕɏÛÚÚZ‹ˇ`Ņį€úˆ1`ČŽ6€đŗ,ūhœˆ7aÃá7 €jú> Y< ¤/wž$Č5Ķļ5+ļÜ´œĶ#ŧD•ʍ:}úYŨyįŸëėŲo¨ŨŽk8Ü7Ī‘ņÁķĸĄ9esģɟ}˙÷˙kĨĶUŨ˙ût|ŧ°#øČÁäķxCÃzÁFņNĄĩdŗŌī÷ L{FVŽ ŋ f|4)—Ë™Œc‹$“x Cp; ÃePž)`ūęąĶ CßĮFĪ;qŅĖōŽō= ä]õ%xĪžķw˜eØ4z@ ¨†5ôåo´Ėž¨Ŗ…†™N§Ķb‘°`n!Ũ0ëĢ1>účžāļqoÚwŨ(“•Ëe‹ ŧ¨ņņĩYpaøYô8ü= “ė?ƒËŅkŒ\^oÆnÛŗ$”öÂá°}l$ā Ŗ1āīĮęvģĘårVeBf!dAÆA û'­ëî`ĸ^î›7´øy˜NH§Ķk%-~Ÿ~đ †EŒŨĮyø’Ĩ8iuî0Ī°É”žįšų…Žë8˛Đz Æw°€ōšŌú҆°4<€ĀŪŪž_žÉBíË˰§”*1NHK6-n†Ė5ÎZĨąĐcę™Īį=rt4ŌŲŗO땯üSíí=­jõŦžüåˇčāāvÍį+,cŸ…7•Īį ´Q\2€UŊë]?¯Į{‡ūō/ī´wƒ{åŪxvŌJƒÆFBԚæ0–ÉdėLcIkÁڔ@[­–‰„ĒÕĒö÷÷Õī÷íŊōŦ!ã Ŋ`6›U­Vŗč!N7i4kĨd˜ŋÅbĄBĄ`NWŪ3 hŗŲĖÜÕl ØLlooÛ9ēŒWâb؜1æŧK’é>{ŧ˙ôÃK_úR5 ?Ū¤l88†qIDPŊ^W.—ŗjD&“ą 3ņ7l°xOũsôGlōėx1^‘3HåᓟüäÆ|‚ÛÆ˛i×ܘ„ŧÚk× ’," ŒeSXzĪv0Ą1áĄũa˛ä{Xŧ(MR’B˙‚ƒ”E^’éԘč9å@’MÂŨn×&Z@×%âZ%z­ pDƒĩX,Ôh4ĖãûĪ_˜ėYŦ}ä @ÍāÚ?'XCž‹ :yĨ Mßōģ„āâö•d} `Į‘IÜO6›5†đĮ8‡VnĨTĪqz°tô+ŋ‡U­VMË×ëõL?7NÍ_芧Ž×åË?ŖŗgŸÖwü‘Ūđ†_×áá=öØÛõčŖûšĪļŠH&“æ¸eLr´%Øp8ŦVĢĨ×ŧæßi<Žę‘G^mZF§ˆĐ¯æÁ``ī,Īp:€%ž„wŽÍc ´ģģkŅ7>—ŽPčĢãbȰjlPØ8!‹ˆFŖf<áw‘1`Nĸ<_ĢÕ‹Å,‡ŌGøp˛ZUž'†Nņ€yÃT”ËåÖ blrČįΝĶööļ*•Šũ9ķŲbąĐūūžž|ōId]ĸ-ÆŠK?ú G*•R§ĶQąX´ ^:6ĻmĄ?Gw6c6›v˛Û†Ü´īēÁ’';äAēūÍDHi׊˜0ųŒÅba? _2Áŧ`žļׯāM&“Æ qû㓘„cą˜MÎ ¯ĢA÷䃐y^0Â1-É=¯™TM§SíííŠ^¯Û"âõ@9ĀĨŠĐø|ʘ€dÜŞéāßW;§Ŋf­ŽC=÷€Gû `B—Č5xרņ×ãûŸņ; đ`F“ī§īBĄ$Ā`6›UĄPĐ`0Đ;ßųN% Ũwß}zú駍!D#FIž€oîW’é$1a•SŠ”e})đøøX7ŪxŖ1‚/yÉjw÷iU*×é‹_|Ŗž~ú&moGĨé÷ûÚÛÛSˇÛ];Úy@"ŅÔÛŪöŗzđÁˇčâÅŋ/iš)į˙yŽ~2›ÍÖ+īa$ŅsĪ=g@ŲF”l6Ģfŗi`Ŗc æ—MMˇÛĩMĖx<W­V3ĐØjĩ Ŧ&“I›<;ÉØâŋ‰„ž|ōIĨR)Ģ$H23Öl6ĶéͧÕëõŒųbĖōŪqę ī ī,eSúŊ,aáhRgápXõzŨ€; 10­Vk­D+ÉXÂŨŨ]s63Īt:ËNô›“T*ĨZ­fcúÖ[oUŊ^ˇ@m6’^oüÛŋũÛ𡠸i×Ü0[øx5šw›˛QƔd%Ā‹ ˛Ûíđāw_hųYIVļ…Á‡vZˆ71Xsšœ†"‘ˆ}%M>“8víŪ00 ŧŒ{&&“9āŽF@4Ńĩvģm“<}č?ֆE!ĄĘ,Ļ>FÆÄ7ū ëÅî<žĨ%Įnˇkē*€l/@ŧFJf0’ $ķ]ččø~)?;×ԛS`ˆCĄÅéúĐĄQŌæ9?øāƒĮVÚdÜ0NŲ4L&2ÃáPų|~Që÷û ‡Ãö°’œ;íŪa¤ …‚ĒÕĒJĨ’|WO<ņ^]wŨSēëŽ{õÖˇū–*•ëôĨ/ŊYõúË ¤ ÁëvģN"‘ˆžīû–§~<účŠÅ–AĀ;;;uؔ´ÆpN&‹EcOũx ĪŲØôz=Į‘Hd-”šX$6)0ĶlÆ|l´xöŌ2ʇņF˙,ŖM/ŧÔ§a3™ĖšSéQ@FCŌ\U*c@ˇ˜Y¸JĘä’Čũ"}ņ’ 6ĮlŠÅĸęõē'ú”9„ŗ—}Ĩ€š•wŽ2:™y­åh42đšŊŊ­‹/šŅ-d.—ŗę ÷ši'ˇūīdĶ6í?ÜkŌjrķZ*œ•Û}9 p%ɀnK_‚%c.imwíķËfŗ™šÍĻ•@˜taŊžĐģ•Ĩ•yÃ2víŌęĀ,÷ęûƒ~€Ĩ#‡Œ’§gÍ< ô Âq&mĘĘ0}Ü?€‡Īã^`؈‘ ƒūô]Ë{ƒŗö…ū@oČķ%ǃ¸JtW3Jô) 5Gc~ ¨ĸ?¸ōÔ(3ˇZ-{Ž€s´ŒäĘÁ3F‰„âņ¸• 3™Œž~úiUĢUc†“ív[…BA§N2Âd2Ņ•+WT.—íž2™ŒĻĶŠŠÅĸ-Ö0“…BÁÅh4Ē‹raÃĀO$JĨŌęõ^Š?úŖŦßũŨ÷h>ëMoúMŊņV2ųįŠFWĄĮŊ^Īt’4™<Ŗsįū­žúÕģ•LîZ‰ÉE8V*•R>Ÿˇq@dĘō÷'ļšđŌX0IkßšúŪ‰ĸØtđķî–ËeI˛Í?Qf í&Ÿļ•÷†ßņšM/é`Ŧ6 ;ōų$]ž“‡šÄÃwļÛmĶöbĘ`ƒKl œKÆũbąĐŠS§lŪâē …‚bÆ(•~/™Lūĩ†ĩZ­fÄBĄ`æšŨŨ]ÛhņūsÉl6ŗ0úN¤%˜¤6ídˇ xĶžë† øę’ Ę›(ÉJ˛ĨgJ|¤„× yã#[(šÔ¤øcŅcpĖįs;˛‰˙Ŧy  ‹E? Ëx<^–g2™5#  Ø—•Ņ ŅÄXpM”_é˜ī"fņāđ,zô?‘üž$[t¸F´`,”˜uŧéĐæ5{d„ę܋$ģ&/¸á~'“ÉDÉdŌL čī`Œš_#ô\#ĸü^¯g ŠiˇÛÖŋ”ŧ(×öû}ca¸^ž āßßß_ ßhrO0.áđ*l™ąËæ`kkyėžĪā›Íf>šÍ–ļļ^¨ĮšZ­kgį)Ŋüå÷jgį˚NËęvËJ&SV–ŒFŖzųË_š\C<đ~UĢmĩZÍŪ/NDa,-Ī›ũŋØ{÷ IĪĢĖķÉŦŦĒĖŦĘûĨ.Ũ]ęVK˛Ú’eɖd9F„„ņ0ll<ŊāŲÃĀv×"pxO˜EËØą;aÖã5Į"„…,ɖ,[–ēÛjwˇēëž÷[åĨ*3÷Ēߊķĩ€ˇ˙ŅtžŨ]•—ī{ŋ÷ōŧĪyžs2™Œnŋũv:uʀyŊ^WˇÛ5vœyL˙Sˇ—1DžÍŠŠ)Ģ,k K ›Œd NâGŋ‰ÖCk Õe¸Į›ŗĖ_žO¯×ŗÃaw~ÎÁĐĘ ö š™šš9ûܯg#9ņ]ĒĐŋú5ũ‹—œ–Ŧ‹€cąČ^¨HķG„ĨŅh˜†ÚčŒ5Iž˙p8œäŧÆÛ„œ´īIèA..@l§hN߄Ø`”8Í{ķˆ×ŌÁa˜™™ą,ũ°-lŦä{ĐpŌFüĖF…@V€\d|LŦM&“ „ĮĻüßC¸L@%& ˛„Ŗ$Ųf A¸ˆ°œOŠíŨĪü_ÚÅŅhÔ4–~“BE˙_ Đŧ!ćVĨÃü°ģlX€c>ĐĢÉŊėŊc›˙<`/1˜Đ‡0=ä#㆞„}N$VŽ Ö–0 Ī}{{Û!Μ“Ķl6Õī÷y& r.—3ĻƅM˜rdÕjÕę #K`ėäķyĶčí˜]¸pR_øÂ¯č _ø€FŖˆ|đŖzÛÛū7--}]Ōø`žŦé–[žÔ7žņu:‡Qúū- æpOOOëȑ#Z\\T"‘ĐĘƊŽ=jũ{#ė\z@Eõ^G_p ôy/=Æąėį&cÖĪ)>Į§bĸž7n×N§c:´T*ĨH$bádæ‰×Æmoo›Ũ\:V8VŠTRŋŋ_§Øį$í ÉézÆ>Ŧ(Ŧ, oeeE333Ęd2vÁŲãØŗŪô=‡K@(kĪúúz ŋ"‡I~>ú2i×f›h'í{Ōŧ¨ß§w‘doŸ˜™MŸ_™L™ßĄ_ŅƒmlÂ}Ē_æ @H.3Ÿ •ĐŦbqĀ`Ö'ifÃãzŅáldąõĄp>Û3–„ō I ”tōkXŅÁ`ĐOĄ%ŖÉá îvģ~ŧ +"䅹­$LLœwčrmhøŧF0ŸĪĢæ7%6>Ŗ\.[ Æ×#“ŠE’i éĶŅhdnmCS‰‚ü{’Œa´ÄøCF1ĨīH;Ã}ĀææÅŠJ ŸŪ(•JŠŲlBî€DŸ#‘:Į™LÆĘŦÁ>îoę¯ÕęęktäČŨyį˙Ģü¨N:ǧžzĢNúŽƒ¨žõ­ûmŽ0G‘˙’܈ĄPHKKK–ˆgĮ•Íf•Īį ČŌ]XXĐšsįŒÄÄ=âFĻšDÚ1 ”ĪįmŦF#mmm)—ËŠŲlšŲ'‘H¨VĢ)Ûa€Zē4(gč_š\ļđúââĸo˜k@ęüüŧé7y–2I¤ ŗ ÜŲŲ1vŽDæŦ{ÍfĶæ´w7G"Û>UZ?vcXŠÅĸąøÆŽFûÕ<ΰĄô]&“ąJ0ČUĐtÂŽF"3ėLÚĩŨ&pŌŽēÁÆH˛Åz8h“dŒp!ÎLĖlō0M€0¯Ũb!ķ)0ÖĢĀ´yF.6Nߤņš&Ō=°@“j†‹ ›P0Zšųųų€`AÎ;BĶl:€Ü 0 č´pmÂŽqũÜÎB65röĄ_Dû´;€+Ē„ĀĨ)É6é06!Qî‘ûgĄOĐpÁÎrmô%J’m„¤ŨčDWķ]Žsƌā„ö)æįįŽg€;!YŋáŦčc´[hĻÆãąEIɸŦ>ĨR)`^hˇÛĘfŗ īė(ŗēĒ׎¯Ģ¸žŽxŋ¯éáPÃPHŖ™ĩ‹Em=ĒŌu׊z â…B ëéėėŦĘåÛõųĪßĸ\î9Ũu×ôoūÍ˙)IzúéSˇ;%éĐQßívU,U(4Õh4ia`Õ˙°č[[[zųå—-°Vä ŖŊđDHđ+Ļua“ccGßÄsEwįõœ€A@°$|]žąthžAŖ•N§ŊÉfŗÖĮ^Šá‚ûĄ¯IoÃgķũ°ĘŒA~ŸL&Í-.ɤ čĖ`n"‘ˆ2™Œļˇˇú/œĸŅhtŋRJŖĄ7ž>­ģžųM-mm)<kojJ› ڙŸ×hzZ5ŗˇ§|Ĩĸ䁙ĸ‹éŌíˇëô¨rō¤væ€ˇ, ķ>ŗ4ÔōōiĨĶįuæĖƒ Ļ-Œž¸¸hķęMoz“žųÍoęâŋ֎°ģ333J§Ķzãߨšš9­ŽŽęĖ™3ÚØØ0 |ë­ˇęÔŠS’¤ 9s&b„×ÅX&ŧOȖņÆŧ“8¸Ä9"… ī"Î^´‡ŪĖ`Ëd2Z]]U,ŗÃĪP:”006X7ĐbŅĄÎÎÎjuuUĮŽŗô2äd|úõá{‡ŪÔGŪ™MęōŽz}ŗ×Sō>fĩZ5Ŋ3ësŲĪŅfŗŠ?ūã?ž¤š†ÛNÚwŨ€ŠTĘr‡ąø‘_ÅĪģ~Ŋ&‰ @@ CæĘŧy°;ž’,`”pđ#‘ˆ*•Šbą˜H6.ūĐĀø4`ģXČÉ#ã Åįú<~ķķķ–<1y*•˛¤ąlp„ ų>^O_ p—d߀#ÔķáÃß$fĶ•pyr\ĢÕ˛g„îÎk@)ųãč{Ō{2ãŲú$ĀEÂŗŗŗĻß|#âgķæ~ŅĖycė ›"Īl0(“ɘf ρ>f Īūųį‰Ît4Ŋ"­ š@€0@w{{[‹­–Ūōâ‹ēëôiMīîęŲŖGõōë^§Ĩ%­g2Š%“.åš%“IÍ4*^žŦ#—/ëæ§ŸVĒZUieE/>đ€ÎŪ}ˇb‰„={ÎũXõĻ&¯O“dĖ]ŖŅĐÖ֖æįį `|hĩZ:vė˜666Ôī÷M3ÛéttôčQŨrË- …Bēxņĸ.]ēdãËįi¤ÁđUĢU …€ĢÎÁÁ×ÖĻŋ…hcqĄcƂÉf ‡Ãaåķy Å3vБ2-ŒėÍjh U{¨´ĪpVĢUK pÜØØ0ö‘9H3HQīį \__—¤Āaƒ Ė1æ.´¤$¸O§ĶÖ'荑œ8qB=ôž~úi=ūøãJ§ĶfõŦ×ëfV‡ĒT*úä'?9€×p›đÁ“vÕ åËĻĄwaŖ#U!`If˛ ÔÉI؛><‹įÔŪáˆá“@ûP‡{˛˛xâõē3X‡fŗi‹8,'{Ō;tŲ” ÛÁĸƒe#ņnĩZ5°HŠDâŧŸ40°‹0„õŌ¤>.Ŧz%6BÂj0^0’a$˜RLx—1Ÿ%ÉŌiÎæš~9Äãq3ãđŨ>W#Ŧß]ŠTėûØôāŒ/Ÿ´;•JY˜“ n흝ÕëuĶŨqĀ€1d\øÃÂüüŧ}†ˆ4k5ŊíėY=ôøãęÎÎęo^˙zũŨk^Ŗč 7HÚ°ŗz-ú†°öîîŽúҍönģM̎ŪĒGßüfŨļąĄÛūūīõ¯ūäOôÚĮĶãīyęGŽh<[(˜>čĐ× ’Ĩ}€Ãŋ9 a@ņ˛„ .ØķõųãU­V íííiqqQ•J%āöŽT*š››3Č÷ķŠn6‘H0Ė’FŖũúT1~3„ Cķ[9@ĩ~i$(ŋYŌ;žô%­lnęņģîԟß~ģÅb ÂJŊ^WąXTš\VĄP°ëŧŖ‰HĻŽ¯ëO}JÉRI_˙ŅÕŲųõÆ.2 @ŒOFN ^G_đ öu„ecF+°yëëë6FIŋ‚°ÄaŽg„>×ËA8Dx7>sųĘ0qģŨč8ĨÚét:PēRИœƒĪÛŲŲQ:6ŗ ’q‹ÜƒėqŊ^×ɓ' äûÜĄ€QŒ&$vĻú éjēŨŽļļļ,G$2€ß §?ĐōĖíYäHŽy‡3Ö0¸Õëu[{ųN’…s\ūūī˙ū„ŧ†Û$ā¤}׍<€¸jŅÎą¸˛¨‘Ėļã›ųŋ|)$B}#Āŋgą“C\lؔËd2ƀŠ† ‰đ2lŦĄVX(Ā bxØ 6ŪÆÆģoaŧÂá°mHü Â=ÂxÂJqŊT­@(;ÃŊJa$=ØÄÕéü›įC?â–ôŽcŽ×'ĒEŸÅæÅ†î]دDOđ$ĖÍī>€ Æ ēOĀ›>L—t¨qĸ2?ã: KãĐ%y0‡ ØøƒĶS’Ũ;U!ĻĻĻtëË/ë˙ÛS_Ō§â'ô;ī”œ;šÃ‹OÂĪ%8@R`&ąw'Ö…ī˙~{=ŨņųĪ+wú´.žá Ú …ĖQËa,Æ áķp8l—{§æmˇÛĩJ9„0Ҝڙ3˜6˜OYė Ė_æā•CS­VS4ÕŌŌ’FŖ‘Õmæy˜_ģģģÆŦ6ģŨŽ …‚1Ŋ„ŧa‘Ąpáš™ã^BĀÜõk‘\Ą[€2‡[æ5‡"¨hryFBa0ī°‚Ėáā €|†Ø`ÆĢÕĒÂá°iY 3ĮX‡Ęå˛žūųIĀk¸MĀIûŽ āĘƊ…ŌØŲLYčI,Â,ŽŧĐ ŠĄa ØÄ=āō†6Ø4ĸ‘3ŖŅ(pâeC‚éķ:>Œ,Ö4~ŽYíÚG˜Ļvģm€Îƒ+6Vd6i€Ú86 Ø40„@acĨų)흴ūߒ@§ŌŲlÖ6Rߗ€G~ ‡Ãsöú-aB°k€MôKh§t<Ķ\.g!9Bûč9 F„!q{ĮxĄP0Ŋ Lp­V3×' ‘ī‡ÃēõĖũû/Y§¯ŋ^˙å~@3Š”™üA°°°`Ā‚T>obąX4™@,ĶææĻæææ 8åž^?ōˆĘ úĘüęåfŗic„¤Ā€k&.ø;,1<´Z-eŗYKSâŨˇŪ=>tųōeeŗY°W€BŠ$w& P.—Ĩ'ÔüÄO([؝ņįKB’ū„°(áf2f,b}lŖĖ9֔fŗŠ›ožYétZ—.]R­V äg$:QĢÕ,—&"€-ā´Z­*•JŲįĩš^wJ˜ųâ#0ƒÔ)&a=ãÆ}4)“Éō&’Ė=g&“ąPũ#<2a¯á6LÚU7˜:¤Ąv‚EšÍ€p.áǜôI:‹P‰ö fˆ†Jžų0 ‘…RÚی )"|,ęy$F#æĪä“#48bs‚ų"å›(mS6›5 Āä+ƒá:1…xg5.A6%66NĀĶ•šCĀ' ā›~ķŽg~ŪnˇZFéPSČ=VzÃ!aŒžr‚´ŋąĸĮķ:Ōt:m2˜)›0×HxrjjĘĒäķy•J%KFF•Ëå”Éd Ŧs°œ7;§÷=ū¸ž~ãz䡇¤ƒPÚ+îŋ\.ûEN’š†éķ……;hpØ!čûĩzÛmzô×]šRI÷~ä# °Š…BÁÂԄ3™+"Đc.//[˙Vų_UczzÚjÅbHU*5›M›Ŗ”ģCÃHãĐĮŗ œšģģ_ƒF}mmM•JE—.]2Ļ+9ŦĪ ØbŽÃīėėXko#u \ŨŪųKmį……ģV\´Ŧõz]›››$ÕŦy°–ŪuĪ!&‰X­fr‡F"‡IęaI9Ú9ĀÁŌ"wņ†!Æžwíãlöû}Õëõ@„…ëëvģ*•J“Rp“6€“võÍ΋›}ũWĀĖ )…ÕY⍞H$lĄĻT”¯ (ņ:^ÃFåY˜¯M"Ũ:>Ÿ^PˇˇˇgĄdRˆ 4Īd2ÆpĪ[ߞĩãž`K e!'{e–~žĶo0ô%€ŠÍƒŗív[F#P¯˜2]ų|Ū@÷H$,Ÿw¸J˛°ĢtČĐzQ<> ß‡Ŋ1Æđ¯aėāh…E0p=„É‘Hx0‚A}¯× „2ŅDÂ.1Bôû}Ķ`aFöĢ… ‡C ô =ϝ/.ęīŊWũ#@ŗVĢŗÆa}! Ę}*ä Ė—nˇkéY(ŨÅ<{)™ÔŸũģ§ÂË/ëŽO}JŠTJ×_ŊU„@oČøšžžVš\ļa„~S0ÔķķķÆ†vŪ‘ Ëȁ‡ûæģYĸҍ.]ē¤JĨbĪVŅEŲlVÍfSĩZÍXFúĀ“ÉdŦ,Üp8TŖŅ°Äãôl€jzzŋI–}^^ŖĪ\X\\T<Wš\VĨRQąX´0/@ ĪēåŸE´ƒ-¯įú9āų9'É*Ũt:pŠTJNĮÆ2Ѝp §Ķi•J%;đžFâÛĪĩr8œ´kģM\Ā“vՍz5Â^€1@Ŧ”wԒz! )›ÍĒZ­ZHŌį‹ķ!ķoĀaLZ¯×3ƒü„7ĨÃt&{{{&&į˙8 įyW, ƒ‹w;ˇÛmģ&6\X56†VĢeIwŲH7ŲŊČ ęu{'Ą2Â\lT>”í)û5Iˇ¤ €u%Ī^$ą~÷ÆĪ2"Ņ8Ņ/(úŠZäúƒÁá5wķķķ’dŒ1›ánĀ!5ī`&ą¯wfŠô '3€ws.—S§ĶQ6›ÕL$ĸŸ}â 5ĸQ}ꡇO&5w ×ÚŲŲąđ›´ö”‹ÆÍWüņ`΁ PĶī÷ĩ"Ųx>Ÿˇô+æ|ÎJ>€“b„KY§ŧ–V‡N1ŌÅmčt:J&“ĒVĢÆô˛öööÔjĩÉŌcŗŗŗfl!y=}فšE(žkdMĄō ,ßx<ļj+0–ÜĪÆ‡Â'íÚmpŌž'­ŲljooĪęŠz§įÜܜæįį•H$LDȁ´×Ęˆ°XbdA&´&ɘIŌ?lj’lAdÃxáKƒв*õB~@`Œfđƒļ đ ŗãĶx ˙!Då“ŅpиmŲŧŊ^ CؒkäúøŊī+€8ĀFՋĪa>ø6(€ UI$ŲŊ*sš\ =…wW’ę…įâķŲĄ›#9ˇ7ŠEGZRjđü0k ‡C•J%+ÅæA5ŌØ>tj°^§8 t÷3ĪčĻ ũáŨw+|BĨŲlĒ\.k<›ČŸØ'ū ÃSË\&JĀëaÄyķŒĒąXLŲlÖ 3ŦĖ5 ĖI–ē‡9,íkAаÁŗBAĒ•Z­fÚT˙ŒĘå˛I\Wô €VŽÅWĘ"hÜ3ëé¤8x1ŋˆ #$ŧŌ;áŅ/z†“ČDš\ļš˜JĨŦžķ¤]ģm'íĒ!Ât Äø–p8láß0ø!HônŠT*ē‚bápü¤ÃP ė›'té0­ ßĪb^†\fŪäBXY:Ŧ3Ėf˜Éd,ÄÍw˛Ēŧ‘bnnÎ܍ŨnW×_Ŋ2™Œ1pvRĐŪŗ<0al ãņX‹‹‹Äģ> +Ęëaá"ĒˆK‡•'(ĢF˙N”xN[[[jōîW˜o:IØ-ŌÕj5{>7îWu6›ĩšĐČįķšO$ô÷ī~ˇfz=Ũũa€—$Ö0FsssĒT*öŨ€fúįÂĄãØącZ^^V*•zÅ<‘dy1§ĻöĢĪ4 cĒa]1î ĶÛÛےdi_âņ¸ …‚ąŽ°Į‘tH333*‹fėáš=ĢËá€{†Qe<|pÎúÔ?Œ˜Đååe‹EûlRŊÄb1cđ‰„fgg]eDaBãņ¸%Å'Š3sÚ§PâZæææl]#üNHŸ9†F•qå¯Á—Ŧœžž6vZįŌ~BđZ­ĻķįĪ˙Ģú¤] m'íĒ!š"_vˆœœ’Ķ鴉ĀŲøüÂÎĖæÃæ­^¯ĢĶéXŽ0Œ#°†0,ĨRÉ@’O‚)ķá7^‡ë@ČÂ0đĨ¯ŧë5N›ÎD¯^'Į&Ęæ‰Ŗ&а'L›´$c÷¸ô€\_$ $ũEãG>BB^°{9˜5 $DĻĪ$™ö҇éHģAxƔ„Ë€ ĀĨ$°30Ā*CxĶN2™T¯× $Ė&/#BwhûŧFđ.÷‹ÅTŠT,Ąîüüŧ1ŌāH$ĸˇ­­i éOoŊU‰DŒ>Væ@اø Ž9bîV9ôŒTąĖĻĶiÕëucĢ`EĢÕĒúũžJҍžûĄŌ?ŽÂAŸÃF#ĶĘædî4›Íũpļ 2&q~öé/Il‰„æææ ÜÂÄÃXr˙žÉƒyô ›Đ7‡XAX_4§ápXÕjÕHØ1æ;‡2ÆDģŨļ´H’9(ė>16īE†Âxŧņũa“}Ä­]ŗŲ´Œ„ŗa‘ųw86ŗŅĪxlŠZ‚vņJĐ xž2*Bßō‡qū´kˇMā¤]uC˙ãEĖ0|j ~8$‰3ĩWĨÃĐ$Ā&P’áĀ›'r/đ†Ĩ j4Æd’Ã-H¸`Įu`€đɐy=÷@ČŗŅh‹čC d_vluuÕØH6߯\‡$U0`¤Ŋđ›@aDXô„“ĨCĶlzĩ+SÄđ, §út6¸ˇqĪâԞšš2°&ÉîĶ›|ØÔšÍĻŊFRč“2Péļw‹ķ~˜¯ėt:V-`ļģģĢl6kuŸûũžbá°î?wNà ĒÜ+ãPXŸžžÔ{åwÜ`đî“ ą°Ņ$‰Æ9›Ífmü­˙āJ’N<ú¨1ր4á^žƒ>lĐī‘HDĢĢĢÆ–ņ^ã ÉŗBsÉ=ŖmD̐ä@c\c~đ&BĐˁJĨbéTĐÕŽ…‰f-`ū–J%Ģ`´VĢXƒąH¨ģ\㠙ë Ā#eāX;ŧ+ŸŠ@R:ŽÕîĮãVŋ—뤟}‰Dé0ą>Œ9 —qBē˜ųųy[‡a)Ų蓚OÚĩŲ&pŌŽēQĒĖëļ0Āžqę%$JxŌ'dÅ‡ŪŽ…ÆЀQ!•J™>‹Ķ.yÛ`LHĶĀĻņEZ 0Vãņ~y64‚0}~CdĄŸŸŸ7—2ũ@( fˆaBL>š1l#•ŧŸĶģwĸŲŖz `‘<@c J@‚ŋB˜hŽHŒn !;Â|BcŌa˜›ÛąŧŧŦáphėP$ą'õh&lžl†°¸Įy挧h4Ē…… vƒi“Sl~„đ>á1„üH 3==­ŋųM%{=ũÍk^cĨŋ†åˇķ!;Ž­×ëč…ŲÜŨŨĩĐ/c†P(ΐņ́WŦ$ģŋééũJ0•PHīšG×éK0뀯úšvģmeÚŸ°´€Ād2ųŠœp†Žd2Ššš9{N€ņáph‰Š11p?„tĮãąå˙Ëd2Ē×ëω#} ÷Čá c†Œ<Č.HĻÍ(‹–+’q„4ƒg“î5Å5€$÷B:X87Ü`ŸīđkČ0nš˜ƒ<3ÆŦ!FĪÂf2ˇsssöüXgx-÷+R1>ųq6i×v›ĀIģęÆĖ)qqŅB-0T>a@ -\z>5 ‚jNŌ’l҆ŲÁũ‡-ü SÄ)qŋ$ ōŪP(dŒaG>  "sNū„Ŗũũņš˜Px,!šĀ¸~WĩZ °•žÁCüMˆ‡M‹´ô ŸSP:Ėe˜JĨ”L&=ķI°q{]€˜P'}I¸ĀÃŊųã&Žûe“įšĖ€fÂÁ˜Đ}yc,*l/ “:;Ø>Bü°:܋¤@Å úykkËBã|ßŋžxQĪįķ*¤!üLE†ŲŲYĢG Kʁckk+ )õŒ) > ņ/€”đ7, įüĖˌÎ<đ€Ĩ’Ž?`SÉ Č|Čįķæú…i‡Ib>är9 Ōg8t™G æÖ3ļĸĒÕĒ9–9”úpjīííāFŖ-'ē]œÃ’,„îÃ×0žŦqôũJļ‚™™wŦ°ųƒÁĀ1ĶĶĶ6ˇ›ÍĻIøüIģļÛNÚUˇ+Ëļ6#ÜęS‡H2€CN6N¤>įšOŠëpšüK‡ē4I&˜æ”n‰ ŋ^¯ÛûŧSˇ&é ép„k9šR… BĖÎwcRņ`„~{w0ĄkôŽüaĶH`ŦaĶá5’ė{}~9ŽVˆįk P@ÉfX”k;Ä}ēŸÁā°’ũ&ë-÷Ã폐ĸ‚÷•J%I˛° LŋŸ™™1†á?Ÿ$ŋôų•a;6G2Bc0I;;; Į:YŠč[GŽ˜ėāJāÛétT*•TĢÕT¯× @ĀĐTĢUËMˆ&gffF—/_6@H(z4issSÛÛÛ='篭­­ũw7ßŦA,ĻĖŲŗļ)ŸĪ›į===­jĩĒzŊnaîvģm}ĘôĄiyyYąXL<đ€^xá…ĀgÔj5Ŋķī4ũĶ;ßųNÕëõņĩ°0Zä„I˜ÖëĮ|… 631$HqÂéN¸™™™€CP`(2Ļ ‹Š^¯›(MĐ×ׄŊ@“ŖHás~Ōž)š>­ÛíÚæéŲØž_’ ¯ģC?€éĸ`ôĐ7ųt%°Üƒthø Ď~ģtXŲÁƒXŸŗ ™ÍŒ×6"dßnˇ-ÄOū;Ā+ũļ [ (õųÎĐ­ŧÖŦĶé(€M›DČ$)æu$Ž×ëJ¯ģî:c}øÖį—Ä“L&•ÜÚR|oO›GŽhssĶ€!ã†Ë§ˇáĀXáô=iT÷‘ €ĮuâÄ cũvvv´ĩĩeŒÔx<ÖÔô´ę×_¯üĨKĻUķ '$3ÅbĘårJĨRēéĻ› ā3GęɃ47ÉdRĮ7ķ F¯áp¨zŊnķf~~Ū*UėîîĒRŠhiiÉXįd2Š\.gš@MH"¨‚!‰1[5ī—#ä ‡ĩĩĩeáužIę $  ōu¯{|đAŊũíoכßüfcķ%*lĐ>”‡ÍËår*‹ÖˇĖØļh4jfĸS§N@%4O”ĸ×ëŠVĢؚÁ¸‚™ãđĀīš.dÜæmÔYåD= ”° ~„ IDATÉdė”î¨ac#đ‰z›ÍĻd17H2@ cą„%ü|$ÂE4Ø46u¯ƒ]DĶpbƒÚŨŨĩ$ĩ|.×Sˆ. ÅwyvãL ,T*•2Æ ĮŗOd,2n”ŌačJ‡ ¯÷RŦœOØ+9Ŧ@ķ†ō¸Ņ¯°˜„pųÎ|>ØĖ`AaEø BhÚļ°+Üc*•˛ū+•JÖG>G¨XÚOK„Öm0čuĪėÅĀČBīkĐõž ˧ę(‹÷“ /--™Ū°=55Ĩvģ­õõuīžv0­ÕjŠ´˛ĸôšs–Ū„)`ЗB”¤oŧQ§N˛j<āpxŋoŊ^×ÆÆ†jĩšjĩš&`*Ķé´bą˜8ØĐīžâ aŪ~ŋ¯ÍÍM´Ė5@;k ã”ę4„ä …‚E0HąĻyZÕÅÅE-,,čēëŽĶ7ŪhāŗX,jeeEąXLËËËÆF“Č™>‘d,)sļT*YÄĀWY__ˇ|§˜}ŲÃüqHÃ&"†]GëK ĻŊŠŽT*)N+N›žq„ûqĶ3Æ'áßI“&•@^•íw~įwtėØ1}ō“Ÿ´Ÿ?~Üū=õą}LŋökŋĻûą“$}ęSŸŌ‚>ķ™Īčį~îįtúôi}ņ‹_ԓO>Šģīž[’ôČ#čŪ{īÕŲŗgõš×ŧæŸ}=€;Â\lĐdЗdfttģģģVkĶ‹ĻwwwmSASÃÂ~eJ’h4jšöŧë×ëx[ą‘ĀÔpĘæ;=ČØŲŲ1f€ŗ„ŽË§3!d…Ļ.[* ´JŧĻĪW¤ĀŅĘī`ķЕy18âxō‘áĸ¤ą:åúbą˜…´¨Ö¸ōáBî@h‘dėîãééiU*e2ÂRņ¤_|˛[If”aCÚŨŨĩŪĖsâCˏDˇˇˇÍ¸ā×ĢĄ"¯‡ƒl6k<Æ2˜ŸcõēJssg2š=¨‹Ģ–žâ}$ĸF“….ĪJ&“f0i6›ļšŪö3†˛ŲŦyH:Üét”ĪįšĪÅEŨR*iķėY)•Úw.îééiQŅhTårŲ 3„˜°gŒ ú”Ü?°ĄˇD[Hî>9žũæ@HXŒ*Œ­~ŋ¯FŖaa}˜E€Īââĸ] ΌhũÎzÄxĢÕj§u(ŌÖ֖Μ9ŖŠŠ)]ž|YŲlVÉdŌæk`Žųŋ˛˛b߃Œ“˜5CKąX4æ›{ã˙h^+•ŠŽ?nĩŖÉĄŠa%“ÉØaËG`aR=ŗÎ’~`ŽPŲfž´ ø*lŸûÜįtįwęĮüĮU,uĮwč‘Gąß_¸pA›››z衇ėgŗŗŗē˙ūûõÄOH’žō•¯(•Jø“¤{îšGŠTĘ^ķĪm„_ aÔ50hŪ`‹ĐœqšÅ)ČæCĀ){<ÛÆƒ†Ë‡a$ŲįBÔÍfÄIēŨn3åķųą°ŗÉ(` aŅ`ˆHM Ņ|*•˛>€éōnc´’,Î>0ė›Ž$Kd‹ūŠ\.ƒĮæģĐnˇmcBßĮuxÆ5[ؕl„\ŊIA’U˜ĀRH‡)B€>‡šÁuŪjĩ,‡%ÚK6{Ø[œ˛ãfĩqų˛ŊŋRЍ^¯›M&ŗgĪęôéĶröc×+zÆņxlå 9X1_ _~Š kģJX-@X’ŨŨ]KúLRq2¯×ë æáp¨íím“Ŗ0ßZ­–å=wîœ*•Š._žŦ˗/@,s@)ɘ9ÂÉš\Îúæ*—7ˇI‡,ģgæ=Ãßl6ĩššŠh4ĒõõuĪOXÁ÷û}Õëu[[Ãá°˛ŲŦ¨mŽzŖ큈‡OË3i×n›0€¯Âvūüy}âŸĐ/ũŌ/éWõWõôĶOëũīŋfggõŽwŊK›››’dâi zųå—%I›››˙`) bąhīŋ˛ųPĄ$Ķ”ą¸H‡)ĐðųøÔžY@#Åûŧ A9Ŧ9 0›ŒO™Á"ĖBĮfkÅ5ąFÅ ›æĩa>ĖĘæBáwŊ^ˇĐL’ÔÉÆ°@ ˆB{Iî9ĪLōŨl.¤2üˆÂÃ! C ŖŖ×nˇU¯×•N§ (zÖ0ŽŪāŽąŨ" ˆ7Ģ$“É€9…Đ%Ę`U‰„…ōĒÕĒ1hņ$Y8pīŨž `üōųŧ*•Š=ØÜrš(YŗãķŧĖŖ’øwŧŗŖÖ@ĀĖCģßīĢP(HR`cO$ÆŪųŠ8’,Ä8Œĸ Åôô´)\Ö×× ŧs˜#;ũ[^]Uû āĖˌ.]ē¤L&cĄFŌÍäķyUĢUUĢUI „éŗŨŨ]---€ņĩļqh—J%ĮcsëK2 0æå>ŋ ¯ŊÁF›Ãķ—,‡ŗRŠHdƒN’i´…FC_ųĘWôôĶOÛZåkîh‰DBˇß~{Ā];Õh4ėyuđÆBŽ>#Ō‰pxŋ6sĩZ5 ÷ÍgrMäēDė#°×DHüÚÅ5ąfq€ũĢ×ëö<9´MÚĩÛ&đUØFŖ‘îŧķN}øÃ–$ŨqĮzá…ô‰O|Bīz×ģėu€'öė÷˙Đk|ûČG>ĸßüÍß|ÅĪũ Đ#äŠé†N’Ÿp–P!Ė×›Ãû¨Ž@ÚI–Jį ŦTAŪ3ŽĶ§mņLĸsˆw ŨQ*•2@ Ķ)É .0|Õ1†ÃĄ…Ŗ0hú ŧđLÚüüŧąAô+Ė‹:!Ŧ  ™ëņašp8l%¯irô!Aīâ&T655e ŒpžüiŒ¯á#… )¸?6ųúŧ.į”L&­œzEöƒ…O ÄxcEgYŠTy ëõē’Éäū¸™Qø 11‡_n –7[Kų yÖˆčëp8Ŧíím-//[H™COąX4v­VĢŲ<ÁTÂáI’vtpŅDBĢ détÚ 0gYpsXā ÁûŗŲŦąæČ98|y ÁĄ0Cx×'?įĪüüŧ1r0™Čōųü+jŲŌĮ„ĸÉĮČ|eėMMMéēëŽĶÆÆFLÂĘ1˙9Hō3@&ķūüųķ*•JĻSívģĘårĻí#’Đ.ųHY÷šÍĻ™¤ÃŒúœC4ntúԗŋäPĘ8áĀ …T­Vĩ˛˛ĸÁ` |>oFę¯ãŒöŸīįô¤]›mÂŋ ÛŌŌ’^ûÚ×~vęÔ)]ētI’´¸¸(I¯`ō\\\ÔÖÖÖ+>ģT*Ŋ‚9¤}đƒTŖŅ°?—/_–$"l|¸8}ę 6p/ā÷§eX#BU„' i’F†°ÃOˆÅ˙í•g*a0†āv”,“æφŒ/!GøŽMá5j0ĄūZZ­–ą"8ú$™~ɇO9­ō¸˜F€‡´ĘŌé´mtžp<BŸgāÍ1™LFÍfĶĀ €#@Úk ‹ģũöÛuĮwØuâđ|/ đ˜Ÿöz=ÍÎÎĒVĢ™‘m&ēPĀĩīĶ>€C\Ú^O €H&“Æü8ølÅbа}Ā Ā&Ė&ÆÂˆÎ‹%/zcĄa\‡lÜT€Áãĩč¨œÚaŪbą˜ą {{{*—ËÚŪŪļ ͇ąŅØÁ$roœÖĨ}fpvvVų|ŪL Ē+Zxmŋß7­}ÃČĄũĨĐŋá€đâëvģÜ‡ä‹Åb6ŧ+”úĀžĻãŪđ†7čg~ægôž÷ŧĮDû„¯øLr!ē§˙ˇäŠã^éK˛ÄÔĐÚĩZ-ũ~_š\ÎCtt>‰.€wffFårŲdŨnWkssZėt?¸&4ŸûŲĪę[ßú–Ūũîw+ëīx‡¤}Æđ­o}ĢŪûŪ÷ęÉ'ŸÔ“O>Š÷ž÷Ŋzøá‡˙E`If Ûä]q,ę\Ÿīų‚÷„8HčĖĸîë‘úF|†tČ.Á"ąČŗ¨sŪ(áÁ‚sĀ)ŸĪ="’‡Šä=’,¤ÂæfŽÍ˜S?š#Ø+ĪRa2A,ĪŠPse¸ČŗŦ0h7ØFBAlČ}Î:6Qž`†‡ūågfJc"+ŠTJˇŪz̞ŲŦ–––ė`@ÚBĸô ĨŋxžlV„Ņpą*ĸҍč3ŌlxpĘø•‚ŊCOâb6ízŊŽRŠd zÃ3ssŠŒFēU‡!Smž ˆŲāwË-ˇ˜{–÷^9Žų ˜NiķόŒ" uwwWĨRI.\PūâE­ hĪč úc÷ģēēĒįŸŪØU3Ƈ6˜ŦP(dŠl8 ŪÅ8âŨŋ›3&kĖ=äÖŧžmzzÚIĶīŒCŌ-qØa‚­įBXĀKBkī§/XspŠ3į0L`9p09ü2~8¸ÂbÃŪČÆãąļˇˇm-a~’bĮ웑c~ũÁ–×ŋøâ‹Z[[ŗÃ*FÆMžņ¤]ģmĸ|ļģîēKŸũėgõÁ~Pŋõ[ŋĨ'Nčcû˜~ę§~Ę^ķËŋüËęvģzßûŪ§Z­Ļģīž[ũ×HōéOZī˙ûÍ-üļˇŊM˙øĮ˙Å×Ķëõ,!GéPhM€!^˜Dįčŧ``|I5ÄŌ¤C`q•d'{BĀLŧ°‡Ë ĘÆMĩ €•´¤­@ėv ­,b(R6›5 íŗŸÔįŘXĄ–)ÎeZķ å×Āįû´"°/QčWúP ŗĀ3„ōZ6JOlč€yģŨ6íĻ$ܧOŸÖüÁÛĀ B‰ŋ‘Đ×>ÄFY7Ō„H TNáo^¸â^č&†)d H2%īŖÂ 4kŗXÔ0RöüyMŨv›] @’ūm6›f  :ķíųįŸ7đh…í$tî“ūfŗYsŠzũŨââb@K¸ģģĢN§Ŗãå˛žŧŧŦ‹/R†0Ovww Œ!YYYQˇÛÕ<`ׂ›9“ÉåĨ0qš\ÎôrÔÔϚĖ*5–ųLrHĸ]D/‡“ą KēũÁa ĻŦVĢ)•J S˜™dô-ëcƒųäį„åawvvLZƒ­Ņh¸†=å€R­VÍPä3 n‰JøÃX¯×SąXT­V Ո 0Y‘°žë$Ŋy&9ÔpõäIģļÛžJÛÃ?Ŧ‡~øũ}(Ō‡>ô!}čCúG_“Ífõ§ú§W}-:Ž-ؒL„OhT$ĩZÍBe°4h`ÖØD`•Øė}ԇ1`ŗXāŧ>‰MfeeEũ~_årŲôo+ôA,¸„ĄŲT¸oâ@ha@ˆũ'6B×h•Ų’[ŒSˇÛ „qK§ōŊ|ƒA DU.—SĩZ5&{ĐÁˆ #Ė3Ī’Í˜0@0ųË/ŋŦršl,Ā Gøމ‡°ũ˜gSčí˛ŲŦ677MŋĩŗŗŖBĄ`}†Ų€ •į;R­VMׯĄĨT**Øôz=]NĨtKŊŽŋØÚRˇÛՑ#Glü‘ęě –——uã7j{{[įΝ ˜TZ”+ƒ‰ŠĮãĒT*ÆôĄeûR{„‡ÃĄ ũž ŨŽž“N›`zzZĩZÍÆ$Ϝs‰ōŧΟ?¯›nē)ÆĨ^¯+šË{0ԀItč~q53čŒfŒXSœą˜›Kûœ8áa‘†1‘€Q>›|‚ĖOdLŌ…ÃaÕj5 ŅÖëu?~Ü´°Ėˇ|>oÚD/S@ĀüÆŊÍØ(—ËJ$äÍŪÄ%u’„jĩš–——íŪ`öŊŠ ļŌŌĐ9SN.‹™Ŗ6}}}={sŌŽŨ6€“ö=iŪĨ¨Âyŗ„œœ^­VKŨnׄā„Naˇ<0"Ä"Æë؜õ:ˇÔj5Û0¨!*)ā„C#+áŨĀ| @‘Í”kB˙—Ífš<„ׄ(^#nHnqLâæææ,uī,û '-NWĒuH2ã áUŌ›p_č`QiÉdŌ „ôäƒ#TÆ&äuƒŒ*BŽ0bpŊÜŸ+ɜÔlč¤MaLø œ­VK…BÁ˜f6}rMÂ*ąņÁ˛šŽF#KÔLø’CÅWWVôļ^ĐÂmˇŠsŠˇõÔԔĨ•Á€s˙ũ÷ëŽģîԟũ؟ŲŊ”Ëeģ4ščŅh¤íímI˛~EŖĮ|I$ÚŪŪV8Öúúē†RŠ”î;{VŨŠ)=zp_gΜ1 Ņnˇeå^ē„Nkĩš™<2™L€­e\PAc4Ú¯OĖønˇÛV5PÁķEoæŲ­ ;$Öj5{>¸ë›Íρ#ß7¸v€; ŗt˜ tjjĘ"ĖeÂĖD¤}Sų&;ĻjĩĐ ĸīEF‚Öc‘—Aäķyce%âs°âßôĄP°T7ŧĪ—Ļƒņ…­ÄĖW­Ví1í )%Eũɸ –’gâž´‰pŌŽēqÚĨT”t¨åō^@ôyĶ“ Čö!RBˇ>eÅÎΎH6 Āa7,;ܘBĒ€āU’éĮō^Bĸ„ƒønNō„:kĩšÕ:…AcÆõ+–œcŗ!}l&Ú(B„ĄPČR´ŒĮcĢžA˙ĸG$ŦÉŊ÷ íúMBlBŨn×܂Wæķ.KžŸg…>‹ëā9 ų ØVūO_ŌÜ0.|?úŅķĄ…ÂA¨Œą¸hˇÛęt:v ŦÉĪ% fS†1˙×dRSŖ‘î>sÆōÎQ[í( ēcą˜}ôQũųŸ˙šÎž=ĢáphPęļzW&ŒāāJuŽ}ssSårŲæT8ÖîΎŪļšŠG——Õ;`Üčîü{Wæ]¤U*cаņ°•333Z__7ā“H$477gIĨh„6yŽŌauØDÂÔĖc-€-dōŨ˛˜Ûūsš_jÛú:Î0b<úh6™;Iđ)ĸgŒīH$ĸbą¨oŧŅr8˛–Ą+Eĸ ɤŧßkaüÉȰ¸¸hL„ķČ4`X‰’øĪ%#ëŪųųyĶtNÚĩÛ&pŌŽēōÄyɆÁ‹ÎĪEØ(`į‹ŪŲęښN§cÉpŅvy' Oŗđ"ÄÉFS!&fĶÃ]*É6lî ą7a4@ųņ"‘ˆ•č"ņ3ė Ú%˜<Ÿ6F:,™ÅæM €6J>Į]¸@8ßMĩ ĀĖ)?ĸҍĨášÁXøäŌ„ãŽdüüŗf„Ņ€%öšųC¨ æ”Шtb`daaŖŅ¨åW$tˆūŽ0(cāÂ&‹á@0XJŌ ›ÕĶĮŽéíîæ-ä3Ņ'Öj5=õÔSj6›ęõz* J&“æVŨŪŪļ°ŗgŋ{ŊžéĪø?Ī—×RŨc<ëæo[ų~_q°ŲWE!ŦÉōŒÚîîŽÕ1ÆS.—Í$Ák$ËårfN ĮŸ×áÂl5›Muģ]ë×jĩjsV PÃakccÀ'ÖRĄĢõsí]$ą:cŖ‡3Øéņxl3ø˙Üܜ–——ĩ´´¤Õj5̆ãus^v˛ĩĩĨFŖaĪ‚īā}°ō~ ŠĨŽ9rŌ7UĢUÅb1---)ZÂéŊŊ=ĨĶiĶwÂļķyDЖō…¤^ĸy†qŌŽŨ6€“vÕ '/šRoĀļáFec¸Ā|\<(ņŠQx ÉzŅų4 4ØI˜$Ų‚ŒF†P&5?Éģ•Īį•L&-ŧD%*k˜œĒ’Ŧ<šî @q%Č…å„‘°ĶéčgÍŦAĩ6ą~ŋo āÃ“ÍĩRŠÛá]‡O@—w<“Ļҏ´BÉäžŦ:úŠŸ÷û}c\RŠ”}ļ­č›ŸW>™ÔĪŽ­é‰„ž~āöŦ×ëĘ!0u’ė>€ÕRФ—^zI/^ÔęęĒY¤„1™‡>TĪī1gp :zô¨îšįž@:€:īÁA• 1$H÷"ÉÜēŦ!ä?Dz÷ˇ— pØ#DH$^‘ŠŠž­T*ö~@8ãŒgȚB:@Ļ—ĢĀ⓸ppŽD"ZXX°>€ Ļq€@ΒJĨlÎ4@ŽD¯]–d‡֕šššĀsá333cŅ€IģvÛNÚUˇnˇk›„$;ÉŽã˙Ōah˜?„Ŋ†P &.•d'zĀ#Ą?Ø&§c_ŗ „Ūw.!OöH$bZ(Ÿž‚ĪN&“ļĀs"į0z–`ØdaäØä|ļ†ŠD“H#Đ'aq&“1§&Ŧŗy‹EûNBÛ°v>íËp8´š×į]ÉėxíĨÜcpĀąKb€Í‚‚ÉcŖfSāÁøđšž’†OO‹Ë3&ÄÉĻÎ3ƒÁôF@9Ũ¨āÁuļÛmËÍF)ą—ôå•ŊëŲguljʒ ķ,t€sjšŌä™'“IEŖQ?ô)ZR*ĘĐOüÎë]ƒ~čŲguŧÛÕĮNž´&ÆĨ~ŋoŒ´Ôą% -,,˜fSȅ tᘘf5R÷™yŒ.9Čŗ&ßåu×]g)mîŠTĘā\ °}ų;$!^ˇØëõ,­O5ƒx4iqqŅ€%š}Ē#L"ŠcxFŌžĮ;ī1gĖĪĪÜú¸€yŨh4R:ļõ Ļs4ŠP(XŸõz=;pPĀDƒ}ĢO "[˛s8ķEúĪx^3i×v›úĐ?e´Iû'Zŋß×o˙öo[åBT,ļ8; WH‡IU}ĸa6NDōR0q.áDÆųP¯đ 탘;~ÆČįŖg’d⇰‹2ė\(2g$ā`CŲ+˜/´lNÜ‹ĪŸ¤O†ÃĄ"S!}߉b3cm7öôx떒ŗŪœ °¤Tāũ˜<oüŸĐ „ĪIÆũĄ+ōē#Ø8€2éD‘w_}q|"‘0Pķ€Hžp# „ˇ„¨|eĒĩ4›Mc‘ŧ39“ÉØ!Á;;šOIn0…p\ ×påũ0¤.ØŌ¯§RzëĨK:^­ęąĨ%ÅR’đ::žŲ$ĖÛãĮ4ĀŽƒķ…w4_™Ļ×ëé†fSī{ę)ũ_'OęK5‡)Ųö“?ų“ĻĶôÎsÆDˇÛUĢÕ20ŋ<ÎĖĖčæ›oļēá^_ę‘.<ĐĮčĐh4TŠTŒžššRš\ļÔ,ąX˞˜xöbÖÖÖ €“‹† @ëAĪ—DŲ8Žũ”ADRëwaaÁ@%Āԃ$Ā$ë ĄhÆ 7îõc } SOŌlž=RjJĶŒ‘ršl×LxF’ZȒ,G) œûlúÛČpž}öY}đƒœ8‚¯Ņ6a'íĒ:"¯]ķZ*¯YƒEōÚ/’1èņz6C˜?JØ#Ø­BĄ` žvŗĐ!h‡9!Ė Ã@.3Ÿû΃I = —Åœ°(ėŒš„ęŅhÔōÕIzEʛ#Šž>øÖĒ~å­MŊfyJ˙ûŋ}YjéĨJ"āŠ•dڞŅhp,˛!Á b ņš$úúŋééie2™@-^_L’ Éų? ũåũņci IDATSäxƒ âüD"a`‡žéŒ:¸kŅ-J˛ vĢ$Ë}SHø“?G¤\ŋ׎Šn+ƒģt4i7‘ĐīßzĢnŋ|Y?ēējŠkßÕjUårŲJ’œpÃ3¤$ ×ÅÂQjÍ*÷Kâįév[īyė1ŊœH菊EGņxÜB¯H‚š¸īd2i9ûŖČ6$é™gžąđ*ōœ|€ŗVĢ™c0R¯×ĩēēj 3+›ÍjffÆŠ;vĖ@-&$ãņXétژæŲŲY­ÕXL ;x0==mú=î—à ’¨r¸ī­­-Ķ2ÜÛÛSxgGŋöÄ*v:ú_īŊWk›˙ôô´åC|üņĮõŌK/ikkËhŽũJ§D_"‘āAZôĩ>#iSčW?žyNČ1`œOĖeū_ŠTLs  ã3ŅĩÆb1={ÖÆ8šķ8hrŸ~ŗ† ×Į6Īqį§R)ËÉXâđčĢÃ6z'?ķ–ëhÁ.2ž`Î)UÉ!%™LĒVĢ)ĢT*ŲÜėt:J§ĶVM„į‘Ëå´ˇˇŸę fV€ ¨#LĖzëŖ!^súĖ3ĪLĀk¸MĀIģęF¨Î3f#˜+Ÿ3ĪģaqēqBfÃ#ÃÂË"O¨†‡P ĖÕ&h„đ```Y4SŠ”mvœŦŊsĶš´ØĐØ@Ųpø\@áÉT*eĸút:mbėT*e)UĻĻĻô'OĖj­Vq~OįJ3ęõģ.ßŨ˜†yCcčOü’ėˇK ˆęųÛë@—œnŌaų/696BIVXŪŗ„č|¸‹×)ÉRRę¨I ŖčÎh=ũ8Ŗéb•ĩ•SSS* v}äHķŦ,†īšôalÆĮ'NžÔߎŦč_˙ēŧtÉ@+`ÃI)ëûÉØÁP0==­jĩjĖf4UĨR1m4ivgGŋņøã:V¯ëšī>=w*ęõēšINGÅbŅ€+ē2ĒaĀ|ŒâfĮE‹+–„ÜÔĻfŽ O$:æåįll­V ä1ÄԁnF`CčĐÃÁ €‹ë̊÷Ëõņ9ŲlVš\Î>ƒĪķÎé#GŽ(™LĘ)"'F6×Hš255Đp2ū‡ÃĄ\Æ?´t:m¯cNp8dŦĄ3ŦÕjf âđâĢũ0˙ĐĘ& ĨĶi“ p/š\ÎĖ8“vmˇ œ´Ģn>…@‹rhh÷|†/ž'‚î…P'[ÂRäö"í%ZĪ(° !°öNTßÃõÃx!æfķ`1ön^ccœÆkff&Āš™\s„˜Žl2’‹î/đHD 鈞r!ŽO~%­{OôôË?ØĶk—ĄË¸…fffė:z° č*•œøŲėŅēÁ R.IĸšŠĨ_yfôĀf­ŅhXĒ6Xž÷p8T:ļŧŽŌaĘ˙,Đ)žxV€BtŽ„ØԘÆx#ÉŊ^Ī6îŨŨ]KļpqqŅLJ€ûjĩjŸ;õŸnģM_:qBŋđėŗzßK/)ŽÃ„ÖŖŅČ#NĮžĩ]qŠ7›MŪ$ė&}lM¯×Ķëģ]}äo˙VKíļ~ãžûôÜô´ãT*w°a0͌9@) &Šväõ …B#‘ũ:Ëét:ķ’DŲžĐ‰ōo:!Ū……h€â………ˆa>H i&“IÍÍÍs‹QˆtPĖtT(l,bō™››SŊ^„žr¤ąbŪ“˙ͧNâÃ0Ģ0ÔÚFrá%Ō~hC FĪxŖįõŌ€Á``Œ'Ŧj4U>ŸEäâŌĨKfÎXúôU‰DBƒÁ@Åb1ĀâOÚĩŲ&!āIûŽ!āšš9ĶMČ`bĐÜųŌa’l#ÂT€#°Fčí! ˆhņX@aŒ|ˆ3Â&‰fmvv֜z°ilöˆš 5ŗŠ˛°~"læCŦ¤sáúzŊž9úø.âūbŊĪūĖ]›:ģĶ_NëŅ33ĒėDôŪûšĘ͏´ÚŒi­zwzŦ;ījŊ1¨K&“ļ!˛ĄžcS#Ü Ķâ“ČŅĘŧ`MyŪđã?ŖôcoöŊ•d?'¤EIÁ+ÃÖ>מ$vÜa°pĢzĸ$[>7â•yiŸ¸EŖQ3˙øt%ŨnWŗŅ¨ž[^VCŌÛŋũmŨ}ūŧ6Ô=p|˛ÉK‡ĩ•)ĪįĢX$ ]ž|ŲԐ`€ …BJÍÎę§žõ-Ŋ÷Ģ_Õf<ŽßxÃôâÁ8„-/—Ëv`ōáįšš9sĒ6$ÔË ßĪ…BA ĘįķđŅ!r8ØÚÚ˛p"ĪƒCBĢĨRÉJÎÎÎ*ŸĪ›Ņ ”:ÂŖŅȘP@ĻŒŦ)hiY 8 Á´˙đ˙°N:e% ‘x-`(2‰niæ™`īßŅhTĢĢĢ’d€  FĨŠŠ)ĨJōųÔN(ÉsēŊŊm‡ ¤Čŧ -&™ ˜_h%ˆŠTĘ"*›››Æ^ĸ7ŒFŖõįk_ûÚ$| ˇI)¸Iģę†V đÖnˇÍ€áĢdĀŽžāg,rhe€CNÄl ,|l€,ÂlĖ82aļ KûĄË ;vL’ xJ‡ ė‚$ŽmT˜°8˛#—d,(aT6@>C’:ÕŅ/?T×ã2ÚmÅ ÷õgĪÍ*$é7.KĄūĶNL/7æô+•õúŖ{úŲ­%ĩŗļQD"ˉĐjĩāĻpCˆŽ sK§ĶŅÎΎ…÷4ŧæŒīEoI2Zú‰gËgÂÎųZ¨„Ā /ng“âšĸ=„ŨD? ЂQdqØlÁ\Čq”zŲ`™Ã ,#Œ#Z1 'Ķ33úâŠSzvqQxūyũOŸûœ;qBuĶMētPŠ$Ãá~`’ 3öl€ô^¯§q§ŖØÜÔÛŋũmwvô_NžÔ_ŨzĢÚŊžBîsægô„o_ÍF°ŅhX*Æ ė8Œš1/€Cgéú’,A;Z7ÆĶĘĘJ€õfN › ¸Î%ŲÁ…ųčĮúĶfŗiãĖK ͕JEŲl֞!õ‰ŠEL´ ^¯+NÛØáĐÉ܇IeŊ ė ×¸ÃøÕh4ĖĩÎᔹGßOĨRųĸå`FĨ˙ŧ‘0 Ģáa–™÷‹‹‹iaŪ3‰lLÚĩŨ&pŌž'͛&8Šsšf#bÁņ)1Đ¯ųT ŪĄÉæŗCˆ‡!ė áOŌ—°qōĨÎ/'rÂlW˛’L;ā`cöXxY”Ų4`‘¸ŋI ķųƒĩޤ4?;Tcu?lĮõ/ėį5ûoŨĐmË]U:M]Ÿ蝟ZŅV}¨™™ũdÔ¸ŖŊÚkņÚ,Âå€>ú’ëG?ķį #>e !öh4j%Ö`ā2™ŒZ­V íũ üņŪQ‰nRÚ7ë„B!e2 eŗY¤’LčģÅ5Ō¨ƒŠ&QÚ?t ?#DÎÁ‹ë‘D"eŗY…B!mmm)—ËŲØEŪP‡õ›>¨:^?ø­oé__¸ —ōy=zę”^<~ÜÆ™ĄH“ɤ666´X(hŠRŅ›ĪĶŋ:^ņŨ]=[,ę×ošE[šœĻŒ„pŅĖææųԐOĀV1æŋ¤ü°{],€˜<ŠtttŒH@ Aĸ077gFŒ •JÅ4ĢR8x‡1`fvvÖj@c’ö}ĨRQąX´HF“zŊŽ'žxBívÛBŰûąXLĨRÉÆáââĸ1|ŒGØ<ØPĒŖ0§~8˙/ŒKXiÖ˜Ô|>¯Z­fF<ŖŽ/ÚK@íp8ÔÚښ"‘ˆiHˇˇˇ-Iĩ×üU* ás8}öú›ožY—/_ÖŋÕl6˙9Kû¤ũwÜ&pŌž'Íŗ5lĐŲlV’Œ‰ƒŅƒĸ 'X@, !<66ī ”dLЕ) a’ ›Ã°QŖßīkssĶ4€P+ô-‡4 SŃCO4uà 7X%Ū ŦT*6g‘1ŒĮcU*•Ā!& ŠZ­ÜūŒ}*ƒ„BĄ@ c–qs3^}etyWęX™ī|ė7@Í,‡XtĄčwĶétāĐGH2üz…ÆŗĶéheeEFCĪ<ķŒfff”Éd&Ĩā&m'íę '_ô),ČčˆŧS–Ô->ôweōfŪ‹ ũ €‚…œÂōžZĖĄ-@Ÿé ßíuœ¸ŊΉđ5!$R¨H‡‰Ž1x–‡æöčžújîŒôŌŒöfR*ˇËēyiŦÔų”]Ûî`?Ŧ÷bķ:}õķ%5Z;ššŽjjjŋßš7´]’Í%ŒgIØØø=đ`7č@áUĪzđ X•xūlŠ<[Ÿĸ€ KC• X)I'Ÿ)í—5ķ._ƒŒ'Æ^(2'):5Ÿxà € ÃīHO‚D@’9,šŪL&ŗ”ôĩcĮôäŌ’ŽtbcC74:˛šŠΟWĖU¤I*'“Z[XĐ7ŋīû´ą´¤o&R4ĒvĨĸ•ųymllØĘfŗæÆD^'į Ļ€nn 8@éOŸËĀ É<ĪŨŨ]ĨĶiĩÛm-,,(ëōåˁ°ĢÕR.— hö¨Î1U,ÍLxraaÁÆ2ú7?īííŠŲlÚŗŗ~;ā‚f~J27Œf8Vš\6FĪ'2'ŨŠ7‘ÁRōLIlÍ\ãĀ—Ã„OuE”×kÄD‚D…gĐnˇ•ËåtáÂ?~Ü"ŖŅ~ĸįååec394öz=˧Čn6›æ¨ît:JĨRÚŨŨU>ŸWģŨļC°t¨‡´kģ…ÆŦړ6i˙ÂÖl6•JĨ”Īį-\ë͆°H˛MÂį;ƒ)bŅôÎÉVĢe9ŗ‹hÔ`âp’/“ŧ¤ĀfÁI†W1z(^ @A3…Öö  8"äëķ ‚ ;dø÷ëûŋŋĄ_¸ŋ,ĨŨŨˆ–Rģzęb\_9×wĒķē°=TwU8Õ^8Š­í˛NĀ3õM{{=áOÂt><ˆ‹Øu›gF86­ázTĪÄ 9ėÁXx—*ė ›Ÿč#Očw#ÆĪ ōˇ7­:<%‘5×O‚d´X‹‹‹*•J–‚ũĨ斗—íús€TĪD;vĖÆâp0P&Ķ(ÖV­ĻšųyK 䁎īc˜Ą/777 ķũ°P6æ|zX[Æ!Ķ7¸g“ɤŽŋūz-//+•J*ÁLHN­]ŌŽđŦÖ×׍ĄČaܨT*f~ŠT*R…8UŅā1VčWÖ@ā6āžN§Õjĩ.ãd2iãŠÃ˜O=ģO˙&“I{¤ŗŠTĘrâRŠd +ĀŽëEÈČVŃ˜XĨĪ}#ŽĮΝĐLh ×,öĩ˜ØÕÛnëčuË=ŨTč)/+’Fcé›kqũû˙{ÅDál„ˆÜ;NĀŲés–qžî2i4`Lâņ¸Ŋžž'„J…î·Ũ=3ĮûAĶĪ0ģ`ãĢeĀА"0į0=ĀfNOO›Ļ3 F+˜]„‚÷ööT( \Áza‘…ņĐjĩtîÜ9?~ÜÆv<ˇįēģģĢl6k‡˛T*eĀ/™LĒŲlŗ†Ņ} )æt¨ƒF#HFxdŦU’,áuÆTĢÕ˛×ņ!ŦyôëL¯×SŊ^ב#G‰DLĢ‹ŧ‚C5´777' ā5ŪūöŪ=ÆÖë<ī{öũ~ŋ˜9sIH -SĮŒe[”TĨRYŽőmđ°lR#_ū¨ ĒVEZČ1ׄϞ $–!V$VĢ”–Û*ļY—Hĸ#3")ꐂ˜*0ų˛=Æކ;==5†”ëâÚzŊžBĄ†jĩšI$ŗT،1žyoŊî—÷™dÂáÍqzi6˜ŠÎĪĪU.—mlŒĻcÃDęûëŧdvz `•÷ ĐÆÆ€ī’d™–žÅ¤˛ĀXg~JĨRv^ĩtæŲR˛Æ°s||Ŧמöĩ:::˛yĶK[Ė\Ķrš´\I~žjl6kúÜ ]íĀ ŨwãŒ[Ę ŪĩĮÄC,B$17ē2˛ã<C?ńΠ€C÷Æî|6›™v‰2¤wúĸËįķŠĮ㖅…Ū×ÄįsēwūĸGba6læt:ũæDģųī_ûáĻ^÷ĀT˙đ˙ŊĻŪ4ĸå:ĸ˙ųŋŧ­ƒÂ…N˙ED_šûÍŖËÎ" …¤xøBĶiÄ>ģßīĢT*™S“~ĸcŨn×ÎÔmĩZɂƒæã5ŧ¸ææ2øLPbĨÔÆyË,n°n$= p ‘ L&ģū&][ĄP0Ũ›ŋŪjĩĒétē“ Čk0ĮD’PÆ …BjĩZë#ÉôTô“΍Ėd2;âô;l úÎL&cÆ tŠl8ĸ”)CRvČ{&ĻæîŨģļ)â"ˆš2?l†ʁ^gÆĻ€ōņÅŅ^|ņE3Qpˆ4 ĩ‚ãÔ3S“ÉDŊ^OĨRI'''* zéĨ—ėŦYLUœ+͑s’Ė‚ŽР˕ĪįM7‰DtįÎ;ۖqŅnˇw¤ ’ė9øãūüi>”¤‘OüēŨŽÅí´Ûm› ¸W6RŪܰBĀgRQ T‹ƒœRnģŨ69U 6)ŠTĘ@ûÅŅ*•ŠUšÍæsŽž˛ŨnKÚHbčgXQ6Å˧Č0ŧ)&hWˇ0h÷ŨБĢŤŒuģ]ĶņąģfEÛ%mØ ~ŋošvāüŸÜ˜Đ˜ä1 ;úķĘ€J˜EtS€&]>Æ" é…^°’v,ŗcŖ$i>čU{ }mŧuĻūWë¯_Ÿę—ˇŦĪ|#Ēx2ŖTxcŽøü )=}ŗī^GB:îGtÚ_î€MN’AØXˇzŊŽŅh¤P(df°ƒų0 ķâwL6+ōČ|Ļ͗ö`€až|fúËGņP˛bąÅĖ5z  Õ;Ė}Ø8ė&Â}_ރÎfŗ–áČ ‡ÃrŅJaFņšRŒŊ[7•J)N›č]æåryįx1ŨÂX$ʈņĪĩ`Rš}ûļĸҍnŪŧiĄÚŧ/hŅ3ívÛ"‘Ãh:Ųė°qa“ƒČ†MŖ$ë"[$™p“Ž9vîđđĐ@c‚ûL§ĶZ¯×ęvģæĒEĘáO'ášų,ã6˛T*Ų‘ožéŽĮãüŒ|„æOĸŠVĢĻiD"v|]6›U*•R¯×Ķņņą_,ęvģ:88PŗŲÜ1†Q’HrŠd*ō.˛!åÚ/Ë#(•3¯ŌG~nŧzs˛ (ī6ČAģē-€AģīÆY—”ÖČ}CgƒCV’•Ŋ˜`1R°ØĸwJ$faqĸü’Īį-ßOÚęa|ZĐtQō”d‘DŠHÛxÎ}Ŝ đZA@O&žÔį~ųT˙bVĪ×,īîZaĄ\rĨģÃŦâÉ´ S}ü§^Đ|=Ŗ˙ņɊNę 7;ú“FQßh…ô“O<ŦîEH‘Č& ×륤ž,Nŋķ3Ā‹…Ë—ŗ‹ū¤JÔa—ЇCc ø"ž‚{ØSž;@ĀË÷S>÷Ž\˛×Ęå˛ąs”WéĪ~ņ\ø>¤•JEįįįZ,Æú€aáø}Øú͍WĢUģG÷ËĶB,JĨRąÜĮÁ` t:m $åāP(dŌI怯T*;!ÆhšĄPHׯ_WąX4VŠū$œŨĒ´=ߘūōāšû’d,ßjĩŌŊ_Ī IDATŅŅ‘bą˜š”‰záœ[Îŋ- ēqã†NOOÕnˇwōåö÷÷ Ė…ÃasĐ–aÄ{DŽbŗŲ4† ũ)ƞņxŧãđît:Ļģ$ˇO’IQŧ f™jR6lZũü ϟŊ6¸Ųl+Œ‰R/Q+ô7y—’ ÄÕëu ‹g!Žˆ9ŗė3Ĩ~J¸T_"‘ˆNNNv\ú0j4fz|AĐA `Đîģ]vęRvcŌ‡m`÷J “ îZīļ v„ #ĢĶ阀Ÿ¨4NhŌ<ëÅX€iðøŖœ`øLbFp,"°Fp `ਜ°YMôģ˙Õ=}í4­'ž\ĶÅ|ĢyŦæÃJÆÖ:Ĩ•ŽõŋũÔ}ö…œūģ˙ë@ãéTo~x wŋЧ𩰞_ÕtûxjKÉ6…ō!Ā‹E…xŸCV,­‰KĖÁ˛ø|8zčßW”͏w9Įƒč­ åT´uŅ^fo`Ÿ`d$8tĨ­Ļ –@Ęķ€ōü<E;ƒÄwŌĮ0&,Ė’,‡˛T*ŲXBGę™JfĨ)‹íííŲģÁ ãņxG!ÉÜįÅbŅXsú´×ëíDīH›M ĮŌņüqįˆ|¤Éew5ĨVūĨyœô~ÃÛÜh4´ŋŋo›ĻP(¤^¯g–¸ĻdË{ë6ô}<æ60įhmŊ#&’F@?Ī–KÚ˛„ŒUæ˜H6h^[ …”Īįĩŋŋ¯;wîØĻÍ's€ŧRИF“M(īm¯×ŗëėõz&‹ā{­2÷ĀfŒ~dķ #ÎwĪˆxfÄīœo6› ‡ˇĮ2ƒ 0h÷Ũ˜´™œ—ËåŽÎ -Ž?×ļH’-Ö~2&ōÁD^ĢÕlˇîM ėŒaĘr$áŗøs­$ôÃĻā0ä~(ķy0P„G›˙| OüĖ=ŨnĮôßüËĸ:͈æķ™Âábą¤žōRDᝓūÁß=ŌöĐH˙æ…ŧ~ųw+š\,ĩ_ ëīÜiЍšg9[p$í„'srB.—Û)Û˛ËGŋ4›Íė´Āų€ŖË,Jņ”Š$YŠ•˛!GGŅ' Vú1>‹“w‚RR*Ė5ąØųØ Ÿ)É÷ų3ãÂGž`<âzØāŽHy)‚$ËHŖQ†øą8Sԃ}äȸx88°€aŽÁķåU62ū‹áph d.—ĶŨģw­¯(ĄN§ScĮØā¤Ķéāpú† ‚é÷ûj4*‹ös8|“ɤąŊ™LÆN.™N§jĩZĻ# ãNįŗa÷ËãņXƒÁĀB¨ņ˜$Čgô:ˋÍy율Á;õõCŗœ°Â;qįÎcķ˜ƒé Š {ņ؟įįį–āå¸Ģ H ĐŋRĨ`3@4 ŽRФétjī:› æGIÆNōn!ˆÅbęõzv2ss` Zø?õíå߃ÁŽHßģ*™ÔĐ4Ą9ōā͟$á™5&a€Ĩ@J3äÄą€đ30 hkp čąĮĶ7vI;%Tô68ņ`ŠÆãąČX,ĻČúL˙ûģŽuXšëø?RząšT:•üfôÆÕų•;Q}ņĨ”ūÖĢû:Eõ߲ĻŅ,¤ëš‰ūëŋyǎüĩ‰ūūŋĒj˛Ü–TŅûqgˆŖÔIé –“˛9%Āßx<ļ>ā9Ā2Á‹Åĸ@NĨ(ØĄËq,d“ņ|aHxÎūz)ŗâ@õ€?.S@˙Đ?€?bZ–ËĨ:Ž 0’äãQƤô—H$”ĪįͤĀĪMX6;JkhKéKxĪÎÎÔī÷54 L›ˇ^¯ÕëõÔëõtqqa›“ņxl‚|JĮū Yî›øÎÛmˇÛēsįŽmtx’ėŲžˆųøŋŲ𠀇ŽëœĪįj4ĻiĮ‡Æ ŖŨ]¯×Ęfŗ:::RĢÕŌÉɉÚíļ†1[ŧˇœcÍāyųđo˛™ęüœ—-āöÍd2;Y•l"`‰āá31žĐĪšĪį Ļ „iÃU,ÉâočīårŠÉd˛IãKíD2ąQÚÛÛĶ­[ˇT(ėŪšsĮÎøFˆŒ $šĸžL&“æĀ‡…­×ëώ†m`Đ"øĀ>đŸú"‚öōlįįįú•_ųŨ¸qcGEɍŋCĨ P´jXœ}~Į(ÁR nĻėEYE’ r€”x<ŽüÁÔOüÄOh<ëK_ú’-°ū2ÃŧPá: !‰(šĐ'ūŪ]e+/Bzëˇ_čīh4•ķs-–+ÍfgŠDSúĖ72úöŊ3=Tëo><Ņ[ŋmĸŋû×'zxĄŋ÷ņCũûãČNH˛ŸđY,čK@ Ė׃đįŦ0 <˛×ĐQÎįsĶĘąØÂ¨YˆaíxΔr|‹ŽĪĘĐŗøÁ1`*’<@›$@Í#fŅc‚–kŧRƒÉĄ$ĢÅ=r0ÜëõZÃáФžÁ¤äĘûA” æLWŸŖ'mķüx4˜Júŗ^¯hĸôĖ= {ļü<`ÖŨk%ô7R īļÆ= đåû0™&öööĖtˆÃŨęM ‹Åbį66&Qg8W,ÖjR.›Öä|­Oũû´Ú“¨bҰ–ëūõŗIũÃ˙§ĸo´b6ySRFŖVĒˆz)ûuĮßáėTāF‹ÉīOážVĪl6k ˜g‹Đú2*ė L. :‘02\Â|: ,L Æ@,eNė`J(ő;Į}ÁVzÆ”Ō´=}-'î…ņÉĩōpHÃ4a”ņ,'nO -lÕčôčwĀ ‡|:Ū‹bą¨p8lAɰĐlj:ŽVĢ•i)ŗRΤ,ŽáŠąhąÂ´âĮī8,"€—¨$_–¯T*ųÂī´ÛmĶŊ Ë ”¤RŠd&õķķķ@oށwg5åfŽLãz(õčĨ-+'mŒH0{ÜcnĩZŲĻ īYfŸ/=sō Ÿ íP(¤\.gã °ŠÎ1ŸĪ+“É؜xzzĒããc{Œ+6ԟßy'ŪĄīO_ āÕn0h) M Ļ @”ĪÁ‚Qh_L&M§Bč,@Å5(M^/†f‹ÅZڔ‹ūčūHú§j”ô(Ą ŗC7%m`ø‹‹ EÂŌ˙ųŽ?Ņ×NSúo?y]§Ŗ•^8­jĩZęg˙‹ūéãwõÎßžĄŠŠ:›Œ4;Ÿkšœk<é_={]˙üOļ%ÔÍõÛ7N-Cm<ÛC™‹Ef…{ā„N!(‘'É: 6‹7⯗ÎYd}™ LŸÂtyvöƑgƒeģüÜŧkŲ;Š}Ž$€…ÅÚ÷Q$Ü'…xú¨ôôĶOëŲgŸ5@Ė1dŠf25 Ŋøâ‹ö~`¨üv:Ûėąąņ)˜ÚÕjeĮÖņÎRöŦ0ā68hWģ `Đžå˜L&-bB’ą€&i{ęĨ¸P(d Î,v¸K haˇMŽå+ô^D–H˛Ev4a‡AÂ-ėŲD-ļæ‹Ĩūõŗ)ũ˧˛zŠĩT"—ŌsĸæËˆŪôŠąūÖ#c}ōß%Œ L§ŗßŊS-Ëo.ŧÍį ~ëõz'‡“¸oĪdą¸xQ9%'IæēåĪ0üˇ?V Māc>ŸÛõmĮs€ĀšĄq# Xdą…ąĨņ˙>ڂgpÅ]ĘuÃĐyC Œžw}˛1Сhųč4Ŧl:0a*)•Ŗ;ÅÜÁ"`$ĸ $2‰ “×YđjˇÛ&ƒĀ´D‰1Ë1iž)us,”%pĄæö&L#0ũũ~ߌŌÆņK‚ˆ Ā8Κž´ĮãSBذžžžšË×=ĀėĐ<`hžčlL}ôQÕj5}ãß0v¯\.Û5p’@M#ep<@žŸyäåķų3 s)ŽŲŖTÎ|âŋ›1ōÔSO ān ڷ܀ĨRÉX4ʨ6ė”)EāZ­VĢļˆ2ų@^ÃãĪ f‡Aō™n,RŪGŲ m‹;bL€@v°m,fŨŗ˜Æį!+;Î/ΉÆôšį—ZŦĸú¯œčûž}¤O?_’by…´ŌrĩÖx<ą Ãl6g9]ėÖš_@nPoŠĄY ¸_˜Jj>ķ ļæƒÅæ€ĪæsšúĻ‹˜ã} × s”ļ™/iĢĩãēp_#ZįYđyū^}Y­9s|.›˜ž/ãĐE Æ Ũ)`šžDCÅßüčwŒhå0`:X¨Ņcp`Éŗ¤Üā„qÄxņīYˇÛU"‘PĨRQŋߡŸķL.îĶHds2L!×Č ‹>Ķ3¨<2øxga"ŲD1F)›K2-Üųųšnܸa}`ađw¸\.­JĀ8&M)Ī:4Ŧ€:t‘oāC’•‚X30Q0덋Åĸ1Ež”ÅĸÎĸ‹­T*Ųâk€KЗĘĐąYčęų…æįĘå úØKúÍSS)ĩÔ?}üŽ2‘‘‘˜rŲ´ą¤Äŗ°`r6§$+ëņߔÅO @´´eWa=$Yŧ 8.fĖg`p"<Ԉāɚãķ)1"ĒįZ<8$ōôĄé‹_üĸö÷÷õŊßûŊVR¤ûąĶSO=Ĩ'Ÿ|RO>ų¤žzę)=ūøãßŌĩøR HˇÛ•´™,¤r(ų’@„Čvö0’l2K$VRaGĖdLhą_Ü(ƒĸ‡áŗ`[`Ŗŧ!Âģ÷øŧN§cģũhts’„ÅH(¤õjŠŗéLOüۊū×Īí)›XęŸŋëļŌá‘zũáŽAÆģE}Iˆ~珨œŲšJĨL“įã8lū\dŽĶëõ¸'ÜÎča\`8VĢ•i˛ü‰ >Ę66Ą\.Û÷đy”Ö1ãžđŧŅÂūz0?įK‰”€aÆ(I’}čĖúr-1)ŌĻG6 Ÿ$3!Ėf3‹”AHÃÂįRާôŽž Ļ> âTbIˆõ€!°ĩšĪįöÁF ]ŋ~ŨĀÂķĪ?oĄk׎ˆôXŠÅĸęõē!Ū­h4jN[ž .Ō 2ų0ø`Nâŗ¤mDRŽáp¨^¯§p8lcœī%W°Ûíę™gžŅ—žô%›/0yu dŗÄ&ÉA8ŪÉxLĨRĒ×ëšÍfVžžL&Vb&9€23 Ÿã=ĮJ&“Ļo„m4föa"rš\ GĪĮ†Š  ™ĶT–ËĨ…~ãøeN#€LUXQæ%îq:ĒX,ęėėĖ.īL,.erÖ/h äeÚĸŅčëG[¯×úßø ũŌ/ũ’~č‡~H’ô[ŋõ[ÚÛÛĶO<Ą÷ŧį=úÚמĻ'Ÿ|RŸûÜįôØcI’>ō‘č oxƒž}öY=üđÃáëŦQū) ęŧĢ•˛"‹< \ĀzQ"ÅaĘÄO¸3 .VØ €Z-€ėAŠT˛  Üt:Uš\ļ]ģ´=& ­œ$cĨЧčŌŠ ü_>S"ZÕ;nu•O‡ÕnvÛÕjÕ´M|ea‚œbd|ĄÍƒ9äėSĘq0„”Ų0Ø|ü‰,>,¤ŠTj'v†˙ŪŒžį˙ą IÛ`$ÃJđ3z<¯ųãŲ0ø3 ˇ7°PnGīHК@gá’H$ŦD čåķ%YŠļ‘žG7åËnŸ[Yē\.+‹Y†čÃ?ŦŊŊ=õz=ĶCöû}ÛØõz=+û˛XqR †šīÜšcĮ J2ÖĢ\.ÛgPĻČŖéC+L$ĮĐL1Á&SĒĻíīīãθf“ĶyųaŪcnŖtĖfÅ;į^ģ[(,ψēIúÅ÷iĐŽv Ā—iûú×ŋރƒ=ôĐCú‘ųŨž}[’ô /¨Ņhčmo{›ũl"‘Đ›ßüf}öŗŸ•$ũņ˙ą …‚?Izũë_¯BĄ`?ķį5 ūiSJaA&ļ€,*Ø;€…’…$ëŗÛ†maŌDëætaG`{ö÷÷-Fā@šąÕjøaˇßī÷­ŧ ŗÅįŸ™HžÅ=QŲlÖØČp8Ŧ‹ųB‘pHąXB˙ĶīÅôCžŽw{b×MNZŗŲ´…}§,ø(~Ī/ļؗËĨ…åzG*§RpˆĀŅ=˛ĐÅb1+uz%ÎK&ôUhčX pÍú8Ā ‡Ōą×‚ĄA”ãŊãŪҧ ‡Cī€a4j”ūk€TÆ ›74tŪ‰,ÉL€Ā?}íPŖŅ0 ĖsĮjĩZÆ*Ãôr*& 4oô; 9aÃ÷îŨŗō5@‰īb“ĀŅc§§§šÍf;l#ĪŗĨO@‚×}âŽfãÃ{Áļ°­„ds2‹´ÁÕjUĨRÉ@ æ$â_čW˜9ŪķH$bĮ´ÂīŨģ§Á``1PŒQtÁ Ø^\ædüu:cu™kƒšÍĻ%Í8bcá<Īt+ëääD­VËNkņĪĄT*ķvrrĸp8lķŽ7ģđĀÖ1ŽVĢ••§aų(!w:uģ]‹Ũ9::Ōd21}#Ėđ|>WŠT2ö“ĀzŸ° mØãĶĶS‹EU*Ķ;û nĐŽn ā˰=öØcúčG?ĒßûŊßĶG>ō5 ŊņoT§ĶQŖŅ$;‹”g×h4T¯×˙ĖįÖëuû™?¯}đƒ4Í ĀK˛X œŖ,úÄ< ķCCãuZ”XüŊØß—€)ųĀ6P2†Ĩ€Å´ĐáfqķúʞQEJ°…°A ˜&Šåj­pHJ&͚Ė7zŸd2šŖũĒT*Ļi‚aäķč3å_ĖŌVIɇō)Ā0ˆž †‰Å–•gÁ∑ņ<å8Ī4‘Y‡f“üs  …N…øŸķČŗ@sˆŪ íĮãĖģw%ŲŗL&“Ęįķ;9pÜWŋß7Đ€äxš_Āą8l8X´q¯/ uģ]ƒŗŲĖØĖġH˛ŗ”ī€"ūŪoX’ɤx€nSrߚÍĻmô‹0’ėļŊŊ=íííŲŗķė:Z=ú` 㠘„Á#Ü9ĒVĢŲķädú”r3÷(âߔ—yî{{{šÍf*—ËĘd2Ļŗ ÆV36ŲĀøTæ!6KlXŧœ˛H_,v \ĨRŲŠäķy‹€jˇÛÖ/ä2ÁR Y‡6ĪŦT*Ų†Žę…72ņ.äķy +įķyĶøķT(lķ„TdąXčîŨģũãu˜”ë‘gPęg. ÚÕm|ļī˙ūī×˙đëÖ­[zë[ßĒO~ō“’6Ĩ^ Iō?ô÷ŪĪ\nī˙ûíØˇÁ` ģwīJ’E)x%ūMšÃ——ŧĀ™E•ÅĀâĐ0>¨Ö8J 3Ãųųšŋ8xv-“ÉhooOÕjuĮ`ŗĢpÚëõ,–ûĨŧ‡€>ŸKĄ°•Œ)5Įcs ĸßAHŲ—2‹^6›5-Æ ĘGc 8æÚųXtD8)SÎ"dڛt¸O@7}ĘbŽĻˆ……žĄæĩo°œŠqzzĒÁ`°Ã^1Á\#ŸPķcG’9y 0ddŌQ‚ˆqßįįįĻ÷ōĨpŒ&Ūņ‰~ˇøxhWŖĀŋ-“ÉčÖ­[úú×ŋŽwŧã’6,ßĩk×ėgšÍĻą‚ûûû:==ũ3ŸĶjĩū sč čåF‰×.āEÜgz!töY‚p)ōdĻym“záģqRŠņš\#š;´`” š6âø\ĸ8T1:Đ(%Ãlv'—”ķų\ívÛ@:G Ú:ØĪ,Á¸âņ¸ƒÁ“ÃĸŠv g%,åād‰Z­feK˜)ú& ؆m\­V;Nei[Î÷ą4žŲüâ…ŲÅėADF;z9v—qPG+į]Ņž”† €K(É@ˇ´Ņl΁6ņr$įÖÂ&sŊ^ĪĖ#”ėÁ”tl48éŖÛíš^°T*ģMˆz¯×3^ŠT,´¸P(ØXį}Z¯×*—ËZ,:991F0 +Ä3ķB°Îsdœ1ΖŒ×Z­f œÍZÛH$b wļÕjŖ†Y!ëƍ:==ĩ \š\6W-c“ ė8cW’U#`Ų<Ā–1Ž›ÍĻąlŪŧ†Ö/ŸĪÛæ&ž{–dc“Íĸߌҝ„6ûĶW0ôŦ×kUĢU{ōųŧÖëĩęõē*•ŠÖëĩnßž­fŗißÉû<ŸĪ-&‡“WŊh÷öö,?2hWģ ā_v~~ޝ}íkēvíšzč!íīīë÷˙÷íī/..ôđzãß(IzÃŪ Á` /|á ö3Ÿ˙üį5 ėgūĸR,‹ÍåŌ(“-,ŠwŨōøyB@ ƒ5vÖždËĪÁ˜xcņ)ŌāÜdWž‡ ļĪdA‘ļq įįįļ Ŗ‰Ū‹ë`ŅĄ¯`Î~!ĸ/ũiôíp84v˛Õp8´ī#F‚Ō+Áģ&{ŊžŨ;Qô;b{~‡SK°'°IG‹Æ"€āY÷žŦČBæĮG&“ą˛=÷˜āp{o`Ą˙|^!BwĪ|QļƒuÈĀũųgAßÁČų1Șcŧųģˍr$cķ|q.qŧōl"‘ČNđ0eĖÉdĸvģmåG>։Ķ9ÂáM¸1ũP*•T*•txxhĖ.e^d€˙>Ķ`_y?ŊPėYJI&I$ĒVĢ* zÅ+^Ą×žöĩzÍk^cq6lœš”Œ)ezēKŽ“JĐęōoŋÁdÎiˇÛ–—Édėh:tŋlČw”ąé#˙îGŖQK˜âŖaÎĪĪ•JĨŦŧëįžáršTĩZ5ö`N9ūģžëģôöˇŋ]o{Û۔ÍfUŠT$ÉūŌør IDATĘūhú‚M#ߕÍfíô‘ããc=÷Üs˙Ņķ{Đūjļ úeØ~ņҜĪ=÷œ~ögVĪ=÷œ>üáĢX,jš\ęƒü ~øa-—KũÂ/ü‚îŨģ§ßüÍßT"‘P­VĶį?˙y=ņÄúÎīüNéŨī~ˇ^÷ē×éį~îįūŖ¯ƒ hĀ;p„ų—cH$íčNp ŖĶbˇĖŽÚkŊŽĖ %<@ú„ũ”)ũĄI’ļšĢË,.F Ā ķB6›ĩ’”ÅÁ ŗ)‰{3 ×ÄbS,ÕjĩlqE,ĪËuķ™°€L˜/X'úØ3Ž|–w{­ ‹9å2ĀŅ,Ŧ’ŒŊâd ņhaJ—?D}ļĄ˙]oä@ĶH‰—ĪņYœĄyâ™Ãę}Į-fƒ@b °°œæAßĸ‘äī0Ļ0æ<D" fÂAˇ†›  ŖMÔĀ“ %e€‰Īä9P"§_1“ōa?1zđ>:Î& įŗĪŅôAÎč?xŒ Jąŧ‡˙üķ‡Vaü{ęūūžúũūŽüğ˜ôĖ3ĪčųįŸ‚ ¯p JĀ/Ãvtt¤ũŅUģŨV­VĶë_˙z}îsŸĶ< IzßûŪ§étĒ÷ž÷ŊęõzzėąĮôŠO}ʅ$}ėcĶĪ˙üĪ›[ø~āôĄ}č[ēĘ̘(÷Q2áŋ%í0 ņxÜŒhÃ0 Œ6X&vũ’lˇ S€ 0QŗČÂč$“I›taY`›`Ņĸ]l†=äž(÷Q⥴v™ ĮãæĸĻÄFš›{˜r/ŪšįÁ NKĪxŌXhúũž1,F€ô‡ĨRɘ"\žô!‹z0LŠų `›L&íLSwŽÕ›|Ōé´1(^ĢČ"ëKVÄ×0ŽŌˆøĨmL îbŊ€wĀĀ'šŗl6kyqhĶ`jáY@C×Eȸ$;a†>˜8üák0Ø=íjĩ€ Ú}7Ø@{i č°Ŗíb׎(ĮĢŅe’ōŽI ¸üН- UĢU;ÃŗČ{]Ą´Ąņš°p8ŦŊŊ=ss˛˜ h‡Å‘v ž\L^ $[ŒqĪÂÂčø;\”ŪŨ*mÃąųytd”špÎö|ÜJ(2Ũ˜$ĶU-—K+›.(Ãū`,¸Æ^¯gæĘŖPęŊ1°ĖŅdžÄĖ5ÊÁ,ÁØR~åķŧã%ßK‰– Îį´Z-ÜÃöxaž×ƒR^ /‹ŦHúΟ¨1™L,üœįÎĪ1nÉ5,—Ëęt:ö`r@Gč.œĪ€ Ā×M.`6›5WlĄP°,G€6 Ōļ´o’ŦdJŪŽRĪüX`3);z €‘gsvvf%[~øĖÁ` ^xÁίʼn|rrb "ą=ápØ$3´oD!ņĖxŲ¤l¯]ģf 5` Í!æ™p8lĮŋq¯WJ×䑎Įc“4°Yĸ_øŽķķsĶøúM ŽĶĮ‘ŸIŲđG q1˜ģЌ’YČ\ …T*•Ė xįŊöæĩ ]͘@‚vߍ‰ÄáäŲ%&-€"˙ĪO€Ōöt ŋ3FȀĸ ƒB@ĒĪĘC—ä‹"Âjg˜5ŋ“ö0Ņ8ŅTCCö '"åVJ/’Ŧäėõy4ƒ%™žL’Kīūõl}˜Ŗ4ސ<“ɨVĢY_…B!ĶÂĨĶic„<€š|l߈Ä}É=xļ Ŋ °;ˆņš/@›7q0†|šÛ3ËÜ˙ë§üˆq†~’ƒ7ŨCŸŗAđĘôzTrÖ|vā‰ŋĮųÉ3äĐč1Fˆ A›Čķƒ‘ä3ųĐkuˆfa×̃! ƍa8Č÷îŨ3į×ĖŲģ€;˜KØ-@‹_đi„ĮJ›Ō9‹6›50ËĸR.—wtķųÜú‘?SjląČņ+X,N8á> møŅO|/q&žĖ….ɟNB û€ŠÕáû162$YiÖKŠÅĸÅá°Pq/˜|Ųą;&€†VlĘŧčŌē0ēôAē^˜O,+ŒĀ )@“˛>%AiëĻ…Ųåž8AdąXG?ÄIÚaĻĸҍšÍĻąhôŸÉ&§ŨnÛæėââBÍfSív[Ī<ķŒ%[,U.—ͨszzē#Ų ō&•JŠŅh뜏BŲҟČB`5›„bą¨|P7nÜĐūūžĸҍ•‘ŗŲŦNNNÔl6Í|䃚#‘ˆöööė9îŸgĖ8įÚ)qķ,Ø0ĸ›œN§ęvģVöeÁ@Đ'ĪđččȞī&*NF„ōnŗ‰]¯×öîĄ5Åđ–N§uíÚ5›`úaI9턍Ôp8´ Fæ€$•X,fc‰Åd2QĨRŅūūžmbƒvĩ[PÚ}7ĪüPęÄ ĶĮųēhÆÎÎÎŦ˞Z­L (Ŗ\Á„ĖâÍ"íõ`LĘŅhԜ”“ÉÄÎŨE/čwŨ”Ģ‹M&ZąX´´/_’ŠļZ­ĖÉéŨļˆûKŌVëS‹ÅT­V5ĄŒ h†ĨŖ”x™‰ķąš\NŠTĘĘU0yDŧøßCÔÎ3dÆŖ\_ÖRôæúĮ3u”÷0lHÛãaeüũņŦ(ŋÁĀ\Đ/žŒ—Šg=Û¸9ų~4}œ ķ+B Pp" šm,Ö,Âô3`á=ŽUØŠËšSž c“ذHÛĶIŅ’LęKŽh%ŲįúŒMîĶë÷p)°ÎIlh`ؘy†xš\Z\ Ŧ7?ãXš\ļ÷‚ąÉdTŠTtũúu]\\¨\.k6›™Ļ —­l¸ø3aĘĄPČÆ5`žÜÄÉdbņ.ãņXõzŨ€ąwáōšhéKS(Ė<Âķ'W~[.—ę÷ûļYôĻŸõ‰ŽĐ[.—wĒlĐ8Ŗ™š3ڜŽÃĻ÷0”ąE‚€n˜ÍwĐŽv Ā ũĨ4Ɗdn1™QžĮ‡&ÎG×åM,‹ÅbGȰŨ›>‰DÂrčÆ_.w˛ˆú lÍųųš °°Xú–ËĨēŨŽWĢC/ėgíų;É]œ\ā !œ5L)ŽEĀZ(ėT@ P†FNŌs É´#Ŧ“ɤ•]yÅbŅė#åz€ā€€ŧ>Iļ°ĀĄGĖd2Æîæķy=Č`KŅC^¨dáņL.ËpZzæÄŸœSå3úŽô+Œ€ÅŸqDš⠈ōČËåRŖŅȀ'ߍnėŒ!ĸs`MҜyˇ9 y:ÚŠ"€TōęčĀ—?ŨE’åĪĄáķú/Āųh4R§Ķ1ŊŋG‰Ú—ú%Ų¤īOĻáߜŗÍ=¤R)=ôĐCēyķĻÂá°ęõē}?Ė,ã’ĪģsįŽõ•$K’)ž÷C‹Šd‚ī‡6–:Ž“ėãwx#c Í{Ā}ánÆ\…‘éú–ĶbzŊžšŽa¸cą˜^|ņEM&;f‘M‘gyacą˜žûģŋ[‡‡‡Æ&{GŧßĖyc`6hWˇ0h÷Ũ(¯°8K[ļƒÅ—Å“ ZÚ,ڀŋ0Éĸ‹‚5aō"đÊũņx|g÷ ÉâĀî]P>ŸˇˆØĘ‚å#N`ØíRŅsÁú` šôš+"4X”Í([>3™Œš|Y¸éSJ{,ÆėúY ų7' š)gĸĨ‚ŊôĮöQÚ¤tŠ›`”Éd4ŸĪÍĘīRJNĨRĘårögÄøč+}™œ¨Ė3,ÔhOô b{7×čõŽ`ú2€!`SŌŽÁ1ũrš4€ģåY(Ø3ĀŲ„ô3ZC@°†ŧ°‡°hēX´ų9žīö,Ĩ?™#Zø7› /€^¯×3đĀģį÷‡}â$Æī.} ŖîŨŨ…BAņxÜôˇ^Â}qŪ-ĪpÎX‚%‹D"ĒÕjfŌA’A 9‘-ĸx÷˜›(]s/ŧw•JÅ@9Ŧœ7ąąb3@˙øqāžN§J§ĶĒÕjJĨR:<ûėŗ* ŽN `žM5›ØH$bį8íęļ€ Ú}7„Į0",¸€)˛Ü˜|}& 1ģ&'Ø3Œ čtüDŒœ’X4UąX´Ō%.UvÚ0Z0E,v, >%Ū*ÉEĀ 1?ÃRĀ`‹ŪL‚Á@ŗŗo“qû( iŋČíõzvŪ*‹ ˙†ƒÉņ  Ö 0Č5ÆbąũQ$˛9ˇ• a„ų”¨Xų> Æ‹ö`006‘ō9:RIÆļĸĪPpœ€ÁŸú˜AXÂ4˛`{(õ¤kžÉFļāŗá`mų\Vô‡Œž'?į%€Q8@@›ŸÃ\Ã}Ã8Ėz÷<ā Į}{VpÆįđ^†÷žÕ“dŒM Ī+˛âF$éāāĀúÛo⍠ĖįsĩZ-=÷Üsö~`ú { Ŗ^ĢÕvŒZ°í8g#‘ˆZ­–ŊįˇeøĖõz­JĨbzlŒ[0ą°ģ<į ]ŨĀ Ũw#H††…])ķųÜvÆ2˛˜„Ŋ¸M•$cŅ8+Ķ/ÄčĪÆãąƒ•ĸėž%ЊĮãæv”´“/ČæK],æ°Ūé h@cG)@A9܋ŗûØIÆZV0vа?,”H×ëĩjĩš-L°P„ŗ0QÆHđŨ|6,'@˜>ĄpōŌĮ„9{w$}†n   ŗËâ‹’2 •E—råål6kėF6€GJňá=›éÍ\¯7äĐaMˇž$ íáÚš&˛"ų}Īāņœx†hŨ<đįē¸FĖ}ŋÂtōų|ŪXi€-ĨLúŗ@‰Īž¸¸0]ļ įLS‚¤¤ęķ'ĮãąEÕ‹E[8yqvŋō•¯Ü‘=°Aéõz …BēvíšmÂá°nßžŊĶĮ’T¯×U.—%ÉRk.‹ÆnžœœhąØäƒĸÃÃ˛Á2b Aŋ'ÉtŽ0qŧ÷’ ¤Ã„2‘o”ËestÃt2fØpąá™0ž—ž-†Íæt•BĄ 7n˜ū8‹ŲũŖõ„%„ŨĻ(yîAģē-€AģīŖāõf”Ÿ˜8mÔ  !X­V‡ŠFŖæRCˆ˜z0čččȘJo’LΎ\.­Ŧ"m&jJǰj\# ˇå.ŒÛå:ø;VWX€?ū S’iā˛ŲėNNŸ/ã‡CsEsīhė#懕™Œą…˜›ÉdbîJ™LÆĀ(`€ĶX|Öšp|6 7‹ }•Ī:ôšz^ ‡ž‹üAú•Í .Ķ1(ŗņŲž\(J$V ķ m& ´”8any°¯€3ô°QœCyŸņų|<'€¸/ˇ˛‘ė0xOč'ÆߋŪ÷× āäē1ēaęønž§/+s {~#Âæ‡DØ0.ŧų'‹éāā@7oŪ4ϊž†‰ôã’`įŅh¤ÃÃCcõVĢ•i†‰oáaęvģPÉĐcLbËårJ&“–7ČũÞSžĮčąZ­TŠTtīŪ=›_¸Ļd2šs-lޤĪd2ļĄc#p„ĄãįÂá°m“ɤũ7ũĶëõlU(,Zʛŧ´Fķ‰ģ°šN§M/´ĢÛ´ûn”!ŅtIÛŖž*•Š1I(ŸXKž‹™?ē‰Īōæ†õz­VĢe‰EĀE|:2˜Ë,'$Ā|°HQvõ“* %5Iļ¸#rgŅ‘d€•ŗA1ĀĘņ_ĘP>,šÜ:ūL4´ŽđŒa>Ÿˇ&ē?˜JĀŸËgH˛lĘY&īr¤„Hî ÷/ĖL°ĪKäēũI$üėzŊ6ĻĐÃĩ(šJĩū>J•>ˇ‘ĪJ$öŦ(YōĖų 4rčŅ”I˛r.RĘ䘕ĸҍąsĄPČžĢVĢ™ŽŒ1FĩˇˇgŒ1ÎaÆŋĪôeįņxl€y‚°s0}ūy’u‡ų‡S*üQlh )O˛´F"cäĨm81 ŽņŗúĒWŊĘØEú“÷œX =ŒÆh&“ąČ(~Įk`ŧŊV–´ĶéX<”—¨p_|Ė!ɰŊlRĐ2ÁÄxāšëôũ‹É„wļöųī;›ål6ģķ؀…ÃaŨŧkÄWym/?ķ 3 Ģ˜@‚Ā ŨwŖ<æĪ ĨQbá1ÃĖâCé &Ä/r#(…Ą‡‘ļŽE\ŒŌļ¤%É5ʃ¸'YhҤĄĨōĮ;ĄģY,;ą(€.ts,ŠLÚårYĢÕĘJĶܟ/ÛrŽ2ē=îƒLD@ėš/빐˛Hŗā°PÂ2Â(P.eA¤SŠĀņy4Ją,z,đhũI"å¤2ßĐĒ1~.<´Qô9Ā›IĐLážeˇcî2™ĖNhŧ×[úąG5=.×Āũōū0Îŧ¤Ŗ^¯īá‚vu[ƒvߍÅA’ebyĖ—uĶé´ÅĄ(Z­–-ˆča€(Ąą3xí­$; „|7&AĪ‚,(û°ho `Â%’ @œ ÛbŌg¸|āÃ;xX:ĘrKEŲЗÖ<¸ĻošĀV.—ÛÉ/ƒš“ļGqÆ%ƒ@ųį2;IķQ,@~Áįzø;ô€ž|čŨĢ”;ҌI˛€wĀJ2&€ÖĪ÷ !Āü™gÁuS›L&ĻÅXr sf- 2¨$k°nŪ ``LÁ¸ĸĩôĖ ×W¯×wĘĪčũ‚=â3îa.9ęĪŗž|>Žxb„øLX(JĨž?xž^ˇÆxX,ƒs”"ą@čwq_ķ;€."_ĐÕņĖ1ëx L1GGGv/Œ™p8lÎu˛?5…y¤ŲlîÜė=Ĩ\úŒ’2}Īī•ËeëcŪō'Ų3wņžŲ|Äw0NĐ ōžĶĖs?GY9#ÉF›Ęˆ×ASōĻė ´ĢŨ´ûnhČ..6GÁŽŽ(‹DŖQĩZ-c€`:<“Ād ‹Āî6ŸĪ›ŽW­_+>lā ¨ô EĨRąI’˛"ē7I;įefŗYcyˆfļ%5Ø Ękčæ`ÚēŨŽ]'gpLŪ+~(/3ąÃĀPԁ‘dß'mKį,Z䆭×k°0ް ,P€_X%\Čhą|˜09};Ī!ŽgA¤Ī¸6_žĻŒˆņ‹ 7ÁŪxg3ĻĘŗžœīuq4´ŠÄlĐ'0)ŪE Ā ˜÷ų‹ÅÂúíĻ/9K[­,Īևŋãįīü<ŽTĀL4z4´†\gÄŲđĀzà nų˙0ã°¨ˇû2&īF!@ew€ $͜ŽV+]ŋ~Ũúžwa>Ÿ įr9;įˆ9ÄKx/FŖ‘^ņŠWØ;Ę …BĒ×ëļš"š‰MāüæÍ›;'ˆ0į [UL&“V~E§Ė=Ą¯dår9Ķs¯°Ž€5Lū?,/Æ(ä+ŧgŒâ8&>§Ņh˜Ė€÷ LJÁh4R,SŖŅPŋߡ{ŋš ÚÕlA`Đîģõû}‹E[p¤­ËW"‹Ņ4ŋûeņ@¯‚ŽŠ2!–ĪIcfņĄ4ÄĪú˛-‹)ņ&—õcD/°Ŗ- lõ%kŽzōnAœļ’L kᏂ‚q’´ãDFfÖ ?(­ãæ¸ŅŅ8Ĩ­ ­‹~2™T§ĶŲYDŪ°čN( ėG 4ĀG_Á°ĸwĖfŗVēÄ Â={Â}ąˆRę÷Ú=f_\ĀĀ_×“yįx<Ū9yáââÂĘķŒGoށ­^­6'^øü>ž ĘFŒ’"%_fL@f‡2)ãûôcšņˆ´€{dCK€~ĮÍĪRՈĮãæĘ===56Üo؂T)h”ˆaq‰„ÅB1g0?1f*•Š=ŪYdŊ^ĪŪ/ž—g˃v5[Āíž[>Ÿ7a1,†/Múô}mī–d ĨŧŅhdeCØ!Iļû\3ū(Ũxד.Z+Ė &î–dģot;ž5ƒ-Øø\ADōĪĐüP›L&ößÄ{v8­ašÜö>›ÍL ĢÁ (@į‡~”Å”ĘMôŒ…$Ķąøs”Y4č ØØ@ 0åYUŠT˛kāšÃp^\\ØÂ ÛûW(Ŧ| ČŖ˙;čŊøŒß7ļ\.mņæįؔ Ņô9…€´œ€^ūŽ÷™Ājĩub<{Œ‘˛)c Æ0CßÂ$ Xh"ų˙Œ\šŨnwįÚÎÎÎT­VÍyJys€ûL§Ķf¨áũvģ]s1sŨ¸¯)wķŗl`xnŪÕ;™LL+ČĻÔ Ķ&mrūxדápXö>ĄīŖ„Îü5ŸĪU­V-ÚC4 IDATÛōüüܜĮétÚâa(‘īīīī”öa+§ĶЊÅĸ$B œgëË3===ĩ9ĩ×ëí8Ũ)÷3f|0|ĐŽn `ĐūRš+"Ęc06čĶØ%.“É؁č|ŒÎW€n>"KX …‚Fŋk§4įĪ6%Ģ ĀÃâīKĨŌ6[V Éĩਰ8ŗP4H2§ôŲŲŲËČI”CYŧkĩšYĘĖ,č~÷Nŋx€ SčM3€qIÖ÷,š”Ō1`†ā„%åKĀ3ĖåqŽ‚Á0RBķĨO4—ÅbQ>ú¨Ā ô~!§îY?˛ aģ.ƒ˜*ΊöÚvâĘc”}aĨ|WĄP°ĐøÁė°ë^¯×VEƄ‰+Pˆų0įcVŧĐ߃î‰˙FG .eŽ…E<ŸĪk8î€)ē9ú1›ÍZ4 ßĮŌ9š5ôBžtēX,LãƒG?Ã&ĀĸôZ!Ž é’X\?‹ !;€TúæyČË´ŠķĸníßŌl:S<ˇû†Ũ\¯×Z'× ‡ÂŠÆĸšĨfJ$:ŸkąÜÜeÔéŲTËÕt›;yĩÖjŊ2vo:ę‡ũØ:ĩļø6ĢōJĢõĘžŋ9lętvjΜ† F’{fLŅl ˆ!ēŦ`Ā 6ŌYXJėŧ >`˛ĩ?ZΗ0aaķŧÁˆ1ĮFɗ™æŒžŠg2 nˇÛęt:zđÁíŪ¤m1GŖP.wĩÚÄļ°ÁÁ0# €÷ī æ2i‘f0ĻŅĄ˛A%v –PĻßōlÜ`Ãa\Ŋä…ΏļZ-375›M ‡Cs—Nō\;cŠĶCęõēLĐČ\˜Ëå4N ôûę sãˆ8ĘŪAģÚ-€AģīÆĪ„S.—M,͂9ŒaWK…]>Ú9h4Qüģûršl7˜ŋkg!”ļîQC&[˜nˇkģtJa°^“áŗŌ$íhāĐöZíƒĸq?ĸ“ƒådbfÁ÷Ą×€+€, ™eô7åR¯˙CÜc×ívĩˇˇgXX€(}¸įīĐĶÁL icôQúC āüü\‡ÅC}üī|\ŠØ˙ŋõHĶųTīøw¨1i° ÷ō!Q@Œ?6@”ožD?™LŦėɂN?Âv`Ëø<6dXōœyų=¤Īį‰‚äxđÂÅ)‰DŒ=™.mĮ 7Æä͛7wLEũ~ߎƒkĩZV˛…!åûÂá°å$ÂxÚ#‘ˆƒJĨ’CúŸ#%šol"ũŸ$˛‰`dĸ¤`—ũyÅŖ¸ˇˇg›% *Ė0đ•Je' €¸!XUīöGPFJ˙,›:ŽqĐîĸŦÕjϧÄŲ^ŠT,Å`ąX˜IΛłvu[ƒvß f€I÷ččČĘŠ€:Ę0žõcQ흭a"/ ļ襥! ļ+›ŗ&`*ÉvÉŪt"ÉĘc°°)—ƒRųŒ×2Â8|ršœą}0+’ląüą›į^qëQô&J¸,–,Ę00;<oļ€Ųėt:Z­VĒ×ëJ$j4fnÁ|üqÍ<Ę۔E=“Éâx¤ @aæ¤R)EĨb)Ŋī˙~ŸŽ&G;eqáä)_JŌl:“BÂ5ĀęōķčY¤)aŸŸŸ+¤Vë ČåršžM‰FŒ1ŠFĸšÎ6ãå•åWęמī×THt<:ļû‚ŨĄ$=T(ĖqqqĄŊŊ=…B! s”C×ëĩęõē-Îŧdz C˜p8ļ<;ú‡S—gäõ–’ŒŊ z†–Žë€™ãYŸŸ›Ū”1ÆĻĻ\.+“ɨŨnīPĐŅQň¿ĄP(˜ãæ/N[Ė cŧ>ØŽÉdbĨô—^zI‡‡‡öģ€äWŋúÕúŽīøår9}úֺ͟Ī>kcm-Ļ% ‰24ßÅŧÅæ-•JËH–â|>Wš\ļw‡w•ū ėËf 6Ük–=Īæą×ëŲ¸õæąŅhd‘OŌ6’>ĪÍ%åa@íd2ąMtĐŽn `Đîģœ(ņrz8vĶhĮ< ĮÄ“%ÉN€™Į0Ņeaē`Ņ—d"zLLˆėŪ)%2ŅzQģĪÉŖŦˆ@Å=ˆ``I`P¸OØ*€´=QM˜˙]Ę_hņ(ĮãņŽžŽ\.Û)&ąXĖ2 Y¸#‘ˆÚíļ&€ÁÔūh>i{‚ €žgK™*ŸĪ›æ6-åQ€:7Ct{’ôŌđ%}Ŋ˙uI2e(˛ØŒđEX‹ÁÂĖ3č4jĀtĩZ(…9Ü$“I÷ˇf6&ŖŅHĄ^Čûjĩ˛>H§Ķ›HŖÕڞąŪÔÂ8"Λ.J”č%Ų8â3y?¤íBÎwI˛ņīŗô(%ōœcH `3h>‹…JĨ’™ čoŒô %X¯o„­äŨú20gÕÂÜZ?!Ŋđ ŋX,šî U¯×­`ã„ØíííŠÛíĒ^¯›ņĀDt”ĪdŽábJđŧĶü 㠀ãˆéƒj‚gŗ XįãŲ1¯$“I‹Eŋ’lūÉįķöū1ĮQa€i\.—ö,JĨ’ąŊ0ĪNG…BaįŋGŖ‘•…Ų¨1>ũ9hWŗ0h÷Ũ"€˜L¤-A‹‹#ˆŗ–HIÁBÃbĘĸO ‚?Æ @Ɵįķš%öÃ@ ØQ3éJ˛r& œģ€PB#‘Íi,Ž,’ˆ¸a6pōų3‰YĀ‡ÃĄą+ÄĶøđcX@2Ú7ŽĢŖ<\ĢÕĖ- ¨ä~ŧi+‰¨ŅhØÂ#ȸœ_ÆÂÄĩŠRŠ“éŨДa0<āö‘9^3ʍš„L:î ÎX‚eÄč@Yœ~¤l†“f‘x‡7#œ`“H$”ËoX–‹ķ âõą!l(Ōé´9L}|ĪŅ;¸Ĩ ĀÄ ¸ÃÅ ķEß#mʐ”y`’|J.—ŗĪ’d÷‡~Œūl`ōį' +;”!‘ ø}Žb,3㠆ä°ƒũ~ßr˙áp؂Ęqhŗ‚šC?‰3Öŋ“ŖŅH׎]ĶŨģwMëzûömI˛ņŽ †ĨmÜš<¯jĩj ~y…´e͘›Đęáøį™ÁäRáāZ(9ãXfnÂ}î7l–cą˜EķĐ¯ŧGׯ_WŋߡH F0ālTŧî1hWģ.ā Ũw€Ą%ō*‹Ĩœ…0d,Ō0kŌ6ÏŖ3r™Ø˜}4“-RžƒÉ]$#Lā/˜?2alĐ_á6F´Īuĸ“ƒ#k 2ú#JD0'¸u9ĸ ƂR;w+#úmOĄP°0ZJH>ȖĪáY”"‘ˆōųŧĖĀkā¯V ˇđx<ļšV0ûŠ> Y4ĩ¨Ž“gČ ‡ÃƞPŌö:+6,hœ0ÃŗĨoaU`_ų~ž“ė>6”%ab ’´X.vNĨĄĖĮUŠT‰DėÄú—ņ„€ĘįRŌE+Æĩōw ū›{†Qō§\đ{’l€9ĐâM?Œ\.gæ{ųž‰ĻĄŲåũĸŋČĐL$ĒT*zä‘GôĘWžŌū>Ē\.8‡ÃöNb$0I›ō'ņ/ķ™Ī˜ô6‘ū§”ŋ\.upp zŊnN\X4Æ<úFŪAo8cLQz- zđÁmƒģJ)-3sŠīWXEīœ'•SŋƒŦÅK?x‡Ĩ˜ķ”™Gs÷ėAģē-`ƒvß Æ¤JY†ĒŨn[ փ€ļÍĄŠËåŌvŌ‘HÄU=āƒå€ņq+”:1m Šš|ũč)QŖšōgs˛X°OI Ķ ÷ŽŪgŧ,`JĨ’hXč)ĨĶ­†QĄ”Ŗ …,‹QÚ° '''Ö/ƒÁĀ~¯M$ĖĮ! ‰Háúa2a{ŊŪ€†Ũ€EĨFĻ‚•ōĶQ¸Ė0€OXO˛äXxš&ZˆDaąô'HņãKYķeOœĸ<ƒX,ĻÕr{Z‡´-Q3f*•Šą1”-–„ôĸ5CŗJĻLŦ/ŊŠ 0DûGÎ"`1—ËŠĶéX˙ûŗ›% pÁ\QŠT4N-ŋįÃf G-ĮŽaVbæÍ?œÕMŠģZ­jߞy—ŧ_ūų1ū}~Ÿ×ƆB!ĩÛm;Ž×ë)›ÍšąŒrŗwĩ2FŲ8ŦV+ØÉ|6sPŗŲTˇÛĩy‡p{Ė\h9ļ˛X,šÎ{Ą¤> Œąfƒ‹ÅÔjĩ,.‡9ĒÕj)‘HXš– BĄPP¯×SąXTŖŅ0V‘ûaŧ˛IÍfŗęt:ã3­¯p–Xa@y'‚vu[ƒvß ƂŒË öŠ8 X/PįgVĢMF›wÄų“CĐ I˛R“0× A0](vŒ ^C8e§ŧÅĩa܀šņ'dPöŽFŖ6I€¸N ,v—‡‹†>™Īįæ”&ƀcėŧûR’-üūYĀŧ‡ō*G›ÁÄÍįs UĢUëcbJ,œ0ˆ×Ĩmä &e]$Ü$ū,i‡1¤æY4~ŸėAb-üįÁ†¤R)+Õâ$‡ĩ•dĨy˙Ų”B”į‹…â‰í†0ĸœF™7*Ú+i[‚FÂĀõĐ`ˇũؓ´ãŦÆåß1ĘįlT¸_˜ĶX,ļĶ'č*awŅĸbv`ÂØō‘"|āØĸ_`HxĄøyŖ āŧT*Y_-—K 2ÅbæzåŊ›L&*‹Æ|I°ÅØös×iR^],Ē×ëšL&väãŸ1ÎŽ×ë6otģ] ĩZ-+ĢŗAcĖ"Áđxž9Ņ+l`ŧ—Č#¤ ̇szš\šNŌoa0yįä˛?ãņ¸mæZ­–ŊO˜|ęõúŸ™ËƒvĩZPÚ}7&,I;%ŠršlģN :NX`!DsĮwNv€…ÂФˆLڞ•K™R ø€J¸ūØ/@)ßËî}“7Š ?¤¤85­ÔKé‡%= ”gaX¤Qô#`ŌgÎą8O&“0^˜(iũĀEëvŲņ×ëõ”ĪįmQ@Ø~pp`ų‰˜øØDúi<Ģ×ë``Ņņ÷3‡KցΪaÁ~ūĮu)m \.—ęt:’dŒ:?>0P&–ļGōųĒh4ĒjĩĒVĢĩ39VĢU[pĐI2äûÜz—>īæËƒÜ "zž [Ã}‹E‹ná\å;އŦDXX&ūž€aĘá<+ū^ŌŽaĐĮ=I玎g%YĘū>‡ MԑÉÉ ũ~߮ߛ¤ ČĒ×ëö\`7ü˜á‰! ÁčJ2F˙b–A“ s˜ˆ' ĖÁ˛øĐzf'šą‰kÃ(ˆC¯éķū¸fĸĀĻ ° Đã=„ĄØÂ1Æ`ņ@d‹ÅÂN‘ā:¸&Jĸ€}€1L ĮĨĶiŨģwOFC…BÁúÖër›ÍĻ9Č170†yV’ „Ŋîu¯SģŨ֋/žhŦˇ×Uō>‚`ą1tĀŽ6›MsrXjœíT#NOOwÎ1–ļ›ZÜČņx\ÍfĶLcĩZ͘d(ķs#˜WZ>˛œ`āëŅhTÍfĶæ?Ėdŧ#DÔ0ې2ø?¯? ÚÕl´ûn”ÂúũūŽ&`ÅJ”ežudQLėüÜvˆØ—ëĨ~ōÛ~Rī}Ũ{mâķq1,z6ĄŸūŽŸÖ{}ŪžĘnŧ$c1pûJ˛@_iŗ( ī’deŒ0ÄeH˛™ŸCĪåŖ4XŧaK$ŲN D9íėėĖJí‘HDårŲJŠ€až=āƒžöeEiːÁtår9+{úŧ@9˙ų€>ØP€ú->ĮŗXŒúe#Ŧ2.d€ } eŅx`r fX_Ōˆú°dÚ|ąEŪđhōG˛fĐãyļšk ā‘ „B!c/1ĐĀ*‘ĀlÂrŊhja•yžy–”ßŅ)]\\(œÚîAšV4\h0Ī|‹A‡k÷ ļ.ũëī1 Ų¸ôĻ‹|>oŅT€͟øĮ­&Æ6‡īĮɍķ]ÚjTKĨ’Ō鴝7 xÁdƒą#`y#žN§æđ„Mö,˛gS=hã=8bPJ2p ƒåüÜ/ -ãwĐzķæM‹E Ũž}[årŲØßŅhda×°ąŒ žY.—S¯×ŗãâ>ņ‰O˜IDÚēÛŲØqÎĐņĄĩĨ?pķķ‹ÅB¯zÕĢô=ßķ=’6å˙?üÃ?4IĪ’wm#z@@Œ%ŸRŠd,2Ī` ā†uõcšT*)™Løŧ{÷Ž})ˁ—“Ø Ø{ÎüĘσ?7ŖYĐŽf `Đîģą[§ygĨR1 ģS­ByC’9üˆC@Āļär9[uųĘG4ŋ˜ëŨž[ķ‹š~įÅßŲ9fJ’ÅĒüĖc?ŖwžúúĮ_ūĮúØsÛ1Z ōB{Ęo'''ÚßßWĨR1F€ü3i p؍s@;‹˛ŋ_¯9„ŊCߡ\. 46čW1 §;P–TÃ8đŗ<pŅ&QBbáÅáĘķ¤$ ÃãΞ•´cØŦyVŅŽŲ—”a†`Ë…9"/o`Ü|š’Ō%6Ÿ“Jô zDĀ7 `ËÖŃ@ž5ā h‡5ĻäIņįD"aė)%mJē9Ā"Ŧ&f“TĢÕ4Ėų Ȥˉģxđ˙ą÷ĻA’^w™ī“Yšī{-Ŋ¨Õ­n¤VĢ­‘Œŧ2 ˛°cFļâFøÆaFßĮØ_|?Aûb‚0`ÂÆc̀!ė‹eĖ€qƒ-Ŧm$ĩÔ-Ģ[­ĒęĒŦÜ+ŗrßî‡ŦßŋNļš‹i&æŠÎĄÔ]˛ī{ŪsžķüŸįųīîš\‚{ĘÁ€Į;Â;ĀģÉģHd÷`Îû‹™PÃ3ā}GƒWŠTŒíįžS.įs'Å='ĮuĪōÍAÎÍôûũZYYą2*€Š’,Ī€ĪČī”FŗĀ‘gCŠåsˇ›Īd21@ėõz-o˛Z­ķ‡ų… fęqŨƒ}ß`00¯$Ų<;ÚĮš-ņ`jųtĘĖ!ØÅ`0¸`˙CŌĸüŠũčGåņxô|ĀūŦßīë}ī{ŸršœĸҍŪūöˇksssîûÖ××õļˇŊMŅhTš\Nī˙ûm‘ũ~ ļ[^b“†ĩrËQü“H$ĖMĘFÃF(rû}8íĸąâÔ˙Š'?Ĩ_xP?÷ĪëŨ§ßm‹1ĨŠ`0¨˙đę˙ ÷œy~÷ÉßՃ4‡åōō˛.ĀĀ Ņ5 u4Õōō˛ą"|6„¸š=b6`^Ü<<ÂwaĻĸҍbą˜“$[ä“ɤ]7÷˜ŋPļZ-s˛ÂŽđ{Üō°kņų|öÜM™įę‚QĘĶ„5ŗQÃ$Âdšėķ`–H$ė÷”2ό…Ȇ>‹šäū7Z4×ÄĪ•ĘīlÚ&Ķß)ŲtD΄CŗM8Žˆãļ¨sCŽaa¸xvlĖ”´)ˇv:mmmƒäOø7L,ė: - Ī”œ=˜TX9Jߔdɀdî"}ā^ā@Ĩ$ĘĪb~ņÎÃÜÁØfŗY{ĶéTËËˊĮãÖ¯—ËåæÂ¤)ņÃRíîîĒ×ëY—ĢW¯ĢIyļ”ī-•JÖ¤sPŗŲTŠT˛{Íß‹E=ķĖ3zâ‰'ôÔSOéŅGĩõ–p ¨% šyÍÜ―ÍfįXhžËÖ֖Ž\šbĪsEכH$ŦDK!ŋߍ˙q+!ņx\KKŗöo°ī0…îŊ!¤Āėff.ƍ;3ā<žķīčSŸú”Ξ=;÷įøĀôgögzøá‡•ÍfõÁ~Po}ë[õøã›(úūûīW>Ÿˇ ÔwŋûŨšN§úÄ'>ņ}_Ė%NČ,ŽŽÆ ŅžË´šbyĘž,ԓÉÄJbnĶwˇįm.—ͧŸú´†ÃĄ¸ũM5Õg˙ûg LŧëļwéÛĐCß}H˙ųģ˙Ų€ í@€T­VMģˆķVÄŨČa)5ZŅ€š]¸&Äë0U”ž$YÎL× X’æģ<°øÂp°ššiĄŅl>h°¸ī°Ük—áuŸ ?Û-ˇŌŁ Ėut$`6`wŨH6GXRœĢ 7ЙyåJq¸fų]DnHškåÆŊĮĀāęųúũžÅĀxŧûzFÃļzŊ^Õj53ŨÎ(?ŌVŦ×ë™É‚hJę8–Ož<ŠûîģOûˇĢŨŨ]]ŧxQ‘HÄÚđƒAmooëĉ6O:Žōųŧ8Ä\Ã‚Ü ¨^¯[ m÷˙vuœ°V\€Ņ50į …‚&xßyü~ŋuA?G9šgÃ|­T*ö|™S89€íėėhgggNįëõÎâp`i čqMįΝŗŌ6ų˜Daė`žņķŅfroööö´ššŠL&3gÂm SL œh"Öˇ š@îu*•šcAyw]vēVĢxoˇÛĘårsąTÄ3ä†{/ƍ9đ:öööôÎwžSŸūô§õ+ŋō+öįģģģúėg?Ģ|P÷ŨwŸ$顇Ō‘#Gôõ¯]oyË[ôĩ¯}MĪ=÷œ666´ļļ&Iúõ_˙uũĖĪüŒ>ō‘(‘H|_×Böœ+˜wÛąąļZ-1Ž€™Í›$‘HĖš×Ė…š¯mŖôIyρ_|ņ‹GzīŲ÷Ēßëëwžķ;z˙ë߯÷œy>ķĖgô…įŋ`‹§[ö’æKž,ž”t {–4į–•deFIÆōÁ6š%U6b¯wÖĪ18_CĖ’ ā26üsæŒtpˇō|šŋ0Ŧ/ĖUž‡÷s‡ąL&c =Ī.s›ų-ÍÖ]mGwSēįpCŠÉs™ŒŅbą(ŸĪg ŋ+ņpķ71…đ§Ķi Ņægaá ˆ%‰Ė…°/ƍ9đ:~á~A÷ßŋîģīž9øøãk8ęÍo~ŗũŲÚښΜ9ŖŋûģŋĶ[Ūō}ë[ßŌ™3g üIŌ[Ūōõû}=ūøãú‘ų‘đwrBf #á„áÄé)šS.ĒT*ļ°"‡-b!ÆÂ)Ą[Ų… IDAT“ŗû;øųčÚ`8|ūAų|>ũûņīõĀŲX č3Ī~FŧņĮ$ŲŧŅcĄ%sķÜ|Ļ\âFŅP>L§Ķöų`qƒŌ9„†öl ĄPHÕjUĢĢĢ’faÕt]pMÜ#Ęk0dČávÍfŗsÂxz˙ĸ×sĩ_.[&ÍģĩŅÁœ¸āæÅu4s_`7=ąXĖ"\8  Ŗ´îēĒ%+ƒŽvU€1>+Ā›MËøāŲøčĪėÎIŽËį›e>Æb1ģÍfŗŠt$m׈vĀ?­ã *Ĩ@I6ŸÜN-ŠTJ[[[æv?‘/Ÿüä'U­Vįæ% P‹2™LÚ{…˝gífRĸ‡Æ¸ģĨf€2em:mø|>Õjĩš˛ų|€2AkĩšŽ9ĸÉdb ™šČa! éøņãę÷û*—ËöŲčJÃü'6'‘HĖuōyúé§5 Ŧŋ0‡âd`Ũ™˙ŌKÆgœN§ÖēyĖ=wŨäKKKÖÕpV.—-ÆÕ)ĻéĄĖ:[ÍgI¤DL\UˇÛĩm(RŠT2s“ëėbƒ‰‡qDģ¸FĻ͟E aŧĀu],•ËåL āõz 4¸ŨR$8>ŲčaaNŨÖb€>;ˤ›a ĶE 6É͍eŗŲ9Í.‡L$.+ˆöĖu$;$đŪĀ‚ōĖų~îY,SĄP°r5ĨÚÁ``Ŧ´k:r"’T(äķų,*‰{ŲÁujS:†EÆœÉdT­VÕl65™Ėz!㠆‰ãžō9XŠTĘXZ@'å^ ;NgŽaŖŅ°ĘĪ1‹ŠVĢ™ķžŽ(™LÆĖČ˜;h?€<;ä’æŪÖ*ĀčbÜØcay… ũâ/ūĸzčĄ9]Ö˙Û@ĶÃp˙û˙îkŽūđ‡-ŦywwW’ĸH0ePĸ•úޝÍnƒų`#gCĄ‡+e,âÁ`Đ8Nē,æ­VË6˜ŋÁx ĀR@?yō'%ɘX•P(d:(~‡ģPJ˛Î8›]}› ¤vww ˆŦĐÂĀdR6īvģÆrL&ëNĀæî‚?6  O„ĩ„Š…1 œ†õÚŦDæÜCŒ ”`—––”L&->E’™ Üû‡=„ŠÅböĩ€L@úT™ąXĖâm\ŗ,Ļ˜Fî­kņb“ ‡V íŸM•^Šš\Θ1ē'˜ Ûīŗđ]î7}\‘ ¤Ķic•é"‘N§ÍâŪ°[ÖlĩZĘd2sĖ!Ŧ€ˆ:”’a2Ũ&yÃĀšĻˇīĻû>¸:LŪY´is77 ‡¨ååe9rÄ•ų{ØR€c,S>ŸˇÖu¸Õ}>Ÿļˇˇįžŗ×ëUĨR1Fc?ī?īŦĸĮã1ĀšŊŊ=yS,õôĶOĢßīkggĮx,3÷<2Œ>DáLJÍ#4ēRŠĖšma‰yī$Ų}…Ĩ‡4lp:6ž–xétÚÖ[4‚nīsœÚ’T­V5UĢÕ $ĸ‘d^-ƍ=3ā6üq•J%Ũ}÷ŨögãņXķ7Ŗßú­ßŌ#o9‹nĖ %zŋ߯˗/Ģ\.›´Ŋg­Vŗ\=âwˆ^Ą4ëjs@â@Ņëõ $nnnZ ;Ÿ0ėūĘģÕjUÛÛÛv€ĸt9ŠžcĮŽ™–tn_äjĩjs‰ŸÍģÁZčj ŖŅ¨ĒÕĒ­°ÍŦS€nŪ}֤ŸąĮ‚|…x<Ž3gÎĖũí~øķŸũ؟Õ?øAeŗYe2}čCŌwÜaŽā7ŋųÍ:}ú´ŪõŽwéã˙¸jĩš>ôĄéį~îįžo°¤9íY_~ŋßĀZX ØĢVĢ5×&Ëį›5‡įÄĪĸ–ŽÅŽÍ–¨ßīΘžĶčķĪ^đÂH’Åp|ņÅ/*čgnûMĻ=øüƒæ`…Bj4ƚą1˛Đ"ėG›%É%W¯F:ÁÁ` ­­-;ŨÃÄB‹ÛpiiIÍfsŽ3ā‰ü2Wëã'ōūjĩšeˆÁ„s2 翎‡1 ­Ķ阀pC ėĄ/Âũ¤\æ2ؤ%§P(˜qÍž ķ Ú'6aiÆ$ÃŦđ{aĪØ,€M7NĻ0N+™L[IĖX.ŋ߯ĨÁ’e"  #ɌņxÜJē€nÔĄ%Ekšŗŗ#IæúuÍ n‹ŗÕÕUlũ~_ĘįķöNÂâōŪ ËhēesĘĐ8õŨC ŨYĖ_ō0ŨVkĶéT§ĶZ¯§ÆWžĸŅæĻüÅĸrûîßø?°vL= “Iųs9M ųĶiu÷KšŦĖ/æm¯×Ķɓ'åõzĩŊŊm˛Øer&™ģwpjĩZ&]Éfŗv8åĪ1÷°.RŠhĩZưrāâÅũG˛Á|“ēūp°sį %sÖSbĄ8Üp˙ēhayaļaqˆ“ņČw{ /ƍ=đŸáøßø ų|>ŊãīPˇÛ՛Ūô&}ūퟟcžō•¯čįūįõ†7ŧAápX?õS?Ĩ_ûĩ_ûGũ>ÄÆ,ˆh 9m’1'Ƀ)Q˛›L&s}5sšœ1„îFr{ŠÂŊįÎø#ęĻÅÕĢ}áų/(čßŨöīäõxõ_.˙‹/q™7Z…MÁ˙절k@_ģHŽVØR˛âršœ}æ@  #Gލ\.ÛFs@ɔr4ė_ŋߡ6v0XDU°ÉŖY !€įy¸íöâņ¸mĻn×´x™LÆē´Ājņųam¯ ö…y`îQ:‹FŖŠÅgnÛD"Ąø$n.RŽ Ŗ € ÄÛ%†ƒķÁÔ‘\í•[E˜ä>ã~I˛€`mŗŲ´ žĪį‚LæŽWރŋ8q€q5‚€/‡$Ķ× *”ą]ũ%ŋF´^¯ÛįĻ Ø†ÕÆøãķų XRŽä~p퀏ĀtĒׄB:ã÷ëĮŖøŖJ>Ēi0¨ĨÕUMOŸÖ0•’|>íļÛJ¤ĶĒVĢJFŖęĩZ´ZŠwģō–JŠ\礸tĒŠĮŖA"ĄA6ĢÎM7i7›3 {”dą(0§ŽTđĖsívģĮ”aĪ}>Ÿ …‚j¸Oõz]ŅhTņxÜæ7Ī9•JĢÉ‡8‡%æŒ[B. Öęn0¨\.›ƒŊVĢŲõ æũãĪ:Ž2™Œ=7ĖPų|ŪÖ3×|†6ôėŲŗzėąĮŦō˛7öXĀã¯˙ú¯įū? éŸøÄ˙c¨ķŅŖGõå/ųŸä÷Ã0L@K ˛'š5Nē,Ö0gŽH™ÅŊå¸D"aš–étǟ8ņzāôúŊįO]|ČĘ+>ØČũ~ŋžøâ5™Lôî[ß-IúôSŸVŖŅP*•2‘9‹='k˜ˇįk,ŗĪC ‘fēËd2iíd2iĨ6*nIöũĪ)Û´ĐJJåbŸĪ§ĩĩ5+yQfĻ\ĩˇˇg`ŲŊNĘÃl08 ŲÔųs_xV´“dŒdģŨ6]%Œ׈pHéō{sˇiĻ„L&cå;JtĩZÍō卆"‘ˆŨ_4[čÖܖka˜Đvģ=įÔÄãqUĢU떀“ˇÛíĒë™ÍŊFŖĄJĨb,eeš$ûsîsˇÛĩĪ€[ÕÕБ!X¯×mžą"É4Ÿ°œŊÍÍMëüP.—íŗdŗYIŗ’xŊ^W<>ãŨ`ƒĶ8ô\ aŦ`"ų0ûŠÁ@?‹éŽ@@>I›Š™Œ‚¯yŧ‡ɛɨŗ¸¤™9}ō¤ZŊž:Á ĻᰖŌ’×ĢõJe6īS)ĩ._VŦՒ¯\V´ZUüōeĨÂa5ošEÛËËŌ~'€1LZŸĪ§ršl†&î÷šƒ[ĩZU0´ųĪ3’dØcūØaÚAS;•ÍfUĢÕė`ƒ‹÷đáÃsŋ“8™rš<įūÆđÅzĮ+‹Ļq…ĄĮČÕl6•ÉdæÜĨRÉ\؅$™ŽķüųķļF17ãÆ ¸×= 0\ny 6‚|2ÔöööŦ”ČÂG¤ eBʁ0"äÔąŠŊķÔ;õŪWŊWŸ{îszčÂCsą,ŅhÔ°Â`0¨‡.>¤NˇŖ÷ž}¯$éKë_˛R3aēŽ ˜3bjØJžÆ-§0qĀ(Ā0xąXĖX Ė l,ÕjUŌlãĮãļ1ŗˇÛmÛ¤ƒn°Ŋ0i°&”â1 šŲ”›hĐčŒāÅd T.—į\Õ0°ZW`adØtS锒ū¤EfDŊ^¯9ĀŲ|Ņk. člr¯yæ0o ˜ŖÃáĐJ„0;<[wĀfbÄ`.ņ<ĸҍEšs!ĢRŠXаÂŊ„‰Į6_šF‡%Ü7×،ÛļÎÕ3J˛û!ôÛî÷û–‘xmX7&ĻŨn+ë´×Ģ7†Ãē9Ws2ŅšáPߍ]YŅŲ[oÕ¯}í,Įo?‡Gųōō˛&“‰*•ŠŌé´jĩšÅĢādmļÛeŗj-/k|ķÍēÔh(ÖjiåęUeΟWöüyÕWV4¸ãu=…ö`Zļæ9üšŠ­VKkkkjĩZĮJ$s%qd".ģŠŅƒmŠTš FĮã*•JsfˇĢÎcÖ+ähc}žY:˛ĸjŠËHGJŨTp€ķŦ15qxđzgíëJĨ’ĒÕĒeR2ãÆ Čb\÷p;{¸˙P uuflúnë0ž—¯s79Jc0xîŠWšŖ%ī’>wūsúĖSŸ16ĘírL&įŽ•ßųųg?¯ßŋđûōzŧHĨG4e×éØétĖí;Hk&Ā™Û˖¸úûÂjÂöėėė¨X,ŗÆuÃ&PFĻ”¨åįƒA‹:AsˆÆŽ ÖŨ߇F:0Q°aœpítA—č:1zÂ‰ŅˇšŅ/…{ė‚#¯×ĢŠDôŋĮãzW<ŽņtĒ/´Ûú?:ũ}(¤ĨTJ§NŌwŪiZĘĮ´äkĩZĒ×ëōûũæÄ& žƒ#9zŧcŪĨ% Ŋđ? ˙õŋVãU¯R´^×ę#čļo[ĶĢWU¯×í@ÁįD1e'%€Q¯×íÃÂÁŒ˙įP+ÉôʔÄašI)@‹ K8™Læžc&“ąƒm2™ÔĘƊąĐÜįD"a‡'iî5sˆæ`Ŋĩĩe:]æ&6ÖT4FïT#&ÅX0€‹qŨ]eS6€ ßĀâÄ"H$ėTNwâ.ĐÕNĐ:UĢUy<Ûøūđå?´Ō‹Ëܰā6ЍÖBĄŧđ ĩĒsĩa”YčŲøÉ1“ÚGņųІQļ…ŊƒEs#0CpbgãāšŪbąhĨ&×@"ɀ,ŽCŲe¸$KH)Ī æk=DLtČķų|ĘfŗÚŪŪļ)ā˛Z­ĒÛí*—Ëx$WŅeaÍĐb%‰š{ä–ŲÜV€°€<_ÚÜaHfŦķķ:;×Ŧ8‚ÁØēsÍp8T¯ŋŸ[9Ųī đ,ņyožųfF#=zTÍfS{{{­B™k#"G’šâ€u‡H$ēzõĒéķ%`F1ņodЎŒgÂįæßŧgîk%֏ûũēÅįĶcÃĄÎõz*KšėÆT*Ĩ×ŧæ5:}ú´Nôš.#EšĐL$zų嗭4ęņx´ĩĩe€ŨëĩėvģÚ8tHƒ\NšŨ]-_ŧ¨ĶßųŽĘ'N¨•Éh8Z˜}ŗŲ4g4lēNĀ ķ €Į\ã€IŧœūKKKVf§•# šX$WŪÂA†Ã!kGąX4“J,3Yˆ{ˆ‚Ĩg] –;8U(T­VÅ•f,/ũ “ɤ˛ŲŦEÜĐŽŽÛíĒŅhüŖ ‹ņĪk,ĀŸîA§yr偀2™Œą:lL›Ų„Ũî’´ĩĩ5ĮęPūsc*(›š`ūŧNGNĮJēh°hŌ|Œ `ˆ׍Đ4×ĩ‹6åi21ZP‚lP"¤t0"\V:pĨK”~¯-²ŪyvlT0!€$e2éŧÁÂĀūē׍FC;;;Ö*¯ĶéÛ&ÉĀ)ė™i.KÁĪL&“fFqMXʛˆđš'ĖIä¯e$™nžŸ[Âw5U0=˜œø994Œ[[[j4ظ¯nģ:Ā÷ļŒ`j6tîæH0žČ܈€ƒ Ę(™3‡=˛Ųė\ŽŨĢŊ^Ŋ?VÎëÕī4úÃnW/íkM™ƒņx|Ž}†% V f‚Å҆cĮÁ‚{Ÿ…ÂaMOœĐwßđíÜzĢō—/ëđ#(š˙îĀjSÖæĀÁŗįĀ …”Édæ‚ä îŽT*ö>đNGŖQ ųĻíŪaŸī #Œ$‹Ŧ‚ÉfސsęķųŦ|ŒK› ÍfSNĮĘķD>Áōŗņ^pŸX×××Õnˇíä€Eg—ŸąĮ‚\Œë€—L&c Utg”įĐû rÆõHųÂÕį°0|ëĻņSēķx<ÖÛR’>Ę]¸NÉ5¨¸Œŋ]ŽË°Šˆ|Y[[SŖŅ0ƒž`€{™˙f3æZ0?ŠGyV”}Īh4RŠT˛Č•`0¨L&ŖÍÍM>ŋÂŽbø Œ SĶCp1eD7îā ¸AėøNĨR&.§ĨÛÆ –wķh4ËÂK$öü˜3ÍfS“đAŧ%CX*Zbt §dF×âA(ũbĀ@ĖOŠ•Ō6Ī}&édₕæe €!}‹Ãᰁ6ĘԄEŖŖŖ4 øäspĪĨy3YpĀ,,ŗ-%YKAô ŽÎ–ų‚ ĶΚx˜gqd8Ô˙ ęŋ_ßî÷õõéTĶDBž}öŒīĪįķ:s挎=j@–R2ī>@Ļ “Ëå´ŗŗŖxŸm$”đ(ßš-÷*•Š$6ōŌ`p ķ9ÆãąršœÅÂēaĮĐŽI2 ĄØ‰D²üø nč. ’Ÿ-Éæ lm.—ŗŒ4$d^{ŊžĒÕę\~/ėŪx ””(3ÁäÁ^↭Ŗŧ毇PŪtõZ–Aļ_æĘsn”z$Yû$é w,@d:Úéņ4­˛Đ Öj5Ķ÷Đæ 8‘3’æ˛öX¨¯Õô öæZøŊn>Ļ6|Ø57H›ØâRøœ”O)Ō=āĮ=ĄlJÉæŽ^¯ÛÆIy @ífņ`TčĢL§ BŠyŪ8-ŨžŊŊ^OĨJi.°{ČĄÜč(-//[~ ÛŽ’8‡Iä] €…M—¯å™r lĮ3a.đ @áūP*l4öl8d°aķLyælЮ֏°bXh÷ ģč–Tŗ0FށˆtāÕKKú_B!=;™č÷öÔŨû>ŸĪ(¯×Ģ›ožYÉdR§N2V™9Āāļ”ä÷•ËeĶ­Á¸ cīĨ™‹÷<(˜xtĀņx\ÅbŅžƒßīWëŽ;tųčQ­ūŨßé_<ũ´žŋë.M÷ƒ˜%YŸ]IÖõ¤X,Ú{ÃûéķųŦo:6Ǝu†÷a8œõØÅÜÁƒQ-•JÅĀ,‡NĶ]ÎT(i–]ũf8Öúúē™âĘå˛2™ŒÉføšĮ hõz}Î ´7öXĀŸîÁ&`äÁ€\ëbdŅ#ËĮ!)›. Čëõ*‘HHĖîÃēũB)ŲPú$Kë ŒËī`Ķ—f@€Î#8XaВɤuŠ`1†Ŗ$0âēGŖ‘mhíč\ȃ @īGÆ ?“MđÚH4CÍfĶ6u6KQģŨVš\6„Š€ëÄŧB P],-˜phX ×d2ŅĘƊĘ垕~a5(ƒA­ŦŦĖ• iĩ…n Vˇĩ랆ĄuYcîëātÞ1 ‹EsšO&+A†qæŲ˛!ƒõÅíįsŲ¸)9cŋĪĘ÷ŨnW™Ô,R%–ˆ) ¨šD|Xwß}ˇ­-KKK:~ü¸ÅõTĢUËÍëKÚú—˙R+˙íŋéļ§žŌKņ¸"Î!Š’wŗŲ4æ†ŗŗŽ“D"‹[B/ŠLĀekš$ŧ3˜’úũžŠÅĸŌé´˛ōųŧvvvLûÉīEâáę9ÁšĸO}ųå— DĶåƒŌ¯›BĀ3ģå–[ŒŠ\Œw,ābü“ Üš”;P°”D9-Ã&õû}ĨĶiI˛ü5W%ĢæĻėĶ—H ´n0wŊ^ĪĸS€2€H,SĨRQ&“1QzˇÛĩŸ KÄĻéfzž<i a!aĶ0H`ĸ=|>ŸivÜ Bˇ4'Éũ.+ĮĩĀÕj5cZ(_‘;&É@˙MЎĶé˜& ]ĻŋßoL%€Ö5íđģíã8uY—FŖa`’Ü<€LgÚQoÜĶ<ķ˙ĮLĖĸŅuÕSĪzQ#5€…vvßnNĄû æk˜Û.ƒäv}ā]Ã/Kŗ|ēũŅÕŠS§ôĢŋúĢv@ƒņNĨRjĩZē+ÖÛ=:ë›ûæņxŦL&ŖüÁ´ž˛LK\ƒ[ĻN§ōz<Ę4› ^¸ HŖ!˙ū|™ø|ęÅbšōúũšŒĮō ōˇZJ]ž,¤‰×Ģ^,Ļz2ŠÚM7i睕ĨŊßúúē666tøđacVŸ}öY “FĪ[ÚčtÔēûnŨöØcēų[ßŌ ¯{ö$3˜¸nXō%Ũ>FÞC45ög‹ö“ųt šŽm)Œo2™´%vÂ܉ÉōûũZYY1ļĐmK‡kƒÉK/ŊdëāY’EHĄ¨‡C]šreCž);Íb,Æ÷9šÍϒɤnģí6 @uurԁĐŪ‚€#úŘ( Ŋ‚õ€ŲaÁ%@•(‘H$bĨ×h4Ēršl'sĘ ,~ˆã1P:J&“s-ã8Í-//kggĮĖ(DQ -"Ö6ËeÎ0“āÎDŖQíėė(šÎĮ J&ĨVĢY°.`•x‡zŊnĨpĀ1åAŽ'—Ë™ĐS å \ĮŨn×XT€L’û,ķųü\LÅh4˛øĘŅnđ/åĘnˇkíõ(ēeōč$ǘ/f%1´=ËįŸągĄ`HˇŪvĢúŊžļļˇæÜŽ§2Ũáč åĻJåč¤zŨžŧK%ŋd2ŠŅp$īŌ ôüuēí÷4 Œ)uõ].K0rÁ2ÅkKËDqm€væ*ī Œ.x˜27 Ѝö ’$•JikkËŽĐéķų”ķûõŋy<ēäõęĢÁ ˛šœĸҍîŧķNë.ÂīƒÉä}Ā…=ĖZĻÂaE/]RėâEZ-õ u–—5ČdÔKĨT”/Ôī÷U­VMļđxh4m6å)•*—åUK§U\[ĶŪęĒäņ(—Ë)›ÍjmmM‡ŌĨK—tņâEëΌšĘ•HHRt:Õņŋų #]yãUo4ė™ŅŽw) @ŁÍ`00°Ė;‰.“Ã$ō×le˛‡}ųË:ŪŨ^čŌAgōEGŖ‘i›‰˜!r¨VĢŲ*ÉØaÉųH$ĸl6ĢjĩĒ?øƒ?˜“Û,ƍ5 āb\÷`“ėI˛2 ėC,ŗŌZĩN§3ĮÂą¸˛Hâ>%[ †…r+b}7˜8jeeÅ:}D"UĢÕY¯Ņũ…@%čuÜ("@ˆí`ãôąhã(FßãÆ¨„Ų )ûRn"ž6g4ŠZ­ÚŊä`šV@0úJWˇ&´Õ$E‹€6ÎuˇōlÜpl6)˜SÜŅ„:c> ƒ2 i}}}.´Ûũœ0™L&•ē%ígņ-Ŋú~„Åd<=Ī۔L&õ ?ņ *•JúÍßüMŖ0¯ņx\ŖņHÃÆ …Æ!uēŠ+›CîA„ĖšÉd"…¤Î¨ŖÖ^KŲlVWwgzĒP,¤X8f`ĄT*)N›Q]ė2ۃ^¯g-Ã\# s˜îŽËŊ$ŽQ¤ <Üæ<'Ü˸)ũē:/œŪÃáP˙ÆįSĪãŅ_Z][S>ŸW.—ĶáÇ t0píīėė˜×ī÷Ëįņ訕+Š?¯édĸîŅŖ*Ūu—FĢĢj9eî@ĢezĐ|>o‡x<ŽŠĪ§v$ĸŊdRíLFžņX‡šMĨ.]Ōéķį5¸tIÛgÎhZ(hwwWõz]ÅbQWŽ\ą{…ö”ųã‰D´7é…S§tö™g”ētIŊÇ-1€÷ 3l=û‰9‡õ ā U.—­dOÛĮ~ŋoŽˆÅa-*•JĘårV!áŨŦ×ëÆŒ#Ą; úÚjĩjė!€9LąXT>Ÿˇ.?Ö bŧ‹NĮæĐbܸcãē‡Ë†ą‰år9cF`–|K2g/Æ L04”_Čps]ÆívÛJ(0…hŽČæsS÷‰6aPæq™:Ęĸ0Jné“ Ņ˛áÔ^ĢÕ 0ÄČģŖ 8sŨnÉʍĘqŖCؘ`â(¯:a"yĮž7‹Y *Ø@.˙&,–hĖ(n++IĘfŗ‘č\šé81Į°anađy0ļœĢÕljé1Ȑû‰D´ģģkŸíēüĮlėĪF’ĩųƒiyEwŠ!G:(cnoo[1ˇęōō˛Í[Iļ!¯ŽŽÚ5’ĶÆ\üĄ‹XÔpōôŨų@)‡’ šP—U'œyCģ46}\ö‘HĞķįĩÁ nYZԟF"úÛo×Úښâņ¸–——įē†PĻ—f:Ø|>¯ÉdĸjĩĒöwŋĢ“.Č×jŠ{įz)“QúČMÉŅ#J3‹g€ū“ %ô^¯§d29ËhÜįZ­f‡:Ā“ËÆ•JĨšƒĸ{–f•C‡™ÎđÖ[oUŠTRŊ^7ŗ =Ĩ[Á`rxC …,O5kU|<77ķbܸcQ^Œô |ĮwĖ1Q.́ūŒr.āËežÜö1åķųš2ē8Ę<0|”ōÜü<ūŸMÚuĐJ˛¯cSba„ĨĀ ;Įâ ´)!´v|â` )¯ Îhšwn¤…tП“Ō ėŸŨ–€I~ļË †(õ˛°SVG¤ŽŸk€Ũäŗ`¤D¸Ųd02Ü;‚¯)sÃ,fܸ—Uívģss€īĮ,‹ÅtĪ=÷čĮüĮ•N§UŠT´ššiΉŌ;˙ĪĪ<ą)ú†ÃĄŽ9b÷úĩl ÚQZųŅųÍęŌŌ’˛ŲŦ•´ųŒŌA¸2â~WŸˆN+N C†pôčQIÛĖoælˇ×ëĩŒ66`Ø,îī_īvĄ”îŠûŨLÆ@ `L—ĪįĶĘō˛îm4´4™hį‡~HGˇš KčæU^›qņz•˙Ú×ÛÜTũŽ;Tēį•÷]ĖŽI)‘H˜k2™å×­ŽŽšÎ΍áqƒŊÉVŽĮcC! R)í?ŽpĢĨ#WŽČ3Ģ•ÍZˆ3ķϰ_&FއĒíîĘčÖ.]Rs4Rc_‚€”,Shhy]ƯŲlZäË€s `ūĸŨ5Á=ā.ŽÕjÆ$K˛÷˛VĢ“ģˇßƒ9ĒŅhØ!Ö> Y´ ë%`’ßéĘ4X/\¸ øÃv\Œk,JĀ‹ņO2`2X|`8-ŗr &ë vŽ lhíü~ŋ‰˜&'t7”Ã`rø;—UL§Ķ–ÛåfąaŒ˜N§–÷Į&B÷ €$§w>  +˜Ķ  čĨ}÷ˆëįÚܨŸo–uį:ŖŅ¨’ɤÅUHˉ t`įĩ,O&ĶRš'W˛Ī( Ā'Ÿ # $d86G0ųllâ_RSåry.ÔØÍ:ÄŨĘ5 ĶĘĀī}ík_Ģ =ųä“ßēMIVå^bŠÜÆë2†{{{ZYY‘¤šdÕZץPHŲlÖJĮ|mĩZUš\–$‹9"îŖ×ë0ōzŊöėéNÃÜrËĘ<ĖI°€ķH$báŲ4ĐÚū@§ŖĖ÷ߝժGí^ŗųKƒFŊčū¤QôO˙TKũžjoģĘ>ŸûŒiš\V4U*•R§ĶŅŋ­å ķũ…^0ŖL(ķ SfIfŧöãwz=mžæ5Š_¸ ÃĪ?/õzērÛm’ĮcfŽzŊn‡ˇL&ŖcĮŽiccC[[[ŗõ&VņĐ!Ũ˛žŽJ2ŠA2i%~ŒSétÚZKrũČYÉÜ+‘>ŸOÛÛۖM)iŽiF÷JŪ ŒĢÕ˛Lž ‡C[§†ÃĄ’ɤu}˜F#-//sF7›ÍÎu¤áG¯ÉÚÕ)ÃĘ.ƍ;p1Ž{ 4–4ĮāQ BŋC“JĨæÄÛn(¯ë:esƒĘd2˛(Åņķ°d˜(w¤ŪcŠ`ããz^0ôĩuÛ?š:BX X+) ‹?6Ŧš4;Ũg2™šr$,Fō~ŋ?îĖŊ üŖP`$“I;ųƒAz‚ģŋl`Üî÷3ú*´ZîæŒîq<>č7 +CIyccCįΝĶŲŗgU­VõÍo~SNGĨRɀ†[VÙéš)xv<“fŗŠnˇ;÷ėÚíļâņ¸Âá° č…ôRĨG æ"Lj:V.—3ÖD’VVV,À  á@áū9×ŅívuęÔ)˒ŦT*&ĀL°˛˛ĸVĢeŋŸ2= šKX×@ `!Ô8Ŋ]°‡ķ&.“É(LjõĢ_UûÄ yNœĐd?–6PŗMŸĨĨ%%ÅžüeŠß×Ö›Ū¤ĨLFūũĪājBam]-0ĀŽ-ĄāTöööĖŲJÎ%Ņ8ÕZMãS§ä ‡ĩöÄ{<Ú¸õVcø9=zTo|ãuîÜ9UĢU3žôORļZÕÍÛÛún<ŽT*Ĩbą¨Á``kåVIÄYgÜuŒįËڃėį„ÆļZ­ZÅGxŋß7‡?q->)iK˛įŠéƒ“4ËæŦ×ëšL&ĒT*6gyn|r’P(d†'ä.‹qc\Œë”˜0L¸ e63N¸|›'(aF`ąÅí늡9É6›MÛô،)¯Õjĩš¸Jj”)ŲüY,Ķ鴕N)wR˛ág`ŌčĻR)+SJdĄĮĖ€€ŸØÅõ Pã{Ųx`RÉ‹FŖÖc”Čœfŗi›-ē=6C6?L™LÆĀŒ[žæžķģ)ŗá *gsĸ´Ųét,¯ 0Īĩp`~øá‡U­V 4§Ķé9v~ˇ”āâņ¸Z­™+—˛ĨÉŋ˙ûŋˇŽ”N)‹ŗ™ã†„ŨáŲāvĀ÷z=åķy3$¸Úŋd2i ĨßīĢŨn›ž‘ŽĖ9b‹ØØ …‚e˙ÁŦąi/--+ 6į`Œč§ CĘ=Ëįķs†!´~<›vģmāv6šĩ%_¯§î=÷Ø;‹dã&üN§ŖT<ŽØ—ŋ,oģ­â›ßŦĘdĸCŽÁ†2,s‚gJvŸĪįSŖŅ°ŽĩZÍôŧ“0Ščlq03‡¸Ÿtˇ)¯Žjtûíēéüy)Ö3Š”ršœĒÕĒŽ=ĒÁ` ÍÍMũå_ūĨÖ××­l_ŠT”H$´ŊļĻCWލ|öŦ­QČ ˜¯Ž´03ĖũŖß.s Í(`2*‹Š\.k<Ī™Ãˆ.â"5áš2g‘†đgČPø^ŪQĘëŨn×ĘĶŠH%đīg=ēkÎbÜØcãēn\N˙°~”dŨvZĨRiN(NąĢ Boƒ°…Ö V`Į)™Í ķĖ‹Ũp8´ūŸč¨ĐZQbÆ@€F…šÍˇRŠXYæŽėB>?@Ā ¨,ĄŋŖÜ ƒÉ5Ŋ ãôžJĨlc`ĶD/čķųĖ|âÆō¸ĨC ˇƒ ŋ–v\–’LĀ™ ėŦc>ŸˇëuģD¸F˜^¯§ .Xë0>;ėYfŽ9…kĀ6›M+¯öûũ9ķ€n<žuč4–ŒI‡g_,í># * ös:d ¸ÕjiyyŲ䀝jĩjs Ë3puyõzŨb<ĐČÁ8Q†§dNi ‹€ŸŽ€€TĢÕ2:‰˜˜ë<÷œz…‚v&Åö3)WWW5MOJįJųĶéTŅ'ž¯RQķĮ~LÃHDY¯W[[[öy4n‰qgggN+ęŽ …‚’ɤŽ^Ŋ:÷ū3§y`u™{ápØæ`§ĶŅKŠ”§NiåâE-ß}ˇ:ûēÎVĢĨy<ŅŦOŦ͛oÖá—^RfsS/ī¯MŽĢZ­Z’jĩjėœ ÜĒÎīíí)“ÉĖ>‡C‹Ecq‘ļpđēįž{Ôl6ĩŊŊ­jĩjÎhIQD7€Ÿ$ëŗģģĢT*e/â‰(˙û|>­­­éÎ;īÔ_ũÕ_Ģ\,uėØ1Ģ,ƍ;ŧ˙ŗ/`1ūy Ę8”b%’ŦEæ´Z”!či #ÉžŸS5Ŧ €PåN§ŖzŊn`‚˛ÖŌŌ’vww ėđõhc(§âîŖlcÆu ‡C;Qûũ~ ;IW*Å÷ËH8aî ›S< <ŸM‘ōåO˛C9Úí] @u˸ËËˊD"f6ėŌm Ä3āsbÖŦē÷ŅhdL#Œ,ŒāžŌ5%J$Œ(˜$Ânv"ė1Ÿ {ĘĩĶ%•J™i‚~´cîSˇÛUĨRą jîS¯×3V’‰âUüÜ@  ••3E"% c ‰Ül R&GkĘ\Ā ÁIĨR:tčÖÖÖ,[kÉįķĘd2:zô¨ĩôJ$Z^^6À #€Ô ›N$j4nm)\.Ģvü¸éF€ļļļė~šėąĪ7Ëȋ5›J=˙ŧöîŧSŨũr€o/ʕ€Œ'¸íŨûÎŽįŗÅ3ĮéN(69 kîŊ÷^Ũwß}6Į^>|X­XL§.\Phî4 E"uģ]›C>yFLFÕ|^˛›ęíGGaēč÷û:vė˜”ČĢäpGė ī'ė)úKIĻÁCK°FÖÛ;‰¨ŅhX>"ƑkĻ$áëtß æ7 Ķ}>ŖŅHÅbQÅbŅŪ'JÜt!YŒw,āb\÷ @ÖĨŅhķƒ!Âm•Kæēzp°€‚d2iŅŌA—I6lB€ 6IVĸcCĻ4įņxŦ$ jˇÛvĒwC‘Ņ6â(=|ø°BĄ*•Š9b—UŖ,Ėį`Sãķú$™ Ķ˙Dģ$ēŒ FwķÛ(kĄŖƒ!âZØLŌé´|>Ÿ677MåįŒh_…YŊ'NMîF4eԌuËfŗļiģ™{€ĘkEģ­Ķ(ir/)sVĢÕšbŋß7†ÎĖ ~'ķjggĮJüŌÁĻŊģģk€Ÿˆ×ČBiĪez|?-Ĩ°^YYŅōō˛˛ŲŦâņ¸˛ŲŦ’ɤŨ %ápXápX•JE“ÉDÅbŅ)ô­åį˛šÃ¸×ëuģ‡˜(/Ÿ}V“pX‘;ī4`ŽD‚{ŽÎØgŋ_Šsį4Ėd´yô¨:Žéâ0ŠđŪ6›M‹^ĸ|ĮU*• XÉŊ„™n4ŽÎß„9ÄíîîĒŨnÛ×rx‘ĮŖâ=÷Čßíęđ‹/š1v[’=Ģétj&Ēv쭿ɓ ėíéæ}h$ŅÚ~ 6ŸĄÕj™D€f˜@îšŖÄÚ`b“dÚLtĄäúņlž|ōIÕëu fÆ`”L&ĩžžn€ž ƒV™ŧ7Ŧy”ĒŠ ‹E=öØcļrØ .ƍ=p1Ž{Äbą9­Ĩ´SÉdŌĖ z—jĩj'mLœ¸aĒpkŖ+…™÷Ģƒ"É6V7˜Øe*ų;J@ččNâ2aFÃĘS4XgņfÇÁ WĐu÷ĸ5”4×C–’$ā“ķ{&“Y?TŒ¸%YÎådØMJáhÃbą˜ \ĸhŽpbgŗYģNôXü|,! ”4 ‰vŨĮ×ŅŖGíkp(ģ@ƒR&÷Ÿ9ŗ‘RĨS:ÉH˛ Ũ(Fʉ€X€.YÂŌŌ’ ûíɈL!Bę˛Ä0€l€ Ũ `BŨŒAWÛč’sáyķį”ÃyŸÜŽ8€O2‰Ûét:zųå—5ĖÚ"RÖŗŽ"­–ŌW¯Ēyâ„Jûΐ€†yĀģ%I‘ĮW`oO;÷ÜŖČ~¨¸ë Æ)īõzĩ˛˛båįx<ŽfŗŠvģ­'NH’…ķy%™™įl"‘0P`ÄĖã÷ûuåʝ;wN/^´9?Õ…´yâ„2/ž¨UGĶËú€n‰ ,w3‘P7WúōeĶĐÂHŌŲđ6­ƒ 량Cŋ“wĮ•Z ‹Ļ•âh42ĀX#íĀírÄÜN$ĻmÆŅž´´¤ršl%åvģm%ëņxËķĪË;ĢwÛmZ^^6đĘüäūĄ5ëvģę7›J\ŧ¨ŪĢ^ĨážcŋT*™%|ÚáņoĀ ė ë6ŪŨŨĩÎ3’Ŧ´I¯lÖKôøŽVĢ*‹ĒVĢöîŌ)ĨyÛmęÆbĘ^¸`’ ¤nø;˛ˆh4ĒņdĸŌáÃJ—ËJīĻ8<Äš:¨Ôëu3ũÎΚÁڃķÚ=tHšĢDÄãņšĀqä'ô5FBuvÔ-á›Ŗî!…÷‘u‰ŸŨjĩŒ)†š^ô€XŒ… d1Ž{XPl$ĸbąh7L Ā‚M‚fé€N§čWÜöU’Ė Į"Gy3•JKÅ&ˆĐ™r’Ë(°ņ^îËEé8‹™Y€FYˆ´ëÂdcĻúĻku…’ėpĩrŨ€`4’|›˙OF_8ÖŪŪžršœ‰ÎŅhábæsHĻĶŠ†VWWÍÉęjæ]™LÆB“WWWmC•dĄÕÃáPŠTĘJ˙īxĮ;ôÃ?üÃōų|ēõÖ[U(ôÛŋũÛvī(GōŒ[­–ũ7%W7/pNG@†žĻ–Ŋ™Û}‚g;S:ĐBĒ™#ŅhtN‡*É´č49 ģÂŧŦÕjĘd2ÆbüH§ĶÖŽųĀa(ŸĪ›†ķ ėŒ3ė6‰îŧW°zŨnWˇÜr‹1ĶÃáPņjUtZJ$täȍĮc­¯¯CËÁĮtŋßWôģߕgčâ!DKmooÛ÷…ÃauŽ“įųįÕ~ūyīŧĶ%ÉdRõzŨĀlģŨ66C]f_‰ąĐ~čĐ!“<ėîîÚ÷ķŽI2į:ēW7ŦŨī÷Ģ\.+‘H˜œ€÷'úp8T§ĶŅĘƊš¤ƒÁ LĒŽ‰Šlo>ŸˇCÕbܸcÁ.Æut*Dmär9+ŲōĘBā“dņ-”ę`/\ÖŠŲl8r5JŠTĘ6B€ 2Îc’°qƒÂöĀĒär9+ģrrXĀĸĖL&Û `„ŒåZˆGĄŧ‡íôN ‰ßåj%ëÄF(āį=ãv!*– –F’•ˇÉ(Ŗü,ÉX€äĩAĶWŽ\1Ņ'+++ZYYQĄPĐŠS§t×]wY E2™T>Ÿ×éͧ•ËåėįšĖÁÍt3˜Nú?cZ!¤öw-›,Ĩ r)5éęëŒVļ•Ív—Ÿ ĩēējZĀjĩĒVĢĨnˇkÚ.~žË2uģ] îu 10Y€%>ĶÕĢW­4IŒ›/P@i‚{Į\aŽŖ™ŖŦÕ4Ø$/Ŋô’úũūœ>Žë§Å”{ųeuŽQm84°FįrúܜÍp8Ŧ|>oĶĖ<׆ĻššˆŠ ¨ŒÕëuĶŌŅKš÷w:ĒžēĒŅŌ’2/ŋ<GäfĻĶicÅ[­–*íļzá°V$û\Á`Pëëëvŗžš9’ŒQķzŊÆrķ.s2™ŒP>3 1nŖ••3öpTĢU[Ëå˛IP`oųZ˜s×­= ´ŗŗc€{Ŋ p1Ž{°psĸ§ŒžÉÕŠ1;…BÁ"X({˜ÁĸšāS,ôwÃáPõzŨ6|˜˛ŗ\sĮh4ŌÚښąk008ƒÁ\ŲWm§ĶąpcØ–PŌA)›˛’āüJķ‚^ŅQÂVRŌ„ąãQnÃe ØĻ ÍF%É:Ąąķ>|XŖŅH•JEõz}ŽÖh42F‘Í­€mccCwŨu—nŋũvĶ&}ųË_ÖĶO?m`„RĢ$‹Åīér€&öņĨ—^RĄP0ĶĀ &”¸ž)Ŧ %{Jé^¯WÉdRũ~ß2)Ų¸ŲÃáP—.]˛rŽËVJ˛ b—ŅC˙é:`i9įn nˇky~’ŦŦȜe>2|>ŸvvvLwF˜:ËuŒÃO;Úm•’I÷ãüL €"|’†ÍĻĘwŨe%b´‡ ¯­­Í•ŅÍÁPņ~ÂØÁ–JRš\ļŦDI–ũčuƒ´™{Ŧ1nF ŪŲI  ú‘#Ę_ŊĒÚíˇk¸ī6į†Ėo4še‹öR)…öM™LÆ´‘Déσ͉Åp8TĨRąš ÛČ{ÉŧáĐŗî†És˜ 3 îkÖ<ŪwūąĸSt싏˙`äHîįącĮl-s%‹qcޏ×=(ĨÁäOáK§l6gŸĪg}0ÉüB¸H$”L&•JĨĖųʂÕnˇĩŊŊ-IfÎĀĘâËÂwûí]ũÆo<­cĮ*ļҤR)s–r­J…0F0nčĶĐ'bFpčũøŦ|FĘßbSÂqǜŪ¯,ŪŽ)„..˜ážSVėõz֍€˛6›‰ŗB>ŦQn˜,×Û7PքŠÂhP¯×õČ#čŌĨKĒVĢúŌ—ž¤_|Ņ>Ÿđ†Ķ6ŒnģģģĒÕj‡ÅÁũ†9”:Nø|>+Gr/Ü. Ü;ĐHø\ÍfSNĮ@<îHĸÜīuÆt:m†%×Ŧ‚šB’sŋųsŪ˜/´_ÜīRФJĨbr bއr6s€ÃœÅl2Øwyîíį rɸčF•Ëåf`ëé§5ˆĮÕÎå”Éd ¸QOĨRĒÕjR&“‰|ĀŌtw8OĮãą‰„I8(­ļZ-cAŅÛņũčaÚéRƒ–û7NU>rDžÁ@žË—Õh4äņx”Íf­lÍ{É= *yŊŠ´ZŠ„ÃjˇÛfFÉ„Ų¨ē†,$.äTōÎŽBĄVWWU¯×Õl6U¯×9åđÆ}äĀJyŲ‡t‡ęf]r˜ô!?!k{–Īįí ĮĮ:ŧ7îXĀŸîÁ P`žN§* Ļ‹‚1aa•d+Âvrîč—ËFE< œD"aÎSœˇŽŋ˙W˙j]¯~uS?ō#WMF›+úÛFŖQcPpæáH$ģÍe2]—×+É6ût:­Ã‡Ëįķ)—˰t7ŋßo úŽFŖĄD"a.d6Ã|>6Qˇ×2LĘq’Lc …Œ%%–ciiI—.]RŊ^WŊ^ˇ d~7ņlŧläˆČénņÜsĪéã˙¸ūĶúOúÆ7žas€„ŅhdŽF´”iéØ;EN ČuY\]3ē<ØĀ`0hĨāétj=}ÉĄk6›Ęår3ƒ˜N§ ˜ĄKåPAŸĪ3U(ėy§R)3ŊŗŽ.°~ZŸ19t¸1F°Æ”Šy?; Íė÷ûē|ų˛}fĀ*Ā:+ŌljėķikccÃæJš\6ƒÅč&ãÍĻ:…‚û÷Đˆâ°åš™˜‡°s0R0Ō8¤pŊn–"™šĖ_J˙>ŸĪĸŠX/Úíļ666 ĐÚ= 4…”Û˙ü’ė°BI˜JēQĄ ßxŦé~ø3/î|CzĐh4ė}&˙“kânXķpģK˛Œ<‡G¤€ü\.ge|Ō `RY˜ƒŖŅHWŽ\1fŋ$ĶS\ķĖadŗŲė˙đŊa1ū˙=p1Ž{ ÷ĩB¸ø(Cĸƒĸ¤Ã†ÎæHTš'Äí.ÛE¨*L u˙ķG´ŠĮ3՛ß<[ĐīŋŋĨT*a?—M‹ ”ë J˛žÃ”ä”baeßâå$Ŗkķ†Ų ˛`°Éēe(ˇëŦ”4§IkĩZĒT*ÚÚښ‹RA7°fP* …Bļq+ĮīLR‚GŖF˙VÜĢãņXårŲ6?€$ė+Ÿ‹ø5î'åZÜá\›$;0’ɤ,ļaŨHbąhā‡:ŋ-āĘ2椚~ˇĢ•d]`._žŦbąhŨQ˜G”œWWWí~N¤†˜î*”ρ€ÚíļŠÅĸÍ'X€;%gbGâņ¸ …‚*•ĘėŪ×ë¤ĶŠėƒ0Ān"‘°Ø [[[ō ‡ōˇZōėįáš%ĘŔČɐã>#ĢāaĖb~š œ[ōoĩZZ]]5ã8— ä~Á~†Ãa cĢiGˇˇˇ§v"ĄČ~?]>ķ÷Ũ¨$5ö¯+P­Î9ûiGG 6Ūä°hŦOč39„ņnÍfĶzķ.ģs`F™™{Ž”ßÃup8qjXyî!÷`ĖAi1nėą€¯ĀņÉO~RgĪžĩ|¨×Ŋîuúķ?˙sûû~ŋ¯÷Ŋī}Åņöˇŋ]›››s?c}}]o{ÛÛŦüķū÷ŋnsũ~›+ @æ?7Ŗvƒ“/Ŧ ĖĢcĄ¤ÁfkÖét,ؕH Ā&ŦĘūāP™Ėė˛Ų‘nžšh?›RĨB˜96(€,–ëūĨÜKŲNšéøQŨn÷{JŊ(JEl’n†ĨdXĀ_K6ëd†áËfŗæ˜EGãķšų_€'60Ā%?ĘŗL¸ŽĻ’Í—ō7÷WrģŨVŊ^7ņ?ŽņFŖĄršlĖŖ$ãôvvKĀŽ‰ •JŠX,Z3÷9ÁžĀ2ã0Ėņ{pĩJ3]"ĮŖbąh™q&Isf(õ…ÃaeŗŲšŪ˘(ņK2@Až#íā`l]íŦËŽ˜°Ÿ\?ÕZ­ĻRФ\.7Fõēv÷Ų=ä ĖaæÔx€=yZŌcSļžžn›Š¤9A9› ƒHõ0NlŒ8ŨܲMģŨ֏ūhCkG#~č‡ļÍPĀb랔€;X%NÛDÍĀ ¸:´I”ĩÜ kūŗ‘øfn$ŅÕĢWmq†…sYEō鎍8áwpŸa2¯e]}>Ÿĸҍ2™Œ•ˇ]§Ŗ$:tH+++Æz‹Ã š…Öh.P'fãʕ+öŒ`Ųëõē:ŽEĸÄb1cßX€€(ĪVĐév{á>ĮÎΎe"Ū§„ 8ĨŦ×l6 ˆģų~…BAĮˇ{ ¤|†Ž–ŽīåYĀļtģ]•J%U÷&ˇ[C§ĶŅÎΎbĀb2™´|AĖC8va=]&Úe3™ĖŒ‰ĩÔjiē`ę÷ûj4vÍĖБHDÁZMĶĨ%Ōiíė똿”w}&×? TĢÕ´ŗŗŖĨĨ%3Vņ™yÆãąļˇˇírKöČĐŖ…ã!˙. ĒRŠĖøN§ŖÍÍMËWFęĨĶōF”JÆĀąVėííéĨ—^20ą‰(¸Ī´c:Š=zô¨|`Äü9ķl}}ŨŪLaÉdR…BÁ:ę`rqŲ7× ÍÁ“hĄĻč&‚>”ųâjĨ]Í/ī-ķ˜9J¨ûbÜØcá~ގŊíms˙˙‘|DŸüä'õío[‡Ög?ûY=øāƒēīžû$I=ôŽųŋØ{ŗX9¯ûĘwÕ\ujžĪ@qÔ@Q’ɆeFÅû!ũ×iĮ2Į@nûÅ .ā~ė N†ŧå"AŽ;A"ÄÎā!íĆ!å&Ņ@›ĸDQ¤HžšæųÔ\÷áÔīvŅNēc5ĐPX $’‡į|õ}ûÛ{íõ_kũOęīūîīôôĶOëë_˙ēŽ\šĸ­­-­¯¯K’~÷wWûØĮô[ŋõ[ņŋ:Ø8i˛áģú4Œä˙B`'hwÄBČĸ•H$§qLl"ÅâX'Oą‘Đ÷žwOāŋϧŸŽë™gĘķk>*Ãėī÷Ôj—šhaŊ``āúũžršœ`FŖ‘ÅSĀ*šZĮX,fŸ‰~§h =éūČwK&“ÖŽ*›ÍÚæį†ŖŨÂŊJ9\:v#ŽF#ĶēS@".[ŸĪ§ŨŨ]ËöƒŲãī\<ĢX,fÚBJŦn;7ˇŧ…^ V‡MāŒf–ƒæ@ ĐÁÁÁkFė (!ĐÜ@$-ŋ2™Œ1Ęw|6žëȄQ‚ C ˆ ƒ  äĘ`†ŅÃĖVVVTĢÕlžu:cōpšōŦ\sƖN§cV"~ÆÃĄ<’|sVŠāŧP(˜yƒûîv5ˆĮÕęttōäIĖ0ø°RhÔøŦ|ĻršŦt:­ŊŊ={ĪŒ°°’ŦķLŠY‚)+ )›ÍšÁƒ n‚š1á¨įëpx¨Ãų;H•īIV(lķX’ū<+•Šfŗ™ÔÜ÷ŗ ,.ķƒyŖāæ>W§č[‘?Ђ&™ļEK˛ų‚3_:Ž8P’w]ī€Rî%Ŧļ$c/— ārHKø–“ÉDögĻnˇĢĮ\Ī?˙ŧFŖ‘žzę)ûšõõu]ŧxQĪ>ûŦž~úi=÷Üsēxņĸ?Izúé§5 ôüķĪë‰'žøw]L›"›?´ūJĢ.˛įŌ鴁45,t°TD7H˛S=›âũßųõČ#­…ëē3č>ëO˙ôúŸŊôRRŋō+˜v‡#%JŋßoíĒ\ŨėÚ%ˇ J99•JŠÕjYÉ& m˙Öm./kōÜX Ø6>;ā9 …T­VíëõzōûũVĘĨėÎ}ėt:Ęįķ’´ ÉÜŨŨĩ͉RĨ)Ā /`=)…ãL„ĨäJ›Ŋų=Ÿ‡r›+sĖĐ…B–ˍFm3mˇÛŗSėę9qŋÂ8WĢUR7ˇŦÍf KCkŽ^¯gĨ\wŪ¸:3L&Œp8lmëˆļIĨRĻOŽZĨR)íííãėõzUŠTŦäL?åd2ičíímeŗY͸o“‰†sļ U­V ĐXŊ“‰FsÍs@[čv§tQj ÚÚÚRgOœ8a'ކŊī:ĨVōAŨ<=Ā–tÜ-$/h+iĪÆ}đzŊ ĖķŊsíĸ¤…÷†÷‹ōíd2‘7ÔlŪ‰d8*“ÉØ{‚–C¯×3ŗF0´đe‚TFŖ‘Ōé´Å[Ą÷åđ üQáSŅĀ‚Á„k'6iŊ×Oœ8aÚL4ąČ!$ŲũģsũXŽģw,KĀoŅņŊī}ĪôrŋüËŋŦgžyF.\Đūūž"w‹EíīīK:Ō;‹Å…ŋGxÎ×ü 1 ,´•_ X6bØŲk¸įØdp‘2ĻĶŠraf܈I å_´Gų—y Í÷=IŌ/üĀßO§Ō`āŅ3Τ¤lB¸ōpŽJ˛°VWSVĢÕ ¸"a<Ų´?”g1ģ%č:û`„Ø(‰}`1w™X=Œ'01°8YŅÜáP%fĮíBü„ĢYƒ}…uAI°.‚rî •.#”úÜčˇëJ­VŗR1Ŧˆ$lˆŽ`ƒ͑ųrgOåd2iåzū0‡9ųLĻL %į`0¸ĀÖ2OÜ,FŽ‘Pįļûƒ!uĨt9á^ŗawģ]uģŨ…¸Ę~h˒ɤnŪŧi?@NqŖŅP{îfÎ¯¯Ņh¨Z­b^‹E3“L†Cųį@ C‡‹fŗi›ž@āĀ ‹QĨŅhØŗp˙‡-:EĮcn\‚Ūiķį>îāŧŅh¨ķŦÅÎ"°kA䇇‡jĘ7×ĖbüBcŒI…CΐëAgËõ°>Ņîų8™L”Ífĩļļf€”~ŊnĨ„H˜nîĄčˆSŠ”IA2™ŒÖÖÖækœĮ™°’QŖËDbą,/ĮžEĮ}÷Ũ§—^zI˙ø˙¨_ų•_ŅG?úQ]šrå_ũzJ­ Īčč|͝ã3ŸųŒÅw$“IõįŦ–w>O8ôøũ~kįGõ€H™Ī'Íßsž_"‘0† ÖF$U4U2™46_Ûī÷ĩąąĄ~ŋ¯_|Ņî͍7ôĩ¯}Íļ°íHx˙p9ãäusk4™L”Éd”N§ížTĢU{VđøÛÛÛv˙h‡¸wīXĀ˙ wčŖ>Ē@  o|ãöw{{{ē|ų˛ŪũîwK’üq]ž|ŲēiHŌ×ŋūu…B!=účŖ˙ęĪ@wåū’d'Z˜é8— Q; …ÍƏō! ÃįķYÉS’ L´4°s0&€ĮnWúŪ÷Ō Ĩ`wL§Ō /Ä5™„lw]r”]iKÅgčvģĒT** ös fą‡Ã[C,ßĪũŒlL€Bū‹é‚MÖF™f¸ ų”áčY ¨…]ĄtčņxLGįÆnŒĮc•Ëe•Ëe°vJų’ėgâXŘ{›w €Ãq đ‡I“d%0„ōSFJŖ3ĘʀZJĶ…BÁœļÜ'ZÅb1ģ€ųH$bšÛŗuooOÉdR›››Ö/‰ †!‡ŪÍ0ĨÄŽ`, Dˆå3íííŲ\ĸ´Hžf.—SąX4Cˆ$cŲŨkb3ĮŊ:œŋƒųÁ‰ûPĢÕ ˆ1ŋ‘t&yį9†0™hŅ|rãĀĀÁ6°ŲlÚ\ÔXqÆÂôĶų Æ>–>Ė*™„Ė/æ‡(ĮŖ(:Ņ9CÉû8›ÍŦsFžát8Ôlūy` SŠ”†é@éŽÃßqČFK)Ɍ,ČĐōÁ–ļÛíã rĮtzŦŸ„Kķĩw–m9 ’ʁĮ>FLz÷ÜsĪBEc9îîą4ŧĮoüÆoč'ō'uōäIĩÛm}éK_Ō?üÃ?čĢ_ũǒɤ~îį~NŸøÄ'”Íf•ÉdôÉO~R=ôš‚Ÿzę)]¸pAųČGô;ŋķ;ĒÕjúä'?Š_ø…_øw;€Ĩc§' 9ĖĨ6Äō8VĨã ŋg1f„ãzØdųwDĀeĄ~ŋ¯ûīīj2‘ŧŪ#Āwįzh¨˙öߎR\ŸÄ Û Q^b!fqĻÃáPFÀĢd#ĄŖÔ …´ŋŋoē6Ø=Iļ‘ąQēZ<Ü´ûB$īļĶĸ+e6Œ)lŒ´ĄâzęõēÖÖÖŦLŠŅæÂueꁀX7NĻĶéØfíš øŦlX”ÆČŒ“dš(:™Ā27›Mcž™'hŊƒõ͏Įj4ÚÜÜÔl6S&“ą‡OĘã—.]RąX´Ō3nMJáŽKÖeĘĐ#ÂjRB%˜÷ĀąŋŋošŪÉdĸT*ĨjĩĒáp¨ŋ˙ûŋ×p84P† 5›ÍZ¨oŋߡ áÁ`p4|>…æ%@4ķöš×ë)™LEɄÃZ=<”2QkÎFĀjĩš™f0%ņw<#¤ |2+•ŠÉ,~øa…B!ŊōĘ+öĩ†ÜŪágÁhĮã*Í#^°Žt:æÉųYú IDAT“’ĮŖéÜÉÍáĐ€Æ!ë4˜Ôĸҍ>Xģ8t ¯ø"ųpį;ė^¯gåmÜč?Ū1Úš!éÍfSš\NßûŪ÷Lƒ +X­V-Hš˛ą$“k°Nđx7ų^¯WÕyĮ“ͧOS¸wīXŽā888ĐG>ōc)~øa}õĢ_ÕûŪ÷>IŌīũŪīÉī÷ëƒü õä“Oę˙đâIūú¯˙ZŋúĢŋĒ÷ŧį=ŠD"úđ‡?ŦĪ}îs?Ôõ¸ĖĸpDĶ”Np9Ât…ÃaU*;SúE—$ÉĀúšũũ}+š¸~čŲĖ/\h+Æci2ņčĪū,¯Ÿūé˛|ž™ü~éüųĒBĄĩ…`gôsüPKųʡ$´iœüYxÉUQjbķĮãVx MÂ4 ÉÚÔuģ]cŌn@2āŽƒÆĐÕL’+;!É@l0´÷^¯×´\õz}Ą|Ī3(KZ`RĨãžÃCø’´y\˜Ré8œšīÁĪ… Ä9ˆ ëBžŸĢŨƒŊD“Č÷@¸.l$˜fĐ á2Ez[#i!Gōĉ’d đ@Ol@+ēVJįĖ/Œ+++*•JĻ˙¤Ãß Ŋ$Ÿ“{ā‚H?“¯R‘įĖ+ĶRVMĨRÆė•JĨ#'ņښôÚkJöûęΟåw@7 Y†Î< tĘûO)Ōī÷ë]īz—Ōé´é͏‡hŅAōŪIG †lL÷gÂ.r˙BĄRũžÆą˜üs éV$ŠZ­*—ËIŌҁĢßWŦ×SīÔ)k_ųļˇŊMׯ_×ūūūBä\7ËųœÉč™Įs“ŽäČÚíļ …‚€™å˜7qבN™žx)Ö×Ų‹CœŠ‡ĘßČå¸{ĮžĮüÁü›‡õ…/|A_øÂūÕ¯ŲÜÜÔ_ũÕ_ũoš6b„˔פãDöNĮÚ°QR‰ĮãĻƒM /[˙_—mâįN§ScŽĘ§‡:}účÃúĩ_ÛĐoDôįžŌũ¯7uúôPgÎ úÔhôlSw™—dã °áÂİĄĸŗģ3.… ”ōo<7@‡Éĸ×ë-0tívÛĘT” aŸč:„eāįdų\lŦ”ÖČL|žöz=kE„ė` vāㆨœg͆Ëæ˜DĒ€-˜$˛Ķ˜;;;Ö°ÄF ŗ ČÂáI،Ō7îcærW§ˆŽŦX,ZĮ’fŗŠ^¯§t:Ŋ`ĄLí2ŒëëëĻoDëKĮũcpHâ9>aĘõW"EēŨŽu¨×ëŠÅbÆVģl–û:ņ¸sí'‡ÜģYŸĪ'˙ęĒ&^¯|Ĩ’‚gĪhįųH26})ė/:,7ũu)7S/—Ë–ĨĮÁŊĒ›SĮss XNŪŖŅȲ ̓bįĪ+‘H˜ü¤×ëYū^*•2&ģĶé(ĐéČ?ép.đų|Ęd2ē~ũēą†ŧķÜDž•tY„á…3ršlķ•ĩ…Jka$^¯W…BÁt‰>ԐŽ`ÁĖuQ:Ļtîf„F"ÂËq÷ß§?ũéO˙ŸžˆåxkŽÁ` Ī~öŗVv‚ųęt:V>0°¸âēdĸtLœ€‹´}ˇ9<Ųaœ’9ģs,6Ķ{ŪĶŌwž×ų/oWĨrT"­Õ|úëŋ.(“éË㑞üå¸zŊŠmä0yhjØh ’Ę~”‹)õĸû‘då0—tfa•ĮƉšÉd \JúžˆØ3ØGBŅqąQĻÅmˆŗ—VW¸2 Ī(nĻå-ĀîpxÔČvˆËæ3#g¯ĄeķŠÕj ē%´0­Ü;÷{SZLĀ€Ą…#M# ōÖ֖9PŨȤjĩją7”‰îĄ”æ˛ĻĖuĀ)zØ;3ĨãŪ žŅp8ÔÚÚÚh¤lK™LÄNĢÕRš\ļØ'´–Vjė÷•ŲÚŌĩlVélÖ@ 0ėšáh¤Øūž4ŠŊąaŒŸĪį3CŒĢk”ōzŊæ”FĮęęq¯÷z=ŊôŌKēuë–â Mܐ ĀüĮÍ; (ķ’U8 tōĘŨ\YQ#ˇÆŦAĻ{5&´VSĄVĶõͧ5öõč~ã7ÔjĩŒiEHWÖg=ôŪķž÷h{{ÛX|Ę͒$”š‘&pOaŋY_ŧķkĖcx…íē ™ŸŦCŽö$āĐmkØëõôōË/ëSŸúÔBg’å¸{ƒ\Ž7=(ˇĄ•ĄÔĖ"…F‹Sôh4R&“1C‡ßī7f @bsŸN§Ęd2 )ûˇ˛øiŧ†úšŸ{›üū vvvŦ”GÅ'?™ÕęjAívW~ŋėûÃXŽčČÁgåƒ‘ņzŊæ~&{…ˇ/­ēØÜaē(û%“É…ŪÁ8”ŗŲŦE‚ûææR‚ŸOįΝĶx<Öë¯ŋn@™įAYPĮAŽVĢŲŅī÷ĩŊŊmߗį-wą(‹1õío[ĢĢĢVĸGë‰9ʕ•d ų&Î;ŗĀ*#ŋØØØ°ûŲnˇâ‰ē]õƒAõ}>MįúŧFŖĄBĄ`ēdtuŽŪ“C$ŅųķįõđÃëęÕĢVV…5—dkz×rš,ŋ˙¨¯°+O€ũė#Má}ŦVĢ*‹ß§áœL&Z[[Ķūūž"‘ˆ2™Œööölū˛Fŗūrđt™éå¸;Įr,Į›œäŨn0SlpniT’•ÁKs’u3gÄlPrË.n;2˛Āf3ą \‡Û_´RŠËĀíB$ŽũŽōJ&€‘0.¨r™!Ø+L,|Žd2i ØÍC{(Éʑ”`¸-)eRޤt(x¸Ú#J†.ƒ‚îŽk#’„īánhÕj՞§tœWČķƒ9ÃŌŪĐeĢÕĒšršV×ŨÍ}&/P:ÎäYsh Äv‡ÜÉbąhÚ{ŨŧyS‰DBš\Îî!ē57oÆ&•J)“ÉčāāĀ6aūĮ4åę'Ncs' \YYQš\6Á?ú4J“…BAĩZMŠTjĄ› ĖZĩZĩŦEĀąkŧ„‚Ļ1‰hg2Ņy¯WÁjUĩy‰“÷f8‘H¨^¯ ŸŦ¯+{õNJ•ŠZķ{Éá…w7“É(.tžáāC0;mŅ0ô¸úQ÷™ĸ™c>ŸOŲlVįΝĶūūž|>ŸiE‘4`fáį0ŸOßēĨÖƊö=įĀ)¨VĢY&AõétZ­VKgšMĩæ ,ú)ŗūPeāŨá3ķN<ûėŗēv횮\šbŽ_Ęáč“iՇüí2‡"æs­VS:60œN§ÍđS.—­tží-šdžU>Ÿ×Ö֖ąˇn4U€%\Žå XŽ7=ؘn ļ f‚ ‹į%‘¸…ŨpYĀM:VŖŅ0Wít:ĩ = ‹ĢtŧIŖ§"–ÉuQļFjĩZԌ~ŒčXWĐ/;[ašd,Ԁc‚€:”‘%YH1l æ6HJŠårŲ>›ĮãQĩZ5A?@ 6Ė 3•JŠĶé(—Ëi4i{{Û4S€BœŗüL´Z”§ˆ0qËL’ĸ@žģŅ”|3lŽÜ+7ߑ9UŠTŦ$ pĸŧĘƒ˙§LĘŧŒÅbÆÚíļåHū Ƨ-`Ō:%]@4`āĸÃÃCĶY1wšŪ^¯§ršėD&Ü^Ŧ”÷÷÷Ļs ‡*„üŽš6’ø@~ŗŲT"V/S¸^7°ęļÜ zíĩ׏Į%™Žü€:kkĘŨŧŠŪųķęt:v_aū`§‰•ÁÕJ9­"ĪÖ50Qzå°Āü&&% éÚĩkĒÕjöķžÃÄI˛~ž°Û‰éTŠjUˇ/^ÔtūLy×1Āäķyģ—Á`P~ŸOŠÁ@ÛŲėBdÛ͐ÄģĪ:æē—ŅTēŅ?‰DÂØgI&āpĮÚįęFŒ]GęŅív-CšˆëPŽÅbĻ †õŒĮãÖi†ėÎN§ŖS§Niww×´ĮKČr,ārŧé[ĮĸKL@į+ā3ũIYHY@q7 Åb1+ _ŋ~]étúû\†, žjĩj %7ØL+ŽŽĶļ$c˛pפãÅĨCNķ#ČĢT*VF„ĄĸŧC)ļÃSƒ.ÛétŒM<ģ@JW€HtkhÎúũžJĨ’úũž ãšW˜'Üį‹0ļ“ī a#Ũhø$™k™Pjîyŋߡg ƒ û…ļ Í™Ë ÁJŅ~ŒäņxŦzŊn΃čfŗiŒ!ā°ãx—ƒkŲ‚Ė˙X,Ļ7ŪxC~ŋߘDŪ‚ã×ÖÖė=_Žģ{,ƒ —ãM@ô8ˆ¸fnH1 … ._Ę]”Ē$Ų†˜ĪįíTŨnˇ ČĀ>QfJĨRĻ›A—(w>@{`Åm +Äæ{"ÉĖ|?—E#ĖŸ™ŸÍ÷Ĩ|‡#Ұ,øFôS\3Ļ ŽM’10hāčB++JXhš`g‡Ü36J Ü#˛ė|~> ÷ m ?y€ĻĶéQôȸåNœŸnš@áG:°p`p#cˆŽ…k46WF†ÅēSĮŸ#aŽØÄršlĄ× ЗQJ¯×ë ũ+wŪ—5pXrKø´xãžŖ?hēJĨ’9šyžŠTJÍĩ5…•œœ^¯gAē¸ō†jĩĒÁƆú++Ú¸~]­ųũá@Ģk!Ę‹Mų‘wL:ę:PaÎÃāÂ.ollØAW—Ŋ's{ø\YY9Š5ĩžŋ¯ōędžķC÷ŗsŸ6{ŅhTé[ˇ4 ԜK<`ö!xœyčÎo†ĢŊt LH\¸Ŧ%”g‰ ‚éEãČā`ŗMÆ# *e˙ƒƒ+{Ŋ^kQˆsZ’ÉLúũž^9¸.ĮŨ=–p9Ūô ¯Œ˛ˆtl>pœŌŅBH9p6›Y)& ö…_œ’ ÛÛےd› ŽLĘİ>€RX)œŽü’då@ æ€'Ĩbzn"^Į KNZŖŅP Ѕ lŗĸDŲÎu‡Ãa­­­@‚!;sæŒ1„Ü\ąč¸Nô‘ĩZÍî7 ' ZÉppęˆ+W#š/J‹'6_ĸ°0~Ø(€(%:ĀŦ›Ī1‘H¨Ķé¨\.›™ƒ28 ŧBĄ`%2Ũ°; ʋnį‡l6kĖ\,SˇÛU>Ÿ7F Ja`v:=ęB| G™ “L&-†„’:íãŧ^¯õ+æ}Ã{Āĩ3_ŨŧģVĢeē8@4^ŖŅHĶÍMõŖQenÜ0‹. 0킏ĮŖŪáĄļîŋ_™FC÷ĪY-÷ĐĀ|BģF' Ø=$!ĸUč-LtĪokkKŨnWĩZÍdĖ˙zŊŽFŖaN\$"ĘÆŖ‘îã Íŧ^5|Đ´˛ąXĖúsˆÁlĩZęÔëZ¯T´—Ī+0gÛų,nœÖnYŨƒƒÁĀ\ûtšAs‡yƒ9„ĄĒVĢi8ĒP(ȗŽØ?וīF>‘H ÅbąhIĐ‹D ÷ ‘H,Ė;Z÷‘ũ¸w÷XĀåxĶÃu­‡QĢՌፆ…°Â)Z:ŽKĄ”3ˆ^Š2 å!˛ÅÖÖ֔Íf­„Lé G—Ę9FÃX!ĘȈįŨŌf4v,ؔãķ¸ ˛ÃÃCŊüōËēuë–õwH~‰Š ŒCX,  M!Z¤@ `qĩZM‘Hä(ÃlūųgŌąŽ ĀDY™?,ÃdÁ>âf#ÉØëõ´ĩĩeĖ#%tĘÁnų‹Čô[\ƒ×ë5ãš$‹žĄDEë3XĘl6k‡JŦ”īŅfRR#ÎemmMų|Ūū-Ĩ@ØĀ; FŒĪ„É&*‘HØ<•Žúüōy766Ôëõ  wEC6´ĩĩĨjĩjåvĘũH˜įxw°}ÕjUétÚd­VËJëä#ÂB40ķ †Cí­¯+[.ë°Rąį+Érô(âÖ=<<ÔĩŲLĩ'´vų˛zûû&‘ qĪaŸ<¯ũũ}˜˜ˆG‡&?Ā›Íf­ˇ-åUW+įFëĐą×ë)ĩŗŖLĨĸ—77UžJĨŌ‚‹ž{Ķh4”Īį%IgųĮcU67UŠTŒ9ã `ĨT;u Éd2öŊ%Y 9ė2]>;kÆŽûšįžŗg [Čú Iųf1ęūûī×ûß˙~IĮZkˇŗ _Sęæ=ˆģQ–ãîK¸oz°ĐR2„es™3ô/D}ĀDš­ŽØ8)q™ĀiƊƒÅo:ęöíÛ&‚‡! $GTeXĀ Cš%XA6#zˆž\6“Ī€ą‡N‡ĸVĢ™ MŽ[€'LĐööļ•Ē+ü?Ĩáx Œ˜7*K”[2w5TüLôĸdĐ.ŌNK:Ö|ÁFōŧŨŸÚãąļ.^TĒZÕæöļ• 9ŧĀ4r`@’1 ´ššŠfŗi,r,3§2īÚ7IĻ%$Ū &Îår* v(<<ëK 8…ŊįĪ\Ŋ^ŋßW.—ŗ6vnP6Ĩôƒƒƒ…Ō=ėŪÁÁ­+NG—.]Ō+¯ŧĸΐģF€*Īļ‘4‚Ĩp9–p9Ūô Ä,Q¤ė…hŸ’Ė‹6ĄŠœ˛a&`Ŋ^Ī€dŗŲ´ōå`đ¨§-ĄË68˜NŪ°ôØl°HZЂI˛|¸BĄ` ú?@ :)šŧĶáƒ2#æ6nØ-6QIļéâ˜DīsâÄ +r˙]ĻĪ+É4~°e”-ĢÕljæš.>;­ļų%ˇÄ„ë§3Κōëęęǁt{°rãņØÜŋ0„1ÀĖ8pĀ"O&kMÖl6 äšYg”§aNܲ"1F”_ųÚ­šŦ§¤…¨6˙Á``,xö0ē€A>/ō€“$+'‡B! ΆÅ+ Ø766Œ™åžK2},,5WëV>¯`ŋ¯dŠdž ķÚ-ĪķyųŧļΜŅúk¯éLŊnĻK`Ŗ¸˙„`X‘zaŅŨrĒtœWI[I×tEfaČīךK—ītôōh2? ¸Aá°¸+jT*ŽVÕ‡U—X÷ööŒ‰uCĀaqõԁdwwWÍfĶ>+s‚uM’]O2™´ĒߏƒcĄP°š ‹Įš„VЏ|vW’éa“Ũn ŦŸ¨xĻĶâÖŨÜܔ$˔Cë7T(ė3ŽŽŽ.h[3™ŒÖÖÖĖ9 ëČÜ„ŠĖķ@M§SûŸOš\ΘjŋßoYˆcsŨoŽ3 f×Āđxtę_ūEÉZMW.\Đpމ—*‹f2BË| ‡ÃÚTŦTT:qB‡s)‰kÜáŨAF‰D”ÍfuųōeŊúęĢēqã†^|ņE{§`ķíŊįūĮb1•J%+Õķ,ĨŖlKWËģđwe(H;˜ŧ‡€{XSˇõ\ˇÛUŖŅĐx‡k áÚ`đ(1RĐąa“‡3ptgË(´{čĸÜxžŽĶéXæ˙C :LŠ›#&É6yØ€N_îėa8ÖÎΎ1Ą8ŒiGŠ9—ËŲ×Ŗ­ÛÛÛ3F'™LęäɓōzÚ—íííŲŊ…mAŖøÄ]Į-gN: ôĨtĮiĩZÆÖšy“ĨRÉ:ÂāŌäįQFv¯›Č W× CH9 ‡3Ĩoˇß2Q(^¯Wų|Ū Ų—8Á§ĶŠiLy'Æãąe;bšÁ”!$‰čæÍ›ŠD"* j4"auČēs%’´ķĐC:˙īčĄVKÛšœ=ģp8Ŧũũ}ģNĘĖŌ`\!>@Ā+Ā1 ø…ŅĄo.Ė€ũ$,Īf…ŸÍĪ$Îe6›Y¸ąÛî 0šģģĢíím]ŊzÕÄö˜‚č‡ +E׃d2šZ‹žšĐg¸eaˇ3ĪÍŊ`ÎäáÁĻĸEå{¸ā†9:™LŒš‰Åbö{ž/‡ ÜŌ0Yčô8ÔЕđˆá đHiНĢņxÜz3KĮF$!¸<ų9‡‡‡JŦ¯kØīkõúuu×Ö4°"étÚĀ"]c0e…#5ĶiM}>­žūērõēJ€Vōy BG/É;ƒ‰Ö‘9Åû[; ŧs?y&’ÔítŋuKį_xAÉD/_ŧ¨mŸOÅbŅ~q':“ˇČÁÆī÷ëÔŪžŌģģú§S§4™Ī;æ,s}2l ēbš bĮÄĶÉģGųŪįķ™Î’÷äΊåiŪ_IvPã9N-‡ŌeY+•Š…åcσįßS•ā0Lyx:ęŌĨKúÔ§>ĩ š\Žģgxfnû€åXŽĮĀĄøāƒ.ˆņŨMŒRm.—ŗËGŲĻx¯Ŧ IDAT p薒ŨŽ”ƒ’sjŧx‹Û*ōl*•˛Ū´”.Yœa-ÄäĀ8Ņ‘ÁíâÁ=ŽD"Ē×뒴đo¸§°¤ü9%Z4„(÷žģ-ŗ([Öj5Ûp$ØaĶŖ|NGĖ.ë Ë øå0h&ģŽ<#:e2(ģ­Ę0WH2ŗl2ą/ÄŸy‚PčÜjĩĖ*\ƒëô†]rį2™€ÍfĶXL˜Eë€ZĘáf¸ā†9Č Ϙh#×Ä3 ä÷zuĪ˙øōz<ēņÄšĖ;Ģ4›M{OȘĢVĢfr5 ƒ*L&*ūĶ?)Ôíjįôi•ΞUpî´ÔM§SŨsĪ=Ö.Ž<>2ëĻĶŠ˛ŲŦŊË8Đš 2Á 6.]RēRŅA.§7îŊWړ‰NZt̰Îh>ũ~ŋVē]ũȋ/ęÖښnž:e œkAOĮÜã}§´Îü§,<›ÍŦ5%eU7ۊuÎŊ“ÉDĮŠĖO>+]€|8ÖÁÁÁ‚Ώx2=ųŲ|/>ĶĘƊ”KĨ’ŨSĖrŧ§_ūō—ÚÎĢ3ËqwĨp9ūˇ L\\M‚i6DNĔ$(k š,ņĩlĻl0”ĢøØ 2%ŲbĮBČ@7H, %:IVւQĄôÃF(qģœĀļXa…ØaĪ0ĘP6sMčŅbv7é¸ôĸßß-ķ\göĘƊŌé´J6_6OtV´[ãgš›!,Ŧf4ĩRŦ$+aæķyĶcēåiJā“ÉDkkkJ&“Z]]]Đf˛8šNž Bz6TÄō0*årYápXš\ΜĪ8ŽafĖĖl6ĢVĢelU<ˇ8IV–äį˙âæÚ1˙aß&“‰šÍĻI˜s`˜;˜f‚Á iēpÚʸ&æ'ī]sööö ĀxÕëõŊëxąÅI–…ā%ÉĘ ”49ÅrzE—Å"Аdå pLni %Wˇ ‹Qģšģå5°@ŅhTŠD"† XŖŦČgÅõčļCˆN‰@Cy›˛ ũ‰Ũ /د×k­ĶÜ0^ށûĖīq4Rr ƒ*‹zâ‰'´ŗŗcl ŧZ­.ä´Á°†B!†°'€ct{n 7¸u˞”á%ŲŊásĘîfpåŪ¤Ķi …C‰ë´…cÃæb´ÄcT ,`õĐ-ŌŅa<ĢT*-tŋ™L&:yō¤1šņx܂…WVVLë“Ę&ŒF´Ũn[´ l-īO(ŌūūūB/bžI§Ķ1ĮãQ>ŸˇˆŒPčŅ(UÆãqMÂa û}­Ũ¸ĄR2ŠØęĒ=¯BĄ zŊnz6O”Ûˇˇˇæ¤V&Ŗf>¯@ĢĨõím­Ūž-ˇĢI,ĻęáĄĸsÉ€Į5&ú]đų”­×ĩ~ų˛Î߸ĄHˇĢŊbQ—NŸ–VW%žæ‰ ×ˌ~îÔΎ;;Jūâ/Ē>/é’ĀĄ˛*ÁķŲlÖ¤¸¸øŦK0ÅĖgdd[öû}eŗY3mš€:ĖŲŠæ&9ä õ ‡ÃĻûäŊāĀJĨˈåņxė^#oH§ĶLã|íÚĩe ø.KČrŧéAi)leX#4B°@$ßfęæĩI˛ÖÖ= ēB˜¯×kĻØĖ&€4JwlŽlēhj\ķ…kæāįN&@Ž›vuuÕʨ°ސ–‘Ü0~&ų†ņxÜJÉиÚ"˜6´@\'ƒr8& Ø=tFĪ>ûŦeŅĨ\.[+ĩX,ļ°š¸:×i ŗ@ƒmb¤tĶ (§ŧéÆëõj}}ŨĀ9Aĩh%ĶIimãp8Ô͛7­ L$fÎ`2'¸¯°*” aîZ­–‰„zŊž øa¨WVVT.— đŧ××׍ųĄ” 3 Ā$æŖ^¯[Ã=@°īę ôČ xO‘ƒÁ@ëëëÚŲŲQŋßW:6WéĘƊ€ö÷÷í ÃŧFîĐ9{VŠRIg/]Ō+=ĻÉüŨ)—ËĘd2vŋakĮãŖŽ>kkkj6›ÆrO#ŨJ&ĩÛī̏ģĢėíÛĘŨž­sÁ †ÛÛLJÃōĒƒ '’ĮŖ@0¨Ŋkה…”Ē×ĩŌj)Ūí*ÖéČ7Ē“HhëmoSmuU‡Ŗ‘Šķ¤ĀØd21ã ˜ũũũ}>ÉdRąũ}­^ģĻîÃëĘ֖jĩš}=‡éČHD9í-Æ2¤€0ĀĢ$+×ŌfŽ÷wģŲlš͈k2â÷čaųĐėąžFŖQ;€ņ~˛ŋå^'īĪ‘÷—ŋ¯×ëÖe9îŪą€ËņĻ .@‡š›ŠįĶ.hŗDDG§Ķą|2Iļ9"ļĻ, ˜$OŒ• €‰ōˆ ŲįĨIʈ” ØüŲt)ōũŨˆˆFŖĄd2šā˛%چk‡Ã֛7N[É€Fv^&“1ûāēša aËZ­–šHaO¸”‹Ų q‡Ãa3 ;×étLÎĻ{Č÷ĸ kÃ=8ĸĻĶéø#ēƒÍ p%Ôĸƒ,š´Ė#´”étZûûûÆØ"`wÅņ°.ĶLiˇRŠØũÂũÍaY%~@׀5DöŽŅˆō6 ˜Åt:ĩĪܐm3œN§U¯×Õíví3°VĢUcÅųŪ„wģ]EŖQ•ËeģŽétj9’ü›õõu“P^æ 3õûuímoĶ˙üĪēī…tõī4į> ÁWŊ^Ī€9Ā&•JissSĨRI­áP777ĩwöŦĸŠ5›Š4›*TĢ:áhRĐč„Bę§RÚ__W3ÖpŪÁÅ5Vđ3ķųŧ1Z˜ bĀvöõēîŊrEÕtZ¯g2”ËÆæšFPŽ)™ķƒŒ{^Đ9%‘H˜ƒ¯AÃßŖũC§Œtƒw­Ųl*›Í.Ŧ/˜ĐzŊ^Íf33qh lž÷iDŗŲ4āév)ZŽģw,ārŧéAšfN:v%ƒAk3ÆBKŲ‘˜˜8ĸ?Qnų—œ:X 6ũN§cL ,`…?™`ãņØĖ ŽūЍëčt:VZaŖdō0#°Đ‡CkDØÄųũ~åķyÛ|¸°“Ž#&ÔíėĐę÷ûöš‰ œ wã덆ąZŽū æ MQŊ^ˇÍ–2¨tŦŖTG Ģ@é‹ŋÃŲ Čuã+ØđĐåQn …BÆŌP.Äō™\‡Ž €ƒāâú3™Œ@ĀÁÁ•JŨđqJd°_.s ģĮÆĖgôRęôzŊƒķG{ŗŊŊ=ëNÁ|ā÷0‰<{Ø.‘ķųŧoWû†Ą‚y[ŦŦH÷,˜NëÚcéžūgūyŊüČ#Z™X\mŲx<6W-Ėk*•RˇÛÕîîŽŊ˙I:ĢĢnnĒŅh(‹iÚj)Üéh6j|x¨™ĮŖH<.īʊꁀēsC‹1Ūsã9~¸‰H”JÆ!ʞŗŲLĢĶŠ|õUĩ’I=Ī= Ι\œŲ08øH2ס ÄģQ(´ŋŋo<0€¸ ›˜Ā‡ˆ••}ä#҉'ôÅ/~Q7nܰĩ‘x#bq¨ĸ0x”īƒÁ ö÷÷m ãĀ1Mŗęš¸‹]æ1‡å¸ģĮŌ˛ozxŊGáÆ0î¯zŊn9XD?¸ēL€.œ¸”)ģą 2øĘz-˜3ô~ƒÁ@FÃ6rLžŽ0g×Qėv AĖ.iĄ‹Äl6S<7w.ē0ôV”]6āĀg dÄÆ‹äÆxHGLšÛs—M—r,L(ÎC   ‹F’(´JŽS›ãdrԋ–Ÿįv$„ā˛ŲŦEî>< Ŧ3†ģ1q ˛C’éۈ6á~7 یûũž*•ŠĘå˛=ēy Å„}åđā–RķųŧąCĩZÍē–PŪåūHĮĀ‡ØĄÁ` t:­|>o%e×eŒ!9›L&uâÄ “‚KĨ’¤ãŦLW_wúôi=üđà Ŋ0ļ’ŦGmŠT2PČCėĪķågH‹mÛíļĒÕĒ3&é´Ž=ú¨ÂŊž.^ē¤ÃšŠÄĖIē_.aåÜĪ„Ķy_ŲlVŖņXãHDåXLĨTJƒsįÔŨÜTĢXÔļĮŖÁ|žņ°F`„rÛ΃Acŗ™S舊.ŦŦŦ(ŨnëÁ—^R/Ķŋœ:Ĩp4jŒđę\īX¯×í(IÍfS“ÉDétZ’,AĀÍåĐâõzU­VuöėŲī{7aÖŅöIG‡×ŊüōËļpX…ÁŒD" F2ū-ĪŽ^¯ëG~äG´žžn‡bd ]ƒkãĘƊåũšīÃŌ˛ŌŌ˛ob`I$ÖÕËíÁÉc†tėJuËRäkĄŖ$æÆÉå"ÉĀŦ%VÜ{€FJ˜BJ6„ĪĸąáÄüƒbIp,˛K ˆ’•ųĀįtÃŽé… [|$ cq\&Æī÷Û˙SBd"\g3“dĀÆPÅ×sŋÆãã†ķäŲM§S3ƒĀ⹟öq6›)ŸĪážåÁ††1ĒÕjŲfË&ŽĶÆčāÂá°Ũ ƒRŠ”™|` ļĖ%Ęđ”Ƀ’ɤ*•ŠiŠÜđl\°åétĒ‹/ęÉ'ŸT.—ŗƒŽUL$@&“‰1~ÜCž›>?°ĐëõÚū…B!c0GŖ‘1”Ü#8~ɧsYĖĀ<ėĢ7ŌëõԞÍÔ*TÜŪVž\V=Ÿ—w~ėF†œD+†vĄ=ē+€ ú=ؘĄųE Š ™˛+G`=ƒũ|6_6 I2a8)ų¸€íÎ͖ÍvŽŌ, ŗP(¨VĢYyPæ2¤­VË Â\er@@™M0ĖŊ@ņŲ‡ÃĄÍ ĸ[jāv ×% ƒ Ķė–É`)ĩÂlBÉ@ÄFé~ŋnˇkąA|JĨb_Ģ@Ŗ”Oiã)΃ųëņxLsÃę†ûÂlšl!ßmŪĖ:8ˇ9pa’aŖiä3ē%fˇuáĀëUkcC‘ZM…ĢW 4=yRáyĀ7Iæ<%‹“ú^2ę˜˙€L]@@™LÆĐ9ôpbū É˃dú|>­zŊēøōËĘčöƆļ|P‡ķļŌQų€éęãĐ&39DĸĪHhYĪXƒ&“‰nßžmîa$#Ŧč&ažš7Ŧ#Čfŗ™=#Žw ÆģĪĄ†wļŨn[9™÷Ā=Lö)eģŦûááĄ^}õÕ%ŧ‹ĮŌ˛oz°˜°)ēZô~’l‘•d%Pâ-0nĐ ŒE‹ ˜;P,­Å ēŦ;YĘS,ĸäûšÆ€ßá>až°Pl\°H¸žÉpcS'Š„ĪĖįÁqHiÔm5är›ÍĻŨc@'Ú/ ąXL§OŸV4ÕîîŽõvÜ KėĻR)Ķ8b” ´Øī÷•ÉdôđÃëāā@oŧņ†Æãąéô؜]ļpc‹–ŠMëÎūŦ’Ė ™;8xų367X‘t:­JĨbķ€?'$ļ ķ‡Ų„üŧH$ĸ­­-eŗYIĮmäØč1¸°aS^ŊŗŠyÄōĶ'I™LÆ@/sŠMfææ9Ãd2QŖŅ°CĨ?×Ĩ ƒĘœôR¤ƒA‹~ņzŊ:čõ4xė1eˇˇĩųÚkJ|ķ›ēõāƒöŪÂ:‹EUĢU­­­éāāĀæė0`ÖÕr"˙@;ę:WaéëõēÍæĻk˜Éd2æŦžĮēgwW̝ŋŽūƊūųÁU‡åŸ3ÜŽË„q*‹  ĘårÆPĮãq•Ëe3ēĀčq™ī˜9xG‰ZbnēF/žg ĐÁÁ’ɤ% p­€?ĮcÕŽ¤„9ČlFŖQ;ÁđĮãqíėė(—Ë™æĻž9˜_Žģw,M ËņπĞÁ´[fâ×xŸW2™4Í!#¨ü’ŽA8āŗ×ëéĖ™3ßw}Ė)XŖnˇkÆ÷™‚é@F ¸ģ éD"aZBIωu;Ŗpp0Į< ÎuŗÂVĩZ-cûpÍĻĶi į=ĄėÍķšL§z#™ÔåĮ× ‘ĐŊ/ž¨ˇīî*8?‹EÕëuEŖQ͊rҟår9eŗYƒG­"Ŧ’ŒUæŪæķy­¯¯K’Ö××âw¸§¤ dÆc]ü—ŅÚë¯kûäIŊđöˇĢ?ŸWŦAŧ+˜ËS0Ä\æ'€QĩZ]ąTøœ°v‘HÄĖNtÄá=ã™ō9`TáĐÉßŖ;u šKŽ# M/ˇjĩ*ŸĪ§zŊn2$Ė}ØCw\Žģs,{/Į=ĐÆÜwß}Ļ_cķaQCĪË´˛˛bĀ…2.>œ€ų|~Áhāv†H&“–f/gōõ’Œ5q;zHĮ^J9.ÃDY‡n0b€O ųų|ÛĨD:n/bÃas8úKég:šÎËÕ¸š X 0mtÜŽŌ€ĀÕXQFƒ)ãŪĶ­„Žr`ž^¯›šąąĄFŖĄ% ģ~—éŖĢå%W{į–ˇ¸™ëXĨ„ ķ¸r˜ív[‡‡‡Æ1ĮršœmēDú¸YmD™¸Ī„9D&!åļFŖaeÔØŧ›q„CĄCß\¯×kķÅÕLÖëuÕj5år9;Ô¤R)c{Üö\Ž€{"ģėҤ ‡CHD“Pn¨\˜OąXL=ö˜žũíoÛû 8pÂæōzŊ^M'åvvtæÆ MŊ^•OœPicCŨųgvM,étÚ´…ĖgæŅ)æ×Ë<æũrßëvģ­ĩĩ5G#…ĒU­íîĒPЍëęŊ÷ę`~PāÚz.đĻĢ ķuÆ5×°vq{{{vĀ œ=‹Yī\Ū%Įc%ŪfŗŠL&cec×)‡PĻ'†C 2 Ö3:ŅʑƒĩtĶävr50ŋ0š0ĮG_üâ—Ŋ€īâąä€—ãM6:´n,ú.Āsf’lsfŅfŅŖ\ĘFá÷ûõŪ÷žW<đ€ūôO˙TûûûöŗY¤ŨVc÷FúéFClo+>›Šį÷ëģÁ žzꔾ;/=šl!Z&J$>ŸO‰DBFC‡‡‡VndŅŧprwsū0¸%ģétjllKŖŅ0 C°1Ā5›n‘ëĨ¤ĘæCIˆ.ƒÁĀē|ā*Ĩ„×ëõT¯×U,-§ 6sÆf´ĩĩe9‹ÅbŅ6ŒŅh¤T*eŒ#eøvģmˆXÁPŪŗP(h0ØŊŊpႉ„^zé%ûēŲlĻd2)éØMÉdL7Ę}q3ÛČ=džqxāįûũ~Û<3”ĘápXårY‘HDJ$ ]B"‘ˆÅŒđėĮ•ÉdŒrc}ÁZ\f eķFŖa÷™2æp8Ôööļ$YšÛ=p]€Ęp8Ŧk׎ČŖ¤MšX:—¤élĻΚsz!Ö=ģģ*Ūž­õ7ŪPŗXÔVą¨éɓÍy„XK2ũ€7*ī*šš”Ģ™ ˜ĩxįûũžfÃĄâׯëÄÁĸíļzĄŽŽ­ŠvöŦ|Á r^¯9Ëp¸]9ˆÁxÃVķLé~C :ąQ<\čŽ\Cë‡ŪĘĪ{ķÜŅōU*cŸÛíļÉE8$ÔëusšO§S­­­Y`$ îá‹õ–ĘkœĮãą÷ã îáå¸ģĮ.Į›”D1 rÜl:4H”^ÜōY{,N•JÅДąN:ĨGyDüāõ /Xg ô@œwJúĩ›7õHˇĢąœ >čžnW˙WŊŽ—VVôÛĢĢēׄáöDĻŧŠÃÍ™ëbCwõ˜Øxˆžēņ0ÁāQOā`0¨ƒƒ+5*•JiggĮJ§ü[JaŽŗ”īÅsŖüĮ&D™šŅhØæÉ-É ŨnW§NŌ;ßųNF#Ŋđ ֎ Æ. ŲĪ`“Ļœ†Ë4›ÍëĮuņl¤Ŗ_\ˏŸ™›ÕjÕJûŗŲL;;;Æ8RžķųŅPšĸI ė‡ĀQ$Y¸o.CåFÆđŊa¤8š9oč790\Ā‚Y‚ÃT­V“$‹ŽÁy.ɲ™?0ėû%ēęõ“'u˛ŲTîÖ-=tp Ã×_×í\NÃÕUiĀ9¸ĀhĒ2™Œ]7fV@ eņvĢĨ@ŗŠsÕĒVK%ųÆcUĶiŊzūŧZšœĒĩšÎÎįē`ž9Æ "ž`’‡0ž´Ŗ$ šį‚TH@  fŗŠ\.ˇ`Ŗ ĖáĪÍá#™LęÖ­[Č`Ba$Ķé´é—CĄũ9÷ fŲmƒĢMłĪÅĪ–dšÃŦŖ$íėė¨ÕjŠP(X~ãrÜŊcY^ŽzP>w4aĨ`ü~ŋ1]€ƚôU•d›Ģ$;ĩŗPKG I>Ÿ×ÆÆ†žûŨīZč0Ā,‹éG›M}~kK>Ižãē'’&ūī'tåôik¯Å&Ŧ'iI ԀS7ļn ”|`\ hÄĄK&“æöD—įē5ˇˇˇ­w'L%`•˜6×Ōh4ŒŊ@ģ´ˇˇgzģ{īŊWNG7nܰ2/ߡÕj-h)ņšņnF!åpîÉšsįˉKŽō*N]X´ŨŨ]ĶĢa‚H&“ļYÂ"­ŽŽ.<36<Äø˜\`% fŽQĻ“dq.s k˜ÅŊ KĨ?.šI4‹nŠ‘N-dũTĐuI2€ļļļfáåMÆc=ÍÆcy‡CÅz=ųį‡ÂA$ĸÖƊnŦŽĘŗļĻŨ@@9‹ƒI&nô ĀpsîÜ9cöxũ~ŋRŠ”ļļļŦ$ GĒ"IÅbQŖŅČĸz`ápۖËe%“Iģ$Ôj5­ŦŦ(™LĘį;j‡ŗwLIĖCēžđ5hGŖ‘=72 ÆũNíķōJÔHčGŗÜnˇŋĪĩžwßX2€oÁņ™Ī|FņĄW_}U‘HDī~÷ģõÛŋũÛēīžûėkƒ>ųÉOęOūäOtxx¨'Ÿ|Rŋ˙ûŋ¯'NØ×Üž}[˙øĮõÍo~S‘HDūđ‡õšĪ}ÎĘŠ˙ŗøĀØéĻg 5e%t2äČÁˆ0øw”‹Ņ"ÁnĀēŦS4Õ˙{õĒé÷˙MæīÎ1‘ôŊhT›oŅhÔĀžëŪc3õûũÆ4°č˛‰ĸ}ä¤íļZķzŊĒÕjÆāĀİ8KG›;÷Ũuõš@˜ ņzŊĒT*ÚØØ0đ"É6%6/X97ú76ûõõuŊį=īQŗŲԗŋüe3ĪĀ< :ŦRj$ž„kƒmİ)gŗY=đĀēvíšnŨēĨl6kĪÎ5¯¸FžFŖĄp8Ŧbąh˜25Ŧ,€`ÅÁÍå;ØV6WʸhŦˆ´AĶ—L&mƒv]¨’ äš9}n,M$1ŽXIvMŧŅhT7nÜ0PîëÎî/n‰ ˇģģĢ|>¯JĨĸsįΨ,0Ÿîģī>ŊãīĐt:ÕWžō+gķū%Yā8×ĘsæžÁJ"|H‹zŋétĒŲt*oĢĨu¯W‘FCŅņXŗáP~Gž9€{<šų|šú|:ŒÅÔ\YQ#R{2ąļ‚Ž|0„g8šÅÍ …ą“dĖ7Ī"‘MŧëčtđŪÉhdšŽ#ŧŨn[)Ú5ī˜–ržōŽ8í5XcÜûÎs€AåžĖf3eŗYkÍį~}ŖŅP>Ÿ7ĐĮÁÖ}Î\Ī3Ī<ŗdīâąd߂ã[ßú–>ūņëīx‡Æãą~ķ7SO=õ”Ž\šbeĘ_˙õ_×Wžō}éK_R6›Õ'>ņ }āĐķĪ?oe‰÷ŋ˙ũĘįķúÎwžŖjĩĒ~ôŖšÍfúžđīē@‹Ū,žtėfeÃvAą I §p„îŠTJ’tžß׏Ė7ŖĪđIz[ˇĢŗ‡‡ē<_āaĩ`p5JĮŽãņxlî.đhŠ0€ŒF#ĶÂ\<øœ,đl2né—1ė…{ß?néĐ …™˜Íf:ūŧąE•JÅW(Ōã?ŽĮ{LŖŅHĨRI¯ŧōĘÂ3ƒŠÂm{xxheCI&¨—dė/Ŧ'Ĩę˗/›Ûx_ŅhtAÍfĖ€eĻĶiĶvąŲ3/Ø|éB„ Ņ5SÚ‡ÚÜÜ4@Ī&ƝN§Ŗĩĩ5 wcŠØ€ųŒ°Đ€WÔO ׈3į'ĪyeeE7oŪT.—S­V3† Iæâd2Q.—3玎gŸi:ĒRŠ(ŸĪ+‘H¨X,ęŪ{ī5ĮvĨR1Ļiī'ņJä(’ķ×ī÷íڙS’Œ$…wY’Ļ’fŠ”Ēá°ãqkßpę øâ׸ĶQvĖÍ÷FÚŨŨĩ6y°ŌHÅčCŅÆÁŽō5hp‘pāä}eĀžr}ŌŅA‰Ō1ëĪm+ī-­‰„šÍĻąotĮá°ãõzĩššŠršlU@5UÚ˛~Đ5F’1Ž Ā&‡ģƒƒåķy3ąÁ¤ÃčJZØ,ĮŨ9– ā€Q.—U(ô­o}Kī}ī{­tøĮüĮúЇ>$IÚŨŨÕɓ'õ7ķ7zúé§õˇûˇúĀ> ­­-ËŪúŌ—ž¤}ėc*•J˙K'BĀķįĪÛé€ä˛\)6*\h”N]Đ@)ƒŪŊü=`F­Oæoîîę?•Ë?Ôif,é/ōyũ?ķÁ;K\ˇōJÜå<ØâGø|vŗŨŨ]­ŽŽš@…ë’Ų̀I Ņ00¨nyāTĢÕLŗĀZ]]UŖŅPŗŲ´’l6Ģûą͇>ô!{^ĩZMôG¤ĢW¯ĒŅhčāāĀ\Ülxløõz]'Ož4āã:ĀaQČÄ ™N§íķĀ,Â&ĸ!•dNPIėLŠ–Mû㚠vvvėß 3„™„qÆt€ÃK45gŦ$:uJ+++ÚŪŪ^čLƒ  €(ĐqŦĀ`âēa;Ž•ĩĮBšau(č Éa¤LKˇņxŦ{îšGįΟWĢÕŌå˗-FڍAâ~ƒAŊûŨīÖŖ>ǝ}íkzņÅ•Éd´ŋŋ¯T*ĩ:pWķl>0¯˜u‰„:Ž•/šwÕjUÉdŌ 8 Ū!<t:­ršŦp8lũρ€jĩš666ė€H”:^€;÷†F–ÆPĖƒ÷˜į+ɘvW)ąáôBĮM ĀÆĄŒK†ûâŋēt钭Ą€` Ŧ‹gų,ŠTJápXgΜŅ̝žĒ•••Ëe›ĪÜ6ė7‘A0ņĖ…jĩē0gaôqsÃ<†ųž­VKŲlÖLe8vSŠ”=§t:mf"åéršlZ‰Ä˙ĪŪģI~žUž'+3Ģ*̞ō~ŠŽŽnuˇÜ’Û–,[WÔjK-lã€0X8›…p;˜16ÚÂω`×XĪ2đeĖÄ,ll¤AF˛eKØ`][­žŠģ̞ō~ĪŦĘKí‡ęßSOļaÁ­ĸōč°Ü]•ųŋŧ˙˙{Ūķœs+Cs-ØŖ fĀsC4Ā˙ĻėŨôĻcoi'×øØŪŪÖG>ō8qB7Ũt“$ŠP(Xŋų|Ūōķ …‚ōųüÄŋ“ĸĪĪ\=>ūņ+ÛŸH’Ŋpč (deGJL>FÄ3E°jčâ0TāR%iߡœ‚a\t áĩŒĨ+Œ/Ėųųycķ(Õ˛ožw&ĨY^æ‘HÄvā>üæÉ/‚äû$`:Žjĩš•‰ŸˇÅCņ0ŧápQ>úŋé?ũ§ßŌ` 3†¤Ķi냌 Ä÷!ö%QĘčˆî%ŧI“ú?:zĀd1_čQœL&'Øk˜a6<ƒÁĀL<[°l0‡Ŋ^Īr“É¤ą‰°ių|~ĸԌdÁĪáršl×* úüųķúæ7ŋis¨RИ‘(Û1Įãq+ĢSŪ‡ÃĒÕjļQlˇÛ6ß`ÉĨ]Ũh4R¯×S­VS­Vŗ˙F†Į•H$ėžņŨ>ŪÄkų}îíímŽĖS¯•\YYą8 ˛ŲŦršœąeô!ũÃ?üƒžō•¯üŗ? ÃÄđ˙ũOũŒũčGõ‘|ÄūŗŲԁŦĶL% ^´0ŌŽ–’ĸ}ĘF° €@€}ģ/ØJ‡í™Wˇé\Ņ2yą4 į„ķ•—)&@åIvÕ0f”Vģ,Zč²ŲŦiKģũoŅÁ ËîâåM)Å F Y›››ē|ų˛†ÃĄ666tņâEõû}=đĀHž{î9=ņÄzæ™g,ve~~^ËËË÷Ø#"˜`0‰CÉårĻûb^PŠĢVĢÆ¤âęä|gÜ}ĨäKnaˇÛhqŤÕ:­Ã‡ŸÖšsoÖūĪŋŖ÷īūŊâņëۊVVH’Egđũž\ ‹ HČâ§—––´žžnĸ~4\>žƒ&äŨn×Jä83SŠ”•#ƒÁ šKŅr…B!•J%%0](™ÂBâ0åw{ŊžöíÛg įš7ŠpŪ’”N§ āĶš'pũŦ$Ût0(šĸ?åģČĶ“¤ršŦD"Ą­­--//›F›Đe6ívÛo2-Ëå˛ĒÕĒVWWÕívĩąąaānffÆd\Œ9pĀ|8ļyLiŋ\.›V}ī Ž=ķ˜Ž!lLč#ÎwōÜĀ,2O ÷Ņ<ĖmÜŊ°ĶÍfĶ6_Č.ĐéĸÍô’R ĐR؎Ŋ=Ļ ākx|øÃÖC=¤/}éKî^tf€ FąX4Öoyyųۘ>ÚM]Í 2æææ‹Å&ūH2–ƒ…Ņ>ģnzšŽLļ‰ĪnˇÛļflI2–ÍëíõėüŧŽ•JzūJ+0X˜2´L&3ŅŖ§+įĀšĸąĸėãī>ĒÅWŊ^7VĶģž1pH˛—ēwSŗ,..Z÷ ˜$îßÉ"EŪwúôi=˙üķj6›* zä‘GT(”Éd”Ëå‹Å´žžn:/¯ĄÃÅÚī÷­E%mX ˜ JŋhÉZÃ틹A’ŨįvģmāŽkäzĀF‘øŪ÷ūŋzŨëūA’ôģŋûÛęvw:–Äb1Ëv$>„’e=@'Œ´×éõû}]¸pÁĖ ‘HÄ6;ôņÅLâs÷`ĮĐōlŠ`y~õz}BËÅŧŦ×ëĘårĘįķ’˜›Ä ÅĀ4Ā1\,­ÛāČGüxvēRŠ˜ä9dÎz7>ƒČ›nˇĢõõu;įĨĨ%s†‡B;Ŋé†HDSĮ†ėČ([,2åyæ"Î_d¸Æ›ÍĻ×ŖĪī!d ™LÆL3[[[–Ûˇēēj=y ”û|KēÆĀä9GĘąƒÁĀ20a<=“‹Š‹ßįē"›!Žéúë¯W2™T.—ŗÍb8ļ=cZžŽ)| Žíím}čCŌg>ķ=účŖ:|øđÄŋßvÛm ‡Ãzä‘GėīÖ××õėŗĪęøņ㒤ģīž[Ī>ûŦÖ××íg~øaÍÍÍéļÛnûŽÉįŖėĐŨāÂK§ĶöŌbŅeÁĄ„åûššhų=€a(ŌÅã¯Jø)&É׃u$ÄđB;1ŸÄ;š6ū æˇĨ7:pްKėäķųŧ-ŽÅĨŨ0jX+XŠzŊ>QŽdúüÂÉŋ÷û}9sFŸüä'õéOZ=ôž|ōIËZôzÃĨĨ%UĢU+7Äv:UĢUĶ,RCŸāä>Ŗĩ"Ŗ ĀÛnˇ­t Aˇ†ö &ß ‹ÅtčĐ!-//+ęüųķz×ģū‹ø†$éw~į7TŠ4ÕétLœ‹ÅŦ|Ę=†ĄeAe#æÛÅa˜ÁėÃܕd†˜Âņxlíī¸÷hDŲ¨a:đĖ cŋ‘HDÕjÕŽN`}j‰ŗÁ€D°Kų MÔ ×ƒã\oD˜1ĪyŖŅ0ƛšŽqh˙ūũvŒ­VËēPƒAŠ0Ė0e—.]Ōp¸âÍf­ėO)ŲGãÔëucÁÛíļ2™ŒįĄC‡Ôī÷­?0›LLŧ›€~cXâRŌåšËårZ¸âXîvģJĨRöīŧŅ1ãZ§O0L+ĪõŌŌ’]cÂŪ‰~aĶËyûBɞw‡$Û¨<ķĖ3Z__7ÆĪGã¤R);_oŧ™ŽŊ9‚ûØĮ>ö?û Ļã;?ũĶ?­O}ęSúĶ?ũS­ŦŦØ œ] ŽĶO|âēå–[Ôh4ôS?õSZZZԃ>¨™™9rDŸūô§õđÃëæ›oÖķĪ?¯~đƒúŅũQũāūāŋč8677õĢŋúĢĻ9ō}i .ԐwE™0‘HØ Žōú>|^”°^dŲųˆ˜ņxŦúܜîj4”ŋŖÍHŌŗKKú/ųŧą’}hųJ<>đļ% +q ”Č<čxųŒ:Œ@ Œ€Āla`1đÚIØX/@3l ėŽ^ZīĨĶicĀ0ņäŨu Aw‹N§cē.t‚€y¯aō Ŧ+ĀqkkËJ]D¯ŦŽŽšĢĀÂ&ckkKétZÁ`P•JEårYÁ`Đē„<ø5UĢĢj4VôÍožKˇÜōy%“qs–ĸ턁TR熭æŪ#WđĻ€į&É@Ü`00Cf´|dÉáėŽ×ëÆŧķ,0ßø\‚Yđ ŌŽĮãvÍ1rxļÖ6 xæwŧAFŪŗœ8ÁšOžõĖd2ö3ŪíģāĖĖĖ(™LZ f¯[oŊU'OžÔ™3g&˜8t„¨K˛įrlĸĐ Ķ…(3ø‚•÷]>ˆĮáxcą˜9ī™ĶF6_táYæūŖYäŋ‰„Ŋ+Đ}"aáũi Į:÷$Ā=Û5ãšôæ–×ĸûe^ ĪD‚ õŌK/éŖũč„Ļy:öΘ2€¯Áņģŋûģj4:yō¤öíÛgūø˙Ø~æˇ~ëˇôĀčŊī}¯îšį-,,č/ūâ/&Z}ūķŸ×üüŧîšįŊ÷ŊīÕ< ßøßøŽ‡˛—/Q ņŽHigqËįķĐBųN IæFe‚šŧüJ:­Q  ņŋđ˜ĮÚ ŖũíëŽŗEl8jmmÍĀ'Ÿëŗë4ŨurĖ€ĘB€Zē: kąÆu ļƒÜ6Ā™7 ‡CcÅįJšč&BɐRlŊ^ˇ˙u°7 _ˇÛUąXTš\ļ…€ëÁ€…@_8T.—uŨu×Yév8ĒT*iaaAŲlÖbi(Ÿõz=sXrũ8´XWŗ]žÔ“‹ÅĮ {å•Wėž`rĄLöîw˙Žŋū[’¤ß˙ũO¨×š¨S ĘL&cmžä˜bę&û "ĀĢßīOhS“ɤ:¤@ `Ė’ĪĘÉDTĢÕ …T,Õjĩ pB`v(uKģl×Eš GgŖ„ypOg@I§Ķ1-%ׅPc_'ļ…ųOiąX,ÚŊĮ*‹QJčš_l}ÆĄ´f†Ũ iˇĮ-Ī;ķY’ą…•JÅÚÁ…Ãa‹Å‰.Ėו•c7y_ņŅhÔî×āŗN„Ō rũpā2'Ξ=kT@öÕsšR>ēH65dKríĖ5ė;ē’l0Ŋ†° Pė÷ûvmĒūųžŽŊ9Ļ9€Ķq̓Ā›ožŲvĸôŨD͘]'ē-X @“gĨ¤]Ā!íjžŧW’eŧßąĩĨ˙§PPPŌĖ˙Ī´öŊ€ŸŪŋ_ąXL‹‹‹:wîœŊéĘ í€T4?ŠTĘâ-$Y,eEĀ"/j;áõ‘œ—×ę‘m“ÂuĄ|…ĻĀ9777ŅũæT’-$”ã`dũĩ&3Ŗ :=oa%Z­–LĮ†ûš.°gôp†Ųô.XĀŽEŒ>0e”P‰ûDĸ•B÷ ;C6ĀāÕív Äĸ\ZZŌį>÷ŋęôé›%IūđĪia!Ŧ\.§Z­6Ņ…–ÆV&@ŠY¤ŲlZ)Pˆ”vÜö€S\ƀ^ØWĀ(ė`Šīš™™1@†‰3 ׯo8*™LZ\ Áë|™vÜâ‹8^æŋΤlˇÛVžĻU ŸK ļ‰ÍßÉû Öʡœ#Į’ųÉs ˜Å Ņī÷ĩoß>ë› Ã Ķ ûc ƒ¨ežy ÷Ė?6¯ŪĀŜčcäƒßT­Vĩ˛˛b˛ ¤˜:čôQŠT,įąßīÛf¸RŠXŧ.f˜G~{{Û:ž\­÷ÅÅÎ;‰7ZD6ÎldyWL;ėí1-OĮ5JĀDyÆÂOYØŗ],€0ہįËĸ´~BĢ„¨í ėח–tęēëôĻ`Pąz]CMRÜü˙X\Ô˙~䈞|ĨLJiƃܒ ¸ņŌ‡=áép ŒŽ!W/’Ŧ¤æAųp°~~ą“vKc'oŽ€ĀAJd 7@‹ƒ8 T¯×­y< "x˜Ø~Pčc:|?[¯÷ōíō0ã…î€/L%d˜ĄCķGÎ@ÃĩŖd‰Dtà ßTĨ˛_•JNûˇīÔ}÷}EíöŽĻĖĪM>ĐÂĖH˛˛/ 68ėŖ)ûÖj5ĶŽÂ!‘ĀQ‹ "ÉJĨ\îāΛ‘øYĀ Ũ›¯˜ŸŪŲ Đā9ƒÅōĪ€—ō5įˆ“ĪFŖVĨī1ė#āĀÅŧ‚Eõ@G,Ī8īžG@5LX$1PCĖ<įšĮ&*IÎržiĀė2L!ĪîmŲ(•#_˜ŸŸ7ũ!%|€ßož|ģDæ?Ã÷{į.Žno&‚-fūŗ!õîfŸˇ °?sæĖ´ŧ‡Į”œŽk0€ˇß~û+æMŌŽv‰˜ŠÅÅE[ŧ˜a8ƒ—* ŖP(h~~ۚĮĶē vM’•éøNôK,&”¯‰$![ëH„ī„€™EiaaÁî mÄø9Ī$²1ČĐ#ÎŨ؁KKKæž,•JÆHŒn‘2Ā `éŨÖ0¨>ŪŨĮÉõFŖú“?yŸNzŖ$écûŋÔë5eŦVĢĘd2Æ|rũGŖ‘ejĸÄôĀ}¤P:˜AŌh4&b>ŧĖ ÕjéĐĄC–į‰DT(ėķˆōNaØʇ‹‹‹ļQ¤ų8&âZD–x} ŅģK¯ * Úŋŋ9_™;čįø=\Ŧ>ŽÆË%|—˜jĩĒååeIģė”āũôPzö]H|f( ›ëČüÃ8†)ā‘Aš”Đōšš9ËŨķí‰a‘vĢ<{tøđRž-ØNXEæ ŽåņxŦzŊn:Un2™4­/ķŋX,juuÕXlΙ÷›ROÃ}KĨRęõzúĖg>3e÷đ˜Ā鏿áKĀž™ fvĄ”Öŧc˜ "NČQCĢ‚ßĮ`Øđ „oနvÚå%‰‰¨†Ī=äķé:"iĸt \\\T­VŗrŒU$QŊ^W,ŗ˜†´ ŸĮHų+ Yp-‹/‹„×RŨÚÚ2––CÚÉuŖTL ÅŠkÃâËįzíįĨŖ%¸‹/Z9æĀŽAF‡g,ÄÄiloo[GIæØäxĘŅhÔ˛đD>\œ’@'ësŸûˇ:uę ’¤˙ø˙OÕjEc~bą˜@~Æ€4Ŧ lėĘƊ!Zvᮅ%B/ļ´´¤RŠdî`TģŨV2™4} ˜$%^'[ĢՔÉdŦü‡!'™LcH‰›2{ĩZĩXt‚€ČK—.™$BÚíÍ$ i}}ŨB§ äfÎĄš#›֊ĪēšŨæī˜įÄųpgŪč"a1ĨŨ0ež]Øf˜E*°Š>eļŅ—ÜŊ™Š|F6˜žØųųČsƒË;Ãë]ŋ’L:Ãs+É"ŠēŨŽmN|į6]·wī6€Nßʒ^Ɵũėg§pi x:ŽyPŪŋŋĨËÃTāÂŖœ*ítSĀpÁKŅ—ŧX)ņ°šĐvų˛áphÎ|Ø:Yėûũž•ģø}_îĻŅ=å)GDųNĮ5O~+DH0%vÁx<Ž×ŊîīT(äU­æõØc÷ęīøēææÂJ!PvĨ“ÂwäqŖÄ} S#É´o0€\ĪT*Ĩfŗi’§ĨøÍ IDATæ-.rJ°0A^÷… 0Â^žëąžžŽũû÷kccÃ.ĪåÜܜZ­–ąß¸]ũ&  Úëõ‹ÅtŨu׊Ũn˜•dĪ Ÿīĩŧ´ŨK$VâÅܸeŖ3G‰•ë€Y†Ÿ,ÁÂĖiEš°°`ú?žd܏x(ī’ķŦšš9%‰ öE—Ŋ×2Á˜Ā øāÛP(dMí1ļ ‡CÕëu[d3™Œš*}Œ /nv㈰aË0…¸ŧ™Ā/øh‰’ɤ-VŠTJ÷Ū{¯nģí6{ÁŖåA?åÅaÖFŖ‘>ŦØ"qđāAkąŗå ,áđNUĀ 7hlmm)‹)‰L”¨Īœ9Ŗįž{ÎXĘåžãŨ`‚aIŊkœŋĮ}ZO?ũ´]g¯Šôe[&Ķé´î¸ãåķy­­­Š×ëŠT*™æŨ%%4\Ú,Ō”a/`ļ|< ׎N8@1ŦĨ)RØŒ`7X šŽÄ˜P~ä3ŅmąpŦÛíļeÖÁ ãēíļ—uņbJÕj^_ũęÛôÖˇ>ŽÁ`ĶJ‰0f¸(šļdķ%â]Ķ‰ČŠÃĀ#å{/“Č9sûũž=Î y†{ī33ãņ¸]WžƒĪ›/Ą3÷`Ą|éųųų ‰C0ÔųķįU­VMnÁ|į:1čŧÖ5˜ÛøüųķÚÚÚR*•RŊ^ˇR˛$ĶôŧLi™Ē›¨íímËėŧ:’ûÂû‰w?ĪuŖ„*ɘGĘĢ<›°ÔŧŗãņØ´Ģ>æŠī‡Ŋ…Õ ēëŽģ”N§ÍÅ-I•JÅ2 1K‘”€|b0čØączķ›ßŦfŗi×'5ķ%‘HØ&vÍīIö†e~ņŧ āS8×<€+++ļđK2Öļí ĨWz*vŖ”(aøØ@ô@LÖYŒXp\¸mL0…´ŽœH˛3+ZUĄÅxđ†Ã“˛ ‹0,ÆąXLõzŨz¯˛˜T*͎­¯¯ëī˙ūīÍũĖÂH؊ããü’ŖŅHëëëzéĨ—Ŧ [ŠƒĀë'ÉJû|ŸË‚ÉBxķú>ʇ,Đčŋ(íŅļ‹x™d2i,ÁÕÄlPĒ#đēVĢ)‘H¨RŠØ,% [đ¸Į^KÆ}‡:~üĸ._Ψ\ÎčņĮīĶņã_R8œøŨŅhdÆÜÕ°[”õŅōķ?@‚…zffFæĨŧ‡Íė¨BĢé[—1ŋÕh4 ‡Ãa]ētÉú+Œ›ÍρbO`Å0ĻH2Í& \’=Īž×¯/ˆp6c<ĸßívMĸqéŌ%]ŧxŅŽkyyŲĖckkkf%ŽĮ‰[šĢ$ģžjēÔloo›†2 ‹ķĮâ¸9˙ÍÍMsŖŠķāÆ;…ëčCߋ´„MĖüüŧŽģî:Ũ}÷ŨÆøÂîßŋߨu@4a`ņ¤Ín:ÖĨK—ŦkŒīLEƒÍ-ī%6ŧ›`ɟŦVĢ:{öėîá1€Ķq͍F•ÍfíÅÆ.×Â~€ŒĸhĘ)h×(ĸׁđĻvĮčģˆ—¨°  čX⠈€]íĐônW4=´€‚1AĶ„NŽĶéÃGŲ͗))wjŅa‘Ōßh4 t˛0°(ÆãqûyØ8ÂjŅ^K›-ĪÖx*ÉDâŪԀƒfëāäį`n`‚Á •¸–’ėūąX”h¯`YpAÂIģųtÜûáph`ŪˇÄâ>€ ‡CV^2@Ššßīë–[^TĄUĨ’ĶO|ˇNž|BĀļEČ09V˜´áp'ø ļšk΀ŲđqƒÁ@KKKÖũEÚí LüįæĪFŠ9Ά ÷, ĐÃæˆī†ųķÆ2đ‚Á jdœŠ0_ĖŅP(dŒ˜´ĶϐŽ,ž”‰šĐKי^¯gה@777­ˇ4ŋO\Rß …šÉƏų@F¨ßtöü;‰Ļp:Žyy1>påI˛E17ŽT ™v”Ķ`aØ`0”°3÷ŲXėėŅQ"*•JƆĄ}ą0 7ķĻōŊxyĸ=K&“úŪīũ^% Õëu{i’kF(­$+­8( ûvRDĮ`žÁ$ƒ9ŧøÖT€Ũ`0h Ÿ…œEöM’-n>(ĸŨn›“ĀAÛ>4’ÜO€ĮäËčīööļZú@Ŗ—ōė°wû>Z>v0‹ÉâبÕjÖ[° e‘dãĢ|ôčßĢX\6cČÛŪö¤fgCV:E F” åmĪôá\\F#ëōáŗņčŅV"ô÷  į3/qíōQ~Ėfŗ|6ŦH#ŦžQ"GƒÁ„™ĸZ­*‹éMoz“n¸áõû}mllh{{[™Lfĸ-ĶŊ(Áãb÷‘38^éXÂ3Éys=™’,ŋ ‹Q§T*M¸€™'l 9&d#—.]R2™œ0"1oíhŅ0z@Œąs Õü<,6`›9GËÜܜšļq÷/..ĒŨn[ĸN`ŸĪ¸ĩĩĶ‘Äg’zÍbĢÕ˛Í šg‡õ /LāS8×<€äæv ŧ”Đ!ą09rÄJhNg"ČMš×ę`ŖXDˆ^|N)–‹¤I@Ž—ß÷NK ÖĖˌōųŧNœ8ĄŸø‰ŸP"‘ĐšsįLđíËËžŒĘBÃĸN9ąŊw‹ÂĻ Uōėƒ^fÁäī$ ‰ĮãÆ("÷yhårŲeo/åsĖ)€C\ÁOĀ Äë­`b^ …´´´dĸ~ Xŧĩĩe=ĸa )Uōsh09–px§'1ÆIĄ3777ŅÛāF­ŒëÁæĘʗÕé\¯r9Ģ/}鄎˙’Æã!Ęėš\NÁ`Đō96zŋÖëuģ'd3’Cˆi âØŌŌ’Ęåōˇæe0“ãņNë5iˇĨ"z=3 Ø`“Āq286Ā,)tēĖįFŖ1Ô"‘ˆ•Ŗ‘#x×<Ā °Ī&d8ļ8'äápØÚ XtĖuX=æ÷Đ …Šķš^ŒAĖ XI6b\ˇnˇkåYŪ) VĸfãČųaŦ`ŗ8ÆøÎ3āĨlˆØ¨Āžú’r"‘˜0×0ˇ86Fî!׈÷ŖīæŗĩĩĨͧOOāSđtŧęÁâ!É´_ 0GŖQ-..*—ËYŸRvîĄPČvßŧ ķųŧ•š0uPúÁáuKŧČ){ĀČIšŠ€€l‹´$[(pJžũío×ŌŌ’ŪôĻ7éõ¯Ŋ};ö……‹„ĄĶ˙MTb,<čĘ”Ua,Ŧ°H,JųĘGŖQ köƒ( "f†Įãq%“IĶDĨĶé‰4fĐ\á0ÅbÆTĸÍĖBËBåsā|4÷•8—t:mÚ7˜K[XIĖ=¯Õj5Ķëõ”Ëå ė +‡˛q§‡Ãa•Ëe›'‘HD÷ß˙ëØą%í¸ƒ;-+ĶbHđŒ,ŽõŲlÖĮjĩj×ĻX,Úą°ØčXØ}QĄP0ω~Ōobt¸˙žä kÅÆų‹ĘŗÃ3177§L&cZÔRФŅh¤Ë—/[°;ŸS­V Đ 3ÅųĖąąÉĀÃfŽch4æ4į^ĻĶi…Ãa9rD'Nœ0įu.—3M$€įc&!IĻ)ö2Ū/t—aŪĨR)ģļ|ß3??¯L&cīäõzŨž6X€a´°„ˆ ې°!ķ’‘¯ˆđ V*sļŗĄBĮ‡†ÉK$Üä lÚØ8ō|MĮŪSp:ŽyĀĻR)ÛšRĐIģz+^ĐårŲvÕ>"æ‹Eznn̏č—ųy0‰t_„TƒÁ • ų.JS”1%ŲqæúS.÷NW#€ŗVĢ`Ęįķš5đÂĸ ;KÅŊâs-œCĢՒ$3mˆHģ%DĀ0}q)Ũ”˛ŲGÕé1wđw<ĸŅhËÜÃ0Z8€Ĩ]‡˛/qzC1;°ŗVf0Ž)Āp4Yį‘X,f×i{{ÛĀŋĮũgŽVÎψû ÃÎ}ŲŪŪļphÜ›fžXYY1SeĀ´waŗiÉd2 ƒĒ×ëj6›fp"Ē™÷‘9Ë\’vŗ-kĩš•ČŅD&“I3¨PŠĮ l@FŽ&s—žĖ”ZëõēŠ0Å ‡CUĢUeŗYE"U*z$Āöúø%ä,< Ė[ĘšŖŅH7ÜpƒZ­Ö„ž™zA_‰ üNÉCĪŅEDTĄ‰%âĮŋÃø<6;ũ~Ú ni'é¸æA'ŖGZ †P= ?(A æcdø}´V€B˛Ô`¤ŨĖ3@% Js,Ę4XĘDč¯0sŪ8'ŖGĒÕjŠP(؀ƒIA ‚•ˆÅb&¸GLī ŖŅHûöíS>Ÿ×å˗ ˛ ãŪ[ZZŌúúē1Q„Y|´ הk™Ífm‡áÚS2œq$™Øß3*|'ĨZ€ŽPŸN§3ĄÅDËåŦtŽ6ŅGSVnĩZßf°@‡‰ΗÆO>NhkkKĢĢĢ6ī0÷ø2*Œ#eĀ˙ūß˙ŊđÂë%I>ø[ZXkmmM+++ÖjËĮī09Ø1€0P{ ›˜Éd´¸¸¨bąhn]ĘÁ0hÜSŽ&īƒiãü™×XK˜& Ā°ŽÅb:{öŦ2™ŒÆãą˛ŲŦŨcæ×`0ĐņãĮuĪ=÷H’ūčūČôŠ\īŪõsiķ\Úaŋ ķÆŲ CĘŗŽa(›ÍjccÃôm˜Jjĩšm˜¤]`É쀇ŽÔ?Ģ^k:??o‘ŧQ˙T%j0‡lzŊžfgwÚ&  õz=%“IĩZ-c{y†FŖ‘é_yå{ˇ!gaŽŗÉåzøM›d6¯Č˜‡ŧƒzčĄi'=<Ļ āt\ķđ&\yˆ¯kĩš•\Ŋ9‚r ;evž^3CšÅšdŪ\ đQ°slF#sŌe͔_0ûũžõ…ĩ)—Ë* Vîáø(Á„|Ņ ņŊÕjÕzėz-æÁ` —_~yB;uĩūqccCŲlV333–—æ DĖāŽJøėZ­fį  \P&Ŗ•]4ĩë ĐĨėF0† FSÅE._ĢÕR"‘00E.qŠTJ­Vˤ8Ŧ™hÉ~„YeQÄ!KD)ŽRŠ(é„M…MJ&VĢuHĩÚ˛ūĮ˙¸[wŪųˆVWWL׉ģĪ;ŖŲčxæēŲlĒ^¯›Ô€MÁh4R¯×›`˙0S@ĸ ˜Â96Ō3Ã\#$”—ų,ßFc†}ƒVūž™™ą˛?NUΟk‘N§õŨßũŨēᆴŧŧŦgžyfÂųÎv÷°oЇV“Ø&Ļ$"rŧ–{+FMŠÂ\%ö“Ĩsގ7gp/™S”L}§Ž †˙ĉŠD"*‹šhÕČ;ųÎ3ĀÜ`cĐh4ė¸(¯§R)ģ—€_˛ūēŨŽe?ÂølīÁTæģwÖO]Ā{{Lāt\ķúļD^ŋ‡p]'/+⁝ÖOėļYl`([â„UDģ†FŒE@&ÉØ;XAL'|7Ÿ#ÉZUÁ|`f ŧ…A‚0d/>§,„žĨ$cXhé¤@´ Ú4- Šī%ØMUÜ~ öˆc¤ĖĮī#Šį3%ã¨äį={Cd %EĀÆÎI ›œ>OĖ"|<Ŗw‰˜Y¨øXPæ íËø=tbhŸ`Ãá°ĸŅč„ã•ÍĖk ĐíˇŸUĄSĨ’ĶcŨĢ“'ŋĒBaÍĨi€Ö`0°FūŸwļō œaˇØŒ8ŧÜœŠūįšfWĮų˛´×‡I2öŅkk}'Ž-%|@Ÿ…cĐFų•9wöėY}å+_1 `(2F“kcė#~|<īQė[*„Fyļ0iƒ!„į ųĮĘÆųä7§ÃáĐôēãņØt‚ôSf~bX!rĒVĢŲ}ÆhâcŽ`>š.l|9^Ā2-ũ=aîđū"rI ™¸ėš˙0’Äú&‡õÜsĪMāĶđt\ķ üē×ŊÎ"0xųņ’DøíË(>b ņ.UĘCD,Ā&PæA†1åš`0¨ c[Đ+QÚĸ4 …ŦôE÷i75Ÿ§g}|t Ÿ{EIˇĨoĪ Ī ĻRÚ5~x˙&ÉPi˛k ‹7×Ũ+Eņ'sss–Õ‡MÅã3=XkˇÛÆ˛xWŠTŦT,ÉZ]AAŠM'ņ:ĢĢĢŽ>fūŽŸ8p¸°\čĩüõlˇÛV†f0`•jĩÚDذ—1|îs˙ÖĘÁŋūëŋ­PhWWˆ| Ņhx‡MöZ4U%˜×xÉdRÕjÕ J°_ĖM6u°’Ŧ˙´Ÿ÷^ CF Œ´ĢSd“áûØ–ũ;€r(Ė!L+ĪĮ “ss %×s8ęđáÃÖW˜ŦBX{ôĢĖ/6‰dīņc#xęÔ)­ŽŽšiÄo 0HųĘׯĶé¨P(Øf}!ī=ū?s…h.y~}I˜ŋÃÁũWõWĶđSđtŧęÁÂâ_˛ŌŽn ƒ0°C Ǝ•Űˆ“Žīi6›NO~g0(‘HĢĀB ķâķępazPáËĨDVøXŒ ,^^ĀžL&­œ;é 8ü-°Ļž/(ũ~É, ‡ÃÆĀ1BĄ•tŊnĀ´°° L&cũj•3`W;ŽØN)Ž €Ļ#3X&Žã‘d ŨūũûMwˆf&Ž|=Bx™c”t‰4ĄŒī1%8—sšœßt:mebĀI<W6›ÕööļRŠ”]GĘĶ?ūãŸ×Í7Ÿ–$ũüĪ˙{F3ÆøÂ^ęKĨ’ho˜g€ ā’’>ķ”9‡ėĀŽfš{Ŋž•%ŲĪm4Ē×ëĒ×ër8ĀIģŨÖå˗­LŠâ]ÛhhšŽžīA>`fKÚ]ėƒÁ 8`L+ßÅ3âˑt#)‹Öq––œB63ū9!J‡ŧ:ä‹‹‹1‹°D’Áü`#ČF‡9K ˛3s°^¯[đ÷ŌŌ’ąūƒÁ@ŠTĘ =¸nŗŲėDĢČVĢe@íjš\69ĨzŒŪŦBž^.—3đ¨ö‰´dķAč˛hÍĮ{I ÷Ãgozš€ĀJ$V~ÆAĖg°Qâ;<Čô) ĶąwĮT8×<ĐŪ~ûíöBDŋÄˏxŸų†āž’ †Ø^V’,ė”Ĩ J}”0}wß&  (Įģ‚>Œ—2e,4l”Ķ<Ëŗ´´¤fŗŠÍÍÍ Ö=†˜4‰}{2Jŋthčt:ZZZ˛ķäœ%ŲbŽcfĐ퀛0Eû:_öâûazŊž•ŋ_ĨRÉJ\D‰›€æX•N§-(P3(Éz´ŌŪŌšˆhšo0Ĩ\ËFŖ1—#É~â5”˜+†€vÆÂ‚c€6%OŽ`{aaAétZŅhTGŽŅ]w]ĐšsQml¤ôųĪßώŋũ)ÅãQ‚ŗŗģŊŠqŠ"]@KĘ\’dķ¸\.ĢVĢ)™Lč‡J$:~ü¸‚Á šÍĻ…ŽŖíCÛĘŧāđÜH˛įĀKjĩš”dhŲT‹Å æo}}Ũ6Q\”^`ˆģÚ(@ŧ‹%ĸ……3ŊāĖôÍ¸ø‰„Ο?oÔœx<ŽzŊnē6ĪĒĖĐØá6ÄŨJŲ›2$ $e@ ¸X)­˙cåîh4j&4Z\_€å2Lž PÍ}@DOÎw^aaäŪŗ˜cˆFŖ–Ī‹ÅŦ´Eˇ žėOy”ščŖ2˜7|úJØ#΍ ­¯¯kvvV7Ũôœ66ō*•2úËŋŧM÷ß˙UEŖ‘ Ķ îL2 yʸÍa¤ØčđėĀĐąaōL_ŋߡąĖ6Aü<įî7&0×č †”ĄžÅŸ/ī&aûGŖ‘FãFÄxŲp ]ĻR)ö°Ô”‹‘Ā„ãRį^bØĐą9˜ĩ9Į|dã¨ŖŦĖÆj 815˜@ˆ‚UãÚ&Ųd!é ŋ0™LęŨī~ˇNž<ŠcĮŽ)NĢŅhh}}] FĻEžĀ;Ä3–l8Ųđq/Ōé´ęõē‡ßĐōnBj!ɞKīŽŸöŪÛcĒœŽW=Đr:uJO=õ”íT}hŗ´ËĩÛí‰rÕ‚å]Qv”d‹€w€–Ëe3y°ã&Û v įŨ ¸‰0@@ÕjÕØZ‚QZÄŧ€â%ĖII‘ė.XÎp8'ĢÍ&eËųųyU4đ§đ IDATĢU}ë[ߞś…’ŲüüüDÜ ?ŖĶB&“1āLi ˆûA[žĢŨĮF2÷0ŧp.ÉdŌYŒ8čų9_â#KļDŌhanĀRÚ0L>(AsßYar鴂ō:ƂL&ķmRƒp8lÆ6¸a‰ŪÔĀĐ0¯˜w?üÃĸ[o=/iG¸°ˇÎčģ`™`ÎȘËårĻ)üpΞ`4UĩZ5ŗßĪņQĨå"׈{†–’šBy}8Ü gįyŠT*ž)ûzƘyĖœÆßívU*•Œéæē§R)ËŨƒíeÆ •ãäYv4KKKbælaŠ4Îaũ0VĖĖė´HŖŦĖweŗYÛŒF#åķy­ŽŽÚ; ˇ2™œ0‚Í<įô%ai'N)Ūik833ŖC‡Ų5D ÁĩÍd2Ęd2›Xy6Ž0Œ´‚ã]æuˆčscą˜Ũ_îĮ‘ĖģOÚÍ]ŽŊ=Ļp:^õđ"BЃ!Čg7ĘnšE†å8XˆáphŒ˜¤‰l0J?€"J”_c0lŪŖ$íFR|,ibĖårļpĄaJ$’d e5bĐRQ˛eĄĻԘĪį­Ŧ$ÉØ>‹s`a'äØgzyææb<Ūé>3ļÛíš@œŌĸ´ëxÄš¸¸h §3זŋk6›vŧ8i3™ŒĸҍŠÅĸ†ÃĀZb*|^2,P2™´ržøK2-"ĖG"‘Đ‘#GlņbƒĀ5‡Ã:xđ k<ץC‡Fm^Ą§ ƒĻyä왎^¸oßž m#ėL  –2ųOüÄô–ˇœ—$ũøŋ_ssQģ÷TØk~ˇĶéHø<U(T,´ąąaæ4Ė7„ū™LFÉdRwÜq‡nšåcĒ9^ĀJĩZ5fiyyؘUŽ5×ÃĀMF!ž/(Ž}Øuŧ`œĸҍiEapŲ0˜§žŖW°´a˛a灀bą˜ąžœ÷h´Ķņ$š›×3¸Ÿīžûn-//ÛųF"Ķ:b2jˇÛæÂĮ Äf` …T¯×'Âāiĩ†ŠéЧžRš\6ĻŽˆļvßž}†˜P6%ŧˇļļļŒá vũøŪ?°üH'tšĶą7Į´<×<(///O,˜ ^<€8Ę_0jü7ėeĨ^¯g9s;öø]~B^ˆ,zžQâ%Š~ŽÅĐGK´Z- |ˆĘØĨ§ĶiYûū§,bŖ´–­Įc+ĄōŌæÜÛíļ?;~I^øčæ`..|įŽŲAyˇÛũ6v”2le7€åUĀ/ˇÂXŒ`ļX¨‡ū‹RšNŽ1÷Đw8áÜ*•Šm0 9rDˇŨv›•=‹ë5˜WЂÁŌæč曟×ÚZZĨRF>zîģī+ ‡wģ6 WäḉüÁāAY|IŽš×ë™öÕg\—ÄáÅ_4v‹yPaŽÕëuÔ=}üउ{Ä<įųÔõûũ‰Īæ9ãwҜ1_0— ÕcsĨ}#ŦZ2™´ŽápxBGŠ´@’R=xfŧă8âĢ(ōŨÍfsB+8;;kF˛H$ĸzŊ>‘é+Ę5¯×ëđ0;ųPsiˇ“N4ĩ(Ž%›>r 1†đüRŠŽÅbvŒlxljxŽËÜsæËîŨ1€ĶqÍčäDĀP>ņĨ+^üĆđŋ’&˜%ē.vޝbAņ ,Ĩ[ôvžQ;š1@^Ž€R:ŠĀPĀ\J2ˇ*,˙ëY>āËK˜E H˜JģZē@ `q&° €)‹ŌnŽ"L Ųvŧė¯6UĐã@3‡>ԃô™žĨÚØØ0Æ%‹éo|Ŗ …‚ĒÕǁĪ4a"ˆD"V \Õj5Y›››Öj<7X3Žũ­øØ °‰ĮãjˇÛZ^^–´Ã’,//+Nëī|§m\n&<™LZŠÖ3;čĖpôļÛmÕj5ëĮ|Ë-/ęâŤĘåŦ}ôŨ˙“ÚÜė`‚IeĶĀ=Ą,Z¯×í\pĸ’ÇžŽy°...Ē\.ĢX,NHŽfã¸>äúđgIv,€Ø^/q°‚TÇ4sŒŅhÔæ āž{OĮ¤:îæ™ .˜ŗØGĐ4›M­­­i8ęÜšsV2†™‡*—Ë€Ÿy܆Ėår×ū}īûc;ö’$é—~éį5ΐ¨H˛ųãNZĢI˛cŧ—J%cŒš÷p`įƒŪ lr?}îsŗ‡T<7Y÷!‰˜AÃoĀ‚Á åJģ%΅{ČæÎĪiĖt%!O‘R0qS^B‚ŧƒM†ÍĪČJ¤ŨX˜]4ĒKKKZ]]ĩؔxĨ›nځŋūëŋĸÍÍms=—J%cœ`xffvÛĢųM€ŲŲYíßŋ_ŗŗŗĻëâ~đđ\á¸eƒÃ3č58@q¤§ĶiŨzë­ēūúë Čr=*•Š1É<l-ŅhԀ× ;ŽŅK:ŽI&*•ŠåâĐ¯×ëÆĀķŦw:Á°nÕju"–‰yĖųņķtåä9ĨÚĀ&… ÁįT(0îĀÎÒzų SÚuã3ŸŲlņ|^ĮãąŌé´é!Ņ2×ųlLMlfčÕ ˆô]IČHÅxŖ-ɤlnĻcīŽ)œŽW=|īXØå i7n„VƊ>Úb{{ÛDæŧė–––T¯× ņģ|–ŨŊĩĨüéĶ& ´Pū;ffv:ƒA …tĪp¨ā—$.L2Ķ(YÁ.;-Ü`{ŊžÖ××-y~~^ī{ßûtũõ×OD.x#`Ø/ō,րHwR,UĢÕ´žžnŲdų%Ų‚ÅĮUĢÕĖŅûČBˆ]XXĐōō˛*•Ё0¨)UÁPšN$É/”vû&ã]YYąøʙRX+•ŠÖ××-šrļwt{ƒĨpI&ÜŦŖŅČĘwņxÜĀ+ė. ,îųķįõâ‹/N´ äq˙”ÍfmCĄëÉâââÄ5 …BÖ5ä}īû=ēĶ6î—~éįÕíîļĪ# öāDGJuƒÁ@étZ[[[Æ`s])ÄšŽãņx­ÎũÆČ‚ķ#7 dHzÖ5ÛæŠ€v¯Ķëõz–ņÉųĄ„åc×h4ŒO§ĶQ’N§-÷’øŪ-lrhĄPČė™™ÛLÂ,“ĀÆ -āÕŌŧˇ|[@XxŪa0mDava~Ļ‘M°‘D˛@ėvģÚˇoŸ}ĮģąąĄáphŽāP(diē‡ gņ•ôšČ6øũRŠdŽmæ ,o.—3# éØÛcĒœŽkhsšœ€-Ú@(gāvôíÃŧ9°čl^ô>ļŖX,jnnÎJ:”#7ææ4u2P¯ßWųJ™ī÷aĘėŌOH:>čoÆc=1ŗÛš 0ģhcQ>zô¨Nœ8Ą­­-ŊüōËVžĖ^¸pA—.]26ÆëaÅp|6čĸXTXāY,XĖXč|‰– ‡1ŒĨ8ZiōJHʸ¸4Y´č†(Ĩ‹+]?8/Iv\\.ū4›M+‹Q†¯×ë’vM<ãņXŲlÖéX,Ļl6keA žô ņŽp_.ôĨb´R Ė/Œ%,ą'€Ø;æ-.UÜÁÃáĐJōˇß~FkkYU*Y=öØ[uâÄãvØ4_B¤ė ` ŗTĢÕėÜ|,‹—EđĮ÷˛æzû(%Œ@/^4C s9÷˜û'i"m/-6?€*Ā-îUožōî÷P(dšDūøäs(RŠT2ךokĮķƒOŲU’šČŅB¸yžqÕzķ š[ú˜{ŗēfĘ܍FCŅhԎƒg6 ŧ›||ÚPIđa; žņxŧ“͏ąąaL<›)Ø}ūžû…†ņšįž›j÷đ˜2€¯Áņøãëûŋ˙ûĩ˛˛ĸ@  ?˙ķ?Ÿø÷íím}ėcĶĘƊ"‘ˆNž<Šįž{nâgjĩšŪ˙ū÷++ëũīŋ-Âßéā…ČËWģVv߸Ü+ŪHy);lIļ0RFI&“&’Į=øw‘ˆtrfFˇ\)ÅąËG,Žãīģ†C ô׃^¸ÂĐ‚Ōs4ĩø *°§NŌå˗­Į(Ąp8ŦW^yE•JÅ+$fß/ã‘,ÍņAé`A6ā˛,%U´~ąXĖX„ÍÍM++QĻĢVĢ։íQ(hŊ¸'°…×]wŽ;6Vë>ņ4ˆö}Ā7 PāADĀēxņĸÅōp ĮãąVVVŒY‚1öL*îGĪ 8pĀî@f}}ŨĄŌn‹ŦJĨb l­VSĩZ5ĶÉęęǝˇŋũí:tčęõēÖ××Õívĩ°°`s gt&“ąkŋļļf%lßâ’wīââĸĒÕę5Ŋī§ã_ΘĀ×āčt:ēå–[ô‰O|âũ÷_ûĩ_ĶoūæoęŸø„žūõ¯kyyYīxĮ;&‚?äG~DO?ũ´žøÅ/ę‹_üĸž~úiŊ˙ũīŋĻãĄņŧogÄN—Å —#;e"Đ ąĀÃzą+fACKG™–‰wc~^_ž™ŅŊÛÛúŽáp‚%bŧg{[oõĩŲY}+3Į)'Jžd‹~BĄ2™ŒÎž=̧žzJëëëĻ[C‡6 –I’i“øo^ūŽŨwÍ@œÎīž(ũúˆ›`0¨rš,IÖ"ĖßXAIV~ĖĐ`Ö8X#@ĻgŲÆãąÎŸ?¯3gÎč…^$[PøI¸1 ‘#\×k q[Â,ÂXøō*Ō30{ĖæÜh42Áģ4Š+\°ãúæķ<Ģļšši ‰Rp&“1æšīSĒ-•JęvģúÁüoēūúoIځĄĐ›´ąąaûáA÷V Mâúúēßy†œģL&c›’l6kĨÂņxlesSĀ2s Cy™˛ī`0°2&ķ‚ō˛$•Ëe‹#b&æ MjŊ^7†Ėkh™ëÄüHģf&:‘đŨ#Ōé´RŠ”1Åč]Ëå˛`qôÆe\*€HŪĪאįŠ ÚZZöyĻN7bŸŋ´Å‹ÅbvĨÖūāÁƒ:yō¤ršœ‰„éf™‹0¸ŧ+a^šŋĖĢX,Ļx<ŽÍÍMc ‘ LĮہmxįéxMŽ@  ?ûŗ?Ķ< i‡ũ[YYŅĪūėĪęņ%í0tų|^>ø >đč…^ĐŪđ=ųä“ēëŽģ$IO>ų¤îžûnŊøâ‹ēņÆ˙EßŨl6ĮuėØ1[T},l–w(zá{(˛ÅŸ!ŊaĮãąÎí ;Yœ´žáĮēg{[÷noë‰PHO\)ÍĪĪëîŅH'F#}yfF_vz7%ÄŲõzŨ^’”S bĻé™iÂŦŊŽV 9zŦ™™•J%3Z°ģ‡5Á*—ËÖԊĪEIɋë 4ŽĮcs+RÚæ8$ŲĸŒhŸpeSĖ”°ųNZ؈~ŋoŪõz]ų|^NGÍfsĸÕįåMŌ¤3Wéüüŧäp8lŪĩpx§{ÂüüN[Ŋ|>oįXƒĨ| › ÃDÆaiˆÚˇoŸU`­Đ„1Ч<čFQ­Võ_˙ë:sæM’¤_ø…_Ōöö–šfëõēŠÅĸŁ 'ûœ#‰ØÜgcĐétŦgv&“ąMēC4q’,J'ŸĪ8ĀņÍ=ęõzϟƒ d."Kh6›J$jĩZÜũ÷Ö+”ˇ)ŸœařģÁ`P×_ŊÂá°Î;g×"ÛÆquuUĩZÍĘÉžÔOyš2?ēX˜@úbsŨx–|@NE8&Î6Ų_œčtžaÃug3AéžyžH$ŒŨ÷ĪA*•26š;ī@¤!>Ūw#’4‹… ‹gũ͟ū´†õmžŽŊ5Ļ āŋ˛qîÜ9 }Ī÷|ũŨÜܜîģī>}õĢ_•$}ík_S<7đ'Ißõ]ßĨxŅq€xĀČp¸Ķ=&5•J)‘HØņõû}cëBĄ’ɤšzé ëŲžL&ŖĨĨ%% mnnššC’9*YlKĨ’:Ž.\¸`ĀV‰…’9T¯×5??¯L&cĪĖęęĒöíÛgúAJdÎ]ž|YÅbŅĀZĢÕ2zą­­-ĶÜũđ˙‰Ž{Q’ôkŋö+ dG|^å{Ø0Ibˇˇˇ•N§%ÉĘŪlĻØ,ôë’ėZĸQcߏ™`uuUwŪy§–——­ėŽ sdiiIņxÜôr€ ŅČ Đ˛ @‰DÂĒŨnWívÛ6x0õ‹‹‹j4JĨRzātã7‹GË5æl< (1QŸŸøû|>o˙V(”ËåžíwsšœũĖ?6677Õl6'ūH˛:Ā /A€ģfĘh‚X´)ËąčƒAÕëu+ĩĮ;Ŋ€Ų‰ķFŸ„q{{[_žÂŪÕī롡urfF_›Õ—ŽF&@D’P@+ !ÅôŊĨdĖĸKé–Eũ ĘŽœEŽÜ;a`B}įßnK’15/,"Ī+++V† X°°‚îšg€>ߞāE9—ûķÅΞXr}1šĀHĐQ9›C°īÆÆ†éŅ:Q†Ėfŗļ@Fg>Ÿ7 Į}šĩ’:%xJ¸0žφ CĨRQ(˛ëÍ&Čõĸ¤ čvģú7˙æuøđĶ’¤ííÜD˜5L2lōxZ“1*ŒF#cĢ)2´C›™™ŅôļˇŊM÷ŨwŸŪđ†7L”œŅ+ Ú×løč5a‚Ŋ6vú7âf0 ųȒ­­-­¯¯ĢT*éōåËÆzq-č›ĖFˆgš˜"ž!6ž>ū…ãĸ; W2.™Gš\ÎōyOaÔĀTåYAĪbō,ˆāÄJƒA3ņŽđm5ģŨîDļ"sŊŨn+N+›ÍZV"Ī÷q8š“™ę „ĶąˇGčŸ˙‘éx-vë Ę ˙Ôŋ˙c?sõøøĮ?Ž_ūå_ūļŋg‡Éļ Q;,ڒŒųƒ=IĨRö˙yY˛öq.”ûFŖ‘‰„æįįuņâÅ Ũ`đ)Iw  JúŠvuläŅlžd"‘°c&Nƒã†Á@sF¸+``ëõ„č™Đ˛ÁŒ‰ÂKxaaÁbĐ3ĄņbGOÉ 1y2™´ëO,ÍÜܜšJ/_žl] `0šÍĻ`įČrŖTEYWÚe™Û|%bĀ#ĖL*•26 5 ŠZ­ZÛ*Î×3 ļ//rͰ”ŽįæætæĖËaL$ęt:–™¨P{V 0 ¸ėvģj6›ēūúëUĢÕ,ã΃°x(IēûîģÕh4ôˇûˇēķÎ;%IO=õ”†Ž?ūO~6 ČÕw&ģNt>•JŌ^T”J|ˆŦf7M+'ĸ0Æãą-~ŧāy)ŽŧŅh¤›j5…ô˜¤¯ÎĖ譁€NŒF6›úúmwŗŌ’Ž IDAT^ęƒâņ¸…ä"ļFW*•TĢÕŦe™*Á@Â.ö“R5@΋ë%™įÃ}YFŖ‘Ŋŧ Göyj’Ŧ7/€&í$ TĢÕ PRrĨ|]¯×ĩŧŧlnEæ×€øõ%oX5%K˛Īp…Ō3•Īãŧp.ÎÍÍŠT*HČfŗfĸ4é[hÅb1mmmY;ŦT*e&2$ž”å¯n›à›đ ^Ú ÷ũt}¯W+ ’sá˜)Ũq]‰ōāē:'S’;@„ Uܰž¯íĨK—ėY…ÍÂ9ūėŗĪËY‚āe6uäųųî=DÂНĮĮĨR){ápxës/šūFÃØÜX,fi+ā†Ž^¯[i› %åRîĀ“į  ™3›wī š\Nß÷}ß§ .XHúh4R6›ĩg(ĻHÚaÕÚíļÍ=ßC{8Ümį™įĪ~öŗÚŲ\ÁøSēE×'íTLČãl6›ļšCP,4’ŊzôčQ;vL§OŸļō/˛“éØÛcũív[Ī?˙ŧ …‚~ī÷~OwŨu—Ŋ¸‰„FŖ‘>ūņëÆoÔh4ŌĪũÜĪéōåËúũß˙}ÍÍÍ)›ÍꊧžŌūáę-oy‹.]礟üɟԝwŪŠøÃ˙âã šŪŖhØ(—Iģ`ŽVe,Ž8,}|†´ģ¨ōbįÅ ûÄK=›×hąÛ?>ëū™=:ę2_ŪÚR0ŌŊÚ1—œĘįŗ÷+xY’;'ɄÛÄu â%Ëĸ—JĨĖø‚æČ<ŖĶōYn,ā,ød-ĸįØH˛N ’l ķĪģyaoĐ`qL’Ŧ„M—Œ×—QŪæī›Ė9ąāÆãq]ŧxŅ@( Ĩ5X\Ņh*:”ĢŅÛ1īŌS†Įãļ)č÷û87ËAĖ Ĩat{8pųnŽ;Ėsāj¨Ë=šP27ûũžRŠ”ũ›īĖÂĩÃđ#ÉL?hZ™ëčŲ:Ü@%M$h…ˆ“ 4ƒÎŠƒČ€@ `0-Š]Ā 1ītĪ $ŠöI’Žģ´ÛuÆ f–ī‡ĒVĢ‚qē_°Øąpøą¸ ûũžršœ9—Ņ(Âr,VîT*ĨN§Ŗĩĩ5Õj5c `ĻĐŌÕP”Ëå 1Á.VÜā°Ņ„bÎH˙sĖ„ëzļ8Ā.Ũ>ȧƒYFķČ<‘dįÂE ›P …BÖ—xX*î z;i8 eãC+1ßÚĖ?gĢĢĢv¯h‰įÍ4NGŖŅČĖO@sĪįÚĄU„­åyÁq @LÄ  “Čĩõ_îoˇÛÕĘƊĒÕęDĻ$“ k¤d ƒģššŠbą¨fŗ9–ÍũÄDņˆ{čÂĖCŲĀMÔ6žēō~đâØĪįķáķ+++:{öŦŊ떖–T(&ėųžFŖaīFąX´–•°‡HĻcīŽiāt\ķ đöÛoˇŨ; š02Ŧpųa˛€ÅÃ!Č”ÅŠr);sręX0š$ ŊŠŲÔ}’“ôÅ+ė—oūŽūęd(¤ãƒž…ô¸c{`XØ5ÃÁϰādАÔ0‡āÎĨôį39o¯û[ZZ˛Hšáph€´\.[éŗZ­Nčé„ÂRrŖléËu˛x<.IV‚†IcŽĮã7P'(7›ÍZŸaDë oĢÕ2BŲ™Ō:,@/ ÜíˇßŽd2Š/|á Šņ…Α{ēššiynÉdR­VKņxÜæ%ēEŦ}„ũDŌl čdĀžH Īô!ū§ÜĮĩąąaÚUŽ@ ͏#;‘8›t…Ø`ų’xŖŅ°˙€ëP†ÉLŦ­­YŠ9›Íāb.9Ōl6 tÅhƒõâZyƖy ¨ĒT*Ęår-Éô„”ÔqŽņDļ!€ ķŲ`00I;ĖR“ršl×3[*L'q,ŧ§(¯#ņēWŪKh)ÅÂÎĪĪkccCĄPČôŖŊ^Oív[™LFNĮÜĀžŦ_¯×•Ëå&ÂĨ/^ŧ¨ååe›—ņxÜŪlØxø˜,Ž'׏wœ7­ĩZ-ũå_ūå4pŠ d:^õ`÷ PvŨŖčfhÍÛ@”H"‘Đ 7Ü 7ŧá æä“v#Oa”Đ$؂% …Bē­×Ķ}’ôĕrˆ@#ˇ´´¤§Âa}yfF÷ ‡ēû āÄÍCķsIi”;e6^؋‹‹ĻCô‚pIÆøyņ6lįČßÁ:ˆ†•“a[Ȥ“vvū‹‹‹J&“ÚÚÚR:ļÜ4SÂĢķųŧ1yũ~_/^4–…Ī…5€ŒD"ÚˇoŸ¤Í"e'Iv}ŊidkkKŲlÖā~ŋ¯d2iF"\Ŋąąa튎?ŽãĮëčŅŖŠFŖvn0R48&€&‰’9ēJæčââĸiŠČŖôæ‰H$ĸ••ëxQ.—-'R’™"|N HÚÍ°ÜØØ°>ĩĖAâD(M(eSZ…B6‡xžŒ’LßH§@0 3‰X!%\Ø&Ā!Ũ(ūŋöÎ=HŌō,û×ĖtĪšĪ=Ũ3;ŗģY ‡ K”(RŗHÔ*+FB’Ō?ÄHRĨAcMĄĘ(ĢLŦ¤ŦüaTâ*cŒš%ʸ",,Į=ÎĖöų03;==3ī÷ĮäwĪĶKžO`IXŋž¯Ē-ØŲžî~Ÿ÷yŸįzŽûēī{||܈ī‡õLqT4ę>ōœĸú2wČdÅ Kč“ČūGH+áųЧˆ"‹"–j|JęéœúwÃ:žŒi,ŗH‚§`7÷Œë íÁÁAS šôHÚ ĢH[jîÔԔ­e§OŸVŊ^ˇŒ{žo>ƒ YŅ$­­­ŠP(˜*Ë3ÉÁ­ŅhØú“ÉdŒĖ2>Y‹ų}øÃÖÁƒ­= ŠJHäÂĸŦĢĢĢzÛúē~JŌŋonę?ŋ§FVĻh/!G˛jīu×jĩĶŅÂ÷T96Ôpã•d†z”IČS"‘č)]CÕ åĪ ^)IFâīA É %‰$LXļÉŖ~ŸÕų៝JĨba:ŧĄlļ,ū„FFFlķ‡@)ƒfžR.†P1åaxˆaQT^Æ5„'jYŽxŲŧ:ÔSėYRĪÜģ™@°ÃR0”Õ€ā čȑ#F:(4>::jŨJo2^ÔÕ;ŗĢ˙Fi’tH€<…‡ž+ޏÂĩZMVë2T‚(ƒ$Éîdj||\ÕjÕnBŸ)$9 áÁsÉ5A–Â0!jļ F mæÎŌŌ’*;*:Ę?Ī,d‘C5[­–XxÆC"I\c ņ'Y†ššÉdŒ J[EÉ90Aؘ˙ĨRÉ"„i9°Œk||\FÃæ"剰Pƒ‘lk,ŖŖŖ–ŨLå2Q”sˆÉeŦ‹a=ÃĐ{Ę|â Ã<ÃKt„ī‚?;Ęōō˛e!ãģ~á…ÜØĮpčx̀îŪŊÛÂĢ,Æ5Ԍ°ˇ&á$6Ķååe=ķĖ3:vė˜äQđđ#…!|_¨ˆģŖH‡;=úŊōlVdē–$“RSw}]#ņ¸Žjģb¸8SĸDÚöŅA8ŏŲâĘ‘ĸ@˜)Ë{Rۍ%äeeeECCC=uI´ ëB ņđEQ¤RŠdīGŽ$#¯„QÆÆÆ4??oĩ! étÚ꛱)1viJö ˛‰Œ*ļ#KZ’)tårš§õIĪ=÷œõ9æŗ666ŦÜ 9Č+$€Ö€¨D¨ē„mÃ-ü?YŨ¨Õæ>RŠ„04Ģ(z˟‘‘ķēI˛ē•'Nœ0Պ8Ąy LŖ*2Qv3CdđŊō~Ā$™ę™ËåėŽÁÚښOBŪĖO”Yˆ0ūĖBĄ RŠdĪŌÜÜ\ĪØPöĨÂ6::ĒL&ŖĨĨ%#͍p\7šX—“”%mŠĮ@ 6’L ä°ČķšÍfÕl6mîBšøûĘƊ …‚5å’ÃüŒ׍bĪ3ÄᓄƗų‡˙2‘H¨V̙NjŸ˜ vÖ3Öž‡Øŗ„‡IßJ8ėđŨGFFôôĶO;ėc¸ė8kœŲØ)ÜTwá UĄvģ­įž{ާėDÚaą”ļË@đoƒƒƒúĪĄ!ĘåĖčqbsÃÅFBčļŨnë?ôø÷j”ņū¨˜ĶQ+!gårŲ6ŧD"aŠá˰”G2™4_„‡M„pXØ˙˜ä”!Ęą´Z-#ŽÎOŸ>m›'™k‰rXv†ŪąŌ–9ŋŨn+›ÍĒÕjYŅ^Ô|Uø766Ŧ^¨(ņ: î9É@xžÂŦiiˆZfWRdyyYÕjՈc )ŖŊÆvIæĩ⠁ĸ…߯RИS’…ōQfŲÃŦVÆkccÃ˛šv!ÂŽVĢeöiĢt ÅÃú…•JÅĖûô'Ļ BįĖyÔ$î=sˆ‚ãÜŋP‰ŗa! $ AÎPš(Ž‹mwÖīķÎ;ĪŪ§ŲlZg”09;Ąqæ„Ŋ×AŽč\y%ۙu„9aqqąĮÛHË4Č9*Ą¤žn%„āyî˜ģŦ1á3ÄëC_öƒĐ˙Ēæ<Ŧ1¨ĘaRÍ(Ä(­XöėŲŖbąhmĖ+ˁ2—ËinnÎÖ’:W’cÂCßwuuÕ[Á9\tŧv ‹ESĻXĖXlÂė7HNņĪāBŅ#ÄÆ@ČĶ7ę!*…XÃŦOˆÉ"üN˜ÉBJĻ+‰$O@–Â23ø¤XŧŲ$ `œŦQFđ… ¨D„•Ī „æp|ZúŲdđIĄ˜@Œ1¨3öĄÚ‰@A‰ >!a*~?›Í*‘HX/[p<7™ˇ$h@ōPŸĄG’p8Ō ”cJ} ÄP†Ķ¸?a86YˇŠ…ŖŦ 3vÜ÷´áƒ Ŋ_ÔÎët:V¯_YˇÛUŗŲ4e•’0FCËËËJ$æãžSc@z°6Ôj5ˈ†d°y3GIˆ"͜cpŸÃĸĮ$HqŖŅ°g—CߋguxxXĪ?˙ŧ%‰Pž…g’ûÉ}Ú˛ūOŸ>mž?îvˆđÄtøđaWûŽ:΄U¤-EĨRИO†:f„w–——U¯×ĩ˛˛b›Ų˛?*Di+}č‰B… Ã1˜é!P(3¨MŌvļ1*U¸…›E¨‚°QŠ‚R!,đx˛ø~göÚ¤l› Jm™Kâí!ŧËw|†Æxüwß0ōJx •VÚR5 laé6j’ÜGTUT”0J˛@ņGĻR)Kĸ¨×ëŠÃ099iķą&œĖ=’ÔS¯k†Ŧj„ŧI˛ą%viiɔÂs¨oo%˛ĘgP`š9Ųh4ŦŒPHŧ •w:år9 BęI8"ķâ ĄƒÜQ>§Ķé¨Z­Ú¸‡‡ŧwpjr/‰„eßķ;øGQąPô¸—L–——­]YģŨÖΝ;599iƒÃФž ’ČĸŧÆágäö0”I)æ4ķU Ę1J÷ž9Šm’tėØ1ːæPÃ5q€;}ú´%Z4›M› áØpČX__ˇ„)’ ÂJ`X7°MŒkzzÚ~ÂJŌarÖDæá\ ÷ŧį=ēčĸ‹”ĪįípH‘Ô͉†C ki8˙ũ '€ŽŗĄĪvģmŊ(Ŗ(RģŨîÉ Dq į*-P§XÜÆ'_…ĩņD…$A’˛Đ3Æ(mg*Ÿ™‰+m-ž(0x˙0ÅS šT*Ųß%Ų‚Čą‘ķš$Š $°gŗYĨĶik_FŲ6T~†B%™ĒĀFģŧŧŦFŖa õ 766477§BĄĐãĮ„$“qJXŒ„ŒVĢĨršŦt:­|>ßŗĄA)ĄI@­ƒt­ŦŦ(“Éh||\ÉdRĨRɈ~XZEÚŖĸÆĻ“d‰$ĪĐÕ$ô÷‘tL&U,‹Å477gs…páb@* ë6›M+ų!Ā_ˆī{ƒ'R8”¨Ac~@2ÂNaČ:Ė(ÅׯA)Ŧ GApæ.Š#j%ߋ°cŊ^WˇÛĩp"álŠj“éĘÁ% 2Į÷āúx^zÔ˛jĩĒjĩÚc‘āÚđšņ< ”rß ­W*MNN*—ËŲüD9ãāŲA5į€!ä0€Ē § ī 9 ėææĻuf‘ļBįøe!fų|ŪTsÖ%ēŨpšNBģ<3¨Īp˛~)ÃÖįCI } ŖŖŖšŸŸ×?üÃ?čŸ˙ųŸõä“OY%Ü/Éß(Šė Â:wô/ŧ´ãŦÁNĢ3ëd:Ĩԁ$ķ`…Å€Ér ;)„áÅÍÍíļ\áį•ÔŖöđīx¯0`B “,ØĖëõēyŠđĸĒA đĶ„™›œŪŲ|Pà xáHNÉmč÷KĨR=Ų“lL­VËH!!č° …´­`ŦGM “xÄåennÎ<]ŧ†’ĸՐYBúĨRɈaXž†p>¤’‡ęHșÔ|g(Šaœ2#’Ŧhs>Ÿˇû:==m­Ė)˛—ĨíŽ%ˆķō)a'æ/JI¨`ņx\ĨRÉÚųQ1,ß24´ŨF0T¸Cĩ7 yâCĖįķ:qâ„ÕK„Ė‘–ü€ ‡Ĩ|PŠ! étÚ"ū<æ8aJ’[ršœ•-‘dãČw §T*ŠP(XČ8ôīá $Kõ Ĩ•z’x|†ÕE™°™(g$NĄsX ĀßÃÃR<7˙`Xø›šaÃrBųæŪōō˛Ļ§§Õjĩ499ŠZ­Ļ‰‰ ‹HĖĪĪÛÁéL‹éĸB9'žŲĐv144¤ršl‡\ˆ>^NędkaaÁj9...ÚúV0¨×ëæų¤„Åöņˆ:úŽ:΄Á°ā֊ÅbæĶk6›=ÄLRĪBDĩđ˙!DømČD…\= a#”ˆĘg@0PŸč€‚Ņ Ŋnxt =jĩZv]xœ t-žžž6Ä!‘HØĩv¤%Y>Ÿ7’f BD2™Œļ&äĄÃ‹ČƅÁÂ[.—Õl6MEE…]\\´0m蕤0—ããã–ũ)ÉÔBOívÛ|_ûÍÍMS$÷¨ōß0)dccÃÂáŧĩũãŲLĨRÖKV’Ššív짜$šp5¯ˆË}/‰(œĢĄ"M"æyæķŸCÂÃa96f„#§ĻĻlūŖŠSFi~~Ū>ƒđ0äIÚî4ˇ? ‡›X,ĻRŠdãÉķDH2ÄsÃü!;2És×ívUŠTŒ¤B$Q“ ?3B…wllLĩZ­§Įo˜š I"ą‡p,åˆ[Ŗöņ\ķA˛ég Ų ûhK˛u âÅ3N¨ĩōJŅsj ĻĶiS@777Í+K‰ÚÎ1GƒsĸÔãÃzFƒc‡e‚p÷ŗĪ>ĢÅÅE /‡‡Šąą15›MS蚡øp‹Åĸ×t8tœ=8-ŗŲAė !üxĒ0ģ˙˛Pņ~ŲlÖ6 ŠÆ‹EĢÜĪ)?$MūŲ ”’°Ô uĀSƒ 5'NÛg’ÁĢ#mg'CQ<%aD—d›&IøĘP!}„˜đÖëuķ9˛¨‡†sĘͰAāðÎ{qm´âĸģ‡p›YģŨļlNē'&ÅۙĪį5<0ēy0F¨ÍŖŖŖĒVĢ=ž7$¨A„DŠYIÍ:TeęšAą0ĮPZQ|ņ+âk#4'm'-A4˜{¨BC<‡„€™øÁbą­ÆĖ9T.Ūĸ Y!ņ‚à ÷0:Ĩh$™N85ŦCIMÃ0k—z{ŖŖŖ=Ũ|FFFzH;DŒņf3(E‚e„ ō|>¯JĨbEŠųŽív۔IBĻ(‘„oIîĄØaŪN§cĒŪ,Ę­ Bdbą˜eXBVɚMīŧRSSSöũÂLß0L…â É›;!LîEąX´Úu”ķ!Lųę AķēX,ĻbąhárÂõkÂøĄŠĒclꄹ Ŧņx\ĶĶĶnį’,†É!Ę´’ÛÜÜ´đ1**!v’677­C‰$ĨĶi+ЃÁ˙ØącæcM§ĶĻląņŖJÆãqUĢUår9+ģBhŨęęĒ)^Œĩ !2lüĄ’Éá‚ÄķĮ{, Ė[æ'vž3ãD ĪŠ:ö ú2S&å‰1,•Jš››SĩZĩ(׊ęĖsV.—Í3(m{įxū8¨qÍ3ŽwccCÕjÕ²x<3™Œ‘7ūŌBÔÖ¤đ:>Nė„L gCVŦ„J.—ŗ•đxyîĨíC2ķ‰ÄD´ŊƒäMLLXé*BІ°TØa"ĢŨnĢP(¨\.›B me‚ŌĶ>á4Âuxūęõēy”HR´k&œLԍ Õëu )›ÍjaaĄĮáDɃ áû ũ`¨˜NĮŠétÚHEŽM§ĶVPš$_’uā@’dߟpõŠS§ė=ëõēŪ å u s>Ęß‚9< žCvÉø Ĩ¯ŽŽj~~^ēøâ‹í}Âlö{īŊWķ7cã<<}Ú|<¨Ũn× (†vLâŲlÖ|Oƒƒƒæ‹bā÷“ɤeÛŌ™ ,MBf7ĘĄ'žãŠZÅ5įršž‚ÁøŅđ˜î爇 õcmmÍÂīø¸<lę¨6¨;¨6(qxKQ™#(\\=pŠČŧBŅaū@\GFF,?66fĩ0 =zN&“SĢÕ2E™ƒŌææĻųĖØŦ! ÜûÕÕUŗÄb1]xá…ēöÚk•JĨŦÖõ Y’p’ņ••;´@ŽQæŗŲŦųæ­Bø U=zT'Nœ°Œi^čų$€…¯\˜d‚e‚R:$@P¤<ŧ‡ŖŖŖĘįķj6›*•J=ž@BKKKĘfŗîÄëIč=™LÚwĻL Ķĩĩ5ŗUđœnnn÷ŽîvģĻbķēlžlt„ˇ1ōSԘäÂ###VķŒM Ō^ł!Įԁ“dž&”J• ŠX,jbbB‡6ŸIá!uqzzÚēTPœ¸ŅhXB$ 7 3ž )—ËŠ\.+›ÍچОzâÄ S×P  IÖų%…ąå€ÚČ×ס:ą,..j׎]=īCaqÔn2<ą0@† ƒ¨o$ZT*mnn•¸Ņ›ßüf]~ųå:˙üķõČ#Q´ņ âÃ+•JV&#Å 2Ėũâ@Âsa!Áķœ$3ĸHx!Á‡kæ Ö(ä0֞$9)$ä$Į˛Õ{žČ|ĄPБ#GŦSeŒč…‹ÅėÉAyČ&ŦĩöU†ôB2IFŸ É$Ã>™LZb eˆÚíļ…“WÖH1ĩ:)žÎĄ’CߛhŪ0™Ã'8<ė8k´Z- mqōGĨ )ƒŋC‚†††T*•Ŧ˜0‹‹!-ŧ]á)šÍ ƒ? ˇÛUŖŅ0ŋå*rcQ&l‚LÖ!^ƒ‚ņ†’ŧE(ˌ%Ã/•JŠŅh˜īe*ãær9#Kø’ēŨŽeGŖxA:1ũŖÎÔëõžšcl ( ŗŗŗššš˛ą(‹˛vfĶĶĶļĄAVQčđŠáģët:ĒT*ō%ôL"P3­RŠdÅĨ!ī›››Z]]ĩڌ(”¨S•JÅH>ĄčršlAČ %‹“ŸI[d´\.é “ˆD˜šF8S’Ũ+’ $Ԑ„âņ¸fffˎĒĀ„^ZZ2ËĄ:ÔƊŽĄŪjĩŒŒ-..ę;ßųŽžõ­oõōF‘"”a+ Ļ|†¯VĢzá…Ôh4Ŧ4^\TL¸>N¸ÉdŌ|’tô äRXĢŒk˛ˆQŨieFņôFŖaܰkD&›Íö$|áËdŽā—D%ŖP7Ąyŧtüá™æ€” Ā ĄfŽąĻ ˜“čÂA÷ĘåröoøđHōÔs$ą†CsˆgŒĸāüŒä&Â÷ĄõZørIrô7œ:^°éFãĘfB؇&ōxîXˆĩpŌ%ŧK˜p``ĀúqR<•Ō$aÂăĶ3„ õQÚîKbF!e6át:m's~— ",˛ĘfI…T°YĸąŅâDŅdƒE)ba§ĩa6CB°Œ;cˆú )^]]ĩ›ųųųžėa6T9PPBŽör˛P•JĨRļqąQI[Eŧ!Į$HŖVa¨6QFƒë†´’˜ƒ 800`žABaÔec|!Aŧę aÂ(ŠŦanjJ˛šK"~ŋ°Ģ ‰+ŒäœųÁØAŧ9„sU‰{ Ág 9ÃãŠĨ “É(™LĒVĢéģßũŽūõ_˙U´LŪN§cjQ<ˇzŒ9áQĘĨ¤ĶiĢĪĮ}äūBØP ŗŲŦ)dĶsƒ¤2'ÍöQ­VMyÃÂ033Ķ“đųbŒQiUČs*Ųįž  ĸBRĶ“ûĮu”P-JpXš†yˆ÷“Ŧiž[ĨRąšĻŦ$‚Õj5ģFHãKhwqqQ’ė=‰@p CåãYg\)âÁg~Bōų>ø7‰„vīŪŨ“Œ†€ųįč_8tœ5BSsØå!ôҁT*ĨÉÉI#*N웛ļčĸčPp7$%+ŠŦ†īƒâY › " !a#B’$z´ÛmۘY|ņŌaōFÍ ‹ßĸLNMMYŲˆ›Ĩ\ ^C’ˆûĄ6’Lœ ˆ9ĒįČȈ•ÛaCÖ8z“Pė––”Ëå”Ëåėšbn‘@E("ĩyž˜„) ƒŋsīŪŊš5 ĒŽ|>ßcw8~ü¸ ˆ)ĪũeOŸ>­zŊnĨObą˜ÍTUę=ōüĸ8¯ŦŦXșZ„’zĸ•JÅ>+<ŦAŒKČ j|7ä+“x@bÃëg#˜˜Đ‚m‚ü5“ēáĻ’[I–ĩĒk›››=5˙øÜ  SL¸ī(:>”`TĮųųyK‚ I 2ÅŊ‚˜ēƒl†ĩxâčŨËĪ8(āc6eŠŌ>áœÁĶ&ˆLEˆ‘gG’•´ADe ŗxĢÕĒ…%™÷“““Vd˜úŒĄ2ÆwÅëÆŊāzsÅJĨbv ”/ēūā™™™1n.—Ķɓ'­t Ī4ár|¤Ōv!øĐ7<11Ą§Ÿ~Z…BÁËËËæ…ė-čt:ÖN„“°­Ēėéͧ5==m*öââĸųCŸ*ágęP2YĢ ¤’L„˜sĐā9K&“F˛90†-éÂg‹Ãt:6Ë Qŧ¤ņx\™LÆĘpņ,“L‰›fŗißûŸūéŸÔl6-kŪŅ_đ20Ž× ĘĀdŗYÛ¸ ,°###–9Įī ° ą ŗ ˇŽbA'K7뜁—ް)īAæ_č ø|áQiĢ œøÃΨ‹„Ŋ؜؏Ĩ힨Ą› 2@V !XNũ|ĪpÃGMAņ„h ļ‘ 088hD`mmMÅbŅԗ0ôÎũ ÂBŠäG~DĩZÍ:Ÿ‹Z…JA¨Œ$/A øÄÁÁAS ÃÖm>’X ›ü?uúÂīĪ}:uę”mæ.(Mú ™ ¨@„÷øî„-§ĻĻlãG} =Œ°L ūĮ°…Ø™ę-ĈīÉŧČ<'é%œ ŌYĸ; ‰9|ßÛũĢÃDæe¨āņÂ_|ŅËĀô1<ė8k„%Zë…ūü&„vÂ6YÚŲHŲH8Ŋrē†(vcķ 3cą˜)a•šSSSJ$/ 75›M wģ]ë8ÂEČ˙áĐLą‘PúBIv"ߏ › aFĘāpō“>(É„¸ måo¸~IæSb“ä÷ÃLlČéũ×Y Ē ×€ōU¯×mĶÅøjD؝ †Đ)×ŅåpbŗFõ!ņ‚î$(áœ5˙SŠTRĄP°xssĢ…*/ĩC•…MžÍ“p(ץQąX4BW­V•L&{’4(Ų˛´´¤ųųy ߓ ‹Åzē{j‡Ō¯uppPŲlÖŽ1KĻHęQ™˜ŸŽŅŅQ% +SÁ,Š"e2#”5Ô>9æŗ!$Ŧ¯ær9+éÃ|Eyg,Y(k‚Š‘įĮ<ēéĻ›ôw÷wæ å0Dˆ|rrRŗŗŗĘå@D–,ß?ŸĪ÷O§F"uą›PK2Dē(E…Ũƒį‰uˆ.üŒ$‘#GŽčȑ#Z]]UąXÔęęĒ‘?TîjĩĒršŦ‡~ؒ‚Ûr°dîōŒ’܆úM-B|Ŧ ĶĘƊyQ.›ÍĻvíÚÕsx ­6Žū„‡€¯„€ßôĻ7immÍęÚĒåôO˜',FJhŒ…ŋ*ˆ$k×E-+ŧ@”1 ŗZ!:´ōâTef%äˆé?3”ÁL&Ŗ;wšß‡ōa(ˆM',o‚/‰đ1Be)$fŧj"Ų˛ŠTĘXBoŲææfOŒ å03‡0Ë$˜āwƒPCĘ„’GđžA” C ›ē’H$L*•JæÃˆĪ÷ĨĀ7ālá0ŗ’—ą"äĮxzį Ą ¤3ôôņۃƒƒæYå~‘ ´ŧŧÜs‘d-ËKʤPTK@XeuuÕT—0ą¯(ßŕq…ŧd2Õëu;¨đņ”A&9”đīŒ ÷ L´ĸ ßb)Bi‡<2æĄÂĮŗĘķÂuđyt8ņLRØĩu ˛ųüķĪ›âaŖÄ ¤õLõŸƒ"ģpūbI`ŖÖķ~$R ZōŅž;ˇ“'OÚ÷bnĒæúĸ(˛r3$Ŋ…!nžkĨR҉'tôčQˇ¨ōå:Ð8jIÖ5„Úōō˛ĩ‰äšđˆō]™įkkkzöŲg=ÜĮpčx̀’åĮ‰’S;Æeū-Ė’ 7$2(ŲĀØ Ã˛lplÎÉdŌ6ŧpøzX(9)ŗčĄVņū¨Ž(hx(!qūųįëâ‹/Öɓ'-k”Ī „ƒQđüMLL˜ŌIXuccÃT"Ęj ˛(s(`’ĖÄÍ˙ŒŒXV îø‘0āãķŠÕjF I˜)‹ZÂc á Ãya}?ÚHĄÔ@l!רÜ?˛Cņč­ŦŦ(‹Y˛ b )…ĸÂEQ¤;wö\'ž=iËßV(LŠ"K˜6¤o(måB˙¤$Ėb][[ŗ‚ƧNR§Ķ12ɜCŊ…ĐĐ+vzzÚÆ„rF†¤í3ÜsžB€››[- ņĀ ZËBˆvxČāũ!M\PgRh™{Į܇ÛívÍŖI¯Zæ?=˜Qģ$Ąåũ!NĖ7ˆ ĩ,y v‚#GŽqjˇÛšŸŸˇ2‡°5s;ãų#q åŽgâ&đĖÎÎ*“É؁ !r|t(ģų|ŪēˇpāŖžāpÎÕëuĢ6Ā3ÂĄ”ĩˆCę<áYƚųÂz100ĐSŗ2,VM&:pBĨ™y&É `ŸÃ  ã5Hh“8ĘĄ P%™*‚w†0 äĸHŅV’2öH†`“ãû Púa#ā4ޝ°Ķé˜2¸ļļĻ……ķū<3ÜÄu‘ôÂwE‘ë)XLY(Š”ĪįMƒXNdÃ$¤†ŽŒGÂx,ūƒƒƒ–~~*—d*Š!äaŨ=BV5üpÜH;ž-ČDč ´ŒGČyX†1’ļû)Ķ3;JcGš ’ )Åķ…JDÛ,Ū „=T;$ŧ“„YQTŠMIû.ęÜĄö ĢP(XÖ6åSPšî°3¤ĢĨ“˜sؘGFÈ5s…q ‰˛$+'B™’VĢeYĐ!†Ė†­Üøøfų>”!š’ÃĄB’@ņC<9Ø1?¸'ãããFā Ë$X|)ä.•Jvc͑d!×X,f6đr(ÕÂÁî@sČW˜œÅĩsˆ#ÖĪ'!ޤ.ˆë÷‰Īa­âYd>soķėAė9…Ę ™ąd|!˜”™âpsøđa'€} Oqœ5đū…Po¨š”YÔ ÔĮb#ƒ<’H `ÃĢT*FŽ ŒløX&!```ĀJ` ÎI2eš|¨”KKK–='ŠG”f€  6†]@đ#†aPˆKŊ^7…e jĒJX0˜p„ Øčč¨e%RᐰaH6 ŠmķÛíļ…( C…I-étڈ"ęI`! -ÉČáž0ė 9d.´ƒ€äƒ°O-÷‹{ ņ$ŗˇ\.YĨô >KIĻö”344dE›kĩšēŨŽesĪP¸§Ff(”§4knnN7Ũt“ŽšæwŪyĻ@CæÃ¤ æ/÷„d%æ"!t>ĖC’V( ’N§{ēs LÛœ"ĩŒ,nę2§ÃžĪüŒ¤-ƀ1d^vģ]MOOÛ|BMFé rsˆā}8PAŽ (ccc’e]ās9ta!,Ŋēējĩ !øM<ŋh¤íÎ@a˛÷U’į˜9†U ∍…į¯#ņ„ũ90˛Iķ™ĩ8™–Q­yvQø(ŲZ°ČŒŽŽĒVĢ™:]*•Üčđ$ĮŲ# ũ†~* šRŸP DÍą^¯[+Iæ5 É`"‘ĐņãĮ%É68ji;I˜ŋļ…ô Ō |@ŌX”‰„*•ŠŌé´ũ[Xģ0•J™ēžîÒ Ą€Ī,Ėbæ›ÍĻōųŧ)Ŗ|^§ŗÕģ…’P3]đUv:ž:t|› .›6cCF)5Ÿ977gŨPL˛ŲŦ jĩĒ™™3ëK2U bAv,ęhĢÕŌėėŦmö’LA  92ŽyffÆČ mŅBb‹ÅŦķaR^‹/2|}X&ôĩÛm;ĖHęIX`<ÂNÕjÕHdũ…^PˇÛÕŠS§$m•ŦÁOFČÃūŠS§,,ĘŊÁŸ‡2ÉāYágŌļ5a||Üzį†!wB‡d¯C”Â÷gp@ ã7,œMwŒ°BRQÜPáWWW­Ã ‡ˆt:m$:ŸĪ›* é…<ĄX2„ŊÍ~AÂķ—C‘$‹EUĢU+$Īŋ5›MI[‰¸wxô8$q›™™1….,EĮU.—­üJ?ķC’Ęå˛0z9Ą Ž­­)•JéčŅŖšĩDad`ŗfŌI&Te!í$Aá+Íd2ĒVĢV˙ņčŅŖ¯~ąwü;^3ŗ€C.đŅ $qjg—dĒę'pBœjQI mĄZ6ŧ'´‡‰lMęÆœ¨œūņŦ…$Ž ]’‘LˆKč„ė­­­YAlB-Ąį1,.úļ iŧá;Ô˛…šļd2i×QÁH*¨ŨIRˆÅbÚˇoŸZ­–yœ ~ü¸xž ;Ô˛>ą„8ü RRf‰gessS×^{­ēŨŽĘå˛)˜™LÆBä9faíGˆ­PÁ"ôH66D’ī&01Wų=ž#H?ŪÅ0Ų„„IĻ6’ܰžžn]PŽšg$CĒõŦC-žs*‘HؘōlCj)‡CR…ĩ!WØQÂÎ>`ƛ¤֨ЛG"WXÆ "G8Ŋ\.ŋėyįĀËúÂ=âũčæCm@ž3Ę6Öo6›Õ /ŧā!ā>†wés|æ3ŸŅ˙ņkaaA—\r‰îŊ÷^]sÍ5¯čw):zÁØF@¸—Í”;ė;šīĨm"†d$™7MÚ ĶŌZ‹ˇ\.!ƒ8ōzĻ5jĮōō˛)$lNƒƒƒĻ~žœœT6›Õž}ûT.—õä“OZ]6ę”q 's˜M+ŸĪ[wČ *c,ļÕš!TY¤ų|ęץöÍĖĖX=B…lNÃÃÃæ#ƒdBŽívģ=ŊvCΝG™„tQ #k~~žĮđ9æskĩšešâ7‚°Gé`> PNNNöt9@FmaĖQĩ /Č' a9ÍfS…BÁČl˜INąpDšÍĻ‘V/IĻäL˜ĀÄõĸåš$Yļ-Šm¸iCŌQIëõēÎ&ŦN‚Nކ I˛Ž—^zŠ^xá-..Úŗ„ĸvÂá{ō|@:yo"ĖIIv-Ä••ÛŧX$ ›s$7ĄŦ2Fccc–¤Äķ ņŦVĢūæŲ†ā…åŸ8<‘Â˙Ŗ^žéņœœœT§Ķ1Ր{Éá’{Ė÷ÁOv"+O`"‘čņ3ŸPŽņĄ&“I5 Ģ-ĘZH&2Ī s†1‚\ŗļđ܇ũļ%õøuC/ŗ${_”BČ-v }å+_ņN } ÷ö1žôĨ/éŽ;îĐ'>ņ }į;ßŅ5×\ŖŸūéŸÖącĮ^ÕûŒ÷Ô÷“dá5mIļpĄ"Hę)˂ÎI8ômll(—ËéĒĢŽŌ¯ūę¯jįΝĻá!DÍ kv–&y",-ÂbK&%Åh/ēč"ũŌžŒsŽ>IDAT/ũ’fff,dˆŧ^¯÷(%ĄēHš–0ô<22b~2xQéČÎEĒ×ëĻÆ@NøŽ‰DÂÂNg6+>‹‚ˇ1Ėž Հ ˆ ‡ī&.äršžî+„!sss–ŧP*•$ɈeČN }’’ŦūēÕÕUKR ;šä T!”TƉ‰ ÍĪĪĢ^¯ĢŨnÛk ßŧ†šI&oØˇÕâĀį2ø,”Gæ}¨"’žļļĻBĄ`ę.›6dâAG|o„GGˇúārp lķåņÃAkæ"›ü‚ĩ7äƒ4 ãí¨S”VÚ*Ū’Īķ†I˛Čd2V“ŽĪęt:V3ô%2×ņúAFyæ”@B¯<ßŦŧ'Ē7 E<+ĶĶĶ’dĪĩ$#ZCCC*—ËF’küĩ\7% ƒãoF5'ÄOזzŊnķĢa_žwK„ÛC¯+ä´Ųlšē\ĢÕlŽōŧÅãq5›Mkž9ÂÆCC[­.GÃCĀ}Œ_ų•_Ņūũûõ{ŋ÷{šššŌģßũnũÅ_ü…–––ôŽwŊëüũ°;!2|xa{€lĘaí;ʂΠËĢĢĢÚĩk—n¸áŨxãԃ>¨JĨb) )ŸAč2,ؐ7î°DĢÕŌáÇuęÔ)#mlœY:а)ā"<nn¨.ŲlVŌļg‹† „šl”pX[[ëIH,H&`S„TĶæŠÛí*•JYHŦPęƒAn‹Åĸ‘5(I9„åPwAĨR1âIBC2™´ÍûĒ–øņ(ÄË&ÖŲãūp-xI"<Î&E‘…766´sįNë…Ė} df؞ŠÄAÆÉ΄ŦQį°^¯[˜"B8‘ųÚl6­n_¨zA¸ ‘s@5"DČ='˓'TÕ°V!ķå¸Õj)Š"Ë|†4/--Y-NBžÕjÕæ'Ąa|ˆ!i偏— áRŠdDŒR7dĮ†ŲĐĄ—įC’/ßÂOøžkŦÕjFžÂ>˄ôŗŲlOļ4Ī9ĒųææĻ­QdˆÖI–C°ëëë=5“ÉdĪáRHˆu||ÜîEĨšdyž éaązŠ6ƒ]ģvŲA‚ÍAƒųČw"ûšÃ[ás ŋPĸO?ũ´‡€ûžŌ§X[[ĶŖ>ĒģîēĢįį×_Ŋ<øĒŪ 5EĨŨnÛBIh†0 ›ž""B‚ õõuMMMimmM^xĄnēé&Ũpà ļI\qÅj6›æųĸ‰=›Râŋ„“(ؐļHŠTŌ7žņ ķ.//+ŸĪ[k-6 ėøŠgČfÄÉ\’õđ¤,¤$*ū]1đQA° sĸ(ĄH`؇dąŠ„ĒĩI9räˆPDx}}ŨØP!ã5a=3ÔGū_Úö˛Ą‡fv<Ą›››Ļôā›bŖÆ#E8ŒÃÉŌÖfyōäI+˜Ėbn Œf2 ƒs¯ðî^‹*†Įņ ŽiiiŠ'i…qAE”ļBĩ´Î#4‹U€qBĨ ̨˛$*€CQhÕjÕ,ĄHˆœÂŅãããVCÂĪīđ]ųūĘd2jĩZFnI^a^`Gh6›ĘfŗĻ>ōœsxBíŒ1J,Š#VŠŠ);@P3<|ĄlŽŽÚøBpÃŽ;T# :J5Ę*kŖŅ°gCĪrØs;C~BÍģvíRŗŲ4"*õ&¨aāų‰1-Y?HŽa­ŦVĢ=ÅxĨĪ´ƒ,--Yh><ˆ"fî9úNû•JE*‹=?/‹æ#:a!WIæŸCÉÃVĢÕ$ÉÂ[l˜(2llšJœn“ļĢ|>¯ŲŲYSãhCĩžžnā°,}C%Ų‚M¨r‚ú&~@Ri`OâĨEZ­–m¨NG/žøĸĻĻĻėÃū¸,üņxÜĖø(:’z|9QYf' _ØŲ@’mlüďMšS>^¸0ä IĨ,a'Æ RB؎ WiKą\ dAQŠĶ‡ĶívU¯×­ĒRčšâŪw:ÛÃÎSSS’ļÉ$*÷ ÕĢVĢŠÕj)ŸĪ[h9TĢÕĒļ0ɀė\|„¨w(B •Ô—ÜØØĐüüŧŠI„@ŠÃGÆ{X¯ BËÜǴ42xå”9”\jJÛŀ!?aÆ.¤žƒĘ0ķr‹"ɸ1° āyäāģķüKۄĸT*™ũÄû4›M ķĸĀq a‰!‡KKKÖߙg†’GĖ[H<ާZ­ĒŨn+›Íö”œzūųįU(,š ˜Ccč“ćI+ŋÉÉI[x> ĐD@XŖ8<œ9§xÆI ãŲ„Ė‘@Ĩæeč'WĢÕ˛ÂרR˜_dÎS€žėdZEvģ]oOč_8ėsœY Šđ×÷ÃŨwß­?øƒ?xŲĪ:ôųnāë_˙ēîŊ÷Ūčgœ ^­gŌáp8ÎĐ2ŅŅpا %Ų™j_ŠTz™*~ûˇ[wŪy§ũŊŅhh÷îŨ:vė˜/ g‰VĢĨ;węøņ㞑wđq|ũācųúá\KÔâ;vŧŅ_ÅņÁ `ŸbxxXûöí́ôs?÷söķčŊī}ī÷ũBIg"•J3‹Ú˙v$“IË×>ޝ|,_?œkcé÷ū†Ā>ƝwŪŠ[nšEW^yĨŪöļˇésŸûœŽ;Ļ[oŊõūj‡Ãáp8~€pØĮxßûŪ§jĩĒO}ęSZXXĐŪŊ{õÕ¯~Uģwī~ŖŋšÃáp8Ž œö9>ō‘č#ųČkúŨ‘‘}ō“ŸôR¯|,_ø8ž~đą|ũācé8á­ā‡Ãáp8ú Ū Îáp8‡ŖĪāĐáp8‡ŖĪāĐáp8‡ŖĪāĐáp8‡ŖĪāĐņšđ™Ī|F{öėŅčč¨öíÛ§˙ø˙xŖŋŌ9…ģīž[o}ë[•H$T(ôŗ?ûŗ:|øpĪk:Ž>úŅ*ŸĪkbbB7Ũt“Nœ8ŅķšcĮŽég~æg411Ą|>¯}ėcÖc¸_q÷Ũwk``@wÜq‡ũĖĮō•ãäɓúĀ> \.§ņņqũčū¨}ôQû÷(Šôûŋ˙ûÚąc‡ÆÆÆtíĩ×ꊧžęyzŊŽ[nšEŠTJŠTJˇÜr‹õhîŦ¯¯ëw÷wĩgĪéŧķÎͧ>õ)ëo,ųX:ÎqDĮĢÄ}÷ŨÅãņčķŸ˙|tčĐĄčöÛo&&&ĸŖGžŅ_íœÁ 7Ü}á _ˆž|ōÉčņĮöīßíÚĩ+ZZZ˛×Üzë­ŅėėltāčąĮ‹ŪņŽwD—_~y´žžEQ­¯¯G{÷îŪņŽwD=öXtāhĮŽŅmˇŨöF]ÖŽGy$zĶ›Ū]vŲeŅíˇßn?÷ą|e¨ÕjŅîŨģŖøÃŅÃ?ŊôŌKŅ<=˙üķöš{îš'J$Ņß˙ũßGO<ņDôž÷Ŋ/𙙉Z­–ŊæŨī~w´wīŪčāÁƒŅÁƒŖŊ{÷F7ŪxãqIoūđ˙0ĘårŅWžō•čĨ—^Šūöo˙6šœœŒîŊ÷^{Ĩã\†@ĮĢÆũ؏EˇŪzkĪĪ.ŧđÂčŽģîzƒžŅšRŠIŠ|đÁ(Šĸ¨ŅhDņx<ēīžûė5'OžŒŖų—‰ĸ(ŠžúÕ¯FƒƒƒŅɓ'í5ũ׍ŒŒDÍfķ‡{įÚívtÁDˆŪūöˇôą|åøøĮ?]}õÕ˙×ßÜ܌ϧ§Ŗ{îšĮ~ļēēĨRŠčĪūėĪĸ(ŠĸC‡E’ĸo}ë[öš‡z(’=ķĖ3?¸/Ža˙ūũŅ/˙ō/÷üėįūįŖ|āQųX:Î}xØņǰļļĻG}T×_}ĪΝŋūzšÍĻ$)›ÍJ’}ôQuģŨžqÜąc‡öîŨkãøĐCiīŪŊ=ÍÚo¸áu:ž]ŋā×ũ×ĩ˙~Ŋë]īęųšå+Į—ŋüe]yå•ú…_ø Ŋå-oŅį?˙yû÷—^zI‹‹‹=c922ĸˇŋũí=c™JĨôã?ūãöšĢŽēJŠTǝր̝žZ_˙ú×õėŗĪJ’ūûŋ˙[ßüæ7õž÷ŧG’Ĩã܇wqŧ*T*mll¨X,öüŧX,jqqņ úVį6ĸ(ŌwŪŠĢ¯žZ{÷î•$-..jxxX™LĻįĩá8...žlœ3™Œ†‡‡ûnŦīģī>=öØcúöˇŋũ˛ķą|åxņÅõŲĪ~VwŪy§~įw~G<ōˆ>öąiddDüām,žßķ}ôčQI[cY(^öŪ…BĄ¯Æōã˙¸šÍĻ.ŧđB iccCŸūô§õū÷ŋ_’|,į<œ:^zūEŅË~æØÂmˇŨĻī~÷ģúæ7ŋų?žöĖqü~cÚoc}üøqŨ~ûíúÚמĻŅŅŅWü{>–/ĮææĻŽŧōJũŅũ‘$é-oy‹žzę)}öŗŸÕ?øA{Ũ˙ô|ûXJ_úŌ—ôÅ/~QõWĨK.šD?ū¸î¸ãíØąCúЇėu>–Žsvŧ*äķy ŊėtZ*•^vŌuHũčGõå/Y˙ūī˙Žšš9ûųôô´ÖÖÖT¯×{^ŽãôôôËÆš^¯ĢÛíöÕX?účŖ*•JÚˇoŸbą˜bą˜|đAũɟü‰bą˜ŠÅĸå+ÄĖˌ.žøâžŸ]tŅE:v똤­q’ô˙|ž§§§uęÔŠ—Ŋwš\îĢąüÍßüMŨu×]úÅ_üE]zéĨēå–[ôŋņēûîģ%ųX:Î}8tŧ* kßž}:pā@ĪĪ8 Ÿø‰ŸxƒžÕš‡(ŠtÛmˇéūûī×ŋũÛŋiĪž==˙žoß>Åãņžq\XXГO>iãøļˇŊMO>ų¤ė5_ûÚ×422ĸ}ûöũp.äĀu×]§'žxB?ū¸ũšōĘ+uķÍ7Û˙ûXž2üäOūäËĘ=ûėŗÚŊ{ˇ$iĪž=šžžîËĩĩ5=øāƒ=cŲl6õČ#Øk~øa5›ÍžZVVV48Øģ… YKĮ97(ųÄņŋ”ųķ?˙ķčĐĄCŅwÜMLLDGŽyŖŋÚ9ƒ_ûĩ_‹RŠTôo|#ZXX°?+++öš[oŊ5š››‹xāčąĮ‹ŪųÎw~ßŌ%×]w]ôØcE<đ@477×wĨKžÂ,ā(ōą|Ĩxä‘GĸX,}ú͟Žž{îšč/˙ō/Ŗņņņč‹_üĸŊæž{î‰RŠTt˙ũ÷GO<ņDôū÷ŋ˙û–.šė˛Ëĸ‡z(z衇ĸK/Ŋ´īJ—|čCŠfgg­ Ėũ÷ßåķųčˇ~ëˇė5>–ŽsN¯ ú§íŪŊ;ŽŽ¸â +oâØ‚¤īûį _ø‚ŊæôéĶŅmˇŨeŗŲhll,ēņÆŖcĮŽõŧĪŅŖGŖũû÷GcccQ6›nģíļhuuõ‡|5įÎ$€>–¯˙ø˙íŨģ7‰.ŧđÂčsŸû\ĪŋonnFŸüä'Ŗéééhdd$úПúŠč‰'žčyMĩZnžųæ(‘HD‰D"ēųæ›ŖzŊūÃŧŒ7­V+ēũöÛŖ]ģvEŖŖŖŅyį}⟈:ŽŊÆĮŌq.c ŠĸčT ‡Ãáp8?\¸Đáp8‡ŖĪāĐáp8‡ŖĪāĐáp8‡ŖĪāĐáp8‡ŖĪāĐáp8‡ŖĪāĐáp8‡ŖĪāĐáp8‡ŖĪāĐáp8‡ŖĪāĐáp8‡ŖĪāĐáp8‡ŖĪāĐáp8‡ŖĪāĐáp8‡ŖĪāĐáp8‡ŖĪāĐáp8‡ŖĪāĐáp8‡ŖĪāĐáp8‡ŖĪāĐáp8‡ŖĪāĐáp8‡ŖĪāĐáp8‡ŖĪāĐáp8‡ŖĪāĐáp8‡ŖĪāĐáp8‡ŖĪāĐáp8‡ŖĪāĐáp8‡ŖĪāĐáp8‡ŖĪāĐáp8‡ŖĪāĐáp8‡ŖĪāĐáp8‡ŖĪāĐáp8‡ŖĪāĐáp8‡ŖĪāĐáp8‡ŖĪđŨ66ŽûÜŧIENDŽB`‚././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/docs/api.rst0000644000175100001770000000012114525470416014671 0ustar00runnerdockerReference/API ============= .. automodapi:: regions :no-inheritance-diagram: ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/docs/changelog.rst0000644000175100001770000000013214525470416016051 0ustar00runnerdocker.. _changelog: ************** Full Changelog ************** .. include:: ../CHANGES.rst ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/docs/common_links.txt0000644000175100001770000000176714525470416016640 0ustar00runnerdocker.. These are ReST substitutions and links that can be used throughout the docs .. (and docstrings) because they are added to ``docs/conf.py::rst_epilog``. .. ------------------------------------------------------------------ .. RST SUBSTITUTIONS .. NumPy .. |ndarray| replace:: :class:`numpy.ndarray` .. Astropy .. |Angle| replace:: `astropy.coordinates.Angle` .. |Latitude| replace:: `astropy.coordinates.Latitude` .. |Longitude| replace:: :class:`astropy.coordinates.Longitude` .. |SkyCoord| replace:: :class:`astropy.coordinates.SkyCoord` .. |Table| replace:: :class:`astropy.table.Table` .. |QTable| replace:: :class:`astropy.table.QTable` .. |Quantity| replace:: :class:`astropy.units.Quantity` .. |Unit| replace:: :class:`astropy.units.UnitBase` .. Regions .. |PixCoord| replace:: `~regions.PixCoord` .. |RegionMeta| replace:: `~regions.RegionMeta` .. |RegionVisual| replace:: `~regions.RegionVisual` .. Matplotlib .. _Matplotlib: https://matplotlib.org/ .. |Patch| replace:: `~matplotlib.patches.Patch` ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/docs/compound.rst0000644000175100001770000001325614525470416015761 0ustar00runnerdockerCombining Regions ================= There are a few ways to combine any two `~regions.Region` objects into a compound region, i.e., a `~regions.CompoundPixelRegion` or `~regions.CompoundSkyRegion` object. Let's start by defining two sky regions:: >>> from astropy.coordinates import Angle, SkyCoord >>> from regions import CircleSkyRegion >>> circle1 = CircleSkyRegion( ... center=SkyCoord(1, 2, unit='deg', frame='galactic'), ... radius=Angle('5 deg')) >>> circle2 = CircleSkyRegion( ... center=SkyCoord(-4, 3, unit='deg', frame='galactic'), ... radius=Angle('3 deg')) Intersection (AND) ------------------ To create an intersection compound region, use either the ``&`` operator or the :meth:`~regions.Region.intersection` method:: >>> comp_region = circle1 & circle2 >>> print(comp_region) Region: CompoundSkyRegion region1: Region: CircleSkyRegion center: radius: 5.0 deg region2: Region: CircleSkyRegion center: radius: 3.0 deg operator: >>> comp_region = circle1.intersection(circle2) >>> print(comp_region) Region: CompoundSkyRegion region1: Region: CircleSkyRegion center: radius: 5.0 deg region2: Region: CircleSkyRegion center: radius: 3.0 deg operator: Union (OR) ---------- To create a union compound region, use either the ``|`` operator or the :meth:`~regions.Region.union` method:: >>> comp_region = circle1 | circle2 >>> print(comp_region) Region: CompoundSkyRegion region1: Region: CircleSkyRegion center: radius: 5.0 deg region2: Region: CircleSkyRegion center: radius: 3.0 deg operator: >>> comp_region = circle1.union(circle2) >>> print(comp_region) Region: CompoundSkyRegion region1: Region: CircleSkyRegion center: radius: 5.0 deg region2: Region: CircleSkyRegion center: radius: 3.0 deg operator: Symmetric Difference (XOR) -------------------------- To create a symmetric difference compound region, use either the ``^`` operator or the :meth:`~regions.Region.symmetric_difference` method:: >>> comp_region = circle1 ^ circle2 >>> print(comp_region) Region: CompoundSkyRegion region1: Region: CircleSkyRegion center: radius: 5.0 deg region2: Region: CircleSkyRegion center: radius: 3.0 deg operator: >>> comp_region = circle1.symmetric_difference(circle2) >>> print(comp_region) Region: CompoundSkyRegion region1: Region: CircleSkyRegion center: radius: 5.0 deg region2: Region: CircleSkyRegion center: radius: 3.0 deg operator: Example Illustrating Compound Regions ------------------------------------- .. plot:: :include-source: false import matplotlib.pyplot as plt import numpy as np from astropy.coordinates import Angle, SkyCoord from regions import CircleSkyRegion, make_example_dataset # load example dataset to get skymap config = dict(crval=(0, 0), crpix=(180, 90), cdelt=(-1, 1), shape=(180, 360)) dataset = make_example_dataset(data='simulated', config=config) wcs = dataset.wcs # remove sources dataset.image.data = np.zeros_like(dataset.image.data) # define 2 sky circles circle1 = CircleSkyRegion( center=SkyCoord(20, 0, unit='deg', frame='galactic'), radius=Angle('30 deg')) circle2 = CircleSkyRegion( center=SkyCoord(50, 45, unit='deg', frame='galactic'), radius=Angle('30 deg')) # define skycoords lon = np.arange(-180, 181, 10) lat = np.arange(-90, 91, 10) coords = np.array(np.meshgrid(lon, lat)).T.reshape(-1, 2) skycoords = SkyCoord(coords, unit='deg', frame='galactic') # get events in AND and XOR compound_and = circle1 & circle2 compound_xor = circle1 ^ circle2 mask_and = compound_and.contains(skycoords, wcs) skycoords_and = skycoords[mask_and] mask_xor = compound_xor.contains(skycoords, wcs) skycoords_xor = skycoords[mask_xor] # plot fig = plt.figure() ax = fig.add_axes([0.15, 0.1, 0.8, 0.8], projection=wcs, aspect='equal') ax.scatter(skycoords.l.value, skycoords.b.value, label='all', transform=ax.get_transform('galactic')) ax.scatter(skycoords_xor.l.value, skycoords_xor.b.value, color='orange', label='xor', transform=ax.get_transform('galactic')) ax.scatter(skycoords_and.l.value, skycoords_and.b.value, color='magenta', label='and', transform=ax.get_transform('galactic')) circle1.to_pixel(wcs=wcs).plot(ax=ax, edgecolor='green', facecolor='none', alpha=0.8, lw=3) circle2.to_pixel(wcs=wcs).plot(ax=ax, edgecolor='red', facecolor='none', alpha=0.8, lw=3) ax.legend(loc='lower right') ax.set_xlim(-0.5, dataset.config['shape'][1] - 0.5) ax.set_ylim(-0.5, dataset.config['shape'][0] - 0.5) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/docs/conf.py0000644000175100001770000001570614525470416014704 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst # # Documentation build configuration file. # # This file is execfile()d with the current directory set to its # containing dir. # # Note that not all possible configuration values are present in this # file. # # All configuration values have a default. Some values are defined in # the global Astropy configuration which is loaded here before anything # else. See astropy.sphinx.conf for which values are set there. import os import sys from datetime import datetime, timezone from pathlib import Path if sys.version_info < (3, 11): import tomli as tomllib else: import tomllib try: from sphinx_astropy.conf.v1 import * # noqa: F403 from sphinx_astropy.conf.v1 import rst_epilog except ImportError: print('ERROR: the documentation requires the sphinx-astropy package to ' 'be installed') sys.exit(1) # Get configuration information from pyproject.toml with (Path(__file__).parents[1] / 'pyproject.toml').open('rb') as fh: conf = tomllib.load(fh) project_meta = conf['project'] # -- General configuration ---------------------------------------------------- # By default, highlight as Python 3. highlight_language = 'python3' # If your documentation needs a minimal Sphinx version, state it here. needs_sphinx = '3.0' # Extend astropy intersphinx_mapping with packages we use here intersphinx_mapping['photutils'] = ('https://photutils.readthedocs.io/en/stable/', None) # noqa: F405 # intersphinx_mapping['shapely'] = ('https://shapely.readthedocs.io/en/stable/', None) # Exclude astropy intersphinx_mapping for unused packages del intersphinx_mapping['scipy'] # noqa: F405 del intersphinx_mapping['h5py'] # noqa: F405 # List of patterns, relative to source directory, that match files and # directories to ignore when looking for source files. # exclude_patterns.append('_templates') plot_formats = ['png', 'hires.png', 'pdf', 'svg'] # This is added to the end of RST files - a good place to put # substitutions to be used globally. with open('common_links.txt') as fh: rst_epilog += fh.read() # -- Project information ------------------------------------------------------ project = project_meta['name'] author = project_meta['authors'][0]['name'] copyright = f'2015-{datetime.now(tz=timezone.utc).year}, {author}' # The version info for the project you're documenting, acts as # replacement for |version| and |release|, also used in various other # places throughout the built documents. __import__(project) package = sys.modules[project] # The short X.Y version. version = package.__version__.split('-', 1)[0] # The full version, including alpha/beta/rc tags. release = package.__version__ # -- Options for HTML output -------------------------------------------------- # The global astropy configuration uses a custom theme, # 'bootstrap-astropy', which is installed along with astropy. A # different theme can be used or the options for this theme can be # modified by overriding some of the variables set in the global # configuration. The variables set in the global configuration are # listed below, commented out. # Add any paths that contain custom themes here, relative to this # directory. # html_theme_path = [] # The theme to use for HTML and HTML Help pages. See the documentation # for a list of builtin themes. To override the custom theme, set this # to the name of a builtin theme or the name of a custom theme in # html_theme_path. # html_theme = None # Customized theme options html_theme_options = { 'logotext1': 'regions', # white, semi-bold 'logotext2': '', # orange, light 'logotext3': ':docs' # white, light } # Custom sidebar templates, maps document names to template names. # html_sidebars = {} # The name of an image file (relative to this directory) to place at the # top of the sidebar. # html_logo = '' # The name of an image file (within the static path) to use as favicon # of the docs. This file should be a Windows icon file (.ico) being # 16x16 or 32x32 pixels large. # html_favicon = '' # A "Last built" timestamp is inserted at every page bottom, using the # given strftime format. Set to '' to omit this timestamp. # html_last_updated_fmt = '%d %b %Y' # The name for this set of Sphinx documents. If None, it defaults to # " v". html_title = f'{project} {release}' # Output file base name for HTML help builder. htmlhelp_basename = project + 'doc' # Static files to copy after template files # html_static_path = ['_static'] # html_style = 'regions.css' # -- Options for LaTeX output ------------------------------------------------- # Grouping the document tree into LaTeX files. List of tuples (source # start file, target name, title, author, documentclass [howto/manual]). latex_documents = [('index', project + '.tex', project + ' Documentation', author, 'manual')] # latex_logo = '_static/regions_banner.pdf' # -- Options for manual page output ------------------------------------------- # One entry per manual page. List of tuples (source start file, name, # description, authors, manual section). man_pages = [('index', project.lower(), project + ' Documentation', [author], 1)] # -- Resolving issue number to links in changelog ----------------------------- github_project = conf['tool']['build-sphinx']['github_project'] github_issues_url = f'https://github.com/{github_project}/issues/' # -- Turn on nitpicky mode for sphinx (to warn about references not found) ---- nitpicky = True nitpick_ignore = [] # Some warnings are impossible to suppress, and you can list specific # references that should be ignored in a nitpick-exceptions file which # should be inside the docs/ directory. The format of the file should be: # # # # for example: # # py:class astropy.io.votable.tree.Element # py:class astropy.io.votable.tree.SimpleElement # py:class astropy.io.votable.tree.SimpleElementWithContent # # Uncomment the following lines to enable the exceptions: nitpick_filename = 'nitpick-exceptions.txt' if os.path.isfile(nitpick_filename): for line in open(nitpick_filename): if line.strip() == '' or line.startswith('#'): continue dtype, target = line.split(None, 1) target = target.strip() nitpick_ignore.append((dtype, target)) # -- Options for linkcheck output --------------------------------------------- linkcheck_retry = 5 linkcheck_ignore = ['http://data.astropy.org', r'https://github\.com/astropy/regions/(?:issues|pull)/\d+'] linkcheck_timeout = 180 # -- Matplotlib plot defaults ------------------------------------------------- plot_rcparams = {'savefig.bbox': 'tight', 'savefig.facecolor': 'none', 'axes.formatter.useoffset': False, 'xtick.labelsize': 9, 'ytick.labelsize': 9, 'axes.labelsize': 11, 'figure.titlesize': 11, 'figure.subplot.wspace': 0.23, 'figure.subplot.hspace': 0.23} plot_apply_rcparams = True ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/docs/contains.rst0000644000175100001770000000373114525470416015750 0ustar00runnerdockerChecking for Points Inside Regions ================================== Let's start by defining both a sky and pixel region:: >>> from astropy.coordinates import Angle, SkyCoord >>> from regions import CircleSkyRegion, PixCoord, CirclePixelRegion >>> sky_center = SkyCoord(42, 43, unit='deg') >>> sky_radius = Angle(25, 'deg') >>> sky_region = CircleSkyRegion(sky_center, sky_radius) >>> print(sky_region) Region: CircleSkyRegion center: radius: 25.0 deg >>> pixel_center = PixCoord(x=42, y=43) >>> pixel_radius = 42 >>> pixel_region = CirclePixelRegion(pixel_center, pixel_radius) >>> print(pixel_region) Region: CirclePixelRegion center: PixCoord(x=42, y=43) radius: 42 Let's also define a WCS object using our example dataset:: >>> from regions import make_example_dataset >>> dataset = make_example_dataset(data='simulated') >>> wcs = dataset.wcs To test if a given point is inside or outside the region, the Python ``in`` operator can be called:: >>> from regions import PixCoord >>> PixCoord(55, 40) in pixel_region True >>> PixCoord(55, 200) in pixel_region False The ``in`` operator works only for scalar coordinates and pixel regions. If you try to use ``in`` for non-scalar coordinates, you'll get a `ValueError`:: >>> pixcoord = PixCoord([50, 50], [10, 60]) >>> pixcoord in pixel_region Traceback (most recent call last): ... ValueError: coord must be scalar. coord=PixCoord(x=[50 50], y=[10 60]) If you have arrays of coordinates, use the `regions.SkyRegion.contains` or `regions.PixelRegion.contains` methods:: >>> pixcoords = PixCoord.from_sky(sky_center, wcs) >>> pixel_region.contains(pixcoords) True Note that `regions.SkyRegion.contains` requires a WCS to be passed:: >>> skycoord = SkyCoord([50, 50], [10, 60], unit='deg') >>> sky_region.contains(skycoord, wcs) array([False, True]) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/docs/contributing.rst0000644000175100001770000000231314525470416016634 0ustar00runnerdockerReporting Issues and Contributing ================================= Reporting Issues ---------------- If you have found a bug, please report it by creating a new issue on the `Regions GitHub issue tracker `_. That requires creating a `free GitHub account `_ if you do not have one. Please include a minimal example that demonstrates the issue and will allow the developers to reproduce and fix the problem. You may be also asked to provide information about your operating system and a full Python stack trace. The developers will walk you through obtaining a stack trace if it is necessary. Contributing ------------ Like the `Astropy`_ project, this package is made both by and for its users. We accept contributions at all levels, spanning the gamut from fixing a typo in the documentation to developing a major new feature. We welcome contributors who will abide by the `Python Software Foundation Code of Conduct `_. This package follows the same workflow and coding guidelines as `Astropy`_. Please read the `Astropy Development documentation `_ to get started. ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/docs/ds9_io.rst0000644000175100001770000000455114525470416015321 0ustar00runnerdocker DS9 Region File Format Limitations ================================== Region Shapes ------------- The following DS9 regions shapes do not have corresponding `~regions.Region` classes and therefore are not supported: * panda, epanda, and bpanda * vector * ruler * compass * projection Coordinate Frames ----------------- * `~regions.Region` objects represent abstract shapes that are not tied to any particular image or WCS transformation. Therefore, the following DS9 coordinate frames are not supported: * physical * detector * linear * amplifier * tile * wcs and wcs0 * wcs[a-z] If you have a DS9 region file that uses one of these coordinate frames, you can load it into DS9 with its corresponding image/WCS and then save the region with a coordinate frame supported by this package (e.g., image, ICRS, FK5, etc.). * A coordinate frame must be specified in the DS9 region file. This package does not assume a default coordinate frame. * DS9 regions with mixed coordinate systems within a region specifier are not supported. For example, a region file with an ``image`` coordinate frame must not have angular sizes, e.g., ``image; circle(650, 932, 3')`` is not supported. Other Limitations ----------------- * Reading and then writing a DS9 region file will not produce an identical file to the original, but the encoded regions are identical. Therefore, it will produce identical `~regions.Region` objects when read back in again. In other words, read/write/read (or parse/serialize/parse) will exactly roundtrip `~regions.Region` objects. * DS9 composite regions are parsed into separate, independent `~regions.Region` objects. Plotting Differences -------------------- * The point symbol size must be a integer (matplotlib limitation). * Point symbols may not have dashed lines (matplotlib limitation). * Point symbols can be plotted with filled colors, which DS9 does not support. Because of this, DS9 serializations will ignore the ``fill=1`` metadata. * Annulus regions can be plotted with filled colors, which DS9 does not support. Because of this, DS9 serializations will ignore the ``fill=1`` metadata for annulus regions (annulus, ellipse, box). * Text labels are plotted only for `~regions.TextPixelRegion` objects. For other region objects, the text labels are stored in the region metadata. ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/docs/fits_io.rst0000644000175100001770000000565114525470416015571 0ustar00runnerdocker FITS Region File Format Limitations =================================== Region Shapes ------------- * FITS regions are specified in pixel units, thus a `~regions.SkyRegion` cannot be serialized to the FITS region format. Regions are always parsed and serialized as `~regions.PixelRegion` objects when using the FITS region format. * When reading a ``elliptannulus``, the first ``ROTANG`` will be used for both the inner and outer ellipse. The second ``ROTANG`` will be ignored. In other words, you cannot have an elliptical annulus where the inner and outer ellipse have different rotation angles. * Shapes where the value in the SHAPE column is preceded by an exclamation mark (e.g., ``!circle``) will be read in as a `~regions.PixelRegion` object and have ``include = 0`` in their ``meta`` dictionary. When such objects are serialized, their shape will be prepended by ``!``. * The FITS ``box``, ``rotbox``, ``rectangle``, and ``rotrectangle`` shapes will all be parsed as a `~regions.RectanglePixelRegion`. In turn, `~regions.RectanglePixelRegion` is always serialized as a ``rotbox`` shape. * The following `~regions.PixelRegion` classes do not have corresponding FITS shapes and therefore are not supported (a warning will be raised): * `~regions.RectangleAnnulusPixelRegion` * `~regions.LinePixelRegion` * `~regions.TextPixelRegion` * `~regions.CompoundPixelRegion` * FITS regions are always parsed and serialized into separate regions. Shapes that have the ``COMPONENT`` column will have that value stored in the `~regions.PixelRegion` ``meta`` dictionary with the ``component`` key. Such regions will include the ``COMPONENT`` column when serialized. * FITS parsing and serialization use only the ``include`` and ``component`` metadata and no visual metadata. Coordinate Frames ----------------- * `~regions.Region` objects represent abstract shapes that are not tied to any particular image or WCS transformation. Therefore, any WCS information in the FITS region file header will not be read. Regions are always parsed and serialized as `~regions.PixelRegion` objects when using the FITS region format. However, if desired you can use the WCS information in the FITS region file to convert a `~regions.PixelRegion` object to a `~regions.SkyRegion` object, e.g.,: .. doctest-skip:: >>> from astropy.io import fits >>> from astropy.wcs import WCS >>> header = fits.getheader('my_region.fits', 1) >>> wcs = WCS(header, keysel=('image', 'binary', 'pixel')) >>> sky_region = pix_region.to_sky(wcs) Other Limitations ----------------- * Reading and then writing a FITS region file will not produce an identical file to the original, but the encoded regions are identical. Therefore, it will produce identical `~regions.Region` objects when read back in again. In other words, read/write/read (or parse/serialize/parse) will exactly roundtrip `~regions.Region` objects. ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/docs/getting_started.rst0000644000175100001770000001515214525470416017321 0ustar00runnerdocker.. include:: references.txt .. _getting_started: Getting Started =============== Introduction ------------ The Regions package provides classes to represent: * Regions defined using pixel coordinates (e.g., `~regions.CirclePixelRegion`) * Regions defined using celestial coordinates, but still in an Euclidean geometry (e.g., `~regions.CircleSkyRegion`) To transform between sky and pixel regions, a `world coordinate system `_ object (e.g., `astropy.wcs.WCS`) is needed. Regions also provides a unified interface for reading, writing, parsing, and serializing regions data in different formats, including the `DS9 Region Format `_, `CRTF (CASA Region Text Format) `_, and `FITS Region Binary Table `_ format. .. _getting_started-coord: Coordinates ----------- Pixel Coordinates ~~~~~~~~~~~~~~~~~ :class:`~regions.PixCoord` objects are used to represent pixel coordinates. Pixel coordinates are defined with a scalar or an array of ``x`` and ``y`` Cartesian coordinates: .. code-block:: python >>> from regions import PixCoord >>> pixcoord = PixCoord(x=42, y=43) >>> pixcoord PixCoord(x=42, y=43) >>> pixcoord.x 42 >>> pixcoord.y 43 >>> pixcoord.xy (42, 43) `~regions.PixCoord` objects can also represent arrays of pixel coordinates. These work in the same way as single-value coordinates, but they store multiple coordinates in a single object. Let's create a 1D array of pixel coordinates: .. code-block:: python >>> pixcoord = PixCoord(x=[0, 1], y=[2, 3]) >>> pixcoord PixCoord(x=[0 1], y=[2 3]) >>> pixcoord.x array([0, 1]) >>> pixcoord.y array([2, 3]) >>> pixcoord.xy (array([0, 1]), array([2, 3])) Let's now create a 2D array of pixel coordinates: .. code-block:: python >>> pixcoord = PixCoord(x=[[1, 2, 3], [4, 5, 6]], ... y=[[11, 12, 13], [14, 15, 16]]) >>> pixcoord PixCoord(x=[[1 2 3] [4 5 6]], y=[[11 12 13] [14 15 16]]) Sky Coordinates ~~~~~~~~~~~~~~~ :class:`~astropy.coordinates.SkyCoord` objects are used to represent sky coordinates. `~astropy.coordinates.SkyCoord` is a very powerful class that provides a flexible interface for celestial coordinate representation, manipulation, and transformation between systems. See the extensive :ref:`astropy-coordinates` documentation for more details. Let's create a single sky coordinate: .. code-block:: python >>> from astropy.coordinates import SkyCoord >>> skycoord = SkyCoord(42, 43, unit='deg', frame='galactic') >>> skycoord Sky coordinates also support array coordinates. These work in the same way as single-value coordinates, but they store multiple coordinates in a single object: .. code-block:: python >>> skycoord = SkyCoord(ra=[10, 11, 12], dec=[41, 42, 43], unit='deg') >>> skycoord To represent angles both on the sky and in an image, `~astropy.coordinates.Angle` objects or `~astropy.units.Quantity` objects with angular units can be used. Pixel/Sky Coordinate Transformations ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ To transform between pixel and sky coordinates, a `world coordinate system `_ object (e.g., `astropy.wcs.WCS`) is needed. Let's start by creating a WCS object: .. code-block:: python >>> from regions import make_example_dataset >>> dataset = make_example_dataset(data='simulated') >>> wcs = dataset.wcs Now let's use this WCS to convert between sky and pixel coordinates: .. code-block:: python >>> skycoord = SkyCoord(42, 43, unit='deg', frame='galactic') >>> pixcoord = PixCoord.from_sky(skycoord=skycoord, wcs=wcs) >>> pixcoord # doctest: +FLOAT_CMP PixCoord(x=146.2575703393558, y=131.5998051082584) >>> pixcoord.to_sky(wcs=wcs) Pixel Regions ------------- Pixel regions are regions that are defined using pixel coordinates and sizes in pixels. The regions package provides a set of "pixel-based" regions classes, for example, `~regions.CirclePixelRegion`: .. code-block:: python >>> from regions import PixCoord, CirclePixelRegion >>> center = PixCoord(x=42, y=43) >>> radius = 4.2 >>> region = CirclePixelRegion(center, radius) You can print the region to get some information about its properties: .. code-block:: python >>> print(region) Region: CirclePixelRegion center: PixCoord(x=42, y=43) radius: 4.2 You can access its properties via attributes: .. code-block:: python >>> region.center PixCoord(x=42, y=43) >>> region.radius 4.2 See the :ref:`shapes` documentation for the complete list of pixel-based regions and to learn more about :class:`~regions.Region` objects and their capabilities. Sky Regions ----------- Sky regions are regions that are defined using celestial coordinates. Please note they are **not** defined as regions on the celestial sphere, but rather are meant to represent shapes on an image. They simply use sky coordinates instead of pixel coordinates to define their position. The remaining shape parameters are converted to pixels using the pixel scale of the image. Let's create a sky region: .. code-block:: python >>> from astropy.coordinates import Angle, SkyCoord >>> from regions import CircleSkyRegion >>> center = SkyCoord(42, 43, unit='deg') >>> radius = Angle(3, 'deg') >>> region = CircleSkyRegion(center, radius) Alternatively, one can define the radius using a `~astropy.units.Quantity` object with angular units: .. code-block:: python >>> import astropy.units as u >>> from regions import CircleSkyRegion >>> center = SkyCoord(42, 43, unit='deg') >>> radius = 3.0 * u.deg >>> region = CircleSkyRegion(center, radius) You can print the region to get some information about its properties: .. code-block:: python >>> print(region) Region: CircleSkyRegion center: radius: 3.0 deg You can access its properties via attributes: .. code-block:: python >>> region.center >>> region.radius See the :ref:`shapes` documentation for the complete list of pixel-based regions and to learn more about :class:`~regions.Region` objects and their capabilities. ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/docs/index.rst0000644000175100001770000000343514525470416015242 0ustar00runnerdocker.. include:: references.txt ############### Astropy Regions ############### **regions** is an in-development `coordinated package`_ of `Astropy`_ for region handling. To get an overview of available features, see :ref:`getting_started`. The eventual goal is to merge this package into the Astropy core package. * Code : `GitHub repository`_ * Contributors : https://github.com/astropy/regions/graphs/contributors .. warning:: This ``regions`` package is still in an early stage of development. It is not yet feature complete but API should be stable enough by now. That said, please have a look and try to use it for your applications. Feedback and contributions are welcome! Getting Started =============== .. toctree:: :maxdepth: 1 install getting_started contributing license changelog User Documentation ================== .. toctree:: :maxdepth: 1 shapes metadata contains compound masks plotting region_io shapely api Example ======= The following example shows how to read a DS9 region file and plot the regions on an image using Matplotlib. .. plot:: from astropy.io import fits from astropy.utils.data import get_pkg_data_filename from matplotlib import pyplot as plt from regions import Regions image_file = get_pkg_data_filename('tutorials/FITS-images/HorseHead.fits') image_data = fits.getdata(image_file, ext=0, memmap=False) fig, ax = plt.subplots(figsize=(8, 8)) ax.imshow(image_data, cmap='gray') #ax.set_ylim([-0.5, 892.5]) region_file = get_pkg_data_filename('data/plot_image.reg', package='regions.io.ds9.tests') regions = Regions.read(region_file, format='ds9') for i, region in enumerate(regions): region.plot(ax=ax) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/docs/install.rst0000644000175100001770000001050014525470416015570 0ustar00runnerdocker************ Installation ************ Requirements ============ Regions has the following strict requirements: * `Python `_ 3.9 or later * `NumPy `_ 1.22 or later * `Astropy`_ 5.0 or later Region also optionally depends on other packages for some features: * `Matplotlib `_ 3.5 or later Regions depends on `pytest-astropy `_ (0.10 or later) and `pytest-arraydiff `_ (0.3 or later) to run the test suite. Installing the latest released version ====================================== The latest released (stable) version of Regions can be installed either with `pip`_ or `conda`_. Using pip --------- To install Regions with `pip`_, run:: pip install regions If you want to install Regions along with all of its optional dependencies, you can instead do:: pip install "regions[all]" In most cases, this will install a pre-compiled version (called a wheel) of Regions, but if you are using a very recent version of Python or if you are installing Regions on a platform that is not common, Regions will be installed from a source file. In this case you will need a C compiler (e.g., ``gcc`` or ``clang``) to be installed for the installation to succeed (see :ref:`building_source` prerequisites). If you get a ``PermissionError``, this means that you do not have the required administrative access to install new packages to your Python installation. In this case you may consider using the ``--user`` option to install the package into your home directory. You can read more about how to do this in the `pip documentation `_. Do **not** install Regions or other third-party packages using ``sudo`` unless you are fully aware of the risks. Using conda ----------- Regions can be installed with `conda`_ if you have installed `Anaconda `_ or `Miniconda `_. To install Regions using the `conda-forge Anaconda channel `_, run:: conda install -c conda-forge regions .. _building_source: Building from Source ==================== Prerequisites ------------- You will need a compiler suite and the development headers for Python and Numpy in order to build Regions from the source distribution. You do not need to install any other specific build dependencies (such as Cython) since these will be automatically installed into a temporary build environment by `pip`_. On Linux, using the package manager for your distribution will usually be the easiest route. On MacOS X you will need the `XCode`_ command-line tools, which can be installed using:: xcode-select --install Follow the onscreen instructions to install the command-line tools required. Note that you do not need to install the full `XCode`_ distribution (assuming you are using MacOS X 10.9 or later). Installing the development version ---------------------------------- Regions is being developed on `GitHub`_. The latest development version of the Regions source code can be retrieved using git:: git clone https://github.com/astropy/regions.git Then to build and install Regions (with all of its optional dependencies), run:: cd regions pip install ".[all]" If you wish to install the package in "editable" mode, instead include the "-e" option:: pip install -e ".[all]" Alternatively, `pip`_ can be used to retrieve, build, and install the latest development version from `GitHub`_:: pip install "git+https://github.com/astropy/regions.git#egg=regions[all]" Testing an installed Regions ============================ The easiest way to test your installed version of Regions is running correctly is to use the :func:`regions.test` function: .. doctest-skip:: >>> import regions >>> regions.test() Note that this may not work if you start Python from within the Regions source distribution directory. The tests should run and report any failures, which you can report to the `Regions issue tracker `_. .. _pip: https://pip.pypa.io/en/latest/ .. _conda: https://docs.conda.io/en/latest/ .. _GitHub: https://github.com/astropy/regions .. _Xcode: https://developer.apple.com/xcode/ ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/docs/license.rst0000644000175100001770000000016614525470416015553 0ustar00runnerdocker.. _regions_license: License ======= Regions is licensed under a 3-clause BSD license: .. include:: ../LICENSE.rst ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/docs/make.bat0000644000175100001770000001070514525470416015004 0ustar00runnerdocker@ECHO OFF REM Command file for Sphinx documentation if "%SPHINXBUILD%" == "" ( set SPHINXBUILD=sphinx-build ) set BUILDDIR=_build set ALLSPHINXOPTS=-d %BUILDDIR%/doctrees %SPHINXOPTS% . if NOT "%PAPER%" == "" ( set ALLSPHINXOPTS=-D latex_paper_size=%PAPER% %ALLSPHINXOPTS% ) if "%1" == "" goto help if "%1" == "help" ( :help echo.Please use `make ^` where ^ is one of echo. html to make standalone HTML files echo. dirhtml to make HTML files named index.html in directories echo. singlehtml to make a single large HTML file echo. pickle to make pickle files echo. json to make JSON files echo. htmlhelp to make HTML files and a HTML help project echo. qthelp to make HTML files and a qthelp project echo. devhelp to make HTML files and a Devhelp project echo. epub to make an epub echo. latex to make LaTeX files, you can set PAPER=a4 or PAPER=letter echo. text to make text files echo. man to make manual pages echo. changes to make an overview over all changed/added/deprecated items echo. linkcheck to check all external links for integrity echo. doctest to run all doctests embedded in the documentation if enabled goto end ) if "%1" == "clean" ( for /d %%i in (%BUILDDIR%\*) do rmdir /q /s %%i del /q /s %BUILDDIR%\* del /q /s api del /q /s generated goto end ) if "%1" == "html" ( %SPHINXBUILD% -b html %ALLSPHINXOPTS% %BUILDDIR%/html if errorlevel 1 exit /b 1 echo. echo.Build finished. The HTML pages are in %BUILDDIR%/html. goto end ) if "%1" == "dirhtml" ( %SPHINXBUILD% -b dirhtml %ALLSPHINXOPTS% %BUILDDIR%/dirhtml if errorlevel 1 exit /b 1 echo. echo.Build finished. The HTML pages are in %BUILDDIR%/dirhtml. goto end ) if "%1" == "singlehtml" ( %SPHINXBUILD% -b singlehtml %ALLSPHINXOPTS% %BUILDDIR%/singlehtml if errorlevel 1 exit /b 1 echo. echo.Build finished. The HTML pages are in %BUILDDIR%/singlehtml. goto end ) if "%1" == "pickle" ( %SPHINXBUILD% -b pickle %ALLSPHINXOPTS% %BUILDDIR%/pickle if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can process the pickle files. goto end ) if "%1" == "json" ( %SPHINXBUILD% -b json %ALLSPHINXOPTS% %BUILDDIR%/json if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can process the JSON files. goto end ) if "%1" == "htmlhelp" ( %SPHINXBUILD% -b htmlhelp %ALLSPHINXOPTS% %BUILDDIR%/htmlhelp if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can run HTML Help Workshop with the ^ .hhp project file in %BUILDDIR%/htmlhelp. goto end ) if "%1" == "qthelp" ( %SPHINXBUILD% -b qthelp %ALLSPHINXOPTS% %BUILDDIR%/qthelp if errorlevel 1 exit /b 1 echo. echo.Build finished; now you can run "qcollectiongenerator" with the ^ .qhcp project file in %BUILDDIR%/qthelp, like this: echo.^> qcollectiongenerator %BUILDDIR%\qthelp\Astropy.qhcp echo.To view the help file: echo.^> assistant -collectionFile %BUILDDIR%\qthelp\Astropy.ghc goto end ) if "%1" == "devhelp" ( %SPHINXBUILD% -b devhelp %ALLSPHINXOPTS% %BUILDDIR%/devhelp if errorlevel 1 exit /b 1 echo. echo.Build finished. goto end ) if "%1" == "epub" ( %SPHINXBUILD% -b epub %ALLSPHINXOPTS% %BUILDDIR%/epub if errorlevel 1 exit /b 1 echo. echo.Build finished. The epub file is in %BUILDDIR%/epub. goto end ) if "%1" == "latex" ( %SPHINXBUILD% -b latex %ALLSPHINXOPTS% %BUILDDIR%/latex if errorlevel 1 exit /b 1 echo. echo.Build finished; the LaTeX files are in %BUILDDIR%/latex. goto end ) if "%1" == "text" ( %SPHINXBUILD% -b text %ALLSPHINXOPTS% %BUILDDIR%/text if errorlevel 1 exit /b 1 echo. echo.Build finished. The text files are in %BUILDDIR%/text. goto end ) if "%1" == "man" ( %SPHINXBUILD% -b man %ALLSPHINXOPTS% %BUILDDIR%/man if errorlevel 1 exit /b 1 echo. echo.Build finished. The manual pages are in %BUILDDIR%/man. goto end ) if "%1" == "changes" ( %SPHINXBUILD% -b changes %ALLSPHINXOPTS% %BUILDDIR%/changes if errorlevel 1 exit /b 1 echo. echo.The overview file is in %BUILDDIR%/changes. goto end ) if "%1" == "linkcheck" ( %SPHINXBUILD% -b linkcheck %ALLSPHINXOPTS% %BUILDDIR%/linkcheck if errorlevel 1 exit /b 1 echo. echo.Link check complete; look for any errors in the above output ^ or in %BUILDDIR%/linkcheck/output.txt. goto end ) if "%1" == "doctest" ( %SPHINXBUILD% -b doctest %ALLSPHINXOPTS% %BUILDDIR%/doctest if errorlevel 1 exit /b 1 echo. echo.Testing of doctests in the sources finished, look at the ^ results in %BUILDDIR%/doctest/output.txt. goto end ) :end ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/docs/masks.rst0000644000175100001770000002724414525470416015255 0ustar00runnerdocker .. _overlap-masks: Computing Overlap Masks ======================= Defining a region mask within its bounding box ---------------------------------------------- For aperture photometry, a common operation is to compute, for a given image and region, a mask or array of pixel indices defining which pixels (in the whole image or a minimal rectangular bounding box) are inside and outside the region. All :class:`~regions.PixelRegion` objects have a :meth:`~regions.PixelRegion.to_mask` method that returns a :class:`~regions.RegionMask` object that contains information about whether pixels are inside the region, and can be used to mask data arrays:: >>> from regions.core import PixCoord >>> from regions.shapes.circle import CirclePixelRegion >>> center = PixCoord(4., 5.) >>> reg = CirclePixelRegion(center, 2.3411) >>> mask = reg.to_mask() >>> mask.data array([[0., 1., 1., 1., 0.], [1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.], [1., 1., 1., 1., 1.], [0., 1., 1., 1., 0.]]) The mask data contains floating point that are between 0 (no overlap) and 1 (full overlap). By default, this is determined by looking only at the central position in each pixel, and:: >>> reg.to_mask() # doctest: +IGNORE_OUTPUT is equivalent to:: >>> reg.to_mask(mode='center') # doctest: +IGNORE_OUTPUT The other mask modes that are available are: * ``mode='exact'``: the overlap is determined using the exact geometrical overlap between pixels and the region. This is slower than using the central position, but allows partial overlap to be treated correctly. The mask data values will be between 0 and 1 for partial-pixel overlap. * ``mode='subpixels'``: the overlap is determined by sub-sampling the pixel using a grid of sub-pixels. The number of sub-pixels to use in this mode should be given using the ``subpixels`` argument. The mask data values will be between 0 and 1 for partial-pixel overlap. Here are what the region masks produced by different modes look like: .. plot:: :include-source: import matplotlib.pyplot as plt from regions.core import PixCoord from regions.shapes.circle import CirclePixelRegion center = PixCoord(26.6, 27.2) reg = CirclePixelRegion(center, 5.2) plt.figure(figsize=(6, 6)) mask1 = reg.to_mask(mode='center') plt.subplot(2, 2, 1) plt.title("mode='center'", size=9) plt.imshow(mask1.data, cmap=plt.cm.viridis, interpolation='nearest', origin='lower') mask2 = reg.to_mask(mode='exact') plt.subplot(2, 2, 2) plt.title("mode='exact'", size=9) plt.imshow(mask2.data, cmap=plt.cm.viridis, interpolation='nearest', origin='lower') mask3 = reg.to_mask(mode='subpixels', subpixels=3) plt.subplot(2, 2, 3) plt.title("mode='subpixels', subpixels=3", size=9) plt.imshow(mask3.data, cmap=plt.cm.viridis, interpolation='nearest', origin='lower') mask4 = reg.to_mask(mode='subpixels', subpixels=20) plt.subplot(2, 2, 4) plt.title("mode='subpixels', subpixels=20", size=9) plt.imshow(mask4.data, cmap=plt.cm.viridis, interpolation='nearest', origin='lower') As we've seen above, the :class:`~regions.RegionMask` object has a ``data`` attribute that contains a Numpy array with the mask values. However, if you have, for example, a small circular region with a radius of 3 pixels at a pixel position of (1000, 1000), it would be inefficient to store a large mask array that has a size to cover this position (most of the mask values would be zero). Instead, we store the mask using the minimal array that contains the region mask along with a ``bbox`` attribute that is a :class:`~regions.RegionBoundingBox` object used to indicate where the mask should be applied in an image. Defining a region mask within an image -------------------------------------- :class:`~regions.RegionMask` objects also have a number of methods to make it easy to use the masks with data. The :meth:`~regions.RegionMask.to_image` method can be used to obtain an image of the mask in a 2D array of the given shape. This places the mask in the correct place in the image and deals properly with boundary effects. For this example, let's place the mask in an image with shape (50, 50): .. plot:: :include-source: import matplotlib.pyplot as plt from regions.core import PixCoord from regions.shapes.circle import CirclePixelRegion center = PixCoord(26.6, 27.2) reg = CirclePixelRegion(center, 5.2) mask = reg.to_mask(mode='exact') plt.figure(figsize=(4, 4)) shape = (50, 50) plt.imshow(mask.to_image(shape), cmap=plt.cm.viridis, interpolation='nearest', origin='lower') Making image cutouts and multiplying the region mask ---------------------------------------------------- The :meth:`~regions.RegionMask.cutout` method can be used to create a cutout from the input data over the mask bounding box, and the :meth:`~regions.RegionMask.multiply` method can be used to multiply the aperture mask with the input data to create a mask-weighted data cutout. All of these methods properly handle the cases of partial or no overlap of the aperture mask with the data. These masks can be used, for example, as the building blocks for photometry, which we demonstrate with a simple example. We start off by getting an example image: .. doctest-remote-data:: >>> from astropy.io import fits >>> from astropy.utils.data import get_pkg_data_filename >>> filename = get_pkg_data_filename('photometry/M6707HH.fits') # doctest: +IGNORE_OUTPUT >>> hdulist = fits.open(filename) >>> hdu = hdulist[0] We then define a circular aperture region:: >>> from regions.core import PixCoord >>> from regions.shapes.circle import CirclePixelRegion >>> center = PixCoord(158.5, 1053.5) >>> aperture = CirclePixelRegion(center, 4.) We then convert the aperture to a mask and extract a cutout from the data, as well as a cutout with the data multiplied by the mask: .. doctest-remote-data:: >>> mask = aperture.to_mask(mode='exact') >>> data = mask.cutout(hdu.data) >>> weighted_data = mask.multiply(hdu.data) Note that ``weighted_data`` will have zeros where the mask is zero; it therefore should not be used to compute statistics (see :ref:`Masked Statistics ` below). To get the mask-weighted pixel values as a 1D array, excluding the pixels where the mask is zero, use the :meth:`~regions.RegionMask.get_values` method: .. doctest-remote-data:: >>> weighted_data_1d = mask.get_values(hdu.data) >>> hdulist.close() We can take a look at the results to make sure the source overlaps with the aperture: .. doctest-skip:: >>> import matplotlib.pyplot as plt >>> plt.subplot(1, 3, 1) >>> plt.title("Mask", size=9) >>> plt.imshow(mask.data, cmap=plt.cm.viridis, ... interpolation='nearest', origin='lower', ... extent=mask.bbox.extent) >>> plt.subplot(1, 3, 2) >>> plt.title("Data cutout", size=9) >>> plt.imshow(data, cmap=plt.cm.viridis, ... interpolation='nearest', origin='lower', ... extent=mask.bbox.extent) >>> plt.subplot(1, 3, 3) >>> plt.title("Data cutout multiplied by mask", size=9) >>> plt.imshow(weighted_data, cmap=plt.cm.viridis, ... interpolation='nearest', origin='lower', ... extent=mask.bbox.extent) .. plot:: :context: reset :align: center from astropy.io import fits from astropy.utils.data import get_pkg_data_filename import matplotlib.pyplot as plt from regions.core import PixCoord from regions.shapes.circle import CirclePixelRegion filename = get_pkg_data_filename('photometry/M6707HH.fits') hdulist = fits.open(filename) hdu = hdulist[0] center = PixCoord(158.5, 1053.5) aperture = CirclePixelRegion(center, 4.) mask = aperture.to_mask(mode='exact') data = mask.cutout(hdu.data) weighted_data = mask.multiply(hdu.data) plt.subplot(1, 3, 1) plt.title("Mask", size=9) plt.imshow(mask.data, cmap=plt.cm.viridis, interpolation='nearest', origin='lower', extent=mask.bbox.extent) plt.subplot(1, 3, 2) plt.title("Data cutout", size=9) plt.imshow(data, cmap=plt.cm.viridis, interpolation='nearest', origin='lower', extent=mask.bbox.extent) plt.subplot(1, 3, 3) plt.title("Data cutout multiplied by mask", size=9) plt.imshow(weighted_data, cmap=plt.cm.viridis, interpolation='nearest', origin='lower', extent=mask.bbox.extent) hdulist.close() We can also use the `~regions.RegionMask` ``bbox`` attribute to look at the extent of the mask in the image: .. plot:: :context: :include-source: :align: center from astropy.io import fits from astropy.utils.data import get_pkg_data_filename import matplotlib.pyplot as plt from regions.core import PixCoord from regions.shapes.circle import CirclePixelRegion filename = get_pkg_data_filename('photometry/M6707HH.fits') hdulist = fits.open(filename) hdu = hdulist[0] center = PixCoord(158.5, 1053.5) aperture = CirclePixelRegion(center, 4.) mask = aperture.to_mask(mode='exact') ax = plt.subplot(1, 1, 1) ax.imshow(hdu.data, cmap=plt.cm.viridis, interpolation='nearest', origin='lower') ax.add_artist(mask.bbox.as_artist(facecolor='none', edgecolor='white')) ax.add_artist(aperture.as_artist(facecolor='none', edgecolor='orange')) ax.set_xlim(120, 180) ax.set_ylim(1000, 1059) hdulist.close() .. _masked_statistics: Masked Statistics ````````````````` Finally, we can use the mask and data values to compute weighted statistics: .. doctest-remote-data:: >>> import numpy as np >>> np.average(data, weights=mask) # doctest: +FLOAT_CMP 9364.012674888021 .. _interactive-masks: Interactive Mask Control ------------------------ In the last example we will show how to use a :ref:`Matplotlib selector` widget with a custom ``callback`` function for creating a mask and updating it interactively through the selector. We first create an :class:`~regions.EllipsePixelRegion` and add an ``as_mpl_selector`` property linked to the Matplotlib axes. This can be moved around to position it on different sources, and resized just like its Rectangle counterpart, using the handles of the bounding box. The user-defined callback function here generates a mask from this region and overlays it on the image as an alpha filter (keeping the areas outside shaded). We will use this mask as an aperture as well to calculate integrated and averaged flux, which is updated live in the text field of the plot as well. .. plot:: :context: :include-source: :align: center from astropy import units as u from regions import PixCoord, EllipsePixelRegion hdulist = fits.open(filename) hdu = hdulist[0] plt.clf() ax = plt.subplot(1, 1, 1) im = ax.imshow(hdu.data, cmap=plt.cm.viridis, interpolation='nearest', origin='lower') text = ax.text(122, 1002, '', size='small', color='yellow') ax.set_xlim(120, 180) ax.set_ylim(1000, 1059) def update_sel(region): mask = region.to_mask(mode='subpixels', subpixels=10) im.set_alpha((mask.to_image(hdu.data.shape) + 1) / 2) total = mask.multiply(hdu.data).sum() mean = np.average(hdu.data, weights=mask.to_image(hdu.data.shape)) text.set_text(f'Total: {total:g}\nMean: {mean:g}') ellipse = EllipsePixelRegion(center=PixCoord(x=126, y=1031), width=8, height=4, angle=-0*u.deg, visual={'color': 'yellow'}) selector = ellipse.as_mpl_selector(ax, callback=update_sel) hdulist.close() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/docs/metadata.rst0000644000175100001770000001115114525470416015705 0ustar00runnerdocker.. include:: references.txt Region Metadata =============== A :class:`~regions.Region` object has both ``meta`` and ``visual`` attributes that store the metadata of the region. The :class:`~regions.RegionMeta` and :class:`~regions.RegionVisual` classes handle the general metadata and visual attributes, respectively. Both behave like Python dictionaries. General Metadata ---------------- The :class:`~regions.Region` ``meta`` attribute stores additional metadata about the region such as labels, tags, comments, name, etc. that are used for non-display tasks. It can also store the spectral dimensions of the region. The valid keys in the :class:`~regions.RegionMeta` object are: * ``label``: - CRTF, DS9 (text label for a region) - Ex: meta['label'] = 'this is a circle' * ``tag``: - DS9 (All regions may have zero or more tags associated with it, which may be used for grouping and searching.) - Ex: meta['tags'] = ['{Group 1}', '{Group 2}']} * ``include``: - CRTF, DS9 (Region inclusion) - Possible Values: True, False - Ex: meta['include'] = True * ``frame``: - CRTF (Frequency/Velocity Axis) - Possible values: 'REST', 'LSRK', 'LSRD', 'BARY', 'GEO', 'TOPO', 'GALACTO', 'LGROUP', 'CMB' - Default: image value - Ex: meta['frame'] = 'TOPO' * ``range``: - CRTF (Frequency/Velocity Range) - Possible units: GHz, MHz, kHz, km/s, Hz, channel, chan (=channel) - Default: image range - Format: [min, max] - Ex: meta['range'] = [-320 * u.m/u.sec, -330 * u.m/u.s] * ``veltype``: - CRTF (Velocity Calculation) - Possible values: 'RADIO', 'OPTICAL', 'Z', 'BETA', 'GAMMA' - Default: image value - Ex: meta['veltype'] = 'RADIO' * ``restfreq``: - CRTF (Rest Frequency) - Possible values: `~astropy.units.Quantity` object - Default: image value - Ex: meta['restfreq'] = Quantity("1.42GHz") * ``corr``: - CRTF (Correlational Axis) - Possible values: 'I', 'Q', 'U', 'V', 'RR', 'RL', 'LR', 'LL', 'XX', 'XY', 'YX', 'YY', 'RX', 'RY', 'LX', 'LY', 'XR', 'XL', 'YR', 'YL', 'PP', 'PQ', 'QP', 'QQ', 'RCircular', 'LCircular', 'Linear', 'Ptotal', 'Plinear', 'PFtotal', 'PFlinear', 'Pangle' - Default: all planes present in image - Ex: meta['corr'] = ['X', 'Y'] * ``comment``: - DS9, CRTF (Comment on the region) - Ex: meta['comment'] = 'Any comment for the region' * ``line``: - DS9 (The line region may be rendered with arrows, one at each end. To indicate arrows, use the line property. A '1' indicates an arrow, '0' indicates no arrow.) - Ex: meta['line'] = [1, 1] * ``name`` * ``select`` * ``highlite`` * ``fixed`` * ``edit``: - DS9 (The Edit property specifies if the user is allowed to edit the region via the GUI.) - Ex: meta['edit'] = 1 * ``move``: - DS9 (The Move property specifies if the user is allowed to move the region via the GUI. ) - Ex: meta['move'] = 1 * ``rotate``: - DS9 (The Rotate property specifies if the user is allowed to rotate the region via the GUI. ) - Ex: meta['rotate'] = 1 * ``delete``: - DS9 (The Delete property specifies if the user is allowed to delete the region via the GUI. ) - Ex: meta['delete'] = 1 * ``source`` * ``background`` Visual Metadata --------------- The :class:`~regions.Region` ``visual`` attribute stores visual properties for the region such as color, font style, font size, line width, line style, etc. The visual attributes are metadata meant to be used to visualize regions, especially used by plotting libraries such as `Matplotlib`_ . The valid keys in the `~regions.RegionVisual` class are: * ``color``: CRTF, DS9 (Region, symbol and text color) - Possible values: any color recognized by `Matplotlib`_, including hex values - Default: color=green - Ex: visual['color'] = 'blue' * ``dash``: Render region using dashed lines using current dashlist value. * ``font``: Name of the font. * ``dashlist``: Sets dashed line parameters. This does not render the region in dashed lines. * ``symsize``: Size of the symbol. * ``symthick``: Thickness of the symbol. * ``fontsize``: Size of the font. * ``fontstyle``: Style of the font. * ``usetex``: Boolean value whether the label uses TeX. * ``labelpos``: Position of the label. * ``labeloff``: Label offset. * ``linewidth``: Width of the line. * ``linestyle``: Style of the line. * ``fill``: Boolean value whether the region is filled. * ``line``: The line region may be rendered with arrows, one at each end. To indicate arrows, use the line property. A '1' indicates an arrow, '0' indicates no arrow. * ``symbol``/``point``: CRTF, DS9 (Symbol for which a point region is described) - Ex: meta['symbol'] = 'point marker' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/docs/nitpick-exceptions.txt0000644000175100001770000000020014525470416017745 0ustar00runnerdocker# region.core.metadata # From https://github.com/numpy/numpydoc/issues/275 py:class None. Update D from dict/iterable E and F. ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/docs/plotting.rst0000644000175100001770000000561414525470416015774 0ustar00runnerdockerPlotting Regions with Matplotlib ================================ Some `~regions.PixelRegion` objects have an ``as_artist()`` method that returns an equivalent `matplotlib.patches` object. For example :meth:`regions.CirclePixelRegion.as_artist` returns a `matplotlib.patches.Circle` object. To draw a matplotlib patch object, add it to an `matplotlib.axes.Axes` object. .. plot:: :include-source: from regions import PixCoord, CirclePixelRegion import matplotlib.pyplot as plt region = CirclePixelRegion(PixCoord(x=0.3, y=0.42), radius=0.5) artist = region.as_artist() axes = plt.gca() axes.set_aspect('equal') axes.add_artist(artist) axes.set_xlim([-0.5, 1]) axes.set_ylim([-0.5, 1]) The default keyword arguments for the matplotlib artist depend on the value of the ``default_style`` keyword in the `~regions.RegionVisual` dictionary. This keyword is currently set (to a value of 'ds9') only when reading from DS9 region files. If this keyword is not set or set to 'mpl' or `None`, then the matplotlib defaults will be used, with the exception that fill is turned off for `~matplotlib.patches.Patch` and `~matplotlib.lines.Line2D` artists. The :meth:`regions.PixelRegion.plot` method is a convenience method that combines these two steps (creating a matplotlib patch artist and adding it to an axis). If no axis is passed then it calls ``plt.gca()``. You can shift the origin of the region while plotting by supplying the ``origin`` pixel coordinates to either :meth:`~regions.PixelRegion.plot` or :meth:`~regions.PixelRegion.as_artist`. The :meth:`~regions.PixelRegion.plot` method also takes any keyword argument that the `~matplotlib.patches.Patch` object accepts for those regions represented as patches, or arguments `~matplotlib.lines.Line2D` accepts for point regions. For example: .. plot:: :include-source: import numpy as np import matplotlib.pyplot as plt from regions import PixCoord, CirclePixelRegion fig, ax = plt.subplots() region = CirclePixelRegion(center=PixCoord(x=7, y=5), radius=3) data = np.arange(10 * 15).reshape((10, 15)) ax.imshow(data, cmap='gray', interpolation='nearest', origin='lower') region.plot(ax=ax, color='red', lw=2.0) The documentation for `~regions.RectanglePixelRegion` and `~regions.EllipsePixelRegion` also shows plotting examples. Plotting Sky Regions -------------------- Note that `~regions.SkyRegion` objects do not have an ``as_artist()`` or ``plot()`` method. To plot a `~regions.SkyRegion` object, you will need to convert it to a pixel region (using a WCS object): .. doctest-skip:: >>> from astropy.coordinates import Angle, SkyCoord >>> from regions import CircleSkyRegion >>> sky_center = SkyCoord(42, 43, unit='deg') >>> sky_radius = Angle(25, 'deg') >>> sky_region = CircleSkyRegion(sky_center, sky_radius) >>> pixel_region = sky_region.to_pixel(wcs) >>> pixel_region.plot() ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/docs/references.txt0000644000175100001770000000104014525470416016251 0ustar00runnerdocker.. _pyregion: https://pyregion.readthedocs.io/en/latest/ .. _spherical_geometry: https://spacetelescope.github.io/sphere/spherical_geometry/index.html .. _photutils: https://photutils.readthedocs.io/en/latest/aperture.html .. _matplotlib: https://matplotlib.org/ .. _shapely: https://shapely.readthedocs.io/en/latest/ .. _GitHub repository: https://github.com/astropy/regions .. _Region documentation: https://astropy-regions.readthedocs.io/en/latest/ .. _coordinated package: https://www.astropy.org/affiliated/index.html#coordinated-packages ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/docs/region_io.rst0000644000175100001770000001401614525470416016102 0ustar00runnerdocker.. _regions_io: Reading/Writing Region Files **************************** The regions package provides a unified interface for reading, writing, parsing, and serializing regions data in different standard formats. Regions I/O =========== The `~regions.Regions` class (which represents a list of `~regions.Region` objects) includes four methods, :meth:`~regions.Regions.read`, :meth:`~regions.Regions.write`, :meth:`~regions.Regions.parse`, and :meth:`~regions.Regions.serialize`, that make it possible to read, write, parse, and serialize region files or region data. The :class:`~regions.Regions` class has built-in support for various input and output formats. A full list of the supported formats and is shown in the table below. The ``Suffix`` column indicates the standard filename suffix for a particular format. ============ ============== ======================== Format Suffix Description ============ ============== ======================== crtf .crtf `CASA Region Text Format `_ ds9 .reg, .ds9 `DS9 Region Format `_ fits .fits `FITS Region Binary Table `_ ============ ============== ======================== Use the :meth:`~regions.Regions.get_formats` method to get the registered I/O formats as a :class:`~astropy.table.Table`:: >>> from regions import Regions >>> print(Regions.get_formats()) Format Parse Serialize Read Write Auto-identify ------ ----- --------- ---- ----- ------------- crtf Yes Yes Yes Yes Yes ds9 Yes Yes Yes Yes Yes fits Yes Yes Yes Yes Yes Read ---- To read in a region file, first import the :class:`~regions.Regions` class, then call the :meth:`~regions.Regions.read` method with the name of the file and the file format, e.g.: .. doctest-skip:: >>> from regions import Regions >>> regions = Regions.read('my_regions.reg', format='ds9') It is also possible to load regions directly from the internet using URLs, e.g.: .. doctest-skip:: >>> regions = Regions.read('https://some.domain.edu/my_regions.reg', format='ds9') If the ``format`` keyword is not set, the :meth:`~regions.Regions.read` method will attempt to automatically determine the file format from the filename extension or the file contents: .. doctest-skip:: >>> regions = Regions.read('my_regions.reg') The underlying file handler will also automatically detect various compressed data formats and transparently uncompress them if supported by the Python installation (see `~astropy.utils.data.get_readable_fileobj`): .. doctest-skip:: >>> regions = Regions.read('my_regions.reg.gz') Write ----- Use the :meth:`~regions.Regions.write` method to write regions to a region file. Like the :meth:`~regions.Regions.read` method, the filename extension will be used to automatically define the format if unspecified. .. doctest-skip:: >>> regions.write('my_regions.crtf', format='crtf') >>> regions.write('my_regions.reg') If the file already exists and you want to overwrite it, then set the ``overwrite`` keyword to `True`: .. doctest-skip:: >>> regions.write('my_regions.reg', overwrite=True) Parse ----- Region data in the form of a string or table may also be parsed into a :class:`~regions.Regions` object by using the :meth:`~regions.Regions.parse` method. The ``format`` keyword must be specified when parsing region data. A region string can be parsed for the ``crtf`` and ``ds9`` formats, while a `~astropy.table.Table` can be parsed for the ``fits`` format:: >>> from regions import Regions >>> regions_str = '# Region file format: DS9\nimage\ncircle(147.10,254.17,3.1) # color=green\n' >>> regions = Regions.parse(regions_str, format='ds9') >>> print(regions) [] >>> print(regions[0].visual) {'default_style': 'ds9', 'facecolor': 'green', 'edgecolor': 'green'} Serialize --------- Regions can be serialized to a string or table by using the :meth:`~regions.Regions.serialize` method. The ``format`` keyword must be specified when serializing region data. Serializing regions to the ``crtf`` or ``ds9`` format will produce a region string, while the ``fits`` format will produce a `~astropy.table.Table`: .. doctest-skip:: >>> regions_str = regions.serialize(format='ds9') Region Classes I/O ================== Additionally, all of the Region classes (i.e., :class:`~regions.Region` subclasses) support the :meth:`~regions.Regions.write` and :meth:`~regions.Regions.serialize` methods. As an example, let's create a :class:`~regions.CircleSkyRegion` object:: >>> from astropy.coordinates import SkyCoord >>> import astropy.units as u >>> from regions import CircleSkyRegion >>> coord = SkyCoord(202.469575, 47.19525833, unit='deg', frame='fk5') >>> region = CircleSkyRegion(coord, radius=0.01 * u.deg) >>> region , radius=0.01 deg)> To serialize the region:: >>> region.serialize(format='ds9', precision=8) '# Region file format: DS9 astropy/regions\nj2000\ncircle(202.46957500,47.19525833,0.01000000)\n' To write the region to a region file: .. doctest-skip:: >>> region.write('my_region.ds9', format='ds9') Use the :meth:`~regions.Region.get_formats` method to list all available formats and methods for the :class:`~regions.Region` subclasses:: >>> print(region.get_formats()) Format Parse Serialize Read Write Auto-identify ------ ----- --------- ---- ----- ------------- crtf No Yes No Yes Yes ds9 No Yes No Yes Yes fits No Yes No Yes Yes Region File Format Limitations ============================== .. toctree:: :maxdepth: 1 ds9_io fits_io ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/docs/shapely.rst0000644000175100001770000000306314525470416015575 0ustar00runnerdockerConverting Regions to Shapely Objects ===================================== The `Shapely `__ Python package is a generic package for the manipulation and analysis of geometric objects in the Cartesian plane. For regions in the cartesian plane, it is more feature-complete, powerful, and optimized than this package. The use of Shapely or other Python regions packages that come from the geospatial domain in Astronomy is rare. However, if you have a complex pixel region analysis task, you can consider using Shapely. Either use it directly, by defining Shapely regions via Python code or one of the serialization formats they support, or by writing some Python code to convert `~regions.Region` objects to Shapely objects. Here we give an example of converting a circle to a Shapely object and then polygonize it. One nice feature of Shapely is that it can polygonize all shapes and perform fast polygon-based computations like intersection and union. .. plot:: :include-source: import matplotlib.pyplot as plt from regions import PixCoord, CirclePixelRegion from shapely.geometry import Point # Make an example region region = CirclePixelRegion(center=PixCoord(3, 2), radius=2) # Convert to Shapely point = Point(region.center.x, region.center.y) circle = point.buffer(region.radius) # Actually, this is a polygon approximation of the circle print(circle) # Plot the result x, y = circle.exterior.xy ax = plt.subplot(1, 1, 1) ax.set_aspect('equal') ax.plot(x, y, 'g-') ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/docs/shapes.rst0000644000175100001770000003177714525470416015430 0ustar00runnerdocker.. include:: references.txt .. testsetup:: >>> from regions import make_example_dataset >>> dataset = make_example_dataset(data='simulated') >>> wcs = dataset.wcs .. _shapes: Region Shapes ============= Regions provides `~regions.Region` objects, defined in pixel or sky coordinates, representing shapes such as circles, ellipses, rectangles, polygons, lines, and points. There are also regions defining circular, elliptical, and rectangular annuli. Defining Shapes --------------- This section shows examples of how to construct a region for each shape that's currently supported. Circle ****** `~regions.CircleSkyRegion` and `~regions.CirclePixelRegion` .. code-block:: python >>> from astropy.coordinates import SkyCoord >>> from astropy import units as u >>> from regions import PixCoord >>> from regions import CircleSkyRegion, CirclePixelRegion >>> center_sky = SkyCoord(42, 43, unit='deg', frame='fk5') >>> region_sky = CircleSkyRegion(center=center_sky, radius=3 * u.deg) >>> region_pix = CirclePixelRegion(center=PixCoord(x=42, y=43), ... radius=4.2) `~regions.CircleAnnulusSkyRegion` and `~regions.CircleAnnulusPixelRegion` .. code-block:: python >>> from astropy.coordinates import SkyCoord >>> from astropy import units as u >>> from regions import PixCoord >>> from regions import CircleAnnulusSkyRegion, CircleAnnulusPixelRegion >>> center_sky = SkyCoord(42, 43, unit='deg', frame='fk5') >>> region_sky = CircleAnnulusSkyRegion(center=center_sky, ... inner_radius=3 * u.deg, ... outer_radius=4 * u.deg) >>> region_pix = CircleAnnulusPixelRegion(center=PixCoord(x=42, y=43), ... inner_radius=4.2, ... outer_radius=5.2) Ellipse ******* `~regions.EllipseSkyRegion` and `~regions.EllipsePixelRegion` .. code-block:: python >>> from astropy.coordinates import SkyCoord >>> from astropy import units as u >>> from regions import PixCoord >>> from regions import EllipseSkyRegion, EllipsePixelRegion >>> center_sky = SkyCoord(42, 43, unit='deg', frame='fk5') >>> region_sky = EllipseSkyRegion(center=center_sky, ... height=3 * u.deg, width=3 * u.deg, ... angle=5 * u.deg) >>> region_pix = EllipsePixelRegion(center=PixCoord(x=42, y=43), ... height=4.2, width=4.2, ... angle=5 * u.deg) `~regions.EllipseAnnulusSkyRegion` and `~regions.EllipseAnnulusPixelRegion` .. code-block:: python >>> from astropy.coordinates import SkyCoord >>> from astropy import units as u >>> from regions import PixCoord >>> from regions import EllipseAnnulusSkyRegion, EllipseAnnulusPixelRegion >>> center_sky = SkyCoord(42, 43, unit='deg', frame='fk5') >>> region_sky = EllipseAnnulusSkyRegion(center=center_sky, ... inner_width=3 * u.deg, ... outer_width=4 * u.deg, ... inner_height=6 * u.deg, ... outer_height=7 * u.deg, ... angle=6 * u.deg) >>> region_pix = EllipseAnnulusPixelRegion(center=PixCoord(x=42, y=43), ... inner_width=4.2, ... outer_width=5.2, ... inner_height=7.2, ... outer_height=8.2, ... angle=6 * u.deg) Rectangle ********* `~regions.RectangleSkyRegion` and `~regions.RectanglePixelRegion` .. code-block:: python >>> from astropy.coordinates import SkyCoord >>> from astropy import units as u >>> from regions import PixCoord >>> from regions import RectangleSkyRegion, RectanglePixelRegion >>> center_sky = SkyCoord(42, 43, unit='deg', frame='fk5') >>> region_sky = RectangleSkyRegion(center=center_sky, ... width=3 * u.deg, height=4 * u.deg, ... angle=5 * u.deg) >>> region_pix = RectanglePixelRegion(center=PixCoord(x=42, y=43), ... width=3, height=4, ... angle=5 * u.deg) `~regions.RectangleAnnulusSkyRegion` and `~regions.RectangleAnnulusPixelRegion` .. code-block:: python >>> from astropy.coordinates import SkyCoord >>> from astropy import units as u >>> from regions import PixCoord, RectangleAnnulusSkyRegion >>> from regions import RectangleAnnulusPixelRegion >>> center_sky = SkyCoord(42, 43, unit='deg', frame='fk5') >>> region_sky = RectangleAnnulusSkyRegion(center=center_sky, ... inner_width=3 * u.deg, ... outer_width=4 * u.deg, ... inner_height=6 * u.deg, ... outer_height=7 * u.deg, ... angle=15 * u.deg) >>> region_pix = RectangleAnnulusPixelRegion(center=PixCoord(x=42, y=43), ... inner_width=4.2, ... outer_width=5.2, ... inner_height=7.2, ... outer_height=8.2, ... angle=15 * u.deg) Polygon ******* .. Polygons are the most versatile region, since any region can be .. approximated as a polygon. .. .. TODO: explain how polygons are implemented and special polygon .. methods, e.g. how to obtain a polygon approximation for any shape. .. This is not available yet, for now see `spherical_geometry`_ for .. spherical polygons and `Shapely`_ for pixel polygons. `~regions.PolygonSkyRegion`, `~regions.PolygonPixelRegion`, and `~regions.RegularPolygonPixelRegion` .. code-block:: python >>> from astropy.coordinates import SkyCoord >>> from regions import PixCoord, PolygonSkyRegion, PolygonPixelRegion >>> from regions import RegularPolygonPixelRegion >>> vertices = SkyCoord([1, 2, 2], [1, 1, 2], unit='deg', frame='fk5') >>> region_sky = PolygonSkyRegion(vertices=vertices) >>> vertices = PixCoord(x=[1, 2, 2], y=[1, 1, 2]) >>> region_pix = PolygonPixelRegion(vertices=vertices) >>> center = PixCoord(25, 25) >>> region2_pix = RegularPolygonPixelRegion(center, 6, 15) Point ***** `~regions.PointSkyRegion` and `~regions.PointPixelRegion` .. code-block:: python >>> from astropy.coordinates import SkyCoord >>> from regions import PixCoord, PointSkyRegion, PointPixelRegion >>> center_sky = SkyCoord(42, 43, unit='deg', frame='fk5') >>> region_sky = PointSkyRegion(center=center_sky) >>> region_pix = PointPixelRegion(center=PixCoord(x=42, y=43)) Line **** `~regions.LineSkyRegion` and `~regions.LinePixelRegion` .. code-block:: python >>> from astropy.coordinates import SkyCoord >>> from regions import PixCoord, LineSkyRegion, LinePixelRegion >>> start_sky = SkyCoord(42, 43, unit='deg', frame='fk5') >>> end_sky = SkyCoord(52, 53, unit='deg', frame='fk5') >>> region_sky = LineSkyRegion(start=start_sky, end=end_sky) >>> region_pix = LinePixelRegion(start=PixCoord(x=42, y=43), ... end=PixCoord(x=52, y=53)) Text ***** The text regions can be used to annotate a text string on an image. `~regions.TextSkyRegion` and `~regions.TextPixelRegion` .. code-block:: python >>> from astropy.coordinates import SkyCoord >>> from regions import PixCoord, TextSkyRegion, TextPixelRegion >>> center_sky = SkyCoord(42, 43, unit='deg', frame='fk5') >>> region_sky = TextSkyRegion(center=center_sky, text='Demo Text') >>> region_pix = TextPixelRegion(center=PixCoord(x=42, y=43), ... text='Demo Text') Region Transformations ---------------------- For every region shape there are two classes, one representing a "sky region" and another representing a "pixel region" on a given image. A key feature of the regions package is that it is possible to convert back and forth between sky and image regions given a WCS object (e.g., `astropy.wcs.WCS`). As an example, let's use the :class:`~regions.CircleSkyRegion`, a sky circle region: .. code-block:: python >>> from astropy.coordinates import Angle, SkyCoord >>> from regions import CircleSkyRegion >>> center = SkyCoord(50, 10, unit='deg') >>> radius = Angle(30, 'arcsec') >>> sky_reg = CircleSkyRegion(center, radius) To convert it to a pixel circle region (i.e., :class:`~regions.CirclePixelRegion`), call the :meth:`~regions.SkyRegion.to_pixel` method with a WCS object: .. code-block:: python >>> pix_reg = sky_reg.to_pixel(wcs) >>> print(pix_reg) # doctest: +FLOAT_CMP Region: CirclePixelRegion center: PixCoord(x=55.35205711214607, y=40.0958313892697) radius: 0.010259141135043101 Also to convert a :class:`~regions.PixelRegion` to a :class:`~regions.SkyRegion`, call the :meth:`~regions.PixelRegion.to_sky` method with a WCS object: .. code-block:: python >>> sky_reg = pix_reg.to_sky(wcs) >>> print(sky_reg) # doctest: +FLOAT_CMP Region: CircleSkyRegion center: radius: 18.55481729935556 arcsec .. _regions-as_mpl_selector: Selectors for Regions --------------------- Several geometric regions (at this time, :class:`~regions.RectanglePixelRegion` and :class:`~regions.EllipsePixelRegion`) provide a method :meth:`~regions.RectanglePixelRegion.as_mpl_selector` to create an interactive editable matplotlib widget that will be connected to its parent region. .. plot:: :context: :include-source: import matplotlib.pyplot as plt import numpy as np from regions import PixCoord, RectanglePixelRegion x, y = np.mgrid[-15:16, -10:21] z = np.exp(-(x / 4)**2 - (y / 6)**2) ax = plt.subplot() img = ax.imshow(z) rectangle = RectanglePixelRegion(center=PixCoord(x=12, y=15), width=14, height=10) selector = rectangle.as_mpl_selector(ax) The ``selector`` creates and establishes a link to a matplotlib ``Selector`` widget that allows manually positioning the ``rectangle`` region at the central point, and scaling it by dragging its corner points. Several modifier keys as specified by the ``state_modifier_keys`` parameter to :class:`matplotlib.widgets.RectangleSelector` provide further control of the manipulation of this widget, with the following operations available: - "move": Move the existing shape from anywhere, default: "space". - "clear": Clear the current shape, default: "escape". - "square": Make the shape square, default: "shift". - "center": Change the shape around its center, default: "ctrl". - "rotate": Rotate the shape around its center, default: "r" (toggles, requires Matplotlib 3.6+). Via the optional ``callback`` parameter this method can be passed a custom function that will be called on every update of the region, i.e., after every move or resize of the selector. For an example of its usage see :ref:`Interactive Mask Control`. Multiple Regions ---------------- A `~regions.Region` object can represent only one region, not an array (e.g., vector or list) of regions. This is in contrast to the aperture classes in `Photutils `__ like :class:`photutils.aperture.CircularAperture` that do allow the ``positions`` (but usually not the other parameters) to be arrays: .. doctest-skip:: >>> from photutils import CircularAperture >>> positions = [(1, 2), (3, 4)] >>> apertures = CircularAperture(positions, r=4.2) To represent lists of `~regions.Region` objects, you can store them in Python lists or the `~regions.Regions` class, which effectively acts like a list of regions. To create many similar regions or process many regions you can use for loops or list comprehensions. .. code-block:: python >>> from regions import PixCoord, CirclePixelRegion >>> from regions import Regions >>> regions = [CirclePixelRegion(center=PixCoord(x, y), radius=4.2) ... for x, y in [(1, 2), (3, 4)]] >>> for region in regions: ... print(region.center) PixCoord(x=1, y=2) PixCoord(x=3, y=4) >>> [region.area for region in regions] [55.41769440932395, 55.41769440932395] To create a `~regions.Regions` object, simply pass in a list of regions:: >>> regs = Regions(regions) >>> print(regs[0]) Region: CirclePixelRegion center: PixCoord(x=1, y=2) radius: 4.2 >>> [reg.area for reg in regs] [55.41769440932395, 55.41769440932395] The `~regions.Regions` class also provides a :ref:`unified interface for reading, writing, parsing, and serializing regions data ` in different standard formats. ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/pyproject.toml0000644000175100001770000000721114525470416015361 0ustar00runnerdocker[project] name = 'regions' description = 'An Astropy coordinated package for region handling' readme = 'README.rst' license = {file = 'LICENSE.rst'} authors = [ {name = 'Regions Developers', email = 'astropy.team@gmail.com'}, ] keywords = [ 'astronomy', 'astrophysics', 'astropy', 'regions', ] classifiers = [ 'Intended Audience :: Science/Research', 'License :: OSI Approved :: BSD License', 'Natural Language :: English', 'Operating System :: OS Independent', 'Programming Language :: Cython', 'Programming Language :: Python', 'Programming Language :: Python :: 3', 'Topic :: Scientific/Engineering :: Astronomy', ] dynamic = ['version'] requires-python = '>=3.9' dependencies = [ 'numpy>=1.22', 'astropy>=5.0', ] [project.urls] Homepage = 'https://github.com/astropy/regions' Documentation = 'https://astropy-regions.readthedocs.io/en/stable/' [project.optional-dependencies] all = [ 'matplotlib>=3.5', 'shapely', ] test = [ 'pytest-arraydiff', 'pytest-astropy>=0.10', ] docs = [ 'regions[all]', 'sphinx-astropy>=1.6', 'tomli; python_version < "3.11"', ] [build-system] requires = [ 'setuptools>=61.2', 'setuptools_scm>=6.2', 'cython>=3.0.0,<3.1.0', 'numpy', 'extension-helpers', ] build-backend = 'setuptools.build_meta' [tool.extension-helpers] use_extension_helpers = true [tool.setuptools_scm] write_to = 'regions/version.py' [tool.setuptools] zip-safe = false include-package-data = false [tool.setuptools.packages.find] namespaces = false [tool.setuptools.package-data] '*' = [ 'data/*', ] 'regions' = [ 'CITATION.rst', ] 'regions.shapes.tests' = [ 'reference/*.txt', 'data/*.fits', ] 'regions.io.crtf.tests' = [ 'data/*.crtf', ] 'regions.io.ds9.tests' = [ 'data/*.reg', ] 'regions.io.fits.tests' = [ 'data/*.fits', ] [tool.pytest.ini_options] minversion = 7.0 testpaths = [ 'regions', 'docs', ] norecursedirs = [ 'docs/_build', 'extern', ] astropy_header = true doctest_plus = 'enabled' text_file_format = 'rst' addopts = '--color=yes --doctest-rst --arraydiff' xfail_strict = true remote_data_strict = true filterwarnings = [ 'error', # turn warnings into exceptions 'ignore:numpy.ufunc size changed:RuntimeWarning', 'ignore:numpy.ndarray size changed:RuntimeWarning', 'ignore:unclosed file:ResourceWarning', # python 3.12 deprecation in matplotlib 3.9dev 'ignore:datetime.datetime.utcfromtimestamp\(\) is deprecated:DeprecationWarning', # NumPy 2.0dev deprecations "ignore:.*numpy\\.core.*:DeprecationWarning", ] markers = [ 'array_compare' ] [tool.coverage.run] omit = [ 'regions/_astropy_init*', 'regions/conftest.py', 'regions/*setup_package*', 'regions/tests/*', 'regions/*/tests/*', 'regions/extern/*', 'regions/version*', '*/regions/_astropy_init*', '*/regions/conftest.py', '*/regions/*setup_package*', '*/regions/tests/*', '*/regions/*/tests/*', '*/regions/extern/*', '*/regions/version*', ] [tool.coverage.report] exclude_lines = [ 'pragma: no cover', 'except ImportError', 'raise AssertionError', 'raise NotImplementedError', 'def main\\(.*\\):', 'pragma: py{ignore_python_version}', 'def _ipython_key_completions_', ] [tool.build-sphinx] github_project = 'astropy/regions' [tool.isort] skip_glob = [ 'regions/*__init__.py*', ] known_first_party = [ 'regions', 'extension_helpers', ] use_parentheses = true [tool.black] force-exclude = """ ( .* ) """ [tool.bandit] exclude_dirs = ['*/tests/test_casa_mask.py'] [tool.bandit.assert_used] skips = ['*_test.py', '*/test_*.py', '*/tests/helpers.py'] ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1700163875.5105398 regions-0.8/regions/0000755000175100001770000000000014525470444014113 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/CITATION.rst0000644000175100001770000000344614525470416016065 0ustar00runnerdockerCiting Regions -------------- If you use Regions for a project that leads to a publication, whether directly or as a dependency of another package, please include the following acknowledgment: .. code-block:: text This research made use of Regions, an Astropy package for region handling (Bradley et al. 202X). where (Bradley et al. 202X) is a citation to the `Zenodo record `_ of the Regions version that was used. We also encourage citations in the main text wherever appropriate. All Regions versions and citation formats can be found at https://doi.org/10.5281/zenodo.5826358. For example, for Regions v0.6 one would cite Bradley et al. 2022 with the `BibTeX entry `_: .. code-block:: text @software{larry_bradley_2022_6374572, author = {Larry Bradley and Christoph Deil and Sushobhana Patra and Adam Ginsburg and Thomas Robitaille and Brigitta Sipőcz and Johannes King and P. L. Lim and Derek Homeier and Leo Singer and Miguel de Val-Borro and Tim Jenness and Matthieu Baumann and Yash Gondhalekar and Axel Donath and Erik Tollerud and Jae-Joon Lee and Katrin Leinweber and ZÊ Vinícius}, title = {astropy/regions: v0.6}, month = mar, year = 2022, publisher = {Zenodo}, version = {v0.6}, doi = {10.5281/zenodo.6374572}, url = {https://doi.org/10.5281/zenodo.6374572} } ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/__init__.py0000644000175100001770000000165014525470416016225 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst """ Regions is Astropy coordinated package to provide tools for region handling. """ # Affiliated packages may add whatever they like to this file, but # should keep this content at the top. from ._astropy_init import * # noqa: F401, F403 from ._utils.examples import * # noqa: F401, F403 from .core import * # noqa: F401, F403 from .io import * # noqa: F401, F403 from .shapes import * # noqa: F401, F403 # Set the bibtex entry to the article referenced in CITATION.rst. def _get_bibtex(): import os citation_file = os.path.join(os.path.dirname(__file__), 'CITATION.rst') with open(citation_file) as citation: refs = citation.read().split('@software')[1:] if len(refs) == 0: return '' bibtexreference = f'@software{refs[0]}' return bibtexreference __citation__ = __bibtex__ = _get_bibtex() del _get_bibtex ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/_astropy_init.py0000644000175100001770000000054414525470416017352 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst import os __all__ = ['__version__', 'test'] try: from .version import version as __version__ except ImportError: __version__ = '' # Create the test function for self test from astropy.tests.runner import TestRunner test = TestRunner.make_test_runner_in(os.path.dirname(__file__)) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163875.0 regions-0.8/regions/_compiler.c0000644000175100001770000000524014525470443016230 0ustar00runnerdocker#include /*************************************************************************** * Macros for determining the compiler version. * * These are borrowed from boost, and majorly abridged to include only * the compilers we care about. ***************************************************************************/ #define STRINGIZE(X) DO_STRINGIZE(X) #define DO_STRINGIZE(X) #X #if defined __clang__ /* Clang C++ emulates GCC, so it has to appear early. */ # define COMPILER "Clang version " __clang_version__ #elif defined(__INTEL_COMPILER) || defined(__ICL) || defined(__ICC) || defined(__ECC) /* Intel */ # if defined(__INTEL_COMPILER) # define INTEL_VERSION __INTEL_COMPILER # elif defined(__ICL) # define INTEL_VERSION __ICL # elif defined(__ICC) # define INTEL_VERSION __ICC # elif defined(__ECC) # define INTEL_VERSION __ECC # endif # define COMPILER "Intel C compiler version " STRINGIZE(INTEL_VERSION) #elif defined(__GNUC__) /* gcc */ # define COMPILER "GCC version " __VERSION__ #elif defined(__SUNPRO_CC) /* Sun Workshop Compiler */ # define COMPILER "Sun compiler version " STRINGIZE(__SUNPRO_CC) #elif defined(_MSC_VER) /* Microsoft Visual C/C++ Must be last since other compilers define _MSC_VER for compatibility as well */ # if _MSC_VER < 1200 # define COMPILER_VERSION 5.0 # elif _MSC_VER < 1300 # define COMPILER_VERSION 6.0 # elif _MSC_VER == 1300 # define COMPILER_VERSION 7.0 # elif _MSC_VER == 1310 # define COMPILER_VERSION 7.1 # elif _MSC_VER == 1400 # define COMPILER_VERSION 8.0 # elif _MSC_VER == 1500 # define COMPILER_VERSION 9.0 # elif _MSC_VER == 1600 # define COMPILER_VERSION 10.0 # else # define COMPILER_VERSION _MSC_VER # endif # define COMPILER "Microsoft Visual C++ version " STRINGIZE(COMPILER_VERSION) #else /* Fallback */ # define COMPILER "Unknown compiler" #endif /*************************************************************************** * Module-level ***************************************************************************/ struct module_state { /* The Sun compiler can't handle empty structs */ #if defined(__SUNPRO_C) || defined(_MSC_VER) int _dummy; #endif }; static struct PyModuleDef moduledef = { PyModuleDef_HEAD_INIT, "compiler_version", NULL, sizeof(struct module_state), NULL, NULL, NULL, NULL, NULL }; #define INITERROR return NULL PyMODINIT_FUNC PyInit_compiler_version(void) { PyObject* m; m = PyModule_Create(&moduledef); if (m == NULL) INITERROR; PyModule_AddStringConstant(m, "compiler", COMPILER); return m; } ././@PaxHeader0000000000000000000000000000003200000000000010210 xustar0026 mtime=1700163875.51454 regions-0.8/regions/_geometry/0000755000175100001770000000000014525470444016105 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/_geometry/README.md0000644000175100001770000000013514525470416017362 0ustar00runnerdocker# This sub-package contains fast geometrical routines that are then used by different shapes ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/_geometry/__init__.py0000644000175100001770000000052514525470416020217 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst """ Geometry subpackage for low-level geometry functions. """ from .circular_overlap import * # noqa: F401, F403 from .elliptical_overlap import * # noqa: F401, F403 from .polygonal_overlap import * # noqa: F401, F403 from .rectangular_overlap import * # noqa: F401, F403 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/_geometry/circular_overlap.pyx0000644000175100001770000002025614525470416022207 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst # cython: language_level=3 """ The functions defined here allow one to determine the exact area of overlap of a rectangle and a circle (written by Thomas Robitaille). """ import numpy as np cimport numpy as np __all__ = ['circular_overlap_grid'] cdef extern from "math.h": double asin(double x) double sin(double x) double sqrt(double x) DTYPE = np.float64 ctypedef np.float64_t DTYPE_t # NOTE: Here we need to make sure we use cimport to import the C functions from # core (since these were defined with cdef). This also requires the core.pxd # file to exist with the function signatures. from .core cimport area_arc, area_triangle, floor_sqrt def circular_overlap_grid(double xmin, double xmax, double ymin, double ymax, int nx, int ny, double r, int use_exact, int subpixels): """ circular_overlap_grid(xmin, xmax, ymin, ymax, nx, ny, r, use_exact, subpixels) Area of overlap between a circle and a pixel grid. The circle is centered on the origin. Parameters ---------- xmin, xmax, ymin, ymax : float Extent of the grid in the x and y direction. nx, ny : int Grid dimensions. r : float The radius of the circle. use_exact : 0 or 1 If ``1`` calculates exact overlap, if ``0`` uses ``subpixel`` number of subpixels to calculate the overlap. subpixels : int Each pixel resampled by this factor in each dimension, thus each pixel is divided into ``subpixels ** 2`` subpixels. Returns ------- frac : `~numpy.ndarray` (float) 2-d array of shape (ny, nx) giving the fraction of the overlap. """ cdef unsigned int i, j cdef double x, y, dx, dy, d, pixel_radius cdef double bxmin, bxmax, bymin, bymax cdef double pxmin, pxcen, pxmax, pymin, pycen, pymax # Define output array cdef np.ndarray[DTYPE_t, ndim=2] frac = np.zeros([ny, nx], dtype=DTYPE) # Find the width of each element in x and y dx = (xmax - xmin) / nx dy = (ymax - ymin) / ny # Find the radius of a single pixel pixel_radius = 0.5 * sqrt(dx * dx + dy * dy) # Define bounding box bxmin = -r - 0.5 * dx bxmax = +r + 0.5 * dx bymin = -r - 0.5 * dy bymax = +r + 0.5 * dy for i in range(nx): pxmin = xmin + i * dx # lower end of pixel pxcen = pxmin + dx * 0.5 pxmax = pxmin + dx # upper end of pixel if pxmax > bxmin and pxmin < bxmax: for j in range(ny): pymin = ymin + j * dy pycen = pymin + dy * 0.5 pymax = pymin + dy if pymax > bymin and pymin < bymax: # Distance from circle center to pixel center. d = sqrt(pxcen * pxcen + pycen * pycen) # If pixel center is "well within" circle, count full # pixel. if d < r - pixel_radius: frac[j, i] = 1. # If pixel center is "close" to circle border, find # overlap. elif d < r + pixel_radius: # Either do exact calculation or use subpixel # sampling: if use_exact: frac[j, i] = circular_overlap_single_exact( pxmin, pymin, pxmax, pymax, r) / (dx * dy) else: frac[j, i] = circular_overlap_single_subpixel( pxmin, pymin, pxmax, pymax, r, subpixels) # Otherwise, it is fully outside circle. # No action needed. return frac # NOTE: The following two functions use cdef because they are not # intended to be called from the Python code. Using def makes them # callable from outside, but also slower. In any case, these aren't useful # to call from outside because they only operate on a single pixel. cdef double circular_overlap_single_subpixel(double x0, double y0, double x1, double y1, double r, int subpixels): """Return the fraction of overlap between a circle and a single pixel with given extent, using a sub-pixel sampling method.""" cdef unsigned int i, j cdef double x, y, dx, dy, r_squared cdef double frac = 0. # Accumulator. dx = (x1 - x0) / subpixels dy = (y1 - y0) / subpixels r_squared = r ** 2 x = x0 - 0.5 * dx for i in range(subpixels): x += dx y = y0 - 0.5 * dy for j in range(subpixels): y += dy if x * x + y * y < r_squared: frac += 1. return frac / (subpixels * subpixels) cdef double circular_overlap_single_exact(double xmin, double ymin, double xmax, double ymax, double r): """ Area of overlap of a rectangle and a circle """ if 0. <= xmin: if 0. <= ymin: return circular_overlap_core(xmin, ymin, xmax, ymax, r) elif 0. >= ymax: return circular_overlap_core(-ymax, xmin, -ymin, xmax, r) else: return circular_overlap_single_exact(xmin, ymin, xmax, 0., r) \ + circular_overlap_single_exact(xmin, 0., xmax, ymax, r) elif 0. >= xmax: if 0. <= ymin: return circular_overlap_core(-xmax, ymin, -xmin, ymax, r) elif 0. >= ymax: return circular_overlap_core(-xmax, -ymax, -xmin, -ymin, r) else: return circular_overlap_single_exact(xmin, ymin, xmax, 0., r) \ + circular_overlap_single_exact(xmin, 0., xmax, ymax, r) else: if 0. <= ymin: return circular_overlap_single_exact(xmin, ymin, 0., ymax, r) \ + circular_overlap_single_exact(0., ymin, xmax, ymax, r) if 0. >= ymax: return circular_overlap_single_exact(xmin, ymin, 0., ymax, r) \ + circular_overlap_single_exact(0., ymin, xmax, ymax, r) else: return circular_overlap_single_exact(xmin, ymin, 0., 0., r) \ + circular_overlap_single_exact(0., ymin, xmax, 0., r) \ + circular_overlap_single_exact(xmin, 0., 0., ymax, r) \ + circular_overlap_single_exact(0., 0., xmax, ymax, r) cdef double circular_overlap_core(double xmin, double ymin, double xmax, double ymax, double r): """ Assumes that the center of the circle is <= xmin, ymin (can always modify input to conform to this). """ cdef double area, d1, d2, x1, x2, y1, y2 if xmin * xmin + ymin * ymin > r * r: area = 0. elif xmax * xmax + ymax * ymax < r * r: area = (xmax - xmin) * (ymax - ymin) else: area = 0. d1 = floor_sqrt(xmax * xmax + ymin * ymin) d2 = floor_sqrt(xmin * xmin + ymax * ymax) if d1 < r and d2 < r: x1, y1 = floor_sqrt(r * r - ymax * ymax), ymax x2, y2 = xmax, floor_sqrt(r * r - xmax * xmax) area = ((xmax - xmin) * (ymax - ymin) - area_triangle(x1, y1, x2, y2, xmax, ymax) + area_arc(x1, y1, x2, y2, r)) elif d1 < r: x1, y1 = xmin, floor_sqrt(r * r - xmin * xmin) x2, y2 = xmax, floor_sqrt(r * r - xmax * xmax) area = (area_arc(x1, y1, x2, y2, r) + area_triangle(x1, y1, x1, ymin, xmax, ymin) + area_triangle(x1, y1, x2, ymin, x2, y2)) elif d2 < r: x1, y1 = floor_sqrt(r * r - ymin * ymin), ymin x2, y2 = floor_sqrt(r * r - ymax * ymax), ymax area = (area_arc(x1, y1, x2, y2, r) + area_triangle(x1, y1, xmin, y1, xmin, ymax) + area_triangle(x1, y1, xmin, y2, x2, y2)) else: x1, y1 = floor_sqrt(r * r - ymin * ymin), ymin x2, y2 = xmin, floor_sqrt(r * r - xmin * xmin) area = (area_arc(x1, y1, x2, y2, r) + area_triangle(x1, y1, x2, y2, xmin, ymin)) return area ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/_geometry/core.pxd0000644000175100001770000000133614525470416017554 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst # cython: language_level=3 # This file is needed in order to be able to cimport functions into other Cython files cdef double distance(double x1, double y1, double x2, double y2) cdef double area_arc(double x1, double y1, double x2, double y2, double R) cdef double area_triangle(double x1, double y1, double x2, double y2, double x3, double y3) cdef double area_arc_unit(double x1, double y1, double x2, double y2) cdef int in_triangle(double x, double y, double x1, double y1, double x2, double y2, double x3, double y3) cdef double overlap_area_triangle_unit_circle(double x1, double y1, double x2, double y2, double x3, double y3) cdef double floor_sqrt(double x) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/_geometry/core.pyx0000644000175100001770000002751214525470416017605 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst # cython: language_level=3 """ The functions here are the core geometry functions. """ import numpy as np cimport numpy as np cdef extern from "math.h": double asin(double x) double sin(double x) double cos(double x) double sqrt(double x) double fabs(double x) from cpython cimport bool DTYPE = np.float64 ctypedef np.float64_t DTYPE_t cimport cython ctypedef struct point: double x double y ctypedef struct intersections: point p1 point p2 cdef double floor_sqrt(double x): """ In some of the geometrical functions, we have to take the sqrt of a number and we know that the number should be >= 0. However, in some cases the value is e.g. -1e-10, but we want to treat it as zero, which is what this function does. Note that this does **not** check whether negative values are close or not to zero, so this should be used only in cases where the value is expected to be positive on paper. """ if x > 0: return sqrt(x) else: return 0 # NOTE: The following two functions use cdef because they are not intended to be # called from the Python code. Using def makes them callable from outside, but # also slower. Some functions currently return multiple values, and for those we # still use 'def' for now. cdef double distance(double x1, double y1, double x2, double y2): """ Distance between two points in two dimensions. Parameters ---------- x1, y1 : float The coordinates of the first point x2, y2 : float The coordinates of the second point Returns ------- d : float The Euclidean distance between the two points """ return sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2) cdef double area_arc(double x1, double y1, double x2, double y2, double r): """ Area of a circle arc with radius r between points (x1, y1) and (x2, y2). References ---------- http://mathworld.wolfram.com/CircularSegment.html """ cdef double a, theta a = distance(x1, y1, x2, y2) theta = 2. * asin(0.5 * a / r) return 0.5 * r * r * (theta - sin(theta)) cdef double area_triangle(double x1, double y1, double x2, double y2, double x3, double y3): """ Area of a triangle defined by three vertices. """ return 0.5 * abs(x1 * (y2 - y3) + x2 * (y3 - y1) + x3 * (y1 - y2)) cdef double area_arc_unit(double x1, double y1, double x2, double y2): """ Area of a circle arc with radius R between points (x1, y1) and (x2, y2) References ---------- http://mathworld.wolfram.com/CircularSegment.html """ cdef double a, theta a = distance(x1, y1, x2, y2) theta = 2. * asin(0.5 * a) return 0.5 * (theta - sin(theta)) cdef int in_triangle(double x, double y, double x1, double y1, double x2, double y2, double x3, double y3): """ Check if a point (x,y) is inside a triangle """ cdef int c = 0 c += ((y1 > y) != (y2 > y) and x < (x2 - x1) * (y - y1) / (y2 - y1) + x1) c += ((y2 > y) != (y3 > y) and x < (x3 - x2) * (y - y2) / (y3 - y2) + x2) c += ((y3 > y) != (y1 > y) and x < (x1 - x3) * (y - y3) / (y1 - y3) + x3) return c % 2 == 1 cdef intersections circle_line(double x1, double y1, double x2, double y2): """Intersection of a line defined by two points with a unit circle""" cdef double a, b, delta, dx, dy cdef double tolerance = 1.e-10 cdef intersections inter dx = x2 - x1 dy = y2 - y1 if fabs(dx) < tolerance and fabs(dy) < tolerance: inter.p1.x = 2. inter.p1.y = 2. inter.p2.x = 2. inter.p2.y = 2. elif fabs(dx) > fabs(dy): # Find the slope and intercept of the line a = dy / dx b = y1 - a * x1 # Find the determinant of the quadratic equation delta = 1. + a * a - b * b if delta > 0.: # solutions exist delta = sqrt(delta) inter.p1.x = (- a * b - delta) / (1. + a * a) inter.p1.y = a * inter.p1.x + b inter.p2.x = (- a * b + delta) / (1. + a * a) inter.p2.y = a * inter.p2.x + b else: # no solution, return values > 1 inter.p1.x = 2. inter.p1.y = 2. inter.p2.x = 2. inter.p2.y = 2. else: # Find the slope and intercept of the line a = dx / dy b = x1 - a * y1 # Find the determinant of the quadratic equation delta = 1. + a * a - b * b if delta > 0.: # solutions exist delta = sqrt(delta) inter.p1.y = (- a * b - delta) / (1. + a * a) inter.p1.x = a * inter.p1.y + b inter.p2.y = (- a * b + delta) / (1. + a * a) inter.p2.x = a * inter.p2.y + b else: # no solution, return values > 1 inter.p1.x = 2. inter.p1.y = 2. inter.p2.x = 2. inter.p2.y = 2. return inter cdef point circle_segment_single2(double x1, double y1, double x2, double y2): """ The intersection of a line with the unit circle. The intersection the closest to (x2, y2) is chosen. """ cdef double dx1, dy1, dx2, dy2 cdef intersections inter cdef point pt1, pt2, pt inter = circle_line(x1, y1, x2, y2) pt1 = inter.p1 pt2 = inter.p2 # Can be optimized, but just checking for correctness right now dx1 = fabs(pt1.x - x2) dy1 = fabs(pt1.y - y2) dx2 = fabs(pt2.x - x2) dy2 = fabs(pt2.y - y2) if dx1 > dy1: # compare based on x-axis if dx1 > dx2: pt = pt2 else: pt = pt1 else: if dy1 > dy2: pt = pt2 else: pt = pt1 return pt cdef intersections circle_segment(double x1, double y1, double x2, double y2): """ Intersection(s) of a segment with the unit circle. Discard any solution not on the segment. """ cdef intersections inter, inter_new cdef point pt1, pt2 inter = circle_line(x1, y1, x2, y2) pt1 = inter.p1 pt2 = inter.p2 if (pt1.x > x1 and pt1.x > x2) or (pt1.x < x1 and pt1.x < x2) or (pt1.y > y1 and pt1.y > y2) or (pt1.y < y1 and pt1.y < y2): pt1.x, pt1.y = 2., 2. if (pt2.x > x1 and pt2.x > x2) or (pt2.x < x1 and pt2.x < x2) or (pt2.y > y1 and pt2.y > y2) or (pt2.y < y1 and pt2.y < y2): pt2.x, pt2.y = 2., 2. if pt1.x > 1. and pt2.x < 2.: inter_new.p1 = pt1 inter_new.p2 = pt2 else: inter_new.p1 = pt2 inter_new.p2 = pt1 return inter_new cdef double overlap_area_triangle_unit_circle(double x1, double y1, double x2, double y2, double x3, double y3): """ Given a triangle defined by three points (x1, y1), (x2, y2), and (x3, y3), find the area of overlap with the unit circle. """ cdef double d1, d2, d3 cdef bool in1, in2, in3 cdef bool on1, on2, on3 cdef double area cdef double PI = np.pi cdef intersections inter cdef point pt1, pt2, pt3, pt4, pt5, pt6, pt_tmp # Find distance of all vertices to circle center d1 = x1 * x1 + y1 * y1 d2 = x2 * x2 + y2 * y2 d3 = x3 * x3 + y3 * y3 # Order vertices by distance from origin if d1 < d2: if d2 < d3: pass elif d1 < d3: x2, y2, d2, x3, y3, d3 = x3, y3, d3, x2, y2, d2 else: x1, y1, d1, x2, y2, d2, x3, y3, d3 = x3, y3, d3, x1, y1, d1, x2, y2, d2 else: if d1 < d3: x1, y1, d1, x2, y2, d2 = x2, y2, d2, x1, y1, d1 elif d2 < d3: x1, y1, d1, x2, y2, d2, x3, y3, d3 = x2, y2, d2, x3, y3, d3, x1, y1, d1 else: x1, y1, d1, x2, y2, d2, x3, y3, d3 = x3, y3, d3, x2, y2, d2, x1, y1, d1 if d1 > d2 or d2 > d3 or d1 > d3: raise Exception("ERROR: vertices did not sort correctly") # Determine number of vertices inside circle in1 = d1 < 1 in2 = d2 < 1 in3 = d3 < 1 # Determine which vertices are on the circle on1 = fabs(d1 - 1) < 1.e-10 on2 = fabs(d2 - 1) < 1.e-10 on3 = fabs(d3 - 1) < 1.e-10 if on3 or in3: # triangle is completely in circle area = area_triangle(x1, y1, x2, y2, x3, y3) elif in2 or on2: # If vertex 1 or 2 are on the edge of the circle, then we use the dot # product to vertex 3 to determine whether an intersection takes place. intersect13 = not on1 or x1 * (x3 - x1) + y1 * (y3 - y1) < 0. intersect23 = not on2 or x2 * (x3 - x2) + y2 * (y3 - y2) < 0. if intersect13 and intersect23 and not on2: pt1 = circle_segment_single2(x1, y1, x3, y3) pt2 = circle_segment_single2(x2, y2, x3, y3) area = area_triangle(x1, y1, x2, y2, pt1.x, pt1.y) \ + area_triangle(x2, y2, pt1.x, pt1.y, pt2.x, pt2.y) \ + area_arc_unit(pt1.x, pt1.y, pt2.x, pt2.y) elif intersect13: pt1 = circle_segment_single2(x1, y1, x3, y3) area = area_triangle(x1, y1, x2, y2, pt1.x, pt1.y) \ + area_arc_unit(x2, y2, pt1.x, pt1.y) elif intersect23: pt2 = circle_segment_single2(x2, y2, x3, y3) area = area_triangle(x1, y1, x2, y2, pt2.x, pt2.y) \ + area_arc_unit(x1, y1, pt2.x, pt2.y) else: area = area_arc_unit(x1, y1, x2, y2) elif on1: # The triangle is outside the circle area = 0.0 elif in1: # Check for intersections of far side with circle inter = circle_segment(x2, y2, x3, y3) pt1 = inter.p1 pt2 = inter.p2 pt3 = circle_segment_single2(x1, y1, x2, y2) pt4 = circle_segment_single2(x1, y1, x3, y3) if pt1.x > 1.: # indicates no intersection # Code taken from `sep.h`. # TODO: use `sep` and get rid of this Cython code. if (((0.-pt3.y) * (pt4.x-pt3.x) > (pt4.y-pt3.y) * (0.-pt3.x)) != ((y1-pt3.y) * (pt4.x-pt3.x) > (pt4.y-pt3.y) * (x1-pt3.x))): area = area_triangle(x1, y1, pt3.x, pt3.y, pt4.x, pt4.y) \ + (PI - area_arc_unit(pt3.x, pt3.y, pt4.x, pt4.y)) else: area = area_triangle(x1, y1, pt3.x, pt3.y, pt4.x, pt4.y) \ + area_arc_unit(pt3.x, pt3.y, pt4.x, pt4.y) else: if (pt2.x - x2)**2 + (pt2.y - y2)**2 < (pt1.x - x2)**2 + (pt1.y - y2)**2: pt1, pt2 = pt2, pt1 area = area_triangle(x1, y1, pt3.x, pt3.y, pt1.x, pt1.y) \ + area_triangle(x1, y1, pt1.x, pt1.y, pt2.x, pt2.y) \ + area_triangle(x1, y1, pt2.x, pt2.y, pt4.x, pt4.y) \ + area_arc_unit(pt1.x, pt1.y, pt3.x, pt3.y) \ + area_arc_unit(pt2.x, pt2.y, pt4.x, pt4.y) else: inter = circle_segment(x1, y1, x2, y2) pt1 = inter.p1 pt2 = inter.p2 inter = circle_segment(x2, y2, x3, y3) pt3 = inter.p1 pt4 = inter.p2 inter = circle_segment(x3, y3, x1, y1) pt5 = inter.p1 pt6 = inter.p2 if pt1.x <= 1.: xp, yp = 0.5 * (pt1.x + pt2.x), 0.5 * (pt1.y + pt2.y) area = overlap_area_triangle_unit_circle(x1, y1, x3, y3, xp, yp) \ + overlap_area_triangle_unit_circle(x2, y2, x3, y3, xp, yp) elif pt3.x <= 1.: xp, yp = 0.5 * (pt3.x + pt4.x), 0.5 * (pt3.y + pt4.y) area = overlap_area_triangle_unit_circle(x3, y3, x1, y1, xp, yp) \ + overlap_area_triangle_unit_circle(x2, y2, x1, y1, xp, yp) elif pt5.x <= 1.: xp, yp = 0.5 * (pt5.x + pt6.x), 0.5 * (pt5.y + pt6.y) area = overlap_area_triangle_unit_circle(x1, y1, x2, y2, xp, yp) \ + overlap_area_triangle_unit_circle(x3, y3, x2, y2, xp, yp) else: # no intersections if in_triangle(0., 0., x1, y1, x2, y2, x3, y3): return PI else: return 0. return area ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/_geometry/elliptical_overlap.pyx0000644000175100001770000001526514525470416022531 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst # cython: language_level=3 """ The functions defined here allow one to determine the exact area of overlap of an ellipse and a triangle (written by Thomas Robitaille). The approach is to divide the rectangle into two triangles, and reproject these so that the ellipse is a unit circle, then compute the intersection of a triangle with a unit circle. """ import numpy as np cimport numpy as np __all__ = ['elliptical_overlap_grid'] cdef extern from "math.h": double asin(double x) double sin(double x) double cos(double x) double sqrt(double x) from cpython cimport bool DTYPE = np.float64 ctypedef np.float64_t DTYPE_t cimport cython # NOTE: Here we need to make sure we use cimport to import the C functions from # core (since these were defined with cdef). This also requires the core.pxd # file to exist with the function signatures. from .core cimport area_triangle, distance, overlap_area_triangle_unit_circle def elliptical_overlap_grid(double xmin, double xmax, double ymin, double ymax, int nx, int ny, double rx, double ry, double theta, int use_exact, int subpixels): """ elliptical_overlap_grid(xmin, xmax, ymin, ymax, nx, ny, rx, ry, use_exact, subpixels) Area of overlap between an ellipse and a pixel grid. The ellipse is centered on the origin. Parameters ---------- xmin, xmax, ymin, ymax : float Extent of the grid in the x and y direction. nx, ny : int Grid dimensions. rx : float The width axis of the ellipse (without rotation). ry : float The height axis of the ellipse (without rotation). theta : float The rotation of the ellipse in radians (counterclockwise). use_exact : 0 or 1 If set to 1, calculates the exact overlap, while if set to 0, uses a subpixel sampling method with ``subpixel`` subpixels in each direction. subpixels : int If ``use_exact`` is 0, each pixel is resampled by this factor in each dimension. Thus, each pixel is divided into ``subpixels ** 2`` subpixels. Returns ------- frac : `~numpy.ndarray` 2-d array giving the fraction of the overlap. """ cdef unsigned int i, j cdef double x, y, dx, dy cdef double bxmin, bxmax, bymin, bymax cdef double pxmin, pxmax, pymin, pymax cdef double norm # Define output array cdef np.ndarray[DTYPE_t, ndim=2] frac = np.zeros([ny, nx], dtype=DTYPE) # Find the width of each element in x and y dx = (xmax - xmin) / nx dy = (ymax - ymin) / ny norm = 1. / (dx * dy) # For now we use a bounding circle and then use that to find a bounding box # but of course this is inefficient and could be done better. # Find bounding circle radius r = max(rx, ry) # Define bounding box bxmin = -r - 0.5 * dx bxmax = +r + 0.5 * dx bymin = -r - 0.5 * dy bymax = +r + 0.5 * dy for i in range(nx): pxmin = xmin + i * dx # lower end of pixel pxmax = pxmin + dx # upper end of pixel if pxmax > bxmin and pxmin < bxmax: for j in range(ny): pymin = ymin + j * dy pymax = pymin + dy if pymax > bymin and pymin < bymax: if use_exact: frac[j, i] = elliptical_overlap_single_exact( pxmin, pymin, pxmax, pymax, rx, ry, theta) * norm else: frac[j, i] = elliptical_overlap_single_subpixel( pxmin, pymin, pxmax, pymax, rx, ry, theta, subpixels) return frac # NOTE: The following two functions use cdef because they are not # intended to be called from the Python code. Using def makes them # callable from outside, but also slower. In any case, these aren't useful # to call from outside because they only operate on a single pixel. cdef double elliptical_overlap_single_subpixel(double x0, double y0, double x1, double y1, double rx, double ry, double theta, int subpixels): """ Return the fraction of overlap between a ellipse and a single pixel with given extent, using a sub-pixel sampling method. """ cdef unsigned int i, j cdef double x, y cdef double frac = 0. # Accumulator. cdef double inv_rx_sq, inv_ry_sq cdef double cos_theta = cos(theta) cdef double sin_theta = sin(theta) cdef double dx, dy cdef double x_tr, y_tr dx = (x1 - x0) / subpixels dy = (y1 - y0) / subpixels inv_rx_sq = 1. / (rx * rx) inv_ry_sq = 1. / (ry * ry) x = x0 - 0.5 * dx for i in range(subpixels): x += dx y = y0 - 0.5 * dy for j in range(subpixels): y += dy # Transform into frame of rotated ellipse x_tr = y * sin_theta + x * cos_theta y_tr = y * cos_theta - x * sin_theta if x_tr * x_tr * inv_rx_sq + y_tr * y_tr * inv_ry_sq < 1.: frac += 1. return frac / (subpixels * subpixels) cdef double elliptical_overlap_single_exact(double xmin, double ymin, double xmax, double ymax, double rx, double ry, double theta): """ Given a rectangle defined by (xmin, ymin, xmax, ymax) and an ellipse with width and height rx and ry respectively, rotation angle theta, and centered at the origin, find the area of overlap. """ cdef double cos_m_theta = cos(-theta) cdef double sin_m_theta = sin(-theta) cdef double scale # Find scale by which the areas will be shrunk scale = rx * ry # Reproject rectangle to frame of reference in which ellipse is a # unit circle x1, y1 = ((xmin * cos_m_theta - ymin * sin_m_theta) / rx, (xmin * sin_m_theta + ymin * cos_m_theta) / ry) x2, y2 = ((xmax * cos_m_theta - ymin * sin_m_theta) / rx, (xmax * sin_m_theta + ymin * cos_m_theta) / ry) x3, y3 = ((xmax * cos_m_theta - ymax * sin_m_theta) / rx, (xmax * sin_m_theta + ymax * cos_m_theta) / ry) x4, y4 = ((xmin * cos_m_theta - ymax * sin_m_theta) / rx, (xmin * sin_m_theta + ymax * cos_m_theta) / ry) # Divide resulting quadrilateral into two triangles and find # intersection with unit circle return (overlap_area_triangle_unit_circle(x1, y1, x2, y2, x3, y3) + overlap_area_triangle_unit_circle(x1, y1, x4, y4, x3, y3)) * scale ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/_geometry/pnpoly.pxd0000644000175100001770000000052614525470416020145 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst # cython: language_level=3 # This file is needed in order to be able to cimport functions into other Cython files cimport numpy as np ctypedef np.float64_t DTYPE_t cdef int point_in_polygon(double x, double y, np.ndarray[DTYPE_t, ndim=1] vx, np.ndarray[DTYPE_t, ndim=1] vy) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/_geometry/pnpoly.pyx0000644000175100001770000001045014525470416020167 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst # cython: language_level=3 # # The code in this file was adapted from code written by Greg von Winckel: # # https://github.com/gregvw/pnpoly # # and which was released under the following license: # # ---------------------------------------------------------------------------- # # The MIT License (MIT) # # Copyright (c) 2014 Greg von Winckel # # 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. # # ---------------------------------------------------------------------------- # # This code was itself adapted from code written by W. Randolph Franklin: # # http://www.ecse.rpi.edu/~wrf/Research/Short_Notes/pnpoly.html # # and released under the following license: # # Copyright (c) 1970-2003, Wm. Randolph Franklin # # 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: # # Redistributions of source code must retain the above copyright notice, this # list of conditions and the following disclaimers. # # Redistributions in binary form must reproduce the above copyright notice in # the documentation and/or other materials provided with the distribution. # # The name of W. Randolph Franklin may not be used to endorse or promote # products derived from this Software without specific prior written permission. # # 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. import numpy as np cimport numpy as np DTYPE_BOOL = bool ctypedef np.uint8_t DTYPE_BOOL_t def points_in_polygon(np.ndarray[DTYPE_t, ndim=1] x, np.ndarray[DTYPE_t, ndim=1] y, np.ndarray[DTYPE_t, ndim=1] vx, np.ndarray[DTYPE_t, ndim=1] vy): cdef int i, n cdef np.ndarray[np.uint8_t, ndim=1, cast=True] result n = x.shape[0] result = np.zeros(n, DTYPE_BOOL) for i in range(n): result[i] = point_in_polygon(x[i], y[i], vx, vy) return result cdef int point_in_polygon(double x, double y, np.ndarray[DTYPE_t, ndim=1] vx, np.ndarray[DTYPE_t, ndim=1] vy): """ Determine whether a test point (x, y) is within a polygon defined by a set of vertices (vx, vy). This uses the even-odd rule, as described here: https://en.wikipedia.org/wiki/Even–odd_rule """ cdef int i, j, k, m, n cdef int result n = vx.shape[0] result = 0 for i in range(n): j = (i + n - 1) % n if(((vy[i] > y) != (vy[j] > y)) and (x < (vx[j] - vx[i]) * (y - vy[i]) / (vy[j] - vy[i]) + vx[i])): result += 1 return result % 2 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/_geometry/polygonal_overlap.pyx0000644000175100001770000000700014525470416022377 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst # cython: language_level=3 import numpy as np cimport numpy as np from .pnpoly cimport point_in_polygon __all__ = ['polygonal_overlap_grid'] DTYPE = np.float64 ctypedef np.float64_t DTYPE_t def polygonal_overlap_grid(double xmin, double xmax, double ymin, double ymax, int nx, int ny, np.ndarray[DTYPE_t, ndim=1] vx, np.ndarray[DTYPE_t, ndim=1] vy, int use_exact, int subpixels): """ polygonal_overlap_grid(xmin, xmax, ymin, ymax, nx, ny, r, use_exact, subpixels) Area of overlap between a polygon and a pixel grid. Parameters ---------- xmin, xmax, ymin, ymax : float Extent of the grid in the x and y direction. nx, ny : int Grid dimensions. vx, vy : `numpy.ndarray` The vertices of the polygon use_exact : 0 or 1 If ``1`` calculates exact overlap, if ``0`` uses ``subpixel`` number of subpixels to calculate the overlap. subpixels : int Each pixel resampled by this factor in each dimension, thus each pixel is divided into ``subpixels ** 2`` subpixels. Returns ------- frac : `~numpy.ndarray` (float) 2-d array of shape (ny, nx) giving the fraction of the overlap. """ cdef unsigned int i, j cdef double x, y, dx, dy, d, pixel_radius cdef double bxmin, bxmax, bymin, bymax cdef double pxmin, pxcen, pxmax, pymin, pycen, pymax # Define output array cdef np.ndarray[DTYPE_t, ndim=2] frac = np.zeros([ny, nx], dtype=DTYPE) if use_exact == 1: raise NotImplementedError("Exact mode has not been implemented for " "polygonal apertures") # Find the width of each element in x and y dx = (xmax - xmin) / nx dy = (ymax - ymin) / ny # Define bounding box bxmin = vx.min() bxmax = vx.max() bymin = vy.min() bymax = vy.max() for i in range(nx): pxmin = xmin + i * dx # lower end of pixel pxmax = pxmin + dx # upper end of pixel if pxmax > bxmin and pxmin < bxmax: for j in range(ny): pymin = ymin + j * dy pymax = pymin + dy if pymax > bymin and pymin < bymax: frac[j, i] = polygonal_overlap_single_subpixel(pxmin, pymin, pxmax, pymax, vx, vy, subpixels) return frac cdef double polygonal_overlap_single_subpixel(double x0, double y0, double x1, double y1, np.ndarray[DTYPE_t, ndim=1] vx, np.ndarray[DTYPE_t, ndim=1] vy, int subpixels): """ Return the fraction of overlap between a polygon and a single pixel with given extent, using a sub-pixel sampling method. """ cdef unsigned int i, j cdef double x, y, dx, dy cdef double frac = 0. # Accumulator. dx = (x1 - x0) / subpixels dy = (y1 - y0) / subpixels x = x0 - 0.5 * dx for i in range(subpixels): x += dx y = y0 - 0.5 * dy for j in range(subpixels): y += dy if point_in_polygon(x, y, vx, vy) == 1: frac += 1. return frac / (subpixels * subpixels) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/_geometry/rectangular_overlap.pyx0000644000175100001770000000775614525470416022724 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst # cython: language_level=3 """ This module provides tools to calculate the area of overlap between a rectangle and a pixel grid. """ import numpy as np cimport numpy as np __all__ = ['rectangular_overlap_grid'] cdef extern from "math.h": double asin(double x) double sin(double x) double cos(double x) double sqrt(double x) double fabs(double x) from cpython cimport bool DTYPE = np.float64 ctypedef np.float64_t DTYPE_t cimport cython def rectangular_overlap_grid(double xmin, double xmax, double ymin, double ymax, int nx, int ny, double width, double height, double theta, int use_exact, int subpixels): """ rectangular_overlap_grid(xmin, xmax, ymin, ymax, nx, ny, width, height, use_exact, subpixels) Area of overlap between a rectangle and a pixel grid. The rectangle is centered on the origin. Parameters ---------- xmin, xmax, ymin, ymax : float Extent of the grid in the x and y direction. nx, ny : int Grid dimensions. width : float The width of the rectangle height : float The height of the rectangle theta : float The position angle of the rectangle in radians (counterclockwise). use_exact : 0 or 1 If set to 1, calculates the exact overlap, while if set to 0, uses a subpixel sampling method with ``subpixel`` subpixels in each direction. subpixels : int If ``use_exact`` is 0, each pixel is resampled by this factor in each dimension. Thus, each pixel is divided into ``subpixels ** 2`` subpixels. Returns ------- frac : `~numpy.ndarray` 2-d array giving the fraction of the overlap. """ cdef unsigned int i, j cdef double x, y, dx, dy cdef double pxmin, pxmax, pymin, pymax # Define output array cdef np.ndarray[DTYPE_t, ndim=2] frac = np.zeros([ny, nx], dtype=DTYPE) if use_exact == 1: raise NotImplementedError("Exact mode has not been implemented for " "rectangular apertures") # Find the width of each element in x and y dx = (xmax - xmin) / nx dy = (ymax - ymin) / ny # TODO: can implement a bounding box here for efficiency (as for the # circular and elliptical aperture photometry) for i in range(nx): pxmin = xmin + i * dx # lower end of pixel pxmax = pxmin + dx # upper end of pixel for j in range(ny): pymin = ymin + j * dy pymax = pymin + dy frac[j, i] = rectangular_overlap_single_subpixel( pxmin, pymin, pxmax, pymax, width, height, theta, subpixels) return frac cdef double rectangular_overlap_single_subpixel(double x0, double y0, double x1, double y1, double width, double height, double theta, int subpixels): """ Return the fraction of overlap between a rectangle and a single pixel with given extent, using a sub-pixel sampling method. """ cdef unsigned int i, j cdef double x, y cdef double frac = 0. # Accumulator. cdef double cos_theta = cos(theta) cdef double sin_theta = sin(theta) cdef double half_width, half_height half_width = width / 2. half_height = height / 2. dx = (x1 - x0) / subpixels dy = (y1 - y0) / subpixels x = x0 - 0.5 * dx for i in range(subpixels): x += dx y = y0 - 0.5 * dy for j in range(subpixels): y += dy # Transform into frame of rotated rectangle x_tr = y * sin_theta + x * cos_theta y_tr = y * cos_theta - x * sin_theta if fabs(x_tr) < half_width and fabs(y_tr) < half_height: frac += 1. return frac / (subpixels * subpixels) ././@PaxHeader0000000000000000000000000000003200000000000010210 xustar0026 mtime=1700163875.51454 regions-0.8/regions/_geometry/tests/0000755000175100001770000000000014525470444017247 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/_geometry/tests/__init__.py0000644000175100001770000000000014525470416021345 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/_geometry/tests/test_circular_overlap_grid.py0000644000175100001770000000176014525470416025224 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst """ Tests for the circular_overlap_grid module. """ import itertools import pytest from numpy.testing import assert_allclose from regions._geometry import circular_overlap_grid grid_sizes = [50, 500, 1000] circ_sizes = [0.2, 0.4, 0.8] use_exact = [0, 1] subsamples = [1, 5, 10] arg_list = ['grid_size', 'circ_size', 'use_exact', 'subsample'] @pytest.mark.parametrize(('grid_size', 'circ_size', 'use_exact', 'subsample'), list(itertools.product(grid_sizes, circ_sizes, use_exact, subsamples))) def test_circular_overlap_grid(grid_size, circ_size, use_exact, subsample): """ Test normalization of the overlap grid to make sure that a fully enclosed pixel has a value of 1.0. """ g = circular_overlap_grid(-1.0, 1.0, -1.0, 1.0, grid_size, grid_size, circ_size, use_exact, subsample) assert_allclose(g.max(), 1.0) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/_geometry/tests/test_elliptical_overlap_grid.py0000644000175100001770000000243714525470416025544 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst """ Tests for the elliptical_overlap_grid module. """ import itertools import pytest from numpy.testing import assert_allclose from regions._geometry import elliptical_overlap_grid grid_sizes = [50, 500, 1000] maj_sizes = [0.2, 0.4, 0.8] min_sizes = [0.2, 0.4, 0.8] angles = [0.0, 0.5, 1.0] use_exact = [0, 1] subsamples = [1, 5, 10] arg_list = ['grid_size', 'maj_size', 'min_size', 'angle', 'use_exact', 'subsample'] @pytest.mark.parametrize(('grid_size', 'maj_size', 'min_size', 'angle', 'use_exact', 'subsample'), list(itertools.product(grid_sizes, maj_sizes, min_sizes, angles, use_exact, subsamples))) def test_elliptical_overlap_grid(grid_size, maj_size, min_size, angle, use_exact, subsample): """ Test normalization of the overlap grid to make sure that a fully enclosed pixel has a value of 1.0. """ g = elliptical_overlap_grid(-1.0, 1.0, -1.0, 1.0, grid_size, grid_size, maj_size, min_size, angle, use_exact, subsample) assert_allclose(g.max(), 1.0) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/_geometry/tests/test_rectangular_overlap_grid.py0000644000175100001770000000200014525470416025713 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst """ Tests for the rectangular_overlap_grid module. """ import itertools import pytest from numpy.testing import assert_allclose from regions._geometry import rectangular_overlap_grid grid_sizes = [50, 500, 1000] rect_sizes = [0.2, 0.4, 0.8] angles = [0.0, 0.5, 1.0] subsamples = [1, 5, 10] arg_list = ['grid_size', 'rect_size', 'angle', 'subsample'] @pytest.mark.parametrize(('grid_size', 'rect_size', 'angle', 'subsample'), list(itertools.product(grid_sizes, rect_sizes, angles, subsamples))) def test_rectangular_overlap_grid(grid_size, rect_size, angle, subsample): """ Test normalization of the overlap grid to make sure that a fully enclosed pixel has a value of 1.0. """ g = rectangular_overlap_grid(-1.0, 1.0, -1.0, 1.0, grid_size, grid_size, rect_size, rect_size, angle, 0, subsample) assert_allclose(g.max(), 1.0) ././@PaxHeader0000000000000000000000000000003200000000000010210 xustar0026 mtime=1700163875.51454 regions-0.8/regions/_utils/0000755000175100001770000000000014525470444015412 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/_utils/__init__.py0000644000175100001770000000026414525470416017524 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst """ This subpackage provides general-purpose utility functions. """ from .wcs_helpers import * # noqa: F401, F403 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/_utils/examples.py0000644000175100001770000001625614525470416017613 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst import numpy as np from astropy.coordinates import SkyCoord from astropy.io import fits from astropy.table import Table from astropy.table import vstack as table_vstack from astropy.utils import lazyproperty from astropy.wcs import WCS from regions.core.pixcoord import PixCoord __all__ = ['make_example_dataset'] def make_example_dataset(data='simulated', config=None): """ Make an example dataset. This is a factory function for ``ExampleDataset`` objects. The following config options are available (default values shown): * ``crval = 0, 0`` * ``crpix = 180, 90`` * ``cdelt = -1, 1`` * ``shape = 180, 360`` * ``ctype = 'GLON-AIT', 'GLAT-AIT'`` Parameters ---------- data : {'simulated', 'fermi'} The dataset to use. config : dict or None Configuration options. Returns ------- dataset : ``ExampleDataset`` An example dataset object. Examples -------- Make an example dataset: >>> from regions import make_example_dataset >>> config = dict(crpix=(18, 9), cdelt=(-10, 10), shape=(18, 36)) >>> dataset = make_example_dataset(data='simulated', config=config) Access properties of the ``dataset`` object: >>> dataset.source_table # doctest: +IGNORE_OUTPUT >>> dataset.event_table # doctest: +IGNORE_OUTPUT >>> dataset.wcs # doctest: +IGNORE_OUTPUT >>> dataset.image # doctest: +IGNORE_OUTPUT >>> dataset.hdu_list # doctest: +IGNORE_OUTPUT """ if data == 'simulated': return ExampleDatasetSimulated(config=config) elif data == 'fermi': return ExampleDatasetFermi(config=config) else: raise ValueError(f'Invalid selection data: {data}') class ExampleDataset: """ Base class for an example dataset. """ def __init__(self, config=None): config_default = dict() # These parameters are FITS WCS order: (x, y) config_default['crval'] = 0, 0 config_default['crpix'] = 180, 90 config_default['cdelt'] = -1, 1 # This parameter is numpy order: (y, x) config_default['shape'] = 180, 360 config_default['ctype'] = 'GLON-AIT', 'GLAT-AIT' # Callers can update the default config parameters they want. if config: config_default.update(config) self.config = config_default @lazyproperty def wcs(self): """World coordinate system (`~astropy.wcs.WCS`).""" wcs = WCS(naxis=2) wcs.wcs.crval = self.config['crval'] wcs.wcs.crpix = self.config['crpix'] wcs.wcs.cdelt = self.config['cdelt'] wcs.wcs.ctype = self.config['ctype'] return wcs @lazyproperty def image(self): """Counts image (`~astropy.io.fits.ImageHDU`).""" events = self.event_table skycoord = SkyCoord(events['GLON'], events['GLAT'], unit='deg', frame='galactic') pixcoord = PixCoord.from_sky(skycoord=skycoord, wcs=self.wcs) shape = self.config['shape'] bins = [np.arange(shape[0] + 1), np.arange(shape[1] + 1)] sample = np.vstack((pixcoord.y, pixcoord.x)).T data, _ = np.histogramdd(sample=sample, bins=bins) data = data.astype('float32') header = self.wcs.to_header() return fits.ImageHDU(data=data, header=header, name='image') @lazyproperty def hdu_list(self): """ HDU list (`~astropy.io.fits.HDUList`). Different pieces collected together in a HDU list. This method makes it easy to write the example dataset to a FITS file with multiple HDUs. """ hdu_list = fits.HDUList() hdu = _table_to_bintable(self.source_table) hdu.name = 'sources' hdu_list.append(hdu) hdu = _table_to_bintable(self.event_table) hdu.name = 'events' hdu_list.append(hdu) hdu = self.image hdu.name = 'image' hdu_list.append(hdu) return hdu_list class ExampleDatasetSimulated(ExampleDataset): """ Example simulated dataset. Similar to `ExampleDatasetFermi`, but simulated, not requiring any data files. """ @lazyproperty def source_table(self): """ Source table (`~astropy.table.Table`). Columns: GLON, GLAT, COUNTS """ table = Table() table['GLON'] = np.array([0, 45, 45], dtype='float32') table['GLAT'] = np.array([0, 0, 45], dtype='float32') table['COUNTS'] = np.array([100, 100, 100], dtype='int32') return table @lazyproperty def event_table(self): """ Event table (`~astropy.table.Table`). Columns: GLON, GLAT, SOURCE_IDX """ # Create event list table for each source tables = [] for source in self.source_table: lon = source['GLON'] * np.ones(source['COUNTS']) lat = source['GLAT'] * np.ones(source['COUNTS']) # TODO: scatter positions assuming Gaussian PSF on the sky # using SkyOffsetFrame. # coord = SkyCoord(lon, lat, unit='deg', frame='galactic') table = Table() table['GLON'] = lon table['GLAT'] = lat table['SOURCE_IDX'] = source.index tables.append(table) # Stack all tables together table = table_vstack(tables) return table class ExampleDatasetFermi(ExampleDataset): """ Example real dataset using Fermi-LAT 2FHL source catalog and event list. When saving the HDU list to a FITS file, the file size is 748K, with the 65k EVENTS taking up most of the space. """ @lazyproperty def source_table(self): """ Source table (`~astropy.table.Table`). Columns: GLON, GLAT, COUNTS """ url = ('https://github.com/gammapy/gammapy-extra/raw/master/datasets/' 'fermi_2fhl/gll_psch_v08.fit.gz') table = Table.read(url, hdu='2FHL Source Catalog') table.rename_column('Npred', 'COUNTS') table.keep_columns(['GLON', 'GLAT', 'COUNTS']) table.meta.clear() return table @lazyproperty def event_table(self): """ Event table (`~astropy.table.Table`). Columns: GLON, GLAT """ url = ('https://github.com/gammapy/gammapy-extra/raw/master/datasets/' 'fermi_2fhl/2fhl_events.fits.gz') table = Table.read(url, hdu='EVENTS') table.rename_column('L', 'GLON') table.rename_column('B', 'GLAT') table.keep_columns(['GLON', 'GLAT']) table.meta.clear() return table def _table_to_bintable(table): """ Convert a `~astropy.table.Table` to a `astropy.io.fits.BinTable`. """ data = table.as_array() header = fits.Header() header.update(table.meta) name = table.meta.pop('name', None) return fits.BinTableHDU(data, header, name=name) if __name__ == '__main__': dataset = make_example_dataset(data='simulated') dataset.hdu_list.writeto('example-dataset-simulated.fits', overwrite=True) dataset = make_example_dataset(data='fermi') dataset.hdu_list.writeto('example-dataset-fermi.fits', overwrite=True) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/_utils/optional_deps.py0000644000175100001770000000065414525470416020630 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst try: import matplotlib HAS_MATPLOTLIB = True MPL_VERSION = getattr(matplotlib, '__version__', None) if MPL_VERSION is None: MPL_VERSION = matplotlib._version.version MPL_VERSION = MPL_VERSION.split('.') MPL_VERSION = 10 * int(MPL_VERSION[0]) + int(MPL_VERSION[1]) except ImportError: HAS_MATPLOTLIB = False MPL_VERSION = 0 ././@PaxHeader0000000000000000000000000000003200000000000010210 xustar0026 mtime=1700163875.51454 regions-0.8/regions/_utils/tests/0000755000175100001770000000000014525470444016554 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/_utils/tests/__init__.py0000644000175100001770000000000014525470416020652 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/_utils/tests/test_examples.py0000644000175100001770000000243314525470416022004 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst import numpy as np from numpy.testing import assert_allclose from regions._utils.examples import make_example_dataset class TestExampleSimulatedDataset: def setup_method(self): self.dataset = make_example_dataset(data='simulated') def test_source_table(self): source_table = self.dataset.source_table assert len(source_table) == 3 def test_event_table(self): # source_table = self.dataset.source_table event_table = self.dataset.event_table assert len(event_table) == 300 def test_wcs(self): wcs = self.dataset.wcs assert_allclose(wcs.wcs.crval, (0, 0)) assert_allclose(wcs.wcs.crpix, (180, 90)) assert_allclose(wcs.wcs.cdelt, (-1, 1)) assert wcs.wcs.ctype[0] == 'GLON-AIT' assert wcs.wcs.ctype[1] == 'GLAT-AIT' def test_image(self): image = self.dataset.image assert image.data.shape == (180, 360) assert np.nansum(image.data) == 300 def test_hdu_list(self): hdu_list = self.dataset.hdu_list # Check that all data is present assert hdu_list[1] == hdu_list['sources'] assert hdu_list[2] == hdu_list['events'] assert hdu_list[3] == hdu_list['image'] ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/_utils/wcs_helpers.py0000644000175100001770000000424114525470416020302 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst # (taken from photutils: should probably migrate into astropy.wcs) """ This module provides WCS helper tools. """ import astropy.units as u import numpy as np from regions.core.pixcoord import PixCoord def pixel_scale_angle_at_skycoord(skycoord, wcs, offset=1 * u.arcsec): """ Calculate the pixel coordinate and scale and WCS rotation angle at the position of a SkyCoord coordinate. Parameters ---------- skycoord : `~astropy.coordinates.SkyCoord` The SkyCoord coordinate. wcs : WCS object A world coordinate system (WCS) transformation that supports the `astropy shared interface for WCS `_ (e.g., `astropy.wcs.WCS`, `gwcs.wcs.WCS`). offset : `~astropy.units.Quantity` A small angular offset to use to compute the pixel scale and position angle. Returns ------- pixcoord : `~regions.core.PixCoord` The pixel coordinate. scale : `~astropy.units.Quantity` The pixel scale in arcsec/pixel. angle : `~astropy.units.Quantity` The angle (in degrees) measured counterclockwise from the positive x axis to the "North" axis of the celestial coordinate system. Notes ----- If distortions are present in the image, the x and y pixel scales likely differ. This function computes a single pixel scale along the North/South axis. """ # Convert to pixel coordinates x, y = wcs.world_to_pixel(skycoord) pixcoord = PixCoord(x=x, y=y) # We take a point directly North (i.e., latitude offset) the # input sky coordinate and convert it to pixel coordinates, # then we use the pixel deltas between the input and offset sky # coordinate to calculate the pixel scale and angle. skycoord_offset = skycoord.directional_offset_by(0.0, offset) x_offset, y_offset = wcs.world_to_pixel(skycoord_offset) dx = x_offset - x dy = y_offset - y scale = offset.to(u.arcsec) / (np.hypot(dx, dy) * u.pixel) angle = (np.arctan2(dy, dx) * u.radian).to(u.deg) return pixcoord, scale, angle ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/conftest.py0000644000175100001770000000225014525470416016310 0ustar00runnerdocker# This file is used to configure the behavior of pytest when using the Astropy # test infrastructure. It needs to live inside the package in order for it to # get picked up when running the tests inside an interpreter using # packagename.test import numpy as np from astropy.utils import minversion try: from pytest_astropy_header.display import (PYTEST_HEADER_MODULES, TESTED_VERSIONS) ASTROPY_HEADER = True except ImportError: ASTROPY_HEADER = False # do not remove until we drop support for NumPy < 2.0 if minversion(np, '2.0.0.dev0+git20230726'): np.set_printoptions(legacy='1.25') def pytest_configure(config): if ASTROPY_HEADER: config.option.astropy_header = True # Customize the following lines to add/remove entries from the # list of packages for which version numbers are displayed when # running the tests. PYTEST_HEADER_MODULES.clear() deps = ['NumPy', 'Matplotlib', 'Astropy', 'Shapely'] for dep in deps: PYTEST_HEADER_MODULES[dep] = dep.lower() from regions import __version__ TESTED_VERSIONS['regions'] = __version__ ././@PaxHeader0000000000000000000000000000003200000000000010210 xustar0026 mtime=1700163875.51854 regions-0.8/regions/core/0000755000175100001770000000000014525470444015043 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/core/__init__.py0000644000175100001770000000074314525470416017157 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst """ This subpackage provides the core functionality for regions. """ from .attributes import * # noqa: F401, F403 from .bounding_box import * # noqa: F401, F403 from .compound import * # noqa: F401, F403 from .core import * # noqa: F401, F403 from .mask import * # noqa: F401, F403 from .metadata import * # noqa: F401, F403 from .pixcoord import * # noqa: F401, F403 from .regions import * # noqa: F401, F403 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/core/attributes.py0000644000175100001770000001410114525470416017577 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst """ The module provides several custom descriptor classes for attribute validation of region classes. """ import abc import numpy as np from astropy.coordinates import SkyCoord from astropy.units import Quantity from regions.core.metadata import RegionMeta, RegionVisual from regions.core.pixcoord import PixCoord __all__ = [] class RegionAttribute(abc.ABC): """ Base descriptor class for region attribute validation. Parameters ---------- doc : str, optional The documentation string for the attribute. """ def __init__(self, doc=''): self.__doc__ = doc def __set_name__(self, owner, name): self.name = name def __get__(self, instance, owner): if instance is None: return self # pragma: no cover return instance.__dict__[self.name] def __set__(self, instance, value): self._validate(value) instance.__dict__[self.name] = value def __delete__(self, instance): raise AttributeError(f'cannot delete {self.name!r}') @abc.abstractmethod def _validate(self, value): """ Validate the attribute value. An exception is raised if the value is invalid. """ raise NotImplementedError # pragma: no cover class ScalarPixCoord(RegionAttribute): """ Descriptor class to check that value is a scalar `~regions.PixCoord`. """ def _validate(self, value): if not (isinstance(value, PixCoord) and value.isscalar): raise ValueError(f'{self.name!r} must be a scalar PixCoord') class OneDPixCoord(RegionAttribute): """ Descriptor class to check that value is a 1D `~regions.PixCoord`. """ def _validate(self, value): if not (isinstance(value, PixCoord) and not value.isscalar and value.x.ndim == 1): raise ValueError(f'{self.name!r} must be a 1D PixCoord') class PositiveScalar(RegionAttribute): """ Descriptor class to check that value is a strictly positive (> 0) scalar float/int (not `~astropy.units.Quantity`). """ def _validate(self, value): if isinstance(value, Quantity): raise ValueError(f'{self.name!r} must be a scalar integer or ' 'float') if not np.isscalar(value) or value <= 0: raise ValueError(f'{self.name!r} must be a strictly positive ' 'scalar') class ScalarSkyCoord(RegionAttribute): """ Descriptor class to check that value is a scalar `~astropy.coordinates.SkyCoord`. """ def _validate(self, value): if not (isinstance(value, SkyCoord) and value.isscalar): raise ValueError(f'{self.name!r} must be a scalar SkyCoord') class OneDSkyCoord(RegionAttribute): """ Descriptor class to check that value is a 1D `~astropy.coordinates.SkyCoord`. """ def _validate(self, value): if not (isinstance(value, SkyCoord) and value.ndim == 1): raise ValueError(f'{self.name!r} must be a 1D SkyCoord') class ScalarAngle(RegionAttribute): """ Descriptor class to check that value is a scalar angle, either an `~astropy.coordinates.Angle` or `~astropy.units.Quantity` with angular units. """ def _validate(self, value): if isinstance(value, Quantity): if not value.isscalar: raise ValueError(f'{self.name!r} must be a scalar') if not value.unit.physical_type == 'angle': raise ValueError(f'{self.name!r} must have angular units') else: raise ValueError(f'{self.name!r} must be a scalar angle') class PositiveScalarAngle(RegionAttribute): """ Descriptor class to check that value is a strictly positive scalar angle, either an `~astropy.coordinates.Angle` or `~astropy.units.Quantity` with angular units. """ def _validate(self, value): if isinstance(value, Quantity): if not value.isscalar: raise ValueError(f'{self.name!r} must be a scalar') if not value.unit.physical_type == 'angle': raise ValueError(f'{self.name!r} must have angular units') if not value > 0: raise ValueError(f'{self.name!r} must be strictly positive') else: raise ValueError(f'{self.name!r} must be a strictly positive ' 'scalar angle') class RegionType(RegionAttribute): """ Descriptor class to check the region type of value. """ def __init__(self, name, regionclass): super().__init__(name) self.regionclass = regionclass def _validate(self, value): if not isinstance(value, self.regionclass): raise ValueError(f'{self.name!r} must be a ' f'{self.regionclass.__name__} object') class RegionMetaDescr(RegionAttribute): """ Descriptor class for the region meta dictionary. If input as a pure `dict`, it will be converted to a `RegionMeta` object. """ def __set__(self, instance, value): # RegionMeta subclasses dict if isinstance(value, dict) and not isinstance(value, RegionMeta): value = RegionMeta(value) super().__set__(instance, value) def _validate(self, value): if not isinstance(value, RegionMeta): raise ValueError(f'{self.name!r} must be a dict or RegionMeta ' 'object') class RegionVisualDescr(RegionAttribute): """ Descriptor class for the region visual dictionary. If input as a pure `dict`, it will be converted to a `RegionVisual` object. """ def __set__(self, instance, value): # RegionVisual subclasses dict if isinstance(value, dict) and not isinstance(value, RegionVisual): value = RegionVisual(value) super().__set__(instance, value) def _validate(self, value): if not isinstance(value, RegionVisual): raise ValueError(f'{self.name!r} must be a dict or RegionVisual ' 'object') ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/core/bounding_box.py0000644000175100001770000003024214525470416020072 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst """ This module defines a class for a rectangular bounding box. """ import numpy as np from astropy.io.fits.util import _is_int __all__ = ['RegionBoundingBox'] class RegionBoundingBox: """ A rectangular bounding box in integer (not float) pixel indices. Parameters ---------- ixmin, ixmax, iymin, iymax : int The bounding box pixel indices. Note that the upper values (``iymax`` and ``ixmax``) are exclusive as for normal slices in Python. The lower values (``ixmin`` and ``iymin``) must not be greater than the respective upper values (``ixmax`` and ``iymax``). Examples -------- >>> from regions import RegionBoundingBox >>> # constructing a RegionBoundingBox like this is cryptic: >>> bbox = RegionBoundingBox(1, 10, 2, 20) >>> # it's better to use keyword arguments for readability: >>> bbox = RegionBoundingBox(ixmin=1, ixmax=10, iymin=2, iymax=20) >>> bbox # nice repr, useful for interactive work RegionBoundingBox(ixmin=1, ixmax=10, iymin=2, iymax=20) >>> # sometimes it's useful to check if two bounding boxes are the same >>> bbox == RegionBoundingBox(ixmin=1, ixmax=10, iymin=2, iymax=20) True >>> bbox == RegionBoundingBox(ixmin=7, ixmax=10, iymin=2, iymax=20) False >>> # "center" and "shape" can be useful when working with numpy arrays >>> bbox.center # numpy order: (y, x) (10.5, 5.0) >>> bbox.shape # numpy order: (y, x) (18, 9) >>> # "extent" is useful when plotting the RegionBoundingBox with >>> # matplotlib >>> bbox.extent # matplotlib order: (x, y) (0.5, 9.5, 1.5, 19.5) """ def __init__(self, ixmin, ixmax, iymin, iymax): if not _is_int(ixmin): raise TypeError('ixmin must be an integer') if not _is_int(ixmax): raise TypeError('ixmax must be an integer') if not _is_int(iymin): raise TypeError('iymin must be an integer') if not _is_int(iymax): raise TypeError('iymax must be an integer') if ixmin > ixmax: raise ValueError('ixmin must be <= ixmax') if iymin > iymax: raise ValueError('iymin must be <= iymax') self.ixmin = ixmin self.ixmax = ixmax self.iymin = iymin self.iymax = iymax @classmethod def from_float(cls, xmin, xmax, ymin, ymax): """ Return the smallest bounding box that fully contains a given rectangle defined by float coordinate values. Following the pixel index convention, an integer index corresponds to the center of a pixel and the pixel edges span from (index - 0.5) to (index + 0.5). For example, the pixel edge spans of the following pixels are: - pixel 0: from -0.5 to 0.5 - pixel 1: from 0.5 to 1.5 - pixel 2: from 1.5 to 2.5 In addition, because `RegionBoundingBox` upper limits are exclusive (by definition), 1 is added to the upper pixel edges. See examples below. Parameters ---------- xmin, xmax, ymin, ymax : float Float coordinates defining a rectangle. The lower values (``xmin`` and ``ymin``) must not be greater than the respective upper values (``xmax`` and ``ymax``). Returns ------- bbox : `RegionBoundingBox` object The minimal ``RegionBoundingBox`` object fully containing the input rectangle coordinates. Examples -------- >>> from regions import RegionBoundingBox >>> RegionBoundingBox.from_float(xmin=1.0, xmax=10.0, ... ymin=2.0, ymax=20.0) RegionBoundingBox(ixmin=1, ixmax=11, iymin=2, iymax=21) >>> RegionBoundingBox.from_float(xmin=1.4, xmax=10.4, ... ymin=1.6, ymax=10.6) RegionBoundingBox(ixmin=1, ixmax=11, iymin=2, iymax=12) """ ixmin = int(np.floor(xmin + 0.5)) ixmax = int(np.ceil(xmax + 0.5)) iymin = int(np.floor(ymin + 0.5)) iymax = int(np.ceil(ymax + 0.5)) return cls(ixmin, ixmax, iymin, iymax) def __eq__(self, other): if not isinstance(other, RegionBoundingBox): raise TypeError('Can compare RegionBoundingBox only to another ' 'RegionBoundingBox.') return ((self.ixmin == other.ixmin) and (self.ixmax == other.ixmax) and (self.iymin == other.iymin) and (self.iymax == other.iymax)) def __or__(self, other): return self.union(other) def __and__(self, other): return self.intersection(other) def __repr__(self): return (f'{self.__class__.__name__}(ixmin={self.ixmin}, ' f'ixmax={self.ixmax}, iymin={self.iymin}, ' f'iymax={self.iymax})') @property def center(self): """ The ``(y, x)`` center of the bounding box. """ return (0.5 * (self.iymax - 1 + self.iymin), 0.5 * (self.ixmax - 1 + self.ixmin)) @property def shape(self): """ The ``(ny, nx)`` shape of the bounding box. """ return self.iymax - self.iymin, self.ixmax - self.ixmin def get_overlap_slices(self, shape): """ Get slices for the overlapping part of the bounding box and an 2D array. Parameters ---------- shape : 2-tuple of int The shape of the 2D array. Returns ------- slices_large : tuple of slices or `None` A tuple of slice objects for each axis of the large array, such that ``large_array[slices_large]`` extracts the region of the large array that overlaps with the small array. `None` is returned if there is no overlap of the bounding box with the given image shape. slices_small : tuple of slices or `None` A tuple of slice objects for each axis of an array enclosed by the bounding box such that ``small_array[slices_small]`` extracts the region that is inside the large array. `None` is returned if there is no overlap of the bounding box with the given image shape. """ if len(shape) != 2: raise ValueError('input shape must have 2 elements.') xmin = self.ixmin xmax = self.ixmax ymin = self.iymin ymax = self.iymax if xmin >= shape[1] or ymin >= shape[0] or xmax <= 0 or ymax <= 0: # no overlap of the bounding box with the input shape return None, None slices_large = (slice(max(ymin, 0), min(ymax, shape[0])), slice(max(xmin, 0), min(xmax, shape[1]))) slices_small = (slice(max(-ymin, 0), min(ymax - ymin, shape[0] - ymin)), slice(max(-xmin, 0), min(xmax - xmin, shape[1] - xmin))) return slices_large, slices_small @property def extent(self): """ The extent of the mask, defined as the ``(xmin, xmax, ymin, ymax)`` bounding box from the bottom-left corner of the lower-left pixel to the upper-right corner of the upper-right pixel. The upper edges here are the actual pixel positions of the edges, i.e., they are not "exclusive" indices used for python indexing. This is useful for plotting the bounding box using Matplotlib. """ return (self.ixmin - 0.5, self.ixmax - 0.5, self.iymin - 0.5, self.iymax - 0.5) def as_artist(self, **kwargs): """ Return a `matplotlib.patches.Rectangle` that represents the bounding box. Parameters ---------- **kwargs : dict Any keyword arguments accepted by `matplotlib.patches.Patch`. Returns ------- result : `matplotlib.patches.Rectangle` A matplotlib rectangular patch. Examples -------- .. plot:: :include-source: import numpy as np import matplotlib.pyplot as plt from regions import RegionBoundingBox bbox = RegionBoundingBox(2, 7, 3, 8) fig = plt.figure() ax = fig.add_subplot(1, 1, 1) rng = np.random.default_rng(0) ax.imshow(rng.random((10, 10)), interpolation='nearest', cmap='viridis') ax.add_patch(bbox.as_artist(facecolor='none', edgecolor='white', lw=2.)) """ from matplotlib.patches import Rectangle return Rectangle(xy=(self.extent[0], self.extent[2]), width=self.shape[1], height=self.shape[0], **kwargs) def to_region(self): """ Return a `~regions.RectanglePixelRegion` that represents the bounding box. """ from regions.core.pixcoord import PixCoord from regions.shapes import RectanglePixelRegion xypos = PixCoord(*self.center[::-1]) height, width = self.shape return RectanglePixelRegion(center=xypos, width=width, height=height) def plot(self, origin=(0, 0), ax=None, **kwargs): """ Plot the `RegionBoundingBox` on a matplotlib `~matplotlib.axes.Axes` instance. Parameters ---------- origin : array_like, optional The ``(x, y)`` position of the origin of the displayed image. ax : `matplotlib.axes.Axes`, optional If `None`, then the current `~matplotlib.axes.Axes` instance is used. **kwargs : dict Any keyword arguments accepted by `matplotlib.patches.Patch`. Returns ------- patch : `matplotlib.patches.Patch` The matplotlib patch object for the plotted bounding box. The patch can be used, for example, when adding a plot legend. """ reg = self.to_region() return reg.plot(origin=origin, ax=ax, **kwargs) def union(self, other): """ Return a `RegionBoundingBox` representing the union of this `RegionBoundingBox` with another `RegionBoundingBox`. Parameters ---------- other : `~regions.RegionBoundingBox` The `RegionBoundingBox` to join with this one. Returns ------- result : `~regions.RegionBoundingBox` A `RegionBoundingBox` representing the union of the input `RegionBoundingBox` with this one. """ if not isinstance(other, RegionBoundingBox): raise TypeError('RegionBoundingBox can be joined only with ' 'another RegionBoundingBox.') ixmin = min((self.ixmin, other.ixmin)) ixmax = max((self.ixmax, other.ixmax)) iymin = min((self.iymin, other.iymin)) iymax = max((self.iymax, other.iymax)) return RegionBoundingBox(ixmin=ixmin, ixmax=ixmax, iymin=iymin, iymax=iymax) def intersection(self, other): """ Return a `RegionBoundingBox` representing the intersection of this `RegionBoundingBox` with another `RegionBoundingBox`. Parameters ---------- other : `~regions.RegionBoundingBox` The `RegionBoundingBox` to intersect with this one. Returns ------- result : `~regions.RegionBoundingBox` A `RegionBoundingBox` representing the intersection of the input `RegionBoundingBox` with this one. """ if not isinstance(other, RegionBoundingBox): raise TypeError('RegionBoundingBox can be intersected only with ' 'another RegionBoundingBox.') ixmin = max(self.ixmin, other.ixmin) ixmax = min(self.ixmax, other.ixmax) iymin = max(self.iymin, other.iymin) iymax = min(self.iymax, other.iymax) if ixmax < ixmin or iymax < iymin: return None return RegionBoundingBox(ixmin=ixmin, ixmax=ixmax, iymin=iymin, iymax=iymax) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/core/compound.py0000644000175100001770000002042414525470416017242 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst import operator as op import numpy as np from regions.core.attributes import RegionType from regions.core.core import PixelRegion, SkyRegion from regions.core.mask import RegionMask from regions.core.metadata import RegionMeta, RegionVisual __all__ = ['CompoundPixelRegion', 'CompoundSkyRegion'] class CompoundPixelRegion(PixelRegion): """ A class that represents the logical combination of two regions in pixel coordinates. Parameters ---------- region1 : `~regions.PixelRegion` The inner Pixel region. region2 : `~regions.PixelRegion` The outer Pixel region. operator : callable A callable binary operator. meta : `~regions.RegionMeta`, optional A dictionary that stores the meta attributes of this region. visual : `~regions.RegionVisual`, optional A dictionary that stores the visual meta attributes of this region. """ _params = ('region1', 'region2', 'operator') _mpl_artist = 'Patch' region1 = RegionType('region1', PixelRegion) region2 = RegionType('region2', PixelRegion) def __init__(self, region1, region2, operator, meta=None, visual=None): if not callable(operator): raise TypeError('operator must be callable') self.region1 = region1 self.region2 = region2 if meta is None: self.meta = region1.meta else: self.meta = meta if visual is None: self.visual = region1.visual else: self.visual = visual self._operator = operator @property def operator(self): return self._operator def contains(self, pixcoord): in_reg = self.operator(self.region1.contains(pixcoord), self.region2.contains(pixcoord)) if self.meta.get('include', True): return in_reg else: return np.logical_not(in_reg) def to_mask(self, mode='center', subpixels=1): if mode != 'center': raise NotImplementedError mask1 = self.region1.to_mask(mode=mode, subpixels=subpixels) mask2 = self.region2.to_mask(mode=mode, subpixels=subpixels) # Common bounding box bbox = self.bounding_box # Pad mask1.data and mask2.data to get the same shape padded_data = list() for mask in (mask1, mask2): pleft = abs(mask.bbox.ixmin - bbox.ixmin) pright = abs(bbox.ixmax - mask.bbox.ixmax) ptop = abs(bbox.iymax - mask.bbox.iymax) pbottom = abs(mask.bbox.iymin - bbox.iymin) padded_data.append(np.pad(mask.data, ((pbottom, ptop), (pleft, pright)), 'constant')) data = self.operator(*np.array(padded_data, dtype=int)) return RegionMask(data=data, bbox=bbox) def to_sky(self, wcs): skyreg1 = self.region1.to_sky(wcs=wcs) skyreg2 = self.region2.to_sky(wcs=wcs) return CompoundSkyRegion(region1=skyreg1, operator=self.operator, region2=skyreg2, meta=self.meta.copy(), visual=self.visual.copy()) @staticmethod def _make_annulus_path(patch_inner, patch_outer): """ Define a matplotlib annulus path from two patches. This preserves the cubic Bezier curves (CURVE4) of the aperture paths. Taken from ``photutils.aperture.core``. """ import matplotlib.path as mpath path_inner = patch_inner.get_path() transform_inner = patch_inner.get_transform() path_inner = transform_inner.transform_path(path_inner) path_outer = patch_outer.get_path() transform_outer = patch_outer.get_transform() path_outer = transform_outer.transform_path(path_outer) verts_inner = path_inner.vertices[:-1][::-1] verts_inner = np.concatenate((verts_inner, [verts_inner[-1]])) verts = np.vstack((path_outer.vertices, verts_inner)) codes = np.hstack((path_outer.codes, path_inner.codes)) return mpath.Path(verts, codes) def as_artist(self, origin=(0, 0), **kwargs): """ Return a matplotlib patch object for this region (`matplotlib.patches.PathPatch`). Parameters ---------- origin : array_like, optional The ``(x, y)`` pixel position of the origin of the displayed image. **kwargs : `dict` Any keyword arguments accepted by `~matplotlib.patches.PathPatch`. Returns ------- patch : `~matplotlib.patches.PathPatch` A matplotlib patch object. """ if (self.region1.center == self.region2.center and self.operator is op.xor): import matplotlib.patches as mpatches # set mpl_kwargs before as_artist is called on region1 and # region2 mpl_kwargs = self.visual.define_mpl_kwargs(self._mpl_artist) mpl_kwargs.update(kwargs) patch_inner = self.region1.as_artist(origin=origin) patch_outer = self.region2.as_artist(origin=origin) path = self._make_annulus_path(patch_inner, patch_outer) patch = mpatches.PathPatch(path, **mpl_kwargs) return patch else: raise ValueError('unable to convert region to matplotlib ' f'artist: {self}') @property def bounding_box(self): return self.region1.bounding_box | self.region2.bounding_box @property def area(self): raise NotImplementedError def rotate(self, center, angle): """ Rotate the region. Positive ``angle`` corresponds to counter-clockwise rotation. Parameters ---------- center : `~regions.PixCoord` The rotation center point. angle : `~astropy.coordinates.Angle` The rotation angle. Returns ------- region : `CompoundPixelRegion` The rotated region (which is an independent copy). """ region1 = self.region1.rotate(center, angle) region2 = self.region2.rotate(center, angle) return self.copy(region1=region1, region2=region2) class CompoundSkyRegion(SkyRegion): """ A class that represents the logical combination of two regions in sky coordinates. Parameters ---------- region1 : `~regions.SkyRegion` The inner sky region. region2 : `~regions.SkyRegion` The outer sky region. operator : callable A callable binary operator. meta : `~regions.RegionMeta`, optional A dictionary that stores the meta attributes of this region. visual : `~regions.RegionVisual`, optional A dictionary that stores the visual meta attributes of this region. """ _params = ('region1', 'region2', 'operator') region1 = RegionType('region1', SkyRegion) region2 = RegionType('region2', SkyRegion) def __init__(self, region1, region2, operator, meta=None, visual=None): if not callable(operator): raise TypeError('operator must be callable') self.region1 = region1 self.region2 = region2 if meta is None: self.meta = region1.meta else: self.meta = RegionMeta() if visual is None: self.visual = region1.visual else: self.visual = RegionVisual() self._operator = operator @property def operator(self): return self._operator def contains(self, skycoord, wcs): in_reg = self.operator(self.region1.contains(skycoord, wcs), self.region2.contains(skycoord, wcs)) if self.meta.get('include', True): return in_reg else: return np.logical_not(in_reg) def to_pixel(self, wcs): pixreg1 = self.region1.to_pixel(wcs=wcs) pixreg2 = self.region2.to_pixel(wcs=wcs) return CompoundPixelRegion(region1=pixreg1, operator=self.operator, region2=pixreg2, meta=self.meta.copy(), visual=self.visual.copy()) def as_artist(self, ax, **kwargs): raise NotImplementedError ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/core/core.py0000644000175100001770000003550614525470416016355 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst import abc import copy import operator import numpy as np from regions.core.metadata import RegionMeta, RegionVisual from regions.core.pixcoord import PixCoord from regions.core.registry import RegionsRegistry __all__ = ['Region', 'PixelRegion', 'SkyRegion'] __doctest_skip__ = ['Region.serialize', 'Region.write'] class Region(abc.ABC): """ Base class for all regions. """ _params = () def copy(self, **changes): """ Make an independent (deep) copy. """ fields = list(self._params) + ['meta', 'visual'] for field in fields: if field not in changes: changes[field] = copy.deepcopy(getattr(self, field)) return self.__class__(**changes) def __repr__(self): prefix = f'{self.__class__.__name__}' cls_info = [] if self._params is not None: for param in self._params: if param == 'text': # place quotes around text value keyval = f'{param}={getattr(self, param)!r}' else: keyval = f'{param}={getattr(self, param)}' cls_info.append(keyval) cls_info = ', '.join(cls_info) return f'<{prefix}({cls_info})>' def __str__(self): cls_info = [('Region', self.__class__.__name__)] if self._params is not None: for param in self._params: if param == 'text': # place quotes around text value keyval = (param, repr(getattr(self, param))) else: keyval = (param, getattr(self, param)) cls_info.append(keyval) return '\n'.join([f'{key}: {val}' for key, val in cls_info]) def __eq__(self, other): """ Equality operator for Region. All Region properties are compared for strict equality except for Quantity parameters, which allow for different units if they are directly convertible. """ if not isinstance(other, self.__class__): return False meta_params = ['meta', 'visual'] self_params = list(self._params) + meta_params other_params = list(other._params) + meta_params # check that both have identical parameters if self_params != other_params: return False # now check the parameter values # Note that Quantity comparisons allow for different units # if they directly convertible (e.g., 1. * u.deg == 60. * u.arcmin) try: for param in self_params: # np.any is used for SkyCoord array comparisons if np.any(getattr(self, param) != getattr(other, param)): return False except TypeError: # TypeError is raised from SkyCoord comparison when they do # not have equivalent frames. Here return False instead of # the TypeError. return False return True def __ne__(self, other): """ Inequality operator for Region. """ return not (self == other) @abc.abstractmethod def intersection(self, other): """ Return a region representing the intersection of this region with ``other``. """ raise NotImplementedError @abc.abstractmethod def symmetric_difference(self, other): """ Return the union of the two regions minus any areas contained in the intersection of the two regions. """ raise NotImplementedError @abc.abstractmethod def union(self, other): """ Return a region representing the union of this region with ``other``. """ raise NotImplementedError def __and__(self, other): return self.intersection(other) def __or__(self, other): return self.union(other) def __xor__(self, other): return self.symmetric_difference(other) @classmethod def get_formats(cls): """ Get the registered I/O formats as a Table. """ return RegionsRegistry.get_formats(Region) def write(self, filename, format=None, overwrite=False, **kwargs): """ Write the region to a region file in the specified format. This method allows writing a file in many supported data formats, e.g.,:: >>> reg.write('new_regions.reg', format='ds9') >>> reg.write('new_regions.crtf', format='crtf') >>> reg.write('new_regions.fits', format='fits') A list of the available formats for `~regions.Region` is available using:: >>> from regions import Region >>> Region.get_formats() Parameters ---------- filename : str The filename or URL of the file to write. format : str, optional The file format specifier. overwrite : bool, optional If True, overwrite the output file if it exists. Raises an `OSError` if False and the output file exists. Default is False. **kwargs : dict, optional Keyword arguments passed to the data writer. """ return RegionsRegistry.write([self], filename, Region, format=format, overwrite=overwrite, **kwargs) def serialize(self, format=None, **kwargs): """ Serialize the region to a region string or table. This method allows serializing regions in many supported data formats, e.g.,:: >>> reg1_str = reg.serialize(format='ds9') >>> reg2_str = reg.serialize(format='crtf') >>> reg3_tbl = reg.serialize(format='fits') A list of the available formats for `~regions.Region` is available using:: >>> from regions import Region >>> Region.get_formats() Parameters ---------- format : str, optional The file format specifier. **kwargs : dict, optional Keyword arguments passed to the data serializer. """ return RegionsRegistry.serialize([self], Region, format=format, **kwargs) class PixelRegion(Region): """ Base class for all regions defined in pixel coordinates. """ meta = RegionMeta() visual = RegionVisual() def intersection(self, other): """ Return a region representing the intersection of this region with ``other``. """ from regions.core.compound import CompoundPixelRegion return CompoundPixelRegion(region1=self, region2=other, operator=operator.and_) def symmetric_difference(self, other): """ Return the union of the two regions minus any areas contained in the intersection of the two regions. """ from regions.core.compound import CompoundPixelRegion return CompoundPixelRegion(region1=self, region2=other, operator=operator.xor) def union(self, other): """ Return a region representing the union of this region with ``other``. """ from regions.core.compound import CompoundPixelRegion return CompoundPixelRegion(region1=self, region2=other, operator=operator.or_) @abc.abstractmethod def contains(self, pixcoord): """ Check whether a position or positions fall inside the region. Parameters ---------- pixcoord : `~regions.PixCoord` The position or positions to check. """ raise NotImplementedError def __contains__(self, coord): if not coord.isscalar: raise ValueError(f'coord must be scalar. coord={coord}') return self.contains(coord) @abc.abstractmethod def to_sky(self, wcs): """ Return a region defined in sky coordinates. Parameters ---------- wcs : `~astropy.wcs.WCS` The world coordinate system transformation to use to convert from pixels to sky coordinates. Returns ------- sky_region : `~regions.SkyRegion` The sky region. """ raise NotImplementedError @property @abc.abstractmethod def area(self): """ The exact analytical area of the region shape. """ raise NotImplementedError @property @abc.abstractmethod def bounding_box(self): """ The minimal bounding box (in integer pixel coordinates) that contains the region. """ raise NotImplementedError @abc.abstractmethod def to_mask(self, mode='center', subpixels=5): """ Return a mask for the region. Parameters ---------- mode : {'center', 'exact', 'subpixels'}, optional The method used to determine the overlap of the region on the pixel grid. Not all options are available for all region types. Note that the more precise methods are generally slower. The following methods are available: * ``'center'``: A pixel is considered to be entirely in or out of the region depending on whether its center is in or out of the region. The returned mask will contain values only of 0 (out) and 1 (in). * ``'exact'`` (default): The exact fractional overlap of the region and each pixel is calculated. The returned mask will contain values between 0 and 1. * ``'subpixel'``: A pixel is divided into subpixels (see the ``subpixels`` keyword), each of which are considered to be entirely in or out of the region depending on whether its center is in or out of the region. If ``subpixels=1``, this method is equivalent to ``'center'``. The returned mask will contain values between 0 and 1. subpixels : int, optional For the ``'subpixel'`` mode, resample pixels by this factor in each dimension. That is, each pixel is divided into ``subpixels ** 2`` subpixels. Returns ------- mask : `~regions.RegionMask` A mask for the region. """ raise NotImplementedError @staticmethod def _validate_mode(mode, subpixels): valid_modes = ('center', 'exact', 'subpixels') if mode not in valid_modes: raise ValueError(f'Invalid mask mode: {mode} (should be one ' f'of {valid_modes}') if mode == 'subpixels': if not isinstance(subpixels, int) or subpixels <= 0: raise ValueError(f'Invalid subpixels value: {subpixels} ' '(should be a strictly positive integer)') @abc.abstractmethod def as_artist(self, origin=(0, 0), **kwargs): """ Convert to matplotlib patch object for this region. Parameters ---------- origin : array_like, optional The ``(x, y)`` pixel position of the origin of the displayed image. **kwargs : dict Any keyword arguments accepted by `~matplotlib.patches.Patch`. Returns ------- patch : `~matplotlib.patches.Patch` A matplotlib patch. """ raise NotImplementedError def plot(self, origin=(0, 0), ax=None, **kwargs): """ Plot the region on a matplotlib `~matplotlib.axes.Axes` instance. Parameters ---------- origin : array_like, optional The ``(x, y)`` pixel position of the origin of the displayed image. ax : `~matplotlib.axes.Axes` or `None`, optional The matplotlib axes on which to plot. If `None`, then the current `~matplotlib.axes.Axes` instance is used. **kwargs : dict Any keyword arguments accepted by `~matplotlib.patches.Patch`. Returns ------- artist : `matplotlib.artist.Artist` The matplotlib artist (typically a `~matplotlib.patches.Patch` object) for the plotted region. The artist can be used, for example, when adding a plot legend. """ import matplotlib.pyplot as plt if ax is None: ax = plt.gca() artist = self.as_artist(origin=origin, **kwargs) ax.add_artist(artist) return artist class SkyRegion(Region): """ Base class for all regions defined in celestial coordinates. """ def intersection(self, other): """ Return a region representing the intersection of this region with ``other``. """ from regions.core.compound import CompoundSkyRegion return CompoundSkyRegion(region1=self, region2=other, operator=operator.and_) def symmetric_difference(self, other): """ Return the union of the two regions minus any areas contained in the intersection of the two regions. """ from regions.core.compound import CompoundSkyRegion return CompoundSkyRegion(region1=self, region2=other, operator=operator.xor) def union(self, other): """ Return a region representing the union of this region with ``other``. """ from regions.core.compound import CompoundSkyRegion return CompoundSkyRegion(region1=self, region2=other, operator=operator.or_) def contains(self, skycoord, wcs): """ Check whether a sky coordinate falls inside the region. Parameters ---------- skycoord : `~astropy.coordinates.SkyCoord` The position or positions to check. wcs : `~astropy.wcs.WCS` The world coordinate system transformation to use to convert between sky and pixel coordinates. """ pixel_region = self.to_pixel(wcs) pixcoord = PixCoord.from_sky(skycoord, wcs) return pixel_region.contains(pixcoord) @abc.abstractmethod def to_pixel(self, wcs): """ Return the equivalent region defined in pixel coordinates. Parameters ---------- wcs : `~astropy.wcs.WCS` The world coordinate system transformation to use to convert between sky and pixel coordinates. Returns ------- pixel_region : `~regions.PixelRegion` A pixel region. """ raise NotImplementedError ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/core/mask.py0000644000175100001770000002172114525470416016352 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst """ This module defines a class for region masks. """ import warnings import astropy.units as u import numpy as np __all__ = ['RegionMask'] class RegionMask: """ Class for a region mask. Parameters ---------- data : array_like A 2D array representing the fractional overlap of a region on the pixel grid. This should be the full-sized (i.e., not truncated) array that is the direct output of one of the low-level "geometry" functions. bbox : `regions.RegionBoundingBox` The bounding box object defining the region minimal bounding box. Examples -------- Usage examples are provided in the :ref:`overlap-masks` section of the docs. """ def __init__(self, data, bbox): self.data = np.asanyarray(data) if self.data.shape != bbox.shape: raise ValueError('mask data and bounding box must have the same ' 'shape') self.bbox = bbox self._mask = (self.data == 0) def __array__(self): """ Array representation of the mask data array (e.g., for matplotlib). """ return self.data @property def shape(self): """ The shape of the mask data array. """ return self.data.shape def get_overlap_slices(self, shape): """ Get slices for the overlapping part of the region mask and a 2D array. Parameters ---------- shape : 2-tuple of int The shape of the 2D array. Returns ------- slices_large : tuple of slices or `None` A tuple of slice objects for each axis of the large array, such that ``large_array[slices_large]`` extracts the region of the large array that overlaps with the small array. `None` is returned if there is no overlap of the bounding box with the given image shape. slices_small : tuple of slices or `None` A tuple of slice objects for each axis of the region mask array such that ``small_array[slices_small]`` extracts the region that is inside the large array. `None` is returned if there is no overlap of the bounding box with the given image shape. """ return self.bbox.get_overlap_slices(shape) def to_image(self, shape): """ Return an image of the mask in a 2D array of the given shape, taking any edge effects into account. Parameters ---------- shape : tuple of int The ``(ny, nx)`` shape of the output array. Returns ------- result : `~numpy.ndarray` A 2D array of the mask. """ if len(shape) != 2: raise ValueError('input shape must have 2 elements.') # find the overlap of the mask on the output image shape slices_large, slices_small = self.get_overlap_slices(shape) if slices_small is None: return None # no overlap # insert the mask into the output image image = np.zeros(shape) image[slices_large] = self.data[slices_small] return image def cutout(self, data, fill_value=0., copy=False): """ Create a cutout from the input data over the mask bounding box, taking any edge effects into account. Parameters ---------- data : array_like A 2D array on which to apply the region mask. fill_value : float, optional The value used to fill pixels where the region mask does not overlap with the input ``data``. The default is 0. copy : bool, optional If `True` then the returned cutout array will always be hold a copy of the input ``data``. If `False` and the mask is fully within the input ``data``, then the returned cutout array will be a view into the input ``data``. In cases where the mask partially overlaps or has no overlap with the input ``data``, the returned cutout array will always hold a copy of the input ``data`` (i.e., this keyword has no effect). Returns ------- result : `~numpy.ndarray` or `None` A 2D array cut out from the input ``data`` representing the same cutout region as the region mask. If there is a partial overlap of the region mask with the input data, pixels outside of the data will be assigned to ``fill_value``. `None` is returned if there is no overlap of the region with the input ``data``. """ data = np.asanyarray(data) if data.ndim != 2: raise ValueError('data must be a 2D array.') # find the overlap of the mask on the output image shape slices_large, slices_small = self.get_overlap_slices(data.shape) if slices_small is None: return None # no overlap cutout_shape = (slices_small[0].stop - slices_small[0].start, slices_small[1].stop - slices_small[1].start) if cutout_shape == self.shape: cutout = data[slices_large] if copy: # NOTE: np.copy() doesn't work with Quantity for # astropy 3.2.3 cutout = cutout.copy() return cutout # cutout is always a copy for partial overlap if ~np.isfinite(fill_value): dtype = float else: dtype = data.dtype cutout = np.zeros(self.shape, dtype=dtype) cutout[:] = fill_value cutout[slices_small] = data[slices_large] if isinstance(data, u.Quantity): cutout <<= data.unit return cutout def multiply(self, data, fill_value=0.): """ Multiply the region mask with the input data, taking any edge effects into account. The result is a mask-weighted cutout from the data. Parameters ---------- data : array_like or `~astropy.units.Quantity` The 2D array to multiply with the region mask. fill_value : float, optional The value is used to fill pixels where the region mask does not overlap with the input ``data``. The default is 0. Returns ------- result : `~numpy.ndarray` or `None` A 2D mask-weighted cutout from the input ``data``. If there is a partial overlap of the region mask with the input data, pixels outside of the data will be assigned to ``fill_value`` before being multiplied with the mask. `None` is returned if there is no overlap of the region with the input ``data``. """ cutout = self.cutout(data, fill_value=fill_value) if cutout is None: return None else: # ignore multiplication with non-finite data values with warnings.catch_warnings(): warnings.simplefilter('ignore', RuntimeWarning) weighted_cutout = cutout * self.data # fill values outside of the mask but within the bounding box weighted_cutout[self._mask] = fill_value return weighted_cutout def get_values(self, data, mask=None): """ Get the mask-weighted pixel values from the data as a 1D array. If the `~regions.RegionMask` was created with ``mode='center'``, (where the mask weights are only 1 or 0), then the returned values will simply be pixel values extracted from the data. Parameters ---------- data : array_like or `~astropy.units.Quantity` The 2D array from which to get mask-weighted values. mask : array_like (bool), optional A boolean mask with the same shape as ``data`` where a `True` value indicates the corresponding element of ``data`` is not returned in the result. Returns ------- result : `~numpy.ndarray` A 1D array of mask-weighted pixel values from the input ``data``. If there is no overlap of the region with the input ``data``, the result will be an empty array with shape (0,). """ slc_large, slc_small = self.get_overlap_slices(data.shape) if slc_large is None: return np.array([]) cutout = data[slc_large] region_mask = self.data[slc_small] pixel_mask = (region_mask > 0) # good pixels if mask is not None: if mask.shape != data.shape: raise ValueError('mask and data must have the same shape') pixel_mask &= ~mask[slc_large] # ignore multiplication with non-finite data values with warnings.catch_warnings(): warnings.simplefilter('ignore', RuntimeWarning) return (cutout * region_mask)[pixel_mask] ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/core/metadata.py0000644000175100001770000001661714525470416017207 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst """ This module proves classes to handle region metadata. """ from copy import deepcopy __all__ = ['Meta', 'RegionMeta', 'RegionVisual'] class Meta(dict): """ A base class for region metadata. """ valid_keys = [] key_mapping = {} def __init__(self, seq=None, **kwargs): super().__init__() if seq: if isinstance(seq, dict): for key, val in seq.items(): self.__setitem__(key, val) else: for key, val in seq: self.__setitem__(key, val) if len(kwargs) > 0: for key, val in kwargs.items(): self.__setitem__(key, val) def __setitem__(self, key, value): key = self.key_mapping.get(key, key) if key in self.valid_keys: super().__setitem__(key, value) else: raise KeyError(f'{key} is not a valid key for this class.') def __getitem__(self, item): item = self.key_mapping.get(item, item) return super().__getitem__(item) def update(self, *args, **kwargs): if args: if len(args) > 1: raise ValueError('Only one argument can be input') other = dict(args[0]) for key in other: self[key] = other[key] for key in kwargs: self[key] = kwargs[key] def setdefault(self, key, value=None): if key not in self: self[key] = value return self[key] def copy(self): """ Make a deep copy of this object. """ return deepcopy(self) class RegionMeta(Meta): """ A dictionary subclass that holds the meta attributes of the region. """ valid_keys = ['background', 'comment', 'component', 'composite', 'corr', 'delete', 'edit', 'fixed', 'frame', 'highlite', 'include', 'label', 'line', 'move', 'name', 'range', 'restfreq', 'rotate', 'select', 'source', 'tag', 'text', 'textrotate', 'type', 'veltype'] key_mapping = {} class RegionVisual(Meta): """ A dictionary subclass which holds the visual attributes of the region. """ valid_keys = ['color', 'dash', 'dashlist', 'fill', 'font', 'fontname', 'fontsize', 'fontstyle', 'fontweight', 'labeloff', 'labelpos', 'labelcolor', 'line', 'linestyle', 'linewidth', 'marker', 'markersize', 'symbol', 'symsize', 'symthick', 'textangle', 'textrotate', 'usetex', 'default_style', 'dashes', 'markeredgewidth', 'rotation', 'facecolor', 'edgecolor'] key_mapping = {'point': 'symbol', 'width': 'linewidth'} def _define_default_mpl_kwargs(self, artist): """ Define the default matplotlib kwargs for the specified artist. The kwargs depend on the value of self.visual['default_style'], which can be set when reading region files. If this keywords is not set or set to 'mpl' or `None`, then the matplotlib defaults will be used, with the exception fill is turned off for Patch and Line2D objects. Parameters ---------- artist : {'Text', 'Line2D', 'Patch'} The matplotlib artist type. Returns ------- result : dict A dictionary of matplotlib keyword arguments. """ kwargs = {} default_style = self.get('default_style', None) if default_style is None or default_style == 'mpl': # do not fill by default, which is the only change from # matplotlib defaults if artist == 'Patch': kwargs['fill'] = False elif artist == 'Line2D': kwargs['fillstyle'] = 'none' kwargs['marker'] = 'o' return kwargs # 'ds9' style is set when reading from ds9 region files elif default_style == 'ds9': kwargs['color'] = '#00ff00' # green if artist == 'Text': kwargs['ha'] = 'center' # text horizontal alignment kwargs['va'] = 'center' # text vertical alignment elif artist == 'Line2D': from regions.io.ds9.core import ds9_valid_symbols kwargs['marker'] = ds9_valid_symbols['boxcircle'] kwargs['markersize'] = 11 kwargs['markeredgecolor'] = kwargs.pop('color') kwargs['fillstyle'] = 'none' elif artist == 'Patch': kwargs['edgecolor'] = kwargs.pop('color') kwargs['fill'] = False else: raise ValueError('invalid visual["default"] value') return kwargs def _to_mpl_kwargs(self, artist): """ Convert the visual metadata to a dictionary of matplotlib keyword arguments for the given artist. Parameters ---------- artist : {'Text', 'Line2D', 'Patch'} The matplotlib artist type. Returns ------- result : dict A dictionary of matplotlib keyword arguments. """ if artist == 'Text': keymap = {'font': 'family', 'fontstyle': 'style', 'fontweight': 'weight', 'fontsize': 'size', 'textangle': 'rotation'} elif artist == 'Line2D': keymap = {'symsize': 'markersize', 'color': 'markeredgecolor', 'linewidth': 'markeredgewidth', 'fill': 'fillstyle'} elif artist == 'Patch': keymap = {'color': 'edgecolor', 'fill': 'fill'} else: raise ValueError('invalid artist type') kwargs = {} for name, val in self.items(): if name in keymap: # NOTE: this will override existing mpl kwargs kwargs[keymap[name]] = val else: kwargs[name] = val default_style = kwargs.pop('default_style', None) if default_style == 'ds9': for key, val in kwargs.items(): if val == 'green': # X11/mpl green is #008000, ds9 uses #00ff00 kwargs[key] = '#00ff00' return kwargs def define_mpl_kwargs(self, artist): """ Define a dictionary of matplotlib keywords for the input ``artist`` from the region's ``visual`` properties. Parameters ---------- artist : {'Text', 'Line2D', 'Patch'} The matplotlib artist type. Returns ------- result : dict A dictionary of matplotlib keyword arguments. """ if artist not in ('Patch', 'Line2D', 'Text'): raise ValueError(f'artist "{artist}" is not supported') kwargs = self._define_default_mpl_kwargs(artist) kwargs.update(self._to_mpl_kwargs(artist)) remove_keys = [] if artist != 'Text': remove_keys.extend(['fontname', 'fontsize', 'fontweight', 'fontstyle']) else: remove_keys.extend(['linewidth']) for key in remove_keys: kwargs.pop(key, None) if 'fontstyle' in kwargs: kwargs['fontstyle'].replace('roman', 'normal') return kwargs ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/core/pixcoord.py0000644000175100001770000001656514525470416017260 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst import copy import numpy as np from astropy.coordinates import SkyCoord __all__ = ['PixCoord'] # Define global variables for the default 'origin' and 'mode' used for # WCS transformations. _DEFAULT_WCS_ORIGIN = 0 _DEFAULT_WCS_MODE = 'all' class PixCoord: """ A class for pixel coordinates. This class can represent a scalar or an array of pixel coordinates. `~regions.PixCoord` objects can be added or subtracted to each other. They can also be compared for equality. The data members are either numbers or `~numpy.ndarray` (not `~astropy.units.Quantity` objects with unit "pixel"). Given a `astropy.wcs.WCS` object, it can be transformed to and from a `~astropy.coordinates.SkyCoord` object. Parameters ---------- x : float or array-like Pixel coordinate x value. y : float or array-like Pixel coordinate y value. Examples -------- Usage examples are provided in the :ref:`getting_started-coord` section of the documentation. """ def __init__(self, x, y): x, y = np.broadcast_arrays(x, y) if x.shape == (): self.x, self.y = x.item(), y.item() else: self.x, self.y = x, y def copy(self): return self.__class__(copy.deepcopy(self.x), copy.deepcopy(self.y)) @staticmethod def _validate(obj, name, expected='any'): """ Validate that a given object is a valid `PixCoord`. Parameters ---------- obj : `PixCoord` The object to check. name : str The parameter name used for error messages. expected : {'any', 'scalar', 'array'} What kind of PixCoord to check for. Returns ------- obj : `PixCoord` The input object, if valid. """ if not isinstance(obj, PixCoord): raise TypeError(f'{name!r} must be a PixCoord') if expected == 'any': pass elif expected == 'scalar': if not obj.isscalar: raise ValueError(f'{name!r} must be a scalar PixCoord') elif expected == 'array': if obj.isscalar: raise ValueError(f'{name!r} must be a PixCoord array') else: raise ValueError(f'Invalid value for "expected": {expected!r}') return obj @property def isscalar(self): """ Whether the instance is scalar (e.g., a single (x, y) coordinate). """ return np.isscalar(self.x) def __repr__(self): return f'{self.__class__.__name__}(x={self.x}, y={self.y})' def __len__(self): if self.isscalar: raise TypeError(f'Scalar {self.__class__.__name__!r} object has ' 'no len()') return len(self.x) def __iter__(self): for (x, y) in zip(self.x, self.y): yield PixCoord(x=x, y=y) def __getitem__(self, key): if self.isscalar: raise IndexError(f'Scalar {self.__class__.__name__!r} cannot be ' 'indexed or sliced.') # Let Numpy do the slicing x = self.x[key] y = self.y[key] return PixCoord(x=x, y=y) def __add__(self, other): if not isinstance(other, self.__class__): raise TypeError('Can add only to another PixCoord') return self.__class__(self.x + other.x, self.y + other.y) def __sub__(self, other): if not isinstance(other, self.__class__): raise TypeError('Can subtract only from another PixCoord') return self.__class__(self.x - other.x, self.y - other.y) def __eq__(self, other): """ Checks whether ``other`` is `PixCoord` object and whether their abscissa and ordinate values are equal using `np.testing.assert_allclose` with its default tolerance values. """ if isinstance(other, self.__class__): return np.allclose([self.x, self.y], [other.x, other.y]) return False def to_sky(self, wcs, origin=_DEFAULT_WCS_ORIGIN, mode=_DEFAULT_WCS_MODE): """ Convert to a `~astropy.coordinates.SkyCoord`. Parameters ---------- wcs : `~astropy.wcs.WCS` The WCS to use to convert pixels to world coordinates. origin : int, optional Whether to return 0 or 1-based pixel coordinates. mode : {'all', 'wcs'}, optional Whether to do the transformation including distortions (``'all'``) or only including only the core WCS transformation (``'wcs'``). Returns ------- coord : `~astropy.coordinates.SkyCoord` A new object with sky coordinates corresponding to the pixel coordinates. """ return SkyCoord.from_pixel(xp=self.x, yp=self.y, wcs=wcs, origin=origin, mode=mode) @classmethod def from_sky(cls, skycoord, wcs, origin=_DEFAULT_WCS_ORIGIN, mode=_DEFAULT_WCS_MODE): """ Create `PixCoord` from a `~astropy.coordinates.SkyCoord`. Parameters ---------- skycoord : `~astropy.coordinates.SkyCoord` The sky coordinate. wcs : `~astropy.wcs.WCS` The WCS to use to convert pixels to world coordinates. origin : int, optional Whether to return 0 or 1-based pixel coordinates. mode : {'all', 'wcs'}, optional Whether to do the transformation including distortions (``'all'``) or only including only the core WCS transformation (``'wcs'``). Returns ------- coord : `PixCoord` A new `PixCoord` object at the position of the input sky coordinates. """ x, y = skycoord.to_pixel(wcs=wcs, origin=origin, mode=mode) return cls(x=x, y=y) def separation(self, other): r""" Calculate the separation to another pixel coordinate. This is the two-dimensional Cartesian separation :math:`d` where .. math:: d = \sqrt{(x_1 - x_2) ^ 2 + (y_1 - y_2) ^ 2} Parameters ---------- other : `PixCoord` The other pixel coordinate. Returns ------- separation : `numpy.array` The separation in pixels. """ dx = other.x - self.x dy = other.y - self.y return np.hypot(dx, dy) @property def xy(self): """ A 2-tuple ``(x, y)`` for this coordinate. """ return self.x, self.y def rotate(self, center, angle): """ Rotate the pixel coordinate. Positive ``angle`` corresponds to counter-clockwise rotation. Parameters ---------- center : `PixCoord` The rotation center point. angle : `~astropy.coordinates.Angle` The rotation angle. Returns ------- coord : `PixCoord` The rotated coordinates (which is an independent copy). """ dx = self.x - center.x dy = self.y - center.y vec = np.array([dx, dy]) cosa, sina = np.cos(angle), np.sin(angle) rotation_matrix = np.array([[cosa, -sina], [sina, cosa]]) vec = np.matmul(rotation_matrix, vec) return self.__class__(center.x + vec[0], center.y + vec[1]) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/core/regions.py0000644000175100001770000002056114525470416017066 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst """ This module provides a Regions class. """ from regions.core.core import Region from regions.core.registry import RegionsRegistry __all__ = ['Regions'] __doctest_skip__ = ['Regions.read', 'Regions.write', 'Regions.parse', 'Regions.serialize'] class Regions: """ Class to hold a list of `~regions.Region` objects. This class provides a unified I/O interface that supports reading, writing, parsing, and serializing many region data formats. Parameters ---------- regions : list of `~regions.Region` The list of region objects. """ def __init__(self, regions=(), /): if regions == (): regions = [] for item in regions: if not isinstance(item, Region): raise TypeError('Input regions must be a list of Region ' 'objects') self.regions = regions def __getitem__(self, index): newregions = self.regions[index] if isinstance(newregions, Region): # one item return newregions else: newcls = object.__new__(self.__class__) newcls.regions = newregions return newcls def __repr__(self): cls_name = self.__class__.__name__ return f'<{cls_name}({repr(self.regions)})>' def __str__(self): return str(self.regions) def __len__(self): return len(self.regions) def append(self, region): """ Append the region to the end of the list of regions. Parameters ---------- region : `~regions.Region` The region to append. """ if not isinstance(region, Region): raise TypeError('Input region must be a Region object') self.regions.append(region) def extend(self, regions): """ Extend the list of regions by appending elements from the input regions. Parameters ---------- regions : `~regions.Regions` or list of `~regions.Region` A `~regions.Regions` object or a list of regions to include. """ if isinstance(regions, Regions): self.regions.extend(regions.regions) else: for item in regions: if not isinstance(item, Region): raise TypeError('Input regions must be a list of Region ' 'objects') self.regions.extend(regions) def insert(self, index, region): """ Insert the region before index. Parameters ---------- index : int The list index. region : `~regions.Region` The region to insert. """ self.regions.insert(index, region) def reverse(self): """ Reverse the list of regions in place. """ self.regions.reverse() def pop(self, index=-1): """ Remove and return the region at index. Parameters ---------- index : int, optional The index of the region to remove. Returns ------- result : `~regions.Region` """ return self.regions.pop(index) def copy(self): """ Return a shallow copy of this object. """ newcls = object.__new__(self.__class__) newcls.regions = self.regions.copy() return newcls @classmethod def get_formats(cls): """ Get the registered I/O formats as a Table. """ return RegionsRegistry.get_formats(cls) @classmethod def read(cls, filename, format=None, cache=False, **kwargs): """ Read and parse a region file and return as a Regions object. This method allows reading a file in many supported data formats, e.g.,:: >>> from regions import Regions >>> reg1 = Regions.read('regions.reg', format='ds9') >>> reg2 = Regions.read('regions.crtf', format='crtf') >>> reg3 = Regions.read('regions.fits', format='fits') A list of the available formats for `~regions.Regions` is available using:: >>> Regions.get_formats() Parameters ---------- filename : str The filename or URL of the file to read. format : str, optional The file format specifier. cache : bool or 'update', optional Whether to cache the contents of remote URLs. If 'update', check the remote URL for a new version but store the result in the cache. **kwargs : dict, optional Keyword arguments passed to the data reader. Returns ------- result : `~regions.Regions` A `~regions.Regions` object containing the file contents. """ return RegionsRegistry.read(filename, cls, format=format, cache=cache, **kwargs) @classmethod def parse(cls, data, format=None, **kwargs): """ Parse a region string or table and return as a Regions object. This method allows parsing region data in many supported data formats, e.g.,:: >>> from regions import Regions >>> reg1 = Regions.parse(regions_str, format='ds9') >>> reg2 = Regions.parse(regions_str, format='crtf') >>> reg3 = Regions.parse(regions_tbl, format='fits') A list of the available formats for `~regions.Regions` is available using:: >>> Regions.get_formats() Parameters ---------- data : str or `~astropy.table.Table` The region data to parse. format : str, optional The file format specifier. **kwargs : dict, optional Keyword arguments passed to the data parser. Returns ------- result : `~regions.Regions` A `~regions.Regions` object containing the data contents. """ return RegionsRegistry.parse(data, cls, format=format, **kwargs) def write(self, filename, format=None, overwrite=False, **kwargs): """ Write the regions to a region file in the specified format. This method allows writing a file in many supported data formats, e.g.,:: >>> from regions import Regions >>> reg = Regions.read('regions.reg', format='ds9') >>> reg.write('new_regions.reg', format='ds9') >>> reg.write('new_regions.crtf', format='crtf') >>> reg.write('new_regions.fits', format='fits') A list of the available formats for `~regions.Regions` is available using:: >>> Regions.get_formats() Parameters ---------- filename : str The filename or URL of the file to write. format : str, optional The file format specifier. overwrite : bool, optional If True, overwrite the output file if it exists. Raises an `OSError` if False and the output file exists. Default is False. **kwargs : dict, optional Keyword arguments passed to the data writer. """ return RegionsRegistry.write(self.regions, filename, self.__class__, format=format, overwrite=overwrite, **kwargs) def serialize(self, format=None, **kwargs): """ Serialize the regions to a region string or table. This method allows serializing regions in many supported data formats, e.g.,:: >>> from regions import Regions >>> reg = Regions.read('regions.reg', format='ds9') >>> reg1_str = reg.serialize(format='ds9') >>> reg2_str = reg.serialize(format='crtf') >>> reg3_tbl = reg.serialize(format='fits') A list of the available formats for `~regions.Regions` is available using:: >>> Regions.get_formats() Parameters ---------- format : str, optional The file format specifier. **kwargs : dict, optional Keyword arguments passed to the data serializer. """ return RegionsRegistry.serialize(self.regions, self.__class__, format=format, **kwargs) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/core/registry.py0000644000175100001770000001435314525470416017272 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst """ This module provides a RegionsRegistry class. """ from astropy.table import Table __all__ = [] class IORegistryError(Exception): """Exception class for various registry errors.""" class RegionsRegistry: """ Class to hold a registry to read, write, parse, and serialize regions in various formats. """ registry = {} @classmethod def register(cls, classobj, methodname, filetype): def inner_wrapper(wrapped_func): key = (classobj, methodname, filetype) if key in cls.registry: raise ValueError(f'{methodname} for {filetype} is already ' f'registered for {classobj.__name__}') cls.registry[key] = wrapped_func return wrapped_func return inner_wrapper @classmethod def get_identifiers(cls, classobj): return [key for key in cls.registry if key[0] == classobj and key[1] == 'identify'] @classmethod def _no_format_error(cls, classobj): msg = ('Format could not be identified based on the file name or ' 'contents, please provide a "format" argument.' f'\n{cls._get_format_table_str(classobj)}') raise IORegistryError(msg) @classmethod def identify_format(cls, filename, classobj, methodname): format = None identifiers = cls.get_identifiers(classobj) if identifiers: for identifier in identifiers: if cls.registry[identifier](methodname, filename): format = identifier[2] break # finds the first valid filetype if format is None: cls._no_format_error(classobj) return format @classmethod def read(cls, filename, classobj, format=None, **kwargs): """ Read in a regions file. """ if format is None: format = cls.identify_format(filename, classobj, 'read') key = (classobj, 'read', format) try: reader = cls.registry[key] except KeyError: msg = (f'No reader defined for format "{format}" and class ' f'"{classobj.__name__}".\n' f'{cls._get_format_table_str(classobj)}') raise IORegistryError(msg) from None return reader(filename, **kwargs) @classmethod def parse(cls, data, classobj, format=None, **kwargs): """ Parse a regions string or table. """ if format is None: cls._no_format_error(classobj) key = (classobj, 'parse', format) try: parser = cls.registry[key] except KeyError: msg = (f'No parser defined for format "{format}" and class ' f'"{classobj.__name__}".\n' f'{cls._get_format_table_str(classobj)}') raise IORegistryError(msg) from None return parser(data, **kwargs) @classmethod def write(cls, regions, filename, classobj, format=None, **kwargs): """ Write to a regions file. """ if format is None: format = cls.identify_format(filename, classobj, 'write') key = (classobj, 'write', format) try: writer = cls.registry[key] except KeyError: msg = (f'No writer defined for format "{format}" and class ' f'"{classobj.__name__}".\n' f'{cls._get_format_table_str(classobj)}') raise IORegistryError(msg) from None return writer(regions, filename, **kwargs) @classmethod def serialize(cls, regions, classobj, format=None, **kwargs): """ Serialize to a regions string or table. """ if format is None: cls._no_format_error(classobj) key = (classobj, 'serialize', format) try: serializer = cls.registry[key] except KeyError: msg = (f'No serializer defined for format "{format}" and class ' f'"{classobj.__name__}".\n' f'{cls._get_format_table_str(classobj)}') raise IORegistryError(msg) from None return serializer(regions, **kwargs) @classmethod def get_formats(cls, classobj): """ Get the registered I/O formats as a Table. """ filetypes = list({key[2] for key in cls.registry if key[0] == classobj}) rows = [['Format', 'Parse', 'Serialize', 'Read', 'Write', 'Auto-identify']] for filetype in sorted(filetypes): keys = {key[1] for key in cls.registry if key[0] == classobj and key[2] == filetype} row = [filetype] for methodname in rows[0][1:]: name = ('identify' if 'identify' in methodname else methodname.lower()) row.append('Yes' if name in keys else 'No') rows.append(row) if len(rows) == 1: return Table() cols = list(zip(*rows)) tbl = Table() for col in cols: tbl[col[0]] = col[1:] return tbl @classmethod def _get_format_table_str(cls, classobj): lines = ['', f'The available formats for the {classobj.__name__} ' 'class are:', ''] tbl = cls.get_formats(classobj) lines.extend(tbl.pformat(max_lines=-1, max_width=80)) return '\n'.join(lines) def _update_docstring(classobj, methodname): """ Update the docstring to include a table of all available registered formats and methods. """ import re if methodname == 'identify': return lines = getattr(classobj, methodname).__doc__.splitlines() matches = [re.search(r'(\S)', line) for line in lines[1:]] left_indent = ' ' * min(match.start() for match in matches if match) new_lines = RegionsRegistry._get_format_table_str(classobj).splitlines() lines.extend([left_indent + line for line in new_lines]) try: # classmethod getattr(classobj, methodname).__func__.__doc__ = '\n'.join(lines) except AttributeError: # instancemethod getattr(classobj, methodname).__doc__ = '\n'.join(lines) return ././@PaxHeader0000000000000000000000000000003200000000000010210 xustar0026 mtime=1700163875.51854 regions-0.8/regions/core/tests/0000755000175100001770000000000014525470444016205 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/core/tests/__init__.py0000644000175100001770000000000014525470416020303 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/core/tests/test_bounding_box.py0000644000175100001770000001224014525470416022271 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst """ Tests for the bounding_box module. """ import pytest from numpy.testing import assert_allclose from regions._utils.optional_deps import HAS_MATPLOTLIB from regions.core.bounding_box import RegionBoundingBox from regions.core.pixcoord import PixCoord from regions.shapes import RectanglePixelRegion def test_bounding_box_init(): bbox = RegionBoundingBox(1, 10, 2, 20) assert bbox.ixmin == 1 assert bbox.ixmax == 10 assert bbox.iymin == 2 assert bbox.iymax == 20 def test_bounding_box_init_minmax(): with pytest.raises(ValueError): RegionBoundingBox(100, 1, 1, 100) with pytest.raises(ValueError): RegionBoundingBox(1, 100, 100, 1) def test_bounding_box_inputs(): with pytest.raises(TypeError): RegionBoundingBox([1], [10], [2], [9]) with pytest.raises(TypeError): RegionBoundingBox([1, 2], 10, 2, 9) with pytest.raises(TypeError): RegionBoundingBox(1.0, 10.0, 2.0, 9.0) with pytest.raises(TypeError): RegionBoundingBox(1.3, 10, 2, 9) with pytest.raises(TypeError): RegionBoundingBox(1, 10.3, 2, 9) with pytest.raises(TypeError): RegionBoundingBox(1, 10, 2.3, 9) with pytest.raises(TypeError): RegionBoundingBox(1, 10, 2, 9.3) def test_bounding_box_from_float(): # This is the example from the method docstring bbox = RegionBoundingBox.from_float(xmin=1.0, xmax=10.0, ymin=2.0, ymax=20.0) assert bbox == RegionBoundingBox(ixmin=1, ixmax=11, iymin=2, iymax=21) bbox = RegionBoundingBox.from_float(xmin=1.4, xmax=10.4, ymin=1.6, ymax=10.6) assert bbox == RegionBoundingBox(ixmin=1, ixmax=11, iymin=2, iymax=12) def test_bounding_box_eq(): bbox = RegionBoundingBox(1, 10, 2, 20) assert bbox == RegionBoundingBox(1, 10, 2, 20) assert bbox != RegionBoundingBox(9, 10, 2, 20) assert bbox != RegionBoundingBox(1, 99, 2, 20) assert bbox != RegionBoundingBox(1, 10, 9, 20) assert bbox != RegionBoundingBox(1, 10, 2, 99) with pytest.raises(TypeError): assert bbox == (1, 10, 2, 20) def test_bounding_box_repr(): bbox = RegionBoundingBox(1, 10, 2, 20) assert repr(bbox) == ('RegionBoundingBox(ixmin=1, ixmax=10, iymin=2, ' 'iymax=20)') def test_bounding_box_shape(): bbox = RegionBoundingBox(1, 10, 2, 20) assert bbox.shape == (18, 9) def test_bounding_box_center(): bbox = RegionBoundingBox(1, 10, 2, 20) assert bbox.center == (10.5, 5) def test_bounding_box_get_overlap_slices(): bbox = RegionBoundingBox(1, 10, 2, 20) slc = ((slice(2, 20, None), slice(1, 10, None)), (slice(0, 18, None), slice(0, 9, None))) assert bbox.get_overlap_slices((50, 50)) == slc bbox = RegionBoundingBox(-10, -1, 2, 20) assert bbox.get_overlap_slices((50, 50)) == (None, None) bbox = RegionBoundingBox(-10, 10, -10, 20) slc = ((slice(0, 20, None), slice(0, 10, None)), (slice(10, 30, None), slice(10, 20, None))) assert bbox.get_overlap_slices((50, 50)) == slc def test_bounding_box_extent(): bbox = RegionBoundingBox(1, 10, 2, 20) assert_allclose(bbox.extent, (0.5, 9.5, 1.5, 19.5)) @pytest.mark.skipif(not HAS_MATPLOTLIB, reason='matplotlib is required') def test_bounding_box_as_artist(): bbox = RegionBoundingBox(1, 10, 2, 20) patch = bbox.as_artist() assert_allclose(patch.get_xy(), (0.5, 1.5)) assert_allclose(patch.get_width(), 9) assert_allclose(patch.get_height(), 18) @pytest.mark.skipif(not HAS_MATPLOTLIB, reason='matplotlib is required') def test_bounding_box_plot(): from matplotlib.patches import Patch bbox = RegionBoundingBox(1, 10, 2, 20) patch = bbox.plot() assert isinstance(patch, Patch) @pytest.mark.skipif(not HAS_MATPLOTLIB, reason='matplotlib is required') def test_bounding_box_to_region(): bbox = RegionBoundingBox(1, 10, 2, 20) region = RectanglePixelRegion(PixCoord(5.0, 10.5), width=9., height=18.) bbox_region = bbox.to_region() assert_allclose(bbox_region.center.xy, region.center.xy) assert bbox_region.width == region.width assert bbox_region.height == region.height assert bbox_region.angle == region.angle def test_bounding_box_union(): bbox1 = RegionBoundingBox(1, 10, 2, 20) bbox2 = RegionBoundingBox(5, 21, 7, 32) bbox_union_expected = RegionBoundingBox(1, 21, 2, 32) bbox_union1 = bbox1 | bbox2 bbox_union2 = bbox1.union(bbox2) assert bbox_union1 == bbox_union_expected assert bbox_union1 == bbox_union2 with pytest.raises(TypeError): bbox1.union((5, 21, 7, 32)) def test_bounding_box_intersect(): bbox1 = RegionBoundingBox(1, 10, 2, 20) bbox2 = RegionBoundingBox(5, 21, 7, 32) bbox_intersect_expected = RegionBoundingBox(5, 10, 7, 20) bbox_intersect1 = bbox1 & bbox2 bbox_intersect2 = bbox1.intersection(bbox2) assert bbox_intersect1 == bbox_intersect_expected assert bbox_intersect1 == bbox_intersect2 with pytest.raises(TypeError): bbox1.intersection((5, 21, 7, 32)) assert bbox1.intersection(RegionBoundingBox(30, 40, 50, 60)) is None ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/core/tests/test_compound.py0000644000175100001770000001405414525470416021445 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst """ Tests for the compound module. """ import operator import astropy.units as u import numpy as np import pytest from astropy.coordinates import SkyCoord from numpy.testing import assert_allclose from regions.core import CompoundPixelRegion, PixCoord, RegionBoundingBox from regions.shapes import CirclePixelRegion, CircleSkyRegion from regions.tests.helpers import make_simple_wcs class TestCompoundPixel: """ Test compound pixel regions. """ # Two circles that overlap in one column c1 = CirclePixelRegion(PixCoord(5, 5), 4) c2 = CirclePixelRegion(PixCoord(11, 5), 4) def test_copy(self): reg = (self.c1 | self.c2).copy() assert isinstance(reg, CompoundPixelRegion) assert reg.operator is operator.or_ assert isinstance(reg.region1, CirclePixelRegion) assert reg.region1.center.xy == (5, 5) assert reg.region1.radius == 4 assert reg.region1.meta == {} assert reg.region1.visual == {} assert isinstance(reg.region2, CirclePixelRegion) assert reg.region2.center.xy == (11, 5) assert reg.region2.radius == 4 assert reg.region2.meta == {} assert reg.region2.visual == {} def test_rotate(self): reg = (self.c1 | self.c2).rotate(PixCoord(0, 0), 360 * u.deg) assert isinstance(reg, CompoundPixelRegion) assert reg.operator is operator.or_ assert isinstance(reg.region1, CirclePixelRegion) assert_allclose(reg.region1.center.xy, (5, 5)) assert reg.region1.radius == 4 assert reg.region1.meta == {} assert reg.region1.visual == {} assert isinstance(reg.region2, CirclePixelRegion) assert_allclose(reg.region2.center.xy, (11, 5)) assert reg.region2.radius == 4 assert reg.region2.meta == {} assert reg.region2.visual == {} def test_union(self): union = self.c1 | self.c2 assert isinstance(union, CompoundPixelRegion) mask = union.to_mask() assert_allclose(mask.data[:, 7], [0, 0, 1, 1, 1, 1, 1, 0, 0]) assert_allclose(mask.data[:, 6], [0, 1, 1, 1, 1, 1, 1, 1, 0]) def test_intersection(self): intersection = self.c1 & self.c2 mask = intersection.to_mask() assert_allclose(mask.data[:, 7], [0, 0, 1, 1, 1, 1, 1, 0, 0]) assert_allclose(mask.data[:, 6], [0, 0, 0, 0, 0, 0, 0, 0, 0]) def test_symdiff(self): symdiff = self.c1 ^ self.c2 mask = symdiff.to_mask() assert_allclose(mask.data[:, 7], [0, 0, 0, 0, 0, 0, 0, 0, 0]) assert_allclose(mask.data[:, 6], [0, 1, 1, 1, 1, 1, 1, 1, 0]) def test_to_mask(self): # fixes #168 pixcoord3 = PixCoord(1, 1) c3 = CirclePixelRegion(pixcoord3, 4) union2 = self.c1 | c3 mask1 = union2.to_mask() pixcoord4 = PixCoord(9, 9) c4 = CirclePixelRegion(pixcoord4, 4) union3 = self.c1 | c4 mask2 = union3.to_mask() # mask1 and mask2 should be equal assert_allclose(mask1.data, mask2.data) ref_data = np.array([[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], [0, 0, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0], [0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0], [0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0], [0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0], [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0], [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], [0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0], [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0], [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0], [0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0], [0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 0, 0], [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]]) assert_allclose(mask1.data, ref_data) def test_bounding_box(self): bbox = (self.c1 | self.c2).bounding_box assert bbox == RegionBoundingBox(1, 16, 1, 10) def test_invalid(self): with pytest.raises(ValueError): self.c1 | 1.0 with pytest.raises(ValueError): self.c1 | PixCoord(1.0, 2.0) def test_compound_sky(): skycoord1 = SkyCoord(0 * u.deg, 0 * u.deg, frame='galactic') c1 = CircleSkyRegion(skycoord1, 1 * u.deg) skycoord2 = SkyCoord(1 * u.deg, 1 * u.deg, frame='galactic') c2 = CircleSkyRegion(skycoord2, 0.5 * u.deg) test_coord1 = SkyCoord(1.2 * u.deg, 1.2 * u.deg, frame='galactic') test_coord2 = SkyCoord(0.5 * u.deg, 0.5 * u.deg, frame='galactic') test_coord3 = SkyCoord(0.7 * u.deg, 0.7 * u.deg, frame='galactic') test_coord4 = SkyCoord(2 * u.deg, 5 * u.deg, frame='galactic') wcs = make_simple_wcs(skycoord1, 0.1 * u.deg, 20) assert c2.contains(test_coord1, wcs) and not c1.contains(test_coord1, wcs) assert not c2.contains(test_coord2, wcs) and c1.contains(test_coord2, wcs) assert c1.contains(test_coord3, wcs) and c2.contains(test_coord3, wcs) assert (not c2.contains(test_coord4, wcs) and not c1.contains(test_coord4, wcs)) coords = SkyCoord([test_coord1, test_coord2, test_coord3, test_coord4], frame='galactic') union = c1 | c2 assert (union.contains(coords, wcs) == [True, True, True, False]).all() intersection = c1 & c2 assert ((intersection.contains(coords, wcs) == [False, False, True, False]).all()) diff = c1 ^ c2 assert (diff.contains(coords, wcs) == [True, True, False, False]).all() c3 = CircleSkyRegion(test_coord4, 0.1 * u.deg) union = c1 | c2 | c3 assert (union.contains(coords, wcs) == [True, True, True, True]).all() intersection = c1 & c2 & c3 assert ((intersection.contains(coords, wcs) == [False, False, False, False]).all()) diff = c1 ^ c2 ^ c3 assert (diff.contains(coords, wcs) == [True, True, False, True]).all() assert 'Compound' in str(union) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/core/tests/test_mask.py0000644000175100001770000001377714525470416020567 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst """ Tests for the mask module. """ import astropy.units as u import numpy as np import pytest from numpy.testing import assert_allclose, assert_almost_equal from regions.core.bounding_box import RegionBoundingBox from regions.core.mask import RegionMask from regions.core.pixcoord import PixCoord from regions.shapes import CircleAnnulusPixelRegion, CirclePixelRegion POSITIONS = [(-20, -20), (-20, 20), (20, -20), (60, 60)] def test_mask_input_shapes(): with pytest.raises(ValueError): mask_data = np.ones((10, 10)) bbox = RegionBoundingBox(5, 10, 5, 10) RegionMask(mask_data, bbox) def test_mask_array(): mask_data = np.ones((10, 10)) bbox = RegionBoundingBox(5, 15, 5, 15) mask = RegionMask(mask_data, bbox) data = np.array(mask) assert_allclose(data, mask.data) def test_mask_get_overlap_slices(): aper = CirclePixelRegion(PixCoord(5, 5), radius=10.) mask = aper.to_mask() slc = ((slice(0, 16, None), slice(0, 16, None)), (slice(5, 21, None), slice(5, 21, None))) assert mask.get_overlap_slices((25, 25)) == slc def test_mask_cutout_shape(): mask_data = np.ones((10, 10)) bbox = RegionBoundingBox(5, 15, 5, 15) mask = RegionMask(mask_data, bbox) with pytest.raises(ValueError): mask.cutout(np.arange(10)) with pytest.raises(ValueError): mask.to_image((10,)) def test_mask_cutout_copy(): data = np.ones((50, 50)) aper = CirclePixelRegion(PixCoord(25, 25), radius=10.) mask = aper.to_mask() cutout = mask.cutout(data, copy=True) data[25, 25] = 100. assert cutout[10, 10] == 1. # test quantity data data2 = np.ones((50, 50)) * u.adu cutout2 = mask.cutout(data2, copy=True) assert cutout2.unit == data2.unit data2[25, 25] = 100. * u.adu assert cutout2[10, 10].value == 1. @pytest.mark.parametrize('position', POSITIONS) def test_mask_cutout_no_overlap(position): data = np.ones((50, 50)) aper = CirclePixelRegion(PixCoord(position[0], position[1]), radius=10.) mask = aper.to_mask() cutout = mask.cutout(data) assert cutout is None weighted_data = mask.multiply(data) assert weighted_data is None image = mask.to_image(data.shape) assert image is None @pytest.mark.parametrize('position', POSITIONS) def test_mask_cutout_partial_overlap(position): data = np.ones((50, 50)) aper = CirclePixelRegion(PixCoord(position[0], position[1]), radius=30.) mask = aper.to_mask() cutout = mask.cutout(data) assert cutout.shape == mask.shape weighted_data = mask.multiply(data) assert weighted_data.shape == mask.shape image = mask.to_image(data.shape) assert image.shape == data.shape def test_mask_multiply(): radius = 10. data = np.ones((50, 50)) region = CirclePixelRegion(PixCoord(25, 25), radius=radius) mask = region.to_mask(mode='exact') data_weighted = mask.multiply(data) assert_almost_equal(np.sum(data_weighted), np.pi * radius**2) # test that multiply() returns a copy data[25, 25] = 100. assert data_weighted[10, 10] == 1. def test_mask_multiply_quantity(): radius = 10. data = np.ones((50, 50)) * u.adu region = CirclePixelRegion(PixCoord(25, 25), radius=radius) mask = region.to_mask(mode='exact') data_weighted = mask.multiply(data) assert data_weighted.unit == u.adu assert_almost_equal(np.sum(data_weighted.value), np.pi * radius**2) # test that multiply() returns a copy data[25, 25] = 100. * u.adu assert data_weighted[10, 10].value == 1. @pytest.mark.parametrize('value', (np.nan, np.inf)) def test_mask_nonfinite_fill_value(value): region = CircleAnnulusPixelRegion(PixCoord(0, 0), 10, 20) data = np.ones((101, 101)).astype(int) cutout = region.to_mask().cutout(data, fill_value=value) assert ~np.isfinite(cutout[0, 0]) def test_mask_multiply_fill_value(): region = CircleAnnulusPixelRegion(PixCoord(0, 0), 10, 20) data = np.ones((101, 101)).astype(int) cutout = region.to_mask().multiply(data, fill_value=np.nan) xypos = ((20, 20), (5, 5), (5, 35), (35, 5), (35, 35)) for x, y in xypos: assert np.isnan(cutout[y, x]) def test_mask_nonfinite_in_bbox(): """ Regression test that non-finite data values outside of the mask but within the bounding box are set to zero. """ data = np.ones((101, 101)) data[33, 33] = np.nan data[67, 67] = np.inf data[33, 67] = -np.inf data[22, 22] = np.nan data[22, 23] = np.inf radius = 20. reg1 = CirclePixelRegion(PixCoord(50, 50), radius) reg2 = CirclePixelRegion(PixCoord(5, 5), radius) wdata1 = reg1.to_mask(mode='exact').multiply(data) assert_allclose(np.sum(wdata1), np.pi * radius**2) wdata2 = reg2.to_mask(mode='exact').multiply(data) assert_allclose(np.sum(wdata2), 561.6040111923013) @pytest.mark.parametrize('x, y, exp_shape', [(0, 0, 245), (50, 50, 940), (100, 100, 245)]) def test_mask_get_values(x, y, exp_shape): aper = CircleAnnulusPixelRegion(PixCoord(x, y), inner_radius=10, outer_radius=20) data = np.ones((101, 101)) values = aper.to_mask(mode='center').get_values(data) assert values.shape == (exp_shape,) assert_allclose(np.sum(values), exp_shape) def test_mask_get_values_no_overlap(): aper = CirclePixelRegion(PixCoord(-100, -100), radius=3) data = np.ones((51, 51)) values = aper.to_mask().get_values(data) assert values.shape == (0,) def test_mask_get_values_mask(): aper = CirclePixelRegion(PixCoord(24.5, 24.5), radius=10.) data = np.ones((51, 51)) mask = aper.to_mask(mode='exact') with pytest.raises(ValueError): mask.get_values(data, mask=np.ones(3)) arr = mask.get_values(data, mask=None) assert_allclose(np.sum(arr), 100. * np.pi) data_mask = np.zeros(data.shape, dtype=bool) data_mask[25:] = True arr2 = mask.get_values(data, mask=data_mask) assert_allclose(np.sum(arr2), 100. * np.pi / 2.) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/core/tests/test_metadata.py0000644000175100001770000000372014525470416021377 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst """ Tests for the metadata module. """ import pytest from regions.core.metadata import RegionMeta, RegionVisual def test_region_meta(): meta_dict = {'text': 'hello world', 'tag': ['Tag1', 'Tag2']} meta = RegionMeta(meta_dict) for key, val in meta_dict.items(): assert val == meta[key] meta2 = meta.copy() assert isinstance(meta2, RegionMeta) text = 'new' meta['text'] = text assert meta2['text'] != text with pytest.raises(KeyError): RegionMeta({'invalid': 1}) with pytest.raises(KeyError): meta.update({'invalid': 1}) with pytest.raises(KeyError): meta.update(invalid=1) with pytest.raises(KeyError): meta.setdefault('invalid', 1) def test_region_visual(): meta_dict = {'color': 'blue', 'fontsize': 12} meta = RegionVisual(meta_dict) for key, val in meta_dict.items(): assert val == meta[key] meta2 = meta.copy() assert isinstance(meta2, RegionVisual) color = 'green' meta['color'] = color assert meta2['color'] != color with pytest.raises(KeyError): RegionVisual({'invalid': 1}) with pytest.raises(KeyError): meta.update({'invalid': 1}) with pytest.raises(KeyError): meta.update(invalid=1) with pytest.raises(KeyError): meta.setdefault('invalid', 1) def test_region_visual_mpl_kwargs(): meta_dict = {'color': 'blue'} meta = RegionVisual(meta_dict) kwargs = meta.define_mpl_kwargs('Patch') expected = {'edgecolor': 'blue', 'fill': False} assert kwargs == expected kwargs = meta.define_mpl_kwargs('Line2D') expected = {'markeredgecolor': 'blue', 'fillstyle': 'none', 'marker': 'o'} assert kwargs == expected kwargs = meta.define_mpl_kwargs('Text') expected = {'color': 'blue'} assert kwargs == expected with pytest.raises(ValueError): meta.define_mpl_kwargs('invalid') ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/core/tests/test_pixcoord.py0000644000175100001770000001635114525470416021452 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst """ Tests for the pixcoord module. """ import astropy.units as u import numpy as np import pytest from numpy.testing import assert_allclose, assert_equal from regions._utils.examples import make_example_dataset from regions.core.pixcoord import PixCoord @pytest.fixture(scope='session', name='wcs') def fixture_wcs(): config = dict(crpix=(18, 9), cdelt=(-10, 10), shape=(18, 36)) dataset = make_example_dataset(config=config) return dataset.wcs def test_pixcoord_copy_scalar(): pc1 = PixCoord(x=1, y=2) pc2 = pc1.copy() pc1.x = 99 pc1.y = 99 assert pc2.xy == (1, 2) def test_pixcoord_copy_array(): pc1 = PixCoord(x=[1, 2], y=[3, 4]) pc2 = pc1.copy() pc1.x[0] = 99 pc1.y[0] = 99 assert_equal(pc2.x, [1, 2]) assert_equal(pc2.y, [3, 4]) def test_pixcoord_basic_dimension(): with pytest.raises(ValueError): PixCoord(np.array([1, 2]), [3, 4, 5, 6]) def test_pixcoord_basics_scalar(): pc0 = PixCoord(x=1, y=2) pc1 = PixCoord(x=np.array(1), y=2) pc2 = PixCoord(x=np.array(1), y=np.array(2)) assert pc0 == pc1 assert pc1 == pc2 assert pc0.x == 1 assert pc0.y == 2 assert pc0.isscalar assert pc1.isscalar assert pc2.isscalar assert str(pc0) == 'PixCoord(x=1, y=2)' assert repr(pc0) == 'PixCoord(x=1, y=2)' with pytest.raises(TypeError): _ = len(pc0) with pytest.raises(IndexError): _ = pc0[0] def test_pixcoord_basics_array_1d(): pc0 = PixCoord(x=[1, 2, 3], y=[11, 22, 33]) pc1 = PixCoord(x=1, y=[1, 2, 3]) assert_equal(pc0.x, [1, 2, 3]) assert_equal(pc0.y, [11, 22, 33]) assert_equal(pc1.x, [1, 1, 1]) assert_equal(pc1.y, [1, 2, 3]) assert not pc0.isscalar assert not pc1.isscalar assert str(pc0) == 'PixCoord(x=[1 2 3], y=[11 22 33])' assert str(pc1) == 'PixCoord(x=[1 1 1], y=[1 2 3])' assert repr(pc0) == 'PixCoord(x=[1 2 3], y=[11 22 33])' assert repr(pc1) == 'PixCoord(x=[1 1 1], y=[1 2 3])' assert len(pc0) == 3 assert len(pc1) == 3 pc2 = list(iter(pc0))[-1] assert pc2.x == 3 assert pc2.y == 33 pc3 = pc0[-1] assert pc3.isscalar assert pc3.x == 3 assert pc3.y == 33 pc4 = pc0[1:] assert len(pc4) == 2 assert_equal(pc4.x, [2, 3]) assert_equal(pc4.y, [22, 33]) def test_pixcoord_basics_array_2d(): pc0 = PixCoord([[1, 2, 3], [4, 5, 6]], [[11, 12, 13], [14, 15, 16]]) assert_equal(pc0.x, [[1, 2, 3], [4, 5, 6]]) assert_equal(pc0.y, [[11, 12, 13], [14, 15, 16]]) assert pc0.isscalar is False expected = ('PixCoord(x=[[1 2 3]\n [4 5 6]], ' 'y=[[11 12 13]\n [14 15 16]])') assert str(pc0) == expected assert repr(pc0) == expected assert len(pc0) == 2 assert_equal(pc0[0].x, pc0.x[0]) assert_equal(pc0[0].y, pc0.y[0]) pc1 = list(iter(pc0)) assert_equal(pc1[0].x, pc0.x[0]) assert_equal(pc1[0].y, pc0.y[0]) def test_pixcoord_to_sky_scalar(wcs): pc1 = PixCoord(x=18, y=9) sc = pc1.to_sky(wcs=wcs) assert sc.name == 'galactic' assert_allclose(sc.data.lon.deg, 349.88093995435634) assert_allclose(sc.data.lat.deg, 10.003028030623508) pc2 = PixCoord.from_sky(skycoord=sc, wcs=wcs) assert isinstance(pc2.x, float) assert pc2.isscalar assert pc1 == pc2 def test_pixcoord_to_sky_array_1d(wcs): pc1 = PixCoord(x=[17, 18], y=[8, 9]) sc = pc1.to_sky(wcs=wcs) assert sc.name == 'galactic' assert_allclose(sc.data.lon.deg, [0, 349.88094]) assert_allclose(sc.data.lat.deg, [0, 10.003028]) pc2 = PixCoord.from_sky(skycoord=sc, wcs=wcs) assert isinstance(pc2.x, np.ndarray) assert pc2.x.shape == (2,) assert not pc2.isscalar assert pc1 == pc2 def test_pixcoord_to_sky_array_2d(wcs): pc0 = PixCoord(x=[[17, 18]], y=[[8, 9]]) pc1 = PixCoord(x=[[17, 17, 17], [18, 18, 18]], y=[[8, 8, 8], [9, 9, 9]]) sc0 = pc0.to_sky(wcs=wcs) assert sc0.name == 'galactic' sc1 = pc1.to_sky(wcs=wcs) assert sc1.name == 'galactic' assert_allclose(sc1.data.lon.deg, [[0, 0, 0], [349.88094, 349.88094, 349.88094]]) assert_allclose(sc1.data.lat.deg, [[0, 0, 0], [10.003028, 10.003028, 10.003028]]) assert_allclose(sc0.data.lon.deg, [[0, 349.88094]]) assert_allclose(sc0.data.lat.deg, [[0, 10.003028]]) pc2 = PixCoord.from_sky(skycoord=sc0, wcs=wcs) assert isinstance(pc2.x, np.ndarray) assert pc2.x.shape == (1, 2) assert not pc2.isscalar assert pc0 == pc2 def test_pixcoord_separation_scalar(): pc1 = PixCoord(x=1, y=2) pc2 = PixCoord(x=4, y=6) sep = pc1.separation(pc2) assert_allclose(sep, 5) def test_pixcoord_separation_array_1d(): pc1 = PixCoord(x=[1, 1], y=[2, 2]) pc2 = PixCoord(x=[4, 4], y=[6, 6]) sep = pc1.separation(pc2) assert_allclose(sep, [5, 5]) def test_pixcoord_separation_array_2d(): pc1 = PixCoord(x=[[1, 1]], y=[[2, 2]]) pc2 = PixCoord(x=[[4, 4]], y=[[6, 6]]) sep = pc1.separation(pc2) assert isinstance(sep, np.ndarray) assert sep.shape == (1, 2) assert_allclose(sep, [[5, 5]]) def test_equality(): arr = np.array([1, 2]) pc1 = PixCoord(arr[0], arr[1]) pc2 = PixCoord(arr[0] + 0.0000001, arr[1]) assert not pc1 == arr assert pc1 == PixCoord(arr[0], arr[1]) assert pc1 == pc2 pc3 = PixCoord([[1, 2, 3], [4, 5, 6]], [[11, 12, 13], [14, 15, 16]]) pc4 = PixCoord([[1, 2, 3], [4, 5, 6]], [[11.0000002, 12, 13], [14, 15, 16]]) assert pc3 == pc4 assert pc3 == PixCoord([[1, 2, 3], [4, 5, 6]], [[11, 12, 13], [14, 15, 16]]) def test_pixcoord_xy(): arr = np.array([1, 2]) pc = PixCoord(arr[0], arr[1]) assert pc.xy[0] == pc.x assert pc.xy[1] == pc.y def test_pixcoord_rotate_scalar(): point = PixCoord(3, 4) center = PixCoord(2, 3) point = point.rotate(center, 90 * u.deg) assert_allclose(point.xy, (1, 4)) def test_pixcoord_rotate_array(): point = PixCoord([3, 3], [4, 4]) center = PixCoord(2, 3) point = point.rotate(center, 90 * u.deg) assert_allclose(point.xy, ([1, 1], [4, 4])) def test_pixcoord_addition(): point1 = PixCoord([3, 3], [4, 4]) point2 = PixCoord([5, 7], [6, 1]) center = PixCoord(2, 3) p1 = point1 + point2 p2 = point2 + point1 assert p1 == p2 assert_equal(p1.x, (8, 10)) assert_equal(p1.y, (10, 5)) p3 = point1 + center p4 = center + point1 assert p3 == p4 assert_equal(p3.x, (5, 5)) assert_equal(p3.y, (7, 7)) p5 = point1 + point1 + point1 assert_equal(p5.x, point1.x * 3) assert_equal(p5.y, point1.y * 3) with pytest.raises(TypeError): point1 + 10 with pytest.raises(ValueError): point1 + PixCoord([1, 1, 1], [2, 2, 2]) def test_pixcoord_subtraction(): point1 = PixCoord([3, 3], [4, 4]) point2 = PixCoord([5, 7], [6, 1]) center = PixCoord(2, 3) p1 = point2 - point1 assert_equal(p1.x, (2, 4)) assert_equal(p1.y, (2, -3)) p2 = point1 - center assert_equal(p2.x, (1, 1)) assert_equal(p2.y, (1, 1)) with pytest.raises(TypeError): point1 - 10 with pytest.raises(ValueError): point1 - PixCoord([1, 1, 1], [2, 2, 2]) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/core/tests/test_regions.py0000644000175100001770000000537214525470416021272 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst """ Tests for the regions module. """ import pytest from astropy.table import Table from regions.core import PixCoord, Regions from regions.shapes import CirclePixelRegion def test_regions_inputs(): regs = [] for radius in range(1, 5): center = PixCoord(14, 21) regs.append(CirclePixelRegion(center, radius=radius)) regions = Regions(regs) assert len(regions) == 4 def test_regions_no_input(): regions = Regions() assert len(regions) == 0 regions = Regions([]) assert len(regions) == 0 def test_regions_invalid_input(): match = "'int' object is not iterable" with pytest.raises(TypeError, match=match): Regions(1) match = 'Input regions must be a list of Region objects' with pytest.raises(TypeError, match=match): Regions([1]) with pytest.raises(TypeError, match=match): Regions([1, 2, 3]) def test_regions_append(): regions = Regions() for radius in range(1, 5): center = PixCoord(14, 21) regions.append(CirclePixelRegion(center, radius=radius)) assert len(regions) == 4 match = 'Input region must be a Region object' with pytest.raises(TypeError, match=match): regions.append(1) def test_regions_extend(): regions = Regions() regs = [] for radius in range(1, 5): center = PixCoord(14, 21) regs.append(CirclePixelRegion(center, radius=radius)) regions.extend(regs) assert len(regions) == 4 regions.extend(regions) assert len(regions) == 8 match = 'Input regions must be a list of Region objects' with pytest.raises(TypeError, match=match): regions.extend([1]) def test_regions_methods(): regions = Regions() for radius in range(1, 5): center = PixCoord(14, 21) regions.append(CirclePixelRegion(center, radius=radius)) reg_slc = regions[0:2] assert len(reg_slc) == 2 reg = CirclePixelRegion(PixCoord(0, 0), radius=1) regions.insert(0, reg) assert len(regions) == 5 assert regions[0] == reg regions2 = regions.copy() regions.reverse() assert regions.regions == regions2.regions[::-1] outreg = regions.pop(-1) assert outreg == reg def test_regions_get_formats(): reg = CirclePixelRegion(PixCoord(0, 0), radius=1) regions = Regions([reg]) tbl = regions.get_formats() assert isinstance(tbl, Table) assert len(tbl) == 3 def test_regions_repr(): reg = CirclePixelRegion(PixCoord(0, 0), radius=1) regions = Regions([reg]) regions_str = '[]' regions_repr = f'' assert str(regions) == regions_str assert repr(regions) == regions_repr ././@PaxHeader0000000000000000000000000000003200000000000010210 xustar0026 mtime=1700163875.51854 regions-0.8/regions/io/0000755000175100001770000000000014525470444014522 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/__init__.py0000644000175100001770000000126214525470416016633 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst """ This subpackage provides tools for reading and writing region files. """ from .crtf.connect import * # noqa: F401, F403 from .crtf.core import * # noqa: F401, F403 from .crtf.read import * # noqa: F401, F403 from .crtf.write import * # noqa: F401, F403 from .ds9.connect import * # noqa: F401, F403 from .ds9.core import * # noqa: F401, F403 from .ds9.read import * # noqa: F401, F403 from .ds9.write import * # noqa: F401, F403 from .fits.connect import * # noqa: F401, F403 from .fits.core import * # noqa: F401, F403 from .fits.read import * # noqa: F401, F403 from .fits.write import * # noqa: F401, F403 ././@PaxHeader0000000000000000000000000000003200000000000010210 xustar0026 mtime=1700163875.51854 regions-0.8/regions/io/crtf/0000755000175100001770000000000014525470444015460 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/crtf/__init__.py0000644000175100001770000000025414525470416017571 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst """ This subpackage provides tools for reading and writing CRTF (CASA Region Text Format) region files. """ ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/crtf/connect.py0000644000175100001770000000257114525470416017467 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst from astropy.utils.data import get_readable_fileobj from regions.core import Region, Regions from regions.core.registry import RegionsRegistry __all__ = [] @RegionsRegistry.register(Region, 'identify', 'crtf') @RegionsRegistry.register(Regions, 'identify', 'crtf') def is_crtf(methodname, filepath): """ Identify a CRTF region file. Parameters ---------- methodname : {'read', 'write'} The method name called that needs auto-identification. filepath : str The path to the file. Returns ------- result : bool Returns `True` if the given file is a CRTF region file. """ all_exten = ('.crtf', '.crtf.gz') exten = {'read': all_exten, 'write': all_exten[0]} if methodname == 'write': return filepath.lower().endswith(exten[methodname]) elif methodname == 'read': if (isinstance(filepath, str) and filepath.lower().endswith(exten[methodname])): return True else: with get_readable_fileobj(filepath, encoding='binary') as fileobj: signature = '#CRTF' pos = fileobj.tell() sig = fileobj.read(len(signature)) fileobj.seek(pos) return sig == signature or sig == signature.encode() else: return False ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/crtf/core.py0000644000175100001770000000223514525470416016763 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst from astropy.utils.exceptions import AstropyUserWarning __all__ = ['CRTFRegionParserWarning', 'CRTFRegionParserError'] class CRTFRegionParserWarning(AstropyUserWarning): """ A generic warning class for CRTF region parsing. """ class CRTFRegionParserError(ValueError): """ A generic error class for CRTF region parsing. """ # Valid symbols in CRTF valid_symbols = {'.': 'point', ',': 'pixel', 'o': 'circle', 'v': 'triangle_down', '^': 'triangle_up', '<': 'triangle_left', '>': 'triangle_right', '1': 'tri_down', '2': 'tri_up', '3': 'tri_left', '4': 'tri_right', 's': 'square', 'p': 'pentagon', '*': 'star', 'h': 'hexagon1', 'H': 'hexagon2', '+': 'plus', 'x': 'x', 'D': 'diamond', 'd': 'thin_diamond', '|': 'vline', '_': 'hline'} ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/crtf/io_core.py0000644000175100001770000005522514525470416017461 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst import numbers from warnings import warn import astropy.units as u from astropy.coordinates import (Angle, SkyCoord, UnitSphericalRepresentation, frame_transform_graph) from astropy.utils.exceptions import AstropyUserWarning from regions.core.core import PixCoord, SkyRegion from regions.core.metadata import RegionMeta, RegionVisual from regions.io.crtf.core import CRTFRegionParserWarning from regions.shapes import (CircleAnnulusPixelRegion, CircleAnnulusSkyRegion, CirclePixelRegion, CircleSkyRegion, EllipseAnnulusPixelRegion, EllipseAnnulusSkyRegion, EllipsePixelRegion, EllipseSkyRegion, LinePixelRegion, LineSkyRegion, PointPixelRegion, PointSkyRegion, PolygonPixelRegion, PolygonSkyRegion, RectangleAnnulusPixelRegion, RectangleAnnulusSkyRegion, RectanglePixelRegion, RectangleSkyRegion, RegularPolygonPixelRegion, TextPixelRegion, TextSkyRegion) __all__ = [] regions_attributes = dict(circle=['center', 'radius'], ellipse=['center', 'width', 'height', 'angle'], rectangle=['center', 'width', 'height', 'angle'], polygon=['vertices'], circleannulus=['center', 'inner_radius', 'outer_radius'], ellipseannulus=['center', 'inner_width', 'inner_height', 'outer_width', 'outer_height', 'angle'], line=['start', 'end'], point=['center'], text=['center']) regions_attributes['rectangleannulus'] = regions_attributes['ellipseannulus'] # Map the region names in the respective format to the ones available in # this package reg_mapping = {'CRTF': {x: x for x in regions_attributes}} reg_mapping['CRTF']['rotbox'] = 'rectangle' reg_mapping['CRTF']['box'] = 'rectangle' reg_mapping['CRTF']['centerbox'] = 'rectangle' reg_mapping['CRTF']['poly'] = 'polygon' reg_mapping['CRTF']['symbol'] = 'point' reg_mapping['CRTF']['text'] = 'text' reg_mapping['CRTF']['annulus'] = 'circleannulus' # valid astropy coordinate frames in their respective formats valid_coordsys = {'CRTF': ['image', 'fk5', 'fk4', 'galactic', 'geocentrictrueecliptic', 'supergalactic', 'icrs']} # Map astropy's coordinate frame names with their respective name in # the file format. coordsys_mapping = {'CRTF': {x: x.upper() for x in valid_coordsys['CRTF']}} # Coordinate frame names must be uppercase following the CASA CRTF syntax coordsys_mapping['CRTF']['geocentrictrueecliptic'] = 'ECLIPTIC' coordsys_mapping['CRTF']['fk5'] = 'J2000' coordsys_mapping['CRTF']['fk4'] = 'B1950' coordsys_mapping['CRTF']['supergalactic'] = 'SUPERGAL' class RegionConversionError(ValueError): """ A generic error class for Shape to Region conversions. """ class _ShapeList(list): """ A class to hold a list of `~regions.Shape` objects. """ def to_regions(self): """ Convert to a list of `~regions.Region` objects. """ regions = [] for shape in self: # Skip elliptical multi-annulus for now if shape.region_type == 'ellipse' and len(shape.coord) > 5: msg = f'Skipping elliptical annulus {shape}' warn(msg, AstropyUserWarning) continue if shape.region_type in ['box'] and shape.format_type == 'CRTF': msg = f'Skipping {shape.region_type} {shape}' warn(msg, CRTFRegionParserWarning) continue region = shape.to_region() regions.append(region) return regions def to_crtf(self, coordsys='fk5', fmt='.6f', radunit='deg'): """ Convert to CRTF (CASA Region Text Format) region strings. Parameters ---------- coordsys : str An Astropy coordinate system that overrides the coordinate system frame for all regions. fmt : str A python string format defining the output precision. Default is '.6f', which is accurate to 0.0036 arcseconds. radunit : str The unit of the radius. Returns ------- region_string : str A CRFT region string. """ crtf_strings = { 'circle': '{0}circle[[{1:FMT}deg, {2:FMT}deg], {3:FMT}RAD]', 'circleannulus': ('{0}annulus[[{1:FMT}deg, {2:FMT}deg], ' '[{3:FMT}RAD, {4:FMT}RAD]]'), # Make sure that width goes to minor axis and height to # major axis 'ellipse': ('{0}ellipse[[{1:FMT}deg, {2:FMT}deg], [{4:FMT}RAD, ' '{3:FMT}RAD], {5:FMT}deg]'), 'rectangle': ('{0}rotbox[[{1:FMT}deg, {2:FMT}deg], [{3:FMT}RAD, ' '{4:FMT}RAD], {5:FMT}deg]'), 'polygon': '{0}poly[{1}]', 'point': '{0}point[[{1:FMT}deg, {2:FMT}deg]]', 'symbol': '{0}symbol[[{1:FMT}deg, {2:FMT}deg], {symbol}]', 'text': '{0}text[[{1:FMT}deg, {2:FMT}deg], \'{text}\']', 'line': ('{0}line[[{1:FMT}deg, {2:FMT}deg], [{3:FMT}deg, ' '{4:FMT}deg]]')} output = '#CRTFv0\n' if radunit == 'arcsec': # arcseconds are allowed for all but image coordinates if coordsys.lower() not in ('image',): radunitstr = '"' else: raise ValueError('Radius unit arcsec not valid for ' f'coordsys {coordsys}') else: radunitstr = radunit for key, val in crtf_strings.items(): crtf_strings[key] = val.replace('FMT', fmt).replace('RAD', radunitstr) # CASA does not support global coordinate specification, even # though the documentation for the specification explicitly # states that it does. global_coord = coordsys_mapping['CRTF'][coordsys.lower()] output += f'global coord={global_coord}\n' for shape in self: shape.check_crtf() shape.meta = _to_crtf_meta(shape.meta) # if unspecified, include is True. Despite the # specification, CASA does *not* support a preceding "+". If # you want a region included, leave the opening character # blank. include = '' if shape.include in (False, '-'): include = '-' if shape.meta.get('type', 'reg') == 'ann': include += 'ann ' if shape.meta.get('label', '') != '': shape.meta['label'] = f"'{shape.meta['label']}'" keylist = ('include', 'comment', 'symbol', 'coord', 'text', 'range', 'corr', 'type') meta_pairs = [] for key, val in shape.meta.items(): if key not in keylist: meta_pairs.append(f'{key}={val}') meta_str = ', '.join(meta_pairs) # The first item should be the coordinates, since CASA # cannot recognize a region without an inline coordinate # specification. It can be, but does not need to be, # comma-separated at the start. shape_coordsys = getattr(shape, 'coordsys') if shape_coordsys.lower() != coordsys.lower(): coord = coordsys_mapping['CRTF'][coordsys.lower()] if meta_str.strip(): meta_str = f'coord={coord}, ' + meta_str else: # if there is no metadata at all (above), the # trailing comma is incorrect meta_str = f'coord={coord}' if 'comment' in shape.meta: meta_str += ', ' + shape.meta['comment'] if 'range' in shape.meta: shape.meta['range'] = [str(str(x).replace(' ', '')) for x in shape.meta['range']] meta_str += f", range={shape.meta['range']}".replace("'", '') if 'corr' in shape.meta: meta_str += f", corr={shape.meta['corr']}".replace("'", '') coord = [] if coordsys not in ['image', 'physical']: for val in shape.coord: if isinstance(val, Angle): coord.append(float(val.value)) else: if radunit == '' or radunit is None: coord.append(float(val.value)) else: coord.append(float(val.to(radunit).value)) else: for val in shape.coord: if isinstance(val, u.Quantity): coord.append(float(val.value)) else: coord.append(float(val)) if (shape.region_type in ['ellipse', 'rectangle'] and len(shape.coord) % 2 == 1): coord[-1] = float(shape.coord[-1].to('deg').value) if shape.region_type == 'polygon': vals = [f'[{x:{fmt}}deg, {y:{fmt}}deg]' for x, y in zip(coord[::2], coord[1::2])] coord = ', '.join(vals) line = crtf_strings['polygon'].format(include, coord) elif shape.region_type == 'point': if 'symbol' in shape.meta: line = crtf_strings['symbol'].format( include, *coord, symbol=shape.meta['symbol']) else: line = crtf_strings['point'].format(include, *coord) elif shape.region_type == 'ellipse': coord[2:] = [x / 2 for x in coord[2:]] if len(coord) % 2 == 1: coord[-1] *= 2 line = crtf_strings['ellipse'].format(include, *coord) elif shape.region_type == 'text': line = crtf_strings['text'].format( include, *coord, text=shape.meta['text']) else: line = crtf_strings[shape.region_type].format(include, *coord) if meta_str.strip(): output += f'{line}, {meta_str}\n' else: output += f'{line}\n' return output class _Shape: """ Helper class to represent a CRTF Region. This serves as intermediate step in the parsing process. Parameters ---------- coordsys : str An Astropy Coordinate system frame used in the region. region_type : str The type of the region (as defined in this package). coord : list of `~astropy.coordinates.Angle` or `~astropy.units.Quantity` The region coordinates. meta : dict The meta attributes. composite : bool Flag indicting whether the region is a Composite region. include : bool Flag indicating where to include or exclude the region. """ shape_to_sky_region = dict(circle=CircleSkyRegion, ellipse=EllipseSkyRegion, rectangle=RectangleSkyRegion, polygon=PolygonSkyRegion, circleannulus=CircleAnnulusSkyRegion, ellipseannulus=EllipseAnnulusSkyRegion, rectangleannulus=RectangleAnnulusSkyRegion, line=LineSkyRegion, point=PointSkyRegion, text=TextSkyRegion) shape_to_pixel_region = dict(circle=CirclePixelRegion, ellipse=EllipsePixelRegion, rectangle=RectanglePixelRegion, polygon=PolygonPixelRegion, circleannulus=CircleAnnulusPixelRegion, ellipseannulus=EllipseAnnulusPixelRegion, rectangleannulus=RectangleAnnulusPixelRegion, line=LinePixelRegion, point=PointPixelRegion, text=TextPixelRegion) error = RegionConversionError def __init__(self, coordsys, region_type, coord, meta, composite, include): self._coordsys = coordsys self._region_type = region_type self.coord = coord self.meta = meta self.composite = composite self.include = include @property def coordsys(self): return self._coordsys @coordsys.setter def coordsys(self, value): self._coordsys = value.lower() self._validate() @property def region_type(self): return self._region_type @region_type.setter def region_type(self, value): self._region_type = value.lower() self._validate() def __str__(self): ss = self.__class__.__name__ ss += f'\nType: {self.meta.get("type", "reg")}' ss += f'\nCoord sys: {self.coordsys}' ss += f'\nRegion type: {self.region_type}' if self.region_type == 'symbol': ss += f"\nSymbol: {self.meta['symbol']}" if self.region_type == 'text': ss += f"\nText: {self.meta['text']}" ss += f'\nMeta: {self.meta}' ss += f'\nComposite: {self.composite}' ss += f'\nInclude: {self.include}' ss += '\n' return ss def convert_coords(self): """ Process a list of coordinates. This mainly searches for a tuple of coordinates in the coordinate list and creates a SkyCoord or PixCoord object from them if appropriate for a given region type. This involves again some coordinate transformation, so this step could be moved to the parsing process. """ if self.coordsys in ['image', 'physical']: coords = self._convert_pix_coords() else: coords = self._convert_sky_coords() if self.region_type == 'line': coords = [coords[0][0], coords[0][1]] if self.region_type == 'text': coords.append(self.meta['text']) return coords def _convert_sky_coords(self): """ Convert to sky coordinates. """ parsed_angles = [] for x, y in zip(self.coord[:-1:2], self.coord[1::2]): if isinstance(x, Angle) and isinstance(y, Angle): parsed_angles.append((x, y)) frame = frame_transform_graph.lookup_name(self.coordsys) if len(parsed_angles) == 0: raise ValueError('error parsing region') lon, lat = zip(*parsed_angles) if (hasattr(lon, '__len__') and hasattr(lat, '__len__') and len(lon) == 1 and len(lat) == 1): # force entries to be scalar if they are length-1 lon, lat = u.Quantity(lon[0]), u.Quantity(lat[0]) else: # otherwise, they are vector quantities lon, lat = u.Quantity(lon), u.Quantity(lat) sphcoords = UnitSphericalRepresentation(lon, lat) coords = [SkyCoord(frame(sphcoords))] if self.region_type != 'polygon': coords += self.coord[len(coords * 2):] return coords def _convert_pix_coords(self): """ Convert to pixel coordinates. """ if self.region_type in ['polygon', 'line']: # have to special-case polygon in the phys coord case # b/c can't typecheck when iterating as in sky coord case coords = [PixCoord(self.coord[0::2], self.coord[1::2])] else: temp = [_.value for _ in self.coord] coord = PixCoord(temp[0], temp[1]) coords = [coord] + temp[2:] # The angle remains as a quantity object. Modulus check makes # sure that it works for ellipse/rectangle annulus. if (self.region_type in ['ellipse', 'rectangle'] and len(coords) % 2 == 0): coords[-1] = self.coord[-1] return coords def to_region(self): """ Convert to a `~regions.Region` object. """ coords = self.convert_coords() viz_keywords = ['color', 'dash', 'dashlist', 'width', 'font', 'symsize', 'symbol', 'symsize', 'fontsize', 'fontstyle', 'usetex', 'labelpos', 'labeloff', 'labelcolor', 'linewidth', 'linestyle', 'point', 'textangle', 'fontweight', 'symthick', 'default_style', 'fill', 'textrotate', 'fontstyle'] if isinstance(coords[0], SkyCoord): reg = self.shape_to_sky_region[self.region_type](*coords) elif isinstance(coords[0], PixCoord): reg = self.shape_to_pixel_region[self.region_type](*coords) else: self._raise_error('No central coordinate') reg.visual = RegionVisual() reg.meta = RegionMeta() # both 'text' and 'label' should be set to the same value, where # we default to the 'text' value since that is the one used by # ds9 regions label = self.meta.get('text', self.meta.get('label', '')) if label != '': reg.meta['label'] = label for key in self.meta: if key in viz_keywords: reg.visual[key] = self.meta[key] else: reg.meta[key] = self.meta[key] reg.meta['include'] = self.include return reg def _raise_error(self, msg): raise self.error(msg) def check_crtf(self): """ Check for CRTF compatibility. """ if self.region_type not in regions_attributes: raise ValueError(f'"{self.region_type}" is not a valid region ' 'type') if self.coordsys not in valid_coordsys['CRTF']: raise ValueError(f'"{self.coordsys}" is not a valid coordinate ' 'reference frame') def _validate(self): """ Check whether all the attributes of this object is valid. """ if self.region_type not in regions_attributes: raise ValueError(f'"{self.region_type}" is not a valid region ' 'type') if self.coordsys not in valid_coordsys['CRTF']: raise ValueError(f'"{self.coordsys}" is not a valid coordinate ' 'reference frame') def _to_shape_list(region_list, coordinate_system='fk5'): """ Convert a list of regions into a `~regions.ShapeList` object. Parameters ---------- region_list : list A list of `regions.Region` objects. coordinate_system : str, optional The Astropy coordinate system frame in which all the coordinates present in the ``region_list`` will be converted. Default is 'fk5'. Returns ------- shape_list: `regions.ShapeList` A `~regions.ShapeList` object. """ shape_list = _ShapeList() for region in region_list: if isinstance(region, SkyRegion): reg_type = region.__class__.__name__[:-9].lower() elif isinstance(region, RegularPolygonPixelRegion): reg_type = 'polygon' else: reg_type = region.__class__.__name__[:-11].lower() if reg_type == 'polygon': coord = region.vertices else: coord = [] for val in regions_attributes[reg_type]: coord.append(getattr(region, val)) if coordinate_system: coordsys = coordinate_system else: if isinstance(region, SkyRegion): coordsys = coord[0].name else: coordsys = 'image' new_coord = [] for val in coord: if isinstance(val, Angle): # convert Angle to Quantity; Angle values get units # stripped in serialization, but Quantity gets converted new_coord.append(u.Quantity(val)) elif isinstance(val, (u.Quantity, numbers.Number)): new_coord.append(val) elif isinstance(val, PixCoord): new_coord.append(u.Quantity(val.x, u.dimensionless_unscaled)) new_coord.append(u.Quantity(val.y, u.dimensionless_unscaled)) else: frame = frame_transform_graph.lookup_name(coordsys) new_coord.append(Angle(val.transform_to(frame).spherical.lon)) new_coord.append(Angle(val.transform_to(frame).spherical.lat)) meta = dict(region.meta) meta.update(region.visual) if reg_type == 'text': meta['text'] = meta.get('text', meta.pop('label', '')) include = region.meta.pop('include', True) shape_list.append(_Shape(coordsys, reg_type, new_coord, meta, False, include)) return shape_list def _to_crtf_meta(shape_meta): """ Make the metadata CRTF compatible by filtering and mapping the valid keys. Parameters ---------- shape_meta : dict A meta attribute of a `regions.Region` object. Returns ------- meta : dict A CRTF compatible meta dictionary. """ # please refer : https://casaguides.nrao.edu/index.php/CASA_Region_Format # meta keys allowed in CRTF valid_keys = ['label', 'include', 'frame', 'range', 'veltype', 'restfreq', 'coord', 'type', 'text', 'corr'] # visual keys allowed in CRTF valid_keys += ['color', 'width', 'font', 'symthick', 'symsize', 'fontsize', 'fontstyle', 'usetex', 'labelpos', 'labeloff', 'linewidth', 'linestyle', 'symbol'] key_mappings = {} return _to_io_meta(shape_meta, valid_keys, key_mappings) def _to_io_meta(shape_meta, valid_keys, key_mappings): """ Make metadata compatible with a specific IO by filtering and mapping to its valid keys. Parameters ---------- shape_meta : dict A meta attribute of a `regions.Region` object. valid_keys : list The valid keys of a particular file format. key_mappings : dict A dictionary mapping of the actual name of the key in the format. Returns ------- meta : dict An IO compatible meta dictionary according to ``valid_keys`` and ``key_mappings``. """ meta = {} for key in shape_meta: if key in valid_keys: meta[key_mappings.get(key, key)] = shape_meta[key] return meta ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/crtf/read.py0000644000175100001770000004567414525470416016764 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst import copy import itertools import re from warnings import warn import astropy.units as u from astropy.coordinates import Angle, frame_transform_graph from astropy.utils.data import get_readable_fileobj from regions.core import Regions from regions.core.registry import RegionsRegistry from regions.io.crtf.core import (CRTFRegionParserError, CRTFRegionParserWarning, valid_symbols) from regions.io.crtf.io_core import _Shape, _ShapeList, reg_mapping __all__ = [] # All CASA files start with '#CRTF' . It may also include the version # number like '#CRTFv0' . regex_begin = re.compile(r'^#CRTFv?[\d]?') # Comment format regex_comment = re.compile(r'^#.*$') # Identifies the global attributes Format regex_global = re.compile(r'^global\s+(?P.*)?') # Coordinate Format : '[x, y]' regex_coordinate = re.compile(r'\[([\w.+-:]*?)\s*[,]\s*([\w.+-:]*?)\]') # Single length format, e.g., helps extract the radius of a circle regex_length = re.compile(r'(?:\[[^=\]]*\])+[,]\s*([^\[]*)\]') # Extracts each 'parameter=value' pair regex_meta = re.compile(r'(?:(\w+)\s*=[\s\'\"]*([^,\[\]]+?)[\'\",]+)|(?:(\w+)\s*=\s*\[(.*?)\])') # noqa: E501 # Region format which segregates the include ('+'|'-') parameter, the # kind of definition ('ann' for annotations or '' for regions) and region # type. regex_region = re.compile(r'(?P[+-])?(?Pann(?=\s))?\s*(?P[a-z]*?)\s?\[[^=]*]') # noqa: E501 # Line format which checks the validity of the line and segregates the # meta attributes from the region format. regex_line = re.compile(r'(?P[+-]?(?:ann(?=\s))?\s*[a-z]+?\s?\[[^=]+\])(?:\s*,?\s*(?P.*))?') # noqa: E501 @RegionsRegistry.register(Regions, 'read', 'crtf') def _read_crtf(filename, errors='strict', cache=False): """ Read a CRTF region file and return a list of region objects. Parameters ---------- filename : str The filename of the file to access. errors : {'strict', 'warn', 'ignore'}, optional The error handling scheme to use for handling parsing errors. The default is 'strict', which will raise a `~regions.CRTFRegionParserError`. 'warn' will raise a `~regions.CRTFRegionParserWarning`, and 'ignore' will do nothing (i.e., be silent). cache : bool or 'update', optional Whether to cache the contents of remote URLs. If 'update', check the remote URL for a new version but store the result in the cache. Returns ------- regions : list A list of `~regions.Region` objects. """ with get_readable_fileobj(filename) as fh: if regex_begin.search(fh.readline()): region_string = fh.read() return _parse_crtf(region_string, errors=errors) else: raise CRTFRegionParserError('Every CRTF Region must start with ' '"#CRTF"') @RegionsRegistry.register(Regions, 'parse', 'crtf') def _parse_crtf(region_string, errors='strict'): parser = _CRTFParser(region_string, errors=errors) return Regions(parser.shapes.to_regions()) class _CRTFParser: """ Parse a CRTF string. This class transforms a CRTF string to a `~regions.io.core.ShapeList`. The result is stored in the ``shapes`` attribute. Parameters ---------- region_string : str A CRTF region string. errors : {'strict', 'warn', 'ignore'}, optional The error handling scheme to use for handling parsing errors. The default is 'strict', which will raise a `~regions.CRTFRegionParserError`. 'warn' will raise a `~regions.CRTFRegionParserWarning`, and 'ignore' will do nothing (i.e., be silent). """ # Each line is tested for either containing a region with meta # attributes or global parameters. If meta attributes or global # parameters are found, they are stored in the ``global_meta`` # attribute. If a region is found, then ``_CRTFRegionParser`` # is invoked to transform the line into a `~regions.io.core.Shape` # object, which is stored in the ``shapes`` attribute. # valid definition (region or annotation) types valid_definition = ('box', 'centerbox', 'rotbox', 'poly', 'circle', 'annulus', 'ellipse', 'line', 'vector', 'text', 'symbol') # valid parameters (attributes) valid_global_keys = ('coord', 'frame', 'corr', 'veltype', 'restfreq', 'linewidth', 'linestyle', 'symsize', 'symthick', 'color', 'font', 'fontsize', 'fontstyle', 'usetex', 'labelpos', 'labelcolor', 'labeloff', 'range') def __init__(self, region_string, errors='strict'): if errors not in ('strict', 'ignore', 'warn'): raise ValueError('errors must be one of "strict", "ignore", or ' '"warn"') self.region_string = region_string self.errors = errors self.global_meta = {} # global states self.shapes = _ShapeList() self.run() def __str__(self): ss = self.__class__.__name__ ss += f'\nErrors: {self.errors}' ss += f'\nGlobal meta: {self.global_meta}' ss += f'\nShapes: {self.shapes}' ss += '\n' return ss def parse_line(self, line): """ Parse a single line. """ # Skip blanks if line == '': return # Skip comments if regex_comment.search(line): return # Special case / header: parse global parameters into metadata global_parameters = regex_global.search(line) if global_parameters: self.parse_global_meta(global_parameters.group('parameters')) return # Tries to check the validity of the line. crtf_line = regex_line.search(line) if crtf_line: # Tries to parse the line. # Finds info about the region. region = regex_region.search(crtf_line.group('region')) type_ = region.group('type') or 'reg' include = region.group('include') or '+' region_type = region.group('regiontype').lower() if region_type in self.valid_definition: helper = _CRTFRegionParser( self.global_meta, include, type_, region_type, *crtf_line.group('region', 'parameters')) self.shapes.append(helper.shape) else: self._raise_error('Not a valid CRTF Region type: ' f'"{region_type}".') else: self._raise_error(f'Not a valid CRTF line: "{line}".') return def _raise_error(self, msg): if self.errors == 'warn': warn(msg, CRTFRegionParserWarning) elif self.errors == 'strict': raise CRTFRegionParserError(msg) def run(self): """ Run all the steps. This function splits the regions into lines and calls ``parse_line`` for each line. """ for line in self.region_string.split('\n'): self.parse_line(line) def parse_global_meta(self, global_meta_str): """ Parse the line starting with global to extract all the valid meta key/value pair. """ if global_meta_str: global_meta_str = regex_meta.findall(global_meta_str + ',') if global_meta_str: for par in global_meta_str: if par[0] != '': val1 = par[0].lower() val2 = par[1] else: val1 = par[2].lower() val2 = par[3] val1 = val1.strip() val2 = val2.strip() if val1 in self.valid_global_keys: if val1 in ('range', 'corr', 'labeloff'): val2 = val2.split(',') val2 = [x.strip() for x in val2 if x] self.global_meta[val1] = val2 else: self._raise_error(f'"{val1}" is not a valid global meta ' 'key') class _CRTFRegionParser: """ Parse a CRTF region string. This will turn a line containing a CRTF region into a `~regions.Shape` object. Parameters ---------- global_meta : dict Global meta data of the CRTF (CASA Region Text Format) file which is used as default meta values for regions. include : {'+', '-'} Flag at the beginning of the line. type_ : {'reg', 'ann'} Kind of the region definition. region_type : str Region type. reg_str : str Region string to parse. meta_str : str Meta string to parse. errors : {'strict', 'warn', 'ignore'}, optional The error handling scheme to use for handling parsing errors. The default is 'strict', which will raise a `~regions.CRTFRegionParserError`. 'warn' will raise a `~regions.CRTFRegionParserWarning`, and 'ignore' will do nothing (i.e., be silent). """ # List of valid coordinate system # TODO : There are still many reference systems to support coordinate_systems = ['j2000', 'icrs', 'galactic', 'supergal', 'image', 'ecliptic'] # Maps CASA coordinate frame to appropriate astropy coordinate frames. coordsys_mapping = dict(zip(frame_transform_graph.get_names(), frame_transform_graph.get_names())) coordsys_mapping['j2000'] = 'fk5' coordsys_mapping['b1950'] = 'fk4' coordsys_mapping['supergal'] = 'supergalactic' coordsys_mapping['ecliptic'] = 'geocentrictrueecliptic' # CRTF Format specifications defining how a region is read: # 'c' denotes a coordinates # 'l' denotes a length # 'pl' denotes a pair of lengths # 's' denotes a string (generally text or a symbol) language_spec = {'circle': ['c', 'l'], 'box': ['c', 'c'], 'centerbox': ['c', 'pl'], 'rotbox': ['c', 'pl', 'l'], 'poly': itertools.cycle('c'), 'annulus': ['c', 'pl'], 'ellipse': ['c', 'pl', 'l'], 'line': ['c', 'c'], 'vector': ['c', 'c'], 'symbol': ['c', 's'], 'text': ['c', 's']} def __init__(self, global_meta, include, type_, region_type, reg_str, meta_str, errors='strict'): self.global_meta = global_meta self.reg_str = reg_str self.meta_str = meta_str self.errors = errors self.coord = None self.coordsys = None self.coord_str = None self.type_ = type_ self.region_type = region_type self.meta = copy.deepcopy(global_meta) self.shape = None self.include = include or '+' self.parse() def _raise_error(self, msg): if self.errors == 'warn': warn(msg, CRTFRegionParserWarning) elif self.errors == 'strict': raise CRTFRegionParserError(msg) def parse(self): """ Parse the CRTF region string. """ self.convert_meta() self.coordsys = self.meta.get('coord', 'image').lower() self.set_coordsys() self.convert_coordinates() self.make_shape() def set_coordsys(self): """ Map to astropy's coordinate system frame name. """ # TODO: needs expert attention (most reference systems are not # mapped) if self.coordsys.lower() in self.coordsys_mapping: self.coordsys = self.coordsys_mapping[self.coordsys.lower()] def convert_coordinates(self): """ Convert coordinate string to `~astropy.coordinates.Angle` or `~astropy.units.quantity.Quantity` objects. """ coord_list_str = (regex_coordinate.findall(self.reg_str) + regex_length.findall(self.reg_str)) coord_list = [] if self.region_type == 'poly': if len(coord_list_str) < 3: self._raise_error(f'Not in proper format: {self.reg_str} ' 'polygon should have >= 3 coordinates') else: expected_nparam = len(self.language_spec[self.region_type]) if len(coord_list_str) != expected_nparam: self._raise_error(f'Not in proper format: "{self.reg_str}". ' 'Does not contain expected number of ' 'parameters for the region ' f'"{self.region_type}"') for attr_spec, val_str in zip(self.language_spec[self.region_type], coord_list_str): if attr_spec == 'c': if len(val_str) == 2 and val_str[1] != '': coord_list.append( _CRTFCoordinateParser.parse_coordinate(val_str[0])) coord_list.append( _CRTFCoordinateParser.parse_coordinate(val_str[1])) else: self._raise_error(f'Not in proper format: {val_str} ' 'should be a coordinate') if attr_spec == 'pl': if len(val_str) == 2 and val_str[1] != '': coord_list.append( _CRTFCoordinateParser.parse_angular_length_quantity( val_str[0])) coord_list.append( _CRTFCoordinateParser.parse_angular_length_quantity( val_str[1])) else: self._raise_error(f'Not in proper format: {val_str} ' 'should be a pair of lengths') if attr_spec == 'l': if isinstance(val_str, str): coord_list.append( _CRTFCoordinateParser.parse_angular_length_quantity( val_str)) else: self._raise_error(f'Not in proper format: {val_str} ' 'should be a single length') if attr_spec == 's': if self.region_type == 'symbol': if val_str in valid_symbols: self.meta['symbol'] = val_str else: self._raise_error(f'Not in proper format: "{val_str}" ' 'should be a symbol') elif self.region_type == 'text': self.meta['text'] = val_str[1:-1] self.coord = coord_list def convert_meta(self): """ Parse the meta_str to a dictionary and store in the ``meta`` attribute. """ if self.meta_str: self.meta_str = regex_meta.findall(self.meta_str + ',') if self.meta_str: for par in self.meta_str: if par[0] != '': val1 = par[0] val2 = par[1] else: val1 = par[2] val2 = par[3] val1 = val1.strip() val2 = val2.strip() if val1 in _CRTFParser.valid_global_keys or val1 == 'label': if val1 in ('range', 'corr', 'labeloff'): val2 = val2.split(',') val2 = [x.strip() for x in val2] self.meta[val1] = val2 else: self._raise_error(f'"{val1}" is not a valid meta key') self.meta['include'] = self.include != '-' self.include = self.meta['include'] if 'range' in self.meta: self.meta['range'] = [u.Quantity(x) for x in self.meta['range']] self.meta['type'] = self.type_ def make_shape(self): """ Make a `~regions.Shape` object. """ if self.region_type == 'ellipse': self.coord[2:] = [x * 2 for x in self.coord[2:]] # Map major and minor axis to height and width respectively self.coord[2], self.coord[3] = self.coord[3], self.coord[2] if len(self.coord) % 2 == 1: # check if angle is present self.coord[-1] /= 2 if self.region_type == 'box': x = (self.coord[0] + self.coord[2]) / 2 y = (self.coord[1] + self.coord[3]) / 2 w = u.Quantity(self.coord[0] - self.coord[2]) h = u.Quantity(self.coord[1] - self.coord[3]) self.coord = [x, y, abs(w), abs(h)] self.meta.pop('coord', None) self.shape = _Shape(coordsys=self.coordsys, region_type=reg_mapping['CRTF'][self.region_type], coord=self.coord, meta=self.meta, composite=False, include=self.include) class _CRTFCoordinateParser: """ Helper class to structure coordinate parser. """ @staticmethod def parse_coordinate(string_rep): """ Parse a single coordinate. """ # Any CRTF coordinate representation (sexagesimal or degrees) if 'pix' in string_rep: return u.Quantity(string_rep[:-3], u.dimensionless_unscaled) if 'h' in string_rep or 'rad' in string_rep: return Angle(string_rep) # CRTF format apparently implicitly defines # 18:20:30.12 # strings as hour units, and # 10.11.54.69 # as degrees. # I can't find this definition in documentation anywhere, though. unit = u.deg if len(string_rep.split('.')) >= 3: string_rep = string_rep.replace('.', ':', 2) elif string_rep.count(':') == 2: unit = u.hour return Angle(string_rep, unit) @staticmethod def parse_angular_length_quantity(string_rep): """ Parse a string into a Quantity object. Given a string that is a number and a unit, return a Quantity of that string. An error is raised if there is no unit, e.g.: * 50" -> 50 * u.arcsec * 50 -> CRTFRegionParserError : Units must be specified for 50 """ unit_mapping = {'deg': u.deg, 'rad': u.rad, 'arcmin': u.arcmin, 'arcsec': u.arcsec, 'pix': u.dimensionless_unscaled, '"': u.arcsec, "'": u.arcmin} regex_str = re.compile(r'([0-9+,-.]*)(.*)') restr = regex_str.search(string_rep) unit = restr.group(2) if unit: if unit in unit_mapping: return u.Quantity(restr.group(1), unit=unit_mapping[unit]) return u.Quantity(restr.group(1)) else: raise CRTFRegionParserError('Units must be specified for ' f'{string_rep}') ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1700163875.5225399 regions-0.8/regions/io/crtf/tests/0000755000175100001770000000000014525470444016622 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/crtf/tests/__init__.py0000644000175100001770000000000014525470416020720 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1700163875.5225399 regions-0.8/regions/io/crtf/tests/data/0000755000175100001770000000000014525470444017533 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/crtf/tests/data/CRTF_CARTA.crtf0000644000175100001770000000210614525470416022061 0ustar00runnerdocker#CRTFv0 CASA Region Text Format version 0 poly [[262.60121842deg, -34.70428113deg], [262.59389200deg, -34.69913763deg], [262.58849307deg, -34.69879109deg], [262.58379743deg, -34.70008642deg], [262.58402556deg, -34.70267217deg], [262.58933290deg, -34.70223072deg], [262.59020415deg, -34.70337542deg], [262.58862973deg, -34.71055795deg], [262.59172148deg, -34.70870333deg], [262.59556206deg, -34.71123464deg], [262.61080572deg, -34.71136497deg], [262.61942435deg, -34.71027497deg], [262.62265070deg, -34.70362260deg], [262.61872411deg, -34.70362154deg], [262.60975102deg, -34.70997555deg]] coord=ICRS, corr=[I], linewidth=1, linestyle=-, symsize=1, symthick=1, color=green, font=Helvetica, fontsize=10, fontstyle=bold, usetex=false poly [[262.60718383deg, -34.67844254deg], [262.58802310deg, -34.67884924deg], [262.58679959deg, -34.68238917deg], [262.60805460deg, -34.68206155deg], [262.61615892deg, -34.68021601deg], [262.61706427deg, -34.67894794deg]] coord=ICRS, corr=[I], linewidth=1, linestyle=-, symsize=1, symthick=1, color=green, font=Helvetica, fontsize=10, fontstyle=bold, usetex=false ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/crtf/tests/data/CRTF_labelcolor.crtf0000644000175100001770000000163514525470416023353 0ustar00runnerdocker#CRTFv0 CASA Region Text Format version 0 poly [[238.29839664deg, -54.60647979deg], [238.29935543deg, -54.60610099deg], [238.30011816deg, -54.60598728deg], [238.30035808deg, -54.60646691deg], [238.29933401deg, -54.60708556deg], [238.29868031deg, -54.60743908deg], [238.29820094deg, -54.60771684deg], [238.29728571deg, -54.60814611deg], [238.29626149deg, -54.60858802deg], [238.29523727deg, -54.60908040deg], [238.29423473deg, -54.60920672deg], [238.29399489deg, -54.60885331deg], [238.29440888deg, -54.60841148deg], [238.29510618deg, -54.60793175deg], [238.29560731deg, -54.60741417deg], [238.29589059deg, -54.60726267deg], [238.29669691deg, -54.60707325deg], [238.29721997deg, -54.60704794deg], [238.29783007deg, -54.60665657deg]] coord=ICRS, corr=[I], linewidth=2, linestyle=-, symsize=1, symthick=1, color=2ee6d6, font=Helvetica, fontsize=10, fontstyle=bold, usetex=false, label="region18", labelcolor=green, labelpos=top ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/crtf/tests/data/CRTF_labelcolor_output.crtf0000644000175100001770000000144414525470416024771 0ustar00runnerdocker#CRTFv0 global coord=J2000 poly[[238.298410deg, -54.606476deg], [238.299369deg, -54.606098deg], [238.300132deg, -54.605984deg], [238.300372deg, -54.606464deg], [238.299347deg, -54.607082deg], [238.298694deg, -54.607436deg], [238.298214deg, -54.607713deg], [238.297299deg, -54.608143deg], [238.296275deg, -54.608585deg], [238.295251deg, -54.609077deg], [238.294248deg, -54.609203deg], [238.294008deg, -54.608850deg], [238.294422deg, -54.608408deg], [238.295120deg, -54.607928deg], [238.295621deg, -54.607411deg], [238.295904deg, -54.607259deg], [238.296710deg, -54.607070deg], [238.297233deg, -54.607045deg], [238.297844deg, -54.606653deg]], label='region18', linewidth=2, linestyle=-, symsize=1, symthick=1, color=2ee6d6, font=Helvetica, fontsize=10, fontstyle=bold, usetex=false, labelpos=top, corr=[I] ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/crtf/tests/data/CRTFgeneral.crtf0000644000175100001770000000204314525470416022505 0ustar00runnerdocker#CRTFv0 global coord=B1950, frame=BARY, corr=[I, Q], color=blue # A simple circle region: ann circle[[18h12m24s, -23d11m00s], 2.3arcsec] # A box region, this one only for annotation: (Not Implemented ) # ann box[[140.0342deg, -12.34243deg], [140.0360deg, -12.34320deg]] # A rotated box region, for a particular range of velocities: rotbox[[12h01m34.1s, 12d23m32s], [3arcmin, 1arcmin], 12deg], range=[-1240km/s, 1240km/s] # An annular region, overriding some of the global defaults: annulus[[17h51m03.2s, -45d17m50s], [0.10deg, 4.12deg]], corr=[I,Q,U,V], color=red, label='My label here' # Cuts an ellipse out of the previous regions, but only for Q and a particular frequency range: -ellipse[[12deg, +45deg], [0.25deg, 1.34deg], 45rad], range=[1.420GHz, 1.421GHz], corr=[Q], color=green, label='Removed this' # A diamond marker, in J2000 coordinates: symbol[[32.1423deg, 12.1412deg], D], linewidth=2, coord=J2000, symsize=2 # Text region text[[32.1423deg, 12.1412deg], 'my text'], linewidth=2, coord=J2000 # Box region box[[1deg, 2deg], [3deg, 4deg]] ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/crtf/tests/data/CRTFgeneraloutput.crtf0000644000175100001770000000144214525470416023770 0ustar00runnerdocker#CRTFv0 global coord=B1950 ann circle[[273.100deg, -23.183deg], 0.001deg], frame=BARY, color=blue, corr=[I, Q] rotbox[[180.392deg, 12.392deg], [0.050deg, 0.017deg], 12.000deg], frame=BARY, color=blue, range=[-1240.0km/s, 1240.0km/s], corr=[I, Q] annulus[[267.763deg, -45.297deg], [0.100deg, 4.120deg]], label='My label here', frame=BARY, color=red, corr=[I, Q, U, V] -ellipse[[12.000deg, 45.000deg], [0.250deg, 1.340deg], 2578.310deg], label='Removed this', frame=BARY, color=green, range=[1.42GHz, 1.421GHz], corr=[Q] symbol[[31.470deg, 11.905deg], D], frame=BARY, color=blue, linewidth=2, symsize=2, corr=[I, Q] text[[31.470deg, 11.905deg], 'my text'], frame=BARY, color=blue, linewidth=2, corr=[I, Q] rotbox[[2.000deg, 3.000deg], [2.000deg, 2.000deg], 0.000deg], frame=BARY, color=blue, corr=[I, Q] ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/crtf/tests/data/binary_mask.pkl0000644000175100001770000115412114525470416022546 0ustar00runnerdockercnumpy.core.multiarray _reconstruct p0 (cnumpy ndarray p1 (I0 tp2 S'b' p3 tp4 Rp5 (I1 (I100 I100 I1 I1 tp6 cnumpy dtype p7 (S'f8' p8 I0 I1 tp9 Rp10 (I3 S'<' p11 NNNI-1 I-1 I0 tp12 bI01 S'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\xf0?\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' p13 tp14 b.././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/crtf/tests/data/crtf_carta_sexagesimal.crtf0000644000175100001770000000144214525470416025105 0ustar00runnerdocker#CRTFv0 CASA Region Text Format version 0 symbol [[18:47:44.02103, -001.54.58.0916], .] coord=J2000, corr=[I], linewidth=2, linestyle=-, symsize=1, symthick=1, color=2ee6d6, font=Helvetica, fontsize=10, fontstyle=bold, usetex=false symbol [[18:47:44.04110, -001.54.56.5869], .] coord=J2000, corr=[I], linewidth=2, linestyle=-, symsize=1, symthick=1, color=2ee6d6, font=Helvetica, fontsize=10, fontstyle=bold, usetex=false symbol [[18:47:44.06118, -001.54.55.0070], .] coord=J2000, corr=[I], linewidth=2, linestyle=-, symsize=1, symthick=1, color=2ee6d6, font=Helvetica, fontsize=10, fontstyle=bold, usetex=false symbol [[18:47:44.10133, -001.54.53.7280], .] coord=J2000, corr=[I], linewidth=2, linestyle=-, symsize=1, symthick=1, color=2ee6d6, font=Helvetica, fontsize=10, fontstyle=bold, usetex=false ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/crtf/tests/test_casa_mask.py0000644000175100001770000000557014525470416022163 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst import pickle import tempfile import astropy.units as u import pytest from astropy.coordinates import SkyCoord from regions.io.crtf.write import _write_crtf from regions.shapes.ellipse import EllipseSkyRegion try: from casatasks import tclean from casatools import image from casatools import measures as me from casatools import simulator HAS_CASATOOLS = True except ImportError: HAS_CASATOOLS = False @pytest.mark.skipif(not HAS_CASATOOLS, reason='casatools is required') def test_casa_masking(): with tempfile.TemporaryDirectory() as tmpdir: # SIMULATE SOME DATA SET # Define antennas diam = [25, 25, 25, 25, 25] xx = [50, 100, 150, 200, 250] yy = [2, -5, -20, -50, -100] zz = [-0.5, -1.0, -1.5, -2.0, -2.5] sm = simulator() sm.open(tmpdir + '/SIM.ms') # do configuration posvla = me.observatory('VLA') sm.setconfig(telescopename='VLA', x=xx, y=yy, z=zz, dishdiameter=diam, mount='alt-az', antname='VLA', coordsystem='local', referencelocation=posvla) # Initialize the spectral windows sm.setspwindow(spwname='CBand', freq='5GHz', deltafreq='50MHz', freqresolution='50MHz', nchannels=1, stokes='RR RL LR LL') # Initialize the source and calibrater sm.setfield(sourcename='My cal', sourcedirection=['J2000', '00h0m0.0', '+45.0.0.000'], calcode='A') sm.setfield(sourcename='My source', sourcedirection=['J2000', '01h0m0.0', '+47.0.0.000']) sm.setlimits(shadowlimit=0.001, elevationlimit='8.0deg') sm.setauto(autocorrwt=0.0) sm.settimes(integrationtime='10s', usehourangle=False, referencetime=me.epoch('utc', 'today')) sm.observe('My cal', 'CBand', starttime='720s', stoptime='1020s') sm.observe('My source', 'CBand', starttime='1030s', stoptime='1500s') sm.close() # Create mask to use during clean reg = EllipseSkyRegion(SkyCoord(0.0 * u.deg, 45.0 * u.deg, frame='fk5'), width=1.0 * u.arcmin, height=2.0 * u.arcmin, angle=45 * u.deg) _write_crtf([reg], tmpdir + '/SIM.crtf', 'fk5', '.6f', 'deg') # Image the dataset tclean(vis=tmpdir + '/SIM.ms', imagename=tmpdir + '/SIM', imsize=100, cell='5arcsec', niter=1, mask=tmpdir + '/SIM.crtf', interactive=False) ia = image() ia.open(tmpdir + '/SIM.mask') mask_array = ia.getregion() ia.close() with open('data/binary_mask.pkl', 'rb') as f: ref_mask = pickle.load(f) assert all(mask_array == ref_mask) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/crtf/tests/test_crtf.py0000644000175100001770000002014014525470416021165 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst """ Tests for the crtf subpackage. """ import astropy.units as u import pytest from astropy.coordinates import Angle, SkyCoord from astropy.tests.helper import assert_quantity_allclose from astropy.utils.data import get_pkg_data_filename from regions.core import Regions from regions.io.crtf.core import CRTFRegionParserError from regions.io.crtf.read import _CRTFParser from regions.shapes.circle import CircleSkyRegion from regions.shapes.ellipse import EllipseSkyRegion implemented_region_types = ('ellipse', 'circle', 'rectangle', 'poly', 'point', 'text', 'symbol') def test_global_parser(): """ Checks that the global_parser does what's expected. """ global_test_str = ('global coord=B1950_VLA, frame=BARY, corr=[I, Q], ' 'color=blue') global_parser = _CRTFParser(global_test_str) expected = {'coord': 'B1950_VLA', 'frame': 'BARY', 'corr': ['I', 'Q'], 'color': 'blue'} assert dict(global_parser.global_meta) == expected def test_valid_crtf_line(): """ Checks whether a the line is valid CRTF format. """ line_str = 'coord=B1950_VLA, frame=BARY, corr=[I, Q], color=blue' with pytest.raises(CRTFRegionParserError) as excinfo: Regions.parse(line_str, format='crtf') assert 'Not a valid CRTF line:' in str(excinfo.value) def test_valid_region_type(): """ Checks whether the region type is valid in CRTF format """ reg_str = 'hyperbola[[18h12m24s, -23d11m00s], 2.3arcsec]' with pytest.raises(CRTFRegionParserError) as excinfo: Regions.parse(reg_str, format='crtf') assert 'Not a valid CRTF Region type: "hyperbola"' in str(excinfo.value) def test_valid_global_meta_key(): """ Checks whether the global key is valid or not. """ global_test_str = ('global label=B1950_VLA, frame=BARY, corr=[I, Q], ' 'color=blue') with pytest.raises(CRTFRegionParserError) as excinfo: Regions.parse(global_test_str, format='crtf') assert '"label" is not a valid global meta key' in str(excinfo.value) def test_valid_meta_key(): """ Checks whether the key is valid or not. """ meta_test_str = ('annulus[[17h51m03.2s, -45d17m50s], [0.10deg, 4.12deg]], ' 'hello="My label here"') with pytest.raises(CRTFRegionParserError) as excinfo: Regions.parse(meta_test_str, format='crtf') assert '"hello" is not a valid meta key' in str(excinfo.value) def test_valid_region_syntax(): """ Checks whether the region has valid parameters """ reg_str1 = 'circle[[18h12m24s, -23d11m00s], [2.3arcsec,4.5arcsec]' with pytest.raises(CRTFRegionParserError) as excinfo: Regions.parse(reg_str1, format='crtf') estr = ("Not in proper format: ('2.3arcsec', '4.5arcsec') should be " 'a single length') assert estr in str(excinfo.value) reg_str2 = ('symbol[[32.1423deg, 12.1412deg], 12deg], linewidth=2, ' 'coord=J2000, symsize=2') with pytest.raises(CRTFRegionParserError) as excinfo: Regions.parse(reg_str2, format='crtf') estr = 'Not in proper format: "12deg" should be a symbol' assert estr in str(excinfo.value) reg_str3 = 'circle[[18h12m24s, -23d11m00s]' with pytest.raises(CRTFRegionParserError) as excinfo: Regions.parse(reg_str3, format='crtf') estr = ('Does not contain expected number of parameters for the region ' '"circle"') assert estr in str(excinfo.value) reg_str4 = 'poly[[1, 2], [4, 5]]' with pytest.raises(CRTFRegionParserError) as excinfo: Regions.parse(reg_str4, format='crtf') assert 'polygon should have >= 3 coordinates' in str(excinfo.value) reg_str6 = 'rotbox[[12h01m34.1s, 12d23m33s], [3arcmin,], 12deg]' with pytest.raises(CRTFRegionParserError) as excinfo: Regions.parse(reg_str6, format='crtf') assert "('3arcmin', '') should be a pair of lengths" in str(excinfo.value) def test_issue_312_regression(): """ Make sure there is no trailing comma when writing a CRTF string with no metadata. """ reg = EllipseSkyRegion(center=SkyCoord(279.174990 * u.deg, -21.257123 * u.deg, frame='fk5'), width=0.001571 * u.deg, height=0.001973 * u.deg, angle=111.273322 * u.deg) crtfstr = reg.serialize(format='crtf', coordsys='fk5', fmt='.6f', radunit='deg') assert crtfstr.strip()[-1] != ',' @pytest.mark.parametrize(('filename', 'outname', 'coordsys', 'fmt'), [('data/CRTFgeneral.crtf', 'data/CRTFgeneraloutput.crtf', 'fk4', '.3f'), ('data/CRTFgeneraloutput.crtf', 'data/CRTFgeneraloutput.crtf', 'fk4', '.3f'), ('data/CRTF_labelcolor.crtf', 'data/CRTF_labelcolor_output.crtf', 'fk5', '.6f')]) def test_file_crtf(filename, outname, coordsys, fmt): """ The "labelcolor" example is a regression test for Issue 405 The others are just a general serialization self-consistency check. """ filename = get_pkg_data_filename(filename) regs = Regions.read(filename, errors='warn', format='crtf') actual_output = regs.serialize(format='crtf', coordsys=coordsys, fmt=fmt).strip() with open(get_pkg_data_filename(outname)) as fh: ref_output = fh.read().strip() # since metadata is not required to preserve order, we have to do a more # complex comparison desired_lines = [set(line.split(',')) for line in ref_output.split('\n')] actual_lines = [set(line.split(',')) for line in actual_output.split('\n')] for split_line in actual_lines: assert split_line in desired_lines for split_line in desired_lines: assert split_line in actual_lines def test_crtf_header(): """ Regression test for issue #239. """ crtf_str = ('#CRTFv0 CASA Region Text Format version 0\n' 'circle[[42deg, 43deg], 3deg], coord=J2000, color=green') reg = Regions.parse(crtf_str, format='crtf')[0] assert isinstance(reg, CircleSkyRegion) assert reg.center.ra.value == 42.0 assert reg.center.ra.unit == 'deg' assert reg.center.dec.value == 43.0 assert reg.center.dec.unit == 'deg' assert reg.radius.value == 3.0 assert reg.radius.unit == 'deg' def test_space_after_regname(): """ Regression test for #271: space is allowed """ reg_str = 'circle [[42deg, 43deg], 3deg], coord=J2000, color=green' reg = Regions.parse(reg_str, format='crtf')[0] assert isinstance(reg, CircleSkyRegion) def test_no_comma_after_region(): reg_str = 'circle [[42deg, 43deg], 3deg] coord=J2000, color=green' reg = Regions.parse(reg_str, format='crtf')[0] assert isinstance(reg, CircleSkyRegion) assert reg.center.ra.value == 42.0 assert reg.center.ra.unit == 'deg' assert reg.center.dec.value == 43.0 assert reg.center.dec.unit == 'deg' assert reg.radius.value == 3.0 assert reg.radius.unit == 'deg' def test_casa_file_crtf(): filename = get_pkg_data_filename('data/CRTF_CARTA.crtf') regions = Regions.read(filename, format='crtf') assert len(regions) == 2 def test_angle_serialization(): """ Regression test for issue #223 to ensure Angle arcsec inputs are correctly converted to degrees. """ reg = Regions([CircleSkyRegion(SkyCoord(10, 20, unit='deg'), Angle(1, 'arcsec'))]) regstr = reg.serialize(format='crtf') expected = ('#CRTFv0\nglobal coord=J2000\ncircle[[10.000009deg, ' '20.000002deg], 0.000278deg]\n') assert regstr == expected def test_read_sexagesimal_regression407(): filename = 'data/crtf_carta_sexagesimal.crtf' filename = get_pkg_data_filename(filename) regs = Regions.read(filename, errors='warn', format='crtf') assert_quantity_allclose(regs[0].center.ra, 281.93342096 * u.deg, rtol=1e-9) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/crtf/tests/test_io_core.py0000644000175100001770000000472214525470416021656 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst import pytest from astropy.tests.helper import assert_quantity_allclose from astropy.units.quantity import Quantity from regions.io.crtf.io_core import _to_shape_list from regions.io.crtf.read import _CRTFParser def test_shape_crtf(): reg_str = ('circle[[18h12m24s, -23d11m00s], 2.3arcsec], linewidth=2, ' 'coord=J2000, symsize=2') parser = _CRTFParser(reg_str) shape1 = parser.shapes[0] region = parser.shapes.to_regions() shape2 = _to_shape_list(region, 'fk5')[0] assert shape1.coordsys == shape2.coordsys assert shape1.region_type == shape2.region_type assert shape1.include == shape2.include assert_quantity_allclose(shape1.coord, shape2.coord) # assert dict(shape1.meta) == dict(shape2.meta) assert shape1.composite == shape2.composite # Pixel origin is assumed to be 0 origin. Needs to be checked though. reg_str = 'circle[[1pix, 2pix], 3pix], linewidth=2, coord=image, symsize=2' parser = _CRTFParser(reg_str) shape = parser.shapes[0] assert_quantity_allclose(shape.coord, [Quantity('1'), Quantity('2'), Quantity('3')]) def test_valid_shape(): reg_str = ('circle[[18h12m24s, -23d11m00s], 2.3arcsec], linewidth=2, ' 'coord=J2000, symsize=2') shape = _CRTFParser(reg_str).shapes[0] with pytest.raises(ValueError) as excinfo: shape.region_type = 'box' assert '"box" is not a valid region type' in str(excinfo.value) shape = _CRTFParser(reg_str).shapes[0] with pytest.raises(ValueError) as excinfo: shape.coordsys = 'hello' estr = '"hello" is not a valid coordinate reference frame' assert estr in str(excinfo.value) def test_valid_ellipse_crtf(): reg_str1 = 'ellipse[[1pix, 2pix], [3pix, 4pix], 5deg]' reg_str2 = 'ellipse[[1deg, 2deg], [3deg, 4deg], 5deg], coord=fk5' shape1 = _CRTFParser(reg_str1, 'warn').shapes[0] shape2 = _CRTFParser(reg_str2, 'warn').shapes[0] assert_quantity_allclose(shape1.coord[:2], [1, 2]) assert_quantity_allclose(shape2.coord[:2], [Quantity('1deg'), Quantity('2deg')]) assert_quantity_allclose(shape1.coord[2:-1], [8, 6]) assert_quantity_allclose(shape2.coord[2:-1], [Quantity('8deg'), Quantity('6deg')]) assert_quantity_allclose(shape1.coord[-1], Quantity('5deg')) assert_quantity_allclose(shape2.coord[-1], Quantity('5deg')) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/crtf/write.py0000644000175100001770000000341014525470416017161 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst import os from regions.core import Region, Regions from regions.core.registry import RegionsRegistry from regions.io.crtf.io_core import _to_shape_list __all__ = [] @RegionsRegistry.register(Region, 'serialize', 'crtf') @RegionsRegistry.register(Regions, 'serialize', 'crtf') def _serialize_crtf(regions, coordsys='fk5', fmt='.6f', radunit='deg'): shapelist = _to_shape_list(regions, coordsys) return shapelist.to_crtf(coordsys, fmt, radunit) @RegionsRegistry.register(Region, 'write', 'crtf') @RegionsRegistry.register(Regions, 'write', 'crtf') def _write_crtf(regions, filename, coordsys='fk5', fmt='.6f', radunit='deg', overwrite=False): """ Convert a list of `~regions.Region` to a CRTF string and write to a file. Parameters ---------- regions : list A list of `~regions.Region` objects. filename : str The filename in which the string is to be written. coordsys : str, optional An Astropy coordinate system that overrides the coordinate frames of all regions. fmt : str, optional A python string format defining the output precision. Default is '.6f', which is accurate to 0.0036 arcseconds. radunit : str, optional The unit of the radius. overwrite : bool, optional If True, overwrite the output file if it exists. Raises an `OSError` if False and the output file exists. Default is False. """ if os.path.lexists(filename) and not overwrite: raise OSError(f'{filename} already exists') output = _serialize_crtf(regions, coordsys=coordsys, fmt=fmt, radunit=radunit) with open(filename, 'w') as fh: fh.write(output) ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1700163875.5225399 regions-0.8/regions/io/ds9/0000755000175100001770000000000014525470444015221 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/ds9/__init__.py0000644000175100001770000000022114525470416017324 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst """ This subpackage provides tools for reading and writing DS9 region files. """ ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/ds9/connect.py0000644000175100001770000000263314525470416017227 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst from astropy.utils.data import get_readable_fileobj from regions.core import Region, Regions from regions.core.registry import RegionsRegistry __all__ = [] @RegionsRegistry.register(Region, 'identify', 'ds9') @RegionsRegistry.register(Regions, 'identify', 'ds9') def is_ds9(methodname, filepath): """ Identify a DS9 region file. Parameters ---------- methodname : {'read', 'write'} The method name called that needs auto-identification. filepath : str The path to the file. Returns ------- result : bool Returns `True` if the given file is a DS9 region file. """ all_exten = ('.ds9', '.reg', '.ds9.gz', '.reg.gz') exten = {'read': all_exten, 'write': all_exten[0:2]} if methodname == 'write': return filepath.lower().endswith(exten[methodname]) elif methodname == 'read': if (isinstance(filepath, str) and filepath.lower().endswith(exten[methodname])): return True else: with get_readable_fileobj(filepath, encoding='binary') as fileobj: signature = '# Region file format: DS9' pos = fileobj.tell() sig = fileobj.read(len(signature)) fileobj.seek(pos) return sig == signature or sig == signature.encode() else: return False ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/ds9/core.py0000644000175100001770000001363614525470416016533 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst import itertools from regions._utils.optional_deps import HAS_MATPLOTLIB from regions.shapes import (CircleAnnulusPixelRegion, CircleAnnulusSkyRegion, CirclePixelRegion, CircleSkyRegion, EllipseAnnulusPixelRegion, EllipseAnnulusSkyRegion, EllipsePixelRegion, EllipseSkyRegion, LinePixelRegion, LineSkyRegion, PointPixelRegion, PointSkyRegion, PolygonPixelRegion, PolygonSkyRegion, RectangleAnnulusPixelRegion, RectangleAnnulusSkyRegion, RectanglePixelRegion, RectangleSkyRegion, TextPixelRegion, TextSkyRegion) __all__ = [] def make_region_template(): return itertools.chain(('coord', 'coord'), itertools.cycle(('length',))) def make_polygon_template(): return itertools.cycle(('coord',)) # mappings from DS9 frames to astropy coordinates frames ds9_frame_map = {'image': 'image', 'icrs': 'icrs', 'fk5': 'fk5', 'j2000': 'fk5', 'fk4': 'fk4', 'b1950': 'fk4', 'galactic': 'galactic', 'ecliptic': 'barycentricmeanecliptic'} # mappings from DS9 shape to region class pixel_map = {'circle': CirclePixelRegion, 'ellipse': EllipsePixelRegion, 'box': RectanglePixelRegion, 'polygon': PolygonPixelRegion, 'annulus': CircleAnnulusPixelRegion, 'ellipse_annulus': EllipseAnnulusPixelRegion, 'rectangle_annulus': RectangleAnnulusPixelRegion, 'line': LinePixelRegion, 'point': PointPixelRegion, 'text': TextPixelRegion} sky_map = {'circle': CircleSkyRegion, 'ellipse': EllipseSkyRegion, 'box': RectangleSkyRegion, 'polygon': PolygonSkyRegion, 'annulus': CircleAnnulusSkyRegion, 'ellipse_annulus': EllipseAnnulusSkyRegion, 'rectangle_annulus': RectangleAnnulusSkyRegion, 'line': LineSkyRegion, 'point': PointSkyRegion, 'text': TextSkyRegion} ds9_shape_to_region = {} ds9_shape_to_region['pixel'] = pixel_map ds9_shape_to_region['sky'] = sky_map ds9_params_template = {'point': ('coord', 'coord'), 'text': ('coord', 'coord'), 'circle': ('coord', 'coord', 'length'), 'line': ('coord', 'coord', 'coord', 'coord'), 'ellipse': make_region_template(), 'annulus': make_region_template(), 'box': make_region_template(), 'polygon': make_polygon_template()} # mapping from regions shapes to ds9 shape formats # unsupported ds9 shapes: # vector, ruler, compass, projection, panda, epanda, bpanda ds9_shape_templates = {'circle': ('circle', '{center},{radius}'), 'ellipse': ('ellipse', '{center},{width},{height}' ',{angle}'), 'rectangle': ('box', '{center},{width},{height},{angle}'), 'circleannulus': ('annulus', '{center},{inner_radius},' '{outer_radius}'), 'ellipseannulus': ('ellipse', '{center},{inner_width},' '{inner_height},' '{outer_width},' '{outer_height},{angle}'), 'rectangleannulus': ('box', '{center},{inner_width},' '{inner_height},{outer_width},' '{outer_height},{angle}'), 'polygon': ('polygon', '{vertices}'), 'line': ('line', '{start},{end}'), 'point': ('point', '{center}'), 'text': ('text', '{center}')} if not HAS_MATPLOTLIB: boxcircle = '8' # octagon arrow = '^' # triangle else: import matplotlib.path as mpath vertices = [[0., -1.], [0.2652031, -1.], [0.51957987, -0.89463369], [0.70710678, -0.70710678], [0.89463369, -0.51957987], [1., -0.2652031], [1., 0.], [1., 0.2652031], [0.89463369, 0.51957987], [0.70710678, 0.70710678], [0.51957987, 0.89463369], [0.2652031, 1.], [0., 1.], [-0.2652031, 1.], [-0.51957987, 0.89463369], [-0.70710678, 0.70710678], [-0.89463369, 0.51957987], [-1., 0.2652031], [-1., 0.], [-1., -0.2652031], [-0.89463369, -0.51957987], [-0.70710678, -0.70710678], [-0.51957987, -0.89463369], [-0.2652031, -1.], [0., -1.], [0., -1.], [0., -1.], [1., -1.], [1., 1.], [-1., 1.], [-1., -1.], [0., -1.]] codes = [1, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 79, 1, 2, 2, 2, 2, 79] boxcircle = mpath.Path(vertices, codes) arrow_verts = [[-1, 0], [0, 0], [-1, 1], [0, 0], [0, 1]] arrow = mpath.Path(arrow_verts, codes=None) # mapping from ds9 point symbols to matplotlib marker symbols ds9_valid_symbols = {'circle': 'o', 'box': 's', 'diamond': 'D', 'x': 'x', 'cross': '+', 'arrow': arrow, 'boxcircle': boxcircle} class DS9ParserError(Exception): """ A custom exception for DS9 parsing errors. """ ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/ds9/meta.py0000644000175100001770000002102314525470416016516 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst import warnings from astropy.utils.exceptions import AstropyUserWarning from regions.io.ds9.core import DS9ParserError, ds9_valid_symbols __all__ = [] def _split_raw_metadata(raw_metadata): """ Split the raw metadata into meta and visual dictionaries. The raw metadata is not changed, except unsupported metadata is ignored. Parameters ---------- raw_metadata : dict The raw metadata as read from the DS9 region file/str. Returns ------- meta, visual : dict The raw metadata and visual metadata dictionaries. """ # not currently supported by regions unsupported_meta = ('line', 'vector', 'ruler', 'compass') # TODO: include text in visual keys to support text annotations for # all DS9 regions? ds9_visual_keys = ('color', 'dash', 'dashlist', 'fill', 'font', 'point', 'textangle', 'textrotate', 'width') meta = {} visual = {} for key, value in raw_metadata.items(): if key in unsupported_meta: # don't warn for "line=0 0" (no arrows) because it works, # but skip adding it to metadata if key != 'line' or '1' in value: warnings.warn(f'DS9 meta "{key}={value}" is unsupported and ' 'will be ignored', AstropyUserWarning) continue if key in ds9_visual_keys: visual[key] = value else: meta[key] = value # set the default plotting style to 'ds9' when parsing ds9 data visual['default_style'] = 'ds9' return meta, visual def _translate_ds9_to_visual(shape, visual_meta): """ Translate ds9 visual metadata to dictionary of matplotlib keywords. Parameters ---------- shape : str The DS9 region shape (e.g., 'circle'). visual_meta : dict The visual metadata. Returns ------- visual : dict The visual dictionaries of region metadata translated to matplotlib keywords. """ meta = visual_meta.copy() fill = meta.pop('fill', 0) # fill=1 is supported in DS9 only for the circle, ellipse, box, and # polygon shapes if fill == 1 and shape in ('circle', 'ellipse', 'box', 'polygon'): meta['fill'] = True dash = meta.pop('dash', 0) dashlist = meta.pop('dashlist', None) if int(dash) == 1: if dashlist is not None: dashes = tuple(int(i) for i in dashlist.split()) meta['linestyle'] = (0, dashes) else: meta['linestyle'] = 'dashed' if shape == 'point': warnings.warn('dashed lines are unsupported for DS9 point ' 'regions and will be ignored', AstropyUserWarning) meta.pop('linestyle', None) # "point=symbol [size]"; size is optional, symbol is not point = meta.pop('point', None) if point is not None: point_ = point.split() if len(point_) == 1: ds9_marker = point_[0] elif len(point_) == 2: ds9_marker, meta['markersize'] = point_ else: raise ValueError(f'invalid point data "{point}"') meta['marker'] = ds9_valid_symbols[ds9_marker] font = meta.pop('font', None) if font is not None: vals = font.split() if len(vals) == 4: (meta['fontname'], meta['fontsize'], meta['fontweight'], meta['fontstyle']) = vals if len(vals) == 3: meta['fontname'], meta['fontsize'], meta['fontweight'] = vals if len(vals) == 2: meta['fontname'], meta['fontsize'] = vals if len(vals) == 1: meta['fontname'] = vals[0] # define default font values (helvetica 10 normal roman) if 'fontsize' not in meta: meta['fontsize'] = '10' if 'fontweight' not in meta: meta['fontweight'] = 'normal' if 'fontstyle' not in meta: meta['fontstyle'] = 'normal' # fontsize is a string try: meta['fontsize'] = int(meta['fontsize']) except ValueError: raise DS9ParserError('font size must be an integer, got ' f'{meta["fontsize"]}') from None meta['fontstyle'] = meta['fontstyle'].replace('roman', 'normal') if shape == 'point': width = meta.pop('width', None) if width is not None: meta['markeredgewidth'] = width else: invalid = ('marker', 'markersize') for key in invalid: meta.pop(key, None) if shape == 'text': textangle = meta.pop('textangle', None) if textangle is not None: textrotate = meta.pop('textrotate', None) if textrotate != 0: # rotate if None or 1 meta['rotation'] = textangle # remove invalid mpl kwargs for matplotlib.text.Text invalid = ('linestyle', 'linewidth', 'fill') for key in invalid: meta.pop(key, None) else: # these kwarg are valid only for matplotlib.text.Text invalid = ('textangle', 'textrotate') for key in invalid: meta.pop(key, None) if shape not in ('point', 'line', 'text'): color = meta.pop('color', None) if color is not None: meta['facecolor'] = color meta['edgecolor'] = color return meta def _remove_invalid_keys(region_meta, valid_keys): # TODO: instead of new dict, del region_meta in-place? meta = {} for key in region_meta: if key in valid_keys: meta[key] = region_meta[key] return meta def _translate_metadata_to_ds9(region, shape): """ Translate region metadata to valid ds9 meta keys. """ meta = {**region.meta, **region.visual} if 'annulus' in shape: # ds9 does not allow fill for annulus regions meta.pop('fill', None) fill = meta.pop('fill', None) if fill is not None: meta['fill'] = int(fill) if 'text' in meta: meta['text'] = f'{{{meta["text"]}}}' edgecolor = meta.pop('edgecolor', None) facecolor = meta.pop('facecolor', None) color = None if edgecolor is not None: color = edgecolor if facecolor is not None: if facecolor != color: warnings.warn('facecolor and edgecolor are different, edgecolor ' 'will be used', AstropyUserWarning) if color is None: color = facecolor if color is not None: meta['color'] = color linewidth = meta.pop('linewidth', None) if linewidth is not None: meta['width'] = linewidth # point region marker width markeredgewidth = meta.pop('markeredgewidth', None) if markeredgewidth is not None: meta['width'] = markeredgewidth marker = meta.pop('marker', None) if marker is not None: symbol_map = {y: x for x, y in ds9_valid_symbols.items()} if marker in symbol_map: markersize = meta.pop('markersize', None) msize = '' if markersize is not None: msize = f' {markersize}' meta['point'] = f'{symbol_map[marker]}{msize}' else: warnings.warn(f'Unable to serialize marker "{marker}"', AstropyUserWarning) fontname = meta.pop('fontname', None) if fontname is not None: fontsize = meta.pop('fontsize', 10) # default 10 fontweight = meta.pop('fontweight', 'normal') # default normal # default roman fontstyle = meta.pop('fontstyle', 'roman').replace('normal', 'roman') meta['font'] = f'"{fontname} {fontsize} {fontweight} {fontstyle}"' linestyle = meta.pop('linestyle', None) if linestyle is not None: meta['dash'] = 1 # if linestyle in ('dashed', '--'): if isinstance(linestyle, tuple): meta['dashlist'] = f'{linestyle[1][0]} {linestyle[1][1]}' # dashes = meta.pop('dashes', None) # if dashes is not None: # meta['dashlist'] = f'{dashes[0]} {dashes[1]}' rotation = meta.pop('rotation', None) if rotation is not None: meta['textangle'] = rotation # meta['textrotate'] = 1 # ds9 meta keys meta_keys = ['background', 'delete', 'edit', 'fixed', 'highlite', 'include', 'move', 'rotate', 'select', 'source', 'tag', 'text'] visual_keys = ['color', 'dash', 'dashlist', 'fill', 'font', 'point', 'textangle', 'textrotate', 'width'] valid_keys = meta_keys + visual_keys meta = _remove_invalid_keys(meta, valid_keys) return meta ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/ds9/read.py0000644000175100001770000005753114525470416016520 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst import re import string import warnings from dataclasses import dataclass import astropy.units as u from astropy.coordinates import Angle, SkyCoord from astropy.utils.data import get_readable_fileobj from astropy.utils.exceptions import AstropyUserWarning from regions.core import PixCoord, RegionMeta, Regions, RegionVisual from regions.core.registry import RegionsRegistry from regions.io.ds9.core import (DS9ParserError, ds9_frame_map, ds9_params_template, ds9_shape_to_region, make_region_template) from regions.io.ds9.meta import _split_raw_metadata, _translate_ds9_to_visual __all__ = [] @RegionsRegistry.register(Regions, 'read', 'ds9') def _read_ds9(filename, cache=False): """ Read a DS9 region file in as a list of `~regions.Region` objects. Parameters ---------- filename : str The filename of the file to access. cache : bool or 'update', optional Whether to cache the contents of remote URLs. If 'update', check the remote URL for a new version but store the result in the cache. Returns ------- regions : `regions.Regions` A `Regions` object containing a list of `~regions.Region` objects. """ with get_readable_fileobj(filename, cache=cache) as fh: region_string = fh.read() return _parse_ds9(region_string) @RegionsRegistry.register(Regions, 'parse', 'ds9') def _parse_ds9(region_str): """ Parse a DS9 region string. Parameters ---------- region_str : str The string contents of a DS9 region file. Returns ------- regions : `regions.Regions` A `Regions` object containing a list of `~regions.Region` objects. """ # first parse the input string to generate the raw region data region_data = _parse_raw_data(region_str) # now parse the raw region data into region object(s) regions = [] for region_data_ in region_data: region = _make_region(region_data_) if region is not None: # skip region if error during parsing regions.extend(region) return Regions(regions) @dataclass class _RegionData: """ Class to hold data used to initialize a Region object. Data for multi-annulus regions is stored in a single object. """ frame: str region_type: str shape: str shape_params: str raw_meta: dict region_str: str def _split_lines(region_str): """ Split a region string on newlines and all semicolons, except those between {} braces ({} contains ds9 text strings). Parameters ---------- region_str : str The string contents of a DS9 region file. Returns ------- lines : list of str A list of strings. """ lines = [] for line in region_str.split('\n'): for line_ in _split_semicolon(line): lines.append(line_.strip()) return lines def _parse_raw_data(region_str): """ Parse the raw data to extract the region data. Parameters ---------- region_str : str The string contents of a DS9 region file. Returns ------- lines : list of `_RegionData` A list of `_RegionData` objects. Note that at this stage, region data for multi-annulus regions is stored in a single object. """ global_meta = {} composite_meta = '' frame = None region_data = [] supported_frames = ['image', 'icrs', 'fk5', 'j2000', 'fk4', 'b1950', 'galactic', 'ecliptic'] unsupported_frames = ['linear', 'amplifier', 'detector', 'physical', 'tile'] wcs_frames = ['wcs', 'wcs0'] + [f'wcs{letter}' for letter in string.ascii_lowercase] unsupported_frames += wcs_frames supported_shapes = ['circle', 'ellipse', 'box', 'annulus', 'polygon', 'line', 'point', 'text', 'composite'] unsupported_shapes = ['vector', 'ruler', 'compass', 'projection', 'panda', 'epanda', 'bpanda'] supported_frames_shapes = supported_frames + supported_shapes unsupported_frames_shapes = unsupported_frames + unsupported_shapes valid_frames_shapes = supported_frames_shapes + unsupported_frames_shapes regex_frame_or_shape = re.compile('^#? *([+-]?)([a-zA-Z0-9]+)') for line in _split_lines(region_str): # split on semicolons & newlines # skip blank lines if not line: continue # skip comments if (line.startswith('#') and not line.startswith(('# text(', '# composite('))): continue original_line = line # used to parse text and tag fields (keep case) line = line.lower() # ds9 region files can have multiple (including successive) # global lines if line.startswith('global'): global_meta.update(_parse_metadata(original_line[7:])) continue match = regex_frame_or_shape.search(line) if match is None: raise ValueError(f'Unable to parse line "{line}".') include_symbol = match.groups()[0] frame_or_shape = match.groups()[1] if frame_or_shape not in valid_frames_shapes: warnings.warn(f'"{frame_or_shape}" frame or shape is not a valid ' 'frame or region shape; unable to parse line ' f'"{line}", skipping.', AstropyUserWarning) continue if frame_or_shape in unsupported_frames_shapes: warnings.warn(f'"{frame_or_shape}" frame or shape is not ' 'supported by the regions package, skipping.', AstropyUserWarning) if frame_or_shape in unsupported_frames: frame = None continue if frame_or_shape in supported_frames: # NOTE: frame value persists for subsequent regions until changed frame = frame_or_shape continue if frame_or_shape in supported_shapes: shape = frame_or_shape # a frame must be defined before any shape(s) if frame is None: warnings.warn('A coordinate frame was not found for region: ' f'"{line}", skipping.', AstropyUserWarning) continue if shape == 'composite': idx = line.find('||') if idx == -1: raise ValueError('unable to parse line with composite ' f'shape: "{line}"') # composite metadata applies to all regions within the # composite shape composite_meta = _parse_metadata(line[idx + 2:].strip()) # remove "composite=1" since we split the composite composite_meta.pop('composite', None) # NOTE: include=1/0 in metadata overrides the leading # "-/+" symbol if include_symbol == '-': include = 0 else: # '+' or '' include = 1 include_meta = {'include': include} params_str, meta_str = _parse_shape_line(shape, original_line, match.span()) region_meta = _parse_metadata(meta_str) raw_meta = _define_raw_metadata(global_meta, composite_meta, include_meta, region_meta) region_type = 'sky' if frame == 'image': region_type = 'pixel' # composite shape is used only to extract metadata if shape != 'composite': region_data.append(_RegionData(frame, region_type, shape, params_str, raw_meta, line)) # reset composite metadata after the composite region ends if '||' not in line and composite_meta: composite_meta = {} return region_data def _parse_shape_line(shape, line, span): """ Parse a line of a DS9 file containing a shape. Parameters ---------- shape : str The DS9 region shape (e.g., 'circle'). line : str A line defining a DS9 shape. span : 2 tuple A tuple containing the (start, end) positions of the match defining the shape. Returns ------- shape_params_str : str The region shape parameters as a string. meta_str : str The region metadata as a string. """ full_line = line line = full_line[span[1]:] # starts with the shape parameters # ds9 writes out text regions in this odd (undocumented) format if shape == 'text' and full_line.lower().startswith('# text'): idx = line.find(' ') if idx == -1: raise ValueError(f'unable to parse line "{line}"') meta_str = line[idx + 1:] shape_params_str = line[:idx] else: # split line into shape parameters and metadata parts = line.split('#', 1) # color value can contain a # if len(parts) == 1: shape_params_str = line meta_str = '' # no metadata found else: shape_params_str, meta_str = parts # strip trailing space and | chars shape_params_str = shape_params_str.strip(' |') shape_params_str = re.sub('[()]', '', shape_params_str).lower() meta_str = meta_str.strip() return shape_params_str, meta_str def _parse_metadata(metadata_str): """ Parse metadata for a single DS9 region. Parameters ---------- metadata_str : str The region metadata (e.g., everything after the "#"). Returns ------- metadata : dict The region metadata as a dictionary. """ # {.*?} # all chars in curly braces # \'.*?\' # all chars in single quotes # \".*?\" # all chars in double quotes # [-?\d+\.?\d*\s]+\s? # ([-/+]floats [whitespace]) incl. repeats # (e.g., dashlist=8 3, width=3, textangle=18.35) # [^=\s]+\s*[-?\d+\.?\d*]* # (all chars (e.g., point=diamond) or # (all chars [whitespace] digits) # (e.g., point=diamond 42) metadata_regex = re.compile(r'([a-zA-Z]+)\s*=\s*({.*?}|\'.*?\'|\".*?\"|' r'[-?\d+\.?\d*\s]+\s?|' r'[^=\s]+\s*[-?\d+\.?\d*]*)') metadata = {} for key, val in metadata_regex.findall(metadata_str): key = key.lower() val = val.strip().strip("'").strip('"').lstrip('{').rstrip('}') if key not in metadata: if key == 'tag': val = [val] # tag value is always a list metadata[key] = val else: if key == 'tag': metadata[key].append(val) else: warnings.warn(f'Found duplicate metadata for "{key}", ' 'skipping', AstropyUserWarning) return metadata def _define_raw_metadata(global_meta, composite_meta, include_meta, region_meta): """ Define the raw metadata dictionary for the region. The raw metadata is not modified, except that invalid metadata is ignored. Parameters ---------- global_meta : dict The global metadata. composite_meta : dict The metadata for a composite region. include_meta : dict The include/exclude metadata. region_meta : dict The region metadata. Returns ------- meta : tuple of dict The (valid) raw metadata extracted from the region file. """ all_meta = global_meta.copy() all_meta.update(composite_meta) all_meta.update(include_meta) # region_meta must come after include_meta because include=1/0 in # metadata overrides the leading "-/+" include symbol all_meta.update(region_meta) # valid DS9 point symbols valid_points = ('circle', 'box', 'diamond', 'cross', 'x', 'arrow', 'boxcircle') # valid DS9 line values valid_lines = ('0 0', '0 1', '1 0', '1 1') # binary keys must have values of 0 or 1 # NOTE: textrotate is not documented in the DS9 region file spec binary_keys = ('dash', 'select', 'highlite', 'fixed', 'edit', 'move', 'rotate', 'delete', 'include', 'source', 'background', 'fill', 'vector', 'textrotate') metadata = {} for key, value in all_meta.items(): try: value = float(value) if value.is_integer(): value = int(value) except (ValueError, TypeError): pass is_invalid = False # point value can either be ["symbol int"] or ["symbol"] if key == 'point': val = value.split() if val[0] not in valid_points: is_invalid = True if len(val) == 2: if not float(val[1]).is_integer(): is_invalid = True if key == 'line' and value not in valid_lines: is_invalid = True if key in binary_keys and value not in (0, 1): is_invalid = True if is_invalid: warnings.warn(f'DS9 "{key}={value}" is invalid and will be ' 'ignored', AstropyUserWarning) continue metadata[key] = value return metadata def _parse_pixel_coord(param_str): invalid_chars = ('d', 'r', 'p', ':', 'h', 'm', 's') for char in invalid_chars: if char in param_str: raise DS9ParserError('Cannot parse pixel region position ' 'coordinates') if param_str[-1] == 'i': param_str = param_str[:-1] # DS9 uses 1-indexed pixels return float(param_str) - 1 def _parse_sky_coord(param_str, frame, index): invalid_chars = ('i', 'p') for char in invalid_chars: if char in param_str: raise DS9ParserError('Cannot parse sky region position ' 'coordinates') if param_str[-1] == 'r': return Angle(param_str[:-1], unit=u.radian) elif param_str[-1] == 'd': return Angle(param_str[:-1], unit=u.degree) elif 'd' in param_str or 'h' in param_str: return Angle(param_str) elif ':' in param_str: if index % 2 == 0 and frame not in ('galactic', 'ecliptic'): return Angle(param_str, u.hourangle) else: return Angle(param_str, u.degree) else: # unit not specified return Angle(float(param_str), unit=u.degree) def _parse_coord(region_type, param_str, frame, index): if region_type == 'pixel': return _parse_pixel_coord(param_str) else: return _parse_sky_coord(param_str, frame, index) def _parse_angle(param_str): invalid_chars = ('p', 'i') for char in invalid_chars: if char in param_str: raise DS9ParserError('Cannot parse sky region angle parameter') unit_mapping = {'"': u.arcsec, "'": u.arcmin, 'd': u.deg, 'r': u.rad} if param_str[-1] not in string.digits: unit = unit_mapping[param_str[-1]] return u.Quantity(float(param_str[:-1]), unit=unit) else: return u.Quantity(float(param_str), unit=u.degree) def _parse_size(region_type, param_str): if region_type == 'pixel': invalid_chars = ('"', "'", 'd', 'r', 'p') for char in invalid_chars: if char in param_str: raise DS9ParserError('Cannot parse pixel region size ' 'parameters - must not be in angular ' 'units') if param_str[-1] == 'i': param_str = param_str[:-1] return float(param_str) else: # size in angular units return _parse_angle(param_str) def _parse_shape_params(region_data): """ Parse the shape parameters for a region line. Parameters ---------- region_data : `_RegionData` instance A `_RegionData` instance containing the data for a region line. Data for multi-annulus regions is stored in a single object. Returns ------- shape_params : list of list(s) The shape parameters for each region(s). ``shape_params`` is a list of lists of shape parameters. A separate shape list is returned for multiple annulus/box/ellipse regions. Otherwise, the output list contains only one list. """ region_type = region_data.region_type shape = region_data.shape frame = region_data.frame params = [val for val in re.split(r'\s|\,', region_data.shape_params) if val] # split values on space or comma nparams = len(params) n_annulus = 0 if shape in ('ellipse', 'box') and nparams > 5: if nparams % 2 != 1: raise ValueError(f'incorrect number of parameters ({nparams}) ' f'for shape "{shape}"') n_annulus = ((nparams - 3) // 2) - 1 if shape in ('annulus',): n_annulus = nparams - 3 if shape in ('ellipse', 'box', 'annulus'): # reset the cycle iterators shape_template = make_region_template() else: shape_template = ds9_params_template[shape] shape_params = [] for idx, (param_type, value) in enumerate(zip(shape_template, params)): if shape in ('ellipse', 'box') and idx == nparams - 1: param_type = 'angle' # last parameter is always an angle if param_type == 'coord': param = _parse_coord(region_type, value, frame, idx) elif param_type in ('length',): param = _parse_size(region_type, value) if shape == 'ellipse': param *= 2.0 # ds9 uses semi-axis lengths elif param_type in ('angle',): param = _parse_angle(value) else: raise ValueError('cannot parse shape parameters') shape_params.append(param) if n_annulus > 1: tmp_params = [] for i in range(n_annulus): if shape in ('ellipse', 'box'): idx = (i + 1) * 2 params = [shape_params[0], shape_params[1], shape_params[idx], shape_params[idx + 1], shape_params[idx + 2], shape_params[idx + 3], shape_params[-1]] else: idx = i + 2 params = [shape_params[0], shape_params[1], shape_params[idx], shape_params[idx + 1]] tmp_params.append(params) shape_params = tmp_params else: shape_params = [shape_params] if n_annulus > 0: if shape == 'ellipse': shape = 'ellipse_annulus' elif shape == 'box': shape = 'rectangle_annulus' return shape, shape_params def _define_coords(region_type, params, frame=None): if region_type == 'pixel': coords = PixCoord(*params) else: coords = SkyCoord(*params, frame=frame) return coords def _define_region_params(region_type, shape, shape_params, frame=None): if frame is not None: frame = ds9_frame_map[frame] if shape == 'polygon': coord_params = (shape_params[0::2], shape_params[1::2]) params = [_define_coords(region_type, coord_params, frame=frame)] elif shape == 'line': params = [_define_coords(region_type, shape_params[0:2], frame=frame), _define_coords(region_type, shape_params[2:4], frame=frame)] elif shape in ('ellipse_annulus', 'rectangle_annulus'): size_params = shape_params[2:-1] tmp = [size_params[0::2], size_params[1::2]] tmp_flat = [item for sublist in tmp for item in sublist] params = [_define_coords(region_type, shape_params[0:2], frame=frame), *tmp_flat, shape_params[-1]] else: params = ([_define_coords(region_type, shape_params[0:2], frame=frame)] + shape_params[2:]) return params def _make_region(region_data): """ region_data : `_RegionData` instance """ try: # NOTE: returned shape can be different from region_data.shape shape, shape_params_list = _parse_shape_params(region_data) except DS9ParserError as err: # raise a warning and skip the region msg = f'{str(err)}: {region_data.region_str}' warnings.warn(msg, AstropyUserWarning) return None # define the parameters to initialize a Region # NOTE: region_params can be longer than region_data for # multi-annulus regions region_type = region_data.region_type region_params = [] for shape_params in shape_params_list: region_params.extend([_define_region_params(region_type, shape, shape_params, region_data.frame)]) # separate the metadata and visual metadata and then translate the # visual metadata to valid mpl kwargs for the particular region meta, visual = _split_raw_metadata(region_data.raw_meta) visual = _translate_ds9_to_visual(shape, visual) regions = [] for shape_params in region_params: # for Text region, we need to add meta['text'] to params; # set to '' if the text meta value was not specified if shape == 'text': shape_params.append(region_data.raw_meta.get('text', '')) region = ds9_shape_to_region[region_type][shape](*shape_params) region.meta = RegionMeta(meta) region.visual = RegionVisual(visual) region._raw_meta = region_data.raw_meta regions.append(region) return regions def _find_text_delim_idx(region_str): """ Find the indices of the DS9 text field delimiters ({}, '', or "") in a string. """ pattern = re.compile(r'(text\s*=\s*[{\'"])') idx0 = [] delim = [] start_idx = [] for match in pattern.finditer(region_str): idx0.append(match.start()) end_delim = match.group()[-1] if end_delim == '{': end_delim = '}' delim.append(end_delim) start_idx.append(match.span()[1]) idx1 = [] for sidx, char in zip(start_idx, delim): idx1.append(region_str.find(char, sidx)) return idx0, idx1 def _split_semicolon(region_str): r""" Split a DS9 region string on semicolons. The line is not split on semicolons found in a text field. This turned out to be a very tricky problem (attempts with regex failed): * text fields are delimited by {}, '', or "" * the text delimiters do not have to be consistent within a file * region strings can have unpaired ' (arcmin) or " (arcsec) * region strings can have "#" in a color value (cannot split on #) * the text field can contain "text={str}", "text='str'", 'test="str"' etc., e.g., text={text="hello"} * escaped delimiter characters used by the text field are not allowed within the text field, e.g., "text={my field\{test\}}" and "text='my field \'test\''" are invalid. However, "text={my field, 'test'}" is valid This code finds the text field delimiters and then finds the indices of the opening and closing delimiters. Text fields that contain "text={str}", etc. are included (as a smaller range between the larger text field range), but this is fine because all we need are index ranges where to exclude semicolons (for splitting). Semicolons found at indices between the open/close delimiter indices are excluded from splitting. """ idx0, idx1 = _find_text_delim_idx(region_str) semi_idx = [pos for pos, char in enumerate(region_str) if char == ';'] fidx = [] for i in semi_idx: for i0, i1 in zip(idx0, idx1): if i0 <= i <= i1: break else: fidx.append(i + 1) fidx.insert(0, 0) return [region_str[i:j].rstrip(';') for i, j in zip(fidx, fidx[1:] + [None])] ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1700163875.5225399 regions-0.8/regions/io/ds9/tests/0000755000175100001770000000000014525470444016363 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/ds9/tests/__init__.py0000644000175100001770000000000014525470416020461 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000003200000000000010210 xustar0026 mtime=1700163875.52654 regions-0.8/regions/io/ds9/tests/data/0000755000175100001770000000000014525470444017274 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/ds9/tests/data/ds9.color.reg0000644000175100001770000000106614525470416021611 0ustar00runnerdocker# Region file format: DS9 version 4.1 global color=green dashlist=8 3 width=1 font="helvetica 10 normal roman" select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 include=1 source=1 fk5 circle(13:29:52.675,+47:11:45.02,1") # color=blue circle(13:29:52.675,+47:11:45.02,2") # color=#800 circle(13:29:52.675,+47:11:45.02,3") # color=#0a0 circle(13:29:52.675,+47:11:45.02,4") # color=#880000 circle(13:29:52.675,+47:11:45.02,5") # color=#00aa00 circle(13:29:52.675,+47:11:45.02,6") # color=#888800000000 circle(13:29:52.675,+47:11:45.02,7") # color=#0000aaaa0000 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/ds9/tests/data/ds9.color.spaces.reg0000644000175100001770000000110414525470416023057 0ustar00runnerdocker# Region file format: DS9 version 4.1 global color=green dashlist=8 3 width=1 font="helvetica 10 normal roman" select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 include=1 source=1 fk5 circle(13:29:52.675, +47:11:45.02, 1") # color=blue circle(13:29:52.675, +47:11:45.02, 2") # color=#800 circle(13:29:52.675, +47:11:45.02, 3") # color=#0a0 circle(13:29:52.675, +47:11:45.02, 4") # color=#880000 circle(13:29:52.675, +47:11:45.02, 5") # color=#00aa00 circle(13:29:52.675, +47:11:45.02, 6") # color=#888800000000 circle(13:29:52.675, +47:11:45.02, 7") # color=#0000aaaa0000 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/ds9/tests/data/ds9.composite.reg0000644000175100001770000000353214525470416022475 0ustar00runnerdocker# Region file format: DS9 version 4.1 global color=green dashlist=8 3 width=1 font="helvetica 10 normal roman" select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 include=1 source=1 fk5 # composite(202.48165,47.1931,317.39831) || composite=1 circle(202.48705,47.208237,3.9640007") || # color=pink width=3 font="times 10 normal roman" text={Circle} tag={foo} tag={foo bar} This is a Comment -ellipse(202.48309,47.204492,7.9280014",3.9640007",2.3983109) || # color=#0ff font="helvetica 10 normal italic" text={Ellipse} background -box(202.47783,47.201057,15.856003",7.9280014",2.3983109) || # color=yellow font="helvetica 10 bold roman" text={Box} polygon(202.47309,47.198922,202.46877,47.199044,202.46859,47.196108,202.47291,47.195985) || # font="courier 10 normal roman" text={Polygon} edit=0 rotate=0 -line(202.4684,47.194116,202.46202,47.193946) || # line=1 1 color=cyan text={Line} # text(202.45907,47.188886) || color=magenta font="helvetica 14 bold roman" text={Region} annulus(202.49319,47.203697,1.9820003",3.9640007",5.946001") || # color=magenta font="helvetica 10 bold roman" text={Annulus} ellipse(202.48834,47.200368,2.9730005",1.4865003",5.946001",2.9730005",2.3983109) || # color=red width=3 font="helvetica 10 bold roman" text={Ellipse Annulus} box(202.4832,47.197085,7.9280014",3.9640007",11.892002",5.946001",2.3983109) || # font="helvetica 10 bold roman" text={Box Annulus} point(202.49871,47.200189) || # point=circle text={Circle Point} point(202.49351,47.196791) || # point=box color=red width=3 text={Box Point} point(202.48857,47.193854) || # point=diamond text={Diamond Point} point(202.5005,47.197643) || # point=cross color=blue text={Cross Point} point(202.49591,47.194852) || # point=x text={X Point} point(202.49148,47.191862) || # point=arrow color=magenta text={Arrow Point} point(202.49864,47.19267) || # point=boxcircle text={BoxCircle Point} ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/ds9/tests/data/ds9.ecliptic.hms.reg0000644000175100001770000000355514525470416023062 0ustar00runnerdocker# Region file format: DS9 version 4.1 global color=green dashlist=8 3 width=1 font="helvetica 10 normal roman" select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 include=1 source=1 ecliptic circle(+175:06:44.660,+50:57:09.921,3.964") # color=pink width=3 font="times 10 normal roman" text={Circle} tag={foo} tag={foo bar} This is a Comment -ellipse(+175:06:44.660,+50:56:53.323,7.928",3.964",326.717) # color=#0ff font="helvetica 10 normal italic" text={Ellipse} background -box(+175:06:39.530,+50:56:35.776,15.856",7.928",326.717) # color=yellow font="helvetica 10 bold roman" text={Box} polygon(+175:06:31.722,+50:56:22.779,+175:06:17.685,+50:56:16.970,+175:06:26.903,+50:56:08.125,+175:06:40.939,+50:56:13.934) # font="courier 10 normal roman" text={Polygon} edit=0 rotate=0 -line(+175:06:32.927,+50:56:02.026,+175:06:13.393,+50:55:52.432) # line=1 1 color=cyan text={Line} # text(+175:06:20.956,+50:55:33.430) color=magenta font="helvetica 14 bold roman" text={Region} annulus(+175:07:19.163,+50:57:05.414,1.982",3.964",5.946") # color=magenta font="helvetica 10 bold roman" text={Annulus} ellipse(+175:07:14.964,+50:56:48.757,2.973",1.4865",5.946",2.973",326.717) # color=red width=3 font="helvetica 10 bold roman" text={Ellipse Annulus} box(+175:07:09.715,+50:56:31.833,7.928",3.964",11.892",5.946",326.717) # font="helvetica 10 bold roman" text={Box Annulus} point(+175:07:48.259,+50:57:03.028) # point=circle text={Circle Point} point(+175:07:43.186,+50:56:45.675) # point=box color=red width=3 text={Box Point} point(+175:07:37.393,+50:56:30.037) # point=diamond text={Diamond Point} point(+175:08:02.394,+50:56:58.143) # point=cross color=blue text={Cross Point} point(+175:07:57.227,+50:56:43.435) # point=x text={X Point} point(+175:07:53.228,+50:56:28.371) # point=arrow color=magenta text={Arrow Point} point(+175:08:13.115,+50:56:40.951) # point=boxcircle text={BoxCircle Point} ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/ds9/tests/data/ds9.ecliptic.reg0000644000175100001770000000337014525470416022267 0ustar00runnerdocker# Region file format: DS9 version 4.1 global color=green dashlist=8 3 width=1 font="helvetica 10 normal roman" select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 include=1 source=1 ecliptic circle(175.11241,50.952756,3.9640007") # color=pink width=3 font="times 10 normal roman" text={Circle} tag={foo} tag={foo bar} This is a Comment -ellipse(175.11241,50.948145,7.9280014",3.9640007",326.71725) # color=#0ff font="helvetica 10 normal italic" text={Ellipse} background -box(175.11098,50.943271,15.856003",7.9280014",326.71725) # color=yellow font="helvetica 10 bold roman" text={Box} polygon(175.10881,50.939661,175.10491,50.938047,175.10747,50.93559,175.11137,50.937204) # font="courier 10 normal roman" text={Polygon} edit=0 rotate=0 -line(175.10915,50.933896,175.10372,50.931231) # line=1 1 color=cyan text={Line} # text(175.10582,50.925953) color=magenta font="helvetica 14 bold roman" text={Region} annulus(175.12199,50.951504,1.9820003",3.9640007",5.946001") # color=magenta font="helvetica 10 bold roman" text={Annulus} ellipse(175.12082,50.946877,2.9730005",1.4865003",5.946001",2.9730005",326.71725) # color=red width=3 font="helvetica 10 bold roman" text={Ellipse Annulus} box(175.11937,50.942176,7.9280014",3.9640007",11.892002",5.946001",326.71725) # font="helvetica 10 bold roman" text={Box Annulus} point(175.13007,50.950841) # point=circle text={Circle Point} point(175.12866,50.946021) # point=box color=red width=3 text={Box Point} point(175.12705,50.941677) # point=diamond text={Diamond Point} point(175.134,50.949484) # point=cross color=blue text={Cross Point} point(175.13256,50.945398) # point=x text={X Point} point(175.13145,50.941214) # point=arrow color=magenta text={Arrow Point} point(175.13698,50.944709) # point=boxcircle text={BoxCircle Point} ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/ds9/tests/data/ds9.fits.reg0000644000175100001770000000066514525470416021444 0ustar00runnerdocker# Region file format: DS9 version 4.1 global color=green dashlist=8 3 width=1 font="helvetica 10 normal roman" select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 include=1 source=1 image circle(383,1153,40) box(679,1149,160,80,0) -box(1057,1155,160,80,30) box(675,979,160,80,0) box(1065,979,160,80,30) -ellipse(399,777,80,40,30) point(687,773) # point=boxcircle annulus(685,561,20,60) polygon(1014,805,1151,805,1151,668,1051,685) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/ds9/tests/data/ds9.fk4.hms.reg0000644000175100001770000000345414525470416021750 0ustar00runnerdocker# Region file format: DS9 version 4.1 global color=green dashlist=8 3 width=1 font="helvetica 10 normal roman" select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 include=1 source=1 fk4 circle(13:27:50.384,+47:27:57.76,3.964") # color=pink width=3 font="times 10 normal roman" text={Circle} tag={foo} tag={foo bar} This is a Comment -ellipse(13:27:49.426,+47:27:44.31,7.928",3.964",2.55413) # color=#0ff font="helvetica 10 normal italic" text={Ellipse} background -box(13:27:48.154,+47:27:31.98,15.856",7.928",2.55413) # color=yellow font="helvetica 10 bold roman" text={Box} polygon(13:27:47.011,+47:27:24.32,13:27:45.968,+47:27:24.79,13:27:45.922,+47:27:14.22,13:27:46.964,+47:27:13.75) # font="courier 10 normal roman" text={Polygon} edit=0 rotate=0 -line(13:27:45.873,+47:27:07.05,13:27:44.336,+47:27:06.48) # line=1 1 color=cyan text={Line} # text(13:27:43.620,+47:26:48.29) color=magenta font="helvetica 14 bold roman" text={Region} annulus(13:27:51.861,+47:27:41.38,1.982",3.964",5.946") # color=magenta font="helvetica 10 bold roman" text={Annulus} ellipse(13:27:50.688,+47:27:29.43,2.973",1.4865",5.946",2.973",2.55413) # color=red width=3 font="helvetica 10 bold roman" text={Ellipse Annulus} box(13:27:49.447,+47:27:17.65,7.928",3.964",11.892",5.946",2.55413) # font="helvetica 10 bold roman" text={Box Annulus} point(13:27:53.189,+47:27:28.71) # point=circle text={Circle Point} point(13:27:51.931,+47:27:16.52) # point=box color=red width=3 text={Box Point} point(13:27:50.737,+47:27:05.98) # point=diamond text={Diamond Point} point(13:27:53.618,+47:27:19.54) # point=cross color=blue text={Cross Point} point(13:27:52.509,+47:27:09.52) # point=x text={X Point} point(13:27:51.438,+47:26:58.79) # point=arrow color=magenta text={Arrow Point} point(13:27:53.166,+47:27:01.65) # point=boxcircle text={BoxCircle Point} ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/ds9/tests/data/ds9.fk4.reg0000644000175100001770000000336214525470416021160 0ustar00runnerdocker# Region file format: DS9 version 4.1 global color=green dashlist=8 3 width=1 font="helvetica 10 normal roman" select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 include=1 source=1 fk4 circle(201.95993,47.466046,3.9640007") # color=pink width=3 font="times 10 normal roman" text={Circle} tag={foo} tag={foo bar} This is a Comment -ellipse(201.95594,47.462308,7.9280014",3.9640007",2.5541322) # color=#0ff font="helvetica 10 normal italic" text={Ellipse} background -box(201.95064,47.458883,15.856003",7.9280014",2.5541322) # color=yellow font="helvetica 10 bold roman" text={Box} polygon(201.94588,47.456757,201.94153,47.456887,201.94134,47.453951,201.94568,47.45382) # font="courier 10 normal roman" text={Polygon} edit=0 rotate=0 -line(201.94114,47.45196,201.93473,47.451801) # line=1 1 color=cyan text={Line} # text(201.93175,47.446747) color=magenta font="helvetica 14 bold roman" text={Region} annulus(201.96609,47.461495,1.9820003",3.9640007",5.946001") # color=magenta font="helvetica 10 bold roman" text={Annulus} ellipse(201.9612,47.458175,2.9730005",1.4865003",5.946001",2.9730005",2.5541322) # color=red width=3 font="helvetica 10 bold roman" text={Ellipse Annulus} box(201.95603,47.454902,7.9280014",3.9640007",11.892002",5.946001",2.5541322) # font="helvetica 10 bold roman" text={Box Annulus} point(201.97162,47.457976) # point=circle text={Circle Point} point(201.96638,47.454589) # point=box color=red width=3 text={Box Point} point(201.9614,47.451661) # point=diamond text={Diamond Point} point(201.97341,47.455428) # point=cross color=blue text={Cross Point} point(201.96879,47.452645) # point=x text={X Point} point(201.96433,47.449663) # point=arrow color=magenta text={Arrow Point} point(201.97152,47.450458) # point=boxcircle text={BoxCircle Point} ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/ds9/tests/data/ds9.fk5.hms.reg0000644000175100001770000000345414525470416021751 0ustar00runnerdocker# Region file format: DS9 version 4.1 global color=green dashlist=8 3 width=1 font="helvetica 10 normal roman" select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 include=1 source=1 fk5 circle(13:29:56.743,+47:12:30.42,3.964") # color=pink width=3 font="times 10 normal roman" text={Circle} tag={foo} tag={foo bar} This is a Comment -ellipse(13:29:55.792,+47:12:16.94,7.928",3.964",2.39831) # color=#0ff font="helvetica 10 normal italic" text={Ellipse} background -box(13:29:54.530,+47:12:04.57,15.856",7.928",2.39831) # color=yellow font="helvetica 10 bold roman" text={Box} polygon(13:29:53.394,+47:11:56.88,13:29:52.357,+47:11:57.32,13:29:52.314,+47:11:46.75,13:29:53.351,+47:11:46.31) # font="courier 10 normal roman" text={Polygon} edit=0 rotate=0 -line(13:29:52.267,+47:11:39.58,13:29:50.737,+47:11:38.97) # line=1 1 color=cyan text={Line} # text(13:29:50.030,+47:11:20.75) color=magenta font="helvetica 14 bold roman" text={Region} annulus(13:29:58.217,+47:12:14.07,1.982",3.964",5.946") # color=magenta font="helvetica 10 bold roman" text={Annulus} ellipse(13:29:57.053,+47:12:02.09,2.973",1.4865",5.946",2.973",2.39831) # color=red width=3 font="helvetica 10 bold roman" text={Ellipse Annulus} box(13:29:55.820,+47:11:50.27,7.928",3.964",11.892",5.946",2.39831) # font="helvetica 10 bold roman" text={Box Annulus} point(13:29:59.541,+47:12:01.44) # point=circle text={Circle Point} point(13:29:58.293,+47:11:49.21) # point=box color=red width=3 text={Box Point} point(13:29:57.107,+47:11:38.64) # point=diamond text={Diamond Point} point(13:29:59.971,+47:11:52.28) # point=cross color=blue text={Cross Point} point(13:29:58.870,+47:11:42.23) # point=x text={X Point} point(13:29:57.807,+47:11:31.47) # point=arrow color=magenta text={Arrow Point} point(13:29:59.526,+47:11:34.38) # point=boxcircle text={BoxCircle Point} ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/ds9/tests/data/ds9.fk5.reg0000644000175100001770000000336114525470416021160 0ustar00runnerdocker# Region file format: DS9 version 4.1 global color=green dashlist=8 3 width=1 font="helvetica 10 normal roman" select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 include=1 source=1 fk5 circle(202.48643,47.208449,3.9640007") # color=pink width=3 font="times 10 normal roman" text={Circle} tag={foo} tag={foo bar} This is a Comment -ellipse(202.48247,47.204704,7.9280014",3.9640007",2.3983109) # color=#0ff font="helvetica 10 normal italic" text={Ellipse} background -box(202.47721,47.201269,15.856003",7.9280014",2.3983109) # color=yellow font="helvetica 10 bold roman" text={Box} polygon(202.47248,47.199134,202.46815,47.199257,202.46797,47.19632,202.4723,47.196197) # font="courier 10 normal roman" text={Polygon} edit=0 rotate=0 -line(202.46778,47.194329,202.4614,47.194158) # line=1 1 color=cyan text={Line} # text(202.45846,47.189099) color=magenta font="helvetica 14 bold roman" text={Region} annulus(202.49257,47.20391,1.9820003",3.9640007",5.946001") # color=magenta font="helvetica 10 bold roman" text={Annulus} ellipse(202.48772,47.20058,2.9730005",1.4865003",5.946001",2.9730005",2.3983109) # color=red width=3 font="helvetica 10 bold roman" text={Ellipse Annulus} box(202.48258,47.197298,7.9280014",3.9640007",11.892002",5.946001",2.3983109) # font="helvetica 10 bold roman" text={Box Annulus} point(202.49809,47.200401) # point=circle text={Circle Point} point(202.49289,47.197004) # point=box color=red width=3 text={Box Point} point(202.48795,47.194067) # point=diamond text={Diamond Point} point(202.49988,47.197856) # point=cross color=blue text={Cross Point} point(202.49529,47.195065) # point=x text={X Point} point(202.49086,47.192074) # point=arrow color=magenta text={Arrow Point} point(202.49802,47.192883) # point=boxcircle text={BoxCircle Point} ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/ds9/tests/data/ds9.galactic.hms.reg0000644000175100001770000000355514525470416023035 0ustar00runnerdocker# Region file format: DS9 version 4.1 global color=green dashlist=8 3 width=1 font="helvetica 10 normal roman" select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 include=1 source=1 galactic circle(+104:50:15.532,+68:32:38.380,3.964") # color=pink width=3 font="times 10 normal roman" text={Circle} tag={foo} tag={foo bar} This is a Comment -ellipse(+104:50:24.720,+68:32:54.634,7.928",3.964",158.389) # color=#0ff font="helvetica 10 normal italic" text={Ellipse} background -box(+104:50:43.097,+68:33:11.163,15.856",7.928",158.389) # color=yellow font="helvetica 10 bold roman" text={Box} polygon(+104:51:03.480,+68:33:22.893,+104:51:30.395,+68:33:26.787,+104:51:19.743,+68:33:36.626,+104:50:52.826,+68:33:32.732) # font="courier 10 normal roman" text={Polygon} edit=0 rotate=0 -line(+104:51:12.957,+68:33:43.369,+104:51:51.267,+68:33:50.265) # line=1 1 color=cyan text={Line} # text(+104:51:49.050,+68:34:09.839) color=magenta font="helvetica 14 bold roman" text={Region} annulus(+104:49:19.827,+68:32:47.191,1.982",3.964",5.946") # color=magenta font="helvetica 10 bold roman" text={Annulus} ellipse(+104:49:36.118,+68:33:02.969,2.973",1.4865",5.946",2.973",158.389) # color=red width=3 font="helvetica 10 bold roman" text={Ellipse Annulus} box(+104:49:54.339,+68:33:18.875,7.928",3.964",11.892",5.946",158.389) # font="helvetica 10 bold roman" text={Box Annulus} point(+104:48:32.059,+68:32:53.230) # point=circle text={Circle Point} point(+104:48:50.197,+68:33:09.580) # point=box color=red width=3 text={Box Point} point(+104:49:08.613,+68:33:24.159) # point=diamond text={Diamond Point} point(+104:48:10.904,+68:32:59.810) # point=cross color=blue text={Cross Point} point(+104:48:27.737,+68:33:13.560) # point=x text={X Point} point(+104:48:42.801,+68:33:27.806) # point=arrow color=magenta text={Arrow Point} point(+104:48:02.289,+68:33:18.011) # point=boxcircle text={BoxCircle Point} ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/ds9/tests/data/ds9.galactic.reg0000644000175100001770000000336314525470416022244 0ustar00runnerdocker# Region file format: DS9 version 4.1 global color=green dashlist=8 3 width=1 font="helvetica 10 normal roman" select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 include=1 source=1 galactic circle(104.83765,68.543994,3.9640007") # color=pink width=3 font="times 10 normal roman" text={Circle} tag={foo} tag={foo bar} This is a Comment -ellipse(104.8402,68.54851,7.9280014",3.9640007",158.38935) # color=#0ff font="helvetica 10 normal italic" text={Ellipse} background -box(104.8453,68.553101,15.856003",7.9280014",158.38935) # color=yellow font="helvetica 10 bold roman" text={Box} polygon(104.85097,68.556359,104.85844,68.557441,104.85548,68.560174,104.84801,68.559092) # font="courier 10 normal roman" text={Polygon} edit=0 rotate=0 -line(104.8536,68.562047,104.86424,68.563963) # line=1 1 color=cyan text={Line} # text(104.86363,68.5694) color=magenta font="helvetica 14 bold roman" text={Region} annulus(104.82217,68.546442,1.9820003",3.9640007",5.946001") # color=magenta font="helvetica 10 bold roman" text={Annulus} ellipse(104.8267,68.550825,2.9730005",1.4865003",5.946001",2.9730005",158.38935) # color=red width=3 font="helvetica 10 bold roman" text={Ellipse Annulus} box(104.83176,68.555243,7.9280014",3.9640007",11.892002",5.946001",158.38935) # font="helvetica 10 bold roman" text={Box Annulus} point(104.80891,68.548119) # point=circle text={Circle Point} point(104.81394,68.552661) # point=box color=red width=3 text={Box Point} point(104.81906,68.556711) # point=diamond text={Diamond Point} point(104.80303,68.549947) # point=cross color=blue text={Cross Point} point(104.8077,68.553767) # point=x text={X Point} point(104.81189,68.557724) # point=arrow color=magenta text={Arrow Point} point(104.80064,68.555003) # point=boxcircle text={BoxCircle Point} ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/ds9/tests/data/ds9.icrs.hms.reg0000644000175100001770000000345514525470416022225 0ustar00runnerdocker# Region file format: DS9 version 4.1 global color=green dashlist=8 3 width=1 font="helvetica 10 normal roman" select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 include=1 source=1 icrs circle(13:29:56.743,+47:12:30.42,3.964") # color=pink width=3 font="times 10 normal roman" text={Circle} tag={foo} tag={foo bar} This is a Comment -ellipse(13:29:55.792,+47:12:16.94,7.928",3.964",2.39832) # color=#0ff font="helvetica 10 normal italic" text={Ellipse} background -box(13:29:54.530,+47:12:04.57,15.856",7.928",2.39832) # color=yellow font="helvetica 10 bold roman" text={Box} polygon(13:29:53.394,+47:11:56.88,13:29:52.357,+47:11:57.33,13:29:52.314,+47:11:46.75,13:29:53.351,+47:11:46.31) # font="courier 10 normal roman" text={Polygon} edit=0 rotate=0 -line(13:29:52.267,+47:11:39.58,13:29:50.737,+47:11:38.97) # line=1 1 color=cyan text={Line} # text(13:29:50.030,+47:11:20.76) color=magenta font="helvetica 14 bold roman" text={Region} annulus(13:29:58.217,+47:12:14.08,1.982",3.964",5.946") # color=magenta font="helvetica 10 bold roman" text={Annulus} ellipse(13:29:57.053,+47:12:02.09,2.973",1.4865",5.946",2.973",2.39832) # color=red width=3 font="helvetica 10 bold roman" text={Ellipse Annulus} box(13:29:55.820,+47:11:50.27,7.928",3.964",11.892",5.946",2.39832) # font="helvetica 10 bold roman" text={Box Annulus} point(13:29:59.541,+47:12:01.45) # point=circle text={Circle Point} point(13:29:58.293,+47:11:49.22) # point=box color=red width=3 text={Box Point} point(13:29:57.108,+47:11:38.64) # point=diamond text={Diamond Point} point(13:29:59.971,+47:11:52.28) # point=cross color=blue text={Cross Point} point(13:29:58.870,+47:11:42.24) # point=x text={X Point} point(13:29:57.807,+47:11:31.47) # point=arrow color=magenta text={Arrow Point} point(13:29:59.526,+47:11:34.38) # point=boxcircle text={BoxCircle Point} ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/ds9/tests/data/ds9.icrs.oneline.reg0000644000175100001770000000130114525470416023053 0ustar00runnerdockericrs;circle(202.48643,47.208449,3.9640007");-ellipse(202.48247,47.204705,7.9280014",3.9640007",2.3983198);-box(202.47721,47.20127,15.856003",7.9280014",2.3983198);polygon(202.47248,47.199135,202.46815,47.199257,202.46797,47.19632,202.4723,47.196198);-line(202.46778,47.194329,202.4614,47.194159);annulus(202.49257,47.20391,1.9820003",3.9640007",5.946001");ellipse(202.48772,47.200581,2.9730005",1.4865003",5.946001",2.9730005",2.3983198);box(202.48259,47.197298,7.9280014",3.9640007",11.892002",5.946001",2.3983198);point(202.49809,47.200401);point(202.49289,47.197004);point(202.48795,47.194067);point(202.49988,47.197856);point(202.49529,47.195065);point(202.49086,47.192075);point(202.49802,47.192883) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/ds9/tests/data/ds9.icrs.reg0000644000175100001770000000336214525470416021434 0ustar00runnerdocker# Region file format: DS9 version 4.1 global color=green dashlist=8 3 width=1 font="helvetica 10 normal roman" select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 include=1 source=1 icrs circle(202.48643,47.208449,3.9640007") # color=pink width=3 font="times 10 normal roman" text={Circle} tag={foo} tag={foo bar} This is a Comment -ellipse(202.48247,47.204705,7.9280014",3.9640007",2.3983198) # color=#0ff font="helvetica 10 normal italic" text={Ellipse} background -box(202.47721,47.20127,15.856003",7.9280014",2.3983198) # color=yellow font="helvetica 10 bold roman" text={Box} polygon(202.47248,47.199135,202.46815,47.199257,202.46797,47.19632,202.4723,47.196198) # font="courier 10 normal roman" text={Polygon} edit=0 rotate=0 -line(202.46778,47.194329,202.4614,47.194159) # line=1 1 color=cyan text={Line} # text(202.45846,47.189099) color=magenta font="helvetica 14 bold roman" text={Region} annulus(202.49257,47.20391,1.9820003",3.9640007",5.946001") # color=magenta font="helvetica 10 bold roman" text={Annulus} ellipse(202.48772,47.200581,2.9730005",1.4865003",5.946001",2.9730005",2.3983198) # color=red width=3 font="helvetica 10 bold roman" text={Ellipse Annulus} box(202.48259,47.197298,7.9280014",3.9640007",11.892002",5.946001",2.3983198) # font="helvetica 10 bold roman" text={Box Annulus} point(202.49809,47.200401) # point=circle text={Circle Point} point(202.49289,47.197004) # point=box color=red width=3 text={Box Point} point(202.48795,47.194067) # point=diamond text={Diamond Point} point(202.49988,47.197856) # point=cross color=blue text={Cross Point} point(202.49529,47.195065) # point=x text={X Point} point(202.49086,47.192075) # point=arrow color=magenta text={Arrow Point} point(202.49802,47.192883) # point=boxcircle text={BoxCircle Point} ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/ds9/tests/data/ds9.image.oneline.reg0000644000175100001770000000163214525470416023204 0ustar00runnerdockerimage;circle(166,546,20);-ellipse(248,529,40,20,45);-box(338,527,80,40,45);polygon(407.24723,538,445,575.75275,482.75277,538,445,500.24723);-line(509,513,569,564);annulus(166,434,10,20,30);ellipse(251,430,15,7.5,30,15,45);box(338,429,40,20,60,30,45);point(159,341);point(248,339);point(329,341);point(174,292);point(250,293);point(327,290);point(252,241);panda(428,341,0,270,3,0,30,2);panda(430,250,51.5819,90,1,0,15,1);panda(430,250,51.5819,90,1,15,30,1);panda(430,250,90,180,1,0,15,1);panda(430,250,90,180,1,15,30,1);panda(430,250,180,270,1,0,15,1);panda(430,250,180,270,1,15,30,1);epanda(510,333,0,270,3,15,7.5,30,15,1,45);epanda(513,244,45,90,1,15,7.5,30,15,1,45);epanda(513,244,90,180,1,15,7.5,30,15,1,45);epanda(513,244,180,270,1,15,7.5,30,15,1,45);bpanda(597,333,0,270,3,40,20,60,30,1,45);bpanda(593,245,45,90,1,40,20,60,30,1,45);bpanda(593,245,90,180,1,40,20,60,30,1,45);bpanda(593,245,180,270,1,40,20,60,30,1,45);././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/ds9/tests/data/ds9.image.reg0000644000175100001770000000261014525470416021551 0ustar00runnerdocker# Region file format: DS9 version 4.1 global color=green dashlist=8 3 width=1 font="helvetica 10 normal roman" select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 include=1 source=1 image circle(166,546,20) # color=pink width=3 font="times 10 normal roman" text={Circle} tag={foo} tag={foo bar} This is a Comment -ellipse(248,529,40,20,45) # color=#0ff font="helvetica 10 normal italic" text={Ellipse} background -box(338,527,80,40,45) # color=yellow font="helvetica 10 bold roman" text={Box} polygon(407.24723,538,445,575.75275,482.75277,538,445,500.24723) # font="courier 10 normal roman" text={Polygon} edit=0 rotate=0 -line(509,513,569,564) # line=1 1 color=cyan text={Line} # text(658,521) color=magenta font="helvetica 14 bold roman" text={Region} annulus(166,434,10,20,30) # color=magenta font="helvetica 10 bold roman" text={Annulus} ellipse(251,430,15,7.5,30,15,45) # color=red width=3 font="helvetica 10 bold roman" text={Ellipse Annulus} box(338,429,40,20,60,30,45) # font="helvetica 10 bold roman" text={Box Annulus} point(159,341) # point=circle text={Circle Point} point(248,339) # point=box color=red width=3 text={Box Point} point(329,341) # point=diamond text={Diamond Point} point(174,292) # point=cross color=blue text={Cross Point} point(250,293) # point=x text={X Point} point(327,290) # point=arrow color=magenta text={Arrow Point} point(252,241) # point=boxcircle text={BoxCircle Point} ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/ds9/tests/data/fk5_reference.reg0000644000175100001770000000475214525470416022505 0ustar00runnerdocker# Region file format: DS9 astropy/regions fk5 circle(202.49,47.21,3.96") # dashlist=8 3 select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 source=1 text={Circle} tag={foo} tag={foo bar} This is a Comment color=pink width=3 font="times 10 normal roman" -ellipse(202.48,47.20,7.93",3.96",2.40) # dashlist=8 3 select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 source=1 text={Ellipse} background color=#0ff width=1 font="helvetica 10 normal italic" -box(202.48,47.20,15.86",7.93",2.40) # dashlist=8 3 select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 source=1 text={Box} color=yellow width=1 font="helvetica 10 bold roman" polygon(202.47,47.20,202.47,47.20,202.47,47.20,202.47,47.20) # dashlist=8 3 select=1 highlite=1 dash=0 fixed=0 edit=0 move=1 delete=1 source=1 text={Polygon} rotate=0 color=green width=1 font="courier 10 normal roman" -line(202.47,47.19,202.46,47.19) # dashlist=8 3 select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 source=1 line=1 1 text={Line} color=cyan width=1 font="helvetica 10 normal roman" box(202.48,47.20,7.93",3.96",0.00) # dashlist=8 3 select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 source=1 text={Box Annulus} color=green width=1 font="helvetica 10 bold roman" point(202.50,47.20) # dashlist=8 3 select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 source=1 text={Circle Point} color=green width=1 font="helvetica 10 normal roman" point=circle point(202.49,47.20) # dashlist=8 3 select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 source=1 text={Box Point} color=red width=3 font="helvetica 10 normal roman" point=box point(202.49,47.19) # dashlist=8 3 select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 source=1 text={Diamond Point} color=green width=1 font="helvetica 10 normal roman" point=diamond point(202.50,47.20) # dashlist=8 3 select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 source=1 text={Cross Point} color=blue width=1 font="helvetica 10 normal roman" point=cross point(202.50,47.20) # dashlist=8 3 select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 source=1 text={X Point} color=green width=1 font="helvetica 10 normal roman" point=x point(202.49,47.19) # dashlist=8 3 select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 source=1 text={Arrow Point} color=magenta width=1 font="helvetica 10 normal roman" point=arrow point(202.50,47.19) # dashlist=8 3 select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 source=1 text={BoxCircle Point} color=green width=1 font="helvetica 10 normal roman" point=boxcircle ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/ds9/tests/data/galactic_reference.reg0000644000175100001770000000476314525470416023571 0ustar00runnerdocker# Region file format: DS9 astropy/regions galactic circle(104.84,68.54,3.96") # dashlist=8 3 select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 source=1 text={Circle} tag={foo} tag={foo bar} This is a Comment color=pink width=3 font="times 10 normal roman" -ellipse(104.84,68.55,7.93",3.96",158.39) # dashlist=8 3 select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 source=1 text={Ellipse} background color=#0ff width=1 font="helvetica 10 normal italic" -box(104.85,68.55,15.86",7.93",158.39) # dashlist=8 3 select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 source=1 text={Box} color=yellow width=1 font="helvetica 10 bold roman" polygon(104.85,68.56,104.86,68.56,104.86,68.56,104.85,68.56) # dashlist=8 3 select=1 highlite=1 dash=0 fixed=0 edit=0 move=1 delete=1 source=1 text={Polygon} rotate=0 color=green width=1 font="courier 10 normal roman" -line(104.85,68.56,104.86,68.56) # dashlist=8 3 select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 source=1 line=1 1 text={Line} color=cyan width=1 font="helvetica 10 normal roman" box(104.83,68.56,7.93",3.96",0.00) # dashlist=8 3 select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 source=1 text={Box Annulus} color=green width=1 font="helvetica 10 bold roman" point(104.81,68.55) # dashlist=8 3 select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 source=1 text={Circle Point} color=green width=1 font="helvetica 10 normal roman" point=circle point(104.81,68.55) # dashlist=8 3 select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 source=1 text={Box Point} color=red width=3 font="helvetica 10 normal roman" point=box point(104.82,68.56) # dashlist=8 3 select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 source=1 text={Diamond Point} color=green width=1 font="helvetica 10 normal roman" point=diamond point(104.80,68.55) # dashlist=8 3 select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 source=1 text={Cross Point} color=blue width=1 font="helvetica 10 normal roman" point=cross point(104.81,68.55) # dashlist=8 3 select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 source=1 text={X Point} color=green width=1 font="helvetica 10 normal roman" point=x point(104.81,68.56) # dashlist=8 3 select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 source=1 text={Arrow Point} color=magenta width=1 font="helvetica 10 normal roman" point=arrow point(104.80,68.56) # dashlist=8 3 select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1 source=1 text={BoxCircle Point} color=green width=1 font="helvetica 10 normal roman" point=boxcircle ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/ds9/tests/data/plot_image.reg0000644000175100001770000000151714525470416022116 0ustar00runnerdocker# Region file format: DS9 astropy/regions image circle(501.000000,601.000000,50.000000) # color=red line(401.000000,201.000000,501.000000,101.000000) # color=blue point(101.000000,801.000000) # point=cross color=orange point(101.000000,101.000000) # point=x color=brown point(101.000000,301.000000) # point=boxcircle color=yellow point(101.000000,401.000000) # point=x color=violet point(101.000000,201.000000) # color=red ellipse(301.000000,751.000000,45.000000,30.000000,75.000000) # color=blue text(151.000000,551.000000) # text={Text} textangle=45 color=orange font="helvetica 12 normal roman" annulus(651.000000,301.000000,60.000000,90.000000) # color=brown polygon(451.000000,751.000000,451.000000,701.000000,551.000000,651.000000,601.000000,751.000000) # color=yellow box(401.000000,401.000000,100.000000,80.000000,0.000000) # color=violet ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/ds9/tests/test_ds9.py0000644000175100001770000005773314525470416020511 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst """ Tests for the ds9 subpackage. """ import os import warnings import astropy.units as u import pytest from astropy.coordinates import Angle, SkyCoord from astropy.tests.helper import assert_quantity_allclose from astropy.utils.data import get_pkg_data_filenames from astropy.utils.exceptions import AstropyUserWarning from numpy.testing import assert_allclose, assert_equal from regions._utils.optional_deps import HAS_MATPLOTLIB from regions.core import PixCoord, Regions, RegionVisual from regions.shapes import (CirclePixelRegion, CircleSkyRegion, PointPixelRegion, RegularPolygonPixelRegion) from regions.tests.helpers import assert_region_allclose def test_roundtrip(tmpdir): filenames = get_pkg_data_filenames('data', pattern='*.reg') # AstropyUserWarning will be emitted only for some of the files with warnings.catch_warnings(): warnings.simplefilter('ignore', AstropyUserWarning) # Check that all test files are readable for filename in filenames: regions = Regions.read(filename, format='ds9') assert len(regions) > 0 tempfile = tmpdir.join('tmp.ds9').strpath regions.write(tempfile, format='ds9', overwrite=True, precision=20) regions2 = Regions.read(tempfile, format='ds9') assert len(regions2) > 0 for reg1, reg2 in zip(regions, regions2): assert_region_allclose(reg1, reg2) def test_serialize(): """ Simple test for serialize. """ center = SkyCoord(42, 43, unit='deg') radius = Angle(3, 'deg') region = CircleSkyRegion(center, radius) expected = ('# Region file format: DS9 astropy/regions\nicrs\n' 'circle(42.0000,43.0000,3.0000)\n') actual = region.serialize(format='ds9', precision=4) assert actual == expected def test_parse(): """ Simple test for parse. """ region_str = ('# Region file format: DS9 astropy/regions\nfk5\n' 'circle(42.0000,43.0000,3.0000)\n') region = Regions.parse(region_str, format='ds9')[0] assert_allclose(region.center.ra.deg, 42) assert_allclose(region.center.dec.deg, 43) assert_quantity_allclose(region.radius, 3 * u.deg) def test_exclude(): """ Simple parse test for an excluded region. """ region_str = ('# Region file format: DS9 astropy/regions\nfk5\n' ' -circle(42.0000,43.0000,3.0000)\n') region = Regions.parse(region_str, format='ds9')[0] assert not region.meta['include'] def test_read_write(tmpdir): """ Simple test for write and read. """ center = SkyCoord(42, 43, unit='deg', frame='fk5') radius = Angle(3, 'deg') region = CircleSkyRegion(center, radius) region.meta['text'] = 'ExampleText' filename = os.path.join(str(tmpdir), 'ds9.reg') region.write(filename, format='ds9') region2 = Regions.read(filename, format='ds9')[0] assert_quantity_allclose(region.center.ra, 42 * u.deg) assert_quantity_allclose(region.center.dec, 43 * u.deg) assert_quantity_allclose(region.radius, 3 * u.deg) assert 'text' in region2.meta assert region2.meta['text'] == 'ExampleText' def test_invalid_region_warns(): ds9_str = ('# Region file format: DS9 astropy/regions\nfk5\n' 'circle(42.0000,43.0000,3.0000)\ninvalidregion(blah)') with pytest.warns(AstropyUserWarning) as warn_results: regions = Regions.parse(ds9_str, format='ds9') assert len(regions) == 1 assert len(warn_results) == 1 def test_global_parser(): """ Test parsing global metadata. """ region_str = ('global color=green dashlist=8 3 width=1 ' 'font="helvetica 10 normal roman" select=1 highlite=1 ' 'dash=0 fixed=0 edit=1 move=1 delete=1 include=1 source=1\n' 'icrs;circle(42.0000,43.0000,3.0000)') region = Regions.parse(region_str, format='ds9')[0] meta_expected = {'select': 1, 'highlite': 1, 'fixed': 0, 'edit': 1, 'move': 1, 'delete': 1, 'include': 1, 'source': 1} visual_expected = {'linewidth': 1, 'fontname': 'helvetica', 'fontsize': 10, 'fontweight': 'normal', 'fontstyle': 'normal', 'facecolor': 'green', 'edgecolor': 'green', 'default_style': 'ds9'} assert region.meta == meta_expected assert region.visual == visual_expected def test_meta_color(): region_str = ('# Region file format: DS9 astropy/regions\nicrs\n' 'circle(42.0000,43.0000,3.0000) # color=green\n' 'circle(43.0000,43.0000,3.0000) # color=orange\n') regions = Regions.parse(region_str, format='ds9') assert regions[0].visual['facecolor'] == 'green' assert regions[0].visual['edgecolor'] == 'green' assert regions[1].visual['facecolor'] == 'orange' assert regions[1].visual['edgecolor'] == 'orange' def test_meta_color_override_global(): """ Color parsing test in the presence of a global color. """ region_str = ('# Region file format: DS9 astropy/regions\n' 'global color=blue dashlist=8 3 width=1 ' 'font="helvetica 10 normal roman" select=1 highlite=1 ' 'dash=0 fixed=0 edit=1 move=1 delete=1 include=1 source=1\n' 'icrs\ncircle(42.0000,43.0000,3.0000) # color=green\n' 'circle(42.0000,43.0000,5.0000) # color=orange\n' 'circle(42.0000,43.0000,7.0000)') regions = Regions.parse(region_str, format='ds9') assert regions[0].visual['facecolor'] == 'green' assert regions[1].visual['facecolor'] == 'orange' assert regions[2].visual['facecolor'] == 'blue' def test_issue134_regression(): region_str = 'galactic; circle(+0:14:26.064,+0:00:45.206,30.400")' region = Regions.parse(region_str, format='ds9')[0] assert_quantity_allclose(region.radius, 30.4 * u.arcsec) def test_issue65_regression(): region_str = 'J2000; circle 188.5557102 12.0314056 1" # color=red' region = Regions.parse(region_str, format='ds9')[0] assert_quantity_allclose(region.center.ra, 188.5557102 * u.deg) assert_quantity_allclose(region.center.dec, 12.0314056 * u.deg) assert_quantity_allclose(region.radius, 1 * u.arcsec) def test_frame_uppercase(): """ Regression test for issue #236 (PR #237). """ region_str = ('GALACTIC\ncircle(188.5557102,12.0314056,7.1245) # ' 'text={This message has both a " and : in it} ' 'textangle=30') region = Regions.parse(region_str, format='ds9')[0] assert_quantity_allclose(region.center.l, 188.5557102 * u.deg) assert_quantity_allclose(region.center.b, 12.0314056 * u.deg) assert_quantity_allclose(region.radius, 7.1245 * u.deg) def test_pixel_angle(): """ Check whether angle in PixelRegions is a u.Quantity object. """ region_str = 'image\nbox(1.5,2,2,1,0)' region = Regions.parse(region_str, format='ds9')[0] assert isinstance(region.angle, u.Quantity) assert_quantity_allclose(region.angle, 0. * u.deg) def test_parse_formats(): region1_str = 'image\ncircle(1.5, 2, 2)' region1 = Regions.parse(region1_str, format='ds9')[0] region2_str = 'image\ncircle(1.5i, 2i, 2i)' region2 = Regions.parse(region2_str, format='ds9')[0] assert region1 == region2 region3_str = 'icrs\ncircle(1.5, 2, 2)' region3 = Regions.parse(region3_str, format='ds9')[0] region4_str = 'icrs\ncircle(1.5d, 2d, 2d)' region4 = Regions.parse(region4_str, format='ds9')[0] assert region3 == region4 region5_str = 'icrs\ncircle(1.5r, 1r, 2r)' region5 = Regions.parse(region5_str, format='ds9')[0] assert_quantity_allclose(region5.center.ra, 1.5 * u.radian) assert_quantity_allclose(region5.center.dec, 1.0 * u.radian) assert_quantity_allclose(region5.radius, 2.0 * u.radian) region6_str = 'icrs\ncircle(1:20:30, 2:3:7, 2)' region6 = Regions.parse(region6_str, format='ds9')[0] assert_quantity_allclose(region6.center.ra, 20.124999999999996 * u.deg) assert_quantity_allclose(region6.center.dec, 2.051944444444444 * u.deg) assert_quantity_allclose(region6.radius, 2. * u.deg) region7_str = 'icrs\ncircle(1h20m30s, 2d3m7s, 2d)' region7 = Regions.parse(region7_str, format='ds9')[0] assert_quantity_allclose(region7.center.ra, 20.124999999999996 * u.deg) assert_quantity_allclose(region7.center.dec, 2.051944444444444 * u.deg) assert_quantity_allclose(region7.radius, 2. * u.deg) def test_angle_serialization(): """ Regression test for issue #223 to ensure Angle arcsec inputs are correctly converted to degrees. """ region = CircleSkyRegion(SkyCoord(10, 20, unit='deg'), Angle(1, 'arcsec')) region_str = region.serialize(format='ds9', precision=6) expected = ('# Region file format: DS9 astropy/regions\nicrs\n' 'circle(10.000000,20.000000,0.000278)\n') assert region_str == expected def test_semicolon(): """ Regression test for issue #238 to allow semicolons in the text field. """ region_str = ('galactic\n' 'circle(0.003, 0.1, 206.696") # text={S17; test} color=red\n' 'circle(0.1, -0.5, 360.148") # text={S19} color=red') regions = Regions.parse(region_str, format='ds9') assert len(regions) == 2 regstr = ('galactic;' 'circle(202.4,47.2,10.9) # text={test; test; A1} color=red;' 'circle(103.8,40.6,3.6) # text="A, \'B\', ; {C}, D"' ' color=orange;' 'circle(103.8,30.6,3.6) # text="A, \'B, ; C}, D" color=orange;' 'circle(303.8,40.6,3.6) # text=\'A, "B", ; {C}, D\' color=cyan;' 'circle(303.8,40.6,3.11);' 'circle(303.8,30.6,3.6) # text=\'A, "B, ; {C, D\' color=cyan;' 'circle(503.8,40.6,3.6) # text={A, "B", ; \'C\', D}' ' color=yellow\n' 'circle(503.8,30.6,3.6) # text={A, "B, ; \'C, D} color=yellow;' '-ellipse(104.84,68.55,7.93",3.96",158.39) # dashlist=8 3' ' select=1 highlite=1 dash=0 fixed=0 edit=1 move=1 delete=1' ' source=1 text={Ellipse;Text} background color=#0ff width=1' ' font="helvetica 10 normal italic";' "ellipse(104.84,68.55,7.93',3.96',158.39) # dashlist=8 3" ' text="hello; world;";' 'circle(1.5, 2, 2) # text={this_is_text};' 'text(151.1,51.2) # text={text ; hi ; there;} textangle=45' ' color=orange font="helvetica 12 normal roman";' 'text(151.1,51.2) # text = {text ; hi ; there;} textangle=45' ' color=orange font="helvetica 12 normal roman";' 'circle(1.5, 2, 2) # text={text="hi;world";text;"tes\'t};' "circle(1.5, 2, 2) # text={text='hi;world';text;\"tes't};") regions = Regions.parse(regstr, format='ds9') assert len(regions) == 15 def test_parser_no_metadata(): """ Regression test for issue #259 to ensure regions without metadata are parsed correctly. """ region1_str = 'galactic;circle(42,43,3)' region2_str = 'galactic;circle 42 43 3' region1 = Regions.parse(region1_str, format='ds9')[0] region2 = Regions.parse(region2_str, format='ds9')[0] assert isinstance(region1, CircleSkyRegion) assert isinstance(region2, CircleSkyRegion) assert_quantity_allclose(region1.radius, 3.0 * u.deg) assert_quantity_allclose(region2.radius, 3.0 * u.deg) def test_spaces_metadata(): """ Regression test for spaces before or after "=" in region metadata. """ regstr = ('galactic;' 'circle(202.4,47.2,10.9) # text={a; test; test; A1} color=red;' 'circle(202.4,47.2,10.9) # text ={a; test; test; A1} color= red;' 'circle(202.4,47.2,10.9) # text= {a; test; test; A1} color =red;' 'circle(202.4,47.2,10.9) # text = {a; test; test; A1}' ' color = red;') regions = Regions.parse(regstr, format='ds9') assert len(regions) == 4 for i in range(1, len(regions)): assert regions[0].visual == regions[i].visual assert regions[0].meta == regions[i].meta regstr2 = ('galactic;' 'text(151.1,51.2) # text={text ; hi ; there;} textangle= 45' ' color=orange font="helvetica 12 normal roman";' 'text(151.1,51.2) # text ={text ; hi ; there;} textangle =45' ' color=orange font="helvetica 12 normal roman";' 'text(151.1,51.2) # text= {text ; hi ; there;} textangle =45' ' color = orange font="helvetica 12 normal roman";' 'text(151.1,51.2) # text = {text ; hi ; there;} textangle=45' ' color =orange font="helvetica 12 normal roman";') regions = Regions.parse(regstr2, format='ds9') assert len(regions) == 4 for i in range(1, len(regions)): assert regions[0].visual == regions[i].visual assert regions[0].meta == regions[i].meta @pytest.mark.skipif(not HAS_MATPLOTLIB, reason='matplotlib is required') def test_point_boxcircle(): import matplotlib.path as mpath region_str = ('# Region file format: DS9 astropy/regions\n' 'image\n' 'point(101.000000,101.000000) # color=red\n' 'point(101.000000,201.000000) # point=boxcircle color=blue\n' 'point(101.000000,301.000000)') regions = Regions.parse(region_str, format='ds9') assert isinstance(regions[0].as_artist().get_marker(), mpath.Path) assert regions[0].as_artist().get_markeredgecolor() == 'red' assert isinstance(regions[1].visual['marker'], mpath.Path) assert regions[1].as_artist().get_markeredgecolor() == 'blue' assert isinstance(regions[2].as_artist().get_marker(), mpath.Path) assert regions[2].as_artist().get_markeredgecolor() == '#00ff00' @pytest.mark.skipif(not HAS_MATPLOTLIB, reason='matplotlib is required') def test_compound_color(): region_str = ('# Region file format: DS9 astropy/regions\n' 'image\n' 'annulus(651.0,301.0,60.0,90.0) # color=red') regions = Regions.parse(region_str, format='ds9') assert regions[0].as_artist().get_edgecolor() == (1., 0., 0., 1.) @pytest.mark.skipif(not HAS_MATPLOTLIB, reason='matplotlib is required') def test_default_mpl_kwargs(): region_str = ('# Region file format: DS9 astropy/regions\n' 'image\n' 'circle(101.0,101.0,3.0) # color=red\n' 'circle(101.0,301.0,3.0)\n' 'point(101.0,101.0) # color=red\n' 'point(101.0,301.0)\n' 'text(101.0,101.0) # text={Text} color=red\n' 'text(101.0,101.0) # text={Text}') regions = Regions.parse(region_str, format='ds9') # Patch assert regions[0].visual['default_style'] == 'ds9' assert regions[0].as_artist().get_edgecolor() == (1, 0, 0, 1) assert regions[1].as_artist().get_edgecolor() == (0, 1, 0, 1) for i in (0, 1): regions[i].visual['default_style'] = None assert regions[0].as_artist().get_edgecolor() == (1, 0, 0, 1) assert regions[1].as_artist().get_edgecolor() == (0, 0, 0, 1) # Line2D assert regions[2].visual['default_style'] == 'ds9' assert regions[2].as_artist().get_markeredgecolor() == 'red' assert regions[3].as_artist().get_markeredgecolor() == '#00ff00' for i in (2, 3): regions[i].visual['default_style'] = None assert regions[2].as_artist().get_markeredgecolor() == 'red' assert regions[3].as_artist().get_markeredgecolor() == 'C0' # Text assert regions[4].visual['default_style'] == 'ds9' assert regions[4].as_artist().get_color() == 'red' assert regions[5].as_artist().get_color() == '#00ff00' for i in (4, 5): assert regions[i].as_artist().get_va() == 'center' assert regions[i].as_artist().get_ha() == 'center' for i in (4, 5): regions[i].visual['default_style'] = None assert regions[i].as_artist().get_va() == 'baseline' assert regions[i].as_artist().get_ha() == 'left' assert regions[4].as_artist().get_color() == 'red' assert regions[5].as_artist().get_color() == 'black' def test_annulus(): region1_str = 'image\nannulus(1, 2, 3, 4)' regions1 = Regions.parse(region1_str, format='ds9') assert len(regions1) == 1 assert_equal(regions1[0].center.xy, (0, 1)) assert_equal(regions1[0].inner_radius, 3.0) assert_equal(regions1[0].outer_radius, 4.0) # multiple annuli region2_str = 'image\nannulus(1, 2, 3, 4, 5, 6)' regions2 = Regions.parse(region2_str, format='ds9') assert len(regions2) == 3 assert_equal(regions2[0].center.xy, (0, 1)) assert_equal(regions2[0].inner_radius, 3.0) assert_equal(regions2[0].outer_radius, 4.0) assert_equal(regions2[1].center.xy, (0, 1)) assert_equal(regions2[1].inner_radius, 4.0) assert_equal(regions2[1].outer_radius, 5.0) assert_equal(regions2[2].center.xy, (0, 1)) assert_equal(regions2[2].inner_radius, 5.0) assert_equal(regions2[2].outer_radius, 6.0) def test_ellipse(): region1_str = 'image\nellipse (1, 2, 3, 4, 5)' region1 = Regions.parse(region1_str, format='ds9')[0] assert_equal(region1.center.xy, (0, 1)) assert_equal(region1.width, 6.0) assert_equal(region1.height, 8.0) assert_equal(region1.angle, 5.0 * u.deg) region2_str = 'icrs\nellipse (1, 2, 3, 4, 5)' region2 = Regions.parse(region2_str, format='ds9')[0] assert_equal(region2.center.ra, 1. * u.deg) assert_equal(region2.center.dec, 2. * u.deg) assert_equal(region2.width, 6.0 * u.deg) assert_equal(region2.height, 8.0 * u.deg) assert_equal(region2.angle, 5.0 * u.deg) # elliptical annulus region3_str = 'image\nellipse (1, 2, 3, 4, 5, 6, 7)' region3 = Regions.parse(region3_str, format='ds9')[0] assert_equal(region3.center.xy, (0, 1)) assert_equal(region3.inner_width, 6.0) assert_equal(region3.inner_height, 8.0) assert_equal(region3.outer_width, 10.0) assert_equal(region3.outer_height, 12.0) assert_equal(region3.angle, 7.0 * u.deg) # multiple elliptical annuli region4_str = 'image\nellipse (1, 2, 3, 4, 5, 6, 7, 8, 9)' region4 = Regions.parse(region4_str, format='ds9') assert len(region4) == 2 assert_equal(region4[0].center.xy, (0, 1)) assert_equal(region4[0].inner_width, 6.0) assert_equal(region4[0].inner_height, 8.0) assert_equal(region4[0].outer_width, 10.0) assert_equal(region4[0].outer_height, 12.0) assert_equal(region4[0].angle, 9.0 * u.deg) assert_equal(region4[1].center.xy, (0, 1)) assert_equal(region4[1].inner_width, 10.0) assert_equal(region4[1].inner_height, 12.0) assert_equal(region4[1].outer_width, 14.0) assert_equal(region4[1].outer_height, 16.0) assert_equal(region4[1].angle, 9.0 * u.deg) def test_box(): region1_str = 'image\nbox (1, 2, 3, 4, 5)' region1 = Regions.parse(region1_str, format='ds9')[0] assert_equal(region1.center.xy, (0, 1)) assert_equal(region1.width, 3.0) assert_equal(region1.height, 4.0) assert_equal(region1.angle, 5.0 * u.deg) region2_str = 'icrs\nbox (1, 2, 3, 4, 5)' region2 = Regions.parse(region2_str, format='ds9')[0] assert_equal(region2.center.ra, 1. * u.deg) assert_equal(region2.center.dec, 2. * u.deg) assert_equal(region2.width, 3.0 * u.deg) assert_equal(region2.height, 4.0 * u.deg) assert_equal(region2.angle, 5.0 * u.deg) # box (rectangle) annulus region3_str = 'image\nbox (1, 2, 3, 4, 5, 6, 7)' region3 = Regions.parse(region3_str, format='ds9')[0] assert_equal(region3.center.xy, (0, 1)) assert_equal(region3.inner_width, 3.0) assert_equal(region3.inner_height, 4.0) assert_equal(region3.outer_width, 5.0) assert_equal(region3.outer_height, 6.0) assert_equal(region3.angle, 7.0 * u.deg) # multiple box (rectangle) annuli region4_str = 'image\nbox (1, 2, 3, 4, 5, 6, 7, 8, 9)' region4 = Regions.parse(region4_str, format='ds9') assert len(region4) == 2 assert_equal(region4[0].center.xy, (0, 1)) assert_equal(region4[0].inner_width, 3.0) assert_equal(region4[0].inner_height, 4.0) assert_equal(region4[0].outer_width, 5.0) assert_equal(region4[0].outer_height, 6.0) assert_equal(region4[0].angle, 9.0 * u.deg) assert_equal(region4[1].center.xy, (0, 1)) assert_equal(region4[1].inner_width, 5.0) assert_equal(region4[1].inner_height, 6.0) assert_equal(region4[1].outer_width, 7.0) assert_equal(region4[1].outer_height, 8.0) assert_equal(region4[1].angle, 9.0 * u.deg) def test_invalid_metadata(): # test that invalid ds9 metadata raises warnings regstr = ('# Region file format: DS9 version 4.1\n' 'global color=green dashlist=8 3 width=1 ' 'font="helvetica 10 normal roman" select=1 highlite=1 dash=1 ' 'fixed=0 edit=1 move=1 rotate=1 delete=1 include=1 source=1.1 ' 'background=0 text={hello world} fill=1.8 point=diamond 11.2 ' 'textrotate=1 textangle=34 tag={Tag 1} tag={Tag 2} line=3 1\n' 'image; circle(100.4,47.2,10.9) # color=red\n' 'image; circle(202.4,47.2,10.9) # color=blue point=junk 10\n' 'image; circle(302.4,147.2,10.9) # color=cyan point=invalid\n') with pytest.warns(AstropyUserWarning) as record: regs = Regions.parse(regstr, format='ds9') assert len(record) == 12 assert 'source=1.1' in record[0].message.args[0] assert 'fill=1.8' in record[1].message.args[0] assert 'point=diamond 11.2' in record[2].message.args[0] assert 'line=3 1' in record[3].message.args[0] assert 'point=junk 10' in record[6].message.args[0] assert 'point=invalid' in record[10].message.args[0] assert len(regs) == 3 def test_unsupported_metadata(): regstr = ('image; point(335.5,415.6) # point=diamond 11 color=yellow ' 'width=2 text={example} dash=1 tag={Tag 1} tag={Tag 2}') with pytest.warns(UserWarning) as record: Regions.parse(regstr, format='ds9') assert len(record) == 1 assert 'dashed lines are unsupported' in record[0].message.args[0] def test_text_metadata(): # Regression test for issue #233: make sure that text metadata is # parsed and stored appropriately. region_str = 'image\ncircle(1.5, 2, 2) # text={this_is_text}' regions = Regions.parse(region_str, format='ds9') assert len(regions) == 1 assert regions[0].meta['text'] == 'this_is_text' rstr = 'image; circle(503.6,490.6,31.1) # color=blue text={A, {B}, C}' reg = Regions.parse(rstr, format='ds9')[0] assert reg.meta['text'] == 'A, {B' rstr = 'image; circle(503.6,490.6,31.1) # color=blue text={A, {{B}}, C}' reg = Regions.parse(rstr, format='ds9')[0] assert reg.meta['text'] == 'A, {{B' rstr = "image; circle(503.6,490.6,31.1) # color=blue text='A, 'B', C'" reg = Regions.parse(rstr, format='ds9')[0] assert reg.meta['text'] == 'A, ' rstr = 'image; circle(503.6,490.6,31.1) # color=blue text="A, "B", C"' reg = Regions.parse(rstr, format='ds9')[0] assert reg.meta['text'] == 'A, ' def test_mixed_coord(): with pytest.raises(ValueError): CirclePixelRegion(PixCoord(10, 20), Angle(1, 'arcsec')) def test_unsupported_marker(): """ Test that warning is issued when serializing a valid matplotlib marker, but unsupported by DS9. """ region = PointPixelRegion(PixCoord(2, 2), visual=RegionVisual(marker='Z')) with pytest.warns(AstropyUserWarning): region.serialize(format='ds9') region = PointPixelRegion(PixCoord(2, 2), visual=RegionVisual(marker='$f_{init}$')) with pytest.warns(AstropyUserWarning): region.serialize(format='ds9') def test_serialize_regularpolygon(): region = RegularPolygonPixelRegion(PixCoord(10, 10), 4, 20) poly_region = region.to_polygon() result1 = region.serialize(format='ds9') result2 = poly_region.serialize(format='ds9') assert result1 == result2 def test_serialize_empty_list(): regions = Regions([]) assert regions.serialize(format='ds9') == '' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/ds9/write.py0000644000175100001770000001734514525470416016736 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst import os import warnings from copy import deepcopy from astropy.coordinates import Angle, SkyCoord from astropy.units import Quantity from astropy.utils.exceptions import AstropyUserWarning from regions.core import (CompoundPixelRegion, CompoundSkyRegion, PixCoord, PixelRegion, Region, Regions) from regions.core.registry import RegionsRegistry from regions.io.ds9.core import ds9_frame_map, ds9_shape_templates from regions.io.ds9.meta import _translate_metadata_to_ds9 from regions.shapes import RegularPolygonPixelRegion __all__ = [] @RegionsRegistry.register(Region, 'serialize', 'ds9') @RegionsRegistry.register(Regions, 'serialize', 'ds9') def _serialize_ds9(regions, precision=8): if not regions: return '' region_data = [] for region in regions: if isinstance(region, (CompoundPixelRegion, CompoundSkyRegion)): warnings.warn('Cannot serialize a compound region, skipping', AstropyUserWarning) if isinstance(region, RegularPolygonPixelRegion): region = region.to_polygon() region_data.append(_serialize_region_ds9(region, precision=precision)) # ds9 file header output = '# Region file format: DS9 astropy/regions\n' # extract common region metadata and place in the global metadata all_meta = [] for region in region_data: region_meta = deepcopy(region['meta']) region_meta.pop('tag', None) # "tag" cannot be in global metadata all_meta.append(region_meta) global_meta = dict(set.intersection(*[set(meta_dict.items()) for meta_dict in all_meta])) if global_meta: output += f'global {_make_meta_str(global_meta)}\n' # define region frame and metadata (removing items that are # defined in global metadata) frames = [] metadata = [] for region in region_data: frames.append(region['frame']) meta_tmp = region['meta'] for key in global_meta: meta_tmp.pop(key) metadata.append(meta_tmp) # extract the coordinate frame if it is identical for all regions # TODO: extract common coord frame(s) for block(s) of consecutive regions frames = set(frames) global_frame = None if len(frames) == 1: global_frame = frames.pop() output += f'{global_frame}\n' # add line for each region for region, region_meta in zip(region_data, metadata): if global_frame is None: output += f'{region["frame"]}; ' meta_str = _make_meta_str(region_meta) if meta_str: meta_str = f' # {meta_str}' output += f'{region["region"]}{meta_str}\n' return output @RegionsRegistry.register(Region, 'write', 'ds9') @RegionsRegistry.register(Regions, 'write', 'ds9') def _write_ds9(regions, filename, *, precision=8, overwrite=False): """ Convert a list of `~regions.Region` to a DS9 string and write to a file. Parameters ---------- regions : list A list of `~regions.Region` objects. filename : str The output region filename. precision : int, optional The level of decimal precision given as the number of decimal places. overwrite : bool, optional If `True`, overwrite the output file if it exists. If `False` (default) and the output file exists, an `OSError` is raised. """ if os.path.lexists(filename) and not overwrite: raise OSError(f'{filename} already exists') output = _serialize_ds9(regions, precision=precision) with open(filename, 'w') as fh: fh.write(output) def _get_region_shape(region): shape = region.__class__.__name__.lower().replace('skyregion', '') shape = shape.replace('pixelregion', '') return shape def _get_frame_name(region, mapping): if isinstance(region, PixelRegion): frame = 'image' else: if 'center' in region._params: frame = region.center.frame.name elif 'vertices' in region._params: frame = region.vertices.frame.name elif 'start' in region._params: frame = region.start.frame.name else: raise ValueError(f'Unable to get coordinate frame for {region!r}') if frame not in mapping.keys(): warnings.warn(f'Cannot serialize region with frame={frame}, skipping', AstropyUserWarning) return mapping[frame] def _make_meta_str(meta): metalist = [] for key, val in meta.items(): if key == 'tag': # can have multiple tags; value is always a list metalist.append(' '.join([f'tag={{{val}}}' for val in meta[key]])) else: metalist.append(f'{key}={val}') return ' '.join(metalist) def _get_region_params(region, shape_template, precision=8): ellipse_axes = ('width', 'height', 'inner_width', 'inner_height', 'outer_width', 'outer_height') ellipse_names = ('ellipse', 'ellipseannulus') param = {} for param_name in region._params: if param_name in ('text'): continue value = getattr(region, param_name) # DS9 ellipse parameters are serialized as semi-axis lengths, but # ellipse region is defined by full axis lengths is_ellipse = (shape_template[0] in ellipse_names and param_name in ellipse_axes) if not isinstance(value, (PixCoord, SkyCoord)) and is_ellipse: # deepcopy to prevent changing value in memory value = deepcopy(value) / 2.0 # semi-axis lengths if isinstance(value, PixCoord): # pixels; ds9's origin is (1, 1) if value.isscalar: value = (f'{value.x + 1:0.{precision}f},' f'{value.y + 1:0.{precision}f}') else: value_str = '' for val in value: value_str += (f'{val.x + 1:0.{precision}f},' f'{val.y + 1:0.{precision}f},') value = value_str[:-1] elif isinstance(value, SkyCoord): val = value.to_string(precision=precision) # polygon region has multiple SkyCoord if not value.isscalar: value = ' '.join(val) else: value = val value = value.replace(' ', ',') elif isinstance(value, Angle): value = value.to_string(unit='deg', decimal=True, precision=precision) elif isinstance(value, Quantity): # [:-4] to trim ' deg' from string end value = value.to_string(unit='deg', precision=precision)[:-4] else: value = f'{value:.{precision}f}' param[param_name] = value try: param_str = shape_template[1].format(**param) except KeyError as err: raise ValueError( f'Unable to get shape parameters for {region!r}') from err return param_str def _serialize_region_ds9(region, precision=8): frame_mapping = {v: k for k, v in ds9_frame_map.items()} frame = _get_frame_name(region, mapping=frame_mapping) shape = _get_region_shape(region) if shape not in ds9_shape_templates: warnings.warn(f'Cannot serialize region shape "{shape}", ' 'skipping', AstropyUserWarning) region_params = _get_region_params(region, ds9_shape_templates[shape], precision=precision) region_type = ds9_shape_templates[shape][0] region_str = f'{region_type}({region_params})' region_meta = _translate_metadata_to_ds9(region, shape) return {'frame': frame, 'region': region_str, 'meta': region_meta} ././@PaxHeader0000000000000000000000000000003200000000000010210 xustar0026 mtime=1700163875.52654 regions-0.8/regions/io/fits/0000755000175100001770000000000014525470444015467 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/fits/__init__.py0000644000175100001770000000023714525470416017601 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst """ This subpackage provides tools for reading and writing FITS Region Binary Table files. """ ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/fits/connect.py0000644000175100001770000000255014525470416017473 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst import warnings from astropy.io import fits from regions.core import Region, Regions from regions.core.registry import RegionsRegistry __all__ = [] @RegionsRegistry.register(Region, 'identify', 'fits') @RegionsRegistry.register(Regions, 'identify', 'fits') def is_fits(methodname, filepath): """ Identify a FITS region file. Parameters ---------- methodname : {'read', 'write'} The method name called that needs auto-identification. filepath : str The path to the file. Returns ------- result : bool Returns `True` if the given file is a FITS region file. """ all_exten = ('.fits', '.fit', '.fts', '.fits.gz', '.fit.gz', '.fts.gz') exten = {'read': all_exten, 'write': all_exten[0:3]} if methodname == 'write': return filepath.lower().endswith(exten[methodname]) elif methodname == 'read': if (isinstance(filepath, str) and filepath.lower().endswith(exten[methodname])): return True else: try: with warnings.catch_warnings(): warnings.simplefilter('ignore') with fits.open(filepath): return True except OSError: return False else: return False ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/fits/core.py0000644000175100001770000000261614525470416016775 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst from regions.shapes import (CircleAnnulusPixelRegion, CirclePixelRegion, EllipseAnnulusPixelRegion, EllipsePixelRegion, PointPixelRegion, PolygonPixelRegion, RectanglePixelRegion) __all__ = [] # mappings from FITS shape to region class and column names/indices shape_map = {'point': (PointPixelRegion, ('X0', 'Y0')), 'circle': (CirclePixelRegion, ('X0', 'Y0', 'R0')), 'ellipse': (EllipsePixelRegion, ('X0', 'Y0', 'R0', 'R1', 'ROTANG0')), 'annulus': (CircleAnnulusPixelRegion, ('X0', 'Y0', 'R0', 'R1')), 'elliptannulus': (EllipseAnnulusPixelRegion, ('X0', 'Y0', 'R0', 'R1', 'R2', 'R3', 'ROTANG0')), 'box': (RectanglePixelRegion, ('X0', 'Y0', 'R0', 'R1')), 'rotbox': (RectanglePixelRegion, ('X0', 'Y0', 'R0', 'R1', 'ROTANG0')), 'rectangle': (RectanglePixelRegion, ('X0', 'X1', 'Y0', 'Y1')), 'rotrectangle': (RectanglePixelRegion, ('X0', 'X1', 'Y0', 'Y1', 'ROTANG0')), 'polygon': (PolygonPixelRegion, ('X', 'Y'))} class FITSParserError(Exception): """ A custom exception for FITS parsing errors. """ ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/fits/read.py0000644000175100001770000001301114525470416016747 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst import warnings import astropy.units as u import numpy as np from astropy.io import fits from astropy.table import QTable from astropy.utils.exceptions import AstropyUserWarning from regions.core import PixCoord, RegionMeta, Regions from regions.core.registry import RegionsRegistry from regions.io.fits.core import FITSParserError, shape_map __all__ = [] @RegionsRegistry.register(Regions, 'parse', 'fits') def _parse_fits(region_table): """ Parse a FITS region table. Parameters ---------- region_table : `~astropy.table.Table` The table contents of a FITS region file. Returns ------- regions : `regions.Regions` A `Regions` object containing a list of `~regions.Region` objects. """ regions = parse_table(region_table) return Regions(regions) @RegionsRegistry.register(Regions, 'read', 'fits') def _read_fits(filename, cache=False): """ Read a FITS region file, converting a FITS regions table to a list of `~regions.Region` objects. Parameters ---------- filename : str The FITS region filename. The first "REGION" FITS extension will be used. cache : bool or 'update', optional Whether to cache the contents of remote URLs. If 'update', check the remote URL for a new version but store the result in the cache. Returns ------- regions : list A list of `~regions.Region` objects. """ with fits.open(filename, cache=cache) as hdul: for hdu in hdul: # use the first 'REGION' HDU if hdu.name == 'REGION': region_table = QTable.read(hdu) regions = _parse_fits(region_table) return regions raise FITSParserError('An extension with name (EXTNAME) "REGION" ' 'was not found') def get_shape(region_row): include = 1 shape_key = 'SHAPE' if shape_key not in region_row.colnames: shape = 'point' return shape, include shape = region_row[shape_key].lower() if shape[0] == '!': include = 0 shape = shape[1:] supported_shapes = list(shape_map.keys()) unsupported_shapes = ['pie', 'sector', 'diamond', 'rhombus', 'rotdiamond', 'rotrhombus'] valid_shapes = supported_shapes + unsupported_shapes if shape not in valid_shapes: raise FITSParserError(f'{shape!r} is not a valid FITS region shape') if shape not in supported_shapes: warnings.warn(f'{shape!r} is not supported by the regions package, ' 'skipping.', AstropyUserWarning) shape = None return shape, include def get_column_values(region_row, colname): index = None if colname[-1].isdigit(): index = int(colname[-1]) colname = colname[:-1] value = np.atleast_1d(region_row[colname]) if isinstance(value, u.Quantity) and value.unit == u.pixel: value = value.value # remove pixel units if index is None: # polygon uses all values return value try: return value[index] except IndexError: raise FITSParserError(f'The {colname!r} column must have more ' f'than {index!r} values for the region.') def get_shape_params(shape, region_row, shape_columns): values = [] for column in shape_columns: values.append(get_column_values(region_row, column)) if 'rectangle' in shape: (xmin, xmax, ymin, ymax) = values[0:4] xcenter = 0.5 * (xmin + xmax) ycenter = 0.5 * (ymin + ymax) xsize = xmax - xmin ysize = ymax - ymin shape_params = [PixCoord(xcenter, ycenter), xsize, ysize] if shape == 'rotrectangle': shape_params.append(values[-1]) # angle return shape_params # center (or polygon) coordinates for all other regions shape_params = [PixCoord(values[0], values[1])] # shape params if shape == 'ellipse': # FITS uses semi-axis lengths; # the last value is always the rotation angle values[2:-1] = list(np.array(values[2:-1]) * 2.) shape_params.extend(values[2:]) return shape_params def parse_row(region_row): shape, include = get_shape(region_row) if shape is None: return None region_cls, shape_columns = shape_map[shape] for column in shape_columns: if column[-1].isdigit(): column = column[:-1] if column not in region_row.colnames: warnings.warn(f'Table columns are missing for {shape!r} shape, ' 'skipping.', AstropyUserWarning) return None shape_params = get_shape_params(shape, region_row, shape_columns) region = region_cls(*shape_params) meta = {} if include == 0: meta = {'include': include} region.meta = RegionMeta(meta) shape_key = 'COMPONENT' if shape_key in region_row.colnames: component = int(region_row[shape_key]) meta = {'component': component} if meta: region.meta = RegionMeta(meta) return region def parse_table(region_table): valid_columns = ('X', 'Y', 'SHAPE', 'R', 'ROTANG', 'COMPONENT') for column in region_table.colnames: if column not in valid_columns: raise FITSParserError(f'{column!r} is not a valid column name') regions = [] for row in region_table: region = parse_row(row) if region is not None: regions.append(region) return regions ././@PaxHeader0000000000000000000000000000003200000000000010210 xustar0026 mtime=1700163875.53054 regions-0.8/regions/io/fits/tests/0000755000175100001770000000000014525470444016631 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/fits/tests/__init__.py0000644000175100001770000000000014525470416020727 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000003200000000000010210 xustar0026 mtime=1700163875.53054 regions-0.8/regions/io/fits/tests/data/0000755000175100001770000000000014525470444017542 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/fits/tests/data/regions_nowcs.fits0000644000175100001770000002640014525470416023311 0ustar00runnerdockerSIMPLE = T / conforms to FITS standard BITPIX = 8 / array data type NAXIS = 0 / number of array dimensions EXTEND = T END XTENSION= 'BINTABLE' / binary table extension BITPIX = 8 / array data type NAXIS = 2 / number of array dimensions NAXIS1 = 149 / length of dimension 1 NAXIS2 = 11 / length of dimension 2 PCOUNT = 0 / number of group parameters GCOUNT = 1 / number of groups TFIELDS = 5 / number of table fields EXTNAME = 'REGION ' EXTVER = 1 EXTLEVEL= 1 HDUNAME = 'REGION ' HDUCLASS= 'ASC ' HDUCLAS1= 'REGION ' HDUCLAS2= 'STANDARD' HDUVERS = '1.2.0 ' HDUDOC = 'ASC-FITS-REGION-1.2: Rots, McDowell: FITS REGION Binary Table Design'CONTENT = 'REGION ' ORIGIN = 'astropy/regions' TTYPE1 = 'SHAPE ' TFORM1 = '13A ' TTYPE2 = 'X ' TFORM2 = '6D ' TUNIT2 = 'pix ' TDIM2 = '(6) ' TTYPE3 = 'Y ' TFORM3 = '6D ' TUNIT3 = 'pix ' TDIM3 = '(6) ' TTYPE4 = 'R ' TFORM4 = '4D ' TUNIT4 = 'pix ' TDIM4 = '(4) ' TTYPE5 = 'ROTANG ' TFORM5 = 'D ' TUNIT5 = 'deg ' END circle@n@‡`ĖĖĖĖÍ@O™™™™špoint@XĀ@ˆøellipse@‚rfffff@‡C33333@B@@Rffffff@.333333annulus@yË33333@‡}™™™™š@5æfffff@OLĖĖĖĖÍelliptannulus@‡k33333@†čĖĖĖĖÍ@Eŗ33333@UĀ@Z™™™™š@j™™™™š@u–fffffbox@cĖĖĖĖĖÍ@ @b™™™™™š@R™™™™™šrotbox@yķ33333@~äĖĖĖĖÍ@b™™™™™š@R™™™™™š@Cķ33333rectangle@Vffffff@mĖĖĖĖĖÍ@lLĖĖĖĖÎ@rĖĖĖĖĖÍrotrectangle@w(@€:fffff@mvfffff@sa™™™™™@=æfffffpolygon@„ @…Đ@‡Ŧ@‡Ŧ@…Ūfffff@„ @sģ33333@vK33333@s€@m<ĖĖĖĖÍ@hĐ@n)™™™™š!circle@n@‡`ĖĖĖĖÍ@O™™™™š././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/fits/tests/data/regions_wcs.fits0000644000175100001770000002640014525470416022754 0ustar00runnerdockerSIMPLE = T / conforms to FITS standard BITPIX = 8 / array data type NAXIS = 0 / number of array dimensions EXTEND = T END XTENSION= 'BINTABLE' / binary table extension BITPIX = 8 / array data type NAXIS = 2 / number of array dimensions NAXIS1 = 119 / length of dimension 1 NAXIS2 = 9 / length of dimension 2 PCOUNT = 0 / number of group parameters GCOUNT = 1 / number of groups TFIELDS = 6 / number of table fields EXTNAME = 'REGION ' EXTVER = 1 EXTLEVEL= 1 HDUNAME = 'REGION ' HDUCLASS= 'ASC ' HDUCLAS1= 'REGION ' HDUCLAS2= 'STANDARD' HDUVERS = '1.2.0 ' HDUDOC = 'ASC-FITS-REGION-1.2: Rots, McDowell: FITS REGION Binary Table Design'CONTENT = 'REGION ' TELESCOP= 'CHANDRA ' DATAMODE= 'FAINT ' INSTRUME= 'ACIS ' OBJECT = 'M101 ' ONTIME = 99514.55727793276 DEADC = 0.98733741 DEADAPP = F EXPOSURE= 98254.44528487051 LIVETIME= 98254.44528487051 MJDREF = 50814.0 TIMEREF = 'LOCAL ' USER = 'pence ' FILIN001= 'acisf00934N002_evt2.fits' CREATOR = 'extractor v4.84' DATE = '2008-06-20T16:49:07' ORIGIN = 'NASA/GSFC' MTYPE1 = 'sky ' MFORM1 = 'x,y ' MTYPE2 = 'EQPOS ' MFORM2 = 'RA,DEC ' TCTYP1 = 'RA---TAN' TCRPX1 = 4096.5 TDRPX1 = 4096.5 TCRVL1 = 210.7801525309 TCDLT1 = -0.00013666666666667 TDDLT1 = -0.00013666666666667 TCTYP2 = 'DEC--TAN' TCRPX2 = 4096.5 TDRPX2 = 4096.5 TCRVL2 = 54.366791304488 TCDLT2 = 0.00013666666666667 TDDLT2 = 0.00013666666666667 TCROT2 = 0.0 CHECKSUM= 'ZmaGdkTDZkYDdkYD' DATASUM = '3203022982' TTYPE1 = 'X ' TFORM1 = '4D ' TUNIT1 = 'pix ' TTYPE2 = 'Y ' TFORM2 = '4D ' TUNIT2 = 'pix ' TTYPE3 = 'SHAPE ' TFORM3 = '7A ' TTYPE4 = 'R ' TFORM4 = '4D ' TUNIT4 = 'pix ' TTYPE5 = 'ROTANG ' TFORM5 = 'D ' TUNIT5 = 'deg ' TTYPE6 = 'COMPONENT' TFORM6 = 'K ' DATEREF = '1998-01-01' END @ĻĄ@ŗĀ€circle@wߋŦq ŗ@´ĸ Ųbˇ@˛ö‘ä÷eūROTBOX@”]Öģ˜Įã@„xÁŨ!ę@ 0 tempfile = tmpdir.join('tmp.fits').strpath regions.write(tempfile, format='fits', overwrite=True) regions2 = Regions.read(tempfile, format='fits') for reg1, reg2 in zip(regions, regions2): assert_region_allclose(reg1, reg2) def test_only_pixel_regions(): reg_sky = CircleSkyRegion(SkyCoord(1, 2, unit='deg'), 5 * u.deg) reg = Regions([reg_sky]) match = 'Sky regions cannot be serialized' with pytest.warns(AstropyUserWarning, match=match): result = reg.serialize(format='fits') assert len(result) == 0 reg_pix = CirclePixelRegion(PixCoord(10, 10), 5) reg = Regions([reg_sky, reg_pix]) match = 'Sky regions cannot be serialized' with pytest.warns(AstropyUserWarning, match=match): result = reg.serialize(format='fits') assert len(result) == 1 def test_valid_columns(): t = QTable([[1, 2, 3]], names=('a')) with pytest.raises(FITSParserError) as excinfo: Regions.parse(t, format='fits') estr = "'a' is not a valid column name" assert estr in str(excinfo.value) def test_invalid_regions(): center = PixCoord(42, 43) region1 = RectangleAnnulusPixelRegion(center, 4.2, 5.2, 7.2, 8.2, angle=15 * u.deg) region2 = LinePixelRegion(start=center, end=PixCoord(x=52, y=53)) region3 = TextPixelRegion(center, text='Example Text') regions = (region1, region2, region3) match = 'cannot be serialized using the FITS format' for reg in regions: with pytest.warns(AstropyUserWarning, match=match): _ = reg.serialize(format='fits') def test_valid_row(): x = [1] * u.pix y = [2] * u.pix shapes = ['CIRCLE'] tbl = QTable([x, y, shapes], names=('X', 'Y', 'SHAPE')) match = 'Table columns are missing' with pytest.warns(AstropyUserWarning, match=match): Regions.parse(tbl, format='fits') # test invalid shape shapes = ['INVALID'] tbl2 = QTable([x, y, shapes], names=('X', 'Y', 'SHAPE')) with pytest.raises(FITSParserError) as excinfo: Regions.parse(tbl2, format='fits') estr = "'invalid' is not a valid FITS region shape" assert estr in str(excinfo.value) shapes = ['PIE'] rotang = [[20, 30]] * u.deg tbl3 = QTable([x, y, shapes, rotang], names=('X', 'Y', 'SHAPE', 'ROTANG')) match = "'pie' is not supported" with pytest.warns(AstropyUserWarning, match=match): Regions.parse(tbl3, format='fits') def test_components(): center = PixCoord(10, 10) regions = Regions((CirclePixelRegion(center, 3), CirclePixelRegion(center, 5), CirclePixelRegion(center, 7), CirclePixelRegion(center, 9))) tbl1 = regions.serialize(format='fits') assert 'COMPONENT' not in tbl1.colnames components = [None, None, None, None] for region, component in zip(regions, components): region.meta = RegionMeta({'component': component}) tbl2 = regions.serialize(format='fits') assert 'COMPONENT' not in tbl2.colnames components = np.arange(4) for region, component in zip(regions, components): region.meta = RegionMeta({'component': component}) tbl3 = regions.serialize(format='fits') assert 'COMPONENT' in tbl3.colnames assert_equal(tbl3['COMPONENT'], components) components = [1, 2, None, 4] for region, component in zip(regions, components): region.meta = RegionMeta({'component': component}) tbl4 = regions.serialize(format='fits') assert 'COMPONENT' in tbl4.colnames assert_equal(tbl4['COMPONENT'], [1, 2, 5, 4]) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/io/fits/write.py0000644000175100001770000001366514525470416017205 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst import warnings from dataclasses import dataclass import astropy.units as u import numpy as np from astropy.io import fits from astropy.table import QTable from astropy.utils.exceptions import AstropyUserWarning from regions.core import Region, Regions, SkyRegion from regions.core.registry import RegionsRegistry from regions.shapes import RegularPolygonPixelRegion __all__ = [] @RegionsRegistry.register(Region, 'serialize', 'fits') @RegionsRegistry.register(Regions, 'serialize', 'fits') def _serialize_fits(regions): region_data = [] for region in regions: if isinstance(region, SkyRegion): warnings.warn('Sky regions cannot be serialized to the FITS ' 'region format, skipping.', AstropyUserWarning) continue regdata = _serialize_region_fits(region) if regdata is not None: region_data.append(regdata) if region_data: fits_table = _make_table(region_data) return fits_table return QTable() @RegionsRegistry.register(Region, 'write', 'fits') @RegionsRegistry.register(Regions, 'write', 'fits') def _write_fits(regions, filename, header=None, overwrite=False): """ Convert a list of `~regions.Region` to a FITS region table and write to a file. Parameters ---------- regions : list A list of `~regions.Region` objects. filename : str The filename in which the table is to be written. header : `~astropy.io.fits.Header`, optional The FITS header. overwrite : bool, optional If True, overwrite the output file if it exists. Raises an `OSError` if False and the output file exists. Default is False. """ output = _serialize_fits(regions) if header is None: hdudoc = ('ASC-FITS-REGION-1.2: Rots, McDowell: FITS REGION ' 'Binary Table Design') header = dict([('EXTNAME', 'REGION'), ('EXTVER', 1), ('EXTLEVEL', 1), ('HDUNAME', 'REGION'), ('HDUCLASS', 'ASC'), ('HDUCLAS1', 'REGION'), ('HDUCLAS2', 'STANDARD'), ('HDUVERS', '1.2.0'), ('HDUDOC', hdudoc), ('CONTENT', 'REGION'), ('ORIGIN', 'astropy/regions')]) bin_table = fits.BinTableHDU(data=output, header=header) bin_table.writeto(filename, overwrite=overwrite) @dataclass class _RegionData: """ Class to hold region data. """ shape: str x: np.ndarray y: np.ndarray r: np.ndarray rotang: np.ndarray component: int def _serialize_region_fits(region): if isinstance(region, RegularPolygonPixelRegion): region = region.to_polygon() region_clsname = region.__class__.__name__ unsupported_regions = ('RectangleAnnulusPixelRegion', 'LinePixelRegion', 'TextPixelRegion', 'CompoundPixelRegion') if region_clsname in unsupported_regions: warnings.warn(f'({region_clsname} cannot be serialized using the ' 'FITS format, skipping.', AstropyUserWarning) return None # translate region class to FITS shape name shape = region_clsname.lower().replace('pixelregion', '') if region.meta.get('include', None) == 0: shape = f'!{shape}' region_map = {'circleannulus': 'annulus', 'ellipseannulus': 'elliptannulus', 'rectangle': 'rotbox'} if shape in region_map: shape = region_map[shape] shape_params = [] rotang = None for param in region._params: value = getattr(region, param) if param in ('center', 'vertices'): x, y = value.xy elif param == 'angle': rotang = value else: # ellipse region is defined by full axis lengths, but # FITS regions file uses semi-axis lengths if shape == 'ellipse': value /= 2.0 shape_params.append(value) if not shape_params: shape_params = 0 if rotang is None: rotang = u.Quantity(0, 'deg') component = region.meta.get('component', None) return _RegionData(shape, np.atleast_1d(x), np.atleast_1d(y), np.atleast_1d(shape_params), np.atleast_1d(rotang), component) def _make_column(arrays): arr_sizes = [arr.size for arr in arrays] arr_size = np.max(arr_sizes) data = [] for (arr, size) in zip(arrays, arr_sizes): pad_width = arr_size - size if pad_width != 0: arr = np.pad(arr, (0, pad_width), mode='constant') if not isinstance(arr[0], u.Quantity): arr <<= u.pix if arr_size == 1 and pad_width == 0: arr = arr[0] # use scalars instead of len-1 arrays data.append(arr) data = u.Quantity(data) return data def _define_components(region_data): components = np.array([regdata.component for regdata in region_data]) none_idx = [i for i, item in enumerate(components) if item is None] if not none_idx: return components comps = [i for i in components if i is not None] if comps: start_component = np.max(comps) + 1 components[none_idx] = np.arange(len(none_idx)) + start_component else: # all components are set to None - do not write a COMPONENT # column components = None return components def _make_table(region_data): tbl = QTable() attrs = ('shape', 'x', 'y', 'r', 'rotang') for attr in attrs: arrays = [getattr(data, attr) for data in region_data] if attr not in ('shape',): arrays = _make_column(arrays) tbl[attr.upper()] = arrays components = _define_components(region_data) if components is not None: tbl['COMPONENT'] = components return tbl ././@PaxHeader0000000000000000000000000000003200000000000010210 xustar0026 mtime=1700163875.53054 regions-0.8/regions/shapes/0000755000175100001770000000000014525470444015376 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/shapes/__init__.py0000644000175100001770000000070114525470416017504 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst """ This subpackage defines region shapes. """ from .annulus import * # noqa: F401, F403 from .circle import * # noqa: F401, F403 from .ellipse import * # noqa: F401, F403 from .line import * # noqa: F401, F403 from .point import * # noqa: F401, F403 from .polygon import * # noqa: F401, F403 from .rectangle import * # noqa: F401, F403 from .text import * # noqa: F401, F403 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/shapes/annulus.py0000644000175100001770000006437114525470416017447 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst """ This module defines annulus regions in both pixel and sky coordinates. """ import abc import operator import astropy.units as u from regions._utils.wcs_helpers import pixel_scale_angle_at_skycoord from regions.core.attributes import (PositiveScalar, PositiveScalarAngle, RegionMetaDescr, RegionVisualDescr, ScalarAngle, ScalarPixCoord, ScalarSkyCoord) from regions.core.compound import CompoundPixelRegion from regions.core.core import PixelRegion, SkyRegion from regions.core.metadata import RegionMeta, RegionVisual from regions.core.pixcoord import PixCoord from regions.shapes.circle import CirclePixelRegion from regions.shapes.ellipse import EllipsePixelRegion, EllipseSkyRegion from regions.shapes.rectangle import RectanglePixelRegion, RectangleSkyRegion __all__ = ['AnnulusPixelRegion', 'AsymmetricAnnulusPixelRegion', 'AsymmetricAnnulusSkyRegion', 'CircleAnnulusPixelRegion', 'CircleAnnulusSkyRegion', 'EllipseAnnulusPixelRegion', 'EllipseAnnulusSkyRegion', 'RectangleAnnulusPixelRegion', 'RectangleAnnulusSkyRegion'] class AnnulusPixelRegion(PixelRegion, abc.ABC): """ A base class for annulus pixel regions. """ @property def _compound_region(self): return CompoundPixelRegion(self._inner_region, self._outer_region, operator.xor, self.meta, self.visual) @property def area(self): return self._outer_region.area - self._inner_region.area @property def bounding_box(self): return self._outer_region.bounding_box def contains(self, pixcoord): return self._compound_region.contains(pixcoord) def as_artist(self, origin=(0, 0), **kwargs): return self._compound_region.as_artist(origin, **kwargs) def to_mask(self, mode='center', subpixels=5): return self._compound_region.to_mask(mode, subpixels) def rotate(self, center, angle): """ Rotate the region. Positive ``angle`` corresponds to counter-clockwise rotation. Parameters ---------- center : `~regions.PixCoord` The rotation center point. angle : `~astropy.coordinates.Angle` The rotation angle. Returns ------- region : `~regions.AnnulusPixelRegion` The rotated region (which is an independent copy). """ changes = {} changes['center'] = self.center.rotate(center, angle) if hasattr(self, 'angle'): changes['angle'] = self.angle + angle return self.copy(**changes) class CircleAnnulusPixelRegion(AnnulusPixelRegion): """ A circular annulus in pixel coordinates. Parameters ---------- center : `~regions.PixCoord` The position of the center of the annulus. inner_radius : float The inner radius of the annulus in pixels. outer_radius : float The outer radius of the annulus in pixels. meta : `~regions.RegionMeta` or `dict`, optional A dictionary that stores the meta attributes of the region. visual : `~regions.RegionVisual` or `dict`, optional A dictionary that stores the visual meta attributes of the region. Examples -------- .. plot:: :include-source: from regions import PixCoord, CircleAnnulusPixelRegion import matplotlib.pyplot as plt fig, ax = plt.subplots(1, 1) reg = CircleAnnulusPixelRegion(PixCoord(x=6, y=6), inner_radius=5.5, outer_radius=8.0) patch = reg.plot(ax=ax, facecolor='none', edgecolor='red', lw=2, label='Circle Annulus') ax.legend(handles=(patch,), loc='upper center') ax.set_xlim(-5, 20) ax.set_ylim(-5, 20) ax.set_aspect('equal') """ _component_class = CirclePixelRegion _params = ('center', 'inner_radius', 'outer_radius') center = ScalarPixCoord('The center pixel position as a |PixCoord|.') inner_radius = PositiveScalar('The inner radius in pixels as a float.') outer_radius = PositiveScalar('The outer radius in pixels as a float.') meta = RegionMetaDescr('The meta attributes as a |RegionMeta|') visual = RegionVisualDescr('The visual attributes as a |RegionVisual|.') def __init__(self, center, inner_radius, outer_radius, meta=None, visual=None): self.center = center self.inner_radius = inner_radius self.outer_radius = outer_radius self.meta = meta or RegionMeta() self.visual = visual or RegionVisual() if inner_radius >= outer_radius: raise ValueError('outer_radius must be greater than inner_radius') @property def _inner_region(self): return self._component_class(self.center, self.inner_radius, self.meta, self.visual) @property def _outer_region(self): return self._component_class(self.center, self.outer_radius, self.meta, self.visual) def to_sky(self, wcs): center = wcs.pixel_to_world(self.center.x, self.center.y) _, pixscale, _ = pixel_scale_angle_at_skycoord(center, wcs) inner_radius = self.inner_radius * u.pix * pixscale outer_radius = self.outer_radius * u.pix * pixscale return CircleAnnulusSkyRegion(center, inner_radius, outer_radius, self.meta.copy(), self.visual.copy()) class CircleAnnulusSkyRegion(SkyRegion): """ A circular annulus in sky coordinates. Parameters ---------- center : `~astropy.coordinates.SkyCoord` The position of the center of the annulus. inner_radius : `~astropy.units.Quantity` The inner radius of the annulus in angular units. outer_radius : `~astropy.units.Quantity` The outer radius of the annulus in angular units. meta : `~regions.RegionMeta` or `dict`, optional A dictionary that stores the meta attributes of the region. visual : `~regions.RegionVisual` or `dict`, optional A dictionary that stores the visual meta attributes of the region. """ _params = ('center', 'inner_radius', 'outer_radius') center = ScalarSkyCoord('The center position as a |SkyCoord|.') inner_radius = PositiveScalarAngle('The inner radius as a |Quantity| ' 'angle.') outer_radius = PositiveScalarAngle('The outer radius as a |Quantity| ' 'angle.') meta = RegionMetaDescr('The meta attributes as a |RegionMeta|') visual = RegionVisualDescr('The visual attributes as a |RegionVisual|.') def __init__(self, center, inner_radius, outer_radius, meta=None, visual=None): self.center = center self.inner_radius = inner_radius self.outer_radius = outer_radius self.meta = meta or RegionMeta() self.visual = visual or RegionVisual() if inner_radius >= outer_radius: raise ValueError('outer_radius must be greater than inner_radius') def to_pixel(self, wcs): center, pixscale, _ = pixel_scale_angle_at_skycoord(self.center, wcs) inner_radius = (self.inner_radius / pixscale).to(u.pix).value outer_radius = (self.outer_radius / pixscale).to(u.pix).value return CircleAnnulusPixelRegion(center, inner_radius, outer_radius, meta=self.meta.copy(), visual=self.visual.copy()) class AsymmetricAnnulusPixelRegion(AnnulusPixelRegion): """ Helper class for asymmetric annuli sky regions. Used for ellipse and rectangle pixel annulus regions. Parameters ---------- center : `~regions.PixCoord` The position of the center of the annulus. center : `~regions.PixCoord` The position of the center of the annulus. inner_width : float The inner width of the annulus (before rotation) in pixels. outer_width : float The outer width of the annulus (before rotation) in pixels. inner_height : float The inner height of the annulus (before rotation) in pixels. outer_height : float The outer height of the annulus (before rotation) in pixels. angle : `~astropy.units.Quantity`, optional The rotation angle of the annulus, measured anti-clockwise. If set to zero (the default), the width axis is lined up with the x axis. """ _params = ('center', 'inner_width', 'outer_width', 'inner_height', 'outer_height', 'angle') center = ScalarPixCoord('The center pixel position as a |PixCoord|.') inner_width = PositiveScalar('The inner width (before rotation) in ' 'pixels as a float.') outer_width = PositiveScalar('The outer width (before rotation) in ' 'pixels as a float.') inner_height = PositiveScalar('The inner height (before rotation) in ' 'pixels as a float.') outer_height = PositiveScalar('The outer height (before rotation) in ' 'pixels as a float.') angle = ScalarAngle('The rotation angle measured anti-clockwise as a ' '|Quantity| angle.') meta = RegionMetaDescr('The meta attributes as a |RegionMeta|') visual = RegionVisualDescr('The visual attributes as a |RegionVisual|.') def __init__(self, center, inner_width, outer_width, inner_height, outer_height, angle=0 * u.deg, meta=None, visual=None): self.center = center self.inner_width = inner_width self.outer_width = outer_width self.inner_height = inner_height self.outer_height = outer_height self.angle = angle self.meta = meta or RegionMeta() self.visual = visual or RegionVisual() if inner_width >= outer_width: raise ValueError('outer_width must be greater than inner_width') if inner_height >= outer_height: raise ValueError('outer_height must be greater than inner_height') @property def _inner_region(self): return self._component_class(self.center, self.inner_width, self.inner_height, self.angle, self.meta, self.visual) @property def _outer_region(self): return self._component_class(self.center, self.outer_width, self.outer_height, self.angle, self.meta, self.visual) def to_sky_args(self, wcs): center = wcs.pixel_to_world(self.center.x, self.center.y) _, pixscale, north_angle = pixel_scale_angle_at_skycoord(center, wcs) inner_width = (self.inner_width * u.pix * pixscale).to(u.arcsec) outer_width = (self.outer_width * u.pix * pixscale).to(u.arcsec) inner_height = (self.inner_height * u.pix * pixscale).to(u.arcsec) outer_height = (self.outer_height * u.pix * pixscale).to(u.arcsec) # region sky angles are defined relative to the WCS longitude axis; # photutils aperture sky angles are defined as the PA of the # semimajor axis (i.e., relative to the WCS latitude axis) angle = self.angle - (north_angle - 90 * u.deg) return (center, inner_width, outer_width, inner_height, outer_height, angle) class AsymmetricAnnulusSkyRegion(SkyRegion): """ Helper class for asymmetric annuli sky regions. Used for ellipse and rectangle sky annulus regions. Parameters ---------- center : `~astropy.coordinates.SkyCoord` The position of the center of the annulus. inner_width : `~astropy.units.Quantity` The inner width of the annulus (before rotation) as an angle. outer_width : `~astropy.units.Quantity` The outer width of the annulus (before rotation) as an angle. inner_height : `~astropy.units.Quantity` The inner height of the annulus (before rotation) as an angle. outer_height : `~astropy.units.Quantity` The outer height of the annulus (before rotation) as an angle. angle : `~astropy.units.Quantity`, optional The rotation angle of the annulus, measured anti-clockwise. If set to zero (the default), the width axis is lined up with the longitude axis of the celestial coordinates meta : `~regions.RegionMeta` or `dict`, optional A dictionary that stores the meta attributes of the region. visual : `~regions.RegionVisual` or `dict`, optional A dictionary that stores the visual meta attributes of the region. """ _params = ('center', 'inner_width', 'outer_width', 'inner_height', 'outer_height', 'angle') center = ScalarSkyCoord('The center position as a |SkyCoord|.') inner_width = PositiveScalarAngle('The inner width (before rotation) as ' 'a |Quantity| angle.') outer_width = PositiveScalarAngle('The outer width (before rotation) as ' 'a |Quantity| angle.') inner_height = PositiveScalarAngle('The inner height (before rotation) ' 'as a |Quantity| angle.') outer_height = PositiveScalarAngle('The outer height (before rotation) ' 'as a |Quantity| angle.') angle = ScalarAngle('The rotation angle measured anti-clockwise as a' '|Quantity| angle.') meta = RegionMetaDescr('The meta attributes as a |RegionMeta|') visual = RegionVisualDescr('The visual attributes as a |RegionVisual|.') def __init__(self, center, inner_width, outer_width, inner_height, outer_height, angle=0 * u.deg, meta=None, visual=None): self.center = center self.inner_width = inner_width self.outer_width = outer_width self.inner_height = inner_height self.outer_height = outer_height self.angle = angle self.meta = meta or RegionMeta() self.visual = visual or RegionVisual() if inner_width >= outer_width: raise ValueError('outer_width must be greater than inner_width') if inner_height >= outer_height: raise ValueError('outer_height must be greater than inner_height') def to_pixel_args(self, wcs): center, pixscale, north_angle = pixel_scale_angle_at_skycoord( self.center, wcs) center = PixCoord(center.x, center.y) inner_width = (self.inner_width / pixscale).to(u.pix).value outer_width = (self.outer_width / pixscale).to(u.pix).value inner_height = (self.inner_height / pixscale).to(u.pix).value outer_height = (self.outer_height / pixscale).to(u.pix).value # region sky angles are defined relative to the WCS longitude axis; # photutils aperture sky angles are defined as the PA of the # semimajor axis (i.e., relative to the WCS latitude axis) angle = self.angle + (north_angle - 90 * u.deg) return (center, inner_width, outer_width, inner_height, outer_height, angle) class EllipseAnnulusPixelRegion(AsymmetricAnnulusPixelRegion): """ A elliptical annulus in pixel coordinates. Parameters ---------- center : `~regions.PixCoord` The position of the center of the elliptical annulus. inner_width : float The inner width of the elliptical annulus (before rotation) in pixels. outer_width : float The outer width of the elliptical annulus (before rotation) in pixels. inner_height : float The inner height of the elliptical annulus (before rotation) in pixels. outer_height : float The outer height of the elliptical annulus (before rotation) in pixels. angle : `~astropy.units.Quantity`, optional The rotation angle of the elliptical annulus, measured anti-clockwise. If set to zero (the default), the width axis is lined up with the x axis. meta : `~regions.RegionMeta` or `dict`, optional A dictionary that stores the meta attributes of the region. visual : `~regions.RegionVisual` or `dict`, optional A dictionary that stores the visual meta attributes of the region. Examples -------- .. plot:: :include-source: from astropy.coordinates import Angle from regions import PixCoord, EllipseAnnulusPixelRegion import matplotlib.pyplot as plt fig, ax = plt.subplots(1, 1) reg = EllipseAnnulusPixelRegion(PixCoord(6, 6), inner_width=5.5, outer_width=8.5, inner_height=3.5, outer_height=6.5, angle=Angle('45deg')) patch = reg.plot(ax=ax, facecolor='none', edgecolor='red', lw=2, label='Ellipse Annulus') ax.legend(handles=(patch,), loc='upper center') ax.set_xlim(-5, 20) ax.set_ylim(-5, 20) ax.set_aspect('equal') """ # duplicated from AsymmetricAnnulusPixelRegion because otherwise Sphinx # ignores the docstrings in the parent class center = ScalarPixCoord('The center pixel position as a |PixCoord|.') inner_width = PositiveScalar('The inner width (before rotation) in ' 'pixels as a float.') outer_width = PositiveScalar('The outer width (before rotation) in ' 'pixels as a float.') inner_height = PositiveScalar('The inner height (before rotation) in ' 'pixels as a float.') outer_height = PositiveScalar('The outer height (before rotation) in ' 'pixels as a float.') angle = ScalarAngle('The rotation angle measured anti-clockwise as a ' '|Quantity| angle.') _component_class = EllipsePixelRegion def to_sky(self, wcs): return EllipseAnnulusSkyRegion(*self.to_sky_args(wcs), meta=self.meta.copy(), visual=self.visual.copy()) class EllipseAnnulusSkyRegion(AsymmetricAnnulusSkyRegion): """ A elliptical annulus in `~astropy.coordinates.SkyCoord` coordinates. Parameters ---------- center : `~astropy.coordinates.SkyCoord` The position of the center of the elliptical annulus. inner_width : `~astropy.units.Quantity` The inner width of the elliptical annulus (before rotation) as an angle. outer_width : `~astropy.units.Quantity` The outer width of the elliptical annulus (before rotation) as an angle. inner_height : `~astropy.units.Quantity` The inner height of the elliptical annulus (before rotation) as an angle. outer_height : `~astropy.units.Quantity` The outer height of the elliptical annulus (before rotation) as an angle. angle : `~astropy.units.Quantity`, optional The rotation angle of the elliptical annulus, measured anti-clockwise. If set to zero (the default), the width axis is lined up with the longitude axis of the celestial coordinates meta : `~regions.RegionMeta` or `dict`, optional A dictionary that stores the meta attributes of the region. visual : `~regions.RegionVisual` or `dict`, optional A dictionary that stores the visual meta attributes of the region. """ # duplicated from AsymmetricAnnulusSkyRegion because otherwise Sphinx # ignores the docstrings in the parent class center = ScalarSkyCoord('The center position as a |SkyCoord|.') inner_width = PositiveScalarAngle('The inner width (before rotation) as ' 'a |Quantity| angle.') outer_width = PositiveScalarAngle('The outer width (before rotation) as ' 'a |Quantity| angle.') inner_height = PositiveScalarAngle('The inner height (before rotation) ' 'as a |Quantity| angle.') outer_height = PositiveScalarAngle('The outer height (before rotation) ' 'as a |Quantity| angle.') angle = ScalarAngle('The rotation angle measured anti-clockwise as a ' '|Quantity| angle.') _component_class = EllipseSkyRegion def to_pixel(self, wcs): return EllipseAnnulusPixelRegion(*self.to_pixel_args(wcs), meta=self.meta.copy(), visual=self.visual.copy()) class RectangleAnnulusPixelRegion(AsymmetricAnnulusPixelRegion): """ A rectangular annulus in pixel coordinates. Parameters ---------- center : `~regions.PixCoord` The position of the center of the rectangular annulus. inner_width : float The inner width of the rectangular annulus (before rotation) in pixels. outer_width : float The outer width of the rectangular annulus (before rotation) in pixels. inner_height : float The inner height of the rectangular annulus (before rotation) in pixels. outer_height : float The outer height of the rectangular annulus (before rotation) in pixels. angle : `~astropy.units.Quantity`, optional The rotation angle of the rectangular annulus, measured anti-clockwise. If set to zero (the default), the width axis is lined up with the x axis. meta : `~regions.RegionMeta` or `dict`, optional A dictionary that stores the meta attributes of the region. visual : `~regions.RegionVisual` or `dict`, optional A dictionary that stores the visual meta attributes of the region. Examples -------- .. plot:: :include-source: from astropy.coordinates import Angle from regions import PixCoord, RectangleAnnulusPixelRegion import matplotlib.pyplot as plt fig, ax = plt.subplots(1, 1) reg = RectangleAnnulusPixelRegion(PixCoord(x=6, y=6), inner_width=5.5, outer_width=8.5, inner_height=3.5, outer_height=6.5, angle=Angle('45deg')) patch = reg.plot(ax=ax, facecolor='none', edgecolor='red', lw=2, label='Rectangle Annulus') ax.legend(handles=(patch,), loc='upper center') ax.set_xlim(-5, 20) ax.set_ylim(-5, 20) ax.set_aspect('equal') """ # duplicated from AsymmetricAnnulusPixelRegion because otherwise Sphinx # ignores the docstrings in the parent class center = ScalarPixCoord('The center pixel position as a |PixCoord|.') inner_width = PositiveScalar('The inner width (before rotation) in ' 'pixels as a float.') outer_width = PositiveScalar('The outer width (before rotation) in ' 'pixels as a float.') inner_height = PositiveScalar('The inner height (before rotation) in ' 'pixels as a float.') outer_height = PositiveScalar('The outer height (before rotation) in ' 'pixels as a float.') angle = ScalarAngle('The rotation angle measured anti-clockwise as a ' '|Quantity| angle.') _component_class = RectanglePixelRegion def to_sky(self, wcs): return RectangleAnnulusSkyRegion(*self.to_sky_args(wcs), meta=self.meta.copy(), visual=self.visual.copy()) class RectangleAnnulusSkyRegion(AsymmetricAnnulusSkyRegion): """ A rectangular annulus in `~astropy.coordinates.SkyCoord` coordinates. Parameters ---------- center : `~astropy.coordinates.SkyCoord` The position of the center of the rectangular annulus. inner_width : `~astropy.units.Quantity` The inner width of the rectangular annulus (before rotation) as an angle. outer_width : `~astropy.units.Quantity` The outer width of the rectangular annulus (before rotation) as an angle. inner_height : `~astropy.units.Quantity` The inner height of the rectangular annulus (before rotation) as an angle. outer_height : `~astropy.units.Quantity` The outer height of the rectangular annulus (before rotation) as an angle. angle : `~astropy.units.Quantity`, optional The rotation angle of the rectangular annulus, measured anti-clockwise. If set to zero (the default), the width axis is lined up with the longitude axis of the celestial coordinates meta : `~regions.RegionMeta` or `dict`, optional A dictionary that stores the meta attributes of the region. visual : `~regions.RegionVisual` or `dict`, optional A dictionary that stores the visual meta attributes of the region. """ # duplicated from AsymmetricAnnulusSkyRegion because otherwise Sphinx # ignores the docstrings in the parent class center = ScalarSkyCoord('The center position as a |SkyCoord|.') inner_width = PositiveScalarAngle('The inner width (before rotation) as ' 'a |Quantity| angle.') outer_width = PositiveScalarAngle('The outer width (before rotation) as ' 'a |Quantity| angle.') inner_height = PositiveScalarAngle('The inner height (before rotation) ' 'as a |Quantity| angle.') outer_height = PositiveScalarAngle('The outer height (before rotation) ' 'as a |Quantity| angle.') angle = ScalarAngle('The rotation angle measured anti-clockwise as a ' '|Quantity| angle.') _component_class = RectangleSkyRegion def to_pixel(self, wcs): return RectangleAnnulusPixelRegion(*self.to_pixel_args(wcs), meta=self.meta.copy(), visual=self.visual.copy()) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/shapes/circle.py0000644000175100001770000001633614525470416017221 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst """ This module defines circular regions in both pixel and sky coordinates. """ import math import astropy.units as u import numpy as np from astropy.coordinates import Angle from regions._geometry import circular_overlap_grid from regions._utils.wcs_helpers import pixel_scale_angle_at_skycoord from regions.core.attributes import (PositiveScalar, PositiveScalarAngle, RegionMetaDescr, RegionVisualDescr, ScalarPixCoord, ScalarSkyCoord) from regions.core.bounding_box import RegionBoundingBox from regions.core.core import PixelRegion, SkyRegion from regions.core.mask import RegionMask from regions.core.metadata import RegionMeta, RegionVisual from regions.core.pixcoord import PixCoord __all__ = ['CirclePixelRegion', 'CircleSkyRegion'] class CirclePixelRegion(PixelRegion): """ A circle defined using pixel coordinates. Parameters ---------- center : `~regions.PixCoord` The center position. radius : float The radius in pixels. meta : `~regions.RegionMeta` or `dict`, optional A dictionary that stores the meta attributes of the region. visual : `~regions.RegionVisual` or `dict`, optional A dictionary that stores the visual meta attributes of the region. Examples -------- .. plot:: :include-source: from regions import PixCoord, CirclePixelRegion import matplotlib.pyplot as plt fig, ax = plt.subplots(1, 1) reg = CirclePixelRegion(PixCoord(x=8, y=7), radius=3.5) patch = reg.plot(ax=ax, facecolor='none', edgecolor='red', lw=2, label='Circle') ax.legend(handles=(patch,), loc='upper center') ax.set_xlim(0, 15) ax.set_ylim(0, 15) ax.set_aspect('equal') """ _params = ('center', 'radius') _mpl_artist = 'Patch' center = ScalarPixCoord('The center pixel position as a |PixCoord|.') radius = PositiveScalar('The radius in pixels as a float.') meta = RegionMetaDescr('The meta attributes as a |RegionMeta|') visual = RegionVisualDescr('The visual attributes as a |RegionVisual|.') def __init__(self, center, radius, meta=None, visual=None): self.center = center self.radius = radius self.meta = meta or RegionMeta() self.visual = visual or RegionVisual() @property def area(self): return math.pi * self.radius ** 2 def contains(self, pixcoord): pixcoord = PixCoord._validate(pixcoord, name='pixcoord') in_circle = self.center.separation(pixcoord) < self.radius if self.meta.get('include', True): return in_circle else: return np.logical_not(in_circle) def to_sky(self, wcs): # TODO: write a pixel_to_skycoord_scale_angle center = wcs.pixel_to_world(self.center.x, self.center.y) _, pixscale, _ = pixel_scale_angle_at_skycoord(center, wcs) radius = Angle(self.radius * u.pix * pixscale, 'arcsec') return CircleSkyRegion(center, radius, meta=self.meta.copy(), visual=self.visual.copy()) @property def bounding_box(self): """Bounding box (`~regions.RegionBoundingBox`).""" xmin = self.center.x - self.radius xmax = self.center.x + self.radius ymin = self.center.y - self.radius ymax = self.center.y + self.radius return RegionBoundingBox.from_float(xmin, xmax, ymin, ymax) def to_mask(self, mode='center', subpixels=1): self._validate_mode(mode, subpixels) if mode == 'center': mode = 'subpixels' subpixels = 1 # Find bounding box and mask size bbox = self.bounding_box ny, nx = bbox.shape # Find position of pixel edges and recenter so that circle is at # origin xmin = float(bbox.ixmin) - 0.5 - self.center.x xmax = float(bbox.ixmax) - 0.5 - self.center.x ymin = float(bbox.iymin) - 0.5 - self.center.y ymax = float(bbox.iymax) - 0.5 - self.center.y if mode == 'subpixels': use_exact = 0 else: use_exact = 1 fraction = circular_overlap_grid(xmin, xmax, ymin, ymax, nx, ny, self.radius, use_exact, subpixels) return RegionMask(fraction, bbox=bbox) def as_artist(self, origin=(0, 0), **kwargs): """ Return a matplotlib patch object for this region (`matplotlib.patches.Circle`). Parameters ---------- origin : array_like, optional The ``(x, y)`` pixel position of the origin of the displayed image. **kwargs : dict Any keyword arguments accepted by `~matplotlib.patches.Circle`. These keywords will override any visual meta attributes of this region. Returns ------- artist : `~matplotlib.patches.Circle` A matplotlib circle patch. """ from matplotlib.patches import Circle xy = self.center.x - origin[0], self.center.y - origin[1] radius = self.radius mpl_kwargs = self.visual.define_mpl_kwargs(self._mpl_artist) mpl_kwargs.update(kwargs) return Circle(xy=xy, radius=radius, **mpl_kwargs) def rotate(self, center, angle): """ Rotate the region. Positive ``angle`` corresponds to counter-clockwise rotation. Parameters ---------- center : `~regions.PixCoord` The rotation center point. angle : `~astropy.coordinates.Angle` The rotation angle. Returns ------- region : `CirclePixelRegion` The rotated region (which is an independent copy). """ center = self.center.rotate(center, angle) return self.copy(center=center) class CircleSkyRegion(SkyRegion): """ A circle defined using sky coordinates. Parameters ---------- center : `~astropy.coordinates.SkyCoord` The center position. radius : `~astropy.units.Quantity` The radius in angular units. meta : `~regions.RegionMeta` or `dict`, optional A dictionary that stores the meta attributes of the region. visual : `~regions.RegionVisual` or `dict`, optional A dictionary that stores the visual meta attributes of the region. """ _params = ('center', 'radius') center = ScalarSkyCoord('The center position as a |SkyCoord|.') radius = PositiveScalarAngle('The radius as a |Quantity| angle.') meta = RegionMetaDescr('The meta attributes as a |RegionMeta|') visual = RegionVisualDescr('The visual attributes as a |RegionVisual|.') def __init__(self, center, radius, meta=None, visual=None): self.center = center self.radius = radius self.meta = meta or RegionMeta() self.visual = visual or RegionVisual() def to_pixel(self, wcs): center, pixscale, _ = pixel_scale_angle_at_skycoord(self.center, wcs) radius = (self.radius / pixscale).to(u.pix).value return CirclePixelRegion(center, radius, meta=self.meta.copy(), visual=self.visual.copy()) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/shapes/ellipse.py0000644000175100001770000003533014525470416017410 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst """ This module defines elliptical regions in both pixel and sky coordinates. """ import math import astropy.units as u import numpy as np from astropy.coordinates import Angle from regions._geometry import elliptical_overlap_grid from regions._utils.wcs_helpers import pixel_scale_angle_at_skycoord from regions.core.attributes import (PositiveScalar, PositiveScalarAngle, RegionMetaDescr, RegionVisualDescr, ScalarAngle, ScalarPixCoord, ScalarSkyCoord) from regions.core.bounding_box import RegionBoundingBox from regions.core.core import PixelRegion, SkyRegion from regions.core.mask import RegionMask from regions.core.metadata import RegionMeta, RegionVisual from regions.core.pixcoord import PixCoord __all__ = ['EllipsePixelRegion', 'EllipseSkyRegion'] class EllipsePixelRegion(PixelRegion): """ An ellipse in pixel coordinates. Parameters ---------- center : `~regions.PixCoord` The position of the center of the ellipse. width : float The width of the ellipse (before rotation) in pixels height : float The height of the ellipse (before rotation) in pixels angle : `~astropy.units.Quantity`, optional The rotation angle of the ellipse, measured anti-clockwise. If set to zero (the default), the width axis is lined up with the x axis. meta : `~regions.RegionMeta` or `dict`, optional A dictionary that stores the meta attributes of the region. visual : `~regions.RegionVisual` or `dict`, optional A dictionary that stores the visual meta attributes of the region. Examples -------- .. plot:: :include-source: from astropy.coordinates import Angle from regions import PixCoord, EllipsePixelRegion import matplotlib.pyplot as plt fig, ax = plt.subplots(1, 1) reg = EllipsePixelRegion(PixCoord(15, 10), width=16, height=10, angle=Angle(30, 'deg')) patch = reg.plot(ax=ax, facecolor='none', edgecolor='red', lw=2, label='Ellipse') ax.legend(handles=(patch,), loc='upper center') ax.set_xlim(0, 30) ax.set_ylim(0, 20) ax.set_aspect('equal') """ _params = ('center', 'width', 'height', 'angle') _mpl_artist = 'Patch' center = ScalarPixCoord('The center pixel position as a |PixCoord|.') width = PositiveScalar('The width of the ellipse (before rotation) in ' 'pixels as a float.') height = PositiveScalar('The height of the ellipse (before rotation) in ' 'pixels as a float.') angle = ScalarAngle('The rotation angle measured anti-clockwise as a ' '|Quantity| angle.') meta = RegionMetaDescr('The meta attributes as a |RegionMeta|') visual = RegionVisualDescr('The visual attributes as a |RegionVisual|.') def __init__(self, center, width, height, angle=0. * u.deg, meta=None, visual=None): self.center = center self.width = width self.height = height self.angle = angle self.meta = meta or RegionMeta() self.visual = visual or RegionVisual() @property def area(self): return math.pi / 4 * self.width * self.height def contains(self, pixcoord): pixcoord = PixCoord._validate(pixcoord, name='pixcoord') cos_angle = np.cos(self.angle) sin_angle = np.sin(self.angle) dx = pixcoord.x - self.center.x dy = pixcoord.y - self.center.y in_ell = ((2 * (cos_angle * dx + sin_angle * dy) / self.width) ** 2 + (2 * (sin_angle * dx - cos_angle * dy) / self.height) ** 2 <= 1.) if self.meta.get('include', True): return in_ell else: return np.logical_not(in_ell) def to_sky(self, wcs): center = wcs.pixel_to_world(self.center.x, self.center.y) _, pixscale, north_angle = pixel_scale_angle_at_skycoord(center, wcs) height = Angle(self.height * u.pix * pixscale, 'arcsec') width = Angle(self.width * u.pix * pixscale, 'arcsec') # region sky angles are defined relative to the WCS longitude axis; # photutils aperture sky angles are defined as the PA of the # semimajor axis (i.e., relative to the WCS latitude axis) angle = self.angle - (north_angle - 90 * u.deg) return EllipseSkyRegion(center, width, height, angle=angle, meta=self.meta.copy(), visual=self.visual.copy()) @property def bounding_box(self): """ The minimal bounding box (`~regions.RegionBoundingBox`) enclosing the exact elliptical region. """ # We use the solution described in # https://stackoverflow.com/a/14163413 cos_theta = np.cos(self.angle) sin_theta = np.sin(self.angle) width_x = 0.5 * self.width * cos_theta width_y = 0.5 * self.width * sin_theta height_x = 0.5 * self.height * -sin_theta height_y = 0.5 * self.height * cos_theta dx = np.sqrt(width_x**2 + height_x**2) dy = np.sqrt(width_y**2 + height_y**2) xmin = self.center.x - dx xmax = self.center.x + dx ymin = self.center.y - dy ymax = self.center.y + dy return RegionBoundingBox.from_float(xmin, xmax, ymin, ymax) def to_mask(self, mode='center', subpixels=5): # NOTE: assumes this class represents a single circle self._validate_mode(mode, subpixels) if mode == 'center': mode = 'subpixels' subpixels = 1 # Find bounding box and mask size bbox = self.bounding_box ny, nx = bbox.shape # Find position of pixel edges and recenter so that ellipse is # at origin xmin = float(bbox.ixmin) - 0.5 - self.center.x xmax = float(bbox.ixmax) - 0.5 - self.center.x ymin = float(bbox.iymin) - 0.5 - self.center.y ymax = float(bbox.iymax) - 0.5 - self.center.y if mode == 'subpixels': use_exact = 0 else: use_exact = 1 fraction = elliptical_overlap_grid(xmin, xmax, ymin, ymax, nx, ny, 0.5 * self.width, 0.5 * self.height, self.angle.to(u.rad).value, use_exact, subpixels) return RegionMask(fraction, bbox=bbox) def as_artist(self, origin=(0, 0), **kwargs): """ Return a matplotlib patch object for the region (`matplotlib.patches.Ellipse`). Parameters ---------- origin : array_like, optional The ``(x, y)`` pixel position of the origin of the displayed image. **kwargs : dict Any keyword arguments accepted by `~matplotlib.patches.Ellipse`. These keywords will override any visual meta attributes of this region. Returns ------- artist : `~matplotlib.patches.Ellipse` A matplotlib ellipse patch. """ from matplotlib.patches import Ellipse xy = self.center.x - origin[0], self.center.y - origin[1] width = self.width height = self.height # matplotlib expects rotation in degrees (anti-clockwise) angle = self.angle.to('deg').value mpl_kwargs = self.visual.define_mpl_kwargs(self._mpl_artist) mpl_kwargs.update(kwargs) return Ellipse(xy=xy, width=width, height=height, angle=angle, **mpl_kwargs) def _update_from_mpl_selector(self, *args, **kwargs): xmin, xmax, ymin, ymax = self._mpl_selector.extents self.center = PixCoord(x=0.5 * (xmin + xmax), y=0.5 * (ymin + ymax)) self.width = (xmax - xmin) self.height = (ymax - ymin) self.angle = 0. * u.deg if self._mpl_selector_callback is not None: self._mpl_selector_callback(self) def as_mpl_selector(self, ax, active=True, sync=True, callback=None, **kwargs): """ A matplotlib editable widget for this region (`matplotlib.widgets.EllipseSelector`). Parameters ---------- ax : `~matplotlib.axes.Axes` The matplotlib axes to add the selector to. active : bool, optional Whether the selector should be active by default. sync : bool, optional If `True` (the default), the region will be kept in sync with the selector. Otherwise, the selector will be initialized with the values from the region but the two will then be disconnected. callback : callable, optional If specified, this function will be called every time the region is updated. This only has an effect if ``sync`` is `True`. If a callback is set, it is called for the first time once the selector has been created. drag_from_anywhere : bool, optional If `True`, the selector can be moved by clicking anywhere within its bounds, else only at the central anchor (only available with matplotlib 3.5 upwards; default: `False`). **kwargs : dict Additional keyword arguments that are passed to `matplotlib.widgets.EllipseSelector`. Returns ------- selector : `matplotlib.widgets.EllipseSelector` The matplotlib selector. Notes ----- Once a selector has been created, you will need to keep a reference to it until you no longer need it. In addition, you can enable/disable the selector at any point by calling ``selector.set_active(True)`` or ``selector.set_active(False)``. """ from matplotlib.widgets import EllipseSelector from regions._utils.optional_deps import MPL_VERSION if hasattr(self, '_mpl_selector'): raise AttributeError('Cannot attach more than one selector to a region.') if self.angle.value != 0: raise NotImplementedError('Cannot create matplotlib selector for rotated ellipse.') if sync: sync_callback = self._update_from_mpl_selector else: def sync_callback(*args, **kwargs): pass rectprops = {'edgecolor': self.visual.get('color', 'black'), 'facecolor': 'none', 'linewidth': self.visual.get('linewidth', 1), 'linestyle': self.visual.get('linestyle', 'solid')} rectprops.update(kwargs.pop('props', dict())) # `rectprops` renamed `props` in mpl 3.5 and deprecated for 3.7. if MPL_VERSION < 35: kwargs.update({'rectprops': rectprops}) else: kwargs.update({'props': rectprops}) self._mpl_selector = EllipseSelector(ax, sync_callback, interactive=True, **kwargs) self._mpl_selector.extents = (self.center.x - self.width / 2, self.center.x + self.width / 2, self.center.y - self.height / 2, self.center.y + self.height / 2) self._mpl_selector.set_active(active) self._mpl_selector_callback = callback if sync and self._mpl_selector_callback is not None: self._mpl_selector_callback(self) return self._mpl_selector def rotate(self, center, angle): """ Rotate the region. Positive ``angle`` corresponds to counter-clockwise rotation. Parameters ---------- center : `~regions.PixCoord` The rotation center point. angle : `~astropy.coordinates.Angle` The rotation angle. Returns ------- region : `EllipsePixelRegion` The rotated region (which is an independent copy). """ center = self.center.rotate(center, angle) angle = self.angle + angle return self.copy(center=center, angle=angle) class EllipseSkyRegion(SkyRegion): """ An ellipse defined using sky coordinates. Parameters ---------- center : `~astropy.coordinates.SkyCoord` The position of the center of the ellipse. width : `~astropy.units.Quantity` The width of the ellipse (before rotation) as an angle. height : `~astropy.units.Quantity` The height of the ellipse (before rotation) as an angle. angle : `~astropy.units.Quantity`, optional The rotation angle of the ellipse, measured anti-clockwise. If set to zero (the default), the width axis is lined up with the longitude axis of the celestial coordinates. meta : `~regions.RegionMeta` or `dict`, optional A dictionary that stores the meta attributes of the region. visual : `~regions.RegionVisual` or `dict`, optional A dictionary that stores the visual meta attributes of the region. """ _params = ('center', 'width', 'height', 'angle') center = ScalarSkyCoord('The center position as a |SkyCoord|.') width = PositiveScalarAngle('The width of the ellipse (before rotation) ' 'as a |Quantity| angle.') height = PositiveScalarAngle('The height of the ellipse (before rotation) ' 'as a |Quantity| angle.') angle = ScalarAngle('The rotation angle measured anti-clockwise as a ' '|Quantity| angle.') meta = RegionMetaDescr('The meta attributes as a |RegionMeta|') visual = RegionVisualDescr('The visual attributes as a |RegionVisual|.') def __init__(self, center, width, height, angle=0. * u.deg, meta=None, visual=None): self.center = center self.width = width self.height = height self.angle = angle self.meta = meta or RegionMeta() self.visual = visual or RegionVisual() def to_pixel(self, wcs): center, pixscale, north_angle = pixel_scale_angle_at_skycoord( self.center, wcs) height = (self.height / pixscale).to(u.pixel).value width = (self.width / pixscale).to(u.pixel).value # region sky angles are defined relative to the WCS longitude axis; # photutils aperture sky angles are defined as the PA of the # semimajor axis (i.e., relative to the WCS latitude axis) angle = self.angle + (north_angle - 90 * u.deg) return EllipsePixelRegion(center, width, height, angle=angle, meta=self.meta.copy(), visual=self.visual.copy()) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/shapes/line.py0000644000175100001770000001473414525470416016707 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst """ This module defines line regions in both pixel and sky coordinates. """ import numpy as np from regions.core.attributes import (RegionMetaDescr, RegionVisualDescr, ScalarPixCoord, ScalarSkyCoord) from regions.core.bounding_box import RegionBoundingBox from regions.core.core import PixelRegion, SkyRegion from regions.core.metadata import RegionMeta, RegionVisual from regions.core.pixcoord import PixCoord __all__ = ['LinePixelRegion', 'LineSkyRegion'] class LinePixelRegion(PixelRegion): """ A line in pixel coordinates. Parameters ---------- start : `~regions.PixCoord` The start position. end : `~regions.PixCoord` The end position. meta : `~regions.RegionMeta` or `dict`, optional A dictionary that stores the meta attributes of the region. visual : `~regions.RegionVisual` or `dict`, optional A dictionary that stores the visual meta attributes of the region. Examples -------- .. plot:: :include-source: from regions import PixCoord, LinePixelRegion import matplotlib.pyplot as plt fig, ax = plt.subplots(1, 1) start = PixCoord(x=15, y=10) end = PixCoord(x=20, y=25) reg = LinePixelRegion(start=start, end=end) patch = reg.plot(ax=ax, edgecolor='red', lw=2, label='Line') ax.legend(handles=(patch,), loc='upper center') ax.set_xlim(0, 30) ax.set_ylim(0, 30) ax.set_aspect('equal') """ _params = ('start', 'end') _mpl_artist = 'Patch' start = ScalarPixCoord('The start pixel position as a |PixCoord|.') end = ScalarPixCoord('The end pixel position as a |PixCoord|.') meta = RegionMetaDescr('The meta attributes as a |RegionMeta|') visual = RegionVisualDescr('The visual attributes as a |RegionVisual|.') def __init__(self, start, end, meta=None, visual=None): self.start = start self.end = end self.meta = meta or RegionMeta() self.visual = visual or RegionVisual() @property def area(self): return 0 def contains(self, pixcoord): if pixcoord.isscalar: in_reg = False else: in_reg = np.zeros(pixcoord.x.shape, dtype=bool) if self.meta.get('include', True): return in_reg else: return np.logical_not(in_reg) def to_sky(self, wcs): start = wcs.pixel_to_world(self.start.x, self.start.y) end = wcs.pixel_to_world(self.end.x, self.end.y) return LineSkyRegion(start, end, meta=self.meta.copy(), visual=self.visual.copy()) @property def bounding_box(self): xmin = min(self.start.x, self.end.x) xmax = max(self.start.x, self.end.x) ymin = min(self.start.y, self.end.y) ymax = max(self.start.y, self.end.y) return RegionBoundingBox.from_float(xmin, xmax, ymin, ymax) def to_mask(self, mode='center', subpixels=5): # TODO: needs to be implemented raise NotImplementedError def as_artist(self, origin=(0, 0), **kwargs): """ Return a matplotlib patch object for this region (`matplotlib.patches.Arrow`). Parameters ---------- origin : array_like, optional The ``(x, y)`` pixel position of the origin of the displayed image. **kwargs : dict Any keyword arguments accepted by `~matplotlib.patches.Arrow`. These keywords will override any visual meta attributes of this region. Returns ------- artist : `~matplotlib.patches.Arrow` A matplotlib line patch. """ # Note: Long term we want to support DS9 lines with arrow heads. # We may want to use Line2D instead of arrow for lines because the # width of the arrow is non-scalable in patches. from matplotlib.patches import Arrow x = self.start.x - origin[0] y = self.start.y - origin[1] dx = self.end.x - self.start.x dy = self.end.y - self.start.y kwargs.setdefault('width', 0.1) mpl_kwargs = self.visual.define_mpl_kwargs(self._mpl_artist) mpl_kwargs.update(kwargs) return Arrow(x, y, dx, dy, **mpl_kwargs) def rotate(self, center, angle): """ Rotate the region. Positive ``angle`` corresponds to counter-clockwise rotation. Parameters ---------- center : `~regions.PixCoord` The rotation center point. angle : `~astropy.coordinates.Angle` The rotation angle. Returns ------- region : `LinePixelRegion` The rotated region (which is an independent copy). """ start = self.start.rotate(center, angle) end = self.end.rotate(center, angle) return self.copy(start=start, end=end) class LineSkyRegion(SkyRegion): """ A line in sky coordinates. Parameters ---------- start : `~astropy.coordinates.SkyCoord` The start position. end : `~astropy.coordinates.SkyCoord` The end position. meta : `~regions.RegionMeta` or `dict`, optional A dictionary that stores the meta attributes of the region. visual : `~regions.RegionVisual` or `dict`, optional A dictionary that stores the visual meta attributes of the region. """ _params = ('start', 'end') start = ScalarSkyCoord('The start position as a |SkyCoord|.') end = ScalarSkyCoord('The end position as a |SkyCoord|.') meta = RegionMetaDescr('The meta attributes as a |RegionMeta|') visual = RegionVisualDescr('The visual attributes as a |RegionVisual|.') def __init__(self, start, end, meta=None, visual=None): self.start = start self.end = end self.meta = meta or RegionMeta() self.visual = visual or RegionVisual() def contains(self, skycoord, wcs): # pylint: disable=unused-argument if self.meta.get('include', True): # lines never contain anything return False else: return True def to_pixel(self, wcs): start_x, start_y = wcs.world_to_pixel(self.start) start = PixCoord(start_x, start_y) end_x, end_y = wcs.world_to_pixel(self.end) end = PixCoord(end_x, end_y) return LinePixelRegion(start, end, meta=self.meta.copy(), visual=self.visual.copy()) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/shapes/point.py0000644000175100001770000001412214525470416017100 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst """ This module defines point regions in both pixel and sky coordinates. """ import numpy as np from regions.core.attributes import (RegionMetaDescr, RegionVisualDescr, ScalarPixCoord, ScalarSkyCoord) from regions.core.bounding_box import RegionBoundingBox from regions.core.core import PixelRegion, SkyRegion from regions.core.metadata import RegionMeta, RegionVisual from regions.core.pixcoord import PixCoord __all__ = ['PointPixelRegion', 'PointSkyRegion'] class PointPixelRegion(PixelRegion): """ A point position in pixel coordinates. Parameters ---------- center : `~regions.PixCoord` The position of the point. meta : `~regions.RegionMeta` or `dict`, optional A dictionary that stores the meta attributes of the region. visual : `~regions.RegionVisual` or `dict`, optional A dictionary that stores the visual meta attributes of the region. Examples -------- .. plot:: :include-source: from regions import PixCoord, PointPixelRegion, RegionVisual import matplotlib.pyplot as plt fig, ax = plt.subplots(1, 1) regs = [] regs.append(PointPixelRegion(PixCoord(2, 2), visual=RegionVisual(marker='D'))) regs.append(PointPixelRegion(PixCoord(2, 3), visual=RegionVisual(marker='+'))) regs.append(PointPixelRegion(PixCoord(3, 3), visual=RegionVisual(marker='^'))) regs.append(PointPixelRegion(PixCoord(3, 2), visual=RegionVisual(marker='*'))) regs.append(PointPixelRegion(PixCoord(2, 4), visual=RegionVisual(marker='x'))) regs.append(PointPixelRegion(PixCoord(4, 2))) for reg in regs: reg.plot(ax=ax) ax.set_xlim(0, 6) ax.set_ylim(0, 6) ax.set_aspect('equal') """ _params = ('center',) _mpl_artist = 'Line2D' center = ScalarPixCoord('The point pixel position as a |PixCoord|.') meta = RegionMetaDescr('The meta attributes as a |RegionMeta|') visual = RegionVisualDescr('The visual attributes as a |RegionVisual|.') def __init__(self, center, meta=None, visual=None): self.center = center self.meta = meta or RegionMeta() self.visual = visual or RegionVisual() @property def area(self): return 0.0 def contains(self, pixcoord): if pixcoord.isscalar: in_reg = False else: in_reg = np.zeros(pixcoord.x.shape, dtype=bool) if self.meta.get('include', True): # in_reg = False, always. Points do not include anything. return in_reg else: return np.logical_not(in_reg) def to_sky(self, wcs): center = wcs.pixel_to_world(self.center.x, self.center.y) return PointSkyRegion(center, meta=self.meta.copy(), visual=self.visual.copy()) @property def bounding_box(self): return RegionBoundingBox.from_float(self.center.x, self.center.x, self.center.y, self.center.y) def to_mask(self, mode='center', subpixels=5): # TODO: needs to be implemented raise NotImplementedError def as_artist(self, origin=(0, 0), **kwargs): """ Return a matplotlib Line2D object for this region (`matplotlib.lines.Line2D`). Parameters ---------- origin : array_like, optional The ``(x, y)`` pixel position of the origin of the displayed image. **kwargs : `dict` Any keyword arguments accepted by `~matplotlib.lines.Line2D`. These keywords will override any visual meta attributes of this region. Returns ------- artist : `~matplotlib.lines.Line2D` A matplotlib Line2D object. """ from matplotlib.lines import Line2D mpl_kwargs = self.visual.define_mpl_kwargs(self._mpl_artist) mpl_kwargs.update(kwargs) return Line2D([self.center.x - origin[0]], [self.center.y - origin[1]], **mpl_kwargs) def rotate(self, center, angle): """ Rotate the region. Positive ``angle`` corresponds to counter-clockwise rotation. Parameters ---------- center : `~regions.PixCoord` The rotation center point. angle : `~astropy.coordinates.Angle` The rotation angle. Returns ------- region : `PointPixelRegion` The rotated region (which is an independent copy). """ center = self.center.rotate(center, angle) return self.copy(center=center) class PointSkyRegion(SkyRegion): """ A pixel region in sky coordinates. Parameters ---------- center : `~astropy.coordinates.SkyCoord` The position of the point. meta : `~regions.RegionMeta` or `dict`, optional A dictionary that stores the meta attributes of the region. visual : `~regions.RegionVisual` or `dict`, optional A dictionary that stores the visual meta attributes of the region. """ _params = ('center',) center = ScalarSkyCoord('The point position as a |SkyCoord|.') meta = RegionMetaDescr('The meta attributes as a |RegionMeta|') visual = RegionVisualDescr('The visual attributes as a |RegionVisual|.') def __init__(self, center, meta=None, visual=None): self.center = center self.meta = meta or RegionMeta() self.visual = visual or RegionVisual() def contains(self, skycoord, wcs): # pylint: disable=unused-argument if self.meta.get('include', True): # points never include anything return False else: return True def to_pixel(self, wcs): center_x, center_y = wcs.world_to_pixel(self.center) center = PixCoord(center_x, center_y) return PointPixelRegion(center, meta=self.meta.copy(), visual=self.visual.copy()) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/shapes/polygon.py0000644000175100001770000003256614525470416017452 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst """ This module defines polygon regions in both pixel and sky coordinates. """ import astropy.units as u import numpy as np from regions._geometry import polygonal_overlap_grid from regions._geometry.pnpoly import points_in_polygon from regions.core.attributes import (OneDPixCoord, OneDSkyCoord, PositiveScalar, RegionMetaDescr, RegionVisualDescr, ScalarAngle, ScalarPixCoord) from regions.core.bounding_box import RegionBoundingBox from regions.core.core import PixelRegion, SkyRegion from regions.core.mask import RegionMask from regions.core.metadata import RegionMeta, RegionVisual from regions.core.pixcoord import PixCoord __all__ = ['PolygonPixelRegion', 'RegularPolygonPixelRegion', 'PolygonSkyRegion'] class PolygonPixelRegion(PixelRegion): """ A polygon in pixel coordinates. Parameters ---------- vertices : `~regions.PixCoord` The vertices of the polygon. meta : `~regions.RegionMeta` or `dict`, optional A dictionary that stores the meta attributes of the region. visual : `~regions.RegionVisual` or `dict`, optional A dictionary that stores the visual meta attributes of the region. origin : `~regions.PixCoord`, optional The origin for polynomial vertices. Using this keyword allows ``vertices`` to be specified relative to an origin pixel coordinate. Examples -------- .. plot:: :include-source: from regions import PixCoord, PolygonPixelRegion import matplotlib.pyplot as plt fig, ax = plt.subplots(1, 1) x, y = [45, 45, 55, 60], [75, 70, 65, 75] vertices = PixCoord(x=x, y=y) reg = PolygonPixelRegion(vertices=vertices) patch = reg.plot(ax=ax, facecolor='none', edgecolor='red', lw=2, label='Polygon') ax.legend(handles=(patch,), loc='upper center') ax.set_xlim(30, 80) ax.set_ylim(50, 80) ax.set_aspect('equal') """ _params = ('vertices',) _mpl_artist = 'Patch' vertices = OneDPixCoord('The vertices of the polygon as a |PixCoord| ' 'array.') meta = RegionMetaDescr('The meta attributes as a |RegionMeta|') visual = RegionVisualDescr('The visual attributes as a |RegionVisual|.') def __init__(self, vertices, meta=None, visual=None, origin=PixCoord(0, 0)): self._vertices = vertices self.meta = meta or RegionMeta() self.visual = visual or RegionVisual() self.origin = origin self.vertices = vertices + origin @property def area(self): # See https://stackoverflow.com/questions/24467972 # Use offsets to improve numerical precision x_ = self.vertices.x - self.vertices.x.mean() y_ = self.vertices.y - self.vertices.y.mean() # Shoelace formula, for our case where the start vertex # isn't duplicated at the end, written to avoid an array copy area_main = np.dot(x_[:-1], y_[1:]) - np.dot(y_[:-1], x_[1:]) area_last = x_[-1] * y_[0] - y_[-1] * x_[0] return 0.5 * np.abs(area_main + area_last) def contains(self, pixcoord): pixcoord = PixCoord._validate(pixcoord, 'pixcoord') x = np.atleast_1d(np.asarray(pixcoord.x, dtype=float)) y = np.atleast_1d(np.asarray(pixcoord.y, dtype=float)) vx = np.asarray(self.vertices.x, dtype=float) vy = np.asarray(self.vertices.y, dtype=float) shape = x.shape mask = points_in_polygon(x.flatten(), y.flatten(), vx, vy).astype(bool) in_poly = mask.reshape(shape) if self.meta.get('include', True): return in_poly else: return np.logical_not(in_poly) def to_sky(self, wcs): vertices_sky = wcs.pixel_to_world(self.vertices.x, self.vertices.y) return PolygonSkyRegion(vertices=vertices_sky, meta=self.meta.copy(), visual=self.visual.copy()) @property def bounding_box(self): xmin = self.vertices.x.min() xmax = self.vertices.x.max() ymin = self.vertices.y.min() ymax = self.vertices.y.max() return RegionBoundingBox.from_float(xmin, xmax, ymin, ymax) def to_mask(self, mode='center', subpixels=5): self._validate_mode(mode, subpixels) if mode == 'center': mode = 'subpixels' subpixels = 1 if mode == 'subpixels': use_exact = 0 else: use_exact = 1 # Find bounding box and mask size bbox = self.bounding_box ny, nx = bbox.shape # Find position of pixel edges and recenter so that circle is at # origin xmin = float(bbox.ixmin) - 0.5 xmax = float(bbox.ixmax) - 0.5 ymin = float(bbox.iymin) - 0.5 ymax = float(bbox.iymax) - 0.5 vx = np.asarray(self.vertices.x, dtype=float) vy = np.asarray(self.vertices.y, dtype=float) fraction = polygonal_overlap_grid(xmin, xmax, ymin, ymax, nx, ny, vx, vy, use_exact, subpixels) return RegionMask(fraction, bbox=bbox) def as_artist(self, origin=(0, 0), **kwargs): """ Return a matplotlib patch object for this region (`matplotlib.patches.Polygon`). Parameters ---------- origin : array_like, optional The ``(x, y)`` pixel position of the origin of the displayed image. **kwargs : dict Any keyword arguments accepted by `~matplotlib.patches.Polygon`. These keywords will override any visual meta attributes of this region. Returns ------- artist : `~matplotlib.patches.Polygon` A matplotlib polygon patch. """ from matplotlib.patches import Polygon xy = np.vstack([self.vertices.x - origin[0], self.vertices.y - origin[1]]).transpose() mpl_kwargs = self.visual.define_mpl_kwargs(self._mpl_artist) mpl_kwargs.update(kwargs) return Polygon(xy=xy, **mpl_kwargs) def rotate(self, center, angle): """ Rotate the region. Positive ``angle`` corresponds to counter-clockwise rotation. Parameters ---------- center : `~regions.PixCoord` The rotation center point. angle : `~astropy.coordinates.Angle` The rotation angle. Returns ------- region : `PolygonPixelRegion` The rotated region (which is an independent copy). """ vertices = self.vertices.rotate(center, angle) return self.copy(vertices=vertices) class RegularPolygonPixelRegion(PolygonPixelRegion): """ A regular polygon in pixel coordinates. .. note:: This class will be serialized as a generic polygon region, thus when read back in it will produce a `~regions.PolygonPixelRegion` object instead of a `~regions.RegularPolygonPixelRegion` object. Parameters ---------- center : `~regions.PixCoord` The position of the center of the polygon. nvertices : `~regions.PixCoord` The number of polygon vertices (or sides). radius : float The distance from the center to any vertex. This is also known as the circumradius. angle : `~astropy.units.Quantity`, optional The rotation angle of the polygon, measured anti-clockwise. If set to zero (the default), the polygon will point "up" following the `matplotlib.patches.RegularPolygon` convention. meta : `~regions.RegionMeta` or `dict`, optional A dictionary that stores the meta attributes of the region. visual : `~regions.RegionVisual` or `dict`, optional A dictionary that stores the visual meta attributes of the region. Attributes ---------- side_length : float The side length. inradius : float The radius of the largest circle contained entirely within the polygon. This value is identical to the length of a line segment from the polygon center to the midpoint of one of its sides (known as as the apothem). perimeter : float The polygon perimeter. interior_angle : float The polygon interior angle, which is the angle at each vertex on the inside of the polygon. exterior_angle : float The polygon exterior angle, which is an angle at each vertex on the outside of the polygon. Examples -------- .. plot:: :include-source: import astropy.units as u import matplotlib.pyplot as plt from regions import PixCoord, RegularPolygonPixelRegion fig, ax = plt.subplots(1, 1) center = PixCoord(x=50, y=50) reg1 = RegularPolygonPixelRegion(center, 6, 15) reg1.plot(edgecolor='red', lw=2) center = PixCoord(x=25, y=25) reg2 = RegularPolygonPixelRegion(center, 3, 15) reg2.plot(edgecolor='green', lw=2) center = PixCoord(x=25, y=75) reg3 = RegularPolygonPixelRegion(center, 3, 15, angle=25*u.deg) reg3.plot(edgecolor='orange', lw=2) center = PixCoord(x=75, y=75) reg4 = RegularPolygonPixelRegion(center, 8, 15) reg4.plot(edgecolor='blue', lw=2) center = PixCoord(x=75, y=25) reg5 = RegularPolygonPixelRegion(center, 5, 15) reg5.plot(edgecolor='magenta', lw=2) ax.set_xlim(0, 100) ax.set_ylim(0, 100) ax.set_aspect('equal') """ _params = ('center', 'nvertices', 'radius', 'angle') center = ScalarPixCoord('The center pixel position as a |PixCoord|.') nvertices = PositiveScalar('The number of polygon vertices.') radius = PositiveScalar('The distance from the center to any vertex in ' 'pixels as a float.') angle = ScalarAngle('The rotation angle measured anti-clockwise as a ' '|Quantity| angle.') meta = RegionMetaDescr('The meta attributes as a |RegionMeta|') visual = RegionVisualDescr('The visual attributes as a |RegionVisual|.') def __init__(self, center, nvertices, radius, angle=0. * u.deg, meta=None, visual=None): if nvertices < 3: raise ValueError('nvertices must be >= 3') self.center = center self.nvertices = nvertices self.radius = radius self.angle = angle super().__init__(self._calc_vertices(), meta=meta, visual=visual) self.side_length = 2. * self.radius * np.sin(np.pi / self.nvertices) self.inradius = self.radius * np.cos(np.pi / self.nvertices) self.perimeter = self.side_length * self.nvertices self.interior_angle = ((self.nvertices - 2) / self.nvertices * 180) << u.deg self.exterior_angle = 360. / self.nvertices << u.deg def _calc_vertices(self): # uses the matplotlib convention that the polygon always points "up" theta = ((2. * np.pi / self.nvertices * np.arange(self.nvertices) + (np.pi / 2)) << u.radian) + self.angle xvert = self.radius * np.cos(theta) yvert = self.radius * np.sin(theta) return self.center + PixCoord(xvert, yvert) def rotate(self, center, angle): """ Rotate the region. Positive ``angle`` corresponds to counter-clockwise rotation. Parameters ---------- center : `~regions.PixCoord` The rotation center point. angle : `~astropy.coordinates.Angle` The rotation angle. Returns ------- region : `PolygonPixelRegion` The rotated region (which is an independent copy). """ center = self.center.rotate(center, angle) angle = self.angle + angle return self.copy(center=center, angle=angle) def to_polygon(self): """ Return a `PolygonPixelRegion` of this region. """ return PolygonPixelRegion(self.vertices, origin=PixCoord(0, 0), meta=self.meta.copy(), visual=self.visual.copy()) class PolygonSkyRegion(SkyRegion): """ A polygon defined using vertices in sky coordinates. Parameters ---------- vertices : `~astropy.coordinates.SkyCoord` The vertices of the polygon. meta : `~regions.RegionMeta` or `dict`, optional A dictionary that stores the meta attributes of the region. visual : `~regions.RegionVisual` or `dict`, optional A dictionary that stores the visual meta attributes of the region. """ _params = ('vertices',) vertices = OneDSkyCoord('The vertices of the polygon as a |SkyCoord| ' 'array.') meta = RegionMetaDescr('The meta attributes as a |RegionMeta|') visual = RegionVisualDescr('The visual attributes as a |RegionVisual|.') def __init__(self, vertices, meta=None, visual=None): self.vertices = vertices self.meta = meta or RegionMeta() self.visual = visual or RegionVisual() def to_pixel(self, wcs): x, y = wcs.world_to_pixel(self.vertices) vertices_pix = PixCoord(x, y) return PolygonPixelRegion(vertices_pix, meta=self.meta.copy(), visual=self.visual.copy()) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/shapes/rectangle.py0000644000175100001770000004032314525470416017715 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst """ This module defines rectangular regions in both pixel and sky coordinates. """ import astropy.units as u import numpy as np from astropy.coordinates import Angle from regions._geometry import rectangular_overlap_grid from regions._utils.wcs_helpers import pixel_scale_angle_at_skycoord from regions.core.attributes import (PositiveScalar, PositiveScalarAngle, RegionMetaDescr, RegionVisualDescr, ScalarAngle, ScalarPixCoord, ScalarSkyCoord) from regions.core.bounding_box import RegionBoundingBox from regions.core.core import PixelRegion, SkyRegion from regions.core.mask import RegionMask from regions.core.metadata import RegionMeta, RegionVisual from regions.core.pixcoord import PixCoord from regions.shapes.polygon import PolygonPixelRegion __all__ = ['RectanglePixelRegion', 'RectangleSkyRegion'] class RectanglePixelRegion(PixelRegion): """ A rectangle in pixel coordinates. Parameters ---------- center : `~regions.PixCoord` The position of the center of the rectangle. width : float The width of the rectangle (before rotation) in pixels. height : float The height of the rectangle (before rotation) in pixels. angle : `~astropy.units.Quantity`, optional The rotation angle of the rectangle, measured anti-clockwise. If set to zero (the default), the width axis is lined up with the x axis. meta : `~regions.RegionMeta` or `dict`, optional A dictionary that stores the meta attributes of the region. visual : `~regions.RegionVisual` or `dict`, optional A dictionary that stores the visual meta attributes of the region. Examples -------- .. plot:: :include-source: from astropy.coordinates import Angle from regions import PixCoord, RectanglePixelRegion import matplotlib.pyplot as plt fig, ax = plt.subplots(1, 1) reg = RectanglePixelRegion(PixCoord(x=15, y=10), width=8, height=5, angle=Angle(30, 'deg')) patch = reg.plot(ax=ax, facecolor='none', edgecolor='red', lw=2, label='Rectangle') ax.legend(handles=(patch,), loc='upper center') ax.set_xlim(0, 30) ax.set_ylim(0, 20) ax.set_aspect('equal') """ _params = ('center', 'width', 'height', 'angle') _mpl_artist = 'Patch' center = ScalarPixCoord('The center pixel position as a |PixCoord|.') width = PositiveScalar('The width of the rectangle (before rotation) in ' 'pixels as a float.') height = PositiveScalar('The height of the rectangle (before rotation) ' 'in pixels as a float.') angle = ScalarAngle('The rotation angle measured anti-clockwise as a ' '|Quantity| angle.') meta = RegionMetaDescr('The meta attributes as a |RegionMeta|') visual = RegionVisualDescr('The visual attributes as a |RegionVisual|.') def __init__(self, center, width, height, angle=0 * u.deg, meta=None, visual=None): self.center = center self.width = width self.height = height self.angle = angle self.meta = meta or RegionMeta() self.visual = visual or RegionVisual() @property def area(self): return self.width * self.height def contains(self, pixcoord): cos_angle = np.cos(self.angle) sin_angle = np.sin(self.angle) dx = pixcoord.x - self.center.x dy = pixcoord.y - self.center.y dx_rot = cos_angle * dx + sin_angle * dy dy_rot = sin_angle * dx - cos_angle * dy in_rect = ((np.abs(dx_rot) < self.width * 0.5) & (np.abs(dy_rot) < self.height * 0.5)) if self.meta.get('include', True): return in_rect else: return np.logical_not(in_rect) def to_sky(self, wcs): center = wcs.pixel_to_world(self.center.x, self.center.y) _, pixscale, north_angle = pixel_scale_angle_at_skycoord(center, wcs) width = Angle(self.width * u.pix * pixscale, 'arcsec') height = Angle(self.height * u.pix * pixscale, 'arcsec') # region sky angles are defined relative to the WCS longitude axis; # photutils aperture sky angles are defined as the PA of the # semimajor axis (i.e., relative to the WCS latitude axis) angle = self.angle - (north_angle - 90 * u.deg) return RectangleSkyRegion(center, width, height, angle=angle, meta=self.meta.copy(), visual=self.visual.copy()) @property def bounding_box(self): w2 = self.width / 2. h2 = self.height / 2. cos_angle = np.cos(self.angle) # self.angle is a Quantity sin_angle = np.sin(self.angle) # self.angle is a Quantity dx1 = abs(w2 * cos_angle - h2 * sin_angle) dy1 = abs(w2 * sin_angle + h2 * cos_angle) dx2 = abs(w2 * cos_angle + h2 * sin_angle) dy2 = abs(w2 * sin_angle - h2 * cos_angle) dx = max(dx1, dx2) dy = max(dy1, dy2) xmin = self.center.x - dx xmax = self.center.x + dx ymin = self.center.y - dy ymax = self.center.y + dy return RegionBoundingBox.from_float(xmin, xmax, ymin, ymax) def to_mask(self, mode='center', subpixels=5): # NOTE: assumes this class represents a single rectangle self._validate_mode(mode, subpixels) if mode == 'center': mode = 'subpixels' subpixels = 1 # Find bounding box and mask size bbox = self.bounding_box ny, nx = bbox.shape # Find position of pixel edges and recenter so that circle is at # origin xmin = float(bbox.ixmin) - 0.5 - self.center.x xmax = float(bbox.ixmax) - 0.5 - self.center.x ymin = float(bbox.iymin) - 0.5 - self.center.y ymax = float(bbox.iymax) - 0.5 - self.center.y if mode == 'subpixels': use_exact = 0 else: use_exact = 1 fraction = rectangular_overlap_grid(xmin, xmax, ymin, ymax, nx, ny, self.width, self.height, self.angle.to(u.rad).value, use_exact, subpixels) return RegionMask(fraction, bbox=bbox) def as_artist(self, origin=(0, 0), **kwargs): """ Return a matplotlib patch object for this region (`matplotlib.patches.Rectangle`). Parameters ---------- origin : array_like, optional The ``(x, y)`` pixel position of the origin of the displayed image. **kwargs : dict Any keyword arguments accepted by `~matplotlib.patches.Rectangle`. These keywords will override any visual meta attributes of this region. Returns ------- artist : `~matplotlib.patches.Rectangle` A matplotlib rectangle patch. """ from matplotlib.patches import Rectangle xy = self._lower_left_xy() xy = xy[0] - origin[0], xy[1] - origin[1] width = self.width height = self.height # matplotlib expects rotation in degrees (anti-clockwise) angle = self.angle.to('deg').value mpl_kwargs = self.visual.define_mpl_kwargs(self._mpl_artist) mpl_kwargs.update(kwargs) return Rectangle(xy=xy, width=width, height=height, angle=angle, **mpl_kwargs) def _update_from_mpl_selector(self, *args, **kwargs): xmin, xmax, ymin, ymax = self._mpl_selector.extents self.center = PixCoord(x=0.5 * (xmin + xmax), y=0.5 * (ymin + ymax)) self.width = (xmax - xmin) self.height = (ymax - ymin) self.angle = 0. * u.deg if self._mpl_selector_callback is not None: self._mpl_selector_callback(self) def as_mpl_selector(self, ax, active=True, sync=True, callback=None, **kwargs): """ A matplotlib editable widget for the region (`matplotlib.widgets.RectangleSelector`). Parameters ---------- ax : `~matplotlib.axes.Axes` The matplotlib axes to add the selector to. active : bool, optional Whether the selector should be active by default. sync : bool, optional If `True` (the default), the region will be kept in sync with the selector. Otherwise, the selector will be initialized with the values from the region but the two will then be disconnected. callback : callable, optional If specified, this function will be called every time the region is updated. This only has an effect if ``sync`` is `True`. If a callback is set, it is called for the first time once the selector has been created. drag_from_anywhere : bool, optional If `True`, the selector can be moved by clicking anywhere within its bounds, else only at the central anchor (only available with matplotlib 3.5 upwards; default: `False`). **kwargs : dict Additional keyword arguments are passed to `matplotlib.widgets.RectangleSelector`. Returns ------- selector : `matplotlib.widgets.RectangleSelector` The matplotlib selector. Notes ----- Once a selector has been created, you will need to keep a reference to it until you no longer need it. In addition, you can enable/disable the selector at any point by calling ``selector.set_active(True)`` or ``selector.set_active(False)``. """ from matplotlib.widgets import RectangleSelector from regions._utils.optional_deps import MPL_VERSION if hasattr(self, '_mpl_selector'): raise AttributeError('Cannot attach more than one selector to a region.') if self.angle.value != 0: raise NotImplementedError('Cannot create matplotlib selector for ' 'rotated rectangle.') if sync: sync_callback = self._update_from_mpl_selector else: def sync_callback(*args, **kwargs): pass rectprops = {'edgecolor': self.visual.get('color', 'black'), 'facecolor': 'none', 'linewidth': self.visual.get('linewidth', 1), 'linestyle': self.visual.get('linestyle', 'solid')} rectprops.update(kwargs.pop('props', dict())) # `rectprops` renamed `props` in mpl 3.5 and deprecated for 3.7. if MPL_VERSION < 35: kwargs.update({'rectprops': rectprops}) else: kwargs.update({'props': rectprops}) self._mpl_selector = RectangleSelector(ax, sync_callback, interactive=True, **kwargs) self._mpl_selector.extents = (self.center.x - self.width / 2, self.center.x + self.width / 2, self.center.y - self.height / 2, self.center.y + self.height / 2) self._mpl_selector.set_active(active) self._mpl_selector_callback = callback if sync and self._mpl_selector_callback is not None: self._mpl_selector_callback(self) return self._mpl_selector @property def corners(self): """ Return the x, y coordinate pairs that define the corners. """ corners = [(-self.width / 2, -self.height / 2), (self.width / 2, -self.height / 2), (self.width / 2, self.height / 2), (-self.width / 2, self.height / 2), ] rotmat = [[np.cos(self.angle), np.sin(self.angle)], [-np.sin(self.angle), np.cos(self.angle)]] return np.dot(corners, rotmat) + np.array([self.center.x, self.center.y]) def to_polygon(self): """ Return a 4-sided polygon equivalent to this rectangle. """ x, y = self.corners.T vertices = PixCoord(x=x, y=y) return PolygonPixelRegion(vertices=vertices, meta=self.meta.copy(), visual=self.visual.copy()) def _lower_left_xy(self): """ Compute lower left ``xy`` pixel position. This is used for the conversion to matplotlib in ``as_artist``. Taken from http://photutils.readthedocs.io/en/latest/_modules/photutils/ape rture/rectangle.html#RectangularAperture.plot. """ hw = self.width / 2. hh = self.height / 2. sint = np.sin(self.angle) cost = np.cos(self.angle) dx = (hh * sint) - (hw * cost) dy = -(hh * cost) - (hw * sint) x = self.center.x + dx y = self.center.y + dy return x, y def rotate(self, center, angle): """ Rotate the region. Positive ``angle`` corresponds to counter-clockwise rotation. Parameters ---------- center : `~regions.PixCoord` The rotation center point. angle : `~astropy.coordinates.Angle` The rotation angle. Returns ------- region : `RectanglePixelRegion` The rotated region (which is an independent copy). """ center = self.center.rotate(center, angle) angle = self.angle + angle return self.copy(center=center, angle=angle) class RectangleSkyRegion(SkyRegion): """ A rectangle in sky coordinates. Parameters ---------- center : `~astropy.coordinates.SkyCoord` The position of the center of the rectangle. width : `~astropy.units.Quantity` The width of the rectangle (before rotation) as an angle. height : `~astropy.units.Quantity` The height of the rectangle (before rotation) as an angle. angle : `~astropy.units.Quantity`, optional The rotation angle of the rectangle, measured anti-clockwise. If set to zero (the default), the width axis is lined up with the longitude axis of the celestial coordinates. meta : `~regions.RegionMeta` or `dict`, optional A dictionary that stores the meta attributes of the region. visual : `~regions.RegionVisual` or `dict`, optional A dictionary that stores the visual meta attributes of the region. """ _params = ('center', 'width', 'height', 'angle') center = ScalarSkyCoord('The center position as a |SkyCoord|.') width = PositiveScalarAngle('The width of the rectangle (before rotation) ' 'as a |Quantity| angle.') height = PositiveScalarAngle('The height of the rectangle (before ' 'rotation) as a |Quantity| angle.') angle = ScalarAngle('The rotation angle measured anti-clockwise as a ' '|Quantity| angle.') meta = RegionMetaDescr('The meta attributes as a |RegionMeta|') visual = RegionVisualDescr('The visual attributes as a |RegionVisual|.') def __init__(self, center, width, height, angle=0 * u.deg, meta=None, visual=None): self.center = center self.width = width self.height = height self.angle = angle self.meta = meta or RegionMeta() self.visual = visual or RegionVisual() def to_pixel(self, wcs): center, pixscale, north_angle = pixel_scale_angle_at_skycoord( self.center, wcs) width = (self.width / pixscale).to(u.pix).value height = (self.height / pixscale).to(u.pix).value # region sky angles are defined relative to the WCS longitude axis; # photutils aperture sky angles are defined as the PA of the # semimajor axis (i.e., relative to the WCS latitude axis) angle = self.angle + (north_angle - 90 * u.deg) return RectanglePixelRegion(center, width, height, angle=angle, meta=self.meta.copy(), visual=self.visual.copy()) ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1700163875.5345402 regions-0.8/regions/shapes/tests/0000755000175100001770000000000014525470444016540 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/shapes/tests/__init__.py0000644000175100001770000000000014525470416020636 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1700163875.5345402 regions-0.8/regions/shapes/tests/data/0000755000175100001770000000000014525470444017451 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/shapes/tests/data/example_header.fits0000644000175100001770000001320014525470416023276 0ustar00runnerdockerSIMPLE = T / conforms to FITS standard BITPIX = 64 / array data type NAXIS = 2 / number of array dimensions NAXIS1 = 1 NAXIS2 = 1 WCSAXES = 2 / Number of coordinate axes CRPIX1 = 100.5 / Pixel coordinate of reference point CRPIX2 = 100.5 / Pixel coordinate of reference point CDELT1 = -0.02 / [deg] Coordinate increment at reference point CDELT2 = 0.02 / [deg] Coordinate increment at reference point CUNIT1 = 'deg ' / Units of coordinate increment and value CUNIT2 = 'deg ' / Units of coordinate increment and value CTYPE1 = 'GLON-CAR' / galactic longitude, plate caree projection CTYPE2 = 'GLAT-CAR' / galactic latitude, plate caree projection CRVAL1 = 0 / [deg] Coordinate value at reference point CRVAL2 = 0 / [deg] Coordinate value at reference point LONPOLE = 0.0 / [deg] Native longitude of celestial pole LATPOLE = 90.0 / [deg] Native latitude of celestial pole BUNIT = '' END ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1700163875.5345402 regions-0.8/regions/shapes/tests/reference/0000755000175100001770000000000014525470444020476 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/shapes/tests/reference/test_to_mask_circ-mode_center.txt0000644000175100001770000000133714525470416027220 0ustar00runnerdocker0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/shapes/tests/reference/test_to_mask_circ-mode_exact.txt0000644000175100001770000000133714525470416027044 0ustar00runnerdocker0.00000000e+00 1.12637824e-01 5.47795293e-01 6.97159714e-01 5.36338125e-01 9.98826171e-02 0.00000000e+00 1.41612171e-01 9.21332849e-01 1.00000000e+00 1.00000000e+00 1.00000000e+00 9.06385082e-01 1.20533937e-01 6.46660408e-01 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 6.10634408e-01 8.43986340e-01 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 8.07960340e-01 7.30305012e-01 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 6.94279012e-01 2.73584439e-01 9.91864462e-01 1.00000000e+00 1.00000000e+00 1.00000000e+00 9.86382743e-01 2.43040158e-01 0.00000000e+00 3.04862210e-01 8.10551293e-01 9.59915714e-01 7.99094125e-01 2.82640956e-01 0.00000000e+00 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/shapes/tests/reference/test_to_mask_circ-mode_subpixels-subpixels_1.txt0000644000175100001770000000133714525470416032212 0ustar00runnerdocker0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/shapes/tests/reference/test_to_mask_circ-mode_subpixels-subpixels_18.txt0000644000175100001770000000133714525470416032302 0ustar00runnerdocker0.00000000e+00 1.11111111e-01 5.52469136e-01 7.00617284e-01 5.33950617e-01 9.87654321e-02 0.00000000e+00 1.41975309e-01 9.16666667e-01 1.00000000e+00 1.00000000e+00 1.00000000e+00 9.10493827e-01 1.20370370e-01 6.48148148e-01 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 6.04938272e-01 8.30246914e-01 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 8.17901235e-01 7.31481481e-01 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 6.94444444e-01 2.71604938e-01 9.90740741e-01 1.00000000e+00 1.00000000e+00 1.00000000e+00 9.87654321e-01 2.40740741e-01 0.00000000e+00 3.02469136e-01 8.11728395e-01 9.47530864e-01 7.99382716e-01 2.83950617e-01 0.00000000e+00 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/shapes/tests/reference/test_to_mask_circ-mode_subpixels-subpixels_5.txt0000644000175100001770000000133714525470416032216 0ustar00runnerdocker0.00000000e+00 1.20000000e-01 5.20000000e-01 7.20000000e-01 5.20000000e-01 8.00000000e-02 0.00000000e+00 1.20000000e-01 9.20000000e-01 1.00000000e+00 1.00000000e+00 1.00000000e+00 8.80000000e-01 1.20000000e-01 6.40000000e-01 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 6.00000000e-01 8.00000000e-01 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 8.00000000e-01 7.20000000e-01 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 7.20000000e-01 2.80000000e-01 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 2.40000000e-01 0.00000000e+00 3.20000000e-01 8.00000000e-01 1.00000000e+00 8.00000000e-01 2.80000000e-01 0.00000000e+00 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/shapes/tests/reference/test_to_mask_elli-mode_center.txt0000644000175100001770000000245014525470416027222 0ustar00runnerdocker0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/shapes/tests/reference/test_to_mask_elli-mode_exact.txt0000644000175100001770000000245014525470416027046 0ustar00runnerdocker0.00000000e+00 8.01667043e-02 4.87639631e-01 7.30817612e-01 8.06746395e-01 7.45670005e-01 5.55430691e-01 2.27566801e-01 1.38968315e-04 0.00000000e+00 0.00000000e+00 1.41676247e-01 9.08318173e-01 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 7.30547011e-01 1.05109527e-01 0.00000000e+00 5.95752634e-01 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 8.66894487e-01 6.73606729e-02 6.00269727e-01 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 4.91612660e-01 1.87245096e-01 9.74610937e-01 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 6.06039373e-01 0.00000000e+00 2.94605839e-01 9.33077841e-01 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 9.83823931e-01 2.40883497e-01 0.00000000e+00 0.00000000e+00 8.19102899e-02 5.04782713e-01 8.27328098e-01 9.90006863e-01 1.00000000e+00 9.74313237e-01 7.37734089e-01 2.41844795e-01 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 2.28614469e-02 6.92455973e-02 1.36850721e-02 0.00000000e+00 0.00000000e+00 0.00000000e+00 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/shapes/tests/reference/test_to_mask_elli-mode_subpixels-subpixels_1.txt0000644000175100001770000000245014525470416032214 0ustar00runnerdocker0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/shapes/tests/reference/test_to_mask_elli-mode_subpixels-subpixels_18.txt0000644000175100001770000000245014525470416032304 0ustar00runnerdocker0.00000000e+00 8.33333333e-02 4.84567901e-01 7.31481481e-01 8.11728395e-01 7.43827160e-01 5.55555556e-01 2.25308642e-01 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.41975309e-01 9.07407407e-01 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 7.28395062e-01 1.01851852e-01 0.00000000e+00 5.95679012e-01 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 8.61111111e-01 6.48148148e-02 6.01851852e-01 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 4.90740741e-01 1.91358025e-01 9.75308642e-01 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 5.95679012e-01 0.00000000e+00 2.96296296e-01 9.35185185e-01 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 9.81481481e-01 2.43827160e-01 0.00000000e+00 0.00000000e+00 8.02469136e-02 5.03086420e-01 8.27160494e-01 9.90740741e-01 1.00000000e+00 9.72222222e-01 7.37654321e-01 2.37654321e-01 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 2.46913580e-02 5.55555556e-02 1.54320988e-02 0.00000000e+00 0.00000000e+00 0.00000000e+00 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/shapes/tests/reference/test_to_mask_elli-mode_subpixels-subpixels_5.txt0000644000175100001770000000245014525470416032220 0ustar00runnerdocker0.00000000e+00 8.00000000e-02 4.80000000e-01 7.60000000e-01 8.00000000e-01 7.60000000e-01 5.60000000e-01 2.40000000e-01 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.20000000e-01 8.80000000e-01 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 7.20000000e-01 1.20000000e-01 0.00000000e+00 5.60000000e-01 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 8.80000000e-01 8.00000000e-02 5.60000000e-01 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 5.20000000e-01 2.00000000e-01 9.60000000e-01 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 6.00000000e-01 0.00000000e+00 2.40000000e-01 9.60000000e-01 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 2.40000000e-01 0.00000000e+00 0.00000000e+00 8.00000000e-02 5.20000000e-01 8.40000000e-01 1.00000000e+00 1.00000000e+00 1.00000000e+00 7.20000000e-01 2.00000000e-01 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/shapes/tests/reference/test_to_mask_poly-mode_center.txt0000644000175100001770000000133714525470416027263 0ustar00runnerdocker1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/shapes/tests/reference/test_to_mask_poly-mode_subpixels-subpixels_1.txt0000644000175100001770000000133714525470416032255 0ustar00runnerdocker1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/shapes/tests/reference/test_to_mask_poly-mode_subpixels-subpixels_18.txt0000644000175100001770000000133714525470416032345 0ustar00runnerdocker4.19753086e-01 3.98148148e-01 2.31481481e-01 6.17283951e-02 0.00000000e+00 0.00000000e+00 0.00000000e+00 6.04938272e-01 1.00000000e+00 1.00000000e+00 1.00000000e+00 8.88888889e-01 6.94444444e-01 1.85185185e-02 4.07407407e-01 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 5.83333333e-01 0.00000000e+00 1.94444444e-01 1.00000000e+00 1.00000000e+00 1.00000000e+00 9.72222222e-01 1.11111111e-01 0.00000000e+00 2.16049383e-02 9.72222222e-01 1.00000000e+00 1.00000000e+00 6.01851852e-01 0.00000000e+00 0.00000000e+00 0.00000000e+00 3.91975309e-01 8.88888889e-01 9.81481481e-01 1.29629630e-01 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 2.77777778e-02 2.56172840e-01 0.00000000e+00 0.00000000e+00 0.00000000e+00 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/shapes/tests/reference/test_to_mask_poly-mode_subpixels-subpixels_5.txt0000644000175100001770000000133714525470416032261 0ustar00runnerdocker4.40000000e-01 4.00000000e-01 2.00000000e-01 4.00000000e-02 0.00000000e+00 0.00000000e+00 0.00000000e+00 6.00000000e-01 1.00000000e+00 1.00000000e+00 1.00000000e+00 8.80000000e-01 6.80000000e-01 0.00000000e+00 4.00000000e-01 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 5.60000000e-01 0.00000000e+00 2.00000000e-01 1.00000000e+00 1.00000000e+00 1.00000000e+00 9.60000000e-01 8.00000000e-02 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 6.00000000e-01 0.00000000e+00 0.00000000e+00 0.00000000e+00 4.00000000e-01 9.20000000e-01 1.00000000e+00 1.60000000e-01 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 4.00000000e-02 2.80000000e-01 0.00000000e+00 0.00000000e+00 0.00000000e+00 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/shapes/tests/reference/test_to_mask_rect-mode_center.txt0000644000175100001770000000166114525470416027235 0ustar00runnerdocker0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/shapes/tests/reference/test_to_mask_rect-mode_subpixels-subpixels_1.txt0000644000175100001770000000166114525470416032227 0ustar00runnerdocker0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/shapes/tests/reference/test_to_mask_rect-mode_subpixels-subpixels_18.txt0000644000175100001770000000166114525470416032317 0ustar00runnerdocker0.00000000e+00 1.11111111e-01 3.08641975e-02 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 7.56172840e-01 9.78395062e-01 7.99382716e-01 5.83333333e-01 3.70370370e-01 1.57407407e-01 6.17283951e-03 0.00000000e+00 1.23456790e-02 9.59876543e-01 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 9.38271605e-01 3.14814815e-01 1.82098765e-01 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 2.00617284e-01 3.95061728e-01 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 9.66049383e-01 2.16049383e-02 2.77777778e-02 2.16049383e-01 4.29012346e-01 6.41975309e-01 8.54938272e-01 9.96913580e-01 1.00000000e+00 7.77777778e-01 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 7.09876543e-02 2.77777778e-01 2.77777778e-01 0.00000000e+00 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/shapes/tests/reference/test_to_mask_rect-mode_subpixels-subpixels_5.txt0000644000175100001770000000166114525470416032233 0ustar00runnerdocker0.00000000e+00 1.20000000e-01 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 7.60000000e-01 1.00000000e+00 8.00000000e-01 5.60000000e-01 3.60000000e-01 1.60000000e-01 0.00000000e+00 0.00000000e+00 0.00000000e+00 9.60000000e-01 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 9.60000000e-01 3.20000000e-01 1.60000000e-01 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 2.00000000e-01 4.00000000e-01 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 1.00000000e+00 0.00000000e+00 0.00000000e+00 2.40000000e-01 4.40000000e-01 6.40000000e-01 8.40000000e-01 1.00000000e+00 1.00000000e+00 7.60000000e-01 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 0.00000000e+00 8.00000000e-02 2.80000000e-01 2.40000000e-01 0.00000000e+00 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/shapes/tests/setup_package.py0000644000175100001770000000024114525470416021721 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst def get_package_data(): return {'regions.shapes.tests': ['reference/*.txt', 'data/*.fits']} ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/shapes/tests/test_annulus.py0000644000175100001770000004000514525470416021634 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst import astropy.units as u import numpy as np from astropy.coordinates import SkyCoord from astropy.tests.helper import assert_quantity_allclose from numpy.testing import assert_allclose from regions.core import PixCoord, RegionMeta, RegionVisual from regions.shapes.annulus import (CircleAnnulusPixelRegion, CircleAnnulusSkyRegion, EllipseAnnulusPixelRegion, EllipseAnnulusSkyRegion, RectangleAnnulusPixelRegion, RectangleAnnulusSkyRegion) from regions.shapes.tests.test_common import (BaseTestPixelRegion, BaseTestSkyRegion) from regions.tests.helpers import make_simple_wcs class TestCircleAnnulusPixelRegion(BaseTestPixelRegion): meta = RegionMeta({'text': 'test'}) visual = RegionVisual({'color': 'blue'}) reg = CircleAnnulusPixelRegion(PixCoord(3, 4), inner_radius=2, outer_radius=3, meta=meta, visual=visual) sample_box = [0, 6, 1, 7] inside = [(3, 2)] outside = [(3, 0)] expected_area = 5 * np.pi expected_repr = ('') expected_str = ('Region: CircleAnnulusPixelRegion\ncenter: ' 'PixCoord(x=3, y=4)\ninner_radius: 2\nouter_radius: 3') skycoord = SkyCoord(3 * u.deg, 4 * u.deg, frame='icrs') wcs = make_simple_wcs(skycoord, 5 * u.arcsec, 20) def test_init(self): assert_quantity_allclose(self.reg.center.x, 3) assert_quantity_allclose(self.reg.center.y, 4) assert_quantity_allclose(self.reg.inner_radius, 2) assert_quantity_allclose(self.reg.outer_radius, 3) def test_copy(self): reg = self.reg.copy() assert reg.center.xy == (3, 4) assert reg.inner_radius == 2 assert reg.outer_radius == 3 assert reg.meta == self.meta assert reg.visual == self.visual def test_pix_sky_roundtrip(self): wcs = make_simple_wcs(SkyCoord(2 * u.deg, 3 * u.deg), 0.1 * u.deg, 20) reg_new = self.reg.to_sky(wcs).to_pixel(wcs) assert_allclose(reg_new.center.x, self.reg.center.x) assert_allclose(reg_new.center.y, self.reg.center.y) assert_allclose(reg_new.inner_radius, self.reg.inner_radius) assert_allclose(reg_new.outer_radius, self.reg.outer_radius) assert reg_new.meta == self.reg.meta assert reg_new.visual == self.reg.visual # test that converted region meta and visual are copies and not views reg_new.meta['text'] = 'new' reg_new.visual['color'] = 'green' assert reg_new.meta['text'] != self.reg.meta['text'] assert reg_new.visual['color'] != self.reg.visual['color'] def test_transformation(self): skyannulus = self.reg.to_sky(wcs=self.wcs) assert isinstance(skyannulus, CircleAnnulusSkyRegion) def test_rotate(self): reg = self.reg.rotate(PixCoord(2, 3), 90 * u.deg) assert_allclose(reg.center.xy, (1, 4)) def test_eq(self): reg = self.reg.copy() assert reg == self.reg reg.inner_radius = 3 assert reg != self.reg class TestCircleAnnulusSkyRegion(BaseTestSkyRegion): meta = RegionMeta({'text': 'test'}) visual = RegionVisual({'color': 'blue'}) reg = CircleAnnulusSkyRegion(SkyCoord(3 * u.deg, 4 * u.deg), 20 * u.arcsec, 30 * u.arcsec, meta=meta, visual=visual) skycoord = SkyCoord(3 * u.deg, 4 * u.deg, frame='icrs') wcs = make_simple_wcs(skycoord, 5 * u.arcsec, 20) expected_repr = (', inner_radius=20.0 ' 'arcsec, outer_radius=30.0 arcsec)>') expected_str = ('Region: CircleAnnulusSkyRegion\ncenter: \ninner_radius: ' '20.0 arcsec\nouter_radius: 30.0 arcsec') def test_init(self): assert_quantity_allclose(self.reg.center.ra, self.skycoord.ra) assert_quantity_allclose(self.reg.inner_radius, 20 * u.arcsec) assert_quantity_allclose(self.reg.outer_radius, 30 * u.arcsec) def test_copy(self): reg = self.reg.copy() assert_allclose(reg.center.ra.deg, 3) assert_allclose(reg.inner_radius.to_value('arcsec'), 20) assert_allclose(reg.outer_radius.to_value('arcsec'), 30) assert reg.meta == self.meta assert reg.visual == self.visual def test_contains(self): assert not self.reg.contains(self.skycoord, self.wcs) test_coord = SkyCoord(3 * u.deg, 10 * u.deg, frame='icrs') assert not self.reg.contains(test_coord, self.wcs) def test_transformation(self): pixannulus = self.reg.to_pixel(wcs=self.wcs) assert isinstance(pixannulus, CircleAnnulusPixelRegion) def test_eq(self): reg = self.reg.copy() assert reg == self.reg reg.inner_radius = 10 * u.arcsec assert reg != self.reg class TestEllipseAnnulusPixelRegion(BaseTestPixelRegion): meta = RegionMeta({'text': 'test'}) visual = RegionVisual({'color': 'blue'}) reg = EllipseAnnulusPixelRegion(PixCoord(3, 4), 2, 5, 5, 8, meta=meta, visual=visual) sample_box = [1, 6, 0, 9] inside = [(3, 7)] outside = [(3, 4)] expected_area = 7.5 * np.pi expected_repr = ('') expected_str = ('Region: EllipseAnnulusPixelRegion\ncenter: ' 'PixCoord(x=3, y=4)\ninner_width: 2\nouter_width: 5\n' 'inner_height: 5\nouter_height: 8\nangle: 0.0 deg') skycoord = SkyCoord(3 * u.deg, 4 * u.deg, frame='icrs') wcs = make_simple_wcs(skycoord, 5 * u.arcsec, 20) def test_init(self): assert_quantity_allclose(self.reg.center.x, 3) assert_quantity_allclose(self.reg.center.y, 4) assert_quantity_allclose(self.reg.inner_width, 2) assert_quantity_allclose(self.reg.inner_height, 5) assert_quantity_allclose(self.reg.outer_width, 5) assert_quantity_allclose(self.reg.outer_height, 8) def test_copy(self): reg = self.reg.copy() assert reg.center.xy == (3, 4) assert reg.inner_width == 2 assert reg.inner_height == 5 assert reg.outer_width == 5 assert reg.outer_height == 8 assert_allclose(reg.angle.to_value('deg'), 0) assert reg.meta == self.meta assert reg.visual == self.visual def test_pix_sky_roundtrip(self): wcs = make_simple_wcs(SkyCoord(2 * u.deg, 3 * u.deg), 0.1 * u.deg, 20) reg_new = self.reg.to_sky(wcs).to_pixel(wcs) assert_allclose(reg_new.center.x, self.reg.center.x) assert_allclose(reg_new.center.y, self.reg.center.y) assert_allclose(reg_new.inner_width, self.reg.inner_width) assert_allclose(reg_new.outer_width, self.reg.outer_width) assert_allclose(reg_new.inner_height, self.reg.inner_height) assert_allclose(reg_new.outer_height, self.reg.outer_height) assert_quantity_allclose(reg_new.angle, self.reg.angle) assert reg_new.meta == self.reg.meta assert reg_new.visual == self.reg.visual # test that converted region meta and visual are copies and not views reg_new.meta['text'] = 'new' reg_new.visual['color'] = 'green' assert reg_new.meta['text'] != self.reg.meta['text'] assert reg_new.visual['color'] != self.reg.visual['color'] def test_transformation(self): skyannulus = self.reg.to_sky(wcs=self.wcs) assert isinstance(skyannulus, EllipseAnnulusSkyRegion) def test_rotate(self): reg = self.reg.rotate(PixCoord(2, 3), 90 * u.deg) assert_allclose(reg.center.xy, (1, 4)) assert_allclose(reg.angle.to_value('deg'), 90) def test_eq(self): reg = self.reg.copy() assert reg == self.reg reg.outer_height = 10 assert reg != self.reg class TestEllipseAnnulusSkyRegion(BaseTestSkyRegion): meta = RegionMeta({'text': 'test'}) visual = RegionVisual({'color': 'blue'}) skycoord = SkyCoord(3 * u.deg, 4 * u.deg, frame='icrs') reg = EllipseAnnulusSkyRegion(skycoord, 20 * u.arcsec, 50 * u.arcsec, 50 * u.arcsec, 80 * u.arcsec, meta=meta, visual=visual) wcs = make_simple_wcs(skycoord, 5 * u.arcsec, 20) expected_repr = (', inner_width=20.0 ' 'arcsec, outer_width=50.0 arcsec, inner_height=50.0 ' 'arcsec, outer_height=80.0 arcsec, angle=0.0 deg)>') expected_str = ('Region: EllipseAnnulusSkyRegion\ncenter: \ninner_width: ' '20.0 arcsec\nouter_width: 50.0 arcsec\n' 'inner_height: 50.0 arcsec\nouter_height: ' '80.0 arcsec\nangle: 0.0 deg') def test_init(self): assert_quantity_allclose(self.reg.center.ra, self.skycoord.ra) assert_quantity_allclose(self.reg.inner_width, 20 * u.arcsec) assert_quantity_allclose(self.reg.inner_height, 50 * u.arcsec) def test_copy(self): reg = self.reg.copy() assert_allclose(reg.center.ra.deg, 3) assert_allclose(reg.inner_width.to_value('arcsec'), 20) assert_allclose(reg.inner_height.to_value('arcsec'), 50) assert_allclose(reg.outer_width.to_value('arcsec'), 50) assert_allclose(reg.outer_height.to_value('arcsec'), 80) assert_allclose(reg.angle.to_value('deg'), 0) assert reg.meta == self.meta assert reg.visual == self.visual def test_contains(self): assert not self.reg.contains(self.skycoord, self.wcs) test_coord = SkyCoord(3 * u.deg, 10 * u.deg, frame='icrs') assert not self.reg.contains(test_coord, self.wcs) def test_transformation(self): pixannulus = self.reg.to_pixel(wcs=self.wcs) assert isinstance(pixannulus, EllipseAnnulusPixelRegion) def test_eq(self): reg = self.reg.copy() assert reg == self.reg reg.outer_height = 85 * u.arcsec assert reg != self.reg class TestRectangleAnnulusPixelRegion(BaseTestPixelRegion): meta = RegionMeta({'text': 'test'}) visual = RegionVisual({'color': 'blue'}) reg = RectangleAnnulusPixelRegion(PixCoord(3, 4), 2, 5, 5, 8, meta=meta, visual=visual) sample_box = [1, 6, 0, 9] inside = [(3, 7)] outside = [(3, 4)] expected_area = 30 expected_repr = ('') expected_str = ('Region: RectangleAnnulusPixelRegion\ncenter: ' 'PixCoord(x=3, y=4)\ninner_width: 2\nouter_width: 5\n' 'inner_height: 5\nouter_height: 8\nangle: 0.0 deg') skycoord = SkyCoord(3 * u.deg, 4 * u.deg, frame='icrs') wcs = make_simple_wcs(skycoord, 5 * u.arcsec, 20) def test_init(self): assert_quantity_allclose(self.reg.center.x, 3) assert_quantity_allclose(self.reg.center.y, 4) assert_quantity_allclose(self.reg.inner_width, 2) assert_quantity_allclose(self.reg.inner_height, 5) assert_quantity_allclose(self.reg.outer_width, 5) assert_quantity_allclose(self.reg.outer_height, 8) def test_copy(self): reg = self.reg.copy() assert_quantity_allclose(reg.center.x, 3) assert_quantity_allclose(reg.center.y, 4) assert_quantity_allclose(reg.inner_width, 2) assert_quantity_allclose(reg.inner_height, 5) assert_quantity_allclose(reg.outer_width, 5) assert_quantity_allclose(reg.outer_height, 8) assert reg.meta == self.meta assert reg.visual == self.visual def test_pix_sky_roundtrip(self): wcs = make_simple_wcs(SkyCoord(2 * u.deg, 3 * u.deg), 0.1 * u.deg, 20) reg_new = self.reg.to_sky(wcs).to_pixel(wcs) assert_allclose(reg_new.center.x, self.reg.center.x) assert_allclose(reg_new.center.y, self.reg.center.y) assert_allclose(reg_new.inner_width, self.reg.inner_width) assert_allclose(reg_new.outer_width, self.reg.outer_width) assert_allclose(reg_new.inner_height, self.reg.inner_height) assert_allclose(reg_new.outer_height, self.reg.outer_height) assert_quantity_allclose(reg_new.angle, self.reg.angle) assert reg_new.meta == self.reg.meta assert reg_new.visual == self.reg.visual # test that converted region meta and visual are copies and not views reg_new.meta['text'] = 'new' reg_new.visual['color'] = 'green' assert reg_new.meta['text'] != self.reg.meta['text'] assert reg_new.visual['color'] != self.reg.visual['color'] def test_transformation(self): skyannulus = self.reg.to_sky(wcs=self.wcs) assert isinstance(skyannulus, RectangleAnnulusSkyRegion) def test_rotate(self): reg = self.reg.rotate(PixCoord(2, 3), 90 * u.deg) assert_allclose(reg.center.xy, (1, 4)) assert_allclose(reg.angle.to_value('deg'), 90) def test_eq(self): reg = self.reg.copy() assert reg == self.reg reg.outer_height = 10 assert reg != self.reg class TestRectangleAnnulusSkyRegion(BaseTestSkyRegion): meta = RegionMeta({'text': 'test'}) visual = RegionVisual({'color': 'blue'}) skycoord = SkyCoord(3 * u.deg, 4 * u.deg, frame='icrs') reg = RectangleAnnulusSkyRegion(skycoord, 20 * u.arcsec, 50 * u.arcsec, 50 * u.arcsec, 80 * u.arcsec, meta=meta, visual=visual) wcs = make_simple_wcs(skycoord, 5 * u.arcsec, 20) expected_repr = (', inner_width=20.0 ' 'arcsec, outer_width=50.0 arcsec, inner_height=50.0 ' 'arcsec, outer_height=80.0 arcsec, angle=0.0 deg)>') expected_str = ('Region: RectangleAnnulusSkyRegion\ncenter: \ninner_width: ' '20.0 arcsec\nouter_width: 50.0 arcsec\n' 'inner_height: 50.0 arcsec\nouter_height: 80.0 arcsec\n' 'angle: 0.0 deg') def test_init(self): assert_quantity_allclose(self.reg.center.ra, self.skycoord.ra) assert_quantity_allclose(self.reg.inner_width, 20 * u.arcsec) assert_quantity_allclose(self.reg.inner_height, 50 * u.arcsec) def test_copy(self): reg = self.reg.copy() assert_allclose(reg.center.ra.deg, 3) assert_allclose(reg.inner_width.to_value('arcsec'), 20) assert_allclose(reg.inner_height.to_value('arcsec'), 50) assert_allclose(reg.outer_width.to_value('arcsec'), 50) assert_allclose(reg.outer_height.to_value('arcsec'), 80) assert_allclose(reg.angle.to_value('deg'), 0) assert reg.meta == self.meta assert reg.visual == self.visual def test_contains(self): assert not self.reg.contains(self.skycoord, self.wcs) test_coord = SkyCoord(3 * u.deg, 10 * u.deg, frame='icrs') assert not self.reg.contains(test_coord, self.wcs) def test_transformation(self): pixannulus = self.reg.to_pixel(wcs=self.wcs) assert isinstance(pixannulus, RectangleAnnulusPixelRegion) def test_eq(self): reg = self.reg.copy() assert reg == self.reg reg.outer_height = 85 * u.arcsec assert reg != self.reg ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/shapes/tests/test_api.py0000644000175100001770000002113514525470416020723 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst """ The tests in this file simply check what functionality is currently implemented and doesn't check anything about correctness. """ import itertools from collections import OrderedDict import astropy.units as u import pytest from astropy.coordinates import SkyCoord from astropy.wcs import WCS from regions.core.core import PixelRegion, Region, SkyRegion from regions.core.mask import RegionMask from regions.core.metadata import RegionMeta, RegionVisual from regions.core.pixcoord import PixCoord from regions.shapes.annulus import (CircleAnnulusPixelRegion, CircleAnnulusSkyRegion, EllipseAnnulusPixelRegion, EllipseAnnulusSkyRegion, RectangleAnnulusPixelRegion, RectangleAnnulusSkyRegion) from regions.shapes.circle import CirclePixelRegion, CircleSkyRegion from regions.shapes.ellipse import EllipsePixelRegion, EllipseSkyRegion from regions.shapes.point import PointPixelRegion, PointSkyRegion from regions.shapes.polygon import PolygonPixelRegion, PolygonSkyRegion from regions.shapes.rectangle import RectanglePixelRegion, RectangleSkyRegion PIXEL_REGIONS = [ CirclePixelRegion(PixCoord(3, 4), radius=5), CircleAnnulusPixelRegion(PixCoord(3, 4), 5, 7), EllipsePixelRegion(PixCoord(3, 4), width=7, height=5, angle=3 * u.deg), EllipseAnnulusPixelRegion(PixCoord(3, 4), 7, 9, 8, 10, angle=3 * u.deg), PolygonPixelRegion(PixCoord([1, 4, 3], [2, 4, 4])), RectanglePixelRegion(PixCoord(6, 5), width=3, height=5), RectangleAnnulusPixelRegion(PixCoord(6, 5), 3, 6, 5, 7), PointPixelRegion(PixCoord(1, 2))] SKY_REGIONS = [ CircleSkyRegion(SkyCoord(3 * u.deg, 4 * u.deg), radius=5 * u.deg), CircleAnnulusSkyRegion(SkyCoord(3 * u.deg, 4 * u.deg), 5 * u.deg, 7 * u.deg), EllipseSkyRegion(SkyCoord(3 * u.deg, 4 * u.deg), width=7 * u.deg, height=5 * u.deg, angle=3 * u.deg), EllipseAnnulusSkyRegion(SkyCoord(3 * u.deg, 4 * u.deg), 7 * u.deg, 9 * u.deg, 5 * u.deg, 9 * u.deg, angle=3 * u.deg), PolygonSkyRegion(SkyCoord([1, 4, 3] * u.deg, [2, 4, 4] * u.deg)), RectangleSkyRegion(SkyCoord(6 * u.deg, 5 * u.deg), width=3 * u.deg, height=5 * u.deg), RectangleAnnulusSkyRegion(SkyCoord(6 * u.deg, 5 * u.deg), 3 * u.deg, 5 * u.deg, 5 * u.deg, 7 * u.deg), PointSkyRegion(SkyCoord(6 * u.deg, 5 * u.deg))] MASK_MODES = ['center', 'exact', 'subpixels'] COMMON_WCS = WCS(naxis=2) COMMON_WCS.wcs.ctype = 'RA---TAN', 'DEC--TAN' def ids_func(arg): if isinstance(arg, Region): return arg.__class__.__name__ else: return str(arg) @pytest.mark.parametrize('region', [PIXEL_REGIONS[i] for i in (0, 2, 5)], ids=ids_func) def test_pix_in(region): assert PixCoord(5, 4) in region @pytest.mark.parametrize('region', PIXEL_REGIONS, ids=ids_func) def test_pix_area(region): # TODO: remove the pytest.skip once polygon area is implemented if isinstance(region, PolygonPixelRegion): pytest.skip() area = region.area assert not isinstance(area, u.Quantity) @pytest.mark.parametrize('region', PIXEL_REGIONS, ids=ids_func) def test_pix_to_sky(region): try: sky_region = region.to_sky(COMMON_WCS) assert isinstance(sky_region, SkyRegion) except NotImplementedError: pytest.xfail() @pytest.mark.parametrize(('region', 'mode'), itertools.product(PIXEL_REGIONS, MASK_MODES), ids=ids_func) def test_pix_to_mask(region, mode): try: mask = region.to_mask(mode=mode) assert isinstance(mask, RegionMask) except NotImplementedError: pytest.xfail() @pytest.mark.parametrize('region', SKY_REGIONS, ids=ids_func) def test_sky_in(region): region.contains(SkyCoord(1 * u.deg, 1 * u.deg, frame='icrs'), COMMON_WCS) @pytest.mark.parametrize('region', SKY_REGIONS, ids=ids_func) def test_sky_in_array(region): region.contains(SkyCoord([1, 2, 3] * u.deg, [3, 2, 1] * u.deg, frame='icrs'), COMMON_WCS) @pytest.mark.parametrize('region', SKY_REGIONS, ids=ids_func) def test_sky_to_pix(region): pix_region = region.to_pixel(wcs=COMMON_WCS) assert isinstance(pix_region, PixelRegion) @pytest.mark.parametrize('region', PIXEL_REGIONS, ids=ids_func) def test_attribute_validation_pixel_regions(region): invalid_values = dict(center=[PixCoord([1, 2], [2, 3]), 1, SkyCoord(1 * u.deg, 2 * u.deg), (10, 10), (10 * u.deg, 10 * u.deg)], radius=[u.Quantity('1deg'), [1], PixCoord(1, 2), 3 * u.km, 0.0, -10.], angle=[u.Quantity([1 * u.deg, 2 * u.deg]), 2, PixCoord(1, 2), 3 * u.km], vertices=[u.Quantity('1'), 2, PixCoord(1, 2), PixCoord([[1, 2]], [[2, 3]]), 3 * u.km, (10, 10), (10 * u.deg, 10 * u.deg)]) invalid_values['width'] = invalid_values['radius'] invalid_values['height'] = invalid_values['radius'] invalid_values['inner_height'] = invalid_values['radius'] invalid_values['inner_width'] = invalid_values['radius'] invalid_values['outer_height'] = invalid_values['radius'] invalid_values['outer_width'] = invalid_values['radius'] invalid_values['inner_radius'] = invalid_values['radius'] invalid_values['outer_radius'] = invalid_values['radius'] invalid_values['start'] = invalid_values['center'] invalid_values['end'] = invalid_values['radius'] for attr in invalid_values: if hasattr(region, attr): for val in invalid_values.get(attr, None): with pytest.raises(ValueError) as excinfo: setattr(region, attr, val) assert f'{attr!r} must' in str(excinfo.value) @pytest.mark.parametrize('region', SKY_REGIONS, ids=ids_func) def test_attribute_validation_sky_regions(region): invalid_values = dict(center=[PixCoord([1, 2], [2, 3]), 1, SkyCoord([1 * u.deg], [2 * u.deg]), (10, 10), (10 * u.deg, 10 * u.deg)], radius=[u.Quantity([1 * u.deg, 5 * u.deg]), [1], SkyCoord(1 * u.deg, 2 * u.deg), 1, 3 * u.km, 0.0 * u.deg, -10. * u.deg], angle=[u.Quantity([1 * u.deg, 2 * u.deg]), 2, SkyCoord(1 * u.deg, 2 * u.deg), 3. * u.km], vertices=[u.Quantity('1deg'), 2, SkyCoord(1 * u.deg, 2 * u.deg), SkyCoord([[1 * u.deg, 2 * u.deg]], [[2 * u.deg, 3 * u.deg]]), 3 * u.km, (10, 10), (10 * u.deg, 10 * u.deg)]) invalid_values['width'] = invalid_values['radius'] invalid_values['height'] = invalid_values['radius'] invalid_values['inner_height'] = invalid_values['radius'] invalid_values['inner_width'] = invalid_values['radius'] invalid_values['outer_height'] = invalid_values['radius'] invalid_values['outer_width'] = invalid_values['radius'] invalid_values['inner_radius'] = invalid_values['radius'] invalid_values['outer_radius'] = invalid_values['radius'] invalid_values['start'] = invalid_values['center'] invalid_values['end'] = invalid_values['radius'] for attr in invalid_values: if hasattr(region, attr): for val in invalid_values.get(attr, None): with pytest.raises(ValueError) as excinfo: setattr(region, attr, val) assert f'{attr!r} must' in str(excinfo.value) @pytest.mark.parametrize('region', PIXEL_REGIONS + SKY_REGIONS, ids=ids_func) def test_metadata(region): region.meta = {'text': 'hello'} region.visual = {'color': 'blue'} assert isinstance(region.meta, RegionMeta) assert isinstance(region.visual, RegionVisual) # dict subclasses are allowed region.meta = OrderedDict({'text': 'hello'}) region.visual = OrderedDict({'color': 'blue'}) assert isinstance(region.meta, RegionMeta) assert isinstance(region.visual, RegionVisual) with pytest.raises(ValueError): region.meta = 1 with pytest.raises(ValueError): region.visual = 'blue' ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/shapes/tests/test_circle.py0000644000175100001770000001247714525470416021424 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst import astropy.units as u import numpy as np import pytest from astropy.coordinates import SkyCoord from astropy.io import fits from astropy.tests.helper import assert_quantity_allclose from astropy.utils.data import get_pkg_data_filename from astropy.wcs import WCS from numpy.testing import assert_allclose from regions._utils.optional_deps import HAS_MATPLOTLIB from regions.core import PixCoord, RegionMeta, RegionVisual from regions.shapes.circle import CirclePixelRegion, CircleSkyRegion from regions.shapes.tests.test_common import (BaseTestPixelRegion, BaseTestSkyRegion) from regions.tests.helpers import make_simple_wcs @pytest.fixture(scope='session', name='wcs') def wcs_fixture(): filename = get_pkg_data_filename('data/example_header.fits') header = fits.getheader(filename) return WCS(header) class TestCirclePixelRegion(BaseTestPixelRegion): meta = RegionMeta({'text': 'test'}) visual = RegionVisual({'color': 'blue'}) reg = CirclePixelRegion(PixCoord(3, 4), radius=2, meta=meta, visual=visual) sample_box = [0, 6, 1, 7] inside = [(3, 4)] outside = [(3, 0)] expected_area = 4 * np.pi expected_repr = '' expected_str = ('Region: CirclePixelRegion\ncenter: PixCoord(x=3, y=4)' '\nradius: 2') def test_copy(self): reg = self.reg.copy() assert reg.center.xy == (3, 4) assert reg.radius == 2 assert reg.meta == self.meta assert reg.visual == self.visual def test_pix_sky_roundtrip(self): wcs = make_simple_wcs(SkyCoord(2 * u.deg, 3 * u.deg), 0.1 * u.deg, 20) reg_new = self.reg.to_sky(wcs).to_pixel(wcs) assert_allclose(reg_new.center.x, self.reg.center.x) assert_allclose(reg_new.center.y, self.reg.center.y) assert_allclose(reg_new.radius, self.reg.radius) assert reg_new.meta == self.reg.meta assert reg_new.visual == self.reg.visual # test that converted region meta and visual are copies and not views reg_new.meta['text'] = 'new' reg_new.visual['color'] = 'green' assert reg_new.meta['text'] != self.reg.meta['text'] assert reg_new.visual['color'] != self.reg.visual['color'] @pytest.mark.skipif(not HAS_MATPLOTLIB, reason='matplotlib is required') def test_as_artist(self): patch = self.reg.as_artist() assert_allclose(patch.center, (3, 4)) assert_allclose(patch.radius, 2) def test_rotate(self): reg = self.reg.rotate(PixCoord(2, 3), 90 * u.deg) assert_allclose(reg.center.xy, (1, 4)) def test_eq(self): reg = self.reg.copy() assert reg == self.reg reg.radius = 3 assert reg != self.reg def test_zero_size(self): with pytest.raises(ValueError): CirclePixelRegion(PixCoord(50, 50), radius=0) class TestCircleSkyRegion(BaseTestSkyRegion): meta = RegionMeta({'text': 'test'}) visual = RegionVisual({'color': 'blue'}) reg = CircleSkyRegion(SkyCoord(3 * u.deg, 4 * u.deg), 2 * u.arcsec, meta=meta, visual=visual) expected_repr = (', radius=2.0 arcsec)>') expected_str = ('Region: CircleSkyRegion\ncenter: \nradius: 2.0 ' 'arcsec') def test_copy(self): reg = self.reg.copy() assert_allclose(reg.center.ra.deg, 3) assert_allclose(reg.radius.to_value('arcsec'), 2) assert reg.meta == self.meta assert reg.visual == self.visual def test_transformation(self, wcs): skycoord = SkyCoord(3 * u.deg, 4 * u.deg, frame='galactic') skycircle = CircleSkyRegion(skycoord, 2 * u.arcsec) pixcircle = skycircle.to_pixel(wcs) assert_allclose(pixcircle.center.x, -50.5) assert_allclose(pixcircle.center.y, 299.5) assert_allclose(pixcircle.radius, 0.027777777777828305) skycircle2 = pixcircle.to_sky(wcs) assert_quantity_allclose(skycircle.center.data.lon, skycircle2.center.data.lon) assert_quantity_allclose(skycircle.center.data.lat, skycircle2.center.data.lat) assert_quantity_allclose(skycircle2.radius, skycircle.radius) def test_dimension_center(self): center = SkyCoord([1, 2] * u.deg, [3, 4] * u.deg) radius = 2 * u.arcsec with pytest.raises(ValueError) as excinfo: CircleSkyRegion(center, radius) estr = "'center' must be a scalar SkyCoord" assert estr in str(excinfo.value) def test_contains(self, wcs): position = SkyCoord([1, 3] * u.deg, [2, 4] * u.deg) # 1,2 is outside, 3,4 is the center and is inside assert all(self.reg.contains(position, wcs) == np.array([False, True], dtype='bool')) def test_eq(self): reg = self.reg.copy() assert reg == self.reg reg.radius = 3 * u.arcsec assert reg != self.reg def test_zero_size(self): with pytest.raises(ValueError): CircleSkyRegion(SkyCoord(3 * u.deg, 4 * u.deg), 0. * u.arcsec) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/shapes/tests/test_common.py0000644000175100001770000000526714525470416021452 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst """ Base class for all shape tests. """ import numpy as np import pytest from numpy.testing import assert_allclose, assert_equal from regions._utils.optional_deps import HAS_MATPLOTLIB from regions.core.pixcoord import PixCoord class BaseTestRegion: def test_repr(self): assert repr(self.reg) == self.expected_repr def test_str(self): assert str(self.reg) == self.expected_str def test_del(self): # test that Region shape attributes (descriptors) cannot be # deleted) with pytest.raises(AttributeError): delattr(self.reg, self.reg._params[0]) class BaseTestPixelRegion(BaseTestRegion): def test_area(self): assert_allclose(self.reg.area, self.expected_area) def test_mask_area(self): try: mask = self.reg.to_mask(mode='exact') assert_allclose(np.sum(mask.data), self.expected_area) except NotImplementedError: try: mask = self.reg.to_mask(mode='subpixels', subpixels=30) assert_allclose(np.sum(mask.data), self.expected_area, rtol=0.005) except NotImplementedError: pytest.skip() def test_contains_scalar(self): if len(self.inside) > 0: pixcoord = PixCoord(*self.inside[0]) assert self.reg.contains(pixcoord) assert pixcoord in self.reg if len(self.outside) > 0: pixcoord = PixCoord(*self.outside[0]) assert not self.reg.contains(pixcoord) assert pixcoord not in self.reg def test_contains_array_1d(self): pixcoord = PixCoord(*zip(*(self.inside + self.outside))) actual = self.reg.contains(pixcoord) assert_equal(actual[:len(self.inside)], True) assert_equal(actual[len(self.inside):], False) with pytest.raises(ValueError) as excinfo: pixcoord in self.reg assert 'coord must be scalar' in str(excinfo.value) def test_contains_array_2d(self): x, y = zip(*(self.inside + self.outside)) pixcoord = PixCoord([x] * 3, [y] * 3) actual = self.reg.contains(pixcoord) assert actual.shape == (3, len(x)) assert_equal(actual[:, :len(self.inside)], True) assert_equal(actual[:, len(self.inside):], False) @pytest.mark.skipif(not HAS_MATPLOTLIB, reason='matplotlib is required') def test_plot(self): from matplotlib.artist import Artist artist = self.reg.plot() assert isinstance(artist, Artist) class BaseTestSkyRegion(BaseTestRegion): # TODO: here we should add inside/outside tests as above pass ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/shapes/tests/test_ellipse.py0000644000175100001770000003061414525470416021611 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst import astropy.units as u import numpy as np import pytest from astropy.coordinates import SkyCoord from astropy.io import fits from astropy.tests.helper import assert_quantity_allclose from astropy.utils.data import get_pkg_data_filename from astropy.wcs import WCS from numpy.testing import assert_allclose, assert_equal from regions._utils.optional_deps import HAS_MATPLOTLIB, MPL_VERSION from regions.core import PixCoord, RegionMeta, RegionVisual from regions.shapes.ellipse import EllipsePixelRegion, EllipseSkyRegion from regions.shapes.tests.test_common import (BaseTestPixelRegion, BaseTestSkyRegion) from regions.tests.helpers import make_simple_wcs @pytest.fixture(scope='session', name='wcs') def wcs_fixture(): filename = get_pkg_data_filename('data/example_header.fits') header = fits.getheader(filename) return WCS(header) class TestEllipsePixelRegion(BaseTestPixelRegion): meta = RegionMeta({'text': 'test'}) visual = RegionVisual({'color': 'blue'}) reg = EllipsePixelRegion(center=PixCoord(3, 4), width=4, height=3, angle=5 * u.deg, meta=meta, visual=visual) sample_box = [-2, 8, -1, 9] inside = [(4.5, 4)] outside = [(5, 4)] expected_area = 3 * np.pi expected_repr = ('') expected_str = ('Region: EllipsePixelRegion\ncenter: PixCoord(x=3, y=4)\n' 'width: 4\nheight: 3\nangle: 5.0 deg') def test_copy(self): reg = self.reg.copy() assert reg.center.xy == (3, 4) assert reg.width == 4 assert reg.height == 3 assert_allclose(reg.angle.to_value('deg'), 5) assert reg.meta == self.meta assert reg.visual == self.visual def test_pix_sky_roundtrip(self): wcs = make_simple_wcs(SkyCoord(2 * u.deg, 3 * u.deg), 0.1 * u.deg, 20) reg_new = self.reg.to_sky(wcs).to_pixel(wcs) assert_allclose(reg_new.center.x, self.reg.center.x) assert_allclose(reg_new.center.y, self.reg.center.y) assert_allclose(reg_new.width, self.reg.width) assert_allclose(reg_new.height, self.reg.height) assert_quantity_allclose(reg_new.angle, self.reg.angle) assert reg_new.meta == self.reg.meta assert reg_new.visual == self.reg.visual # test that converted region meta and visual are copies and not views reg_new.meta['text'] = 'new' reg_new.visual['color'] = 'green' assert reg_new.meta['text'] != self.reg.meta['text'] assert reg_new.visual['color'] != self.reg.visual['color'] @pytest.mark.skipif(not HAS_MATPLOTLIB, reason='matplotlib is required') def test_as_artist(self): patch = self.reg.as_artist() assert_allclose(patch.center, (3, 4)) assert_allclose(patch.width, 4) assert_allclose(patch.height, 3) assert_allclose(patch.angle, 5) def test_rotate(self): reg = self.reg.rotate(PixCoord(2, 3), 90 * u.deg) assert_allclose(reg.center.xy, (1, 4)) assert_allclose(reg.angle.to_value('deg'), 95) def test_eq(self): reg = self.reg.copy() assert reg == self.reg reg.width = 3 assert reg != self.reg def test_region_bbox(self): a = 7 b = 3 reg = EllipsePixelRegion(PixCoord(50, 50), width=a, height=b, angle=0. * u.deg) assert reg.bounding_box.shape == (b, a) reg = EllipsePixelRegion(PixCoord(50.5, 50.5), width=a, height=b, angle=0. * u.deg) assert reg.bounding_box.shape == (b + 1, a + 1) reg = EllipsePixelRegion(PixCoord(50, 50), width=a, height=b, angle=90. * u.deg) assert reg.bounding_box.shape == (a, b) def test_region_bbox_zero_size(self): with pytest.raises(ValueError): EllipsePixelRegion(PixCoord(50, 50), width=0, height=0, angle=0. * u.deg) with pytest.raises(ValueError): EllipsePixelRegion(PixCoord(50, 50), width=10, height=0, angle=0. * u.deg) @pytest.mark.skipif(MPL_VERSION < 33, reason='requires `do_event`') # temporarily disable sync=True test due to random failures # @pytest.mark.parametrize('sync', (False, True)) @pytest.mark.parametrize('sync', (False,)) def test_as_mpl_selector(self, sync): plt = pytest.importorskip('matplotlib.pyplot') from matplotlib.testing.widgets import do_event data = np.random.random((16, 16)) mask = np.zeros_like(data) ax = plt.subplot(1, 1, 1) ax.imshow(data) def update_mask(reg): mask[:] = reg.to_mask(mode='subpixels', subpixels=10).to_image(data.shape) # For now this will only work with unrotated ellipses. Once this # works with rotated ellipses, the following exception check can # be removed as well as the ``angle=0 * u.deg`` in the call to # copy() below. with pytest.raises(NotImplementedError, match=('Cannot create matplotlib selector for rotated ellipse.')): self.reg.as_mpl_selector(ax) region = self.reg.copy(angle=0 * u.deg) selector = region.as_mpl_selector(ax, callback=update_mask, sync=sync) do_event(selector, 'press', xdata=7.3, ydata=4.4, button=1) do_event(selector, 'onmove', xdata=9.3, ydata=5.4, button=1) do_event(selector, 'release', xdata=9.3, ydata=5.4, button=1) ax.figure.canvas.draw() if sync: assert_allclose(region.center.x, 8.3) assert_allclose(region.center.y, 4.9) assert_allclose(region.width, 2) assert_allclose(region.height, 1) assert_quantity_allclose(region.angle, 0 * u.deg) assert_equal(mask, region.to_mask(mode='subpixels', subpixels=10).to_image(data.shape)) else: assert_allclose(region.center.x, 3) assert_allclose(region.center.y, 4) assert_allclose(region.width, 4) assert_allclose(region.height, 3) assert_quantity_allclose(region.angle, 0 * u.deg) assert_equal(mask, 0) with pytest.raises(AttributeError, match=('Cannot attach more than one selector to a reg')): region.as_mpl_selector(ax) @pytest.mark.skipif(MPL_VERSION < 33, reason='requires `do_event`') @pytest.mark.parametrize('anywhere', (False, True)) def test_mpl_selector_drag(self, anywhere): """Test dragging of entire region from central handle and anywhere.""" plt = pytest.importorskip('matplotlib.pyplot') from matplotlib.testing.widgets import do_event data = np.random.random((16, 16)) mask = np.zeros_like(data) ax = plt.subplot(1, 1, 1) ax.imshow(data) def update_mask(reg): mask[:] = reg.to_mask(mode='subpixels', subpixels=10).to_image(data.shape) region = self.reg.copy(angle=0 * u.deg) if anywhere and MPL_VERSION < 35: pytest.skip('Requires `drag_from_anywhere` kwarg') elif MPL_VERSION < 35: selector = region.as_mpl_selector(ax, callback=update_mask) else: selector = region.as_mpl_selector(ax, callback=update_mask, drag_from_anywhere=anywhere) assert selector.drag_from_anywhere is anywhere assert region._mpl_selector.drag_from_anywhere is anywhere # click_and_drag(selector, start=(3, 4), end=(3.5, 4.5)) do_event(selector, 'press', xdata=3, ydata=4, button=1) do_event(selector, 'onmove', xdata=3.5, ydata=4.5, button=1) do_event(selector, 'release', xdata=3.5, ydata=4.5, button=1) ax.figure.canvas.draw() assert_allclose(region.center.x, 3.5) assert_allclose(region.center.y, 4.5) assert_allclose(region.width, 4) assert_allclose(region.height, 3) do_event(selector, 'press', xdata=3.25, ydata=4.25, button=1) do_event(selector, 'onmove', xdata=4.25, ydata=5.25, button=1) do_event(selector, 'release', xdata=4.25, ydata=5.25, button=1) ax.figure.canvas.draw() # For drag_from_anywhere=False this will have created a new 1x1 rectangle. if anywhere: assert_allclose(region.center.x, 4.5) assert_allclose(region.center.y, 5.5) assert_allclose(region.width, 4) assert_allclose(region.height, 3) else: assert_allclose(region.center.x, 4.5) assert_allclose(region.center.y, 5.5) assert_equal(mask, region.to_mask(mode='subpixels', subpixels=10).to_image(data.shape)) @pytest.mark.parametrize('userargs', ({'useblit': True}, {'grab_range': 20, 'minspanx': 5, 'minspany': 4}, {'props': {'facecolor': 'blue', 'linewidth': 2}}, {'twit': 'gumby'})) def test_mpl_selector_kwargs(self, userargs): """Test that additional kwargs are passed to selector.""" plt = pytest.importorskip('matplotlib.pyplot') data = np.random.random((16, 16)) mask = np.zeros_like(data) ax = plt.subplot(1, 1, 1) ax.imshow(data) def update_mask(reg): mask[:] = reg.to_mask(mode='subpixels', subpixels=10).to_image(data.shape) region = self.reg.copy(angle=0 * u.deg) region.visual = {'color': 'red'} if MPL_VERSION < 35 and 'grab_range' in userargs: userargs['maxdist'] = userargs.pop('grab_range') if 'twit' in userargs: with pytest.raises(TypeError, match=(r'__init__.. got an unexpected keyword argument')): selector = region.as_mpl_selector(ax, callback=update_mask, **userargs) else: selector = region.as_mpl_selector(ax, callback=update_mask, **userargs) assert region._mpl_selector.artists[0].get_edgecolor() == (1, 0, 0, 1) if 'props' in userargs: assert region._mpl_selector.artists[0].get_facecolor() == (0, 0, 1, 1) assert region._mpl_selector.artists[0].get_linewidth() == 2 else: assert region._mpl_selector.artists[0].get_facecolor() == (0, 0, 0, 0) assert region._mpl_selector.artists[0].get_linewidth() == 1 for key, val in userargs.items(): assert getattr(region._mpl_selector, key) == val assert getattr(selector, key) == val class TestEllipseSkyRegion(BaseTestSkyRegion): meta = RegionMeta({'text': 'test'}) visual = RegionVisual({'color': 'blue'}) reg = EllipseSkyRegion(center=SkyCoord(3, 4, unit='deg'), width=4 * u.deg, height=3 * u.deg, angle=5 * u.deg, meta=meta, visual=visual) expected_repr = (', width=4.0 deg, height=3.0 deg,' ' angle=5.0 deg)>') expected_str = ('Region: EllipseSkyRegion\ncenter: \nwidth: 4.0 deg\n' 'height: 3.0 deg\nangle: 5.0 deg') def test_copy(self): reg = self.reg.copy() assert_allclose(reg.center.ra.deg, 3) assert_allclose(reg.width.to_value('deg'), 4) assert_allclose(reg.height.to_value('deg'), 3) assert_allclose(reg.angle.to_value('deg'), 5) assert reg.meta == self.meta assert reg.visual == self.visual def test_dimension_center(self): center = SkyCoord([1, 2] * u.deg, [3, 4] * u.deg) width = 2 * u.arcsec height = 3 * u.arcsec with pytest.raises(ValueError) as excinfo: EllipseSkyRegion(center, width, height) estr = "'center' must be a scalar SkyCoord" assert estr in str(excinfo.value) def test_contains(self, wcs): position = SkyCoord([1, 3] * u.deg, [2, 4] * u.deg) # 1,2 is outside, 3,4 is the center and is inside assert all(self.reg.contains(position, wcs) == np.array([False, True], dtype='bool')) def test_eq(self): reg = self.reg.copy() assert reg == self.reg reg.width = 3 * u.deg assert reg != self.reg ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/shapes/tests/test_line.py0000644000175100001770000001207414525470416021103 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst import astropy.units as u import numpy as np import pytest from astropy.coordinates import SkyCoord from astropy.io import fits from astropy.tests.helper import assert_quantity_allclose from astropy.utils.data import get_pkg_data_filename from astropy.wcs import WCS from numpy.testing import assert_allclose from regions._utils.optional_deps import HAS_MATPLOTLIB from regions.core import PixCoord, RegionMeta, RegionVisual from regions.shapes.line import LinePixelRegion, LineSkyRegion from regions.shapes.tests.test_common import (BaseTestPixelRegion, BaseTestSkyRegion) from regions.tests.helpers import make_simple_wcs @pytest.fixture(scope='session', name='wcs') def wcs_fixture(): filename = get_pkg_data_filename('data/example_header.fits') header = fits.getheader(filename) return WCS(header) class TestLinePixelRegion(BaseTestPixelRegion): meta = RegionMeta({'text': 'test'}) visual = RegionVisual({'color': 'blue'}) reg = LinePixelRegion(PixCoord(3, 4), PixCoord(4, 4), meta=meta, visual=visual) sample_box = [-2, 8, -1, 9] inside = [] outside = [(3.1, 4.2), (5, 4)] expected_area = 0 expected_repr = ('') expected_str = ('Region: LinePixelRegion\nstart: PixCoord(x=3, y=4)\n' 'end: PixCoord(x=4, y=4)') def test_copy(self): reg = self.reg.copy() assert reg.start.xy == (3, 4) assert reg.end.xy == (4, 4) assert reg.meta == self.meta assert reg.visual == self.visual def test_pix_sky_roundtrip(self): wcs = make_simple_wcs(SkyCoord(2 * u.deg, 3 * u.deg), 0.1 * u.deg, 20) reg_new = self.reg.to_sky(wcs).to_pixel(wcs) assert_allclose(reg_new.start.x, self.reg.start.x) assert_allclose(reg_new.start.y, self.reg.start.y) assert_allclose(reg_new.end.x, self.reg.end.x) assert_allclose(reg_new.end.y, self.reg.end.y) assert reg_new.meta == self.reg.meta assert reg_new.visual == self.reg.visual # test that converted region meta and visual are copies and not views reg_new.meta['text'] = 'new' reg_new.visual['color'] = 'green' assert reg_new.meta['text'] != self.reg.meta['text'] assert reg_new.visual['color'] != self.reg.visual['color'] @pytest.mark.skipif(not HAS_MATPLOTLIB, reason='matplotlib is required') def test_as_artist(self): patch = self.reg.as_artist() assert 'Arrow' in str(patch) def test_rotate(self): reg = self.reg.rotate(PixCoord(2, 3), 90 * u.deg) assert_allclose(reg.start.xy, (1, 4)) assert_allclose(reg.end.xy, (1, 5)) def test_eq(self): reg = self.reg.copy() assert reg == self.reg reg.start = PixCoord(1, 2) assert reg != self.reg class TestLineSkyRegion(BaseTestSkyRegion): meta = RegionMeta({'text': 'test'}) visual = RegionVisual({'color': 'blue'}) start = SkyCoord(3 * u.deg, 4 * u.deg, frame='galactic') end = SkyCoord(3 * u.deg, 5 * u.deg, frame='galactic') reg = LineSkyRegion(start, end, meta=meta, visual=visual) expected_repr = (', end=)>') expected_str = ('Region: LineSkyRegion\nstart: \nend: ') def test_copy(self): reg = self.reg.copy() assert_allclose(reg.start.b.deg, 4) assert_allclose(reg.end.b.deg, 5) assert reg.meta == self.meta assert reg.visual == self.visual def test_transformation(self, wcs): pixline = self.reg.to_pixel(wcs) assert_allclose(pixline.start.x, -50.5) assert_allclose(pixline.start.y, 299.5) assert_allclose(pixline.end.x, -50.5) assert_allclose(pixline.end.y, 349.5) skyline = pixline.to_sky(wcs) assert_quantity_allclose(skyline.start.data.lon, self.reg.start.data.lon) assert_quantity_allclose(skyline.start.data.lat, self.reg.start.data.lat) assert_quantity_allclose(skyline.end.data.lon, self.reg.end.data.lon) assert_quantity_allclose(skyline.end.data.lat, self.reg.end.data.lat) def test_contains(self, wcs): position = SkyCoord([1, 2] * u.deg, [3, 4] * u.deg) # lines do not contain things assert all(self.reg.contains(position, wcs) == np.array([False, False], dtype='bool')) def test_eq(self): reg = self.reg.copy() assert reg == self.reg reg.start = SkyCoord(1 * u.deg, 2 * u.deg, frame='galactic') assert reg != self.reg reg.start = SkyCoord(3 * u.deg, 4 * u.deg, frame='icrs') assert reg != self.reg ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/shapes/tests/test_masks.py0000644000175100001770000000371414525470416021273 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst """ This file sets up detailed tests for computing masks with reference images. """ import itertools import astropy.units as u import pytest from regions.core import PixCoord, RegionMask from regions.shapes.circle import CirclePixelRegion from regions.shapes.ellipse import EllipsePixelRegion from regions.shapes.polygon import PolygonPixelRegion from regions.shapes.rectangle import RectanglePixelRegion REGIONS = [CirclePixelRegion(PixCoord(3.981987, 4.131378), radius=3.3411), EllipsePixelRegion(PixCoord(5.981987, 4.131378), width=10.4466, height=6.6822, angle=12 * u.deg), RectanglePixelRegion(PixCoord(5.981987, 4.131378), width=7.2233, height=4.3411, angle=12 * u.deg), PolygonPixelRegion(PixCoord([-2.334, 3.631, 1.122, -1.341], [-3.121, -2.118, 2.987, 1.759]))] MODES = [{'mode': 'center'}, {'mode': 'exact'}, {'mode': 'subpixels', 'subpixels': 1}, {'mode': 'subpixels', 'subpixels': 5}, {'mode': 'subpixels', 'subpixels': 18}] def label(value): if isinstance(value, CirclePixelRegion): return 'circ' elif isinstance(value, EllipsePixelRegion): return 'elli' elif isinstance(value, RectanglePixelRegion): return 'rect' elif isinstance(value, PolygonPixelRegion): return 'poly' else: return '-'.join(f'{key}_{value}' for key, value in sorted(value.items())) @pytest.mark.array_compare(file_format='text', write_kwargs={'fmt': '%12.8e'}) @pytest.mark.parametrize(('region', 'mode'), itertools.product(REGIONS, MODES), ids=label) def test_to_mask(region, mode): try: mask = region.to_mask(**mode) except NotImplementedError: pytest.xfail() assert isinstance(mask, RegionMask) return mask.data.astype(float) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/shapes/tests/test_point.py0000644000175100001770000000733514525470416021311 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst import astropy.units as u import numpy as np import pytest from astropy.coordinates import SkyCoord from astropy.io import fits from astropy.utils.data import get_pkg_data_filename from astropy.wcs import WCS from numpy.testing import assert_allclose from regions._utils.optional_deps import HAS_MATPLOTLIB from regions.core import PixCoord, RegionMeta, RegionVisual from regions.shapes.point import PointPixelRegion, PointSkyRegion from regions.shapes.tests.test_common import (BaseTestPixelRegion, BaseTestSkyRegion) from regions.tests.helpers import make_simple_wcs @pytest.fixture(scope='session', name='wcs') def wcs_fixture(): filename = get_pkg_data_filename('data/example_header.fits') header = fits.getheader(filename) return WCS(header) class TestPointPixelRegion(BaseTestPixelRegion): meta = RegionMeta({'text': 'test'}) visual = RegionVisual({'color': 'blue'}) reg = PointPixelRegion(PixCoord(3, 4), meta=meta, visual=visual) sample_box = [-2, 8, -1, 9] inside = [] outside = [(3.1, 4.2), (5, 4)] expected_area = 0 expected_repr = '' expected_str = 'Region: PointPixelRegion\ncenter: PixCoord(x=3, y=4)' def test_copy(self): reg = self.reg.copy() assert reg.center.xy == (3, 4) assert reg.meta == self.meta assert reg.visual == self.visual def test_pix_sky_roundtrip(self): wcs = make_simple_wcs(SkyCoord(2 * u.deg, 3 * u.deg), 0.1 * u.deg, 20) reg_new = self.reg.to_sky(wcs).to_pixel(wcs) assert_allclose(reg_new.center.x, self.reg.center.x) assert_allclose(reg_new.center.y, self.reg.center.y) assert reg_new.meta == self.reg.meta assert reg_new.visual == self.reg.visual # test that converted region meta and visual are copies and not views reg_new.meta['text'] = 'new' reg_new.visual['color'] = 'green' assert reg_new.meta['text'] != self.reg.meta['text'] assert reg_new.visual['color'] != self.reg.visual['color'] @pytest.mark.skipif(not HAS_MATPLOTLIB, reason='matplotlib is required') def test_as_artist(self): artist = self.reg.as_artist() assert artist.get_data() == ([3], [4]) artist = self.reg.as_artist(origin=(1, 1)) assert artist.get_data() == ([2], [3]) def test_rotate(self): reg = self.reg.rotate(PixCoord(2, 3), 90 * u.deg) assert_allclose(reg.center.xy, (1, 4)) def test_eq(self): reg = self.reg.copy() assert reg == self.reg reg.center = PixCoord(1, 2) assert reg != self.reg class TestPointSkyRegion(BaseTestSkyRegion): meta = RegionMeta({'text': 'test'}) visual = RegionVisual({'color': 'blue'}) reg = PointSkyRegion(SkyCoord(3, 4, unit='deg'), meta=meta, visual=visual) expected_repr = (')>') expected_str = ('Region: PointSkyRegion\ncenter: ') def test_copy(self): reg = self.reg.copy() assert_allclose(reg.center.ra.deg, 3) assert reg.meta == self.meta assert reg.visual == self.visual def test_contains(self, wcs): position = SkyCoord([1, 2] * u.deg, [3, 4] * u.deg) # points do not contain things assert all(self.reg.contains(position, wcs) == np.array([False, False], dtype='bool')) def test_eq(self): reg = self.reg.copy() assert reg == self.reg reg.center = SkyCoord(1, 2, unit='deg') assert reg != self.reg ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/shapes/tests/test_polygon.py0000644000175100001770000002577014525470416021652 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst from copy import copy import astropy.units as u import numpy as np import pytest from astropy.coordinates import SkyCoord from astropy.tests.helper import assert_quantity_allclose from numpy.testing import assert_allclose, assert_equal from regions._utils.examples import make_example_dataset from regions._utils.optional_deps import HAS_MATPLOTLIB from regions.core import PixCoord, RegionBoundingBox, RegionMeta, RegionVisual from regions.shapes.polygon import (PolygonPixelRegion, PolygonSkyRegion, RegularPolygonPixelRegion) from regions.shapes.tests.test_common import (BaseTestPixelRegion, BaseTestSkyRegion) from regions.tests.helpers import make_simple_wcs @pytest.fixture(scope='session', name='wcs') def wcs_fixture(): config = dict(crpix=(18, 9), cdelt=(-10, 10), shape=(18, 36)) dataset = make_example_dataset(config=config) return dataset.wcs class TestPolygonPixelRegion(BaseTestPixelRegion): meta = RegionMeta({'text': 'test'}) visual = RegionVisual({'color': 'blue'}) reg = PolygonPixelRegion(PixCoord([1, 3, 1], [1, 1, 4]), meta=meta, visual=visual) sample_box = [0, 4, 0, 5] inside = [(2, 2)] outside = [(3, 2), (3, 3)] expected_area = 3 expected_repr = ('') expected_str = ('Region: PolygonPixelRegion\nvertices: ' 'PixCoord(x=[1 3 1], y=[1 1 4])') # We will be using this polygon for basic tests: # # (3,0) * # |\ # | \ # | \ # (0,0) *---* (2, 0) # def test_copy(self): reg = self.reg.copy() assert_allclose(reg.vertices.x, [1, 3, 1]) assert_allclose(reg.vertices.y, [1, 1, 4]) assert reg.meta == self.meta assert reg.visual == self.visual def test_pix_sky_roundtrip(self): wcs = make_simple_wcs(SkyCoord(2 * u.deg, 3 * u.deg), 0.1 * u.deg, 20) reg_new = self.reg.to_sky(wcs).to_pixel(wcs) assert_allclose(reg_new.vertices.x, self.reg.vertices.x) assert_allclose(reg_new.vertices.y, self.reg.vertices.y) assert reg_new.meta == self.reg.meta assert reg_new.visual == self.reg.visual # test that converted region meta and visual are copies and not views reg_new.meta['text'] = 'new' reg_new.visual['color'] = 'green' assert reg_new.meta['text'] != self.reg.meta['text'] assert reg_new.visual['color'] != self.reg.visual['color'] def test_bounding_box(self): bbox = self.reg.bounding_box assert bbox == RegionBoundingBox(ixmin=1, ixmax=4, iymin=1, iymax=5) def test_to_mask(self): # The true area of this polygon is 3 # We only do very low-precision asserts below, # because results can be unstable with points # on the edge of the polygon. # Basically we check that mask.data is filled # with something useful at all. # Bounding box and output shape is independent of subpixels, # so we only assert on it once here, not in the other cases below mask = self.reg.to_mask(mode='center', subpixels=1) assert 2 <= np.sum(mask.data) <= 6 assert mask.bbox == RegionBoundingBox(ixmin=1, ixmax=4, iymin=1, iymax=5) assert mask.data.shape == (4, 3) # Test more cases for to_mask # This example is with the default: subpixels=5 mask = self.reg.to_mask(mode='subpixels') assert 2 <= np.sum(mask.data) <= 6 mask = self.reg.to_mask(mode='subpixels', subpixels=8) assert 2 <= np.sum(mask.data) <= 6 mask = self.reg.to_mask(mode='subpixels', subpixels=9) assert 2 <= np.sum(mask.data) <= 6 mask = self.reg.to_mask(mode='subpixels', subpixels=10) assert 2 <= np.sum(mask.data) <= 6 with pytest.raises(NotImplementedError): self.reg.to_mask(mode='exact') @pytest.mark.skipif(not HAS_MATPLOTLIB, reason='matplotlib is required') def test_as_artist(self): patch = self.reg.as_artist() expected = [[1, 1], [3, 1], [1, 4], [1, 1]] assert_allclose(patch.xy, expected) def test_rotate(self): reg = self.reg.rotate(PixCoord(3, 1), -90 * u.deg) assert_allclose(reg.vertices.x, [3, 3, 6]) assert_allclose(reg.vertices.y, [3, 1, 3]) def test_origin(self): verts = PixCoord([1, 3, 1], [1, 1, 4]) reg1 = PolygonPixelRegion(verts) origin = PixCoord(1, 1) relverts = verts - origin reg2 = PolygonPixelRegion(relverts, origin=origin) assert_equal(reg1.vertices, reg2.vertices) def test_eq(self): reg = self.reg.copy() assert reg == self.reg reg.vertices = PixCoord([1, 3, 1], [1, 1, 6]) assert reg != self.reg class TestPolygonSkyRegion(BaseTestSkyRegion): meta = RegionMeta({'text': 'test'}) visual = RegionVisual({'color': 'blue'}) reg = PolygonSkyRegion(SkyCoord([3, 4, 3] * u.deg, [3, 4, 4] * u.deg), meta=meta, visual=visual) expected_repr = (')>') expected_str = ('Region: PolygonSkyRegion\nvertices: ') def test_copy(self): reg = self.reg.copy() assert_allclose(reg.vertices.ra.deg, [3, 4, 3]) assert reg.meta == self.meta assert reg.visual == self.visual def test_transformation(self, wcs): pixpoly = self.reg.to_pixel(wcs) assert_allclose(pixpoly.vertices.x, [11.187992, 10.976332, 11.024032], atol=1e-5) assert_allclose(pixpoly.vertices.y, [1.999486, 2.039001, 2.077076], atol=1e-5) poly = pixpoly.to_sky(wcs) # TODO: we should probably assert something about frame # attributes, or generally some better way to check if two # SkyCoord are the same? For now, we use the following line to # transform back to ICRS (`poly` is in Galactic, same as WCS) poly = PolygonSkyRegion( vertices=poly.vertices.transform_to(self.reg.vertices)) assert_quantity_allclose(poly.vertices.data.lon, self.reg.vertices.data.lon, atol=1e-3 * u.deg) assert_quantity_allclose(poly.vertices.data.lat, self.reg.vertices.data.lat, atol=1e-3 * u.deg) def test_contains(self, wcs): position = SkyCoord([1, 3.25] * u.deg, [2, 3.75] * u.deg) # 1,2 is outside, 3.25,3.75 should be inside the triangle... assert all(self.reg.contains(position, wcs) == np.array([False, True], dtype='bool')) def test_eq(self): reg = self.reg.copy() assert reg == self.reg reg.vertices = SkyCoord([3, 4, 3], [3, 4, 6], unit='deg') assert reg != self.reg class TestRegionPolygonPixelRegion(BaseTestPixelRegion): meta = RegionMeta({'text': 'test'}) visual = RegionVisual({'color': 'blue'}) reg = RegularPolygonPixelRegion(PixCoord(50, 50), 8, 20, angle=25 * u.deg, meta=meta, visual=visual) inside = [(40, 40)] outside = [(20, 20), (80, 90)] expected_area = 1131.37085 expected_repr = ('') expected_str = ('Region: RegularPolygonPixelRegion\n' 'center: PixCoord(x=50, y=50)\n' 'nvertices: 8\n' 'radius: 20\nangle: 25.0 deg') def test_copy(self): reg = self.reg.copy() x_expected = copy(self.reg.vertices.x) y_expected = copy(self.reg.vertices.y) assert_allclose(reg.vertices.x, x_expected) assert_allclose(reg.vertices.y, y_expected) assert reg.meta == self.meta assert reg.visual == self.visual def test_bounding_box(self): bbox = self.reg.bounding_box assert bbox == RegionBoundingBox(ixmin=31, ixmax=70, iymin=31, iymax=70) def test_to_mask(self): # The true area of this polygon is 3 # We only do very low-precision asserts below, # because results can be unstable with points # on the edge of the polygon. # Basically we check that mask.data is filled # with something useful at all. # Bounding box and output shape is independent of subpixels, # so we only assert on it once here, not in the other cases below mask = self.reg.to_mask(mode='center', subpixels=1) assert 1130 <= np.sum(mask.data) <= 1135 assert mask.bbox == RegionBoundingBox(ixmin=31, ixmax=70, iymin=31, iymax=70) assert mask.data.shape == (39, 39) # Test more cases for to_mask # This example is with the default: subpixels=5 mask = self.reg.to_mask(mode='subpixels') assert 1130 <= np.sum(mask.data) <= 1135 mask = self.reg.to_mask(mode='subpixels', subpixels=8) assert 1130 <= np.sum(mask.data) <= 1135 mask = self.reg.to_mask(mode='subpixels', subpixels=9) assert 1130 <= np.sum(mask.data) <= 1135 mask = self.reg.to_mask(mode='subpixels', subpixels=10) assert 1130 <= np.sum(mask.data) <= 1135 with pytest.raises(NotImplementedError): self.reg.to_mask(mode='exact') @pytest.mark.skipif(not HAS_MATPLOTLIB, reason='matplotlib is required') def test_as_artist(self): patch = self.reg.as_artist() expected = [[41.54763477, 68.12615574], [31.20614758, 56.84040287], [31.87384426, 41.54763477], [43.15959713, 31.20614758], [58.45236523, 31.87384426], [68.79385242, 43.15959713], [68.12615574, 58.45236523], [56.84040287, 68.79385242], [41.54763477, 68.12615574]] assert_allclose(patch.xy, expected) def test_rotate(self): reg = self.reg.rotate(self.reg.center, 20 * u.deg) assert reg.angle.value == 45.0 x_vert = [35.85786438, 30., 35.85786438, 50., 64.14213562, 70., 64.14213562, 50.] y_vert = [64.14213562, 50., 35.85786438, 30., 35.85786438, 50., 64.14213562, 70.] assert_allclose(reg.vertices.x, x_vert) assert_allclose(reg.vertices.y, y_vert) def test_eq(self): reg = self.reg.copy() assert reg == self.reg reg.radius = 25. assert reg != self.reg def test_to_polygon(self): polyreg = self.reg.to_polygon() assert polyreg.vertices == self.reg.vertices assert polyreg.meta == self.meta assert polyreg.visual == self.visual assert polyreg.origin == PixCoord(0, 0) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/shapes/tests/test_rectangle.py0000644000175100001770000003274614525470416022130 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst import astropy.units as u import numpy as np import pytest from astropy.coordinates import SkyCoord from astropy.io import fits from astropy.tests.helper import assert_quantity_allclose from astropy.utils.data import get_pkg_data_filename from astropy.wcs import WCS from numpy.testing import assert_allclose, assert_equal from regions._utils.optional_deps import HAS_MATPLOTLIB, MPL_VERSION from regions.core import PixCoord, RegionMeta, RegionVisual from regions.shapes.rectangle import RectanglePixelRegion, RectangleSkyRegion from regions.shapes.tests.test_common import (BaseTestPixelRegion, BaseTestSkyRegion) from regions.tests.helpers import make_simple_wcs @pytest.fixture(scope='session', name='wcs') def wcs_fixture(): filename = get_pkg_data_filename('data/example_header.fits') header = fits.getheader(filename) return WCS(header) def test_corners(): xc, yc = 2, 2 angle = 30 * u.deg width = 2 height = 1 reg = RectanglePixelRegion(PixCoord(xc, yc), width=width, height=height, angle=angle) y1 = yc + np.cos(angle) * (height / 2) + np.sin(angle) * (width / 2) x1 = xc + np.cos(angle) * (width / 2) - np.sin(angle) * (height / 2) assert (x1, y1) in reg.corners reg = RectanglePixelRegion(PixCoord(xc, yc), width=width, height=height, angle=90 * u.deg) # simple case: rotate by 90 np.testing.assert_allclose([(2.5, 1.), (2.5, 3.), (1.5, 3.), (1.5, 1.)], reg.corners) reg = RectanglePixelRegion(center=PixCoord(xc, yc), width=width, height=height, angle=0 * u.deg) # simpler case: rotate by 0 np.testing.assert_array_equal([(1, 1.5), (3, 1.5), (3, 2.5), (1, 2.5)], reg.corners) poly = reg.to_polygon() assert len(poly.vertices) == 4 class TestRectanglePixelRegion(BaseTestPixelRegion): meta = RegionMeta({'text': 'test'}) visual = RegionVisual({'color': 'blue'}) reg = RectanglePixelRegion(center=PixCoord(3, 4), width=4, height=3, angle=5 * u.deg, meta=meta, visual=visual) sample_box = [-2, 8, -1, 9] inside = [(4.5, 4)] outside = [(5, 2.5)] expected_area = 12 expected_repr = ('') expected_str = ('Region: RectanglePixelRegion\ncenter: PixCoord(x=3, ' 'y=4)\nwidth: 4\nheight: 3\nangle: 5.0 deg') def test_copy(self): reg = self.reg.copy() assert reg.center.xy == (3, 4) assert reg.width == 4 assert reg.height == 3 assert_allclose(reg.angle.to_value('deg'), 5) assert reg.meta == self.meta assert reg.visual == self.visual def test_pix_sky_roundtrip(self): wcs = make_simple_wcs(SkyCoord(2 * u.deg, 3 * u.deg), 0.1 * u.deg, 20) reg_new = self.reg.to_sky(wcs).to_pixel(wcs) assert_allclose(reg_new.center.x, self.reg.center.x) assert_allclose(reg_new.center.y, self.reg.center.y) assert_allclose(reg_new.width, self.reg.width) assert_allclose(reg_new.height, self.reg.height) assert_quantity_allclose(reg_new.angle, self.reg.angle) assert reg_new.meta == self.reg.meta assert reg_new.visual == self.reg.visual # test that converted region meta and visual are copies and not views reg_new.meta['text'] = 'new' reg_new.visual['color'] = 'green' assert reg_new.meta['text'] != self.reg.meta['text'] assert reg_new.visual['color'] != self.reg.visual['color'] @pytest.mark.skipif(not HAS_MATPLOTLIB, reason='matplotlib is required') def test_as_artist(self): patch = self.reg.as_artist() # Note: `reg.center` is the center, `patch.xy` is the lower-left # corner assert_allclose(patch.xy, (1.138344, 2.331396), atol=1e-3) assert_allclose(patch.get_width(), 4) assert_allclose(patch.get_height(), 3) assert_allclose(patch.angle, 5) def test_rotate(self): reg = self.reg.rotate(PixCoord(2, 3), 90 * u.deg) assert_allclose(reg.center.xy, (1, 4)) assert_allclose(reg.angle.to_value('deg'), 95) def test_eq(self): reg = self.reg.copy() assert reg == self.reg reg.angle = 35 * u.deg assert reg != self.reg @pytest.mark.skipif(MPL_VERSION < 33, reason='requires `do_event`') # temporarily disable sync=True test due to random failures # @pytest.mark.parametrize('sync', (False, True)) @pytest.mark.parametrize('sync', (False,)) def test_as_mpl_selector(self, sync): plt = pytest.importorskip('matplotlib.pyplot') from matplotlib.testing.widgets import do_event data = np.random.random((16, 16)) mask = np.zeros_like(data) ax = plt.subplot(1, 1, 1) ax.imshow(data) def update_mask(reg): mask[:] = reg.to_mask(mode='subpixels', subpixels=10).to_image(data.shape) # For now this will only work with unrotated rectangles. Once # this works with rotated rectangles, the following exception # check can be removed as well as the ``angle=0 * u.deg`` in the # call to copy() below. with pytest.raises(NotImplementedError, match=('Cannot create matplotlib selector for rotated rectangle.')): self.reg.as_mpl_selector(ax) region = self.reg.copy(angle=0 * u.deg) selector = region.as_mpl_selector(ax, callback=update_mask, sync=sync) do_event(selector, 'press', xdata=7.3, ydata=4.4, button=1) do_event(selector, 'onmove', xdata=9.3, ydata=5.4, button=1) do_event(selector, 'release', xdata=9.3, ydata=5.4, button=1) ax.figure.canvas.draw() if sync: assert_allclose(region.center.x, 8.3) assert_allclose(region.center.y, 4.9) assert_allclose(region.width, 2) assert_allclose(region.height, 1) assert_quantity_allclose(region.angle, 0 * u.deg) assert_equal(mask, region.to_mask(mode='subpixels', subpixels=10).to_image(data.shape)) else: assert_allclose(region.center.x, 3) assert_allclose(region.center.y, 4) assert_allclose(region.width, 4) assert_allclose(region.height, 3) assert_quantity_allclose(region.angle, 0 * u.deg) assert_equal(mask, 0) with pytest.raises(AttributeError, match=('Cannot attach more than one selector to a reg')): region.as_mpl_selector(ax) @pytest.mark.skipif(MPL_VERSION < 33, reason='requires `do_event`') @pytest.mark.parametrize('anywhere', (False, True)) def test_mpl_selector_drag(self, anywhere): """Test dragging of entire region from central handle and anywhere.""" plt = pytest.importorskip('matplotlib.pyplot') from matplotlib.testing.widgets import ( do_event) # click_and_drag # MPL_VERSION >= 36 data = np.random.random((16, 16)) mask = np.zeros_like(data) ax = plt.subplot(1, 1, 1) ax.imshow(data) def update_mask(reg): mask[:] = reg.to_mask(mode='subpixels', subpixels=10).to_image(data.shape) region = self.reg.copy(angle=0 * u.deg) if anywhere and MPL_VERSION < 35: pytest.skip('Requires `drag_from_anywhere` kwarg') elif MPL_VERSION < 35: selector = region.as_mpl_selector(ax, callback=update_mask) else: selector = region.as_mpl_selector(ax, callback=update_mask, drag_from_anywhere=anywhere) assert selector.drag_from_anywhere is anywhere assert region._mpl_selector.drag_from_anywhere is anywhere # click_and_drag(selector, start=(3, 4), end=(3.5, 4.5)) do_event(selector, 'press', xdata=3, ydata=4, button=1) do_event(selector, 'onmove', xdata=3.5, ydata=4.5, button=1) do_event(selector, 'release', xdata=3.5, ydata=4.5, button=1) ax.figure.canvas.draw() assert_allclose(region.center.x, 3.5) assert_allclose(region.center.y, 4.5) assert_allclose(region.width, 4) assert_allclose(region.height, 3) do_event(selector, 'press', xdata=3.25, ydata=4.25, button=1) do_event(selector, 'onmove', xdata=4.25, ydata=5.25, button=1) do_event(selector, 'release', xdata=4.25, ydata=5.25, button=1) ax.figure.canvas.draw() # For drag_from_anywhere=False this will have created a new 1x1 rectangle. if anywhere: assert_allclose(region.center.x, 4.5) assert_allclose(region.center.y, 5.5) assert_allclose(region.width, 4) assert_allclose(region.height, 3) else: assert_allclose(region.center.x, 4.5) assert_allclose(region.center.y, 5.5) assert_equal(mask, region.to_mask(mode='subpixels', subpixels=10).to_image(data.shape)) @pytest.mark.parametrize('userargs', ({'useblit': True}, {'grab_range': 20, 'minspanx': 5, 'minspany': 4}, {'props': {'facecolor': 'blue', 'linewidth': 2}}, {'twit': 'gumby'})) def test_mpl_selector_kwargs(self, userargs): """Test that additional kwargs are passed to selector.""" plt = pytest.importorskip('matplotlib.pyplot') data = np.random.random((16, 16)) mask = np.zeros_like(data) ax = plt.subplot(1, 1, 1) ax.imshow(data) def update_mask(reg): mask[:] = reg.to_mask(mode='subpixels', subpixels=10).to_image(data.shape) region = self.reg.copy(angle=0 * u.deg) if MPL_VERSION < 35 and 'grab_range' in userargs: userargs['maxdist'] = userargs.pop('grab_range') if 'twit' in userargs: with pytest.raises(TypeError, match=(r'__init__.. got an unexpected keyword argument')): selector = region.as_mpl_selector(ax, callback=update_mask, **userargs) else: selector = region.as_mpl_selector(ax, callback=update_mask, **userargs) assert region._mpl_selector.artists[0].get_edgecolor() == (0, 0, 1, 1) if 'props' in userargs: assert region._mpl_selector.artists[0].get_facecolor() == (0, 0, 1, 1) assert region._mpl_selector.artists[0].get_linewidth() == 2 else: assert region._mpl_selector.artists[0].get_facecolor() == (0, 0, 0, 0) assert region._mpl_selector.artists[0].get_linewidth() == 1 for key, val in userargs.items(): assert getattr(region._mpl_selector, key) == val assert getattr(selector, key) == val def test_rectangular_pixel_region_bbox(): # odd sizes width = 7 height = 3 a = RectanglePixelRegion(PixCoord(50, 50), width=width, height=height, angle=0. * u.deg) assert a.bounding_box.shape == (height, width) a = RectanglePixelRegion(PixCoord(50.5, 50.5), width=width, height=height, angle=0. * u.deg) assert a.bounding_box.shape == (height + 1, width + 1) a = RectanglePixelRegion(PixCoord(50, 50), width=width, height=height, angle=90. * u.deg) assert a.bounding_box.shape == (width, height) # even sizes width = 8 height = 4 a = RectanglePixelRegion(PixCoord(50, 50), width=width, height=height, angle=0. * u.deg) assert a.bounding_box.shape == (height + 1, width + 1) a = RectanglePixelRegion(PixCoord(50.5, 50.5), width=width, height=height, angle=0. * u.deg) assert a.bounding_box.shape == (height, width) a = RectanglePixelRegion(PixCoord(50.5, 50.5), width=width, height=height, angle=90. * u.deg) assert a.bounding_box.shape == (width, height) class TestRectangleSkyRegion(BaseTestSkyRegion): meta = RegionMeta({'text': 'test'}) visual = RegionVisual({'color': 'blue'}) reg = RectangleSkyRegion(center=SkyCoord(3, 4, unit='deg'), width=4 * u.deg, height=3 * u.deg, angle=5 * u.deg, meta=meta, visual=visual) expected_repr = (', width=4.0 deg, height=3.0 deg, ' 'angle=5.0 deg)>') expected_str = ('Region: RectangleSkyRegion\ncenter: \nwidth: ' '4.0 deg\nheight: 3.0 deg\nangle: 5.0 deg') def test_copy(self): reg = self.reg.copy() assert_allclose(reg.center.ra.deg, 3) assert_allclose(reg.width.to_value('deg'), 4) assert_allclose(reg.height.to_value('deg'), 3) assert_allclose(reg.angle.to_value('deg'), 5) assert reg.meta == self.meta assert reg.visual == self.visual def test_contains(self, wcs): position = SkyCoord([1, 3] * u.deg, [2, 4] * u.deg) # 1,2 is outside, 3,4 is the center and is inside assert all(self.reg.contains(position, wcs) == np.array([False, True], dtype='bool')) def test_eq(self): reg = self.reg.copy() assert reg == self.reg reg.angle = 10 * u.deg assert reg != self.reg ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/shapes/tests/test_text.py0000644000175100001770000000721014525470416021134 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst import astropy.units as u import numpy as np import pytest from astropy.coordinates import SkyCoord from astropy.io import fits from astropy.utils.data import get_pkg_data_filename from astropy.wcs import WCS from numpy.testing import assert_allclose from regions.core import PixCoord, RegionMeta, RegionVisual from regions.shapes.tests.test_common import (BaseTestPixelRegion, BaseTestSkyRegion) from regions.shapes.text import TextPixelRegion, TextSkyRegion from regions.tests.helpers import make_simple_wcs @pytest.fixture(scope='session', name='wcs') def wcs_fixture(): filename = get_pkg_data_filename('data/example_header.fits') header = fits.getheader(filename) return WCS(header) class TestTextPixelRegion(BaseTestPixelRegion): meta = RegionMeta({'text': 'test'}) visual = RegionVisual({'color': 'blue'}) reg = TextPixelRegion(PixCoord(3, 4), 'Sample Text', meta=meta, visual=visual) sample_box = [-2, 8, -1, 9] inside = [] outside = [(3.1, 4.2), (5, 4)] expected_area = 0 expected_repr = ('") expected_str = ('Region: TextPixelRegion\ncenter: PixCoord(x=3, y=4)\n' "text: 'Sample Text'") def test_copy(self): reg = self.reg.copy() assert reg.center.xy == (3, 4) assert reg.text == 'Sample Text' assert reg.meta == self.meta assert reg.visual == self.visual def test_pix_sky_roundtrip(self): wcs = make_simple_wcs(SkyCoord(2 * u.deg, 3 * u.deg), 0.1 * u.deg, 20) reg_new = self.reg.to_sky(wcs).to_pixel(wcs) assert_allclose(reg_new.center.x, self.reg.center.x) assert_allclose(reg_new.center.y, self.reg.center.y) assert reg_new.meta == self.reg.meta assert reg_new.visual == self.reg.visual # test that converted region meta and visual are copies and not views reg_new.meta['text'] = 'new' reg_new.visual['color'] = 'green' assert reg_new.meta['text'] != self.reg.meta['text'] assert reg_new.visual['color'] != self.reg.visual['color'] def test_rotate(self): reg = self.reg.rotate(PixCoord(2, 3), 90 * u.deg) assert_allclose(reg.center.xy, (1, 4)) def test_eq(self): reg = self.reg.copy() assert reg == self.reg reg.text = 'Hello World!' assert reg != self.reg class TestTextSkyRegion(BaseTestSkyRegion): meta = RegionMeta({'text': 'test'}) visual = RegionVisual({'color': 'blue'}) reg = TextSkyRegion(SkyCoord(3, 4, unit='deg'), 'Sample Text', meta=meta, visual=visual) expected_repr = (', text='Sample Text')>") expected_str = ('Region: TextSkyRegion\ncenter: \ntext: 'Sample Text'") def test_copy(self): reg = self.reg.copy() assert_allclose(reg.center.ra.deg, 3) assert reg.text == 'Sample Text' assert reg.meta == self.meta assert reg.visual == self.visual def test_contains(self, wcs): position = SkyCoord([1, 2] * u.deg, [3, 4] * u.deg) # Nothing is in a text region assert all(self.reg.contains(position, wcs) == np.array([False, False], dtype='bool')) def test_eq(self): reg = self.reg.copy() assert reg == self.reg reg.text = 'Hello World!' assert reg != self.reg ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/shapes/text.py0000644000175100001770000001164014525470416016735 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst """ This module defines text regions in both pixel and sky coordinates. """ from regions._utils.wcs_helpers import pixel_scale_angle_at_skycoord from regions.core.attributes import (RegionMetaDescr, RegionVisualDescr, ScalarPixCoord, ScalarSkyCoord) from regions.shapes.point import PointPixelRegion, PointSkyRegion __all__ = ['TextSkyRegion', 'TextPixelRegion'] class TextPixelRegion(PointPixelRegion): """ A text string in pixel coordinates. Parameters ---------- center : `~regions.PixCoord` The leftmost point of the text string before rotation. text : str The text string. meta : `~regions.RegionMeta` or `dict`, optional A dictionary that stores the meta attributes of the region. visual : `~regions.RegionVisual` or `dict`, optional A dictionary that stores the visual meta attributes of the region. Examples -------- .. plot:: :include-source: from regions import PixCoord, TextPixelRegion, RegionVisual import matplotlib.pyplot as plt fig, ax = plt.subplots(1, 1) center = PixCoord(x=15, y=10) visual = RegionVisual({'textangle': 30}) reg = TextPixelRegion(center=center, text="Hello World!", visual=visual) reg.plot(ax=ax) ax.set_xlim(10, 30) ax.set_ylim(2.5, 20) ax.set_aspect('equal') """ _params = ('center', 'text') _mpl_artist = 'Text' center = ScalarPixCoord('The leftmost pixel position (before rotation) ' 'as a |PixCoord|.') meta = RegionMetaDescr('The meta attributes as a |RegionMeta|') visual = RegionVisualDescr('The visual attributes as a |RegionVisual|.') def __init__(self, center, text, meta=None, visual=None): super().__init__(center, meta, visual) self.text = text def to_sky(self, wcs): center = wcs.pixel_to_world(self.center.x, self.center.y) # rotation value is relative to the coordinate system axes; # convert from counterclockwise angle from the positive x axis # to angle relative to WCS longitude axis visual = self.visual if 'rotation' in self.visual: _, _, angle = pixel_scale_angle_at_skycoord(center, wcs) visual = visual.copy() visual['rotation'] -= angle.to('deg').value - 90. return TextSkyRegion(center, self.text, meta=self.meta.copy(), visual=visual.copy()) def as_artist(self, origin=(0, 0), **kwargs): """ Return a matplotlib Text object for this region (`matplotlib.text.Text`). Parameters ---------- origin : array_like, optional The ``(x, y)`` pixel position of the origin of the displayed image. **kwargs : dict Any keyword arguments accepted by `~matplotlib.text.Text`. These keywords will override any visual meta attributes of this region. Returns ------- artist : `~matplotlib.text.Text` A matplotlib Text object. """ from matplotlib.text import Text mpl_kwargs = self.visual.define_mpl_kwargs(self._mpl_artist) mpl_kwargs.update(kwargs) return Text(self.center.x - origin[0], self.center.y - origin[1], self.text, **mpl_kwargs) class TextSkyRegion(PointSkyRegion): """ A text string in sky coordinates. Parameters ---------- center : `~astropy.coordinates.SkyCoord` The leftmost position of the text string before rotation. text : str The text string. meta : `~regions.RegionMeta` or `dict`, optional A dictionary that stores the meta attributes of the region. visual : `~regions.RegionVisual` or `dict`, optional A dictionary that stores the visual meta attributes of the region. """ _params = ('center', 'text') center = ScalarSkyCoord('The leftmost position (before rotation) as a ' '|SkyCoord|.') meta = RegionMetaDescr('The meta attributes as a |RegionMeta|') visual = RegionVisualDescr('The visual attributes as a |RegionVisual|.') def __init__(self, center, text, meta=None, visual=None): super().__init__(center, meta, visual) self.text = text def to_pixel(self, wcs): center, _, angle = pixel_scale_angle_at_skycoord(self.center, wcs) # rotation value is relative to the WCS longitude axis; # convert to counterclockwise angle from the positive x axis visual = self.visual if 'rotation' in self.visual: visual = visual.copy() visual['rotation'] += angle.to('deg').value - 90. return TextPixelRegion(center, self.text, meta=self.meta.copy(), visual=visual.copy()) ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1700163875.5385401 regions-0.8/regions/tests/0000755000175100001770000000000014525470444015255 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/tests/__init__.py0000644000175100001770000000000014525470416017353 0ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/regions/tests/helpers.py0000644000175100001770000000571414525470416017277 0ustar00runnerdocker# Licensed under a 3-clause BSD style license - see LICENSE.rst import astropy.units as u import numpy as np from astropy.coordinates import SkyCoord from astropy.tests.helper import assert_quantity_allclose from astropy.wcs import WCS from numpy.testing import assert_allclose from regions.core import PixCoord, Region def make_simple_wcs(skycoord, resolution, size): crpix = (size + 1) / 2 cdelt = resolution.to(u.deg).value skycoord_icrs = skycoord.transform_to('icrs') ra = skycoord_icrs.ra.degree dec = skycoord_icrs.dec.degree wcs = WCS(naxis=2) wcs.wcs.crpix = [crpix, crpix] wcs.wcs.cdelt = np.array([-cdelt, cdelt]) wcs.wcs.crval = [ra, dec] wcs.wcs.ctype = ['RA---TAN', 'DEC--TAN'] return wcs def assert_skycoord_allclose(skycoord1, skycoord2, **kwargs): """ Test that two SkyCoord objects are nearly equal. """ for attr in (skycoord1._extra_frameattr_names | skycoord2._extra_frameattr_names): if not skycoord1.frame._frameattr_equiv(getattr(skycoord1, attr), getattr(skycoord2, attr)): raise ValueError('Extra frame attributes are not equivalent') assert skycoord1.is_equivalent_frame(skycoord2) for attr in (set(skycoord1._sky_coord_frame._data.components) | set(skycoord2._sky_coord_frame._data.components)): sdata1 = skycoord1._sky_coord_frame._data sdata2 = skycoord2._sky_coord_frame._data assert_quantity_allclose(getattr(sdata1, attr), getattr(sdata2, attr), **kwargs) def assert_region_allclose(region1, region2, **kwargs): """ Test that two Region objects have parameters which are nearly equal. Meta and Visual properties are matched identically. """ if not (isinstance(region1, Region) and isinstance(region2, Region)): raise TypeError('Both inputs must be Region instances') # check that both have identical parameters region1_params = list(region1._params) region2_params = list(region2._params) if region1_params != region2_params: raise ValueError('Inputs do not have the same parameters') assert region1.meta == region2.meta assert region1.visual == region2.visual # now check the parameter values # Note that Quantity comparisons allow for different units # if they directly convertible (e.g., 1. * u.deg == 60. * u.arcmin) for param in region1_params: value1 = getattr(region1, param) value2 = getattr(region2, param) if isinstance(value1, SkyCoord): assert_skycoord_allclose(value1, value2, **kwargs) elif isinstance(value1, PixCoord): assert_allclose(value1.xy, value2.xy) elif isinstance(value1, u.Quantity): assert_quantity_allclose(value1, value2, **kwargs) elif isinstance(value1, str): assert value1 == value2 else: assert_allclose(value1, value2) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163875.0 regions-0.8/regions/version.py0000644000175100001770000000062614525470443016155 0ustar00runnerdocker# file generated by setuptools_scm # don't change, don't track in version control TYPE_CHECKING = False if TYPE_CHECKING: from typing import Tuple, Union VERSION_TUPLE = Tuple[Union[int, str], ...] else: VERSION_TUPLE = object version: str __version__: str __version_tuple__: VERSION_TUPLE version_tuple: VERSION_TUPLE __version__ = version = '0.8' __version_tuple__ = version_tuple = (0, 8) ././@PaxHeader0000000000000000000000000000003200000000000010210 xustar0026 mtime=1700163875.51454 regions-0.8/regions.egg-info/0000755000175100001770000000000014525470444015605 5ustar00runnerdocker././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163875.0 regions-0.8/regions.egg-info/PKG-INFO0000644000175100001770000001324714525470443016710 0ustar00runnerdockerMetadata-Version: 2.1 Name: regions Version: 0.8 Summary: An Astropy coordinated package for region handling Author-email: Regions Developers License: Copyright (c) 2015-2023, Regions Developers All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. Project-URL: Homepage, https://github.com/astropy/regions Project-URL: Documentation, https://astropy-regions.readthedocs.io/en/stable/ Keywords: astronomy,astrophysics,astropy,regions Classifier: Intended Audience :: Science/Research Classifier: License :: OSI Approved :: BSD License Classifier: Natural Language :: English Classifier: Operating System :: OS Independent Classifier: Programming Language :: Cython Classifier: Programming Language :: Python Classifier: Programming Language :: Python :: 3 Classifier: Topic :: Scientific/Engineering :: Astronomy Requires-Python: >=3.9 Description-Content-Type: text/x-rst License-File: LICENSE.rst Requires-Dist: numpy>=1.22 Requires-Dist: astropy>=5.0 Provides-Extra: all Requires-Dist: matplotlib>=3.5; extra == "all" Requires-Dist: shapely; extra == "all" Provides-Extra: test Requires-Dist: pytest-arraydiff; extra == "test" Requires-Dist: pytest-astropy>=0.10; extra == "test" Provides-Extra: docs Requires-Dist: regions[all]; extra == "docs" Requires-Dist: sphinx-astropy>=1.6; extra == "docs" Requires-Dist: tomli; python_version < "3.11" and extra == "docs" ======= Regions ======= |PyPI Version| |Conda Version| |Astropy| |CI Status| |Codecov Status| |Latest RTD Status| Regions is an `Astropy`_ package for region handling. Please see the `online documentation `_ for `installation instructions `_ and usage information. Citing Regions -------------- |Zenodo| If you use Regions for a project that leads to a publication, whether directly or as a dependency of another package, please include the following acknowledgment:: This research made use of Regions, an Astropy package for region handling (Bradley et al. 202X). where (Bradley et al. 202X) is a citation to the `Zenodo record `_ of the Regions version that was used. We also encourage citations in the main text wherever appropriate. Please see the `CITATION `_ file for details and an example BibTeX entry. License ------- Regions is licensed under a BSD 3-clause license. Please see the `LICENSE `_ file for details. .. |PyPI Version| image:: https://img.shields.io/pypi/v/regions.svg?logo=pypi&logoColor=white&label=PyPI :target: https://pypi.org/project/regions/ :alt: PyPI Latest Release .. |Conda Version| image:: https://img.shields.io/conda/vn/conda-forge/regions?label=conda%20package :target: https://anaconda.org/conda-forge/regions :alt: Conda Latest Release .. |Astropy| image:: https://img.shields.io/badge/powered%20by-AstroPy-orange.svg?style=flat :target: https://www.astropy.org/ :alt: Powered by Astropy .. |Zenodo| image:: https://zenodo.org/badge/35690635.svg :target: https://zenodo.org/badge/latestdoi/35690635 .. |CI Status| image:: https://github.com/astropy/regions/workflows/CI%20Tests/badge.svg# :target: https://github.com/astropy/regions/actions :alt: CI Status .. |Codecov Status| image:: https://img.shields.io/codecov/c/github/astropy/regions?logo=codecov :target: https://codecov.io/gh/astropy/regions :alt: Coverage Status .. |Stable RTD Status| image:: https://img.shields.io/readthedocs/astropy-regions/latest.svg?logo=read%20the%20docs&logoColor=white&label=Docs&version=stable :target: https://astropy-regions.readthedocs.io/en/stable/ :alt: Stable Documentation Status .. |Latest RTD Status| image:: https://img.shields.io/readthedocs/astropy-regions/latest.svg?logo=read%20the%20docs&logoColor=white&label=Docs&version=latest :target: https://astropy-regions.readthedocs.io/en/latest/ :alt: Latest Documentation Status .. _Astropy: https://www.astropy.org/ ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163875.0 regions-0.8/regions.egg-info/SOURCES.txt0000644000175100001770000001526114525470443017475 0ustar00runnerdocker.flake8 .gitattributes .gitignore .pre-commit-config.yaml .pycodestyle .readthedocs.yaml CHANGES.rst CITATION.md LICENSE.rst README.rst codecov.yml pyproject.toml setup.py tox.ini ./regions/_geometry/circular_overlap.pyx ./regions/_geometry/core.pyx ./regions/_geometry/elliptical_overlap.pyx ./regions/_geometry/pnpoly.pyx ./regions/_geometry/polygonal_overlap.pyx ./regions/_geometry/rectangular_overlap.pyx .github/workflows/ci_cron_daily.yml .github/workflows/ci_cron_weekly.yml .github/workflows/ci_tests.yml .github/workflows/codeql.yml .github/workflows/publish.yml dev/README.md dev/regions_parse.py dev/regions_pyregion_comparison.csv dev/regions_pyregion_comparison.py docs/Makefile docs/api.rst docs/changelog.rst docs/common_links.txt docs/compound.rst docs/conf.py docs/contains.rst docs/contributing.rst docs/ds9_io.rst docs/fits_io.rst docs/getting_started.rst docs/index.rst docs/install.rst docs/license.rst docs/make.bat docs/masks.rst docs/metadata.rst docs/nitpick-exceptions.txt docs/plotting.rst docs/references.txt docs/region_io.rst docs/shapely.rst docs/shapes.rst docs/_static/region_ds9.png docs/_static/region_mpl.png regions/CITATION.rst regions/__init__.py regions/_astropy_init.py regions/_compiler.c regions/conftest.py regions/version.py regions.egg-info/PKG-INFO regions.egg-info/SOURCES.txt regions.egg-info/dependency_links.txt regions.egg-info/not-zip-safe regions.egg-info/requires.txt regions.egg-info/top_level.txt regions/_geometry/README.md regions/_geometry/__init__.py regions/_geometry/circular_overlap.pyx regions/_geometry/core.pxd regions/_geometry/core.pyx regions/_geometry/elliptical_overlap.pyx regions/_geometry/pnpoly.pxd regions/_geometry/pnpoly.pyx regions/_geometry/polygonal_overlap.pyx regions/_geometry/rectangular_overlap.pyx regions/_geometry/tests/__init__.py regions/_geometry/tests/test_circular_overlap_grid.py regions/_geometry/tests/test_elliptical_overlap_grid.py regions/_geometry/tests/test_rectangular_overlap_grid.py regions/_utils/__init__.py regions/_utils/examples.py regions/_utils/optional_deps.py regions/_utils/wcs_helpers.py regions/_utils/tests/__init__.py regions/_utils/tests/test_examples.py regions/core/__init__.py regions/core/attributes.py regions/core/bounding_box.py regions/core/compound.py regions/core/core.py regions/core/mask.py regions/core/metadata.py regions/core/pixcoord.py regions/core/regions.py regions/core/registry.py regions/core/tests/__init__.py regions/core/tests/test_bounding_box.py regions/core/tests/test_compound.py regions/core/tests/test_mask.py regions/core/tests/test_metadata.py regions/core/tests/test_pixcoord.py regions/core/tests/test_regions.py regions/io/__init__.py regions/io/crtf/__init__.py regions/io/crtf/connect.py regions/io/crtf/core.py regions/io/crtf/io_core.py regions/io/crtf/read.py regions/io/crtf/write.py regions/io/crtf/tests/__init__.py regions/io/crtf/tests/test_casa_mask.py regions/io/crtf/tests/test_crtf.py regions/io/crtf/tests/test_io_core.py regions/io/crtf/tests/data/CRTF_CARTA.crtf regions/io/crtf/tests/data/CRTF_labelcolor.crtf regions/io/crtf/tests/data/CRTF_labelcolor_output.crtf regions/io/crtf/tests/data/CRTFgeneral.crtf regions/io/crtf/tests/data/CRTFgeneraloutput.crtf regions/io/crtf/tests/data/binary_mask.pkl regions/io/crtf/tests/data/crtf_carta_sexagesimal.crtf regions/io/ds9/__init__.py regions/io/ds9/connect.py regions/io/ds9/core.py regions/io/ds9/meta.py regions/io/ds9/read.py regions/io/ds9/write.py regions/io/ds9/tests/__init__.py regions/io/ds9/tests/test_ds9.py regions/io/ds9/tests/data/ds9.color.reg regions/io/ds9/tests/data/ds9.color.spaces.reg regions/io/ds9/tests/data/ds9.composite.reg regions/io/ds9/tests/data/ds9.ecliptic.hms.reg regions/io/ds9/tests/data/ds9.ecliptic.reg regions/io/ds9/tests/data/ds9.fits.reg regions/io/ds9/tests/data/ds9.fk4.hms.reg regions/io/ds9/tests/data/ds9.fk4.reg regions/io/ds9/tests/data/ds9.fk5.hms.reg regions/io/ds9/tests/data/ds9.fk5.reg regions/io/ds9/tests/data/ds9.galactic.hms.reg regions/io/ds9/tests/data/ds9.galactic.reg regions/io/ds9/tests/data/ds9.icrs.hms.reg regions/io/ds9/tests/data/ds9.icrs.oneline.reg regions/io/ds9/tests/data/ds9.icrs.reg regions/io/ds9/tests/data/ds9.image.oneline.reg regions/io/ds9/tests/data/ds9.image.reg regions/io/ds9/tests/data/fk5_reference.reg regions/io/ds9/tests/data/galactic_reference.reg regions/io/ds9/tests/data/plot_image.reg regions/io/fits/__init__.py regions/io/fits/connect.py regions/io/fits/core.py regions/io/fits/read.py regions/io/fits/write.py regions/io/fits/tests/__init__.py regions/io/fits/tests/test_fits.py regions/io/fits/tests/data/regions_nowcs.fits regions/io/fits/tests/data/regions_wcs.fits regions/shapes/__init__.py regions/shapes/annulus.py regions/shapes/circle.py regions/shapes/ellipse.py regions/shapes/line.py regions/shapes/point.py regions/shapes/polygon.py regions/shapes/rectangle.py regions/shapes/text.py regions/shapes/tests/__init__.py regions/shapes/tests/setup_package.py regions/shapes/tests/test_annulus.py regions/shapes/tests/test_api.py regions/shapes/tests/test_circle.py regions/shapes/tests/test_common.py regions/shapes/tests/test_ellipse.py regions/shapes/tests/test_line.py regions/shapes/tests/test_masks.py regions/shapes/tests/test_point.py regions/shapes/tests/test_polygon.py regions/shapes/tests/test_rectangle.py regions/shapes/tests/test_text.py regions/shapes/tests/data/example_header.fits regions/shapes/tests/reference/test_to_mask_circ-mode_center.txt regions/shapes/tests/reference/test_to_mask_circ-mode_exact.txt regions/shapes/tests/reference/test_to_mask_circ-mode_subpixels-subpixels_1.txt regions/shapes/tests/reference/test_to_mask_circ-mode_subpixels-subpixels_18.txt regions/shapes/tests/reference/test_to_mask_circ-mode_subpixels-subpixels_5.txt regions/shapes/tests/reference/test_to_mask_elli-mode_center.txt regions/shapes/tests/reference/test_to_mask_elli-mode_exact.txt regions/shapes/tests/reference/test_to_mask_elli-mode_subpixels-subpixels_1.txt regions/shapes/tests/reference/test_to_mask_elli-mode_subpixels-subpixels_18.txt regions/shapes/tests/reference/test_to_mask_elli-mode_subpixels-subpixels_5.txt regions/shapes/tests/reference/test_to_mask_poly-mode_center.txt regions/shapes/tests/reference/test_to_mask_poly-mode_subpixels-subpixels_1.txt regions/shapes/tests/reference/test_to_mask_poly-mode_subpixels-subpixels_18.txt regions/shapes/tests/reference/test_to_mask_poly-mode_subpixels-subpixels_5.txt regions/shapes/tests/reference/test_to_mask_rect-mode_center.txt regions/shapes/tests/reference/test_to_mask_rect-mode_subpixels-subpixels_1.txt regions/shapes/tests/reference/test_to_mask_rect-mode_subpixels-subpixels_18.txt regions/shapes/tests/reference/test_to_mask_rect-mode_subpixels-subpixels_5.txt regions/tests/__init__.py regions/tests/helpers.py././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163875.0 regions-0.8/regions.egg-info/dependency_links.txt0000644000175100001770000000000114525470443021652 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163874.0 regions-0.8/regions.egg-info/not-zip-safe0000644000175100001770000000000114525470442020031 0ustar00runnerdocker ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163875.0 regions-0.8/regions.egg-info/requires.txt0000644000175100001770000000026514525470443020207 0ustar00runnerdockernumpy>=1.22 astropy>=5.0 [all] matplotlib>=3.5 shapely [docs] regions[all] sphinx-astropy>=1.6 [docs:python_version < "3.11"] tomli [test] pytest-arraydiff pytest-astropy>=0.10 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163875.0 regions-0.8/regions.egg-info/top_level.txt0000644000175100001770000000001014525470443020325 0ustar00runnerdockerregions ././@PaxHeader0000000000000000000000000000003400000000000010212 xustar0028 mtime=1700163875.5385401 regions-0.8/setup.cfg0000644000175100001770000000004614525470444014266 0ustar00runnerdocker[egg_info] tag_build = tag_date = 0 ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/setup.py0000755000175100001770000000030714525470416014161 0ustar00runnerdocker#!/usr/bin/env python # Licensed under a 3-clause BSD style license - see LICENSE.rst from setuptools import setup from extension_helpers import get_extensions setup(ext_modules=get_extensions()) ././@PaxHeader0000000000000000000000000000002600000000000010213 xustar0022 mtime=1700163854.0 regions-0.8/tox.ini0000644000175100001770000001030514525470416013756 0ustar00runnerdocker[tox] envlist = py{39,310,311,312}-test{,-alldeps,-devdeps,-oldestdeps,-devinfra}{,-cov} py{39,310,311,312}-test-numpy{122,123,124,125,126} build_docs linkcheck codestyle pep517 bandit requires = setuptools >= 61.2 pip >= 19.3.1 isolated_build = true indexserver = NRAO = https://casa-pip.nrao.edu/repository/pypi-group/simple [testenv] # Suppress display of matplotlib plots generated during docs build setenv = MPLBACKEND=agg devdeps: PIP_EXTRA_INDEX_URL = https://pypi.anaconda.org/scientific-python-nightly-wheels/simple https://pypi.anaconda.org/astropy/simple # Pass through the following environment variables which may be needed # for the CI passenv = HOME,WINDIR,LC_ALL,LC_CTYPE,CC,CI # Run the tests in a temporary directory to make sure that we don't # import this package from the source tree changedir = .tmp/{envname} # tox environments are constructed with so-called 'factors' (or terms) # separated by hyphens, e.g., test-devdeps-cov. Lines below starting # with factor: will only take effect if that factor is included in the # environment name. To see a list of example environments that can be run, # along with a description, run: # # tox -l -v # description = run tests alldeps: with all optional dependencies devdeps: with the latest developer version of key dependencies devinfra: like devdeps but also dev version of infrastructure oldestdeps: with the oldest supported version of key dependencies cov: and test coverage numpy122: with numpy 1.22.* numpy123: with numpy 1.23.* numpy124: with numpy 1.24.* numpy125: with numpy 1.25.* numpy126: with numpy 1.26.* casa: with casatools and casatasks # The following provides some specific pinnings for key packages deps = cov: pytest-cov numpy122: numpy==1.22.* numpy123: numpy==1.23.* numpy124: numpy==1.24.* numpy125: numpy==1.25.* numpy126: numpy==1.26.* casa: :NRAO:casatools casa: :NRAO:casatasks oldestdeps: numpy==1.22 oldestdeps: astropy==5.0 oldestdeps: matplotlib==3.5 oldestdeps: pytest-astropy==0.10 devdeps: numpy>=0.0.dev0 devdeps: matplotlib>=0.0.dev0 devdeps: astropy>=0.0.dev0 # Latest developer version of infrastructure packages. devinfra: git+https://github.com/pytest-dev/pytest.git devinfra: git+https://github.com/astropy/extension-helpers.git devinfra: git+https://github.com/astropy/pytest-doctestplus.git devinfra: git+https://github.com/astropy/pytest-remotedata.git devinfra: git+https://github.com/astropy/pytest-astropy-header.git devinfra: git+https://github.com/astropy/pytest-arraydiff.git devinfra: git+https://github.com/astropy/pytest-filter-subpackage.git devinfra: git+https://github.com/astropy/pytest-astropy.git # The following indicates which [project.optional-dependencies] from # pyproject.toml will be installed extras = test: test alldeps: all build_docs: docs commands = # Force numpy-dev after matplotlib downgrades it # (https://github.com/matplotlib/matplotlib/issues/26847) devdeps: python -m pip install --pre --upgrade --extra-index-url https://pypi.anaconda.org/scientific-python-nightly-wheels/simple numpy pip freeze pytest --pyargs regions {toxinidir}/docs \ cov: --cov regions --cov-config={toxinidir}/pyproject.toml --cov-report xml:{toxinidir}/coverage.xml \ {posargs} [testenv:build_docs] changedir = docs description = invoke sphinx-build to build the HTML docs extras = docs commands = pip freeze sphinx-build -W -b html . _build/html [testenv:linkcheck] changedir = docs description = check the links in the HTML docs extras = docs commands = pip freeze sphinx-build -W -b linkcheck . _build/html [testenv:codestyle] skip_install = true changedir = . description = check code style with flake8 deps = flake8 commands = flake8 regions --count --max-line-length=100 [testenv:pep517] skip_install = true changedir = . description = PEP 517 deps = build twine commands = python -m build --sdist . twine check dist/* --strict [testenv:bandit] skip_install = true changedir = . description = security check with bandit deps = bandit commands = bandit -r regions -c pyproject.toml